@bitgo/sdk-coin-polyx 2.0.11 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"polyx.d.ts","sourceRoot":"","sources":["../../src/polyx.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,QAAQ,EACR,SAAS,EAGT,kBAAkB,EAClB,WAAW,EACX,KAAK,EAIL,uBAAuB,EACvB,MAAM,EACN,qBAAqB,EACtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,UAAU,EAAc,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAgC,MAAM,gBAAgB,CAAC;AAC3F,OAAO,EAA+B,aAAa,EAAe,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC/G,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAI1D,OAAO,EAAE,yBAAyB,EAAmB,kBAAkB,EAAE,MAAM,OAAO,CAAC;AAEvF,qBAAa,KAAM,SAAQ,aAAa;IACtC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;IAC3D,SAAS,aAAa,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC;IAU/E,SAAS,CAAC,MAAM,CAAC,kBAAkB,UAAS;IAC5C,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC;IAEjC,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,QAAQ;IAI1F,UAAU,IAAI,yBAAyB;IAIvC;;OAEG;IACI,aAAa,IAAI,MAAM;IAIvB,QAAQ,IAAI,MAAM;IAIlB,WAAW,IAAI,MAAM;IAI5B,kBAAkB;IAClB,iBAAiB,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,YAAY,EAAE,EAAE,uBAAuB;IAI3E,YAAY,IAAI,mBAAmB;IAInC,SAAS,IAAI,gBAAgB;IAI7B,WAAW,IAAI,kBAAkB;IAIjC;;;;;OAKG;IACH,SAAS,CAAC,gBAAgB,IAAI,MAAM;cAIpB,qBAAqB,IAAI,OAAO,CAAC,UAAU,CAAC;cAS5C,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;cAOnF,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;cAM1E,aAAa,IAAI,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;cAMtE,WAAW,IAAI,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC;IAY1D;;;;;;;OAOG;IACG,OAAO,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC;IAgJvE,oBAAoB;IACd,mCAAmC,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,MAAM,CAAC;IAmE3F;;;;;;OAMG;IACH,wBAAwB,IAAI,qBAAqB;CAWlD"}
1
+ {"version":3,"file":"polyx.d.ts","sourceRoot":"","sources":["../../src/polyx.ts"],"names":[],"mappings":"AACA,OAAO,EACL,uBAAuB,EACvB,QAAQ,EACR,SAAS,EAGT,kBAAkB,EAClB,WAAW,EACX,KAAK,EAIL,uBAAuB,EACvB,MAAM,EACN,qBAAqB,EACtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,UAAU,EAAc,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAgC,MAAM,gBAAgB,CAAC;AAC3F,OAAO,EAA+B,aAAa,EAAe,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC/G,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAI1D,OAAO,EAAE,yBAAyB,EAAmB,kBAAkB,EAAE,MAAM,OAAO,CAAC;AAEvF,qBAAa,KAAM,SAAQ,aAAa;IACtC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;IAC3D,SAAS,aAAa,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC;IAU/E,SAAS,CAAC,MAAM,CAAC,kBAAkB,UAAS;IAC5C,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC;IAEjC,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,QAAQ;IAI1F,UAAU,IAAI,yBAAyB;IAIvC;;OAEG;IACI,aAAa,IAAI,MAAM;IAIvB,QAAQ,IAAI,MAAM;IAIlB,WAAW,IAAI,MAAM;IAI5B,kBAAkB;IAClB,iBAAiB,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,YAAY,EAAE,EAAE,uBAAuB;IAI3E,YAAY,IAAI,mBAAmB;IAInC,SAAS,IAAI,gBAAgB;IAI7B,WAAW,IAAI,kBAAkB;IAIjC;;;;;OAKG;IACH,SAAS,CAAC,gBAAgB,IAAI,MAAM;cAIpB,qBAAqB,IAAI,OAAO,CAAC,UAAU,CAAC;cAS5C,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;cAOnF,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;cAM1E,aAAa,IAAI,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;cAMtE,WAAW,IAAI,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC;IAY1D;;;;;;;OAOG;IACG,OAAO,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC;IAsIvE,oBAAoB;IACd,mCAAmC,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,MAAM,CAAC;IAmE3F;;;;;;OAMG;IACH,wBAAwB,IAAI,qBAAqB;CAWlD"}
package/dist/src/polyx.js CHANGED
@@ -4,6 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.Polyx = void 0;
7
+ const assert_1 = __importDefault(require("assert"));
7
8
  const sdk_core_1 = require("@bitgo/sdk-core");
8
9
  const api_1 = require("@polkadot/api");
9
10
  const statics_1 = require("@bitgo/statics");
@@ -142,44 +143,34 @@ class Polyx extends abstract_substrate_1.SubstrateCoin {
142
143
  const unsignedTransaction = (await txBuilder.build());
143
144
  let serializedTx = unsignedTransaction.toBroadcastFormat();
144
145
  if (!isUnsignedSweep) {
145
- if (!params.userKey) {
146
- throw new Error('missing userKey');
147
- }
148
- if (!params.backupKey) {
149
- throw new Error('missing backupKey');
150
- }
151
- if (!params.walletPassphrase) {
152
- throw new Error('missing wallet passphrase');
153
- }
154
- const userKey = params.userKey.replace(/\s/g, '');
155
- const backupKey = params.backupKey.replace(/\s/g, '');
156
- // Decrypt private keys from KeyCard values
157
- let userPrv;
158
- try {
159
- userPrv = await this.bitgo.decrypt({
160
- input: userKey,
161
- password: params.walletPassphrase,
146
+ (0, assert_1.default)(params.userKey, 'missing userKey');
147
+ (0, assert_1.default)(params.backupKey, 'missing backupKey');
148
+ (0, assert_1.default)(params.walletPassphrase, 'missing wallet passphrase');
149
+ const signingMaterial = await this.getEddsaSigningMaterial(params.userKey, params.walletPassphrase);
150
+ const ED25519_PREFIX = 0x00;
151
+ const substrateKeyPair = new abstract_substrate_1.KeyPair({ pub: accountId });
152
+ if (signingMaterial.version === 'v2') {
153
+ const rawSig = await this.signSubstrateMpcV2Recovery({
154
+ message: unsignedTransaction.signablePayload,
155
+ userKey: signingMaterial.encryptedUserKey,
156
+ backupKey: params.backupKey.replace(/\s/g, ''),
157
+ walletPassphrase: params.walletPassphrase,
158
+ bitgoKey,
159
+ derivationPath: currPath,
160
+ bitgo: this.bitgo,
162
161
  });
162
+ txBuilder.addSignature({ pub: substrateKeyPair.getKeys().pub }, Buffer.concat([Buffer.from([ED25519_PREFIX]), rawSig]));
163
163
  }
164
- catch (e) {
165
- throw new Error(`Error decrypting user keychain: ${e.message}`);
166
- }
167
- const userSigningMaterial = JSON.parse(userPrv);
168
- let backupPrv;
169
- try {
170
- backupPrv = await this.bitgo.decrypt({
171
- input: backupKey,
164
+ else {
165
+ const userSigningMaterial = JSON.parse(signingMaterial.userPrv);
166
+ const backupPrv = await this.bitgo.decrypt({
167
+ input: params.backupKey.replace(/\s/g, ''),
172
168
  password: params.walletPassphrase,
173
169
  });
170
+ const backupSigningMaterial = JSON.parse(backupPrv);
171
+ const signatureHex = await sdk_core_1.EDDSAMethods.getTSSSignature(userSigningMaterial, backupSigningMaterial, currPath, unsignedTransaction);
172
+ txBuilder.addSignature({ pub: substrateKeyPair.getKeys().pub }, signatureHex);
174
173
  }
175
- catch (e) {
176
- throw new Error(`Error decrypting backup keychain: ${e.message}`);
177
- }
178
- const backupSigningMaterial = JSON.parse(backupPrv);
179
- // add signature
180
- const signatureHex = await sdk_core_1.EDDSAMethods.getTSSSignature(userSigningMaterial, backupSigningMaterial, currPath, unsignedTransaction);
181
- const substrateKeyPair = new abstract_substrate_1.KeyPair({ pub: accountId });
182
- txBuilder.addSignature({ pub: substrateKeyPair.getKeys().pub }, signatureHex);
183
174
  const signedTransaction = await txBuilder.build();
184
175
  serializedTx = signedTransaction.toBroadcastFormat();
185
176
  }
@@ -305,4 +296,4 @@ class Polyx extends abstract_substrate_1.SubstrateCoin {
305
296
  }
306
297
  exports.Polyx = Polyx;
307
298
  Polyx.nodeApiInitialized = false;
308
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9seXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcG9seXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsOENBZXlCO0FBQ3pCLHVDQUF1RDtBQUN2RCw0Q0FBMkY7QUFDM0Ysa0VBQStHO0FBRy9HLCtDQUF1RDtBQUN2RCxvREFBdUQ7QUFDdkQsZ0VBQXFDO0FBQ3JDLCtCQUF1RjtBQUV2RixNQUFhLEtBQU0sU0FBUSxrQ0FBYTtJQUV0QyxZQUFzQixLQUFnQixFQUFFLFdBQXVDO1FBQzdFLEtBQUssQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFFMUIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0RBQW9ELENBQUMsQ0FBQztRQUN4RSxDQUFDO1FBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUM7SUFDbEMsQ0FBQztJQUtELE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBZ0IsRUFBRSxXQUF1QztRQUM3RSxPQUFPLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsVUFBVTtRQUNSLE9BQU8sSUFBSSwrQkFBeUIsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVEOztPQUVHO0lBQ0ksYUFBYTtRQUNsQixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFTSxRQUFRO1FBQ2IsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVNLFdBQVc7UUFDaEIsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixpQkFBaUIsQ0FBQyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUEyQjtRQUN6RSxLQUFLLENBQUMsaUJBQWlCLENBQUMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFF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QUssQ0FBQywrRUFBK0UsQ0FBQyxDQUFDO2dCQUNuRyxDQUFDO1lBQ0gsQ0FBQztTQUNGLENBQUM7SUFDSixDQUFDOztBQXRWSCxzQkF1VkM7QUEzVWtCLHdCQUFrQixHQUFHLEtBQUssQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEF1ZGl0RGVjcnlwdGVkS2V5UGFyYW1zLFxuICBCYXNlQ29pbixcbiAgQml0R29CYXNlLFxuICBFRERTQU1ldGhvZHMsXG4gIEVERFNBTWV0aG9kVHlwZXMsXG4gIE1QQ1JlY292ZXJ5T3B0aW9ucyxcbiAgTVBDU3dlZXBUeHMsXG4gIE1QQ1R4LFxuICBNUENVbnNpZ25lZFR4LFxuICBSZWNvdmVyeVR4UmVxdWVzdCxcbiAgRW52aXJvbm1lbnRzLFxuICBNUENTd2VlcFJlY292ZXJ5T3B0aW9ucyxcbiAgTVBDVHhzLFxuICBUb2tlbkVuYWJsZW1lbnRDb25maWcsXG59IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBBcGlQcm9taXNlLCBXc1Byb3ZpZGVyIH0gZnJvbSAnQHBvbGthZG90L2FwaSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBTdGF0aWNzQmFzZUNvaW4sIGNvaW5zLCBTdWJzdHJhdGVTcGVjTmFtZVR5cGUgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBLZXlQYWlyIGFzIFN1YnN0cmF0ZUtleVBhaXIsIFN1YnN0cmF0ZUNvaW4sIFRyYW5zYWN0aW9uLCBJbnRlcmZhY2UgfSBmcm9tICdAYml0Z28vYWJzdHJhY3Qtc3Vic3RyYXRlJztcbmltcG9ydCB7IEJhdGNoU3Rha2luZ0J1aWxkZXIgfSBmcm9tICcuL2xpYi9iYXRjaFN0YWtpbmdCdWlsZGVyJztcbmltcG9ydCB7IEJvbmRFeHRyYUJ1aWxkZXIgfSBmcm9tICcuL2xpYi9ib25kRXh0cmFCdWlsZGVyJztcbmltcG9ydCB7IFBPTFlYX0FERFJFU1NfRk9STUFUIH0gZnJvbSAnLi9saWIvY29uc3RhbnRzJztcbmltcG9ydCB7IGdldERlcml2YXRpb25QYXRoIH0gZnJvbSAnQGJpdGdvL3Nkay1saWItbXBjJztcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnksIFRyYW5zZmVyQnVpbGRlciwgSGV4VHJhbnNmZXJCdWlsZGVyIH0gZnJvbSAnLi9saWInO1xuXG5leHBvcnQgY2xhc3MgUG9seXggZXh0ZW5kcyBTdWJzdHJhdGVDb2luIHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9zdGF0aWNzQ29pbjogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPjtcbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGJpdGdvOiBCaXRHb0Jhc2UsIHN0YXRpY3NDb2luPzogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPikge1xuICAgIHN1cGVyKGJpdGdvLCBzdGF0aWNzQ29pbik7XG5cbiAgICBpZiAoIXN0YXRpY3NDb2luKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgY29uc3RydWN0b3IgcGFyYW1ldGVyIHN0YXRpY3NDb2luJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhdGljc0NvaW4gPSBzdGF0aWNzQ29pbjtcbiAgfVxuXG4gIHByb3RlY3RlZCBzdGF0aWMgbm9kZUFwaUluaXRpYWxpemVkID0gZmFsc2U7XG4gIHByb3RlY3RlZCBzdGF0aWMgQVBJOiBBcGlQcm9taXNlO1xuXG4gIHN0YXRpYyBjcmVhdGVJbnN0YW5jZShiaXRnbzogQml0R29CYXNlLCBzdGF0aWNzQ29pbj86IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4pOiBCYXNlQ29pbiB7XG4gICAgcmV0dXJuIG5ldyBQb2x5eChiaXRnbywgc3RhdGljc0NvaW4pO1xuICB9XG5cbiAgZ2V0QnVpbGRlcigpOiBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5IHtcbiAgICByZXR1cm4gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KHRoaXMuZ2V0Q2hhaW4oKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZhY3RvciBiZXR3ZWVuIHRoZSBjb2luJ3MgYmFzZSB1bml0IGFuZCBpdHMgc21hbGxlc3Qgc3ViZGl2aXNvblxuICAgKi9cbiAgcHVibGljIGdldEJhc2VGYWN0b3IoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gMWU2O1xuICB9XG5cbiAgcHVibGljIGdldENoYWluKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdwb2x5eCc7XG4gIH1cblxuICBwdWJsaWMgZ2V0RnVsbE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ1BvbHltZXNoJztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBhdWRpdERlY3J5cHRlZEtleSh7IHB1YmxpY0tleSwgcHJ2LCBtdWx0aVNpZ1R5cGUgfTogQXVkaXREZWNyeXB0ZWRLZXlQYXJhbXMpIHtcbiAgICBzdXBlci5hdWRpdERlY3J5cHRlZEtleSh7IHB1YmxpY0tleSwgcHJ2LCBtdWx0aVNpZ1R5cGUgfSk7XG4gIH1cblxuICBzdGFraW5nQmF0Y2goKTogQmF0Y2hTdGFraW5nQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QnVpbGRlcigpLmdldEJhdGNoQnVpbGRlcigpO1xuICB9XG5cbiAgYm9uZEV4dHJhKCk6IEJvbmRFeHRyYUJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmdldEJ1aWxkZXIoKS5nZXRCb25kRXh0cmFCdWlsZGVyKCk7XG4gIH1cblxuICBoZXhUcmFuc2ZlcigpOiBIZXhUcmFuc2ZlckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmdldEJ1aWxkZXIoKS5nZXRIZXhUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGFkZHJlc3MgZm9ybWF0IGZvciBQb2x5eC5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn0gVGhlIGFkZHJlc3MgZm9ybWF0IGFzIGEgbnVtYmVyIGZvciBQb2x5eC5cbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0QWRkcmVzc0Zvcm1hdCgpOiBudW1iZXIge1xuICAgIHJldHVybiBQT0xZWF9BRERSRVNTX0ZPUk1BVDtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBnZXRJbml0aWFsaXplZE5vZGVBUEkoKTogUHJvbWlzZTxBcGlQcm9taXNlPiB7XG4gICAgaWYgKCFQb2x5eC5ub2RlQXBpSW5pdGlhbGl6ZWQpIHtcbiAgICAgIGNvbnN0IHdzUHJvdmlkZXIgPSBuZXcgV3NQcm92aWRlcihFbnZpcm9ubWVudHNbdGhpcy5iaXRnby5nZXRFbnYoKV0ucG9seW1lc2hOb2RlVXJscyk7XG4gICAgICBQb2x5eC5BUEkgPSBhd2FpdCBBcGlQcm9taXNlLmNyZWF0ZSh7IHByb3ZpZGVyOiB3c1Byb3ZpZGVyIH0pO1xuICAgICAgUG9seXgubm9kZUFwaUluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIFBvbHl4LkFQSTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBnZXRBY2NvdW50SW5mbyh3YWxsZXRBZGRyOiBzdHJpbmcpOiBQcm9taXNlPHsgbm9uY2U6IG51bWJlcjsgZnJlZUJhbGFuY2U6IG51bWJlciB9PiB7XG4gICAgY29uc3QgYXBpID0gYXdhaXQgdGhpcy5nZXRJbml0aWFsaXplZE5vZGVBUEkoKTtcbiAgICBjb25zdCB7IG5vbmNlLCBkYXRhOiBiYWxhbmNlIH0gPSBhd2FpdCBhcGkucXVlcnkuc3lzdGVtLmFjY291bnQod2FsbGV0QWRkcik7XG5cbiAgICByZXR1cm4geyBub25jZTogbm9uY2UudG9OdW1iZXIoKSwgZnJlZUJhbGFuY2U6IGJhbGFuY2UuZnJlZS50b051bWJlcigpIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgZ2V0RmVlKGRlc3RBZGRyOiBzdHJpbmcsIHNyY0FkZHI6IHN0cmluZywgYW1vdW50OiBudW1iZXIpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IGFwaSA9IGF3YWl0IHRoaXMuZ2V0SW5pdGlhbGl6ZWROb2RlQVBJKCk7XG4gICAgY29uc3QgaW5mbyA9IGF3YWl0IGFwaS50eC5iYWxhbmNlcy50cmFuc2ZlcihkZXN0QWRkciwgYW1vdW50KS5wYXltZW50SW5mbyhzcmNBZGRyKTtcbiAgICByZXR1cm4gaW5mby5wYXJ0aWFsRmVlLnRvTnVtYmVyKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgZ2V0SGVhZGVySW5mbygpOiBQcm9taXNlPHsgaGVhZGVyTnVtYmVyOiBudW1iZXI7IGhlYWRlckhhc2g6IHN0cmluZyB9PiB7XG4gICAgY29uc3QgYXBpID0gYXdhaXQgdGhpcy5nZXRJbml0aWFsaXplZE5vZGVBUEkoKTtcbiAgICBjb25zdCB7IG51bWJlciwgaGFzaCB9ID0gYXdhaXQgYXBpLnJwYy5jaGFpbi5nZXRIZWFkZXIoKTtcbiAgICByZXR1cm4geyBoZWFkZXJOdW1iZXI6IG51bWJlci50b051bWJlcigpLCBoZWFkZXJIYXNoOiBoYXNoLnRvU3RyaW5nKCkgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBnZXRNYXRlcmlhbCgpOiBQcm9taXNlPEludGVyZmFjZS5NYXRlcmlhbD4ge1xuICAgIGNvbnN0IGFwaSA9IGF3YWl0IHRoaXMuZ2V0SW5pdGlhbGl6ZWROb2RlQVBJKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGdlbmVzaXNIYXNoOiBhcGkuZ2VuZXNpc0hhc2gudG9TdHJpbmcoKSxcbiAgICAgIGNoYWluTmFtZTogYXBpLnJ1bnRpbWVDaGFpbi50b1N0cmluZygpLFxuICAgICAgc3BlY05hbWU6IGFwaS5ydW50aW1lVmVyc2lvbi5zcGVjTmFtZS50b1N0cmluZygpIGFzIFN1YnN0cmF0ZVNwZWNOYW1lVHlwZSxcbiAgICAgIHNwZWNWZXJzaW9uOiBhcGkucnVudGltZVZlcnNpb24uc3BlY1ZlcnNpb24udG9OdW1iZXIoKSxcbiAgICAgIHR4VmVyc2lvbjogYXBpLnJ1bnRpbWVWZXJzaW9uLnRyYW5zYWN0aW9uVmVyc2lvbi50b051bWJlcigpLFxuICAgICAgbWV0YWRhdGE6IGFwaS5ydW50aW1lTWV0YWRhdGEudG9IZXgoKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyBhIGZ1bmRzIHJlY292ZXJ5IHRyYW5zYWN0aW9uIHdpdGhvdXQgQml0R29cbiAgICogQHBhcmFtIHtNUENSZWNvdmVyeU9wdGlvbnN9IHBhcmFtcyBwYXJhbWV0ZXJzIG5lZWRlZCB0byBjb25zdHJ1Y3QgYW5kXG4gICAqIChtYXliZSkgc2lnbiB0aGUgdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHJldHVybnMge01QQ1R4fSB0aGUgc2VyaWFsaXplZCB0cmFuc2FjdGlvbiBoZXggc3RyaW5nIGFuZCBpbmRleFxuICAgKiBvZiB0aGUgYWRkcmVzcyBiZWluZyBzd2VwdFxuICAgKi9cbiAgYXN5bmMgcmVjb3ZlcihwYXJhbXM6IE1QQ1JlY292ZXJ5T3B0aW9ucyk6IFByb21pc2U8TVBDVHggfCBNUENTd2VlcFR4cz4ge1xuICAgIGlmICghcGFyYW1zLmJpdGdvS2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgYml0Z29LZXknKTtcbiAgICB9XG5cbiAgICBpZiAoIXBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uIHx8ICF0aGlzLmlzVmFsaWRBZGRyZXNzKHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHJlY292ZXJ5IGRlc3RpbmF0aW9uIGFkZHJlc3MnKTtcbiAgICB9XG5cbiAgICBjb25zdCBiaXRnb0tleSA9IHBhcmFtcy5iaXRnb0tleS5yZXBsYWNlKC9cXHMvZywgJycpO1xuICAgIGNvbnN0IGlzVW5zaWduZWRTd2VlcCA9ICFwYXJhbXMudXNlcktleSAmJiAhcGFyYW1zLmJhY2t1cEtleSAmJiAhcGFyYW1zLndhbGxldFBhc3NwaHJhc2U7XG5cbiAgICBjb25zdCBNUEMgPSBhd2FpdCBFRERTQU1ldGhvZHMuZ2V0SW5pdGlhbGl6ZWRNcGNJbnN0YW5jZSgpO1xuXG4gICAgY29uc3QgaW5kZXggPSBwYXJhbXMuaW5kZXggfHwgMDtcbiAgICBjb25zdCBjdXJyUGF0aCA9IHBhcmFtcy5zZWVkID8gZ2V0RGVyaXZhdGlvblBhdGgocGFyYW1zLnNlZWQpICsgYC8ke2luZGV4fWAgOiBgbS8ke2luZGV4fWA7XG4gICAgY29uc3QgYWNjb3VudElkID0gTVBDLmRlcml2ZVVuaGFyZGVuZWQoYml0Z29LZXksIGN1cnJQYXRoKS5zbGljZSgwLCA2NCk7XG4gICAgY29uc3Qgc2VuZGVyQWRkciA9IHRoaXMuZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkoYWNjb3VudElkKTtcblxuICAgIGNvbnN0IHsgbm9uY2UsIGZyZWVCYWxhbmNlIH0gPSBhd2FpdCB0aGlzLmdldEFjY291bnRJbmZvKHNlbmRlckFkZHIpO1xuXG4gICAgY29uc3QgZGVzdEFkZHIgPSBwYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbjtcbiAgICBjb25zdCBhbW91bnQgPSBmcmVlQmFsYW5jZTtcbiAgICBjb25zdCBwYXJ0aWFsRmVlID0gYXdhaXQgdGhpcy5nZXRGZWUoZGVzdEFkZHIsIHNlbmRlckFkZHIsIGFtb3VudCk7XG4gICAgY29uc3QgcGFkZGVkRmVlID0gbmV3IEJpZ051bWJlcihwYXJ0aWFsRmVlKS50aW1lcygxMCkudG9OdW1iZXIoKTtcbiAgICBjb25zdCBhbW91bnRUb1NlbmQgPSBuZXcgQmlnTnVtYmVyKGFtb3VudCkubWludXMobmV3IEJpZ051bWJlcihwYWRkZWRGZWUpKTtcblxuICAgIGNvbnN0IHZhbHVlID0gbmV3IEJpZ051bWJlcihmcmVlQmFsYW5jZSkubWludXMobmV3IEJpZ051bWJlcihwYXJ0aWFsRmVlKSk7XG4gICAgaWYgKHZhbHVlLmlzTGVzc1RoYW5PckVxdWFsVG8oMCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGlkIG5vdCBmaW5kIGFkZHJlc3Mgd2l0aCBmdW5kcyB0byByZWNvdmVyJyk7XG4gICAgfVxuXG4gICAgY29uc3QgeyBoZWFkZXJOdW1iZXIsIGhlYWRlckhhc2ggfSA9IGF3YWl0IHRoaXMuZ2V0SGVhZGVySW5mbygpO1xuICAgIGNvbnN0IG1hdGVyaWFsID0gYXdhaXQgdGhpcy5nZXRNYXRlcmlhbCgpO1xuICAgIGNvbnN0IHZhbGlkaXR5V2luZG93ID0geyBmaXJzdFZhbGlkOiBoZWFkZXJOdW1iZXIsIG1heER1cmF0aW9uOiB0aGlzLk1BWF9WQUxJRElUWV9EVVJBVElPTiB9O1xuXG4gICAgY29uc3QgdHhCdWlsZGVyID0gdGhpcy5nZXRCdWlsZGVyKCkuZ2V0VHJhbnNmZXJCdWlsZGVyKCkubWF0ZXJpYWwobWF0ZXJpYWwpIGFzIFRyYW5zZmVyQnVpbGRlcjtcblxuICAgIHR4QnVpbGRlclxuICAgICAgLmFtb3VudChhbW91bnRUb1NlbmQudG9TdHJpbmcoKSlcbiAgICAgIC50byh7IGFkZHJlc3M6IHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uIH0pXG4gICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyQWRkciB9KVxuICAgICAgLm1lbW8oJzAnKVxuICAgICAgLnZhbGlkaXR5KHZhbGlkaXR5V2luZG93KVxuICAgICAgLnJlZmVyZW5jZUJsb2NrKGhlYWRlckhhc2gpXG4gICAgICAuc2VxdWVuY2VJZCh7IG5hbWU6ICdOb25jZScsIGtleXdvcmQ6ICdub25jZScsIHZhbHVlOiBub25jZSB9KVxuICAgICAgLmZlZSh7IGFtb3VudDogMCwgdHlwZTogJ3RpcCcgfSk7XG5cbiAgICBjb25zdCB1bnNpZ25lZFRyYW5zYWN0aW9uID0gKGF3YWl0IHR4QnVpbGRlci5idWlsZCgpKSBhcyBUcmFuc2FjdGlvbjtcblxuICAgIGxldCBzZXJpYWxpemVkVHggPSB1bnNpZ25lZFRyYW5zYWN0aW9uLnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgaWYgKCFpc1Vuc2lnbmVkU3dlZXApIHtcbiAgICAgIGlmICghcGFyYW1zLnVzZXJLZXkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHVzZXJLZXknKTtcbiAgICAgIH1cbiAgICAgIGlmICghcGFyYW1zLmJhY2t1cEtleSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgYmFja3VwS2V5Jyk7XG4gICAgICB9XG4gICAgICBpZiAoIXBhcmFtcy53YWxsZXRQYXNzcGhyYXNlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyB3YWxsZXQgcGFzc3BocmFzZScpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB1c2VyS2V5ID0gcGFyYW1zLnVzZXJLZXkucmVwbGFjZSgvXFxzL2csICcnKTtcbiAgICAgIGNvbnN0IGJhY2t1cEtleSA9IHBhcmFtcy5iYWNrdXBLZXkucmVwbGFjZSgvXFxzL2csICcnKTtcblxuICAgICAgLy8gRGVjcnlwdCBwcml2YXRlIGtleXMgZnJvbSBLZXlDYXJkIHZhbHVlc1xuICAgICAgbGV0IHVzZXJQcnY7XG4gICAgICB0cnkge1xuICAgICAgICB1c2VyUHJ2ID0gYXdhaXQgdGhpcy5iaXRnby5kZWNyeXB0KHtcbiAgICAgICAgICBpbnB1dDogdXNlcktleSxcbiAgICAgICAgICBwYXNzd29yZDogcGFyYW1zLndhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIGRlY3J5cHRpbmcgdXNlciBrZXljaGFpbjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgICBjb25zdCB1c2VyU2lnbmluZ01hdGVyaWFsID0gSlNPTi5wYXJzZSh1c2VyUHJ2KSBhcyBFRERTQU1ldGhvZFR5cGVzLlVzZXJTaWduaW5nTWF0ZXJpYWw7XG5cbiAgICAgIGxldCBiYWNrdXBQcnY7XG4gICAgICB0cnkge1xuICAgICAgICBiYWNrdXBQcnYgPSBhd2FpdCB0aGlzLmJpdGdvLmRlY3J5cHQoe1xuICAgICAgICAgIGlucHV0OiBiYWNrdXBLZXksXG4gICAgICAgICAgcGFzc3dvcmQ6IHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBkZWNyeXB0aW5nIGJhY2t1cCBrZXljaGFpbjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgICBjb25zdCBiYWNrdXBTaWduaW5nTWF0ZXJpYWwgPSBKU09OLnBhcnNlKGJhY2t1cFBydikgYXMgRUREU0FNZXRob2RUeXBlcy5CYWNrdXBTaWduaW5nTWF0ZXJpYWw7XG5cbiAgICAgIC8vIGFkZCBzaWduYXR1cmVcbiAgICAgIGNvbnN0IHNpZ25hdHVyZUhleCA9IGF3YWl0IEVERFNBTWV0aG9kcy5nZXRUU1NTaWduYXR1cmUoXG4gICAgICAgIHVzZXJTaWduaW5nTWF0ZXJpYWwsXG4gICAgICAgIGJhY2t1cFNpZ25pbmdNYXRlcmlhbCxcbiAgICAgICAgY3VyclBhdGgsXG4gICAgICAgIHVuc2lnbmVkVHJhbnNhY3Rpb25cbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHN1YnN0cmF0ZUtleVBhaXIgPSBuZXcgU3Vic3RyYXRlS2V5UGFpcih7IHB1YjogYWNjb3VudElkIH0pO1xuICAgICAgdHhCdWlsZGVyLmFkZFNpZ25hdHVyZSh7IHB1Yjogc3Vic3RyYXRlS2V5UGFpci5nZXRLZXlzKCkucHViIH0sIHNpZ25hdHVyZUhleCk7XG4gICAgICBjb25zdCBzaWduZWRUcmFuc2FjdGlvbiA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgc2VyaWFsaXplZFR4ID0gc2lnbmVkVHJhbnNhY3Rpb24udG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgd2FsbGV0Q29pbiA9IHRoaXMuZ2V0Q2hhaW4oKTtcbiAgICAgIGNvbnN0IGlucHV0cyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6IHVuc2lnbmVkVHJhbnNhY3Rpb24uaW5wdXRzWzBdLmFkZHJlc3MsXG4gICAgICAgICAgdmFsdWVTdHJpbmc6IGFtb3VudFRvU2VuZC50b1N0cmluZygpLFxuICAgICAgICAgIHZhbHVlOiBhbW91bnRUb1NlbmQudG9OdW1iZXIoKSxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCBvdXRwdXRzID0gW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczogdW5zaWduZWRUcmFuc2FjdGlvbi5vdXRwdXRzWzBdLmFkZHJlc3MsXG4gICAgICAgICAgdmFsdWVTdHJpbmc6IGFtb3VudFRvU2VuZC50b1N0cmluZygpLFxuICAgICAgICAgIGNvaW5OYW1lOiB3YWxsZXRDb2luLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IHNwZW5kQW1vdW50ID0gYW1vdW50VG9TZW5kLnRvU3RyaW5nKCk7XG4gICAgICBjb25zdCBwYXJzZWRUeCA9IHsgaW5wdXRzOiBpbnB1dHMsIG91dHB1dHM6IG91dHB1dHMsIHNwZW5kQW1vdW50OiBzcGVuZEFtb3VudCwgdHlwZTogJycgfTtcbiAgICAgIGNvbnN0IGZlZUluZm8gPSB7IGZlZTogMCwgZmVlU3RyaW5nOiAnMCcgfTtcbiAgICAgIGNvbnN0IHRyYW5zYWN0aW9uOiBNUENUeCA9IHtcbiAgICAgICAgc2VyaWFsaXplZFR4OiBzZXJpYWxpemVkVHgsXG4gICAgICAgIHNjYW5JbmRleDogaW5kZXgsXG4gICAgICAgIGNvaW46IHdhbGxldENvaW4sXG4gICAgICAgIHNpZ25hYmxlSGV4OiB1bnNpZ25lZFRyYW5zYWN0aW9uLnNpZ25hYmxlUGF5bG9hZC50b1N0cmluZygnaGV4JyksXG4gICAgICAgIGRlcml2YXRpb25QYXRoOiBjdXJyUGF0aCxcbiAgICAgICAgcGFyc2VkVHg6IHBhcnNlZFR4LFxuICAgICAgICBmZWVJbmZvOiBmZWVJbmZvLFxuICAgICAgICBjb2luU3BlY2lmaWM6IHsgLi4udmFsaWRpdHlXaW5kb3csIGNvbW1vbktleWNoYWluOiBiaXRnb0tleSB9LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgdW5zaWduZWRUeDogTVBDVW5zaWduZWRUeCA9IHsgdW5zaWduZWRUeDogdHJhbnNhY3Rpb24sIHNpZ25hdHVyZVNoYXJlczogW10gfTtcbiAgICAgIGNvbnN0IHRyYW5zYWN0aW9uczogTVBDVW5zaWduZWRUeFtdID0gW3Vuc2lnbmVkVHhdO1xuICAgICAgY29uc3QgdHhSZXF1ZXN0OiBSZWNvdmVyeVR4UmVxdWVzdCA9IHtcbiAgICAgICAgdHJhbnNhY3Rpb25zOiB0cmFuc2FjdGlvbnMsXG4gICAgICAgIHdhbGxldENvaW46IHdhbGxldENvaW4sXG4gICAgICB9O1xuICAgICAgY29uc3QgdHhSZXF1ZXN0czogTVBDU3dlZXBUeHMgPSB7IHR4UmVxdWVzdHM6IFt0eFJlcXVlc3RdIH07XG4gICAgICByZXR1cm4gdHhSZXF1ZXN0cztcbiAgICB9XG5cbiAgICBjb25zdCB0cmFuc2FjdGlvbjogTVBDVHggPSB7IHNlcmlhbGl6ZWRUeDogc2VyaWFsaXplZFR4LCBzY2FuSW5kZXg6IGluZGV4IH07XG4gICAgcmV0dXJuIHRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqIGluaGVyaXRlZCBkb2MgKi9cbiAgYXN5bmMgY3JlYXRlQnJvYWRjYXN0YWJsZVN3ZWVwVHJhbnNhY3Rpb24ocGFyYW1zOiBNUENTd2VlcFJlY292ZXJ5T3B0aW9ucyk6IFByb21pc2U8TVBDVHhzPiB7XG4gICAgY29uc3QgcmVxID0gcGFyYW1zLnNpZ25hdHVyZVNoYXJlcztcbiAgICBjb25zdCBicm9hZGNhc3RhYmxlVHJhbnNhY3Rpb25zOiBNUENUeFtdID0gW107XG4gICAgbGV0IGxhc3RTY2FuSW5kZXggPSAwO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IE1QQyA9IGF3YWl0IEVERFNBTWV0aG9kcy5nZXRJbml0aWFsaXplZE1wY0luc3RhbmNlKCk7XG4gICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHJlcVtpXS50eFJlcXVlc3QudHJhbnNhY3Rpb25zWzBdLnVuc2lnbmVkVHg7XG4gICAgICBpZiAoIXJlcVtpXS5vdmMgfHwgIXJlcVtpXS5vdmNbMF0uZWRkc2FTaWduYXR1cmUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHNpZ25hdHVyZShzKScpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2lnbmF0dXJlID0gcmVxW2ldLm92Y1swXS5lZGRzYVNpZ25hdHVyZTtcbiAgICAgIGlmICghdHJhbnNhY3Rpb24uc2lnbmFibGVIZXgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHNpZ25hYmxlIGhleCcpO1xuICAgICAgfVxuICAgICAgY29uc3QgbWVzc2FnZUJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHRyYW5zYWN0aW9uLnNpZ25hYmxlSGV4ISwgJ2hleCcpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gTVBDLnZlcmlmeShtZXNzYWdlQnVmZmVyLCBzaWduYXR1cmUpO1xuICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHNpZ25hdHVyZScpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2lnbmF0dXJlSGV4ID0gQnVmZmVyLmNvbmNhdChbQnVmZmVyLmZyb20oc2lnbmF0dXJlLlIsICdoZXgnKSwgQnVmZmVyLmZyb20oc2lnbmF0dXJlLnNpZ21hLCAnaGV4JyldKTtcbiAgICAgIGlmIChcbiAgICAgICAgIXRyYW5zYWN0aW9uLmNvaW5TcGVjaWZpYyB8fFxuICAgICAgICAhdHJhbnNhY3Rpb24uY29pblNwZWNpZmljPy5maXJzdFZhbGlkIHx8XG4gICAgICAgICF0cmFuc2FjdGlvbi5jb2luU3BlY2lmaWM/Lm1heER1cmF0aW9uXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHZhbGlkaXR5IHdpbmRvdycpO1xuICAgICAgfVxuICAgICAgY29uc3QgdmFsaWRpdHlXaW5kb3cgPSB7XG4gICAgICAgIGZpcnN0VmFsaWQ6IHRyYW5zYWN0aW9uLmNvaW5TcGVjaWZpYz8uZmlyc3RWYWxpZCxcbiAgICAgICAgbWF4RHVyYXRpb246IHRyYW5zYWN0aW9uLmNvaW5TcGVjaWZpYz8ubWF4RHVyYXRpb24sXG4gICAgICB9O1xuICAgICAgY29uc3QgbWF0ZXJpYWwgPSBhd2FpdCB0aGlzLmdldE1hdGVyaWFsKCk7XG4gICAgICBpZiAoIXRyYW5zYWN0aW9uLmNvaW5TcGVjaWZpYz8uY29tbW9uS2V5Y2hhaW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIGNvbW1vbiBrZXljaGFpbicpO1xuICAgICAgfVxuICAgICAgY29uc3QgY29tbW9uS2V5Y2hhaW4gPSB0cmFuc2FjdGlvbi5jb2luU3BlY2lmaWMhLmNvbW1vbktleWNoYWluISBhcyBzdHJpbmc7XG4gICAgICBpZiAoIXRyYW5zYWN0aW9uLmRlcml2YXRpb25QYXRoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBkZXJpdmF0aW9uIHBhdGgnKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRlcml2YXRpb25QYXRoID0gdHJhbnNhY3Rpb24uZGVyaXZhdGlvblBhdGggYXMgc3RyaW5nO1xuICAgICAgY29uc3QgYWNjb3VudElkID0gTVBDLmRlcml2ZVVuaGFyZGVuZWQoY29tbW9uS2V5Y2hhaW4sIGRlcml2YXRpb25QYXRoKS5zbGljZSgwLCA2NCk7XG4gICAgICBjb25zdCBzZW5kZXJBZGRyID0gdGhpcy5nZXRBZGRyZXNzRnJvbVB1YmxpY0tleShhY2NvdW50SWQpO1xuXG4gICAgICBjb25zdCB0eG5CdWlsZGVyID0gdGhpcy5nZXRCdWlsZGVyKClcbiAgICAgICAgLm1hdGVyaWFsKG1hdGVyaWFsKVxuICAgICAgICAuZnJvbSh0cmFuc2FjdGlvbi5zZXJpYWxpemVkVHggYXMgc3RyaW5nKVxuICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyQWRkciB9KVxuICAgICAgICAudmFsaWRpdHkodmFsaWRpdHlXaW5kb3cpO1xuXG4gICAgICBjb25zdCBzdWJzdHJhdGVLZXlQYWlyID0gbmV3IFN1YnN0cmF0ZUtleVBhaXIoeyBwdWI6IGFjY291bnRJZCB9KTtcbiAgICAgIHR4bkJ1aWxkZXIuYWRkU2lnbmF0dXJlKHsgcHViOiBzdWJzdHJhdGVLZXlQYWlyLmdldEtleXMoKS5wdWIgfSwgc2lnbmF0dXJlSGV4KTtcbiAgICAgIGNvbnN0IHNpZ25lZFRyYW5zYWN0aW9uID0gYXdhaXQgdHhuQnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3Qgc2VyaWFsaXplZFR4ID0gc2lnbmVkVHJhbnNhY3Rpb24udG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgYnJvYWRjYXN0YWJsZVRyYW5zYWN0aW9ucy5wdXNoKHtcbiAgICAgICAgc2VyaWFsaXplZFR4OiBzZXJpYWxpemVkVHgsXG4gICAgICAgIHNjYW5JbmRleDogdHJhbnNhY3Rpb24uc2NhbkluZGV4LFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChpID09PSByZXEubGVuZ3RoIC0gMSAmJiB0cmFuc2FjdGlvbi5jb2luU3BlY2lmaWMhLmxhc3RTY2FuSW5kZXgpIHtcbiAgICAgICAgbGFzdFNjYW5JbmRleCA9IHRyYW5zYWN0aW9uLmNvaW5TcGVjaWZpYyEubGFzdFNjYW5JbmRleCBhcyBudW1iZXI7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IHRyYW5zYWN0aW9uczogYnJvYWRjYXN0YWJsZVRyYW5zYWN0aW9ucywgbGFzdFNjYW5JbmRleCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgY29uZmlnIGZvciBob3cgdG9rZW4gZW5hYmxlbWVudHMgd29yayBmb3IgdGhpcyBjb2luXG4gICAqIEByZXR1cm5zXG4gICAqICAgIHJlcXVpcmVzVG9rZW5FbmFibGVtZW50OiBUcnVlIGlmIHRva2VucyBuZWVkIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMgY29pblxuICAgKiAgICBzdXBwb3J0c011bHRpcGxlVG9rZW5FbmFibGVtZW50czogVHJ1ZSBpZiBtdWx0aXBsZSB0b2tlbnMgY2FuIGJlIGVuYWJsZWQgaW4gb25lIHRyYW5zYWN0aW9uXG4gICAqICAgIHZhbGlkYXRlV2FsbGV0OiBGdW5jdGlvbiB0byB2YWxpZGF0ZSB3YWxsZXQgdHlwZSBmb3IgdG9rZW4gZW5hYmxlbWVudFxuICAgKi9cbiAgZ2V0VG9rZW5FbmFibGVtZW50Q29uZmlnKCk6IFRva2VuRW5hYmxlbWVudENvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlcXVpcmVzVG9rZW5FbmFibGVtZW50OiB0cnVlLFxuICAgICAgc3VwcG9ydHNNdWx0aXBsZVRva2VuRW5hYmxlbWVudHM6IGZhbHNlLFxuICAgICAgdmFsaWRhdGVXYWxsZXQ6ICh3YWxsZXRUeXBlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKHdhbGxldFR5cGUgIT09ICdjdXN0b2RpYWwnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb2tlbiBlbmFibGVtZW50IGZvciBQb2x5bWVzaCAocG9seXgpIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBjdXN0b2RpYWwgd2FsbGV0cycpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
299
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9seXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcG9seXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLDhDQWV5QjtBQUN6Qix1Q0FBdUQ7QUFDdkQsNENBQTJGO0FBQzNGLGtFQUErRztBQUcvRywrQ0FBdUQ7QUFDdkQsb0RBQXVEO0FBQ3ZELGdFQUFxQztBQUNyQywrQkFBdUY7QUFFdkYsTUFBYSxLQUFNLFNBQVEsa0NBQWE7SUFFdEMsWUFBc0IsS0FBZ0IsRUFBRSxXQUF1QztRQUM3RSxLQUFLLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBRTFCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7UUFDeEUsQ0FBQztRQUVELElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDO0lBQ2xDLENBQUM7SUFLRCxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQWdCLEVBQUUsV0FBdUM7UUFDN0UsT0FBTyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELFVBQVU7UUFDUixPQUFPLElBQUksK0JBQXlCLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRDs7T0FFRztJQUNJLGFBQWE7UUFDbEIsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRU0sUUFBUTtRQUNiLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFTSxXQUFXO1FBQ2hCLE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsaUJBQWlCLENBQUMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBMkI7UUFDekUsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxZQUFZO1FBQ1YsT0FBTyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUVELFNBQVM7UUFDUCxPQUFPLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQ2pELENBQUM7SUFFRCxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUNuRCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDTyxnQkFBZ0I7UUFDeEIsT0FBTyxnQ0FBb0IsQ0FBQztJQUM5QixDQUFDO0lBRVMsS0FBSyxDQUFDLHFCQUFxQjtRQUNuQyxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDOUIsTUFBTSxVQUFVLEdBQUcsSUFBSSxnQkFBVSxDQUFDLHVCQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDdEYsS0FBSyxDQUFDLEdBQUcsR0FBRyxNQUFNLGdCQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7WUFDOUQsS0FBSyxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztRQUNsQyxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDO0lBQ25CLENBQUM7SUFFUyxLQUFLLENBQUMsY0FBYyxDQUFDLFVBQWtCO1FBQy9DLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDL0MsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFNUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztJQUMzRSxDQUFDO0lBRVMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFnQixFQUFFLE9BQWUsRUFBRSxNQUFjO1FBQ3RFLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDL0MsTUFBTSxJQUFJLEdBQUcsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuRixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVTLEtBQUssQ0FBQyxhQUFhO1FBQzNCLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDL0MsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztJQUMxRSxDQUFDO0lBRVMsS0FBSyxDQUFDLFdBQVc7UUFDekIsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUMvQyxPQUFPO1lBQ0wsV0FBVyxFQUFFLEdBQUcsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFO1lBQ3ZDLFNBQVMsRUFBRSxHQUFHLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRTtZQUN0QyxRQUFRLEVBQUUsR0FBRyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUEyQjtZQUN6RSxXQUFXLEVBQUUsR0FBRyxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFO1lBQ3RELFNBQVMsRUFBRSxHQUFHLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRTtZQUMzRCxRQUFRLEVBQUUsR0FBRyxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUU7U0FDdEMsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUEwQjtRQUN0QyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUN0QyxDQUFDO1FBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsQ0FBQztZQUNwRixNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7UUFDMUQsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNwRCxNQUFNLGVBQWUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDO1FBRXpGLE1BQU0sR0FBRyxHQUFHLE1BQU0sdUJBQVksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FBRTNELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUEsK0JBQWlCLEVBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxFQUFFLENBQUM7UUFDM0YsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUUzRCxNQUFNLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVyRSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUM7UUFDNUMsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDO1FBQzNCLE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ25FLE1BQU0sU0FBUyxHQUFHLElBQUksc0JBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakUsTUFBTSxZQUFZLEdBQUcsSUFBSSxzQkFBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLHNCQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUUzRSxNQUFNLEtBQUssR0FBRyxJQUFJLHNCQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksc0JBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQzFFLElBQUksS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1FBQ2hFLENBQUM7UUFFRCxNQUFNLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ2hFLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzFDLE1BQU0sY0FBYyxHQUFHLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFFN0YsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBb0IsQ0FBQztRQUUvRixTQUFTO2FBQ04sTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQzthQUMvQixFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLG1CQUFtQixFQUFFLENBQUM7YUFDM0MsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDO2FBQy9CLElBQUksQ0FBQyxHQUFHLENBQUM7YUFDVCxRQUFRLENBQUMsY0FBYyxDQUFDO2FBQ3hCLGNBQWMsQ0FBQyxVQUFVLENBQUM7YUFDMUIsVUFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQzthQUM3RCxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBRW5DLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBZ0IsQ0FBQztRQUVyRSxJQUFJLFlBQVksR0FBRyxtQkFBbUIsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzNELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNyQixJQUFBLGdCQUFNLEVBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1lBQzFDLElBQUEsZ0JBQU0sRUFBQyxNQUFNLENBQUMsU0FBUyxFQUFFLG1CQUFtQixDQUFDLENBQUM7WUFDOUMsSUFBQSxnQkFBTSxFQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSwyQkFBMkIsQ0FBQyxDQUFDO1lBRTdELE1BQU0sZUFBZSxHQUFHLE1BQU0sSUFBSSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDcEcsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDO1lBQzVCLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSw0QkFBZ0IsQ0FBQyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1lBQ2xFLElBQUksZUFBZSxDQUFDLE9BQU8sS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDckMsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsMEJBQTBCLENBQUM7b0JBQ25ELE9BQU8sRUFBRSxtQkFBbUIsQ0FBQyxlQUFlO29CQUM1QyxPQUFPLEVBQUUsZUFBZSxDQUFDLGdCQUFnQjtvQkFDekMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7b0JBQzlDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxnQkFBZ0I7b0JBQ3pDLFFBQVE7b0JBQ1IsY0FBYyxFQUFFLFFBQVE7b0JBQ3hCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztpQkFDbEIsQ0FBQyxDQUFDO2dCQUNILFNBQVMsQ0FBQyxZQUFZLENBQ3BCLEVBQUUsR0FBRyxFQUFFLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUN2QyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FDdkQsQ0FBQztZQUNKLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBeUMsQ0FBQztnQkFDeEcsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztvQkFDekMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7b0JBQzFDLFFBQVEsRUFBRSxNQUFNLENBQUMsZ0JBQWdCO2lCQUNsQyxDQUFDLENBQUM7Z0JBQ0gsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBMkMsQ0FBQztnQkFDOUYsTUFBTSxZQUFZLEdBQUcsTUFBTSx1QkFBWSxDQUFDLGVBQWUsQ0FDckQsbUJBQW1CLEVBQ25CLHFCQUFxQixFQUNyQixRQUFRLEVBQ1IsbUJBQW1CLENBQ3BCLENBQUM7Z0JBQ0YsU0FBUyxDQUFDLFlBQVksQ0FBQyxFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxZQUFZLENBQUMsQ0FBQztZQUNoRixDQUFDO1lBQ0QsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNsRCxZQUFZLEdBQUcsaUJBQWlCLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN2RCxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNuQyxNQUFNLE1BQU0sR0FBRztnQkFDYjtvQkFDRSxPQUFPLEVBQUUsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU87b0JBQzlDLFdBQVcsRUFBRSxZQUFZLENBQUMsUUFBUSxFQUFFO29CQUNwQyxLQUFLLEVBQUUsWUFBWSxDQUFDLFFBQVEsRUFBRTtpQkFDL0I7YUFDRixDQUFDO1lBQ0YsTUFBTSxPQUFPLEdBQUc7Z0JBQ2Q7b0JBQ0UsT0FBTyxFQUFFLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPO29CQUMvQyxXQUFXLEVBQUUsWUFBWSxDQUFDLFFBQVEsRUFBRTtvQkFDcEMsUUFBUSxFQUFFLFVBQVU7aUJBQ3JCO2FBQ0YsQ0FBQztZQUNGLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM1QyxNQUFNLFFBQVEsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUMxRixNQUFNLE9BQU8sR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQzNDLE1BQU0sV0FBVyxHQUFVO2dCQUN6QixZQUFZLEVBQUUsWUFBWTtnQkFDMUIsU0FBUyxFQUFFLEtBQUs7Z0JBQ2hCLElBQUksRUFBRSxVQUFVO2dCQUNoQixXQUFXLEVBQUUsbUJBQW1CLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7Z0JBQ2hFLGNBQWMsRUFBRSxRQUFRO2dCQUN4QixRQUFRLEVBQUUsUUFBUTtnQkFDbEIsT0FBTyxFQUFFLE9BQU87Z0JBQ2hCLFlBQVksRUFBRSxFQUFFLEdBQUcsY0FBYyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUU7YUFDOUQsQ0FBQztZQUVGLE1BQU0sVUFBVSxHQUFrQixFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLEVBQUUsRUFBRSxDQUFDO1lBQ25GLE1BQU0sWUFBWSxHQUFvQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ25ELE1BQU0sU0FBUyxHQUFzQjtnQkFDbkMsWUFBWSxFQUFFLFlBQVk7Z0JBQzFCLFVBQVUsRUFBRSxVQUFVO2FBQ3ZCLENBQUM7WUFDRixNQUFNLFVBQVUsR0FBZ0IsRUFBRSxVQUFVLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQzVELE9BQU8sVUFBVSxDQUFDO1FBQ3BCLENBQUM7UUFFRCxNQUFNLFdBQVcsR0FBVSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQzVFLE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxvQkFBb0I7SUFDcEIsS0FBSyxDQUFDLG1DQUFtQyxDQUFDLE1BQStCO1FBQ3ZFLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUM7UUFDbkMsTUFBTSx5QkFBeUIsR0FBWSxFQUFFLENBQUM7UUFDOUMsSUFBSSxhQUFhLEdBQUcsQ0FBQyxDQUFDO1FBRXRCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDcEMsTUFBTSxHQUFHLEdBQUcsTUFBTSx1QkFBWSxDQUFDLHlCQUF5QixFQUFFLENBQUM7WUFDM0QsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO1lBQ2hFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDakQsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1lBQzFDLENBQUM7WUFDRCxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQztZQUMvQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7WUFDMUMsQ0FBQztZQUNELE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNuRSxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNwRCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ1osTUFBTSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQ3ZDLENBQUM7WUFDRCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0csSUFDRSxDQUFDLFdBQVcsQ0FBQyxZQUFZO2dCQUN6QixDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsVUFBVTtnQkFDckMsQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFDdEMsQ0FBQztnQkFDRCxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7WUFDN0MsQ0FBQztZQUNELE1BQU0sY0FBYyxHQUFHO2dCQUNyQixVQUFVLEVBQUUsV0FBVyxDQUFDLFlBQVksRUFBRSxVQUFVO2dCQUNoRCxXQUFXLEVBQUUsV0FBVyxDQUFDLFlBQVksRUFBRSxXQUFXO2FBQ25ELENBQUM7WUFDRixNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUMxQyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxjQUFjLEVBQUUsQ0FBQztnQkFDOUMsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1lBQzdDLENBQUM7WUFDRCxNQUFNLGNBQWMsR0FBRyxXQUFXLENBQUMsWUFBYSxDQUFDLGNBQXlCLENBQUM7WUFDM0UsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDaEMsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1lBQzdDLENBQUM7WUFDRCxNQUFNLGNBQWMsR0FBRyxXQUFXLENBQUMsY0FBd0IsQ0FBQztZQUM1RCxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLGNBQWMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDcEYsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRTNELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUU7aUJBQ2pDLFFBQVEsQ0FBQyxRQUFRLENBQUM7aUJBQ2xCLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBc0IsQ0FBQztpQkFDeEMsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDO2lCQUMvQixRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7WUFFNUIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLDRCQUFnQixDQUFDLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFDbEUsVUFBVSxDQUFDLFlBQVksQ0FBQyxFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxZQUFZLENBQUMsQ0FBQztZQUMvRSxNQUFNLGlCQUFpQixHQUFHLE1BQU0sVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25ELE1BQU0sWUFBWSxHQUFHLGlCQUFpQixDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFFM0QseUJBQXlCLENBQUMsSUFBSSxDQUFDO2dCQUM3QixZQUFZLEVBQUUsWUFBWTtnQkFDMUIsU0FBUyxFQUFFLFdBQVcsQ0FBQyxTQUFTO2FBQ2pDLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxZQUFhLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3BFLGFBQWEsR0FBRyxXQUFXLENBQUMsWUFBYSxDQUFDLGFBQXVCLENBQUM7WUFDcEUsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLEVBQUUsWUFBWSxFQUFFLHlCQUF5QixFQUFFLGFBQWEsRUFBRSxDQUFDO0lBQ3BFLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCx3QkFBd0I7UUFDdEIsT0FBTztZQUNMLHVCQUF1QixFQUFFLElBQUk7WUFDN0IsZ0NBQWdDLEVBQUUsS0FBSztZQUN2QyxjQUFjLEVBQUUsQ0FBQyxVQUFrQixFQUFFLEVBQUU7Z0JBQ3JDLElBQUksVUFBVSxLQUFLLFdBQVcsRUFBRSxDQUFDO29CQUMvQixNQUFNLElBQUksS0FBSyxDQUFDLCtFQUErRSxDQUFDLENBQUM7Z0JBQ25HLENBQUM7WUFDSCxDQUFDO1NBQ0YsQ0FBQztJQUNKLENBQUM7O0FBNVVILHNCQTZVQztBQWpVa0Isd0JBQWtCLEdBQUcsS0FBSyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHtcbiAgQXVkaXREZWNyeXB0ZWRLZXlQYXJhbXMsXG4gIEJhc2VDb2luLFxuICBCaXRHb0Jhc2UsXG4gIEVERFNBTWV0aG9kcyxcbiAgRUREU0FNZXRob2RUeXBlcyxcbiAgTVBDUmVjb3ZlcnlPcHRpb25zLFxuICBNUENTd2VlcFR4cyxcbiAgTVBDVHgsXG4gIE1QQ1Vuc2lnbmVkVHgsXG4gIFJlY292ZXJ5VHhSZXF1ZXN0LFxuICBFbnZpcm9ubWVudHMsXG4gIE1QQ1N3ZWVwUmVjb3ZlcnlPcHRpb25zLFxuICBNUENUeHMsXG4gIFRva2VuRW5hYmxlbWVudENvbmZpZyxcbn0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IEFwaVByb21pc2UsIFdzUHJvdmlkZXIgfSBmcm9tICdAcG9sa2Fkb3QvYXBpJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIFN0YXRpY3NCYXNlQ29pbiwgY29pbnMsIFN1YnN0cmF0ZVNwZWNOYW1lVHlwZSB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IEtleVBhaXIgYXMgU3Vic3RyYXRlS2V5UGFpciwgU3Vic3RyYXRlQ29pbiwgVHJhbnNhY3Rpb24sIEludGVyZmFjZSB9IGZyb20gJ0BiaXRnby9hYnN0cmFjdC1zdWJzdHJhdGUnO1xuaW1wb3J0IHsgQmF0Y2hTdGFraW5nQnVpbGRlciB9IGZyb20gJy4vbGliL2JhdGNoU3Rha2luZ0J1aWxkZXInO1xuaW1wb3J0IHsgQm9uZEV4dHJhQnVpbGRlciB9IGZyb20gJy4vbGliL2JvbmRFeHRyYUJ1aWxkZXInO1xuaW1wb3J0IHsgUE9MWVhfQUREUkVTU19GT1JNQVQgfSBmcm9tICcuL2xpYi9jb25zdGFudHMnO1xuaW1wb3J0IHsgZ2V0RGVyaXZhdGlvblBhdGggfSBmcm9tICdAYml0Z28vc2RrLWxpYi1tcGMnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSwgVHJhbnNmZXJCdWlsZGVyLCBIZXhUcmFuc2ZlckJ1aWxkZXIgfSBmcm9tICcuL2xpYic7XG5cbmV4cG9ydCBjbGFzcyBQb2x5eCBleHRlbmRzIFN1YnN0cmF0ZUNvaW4ge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3N0YXRpY3NDb2luOiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+O1xuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoYml0Z286IEJpdEdvQmFzZSwgc3RhdGljc0NvaW4/OiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+KSB7XG4gICAgc3VwZXIoYml0Z28sIHN0YXRpY3NDb2luKTtcblxuICAgIGlmICghc3RhdGljc0NvaW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCBjb25zdHJ1Y3RvciBwYXJhbWV0ZXIgc3RhdGljc0NvaW4nKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGF0aWNzQ29pbiA9IHN0YXRpY3NDb2luO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN0YXRpYyBub2RlQXBpSW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIHN0YXRpYyBBUEk6IEFwaVByb21pc2U7XG5cbiAgc3RhdGljIGNyZWF0ZUluc3RhbmNlKGJpdGdvOiBCaXRHb0Jhc2UsIHN0YXRpY3NDb2luPzogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPik6IEJhc2VDb2luIHtcbiAgICByZXR1cm4gbmV3IFBvbHl4KGJpdGdvLCBzdGF0aWNzQ29pbik7XG4gIH1cblxuICBnZXRCdWlsZGVyKCk6IFRyYW5zYWN0aW9uQnVpbGRlckZhY3Rvcnkge1xuICAgIHJldHVybiBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQodGhpcy5nZXRDaGFpbigpKSk7XG4gIH1cblxuICAvKipcbiAgICogRmFjdG9yIGJldHdlZW4gdGhlIGNvaW4ncyBiYXNlIHVuaXQgYW5kIGl0cyBzbWFsbGVzdCBzdWJkaXZpc29uXG4gICAqL1xuICBwdWJsaWMgZ2V0QmFzZUZhY3RvcigpOiBudW1iZXIge1xuICAgIHJldHVybiAxZTY7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q2hhaW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ3BvbHl4JztcbiAgfVxuXG4gIHB1YmxpYyBnZXRGdWxsTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnUG9seW1lc2gnO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGF1ZGl0RGVjcnlwdGVkS2V5KHsgcHVibGljS2V5LCBwcnYsIG11bHRpU2lnVHlwZSB9OiBBdWRpdERlY3J5cHRlZEtleVBhcmFtcykge1xuICAgIHN1cGVyLmF1ZGl0RGVjcnlwdGVkS2V5KHsgcHVibGljS2V5LCBwcnYsIG11bHRpU2lnVHlwZSB9KTtcbiAgfVxuXG4gIHN0YWtpbmdCYXRjaCgpOiBCYXRjaFN0YWtpbmdCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRCdWlsZGVyKCkuZ2V0QmF0Y2hCdWlsZGVyKCk7XG4gIH1cblxuICBib25kRXh0cmEoKTogQm9uZEV4dHJhQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QnVpbGRlcigpLmdldEJvbmRFeHRyYUJ1aWxkZXIoKTtcbiAgfVxuXG4gIGhleFRyYW5zZmVyKCk6IEhleFRyYW5zZmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QnVpbGRlcigpLmdldEhleFRyYW5zZmVyQnVpbGRlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgYWRkcmVzcyBmb3JtYXQgZm9yIFBvbHl4LlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgYWRkcmVzcyBmb3JtYXQgYXMgYSBudW1iZXIgZm9yIFBvbHl4LlxuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RlY3RlZCBnZXRBZGRyZXNzRm9ybWF0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIFBPTFlYX0FERFJFU1NfRk9STUFUO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGdldEluaXRpYWxpemVkTm9kZUFQSSgpOiBQcm9taXNlPEFwaVByb21pc2U+IHtcbiAgICBpZiAoIVBvbHl4Lm5vZGVBcGlJbml0aWFsaXplZCkge1xuICAgICAgY29uc3Qgd3NQcm92aWRlciA9IG5ldyBXc1Byb3ZpZGVyKEVudmlyb25tZW50c1t0aGlzLmJpdGdvLmdldEVudigpXS5wb2x5bWVzaE5vZGVVcmxzKTtcbiAgICAgIFBvbHl4LkFQSSA9IGF3YWl0IEFwaVByb21pc2UuY3JlYXRlKHsgcHJvdmlkZXI6IHdzUHJvdmlkZXIgfSk7XG4gICAgICBQb2x5eC5ub2RlQXBpSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gUG9seXguQVBJO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGdldEFjY291bnRJbmZvKHdhbGxldEFkZHI6IHN0cmluZyk6IFByb21pc2U8eyBub25jZTogbnVtYmVyOyBmcmVlQmFsYW5jZTogbnVtYmVyIH0+IHtcbiAgICBjb25zdCBhcGkgPSBhd2FpdCB0aGlzLmdldEluaXRpYWxpemVkTm9kZUFQSSgpO1xuICAgIGNvbnN0IHsgbm9uY2UsIGRhdGE6IGJhbGFuY2UgfSA9IGF3YWl0IGFwaS5xdWVyeS5zeXN0ZW0uYWNjb3VudCh3YWxsZXRBZGRyKTtcblxuICAgIHJldHVybiB7IG5vbmNlOiBub25jZS50b051bWJlcigpLCBmcmVlQmFsYW5jZTogYmFsYW5jZS5mcmVlLnRvTnVtYmVyKCkgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBnZXRGZWUoZGVzdEFkZHI6IHN0cmluZywgc3JjQWRkcjogc3RyaW5nLCBhbW91bnQ6IG51bWJlcik6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgYXBpID0gYXdhaXQgdGhpcy5nZXRJbml0aWFsaXplZE5vZGVBUEkoKTtcbiAgICBjb25zdCBpbmZvID0gYXdhaXQgYXBpLnR4LmJhbGFuY2VzLnRyYW5zZmVyKGRlc3RBZGRyLCBhbW91bnQpLnBheW1lbnRJbmZvKHNyY0FkZHIpO1xuICAgIHJldHVybiBpbmZvLnBhcnRpYWxGZWUudG9OdW1iZXIoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBnZXRIZWFkZXJJbmZvKCk6IFByb21pc2U8eyBoZWFkZXJOdW1iZXI6IG51bWJlcjsgaGVhZGVySGFzaDogc3RyaW5nIH0+IHtcbiAgICBjb25zdCBhcGkgPSBhd2FpdCB0aGlzLmdldEluaXRpYWxpemVkTm9kZUFQSSgpO1xuICAgIGNvbnN0IHsgbnVtYmVyLCBoYXNoIH0gPSBhd2FpdCBhcGkucnBjLmNoYWluLmdldEhlYWRlcigpO1xuICAgIHJldHVybiB7IGhlYWRlck51bWJlcjogbnVtYmVyLnRvTnVtYmVyKCksIGhlYWRlckhhc2g6IGhhc2gudG9TdHJpbmcoKSB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGdldE1hdGVyaWFsKCk6IFByb21pc2U8SW50ZXJmYWNlLk1hdGVyaWFsPiB7XG4gICAgY29uc3QgYXBpID0gYXdhaXQgdGhpcy5nZXRJbml0aWFsaXplZE5vZGVBUEkoKTtcbiAgICByZXR1cm4ge1xuICAgICAgZ2VuZXNpc0hhc2g6IGFwaS5nZW5lc2lzSGFzaC50b1N0cmluZygpLFxuICAgICAgY2hhaW5OYW1lOiBhcGkucnVudGltZUNoYWluLnRvU3RyaW5nKCksXG4gICAgICBzcGVjTmFtZTogYXBpLnJ1bnRpbWVWZXJzaW9uLnNwZWNOYW1lLnRvU3RyaW5nKCkgYXMgU3Vic3RyYXRlU3BlY05hbWVUeXBlLFxuICAgICAgc3BlY1ZlcnNpb246IGFwaS5ydW50aW1lVmVyc2lvbi5zcGVjVmVyc2lvbi50b051bWJlcigpLFxuICAgICAgdHhWZXJzaW9uOiBhcGkucnVudGltZVZlcnNpb24udHJhbnNhY3Rpb25WZXJzaW9uLnRvTnVtYmVyKCksXG4gICAgICBtZXRhZGF0YTogYXBpLnJ1bnRpbWVNZXRhZGF0YS50b0hleCgpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIGEgZnVuZHMgcmVjb3ZlcnkgdHJhbnNhY3Rpb24gd2l0aG91dCBCaXRHb1xuICAgKiBAcGFyYW0ge01QQ1JlY292ZXJ5T3B0aW9uc30gcGFyYW1zIHBhcmFtZXRlcnMgbmVlZGVkIHRvIGNvbnN0cnVjdCBhbmRcbiAgICogKG1heWJlKSBzaWduIHRoZSB0cmFuc2FjdGlvblxuICAgKlxuICAgKiBAcmV0dXJucyB7TVBDVHh9IHRoZSBzZXJpYWxpemVkIHRyYW5zYWN0aW9uIGhleCBzdHJpbmcgYW5kIGluZGV4XG4gICAqIG9mIHRoZSBhZGRyZXNzIGJlaW5nIHN3ZXB0XG4gICAqL1xuICBhc3luYyByZWNvdmVyKHBhcmFtczogTVBDUmVjb3ZlcnlPcHRpb25zKTogUHJvbWlzZTxNUENUeCB8IE1QQ1N3ZWVwVHhzPiB7XG4gICAgaWYgKCFwYXJhbXMuYml0Z29LZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBiaXRnb0tleScpO1xuICAgIH1cblxuICAgIGlmICghcGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24gfHwgIXRoaXMuaXNWYWxpZEFkZHJlc3MocGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcmVjb3ZlcnkgZGVzdGluYXRpb24gYWRkcmVzcycpO1xuICAgIH1cblxuICAgIGNvbnN0IGJpdGdvS2V5ID0gcGFyYW1zLmJpdGdvS2V5LnJlcGxhY2UoL1xccy9nLCAnJyk7XG4gICAgY29uc3QgaXNVbnNpZ25lZFN3ZWVwID0gIXBhcmFtcy51c2VyS2V5ICYmICFwYXJhbXMuYmFja3VwS2V5ICYmICFwYXJhbXMud2FsbGV0UGFzc3BocmFzZTtcblxuICAgIGNvbnN0IE1QQyA9IGF3YWl0IEVERFNBTWV0aG9kcy5nZXRJbml0aWFsaXplZE1wY0luc3RhbmNlKCk7XG5cbiAgICBjb25zdCBpbmRleCA9IHBhcmFtcy5pbmRleCB8fCAwO1xuICAgIGNvbnN0IGN1cnJQYXRoID0gcGFyYW1zLnNlZWQgPyBnZXREZXJpdmF0aW9uUGF0aChwYXJhbXMuc2VlZCkgKyBgLyR7aW5kZXh9YCA6IGBtLyR7aW5kZXh9YDtcbiAgICBjb25zdCBhY2NvdW50SWQgPSBNUEMuZGVyaXZlVW5oYXJkZW5lZChiaXRnb0tleSwgY3VyclBhdGgpLnNsaWNlKDAsIDY0KTtcbiAgICBjb25zdCBzZW5kZXJBZGRyID0gdGhpcy5nZXRBZGRyZXNzRnJvbVB1YmxpY0tleShhY2NvdW50SWQpO1xuXG4gICAgY29uc3QgeyBub25jZSwgZnJlZUJhbGFuY2UgfSA9IGF3YWl0IHRoaXMuZ2V0QWNjb3VudEluZm8oc2VuZGVyQWRkcik7XG5cbiAgICBjb25zdCBkZXN0QWRkciA9IHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uO1xuICAgIGNvbnN0IGFtb3VudCA9IGZyZWVCYWxhbmNlO1xuICAgIGNvbnN0IHBhcnRpYWxGZWUgPSBhd2FpdCB0aGlzLmdldEZlZShkZXN0QWRkciwgc2VuZGVyQWRkciwgYW1vdW50KTtcbiAgICBjb25zdCBwYWRkZWRGZWUgPSBuZXcgQmlnTnVtYmVyKHBhcnRpYWxGZWUpLnRpbWVzKDEwKS50b051bWJlcigpO1xuICAgIGNvbnN0IGFtb3VudFRvU2VuZCA9IG5ldyBCaWdOdW1iZXIoYW1vdW50KS5taW51cyhuZXcgQmlnTnVtYmVyKHBhZGRlZEZlZSkpO1xuXG4gICAgY29uc3QgdmFsdWUgPSBuZXcgQmlnTnVtYmVyKGZyZWVCYWxhbmNlKS5taW51cyhuZXcgQmlnTnVtYmVyKHBhcnRpYWxGZWUpKTtcbiAgICBpZiAodmFsdWUuaXNMZXNzVGhhbk9yRXF1YWxUbygwKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdEaWQgbm90IGZpbmQgYWRkcmVzcyB3aXRoIGZ1bmRzIHRvIHJlY292ZXInKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IGhlYWRlck51bWJlciwgaGVhZGVySGFzaCB9ID0gYXdhaXQgdGhpcy5nZXRIZWFkZXJJbmZvKCk7XG4gICAgY29uc3QgbWF0ZXJpYWwgPSBhd2FpdCB0aGlzLmdldE1hdGVyaWFsKCk7XG4gICAgY29uc3QgdmFsaWRpdHlXaW5kb3cgPSB7IGZpcnN0VmFsaWQ6IGhlYWRlck51bWJlciwgbWF4RHVyYXRpb246IHRoaXMuTUFYX1ZBTElESVRZX0RVUkFUSU9OIH07XG5cbiAgICBjb25zdCB0eEJ1aWxkZXIgPSB0aGlzLmdldEJ1aWxkZXIoKS5nZXRUcmFuc2ZlckJ1aWxkZXIoKS5tYXRlcmlhbChtYXRlcmlhbCkgYXMgVHJhbnNmZXJCdWlsZGVyO1xuXG4gICAgdHhCdWlsZGVyXG4gICAgICAuYW1vdW50KGFtb3VudFRvU2VuZC50b1N0cmluZygpKVxuICAgICAgLnRvKHsgYWRkcmVzczogcGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24gfSlcbiAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBzZW5kZXJBZGRyIH0pXG4gICAgICAubWVtbygnMCcpXG4gICAgICAudmFsaWRpdHkodmFsaWRpdHlXaW5kb3cpXG4gICAgICAucmVmZXJlbmNlQmxvY2soaGVhZGVySGFzaClcbiAgICAgIC5zZXF1ZW5jZUlkKHsgbmFtZTogJ05vbmNlJywga2V5d29yZDogJ25vbmNlJywgdmFsdWU6IG5vbmNlIH0pXG4gICAgICAuZmVlKHsgYW1vdW50OiAwLCB0eXBlOiAndGlwJyB9KTtcblxuICAgIGNvbnN0IHVuc2lnbmVkVHJhbnNhY3Rpb24gPSAoYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkpIGFzIFRyYW5zYWN0aW9uO1xuXG4gICAgbGV0IHNlcmlhbGl6ZWRUeCA9IHVuc2lnbmVkVHJhbnNhY3Rpb24udG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICBpZiAoIWlzVW5zaWduZWRTd2VlcCkge1xuICAgICAgYXNzZXJ0KHBhcmFtcy51c2VyS2V5LCAnbWlzc2luZyB1c2VyS2V5Jyk7XG4gICAgICBhc3NlcnQocGFyYW1zLmJhY2t1cEtleSwgJ21pc3NpbmcgYmFja3VwS2V5Jyk7XG4gICAgICBhc3NlcnQocGFyYW1zLndhbGxldFBhc3NwaHJhc2UsICdtaXNzaW5nIHdhbGxldCBwYXNzcGhyYXNlJyk7XG5cbiAgICAgIGNvbnN0IHNpZ25pbmdNYXRlcmlhbCA9IGF3YWl0IHRoaXMuZ2V0RWRkc2FTaWduaW5nTWF0ZXJpYWwocGFyYW1zLnVzZXJLZXksIHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlKTtcbiAgICAgIGNvbnN0IEVEMjU1MTlfUFJFRklYID0gMHgwMDtcbiAgICAgIGNvbnN0IHN1YnN0cmF0ZUtleVBhaXIgPSBuZXcgU3Vic3RyYXRlS2V5UGFpcih7IHB1YjogYWNjb3VudElkIH0pO1xuICAgICAgaWYgKHNpZ25pbmdNYXRlcmlhbC52ZXJzaW9uID09PSAndjInKSB7XG4gICAgICAgIGNvbnN0IHJhd1NpZyA9IGF3YWl0IHRoaXMuc2lnblN1YnN0cmF0ZU1wY1YyUmVjb3Zlcnkoe1xuICAgICAgICAgIG1lc3NhZ2U6IHVuc2lnbmVkVHJhbnNhY3Rpb24uc2lnbmFibGVQYXlsb2FkLFxuICAgICAgICAgIHVzZXJLZXk6IHNpZ25pbmdNYXRlcmlhbC5lbmNyeXB0ZWRVc2VyS2V5LFxuICAgICAgICAgIGJhY2t1cEtleTogcGFyYW1zLmJhY2t1cEtleS5yZXBsYWNlKC9cXHMvZywgJycpLFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICAgIGJpdGdvS2V5LFxuICAgICAgICAgIGRlcml2YXRpb25QYXRoOiBjdXJyUGF0aCxcbiAgICAgICAgICBiaXRnbzogdGhpcy5iaXRnbyxcbiAgICAgICAgfSk7XG4gICAgICAgIHR4QnVpbGRlci5hZGRTaWduYXR1cmUoXG4gICAgICAgICAgeyBwdWI6IHN1YnN0cmF0ZUtleVBhaXIuZ2V0S2V5cygpLnB1YiB9LFxuICAgICAgICAgIEJ1ZmZlci5jb25jYXQoW0J1ZmZlci5mcm9tKFtFRDI1NTE5X1BSRUZJWF0pLCByYXdTaWddKVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdXNlclNpZ25pbmdNYXRlcmlhbCA9IEpTT04ucGFyc2Uoc2lnbmluZ01hdGVyaWFsLnVzZXJQcnYpIGFzIEVERFNBTWV0aG9kVHlwZXMuVXNlclNpZ25pbmdNYXRlcmlhbDtcbiAgICAgICAgY29uc3QgYmFja3VwUHJ2ID0gYXdhaXQgdGhpcy5iaXRnby5kZWNyeXB0KHtcbiAgICAgICAgICBpbnB1dDogcGFyYW1zLmJhY2t1cEtleS5yZXBsYWNlKC9cXHMvZywgJycpLFxuICAgICAgICAgIHBhc3N3b3JkOiBwYXJhbXMud2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGJhY2t1cFNpZ25pbmdNYXRlcmlhbCA9IEpTT04ucGFyc2UoYmFja3VwUHJ2KSBhcyBFRERTQU1ldGhvZFR5cGVzLkJhY2t1cFNpZ25pbmdNYXRlcmlhbDtcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlSGV4ID0gYXdhaXQgRUREU0FNZXRob2RzLmdldFRTU1NpZ25hdHVyZShcbiAgICAgICAgICB1c2VyU2lnbmluZ01hdGVyaWFsLFxuICAgICAgICAgIGJhY2t1cFNpZ25pbmdNYXRlcmlhbCxcbiAgICAgICAgICBjdXJyUGF0aCxcbiAgICAgICAgICB1bnNpZ25lZFRyYW5zYWN0aW9uXG4gICAgICAgICk7XG4gICAgICAgIHR4QnVpbGRlci5hZGRTaWduYXR1cmUoeyBwdWI6IHN1YnN0cmF0ZUtleVBhaXIuZ2V0S2V5cygpLnB1YiB9LCBzaWduYXR1cmVIZXgpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2lnbmVkVHJhbnNhY3Rpb24gPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHNlcmlhbGl6ZWRUeCA9IHNpZ25lZFRyYW5zYWN0aW9uLnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHdhbGxldENvaW4gPSB0aGlzLmdldENoYWluKCk7XG4gICAgICBjb25zdCBpbnB1dHMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBhZGRyZXNzOiB1bnNpZ25lZFRyYW5zYWN0aW9uLmlucHV0c1swXS5hZGRyZXNzLFxuICAgICAgICAgIHZhbHVlU3RyaW5nOiBhbW91bnRUb1NlbmQudG9TdHJpbmcoKSxcbiAgICAgICAgICB2YWx1ZTogYW1vdW50VG9TZW5kLnRvTnVtYmVyKCksXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgICAgY29uc3Qgb3V0cHV0cyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6IHVuc2lnbmVkVHJhbnNhY3Rpb24ub3V0cHV0c1swXS5hZGRyZXNzLFxuICAgICAgICAgIHZhbHVlU3RyaW5nOiBhbW91bnRUb1NlbmQudG9TdHJpbmcoKSxcbiAgICAgICAgICBjb2luTmFtZTogd2FsbGV0Q29pbixcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCBzcGVuZEFtb3VudCA9IGFtb3VudFRvU2VuZC50b1N0cmluZygpO1xuICAgICAgY29uc3QgcGFyc2VkVHggPSB7IGlucHV0czogaW5wdXRzLCBvdXRwdXRzOiBvdXRwdXRzLCBzcGVuZEFtb3VudDogc3BlbmRBbW91bnQsIHR5cGU6ICcnIH07XG4gICAgICBjb25zdCBmZWVJbmZvID0geyBmZWU6IDAsIGZlZVN0cmluZzogJzAnIH07XG4gICAgICBjb25zdCB0cmFuc2FjdGlvbjogTVBDVHggPSB7XG4gICAgICAgIHNlcmlhbGl6ZWRUeDogc2VyaWFsaXplZFR4LFxuICAgICAgICBzY2FuSW5kZXg6IGluZGV4LFxuICAgICAgICBjb2luOiB3YWxsZXRDb2luLFxuICAgICAgICBzaWduYWJsZUhleDogdW5zaWduZWRUcmFuc2FjdGlvbi5zaWduYWJsZVBheWxvYWQudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICBkZXJpdmF0aW9uUGF0aDogY3VyclBhdGgsXG4gICAgICAgIHBhcnNlZFR4OiBwYXJzZWRUeCxcbiAgICAgICAgZmVlSW5mbzogZmVlSW5mbyxcbiAgICAgICAgY29pblNwZWNpZmljOiB7IC4uLnZhbGlkaXR5V2luZG93LCBjb21tb25LZXljaGFpbjogYml0Z29LZXkgfSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHVuc2lnbmVkVHg6IE1QQ1Vuc2lnbmVkVHggPSB7IHVuc2lnbmVkVHg6IHRyYW5zYWN0aW9uLCBzaWduYXR1cmVTaGFyZXM6IFtdIH07XG4gICAgICBjb25zdCB0cmFuc2FjdGlvbnM6IE1QQ1Vuc2lnbmVkVHhbXSA9IFt1bnNpZ25lZFR4XTtcbiAgICAgIGNvbnN0IHR4UmVxdWVzdDogUmVjb3ZlcnlUeFJlcXVlc3QgPSB7XG4gICAgICAgIHRyYW5zYWN0aW9uczogdHJhbnNhY3Rpb25zLFxuICAgICAgICB3YWxsZXRDb2luOiB3YWxsZXRDb2luLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHR4UmVxdWVzdHM6IE1QQ1N3ZWVwVHhzID0geyB0eFJlcXVlc3RzOiBbdHhSZXF1ZXN0XSB9O1xuICAgICAgcmV0dXJuIHR4UmVxdWVzdHM7XG4gICAgfVxuXG4gICAgY29uc3QgdHJhbnNhY3Rpb246IE1QQ1R4ID0geyBzZXJpYWxpemVkVHg6IHNlcmlhbGl6ZWRUeCwgc2NhbkluZGV4OiBpbmRleCB9O1xuICAgIHJldHVybiB0cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBpbmhlcml0ZWQgZG9jICovXG4gIGFzeW5jIGNyZWF0ZUJyb2FkY2FzdGFibGVTd2VlcFRyYW5zYWN0aW9uKHBhcmFtczogTVBDU3dlZXBSZWNvdmVyeU9wdGlvbnMpOiBQcm9taXNlPE1QQ1R4cz4ge1xuICAgIGNvbnN0IHJlcSA9IHBhcmFtcy5zaWduYXR1cmVTaGFyZXM7XG4gICAgY29uc3QgYnJvYWRjYXN0YWJsZVRyYW5zYWN0aW9uczogTVBDVHhbXSA9IFtdO1xuICAgIGxldCBsYXN0U2NhbkluZGV4ID0gMDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVxLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBNUEMgPSBhd2FpdCBFRERTQU1ldGhvZHMuZ2V0SW5pdGlhbGl6ZWRNcGNJbnN0YW5jZSgpO1xuICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSByZXFbaV0udHhSZXF1ZXN0LnRyYW5zYWN0aW9uc1swXS51bnNpZ25lZFR4O1xuICAgICAgaWYgKCFyZXFbaV0ub3ZjIHx8ICFyZXFbaV0ub3ZjWzBdLmVkZHNhU2lnbmF0dXJlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBzaWduYXR1cmUocyknKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IHJlcVtpXS5vdmNbMF0uZWRkc2FTaWduYXR1cmU7XG4gICAgICBpZiAoIXRyYW5zYWN0aW9uLnNpZ25hYmxlSGV4KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBzaWduYWJsZSBoZXgnKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1lc3NhZ2VCdWZmZXIgPSBCdWZmZXIuZnJvbSh0cmFuc2FjdGlvbi5zaWduYWJsZUhleCEsICdoZXgnKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IE1QQy52ZXJpZnkobWVzc2FnZUJ1ZmZlciwgc2lnbmF0dXJlKTtcbiAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzaWduYXR1cmUnKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNpZ25hdHVyZUhleCA9IEJ1ZmZlci5jb25jYXQoW0J1ZmZlci5mcm9tKHNpZ25hdHVyZS5SLCAnaGV4JyksIEJ1ZmZlci5mcm9tKHNpZ25hdHVyZS5zaWdtYSwgJ2hleCcpXSk7XG4gICAgICBpZiAoXG4gICAgICAgICF0cmFuc2FjdGlvbi5jb2luU3BlY2lmaWMgfHxcbiAgICAgICAgIXRyYW5zYWN0aW9uLmNvaW5TcGVjaWZpYz8uZmlyc3RWYWxpZCB8fFxuICAgICAgICAhdHJhbnNhY3Rpb24uY29pblNwZWNpZmljPy5tYXhEdXJhdGlvblxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyB2YWxpZGl0eSB3aW5kb3cnKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHZhbGlkaXR5V2luZG93ID0ge1xuICAgICAgICBmaXJzdFZhbGlkOiB0cmFuc2FjdGlvbi5jb2luU3BlY2lmaWM/LmZpcnN0VmFsaWQsXG4gICAgICAgIG1heER1cmF0aW9uOiB0cmFuc2FjdGlvbi5jb2luU3BlY2lmaWM/Lm1heER1cmF0aW9uLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IG1hdGVyaWFsID0gYXdhaXQgdGhpcy5nZXRNYXRlcmlhbCgpO1xuICAgICAgaWYgKCF0cmFuc2FjdGlvbi5jb2luU3BlY2lmaWM/LmNvbW1vbktleWNoYWluKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBjb21tb24ga2V5Y2hhaW4nKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbW1vbktleWNoYWluID0gdHJhbnNhY3Rpb24uY29pblNwZWNpZmljIS5jb21tb25LZXljaGFpbiEgYXMgc3RyaW5nO1xuICAgICAgaWYgKCF0cmFuc2FjdGlvbi5kZXJpdmF0aW9uUGF0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgZGVyaXZhdGlvbiBwYXRoJyk7XG4gICAgICB9XG4gICAgICBjb25zdCBkZXJpdmF0aW9uUGF0aCA9IHRyYW5zYWN0aW9uLmRlcml2YXRpb25QYXRoIGFzIHN0cmluZztcbiAgICAgIGNvbnN0IGFjY291bnRJZCA9IE1QQy5kZXJpdmVVbmhhcmRlbmVkKGNvbW1vbktleWNoYWluLCBkZXJpdmF0aW9uUGF0aCkuc2xpY2UoMCwgNjQpO1xuICAgICAgY29uc3Qgc2VuZGVyQWRkciA9IHRoaXMuZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkoYWNjb3VudElkKTtcblxuICAgICAgY29uc3QgdHhuQnVpbGRlciA9IHRoaXMuZ2V0QnVpbGRlcigpXG4gICAgICAgIC5tYXRlcmlhbChtYXRlcmlhbClcbiAgICAgICAgLmZyb20odHJhbnNhY3Rpb24uc2VyaWFsaXplZFR4IGFzIHN0cmluZylcbiAgICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IHNlbmRlckFkZHIgfSlcbiAgICAgICAgLnZhbGlkaXR5KHZhbGlkaXR5V2luZG93KTtcblxuICAgICAgY29uc3Qgc3Vic3RyYXRlS2V5UGFpciA9IG5ldyBTdWJzdHJhdGVLZXlQYWlyKHsgcHViOiBhY2NvdW50SWQgfSk7XG4gICAgICB0eG5CdWlsZGVyLmFkZFNpZ25hdHVyZSh7IHB1Yjogc3Vic3RyYXRlS2V5UGFpci5nZXRLZXlzKCkucHViIH0sIHNpZ25hdHVyZUhleCk7XG4gICAgICBjb25zdCBzaWduZWRUcmFuc2FjdGlvbiA9IGF3YWl0IHR4bkJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWRUeCA9IHNpZ25lZFRyYW5zYWN0aW9uLnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgIGJyb2FkY2FzdGFibGVUcmFuc2FjdGlvbnMucHVzaCh7XG4gICAgICAgIHNlcmlhbGl6ZWRUeDogc2VyaWFsaXplZFR4LFxuICAgICAgICBzY2FuSW5kZXg6IHRyYW5zYWN0aW9uLnNjYW5JbmRleCxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoaSA9PT0gcmVxLmxlbmd0aCAtIDEgJiYgdHJhbnNhY3Rpb24uY29pblNwZWNpZmljIS5sYXN0U2NhbkluZGV4KSB7XG4gICAgICAgIGxhc3RTY2FuSW5kZXggPSB0cmFuc2FjdGlvbi5jb2luU3BlY2lmaWMhLmxhc3RTY2FuSW5kZXggYXMgbnVtYmVyO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyB0cmFuc2FjdGlvbnM6IGJyb2FkY2FzdGFibGVUcmFuc2FjdGlvbnMsIGxhc3RTY2FuSW5kZXggfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGNvbmZpZyBmb3IgaG93IHRva2VuIGVuYWJsZW1lbnRzIHdvcmsgZm9yIHRoaXMgY29pblxuICAgKiBAcmV0dXJuc1xuICAgKiAgICByZXF1aXJlc1Rva2VuRW5hYmxlbWVudDogVHJ1ZSBpZiB0b2tlbnMgbmVlZCB0byBiZSBlbmFibGVkIGZvciB0aGlzIGNvaW5cbiAgICogICAgc3VwcG9ydHNNdWx0aXBsZVRva2VuRW5hYmxlbWVudHM6IFRydWUgaWYgbXVsdGlwbGUgdG9rZW5zIGNhbiBiZSBlbmFibGVkIGluIG9uZSB0cmFuc2FjdGlvblxuICAgKiAgICB2YWxpZGF0ZVdhbGxldDogRnVuY3Rpb24gdG8gdmFsaWRhdGUgd2FsbGV0IHR5cGUgZm9yIHRva2VuIGVuYWJsZW1lbnRcbiAgICovXG4gIGdldFRva2VuRW5hYmxlbWVudENvbmZpZygpOiBUb2tlbkVuYWJsZW1lbnRDb25maWcge1xuICAgIHJldHVybiB7XG4gICAgICByZXF1aXJlc1Rva2VuRW5hYmxlbWVudDogdHJ1ZSxcbiAgICAgIHN1cHBvcnRzTXVsdGlwbGVUb2tlbkVuYWJsZW1lbnRzOiBmYWxzZSxcbiAgICAgIHZhbGlkYXRlV2FsbGV0OiAod2FsbGV0VHlwZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmICh3YWxsZXRUeXBlICE9PSAnY3VzdG9kaWFsJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9rZW4gZW5hYmxlbWVudCBmb3IgUG9seW1lc2ggKHBvbHl4KSBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgY3VzdG9kaWFsIHdhbGxldHMnKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -50,6 +50,7 @@ const resources_1 = require("../resources");
50
50
  const sdk_core_1 = require("@bitgo/sdk-core");
51
51
  const lib_1 = require("../../src/lib");
52
52
  const resources_2 = require("../../src/resources");
53
+ const sdk_lib_mpc_1 = require("@bitgo/sdk-lib-mpc");
53
54
  describe('Polyx:', function () {
54
55
  let bitgo;
55
56
  let baseCoin;
@@ -198,6 +199,113 @@ describe('Polyx:', function () {
198
199
  should_1.default.deepEqual(txJson.transactionVersion, resources_1.txVersion);
199
200
  should_1.default.deepEqual(txJson.eraPeriod, baseCoin.SWEEP_TXN_DURATION);
200
201
  });
202
+ describe('MPCv2 signed recovery', function () {
203
+ const walletPassphrase = 'test-passphrase-mpcv2';
204
+ let mpcV2UserKey;
205
+ let mpcV2BackupKey;
206
+ let mpcV2CommonKeyChain;
207
+ let mpcV2RecoverParams;
208
+ before(async function () {
209
+ const [userDkg, backupDkg] = await sdk_lib_mpc_1.MPSUtil.generateEdDsaDKGKeyShares();
210
+ mpcV2CommonKeyChain = userDkg.getCommonKeychain();
211
+ mpcV2UserKey = await (0, sdk_api_1.encrypt)(walletPassphrase, userDkg.getReducedKeyShare().toString('base64'));
212
+ mpcV2BackupKey = await (0, sdk_api_1.encrypt)(walletPassphrase, backupDkg.getReducedKeyShare().toString('base64'));
213
+ mpcV2RecoverParams = {
214
+ userKey: mpcV2UserKey,
215
+ backupKey: mpcV2BackupKey,
216
+ bitgoKey: mpcV2CommonKeyChain,
217
+ recoveryDestination,
218
+ walletPassphrase,
219
+ };
220
+ });
221
+ beforeEach(function () {
222
+ // Use unrestricted resolves (not .withArgs) since the mismatched-bitgoKey test
223
+ // derives a different sender address than mpcV2WalletAddress.
224
+ accountInfoCB.resolves({ nonce: 0, freeBalance: 100007000000 });
225
+ headerInfoCB.resolves({
226
+ headerNumber: testData.testnetBlock.blockNumber,
227
+ headerHash: testData.testnetBlock.hash,
228
+ });
229
+ getFeeCB.resolves(74401);
230
+ });
231
+ it('should recover a tx using MPCv2 signing material', async function () {
232
+ const getTSSSignatureSpy = sandBox.spy(sdk_core_1.EDDSAMethods, 'getTSSSignature');
233
+ const addSignatureSpy = sandBox.spy(lib_1.TransferBuilder.prototype, 'addSignature');
234
+ const result = (await baseCoin.recover(mpcV2RecoverParams));
235
+ result.should.not.be.empty();
236
+ result.should.hasOwnProperty('serializedTx');
237
+ result.should.hasOwnProperty('scanIndex');
238
+ should_1.default.equal(result.scanIndex, 0);
239
+ result.serializedTx.should.be.a.String().and.not.be.empty();
240
+ sandBox.assert.notCalled(getTSSSignatureSpy);
241
+ // Substrate MultiSignature Ed25519 discriminant (0x00) must prefix the 64-byte signature.
242
+ sandBox.assert.calledOnce(addSignatureSpy);
243
+ const signature = addSignatureSpy.firstCall.args[1];
244
+ signature.length.should.equal(65);
245
+ signature[0].should.equal(0x00);
246
+ });
247
+ it('should produce a cryptographically valid Ed25519 signature', async function () {
248
+ const addSignatureSpy = sandBox.spy(lib_1.TransferBuilder.prototype, 'addSignature');
249
+ const signRecoverySpy = sandBox.spy(baseCoin, 'signSubstrateMpcV2Recovery');
250
+ await baseCoin.recover(mpcV2RecoverParams);
251
+ // 65-byte sig: 0x00 discriminant + 64-byte Ed25519 sig; signatureVerify handles the prefix.
252
+ const signature = addSignatureSpy.firstCall.args[1];
253
+ // Capture the exact bytes signed by the DSG protocol inside signSubstrateMpcV2Recovery.
254
+ const signablePayload = signRecoverySpy.firstCall.args[0].message;
255
+ const MPC = await sdk_core_1.EDDSAMethods.getInitializedMpcInstance();
256
+ const accountId = MPC.deriveUnhardened(mpcV2CommonKeyChain, 'm/0').slice(0, 64);
257
+ const senderAddr = baseCoin.getAddressFromPublicKey(accountId);
258
+ const isValid = utils_1.default.verifySignature(`0x${signablePayload.toString('hex')}`, `0x${signature.toString('hex')}`, senderAddr);
259
+ isValid.should.be.true();
260
+ });
261
+ it('should use MPCv1 path when signing material is MPCv1 format', async function () {
262
+ const userPrv = JSON.stringify({ uShare: { seed: 'aa' }, bitgoYShare: { u: 'bb' }, backupYShare: { u: 'cc' } });
263
+ sandBox
264
+ .stub(baseCoin, 'getEddsaSigningMaterial')
265
+ .resolves({ version: 'v1', userPrv });
266
+ const getTSSSignatureStub = sandBox
267
+ .stub(sdk_core_1.EDDSAMethods, 'getTSSSignature')
268
+ .resolves(Buffer.from('1baafa0d62174bf0c78f3256318613ffc44b6dd54ab1a63c2185232f92ede9da' +
269
+ 'e1b2818dbeb52a8215fd56f5a5f2a9f94c079ce89e4dc3b1ce6ed6e84ce71857', 'hex'));
270
+ sandBox
271
+ .stub(bitgo, 'decrypt')
272
+ .withArgs(sinon.match({ input: mpcV2BackupKey.replace(/\s/g, '') }))
273
+ .resolves(JSON.stringify({ bShare: {}, yShares: {} }));
274
+ const result = (await baseCoin.recover(mpcV2RecoverParams));
275
+ result.should.not.be.empty();
276
+ result.should.hasOwnProperty('serializedTx');
277
+ result.should.hasOwnProperty('scanIndex');
278
+ should_1.default.equal(result.scanIndex, 0);
279
+ result.serializedTx.should.be.a.String().and.not.be.empty();
280
+ sandBox.assert.calledOnce(getTSSSignatureStub);
281
+ });
282
+ it('should throw a descriptive error when user keychain decryption fails on the MPCv1 path', async function () {
283
+ sandBox.stub(bitgo, 'decrypt').rejects(new Error('password error'));
284
+ await baseCoin.recover(mpcV2RecoverParams).should.be.rejectedWith(/Error decrypting user keychain/);
285
+ });
286
+ it('should throw when commonKeyChain from MPCv2 keycard does not match bitgoKey', async function () {
287
+ const mismatchedBitgoKey = mpcV2CommonKeyChain.slice(0, -8) + '00000000';
288
+ const mismatchedParams = {
289
+ ...mpcV2RecoverParams,
290
+ bitgoKey: mismatchedBitgoKey,
291
+ };
292
+ await baseCoin
293
+ .recover(mismatchedParams)
294
+ .should.be.rejectedWith('EdDSA MPCv2 recovery: commonKeyChain from keycard does not match bitgoKey');
295
+ });
296
+ it('should throw missing userKey when backupKey and walletPassphrase are present but userKey is not', async function () {
297
+ const paramsWithoutUserKey = { ...mpcV2RecoverParams, userKey: undefined };
298
+ await baseCoin.recover(paramsWithoutUserKey).should.be.rejectedWith('missing userKey');
299
+ });
300
+ it('should throw missing backupKey when userKey and walletPassphrase are present but backupKey is not', async function () {
301
+ const paramsWithoutBackupKey = { ...mpcV2RecoverParams, backupKey: undefined };
302
+ await baseCoin.recover(paramsWithoutBackupKey).should.be.rejectedWith('missing backupKey');
303
+ });
304
+ it('should throw missing wallet passphrase when userKey and backupKey are present but walletPassphrase is not', async function () {
305
+ const paramsWithoutPassphrase = { ...mpcV2RecoverParams, walletPassphrase: undefined };
306
+ await baseCoin.recover(paramsWithoutPassphrase).should.be.rejectedWith('missing wallet passphrase');
307
+ });
308
+ });
201
309
  });
202
310
  describe('Token Enablement:', function () {
203
311
  it('should have correct token enablement config', function () {
@@ -353,4 +461,4 @@ describe('Polyx:', function () {
353
461
  });
354
462
  });
355
463
  });
356
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9seXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvcG9seXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsOENBQTBEO0FBQzFELDRDQUEwQztBQUMxQyxtQ0FBMEM7QUFDMUMsdURBQXNGO0FBQ3RGLGdFQUF3QztBQUN4Qyw0Q0FBdUM7QUFDdkMsNkNBQStCO0FBQy9CLGdFQUFrRDtBQUNsRCxpQ0FBa0M7QUFDbEMsNENBQXNHO0FBQ3RHLDhDQUFpRTtBQUNqRSx1Q0FBa0Q7QUFDbEQsbURBQXdEO0FBRXhELFFBQVEsQ0FBQyxRQUFRLEVBQUU7SUFDakIsSUFBSSxLQUFtQixDQUFDO0lBQ3hCLElBQUksUUFBUSxDQUFDO0lBRWIsTUFBTSxDQUFDO1FBQ0wsS0FBSyxHQUFHLG9CQUFTLENBQUMsUUFBUSxDQUFDLGtCQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUN0RCxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxXQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDbEQsS0FBSyxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsWUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3BELEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzNCLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBVyxDQUFDO0lBQzVDLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLDBCQUEwQixFQUFFO1FBQ25DLEVBQUUsQ0FBQyxrREFBa0QsRUFBRTtZQUNyRCw2Q0FBNkM7WUFDN0MsZ0NBQW9CLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN0QyxpQ0FBcUIsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FB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QUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN6RixRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzlFLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDeEYsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JGLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDckYsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDNUYsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekYsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQ3ZGLGtEQUFrRCxDQUNuRCxDQUFDO1lBQ0YsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDOUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDdEcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDN0YsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUYsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQ3hGLGtEQUFrRCxDQUNuRCxDQUFDO1lBQ0YsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDL0csUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdEcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNqRixRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3BGLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN0RixRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3pGLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3BHLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUYsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDeEYsa0lBQWtJLENBQ25JLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw4Q0FBOEMsRUFBRSxLQUFLO1lBQ3RELGFBQWEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO1lBQ3pHLFlBQVksQ0FBQyxRQUFRLENBQUM7Z0JBQ3BCLFlBQVksRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFDLFdBQVc7Z0JBQy9DLFVBQVUsRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUk7YUFDdkMsQ0FBQyxDQUFDO1lBQ0gsUUFBUSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxZQUFZLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFckcsTUFBTSxHQUFHLEdBQUcsTUFBTSxRQUFRLENBQUMsT0FBTyxDQUFDO2dCQUNqQyxPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPO2dCQUNqQyxTQUFTLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxTQUFTO2dCQUNyQyxRQUFRLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRO2dCQUNuQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLGdCQUFnQjtnQkFDbkQsbUJBQW1CLEVBQUUsbUJBQW1CO2FBQ3pDLENBQUMsQ0FBQztZQUVILEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMxQixHQUFHLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUMxQyxHQUFHLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUV2QyxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUMvRCxTQUFTO2lCQUNOLFFBQVEsQ0FBQztnQkFDUixVQUFVLEVBQUUsUUFBUSxDQUFDLFlBQVksQ0FBQyxXQUFXO2dCQUM3QyxXQUFXLEVBQUUsUUFBUSxDQUFDLGtCQUFrQjthQUN6QyxDQUFDO2lCQUNELGNBQWMsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRTlDLE1BQU0sRUFBRSxHQUFHLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25DLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMzQixnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDaEUsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3hFLGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwRSxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLHVCQUFXLENBQUMsQ0FBQztZQUNsRCxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLHVCQUFXLENBQUMsQ0FBQztZQUNsRCxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3RDLGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDaEMsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLGtCQUFrQixFQUFFLHFCQUFTLENBQUMsQ0FBQztZQUN2RCxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ2xFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG9EQUFvRCxFQUFFLEtBQUs7WUFDNUQsYUFBYTtpQkFDVixRQUFRLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQztpQkFDbEQsUUFBUSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztZQUNyRCxZQUFZLENBQUMsUUFBUSxDQUFDO2dCQUNwQixZQUFZLEVBQUUsUUFBUSxDQUFDLFlBQVksQ0FBQyxXQUFXO2dCQUMvQyxVQUFVLEVBQUUsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJO2FBQ3ZDLENBQUMsQ0FBQztZQUNILFFBQVEsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLEVBQUUsUUFBUSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxZQUFZLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFL0csTUFBTSxHQUFHLEdBQUcsTUFBTSxRQUFRLENBQUMsT0FBTyxDQUFDO2dCQUNqQyxRQUFRLEVBQUUsUUFBUSxDQUFDLGlCQUFpQixDQUFDLFFBQVE7Z0JBQzdDLG1CQUFtQixFQUFFLG1CQUFtQjthQUN6QyxDQUFDLENBQUM7WUFFSCxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDMUIsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDbkYsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUM7WUFFaEYsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDeEcsU0FBUztpQkFDTixRQUFRLENBQUM7Z0JBQ1IsVUFBVSxFQUFFLFFBQVEsQ0FBQyxZQUFZLENBQUMsV0FBVztnQkFDN0MsV0FBVyxFQUFFLFFBQVEsQ0FBQyxrQkFBa0I7YUFDekMsQ0FBQztpQkFDRCxjQUFjLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7aUJBQzFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztZQUVqRSxNQUFNLEVBQUUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNuQyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDM0IsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDMUUsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3hFLGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwRSxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLHVCQUFXLENBQUMsQ0FBQztZQUNsRCxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLHVCQUFXLENBQUMsQ0FBQztZQUNsRCxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDaEMsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLGtCQUFrQixFQUFFLHFCQUFTLENBQUMsQ0FBQztZQUN2RCxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ2xFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsbUJBQW1CLEVBQUU7UUFDNUIsRUFBRSxDQUFDLDZDQUE2QyxFQUFFO1lBQ2hELE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBQ25ELGdCQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3JCLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xELE1BQU0sQ0FBQyxnQ0FBZ0MsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGtEQUFrRCxFQUFFO1lBQ3JELE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBQ25ELENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDOUQsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDL0MsaUZBQWlGLENBQ2xGLENBQUM7WUFDRixDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUNoRCxpRkFBaUYsQ0FDbEYsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsbUJBQW1CLEVBQUU7UUFDNUIsTUFBTSxVQUFVLEdBQUcsa0RBQWtELENBQUM7UUFDdEUsTUFBTSxjQUFjLEdBQUcsWUFBWSxDQUFDO1FBQ3BDLE1BQU0sWUFBWSxHQUFHLGtEQUFrRCxDQUFDO1FBRXhFLFFBQVEsQ0FBQyxzQkFBc0IsRUFBRTtZQUMvQixFQUFFLENBQUMsa0RBQWtELEVBQUUsS0FBSztnQkFDMUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxRQUFRLENBQUMsaUJBQWlCLENBQUM7b0JBQzlDLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxpQkFBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUU7b0JBQzVDLFFBQVEsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLENBQUMsRUFBRTtpQkFDNUUsQ0FBQyxDQUFDO2dCQUNILE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzFCLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLGtFQUFrRSxFQUFFLEtBQUs7Z0JBQzFFLE1BQU0sUUFBUTtxQkFDWCxpQkFBaUIsQ0FBQztvQkFDakIsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFLGlCQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTtvQkFDNUMsUUFBUSxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsQ0FBQyxFQUFFO2lCQUM5RSxDQUFDO3FCQUNELE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLHlDQUE4QixDQUFDLENBQUM7WUFDNUQsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMsaUVBQWlFLEVBQUUsS0FBSztnQkFDekUsTUFBTSxRQUFRO3FCQUNYLGlCQUFpQixDQUFDO29CQUNqQixVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsaUJBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFO29CQUM1QyxRQUFRLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUU7aUJBQ2pFLENBQUM7cUJBQ0QsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMseUNBQThCLENBQUMsQ0FBQztZQUM1RCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsUUFBUSxDQUFDLGFBQWEsRUFBRTtZQUN0QixFQUFFLENBQUMsb0NBQW9DLEVBQUUsS0FBSztnQkFDNUMsTUFBTSxRQUFRO3FCQUNYLGlCQUFpQixDQUFDO29CQUNqQixVQUFVLEVBQUUsRUFBRTtvQkFDZCxRQUFRLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUU7aUJBQzVFLENBQUM7cUJBQ0QsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsNkJBQTZCLENBQUMsQ0FBQztZQUMzRCxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQyxvREFBb0QsRUFBRSxLQUFLO2dCQUM1RCxNQUFNLFFBQVE7cUJBQ1gsaUJBQWlCLENBQUM7b0JBQ2pCLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxpQkFBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUU7b0JBQzVDLFFBQVEsRUFBRTt3QkFDUixVQUFVLEVBQUU7NEJBQ1YsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUU7NEJBQy9DLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFO3lCQUNsRDtxQkFDRjtpQkFDRixDQUFDO3FCQUNELE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLG9EQUFvRCxDQUFDLENBQUM7WUFDbEYsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMsZ0RBQWdELEVBQUUsS0FBSztnQkFDeEQsTUFBTSxRQUFRO3FCQUNYLGlCQUFpQixDQUFDO29CQUNqQixVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsaUJBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFO29CQUM1QyxRQUFRLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFO2lCQUM3QixDQUFDO3FCQUNELE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLGdDQUFnQyxDQUFDLENBQUM7WUFDOUQsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILFFBQVEsQ0FBQyxnREFBZ0QsRUFBRTtZQUN6RCxFQUFFLENBQUMsK0VBQStFLEVBQUUsS0FBSztnQkFDdkYsa0dBQWtHO2dCQUNsRyxzR0FBc0c7Z0JBQ3RHLE1BQU0sYUFBYSxHQUFHLGtEQUFrRCxDQUFDO2dCQUN6RSxNQUFNLE1BQU0sR0FBRyxNQUFNLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQztvQkFDOUMsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFLGlCQUFLLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRTtvQkFDbkQsUUFBUSxFQUFFO3dCQUNSLElBQUksRUFBRSxhQUFhO3dCQUNuQixVQUFVLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQztxQkFDckY7aUJBQ0YsQ0FBQyxDQUFDO2dCQUNILE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzFCLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLDREQUE0RCxFQUFFLEtBQUs7Z0JBQ3BFLE1BQU0sTUFBTSxHQUFHLE1BQU0sUUFBUSxDQUFDLGlCQUFpQixDQUFDO29CQUM5QyxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsaUJBQUssQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFO29CQUNuRCxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFO2lCQUNsQyxDQUFDLENBQUM7Z0JBQ0gsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDMUIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILFFBQVEsQ0FBQyx3Q0FBd0MsRUFBRTtZQUNqRCxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUM7WUFDM0IsTUFBTSxVQUFVLEdBQUcsb0JBQVEsQ0FBQyxRQUFRLENBQUM7WUFDckMsTUFBTSxRQUFRLEdBQUcsb0JBQVEsQ0FBQyxRQUFRLENBQUM7WUFDbkMsSUFBSSxhQUFxQixDQUFDO1lBRTFCLE1BQU0sQ0FBQyxLQUFLO2dCQUNWLHlEQUF5RDtnQkFDekQsMEVBQTBFO2dCQUMxRSwyRUFBMkU7Z0JBQzNFLGdEQUFnRDtnQkFDaEQsTUFBTSxPQUFPLEdBQUcsSUFBSSx1QkFBaUIsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO3FCQUN2RCxNQUFNLENBQUMsUUFBUSxDQUFDO3FCQUNoQixFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO3FCQUNuQyxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO3FCQUNyQyxJQUFJLENBQUMsR0FBRyxDQUFDO3FCQUNULFFBQVEsQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDO3FCQUMvQyxjQUFjLENBQUMsb0VBQW9FLENBQUM7cUJBQ3BGLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7cUJBQ3pELEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7Z0JBQ25DLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLFNBQVMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsNEJBQWdCLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDeEYsTUFBTSxFQUFFLEdBQUcsTUFBTSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2pDLGFBQWEsR0FBRyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUN6QyxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQywrREFBK0QsRUFBRSxLQUFLO2dCQUN2RSxNQUFNLE1BQU0sR0FBRyxNQUFNLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQztvQkFDOUMsVUFBVSxFQUFFO3dCQUNWLEtBQUssRUFBRSxhQUFhO3dCQUNwQixZQUFZLEVBQUUsRUFBRSxRQUFRLEVBQUUsNkJBQWlCLEVBQUU7cUJBQzlDO29CQUNELFFBQVEsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUU7aUJBQzlFLENBQUMsQ0FBQztnQkFDSCxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMxQixDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQywyRUFBMkUsRUFBRSxLQUFLO2dCQUNuRixNQUFNLFFBQVE7cUJBQ1gsaUJBQWlCLENBQUM7b0JBQ2pCLFVBQVUsRUFBRTt3QkFDVixLQUFLLEVBQUUsYUFBYTt3QkFDcEIsWUFBWSxFQUFFLEVBQUUsUUFBUSxFQUFFLDZCQUFpQixFQUFFO3FCQUM5QztvQkFDRCxRQUFRLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUU7aUJBQ3hFLENBQUM7cUJBQ0QsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMseUNBQThCLENBQUMsQ0FBQztZQUM1RCxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQywwRUFBMEUsRUFBRSxLQUFLO2dCQUNsRixNQUFNLFFBQVE7cUJBQ1gsaUJBQWlCLENBQUM7b0JBQ2pCLFVBQVUsRUFBRTt3QkFDVixLQUFLLEVBQUUsYUFBYTt3QkFDcEIsWUFBWSxFQUFFLEVBQUUsUUFBUSxFQUFFLDZCQUFpQixFQUFFO3FCQUM5QztvQkFDRCxRQUFRLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFO2lCQUN6RSxDQUFDO3FCQUNELE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLHlDQUE4QixDQUFDLENBQUM7WUFDNUQsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBUZXN0Qml0R28sIFRlc3RCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby9zZGstdGVzdCc7XG5pbXBvcnQgeyBCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby9zZGstYXBpJztcbmltcG9ydCB7IFBvbHl4LCBUcG9seXggfSBmcm9tICcuLi8uLi9zcmMnO1xuaW1wb3J0IHsgUE9MWVhfQUREUkVTU19GT1JNQVQsIFRQT0xZWF9BRERSRVNTX0ZPUk1BVCB9IGZyb20gJy4uLy4uL3NyYy9saWIvY29uc3RhbnRzJztcbmltcG9ydCB1dGlscyBmcm9tICcuLi8uLi9zcmMvbGliL3V0aWxzJztcbmltcG9ydCB7IGNvaW5zIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0ICogYXMgc2lub24gZnJvbSAnc2lub24nO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vcmVzb3VyY2VzL3dyd1VzZXJzJztcbmltcG9ydCB7IGFmdGVyRWFjaCB9IGZyb20gJ21vY2hhJztcbmltcG9ydCB7IGdlbmVzaXNIYXNoLCBzcGVjVmVyc2lvbiwgdHhWZXJzaW9uLCByYXdUeCwgYWNjb3VudHMsIG1vY2tUc3NTaWduYXR1cmUgfSBmcm9tICcuLi9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgVHhJbnRlbnRNaXNtYXRjaFJlY2lwaWVudEVycm9yIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IFY4VHJhbnNmZXJCdWlsZGVyIH0gZnJvbSAnLi4vLi4vc3JjL2xpYic7XG5pbXBvcnQgeyB0ZXN0bmV0VjhNYXRlcmlhbCB9IGZyb20gJy4uLy4uL3NyYy9yZXNvdXJjZXMnO1xuXG5kZXNjcmliZSgnUG9seXg6JywgZnVuY3Rpb24gKCkge1xuICBsZXQgYml0Z286IFRlc3RCaXRHb0FQSTtcbiAgbGV0IGJhc2VDb2luO1xuXG4gIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHsgZW52OiAnbW9jaycgfSk7XG4gICAgYml0Z28uc2FmZVJlZ2lzdGVyKCdwb2x5eCcsIFBvbHl4LmNyZWF0ZUluc3RhbmNlKTtcbiAgICBiaXRnby5zYWZlUmVnaXN0ZXIoJ3Rwb2x5eCcsIFRwb2x5eC5jcmVhdGVJbnN0YW5jZSk7XG4gICAgYml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gICAgYmFzZUNvaW4gPSBiaXRnby5jb2luKCd0cG9seXgnKSBhcyBUcG9seXg7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdBZGRyZXNzIEZvcm1hdCBDb25zdGFudHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBoYXZlIHRoZSBjb3JyZWN0IGFkZHJlc3MgZm9ybWF0IGNvbnN0YW50cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFZlcmlmeSB0aGUgY29uc3RhbnRzIGFyZSBkZWZpbmVkIGNvcnJlY3RseVxuICAgICAgUE9MWVhfQUREUkVTU19GT1JNQVQuc2hvdWxkLmVxdWFsKDEyKTtcbiAgICAgIFRQT0xZWF9BRERSRVNTX0ZPUk1BVC5zaG91bGQuZXF1YWwoNDIpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnUmVjb3ZlciBUcmFuc2FjdGlvbnM6JywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNhbmRCb3ggPSBzaW5vbi5jcmVhdGVTYW5kYm94KCk7XG4gICAgY29uc3QgcmVjb3ZlcnlEZXN0aW5hdGlvbiA9ICc1SDU2ZjMxaFNZR0NSVjNVUmpRSHYyQ2M0WlNrSk5IVE04TUtHdGtrVjZoekNxTjcnO1xuICAgIGNvbnN0IG5vbmNlID0gMDtcbiAgICBsZXQgYWNjb3VudEluZm9DQjtcbiAgICBsZXQgaGVhZGVySW5mb0NCO1xuICAgIGxldCBnZXRGZWVDQjtcbiAgICBsZXQgZ2V0TWF0ZXJpYWxDQjtcblxuICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgYWNjb3VudEluZm9DQiA9IHNhbmRCb3guc3R1YihQb2x5eC5wcm90b3R5cGUsICdnZXRBY2NvdW50SW5mbycgYXMga2V5b2YgUG9seXgpO1xuICAgICAgaGVhZGVySW5mb0NCID0gc2FuZEJveC5zdHViKFBvbHl4LnByb3RvdHlwZSwgJ2dldEhlYWRlckluZm8nIGFzIGtleW9mIFBvbHl4KTtcbiAgICAgIGdldEZlZUNCID0gc2FuZEJveC5zdHViKFBvbHl4LnByb3RvdHlwZSwgJ2dldEZlZScgYXMga2V5b2YgUG9seXgpO1xuICAgICAgZ2V0TWF0ZXJpYWxDQiA9IHNhbmRCb3guc3R1YihQb2x5eC5wcm90b3R5cGUsICdnZXRNYXRlcmlhbCcgYXMga2V5b2YgUG9seXgpO1xuICAgICAgZ2V0TWF0ZXJpYWxDQi5yZXNvbHZlcyh1dGlscy5nZXRNYXRlcmlhbChjb2lucy5nZXQoJ3Rwb2x5eCcpLm5ldHdvcmsudHlwZSkpO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHNhbmRCb3gucmVzdG9yZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSB1bnNpZ25lZCBzd2VlcCBjb3JyZWN0bHknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhY2NvdW50SW5mb0NCXG4gICAgICAgIC53aXRoQXJncyh0ZXN0RGF0YS51bnNpZ25lZFN3ZWVwVXNlci53YWxsZXRBZGRyZXNzKVxuICAgICAgICAucmVzb2x2ZXMoeyBub25jZTogMCwgZnJlZUJhbGFuY2U6IDEwMDAwNzAwMDAwMCB9KTtcbiAgICAgIGhlYWRlckluZm9DQi5yZXNvbHZlcyh7XG4gICAgICAgIGhlYWRlck51bWJlcjogdGVzdERhdGEudGVzdG5ldEJsb2NrLmJsb2NrTnVtYmVyLFxuICAgICAgICBoZWFkZXJIYXNoOiB0ZXN0RGF0YS50ZXN0bmV0QmxvY2suaGFzaCxcbiAgICAgIH0pO1xuICAgICAgZ2V0RmVlQ0Iud2l0aEFyZ3MocmVjb3ZlcnlEZXN0aW5hdGlvbiwgdGVzdERhdGEudW5zaWduZWRTd2VlcFVzZXIud2FsbGV0QWRkcmVzcywgMTAwMDA3MDAwMDAwKS5yZXNvbHZlcyg3NDQwMSk7XG5cbiAgICAgIGNvbnN0IGNvbW1vbktleUNoYWluID0gdGVzdERhdGEudW5zaWduZWRTd2VlcFVzZXIuYml0Z29LZXk7XG5cbiAgICAgIGNvbnN0IHVuc2lnbmVkID0gYXdhaXQgYmFzZUNvaW4ucmVjb3Zlcih7IGJpdGdvS2V5OiBjb21tb25LZXlDaGFpbiwgcmVjb3ZlcnlEZXN0aW5hdGlvbiB9KTtcblxuICAgICAgdW5zaWduZWQudHhSZXF1ZXN0cy5zaG91bGQubm90LmJlLnVuZGVmaW5lZCgpO1xuICAgICAgdW5zaWduZWQudHhSZXF1ZXN0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgdW5zaWduZWQudHhSZXF1ZXN0c1swXS50cmFuc2FjdGlvbnMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgIHVuc2lnbmVkLnR4UmVxdWVzdHNbMF0ud2FsbGV0Q29pbi5zaG91bGQuZXF1YWwoJ3Rwb2x5eCcpO1xuICAgICAgdW5zaWduZWQudHhSZXF1ZXN0c1swXS50cmFuc2FjdGlvbnNbMF0udW5zaWduZWRUeC5zaG91bGQubm90LmJlLnVuZGVmaW5lZCgpO1xuICAgICAgdW5zaWduZWQudHhSZXF1ZXN0c1swXS50cmFuc2FjdGlvbnNbMF0udW5zaWduZWRUeC5zZXJpYWxpemVkVHguc2hvdWxkLm5vdC5iZS51bmRlZmluZWQoKTtcbiAgICAgIHVuc2lnbmVkLnR4UmVxdWVzdHNbMF0udHJhbnNhY3Rpb25zWzBdLnVuc2lnbmVkVHguc2NhbkluZGV4LnNob3VsZC5lcXVhbCgwKTtcbiAgICAgIHVuc2lnbmVkLnR4UmVxdWVzdHNbMF0udHJhbnNhY3Rpb25zWzBdLnVuc2lnbmVkVHguY29pbi5zaG91bGQuZXF1YWwoJ3Rwb2x5eCcpO1xuICAgICAgdW5zaWduZWQudHhSZXF1ZXN0c1swXS50cmFuc2FjdGlvbnNbMF0udW5zaWduZWRUeC5zaWduYWJsZUhleC5zaG91bGQubm90LmJlLnVuZGVmaW5lZCgpO1xuICAgICAgdW5zaWduZWQudHhSZXF1ZXN0c1swXS50cmFuc2FjdGlvbnNbMF0udW5zaWduZWRUeC5kZXJpdmF0aW9uUGF0aC5zaG91bGQuZXF1YWwoJ20vMCcpO1xuICAgICAgdW5zaWduZWQudHhSZXF1ZXN0c1swXS50cmFuc2FjdGlvbnNbMF0udW5zaWduZWRUeC5wYXJzZWRUeC5zaG91bGQubm90LmJlLnVuZGVmaW5lZCgpO1xuICAgICAgdW5zaWduZWQudHhSZXF1ZXN0c1swXS50cmFuc2FjdGlvbnNbMF0udW5zaWduZWRUeC5wYXJzZWRUeC5pbnB1dHMuc2hvdWxkLm5vdC5iZS51bmRlZmluZWQoKTtcbiAgICAgIHVuc2lnbmVkLnR4UmVxdWVzdHNbMF0udHJhbnNhY3Rpb25zWzBdLnVuc2lnbmVkVHgucGFyc2VkVHguaW5wdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICB1bnNpZ25lZC50eFJlcXVlc3RzWzBdLnRyYW5zYWN0aW9uc1swXS51bnNpZ25lZFR4LnBhcnNlZFR4LmlucHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbChcbiAgICAgICAgJzVEblpRcWJ4dEIzQ1drTGdmQTZ3cHFka0NkOUJxN0FYNDlScExQSndXOW16b1Q3cydcbiAgICAgICk7XG4gICAgICB1bnNpZ25lZC50eFJlcXVlc3RzWzBdLnRyYW5zYWN0aW9uc1swXS51bnNpZ25lZFR4LnBhcnNlZFR4LmlucHV0c1swXS52YWx1ZVN0cmluZy5zaG91bGQuZXF1YWwoJzEwMDAwNjI1NTk5MCcpO1xuICAgICAgdW5zaWduZWQudHhSZXF1ZXN0c1swXS50cmFuc2FjdGlvbnNbMF0udW5zaWduZWRUeC5wYXJzZWRUeC5pbnB1dHNbMF0udmFsdWUuc2hvdWxkLmVxdWFsKDEwMDAwNjI1NTk5MCk7XG4gICAgICB1bnNpZ25lZC50eFJlcXVlc3RzWzBdLnRyYW5zYWN0aW9uc1swXS51bnNpZ25lZFR4LnBhcnNlZFR4Lm91dHB1dHMuc2hvdWxkLm5vdC5iZS51bmRlZmluZWQoKTtcbiAgICAgIHVuc2lnbmVkLnR4UmVxdWVzdHNbMF0udHJhbnNhY3Rpb25zWzBdLnVuc2lnbmVkVHgucGFyc2VkVHgub3V0cHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgdW5zaWduZWQudHhSZXF1ZXN0c1swXS50cmFuc2FjdGlvbnNbMF0udW5zaWduZWRUeC5wYXJzZWRUeC5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKFxuICAgICAgICAnNUg1NmYzMWhTWUdDUlYzVVJqUUh2MkNjNFpTa0pOSFRNOE1LR3Rra1Y2aHpDcU43J1xuICAgICAgKTtcbiAgICAgIHVuc2lnbmVkLnR4UmVxdWVzdHNbMF0udHJhbnNhY3Rpb25zWzBdLnVuc2lnbmVkVHgucGFyc2VkVHgub3V0cHV0c1swXS52YWx1ZVN0cmluZy5zaG91bGQuZXF1YWwoJzEwMDAwNjI1NTk5MCcpO1xuICAgICAgdW5zaWduZWQudHhSZXF1ZXN0c1swXS50cmFuc2FjdGlvbnNbMF0udW5zaWduZWRUeC5wYXJzZWRUeC5vdXRwdXRzWzBdLmNvaW5OYW1lLnNob3VsZC5lcXVhbCgndHBvbHl4Jyk7XG4gICAgICB1bnNpZ25lZC50eFJlcXVlc3RzWzBdLnRyYW5zYWN0aW9uc1swXS51bnNpZ25lZFR4LnBhcnNlZFR4LnR5cGUuc2hvdWxkLmVxdWFsKCcnKTtcbiAgICAgIHVuc2lnbmVkLnR4UmVxdWVzdHNbMF0udHJhbnNhY3Rpb25zWzBdLnVuc2lnbmVkVHguZmVlSW5mby5zaG91bGQubm90LmJlLnVuZGVmaW5lZCgpO1xuICAgICAgdW5zaWduZWQudHhSZXF1ZXN0c1swXS50cmFuc2FjdGlvbnNbMF0udW5zaWduZWRUeC5mZWVJbmZvLmZlZS5zaG91bGQuZXF1YWwoMCk7XG4gICAgICB1bnNpZ25lZC50eFJlcXVlc3RzWzBdLnRyYW5zYWN0aW9uc1swXS51bnNpZ25lZFR4LmZlZUluZm8uZmVlU3RyaW5nLnNob3VsZC5lcXVhbCgnMCcpO1xuICAgICAgdW5zaWduZWQudHhSZXF1ZXN0c1swXS50cmFuc2FjdGlvbnNbMF0udW5zaWduZWRUeC5jb2luU3BlY2lmaWMuc2hvdWxkLm5vdC5iZS51bmRlZmluZWQoKTtcbiAgICAgIHVuc2lnbmVkLnR4UmVxdWVzdHNbMF0udHJhbnNhY3Rpb25zWzBdLnVuc2lnbmVkVHguY29pblNwZWNpZmljLmZpcnN0VmFsaWQuc2hvdWxkLm5vdC5iZS51bmRlZmluZWQoKTtcbiAgICAgIHVuc2lnbmVkLnR4UmVxdWVzdHNbMF0udHJhbnNhY3Rpb25zWzBdLnVuc2lnbmVkVHguY29pblNwZWNpZmljLm1heER1cmF0aW9uLnNob3VsZC5lcXVhbCgyNDAwKTtcbiAgICAgIHVuc2lnbmVkLnR4UmVxdWVzdHNbMF0udHJhbnNhY3Rpb25zWzBdLnVuc2lnbmVkVHguY29pblNwZWNpZmljLmNvbW1vbktleWNoYWluLnNob3VsZC5lcXVhbChcbiAgICAgICAgJzk3ZDlkYThiZjU0NGQwN2YzYzdhZThlZTA2YmIxMmE2M2Y3NDQ3OGQwYzQ2MTIwMWFiOTQ0MjFhOWM4MWQ1YjM3OTU1M2YwMzMyZGFhYTg1Y2I4YzY1ZTFmZTdlNjkwN2M2MjI2OGMwMDgxMmIwOGE0ZTEzNjExNzhlMzA0ZGRiJ1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVjb3ZlciBhIHR4IGZvciBub24tYml0Z28gcmVjb3ZlcmllcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFjY291bnRJbmZvQ0Iud2l0aEFyZ3ModGVzdERhdGEud3J3VXNlci53YWxsZXRBZGRyZXNzKS5yZXNvbHZlcyh7IG5vbmNlOiAwLCBmcmVlQmFsYW5jZTogMTAwMDA3MDAwMDAwIH0pO1xuICAgICAgaGVhZGVySW5mb0NCLnJlc29sdmVzKHtcbiAgICAgICAgaGVhZGVyTnVtYmVyOiB0ZXN0RGF0YS50ZXN0bmV0QmxvY2suYmxvY2tOdW1iZXIsXG4gICAgICAgIGhlYWRlckhhc2g6IHRlc3REYXRhLnRlc3RuZXRCbG9jay5oYXNoLFxuICAgICAgfSk7XG4gICAgICBnZXRGZWVDQi53aXRoQXJncyhyZWNvdmVyeURlc3RpbmF0aW9uLCB0ZXN0RGF0YS53cndVc2VyLndhbGxldEFkZHJlc3MsIDEwMDAwNzAwMDAwMCkucmVzb2x2ZXMoNzQ0MDEpO1xuXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBiYXNlQ29pbi5yZWNvdmVyKHtcbiAgICAgICAgdXNlcktleTogdGVzdERhdGEud3J3VXNlci51c2VyS2V5LFxuICAgICAgICBiYWNrdXBLZXk6IHRlc3REYXRhLndyd1VzZXIuYmFja3VwS2V5LFxuICAgICAgICBiaXRnb0tleTogdGVzdERhdGEud3J3VXNlci5iaXRnb0tleSxcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogdGVzdERhdGEud3J3VXNlci53YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uOiByZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgfSk7XG5cbiAgICAgIHJlcy5zaG91bGQubm90LmJlLmVtcHR5KCk7XG4gICAgICByZXMuc2hvdWxkLmhhc093blByb3BlcnR5KCdzZXJpYWxpemVkVHgnKTtcbiAgICAgIHJlcy5zaG91bGQuaGFzT3duUHJvcGVydHkoJ3NjYW5JbmRleCcpO1xuXG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBiYXNlQ29pbi5nZXRCdWlsZGVyKCkuZnJvbShyZXMuc2VyaWFsaXplZFR4KTtcbiAgICAgIHR4QnVpbGRlclxuICAgICAgICAudmFsaWRpdHkoe1xuICAgICAgICAgIGZpcnN0VmFsaWQ6IHRlc3REYXRhLnRlc3RuZXRCbG9jay5ibG9ja051bWJlcixcbiAgICAgICAgICBtYXhEdXJhdGlvbjogYmFzZUNvaW4uU1dFRVBfVFhOX0RVUkFUSU9OLFxuICAgICAgICB9KVxuICAgICAgICAucmVmZXJlbmNlQmxvY2sodGVzdERhdGEudGVzdG5ldEJsb2NrLmhhc2gpO1xuXG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5zZW5kZXIsIHRlc3REYXRhLndyd1VzZXIud2FsbGV0QWRkcmVzcyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ibG9ja051bWJlciwgdGVzdERhdGEudGVzdG5ldEJsb2NrLmJsb2NrTnVtYmVyKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnJlZmVyZW5jZUJsb2NrLCB0ZXN0RGF0YS50ZXN0bmV0QmxvY2suaGFzaCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5nZW5lc2lzSGFzaCwgZ2VuZXNpc0hhc2gpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc3BlY1ZlcnNpb24sIHNwZWNWZXJzaW9uKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLm5vbmNlLCBub25jZSk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50aXAsIDApO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udHJhbnNhY3Rpb25WZXJzaW9uLCB0eFZlcnNpb24pO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZXJhUGVyaW9kLCBiYXNlQ29pbi5TV0VFUF9UWE5fRFVSQVRJT04pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWNvdmVyIGEgdHhuIGZvciB1bnNpZ25lZC1zd2VlcCByZWNvdmVyaWVzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYWNjb3VudEluZm9DQlxuICAgICAgICAud2l0aEFyZ3ModGVzdERhdGEudW5zaWduZWRTd2VlcFVzZXIud2FsbGV0QWRkcmVzcylcbiAgICAgICAgLnJlc29sdmVzKHsgbm9uY2U6IDAsIGZyZWVCYWxhbmNlOiAxMDAwMDcwMDAwMDAgfSk7XG4gICAgICBoZWFkZXJJbmZvQ0IucmVzb2x2ZXMoe1xuICAgICAgICBoZWFkZXJOdW1iZXI6IHRlc3REYXRhLnRlc3RuZXRCbG9jay5ibG9ja051bWJlcixcbiAgICAgICAgaGVhZGVySGFzaDogdGVzdERhdGEudGVzdG5ldEJsb2NrLmhhc2gsXG4gICAgICB9KTtcbiAgICAgIGdldEZlZUNCLndpdGhBcmdzKHJlY292ZXJ5RGVzdGluYXRpb24sIHRlc3REYXRhLnVuc2lnbmVkU3dlZXBVc2VyLndhbGxldEFkZHJlc3MsIDEwMDAwNzAwMDAwMCkucmVzb2x2ZXMoNzQ0MDEpO1xuXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBiYXNlQ29pbi5yZWNvdmVyKHtcbiAgICAgICAgYml0Z29LZXk6IHRlc3REYXRhLnVuc2lnbmVkU3dlZXBVc2VyLmJpdGdvS2V5LFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uOiByZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgfSk7XG5cbiAgICAgIHJlcy5zaG91bGQubm90LmJlLmVtcHR5KCk7XG4gICAgICByZXMudHhSZXF1ZXN0c1swXS50cmFuc2FjdGlvbnNbMF0udW5zaWduZWRUeC5zaG91bGQuaGFzT3duUHJvcGVydHkoJ3NlcmlhbGl6ZWRUeCcpO1xuICAgICAgcmVzLnR4UmVxdWVzdHNbMF0udHJhbnNhY3Rpb25zWzBdLnVuc2lnbmVkVHguc2hvdWxkLmhhc093blByb3BlcnR5KCdzY2FuSW5kZXgnKTtcblxuICAgICAgY29uc3QgdHhCdWlsZGVyID0gYmFzZUNvaW4uZ2V0QnVpbGRlcigpLmZyb20ocmVzLnR4UmVxdWVzdHNbMF0udHJhbnNhY3Rpb25zWzBdLnVuc2lnbmVkVHguc2VyaWFsaXplZFR4KTtcbiAgICAgIHR4QnVpbGRlclxuICAgICAgICAudmFsaWRpdHkoe1xuICAgICAgICAgIGZpcnN0VmFsaWQ6IHRlc3REYXRhLnRlc3RuZXRCbG9jay5ibG9ja051bWJlcixcbiAgICAgICAgICBtYXhEdXJhdGlvbjogYmFzZUNvaW4uU1dFRVBfVFhOX0RVUkFUSU9OLFxuICAgICAgICB9KVxuICAgICAgICAucmVmZXJlbmNlQmxvY2sodGVzdERhdGEudGVzdG5ldEJsb2NrLmhhc2gpXG4gICAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiB0ZXN0RGF0YS51bnNpZ25lZFN3ZWVwVXNlci53YWxsZXRBZGRyZXNzIH0pO1xuXG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5zZW5kZXIsIHRlc3REYXRhLnVuc2lnbmVkU3dlZXBVc2VyLndhbGxldEFkZHJlc3MpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmxvY2tOdW1iZXIsIHRlc3REYXRhLnRlc3RuZXRCbG9jay5ibG9ja051bWJlcik7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5yZWZlcmVuY2VCbG9jaywgdGVzdERhdGEudGVzdG5ldEJsb2NrLmhhc2gpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZ2VuZXNpc0hhc2gsIGdlbmVzaXNIYXNoKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNwZWNWZXJzaW9uLCBzcGVjVmVyc2lvbik7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ub25jZSwgMCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50aXAsIDApO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udHJhbnNhY3Rpb25WZXJzaW9uLCB0eFZlcnNpb24pO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZXJhUGVyaW9kLCBiYXNlQ29pbi5TV0VFUF9UWE5fRFVSQVRJT04pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVG9rZW4gRW5hYmxlbWVudDonLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBoYXZlIGNvcnJlY3QgdG9rZW4gZW5hYmxlbWVudCBjb25maWcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjb25maWcgPSBiYXNlQ29pbi5nZXRUb2tlbkVuYWJsZW1lbnRDb25maWcoKTtcbiAgICAgIHNob3VsZC5leGlzdChjb25maWcpO1xuICAgICAgY29uZmlnLnJlcXVpcmVzVG9rZW5FbmFibGVtZW50LnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIGNvbmZpZy5zdXBwb3J0c011bHRpcGxlVG9rZW5FbmFibGVtZW50cy5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSB3YWxsZXQgdHlwZSBmb3IgdG9rZW4gZW5hYmxlbWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IGJhc2VDb2luLmdldFRva2VuRW5hYmxlbWVudENvbmZpZygpO1xuICAgICAgKCgpID0+IGNvbmZpZy52YWxpZGF0ZVdhbGxldCgnY3VzdG9kaWFsJykpLnNob3VsZC5ub3QudGhyb3coKTtcbiAgICAgICgoKSA9PiBjb25maWcudmFsaWRhdGVXYWxsZXQoJ2hvdCcpKS5zaG91bGQudGhyb3coXG4gICAgICAgIC9Ub2tlbiBlbmFibGVtZW50IGZvciBQb2x5bWVzaCBcXChwb2x5eFxcKSBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgY3VzdG9kaWFsIHdhbGxldHMvXG4gICAgICApO1xuICAgICAgKCgpID0+IGNvbmZpZy52YWxpZGF0ZVdhbGxldCgnY29sZCcpKS5zaG91bGQudGhyb3coXG4gICAgICAgIC9Ub2tlbiBlbmFibGVtZW50IGZvciBQb2x5bWVzaCBcXChwb2x5eFxcKSBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgY3VzdG9kaWFsIHdhbGxldHMvXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndmVyaWZ5VHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHJhbnNmZXJUbyA9ICc1RjhqeEtFODFHaEZycGh5Zk1GcjVVamVBejV3UzRBYVpGbWVGUG5mOHdUZXRENzInO1xuICAgIGNvbnN0IHRyYW5zZmVyQW1vdW50ID0gJzIwMDAwMDAwMDAnO1xuICAgIGNvbnN0IHdyb25nQWRkcmVzcyA9ICc1R2hiQzZuMnBVRnJYOThEd3lQaXQ2N2ZCNUF3UXZWQ3daNGoySEtBN2E0ZFVLNHknO1xuXG4gICAgZGVzY3JpYmUoJ3RyYW5zZmVyIHRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGFkZHJlc3MgYW5kIGFtb3VudCBtYXRjaCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmFzZUNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXg6IHJhd1R4LnRyYW5zZmVyLnNpZ25lZCB9LFxuICAgICAgICAgIHR4UGFyYW1zOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IHRyYW5zZmVyVG8sIGFtb3VudDogdHJhbnNmZXJBbW91bnQgfV0gfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJlc3VsdC5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgdGhyb3cgVHhJbnRlbnRNaXNtYXRjaFJlY2lwaWVudEVycm9yIGZvciBhZGRyZXNzIG1pc21hdGNoJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBiYXNlQ29pblxuICAgICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4OiByYXdUeC50cmFuc2Zlci5zaWduZWQgfSxcbiAgICAgICAgICAgIHR4UGFyYW1zOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IHdyb25nQWRkcmVzcywgYW1vdW50OiB0cmFuc2ZlckFtb3VudCB9XSB9LFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoVHhJbnRlbnRNaXNtYXRjaFJlY2lwaWVudEVycm9yKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHRocm93IFR4SW50ZW50TWlzbWF0Y2hSZWNpcGllbnRFcnJvciBmb3IgYW1vdW50IG1pc21hdGNoJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBiYXNlQ29pblxuICAgICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4OiByYXdUeC50cmFuc2Zlci5zaWduZWQgfSxcbiAgICAgICAgICAgIHR4UGFyYW1zOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IHRyYW5zZmVyVG8sIGFtb3VudDogJzEnIH1dIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChUeEludGVudE1pc21hdGNoUmVjaXBpZW50RXJyb3IpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZ3VhcmQgY2FzZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIHRocm93IHdoZW4gdHhIZXggaXMgbWlzc2luZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgYmFzZUNvaW5cbiAgICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgICAgdHhQcmVidWlsZDoge30sXG4gICAgICAgICAgICB0eFBhcmFtczogeyByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiB0cmFuc2ZlclRvLCBhbW91bnQ6IHRyYW5zZmVyQW1vdW50IH1dIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnbWlzc2luZyB0eEhleCBpbiB0eFByZWJ1aWxkJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHJlY2lwaWVudHMgaGFzIG1vcmUgdGhhbiAxIGVudHJ5JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBiYXNlQ29pblxuICAgICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4OiByYXdUeC50cmFuc2Zlci5zaWduZWQgfSxcbiAgICAgICAgICAgIHR4UGFyYW1zOiB7XG4gICAgICAgICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICAgICAgICB7IGFkZHJlc3M6IHRyYW5zZmVyVG8sIGFtb3VudDogdHJhbnNmZXJBbW91bnQgfSxcbiAgICAgICAgICAgICAgICB7IGFkZHJlc3M6IHdyb25nQWRkcmVzcywgYW1vdW50OiB0cmFuc2ZlckFtb3VudCB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9zdXBwb3J0IHNlbmRpbmcgdG8gbW9yZSB0aGFuIDEgZGVzdGluYXRpb24gYWRkcmVzcy8pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgdGhyb3cgd2hlbiByZWNpcGllbnRzIGlzIGFuIGVtcHR5IGFycmF5JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBiYXNlQ29pblxuICAgICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4OiByYXdUeC50cmFuc2Zlci5zaWduZWQgfSxcbiAgICAgICAgICAgIHR4UGFyYW1zOiB7IHJlY2lwaWVudHM6IFtdIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnbWlzc2luZyByZWNpcGllbnRzIGluIHR4UGFyYW1zJyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCd0b2tlbiBlbmFibGVtZW50IChwcmVBcHByb3ZlQXNzZXQpIHRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSBmb3IgZW5hYmxldG9rZW4gdHlwZSB3aXRoIHJlY2lwaWVudHMgKHdhbGxldCByb290IGFkZHJlc3MpJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBidWlsZFRva2VuRW5hYmxlbWVudHMgc2V0cyByZWNpcGllbnRzWzBdLmFkZHJlc3MgPSB3YWxsZXQgcm9vdEFkZHJlc3MgYW5kIHR5cGUgPSAnZW5hYmxldG9rZW4nLlxuICAgICAgICAvLyB2ZXJpZnlUcmFuc2FjdGlvbiBtdXN0IHNob3J0LWNpcmN1aXQgYmVmb3JlIHRoZSBfdG8gY2hlY2sgc2luY2UgcHJlQXBwcm92ZUFzc2V0IGhhcyBubyBkZXN0aW5hdGlvbi5cbiAgICAgICAgY29uc3Qgd2FsbGV0QWRkcmVzcyA9ICc1RjhqeEtFODFHaEZycGh5Zk1GcjVVamVBejV3UzRBYVpGbWVGUG5mOHdUZXRENzInO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiYXNlQ29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleDogcmF3VHgucHJlQXBwcm92ZUFzc2V0LnNpZ25lZCB9LFxuICAgICAgICAgIHR4UGFyYW1zOiB7XG4gICAgICAgICAgICB0eXBlOiAnZW5hYmxldG9rZW4nLFxuICAgICAgICAgICAgcmVjaXBpZW50czogW3sgYWRkcmVzczogd2FsbGV0QWRkcmVzcywgYW1vdW50OiAnMCcsIHRva2VuTmFtZTogJ3Rwb2x5eDpzb21ldG9rZW4nIH1dLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICByZXN1bHQuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIGZvciBlbmFibGV0b2tlbiB0eXBlIHdpdGggbm8gcmVjaXBpZW50cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmFzZUNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXg6IHJhd1R4LnByZUFwcHJvdmVBc3NldC5zaWduZWQgfSxcbiAgICAgICAgICB0eFBhcmFtczogeyB0eXBlOiAnZW5hYmxldG9rZW4nIH0sXG4gICAgICAgIH0pO1xuICAgICAgICByZXN1bHQuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3Y4IHRyYW5zZmVyIHdpdGggY29pblNwZWNpZmljLm1hdGVyaWFsJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdjhBbW91bnQgPSAnMTAwMDAwMCc7XG4gICAgICBjb25zdCB2OFJlY2VpdmVyID0gYWNjb3VudHMuYWNjb3VudDI7XG4gICAgICBjb25zdCB2OFNlbmRlciA9IGFjY291bnRzLmFjY291bnQxO1xuICAgICAgbGV0IHY4U2lnbmVkVHhIZXg6IHN0cmluZztcblxuICAgICAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gQnVpbGQgYSBzaWduZWQgdjggdHJhbnNmZXIgdHggdXNpbmcgdGVzdG5ldFY4TWF0ZXJpYWwuXG4gICAgICAgIC8vIFRoZSBzZXJ2ZXIgZW1iZWRzIHRoaXMgbWF0ZXJpYWwgaW4gY29pblNwZWNpZmljIGR1cmluZyBwcmVidWlsZCBzbyB0aGF0XG4gICAgICAgIC8vIHZlcmlmeVRyYW5zYWN0aW9uIGNhbiBkZWNvZGUgdHhIZXggYnVpbHQgYWdhaW5zdCBhIGNoYWluIHNwZWMgbmV3ZXIgdGhhblxuICAgICAgICAvLyB0aGUgU0RLJ3MgaGFyZGNvZGVkIHY3IG1hdGVyaWFsIChDRUNITy0xNDcxKS5cbiAgICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBWOFRyYW5zZmVyQnVpbGRlcihjb2lucy5nZXQoJ3Rwb2x5eCcpKVxuICAgICAgICAgIC5hbW91bnQodjhBbW91bnQpXG4gICAgICAgICAgLnRvKHsgYWRkcmVzczogdjhSZWNlaXZlci5hZGRyZXNzIH0pXG4gICAgICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IHY4U2VuZGVyLmFkZHJlc3MgfSlcbiAgICAgICAgICAubWVtbygnMCcpXG4gICAgICAgICAgLnZhbGlkaXR5KHsgZmlyc3RWYWxpZDogMzkzMywgbWF4RHVyYXRpb246IDY0IH0pXG4gICAgICAgICAgLnJlZmVyZW5jZUJsb2NrKCcweDE0OTc5OWJjOTYwMmNiNWNmMjAxZjM0MjVmYjhkMjUzYjJkNGU2MWZjMTE5ZGNhYjMyNDlmMzA3ZjU5NDc1NGQnKVxuICAgICAgICAgIC5zZXF1ZW5jZUlkKHsgbmFtZTogJ05vbmNlJywga2V5d29yZDogJ25vbmNlJywgdmFsdWU6IDEgfSlcbiAgICAgICAgICAuZmVlKHsgYW1vdW50OiAwLCB0eXBlOiAndGlwJyB9KTtcbiAgICAgICAgYnVpbGRlci5hZGRTaWduYXR1cmUoeyBwdWI6IHY4U2VuZGVyLnB1YmxpY0tleSB9LCBCdWZmZXIuZnJvbShtb2NrVHNzU2lnbmF0dXJlLCAnaGV4JykpO1xuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgdjhTaWduZWRUeEhleCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3ZlcmlmaWVzIGEgdjggdHJhbnNmZXIgd2hlbiBjb2luU3BlY2lmaWMubWF0ZXJpYWwgaXMgcHJvdmlkZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJhc2VDb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgICAgICB0eEhleDogdjhTaWduZWRUeEhleCxcbiAgICAgICAgICAgIGNvaW5TcGVjaWZpYzogeyBtYXRlcmlhbDogdGVzdG5ldFY4TWF0ZXJpYWwgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHR4UGFyYW1zOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IHY4UmVjZWl2ZXIuYWRkcmVzcywgYW1vdW50OiB2OEFtb3VudCB9XSB9LFxuICAgICAgICB9KTtcbiAgICAgICAgcmVzdWx0LnNob3VsZC5iZS50cnVlKCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Rocm93cyBUeEludGVudE1pc21hdGNoUmVjaXBpZW50RXJyb3IgZm9yIGFkZHJlc3MgbWlzbWF0Y2ggb24gdjggdHJhbnNmZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IGJhc2VDb2luXG4gICAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICAgICAgdHhIZXg6IHY4U2lnbmVkVHhIZXgsXG4gICAgICAgICAgICAgIGNvaW5TcGVjaWZpYzogeyBtYXRlcmlhbDogdGVzdG5ldFY4TWF0ZXJpYWwgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0eFBhcmFtczogeyByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiB3cm9uZ0FkZHJlc3MsIGFtb3VudDogdjhBbW91bnQgfV0gfSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFR4SW50ZW50TWlzbWF0Y2hSZWNpcGllbnRFcnJvcik7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Rocm93cyBUeEludGVudE1pc21hdGNoUmVjaXBpZW50RXJyb3IgZm9yIGFtb3VudCBtaXNtYXRjaCBvbiB2OCB0cmFuc2ZlcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgYmFzZUNvaW5cbiAgICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICAgICAgICB0eEhleDogdjhTaWduZWRUeEhleCxcbiAgICAgICAgICAgICAgY29pblNwZWNpZmljOiB7IG1hdGVyaWFsOiB0ZXN0bmV0VjhNYXRlcmlhbCB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHR4UGFyYW1zOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IHY4UmVjZWl2ZXIuYWRkcmVzcywgYW1vdW50OiAnMScgfV0gfSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFR4SW50ZW50TWlzbWF0Y2hSZWNpcGllbnRFcnJvcik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
464
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9seXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvcG9seXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsOENBQTBEO0FBQzFELDRDQUFtRDtBQUNuRCxtQ0FBMEM7QUFDMUMsdURBQXNGO0FBQ3RGLGdFQUF3QztBQUN4Qyw0Q0FBdUM7QUFDdkMsNkNBQStCO0FBQy9CLGdFQUFrRDtBQUNsRCxpQ0FBa0M7QUFDbEMsNENBQXNHO0FBQ3RHLDhDQUEwRztBQUMxRyx1Q0FBbUU7QUFDbkUsbURBQXdEO0FBQ3hELG9EQUE2QztBQUU3QyxRQUFRLENBQUMsUUFBUSxFQUFFO0lBQ2pCLElBQUksS0FBbUIsQ0FBQztJQUN4QixJQUFJLFFBQVEsQ0FBQztJQUViLE1BQU0sQ0FBQztRQUNMLEtBQUssR0FBRyxvQkFBUyxDQUFDLFFBQVEsQ0FBQyxrQkFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDdEQsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsV0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2xELEtBQUssQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLFlBQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNwRCxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMzQixRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQVcsQ0FBQztJQUM1QyxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQywwQkFBMEIsRUFBRTtRQUNuQyxFQUFFLENBQUMsa0RBQWtELEVBQUU7WUFDckQsNkNBQTZDO1lBQzdDLGdDQUFvQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdEMsaUNBQXFCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFF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QyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDekYsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVFLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM5RSxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3hGLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyRixRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3JGLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzVGLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pGLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUN2RixrREFBa0QsQ0FDbkQsQ0FBQztZQUNGLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzlHLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3RHLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzdGLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFGLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENB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LENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMxQixDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQywyRUFBMkUsRUFBRSxLQUFLO2dCQUNuRixNQUFNLFFBQVE7cUJBQ1gsaUJBQWlCLENBQUM7b0JBQ2pCLFVBQVUsRUFBRTt3QkFDVixLQUFLLEVBQUUsYUFBYTt3QkFDcEIsWUFBWSxFQUFFLEVBQUUsUUFBUSxFQUFFLDZCQUFpQixFQUFFO3FCQUM5QztvQkFDRCxRQUFRLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUU7aUJBQ3hFLENBQUM7cUJBQ0QsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMseUNBQThCLENBQUMsQ0FBQztZQUM1RCxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQywwRUFBMEUsRUFBRSxLQUFLO2dCQUNsRixNQUFNLFFBQVE7cUJBQ1gsaUJBQWlCLENBQUM7b0JBQ2pCLFVBQVUsRUFBRTt3QkFDVixLQUFLLEVBQUUsYUFBYTt3QkFDcEIsWUFBWSxFQUFFLEVBQUUsUUFBUSxFQUFFLDZCQUFpQixFQUFFO3FCQUM5QztvQkFDRCxRQUFRLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFO2lCQUN6RSxDQUFDO3FCQUNELE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLHlDQUE4QixDQUFDLENBQUM7WUFDNUQsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBUZXN0Qml0R28sIFRlc3RCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby9zZGstdGVzdCc7XG5pbXBvcnQgeyBCaXRHb0FQSSwgZW5jcnlwdCB9IGZyb20gJ0BiaXRnby9zZGstYXBpJztcbmltcG9ydCB7IFBvbHl4LCBUcG9seXggfSBmcm9tICcuLi8uLi9zcmMnO1xuaW1wb3J0IHsgUE9MWVhfQUREUkVTU19GT1JNQVQsIFRQT0xZWF9BRERSRVNTX0ZPUk1BVCB9IGZyb20gJy4uLy4uL3NyYy9saWIvY29uc3RhbnRzJztcbmltcG9ydCB1dGlscyBmcm9tICcuLi8uLi9zcmMvbGliL3V0aWxzJztcbmltcG9ydCB7IGNvaW5zIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0ICogYXMgc2lub24gZnJvbSAnc2lub24nO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vcmVzb3VyY2VzL3dyd1VzZXJzJztcbmltcG9ydCB7IGFmdGVyRWFjaCB9IGZyb20gJ21vY2hhJztcbmltcG9ydCB7IGdlbmVzaXNIYXNoLCBzcGVjVmVyc2lvbiwgdHhWZXJzaW9uLCByYXdUeCwgYWNjb3VudHMsIG1vY2tUc3NTaWduYXR1cmUgfSBmcm9tICcuLi9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgRUREU0FNZXRob2RzLCBNUENSZWNvdmVyeU9wdGlvbnMsIE1QQ1R4LCBUeEludGVudE1pc21hdGNoUmVjaXBpZW50RXJyb3IgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgVHJhbnNmZXJCdWlsZGVyLCBWOFRyYW5zZmVyQnVpbGRlciB9IGZyb20gJy4uLy4uL3NyYy9saWInO1xuaW1wb3J0IHsgdGVzdG5ldFY4TWF0ZXJpYWwgfSBmcm9tICcuLi8uLi9zcmMvcmVzb3VyY2VzJztcbmltcG9ydCB7IE1QU1V0aWwgfSBmcm9tICdAYml0Z28vc2RrLWxpYi1tcGMnO1xuXG5kZXNjcmliZSgnUG9seXg6JywgZnVuY3Rpb24gKCkge1xuICBsZXQgYml0Z286IFRlc3RCaXRHb0FQSTtcbiAgbGV0IGJhc2VDb2luO1xuXG4gIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHsgZW52OiAnbW9jaycgfSk7XG4gICAgYml0Z28uc2FmZVJlZ2lzdGVyKCdwb2x5eCcsIFBvbHl4LmNyZWF0ZUluc3RhbmNlKTtcbiAgICBiaXRnby5zYWZlUmVnaXN0ZXIoJ3Rwb2x5eCcsIFRwb2x5eC5jcmVhdGVJbnN0YW5jZSk7XG4gICAgYml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gICAgYmFzZUNvaW4gPSBiaXRnby5jb2luKCd0cG9seXgnKSBhcyBUcG9seXg7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdBZGRyZXNzIEZvcm1hdCBDb25zdGFudHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBoYXZlIHRoZSBjb3JyZWN0IGFkZHJlc3MgZm9ybWF0IGNvbnN0YW50cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFZlcmlmeSB0aGUgY29uc3RhbnRzIGFyZSBkZWZpbmVkIGNvcnJlY3RseVxuICAgICAgUE9MWVhfQUREUkVTU19GT1JNQVQuc2hvdWxkLmVxdWFsKDEyKTtcbiAgICAgIFRQT0xZWF9BRERSRVNTX0ZPUk1BVC5zaG91bGQuZXF1YWwoNDIpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnUmVjb3ZlciBUcmFuc2FjdGlvbnM6JywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNhbmRCb3ggPSBzaW5vbi5jcmVhdGVTYW5kYm94KCk7XG4gICAgY29uc3QgcmVjb3ZlcnlEZXN0aW5hdGlvbiA9ICc1SDU2ZjMxaFNZR0NSVjNVUmpRSHYyQ2M0WlNrSk5IVE04TUtHdGtrVjZoekNxTjcnO1xuICAgIGNvbnN0IG5vbmNlID0gMDtcbiAgICBsZXQgYWNjb3VudEluZm9DQjtcbiAgICBsZXQgaGVhZGVySW5mb0NCO1xuICAgIGxldCBnZXRGZWVDQjtcbiAgICBsZXQgZ2V0TWF0ZXJpYWxDQjtcblxuICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgYWNjb3VudEluZm9DQiA9IHNhbmRCb3guc3R1YihQb2x5eC5wcm90b3R5cGUsICdnZXRBY2NvdW50SW5mbycgYXMga2V5b2YgUG9seXgpO1xuICAgICAgaGVhZGVySW5mb0NCID0gc2FuZEJveC5zdHViKFBvbHl4LnByb3RvdHlwZSwgJ2dldEhlYWRlckluZm8nIGFzIGtleW9mIFBvbHl4KTtcbiAgICAgIGdldEZlZUNCID0gc2FuZEJveC5zdHViKFBvbHl4LnByb3RvdHlwZSwgJ2dldEZlZScgYXMga2V5b2YgUG9seXgpO1xuICAgICAgZ2V0TWF0ZXJpYWxDQiA9IHNhbmRCb3guc3R1YihQb2x5eC5wcm90b3R5cGUsICdnZXRNYXRlcmlhbCcgYXMga2V5b2YgUG9seXgpO1xuICAgICAgZ2V0TWF0ZXJpYWxDQi5yZXNvbHZlcyh1dGlscy5nZXRNYXRlcmlhbChjb2lucy5nZXQoJ3Rwb2x5eCcpLm5ldHdvcmsudHlwZSkpO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHNhbmRCb3gucmVzdG9yZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSB1bnNpZ25lZCBzd2VlcCBjb3JyZWN0bHknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhY2NvdW50SW5mb0NCXG4gICAgICAgIC53aXRoQXJncyh0ZXN0RGF0YS51bnNpZ25lZFN3ZWVwVXNlci53YWxsZXRBZGRyZXNzKVxuICAgICAgICAucmVzb2x2ZXMoeyBub25jZTogMCwgZnJlZUJhbGFuY2U6IDEwMDAwNzAwMDAwMCB9KTtcbiAgICAgIGhlYWRlckluZm9DQi5yZXNvbHZlcyh7XG4gICAgICAgIGhlYWRlck51bWJlcjogdGVzdERhdGEudGVzdG5ldEJsb2NrLmJsb2NrTnVtYmVyLFxuICAgICAgICBoZWFkZXJIYXNoOiB0ZXN0RGF0YS50ZXN0bmV0QmxvY2suaGFzaCxcbiAgICAgIH0pO1xuICAgICAgZ2V0RmVlQ0Iud2l0aEFyZ3MocmVjb3ZlcnlEZXN0aW5hdGlvbiwgdGVzdERhdGEudW5zaWduZWRTd2VlcFVzZXIud2FsbGV0QWRkcmVzcywgMTAwMDA3MDAwMDAwKS5yZXNvbHZlcyg3NDQwMSk7XG5cbiAgICAgIGNvbnN0IGNvbW1vbktleUNoYWluID0gdGVzdERhdGEudW5zaWduZWRTd2VlcFVzZXIuYml0Z29LZXk7XG5cbiAgICAgIGNvbnN0IHVuc2lnbmVkID0gYXdhaXQgYmFzZUNvaW4ucmVjb3Zlcih7IGJpdGdvS2V5OiBjb21tb25LZXlDaGFpbiwgcmVjb3ZlcnlEZXN0aW5hdGlvbiB9KTtcblxuICAgICAgdW5zaWduZWQudHhSZXF1ZXN0cy5zaG91bGQubm90LmJlLnVuZGVmaW5lZCgpO1xuICAgICAgdW5zaWduZWQudHhSZXF1ZXN0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgdW5zaWduZWQudHhSZXF1ZXN0c1swXS50cmFuc2FjdGlvbnMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgIHVuc2lnbmVkLnR4UmVxdWVzdHNbMF0ud2FsbGV0Q29pbi5zaG91bGQuZXF1YWwoJ3Rwb2x5eCcpO1xuICAgICAgdW5zaWduZWQudHhSZXF1ZXN0c1swXS50cmFuc2FjdGlvbnNbMF0udW5zaWduZWRUeC5zaG91bGQubm90LmJlLnVuZGVmaW5lZCgpO1xuICAgICAgdW5zaWduZWQudHhSZXF1ZXN0c1swXS50cmFuc2FjdGlvbnNbMF0udW5zaWduZWRUeC5zZXJpYWxpemVkVHguc2hvdWxkLm5vdC5iZS51bmRlZmluZWQoKTtcbiAgICAgIHVuc2lnbmVkLnR4UmVxdWVzdHNbMF0udHJhbnNhY3Rpb25zWzBdLnVuc2lnbmVkVHguc2NhbkluZGV4LnNob3VsZC5lcXVhbCgwKTtcbiAgICAgIHVuc2lnbmVkLnR4UmVxdWVzdHNbMF0udHJhbnNhY3Rpb25zWzBdLnVuc2lnbmVkVHguY29pbi5zaG91bGQuZXF1YWwoJ3Rwb2x5eCcpO1xuICAgICAgdW5zaWduZWQudHhSZXF1ZXN0c1swXS50cmFuc2FjdGlvbnNbMF0udW5zaWduZWRUeC5zaWduYWJsZUhleC5zaG91bGQubm90LmJlLnVuZGVmaW5lZCgpO1xuICAgICAgdW5zaWduZWQudHhSZXF1ZXN0c1swXS50cmFuc2FjdGlvbnNbMF0udW5zaWduZWRUeC5kZXJpdmF0aW9uUGF0aC5zaG91bGQuZXF1YWwoJ20vMCcpO1xuICAgICAgdW5zaWduZWQudHhSZXF1ZXN0c1swXS50cmFuc2FjdGlvbnNbMF0udW5zaWduZWRUeC5wYXJzZWRUeC5zaG91bGQubm90LmJlLnVuZGVmaW5lZCgpO1xuICAgICAgdW5zaWduZWQudHhSZXF1ZXN0c1swXS50cmFuc2FjdGlvbnNbMF0udW5zaWduZWRUeC5wYXJzZWRUeC5pbnB1dHMuc2hvdWxkLm5vdC5iZS51bmRlZmluZWQoKTtcbiAgICAgIHVuc2lnbmVkLnR4UmVxdWVzdHNbMF0udHJhbnNhY3Rpb25zWzBdLnVuc2lnbmVkVHgucGFyc2VkVHguaW5wdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICB1bnNpZ25lZC50eFJlcXVlc3RzWzBdLnRyYW5zYWN0aW9uc1swXS51bnNpZ25lZFR4LnBhcnNlZFR4LmlucHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbChcbiAgICAgICAgJzVEblpRcWJ4dEIzQ1drTGdmQTZ3cHFka0NkOUJxN0FYNDlScExQSndXOW16b1Q3cydcbiAgICAgICk7XG4gICAgICB1bnNpZ25lZC50eFJlcXVlc3RzWzBdLnRyYW5zYWN0aW9uc1swXS51bnNpZ25lZFR4LnBhcnNlZFR4LmlucHV0c1swXS52YWx1ZVN0cmluZy5zaG91bGQuZXF1YWwoJzEwMDAwNjI1NTk5MCcpO1xuICAgICAgdW5zaWduZWQudHhSZXF1ZXN0c1swXS50cmFuc2FjdGlvbnNbMF0udW5zaWduZWRUeC5wYXJzZWRUeC5pbnB1dHNbMF0udmFsdWUuc2hvdWxkLmVxdWFsKDEwMDAwNjI1NTk5MCk7XG4gICAgICB1bnNpZ25lZC50eFJlcXVlc3RzWzBdLnRyYW5zYWN0aW9uc1swXS51bnNpZ25lZFR4LnBhcnNlZFR4Lm91dHB1dHMuc2hvdWxkLm5vdC5iZS51bmRlZmluZWQoKTtcbiAgICAgIHVuc2lnbmVkLnR4UmVxdWVzdHNbMF0udHJhbnNhY3Rpb25zWzBdLnVuc2lnbmVkVHgucGFyc2VkVHgub3V0cHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgdW5zaWduZWQudHhSZXF1ZXN0c1swXS50cmFuc2FjdGlvbnNbMF0udW5zaWduZWRUeC5wYXJzZWRUeC5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKFxuICAgICAgICAnNUg1NmYzMWhTWUdDUlYzVVJqUUh2MkNjNFpTa0pOSFRNOE1LR3Rra1Y2aHpDcU43J1xuICAgICAgKTtcbiAgICAgIHVuc2lnbmVkLnR4UmVxdWVzdHNbMF0udHJhbnNhY3Rpb25zWzBdLnVuc2lnbmVkVHgucGFyc2VkVHgub3V0cHV0c1swXS52YWx1ZVN0cmluZy5zaG91bGQuZXF1YWwoJzEwMDAwNjI1NTk5MCcpO1xuICAgICAgdW5zaWduZWQudHhSZXF1ZXN0c1swXS50cmFuc2FjdGlvbnNbMF0udW5zaWduZWRUeC5wYXJzZWRUeC5vdXRwdXRzWzBdLmNvaW5OYW1lLnNob3VsZC5lcXVhbCgndHBvbHl4Jyk7XG4gICAgICB1bnNpZ25lZC50eFJlcXVlc3RzWzBdLnRyYW5zYWN0aW9uc1swXS51bnNpZ25lZFR4LnBhcnNlZFR4LnR5cGUuc2hvdWxkLmVxdWFsKCcnKTtcbiAgICAgIHVuc2lnbmVkLnR4UmVxdWVzdHNbMF0udHJhbnNhY3Rpb25zWzBdLnVuc2lnbmVkVHguZmVlSW5mby5zaG91bGQubm90LmJlLnVuZGVmaW5lZCgpO1xuICAgICAgdW5zaWduZWQudHhSZXF1ZXN0c1swXS50cmFuc2FjdGlvbnNbMF0udW5zaWduZWRUeC5mZWVJbmZvLmZlZS5zaG91bGQuZXF1YWwoMCk7XG4gICAgICB1bnNpZ25lZC50eFJlcXVlc3RzWzBdLnRyYW5zYWN0aW9uc1swXS51bnNpZ25lZFR4LmZlZUluZm8uZmVlU3RyaW5nLnNob3VsZC5lcXVhbCgnMCcpO1xuICAgICAgdW5zaWduZWQudHhSZXF1ZXN0c1swXS50cmFuc2FjdGlvbnNbMF0udW5zaWduZWRUeC5jb2luU3BlY2lmaWMuc2hvdWxkLm5vdC5iZS51bmRlZmluZWQoKTtcbiAgICAgIHVuc2lnbmVkLnR4UmVxdWVzdHNbMF0udHJhbnNhY3Rpb25zWzBdLnVuc2lnbmVkVHguY29pblNwZWNpZmljLmZpcnN0VmFsaWQuc2hvdWxkLm5vdC5iZS51bmRlZmluZWQoKTtcbiAgICAgIHVuc2lnbmVkLnR4UmVxdWVzdHNbMF0udHJhbnNhY3Rpb25zWzBdLnVuc2lnbmVkVHguY29pblNwZWNpZmljLm1heER1cmF0aW9uLnNob3VsZC5lcXVhbCgyNDAwKTtcbiAgICAgIHVuc2lnbmVkLnR4UmVxdWVzdHNbMF0udHJhbnNhY3Rpb25zWzBdLnVuc2lnbmVkVHguY29pblNwZWNpZmljLmNvbW1vbktleWNoYWluLnNob3VsZC5lcXVhbChcbiAgICAgICAgJzk3ZDlkYThiZjU0NGQwN2YzYzdhZThlZTA2YmIxMmE2M2Y3NDQ3OGQwYzQ2MTIwMWFiOTQ0MjFhOWM4MWQ1YjM3OTU1M2YwMzMyZGFhYTg1Y2I4YzY1ZTFmZTdlNjkwN2M2MjI2OGMwMDgxMmIwOGE0ZTEzNjExNzhlMzA0ZGRiJ1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVjb3ZlciBhIHR4IGZvciBub24tYml0Z28gcmVjb3ZlcmllcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFjY291bnRJbmZvQ0Iud2l0aEFyZ3ModGVzdERhdGEud3J3VXNlci53YWxsZXRBZGRyZXNzKS5yZXNvbHZlcyh7IG5vbmNlOiAwLCBmcmVlQmFsYW5jZTogMTAwMDA3MDAwMDAwIH0pO1xuICAgICAgaGVhZGVySW5mb0NCLnJlc29sdmVzKHtcbiAgICAgICAgaGVhZGVyTnVtYmVyOiB0ZXN0RGF0YS50ZXN0bmV0QmxvY2suYmxvY2tOdW1iZXIsXG4gICAgICAgIGhlYWRlckhhc2g6IHRlc3REYXRhLnRlc3RuZXRCbG9jay5oYXNoLFxuICAgICAgfSk7XG4gICAgICBnZXRGZWVDQi53aXRoQXJncyhyZWNvdmVyeURlc3RpbmF0aW9uLCB0ZXN0RGF0YS53cndVc2VyLndhbGxldEFkZHJlc3MsIDEwMDAwNzAwMDAwMCkucmVzb2x2ZXMoNzQ0MDEpO1xuXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBiYXNlQ29pbi5yZWNvdmVyKHtcbiAgICAgICAgdXNlcktleTogdGVzdERhdGEud3J3VXNlci51c2VyS2V5LFxuICAgICAgICBiYWNrdXBLZXk6IHRlc3REYXRhLndyd1VzZXIuYmFja3VwS2V5LFxuICAgICAgICBiaXRnb0tleTogdGVzdERhdGEud3J3VXNlci5iaXRnb0tleSxcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogdGVzdERhdGEud3J3VXNlci53YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uOiByZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgfSk7XG5cbiAgICAgIHJlcy5zaG91bGQubm90LmJlLmVtcHR5KCk7XG4gICAgICByZXMuc2hvdWxkLmhhc093blByb3BlcnR5KCdzZXJpYWxpemVkVHgnKTtcbiAgICAgIHJlcy5zaG91bGQuaGFzT3duUHJvcGVydHkoJ3NjYW5JbmRleCcpO1xuXG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBiYXNlQ29pbi5nZXRCdWlsZGVyKCkuZnJvbShyZXMuc2VyaWFsaXplZFR4KTtcbiAgICAgIHR4QnVpbGRlclxuICAgICAgICAudmFsaWRpdHkoe1xuICAgICAgICAgIGZpcnN0VmFsaWQ6IHRlc3REYXRhLnRlc3RuZXRCbG9jay5ibG9ja051bWJlcixcbiAgICAgICAgICBtYXhEdXJhdGlvbjogYmFzZUNvaW4uU1dFRVBfVFhOX0RVUkFUSU9OLFxuICAgICAgICB9KVxuICAgICAgICAucmVmZXJlbmNlQmxvY2sodGVzdERhdGEudGVzdG5ldEJsb2NrLmhhc2gpO1xuXG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5zZW5kZXIsIHRlc3REYXRhLndyd1VzZXIud2FsbGV0QWRkcmVzcyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ibG9ja051bWJlciwgdGVzdERhdGEudGVzdG5ldEJsb2NrLmJsb2NrTnVtYmVyKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnJlZmVyZW5jZUJsb2NrLCB0ZXN0RGF0YS50ZXN0bmV0QmxvY2suaGFzaCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5nZW5lc2lzSGFzaCwgZ2VuZXNpc0hhc2gpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc3BlY1ZlcnNpb24sIHNwZWNWZXJzaW9uKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLm5vbmNlLCBub25jZSk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50aXAsIDApO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udHJhbnNhY3Rpb25WZXJzaW9uLCB0eFZlcnNpb24pO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZXJhUGVyaW9kLCBiYXNlQ29pbi5TV0VFUF9UWE5fRFVSQVRJT04pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWNvdmVyIGEgdHhuIGZvciB1bnNpZ25lZC1zd2VlcCByZWNvdmVyaWVzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYWNjb3VudEluZm9DQlxuICAgICAgICAud2l0aEFyZ3ModGVzdERhdGEudW5zaWduZWRTd2VlcFVzZXIud2FsbGV0QWRkcmVzcylcbiAgICAgICAgLnJlc29sdmVzKHsgbm9uY2U6IDAsIGZyZWVCYWxhbmNlOiAxMDAwMDcwMDAwMDAgfSk7XG4gICAgICBoZWFkZXJJbmZvQ0IucmVzb2x2ZXMoe1xuICAgICAgICBoZWFkZXJOdW1iZXI6IHRlc3REYXRhLnRlc3RuZXRCbG9jay5ibG9ja051bWJlcixcbiAgICAgICAgaGVhZGVySGFzaDogdGVzdERhdGEudGVzdG5ldEJsb2NrLmhhc2gsXG4gICAgICB9KTtcbiAgICAgIGdldEZlZUNCLndpdGhBcmdzKHJlY292ZXJ5RGVzdGluYXRpb24sIHRlc3REYXRhLnVuc2lnbmVkU3dlZXBVc2VyLndhbGxldEFkZHJlc3MsIDEwMDAwNzAwMDAwMCkucmVzb2x2ZXMoNzQ0MDEpO1xuXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBiYXNlQ29pbi5yZWNvdmVyKHtcbiAgICAgICAgYml0Z29LZXk6IHRlc3REYXRhLnVuc2lnbmVkU3dlZXBVc2VyLmJpdGdvS2V5LFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uOiByZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgfSk7XG5cbiAgICAgIHJlcy5zaG91bGQubm90LmJlLmVtcHR5KCk7XG4gICAgICByZXMudHhSZXF1ZXN0c1swXS50cmFuc2FjdGlvbnNbMF0udW5zaWduZWRUeC5zaG91bGQuaGFzT3duUHJvcGVydHkoJ3NlcmlhbGl6ZWRUeCcpO1xuICAgICAgcmVzLnR4UmVxdWVzdHNbMF0udHJhbnNhY3Rpb25zWzBdLnVuc2lnbmVkVHguc2hvdWxkLmhhc093blByb3BlcnR5KCdzY2FuSW5kZXgnKTtcblxuICAgICAgY29uc3QgdHhCdWlsZGVyID0gYmFzZUNvaW4uZ2V0QnVpbGRlcigpLmZyb20ocmVzLnR4UmVxdWVzdHNbMF0udHJhbnNhY3Rpb25zWzBdLnVuc2lnbmVkVHguc2VyaWFsaXplZFR4KTtcbiAgICAgIHR4QnVpbGRlclxuICAgICAgICAudmFsaWRpdHkoe1xuICAgICAgICAgIGZpcnN0VmFsaWQ6IHRlc3REYXRhLnRlc3RuZXRCbG9jay5ibG9ja051bWJlcixcbiAgICAgICAgICBtYXhEdXJhdGlvbjogYmFzZUNvaW4uU1dFRVBfVFhOX0RVUkFUSU9OLFxuICAgICAgICB9KVxuICAgICAgICAucmVmZXJlbmNlQmxvY2sodGVzdERhdGEudGVzdG5ldEJsb2NrLmhhc2gpXG4gICAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiB0ZXN0RGF0YS51bnNpZ25lZFN3ZWVwVXNlci53YWxsZXRBZGRyZXNzIH0pO1xuXG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5zZW5kZXIsIHRlc3REYXRhLnVuc2lnbmVkU3dlZXBVc2VyLndhbGxldEFkZHJlc3MpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmxvY2tOdW1iZXIsIHRlc3REYXRhLnRlc3RuZXRCbG9jay5ibG9ja051bWJlcik7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5yZWZlcmVuY2VCbG9jaywgdGVzdERhdGEudGVzdG5ldEJsb2NrLmhhc2gpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZ2VuZXNpc0hhc2gsIGdlbmVzaXNIYXNoKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNwZWNWZXJzaW9uLCBzcGVjVmVyc2lvbik7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ub25jZSwgMCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50aXAsIDApO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udHJhbnNhY3Rpb25WZXJzaW9uLCB0eFZlcnNpb24pO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZXJhUGVyaW9kLCBiYXNlQ29pbi5TV0VFUF9UWE5fRFVSQVRJT04pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ01QQ3YyIHNpZ25lZCByZWNvdmVyeScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldFBhc3NwaHJhc2UgPSAndGVzdC1wYXNzcGhyYXNlLW1wY3YyJztcbiAgICAgIGxldCBtcGNWMlVzZXJLZXk6IHN0cmluZztcbiAgICAgIGxldCBtcGNWMkJhY2t1cEtleTogc3RyaW5nO1xuICAgICAgbGV0IG1wY1YyQ29tbW9uS2V5Q2hhaW46IHN0cmluZztcbiAgICAgIGxldCBtcGNWMlJlY292ZXJQYXJhbXM6IE1QQ1JlY292ZXJ5T3B0aW9ucztcblxuICAgICAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgW3VzZXJEa2csIGJhY2t1cERrZ10gPSBhd2FpdCBNUFNVdGlsLmdlbmVyYXRlRWREc2FES0dLZXlTaGFyZXMoKTtcbiAgICAgICAgbXBjVjJDb21tb25LZXlDaGFpbiA9IHVzZXJEa2cuZ2V0Q29tbW9uS2V5Y2hhaW4oKTtcbiAgICAgICAgbXBjVjJVc2VyS2V5ID0gYXdhaXQgZW5jcnlwdCh3YWxsZXRQYXNzcGhyYXNlLCB1c2VyRGtnLmdldFJlZHVjZWRLZXlTaGFyZSgpLnRvU3RyaW5nKCdiYXNlNjQnKSk7XG4gICAgICAgIG1wY1YyQmFja3VwS2V5ID0gYXdhaXQgZW5jcnlwdCh3YWxsZXRQYXNzcGhyYXNlLCBiYWNrdXBEa2cuZ2V0UmVkdWNlZEtleVNoYXJlKCkudG9TdHJpbmcoJ2Jhc2U2NCcpKTtcblxuICAgICAgICBtcGNWMlJlY292ZXJQYXJhbXMgPSB7XG4gICAgICAgICAgdXNlcktleTogbXBjVjJVc2VyS2V5LFxuICAgICAgICAgIGJhY2t1cEtleTogbXBjVjJCYWNrdXBLZXksXG4gICAgICAgICAgYml0Z29LZXk6IG1wY1YyQ29tbW9uS2V5Q2hhaW4sXG4gICAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbixcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICB9O1xuICAgICAgfSk7XG5cbiAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBVc2UgdW5yZXN0cmljdGVkIHJlc29sdmVzIChub3QgLndpdGhBcmdzKSBzaW5jZSB0aGUgbWlzbWF0Y2hlZC1iaXRnb0tleSB0ZXN0XG4gICAgICAgIC8vIGRlcml2ZXMgYSBkaWZmZXJlbnQgc2VuZGVyIGFkZHJlc3MgdGhhbiBtcGNWMldhbGxldEFkZHJlc3MuXG4gICAgICAgIGFjY291bnRJbmZvQ0IucmVzb2x2ZXMoeyBub25jZTogMCwgZnJlZUJhbGFuY2U6IDEwMDAwNzAwMDAwMCB9KTtcbiAgICAgICAgaGVhZGVySW5mb0NCLnJlc29sdmVzKHtcbiAgICAgICAgICBoZWFkZXJOdW1iZXI6IHRlc3REYXRhLnRlc3RuZXRCbG9jay5ibG9ja051bWJlcixcbiAgICAgICAgICBoZWFkZXJIYXNoOiB0ZXN0RGF0YS50ZXN0bmV0QmxvY2suaGFzaCxcbiAgICAgICAgfSk7XG4gICAgICAgIGdldEZlZUNCLnJlc29sdmVzKDc0NDAxKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHJlY292ZXIgYSB0eCB1c2luZyBNUEN2MiBzaWduaW5nIG1hdGVyaWFsJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBnZXRUU1NTaWduYXR1cmVTcHkgPSBzYW5kQm94LnNweShFRERTQU1ldGhvZHMsICdnZXRUU1NTaWduYXR1cmUnKTtcbiAgICAgICAgY29uc3QgYWRkU2lnbmF0dXJlU3B5ID0gc2FuZEJveC5zcHkoVHJhbnNmZXJCdWlsZGVyLnByb3RvdHlwZSwgJ2FkZFNpZ25hdHVyZScpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IChhd2FpdCBiYXNlQ29pbi5yZWNvdmVyKG1wY1YyUmVjb3ZlclBhcmFtcykpIGFzIE1QQ1R4O1xuXG4gICAgICAgIHJlc3VsdC5zaG91bGQubm90LmJlLmVtcHR5KCk7XG4gICAgICAgIHJlc3VsdC5zaG91bGQuaGFzT3duUHJvcGVydHkoJ3NlcmlhbGl6ZWRUeCcpO1xuICAgICAgICByZXN1bHQuc2hvdWxkLmhhc093blByb3BlcnR5KCdzY2FuSW5kZXgnKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKHJlc3VsdC5zY2FuSW5kZXgsIDApO1xuICAgICAgICAocmVzdWx0LnNlcmlhbGl6ZWRUeCBhcyBzdHJpbmcpLnNob3VsZC5iZS5hLlN0cmluZygpLmFuZC5ub3QuYmUuZW1wdHkoKTtcbiAgICAgICAgc2FuZEJveC5hc3NlcnQubm90Q2FsbGVkKGdldFRTU1NpZ25hdHVyZVNweSk7XG5cbiAgICAgICAgLy8gU3Vic3RyYXRlIE11bHRpU2lnbmF0dXJlIEVkMjU1MTkgZGlzY3JpbWluYW50ICgweDAwKSBtdXN0IHByZWZpeCB0aGUgNjQtYnl0ZSBzaWduYXR1cmUuXG4gICAgICAgIHNhbmRCb3guYXNzZXJ0LmNhbGxlZE9uY2UoYWRkU2lnbmF0dXJlU3B5KTtcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlOiBCdWZmZXIgPSBhZGRTaWduYXR1cmVTcHkuZmlyc3RDYWxsLmFyZ3NbMV07XG4gICAgICAgIHNpZ25hdHVyZS5sZW5ndGguc2hvdWxkLmVxdWFsKDY1KTtcbiAgICAgICAgc2lnbmF0dXJlWzBdLnNob3VsZC5lcXVhbCgweDAwKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHByb2R1Y2UgYSBjcnlwdG9ncmFwaGljYWxseSB2YWxpZCBFZDI1NTE5IHNpZ25hdHVyZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgYWRkU2lnbmF0dXJlU3B5ID0gc2FuZEJveC5zcHkoVHJhbnNmZXJCdWlsZGVyLnByb3RvdHlwZSwgJ2FkZFNpZ25hdHVyZScpO1xuICAgICAgICBjb25zdCBzaWduUmVjb3ZlcnlTcHkgPSBzYW5kQm94LnNweShcbiAgICAgICAgICBiYXNlQ29pbiBhcyB1bmtub3duIGFzIHsgc2lnblN1YnN0cmF0ZU1wY1YyUmVjb3Zlcnk6IHVua25vd24gfSxcbiAgICAgICAgICAnc2lnblN1YnN0cmF0ZU1wY1YyUmVjb3ZlcnknXG4gICAgICAgICk7XG5cbiAgICAgICAgYXdhaXQgYmFzZUNvaW4ucmVjb3ZlcihtcGNWMlJlY292ZXJQYXJhbXMpO1xuXG4gICAgICAgIC8vIDY1LWJ5dGUgc2lnOiAweDAwIGRpc2NyaW1pbmFudCArIDY0LWJ5dGUgRWQyNTUxOSBzaWc7IHNpZ25hdHVyZVZlcmlmeSBoYW5kbGVzIHRoZSBwcmVmaXguXG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZTogQnVmZmVyID0gYWRkU2lnbmF0dXJlU3B5LmZpcnN0Q2FsbC5hcmdzWzFdO1xuXG4gICAgICAgIC8vIENhcHR1cmUgdGhlIGV4YWN0IGJ5dGVzIHNpZ25lZCBieSB0aGUgRFNHIHByb3RvY29sIGluc2lkZSBzaWduU3Vic3RyYXRlTXBjVjJSZWNvdmVyeS5cbiAgICAgICAgY29uc3Qgc2lnbmFibGVQYXlsb2FkOiBCdWZmZXIgPSAoc2lnblJlY292ZXJ5U3B5LmZpcnN0Q2FsbC5hcmdzWzBdIGFzIHsgbWVzc2FnZTogQnVmZmVyIH0pLm1lc3NhZ2U7XG5cbiAgICAgICAgY29uc3QgTVBDID0gYXdhaXQgRUREU0FNZXRob2RzLmdldEluaXRpYWxpemVkTXBjSW5zdGFuY2UoKTtcbiAgICAgICAgY29uc3QgYWNjb3VudElkID0gTVBDLmRlcml2ZVVuaGFyZGVuZWQobXBjVjJDb21tb25LZXlDaGFpbiwgJ20vMCcpLnNsaWNlKDAsIDY0KTtcblxuICAgICAgICBjb25zdCBzZW5kZXJBZGRyID0gYmFzZUNvaW4uZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkoYWNjb3VudElkKTtcbiAgICAgICAgY29uc3QgaXNWYWxpZCA9IHV0aWxzLnZlcmlmeVNpZ25hdHVyZShcbiAgICAgICAgICBgMHgke3NpZ25hYmxlUGF5bG9hZC50b1N0cmluZygnaGV4Jyl9YCxcbiAgICAgICAgICBgMHgke3NpZ25hdHVyZS50b1N0cmluZygnaGV4Jyl9YCxcbiAgICAgICAgICBzZW5kZXJBZGRyXG4gICAgICAgICk7XG4gICAgICAgIGlzVmFsaWQuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHVzZSBNUEN2MSBwYXRoIHdoZW4gc2lnbmluZyBtYXRlcmlhbCBpcyBNUEN2MSBmb3JtYXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHVzZXJQcnYgPSBKU09OLnN0cmluZ2lmeSh7IHVTaGFyZTogeyBzZWVkOiAnYWEnIH0sIGJpdGdvWVNoYXJlOiB7IHU6ICdiYicgfSwgYmFja3VwWVNoYXJlOiB7IHU6ICdjYycgfSB9KTtcbiAgICAgICAgc2FuZEJveFxuICAgICAgICAgIC5zdHViKGJhc2VDb2luIGFzIHVua25vd24gYXMgeyBnZXRFZGRzYVNpZ25pbmdNYXRlcmlhbDogdW5rbm93biB9LCAnZ2V0RWRkc2FTaWduaW5nTWF0ZXJpYWwnKVxuICAgICAgICAgIC5yZXNvbHZlcyh7IHZlcnNpb246ICd2MScsIHVzZXJQcnYgfSk7XG5cbiAgICAgICAgY29uc3QgZ2V0VFNTU2lnbmF0dXJlU3R1YiA9IHNhbmRCb3hcbiAgICAgICAgICAuc3R1YihFRERTQU1ldGhvZHMsICdnZXRUU1NTaWduYXR1cmUnKVxuICAgICAgICAgIC5yZXNvbHZlcyhcbiAgICAgICAgICAgIEJ1ZmZlci5mcm9tKFxuICAgICAgICAgICAgICAnMWJhYWZhMGQ2MjE3NGJmMGM3OGYzMjU2MzE4NjEzZmZjNDRiNmRkNTRhYjFhNjNjMjE4NTIzMmY5MmVkZTlkYScgK1xuICAgICAgICAgICAgICAgICdlMWIyODE4ZGJlYjUyYTgyMTVmZDU2ZjVhNWYyYTlmOTRjMDc5Y2U4OWU0ZGMzYjFjZTZlZDZlODRjZTcxODU3JyxcbiAgICAgICAgICAgICAgJ2hleCdcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuXG4gICAgICAgIHNhbmRCb3hcbiAgICAgICAgICAuc3R1YihiaXRnbywgJ2RlY3J5cHQnKVxuICAgICAgICAgIC53aXRoQXJncyhzaW5vbi5tYXRjaCh7IGlucHV0OiBtcGNWMkJhY2t1cEtleS5yZXBsYWNlKC9cXHMvZywgJycpIH0pKVxuICAgICAgICAgIC5yZXNvbHZlcyhKU09OLnN0cmluZ2lmeSh7IGJTaGFyZToge30sIHlTaGFyZXM6IHt9IH0pKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSAoYXdhaXQgYmFzZUNvaW4ucmVjb3ZlcihtcGNWMlJlY292ZXJQYXJhbXMpKSBhcyBNUENUeDtcblxuICAgICAgICByZXN1bHQuc2hvdWxkLm5vdC5iZS5lbXB0eSgpO1xuICAgICAgICByZXN1bHQuc2hvdWxkLmhhc093blByb3BlcnR5KCdzZXJpYWxpemVkVHgnKTtcbiAgICAgICAgcmVzdWx0LnNob3VsZC5oYXNPd25Qcm9wZXJ0eSgnc2NhbkluZGV4Jyk7XG4gICAgICAgIHNob3VsZC5lcXVhbChyZXN1bHQuc2NhbkluZGV4LCAwKTtcbiAgICAgICAgKHJlc3VsdC5zZXJpYWxpemVkVHggYXMgc3RyaW5nKS5zaG91bGQuYmUuYS5TdHJpbmcoKS5hbmQubm90LmJlLmVtcHR5KCk7XG4gICAgICAgIHNhbmRCb3guYXNzZXJ0LmNhbGxlZE9uY2UoZ2V0VFNTU2lnbmF0dXJlU3R1Yik7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBhIGRlc2NyaXB0aXZlIGVycm9yIHdoZW4gdXNlciBrZXljaGFpbiBkZWNyeXB0aW9uIGZhaWxzIG9uIHRoZSBNUEN2MSBwYXRoJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBzYW5kQm94LnN0dWIoYml0Z28sICdkZWNyeXB0JykucmVqZWN0cyhuZXcgRXJyb3IoJ3Bhc3N3b3JkIGVycm9yJykpO1xuXG4gICAgICAgIGF3YWl0IGJhc2VDb2luLnJlY292ZXIobXBjVjJSZWNvdmVyUGFyYW1zKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9FcnJvciBkZWNyeXB0aW5nIHVzZXIga2V5Y2hhaW4vKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHRocm93IHdoZW4gY29tbW9uS2V5Q2hhaW4gZnJvbSBNUEN2MiBrZXljYXJkIGRvZXMgbm90IG1hdGNoIGJpdGdvS2V5JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBtaXNtYXRjaGVkQml0Z29LZXkgPSBtcGNWMkNvbW1vbktleUNoYWluLnNsaWNlKDAsIC04KSArICcwMDAwMDAwMCc7XG4gICAgICAgIGNvbnN0IG1pc21hdGNoZWRQYXJhbXMgPSB7XG4gICAgICAgICAgLi4ubXBjVjJSZWNvdmVyUGFyYW1zLFxuICAgICAgICAgIGJpdGdvS2V5OiBtaXNtYXRjaGVkQml0Z29LZXksXG4gICAgICAgIH07XG5cbiAgICAgICAgYXdhaXQgYmFzZUNvaW5cbiAgICAgICAgICAucmVjb3ZlcihtaXNtYXRjaGVkUGFyYW1zKVxuICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdFZERTQSBNUEN2MiByZWNvdmVyeTogY29tbW9uS2V5Q2hhaW4gZnJvbSBrZXljYXJkIGRvZXMgbm90IG1hdGNoIGJpdGdvS2V5Jyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBtaXNzaW5nIHVzZXJLZXkgd2hlbiBiYWNrdXBLZXkgYW5kIHdhbGxldFBhc3NwaHJhc2UgYXJlIHByZXNlbnQgYnV0IHVzZXJLZXkgaXMgbm90JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBwYXJhbXNXaXRob3V0VXNlcktleSA9IHsgLi4ubXBjVjJSZWNvdmVyUGFyYW1zLCB1c2VyS2V5OiB1bmRlZmluZWQgfTtcbiAgICAgICAgYXdhaXQgYmFzZUNvaW4ucmVjb3ZlcihwYXJhbXNXaXRob3V0VXNlcktleSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnbWlzc2luZyB1c2VyS2V5Jyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBtaXNzaW5nIGJhY2t1cEtleSB3aGVuIHVzZXJLZXkgYW5kIHdhbGxldFBhc3NwaHJhc2UgYXJlIHByZXNlbnQgYnV0IGJhY2t1cEtleSBpcyBub3QnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtc1dpdGhvdXRCYWNrdXBLZXkgPSB7IC4uLm1wY1YyUmVjb3ZlclBhcmFtcywgYmFja3VwS2V5OiB1bmRlZmluZWQgfTtcbiAgICAgICAgYXdhaXQgYmFzZUNvaW4ucmVjb3ZlcihwYXJhbXNXaXRob3V0QmFja3VwS2V5KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdtaXNzaW5nIGJhY2t1cEtleScpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgdGhyb3cgbWlzc2luZyB3YWxsZXQgcGFzc3BocmFzZSB3aGVuIHVzZXJLZXkgYW5kIGJhY2t1cEtleSBhcmUgcHJlc2VudCBidXQgd2FsbGV0UGFzc3BocmFzZSBpcyBub3QnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtc1dpdGhvdXRQYXNzcGhyYXNlID0geyAuLi5tcGNWMlJlY292ZXJQYXJhbXMsIHdhbGxldFBhc3NwaHJhc2U6IHVuZGVmaW5lZCB9O1xuICAgICAgICBhd2FpdCBiYXNlQ29pbi5yZWNvdmVyKHBhcmFtc1dpdGhvdXRQYXNzcGhyYXNlKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdtaXNzaW5nIHdhbGxldCBwYXNzcGhyYXNlJyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1Rva2VuIEVuYWJsZW1lbnQ6JywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgaGF2ZSBjb3JyZWN0IHRva2VuIGVuYWJsZW1lbnQgY29uZmlnJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY29uZmlnID0gYmFzZUNvaW4uZ2V0VG9rZW5FbmFibGVtZW50Q29uZmlnKCk7XG4gICAgICBzaG91bGQuZXhpc3QoY29uZmlnKTtcbiAgICAgIGNvbmZpZy5yZXF1aXJlc1Rva2VuRW5hYmxlbWVudC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICBjb25maWcuc3VwcG9ydHNNdWx0aXBsZVRva2VuRW5hYmxlbWVudHMuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgd2FsbGV0IHR5cGUgZm9yIHRva2VuIGVuYWJsZW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjb25maWcgPSBiYXNlQ29pbi5nZXRUb2tlbkVuYWJsZW1lbnRDb25maWcoKTtcbiAgICAgICgoKSA9PiBjb25maWcudmFsaWRhdGVXYWxsZXQoJ2N1c3RvZGlhbCcpKS5zaG91bGQubm90LnRocm93KCk7XG4gICAgICAoKCkgPT4gY29uZmlnLnZhbGlkYXRlV2FsbGV0KCdob3QnKSkuc2hvdWxkLnRocm93KFxuICAgICAgICAvVG9rZW4gZW5hYmxlbWVudCBmb3IgUG9seW1lc2ggXFwocG9seXhcXCkgaXMgb25seSBzdXBwb3J0ZWQgZm9yIGN1c3RvZGlhbCB3YWxsZXRzL1xuICAgICAgKTtcbiAgICAgICgoKSA9PiBjb25maWcudmFsaWRhdGVXYWxsZXQoJ2NvbGQnKSkuc2hvdWxkLnRocm93KFxuICAgICAgICAvVG9rZW4gZW5hYmxlbWVudCBmb3IgUG9seW1lc2ggXFwocG9seXhcXCkgaXMgb25seSBzdXBwb3J0ZWQgZm9yIGN1c3RvZGlhbCB3YWxsZXRzL1xuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3ZlcmlmeVRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHRyYW5zZmVyVG8gPSAnNUY4anhLRTgxR2hGcnBoeWZNRnI1VWplQXo1d1M0QWFaRm1lRlBuZjh3VGV0RDcyJztcbiAgICBjb25zdCB0cmFuc2ZlckFtb3VudCA9ICcyMDAwMDAwMDAwJztcbiAgICBjb25zdCB3cm9uZ0FkZHJlc3MgPSAnNUdoYkM2bjJwVUZyWDk4RHd5UGl0NjdmQjVBd1F2VkN3WjRqMkhLQTdhNGRVSzR5JztcblxuICAgIGRlc2NyaWJlKCd0cmFuc2ZlciB0cmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhZGRyZXNzIGFuZCBhbW91bnQgbWF0Y2gnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJhc2VDb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4OiByYXdUeC50cmFuc2Zlci5zaWduZWQgfSxcbiAgICAgICAgICB0eFBhcmFtczogeyByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiB0cmFuc2ZlclRvLCBhbW91bnQ6IHRyYW5zZmVyQW1vdW50IH1dIH0sXG4gICAgICAgIH0pO1xuICAgICAgICByZXN1bHQuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHRocm93IFR4SW50ZW50TWlzbWF0Y2hSZWNpcGllbnRFcnJvciBmb3IgYWRkcmVzcyBtaXNtYXRjaCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgYmFzZUNvaW5cbiAgICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleDogcmF3VHgudHJhbnNmZXIuc2lnbmVkIH0sXG4gICAgICAgICAgICB0eFBhcmFtczogeyByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiB3cm9uZ0FkZHJlc3MsIGFtb3VudDogdHJhbnNmZXJBbW91bnQgfV0gfSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFR4SW50ZW50TWlzbWF0Y2hSZWNpcGllbnRFcnJvcik7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBUeEludGVudE1pc21hdGNoUmVjaXBpZW50RXJyb3IgZm9yIGFtb3VudCBtaXNtYXRjaCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgYmFzZUNvaW5cbiAgICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleDogcmF3VHgudHJhbnNmZXIuc2lnbmVkIH0sXG4gICAgICAgICAgICB0eFBhcmFtczogeyByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiB0cmFuc2ZlclRvLCBhbW91bnQ6ICcxJyB9XSB9LFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoVHhJbnRlbnRNaXNtYXRjaFJlY2lwaWVudEVycm9yKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2d1YXJkIGNhc2VzJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHR4SGV4IGlzIG1pc3NpbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IGJhc2VDb2luXG4gICAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICAgIHR4UHJlYnVpbGQ6IHt9LFxuICAgICAgICAgICAgdHhQYXJhbXM6IHsgcmVjaXBpZW50czogW3sgYWRkcmVzczogdHJhbnNmZXJUbywgYW1vdW50OiB0cmFuc2ZlckFtb3VudCB9XSB9LFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ21pc3NpbmcgdHhIZXggaW4gdHhQcmVidWlsZCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgdGhyb3cgd2hlbiByZWNpcGllbnRzIGhhcyBtb3JlIHRoYW4gMSBlbnRyeScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgYmFzZUNvaW5cbiAgICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleDogcmF3VHgudHJhbnNmZXIuc2lnbmVkIH0sXG4gICAgICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAgICAgICAgeyBhZGRyZXNzOiB0cmFuc2ZlclRvLCBhbW91bnQ6IHRyYW5zZmVyQW1vdW50IH0sXG4gICAgICAgICAgICAgICAgeyBhZGRyZXNzOiB3cm9uZ0FkZHJlc3MsIGFtb3VudDogdHJhbnNmZXJBbW91bnQgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvc3VwcG9ydCBzZW5kaW5nIHRvIG1vcmUgdGhhbiAxIGRlc3RpbmF0aW9uIGFkZHJlc3MvKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHRocm93IHdoZW4gcmVjaXBpZW50cyBpcyBhbiBlbXB0eSBhcnJheScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgYmFzZUNvaW5cbiAgICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleDogcmF3VHgudHJhbnNmZXIuc2lnbmVkIH0sXG4gICAgICAgICAgICB0eFBhcmFtczogeyByZWNpcGllbnRzOiBbXSB9LFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ21pc3NpbmcgcmVjaXBpZW50cyBpbiB0eFBhcmFtcycpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgndG9rZW4gZW5hYmxlbWVudCAocHJlQXBwcm92ZUFzc2V0KSB0cmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgZm9yIGVuYWJsZXRva2VuIHR5cGUgd2l0aCByZWNpcGllbnRzICh3YWxsZXQgcm9vdCBhZGRyZXNzKScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gYnVpbGRUb2tlbkVuYWJsZW1lbnRzIHNldHMgcmVjaXBpZW50c1swXS5hZGRyZXNzID0gd2FsbGV0IHJvb3RBZGRyZXNzIGFuZCB0eXBlID0gJ2VuYWJsZXRva2VuJy5cbiAgICAgICAgLy8gdmVyaWZ5VHJhbnNhY3Rpb24gbXVzdCBzaG9ydC1jaXJjdWl0IGJlZm9yZSB0aGUgX3RvIGNoZWNrIHNpbmNlIHByZUFwcHJvdmVBc3NldCBoYXMgbm8gZGVzdGluYXRpb24uXG4gICAgICAgIGNvbnN0IHdhbGxldEFkZHJlc3MgPSAnNUY4anhLRTgxR2hGcnBoeWZNRnI1VWplQXo1d1M0QWFaRm1lRlBuZjh3VGV0RDcyJztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmFzZUNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXg6IHJhd1R4LnByZUFwcHJvdmVBc3NldC5zaWduZWQgfSxcbiAgICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgICAgdHlwZTogJ2VuYWJsZXRva2VuJyxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IHdhbGxldEFkZHJlc3MsIGFtb3VudDogJzAnLCB0b2tlbk5hbWU6ICd0cG9seXg6c29tZXRva2VuJyB9XSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgcmVzdWx0LnNob3VsZC5iZS50cnVlKCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSBmb3IgZW5hYmxldG9rZW4gdHlwZSB3aXRoIG5vIHJlY2lwaWVudHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJhc2VDb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4OiByYXdUeC5wcmVBcHByb3ZlQXNzZXQuc2lnbmVkIH0sXG4gICAgICAgICAgdHhQYXJhbXM6IHsgdHlwZTogJ2VuYWJsZXRva2VuJyB9LFxuICAgICAgICB9KTtcbiAgICAgICAgcmVzdWx0LnNob3VsZC5iZS50cnVlKCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCd2OCB0cmFuc2ZlciB3aXRoIGNvaW5TcGVjaWZpYy5tYXRlcmlhbCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHY4QW1vdW50ID0gJzEwMDAwMDAnO1xuICAgICAgY29uc3QgdjhSZWNlaXZlciA9IGFjY291bnRzLmFjY291bnQyO1xuICAgICAgY29uc3QgdjhTZW5kZXIgPSBhY2NvdW50cy5hY2NvdW50MTtcbiAgICAgIGxldCB2OFNpZ25lZFR4SGV4OiBzdHJpbmc7XG5cbiAgICAgIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIEJ1aWxkIGEgc2lnbmVkIHY4IHRyYW5zZmVyIHR4IHVzaW5nIHRlc3RuZXRWOE1hdGVyaWFsLlxuICAgICAgICAvLyBUaGUgc2VydmVyIGVtYmVkcyB0aGlzIG1hdGVyaWFsIGluIGNvaW5TcGVjaWZpYyBkdXJpbmcgcHJlYnVpbGQgc28gdGhhdFxuICAgICAgICAvLyB2ZXJpZnlUcmFuc2FjdGlvbiBjYW4gZGVjb2RlIHR4SGV4IGJ1aWx0IGFnYWluc3QgYSBjaGFpbiBzcGVjIG5ld2VyIHRoYW5cbiAgICAgICAgLy8gdGhlIFNESydzIGhhcmRjb2RlZCB2NyBtYXRlcmlhbCAoQ0VDSE8tMTQ3MSkuXG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVjhUcmFuc2ZlckJ1aWxkZXIoY29pbnMuZ2V0KCd0cG9seXgnKSlcbiAgICAgICAgICAuYW1vdW50KHY4QW1vdW50KVxuICAgICAgICAgIC50byh7IGFkZHJlc3M6IHY4UmVjZWl2ZXIuYWRkcmVzcyB9KVxuICAgICAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiB2OFNlbmRlci5hZGRyZXNzIH0pXG4gICAgICAgICAgLm1lbW8oJzAnKVxuICAgICAgICAgIC52YWxpZGl0eSh7IGZpcnN0VmFsaWQ6IDM5MzMsIG1heER1cmF0aW9uOiA2NCB9KVxuICAgICAgICAgIC5yZWZlcmVuY2VCbG9jaygnMHgxNDk3OTliYzk2MDJjYjVjZjIwMWYzNDI1ZmI4ZDI1M2IyZDRlNjFmYzExOWRjYWIzMjQ5ZjMwN2Y1OTQ3NTRkJylcbiAgICAgICAgICAuc2VxdWVuY2VJZCh7IG5hbWU6ICdOb25jZScsIGtleXdvcmQ6ICdub25jZScsIHZhbHVlOiAxIH0pXG4gICAgICAgICAgLmZlZSh7IGFtb3VudDogMCwgdHlwZTogJ3RpcCcgfSk7XG4gICAgICAgIGJ1aWxkZXIuYWRkU2lnbmF0dXJlKHsgcHViOiB2OFNlbmRlci5wdWJsaWNLZXkgfSwgQnVmZmVyLmZyb20obW9ja1Rzc1NpZ25hdHVyZSwgJ2hleCcpKTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIHY4U2lnbmVkVHhIZXggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCd2ZXJpZmllcyBhIHY4IHRyYW5zZmVyIHdoZW4gY29pblNwZWNpZmljLm1hdGVyaWFsIGlzIHByb3ZpZGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiYXNlQ29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICAgICAgdHhIZXg6IHY4U2lnbmVkVHhIZXgsXG4gICAgICAgICAgICBjb2luU3BlY2lmaWM6IHsgbWF0ZXJpYWw6IHRlc3RuZXRWOE1hdGVyaWFsIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0eFBhcmFtczogeyByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiB2OFJlY2VpdmVyLmFkZHJlc3MsIGFtb3VudDogdjhBbW91bnQgfV0gfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJlc3VsdC5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCd0aHJvd3MgVHhJbnRlbnRNaXNtYXRjaFJlY2lwaWVudEVycm9yIGZvciBhZGRyZXNzIG1pc21hdGNoIG9uIHY4IHRyYW5zZmVyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBiYXNlQ29pblxuICAgICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgICAgICAgIHR4SGV4OiB2OFNpZ25lZFR4SGV4LFxuICAgICAgICAgICAgICBjb2luU3BlY2lmaWM6IHsgbWF0ZXJpYWw6IHRlc3RuZXRWOE1hdGVyaWFsIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHhQYXJhbXM6IHsgcmVjaXBpZW50czogW3sgYWRkcmVzczogd3JvbmdBZGRyZXNzLCBhbW91bnQ6IHY4QW1vdW50IH1dIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChUeEludGVudE1pc21hdGNoUmVjaXBpZW50RXJyb3IpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCd0aHJvd3MgVHhJbnRlbnRNaXNtYXRjaFJlY2lwaWVudEVycm9yIGZvciBhbW91bnQgbWlzbWF0Y2ggb24gdjggdHJhbnNmZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IGJhc2VDb2luXG4gICAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICAgICAgdHhIZXg6IHY4U2lnbmVkVHhIZXgsXG4gICAgICAgICAgICAgIGNvaW5TcGVjaWZpYzogeyBtYXRlcmlhbDogdGVzdG5ldFY4TWF0ZXJpYWwgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0eFBhcmFtczogeyByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiB2OFJlY2VpdmVyLmFkZHJlc3MsIGFtb3VudDogJzEnIH1dIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChUeEludGVudE1pc21hdGNoUmVjaXBpZW50RXJyb3IpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=