@bitgo-beta/sdk-coin-sol 7.6.4-beta.650 → 7.6.4-beta.652

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.
@@ -75,6 +75,7 @@ describe('Sol Associated Token Account Builder', () => {
75
75
  const mint = testData.associatedTokenAccounts.mint;
76
76
  const recentBlockHash = 'GHtXQBsoZHVnNFa9YevAzFr17DJjgHXk3ycTKD5xD3Zi';
77
77
  const rentAmount = '30000';
78
+ const token2022ProgramId = 'TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb';
78
79
  // for diff owner case
79
80
  const accountOwner = new src_1.KeyPair(testData.associatedTokenAccounts.accounts[1]).getKeys();
80
81
  const ownerPubkeys = {
@@ -285,6 +286,42 @@ describe('Sol Associated Token Account Builder', () => {
285
286
  const rawTx = tx.toBroadcastFormat();
286
287
  should_1.default.equal(rawTx, testData.MULTI_ATA_INIT_UNSIGNED_TX_WITH_MEMO_OPTIONAL_PARAM);
287
288
  });
289
+ it('bundles permissionless thaw after Token-2022 ATA creation', async () => {
290
+ const t22Name = testData.sol2022TokenTransfers.name;
291
+ const t22Mint = testData.sol2022TokenTransfers.mint;
292
+ const tokenAccount = '98wFF5MpMjMQbfDF2MPzo8LCGX37unZR1ohRA1mU9GmJ';
293
+ const thawParams = {
294
+ authority: account.pub,
295
+ mint: t22Mint,
296
+ tokenAccount,
297
+ tokenAccountOwner: ownerPubkeys.pubkey,
298
+ gatingProgram: 'GbQ8ZiEFzGGTeYoXwtZtcoxwPcMyUcmZDduMVNdUPKpX',
299
+ flagAccount: '48n7YGEww7fKMfJ5gJ3sQC3rM6RWGjpUsghqVfXVkR5A',
300
+ mintConfig: '9sQhAH7vV3RKTCK13VY4EiNjs3qBq1srSYxdNufdAAXm',
301
+ extraAccounts: [{ pubkey: nonceAccount.pub, isSigner: false, isWritable: false }],
302
+ };
303
+ const txBuilder = factory.getAtaInitializationBuilder();
304
+ txBuilder.nonce(recentBlockHash);
305
+ txBuilder.sender(account.pub);
306
+ txBuilder.rentExemptAmount(rentAmount);
307
+ txBuilder.enableToken({
308
+ ownerAddress: ownerPubkeys.pubkey,
309
+ tokenName: t22Name,
310
+ tokenAddress: t22Mint,
311
+ programId: token2022ProgramId,
312
+ ataAddress: tokenAccount,
313
+ });
314
+ txBuilder.permissionlessThaw(thawParams);
315
+ const tx = await txBuilder.build();
316
+ const instructions = tx.toJson().instructionsData;
317
+ instructions
318
+ .map((i) => i.type)
319
+ .should.deepEqual(['CreateAssociatedTokenAccount', 'PermissionlessThawIdempotent']);
320
+ instructions[1].params.tokenAccount.should.equal(tokenAccount);
321
+ instructions[1].params.gatingProgram.should.equal(thawParams.gatingProgram);
322
+ instructions[1].params.extraAccounts.should.deepEqual(thawParams.extraAccounts);
323
+ should_1.default.equal(src_1.Utils.isValidRawTransaction(tx.toBroadcastFormat()), true);
324
+ });
288
325
  it('build an associated token account init tx for multiple recipients signed', async () => {
289
326
  const txBuilder = multiAtaInitBuilder(recipients);
290
327
  txBuilder.sign({ key: account.prv });
@@ -468,4 +505,4 @@ describe('Sol Associated Token Account Builder', () => {
468
505
  });
469
506
  });
470
507
  });
471
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRhSW5pdEJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb25CdWlsZGVyL2F0YUluaXRCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsc0NBQThGO0FBQzlGLG9EQUE0QjtBQUM1Qiw4REFBZ0Q7QUFFaEQsNERBQXlEO0FBRXpELFFBQVEsQ0FBQyxzQ0FBc0MsRUFBRSxHQUFHLEVBQUU7SUFDcEQsU0FBUyxrQ0FBa0MsQ0FDekMsRUFBbUIsRUFDbkIsS0FBYSxFQUNiLFFBQStDLE1BQU07UUFFckQsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztRQUNsRCxJQUFJLGtCQUFrQixDQUFDO1FBQ3ZCLEtBQUssTUFBTSxXQUFXLElBQUksWUFBWSxFQUFFLENBQUM7WUFDdkMsSUFBSSxXQUFXLENBQUMsSUFBSSxLQUFLLDhCQUE4QixFQUFFLENBQUM7Z0JBQ3hELGtCQUFrQixHQUFHLFdBQVcsQ0FBQztnQkFDakMsTUFBTTtZQUNSLENBQUM7UUFDSCxDQUFDO1FBQ0QsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNqQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFdkQsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsV0FBSyxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FB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b0QsRUFBRSxLQUFLLElBQUksRUFBRTtnQkFDbEUsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsQ0FBQztnQkFDOUQsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFDMUMsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyw4REFBOEQsQ0FBQyxDQUFDO1lBQzlHLENBQUMsQ0FBQyxDQUFDO1lBQ0gsRUFBRSxDQUFDLGtEQUFrRCxFQUFFLEtBQUssSUFBSSxFQUFFO2dCQUNoRSxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO2dCQUM1RCxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO2dCQUMxQyxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLDhEQUE4RCxDQUFDLENBQUM7WUFDOUcsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBLZXlQYWlyLCBVdGlscywgQXRhSW5pdGlhbGl6YXRpb25CdWlsZGVyLCBUb2tlblRyYW5zZmVyQnVpbGRlciB9IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgKiBhcyB0ZXN0RGF0YSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvc29sJztcbmltcG9ydCB7IEJhc2VUcmFuc2FjdGlvbiB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IGdldEJ1aWxkZXJGYWN0b3J5IH0gZnJvbSAnLi4vZ2V0QnVpbGRlckZhY3RvcnknO1xuXG5kZXNjcmliZSgnU29sIEFzc29jaWF0ZWQgVG9rZW4gQWNjb3VudCBCdWlsZGVyJywgKCkgPT4ge1xuICBmdW5jdGlvbiB2ZXJpZnlJbnB1dE91dHB1dEFuZFJhd1RyYW5zYWN0aW9uKFxuICAgIHR4OiBCYXNlVHJhbnNhY3Rpb24sXG4gICAgcmF3VHg6IHN0cmluZyxcbiAgICBvd25lcjogeyBwdWJrZXk6IHN0cmluZzsgYXRhUHVia2V5OiBzdHJpbmcgfSA9IHNlbmRlclxuICApIHtcbiAgICB0eC5pbnB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgwKTtcbiAgICB0eC5vdXRwdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMCk7XG4gICAgY29uc3QgaW5zdHJ1Y3Rpb25zID0gdHgudG9Kc29uKCkuaW5zdHJ1Y3Rpb25zRGF0YTtcbiAgICBsZXQgYXRhSW5pdEluc3RydWN0aW9uO1xuICAgIGZvciAoY29uc3QgaW5zdHJ1Y3Rpb24gb2YgaW5zdHJ1Y3Rpb25zKSB7XG4gICAgICBpZiAoaW5zdHJ1Y3Rpb24udHlwZSA9PT0gJ0NyZWF0ZUFzc29jaWF0ZWRUb2tlbkFjY291bnQnKSB7XG4gICAgICAgIGF0YUluaXRJbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgc2hvdWxkLmV4aXN0KGF0YUluaXRJbnN0cnVjdGlvbik7XG4gICAgYXRhSW5pdEluc3RydWN0aW9uLnBhcmFtcy50b2tlbk5hbWUuc2hvdWxkLmVxdWFsKG1pbnQpO1xuXG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmlzVmFsaWRSYXdUcmFuc2FjdGlvbihyYXdUeCksIHRydWUpO1xuICB9XG5cbiAgY29uc3QgZmFjdG9yeSA9IGdldEJ1aWxkZXJGYWN0b3J5KCdzb2wnKTtcbiAgY29uc3QgYXRhSW5pdEJ1aWxkZXIgPSAoKSA9PiB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRBdGFJbml0aWFsaXphdGlvbkJ1aWxkZXIoKTtcbiAgICB0eEJ1aWxkZXIubm9uY2UocmVjZW50QmxvY2tIYXNoKTtcbiAgICB0eEJ1aWxkZXIuc2VuZGVyKGFjY291bnQucHViKTtcbiAgICB0eEJ1aWxkZXIubWludChtaW50KTtcbiAgICB0eEJ1aWxkZXIucmVudEV4ZW1wdEFtb3VudChyZW50QW1vdW50KTtcblxuICAgIHJldHVybiB0eEJ1aWxkZXI7XG4gIH07XG5cbiAgY29uc3QgYWNjb3VudCA9IG5ldyBLZXlQYWlyKHRlc3REYXRhLmFzc29jaWF0ZWRUb2tlbkFjY291bnRzLmFjY291bnRzWzBdKS5nZXRLZXlzKCk7XG4gIGNvbnN0IG5vbmNlQWNjb3VudCA9IG5ldyBLZXlQYWlyKHRlc3REYXRhLm5vbmNlQWNjb3VudCkuZ2V0S2V5cygpO1xuICBjb25zdCBzZW5kZXIgPSB7XG4gICAgcHVia2V5OiBhY2NvdW50LnB1YixcbiAgICBhdGFQdWJrZXk6IHRlc3REYXRhLmFzc29jaWF0ZWRUb2tlbkFjY291bnRzLmFjY291bnRzWzBdLmF0YSxcbiAgfTtcbiAgY29uc3Qgd3JvbmdBY2NvdW50ID0gbmV3IEtleVBhaXIoeyBwcnY6IHRlc3REYXRhLnBydktleXMucHJ2S2V5MS5iYXNlNTggfSkuZ2V0S2V5cygpO1xuICBjb25zdCBtaW50ID0gdGVzdERhdGEuYXNzb2NpYXRlZFRva2VuQWNjb3VudHMubWludDtcbiAgY29uc3QgcmVjZW50QmxvY2tIYXNoID0gJ0dIdFhRQnNvWkhWbk5GYTlZZXZBekZyMTdESmpnSFhrM3ljVEtENXhEM1ppJztcbiAgY29uc3QgcmVudEFtb3VudCA9ICczMDAwMCc7XG5cbiAgLy8gZm9yIGRpZmYgb3duZXIgY2FzZVxuICBjb25zdCBhY2NvdW50T3duZXIgPSBuZXcgS2V5UGFpcih0ZXN0RGF0YS5hc3NvY2lhdGVkVG9rZW5BY2NvdW50cy5hY2NvdW50c1sxXSkuZ2V0S2V5cygpO1xuICBjb25zdCBvd25lclB1YmtleXMgPSB7XG4gICAgcHVia2V5OiBhY2NvdW50T3duZXIucHViLFxuICAgIGF0YVB1YmtleTogdGVzdERhdGEuYXNzb2NpYXRlZFRva2VuQWNjb3VudHMuYWNjb3VudHNbMV0uYXRhLFxuICB9O1xuXG4gIGRlc2NyaWJlKCdCdWlsZCBhbmQgc2lnbicsICgpID0+IHtcbiAgICBkZXNjcmliZSgnU3VjY2VlZCcsICgpID0+IHtcbiAgICAgIGl0KCdidWlsZCBhbiBhc3NvY2lhdGVkIHRva2VuIGFjY291bnQgaW5pdCB0eCB1bnNpZ25lZCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gYXRhSW5pdEJ1aWxkZXIoKTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAgIHZlcmlmeUlucHV0T3V0cHV0QW5kUmF3VHJhbnNhY3Rpb24odHgsIHJhd1R4KTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKHJhd1R4LCB0ZXN0RGF0YS5BVEFfSU5JVF9VTlNJR05FRF9UWCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2J1aWxkIGFuIGFzc29jaWF0ZWQgdG9rZW4gYWNjb3VudCBpbml0IHR4IHVuc2lnbmVkIHdpdGggbWVtbycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gYXRhSW5pdEJ1aWxkZXIoKTtcbiAgICAgICAgdHhCdWlsZGVyLm1lbW8oJ3Rlc3QgbWVtbyBwbGVhc2UgaWdub3JlJyk7XG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgICB2ZXJpZnlJbnB1dE91dHB1dEFuZFJhd1RyYW5zYWN0aW9uKHR4LCByYXdUeCk7XG4gICAgICAgIHNob3VsZC5lcXVhbChyYXdUeCwgdGVzdERhdGEuQVRBX0lOSVRfVU5TSUdORURfVFhfV0lUSF9NRU1PKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYnVpbGQgYW4gYXNzb2NpYXRlZCB0b2tlbiBhY2NvdW50IGluaXQgdHggc2lnbmVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBhdGFJbml0QnVpbGRlcigpO1xuICAgICAgICB0eEJ1aWxkZXIuc2VuZGVyKGFjY291bnQucHViKTtcbiAgICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IGFjY291bnQucHJ2IH0pO1xuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgICAgdmVyaWZ5SW5wdXRPdXRwdXRBbmRSYXdUcmFuc2FjdGlvbih0eCwgcmF3VHgpO1xuICAgICAgICBzaG91bGQuZXF1YWwocmF3VHgsIHRlc3REYXRhLkFUQV9JTklUX1NJR05FRF9UWCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2J1aWxkIGFuIGFzc29jaWF0ZWQgdG9rZW4gYWNjb3VudCBpbml0IHR4IHdpdGggbWVtbyBzaWduZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGF0YUluaXRCdWlsZGVyKCk7XG4gICAgICAgIHR4QnVpbGRlci5tZW1vKCd0ZXN0IG1lbW8gcGxlYXNlIGlnbm9yZScpO1xuICAgICAgICB0eEJ1aWxkZXIuc2VuZGVyKGFjY291bnQucHViKTtcbiAgICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IGFjY291bnQucHJ2IH0pO1xuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgICAgdmVyaWZ5SW5wdXRPdXRwdXRBbmRSYXdUcmFuc2FjdGlvbih0eCwgcmF3VHgpO1xuICAgICAgICBzaG91bGQuZXF1YWwocmF3VHgsIHRlc3REYXRhLkFUQV9JTklUX1NJR05FRF9UWF9XSVRIX01FTU8pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdidWlsZCBhbiBhc3NvY2lhdGVkIHRva2VuIGFjY291bnQgaW5pdCB0eCB3aXRoIGR1cmFibGUgbm9uY2UgdW5zaWduZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGF0YUluaXRCdWlsZGVyKCk7XG4gICAgICAgIHR4QnVpbGRlci5tZW1vKCd0ZXN0IG1lbW8gcGxlYXNlIGlnbm9yZScpO1xuICAgICAgICB0eEJ1aWxkZXIuc2VuZGVyKGFjY291bnQucHViKTtcbiAgICAgICAgdHhCdWlsZGVyLm5vbmNlKHJlY2VudEJsb2NrSGFzaCwgeyB3YWxsZXROb25jZUFkZHJlc3M6IG5vbmNlQWNjb3VudC5wdWIsIGF1dGhXYWxsZXRBZGRyZXNzOiBhY2NvdW50LnB1YiB9KTtcblxuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgICAgdmVyaWZ5SW5wdXRPdXRwdXRBbmRSYXdUcmFuc2FjdGlvbih0eCwgcmF3VHgpO1xuXG4gICAgICAgIHNob3VsZC5lcXVhbChyYXdUeCwgdGVzdERhdGEuQVRBX0lOSVRfVU5TSUdORURfVFhfRFVSQUJMRV9OT05DRSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2J1aWxkIGFuIGFzc29jaWF0ZWQgdG9rZW4gYWNjb3VudCBpbml0IHR4IHdpdGggZHVyYWJsZSBub25jZSBzaWduZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGF0YUluaXRCdWlsZGVyKCk7XG4gICAgICAgIHR4QnVpbGRlci5tZW1vKCd0ZXN0IG1lbW8gcGxlYXNlIGlnbm9yZScpO1xuICAgICAgICB0eEJ1aWxkZXIuc2VuZGVyKGFjY291bnQucHViKTtcbiAgICAgICAgdHhCdWlsZGVyLm5vbmNlKHJlY2VudEJsb2NrSGFzaCwgeyB3YWxsZXROb25jZUFkZHJlc3M6IG5vbmNlQWNjb3VudC5wdWIsIGF1dGhXYWxsZXRBZGRyZXNzOiBhY2NvdW50LnB1YiB9KTtcbiAgICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IGFjY291bnQucHJ2IH0pO1xuXG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgICB2ZXJpZnlJbnB1dE91dHB1dEFuZFJhd1RyYW5zYWN0aW9uKHR4LCByYXdUeCk7XG5cbiAgICAgICAgc2hvdWxkLmVxdWFsKHJhd1R4LCB0ZXN0RGF0YS5BVEFfSU5JVF9TSUdORURfVFhfRFVSQUJMRV9OT05DRSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdBVEEgY3JlYXRpb24gd2l0aCBkaWZmZXJlbnQgb3duZXInLCAoKSA9PiB7XG4gICAgICBpdCgnYnVpbGQgYW4gYXNzb2NpYXRlZCB0b2tlbiBhY2NvdW50IGluaXQgZm9yIGRpZmYgb3duZXIgdHggdW5zaWduZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGF0YUluaXRCdWlsZGVyKCk7XG4gICAgICAgIHR4QnVpbGRlci5vd25lcihhY2NvdW50T3duZXIucHViKTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAgIHZlcmlmeUlucHV0T3V0cHV0QW5kUmF3VHJhbnNhY3Rpb24odHgsIHJhd1R4LCBvd25lclB1YmtleXMpO1xuICAgICAgICBzaG91bGQuZXF1YWwocmF3VHgsIHRlc3REYXRhLkFUQV9JTklUX1VOU0lHTkVEX0RJRkZfT1dORVJfVFgpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdidWlsZCBhbiBhc3NvY2lhdGVkIHRva2VuIGFjY291bnQgaW5pdCBmb3IgZGlmZiBvd25lciB0eCB1bnNpZ25lZCB3aXRoIG1lbW8nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGF0YUluaXRCdWlsZGVyKCk7XG4gICAgICAgIHR4QnVpbGRlci5vd25lcihhY2NvdW50T3duZXIucHViKTtcbiAgICAgICAgdHhCdWlsZGVyLm1lbW8oJ3Rlc3QgbWVtbyBwbGVhc2UgaWdub3JlJyk7XG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgICB2ZXJpZnlJbnB1dE91dHB1dEFuZFJhd1RyYW5zYWN0aW9uKHR4LCByYXdUeCwgb3duZXJQdWJrZXlzKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKHJhd1R4LCB0ZXN0RGF0YS5BVEFfSU5JVF9VTlNJR05FRF9ESUZGX09XTkVSX1RYX1dJVEhfTUVNTyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2J1aWxkIGFuIGFzc29jaWF0ZWQgdG9rZW4gYWNjb3VudCBpbml0IGZvciBkaWZmIG93bmVyIHR4IHNpZ25lZCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gYXRhSW5pdEJ1aWxkZXIoKTtcbiAgICAgICAgdHhCdWlsZGVyLm93bmVyKGFjY291bnRPd25lci5wdWIpO1xuICAgICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogYWNjb3VudC5wcnYgfSk7XG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgICB2ZXJpZnlJbnB1dE91dHB1dEFuZFJhd1RyYW5zYWN0aW9uKHR4LCByYXdUeCwgb3duZXJQdWJrZXlzKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKHJhd1R4LCB0ZXN0RGF0YS5BVEFfSU5JVF9TSUdORURfRElGRl9PV05FUl9UWCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2J1aWxkIGFuIGFzc29jaWF0ZWQgdG9rZW4gYWNjb3VudCBpbml0IGZvciBkaWZmIG93bmVyIHR4IHdpdGggbWVtbyBzaWduZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGF0YUluaXRCdWlsZGVyKCk7XG4gICAgICAgIHR4QnVpbGRlci5vd25lcihhY2NvdW50T3duZXIucHViKTtcbiAgICAgICAgdHhCdWlsZGVyLm1lbW8oJ3Rlc3QgbWVtbyBwbGVhc2UgaWdub3JlJyk7XG4gICAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiBhY2NvdW50LnBydiB9KTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAgIHZlcmlmeUlucHV0T3V0cHV0QW5kUmF3VHJhbnNhY3Rpb24odHgsIHJhd1R4LCBvd25lclB1YmtleXMpO1xuICAgICAgICBzaG91bGQuZXF1YWwocmF3VHgsIHRlc3REYXRhLkFUQV9JTklUX1NJR05FRF9ESUZGX09XTkVSX1RYX1dJVEhfTUVNTyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdGYWlsJywgKCkgPT4ge1xuICAgICAgaXQoJ2J1aWxkIGFuIGFzc29jaWF0ZWQgdG9rZW4gYWNjb3VudCBpbml0IHR4IHdoZW4gbWludCBpcyBpbnZhbGlkJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBhdGFJbml0QnVpbGRlcigpO1xuICAgICAgICBzaG91bGQoKCkgPT4gdHhCdWlsZGVyLm1pbnQoJ2ludmFsaWRUb2tlbicpKS50aHJvd0Vycm9yKFxuICAgICAgICAgICdJbnZhbGlkIHRyYW5zYWN0aW9uOiBpbnZhbGlkIHRva2VuIG5hbWUsIGdvdDogaW52YWxpZFRva2VuJ1xuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdidWlsZCBhIHdhbGxldCBpbml0IHR4IGFuZCBzaWduIHdpdGggYW4gaW5jb3JyZWN0IGFjY291bnQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGF0YUluaXRCdWlsZGVyKCk7XG4gICAgICAgIHR4QnVpbGRlci5zZW5kZXIoYWNjb3VudC5wdWIpO1xuICAgICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogd3JvbmdBY2NvdW50LnBydiB9KTtcbiAgICAgICAgYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkuc2hvdWxkLnJlamVjdGVkV2l0aCgndW5rbm93biBzaWduZXI6IENQNURwYWE0MlJ0Sm1NdUtxQ1FzTHdtYTVZaDNrbnV2S3NZREZYODVGNDFTJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2J1aWxkIHdoZW4gbm9uY2UgaXMgbm90IHByb3ZpZGVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldEF0YUluaXRpYWxpemF0aW9uQnVpbGRlcigpO1xuICAgICAgICB0eEJ1aWxkZXIuc2VuZGVyKGFjY291bnQucHViKTtcbiAgICAgICAgdHhCdWlsZGVyLm1pbnQobWludCk7XG4gICAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiBhY2NvdW50LnBydiB9KTtcbiAgICAgICAgYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkuc2hvdWxkLnJlamVjdGVkV2l0aCgnSW52YWxpZCB0cmFuc2FjdGlvbjogbWlzc2luZyBub25jZSBibG9ja2hhc2gnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYnVpbGQgd2hlbiBzZW5kZXIgaXMgbm90IHByb3ZpZGVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldEF0YUluaXRpYWxpemF0aW9uQnVpbGRlcigpO1xuICAgICAgICB0eEJ1aWxkZXIubm9uY2UocmVjZW50QmxvY2tIYXNoKTtcbiAgICAgICAgdHhCdWlsZGVyLm1pbnQobWludCk7XG4gICAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiBhY2NvdW50LnBydiB9KTtcbiAgICAgICAgYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkuc2hvdWxkLnJlamVjdGVkV2l0aCgnSW52YWxpZCB0cmFuc2FjdGlvbjogbWlzc2luZyBzZW5kZXInKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYnVpbGQgd2hlbiBtaW50IGlzIG5vdCBwcm92aWRlZCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRBdGFJbml0aWFsaXphdGlvbkJ1aWxkZXIoKTtcbiAgICAgICAgdHhCdWlsZGVyLnNlbmRlcihhY2NvdW50LnB1Yik7XG4gICAgICAgIHR4QnVpbGRlci5ub25jZShyZWNlbnRCbG9ja0hhc2gpO1xuICAgICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogYWNjb3VudC5wcnYgfSk7XG4gICAgICAgIGF3YWl0IHR4QnVpbGRlci5idWlsZCgpLnNob3VsZC5yZWplY3RlZFdpdGgoJ01pbnQgbXVzdCBiZSBzZXQgYmVmb3JlIGJ1aWxkaW5nIHRoZSB0cmFuc2FjdGlvbicpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdidWlsZCB3aGVuIG1pbnQgaXMgaW52YWxpZCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRBdGFJbml0aWFsaXphdGlvbkJ1aWxkZXIoKTtcbiAgICAgICAgc2hvdWxkKCgpID0+IHR4QnVpbGRlci5taW50KCdzb2w6aW52YWxpZCBtaW50JykpLnRocm93RXJyb3IoXG4gICAgICAgICAgJ0ludmFsaWQgdHJhbnNhY3Rpb246IGludmFsaWQgdG9rZW4gbmFtZSwgZ290OiBzb2w6aW52YWxpZCBtaW50J1xuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdidWlsZCB3aGVuIHJlbnRFeGVtcHRBbW91bnQgaXMgaW52YWxpZCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gYXRhSW5pdEJ1aWxkZXIoKTtcbiAgICAgICAgc2hvdWxkKCgpID0+IHR4QnVpbGRlci5yZW50RXhlbXB0QW1vdW50KCdpbnZhbGlkIGFtb3VudCcpKS50aHJvd0Vycm9yKFxuICAgICAgICAgICdJbnZhbGlkIHRva2VuQWNjb3VudFJlbnRFeGVtcHRBbW91bnQsIGdvdDogaW52YWxpZCBhbW91bnQnXG4gICAgICAgICk7XG4gICAgICAgIHNob3VsZCgoKSA9PiB0eEJ1aWxkZXIuYXNzb2NpYXRlZFRva2VuQWNjb3VudFJlbnQoJ2ludmFsaWQgYW1vdW50JykpLnRocm93RXJyb3IoXG4gICAgICAgICAgJ0ludmFsaWQgdG9rZW5BY2NvdW50UmVudEV4ZW1wdEFtb3VudCwgZ290OiBpbnZhbGlkIGFtb3VudCdcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYnVpbGQgd2hlbiBvd25lciBpcyBpbnZhbGlkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBhdGFJbml0QnVpbGRlcigpO1xuICAgICAgICBzaG91bGQoKCkgPT4gdHhCdWlsZGVyLm93bmVyKCdpbnZhbGlkIG93bmVyJykpLnRocm93RXJyb3IoXG4gICAgICAgICAgJ0ludmFsaWQgb3IgbWlzc2luZyBvd25lckFkZHJlc3MsIGdvdDogaW52YWxpZCBvd25lcidcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgndG8gc2lnbiB0d2ljZSB3aXRoIHRoZSBzYW1lIGtleScsICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5mcm9tKHRlc3REYXRhLkFUQV9JTklUX1VOU0lHTkVEX1RYKTtcbiAgICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IGFjY291bnQucHJ2IH0pO1xuICAgICAgICBzaG91bGQoKCkgPT4gdHhCdWlsZGVyLnNpZ24oeyBrZXk6IGFjY291bnQucHJ2IH0pKS50aHJvd0Vycm9yKCdEdXBsaWNhdGVkIHNpZ25lcjogJyArIGFjY291bnQucHJ2Py50b1N0cmluZygpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQnVpbGQgYW5kIHNpZ24gd2l0aCBlbmFibGVUb2tlbicsICgpID0+IHtcbiAgICBjb25zdCByZWNpcGllbnRzID0gW1xuICAgICAge1xuICAgICAgICBvd25lckFkZHJlc3M6IHNlbmRlci5wdWJrZXksXG4gICAgICAgIHRva2VuTmFtZTogbWludCxcbiAgICAgICAgYXRhQWRkcmVzczogc2VuZGVyLmF0YVB1YmtleSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG93bmVyQWRkcmVzczogb3duZXJQdWJrZXlzLnB1YmtleSxcbiAgICAgICAgdG9rZW5OYW1lOiAnc29sOnJheScsXG4gICAgICAgIGF0YUFkZHJlc3M6ICdBQ0V1ell0UjRnQkZ0NkhMUVRZaXNnMlQ3azhWaDRzczFTcG5xbWJWUVNOeScsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBvd25lckFkZHJlc3M6IG93bmVyUHVia2V5cy5wdWJrZXksXG4gICAgICAgIHRva2VuTmFtZTogJ3Rzb2w6YW1zJyxcbiAgICAgICAgYXRhQWRkcmVzczogJ0FDRXV6WXRSNGdCRnQ2SExRVFlpc2cyVDdrOFZoNHNzMVNwbnFtYlZRU055JyxcbiAgICAgICAgdG9rZW5BZGRyZXNzOiAnRjR1TGVYaW9GejNodzEzTXBvc3V3YVFiTWNaYkNqcXZFR1BQZVJSQjFCeWYnLFxuICAgICAgICBwcm9ncmFtSWQ6ICdUb2tlbmtlZ1FmZVp5aU53QUpiTmJHS1BGWENXdUJ2ZjlTczYyM1ZRNURBJyxcbiAgICAgIH0sXG4gICAgXTtcbiAgICBjb25zdCBtdWx0aUF0YUluaXRCdWlsZGVyID0gKHJlY2lwaWVudHMpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0QXRhSW5pdGlhbGl6YXRpb25CdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIubm9uY2UocmVjZW50QmxvY2tIYXNoKTtcbiAgICAgIHJlY2lwaWVudHMuZm9yRWFjaCgocmVjaXBpZW50KSA9PiB7XG4gICAgICAgIHR4QnVpbGRlci5lbmFibGVUb2tlbihyZWNpcGllbnQpO1xuICAgICAgfSk7XG4gICAgICB0eEJ1aWxkZXIuc2VuZGVyKHNlbmRlci5wdWJrZXkpO1xuICAgICAgdHhCdWlsZGVyLnJlbnRFeGVtcHRBbW91bnQocmVudEFtb3VudCk7XG5cbiAgICAgIHJldHVybiB0eEJ1aWxkZXI7XG4gICAgfTtcblxuICAgIGRlc2NyaWJlKCdBVEEgY3JlYXRpb24gZm9yIG11bHRpcGxlIHJlY2lwaWVudHMnLCAoKSA9PiB7XG4gICAgICBpdCgnYnVpbGQgYW4gYXNzb2NpYXRlZCB0b2tlbiBhY2NvdW50IGluaXQgZm9yIG11bHRpcGxlIHJlY2lwaWVudHMnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IG11bHRpQXRhSW5pdEJ1aWxkZXIocmVjaXBpZW50cyk7XG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgICAgY29uc3Qgb3duZXJSYXlBVEEgPSAnQUNFdXpZdFI0Z0JGdDZITFFUWWlzZzJUN2s4Vmg0c3MxU3BucW1iVlFTTnknO1xuXG4gICAgICAgIHR4LmlucHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDApO1xuICAgICAgICB0eC5vdXRwdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMCk7XG4gICAgICAgIGNvbnN0IGluc3RydWN0aW9ucyA9IHR4LnRvSnNvbigpLmluc3RydWN0aW9uc0RhdGE7XG5cbiAgICAgICAgaW5zdHJ1Y3Rpb25zLmxlbmd0aC5zaG91bGQuZXF1YWwoMyk7XG4gICAgICAgIGluc3RydWN0aW9uc1swXS5wYXJhbXMudG9rZW5OYW1lLnNob3VsZC5lcXVhbChtaW50KTtcbiAgICAgICAgaW5zdHJ1Y3Rpb25zWzBdLnBhcmFtcy5vd25lckFkZHJlc3Muc2hvdWxkLmVxdWFsKHNlbmRlci5wdWJrZXkpO1xuICAgICAgICBpbnN0cnVjdGlvbnNbMF0ucGFyYW1zLmF0YUFkZHJlc3Muc2hvdWxkLmVxdWFsKHNlbmRlci5hdGFQdWJrZXkpO1xuICAgICAgICBpbnN0cnVjdGlvbnNbMV0ucGFyYW1zLnRva2VuTmFtZS5zaG91bGQuZXF1YWwoJ3NvbDpyYXknKTtcbiAgICAgICAgaW5zdHJ1Y3Rpb25zWzFdLnBhcmFtcy5vd25lckFkZHJlc3Muc2hvdWxkLmVxdWFsKG93bmVyUHVia2V5cy5wdWJrZXkpO1xuICAgICAgICBpbnN0cnVjdGlvbnNbMV0ucGFyYW1zLmF0YUFkZHJlc3Muc2hvdWxkLmVxdWFsKG93bmVyUmF5QVRBKTtcbiAgICAgICAgaW5zdHJ1Y3Rpb25zWzJdLnBhcmFtcy50b2tlbk5hbWUuc2hvdWxkLmVxdWFsKCd0c29sOmFtcycpO1xuICAgICAgICBzaG91bGQuZXF1YWwocmF3VHgsIHRlc3REYXRhLk1VTFRJX0FUQV9JTklUX1VOU0lHTkVEX1RYX1dJVEhfT1BUSU9OQUxfUEFSQU1TKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYnVpbGQgYW4gYXNzb2NpYXRlZCB0b2tlbiBhY2NvdW50IGluaXQgZm9yIG11bHRpcGxlIHJlY2lwaWVudHMgd2l0aCBtZW1vJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBtdWx0aUF0YUluaXRCdWlsZGVyKHJlY2lwaWVudHMpO1xuICAgICAgICB0eEJ1aWxkZXIubWVtbygndGVzdCBtZW1vIHBsZWFzZSBpZ25vcmUnKTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAgIHNob3VsZC5lcXVhbChyYXdUeCwgdGVzdERhdGEuTVVMVElfQVRBX0lOSVRfVU5TSUdORURfVFhfV0lUSF9NRU1PX09QVElPTkFMX1BBUkFNKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYnVpbGQgYW4gYXNzb2NpYXRlZCB0b2tlbiBhY2NvdW50IGluaXQgdHggZm9yIG11bHRpcGxlIHJlY2lwaWVudHMgc2lnbmVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBtdWx0aUF0YUluaXRCdWlsZGVyKHJlY2lwaWVudHMpO1xuICAgICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogYWNjb3VudC5wcnYgfSk7XG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgICBzaG91bGQuZXF1YWwocmF3VHgsIHRlc3REYXRhLk1VTFRJX0FUQV9JTklUX1NJR05FRF9UWF9PUFRJT05BTF9QQVJBTSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2J1aWxkIGFuIGFzc29jaWF0ZWQgdG9rZW4gYWNjb3VudCBpbml0IGZvciBtdWx0aXBsZSByZWNpcGllbnRzIHR4IHdpdGggbWVtbyBzaWduZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IG11bHRpQXRhSW5pdEJ1aWxkZXIocmVjaXBpZW50cyk7XG4gICAgICAgIHR4QnVpbGRlci5tZW1vKCd0ZXN0IG1lbW8gcGxlYXNlIGlnbm9yZScpO1xuICAgICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogYWNjb3VudC5wcnYgfSk7XG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgICBzaG91bGQuZXF1YWwocmF3VHgsIHRlc3REYXRhLk1VTFRJX0FUQV9JTklUX1NJR05FRF9UWF9XSVRIX01FTU9fT1BUSU9OQUxfUEFSQU0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnRmFpbCcsICgpID0+IHtcbiAgICAgIGl0KCdzaG91bGQgZmFpbCB0byBidWlsZCBhbiBhc3NvY2lhdGVkIHRva2VuIGFjY291bnQgaW5pdCB3aXRoIGR1cGxpY2F0ZSByZWNpcGllbnRzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBkdXBsaWNhdGVSZWNpcGllbnQgPSB7XG4gICAgICAgICAgb3duZXJBZGRyZXNzOiBzZW5kZXIucHVia2V5LFxuICAgICAgICAgIHRva2VuTmFtZTogbWludCxcbiAgICAgICAgICBhdGFBZGRyZXNzOiBzZW5kZXIuYXRhUHVia2V5LFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBtdWx0aUF0YUluaXRCdWlsZGVyKHJlY2lwaWVudHMpO1xuICAgICAgICBzaG91bGQoKCkgPT4gdHhCdWlsZGVyLmVuYWJsZVRva2VuKGR1cGxpY2F0ZVJlY2lwaWVudCkpLnRocm93RXJyb3IoXG4gICAgICAgICAgJ0ludmFsaWQgdHJhbnNhY3Rpb246IGludmFsaWQgZHVwbGljYXRlIHJlY2lwaWVudHMsIGdvdDogb3duZXIgMTJmNkQzV3ViR1ZlUW9IMm04a1R2dmNyYXNXZFhXd3RWelVDeVJORFp4QTIgYW5kIHRva2VuTmFtZSBzb2w6dXNkYyB0d2ljZSdcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYnVpbGQgYW4gYXNzb2NpYXRlZCB0b2tlbiBhY2NvdW50IGluaXQgdHggd2hlbiBtaW50IGlzIGludmFsaWQnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGVycm9yTWludFJlY2lwaWVudCA9IHtcbiAgICAgICAgICBvd25lckFkZHJlc3M6IG93bmVyUHVia2V5cy5wdWJrZXksXG4gICAgICAgICAgdG9rZW5OYW1lOiAnaW52YWxpZFRva2VuJyxcbiAgICAgICAgICBhdGFBZGRyZXNzOiBvd25lclB1YmtleXMuYXRhUHVia2V5LFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBtdWx0aUF0YUluaXRCdWlsZGVyKHJlY2lwaWVudHMpO1xuICAgICAgICBzaG91bGQoKCkgPT4gdHhCdWlsZGVyLmVuYWJsZVRva2VuKGVycm9yTWludFJlY2lwaWVudCkpLnRocm93RXJyb3IoXG4gICAgICAgICAgJ0ludmFsaWQgdHJhbnNhY3Rpb246IGludmFsaWQgdG9rZW4gbmFtZSwgZ290OiBpbnZhbGlkVG9rZW4nXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2J1aWxkIGEgd2FsbGV0IGluaXQgdHggYW5kIHNpZ24gd2l0aCBhbiBpbmNvcnJlY3QgYWNjb3VudCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gbXVsdGlBdGFJbml0QnVpbGRlcihyZWNpcGllbnRzKTtcbiAgICAgICAgdHhCdWlsZGVyLnNlbmRlcihhY2NvdW50LnB1Yik7XG4gICAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiB3cm9uZ0FjY291bnQucHJ2IH0pO1xuICAgICAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKS5zaG91bGQucmVqZWN0ZWRXaXRoKCd1bmtub3duIHNpZ25lcjogQ1A1RHBhYTQyUnRKbU11S3FDUXNMd21hNVloM2tudXZLc1lERlg4NUY0MVMnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYnVpbGQgd2hlbiBub25jZSBpcyBub3QgcHJvdmlkZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0QXRhSW5pdGlhbGl6YXRpb25CdWlsZGVyKCk7XG4gICAgICAgIHR4QnVpbGRlci5zZW5kZXIoYWNjb3VudC5wdWIpO1xuICAgICAgICB0eEJ1aWxkZXIuZW5hYmxlVG9rZW4oe1xuICAgICAgICAgIG93bmVyQWRkcmVzczogYWNjb3VudC5wdWIsXG4gICAgICAgICAgdG9rZW5OYW1lOiBtaW50LFxuICAgICAgICAgIGF0YUFkZHJlc3M6IHNlbmRlci5hdGFQdWJrZXksXG4gICAgICAgIH0pO1xuICAgICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogYWNjb3VudC5wcnYgfSk7XG4gICAgICAgIGF3YWl0IHR4QnVpbGRlci5idWlsZCgpLnNob3VsZC5yZWplY3RlZFdpdGgoJ0ludmFsaWQgdHJhbnNhY3Rpb246IG1pc3Npbmcgbm9uY2UgYmxvY2toYXNoJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2J1aWxkIHdoZW4gc2VuZGVyIGlzIG5vdCBwcm92aWRlZCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRBdGFJbml0aWFsaXphdGlvbkJ1aWxkZXIoKTtcbiAgICAgICAgdHhCdWlsZGVyLm5vbmNlKHJlY2VudEJsb2NrSGFzaCk7XG4gICAgICAgIHR4QnVpbGRlci5lbmFibGVUb2tlbih7XG4gICAgICAgICAgb3duZXJBZGRyZXNzOiBhY2NvdW50LnB1YixcbiAgICAgICAgICB0b2tlbk5hbWU6IG1pbnQsXG4gICAgICAgICAgYXRhQWRkcmVzczogc2VuZGVyLmF0YVB1YmtleSxcbiAgICAgICAgfSk7XG4gICAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiBhY2NvdW50LnBydiB9KTtcbiAgICAgICAgYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkuc2hvdWxkLnJlamVjdGVkV2l0aCgnSW52YWxpZCB0cmFuc2FjdGlvbjogbWlzc2luZyBzZW5kZXInKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYnVpbGQgd2hlbiByZWNpcGllbnQgaXMgbm90IHByb3ZpZGVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldEF0YUluaXRpYWxpemF0aW9uQnVpbGRlcigpO1xuICAgICAgICB0eEJ1aWxkZXIuc2VuZGVyKGFjY291bnQucHViKTtcbiAgICAgICAgdHhCdWlsZGVyLm5vbmNlKHJlY2VudEJsb2NrSGFzaCk7XG4gICAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiBhY2NvdW50LnBydiB9KTtcbiAgICAgICAgYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkuc2hvdWxkLnJlamVjdGVkV2l0aCgnTWludCBtdXN0IGJlIHNldCBiZWZvcmUgYnVpbGRpbmcgdGhlIHRyYW5zYWN0aW9uJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2J1aWxkIHdoZW4gcmVudEV4ZW1wdEFtb3VudCBpcyBpbnZhbGlkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBtdWx0aUF0YUluaXRCdWlsZGVyKHJlY2lwaWVudHMpO1xuICAgICAgICBzaG91bGQoKCkgPT4gdHhCdWlsZGVyLnJlbnRFeGVtcHRBbW91bnQoJ2ludmFsaWQgYW1vdW50JykpLnRocm93RXJyb3IoXG4gICAgICAgICAgJ0ludmFsaWQgdG9rZW5BY2NvdW50UmVudEV4ZW1wdEFtb3VudCwgZ290OiBpbnZhbGlkIGFtb3VudCdcbiAgICAgICAgKTtcbiAgICAgICAgc2hvdWxkKCgpID0+IHR4QnVpbGRlci5hc3NvY2lhdGVkVG9rZW5BY2NvdW50UmVudCgnaW52YWxpZCBhbW91bnQnKSkudGhyb3dFcnJvcihcbiAgICAgICAgICAnSW52YWxpZCB0b2tlbkFjY291bnRSZW50RXhlbXB0QW1vdW50LCBnb3Q6IGludmFsaWQgYW1vdW50J1xuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdidWlsZCB3aGVuIHRva2VuIG93bmVyIGlzIGludmFsaWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGludmFsaWRPd25lciA9IHtcbiAgICAgICAgICBvd25lckFkZHJlc3M6ICdpbnZhbGlkIG93bmVyJyxcbiAgICAgICAgICB0b2tlbk5hbWU6IG1pbnQsXG4gICAgICAgICAgYXRhQWRkcmVzczogc2VuZGVyLmF0YVB1YmtleSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gbXVsdGlBdGFJbml0QnVpbGRlcihyZWNpcGllbnRzKTtcbiAgICAgICAgc2hvdWxkKCgpID0+IHR4QnVpbGRlci5lbmFibGVUb2tlbihpbnZhbGlkT3duZXIpKS50aHJvd0Vycm9yKFxuICAgICAgICAgICdJbnZhbGlkIG9yIG1pc3Npbmcgb3duZXJBZGRyZXNzLCBnb3Q6IGludmFsaWQgb3duZXInXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3RvIHNpZ24gdHdpY2Ugd2l0aCB0aGUgc2FtZSBrZXknLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZnJvbSh0ZXN0RGF0YS5NVUxUSV9BVEFfSU5JVF9VTlNJR05FRF9UWCk7XG4gICAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiBhY2NvdW50LnBydiB9KTtcbiAgICAgICAgc2hvdWxkKCgpID0+IHR4QnVpbGRlci5zaWduKHsga2V5OiBhY2NvdW50LnBydiB9KSkudGhyb3dFcnJvcignRHVwbGljYXRlZCBzaWduZXI6ICcgKyBhY2NvdW50LnBydj8udG9TdHJpbmcoKSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0Zyb20gYW5kIHNpZ24nLCAoKSA9PiB7XG4gICAgZGVzY3JpYmUoJ1N1Y2NlZWQnLCAoKSA9PiB7XG4gICAgICBpdCgnYnVpbGQgZnJvbSBhIHVuc2lnbmVkIEFUQSBpbml0IGFuZCBzaWduIGl0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20odGVzdERhdGEuQVRBX0lOSVRfVU5TSUdORURfVFgpO1xuICAgICAgICAodHhCdWlsZGVyIGFzIEF0YUluaXRpYWxpemF0aW9uQnVpbGRlcikucmVudEV4ZW1wdEFtb3VudChyZW50QW1vdW50KTtcbiAgICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IGFjY291bnQucHJ2IH0pO1xuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgICAgdmVyaWZ5SW5wdXRPdXRwdXRBbmRSYXdUcmFuc2FjdGlvbih0eCwgcmF3VHgpO1xuICAgICAgICBzaG91bGQuZXF1YWwocmF3VHgsIHRlc3REYXRhLkFUQV9JTklUX1NJR05FRF9UWCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2J1aWxkIGZyb20gYSB1bnNpZ25lZCBBVEEgaW5pdCB3aXRoIG1lbW8gYW5kIHNpZ24gaXQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZnJvbSh0ZXN0RGF0YS5BVEFfSU5JVF9VTlNJR05FRF9UWF9XSVRIX01FTU8pO1xuICAgICAgICAodHhCdWlsZGVyIGFzIEF0YUluaXRpYWxpemF0aW9uQnVpbGRlcikucmVudEV4ZW1wdEFtb3VudChyZW50QW1vdW50KTtcbiAgICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IGFjY291bnQucHJ2IH0pO1xuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgICAgdmVyaWZ5SW5wdXRPdXRwdXRBbmRSYXdUcmFuc2FjdGlvbih0eCwgcmF3VHgpO1xuICAgICAgICBzaG91bGQuZXF1YWwocmF3VHgsIHRlc3REYXRhLkFUQV9JTklUX1NJR05FRF9UWF9XSVRIX01FTU8pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdidWlsZCBmcm9tIGEgdW5zaWduZWQgQVRBIGluaXQgd2l0aCBkaWZmIG93bmVyIGFuZCBzaWduIGl0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20odGVzdERhdGEuQVRBX0lOSVRfVU5TSUdORURfRElGRl9PV05FUl9UWCk7XG4gICAgICAgICh0eEJ1aWxkZXIgYXMgQXRhSW5pdGlhbGl6YXRpb25CdWlsZGVyKS5yZW50RXhlbXB0QW1vdW50KHJlbnRBbW91bnQpO1xuICAgICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogYWNjb3VudC5wcnYgfSk7XG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgICB2ZXJpZnlJbnB1dE91dHB1dEFuZFJhd1RyYW5zYWN0aW9uKHR4LCByYXdUeCwgb3duZXJQdWJrZXlzKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKHJhd1R4LCB0ZXN0RGF0YS5BVEFfSU5JVF9TSUdORURfRElGRl9PV05FUl9UWCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2J1aWxkIGZyb20gYSB1bnNpZ25lZCBBVEEgaW5pdCB3aXRoIGRpZmYgb3duZXIgd2l0aCBtZW1vIGFuZCBzaWduIGl0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20odGVzdERhdGEuQVRBX0lOSVRfVU5TSUdORURfRElGRl9PV05FUl9UWF9XSVRIX01FTU8pO1xuICAgICAgICAodHhCdWlsZGVyIGFzIEF0YUluaXRpYWxpemF0aW9uQnVpbGRlcikucmVudEV4ZW1wdEFtb3VudChyZW50QW1vdW50KTtcbiAgICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IGFjY291bnQucHJ2IH0pO1xuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgICAgdmVyaWZ5SW5wdXRPdXRwdXRBbmRSYXdUcmFuc2FjdGlvbih0eCwgcmF3VHgsIG93bmVyUHVia2V5cyk7XG4gICAgICAgIHNob3VsZC5lcXVhbChyYXdUeCwgdGVzdERhdGEuQVRBX0lOSVRfU0lHTkVEX0RJRkZfT1dORVJfVFhfV0lUSF9NRU1PKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYnVpbGQgZnJvbSBhIHVuc2lnbmVkIEFUQSBpbml0IGZvciBtdWx0aSByZWNpcGllbnRzIGFuZCBzaWduIGl0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20odGVzdERhdGEuTVVMVElfQVRBX0lOSVRfVU5TSUdORURfVFgpO1xuICAgICAgICAodHhCdWlsZGVyIGFzIEF0YUluaXRpYWxpemF0aW9uQnVpbGRlcikucmVudEV4ZW1wdEFtb3VudChyZW50QW1vdW50KTtcbiAgICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IGFjY291bnQucHJ2IH0pO1xuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgICAgc2hvdWxkLmVxdWFsKHJhd1R4LCB0ZXN0RGF0YS5NVUxUSV9BVEFfSU5JVF9TSUdORURfVFgpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdidWlsZCBmcm9tIGEgdW5zaWduZWQgQVRBIGluaXQgZm9yIG11bHRpIHJlY2lwaWVudHMgd2l0aCBtZW1vIGFuZCBzaWduIGl0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20odGVzdERhdGEuTVVMVElfQVRBX0lOSVRfVU5TSUdORURfVFhfV0lUSF9NRU1PKTtcbiAgICAgICAgKHR4QnVpbGRlciBhcyBBdGFJbml0aWFsaXphdGlvbkJ1aWxkZXIpLnJlbnRFeGVtcHRBbW91bnQocmVudEFtb3VudCk7XG4gICAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiBhY2NvdW50LnBydiB9KTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAgIHNob3VsZC5lcXVhbChyYXdUeCwgdGVzdERhdGEuTVVMVElfQVRBX0lOSVRfU0lHTkVEX1RYX1dJVEhfTUVNTyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2J1aWxkIGZyb20gYSB1bnNpZ25lZCBBVEEgaW5pdCBmb3IgbXVsdGkgcmVjaXBpZW50cyB3aXRoIG1lbW8gYW5kIHNpZ24gaXQgd2l0aCBvcHRpbmFsIHBhcmFtJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20odGVzdERhdGEuTVVMVElfQVRBX0lOSVRfVU5TSUdORURfVFhfV0lUSF9NRU1PX09QVElPTkFMX1BBUkFNKTtcbiAgICAgICAgKHR4QnVpbGRlciBhcyBBdGFJbml0aWFsaXphdGlvbkJ1aWxkZXIpLnJlbnRFeGVtcHRBbW91bnQocmVudEFtb3VudCk7XG4gICAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiBhY2NvdW50LnBydiB9KTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAgIHNob3VsZC5lcXVhbChyYXdUeCwgdGVzdERhdGEuTVVMVElfQVRBX0lOSVRfU0lHTkVEX1RYX1dJVEhfTUVNT19PUFRJT05BTF9QQVJBTTEpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdidWlsZCBmcm9tIGEgdW5zaWduZWQgcmF3IHRva2VuIHRyYW5zZmVyIHdpdGggb3B0aW5hbCBwYXJhbScsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5mcm9tKFxuICAgICAgICAgIHRlc3REYXRhLlRPS0VOX1RSQU5TRkVSX1VOU0lHTkVEX1dJVEhfQ1JFQVRFX0FUQV9BTkRfTUVNT19BTkRfRFVSQUJMRV9OT05DRV9XSVRIX09QVElPTkFMX1BBUkFNU1xuICAgICAgICApIGFzIFRva2VuVHJhbnNmZXJCdWlsZGVyO1xuXG4gICAgICAgICh0eEJ1aWxkZXIgYXMgYW55KS5fc2VuZFBhcmFtc1swXS50b2tlbk5hbWUgPSAndHNvbDphbXMnO1xuICAgICAgICAodHhCdWlsZGVyIGFzIGFueSkuX2NyZWF0ZUF0YVBhcmFtc1swXS50b2tlbk5hbWUgPSAndHNvbDphbXMnO1xuXG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgICBzaG91bGQuZXF1YWwoXG4gICAgICAgICAgcmF3VHgsXG4gICAgICAgICAgdGVzdERhdGEuVE9LRU5fVFJBTlNGRVJfVU5TSUdORURfV0lUSF9DUkVBVEVfQVRBX0FORF9NRU1PX0FORF9EVVJBQkxFX05PTkNFX1dJVEhfT1BUSU9OQUxfUEFSQU1TXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2J1aWxkIGZyb20gYW4gdW5zaWduZWQgQVRBIGluaXQgd2l0aCBkdXJhYmxlIG5vbmNlIGFuZCBzaWduIGl0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20odGVzdERhdGEuQVRBX0lOSVRfVU5TSUdORURfVFhfRFVSQUJMRV9OT05DRSk7XG4gICAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiBhY2NvdW50LnBydiB9KTtcblxuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgICAgc2hvdWxkLmVxdWFsKHJhd1R4LCB0ZXN0RGF0YS5BVEFfSU5JVF9TSUdORURfVFhfRFVSQUJMRV9OT05DRSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdGYWlsJywgKCkgPT4ge1xuICAgICAgaXQoJ2J1aWxkIGZyb20gYSB1bnNpZ25lZCBBVEEgaW5pdCBhbmQgZmFpbCB0byBzaWduIGl0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20odGVzdERhdGEuQVRBX0lOSVRfVU5TSUdORURfVFgpO1xuICAgICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogd3JvbmdBY2NvdW50LnBydiB9KTtcbiAgICAgICAgYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkuc2hvdWxkLnJlamVjdGVkV2l0aCgndW5rbm93biBzaWduZXI6IENQNURwYWE0MlJ0Sm1NdUtxQ1FzTHdtYTVZaDNrbnV2S3NZREZYODVGNDFTJyk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdidWlsZCBmcm9tIGEgc2lnbmVkIEFUQSBpbml0IGFuZCBmYWlsIHRvIHNpZ24gaXQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZnJvbSh0ZXN0RGF0YS5BVEFfSU5JVF9TSUdORURfVFgpO1xuICAgICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogd3JvbmdBY2NvdW50LnBydiB9KTtcbiAgICAgICAgYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkuc2hvdWxkLnJlamVjdGVkV2l0aCgndW5rbm93biBzaWduZXI6IENQNURwYWE0MlJ0Sm1NdUtxQ1FzTHdtYTVZaDNrbnV2S3NZREZYODVGNDFTJyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
508
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRhSW5pdEJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb25CdWlsZGVyL2F0YUluaXRCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsc0NBQThGO0FBQzlGLG9EQUE0QjtBQUM1Qiw4REFBZ0Q7QUFFaEQsNERBQXlEO0FBRXpELFFBQVEsQ0FBQyxzQ0FBc0MsRUFBRSxHQUFHLEVBQUU7SUFDcEQsU0FBUyxrQ0FBa0MsQ0FDekMsRUFBbUIsRUFDbkIsS0FBYSxFQUNiLFFBQStDLE1BQU07UUFFckQsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztRQUNsRCxJQUFJLGtCQUFrQixDQUFDO1FBQ3ZCLEtBQUssTUFBTSxXQUFXLElBQUksWUFBWSxFQUFFLENBQUM7WUFDdkMsSUFBSSxXQUFXLENBQUMsSUFBSSxLQUFLLDhCQUE4QixFQUFFLENBQUM7Z0JBQ3hELGtCQUFrQixHQUFHLFdBQVcsQ0FBQztnQkFDakMsTUFBTTtZQUNSLENBQUM7UUFDSCxDQUFDO1FBQ0QsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNqQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFdkQsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsV0FBSyxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FB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QyxDQUFDO1lBQzlHLENBQUMsQ0FBQyxDQUFDO1lBQ0gsRUFBRSxDQUFDLGtEQUFrRCxFQUFFLEtBQUssSUFBSSxFQUFFO2dCQUNoRSxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO2dCQUM1RCxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO2dCQUMxQyxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLDhEQUE4RCxDQUFDLENBQUM7WUFDOUcsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBLZXlQYWlyLCBVdGlscywgQXRhSW5pdGlhbGl6YXRpb25CdWlsZGVyLCBUb2tlblRyYW5zZmVyQnVpbGRlciB9IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgKiBhcyB0ZXN0RGF0YSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvc29sJztcbmltcG9ydCB7IEJhc2VUcmFuc2FjdGlvbiB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IGdldEJ1aWxkZXJGYWN0b3J5IH0gZnJvbSAnLi4vZ2V0QnVpbGRlckZhY3RvcnknO1xuXG5kZXNjcmliZSgnU29sIEFzc29jaWF0ZWQgVG9rZW4gQWNjb3VudCBCdWlsZGVyJywgKCkgPT4ge1xuICBmdW5jdGlvbiB2ZXJpZnlJbnB1dE91dHB1dEFuZFJhd1RyYW5zYWN0aW9uKFxuICAgIHR4OiBCYXNlVHJhbnNhY3Rpb24sXG4gICAgcmF3VHg6IHN0cmluZyxcbiAgICBvd25lcjogeyBwdWJrZXk6IHN0cmluZzsgYXRhUHVia2V5OiBzdHJpbmcgfSA9IHNlbmRlclxuICApIHtcbiAgICB0eC5pbnB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgwKTtcbiAgICB0eC5vdXRwdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMCk7XG4gICAgY29uc3QgaW5zdHJ1Y3Rpb25zID0gdHgudG9Kc29uKCkuaW5zdHJ1Y3Rpb25zRGF0YTtcbiAgICBsZXQgYXRhSW5pdEluc3RydWN0aW9uO1xuICAgIGZvciAoY29uc3QgaW5zdHJ1Y3Rpb24gb2YgaW5zdHJ1Y3Rpb25zKSB7XG4gICAgICBpZiAoaW5zdHJ1Y3Rpb24udHlwZSA9PT0gJ0NyZWF0ZUFzc29jaWF0ZWRUb2tlbkFjY291bnQnKSB7XG4gICAgICAgIGF0YUluaXRJbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgc2hvdWxkLmV4aXN0KGF0YUluaXRJbnN0cnVjdGlvbik7XG4gICAgYXRhSW5pdEluc3RydWN0aW9uLnBhcmFtcy50b2tlbk5hbWUuc2hvdWxkLmVxdWFsKG1pbnQpO1xuXG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmlzVmFsaWRSYXdUcmFuc2FjdGlvbihyYXdUeCksIHRydWUpO1xuICB9XG5cbiAgY29uc3QgZmFjdG9yeSA9IGdldEJ1aWxkZXJGYWN0b3J5KCdzb2wnKTtcbiAgY29uc3QgYXRhSW5pdEJ1aWxkZXIgPSAoKSA9PiB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRBdGFJbml0aWFsaXphdGlvbkJ1aWxkZXIoKTtcbiAgICB0eEJ1aWxkZXIubm9uY2UocmVjZW50QmxvY2tIYXNoKTtcbiAgICB0eEJ1aWxkZXIuc2VuZGVyKGFjY291bnQucHViKTtcbiAgICB0eEJ1aWxkZXIubWludChtaW50KTtcbiAgICB0eEJ1aWxkZXIucmVudEV4ZW1wdEFtb3VudChyZW50QW1vdW50KTtcblxuICAgIHJldHVybiB0eEJ1aWxkZXI7XG4gIH07XG5cbiAgY29uc3QgYWNjb3VudCA9IG5ldyBLZXlQYWlyKHRlc3REYXRhLmFzc29jaWF0ZWRUb2tlbkFjY291bnRzLmFjY291bnRzWzBdKS5nZXRLZXlzKCk7XG4gIGNvbnN0IG5vbmNlQWNjb3VudCA9IG5ldyBLZXlQYWlyKHRlc3REYXRhLm5vbmNlQWNjb3VudCkuZ2V0S2V5cygpO1xuICBjb25zdCBzZW5kZXIgPSB7XG4gICAgcHVia2V5OiBhY2NvdW50LnB1YixcbiAgICBhdGFQdWJrZXk6IHRlc3REYXRhLmFzc29jaWF0ZWRUb2tlbkFjY291bnRzLmFjY291bnRzWzBdLmF0YSxcbiAgfTtcbiAgY29uc3Qgd3JvbmdBY2NvdW50ID0gbmV3IEtleVBhaXIoeyBwcnY6IHRlc3REYXRhLnBydktleXMucHJ2S2V5MS5iYXNlNTggfSkuZ2V0S2V5cygpO1xuICBjb25zdCBtaW50ID0gdGVzdERhdGEuYXNzb2NpYXRlZFRva2VuQWNjb3VudHMubWludDtcbiAgY29uc3QgcmVjZW50QmxvY2tIYXNoID0gJ0dIdFhRQnNvWkhWbk5GYTlZZXZBekZyMTdESmpnSFhrM3ljVEtENXhEM1ppJztcbiAgY29uc3QgcmVudEFtb3VudCA9ICczMDAwMCc7XG4gIGNvbnN0IHRva2VuMjAyMlByb2dyYW1JZCA9ICdUb2tlbnpRZEJOYkxxUDVWRWhka0FTNkVQRkxDMVBIbkJxQ1hFcFB4dUViJztcblxuICAvLyBmb3IgZGlmZiBvd25lciBjYXNlXG4gIGNvbnN0IGFjY291bnRPd25lciA9IG5ldyBLZXlQYWlyKHRlc3REYXRhLmFzc29jaWF0ZWRUb2tlbkFjY291bnRzLmFjY291bnRzWzFdKS5nZXRLZXlzKCk7XG4gIGNvbnN0IG93bmVyUHVia2V5cyA9IHtcbiAgICBwdWJrZXk6IGFjY291bnRPd25lci5wdWIsXG4gICAgYXRhUHVia2V5OiB0ZXN0RGF0YS5hc3NvY2lhdGVkVG9rZW5BY2NvdW50cy5hY2NvdW50c1sxXS5hdGEsXG4gIH07XG5cbiAgZGVzY3JpYmUoJ0J1aWxkIGFuZCBzaWduJywgKCkgPT4ge1xuICAgIGRlc2NyaWJlKCdTdWNjZWVkJywgKCkgPT4ge1xuICAgICAgaXQoJ2J1aWxkIGFuIGFzc29jaWF0ZWQgdG9rZW4gYWNjb3VudCBpbml0IHR4IHVuc2lnbmVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBhdGFJbml0QnVpbGRlcigpO1xuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgICAgdmVyaWZ5SW5wdXRPdXRwdXRBbmRSYXdUcmFuc2FjdGlvbih0eCwgcmF3VHgpO1xuICAgICAgICBzaG91bGQuZXF1YWwocmF3VHgsIHRlc3REYXRhLkFUQV9JTklUX1VOU0lHTkVEX1RYKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYnVpbGQgYW4gYXNzb2NpYXRlZCB0b2tlbiBhY2NvdW50IGluaXQgdHggdW5zaWduZWQgd2l0aCBtZW1vJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBhdGFJbml0QnVpbGRlcigpO1xuICAgICAgICB0eEJ1aWxkZXIubWVtbygndGVzdCBtZW1vIHBsZWFzZSBpZ25vcmUnKTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAgIHZlcmlmeUlucHV0T3V0cHV0QW5kUmF3VHJhbnNhY3Rpb24odHgsIHJhd1R4KTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKHJhd1R4LCB0ZXN0RGF0YS5BVEFfSU5JVF9VTlNJR05FRF9UWF9XSVRIX01FTU8pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdidWlsZCBhbiBhc3NvY2lhdGVkIHRva2VuIGFjY291bnQgaW5pdCB0eCBzaWduZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGF0YUluaXRCdWlsZGVyKCk7XG4gICAgICAgIHR4QnVpbGRlci5zZW5kZXIoYWNjb3VudC5wdWIpO1xuICAgICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogYWNjb3VudC5wcnYgfSk7XG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgICB2ZXJpZnlJbnB1dE91dHB1dEFuZFJhd1RyYW5zYWN0aW9uKHR4LCByYXdUeCk7XG4gICAgICAgIHNob3VsZC5lcXVhbChyYXdUeCwgdGVzdERhdGEuQVRBX0lOSVRfU0lHTkVEX1RYKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYnVpbGQgYW4gYXNzb2NpYXRlZCB0b2tlbiBhY2NvdW50IGluaXQgdHggd2l0aCBtZW1vIHNpZ25lZCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gYXRhSW5pdEJ1aWxkZXIoKTtcbiAgICAgICAgdHhCdWlsZGVyLm1lbW8oJ3Rlc3QgbWVtbyBwbGVhc2UgaWdub3JlJyk7XG4gICAgICAgIHR4QnVpbGRlci5zZW5kZXIoYWNjb3VudC5wdWIpO1xuICAgICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogYWNjb3VudC5wcnYgfSk7XG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgICB2ZXJpZnlJbnB1dE91dHB1dEFuZFJhd1RyYW5zYWN0aW9uKHR4LCByYXdUeCk7XG4gICAgICAgIHNob3VsZC5lcXVhbChyYXdUeCwgdGVzdERhdGEuQVRBX0lOSVRfU0lHTkVEX1RYX1dJVEhfTUVNTyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2J1aWxkIGFuIGFzc29jaWF0ZWQgdG9rZW4gYWNjb3VudCBpbml0IHR4IHdpdGggZHVyYWJsZSBub25jZSB1bnNpZ25lZCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gYXRhSW5pdEJ1aWxkZXIoKTtcbiAgICAgICAgdHhCdWlsZGVyLm1lbW8oJ3Rlc3QgbWVtbyBwbGVhc2UgaWdub3JlJyk7XG4gICAgICAgIHR4QnVpbGRlci5zZW5kZXIoYWNjb3VudC5wdWIpO1xuICAgICAgICB0eEJ1aWxkZXIubm9uY2UocmVjZW50QmxvY2tIYXNoLCB7IHdhbGxldE5vbmNlQWRkcmVzczogbm9uY2VBY2NvdW50LnB1YiwgYXV0aFdhbGxldEFkZHJlc3M6IGFjY291bnQucHViIH0pO1xuXG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgICB2ZXJpZnlJbnB1dE91dHB1dEFuZFJhd1RyYW5zYWN0aW9uKHR4LCByYXdUeCk7XG5cbiAgICAgICAgc2hvdWxkLmVxdWFsKHJhd1R4LCB0ZXN0RGF0YS5BVEFfSU5JVF9VTlNJR05FRF9UWF9EVVJBQkxFX05PTkNFKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYnVpbGQgYW4gYXNzb2NpYXRlZCB0b2tlbiBhY2NvdW50IGluaXQgdHggd2l0aCBkdXJhYmxlIG5vbmNlIHNpZ25lZCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gYXRhSW5pdEJ1aWxkZXIoKTtcbiAgICAgICAgdHhCdWlsZGVyLm1lbW8oJ3Rlc3QgbWVtbyBwbGVhc2UgaWdub3JlJyk7XG4gICAgICAgIHR4QnVpbGRlci5zZW5kZXIoYWNjb3VudC5wdWIpO1xuICAgICAgICB0eEJ1aWxkZXIubm9uY2UocmVjZW50QmxvY2tIYXNoLCB7IHdhbGxldE5vbmNlQWRkcmVzczogbm9uY2VBY2NvdW50LnB1YiwgYXV0aFdhbGxldEFkZHJlc3M6IGFjY291bnQucHViIH0pO1xuICAgICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogYWNjb3VudC5wcnYgfSk7XG5cbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAgIHZlcmlmeUlucHV0T3V0cHV0QW5kUmF3VHJhbnNhY3Rpb24odHgsIHJhd1R4KTtcblxuICAgICAgICBzaG91bGQuZXF1YWwocmF3VHgsIHRlc3REYXRhLkFUQV9JTklUX1NJR05FRF9UWF9EVVJBQkxFX05PTkNFKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ0FUQSBjcmVhdGlvbiB3aXRoIGRpZmZlcmVudCBvd25lcicsICgpID0+IHtcbiAgICAgIGl0KCdidWlsZCBhbiBhc3NvY2lhdGVkIHRva2VuIGFjY291bnQgaW5pdCBmb3IgZGlmZiBvd25lciB0eCB1bnNpZ25lZCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gYXRhSW5pdEJ1aWxkZXIoKTtcbiAgICAgICAgdHhCdWlsZGVyLm93bmVyKGFjY291bnRPd25lci5wdWIpO1xuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgICAgdmVyaWZ5SW5wdXRPdXRwdXRBbmRSYXdUcmFuc2FjdGlvbih0eCwgcmF3VHgsIG93bmVyUHVia2V5cyk7XG4gICAgICAgIHNob3VsZC5lcXVhbChyYXdUeCwgdGVzdERhdGEuQVRBX0lOSVRfVU5TSUdORURfRElGRl9PV05FUl9UWCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2J1aWxkIGFuIGFzc29jaWF0ZWQgdG9rZW4gYWNjb3VudCBpbml0IGZvciBkaWZmIG93bmVyIHR4IHVuc2lnbmVkIHdpdGggbWVtbycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gYXRhSW5pdEJ1aWxkZXIoKTtcbiAgICAgICAgdHhCdWlsZGVyLm93bmVyKGFjY291bnRPd25lci5wdWIpO1xuICAgICAgICB0eEJ1aWxkZXIubWVtbygndGVzdCBtZW1vIHBsZWFzZSBpZ25vcmUnKTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAgIHZlcmlmeUlucHV0T3V0cHV0QW5kUmF3VHJhbnNhY3Rpb24odHgsIHJhd1R4LCBvd25lclB1YmtleXMpO1xuICAgICAgICBzaG91bGQuZXF1YWwocmF3VHgsIHRlc3REYXRhLkFUQV9JTklUX1VOU0lHTkVEX0RJRkZfT1dORVJfVFhfV0lUSF9NRU1PKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYnVpbGQgYW4gYXNzb2NpYXRlZCB0b2tlbiBhY2NvdW50IGluaXQgZm9yIGRpZmYgb3duZXIgdHggc2lnbmVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBhdGFJbml0QnVpbGRlcigpO1xuICAgICAgICB0eEJ1aWxkZXIub3duZXIoYWNjb3VudE93bmVyLnB1Yik7XG4gICAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiBhY2NvdW50LnBydiB9KTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAgIHZlcmlmeUlucHV0T3V0cHV0QW5kUmF3VHJhbnNhY3Rpb24odHgsIHJhd1R4LCBvd25lclB1YmtleXMpO1xuICAgICAgICBzaG91bGQuZXF1YWwocmF3VHgsIHRlc3REYXRhLkFUQV9JTklUX1NJR05FRF9ESUZGX09XTkVSX1RYKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYnVpbGQgYW4gYXNzb2NpYXRlZCB0b2tlbiBhY2NvdW50IGluaXQgZm9yIGRpZmYgb3duZXIgdHggd2l0aCBtZW1vIHNpZ25lZCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gYXRhSW5pdEJ1aWxkZXIoKTtcbiAgICAgICAgdHhCdWlsZGVyLm93bmVyKGFjY291bnRPd25lci5wdWIpO1xuICAgICAgICB0eEJ1aWxkZXIubWVtbygndGVzdCBtZW1vIHBsZWFzZSBpZ25vcmUnKTtcbiAgICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IGFjY291bnQucHJ2IH0pO1xuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgICAgdmVyaWZ5SW5wdXRPdXRwdXRBbmRSYXdUcmFuc2FjdGlvbih0eCwgcmF3VHgsIG93bmVyUHVia2V5cyk7XG4gICAgICAgIHNob3VsZC5lcXVhbChyYXdUeCwgdGVzdERhdGEuQVRBX0lOSVRfU0lHTkVEX0RJRkZfT1dORVJfVFhfV0lUSF9NRU1PKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ0ZhaWwnLCAoKSA9PiB7XG4gICAgICBpdCgnYnVpbGQgYW4gYXNzb2NpYXRlZCB0b2tlbiBhY2NvdW50IGluaXQgdHggd2hlbiBtaW50IGlzIGludmFsaWQnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGF0YUluaXRCdWlsZGVyKCk7XG4gICAgICAgIHNob3VsZCgoKSA9PiB0eEJ1aWxkZXIubWludCgnaW52YWxpZFRva2VuJykpLnRocm93RXJyb3IoXG4gICAgICAgICAgJ0ludmFsaWQgdHJhbnNhY3Rpb246IGludmFsaWQgdG9rZW4gbmFtZSwgZ290OiBpbnZhbGlkVG9rZW4nXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2J1aWxkIGEgd2FsbGV0IGluaXQgdHggYW5kIHNpZ24gd2l0aCBhbiBpbmNvcnJlY3QgYWNjb3VudCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gYXRhSW5pdEJ1aWxkZXIoKTtcbiAgICAgICAgdHhCdWlsZGVyLnNlbmRlcihhY2NvdW50LnB1Yik7XG4gICAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiB3cm9uZ0FjY291bnQucHJ2IH0pO1xuICAgICAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKS5zaG91bGQucmVqZWN0ZWRXaXRoKCd1bmtub3duIHNpZ25lcjogQ1A1RHBhYTQyUnRKbU11S3FDUXNMd21hNVloM2tudXZLc1lERlg4NUY0MVMnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYnVpbGQgd2hlbiBub25jZSBpcyBub3QgcHJvdmlkZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0QXRhSW5pdGlhbGl6YXRpb25CdWlsZGVyKCk7XG4gICAgICAgIHR4QnVpbGRlci5zZW5kZXIoYWNjb3VudC5wdWIpO1xuICAgICAgICB0eEJ1aWxkZXIubWludChtaW50KTtcbiAgICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IGFjY291bnQucHJ2IH0pO1xuICAgICAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKS5zaG91bGQucmVqZWN0ZWRXaXRoKCdJbnZhbGlkIHRyYW5zYWN0aW9uOiBtaXNzaW5nIG5vbmNlIGJsb2NraGFzaCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdidWlsZCB3aGVuIHNlbmRlciBpcyBub3QgcHJvdmlkZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0QXRhSW5pdGlhbGl6YXRpb25CdWlsZGVyKCk7XG4gICAgICAgIHR4QnVpbGRlci5ub25jZShyZWNlbnRCbG9ja0hhc2gpO1xuICAgICAgICB0eEJ1aWxkZXIubWludChtaW50KTtcbiAgICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IGFjY291bnQucHJ2IH0pO1xuICAgICAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKS5zaG91bGQucmVqZWN0ZWRXaXRoKCdJbnZhbGlkIHRyYW5zYWN0aW9uOiBtaXNzaW5nIHNlbmRlcicpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdidWlsZCB3aGVuIG1pbnQgaXMgbm90IHByb3ZpZGVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldEF0YUluaXRpYWxpemF0aW9uQnVpbGRlcigpO1xuICAgICAgICB0eEJ1aWxkZXIuc2VuZGVyKGFjY291bnQucHViKTtcbiAgICAgICAgdHhCdWlsZGVyLm5vbmNlKHJlY2VudEJsb2NrSGFzaCk7XG4gICAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiBhY2NvdW50LnBydiB9KTtcbiAgICAgICAgYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkuc2hvdWxkLnJlamVjdGVkV2l0aCgnTWludCBtdXN0IGJlIHNldCBiZWZvcmUgYnVpbGRpbmcgdGhlIHRyYW5zYWN0aW9uJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2J1aWxkIHdoZW4gbWludCBpcyBpbnZhbGlkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldEF0YUluaXRpYWxpemF0aW9uQnVpbGRlcigpO1xuICAgICAgICBzaG91bGQoKCkgPT4gdHhCdWlsZGVyLm1pbnQoJ3NvbDppbnZhbGlkIG1pbnQnKSkudGhyb3dFcnJvcihcbiAgICAgICAgICAnSW52YWxpZCB0cmFuc2FjdGlvbjogaW52YWxpZCB0b2tlbiBuYW1lLCBnb3Q6IHNvbDppbnZhbGlkIG1pbnQnXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2J1aWxkIHdoZW4gcmVudEV4ZW1wdEFtb3VudCBpcyBpbnZhbGlkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBhdGFJbml0QnVpbGRlcigpO1xuICAgICAgICBzaG91bGQoKCkgPT4gdHhCdWlsZGVyLnJlbnRFeGVtcHRBbW91bnQoJ2ludmFsaWQgYW1vdW50JykpLnRocm93RXJyb3IoXG4gICAgICAgICAgJ0ludmFsaWQgdG9rZW5BY2NvdW50UmVudEV4ZW1wdEFtb3VudCwgZ290OiBpbnZhbGlkIGFtb3VudCdcbiAgICAgICAgKTtcbiAgICAgICAgc2hvdWxkKCgpID0+IHR4QnVpbGRlci5hc3NvY2lhdGVkVG9rZW5BY2NvdW50UmVudCgnaW52YWxpZCBhbW91bnQnKSkudGhyb3dFcnJvcihcbiAgICAgICAgICAnSW52YWxpZCB0b2tlbkFjY291bnRSZW50RXhlbXB0QW1vdW50LCBnb3Q6IGludmFsaWQgYW1vdW50J1xuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdidWlsZCB3aGVuIG93bmVyIGlzIGludmFsaWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGF0YUluaXRCdWlsZGVyKCk7XG4gICAgICAgIHNob3VsZCgoKSA9PiB0eEJ1aWxkZXIub3duZXIoJ2ludmFsaWQgb3duZXInKSkudGhyb3dFcnJvcihcbiAgICAgICAgICAnSW52YWxpZCBvciBtaXNzaW5nIG93bmVyQWRkcmVzcywgZ290OiBpbnZhbGlkIG93bmVyJ1xuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCd0byBzaWduIHR3aWNlIHdpdGggdGhlIHNhbWUga2V5JywgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20odGVzdERhdGEuQVRBX0lOSVRfVU5TSUdORURfVFgpO1xuICAgICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogYWNjb3VudC5wcnYgfSk7XG4gICAgICAgIHNob3VsZCgoKSA9PiB0eEJ1aWxkZXIuc2lnbih7IGtleTogYWNjb3VudC5wcnYgfSkpLnRocm93RXJyb3IoJ0R1cGxpY2F0ZWQgc2lnbmVyOiAnICsgYWNjb3VudC5wcnY/LnRvU3RyaW5nKCkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdCdWlsZCBhbmQgc2lnbiB3aXRoIGVuYWJsZVRva2VuJywgKCkgPT4ge1xuICAgIGNvbnN0IHJlY2lwaWVudHMgPSBbXG4gICAgICB7XG4gICAgICAgIG93bmVyQWRkcmVzczogc2VuZGVyLnB1YmtleSxcbiAgICAgICAgdG9rZW5OYW1lOiBtaW50LFxuICAgICAgICBhdGFBZGRyZXNzOiBzZW5kZXIuYXRhUHVia2V5LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgb3duZXJBZGRyZXNzOiBvd25lclB1YmtleXMucHVia2V5LFxuICAgICAgICB0b2tlbk5hbWU6ICdzb2w6cmF5JyxcbiAgICAgICAgYXRhQWRkcmVzczogJ0FDRXV6WXRSNGdCRnQ2SExRVFlpc2cyVDdrOFZoNHNzMVNwbnFtYlZRU055JyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG93bmVyQWRkcmVzczogb3duZXJQdWJrZXlzLnB1YmtleSxcbiAgICAgICAgdG9rZW5OYW1lOiAndHNvbDphbXMnLFxuICAgICAgICBhdGFBZGRyZXNzOiAnQUNFdXpZdFI0Z0JGdDZITFFUWWlzZzJUN2s4Vmg0c3MxU3BucW1iVlFTTnknLFxuICAgICAgICB0b2tlbkFkZHJlc3M6ICdGNHVMZVhpb0Z6M2h3MTNNcG9zdXdhUWJNY1piQ2pxdkVHUFBlUlJCMUJ5ZicsXG4gICAgICAgIHByb2dyYW1JZDogJ1Rva2Vua2VnUWZlWnlpTndBSmJOYkdLUEZYQ1d1QnZmOVNzNjIzVlE1REEnLFxuICAgICAgfSxcbiAgICBdO1xuICAgIGNvbnN0IG11bHRpQXRhSW5pdEJ1aWxkZXIgPSAocmVjaXBpZW50cykgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRBdGFJbml0aWFsaXphdGlvbkJ1aWxkZXIoKTtcbiAgICAgIHR4QnVpbGRlci5ub25jZShyZWNlbnRCbG9ja0hhc2gpO1xuICAgICAgcmVjaXBpZW50cy5mb3JFYWNoKChyZWNpcGllbnQpID0+IHtcbiAgICAgICAgdHhCdWlsZGVyLmVuYWJsZVRva2VuKHJlY2lwaWVudCk7XG4gICAgICB9KTtcbiAgICAgIHR4QnVpbGRlci5zZW5kZXIoc2VuZGVyLnB1YmtleSk7XG4gICAgICB0eEJ1aWxkZXIucmVudEV4ZW1wdEFtb3VudChyZW50QW1vdW50KTtcblxuICAgICAgcmV0dXJuIHR4QnVpbGRlcjtcbiAgICB9O1xuXG4gICAgZGVzY3JpYmUoJ0FUQSBjcmVhdGlvbiBmb3IgbXVsdGlwbGUgcmVjaXBpZW50cycsICgpID0+IHtcbiAgICAgIGl0KCdidWlsZCBhbiBhc3NvY2lhdGVkIHRva2VuIGFjY291bnQgaW5pdCBmb3IgbXVsdGlwbGUgcmVjaXBpZW50cycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gbXVsdGlBdGFJbml0QnVpbGRlcihyZWNpcGllbnRzKTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgICBjb25zdCBvd25lclJheUFUQSA9ICdBQ0V1ell0UjRnQkZ0NkhMUVRZaXNnMlQ3azhWaDRzczFTcG5xbWJWUVNOeSc7XG5cbiAgICAgICAgdHguaW5wdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMCk7XG4gICAgICAgIHR4Lm91dHB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgwKTtcbiAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25zID0gdHgudG9Kc29uKCkuaW5zdHJ1Y3Rpb25zRGF0YTtcblxuICAgICAgICBpbnN0cnVjdGlvbnMubGVuZ3RoLnNob3VsZC5lcXVhbCgzKTtcbiAgICAgICAgaW5zdHJ1Y3Rpb25zWzBdLnBhcmFtcy50b2tlbk5hbWUuc2hvdWxkLmVxdWFsKG1pbnQpO1xuICAgICAgICBpbnN0cnVjdGlvbnNbMF0ucGFyYW1zLm93bmVyQWRkcmVzcy5zaG91bGQuZXF1YWwoc2VuZGVyLnB1YmtleSk7XG4gICAgICAgIGluc3RydWN0aW9uc1swXS5wYXJhbXMuYXRhQWRkcmVzcy5zaG91bGQuZXF1YWwoc2VuZGVyLmF0YVB1YmtleSk7XG4gICAgICAgIGluc3RydWN0aW9uc1sxXS5wYXJhbXMudG9rZW5OYW1lLnNob3VsZC5lcXVhbCgnc29sOnJheScpO1xuICAgICAgICBpbnN0cnVjdGlvbnNbMV0ucGFyYW1zLm93bmVyQWRkcmVzcy5zaG91bGQuZXF1YWwob3duZXJQdWJrZXlzLnB1YmtleSk7XG4gICAgICAgIGluc3RydWN0aW9uc1sxXS5wYXJhbXMuYXRhQWRkcmVzcy5zaG91bGQuZXF1YWwob3duZXJSYXlBVEEpO1xuICAgICAgICBpbnN0cnVjdGlvbnNbMl0ucGFyYW1zLnRva2VuTmFtZS5zaG91bGQuZXF1YWwoJ3Rzb2w6YW1zJyk7XG4gICAgICAgIHNob3VsZC5lcXVhbChyYXdUeCwgdGVzdERhdGEuTVVMVElfQVRBX0lOSVRfVU5TSUdORURfVFhfV0lUSF9PUFRJT05BTF9QQVJBTVMpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdidWlsZCBhbiBhc3NvY2lhdGVkIHRva2VuIGFjY291bnQgaW5pdCBmb3IgbXVsdGlwbGUgcmVjaXBpZW50cyB3aXRoIG1lbW8nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IG11bHRpQXRhSW5pdEJ1aWxkZXIocmVjaXBpZW50cyk7XG4gICAgICAgIHR4QnVpbGRlci5tZW1vKCd0ZXN0IG1lbW8gcGxlYXNlIGlnbm9yZScpO1xuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgICAgc2hvdWxkLmVxdWFsKHJhd1R4LCB0ZXN0RGF0YS5NVUxUSV9BVEFfSU5JVF9VTlNJR05FRF9UWF9XSVRIX01FTU9fT1BUSU9OQUxfUEFSQU0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdidW5kbGVzIHBlcm1pc3Npb25sZXNzIHRoYXcgYWZ0ZXIgVG9rZW4tMjAyMiBBVEEgY3JlYXRpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHQyMk5hbWUgPSB0ZXN0RGF0YS5zb2wyMDIyVG9rZW5UcmFuc2ZlcnMubmFtZTtcbiAgICAgICAgY29uc3QgdDIyTWludCA9IHRlc3REYXRhLnNvbDIwMjJUb2tlblRyYW5zZmVycy5taW50O1xuICAgICAgICBjb25zdCB0b2tlbkFjY291bnQgPSAnOTh3RkY1TXBNak1RYmZERjJNUHpvOExDR1gzN3VuWlIxb2hSQTFtVTlHbUonO1xuICAgICAgICBjb25zdCB0aGF3UGFyYW1zID0ge1xuICAgICAgICAgIGF1dGhvcml0eTogYWNjb3VudC5wdWIsXG4gICAgICAgICAgbWludDogdDIyTWludCxcbiAgICAgICAgICB0b2tlbkFjY291bnQsXG4gICAgICAgICAgdG9rZW5BY2NvdW50T3duZXI6IG93bmVyUHVia2V5cy5wdWJrZXksXG4gICAgICAgICAgZ2F0aW5nUHJvZ3JhbTogJ0diUThaaUVGekdHVGVZb1h3dFp0Y294d1BjTXlVY21aRGR1TVZOZFVQS3BYJyxcbiAgICAgICAgICBmbGFnQWNjb3VudDogJzQ4bjdZR0V3dzdmS01mSjVnSjNzUUMzck02UldHanBVc2docVZmWFZrUjVBJyxcbiAgICAgICAgICBtaW50Q29uZmlnOiAnOXNRaEFIN3ZWM1JLVENLMTNWWTRFaU5qczNxQnExc3JTWXhkTnVmZEFBWG0nLFxuICAgICAgICAgIGV4dHJhQWNjb3VudHM6IFt7IHB1YmtleTogbm9uY2VBY2NvdW50LnB1YiwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiBmYWxzZSB9XSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRBdGFJbml0aWFsaXphdGlvbkJ1aWxkZXIoKTtcbiAgICAgICAgdHhCdWlsZGVyLm5vbmNlKHJlY2VudEJsb2NrSGFzaCk7XG4gICAgICAgIHR4QnVpbGRlci5zZW5kZXIoYWNjb3VudC5wdWIpO1xuICAgICAgICB0eEJ1aWxkZXIucmVudEV4ZW1wdEFtb3VudChyZW50QW1vdW50KTtcbiAgICAgICAgdHhCdWlsZGVyLmVuYWJsZVRva2VuKHtcbiAgICAgICAgICBvd25lckFkZHJlc3M6IG93bmVyUHVia2V5cy5wdWJrZXksXG4gICAgICAgICAgdG9rZW5OYW1lOiB0MjJOYW1lLFxuICAgICAgICAgIHRva2VuQWRkcmVzczogdDIyTWludCxcbiAgICAgICAgICBwcm9ncmFtSWQ6IHRva2VuMjAyMlByb2dyYW1JZCxcbiAgICAgICAgICBhdGFBZGRyZXNzOiB0b2tlbkFjY291bnQsXG4gICAgICAgIH0pO1xuICAgICAgICB0eEJ1aWxkZXIucGVybWlzc2lvbmxlc3NUaGF3KHRoYXdQYXJhbXMpO1xuXG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IGluc3RydWN0aW9ucyA9IHR4LnRvSnNvbigpLmluc3RydWN0aW9uc0RhdGE7XG4gICAgICAgIGluc3RydWN0aW9uc1xuICAgICAgICAgIC5tYXAoKGkpID0+IGkudHlwZSlcbiAgICAgICAgICAuc2hvdWxkLmRlZXBFcXVhbChbJ0NyZWF0ZUFzc29jaWF0ZWRUb2tlbkFjY291bnQnLCAnUGVybWlzc2lvbmxlc3NUaGF3SWRlbXBvdGVudCddKTtcbiAgICAgICAgaW5zdHJ1Y3Rpb25zWzFdLnBhcmFtcy50b2tlbkFjY291bnQuc2hvdWxkLmVxdWFsKHRva2VuQWNjb3VudCk7XG4gICAgICAgIGluc3RydWN0aW9uc1sxXS5wYXJhbXMuZ2F0aW5nUHJvZ3JhbS5zaG91bGQuZXF1YWwodGhhd1BhcmFtcy5nYXRpbmdQcm9ncmFtKTtcbiAgICAgICAgaW5zdHJ1Y3Rpb25zWzFdLnBhcmFtcy5leHRyYUFjY291bnRzLnNob3VsZC5kZWVwRXF1YWwodGhhd1BhcmFtcy5leHRyYUFjY291bnRzKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKFV0aWxzLmlzVmFsaWRSYXdUcmFuc2FjdGlvbih0eC50b0Jyb2FkY2FzdEZvcm1hdCgpKSwgdHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2J1aWxkIGFuIGFzc29jaWF0ZWQgdG9rZW4gYWNjb3VudCBpbml0IHR4IGZvciBtdWx0aXBsZSByZWNpcGllbnRzIHNpZ25lZCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gbXVsdGlBdGFJbml0QnVpbGRlcihyZWNpcGllbnRzKTtcbiAgICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IGFjY291bnQucHJ2IH0pO1xuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgICAgc2hvdWxkLmVxdWFsKHJhd1R4LCB0ZXN0RGF0YS5NVUxUSV9BVEFfSU5JVF9TSUdORURfVFhfT1BUSU9OQUxfUEFSQU0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdidWlsZCBhbiBhc3NvY2lhdGVkIHRva2VuIGFjY291bnQgaW5pdCBmb3IgbXVsdGlwbGUgcmVjaXBpZW50cyB0eCB3aXRoIG1lbW8gc2lnbmVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBtdWx0aUF0YUluaXRCdWlsZGVyKHJlY2lwaWVudHMpO1xuICAgICAgICB0eEJ1aWxkZXIubWVtbygndGVzdCBtZW1vIHBsZWFzZSBpZ25vcmUnKTtcbiAgICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IGFjY291bnQucHJ2IH0pO1xuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgICAgc2hvdWxkLmVxdWFsKHJhd1R4LCB0ZXN0RGF0YS5NVUxUSV9BVEFfSU5JVF9TSUdORURfVFhfV0lUSF9NRU1PX09QVElPTkFMX1BBUkFNKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ0ZhaWwnLCAoKSA9PiB7XG4gICAgICBpdCgnc2hvdWxkIGZhaWwgdG8gYnVpbGQgYW4gYXNzb2NpYXRlZCB0b2tlbiBhY2NvdW50IGluaXQgd2l0aCBkdXBsaWNhdGUgcmVjaXBpZW50cycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgZHVwbGljYXRlUmVjaXBpZW50ID0ge1xuICAgICAgICAgIG93bmVyQWRkcmVzczogc2VuZGVyLnB1YmtleSxcbiAgICAgICAgICB0b2tlbk5hbWU6IG1pbnQsXG4gICAgICAgICAgYXRhQWRkcmVzczogc2VuZGVyLmF0YVB1YmtleSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gbXVsdGlBdGFJbml0QnVpbGRlcihyZWNpcGllbnRzKTtcbiAgICAgICAgc2hvdWxkKCgpID0+IHR4QnVpbGRlci5lbmFibGVUb2tlbihkdXBsaWNhdGVSZWNpcGllbnQpKS50aHJvd0Vycm9yKFxuICAgICAgICAgICdJbnZhbGlkIHRyYW5zYWN0aW9uOiBpbnZhbGlkIGR1cGxpY2F0ZSByZWNpcGllbnRzLCBnb3Q6IG93bmVyIDEyZjZEM1d1YkdWZVFvSDJtOGtUdnZjcmFzV2RYV3d0VnpVQ3lSTkRaeEEyIGFuZCB0b2tlbk5hbWUgc29sOnVzZGMgdHdpY2UnXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2J1aWxkIGFuIGFzc29jaWF0ZWQgdG9rZW4gYWNjb3VudCBpbml0IHR4IHdoZW4gbWludCBpcyBpbnZhbGlkJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBlcnJvck1pbnRSZWNpcGllbnQgPSB7XG4gICAgICAgICAgb3duZXJBZGRyZXNzOiBvd25lclB1YmtleXMucHVia2V5LFxuICAgICAgICAgIHRva2VuTmFtZTogJ2ludmFsaWRUb2tlbicsXG4gICAgICAgICAgYXRhQWRkcmVzczogb3duZXJQdWJrZXlzLmF0YVB1YmtleSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gbXVsdGlBdGFJbml0QnVpbGRlcihyZWNpcGllbnRzKTtcbiAgICAgICAgc2hvdWxkKCgpID0+IHR4QnVpbGRlci5lbmFibGVUb2tlbihlcnJvck1pbnRSZWNpcGllbnQpKS50aHJvd0Vycm9yKFxuICAgICAgICAgICdJbnZhbGlkIHRyYW5zYWN0aW9uOiBpbnZhbGlkIHRva2VuIG5hbWUsIGdvdDogaW52YWxpZFRva2VuJ1xuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdidWlsZCBhIHdhbGxldCBpbml0IHR4IGFuZCBzaWduIHdpdGggYW4gaW5jb3JyZWN0IGFjY291bnQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IG11bHRpQXRhSW5pdEJ1aWxkZXIocmVjaXBpZW50cyk7XG4gICAgICAgIHR4QnVpbGRlci5zZW5kZXIoYWNjb3VudC5wdWIpO1xuICAgICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogd3JvbmdBY2NvdW50LnBydiB9KTtcbiAgICAgICAgYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkuc2hvdWxkLnJlamVjdGVkV2l0aCgndW5rbm93biBzaWduZXI6IENQNURwYWE0MlJ0Sm1NdUtxQ1FzTHdtYTVZaDNrbnV2S3NZREZYODVGNDFTJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2J1aWxkIHdoZW4gbm9uY2UgaXMgbm90IHByb3ZpZGVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldEF0YUluaXRpYWxpemF0aW9uQnVpbGRlcigpO1xuICAgICAgICB0eEJ1aWxkZXIuc2VuZGVyKGFjY291bnQucHViKTtcbiAgICAgICAgdHhCdWlsZGVyLmVuYWJsZVRva2VuKHtcbiAgICAgICAgICBvd25lckFkZHJlc3M6IGFjY291bnQucHViLFxuICAgICAgICAgIHRva2VuTmFtZTogbWludCxcbiAgICAgICAgICBhdGFBZGRyZXNzOiBzZW5kZXIuYXRhUHVia2V5LFxuICAgICAgICB9KTtcbiAgICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IGFjY291bnQucHJ2IH0pO1xuICAgICAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKS5zaG91bGQucmVqZWN0ZWRXaXRoKCdJbnZhbGlkIHRyYW5zYWN0aW9uOiBtaXNzaW5nIG5vbmNlIGJsb2NraGFzaCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdidWlsZCB3aGVuIHNlbmRlciBpcyBub3QgcHJvdmlkZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0QXRhSW5pdGlhbGl6YXRpb25CdWlsZGVyKCk7XG4gICAgICAgIHR4QnVpbGRlci5ub25jZShyZWNlbnRCbG9ja0hhc2gpO1xuICAgICAgICB0eEJ1aWxkZXIuZW5hYmxlVG9rZW4oe1xuICAgICAgICAgIG93bmVyQWRkcmVzczogYWNjb3VudC5wdWIsXG4gICAgICAgICAgdG9rZW5OYW1lOiBtaW50LFxuICAgICAgICAgIGF0YUFkZHJlc3M6IHNlbmRlci5hdGFQdWJrZXksXG4gICAgICAgIH0pO1xuICAgICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogYWNjb3VudC5wcnYgfSk7XG4gICAgICAgIGF3YWl0IHR4QnVpbGRlci5idWlsZCgpLnNob3VsZC5yZWplY3RlZFdpdGgoJ0ludmFsaWQgdHJhbnNhY3Rpb246IG1pc3Npbmcgc2VuZGVyJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2J1aWxkIHdoZW4gcmVjaXBpZW50IGlzIG5vdCBwcm92aWRlZCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRBdGFJbml0aWFsaXphdGlvbkJ1aWxkZXIoKTtcbiAgICAgICAgdHhCdWlsZGVyLnNlbmRlcihhY2NvdW50LnB1Yik7XG4gICAgICAgIHR4QnVpbGRlci5ub25jZShyZWNlbnRCbG9ja0hhc2gpO1xuICAgICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogYWNjb3VudC5wcnYgfSk7XG4gICAgICAgIGF3YWl0IHR4QnVpbGRlci5idWlsZCgpLnNob3VsZC5yZWplY3RlZFdpdGgoJ01pbnQgbXVzdCBiZSBzZXQgYmVmb3JlIGJ1aWxkaW5nIHRoZSB0cmFuc2FjdGlvbicpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdidWlsZCB3aGVuIHJlbnRFeGVtcHRBbW91bnQgaXMgaW52YWxpZCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gbXVsdGlBdGFJbml0QnVpbGRlcihyZWNpcGllbnRzKTtcbiAgICAgICAgc2hvdWxkKCgpID0+IHR4QnVpbGRlci5yZW50RXhlbXB0QW1vdW50KCdpbnZhbGlkIGFtb3VudCcpKS50aHJvd0Vycm9yKFxuICAgICAgICAgICdJbnZhbGlkIHRva2VuQWNjb3VudFJlbnRFeGVtcHRBbW91bnQsIGdvdDogaW52YWxpZCBhbW91bnQnXG4gICAgICAgICk7XG4gICAgICAgIHNob3VsZCgoKSA9PiB0eEJ1aWxkZXIuYXNzb2NpYXRlZFRva2VuQWNjb3VudFJlbnQoJ2ludmFsaWQgYW1vdW50JykpLnRocm93RXJyb3IoXG4gICAgICAgICAgJ0ludmFsaWQgdG9rZW5BY2NvdW50UmVudEV4ZW1wdEFtb3VudCwgZ290OiBpbnZhbGlkIGFtb3VudCdcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYnVpbGQgd2hlbiB0b2tlbiBvd25lciBpcyBpbnZhbGlkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBpbnZhbGlkT3duZXIgPSB7XG4gICAgICAgICAgb3duZXJBZGRyZXNzOiAnaW52YWxpZCBvd25lcicsXG4gICAgICAgICAgdG9rZW5OYW1lOiBtaW50LFxuICAgICAgICAgIGF0YUFkZHJlc3M6IHNlbmRlci5hdGFQdWJrZXksXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IG11bHRpQXRhSW5pdEJ1aWxkZXIocmVjaXBpZW50cyk7XG4gICAgICAgIHNob3VsZCgoKSA9PiB0eEJ1aWxkZXIuZW5hYmxlVG9rZW4oaW52YWxpZE93bmVyKSkudGhyb3dFcnJvcihcbiAgICAgICAgICAnSW52YWxpZCBvciBtaXNzaW5nIG93bmVyQWRkcmVzcywgZ290OiBpbnZhbGlkIG93bmVyJ1xuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCd0byBzaWduIHR3aWNlIHdpdGggdGhlIHNhbWUga2V5JywgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20odGVzdERhdGEuTVVMVElfQVRBX0lOSVRfVU5TSUdORURfVFgpO1xuICAgICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogYWNjb3VudC5wcnYgfSk7XG4gICAgICAgIHNob3VsZCgoKSA9PiB0eEJ1aWxkZXIuc2lnbih7IGtleTogYWNjb3VudC5wcnYgfSkpLnRocm93RXJyb3IoJ0R1cGxpY2F0ZWQgc2lnbmVyOiAnICsgYWNjb3VudC5wcnY/LnRvU3RyaW5nKCkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdGcm9tIGFuZCBzaWduJywgKCkgPT4ge1xuICAgIGRlc2NyaWJlKCdTdWNjZWVkJywgKCkgPT4ge1xuICAgICAgaXQoJ2J1aWxkIGZyb20gYSB1bnNpZ25lZCBBVEEgaW5pdCBhbmQgc2lnbiBpdCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5mcm9tKHRlc3REYXRhLkFUQV9JTklUX1VOU0lHTkVEX1RYKTtcbiAgICAgICAgKHR4QnVpbGRlciBhcyBBdGFJbml0aWFsaXphdGlvbkJ1aWxkZXIpLnJlbnRFeGVtcHRBbW91bnQocmVudEFtb3VudCk7XG4gICAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiBhY2NvdW50LnBydiB9KTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAgIHZlcmlmeUlucHV0T3V0cHV0QW5kUmF3VHJhbnNhY3Rpb24odHgsIHJhd1R4KTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKHJhd1R4LCB0ZXN0RGF0YS5BVEFfSU5JVF9TSUdORURfVFgpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdidWlsZCBmcm9tIGEgdW5zaWduZWQgQVRBIGluaXQgd2l0aCBtZW1vIGFuZCBzaWduIGl0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20odGVzdERhdGEuQVRBX0lOSVRfVU5TSUdORURfVFhfV0lUSF9NRU1PKTtcbiAgICAgICAgKHR4QnVpbGRlciBhcyBBdGFJbml0aWFsaXphdGlvbkJ1aWxkZXIpLnJlbnRFeGVtcHRBbW91bnQocmVudEFtb3VudCk7XG4gICAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiBhY2NvdW50LnBydiB9KTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAgIHZlcmlmeUlucHV0T3V0cHV0QW5kUmF3VHJhbnNhY3Rpb24odHgsIHJhd1R4KTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKHJhd1R4LCB0ZXN0RGF0YS5BVEFfSU5JVF9TSUdORURfVFhfV0lUSF9NRU1PKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYnVpbGQgZnJvbSBhIHVuc2lnbmVkIEFUQSBpbml0IHdpdGggZGlmZiBvd25lciBhbmQgc2lnbiBpdCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5mcm9tKHRlc3REYXRhLkFUQV9JTklUX1VOU0lHTkVEX0RJRkZfT1dORVJfVFgpO1xuICAgICAgICAodHhCdWlsZGVyIGFzIEF0YUluaXRpYWxpemF0aW9uQnVpbGRlcikucmVudEV4ZW1wdEFtb3VudChyZW50QW1vdW50KTtcbiAgICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IGFjY291bnQucHJ2IH0pO1xuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgICAgdmVyaWZ5SW5wdXRPdXRwdXRBbmRSYXdUcmFuc2FjdGlvbih0eCwgcmF3VHgsIG93bmVyUHVia2V5cyk7XG4gICAgICAgIHNob3VsZC5lcXVhbChyYXdUeCwgdGVzdERhdGEuQVRBX0lOSVRfU0lHTkVEX0RJRkZfT1dORVJfVFgpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdidWlsZCBmcm9tIGEgdW5zaWduZWQgQVRBIGluaXQgd2l0aCBkaWZmIG93bmVyIHdpdGggbWVtbyBhbmQgc2lnbiBpdCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5mcm9tKHRlc3REYXRhLkFUQV9JTklUX1VOU0lHTkVEX0RJRkZfT1dORVJfVFhfV0lUSF9NRU1PKTtcbiAgICAgICAgKHR4QnVpbGRlciBhcyBBdGFJbml0aWFsaXphdGlvbkJ1aWxkZXIpLnJlbnRFeGVtcHRBbW91bnQocmVudEFtb3VudCk7XG4gICAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiBhY2NvdW50LnBydiB9KTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAgIHZlcmlmeUlucHV0T3V0cHV0QW5kUmF3VHJhbnNhY3Rpb24odHgsIHJhd1R4LCBvd25lclB1YmtleXMpO1xuICAgICAgICBzaG91bGQuZXF1YWwocmF3VHgsIHRlc3REYXRhLkFUQV9JTklUX1NJR05FRF9ESUZGX09XTkVSX1RYX1dJVEhfTUVNTyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2J1aWxkIGZyb20gYSB1bnNpZ25lZCBBVEEgaW5pdCBmb3IgbXVsdGkgcmVjaXBpZW50cyBhbmQgc2lnbiBpdCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5mcm9tKHRlc3REYXRhLk1VTFRJX0FUQV9JTklUX1VOU0lHTkVEX1RYKTtcbiAgICAgICAgKHR4QnVpbGRlciBhcyBBdGFJbml0aWFsaXphdGlvbkJ1aWxkZXIpLnJlbnRFeGVtcHRBbW91bnQocmVudEFtb3VudCk7XG4gICAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiBhY2NvdW50LnBydiB9KTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAgIHNob3VsZC5lcXVhbChyYXdUeCwgdGVzdERhdGEuTVVMVElfQVRBX0lOSVRfU0lHTkVEX1RYKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYnVpbGQgZnJvbSBhIHVuc2lnbmVkIEFUQSBpbml0IGZvciBtdWx0aSByZWNpcGllbnRzIHdpdGggbWVtbyBhbmQgc2lnbiBpdCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5mcm9tKHRlc3REYXRhLk1VTFRJX0FUQV9JTklUX1VOU0lHTkVEX1RYX1dJVEhfTUVNTyk7XG4gICAgICAgICh0eEJ1aWxkZXIgYXMgQXRhSW5pdGlhbGl6YXRpb25CdWlsZGVyKS5yZW50RXhlbXB0QW1vdW50KHJlbnRBbW91bnQpO1xuICAgICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogYWNjb3VudC5wcnYgfSk7XG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgICBzaG91bGQuZXF1YWwocmF3VHgsIHRlc3REYXRhLk1VTFRJX0FUQV9JTklUX1NJR05FRF9UWF9XSVRIX01FTU8pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdidWlsZCBmcm9tIGEgdW5zaWduZWQgQVRBIGluaXQgZm9yIG11bHRpIHJlY2lwaWVudHMgd2l0aCBtZW1vIGFuZCBzaWduIGl0IHdpdGggb3B0aW5hbCBwYXJhbScsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5mcm9tKHRlc3REYXRhLk1VTFRJX0FUQV9JTklUX1VOU0lHTkVEX1RYX1dJVEhfTUVNT19PUFRJT05BTF9QQVJBTSk7XG4gICAgICAgICh0eEJ1aWxkZXIgYXMgQXRhSW5pdGlhbGl6YXRpb25CdWlsZGVyKS5yZW50RXhlbXB0QW1vdW50KHJlbnRBbW91bnQpO1xuICAgICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogYWNjb3VudC5wcnYgfSk7XG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgICBzaG91bGQuZXF1YWwocmF3VHgsIHRlc3REYXRhLk1VTFRJX0FUQV9JTklUX1NJR05FRF9UWF9XSVRIX01FTU9fT1BUSU9OQUxfUEFSQU0xKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYnVpbGQgZnJvbSBhIHVuc2lnbmVkIHJhdyB0b2tlbiB0cmFuc2ZlciB3aXRoIG9wdGluYWwgcGFyYW0nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZnJvbShcbiAgICAgICAgICB0ZXN0RGF0YS5UT0tFTl9UUkFOU0ZFUl9VTlNJR05FRF9XSVRIX0NSRUFURV9BVEFfQU5EX01FTU9fQU5EX0RVUkFCTEVfTk9OQ0VfV0lUSF9PUFRJT05BTF9QQVJBTVNcbiAgICAgICAgKSBhcyBUb2tlblRyYW5zZmVyQnVpbGRlcjtcblxuICAgICAgICAodHhCdWlsZGVyIGFzIGFueSkuX3NlbmRQYXJhbXNbMF0udG9rZW5OYW1lID0gJ3Rzb2w6YW1zJztcbiAgICAgICAgKHR4QnVpbGRlciBhcyBhbnkpLl9jcmVhdGVBdGFQYXJhbXNbMF0udG9rZW5OYW1lID0gJ3Rzb2w6YW1zJztcblxuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgICAgc2hvdWxkLmVxdWFsKFxuICAgICAgICAgIHJhd1R4LFxuICAgICAgICAgIHRlc3REYXRhLlRPS0VOX1RSQU5TRkVSX1VOU0lHTkVEX1dJVEhfQ1JFQVRFX0FUQV9BTkRfTUVNT19BTkRfRFVSQUJMRV9OT05DRV9XSVRIX09QVElPTkFMX1BBUkFNU1xuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdidWlsZCBmcm9tIGFuIHVuc2lnbmVkIEFUQSBpbml0IHdpdGggZHVyYWJsZSBub25jZSBhbmQgc2lnbiBpdCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5mcm9tKHRlc3REYXRhLkFUQV9JTklUX1VOU0lHTkVEX1RYX0RVUkFCTEVfTk9OQ0UpO1xuICAgICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogYWNjb3VudC5wcnYgfSk7XG5cbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAgIHNob3VsZC5lcXVhbChyYXdUeCwgdGVzdERhdGEuQVRBX0lOSVRfU0lHTkVEX1RYX0RVUkFCTEVfTk9OQ0UpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnRmFpbCcsICgpID0+IHtcbiAgICAgIGl0KCdidWlsZCBmcm9tIGEgdW5zaWduZWQgQVRBIGluaXQgYW5kIGZhaWwgdG8gc2lnbiBpdCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5mcm9tKHRlc3REYXRhLkFUQV9JTklUX1VOU0lHTkVEX1RYKTtcbiAgICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IHdyb25nQWNjb3VudC5wcnYgfSk7XG4gICAgICAgIGF3YWl0IHR4QnVpbGRlci5idWlsZCgpLnNob3VsZC5yZWplY3RlZFdpdGgoJ3Vua25vd24gc2lnbmVyOiBDUDVEcGFhNDJSdEptTXVLcUNRc0x3bWE1WWgza251dktzWURGWDg1RjQxUycpO1xuICAgICAgfSk7XG4gICAgICBpdCgnYnVpbGQgZnJvbSBhIHNpZ25lZCBBVEEgaW5pdCBhbmQgZmFpbCB0byBzaWduIGl0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20odGVzdERhdGEuQVRBX0lOSVRfU0lHTkVEX1RYKTtcbiAgICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IHdyb25nQWNjb3VudC5wcnYgfSk7XG4gICAgICAgIGF3YWl0IHR4QnVpbGRlci5idWlsZCgpLnNob3VsZC5yZWplY3RlZFdpdGgoJ3Vua25vd24gc2lnbmVyOiBDUDVEcGFhNDJSdEptTXVLcUNRc0x3bWE1WWgza251dktzWURGWDg1RjQxUycpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=