aws-cdk 2.177.0 → 2.178.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.
Files changed (42) hide show
  1. package/THIRD_PARTY_LICENSES +5518 -181
  2. package/build-info.json +2 -2
  3. package/db.json.gz +0 -0
  4. package/lib/api/aws-auth/sdk-logger.d.ts +4 -0
  5. package/lib/api/aws-auth/sdk-logger.js +18 -7
  6. package/lib/api/aws-auth/sdk-provider.js +4 -3
  7. package/lib/api/aws-auth/sdk.d.ts +1 -0
  8. package/lib/api/aws-auth/sdk.js +4 -3
  9. package/lib/api/aws-auth/tracing.d.ts +11 -0
  10. package/lib/api/aws-auth/tracing.js +60 -0
  11. package/lib/api/deployments/asset-publishing.js +7 -1
  12. package/lib/cli/cdk-toolkit.d.ts +6 -0
  13. package/lib/cli/cdk-toolkit.js +11 -10
  14. package/lib/cli/cli.js +10 -5
  15. package/lib/cli/parse-command-line-arguments.js +11 -15
  16. package/lib/cli/user-input.d.ts +4 -4
  17. package/lib/cli/user-input.js +1 -1
  18. package/lib/commands/context.js +2 -2
  19. package/lib/index.js +204 -158
  20. package/lib/index_bg.wasm +0 -0
  21. package/lib/init-templates/.init-version.json +1 -1
  22. package/lib/init-templates/.recommended-feature-flags.json +2 -1
  23. package/lib/legacy-exports-source.d.ts +1 -1
  24. package/lib/legacy-exports-source.js +3 -3
  25. package/lib/logging.d.ts +6 -13
  26. package/lib/logging.js +25 -70
  27. package/lib/toolkit/cli-io-host.d.ts +16 -12
  28. package/lib/toolkit/cli-io-host.js +127 -30
  29. package/package.json +10 -10
  30. package/test/_helpers/prompts.d.ts +11 -0
  31. package/test/_helpers/prompts.js +22 -0
  32. package/test/api/aws-auth/sdk-logger.test.js +16 -11
  33. package/test/api/logs/logging.test.js +4 -54
  34. package/test/cli/cdk-toolkit.test.js +7 -7
  35. package/test/cli/cli-arguments.test.js +4 -4
  36. package/test/cli/cli.test.js +2 -2
  37. package/test/cli/user-config.test.js +28 -1
  38. package/test/toolkit/cli-io-host-corked.test.d.ts +1 -0
  39. package/test/toolkit/cli-io-host-corked.test.js +73 -0
  40. package/test/toolkit/cli-io-host.test.js +164 -60
  41. package/lib/util/tracing.d.ts +0 -9
  42. package/lib/util/tracing.js +0 -58
@@ -45,10 +45,10 @@ const fakeChokidarWatch = {
45
45
  return chokidarWatchOpts.ignored;
46
46
  },
47
47
  };
48
- const mockData = jest.fn();
48
+ const mockResult = jest.fn();
49
49
  jest.mock('../../lib/logging', () => ({
50
50
  ...jest.requireActual('../../lib/logging'),
51
- data: mockData,
51
+ result: mockResult,
52
52
  }));
53
53
  jest.setTimeout(30000);
54
54
  require("aws-sdk-client-mock");
@@ -948,7 +948,7 @@ describe('synth', () => {
948
948
  const toolkit = defaultToolkitSetup();
949
949
  // THEN
950
950
  await toolkit.synth(['Test-Stack-A-Display-Name'], false, true);
951
- expect(mockData.mock.calls.length).toEqual(0);
951
+ expect(mockResult.mock.calls.length).toEqual(0);
952
952
  });
953
953
  describe('migrate', () => {
954
954
  const testResourcePath = [__dirname, '..', 'commands', 'test-resources'];
@@ -1075,7 +1075,7 @@ describe('synth', () => {
1075
1075
  const toolkit = defaultToolkitSetup();
1076
1076
  const autoValidate = false;
1077
1077
  await toolkit.synth([], false, true, autoValidate);
1078
- expect(mockData.mock.calls.length).toEqual(0);
1078
+ expect(mockResult.mock.calls.length).toEqual(0);
1079
1079
  });
1080
1080
  });
1081
1081
  test('stack has error and was explicitly selected', async () => {
@@ -1118,8 +1118,8 @@ describe('synth', () => {
1118
1118
  });
1119
1119
  const toolkit = defaultToolkitSetup();
1120
1120
  await toolkit.synth([MockStack.MOCK_STACK_D.stackName], true, false);
1121
- expect(mockData.mock.calls.length).toEqual(1);
1122
- expect(mockData.mock.calls[0][0]).toBeDefined();
1121
+ expect(mockResult.mock.calls.length).toEqual(1);
1122
+ expect(mockResult.mock.calls[0][0]).toBeDefined();
1123
1123
  });
1124
1124
  test('rollback uses deployment role', async () => {
1125
1125
  cloudExecutable = new util_2.MockCloudExecutable({
@@ -1388,4 +1388,4 @@ async function withTempDir(cb) {
1388
1388
  await fs.remove(tmpDir);
1389
1389
  }
1390
1390
  }
1391
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXRvb2xraXQudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNkay10b29sa2l0LnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw0REFBNEQ7QUFDNUQsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDeEMsTUFBTSxtQkFBbUIsR0FBRztJQUMxQixFQUFFLEVBQUUscUJBQXFCO0NBQzFCLENBQUM7QUFDRixNQUFNLHFCQUFxQixHQUFHO0lBQzVCLElBQUksYUFBYTtRQUNmLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFFLGdHQUFnRztRQUNoRyxpRUFBaUU7UUFDakUsaUVBQWlFO1FBQ2pFLE1BQU0sU0FBUyxHQUFHLHFCQUFxQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEQsMkRBQTJEO1FBQzNELHlCQUF5QjtRQUN6QixNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLHNDQUFzQztRQUN0QyxPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBSSxpQkFBaUI7UUFJbkIsTUFBTSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUUsTUFBTSxVQUFVLEdBQUcscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2RCwrREFBK0Q7UUFDL0QseUJBQXlCO1FBQ3pCLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FB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QUFNLEdBQUcsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7SUFDeEUsSUFBSSxDQUFDO1FBQ0gsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbkIsQ0FBQztZQUFTLENBQUM7UUFDVCxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDMUIsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBXZSBuZWVkIHRvIG1vY2sgdGhlIGNob2tpZGFyIGxpYnJhcnksIHVzZWQgYnkgJ2NkayB3YXRjaCdcbmNvbnN0IG1vY2tDaG9raWRhcldhdGNoZXJPbiA9IGplc3QuZm4oKTtcbmNvbnN0IGZha2VDaG9raWRhcldhdGNoZXIgPSB7XG4gIG9uOiBtb2NrQ2hva2lkYXJXYXRjaGVyT24sXG59O1xuY29uc3QgZmFrZUNob2tpZGFyV2F0Y2hlck9uID0ge1xuICBnZXQgcmVhZHlDYWxsYmFjaygpOiAoKSA9PiB2b2lkIHtcbiAgICBleHBlY3QobW9ja0Nob2tpZGFyV2F0Y2hlck9uLm1vY2suY2FsbHMubGVuZ3RoKS50b0JlR3JlYXRlclRoYW5PckVxdWFsKDEpO1xuICAgIC8vIFRoZSBjYWxsIHRvIHRoZSBmaXJzdCAnd2F0Y2hlci5vbigpJyBpbiB0aGUgcHJvZHVjdGlvbiBjb2RlIGlzIHRoZSBvbmUgd2UgYWN0dWFsbHkgd2FudCBoZXJlLlxuICAgIC8vIFRoaXMgaXMgYSBwcmV0dHkgZnJhZ2lsZSwgYnV0IGF0IGxlYXN0IHdpdGggdGhpcyBoZWxwZXIgY2xhc3MsXG4gICAgLy8gd2Ugd291bGQgaGF2ZSB0byBjaGFuZ2UgaXQgb25seSBpbiBvbmUgcGxhY2UgaWYgaXQgZXZlciBicmVha3NcbiAgICBjb25zdCBmaXJzdENhbGwgPSBtb2NrQ2hva2lkYXJXYXRjaGVyT24ubW9jay5jYWxsc1swXTtcbiAgICAvLyBsZXQncyBtYWtlIHN1cmUgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSAncmVhZHknIGV2ZW50LFxuICAgIC8vIGp1c3QgdG8gYmUgZG91YmxlIHNhZmVcbiAgICBleHBlY3QoZmlyc3RDYWxsWzBdKS50b0JlKCdyZWFkeScpO1xuICAgIC8vIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIGNhbGxiYWNrXG4gICAgcmV0dXJuIGZpcnN0Q2FsbFsxXTtcbiAgfSxcblxuICBnZXQgZmlsZUV2ZW50Q2FsbGJhY2soKTogKFxuICBldmVudDogJ2FkZCcgfCAnYWRkRGlyJyB8ICdjaGFuZ2UnIHwgJ3VubGluaycgfCAndW5saW5rRGlyJyxcbiAgcGF0aDogc3RyaW5nLFxuICApID0+IFByb21pc2U8dm9pZD4ge1xuICAgIGV4cGVjdChtb2NrQ2hva2lkYXJXYXRjaGVyT24ubW9jay5jYWxscy5sZW5ndGgpLnRvQmVHcmVhdGVyVGhhbk9yRXF1YWwoMik7XG4gICAgY29uc3Qgc2Vjb25kQ2FsbCA9IG1vY2tDaG9raWRhcldhdGNoZXJPbi5tb2NrLmNhbGxzWzFdO1xuICAgIC8vIGxldCdzIG1ha2Ugc3VyZSB0aGUgZmlyc3QgYXJndW1lbnQgaXMgbm90IHRoZSAncmVhZHknIGV2ZW50LFxuICAgIC8vIGp1c3QgdG8gYmUgZG91YmxlIHNhZmVcbiAgICBleHBlY3Qoc2Vjb25kQ2FsbFswXSkubm90LnRvQmUoJ3JlYWR5Jyk7XG4gICAgLy8gdGhlIHNlY29uZCBhcmd1bWVudCBpcyB0aGUgY2FsbGJhY2tcbiAgICByZXR1cm4gc2Vjb25kQ2FsbFsxXTtcbiAgfSxcbn07XG5cbmNvbnN0IG1vY2tDaG9raWRhcldhdGNoID0gamVzdC5mbigpO1xuamVzdC5tb2NrKCdjaG9raWRhcicsICgpID0+ICh7XG4gIHdhdGNoOiBtb2NrQ2hva2lkYXJXYXRjaCxcbn0pKTtcbmNvbnN0IGZha2VDaG9raWRhcldhdGNoID0ge1xuICBnZXQgaW5jbHVkZUFyZ3MoKTogc3RyaW5nW10ge1xuICAgIGV4cGVjdChtb2NrQ2hva2lkYXJXYXRjaC5tb2NrLmNhbGxzLmxlbmd0aCkudG9CZSgxKTtcbiAgICAvLyB0aGUgaW5jbHVkZSBhcmdzIGFyZSB0aGUgZmlyc3QgcGFyYW1ldGVyIHRvIHRoZSAnd2F0Y2goKScgY2FsbFxuICAgIHJldHVybiBtb2NrQ2hva2lkYXJXYXRjaC5tb2NrLmNhbGxzWzBdWzBdO1xuICB9LFxuXG4gIGdldCBleGNsdWRlQXJncygpOiBzdHJpbmdbXSB7XG4gICAgZXhwZWN0KG1vY2tDaG9raWRhcldhdGNoLm1vY2suY2FsbHMubGVuZ3RoKS50b0JlKDEpO1xuICAgIC8vIHRoZSBpZ25vcmUgYXJncyBhcmUgYSBwcm9wZXJ0eSBvZiB0aGUgc2Vjb25kIHBhcmFtZXRlciB0byB0aGUgJ3dhdGNoKCknIGNhbGxcbiAgICBjb25zdCBjaG9raWRhcldhdGNoT3B0cyA9IG1vY2tDaG9raWRhcldhdGNoLm1vY2suY2FsbHNbMF1bMV07XG4gICAgcmV0dXJuIGNob2tpZGFyV2F0Y2hPcHRzLmlnbm9yZWQ7XG4gIH0sXG59O1xuXG5jb25zdCBtb2NrRGF0YSA9IGplc3QuZm4oKTtcbmplc3QubW9jaygnLi4vLi4vbGliL2xvZ2dpbmcnLCAoKSA9PiAoe1xuICAuLi5qZXN0LnJlcXVpcmVBY3R1YWwoJy4uLy4uL2xpYi9sb2dnaW5nJyksXG4gIGRhdGE6IG1vY2tEYXRhLFxufSkpO1xuamVzdC5zZXRUaW1lb3V0KDMwXzAwMCk7XG5cbmltcG9ydCAnYXdzLXNkay1jbGllbnQtbW9jayc7XG5pbXBvcnQgKiBhcyBvcyBmcm9tICdvcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgY3hzY2hlbWEgZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktc2NoZW1hJztcbmltcG9ydCB7IE1hbmlmZXN0IH0gZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktc2NoZW1hJztcbmltcG9ydCAqIGFzIGN4YXBpIGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgeyBEZXNjcmliZVN0YWNrc0NvbW1hbmQsIEdldFRlbXBsYXRlQ29tbWFuZCwgU3RhY2tTdGF0dXMgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHsgR2V0UGFyYW1ldGVyQ29tbWFuZCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zc20nO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0ICogYXMgcHJvbXB0bHkgZnJvbSAncHJvbXB0bHknO1xuaW1wb3J0IHsgU2RrUHJvdmlkZXIgfSBmcm9tICcuLi8uLi9saWIvYXBpJztcbmltcG9ydCB7IEJvb3RzdHJhcHBlciwgdHlwZSBCb290c3RyYXBTb3VyY2UgfSBmcm9tICcuLi8uLi9saWIvYXBpL2Jvb3RzdHJhcCc7XG5pbXBvcnQge1xuICBEZXBsb3lTdGFja1Jlc3VsdCxcbiAgU3VjY2Vzc2Z1bERlcGxveVN0YWNrUmVzdWx0LFxuICBUZW1wbGF0ZSxcbiAgRGVwbG95bWVudHMsXG4gIERlcGxveVN0YWNrT3B0aW9ucyxcbiAgRGVzdHJveVN0YWNrT3B0aW9ucyxcbiAgUm9sbGJhY2tTdGFja09wdGlvbnMsXG4gIFJvbGxiYWNrU3RhY2tSZXN1bHQsXG59IGZyb20gJy4uLy4uL2xpYi9hcGkvZGVwbG95bWVudHMnO1xuaW1wb3J0IHsgSG90c3dhcE1vZGUgfSBmcm9tICcuLi8uLi9saWIvYXBpL2hvdHN3YXAvY29tbW9uJztcbmltcG9ydCB7IE1vZGUgfSBmcm9tICcuLi8uLi9saWIvYXBpL3BsdWdpbic7XG5pbXBvcnQgeyBUYWcgfSBmcm9tICcuLi8uLi9saWIvYXBpL3RhZ3MnO1xuaW1wb3J0IHsgQ2RrVG9vbGtpdCwgbWFya1Rlc3RpbmcgfSBmcm9tICcuLi8uLi9saWIvY2xpL2Nkay10b29sa2l0JztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi8uLi9saWIvY2xpL3VzZXItY29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyBSZXF1aXJlQXBwcm92YWwgfSBmcm9tICcuLi8uLi9saWIvZGlmZic7XG5pbXBvcnQgeyBDbGlJb0hvc3QgfSBmcm9tICcuLi8uLi9saWIvdG9vbGtpdC9jbGktaW8taG9zdCc7XG5pbXBvcnQgeyBmbGF0dGVuIH0gZnJvbSAnLi4vLi4vbGliL3V0aWwnO1xuaW1wb3J0IHsgaW5zdGFuY2VNb2NrRnJvbSwgTW9ja0Nsb3VkRXhlY3V0YWJsZSwgVGVzdFN0YWNrQXJ0aWZhY3QgfSBmcm9tICcuLi91dGlsJztcbmltcG9ydCB7XG4gIG1vY2tDbG91ZEZvcm1hdGlvbkNsaWVudCxcbiAgTW9ja1NkayxcbiAgTW9ja1Nka1Byb3ZpZGVyLFxuICBtb2NrU1NNQ2xpZW50LFxuICByZXN0b3JlU2RrTW9ja3NUb0RlZmF1bHQsXG59IGZyb20gJy4uL3V0aWwvbW9jay1zZGsnO1xuXG5tYXJrVGVzdGluZygpO1xuXG5jb25zdCBkZWZhdWx0Qm9vdHN0cmFwU291cmNlOiBCb290c3RyYXBTb3VyY2UgPSB7IHNvdXJjZTogJ2RlZmF1bHQnIH07XG5jb25zdCBib290c3RyYXBFbnZpcm9ubWVudE1vY2sgPSBqZXN0LnNweU9uKEJvb3RzdHJhcHBlci5wcm90b3R5cGUsICdib290c3RyYXBFbnZpcm9ubWVudCcpO1xubGV0IGNsb3VkRXhlY3V0YWJsZTogTW9ja0Nsb3VkRXhlY3V0YWJsZTtcbmxldCBzdGRlcnJNb2NrOiBqZXN0LlNweUluc3RhbmNlO1xuYmVmb3JlRWFjaCgoKSA9PiB7XG4gIGplc3QucmVzZXRBbGxNb2NrcygpO1xuICByZXN0b3JlU2RrTW9ja3NUb0RlZmF1bHQoKTtcblxuICBtb2NrQ2hva2lkYXJXYXRjaC5tb2NrUmV0dXJuVmFsdWUoZmFrZUNob2tpZGFyV2F0Y2hlcik7XG4gIC8vIG9uKCkgaW4gY2hva2lkYXIncyBXYXRjaGVyIHJldHVybnMgJ3RoaXMnXG4gIG1vY2tDaG9raWRhcldhdGNoZXJPbi5tb2NrUmV0dXJuVmFsdWUoZmFrZUNob2tpZGFyV2F0Y2hlcik7XG5cbiAgYm9vdHN0cmFwRW52aXJvbm1lbnRNb2NrLm1vY2tSZXNvbHZlZFZhbHVlKHtcbiAgICBub09wOiBmYWxzZSxcbiAgICBvdXRwdXRzOiB7fSxcbiAgICB0eXBlOiAnZGlkLWRlcGxveS1zdGFjaycsXG4gICAgc3RhY2tBcm46ICdmYWtlLWFybicsXG4gIH0pO1xuXG4gIGNsb3VkRXhlY3V0YWJsZSA9IG5ldyBNb2NrQ2xvdWRFeGVjdXRhYmxlKHtcbiAgICBzdGFja3M6IFtNb2NrU3RhY2suTU9DS19TVEFDS19BLCBNb2NrU3RhY2suTU9DS19TVEFDS19CXSxcbiAgICBuZXN0ZWRBc3NlbWJsaWVzOiBbXG4gICAgICB7XG4gICAgICAgIHN0YWNrczogW01vY2tTdGFjay5NT0NLX1NUQUNLX0NdLFxuICAgICAgfSxcbiAgICBdLFxuICB9KTtcblxuICBDbGlJb0hvc3QuaW5zdGFuY2UoKS5pc0NJID0gZmFsc2U7XG4gIHN0ZGVyck1vY2sgPSBqZXN0LnNweU9uKHByb2Nlc3Muc3RkZXJyLCAnd3JpdGUnKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9KTtcbn0pO1xuXG5mdW5jdGlvbiBkZWZhdWx0VG9vbGtpdFNldHVwKCkge1xuICByZXR1cm4gbmV3IENka1Rvb2xraXQoe1xuICAgIGNsb3VkRXhlY3V0YWJsZSxcbiAgICBjb25maWd1cmF0aW9uOiBjbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbixcbiAgICBzZGtQcm92aWRlcjogY2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLFxuICAgIGRlcGxveW1lbnRzOiBuZXcgRmFrZUNsb3VkRm9ybWF0aW9uKHtcbiAgICAgICdUZXN0LVN0YWNrLUEnOiB7IEZvbzogJ0JhcicgfSxcbiAgICAgICdUZXN0LVN0YWNrLUInOiB7IEJhejogJ1ppbmdhIScgfSxcbiAgICAgICdUZXN0LVN0YWNrLUMnOiB7IEJhejogJ1ppbmdhIScgfSxcbiAgICB9KSxcbiAgfSk7XG59XG5cbmNvbnN0IG1vY2tTZGsgPSBuZXcgTW9ja1NkaygpO1xuXG5kZXNjcmliZSgncmVhZEN1cnJlbnRUZW1wbGF0ZScsICgpID0+IHtcbiAgbGV0IHRlbXBsYXRlOiBhbnk7XG4gIGxldCBtb2NrQ2xvdWRFeGVjdXRhYmxlOiBNb2NrQ2xvdWRFeGVjdXRhYmxlO1xuICBsZXQgc2RrUHJvdmlkZXI6IFNka1Byb3ZpZGVyO1xuICBsZXQgbW9ja0ZvckVudmlyb25tZW50OiBhbnk7XG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIGplc3QucmVzZXRBbGxNb2NrcygpO1xuICAgIHRlbXBsYXRlID0ge1xuICAgICAgUmVzb3VyY2VzOiB7XG4gICAgICAgIEZ1bmM6IHtcbiAgICAgICAgICBUeXBlOiAnQVdTOjpMYW1iZGE6OkZ1bmN0aW9uJyxcbiAgICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBLZXk6ICdWYWx1ZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgICBtb2NrQ2xvdWRFeGVjdXRhYmxlID0gbmV3IE1vY2tDbG91ZEV4ZWN1dGFibGUoe1xuICAgICAgc3RhY2tzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBzdGFja05hbWU6ICdUZXN0LVN0YWNrLUMnLFxuICAgICAgICAgIHRlbXBsYXRlLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGFzc3VtZVJvbGVBcm46ICdibG9vcDoke0FXUzo6UmVnaW9ufToke0FXUzo6QWNjb3VudElkfScsXG4gICAgICAgICAgICBsb29rdXBSb2xlOiB7XG4gICAgICAgICAgICAgIGFybjogJ2Jsb29wLWxvb2t1cDoke0FXUzo6UmVnaW9ufToke0FXUzo6QWNjb3VudElkfScsXG4gICAgICAgICAgICAgIHJlcXVpcmVzQm9vdHN0cmFwU3RhY2tWZXJzaW9uOiA1LFxuICAgICAgICAgICAgICBib290c3RyYXBTdGFja1ZlcnNpb25Tc21QYXJhbWV0ZXI6ICcvYm9vdHN0cmFwL3BhcmFtZXRlcicsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzdGFja05hbWU6ICdUZXN0LVN0YWNrLUEnLFxuICAgICAgICAgIHRlbXBsYXRlLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGFzc3VtZVJvbGVBcm46ICdibG9vcDoke0FXUzo6UmVnaW9ufToke0FXUzo6QWNjb3VudElkfScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG4gICAgc2RrUHJvdmlkZXIgPSBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyO1xuICAgIG1vY2tGb3JFbnZpcm9ubWVudCA9IGplc3RcbiAgICAgIC5zcHlPbihzZGtQcm92aWRlciwgJ2ZvckVudmlyb25tZW50JylcbiAgICAgIC5tb2NrUmVzb2x2ZWRWYWx1ZSh7IHNkazogbW9ja1NkaywgZGlkQXNzdW1lUm9sZTogdHJ1ZSB9KTtcbiAgICBtb2NrQ2xvdWRGb3JtYXRpb25DbGllbnRcbiAgICAgIC5vbihHZXRUZW1wbGF0ZUNvbW1hbmQpXG4gICAgICAucmVzb2x2ZXMoe1xuICAgICAgICBUZW1wbGF0ZUJvZHk6IEpTT04uc3RyaW5naWZ5KHRlbXBsYXRlKSxcbiAgICAgIH0pXG4gICAgICAub24oRGVzY3JpYmVTdGFja3NDb21tYW5kKVxuICAgICAgLnJlc29sdmVzKHtcbiAgICAgICAgU3RhY2tzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgU3RhY2tOYW1lOiAnVGVzdC1TdGFjay1DJyxcbiAgICAgICAgICAgIFN0YWNrU3RhdHVzOiBTdGFja1N0YXR1cy5DUkVBVEVfQ09NUExFVEUsXG4gICAgICAgICAgICBDcmVhdGlvblRpbWU6IG5ldyBEYXRlKCksXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBTdGFja05hbWU6ICdUZXN0LVN0YWNrLUEnLFxuICAgICAgICAgICAgU3RhY2tTdGF0dXM6IFN0YWNrU3RhdHVzLkNSRUFURV9DT01QTEVURSxcbiAgICAgICAgICAgIENyZWF0aW9uVGltZTogbmV3IERhdGUoKSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2xvb2t1cCByb2xlIGlzIHVzZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBtb2NrU1NNQ2xpZW50Lm9uKEdldFBhcmFtZXRlckNvbW1hbmQpLnJlc29sdmVzKHsgUGFyYW1ldGVyOiB7IFZhbHVlOiAnNicgfSB9KTtcblxuICAgIGNvbnN0IGNka1Rvb2xraXQgPSBuZXcgQ2RrVG9vbGtpdCh7XG4gICAgICBjbG91ZEV4ZWN1dGFibGU6IG1vY2tDbG91ZEV4ZWN1dGFibGUsXG4gICAgICBjb25maWd1cmF0aW9uOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24sXG4gICAgICBzZGtQcm92aWRlcjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlcixcbiAgICAgIGRlcGxveW1lbnRzOiBuZXcgRGVwbG95bWVudHMoe1xuICAgICAgICBzZGtQcm92aWRlcjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlcixcbiAgICAgIH0pLFxuICAgIH0pO1xuXG4gICAgLy8gV0hFTlxuICAgIGF3YWl0IGNka1Rvb2xraXQuZGVwbG95KHtcbiAgICAgIHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbJ1Rlc3QtU3RhY2stQyddIH0sXG4gICAgICBob3Rzd2FwOiBIb3Rzd2FwTW9kZS5GVUxMX0RFUExPWU1FTlQsXG4gICAgfSk7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KG1vY2tTU01DbGllbnQpLnRvSGF2ZVJlY2VpdmVkQ29tbWFuZFdpdGgoR2V0UGFyYW1ldGVyQ29tbWFuZCwge1xuICAgICAgTmFtZTogJy9ib290c3RyYXAvcGFyYW1ldGVyJyxcbiAgICB9KTtcbiAgICBleHBlY3QobW9ja0ZvckVudmlyb25tZW50KS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMik7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudCkudG9IYXZlQmVlbk50aENhbGxlZFdpdGgoXG4gICAgICAxLFxuICAgICAge1xuICAgICAgICBhY2NvdW50OiAnMTIzNDU2Nzg5MDEyJyxcbiAgICAgICAgbmFtZTogJ2F3czovLzEyMzQ1Njc4OTAxMi9oZXJlJyxcbiAgICAgICAgcmVnaW9uOiAnaGVyZScsXG4gICAgICB9LFxuICAgICAgMCxcbiAgICAgIHtcbiAgICAgICAgYXNzdW1lUm9sZUFybjogJ2Jsb29wLWxvb2t1cDpoZXJlOjEyMzQ1Njc4OTAxMicsXG4gICAgICAgIGFzc3VtZVJvbGVFeHRlcm5hbElkOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgICk7XG4gIH0pO1xuXG4gIHRlc3QoJ2ZhbGxiYWNrIHRvIGRlcGxveSByb2xlIGlmIGJvb3RzdHJhcCBzdGFjayB2ZXJzaW9uIGlzIG5vdCB2YWxpZCcsIGFzeW5jICgpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIG1vY2tTU01DbGllbnQub24oR2V0UGFyYW1ldGVyQ29tbWFuZCkucmVzb2x2ZXMoeyBQYXJhbWV0ZXI6IHsgVmFsdWU6ICcxJyB9IH0pO1xuXG4gICAgY29uc3QgY2RrVG9vbGtpdCA9IG5ldyBDZGtUb29sa2l0KHtcbiAgICAgIGNsb3VkRXhlY3V0YWJsZTogbW9ja0Nsb3VkRXhlY3V0YWJsZSxcbiAgICAgIGNvbmZpZ3VyYXRpb246IG1vY2tDbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbixcbiAgICAgIHNka1Byb3ZpZGVyOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLFxuICAgICAgZGVwbG95bWVudHM6IG5ldyBEZXBsb3ltZW50cyh7XG4gICAgICAgIHNka1Byb3ZpZGVyOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLFxuICAgICAgfSksXG4gICAgfSk7XG5cbiAgICAvLyBXSEVOXG4gICAgYXdhaXQgY2RrVG9vbGtpdC5kZXBsb3koe1xuICAgICAgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnVGVzdC1TdGFjay1DJ10gfSxcbiAgICAgIGhvdHN3YXA6IEhvdHN3YXBNb2RlLkZVTExfREVQTE9ZTUVOVCxcbiAgICB9KTtcblxuICAgIC8vIFRIRU5cbiAgICBleHBlY3QoZmxhdHRlbihzdGRlcnJNb2NrLm1vY2suY2FsbHMpKS50b0VxdWFsKFxuICAgICAgZXhwZWN0LmFycmF5Q29udGFpbmluZyhbXG5cbiAgICAgICAgZXhwZWN0LnN0cmluZ0NvbnRhaW5pbmcoXG4gICAgICAgICAgXCJCb290c3RyYXAgc3RhY2sgdmVyc2lvbiAnNScgaXMgcmVxdWlyZWQsIGZvdW5kIHZlcnNpb24gJzEnLiBUbyBnZXQgcmlkIG9mIHRoaXMgZXJyb3IsIHBsZWFzZSB1cGdyYWRlIHRvIGJvb3RzdHJhcCB2ZXJzaW9uID49IDVcIixcbiAgICAgICAgKSxcbiAgICAgIF0pLFxuICAgICk7XG4gICAgZXhwZWN0KG1vY2tTU01DbGllbnQpLnRvSGF2ZVJlY2VpdmVkQ29tbWFuZFdpdGgoR2V0UGFyYW1ldGVyQ29tbWFuZCwge1xuICAgICAgTmFtZTogJy9ib290c3RyYXAvcGFyYW1ldGVyJyxcbiAgICB9KTtcbiAgICBleHBlY3QobW9ja0ZvckVudmlyb25tZW50KS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMyk7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudCkudG9IYXZlQmVlbk50aENhbGxlZFdpdGgoXG4gICAgICAxLFxuICAgICAge1xuICAgICAgICBhY2NvdW50OiAnMTIzNDU2Nzg5MDEyJyxcbiAgICAgICAgbmFtZTogJ2F3czovLzEyMzQ1Njc4OTAxMi9oZXJlJyxcbiAgICAgICAgcmVnaW9uOiAnaGVyZScsXG4gICAgICB9LFxuICAgICAgMCxcbiAgICAgIHtcbiAgICAgICAgYXNzdW1lUm9sZUFybjogJ2Jsb29wLWxvb2t1cDpoZXJlOjEyMzQ1Njc4OTAxMicsXG4gICAgICAgIGFzc3VtZVJvbGVFeHRlcm5hbElkOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgICk7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudCkudG9IYXZlQmVlbk50aENhbGxlZFdpdGgoXG4gICAgICAyLFxuICAgICAge1xuICAgICAgICBhY2NvdW50OiAnMTIzNDU2Nzg5MDEyJyxcbiAgICAgICAgbmFtZTogJ2F3czovLzEyMzQ1Njc4OTAxMi9oZXJlJyxcbiAgICAgICAgcmVnaW9uOiAnaGVyZScsXG4gICAgICB9LFxuICAgICAgMCxcbiAgICAgIHtcbiAgICAgICAgYXNzdW1lUm9sZUFybjogJ2Jsb29wOmhlcmU6MTIzNDU2Nzg5MDEyJyxcbiAgICAgICAgYXNzdW1lUm9sZUV4dGVybmFsSWQ6IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgKTtcbiAgfSk7XG5cbiAgdGVzdCgnZmFsbGJhY2sgdG8gZGVwbG95IHJvbGUgaWYgYm9vdHN0cmFwIHZlcnNpb24gcGFyYW1ldGVyIG5vdCBmb3VuZCcsIGFzeW5jICgpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIG1vY2tTU01DbGllbnQub24oR2V0UGFyYW1ldGVyQ29tbWFuZCkuY2FsbHNGYWtlKCgpID0+IHtcbiAgICAgIGNvbnN0IGU6IGFueSA9IG5ldyBFcnJvcignbm90IGZvdW5kJyk7XG4gICAgICBlLmNvZGUgPSBlLm5hbWUgPSAnUGFyYW1ldGVyTm90Rm91bmQnO1xuICAgICAgdGhyb3cgZTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGNka1Rvb2xraXQgPSBuZXcgQ2RrVG9vbGtpdCh7XG4gICAgICBjbG91ZEV4ZWN1dGFibGU6IG1vY2tDbG91ZEV4ZWN1dGFibGUsXG4gICAgICBjb25maWd1cmF0aW9uOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24sXG4gICAgICBzZGtQcm92aWRlcjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlcixcbiAgICAgIGRlcGxveW1lbnRzOiBuZXcgRGVwbG95bWVudHMoe1xuICAgICAgICBzZGtQcm92aWRlcjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlcixcbiAgICAgIH0pLFxuICAgIH0pO1xuXG4gICAgLy8gV0hFTlxuICAgIGF3YWl0IGNka1Rvb2xraXQuZGVwbG95KHtcbiAgICAgIHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbJ1Rlc3QtU3RhY2stQyddIH0sXG4gICAgICBob3Rzd2FwOiBIb3Rzd2FwTW9kZS5GVUxMX0RFUExPWU1FTlQsXG4gICAgfSk7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KGZsYXR0ZW4oc3RkZXJyTW9jay5tb2NrLmNhbGxzKSkudG9FcXVhbChcbiAgICAgIGV4cGVjdC5hcnJheUNvbnRhaW5pbmcoW2V4cGVjdC5zdHJpbmdNYXRjaGluZygvU1NNIHBhcmFtZXRlci4qbm90IGZvdW5kLi8pXSksXG4gICAgKTtcbiAgICBleHBlY3QobW9ja0ZvckVudmlyb25tZW50KS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMyk7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudCkudG9IYXZlQmVlbk50aENhbGxlZFdpdGgoXG4gICAgICAxLFxuICAgICAge1xuICAgICAgICBhY2NvdW50OiAnMTIzNDU2Nzg5MDEyJyxcbiAgICAgICAgbmFtZTogJ2F3czovLzEyMzQ1Njc4OTAxMi9oZXJlJyxcbiAgICAgICAgcmVnaW9uOiAnaGVyZScsXG4gICAgICB9LFxuICAgICAgMCxcbiAgICAgIHtcbiAgICAgICAgYXNzdW1lUm9sZUFybjogJ2Jsb29wLWxvb2t1cDpoZXJlOjEyMzQ1Njc4OTAxMicsXG4gICAgICAgIGFzc3VtZVJvbGVFeHRlcm5hbElkOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgICk7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudCkudG9IYXZlQmVlbk50aENhbGxlZFdpdGgoXG4gICAgICAyLFxuICAgICAge1xuICAgICAgICBhY2NvdW50OiAnMTIzNDU2Nzg5MDEyJyxcbiAgICAgICAgbmFtZTogJ2F3czovLzEyMzQ1Njc4OTAxMi9oZXJlJyxcbiAgICAgICAgcmVnaW9uOiAnaGVyZScsXG4gICAgICB9LFxuICAgICAgMCxcbiAgICAgIHtcbiAgICAgICAgYXNzdW1lUm9sZUFybjogJ2Jsb29wOmhlcmU6MTIzNDU2Nzg5MDEyJyxcbiAgICAgICAgYXNzdW1lUm9sZUV4dGVybmFsSWQ6IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgKTtcbiAgfSk7XG5cbiAgdGVzdCgnZmFsbGJhY2sgdG8gZGVwbG95IHJvbGUgaWYgZm9yRW52aXJvbm1lbnQgdGhyb3dzJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgLy8gdGhyb3cgZXJyb3IgZmlyc3QgZm9yIHRoZSAncHJlcGFyZVNka1dpdGhMb29rdXBSb2xlRm9yJyBjYWxsIGFuZCBzdWNjZWVkIGZvciB0aGUgcmVzdFxuICAgIG1vY2tGb3JFbnZpcm9ubWVudCA9IGplc3Quc3B5T24oc2RrUHJvdmlkZXIsICdmb3JFbnZpcm9ubWVudCcpLm1vY2tJbXBsZW1lbnRhdGlvbk9uY2UoKCkgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGVFcnJvclRoYXRHZXRzVGhyb3duJyk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBjZGtUb29sa2l0ID0gbmV3IENka1Rvb2xraXQoe1xuICAgICAgY2xvdWRFeGVjdXRhYmxlOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLFxuICAgICAgY29uZmlndXJhdGlvbjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLFxuICAgICAgc2RrUHJvdmlkZXI6IG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIsXG4gICAgICBkZXBsb3ltZW50czogbmV3IERlcGxveW1lbnRzKHtcbiAgICAgICAgc2RrUHJvdmlkZXI6IG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIsXG4gICAgICB9KSxcbiAgICB9KTtcblxuICAgIC8vIFdIRU5cbiAgICBhd2FpdCBjZGtUb29sa2l0LmRlcGxveSh7XG4gICAgICBzZWxlY3RvcjogeyBwYXR0ZXJuczogWydUZXN0LVN0YWNrLUMnXSB9LFxuICAgICAgaG90c3dhcDogSG90c3dhcE1vZGUuRlVMTF9ERVBMT1lNRU5ULFxuICAgIH0pO1xuXG4gICAgLy8gVEhFTlxuICAgIGV4cGVjdChtb2NrU1NNQ2xpZW50KS5ub3QudG9IYXZlUmVjZWl2ZWRBbnlDb21tYW5kKCk7XG4gICAgZXhwZWN0KGZsYXR0ZW4oc3RkZXJyTW9jay5tb2NrLmNhbGxzKSkudG9FcXVhbChcbiAgICAgIGV4cGVjdC5hcnJheUNvbnRhaW5pbmcoW2V4cGVjdC5zdHJpbmdNYXRjaGluZygvVGhlRXJyb3JUaGF0R2V0c1Rocm93bi8pXSksXG4gICAgKTtcbiAgICBleHBlY3QobW9ja0ZvckVudmlyb25tZW50KS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMyk7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudCkudG9IYXZlQmVlbk50aENhbGxlZFdpdGgoXG4gICAgICAxLFxuICAgICAge1xuICAgICAgICBhY2NvdW50OiAnMTIzNDU2Nzg5MDEyJyxcbiAgICAgICAgbmFtZTogJ2F3czovLzEyMzQ1Njc4OTAxMi9oZXJlJyxcbiAgICAgICAgcmVnaW9uOiAnaGVyZScsXG4gICAgICB9LFxuICAgICAgMCxcbiAgICAgIHtcbiAgICAgICAgYXNzdW1lUm9sZUFybjogJ2Jsb29wLWxvb2t1cDpoZXJlOjEyMzQ1Njc4OTAxMicsXG4gICAgICAgIGFzc3VtZVJvbGVFeHRlcm5hbElkOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgICk7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudCkudG9IYXZlQmVlbk50aENhbGxlZFdpdGgoXG4gICAgICAyLFxuICAgICAge1xuICAgICAgICBhY2NvdW50OiAnMTIzNDU2Nzg5MDEyJyxcbiAgICAgICAgbmFtZTogJ2F3czovLzEyMzQ1Njc4OTAxMi9oZXJlJyxcbiAgICAgICAgcmVnaW9uOiAnaGVyZScsXG4gICAgICB9LFxuICAgICAgMCxcbiAgICAgIHtcbiAgICAgICAgYXNzdW1lUm9sZUFybjogJ2Jsb29wOmhlcmU6MTIzNDU2Nzg5MDEyJyxcbiAgICAgICAgYXNzdW1lUm9sZUV4dGVybmFsSWQ6IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgKTtcbiAgfSk7XG5cbiAgdGVzdCgnZG9udCBsb29rdXAgYm9vdHN0cmFwIHZlcnNpb24gcGFyYW1ldGVyIGlmIGRlZmF1bHQgY3JlZGVudGlhbHMgYXJlIHVzZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBtb2NrRm9yRW52aXJvbm1lbnQgPSBqZXN0LmZuKCkubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcbiAgICAgIHJldHVybiB7IHNkazogbW9ja1NkaywgZGlkQXNzdW1lUm9sZTogZmFsc2UgfTtcbiAgICB9KTtcbiAgICBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLmZvckVudmlyb25tZW50ID0gbW9ja0ZvckVudmlyb25tZW50O1xuICAgIGNvbnN0IGNka1Rvb2xraXQgPSBuZXcgQ2RrVG9vbGtpdCh7XG4gICAgICBjbG91ZEV4ZWN1dGFibGU6IG1vY2tDbG91ZEV4ZWN1dGFibGUsXG4gICAgICBjb25maWd1cmF0aW9uOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24sXG4gICAgICBzZGtQcm92aWRlcjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlcixcbiAgICAgIGRlcGxveW1lbnRzOiBuZXcgRGVwbG95bWVudHMoe1xuICAgICAgICBzZGtQcm92aWRlcjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlcixcbiAgICAgIH0pLFxuICAgIH0pO1xuXG4gICAgLy8gV0hFTlxuICAgIGF3YWl0IGNka1Rvb2xraXQuZGVwbG95KHtcbiAgICAgIHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbJ1Rlc3QtU3RhY2stQyddIH0sXG4gICAgICBob3Rzd2FwOiBIb3Rzd2FwTW9kZS5GVUxMX0RFUExPWU1FTlQsXG4gICAgfSk7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KGZsYXR0ZW4oc3RkZXJyTW9jay5tb2NrLmNhbGxzKSkudG9FcXVhbChcbiAgICAgIGV4cGVjdC5hcnJheUNvbnRhaW5pbmcoW1xuICAgICAgICBleHBlY3Quc3RyaW5nTWF0Y2hpbmcoL0xvb2t1cCByb2xlLip3YXMgbm90IGFzc3VtZWQuIFByb2NlZWRpbmcgd2l0aCBkZWZhdWx0IGNyZWRlbnRpYWxzLi8pLFxuICAgICAgXSksXG4gICAgKTtcbiAgICBleHBlY3QobW9ja1NTTUNsaWVudCkubm90LnRvSGF2ZVJlY2VpdmVkQW55Q29tbWFuZCgpO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQpLnRvSGF2ZUJlZW5OdGhDYWxsZWRXaXRoKFxuICAgICAgMSxcbiAgICAgIHtcbiAgICAgICAgYWNjb3VudDogJzEyMzQ1Njc4OTAxMicsXG4gICAgICAgIG5hbWU6ICdhd3M6Ly8xMjM0NTY3ODkwMTIvaGVyZScsXG4gICAgICAgIHJlZ2lvbjogJ2hlcmUnLFxuICAgICAgfSxcbiAgICAgIE1vZGUuRm9yUmVhZGluZyxcbiAgICAgIHtcbiAgICAgICAgYXNzdW1lUm9sZUFybjogJ2Jsb29wLWxvb2t1cDpoZXJlOjEyMzQ1Njc4OTAxMicsXG4gICAgICAgIGFzc3VtZVJvbGVFeHRlcm5hbElkOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgICk7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudCkudG9IYXZlQmVlbk50aENhbGxlZFdpdGgoXG4gICAgICAyLFxuICAgICAge1xuICAgICAgICBhY2NvdW50OiAnMTIzNDU2Nzg5MDEyJyxcbiAgICAgICAgbmFtZTogJ2F3czovLzEyMzQ1Njc4OTAxMi9oZXJlJyxcbiAgICAgICAgcmVnaW9uOiAnaGVyZScsXG4gICAgICB9LFxuICAgICAgTW9kZS5Gb3JXcml0aW5nLFxuICAgICAge1xuICAgICAgICBhc3N1bWVSb2xlQXJuOiAnYmxvb3A6aGVyZToxMjM0NTY3ODkwMTInLFxuICAgICAgICBhc3N1bWVSb2xlRXh0ZXJuYWxJZDogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICApO1xuICB9KTtcblxuICB0ZXN0KCdkbyBub3QgcHJpbnQgd2FybmluZ3MgaWYgbG9va3VwIHJvbGUgbm90IHByb3ZpZGVkIGluIHN0YWNrIGFydGlmYWN0JywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3QgY2RrVG9vbGtpdCA9IG5ldyBDZGtUb29sa2l0KHtcbiAgICAgIGNsb3VkRXhlY3V0YWJsZTogbW9ja0Nsb3VkRXhlY3V0YWJsZSxcbiAgICAgIGNvbmZpZ3VyYXRpb246IG1vY2tDbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbixcbiAgICAgIHNka1Byb3ZpZGVyOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLFxuICAgICAgZGVwbG95bWVudHM6IG5ldyBEZXBsb3ltZW50cyh7XG4gICAgICAgIHNka1Byb3ZpZGVyOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLFxuICAgICAgfSksXG4gICAgfSk7XG5cbiAgICAvLyBXSEVOXG4gICAgYXdhaXQgY2RrVG9vbGtpdC5kZXBsb3koe1xuICAgICAgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnVGVzdC1TdGFjay1BJ10gfSxcbiAgICAgIGhvdHN3YXA6IEhvdHN3YXBNb2RlLkZVTExfREVQTE9ZTUVOVCxcbiAgICB9KTtcblxuICAgIC8vIFRIRU5cbiAgICBleHBlY3QoZmxhdHRlbihzdGRlcnJNb2NrLm1vY2suY2FsbHMpKS5ub3QudG9FcXVhbChcbiAgICAgIGV4cGVjdC5hcnJheUNvbnRhaW5pbmcoW1xuICAgICAgICBleHBlY3Quc3RyaW5nTWF0Y2hpbmcoL0NvdWxkIG5vdCBhc3N1bWUvKSxcbiAgICAgICAgZXhwZWN0LnN0cmluZ01hdGNoaW5nKC9wbGVhc2UgdXBncmFkZSB0byBib290c3RyYXAgdmVyc2lvbi8pLFxuICAgICAgXSksXG4gICAgKTtcbiAgICBleHBlY3QobW9ja1NTTUNsaWVudCkubm90LnRvSGF2ZVJlY2VpdmVkQW55Q29tbWFuZCgpO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygyKTtcbiAgICBleHBlY3QobW9ja0ZvckVudmlyb25tZW50KS50b0hhdmVCZWVuTnRoQ2FsbGVkV2l0aChcbiAgICAgIDEsXG4gICAgICB7XG4gICAgICAgIGFjY291bnQ6ICcxMjM0NTY3ODkwMTInLFxuICAgICAgICBuYW1lOiAnYXdzOi8vMTIzNDU2Nzg5MDEyL2hlcmUnLFxuICAgICAgICByZWdpb246ICdoZXJlJyxcbiAgICAgIH0sXG4gICAgICAwLFxuICAgICAge1xuICAgICAgICBhc3N1bWVSb2xlQXJuOiB1bmRlZmluZWQsXG4gICAgICAgIGFzc3VtZVJvbGVFeHRlcm5hbElkOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgICk7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudCkudG9IYXZlQmVlbk50aENhbGxlZFdpdGgoXG4gICAgICAyLFxuICAgICAge1xuICAgICAgICBhY2NvdW50OiAnMTIzNDU2Nzg5MDEyJyxcbiAgICAgICAgbmFtZTogJ2F3czovLzEyMzQ1Njc4OTAxMi9oZXJlJyxcbiAgICAgICAgcmVnaW9uOiAnaGVyZScsXG4gICAgICB9LFxuICAgICAgMSxcbiAgICAgIHtcbiAgICAgICAgYXNzdW1lUm9sZUFybjogJ2Jsb29wOmhlcmU6MTIzNDU2Nzg5MDEyJyxcbiAgICAgICAgYXNzdW1lUm9sZUV4dGVybmFsSWQ6IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ2Jvb3RzdHJhcCcsICgpID0+IHtcbiAgdGVzdCgnYWNjZXB0cyBxdWFsaWZpZXIgZnJvbSBjb250ZXh0JywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcbiAgICBjb25zdCBjb25maWd1cmF0aW9uID0gbmV3IENvbmZpZ3VyYXRpb24oKTtcbiAgICBjb25maWd1cmF0aW9uLmNvbnRleHQuc2V0KCdAYXdzLWNkay9jb3JlOmJvb3RzdHJhcFF1YWxpZmllcicsICdhYmNkZScpO1xuXG4gICAgLy8gV0hFTlxuICAgIGF3YWl0IHRvb2xraXQuYm9vdHN0cmFwKFsnYXdzOi8vNTY3ODkvc291dGgtcG9sZSddLCB7XG4gICAgICBzb3VyY2U6IGRlZmF1bHRCb290c3RyYXBTb3VyY2UsXG4gICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgIHF1YWxpZmllcjogY29uZmlndXJhdGlvbi5jb250ZXh0LmdldCgnQGF3cy1jZGsvY29yZTpib290c3RyYXBRdWFsaWZpZXInKSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KGJvb3RzdHJhcEVudmlyb25tZW50TW9jaykudG9IYXZlQmVlbkNhbGxlZFdpdGgoZXhwZWN0LmFueXRoaW5nKCksIGV4cGVjdC5hbnl0aGluZygpLCB7XG4gICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgIHF1YWxpZmllcjogJ2FiY2RlJyxcbiAgICAgIH0sXG4gICAgICBzb3VyY2U6IGRlZmF1bHRCb290c3RyYXBTb3VyY2UsXG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdkZXBsb3knLCAoKSA9PiB7XG4gIHRlc3QoJ2ZhaWxzIHdoZW4gbm8gdmFsaWQgc3RhY2sgbmFtZXMgYXJlIGdpdmVuJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgIC8vIFdIRU5cbiAgICBhd2FpdCBleHBlY3QoKCkgPT5cbiAgICAgIHRvb2xraXQuZGVwbG95KHtcbiAgICAgICAgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnVGVzdC1TdGFjay1EJ10gfSxcbiAgICAgICAgaG90c3dhcDogSG90c3dhcE1vZGUuRlVMTF9ERVBMT1lNRU5ULFxuICAgICAgfSksXG4gICAgKS5yZWplY3RzLnRvVGhyb3coJ05vIHN0YWNrcyBtYXRjaCB0aGUgbmFtZShzKSBUZXN0LVN0YWNrLUQnKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3dpdGggaG90c3dhcCBkZXBsb3ltZW50JywgKCkgPT4ge1xuICAgIHRlc3QoXCJwYXNzZXMgdGhyb3VnaCB0aGUgJ2hvdHN3YXAnIG9wdGlvbiB0byBDbG91ZEZvcm1hdGlvbkRlcGxveW1lbnRzLmRlcGxveVN0YWNrKClcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIGNvbnN0IG1vY2tDZm5EZXBsb3ltZW50cyA9IGluc3RhbmNlTW9ja0Zyb20oRGVwbG95bWVudHMpO1xuICAgICAgbW9ja0NmbkRlcGxveW1lbnRzLmRlcGxveVN0YWNrLm1vY2tSZXR1cm5WYWx1ZShcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgICAgICB0eXBlOiAnZGlkLWRlcGxveS1zdGFjaycsXG4gICAgICAgICAgbm9PcDogZmFsc2UsXG4gICAgICAgICAgb3V0cHV0czoge30sXG4gICAgICAgICAgc3RhY2tBcm46ICdzdGFja0FybicsXG4gICAgICAgICAgc3RhY2tBcnRpZmFjdDogaW5zdGFuY2VNb2NrRnJvbShjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3QpLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgICBjb25zdCBjZGtUb29sa2l0ID0gbmV3IENka1Rvb2xraXQoe1xuICAgICAgICBjbG91ZEV4ZWN1dGFibGUsXG4gICAgICAgIGNvbmZpZ3VyYXRpb246IGNsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLFxuICAgICAgICBzZGtQcm92aWRlcjogY2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLFxuICAgICAgICBkZXBsb3ltZW50czogbW9ja0NmbkRlcGxveW1lbnRzLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGF3YWl0IGNka1Rvb2xraXQuZGVwbG95KHtcbiAgICAgICAgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnVGVzdC1TdGFjay1BLURpc3BsYXktTmFtZSddIH0sXG4gICAgICAgIHJlcXVpcmVBcHByb3ZhbDogUmVxdWlyZUFwcHJvdmFsLk5ldmVyLFxuICAgICAgICBob3Rzd2FwOiBIb3Rzd2FwTW9kZS5GQUxMX0JBQ0ssXG4gICAgICB9KTtcblxuICAgICAgLy8gVEhFTlxuICAgICAgZXhwZWN0KG1vY2tDZm5EZXBsb3ltZW50cy5kZXBsb3lTdGFjaykudG9IYXZlQmVlbkNhbGxlZFdpdGgoXG4gICAgICAgIGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICAgICAgICBob3Rzd2FwOiBIb3Rzd2FwTW9kZS5GQUxMX0JBQ0ssXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ21ha2VzIGNvcnJlY3QgQ2xvdWRGb3JtYXRpb24gY2FsbHMnLCAoKSA9PiB7XG4gICAgdGVzdCgnd2l0aG91dCBvcHRpb25zJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGF3YWl0IHRvb2xraXQuZGVwbG95KHtcbiAgICAgICAgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnVGVzdC1TdGFjay1BJywgJ1Rlc3QtU3RhY2stQiddIH0sXG4gICAgICAgIGhvdHN3YXA6IEhvdHN3YXBNb2RlLkZVTExfREVQTE9ZTUVOVCxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnd2l0aCBzdGFja3MgYWxsIHN0YWNrcyBzcGVjaWZpZWQgYXMgZG91YmxlIHdpbGRjYXJkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGF3YWl0IHRvb2xraXQuZGVwbG95KHtcbiAgICAgICAgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnKionXSB9LFxuICAgICAgICBob3Rzd2FwOiBIb3Rzd2FwTW9kZS5GVUxMX0RFUExPWU1FTlQsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3dpdGggb25lIHN0YWNrIHNwZWNpZmllZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgICAvLyBXSEVOXG4gICAgICBhd2FpdCB0b29sa2l0LmRlcGxveSh7XG4gICAgICAgIHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbJ1Rlc3QtU3RhY2stQS1EaXNwbGF5LU5hbWUnXSB9LFxuICAgICAgICBob3Rzd2FwOiBIb3Rzd2FwTW9kZS5GVUxMX0RFUExPWU1FTlQsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3dpdGggc3RhY2tzIGFsbCBzdGFja3Mgc3BlY2lmaWVkIGFzIHdpbGRjYXJkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGF3YWl0IHRvb2xraXQuZGVwbG95KHtcbiAgICAgICAgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnKiddIH0sXG4gICAgICAgIGhvdHN3YXA6IEhvdHN3YXBNb2RlLkZVTExfREVQTE9ZTUVOVCxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3NucyBub3RpZmljYXRpb24gYXJucycsICgpID0+IHtcbiAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBjbG91ZEV4ZWN1dGFibGUgPSBuZXcgTW9ja0Nsb3VkRXhlY3V0YWJsZSh7XG4gICAgICAgICAgc3RhY2tzOiBbXG4gICAgICAgICAgICBNb2NrU3RhY2suTU9DS19TVEFDS19BLFxuICAgICAgICAgICAgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQixcbiAgICAgICAgICAgIE1vY2tTdGFjay5NT0NLX1NUQUNLX1dJVEhfTk9USUZJQ0FUSU9OX0FSTlMsXG4gICAgICAgICAgICBNb2NrU3RhY2suTU9DS19TVEFDS19XSVRIX0JBRF9OT1RJRklDQVRJT05fQVJOUyxcbiAgICAgICAgICBdLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICB0ZXN0KCd3aXRoIHNucyBub3RpZmljYXRpb24gYXJucyBhcyBvcHRpb25zJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAvLyBHSVZFTlxuICAgICAgICBjb25zdCBub3RpZmljYXRpb25Bcm5zID0gW1xuICAgICAgICAgICdhcm46YXdzOnNuczp1cy1lYXN0LTI6NDQ0NDU1NTU2NjY2Ok15VG9waWMnLFxuICAgICAgICAgICdhcm46YXdzOnNuczpldS13ZXN0LTE6MTExMTU1NTU2NjY2Om15LWdyZWF0LXRvcGljJyxcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgdG9vbGtpdCA9IG5ldyBDZGtUb29sa2l0KHtcbiAgICAgICAgICBjbG91ZEV4ZWN1dGFibGUsXG4gICAgICAgICAgY29uZmlndXJhdGlvbjogY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24sXG4gICAgICAgICAgc2RrUHJvdmlkZXI6IGNsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlcixcbiAgICAgICAgICBkZXBsb3ltZW50czogbmV3IEZha2VDbG91ZEZvcm1hdGlvbihcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgJ1Rlc3QtU3RhY2stQSc6IHsgRm9vOiAnQmFyJyB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5vdGlmaWNhdGlvbkFybnMsXG4gICAgICAgICAgKSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gV0hFTlxuICAgICAgICBhd2FpdCB0b29sa2l0LmRlcGxveSh7XG4gICAgICAgICAgLy8gU3RhY2tzIHNob3VsZCBiZSBzZWxlY3RlZCBieSB0aGVpciBoaWVyYXJjaGljYWwgSUQsIHdoaWNoIGlzIHRoZWlyIGRpc3BsYXlOYW1lLCBub3QgYnkgdGhlIHN0YWNrIElELlxuICAgICAgICAgIHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbJ1Rlc3QtU3RhY2stQS1EaXNwbGF5LU5hbWUnXSB9LFxuICAgICAgICAgIG5vdGlmaWNhdGlvbkFybnMsXG4gICAgICAgICAgaG90c3dhcDogSG90c3dhcE1vZGUuRlVMTF9ERVBMT1lNRU5ULFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICB0ZXN0KCdmYWlsIHdpdGggaW5jb3JyZWN0IHNucyBub3RpZmljYXRpb24gYXJucyBhcyBvcHRpb25zJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAvLyBHSVZFTlxuICAgICAgICBjb25zdCBub3RpZmljYXRpb25Bcm5zID0gWydhcm46OjpjZm4tbXktY29vbC10b3BpYyddO1xuICAgICAgICBjb25zdCB0b29sa2l0ID0gbmV3IENka1Rvb2xraXQoe1xuICAgICAgICAgIGNsb3VkRXhlY3V0YWJsZSxcbiAgICAgICAgICBjb25maWd1cmF0aW9uOiBjbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbixcbiAgICAgICAgICBzZGtQcm92aWRlcjogY2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLFxuICAgICAgICAgIGRlcGxveW1lbnRzOiBuZXcgRmFrZUNsb3VkRm9ybWF0aW9uKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAnVGVzdC1TdGFjay1BJzogeyBGb286ICdCYXInIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbm90aWZpY2F0aW9uQXJucyxcbiAgICAgICAgICApLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBXSEVOXG4gICAgICAgIGF3YWl0IGV4cGVjdCgoKSA9PlxuICAgICAgICAgIHRvb2xraXQuZGVwbG95KHtcbiAgICAgICAgICAgIC8vIFN0YWNrcyBzaG91bGQgYmUgc2VsZWN0ZWQgYnkgdGhlaXIgaGllcmFyY2hpY2FsIElELCB3aGljaCBpcyB0aGVpciBkaXNwbGF5TmFtZSwgbm90IGJ5IHRoZSBzdGFjayBJRC5cbiAgICAgICAgICAgIHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbJ1Rlc3QtU3RhY2stQS1EaXNwbGF5LU5hbWUnXSB9LFxuICAgICAgICAgICAgbm90aWZpY2F0aW9uQXJucyxcbiAgICAgICAgICAgIGhvdHN3YXA6IEhvdHN3YXBNb2RlLkZVTExfREVQTE9ZTUVOVCxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKS5yZWplY3RzLnRvVGhyb3coJ05vdGlmaWNhdGlvbiBhcm4gYXJuOjo6Y2ZuLW15LWNvb2wtdG9waWMgaXMgbm90IGEgdmFsaWQgYXJuIGZvciBhbiBTTlMgdG9waWMnKTtcbiAgICAgIH0pO1xuXG4gICAgICB0ZXN0KCd3aXRoIHNucyBub3RpZmljYXRpb24gYXJucyBpbiB0aGUgZXhlY3V0YWJsZScsIGFzeW5jICgpID0+IHtcbiAgICAgICAgLy8gR0lWRU5cbiAgICAgICAgY29uc3QgZXhwZWN0ZWROb3RpZmljYXRpb25Bcm5zID0gWydhcm46YXdzOnNuczpiZXJtdWRhLXRyaWFuZ2xlLTEzMzc6MTIzNDU2Nzg5MDEyOk15VG9waWMnXTtcbiAgICAgICAgY29uc3QgdG9vbGtpdCA9IG5ldyBDZGtUb29sa2l0KHtcbiAgICAgICAgICBjbG91ZEV4ZWN1dGFibGUsXG4gICAgICAgICAgY29uZmlndXJhdGlvbjogY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24sXG4gICAgICAgICAgc2RrUHJvdmlkZXI6IGNsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlcixcbiAgICAgICAgICBkZXBsb3ltZW50czogbmV3IEZha2VDbG91ZEZvcm1hdGlvbihcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgJ1Rlc3QtU3RhY2stTm90aWZpY2F0aW9uLUFybnMnOiB7IEZvbzogJ0JhcicgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBleHBlY3RlZE5vdGlmaWNhdGlvbkFybnMsXG4gICAgICAgICAgKSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gV0hFTlxuICAgICAgICBhd2FpdCB0b29sa2l0LmRlcGxveSh7XG4gICAgICAgICAgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnVGVzdC1TdGFjay1Ob3RpZmljYXRpb24tQXJucyddIH0sXG4gICAgICAgICAgaG90c3dhcDogSG90c3dhcE1vZGUuRlVMTF9ERVBMT1lNRU5ULFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICB0ZXN0KCdmYWlsIHdpdGggaW5jb3JyZWN0IHNucyBub3RpZmljYXRpb24gYXJucyBpbiB0aGUgZXhlY3V0YWJsZScsIGFzeW5jICgpID0+IHtcbiAgICAgICAgLy8gR0lWRU5cbiAgICAgICAgY29uc3QgdG9vbGtpdCA9IG5ldyBDZGtUb29sa2l0KHtcbiAgICAgICAgICBjbG91ZEV4ZWN1dGFibGUsXG4gICAgICAgICAgY29uZmlndXJhdGlvbjogY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24sXG4gICAgICAgICAgc2RrUHJvdmlkZXI6IGNsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlcixcbiAgICAgICAgICBkZXBsb3ltZW50czogbmV3IEZha2VDbG91ZEZvcm1hdGlvbih7XG4gICAgICAgICAgICAnVGVzdC1TdGFjay1CYWQtTm90aWZpY2F0aW9uLUFybnMnOiB7IEZvbzogJ0JhcicgfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gV0hFTlxuICAgICAgICBhd2FpdCBleHBlY3QoKCkgPT5cbiAgICAgICAgICB0b29sa2l0LmRlcGxveSh7XG4gICAgICAgICAgICBzZWxlY3RvcjogeyBwYXR0ZXJuczogWydUZXN0LVN0YWNrLUJhZC1Ob3RpZmljYXRpb24tQXJucyddIH0sXG4gICAgICAgICAgICBob3Rzd2FwOiBIb3Rzd2FwTW9kZS5GVUxMX0RFUExPWU1FTlQsXG4gICAgICAgICAgfSksXG4gICAgICAgICkucmVqZWN0cy50b1Rocm93KCdOb3RpZmljYXRpb24gYXJuIGFybjoxMzM3OjEyMzQ1Njc4OTAxMjpzbnM6YmFkIGlzIG5vdCBhIHZhbGlkIGFybiBmb3IgYW4gU05TIHRvcGljJyk7XG4gICAgICB9KTtcblxuICAgICAgdGVzdCgnd2l0aCBzbnMgbm90aWZpY2F0aW9uIGFybnMgaW4gdGhlIGV4ZWN1dGFibGUgYW5kIGFzIG9wdGlvbnMnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIC8vIEdJVkVOXG4gICAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbkFybnMgPSBbXG4gICAgICAgICAgJ2Fybjphd3M6c25zOnVzLWVhc3QtMjo0NDQ0NTU1NTY2NjY6TXlUb3BpYycsXG4gICAgICAgICAgJ2Fybjphd3M6c25zOmV1LXdlc3QtMToxMTExNTU1NTY2NjY6bXktZ3JlYXQtdG9waWMnLFxuICAgICAgICBdO1xuXG4gICAgICAgIGNvbnN0IGV4cGVjdGVkTm90aWZpY2F0aW9uQXJucyA9IG5vdGlmaWNhdGlvbkFybnMuY29uY2F0KFtcbiAgICAgICAgICAnYXJuOmF3czpzbnM6YmVybXVkYS10cmlhbmdsZS0xMzM3OjEyMzQ1Njc4OTAxMjpNeVRvcGljJyxcbiAgICAgICAgXSk7XG4gICAgICAgIGNvbnN0IHRvb2xraXQgPSBuZXcgQ2RrVG9vbGtpdCh7XG4gICAgICAgICAgY2xvdWRFeGVjdXRhYmxlLFxuICAgICAgICAgIGNvbmZpZ3VyYXRpb246IGNsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLFxuICAgICAgICAgIHNka1Byb3ZpZGVyOiBjbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIsXG4gICAgICAgICAgZGVwbG95bWVudHM6IG5ldyBGYWtlQ2xvdWRGb3JtYXRpb24oXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICdUZXN0LVN0YWNrLU5vdGlmaWNhdGlvbi1Bcm5zJzogeyBGb286ICdCYXInIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXhwZWN0ZWROb3RpZmljYXRpb25Bcm5zLFxuICAgICAgICAgICksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFdIRU5cbiAgICAgICAgYXdhaXQgdG9vbGtpdC5kZXBsb3koe1xuICAgICAgICAgIHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbJ1Rlc3QtU3RhY2stTm90aWZpY2F0aW9uLUFybnMnXSB9LFxuICAgICAgICAgIG5vdGlmaWNhdGlvbkFybnMsXG4gICAgICAgICAgaG90c3dhcDogSG90c3dhcE1vZGUuRlVMTF9ERVBMT1lNRU5ULFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICB0ZXN0KCdmYWlsIHdpdGggaW5jb3JyZWN0IHNucyBub3RpZmljYXRpb24gYXJucyBpbiB0aGUgZXhlY3V0YWJsZSBhbmQgaW5jb3JyZWN0IHNucyBub3RpZmljYXRpb24gYXJucyBhcyBvcHRpb25zJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAvLyBHSVZFTlxuICAgICAgICBjb25zdCBub3RpZmljYXRpb25Bcm5zID0gWydhcm46OjpjZm4tbXktY29vbC10b3BpYyddO1xuICAgICAgICBjb25zdCB0b29sa2l0ID0gbmV3IENka1Rvb2xraXQoe1xuICAgICAgICAgIGNsb3VkRXhlY3V0YWJsZSxcbiAgICAgICAgICBjb25maWd1cmF0aW9uOiBjbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbixcbiAgICAgICAgICBzZGtQcm92aWRlcjogY2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLFxuICAgICAgICAgIGRlcGxveW1lbnRzOiBuZXcgRmFrZUNsb3VkRm9ybWF0aW9uKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAnVGVzdC1TdGFjay1CYWQtTm90aWZpY2F0aW9uLUFybnMnOiB7IEZvbzogJ0JhcicgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBub3RpZmljYXRpb25Bcm5zLFxuICAgICAgICAgICksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFdIRU5cbiAgICAgICAgYXdhaXQgZXhwZWN0KCgpID0+XG4gICAgICAgICAgdG9vbGtpdC5kZXBsb3koe1xuICAgICAgICAgICAgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnVGVzdC1TdGFjay1CYWQtTm90aWZpY2F0aW9uLUFybnMnXSB9LFxuICAgICAgICAgICAgbm90aWZpY2F0aW9uQXJucyxcbiAgICAgICAgICAgIGhvdHN3YXA6IEhvdHN3YXBNb2RlLkZVTExfREVQTE9ZTUVOVCxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKS5yZWplY3RzLnRvVGhyb3coJ05vdGlmaWNhdGlvbiBhcm4gYXJuOjo6Y2ZuLW15LWNvb2wtdG9waWMgaXMgbm90IGEgdmFsaWQgYXJuIGZvciBhbiBTTlMgdG9waWMnKTtcbiAgICAgIH0pO1xuXG4gICAgICB0ZXN0KCdmYWlsIHdpdGggaW5jb3JyZWN0IHNucyBub3RpZmljYXRpb24gYXJucyBpbiB0aGUgZXhlY3V0YWJsZSBhbmQgY29ycmVjdCBzbnMgbm90aWZpY2F0aW9uIGFybnMgYXMgb3B0aW9ucycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgLy8gR0lWRU5cbiAgICAgICAgY29uc3Qgbm90aWZpY2F0aW9uQXJucyA9IFsnYXJuOmF3czpzbnM6YmVybXVkYS10cmlhbmdsZS0xMzM3OjEyMzQ1Njc4OTAxMjpNeVRvcGljJ107XG4gICAgICAgIGNvbnN0IHRvb2xraXQgPSBuZXcgQ2RrVG9vbGtpdCh7XG4gICAgICAgICAgY2xvdWRFeGVjdXRhYmxlLFxuICAgICAgICAgIGNvbmZpZ3VyYXRpb246IGNsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLFxuICAgICAgICAgIHNka1Byb3ZpZGVyOiBjbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIsXG4gICAgICAgICAgZGVwbG95bWVudHM6IG5ldyBGYWtlQ2xvdWRGb3JtYXRpb24oXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICdUZXN0LVN0YWNrLUJhZC1Ob3RpZmljYXRpb24tQXJucyc6IHsgRm9vOiAnQmFyJyB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5vdGlmaWNhdGlvbkFybnMsXG4gICAgICAgICAgKSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gV0hFTlxuICAgICAgICBhd2FpdCBleHBlY3QoKCkgPT5cbiAgICAgICAgICB0b29sa2l0LmRlcGxveSh7XG4gICAgICAgICAgICBzZWxlY3RvcjogeyBwYXR0ZXJuczogWydUZXN0LVN0YWNrLUJhZC1Ob3RpZmljYXRpb24tQXJucyddIH0sXG4gICAgICAgICAgICBub3RpZmljYXRpb25Bcm5zLFxuICAgICAgICAgICAgaG90c3dhcDogSG90c3dhcE1vZGUuRlVMTF9ERVBMT1lNRU5ULFxuICAgICAgICAgIH0pLFxuICAgICAgICApLnJlamVjdHMudG9UaHJvdygnTm90aWZpY2F0aW9uIGFybiBhcm46MTMzNzoxMjM0NTY3ODkwMTI6c25zOmJhZCBpcyBub3QgYSB2YWxpZCBhcm4gZm9yIGFuIFNOUyB0b3BpYycpO1xuICAgICAgfSk7XG5cbiAgICAgIHRlc3QoJ2ZhaWwgd2l0aCBjb3JyZWN0IHNucyBub3RpZmljYXRpb24gYXJucyBpbiB0aGUgZXhlY3V0YWJsZSBhbmQgaW5jb3JyZWN0IHNucyBub3RpZmljYXRpb24gYXJucyBhcyBvcHRpb25zJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAvLyBHSVZFTlxuICAgICAgICBjb25zdCBub3RpZmljYXRpb25Bcm5zID0gWydhcm46OjpjZm4tbXktY29vbC10b3BpYyddO1xuICAgICAgICBjb25zdCB0b29sa2l0ID0gbmV3IENka1Rvb2xraXQoe1xuICAgICAgICAgIGNsb3VkRXhlY3V0YWJsZSxcbiAgICAgICAgICBjb25maWd1cmF0aW9uOiBjbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbixcbiAgICAgICAgICBzZGtQcm92aWRlcjogY2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLFxuICAgICAgICAgIGRlcGxveW1lbnRzOiBuZXcgRmFrZUNsb3VkRm9ybWF0aW9uKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAnVGVzdC1TdGFjay1Ob3RpZmljYXRpb24tQXJucyc6IHsgRm9vOiAnQmFyJyB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5vdGlmaWNhdGlvbkFybnMsXG4gICAgICAgICAgKSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gV0hFTlxuICAgICAgICBhd2FpdCBleHBlY3QoKCkgPT5cbiAgICAgICAgICB0b29sa2l0LmRlcGxveSh7XG4gICAgICAgICAgICBzZWxlY3RvcjogeyBwYXR0ZXJuczogWydUZXN0LVN0YWNrLU5vdGlmaWNhdGlvbi1Bcm5zJ10gfSxcbiAgICAgICAgICAgIG5vdGlmaWNhdGlvbkFybnMsXG4gICAgICAgICAgICBob3Rzd2FwOiBIb3Rzd2FwTW9kZS5GVUxMX0RFUExPWU1FTlQsXG4gICAgICAgICAgfSksXG4gICAgICAgICkucmVqZWN0cy50b1Rocm93KCdOb3RpZmljYXRpb24gYXJuIGFybjo6OmNmbi1teS1jb29sLXRvcGljIGlzIG5vdCBhIHZhbGlkIGFybiBmb3IgYW4gU05TIHRvcGljJyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgdGVzdCgnZ2xvYmxlc3MgYm9vdHN0cmFwIHVzZXMgZW52aXJvbm1lbnQgd2l0aG91dCBxdWVzdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICAvLyBXSEVOXG4gICAgYXdhaXQgdG9vbGtpdC5ib290c3RyYXAoWydhd3M6Ly81Njc4OS9zb3V0aC1wb2xlJ10sIHtcbiAgICAgIHNvdXJjZTogZGVmYXVsdEJvb3RzdHJhcFNvdXJjZSxcbiAgICB9KTtcblxuICAgIC8vIFRIRU5cbiAgICBleHBlY3QoYm9vdHN0cmFwRW52aXJvbm1lbnRNb2NrKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgIHtcbiAgICAgICAgYWNjb3VudDogJzU2Nzg5JyxcbiAgICAgICAgcmVnaW9uOiAnc291dGgtcG9sZScsXG4gICAgICAgIG5hbWU6ICdhd3M6Ly81Njc4OS9zb3V0aC1wb2xlJyxcbiAgICAgIH0sXG4gICAgICBleHBlY3QuYW55dGhpbmcoKSxcbiAgICAgIGV4cGVjdC5hbnl0aGluZygpLFxuICAgICk7XG4gICAgZXhwZWN0KGJvb3RzdHJhcEVudmlyb25tZW50TW9jaykudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICB9KTtcblxuICB0ZXN0KCdnbG9iYnkgYm9vdHN0cmFwIHVzZXMgd2hhdHMgaW4gdGhlIHN0YWNrcycsIGFzeW5jICgpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG4gICAgY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24uc2V0dGluZ3Muc2V0KFsnYXBwJ10sICdzb21ldGhpbmcnKTtcblxuICAgIC8vIFdIRU5cbiAgICBhd2FpdCB0b29sa2l0LmJvb3RzdHJhcChbJ2F3czovLyovYmVybXVkYS10cmlhbmdsZS0xJ10sIHtcbiAgICAgIHNvdXJjZTogZGVmYXVsdEJvb3RzdHJhcFNvdXJjZSxcbiAgICB9KTtcblxuICAgIC8vIFRIRU5cbiAgICBleHBlY3QoYm9vdHN0cmFwRW52aXJvbm1lbnRNb2NrKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgIHtcbiAgICAgICAgYWNjb3VudDogJzEyMzQ1Njc4OTAxMicsXG4gICAgICAgIHJlZ2lvbjogJ2Jlcm11ZGEtdHJpYW5nbGUtMScsXG4gICAgICAgIG5hbWU6ICdhd3M6Ly8xMjM0NTY3ODkwMTIvYmVybXVkYS10cmlhbmdsZS0xJyxcbiAgICAgIH0sXG4gICAgICBleHBlY3QuYW55dGhpbmcoKSxcbiAgICAgIGV4cGVjdC5hbnl0aGluZygpLFxuICAgICk7XG4gICAgZXhwZWN0KGJvb3RzdHJhcEVudmlyb25tZW50TW9jaykudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICB9KTtcblxuICB0ZXN0KCdib290c3RyYXAgY2FuIGJlIGludm9rZWQgd2l0aG91dCB0aGUgLS1hcHAgYXJndW1lbnQnLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBjbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbi5zZXR0aW5ncy5jbGVhcigpO1xuICAgIGNvbnN0IG1vY2tTeW50aGVzaXplID0gamVzdC5mbigpO1xuICAgIGNsb3VkRXhlY3V0YWJsZS5zeW50aGVzaXplID0gbW9ja1N5bnRoZXNpemU7XG5cbiAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgLy8gV0hFTlxuICAgIGF3YWl0IHRvb2xraXQuYm9vdHN0cmFwKFsnYXdzOi8vMTIzNDU2Nzg5MDEyL3dlc3QtcG9sZSddLCB7XG4gICAgICBzb3VyY2U6IGRlZmF1bHRCb290c3RyYXBTb3VyY2UsXG4gICAgfSk7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KGJvb3RzdHJhcEVudmlyb25tZW50TW9jaykudG9IYXZlQmVlbkNhbGxlZFdpdGgoXG4gICAgICB7XG4gICAgICAgIGFjY291bnQ6ICcxMjM0NTY3ODkwMTInLFxuICAgICAgICByZWdpb246ICd3ZXN0LXBvbGUnLFxuICAgICAgICBuYW1lOiAnYXdzOi8vMTIzNDU2Nzg5MDEyL3dlc3QtcG9sZScsXG4gICAgICB9LFxuICAgICAgZXhwZWN0LmFueXRoaW5nKCksXG4gICAgICBleHBlY3QuYW55dGhpbmcoKSxcbiAgICApO1xuICAgIGV4cGVjdChib290c3RyYXBFbnZpcm9ubWVudE1vY2spLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcblxuICAgIGV4cGVjdChjbG91ZEV4ZWN1dGFibGUuaGFzQXBwKS50b0VxdWFsKGZhbHNlKTtcbiAgICBleHBlY3QobW9ja1N5bnRoZXNpemUpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdkZXN0cm95JywgKCkgPT4ge1xuICB0ZXN0KCdkZXN0cm95IGNvcnJlY3Qgc3RhY2snLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICByZXR1cm4gdG9vbGtpdC5kZXN0cm95KHtcbiAgICAgICAgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnVGVzdC1TdGFjay1BL1Rlc3QtU3RhY2stQyddIH0sXG4gICAgICAgIGV4Y2x1c2l2ZWx5OiB0cnVlLFxuICAgICAgICBmb3JjZTogdHJ1ZSxcbiAgICAgICAgZnJvbURlcGxveTogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH0pLnJlc29sdmVzO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnd2F0Y2gnLCAoKSA9PiB7XG4gIHRlc3QoXCJmYWlscyB3aGVuIG5vICd3YXRjaCcgc2V0dGluZ3MgYXJlIGZvdW5kXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgYXdhaXQgZXhwZWN0KCgpID0+IHtcbiAgICAgIHJldHVybiB0b29sa2l0LndhdGNoKHtcbiAgICAgICAgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFtdIH0sXG4gICAgICAgIGhvdHN3YXA6IEhvdHN3YXBNb2RlLkhPVFNXQVBfT05MWSxcbiAgICAgIH0pO1xuICAgIH0pLnJlamVjdHMudG9UaHJvdyhcbiAgICAgIFwiQ2Fubm90IHVzZSB0aGUgJ3dhdGNoJyBjb21tYW5kIHdpdGhvdXQgc3BlY2lmeWluZyBhdCBsZWFzdCBvbmUgZGlyZWN0b3J5IHRvIG1vbml0b3IuIFwiICtcbiAgICAgICAgJ01ha2Ugc3VyZSB0byBhZGQgYSBcIndhdGNoXCIga2V5IHRvIHlvdXIgY2RrLmpzb24nLFxuICAgICk7XG4gIH0pO1xuXG4gIHRlc3QoJ29ic2VydmVzIG9ubHkgdGhlIHJvb3QgZGlyZWN0b3J5IGJ5IGRlZmF1bHQnLCBhc3luYyAoKSA9PiB7XG4gICAgY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24uc2V0dGluZ3Muc2V0KFsnd2F0Y2gnXSwge30pO1xuICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICBhd2FpdCB0b29sa2l0LndhdGNoKHtcbiAgICAgIHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbXSB9LFxuICAgICAgaG90c3dhcDogSG90c3dhcE1vZGUuSE9UU1dBUF9PTkxZLFxuICAgIH0pO1xuXG4gICAgY29uc3QgaW5jbHVkZUFyZ3MgPSBmYWtlQ2hva2lkYXJXYXRjaC5pbmNsdWRlQXJncztcbiAgICBleHBlY3QoaW5jbHVkZUFyZ3MubGVuZ3RoKS50b0JlKDEpO1xuICB9KTtcblxuICB0ZXN0KFwiYWxsb3dzIHByb3ZpZGluZyBhIHNpbmdsZSBzdHJpbmcgaW4gJ3dhdGNoLmluY2x1ZGUnXCIsIGFzeW5jICgpID0+IHtcbiAgICBjbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbi5zZXR0aW5ncy5zZXQoWyd3YXRjaCddLCB7XG4gICAgICBpbmNsdWRlOiAnbXktZGlyJyxcbiAgICB9KTtcbiAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgYXdhaXQgdG9vbGtpdC53YXRjaCh7XG4gICAgICBzZWxlY3RvcjogeyBwYXR0ZXJuczogW10gfSxcbiAgICAgIGhvdHN3YXA6IEhvdHN3YXBNb2RlLkhPVFNXQVBfT05MWSxcbiAgICB9KTtcblxuICAgIGV4cGVjdChmYWtlQ2hva2lkYXJXYXRjaC5pbmNsdWRlQXJncykudG9TdHJpY3RFcXVhbChbJ215LWRpciddKTtcbiAgfSk7XG5cbiAgdGVzdChcImFsbG93cyBwcm92aWRpbmcgYW4gYXJyYXkgb2Ygc3RyaW5ncyBpbiAnd2F0Y2guaW5jbHVkZSdcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLnNldHRpbmdzLnNldChbJ3dhdGNoJ10sIHtcbiAgICAgIGluY2x1ZGU6IFsnbXktZGlyMScsICcqKi9teS1kaXIyLyonXSxcbiAgICB9KTtcbiAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgYXdhaXQgdG9vbGtpdC53YXRjaCh7XG4gICAgICBzZWxlY3RvcjogeyBwYXR0ZXJuczogW10gfSxcbiAgICAgIGhvdHN3YXA6IEhvdHN3YXBNb2RlLkhPVFNXQVBfT05MWSxcbiAgICB9KTtcblxuICAgIGV4cGVjdChmYWtlQ2hva2lkYXJXYXRjaC5pbmNsdWRlQXJncykudG9TdHJpY3RFcXVhbChbJ215LWRpcjEnLCAnKiovbXktZGlyMi8qJ10pO1xuICB9KTtcblxuICB0ZXN0KCdpZ25vcmVzIHRoZSBvdXRwdXQgZGlyLCBkb3QgZmlsZXMsIGRvdCBkaXJlY3RvcmllcywgYW5kIG5vZGVfbW9kdWxlcyBieSBkZWZhdWx0JywgYXN5bmMgKCkgPT4ge1xuICAgIGNsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLnNldHRpbmdzLnNldChbJ3dhdGNoJ10sIHt9KTtcbiAgICBjbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbi5zZXR0aW5ncy5zZXQoWydvdXRwdXQnXSwgJ2Nkay5vdXQnKTtcbiAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgYXdhaXQgdG9vbGtpdC53YXRjaCh7XG4gICAgICBzZWxlY3RvcjogeyBwYXR0ZXJuczogW10gfSxcbiAgICAgIGhvdHN3YXA6IEhvdHN3YXBNb2RlLkhPVFNXQVBfT05MWSxcbiAgICB9KTtcblxuICAgIGV4cGVjdChmYWtlQ2hva2lkYXJXYXRjaC5leGNsdWRlQXJncykudG9TdHJpY3RFcXVhbChbJ2Nkay5vdXQvKionLCAnKiovLionLCAnKiovLiovKionLCAnKiovbm9kZV9tb2R1bGVzLyoqJ10pO1xuICB9KTtcblxuICB0ZXN0KFwiYWxsb3dzIHByb3ZpZGluZyBhIHNpbmdsZSBzdHJpbmcgaW4gJ3dhdGNoLmV4Y2x1ZGUnXCIsIGFzeW5jICgpID0+IHtcbiAgICBjbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbi5zZXR0aW5ncy5zZXQoWyd3YXRjaCddLCB7XG4gICAgICBleGNsdWRlOiAnbXktZGlyJyxcbiAgICB9KTtcbiAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgYXdhaXQgdG9vbGtpdC53YXRjaCh7XG4gICAgICBzZWxlY3RvcjogeyBwYXR0ZXJuczogW10gfSxcbiAgICAgIGhvdHN3YXA6IEhvdHN3YXBNb2RlLkhPVFNXQVBfT05MWSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGV4Y2x1ZGVBcmdzID0gZmFrZUNob2tpZGFyV2F0Y2guZXhjbHVkZUFyZ3M7XG4gICAgZXhwZWN0KGV4Y2x1ZGVBcmdzLmxlbmd0aCkudG9CZSg1KTtcbiAgICBleHBlY3QoZXhjbHVkZUFyZ3NbMF0pLnRvQmUoJ215LWRpcicpO1xuICB9KTtcblxuICB0ZXN0KFwiYWxsb3dzIHByb3ZpZGluZyBhbiBhcnJheSBvZiBzdHJpbmdzIGluICd3YXRjaC5leGNsdWRlJ1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24uc2V0dGluZ3Muc2V0KFsnd2F0Y2gnXSwge1xuICAgICAgZXhjbHVkZTogWydteS1kaXIxJywgJyoqL215LWRpcjInXSxcbiAgICB9KTtcbiAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgYXdhaXQgdG9vbGtpdC53YXRjaCh7XG4gICAgICBzZWxlY3RvcjogeyBwYXR0ZXJuczogW10gfSxcbiAgICAgIGhvdHN3YXA6IEhvdHN3YXBNb2RlLkhPVFNXQVBfT05MWSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGV4Y2x1ZGVBcmdzID0gZmFrZUNob2tpZGFyV2F0Y2guZXhjbHVkZUFyZ3M7XG4gICAgZXhwZWN0KGV4Y2x1ZGVBcmdzLmxlbmd0aCkudG9CZSg2KTtcbiAgICBleHBlY3QoZXhjbHVkZUFyZ3NbMF0pLnRvQmUoJ215LWRpcjEnKTtcbiAgICBleHBlY3QoZXhjbHVkZUFyZ3NbMV0pLnRvQmUoJyoqL215LWRpcjInKTtcbiAgfSk7XG5cbiAgdGVzdCgnYWxsb3dzIHdhdGNoaW5nIHdpdGggZGVwbG95IGNvbmN1cnJlbmN5JywgYXN5bmMgKCkgPT4ge1xuICAgIGNsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLnNldHRpbmdzLnNldChbJ3dhdGNoJ10sIHt9KTtcbiAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuICAgIGNvbnN0IGNka0RlcGxveU1vY2sgPSBqZXN0LmZuKCk7XG4gICAgdG9vbGtpdC5kZXBsb3kgPSBjZGtEZXBsb3lNb2NrO1xuXG4gICAgYXdhaXQgdG9vbGtpdC53YXRjaCh7XG4gICAgICBzZWxlY3RvcjogeyBwYXR0ZXJuczogW10gfSxcbiAgICAgIGNvbmN1cnJlbmN5OiAzLFxuICAgICAgaG90c3dhcDogSG90c3dhcE1vZGUuSE9UU1dBUF9PTkxZLFxuICAgIH0pO1xuICAgIGZha2VDaG9raWRhcldhdGNoZXJPbi5yZWFkeUNhbGxiYWNrKCk7XG5cbiAgICBleHBlY3QoY2RrRGVwbG95TW9jaykudG9IYXZlQmVlbkNhbGxlZFdpdGgoZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoeyBjb25jdXJyZW5jeTogMyB9KSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlLmVhY2goW0hvdHN3YXBNb2RlLkZBTExfQkFDSywgSG90c3dhcE1vZGUuSE9UU1dBUF9PTkxZXSkoJyVwIG1vZGUnLCAoaG90c3dhcE1vZGUpID0+IHtcbiAgICB0ZXN0KCdwYXNzZXMgdGhyb3VnaCB0aGUgY29ycmVjdCBob3Rzd2FwIG1vZGUgdG8gZGVwbG95U3RhY2soKScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLnNldHRpbmdzLnNldChbJ3dhdGNoJ10sIHt9KTtcbiAgICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG4gICAgICBjb25zdCBjZGtEZXBsb3lNb2NrID0gamVzdC5mbigpO1xuICAgICAgdG9vbGtpdC5kZXBsb3kgPSBjZGtEZXBsb3lNb2NrO1xuXG4gICAgICBhd2FpdCB0b29sa2l0LndhdGNoKHtcbiAgICAgICAgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFtdIH0sXG4gICAgICAgIGhvdHN3YXA6IGhvdHN3YXBNb2RlLFxuICAgICAgfSk7XG4gICAgICBmYWtlQ2hva2lkYXJXYXRjaGVyT24ucmVhZHlDYWxsYmFjaygpO1xuXG4gICAgICBleHBlY3QoY2RrRGVwbG95TW9jaykudG9IYXZlQmVlbkNhbGxlZFdpdGgoZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoeyBob3Rzd2FwOiBob3Rzd2FwTW9kZSB9KSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ3Jlc3BlY3RzIEhvdHN3YXBNb2RlLkhPVFNXQVBfT05MWScsIGFzeW5jICgpID0+IHtcbiAgICBjbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbi5zZXR0aW5ncy5zZXQoWyd3YXRjaCddLCB7fSk7XG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcbiAgICBjb25zdCBjZGtEZXBsb3lNb2NrID0gamVzdC5mbigpO1xuICAgIHRvb2xraXQuZGVwbG95ID0gY2RrRGVwbG95TW9jaztcblxuICAgIGF3YWl0IHRvb2xraXQud2F0Y2goe1xuICAgICAgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFtdIH0sXG4gICAgICBob3Rzd2FwOiBIb3Rzd2FwTW9kZS5IT1RTV0FQX09OTFksXG4gICAgfSk7XG4gICAgZmFrZUNob2tpZGFyV2F0Y2hlck9uLnJlYWR5Q2FsbGJhY2soKTtcblxuICAgIGV4cGVjdChjZGtEZXBsb3lNb2NrKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7IGhvdHN3YXA6IEhvdHN3YXBNb2RlLkhPVFNXQVBfT05MWSB9KSk7XG4gIH0pO1xuXG4gIHRlc3QoJ3Jlc3BlY3RzIEhvdHN3YXBNb2RlLkZBTExfQkFDSycsIGFzeW5jICgpID0+IHtcbiAgICBjbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbi5zZXR0aW5ncy5zZXQoWyd3YXRjaCddLCB7fSk7XG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcbiAgICBjb25zdCBjZGtEZXBsb3lNb2NrID0gamVzdC5mbigpO1xuICAgIHRvb2xraXQuZGVwbG95ID0gY2RrRGVwbG95TW9jaztcblxuICAgIGF3YWl0IHRvb2xraXQud2F0Y2goe1xuICAgICAgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFtdIH0sXG4gICAgICBob3Rzd2FwOiBIb3Rzd2FwTW9kZS5GQUxMX0JBQ0ssXG4gICAgfSk7XG4gICAgZmFrZUNob2tpZGFyV2F0Y2hlck9uLnJlYWR5Q2FsbGJhY2soKTtcblxuICAgIGV4cGVjdChjZGtEZXBsb3lNb2NrKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7IGhvdHN3YXA6IEhvdHN3YXBNb2RlLkZBTExfQkFDSyB9KSk7XG4gIH0pO1xuXG4gIHRlc3QoJ3Jlc3BlY3RzIEhvdHN3YXBNb2RlLkZVTExfREVQTE9ZTUVOVCcsIGFzeW5jICgpID0+IHtcbiAgICBjbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbi5zZXR0aW5ncy5zZXQoWyd3YXRjaCddLCB7fSk7XG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcbiAgICBjb25zdCBjZGtEZXBsb3lNb2NrID0gamVzdC5mbigpO1xuICAgIHRvb2xraXQuZGVwbG95ID0gY2RrRGVwbG95TW9jaztcblxuICAgIGF3YWl0IHRvb2xraXQud2F0Y2goe1xuICAgICAgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFtdIH0sXG4gICAgICBob3Rzd2FwOiBIb3Rzd2FwTW9kZS5GVUxMX0RFUExPWU1FTlQsXG4gICAgfSk7XG4gICAgZmFrZUNob2tpZGFyV2F0Y2hlck9uLnJlYWR5Q2FsbGJhY2soKTtcblxuICAgIGV4cGVjdChjZGtEZXBsb3lNb2NrKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7IGhvdHN3YXA6IEhvdHN3YXBNb2RlLkZVTExfREVQTE9ZTUVOVCB9KSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd3aXRoIGZpbGUgY2hhbmdlIGV2ZW50cycsICgpID0+IHtcbiAgICBsZXQgdG9vbGtpdDogQ2RrVG9vbGtpdDtcbiAgICBsZXQgY2RrRGVwbG95TW9jazogamVzdC5Nb2NrO1xuXG4gICAgYmVmb3JlRWFjaChhc3luYyAoKSA9PiB7XG4gICAgICBjbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbi5zZXR0aW5ncy5zZXQoWyd3YXRjaCddLCB7fSk7XG4gICAgICB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuICAgICAgY2RrRGVwbG95TW9jayA9IGplc3QuZm4oKTtcbiAgICAgIHRvb2xraXQuZGVwbG95ID0gY2RrRGVwbG95TW9jaztcbiAgICAgIGF3YWl0IHRvb2xraXQud2F0Y2goe1xuICAgICAgICBzZWxlY3RvcjogeyBwYXR0ZXJuczogW10gfSxcbiAgICAgICAgaG90c3dhcDogSG90c3dhcE1vZGUuSE9UU1dBUF9PTkxZLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KFwiZG9lcyBub3QgdHJpZ2dlciBhICdkZXBsb3knIGJlZm9yZSB0aGUgJ3JlYWR5JyBldmVudCBoYXMgZmlyZWRcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgZmFrZUNob2tpZGFyV2F0Y2hlck9uLmZpbGVFdmVudENhbGxiYWNrKCdhZGQnLCAnbXktZmlsZScpO1xuXG4gICAgICBleHBlY3QoY2RrRGVwbG95TW9jaykubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKFwid2hlbiB0aGUgJ3JlYWR5JyBldmVudCBoYXMgYWxyZWFkeSBmaXJlZFwiLCAoKSA9PiB7XG4gICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgLy8gVGhlIHJlYWR5IGNhbGxiYWNrIHRyaWdnZXJzIGEgZGVwbG95bWVudCBzbyBlYWNoIHRlc3RcbiAgICAgICAgLy8gdGhhdCB1c2VzIHRoaXMgZnVuY3Rpb24gd2lsbCBzZWUgJ2Nka0RlcGxveU1vY2snIGNhbGxlZFxuICAgICAgICAvLyBhbiBhZGRpdGlvbmFsIHRpbWUuXG4gICAgICAgIGZha2VDaG9raWRhcldhdGNoZXJPbi5yZWFkeUNhbGxiYWNrKCk7XG4gICAgICB9KTtcblxuICAgICAgdGVzdChcImFuIGluaXRpYWwgJ2RlcGxveScgaXMgdHJpZ2dlcmVkLCB3aXRob3V0IGFueSBmaWxlIGNoYW5nZXNcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBleHBlY3QoY2RrRGVwbG95TW9jaykudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICAgICAgfSk7XG5cbiAgICAgIHRlc3QoXCJkb2VzIHRyaWdnZXIgYSAnZGVwbG95JyBmb3IgYSBmaWxlIGNoYW5nZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IGZha2VDaG9raWRhcldhdGNoZXJPbi5maWxlRXZlbnRDYWxsYmFjaygnYWRkJywgJ215LWZpbGUnKTtcblxuICAgICAgICBleHBlY3QoY2RrRGVwbG95TW9jaykudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDIpO1xuICAgICAgfSk7XG5cbiAgICAgIHRlc3QoXCJ0cmlnZ2VycyBhICdkZXBsb3knIHR3aWNlIGZvciB0d28gZmlsZSBjaGFuZ2VzXCIsIGFzeW5jICgpID0+IHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBjZGtsYWJzL3Byb21pc2VhbGwtbm8tdW5ib3VuZGVkLXBhcmFsbGVsaXNtXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgICBmYWtlQ2hva2lkYXJXYXRjaGVyT24uZmlsZUV2ZW50Q2FsbGJhY2soJ2FkZCcsICdteS1maWxlMScpLFxuICAgICAgICAgIGZha2VDaG9raWRhcldhdGNoZXJPbi5maWxlRXZlbnRDYWxsYmFjaygnY2hhbmdlJywgJ215LWZpbGUyJyksXG4gICAgICAgIF0pO1xuXG4gICAgICAgIGV4cGVjdChjZGtEZXBsb3lNb2NrKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMyk7XG4gICAgICB9KTtcblxuICAgICAgdGVzdChcImJhdGNoZXMgZmlsZSBjaGFuZ2VzIHRoYXQgaGFwcGVuIGR1cmluZyAnZGVwbG95J1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAY2RrbGFicy9wcm9taXNlYWxsLW5vLXVuYm91bmRlZC1wYXJhbGxlbGlzbVxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgICAgZmFrZUNob2tpZGFyV2F0Y2hlck9uLmZpbGVFdmVudENhbGxiYWNrKCdhZGQnLCAnbXktZmlsZTEnKSxcbiAgICAgICAgICBmYWtlQ2hva2lkYXJXYXRjaGVyT24uZmlsZUV2ZW50Q2FsbGJhY2soJ2NoYW5nZScsICdteS1maWxlMicpLFxuICAgICAgICAgIGZha2VDaG9raWRhcldhdGNoZXJPbi5maWxlRXZlbnRDYWxsYmFjaygndW5saW5rJywgJ215LWZpbGUzJyksXG4gICAgICAgICAgZmFrZUNob2tpZGFyV2F0Y2hlck9uLmZpbGVFdmVudENhbGxiYWNrKCdhZGQnLCAnbXktZmlsZTQnKSxcbiAgICAgICAgXSk7XG5cbiAgICAgICAgZXhwZWN0KGNka0RlcGxveU1vY2spLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnc3ludGgnLCAoKSA9PiB7XG4gIHRlc3QoJ3N1Y2Nlc3NmdWwgc3ludGggb3V0cHV0cyBoaWVyYXJjaGljYWwgc3RhY2sgaWRzJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG4gICAgYXdhaXQgdG9vbGtpdC5zeW50aChbXSwgZmFsc2UsIGZhbHNlKTtcblxuICAgIC8vIFNlcGFyYXRlIHRlc3RzIGFzIGNvbG9yaXppbmcgaGFtcGVycyBkZXRlY3Rpb25cbiAgICBleHBlY3Qoc3RkZXJyTW9jay5tb2NrLmNhbGxzWzFdWzBdKS50b01hdGNoKCdUZXN0LVN0YWNrLUEtRGlzcGxheS1OYW1lJyk7XG4gICAgZXhwZWN0KHN0ZGVyck1vY2subW9jay5jYWxsc1sxXVswXSkudG9NYXRjaCgnVGVzdC1TdGFjay1CJyk7XG4gIH0pO1xuXG4gIHRlc3QoJ3dpdGggbm8gc3Rkb3V0IG9wdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAvLyBHSVZFXG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgIC8vIFRIRU5cbiAgICBhd2FpdCB0b29sa2l0LnN5bnRoKFsnVGVzdC1TdGFjay1BLURpc3BsYXktTmFtZSddLCBmYWxzZSwgdHJ1ZSk7XG4gICAgZXhwZWN0KG1vY2tEYXRhLm1vY2suY2FsbHMubGVuZ3RoKS50b0VxdWFsKDApO1xuICB9KTtcblxuICBkZXNjcmliZSgnbWlncmF0ZScsICgpID0+IHtcbiAgICBjb25zdCB0ZXN0UmVzb3VyY2VQYXRoID0gW19fZGlybmFtZSwgJy4uJywgJ2NvbW1hbmRzJywgJ3Rlc3QtcmVzb3VyY2VzJ107XG4gICAgY29uc3QgdGVtcGxhdGVQYXRoID0gWy4uLnRlc3RSZXNvdXJjZVBhdGgsICd0ZW1wbGF0ZXMnXTtcbiAgICBjb25zdCBzcXNUZW1wbGF0ZVBhdGggPSBwYXRoLmpvaW4oLi4udGVtcGxhdGVQYXRoLCAnc3FzLXRlbXBsYXRlLmpzb24nKTtcbiAgICBjb25zdCBhdXRvc2NhbGluZ1RlbXBsYXRlUGF0aCA9IHBhdGguam9pbiguLi50ZW1wbGF0ZVBhdGgsICdhdXRvc2NhbGluZy10ZW1wbGF0ZS55bWwnKTtcbiAgICBjb25zdCBzM1RlbXBsYXRlUGF0aCA9IHBhdGguam9pbiguLi50ZW1wbGF0ZVBhdGgsICdzMy10ZW1wbGF0ZS5qc29uJyk7XG5cbiAgICB0ZXN0KCdtaWdyYXRlIGZhaWxzIHdoZW4gYm90aCAtLWZyb20tcGF0aCBhbmQgLS1mcm9tLXN0YWNrIGFyZSBwcm92aWRlZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG4gICAgICBhd2FpdCBleHBlY3QoKCkgPT5cbiAgICAgICAgdG9vbGtpdC5taWdyYXRlKHtcbiAgICAgICAgICBzdGFja05hbWU6ICduby1zb3VyY2UnLFxuICAgICAgICAgIGZyb21QYXRoOiAnLi9oZXJlL3RlbXBsYXRlLnltbCcsXG4gICAgICAgICAgZnJvbVN0YWNrOiB0cnVlLFxuICAgICAgICB9KSxcbiAgICAgICkucmVqZWN0cy50b1Rocm93KCdPbmx5IG9uZSBvZiBgLS1mcm9tLXBhdGhgIG9yIGAtLWZyb20tc3RhY2tgIG1heSBiZSBwcm92aWRlZC4nKTtcbiAgICAgIGV4cGVjdChzdGRlcnJNb2NrLm1vY2suY2FsbHNbMV1bMF0pLnRvQ29udGFpbihcbiAgICAgICAgJyDinYwgIE1pZ3JhdGUgZmFpbGVkIGZvciBgbm8tc291cmNlYDogT25seSBvbmUgb2YgYC0tZnJvbS1wYXRoYCBvciBgLS1mcm9tLXN0YWNrYCBtYXkgYmUgcHJvdmlkZWQuJyxcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdtaWdyYXRlIGZhaWxzIHdoZW4gLS1mcm9tLXBhdGggaXMgaW52YWxpZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG4gICAgICBhd2FpdCBleHBlY3QoKCkgPT5cbiAgICAgICAgdG9vbGtpdC5taWdyYXRlKHtcbiAgICAgICAgICBzdGFja05hbWU6ICdiYWQtbG9jYWwtc291cmNlJyxcbiAgICAgICAgICBmcm9tUGF0aDogJy4vaGVyZS90ZW1wbGF0ZS55bWwnLFxuICAgICAgICB9KSxcbiAgICAgICkucmVqZWN0cy50b1Rocm93KFwiJy4vaGVyZS90ZW1wbGF0ZS55bWwnIGlzIG5vdCBhIHZhbGlkIHBhdGguXCIpO1xuICAgICAgZXhwZWN0KHN0ZGVyck1vY2subW9jay5jYWxsc1sxXVswXSkudG9Db250YWluKFxuICAgICAgICBcIiDinYwgIE1pZ3JhdGUgZmFpbGVkIGZvciBgYmFkLWxvY2FsLXNvdXJjZWA6ICcuL2hlcmUvdGVtcGxhdGUueW1sJyBpcyBub3QgYSB2YWxpZCBwYXRoLlwiLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ21pZ3JhdGUgZmFpbHMgd2hlbiAtLWZyb20tc3RhY2sgaXMgdXNlZCBhbmQgc3RhY2sgZG9lcyBub3QgZXhpc3QgaW4gYWNjb3VudCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IG1vY2tTZGtQcm92aWRlciA9IG5ldyBNb2NrU2RrUHJvdmlkZXIoKTtcbiAgICAgIG1vY2tDbG91ZEZvcm1hdGlvbkNsaWVudC5vbihEZXNjcmliZVN0YWNrc0NvbW1hbmQpLnJlamVjdHMobmV3IEVycm9yKCdTdGFjayBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIGVudmlyb25tZW50JykpO1xuXG4gICAgICBjb25zdCBtb2NrQ2xvdWRFeGVjdXRhYmxlID0gbmV3IE1vY2tDbG91ZEV4ZWN1dGFibGUoe1xuICAgICAgICBzdGFja3M6IFtdLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGNka1Rvb2xraXQgPSBuZXcgQ2RrVG9vbGtpdCh7XG4gICAgICAgIGNsb3VkRXhlY3V0YWJsZTogbW9ja0Nsb3VkRXhlY3V0YWJsZSxcbiAgICAgICAgZGVwbG95bWVudHM6IG5ldyBEZXBsb3ltZW50cyh7IHNka1Byb3ZpZGVyOiBtb2NrU2RrUHJvdmlkZXIgfSksXG4gICAgICAgIHNka1Byb3ZpZGVyOiBtb2NrU2RrUHJvdmlkZXIsXG4gICAgICAgIGNvbmZpZ3VyYXRpb246IG1vY2tDbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbixcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCBleHBlY3QoKCkgPT5cbiAgICAgICAgY2RrVG9vbGtpdC5taWdyYXRlKHtcbiAgICAgICAgICBzdGFja05hbWU6ICdiYWQtY2xvdWRmb3JtYXRpb24tc291cmNlJyxcbiAgICAgICAgICBmcm9tU3RhY2s6IHRydWUsXG4gICAgICAgIH0pLFxuICAgICAgKS5yZWplY3RzLnRvVGhyb3coJ1N0YWNrIGRvZXMgbm90IGV4aXN0IGluIHRoaXMgZW52aXJvbm1lbnQnKTtcbiAgICAgIGV4cGVjdChzdGRlcnJNb2NrLm1vY2suY2FsbHNbMV1bMF0pLnRvQ29udGFpbihcbiAgICAgICAgJyDinYwgIE1pZ3JhdGUgZmFpbGVkIGZvciBgYmFkLWNsb3VkZm9ybWF0aW9uLXNvdXJjZWA6IFN0YWNrIGRvZXMgbm90IGV4aXN0IGluIHRoaXMgZW52aXJvbm1lbnQnLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ21pZ3JhdGUgZmFpbHMgd2hlbiBzdGFjayBjYW5ub3QgYmUgZ2VuZXJhdGVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcbiAgICAgIGF3YWl0IGV4cGVjdCgoKSA9PlxuICAgICAgICB0b29sa2l0Lm1pZ3JhdGUoe1xuICAgICAgICAgIHN0YWNrTmFtZTogJ2Nhbm5vdC1nZW5lcmF0ZS10ZW1wbGF0ZScsXG4gICAgICAgICAgZnJvbVBhdGg6IHNxc1RlbXBsYXRlUGF0aCxcbiAgICAgICAgICBsYW5ndWFnZTogJ3J1c3QnLFxuICAgICAgICB9KSxcbiAgICAgICkucmVqZWN0cy50b1Rocm93KFxuICAgICAgICAnQ2Fubm90R2VuZXJhdGVUZW1wbGF0ZVN0YWNrIGNvdWxkIG5vdCBiZSBnZW5lcmF0ZWQgYmVjYXVzZSBydXN0IGlzIG5vdCBhIHN1cHBvcnRlZCBsYW5ndWFnZScsXG4gICAgICApO1xuICAgICAgZXhwZWN0KHN0ZGVyck1vY2subW9jay5jYWxsc1sxXVswXSkudG9Db250YWluKFxuICAgICAgICAnIOKdjCAgTWlncmF0ZSBmYWlsZWQgZm9yIGBjYW5ub3QtZ2VuZXJhdGUtdGVtcGxhdGVgOiBDYW5ub3RHZW5lcmF0ZVRlbXBsYXRlU3RhY2sgY291bGQgbm90IGJlIGdlbmVyYXRlZCBiZWNhdXNlIHJ1c3QgaXMgbm90IGEgc3VwcG9ydGVkIGxhbmd1YWdlJyxcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBjbGlUZXN0KCdtaWdyYXRlIHN1Y2NlZWRzIGZvciB2YWxpZCB0ZW1wbGF0ZSBmcm9tIGxvY2FsIHBhdGggd2hlbiBubyBsYW5ndWFnZSBpcyBwcm92aWRlZCcsIGFzeW5jICh3b3JrRGlyKSA9PiB7XG4gICAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuICAgICAgYXdhaXQgdG9vbGtpdC5taWdyYXRlKHtcbiAgICAgICAgc3RhY2tOYW1lOiAnU1FTVHlwZVNjcmlwdCcsXG4gICAgICAgIGZyb21QYXRoOiBzcXNUZW1wbGF0ZVBhdGgsXG4gICAgICAgIG91dHB1dFBhdGg6IHdvcmtEaXIsXG4gICAgICB9KTtcblxuICAgICAgLy8gUGFja2FnZXMgY3JlYXRlZCBmb3IgdHlwZXNjcmlwdFxuICAgICAgZXhwZWN0KGZzLnBhdGhFeGlzdHNTeW5jKHBhdGguam9pbih3b3JrRGlyLCAnU1FTVHlwZVNjcmlwdCcsICdwYWNrYWdlLmpzb24nKSkpLnRvQmVUcnV0aHkoKTtcbiAgICAgIGV4cGVjdChmcy5wYXRoRXhpc3RzU3luYyhwYXRoLmpvaW4od29ya0RpciwgJ1NRU1R5cGVTY3JpcHQnLCAnYmluJywgJ3Nxc190eXBlX3NjcmlwdC50cycpKSkudG9CZVRydXRoeSgpO1xuICAgICAgZXhwZWN0KGZzLnBhdGhFeGlzdHNTeW5jKHBhdGguam9pbih3b3JrRGlyLCAnU1FTVHlwZVNjcmlwdCcsICdsaWInLCAnc3FzX3R5cGVfc2NyaXB0LXN0YWNrLnRzJykpKS50b0JlVHJ1dGh5KCk7XG4gICAgfSk7XG5cbiAgICBjbGlUZXN0KCdtaWdyYXRlIHN1Y2NlZWRzIGZvciB2YWxpZCB0ZW1wbGF0ZSBmcm9tIGxvY2FsIHBhdGggd2hlbiBsYW5ndWFnZSBpcyBwcm92aWRlZCcsIGFzeW5jICh3b3JrRGlyKSA9PiB7XG4gICAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuICAgICAgYXdhaXQgdG9vbGtpdC5taWdyYXRlKHtcbiAgICAgICAgc3RhY2tOYW1lOiAnUzNQeXRob24nLFxuICAgICAgICBmcm9tUGF0aDogczNUZW1wbGF0ZVBhdGgsXG4gICAgICAgIG91dHB1dFBhdGg6IHdvcmtEaXIsXG4gICAgICAgIGxhbmd1YWdlOiAncHl0aG9uJyxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBQYWNrYWdlcyBjcmVhdGVkIGZvciB0eXBlc2NyaXB0XG4gICAgICBleHBlY3QoZnMucGF0aEV4aXN0c1N5bmMocGF0aC5qb2luKHdvcmtEaXIsICdTM1B5dGhvbicsICdyZXF1aXJlbWVudHMudHh0JykpKS50b0JlVHJ1dGh5KCk7XG4gICAgICBleHBlY3QoZnMucGF0aEV4aXN0c1N5bmMocGF0aC5qb2luKHdvcmtEaXIsICdTM1B5dGhvbicsICdhcHAucHknKSkpLnRvQmVUcnV0aHkoKTtcbiAgICAgIGV4cGVjdChmcy5wYXRoRXhpc3RzU3luYyhwYXRoLmpvaW4od29ya0RpciwgJ1MzUHl0aG9uJywgJ3MzX3B5dGhvbicsICdzM19weXRob25fc3RhY2sucHknKSkpLnRvQmVUcnV0aHkoKTtcbiAgICB9KTtcblxuICAgIGNsaVRlc3QoJ21pZ3JhdGUgY2FsbCBpcyBpZGVtcG90ZW50JywgYXN5bmMgKHdvcmtEaXIpID0+IHtcbiAgICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG4gICAgICBhd2FpdCB0b29sa2l0Lm1pZ3JhdGUoe1xuICAgICAgICBzdGFja05hbWU6ICdBdXRvc2NhbGluZ0NTaGFycCcsXG4gICAgICAgIGZyb21QYXRoOiBhdXRvc2NhbGluZ1RlbXBsYXRlUGF0aCxcbiAgICAgICAgb3V0cHV0UGF0aDogd29ya0RpcixcbiAgICAgICAgbGFuZ3VhZ2U6ICdjc2hhcnAnLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFBhY2thZ2VzIGNyZWF0ZWQgZm9yIHR5cGVzY3JpcHRcbiAgICAgIGV4cGVjdChmcy5wYXRoRXhpc3RzU3luYyhwYXRoLmpvaW4od29ya0RpciwgJ0F1dG9zY2FsaW5nQ1NoYXJwJywgJ3NyYycsICdBdXRvc2NhbGluZ0NTaGFycC5zbG4nKSkpLnRvQmVUcnV0aHkoKTtcbiAgICAgIGV4cGVjdChcbiAgICAgICAgZnMucGF0aEV4aXN0c1N5bmMocGF0aC5qb2luKHdvcmtEaXIsICdBdXRvc2NhbGluZ0NTaGFycCcsICdzcmMnLCAnQXV0b3NjYWxpbmdDU2hhcnAnLCAnUHJvZ3JhbS5jcycpKSxcbiAgICAgICkudG9CZVRydXRoeSgpO1xuICAgICAgZXhwZWN0KFxuICAgICAgICBmcy5wYXRoRXhpc3RzU3luYyhcbiAgICAgICAgICBwYXRoLmpvaW4od29ya0RpciwgJ0F1dG9zY2FsaW5nQ1NoYXJwJywgJ3NyYycsICdBdXRvc2NhbGluZ0NTaGFycCcsICdBdXRvc2NhbGluZ0NTaGFycFN0YWNrLmNzJyksXG4gICAgICAgICksXG4gICAgICApLnRvQmVUcnV0aHkoKTtcblxuICAgICAgLy8gT25lIG1vcmUgdGltZVxuICAgICAgYXdhaXQgdG9vbGtpdC5taWdyYXRlKHtcbiAgICAgICAgc3RhY2tOYW1lOiAnQXV0b3NjYWxpbmdDU2hhcnAnLFxuICAgICAgICBmcm9tUGF0aDogYXV0b3NjYWxpbmdUZW1wbGF0ZVBhdGgsXG4gICAgICAgIG91dHB1dFBhdGg6IHdvcmtEaXIsXG4gICAgICAgIGxhbmd1YWdlOiAnY3NoYXJwJyxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBQYWNrYWdlcyBjcmVhdGVkIGZvciB0eXBlc2NyaXB0XG4gICAgICBleHBlY3QoZnMucGF0aEV4aXN0c1N5bmMocGF0aC5qb2luKHdvcmtEaXIsICdBdXRvc2NhbGluZ0NTaGFycCcsICdzcmMnLCAnQXV0b3NjYWxpbmdDU2hhcnAuc2xuJykpKS50b0JlVHJ1dGh5KCk7XG4gICAgICBleHBlY3QoXG4gICAgICAgIGZzLnBhdGhFeGlzdHNTeW5jKHBhdGguam9pbih3b3JrRGlyLCAnQXV0b3NjYWxpbmdDU2hhcnAnLCAnc3JjJywgJ0F1dG9zY2FsaW5nQ1NoYXJwJywgJ1Byb2dyYW0uY3MnKSksXG4gICAgICApLnRvQmVUcnV0aHkoKTtcbiAgICAgIGV4cGVjdChcbiAgICAgICAgZnMucGF0aEV4aXN0c1N5bmMoXG4gICAgICAgICAgcGF0aC5qb2luKHdvcmtEaXIsICdBdXRvc2NhbGluZ0NTaGFycCcsICdzcmMnLCAnQXV0b3NjYWxpbmdDU2hhcnAnLCAnQXV0b3NjYWxpbmdDU2hhcnBTdGFjay5jcycpLFxuICAgICAgICApLFxuICAgICAgKS50b0JlVHJ1dGh5KCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzdGFjayB3aXRoIGVycm9yIGFuZCBmbGFnZ2VkIGZvciB2YWxpZGF0aW9uJywgKCkgPT4ge1xuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgY2xvdWRFeGVjdXRhYmxlID0gbmV3IE1vY2tDbG91ZEV4ZWN1dGFibGUoe1xuICAgICAgICBzdGFja3M6IFtNb2NrU3RhY2suTU9DS19TVEFDS19BLCBNb2NrU3RhY2suTU9DS19TVEFDS19CXSxcbiAgICAgICAgbmVzdGVkQXNzZW1ibGllczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHN0YWNrczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcHJvcGVydGllczogeyB2YWxpZGF0ZU9uU3ludGg6IHRydWUgfSxcbiAgICAgICAgICAgICAgICAuLi5Nb2NrU3RhY2suTU9DS19TVEFDS19XSVRIX0VSUk9SLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdjYXVzZXMgc3ludGggdG8gZmFpbCBpZiBhdXRvVmFsaWRhdGU9dHJ1ZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG4gICAgICBjb25zdCBhdXRvVmFsaWRhdGUgPSB0cnVlO1xuICAgICAgYXdhaXQgZXhwZWN0KHRvb2xraXQuc3ludGgoW10sIGZhbHNlLCB0cnVlLCBhdXRvVmFsaWRhdGUpKS5yZWplY3RzLnRvQmVEZWZpbmVkKCk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdjYXVzZXMgc3ludGggdG8gc3VjY2VlZCBpZiBhdXRvVmFsaWRhdGU9ZmFsc2UnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuICAgICAgY29uc3QgYXV0b1ZhbGlkYXRlID0gZmFsc2U7XG4gICAgICBhd2FpdCB0b29sa2l0LnN5bnRoKFtdLCBmYWxzZSwgdHJ1ZSwgYXV0b1ZhbGlkYXRlKTtcbiAgICAgIGV4cGVjdChtb2NrRGF0YS5tb2NrLmNhbGxzLmxlbmd0aCkudG9FcXVhbCgwKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgdGVzdCgnc3RhY2sgaGFzIGVycm9yIGFuZCB3YXMgZXhwbGljaXRseSBzZWxlY3RlZCcsIGFzeW5jICgpID0+IHtcbiAgICBjbG91ZEV4ZWN1dGFibGUgPSBuZXcgTW9ja0Nsb3VkRXhlY3V0YWJsZSh7XG4gICAgICBzdGFja3M6IFtNb2NrU3RhY2suTU9DS19TVEFDS19BLCBNb2NrU3RhY2suTU9DS19TVEFDS19CXSxcbiAgICAgIG5lc3RlZEFzc2VtYmxpZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHN0YWNrczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7IHZhbGlkYXRlT25TeW50aDogZmFsc2UgfSxcbiAgICAgICAgICAgICAgLi4uTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfV0lUSF9FUlJPUixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgYXdhaXQgZXhwZWN0KHRvb2xraXQuc3ludGgoWydUZXN0LVN0YWNrLUEvd2l0aGVycm9ycyddLCBmYWxzZSwgdHJ1ZSkpLnJlamVjdHMudG9CZURlZmluZWQoKTtcbiAgfSk7XG5cbiAgdGVzdCgnc3RhY2sgaGFzIGVycm9yLCBpcyBub3QgZmxhZ2dlZCBmb3IgdmFsaWRhdGlvbiBhbmQgd2FzIG5vdCBleHBsaWNpdGx5IHNlbGVjdGVkJywgYXN5bmMgKCkgPT4ge1xuICAgIGNsb3VkRXhlY3V0YWJsZSA9IG5ldyBNb2NrQ2xvdWRFeGVjdXRhYmxlKHtcbiAgICAgIHN0YWNrczogW01vY2tTdGFjay5NT0NLX1NUQUNLX0EsIE1vY2tTdGFjay5NT0NLX1NUQUNLX0JdLFxuICAgICAgbmVzdGVkQXNzZW1ibGllczogW1xuICAgICAgICB7XG4gICAgICAgICAgc3RhY2tzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHByb3BlcnRpZXM6IHsgdmFsaWRhdGVPblN5bnRoOiBmYWxzZSB9LFxuICAgICAgICAgICAgICAuLi5Nb2NrU3RhY2suTU9DS19TVEFDS19XSVRIX0VSUk9SLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICBhd2FpdCB0b29sa2l0LnN5bnRoKFtdLCBmYWxzZSwgdHJ1ZSk7XG4gIH0pO1xuXG4gIHRlc3QoJ3N0YWNrIGhhcyBkZXBlbmRlbmN5IGFuZCB3YXMgZXhwbGljaXRseSBzZWxlY3RlZCcsIGFzeW5jICgpID0+IHtcbiAgICBjbG91ZEV4ZWN1dGFibGUgPSBuZXcgTW9ja0Nsb3VkRXhlY3V0YWJsZSh7XG4gICAgICBzdGFja3M6IFtNb2NrU3RhY2suTU9DS19TVEFDS19DLCBNb2NrU3RhY2suTU9DS19TVEFDS19EXSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICBhd2FpdCB0b29sa2l0LnN5bnRoKFtNb2NrU3RhY2suTU9DS19TVEFDS19ELnN0YWNrTmFtZV0sIHRydWUsIGZhbHNlKTtcblxuICAgIGV4cGVjdChtb2NrRGF0YS5tb2NrLmNhbGxzLmxlbmd0aCkudG9FcXVhbCgxKTtcbiAgICBleHBlY3QobW9ja0RhdGEubW9jay5jYWxsc1swXVswXSkudG9CZURlZmluZWQoKTtcbiAgfSk7XG5cbiAgdGVzdCgncm9sbGJhY2sgdXNlcyBkZXBsb3ltZW50IHJvbGUnLCBhc3luYyAoKSA9PiB7XG4gICAgY2xvdWRFeGVjdXRhYmxlID0gbmV3IE1vY2tDbG91ZEV4ZWN1dGFibGUoe1xuICAgICAgc3RhY2tzOiBbTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQ10sXG4gICAgfSk7XG5cbiAgICBjb25zdCBtb2NrZWRSb2xsYmFjayA9IGplc3Quc3B5T24oRGVwbG95bWVudHMucHJvdG90eXBlLCAncm9sbGJhY2tTdGFjaycpLm1vY2tSZXNvbHZlZFZhbHVlKHtcbiAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgfSk7XG5cbiAgICBjb25zdCB0b29sa2l0ID0gbmV3IENka1Rvb2xraXQoe1xuICAgICAgY2xvdWRFeGVjdXRhYmxlLFxuICAgICAgY29uZmlndXJhdGlvbjogY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24sXG4gICAgICBzZGtQcm92aWRlcjogY2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLFxuICAgICAgZGVwbG95bWVudHM6IG5ldyBEZXBsb3ltZW50cyh7IHNka1Byb3ZpZGVyOiBuZXcgTW9ja1Nka1Byb3ZpZGVyKCkgfSksXG4gICAgfSk7XG5cbiAgICBhd2FpdCB0b29sa2l0LnJvbGxiYWNrKHtcbiAgICAgIHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbXSB9LFxuICAgIH0pO1xuXG4gICAgZXhwZWN0KG1vY2tlZFJvbGxiYWNrKS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gIH0pO1xuXG4gIHRlc3QuZWFjaChbXG4gICAgW3sgdHlwZTogJ2ZhaWxwYXVzZWQtbmVlZC1yb2xsYmFjay1maXJzdCcsIHJlYXNvbjogJ3JlcGxhY2VtZW50Jywgc3RhdHVzOiAnT09QUycgfSwgZmFsc2VdLFxuICAgIFt7IHR5cGU6ICdmYWlscGF1c2VkLW5lZWQtcm9sbGJhY2stZmlyc3QnLCByZWFzb246ICdyZXBsYWNlbWVudCcsIHN0YXR1czogJ09PUFMnIH0sIHRydWVdLFxuICAgIFt7IHR5cGU6ICdmYWlscGF1c2VkLW5lZWQtcm9sbGJhY2stZmlyc3QnLCByZWFzb246ICdub3Qtbm9yb2xsYmFjaycsIHN0YXR1czogJ09PUFMnIH0sIGZhbHNlXSxcbiAgICBbeyB0eXBlOiAncmVwbGFjZW1lbnQtcmVxdWlyZXMtcm9sbGJhY2snIH0sIGZhbHNlXSxcbiAgICBbeyB0eXBlOiAncmVwbGFjZW1lbnQtcmVxdWlyZXMtcm9sbGJhY2snIH0sIHRydWVdLFxuICBdIHNhdGlzZmllcyBBcnJheTxbRGVwbG95U3RhY2tSZXN1bHQsIGJvb2xlYW5dPikoJ25vLXJvbGxiYWNrIGRlcGxveW1lbnQgdGhhdCBjYW50IHByb2NlZWQgd2lsbCBiZSBjYWxsZWQgd2l0aCByb2xsYmFjayBvbiByZXRyeTogJXAgKHVzaW5nIGZvcmNlOiAlcCknLCBhc3luYyAoZmlyc3RSZXN1bHQsIHVzZUZvcmNlKSA9PiB7XG4gICAgY2xvdWRFeGVjdXRhYmxlID0gbmV3IE1vY2tDbG91ZEV4ZWN1dGFibGUoe1xuICAgICAgc3RhY2tzOiBbXG4gICAgICAgIE1vY2tTdGFjay5NT0NLX1NUQUNLX0MsXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgY29uc3QgZGVwbG95bWVudHMgPSBuZXcgRGVwbG95bWVudHMoeyBzZGtQcm92aWRlcjogbmV3IE1vY2tTZGtQcm92aWRlcigpIH0pO1xuXG4gICAgLy8gUm9sbGJhY2sgbWlnaHQgYmUgY2FsbGVkIC0tIGp1c3QgZG9uJ3QgZG8gYW55dGhpbmcuXG4gICAgY29uc3QgbW9ja1JvbGxiYWNrU3RhY2sgPSBqZXN0LnNweU9uKGRlcGxveW1lbnRzLCAncm9sbGJhY2tTdGFjaycpLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcblxuICAgIGNvbnN0IG1vY2tlZERlcGxveVN0YWNrID0gamVzdFxuICAgICAgLnNweU9uKGRlcGxveW1lbnRzLCAnZGVwbG95U3RhY2snKVxuICAgICAgLm1vY2tSZXNvbHZlZFZhbHVlT25jZShmaXJzdFJlc3VsdClcbiAgICAgIC5tb2NrUmVzb2x2ZWRWYWx1ZU9uY2Uoe1xuICAgICAgICB0eXBlOiAnZGlkLWRlcGxveS1zdGFjaycsXG4gICAgICAgIG5vT3A6IGZhbHNlLFxuICAgICAgICBvdXRwdXRzOiB7fSxcbiAgICAgICAgc3RhY2tBcm46ICdzdGFjazphcm4nLFxuICAgICAgfSk7XG5cbiAgICBjb25zdCBtb2NrZWRDb25maXJtID0gamVzdC5zcHlPbihwcm9tcHRseSwgJ2NvbmZpcm0nKS5tb2NrUmVzb2x2ZWRWYWx1ZSh0cnVlKTtcblxuICAgIGNvbnN0IHRvb2xraXQgPSBuZXcgQ2RrVG9vbGtpdCh7XG4gICAgICBjbG91ZEV4ZWN1dGFibGUsXG4gICAgICBjb25maWd1cmF0aW9uOiBjbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbixcbiAgICAgIHNka1Byb3ZpZGVyOiBjbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIsXG4gICAgICBkZXBsb3ltZW50cyxcbiAgICB9KTtcblxuICAgIGF3YWl0IHRvb2xraXQuZGVwbG95KHtcbiAgICAgIHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbXSB9LFxuICAgICAgaG90c3dhcDogSG90c3dhcE1vZGUuRlVMTF9ERVBMT1lNRU5ULFxuICAgICAgcm9sbGJhY2s6IGZhbHNlLFxuICAgICAgcmVxdWlyZUFwcHJvdmFsOiBSZXF1aXJlQXBwcm92YWwuTmV2ZXIsXG4gICAgICBmb3JjZTogdXNlRm9yY2UsXG4gICAgfSk7XG5cbiAgICBpZiAoZmlyc3RSZXN1bHQudHlwZSA9PT0gJ2ZhaWxwYXVzZWQtbmVlZC1yb2xsYmFjay1maXJzdCcpIHtcbiAgICAgIGV4cGVjdChtb2NrUm9sbGJhY2tTdGFjaykudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIH1cblxuICAgIGlmICghdXNlRm9yY2UpIHtcbiAgICAgIC8vIFF1ZXN0aW9ucyB3aWxsIGhhdmUgYmVlbiBhc2tlZCBvbmx5IGlmIC0tZm9yY2UgaXMgbm90IHNwZWNpZmllZFxuICAgICAgaWYgKGZpcnN0UmVzdWx0LnR5cGUgPT09ICdmYWlscGF1c2VkLW5lZWQtcm9sbGJhY2stZmlyc3QnKSB7XG4gICAgICAgIGV4cGVjdChtb2NrZWRDb25maXJtKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3Quc3RyaW5nQ29udGFpbmluZygnUm9sbCBiYWNrIGZpcnN0IGFuZCB0aGVuIHByb2NlZWQgd2l0aCBkZXBsb3ltZW50JykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXhwZWN0KG1vY2tlZENvbmZpcm0pLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKGV4cGVjdC5zdHJpbmdDb250YWluaW5nKCdQZXJmb3JtIGEgcmVndWxhciBkZXBsb3ltZW50JykpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGV4cGVjdChtb2NrZWREZXBsb3lTdGFjaykudG9IYXZlQmVlbk50aENhbGxlZFdpdGgoMSwgZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoeyByb2xsYmFjazogZmFsc2UgfSkpO1xuICAgIGV4cGVjdChtb2NrZWREZXBsb3lTdGFjaykudG9IYXZlQmVlbk50aENhbGxlZFdpdGgoMiwgZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoeyByb2xsYmFjazogdHJ1ZSB9KSk7XG4gIH0pO1xufSk7XG5cbmNsYXNzIE1vY2tTdGFjayB7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTU9DS19TVEFDS19BOiBUZXN0U3RhY2tBcnRpZmFjdCA9IHtcbiAgICBzdGFja05hbWU6ICdUZXN0LVN0YWNrLUEnLFxuICAgIHRlbXBsYXRlOiB7IFJlc291cmNlczogeyBUZW1wbGF0ZU5hbWU6ICdUZXN0LVN0YWNrLUEnIH0gfSxcbiAgICBlbnY6ICdhd3M6Ly8xMjM0NTY3ODkwMTIvYmVybXVkYS10cmlhbmdsZS0xJyxcbiAgICBtZXRhZGF0YToge1xuICAgICAgJy9UZXN0LVN0YWNrLUEnOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBjeHNjaGVtYS5BcnRpZmFjdE1ldGFkYXRhRW50cnlUeXBlLlNUQUNLX1RBR1MsXG4gICAgICAgICAgZGF0YTogW3sga2V5OiAnRm9vJywgdmFsdWU6ICdCYXInIH1dLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIGRpc3BsYXlOYW1lOiAnVGVzdC1TdGFjay1BLURpc3BsYXktTmFtZScsXG4gIH07XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTU9DS19TVEFDS19COiBUZXN0U3RhY2tBcnRpZmFjdCA9IHtcbiAgICBzdGFja05hbWU6ICdUZXN0LVN0YWNrLUInLFxuICAgIHRlbXBsYXRlOiB7IFJlc291cmNlczogeyBUZW1wbGF0ZU5hbWU6ICdUZXN0LVN0YWNrLUInIH0gfSxcbiAgICBlbnY6ICdhd3M6Ly8xMjM0NTY3ODkwMTIvYmVybXVkYS10cmlhbmdsZS0xJyxcbiAgICBtZXRhZGF0YToge1xuICAgICAgJy9UZXN0LVN0YWNrLUInOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBjeHNjaGVtYS5BcnRpZmFjdE1ldGFkYXRhRW50cnlUeXBlLlNUQUNLX1RBR1MsXG4gICAgICAgICAgZGF0YTogW3sga2V5OiAnQmF6JywgdmFsdWU6ICdaaW5nYSEnIH1dLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICB9O1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1PQ0tfU1RBQ0tfQzogVGVzdFN0YWNrQXJ0aWZhY3QgPSB7XG4gICAgc3RhY2tOYW1lOiAnVGVzdC1TdGFjay1DJyxcbiAgICB0ZW1wbGF0ZTogeyBSZXNvdXJjZXM6IHsgVGVtcGxhdGVOYW1lOiAnVGVzdC1TdGFjay1DJyB9IH0sXG4gICAgZW52OiAnYXdzOi8vMTIzNDU2Nzg5MDEyL2Jlcm11ZGEtdHJpYW5nbGUtMScsXG4gICAgbWV0YWRhdGE6IHtcbiAgICAgICcvVGVzdC1TdGFjay1DJzogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogY3hzY2hlbWEuQXJ0aWZhY3RNZXRhZGF0YUVudHJ5VHlwZS5TVEFDS19UQUdTLFxuICAgICAgICAgIGRhdGE6IFt7IGtleTogJ0JheicsIHZhbHVlOiAnWmluZ2EhJyB9XSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICBkaXNwbGF5TmFtZTogJ1Rlc3QtU3RhY2stQS9UZXN0LVN0YWNrLUMnLFxuICB9O1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1PQ0tfU1RBQ0tfRDogVGVzdFN0YWNrQXJ0aWZhY3QgPSB7XG4gICAgc3RhY2tOYW1lOiAnVGVzdC1TdGFjay1EJyxcbiAgICB0ZW1wbGF0ZTogeyBSZXNvdXJjZXM6IHsgVGVtcGxhdGVOYW1lOiAnVGVzdC1TdGFjay1EJyB9IH0sXG4gICAgZW52OiAnYXdzOi8vMTIzNDU2Nzg5MDEyL2Jlcm11ZGEtdHJpYW5nbGUtMScsXG4gICAgbWV0YWRhdGE6IHtcbiAgICAgICcvVGVzdC1TdGFjay1EJzogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogY3hzY2hlbWEuQXJ0aWZhY3RNZXRhZGF0YUVudHJ5VHlwZS5TVEFDS19UQUdTLFxuICAgICAgICAgIGRhdGE6IFt7IGtleTogJ0JheicsIHZhbHVlOiAnWmluZ2EhJyB9XSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICBkZXBlbmRzOiBbTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQy5zdGFja05hbWVdLFxuICB9O1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1PQ0tfU1RBQ0tfV0lUSF9FUlJPUjogVGVzdFN0YWNrQXJ0aWZhY3QgPSB7XG4gICAgc3RhY2tOYW1lOiAnd2l0aGVycm9ycycsXG4gICAgZW52OiAnYXdzOi8vMTIzNDU2Nzg5MDEyL2Jlcm11ZGEtdHJpYW5nbGUtMScsXG4gICAgdGVtcGxhdGU6IHsgcmVzb3VyY2U6ICdlcnJvcnJlc291cmNlJyB9LFxuICAgIG1ldGFkYXRhOiB7XG4gICAgICAnL3Jlc291cmNlJzogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogY3hzY2hlbWEuQXJ0aWZhY3RNZXRhZGF0YUVudHJ5VHlwZS5FUlJPUixcbiAgICAgICAgICBkYXRhOiAndGhpcyBpcyBhbiBlcnJvcicsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gICAgZGlzcGxheU5hbWU6ICdUZXN0LVN0YWNrLUEvd2l0aGVycm9ycycsXG4gIH07XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTU9DS19TVEFDS19XSVRIX0FTU0VUOiBUZXN0U3RhY2tBcnRpZmFjdCA9IHtcbiAgICBzdGFja05hbWU6ICdUZXN0LVN0YWNrLUFzc2V0JyxcbiAgICB0ZW1wbGF0ZTogeyBSZXNvdXJjZXM6IHsgVGVtcGxhdGVOYW1lOiAnVGVzdC1TdGFjay1Bc3NldCcgfSB9LFxuICAgIGVudjogJ2F3czovLzEyMzQ1Njc4OTAxMi9iZXJtdWRhLXRyaWFuZ2xlLTEnLFxuICAgIGFzc2V0TWFuaWZlc3Q6IHtcbiAgICAgIHZlcnNpb246IE1hbmlmZXN0LnZlcnNpb24oKSxcbiAgICAgIGZpbGVzOiB7XG4gICAgICAgIHh5ejoge1xuICAgICAgICAgIHNvdXJjZToge1xuICAgICAgICAgICAgcGF0aDogcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uJywgJ0xJQ0VOU0UnKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGRlc3RpbmF0aW9uczoge30sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTU9DS19TVEFDS19XSVRIX05PVElGSUNBVElPTl9BUk5TOiBUZXN0U3RhY2tBcnRpZmFjdCA9IHtcbiAgICBzdGFja05hbWU6ICdUZXN0LVN0YWNrLU5vdGlmaWNhdGlvbi1Bcm5zJyxcbiAgICBub3RpZmljYXRpb25Bcm5zOiBbJ2Fybjphd3M6c25zOmJlcm11ZGEtdHJpYW5nbGUtMTMzNzoxMjM0NTY3ODkwMTI6TXlUb3BpYyddLFxuICAgIHRlbXBsYXRlOiB7IFJlc291cmNlczogeyBUZW1wbGF0ZU5hbWU6ICdUZXN0LVN0YWNrLU5vdGlmaWNhdGlvbi1Bcm5zJyB9IH0sXG4gICAgZW52OiAnYXdzOi8vMTIzNDU2Nzg5MDEyL2Jlcm11ZGEtdHJpYW5nbGUtMTMzNycsXG4gICAgbWV0YWRhdGE6IHtcbiAgICAgICcvVGVzdC1TdGFjay1Ob3RpZmljYXRpb24tQXJucyc6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IGN4c2NoZW1hLkFydGlmYWN0TWV0YWRhdGFFbnRyeVR5cGUuU1RBQ0tfVEFHUyxcbiAgICAgICAgICBkYXRhOiBbeyBrZXk6ICdGb28nLCB2YWx1ZTogJ0JhcicgfV0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gIH07XG5cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNT0NLX1NUQUNLX1dJVEhfQkFEX05PVElGSUNBVElPTl9BUk5TOiBUZXN0U3RhY2tBcnRpZmFjdCA9IHtcbiAgICBzdGFja05hbWU6ICdUZXN0LVN0YWNrLUJhZC1Ob3RpZmljYXRpb24tQXJucycsXG4gICAgbm90aWZpY2F0aW9uQXJuczogWydhcm46MTMzNzoxMjM0NTY3ODkwMTI6c25zOmJhZCddLFxuICAgIHRlbXBsYXRlOiB7IFJlc291cmNlczogeyBUZW1wbGF0ZU5hbWU6ICdUZXN0LVN0YWNrLUJhZC1Ob3RpZmljYXRpb24tQXJucycgfSB9LFxuICAgIGVudjogJ2F3czovLzEyMzQ1Njc4OTAxMi9iZXJtdWRhLXRyaWFuZ2xlLTEzMzcnLFxuICAgIG1ldGFkYXRhOiB7XG4gICAgICAnL1Rlc3QtU3RhY2stQmFkLU5vdGlmaWNhdGlvbi1Bcm5zJzogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogY3hzY2hlbWEuQXJ0aWZhY3RNZXRhZGF0YUVudHJ5VHlwZS5TVEFDS19UQUdTLFxuICAgICAgICAgIGRhdGE6IFt7IGtleTogJ0ZvbycsIHZhbHVlOiAnQmFyJyB9XSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgfTtcbn1cblxuY2xhc3MgRmFrZUNsb3VkRm9ybWF0aW9uIGV4dGVuZHMgRGVwbG95bWVudHMge1xuICBwcml2YXRlIHJlYWRvbmx5IGV4cGVjdGVkVGFnczogeyBbc3RhY2tOYW1lOiBzdHJpbmddOiBUYWdbXSB9ID0ge307XG4gIHByaXZhdGUgcmVhZG9ubHkgZXhwZWN0ZWROb3RpZmljYXRpb25Bcm5zPzogc3RyaW5nW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgZXhwZWN0ZWRUYWdzOiB7IFtzdGFja05hbWU6IHN0cmluZ106IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gfSA9IHt9LFxuICAgIGV4cGVjdGVkTm90aWZpY2F0aW9uQXJucz86IHN0cmluZ1tdLFxuICApIHtcbiAgICBzdXBlcih7IHNka1Byb3ZpZGVyOiBuZXcgTW9ja1Nka1Byb3ZpZGVyKCkgfSk7XG5cbiAgICBmb3IgKGNvbnN0IFtzdGFja05hbWUsIHRhZ3NdIG9mIE9iamVjdC5lbnRyaWVzKGV4cGVjdGVkVGFncykpIHtcbiAgICAgIHRoaXMuZXhwZWN0ZWRUYWdzW3N0YWNrTmFtZV0gPSBPYmplY3QuZW50cmllcyh0YWdzKVxuICAgICAgICAubWFwKChbS2V5LCBWYWx1ZV0pID0+ICh7IEtleSwgVmFsdWUgfSkpXG4gICAgICAgIC5zb3J0KChsLCByKSA9PiBsLktleS5sb2NhbGVDb21wYXJlKHIuS2V5KSk7XG4gICAgfVxuICAgIHRoaXMuZXhwZWN0ZWROb3RpZmljYXRpb25Bcm5zID0gZXhwZWN0ZWROb3RpZmljYXRpb25Bcm5zO1xuICB9XG5cbiAgcHVibGljIGRlcGxveVN0YWNrKG9wdGlvbnM6IERlcGxveVN0YWNrT3B0aW9ucyk6IFByb21pc2U8U3VjY2Vzc2Z1bERlcGxveVN0YWNrUmVzdWx0PiB7XG4gICAgZXhwZWN0KFtcbiAgICAgIE1vY2tTdGFjay5NT0NLX1NUQUNLX0Euc3RhY2tOYW1lLFxuICAgICAgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQi5zdGFja05hbWUsXG4gICAgICBNb2NrU3RhY2suTU9DS19TVEFDS19DLnN0YWNrTmFtZSxcbiAgICAgIC8vIE1vY2tTdGFjay5NT0NLX1NUQUNLX0QgZGVsaWJlcmF0ZWx5IG9taXR0ZWQuXG4gICAgICBNb2NrU3RhY2suTU9DS19TVEFDS19XSVRIX0FTU0VULnN0YWNrTmFtZSxcbiAgICAgIE1vY2tTdGFjay5NT0NLX1NUQUNLX1dJVEhfRVJST1Iuc3RhY2tOYW1lLFxuICAgICAgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfV0lUSF9OT1RJRklDQVRJT05fQVJOUy5zdGFja05hbWUsXG4gICAgICBNb2NrU3RhY2suTU9DS19TVEFDS19XSVRIX0JBRF9OT1RJRklDQVRJT05fQVJOUy5zdGFja05hbWUsXG4gICAgXSkudG9Db250YWluKG9wdGlvbnMuc3RhY2suc3RhY2tOYW1lKTtcblxuICAgIGlmICh0aGlzLmV4cGVjdGVkVGFnc1tvcHRpb25zLnN0YWNrLnN0YWNrTmFtZV0pIHtcbiAgICAgIGV4cGVjdChvcHRpb25zLnRhZ3MpLnRvRXF1YWwodGhpcy5leHBlY3RlZFRhZ3Nbb3B0aW9ucy5zdGFjay5zdGFja05hbWVdKTtcbiAgICB9XG5cbiAgICAvLyBJbiB0aGVzZSB0ZXN0cywgd2UgZG9uJ3QgbWFrZSBhIGRpc3RpbmN0aW9uIGhlcmUgYmV0d2VlbiBgdW5kZWZpbmVkYCBhbmQgYFtdYC5cbiAgICAvL1xuICAgIC8vIEluIHRlc3RzIGBkZXBsb3lTdGFja2AgaXRzZWxmIHdlIGRvIHRyZWF0IGB1bmRlZmluZWRgIGFuZCBgW11gIGRpZmZlcmVudGx5LFxuICAgIC8vIGFuZCBpbiBgYXdzLWNkay1saWJgIHdlIGVtaXQgdGhlbSB1bmRlciBkaWZmZXJlbnQgY29uZGl0aW9ucy4gQnV0IHRoaXMgdGVzdFxuICAgIC8vIHdpdGhvdXQgbm9ybWFsaXphdGlvbiBkZXBlbmRzIG9uIGEgdmVyc2lvbiBvZiBgYXdzLWNkay1saWJgIHRoYXQgaGFzbid0IGJlZW5cbiAgICAvLyByZWxlYXNlZCB5ZXQuXG4gICAgZXhwZWN0KG9wdGlvbnMubm90aWZpY2F0aW9uQXJucyA/PyBbXSkudG9FcXVhbCh0aGlzLmV4cGVjdGVkTm90aWZpY2F0aW9uQXJucyA/PyBbXSk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG4gICAgICB0eXBlOiAnZGlkLWRlcGxveS1zdGFjaycsXG4gICAgICBzdGFja0FybjogYGFybjphd3M6Y2xvdWRmb3JtYXRpb246OjpzdGFjay8ke29wdGlvbnMuc3RhY2suc3RhY2tOYW1lfS9Nb2NrZWRPdXRgLFxuICAgICAgbm9PcDogZmFsc2UsXG4gICAgICBvdXRwdXRzOiB7IFN0YWNrTmFtZTogb3B0aW9ucy5zdGFjay5zdGFja05hbWUgfSxcbiAgICAgIHN0YWNrQXJ0aWZhY3Q6IG9wdGlvbnMuc3RhY2ssXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgcm9sbGJhY2tTdGFjayhfb3B0aW9uczogUm9sbGJhY2tTdGFja09wdGlvbnMpOiBQcm9taXNlPFJvbGxiYWNrU3RhY2tSZXN1bHQ+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZGVzdHJveVN0YWNrKG9wdGlvbnM6IERlc3Ryb3lTdGFja09wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBleHBlY3Qob3B0aW9ucy5zdGFjaykudG9CZURlZmluZWQoKTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICBwdWJsaWMgcmVhZEN1cnJlbnRUZW1wbGF0ZShzdGFjazogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0KTogUHJvbWlzZTxUZW1wbGF0ZT4ge1xuICAgIHN3aXRjaCAoc3RhY2suc3RhY2tOYW1lKSB7XG4gICAgICBjYXNlIE1vY2tTdGFjay5NT0NLX1NUQUNLX0Euc3RhY2tOYW1lOlxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgICAgIGNhc2UgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQi5zdGFja05hbWU6XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICAgICAgY2FzZSBNb2NrU3RhY2suTU9DS19TVEFDS19DLnN0YWNrTmFtZTpcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG4gICAgICBjYXNlIE1vY2tTdGFjay5NT0NLX1NUQUNLX1dJVEhfQVNTRVQuc3RhY2tOYW1lOlxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgICAgIGNhc2UgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfV0lUSF9OT1RJRklDQVRJT05fQVJOUy5zdGFja05hbWU6XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICAgICAgY2FzZSBNb2NrU3RhY2suTU9DS19TVEFDS19XSVRIX0JBRF9OT1RJRklDQVRJT05fQVJOUy5zdGFja05hbWU6XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBub3QgYW4gZXhwZWN0ZWQgbW9jayBzdGFjazogJHtzdGFjay5zdGFja05hbWV9YCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNsaVRlc3QobmFtZTogc3RyaW5nLCBoYW5kbGVyOiAoZGlyOiBzdHJpbmcpID0+IHZvaWQgfCBQcm9taXNlPGFueT4pOiB2b2lkIHtcbiAgdGVzdChuYW1lLCAoKSA9PiB3aXRoVGVtcERpcihoYW5kbGVyKSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdpdGhUZW1wRGlyKGNiOiAoZGlyOiBzdHJpbmcpID0+IHZvaWQgfCBQcm9taXNlPGFueT4pIHtcbiAgY29uc3QgdG1wRGlyID0gYXdhaXQgZnMubWtkdGVtcChwYXRoLmpvaW4ob3MudG1wZGlyKCksICdhd3MtY2RrLXRlc3QnKSk7XG4gIHRyeSB7XG4gICAgYXdhaXQgY2IodG1wRGlyKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBmcy5yZW1vdmUodG1wRGlyKTtcbiAgfVxufVxuIl19
1391
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXRvb2xraXQudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNkay10b29sa2l0LnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw0REFBNEQ7QUFDNUQsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDeEMsTUFBTSxtQkFBbUIsR0FBRztJQUMxQixFQUFFLEVBQUUscUJBQXFCO0NBQzFCLENBQUM7QUFDRixNQUFNLHFCQUFxQixHQUFHO0lBQzVCLElBQUksYUFBYTtRQUNmLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFFLGdHQUFnRztRQUNoRyxpRUFBaUU7UUFDakUsaUVBQWlFO1FBQ2pFLE1BQU0sU0FBUyxHQUFHLHFCQUFxQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEQsMkRBQTJEO1FBQzNELHlCQUF5QjtRQUN6QixNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLHNDQUFzQztRQUN0QyxPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBSSxpQkFBaUI7UUFJbkIsTUFBTSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUUsTUFBTSxVQUFVLEdBQUcscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2RCwrREFBK0Q7UUFDL0QseUJBQXlCO1FBQ3pCLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FB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TUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLElBQUksQ0FBQztRQUNILE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ25CLENBQUM7WUFBUyxDQUFDO1FBQ1QsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFCLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gV2UgbmVlZCB0byBtb2NrIHRoZSBjaG9raWRhciBsaWJyYXJ5LCB1c2VkIGJ5ICdjZGsgd2F0Y2gnXG5jb25zdCBtb2NrQ2hva2lkYXJXYXRjaGVyT24gPSBqZXN0LmZuKCk7XG5jb25zdCBmYWtlQ2hva2lkYXJXYXRjaGVyID0ge1xuICBvbjogbW9ja0Nob2tpZGFyV2F0Y2hlck9uLFxufTtcbmNvbnN0IGZha2VDaG9raWRhcldhdGNoZXJPbiA9IHtcbiAgZ2V0IHJlYWR5Q2FsbGJhY2soKTogKCkgPT4gdm9pZCB7XG4gICAgZXhwZWN0KG1vY2tDaG9raWRhcldhdGNoZXJPbi5tb2NrLmNhbGxzLmxlbmd0aCkudG9CZUdyZWF0ZXJUaGFuT3JFcXVhbCgxKTtcbiAgICAvLyBUaGUgY2FsbCB0byB0aGUgZmlyc3QgJ3dhdGNoZXIub24oKScgaW4gdGhlIHByb2R1Y3Rpb24gY29kZSBpcyB0aGUgb25lIHdlIGFjdHVhbGx5IHdhbnQgaGVyZS5cbiAgICAvLyBUaGlzIGlzIGEgcHJldHR5IGZyYWdpbGUsIGJ1dCBhdCBsZWFzdCB3aXRoIHRoaXMgaGVscGVyIGNsYXNzLFxuICAgIC8vIHdlIHdvdWxkIGhhdmUgdG8gY2hhbmdlIGl0IG9ubHkgaW4gb25lIHBsYWNlIGlmIGl0IGV2ZXIgYnJlYWtzXG4gICAgY29uc3QgZmlyc3RDYWxsID0gbW9ja0Nob2tpZGFyV2F0Y2hlck9uLm1vY2suY2FsbHNbMF07XG4gICAgLy8gbGV0J3MgbWFrZSBzdXJlIHRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgJ3JlYWR5JyBldmVudCxcbiAgICAvLyBqdXN0IHRvIGJlIGRvdWJsZSBzYWZlXG4gICAgZXhwZWN0KGZpcnN0Q2FsbFswXSkudG9CZSgncmVhZHknKTtcbiAgICAvLyB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIHRoZSBjYWxsYmFja1xuICAgIHJldHVybiBmaXJzdENhbGxbMV07XG4gIH0sXG5cbiAgZ2V0IGZpbGVFdmVudENhbGxiYWNrKCk6IChcbiAgZXZlbnQ6ICdhZGQnIHwgJ2FkZERpcicgfCAnY2hhbmdlJyB8ICd1bmxpbmsnIHwgJ3VubGlua0RpcicsXG4gIHBhdGg6IHN0cmluZyxcbiAgKSA9PiBQcm9taXNlPHZvaWQ+IHtcbiAgICBleHBlY3QobW9ja0Nob2tpZGFyV2F0Y2hlck9uLm1vY2suY2FsbHMubGVuZ3RoKS50b0JlR3JlYXRlclRoYW5PckVxdWFsKDIpO1xuICAgIGNvbnN0IHNlY29uZENhbGwgPSBtb2NrQ2hva2lkYXJXYXRjaGVyT24ubW9jay5jYWxsc1sxXTtcbiAgICAvLyBsZXQncyBtYWtlIHN1cmUgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIG5vdCB0aGUgJ3JlYWR5JyBldmVudCxcbiAgICAvLyBqdXN0IHRvIGJlIGRvdWJsZSBzYWZlXG4gICAgZXhwZWN0KHNlY29uZENhbGxbMF0pLm5vdC50b0JlKCdyZWFkeScpO1xuICAgIC8vIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIGNhbGxiYWNrXG4gICAgcmV0dXJuIHNlY29uZENhbGxbMV07XG4gIH0sXG59O1xuXG5jb25zdCBtb2NrQ2hva2lkYXJXYXRjaCA9IGplc3QuZm4oKTtcbmplc3QubW9jaygnY2hva2lkYXInLCAoKSA9PiAoe1xuICB3YXRjaDogbW9ja0Nob2tpZGFyV2F0Y2gsXG59KSk7XG5jb25zdCBmYWtlQ2hva2lkYXJXYXRjaCA9IHtcbiAgZ2V0IGluY2x1ZGVBcmdzKCk6IHN0cmluZ1tdIHtcbiAgICBleHBlY3QobW9ja0Nob2tpZGFyV2F0Y2gubW9jay5jYWxscy5sZW5ndGgpLnRvQmUoMSk7XG4gICAgLy8gdGhlIGluY2x1ZGUgYXJncyBhcmUgdGhlIGZpcnN0IHBhcmFtZXRlciB0byB0aGUgJ3dhdGNoKCknIGNhbGxcbiAgICByZXR1cm4gbW9ja0Nob2tpZGFyV2F0Y2gubW9jay5jYWxsc1swXVswXTtcbiAgfSxcblxuICBnZXQgZXhjbHVkZUFyZ3MoKTogc3RyaW5nW10ge1xuICAgIGV4cGVjdChtb2NrQ2hva2lkYXJXYXRjaC5tb2NrLmNhbGxzLmxlbmd0aCkudG9CZSgxKTtcbiAgICAvLyB0aGUgaWdub3JlIGFyZ3MgYXJlIGEgcHJvcGVydHkgb2YgdGhlIHNlY29uZCBwYXJhbWV0ZXIgdG8gdGhlICd3YXRjaCgpJyBjYWxsXG4gICAgY29uc3QgY2hva2lkYXJXYXRjaE9wdHMgPSBtb2NrQ2hva2lkYXJXYXRjaC5tb2NrLmNhbGxzWzBdWzFdO1xuICAgIHJldHVybiBjaG9raWRhcldhdGNoT3B0cy5pZ25vcmVkO1xuICB9LFxufTtcblxuY29uc3QgbW9ja1Jlc3VsdCA9IGplc3QuZm4oKTtcbmplc3QubW9jaygnLi4vLi4vbGliL2xvZ2dpbmcnLCAoKSA9PiAoe1xuICAuLi5qZXN0LnJlcXVpcmVBY3R1YWwoJy4uLy4uL2xpYi9sb2dnaW5nJyksXG4gIHJlc3VsdDogbW9ja1Jlc3VsdCxcbn0pKTtcbmplc3Quc2V0VGltZW91dCgzMF8wMDApO1xuXG5pbXBvcnQgJ2F3cy1zZGstY2xpZW50LW1vY2snO1xuaW1wb3J0ICogYXMgb3MgZnJvbSAnb3MnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGN4c2NoZW1hIGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LXNjaGVtYSc7XG5pbXBvcnQgeyBNYW5pZmVzdCB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LXNjaGVtYSc7XG5pbXBvcnQgKiBhcyBjeGFwaSBmcm9tICdAYXdzLWNkay9jeC1hcGknO1xuaW1wb3J0IHsgRGVzY3JpYmVTdGFja3NDb21tYW5kLCBHZXRUZW1wbGF0ZUNvbW1hbmQsIFN0YWNrU3RhdHVzIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB7IEdldFBhcmFtZXRlckNvbW1hbmQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtc3NtJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCAqIGFzIHByb21wdGx5IGZyb20gJ3Byb21wdGx5JztcbmltcG9ydCB7IFNka1Byb3ZpZGVyIH0gZnJvbSAnLi4vLi4vbGliL2FwaSc7XG5pbXBvcnQgeyBCb290c3RyYXBwZXIsIHR5cGUgQm9vdHN0cmFwU291cmNlIH0gZnJvbSAnLi4vLi4vbGliL2FwaS9ib290c3RyYXAnO1xuaW1wb3J0IHtcbiAgRGVwbG95U3RhY2tSZXN1bHQsXG4gIFN1Y2Nlc3NmdWxEZXBsb3lTdGFja1Jlc3VsdCxcbiAgVGVtcGxhdGUsXG4gIERlcGxveW1lbnRzLFxuICBEZXBsb3lTdGFja09wdGlvbnMsXG4gIERlc3Ryb3lTdGFja09wdGlvbnMsXG4gIFJvbGxiYWNrU3RhY2tPcHRpb25zLFxuICBSb2xsYmFja1N0YWNrUmVzdWx0LFxufSBmcm9tICcuLi8uLi9saWIvYXBpL2RlcGxveW1lbnRzJztcbmltcG9ydCB7IEhvdHN3YXBNb2RlIH0gZnJvbSAnLi4vLi4vbGliL2FwaS9ob3Rzd2FwL2NvbW1vbic7XG5pbXBvcnQgeyBNb2RlIH0gZnJvbSAnLi4vLi4vbGliL2FwaS9wbHVnaW4nO1xuaW1wb3J0IHsgVGFnIH0gZnJvbSAnLi4vLi4vbGliL2FwaS90YWdzJztcbmltcG9ydCB7IENka1Rvb2xraXQsIG1hcmtUZXN0aW5nIH0gZnJvbSAnLi4vLi4vbGliL2NsaS9jZGstdG9vbGtpdCc7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vLi4vbGliL2NsaS91c2VyLWNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHsgUmVxdWlyZUFwcHJvdmFsIH0gZnJvbSAnLi4vLi4vbGliL2RpZmYnO1xuaW1wb3J0IHsgQ2xpSW9Ib3N0IH0gZnJvbSAnLi4vLi4vbGliL3Rvb2xraXQvY2xpLWlvLWhvc3QnO1xuaW1wb3J0IHsgZmxhdHRlbiB9IGZyb20gJy4uLy4uL2xpYi91dGlsJztcbmltcG9ydCB7IGluc3RhbmNlTW9ja0Zyb20sIE1vY2tDbG91ZEV4ZWN1dGFibGUsIFRlc3RTdGFja0FydGlmYWN0IH0gZnJvbSAnLi4vdXRpbCc7XG5pbXBvcnQge1xuICBtb2NrQ2xvdWRGb3JtYXRpb25DbGllbnQsXG4gIE1vY2tTZGssXG4gIE1vY2tTZGtQcm92aWRlcixcbiAgbW9ja1NTTUNsaWVudCxcbiAgcmVzdG9yZVNka01vY2tzVG9EZWZhdWx0LFxufSBmcm9tICcuLi91dGlsL21vY2stc2RrJztcblxubWFya1Rlc3RpbmcoKTtcblxuY29uc3QgZGVmYXVsdEJvb3RzdHJhcFNvdXJjZTogQm9vdHN0cmFwU291cmNlID0geyBzb3VyY2U6ICdkZWZhdWx0JyB9O1xuY29uc3QgYm9vdHN0cmFwRW52aXJvbm1lbnRNb2NrID0gamVzdC5zcHlPbihCb290c3RyYXBwZXIucHJvdG90eXBlLCAnYm9vdHN0cmFwRW52aXJvbm1lbnQnKTtcbmxldCBjbG91ZEV4ZWN1dGFibGU6IE1vY2tDbG91ZEV4ZWN1dGFibGU7XG5sZXQgc3RkZXJyTW9jazogamVzdC5TcHlJbnN0YW5jZTtcbmJlZm9yZUVhY2goKCkgPT4ge1xuICBqZXN0LnJlc2V0QWxsTW9ja3MoKTtcbiAgcmVzdG9yZVNka01vY2tzVG9EZWZhdWx0KCk7XG5cbiAgbW9ja0Nob2tpZGFyV2F0Y2gubW9ja1JldHVyblZhbHVlKGZha2VDaG9raWRhcldhdGNoZXIpO1xuICAvLyBvbigpIGluIGNob2tpZGFyJ3MgV2F0Y2hlciByZXR1cm5zICd0aGlzJ1xuICBtb2NrQ2hva2lkYXJXYXRjaGVyT24ubW9ja1JldHVyblZhbHVlKGZha2VDaG9raWRhcldhdGNoZXIpO1xuXG4gIGJvb3RzdHJhcEVudmlyb25tZW50TW9jay5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgbm9PcDogZmFsc2UsXG4gICAgb3V0cHV0czoge30sXG4gICAgdHlwZTogJ2RpZC1kZXBsb3ktc3RhY2snLFxuICAgIHN0YWNrQXJuOiAnZmFrZS1hcm4nLFxuICB9KTtcblxuICBjbG91ZEV4ZWN1dGFibGUgPSBuZXcgTW9ja0Nsb3VkRXhlY3V0YWJsZSh7XG4gICAgc3RhY2tzOiBbTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQSwgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQl0sXG4gICAgbmVzdGVkQXNzZW1ibGllczogW1xuICAgICAge1xuICAgICAgICBzdGFja3M6IFtNb2NrU3RhY2suTU9DS19TVEFDS19DXSxcbiAgICAgIH0sXG4gICAgXSxcbiAgfSk7XG5cbiAgQ2xpSW9Ib3N0Lmluc3RhbmNlKCkuaXNDSSA9IGZhbHNlO1xuICBzdGRlcnJNb2NrID0gamVzdC5zcHlPbihwcm9jZXNzLnN0ZGVyciwgJ3dyaXRlJykubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSk7XG59KTtcblxuZnVuY3Rpb24gZGVmYXVsdFRvb2xraXRTZXR1cCgpIHtcbiAgcmV0dXJuIG5ldyBDZGtUb29sa2l0KHtcbiAgICBjbG91ZEV4ZWN1dGFibGUsXG4gICAgY29uZmlndXJhdGlvbjogY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24sXG4gICAgc2RrUHJvdmlkZXI6IGNsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlcixcbiAgICBkZXBsb3ltZW50czogbmV3IEZha2VDbG91ZEZvcm1hdGlvbih7XG4gICAgICAnVGVzdC1TdGFjay1BJzogeyBGb286ICdCYXInIH0sXG4gICAgICAnVGVzdC1TdGFjay1CJzogeyBCYXo6ICdaaW5nYSEnIH0sXG4gICAgICAnVGVzdC1TdGFjay1DJzogeyBCYXo6ICdaaW5nYSEnIH0sXG4gICAgfSksXG4gIH0pO1xufVxuXG5jb25zdCBtb2NrU2RrID0gbmV3IE1vY2tTZGsoKTtcblxuZGVzY3JpYmUoJ3JlYWRDdXJyZW50VGVtcGxhdGUnLCAoKSA9PiB7XG4gIGxldCB0ZW1wbGF0ZTogYW55O1xuICBsZXQgbW9ja0Nsb3VkRXhlY3V0YWJsZTogTW9ja0Nsb3VkRXhlY3V0YWJsZTtcbiAgbGV0IHNka1Byb3ZpZGVyOiBTZGtQcm92aWRlcjtcbiAgbGV0IG1vY2tGb3JFbnZpcm9ubWVudDogYW55O1xuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBqZXN0LnJlc2V0QWxsTW9ja3MoKTtcbiAgICB0ZW1wbGF0ZSA9IHtcbiAgICAgIFJlc291cmNlczoge1xuICAgICAgICBGdW5jOiB7XG4gICAgICAgICAgVHlwZTogJ0FXUzo6TGFtYmRhOjpGdW5jdGlvbicsXG4gICAgICAgICAgUHJvcGVydGllczoge1xuICAgICAgICAgICAgS2V5OiAnVmFsdWUnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG4gICAgbW9ja0Nsb3VkRXhlY3V0YWJsZSA9IG5ldyBNb2NrQ2xvdWRFeGVjdXRhYmxlKHtcbiAgICAgIHN0YWNrczogW1xuICAgICAgICB7XG4gICAgICAgICAgc3RhY2tOYW1lOiAnVGVzdC1TdGFjay1DJyxcbiAgICAgICAgICB0ZW1wbGF0ZSxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBhc3N1bWVSb2xlQXJuOiAnYmxvb3A6JHtBV1M6OlJlZ2lvbn06JHtBV1M6OkFjY291bnRJZH0nLFxuICAgICAgICAgICAgbG9va3VwUm9sZToge1xuICAgICAgICAgICAgICBhcm46ICdibG9vcC1sb29rdXA6JHtBV1M6OlJlZ2lvbn06JHtBV1M6OkFjY291bnRJZH0nLFxuICAgICAgICAgICAgICByZXF1aXJlc0Jvb3RzdHJhcFN0YWNrVmVyc2lvbjogNSxcbiAgICAgICAgICAgICAgYm9vdHN0cmFwU3RhY2tWZXJzaW9uU3NtUGFyYW1ldGVyOiAnL2Jvb3RzdHJhcC9wYXJhbWV0ZXInLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgc3RhY2tOYW1lOiAnVGVzdC1TdGFjay1BJyxcbiAgICAgICAgICB0ZW1wbGF0ZSxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBhc3N1bWVSb2xlQXJuOiAnYmxvb3A6JHtBV1M6OlJlZ2lvbn06JHtBV1M6OkFjY291bnRJZH0nLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICAgIHNka1Byb3ZpZGVyID0gbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlcjtcbiAgICBtb2NrRm9yRW52aXJvbm1lbnQgPSBqZXN0XG4gICAgICAuc3B5T24oc2RrUHJvdmlkZXIsICdmb3JFbnZpcm9ubWVudCcpXG4gICAgICAubW9ja1Jlc29sdmVkVmFsdWUoeyBzZGs6IG1vY2tTZGssIGRpZEFzc3VtZVJvbGU6IHRydWUgfSk7XG4gICAgbW9ja0Nsb3VkRm9ybWF0aW9uQ2xpZW50XG4gICAgICAub24oR2V0VGVtcGxhdGVDb21tYW5kKVxuICAgICAgLnJlc29sdmVzKHtcbiAgICAgICAgVGVtcGxhdGVCb2R5OiBKU09OLnN0cmluZ2lmeSh0ZW1wbGF0ZSksXG4gICAgICB9KVxuICAgICAgLm9uKERlc2NyaWJlU3RhY2tzQ29tbWFuZClcbiAgICAgIC5yZXNvbHZlcyh7XG4gICAgICAgIFN0YWNrczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIFN0YWNrTmFtZTogJ1Rlc3QtU3RhY2stQycsXG4gICAgICAgICAgICBTdGFja1N0YXR1czogU3RhY2tTdGF0dXMuQ1JFQVRFX0NPTVBMRVRFLFxuICAgICAgICAgICAgQ3JlYXRpb25UaW1lOiBuZXcgRGF0ZSgpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgU3RhY2tOYW1lOiAnVGVzdC1TdGFjay1BJyxcbiAgICAgICAgICAgIFN0YWNrU3RhdHVzOiBTdGFja1N0YXR1cy5DUkVBVEVfQ09NUExFVEUsXG4gICAgICAgICAgICBDcmVhdGlvblRpbWU6IG5ldyBEYXRlKCksXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuICB9KTtcblxuICB0ZXN0KCdsb29rdXAgcm9sZSBpcyB1c2VkJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgbW9ja1NTTUNsaWVudC5vbihHZXRQYXJhbWV0ZXJDb21tYW5kKS5yZXNvbHZlcyh7IFBhcmFtZXRlcjogeyBWYWx1ZTogJzYnIH0gfSk7XG5cbiAgICBjb25zdCBjZGtUb29sa2l0ID0gbmV3IENka1Rvb2xraXQoe1xuICAgICAgY2xvdWRFeGVjdXRhYmxlOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLFxuICAgICAgY29uZmlndXJhdGlvbjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLFxuICAgICAgc2RrUHJvdmlkZXI6IG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIsXG4gICAgICBkZXBsb3ltZW50czogbmV3IERlcGxveW1lbnRzKHtcbiAgICAgICAgc2RrUHJvdmlkZXI6IG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIsXG4gICAgICB9KSxcbiAgICB9KTtcblxuICAgIC8vIFdIRU5cbiAgICBhd2FpdCBjZGtUb29sa2l0LmRlcGxveSh7XG4gICAgICBzZWxlY3RvcjogeyBwYXR0ZXJuczogWydUZXN0LVN0YWNrLUMnXSB9LFxuICAgICAgaG90c3dhcDogSG90c3dhcE1vZGUuRlVMTF9ERVBMT1lNRU5ULFxuICAgIH0pO1xuXG4gICAgLy8gVEhFTlxuICAgIGV4cGVjdChtb2NrU1NNQ2xpZW50KS50b0hhdmVSZWNlaXZlZENvbW1hbmRXaXRoKEdldFBhcmFtZXRlckNvbW1hbmQsIHtcbiAgICAgIE5hbWU6ICcvYm9vdHN0cmFwL3BhcmFtZXRlcicsXG4gICAgfSk7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDIpO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQpLnRvSGF2ZUJlZW5OdGhDYWxsZWRXaXRoKFxuICAgICAgMSxcbiAgICAgIHtcbiAgICAgICAgYWNjb3VudDogJzEyMzQ1Njc4OTAxMicsXG4gICAgICAgIG5hbWU6ICdhd3M6Ly8xMjM0NTY3ODkwMTIvaGVyZScsXG4gICAgICAgIHJlZ2lvbjogJ2hlcmUnLFxuICAgICAgfSxcbiAgICAgIDAsXG4gICAgICB7XG4gICAgICAgIGFzc3VtZVJvbGVBcm46ICdibG9vcC1sb29rdXA6aGVyZToxMjM0NTY3ODkwMTInLFxuICAgICAgICBhc3N1bWVSb2xlRXh0ZXJuYWxJZDogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICApO1xuICB9KTtcblxuICB0ZXN0KCdmYWxsYmFjayB0byBkZXBsb3kgcm9sZSBpZiBib290c3RyYXAgc3RhY2sgdmVyc2lvbiBpcyBub3QgdmFsaWQnLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBtb2NrU1NNQ2xpZW50Lm9uKEdldFBhcmFtZXRlckNvbW1hbmQpLnJlc29sdmVzKHsgUGFyYW1ldGVyOiB7IFZhbHVlOiAnMScgfSB9KTtcblxuICAgIGNvbnN0IGNka1Rvb2xraXQgPSBuZXcgQ2RrVG9vbGtpdCh7XG4gICAgICBjbG91ZEV4ZWN1dGFibGU6IG1vY2tDbG91ZEV4ZWN1dGFibGUsXG4gICAgICBjb25maWd1cmF0aW9uOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24sXG4gICAgICBzZGtQcm92aWRlcjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlcixcbiAgICAgIGRlcGxveW1lbnRzOiBuZXcgRGVwbG95bWVudHMoe1xuICAgICAgICBzZGtQcm92aWRlcjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlcixcbiAgICAgIH0pLFxuICAgIH0pO1xuXG4gICAgLy8gV0hFTlxuICAgIGF3YWl0IGNka1Rvb2xraXQuZGVwbG95KHtcbiAgICAgIHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbJ1Rlc3QtU3RhY2stQyddIH0sXG4gICAgICBob3Rzd2FwOiBIb3Rzd2FwTW9kZS5GVUxMX0RFUExPWU1FTlQsXG4gICAgfSk7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KGZsYXR0ZW4oc3RkZXJyTW9jay5tb2NrLmNhbGxzKSkudG9FcXVhbChcbiAgICAgIGV4cGVjdC5hcnJheUNvbnRhaW5pbmcoW1xuXG4gICAgICAgIGV4cGVjdC5zdHJpbmdDb250YWluaW5nKFxuICAgICAgICAgIFwiQm9vdHN0cmFwIHN0YWNrIHZlcnNpb24gJzUnIGlzIHJlcXVpcmVkLCBmb3VuZCB2ZXJzaW9uICcxJy4gVG8gZ2V0IHJpZCBvZiB0aGlzIGVycm9yLCBwbGVhc2UgdXBncmFkZSB0byBib290c3RyYXAgdmVyc2lvbiA+PSA1XCIsXG4gICAgICAgICksXG4gICAgICBdKSxcbiAgICApO1xuICAgIGV4cGVjdChtb2NrU1NNQ2xpZW50KS50b0hhdmVSZWNlaXZlZENvbW1hbmRXaXRoKEdldFBhcmFtZXRlckNvbW1hbmQsIHtcbiAgICAgIE5hbWU6ICcvYm9vdHN0cmFwL3BhcmFtZXRlcicsXG4gICAgfSk7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDMpO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQpLnRvSGF2ZUJlZW5OdGhDYWxsZWRXaXRoKFxuICAgICAgMSxcbiAgICAgIHtcbiAgICAgICAgYWNjb3VudDogJzEyMzQ1Njc4OTAxMicsXG4gICAgICAgIG5hbWU6ICdhd3M6Ly8xMjM0NTY3ODkwMTIvaGVyZScsXG4gICAgICAgIHJlZ2lvbjogJ2hlcmUnLFxuICAgICAgfSxcbiAgICAgIDAsXG4gICAgICB7XG4gICAgICAgIGFzc3VtZVJvbGVBcm46ICdibG9vcC1sb29rdXA6aGVyZToxMjM0NTY3ODkwMTInLFxuICAgICAgICBhc3N1bWVSb2xlRXh0ZXJuYWxJZDogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICApO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQpLnRvSGF2ZUJlZW5OdGhDYWxsZWRXaXRoKFxuICAgICAgMixcbiAgICAgIHtcbiAgICAgICAgYWNjb3VudDogJzEyMzQ1Njc4OTAxMicsXG4gICAgICAgIG5hbWU6ICdhd3M6Ly8xMjM0NTY3ODkwMTIvaGVyZScsXG4gICAgICAgIHJlZ2lvbjogJ2hlcmUnLFxuICAgICAgfSxcbiAgICAgIDAsXG4gICAgICB7XG4gICAgICAgIGFzc3VtZVJvbGVBcm46ICdibG9vcDpoZXJlOjEyMzQ1Njc4OTAxMicsXG4gICAgICAgIGFzc3VtZVJvbGVFeHRlcm5hbElkOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgICk7XG4gIH0pO1xuXG4gIHRlc3QoJ2ZhbGxiYWNrIHRvIGRlcGxveSByb2xlIGlmIGJvb3RzdHJhcCB2ZXJzaW9uIHBhcmFtZXRlciBub3QgZm91bmQnLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBtb2NrU1NNQ2xpZW50Lm9uKEdldFBhcmFtZXRlckNvbW1hbmQpLmNhbGxzRmFrZSgoKSA9PiB7XG4gICAgICBjb25zdCBlOiBhbnkgPSBuZXcgRXJyb3IoJ25vdCBmb3VuZCcpO1xuICAgICAgZS5jb2RlID0gZS5uYW1lID0gJ1BhcmFtZXRlck5vdEZvdW5kJztcbiAgICAgIHRocm93IGU7XG4gICAgfSk7XG5cbiAgICBjb25zdCBjZGtUb29sa2l0ID0gbmV3IENka1Rvb2xraXQoe1xuICAgICAgY2xvdWRFeGVjdXRhYmxlOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLFxuICAgICAgY29uZmlndXJhdGlvbjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLFxuICAgICAgc2RrUHJvdmlkZXI6IG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIsXG4gICAgICBkZXBsb3ltZW50czogbmV3IERlcGxveW1lbnRzKHtcbiAgICAgICAgc2RrUHJvdmlkZXI6IG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIsXG4gICAgICB9KSxcbiAgICB9KTtcblxuICAgIC8vIFdIRU5cbiAgICBhd2FpdCBjZGtUb29sa2l0LmRlcGxveSh7XG4gICAgICBzZWxlY3RvcjogeyBwYXR0ZXJuczogWydUZXN0LVN0YWNrLUMnXSB9LFxuICAgICAgaG90c3dhcDogSG90c3dhcE1vZGUuRlVMTF9ERVBMT1lNRU5ULFxuICAgIH0pO1xuXG4gICAgLy8gVEhFTlxuICAgIGV4cGVjdChmbGF0dGVuKHN0ZGVyck1vY2subW9jay5jYWxscykpLnRvRXF1YWwoXG4gICAgICBleHBlY3QuYXJyYXlDb250YWluaW5nKFtleHBlY3Quc3RyaW5nTWF0Y2hpbmcoL1NTTSBwYXJhbWV0ZXIuKm5vdCBmb3VuZC4vKV0pLFxuICAgICk7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDMpO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQpLnRvSGF2ZUJlZW5OdGhDYWxsZWRXaXRoKFxuICAgICAgMSxcbiAgICAgIHtcbiAgICAgICAgYWNjb3VudDogJzEyMzQ1Njc4OTAxMicsXG4gICAgICAgIG5hbWU6ICdhd3M6Ly8xMjM0NTY3ODkwMTIvaGVyZScsXG4gICAgICAgIHJlZ2lvbjogJ2hlcmUnLFxuICAgICAgfSxcbiAgICAgIDAsXG4gICAgICB7XG4gICAgICAgIGFzc3VtZVJvbGVBcm46ICdibG9vcC1sb29rdXA6aGVyZToxMjM0NTY3ODkwMTInLFxuICAgICAgICBhc3N1bWVSb2xlRXh0ZXJuYWxJZDogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICApO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQpLnRvSGF2ZUJlZW5OdGhDYWxsZWRXaXRoKFxuICAgICAgMixcbiAgICAgIHtcbiAgICAgICAgYWNjb3VudDogJzEyMzQ1Njc4OTAxMicsXG4gICAgICAgIG5hbWU6ICdhd3M6Ly8xMjM0NTY3ODkwMTIvaGVyZScsXG4gICAgICAgIHJlZ2lvbjogJ2hlcmUnLFxuICAgICAgfSxcbiAgICAgIDAsXG4gICAgICB7XG4gICAgICAgIGFzc3VtZVJvbGVBcm46ICdibG9vcDpoZXJlOjEyMzQ1Njc4OTAxMicsXG4gICAgICAgIGFzc3VtZVJvbGVFeHRlcm5hbElkOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgICk7XG4gIH0pO1xuXG4gIHRlc3QoJ2ZhbGxiYWNrIHRvIGRlcGxveSByb2xlIGlmIGZvckVudmlyb25tZW50IHRocm93cycsIGFzeW5jICgpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIC8vIHRocm93IGVycm9yIGZpcnN0IGZvciB0aGUgJ3ByZXBhcmVTZGtXaXRoTG9va3VwUm9sZUZvcicgY2FsbCBhbmQgc3VjY2VlZCBmb3IgdGhlIHJlc3RcbiAgICBtb2NrRm9yRW52aXJvbm1lbnQgPSBqZXN0LnNweU9uKHNka1Byb3ZpZGVyLCAnZm9yRW52aXJvbm1lbnQnKS5tb2NrSW1wbGVtZW50YXRpb25PbmNlKCgpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlRXJyb3JUaGF0R2V0c1Rocm93bicpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgY2RrVG9vbGtpdCA9IG5ldyBDZGtUb29sa2l0KHtcbiAgICAgIGNsb3VkRXhlY3V0YWJsZTogbW9ja0Nsb3VkRXhlY3V0YWJsZSxcbiAgICAgIGNvbmZpZ3VyYXRpb246IG1vY2tDbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbixcbiAgICAgIHNka1Byb3ZpZGVyOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLFxuICAgICAgZGVwbG95bWVudHM6IG5ldyBEZXBsb3ltZW50cyh7XG4gICAgICAgIHNka1Byb3ZpZGVyOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLFxuICAgICAgfSksXG4gICAgfSk7XG5cbiAgICAvLyBXSEVOXG4gICAgYXdhaXQgY2RrVG9vbGtpdC5kZXBsb3koe1xuICAgICAgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnVGVzdC1TdGFjay1DJ10gfSxcbiAgICAgIGhvdHN3YXA6IEhvdHN3YXBNb2RlLkZVTExfREVQTE9ZTUVOVCxcbiAgICB9KTtcblxuICAgIC8vIFRIRU5cbiAgICBleHBlY3QobW9ja1NTTUNsaWVudCkubm90LnRvSGF2ZVJlY2VpdmVkQW55Q29tbWFuZCgpO1xuICAgIGV4cGVjdChmbGF0dGVuKHN0ZGVyck1vY2subW9jay5jYWxscykpLnRvRXF1YWwoXG4gICAgICBleHBlY3QuYXJyYXlDb250YWluaW5nKFtleHBlY3Quc3RyaW5nTWF0Y2hpbmcoL1RoZUVycm9yVGhhdEdldHNUaHJvd24vKV0pLFxuICAgICk7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDMpO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQpLnRvSGF2ZUJlZW5OdGhDYWxsZWRXaXRoKFxuICAgICAgMSxcbiAgICAgIHtcbiAgICAgICAgYWNjb3VudDogJzEyMzQ1Njc4OTAxMicsXG4gICAgICAgIG5hbWU6ICdhd3M6Ly8xMjM0NTY3ODkwMTIvaGVyZScsXG4gICAgICAgIHJlZ2lvbjogJ2hlcmUnLFxuICAgICAgfSxcbiAgICAgIDAsXG4gICAgICB7XG4gICAgICAgIGFzc3VtZVJvbGVBcm46ICdibG9vcC1sb29rdXA6aGVyZToxMjM0NTY3ODkwMTInLFxuICAgICAgICBhc3N1bWVSb2xlRXh0ZXJuYWxJZDogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICApO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQpLnRvSGF2ZUJlZW5OdGhDYWxsZWRXaXRoKFxuICAgICAgMixcbiAgICAgIHtcbiAgICAgICAgYWNjb3VudDogJzEyMzQ1Njc4OTAxMicsXG4gICAgICAgIG5hbWU6ICdhd3M6Ly8xMjM0NTY3ODkwMTIvaGVyZScsXG4gICAgICAgIHJlZ2lvbjogJ2hlcmUnLFxuICAgICAgfSxcbiAgICAgIDAsXG4gICAgICB7XG4gICAgICAgIGFzc3VtZVJvbGVBcm46ICdibG9vcDpoZXJlOjEyMzQ1Njc4OTAxMicsXG4gICAgICAgIGFzc3VtZVJvbGVFeHRlcm5hbElkOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgICk7XG4gIH0pO1xuXG4gIHRlc3QoJ2RvbnQgbG9va3VwIGJvb3RzdHJhcCB2ZXJzaW9uIHBhcmFtZXRlciBpZiBkZWZhdWx0IGNyZWRlbnRpYWxzIGFyZSB1c2VkJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgbW9ja0ZvckVudmlyb25tZW50ID0gamVzdC5mbigpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG4gICAgICByZXR1cm4geyBzZGs6IG1vY2tTZGssIGRpZEFzc3VtZVJvbGU6IGZhbHNlIH07XG4gICAgfSk7XG4gICAgbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlci5mb3JFbnZpcm9ubWVudCA9IG1vY2tGb3JFbnZpcm9ubWVudDtcbiAgICBjb25zdCBjZGtUb29sa2l0ID0gbmV3IENka1Rvb2xraXQoe1xuICAgICAgY2xvdWRFeGVjdXRhYmxlOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLFxuICAgICAgY29uZmlndXJhdGlvbjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLFxuICAgICAgc2RrUHJvdmlkZXI6IG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIsXG4gICAgICBkZXBsb3ltZW50czogbmV3IERlcGxveW1lbnRzKHtcbiAgICAgICAgc2RrUHJvdmlkZXI6IG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIsXG4gICAgICB9KSxcbiAgICB9KTtcblxuICAgIC8vIFdIRU5cbiAgICBhd2FpdCBjZGtUb29sa2l0LmRlcGxveSh7XG4gICAgICBzZWxlY3RvcjogeyBwYXR0ZXJuczogWydUZXN0LVN0YWNrLUMnXSB9LFxuICAgICAgaG90c3dhcDogSG90c3dhcE1vZGUuRlVMTF9ERVBMT1lNRU5ULFxuICAgIH0pO1xuXG4gICAgLy8gVEhFTlxuICAgIGV4cGVjdChmbGF0dGVuKHN0ZGVyck1vY2subW9jay5jYWxscykpLnRvRXF1YWwoXG4gICAgICBleHBlY3QuYXJyYXlDb250YWluaW5nKFtcbiAgICAgICAgZXhwZWN0LnN0cmluZ01hdGNoaW5nKC9Mb29rdXAgcm9sZS4qd2FzIG5vdCBhc3N1bWVkLiBQcm9jZWVkaW5nIHdpdGggZGVmYXVsdCBjcmVkZW50aWFscy4vKSxcbiAgICAgIF0pLFxuICAgICk7XG4gICAgZXhwZWN0KG1vY2tTU01DbGllbnQpLm5vdC50b0hhdmVSZWNlaXZlZEFueUNvbW1hbmQoKTtcbiAgICBleHBlY3QobW9ja0ZvckVudmlyb25tZW50KS50b0hhdmVCZWVuTnRoQ2FsbGVkV2l0aChcbiAgICAgIDEsXG4gICAgICB7XG4gICAgICAgIGFjY291bnQ6ICcxMjM0NTY3ODkwMTInLFxuICAgICAgICBuYW1lOiAnYXdzOi8vMTIzNDU2Nzg5MDEyL2hlcmUnLFxuICAgICAgICByZWdpb246ICdoZXJlJyxcbiAgICAgIH0sXG4gICAgICBNb2RlLkZvclJlYWRpbmcsXG4gICAgICB7XG4gICAgICAgIGFzc3VtZVJvbGVBcm46ICdibG9vcC1sb29rdXA6aGVyZToxMjM0NTY3ODkwMTInLFxuICAgICAgICBhc3N1bWVSb2xlRXh0ZXJuYWxJZDogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICApO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQpLnRvSGF2ZUJlZW5OdGhDYWxsZWRXaXRoKFxuICAgICAgMixcbiAgICAgIHtcbiAgICAgICAgYWNjb3VudDogJzEyMzQ1Njc4OTAxMicsXG4gICAgICAgIG5hbWU6ICdhd3M6Ly8xMjM0NTY3ODkwMTIvaGVyZScsXG4gICAgICAgIHJlZ2lvbjogJ2hlcmUnLFxuICAgICAgfSxcbiAgICAgIE1vZGUuRm9yV3JpdGluZyxcbiAgICAgIHtcbiAgICAgICAgYXNzdW1lUm9sZUFybjogJ2Jsb29wOmhlcmU6MTIzNDU2Nzg5MDEyJyxcbiAgICAgICAgYXNzdW1lUm9sZUV4dGVybmFsSWQ6IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgKTtcbiAgfSk7XG5cbiAgdGVzdCgnZG8gbm90IHByaW50IHdhcm5pbmdzIGlmIGxvb2t1cCByb2xlIG5vdCBwcm92aWRlZCBpbiBzdGFjayBhcnRpZmFjdCcsIGFzeW5jICgpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IGNka1Rvb2xraXQgPSBuZXcgQ2RrVG9vbGtpdCh7XG4gICAgICBjbG91ZEV4ZWN1dGFibGU6IG1vY2tDbG91ZEV4ZWN1dGFibGUsXG4gICAgICBjb25maWd1cmF0aW9uOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24sXG4gICAgICBzZGtQcm92aWRlcjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlcixcbiAgICAgIGRlcGxveW1lbnRzOiBuZXcgRGVwbG95bWVudHMoe1xuICAgICAgICBzZGtQcm92aWRlcjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlcixcbiAgICAgIH0pLFxuICAgIH0pO1xuXG4gICAgLy8gV0hFTlxuICAgIGF3YWl0IGNka1Rvb2xraXQuZGVwbG95KHtcbiAgICAgIHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbJ1Rlc3QtU3RhY2stQSddIH0sXG4gICAgICBob3Rzd2FwOiBIb3Rzd2FwTW9kZS5GVUxMX0RFUExPWU1FTlQsXG4gICAgfSk7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KGZsYXR0ZW4oc3RkZXJyTW9jay5tb2NrLmNhbGxzKSkubm90LnRvRXF1YWwoXG4gICAgICBleHBlY3QuYXJyYXlDb250YWluaW5nKFtcbiAgICAgICAgZXhwZWN0LnN0cmluZ01hdGNoaW5nKC9Db3VsZCBub3QgYXNzdW1lLyksXG4gICAgICAgIGV4cGVjdC5zdHJpbmdNYXRjaGluZygvcGxlYXNlIHVwZ3JhZGUgdG8gYm9vdHN0cmFwIHZlcnNpb24vKSxcbiAgICAgIF0pLFxuICAgICk7XG4gICAgZXhwZWN0KG1vY2tTU01DbGllbnQpLm5vdC50b0hhdmVSZWNlaXZlZEFueUNvbW1hbmQoKTtcbiAgICBleHBlY3QobW9ja0ZvckVudmlyb25tZW50KS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMik7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudCkudG9IYXZlQmVlbk50aENhbGxlZFdpdGgoXG4gICAgICAxLFxuICAgICAge1xuICAgICAgICBhY2NvdW50OiAnMTIzNDU2Nzg5MDEyJyxcbiAgICAgICAgbmFtZTogJ2F3czovLzEyMzQ1Njc4OTAxMi9oZXJlJyxcbiAgICAgICAgcmVnaW9uOiAnaGVyZScsXG4gICAgICB9LFxuICAgICAgMCxcbiAgICAgIHtcbiAgICAgICAgYXNzdW1lUm9sZUFybjogdW5kZWZpbmVkLFxuICAgICAgICBhc3N1bWVSb2xlRXh0ZXJuYWxJZDogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICApO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQpLnRvSGF2ZUJlZW5OdGhDYWxsZWRXaXRoKFxuICAgICAgMixcbiAgICAgIHtcbiAgICAgICAgYWNjb3VudDogJzEyMzQ1Njc4OTAxMicsXG4gICAgICAgIG5hbWU6ICdhd3M6Ly8xMjM0NTY3ODkwMTIvaGVyZScsXG4gICAgICAgIHJlZ2lvbjogJ2hlcmUnLFxuICAgICAgfSxcbiAgICAgIDEsXG4gICAgICB7XG4gICAgICAgIGFzc3VtZVJvbGVBcm46ICdibG9vcDpoZXJlOjEyMzQ1Njc4OTAxMicsXG4gICAgICAgIGFzc3VtZVJvbGVFeHRlcm5hbElkOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgICk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdib290c3RyYXAnLCAoKSA9PiB7XG4gIHRlc3QoJ2FjY2VwdHMgcXVhbGlmaWVyIGZyb20gY29udGV4dCcsIGFzeW5jICgpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG4gICAgY29uc3QgY29uZmlndXJhdGlvbiA9IG5ldyBDb25maWd1cmF0aW9uKCk7XG4gICAgY29uZmlndXJhdGlvbi5jb250ZXh0LnNldCgnQGF3cy1jZGsvY29yZTpib290c3RyYXBRdWFsaWZpZXInLCAnYWJjZGUnKTtcblxuICAgIC8vIFdIRU5cbiAgICBhd2FpdCB0b29sa2l0LmJvb3RzdHJhcChbJ2F3czovLzU2Nzg5L3NvdXRoLXBvbGUnXSwge1xuICAgICAgc291cmNlOiBkZWZhdWx0Qm9vdHN0cmFwU291cmNlLFxuICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICBxdWFsaWZpZXI6IGNvbmZpZ3VyYXRpb24uY29udGV4dC5nZXQoJ0Bhd3MtY2RrL2NvcmU6Ym9vdHN0cmFwUXVhbGlmaWVyJyksXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gVEhFTlxuICAgIGV4cGVjdChib290c3RyYXBFbnZpcm9ubWVudE1vY2spLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKGV4cGVjdC5hbnl0aGluZygpLCBleHBlY3QuYW55dGhpbmcoKSwge1xuICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICBxdWFsaWZpZXI6ICdhYmNkZScsXG4gICAgICB9LFxuICAgICAgc291cmNlOiBkZWZhdWx0Qm9vdHN0cmFwU291cmNlLFxuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnZGVwbG95JywgKCkgPT4ge1xuICB0ZXN0KCdmYWlscyB3aGVuIG5vIHZhbGlkIHN0YWNrIG5hbWVzIGFyZSBnaXZlbicsIGFzeW5jICgpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICAvLyBXSEVOXG4gICAgYXdhaXQgZXhwZWN0KCgpID0+XG4gICAgICB0b29sa2l0LmRlcGxveSh7XG4gICAgICAgIHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbJ1Rlc3QtU3RhY2stRCddIH0sXG4gICAgICAgIGhvdHN3YXA6IEhvdHN3YXBNb2RlLkZVTExfREVQTE9ZTUVOVCxcbiAgICAgIH0pLFxuICAgICkucmVqZWN0cy50b1Rocm93KCdObyBzdGFja3MgbWF0Y2ggdGhlIG5hbWUocykgVGVzdC1TdGFjay1EJyk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd3aXRoIGhvdHN3YXAgZGVwbG95bWVudCcsICgpID0+IHtcbiAgICB0ZXN0KFwicGFzc2VzIHRocm91Z2ggdGhlICdob3Rzd2FwJyBvcHRpb24gdG8gQ2xvdWRGb3JtYXRpb25EZXBsb3ltZW50cy5kZXBsb3lTdGFjaygpXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICBjb25zdCBtb2NrQ2ZuRGVwbG95bWVudHMgPSBpbnN0YW5jZU1vY2tGcm9tKERlcGxveW1lbnRzKTtcbiAgICAgIG1vY2tDZm5EZXBsb3ltZW50cy5kZXBsb3lTdGFjay5tb2NrUmV0dXJuVmFsdWUoXG4gICAgICAgIFByb21pc2UucmVzb2x2ZSh7XG4gICAgICAgICAgdHlwZTogJ2RpZC1kZXBsb3ktc3RhY2snLFxuICAgICAgICAgIG5vT3A6IGZhbHNlLFxuICAgICAgICAgIG91dHB1dHM6IHt9LFxuICAgICAgICAgIHN0YWNrQXJuOiAnc3RhY2tBcm4nLFxuICAgICAgICAgIHN0YWNrQXJ0aWZhY3Q6IGluc3RhbmNlTW9ja0Zyb20oY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0KSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgICAgY29uc3QgY2RrVG9vbGtpdCA9IG5ldyBDZGtUb29sa2l0KHtcbiAgICAgICAgY2xvdWRFeGVjdXRhYmxlLFxuICAgICAgICBjb25maWd1cmF0aW9uOiBjbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbixcbiAgICAgICAgc2RrUHJvdmlkZXI6IGNsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlcixcbiAgICAgICAgZGVwbG95bWVudHM6IG1vY2tDZm5EZXBsb3ltZW50cyxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBXSEVOXG4gICAgICBhd2FpdCBjZGtUb29sa2l0LmRlcGxveSh7XG4gICAgICAgIHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbJ1Rlc3QtU3RhY2stQS1EaXNwbGF5LU5hbWUnXSB9LFxuICAgICAgICByZXF1aXJlQXBwcm92YWw6IFJlcXVpcmVBcHByb3ZhbC5OZXZlcixcbiAgICAgICAgaG90c3dhcDogSG90c3dhcE1vZGUuRkFMTF9CQUNLLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFRIRU5cbiAgICAgIGV4cGVjdChtb2NrQ2ZuRGVwbG95bWVudHMuZGVwbG95U3RhY2spLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFxuICAgICAgICBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgICAgaG90c3dhcDogSG90c3dhcE1vZGUuRkFMTF9CQUNLLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdtYWtlcyBjb3JyZWN0IENsb3VkRm9ybWF0aW9uIGNhbGxzJywgKCkgPT4ge1xuICAgIHRlc3QoJ3dpdGhvdXQgb3B0aW9ucycsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgICAvLyBXSEVOXG4gICAgICBhd2FpdCB0b29sa2l0LmRlcGxveSh7XG4gICAgICAgIHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbJ1Rlc3QtU3RhY2stQScsICdUZXN0LVN0YWNrLUInXSB9LFxuICAgICAgICBob3Rzd2FwOiBIb3Rzd2FwTW9kZS5GVUxMX0RFUExPWU1FTlQsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3dpdGggc3RhY2tzIGFsbCBzdGFja3Mgc3BlY2lmaWVkIGFzIGRvdWJsZSB3aWxkY2FyZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgICAvLyBXSEVOXG4gICAgICBhd2FpdCB0b29sa2l0LmRlcGxveSh7XG4gICAgICAgIHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbJyoqJ10gfSxcbiAgICAgICAgaG90c3dhcDogSG90c3dhcE1vZGUuRlVMTF9ERVBMT1lNRU5ULFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCd3aXRoIG9uZSBzdGFjayBzcGVjaWZpZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgICAgLy8gV0hFTlxuICAgICAgYXdhaXQgdG9vbGtpdC5kZXBsb3koe1xuICAgICAgICBzZWxlY3RvcjogeyBwYXR0ZXJuczogWydUZXN0LVN0YWNrLUEtRGlzcGxheS1OYW1lJ10gfSxcbiAgICAgICAgaG90c3dhcDogSG90c3dhcE1vZGUuRlVMTF9ERVBMT1lNRU5ULFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCd3aXRoIHN0YWNrcyBhbGwgc3RhY2tzIHNwZWNpZmllZCBhcyB3aWxkY2FyZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgICAvLyBXSEVOXG4gICAgICBhd2FpdCB0b29sa2l0LmRlcGxveSh7XG4gICAgICAgIHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbJyonXSB9LFxuICAgICAgICBob3Rzd2FwOiBIb3Rzd2FwTW9kZS5GVUxMX0RFUExPWU1FTlQsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdzbnMgbm90aWZpY2F0aW9uIGFybnMnLCAoKSA9PiB7XG4gICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgY2xvdWRFeGVjdXRhYmxlID0gbmV3IE1vY2tDbG91ZEV4ZWN1dGFibGUoe1xuICAgICAgICAgIHN0YWNrczogW1xuICAgICAgICAgICAgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQSxcbiAgICAgICAgICAgIE1vY2tTdGFjay5NT0NLX1NUQUNLX0IsXG4gICAgICAgICAgICBNb2NrU3RhY2suTU9DS19TVEFDS19XSVRIX05PVElGSUNBVElPTl9BUk5TLFxuICAgICAgICAgICAgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfV0lUSF9CQURfTk9USUZJQ0FUSU9OX0FSTlMsXG4gICAgICAgICAgXSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgdGVzdCgnd2l0aCBzbnMgbm90aWZpY2F0aW9uIGFybnMgYXMgb3B0aW9ucycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgLy8gR0lWRU5cbiAgICAgICAgY29uc3Qgbm90aWZpY2F0aW9uQXJucyA9IFtcbiAgICAgICAgICAnYXJuOmF3czpzbnM6dXMtZWFzdC0yOjQ0NDQ1NTU1NjY2NjpNeVRvcGljJyxcbiAgICAgICAgICAnYXJuOmF3czpzbnM6ZXUtd2VzdC0xOjExMTE1NTU1NjY2NjpteS1ncmVhdC10b3BpYycsXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IHRvb2xraXQgPSBuZXcgQ2RrVG9vbGtpdCh7XG4gICAgICAgICAgY2xvdWRFeGVjdXRhYmxlLFxuICAgICAgICAgIGNvbmZpZ3VyYXRpb246IGNsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLFxuICAgICAgICAgIHNka1Byb3ZpZGVyOiBjbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIsXG4gICAgICAgICAgZGVwbG95bWVudHM6IG5ldyBGYWtlQ2xvdWRGb3JtYXRpb24oXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICdUZXN0LVN0YWNrLUEnOiB7IEZvbzogJ0JhcicgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBub3RpZmljYXRpb25Bcm5zLFxuICAgICAgICAgICksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFdIRU5cbiAgICAgICAgYXdhaXQgdG9vbGtpdC5kZXBsb3koe1xuICAgICAgICAgIC8vIFN0YWNrcyBzaG91bGQgYmUgc2VsZWN0ZWQgYnkgdGhlaXIgaGllcmFyY2hpY2FsIElELCB3aGljaCBpcyB0aGVpciBkaXNwbGF5TmFtZSwgbm90IGJ5IHRoZSBzdGFjayBJRC5cbiAgICAgICAgICBzZWxlY3RvcjogeyBwYXR0ZXJuczogWydUZXN0LVN0YWNrLUEtRGlzcGxheS1OYW1lJ10gfSxcbiAgICAgICAgICBub3RpZmljYXRpb25Bcm5zLFxuICAgICAgICAgIGhvdHN3YXA6IEhvdHN3YXBNb2RlLkZVTExfREVQTE9ZTUVOVCxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgdGVzdCgnZmFpbCB3aXRoIGluY29ycmVjdCBzbnMgbm90aWZpY2F0aW9uIGFybnMgYXMgb3B0aW9ucycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgLy8gR0lWRU5cbiAgICAgICAgY29uc3Qgbm90aWZpY2F0aW9uQXJucyA9IFsnYXJuOjo6Y2ZuLW15LWNvb2wtdG9waWMnXTtcbiAgICAgICAgY29uc3QgdG9vbGtpdCA9IG5ldyBDZGtUb29sa2l0KHtcbiAgICAgICAgICBjbG91ZEV4ZWN1dGFibGUsXG4gICAgICAgICAgY29uZmlndXJhdGlvbjogY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24sXG4gICAgICAgICAgc2RrUHJvdmlkZXI6IGNsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlcixcbiAgICAgICAgICBkZXBsb3ltZW50czogbmV3IEZha2VDbG91ZEZvcm1hdGlvbihcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgJ1Rlc3QtU3RhY2stQSc6IHsgRm9vOiAnQmFyJyB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5vdGlmaWNhdGlvbkFybnMsXG4gICAgICAgICAgKSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gV0hFTlxuICAgICAgICBhd2FpdCBleHBlY3QoKCkgPT5cbiAgICAgICAgICB0b29sa2l0LmRlcGxveSh7XG4gICAgICAgICAgICAvLyBTdGFja3Mgc2hvdWxkIGJlIHNlbGVjdGVkIGJ5IHRoZWlyIGhpZXJhcmNoaWNhbCBJRCwgd2hpY2ggaXMgdGhlaXIgZGlzcGxheU5hbWUsIG5vdCBieSB0aGUgc3RhY2sgSUQuXG4gICAgICAgICAgICBzZWxlY3RvcjogeyBwYXR0ZXJuczogWydUZXN0LVN0YWNrLUEtRGlzcGxheS1OYW1lJ10gfSxcbiAgICAgICAgICAgIG5vdGlmaWNhdGlvbkFybnMsXG4gICAgICAgICAgICBob3Rzd2FwOiBIb3Rzd2FwTW9kZS5GVUxMX0RFUExPWU1FTlQsXG4gICAgICAgICAgfSksXG4gICAgICAgICkucmVqZWN0cy50b1Rocm93KCdOb3RpZmljYXRpb24gYXJuIGFybjo6OmNmbi1teS1jb29sLXRvcGljIGlzIG5vdCBhIHZhbGlkIGFybiBmb3IgYW4gU05TIHRvcGljJyk7XG4gICAgICB9KTtcblxuICAgICAgdGVzdCgnd2l0aCBzbnMgbm90aWZpY2F0aW9uIGFybnMgaW4gdGhlIGV4ZWN1dGFibGUnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIC8vIEdJVkVOXG4gICAgICAgIGNvbnN0IGV4cGVjdGVkTm90aWZpY2F0aW9uQXJucyA9IFsnYXJuOmF3czpzbnM6YmVybXVkYS10cmlhbmdsZS0xMzM3OjEyMzQ1Njc4OTAxMjpNeVRvcGljJ107XG4gICAgICAgIGNvbnN0IHRvb2xraXQgPSBuZXcgQ2RrVG9vbGtpdCh7XG4gICAgICAgICAgY2xvdWRFeGVjdXRhYmxlLFxuICAgICAgICAgIGNvbmZpZ3VyYXRpb246IGNsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLFxuICAgICAgICAgIHNka1Byb3ZpZGVyOiBjbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIsXG4gICAgICAgICAgZGVwbG95bWVudHM6IG5ldyBGYWtlQ2xvdWRGb3JtYXRpb24oXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICdUZXN0LVN0YWNrLU5vdGlmaWNhdGlvbi1Bcm5zJzogeyBGb286ICdCYXInIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXhwZWN0ZWROb3RpZmljYXRpb25Bcm5zLFxuICAgICAgICAgICksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFdIRU5cbiAgICAgICAgYXdhaXQgdG9vbGtpdC5kZXBsb3koe1xuICAgICAgICAgIHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbJ1Rlc3QtU3RhY2stTm90aWZpY2F0aW9uLUFybnMnXSB9LFxuICAgICAgICAgIGhvdHN3YXA6IEhvdHN3YXBNb2RlLkZVTExfREVQTE9ZTUVOVCxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgdGVzdCgnZmFpbCB3aXRoIGluY29ycmVjdCBzbnMgbm90aWZpY2F0aW9uIGFybnMgaW4gdGhlIGV4ZWN1dGFibGUnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIC8vIEdJVkVOXG4gICAgICAgIGNvbnN0IHRvb2xraXQgPSBuZXcgQ2RrVG9vbGtpdCh7XG4gICAgICAgICAgY2xvdWRFeGVjdXRhYmxlLFxuICAgICAgICAgIGNvbmZpZ3VyYXRpb246IGNsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLFxuICAgICAgICAgIHNka1Byb3ZpZGVyOiBjbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIsXG4gICAgICAgICAgZGVwbG95bWVudHM6IG5ldyBGYWtlQ2xvdWRGb3JtYXRpb24oe1xuICAgICAgICAgICAgJ1Rlc3QtU3RhY2stQmFkLU5vdGlmaWNhdGlvbi1Bcm5zJzogeyBGb286ICdCYXInIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFdIRU5cbiAgICAgICAgYXdhaXQgZXhwZWN0KCgpID0+XG4gICAgICAgICAgdG9vbGtpdC5kZXBsb3koe1xuICAgICAgICAgICAgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnVGVzdC1TdGFjay1CYWQtTm90aWZpY2F0aW9uLUFybnMnXSB9LFxuICAgICAgICAgICAgaG90c3dhcDogSG90c3dhcE1vZGUuRlVMTF9ERVBMT1lNRU5ULFxuICAgICAgICAgIH0pLFxuICAgICAgICApLnJlamVjdHMudG9UaHJvdygnTm90aWZpY2F0aW9uIGFybiBhcm46MTMzNzoxMjM0NTY3ODkwMTI6c25zOmJhZCBpcyBub3QgYSB2YWxpZCBhcm4gZm9yIGFuIFNOUyB0b3BpYycpO1xuICAgICAgfSk7XG5cbiAgICAgIHRlc3QoJ3dpdGggc25zIG5vdGlmaWNhdGlvbiBhcm5zIGluIHRoZSBleGVjdXRhYmxlIGFuZCBhcyBvcHRpb25zJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAvLyBHSVZFTlxuICAgICAgICBjb25zdCBub3RpZmljYXRpb25Bcm5zID0gW1xuICAgICAgICAgICdhcm46YXdzOnNuczp1cy1lYXN0LTI6NDQ0NDU1NTU2NjY2Ok15VG9waWMnLFxuICAgICAgICAgICdhcm46YXdzOnNuczpldS13ZXN0LTE6MTExMTU1NTU2NjY2Om15LWdyZWF0LXRvcGljJyxcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBleHBlY3RlZE5vdGlmaWNhdGlvbkFybnMgPSBub3RpZmljYXRpb25Bcm5zLmNvbmNhdChbXG4gICAgICAgICAgJ2Fybjphd3M6c25zOmJlcm11ZGEtdHJpYW5nbGUtMTMzNzoxMjM0NTY3ODkwMTI6TXlUb3BpYycsXG4gICAgICAgIF0pO1xuICAgICAgICBjb25zdCB0b29sa2l0ID0gbmV3IENka1Rvb2xraXQoe1xuICAgICAgICAgIGNsb3VkRXhlY3V0YWJsZSxcbiAgICAgICAgICBjb25maWd1cmF0aW9uOiBjbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbixcbiAgICAgICAgICBzZGtQcm92aWRlcjogY2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLFxuICAgICAgICAgIGRlcGxveW1lbnRzOiBuZXcgRmFrZUNsb3VkRm9ybWF0aW9uKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAnVGVzdC1TdGFjay1Ob3RpZmljYXRpb24tQXJucyc6IHsgRm9vOiAnQmFyJyB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV4cGVjdGVkTm90aWZpY2F0aW9uQXJucyxcbiAgICAgICAgICApLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBXSEVOXG4gICAgICAgIGF3YWl0IHRvb2xraXQuZGVwbG95KHtcbiAgICAgICAgICBzZWxlY3RvcjogeyBwYXR0ZXJuczogWydUZXN0LVN0YWNrLU5vdGlmaWNhdGlvbi1Bcm5zJ10gfSxcbiAgICAgICAgICBub3RpZmljYXRpb25Bcm5zLFxuICAgICAgICAgIGhvdHN3YXA6IEhvdHN3YXBNb2RlLkZVTExfREVQTE9ZTUVOVCxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgdGVzdCgnZmFpbCB3aXRoIGluY29ycmVjdCBzbnMgbm90aWZpY2F0aW9uIGFybnMgaW4gdGhlIGV4ZWN1dGFibGUgYW5kIGluY29ycmVjdCBzbnMgbm90aWZpY2F0aW9uIGFybnMgYXMgb3B0aW9ucycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgLy8gR0lWRU5cbiAgICAgICAgY29uc3Qgbm90aWZpY2F0aW9uQXJucyA9IFsnYXJuOjo6Y2ZuLW15LWNvb2wtdG9waWMnXTtcbiAgICAgICAgY29uc3QgdG9vbGtpdCA9IG5ldyBDZGtUb29sa2l0KHtcbiAgICAgICAgICBjbG91ZEV4ZWN1dGFibGUsXG4gICAgICAgICAgY29uZmlndXJhdGlvbjogY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24sXG4gICAgICAgICAgc2RrUHJvdmlkZXI6IGNsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlcixcbiAgICAgICAgICBkZXBsb3ltZW50czogbmV3IEZha2VDbG91ZEZvcm1hdGlvbihcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgJ1Rlc3QtU3RhY2stQmFkLU5vdGlmaWNhdGlvbi1Bcm5zJzogeyBGb286ICdCYXInIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbm90aWZpY2F0aW9uQXJucyxcbiAgICAgICAgICApLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBXSEVOXG4gICAgICAgIGF3YWl0IGV4cGVjdCgoKSA9PlxuICAgICAgICAgIHRvb2xraXQuZGVwbG95KHtcbiAgICAgICAgICAgIHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbJ1Rlc3QtU3RhY2stQmFkLU5vdGlmaWNhdGlvbi1Bcm5zJ10gfSxcbiAgICAgICAgICAgIG5vdGlmaWNhdGlvbkFybnMsXG4gICAgICAgICAgICBob3Rzd2FwOiBIb3Rzd2FwTW9kZS5GVUxMX0RFUExPWU1FTlQsXG4gICAgICAgICAgfSksXG4gICAgICAgICkucmVqZWN0cy50b1Rocm93KCdOb3RpZmljYXRpb24gYXJuIGFybjo6OmNmbi1teS1jb29sLXRvcGljIGlzIG5vdCBhIHZhbGlkIGFybiBmb3IgYW4gU05TIHRvcGljJyk7XG4gICAgICB9KTtcblxuICAgICAgdGVzdCgnZmFpbCB3aXRoIGluY29ycmVjdCBzbnMgbm90aWZpY2F0aW9uIGFybnMgaW4gdGhlIGV4ZWN1dGFibGUgYW5kIGNvcnJlY3Qgc25zIG5vdGlmaWNhdGlvbiBhcm5zIGFzIG9wdGlvbnMnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIC8vIEdJVkVOXG4gICAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbkFybnMgPSBbJ2Fybjphd3M6c25zOmJlcm11ZGEtdHJpYW5nbGUtMTMzNzoxMjM0NTY3ODkwMTI6TXlUb3BpYyddO1xuICAgICAgICBjb25zdCB0b29sa2l0ID0gbmV3IENka1Rvb2xraXQoe1xuICAgICAgICAgIGNsb3VkRXhlY3V0YWJsZSxcbiAgICAgICAgICBjb25maWd1cmF0aW9uOiBjbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbixcbiAgICAgICAgICBzZGtQcm92aWRlcjogY2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLFxuICAgICAgICAgIGRlcGxveW1lbnRzOiBuZXcgRmFrZUNsb3VkRm9ybWF0aW9uKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAnVGVzdC1TdGFjay1CYWQtTm90aWZpY2F0aW9uLUFybnMnOiB7IEZvbzogJ0JhcicgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBub3RpZmljYXRpb25Bcm5zLFxuICAgICAgICAgICksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFdIRU5cbiAgICAgICAgYXdhaXQgZXhwZWN0KCgpID0+XG4gICAgICAgICAgdG9vbGtpdC5kZXBsb3koe1xuICAgICAgICAgICAgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnVGVzdC1TdGFjay1CYWQtTm90aWZpY2F0aW9uLUFybnMnXSB9LFxuICAgICAgICAgICAgbm90aWZpY2F0aW9uQXJucyxcbiAgICAgICAgICAgIGhvdHN3YXA6IEhvdHN3YXBNb2RlLkZVTExfREVQTE9ZTUVOVCxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKS5yZWplY3RzLnRvVGhyb3coJ05vdGlmaWNhdGlvbiBhcm4gYXJuOjEzMzc6MTIzNDU2Nzg5MDEyOnNuczpiYWQgaXMgbm90IGEgdmFsaWQgYXJuIGZvciBhbiBTTlMgdG9waWMnKTtcbiAgICAgIH0pO1xuXG4gICAgICB0ZXN0KCdmYWlsIHdpdGggY29ycmVjdCBzbnMgbm90aWZpY2F0aW9uIGFybnMgaW4gdGhlIGV4ZWN1dGFibGUgYW5kIGluY29ycmVjdCBzbnMgbm90aWZpY2F0aW9uIGFybnMgYXMgb3B0aW9ucycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgLy8gR0lWRU5cbiAgICAgICAgY29uc3Qgbm90aWZpY2F0aW9uQXJucyA9IFsnYXJuOjo6Y2ZuLW15LWNvb2wtdG9waWMnXTtcbiAgICAgICAgY29uc3QgdG9vbGtpdCA9IG5ldyBDZGtUb29sa2l0KHtcbiAgICAgICAgICBjbG91ZEV4ZWN1dGFibGUsXG4gICAgICAgICAgY29uZmlndXJhdGlvbjogY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24sXG4gICAgICAgICAgc2RrUHJvdmlkZXI6IGNsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlcixcbiAgICAgICAgICBkZXBsb3ltZW50czogbmV3IEZha2VDbG91ZEZvcm1hdGlvbihcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgJ1Rlc3QtU3RhY2stTm90aWZpY2F0aW9uLUFybnMnOiB7IEZvbzogJ0JhcicgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBub3RpZmljYXRpb25Bcm5zLFxuICAgICAgICAgICksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFdIRU5cbiAgICAgICAgYXdhaXQgZXhwZWN0KCgpID0+XG4gICAgICAgICAgdG9vbGtpdC5kZXBsb3koe1xuICAgICAgICAgICAgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnVGVzdC1TdGFjay1Ob3RpZmljYXRpb24tQXJucyddIH0sXG4gICAgICAgICAgICBub3RpZmljYXRpb25Bcm5zLFxuICAgICAgICAgICAgaG90c3dhcDogSG90c3dhcE1vZGUuRlVMTF9ERVBMT1lNRU5ULFxuICAgICAgICAgIH0pLFxuICAgICAgICApLnJlamVjdHMudG9UaHJvdygnTm90aWZpY2F0aW9uIGFybiBhcm46OjpjZm4tbXktY29vbC10b3BpYyBpcyBub3QgYSB2YWxpZCBhcm4gZm9yIGFuIFNOUyB0b3BpYycpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2dsb2JsZXNzIGJvb3RzdHJhcCB1c2VzIGVudmlyb25tZW50IHdpdGhvdXQgcXVlc3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgLy8gV0hFTlxuICAgIGF3YWl0IHRvb2xraXQuYm9vdHN0cmFwKFsnYXdzOi8vNTY3ODkvc291dGgtcG9sZSddLCB7XG4gICAgICBzb3VyY2U6IGRlZmF1bHRCb290c3RyYXBTb3VyY2UsXG4gICAgfSk7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KGJvb3RzdHJhcEVudmlyb25tZW50TW9jaykudG9IYXZlQmVlbkNhbGxlZFdpdGgoXG4gICAgICB7XG4gICAgICAgIGFjY291bnQ6ICc1Njc4OScsXG4gICAgICAgIHJlZ2lvbjogJ3NvdXRoLXBvbGUnLFxuICAgICAgICBuYW1lOiAnYXdzOi8vNTY3ODkvc291dGgtcG9sZScsXG4gICAgICB9LFxuICAgICAgZXhwZWN0LmFueXRoaW5nKCksXG4gICAgICBleHBlY3QuYW55dGhpbmcoKSxcbiAgICApO1xuICAgIGV4cGVjdChib290c3RyYXBFbnZpcm9ubWVudE1vY2spLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcbiAgfSk7XG5cbiAgdGVzdCgnZ2xvYmJ5IGJvb3RzdHJhcCB1c2VzIHdoYXRzIGluIHRoZSBzdGFja3MnLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuICAgIGNsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLnNldHRpbmdzLnNldChbJ2FwcCddLCAnc29tZXRoaW5nJyk7XG5cbiAgICAvLyBXSEVOXG4gICAgYXdhaXQgdG9vbGtpdC5ib290c3RyYXAoWydhd3M6Ly8qL2Jlcm11ZGEtdHJpYW5nbGUtMSddLCB7XG4gICAgICBzb3VyY2U6IGRlZmF1bHRCb290c3RyYXBTb3VyY2UsXG4gICAgfSk7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KGJvb3RzdHJhcEVudmlyb25tZW50TW9jaykudG9IYXZlQmVlbkNhbGxlZFdpdGgoXG4gICAgICB7XG4gICAgICAgIGFjY291bnQ6ICcxMjM0NTY3ODkwMTInLFxuICAgICAgICByZWdpb246ICdiZXJtdWRhLXRyaWFuZ2xlLTEnLFxuICAgICAgICBuYW1lOiAnYXdzOi8vMTIzNDU2Nzg5MDEyL2Jlcm11ZGEtdHJpYW5nbGUtMScsXG4gICAgICB9LFxuICAgICAgZXhwZWN0LmFueXRoaW5nKCksXG4gICAgICBleHBlY3QuYW55dGhpbmcoKSxcbiAgICApO1xuICAgIGV4cGVjdChib290c3RyYXBFbnZpcm9ubWVudE1vY2spLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcbiAgfSk7XG5cbiAgdGVzdCgnYm9vdHN0cmFwIGNhbiBiZSBpbnZva2VkIHdpdGhvdXQgdGhlIC0tYXBwIGFyZ3VtZW50JywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuY2xlYXIoKTtcbiAgICBjb25zdCBtb2NrU3ludGhlc2l6ZSA9IGplc3QuZm4oKTtcbiAgICBjbG91ZEV4ZWN1dGFibGUuc3ludGhlc2l6ZSA9IG1vY2tTeW50aGVzaXplO1xuXG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgIC8vIFdIRU5cbiAgICBhd2FpdCB0b29sa2l0LmJvb3RzdHJhcChbJ2F3czovLzEyMzQ1Njc4OTAxMi93ZXN0LXBvbGUnXSwge1xuICAgICAgc291cmNlOiBkZWZhdWx0Qm9vdHN0cmFwU291cmNlLFxuICAgIH0pO1xuXG4gICAgLy8gVEhFTlxuICAgIGV4cGVjdChib290c3RyYXBFbnZpcm9ubWVudE1vY2spLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFxuICAgICAge1xuICAgICAgICBhY2NvdW50OiAnMTIzNDU2Nzg5MDEyJyxcbiAgICAgICAgcmVnaW9uOiAnd2VzdC1wb2xlJyxcbiAgICAgICAgbmFtZTogJ2F3czovLzEyMzQ1Njc4OTAxMi93ZXN0LXBvbGUnLFxuICAgICAgfSxcbiAgICAgIGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgZXhwZWN0LmFueXRoaW5nKCksXG4gICAgKTtcbiAgICBleHBlY3QoYm9vdHN0cmFwRW52aXJvbm1lbnRNb2NrKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG5cbiAgICBleHBlY3QoY2xvdWRFeGVjdXRhYmxlLmhhc0FwcCkudG9FcXVhbChmYWxzZSk7XG4gICAgZXhwZWN0KG1vY2tTeW50aGVzaXplKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnZGVzdHJveScsICgpID0+IHtcbiAgdGVzdCgnZGVzdHJveSBjb3JyZWN0IHN0YWNrJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgcmV0dXJuIHRvb2xraXQuZGVzdHJveSh7XG4gICAgICAgIHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbJ1Rlc3QtU3RhY2stQS9UZXN0LVN0YWNrLUMnXSB9LFxuICAgICAgICBleGNsdXNpdmVseTogdHJ1ZSxcbiAgICAgICAgZm9yY2U6IHRydWUsXG4gICAgICAgIGZyb21EZXBsb3k6IHRydWUsXG4gICAgICB9KTtcbiAgICB9KS5yZXNvbHZlcztcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ3dhdGNoJywgKCkgPT4ge1xuICB0ZXN0KFwiZmFpbHMgd2hlbiBubyAnd2F0Y2gnIHNldHRpbmdzIGFyZSBmb3VuZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgIGF3YWl0IGV4cGVjdCgoKSA9PiB7XG4gICAgICByZXR1cm4gdG9vbGtpdC53YXRjaCh7XG4gICAgICAgIHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbXSB9LFxuICAgICAgICBob3Rzd2FwOiBIb3Rzd2FwTW9kZS5IT1RTV0FQX09OTFksXG4gICAgICB9KTtcbiAgICB9KS5yZWplY3RzLnRvVGhyb3coXG4gICAgICBcIkNhbm5vdCB1c2UgdGhlICd3YXRjaCcgY29tbWFuZCB3aXRob3V0IHNwZWNpZnlpbmcgYXQgbGVhc3Qgb25lIGRpcmVjdG9yeSB0byBtb25pdG9yLiBcIiArXG4gICAgICAgICdNYWtlIHN1cmUgdG8gYWRkIGEgXCJ3YXRjaFwiIGtleSB0byB5b3VyIGNkay5qc29uJyxcbiAgICApO1xuICB9KTtcblxuICB0ZXN0KCdvYnNlcnZlcyBvbmx5IHRoZSByb290IGRpcmVjdG9yeSBieSBkZWZhdWx0JywgYXN5bmMgKCkgPT4ge1xuICAgIGNsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLnNldHRpbmdzLnNldChbJ3dhdGNoJ10sIHt9KTtcbiAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgYXdhaXQgdG9vbGtpdC53YXRjaCh7XG4gICAgICBzZWxlY3RvcjogeyBwYXR0ZXJuczogW10gfSxcbiAgICAgIGhvdHN3YXA6IEhvdHN3YXBNb2RlLkhPVFNXQVBfT05MWSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGluY2x1ZGVBcmdzID0gZmFrZUNob2tpZGFyV2F0Y2guaW5jbHVkZUFyZ3M7XG4gICAgZXhwZWN0KGluY2x1ZGVBcmdzLmxlbmd0aCkudG9CZSgxKTtcbiAgfSk7XG5cbiAgdGVzdChcImFsbG93cyBwcm92aWRpbmcgYSBzaW5nbGUgc3RyaW5nIGluICd3YXRjaC5pbmNsdWRlJ1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24uc2V0dGluZ3Muc2V0KFsnd2F0Y2gnXSwge1xuICAgICAgaW5jbHVkZTogJ215LWRpcicsXG4gICAgfSk7XG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgIGF3YWl0IHRvb2xraXQud2F0Y2goe1xuICAgICAgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFtdIH0sXG4gICAgICBob3Rzd2FwOiBIb3Rzd2FwTW9kZS5IT1RTV0FQX09OTFksXG4gICAgfSk7XG5cbiAgICBleHBlY3QoZmFrZUNob2tpZGFyV2F0Y2guaW5jbHVkZUFyZ3MpLnRvU3RyaWN0RXF1YWwoWydteS1kaXInXSk7XG4gIH0pO1xuXG4gIHRlc3QoXCJhbGxvd3MgcHJvdmlkaW5nIGFuIGFycmF5IG9mIHN0cmluZ3MgaW4gJ3dhdGNoLmluY2x1ZGUnXCIsIGFzeW5jICgpID0+IHtcbiAgICBjbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbi5zZXR0aW5ncy5zZXQoWyd3YXRjaCddLCB7XG4gICAgICBpbmNsdWRlOiBbJ215LWRpcjEnLCAnKiovbXktZGlyMi8qJ10sXG4gICAgfSk7XG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgIGF3YWl0IHRvb2xraXQud2F0Y2goe1xuICAgICAgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFtdIH0sXG4gICAgICBob3Rzd2FwOiBIb3Rzd2FwTW9kZS5IT1RTV0FQX09OTFksXG4gICAgfSk7XG5cbiAgICBleHBlY3QoZmFrZUNob2tpZGFyV2F0Y2guaW5jbHVkZUFyZ3MpLnRvU3RyaWN0RXF1YWwoWydteS1kaXIxJywgJyoqL215LWRpcjIvKiddKTtcbiAgfSk7XG5cbiAgdGVzdCgnaWdub3JlcyB0aGUgb3V0cHV0IGRpciwgZG90IGZpbGVzLCBkb3QgZGlyZWN0b3JpZXMsIGFuZCBub2RlX21vZHVsZXMgYnkgZGVmYXVsdCcsIGFzeW5jICgpID0+IHtcbiAgICBjbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbi5zZXR0aW5ncy5zZXQoWyd3YXRjaCddLCB7fSk7XG4gICAgY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24uc2V0dGluZ3Muc2V0KFsnb3V0cHV0J10sICdjZGsub3V0Jyk7XG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgIGF3YWl0IHRvb2xraXQud2F0Y2goe1xuICAgICAgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFtdIH0sXG4gICAgICBob3Rzd2FwOiBIb3Rzd2FwTW9kZS5IT1RTV0FQX09OTFksXG4gICAgfSk7XG5cbiAgICBleHBlY3QoZmFrZUNob2tpZGFyV2F0Y2guZXhjbHVkZUFyZ3MpLnRvU3RyaWN0RXF1YWwoWydjZGsub3V0LyoqJywgJyoqLy4qJywgJyoqLy4qLyoqJywgJyoqL25vZGVfbW9kdWxlcy8qKiddKTtcbiAgfSk7XG5cbiAgdGVzdChcImFsbG93cyBwcm92aWRpbmcgYSBzaW5nbGUgc3RyaW5nIGluICd3YXRjaC5leGNsdWRlJ1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24uc2V0dGluZ3Muc2V0KFsnd2F0Y2gnXSwge1xuICAgICAgZXhjbHVkZTogJ215LWRpcicsXG4gICAgfSk7XG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgIGF3YWl0IHRvb2xraXQud2F0Y2goe1xuICAgICAgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFtdIH0sXG4gICAgICBob3Rzd2FwOiBIb3Rzd2FwTW9kZS5IT1RTV0FQX09OTFksXG4gICAgfSk7XG5cbiAgICBjb25zdCBleGNsdWRlQXJncyA9IGZha2VDaG9raWRhcldhdGNoLmV4Y2x1ZGVBcmdzO1xuICAgIGV4cGVjdChleGNsdWRlQXJncy5sZW5ndGgpLnRvQmUoNSk7XG4gICAgZXhwZWN0KGV4Y2x1ZGVBcmdzWzBdKS50b0JlKCdteS1kaXInKTtcbiAgfSk7XG5cbiAgdGVzdChcImFsbG93cyBwcm92aWRpbmcgYW4gYXJyYXkgb2Ygc3RyaW5ncyBpbiAnd2F0Y2guZXhjbHVkZSdcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLnNldHRpbmdzLnNldChbJ3dhdGNoJ10sIHtcbiAgICAgIGV4Y2x1ZGU6IFsnbXktZGlyMScsICcqKi9teS1kaXIyJ10sXG4gICAgfSk7XG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgIGF3YWl0IHRvb2xraXQud2F0Y2goe1xuICAgICAgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFtdIH0sXG4gICAgICBob3Rzd2FwOiBIb3Rzd2FwTW9kZS5IT1RTV0FQX09OTFksXG4gICAgfSk7XG5cbiAgICBjb25zdCBleGNsdWRlQXJncyA9IGZha2VDaG9raWRhcldhdGNoLmV4Y2x1ZGVBcmdzO1xuICAgIGV4cGVjdChleGNsdWRlQXJncy5sZW5ndGgpLnRvQmUoNik7XG4gICAgZXhwZWN0KGV4Y2x1ZGVBcmdzWzBdKS50b0JlKCdteS1kaXIxJyk7XG4gICAgZXhwZWN0KGV4Y2x1ZGVBcmdzWzFdKS50b0JlKCcqKi9teS1kaXIyJyk7XG4gIH0pO1xuXG4gIHRlc3QoJ2FsbG93cyB3YXRjaGluZyB3aXRoIGRlcGxveSBjb25jdXJyZW5jeScsIGFzeW5jICgpID0+IHtcbiAgICBjbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbi5zZXR0aW5ncy5zZXQoWyd3YXRjaCddLCB7fSk7XG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcbiAgICBjb25zdCBjZGtEZXBsb3lNb2NrID0gamVzdC5mbigpO1xuICAgIHRvb2xraXQuZGVwbG95ID0gY2RrRGVwbG95TW9jaztcblxuICAgIGF3YWl0IHRvb2xraXQud2F0Y2goe1xuICAgICAgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFtdIH0sXG4gICAgICBjb25jdXJyZW5jeTogMyxcbiAgICAgIGhvdHN3YXA6IEhvdHN3YXBNb2RlLkhPVFNXQVBfT05MWSxcbiAgICB9KTtcbiAgICBmYWtlQ2hva2lkYXJXYXRjaGVyT24ucmVhZHlDYWxsYmFjaygpO1xuXG4gICAgZXhwZWN0KGNka0RlcGxveU1vY2spLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKGV4cGVjdC5vYmplY3RDb250YWluaW5nKHsgY29uY3VycmVuY3k6IDMgfSkpO1xuICB9KTtcblxuICBkZXNjcmliZS5lYWNoKFtIb3Rzd2FwTW9kZS5GQUxMX0JBQ0ssIEhvdHN3YXBNb2RlLkhPVFNXQVBfT05MWV0pKCclcCBtb2RlJywgKGhvdHN3YXBNb2RlKSA9PiB7XG4gICAgdGVzdCgncGFzc2VzIHRocm91Z2ggdGhlIGNvcnJlY3QgaG90c3dhcCBtb2RlIHRvIGRlcGxveVN0YWNrKCknLCBhc3luYyAoKSA9PiB7XG4gICAgICBjbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbi5zZXR0aW5ncy5zZXQoWyd3YXRjaCddLCB7fSk7XG4gICAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuICAgICAgY29uc3QgY2RrRGVwbG95TW9jayA9IGplc3QuZm4oKTtcbiAgICAgIHRvb2xraXQuZGVwbG95ID0gY2RrRGVwbG95TW9jaztcblxuICAgICAgYXdhaXQgdG9vbGtpdC53YXRjaCh7XG4gICAgICAgIHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbXSB9LFxuICAgICAgICBob3Rzd2FwOiBob3Rzd2FwTW9kZSxcbiAgICAgIH0pO1xuICAgICAgZmFrZUNob2tpZGFyV2F0Y2hlck9uLnJlYWR5Q2FsbGJhY2soKTtcblxuICAgICAgZXhwZWN0KGNka0RlcGxveU1vY2spLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKGV4cGVjdC5vYmplY3RDb250YWluaW5nKHsgaG90c3dhcDogaG90c3dhcE1vZGUgfSkpO1xuICAgIH0pO1xuICB9KTtcblxuICB0ZXN0KCdyZXNwZWN0cyBIb3Rzd2FwTW9kZS5IT1RTV0FQX09OTFknLCBhc3luYyAoKSA9PiB7XG4gICAgY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24uc2V0dGluZ3Muc2V0KFsnd2F0Y2gnXSwge30pO1xuICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG4gICAgY29uc3QgY2RrRGVwbG95TW9jayA9IGplc3QuZm4oKTtcbiAgICB0b29sa2l0LmRlcGxveSA9IGNka0RlcGxveU1vY2s7XG5cbiAgICBhd2FpdCB0b29sa2l0LndhdGNoKHtcbiAgICAgIHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbXSB9LFxuICAgICAgaG90c3dhcDogSG90c3dhcE1vZGUuSE9UU1dBUF9PTkxZLFxuICAgIH0pO1xuICAgIGZha2VDaG9raWRhcldhdGNoZXJPbi5yZWFkeUNhbGxiYWNrKCk7XG5cbiAgICBleHBlY3QoY2RrRGVwbG95TW9jaykudG9IYXZlQmVlbkNhbGxlZFdpdGgoZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoeyBob3Rzd2FwOiBIb3Rzd2FwTW9kZS5IT1RTV0FQX09OTFkgfSkpO1xuICB9KTtcblxuICB0ZXN0KCdyZXNwZWN0cyBIb3Rzd2FwTW9kZS5GQUxMX0JBQ0snLCBhc3luYyAoKSA9PiB7XG4gICAgY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24uc2V0dGluZ3Muc2V0KFsnd2F0Y2gnXSwge30pO1xuICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG4gICAgY29uc3QgY2RrRGVwbG95TW9jayA9IGplc3QuZm4oKTtcbiAgICB0b29sa2l0LmRlcGxveSA9IGNka0RlcGxveU1vY2s7XG5cbiAgICBhd2FpdCB0b29sa2l0LndhdGNoKHtcbiAgICAgIHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbXSB9LFxuICAgICAgaG90c3dhcDogSG90c3dhcE1vZGUuRkFMTF9CQUNLLFxuICAgIH0pO1xuICAgIGZha2VDaG9raWRhcldhdGNoZXJPbi5yZWFkeUNhbGxiYWNrKCk7XG5cbiAgICBleHBlY3QoY2RrRGVwbG95TW9jaykudG9IYXZlQmVlbkNhbGxlZFdpdGgoZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoeyBob3Rzd2FwOiBIb3Rzd2FwTW9kZS5GQUxMX0JBQ0sgfSkpO1xuICB9KTtcblxuICB0ZXN0KCdyZXNwZWN0cyBIb3Rzd2FwTW9kZS5GVUxMX0RFUExPWU1FTlQnLCBhc3luYyAoKSA9PiB7XG4gICAgY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24uc2V0dGluZ3Muc2V0KFsnd2F0Y2gnXSwge30pO1xuICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG4gICAgY29uc3QgY2RrRGVwbG95TW9jayA9IGplc3QuZm4oKTtcbiAgICB0b29sa2l0LmRlcGxveSA9IGNka0RlcGxveU1vY2s7XG5cbiAgICBhd2FpdCB0b29sa2l0LndhdGNoKHtcbiAgICAgIHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbXSB9LFxuICAgICAgaG90c3dhcDogSG90c3dhcE1vZGUuRlVMTF9ERVBMT1lNRU5ULFxuICAgIH0pO1xuICAgIGZha2VDaG9raWRhcldhdGNoZXJPbi5yZWFkeUNhbGxiYWNrKCk7XG5cbiAgICBleHBlY3QoY2RrRGVwbG95TW9jaykudG9IYXZlQmVlbkNhbGxlZFdpdGgoZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoeyBob3Rzd2FwOiBIb3Rzd2FwTW9kZS5GVUxMX0RFUExPWU1FTlQgfSkpO1xuICB9KTtcblxuICBkZXNjcmliZSgnd2l0aCBmaWxlIGNoYW5nZSBldmVudHMnLCAoKSA9PiB7XG4gICAgbGV0IHRvb2xraXQ6IENka1Rvb2xraXQ7XG4gICAgbGV0IGNka0RlcGxveU1vY2s6IGplc3QuTW9jaztcblxuICAgIGJlZm9yZUVhY2goYXN5bmMgKCkgPT4ge1xuICAgICAgY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24uc2V0dGluZ3Muc2V0KFsnd2F0Y2gnXSwge30pO1xuICAgICAgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcbiAgICAgIGNka0RlcGxveU1vY2sgPSBqZXN0LmZuKCk7XG4gICAgICB0b29sa2l0LmRlcGxveSA9IGNka0RlcGxveU1vY2s7XG4gICAgICBhd2FpdCB0b29sa2l0LndhdGNoKHtcbiAgICAgICAgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFtdIH0sXG4gICAgICAgIGhvdHN3YXA6IEhvdHN3YXBNb2RlLkhPVFNXQVBfT05MWSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdChcImRvZXMgbm90IHRyaWdnZXIgYSAnZGVwbG95JyBiZWZvcmUgdGhlICdyZWFkeScgZXZlbnQgaGFzIGZpcmVkXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IGZha2VDaG9raWRhcldhdGNoZXJPbi5maWxlRXZlbnRDYWxsYmFjaygnYWRkJywgJ215LWZpbGUnKTtcblxuICAgICAgZXhwZWN0KGNka0RlcGxveU1vY2spLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZShcIndoZW4gdGhlICdyZWFkeScgZXZlbnQgaGFzIGFscmVhZHkgZmlyZWRcIiwgKCkgPT4ge1xuICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIC8vIFRoZSByZWFkeSBjYWxsYmFjayB0cmlnZ2VycyBhIGRlcGxveW1lbnQgc28gZWFjaCB0ZXN0XG4gICAgICAgIC8vIHRoYXQgdXNlcyB0aGlzIGZ1bmN0aW9uIHdpbGwgc2VlICdjZGtEZXBsb3lNb2NrJyBjYWxsZWRcbiAgICAgICAgLy8gYW4gYWRkaXRpb25hbCB0aW1lLlxuICAgICAgICBmYWtlQ2hva2lkYXJXYXRjaGVyT24ucmVhZHlDYWxsYmFjaygpO1xuICAgICAgfSk7XG5cbiAgICAgIHRlc3QoXCJhbiBpbml0aWFsICdkZXBsb3knIGlzIHRyaWdnZXJlZCwgd2l0aG91dCBhbnkgZmlsZSBjaGFuZ2VzXCIsIGFzeW5jICgpID0+IHtcbiAgICAgICAgZXhwZWN0KGNka0RlcGxveU1vY2spLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcbiAgICAgIH0pO1xuXG4gICAgICB0ZXN0KFwiZG9lcyB0cmlnZ2VyIGEgJ2RlcGxveScgZm9yIGEgZmlsZSBjaGFuZ2VcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBmYWtlQ2hva2lkYXJXYXRjaGVyT24uZmlsZUV2ZW50Q2FsbGJhY2soJ2FkZCcsICdteS1maWxlJyk7XG5cbiAgICAgICAgZXhwZWN0KGNka0RlcGxveU1vY2spLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygyKTtcbiAgICAgIH0pO1xuXG4gICAgICB0ZXN0KFwidHJpZ2dlcnMgYSAnZGVwbG95JyB0d2ljZSBmb3IgdHdvIGZpbGUgY2hhbmdlc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAY2RrbGFicy9wcm9taXNlYWxsLW5vLXVuYm91bmRlZC1wYXJhbGxlbGlzbVxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgICAgZmFrZUNob2tpZGFyV2F0Y2hlck9uLmZpbGVFdmVudENhbGxiYWNrKCdhZGQnLCAnbXktZmlsZTEnKSxcbiAgICAgICAgICBmYWtlQ2hva2lkYXJXYXRjaGVyT24uZmlsZUV2ZW50Q2FsbGJhY2soJ2NoYW5nZScsICdteS1maWxlMicpLFxuICAgICAgICBdKTtcblxuICAgICAgICBleHBlY3QoY2RrRGVwbG95TW9jaykudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDMpO1xuICAgICAgfSk7XG5cbiAgICAgIHRlc3QoXCJiYXRjaGVzIGZpbGUgY2hhbmdlcyB0aGF0IGhhcHBlbiBkdXJpbmcgJ2RlcGxveSdcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGNka2xhYnMvcHJvbWlzZWFsbC1uby11bmJvdW5kZWQtcGFyYWxsZWxpc21cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgIGZha2VDaG9raWRhcldhdGNoZXJPbi5maWxlRXZlbnRDYWxsYmFjaygnYWRkJywgJ215LWZpbGUxJyksXG4gICAgICAgICAgZmFrZUNob2tpZGFyV2F0Y2hlck9uLmZpbGVFdmVudENhbGxiYWNrKCdjaGFuZ2UnLCAnbXktZmlsZTInKSxcbiAgICAgICAgICBmYWtlQ2hva2lkYXJXYXRjaGVyT24uZmlsZUV2ZW50Q2FsbGJhY2soJ3VubGluaycsICdteS1maWxlMycpLFxuICAgICAgICAgIGZha2VDaG9raWRhcldhdGNoZXJPbi5maWxlRXZlbnRDYWxsYmFjaygnYWRkJywgJ215LWZpbGU0JyksXG4gICAgICAgIF0pO1xuXG4gICAgICAgIGV4cGVjdChjZGtEZXBsb3lNb2NrKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ3N5bnRoJywgKCkgPT4ge1xuICB0ZXN0KCdzdWNjZXNzZnVsIHN5bnRoIG91dHB1dHMgaGllcmFyY2hpY2FsIHN0YWNrIGlkcycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuICAgIGF3YWl0IHRvb2xraXQuc3ludGgoW10sIGZhbHNlLCBmYWxzZSk7XG5cbiAgICAvLyBTZXBhcmF0ZSB0ZXN0cyBhcyBjb2xvcml6aW5nIGhhbXBlcnMgZGV0ZWN0aW9uXG4gICAgZXhwZWN0KHN0ZGVyck1vY2subW9jay5jYWxsc1sxXVswXSkudG9NYXRjaCgnVGVzdC1TdGFjay1BLURpc3BsYXktTmFtZScpO1xuICAgIGV4cGVjdChzdGRlcnJNb2NrLm1vY2suY2FsbHNbMV1bMF0pLnRvTWF0Y2goJ1Rlc3QtU3RhY2stQicpO1xuICB9KTtcblxuICB0ZXN0KCd3aXRoIG5vIHN0ZG91dCBvcHRpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gR0lWRVxuICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICAvLyBUSEVOXG4gICAgYXdhaXQgdG9vbGtpdC5zeW50aChbJ1Rlc3QtU3RhY2stQS1EaXNwbGF5LU5hbWUnXSwgZmFsc2UsIHRydWUpO1xuICAgIGV4cGVjdChtb2NrUmVzdWx0Lm1vY2suY2FsbHMubGVuZ3RoKS50b0VxdWFsKDApO1xuICB9KTtcblxuICBkZXNjcmliZSgnbWlncmF0ZScsICgpID0+IHtcbiAgICBjb25zdCB0ZXN0UmVzb3VyY2VQYXRoID0gW19fZGlybmFtZSwgJy4uJywgJ2NvbW1hbmRzJywgJ3Rlc3QtcmVzb3VyY2VzJ107XG4gICAgY29uc3QgdGVtcGxhdGVQYXRoID0gWy4uLnRlc3RSZXNvdXJjZVBhdGgsICd0ZW1wbGF0ZXMnXTtcbiAgICBjb25zdCBzcXNUZW1wbGF0ZVBhdGggPSBwYXRoLmpvaW4oLi4udGVtcGxhdGVQYXRoLCAnc3FzLXRlbXBsYXRlLmpzb24nKTtcbiAgICBjb25zdCBhdXRvc2NhbGluZ1RlbXBsYXRlUGF0aCA9IHBhdGguam9pbiguLi50ZW1wbGF0ZVBhdGgsICdhdXRvc2NhbGluZy10ZW1wbGF0ZS55bWwnKTtcbiAgICBjb25zdCBzM1RlbXBsYXRlUGF0aCA9IHBhdGguam9pbiguLi50ZW1wbGF0ZVBhdGgsICdzMy10ZW1wbGF0ZS5qc29uJyk7XG5cbiAgICB0ZXN0KCdtaWdyYXRlIGZhaWxzIHdoZW4gYm90aCAtLWZyb20tcGF0aCBhbmQgLS1mcm9tLXN0YWNrIGFyZSBwcm92aWRlZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG4gICAgICBhd2FpdCBleHBlY3QoKCkgPT5cbiAgICAgICAgdG9vbGtpdC5taWdyYXRlKHtcbiAgICAgICAgICBzdGFja05hbWU6ICduby1zb3VyY2UnLFxuICAgICAgICAgIGZyb21QYXRoOiAnLi9oZXJlL3RlbXBsYXRlLnltbCcsXG4gICAgICAgICAgZnJvbVN0YWNrOiB0cnVlLFxuICAgICAgICB9KSxcbiAgICAgICkucmVqZWN0cy50b1Rocm93KCdPbmx5IG9uZSBvZiBgLS1mcm9tLXBhdGhgIG9yIGAtLWZyb20tc3RhY2tgIG1heSBiZSBwcm92aWRlZC4nKTtcbiAgICAgIGV4cGVjdChzdGRlcnJNb2NrLm1vY2suY2FsbHNbMV1bMF0pLnRvQ29udGFpbihcbiAgICAgICAgJyDinYwgIE1pZ3JhdGUgZmFpbGVkIGZvciBgbm8tc291cmNlYDogT25seSBvbmUgb2YgYC0tZnJvbS1wYXRoYCBvciBgLS1mcm9tLXN0YWNrYCBtYXkgYmUgcHJvdmlkZWQuJyxcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdtaWdyYXRlIGZhaWxzIHdoZW4gLS1mcm9tLXBhdGggaXMgaW52YWxpZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG4gICAgICBhd2FpdCBleHBlY3QoKCkgPT5cbiAgICAgICAgdG9vbGtpdC5taWdyYXRlKHtcbiAgICAgICAgICBzdGFja05hbWU6ICdiYWQtbG9jYWwtc291cmNlJyxcbiAgICAgICAgICBmcm9tUGF0aDogJy4vaGVyZS90ZW1wbGF0ZS55bWwnLFxuICAgICAgICB9KSxcbiAgICAgICkucmVqZWN0cy50b1Rocm93KFwiJy4vaGVyZS90ZW1wbGF0ZS55bWwnIGlzIG5vdCBhIHZhbGlkIHBhdGguXCIpO1xuICAgICAgZXhwZWN0KHN0ZGVyck1vY2subW9jay5jYWxsc1sxXVswXSkudG9Db250YWluKFxuICAgICAgICBcIiDinYwgIE1pZ3JhdGUgZmFpbGVkIGZvciBgYmFkLWxvY2FsLXNvdXJjZWA6ICcuL2hlcmUvdGVtcGxhdGUueW1sJyBpcyBub3QgYSB2YWxpZCBwYXRoLlwiLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ21pZ3JhdGUgZmFpbHMgd2hlbiAtLWZyb20tc3RhY2sgaXMgdXNlZCBhbmQgc3RhY2sgZG9lcyBub3QgZXhpc3QgaW4gYWNjb3VudCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IG1vY2tTZGtQcm92aWRlciA9IG5ldyBNb2NrU2RrUHJvdmlkZXIoKTtcbiAgICAgIG1vY2tDbG91ZEZvcm1hdGlvbkNsaWVudC5vbihEZXNjcmliZVN0YWNrc0NvbW1hbmQpLnJlamVjdHMobmV3IEVycm9yKCdTdGFjayBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIGVudmlyb25tZW50JykpO1xuXG4gICAgICBjb25zdCBtb2NrQ2xvdWRFeGVjdXRhYmxlID0gbmV3IE1vY2tDbG91ZEV4ZWN1dGFibGUoe1xuICAgICAgICBzdGFja3M6IFtdLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGNka1Rvb2xraXQgPSBuZXcgQ2RrVG9vbGtpdCh7XG4gICAgICAgIGNsb3VkRXhlY3V0YWJsZTogbW9ja0Nsb3VkRXhlY3V0YWJsZSxcbiAgICAgICAgZGVwbG95bWVudHM6IG5ldyBEZXBsb3ltZW50cyh7IHNka1Byb3ZpZGVyOiBtb2NrU2RrUHJvdmlkZXIgfSksXG4gICAgICAgIHNka1Byb3ZpZGVyOiBtb2NrU2RrUHJvdmlkZXIsXG4gICAgICAgIGNvbmZpZ3VyYXRpb246IG1vY2tDbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbixcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCBleHBlY3QoKCkgPT5cbiAgICAgICAgY2RrVG9vbGtpdC5taWdyYXRlKHtcbiAgICAgICAgICBzdGFja05hbWU6ICdiYWQtY2xvdWRmb3JtYXRpb24tc291cmNlJyxcbiAgICAgICAgICBmcm9tU3RhY2s6IHRydWUsXG4gICAgICAgIH0pLFxuICAgICAgKS5yZWplY3RzLnRvVGhyb3coJ1N0YWNrIGRvZXMgbm90IGV4aXN0IGluIHRoaXMgZW52aXJvbm1lbnQnKTtcbiAgICAgIGV4cGVjdChzdGRlcnJNb2NrLm1vY2suY2FsbHNbMV1bMF0pLnRvQ29udGFpbihcbiAgICAgICAgJyDinYwgIE1pZ3JhdGUgZmFpbGVkIGZvciBgYmFkLWNsb3VkZm9ybWF0aW9uLXNvdXJjZWA6IFN0YWNrIGRvZXMgbm90IGV4aXN0IGluIHRoaXMgZW52aXJvbm1lbnQnLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ21pZ3JhdGUgZmFpbHMgd2hlbiBzdGFjayBjYW5ub3QgYmUgZ2VuZXJhdGVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcbiAgICAgIGF3YWl0IGV4cGVjdCgoKSA9PlxuICAgICAgICB0b29sa2l0Lm1pZ3JhdGUoe1xuICAgICAgICAgIHN0YWNrTmFtZTogJ2Nhbm5vdC1nZW5lcmF0ZS10ZW1wbGF0ZScsXG4gICAgICAgICAgZnJvbVBhdGg6IHNxc1RlbXBsYXRlUGF0aCxcbiAgICAgICAgICBsYW5ndWFnZTogJ3J1c3QnLFxuICAgICAgICB9KSxcbiAgICAgICkucmVqZWN0cy50b1Rocm93KFxuICAgICAgICAnQ2Fubm90R2VuZXJhdGVUZW1wbGF0ZVN0YWNrIGNvdWxkIG5vdCBiZSBnZW5lcmF0ZWQgYmVjYXVzZSBydXN0IGlzIG5vdCBhIHN1cHBvcnRlZCBsYW5ndWFnZScsXG4gICAgICApO1xuICAgICAgZXhwZWN0KHN0ZGVyck1vY2subW9jay5jYWxsc1sxXVswXSkudG9Db250YWluKFxuICAgICAgICAnIOKdjCAgTWlncmF0ZSBmYWlsZWQgZm9yIGBjYW5ub3QtZ2VuZXJhdGUtdGVtcGxhdGVgOiBDYW5ub3RHZW5lcmF0ZVRlbXBsYXRlU3RhY2sgY291bGQgbm90IGJlIGdlbmVyYXRlZCBiZWNhdXNlIHJ1c3QgaXMgbm90IGEgc3VwcG9ydGVkIGxhbmd1YWdlJyxcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBjbGlUZXN0KCdtaWdyYXRlIHN1Y2NlZWRzIGZvciB2YWxpZCB0ZW1wbGF0ZSBmcm9tIGxvY2FsIHBhdGggd2hlbiBubyBsYW5ndWFnZSBpcyBwcm92aWRlZCcsIGFzeW5jICh3b3JrRGlyKSA9PiB7XG4gICAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuICAgICAgYXdhaXQgdG9vbGtpdC5taWdyYXRlKHtcbiAgICAgICAgc3RhY2tOYW1lOiAnU1FTVHlwZVNjcmlwdCcsXG4gICAgICAgIGZyb21QYXRoOiBzcXNUZW1wbGF0ZVBhdGgsXG4gICAgICAgIG91dHB1dFBhdGg6IHdvcmtEaXIsXG4gICAgICB9KTtcblxuICAgICAgLy8gUGFja2FnZXMgY3JlYXRlZCBmb3IgdHlwZXNjcmlwdFxuICAgICAgZXhwZWN0KGZzLnBhdGhFeGlzdHNTeW5jKHBhdGguam9pbih3b3JrRGlyLCAnU1FTVHlwZVNjcmlwdCcsICdwYWNrYWdlLmpzb24nKSkpLnRvQmVUcnV0aHkoKTtcbiAgICAgIGV4cGVjdChmcy5wYXRoRXhpc3RzU3luYyhwYXRoLmpvaW4od29ya0RpciwgJ1NRU1R5cGVTY3JpcHQnLCAnYmluJywgJ3Nxc190eXBlX3NjcmlwdC50cycpKSkudG9CZVRydXRoeSgpO1xuICAgICAgZXhwZWN0KGZzLnBhdGhFeGlzdHNTeW5jKHBhdGguam9pbih3b3JrRGlyLCAnU1FTVHlwZVNjcmlwdCcsICdsaWInLCAnc3FzX3R5cGVfc2NyaXB0LXN0YWNrLnRzJykpKS50b0JlVHJ1dGh5KCk7XG4gICAgfSk7XG5cbiAgICBjbGlUZXN0KCdtaWdyYXRlIHN1Y2NlZWRzIGZvciB2YWxpZCB0ZW1wbGF0ZSBmcm9tIGxvY2FsIHBhdGggd2hlbiBsYW5ndWFnZSBpcyBwcm92aWRlZCcsIGFzeW5jICh3b3JrRGlyKSA9PiB7XG4gICAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuICAgICAgYXdhaXQgdG9vbGtpdC5taWdyYXRlKHtcbiAgICAgICAgc3RhY2tOYW1lOiAnUzNQeXRob24nLFxuICAgICAgICBmcm9tUGF0aDogczNUZW1wbGF0ZVBhdGgsXG4gICAgICAgIG91dHB1dFBhdGg6IHdvcmtEaXIsXG4gICAgICAgIGxhbmd1YWdlOiAncHl0aG9uJyxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBQYWNrYWdlcyBjcmVhdGVkIGZvciB0eXBlc2NyaXB0XG4gICAgICBleHBlY3QoZnMucGF0aEV4aXN0c1N5bmMocGF0aC5qb2luKHdvcmtEaXIsICdTM1B5dGhvbicsICdyZXF1aXJlbWVudHMudHh0JykpKS50b0JlVHJ1dGh5KCk7XG4gICAgICBleHBlY3QoZnMucGF0aEV4aXN0c1N5bmMocGF0aC5qb2luKHdvcmtEaXIsICdTM1B5dGhvbicsICdhcHAucHknKSkpLnRvQmVUcnV0aHkoKTtcbiAgICAgIGV4cGVjdChmcy5wYXRoRXhpc3RzU3luYyhwYXRoLmpvaW4od29ya0RpciwgJ1MzUHl0aG9uJywgJ3MzX3B5dGhvbicsICdzM19weXRob25fc3RhY2sucHknKSkpLnRvQmVUcnV0aHkoKTtcbiAgICB9KTtcblxuICAgIGNsaVRlc3QoJ21pZ3JhdGUgY2FsbCBpcyBpZGVtcG90ZW50JywgYXN5bmMgKHdvcmtEaXIpID0+IHtcbiAgICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG4gICAgICBhd2FpdCB0b29sa2l0Lm1pZ3JhdGUoe1xuICAgICAgICBzdGFja05hbWU6ICdBdXRvc2NhbGluZ0NTaGFycCcsXG4gICAgICAgIGZyb21QYXRoOiBhdXRvc2NhbGluZ1RlbXBsYXRlUGF0aCxcbiAgICAgICAgb3V0cHV0UGF0aDogd29ya0RpcixcbiAgICAgICAgbGFuZ3VhZ2U6ICdjc2hhcnAnLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFBhY2thZ2VzIGNyZWF0ZWQgZm9yIHR5cGVzY3JpcHRcbiAgICAgIGV4cGVjdChmcy5wYXRoRXhpc3RzU3luYyhwYXRoLmpvaW4od29ya0RpciwgJ0F1dG9zY2FsaW5nQ1NoYXJwJywgJ3NyYycsICdBdXRvc2NhbGluZ0NTaGFycC5zbG4nKSkpLnRvQmVUcnV0aHkoKTtcbiAgICAgIGV4cGVjdChcbiAgICAgICAgZnMucGF0aEV4aXN0c1N5bmMocGF0aC5qb2luKHdvcmtEaXIsICdBdXRvc2NhbGluZ0NTaGFycCcsICdzcmMnLCAnQXV0b3NjYWxpbmdDU2hhcnAnLCAnUHJvZ3JhbS5jcycpKSxcbiAgICAgICkudG9CZVRydXRoeSgpO1xuICAgICAgZXhwZWN0KFxuICAgICAgICBmcy5wYXRoRXhpc3RzU3luYyhcbiAgICAgICAgICBwYXRoLmpvaW4od29ya0RpciwgJ0F1dG9zY2FsaW5nQ1NoYXJwJywgJ3NyYycsICdBdXRvc2NhbGluZ0NTaGFycCcsICdBdXRvc2NhbGluZ0NTaGFycFN0YWNrLmNzJyksXG4gICAgICAgICksXG4gICAgICApLnRvQmVUcnV0aHkoKTtcblxuICAgICAgLy8gT25lIG1vcmUgdGltZVxuICAgICAgYXdhaXQgdG9vbGtpdC5taWdyYXRlKHtcbiAgICAgICAgc3RhY2tOYW1lOiAnQXV0b3NjYWxpbmdDU2hhcnAnLFxuICAgICAgICBmcm9tUGF0aDogYXV0b3NjYWxpbmdUZW1wbGF0ZVBhdGgsXG4gICAgICAgIG91dHB1dFBhdGg6IHdvcmtEaXIsXG4gICAgICAgIGxhbmd1YWdlOiAnY3NoYXJwJyxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBQYWNrYWdlcyBjcmVhdGVkIGZvciB0eXBlc2NyaXB0XG4gICAgICBleHBlY3QoZnMucGF0aEV4aXN0c1N5bmMocGF0aC5qb2luKHdvcmtEaXIsICdBdXRvc2NhbGluZ0NTaGFycCcsICdzcmMnLCAnQXV0b3NjYWxpbmdDU2hhcnAuc2xuJykpKS50b0JlVHJ1dGh5KCk7XG4gICAgICBleHBlY3QoXG4gICAgICAgIGZzLnBhdGhFeGlzdHNTeW5jKHBhdGguam9pbih3b3JrRGlyLCAnQXV0b3NjYWxpbmdDU2hhcnAnLCAnc3JjJywgJ0F1dG9zY2FsaW5nQ1NoYXJwJywgJ1Byb2dyYW0uY3MnKSksXG4gICAgICApLnRvQmVUcnV0aHkoKTtcbiAgICAgIGV4cGVjdChcbiAgICAgICAgZnMucGF0aEV4aXN0c1N5bmMoXG4gICAgICAgICAgcGF0aC5qb2luKHdvcmtEaXIsICdBdXRvc2NhbGluZ0NTaGFycCcsICdzcmMnLCAnQXV0b3NjYWxpbmdDU2hhcnAnLCAnQXV0b3NjYWxpbmdDU2hhcnBTdGFjay5jcycpLFxuICAgICAgICApLFxuICAgICAgKS50b0JlVHJ1dGh5KCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzdGFjayB3aXRoIGVycm9yIGFuZCBmbGFnZ2VkIGZvciB2YWxpZGF0aW9uJywgKCkgPT4ge1xuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgY2xvdWRFeGVjdXRhYmxlID0gbmV3IE1vY2tDbG91ZEV4ZWN1dGFibGUoe1xuICAgICAgICBzdGFja3M6IFtNb2NrU3RhY2suTU9DS19TVEFDS19BLCBNb2NrU3RhY2suTU9DS19TVEFDS19CXSxcbiAgICAgICAgbmVzdGVkQXNzZW1ibGllczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHN0YWNrczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcHJvcGVydGllczogeyB2YWxpZGF0ZU9uU3ludGg6IHRydWUgfSxcbiAgICAgICAgICAgICAgICAuLi5Nb2NrU3RhY2suTU9DS19TVEFDS19XSVRIX0VSUk9SLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdjYXVzZXMgc3ludGggdG8gZmFpbCBpZiBhdXRvVmFsaWRhdGU9dHJ1ZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG4gICAgICBjb25zdCBhdXRvVmFsaWRhdGUgPSB0cnVlO1xuICAgICAgYXdhaXQgZXhwZWN0KHRvb2xraXQuc3ludGgoW10sIGZhbHNlLCB0cnVlLCBhdXRvVmFsaWRhdGUpKS5yZWplY3RzLnRvQmVEZWZpbmVkKCk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdjYXVzZXMgc3ludGggdG8gc3VjY2VlZCBpZiBhdXRvVmFsaWRhdGU9ZmFsc2UnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuICAgICAgY29uc3QgYXV0b1ZhbGlkYXRlID0gZmFsc2U7XG4gICAgICBhd2FpdCB0b29sa2l0LnN5bnRoKFtdLCBmYWxzZSwgdHJ1ZSwgYXV0b1ZhbGlkYXRlKTtcbiAgICAgIGV4cGVjdChtb2NrUmVzdWx0Lm1vY2suY2FsbHMubGVuZ3RoKS50b0VxdWFsKDApO1xuICAgIH0pO1xuICB9KTtcblxuICB0ZXN0KCdzdGFjayBoYXMgZXJyb3IgYW5kIHdhcyBleHBsaWNpdGx5IHNlbGVjdGVkJywgYXN5bmMgKCkgPT4ge1xuICAgIGNsb3VkRXhlY3V0YWJsZSA9IG5ldyBNb2NrQ2xvdWRFeGVjdXRhYmxlKHtcbiAgICAgIHN0YWNrczogW01vY2tTdGFjay5NT0NLX1NUQUNLX0EsIE1vY2tTdGFjay5NT0NLX1NUQUNLX0JdLFxuICAgICAgbmVzdGVkQXNzZW1ibGllczogW1xuICAgICAgICB7XG4gICAgICAgICAgc3RhY2tzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHByb3BlcnRpZXM6IHsgdmFsaWRhdGVPblN5bnRoOiBmYWxzZSB9LFxuICAgICAgICAgICAgICAuLi5Nb2NrU3RhY2suTU9DS19TVEFDS19XSVRIX0VSUk9SLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICBhd2FpdCBleHBlY3QodG9vbGtpdC5zeW50aChbJ1Rlc3QtU3RhY2stQS93aXRoZXJyb3JzJ10sIGZhbHNlLCB0cnVlKSkucmVqZWN0cy50b0JlRGVmaW5lZCgpO1xuICB9KTtcblxuICB0ZXN0KCdzdGFjayBoYXMgZXJyb3IsIGlzIG5vdCBmbGFnZ2VkIGZvciB2YWxpZGF0aW9uIGFuZCB3YXMgbm90IGV4cGxpY2l0bHkgc2VsZWN0ZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgY2xvdWRFeGVjdXRhYmxlID0gbmV3IE1vY2tDbG91ZEV4ZWN1dGFibGUoe1xuICAgICAgc3RhY2tzOiBbTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQSwgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQl0sXG4gICAgICBuZXN0ZWRBc3NlbWJsaWVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBzdGFja3M6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcHJvcGVydGllczogeyB2YWxpZGF0ZU9uU3ludGg6IGZhbHNlIH0sXG4gICAgICAgICAgICAgIC4uLk1vY2tTdGFjay5NT0NLX1NUQUNLX1dJVEhfRVJST1IsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgIGF3YWl0IHRvb2xraXQuc3ludGgoW10sIGZhbHNlLCB0cnVlKTtcbiAgfSk7XG5cbiAgdGVzdCgnc3RhY2sgaGFzIGRlcGVuZGVuY3kgYW5kIHdhcyBleHBsaWNpdGx5IHNlbGVjdGVkJywgYXN5bmMgKCkgPT4ge1xuICAgIGNsb3VkRXhlY3V0YWJsZSA9IG5ldyBNb2NrQ2xvdWRFeGVjdXRhYmxlKHtcbiAgICAgIHN0YWNrczogW01vY2tTdGFjay5NT0NLX1NUQUNLX0MsIE1vY2tTdGFjay5NT0NLX1NUQUNLX0RdLFxuICAgIH0pO1xuXG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgIGF3YWl0IHRvb2xraXQuc3ludGgoW01vY2tTdGFjay5NT0NLX1NUQUNLX0Quc3RhY2tOYW1lXSwgdHJ1ZSwgZmFsc2UpO1xuXG4gICAgZXhwZWN0KG1vY2tSZXN1bHQubW9jay5jYWxscy5sZW5ndGgpLnRvRXF1YWwoMSk7XG4gICAgZXhwZWN0KG1vY2tSZXN1bHQubW9jay5jYWxsc1swXVswXSkudG9CZURlZmluZWQoKTtcbiAgfSk7XG5cbiAgdGVzdCgncm9sbGJhY2sgdXNlcyBkZXBsb3ltZW50IHJvbGUnLCBhc3luYyAoKSA9PiB7XG4gICAgY2xvdWRFeGVjdXRhYmxlID0gbmV3IE1vY2tDbG91ZEV4ZWN1dGFibGUoe1xuICAgICAgc3RhY2tzOiBbTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQ10sXG4gICAgfSk7XG5cbiAgICBjb25zdCBtb2NrZWRSb2xsYmFjayA9IGplc3Quc3B5T24oRGVwbG95bWVudHMucHJvdG90eXBlLCAncm9sbGJhY2tTdGFjaycpLm1vY2tSZXNvbHZlZFZhbHVlKHtcbiAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgfSk7XG5cbiAgICBjb25zdCB0b29sa2l0ID0gbmV3IENka1Rvb2xraXQoe1xuICAgICAgY2xvdWRFeGVjdXRhYmxlLFxuICAgICAgY29uZmlndXJhdGlvbjogY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24sXG4gICAgICBzZGtQcm92aWRlcjogY2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLFxuICAgICAgZGVwbG95bWVudHM6IG5ldyBEZXBsb3ltZW50cyh7IHNka1Byb3ZpZGVyOiBuZXcgTW9ja1Nka1Byb3ZpZGVyKCkgfSksXG4gICAgfSk7XG5cbiAgICBhd2FpdCB0b29sa2l0LnJvbGxiYWNrKHtcbiAgICAgIHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbXSB9LFxuICAgIH0pO1xuXG4gICAgZXhwZWN0KG1vY2tlZFJvbGxiYWNrKS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gIH0pO1xuXG4gIHRlc3QuZWFjaChbXG4gICAgW3sgdHlwZTogJ2ZhaWxwYXVzZWQtbmVlZC1yb2xsYmFjay1maXJzdCcsIHJlYXNvbjogJ3JlcGxhY2VtZW50Jywgc3RhdHVzOiAnT09QUycgfSwgZmFsc2VdLFxuICAgIFt7IHR5cGU6ICdmYWlscGF1c2VkLW5lZWQtcm9sbGJhY2stZmlyc3QnLCByZWFzb246ICdyZXBsYWNlbWVudCcsIHN0YXR1czogJ09PUFMnIH0sIHRydWVdLFxuICAgIFt7IHR5cGU6ICdmYWlscGF1c2VkLW5lZWQtcm9sbGJhY2stZmlyc3QnLCByZWFzb246ICdub3Qtbm9yb2xsYmFjaycsIHN0YXR1czogJ09PUFMnIH0sIGZhbHNlXSxcbiAgICBbeyB0eXBlOiAncmVwbGFjZW1lbnQtcmVxdWlyZXMtcm9sbGJhY2snIH0sIGZhbHNlXSxcbiAgICBbeyB0eXBlOiAncmVwbGFjZW1lbnQtcmVxdWlyZXMtcm9sbGJhY2snIH0sIHRydWVdLFxuICBdIHNhdGlzZmllcyBBcnJheTxbRGVwbG95U3RhY2tSZXN1bHQsIGJvb2xlYW5dPikoJ25vLXJvbGxiYWNrIGRlcGxveW1lbnQgdGhhdCBjYW50IHByb2NlZWQgd2lsbCBiZSBjYWxsZWQgd2l0aCByb2xsYmFjayBvbiByZXRyeTogJXAgKHVzaW5nIGZvcmNlOiAlcCknLCBhc3luYyAoZmlyc3RSZXN1bHQsIHVzZUZvcmNlKSA9PiB7XG4gICAgY2xvdWRFeGVjdXRhYmxlID0gbmV3IE1vY2tDbG91ZEV4ZWN1dGFibGUoe1xuICAgICAgc3RhY2tzOiBbXG4gICAgICAgIE1vY2tTdGFjay5NT0NLX1NUQUNLX0MsXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgY29uc3QgZGVwbG95bWVudHMgPSBuZXcgRGVwbG95bWVudHMoeyBzZGtQcm92aWRlcjogbmV3IE1vY2tTZGtQcm92aWRlcigpIH0pO1xuXG4gICAgLy8gUm9sbGJhY2sgbWlnaHQgYmUgY2FsbGVkIC0tIGp1c3QgZG9uJ3QgZG8gYW55dGhpbmcuXG4gICAgY29uc3QgbW9ja1JvbGxiYWNrU3RhY2sgPSBqZXN0LnNweU9uKGRlcGxveW1lbnRzLCAncm9sbGJhY2tTdGFjaycpLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcblxuICAgIGNvbnN0IG1vY2tlZERlcGxveVN0YWNrID0gamVzdFxuICAgICAgLnNweU9uKGRlcGxveW1lbnRzLCAnZGVwbG95U3RhY2snKVxuICAgICAgLm1vY2tSZXNvbHZlZFZhbHVlT25jZShmaXJzdFJlc3VsdClcbiAgICAgIC5tb2NrUmVzb2x2ZWRWYWx1ZU9uY2Uoe1xuICAgICAgICB0eXBlOiAnZGlkLWRlcGxveS1zdGFjaycsXG4gICAgICAgIG5vT3A6IGZhbHNlLFxuICAgICAgICBvdXRwdXRzOiB7fSxcbiAgICAgICAgc3RhY2tBcm46ICdzdGFjazphcm4nLFxuICAgICAgfSk7XG5cbiAgICBjb25zdCBtb2NrZWRDb25maXJtID0gamVzdC5zcHlPbihwcm9tcHRseSwgJ2NvbmZpcm0nKS5tb2NrUmVzb2x2ZWRWYWx1ZSh0cnVlKTtcblxuICAgIGNvbnN0IHRvb2xraXQgPSBuZXcgQ2RrVG9vbGtpdCh7XG4gICAgICBjbG91ZEV4ZWN1dGFibGUsXG4gICAgICBjb25maWd1cmF0aW9uOiBjbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbixcbiAgICAgIHNka1Byb3ZpZGVyOiBjbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIsXG4gICAgICBkZXBsb3ltZW50cyxcbiAgICB9KTtcblxuICAgIGF3YWl0IHRvb2xraXQuZGVwbG95KHtcbiAgICAgIHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbXSB9LFxuICAgICAgaG90c3dhcDogSG90c3dhcE1vZGUuRlVMTF9ERVBMT1lNRU5ULFxuICAgICAgcm9sbGJhY2s6IGZhbHNlLFxuICAgICAgcmVxdWlyZUFwcHJvdmFsOiBSZXF1aXJlQXBwcm92YWwuTmV2ZXIsXG4gICAgICBmb3JjZTogdXNlRm9yY2UsXG4gICAgfSk7XG5cbiAgICBpZiAoZmlyc3RSZXN1bHQudHlwZSA9PT0gJ2ZhaWxwYXVzZWQtbmVlZC1yb2xsYmFjay1maXJzdCcpIHtcbiAgICAgIGV4cGVjdChtb2NrUm9sbGJhY2tTdGFjaykudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIH1cblxuICAgIGlmICghdXNlRm9yY2UpIHtcbiAgICAgIC8vIFF1ZXN0aW9ucyB3aWxsIGhhdmUgYmVlbiBhc2tlZCBvbmx5IGlmIC0tZm9yY2UgaXMgbm90IHNwZWNpZmllZFxuICAgICAgaWYgKGZpcnN0UmVzdWx0LnR5cGUgPT09ICdmYWlscGF1c2VkLW5lZWQtcm9sbGJhY2stZmlyc3QnKSB7XG4gICAgICAgIGV4cGVjdChtb2NrZWRDb25maXJtKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3Quc3RyaW5nQ29udGFpbmluZygnUm9sbCBiYWNrIGZpcnN0IGFuZCB0aGVuIHByb2NlZWQgd2l0aCBkZXBsb3ltZW50JykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXhwZWN0KG1vY2tlZENvbmZpcm0pLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKGV4cGVjdC5zdHJpbmdDb250YWluaW5nKCdQZXJmb3JtIGEgcmVndWxhciBkZXBsb3ltZW50JykpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGV4cGVjdChtb2NrZWREZXBsb3lTdGFjaykudG9IYXZlQmVlbk50aENhbGxlZFdpdGgoMSwgZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoeyByb2xsYmFjazogZmFsc2UgfSkpO1xuICAgIGV4cGVjdChtb2NrZWREZXBsb3lTdGFjaykudG9IYXZlQmVlbk50aENhbGxlZFdpdGgoMiwgZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoeyByb2xsYmFjazogdHJ1ZSB9KSk7XG4gIH0pO1xufSk7XG5cbmNsYXNzIE1vY2tTdGFjayB7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTU9DS19TVEFDS19BOiBUZXN0U3RhY2tBcnRpZmFjdCA9IHtcbiAgICBzdGFja05hbWU6ICdUZXN0LVN0YWNrLUEnLFxuICAgIHRlbXBsYXRlOiB7IFJlc291cmNlczogeyBUZW1wbGF0ZU5hbWU6ICdUZXN0LVN0YWNrLUEnIH0gfSxcbiAgICBlbnY6ICdhd3M6Ly8xMjM0NTY3ODkwMTIvYmVybXVkYS10cmlhbmdsZS0xJyxcbiAgICBtZXRhZGF0YToge1xuICAgICAgJy9UZXN0LVN0YWNrLUEnOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBjeHNjaGVtYS5BcnRpZmFjdE1ldGFkYXRhRW50cnlUeXBlLlNUQUNLX1RBR1MsXG4gICAgICAgICAgZGF0YTogW3sga2V5OiAnRm9vJywgdmFsdWU6ICdCYXInIH1dLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIGRpc3BsYXlOYW1lOiAnVGVzdC1TdGFjay1BLURpc3BsYXktTmFtZScsXG4gIH07XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTU9DS19TVEFDS19COiBUZXN0U3RhY2tBcnRpZmFjdCA9IHtcbiAgICBzdGFja05hbWU6ICdUZXN0LVN0YWNrLUInLFxuICAgIHRlbXBsYXRlOiB7IFJlc291cmNlczogeyBUZW1wbGF0ZU5hbWU6ICdUZXN0LVN0YWNrLUInIH0gfSxcbiAgICBlbnY6ICdhd3M6Ly8xMjM0NTY3ODkwMTIvYmVybXVkYS10cmlhbmdsZS0xJyxcbiAgICBtZXRhZGF0YToge1xuICAgICAgJy9UZXN0LVN0YWNrLUInOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBjeHNjaGVtYS5BcnRpZmFjdE1ldGFkYXRhRW50cnlUeXBlLlNUQUNLX1RBR1MsXG4gICAgICAgICAgZGF0YTogW3sga2V5OiAnQmF6JywgdmFsdWU6ICdaaW5nYSEnIH1dLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICB9O1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1PQ0tfU1RBQ0tfQzogVGVzdFN0YWNrQXJ0aWZhY3QgPSB7XG4gICAgc3RhY2tOYW1lOiAnVGVzdC1TdGFjay1DJyxcbiAgICB0ZW1wbGF0ZTogeyBSZXNvdXJjZXM6IHsgVGVtcGxhdGVOYW1lOiAnVGVzdC1TdGFjay1DJyB9IH0sXG4gICAgZW52OiAnYXdzOi8vMTIzNDU2Nzg5MDEyL2Jlcm11ZGEtdHJpYW5nbGUtMScsXG4gICAgbWV0YWRhdGE6IHtcbiAgICAgICcvVGVzdC1TdGFjay1DJzogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogY3hzY2hlbWEuQXJ0aWZhY3RNZXRhZGF0YUVudHJ5VHlwZS5TVEFDS19UQUdTLFxuICAgICAgICAgIGRhdGE6IFt7IGtleTogJ0JheicsIHZhbHVlOiAnWmluZ2EhJyB9XSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICBkaXNwbGF5TmFtZTogJ1Rlc3QtU3RhY2stQS9UZXN0LVN0YWNrLUMnLFxuICB9O1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1PQ0tfU1RBQ0tfRDogVGVzdFN0YWNrQXJ0aWZhY3QgPSB7XG4gICAgc3RhY2tOYW1lOiAnVGVzdC1TdGFjay1EJyxcbiAgICB0ZW1wbGF0ZTogeyBSZXNvdXJjZXM6IHsgVGVtcGxhdGVOYW1lOiAnVGVzdC1TdGFjay1EJyB9IH0sXG4gICAgZW52OiAnYXdzOi8vMTIzNDU2Nzg5MDEyL2Jlcm11ZGEtdHJpYW5nbGUtMScsXG4gICAgbWV0YWRhdGE6IHtcbiAgICAgICcvVGVzdC1TdGFjay1EJzogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogY3hzY2hlbWEuQXJ0aWZhY3RNZXRhZGF0YUVudHJ5VHlwZS5TVEFDS19UQUdTLFxuICAgICAgICAgIGRhdGE6IFt7IGtleTogJ0JheicsIHZhbHVlOiAnWmluZ2EhJyB9XSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICBkZXBlbmRzOiBbTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQy5zdGFja05hbWVdLFxuICB9O1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1PQ0tfU1RBQ0tfV0lUSF9FUlJPUjogVGVzdFN0YWNrQXJ0aWZhY3QgPSB7XG4gICAgc3RhY2tOYW1lOiAnd2l0aGVycm9ycycsXG4gICAgZW52OiAnYXdzOi8vMTIzNDU2Nzg5MDEyL2Jlcm11ZGEtdHJpYW5nbGUtMScsXG4gICAgdGVtcGxhdGU6IHsgcmVzb3VyY2U6ICdlcnJvcnJlc291cmNlJyB9LFxuICAgIG1ldGFkYXRhOiB7XG4gICAgICAnL3Jlc291cmNlJzogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogY3hzY2hlbWEuQXJ0aWZhY3RNZXRhZGF0YUVudHJ5VHlwZS5FUlJPUixcbiAgICAgICAgICBkYXRhOiAndGhpcyBpcyBhbiBlcnJvcicsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gICAgZGlzcGxheU5hbWU6ICdUZXN0LVN0YWNrLUEvd2l0aGVycm9ycycsXG4gIH07XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTU9DS19TVEFDS19XSVRIX0FTU0VUOiBUZXN0U3RhY2tBcnRpZmFjdCA9IHtcbiAgICBzdGFja05hbWU6ICdUZXN0LVN0YWNrLUFzc2V0JyxcbiAgICB0ZW1wbGF0ZTogeyBSZXNvdXJjZXM6IHsgVGVtcGxhdGVOYW1lOiAnVGVzdC1TdGFjay1Bc3NldCcgfSB9LFxuICAgIGVudjogJ2F3czovLzEyMzQ1Njc4OTAxMi9iZXJtdWRhLXRyaWFuZ2xlLTEnLFxuICAgIGFzc2V0TWFuaWZlc3Q6IHtcbiAgICAgIHZlcnNpb246IE1hbmlmZXN0LnZlcnNpb24oKSxcbiAgICAgIGZpbGVzOiB7XG4gICAgICAgIHh5ejoge1xuICAgICAgICAgIHNvdXJjZToge1xuICAgICAgICAgICAgcGF0aDogcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uJywgJ0xJQ0VOU0UnKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGRlc3RpbmF0aW9uczoge30sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTU9DS19TVEFDS19XSVRIX05PVElGSUNBVElPTl9BUk5TOiBUZXN0U3RhY2tBcnRpZmFjdCA9IHtcbiAgICBzdGFja05hbWU6ICdUZXN0LVN0YWNrLU5vdGlmaWNhdGlvbi1Bcm5zJyxcbiAgICBub3RpZmljYXRpb25Bcm5zOiBbJ2Fybjphd3M6c25zOmJlcm11ZGEtdHJpYW5nbGUtMTMzNzoxMjM0NTY3ODkwMTI6TXlUb3BpYyddLFxuICAgIHRlbXBsYXRlOiB7IFJlc291cmNlczogeyBUZW1wbGF0ZU5hbWU6ICdUZXN0LVN0YWNrLU5vdGlmaWNhdGlvbi1Bcm5zJyB9IH0sXG4gICAgZW52OiAnYXdzOi8vMTIzNDU2Nzg5MDEyL2Jlcm11ZGEtdHJpYW5nbGUtMTMzNycsXG4gICAgbWV0YWRhdGE6IHtcbiAgICAgICcvVGVzdC1TdGFjay1Ob3RpZmljYXRpb24tQXJucyc6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IGN4c2NoZW1hLkFydGlmYWN0TWV0YWRhdGFFbnRyeVR5cGUuU1RBQ0tfVEFHUyxcbiAgICAgICAgICBkYXRhOiBbeyBrZXk6ICdGb28nLCB2YWx1ZTogJ0JhcicgfV0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gIH07XG5cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNT0NLX1NUQUNLX1dJVEhfQkFEX05PVElGSUNBVElPTl9BUk5TOiBUZXN0U3RhY2tBcnRpZmFjdCA9IHtcbiAgICBzdGFja05hbWU6ICdUZXN0LVN0YWNrLUJhZC1Ob3RpZmljYXRpb24tQXJucycsXG4gICAgbm90aWZpY2F0aW9uQXJuczogWydhcm46MTMzNzoxMjM0NTY3ODkwMTI6c25zOmJhZCddLFxuICAgIHRlbXBsYXRlOiB7IFJlc291cmNlczogeyBUZW1wbGF0ZU5hbWU6ICdUZXN0LVN0YWNrLUJhZC1Ob3RpZmljYXRpb24tQXJucycgfSB9LFxuICAgIGVudjogJ2F3czovLzEyMzQ1Njc4OTAxMi9iZXJtdWRhLXRyaWFuZ2xlLTEzMzcnLFxuICAgIG1ldGFkYXRhOiB7XG4gICAgICAnL1Rlc3QtU3RhY2stQmFkLU5vdGlmaWNhdGlvbi1Bcm5zJzogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogY3hzY2hlbWEuQXJ0aWZhY3RNZXRhZGF0YUVudHJ5VHlwZS5TVEFDS19UQUdTLFxuICAgICAgICAgIGRhdGE6IFt7IGtleTogJ0ZvbycsIHZhbHVlOiAnQmFyJyB9XSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgfTtcbn1cblxuY2xhc3MgRmFrZUNsb3VkRm9ybWF0aW9uIGV4dGVuZHMgRGVwbG95bWVudHMge1xuICBwcml2YXRlIHJlYWRvbmx5IGV4cGVjdGVkVGFnczogeyBbc3RhY2tOYW1lOiBzdHJpbmddOiBUYWdbXSB9ID0ge307XG4gIHByaXZhdGUgcmVhZG9ubHkgZXhwZWN0ZWROb3RpZmljYXRpb25Bcm5zPzogc3RyaW5nW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgZXhwZWN0ZWRUYWdzOiB7IFtzdGFja05hbWU6IHN0cmluZ106IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gfSA9IHt9LFxuICAgIGV4cGVjdGVkTm90aWZpY2F0aW9uQXJucz86IHN0cmluZ1tdLFxuICApIHtcbiAgICBzdXBlcih7IHNka1Byb3ZpZGVyOiBuZXcgTW9ja1Nka1Byb3ZpZGVyKCkgfSk7XG5cbiAgICBmb3IgKGNvbnN0IFtzdGFja05hbWUsIHRhZ3NdIG9mIE9iamVjdC5lbnRyaWVzKGV4cGVjdGVkVGFncykpIHtcbiAgICAgIHRoaXMuZXhwZWN0ZWRUYWdzW3N0YWNrTmFtZV0gPSBPYmplY3QuZW50cmllcyh0YWdzKVxuICAgICAgICAubWFwKChbS2V5LCBWYWx1ZV0pID0+ICh7IEtleSwgVmFsdWUgfSkpXG4gICAgICAgIC5zb3J0KChsLCByKSA9PiBsLktleS5sb2NhbGVDb21wYXJlKHIuS2V5KSk7XG4gICAgfVxuICAgIHRoaXMuZXhwZWN0ZWROb3RpZmljYXRpb25Bcm5zID0gZXhwZWN0ZWROb3RpZmljYXRpb25Bcm5zO1xuICB9XG5cbiAgcHVibGljIGRlcGxveVN0YWNrKG9wdGlvbnM6IERlcGxveVN0YWNrT3B0aW9ucyk6IFByb21pc2U8U3VjY2Vzc2Z1bERlcGxveVN0YWNrUmVzdWx0PiB7XG4gICAgZXhwZWN0KFtcbiAgICAgIE1vY2tTdGFjay5NT0NLX1NUQUNLX0Euc3RhY2tOYW1lLFxuICAgICAgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQi5zdGFja05hbWUsXG4gICAgICBNb2NrU3RhY2suTU9DS19TVEFDS19DLnN0YWNrTmFtZSxcbiAgICAgIC8vIE1vY2tTdGFjay5NT0NLX1NUQUNLX0QgZGVsaWJlcmF0ZWx5IG9taXR0ZWQuXG4gICAgICBNb2NrU3RhY2suTU9DS19TVEFDS19XSVRIX0FTU0VULnN0YWNrTmFtZSxcbiAgICAgIE1vY2tTdGFjay5NT0NLX1NUQUNLX1dJVEhfRVJST1Iuc3RhY2tOYW1lLFxuICAgICAgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfV0lUSF9OT1RJRklDQVRJT05fQVJOUy5zdGFja05hbWUsXG4gICAgICBNb2NrU3RhY2suTU9DS19TVEFDS19XSVRIX0JBRF9OT1RJRklDQVRJT05fQVJOUy5zdGFja05hbWUsXG4gICAgXSkudG9Db250YWluKG9wdGlvbnMuc3RhY2suc3RhY2tOYW1lKTtcblxuICAgIGlmICh0aGlzLmV4cGVjdGVkVGFnc1tvcHRpb25zLnN0YWNrLnN0YWNrTmFtZV0pIHtcbiAgICAgIGV4cGVjdChvcHRpb25zLnRhZ3MpLnRvRXF1YWwodGhpcy5leHBlY3RlZFRhZ3Nbb3B0aW9ucy5zdGFjay5zdGFja05hbWVdKTtcbiAgICB9XG5cbiAgICAvLyBJbiB0aGVzZSB0ZXN0cywgd2UgZG9uJ3QgbWFrZSBhIGRpc3RpbmN0aW9uIGhlcmUgYmV0d2VlbiBgdW5kZWZpbmVkYCBhbmQgYFtdYC5cbiAgICAvL1xuICAgIC8vIEluIHRlc3RzIGBkZXBsb3lTdGFja2AgaXRzZWxmIHdlIGRvIHRyZWF0IGB1bmRlZmluZWRgIGFuZCBgW11gIGRpZmZlcmVudGx5LFxuICAgIC8vIGFuZCBpbiBgYXdzLWNkay1saWJgIHdlIGVtaXQgdGhlbSB1bmRlciBkaWZmZXJlbnQgY29uZGl0aW9ucy4gQnV0IHRoaXMgdGVzdFxuICAgIC8vIHdpdGhvdXQgbm9ybWFsaXphdGlvbiBkZXBlbmRzIG9uIGEgdmVyc2lvbiBvZiBgYXdzLWNkay1saWJgIHRoYXQgaGFzbid0IGJlZW5cbiAgICAvLyByZWxlYXNlZCB5ZXQuXG4gICAgZXhwZWN0KG9wdGlvbnMubm90aWZpY2F0aW9uQXJucyA/PyBbXSkudG9FcXVhbCh0aGlzLmV4cGVjdGVkTm90aWZpY2F0aW9uQXJucyA/PyBbXSk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG4gICAgICB0eXBlOiAnZGlkLWRlcGxveS1zdGFjaycsXG4gICAgICBzdGFja0FybjogYGFybjphd3M6Y2xvdWRmb3JtYXRpb246OjpzdGFjay8ke29wdGlvbnMuc3RhY2suc3RhY2tOYW1lfS9Nb2NrZWRPdXRgLFxuICAgICAgbm9PcDogZmFsc2UsXG4gICAgICBvdXRwdXRzOiB7IFN0YWNrTmFtZTogb3B0aW9ucy5zdGFjay5zdGFja05hbWUgfSxcbiAgICAgIHN0YWNrQXJ0aWZhY3Q6IG9wdGlvbnMuc3RhY2ssXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgcm9sbGJhY2tTdGFjayhfb3B0aW9uczogUm9sbGJhY2tTdGFja09wdGlvbnMpOiBQcm9taXNlPFJvbGxiYWNrU3RhY2tSZXN1bHQ+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZGVzdHJveVN0YWNrKG9wdGlvbnM6IERlc3Ryb3lTdGFja09wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBleHBlY3Qob3B0aW9ucy5zdGFjaykudG9CZURlZmluZWQoKTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICBwdWJsaWMgcmVhZEN1cnJlbnRUZW1wbGF0ZShzdGFjazogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0KTogUHJvbWlzZTxUZW1wbGF0ZT4ge1xuICAgIHN3aXRjaCAoc3RhY2suc3RhY2tOYW1lKSB7XG4gICAgICBjYXNlIE1vY2tTdGFjay5NT0NLX1NUQUNLX0Euc3RhY2tOYW1lOlxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgICAgIGNhc2UgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQi5zdGFja05hbWU6XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICAgICAgY2FzZSBNb2NrU3RhY2suTU9DS19TVEFDS19DLnN0YWNrTmFtZTpcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG4gICAgICBjYXNlIE1vY2tTdGFjay5NT0NLX1NUQUNLX1dJVEhfQVNTRVQuc3RhY2tOYW1lOlxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgICAgIGNhc2UgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfV0lUSF9OT1RJRklDQVRJT05fQVJOUy5zdGFja05hbWU6XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICAgICAgY2FzZSBNb2NrU3RhY2suTU9DS19TVEFDS19XSVRIX0JBRF9OT1RJRklDQVRJT05fQVJOUy5zdGFja05hbWU6XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBub3QgYW4gZXhwZWN0ZWQgbW9jayBzdGFjazogJHtzdGFjay5zdGFja05hbWV9YCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNsaVRlc3QobmFtZTogc3RyaW5nLCBoYW5kbGVyOiAoZGlyOiBzdHJpbmcpID0+IHZvaWQgfCBQcm9taXNlPGFueT4pOiB2b2lkIHtcbiAgdGVzdChuYW1lLCAoKSA9PiB3aXRoVGVtcERpcihoYW5kbGVyKSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdpdGhUZW1wRGlyKGNiOiAoZGlyOiBzdHJpbmcpID0+IHZvaWQgfCBQcm9taXNlPGFueT4pIHtcbiAgY29uc3QgdG1wRGlyID0gYXdhaXQgZnMubWtkdGVtcChwYXRoLmpvaW4ob3MudG1wZGlyKCksICdhd3MtY2RrLXRlc3QnKSk7XG4gIHRyeSB7XG4gICAgYXdhaXQgY2IodG1wRGlyKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBmcy5yZW1vdmUodG1wRGlyKTtcbiAgfVxufVxuIl19