@bitgo-beta/sdk-coin-ada 2.3.14-beta.52 → 2.3.14-beta.54

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/dist/src/ada.d.ts CHANGED
@@ -28,6 +28,7 @@ interface RecoveryOptions {
28
28
  interface AdaTx {
29
29
  serializedTx: string;
30
30
  scanIndex: number;
31
+ coin?: string;
31
32
  }
32
33
  export declare type AdaTransactionExplanation = TransactionExplanation;
33
34
  export declare class Ada extends BaseCoin {
@@ -1 +1 @@
1
- {"version":3,"file":"ada.d.ts","sourceRoot":"","sources":["../../src/ada.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ada.d.ts","sourceRoot":"","sources":["../../src/ada.ts"],"names":[],"mappings":"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"}
package/dist/src/ada.js CHANGED
@@ -310,6 +310,9 @@ class Ada extends sdk_core_1.BaseCoin {
310
310
  const signedTransaction = await txBuilder.build();
311
311
  serializedTx = signedTransaction.toBroadcastFormat();
312
312
  }
313
+ else {
314
+ return { serializedTx: serializedTx, scanIndex: i, coin: this.getChain() };
315
+ }
313
316
  return { serializedTx: serializedTx, scanIndex: i };
314
317
  }
315
318
  throw new Error('Did not find an address with funds to recover');
@@ -331,4 +334,4 @@ class Ada extends sdk_core_1.BaseCoin {
331
334
  }
332
335
  }
333
336
  exports.Ada = Ada;
334
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FkYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLG1EQW1COEI7QUFDOUIsK0JBQTZGO0FBQzdGLGlEQUFxRjtBQUNyRix3REFBbUM7QUFDbkMsb0RBQXNDO0FBcUN0QyxNQUFhLEdBQUksU0FBUSxtQkFBUTtJQUUvQixZQUFzQixLQUFnQixFQUFFLFdBQXVDO1FBQzdFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNiLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO1NBQ3ZFO1FBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUM7SUFDbEMsQ0FBQztJQUVELE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBZ0IsRUFBRSxXQUF1QztRQUM3RSxPQUFPLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxhQUFhO1FBQ2xCLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVNLFFBQVE7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO0lBQ2hDLENBQUM7SUFFTSxTQUFTO1FBQ2QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQztJQUNsQyxDQUFDO0lBRU0sV0FBVztRQUNoQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxZQUFZO1FBQ1YsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUNEOzs7Ozs7Ozs7T0FTRztJQUNILEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxNQUFnQztRQUN0RCxJQUFJO1lBQ0YsTUFBTSxVQUFVLEdBQUcsZUFBSyxDQUFDLEdB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Q0FBQyxpQkFBaUIsRUFBRSxDQUFDO2FBQ3REO1lBQ0QsT0FBTyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO1NBQ3JEO1FBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRCxvQkFBb0I7SUFDcEIsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELG9CQUFvQjtJQUNwQixlQUFlO1FBQ2IsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELG9CQUFvQjtJQUNwQiwyQkFBMkI7UUFDekIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU8sVUFBVTtRQUNoQixPQUFPLElBQUksK0JBQXlCLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7Q0FDRjtBQTFWRCxrQkEwVkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQge1xuICBCYXNlQ29pbixcbiAgQmFzZVRyYW5zYWN0aW9uLFxuICBCaXRHb0Jhc2UsXG4gIEludmFsaWRBZGRyZXNzRXJyb3IsXG4gIEtleVBhaXIsXG4gIE1QQ0FsZ29yaXRobSxcbiAgTm9kZUVudmlyb25tZW50RXJyb3IsXG4gIFBhcnNlZFRyYW5zYWN0aW9uLFxuICBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyBhcyBCYXNlUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMsXG4gIFNpZ25lZFRyYW5zYWN0aW9uLFxuICBTaWduVHJhbnNhY3Rpb25PcHRpb25zIGFzIEJhc2VTaWduVHJhbnNhY3Rpb25PcHRpb25zLFxuICBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uLFxuICBWZXJpZnlBZGRyZXNzT3B0aW9ucyxcbiAgVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zLFxuICBFRERTQU1ldGhvZHMsXG4gIEVERFNBTWV0aG9kVHlwZXMsXG4gIEFkZHJlc3NGb3JtYXQsXG4gIEVudmlyb25tZW50cyxcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgS2V5UGFpciBhcyBBZGFLZXlQYWlyLCBUcmFuc2FjdGlvbiwgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSwgVXRpbHMgfSBmcm9tICcuL2xpYic7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBTdGF0aWNzQmFzZUNvaW4sIENvaW5GYW1pbHksIGNvaW5zIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgYWRhVXRpbHMgZnJvbSAnLi9saWIvdXRpbHMnO1xuaW1wb3J0ICogYXMgcmVxdWVzdCBmcm9tICdzdXBlcmFnZW50JztcblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2FjdGlvblByZWJ1aWxkIHtcbiAgdHhIZXg6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zIHtcbiAgdHhQcmVidWlsZDogVHJhbnNhY3Rpb25QcmVidWlsZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZGFQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyBleHRlbmRzIEJhc2VQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyB7XG4gIHR4UHJlYnVpbGQ6IFRyYW5zYWN0aW9uUHJlYnVpbGQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lnblRyYW5zYWN0aW9uT3B0aW9ucyBleHRlbmRzIEJhc2VTaWduVHJhbnNhY3Rpb25PcHRpb25zIHtcbiAgdHhQcmVidWlsZDogVHJhbnNhY3Rpb25QcmVidWlsZDtcbiAgcHJ2OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBSZWNvdmVyeU9wdGlvbnMge1xuICB1c2VyS2V5Pzogc3RyaW5nOyAvLyBCb3ggQVxuICBiYWNrdXBLZXk/OiBzdHJpbmc7IC8vIEJveCBCXG4gIGJpdGdvS2V5OiBzdHJpbmc7IC8vIEJveCBDXG4gIHJlY292ZXJ5RGVzdGluYXRpb246IHN0cmluZztcbiAga3JzUHJvdmlkZXI/OiBzdHJpbmc7XG4gIHdhbGxldFBhc3NwaHJhc2U/OiBzdHJpbmc7XG4gIHN0YXJ0aW5nU2NhbkluZGV4PzogbnVtYmVyO1xuICBzY2FuPzogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgQWRhVHgge1xuICBzZXJpYWxpemVkVHg6IHN0cmluZztcbiAgc2NhbkluZGV4OiBudW1iZXI7XG59XG5cbmV4cG9ydCB0eXBlIEFkYVRyYW5zYWN0aW9uRXhwbGFuYXRpb24gPSBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uO1xuXG5leHBvcnQgY2xhc3MgQWRhIGV4dGVuZHMgQmFzZUNvaW4ge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3N0YXRpY3NDb2luOiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+O1xuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoYml0Z286IEJpdEdvQmFzZSwgc3RhdGljc0NvaW4/OiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+KSB7XG4gICAgc3VwZXIoYml0Z28pO1xuICAgIGlmICghc3RhdGljc0NvaW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCBjb25zdHJ1Y3RvciBwYXJhbWV0ZXIgc3RhdGljc0NvaW4nKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGF0aWNzQ29pbiA9IHN0YXRpY3NDb2luO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZUluc3RhbmNlKGJpdGdvOiBCaXRHb0Jhc2UsIHN0YXRpY3NDb2luPzogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPik6IEJhc2VDb2luIHtcbiAgICByZXR1cm4gbmV3IEFkYShiaXRnbywgc3RhdGljc0NvaW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZhY3RvciBiZXR3ZWVuIHRoZSBjb2luJ3MgYmFzZSB1bml0IGFuZCBpdHMgc21hbGxlc3Qgc3ViZGl2aXNvblxuICAgKi9cbiAgcHVibGljIGdldEJhc2VGYWN0b3IoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gMWU2O1xuICB9XG5cbiAgcHVibGljIGdldENoYWluKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRpY3NDb2luLm5hbWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0RmFtaWx5KCk6IENvaW5GYW1pbHkge1xuICAgIHJldHVybiB0aGlzLl9zdGF0aWNzQ29pbi5mYW1pbHk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RnVsbE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGljc0NvaW4uZnVsbE5hbWU7XG4gIH1cblxuICBnZXRCYXNlQ2hhaW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDaGFpbigpO1xuICB9XG4gIC8qKlxuICAgKiBWZXJpZnkgdGhhdCBhIHRyYW5zYWN0aW9uIHByZWJ1aWxkIGNvbXBsaWVzIHdpdGggdGhlIG9yaWdpbmFsIGludGVudGlvblxuICAgKiAgQSBwcmVidWlsZCB0cmFuc2FjdGlvbiBoYXMgdG8gYmUgcGFyc2VkIGNvcnJlY3RseSBhbmQgaW50ZW5kZWQgcmVjaXBpZW50cyBoYXMgdG8gYmVcbiAgICogIGluIHRoZSB0cmFuc2FjdGlvbiBvdXRwdXRcbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcy50eFByZWJ1aWxkIHByZWJ1aWxkIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSBwYXJhbXMudHhQYXJhbXMgdHJhbnNhY3Rpb24gcGFyYW1ldGVyc1xuICAgKiBAcmV0dXJuIHRydWUgaWYgdmVyaWZpY2F0aW9uIHN1Y2Nlc3NcbiAgICpcbiAgICovXG4gIGFzeW5jIHZlcmlmeVRyYW5zYWN0aW9uKHBhcmFtczogVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvaW5Db25maWcgPSBjb2lucy5nZXQodGhpcy5nZXRDaGFpbigpKTtcbiAgICAgIGNvbnN0IHsgdHhQcmVidWlsZDogdHhQcmVidWlsZCwgdHhQYXJhbXM6IHR4UGFyYW1zIH0gPSBwYXJhbXM7XG4gICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbihjb2luQ29uZmlnKTtcbiAgICAgIGFzc2VydCh0eFByZWJ1aWxkLnR4SGV4LCBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgdHggcHJlYnVpbGQgcHJvcGVydHkgdHhIZXgnKSk7XG4gICAgICBjb25zdCByYXdUeCA9IHR4UHJlYnVpbGQudHhIZXg7XG5cbiAgICAgIHRyYW5zYWN0aW9uLmZyb21SYXdUcmFuc2FjdGlvbihyYXdUeCk7XG4gICAgICBjb25zdCBleHBsYWluZWRUeCA9IHRyYW5zYWN0aW9uLmV4cGxhaW5UcmFuc2FjdGlvbigpO1xuXG4gICAgICBpZiAodHhQYXJhbXMucmVjaXBpZW50cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGZvciAoY29uc3QgcmVjaXBpZW50IG9mIHR4UGFyYW1zLnJlY2lwaWVudHMpIHtcbiAgICAgICAgICBsZXQgZmluZCA9IGZhbHNlO1xuICAgICAgICAgIGZvciAoY29uc3Qgb3V0cHV0IG9mIGV4cGxhaW5lZFR4Lm91dHB1dHMpIHtcbiAgICAgICAgICAgIGlmIChyZWNpcGllbnQuYWRkcmVzcyA9PT0gb3V0cHV0LmFkZHJlc3MgJiYgcmVjaXBpZW50LmFtb3VudCA9PT0gb3V0cHV0LmFtb3VudCkge1xuICAgICAgICAgICAgICBmaW5kID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFmaW5kKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCBmaW5kIHJlY2lwaWVudCBpbiBleHBlY3RlZCBvdXRwdXQnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIE5vZGVFbnZpcm9ubWVudEVycm9yKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhc3luYyBpc1dhbGxldEFkZHJlc3MocGFyYW1zOiBWZXJpZnlBZGRyZXNzT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgYWRkcmVzcyB9ID0gcGFyYW1zO1xuICAgIGlmICghdGhpcy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoYEludmFsaWQgQ2FyZGFubyBBZGRyZXNzOiAke2FkZHJlc3N9YCk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGFzeW5jIHNpZ25NZXNzYWdlKGtleTogS2V5UGFpciwgbWVzc2FnZTogc3RyaW5nIHwgQnVmZmVyKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICBjb25zdCBhZGFLZXlwYWlyID0gbmV3IEFkYUtleVBhaXIoeyBwcnY6IGtleS5wcnYgfSk7XG4gICAgY29uc3QgbWVzc2FnZUhleCA9IG1lc3NhZ2UgaW5zdGFuY2VvZiBCdWZmZXIgPyBtZXNzYWdlLnRvU3RyaW5nKCdoZXgnKSA6IG1lc3NhZ2U7XG5cbiAgICByZXR1cm4gQnVmZmVyLmZyb20oYWRhS2V5cGFpci5zaWduTWVzc2FnZShtZXNzYWdlSGV4KSk7XG4gIH1cblxuICAvKipcbiAgICogRXhwbGFpbi9wYXJzZSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqL1xuICBhc3luYyBleHBsYWluVHJhbnNhY3Rpb24ocGFyYW1zOiBFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxBZGFUcmFuc2FjdGlvbkV4cGxhbmF0aW9uPiB7XG4gICAgY29uc3QgZmFjdG9yeSA9IHRoaXMuZ2V0QnVpbGRlcigpO1xuICAgIGxldCByZWJ1aWx0VHJhbnNhY3Rpb246IEJhc2VUcmFuc2FjdGlvbjtcbiAgICBjb25zdCB0eFJhdyA9IHBhcmFtcy50eFByZWJ1aWxkLnR4SGV4O1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRyYW5zYWN0aW9uQnVpbGRlciA9IGZhY3RvcnkuZnJvbSh0eFJhdyk7XG4gICAgICByZWJ1aWx0VHJhbnNhY3Rpb24gPSBhd2FpdCB0cmFuc2FjdGlvbkJ1aWxkZXIuYnVpbGQoKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbicpO1xuICAgIH1cblxuICAgIHJldHVybiByZWJ1aWx0VHJhbnNhY3Rpb24uZXhwbGFpblRyYW5zYWN0aW9uKCk7XG4gIH1cblxuICBhc3luYyBwYXJzZVRyYW5zYWN0aW9uKHBhcmFtczogQWRhUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPFBhcnNlZFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgdHJhbnNhY3Rpb25FeHBsYW5hdGlvbiA9IGF3YWl0IHRoaXMuZXhwbGFpblRyYW5zYWN0aW9uKHtcbiAgICAgIHR4UHJlYnVpbGQ6IHBhcmFtcy50eFByZWJ1aWxkLFxuICAgIH0pO1xuXG4gICAgaWYgKCF0cmFuc2FjdGlvbkV4cGxhbmF0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJhbnNhY3Rpb25FeHBsYW5hdGlvbiBhcyB1bmtub3duIGFzIFBhcnNlZFRyYW5zYWN0aW9uO1xuICB9XG5cbiAgZ2VuZXJhdGVLZXlQYWlyKHNlZWQ/OiBCdWZmZXIpOiBLZXlQYWlyIHtcbiAgICBjb25zdCBrZXlQYWlyID0gc2VlZCA/IG5ldyBBZGFLZXlQYWlyKHsgc2VlZCB9KSA6IG5ldyBBZGFLZXlQYWlyKCk7XG4gICAgY29uc3Qga2V5cyA9IGtleVBhaXIuZ2V0S2V5cygpO1xuICAgIGlmICgha2V5cy5wcnYpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBwcnYgaW4ga2V5IGdlbmVyYXRpb24uJyk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBwdWI6IGtleXMucHViLFxuICAgICAgcHJ2OiBrZXlzLnBydixcbiAgICB9O1xuICB9XG5cbiAgaXNWYWxpZFB1YihwdWI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhZGFVdGlscy5pc1ZhbGlkUHVibGljS2V5KHB1Yik7XG4gIH1cblxuICBpc1ZhbGlkUHJ2KHBydjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGFkYVV0aWxzLmlzVmFsaWRQcml2YXRlS2V5KHBydik7XG4gIH1cblxuICBpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gYWRhVXRpbHMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcyk7XG4gIH1cblxuICBhc3luYyBzaWduVHJhbnNhY3Rpb24ocGFyYW1zOiBTaWduVHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxTaWduZWRUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IGZhY3RvcnkgPSB0aGlzLmdldEJ1aWxkZXIoKTtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20ocGFyYW1zLnR4UHJlYnVpbGQudHhIZXgpO1xuICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiBwYXJhbXMucHJ2IH0pO1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uOiBCYXNlVHJhbnNhY3Rpb24gPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcblxuICAgIGlmICghdHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbicpO1xuICAgIH1cblxuICAgIGNvbnN0IHNlcmlhbGl6ZWRUeCA9IHRyYW5zYWN0aW9uLnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHhIZXg6IHNlcmlhbGl6ZWRUeCxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFB1YmxpY05vZGVVcmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gRW52aXJvbm1lbnRzW3RoaXMuYml0Z28uZ2V0RW52KCldLmFkYU5vZGVVcmw7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgZ2V0RGF0YUZyb21Ob2RlKGVuZHBvaW50OiBzdHJpbmcsIHJlcXVlc3RCb2R5PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBQcm9taXNlPHJlcXVlc3QuUmVzcG9uc2U+IHtcbiAgICBjb25zdCByZXN0RW5kcG9pbnQgPSB0aGlzLmdldFB1YmxpY05vZGVVcmwoKSArICcvJyArIGVuZHBvaW50O1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCByZXF1ZXN0LnBvc3QocmVzdEVuZHBvaW50KS5zZW5kKHJlcXVlc3RCb2R5KTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5kZWJ1ZyhlKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gY2FsbCBlbmRwb2ludCAke3Jlc3RFbmRwb2ludH1gKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBnZXRBZGRyZXNzSW5mbyhcbiAgICB3YWxsZXRBZGRyOiBzdHJpbmdcbiAgKTogUHJvbWlzZTx7IGJhbGFuY2U6IG51bWJlcjsgdXR4b1NldDogQXJyYXk8UmVjb3JkPHN0cmluZywgYW55Pj4gfT4ge1xuICAgIGNvbnN0IHJlcXVlc3RCb2R5ID0geyBfYWRkcmVzc2VzOiBbd2FsbGV0QWRkcl0gfTtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmdldERhdGFGcm9tTm9kZSgnYWRkcmVzc19pbmZvJywgcmVxdWVzdEJvZHkpO1xuICAgIGlmIChyZXMuc3RhdHVzICE9IDIwMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gcmV0cmlldmUgYWRkcmVzcyBpbmZvIGZvciBhZGRyZXNzICR7d2FsbGV0QWRkcn1gKTtcbiAgICB9XG4gICAgY29uc3QgYm9keSA9IHJlcy5ib2R5WzBdO1xuICAgIGlmIChib2R5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB7IGJhbGFuY2U6IDAsIHV0eG9TZXQ6IFtdIH07XG4gICAgfVxuICAgIHJldHVybiB7IGJhbGFuY2U6IGJvZHkuYmFsYW5jZSwgdXR4b1NldDogYm9keS51dHhvX3NldCB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGdldENoYWluVGlwSW5mbygpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+IHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmdldERhdGFGcm9tTm9kZSgndGlwJyk7XG4gICAgaWYgKHJlcy5zdGF0dXMgIT0gMjAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byByZXRyaWV2ZSBjaGFpbiB0aXAgaW5mbycpO1xuICAgIH1cbiAgICBjb25zdCBib2R5ID0gcmVzLmJvZHlbMF07XG4gICAgcmV0dXJuIGJvZHk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIGEgZnVuZHMgcmVjb3ZlcnkgdHJhbnNhY3Rpb24gd2l0aG91dCBCaXRHb1xuICAgKlxuICAgKiBAcGFyYW0ge1JlY292ZXJ5T3B0aW9uc30gcGFyYW1zIHBhcmFtZXRlcnMgbmVlZGVkIHRvIGNvbnN0cnVjdCBhbmRcbiAgICogKG1heWJlKSBzaWduIHRoZSB0cmFuc2FjdGlvblxuICAgKlxuICAgKiBAcmV0dXJucyB7QWRhVHh9IHRoZSBzZXJpYWxpemVkIHRyYW5zYWN0aW9uIGhleCBzdHJpbmcgYW5kIGluZGV4XG4gICAqIG9mIHRoZSBhZGRyZXNzIGJlaW5nIHN3ZXB0XG4gICAqL1xuICBhc3luYyByZWNvdmVyKHBhcmFtczogUmVjb3ZlcnlPcHRpb25zKTogUHJvbWlzZTxBZGFUeD4ge1xuICAgIGlmICghcGFyYW1zLmJpdGdvS2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgYml0Z29LZXknKTtcbiAgICB9XG4gICAgaWYgKCFwYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbiB8fCAhdGhpcy5pc1ZhbGlkQWRkcmVzcyhwYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCByZWNvdmVyeURlc3RpbmF0aW9uJyk7XG4gICAgfVxuICAgIGxldCBhZGRyRm9ybWF0ID0gQWRkcmVzc0Zvcm1hdC50ZXN0bmV0O1xuICAgIGlmICh0aGlzLmdldENoYWluKCkgPT09ICdhZGEnKSB7XG4gICAgICBhZGRyRm9ybWF0ID0gQWRkcmVzc0Zvcm1hdC5tYWlubmV0O1xuICAgIH1cbiAgICBsZXQgc3RhcnRJZHggPSBwYXJhbXMuc3RhcnRpbmdTY2FuSW5kZXg7XG4gICAgaWYgKHN0YXJ0SWR4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHN0YXJ0SWR4ID0gMDtcbiAgICB9IGVsc2UgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHN0YXJ0SWR4KSB8fCBzdGFydElkeCA8IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzdGFydGluZyBpbmRleCB0byBzY2FuIGZvciBhZGRyZXNzZXMnKTtcbiAgICB9XG4gICAgbGV0IG51bUl0ZXJhdGlvbiA9IHBhcmFtcy5zY2FuO1xuICAgIGlmIChudW1JdGVyYXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgbnVtSXRlcmF0aW9uID0gMjA7XG4gICAgfSBlbHNlIGlmICghTnVtYmVyLmlzSW50ZWdlcihudW1JdGVyYXRpb24pIHx8IG51bUl0ZXJhdGlvbiA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc2Nhbm5pbmcgZmFjdG9yJyk7XG4gICAgfVxuICAgIGNvbnN0IGJpdGdvS2V5ID0gcGFyYW1zLmJpdGdvS2V5LnJlcGxhY2UoL1xccy9nLCAnJyk7XG4gICAgY29uc3QgaXNVbnNpZ25lZFN3ZWVwID0gIXBhcmFtcy51c2VyS2V5ICYmICFwYXJhbXMuYmFja3VwS2V5ICYmICFwYXJhbXMud2FsbGV0UGFzc3BocmFzZTtcbiAgICBjb25zdCBNUEMgPSBhd2FpdCBFRERTQU1ldGhvZHMuZ2V0SW5pdGlhbGl6ZWRNcGNJbnN0YW5jZSgpO1xuICAgIGNvbnN0IHN0YWtlS2V5UGFpciA9IG5ldyBBZGFLZXlQYWlyKHsgcHViOiBNUEMuZGVyaXZlVW5oYXJkZW5lZChiaXRnb0tleSwgJ20vMCcpLnNsaWNlKDAsIDY0KSB9KTtcblxuICAgIGZvciAobGV0IGkgPSBzdGFydElkeDsgaSA8IG51bUl0ZXJhdGlvbiArIHN0YXJ0SWR4OyBpKyspIHtcbiAgICAgIGNvbnN0IGN1cnJQYXRoID0gYG0vJHtpfWA7XG4gICAgICBjb25zdCBhY2NvdW50SWQgPSBNUEMuZGVyaXZlVW5oYXJkZW5lZChiaXRnb0tleSwgY3VyclBhdGgpLnNsaWNlKDAsIDY0KTtcbiAgICAgIGNvbnN0IHBheW1lbnRLZXlQYWlyID0gbmV3IEFkYUtleVBhaXIoeyBwdWI6IGFjY291bnRJZCB9KTtcbiAgICAgIGNvbnN0IHNlbmRlckFkZHIgPSBVdGlscy5kZWZhdWx0LmNyZWF0ZUJhc2VBZGRyZXNzV2l0aFN0YWtlQW5kUGF5bWVudEtleShcbiAgICAgICAgc3Rha2VLZXlQYWlyLFxuICAgICAgICBwYXltZW50S2V5UGFpcixcbiAgICAgICAgYWRkckZvcm1hdFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHsgYmFsYW5jZSwgdXR4b1NldCB9ID0gYXdhaXQgdGhpcy5nZXRBZGRyZXNzSW5mbyhzZW5kZXJBZGRyKTtcbiAgICAgIGlmIChiYWxhbmNlIDw9IDApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGZpcnN0IGJ1aWxkIHRoZSB1bnNpZ25lZCB0eG5cbiAgICAgIGNvbnN0IHRpcEFic1Nsb3QgPSBhd2FpdCB0aGlzLmdldENoYWluVGlwSW5mbygpO1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gdGhpcy5nZXRCdWlsZGVyKCkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIuY2hhbmdlQWRkcmVzcyhwYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbiwgYmFsYW5jZS50b1N0cmluZygpKTtcbiAgICAgIGZvciAoY29uc3QgdXR4byBvZiB1dHhvU2V0KSB7XG4gICAgICAgIHR4QnVpbGRlci5pbnB1dCh7IHRyYW5zYWN0aW9uX2lkOiB1dHhvLnR4X2hhc2gsIHRyYW5zYWN0aW9uX2luZGV4OiB1dHhvLnR4X2luZGV4IH0pO1xuICAgICAgfVxuICAgICAgLy8gZWFjaCBzbG90IGlzIGFib3V0IDEgc2Vjb25kLCBzbyB0aGlzIHRyYW5zYWN0aW9uIHNob3VsZCBiZSB2YWxpZCBmb3JcbiAgICAgIC8vIDcgKiA4Niw0MDAgc2Vjb25kcyAoNyBkYXlzKSBhZnRlciBjcmVhdGlvblxuICAgICAgdHhCdWlsZGVyLnR0bChOdW1iZXIodGlwQWJzU2xvdC5hYnNfc2xvdCkgKyA3ICogODY0MDApO1xuICAgICAgY29uc3QgdW5zaWduZWRUcmFuc2FjdGlvbiA9IChhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG5cbiAgICAgIGxldCBzZXJpYWxpemVkVHggPSB1bnNpZ25lZFRyYW5zYWN0aW9uLnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICBpZiAoIWlzVW5zaWduZWRTd2VlcCkge1xuICAgICAgICBpZiAoIXBhcmFtcy51c2VyS2V5KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHVzZXJLZXknKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXBhcmFtcy5iYWNrdXBLZXkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgYmFja3VwS2V5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFwYXJhbXMud2FsbGV0UGFzc3BocmFzZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyB3YWxsZXQgcGFzc3BocmFzZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2xlYW4gdXAgd2hpdGVzcGFjZSBmcm9tIGVudGVyZWQgdmFsdWVzXG4gICAgICAgIGNvbnN0IHVzZXJLZXkgPSBwYXJhbXMudXNlcktleS5yZXBsYWNlKC9cXHMvZywgJycpO1xuICAgICAgICBjb25zdCBiYWNrdXBLZXkgPSBwYXJhbXMuYmFja3VwS2V5LnJlcGxhY2UoL1xccy9nLCAnJyk7XG5cbiAgICAgICAgLy8gRGVjcnlwdCBwcml2YXRlIGtleXMgZnJvbSBLZXlDYXJkIHZhbHVlc1xuICAgICAgICBsZXQgdXNlclBydjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB1c2VyUHJ2ID0gdGhpcy5iaXRnby5kZWNyeXB0KHtcbiAgICAgICAgICAgIGlucHV0OiB1c2VyS2V5LFxuICAgICAgICAgICAgcGFzc3dvcmQ6IHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBkZWNyeXB0aW5nIHVzZXIga2V5Y2hhaW46ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICAgIC8qKiBUT0RPIEJHLTUyNDE5IEltcGxlbWVudCBDb2RlYyBmb3IgcGFyc2luZyAqL1xuICAgICAgICBjb25zdCB1c2VyU2lnbmluZ01hdGVyaWFsID0gSlNPTi5wYXJzZSh1c2VyUHJ2KSBhcyBFRERTQU1ldGhvZFR5cGVzLlVzZXJTaWduaW5nTWF0ZXJpYWw7XG5cbiAgICAgICAgbGV0IGJhY2t1cFBydjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBiYWNrdXBQcnYgPSB0aGlzLmJpdGdvLmRlY3J5cHQoe1xuICAgICAgICAgICAgaW5wdXQ6IGJhY2t1cEtleSxcbiAgICAgICAgICAgIHBhc3N3b3JkOiBwYXJhbXMud2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3IgZGVjcnlwdGluZyBiYWNrdXAga2V5Y2hhaW46ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJhY2t1cFNpZ25pbmdNYXRlcmlhbCA9IEpTT04ucGFyc2UoYmFja3VwUHJ2KSBhcyBFRERTQU1ldGhvZFR5cGVzLkJhY2t1cFNpZ25pbmdNYXRlcmlhbDtcblxuICAgICAgICAvLyBhZGQgc2lnbmF0dXJlXG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZUhleCA9IGF3YWl0IEVERFNBTWV0aG9kcy5nZXRUU1NTaWduYXR1cmUoXG4gICAgICAgICAgdXNlclNpZ25pbmdNYXRlcmlhbCxcbiAgICAgICAgICBiYWNrdXBTaWduaW5nTWF0ZXJpYWwsXG4gICAgICAgICAgY3VyclBhdGgsXG4gICAgICAgICAgdW5zaWduZWRUcmFuc2FjdGlvblxuICAgICAgICApO1xuICAgICAgICBjb25zdCBhZGFLZXlQYWlyID0gbmV3IEFkYUtleVBhaXIoeyBwdWI6IGFjY291bnRJZCB9KTtcbiAgICAgICAgdHhCdWlsZGVyLmFkZFNpZ25hdHVyZSh7IHB1YjogYWRhS2V5UGFpci5nZXRLZXlzKCkucHViIH0sIHNpZ25hdHVyZUhleCk7XG4gICAgICAgIGNvbnN0IHNpZ25lZFRyYW5zYWN0aW9uID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIHNlcmlhbGl6ZWRUeCA9IHNpZ25lZFRyYW5zYWN0aW9uLnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICB9XG4gICAgICByZXR1cm4geyBzZXJpYWxpemVkVHg6IHNlcmlhbGl6ZWRUeCwgc2NhbkluZGV4OiBpIH07XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignRGlkIG5vdCBmaW5kIGFuIGFkZHJlc3Mgd2l0aCBmdW5kcyB0byByZWNvdmVyJyk7XG4gIH1cblxuICAvKiogaW5oZXJpdGVkIGRvYyAqL1xuICBzdXBwb3J0c1RzcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBpbmhlcml0ZWQgZG9jICovXG4gIGdldE1QQ0FsZ29yaXRobSgpOiBNUENBbGdvcml0aG0ge1xuICAgIHJldHVybiAnZWRkc2EnO1xuICB9XG5cbiAgLyoqIGluaGVyaXRlZCBkb2MgKi9cbiAgYWxsb3dzQWNjb3VudENvbnNvbGlkYXRpb25zKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRCdWlsZGVyKCk6IFRyYW5zYWN0aW9uQnVpbGRlckZhY3Rvcnkge1xuICAgIHJldHVybiBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQodGhpcy5nZXRCYXNlQ2hhaW4oKSkpO1xuICB9XG59XG4iXX0=
337
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FkYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLG1EQW1COEI7QUFDOUIsK0JBQTZGO0FBQzdGLGlEQUFxRjtBQUNyRix3REFBbUM7QUFDbkMsb0RBQXNDO0FBc0N0QyxNQUFhLEdBQUksU0FBUSxtQkFBUTtJQUUvQixZQUFzQixLQUFnQixFQUFFLFdBQXVDO1FBQzdFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNiLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO1NBQ3ZFO1FBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUM7SUFDbEMsQ0FBQztJQUVELE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBZ0IsRUFBRSxXQUF1QztRQUM3RSxPQUFPLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxhQUFhO1FBQ2xCLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVNLFFBQVE7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO0lBQ2hDLENBQUM7SUFFTSxTQUFTO1FBQ2QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQztJQUNsQyxDQUFDO0lBRU0sV0FBVztRQUNoQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxZQUFZO1FBQ1YsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUNEOzs7Ozs7Ozs7T0FTRztJQUNILEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxNQUFnQztRQUN0RCxJQUFJO1lBQ0YsTUFBTSxVQUFVLEdBQUcsZUFBSyxDQUFDLEdB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Q0FBQyxpQkFBaUIsRUFBRSxDQUFDO2FBQ3REO2lCQUFNO2dCQUNMLE9BQU8sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO2FBQzVFO1lBQ0QsT0FBTyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO1NBQ3JEO1FBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRCxvQkFBb0I7SUFDcEIsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELG9CQUFvQjtJQUNwQixlQUFlO1FBQ2IsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELG9CQUFvQjtJQUNwQiwyQkFBMkI7UUFDekIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU8sVUFBVTtRQUNoQixPQUFPLElBQUksK0JBQXlCLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7Q0FDRjtBQTVWRCxrQkE0VkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQge1xuICBCYXNlQ29pbixcbiAgQmFzZVRyYW5zYWN0aW9uLFxuICBCaXRHb0Jhc2UsXG4gIEludmFsaWRBZGRyZXNzRXJyb3IsXG4gIEtleVBhaXIsXG4gIE1QQ0FsZ29yaXRobSxcbiAgTm9kZUVudmlyb25tZW50RXJyb3IsXG4gIFBhcnNlZFRyYW5zYWN0aW9uLFxuICBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyBhcyBCYXNlUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMsXG4gIFNpZ25lZFRyYW5zYWN0aW9uLFxuICBTaWduVHJhbnNhY3Rpb25PcHRpb25zIGFzIEJhc2VTaWduVHJhbnNhY3Rpb25PcHRpb25zLFxuICBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uLFxuICBWZXJpZnlBZGRyZXNzT3B0aW9ucyxcbiAgVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zLFxuICBFRERTQU1ldGhvZHMsXG4gIEVERFNBTWV0aG9kVHlwZXMsXG4gIEFkZHJlc3NGb3JtYXQsXG4gIEVudmlyb25tZW50cyxcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgS2V5UGFpciBhcyBBZGFLZXlQYWlyLCBUcmFuc2FjdGlvbiwgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSwgVXRpbHMgfSBmcm9tICcuL2xpYic7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBTdGF0aWNzQmFzZUNvaW4sIENvaW5GYW1pbHksIGNvaW5zIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgYWRhVXRpbHMgZnJvbSAnLi9saWIvdXRpbHMnO1xuaW1wb3J0ICogYXMgcmVxdWVzdCBmcm9tICdzdXBlcmFnZW50JztcblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2FjdGlvblByZWJ1aWxkIHtcbiAgdHhIZXg6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zIHtcbiAgdHhQcmVidWlsZDogVHJhbnNhY3Rpb25QcmVidWlsZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZGFQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyBleHRlbmRzIEJhc2VQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyB7XG4gIHR4UHJlYnVpbGQ6IFRyYW5zYWN0aW9uUHJlYnVpbGQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lnblRyYW5zYWN0aW9uT3B0aW9ucyBleHRlbmRzIEJhc2VTaWduVHJhbnNhY3Rpb25PcHRpb25zIHtcbiAgdHhQcmVidWlsZDogVHJhbnNhY3Rpb25QcmVidWlsZDtcbiAgcHJ2OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBSZWNvdmVyeU9wdGlvbnMge1xuICB1c2VyS2V5Pzogc3RyaW5nOyAvLyBCb3ggQVxuICBiYWNrdXBLZXk/OiBzdHJpbmc7IC8vIEJveCBCXG4gIGJpdGdvS2V5OiBzdHJpbmc7IC8vIEJveCBDXG4gIHJlY292ZXJ5RGVzdGluYXRpb246IHN0cmluZztcbiAga3JzUHJvdmlkZXI/OiBzdHJpbmc7XG4gIHdhbGxldFBhc3NwaHJhc2U/OiBzdHJpbmc7XG4gIHN0YXJ0aW5nU2NhbkluZGV4PzogbnVtYmVyO1xuICBzY2FuPzogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgQWRhVHgge1xuICBzZXJpYWxpemVkVHg6IHN0cmluZztcbiAgc2NhbkluZGV4OiBudW1iZXI7XG4gIGNvaW4/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIEFkYVRyYW5zYWN0aW9uRXhwbGFuYXRpb24gPSBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uO1xuXG5leHBvcnQgY2xhc3MgQWRhIGV4dGVuZHMgQmFzZUNvaW4ge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3N0YXRpY3NDb2luOiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+O1xuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoYml0Z286IEJpdEdvQmFzZSwgc3RhdGljc0NvaW4/OiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+KSB7XG4gICAgc3VwZXIoYml0Z28pO1xuICAgIGlmICghc3RhdGljc0NvaW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCBjb25zdHJ1Y3RvciBwYXJhbWV0ZXIgc3RhdGljc0NvaW4nKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGF0aWNzQ29pbiA9IHN0YXRpY3NDb2luO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZUluc3RhbmNlKGJpdGdvOiBCaXRHb0Jhc2UsIHN0YXRpY3NDb2luPzogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPik6IEJhc2VDb2luIHtcbiAgICByZXR1cm4gbmV3IEFkYShiaXRnbywgc3RhdGljc0NvaW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZhY3RvciBiZXR3ZWVuIHRoZSBjb2luJ3MgYmFzZSB1bml0IGFuZCBpdHMgc21hbGxlc3Qgc3ViZGl2aXNvblxuICAgKi9cbiAgcHVibGljIGdldEJhc2VGYWN0b3IoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gMWU2O1xuICB9XG5cbiAgcHVibGljIGdldENoYWluKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRpY3NDb2luLm5hbWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0RmFtaWx5KCk6IENvaW5GYW1pbHkge1xuICAgIHJldHVybiB0aGlzLl9zdGF0aWNzQ29pbi5mYW1pbHk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RnVsbE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGljc0NvaW4uZnVsbE5hbWU7XG4gIH1cblxuICBnZXRCYXNlQ2hhaW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDaGFpbigpO1xuICB9XG4gIC8qKlxuICAgKiBWZXJpZnkgdGhhdCBhIHRyYW5zYWN0aW9uIHByZWJ1aWxkIGNvbXBsaWVzIHdpdGggdGhlIG9yaWdpbmFsIGludGVudGlvblxuICAgKiAgQSBwcmVidWlsZCB0cmFuc2FjdGlvbiBoYXMgdG8gYmUgcGFyc2VkIGNvcnJlY3RseSBhbmQgaW50ZW5kZWQgcmVjaXBpZW50cyBoYXMgdG8gYmVcbiAgICogIGluIHRoZSB0cmFuc2FjdGlvbiBvdXRwdXRcbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcy50eFByZWJ1aWxkIHByZWJ1aWxkIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSBwYXJhbXMudHhQYXJhbXMgdHJhbnNhY3Rpb24gcGFyYW1ldGVyc1xuICAgKiBAcmV0dXJuIHRydWUgaWYgdmVyaWZpY2F0aW9uIHN1Y2Nlc3NcbiAgICpcbiAgICovXG4gIGFzeW5jIHZlcmlmeVRyYW5zYWN0aW9uKHBhcmFtczogVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvaW5Db25maWcgPSBjb2lucy5nZXQodGhpcy5nZXRDaGFpbigpKTtcbiAgICAgIGNvbnN0IHsgdHhQcmVidWlsZDogdHhQcmVidWlsZCwgdHhQYXJhbXM6IHR4UGFyYW1zIH0gPSBwYXJhbXM7XG4gICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbihjb2luQ29uZmlnKTtcbiAgICAgIGFzc2VydCh0eFByZWJ1aWxkLnR4SGV4LCBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgdHggcHJlYnVpbGQgcHJvcGVydHkgdHhIZXgnKSk7XG4gICAgICBjb25zdCByYXdUeCA9IHR4UHJlYnVpbGQudHhIZXg7XG5cbiAgICAgIHRyYW5zYWN0aW9uLmZyb21SYXdUcmFuc2FjdGlvbihyYXdUeCk7XG4gICAgICBjb25zdCBleHBsYWluZWRUeCA9IHRyYW5zYWN0aW9uLmV4cGxhaW5UcmFuc2FjdGlvbigpO1xuXG4gICAgICBpZiAodHhQYXJhbXMucmVjaXBpZW50cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGZvciAoY29uc3QgcmVjaXBpZW50IG9mIHR4UGFyYW1zLnJlY2lwaWVudHMpIHtcbiAgICAgICAgICBsZXQgZmluZCA9IGZhbHNlO1xuICAgICAgICAgIGZvciAoY29uc3Qgb3V0cHV0IG9mIGV4cGxhaW5lZFR4Lm91dHB1dHMpIHtcbiAgICAgICAgICAgIGlmIChyZWNpcGllbnQuYWRkcmVzcyA9PT0gb3V0cHV0LmFkZHJlc3MgJiYgcmVjaXBpZW50LmFtb3VudCA9PT0gb3V0cHV0LmFtb3VudCkge1xuICAgICAgICAgICAgICBmaW5kID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFmaW5kKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCBmaW5kIHJlY2lwaWVudCBpbiBleHBlY3RlZCBvdXRwdXQnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIE5vZGVFbnZpcm9ubWVudEVycm9yKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhc3luYyBpc1dhbGxldEFkZHJlc3MocGFyYW1zOiBWZXJpZnlBZGRyZXNzT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgYWRkcmVzcyB9ID0gcGFyYW1zO1xuICAgIGlmICghdGhpcy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoYEludmFsaWQgQ2FyZGFubyBBZGRyZXNzOiAke2FkZHJlc3N9YCk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGFzeW5jIHNpZ25NZXNzYWdlKGtleTogS2V5UGFpciwgbWVzc2FnZTogc3RyaW5nIHwgQnVmZmVyKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICBjb25zdCBhZGFLZXlwYWlyID0gbmV3IEFkYUtleVBhaXIoeyBwcnY6IGtleS5wcnYgfSk7XG4gICAgY29uc3QgbWVzc2FnZUhleCA9IG1lc3NhZ2UgaW5zdGFuY2VvZiBCdWZmZXIgPyBtZXNzYWdlLnRvU3RyaW5nKCdoZXgnKSA6IG1lc3NhZ2U7XG5cbiAgICByZXR1cm4gQnVmZmVyLmZyb20oYWRhS2V5cGFpci5zaWduTWVzc2FnZShtZXNzYWdlSGV4KSk7XG4gIH1cblxuICAvKipcbiAgICogRXhwbGFpbi9wYXJzZSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqL1xuICBhc3luYyBleHBsYWluVHJhbnNhY3Rpb24ocGFyYW1zOiBFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxBZGFUcmFuc2FjdGlvbkV4cGxhbmF0aW9uPiB7XG4gICAgY29uc3QgZmFjdG9yeSA9IHRoaXMuZ2V0QnVpbGRlcigpO1xuICAgIGxldCByZWJ1aWx0VHJhbnNhY3Rpb246IEJhc2VUcmFuc2FjdGlvbjtcbiAgICBjb25zdCB0eFJhdyA9IHBhcmFtcy50eFByZWJ1aWxkLnR4SGV4O1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRyYW5zYWN0aW9uQnVpbGRlciA9IGZhY3RvcnkuZnJvbSh0eFJhdyk7XG4gICAgICByZWJ1aWx0VHJhbnNhY3Rpb24gPSBhd2FpdCB0cmFuc2FjdGlvbkJ1aWxkZXIuYnVpbGQoKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbicpO1xuICAgIH1cblxuICAgIHJldHVybiByZWJ1aWx0VHJhbnNhY3Rpb24uZXhwbGFpblRyYW5zYWN0aW9uKCk7XG4gIH1cblxuICBhc3luYyBwYXJzZVRyYW5zYWN0aW9uKHBhcmFtczogQWRhUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPFBhcnNlZFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgdHJhbnNhY3Rpb25FeHBsYW5hdGlvbiA9IGF3YWl0IHRoaXMuZXhwbGFpblRyYW5zYWN0aW9uKHtcbiAgICAgIHR4UHJlYnVpbGQ6IHBhcmFtcy50eFByZWJ1aWxkLFxuICAgIH0pO1xuXG4gICAgaWYgKCF0cmFuc2FjdGlvbkV4cGxhbmF0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJhbnNhY3Rpb25FeHBsYW5hdGlvbiBhcyB1bmtub3duIGFzIFBhcnNlZFRyYW5zYWN0aW9uO1xuICB9XG5cbiAgZ2VuZXJhdGVLZXlQYWlyKHNlZWQ/OiBCdWZmZXIpOiBLZXlQYWlyIHtcbiAgICBjb25zdCBrZXlQYWlyID0gc2VlZCA/IG5ldyBBZGFLZXlQYWlyKHsgc2VlZCB9KSA6IG5ldyBBZGFLZXlQYWlyKCk7XG4gICAgY29uc3Qga2V5cyA9IGtleVBhaXIuZ2V0S2V5cygpO1xuICAgIGlmICgha2V5cy5wcnYpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBwcnYgaW4ga2V5IGdlbmVyYXRpb24uJyk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBwdWI6IGtleXMucHViLFxuICAgICAgcHJ2OiBrZXlzLnBydixcbiAgICB9O1xuICB9XG5cbiAgaXNWYWxpZFB1YihwdWI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhZGFVdGlscy5pc1ZhbGlkUHVibGljS2V5KHB1Yik7XG4gIH1cblxuICBpc1ZhbGlkUHJ2KHBydjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGFkYVV0aWxzLmlzVmFsaWRQcml2YXRlS2V5KHBydik7XG4gIH1cblxuICBpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gYWRhVXRpbHMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcyk7XG4gIH1cblxuICBhc3luYyBzaWduVHJhbnNhY3Rpb24ocGFyYW1zOiBTaWduVHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxTaWduZWRUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IGZhY3RvcnkgPSB0aGlzLmdldEJ1aWxkZXIoKTtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20ocGFyYW1zLnR4UHJlYnVpbGQudHhIZXgpO1xuICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiBwYXJhbXMucHJ2IH0pO1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uOiBCYXNlVHJhbnNhY3Rpb24gPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcblxuICAgIGlmICghdHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbicpO1xuICAgIH1cblxuICAgIGNvbnN0IHNlcmlhbGl6ZWRUeCA9IHRyYW5zYWN0aW9uLnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHhIZXg6IHNlcmlhbGl6ZWRUeCxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFB1YmxpY05vZGVVcmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gRW52aXJvbm1lbnRzW3RoaXMuYml0Z28uZ2V0RW52KCldLmFkYU5vZGVVcmw7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgZ2V0RGF0YUZyb21Ob2RlKGVuZHBvaW50OiBzdHJpbmcsIHJlcXVlc3RCb2R5PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBQcm9taXNlPHJlcXVlc3QuUmVzcG9uc2U+IHtcbiAgICBjb25zdCByZXN0RW5kcG9pbnQgPSB0aGlzLmdldFB1YmxpY05vZGVVcmwoKSArICcvJyArIGVuZHBvaW50O1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCByZXF1ZXN0LnBvc3QocmVzdEVuZHBvaW50KS5zZW5kKHJlcXVlc3RCb2R5KTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5kZWJ1ZyhlKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gY2FsbCBlbmRwb2ludCAke3Jlc3RFbmRwb2ludH1gKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBnZXRBZGRyZXNzSW5mbyhcbiAgICB3YWxsZXRBZGRyOiBzdHJpbmdcbiAgKTogUHJvbWlzZTx7IGJhbGFuY2U6IG51bWJlcjsgdXR4b1NldDogQXJyYXk8UmVjb3JkPHN0cmluZywgYW55Pj4gfT4ge1xuICAgIGNvbnN0IHJlcXVlc3RCb2R5ID0geyBfYWRkcmVzc2VzOiBbd2FsbGV0QWRkcl0gfTtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmdldERhdGFGcm9tTm9kZSgnYWRkcmVzc19pbmZvJywgcmVxdWVzdEJvZHkpO1xuICAgIGlmIChyZXMuc3RhdHVzICE9IDIwMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gcmV0cmlldmUgYWRkcmVzcyBpbmZvIGZvciBhZGRyZXNzICR7d2FsbGV0QWRkcn1gKTtcbiAgICB9XG4gICAgY29uc3QgYm9keSA9IHJlcy5ib2R5WzBdO1xuICAgIGlmIChib2R5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB7IGJhbGFuY2U6IDAsIHV0eG9TZXQ6IFtdIH07XG4gICAgfVxuICAgIHJldHVybiB7IGJhbGFuY2U6IGJvZHkuYmFsYW5jZSwgdXR4b1NldDogYm9keS51dHhvX3NldCB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGdldENoYWluVGlwSW5mbygpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+IHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmdldERhdGFGcm9tTm9kZSgndGlwJyk7XG4gICAgaWYgKHJlcy5zdGF0dXMgIT0gMjAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byByZXRyaWV2ZSBjaGFpbiB0aXAgaW5mbycpO1xuICAgIH1cbiAgICBjb25zdCBib2R5ID0gcmVzLmJvZHlbMF07XG4gICAgcmV0dXJuIGJvZHk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIGEgZnVuZHMgcmVjb3ZlcnkgdHJhbnNhY3Rpb24gd2l0aG91dCBCaXRHb1xuICAgKlxuICAgKiBAcGFyYW0ge1JlY292ZXJ5T3B0aW9uc30gcGFyYW1zIHBhcmFtZXRlcnMgbmVlZGVkIHRvIGNvbnN0cnVjdCBhbmRcbiAgICogKG1heWJlKSBzaWduIHRoZSB0cmFuc2FjdGlvblxuICAgKlxuICAgKiBAcmV0dXJucyB7QWRhVHh9IHRoZSBzZXJpYWxpemVkIHRyYW5zYWN0aW9uIGhleCBzdHJpbmcgYW5kIGluZGV4XG4gICAqIG9mIHRoZSBhZGRyZXNzIGJlaW5nIHN3ZXB0XG4gICAqL1xuICBhc3luYyByZWNvdmVyKHBhcmFtczogUmVjb3ZlcnlPcHRpb25zKTogUHJvbWlzZTxBZGFUeD4ge1xuICAgIGlmICghcGFyYW1zLmJpdGdvS2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgYml0Z29LZXknKTtcbiAgICB9XG4gICAgaWYgKCFwYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbiB8fCAhdGhpcy5pc1ZhbGlkQWRkcmVzcyhwYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCByZWNvdmVyeURlc3RpbmF0aW9uJyk7XG4gICAgfVxuICAgIGxldCBhZGRyRm9ybWF0ID0gQWRkcmVzc0Zvcm1hdC50ZXN0bmV0O1xuICAgIGlmICh0aGlzLmdldENoYWluKCkgPT09ICdhZGEnKSB7XG4gICAgICBhZGRyRm9ybWF0ID0gQWRkcmVzc0Zvcm1hdC5tYWlubmV0O1xuICAgIH1cbiAgICBsZXQgc3RhcnRJZHggPSBwYXJhbXMuc3RhcnRpbmdTY2FuSW5kZXg7XG4gICAgaWYgKHN0YXJ0SWR4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHN0YXJ0SWR4ID0gMDtcbiAgICB9IGVsc2UgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHN0YXJ0SWR4KSB8fCBzdGFydElkeCA8IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzdGFydGluZyBpbmRleCB0byBzY2FuIGZvciBhZGRyZXNzZXMnKTtcbiAgICB9XG4gICAgbGV0IG51bUl0ZXJhdGlvbiA9IHBhcmFtcy5zY2FuO1xuICAgIGlmIChudW1JdGVyYXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgbnVtSXRlcmF0aW9uID0gMjA7XG4gICAgfSBlbHNlIGlmICghTnVtYmVyLmlzSW50ZWdlcihudW1JdGVyYXRpb24pIHx8IG51bUl0ZXJhdGlvbiA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc2Nhbm5pbmcgZmFjdG9yJyk7XG4gICAgfVxuICAgIGNvbnN0IGJpdGdvS2V5ID0gcGFyYW1zLmJpdGdvS2V5LnJlcGxhY2UoL1xccy9nLCAnJyk7XG4gICAgY29uc3QgaXNVbnNpZ25lZFN3ZWVwID0gIXBhcmFtcy51c2VyS2V5ICYmICFwYXJhbXMuYmFja3VwS2V5ICYmICFwYXJhbXMud2FsbGV0UGFzc3BocmFzZTtcbiAgICBjb25zdCBNUEMgPSBhd2FpdCBFRERTQU1ldGhvZHMuZ2V0SW5pdGlhbGl6ZWRNcGNJbnN0YW5jZSgpO1xuICAgIGNvbnN0IHN0YWtlS2V5UGFpciA9IG5ldyBBZGFLZXlQYWlyKHsgcHViOiBNUEMuZGVyaXZlVW5oYXJkZW5lZChiaXRnb0tleSwgJ20vMCcpLnNsaWNlKDAsIDY0KSB9KTtcblxuICAgIGZvciAobGV0IGkgPSBzdGFydElkeDsgaSA8IG51bUl0ZXJhdGlvbiArIHN0YXJ0SWR4OyBpKyspIHtcbiAgICAgIGNvbnN0IGN1cnJQYXRoID0gYG0vJHtpfWA7XG4gICAgICBjb25zdCBhY2NvdW50SWQgPSBNUEMuZGVyaXZlVW5oYXJkZW5lZChiaXRnb0tleSwgY3VyclBhdGgpLnNsaWNlKDAsIDY0KTtcbiAgICAgIGNvbnN0IHBheW1lbnRLZXlQYWlyID0gbmV3IEFkYUtleVBhaXIoeyBwdWI6IGFjY291bnRJZCB9KTtcbiAgICAgIGNvbnN0IHNlbmRlckFkZHIgPSBVdGlscy5kZWZhdWx0LmNyZWF0ZUJhc2VBZGRyZXNzV2l0aFN0YWtlQW5kUGF5bWVudEtleShcbiAgICAgICAgc3Rha2VLZXlQYWlyLFxuICAgICAgICBwYXltZW50S2V5UGFpcixcbiAgICAgICAgYWRkckZvcm1hdFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHsgYmFsYW5jZSwgdXR4b1NldCB9ID0gYXdhaXQgdGhpcy5nZXRBZGRyZXNzSW5mbyhzZW5kZXJBZGRyKTtcbiAgICAgIGlmIChiYWxhbmNlIDw9IDApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGZpcnN0IGJ1aWxkIHRoZSB1bnNpZ25lZCB0eG5cbiAgICAgIGNvbnN0IHRpcEFic1Nsb3QgPSBhd2FpdCB0aGlzLmdldENoYWluVGlwSW5mbygpO1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gdGhpcy5nZXRCdWlsZGVyKCkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIuY2hhbmdlQWRkcmVzcyhwYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbiwgYmFsYW5jZS50b1N0cmluZygpKTtcbiAgICAgIGZvciAoY29uc3QgdXR4byBvZiB1dHhvU2V0KSB7XG4gICAgICAgIHR4QnVpbGRlci5pbnB1dCh7IHRyYW5zYWN0aW9uX2lkOiB1dHhvLnR4X2hhc2gsIHRyYW5zYWN0aW9uX2luZGV4OiB1dHhvLnR4X2luZGV4IH0pO1xuICAgICAgfVxuICAgICAgLy8gZWFjaCBzbG90IGlzIGFib3V0IDEgc2Vjb25kLCBzbyB0aGlzIHRyYW5zYWN0aW9uIHNob3VsZCBiZSB2YWxpZCBmb3JcbiAgICAgIC8vIDcgKiA4Niw0MDAgc2Vjb25kcyAoNyBkYXlzKSBhZnRlciBjcmVhdGlvblxuICAgICAgdHhCdWlsZGVyLnR0bChOdW1iZXIodGlwQWJzU2xvdC5hYnNfc2xvdCkgKyA3ICogODY0MDApO1xuICAgICAgY29uc3QgdW5zaWduZWRUcmFuc2FjdGlvbiA9IChhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG5cbiAgICAgIGxldCBzZXJpYWxpemVkVHggPSB1bnNpZ25lZFRyYW5zYWN0aW9uLnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICBpZiAoIWlzVW5zaWduZWRTd2VlcCkge1xuICAgICAgICBpZiAoIXBhcmFtcy51c2VyS2V5KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHVzZXJLZXknKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXBhcmFtcy5iYWNrdXBLZXkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgYmFja3VwS2V5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFwYXJhbXMud2FsbGV0UGFzc3BocmFzZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyB3YWxsZXQgcGFzc3BocmFzZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2xlYW4gdXAgd2hpdGVzcGFjZSBmcm9tIGVudGVyZWQgdmFsdWVzXG4gICAgICAgIGNvbnN0IHVzZXJLZXkgPSBwYXJhbXMudXNlcktleS5yZXBsYWNlKC9cXHMvZywgJycpO1xuICAgICAgICBjb25zdCBiYWNrdXBLZXkgPSBwYXJhbXMuYmFja3VwS2V5LnJlcGxhY2UoL1xccy9nLCAnJyk7XG5cbiAgICAgICAgLy8gRGVjcnlwdCBwcml2YXRlIGtleXMgZnJvbSBLZXlDYXJkIHZhbHVlc1xuICAgICAgICBsZXQgdXNlclBydjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB1c2VyUHJ2ID0gdGhpcy5iaXRnby5kZWNyeXB0KHtcbiAgICAgICAgICAgIGlucHV0OiB1c2VyS2V5LFxuICAgICAgICAgICAgcGFzc3dvcmQ6IHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBkZWNyeXB0aW5nIHVzZXIga2V5Y2hhaW46ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICAgIC8qKiBUT0RPIEJHLTUyNDE5IEltcGxlbWVudCBDb2RlYyBmb3IgcGFyc2luZyAqL1xuICAgICAgICBjb25zdCB1c2VyU2lnbmluZ01hdGVyaWFsID0gSlNPTi5wYXJzZSh1c2VyUHJ2KSBhcyBFRERTQU1ldGhvZFR5cGVzLlVzZXJTaWduaW5nTWF0ZXJpYWw7XG5cbiAgICAgICAgbGV0IGJhY2t1cFBydjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBiYWNrdXBQcnYgPSB0aGlzLmJpdGdvLmRlY3J5cHQoe1xuICAgICAgICAgICAgaW5wdXQ6IGJhY2t1cEtleSxcbiAgICAgICAgICAgIHBhc3N3b3JkOiBwYXJhbXMud2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3IgZGVjcnlwdGluZyBiYWNrdXAga2V5Y2hhaW46ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJhY2t1cFNpZ25pbmdNYXRlcmlhbCA9IEpTT04ucGFyc2UoYmFja3VwUHJ2KSBhcyBFRERTQU1ldGhvZFR5cGVzLkJhY2t1cFNpZ25pbmdNYXRlcmlhbDtcblxuICAgICAgICAvLyBhZGQgc2lnbmF0dXJlXG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZUhleCA9IGF3YWl0IEVERFNBTWV0aG9kcy5nZXRUU1NTaWduYXR1cmUoXG4gICAgICAgICAgdXNlclNpZ25pbmdNYXRlcmlhbCxcbiAgICAgICAgICBiYWNrdXBTaWduaW5nTWF0ZXJpYWwsXG4gICAgICAgICAgY3VyclBhdGgsXG4gICAgICAgICAgdW5zaWduZWRUcmFuc2FjdGlvblxuICAgICAgICApO1xuICAgICAgICBjb25zdCBhZGFLZXlQYWlyID0gbmV3IEFkYUtleVBhaXIoeyBwdWI6IGFjY291bnRJZCB9KTtcbiAgICAgICAgdHhCdWlsZGVyLmFkZFNpZ25hdHVyZSh7IHB1YjogYWRhS2V5UGFpci5nZXRLZXlzKCkucHViIH0sIHNpZ25hdHVyZUhleCk7XG4gICAgICAgIGNvbnN0IHNpZ25lZFRyYW5zYWN0aW9uID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIHNlcmlhbGl6ZWRUeCA9IHNpZ25lZFRyYW5zYWN0aW9uLnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4geyBzZXJpYWxpemVkVHg6IHNlcmlhbGl6ZWRUeCwgc2NhbkluZGV4OiBpLCBjb2luOiB0aGlzLmdldENoYWluKCkgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IHNlcmlhbGl6ZWRUeDogc2VyaWFsaXplZFR4LCBzY2FuSW5kZXg6IGkgfTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdEaWQgbm90IGZpbmQgYW4gYWRkcmVzcyB3aXRoIGZ1bmRzIHRvIHJlY292ZXInKTtcbiAgfVxuXG4gIC8qKiBpbmhlcml0ZWQgZG9jICovXG4gIHN1cHBvcnRzVHNzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqIGluaGVyaXRlZCBkb2MgKi9cbiAgZ2V0TVBDQWxnb3JpdGhtKCk6IE1QQ0FsZ29yaXRobSB7XG4gICAgcmV0dXJuICdlZGRzYSc7XG4gIH1cblxuICAvKiogaW5oZXJpdGVkIGRvYyAqL1xuICBhbGxvd3NBY2NvdW50Q29uc29saWRhdGlvbnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIGdldEJ1aWxkZXIoKTogVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB7XG4gICAgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCh0aGlzLmdldEJhc2VDaGFpbigpKSk7XG4gIH1cbn1cbiJdfQ==
@@ -29,6 +29,22 @@ export interface Withdrawal {
29
29
  stakeAddress: string;
30
30
  value: string;
31
31
  }
32
+ export declare type StakeKeyRegistrationCert = Cert;
33
+ export declare type StakeKeyDelegationCert = Cert;
34
+ export interface StakePoolRegistrationCert extends Cert {
35
+ vrfKeyHash: string;
36
+ pledge: string;
37
+ cost: string;
38
+ marginNumerator: string;
39
+ marginDenominator: string;
40
+ rewardAccount: string;
41
+ poolOwners: string[];
42
+ }
43
+ export interface PledgeDetails {
44
+ stakeKeyRegsitration?: StakeKeyRegistrationCert;
45
+ stakeKeyDelegation?: StakeKeyDelegationCert;
46
+ stakePoolRegistration: StakePoolRegistrationCert;
47
+ }
32
48
  /**
33
49
  * The transaction data returned from the toJson() function of a transaction
34
50
  */
@@ -40,10 +56,12 @@ export interface TxData {
40
56
  witnesses: Witness[];
41
57
  certs: Cert[];
42
58
  withdrawals: Withdrawal[];
59
+ pledgeDetails?: PledgeDetails;
43
60
  }
44
61
  export declare class Transaction extends BaseTransaction {
45
62
  private _transaction;
46
63
  private _fee;
64
+ private _pledgeDetails?;
47
65
  constructor(coinConfig: Readonly<CoinConfig>);
48
66
  get transaction(): CardanoWasm.Transaction;
49
67
  set transaction(tx: CardanoWasm.Transaction);
@@ -65,6 +83,9 @@ export declare class Transaction extends BaseTransaction {
65
83
  * @param rawTx
66
84
  */
67
85
  fromRawTransaction(rawTx: string): void;
86
+ private loadStakeKeyRegistration;
87
+ private loadStakeKeyDelegation;
88
+ private loadStakePoolRegistration;
68
89
  /**
69
90
  * Set the transaction type.
70
91
  *
@@ -88,7 +109,9 @@ export declare class Transaction extends BaseTransaction {
88
109
  changeAmount: string;
89
110
  type: string;
90
111
  withdrawals: Withdrawal[];
112
+ pledgeDetails?: PledgeDetails;
91
113
  };
114
+ getPledgeDetails(): PledgeDetails | undefined;
92
115
  /**
93
116
  * Get transaction fee
94
117
  */
@@ -1 +1 @@
1
- {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../src/lib/transaction.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,OAAO,EACP,eAAe,EAIf,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,WAAW,MAAM,0CAA0C,CAAC;AAExE,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAE7D,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,OAAO;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AACD,aAAK,QAAQ;IACX,oBAAoB,IAAA;IACpB,kBAAkB,IAAA;IAClB,sBAAsB,IAAA;IACtB,qBAAqB,IAAA;CACtB;AAED,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,QAAQ,CAAC;IACf,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AACD;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,eAAe,CAAC;IACtB,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,SAAS,EAAE,OAAO,EAAE,CAAC;IACrB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B;AAED,qBAAa,WAAY,SAAQ,eAAe;IAC9C,OAAO,CAAC,YAAY,CAA0B;IAC9C,OAAO,CAAC,IAAI,CAAS;gBAET,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI5C,IAAI,WAAW,IAAI,WAAW,CAAC,WAAW,CAEzC;IAED,IAAI,WAAW,CAAC,EAAE,EAAE,WAAW,CAAC,WAAW,EAG1C;IAED,kBAAkB;IAClB,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO;IAS9B,iBAAiB,IAAI,MAAM;IAO3B,kBAAkB;IAClB,MAAM,IAAI,MAAM;IA4FhB;;;OAGG;IACH,oBAAoB,IAAI,IAAI;IAiB5B,kBAAkB;IAClB,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED;;;;OAIG;IACH,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IA8CvC;;;;OAIG;IACH,kBAAkB,CAAC,eAAe,EAAE,eAAe,GAAG,IAAI;IAI1D,kBAAkB;IAClB,kBAAkB,IAAI;QACpB,OAAO,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;QAC/C,YAAY,EAAE,IAAI,EAAE,CAAC;QACrB,aAAa,EAAE,MAAM,EAAE,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;QACrB,GAAG,EAAE;YAAE,GAAG,EAAE,MAAM,CAAA;SAAE,CAAC;QACrB,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,EAAE,EAAE,MAAM,CAAC;QACX,YAAY,EAAE,MAAM,CAAC;QACrB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,UAAU,EAAE,CAAC;KAC3B;IA+BD;;OAEG;IACH,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED;;;;OAIG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM;CAGhB"}
1
+ {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../src/lib/transaction.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,OAAO,EACP,eAAe,EAIf,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,WAAW,MAAM,0CAA0C,CAAC;AAExE,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAE7D,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,OAAO;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AACD,aAAK,QAAQ;IACX,oBAAoB,IAAA;IACpB,kBAAkB,IAAA;IAClB,sBAAsB,IAAA;IACtB,qBAAqB,IAAA;CACtB;AAED,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,QAAQ,CAAC;IACf,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,oBAAY,wBAAwB,GAAG,IAAI,CAAC;AAE5C,oBAAY,sBAAsB,GAAG,IAAI,CAAC;AAE1C,MAAM,WAAW,yBAA0B,SAAQ,IAAI;IACrD,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,oBAAoB,CAAC,EAAE,wBAAwB,CAAC;IAChD,kBAAkB,CAAC,EAAE,sBAAsB,CAAC;IAC5C,qBAAqB,EAAE,yBAAyB,CAAC;CAClD;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,eAAe,CAAC;IACtB,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,SAAS,EAAE,OAAO,EAAE,CAAC;IACrB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAED,qBAAa,WAAY,SAAQ,eAAe;IAC9C,OAAO,CAAC,YAAY,CAA0B;IAC9C,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,cAAc,CAAC,CAAgB;gBAE3B,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI5C,IAAI,WAAW,IAAI,WAAW,CAAC,WAAW,CAEzC;IAED,IAAI,WAAW,CAAC,EAAE,EAAE,WAAW,CAAC,WAAW,EAG1C;IAED,kBAAkB;IAClB,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO;IAS9B,iBAAiB,IAAI,MAAM;IAO3B,kBAAkB;IAClB,MAAM,IAAI,MAAM;IA8FhB;;;OAGG;IACH,oBAAoB,IAAI,IAAI;IAiB5B,kBAAkB;IAClB,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED;;;;OAIG;IACH,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAuDvC,OAAO,CAAC,wBAAwB;IAiBhC,OAAO,CAAC,sBAAsB;IAgB9B,OAAO,CAAC,yBAAyB;IAuBjC;;;;OAIG;IACH,kBAAkB,CAAC,eAAe,EAAE,eAAe,GAAG,IAAI;IAI1D,kBAAkB;IAClB,kBAAkB,IAAI;QACpB,OAAO,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;QAC/C,YAAY,EAAE,IAAI,EAAE,CAAC;QACrB,aAAa,EAAE,MAAM,EAAE,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;QACrB,GAAG,EAAE;YAAE,GAAG,EAAE,MAAM,CAAA;SAAE,CAAC;QACrB,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,EAAE,EAAE,MAAM,CAAC;QACX,YAAY,EAAE,MAAM,CAAC;QACrB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,UAAU,EAAE,CAAC;QAC1B,aAAa,CAAC,EAAE,aAAa,CAAC;KAC/B;IAgCD,gBAAgB,IAAI,aAAa,GAAG,SAAS;IAI7C;;OAEG;IACH,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED;;;;OAIG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM;CAGhB"}
@@ -119,6 +119,7 @@ class Transaction extends sdk_core_1.BaseTransaction {
119
119
  }
120
120
  }
121
121
  }
122
+ result.pledgeDetails = this._pledgeDetails;
122
123
  if (this._transaction.body().withdrawals()) {
123
124
  const withdrawals = this._transaction.body().withdrawals();
124
125
  const keys = withdrawals.keys();
@@ -190,6 +191,14 @@ class Transaction extends sdk_core_1.BaseTransaction {
190
191
  }
191
192
  if (certs.some((c) => c.as_pool_registration() !== undefined)) {
192
193
  this._type = sdk_core_1.TransactionType.StakingPledge;
194
+ const stakeKeyRegistration = certs.find((c) => c.as_stake_registration() !== undefined);
195
+ const stakeKeyDelegation = certs.find((c) => c.as_stake_delegation() !== undefined);
196
+ const stakePoolRegistration = certs.find((c) => c.as_pool_registration() !== undefined);
197
+ this._pledgeDetails = {
198
+ stakeKeyRegsitration: this.loadStakeKeyRegistration(stakeKeyRegistration),
199
+ stakeKeyDelegation: this.loadStakeKeyDelegation(stakeKeyDelegation),
200
+ stakePoolRegistration: this.loadStakePoolRegistration(stakePoolRegistration),
201
+ };
193
202
  }
194
203
  else if (certs.some((c) => c.as_stake_registration() !== undefined)) {
195
204
  this._type = sdk_core_1.TransactionType.StakingActivate;
@@ -215,6 +224,59 @@ class Transaction extends sdk_core_1.BaseTransaction {
215
224
  throw new sdk_core_1.InvalidTransactionError('unable to build transaction from raw');
216
225
  }
217
226
  }
227
+ loadStakeKeyRegistration(certificate) {
228
+ if (certificate === undefined) {
229
+ return undefined;
230
+ }
231
+ const stakeRegistration = certificate.as_stake_registration();
232
+ if (stakeRegistration !== undefined && stakeRegistration.stake_credential().to_keyhash() !== undefined) {
233
+ return {
234
+ type: CertType.StakeKeyRegistration,
235
+ stakeCredentialHash: stakeRegistration.stake_credential().to_keyhash().to_hex(),
236
+ };
237
+ }
238
+ else {
239
+ return undefined;
240
+ }
241
+ }
242
+ loadStakeKeyDelegation(certificate) {
243
+ if (certificate === undefined) {
244
+ return undefined;
245
+ }
246
+ const stakeDelegation = certificate.as_stake_delegation();
247
+ if (stakeDelegation !== undefined && stakeDelegation.stake_credential().to_keyhash() !== undefined) {
248
+ return {
249
+ type: CertType.StakeKeyDelegation,
250
+ stakeCredentialHash: stakeDelegation.stake_credential().to_keyhash().to_hex(),
251
+ poolKeyHash: stakeDelegation.pool_keyhash().to_hex(),
252
+ };
253
+ }
254
+ else {
255
+ return undefined;
256
+ }
257
+ }
258
+ loadStakePoolRegistration(certificate) {
259
+ const poolRegistration = certificate.as_pool_registration();
260
+ const rewardAccount = poolRegistration.pool_params().reward_account();
261
+ const networkId = rewardAccount.to_address().network_id();
262
+ const owners = [];
263
+ for (let i = 0; i < poolRegistration.pool_params().pool_owners().len(); i++) {
264
+ const poolOwner = poolRegistration.pool_params().pool_owners().get(i);
265
+ const ownerStakeKey = CardanoWasm.StakeCredential.from_keyhash(poolOwner);
266
+ owners.push(CardanoWasm.RewardAddress.new(networkId, ownerStakeKey).to_address().to_bech32());
267
+ }
268
+ return {
269
+ type: CertType.StakePoolRegistration,
270
+ poolKeyHash: poolRegistration.pool_params().operator().to_hex(),
271
+ vrfKeyHash: poolRegistration.pool_params().vrf_keyhash().to_hex(),
272
+ pledge: poolRegistration.pool_params().pledge().to_str(),
273
+ cost: poolRegistration.pool_params().cost().to_str(),
274
+ marginNumerator: poolRegistration.pool_params().margin().numerator().to_str(),
275
+ marginDenominator: poolRegistration.pool_params().margin().denominator().to_str(),
276
+ rewardAccount: rewardAccount.to_address().to_bech32(),
277
+ poolOwners: owners,
278
+ };
279
+ }
218
280
  /**
219
281
  * Set the transaction type.
220
282
  *
@@ -251,8 +313,12 @@ class Transaction extends sdk_core_1.BaseTransaction {
251
313
  type,
252
314
  certificates: txJson.certs,
253
315
  withdrawals: txJson.withdrawals,
316
+ pledgeDetails: this._pledgeDetails,
254
317
  };
255
318
  }
319
+ getPledgeDetails() {
320
+ return this._pledgeDetails;
321
+ }
256
322
  /**
257
323
  * Get transaction fee
258
324
  */
@@ -269,4 +335,4 @@ class Transaction extends sdk_core_1.BaseTransaction {
269
335
  }
270
336
  }
271
337
  exports.Transaction = Transaction;
272
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtREFPOEI7QUFDOUIsc0ZBQXdFO0FBQ3hFLHVDQUFvQztBQWlCcEMsSUFBSyxRQUtKO0FBTEQsV0FBSyxRQUFRO0lBQ1gsdUVBQW9CLENBQUE7SUFDcEIsbUVBQWtCLENBQUE7SUFDbEIsMkVBQXNCLENBQUE7SUFDdEIseUVBQXFCLENBQUE7QUFDdkIsQ0FBQyxFQUxJLFFBQVEsS0FBUixRQUFRLFFBS1o7QUF5QkQsTUFBYSxXQUFZLFNBQVEsMEJBQWU7SUFJOUMsWUFBWSxVQUFnQztRQUMxQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBSSxXQUFXLENBQUMsRUFBMkI7UUFDekMsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3RixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLE9BQU8sQ0FBQyxHQUFZO1FBQ2xCLElBQUk7WUFDRixJQUFJLGlCQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDOUIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUFDLE1BQU07WUFDTixPQUFPLEtBQUssQ0FBQztTQUNkO0lBQ0gsQ0FBQztJQUVELGlCQUFpQjtRQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsWUFB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QUFFLEdBQUc7WUFDakIsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDdkIsSUFBSTtZQUNKLFlBQVksRUFBRSxNQUFNLENBQUMsS0FBSztZQUMxQixXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVc7U0FDaEMsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEdBQUcsQ0FBQyxHQUFXO1FBQ2IsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7SUFDbEIsQ0FBQztDQUNGO0FBL1FELGtDQStRQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJhc2VLZXksXG4gIEJhc2VUcmFuc2FjdGlvbixcbiAgRW50cnksXG4gIEludmFsaWRUcmFuc2FjdGlvbkVycm9yLFxuICBOb2RlRW52aXJvbm1lbnRFcnJvcixcbiAgVHJhbnNhY3Rpb25UeXBlLFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgKiBhcyBDYXJkYW5vV2FzbSBmcm9tICdAZW11cmdvL2NhcmRhbm8tc2VyaWFsaXphdGlvbi1saWItbm9kZWpzJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuL2tleVBhaXInO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zYWN0aW9uSW5wdXQge1xuICB0cmFuc2FjdGlvbl9pZDogc3RyaW5nO1xuICB0cmFuc2FjdGlvbl9pbmRleDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zYWN0aW9uT3V0cHV0IHtcbiAgYWRkcmVzczogc3RyaW5nO1xuICBhbW91bnQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXaXRuZXNzIHtcbiAgcHVibGljS2V5OiBzdHJpbmc7XG4gIHNpZ25hdHVyZTogc3RyaW5nO1xufVxuZW51bSBDZXJ0VHlwZSB7XG4gIFN0YWtlS2V5UmVnaXN0cmF0aW9uLFxuICBTdGFrZUtleURlbGVnYXRpb24sXG4gIFN0YWtlS2V5RGVyZWdpc3RyYXRpb24sXG4gIFN0YWtlUG9vbFJlZ2lzdHJhdGlvbixcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDZXJ0IHtcbiAgdHlwZTogQ2VydFR5cGU7XG4gIHN0YWtlQ3JlZGVudGlhbEhhc2g/OiBzdHJpbmc7XG4gIHBvb2xLZXlIYXNoPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdpdGhkcmF3YWwge1xuICBzdGFrZUFkZHJlc3M6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbn1cbi8qKlxuICogVGhlIHRyYW5zYWN0aW9uIGRhdGEgcmV0dXJuZWQgZnJvbSB0aGUgdG9Kc29uKCkgZnVuY3Rpb24gb2YgYSB0cmFuc2FjdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR4RGF0YSB7XG4gIGlkOiBzdHJpbmc7XG4gIHR5cGU6IFRyYW5zYWN0aW9uVHlwZTtcbiAgaW5wdXRzOiBUcmFuc2FjdGlvbklucHV0W107XG4gIG91dHB1dHM6IFRyYW5zYWN0aW9uT3V0cHV0W107XG4gIHdpdG5lc3NlczogV2l0bmVzc1tdO1xuICBjZXJ0czogQ2VydFtdO1xuICB3aXRoZHJhd2FsczogV2l0aGRyYXdhbFtdO1xufVxuXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb24gZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb24ge1xuICBwcml2YXRlIF90cmFuc2FjdGlvbjogQ2FyZGFub1dhc20uVHJhbnNhY3Rpb247XG4gIHByaXZhdGUgX2ZlZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKGNvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoY29pbkNvbmZpZyk7XG4gIH1cblxuICBnZXQgdHJhbnNhY3Rpb24oKTogQ2FyZGFub1dhc20uVHJhbnNhY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbjtcbiAgfVxuXG4gIHNldCB0cmFuc2FjdGlvbih0eDogQ2FyZGFub1dhc20uVHJhbnNhY3Rpb24pIHtcbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IHR4O1xuICAgIHRoaXMuX2lkID0gQnVmZmVyLmZyb20oQ2FyZGFub1dhc20uaGFzaF90cmFuc2FjdGlvbih0eC5ib2R5KCkpLnRvX2J5dGVzKCkpLnRvU3RyaW5nKCdoZXgnKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBjYW5TaWduKGtleTogQmFzZUtleSk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICBuZXcgS2V5UGFpcih7IHBydjoga2V5LmtleSB9KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHRvQnJvYWRjYXN0Rm9ybWF0KCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLl90cmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdFbXB0eSB0cmFuc2FjdGlvbiBkYXRhJyk7XG4gICAgfVxuICAgIHJldHVybiBCdWZmZXIuZnJvbSh0aGlzLl90cmFuc2FjdGlvbi50b19ieXRlcygpKS50b1N0cmluZygnaGV4Jyk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdG9Kc29uKCk6IFR4RGF0YSB7XG4gICAgaWYgKCF0aGlzLl90cmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdFbXB0eSB0cmFuc2FjdGlvbiBkYXRhJyk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0OiBUeERhdGEgPSB7XG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIHR5cGU6IHRoaXMuX3R5cGUgYXMgVHJhbnNhY3Rpb25UeXBlLFxuICAgICAgaW5wdXRzOiBbXSxcbiAgICAgIG91dHB1dHM6IFtdLFxuICAgICAgd2l0bmVzc2VzOiBbXSxcbiAgICAgIGNlcnRzOiBbXSxcbiAgICAgIHdpdGhkcmF3YWxzOiBbXSxcbiAgICB9O1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl90cmFuc2FjdGlvbi5ib2R5KCkuaW5wdXRzKCkubGVuKCk7IGkrKykge1xuICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLl90cmFuc2FjdGlvbi5ib2R5KCkuaW5wdXRzKCkuZ2V0KGkpO1xuICAgICAgcmVzdWx0LmlucHV0cy5wdXNoKHtcbiAgICAgICAgdHJhbnNhY3Rpb25faWQ6IEJ1ZmZlci5mcm9tKGlucHV0LnRyYW5zYWN0aW9uX2lkKCkudG9fYnl0ZXMoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICB0cmFuc2FjdGlvbl9pbmRleDogaW5wdXQuaW5kZXgoKSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fdHJhbnNhY3Rpb24uYm9keSgpLm91dHB1dHMoKS5sZW4oKTsgaSsrKSB7XG4gICAgICBjb25zdCBvdXRwdXQgPSB0aGlzLl90cmFuc2FjdGlvbi5ib2R5KCkub3V0cHV0cygpLmdldChpKTtcbiAgICAgIHJlc3VsdC5vdXRwdXRzLnB1c2goe1xuICAgICAgICBhZGRyZXNzOiBvdXRwdXQuYWRkcmVzcygpLnRvX2JlY2gzMigpLFxuICAgICAgICBhbW91bnQ6IG91dHB1dC5hbW91bnQoKS5jb2luKCkudG9fc3RyKCksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fdHJhbnNhY3Rpb24uYm9keSgpLmNlcnRzKCkpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fdHJhbnNhY3Rpb24uYm9keSgpLmNlcnRzKCkhLmxlbigpOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2VydCA9IHRoaXMuX3RyYW5zYWN0aW9uLmJvZHkoKS5jZXJ0cygpIS5nZXQoaSk7XG4gICAgICAgIGlmIChjZXJ0LmFzX3N0YWtlX3JlZ2lzdHJhdGlvbigpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb25zdCBzdGFrZVJlZ2lzdHJhdGlvbiA9IGNlcnQuYXNfc3Rha2VfcmVnaXN0cmF0aW9uKCkgYXMgQ2FyZGFub1dhc20uU3Rha2VSZWdpc3RyYXRpb247XG4gICAgICAgICAgcmVzdWx0LmNlcnRzLnB1c2goe1xuICAgICAgICAgICAgdHlwZTogQ2VydFR5cGUuU3Rha2VLZXlSZWdpc3RyYXRpb24sXG4gICAgICAgICAgICBzdGFrZUNyZWRlbnRpYWxIYXNoOiBCdWZmZXIuZnJvbShzdGFrZVJlZ2lzdHJhdGlvbi5zdGFrZV9jcmVkZW50aWFsKCkudG9fYnl0ZXMoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjZXJ0LmFzX3N0YWtlX2RlcmVnaXN0cmF0aW9uKCkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbnN0IHN0YWtlRGVyZWdpc3RyYXRpb24gPSBjZXJ0LmFzX3N0YWtlX2RlcmVnaXN0cmF0aW9uKCkgYXMgQ2FyZGFub1dhc20uU3Rha2VEZXJlZ2lzdHJhdGlvbjtcbiAgICAgICAgICByZXN1bHQuY2VydHMucHVzaCh7XG4gICAgICAgICAgICB0eXBlOiBDZXJ0VHlwZS5TdGFrZUtleURlcmVnaXN0cmF0aW9uLFxuICAgICAgICAgICAgc3Rha2VDcmVkZW50aWFsSGFzaDogQnVmZmVyLmZyb20oc3Rha2VEZXJlZ2lzdHJhdGlvbi5zdGFrZV9jcmVkZW50aWFsKCkudG9fYnl0ZXMoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjZXJ0LmFzX3N0YWtlX2RlbGVnYXRpb24oKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3Qgc3Rha2VEZWxlZ2F0aW9uID0gY2VydC5hc19zdGFrZV9kZWxlZ2F0aW9uKCkgYXMgQ2FyZGFub1dhc20uU3Rha2VEZWxlZ2F0aW9uO1xuICAgICAgICAgIHJlc3VsdC5jZXJ0cy5wdXNoKHtcbiAgICAgICAgICAgIHR5cGU6IENlcnRUeXBlLlN0YWtlS2V5RGVsZWdhdGlvbixcbiAgICAgICAgICAgIHN0YWtlQ3JlZGVudGlhbEhhc2g6IEJ1ZmZlci5mcm9tKHN0YWtlRGVsZWdhdGlvbi5zdGFrZV9jcmVkZW50aWFsKCkudG9fYnl0ZXMoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgICAgcG9vbEtleUhhc2g6IEJ1ZmZlci5mcm9tKHN0YWtlRGVsZWdhdGlvbi5wb29sX2tleWhhc2goKS50b19ieXRlcygpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNlcnQuYXNfcG9vbF9yZWdpc3RyYXRpb24oKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3Qgc3Rha2VQb29sUmVnaXN0cmF0aW9uID0gY2VydC5hc19wb29sX3JlZ2lzdHJhdGlvbigpIGFzIENhcmRhbm9XYXNtLlBvb2xSZWdpc3RyYXRpb247XG4gICAgICAgICAgcmVzdWx0LmNlcnRzLnB1c2goe1xuICAgICAgICAgICAgdHlwZTogQ2VydFR5cGUuU3Rha2VQb29sUmVnaXN0cmF0aW9uLFxuICAgICAgICAgICAgcG9vbEtleUhhc2g6IEJ1ZmZlci5mcm9tKHN0YWtlUG9vbFJlZ2lzdHJhdGlvbi5wb29sX3BhcmFtcygpLm9wZXJhdG9yKCkudG9fYnl0ZXMoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3RyYW5zYWN0aW9uLmJvZHkoKS53aXRoZHJhd2FscygpKSB7XG4gICAgICBjb25zdCB3aXRoZHJhd2FscyA9IHRoaXMuX3RyYW5zYWN0aW9uLmJvZHkoKS53aXRoZHJhd2FscygpIGFzIENhcmRhbm9XYXNtLldpdGhkcmF3YWxzO1xuICAgICAgY29uc3Qga2V5cyA9IHdpdGhkcmF3YWxzLmtleXMoKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW4oKTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHJld2FyZEFkZHJlc3MgPSBrZXlzLmdldChpKTtcbiAgICAgICAgY29uc3QgcmV3YXJkID0gd2l0aGRyYXdhbHMuZ2V0KHJld2FyZEFkZHJlc3MpIGFzIENhcmRhbm9XYXNtLkJpZ051bTtcbiAgICAgICAgcmVzdWx0LndpdGhkcmF3YWxzLnB1c2goe1xuICAgICAgICAgIHN0YWtlQWRkcmVzczogcmV3YXJkQWRkcmVzcy50b19hZGRyZXNzKCkudG9fYnl0ZXMoKS50b1N0cmluZygpLFxuICAgICAgICAgIHZhbHVlOiByZXdhcmQudG9fc3RyKCksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl90cmFuc2FjdGlvbi53aXRuZXNzX3NldCgpLnZrZXlzKCkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgdmtleXMgPSB0aGlzLl90cmFuc2FjdGlvbi53aXRuZXNzX3NldCgpLnZrZXlzKCkgYXMgQ2FyZGFub1dhc20uVmtleXdpdG5lc3NlcztcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmtleXMubGVuKCk7IGkrKykge1xuICAgICAgICBjb25zdCB2a2V5ID0gKHRoaXMuX3RyYW5zYWN0aW9uLndpdG5lc3Nfc2V0KCkudmtleXMoKSBhcyBDYXJkYW5vV2FzbS5Wa2V5d2l0bmVzc2VzKS5nZXQoaSk7XG4gICAgICAgIHJlc3VsdC53aXRuZXNzZXMucHVzaCh7XG4gICAgICAgICAgcHVibGljS2V5OiB2a2V5Py52a2V5KCkucHVibGljX2tleSgpLnRvX2hleCgpLFxuICAgICAgICAgIHNpZ25hdHVyZTogdmtleT8uc2lnbmF0dXJlKCkudG9faGV4KCksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGlucHV0IGFuZCBvdXRwdXQgZmllbGQgZm9yIHRoaXMgdHJhbnNhY3Rpb25cbiAgICpcbiAgICovXG4gIGxvYWRJbnB1dHNBbmRPdXRwdXRzKCk6IHZvaWQge1xuICAgIGNvbnN0IG91dHB1dHM6IEVudHJ5W10gPSBbXTtcbiAgICBjb25zdCBpbnB1dHM6IEVudHJ5W10gPSBbXTtcblxuICAgIGNvbnN0IHR4X291dHB1dHMgPSB0aGlzLl90cmFuc2FjdGlvbi5ib2R5KCkub3V0cHV0cygpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHhfb3V0cHV0cy5sZW4oKTsgaSsrKSB7XG4gICAgICBjb25zdCBvdXRwdXQgPSB0eF9vdXRwdXRzLmdldChpKTtcbiAgICAgIG91dHB1dHMucHVzaCh7XG4gICAgICAgIGFkZHJlc3M6IG91dHB1dC5hZGRyZXNzKCkudG9fYmVjaDMyKCksXG4gICAgICAgIHZhbHVlOiBvdXRwdXQuYW1vdW50KCkuY29pbigpLnRvX3N0cigpLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5fb3V0cHV0cyA9IG91dHB1dHM7XG4gICAgdGhpcy5faW5wdXRzID0gaW5wdXRzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGdldCBzaWduYWJsZVBheWxvYWQoKTogQnVmZmVyIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oQ2FyZGFub1dhc20uaGFzaF90cmFuc2FjdGlvbih0aGlzLl90cmFuc2FjdGlvbi5ib2R5KCkpLnRvX2J5dGVzKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhpcyB0cmFuc2FjdGlvbiBwYXlsb2FkXG4gICAqXG4gICAqIEBwYXJhbSByYXdUeFxuICAgKi9cbiAgZnJvbVJhd1RyYW5zYWN0aW9uKHJhd1R4OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoQ2FyZGFub1dhc20uVHJhbnNhY3Rpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gYSB0ZW1wIGZpeCB1bnRpbCB3ZSBzb2x2ZSBpbXBvcnQgcHJvYmxlbSBpbiB3ZWJwYWNrXG4gICAgICB0aHJvdyBuZXcgTm9kZUVudmlyb25tZW50RXJyb3IoJ3VuYWJsZSB0byBsb2FkIGNhcmRhbm8gc2VyaWFsaXphdGlvbiBsaWJyYXJ5Jyk7XG4gICAgfVxuICAgIGNvbnN0IEhFWF9SRUdFWCA9IC9eWzAtOWEtZkEtRl0rJC87XG4gICAgY29uc3QgYnVmZmVyUmF3VHJhbnNhY3Rpb24gPSBIRVhfUkVHRVgudGVzdChyYXdUeCkgPyBCdWZmZXIuZnJvbShyYXdUeCwgJ2hleCcpIDogQnVmZmVyLmZyb20ocmF3VHgsICdiYXNlNjQnKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdHhuID0gQ2FyZGFub1dhc20uVHJhbnNhY3Rpb24uZnJvbV9ieXRlcyhidWZmZXJSYXdUcmFuc2FjdGlvbik7XG4gICAgICB0aGlzLl90cmFuc2FjdGlvbiA9IHR4bjtcbiAgICAgIHRoaXMuX2lkID0gQnVmZmVyLmZyb20oQ2FyZGFub1dhc20uaGFzaF90cmFuc2FjdGlvbih0eG4uYm9keSgpKS50b19ieXRlcygpKS50b1N0cmluZygnaGV4Jyk7XG4gICAgICB0aGlzLl90eXBlID0gVHJhbnNhY3Rpb25UeXBlLlNlbmQ7XG4gICAgICBpZiAodGhpcy5fdHJhbnNhY3Rpb24uYm9keSgpLmNlcnRzKCkpIHtcbiAgICAgICAgY29uc3QgY2VydHM6IENhcmRhbm9XYXNtLkNlcnRpZmljYXRlW10gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl90cmFuc2FjdGlvbi5ib2R5KCkuY2VydHMoKSEubGVuKCk7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGNlcnQgPSB0aGlzLl90cmFuc2FjdGlvbi5ib2R5KCkuY2VydHMoKSEuZ2V0KGkpO1xuICAgICAgICAgIGNlcnRzLnB1c2goY2VydCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2VydHMuc29tZSgoYykgPT4gYy5hc19wb29sX3JlZ2lzdHJhdGlvbigpICE9PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgdGhpcy5fdHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nUGxlZGdlO1xuICAgICAgICB9IGVsc2UgaWYgKGNlcnRzLnNvbWUoKGMpID0+IGMuYXNfc3Rha2VfcmVnaXN0cmF0aW9uKCkgIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICB0aGlzLl90eXBlID0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdBY3RpdmF0ZTtcbiAgICAgICAgfSBlbHNlIGlmIChjZXJ0cy5zb21lKChjKSA9PiBjLmFzX3N0YWtlX2RlcmVnaXN0cmF0aW9uKCkgIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICB0aGlzLl90eXBlID0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdEZWFjdGl2YXRlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fdHJhbnNhY3Rpb24uYm9keSgpLndpdGhkcmF3YWxzKCkpIHtcbiAgICAgICAgdGhpcy5fdHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nV2l0aGRyYXc7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2ZlZSA9IHR4bi5ib2R5KCkuZmVlKCkudG9fc3RyKCk7XG4gICAgICB0aGlzLmxvYWRJbnB1dHNBbmRPdXRwdXRzKCk7XG5cbiAgICAgIGlmICh0aGlzLl90cmFuc2FjdGlvbi53aXRuZXNzX3NldCgpLnZrZXlzKCkpIHtcbiAgICAgICAgY29uc3QgdmtleXMgPSB0aGlzLl90cmFuc2FjdGlvbi53aXRuZXNzX3NldCgpLnZrZXlzKCkhIGFzIENhcmRhbm9XYXNtLlZrZXl3aXRuZXNzZXM7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmtleXMubGVuKCk7IGkrKykge1xuICAgICAgICAgIGNvbnN0IHZrZXkgPSB2a2V5cy5nZXQoaSk7XG4gICAgICAgICAgdGhpcy5fc2lnbmF0dXJlcy5wdXNoKHZrZXkuc2lnbmF0dXJlKCkudG9faGV4KCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCd1bmFibGUgdG8gYnVpbGQgdHJhbnNhY3Rpb24gZnJvbSByYXcnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSB0cmFuc2FjdGlvbiB0eXBlLlxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uVHlwZX0gdHJhbnNhY3Rpb25UeXBlIFRoZSB0cmFuc2FjdGlvbiB0eXBlIHRvIGJlIHNldC5cbiAgICovXG4gIHNldFRyYW5zYWN0aW9uVHlwZSh0cmFuc2FjdGlvblR5cGU6IFRyYW5zYWN0aW9uVHlwZSk6IHZvaWQge1xuICAgIHRoaXMuX3R5cGUgPSB0cmFuc2FjdGlvblR5cGU7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgZXhwbGFpblRyYW5zYWN0aW9uKCk6IHtcbiAgICBvdXRwdXRzOiB7IGFtb3VudDogc3RyaW5nOyBhZGRyZXNzOiBzdHJpbmcgfVtdO1xuICAgIGNlcnRpZmljYXRlczogQ2VydFtdO1xuICAgIGNoYW5nZU91dHB1dHM6IHN0cmluZ1tdO1xuICAgIG91dHB1dEFtb3VudDogc3RyaW5nO1xuICAgIGZlZTogeyBmZWU6IHN0cmluZyB9O1xuICAgIGRpc3BsYXlPcmRlcjogc3RyaW5nW107XG4gICAgaWQ6IHN0cmluZztcbiAgICBjaGFuZ2VBbW91bnQ6IHN0cmluZztcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgd2l0aGRyYXdhbHM6IFdpdGhkcmF3YWxbXTtcbiAgfSB7XG4gICAgY29uc3QgdHhKc29uID0gdGhpcy50b0pzb24oKTtcbiAgICBjb25zdCBkaXNwbGF5T3JkZXIgPSBbJ2lkJywgJ291dHB1dEFtb3VudCcsICdjaGFuZ2VBbW91bnQnLCAnb3V0cHV0cycsICdjaGFuZ2VPdXRwdXRzJywgJ2ZlZScsICd0eXBlJ107XG4gICAgY29uc3QgYW1vdW50ID0gdHhKc29uLm91dHB1dHMubWFwKChvKSA9PiAoeyBhbW91bnQ6IEJpZ0ludChvLmFtb3VudCkgfSkpO1xuICAgIGNvbnN0IG91dHB1dEFtb3VudCA9IGFtb3VudC5yZWR1Y2UoKHAsIG4pID0+IHAgKyBCaWdJbnQobi5hbW91bnQpLCBCaWdJbnQoJzAnKSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCB0eXBlID1cbiAgICAgIHRoaXMuX3R5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5TZW5kXG4gICAgICAgID8gJ1RyYW5zZmVyJ1xuICAgICAgICA6IHRoaXMuX3R5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQWN0aXZhdGVcbiAgICAgICAgPyAnU3Rha2luZ0FjdGl2YXRlJ1xuICAgICAgICA6IHRoaXMuX3R5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nV2l0aGRyYXdcbiAgICAgICAgPyAnU3Rha2luZ1dpdGhkcmF3J1xuICAgICAgICA6IHRoaXMuX3R5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nRGVhY3RpdmF0ZVxuICAgICAgICA/ICdTdGFraW5nRGVhY3RpdmF0ZSdcbiAgICAgICAgOiB0aGlzLl90eXBlID09PSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1BsZWRnZVxuICAgICAgICA/ICdTdGFraW5nUGxlZGdlJ1xuICAgICAgICA6ICd1bmRlZmluZWQnO1xuICAgIHJldHVybiB7XG4gICAgICBkaXNwbGF5T3JkZXIsXG4gICAgICBpZDogdHhKc29uLmlkLFxuICAgICAgb3V0cHV0czogdHhKc29uLm91dHB1dHMubWFwKChvKSA9PiAoeyBhZGRyZXNzOiBvLmFkZHJlc3MsIGFtb3VudDogby5hbW91bnQgfSkpLFxuICAgICAgb3V0cHV0QW1vdW50OiBvdXRwdXRBbW91bnQsXG4gICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgIGNoYW5nZUFtb3VudDogJzAnLFxuICAgICAgZmVlOiB7IGZlZTogdGhpcy5fZmVlIH0sXG4gICAgICB0eXBlLFxuICAgICAgY2VydGlmaWNhdGVzOiB0eEpzb24uY2VydHMsXG4gICAgICB3aXRoZHJhd2FsczogdHhKc29uLndpdGhkcmF3YWxzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRyYW5zYWN0aW9uIGZlZVxuICAgKi9cbiAgZ2V0IGdldEZlZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9mZWU7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRyYW5zYWN0aW9uIGZlZVxuICAgKlxuICAgKiBAcGFyYW0gZmVlXG4gICAqL1xuICBmZWUoZmVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9mZWUgPSBmZWU7XG4gIH1cbn1cbiJdfQ==
338
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtREFPOEI7QUFDOUIsc0ZBQXdFO0FBQ3hFLHVDQUFvQztBQWlCcEMsSUFBSyxRQUtKO0FBTEQsV0FBSyxRQUFRO0lBQ1gsdUVBQW9CLENBQUE7SUFDcEIsbUVBQWtCLENBQUE7SUFDbEIsMkVBQXNCLENBQUE7SUFDdEIseUVBQXFCLENBQUE7QUFDdkIsQ0FBQyxFQUxJLFFBQVEsS0FBUixRQUFRLFFBS1o7QUErQ0QsTUFBYSxXQUFZLFNBQVEsMEJBQWU7SUFLOUMsWUFBWSxVQUFnQztRQUMxQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBSSxXQUFXLENBQUMsRUFBMkI7UUFDekMsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3RixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLE9BQU8sQ0FBQyxHQUFZO1FBQ2xCLElBQUk7WUFDRixJQUFJLGlCQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDOUIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUFDLE1BQU07WUFDTixPQUFPLEtBQUssQ0FBQztTQUNkO0lBQ0gsQ0FBQztJQUVELGlCQUFpQjtRQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsWUFB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QUFLO1lBQzFCLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVztZQUMvQixhQUFhLEVBQUUsSUFBSSxDQUFDLGNBQWM7U0FDbkMsQ0FBQztJQUNKLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsR0FBRyxDQUFDLEdBQVc7UUFDYixJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztJQUNsQixDQUFDO0NBQ0Y7QUF6VkQsa0NBeVZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQmFzZUtleSxcbiAgQmFzZVRyYW5zYWN0aW9uLFxuICBFbnRyeSxcbiAgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsXG4gIE5vZGVFbnZpcm9ubWVudEVycm9yLFxuICBUcmFuc2FjdGlvblR5cGUsXG59IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCAqIGFzIENhcmRhbm9XYXNtIGZyb20gJ0BlbXVyZ28vY2FyZGFuby1zZXJpYWxpemF0aW9uLWxpYi1ub2RlanMnO1xuaW1wb3J0IHsgS2V5UGFpciB9IGZyb20gJy4va2V5UGFpcic7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNhY3Rpb25JbnB1dCB7XG4gIHRyYW5zYWN0aW9uX2lkOiBzdHJpbmc7XG4gIHRyYW5zYWN0aW9uX2luZGV4OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNhY3Rpb25PdXRwdXQge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIGFtb3VudDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdpdG5lc3Mge1xuICBwdWJsaWNLZXk6IHN0cmluZztcbiAgc2lnbmF0dXJlOiBzdHJpbmc7XG59XG5lbnVtIENlcnRUeXBlIHtcbiAgU3Rha2VLZXlSZWdpc3RyYXRpb24sXG4gIFN0YWtlS2V5RGVsZWdhdGlvbixcbiAgU3Rha2VLZXlEZXJlZ2lzdHJhdGlvbixcbiAgU3Rha2VQb29sUmVnaXN0cmF0aW9uLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENlcnQge1xuICB0eXBlOiBDZXJ0VHlwZTtcbiAgc3Rha2VDcmVkZW50aWFsSGFzaD86IHN0cmluZztcbiAgcG9vbEtleUhhc2g/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2l0aGRyYXdhbCB7XG4gIHN0YWtlQWRkcmVzczogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBTdGFrZUtleVJlZ2lzdHJhdGlvbkNlcnQgPSBDZXJ0O1xuXG5leHBvcnQgdHlwZSBTdGFrZUtleURlbGVnYXRpb25DZXJ0ID0gQ2VydDtcblxuZXhwb3J0IGludGVyZmFjZSBTdGFrZVBvb2xSZWdpc3RyYXRpb25DZXJ0IGV4dGVuZHMgQ2VydCB7XG4gIHZyZktleUhhc2g6IHN0cmluZztcbiAgcGxlZGdlOiBzdHJpbmc7XG4gIGNvc3Q6IHN0cmluZztcbiAgbWFyZ2luTnVtZXJhdG9yOiBzdHJpbmc7XG4gIG1hcmdpbkRlbm9taW5hdG9yOiBzdHJpbmc7XG4gIHJld2FyZEFjY291bnQ6IHN0cmluZztcbiAgcG9vbE93bmVyczogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGxlZGdlRGV0YWlscyB7XG4gIHN0YWtlS2V5UmVnc2l0cmF0aW9uPzogU3Rha2VLZXlSZWdpc3RyYXRpb25DZXJ0O1xuICBzdGFrZUtleURlbGVnYXRpb24/OiBTdGFrZUtleURlbGVnYXRpb25DZXJ0O1xuICBzdGFrZVBvb2xSZWdpc3RyYXRpb246IFN0YWtlUG9vbFJlZ2lzdHJhdGlvbkNlcnQ7XG59XG5cbi8qKlxuICogVGhlIHRyYW5zYWN0aW9uIGRhdGEgcmV0dXJuZWQgZnJvbSB0aGUgdG9Kc29uKCkgZnVuY3Rpb24gb2YgYSB0cmFuc2FjdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR4RGF0YSB7XG4gIGlkOiBzdHJpbmc7XG4gIHR5cGU6IFRyYW5zYWN0aW9uVHlwZTtcbiAgaW5wdXRzOiBUcmFuc2FjdGlvbklucHV0W107XG4gIG91dHB1dHM6IFRyYW5zYWN0aW9uT3V0cHV0W107XG4gIHdpdG5lc3NlczogV2l0bmVzc1tdO1xuICBjZXJ0czogQ2VydFtdO1xuICB3aXRoZHJhd2FsczogV2l0aGRyYXdhbFtdO1xuICBwbGVkZ2VEZXRhaWxzPzogUGxlZGdlRGV0YWlscztcbn1cblxuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uIHtcbiAgcHJpdmF0ZSBfdHJhbnNhY3Rpb246IENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uO1xuICBwcml2YXRlIF9mZWU6IHN0cmluZztcbiAgcHJpdmF0ZSBfcGxlZGdlRGV0YWlscz86IFBsZWRnZURldGFpbHM7XG5cbiAgY29uc3RydWN0b3IoY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihjb2luQ29uZmlnKTtcbiAgfVxuXG4gIGdldCB0cmFuc2FjdGlvbigpOiBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zYWN0aW9uO1xuICB9XG5cbiAgc2V0IHRyYW5zYWN0aW9uKHR4OiBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbikge1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uID0gdHg7XG4gICAgdGhpcy5faWQgPSBCdWZmZXIuZnJvbShDYXJkYW5vV2FzbS5oYXNoX3RyYW5zYWN0aW9uKHR4LmJvZHkoKSkudG9fYnl0ZXMoKSkudG9TdHJpbmcoJ2hleCcpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGNhblNpZ24oa2V5OiBCYXNlS2V5KTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIG5ldyBLZXlQYWlyKHsgcHJ2OiBrZXkua2V5IH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgdG9Ccm9hZGNhc3RGb3JtYXQoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuX3RyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ0VtcHR5IHRyYW5zYWN0aW9uIGRhdGEnKTtcbiAgICB9XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHRoaXMuX3RyYW5zYWN0aW9uLnRvX2J5dGVzKCkpLnRvU3RyaW5nKCdoZXgnKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB0b0pzb24oKTogVHhEYXRhIHtcbiAgICBpZiAoIXRoaXMuX3RyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ0VtcHR5IHRyYW5zYWN0aW9uIGRhdGEnKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQ6IFR4RGF0YSA9IHtcbiAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgdHlwZTogdGhpcy5fdHlwZSBhcyBUcmFuc2FjdGlvblR5cGUsXG4gICAgICBpbnB1dHM6IFtdLFxuICAgICAgb3V0cHV0czogW10sXG4gICAgICB3aXRuZXNzZXM6IFtdLFxuICAgICAgY2VydHM6IFtdLFxuICAgICAgd2l0aGRyYXdhbHM6IFtdLFxuICAgIH07XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX3RyYW5zYWN0aW9uLmJvZHkoKS5pbnB1dHMoKS5sZW4oKTsgaSsrKSB7XG4gICAgICBjb25zdCBpbnB1dCA9IHRoaXMuX3RyYW5zYWN0aW9uLmJvZHkoKS5pbnB1dHMoKS5nZXQoaSk7XG4gICAgICByZXN1bHQuaW5wdXRzLnB1c2goe1xuICAgICAgICB0cmFuc2FjdGlvbl9pZDogQnVmZmVyLmZyb20oaW5wdXQudHJhbnNhY3Rpb25faWQoKS50b19ieXRlcygpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgIHRyYW5zYWN0aW9uX2luZGV4OiBpbnB1dC5pbmRleCgpLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl90cmFuc2FjdGlvbi5ib2R5KCkub3V0cHV0cygpLmxlbigpOyBpKyspIHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IHRoaXMuX3RyYW5zYWN0aW9uLmJvZHkoKS5vdXRwdXRzKCkuZ2V0KGkpO1xuICAgICAgcmVzdWx0Lm91dHB1dHMucHVzaCh7XG4gICAgICAgIGFkZHJlc3M6IG91dHB1dC5hZGRyZXNzKCkudG9fYmVjaDMyKCksXG4gICAgICAgIGFtb3VudDogb3V0cHV0LmFtb3VudCgpLmNvaW4oKS50b19zdHIoKSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl90cmFuc2FjdGlvbi5ib2R5KCkuY2VydHMoKSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl90cmFuc2FjdGlvbi5ib2R5KCkuY2VydHMoKSEubGVuKCk7IGkrKykge1xuICAgICAgICBjb25zdCBjZXJ0ID0gdGhpcy5fdHJhbnNhY3Rpb24uYm9keSgpLmNlcnRzKCkhLmdldChpKTtcbiAgICAgICAgaWYgKGNlcnQuYXNfc3Rha2VfcmVnaXN0cmF0aW9uKCkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbnN0IHN0YWtlUmVnaXN0cmF0aW9uID0gY2VydC5hc19zdGFrZV9yZWdpc3RyYXRpb24oKSBhcyBDYXJkYW5vV2FzbS5TdGFrZVJlZ2lzdHJhdGlvbjtcbiAgICAgICAgICByZXN1bHQuY2VydHMucHVzaCh7XG4gICAgICAgICAgICB0eXBlOiBDZXJ0VHlwZS5TdGFrZUtleVJlZ2lzdHJhdGlvbixcbiAgICAgICAgICAgIHN0YWtlQ3JlZGVudGlhbEhhc2g6IEJ1ZmZlci5mcm9tKHN0YWtlUmVnaXN0cmF0aW9uLnN0YWtlX2NyZWRlbnRpYWwoKS50b19ieXRlcygpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNlcnQuYXNfc3Rha2VfZGVyZWdpc3RyYXRpb24oKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3Qgc3Rha2VEZXJlZ2lzdHJhdGlvbiA9IGNlcnQuYXNfc3Rha2VfZGVyZWdpc3RyYXRpb24oKSBhcyBDYXJkYW5vV2FzbS5TdGFrZURlcmVnaXN0cmF0aW9uO1xuICAgICAgICAgIHJlc3VsdC5jZXJ0cy5wdXNoKHtcbiAgICAgICAgICAgIHR5cGU6IENlcnRUeXBlLlN0YWtlS2V5RGVyZWdpc3RyYXRpb24sXG4gICAgICAgICAgICBzdGFrZUNyZWRlbnRpYWxIYXNoOiBCdWZmZXIuZnJvbShzdGFrZURlcmVnaXN0cmF0aW9uLnN0YWtlX2NyZWRlbnRpYWwoKS50b19ieXRlcygpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNlcnQuYXNfc3Rha2VfZGVsZWdhdGlvbigpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb25zdCBzdGFrZURlbGVnYXRpb24gPSBjZXJ0LmFzX3N0YWtlX2RlbGVnYXRpb24oKSBhcyBDYXJkYW5vV2FzbS5TdGFrZURlbGVnYXRpb247XG4gICAgICAgICAgcmVzdWx0LmNlcnRzLnB1c2goe1xuICAgICAgICAgICAgdHlwZTogQ2VydFR5cGUuU3Rha2VLZXlEZWxlZ2F0aW9uLFxuICAgICAgICAgICAgc3Rha2VDcmVkZW50aWFsSGFzaDogQnVmZmVyLmZyb20oc3Rha2VEZWxlZ2F0aW9uLnN0YWtlX2NyZWRlbnRpYWwoKS50b19ieXRlcygpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgICBwb29sS2V5SGFzaDogQnVmZmVyLmZyb20oc3Rha2VEZWxlZ2F0aW9uLnBvb2xfa2V5aGFzaCgpLnRvX2J5dGVzKCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2VydC5hc19wb29sX3JlZ2lzdHJhdGlvbigpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb25zdCBzdGFrZVBvb2xSZWdpc3RyYXRpb24gPSBjZXJ0LmFzX3Bvb2xfcmVnaXN0cmF0aW9uKCkgYXMgQ2FyZGFub1dhc20uUG9vbFJlZ2lzdHJhdGlvbjtcbiAgICAgICAgICByZXN1bHQuY2VydHMucHVzaCh7XG4gICAgICAgICAgICB0eXBlOiBDZXJ0VHlwZS5TdGFrZVBvb2xSZWdpc3RyYXRpb24sXG4gICAgICAgICAgICBwb29sS2V5SGFzaDogQnVmZmVyLmZyb20oc3Rha2VQb29sUmVnaXN0cmF0aW9uLnBvb2xfcGFyYW1zKCkub3BlcmF0b3IoKS50b19ieXRlcygpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXN1bHQucGxlZGdlRGV0YWlscyA9IHRoaXMuX3BsZWRnZURldGFpbHM7XG5cbiAgICBpZiAodGhpcy5fdHJhbnNhY3Rpb24uYm9keSgpLndpdGhkcmF3YWxzKCkpIHtcbiAgICAgIGNvbnN0IHdpdGhkcmF3YWxzID0gdGhpcy5fdHJhbnNhY3Rpb24uYm9keSgpLndpdGhkcmF3YWxzKCkgYXMgQ2FyZGFub1dhc20uV2l0aGRyYXdhbHM7XG4gICAgICBjb25zdCBrZXlzID0gd2l0aGRyYXdhbHMua2V5cygpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbigpOyBpKyspIHtcbiAgICAgICAgY29uc3QgcmV3YXJkQWRkcmVzcyA9IGtleXMuZ2V0KGkpO1xuICAgICAgICBjb25zdCByZXdhcmQgPSB3aXRoZHJhd2Fscy5nZXQocmV3YXJkQWRkcmVzcykgYXMgQ2FyZGFub1dhc20uQmlnTnVtO1xuICAgICAgICByZXN1bHQud2l0aGRyYXdhbHMucHVzaCh7XG4gICAgICAgICAgc3Rha2VBZGRyZXNzOiByZXdhcmRBZGRyZXNzLnRvX2FkZHJlc3MoKS50b19ieXRlcygpLnRvU3RyaW5nKCksXG4gICAgICAgICAgdmFsdWU6IHJld2FyZC50b19zdHIoKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3RyYW5zYWN0aW9uLndpdG5lc3Nfc2V0KCkudmtleXMoKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCB2a2V5cyA9IHRoaXMuX3RyYW5zYWN0aW9uLndpdG5lc3Nfc2V0KCkudmtleXMoKSBhcyBDYXJkYW5vV2FzbS5Wa2V5d2l0bmVzc2VzO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2a2V5cy5sZW4oKTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHZrZXkgPSAodGhpcy5fdHJhbnNhY3Rpb24ud2l0bmVzc19zZXQoKS52a2V5cygpIGFzIENhcmRhbm9XYXNtLlZrZXl3aXRuZXNzZXMpLmdldChpKTtcbiAgICAgICAgcmVzdWx0LndpdG5lc3Nlcy5wdXNoKHtcbiAgICAgICAgICBwdWJsaWNLZXk6IHZrZXk/LnZrZXkoKS5wdWJsaWNfa2V5KCkudG9faGV4KCksXG4gICAgICAgICAgc2lnbmF0dXJlOiB2a2V5Py5zaWduYXR1cmUoKS50b19oZXgoKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgaW5wdXQgYW5kIG91dHB1dCBmaWVsZCBmb3IgdGhpcyB0cmFuc2FjdGlvblxuICAgKlxuICAgKi9cbiAgbG9hZElucHV0c0FuZE91dHB1dHMoKTogdm9pZCB7XG4gICAgY29uc3Qgb3V0cHV0czogRW50cnlbXSA9IFtdO1xuICAgIGNvbnN0IGlucHV0czogRW50cnlbXSA9IFtdO1xuXG4gICAgY29uc3QgdHhfb3V0cHV0cyA9IHRoaXMuX3RyYW5zYWN0aW9uLmJvZHkoKS5vdXRwdXRzKCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0eF9vdXRwdXRzLmxlbigpOyBpKyspIHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IHR4X291dHB1dHMuZ2V0KGkpO1xuICAgICAgb3V0cHV0cy5wdXNoKHtcbiAgICAgICAgYWRkcmVzczogb3V0cHV0LmFkZHJlc3MoKS50b19iZWNoMzIoKSxcbiAgICAgICAgdmFsdWU6IG91dHB1dC5hbW91bnQoKS5jb2luKCkudG9fc3RyKCksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLl9vdXRwdXRzID0gb3V0cHV0cztcbiAgICB0aGlzLl9pbnB1dHMgPSBpbnB1dHM7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgZ2V0IHNpZ25hYmxlUGF5bG9hZCgpOiBCdWZmZXIge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShDYXJkYW5vV2FzbS5oYXNoX3RyYW5zYWN0aW9uKHRoaXMuX3RyYW5zYWN0aW9uLmJvZHkoKSkudG9fYnl0ZXMoKSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGlzIHRyYW5zYWN0aW9uIHBheWxvYWRcbiAgICpcbiAgICogQHBhcmFtIHJhd1R4XG4gICAqL1xuICBmcm9tUmF3VHJhbnNhY3Rpb24ocmF3VHg6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBhIHRlbXAgZml4IHVudGlsIHdlIHNvbHZlIGltcG9ydCBwcm9ibGVtIGluIHdlYnBhY2tcbiAgICAgIHRocm93IG5ldyBOb2RlRW52aXJvbm1lbnRFcnJvcigndW5hYmxlIHRvIGxvYWQgY2FyZGFubyBzZXJpYWxpemF0aW9uIGxpYnJhcnknKTtcbiAgICB9XG4gICAgY29uc3QgSEVYX1JFR0VYID0gL15bMC05YS1mQS1GXSskLztcbiAgICBjb25zdCBidWZmZXJSYXdUcmFuc2FjdGlvbiA9IEhFWF9SRUdFWC50ZXN0KHJhd1R4KSA/IEJ1ZmZlci5mcm9tKHJhd1R4LCAnaGV4JykgOiBCdWZmZXIuZnJvbShyYXdUeCwgJ2Jhc2U2NCcpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0eG4gPSBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbi5mcm9tX2J5dGVzKGJ1ZmZlclJhd1RyYW5zYWN0aW9uKTtcbiAgICAgIHRoaXMuX3RyYW5zYWN0aW9uID0gdHhuO1xuICAgICAgdGhpcy5faWQgPSBCdWZmZXIuZnJvbShDYXJkYW5vV2FzbS5oYXNoX3RyYW5zYWN0aW9uKHR4bi5ib2R5KCkpLnRvX2J5dGVzKCkpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgIHRoaXMuX3R5cGUgPSBUcmFuc2FjdGlvblR5cGUuU2VuZDtcbiAgICAgIGlmICh0aGlzLl90cmFuc2FjdGlvbi5ib2R5KCkuY2VydHMoKSkge1xuICAgICAgICBjb25zdCBjZXJ0czogQ2FyZGFub1dhc20uQ2VydGlmaWNhdGVbXSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX3RyYW5zYWN0aW9uLmJvZHkoKS5jZXJ0cygpIS5sZW4oKTsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgY2VydCA9IHRoaXMuX3RyYW5zYWN0aW9uLmJvZHkoKS5jZXJ0cygpIS5nZXQoaSk7XG4gICAgICAgICAgY2VydHMucHVzaChjZXJ0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjZXJ0cy5zb21lKChjKSA9PiBjLmFzX3Bvb2xfcmVnaXN0cmF0aW9uKCkgIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICB0aGlzLl90eXBlID0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdQbGVkZ2U7XG4gICAgICAgICAgY29uc3Qgc3Rha2VLZXlSZWdpc3RyYXRpb24gPSBjZXJ0cy5maW5kKChjKSA9PiBjLmFzX3N0YWtlX3JlZ2lzdHJhdGlvbigpICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgIGNvbnN0IHN0YWtlS2V5RGVsZWdhdGlvbiA9IGNlcnRzLmZpbmQoKGMpID0+IGMuYXNfc3Rha2VfZGVsZWdhdGlvbigpICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgIGNvbnN0IHN0YWtlUG9vbFJlZ2lzdHJhdGlvbiA9IGNlcnRzLmZpbmQoKGMpID0+IGMuYXNfcG9vbF9yZWdpc3RyYXRpb24oKSAhPT0gdW5kZWZpbmVkKTtcblxuICAgICAgICAgIHRoaXMuX3BsZWRnZURldGFpbHMgPSB7XG4gICAgICAgICAgICBzdGFrZUtleVJlZ3NpdHJhdGlvbjogdGhpcy5sb2FkU3Rha2VLZXlSZWdpc3RyYXRpb24oc3Rha2VLZXlSZWdpc3RyYXRpb24pLFxuICAgICAgICAgICAgc3Rha2VLZXlEZWxlZ2F0aW9uOiB0aGlzLmxvYWRTdGFrZUtleURlbGVnYXRpb24oc3Rha2VLZXlEZWxlZ2F0aW9uKSxcbiAgICAgICAgICAgIHN0YWtlUG9vbFJlZ2lzdHJhdGlvbjogdGhpcy5sb2FkU3Rha2VQb29sUmVnaXN0cmF0aW9uKHN0YWtlUG9vbFJlZ2lzdHJhdGlvbiEpLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoY2VydHMuc29tZSgoYykgPT4gYy5hc19zdGFrZV9yZWdpc3RyYXRpb24oKSAhPT0gdW5kZWZpbmVkKSkge1xuICAgICAgICAgIHRoaXMuX3R5cGUgPSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0FjdGl2YXRlO1xuICAgICAgICB9IGVsc2UgaWYgKGNlcnRzLnNvbWUoKGMpID0+IGMuYXNfc3Rha2VfZGVyZWdpc3RyYXRpb24oKSAhPT0gdW5kZWZpbmVkKSkge1xuICAgICAgICAgIHRoaXMuX3R5cGUgPSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0RlYWN0aXZhdGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl90cmFuc2FjdGlvbi5ib2R5KCkud2l0aGRyYXdhbHMoKSkge1xuICAgICAgICB0aGlzLl90eXBlID0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdXaXRoZHJhdztcbiAgICAgIH1cblxuICAgICAgdGhpcy5fZmVlID0gdHhuLmJvZHkoKS5mZWUoKS50b19zdHIoKTtcbiAgICAgIHRoaXMubG9hZElucHV0c0FuZE91dHB1dHMoKTtcblxuICAgICAgaWYgKHRoaXMuX3RyYW5zYWN0aW9uLndpdG5lc3Nfc2V0KCkudmtleXMoKSkge1xuICAgICAgICBjb25zdCB2a2V5cyA9IHRoaXMuX3RyYW5zYWN0aW9uLndpdG5lc3Nfc2V0KCkudmtleXMoKSEgYXMgQ2FyZGFub1dhc20uVmtleXdpdG5lc3NlcztcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2a2V5cy5sZW4oKTsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgdmtleSA9IHZrZXlzLmdldChpKTtcbiAgICAgICAgICB0aGlzLl9zaWduYXR1cmVzLnB1c2godmtleS5zaWduYXR1cmUoKS50b19oZXgoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ3VuYWJsZSB0byBidWlsZCB0cmFuc2FjdGlvbiBmcm9tIHJhdycpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbG9hZFN0YWtlS2V5UmVnaXN0cmF0aW9uKFxuICAgIGNlcnRpZmljYXRlOiBDYXJkYW5vV2FzbS5DZXJ0aWZpY2F0ZSB8IHVuZGVmaW5lZFxuICApOiBTdGFrZUtleVJlZ2lzdHJhdGlvbkNlcnQgfCB1bmRlZmluZWQge1xuICAgIGlmIChjZXJ0aWZpY2F0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBzdGFrZVJlZ2lzdHJhdGlvbiA9IGNlcnRpZmljYXRlLmFzX3N0YWtlX3JlZ2lzdHJhdGlvbigpO1xuICAgIGlmIChzdGFrZVJlZ2lzdHJhdGlvbiAhPT0gdW5kZWZpbmVkICYmIHN0YWtlUmVnaXN0cmF0aW9uIS5zdGFrZV9jcmVkZW50aWFsKCkudG9fa2V5aGFzaCgpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IENlcnRUeXBlLlN0YWtlS2V5UmVnaXN0cmF0aW9uLFxuICAgICAgICBzdGFrZUNyZWRlbnRpYWxIYXNoOiBzdGFrZVJlZ2lzdHJhdGlvbiEuc3Rha2VfY3JlZGVudGlhbCgpLnRvX2tleWhhc2goKSEudG9faGV4KCksXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbG9hZFN0YWtlS2V5RGVsZWdhdGlvbihjZXJ0aWZpY2F0ZTogQ2FyZGFub1dhc20uQ2VydGlmaWNhdGUgfCB1bmRlZmluZWQpOiBTdGFrZUtleURlbGVnYXRpb25DZXJ0IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoY2VydGlmaWNhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3Qgc3Rha2VEZWxlZ2F0aW9uID0gY2VydGlmaWNhdGUuYXNfc3Rha2VfZGVsZWdhdGlvbigpO1xuICAgIGlmIChzdGFrZURlbGVnYXRpb24gIT09IHVuZGVmaW5lZCAmJiBzdGFrZURlbGVnYXRpb24hLnN0YWtlX2NyZWRlbnRpYWwoKS50b19rZXloYXNoKCkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogQ2VydFR5cGUuU3Rha2VLZXlEZWxlZ2F0aW9uLFxuICAgICAgICBzdGFrZUNyZWRlbnRpYWxIYXNoOiBzdGFrZURlbGVnYXRpb24hLnN0YWtlX2NyZWRlbnRpYWwoKS50b19rZXloYXNoKCkhLnRvX2hleCgpLFxuICAgICAgICBwb29sS2V5SGFzaDogc3Rha2VEZWxlZ2F0aW9uIS5wb29sX2tleWhhc2goKS50b19oZXgoKSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsb2FkU3Rha2VQb29sUmVnaXN0cmF0aW9uKGNlcnRpZmljYXRlOiBDYXJkYW5vV2FzbS5DZXJ0aWZpY2F0ZSk6IFN0YWtlUG9vbFJlZ2lzdHJhdGlvbkNlcnQge1xuICAgIGNvbnN0IHBvb2xSZWdpc3RyYXRpb24gPSBjZXJ0aWZpY2F0ZS5hc19wb29sX3JlZ2lzdHJhdGlvbigpO1xuICAgIGNvbnN0IHJld2FyZEFjY291bnQgPSBwb29sUmVnaXN0cmF0aW9uIS5wb29sX3BhcmFtcygpLnJld2FyZF9hY2NvdW50KCk7XG4gICAgY29uc3QgbmV0d29ya0lkID0gcmV3YXJkQWNjb3VudC50b19hZGRyZXNzKCkubmV0d29ya19pZCgpO1xuICAgIGNvbnN0IG93bmVyczogc3RyaW5nW10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvb2xSZWdpc3RyYXRpb24hLnBvb2xfcGFyYW1zKCkucG9vbF9vd25lcnMoKS5sZW4oKTsgaSsrKSB7XG4gICAgICBjb25zdCBwb29sT3duZXIgPSBwb29sUmVnaXN0cmF0aW9uIS5wb29sX3BhcmFtcygpLnBvb2xfb3duZXJzKCkuZ2V0KGkpO1xuICAgICAgY29uc3Qgb3duZXJTdGFrZUtleSA9IENhcmRhbm9XYXNtLlN0YWtlQ3JlZGVudGlhbC5mcm9tX2tleWhhc2gocG9vbE93bmVyKTtcbiAgICAgIG93bmVycy5wdXNoKENhcmRhbm9XYXNtLlJld2FyZEFkZHJlc3MubmV3KG5ldHdvcmtJZCwgb3duZXJTdGFrZUtleSkudG9fYWRkcmVzcygpLnRvX2JlY2gzMigpKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IENlcnRUeXBlLlN0YWtlUG9vbFJlZ2lzdHJhdGlvbixcbiAgICAgIHBvb2xLZXlIYXNoOiBwb29sUmVnaXN0cmF0aW9uIS5wb29sX3BhcmFtcygpLm9wZXJhdG9yKCkudG9faGV4KCksXG4gICAgICB2cmZLZXlIYXNoOiBwb29sUmVnaXN0cmF0aW9uIS5wb29sX3BhcmFtcygpLnZyZl9rZXloYXNoKCkudG9faGV4KCksXG4gICAgICBwbGVkZ2U6IHBvb2xSZWdpc3RyYXRpb24hLnBvb2xfcGFyYW1zKCkucGxlZGdlKCkudG9fc3RyKCksXG4gICAgICBjb3N0OiBwb29sUmVnaXN0cmF0aW9uIS5wb29sX3BhcmFtcygpLmNvc3QoKS50b19zdHIoKSxcbiAgICAgIG1hcmdpbk51bWVyYXRvcjogcG9vbFJlZ2lzdHJhdGlvbiEucG9vbF9wYXJhbXMoKS5tYXJnaW4oKS5udW1lcmF0b3IoKS50b19zdHIoKSxcbiAgICAgIG1hcmdpbkRlbm9taW5hdG9yOiBwb29sUmVnaXN0cmF0aW9uIS5wb29sX3BhcmFtcygpLm1hcmdpbigpLmRlbm9taW5hdG9yKCkudG9fc3RyKCksXG4gICAgICByZXdhcmRBY2NvdW50OiByZXdhcmRBY2NvdW50LnRvX2FkZHJlc3MoKS50b19iZWNoMzIoKSxcbiAgICAgIHBvb2xPd25lcnM6IG93bmVycyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgdHJhbnNhY3Rpb24gdHlwZS5cbiAgICpcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvblR5cGV9IHRyYW5zYWN0aW9uVHlwZSBUaGUgdHJhbnNhY3Rpb24gdHlwZSB0byBiZSBzZXQuXG4gICAqL1xuICBzZXRUcmFuc2FjdGlvblR5cGUodHJhbnNhY3Rpb25UeXBlOiBUcmFuc2FjdGlvblR5cGUpOiB2b2lkIHtcbiAgICB0aGlzLl90eXBlID0gdHJhbnNhY3Rpb25UeXBlO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGV4cGxhaW5UcmFuc2FjdGlvbigpOiB7XG4gICAgb3V0cHV0czogeyBhbW91bnQ6IHN0cmluZzsgYWRkcmVzczogc3RyaW5nIH1bXTtcbiAgICBjZXJ0aWZpY2F0ZXM6IENlcnRbXTtcbiAgICBjaGFuZ2VPdXRwdXRzOiBzdHJpbmdbXTtcbiAgICBvdXRwdXRBbW91bnQ6IHN0cmluZztcbiAgICBmZWU6IHsgZmVlOiBzdHJpbmcgfTtcbiAgICBkaXNwbGF5T3JkZXI6IHN0cmluZ1tdO1xuICAgIGlkOiBzdHJpbmc7XG4gICAgY2hhbmdlQW1vdW50OiBzdHJpbmc7XG4gICAgdHlwZTogc3RyaW5nO1xuICAgIHdpdGhkcmF3YWxzOiBXaXRoZHJhd2FsW107XG4gICAgcGxlZGdlRGV0YWlscz86IFBsZWRnZURldGFpbHM7XG4gIH0ge1xuICAgIGNvbnN0IHR4SnNvbiA9IHRoaXMudG9Kc29uKCk7XG4gICAgY29uc3QgZGlzcGxheU9yZGVyID0gWydpZCcsICdvdXRwdXRBbW91bnQnLCAnY2hhbmdlQW1vdW50JywgJ291dHB1dHMnLCAnY2hhbmdlT3V0cHV0cycsICdmZWUnLCAndHlwZSddO1xuICAgIGNvbnN0IGFtb3VudCA9IHR4SnNvbi5vdXRwdXRzLm1hcCgobykgPT4gKHsgYW1vdW50OiBCaWdJbnQoby5hbW91bnQpIH0pKTtcbiAgICBjb25zdCBvdXRwdXRBbW91bnQgPSBhbW91bnQucmVkdWNlKChwLCBuKSA9PiBwICsgQmlnSW50KG4uYW1vdW50KSwgQmlnSW50KCcwJykpLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgdHlwZSA9XG4gICAgICB0aGlzLl90eXBlID09PSBUcmFuc2FjdGlvblR5cGUuU2VuZFxuICAgICAgICA/ICdUcmFuc2ZlcidcbiAgICAgICAgOiB0aGlzLl90eXBlID09PSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0FjdGl2YXRlXG4gICAgICAgID8gJ1N0YWtpbmdBY3RpdmF0ZSdcbiAgICAgICAgOiB0aGlzLl90eXBlID09PSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1dpdGhkcmF3XG4gICAgICAgID8gJ1N0YWtpbmdXaXRoZHJhdydcbiAgICAgICAgOiB0aGlzLl90eXBlID09PSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0RlYWN0aXZhdGVcbiAgICAgICAgPyAnU3Rha2luZ0RlYWN0aXZhdGUnXG4gICAgICAgIDogdGhpcy5fdHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdQbGVkZ2VcbiAgICAgICAgPyAnU3Rha2luZ1BsZWRnZSdcbiAgICAgICAgOiAndW5kZWZpbmVkJztcbiAgICByZXR1cm4ge1xuICAgICAgZGlzcGxheU9yZGVyLFxuICAgICAgaWQ6IHR4SnNvbi5pZCxcbiAgICAgIG91dHB1dHM6IHR4SnNvbi5vdXRwdXRzLm1hcCgobykgPT4gKHsgYWRkcmVzczogby5hZGRyZXNzLCBhbW91bnQ6IG8uYW1vdW50IH0pKSxcbiAgICAgIG91dHB1dEFtb3VudDogb3V0cHV0QW1vdW50LFxuICAgICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgICBjaGFuZ2VBbW91bnQ6ICcwJyxcbiAgICAgIGZlZTogeyBmZWU6IHRoaXMuX2ZlZSB9LFxuICAgICAgdHlwZSxcbiAgICAgIGNlcnRpZmljYXRlczogdHhKc29uLmNlcnRzLFxuICAgICAgd2l0aGRyYXdhbHM6IHR4SnNvbi53aXRoZHJhd2FscyxcbiAgICAgIHBsZWRnZURldGFpbHM6IHRoaXMuX3BsZWRnZURldGFpbHMsXG4gICAgfTtcbiAgfVxuXG4gIGdldFBsZWRnZURldGFpbHMoKTogUGxlZGdlRGV0YWlscyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3BsZWRnZURldGFpbHM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRyYW5zYWN0aW9uIGZlZVxuICAgKi9cbiAgZ2V0IGdldEZlZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9mZWU7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRyYW5zYWN0aW9uIGZlZVxuICAgKlxuICAgKiBAcGFyYW0gZmVlXG4gICAqL1xuICBmZWUoZmVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9mZWUgPSBmZWU7XG4gIH1cbn1cbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bitgo-beta/sdk-coin-ada",
3
- "version": "2.3.14-beta.52",
3
+ "version": "2.3.14-beta.54",
4
4
  "description": "BitGo SDK coin library for Ada",
5
5
  "main": "./dist/src/index.js",
6
6
  "types": "./dist/src/index.d.ts",
@@ -40,8 +40,8 @@
40
40
  ]
41
41
  },
42
42
  "dependencies": {
43
- "@bitgo-beta/sdk-core": "8.2.1-beta.52",
44
- "@bitgo-beta/statics": "15.1.1-beta.54",
43
+ "@bitgo-beta/sdk-core": "8.2.1-beta.54",
44
+ "@bitgo-beta/statics": "15.1.1-beta.56",
45
45
  "@emurgo/cardano-serialization-lib-browser": "^11.4.0",
46
46
  "@emurgo/cardano-serialization-lib-nodejs": "^11.4.0",
47
47
  "bech32": "^2.0.0",
@@ -51,8 +51,8 @@
51
51
  "tweetnacl": "^1.0.3"
52
52
  },
53
53
  "devDependencies": {
54
- "@bitgo-beta/sdk-api": "1.10.1-beta.52",
54
+ "@bitgo-beta/sdk-api": "1.10.1-beta.54",
55
55
  "@bitgo-beta/sdk-test": "^1.2.27"
56
56
  },
57
- "gitHead": "8295f07c32e761b907443924f89e4ed5b8f7fa1e"
57
+ "gitHead": "41253f93c7036bb7de1e610e66a41cc870d7c1ab"
58
58
  }