@dollhousemcp/mcp-server 1.6.7 → 1.6.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -2884,25 +2884,35 @@ export class DollhouseMCPServer {
2884
2884
  await configManager.loadConfig();
2885
2885
  // If no client_id provided, show current configuration status
2886
2886
  if (!client_id) {
2887
- const currentClientId = configManager.getGitHubClientId();
2887
+ // Check what OAuth client ID will actually be used
2888
+ // This matches the logic in GitHubAuthManager.getClientId()
2889
+ const currentClientId = await GitHubAuthManager.getClientId();
2888
2890
  if (currentClientId) {
2891
+ // Check if it's using the default or a custom config
2892
+ const configuredClientId = configManager.getGitHubClientId();
2893
+ const isUsingDefault = !configuredClientId;
2889
2894
  // Show first 10 characters for security
2890
2895
  const maskedClientId = currentClientId.substring(0, 10) + '...';
2891
2896
  return {
2892
2897
  content: [{
2893
2898
  type: "text",
2894
2899
  text: `${this.getPersonaIndicator()}✅ **GitHub OAuth Configuration**\n\n` +
2895
- `**Current Status:** Configured\n` +
2896
- `**Client ID:** ${maskedClientId}\n\n` +
2900
+ `**Current Status:** ${isUsingDefault ? 'Using Default' : 'Configured'}\n` +
2901
+ `**Client ID:** ${maskedClientId}\n` +
2902
+ `**Source:** ${isUsingDefault ? 'Built-in DollhouseMCP OAuth App' : 'Custom Configuration'}\n\n` +
2897
2903
  `Your GitHub OAuth is ready to use! You can now:\n` +
2898
2904
  `• Run setup_github_auth to connect\n` +
2899
2905
  `• Submit content to the collection\n` +
2900
2906
  `• Access authenticated features\n\n` +
2901
- `To update the configuration, provide a new client_id parameter.`
2907
+ (isUsingDefault ?
2908
+ `**Note:** Using the default DollhouseMCP OAuth app.\n` +
2909
+ `To use your own OAuth app, provide a client_id parameter.\n\n` :
2910
+ `To update the configuration, provide a new client_id parameter.\n\n`)
2902
2911
  }]
2903
2912
  };
2904
2913
  }
2905
2914
  else {
2915
+ // This should never happen since GitHubAuthManager.getClientId() always returns something
2906
2916
  return {
2907
2917
  content: [{
2908
2918
  type: "text",
@@ -4936,4 +4946,4 @@ if ((isDirectExecution || isNpxExecution || isCliExecution) && !isTest) {
4936
4946
  process.exit(1);
4937
4947
  });
4938
4948
  }
4939
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUVBLGlEQUFpRDtBQUNqRCxPQUFPLENBQUMsRUFBRSxDQUFDLG1CQUFtQixFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7SUFDeEMsT0FBTyxDQUFDLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO0lBQ3RELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsQ0FBQyxDQUFDLENBQUM7QUFFSCxPQUFPLENBQUMsRUFBRSxDQUFDLG9CQUFvQixFQUFFLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxFQUFFO0lBQ25ELE9BQU8sQ0FBQyxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztJQUN0RCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLENBQUMsQ0FBQyxDQUFDO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDekUsT0FBTyxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEMsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBd0IsTUFBTSw4QkFBOEIsQ0FBQztBQUNoSSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFlBQVksRUFBaUIsTUFBTSx5QkFBeUIs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R0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksY0FBYyxDQUFDLEVBQUUsQ0FBQztZQUMxRCxnQ0FBZ0M7WUFDaEMsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUM7WUFDdkQsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDekQsT0FBTyxvQkFBb0IsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDL0MsQ0FBQztRQUNELHFEQUFxRDtRQUNyRCxvRkFBb0Y7UUFDcEYsT0FBTyxDQUFDLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1FBQ3RELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQztBQUNILENBQUM7QUFFRCxJQUFJLENBQUMsaUJBQWlCLElBQUksY0FBYyxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDdkUsb0JBQW9CLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFO1FBQ2hDLG9GQUFvRjtRQUNwRixPQUFPLENBQUMsS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7UUFDdEQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIjIS91c3IvYmluL2VudiBub2RlXG5cbi8vIERlZmVuc2l2ZSBlcnJvciBoYW5kbGluZyBmb3IgbnB4L0NMSSBleGVjdXRpb25cbnByb2Nlc3Mub24oJ3VuY2F1Z2h0RXhjZXB0aW9uJywgKGVycm9yKSA9PiB7XG4gIGNvbnNvbGUuZXJyb3IoJ1tEb2xsaG91c2VNQ1BdIFNlcnZlciBzdGFydHVwIGZhaWxlZCcpO1xuICBwcm9jZXNzLmV4aXQoMSk7XG59KTtcblxucHJvY2Vzcy5vbigndW5oYW5kbGVkUmVqZWN0aW9uJywgKHJlYXNvbiwgcHJvbWlzZSkgPT4ge1xuICBjb25zb2xlLmVycm9yKCdbRG9sbGhvdXNlTUNQXSBTZXJ2ZXIgc3RhcnR1cCBmYWlsZWQnKTtcbiAgcHJvY2Vzcy5leGl0KDEpO1xufSk7XG5cbmltcG9ydCB7IFNlcnZlciB9IGZyb20gXCJAbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrL3NlcnZlci9pbmRleC5qc1wiO1xuaW1wb3J0IHsgU3RkaW9TZXJ2ZXJUcmFuc3BvcnQgfSBmcm9tIFwiQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay9zZXJ2ZXIvc3RkaW8uanNcIjtcbmltcG9ydCB7IE1jcEVycm9yLCBFcnJvckNvZGUgfSBmcm9tIFwiQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay90eXBlcy5qc1wiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBsb2FkSW5kaWNhdG9yQ29uZmlnLCBmb3JtYXRJbmRpY2F0b3IsIHZhbGlkYXRlQ3VzdG9tRm9ybWF0LCB0eXBlIEluZGljYXRvckNvbmZpZyB9IGZyb20gJy4vY29uZmlnL2luZGljYXRvci1jb25maWcuanMnO1xuaW1wb3J0IHsgU2VjdXJlWWFtbFBhcnNlciB9IGZyb20gJy4vc2VjdXJpdHkvc2VjdXJlWWFtbFBhcnNlci5qcyc7XG5pbXBvcnQgeyBTZWN1cml0eUVycm9yIH0gZnJvbSAnLi9lcnJvcnMvU2VjdXJpdHlFcnJvci5qcyc7XG5pbXBvcnQgeyBTZWN1cmVFcnJvckhhbmRsZXIgfSBmcm9tICcuL3NlY3VyaXR5L2Vycm9ySGFuZGxlci5qcyc7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXIsIEVycm9yQ2F0ZWdvcnkgfSBmcm9tICcuL3V0aWxzL0Vycm9ySGFuZGxlci5qcyc7XG5cbi8vIEltcG9ydCBtb2R1bGFyaXplZCBjb21wb25lbnRzXG5pbXBvcnQgeyBQZXJzb25hLCBQZXJzb25hTWV0YWRhdGEgfSBmcm9tICcuL3R5cGVzL3BlcnNvbmEuanMnO1xuaW1wb3J0IHsgQVBJQ2FjaGUsIENvbGxlY3Rpb25DYWNoZSB9IGZyb20gJy4vY2FjaGUvaW5kZXguanMnO1xuaW1wb3J0IHsgdmFsaWRhdGVGaWxlbmFtZSwgc2FuaXRpemVJbnB1dCwgdmFsaWRhdGVDb250ZW50U2l6ZSwgdmFsaWRhdGVVc2VybmFtZSwgTUNQSW5wdXRWYWxpZGF0b3IgfSBmcm9tICcuL3NlY3VyaXR5L0lucHV0VmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IFNFQ1VSSVRZX0xJTUlUUywgVkFMSURBVElPTl9QQVRURVJOUyB9IGZyb20gJy4vc2VjdXJpdHkvY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IENvbnRlbnRWYWxpZGF0b3IgfSBmcm9tICcuL3NlY3VyaXR5L2NvbnRlbnRWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgUGF0aFZhbGlkYXRvciB9IGZyb20gJy4vc2VjdXJpdHkvcGF0aFZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBGaWxlTG9ja01hbmFnZXIgfSBmcm9tICcuL3NlY3VyaXR5L2ZpbGVMb2NrTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBnZW5lcmF0ZUFub255bW91c0lkLCBnZW5lcmF0ZVVuaXF1ZUlkLCBzbHVnaWZ5IH0gZnJvbSAnLi91dGlscy9maWxlc3lzdGVtLmpzJztcbmltcG9ydCB7IEdpdEh1YkNsaWVudCwgQ29sbGVjdGlvbkJyb3dzZXIsIENvbGxlY3Rpb25JbmRleE1hbmFnZXIsIENvbGxlY3Rpb25TZWFyY2gsIFBlcnNvbmFEZXRhaWxzLCBQZXJzb25hU3VibWl0dGVyLCBFbGVtZW50SW5zdGFsbGVyIH0gZnJvbSAnLi9jb2xsZWN0aW9uL2luZGV4LmpzJztcbmltcG9ydCB7IFNlcnZlclNldHVwLCBJVG9vbEhhbmRsZXIgfSBmcm9tICcuL3NlcnZlci9pbmRleC5qcyc7XG5pbXBvcnQgeyBHaXRIdWJBdXRoTWFuYWdlciwgdHlwZSBEZXZpY2VDb2RlUmVzcG9uc2UgfSBmcm9tICcuL2F1dGgvR2l0SHViQXV0aE1hbmFnZXIuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgUGVyc29uYUV4cG9ydGVyLCBQZXJzb25hSW1wb3J0ZXIsIFBlcnNvbmFTaGFyZXIgfSBmcm9tICcuL3BlcnNvbmEvZXhwb3J0LWltcG9ydC9pbmRleC5qcyc7XG5pbXBvcnQgeyBpc0RlZmF1bHRQZXJzb25hIH0gZnJvbSAnLi9jb25zdGFudHMvZGVmYXVsdFBlcnNvbmFzLmpzJztcbmltcG9ydCB7IFBvcnRmb2xpb01hbmFnZXIsIEVsZW1lbnRUeXBlIH0gZnJvbSAnLi9wb3J0Zm9saW8vUG9ydGZvbGlvTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBNaWdyYXRpb25NYW5hZ2VyIH0gZnJvbSAnLi9wb3J0Zm9saW8vTWlncmF0aW9uTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBTa2lsbE1hbmFnZXIgfSBmcm9tICcuL2VsZW1lbnRzL3NraWxscy9pbmRleC5qcyc7XG5pbXBvcnQgeyBTa2lsbCB9IGZyb20gJy4vZWxlbWVudHMvc2tpbGxzL1NraWxsLmpzJztcbmltcG9ydCB7IFRlbXBsYXRlTWFuYWdlciB9IGZyb20gJy4vZWxlbWVudHMvdGVtcGxhdGVzL1RlbXBsYXRlTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gJy4vZWxlbWVudHMvdGVtcGxhdGVzL1RlbXBsYXRlLmpzJztcbmltcG9ydCB7IEFnZW50TWFuYWdlciB9IGZyb20gJy4vZWxlbWVudHMvYWdlbnRzL0FnZW50TWFuYWdlci5qcyc7XG5pbXBvcnQgeyBBZ2VudCB9IGZyb20gJy4vZWxlbWVudHMvYWdlbnRzL0FnZW50LmpzJztcbmltcG9ydCB7IENvbmZpZ01hbmFnZXIgfSBmcm9tICcuL2NvbmZpZy9Db25maWdNYW5hZ2VyLmpzJztcbmltcG9ydCB7IHNwYXduIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSAndXJsJztcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tICdvcyc7XG5cblxuXG4vLyBEZXRlY3QgZXhlY3V0aW9uIGVudmlyb25tZW50XG5jb25zdCBFWEVDVVRJT05fRU5WID0ge1xuICBpc05weDogcHJvY2Vzcy5lbnYubnBtX2V4ZWNwYXRoPy5pbmNsdWRlcygnbnB4JykgfHwgZmFsc2UsXG4gIGlzQ2xpOiBwcm9jZXNzLmFyZ3ZbMV0/LmVuZHNXaXRoKCcvZG9sbGhvdXNlbWNwJykgfHwgZmFsc2UsXG4gIGlzRGlyZWN0OiAhcHJvY2Vzcy5lbnYubnBtX2V4ZWNwYXRoLFxuICBjd2Q6IHByb2Nlc3MuY3dkKCksXG4gIHNjcmlwdFBhdGg6IHByb2Nlc3MuYXJndlsxXSxcbn07XG5cbi8vIE9ubHkgbG9nIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCBpbiBkZWJ1ZyBtb2RlXG5pZiAocHJvY2Vzcy5lbnYuRE9MTEhPVVNFX0RFQlVHKSB7XG4gIGNvbnNvbGUuZXJyb3IoJ1tEb2xsaG91c2VNQ1BdIERlYnVnIG1vZGUgZW5hYmxlZCcpO1xufVxuXG5leHBvcnQgY2xhc3MgRG9sbGhvdXNlTUNQU2VydmVyIGltcGxlbWVudHMgSVRvb2xIYW5kbGVyIHtcbiAgcHJpdmF0ZSBzZXJ2ZXI6IFNlcnZlcjtcbiAgcHVibGljIHBlcnNvbmFzRGlyOiBzdHJpbmcgfCBudWxsO1xuICBwcml2YXRlIHBlcnNvbmFzOiBNYXA8c3RyaW5nLCBQZXJzb25hPiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSBhY3RpdmVQZXJzb25hOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjdXJyZW50VXNlcjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgaXNJbml0aWFsaXplZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGluaXRpYWxpemF0aW9uUHJvbWlzZTogUHJvbWlzZTx2b2lkPiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGFwaUNhY2hlOiBBUElDYWNoZSA9IG5ldyBBUElDYWNoZSgpO1xuICBwcml2YXRlIGNvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlID0gbmV3IENvbGxlY3Rpb25DYWNoZSgpO1xuICBwcml2YXRlIHJhdGVMaW1pdFRyYWNrZXIgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyW10+KCk7XG4gIHByaXZhdGUgaW5kaWNhdG9yQ29uZmlnOiBJbmRpY2F0b3JDb25maWc7XG4gIHByaXZhdGUgZ2l0aHViQ2xpZW50OiBHaXRIdWJDbGllbnQ7XG4gIHByaXZhdGUgZ2l0aHViQXV0aE1hbmFnZXI6IEdpdEh1YkF1dGhNYW5hZ2VyO1xuICBwcml2YXRlIGNvbGxlY3Rpb25JbmRleE1hbmFnZXI6IENvbGxlY3Rpb25JbmRleE1hbmFnZXI7XG4gIHByaXZhdGUgY29sbGVjdGlvbkJyb3dzZXI6IENvbGxlY3Rpb25Ccm93c2VyO1xuICBwcml2YXRlIGNvbGxlY3Rpb25TZWFyY2g6IENvbGxlY3Rpb25TZWFyY2g7XG4gIHByaXZhdGUgcGVyc29uYURldGFpbHM6IFBlcnNvbmFEZXRhaWxzO1xuICBwcml2YXRlIGVsZW1lbnRJbnN0YWxsZXI6IEVsZW1lbnRJbnN0YWxsZXI7XG4gIHByaXZhdGUgcGVyc29uYVN1Ym1pdHRlcjogUGVyc29uYVN1Ym1pdHRlcjtcbiAgcHJpdmF0ZSBzZXJ2ZXJTZXR1cDogU2VydmVyU2V0dXA7XG4gIHByaXZhdGUgcGVyc29uYUV4cG9ydGVyOiBQZXJzb25hRXhwb3J0ZXI7XG4gIHByaXZhdGUgcGVyc29uYUltcG9ydGVyPzogUGVyc29uYUltcG9ydGVyO1xuICBwcml2YXRlIHBlcnNvbmFTaGFyZXI6IFBlcnNvbmFTaGFyZXI7XG4gIHByaXZhdGUgcG9ydGZvbGlvTWFuYWdlcjogUG9ydGZvbGlvTWFuYWdlcjtcbiAgcHJpdmF0ZSBtaWdyYXRpb25NYW5hZ2VyOiBNaWdyYXRpb25NYW5hZ2VyO1xuICBwcml2YXRlIHNraWxsTWFuYWdlcjogU2tpbGxNYW5hZ2VyO1xuICBwcml2YXRlIHRlbXBsYXRlTWFuYWdlcjogVGVtcGxhdGVNYW5hZ2VyO1xuICBwcml2YXRlIGFnZW50TWFuYWdlcjogQWdlbnRNYW5hZ2VyO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2VydmVyID0gbmV3IFNlcnZlcihcbiAgICAgIHtcbiAgICAgICAgbmFtZTogXCJkb2xsaG91c2VtY3BcIixcbiAgICAgICAgdmVyc2lvbjogXCIxLjAuMC1idWlsZC0yMDI1MDgxNy0xNjMwLXByNjA2XCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjYXBhYmlsaXRpZXM6IHtcbiAgICAgICAgICB0b29sczoge30sXG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgKTtcblxuICAgIC8vIEluaXRpYWxpemUgcG9ydGZvbGlvIHN5c3RlbVxuICAgIHRoaXMucG9ydGZvbGlvTWFuYWdlciA9IFBvcnRmb2xpb01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICB0aGlzLm1pZ3JhdGlvbk1hbmFnZXIgPSBuZXcgTWlncmF0aW9uTWFuYWdlcih0aGlzLnBvcnRmb2xpb01hbmFnZXIpO1xuICAgIFxuICAgIC8vIENSSVRJQ0FMIEZJWDogRG9uJ3QgYWNjZXNzIGRpcmVjdG9yaWVzIHVudGlsIGFmdGVyIG1pZ3JhdGlvbiBydW5zXG4gICAgLy8gUHJldmlvdXNseTogdGhpcy5wZXJzb25hc0RpciB3YXMgc2V0IGhlcmUsIGNyZWF0aW5nIGRpcmVjdG9yaWVzIGJlZm9yZSBtaWdyYXRpb24gY291bGQgZml4IHRoZW1cbiAgICAvLyBOb3c6IFdlIGRlbGF5IGRpcmVjdG9yeSBhY2Nlc3MgdW50aWwgaW5pdGlhbGl6ZVBvcnRmb2xpbygpIGNvbXBsZXRlc1xuICAgIC8vIFVzaW5nIG51bGwgdG8gbWFrZSB0aGUgdW5pbml0aWFsaXplZCBzdGF0ZSBleHBsaWNpdCAocGVyIFBSIHJldmlldyBmZWVkYmFjaylcbiAgICB0aGlzLnBlcnNvbmFzRGlyID0gbnVsbDsgLy8gV2lsbCBiZSBwcm9wZXJseSBpbml0aWFsaXplZCBpbiBjb21wbGV0ZUluaXRpYWxpemF0aW9uKClcbiAgICBcbiAgICAvLyBJbml0aWFsaXplIGVsZW1lbnQgbWFuYWdlcnNcbiAgICB0aGlzLnNraWxsTWFuYWdlciA9IG5ldyBTa2lsbE1hbmFnZXIoKTtcbiAgICB0aGlzLnRlbXBsYXRlTWFuYWdlciA9IG5ldyBUZW1wbGF0ZU1hbmFnZXIoKTtcbiAgICB0aGlzLmFnZW50TWFuYWdlciA9IG5ldyBBZ2VudE1hbmFnZXIodGhpcy5wb3J0Zm9saW9NYW5hZ2VyLmdldEJhc2VEaXIoKSk7XG4gICAgXG4gICAgLy8gTG9nIHJlc29sdmVkIHBhdGggZm9yIGRlYnVnZ2luZ1xuICAgIGxvZ2dlci5pbmZvKGBQZXJzb25hcyBkaXJlY3RvcnkgcmVzb2x2ZWQgdG86ICR7dGhpcy5wZXJzb25hc0Rpcn1gKTtcbiAgICBcbiAgICAvLyBQYXRoVmFsaWRhdG9yIHdpbGwgYmUgaW5pdGlhbGl6ZWQgYWZ0ZXIgbWlncmF0aW9uIGNvbXBsZXRlc1xuICAgIFxuICAgIC8vIExvYWQgdXNlciBpZGVudGl0eSBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgIHRoaXMuY3VycmVudFVzZXIgPSBwcm9jZXNzLmVudi5ET0xMSE9VU0VfVVNFUiB8fCBudWxsO1xuICAgIFxuICAgIC8vIExvYWQgaW5kaWNhdG9yIGNvbmZpZ3VyYXRpb25cbiAgICB0aGlzLmluZGljYXRvckNvbmZpZyA9IGxvYWRJbmRpY2F0b3JDb25maWcoKTtcbiAgICBcbiAgICAvLyBJbml0aWFsaXplIHBlcnNvbmEgbWFuYWdlclxuICAgIFxuICAgIC8vIEluaXRpYWxpemUgY29sbGVjdGlvbiBtb2R1bGVzXG4gICAgdGhpcy5naXRodWJDbGllbnQgPSBuZXcgR2l0SHViQ2xpZW50KHRoaXMuYXBpQ2FjaGUsIHRoaXMucmF0ZUxpbWl0VHJhY2tlcik7XG4gICAgdGhpcy5naXRodWJBdXRoTWFuYWdlciA9IG5ldyBHaXRIdWJBdXRoTWFuYWdlcih0aGlzLmFwaUNhY2hlKTtcbiAgICB0aGlzLmNvbGxlY3Rpb25JbmRleE1hbmFnZXIgPSBuZXcgQ29sbGVjdGlvbkluZGV4TWFuYWdlcigpO1xuICAgIHRoaXMuY29sbGVjdGlvbkJyb3dzZXIgPSBuZXcgQ29sbGVjdGlvbkJyb3dzZXIodGhpcy5naXRodWJDbGllbnQsIHRoaXMuY29sbGVjdGlvbkNhY2hlLCB0aGlzLmNvbGxlY3Rpb25JbmRleE1hbmFnZXIpO1xuICAgIHRoaXMuY29sbGVjdGlvblNlYXJjaCA9IG5ldyBDb2xsZWN0aW9uU2VhcmNoKHRoaXMuZ2l0aHViQ2xpZW50LCB0aGlzLmNvbGxlY3Rpb25DYWNoZSk7XG4gICAgdGhpcy5wZXJzb25hRGV0YWlscyA9IG5ldyBQZXJzb25hRGV0YWlscyh0aGlzLmdpdGh1YkNsaWVudCk7XG4gICAgdGhpcy5lbGVtZW50SW5zdGFsbGVyID0gbmV3IEVsZW1lbnRJbnN0YWxsZXIodGhpcy5naXRodWJDbGllbnQpO1xuICAgIHRoaXMucGVyc29uYVN1Ym1pdHRlciA9IG5ldyBQZXJzb25hU3VibWl0dGVyKCk7XG4gICAgXG4gICAgLy8gVXBkYXRlIG1hbmFnZXIgd2lsbCBiZSBpbml0aWFsaXplZCBhZnRlciBtaWdyYXRpb24gY29tcGxldGVzIHRvIGF2b2lkIGpzZG9tIGNyYXNoXG4gICAgXG4gICAgLy8gSW5pdGlhbGl6ZSBleHBvcnQvaW1wb3J0L3NoYXJlIG1vZHVsZXNcbiAgICB0aGlzLnBlcnNvbmFFeHBvcnRlciA9IG5ldyBQZXJzb25hRXhwb3J0ZXIodGhpcy5jdXJyZW50VXNlcik7XG4gICAgLy8gUGVyc29uYUltcG9ydGVyIHdpbGwgYmUgaW5pdGlhbGl6ZWQgYWZ0ZXIgbWlncmF0aW9uIGNvbXBsZXRlc1xuICAgIHRoaXMucGVyc29uYVNoYXJlciA9IG5ldyBQZXJzb25hU2hhcmVyKHRoaXMuZ2l0aHViQ2xpZW50LCB0aGlzLmN1cnJlbnRVc2VyKTtcbiAgICBcbiAgICAvLyBJbml0aWFsaXplIHNlcnZlciBzZXR1cFxuICAgIHRoaXMuc2VydmVyU2V0dXAgPSBuZXcgU2VydmVyU2V0dXAoKTtcbiAgICB0aGlzLnNlcnZlclNldHVwLnNldHVwU2VydmVyKHRoaXMuc2VydmVyLCB0aGlzKTtcbiAgICBcbiAgICAvLyBGSVggIzYxMDogUG9ydGZvbGlvIGluaXRpYWxpemF0aW9uIG1vdmVkIHRvIHJ1bigpIG1ldGhvZCB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9uXG4gICAgLy8gUHJldmlvdXNseTogdGhpcy5pbml0aWFsaXplUG9ydGZvbGlvKCkudGhlbigpIHJhbiBhc3luYyBpbiBjb25zdHJ1Y3RvclxuICAgIC8vIE5vdzogSW5pdGlhbGl6YXRpb24gaGFwcGVucyBzeW5jaHJvbm91c2x5IGluIHJ1bigpIGJlZm9yZSBNQ1AgY29ubmVjdGlvblxuICB9XG4gIFxuICBwcml2YXRlIGFzeW5jIGluaXRpYWxpemVQb3J0Zm9saW8oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gQ2hlY2sgaWYgbWlncmF0aW9uIGlzIG5lZWRlZFxuICAgIGNvbnN0IG5lZWRzTWlncmF0aW9uID0gYXdhaXQgdGhpcy5taWdyYXRpb25NYW5hZ2VyLm5lZWRzTWlncmF0aW9uKCk7XG4gICAgXG4gICAgaWYgKG5lZWRzTWlncmF0aW9uKSB7XG4gICAgICBsb2dnZXIuaW5mbygnTGVnYWN5IHBlcnNvbmFzIGRldGVjdGVkLiBTdGFydGluZyBtaWdyYXRpb24uLi4nKTtcbiAgICAgIFxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5taWdyYXRpb25NYW5hZ2VyLm1pZ3JhdGUoeyBiYWNrdXA6IHRydWUgfSk7XG4gICAgICBcbiAgICAgIGlmIChyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICBsb2dnZXIuaW5mbyhgU3VjY2Vzc2Z1bGx5IG1pZ3JhdGVkICR7cmVzdWx0Lm1pZ3JhdGVkQ291bnR9IHBlcnNvbmFzYCk7XG4gICAgICAgIGlmIChyZXN1bHQuYmFja2VkVXAgJiYgcmVzdWx0LmJhY2t1cFBhdGgpIHtcbiAgICAgICAgICBsb2dnZXIuaW5mbyhgQmFja3VwIGNyZWF0ZWQgYXQ6ICR7cmVzdWx0LmJhY2t1cFBhdGh9YCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcignTWlncmF0aW9uIGNvbXBsZXRlZCB3aXRoIGVycm9yczonKTtcbiAgICAgICAgcmVzdWx0LmVycm9ycy5mb3JFYWNoKGVyciA9PiBsb2dnZXIuZXJyb3IoYCAgLSAke2Vycn1gKSk7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIEVuc3VyZSBwb3J0Zm9saW8gc3RydWN0dXJlIGV4aXN0c1xuICAgIGNvbnN0IHBvcnRmb2xpb0V4aXN0cyA9IGF3YWl0IHRoaXMucG9ydGZvbGlvTWFuYWdlci5leGlzdHMoKTtcbiAgICBpZiAoIXBvcnRmb2xpb0V4aXN0cykge1xuICAgICAgbG9nZ2VyLmluZm8oJ0NyZWF0aW5nIHBvcnRmb2xpbyBkaXJlY3Rvcnkgc3RydWN0dXJlLi4uJyk7XG4gICAgICBhd2FpdCB0aGlzLnBvcnRmb2xpb01hbmFnZXIuaW5pdGlhbGl6ZSgpO1xuICAgIH1cbiAgICBcbiAgICAvLyBJbml0aWFsaXplIGNvbGxlY3Rpb24gY2FjaGUgZm9yIGFub255bW91cyBhY2Nlc3NcbiAgICBhd2FpdCB0aGlzLmluaXRpYWxpemVDb2xsZWN0aW9uQ2FjaGUoKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENvbXBsZXRlIGluaXRpYWxpemF0aW9uIGFmdGVyIHBvcnRmb2xpbyBpcyByZWFkeVxuICAgKiBGSVggIzYxMDogVGhpcyB3YXMgcHJldmlvdXNseSBpbiBhIC50aGVuKCkgY2FsbGJhY2sgaW4gdGhlIGNvbnN0cnVjdG9yXG4gICAqIE5vdyBjYWxsZWQgc3luY2hyb25vdXNseSBmcm9tIHJ1bigpIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgY29tcGxldGVJbml0aWFsaXphdGlvbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBOT1cgc2FmZSB0byBhY2Nlc3MgZGlyZWN0b3JpZXMgYWZ0ZXIgbWlncmF0aW9uXG4gICAgdGhpcy5wZXJzb25hc0RpciA9IHRoaXMucG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKEVsZW1lbnRUeXBlLlBFUlNPTkEpO1xuICAgIFxuICAgIC8vIExvZyByZXNvbHZlZCBwYXRoIGZvciBkZWJ1Z2dpbmdcbiAgICBsb2dnZXIuaW5mbyhgUGVyc29uYXMgZGlyZWN0b3J5IHJlc29sdmVkIHRvOiAke3RoaXMucGVyc29uYXNEaXJ9YCk7XG4gICAgXG4gICAgLy8gSW5pdGlhbGl6ZSBQYXRoVmFsaWRhdG9yIHdpdGggdGhlIHBlcnNvbmFzIGRpcmVjdG9yeVxuICAgIFBhdGhWYWxpZGF0b3IuaW5pdGlhbGl6ZSh0aGlzLnBlcnNvbmFzRGlyKTtcbiAgICBcbiAgICAvLyBJbml0aWFsaXplIHVwZGF0ZSBtYW5hZ2VyIHdpdGggc2FmZSBkaXJlY3RvcnlcbiAgICBcbiAgICAvLyBJbml0aWFsaXplIGltcG9ydCBtb2R1bGUgdGhhdCBkZXBlbmRzIG9uIHBlcnNvbmFzRGlyXG4gICAgdGhpcy5wZXJzb25hSW1wb3J0ZXIgPSBuZXcgUGVyc29uYUltcG9ydGVyKHRoaXMucGVyc29uYXNEaXIsIHRoaXMuY3VycmVudFVzZXIpO1xuICAgIFxuICAgIHRoaXMubG9hZFBlcnNvbmFzKCk7XG4gICAgXG4gICAgLy8gTWFyayBpbml0aWFsaXphdGlvbiBhcyBjb21wbGV0ZVxuICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IHRydWU7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBFbnN1cmUgc2VydmVyIGlzIGluaXRpYWxpemVkIGJlZm9yZSBhbnkgb3BlcmF0aW9uXG4gICAqIEZJWCAjNjEwOiBBZGRlZCBmb3IgdGVzdCBjb21wYXRpYmlsaXR5IC0gdGVzdHMgZG9uJ3QgY2FsbCBydW4oKVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBlbnN1cmVJbml0aWFsaXplZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5pc0luaXRpYWxpemVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIC8vIElmIGluaXRpYWxpemF0aW9uIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MsIHdhaXQgZm9yIGl0XG4gICAgaWYgKHRoaXMuaW5pdGlhbGl6YXRpb25Qcm9taXNlKSB7XG4gICAgICBhd2FpdCB0aGlzLmluaXRpYWxpemF0aW9uUHJvbWlzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgLy8gU3RhcnQgaW5pdGlhbGl6YXRpb25cbiAgICB0aGlzLmluaXRpYWxpemF0aW9uUHJvbWlzZSA9IChhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmluaXRpYWxpemVQb3J0Zm9saW8oKTtcbiAgICAgICAgYXdhaXQgdGhpcy5jb21wbGV0ZUluaXRpYWxpemF0aW9uKCk7XG4gICAgICAgIGxvZ2dlci5pbmZvKFwiUG9ydGZvbGlvIGFuZCBwZXJzb25hcyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkgKGxhenkpXCIpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdEb2xsaG91c2VNQ1BTZXJ2ZXIuZW5zdXJlSW5pdGlhbGl6ZWQnLCBlcnJvcik7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0pKCk7XG4gICAgXG4gICAgYXdhaXQgdGhpcy5pbml0aWFsaXphdGlvblByb21pc2U7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGNvbGxlY3Rpb24gY2FjaGUgd2l0aCBzZWVkIGRhdGEgZm9yIGFub255bW91cyBicm93c2luZ1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBpbml0aWFsaXplQ29sbGVjdGlvbkNhY2hlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBpc0NhY2hlVmFsaWQgPSBhd2FpdCB0aGlzLmNvbGxlY3Rpb25DYWNoZS5pc0NhY2hlVmFsaWQoKTtcbiAgICAgIGlmICghaXNDYWNoZVZhbGlkKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKCdJbml0aWFsaXppbmcgY29sbGVjdGlvbiBjYWNoZSB3aXRoIHNlZWQgZGF0YS4uLicpO1xuICAgICAgICBjb25zdCB7IENvbGxlY3Rpb25TZWVkZXIgfSA9IGF3YWl0IGltcG9ydCgnLi9jb2xsZWN0aW9uL0NvbGxlY3Rpb25TZWVkZXIuanMnKTtcbiAgICAgICAgY29uc3Qgc2VlZERhdGEgPSBDb2xsZWN0aW9uU2VlZGVyLmdldFNlZWREYXRhKCk7XG4gICAgICAgIGF3YWl0IHRoaXMuY29sbGVjdGlvbkNhY2hlLnNhdmVDYWNoZShzZWVkRGF0YSk7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBDb2xsZWN0aW9uIGNhY2hlIGluaXRpYWxpemVkIHdpdGggJHtzZWVkRGF0YS5sZW5ndGh9IGl0ZW1zYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBzdGF0cyA9IGF3YWl0IHRoaXMuY29sbGVjdGlvbkNhY2hlLmdldENhY2hlU3RhdHMoKTtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBDb2xsZWN0aW9uIGNhY2hlIGFscmVhZHkgdmFsaWQgd2l0aCAke3N0YXRzLml0ZW1Db3VudH0gaXRlbXNgKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdEb2xsaG91c2VNQ1BTZXJ2ZXIuaW5pdGlhbGl6ZUNvbGxlY3Rpb25DYWNoZScsIGVycm9yKTtcbiAgICAgIC8vIERvbid0IHRocm93IC0gY2FjaGUgZmFpbHVyZXMgc2hvdWxkbid0IHByZXZlbnQgc2VydmVyIHN0YXJ0dXBcbiAgICB9XG4gIH1cblxuICAvLyBUb29sIGhhbmRsZXIgbWV0aG9kcyAtIG5vdyBwdWJsaWMgZm9yIGFjY2VzcyBmcm9tIHRvb2wgbW9kdWxlc1xuICBcbiAgcHJpdmF0ZSBnZXRQZXJzb25hSW5kaWNhdG9yKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmFjdGl2ZVBlcnNvbmEpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIGNvbnN0IHBlcnNvbmEgPSB0aGlzLnBlcnNvbmFzLmdldCh0aGlzLmFjdGl2ZVBlcnNvbmEpO1xuICAgIGlmICghcGVyc29uYSkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvcm1hdEluZGljYXRvcih0aGlzLmluZGljYXRvckNvbmZpZywge1xuICAgICAgbmFtZTogcGVyc29uYS5tZXRhZGF0YS5uYW1lLFxuICAgICAgdmVyc2lvbjogcGVyc29uYS5tZXRhZGF0YS52ZXJzaW9uLFxuICAgICAgYXV0aG9yOiBwZXJzb25hLm1ldGFkYXRhLmF1dGhvcixcbiAgICAgIGNhdGVnb3J5OiBwZXJzb25hLm1ldGFkYXRhLmNhdGVnb3J5XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTm9ybWFsaXplIGVsZW1lbnQgdHlwZSB0byBoYW5kbGUgYm90aCBzaW5ndWxhciAobmV3KSBhbmQgcGx1cmFsIChsZWdhY3kpIGZvcm1zXG4gICAqIFRoaXMgcHJvdmlkZXMgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBkdXJpbmcgdGhlIHRyYW5zaXRpb24gdG8gdjEuNC4wXG4gICAqL1xuICBwcml2YXRlIG5vcm1hbGl6ZUVsZW1lbnRUeXBlKHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gTWFwIHBsdXJhbCBmb3JtcyB0byBzaW5ndWxhciBFbGVtZW50VHlwZSB2YWx1ZXNcbiAgICBjb25zdCBwbHVyYWxUb1Npbmd1bGFyTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgJ3BlcnNvbmFzJzogRWxlbWVudFR5cGUuUEVSU09OQSxcbiAgICAgICdza2lsbHMnOiBFbGVtZW50VHlwZS5TS0lMTCxcbiAgICAgICd0ZW1wbGF0ZXMnOiBFbGVtZW50VHlwZS5URU1QTEFURSxcbiAgICAgICdhZ2VudHMnOiBFbGVtZW50VHlwZS5BR0VOVCxcbiAgICAgICdtZW1vcmllcyc6IEVsZW1lbnRUeXBlLk1FTU9SWSxcbiAgICAgICdlbnNlbWJsZXMnOiBFbGVtZW50VHlwZS5FTlNFTUJMRVxuICAgIH07XG4gICAgXG4gICAgLy8gSWYgaXQncyBhbHJlYWR5IGEgdmFsaWQgRWxlbWVudFR5cGUgdmFsdWUsIHJldHVybiBhcy1pc1xuICAgIGlmIChPYmplY3QudmFsdWVzKEVsZW1lbnRUeXBlKS5pbmNsdWRlcyh0eXBlIGFzIEVsZW1lbnRUeXBlKSkge1xuICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfVxuICAgIFxuICAgIC8vIElmIGl0J3MgYSBwbHVyYWwgZm9ybSwgY29udmVydCB0byBzaW5ndWxhclxuICAgIGlmIChwbHVyYWxUb1Npbmd1bGFyTWFwW3R5cGVdKSB7XG4gICAgICAvLyBMb2cgZGVwcmVjYXRpb24gd2FybmluZ1xuICAgICAgbG9nZ2VyLndhcm4oYFVzaW5nIHBsdXJhbCBlbGVtZW50IHR5cGUgJyR7dHlwZX0nIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2Ugc2luZ3VsYXIgZm9ybSAnJHtwbHVyYWxUb1Npbmd1bGFyTWFwW3R5cGVdfScgaW5zdGVhZC5gKTtcbiAgICAgIHJldHVybiBwbHVyYWxUb1Npbmd1bGFyTWFwW3R5cGVdO1xuICAgIH1cbiAgICBcbiAgICAvLyBVbmtub3duIHR5cGUgLSByZXR1cm4gYXMtaXMgYW5kIGxldCB2YWxpZGF0aW9uIGhhbmRsZSBpdFxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhbml0aXplIG1ldGFkYXRhIG9iamVjdCB0byBwcmV2ZW50IHByb3RvdHlwZSBwb2xsdXRpb25cbiAgICogUmVtb3ZlcyBhbnkgZGFuZ2Vyb3VzIHByb3BlcnRpZXMgdGhhdCBjb3VsZCBhZmZlY3QgT2JqZWN0LnByb3RvdHlwZVxuICAgKi9cbiAgcHJpdmF0ZSBzYW5pdGl6ZU1ldGFkYXRhKG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgaWYgKCFtZXRhZGF0YSB8fCB0eXBlb2YgbWV0YWRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IGRhbmdlcm91c1Byb3BlcnRpZXMgPSBbJ19fcHJvdG9fXycsICdjb25zdHJ1Y3RvcicsICdwcm90b3R5cGUnXTtcbiAgICBjb25zdCBzYW5pdGl6ZWQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICBcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhtZXRhZGF0YSkpIHtcbiAgICAgIGlmICghZGFuZ2Vyb3VzUHJvcGVydGllcy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgIC8vIFJlY3Vyc2l2ZWx5IHNhbml0aXplIG5lc3RlZCBvYmplY3RzXG4gICAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIHNhbml0aXplZFtrZXldID0gdGhpcy5zYW5pdGl6ZU1ldGFkYXRhKHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzYW5pdGl6ZWRba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBzYW5pdGl6ZWQ7XG4gIH1cblxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZFBlcnNvbmFzKCkge1xuICAgIC8vIFZhbGlkYXRlIHRoZSBwZXJzb25hcyBkaXJlY3RvcnkgcGF0aFxuICAgIC8vIHBlcnNvbmFzRGlyIGlzIGd1YXJhbnRlZWQgdG8gYmUgc2V0IGJ5IGNvbXBsZXRlSW5pdGlhbGl6YXRpb24gYmVmb3JlIHRoaXMgaXMgY2FsbGVkXG4gICAgaWYgKCFwYXRoLmlzQWJzb2x1dGUodGhpcy5wZXJzb25hc0RpciEpKSB7XG4gICAgICBsb2dnZXIud2FybihgUGVyc29uYXMgZGlyZWN0b3J5IHBhdGggaXMgbm90IGFic29sdXRlOiAke3RoaXMucGVyc29uYXNEaXJ9YCk7XG4gICAgfVxuICAgIFxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmcy5hY2Nlc3ModGhpcy5wZXJzb25hc0RpciEpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBDcmVhdGUgcGVyc29uYXMgZGlyZWN0b3J5IGlmIGl0IGRvZXNuJ3QgZXhpc3RcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGZzLm1rZGlyKHRoaXMucGVyc29uYXNEaXIhLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgbG9nZ2VyLmluZm8oYENyZWF0ZWQgcGVyc29uYXMgZGlyZWN0b3J5IGF0OiAke3RoaXMucGVyc29uYXNEaXJ9YCk7XG4gICAgICAgIC8vIENvbnRpbnVlIHRvIHRyeSBsb2FkaW5nIChkaXJlY3Rvcnkgd2lsbCBiZSBlbXB0eSlcbiAgICAgIH0gY2F0Y2ggKG1rZGlyRXJyb3IpIHtcbiAgICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdEb2xsaG91c2VNQ1BTZXJ2ZXIubG9hZFBlcnNvbmFzLm1rZGlyJywgbWtkaXJFcnJvciwgeyBwZXJzb25hc0RpcjogdGhpcy5wZXJzb25hc0RpciB9KTtcbiAgICAgICAgLy8gRG9uJ3QgdGhyb3cgLSBlbXB0eSBwb3J0Zm9saW8gaXMgdmFsaWRcbiAgICAgICAgdGhpcy5wZXJzb25hcy5jbGVhcigpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIHBlcnNvbmFzRGlyIGlzIGd1YXJhbnRlZWQgdG8gYmUgc2V0IGJ5IGNvbXBsZXRlSW5pdGlhbGl6YXRpb24gYmVmb3JlIHRoaXMgaXMgY2FsbGVkXG4gICAgICBjb25zdCBmaWxlcyA9IGF3YWl0IGZzLnJlYWRkaXIodGhpcy5wZXJzb25hc0RpciEpO1xuICAgICAgY29uc3QgbWFya2Rvd25GaWxlcyA9IGZpbGVzXG4gICAgICAgIC5maWx0ZXIoZmlsZSA9PiBmaWxlLmVuZHNXaXRoKCcubWQnKSlcbiAgICAgICAgLmZpbHRlcihmaWxlID0+ICF0aGlzLnBvcnRmb2xpb01hbmFnZXIuaXNUZXN0RWxlbWVudChmaWxlKSk7XG5cbiAgICAgIHRoaXMucGVyc29uYXMuY2xlYXIoKTtcbiAgICAgIFxuICAgICAgaWYgKG1hcmtkb3duRmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKCdbRG9sbGhvdXNlTUNQXSBObyBwZXJzb25hcyBmb3VuZCBpbiBwb3J0Zm9saW8uIFVzZSBicm93c2VfY29sbGVjdGlvbiB0byBpbnN0YWxsIHNvbWUhJyk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBtYXJrZG93bkZpbGVzKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4odGhpcy5wZXJzb25hc0RpciEsIGZpbGUpO1xuICAgICAgICAgIGNvbnN0IGZpbGVDb250ZW50ID0gYXdhaXQgUGF0aFZhbGlkYXRvci5zYWZlUmVhZEZpbGUoZmlsZVBhdGgpO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIFVzZSBzZWN1cmUgWUFNTCBwYXJzZXJcbiAgICAgICAgICBsZXQgcGFyc2VkO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBwYXJzZWQgPSBTZWN1cmVZYW1sUGFyc2VyLnNhZmVNYXR0ZXIoZmlsZUNvbnRlbnQpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBTZWN1cml0eUVycm9yKSB7XG4gICAgICAgICAgICAgIGxvZ2dlci53YXJuKGBTZWN1cml0eSB0aHJlYXQgZGV0ZWN0ZWQgaW4gcGVyc29uYSAke2ZpbGV9OiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIGNvbnN0IG1ldGFkYXRhID0gcGFyc2VkLmRhdGEgYXMgUGVyc29uYU1ldGFkYXRhO1xuICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBwYXJzZWQuY29udGVudDtcblxuICAgICAgICAgIGlmICghbWV0YWRhdGEubmFtZSkge1xuICAgICAgICAgICAgbWV0YWRhdGEubmFtZSA9IHBhdGguYmFzZW5hbWUoZmlsZSwgJy5tZCcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEdlbmVyYXRlIHVuaXF1ZSBJRCBpZiBub3QgcHJlc2VudFxuICAgICAgICAgIGxldCB1bmlxdWVJZCA9IG1ldGFkYXRhLnVuaXF1ZV9pZDtcbiAgICAgICAgICBpZiAoIXVuaXF1ZUlkKSB7XG4gICAgICAgICAgICBjb25zdCBhdXRob3JGb3JJZCA9IG1ldGFkYXRhLmF1dGhvciB8fCB0aGlzLmdldEN1cnJlbnRVc2VyRm9yQXR0cmlidXRpb24oKTtcbiAgICAgICAgICAgIHVuaXF1ZUlkID0gZ2VuZXJhdGVVbmlxdWVJZChtZXRhZGF0YS5uYW1lLCBhdXRob3JGb3JJZCk7XG4gICAgICAgICAgICBsb2dnZXIuZGVidWcoYEdlbmVyYXRlZCB1bmlxdWUgSUQgZm9yICR7bWV0YWRhdGEubmFtZX06ICR7dW5pcXVlSWR9YCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gU2V0IGRlZmF1bHQgdmFsdWVzIGZvciBuZXcgbWV0YWRhdGEgZmllbGRzXG4gICAgICAgICAgaWYgKCFtZXRhZGF0YS5jYXRlZ29yeSkgbWV0YWRhdGEuY2F0ZWdvcnkgPSAnZ2VuZXJhbCc7XG4gICAgICAgICAgaWYgKCFtZXRhZGF0YS5hZ2VfcmF0aW5nKSBtZXRhZGF0YS5hZ2VfcmF0aW5nID0gJ2FsbCc7XG4gICAgICAgICAgaWYgKCFtZXRhZGF0YS5jb250ZW50X2ZsYWdzKSBtZXRhZGF0YS5jb250ZW50X2ZsYWdzID0gW107XG4gICAgICAgICAgaWYgKG1ldGFkYXRhLmFpX2dlbmVyYXRlZCA9PT0gdW5kZWZpbmVkKSBtZXRhZGF0YS5haV9nZW5lcmF0ZWQgPSBmYWxzZTtcbiAgICAgICAgICBpZiAoIW1ldGFkYXRhLmdlbmVyYXRpb25fbWV0aG9kKSBtZXRhZGF0YS5nZW5lcmF0aW9uX21ldGhvZCA9ICdodW1hbic7XG4gICAgICAgICAgaWYgKCFtZXRhZGF0YS5wcmljZSkgbWV0YWRhdGEucHJpY2UgPSAnZnJlZSc7XG4gICAgICAgICAgaWYgKCFtZXRhZGF0YS5saWNlbnNlKSBtZXRhZGF0YS5saWNlbnNlID0gJ0NDLUJZLVNBLTQuMCc7XG5cbiAgICAgICAgICBjb25zdCBwZXJzb25hOiBQZXJzb25hID0ge1xuICAgICAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgICAgZmlsZW5hbWU6IGZpbGUsXG4gICAgICAgICAgICB1bmlxdWVfaWQ6IHVuaXF1ZUlkLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICB0aGlzLnBlcnNvbmFzLnNldChmaWxlLCBwZXJzb25hKTtcbiAgICAgICAgICBsb2dnZXIuZGVidWcoYExvYWRlZCBwZXJzb25hOiAke21ldGFkYXRhLm5hbWV9ICgke3VuaXF1ZUlkfWApO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignRG9sbGhvdXNlTUNQU2VydmVyLmxvYWRQZXJzb25hcy5sb2FkRmlsZScsIGVycm9yLCB7IGZpbGUgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gSGFuZGxlIEVOT0VOVCBncmFjZWZ1bGx5IC0gZGlyZWN0b3J5IG1pZ2h0IG5vdCBleGlzdCB5ZXRcbiAgICAgIGlmICgoZXJyb3IgYXMgYW55KS5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICBsb2dnZXIuaW5mbygnW0RvbGxob3VzZU1DUF0gUGVyc29uYXMgZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0IHlldCAtIHBvcnRmb2xpbyBpcyBlbXB0eScpO1xuICAgICAgICB0aGlzLnBlcnNvbmFzLmNsZWFyKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignRG9sbGhvdXNlTUNQU2VydmVyLmxvYWRQZXJzb25hcycsIGVycm9yKTtcbiAgICAgIHRoaXMucGVyc29uYXMuY2xlYXIoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBsaXN0UGVyc29uYXMoKSB7XG4gICAgY29uc3QgcGVyc29uYUxpc3QgPSBBcnJheS5mcm9tKHRoaXMucGVyc29uYXMudmFsdWVzKCkpLm1hcChwZXJzb25hID0+ICh7XG4gICAgICBmaWxlbmFtZTogcGVyc29uYS5maWxlbmFtZSxcbiAgICAgIHVuaXF1ZV9pZDogcGVyc29uYS51bmlxdWVfaWQsXG4gICAgICBuYW1lOiBwZXJzb25hLm1ldGFkYXRhLm5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogcGVyc29uYS5tZXRhZGF0YS5kZXNjcmlwdGlvbixcbiAgICAgIHRyaWdnZXJzOiBwZXJzb25hLm1ldGFkYXRhLnRyaWdnZXJzIHx8IFtdLFxuICAgICAgdmVyc2lvbjogcGVyc29uYS5tZXRhZGF0YS52ZXJzaW9uIHx8IFwiMS4wXCIsXG4gICAgICBhdXRob3I6IHBlcnNvbmEubWV0YWRhdGEuYXV0aG9yIHx8IFwiVW5rbm93blwiLFxuICAgICAgY2F0ZWdvcnk6IHBlcnNvbmEubWV0YWRhdGEuY2F0ZWdvcnkgfHwgJ2dlbmVyYWwnLFxuICAgICAgYWdlX3JhdGluZzogcGVyc29uYS5tZXRhZGF0YS5hZ2VfcmF0aW5nIHx8ICdhbGwnLFxuICAgICAgcHJpY2U6IHBlcnNvbmEubWV0YWRhdGEucHJpY2UgfHwgJ2ZyZWUnLFxuICAgICAgYWlfZ2VuZXJhdGVkOiBwZXJzb25hLm1ldGFkYXRhLmFpX2dlbmVyYXRlZCB8fCBmYWxzZSxcbiAgICAgIGFjdGl2ZTogdGhpcy5hY3RpdmVQZXJzb25hID09PSBwZXJzb25hLmZpbGVuYW1lLFxuICAgIH0pKTtcblxuICAgIGlmIChwZXJzb25hTGlzdC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfVlvdSBkb24ndCBoYXZlIGFueSBwZXJzb25hcyBpbnN0YWxsZWQgeWV0LiBXb3VsZCB5b3UgbGlrZSB0byBicm93c2UgdGhlIERvbGxob3VzZU1DUCBjb2xsZWN0aW9uIG9uIEdpdEh1YiB0byBzZWUgd2hhdCdzIGF2YWlsYWJsZT8gSSBjYW4gc2hvdyB5b3UgcGVyc29uYXMgZm9yIGNyZWF0aXZlIHdyaXRpbmcsIHRlY2huaWNhbCBhbmFseXNpcywgYW5kIG1vcmUuIEp1c3Qgc2F5IFwieWVzXCIgb3IgdXNlICdicm93c2VfY29sbGVjdGlvbicuYCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudDogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl9QXZhaWxhYmxlIFBlcnNvbmFzICgke3BlcnNvbmFMaXN0Lmxlbmd0aH0pOlxcblxcbmAgK1xuICAgICAgICAgICAgcGVyc29uYUxpc3QubWFwKHAgPT4gXG4gICAgICAgICAgICAgIGAke3AuYWN0aXZlID8gJ/CflLkgJyA6ICfilqvvuI8gJ30qKiR7cC5uYW1lfSoqICgke3AudW5pcXVlX2lkfSlcXG5gICtcbiAgICAgICAgICAgICAgYCAgICR7cC5kZXNjcmlwdGlvbn1cXG5gICtcbiAgICAgICAgICAgICAgYCAgIPCfk4EgJHtwLmNhdGVnb3J5fSB8IPCfjq0gJHtwLmF1dGhvcn0gfCDwn5SWICR7cC5wcmljZX0gfCAke3AuYWlfZ2VuZXJhdGVkID8gJ/CfpJYgQUknIDogJ/CfkaQgSHVtYW4nfVxcbmAgK1xuICAgICAgICAgICAgICBgICAgQWdlOiAke3AuYWdlX3JhdGluZ30gfCBWZXJzaW9uOiAke3AudmVyc2lvbn1cXG5gICtcbiAgICAgICAgICAgICAgYCAgIFRyaWdnZXJzOiAke3AudHJpZ2dlcnMuam9pbignLCAnKSB8fCAnTm9uZSd9XFxuYFxuICAgICAgICAgICAgKS5qb2luKCdcXG4nKSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGFjdGl2YXRlUGVyc29uYShwZXJzb25hSWRlbnRpZmllcjogc3RyaW5nKSB7XG4gICAgLy8gRW5oYW5jZWQgaW5wdXQgdmFsaWRhdGlvbiBmb3IgcGVyc29uYSBpZGVudGlmaWVyXG4gICAgY29uc3QgdmFsaWRhdGVkSWRlbnRpZmllciA9IE1DUElucHV0VmFsaWRhdG9yLnZhbGlkYXRlUGVyc29uYUlkZW50aWZpZXIocGVyc29uYUlkZW50aWZpZXIpO1xuICAgIFxuICAgIC8vIFRyeSB0byBmaW5kIHBlcnNvbmEgYnkgZmlsZW5hbWUgZmlyc3QsIHRoZW4gYnkgbmFtZVxuICAgIGxldCBwZXJzb25hID0gdGhpcy5wZXJzb25hcy5nZXQodmFsaWRhdGVkSWRlbnRpZmllcik7XG4gICAgXG4gICAgaWYgKCFwZXJzb25hKSB7XG4gICAgICAvLyBTZWFyY2ggYnkgbmFtZVxuICAgICAgcGVyc29uYSA9IEFycmF5LmZyb20odGhpcy5wZXJzb25hcy52YWx1ZXMoKSkuZmluZChwID0+IFxuICAgICAgICBwLm1ldGFkYXRhLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gdmFsaWRhdGVkSWRlbnRpZmllci50b0xvd2VyQ2FzZSgpXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghcGVyc29uYSkge1xuICAgICAgdGhyb3cgbmV3IE1jcEVycm9yKFxuICAgICAgICBFcnJvckNvZGUuSW52YWxpZFBhcmFtcyxcbiAgICAgICAgYFBlcnNvbmEgbm90IGZvdW5kOiAke3BlcnNvbmFJZGVudGlmaWVyfWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5hY3RpdmVQZXJzb25hID0gcGVyc29uYS5maWxlbmFtZTtcblxuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX1QZXJzb25hIEFjdGl2YXRlZDogKioke3BlcnNvbmEubWV0YWRhdGEubmFtZX0qKlxcblxcbmAgK1xuICAgICAgICAgICAgYCR7cGVyc29uYS5tZXRhZGF0YS5kZXNjcmlwdGlvbn1cXG5cXG5gICtcbiAgICAgICAgICAgIGAqKkluc3RydWN0aW9uczoqKlxcbiR7cGVyc29uYS5jb250ZW50fWAsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gIH1cblxuICBhc3luYyBnZXRBY3RpdmVQZXJzb25hKCkge1xuICAgIGlmICghdGhpcy5hY3RpdmVQZXJzb25hKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX1ObyBwZXJzb25hIGlzIGN1cnJlbnRseSBhY3RpdmUuYCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBwZXJzb25hID0gdGhpcy5wZXJzb25hcy5nZXQodGhpcy5hY3RpdmVQZXJzb25hKTtcbiAgICBpZiAoIXBlcnNvbmEpIHtcbiAgICAgIHRoaXMuYWN0aXZlUGVyc29uYSA9IG51bGw7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX1BY3RpdmUgcGVyc29uYSBub3QgZm91bmQuIERlYWN0aXZhdGVkLmAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfUFjdGl2ZSBQZXJzb25hOiAqKiR7cGVyc29uYS5tZXRhZGF0YS5uYW1lfSoqXFxuXFxuYCArXG4gICAgICAgICAgICBgJHtwZXJzb25hLm1ldGFkYXRhLmRlc2NyaXB0aW9ufVxcblxcbmAgK1xuICAgICAgICAgICAgYEZpbGU6ICR7cGVyc29uYS5maWxlbmFtZX1cXG5gICtcbiAgICAgICAgICAgIGBWZXJzaW9uOiAke3BlcnNvbmEubWV0YWRhdGEudmVyc2lvbiB8fCAnMS4wJ31cXG5gICtcbiAgICAgICAgICAgIGBBdXRob3I6ICR7cGVyc29uYS5tZXRhZGF0YS5hdXRob3IgfHwgJ1Vua25vd24nfWAsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gIH1cblxuICBhc3luYyBkZWFjdGl2YXRlUGVyc29uYSgpIHtcbiAgICBjb25zdCB3YXNBY3RpdmUgPSB0aGlzLmFjdGl2ZVBlcnNvbmEgIT09IG51bGw7XG4gICAgY29uc3QgaW5kaWNhdG9yID0gdGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCk7XG4gICAgdGhpcy5hY3RpdmVQZXJzb25hID0gbnVsbDtcblxuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiB3YXNBY3RpdmUgXG4gICAgICAgICAgICA/IGAke2luZGljYXRvcn3inIUgUGVyc29uYSBkZWFjdGl2YXRlZC4gQmFjayB0byBkZWZhdWx0IG1vZGUuYFxuICAgICAgICAgICAgOiBcIk5vIHBlcnNvbmEgd2FzIGFjdGl2ZS5cIixcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGdldFBlcnNvbmFEZXRhaWxzKHBlcnNvbmFJZGVudGlmaWVyOiBzdHJpbmcpIHtcbiAgICAvLyBUcnkgdG8gZmluZCBwZXJzb25hIGJ5IGZpbGVuYW1lIGZpcnN0LCB0aGVuIGJ5IG5hbWVcbiAgICBsZXQgcGVyc29uYSA9IHRoaXMucGVyc29uYXMuZ2V0KHBlcnNvbmFJZGVudGlmaWVyKTtcbiAgICBcbiAgICBpZiAoIXBlcnNvbmEpIHtcbiAgICAgIC8vIFNlYXJjaCBieSBuYW1lXG4gICAgICBwZXJzb25hID0gQXJyYXkuZnJvbSh0aGlzLnBlcnNvbmFzLnZhbHVlcygpKS5maW5kKHAgPT4gXG4gICAgICAgIHAubWV0YWRhdGEubmFtZS50b0xvd2VyQ2FzZSgpID09PSBwZXJzb25hSWRlbnRpZmllci50b0xvd2VyQ2FzZSgpXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghcGVyc29uYSkge1xuICAgICAgdGhyb3cgbmV3IE1jcEVycm9yKFxuICAgICAgICBFcnJvckNvZGUuSW52YWxpZFBhcmFtcyxcbiAgICAgICAgYFBlcnNvbmEgbm90IGZvdW5kOiAke3BlcnNvbmFJZGVudGlmaWVyfWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpffCfk4sgKioke3BlcnNvbmEubWV0YWRhdGEubmFtZX0qKiBEZXRhaWxzXFxuXFxuYCArXG4gICAgICAgICAgICBgKipEZXNjcmlwdGlvbjoqKiAke3BlcnNvbmEubWV0YWRhdGEuZGVzY3JpcHRpb259XFxuYCArXG4gICAgICAgICAgICBgKipGaWxlOioqICR7cGVyc29uYS5maWxlbmFtZX1cXG5gICtcbiAgICAgICAgICAgIGAqKlZlcnNpb246KiogJHtwZXJzb25hLm1ldGFkYXRhLnZlcnNpb24gfHwgJzEuMCd9XFxuYCArXG4gICAgICAgICAgICBgKipBdXRob3I6KiogJHtwZXJzb25hLm1ldGFkYXRhLmF1dGhvciB8fCAnVW5rbm93bid9XFxuYCArXG4gICAgICAgICAgICBgKipUcmlnZ2VyczoqKiAke3BlcnNvbmEubWV0YWRhdGEudHJpZ2dlcnM/LmpvaW4oJywgJykgfHwgJ05vbmUnfVxcblxcbmAgK1xuICAgICAgICAgICAgYCoqRnVsbCBDb250ZW50OioqXFxuXFxgXFxgXFxgXFxuJHtwZXJzb25hLmNvbnRlbnR9XFxuXFxgXFxgXFxgYCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHJlbG9hZFBlcnNvbmFzKCkge1xuICAgIGF3YWl0IHRoaXMubG9hZFBlcnNvbmFzKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpffCflIQgUmVsb2FkZWQgJHt0aGlzLnBlcnNvbmFzLnNpemV9IHBlcnNvbmFzIGZyb20gJHt0aGlzLnBlcnNvbmFzRGlyfWAsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gIH1cblxuICAvLyA9PT09PSBFbGVtZW50IE1ldGhvZHMgKEdlbmVyaWMgZm9yIGFsbCBlbGVtZW50IHR5cGVzKSA9PT09PVxuICBcbiAgYXN5bmMgbGlzdEVsZW1lbnRzKHR5cGU6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICAvLyBOb3JtYWxpemUgdGhlIHR5cGUgdG8gaGFuZGxlIGJvdGggcGx1cmFsIGFuZCBzaW5ndWxhciBmb3Jtc1xuICAgICAgY29uc3Qgbm9ybWFsaXplZFR5cGUgPSB0aGlzLm5vcm1hbGl6ZUVsZW1lbnRUeXBlKHR5cGUpO1xuICAgICAgXG4gICAgICBzd2l0Y2ggKG5vcm1hbGl6ZWRUeXBlKSB7XG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuUEVSU09OQTpcbiAgICAgICAgICByZXR1cm4gdGhpcy5saXN0UGVyc29uYXMoKTtcbiAgICAgICAgICBcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5TS0lMTDoge1xuICAgICAgICAgIGNvbnN0IHNraWxscyA9IGF3YWl0IHRoaXMuc2tpbGxNYW5hZ2VyLmxpc3QoKTtcbiAgICAgICAgICBpZiAoc2tpbGxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIk5vIHNraWxscyBhcmUgY3VycmVudGx5IGluc3RhbGxlZC4gVGhlIERvbGxob3VzZU1DUCBjb2xsZWN0aW9uIGhhcyBza2lsbHMgZm9yIGNvZGUgcmV2aWV3LCBkYXRhIGFuYWx5c2lzLCBjcmVhdGl2ZSB3cml0aW5nIGFuZCBtb3JlLiBXb3VsZCB5b3UgbGlrZSBtZSB0byBzaG93IHlvdSB3aGF0J3MgYXZhaWxhYmxlPyBKdXN0IHNheSBcXFwieWVzXFxcIiBvciBJIGNhbiBoZWxwIHlvdSBjcmVhdGUgYSBjdXN0b20gc2tpbGwuXCJcbiAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIGNvbnN0IHNraWxsTGlzdCA9IHNraWxscy5tYXAoc2tpbGwgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29tcGxleGl0eSA9IHNraWxsLm1ldGFkYXRhLmNvbXBsZXhpdHkgfHwgJ2JlZ2lubmVyJztcbiAgICAgICAgICAgIGNvbnN0IGRvbWFpbnMgPSBza2lsbC5tZXRhZGF0YS5kb21haW5zPy5qb2luKCcsICcpIHx8ICdnZW5lcmFsJztcbiAgICAgICAgICAgIGNvbnN0IHZlcnNpb24gPSBza2lsbC52ZXJzaW9uIHx8IHNraWxsLm1ldGFkYXRhLnZlcnNpb24gfHwgJzEuMC4wJztcbiAgICAgICAgICAgIHJldHVybiBg8J+boO+4jyAke3NraWxsLm1ldGFkYXRhLm5hbWV9ICh2JHt2ZXJzaW9ufSkgLSAke3NraWxsLm1ldGFkYXRhLmRlc2NyaXB0aW9ufVxcbiAgIENvbXBsZXhpdHk6ICR7Y29tcGxleGl0eX0gfCBEb21haW5zOiAke2RvbWFpbnN9YDtcbiAgICAgICAgICB9KS5qb2luKCdcXG5cXG4nKTtcbiAgICAgICAgICBcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDwn5OaIEF2YWlsYWJsZSBTa2lsbHM6XFxuXFxuJHtza2lsbExpc3R9YFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlRFTVBMQVRFOiB7XG4gICAgICAgICAgY29uc3QgdGVtcGxhdGVzID0gYXdhaXQgdGhpcy50ZW1wbGF0ZU1hbmFnZXIubGlzdCgpO1xuICAgICAgICAgIGlmICh0ZW1wbGF0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgIHRleHQ6IFwiWW91IGhhdmVuJ3QgaW5zdGFsbGVkIGFueSB0ZW1wbGF0ZXMgeWV0LiBXb3VsZCB5b3UgbGlrZSB0byBzZWUgYXZhaWxhYmxlIHRlbXBsYXRlcyBmb3IgZW1haWxzLCByZXBvcnRzLCBhbmQgZG9jdW1lbnRhdGlvbj8gSSBjYW4gc2hvdyB5b3UgZXhhbXBsZXMgZnJvbSB0aGUgY29sbGVjdGlvbiBvciBoZWxwIHlvdSBjcmVhdGUgeW91ciBvd24uIFdoYXQgd291bGQgeW91IHByZWZlcj9cIlxuICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgY29uc3QgdGVtcGxhdGVMaXN0ID0gdGVtcGxhdGVzLm1hcCh0ZW1wbGF0ZSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YXJpYWJsZXMgPSB0ZW1wbGF0ZS5tZXRhZGF0YS52YXJpYWJsZXM/Lm1hcCh2ID0+IHYubmFtZSkuam9pbignLCAnKSB8fCAnbm9uZSc7XG4gICAgICAgICAgICBjb25zdCB2ZXJzaW9uID0gdGVtcGxhdGUudmVyc2lvbiB8fCB0ZW1wbGF0ZS5tZXRhZGF0YS52ZXJzaW9uIHx8ICcxLjAuMCc7XG4gICAgICAgICAgICByZXR1cm4gYPCfk4QgJHt0ZW1wbGF0ZS5tZXRhZGF0YS5uYW1lfSAodiR7dmVyc2lvbn0pIC0gJHt0ZW1wbGF0ZS5tZXRhZGF0YS5kZXNjcmlwdGlvbn1cXG4gICBWYXJpYWJsZXM6ICR7dmFyaWFibGVzfWA7XG4gICAgICAgICAgfSkuam9pbignXFxuXFxuJyk7XG4gICAgICAgICAgXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg8J+TnSBBdmFpbGFibGUgVGVtcGxhdGVzOlxcblxcbiR7dGVtcGxhdGVMaXN0fWBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5BR0VOVDoge1xuICAgICAgICAgIGNvbnN0IGFnZW50cyA9IGF3YWl0IHRoaXMuYWdlbnRNYW5hZ2VyLmxpc3QoKTtcbiAgICAgICAgICBpZiAoYWdlbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIk5vIGFnZW50cyBpbnN0YWxsZWQgeWV0LiBBZ2VudHMgYXJlIGF1dG9ub21vdXMgaGVscGVycyB0aGF0IGNhbiB3b3JrIG9uIHRhc2tzIGluZGVwZW5kZW50bHkuIFRoZSBEb2xsaG91c2VNQ1AgY29sbGVjdGlvbiBpbmNsdWRlcyB0YXNrIG1hbmFnZXJzLCByZXNlYXJjaCBhc3Npc3RhbnRzLCBhbmQgbW9yZS4gV291bGQgeW91IGxpa2UgdG8gYnJvd3NlIGF2YWlsYWJsZSBhZ2VudHMgb3IgbGVhcm4gaG93IHRvIGNyZWF0ZSB5b3VyIG93bj9cIlxuICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgY29uc3QgYWdlbnRMaXN0ID0gYWdlbnRzLm1hcChhZ2VudCA9PiB7XG4gICAgICAgICAgICBjb25zdCBzcGVjaWFsaXphdGlvbnMgPSAoYWdlbnQubWV0YWRhdGEgYXMgYW55KS5zcGVjaWFsaXphdGlvbnM/LmpvaW4oJywgJykgfHwgJ2dlbmVyYWwnO1xuICAgICAgICAgICAgY29uc3Qgc3RhdHVzID0gYWdlbnQuZ2V0U3RhdHVzKCk7XG4gICAgICAgICAgICBjb25zdCB2ZXJzaW9uID0gYWdlbnQudmVyc2lvbiB8fCBhZ2VudC5tZXRhZGF0YS52ZXJzaW9uIHx8ICcxLjAuMCc7XG4gICAgICAgICAgICByZXR1cm4gYPCfpJYgJHthZ2VudC5tZXRhZGF0YS5uYW1lfSAodiR7dmVyc2lvbn0pIC0gJHthZ2VudC5tZXRhZGF0YS5kZXNjcmlwdGlvbn1cXG4gICBTdGF0dXM6ICR7c3RhdHVzfSB8IFNwZWNpYWxpemF0aW9uczogJHtzcGVjaWFsaXphdGlvbnN9YDtcbiAgICAgICAgICB9KS5qb2luKCdcXG5cXG4nKTtcbiAgICAgICAgICBcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDwn6SWIEF2YWlsYWJsZSBBZ2VudHM6XFxuXFxuJHthZ2VudExpc3R9YFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKdjCBVbmtub3duIGVsZW1lbnQgdHlwZSAnJHt0eXBlfScuIEF2YWlsYWJsZSB0eXBlczogJHtPYmplY3QudmFsdWVzKEVsZW1lbnRUeXBlKS5qb2luKCcsICcpfSAob3IgbGVnYWN5IHBsdXJhbCBmb3JtczogcGVyc29uYXMsIHNraWxscywgdGVtcGxhdGVzLCBhZ2VudHMpYFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ0RvbGxob3VzZU1DUFNlcnZlci5oYW5kbGVMaXN0RWxlbWVudHMnLCBlcnJvciwgeyB0eXBlIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBg4p2MIEZhaWxlZCB0byBsaXN0ICR7dHlwZX06ICR7RXJyb3JIYW5kbGVyLmdldFVzZXJNZXNzYWdlKGVycm9yKX1gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBcbiAgYXN5bmMgYWN0aXZhdGVFbGVtZW50KG5hbWU6IHN0cmluZywgdHlwZTogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIE5vcm1hbGl6ZSB0aGUgdHlwZSB0byBoYW5kbGUgYm90aCBwbHVyYWwgYW5kIHNpbmd1bGFyIGZvcm1zXG4gICAgICBjb25zdCBub3JtYWxpemVkVHlwZSA9IHRoaXMubm9ybWFsaXplRWxlbWVudFR5cGUodHlwZSk7XG4gICAgICBcbiAgICAgIHN3aXRjaCAobm9ybWFsaXplZFR5cGUpIHtcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5QRVJTT05BOlxuICAgICAgICAgIHJldHVybiB0aGlzLmFjdGl2YXRlUGVyc29uYShuYW1lKTtcbiAgICAgICAgICBcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5TS0lMTDoge1xuICAgICAgICAgIGNvbnN0IHNraWxsID0gYXdhaXQgdGhpcy5za2lsbE1hbmFnZXIuZmluZChzID0+IHMubWV0YWRhdGEubmFtZSA9PT0gbmFtZSk7XG4gICAgICAgICAgaWYgKCFza2lsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICB0ZXh0OiBg4p2MIFNraWxsICcke25hbWV9JyBub3QgZm91bmRgXG4gICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICAvLyBBY3RpdmF0ZSB0aGUgc2tpbGxcbiAgICAgICAgICBhd2FpdCBza2lsbC5hY3RpdmF0ZT8uKCk7XG4gICAgICAgICAgXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgdGV4dDogYOKchSBTa2lsbCAnJHtuYW1lfScgYWN0aXZhdGVkXFxuXFxuJHtza2lsbC5pbnN0cnVjdGlvbnN9YFxuICAgICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuVEVNUExBVEU6IHtcbiAgICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IGF3YWl0IHRoaXMudGVtcGxhdGVNYW5hZ2VyLmZpbmQodCA9PiB0Lm1ldGFkYXRhLm5hbWUgPT09IG5hbWUpO1xuICAgICAgICAgIGlmICghdGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgdGV4dDogYOKdjCBUZW1wbGF0ZSAnJHtuYW1lfScgbm90IGZvdW5kYFxuICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgY29uc3QgdmFyaWFibGVzID0gdGVtcGxhdGUubWV0YWRhdGEudmFyaWFibGVzPy5tYXAodiA9PiB2Lm5hbWUpLmpvaW4oJywgJykgfHwgJ25vbmUnO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKchSBUZW1wbGF0ZSAnJHtuYW1lfScgcmVhZHkgdG8gdXNlXFxuVmFyaWFibGVzOiAke3ZhcmlhYmxlc31cXG5cXG5Vc2UgJ3JlbmRlcl90ZW1wbGF0ZScgdG8gZ2VuZXJhdGUgY29udGVudCB3aXRoIHRoaXMgdGVtcGxhdGUuYFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLkFHRU5UOiB7XG4gICAgICAgICAgY29uc3QgYWdlbnQgPSBhd2FpdCB0aGlzLmFnZW50TWFuYWdlci5maW5kKGEgPT4gYS5tZXRhZGF0YS5uYW1lID09PSBuYW1lKTtcbiAgICAgICAgICBpZiAoIWFnZW50KSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgIHRleHQ6IGDinYwgQWdlbnQgJyR7bmFtZX0nIG5vdCBmb3VuZGBcbiAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIC8vIEFjdGl2YXRlIHRoZSBhZ2VudFxuICAgICAgICAgIGF3YWl0IGFnZW50LmFjdGl2YXRlKCk7XG4gICAgICAgICAgXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg4pyFIEFnZW50ICcke25hbWV9JyBhY3RpdmF0ZWQgYW5kIHJlYWR5XFxuU3BlY2lhbGl6YXRpb25zOiAkeyhhZ2VudC5tZXRhZGF0YSBhcyBhbnkpLnNwZWNpYWxpemF0aW9ucz8uam9pbignLCAnKSB8fCAnZ2VuZXJhbCd9XFxuXFxuVXNlICdleGVjdXRlX2FnZW50JyB0byBnaXZlIHRoaXMgYWdlbnQgYSBnb2FsLmBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDinYwgVW5rbm93biBlbGVtZW50IHR5cGUgJyR7dHlwZX0nYFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ0RvbGxob3VzZU1DUFNlcnZlci5oYW5kbGVBY3RpdmF0ZUVsZW1lbnQnLCBlcnJvciwgeyB0eXBlLCBuYW1lIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBg4p2MIEZhaWxlZCB0byBhY3RpdmF0ZSAke3R5cGV9ICcke25hbWV9JzogJHtFcnJvckhhbmRsZXIuZ2V0VXNlck1lc3NhZ2UoZXJyb3IpfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG4gIFxuICBhc3luYyBnZXRBY3RpdmVFbGVtZW50cyh0eXBlOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgLy8gTm9ybWFsaXplIHRoZSB0eXBlIHRvIGhhbmRsZSBib3RoIHBsdXJhbCBhbmQgc2luZ3VsYXIgZm9ybXNcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gdGhpcy5ub3JtYWxpemVFbGVtZW50VHlwZSh0eXBlKTtcbiAgICAgIFxuICAgICAgc3dpdGNoIChub3JtYWxpemVkVHlwZSkge1xuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlBFUlNPTkE6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QWN0aXZlUGVyc29uYSgpO1xuICAgICAgICAgIFxuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlNLSUxMOiB7XG4gICAgICAgICAgY29uc3Qgc2tpbGxzID0gYXdhaXQgdGhpcy5za2lsbE1hbmFnZXIubGlzdCgpO1xuICAgICAgICAgIGNvbnN0IGFjdGl2ZVNraWxscyA9IHNraWxscy5maWx0ZXIocyA9PiBzLmdldFN0YXR1cygpID09PSAnYWN0aXZlJyk7XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKGFjdGl2ZVNraWxscy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgdGV4dDogXCLwn5OLIE5vIGFjdGl2ZSBza2lsbHNcIlxuICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgY29uc3Qgc2tpbGxMaXN0ID0gYWN0aXZlU2tpbGxzLm1hcChzID0+IGDwn5ug77iPICR7cy5tZXRhZGF0YS5uYW1lfWApLmpvaW4oJywgJyk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBgQWN0aXZlIHNraWxsczogJHtza2lsbExpc3R9YFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlRFTVBMQVRFOiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBcIvCfk50gVGVtcGxhdGVzIGFyZSBzdGF0ZWxlc3MgYW5kIGFjdGl2YXRlZCBvbi1kZW1hbmQgd2hlbiByZW5kZXJpbmdcIlxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLkFHRU5UOiB7XG4gICAgICAgICAgY29uc3QgYWdlbnRzID0gYXdhaXQgdGhpcy5hZ2VudE1hbmFnZXIubGlzdCgpO1xuICAgICAgICAgIGNvbnN0IGFjdGl2ZUFnZW50cyA9IGFnZW50cy5maWx0ZXIoYSA9PiBhLmdldFN0YXR1cygpID09PSAnYWN0aXZlJyk7XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKGFjdGl2ZUFnZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgdGV4dDogXCLwn6SWIE5vIGFjdGl2ZSBhZ2VudHNcIlxuICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgY29uc3QgYWdlbnRMaXN0ID0gYWN0aXZlQWdlbnRzLm1hcChhID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGdvYWxzID0gKGEgYXMgYW55KS5zdGF0ZT8uZ29hbHM/Lmxlbmd0aCB8fCAwO1xuICAgICAgICAgICAgcmV0dXJuIGDwn6SWICR7YS5tZXRhZGF0YS5uYW1lfSAoJHtnb2Fsc30gYWN0aXZlIGdvYWxzKWA7XG4gICAgICAgICAgfSkuam9pbignXFxuJyk7XG4gICAgICAgICAgXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBgQWN0aXZlIGFnZW50czpcXG4ke2FnZW50TGlzdH1gXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg4p2MIFVua25vd24gZWxlbWVudCB0eXBlICcke3R5cGV9J2BcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gZ2V0IGFjdGl2ZSAke3R5cGV9OmAsIGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYOKdjCBGYWlsZWQgdG8gZ2V0IGFjdGl2ZSAke3R5cGV9OiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG4gIFxuICBhc3luYyBkZWFjdGl2YXRlRWxlbWVudChuYW1lOiBzdHJpbmcsIHR5cGU6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICAvLyBOb3JtYWxpemUgdGhlIHR5cGUgdG8gaGFuZGxlIGJvdGggcGx1cmFsIGFuZCBzaW5ndWxhciBmb3Jtc1xuICAgICAgY29uc3Qgbm9ybWFsaXplZFR5cGUgPSB0aGlzLm5vcm1hbGl6ZUVsZW1lbnRUeXBlKHR5cGUpO1xuICAgICAgXG4gICAgICBzd2l0Y2ggKG5vcm1hbGl6ZWRUeXBlKSB7XG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuUEVSU09OQTpcbiAgICAgICAgICByZXR1cm4gdGhpcy5kZWFjdGl2YXRlUGVyc29uYSgpO1xuICAgICAgICAgIFxuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlNLSUxMOiB7XG4gICAgICAgICAgY29uc3Qgc2tpbGwgPSBhd2FpdCB0aGlzLnNraWxsTWFuYWdlci5maW5kKHMgPT4gcy5tZXRhZGF0YS5uYW1lID09PSBuYW1lKTtcbiAgICAgICAgICBpZiAoIXNraWxsKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgIHRleHQ6IGDinYwgU2tpbGwgJyR7bmFtZX0nIG5vdCBmb3VuZGBcbiAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIGF3YWl0IHNraWxsLmRlYWN0aXZhdGU/LigpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKchSBTa2lsbCAnJHtuYW1lfScgZGVhY3RpdmF0ZWRgXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuVEVNUExBVEU6IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IFwi8J+TnSBUZW1wbGF0ZXMgYXJlIHN0YXRlbGVzcyAtIG5vdGhpbmcgdG8gZGVhY3RpdmF0ZVwiXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuQUdFTlQ6IHtcbiAgICAgICAgICBjb25zdCBhZ2VudCA9IGF3YWl0IHRoaXMuYWdlbnRNYW5hZ2VyLmZpbmQoYSA9PiBhLm1ldGFkYXRhLm5hbWUgPT09IG5hbWUpO1xuICAgICAgICAgIGlmICghYWdlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgdGV4dDogYOKdjCBBZ2VudCAnJHtuYW1lfScgbm90IGZvdW5kYFxuICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgYXdhaXQgYWdlbnQuZGVhY3RpdmF0ZSgpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKchSBBZ2VudCAnJHtuYW1lfScgZGVhY3RpdmF0ZWRgXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg4p2MIFVua25vd24gZWxlbWVudCB0eXBlICcke3R5cGV9J2BcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gZGVhY3RpdmF0ZSAke3R5cGV9ICcke25hbWV9JzpgLCBlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGDinYwgRmFpbGVkIHRvIGRlYWN0aXZhdGUgJHt0eXBlfSAnJHtuYW1lfSc6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgXG4gIGFzeW5jIGdldEVsZW1lbnREZXRhaWxzKG5hbWU6IHN0cmluZywgdHlwZTogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIE5vcm1hbGl6ZSB0aGUgdHlwZSB0byBoYW5kbGUgYm90aCBwbHVyYWwgYW5kIHNpbmd1bGFyIGZvcm1zXG4gICAgICBjb25zdCBub3JtYWxpemVkVHlwZSA9IHRoaXMubm9ybWFsaXplRWxlbWVudFR5cGUodHlwZSk7XG4gICAgICBcbiAgICAgIHN3aXRjaCAobm9ybWFsaXplZFR5cGUpIHtcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5QRVJTT05BOlxuICAgICAgICAgIHJldHVybiB0aGlzLmdldFBlcnNvbmFEZXRhaWxzKG5hbWUpO1xuICAgICAgICAgIFxuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlNLSUxMOiB7XG4gICAgICAgICAgY29uc3Qgc2tpbGwgPSBhd2FpdCB0aGlzLnNraWxsTWFuYWdlci5maW5kKHMgPT4gcy5tZXRhZGF0YS5uYW1lID09PSBuYW1lKTtcbiAgICAgICAgICBpZiAoIXNraWxsKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgIHRleHQ6IGDinYwgU2tpbGwgJyR7bmFtZX0nIG5vdCBmb3VuZGBcbiAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIGNvbnN0IGRldGFpbHMgPSBbXG4gICAgICAgICAgICBg8J+boO+4jyAqKiR7c2tpbGwubWV0YWRhdGEubmFtZX0qKmAsXG4gICAgICAgICAgICBgJHtza2lsbC5tZXRhZGF0YS5kZXNjcmlwdGlvbn1gLFxuICAgICAgICAgICAgYGAsXG4gICAgICAgICAgICBgKipDb21wbGV4aXR5Kio6ICR7c2tpbGwubWV0YWRhdGEuY29tcGxleGl0eSB8fCAnYmVnaW5uZXInfWAsXG4gICAgICAgICAgICBgKipEb21haW5zKio6ICR7c2tpbGwubWV0YWRhdGEuZG9tYWlucz8uam9pbignLCAnKSB8fCAnZ2VuZXJhbCd9YCxcbiAgICAgICAgICAgIGAqKkxhbmd1YWdlcyoqOiAke3NraWxsLm1ldGFkYXRhLmxhbmd1YWdlcz8uam9pbignLCAnKSB8fCAnYW55J31gLFxuICAgICAgICAgICAgYCoqUHJlcmVxdWlzaXRlcyoqOiAke3NraWxsLm1ldGFkYXRhLnByZXJlcXVpc2l0ZXM/LmpvaW4oJywgJykgfHwgJ25vbmUnfWAsXG4gICAgICAgICAgICBgYCxcbiAgICAgICAgICAgIGAqKkluc3RydWN0aW9ucyoqOmAsXG4gICAgICAgICAgICBza2lsbC5pbnN0cnVjdGlvbnNcbiAgICAgICAgICBdO1xuICAgICAgICAgIFxuICAgICAgICAgIGlmIChza2lsbC5tZXRhZGF0YS5wYXJhbWV0ZXJzICYmIHNraWxsLm1ldGFkYXRhLnBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZGV0YWlscy5wdXNoKCcnLCAnKipQYXJhbWV0ZXJzKio6Jyk7XG4gICAgICAgICAgICBza2lsbC5tZXRhZGF0YS5wYXJhbWV0ZXJzLmZvckVhY2gocCA9PiB7XG4gICAgICAgICAgICAgIGRldGFpbHMucHVzaChgLSAke3AubmFtZX0gKCR7cC50eXBlfSk6ICR7cC5kZXNjcmlwdGlvbn1gKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGRldGFpbHMuam9pbignXFxuJylcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5URU1QTEFURToge1xuICAgICAgICAgIGNvbnN0IHRlbXBsYXRlID0gYXdhaXQgdGhpcy50ZW1wbGF0ZU1hbmFnZXIuZmluZCh0ID0+IHQubWV0YWRhdGEubmFtZSA9PT0gbmFtZSk7XG4gICAgICAgICAgaWYgKCF0ZW1wbGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICB0ZXh0OiBg4p2MIFRlbXBsYXRlICcke25hbWV9JyBub3QgZm91bmRgXG4gICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICBjb25zdCBkZXRhaWxzID0gW1xuICAgICAgICAgICAgYPCfk4QgKioke3RlbXBsYXRlLm1ldGFkYXRhLm5hbWV9KipgLFxuICAgICAgICAgICAgYCR7dGVtcGxhdGUubWV0YWRhdGEuZGVzY3JpcHRpb259YCxcbiAgICAgICAgICAgIGBgLFxuICAgICAgICAgICAgYCoqT3V0cHV0IEZvcm1hdCoqOiAkeyh0ZW1wbGF0ZS5tZXRhZGF0YSBhcyBhbnkpLm91dHB1dF9mb3JtYXQgfHwgJ3RleHQnfWAsXG4gICAgICAgICAgICBgKipUZW1wbGF0ZSBDb250ZW50Kio6YCxcbiAgICAgICAgICAgICdgYGAnLFxuICAgICAgICAgICAgdGVtcGxhdGUuY29udGVudCxcbiAgICAgICAgICAgICdgYGAnXG4gICAgICAgICAgXTtcbiAgICAgICAgICBcbiAgICAgICAgICBpZiAodGVtcGxhdGUubWV0YWRhdGEudmFyaWFibGVzICYmIHRlbXBsYXRlLm1ldGFkYXRhLnZhcmlhYmxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBkZXRhaWxzLnB1c2goJycsICcqKlZhcmlhYmxlcyoqOicpO1xuICAgICAgICAgICAgdGVtcGxhdGUubWV0YWRhdGEudmFyaWFibGVzLmZvckVhY2godiA9PiB7XG4gICAgICAgICAgICAgIGRldGFpbHMucHVzaChgLSAke3YubmFtZX0gKCR7di50eXBlfSk6ICR7di5kZXNjcmlwdGlvbn1gKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGRldGFpbHMuam9pbignXFxuJylcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5BR0VOVDoge1xuICAgICAgICAgIGNvbnN0IGFnZW50ID0gYXdhaXQgdGhpcy5hZ2VudE1hbmFnZXIuZmluZChhID0+IGEubWV0YWRhdGEubmFtZSA9PT0gbmFtZSk7XG4gICAgICAgICAgaWYgKCFhZ2VudCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICB0ZXh0OiBg4p2MIEFnZW50ICcke25hbWV9JyBub3QgZm91bmRgXG4gICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICBjb25zdCBkZXRhaWxzID0gW1xuICAgICAgICAgICAgYPCfpJYgKioke2FnZW50Lm1ldGFkYXRhLm5hbWV9KipgLFxuICAgICAgICAgICAgYCR7YWdlbnQubWV0YWRhdGEuZGVzY3JpcHRpb259YCxcbiAgICAgICAgICAgIGBgLFxuICAgICAgICAgICAgYCoqU3RhdHVzKio6ICR7YWdlbnQuZ2V0U3RhdHVzKCl9YCxcbiAgICAgICAgICAgIGAqKlNwZWNpYWxpemF0aW9ucyoqOiAkeyhhZ2VudC5tZXRhZGF0YSBhcyBhbnkpLnNwZWNpYWxpemF0aW9ucz8uam9pbignLCAnKSB8fCAnZ2VuZXJhbCd9YCxcbiAgICAgICAgICAgIGAqKkRlY2lzaW9uIEZyYW1ld29yayoqOiAkeyhhZ2VudC5tZXRhZGF0YSBhcyBhbnkpLmRlY2lzaW9uRnJhbWV3b3JrIHx8ICdydWxlLWJhc2VkJ31gLFxuICAgICAgICAgICAgYCoqUmlzayBUb2xlcmFuY2UqKjogJHsoYWdlbnQubWV0YWRhdGEgYXMgYW55KS5yaXNrVG9sZXJhbmNlIHx8ICdsb3cnfWAsXG4gICAgICAgICAgICBgYCxcbiAgICAgICAgICAgIGAqKkluc3RydWN0aW9ucyoqOmAsXG4gICAgICAgICAgICAoYWdlbnQgYXMgYW55KS5pbnN0cnVjdGlvbnMgfHwgJ05vIGluc3RydWN0aW9ucyBhdmFpbGFibGUnXG4gICAgICAgICAgXTtcbiAgICAgICAgICBcbiAgICAgICAgICBjb25zdCBhZ2VudFN0YXRlID0gKGFnZW50IGFzIGFueSkuc3RhdGU7XG4gICAgICAgICAgaWYgKGFnZW50U3RhdGU/LmdvYWxzICYmIGFnZW50U3RhdGUuZ29hbHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZGV0YWlscy5wdXNoKCcnLCAnKipDdXJyZW50IEdvYWxzKio6Jyk7XG4gICAgICAgICAgICBhZ2VudFN0YXRlLmdvYWxzLmZvckVhY2goKGc6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBkZXRhaWxzLnB1c2goYC0gJHtnLmRlc2NyaXB0aW9ufSAoJHtnLnN0YXR1c30pYCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBkZXRhaWxzLmpvaW4oJ1xcbicpXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg4p2MIFVua25vd24gZWxlbWVudCB0eXBlICcke3R5cGV9J2BcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gZ2V0ICR7dHlwZX0gZGV0YWlscyBmb3IgJyR7bmFtZX0nOmAsIGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYOKdjCBGYWlsZWQgdG8gZ2V0ICR7dHlwZX0gZGV0YWlsczogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBcbiAgYXN5bmMgcmVsb2FkRWxlbWVudHModHlwZTogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIE5vcm1hbGl6ZSB0aGUgdHlwZSB0byBoYW5kbGUgYm90aCBwbHVyYWwgYW5kIHNpbmd1bGFyIGZvcm1zXG4gICAgICBjb25zdCBub3JtYWxpemVkVHlwZSA9IHRoaXMubm9ybWFsaXplRWxlbWVudFR5cGUodHlwZSk7XG4gICAgICBcbiAgICAgIHN3aXRjaCAobm9ybWFsaXplZFR5cGUpIHtcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5QRVJTT05BOlxuICAgICAgICAgIHJldHVybiB0aGlzLnJlbG9hZFBlcnNvbmFzKCk7XG4gICAgICAgICAgXG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuU0tJTEw6IHtcbiAgICAgICAgICB0aGlzLnNraWxsTWFuYWdlci5jbGVhckNhY2hlKCk7XG4gICAgICAgICAgY29uc3Qgc2tpbGxzID0gYXdhaXQgdGhpcy5za2lsbE1hbmFnZXIubGlzdCgpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYPCflIQgUmVsb2FkZWQgJHtza2lsbHMubGVuZ3RofSBza2lsbHMgZnJvbSBwb3J0Zm9saW9gXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuVEVNUExBVEU6IHtcbiAgICAgICAgICAvLyBUZW1wbGF0ZSBtYW5hZ2VyIGRvZXNuJ3QgaGF2ZSBjbGVhckNhY2hlLCBqdXN0IGxpc3RcbiAgICAgICAgICBjb25zdCB0ZW1wbGF0ZXMgPSBhd2FpdCB0aGlzLnRlbXBsYXRlTWFuYWdlci5saXN0KCk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg8J+UhCBSZWxvYWRlZCAke3RlbXBsYXRlcy5sZW5ndGh9IHRlbXBsYXRlcyBmcm9tIHBvcnRmb2xpb2BcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5BR0VOVDoge1xuICAgICAgICAgIC8vIEFnZW50IG1hbmFnZXIgZG9lc24ndCBoYXZlIGNsZWFyQ2FjaGUsIGp1c3QgbGlzdFxuICAgICAgICAgIGNvbnN0IGFnZW50cyA9IGF3YWl0IHRoaXMuYWdlbnRNYW5hZ2VyLmxpc3QoKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDwn5SEIFJlbG9hZGVkICR7YWdlbnRzLmxlbmd0aH0gYWdlbnRzIGZyb20gcG9ydGZvbGlvYFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKdjCBVbmtub3duIGVsZW1lbnQgdHlwZSAnJHt0eXBlfSdgXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIHJlbG9hZCAke3R5cGV9OmAsIGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYOKdjCBGYWlsZWQgdG8gcmVsb2FkICR7dHlwZX06ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgXG4gIC8vIEVsZW1lbnQtc3BlY2lmaWMgbWV0aG9kc1xuICBhc3luYyByZW5kZXJUZW1wbGF0ZShuYW1lOiBzdHJpbmcsIHZhcmlhYmxlczogUmVjb3JkPHN0cmluZywgYW55Pikge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0ZW1wbGF0ZSA9IGF3YWl0IHRoaXMudGVtcGxhdGVNYW5hZ2VyLmZpbmQodCA9PiB0Lm1ldGFkYXRhLm5hbWUgPT09IG5hbWUpO1xuICAgICAgaWYgKCF0ZW1wbGF0ZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGDinYwgVGVtcGxhdGUgJyR7bmFtZX0nIG5vdCBmb3VuZGBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBTaW1wbGUgdGVtcGxhdGUgcmVuZGVyaW5nIC0gcmVwbGFjZSB2YXJpYWJsZXMgaW4gY29udGVudFxuICAgICAgbGV0IHJlbmRlcmVkID0gdGVtcGxhdGUuY29udGVudDtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhcmlhYmxlcykpIHtcbiAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGBcXFxce1xcXFx7XFxcXHMqJHtrZXl9XFxcXHMqXFxcXH1cXFxcfWAsICdnJyk7XG4gICAgICAgIHJlbmRlcmVkID0gcmVuZGVyZWQucmVwbGFjZShyZWdleCwgU3RyaW5nKHZhbHVlKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGDwn5OEIFJlbmRlcmVkIHRlbXBsYXRlICcke25hbWV9JzpcXG5cXG4ke3JlbmRlcmVkfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIHJlbmRlciB0ZW1wbGF0ZSAnJHtuYW1lfSc6YCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBg4p2MIEZhaWxlZCB0byByZW5kZXIgdGVtcGxhdGU6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgXG4gIGFzeW5jIGV4ZWN1dGVBZ2VudChuYW1lOiBzdHJpbmcsIGdvYWw6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBhZ2VudCA9IGF3YWl0IHRoaXMuYWdlbnRNYW5hZ2VyLmZpbmQoYSA9PiBhLm1ldGFkYXRhLm5hbWUgPT09IG5hbWUpO1xuICAgICAgaWYgKCFhZ2VudCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGDinYwgQWdlbnQgJyR7bmFtZX0nIG5vdCBmb3VuZGBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBTaW1wbGUgYWdlbnQgZXhlY3V0aW9uIHNpbXVsYXRpb25cbiAgICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgICAgc3VtbWFyeTogYEFnZW50ICcke25hbWV9JyBpcyBub3cgd29ya2luZyBvbjogJHtnb2FsfWAsXG4gICAgICAgIHN0YXR1czogJ2luLXByb2dyZXNzJyxcbiAgICAgICAgYWN0aW9uc1Rha2VuOiAxXG4gICAgICB9O1xuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGDwn6SWIEFnZW50ICcke25hbWV9JyBleGVjdXRpb24gcmVzdWx0OlxcblxcbiR7cmVzdWx0LnN1bW1hcnl9XFxuXFxuU3RhdHVzOiAke3Jlc3VsdC5zdGF0dXN9XFxuQWN0aW9ucyB0YWtlbjogJHtyZXN1bHQuYWN0aW9uc1Rha2VuIHx8IDB9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gZXhlY3V0ZSBhZ2VudCAnJHtuYW1lfSc6YCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBg4p2MIEZhaWxlZCB0byBleGVjdXRlIGFnZW50OiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG4gIFxuICBhc3luYyBjcmVhdGVFbGVtZW50KGFyZ3M6IHtuYW1lOiBzdHJpbmc7IHR5cGU6IHN0cmluZzsgZGVzY3JpcHRpb246IHN0cmluZzsgY29udGVudD86IHN0cmluZzsgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+fSkge1xuICAgIC8vIEVuc3VyZSBpbml0aWFsaXphdGlvbiBmb3IgdGVzdCBjb21wYXRpYmlsaXR5XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIFxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IG5hbWUsIHR5cGUsIGRlc2NyaXB0aW9uLCBjb250ZW50LCBtZXRhZGF0YSB9ID0gYXJncztcbiAgICAgIFxuICAgICAgLy8gVmFsaWRhdGUgZWxlbWVudCB0eXBlXG4gICAgICBpZiAoIU9iamVjdC52YWx1ZXMoRWxlbWVudFR5cGUpLmluY2x1ZGVzKHR5cGUgYXMgRWxlbWVudFR5cGUpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYOKdjCBJbnZhbGlkIGVsZW1lbnQgdHlwZSAnJHt0eXBlfScuIFZhbGlkIHR5cGVzOiAke09iamVjdC52YWx1ZXMoRWxlbWVudFR5cGUpLmpvaW4oJywgJyl9IChvciBsZWdhY3kgcGx1cmFsIGZvcm1zOiBwZXJzb25hcywgc2tpbGxzLCB0ZW1wbGF0ZXMsIGFnZW50cylgXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gVmFsaWRhdGUgaW5wdXRzXG4gICAgICBjb25zdCB2YWxpZGF0ZWROYW1lID0gdmFsaWRhdGVGaWxlbmFtZShuYW1lKTtcbiAgICAgIGNvbnN0IHZhbGlkYXRlZERlc2NyaXB0aW9uID0gc2FuaXRpemVJbnB1dChkZXNjcmlwdGlvbiwgU0VDVVJJVFlfTElNSVRTLk1BWF9NRVRBREFUQV9GSUVMRF9MRU5HVEgpO1xuICAgICAgXG4gICAgICAvLyBDUklUSUNBTCBGSVg6IFZhbGlkYXRlIGNvbnRlbnQgc2l6ZSBCRUZPUkUgcHJvY2Vzc2luZyB0byBwcmV2ZW50IG1lbW9yeSBleGhhdXN0aW9uXG4gICAgICAvLyBUaGlzIHByZXZlbnRzIENsYXVkZSBmcm9tIHRyeWluZyB0byBvdXRwdXQgbWFzc2l2ZSBjb250ZW50IGluIHJlc3BvbnNlc1xuICAgICAgaWYgKGNvbnRlbnQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YWxpZGF0ZUNvbnRlbnRTaXplKGNvbnRlbnQsIFNFQ1VSSVRZX0xJTUlUUy5NQVhfQ09OVEVOVF9MRU5HVEgpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg4p2MIENvbnRlbnQgdG9vIGxhcmdlOiAke2Vycm9yLm1lc3NhZ2V9LiBNYXhpbXVtIGFsbG93ZWQgc2l6ZSBpcyAke1NFQ1VSSVRZX0xJTUlUUy5NQVhfQ09OVEVOVF9MRU5HVEh9IGNoYXJhY3RlcnMgKCR7TWF0aC5mbG9vcihTRUNVUklUWV9MSU1JVFMuTUFYX0NPTlRFTlRfTEVOR1RIIC8gMTAyNCl9S0IpLmBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBTRUNVUklUWSBGSVg6IFNhbml0aXplIG1ldGFkYXRhIHRvIHByZXZlbnQgcHJvdG90eXBlIHBvbGx1dGlvblxuICAgICAgY29uc3Qgc2FuaXRpemVkTWV0YWRhdGEgPSB0aGlzLnNhbml0aXplTWV0YWRhdGEobWV0YWRhdGEgfHwge30pO1xuICAgICAgXG4gICAgICAvLyBDcmVhdGUgZWxlbWVudCBiYXNlZCBvbiB0eXBlXG4gICAgICBzd2l0Y2ggKHR5cGUgYXMgRWxlbWVudFR5cGUpIHtcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5QRVJTT05BOlxuICAgICAgICAgIC8vIFVzZSBleGlzdGluZyBwZXJzb25hIGNyZWF0aW9uIGxvZ2ljXG4gICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlUGVyc29uYShcbiAgICAgICAgICAgIHZhbGlkYXRlZE5hbWUsIFxuICAgICAgICAgICAgdmFsaWRhdGVkRGVzY3JpcHRpb24sIFxuICAgICAgICAgICAgY29udGVudCB8fCAnJyxcbiAgICAgICAgICAgIHNhbml0aXplZE1ldGFkYXRhPy50cmlnZ2Vyc1xuICAgICAgICAgICk7XG4gICAgICAgICAgXG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuU0tJTEw6XG4gICAgICAgICAgY29uc3Qgc2tpbGwgPSBhd2FpdCB0aGlzLnNraWxsTWFuYWdlci5jcmVhdGUoe1xuICAgICAgICAgICAgbmFtZTogdmFsaWRhdGVkTmFtZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB2YWxpZGF0ZWREZXNjcmlwdGlvbixcbiAgICAgICAgICAgIC4uLnNhbml0aXplZE1ldGFkYXRhLFxuICAgICAgICAgICAgY29udGVudDogY29udGVudCB8fCAnJ1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKchSBDcmVhdGVkIHNraWxsICcke3NraWxsLm1ldGFkYXRhLm5hbWV9JyBzdWNjZXNzZnVsbHlgXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgICAgXG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuVEVNUExBVEU6XG4gICAgICAgICAgY29uc3QgdGVtcGxhdGUgPSBhd2FpdCB0aGlzLnRlbXBsYXRlTWFuYWdlci5jcmVhdGUoe1xuICAgICAgICAgICAgbmFtZTogdmFsaWRhdGVkTmFtZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB2YWxpZGF0ZWREZXNjcmlwdGlvbixcbiAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQgfHwgJycsXG4gICAgICAgICAgICAuLi5zYW5pdGl6ZWRNZXRhZGF0YVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKchSBDcmVhdGVkIHRlbXBsYXRlICcke3RlbXBsYXRlLm1ldGFkYXRhLm5hbWV9JyBzdWNjZXNzZnVsbHlgXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgICAgXG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuQUdFTlQ6XG4gICAgICAgICAgY29uc3QgYWdlbnRSZXN1bHQgPSBhd2FpdCB0aGlzLmFnZW50TWFuYWdlci5jcmVhdGUoXG4gICAgICAgICAgICB2YWxpZGF0ZWROYW1lLFxuICAgICAgICAgICAgdmFsaWRhdGVkRGVzY3JpcHRpb24sXG4gICAgICAgICAgICBjb250ZW50IHx8ICcnLFxuICAgICAgICAgICAgc2FuaXRpemVkTWV0YWRhdGFcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICghYWdlbnRSZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICB0ZXh0OiBg4p2MICR7YWdlbnRSZXN1bHQubWVzc2FnZX1gXG4gICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDinIUgQ3JlYXRlZCBhZ2VudCAnJHt2YWxpZGF0ZWROYW1lfScgc3VjY2Vzc2Z1bGx5YFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICAgIFxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKdjCBFbGVtZW50IHR5cGUgJyR7dHlwZX0nIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIGZvciBjcmVhdGlvbmBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gY3JlYXRlIGVsZW1lbnQ6YCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBg4p2MIEZhaWxlZCB0byBjcmVhdGUgZWxlbWVudDogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBcbiAgYXN5bmMgZWRpdEVsZW1lbnQoYXJnczoge25hbWU6IHN0cmluZzsgdHlwZTogc3RyaW5nOyBmaWVsZDogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IFJlY29yZDxzdHJpbmcsIGFueT4gfCBhbnlbXX0pIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBuYW1lLCB0eXBlLCBmaWVsZCwgdmFsdWUgfSA9IGFyZ3M7XG4gICAgICBcbiAgICAgIC8vIFZhbGlkYXRlIGVsZW1lbnQgdHlwZVxuICAgICAgaWYgKCFPYmplY3QudmFsdWVzKEVsZW1lbnRUeXBlKS5pbmNsdWRlcyh0eXBlIGFzIEVsZW1lbnRUeXBlKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGDinYwgSW52YWxpZCBlbGVtZW50IHR5cGUgJyR7dHlwZX0nLiBWYWxpZCB0eXBlczogJHtPYmplY3QudmFsdWVzKEVsZW1lbnRUeXBlKS5qb2luKCcsICcpfSAob3IgbGVnYWN5IHBsdXJhbCBmb3JtczogcGVyc29uYXMsIHNraWxscywgdGVtcGxhdGVzLCBhZ2VudHMpYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEZvciBwZXJzb25hcywgdXNlIGV4aXN0aW5nIGVkaXQgbG9naWNcbiAgICAgIGlmICh0eXBlID09PSBFbGVtZW50VHlwZS5QRVJTT05BKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRQZXJzb25hKG5hbWUsIGZpZWxkLCBTdHJpbmcodmFsdWUpKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gVFlQRSBTQUZFVFk6IERlZmluZSBhIGNvbW1vbiBpbnRlcmZhY2UgZm9yIGVsZW1lbnQgbWFuYWdlcnNcbiAgICAgIGludGVyZmFjZSBFbGVtZW50TWFuYWdlckJhc2U8VD4ge1xuICAgICAgICBmaW5kKHByZWRpY2F0ZTogKGVsZW1lbnQ6IFQpID0+IGJvb2xlYW4pOiBQcm9taXNlPFQgfCB1bmRlZmluZWQ+O1xuICAgICAgICBzYXZlKGVsZW1lbnQ6IFQsIGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBHZXQgdGhlIGFwcHJvcHJpYXRlIG1hbmFnZXIgYmFzZWQgb24gdHlwZSB3aXRoIHByb3BlciB0eXBpbmdcbiAgICAgIGxldCBtYW5hZ2VyOiBFbGVtZW50TWFuYWdlckJhc2U8U2tpbGwgfCBUZW1wbGF0ZSB8IEFnZW50PiB8IG51bGwgPSBudWxsO1xuICAgICAgbGV0IGVsZW1lbnQ6IFNraWxsIHwgVGVtcGxhdGUgfCBBZ2VudCB8IHVuZGVmaW5lZDtcbiAgICAgIFxuICAgICAgc3dpdGNoICh0eXBlIGFzIEVsZW1lbnRUeXBlKSB7XG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuU0tJTEw6XG4gICAgICAgICAgbWFuYWdlciA9IHRoaXMuc2tpbGxNYW5hZ2VyIGFzIEVsZW1lbnRNYW5hZ2VyQmFzZTxTa2lsbD47XG4gICAgICAgICAgZWxlbWVudCA9IGF3YWl0IHRoaXMuc2tpbGxNYW5hZ2VyLmZpbmQoKGU6IFNraWxsKSA9PiBlLm1ldGFkYXRhLm5hbWUgPT09IG5hbWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlRFTVBMQVRFOlxuICAgICAgICAgIG1hbmFnZXIgPSB0aGlzLnRlbXBsYXRlTWFuYWdlciBhcyBFbGVtZW50TWFuYWdlckJhc2U8VGVtcGxhdGU+O1xuICAgICAgICAgIGVsZW1lbnQgPSBhd2FpdCB0aGlzLnRlbXBsYXRlTWFuYWdlci5maW5kKChlOiBUZW1wbGF0ZSkgPT4gZS5tZXRhZGF0YS5uYW1lID09PSBuYW1lKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5BR0VOVDpcbiAgICAgICAgICBtYW5hZ2VyID0gdGhpcy5hZ2VudE1hbmFnZXIgYXMgRWxlbWVudE1hbmFnZXJCYXNlPEFnZW50PjtcbiAgICAgICAgICBlbGVtZW50ID0gYXdhaXQgdGhpcy5hZ2VudE1hbmFnZXIuZmluZCgoZTogQWdlbnQpID0+IGUubWV0YWRhdGEubmFtZSA9PT0gbmFtZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg4p2MIEVsZW1lbnQgdHlwZSAnJHt0eXBlfScgaXMgbm90IHlldCBzdXBwb3J0ZWQgZm9yIGVkaXRpbmdgXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGlmIGVsZW1lbnQgd2FzIGZvdW5kXG4gICAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBg4p2MICR7dHlwZX0gJyR7bmFtZX0nIG5vdCBmb3VuZGBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBIYW5kbGUgbmVzdGVkIGZpZWxkIHVwZGF0ZXMgKGUuZy4sIFwibWV0YWRhdGEuYXV0aG9yXCIpXG4gICAgICBjb25zdCBmaWVsZFBhcnRzID0gZmllbGQuc3BsaXQoJy4nKTtcbiAgICAgIFxuICAgICAgLy8gU0VDVVJJVFkgRklYOiBWYWxpZGF0ZSBmaWVsZCBuYW1lcyB0byBwcmV2ZW50IHByb3RvdHlwZSBwb2xsdXRpb25cbiAgICAgIGNvbnN0IGRhbmdlcm91c1Byb3BlcnRpZXMgPSBbJ19fcHJvdG9fXycsICdjb25zdHJ1Y3RvcicsICdwcm90b3R5cGUnXTtcbiAgICAgIGZvciAoY29uc3QgcGFydCBvZiBmaWVsZFBhcnRzKSB7XG4gICAgICAgIGlmIChkYW5nZXJvdXNQcm9wZXJ0aWVzLmluY2x1ZGVzKHBhcnQpKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg4p2MIEludmFsaWQgZmllbGQgbmFtZTogJyR7cGFydH0nIGlzIG5vdCBhbGxvd2VkIGZvciBzZWN1cml0eSByZWFzb25zYFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIGxldCB0YXJnZXQ6IGFueSA9IGVsZW1lbnQ7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpZWxkUGFydHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgIC8vIFNFQ1VSSVRZOiBBZGRpdGlvbmFsIGNoZWNrIHRvIHByZXZlbnQgcHJvdG90eXBlIHBvbGx1dGlvblxuICAgICAgICBpZiAodHlwZW9mIHRhcmdldCAhPT0gJ29iamVjdCcgfHwgdGFyZ2V0ID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg4p2MIENhbm5vdCBzZXQgcHJvcGVydHkgJyR7ZmllbGRQYXJ0c1tpXX0nIG9uIG5vbi1vYmplY3RgXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGlmICghdGFyZ2V0W2ZpZWxkUGFydHNbaV1dKSB7XG4gICAgICAgICAgLy8gU0VDVVJJVFk6IFVzZSBPYmplY3QuZGVmaW5lUHJvcGVydHkgdG8gYXZvaWQgcHJvdG90eXBlIGNoYWluIHBvbGx1dGlvblxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGZpZWxkUGFydHNbaV0sIHtcbiAgICAgICAgICAgIHZhbHVlOiB7fSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRhcmdldCA9IHRhcmdldFtmaWVsZFBhcnRzW2ldXTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gVXBkYXRlIHRoZSBmaWVsZFxuICAgICAgY29uc3QgbGFzdEZpZWxkID0gZmllbGRQYXJ0c1tmaWVsZFBhcnRzLmxlbmd0aCAtIDFdO1xuICAgICAgLy8gU0VDVVJJVFk6IFVzZSBPYmplY3QuZGVmaW5lUHJvcGVydHkgZm9yIHRoZSBmaW5hbCBhc3NpZ25tZW50IHRvb1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbGFzdEZpZWxkLCB7XG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIC8vIFZFUlNJT04gRklYOiBIYW5kbGUgdmVyc2lvbiBmaWVsZCB1cGRhdGVzIGRpZmZlcmVudGx5XG4gICAgICAvLyBJZiB1c2VyIGlzIGRpcmVjdGx5IGVkaXRpbmcgdmVyc2lvbiBmaWVsZCwgZG9uJ3QgYXV0by1pbmNyZW1lbnRcbiAgICAgIGlmIChmaWVsZCA9PT0gJ3ZlcnNpb24nIHx8IGZpZWxkID09PSAnbWV0YWRhdGEudmVyc2lvbicpIHtcbiAgICAgICAgY29uc3QgdmVyc2lvblN0cmluZyA9IFN0cmluZyh2YWx1ZSk7XG4gICAgICAgIFxuICAgICAgICAvLyBWRVJTSU9OIFZBTElEQVRJT046IFZhbGlkYXRlIHZlcnNpb24gZm9ybWF0XG4gICAgICAgIC8vIEFjY2VwdCBzZW12ZXIgKDEuMC4wKSwgdHdvLXBhcnQgKDEuMCksIG9yIHNpbmdsZSBkaWdpdCAoMSlcbiAgICAgICAgLy8gQWxzbyBhY2NlcHRzIHByZS1yZWxlYXNlIHZlcnNpb25zICgxLjAuMC1iZXRhLCAxLjAuMC1hbHBoYS4xKVxuICAgICAgICBjb25zdCBpc1ZhbGlkVmVyc2lvbiA9IC9eKFxcZCspKFxcLlxcZCspPyhcXC5cXGQrKT8oLVthLXpBLVowLTkuLV0rKT8kLy50ZXN0KHZlcnNpb25TdHJpbmcpO1xuICAgICAgICBpZiAoIWlzVmFsaWRWZXJzaW9uKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg4p2MIEludmFsaWQgdmVyc2lvbiBmb3JtYXQ6ICcke3ZlcnNpb25TdHJpbmd9Jy4gUGxlYXNlIHVzZSBmb3JtYXQgbGlrZSAxLjAuMCwgMS4wLCBvciAxYFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBFUlJPUiBIQU5ETElORzogV3JhcCB2ZXJzaW9uIHVwZGF0ZSBpbiB0cnktY2F0Y2hcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBVcGRhdGUgYm90aCBsb2NhdGlvbnMgdG8gZW5zdXJlIGNvbnNpc3RlbmN5XG4gICAgICAgICAgZWxlbWVudC52ZXJzaW9uID0gdmVyc2lvblN0cmluZztcbiAgICAgICAgICBpZiAoZWxlbWVudC5tZXRhZGF0YSkge1xuICAgICAgICAgICAgZWxlbWVudC5tZXRhZGF0YS52ZXJzaW9uID0gdmVyc2lvblN0cmluZztcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gdXBkYXRlIHZlcnNpb24gZm9yICR7bmFtZX06YCwgZXJyb3IpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKdjCBGYWlsZWQgdG8gdXBkYXRlIHZlcnNpb246ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGb3Igb3RoZXIgZmllbGQgZWRpdHMsIGF1dG8taW5jcmVtZW50IHZlcnNpb25cbiAgICAgICAgLy8gVkVSU0lPTiBGSVg6IFVwZGF0ZSBib3RoIGVsZW1lbnQudmVyc2lvbiBBTkQgZWxlbWVudC5tZXRhZGF0YS52ZXJzaW9uXG4gICAgICAgIC8vIFByZXZpb3VzbHk6IE9ubHkgZWxlbWVudC52ZXJzaW9uIHdhcyB1cGRhdGVkLCBidXQgc29tZSBtYW5hZ2VycyByZWFkIGZyb20gbWV0YWRhdGEudmVyc2lvblxuICAgICAgICAvLyBOb3c6IEtlZXAgYm90aCBpbiBzeW5jIHRvIGVuc3VyZSB2ZXJzaW9uIHBlcnNpc3RzIGNvcnJlY3RseVxuICAgICAgICBcbiAgICAgICAgLy8gRVJST1IgSEFORExJTkc6IFdyYXAgYXV0by1pbmNyZW1lbnQgaW4gdHJ5LWNhdGNoXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKGVsZW1lbnQudmVyc2lvbikge1xuICAgICAgICAgICAgLy8gUFJFLVJFTEVBU0UgSEFORExJTkc6IENoZWNrIGZvciBwcmUtcmVsZWFzZSB2ZXJzaW9uc1xuICAgICAgICAgICAgY29uc3QgcHJlUmVsZWFzZU1hdGNoID0gZWxlbWVudC52ZXJzaW9uLm1hdGNoKC9eKFxcZCtcXC5cXGQrXFwuXFxkKykoLShbYS16QS1aMC05Li1dKykpPyQvKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKHByZVJlbGVhc2VNYXRjaCkge1xuICAgICAgICAgICAgICAvLyBIYW5kbGUgcHJlLXJlbGVhc2UgdmVyc2lvbnMgKGUuZy4sIDEuMC4wLWJldGEuMSlcbiAgICAgICAgICAgICAgY29uc3QgYmFzZVZlcnNpb24gPSBwcmVSZWxlYXNlTWF0Y2hbMV07XG4gICAgICAgICAgICAgIGNvbnN0IHByZVJlbGVhc2VUYWcgPSBwcmVSZWxlYXNlTWF0Y2hbM107XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICBpZiAocHJlUmVsZWFzZVRhZykge1xuICAgICAgICAgICAgICAgIC8vIElmIGl0IGhhcyBhIHByZS1yZWxlYXNlIHRhZywgaW5jcmVtZW50IHRoZSBwcmUtcmVsZWFzZSBudW1iZXJcbiAgICAgICAgICAgICAgICBjb25zdCBwcmVSZWxlYXNlTnVtYmVyTWF0Y2ggPSBwcmVSZWxlYXNlVGFnLm1hdGNoKC9eKFthLXpBLVpdKylcXC4/KFxcZCspPyQvKTtcbiAgICAgICAgICAgICAgICBpZiAocHJlUmVsZWFzZU51bWJlck1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBwcmVSZWxlYXNlVHlwZSA9IHByZVJlbGVhc2VOdW1iZXJNYXRjaFsxXTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHByZVJlbGVhc2VOdW1iZXIgPSBwYXJzZUludChwcmVSZWxlYXNlTnVtYmVyTWF0Y2hbMl0gfHwgJzAnKSArIDE7XG4gICAgICAgICAgICAgICAgICBlbGVtZW50LnZlcnNpb24gPSBgJHtiYXNlVmVyc2lvbn0tJHtwcmVSZWxlYXNlVHlwZX0uJHtwcmVSZWxlYXNlTnVtYmVyfWA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIC8vIENvbXBsZXggcHJlLXJlbGVhc2UsIGp1c3QgaW5jcmVtZW50IHBhdGNoXG4gICAgICAgICAgICAgICAgICBjb25zdCBbbWFqb3IsIG1pbm9yLCBwYXRjaF0gPSBiYXNlVmVyc2lvbi5zcGxpdCgnLicpLm1hcChOdW1iZXIpO1xuICAgICAgICAgICAgICAgICAgZWxlbWVudC52ZXJzaW9uID0gYCR7bWFqb3J9LiR7bWlub3J9LiR7cGF0Y2ggKyAxfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFJlZ3VsYXIgc2VtdmVyLCBpbmNyZW1lbnQgcGF0Y2hcbiAgICAgICAgICAgICAgICBjb25zdCBbbWFqb3IsIG1pbm9yLCBwYXRjaF0gPSBiYXNlVmVyc2lvbi5zcGxpdCgnLicpLm1hcChOdW1iZXIpO1xuICAgICAgICAgICAgICAgIGVsZW1lbnQudmVyc2lvbiA9IGAke21ham9yfS4ke21pbm9yfS4ke3BhdGNoICsgMX1gO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBIYW5kbGUgbm9uLXNlbXZlciB2ZXJzaW9uc1xuICAgICAgICAgICAgICBjb25zdCB2ZXJzaW9uUGFydHMgPSBlbGVtZW50LnZlcnNpb24uc3BsaXQoJy4nKTtcbiAgICAgICAgICAgICAgaWYgKHZlcnNpb25QYXJ0cy5sZW5ndGggPj0gMykge1xuICAgICAgICAgICAgICAgIC8vIFN0YW5kYXJkIHNlbXZlciBmb3JtYXQgKGUuZy4sIDEuMC4wKVxuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGNoID0gcGFyc2VJbnQodmVyc2lvblBhcnRzWzJdKSB8fCAwO1xuICAgICAgICAgICAgICAgIHZlcnNpb25QYXJ0c1syXSA9IFN0cmluZyhwYXRjaCArIDEpO1xuICAgICAgICAgICAgICAgIGVsZW1lbnQudmVyc2lvbiA9IHZlcnNpb25QYXJ0cy5qb2luKCcuJyk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodmVyc2lvblBhcnRzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgICAgIC8vIFR3by1wYXJ0IHZlcnNpb24gKGUuZy4sIDEuMCkgLSBhZGQgcGF0Y2ggdmVyc2lvblxuICAgICAgICAgICAgICAgIGVsZW1lbnQudmVyc2lvbiA9IGAke2VsZW1lbnQudmVyc2lvbn0uMWA7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodmVyc2lvblBhcnRzLmxlbmd0aCA9PT0gMSAmJiAvXlxcZCskLy50ZXN0KHZlcnNpb25QYXJ0c1swXSkpIHtcbiAgICAgICAgICAgICAgICAvLyBTaW5nbGUgbnVtYmVyIHZlcnNpb24gKGUuZy4sIDEpIC0gY29udmVydCB0byBzZW12ZXJcbiAgICAgICAgICAgICAgICBlbGVtZW50LnZlcnNpb24gPSBgJHtlbGVtZW50LnZlcnNpb259LjAuMWA7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gTm9uLXN0YW5kYXJkIHZlcnNpb24gLSBhcHBlbmQgb3IgcmVwbGFjZSB3aXRoIHN0YW5kYXJkIGZvcm1hdFxuICAgICAgICAgICAgICAgIGVsZW1lbnQudmVyc2lvbiA9ICcxLjAuMSc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gTm8gdmVyc2lvbiAtIHNldCBpbml0aWFsIHZlcnNpb25cbiAgICAgICAgICAgIGVsZW1lbnQudmVyc2lvbiA9ICcxLjAuMCc7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIC8vIEVuc3VyZSBtZXRhZGF0YS52ZXJzaW9uIGlzIGFsc28gdXBkYXRlZCBmb3IgbWFuYWdlcnMgdGhhdCB1c2UgaXRcbiAgICAgICAgICBpZiAoZWxlbWVudC5tZXRhZGF0YSkge1xuICAgICAgICAgICAgZWxlbWVudC5tZXRhZGF0YS52ZXJzaW9uID0gZWxlbWVudC52ZXJzaW9uO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBhdXRvLWluY3JlbWVudCB2ZXJzaW9uIGZvciAke25hbWV9OmAsIGVycm9yKTtcbiAgICAgICAgICAvLyBEb24ndCBmYWlsIHRoZSBlbnRpcmUgb3BlcmF0aW9uLCBqdXN0IGxvZyB0aGUgZXJyb3JcbiAgICAgICAgICAvLyBWZXJzaW9uIHdpbGwgcmVtYWluIHVuY2hhbmdlZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFNhdmUgdGhlIGVsZW1lbnQgLSBuZWVkIHRvIGRldGVybWluZSBmaWxlbmFtZVxuICAgICAgY29uc3QgZmlsZW5hbWUgPSBgJHtlbGVtZW50Lm1ldGFkYXRhLm5hbWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXmEtejAtOS1dL2csICctJyl9Lm1kYDtcbiAgICAgIC8vIFRZUEUgU0FGRVRZOiBObyBuZWVkIGZvciAnYXMgYW55JyBjYXN0IGFueW1vcmUgd2l0aCBwcm9wZXIgdHlwaW5nXG4gICAgICBhd2FpdCBtYW5hZ2VyIS5zYXZlKGVsZW1lbnQsIGZpbGVuYW1lKTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBg4pyFIFVwZGF0ZWQgJHt0eXBlfSAnJHtuYW1lfScgLSAke2ZpZWxkfSBzZXQgdG86ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGVkaXQgZWxlbWVudDpgLCBlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGDinYwgRmFpbGVkIHRvIGVkaXQgZWxlbWVudDogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBcbiAgYXN5bmMgdmFsaWRhdGVFbGVtZW50KGFyZ3M6IHtuYW1lOiBzdHJpbmc7IHR5cGU6IHN0cmluZzsgc3RyaWN0PzogYm9vbGVhbn0pIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBuYW1lLCB0eXBlLCBzdHJpY3QgPSBmYWxzZSB9ID0gYXJncztcbiAgICAgIFxuICAgICAgLy8gVmFsaWRhdGUgZWxlbWVudCB0eXBlXG4gICAgICBpZiAoIU9iamVjdC52YWx1ZXMoRWxlbWVudFR5cGUpLmluY2x1ZGVzKHR5cGUgYXMgRWxlbWVudFR5cGUpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYOKdjCBJbnZhbGlkIGVsZW1lbnQgdHlwZSAnJHt0eXBlfScuIFZhbGlkIHR5cGVzOiAke09iamVjdC52YWx1ZXMoRWxlbWVudFR5cGUpLmpvaW4oJywgJyl9IChvciBsZWdhY3kgcGx1cmFsIGZvcm1zOiBwZXJzb25hcywgc2tpbGxzLCB0ZW1wbGF0ZXMsIGFnZW50cylgXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRm9yIHBlcnNvbmFzLCB1c2UgZXhpc3RpbmcgdmFsaWRhdGlvbiBsb2dpY1xuICAgICAgaWYgKHR5cGUgPT09IEVsZW1lbnRUeXBlLlBFUlNPTkEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVQZXJzb25hKG5hbWUpO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBHZXQgdGhlIGFwcHJvcHJpYXRlIG1hbmFnZXIgYmFzZWQgb24gdHlwZVxuICAgICAgbGV0IG1hbmFnZXI6IFNraWxsTWFuYWdlciB8IFRlbXBsYXRlTWFuYWdlciB8IEFnZW50TWFuYWdlciB8IG51bGwgPSBudWxsO1xuICAgICAgc3dpdGNoICh0eXBlIGFzIEVsZW1lbnRUeXBlKSB7XG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuU0tJTEw6XG4gICAgICAgICAgbWFuYWdlciA9IHRoaXMuc2tpbGxNYW5hZ2VyO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlRFTVBMQVRFOlxuICAgICAgICAgIG1hbmFnZXIgPSB0aGlzLnRlbXBsYXRlTWFuYWdlcjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5BR0VOVDpcbiAgICAgICAgICBtYW5hZ2VyID0gdGhpcy5hZ2VudE1hbmFnZXI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg4p2MIEVsZW1lbnQgdHlwZSAnJHt0eXBlfScgaXMgbm90IHlldCBzdXBwb3J0ZWQgZm9yIHZhbGlkYXRpb25gXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEZpbmQgdGhlIGVsZW1lbnRcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBhd2FpdCBtYW5hZ2VyIS5maW5kKChlOiBhbnkpID0+IGUubWV0YWRhdGEubmFtZSA9PT0gbmFtZSk7XG4gICAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBg4p2MICR7dHlwZX0gJyR7bmFtZX0nIG5vdCBmb3VuZGBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBQZXJmb3JtIHZhbGlkYXRpb25cbiAgICAgIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSBlbGVtZW50LnZhbGlkYXRlKCk7XG4gICAgICBcbiAgICAgIC8vIEZvcm1hdCB2YWxpZGF0aW9uIHJlcG9ydFxuICAgICAgbGV0IHJlcG9ydCA9IGDwn5SNIFZhbGlkYXRpb24gUmVwb3J0IGZvciAke3R5cGV9ICcke25hbWV9JzpcXG5gO1xuICAgICAgcmVwb3J0ICs9IGAke3ZhbGlkYXRpb25SZXN1bHQudmFsaWQgPyAn4pyFJyA6ICfinYwnfSBTdGF0dXM6ICR7dmFsaWRhdGlvblJlc3VsdC52YWxpZCA/ICdWYWxpZCcgOiAnSW52YWxpZCd9XFxuXFxuYDtcbiAgICAgIFxuICAgICAgaWYgKHZhbGlkYXRpb25SZXN1bHQuZXJyb3JzICYmIHZhbGlkYXRpb25SZXN1bHQuZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVwb3J0ICs9IGDinYwgRXJyb3JzICgke3ZhbGlkYXRpb25SZXN1bHQuZXJyb3JzLmxlbmd0aH0pOlxcbmA7XG4gICAgICAgIHZhbGlkYXRpb25SZXN1bHQuZXJyb3JzLmZvckVhY2goKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICByZXBvcnQgKz0gYCAgIOKAoiAke2Vycm9yLmZpZWxkIHx8ICdHZW5lcmFsJ306ICR7ZXJyb3IubWVzc2FnZX1cXG5gO1xuICAgICAgICAgIGlmIChlcnJvci5maXgpIHtcbiAgICAgICAgICAgIHJlcG9ydCArPSBgICAgICDwn5KhIEZpeDogJHtlcnJvci5maXh9XFxuYDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXBvcnQgKz0gJ1xcbic7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGlmICh2YWxpZGF0aW9uUmVzdWx0Lndhcm5pbmdzICYmIHZhbGlkYXRpb25SZXN1bHQud2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICByZXBvcnQgKz0gYOKaoO+4jyAgV2FybmluZ3MgKCR7dmFsaWRhdGlvblJlc3VsdC53YXJuaW5ncy5sZW5ndGh9KTpcXG5gO1xuICAgICAgICB2YWxpZGF0aW9uUmVzdWx0Lndhcm5pbmdzLmZvckVhY2goKHdhcm5pbmc6IGFueSkgPT4ge1xuICAgICAgICAgIHJlcG9ydCArPSBgICAg4oCiICR7d2FybmluZy5maWVsZCB8fCAnR2VuZXJhbCd9OiAke3dhcm5pbmcubWVzc2FnZX1cXG5gO1xuICAgICAgICAgIGlmICh3YXJuaW5nLnN1Z2dlc3Rpb24pIHtcbiAgICAgICAgICAgIHJlcG9ydCArPSBgICAgICDwn5KhIFN1Z2dlc3Rpb246ICR7d2FybmluZy5zdWdnZXN0aW9ufVxcbmA7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmVwb3J0ICs9ICdcXG4nO1xuICAgICAgfVxuICAgICAgXG4gICAgICBpZiAodmFsaWRhdGlvblJlc3VsdC5zdWdnZXN0aW9ucyAmJiB2YWxpZGF0aW9uUmVzdWx0LnN1Z2dlc3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVwb3J0ICs9IGDwn5KhIFN1Z2dlc3Rpb25zOlxcbmA7XG4gICAgICAgIHZhbGlkYXRpb25SZXN1bHQuc3VnZ2VzdGlvbnMuZm9yRWFjaCgoc3VnZ2VzdGlvbjogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgcmVwb3J0ICs9IGAgICDigKIgJHtzdWdnZXN0aW9ufVxcbmA7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBBZGQgc3RyaWN0IG1vZGUgYWRkaXRpb25hbCBjaGVja3MgaWYgcmVxdWVzdGVkXG4gICAgICBpZiAoc3RyaWN0KSB7XG4gICAgICAgIHJlcG9ydCArPSAnXFxu8J+TiyBTdHJpY3QgTW9kZTogQWRkaXRpb25hbCBxdWFsaXR5IGNoZWNrcyBhcHBsaWVkJztcbiAgICAgIH1cbiAgICAgIFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiByZXBvcnRcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIHZhbGlkYXRlIGVsZW1lbnQ6YCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBg4p2MIEZhaWxlZCB0byB2YWxpZGF0ZSBlbGVtZW50OiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG4gIFxuICBhc3luYyBkZWxldGVFbGVtZW50KGFyZ3M6IHtuYW1lOiBzdHJpbmc7IHR5cGU6IHN0cmluZzsgZGVsZXRlRGF0YT86IGJvb2xlYW59KSB7XG4gICAgLy8gRW5zdXJlIGluaXRpYWxpemF0aW9uIGZvciB0ZXN0IGNvbXBhdGliaWxpdHlcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgbmFtZSwgdHlwZSwgZGVsZXRlRGF0YSB9ID0gYXJncztcbiAgICAgIFxuICAgICAgLy8gVmFsaWRhdGUgZWxlbWVudCB0eXBlXG4gICAgICBpZiAoIU9iamVjdC52YWx1ZXMoRWxlbWVudFR5cGUpLmluY2x1ZGVzKHR5cGUgYXMgRWxlbWVudFR5cGUpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYOKdjCBJbnZhbGlkIGVsZW1lbnQgdHlwZTogJHt0eXBlfVxcblZhbGlkIHR5cGVzOiAke09iamVjdC52YWx1ZXMoRWxlbWVudFR5cGUpLmpvaW4oJywgJyl9IChvciBsZWdhY3kgcGx1cmFsIGZvcm1zOiBwZXJzb25hcywgc2tpbGxzLCB0ZW1wbGF0ZXMsIGFnZW50cylgXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gR2V0IHRoZSBhcHByb3ByaWF0ZSBtYW5hZ2VyIGJhc2VkIG9uIHR5cGVcbiAgICAgIGxldCBtYW5hZ2VyOiBTa2lsbE1hbmFnZXIgfCBUZW1wbGF0ZU1hbmFnZXIgfCBBZ2VudE1hbmFnZXIgfCBudWxsID0gbnVsbDtcbiAgICAgIHN3aXRjaCAodHlwZSBhcyBFbGVtZW50VHlwZSkge1xuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlNLSUxMOlxuICAgICAgICAgIG1hbmFnZXIgPSB0aGlzLnNraWxsTWFuYWdlcjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5URU1QTEFURTpcbiAgICAgICAgICBtYW5hZ2VyID0gdGhpcy50ZW1wbGF0ZU1hbmFnZXI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuQUdFTlQ6XG4gICAgICAgICAgbWFuYWdlciA9IHRoaXMuYWdlbnRNYW5hZ2VyO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlBFUlNPTkE6XG4gICAgICAgICAgLy8gRm9yIHBlcnNvbmFzLCB1c2UgYSBkaWZmZXJlbnQgYXBwcm9hY2hcbiAgICAgICAgICAvLyBwZXJzb25hc0RpciBpcyBndWFyYW50ZWVkIHRvIGJlIHNldCBhZnRlciBlbnN1cmVJbml0aWFsaXplZCgpXG4gICAgICAgICAgY29uc3QgcGVyc29uYVBhdGggPSBwYXRoLmpvaW4odGhpcy5wZXJzb25hc0RpciEsIGAke25hbWV9Lm1kYCk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IGZzLmFjY2VzcyhwZXJzb25hUGF0aCk7XG4gICAgICAgICAgICBhd2FpdCBmcy51bmxpbmsocGVyc29uYVBhdGgpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBSZWxvYWQgcGVyc29uYXMgdG8gdXBkYXRlIHRoZSBjYWNoZVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkUGVyc29uYXMoKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICB0ZXh0OiBg4pyFIFN1Y2Nlc3NmdWxseSBkZWxldGVkIHBlcnNvbmEgJyR7bmFtZX0nYFxuICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKChlcnJvciBhcyBhbnkpLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgICAgdGV4dDogYOKdjCAke3R5cGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0eXBlLnNsaWNlKDEpfSAnJHtuYW1lfScgbm90IGZvdW5kYFxuICAgICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg4p2MIEVsZW1lbnQgdHlwZSAnJHt0eXBlfScgaXMgbm90IHlldCBzdXBwb3J0ZWQgZm9yIGRlbGV0aW9uYFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBFbnN1cmUgbWFuYWdlciB3YXMgYXNzaWduZWQgKFR5cGVTY3JpcHQgdHlwZSBzYWZldHkpXG4gICAgICBpZiAoIW1hbmFnZXIpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBg4p2MIEVsZW1lbnQgdHlwZSAnJHt0eXBlfScgaXMgbm90IHN1cHBvcnRlZCBmb3IgZGVsZXRpb25gXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRmluZCB0aGUgZWxlbWVudCBmaXJzdCB0byBjaGVjayBpZiBpdCBleGlzdHNcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBhd2FpdCBtYW5hZ2VyIS5maW5kKChlOiBhbnkpID0+IGUubWV0YWRhdGEubmFtZSA9PT0gbmFtZSk7XG4gICAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBg4p2MICR7dHlwZX0gJyR7bmFtZX0nIG5vdCBmb3VuZGBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBDaGVjayBmb3IgYXNzb2NpYXRlZCBkYXRhIGZpbGVzXG4gICAgICBsZXQgZGF0YUZpbGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgXG4gICAgICAvLyBBZ2VudC1zcGVjaWZpYzogQ2hlY2sgZm9yIHN0YXRlIGZpbGVzXG4gICAgICBpZiAodHlwZSA9PT0gRWxlbWVudFR5cGUuQUdFTlQpIHtcbiAgICAgICAgY29uc3Qgc3RhdGVEaXIgPSBwYXRoLmpvaW4odGhpcy5wb3J0Zm9saW9NYW5hZ2VyLmdldEVsZW1lbnREaXIoRWxlbWVudFR5cGUuQUdFTlQpLCAnLnN0YXRlJyk7XG4gICAgICAgIGNvbnN0IHN0YXRlRmlsZSA9IHBhdGguam9pbihzdGF0ZURpciwgYCR7bmFtZX0tc3RhdGUuanNvbmApO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHN0YXQgPSBhd2FpdCBmcy5zdGF0KHN0YXRlRmlsZSk7XG4gICAgICAgICAgZGF0YUZpbGVzLnB1c2goYC0gLnN0YXRlLyR7bmFtZX0tc3RhdGUuanNvbiAoJHsoc3RhdC5zaXplIC8gMTAyNCkudG9GaXhlZCgyKX0gS0IpYCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgLy8gTm8gc3RhdGUgZmlsZSBleGlzdHMsIHdoaWNoIGlzIGZpbmVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBNZW1vcnktc3BlY2lmaWM6IENoZWNrIGZvciBzdG9yYWdlIGZpbGVzXG4gICAgICBpZiAodHlwZSA9PT0gRWxlbWVudFR5cGUuTUVNT1JZKSB7XG4gICAgICAgIGNvbnN0IHN0b3JhZ2VEaXIgPSBwYXRoLmpvaW4odGhpcy5wb3J0Zm9saW9NYW5hZ2VyLmdldEVsZW1lbnREaXIoRWxlbWVudFR5cGUuTUVNT1JZKSwgJy5zdG9yYWdlJyk7XG4gICAgICAgIGNvbnN0IHN0b3JhZ2VGaWxlID0gcGF0aC5qb2luKHN0b3JhZ2VEaXIsIGAke25hbWV9LW1lbW9yeS5qc29uYCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qgc3RhdCA9IGF3YWl0IGZzLnN0YXQoc3RvcmFnZUZpbGUpO1xuICAgICAgICAgIGRhdGFGaWxlcy5wdXNoKGAtIC5zdG9yYWdlLyR7bmFtZX0tbWVtb3J5Lmpzb24gKCR7KHN0YXQuc2l6ZSAvIDEwMjQpLnRvRml4ZWQoMil9IEtCKWApO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIC8vIE5vIHN0b3JhZ2UgZmlsZSBleGlzdHMsIHdoaWNoIGlzIGZpbmVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBFbnNlbWJsZS1zcGVjaWZpYzogQ2hlY2sgZm9yIGNvbmZpZyBmaWxlc1xuICAgICAgaWYgKHR5cGUgPT09IEVsZW1lbnRUeXBlLkVOU0VNQkxFKSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZ0RpciA9IHBhdGguam9pbih0aGlzLnBvcnRmb2xpb01hbmFnZXIuZ2V0RWxlbWVudERpcihFbGVtZW50VHlwZS5FTlNFTUJMRSksICcuY29uZmlncycpO1xuICAgICAgICBjb25zdCBjb25maWdGaWxlID0gcGF0aC5qb2luKGNvbmZpZ0RpciwgYCR7bmFtZX0tY29uZmlnLmpzb25gKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBzdGF0ID0gYXdhaXQgZnMuc3RhdChjb25maWdGaWxlKTtcbiAgICAgICAgICBkYXRhRmlsZXMucHVzaChgLSAuY29uZmlncy8ke25hbWV9LWNvbmZpZy5qc29uICgkeyhzdGF0LnNpemUgLyAxMDI0KS50b0ZpeGVkKDIpfSBLQilgKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAvLyBObyBjb25maWcgZmlsZSBleGlzdHMsIHdoaWNoIGlzIGZpbmVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBJZiBkYXRhIGZpbGVzIGV4aXN0IGFuZCBkZWxldGVEYXRhIGlzIG5vdCBzcGVjaWZpZWQsIHdlIG5lZWQgdG8gaW5mb3JtIHRoZSB1c2VyXG4gICAgICBpZiAoZGF0YUZpbGVzLmxlbmd0aCA+IDAgJiYgZGVsZXRlRGF0YSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYOKaoO+4jyAgVGhpcyAke3R5cGV9IGhhcyBhc3NvY2lhdGVkIGRhdGEgZmlsZXM6XFxuJHtkYXRhRmlsZXMuam9pbignXFxuJyl9XFxuXFxuV291bGQgeW91IGxpa2UgdG8gZGVsZXRlIHRoZXNlIGRhdGEgZmlsZXMgYXMgd2VsbD9cXG5cXG7igKIgVG8gZGVsZXRlIGV2ZXJ5dGhpbmcgKGVsZW1lbnQgKyBkYXRhKSwgc2F5OiBcIlllcywgZGVsZXRlIGFsbCBkYXRhXCJcXG7igKIgVG8ga2VlcCB0aGUgZGF0YSBmaWxlcywgc2F5OiBcIk5vLCBrZWVwIHRoZSBkYXRhXCJcXG7igKIgVG8gY2FuY2VsLCBzYXk6IFwiQ2FuY2VsXCJgXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRGVsZXRlIHRoZSBtYWluIGVsZW1lbnQgZmlsZVxuICAgICAgY29uc3QgZmlsZW5hbWUgPSBgJHtzbHVnaWZ5KG5hbWUpfS5tZGA7XG4gICAgICBjb25zdCBmaWxlcGF0aCA9IHBhdGguam9pbih0aGlzLnBvcnRmb2xpb01hbmFnZXIuZ2V0RWxlbWVudERpcih0eXBlIGFzIEVsZW1lbnRUeXBlKSwgZmlsZW5hbWUpO1xuICAgICAgXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBmcy51bmxpbmsoZmlsZXBhdGgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKChlcnJvciBhcyBhbnkpLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg4p2MICR7dHlwZX0gZmlsZSAnJHtmaWxlbmFtZX0nIG5vdCBmb3VuZGBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRGVsZXRlIGFzc29jaWF0ZWQgZGF0YSBmaWxlcyBpZiByZXF1ZXN0ZWRcbiAgICAgIGlmIChkZWxldGVEYXRhICYmIGRhdGFGaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWREYXRhRmlsZXM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZSA9PT0gRWxlbWVudFR5cGUuQUdFTlQpIHtcbiAgICAgICAgICBjb25zdCBzdGF0ZUZpbGUgPSBwYXRoLmpvaW4odGhpcy5wb3J0Zm9saW9NYW5hZ2VyLmdldEVsZW1lbnREaXIoRWxlbWVudFR5cGUuQUdFTlQpLCAnLnN0YXRlJywgYCR7bmFtZX0tc3RhdGUuanNvbmApO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBmcy51bmxpbmsoc3RhdGVGaWxlKTtcbiAgICAgICAgICAgIHVwZGF0ZWREYXRhRmlsZXMucHVzaChgJHtkYXRhRmlsZXNbMF19IOKckyBkZWxldGVkYCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIC8vIExvZyBidXQgZG9uJ3QgZmFpbCBpZiBzdGF0ZSBmaWxlIGRlbGV0aW9uIGZhaWxzXG4gICAgICAgICAgICBsb2dnZXIud2FybihgRmFpbGVkIHRvIGRlbGV0ZSBhZ2VudCBzdGF0ZSBmaWxlOiAke2Vycm9yfWApO1xuICAgICAgICAgICAgdXBkYXRlZERhdGFGaWxlcy5wdXNoKGAke2RhdGFGaWxlc1swXX0g4pqg77iPIGRlbGV0aW9uIGZhaWxlZGApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBFbGVtZW50VHlwZS5NRU1PUlkpIHtcbiAgICAgICAgICBjb25zdCBzdG9yYWdlRmlsZSA9IHBhdGguam9pbih0aGlzLnBvcnRmb2xpb01hbmFnZXIuZ2V0RWxlbWVudERpcihFbGVtZW50VHlwZS5NRU1PUlkpLCAnLnN0b3JhZ2UnLCBgJHtuYW1lfS1tZW1vcnkuanNvbmApO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBmcy51bmxpbmsoc3RvcmFnZUZpbGUpO1xuICAgICAgICAgICAgdXBkYXRlZERhdGFGaWxlcy5wdXNoKGAke2RhdGFGaWxlc1swXX0g4pyTIGRlbGV0ZWRgKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgLy8gTG9nIGJ1dCBkb24ndCBmYWlsIGlmIHN0b3JhZ2UgZmlsZSBkZWxldGlvbiBmYWlsc1xuICAgICAgICAgICAgbG9nZ2VyLndhcm4oYEZhaWxlZCB0byBkZWxldGUgbWVtb3J5IHN0b3JhZ2UgZmlsZTogJHtlcnJvcn1gKTtcbiAgICAgICAgICAgIHVwZGF0ZWREYXRhRmlsZXMucHVzaChgJHtkYXRhRmlsZXNbMF19IOKaoO+4jyBkZWxldGlvbiBmYWlsZWRgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gRWxlbWVudFR5cGUuRU5TRU1CTEUpIHtcbiAgICAgICAgICBjb25zdCBjb25maWdGaWxlID0gcGF0aC5qb2luKHRoaXMucG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKEVsZW1lbnRUeXBlLkVOU0VNQkxFKSwgJy5jb25maWdzJywgYCR7bmFtZX0tY29uZmlnLmpzb25gKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgZnMudW5saW5rKGNvbmZpZ0ZpbGUpO1xuICAgICAgICAgICAgdXBkYXRlZERhdGFGaWxlcy5wdXNoKGAke2RhdGFGaWxlc1swXX0g4pyTIGRlbGV0ZWRgKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgLy8gTG9nIGJ1dCBkb24ndCBmYWlsIGlmIGNvbmZpZyBmaWxlIGRlbGV0aW9uIGZhaWxzXG4gICAgICAgICAgICBsb2dnZXIud2FybihgRmFpbGVkIHRvIGRlbGV0ZSBlbnNlbWJsZSBjb25maWcgZmlsZTogJHtlcnJvcn1gKTtcbiAgICAgICAgICAgIHVwZGF0ZWREYXRhRmlsZXMucHVzaChgJHtkYXRhRmlsZXNbMF19IOKaoO+4jyBkZWxldGlvbiBmYWlsZWRgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGRhdGFGaWxlcyA9IHVwZGF0ZWREYXRhRmlsZXM7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEJ1aWxkIHN1Y2Nlc3MgbWVzc2FnZVxuICAgICAgbGV0IG1lc3NhZ2UgPSBg4pyFIFN1Y2Nlc3NmdWxseSBkZWxldGVkICR7dHlwZX0gJyR7bmFtZX0nYDtcbiAgICAgIGlmIChkYXRhRmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAoZGVsZXRlRGF0YSkge1xuICAgICAgICAgIG1lc3NhZ2UgKz0gYFxcblxcbkFzc29jaWF0ZWQgZGF0YSBmaWxlczpcXG4ke2RhdGFGaWxlcy5qb2luKCdcXG4nKX1gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1lc3NhZ2UgKz0gYFxcblxcbuKaoO+4jyBBc3NvY2lhdGVkIGRhdGEgZmlsZXMgd2VyZSBwcmVzZXJ2ZWQ6XFxuJHtkYXRhRmlsZXMuam9pbignXFxuJyl9YDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IG1lc3NhZ2VcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgICBcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gZGVsZXRlIGVsZW1lbnQ6YCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBg4p2MIEZhaWxlZCB0byBkZWxldGUgZWxlbWVudDogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8vIGNoZWNrUmF0ZUxpbWl0IGFuZCBmZXRjaEZyb21HaXRIdWIgYXJlIG5vdyBoYW5kbGVkIGJ5IEdpdEh1YkNsaWVudFxuXG4gIGFzeW5jIGJyb3dzZUNvbGxlY3Rpb24oc2VjdGlvbj86IHN0cmluZywgdHlwZT86IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICAvLyBGSVggIzQ3MTogUmVwbGFjZSBsZWdhY3kgY2F0ZWdvcnkgdmFsaWRhdGlvbiB3aXRoIHByb3BlciBzZWN0aW9uL3R5cGUgdmFsaWRhdGlvblxuICAgICAgLy8gVmFsaWQgc2VjdGlvbnM6IGxpYnJhcnksIHNob3djYXNlLCBjYXRhbG9nXG4gICAgICAvLyBWYWxpZCB0eXBlcyBmb3IgTUNQOiBwZXJzb25hcywgc2tpbGxzLCBhZ2VudHMsIHRlbXBsYXRlcyAob3RoZXJzIGZpbHRlcmVkIHBlciBJc3N1ZSAjMTQ0KVxuICAgICAgLy8gTm90ZTogdG9vbHMsIHByb21wdHMsIGVuc2VtYmxlcywgbWVtb3JpZXMgZXhpc3QgaW4gY29sbGVjdGlvbiBidXQgYXJlIGZpbHRlcmVkIGZyb20gTUNQXG4gICAgICBjb25zdCB2YWxpZFNlY3Rpb25zID0gWydsaWJyYXJ5JywgJ3Nob3djYXNlJywgJ2NhdGFsb2cnXTtcbiAgICAgIFxuICAgICAgLy8g4pqg77iPIENSSVRJQ0FMOiBXaGVuIGFkZGluZyBuZXcgZWxlbWVudCB0eXBlcywgeW91IE1VU1QgdXBkYXRlIHRoaXMgYXJyYXkhXG4gICAgICAvLyBTZWUgZG9jcy9kZXZlbG9wbWVudC9BRERJTkdfTkVXX0VMRU1FTlRfVFlQRVNfQ0hFQ0tMSVNULm1kIGZvciBjb21wbGV0ZSBjaGVja2xpc3RcbiAgICAgIC8vIFRoaXMgYXJyYXkgaXMgb2Z0ZW4gZm9yZ290dGVuIGFuZCBjYXVzZXMgdmFsaWRhdGlvbiBmYWlsdXJlcyBmb3IgbmV3IHR5cGVzXG4gICAgICBjb25zdCB2YWxpZFR5cGVzID0gWydwZXJzb25hcycsICdza2lsbHMnLCAnYWdlbnRzJywgJ3RlbXBsYXRlcyddOyAgLy8gT25seSBNQ1Atc3VwcG9ydGVkIHR5cGVzXG4gICAgICBcbiAgICAgIC8vIFZhbGlkYXRlIHNlY3Rpb24gaWYgcHJvdmlkZWRcbiAgICAgIGNvbnN0IHZhbGlkYXRlZFNlY3Rpb24gPSBzZWN0aW9uID8gc2FuaXRpemVJbnB1dChzZWN0aW9uLnRvTG93ZXJDYXNlKCkpIDogdW5kZWZpbmVkO1xuICAgICAgaWYgKHZhbGlkYXRlZFNlY3Rpb24gJiYgIXZhbGlkU2VjdGlvbnMuaW5jbHVkZXModmFsaWRhdGVkU2VjdGlvbikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHNlY3Rpb24gJyR7dmFsaWRhdGVkU2VjdGlvbn0nLiBNdXN0IGJlIG9uZSBvZjogJHt2YWxpZFNlY3Rpb25zLmpvaW4oJywgJyl9YCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFZhbGlkYXRlIHR5cGUgaWYgcHJvdmlkZWQgKG9ubHkgdmFsaWQgd2hlbiBzZWN0aW9uIGlzICdsaWJyYXJ5JylcbiAgICAgIGNvbnN0IHZhbGlkYXRlZFR5cGUgPSB0eXBlID8gc2FuaXRpemVJbnB1dCh0eXBlLnRvTG93ZXJDYXNlKCkpIDogdW5kZWZpbmVkO1xuICAgICAgaWYgKHZhbGlkYXRlZFR5cGUgJiYgdmFsaWRhdGVkU2VjdGlvbiA9PT0gJ2xpYnJhcnknICYmICF2YWxpZFR5cGVzLmluY2x1ZGVzKHZhbGlkYXRlZFR5cGUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0eXBlICcke3ZhbGlkYXRlZFR5cGV9Jy4gTXVzdCBiZSBvbmUgb2Y6ICR7dmFsaWRUeXBlcy5qb2luKCcsICcpfWApO1xuICAgICAgfVxuICAgICAgaWYgKHZhbGlkYXRlZFR5cGUgJiYgdmFsaWRhdGVkU2VjdGlvbiAhPT0gJ2xpYnJhcnknKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVHlwZSBwYXJhbWV0ZXIgaXMgb25seSB2YWxpZCB3aGVuIHNlY3Rpb24gaXMgXCJsaWJyYXJ5XCInKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jb2xsZWN0aW9uQnJvd3Nlci5icm93c2VDb2xsZWN0aW9uKHZhbGlkYXRlZFNlY3Rpb24sIHZhbGlkYXRlZFR5cGUpO1xuICAgICAgXG4gICAgICAvLyBIYW5kbGUgc2VjdGlvbnMgdmlld1xuICAgICAgY29uc3QgaXRlbXMgPSByZXN1bHQuaXRlbXM7XG4gICAgICBjb25zdCBjYXRlZ29yaWVzID0gcmVzdWx0LnNlY3Rpb25zIHx8IHJlc3VsdC5jYXRlZ29yaWVzO1xuICAgICAgXG4gICAgICBjb25zdCB0ZXh0ID0gdGhpcy5jb2xsZWN0aW9uQnJvd3Nlci5mb3JtYXRCcm93c2VSZXN1bHRzKFxuICAgICAgICBpdGVtcywgXG4gICAgICAgIGNhdGVnb3JpZXMsIFxuICAgICAgICB2YWxpZGF0ZWRTZWN0aW9uLCBcbiAgICAgICAgdmFsaWRhdGVkVHlwZSwgXG4gICAgICAgIHRoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpXG4gICAgICApO1xuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiB0ZXh0LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBzYW5pdGl6ZWQgPSBTZWN1cmVFcnJvckhhbmRsZXIuc2FuaXRpemVFcnJvcihlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgQ29sbGVjdGlvbiBicm93c2luZyBmYWlsZWQ6ICR7c2FuaXRpemVkLm1lc3NhZ2V9YCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzZWFyY2hDb2xsZWN0aW9uKHF1ZXJ5OiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgLy8gRW5oYW5jZWQgaW5wdXQgdmFsaWRhdGlvbiBmb3Igc2VhcmNoIHF1ZXJ5XG4gICAgICBjb25zdCB2YWxpZGF0ZWRRdWVyeSA9IE1DUElucHV0VmFsaWRhdG9yLnZhbGlkYXRlU2VhcmNoUXVlcnkocXVlcnkpO1xuICAgICAgXG4gICAgICBjb25zdCBpdGVtcyA9IGF3YWl0IHRoaXMuY29sbGVjdGlvblNlYXJjaC5zZWFyY2hDb2xsZWN0aW9uKHZhbGlkYXRlZFF1ZXJ5KTtcbiAgICAgIGNvbnN0IHRleHQgPSB0aGlzLmNvbGxlY3Rpb25TZWFyY2guZm9ybWF0U2VhcmNoUmVzdWx0cyhpdGVtcywgdmFsaWRhdGVkUXVlcnksIHRoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpKTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogdGV4dCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3Qgc2FuaXRpemVkID0gU2VjdXJlRXJyb3JIYW5kbGVyLnNhbml0aXplRXJyb3IoZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIEVycm9yIHNlYXJjaGluZyBjb2xsZWN0aW9uOiAke3Nhbml0aXplZC5tZXNzYWdlfWAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2VhcmNoQ29sbGVjdGlvbkVuaGFuY2VkKHF1ZXJ5OiBzdHJpbmcsIG9wdGlvbnM6IGFueSA9IHt9KSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEVuaGFuY2VkIGlucHV0IHZhbGlkYXRpb24gZm9yIHNlYXJjaCBxdWVyeVxuICAgICAgY29uc3QgdmFsaWRhdGVkUXVlcnkgPSBNQ1BJbnB1dFZhbGlkYXRvci52YWxpZGF0ZVNlYXJjaFF1ZXJ5KHF1ZXJ5KTtcbiAgICAgIFxuICAgICAgLy8gVmFsaWRhdGUgYW5kIHNhbml0aXplIG9wdGlvbnNcbiAgICAgIGNvbnN0IHZhbGlkYXRlZE9wdGlvbnMgPSB7XG4gICAgICAgIGVsZW1lbnRUeXBlOiBvcHRpb25zLmVsZW1lbnRUeXBlID8gU3RyaW5nKG9wdGlvbnMuZWxlbWVudFR5cGUpIDogdW5kZWZpbmVkLFxuICAgICAgICBjYXRlZ29yeTogb3B0aW9ucy5jYXRlZ29yeSA/IFN0cmluZyhvcHRpb25zLmNhdGVnb3J5KSA6IHVuZGVmaW5lZCxcbiAgICAgICAgcGFnZTogb3B0aW9ucy5wYWdlID8gTWF0aC5tYXgoMSwgcGFyc2VJbnQob3B0aW9ucy5wYWdlKSB8fCAxKSA6IDEsXG4gICAgICAgIHBhZ2VTaXplOiBvcHRpb25zLnBhZ2VTaXplID8gTWF0aC5taW4oMTAwLCBNYXRoLm1heCgxLCBwYXJzZUludChvcHRpb25zLnBhZ2VTaXplKSB8fCAyNSkpIDogMjUsXG4gICAgICAgIHNvcnRCeTogb3B0aW9ucy5zb3J0QnkgJiYgWydyZWxldmFuY2UnLCAnbmFtZScsICdkYXRlJ10uaW5jbHVkZXMob3B0aW9ucy5zb3J0QnkpID8gb3B0aW9ucy5zb3J0QnkgOiAncmVsZXZhbmNlJ1xuICAgICAgfTtcbiAgICAgIFxuICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHRoaXMuY29sbGVjdGlvblNlYXJjaC5zZWFyY2hDb2xsZWN0aW9uV2l0aE9wdGlvbnModmFsaWRhdGVkUXVlcnksIHZhbGlkYXRlZE9wdGlvbnMpO1xuICAgICAgY29uc3QgdGV4dCA9IHRoaXMuY29sbGVjdGlvblNlYXJjaC5mb3JtYXRTZWFyY2hSZXN1bHRzV2l0aFBhZ2luYXRpb24ocmVzdWx0cywgdGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCkpO1xuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiB0ZXh0LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBzYW5pdGl6ZWQgPSBTZWN1cmVFcnJvckhhbmRsZXIuc2FuaXRpemVFcnJvcihlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgRXJyb3Igc2VhcmNoaW5nIGNvbGxlY3Rpb246ICR7c2FuaXRpemVkLm1lc3NhZ2V9YCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRDb2xsZWN0aW9uQ29udGVudChwYXRoOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBtZXRhZGF0YSwgY29udGVudCB9ID0gYXdhaXQgdGhpcy5wZXJzb25hRGV0YWlscy5nZXRDb2xsZWN0aW9uQ29udGVudChwYXRoKTtcbiAgICAgIGNvbnN0IHRleHQgPSB0aGlzLnBlcnNvbmFEZXRhaWxzLmZvcm1hdFBlcnNvbmFEZXRhaWxzKG1ldGFkYXRhLCBjb250ZW50LCBwYXRoLCB0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKSk7XG4gICAgICBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IHRleHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IHNhbml0aXplZCA9IFNlY3VyZUVycm9ySGFuZGxlci5zYW5pdGl6ZUVycm9yKGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBFcnJvciBmZXRjaGluZyBjb250ZW50OiAke3Nhbml0aXplZC5tZXNzYWdlfWAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaW5zdGFsbENvbnRlbnQoaW5wdXRQYXRoOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5lbGVtZW50SW5zdGFsbGVyLmluc3RhbGxDb250ZW50KGlucHV0UGF0aCk7XG4gICAgICBcbiAgICAgIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg4pqg77iPICR7cmVzdWx0Lm1lc3NhZ2V9YCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gSWYgaXQncyBhIHBlcnNvbmEsIHJlbG9hZCBwZXJzb25hc1xuICAgICAgaWYgKHJlc3VsdC5lbGVtZW50VHlwZSA9PT0gRWxlbWVudFR5cGUuUEVSU09OQSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRQZXJzb25hcygpO1xuICAgICAgfVxuICAgICAgXG4gICAgICBjb25zdCB0ZXh0ID0gdGhpcy5lbGVtZW50SW5zdGFsbGVyLmZvcm1hdEluc3RhbGxTdWNjZXNzKFxuICAgICAgICByZXN1bHQubWV0YWRhdGEhLCBcbiAgICAgICAgcmVzdWx0LmZpbGVuYW1lISxcbiAgICAgICAgcmVzdWx0LmVsZW1lbnRUeXBlIVxuICAgICAgKTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogdGV4dCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3Qgc2FuaXRpemVkID0gU2VjdXJlRXJyb3JIYW5kbGVyLnNhbml0aXplRXJyb3IoZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIEVycm9yIGluc3RhbGxpbmcgQUkgY3VzdG9taXphdGlvbiBlbGVtZW50OiAke3Nhbml0aXplZC5tZXNzYWdlfWAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3VibWl0Q29udGVudChjb250ZW50SWRlbnRpZmllcjogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFVzZSB0aGUgbmV3IHBvcnRmb2xpby1iYXNlZCBzdWJtaXNzaW9uIHRvb2xcbiAgICAgIGNvbnN0IHsgU3VibWl0VG9Qb3J0Zm9saW9Ub29sIH0gPSBhd2FpdCBpbXBvcnQoJy4vdG9vbHMvcG9ydGZvbGlvL3N1Ym1pdFRvUG9ydGZvbGlvVG9vbC5qcycpO1xuICAgICAgY29uc3QgeyBGaWxlRGlzY292ZXJ5VXRpbCB9ID0gYXdhaXQgaW1wb3J0KCcuL3V0aWxzL0ZpbGVEaXNjb3ZlcnlVdGlsLmpzJyk7XG4gICAgICBjb25zdCBzdWJtaXRUb29sID0gbmV3IFN1Ym1pdFRvUG9ydGZvbGlvVG9vbCh0aGlzLmFwaUNhY2hlKTtcbiAgICBcbiAgICAvLyBUcnkgdG8gZmluZCB0aGUgY29udGVudCBhY3Jvc3MgYWxsIGVsZW1lbnQgdHlwZXNcbiAgICBjb25zdCBwb3J0Zm9saW9NYW5hZ2VyID0gUG9ydGZvbGlvTWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuICAgIGxldCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGUgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGZvdW5kUGF0aDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgXG4gICAgLy8gUEVSRk9STUFOQ0UgT1BUSU1JWkFUSU9OOiBTZWFyY2ggYWxsIGVsZW1lbnQgZGlyZWN0b3JpZXMgaW4gcGFyYWxsZWxcbiAgICAvLyBOT1RFOiBUaGlzIGR5bmFtaWNhbGx5IGhhbmRsZXMgQUxMIGVsZW1lbnQgdHlwZXMgZnJvbSB0aGUgRWxlbWVudFR5cGUgZW51bVxuICAgIC8vIE5vIGhhcmRjb2RlZCBjb3VudCAtIGlmIHlvdSBhZGQgMTAgbW9yZSBlbGVtZW50IHR5cGVzIHRvbW9ycm93LCB0aGlzIGNvZGVcbiAgICAvLyB3aWxsIGF1dG9tYXRpY2FsbHkgc2VhcmNoIGFsbCAxNiB0eXBlcyB3aXRob3V0IGFueSBjaGFuZ2VzIG5lZWRlZCBoZXJlXG4gICAgY29uc3Qgc2VhcmNoUHJvbWlzZXMgPSBPYmplY3QudmFsdWVzKEVsZW1lbnRUeXBlKS5tYXAoYXN5bmMgKHR5cGUpID0+IHtcbiAgICAgIGNvbnN0IGRpciA9IHBvcnRmb2xpb01hbmFnZXIuZ2V0RWxlbWVudERpcih0eXBlKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBGaWxlRGlzY292ZXJ5VXRpbC5maW5kRmlsZShkaXIsIGNvbnRlbnRJZGVudGlmaWVyLCB7XG4gICAgICAgICAgZXh0ZW5zaW9uczogWycubWQnLCAnLmpzb24nLCAnLnlhbWwnLCAnLnltbCddLFxuICAgICAgICAgIHBhcnRpYWxNYXRjaDogdHJ1ZSxcbiAgICAgICAgICBjYWNoZVJlc3VsdHM6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gZmlsZSA/IHsgdHlwZTogdHlwZSBhcyBFbGVtZW50VHlwZSwgZmlsZSB9IDogbnVsbDtcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgLy8gSU1QUk9WRUQgRVJST1IgSEFORExJTkc6IExvZyB3YXJuaW5ncyBmb3IgdW5leHBlY3RlZCBlcnJvcnNcbiAgICAgICAgaWYgKGVycm9yPy5jb2RlICE9PSAnRU5PRU5UJyAmJiBlcnJvcj8uY29kZSAhPT0gJ0VOT1RESVInKSB7XG4gICAgICAgICAgLy8gTm90IGp1c3QgYSBtaXNzaW5nIGRpcmVjdG9yeSAtIHRoaXMgY291bGQgYmUgYSBwZXJtaXNzaW9uIGlzc3VlIG9yIG90aGVyIHByb2JsZW1cbiAgICAgICAgICBsb2dnZXIud2FybihgVW5leHBlY3RlZCBlcnJvciBzZWFyY2hpbmcgJHt0eXBlfSBkaXJlY3RvcnlgLCB7IFxuICAgICAgICAgICAgY29udGVudElkZW50aWZpZXIsXG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yPy5tZXNzYWdlIHx8IFN0cmluZyhlcnJvciksXG4gICAgICAgICAgICBjb2RlOiBlcnJvcj8uY29kZSBcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBEaXJlY3RvcnkgZG9lc24ndCBleGlzdCAtIHRoaXMgaXMgZXhwZWN0ZWQgZm9yIHVudXNlZCBlbGVtZW50IHR5cGVzXG4gICAgICAgICAgbG9nZ2VyLmRlYnVnKGAke3R5cGV9IGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCwgc2tpcHBpbmdgLCB7IHR5cGUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgLy8gV2FpdCBmb3IgYWxsIHNlYXJjaGVzIHRvIGNvbXBsZXRlIGFuZCBmaW5kIHRoZSBmaXJzdCBtYXRjaFxuICAgIGNvbnN0IHNlYXJjaFJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoc2VhcmNoUHJvbWlzZXMpO1xuICAgIFxuICAgIC8vIE5PVEU6IEZpbGUgdmFsaWRhdGlvbiAtIHdlIHJlbHkgb24gdGhlIHBvcnRmb2xpbyBkaXJlY3Rvcnkgc3RydWN0dXJlIHRvIGVuc3VyZVxuICAgIC8vIGZpbGVzIGFyZSBpbiB0aGUgY29ycmVjdCBlbGVtZW50IHR5cGUgZGlyZWN0b3J5LiBBZGRpdGlvbmFsIHNjaGVtYSB2YWxpZGF0aW9uXG4gICAgLy8gY291bGQgYmUgYWRkZWQgaGVyZSBpZiBuZWVkZWQsIGJ1dCB0aGUgY3VycmVudCBhcHByb2FjaCBpcyBzdWZmaWNpZW50IGFzOlxuICAgIC8vIDEuIEZpbGVEaXNjb3ZlcnlVdGlsIGFscmVhZHkgdmFsaWRhdGVzIGZpbGUgZXh0ZW5zaW9uc1xuICAgIC8vIDIuIFBvcnRmb2xpbyBzdHJ1Y3R1cmUgZW5mb3JjZXMgcHJvcGVyIG9yZ2FuaXphdGlvblxuICAgIC8vIDMuIHN1Ym1pdFRvUG9ydGZvbGlvVG9vbCBwZXJmb3JtcyBhZGRpdGlvbmFsIHZhbGlkYXRpb24gZG93bnN0cmVhbVxuICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHNlYXJjaFJlc3VsdHMpIHtcbiAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSAnZnVsZmlsbGVkJyAmJiByZXN1bHQudmFsdWUpIHtcbiAgICAgICAgZm91bmRQYXRoID0gcmVzdWx0LnZhbHVlLmZpbGU7XG4gICAgICAgIGVsZW1lbnRUeXBlID0gcmVzdWx0LnZhbHVlLnR5cGU7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgRm91bmQgY29udGVudCBpbiAke2VsZW1lbnRUeXBlfSBkaXJlY3RvcnlgLCB7IFxuICAgICAgICAgIGNvbnRlbnRJZGVudGlmaWVyLCBcbiAgICAgICAgICB0eXBlOiBlbGVtZW50VHlwZSwgXG4gICAgICAgICAgZmlsZTogZm91bmRQYXRoIFxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIENSSVRJQ0FMIEZJWDogTmV2ZXIgZGVmYXVsdCB0byBhbnkgZWxlbWVudCB0eXBlIHdoZW4gY29udGVudCBpcyBub3QgZm91bmRcbiAgICAvLyBUaGlzIHByZXZlbnRzIGluY29ycmVjdCBzdWJtaXNzaW9ucyBhbmQgZm9yY2VzIHByb3BlciB0eXBlIGRldGVjdGlvbiBvciB1c2VyIHNwZWNpZmljYXRpb25cbiAgICBpZiAoIWVsZW1lbnRUeXBlKSB7XG4gICAgICAvLyBDb250ZW50IG5vdCBmb3VuZCBpbiBhbnkgZWxlbWVudCBkaXJlY3RvcnkgLSBwcm92aWRlIGhlbHBmdWwgZXJyb3Igd2l0aCBzdWdnZXN0aW9uc1xuICAgICAgY29uc3QgYXZhaWxhYmxlVHlwZXMgPSBPYmplY3QudmFsdWVzKEVsZW1lbnRUeXBlKS5qb2luKCcsICcpO1xuICAgICAgbG9nZ2VyLndhcm4oYENvbnRlbnQgXCIke2NvbnRlbnRJZGVudGlmaWVyfVwiIG5vdCBmb3VuZCBpbiBhbnkgcG9ydGZvbGlvIGRpcmVjdG9yeWAsIHsgXG4gICAgICAgIGNvbnRlbnRJZGVudGlmaWVyLFxuICAgICAgICBzZWFyY2hlZFR5cGVzOiBPYmplY3QudmFsdWVzKEVsZW1lbnRUeXBlKSBcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICAvLyBVWCBJTVBST1ZFTUVOVDogRW5oYW5jZWQgZXJyb3IgbWVzc2FnZSB3aXRoIHNtYXJ0IHN1Z2dlc3Rpb25zXG4gICAgICBsZXQgZXJyb3JNZXNzYWdlID0gYOKdjCBDb250ZW50IFwiJHtjb250ZW50SWRlbnRpZmllcn1cIiBub3QgZm91bmQgaW4gcG9ydGZvbGlvLlxcblxcbmA7XG4gICAgICBlcnJvck1lc3NhZ2UgKz0gYPCflI0gKipTZWFyY2hlZCBhY3Jvc3MgYWxsIGVsZW1lbnQgdHlwZXMqKjogJHthdmFpbGFibGVUeXBlc31cXG5cXG5gO1xuICAgICAgXG4gICAgICAvLyBUcnkgdG8gcHJvdmlkZSBzbWFydCBzdWdnZXN0aW9ucyBiYXNlZCBvbiBwYXJ0aWFsIG1hdGNoZXNcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgRmlsZURpc2NvdmVyeVV0aWwgfSA9IGF3YWl0IGltcG9ydCgnLi91dGlscy9GaWxlRGlzY292ZXJ5VXRpbC5qcycpO1xuICAgICAgICBjb25zdCBzdWdnZXN0aW9uczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgXG4gICAgICAgIC8vIFNlYXJjaCBmb3Igc2ltaWxhciBuYW1lcyBhY3Jvc3MgYWxsIGVsZW1lbnQgdHlwZXNcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50VHlwZSBvZiBPYmplY3QudmFsdWVzKEVsZW1lbnRUeXBlKSkge1xuICAgICAgICAgIGNvbnN0IGRpciA9IHBvcnRmb2xpb01hbmFnZXIuZ2V0RWxlbWVudERpcihlbGVtZW50VHlwZSk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRpYWxNYXRjaGVzID0gYXdhaXQgRmlsZURpc2NvdmVyeVV0aWwuZmluZEZpbGUoZGlyLCBjb250ZW50SWRlbnRpZmllciwge1xuICAgICAgICAgICAgICBleHRlbnNpb25zOiBbJy5tZCcsICcuanNvbicsICcueWFtbCcsICcueW1sJ10sXG4gICAgICAgICAgICAgIHBhcnRpYWxNYXRjaDogdHJ1ZSxcbiAgICAgICAgICAgICAgY2FjaGVSZXN1bHRzOiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBhcnRpYWxNYXRjaGVzKSAmJiBwYXJ0aWFsTWF0Y2hlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgbWF0Y2ggb2YgcGFydGlhbE1hdGNoZXMuc2xpY2UoMCwgMikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBiYXNlbmFtZSA9IHBhdGguYmFzZW5hbWUobWF0Y2gsIHBhdGguZXh0bmFtZShtYXRjaCkpO1xuICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb25zLnB1c2goYFwiJHtiYXNlbmFtZX1cIiAoJHtlbGVtZW50VHlwZX0pYCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFydGlhbE1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgY29uc3QgYmFzZW5hbWUgPSBwYXRoLmJhc2VuYW1lKHBhcnRpYWxNYXRjaGVzLCBwYXRoLmV4dG5hbWUocGFydGlhbE1hdGNoZXMpKTtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbnMucHVzaChgXCIke2Jhc2VuYW1lfVwiICgke2VsZW1lbnRUeXBlfSlgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgLy8gU2tpcCB0aGlzIHR5cGUgaWYgdGhlcmUncyBhbiBlcnJvclxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZiAoc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGVycm9yTWVzc2FnZSArPSBg8J+SoSAqKkRpZCB5b3UgbWVhbiBvbmUgb2YgdGhlc2U/KipcXG5gO1xuICAgICAgICAgIGZvciAoY29uc3Qgc3VnZ2VzdGlvbiBvZiBzdWdnZXN0aW9ucy5zbGljZSgwLCA1KSkge1xuICAgICAgICAgICAgZXJyb3JNZXNzYWdlICs9IGAgIOKAoiAke3N1Z2dlc3Rpb259XFxuYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgZXJyb3JNZXNzYWdlICs9IGBcXG5gO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChzdWdnZXN0aW9uRXJyb3IpIHtcbiAgICAgICAgLy8gSWYgc3VnZ2VzdGlvbnMgZmFpbCwgY29udGludWUgd2l0aG91dCB0aGVtXG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnRmFpbGVkIHRvIGdlbmVyYXRlIHN1Z2dlc3Rpb25zJywgeyBzdWdnZXN0aW9uRXJyb3IgfSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGVycm9yTWVzc2FnZSArPSBg8J+boO+4jyAqKlN0ZXAtYnktc3RlcCB0cm91Ymxlc2hvb3RpbmcqKjpcXG5gO1xuICAgICAgZXJyb3JNZXNzYWdlICs9IGAxLiDwn5OdICoqTGlzdCBhbGwgY29udGVudCoqOiBVc2UgXFxgbGlzdF9wb3J0Zm9saW9cXGAgdG8gc2VlIHdoYXQncyBhdmFpbGFibGVcXG5gO1xuICAgICAgZXJyb3JNZXNzYWdlICs9IGAyLiDwn5SNICoqQ2hlY2sgc3BlbGxpbmcqKjogVmVyaWZ5IHRoZSBleGFjdCBuYW1lIGFuZCB0cnkgdmFyaWF0aW9uc1xcbmA7XG4gICAgICBlcnJvck1lc3NhZ2UgKz0gYDMuIPCfjq8gKipTcGVjaWZ5IHR5cGUqKjogVHJ5IFxcYHN1Ym1pdF9jb250ZW50IFwiJHtjb250ZW50SWRlbnRpZmllcn1cIiAtLXR5cGU9cGVyc29uYXNcXGBcXG5gO1xuICAgICAgZXJyb3JNZXNzYWdlICs9IGA0LiDwn5OBICoqQnJvd3NlIGZpbGVzKio6IENoZWNrIHlvdXIgcG9ydGZvbGlvIGRpcmVjdG9yeSBtYW51YWxseVxcblxcbmA7XG4gICAgICBlcnJvck1lc3NhZ2UgKz0gYPCfk50gKipUaXAqKjogVGhlIHN5c3RlbSBzZWFyY2hlcyBib3RoIGZpbGVuYW1lcyBhbmQgZGlzcGxheSBuYW1lcyB3aXRoIGZ1enp5IG1hdGNoaW5nLmA7XG4gICAgICBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGVycm9yTWVzc2FnZSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2hlY2sgZm9yIGR1cGxpY2F0ZXMgYWNyb3NzIGFsbCBzb3VyY2VzIGJlZm9yZSBzdWJtaXNzaW9uXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgVW5pZmllZEluZGV4TWFuYWdlciB9ID0gYXdhaXQgaW1wb3J0KCcuL3BvcnRmb2xpby9VbmlmaWVkSW5kZXhNYW5hZ2VyLmpzJyk7XG4gICAgICBjb25zdCB1bmlmaWVkTWFuYWdlciA9IFVuaWZpZWRJbmRleE1hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICAgIFxuICAgICAgLy8gRXh0cmFjdCB0aGUgYWN0dWFsIGVsZW1lbnQgbmFtZSBmcm9tIHRoZSBjb250ZW50IHBhdGhcbiAgICAgIGNvbnN0IGJhc2VuYW1lID0gcGF0aC5iYXNlbmFtZShmb3VuZFBhdGghLCBwYXRoLmV4dG5hbWUoZm91bmRQYXRoISkpO1xuICAgICAgY29uc3QgZHVwbGljYXRlcyA9IGF3YWl0IHVuaWZpZWRNYW5hZ2VyLmNoZWNrRHVwbGljYXRlcyhiYXNlbmFtZSk7XG4gICAgICBcbiAgICAgIGlmIChkdXBsaWNhdGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgZHVwbGljYXRlID0gZHVwbGljYXRlc1swXTtcbiAgICAgICAgbGV0IHdhcm5pbmdUZXh0ID0gYOKaoO+4jyAqKkR1cGxpY2F0ZSBEZXRlY3Rpb24gQWxlcnQqKlxcblxcbmA7XG4gICAgICAgIHdhcm5pbmdUZXh0ICs9IGBGb3VuZCBcIiR7ZHVwbGljYXRlLm5hbWV9XCIgaW4gbXVsdGlwbGUgc291cmNlczpcXG5cXG5gO1xuICAgICAgICBcbiAgICAgICAgZm9yIChjb25zdCBzb3VyY2Ugb2YgZHVwbGljYXRlLnNvdXJjZXMpIHtcbiAgICAgICAgICBjb25zdCBzb3VyY2VJY29uID0gdGhpcy5nZXRTb3VyY2VJY29uKHNvdXJjZS5zb3VyY2UpO1xuICAgICAgICAgIHdhcm5pbmdUZXh0ICs9IGAke3NvdXJjZUljb259ICoqJHtzb3VyY2Uuc291cmNlfSoqOiAke3NvdXJjZS52ZXJzaW9uIHx8ICd1bmtub3duIHZlcnNpb24nfSAoJHtzb3VyY2UubGFzdE1vZGlmaWVkLnRvTG9jYWxlRGF0ZVN0cmluZygpfSlcXG5gO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICB3YXJuaW5nVGV4dCArPSBgXFxuYDtcbiAgICAgICAgXG4gICAgICAgIGlmIChkdXBsaWNhdGUuaGFzVmVyc2lvbkNvbmZsaWN0ICYmIGR1cGxpY2F0ZS52ZXJzaW9uQ29uZmxpY3QpIHtcbiAgICAgICAgICB3YXJuaW5nVGV4dCArPSBg8J+UhCAqKlZlcnNpb24gQ29uZmxpY3QgRGV0ZWN0ZWQqKlxcbmA7XG4gICAgICAgICAgd2FybmluZ1RleHQgKz0gYFJlY29tbWVuZGVkIHNvdXJjZTogKioke2R1cGxpY2F0ZS52ZXJzaW9uQ29uZmxpY3QucmVjb21tZW5kZWR9KipcXG5gO1xuICAgICAgICAgIHdhcm5pbmdUZXh0ICs9IGBSZWFzb246ICR7ZHVwbGljYXRlLnZlcnNpb25Db25mbGljdC5yZWFzb259XFxuXFxuYDtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgd2FybmluZ1RleHQgKz0gYCoqUmVjb21tZW5kYXRpb25zOioqXFxuYDtcbiAgICAgICAgd2FybmluZ1RleHQgKz0gYOKAoiBSZXZpZXcgZXhpc3RpbmcgdmVyc2lvbnMgYmVmb3JlIHN1Ym1pdHRpbmdcXG5gO1xuICAgICAgICB3YXJuaW5nVGV4dCArPSBg4oCiIENvbnNpZGVyIHVwZGF0aW5nIGxvY2FsIHZlcnNpb24gaW5zdGVhZCBvZiBjcmVhdGluZyBkdXBsaWNhdGVcXG5gO1xuICAgICAgICB3YXJuaW5nVGV4dCArPSBg4oCiIEVuc3VyZSB5b3VyIHZlcnNpb24gYWRkcyBtZWFuaW5nZnVsIGltcHJvdmVtZW50c1xcbmA7XG4gICAgICAgIHdhcm5pbmdUZXh0ICs9IGDigKIgVXBkYXRlIHZlcnNpb24gbnVtYmVyIGluIG1ldGFkYXRhIGlmIHN1Ym1pdHRpbmcgZW5oYW5jZW1lbnRcXG5cXG5gO1xuICAgICAgICB3YXJuaW5nVGV4dCArPSBgKipQcm9jZWVkaW5nIHdpdGggc3VibWlzc2lvbiBhbnl3YXkuLi4qKlxcblxcbmA7XG4gICAgICAgIFxuICAgICAgICAvLyBMb2cgdGhlIGR1cGxpY2F0ZSBkZXRlY3Rpb24gZm9yIG1vbml0b3JpbmdcbiAgICAgICAgbG9nZ2VyLndhcm4oJ0R1cGxpY2F0ZSBjb250ZW50IGRldGVjdGVkIGR1cmluZyBzdWJtaXNzaW9uJywge1xuICAgICAgICAgIGNvbnRlbnRJZGVudGlmaWVyLFxuICAgICAgICAgIGVsZW1lbnRUeXBlLFxuICAgICAgICAgIGR1cGxpY2F0ZUluZm86IGR1cGxpY2F0ZVxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIC8vIENvbnRpbnVlIHdpdGggc3VibWlzc2lvbiBidXQgc2hvdyB3YXJuaW5nXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN1Ym1pdFRvb2wuZXhlY3V0ZSh7XG4gICAgICAgICAgbmFtZTogY29udGVudElkZW50aWZpZXIsXG4gICAgICAgICAgdHlwZTogZWxlbWVudFR5cGVcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICAvLyBDb21iaW5lIHdhcm5pbmcgd2l0aCBzdWJtaXNzaW9uIHJlc3VsdFxuICAgICAgICBjb25zdCByZXNwb25zZVRleHQgPSBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX0ke3Jlc3VsdC5zdWNjZXNzID8gJ+KaoO+4jycgOiAn4p2MJ30gJHt3YXJuaW5nVGV4dH0ke3Jlc3VsdC5tZXNzYWdlfWA7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IHJlc3BvbnNlVGV4dCxcbiAgICAgICAgICB9XSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChkdXBsaWNhdGVFcnJvcikge1xuICAgICAgLy8gSWYgZHVwbGljYXRlIGNoZWNraW5nIGZhaWxzLCBsb2cgYnV0IGNvbnRpbnVlIHdpdGggc3VibWlzc2lvblxuICAgICAgbG9nZ2VyLndhcm4oJ0R1cGxpY2F0ZSBjaGVja2luZyBmYWlsZWQgZHVyaW5nIHN1Ym1pc3Npb24nLCB7XG4gICAgICAgIGNvbnRlbnRJZGVudGlmaWVyLFxuICAgICAgICBlcnJvcjogZHVwbGljYXRlRXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGR1cGxpY2F0ZUVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZHVwbGljYXRlRXJyb3IpXG4gICAgICB9KTtcbiAgICB9XG4gICAgXG4gICAgLy8gRXhlY3V0ZSB0aGUgc3VibWlzc2lvbiB3aXRoIHRoZSBkZXRlY3RlZCBlbGVtZW50IHR5cGVcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdWJtaXRUb29sLmV4ZWN1dGUoe1xuICAgICAgbmFtZTogY29udGVudElkZW50aWZpZXIsXG4gICAgICB0eXBlOiBlbGVtZW50VHlwZVxuICAgIH0pO1xuICAgIFxuICAgIC8vIEZvcm1hdCB0aGUgcmVzcG9uc2UgLSB0aGUgbWVzc2FnZSBhbHJlYWR5IGNvbnRhaW5zIGFsbCBkZXRhaWxzXG4gICAgbGV0IHJlc3BvbnNlVGV4dCA9IHJlc3VsdC5tZXNzYWdlO1xuICAgIFxuICAgIC8vIEFkZCBwZXJzb25hIGluZGljYXRvciBmb3IgY29uc2lzdGVuY3lcbiAgICByZXNwb25zZVRleHQgPSBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX0ke3Jlc3VsdC5zdWNjZXNzID8gJ+KchScgOiAn4p2MJ30gJHtyZXNwb25zZVRleHR9YDtcbiAgICBcbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudDogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogcmVzcG9uc2VUZXh0LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICAgIFxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIC8vIFVYIElNUFJPVkVNRU5UOiBDb21wcmVoZW5zaXZlIGVycm9yIGhhbmRsaW5nIHdpdGggZmFsbGJhY2sgc3VnZ2VzdGlvbnNcbiAgICAgIGxvZ2dlci5lcnJvcignVW5leHBlY3RlZCBlcnJvciBpbiBzdWJtaXRDb250ZW50Jywge1xuICAgICAgICBjb250ZW50SWRlbnRpZmllcixcbiAgICAgICAgZXJyb3I6IGVycm9yLm1lc3NhZ2UsXG4gICAgICAgIHN0YWNrOiBlcnJvci5zdGFja1xuICAgICAgfSk7XG4gICAgICBcbiAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgKipTdWJtaXNzaW9uIEZhaWxlZCoqXFxuXFxuYDtcbiAgICAgIGVycm9yTWVzc2FnZSArPSBg8J+aqCAqKkVycm9yKio6ICR7ZXJyb3IubWVzc2FnZSB8fCAnVW5rbm93biBlcnJvciBvY2N1cnJlZCd9XFxuXFxuYDtcbiAgICAgIFxuICAgICAgLy8gUHJvdmlkZSBjb250ZXh0dWFsIHRyb3VibGVzaG9vdGluZyBiYXNlZCBvbiBlcnJvciB0eXBlXG4gICAgICBpZiAoZXJyb3IubWVzc2FnZT8uaW5jbHVkZXMoJ2F1dGgnKSB8fCBlcnJvci5tZXNzYWdlPy5pbmNsdWRlcygndG9rZW4nKSkge1xuICAgICAgICBlcnJvck1lc3NhZ2UgKz0gYPCflJAgKipBdXRoZW50aWNhdGlvbiBJc3N1ZSoqOlxcbmA7XG4gICAgICAgIGVycm9yTWVzc2FnZSArPSBg4oCiIFJ1bjogXFxgc2V0dXBfZ2l0aHViX2F1dGhcXGAgdG8gcmUtYXV0aGVudGljYXRlXFxuYDtcbiAgICAgICAgZXJyb3JNZXNzYWdlICs9IGDigKIgQ2hlY2s6IFxcYGdoIGF1dGggc3RhdHVzXFxgIGlmIHlvdSBoYXZlIEdpdEh1YiBDTElcXG5cXG5gO1xuICAgICAgfVxuICAgICAgXG4gICAgICBpZiAoZXJyb3IubWVzc2FnZT8uaW5jbHVkZXMoJ25ldHdvcmsnKSB8fCBlcnJvci5tZXNzYWdlPy5pbmNsdWRlcygnY29ubmVjdGlvbicpKSB7XG4gICAgICAgIGVycm9yTWVzc2FnZSArPSBg8J+MkCAqKk5ldHdvcmsgSXNzdWUqKjpcXG5gO1xuICAgICAgICBlcnJvck1lc3NhZ2UgKz0gYOKAoiBDaGVjayB5b3VyIGludGVybmV0IGNvbm5lY3Rpb25cXG5gO1xuICAgICAgICBlcnJvck1lc3NhZ2UgKz0gYOKAoiBUcnkgYWdhaW4gaW4gYSBmZXcgbWludXRlc1xcbmA7XG4gICAgICAgIGVycm9yTWVzc2FnZSArPSBg4oCiIENoZWNrIEdpdEh1YiBzdGF0dXM6IGh0dHBzOi8vc3RhdHVzLmdpdGh1Yi5jb21cXG5cXG5gO1xuICAgICAgfVxuICAgICAgXG4gICAgICBlcnJvck1lc3NhZ2UgKz0gYPCfmpEgKipFbWVyZ2VuY3kgQWx0ZXJuYXRpdmVzKio6XFxuYDtcbiAgICAgIGVycm9yTWVzc2FnZSArPSBgMS4g8J+UhCAqKlJldHJ5Kio6IFRyeSB0aGUgc2FtZSBjb21tYW5kIGFnYWluXFxuYDtcbiAgICAgIGVycm9yTWVzc2FnZSArPSBgMi4g8J+TnSAqKkNoZWNrIGNvbnRlbnQqKjogVXNlIFxcYGxpc3RfcG9ydGZvbGlvXFxgIHRvIHZlcmlmeSB0aGUgZWxlbWVudCBleGlzdHNcXG5gO1xuICAgICAgZXJyb3JNZXNzYWdlICs9IGAzLiDwn46vICoqU3BlY2lmeSB0eXBlKio6IEFkZCBcXGAtLXR5cGU9cGVyc29uYXNcXGAgaWYgeW91IGtub3cgdGhlIGVsZW1lbnQgdHlwZVxcbmA7XG4gICAgICBlcnJvck1lc3NhZ2UgKz0gYDQuIPCfmpEgKipNYW51YWwgdXBsb2FkKio6IENvcHkgY29udGVudCBkaXJlY3RseSB0byBHaXRIdWIgdmlhIHdlYiBpbnRlcmZhY2VcXG5cXG5gO1xuICAgICAgZXJyb3JNZXNzYWdlICs9IGDwn5OeICoqTmVlZCBoZWxwPyoqIFRoaXMgbG9va3MgbGlrZSBhIHN5c3RlbSBpc3N1ZS4gUGxlYXNlIHJlcG9ydCBpdCB3aXRoIHRoZSBlcnJvciBkZXRhaWxzIGFib3ZlLmA7XG4gICAgICBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGVycm9yTWVzc2FnZSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRDb2xsZWN0aW9uQ2FjaGVIZWFsdGgoKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEdldCBjYWNoZSBzdGF0aXN0aWNzIGZyb20gYm90aCBjYWNoZXNcbiAgICAgIGNvbnN0IGNvbGxlY3Rpb25TdGF0cyA9IGF3YWl0IHRoaXMuY29sbGVjdGlvbkNhY2hlLmdldENhY2hlU3RhdHMoKTtcbiAgICAgIGNvbnN0IHNlYXJjaFN0YXRzID0gYXdhaXQgdGhpcy5jb2xsZWN0aW9uU2VhcmNoLmdldENhY2hlU3RhdHMoKTtcbiAgICAgIFxuICAgICAgLy8gQ2hlY2sgaWYgY2FjaGUgZGlyZWN0b3J5IGV4aXN0c1xuICAgICAgY29uc3QgY2FjaGVEaXIgPSBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgJy5kb2xsaG91c2VtY3AnLCAnY2FjaGUnKTtcbiAgICAgIGxldCBjYWNoZUZpbGVFeGlzdHMgPSBmYWxzZTtcbiAgICAgIGxldCBjYWNoZUZpbGVTaXplID0gMDtcbiAgICAgIFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY2FjaGVGaWxlID0gcGF0aC5qb2luKGNhY2hlRGlyLCAnY29sbGVjdGlvbi1jYWNoZS5qc29uJyk7XG4gICAgICAgIGNvbnN0IGZpbGVTdGF0cyA9IGF3YWl0IGZzLnN0YXQoY2FjaGVGaWxlKTtcbiAgICAgICAgY2FjaGVGaWxlRXhpc3RzID0gdHJ1ZTtcbiAgICAgICAgY2FjaGVGaWxlU2l6ZSA9IGZpbGVTdGF0cy5zaXplO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gQ2FjaGUgZmlsZSBkb2Vzbid0IGV4aXN0IHlldFxuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBGb3JtYXQgY2FjaGUgYWdlXG4gICAgICBjb25zdCBmb3JtYXRBZ2UgPSAoYWdlTXM6IG51bWJlcik6IHN0cmluZyA9PiB7XG4gICAgICAgIGlmIChhZ2VNcyA9PT0gMCkgcmV0dXJuICdOb3QgY2FjaGVkJztcbiAgICAgICAgY29uc3QgaG91cnMgPSBNYXRoLmZsb29yKGFnZU1zIC8gKDEwMDAgKiA2MCAqIDYwKSk7XG4gICAgICAgIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKChhZ2VNcyAlICgxMDAwICogNjAgKiA2MCkpIC8gKDEwMDAgKiA2MCkpO1xuICAgICAgICBpZiAoaG91cnMgPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIGAke2hvdXJzfWggJHttaW51dGVzfW0gb2xkYDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYCR7bWludXRlc31tIG9sZGA7XG4gICAgICB9O1xuICAgICAgXG4gICAgICAvLyBCdWlsZCBoZWFsdGggcmVwb3J0IHdpdGggYm90aCBjYWNoZSBzeXN0ZW1zXG4gICAgICBjb25zdCBoZWFsdGhSZXBvcnQgPSB7XG4gICAgICAgIGNvbGxlY3Rpb246IHtcbiAgICAgICAgICBzdGF0dXM6IGNvbGxlY3Rpb25TdGF0cy5pc1ZhbGlkID8gJ2hlYWx0aHknIDogKGNhY2hlRmlsZUV4aXN0cyA/ICdleHBpcmVkJyA6ICdlbXB0eScpLFxuICAgICAgICAgIGNhY2hlRXhpc3RzOiBjYWNoZUZpbGVFeGlzdHMsXG4gICAgICAgICAgaXRlbUNvdW50OiBjb2xsZWN0aW9uU3RhdHMuaXRlbUNvdW50LFxuICAgICAgICAgIGNhY2hlQWdlOiBmb3JtYXRBZ2UoY29sbGVjdGlvblN0YXRzLmNhY2hlQWdlKSxcbiAgICAgICAgICBjYWNoZUFnZU1zOiBjb2xsZWN0aW9uU3RhdHMuY2FjaGVBZ2UsXG4gICAgICAgICAgaXNWYWxpZDogY29sbGVjdGlvblN0YXRzLmlzVmFsaWQsXG4gICAgICAgICAgY2FjaGVGaWxlU2l6ZTogY2FjaGVGaWxlU2l6ZSxcbiAgICAgICAgICBjYWNoZUZpbGVTaXplRm9ybWF0dGVkOiBjYWNoZUZpbGVTaXplID4gMCA/IGAkeyhjYWNoZUZpbGVTaXplIC8gMTAyNCkudG9GaXhlZCgyKX0gS0JgIDogJzAgS0InLFxuICAgICAgICAgIHR0bFJlbWFpbmluZzogY29sbGVjdGlvblN0YXRzLmlzVmFsaWQgPyBmb3JtYXRBZ2UoMjQgKiA2MCAqIDYwICogMTAwMCAtIGNvbGxlY3Rpb25TdGF0cy5jYWNoZUFnZSkgOiAnRXhwaXJlZCdcbiAgICAgICAgfSxcbiAgICAgICAgaW5kZXg6IHtcbiAgICAgICAgICBzdGF0dXM6IHNlYXJjaFN0YXRzLmluZGV4LmlzVmFsaWQgPyAnaGVhbHRoeScgOiAoc2VhcmNoU3RhdHMuaW5kZXguaGFzQ2FjaGUgPyAnZXhwaXJlZCcgOiAnZW1wdHknKSxcbiAgICAgICAgICBoYXNDYWNoZTogc2VhcmNoU3RhdHMuaW5kZXguaGFzQ2FjaGUsXG4gICAgICAgICAgZWxlbWVudHM6IHNlYXJjaFN0YXRzLmluZGV4LmVsZW1lbnRzLFxuICAgICAgICAgIGNhY2hlQWdlOiBmb3JtYXRBZ2Uoc2VhcmNoU3RhdHMuaW5kZXguYWdlKSxcbiAgICAgICAgICBpc1ZhbGlkOiBzZWFyY2hTdGF0cy5pbmRleC5pc1ZhbGlkLFxuICAgICAgICAgIHR0bFJlbWFpbmluZzogc2VhcmNoU3RhdHMuaW5kZXguaXNWYWxpZCA/IGZvcm1hdEFnZSgxNSAqIDYwICogMTAwMCAtIHNlYXJjaFN0YXRzLmluZGV4LmFnZSkgOiAnRXhwaXJlZCdcbiAgICAgICAgfSxcbiAgICAgICAgb3ZlcmFsbDoge1xuICAgICAgICAgIHJlY29tbWVuZGF0aW9uOiAoY29sbGVjdGlvblN0YXRzLmlzVmFsaWQgfHwgc2VhcmNoU3RhdHMuaW5kZXguaXNWYWxpZClcbiAgICAgICAgICAgID8gJ0NhY2hlIHN5c3RlbSBpcyBvcGVyYXRpb25hbCBhbmQgc2VydmluZyBjb250ZW50IGVmZmljaWVudGx5J1xuICAgICAgICAgICAgOiAnQ2FjaGUgc3lzdGVtIHdpbGwgcmVmcmVzaCBvbiBuZXh0IGFjY2VzcyBmb3Igb3B0aW1hbCBwZXJmb3JtYW5jZSdcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl98J+TiiAqKkNvbGxlY3Rpb24gQ2FjaGUgSGVhbHRoIENoZWNrKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgYCMjIPCfl4TvuI8gQ29sbGVjdGlvbiBDYWNoZSAoTGVnYWN5KVxcbmAgK1xuICAgICAgICAgICAgICBgKipTdGF0dXMqKjogJHtoZWFsdGhSZXBvcnQuY29sbGVjdGlvbi5zdGF0dXMgPT09ICdoZWFsdGh5JyA/ICfinIUnIDogaGVhbHRoUmVwb3J0LmNvbGxlY3Rpb24uc3RhdHVzID09PSAnZXhwaXJlZCcgPyAn4pqg77iPJyA6ICfwn5OmJ30gJHtoZWFsdGhSZXBvcnQuY29sbGVjdGlvbi5zdGF0dXMudG9VcHBlckNhc2UoKX1cXG5gICtcbiAgICAgICAgICAgICAgYCoqSXRlbXMgQ2FjaGVkKio6ICR7aGVhbHRoUmVwb3J0LmNvbGxlY3Rpb24uaXRlbUNvdW50fVxcbmAgK1xuICAgICAgICAgICAgICBgKipDYWNoZSBBZ2UqKjogJHtoZWFsdGhSZXBvcnQuY29sbGVjdGlvbi5jYWNoZUFnZX1cXG5gICtcbiAgICAgICAgICAgICAgYCoqQ2FjaGUgU2l6ZSoqOiAke2hlYWx0aFJlcG9ydC5jb2xsZWN0aW9uLmNhY2hlRmlsZVNpemVGb3JtYXR0ZWR9XFxuYCArXG4gICAgICAgICAgICAgIGAqKlRUTCBSZW1haW5pbmcqKjogJHtoZWFsdGhSZXBvcnQuY29sbGVjdGlvbi50dGxSZW1haW5pbmd9XFxuXFxuYCArXG4gICAgICAgICAgICAgIGAjIyDwn5qAIEluZGV4IENhY2hlIChFbmhhbmNlZCBTZWFyY2gpXFxuYCArXG4gICAgICAgICAgICAgIGAqKlN0YXR1cyoqOiAke2hlYWx0aFJlcG9ydC5pbmRleC5zdGF0dXMgPT09ICdoZWFsdGh5JyA/ICfinIUnIDogaGVhbHRoUmVwb3J0LmluZGV4LnN0YXR1cyA9PT0gJ2V4cGlyZWQnID8gJ+KaoO+4jycgOiAn8J+Tpid9ICR7aGVhbHRoUmVwb3J0LmluZGV4LnN0YXR1cy50b1VwcGVyQ2FzZSgpfVxcbmAgK1xuICAgICAgICAgICAgICBgKipFbGVtZW50cyBJbmRleGVkKio6ICR7aGVhbHRoUmVwb3J0LmluZGV4LmVsZW1lbnRzfVxcbmAgK1xuICAgICAgICAgICAgICBgKipDYWNoZSBBZ2UqKjogJHtoZWFsdGhSZXBvcnQuaW5kZXguY2FjaGVBZ2V9XFxuYCArXG4gICAgICAgICAgICAgIGAqKlRUTCBSZW1haW5pbmcqKjogJHtoZWFsdGhSZXBvcnQuaW5kZXgudHRsUmVtYWluaW5nfVxcblxcbmAgK1xuICAgICAgICAgICAgICBgKipPdmVyYWxsIFN0YXR1cyoqOiAke2hlYWx0aFJlcG9ydC5vdmVyYWxsLnJlY29tbWVuZGF0aW9ufVxcblxcbmAgK1xuICAgICAgICAgICAgICBgVGhlIGVuaGFuY2VkIGluZGV4IGNhY2hlIHByb3ZpZGVzIGZhc3Qgc2VhcmNoIHdpdGggcGFnaW5hdGlvbiwgZmlsdGVyaW5nLCBhbmQgc29ydGluZy4gYCArXG4gICAgICAgICAgICAgIGBUaGUgY29sbGVjdGlvbiBjYWNoZSBzZXJ2ZXMgYXMgYSBmYWxsYmFjayBmb3Igb2ZmbGluZSBicm93c2luZy5gLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBnZXQgY2FjaGUgaGVhbHRoOiAke2Vycm9yTWVzc2FnZX1gKTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIEZhaWxlZCB0byBnZXQgY2FjaGUgaGVhbHRoOiAke2Vycm9yTWVzc2FnZX1gLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8vIFVzZXIgaWRlbnRpdHkgbWFuYWdlbWVudFxuICBhc3luYyBzZXRVc2VySWRlbnRpdHkodXNlcm5hbWU6IHN0cmluZywgZW1haWw/OiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKCF1c2VybmFtZSB8fCB1c2VybmFtZS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIFVzZXJuYW1lIGNhbm5vdCBiZSBlbXB0eWAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIGFuZCBzYW5pdGl6ZSB1c2VybmFtZVxuICAgICAgY29uc3QgdmFsaWRhdGVkVXNlcm5hbWUgPSB2YWxpZGF0ZVVzZXJuYW1lKHVzZXJuYW1lKTtcbiAgICAgIFxuICAgICAgLy8gVmFsaWRhdGUgZW1haWwgaWYgcHJvdmlkZWRcbiAgICAgIGxldCB2YWxpZGF0ZWRFbWFpbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKGVtYWlsKSB7XG4gICAgICAgIGNvbnN0IHNhbml0aXplZEVtYWlsID0gc2FuaXRpemVJbnB1dChlbWFpbCwgMTAwKTtcbiAgICAgICAgaWYgKCFWQUxJREFUSU9OX1BBVFRFUk5TLlNBRkVfRU1BSUwudGVzdChzYW5pdGl6ZWRFbWFpbCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZW1haWwgZm9ybWF0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgdmFsaWRhdGVkRW1haWwgPSBzYW5pdGl6ZWRFbWFpbDtcbiAgICAgIH1cblxuICAgICAgLy8gU2V0IHRoZSB2YWxpZGF0ZWQgdXNlciBpZGVudGl0eVxuICAgICAgdGhpcy5jdXJyZW50VXNlciA9IHZhbGlkYXRlZFVzZXJuYW1lO1xuICAgICAgaWYgKHZhbGlkYXRlZEVtYWlsKSB7XG4gICAgICAgIHByb2Nlc3MuZW52LkRPTExIT1VTRV9FTUFJTCA9IHZhbGlkYXRlZEVtYWlsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inIUgKipVc2VyIElkZW50aXR5IFNldCoqXFxuXFxuYCArXG4gICAgICAgICAgICBg8J+RpCAqKlVzZXJuYW1lOioqICR7dmFsaWRhdGVkVXNlcm5hbWV9XFxuYCArXG4gICAgICAgICAgICBgJHt2YWxpZGF0ZWRFbWFpbCA/IGDwn5OnICoqRW1haWw6KiogJHt2YWxpZGF0ZWRFbWFpbH1cXG5gIDogJyd9YCArXG4gICAgICAgICAgICBgXFxu8J+OryAqKk5leHQgU3RlcHM6KipcXG5gICtcbiAgICAgICAgICAgIGDigKIgTmV3IHBlcnNvbmFzIHlvdSBjcmVhdGUgd2lsbCBiZSBhdHRyaWJ1dGVkIHRvIFwiJHt2YWxpZGF0ZWRVc2VybmFtZX1cIlxcbmAgK1xuICAgICAgICAgICAgYOKAoiBTZXQgZW52aXJvbm1lbnQgdmFyaWFibGUgXFxgRE9MTEhPVVNFX1VTRVI9JHt2YWxpZGF0ZWRVc2VybmFtZX1cXGAgdG8gcGVyc2lzdCB0aGlzIHNldHRpbmdcXG5gICtcbiAgICAgICAgICAgIGAke3ZhbGlkYXRlZEVtYWlsID8gYOKAoiBTZXQgZW52aXJvbm1lbnQgdmFyaWFibGUgXFxgRE9MTEhPVVNFX0VNQUlMPSR7dmFsaWRhdGVkRW1haWx9XFxgIGZvciBjb250YWN0IGluZm9cXG5gIDogJyd9YCArXG4gICAgICAgICAgICBg4oCiIFVzZSBcXGBjbGVhcl91c2VyX2lkZW50aXR5XFxgIHRvIHJldHVybiB0byBhbm9ueW1vdXMgbW9kZWAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IHNhbml0aXplZCA9IFNlY3VyZUVycm9ySGFuZGxlci5zYW5pdGl6ZUVycm9yKGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCAqKlZhbGlkYXRpb24gRXJyb3IqKlxcblxcbmAgK1xuICAgICAgICAgICAgICBgJHtzYW5pdGl6ZWQubWVzc2FnZX1cXG5cXG5gICtcbiAgICAgICAgICAgICAgYFBsZWFzZSBwcm92aWRlIGEgdmFsaWQgdXNlcm5hbWUgKGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLCBoeXBoZW5zLCB1bmRlcnNjb3JlcywgZG90cyBvbmx5KS5gLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldFVzZXJJZGVudGl0eSgpIHtcbiAgICBjb25zdCBlbWFpbCA9IHByb2Nlc3MuZW52LkRPTExIT1VTRV9FTUFJTDtcbiAgICBcbiAgICBpZiAoIXRoaXMuY3VycmVudFVzZXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpffCfkaQgKipVc2VyIElkZW50aXR5OiBBbm9ueW1vdXMqKlxcblxcbmAgK1xuICAgICAgICAgICAgYPCflJIgKipTdGF0dXM6KiogQW5vbnltb3VzIG1vZGVcXG5gICtcbiAgICAgICAgICAgIGDwn5OdICoqQXR0cmlidXRpb246KiogUGVyc29uYXMgd2lsbCB1c2UgYW5vbnltb3VzIElEc1xcblxcbmAgK1xuICAgICAgICAgICAgYCoqVG8gc2V0IHlvdXIgaWRlbnRpdHk6KipcXG5gICtcbiAgICAgICAgICAgIGDigKIgVXNlOiBcXGBzZXRfdXNlcl9pZGVudGl0eSBcInlvdXItdXNlcm5hbWVcIlxcYFxcbmAgK1xuICAgICAgICAgICAgYOKAoiBPciBzZXQgZW52aXJvbm1lbnQgdmFyaWFibGU6IFxcYERPTExIT1VTRV9VU0VSPXlvdXItdXNlcm5hbWVcXGBgLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3wn5GkICoqVXNlciBJZGVudGl0eTogJHt0aGlzLmN1cnJlbnRVc2VyfSoqXFxuXFxuYCArXG4gICAgICAgICAgYOKchSAqKlN0YXR1czoqKiBBdXRoZW50aWNhdGVkXFxuYCArXG4gICAgICAgICAgYPCfkaQgKipVc2VybmFtZToqKiAke3RoaXMuY3VycmVudFVzZXJ9XFxuYCArXG4gICAgICAgICAgYCR7ZW1haWwgPyBg8J+TpyAqKkVtYWlsOioqICR7ZW1haWx9XFxuYCA6ICcnfWAgK1xuICAgICAgICAgIGDwn5OdICoqQXR0cmlidXRpb246KiogTmV3IHBlcnNvbmFzIHdpbGwgYmUgY3JlZGl0ZWQgdG8gXCIke3RoaXMuY3VycmVudFVzZXJ9XCJcXG5cXG5gICtcbiAgICAgICAgICBgKipFbnZpcm9ubWVudCBWYXJpYWJsZXM6KipcXG5gICtcbiAgICAgICAgICBg4oCiIFxcYERPTExIT1VTRV9VU0VSPSR7dGhpcy5jdXJyZW50VXNlcn1cXGBcXG5gICtcbiAgICAgICAgICBgJHtlbWFpbCA/IGDigKIgXFxgRE9MTEhPVVNFX0VNQUlMPSR7ZW1haWx9XFxgXFxuYCA6ICcnfWAgK1xuICAgICAgICAgIGBcXG4qKk1hbmFnZW1lbnQ6KipcXG5gICtcbiAgICAgICAgICBg4oCiIFVzZSBcXGBjbGVhcl91c2VyX2lkZW50aXR5XFxgIHRvIHJldHVybiB0byBhbm9ueW1vdXMgbW9kZVxcbmAgK1xuICAgICAgICAgIGDigKIgVXNlIFxcYHNldF91c2VyX2lkZW50aXR5IFwibmV3LXVzZXJuYW1lXCJcXGAgdG8gY2hhbmdlIHVzZXJuYW1lYCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGNsZWFyVXNlcklkZW50aXR5KCkge1xuICAgIGNvbnN0IHdhc1NldCA9IHRoaXMuY3VycmVudFVzZXIgIT09IG51bGw7XG4gICAgY29uc3QgcHJldmlvdXNVc2VyID0gdGhpcy5jdXJyZW50VXNlcjtcbiAgICB0aGlzLmN1cnJlbnRVc2VyID0gbnVsbDtcblxuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiB3YXNTZXQgXG4gICAgICAgICAgICA/IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKchSAqKlVzZXIgSWRlbnRpdHkgQ2xlYXJlZCoqXFxuXFxuYCArXG4gICAgICAgICAgICAgIGDwn5GkICoqUHJldmlvdXM6KiogJHtwcmV2aW91c1VzZXJ9XFxuYCArXG4gICAgICAgICAgICAgIGDwn5SSICoqQ3VycmVudDoqKiBBbm9ueW1vdXMgbW9kZVxcblxcbmAgK1xuICAgICAgICAgICAgICBg8J+TnSAqKkVmZmVjdDoqKiBOZXcgcGVyc29uYXMgd2lsbCB1c2UgYW5vbnltb3VzIElEc1xcblxcbmAgK1xuICAgICAgICAgICAgICBg4pqg77iPICoqTm90ZToqKiBUaGlzIG9ubHkgYWZmZWN0cyB0aGUgY3VycmVudCBzZXNzaW9uLlxcbmAgK1xuICAgICAgICAgICAgICBgVG8gcGVyc2lzdCB0aGlzIGNoYW5nZSwgdW5zZXQgdGhlIFxcYERPTExIT1VTRV9VU0VSXFxgIGVudmlyb25tZW50IHZhcmlhYmxlLmBcbiAgICAgICAgICAgIDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94oS577iPICoqQWxyZWFkeSBpbiBBbm9ueW1vdXMgTW9kZSoqXFxuXFxuYCArXG4gICAgICAgICAgICAgIGDwn5GkIE5vIHVzZXIgaWRlbnRpdHkgd2FzIHNldC5cXG5cXG5gICtcbiAgICAgICAgICAgICAgYFVzZSBcXGBzZXRfdXNlcl9pZGVudGl0eSBcInVzZXJuYW1lXCJcXGAgdG8gc2V0IHlvdXIgaWRlbnRpdHkuYCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q3VycmVudFVzZXJGb3JBdHRyaWJ1dGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRVc2VyIHx8IGdlbmVyYXRlQW5vbnltb3VzSWQoKTtcbiAgfVxuXG4gIC8vIEdpdEh1YiBhdXRoZW50aWNhdGlvbiBtYW5hZ2VtZW50XG4gIGFzeW5jIHNldHVwR2l0SHViQXV0aCgpIHtcbiAgICB0cnkge1xuICAgICAgLy8gQ2hlY2sgY3VycmVudCBhdXRoIHN0YXR1cyBmaXJzdFxuICAgICAgY29uc3QgY3VycmVudFN0YXR1cyA9IGF3YWl0IHRoaXMuZ2l0aHViQXV0aE1hbmFnZXIuZ2V0QXV0aFN0YXR1cygpO1xuICAgICAgXG4gICAgICBpZiAoY3VycmVudFN0YXR1cy5pc0F1dGhlbnRpY2F0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inIUgKipBbHJlYWR5IENvbm5lY3RlZCB0byBHaXRIdWIqKlxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYPCfkaQgKipVc2VybmFtZToqKiAke2N1cnJlbnRTdGF0dXMudXNlcm5hbWV9XFxuYCArXG4gICAgICAgICAgICAgICAgICBg8J+UkSAqKlBlcm1pc3Npb25zOioqICR7Y3VycmVudFN0YXR1cy5zY29wZXM/LmpvaW4oJywgJykgfHwgJ2Jhc2ljIGFjY2Vzcyd9XFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBgWW91J3JlIGFsbCBzZXQhIFlvdSBjYW46XFxuYCArXG4gICAgICAgICAgICAgICAgICBg4oCiIEJyb3dzZSB0aGUgY29sbGVjdGlvblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYOKAoiBJbnN0YWxsIGNvbnRlbnRcXG5gICtcbiAgICAgICAgICAgICAgICAgIGDigKIgU3VibWl0IHlvdXIgY3JlYXRpb25zXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBgVG8gZGlzY29ubmVjdCwgc2F5IFwiZGlzY29ubmVjdCBmcm9tIEdpdEh1YlwiYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEluaXRpYXRlIGRldmljZSBmbG93XG4gICAgICBsZXQgZGV2aWNlUmVzcG9uc2U6IERldmljZUNvZGVSZXNwb25zZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGRldmljZVJlc3BvbnNlID0gYXdhaXQgdGhpcy5naXRodWJBdXRoTWFuYWdlci5pbml0aWF0ZURldmljZUZsb3coKTtcbiAgICAgIH0gY2F0Y2ggKGRldmljZUZsb3dFcnJvcikge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ09BVVRIX0lOREVYXzI2ODE6IEZhaWxlZCB0byBpbml0aWF0ZSBkZXZpY2UgZmxvdycsIHsgZXJyb3I6IGRldmljZUZsb3dFcnJvciB9KTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPQVVUSF9JTkRFWF8yNjgxOiBEZXZpY2UgZmxvdyBpbml0aWF0aW9uIGZhaWxlZCAtICR7ZGV2aWNlRmxvd0Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBkZXZpY2VGbG93RXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gQ1JJVElDQUwgRklYOiBVc2UgaGVscGVyIHByb2Nlc3MgYXBwcm9hY2ggZnJvbSBQUiAjNTE4XG4gICAgICAvLyBNQ1Agc2VydmVycyBhcmUgc3RhdGVsZXNzIGFuZCB0ZXJtaW5hdGUgYWZ0ZXIgcmV0dXJuaW5nIHJlc3BvbnNlXG4gICAgICAvLyBUaGUgaGVscGVyIHByb2Nlc3Mgc3Vydml2ZXMgTUNQIHRlcm1pbmF0aW9uIGFuZCBjYW4gY29tcGxldGUgT0F1dGggcG9sbGluZ1xuICAgICAgXG4gICAgICAvLyBHZXQgdGhlIE9BdXRoIGNsaWVudCBJRCAtIHVzZSB0aGUgc2FtZSBtZXRob2QgdGhhdCBoYXMgdGhlIGRlZmF1bHQgZmFsbGJhY2tcbiAgICAgIC8vIFRoaXMgZW5zdXJlcyB3ZSBnZXQgdGhlIGRlZmF1bHQgY2xpZW50IElEIGlmIG5vIGVudi9jb25maWcgaXMgc2V0XG4gICAgICBsb2dnZXIuZGVidWcoJ09BVVRIX1NURVBfNDogR2V0dGluZyBjbGllbnQgSUQgZm9yIGhlbHBlciBwcm9jZXNzJyk7XG4gICAgICBjb25zdCBjbGllbnRJZCA9IGF3YWl0IEdpdEh1YkF1dGhNYW5hZ2VyLmdldENsaWVudElkKCk7XG4gICAgICBsb2dnZXIuZGVidWcoJ09BVVRIX1NURVBfNTogQ2xpZW50IElEIG9idGFpbmVkJywgeyBjbGllbnRJZDogY2xpZW50SWQ/LnN1YnN0cmluZygwLCA4KSArICcuLi4nIH0pO1xuICAgICAgXG4gICAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gbm93IHNpbmNlIGdldENsaWVudElkKCkgYWx3YXlzIHJldHVybnMgYSB2YWx1ZVxuICAgICAgLy8gKGVudiwgY29uZmlnLCBvciBkZWZhdWx0KSwgYnV0IGtlZXBpbmcgZm9yIHNhZmV0eVxuICAgICAgaWYgKCFjbGllbnRJZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCAqKkdpdEh1YiBPQXV0aCBDb25maWd1cmF0aW9uIEVycm9yKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGBVbmFibGUgdG8gb2J0YWluIEdpdEh1YiBPQXV0aCBjbGllbnQgSUQuXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBgVGhpcyBpcyB1bmV4cGVjdGVkIC0gcGxlYXNlIHJlcG9ydCB0aGlzIGlzc3VlLlxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYCoqV29ya2Fyb3VuZDoqKlxcbmAgK1xuICAgICAgICAgICAgICAgICAgYOKAoiBTZXQgZW52aXJvbm1lbnQgdmFyaWFibGU6IERPTExIT1VTRV9HSVRIVUJfQ0xJRU5UX0lEXFxuYCArXG4gICAgICAgICAgICAgICAgICBg4oCiIE9yIHVzZSBHaXRIdWIgQ0xJOiBnaCBhdXRoIGxvZ2luIC0td2ViYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFNwYXduIHRoZSBPQXV0aCBoZWxwZXIgcHJvY2Vzc1xuICAgICAgLy8gVGhlIGhlbHBlciBydW5zIGluZGVwZW5kZW50bHkgYW5kIHN1cnZpdmVzIE1DUCBzZXJ2ZXIgdGVybWluYXRpb25cbiAgICAgIGxldCBoZWxwZXJQYXRoOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIEdldCB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBjb21waWxlZCBKUyBmaWxlIGlzXG4gICAgICAgIGNvbnN0IF9fZmlsZW5hbWUgPSBmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCk7XG4gICAgICAgIGNvbnN0IF9fZGlybmFtZSA9IHBhdGguZGlybmFtZShfX2ZpbGVuYW1lKTtcbiAgICAgICAgXG4gICAgICAgIC8vIEZpbmQgdGhlIG9hdXRoLWhlbHBlci5tanMgZmlsZVxuICAgICAgICAvLyBJdCBzaG91bGQgYmUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IChvbmUgbGV2ZWwgdXAgZnJvbSBkaXN0LylcbiAgICAgICAgY29uc3QgcG9zc2libGVQYXRocyA9IFtcbiAgICAgICAgICBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4nLCAnb2F1dGgtaGVscGVyLm1qcycpLCAgLy8gRnJvbSBkaXN0L2luZGV4LmpzXG4gICAgICAgICAgcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksICdvYXV0aC1oZWxwZXIubWpzJyksICAgIC8vIEZyb20gQ1dEXG4gICAgICAgICAgcGF0aC5qb2luKF9fZGlybmFtZSwgJ29hdXRoLWhlbHBlci5tanMnKSwgICAgICAgIC8vIFNhbWUgZGlyZWN0b3J5XG4gICAgICAgICAgcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJy4uJywgJ29hdXRoLWhlbHBlci5tanMnKSAvLyBOUE0gcGFja2FnZSByb290XG4gICAgICAgIF07XG4gICAgICAgIFxuICAgICAgICBoZWxwZXJQYXRoID0gbnVsbDtcbiAgICAgICAgZm9yIChjb25zdCB0ZXN0UGF0aCBvZiBwb3NzaWJsZVBhdGhzKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IGZzLmFjY2Vzcyh0ZXN0UGF0aCk7XG4gICAgICAgICAgICBoZWxwZXJQYXRoID0gdGVzdFBhdGg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8vIFRyeSBuZXh0IHBhdGhcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGlmICghaGVscGVyUGF0aCkge1xuICAgICAgICAgIGxvZ2dlci5lcnJvcignT0FVVEhfSU5ERVhfMjczNDogb2F1dGgtaGVscGVyLm1qcyBub3QgZm91bmQnLCB7IFxuICAgICAgICAgICAgc2VhcmNoZWRQYXRoczogcG9zc2libGVQYXRocyxcbiAgICAgICAgICAgIGN3ZDogcHJvY2Vzcy5jd2QoKSxcbiAgICAgICAgICAgIGRpcm5hbWU6IF9fZGlybmFtZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT0FVVEhfSEVMUEVSX05PVF9GT1VORDogb2F1dGgtaGVscGVyLm1qcyBub3QgZm91bmQgYXQgbGluZSAyNzM0LiBTZWFyY2hlZDogJHtwb3NzaWJsZVBhdGhzLmpvaW4oJywgJyl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnT0FVVEhfU1RFUF82OiBTcGF3bmluZyBoZWxwZXIgcHJvY2VzcycsIHsgXG4gICAgICAgICAgaGVscGVyUGF0aCxcbiAgICAgICAgICBjbGllbnRJZDogY2xpZW50SWQ/LnN1YnN0cmluZygwLCA4KSArICcuLi4nLFxuICAgICAgICAgIGRldmljZUNvZGU6IGRldmljZVJlc3BvbnNlLmRldmljZV9jb2RlLnN1YnN0cmluZygwLCA4KSArICcuLi4nXG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgLy8gU3Bhd24gdGhlIGhlbHBlciBhcyBhIGRldGFjaGVkIHByb2Nlc3NcbiAgICAgICAgY29uc3QgaGVscGVyID0gc3Bhd24oJ25vZGUnLCBbXG4gICAgICAgICAgaGVscGVyUGF0aCxcbiAgICAgICAgICBkZXZpY2VSZXNwb25zZS5kZXZpY2VfY29kZSxcbiAgICAgICAgICAoZGV2aWNlUmVzcG9uc2UuaW50ZXJ2YWwgfHwgNSkudG9TdHJpbmcoKSxcbiAgICAgICAgICBkZXZpY2VSZXNwb25zZS5leHBpcmVzX2luLnRvU3RyaW5nKCksXG4gICAgICAgICAgY2xpZW50SWRcbiAgICAgICAgXSwge1xuICAgICAgICAgIGRldGFjaGVkOiB0cnVlLFxuICAgICAgICAgIHN0ZGlvOiAnaWdub3JlJywgLy8gQ29tcGxldGVseSBkZXRhY2ggSS9PXG4gICAgICAgICAgd2luZG93c0hpZGU6IHRydWUgLy8gSGlkZSBjb25zb2xlIG9uIFdpbmRvd3NcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICAvLyBBbGxvdyB0aGUgcGFyZW50IHByb2Nlc3MgdG8gZXhpdCB3aXRob3V0IHdhaXRpbmcgZm9yIHRoZSBoZWxwZXJcbiAgICAgICAgaGVscGVyLnVucmVmKCk7XG4gICAgICAgIFxuICAgICAgICBsb2dnZXIuZGVidWcoJ09BVVRIX1NURVBfNzogSGVscGVyIHByb2Nlc3Mgc3Bhd25lZCBzdWNjZXNzZnVsbHknLCB7IHBpZDogaGVscGVyLnBpZCB9KTtcbiAgICAgICAgXG4gICAgICAgIGxvZ2dlci5pbmZvKCdPQXV0aCBoZWxwZXIgcHJvY2VzcyBzcGF3bmVkJywge1xuICAgICAgICAgIHBpZDogaGVscGVyLnBpZCxcbiAgICAgICAgICBleHBpcmVzSW46IGRldmljZVJlc3BvbnNlLmV4cGlyZXNfaW4sXG4gICAgICAgICAgdXNlckNvZGU6IGRldmljZVJlc3BvbnNlLnVzZXJfY29kZVxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIC8vIFdyaXRlIHN0YXRlIGZpbGUgZm9yIG1vbml0b3JpbmdcbiAgICAgICAgY29uc3Qgc3RhdGVGaWxlID0gcGF0aC5qb2luKGhvbWVkaXIoKSwgJy5kb2xsaG91c2UnLCAnLmF1dGgnLCAnb2F1dGgtaGVscGVyLXN0YXRlLmpzb24nKTtcbiAgICAgICAgY29uc3Qgc3RhdGVEaXIgPSBwYXRoLmRpcm5hbWUoc3RhdGVGaWxlKTtcbiAgICAgICAgYXdhaXQgZnMubWtkaXIoc3RhdGVEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICBcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB7XG4gICAgICAgICAgcGlkOiBoZWxwZXIucGlkLFxuICAgICAgICAgIGRldmljZUNvZGU6IGRldmljZVJlc3BvbnNlLmRldmljZV9jb2RlLFxuICAgICAgICAgIHVzZXJDb2RlOiBkZXZpY2VSZXNwb25zZS51c2VyX2NvZGUsXG4gICAgICAgICAgc3RhcnRUaW1lOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgZXhwaXJlc0F0OiBuZXcgRGF0ZShEYXRlLm5vdygpICsgZGV2aWNlUmVzcG9uc2UuZXhwaXJlc19pbiAqIDEwMDApLnRvSVNPU3RyaW5nKClcbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShzdGF0ZUZpbGUsIEpTT04uc3RyaW5naWZ5KHN0YXRlLCBudWxsLCAyKSk7XG4gICAgICAgIFxuICAgICAgfSBjYXRjaCAoc3Bhd25FcnJvcikge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ09BVVRIX0lOREVYXzI3NzQ6IEZhaWxlZCB0byBzcGF3biBPQXV0aCBoZWxwZXIgcHJvY2VzcycsIHsgXG4gICAgICAgICAgZXJyb3I6IHNwYXduRXJyb3IsXG4gICAgICAgICAgaGVscGVyUGF0aCxcbiAgICAgICAgICBjbGllbnRJZDogY2xpZW50SWQ/LnN1YnN0cmluZygwLCA4KSArICcuLi4nLFxuICAgICAgICAgIGVycm9yQ29kZTogKHNwYXduRXJyb3IgYXMgYW55KT8uY29kZSxcbiAgICAgICAgICBzeXNjYWxsOiAoc3Bhd25FcnJvciBhcyBhbnkpPy5zeXNjYWxsXG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgLy8gUHJvdmlkZSBzcGVjaWZpYyBlcnJvciBtZXNzYWdlIGJhc2VkIG9uIGVycm9yIHR5cGVcbiAgICAgICAgbGV0IGVycm9yRGV0YWlsID0gJyc7XG4gICAgICAgIGlmIChzcGF3bkVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICBpZiAoc3Bhd25FcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdFTk9FTlQnKSkge1xuICAgICAgICAgICAgZXJyb3JEZXRhaWwgPSBgT0FVVEhfSEVMUEVSX1NQQVdOX0VOT0VOVDogTm9kZS5qcyBleGVjdXRhYmxlIG5vdCBmb3VuZCBvciBoZWxwZXIgc2NyaXB0IG1pc3NpbmcgYXQgJHtoZWxwZXJQYXRofWA7XG4gICAgICAgICAgfSBlbHNlIGlmIChzcGF3bkVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJ0VBQ0NFUycpKSB7XG4gICAgICAgICAgICBlcnJvckRldGFpbCA9IGBPQVVUSF9IRUxQRVJfU1BBV05fRUFDQ0VTOiBQZXJtaXNzaW9uIGRlbmllZCB3aGVuIHRyeWluZyB0byBleGVjdXRlICR7aGVscGVyUGF0aH1gO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3Bhd25FcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdFMkJJRycpKSB7XG4gICAgICAgICAgICBlcnJvckRldGFpbCA9IGBPQVVUSF9IRUxQRVJfU1BBV05fRTJCSUc6IEFyZ3VtZW50IGxpc3QgdG9vIGxvbmcgZm9yIGhlbHBlciBwcm9jZXNzYDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyb3JEZXRhaWwgPSBgT0FVVEhfSEVMUEVSX1NQQVdOX0ZBSUxFRDogQ291bGQgbm90IHN0YXJ0IGJhY2tncm91bmQgYXV0aGVudGljYXRpb24gcHJvY2VzcyBhdCBsaW5lIDI3NzQgLSAke3NwYXduRXJyb3IubWVzc2FnZX1gO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlcnJvckRldGFpbCA9IGBPQVVUSF9IRUxQRVJfU1BBV05fVU5LTk9XTjogVW5rbm93biBzcGF3biBlcnJvciBhdCBsaW5lIDI3NzRgO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBGYWxsIGJhY2sgdG8gaW5mb3JtaW5nIHVzZXIgYWJvdXQgdGhlIGlzc3VlXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94pqg77iPICoqT0F1dGggSGVscGVyIExhdW5jaCBGYWlsZWQqKlxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYCR7ZXJyb3JEZXRhaWx9XFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBgKipBbHRlcm5hdGl2ZSBPcHRpb25zOioqXFxuYCArXG4gICAgICAgICAgICAgICAgICBgMS4gVHJ5IGFnYWluOiBSdW4gc2V0dXBfZ2l0aHViX2F1dGggYWdhaW5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGAyLiBVc2UgR2l0SHViIENMSTogZ2ggYXV0aCBsb2dpbiAtLXdlYlxcbmAgK1xuICAgICAgICAgICAgICAgICAgYDMuIFNldCB0b2tlbiBtYW51YWxseTogZXhwb3J0IEdJVEhVQl9UT0tFTj15b3VyX3Rva2VuYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFJldHVybiBpbnN0cnVjdGlvbnMgdG8gdXNlclxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiB0aGlzLmdpdGh1YkF1dGhNYW5hZ2VyLmZvcm1hdEF1dGhJbnN0cnVjdGlvbnMoZGV2aWNlUmVzcG9uc2UpICtcbiAgICAgICAgICAgICAgICAnXFxuXFxu8J+TnSAqKk5vdGUqKjogQXV0aGVudGljYXRpb24gd2lsbCBjb21wbGV0ZSBhdXRvbWF0aWNhbGx5IG9uY2UgeW91IGF1dGhvcml6ZS4gJyArXG4gICAgICAgICAgICAgICAgJ1lvdXIgdG9rZW4gd2lsbCBiZSBzdG9yZWQgc2VjdXJlbHkgZm9yIGZ1dHVyZSB1c2UhJ1xuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdPQVVUSF9JTkRFWF8yODA2OiBNYWluIGNhdGNoIGJsb2NrIC0gYXV0aGVudGljYXRpb24gc2V0dXAgZmFpbGVkJywgeyBcbiAgICAgICAgZXJyb3IsXG4gICAgICAgIGVycm9yVHlwZTogZXJyb3I/LmNvbnN0cnVjdG9yPy5uYW1lLFxuICAgICAgICBlcnJvck1lc3NhZ2U6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24nXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgLy8gSWYgZXJyb3IgYWxyZWFkeSBoYXMgb3VyIGVycm9yIGNvZGUsIHBhc3MgaXQgdGhyb3VnaFxuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcic7XG4gICAgICBjb25zdCBoYXNFcnJvckNvZGUgPSBlcnJvck1lc3NhZ2UuaW5jbHVkZXMoJ09BVVRIXycpO1xuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCAqKkF1dGhlbnRpY2F0aW9uIFNldHVwIEZhaWxlZCoqXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgYCR7aGFzRXJyb3JDb2RlID8gZXJyb3JNZXNzYWdlIDogYE9BVVRIX0lOREVYXzI4MDY6IFVuYWJsZSB0byBzdGFydCBHaXRIdWIgYXV0aGVudGljYXRpb24gLSAke2Vycm9yTWVzc2FnZX1gfVxcblxcbmAgK1xuICAgICAgICAgICAgICAgIGAkeyFlcnJvck1lc3NhZ2UuaW5jbHVkZXMoJ09BVVRIX05FVFdPUksnKSA/ICdQbGVhc2UgY2hlY2sgeW91ciBpbnRlcm5ldCBjb25uZWN0aW9uIGFuZCB0cnkgYWdhaW4uJyA6ICcnfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG4gIFxuICBhc3luYyBjaGVja0dpdEh1YkF1dGgoKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEZpcnN0IGNoZWNrIGZvciBPQXV0aCBoZWxwZXIgcHJvY2VzcyBoZWFsdGhcbiAgICAgIGNvbnN0IGhlbHBlckhlYWx0aCA9IGF3YWl0IHRoaXMuY2hlY2tPQXV0aEhlbHBlckhlYWx0aCgpO1xuICAgICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgdGhpcy5naXRodWJBdXRoTWFuYWdlci5nZXRBdXRoU3RhdHVzKCk7XG4gICAgICBcbiAgICAgIGlmIChzdGF0dXMuaXNBdXRoZW50aWNhdGVkKSB7XG4gICAgICAgIC8vIENsZWFuIHVwIGhlbHBlciBzdGF0ZSBmaWxlIGlmIGF1dGggaXMgc3VjY2Vzc2Z1bFxuICAgICAgICBpZiAoaGVscGVySGVhbHRoLmV4aXN0cykge1xuICAgICAgICAgIGNvbnN0IHN0YXRlRmlsZSA9IHBhdGguam9pbihob21lZGlyKCksICcuZG9sbGhvdXNlJywgJy5hdXRoJywgJ29hdXRoLWhlbHBlci1zdGF0ZS5qc29uJyk7XG4gICAgICAgICAgYXdhaXQgZnMudW5saW5rKHN0YXRlRmlsZSkuY2F0Y2goKCkgPT4ge30pO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKchSAqKkdpdEh1YiBDb25uZWN0ZWQqKlxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYPCfkaQgKipVc2VybmFtZToqKiAke3N0YXR1cy51c2VybmFtZX1cXG5gICtcbiAgICAgICAgICAgICAgICAgIGDwn5SRICoqUGVybWlzc2lvbnM6KiogJHtzdGF0dXMuc2NvcGVzPy5qb2luKCcsICcpIHx8ICdiYXNpYyBhY2Nlc3MnfVxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYCoqQXZhaWxhYmxlIEFjdGlvbnM6KipcXG5gICtcbiAgICAgICAgICAgICAgICAgIGDinIUgQnJvd3NlIGNvbGxlY3Rpb25cXG5gICtcbiAgICAgICAgICAgICAgICAgIGDinIUgSW5zdGFsbCBjb250ZW50XFxuYCArXG4gICAgICAgICAgICAgICAgICBg4pyFIFN1Ym1pdCBjb250ZW50XFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBgRXZlcnl0aGluZyBpcyB3b3JraW5nIHByb3Blcmx5IWBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChoZWxwZXJIZWFsdGguaXNBY3RpdmUpIHtcbiAgICAgICAgLy8gT0F1dGggaGVscGVyIGlzIGFjdGl2ZWx5IHBvbGxpbmdcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3ij7MgKipHaXRIdWIgQXV0aGVudGljYXRpb24gSW4gUHJvZ3Jlc3MqKlxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYPCflJEgKipVc2VyIENvZGU6KiogJHtoZWxwZXJIZWFsdGgudXNlckNvZGV9XFxuYCArXG4gICAgICAgICAgICAgICAgICBg4o+x77iPICoqVGltZSBSZW1haW5pbmc6KiogJHtNYXRoLmZsb29yKGhlbHBlckhlYWx0aC50aW1lUmVtYWluaW5nIC8gNjApfW0gJHtoZWxwZXJIZWFsdGgudGltZVJlbWFpbmluZyAlIDYwfXNcXG5gICtcbiAgICAgICAgICAgICAgICAgIGDwn5SEICoqUHJvY2VzcyBTdGF0dXM6KiogJHtoZWxwZXJIZWFsdGgucHJvY2Vzc0FsaXZlID8gJ+KchSBSdW5uaW5nJyA6ICfimqDvuI8gTWF5IGhhdmUgc3RvcHBlZCd9XFxuYCArXG4gICAgICAgICAgICAgICAgICBg8J+TgSAqKkxvZyBBdmFpbGFibGU6KiogJHtoZWxwZXJIZWFsdGguaGFzTG9nID8gJ1llcycgOiAnTm8nfVxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYCoqV2FpdGluZyBmb3IgeW91IHRvOioqXFxuYCArXG4gICAgICAgICAgICAgICAgICBgMS4gR28gdG86IGh0dHBzOi8vZ2l0aHViLmNvbS9sb2dpbi9kZXZpY2VcXG5gICtcbiAgICAgICAgICAgICAgICAgIGAyLiBFbnRlciBjb2RlOiAqKiR7aGVscGVySGVhbHRoLnVzZXJDb2RlfSoqXFxuYCArXG4gICAgICAgICAgICAgICAgICBgMy4gQXV0aG9yaXplIHRoZSBhcHBsaWNhdGlvblxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYFRoZSBhdXRoZW50aWNhdGlvbiB3aWxsIGNvbXBsZXRlIGF1dG9tYXRpY2FsbHkgb25jZSB5b3UgYXV0aG9yaXplLlxcbmAgK1xuICAgICAgICAgICAgICAgICAgYFJ1biB0aGlzIGNvbW1hbmQgYWdhaW4gdG8gY2hlY2sgc3RhdHVzLmBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChoZWxwZXJIZWFsdGguZXhpc3RzICYmIGhlbHBlckhlYWx0aC5leHBpcmVkKSB7XG4gICAgICAgIC8vIEhlbHBlciBzdGF0ZSBleGlzdHMgYnV0IGV4cGlyZWRcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3ij7HvuI8gKipBdXRoZW50aWNhdGlvbiBFeHBpcmVkKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGBUaGUgR2l0SHViIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QgaGFzIGV4cGlyZWQuXFxuYCArXG4gICAgICAgICAgICAgICAgICBgVXNlciBjb2RlOiAke2hlbHBlckhlYWx0aC51c2VyQ29kZX0gKGV4cGlyZWQpXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBgKipUbyB0cnkgYWdhaW46KipcXG5gICtcbiAgICAgICAgICAgICAgICAgIGBSdW46IFxcYHNldHVwX2dpdGh1Yl9hdXRoXFxgIHRvIGdldCBhIG5ldyBjb2RlXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBgJHtoZWxwZXJIZWFsdGguZXJyb3JMb2cgPyBgKipFcnJvciBMb2c6KipcXG5cXGBcXGBcXGBcXG4ke2hlbHBlckhlYWx0aC5lcnJvckxvZ31cXG5cXGBcXGBcXGBcXG5gIDogJyd9YFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKHN0YXR1cy5oYXNUb2tlbikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKaoO+4jyAqKkdpdEh1YiBUb2tlbiBJbnZhbGlkKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGBBIEdpdEh1YiB0b2tlbiB3YXMgZm91bmQgYnV0IGl0IGFwcGVhcnMgdG8gYmUgaW52YWxpZCBvciBleHBpcmVkLlxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYCoqVG8gZml4IHRoaXM6KipcXG5gICtcbiAgICAgICAgICAgICAgICAgIGAxLiBTYXkgXCJzZXQgdXAgR2l0SHViXCIgdG8gYXV0aGVudGljYXRlIGFnYWluXFxuYCArXG4gICAgICAgICAgICAgICAgICBgMi4gT3IgY2hlY2sgeW91ciBHSVRIVUJfVE9LRU4gZW52aXJvbm1lbnQgdmFyaWFibGVcXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGBOb3RlOiBCcm93c2UgYW5kIGluc3RhbGwgc3RpbGwgd29yayB3aXRob3V0IGF1dGhlbnRpY2F0aW9uIWBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3wn5SSICoqTm90IENvbm5lY3RlZCB0byBHaXRIdWIqKlxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYFlvdSdyZSBub3QgY3VycmVudGx5IGF1dGhlbnRpY2F0ZWQgd2l0aCBHaXRIdWIuXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBgKipXaGF0IHdvcmtzIHdpdGhvdXQgYXV0aDoqKlxcbmAgK1xuICAgICAgICAgICAgICAgICAgYOKchSBCcm93c2UgdGhlIHB1YmxpYyBjb2xsZWN0aW9uXFxuYCArXG4gICAgICAgICAgICAgICAgICBg4pyFIEluc3RhbGwgY29tbXVuaXR5IGNvbnRlbnRcXG5gICtcbiAgICAgICAgICAgICAgICAgIGDinYwgU3VibWl0IHlvdXIgb3duIGNvbnRlbnQgKHJlcXVpcmVzIGF1dGgpXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBgVG8gY29ubmVjdCwganVzdCBzYXkgXCJzZXQgdXAgR2l0SHViXCIgb3IgXCJjb25uZWN0IHRvIEdpdEh1YlwiYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGNoZWNrIEdpdEh1YiBhdXRoJywgeyBlcnJvciB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MICoqVW5hYmxlIHRvIENoZWNrIEF1dGhlbnRpY2F0aW9uKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgICBgRXJyb3I6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgXG4gIC8vIFB1YmxpYyBtZXRob2QgZm9yIG9hdXRoX2hlbHBlcl9zdGF0dXMgdG9vbFxuICBhc3luYyBnZXRPQXV0aEhlbHBlclN0YXR1cyh2ZXJib3NlOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgaGVhbHRoID0gYXdhaXQgdGhpcy5jaGVja09BdXRoSGVscGVySGVhbHRoKCk7XG4gICAgICBjb25zdCBzdGF0ZUZpbGUgPSBwYXRoLmpvaW4oaG9tZWRpcigpLCAnLmRvbGxob3VzZScsICcuYXV0aCcsICdvYXV0aC1oZWxwZXItc3RhdGUuanNvbicpO1xuICAgICAgY29uc3QgbG9nRmlsZSA9IHBhdGguam9pbihob21lZGlyKCksICcuZG9sbGhvdXNlJywgJ29hdXRoLWhlbHBlci5sb2cnKTtcbiAgICAgIGNvbnN0IHBpZEZpbGUgPSBwYXRoLmpvaW4oaG9tZWRpcigpLCAnLmRvbGxob3VzZScsICcuYXV0aCcsICdvYXV0aC1oZWxwZXIucGlkJyk7XG4gICAgICBcbiAgICAgIGxldCBzdGF0dXNUZXh0ID0gYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl98J+TiiAqKk9BdXRoIEhlbHBlciBQcm9jZXNzIERpYWdub3N0aWNzKipcXG5cXG5gO1xuICAgICAgXG4gICAgICAvLyBCYXNpYyBzdGF0dXNcbiAgICAgIGlmICghaGVhbHRoLmV4aXN0cykge1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAqKlN0YXR1czoqKiBObyBPQXV0aCBwcm9jZXNzIGRldGVjdGVkXFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgKipTdGF0ZSBGaWxlOioqIE5vdCBmb3VuZFxcblxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYE5vIGFjdGl2ZSBhdXRoZW50aWNhdGlvbiBwcm9jZXNzLiBSdW4gXFxgc2V0dXBfZ2l0aHViX2F1dGhcXGAgdG8gc3RhcnQgb25lLlxcbmA7XG4gICAgICB9IGVsc2UgaWYgKGhlYWx0aC5pc0FjdGl2ZSkge1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAqKlN0YXR1czoqKiDwn5+iIEFDVElWRSAtIEF1dGhlbnRpY2F0aW9uIGluIHByb2dyZXNzXFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgKipVc2VyIENvZGU6KiogJHtoZWFsdGgudXNlckNvZGV9XFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgKipQcm9jZXNzIElEOioqICR7aGVhbHRoLnBpZH1cXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAqKlByb2Nlc3MgQWxpdmU6KiogJHtoZWFsdGgucHJvY2Vzc0FsaXZlID8gJ+KchSBZZXMnIDogJ+KdjCBObyAobWF5IGhhdmUgY3Jhc2hlZCknfVxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYCoqU3RhcnRlZDoqKiAke2hlYWx0aC5zdGFydFRpbWU/LnRvTG9jYWxlU3RyaW5nKCl9XFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgKipFeHBpcmVzOioqICR7aGVhbHRoLmV4cGlyZXNBdD8udG9Mb2NhbGVTdHJpbmcoKX1cXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAqKlRpbWUgUmVtYWluaW5nOioqICR7TWF0aC5mbG9vcihoZWFsdGgudGltZVJlbWFpbmluZyAvIDYwKX1tICR7aGVhbHRoLnRpbWVSZW1haW5pbmcgJSA2MH1zXFxuXFxuYDtcbiAgICAgICAgXG4gICAgICAgIGlmICghaGVhbHRoLnByb2Nlc3NBbGl2ZSkge1xuICAgICAgICAgIHN0YXR1c1RleHQgKz0gYOKaoO+4jyAqKldBUk5JTkc6KiogUHJvY2VzcyBhcHBlYXJzIHRvIGhhdmUgc3RvcHBlZCFcXG5gO1xuICAgICAgICAgIHN0YXR1c1RleHQgKz0gYFRoZSBoZWxwZXIgcHJvY2VzcyAoUElEICR7aGVhbHRoLnBpZH0pIGlzIG5vdCByZXNwb25kaW5nLlxcbmA7XG4gICAgICAgICAgc3RhdHVzVGV4dCArPSBgWW91IG1heSBuZWVkIHRvIHJ1biBcXGBzZXR1cF9naXRodWJfYXV0aFxcYCBhZ2Fpbi5cXG5cXG5gO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGhlYWx0aC5leHBpcmVkKSB7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYCoqU3RhdHVzOioqIPCflLQgRVhQSVJFRFxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYCoqVXNlciBDb2RlOioqICR7aGVhbHRoLnVzZXJDb2RlfSAoZXhwaXJlZClcXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAqKlByb2Nlc3MgSUQ6KiogJHtoZWFsdGgucGlkfVxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYCoqU3RhcnRlZDoqKiAke2hlYWx0aC5zdGFydFRpbWU/LnRvTG9jYWxlU3RyaW5nKCl9XFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgKipFeHBpcmVkOioqICR7aGVhbHRoLmV4cGlyZXNBdD8udG9Mb2NhbGVTdHJpbmcoKX1cXG5cXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGBUaGUgYXV0aGVudGljYXRpb24gcmVxdWVzdCBoYXMgZXhwaXJlZC4gUnVuIFxcYHNldHVwX2dpdGh1Yl9hdXRoXFxgIHRvIHRyeSBhZ2Fpbi5cXG5cXG5gO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBGaWxlIGxvY2F0aW9uc1xuICAgICAgc3RhdHVzVGV4dCArPSBgKirwn5OBIEZpbGUgTG9jYXRpb25zOioqXFxuYDtcbiAgICAgIHN0YXR1c1RleHQgKz0gYOKAoiBTdGF0ZTogJHtzdGF0ZUZpbGV9XFxuYDtcbiAgICAgIHN0YXR1c1RleHQgKz0gYOKAoiBMb2c6ICR7bG9nRmlsZX0gJHtoZWFsdGguaGFzTG9nID8gJyhleGlzdHMpJyA6ICcobm90IGZvdW5kKSd9XFxuYDtcbiAgICAgIHN0YXR1c1RleHQgKz0gYOKAoiBQSUQ6ICR7cGlkRmlsZX1cXG5cXG5gO1xuICAgICAgXG4gICAgICAvLyBFcnJvciBsb2cgaWYgYXZhaWxhYmxlXG4gICAgICBpZiAoaGVhbHRoLmVycm9yTG9nKSB7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYCoq4pqg77iPIFJlY2VudCBFcnJvcnM6KipcXG5cXGBcXGBcXGBcXG4ke2hlYWx0aC5lcnJvckxvZ31cXG5cXGBcXGBcXGBcXG5cXG5gO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBWZXJib3NlIGxvZyBvdXRwdXRcbiAgICAgIGlmICh2ZXJib3NlICYmIGhlYWx0aC5oYXNMb2cpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBmdWxsTG9nID0gYXdhaXQgZnMucmVhZEZpbGUobG9nRmlsZSwgJ3V0Zi04Jyk7XG4gICAgICAgICAgY29uc3QgbGluZXMgPSBmdWxsTG9nLnNwbGl0KCdcXG4nKS5maWx0ZXIobGluZSA9PiBsaW5lLnRyaW0oKSk7XG4gICAgICAgICAgY29uc3QgcmVjZW50TGluZXMgPSBsaW5lcy5zbGljZSgtMjApOyAvLyBMYXN0IDIwIGxpbmVzXG4gICAgICAgICAgXG4gICAgICAgICAgc3RhdHVzVGV4dCArPSBgKirwn5OcIFJlY2VudCBMb2cgT3V0cHV0IChsYXN0IDIwIGxpbmVzKToqKlxcblxcYFxcYFxcYFxcbmA7XG4gICAgICAgICAgc3RhdHVzVGV4dCArPSByZWNlbnRMaW5lcy5qb2luKCdcXG4nKTtcbiAgICAgICAgICBzdGF0dXNUZXh0ICs9IGBcXG5cXGBcXGBcXGBcXG5cXG5gO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHN0YXR1c1RleHQgKz0gYCoq8J+TnCBMb2c6KiogVW5hYmxlIHRvIHJlYWQgbG9nIGZpbGVcXG5cXG5gO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFRyb3VibGVzaG9vdGluZyB0aXBzXG4gICAgICBpZiAoaGVhbHRoLmV4aXN0cyAmJiAhaGVhbHRoLnByb2Nlc3NBbGl2ZSAmJiAhaGVhbHRoLmV4cGlyZWQpIHtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgKirwn5SnIFRyb3VibGVzaG9vdGluZyBUaXBzOioqXFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgMS4gVGhlIGhlbHBlciBwcm9jZXNzIG1heSBoYXZlIGNyYXNoZWRcXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAyLiBDaGVjayB0aGUgbG9nIGZpbGUgZm9yIGVycm9yczogJHtsb2dGaWxlfVxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYDMuIFRyeSBydW5uaW5nIFxcYHNldHVwX2dpdGh1Yl9hdXRoXFxgIGFnYWluXFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgNC4gRW5zdXJlIERPTExIT1VTRV9HSVRIVUJfQ0xJRU5UX0lEIGlzIHNldFxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYDUuIENoZWNrIHlvdXIgaW50ZXJuZXQgY29ubmVjdGlvblxcbmA7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIE1hbnVhbCBjbGVhbnVwIGluc3RydWN0aW9uc1xuICAgICAgaWYgKGhlYWx0aC5leGlzdHMgJiYgKGhlYWx0aC5leHBpcmVkIHx8ICFoZWFsdGgucHJvY2Vzc0FsaXZlKSkge1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGBcXG4qKvCfp7kgTWFudWFsIENsZWFudXAgKGlmIG5lZWRlZCk6KipcXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGBcXGBcXGBcXGBiYXNoXFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgcm0gXCIke3N0YXRlRmlsZX1cIlxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYHJtIFwiJHtsb2dGaWxlfVwiXFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgcm0gXCIke3BpZEZpbGV9XCJcXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGBcXGBcXGBcXGBcXG5gO1xuICAgICAgfVxuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IHN0YXR1c1RleHRcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgICBcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gZ2V0IE9BdXRoIGhlbHBlciBzdGF0dXMnLCB7IGVycm9yIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgKipGYWlsZWQgdG8gR2V0IE9BdXRoIEhlbHBlciBTdGF0dXMqKlxcblxcbmAgK1xuICAgICAgICAgICAgICAgIGBFcnJvcjogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBcbiAgLy8gSGVscGVyIG1ldGhvZCB0byBjaGVjayBPQXV0aCBoZWxwZXIgcHJvY2VzcyBoZWFsdGhcbiAgcHJpdmF0ZSBhc3luYyBjaGVja09BdXRoSGVscGVySGVhbHRoKCkge1xuICAgIGNvbnN0IHN0YXRlRmlsZSA9IHBhdGguam9pbihob21lZGlyKCksICcuZG9sbGhvdXNlJywgJy5hdXRoJywgJ29hdXRoLWhlbHBlci1zdGF0ZS5qc29uJyk7XG4gICAgY29uc3QgbG9nRmlsZSA9IHBhdGguam9pbihob21lZGlyKCksICcuZG9sbGhvdXNlJywgJ29hdXRoLWhlbHBlci5sb2cnKTtcbiAgICBcbiAgICBjb25zdCBoZWFsdGggPSB7XG4gICAgICBleGlzdHM6IGZhbHNlLFxuICAgICAgaXNBY3RpdmU6IGZhbHNlLFxuICAgICAgZXhwaXJlZDogZmFsc2UsXG4gICAgICBwcm9jZXNzQWxpdmU6IGZhbHNlLFxuICAgICAgaGFzTG9nOiBmYWxzZSxcbiAgICAgIHVzZXJDb2RlOiAnJyxcbiAgICAgIHRpbWVSZW1haW5pbmc6IDAsXG4gICAgICBwaWQ6IDAsXG4gICAgICBzdGFydFRpbWU6IG51bGwgYXMgRGF0ZSB8IG51bGwsXG4gICAgICBleHBpcmVzQXQ6IG51bGwgYXMgRGF0ZSB8IG51bGwsXG4gICAgICBlcnJvckxvZzogJydcbiAgICB9O1xuICAgIFxuICAgIHRyeSB7XG4gICAgICAvLyBDaGVjayBpZiBzdGF0ZSBmaWxlIGV4aXN0c1xuICAgICAgY29uc3Qgc3RhdGVEYXRhID0gYXdhaXQgZnMucmVhZEZpbGUoc3RhdGVGaWxlLCAndXRmLTgnKTtcbiAgICAgIGNvbnN0IHN0YXRlID0gSlNPTi5wYXJzZShzdGF0ZURhdGEpO1xuICAgICAgaGVhbHRoLmV4aXN0cyA9IHRydWU7XG4gICAgICBoZWFsdGgucGlkID0gc3RhdGUucGlkO1xuICAgICAgaGVhbHRoLnVzZXJDb2RlID0gc3RhdGUudXNlckNvZGU7XG4gICAgICBoZWFsdGguc3RhcnRUaW1lID0gbmV3IERhdGUoc3RhdGUuc3RhcnRUaW1lKTtcbiAgICAgIGhlYWx0aC5leHBpcmVzQXQgPSBuZXcgRGF0ZShzdGF0ZS5leHBpcmVzQXQpO1xuICAgICAgXG4gICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgICAgaWYgKGhlYWx0aC5leHBpcmVzQXQgPiBub3cpIHtcbiAgICAgICAgaGVhbHRoLmlzQWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgaGVhbHRoLnRpbWVSZW1haW5pbmcgPSBNYXRoLmNlaWwoKGhlYWx0aC5leHBpcmVzQXQuZ2V0VGltZSgpIC0gbm93LmdldFRpbWUoKSkgLyAxMDAwKTtcbiAgICAgICAgXG4gICAgICAgIC8vIENoZWNrIGlmIHByb2Nlc3MgaXMgc3RpbGwgYWxpdmUgKFVuaXgvTGludXgvTWFjKVxuICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSAhPT0gJ3dpbjMyJykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBTZW5kIHNpZ25hbCAwIHRvIGNoZWNrIGlmIHByb2Nlc3MgZXhpc3RzXG4gICAgICAgICAgICBwcm9jZXNzLmtpbGwoaGVhbHRoLnBpZCwgMCk7XG4gICAgICAgICAgICBoZWFsdGgucHJvY2Vzc0FsaXZlID0gdHJ1ZTtcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIGhlYWx0aC5wcm9jZXNzQWxpdmUgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gT24gV2luZG93cywgd2UgY2FuJ3QgZWFzaWx5IGNoZWNrLCBzbyBhc3N1bWUgaXQncyBhbGl2ZSBpZiBub3QgZXhwaXJlZFxuICAgICAgICAgIGhlYWx0aC5wcm9jZXNzQWxpdmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoZWFsdGguZXhwaXJlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGZvciBsb2cgZmlsZVxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZnMuYWNjZXNzKGxvZ0ZpbGUpO1xuICAgICAgICBoZWFsdGguaGFzTG9nID0gdHJ1ZTtcbiAgICAgICAgXG4gICAgICAgIC8vIFJlYWQgbGFzdCBmZXcgbGluZXMgb2YgbG9nIGlmIHRoZXJlJ3MgYW4gZXJyb3JcbiAgICAgICAgaWYgKCFoZWFsdGgucHJvY2Vzc0FsaXZlIHx8IGhlYWx0aC5leHBpcmVkKSB7XG4gICAgICAgICAgY29uc3QgbG9nQ29udGVudCA9IGF3YWl0IGZzLnJlYWRGaWxlKGxvZ0ZpbGUsICd1dGYtOCcpO1xuICAgICAgICAgIGNvbnN0IGxpbmVzID0gbG9nQ29udGVudC5zcGxpdCgnXFxuJyk7XG4gICAgICAgICAgLy8gR2V0IGxhc3QgMTAgbGluZXMgdGhhdCBjb250YWluIGVycm9ycyBvciBpbXBvcnRhbnQgaW5mb1xuICAgICAgICAgIGNvbnN0IGltcG9ydGFudExpbmVzID0gbGluZXMuZmlsdGVyKGxpbmUgPT4gXG4gICAgICAgICAgICBsaW5lLmluY2x1ZGVzKCdlcnJvcicpIHx8IFxuICAgICAgICAgICAgbGluZS5pbmNsdWRlcygnRXJyb3InKSB8fCBcbiAgICAgICAgICAgIGxpbmUuaW5jbHVkZXMoJ2ZhaWxlZCcpIHx8XG4gICAgICAgICAgICBsaW5lLmluY2x1ZGVzKCdGYWlsZWQnKSB8fFxuICAgICAgICAgICAgbGluZS5pbmNsdWRlcygn4p2MJykgfHxcbiAgICAgICAgICAgIGxpbmUuaW5jbHVkZXMoJ+KPse+4jycpXG4gICAgICAgICAgKS5zbGljZSgtMTApO1xuICAgICAgICAgIFxuICAgICAgICAgIGlmIChpbXBvcnRhbnRMaW5lcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBoZWFsdGguZXJyb3JMb2cgPSBpbXBvcnRhbnRMaW5lcy5qb2luKCdcXG4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBMb2cgZmlsZSBkb2Vzbid0IGV4aXN0XG4gICAgICB9XG4gICAgICBcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gU3RhdGUgZmlsZSBkb2Vzbid0IGV4aXN0IG9yIGlzIGludmFsaWRcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmIGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJ0VOT0VOVCcpKSB7XG4gICAgICAgIC8vIEZpbGUgZG9lc24ndCBleGlzdCwgdGhhdCdzIG9rXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIuZGVidWcoJ0Vycm9yIHJlYWRpbmcgT0F1dGggaGVscGVyIHN0YXRlJywgeyBlcnJvciB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIGhlYWx0aDtcbiAgfVxuICBcbiAgYXN5bmMgY2xlYXJHaXRIdWJBdXRoKCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmdpdGh1YkF1dGhNYW5hZ2VyLmNsZWFyQXV0aGVudGljYXRpb24oKTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inIUgKipHaXRIdWIgRGlzY29ubmVjdGVkKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgICBgWW91ciBHaXRIdWIgY29ubmVjdGlvbiBoYXMgYmVlbiBjbGVhcmVkLlxcblxcbmAgK1xuICAgICAgICAgICAgICAgIGAqKldoYXQgc3RpbGwgd29ya3M6KipcXG5gICtcbiAgICAgICAgICAgICAgICBg4pyFIEJyb3dzZSB0aGUgcHVibGljIGNvbGxlY3Rpb25cXG5gICtcbiAgICAgICAgICAgICAgICBg4pyFIEluc3RhbGwgY29tbXVuaXR5IGNvbnRlbnRcXG5gICtcbiAgICAgICAgICAgICAgICBg4p2MIFN1Ym1pdCBjb250ZW50IChyZXF1aXJlcyByZWNvbm5lY3Rpb24pXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgYFRvIHJlY29ubmVjdCBsYXRlciwganVzdCBzYXkgXCJjb25uZWN0IHRvIEdpdEh1YlwiXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgYOKaoO+4jyAqKk5vdGU6KiogVG8gZnVsbHkgcmVtb3ZlIGF1dGhlbnRpY2F0aW9uLCBhbHNvIHVuc2V0IHRoZSBHSVRIVUJfVE9LRU4gZW52aXJvbm1lbnQgdmFyaWFibGUuYFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gY2xlYXIgR2l0SHViIGF1dGgnLCB7IGVycm9yIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgKipGYWlsZWQgdG8gQ2xlYXIgQXV0aGVudGljYXRpb24qKlxcblxcbmAgK1xuICAgICAgICAgICAgICAgIGBFcnJvcjogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8vIE9BdXRoIGNvbmZpZ3VyYXRpb24gbWFuYWdlbWVudFxuICBhc3luYyBjb25maWd1cmVPQXV0aChjbGllbnRfaWQ/OiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29uZmlnTWFuYWdlciA9IENvbmZpZ01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICAgIGF3YWl0IGNvbmZpZ01hbmFnZXIubG9hZENvbmZpZygpO1xuICAgICAgXG4gICAgICAvLyBJZiBubyBjbGllbnRfaWQgcHJvdmlkZWQsIHNob3cgY3VycmVudCBjb25maWd1cmF0aW9uIHN0YXR1c1xuICAgICAgaWYgKCFjbGllbnRfaWQpIHtcbiAgICAgICAgY29uc3QgY3VycmVudENsaWVudElkID0gY29uZmlnTWFuYWdlci5nZXRHaXRIdWJDbGllbnRJZCgpO1xuICAgICAgICBcbiAgICAgICAgaWYgKGN1cnJlbnRDbGllbnRJZCkge1xuICAgICAgICAgIC8vIFNob3cgZmlyc3QgMTAgY2hhcmFjdGVycyBmb3Igc2VjdXJpdHlcbiAgICAgICAgICBjb25zdCBtYXNrZWRDbGllbnRJZCA9IGN1cnJlbnRDbGllbnRJZC5zdWJzdHJpbmcoMCwgMTApICsgJy4uLic7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inIUgKipHaXRIdWIgT0F1dGggQ29uZmlndXJhdGlvbioqXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICAgIGAqKkN1cnJlbnQgU3RhdHVzOioqIENvbmZpZ3VyZWRcXG5gICtcbiAgICAgICAgICAgICAgICAgICAgYCoqQ2xpZW50IElEOioqICR7bWFza2VkQ2xpZW50SWR9XFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICAgIGBZb3VyIEdpdEh1YiBPQXV0aCBpcyByZWFkeSB0byB1c2UhIFlvdSBjYW4gbm93OlxcbmAgK1xuICAgICAgICAgICAgICAgICAgICBg4oCiIFJ1biBzZXR1cF9naXRodWJfYXV0aCB0byBjb25uZWN0XFxuYCArXG4gICAgICAgICAgICAgICAgICAgIGDigKIgU3VibWl0IGNvbnRlbnQgdG8gdGhlIGNvbGxlY3Rpb25cXG5gICtcbiAgICAgICAgICAgICAgICAgICAgYOKAoiBBY2Nlc3MgYXV0aGVudGljYXRlZCBmZWF0dXJlc1xcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgICBgVG8gdXBkYXRlIHRoZSBjb25maWd1cmF0aW9uLCBwcm92aWRlIGEgbmV3IGNsaWVudF9pZCBwYXJhbWV0ZXIuYFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94pqg77iPICoqR2l0SHViIE9BdXRoIE5vdCBDb25maWd1cmVkKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgICAgYE5vIEdpdEh1YiBPQXV0aCBjbGllbnQgSUQgaXMgY3VycmVudGx5IGNvbmZpZ3VyZWQuXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICAgIGAqKlRvIHNldCB1cCBPQXV0aDoqKlxcbmAgK1xuICAgICAgICAgICAgICAgICAgICBgMS4gQ3JlYXRlIGEgR2l0SHViIE9BdXRoIGFwcCBhdDogaHR0cHM6Ly9naXRodWIuY29tL3NldHRpbmdzL2FwcGxpY2F0aW9ucy9uZXdcXG5gICtcbiAgICAgICAgICAgICAgICAgICAgYDIuIFVzZSB0aGVzZSBzZXR0aW5nczpcXG5gICtcbiAgICAgICAgICAgICAgICAgICAgYCAgIOKAoiBIb21lcGFnZSBVUkw6IGh0dHBzOi8vZ2l0aHViLmNvbS9Eb2xsaG91c2VNQ1BcXG5gICtcbiAgICAgICAgICAgICAgICAgICAgYCAgIOKAoiBBdXRob3JpemF0aW9uIGNhbGxiYWNrIFVSTDogaHR0cDovL2xvY2FsaG9zdDozMDAwL2NhbGxiYWNrXFxuYCArXG4gICAgICAgICAgICAgICAgICAgIGAzLiBDb3B5IHlvdXIgQ2xpZW50IElEIChzdGFydHMgd2l0aCBcIk92MjNsaVwiKVxcbmAgK1xuICAgICAgICAgICAgICAgICAgICBgNC4gUnVuOiBjb25maWd1cmVfb2F1dGggd2l0aCB5b3VyIGNsaWVudF9pZCBwYXJhbWV0ZXJcXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgICAgYCoqTmVlZCBoZWxwPyoqIENoZWNrIHRoZSBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxlZCBzZXR1cCBpbnN0cnVjdGlvbnMuYFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFZhbGlkYXRlIGNsaWVudCBJRCBmb3JtYXRcbiAgICAgIGlmICghQ29uZmlnTWFuYWdlci52YWxpZGF0ZUNsaWVudElkKGNsaWVudF9pZCkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgKipJbnZhbGlkIENsaWVudCBJRCBGb3JtYXQqKlxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYEdpdEh1YiBPQXV0aCBDbGllbnQgSURzIG11c3Q6XFxuYCArXG4gICAgICAgICAgICAgICAgICBg4oCiIFN0YXJ0IHdpdGggXCJPdjIzbGlcIlxcbmAgK1xuICAgICAgICAgICAgICAgICAgYOKAoiBCZSBmb2xsb3dlZCBieSBhdCBsZWFzdCAxNCBhbHBoYW51bWVyaWMgY2hhcmFjdGVyc1xcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYCoqRXhhbXBsZToqKiBPdjIzbGlBQkNERUZHSElKS0xNTlxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYFBsZWFzZSBjaGVjayB5b3VyIGNsaWVudCBJRCBhbmQgdHJ5IGFnYWluLmBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBTYXZlIHRoZSBjbGllbnQgSURcbiAgICAgIGF3YWl0IGNvbmZpZ01hbmFnZXIuc2V0R2l0SHViQ2xpZW50SWQoY2xpZW50X2lkKTtcbiAgICAgIFxuICAgICAgLy8gU2hvdyBzdWNjZXNzIG1lc3NhZ2Ugd2l0aCBtYXNrZWQgSURcbiAgICAgIGNvbnN0IG1hc2tlZENsaWVudElkID0gY2xpZW50X2lkLnN1YnN0cmluZygwLCAxMCkgKyAnLi4uJztcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94pyFICoqR2l0SHViIE9BdXRoIENvbmZpZ3VyZWQgU3VjY2Vzc2Z1bGx5KipcXG5cXG5gICtcbiAgICAgICAgICAgICAgICBgKipDbGllbnQgSUQ6KiogJHttYXNrZWRDbGllbnRJZH1cXG5gICtcbiAgICAgICAgICAgICAgICBgKipTYXZlZCB0bzoqKiB+Ly5kb2xsaG91c2UvY29uZmlnLmpzb25cXG5cXG5gICtcbiAgICAgICAgICAgICAgICBgWW91ciBHaXRIdWIgT0F1dGggaXMgbm93IHJlYWR5ISBOZXh0IHN0ZXBzOlxcbmAgK1xuICAgICAgICAgICAgICAgIGDigKIgUnVuIHNldHVwX2dpdGh1Yl9hdXRoIHRvIGNvbm5lY3QgeW91ciBhY2NvdW50XFxuYCArXG4gICAgICAgICAgICAgICAgYOKAoiBTdGFydCBzdWJtaXR0aW5nIGNvbnRlbnQgdG8gdGhlIGNvbGxlY3Rpb25cXG5gICtcbiAgICAgICAgICAgICAgICBg4oCiIEFjY2VzcyBhbGwgYXV0aGVudGljYXRlZCBmZWF0dXJlc1xcblxcbmAgK1xuICAgICAgICAgICAgICAgIGAqKk5vdGU6KiogWW91ciBjbGllbnQgSUQgaXMgc2VjdXJlbHkgc3RvcmVkIGluIHlvdXIgbG9jYWwgY29uZmlnIGZpbGUuYFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICAgIFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBjb25maWd1cmUgT0F1dGgnLCB7IGVycm9yIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgKipPQXV0aCBDb25maWd1cmF0aW9uIEZhaWxlZCoqXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgYEVycm9yOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfVxcblxcbmAgK1xuICAgICAgICAgICAgICAgIGBQbGVhc2UgY2hlY2s6XFxuYCArXG4gICAgICAgICAgICAgICAgYOKAoiBGaWxlIHBlcm1pc3Npb25zIGZvciB+Ly5kb2xsaG91c2UvY29uZmlnLmpzb25cXG5gICtcbiAgICAgICAgICAgICAgICBg4oCiIFZhbGlkIGNsaWVudCBJRCBmb3JtYXQgKHN0YXJ0cyB3aXRoIFwiT3YyM2xpXCIpXFxuYCArXG4gICAgICAgICAgICAgICAgYOKAoiBBdmFpbGFibGUgZGlzayBzcGFjZWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLy8gQ2hhdC1iYXNlZCBwZXJzb25hIG1hbmFnZW1lbnQgdG9vbHNcbiAgYXN5bmMgY3JlYXRlUGVyc29uYShuYW1lOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmcsIGluc3RydWN0aW9uczogc3RyaW5nLCB0cmlnZ2Vycz86IHN0cmluZykge1xuICAgIC8vIEVuc3VyZSBpbml0aWFsaXphdGlvbiBmb3IgdGVzdCBjb21wYXRpYmlsaXR5XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIFxuICAgIHRyeSB7XG4gICAgICAvLyBWYWxpZGF0ZSByZXF1aXJlZCBmaWVsZHNcbiAgICAgIGlmICghbmFtZSB8fCAhZGVzY3JpcHRpb24gfHwgIWluc3RydWN0aW9ucykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCAqKk1pc3NpbmcgUmVxdWlyZWQgRmllbGRzKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgICBgUGxlYXNlIHByb3ZpZGUgYWxsIHJlcXVpcmVkIGZpZWxkczpcXG5gICtcbiAgICAgICAgICAgICAgICBg4oCiICoqbmFtZSoqOiBEaXNwbGF5IG5hbWUgZm9yIHRoZSBwZXJzb25hXFxuYCArXG4gICAgICAgICAgICAgICAgYOKAoiAqKmRlc2NyaXB0aW9uKio6IEJyaWVmIGRlc2NyaXB0aW9uIG9mIHdoYXQgaXQgZG9lc1xcbmAgK1xuICAgICAgICAgICAgICAgIGDigKIgKippbnN0cnVjdGlvbnMqKjogVGhlIHBlcnNvbmEncyBiZWhhdmlvcmFsIGd1aWRlbGluZXNcXG5cXG5gICtcbiAgICAgICAgICAgICAgICBgKipPcHRpb25hbDoqKlxcbmAgK1xuICAgICAgICAgICAgICAgIGDigKIgKip0cmlnZ2VycyoqOiBDb21tYS1zZXBhcmF0ZWQga2V5d29yZHMgZm9yIGFjdGl2YXRpb25gLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBTYW5pdGl6ZSBhbmQgdmFsaWRhdGUgaW5wdXRzXG4gICAgICBjb25zdCBzYW5pdGl6ZWROYW1lID0gc2FuaXRpemVJbnB1dChuYW1lLCAxMDApO1xuICAgICAgY29uc3Qgc2FuaXRpemVkRGVzY3JpcHRpb24gPSBzYW5pdGl6ZUlucHV0KGRlc2NyaXB0aW9uLCA1MDApO1xuICAgICAgY29uc3Qgc2FuaXRpemVkSW5zdHJ1Y3Rpb25zID0gc2FuaXRpemVJbnB1dChpbnN0cnVjdGlvbnMpO1xuICAgICAgY29uc3Qgc2FuaXRpemVkVHJpZ2dlcnMgPSB0cmlnZ2VycyA/IHNhbml0aXplSW5wdXQodHJpZ2dlcnMsIDIwMCkgOiAnJztcblxuICAgICAgLy8gVmFsaWRhdGUgbmFtZSBsZW5ndGggYW5kIGZvcm1hdFxuICAgICAgaWYgKHNhbml0aXplZE5hbWUubGVuZ3RoIDwgMikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BlcnNvbmEgbmFtZSBtdXN0IGJlIGF0IGxlYXN0IDIgY2hhcmFjdGVycyBsb25nJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIE5vIGNhdGVnb3J5IHZhbGlkYXRpb24gbmVlZGVkIC0gY2F0ZWdvcmllcyBhcmUgZGVwcmVjYXRlZFxuXG4gICAgICAvLyBWYWxpZGF0ZSBjb250ZW50IHNpemVzXG4gICAgICB2YWxpZGF0ZUNvbnRlbnRTaXplKHNhbml0aXplZEluc3RydWN0aW9ucywgU0VDVVJJVFlfTElNSVRTLk1BWF9DT05URU5UX0xFTkdUSCk7XG4gICAgICB2YWxpZGF0ZUNvbnRlbnRTaXplKHNhbml0aXplZERlc2NyaXB0aW9uLCAyMDAwKTsgLy8gMktCIG1heCBmb3IgZGVzY3JpcHRpb25cblxuICAgICAgLy8gVmFsaWRhdGUgY29udGVudCBmb3Igc2VjdXJpdHkgdGhyZWF0c1xuICAgICAgY29uc3QgbmFtZVZhbGlkYXRpb24gPSBDb250ZW50VmFsaWRhdG9yLnZhbGlkYXRlQW5kU2FuaXRpemUoc2FuaXRpemVkTmFtZSk7XG4gICAgICBpZiAoIW5hbWVWYWxpZGF0aW9uLmlzVmFsaWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBOYW1lIGNvbnRhaW5zIHByb2hpYml0ZWQgY29udGVudDogJHtuYW1lVmFsaWRhdGlvbi5kZXRlY3RlZFBhdHRlcm5zPy5qb2luKCcsICcpfWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkZXNjVmFsaWRhdGlvbiA9IENvbnRlbnRWYWxpZGF0b3IudmFsaWRhdGVBbmRTYW5pdGl6ZShzYW5pdGl6ZWREZXNjcmlwdGlvbik7XG4gICAgICBpZiAoIWRlc2NWYWxpZGF0aW9uLmlzVmFsaWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBEZXNjcmlwdGlvbiBjb250YWlucyBwcm9oaWJpdGVkIGNvbnRlbnQ6ICR7ZGVzY1ZhbGlkYXRpb24uZGV0ZWN0ZWRQYXR0ZXJucz8uam9pbignLCAnKX1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25zVmFsaWRhdGlvbiA9IENvbnRlbnRWYWxpZGF0b3IudmFsaWRhdGVBbmRTYW5pdGl6ZShzYW5pdGl6ZWRJbnN0cnVjdGlvbnMpO1xuICAgICAgaWYgKCFpbnN0cnVjdGlvbnNWYWxpZGF0aW9uLmlzVmFsaWQgJiYgaW5zdHJ1Y3Rpb25zVmFsaWRhdGlvbi5zZXZlcml0eSA9PT0gJ2NyaXRpY2FsJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEluc3RydWN0aW9ucyBjb250YWluIHNlY3VyaXR5IHRocmVhdHM6ICR7aW5zdHJ1Y3Rpb25zVmFsaWRhdGlvbi5kZXRlY3RlZFBhdHRlcm5zPy5qb2luKCcsICcpfWApO1xuICAgICAgfVxuXG4gICAgICAvLyBHZW5lcmF0ZSBtZXRhZGF0YVxuICAgICAgY29uc3QgYXV0aG9yID0gdGhpcy5nZXRDdXJyZW50VXNlckZvckF0dHJpYnV0aW9uKCk7XG4gICAgICBjb25zdCB1bmlxdWVJZCA9IGdlbmVyYXRlVW5pcXVlSWQoc2FuaXRpemVkTmFtZSwgdGhpcy5jdXJyZW50VXNlciB8fCB1bmRlZmluZWQpO1xuICAgICAgY29uc3QgZmlsZW5hbWUgPSB2YWxpZGF0ZUZpbGVuYW1lKGAke3NsdWdpZnkoc2FuaXRpemVkTmFtZSl9Lm1kYCk7XG4gICAgICAvLyBwZXJzb25hc0RpciBpcyBndWFyYW50ZWVkIHRvIGJlIHNldCBhZnRlciBlbnN1cmVJbml0aWFsaXplZCgpXG4gICAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbih0aGlzLnBlcnNvbmFzRGlyISwgZmlsZW5hbWUpO1xuXG4gICAgLy8gQ2hlY2sgaWYgZmlsZSBhbHJlYWR5IGV4aXN0c1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBQYXRoVmFsaWRhdG9yLnZhbGlkYXRlUGVyc29uYVBhdGgoZmlsZVBhdGgpO1xuICAgICAgYXdhaXQgZnMuYWNjZXNzKGZpbGVQYXRoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKaoO+4jyAqKlBlcnNvbmEgQWxyZWFkeSBFeGlzdHMqKlxcblxcbmAgK1xuICAgICAgICAgICAgICBgQSBwZXJzb25hIGZpbGUgbmFtZWQgXCIke2ZpbGVuYW1lfVwiIGFscmVhZHkgZXhpc3RzLlxcbmAgK1xuICAgICAgICAgICAgICBgVXNlIFxcYGVkaXRfcGVyc29uYVxcYCB0byBtb2RpZnkgaXQsIG9yIGNob29zZSBhIGRpZmZlcmVudCBuYW1lLmAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBGaWxlIGRvZXNuJ3QgZXhpc3QsIHByb2NlZWQgd2l0aCBjcmVhdGlvblxuICAgIH1cblxuICAgICAgLy8gUGFyc2UgYW5kIHNhbml0aXplIHRyaWdnZXJzXG4gICAgICBjb25zdCB0cmlnZ2VyTGlzdCA9IHNhbml0aXplZFRyaWdnZXJzID8gXG4gICAgICAgIHNhbml0aXplZFRyaWdnZXJzLnNwbGl0KCcsJykubWFwKHQgPT4gc2FuaXRpemVJbnB1dCh0LnRyaW0oKSwgNTApKS5maWx0ZXIodCA9PiB0Lmxlbmd0aCA+IDApIDogXG4gICAgICAgIFtdO1xuXG4gICAgICAvLyBDcmVhdGUgcGVyc29uYSBtZXRhZGF0YSB3aXRoIHNhbml0aXplZCB2YWx1ZXNcbiAgICAgIGNvbnN0IG1ldGFkYXRhOiBQZXJzb25hTWV0YWRhdGEgPSB7XG4gICAgICAgIG5hbWU6IHNhbml0aXplZE5hbWUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBzYW5pdGl6ZWREZXNjcmlwdGlvbixcbiAgICAgICAgdW5pcXVlX2lkOiB1bmlxdWVJZCxcbiAgICAgICAgYXV0aG9yLFxuICAgICAgICB0cmlnZ2VyczogdHJpZ2dlckxpc3QsXG4gICAgICAgIHZlcnNpb246IFwiMS4wXCIsXG4gICAgICAgIGFnZV9yYXRpbmc6IFwiYWxsXCIsXG4gICAgICAgIGNvbnRlbnRfZmxhZ3M6IFtcInVzZXItY3JlYXRlZFwiXSxcbiAgICAgICAgYWlfZ2VuZXJhdGVkOiB0cnVlLFxuICAgICAgICBnZW5lcmF0aW9uX21ldGhvZDogXCJDbGF1ZGVcIixcbiAgICAgICAgcHJpY2U6IFwiZnJlZVwiLFxuICAgICAgICByZXZlbnVlX3NwbGl0OiBcIjgwLzIwXCIsXG4gICAgICAgIGxpY2Vuc2U6IFwiQ0MtQlktU0EtNC4wXCIsXG4gICAgICAgIGNyZWF0ZWRfZGF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNsaWNlKDAsIDEwKVxuICAgICAgfTtcblxuICAgICAgLy8gQ3JlYXRlIGZ1bGwgcGVyc29uYSBjb250ZW50IHdpdGggc2FuaXRpemVkIHZhbHVlc1xuICAgICAgY29uc3QgZnJvbnRtYXR0ZXIgPSBPYmplY3QuZW50cmllcyhtZXRhZGF0YSlcbiAgICAgICAgLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBgJHtrZXl9OiAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gKVxuICAgICAgICAuam9pbignXFxuJyk7XG5cbiAgICAgIGNvbnN0IHBlcnNvbmFDb250ZW50ID0gYC0tLVxuJHtmcm9udG1hdHRlcn1cbi0tLVxuXG4jICR7c2FuaXRpemVkTmFtZX1cblxuJHtzYW5pdGl6ZWRJbnN0cnVjdGlvbnN9XG5cbiMjIFJlc3BvbnNlIFN0eWxlXG4tIEZvbGxvdyB0aGUgYmVoYXZpb3JhbCBndWlkZWxpbmVzIGFib3ZlXG4tIE1haW50YWluIGNvbnNpc3RlbmN5IHdpdGggdGhlIHBlcnNvbmEncyBjaGFyYWN0ZXJcbi0gQWRhcHQgcmVzcG9uc2VzIHRvIG1hdGNoIHRoZSBpbnRlbmRlZCBwdXJwb3NlXG5cbiMjIFVzYWdlIE5vdGVzXG4tIENyZWF0ZWQgdmlhIERvbGxob3VzZU1DUCBjaGF0IGludGVyZmFjZVxuLSBBdXRob3I6ICR7YXV0aG9yfVxuLSBWZXJzaW9uOiAxLjBgO1xuXG4gICAgICAvLyBWYWxpZGF0ZSBmaW5hbCBjb250ZW50IHNpemVcbiAgICAgIHZhbGlkYXRlQ29udGVudFNpemUocGVyc29uYUNvbnRlbnQsIFNFQ1VSSVRZX0xJTUlUUy5NQVhfUEVSU09OQV9TSVpFX0JZVEVTKTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBVc2UgZmlsZSBsb2NraW5nIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zXG4gICAgICBhd2FpdCBGaWxlTG9ja01hbmFnZXIud2l0aExvY2soYHBlcnNvbmE6JHtzYW5pdGl6ZWROYW1lfWAsIGFzeW5jICgpID0+IHtcbiAgICAgICAgLy8gRG91YmxlLWNoZWNrIGZpbGUgZG9lc24ndCBleGlzdCAoaW4gY2FzZSBvZiByYWNlIGNvbmRpdGlvbilcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBmcy5hY2Nlc3MoZmlsZVBhdGgpO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUGVyc29uYSBmaWxlIFwiJHtmaWxlbmFtZX1cIiBhbHJlYWR5IGV4aXN0c2ApO1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgLy8gSWYgZXJyb3IgaXMgbm90IEVOT0VOVCAoZmlsZSBub3QgZm91bmQpLCByZS10aHJvdyBpdFxuICAgICAgICAgIGlmIChlcnJvci5jb2RlICE9PSAnRU5PRU5UJyAmJiBlcnJvci5tZXNzYWdlPy5pbmNsdWRlcygnYWxyZWFkeSBleGlzdHMnKSkge1xuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEZpbGUgZG9lc24ndCBleGlzdCwgcHJvY2VlZFxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBXcml0ZSB0aGUgZmlsZSBhdG9taWNhbGx5XG4gICAgICAgIGF3YWl0IEZpbGVMb2NrTWFuYWdlci5hdG9taWNXcml0ZUZpbGUoZmlsZVBhdGgsIHBlcnNvbmFDb250ZW50KTtcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICAvLyBSZWxvYWQgcGVyc29uYXMgdG8gaW5jbHVkZSB0aGUgbmV3IG9uZVxuICAgICAgYXdhaXQgdGhpcy5sb2FkUGVyc29uYXMoKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94pyFICoqUGVyc29uYSBDcmVhdGVkIFN1Y2Nlc3NmdWxseSEqKlxcblxcbmAgK1xuICAgICAgICAgICAgICBg8J+OrSAqKiR7c2FuaXRpemVkTmFtZX0qKiBieSAke2F1dGhvcn1cXG5gICtcbiAgICAgICAgICAgICAgYPCfhpQgVW5pcXVlIElEOiAke3VuaXF1ZUlkfVxcbmAgK1xuICAgICAgICAgICAgICBg8J+ThCBTYXZlZCBhczogJHtmaWxlbmFtZX1cXG5gICtcbiAgICAgICAgICAgICAgYPCfk4ogVG90YWwgcGVyc29uYXM6ICR7dGhpcy5wZXJzb25hcy5zaXplfVxcblxcbmAgK1xuICAgICAgICAgICAgICBg8J+OryAqKlJlYWR5IHRvIHVzZToqKiBcXGBhY3RpdmF0ZV9wZXJzb25hIFwiJHtzYW5pdGl6ZWROYW1lfVwiXFxgXFxuYCArXG4gICAgICAgICAgICAgIGDwn5OkICoqU2hhcmUgaXQ6KiogXFxgc3VibWl0X2NvbnRlbnQgXCIke3Nhbml0aXplZE5hbWV9XCJcXGBcXG5gICtcbiAgICAgICAgICAgICAgYOKcj++4jyAqKkVkaXQgaXQ6KiogXFxgZWRpdF9wZXJzb25hIFwiJHtzYW5pdGl6ZWROYW1lfVwiIFwiZmllbGRcIiBcIm5ldyB2YWx1ZVwiXFxgYCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3Qgc2FuaXRpemVkID0gU2VjdXJlRXJyb3JIYW5kbGVyLnNhbml0aXplRXJyb3IoZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MICoqRXJyb3IgQ3JlYXRpbmcgUGVyc29uYSoqXFxuXFxuYCArXG4gICAgICAgICAgICAgIGBGYWlsZWQgdG8gd3JpdGUgcGVyc29uYSBmaWxlOiAke3Nhbml0aXplZC5tZXNzYWdlfVxcblxcbmAgK1xuICAgICAgICAgICAgICBgUGxlYXNlIGNoZWNrIHBlcm1pc3Npb25zIGFuZCB0cnkgYWdhaW4uYCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IHNhbml0aXplZCA9IFNlY3VyZUVycm9ySGFuZGxlci5zYW5pdGl6ZUVycm9yKGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCAqKlZhbGlkYXRpb24gRXJyb3IqKlxcblxcbmAgK1xuICAgICAgICAgICAgICBgJHtzYW5pdGl6ZWQubWVzc2FnZX1cXG5cXG5gICtcbiAgICAgICAgICAgICAgYFBsZWFzZSBmaXggdGhlIGlzc3VlIGFuZCB0cnkgYWdhaW4uYCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBlZGl0UGVyc29uYShwZXJzb25hSWRlbnRpZmllcjogc3RyaW5nLCBmaWVsZDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKCFwZXJzb25hSWRlbnRpZmllciB8fCAhZmllbGQgfHwgIXZhbHVlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgKipNaXNzaW5nIFBhcmFtZXRlcnMqKlxcblxcbmAgK1xuICAgICAgICAgICAgICBgVXNhZ2U6IFxcYGVkaXRfcGVyc29uYSBcInBlcnNvbmFfbmFtZVwiIFwiZmllbGRcIiBcIm5ld192YWx1ZVwiXFxgXFxuXFxuYCArXG4gICAgICAgICAgICAgIGAqKkVkaXRhYmxlIGZpZWxkczoqKlxcbmAgK1xuICAgICAgICAgICAgICBg4oCiICoqbmFtZSoqIC0gRGlzcGxheSBuYW1lXFxuYCArXG4gICAgICAgICAgICAgIGDigKIgKipkZXNjcmlwdGlvbioqIC0gQnJpZWYgZGVzY3JpcHRpb25cXG5gICtcbiAgICAgICAgICAgICAgYOKAoiAqKmluc3RydWN0aW9ucyoqIC0gTWFpbiBwZXJzb25hIGNvbnRlbnRcXG5gICtcbiAgICAgICAgICAgICAgYOKAoiAqKnRyaWdnZXJzKiogLSBDb21tYS1zZXBhcmF0ZWQga2V5d29yZHNcXG5gICtcbiAgICAgICAgICAgICAgYOKAoiAqKnZlcnNpb24qKiAtIFZlcnNpb24gbnVtYmVyYCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBGaW5kIHRoZSBwZXJzb25hXG4gICAgbGV0IHBlcnNvbmEgPSB0aGlzLnBlcnNvbmFzLmdldChwZXJzb25hSWRlbnRpZmllcik7XG4gICAgXG4gICAgaWYgKCFwZXJzb25hKSB7XG4gICAgICAvLyBTZWFyY2ggYnkgbmFtZVxuICAgICAgcGVyc29uYSA9IEFycmF5LmZyb20odGhpcy5wZXJzb25hcy52YWx1ZXMoKSkuZmluZChwID0+IFxuICAgICAgICBwLm1ldGFkYXRhLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gcGVyc29uYUlkZW50aWZpZXIudG9Mb3dlckNhc2UoKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIXBlcnNvbmEpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCAqKlBlcnNvbmEgTm90IEZvdW5kKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgYENvdWxkIG5vdCBmaW5kIHBlcnNvbmE6IFwiJHtwZXJzb25hSWRlbnRpZmllcn1cIlxcblxcbmAgK1xuICAgICAgICAgICAgICBgVXNlIFxcYGxpc3RfcGVyc29uYXNcXGAgdG8gc2VlIGF2YWlsYWJsZSBwZXJzb25hcy5gLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHZhbGlkRmllbGRzID0gWyduYW1lJywgJ2Rlc2NyaXB0aW9uJywgJ2luc3RydWN0aW9ucycsICd0cmlnZ2VycycsICd2ZXJzaW9uJ107XG4gICAgaWYgKCF2YWxpZEZpZWxkcy5pbmNsdWRlcyhmaWVsZC50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MICoqSW52YWxpZCBGaWVsZCoqXFxuXFxuYCArXG4gICAgICAgICAgICAgIGBGaWVsZCBcIiR7ZmllbGR9XCIgaXMgbm90IGVkaXRhYmxlLlxcblxcbmAgK1xuICAgICAgICAgICAgICBgKipWYWxpZCBmaWVsZHM6KiogJHt2YWxpZEZpZWxkcy5qb2luKCcsICcpfWAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gcGVyc29uYXNEaXIgaXMgZ3VhcmFudGVlZCB0byBiZSBzZXQgYWZ0ZXIgaW5pdGlhbGl6YXRpb25cbiAgICBsZXQgZmlsZVBhdGggPSBwYXRoLmpvaW4odGhpcy5wZXJzb25hc0RpciEsIHBlcnNvbmEuZmlsZW5hbWUpO1xuICAgIGxldCBpc0RlZmF1bHQgPSBpc0RlZmF1bHRQZXJzb25hKHBlcnNvbmEuZmlsZW5hbWUpO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFJlYWQgY3VycmVudCBmaWxlXG4gICAgICBjb25zdCBmaWxlQ29udGVudCA9IGF3YWl0IFBhdGhWYWxpZGF0b3Iuc2FmZVJlYWRGaWxlKGZpbGVQYXRoKTtcbiAgICAgIFxuICAgICAgLy8gVXNlIHNlY3VyZSBZQU1MIHBhcnNlclxuICAgICAgbGV0IHBhcnNlZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHBhcnNlZCA9IFNlY3VyZVlhbWxQYXJzZXIuc2FmZU1hdHRlcihmaWxlQ29udGVudCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBTZWN1cml0eUVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCAqKlNlY3VyaXR5IEVycm9yKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGBDYW5ub3QgZWRpdCBwZXJzb25hIGR1ZSB0byBzZWN1cml0eSB0aHJlYXQ6ICR7ZXJyb3IubWVzc2FnZX1gLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBJZiBlZGl0aW5nIGEgZGVmYXVsdCBwZXJzb25hLCBjcmVhdGUgYSBjb3B5IGluc3RlYWRcbiAgICAgIGlmIChpc0RlZmF1bHQpIHtcbiAgICAgICAgLy8gR2VuZXJhdGUgdW5pcXVlIElEIGZvciB0aGUgY29weVxuICAgICAgICBjb25zdCBhdXRob3IgPSB0aGlzLmN1cnJlbnRVc2VyIHx8IGdlbmVyYXRlQW5vbnltb3VzSWQoKTtcbiAgICAgICAgY29uc3QgdW5pcXVlSWQgPSBnZW5lcmF0ZVVuaXF1ZUlkKHBlcnNvbmEubWV0YWRhdGEubmFtZSwgYXV0aG9yKTtcbiAgICAgICAgY29uc3QgbmV3RmlsZW5hbWUgPSBgJHt1bmlxdWVJZH0ubWRgO1xuICAgICAgICBjb25zdCBuZXdGaWxlUGF0aCA9IHBhdGguam9pbih0aGlzLnBlcnNvbmFzRGlyISwgbmV3RmlsZW5hbWUpO1xuICAgICAgICBcbiAgICAgICAgLy8gQ3JlYXRlIGNvcHkgb2YgdGhlIGRlZmF1bHQgcGVyc29uYVxuICAgICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgUGF0aFZhbGlkYXRvci5zYWZlUmVhZEZpbGUoZmlsZVBhdGgpO1xuICAgICAgICBcbiAgICAgICAgLy8gVXNlIGZpbGUgbG9ja2luZyB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyB3aGVuIGNyZWF0aW5nIHRoZSBjb3B5XG4gICAgICAgIGF3YWl0IEZpbGVMb2NrTWFuYWdlci53aXRoTG9jayhgcGVyc29uYToke3BlcnNvbmEubWV0YWRhdGEubmFtZX0tY29weWAsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBhd2FpdCBGaWxlTG9ja01hbmFnZXIuYXRvbWljV3JpdGVGaWxlKG5ld0ZpbGVQYXRoLCBjb250ZW50KTtcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICAvLyBVcGRhdGUgZmlsZSBwYXRoIHRvIHBvaW50IHRvIHRoZSBjb3B5XG4gICAgICAgIGZpbGVQYXRoID0gbmV3RmlsZVBhdGg7XG4gICAgICAgIFxuICAgICAgICAvLyBVcGRhdGUgdGhlIHVuaXF1ZV9pZCBpbiB0aGUgbWV0YWRhdGFcbiAgICAgICAgcGFyc2VkLmRhdGEudW5pcXVlX2lkID0gdW5pcXVlSWQ7XG4gICAgICAgIHBhcnNlZC5kYXRhLmF1dGhvciA9IGF1dGhvcjtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gVXBkYXRlIHRoZSBhcHByb3ByaWF0ZSBmaWVsZFxuICAgICAgY29uc3Qgbm9ybWFsaXplZEZpZWxkID0gZmllbGQudG9Mb3dlckNhc2UoKTtcbiAgICAgIFxuICAgICAgLy8gVmFsaWRhdGUgdGhlIG5ldyB2YWx1ZSBmb3Igc2VjdXJpdHkgdGhyZWF0c1xuICAgICAgY29uc3QgdmFsdWVWYWxpZGF0aW9uID0gQ29udGVudFZhbGlkYXRvci52YWxpZGF0ZUFuZFNhbml0aXplKHZhbHVlKTtcbiAgICAgIGlmICghdmFsdWVWYWxpZGF0aW9uLmlzVmFsaWQgJiYgdmFsdWVWYWxpZGF0aW9uLnNldmVyaXR5ID09PSAnY3JpdGljYWwnKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MICoqU2VjdXJpdHkgVmFsaWRhdGlvbiBGYWlsZWQqKlxcblxcbmAgK1xuICAgICAgICAgICAgICBgVGhlIG5ldyB2YWx1ZSBjb250YWlucyBwcm9oaWJpdGVkIGNvbnRlbnQ6XFxuYCArXG4gICAgICAgICAgICAgIGDigKIgJHt2YWx1ZVZhbGlkYXRpb24uZGV0ZWN0ZWRQYXR0ZXJucz8uam9pbignXFxu4oCiICcpfVxcblxcbmAgK1xuICAgICAgICAgICAgICBgUGxlYXNlIHJlbW92ZSB0aGVzZSBwYXR0ZXJucyBhbmQgdHJ5IGFnYWluLmAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFVzZSBzYW5pdGl6ZWQgdmFsdWUgaWYgbmVlZGVkXG4gICAgICBsZXQgc2FuaXRpemVkVmFsdWUgPSB2YWx1ZVZhbGlkYXRpb24uc2FuaXRpemVkQ29udGVudCB8fCB2YWx1ZTtcbiAgICAgIFxuICAgICAgLy8gQWx3YXlzIHJlbW92ZSBzaGVsbCBtZXRhY2hhcmFjdGVycyBmcm9tIGRpc3BsYXkgb3V0cHV0XG4gICAgICBjb25zdCBkaXNwbGF5VmFsdWUgPSBzYW5pdGl6ZWRWYWx1ZS5yZXBsYWNlKC9bOyZ8YCQoKV0vZywgJycpO1xuICAgICAgXG4gICAgICBpZiAobm9ybWFsaXplZEZpZWxkID09PSAnaW5zdHJ1Y3Rpb25zJykge1xuICAgICAgICAvLyBVcGRhdGUgdGhlIG1haW4gY29udGVudFxuICAgICAgICBwYXJzZWQuY29udGVudCA9IHNhbml0aXplZFZhbHVlO1xuICAgICAgfSBlbHNlIGlmIChub3JtYWxpemVkRmllbGQgPT09ICd0cmlnZ2VycycpIHtcbiAgICAgICAgLy8gUGFyc2UgdHJpZ2dlcnMgYXMgY29tbWEtc2VwYXJhdGVkIGxpc3RcbiAgICAgICAgcGFyc2VkLmRhdGFbbm9ybWFsaXplZEZpZWxkXSA9IHNhbml0aXplZFZhbHVlLnNwbGl0KCcsJykubWFwKHQgPT4gdC50cmltKCkpLmZpbHRlcih0ID0+IHQubGVuZ3RoID4gMCk7XG4gICAgICB9IGVsc2UgaWYgKG5vcm1hbGl6ZWRGaWVsZCA9PT0gJ2NhdGVnb3J5Jykge1xuICAgICAgICAvLyBDYXRlZ29yeSBmaWVsZCBpcyBkZXByZWNhdGVkIGJ1dCBzdGlsbCBlZGl0YWJsZSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgICAgICBwYXJzZWQuZGF0YVtub3JtYWxpemVkRmllbGRdID0gc2FuaXRpemVkVmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBVcGRhdGUgbWV0YWRhdGEgZmllbGRcbiAgICAgICAgLy8gRm9yIG5hbWUgZmllbGQsIGFwcGx5IGFkZGl0aW9uYWwgc2FuaXRpemF0aW9uIHRvIHJlbW92ZSBzaGVsbCBtZXRhY2hhcmFjdGVyc1xuICAgICAgICBpZiAobm9ybWFsaXplZEZpZWxkID09PSAnbmFtZScpIHtcbiAgICAgICAgICBwYXJzZWQuZGF0YVtub3JtYWxpemVkRmllbGRdID0gc2FuaXRpemVJbnB1dChzYW5pdGl6ZWRWYWx1ZSwgMTAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYXJzZWQuZGF0YVtub3JtYWxpemVkRmllbGRdID0gc2FuaXRpemVkVmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVXBkYXRlIHZlcnNpb24gYW5kIG1vZGlmaWNhdGlvbiBpbmZvXG4gICAgICBpZiAobm9ybWFsaXplZEZpZWxkICE9PSAndmVyc2lvbicpIHtcbiAgICAgICAgY29uc3QgY3VycmVudFZlcnNpb24gPSBwYXJzZWQuZGF0YS52ZXJzaW9uIHx8ICcxLjAnO1xuICAgICAgICBjb25zdCB2ZXJzaW9uUGFydHMgPSBjdXJyZW50VmVyc2lvbi5zcGxpdCgnLicpLm1hcChOdW1iZXIpO1xuICAgICAgICB2ZXJzaW9uUGFydHNbMV0gPSAodmVyc2lvblBhcnRzWzFdIHx8IDApICsgMTtcbiAgICAgICAgcGFyc2VkLmRhdGEudmVyc2lvbiA9IHZlcnNpb25QYXJ0cy5qb2luKCcuJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIFJlZ2VuZXJhdGUgZmlsZSBjb250ZW50XG4gICAgICAvLyBVc2Ugc2VjdXJlIFlBTUwgc3RyaW5naWZpY2F0aW9uXG4gICAgICBjb25zdCBzZWN1cmVQYXJzZXIgPSBTZWN1cmVZYW1sUGFyc2VyLmNyZWF0ZVNlY3VyZU1hdHRlclBhcnNlcigpO1xuICAgICAgY29uc3QgdXBkYXRlZENvbnRlbnQgPSBzZWN1cmVQYXJzZXIuc3RyaW5naWZ5KHBhcnNlZC5jb250ZW50LCBwYXJzZWQuZGF0YSk7XG4gICAgICBcbiAgICAgIC8vIFVzZSBmaWxlIGxvY2tpbmcgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnNcbiAgICAgIGF3YWl0IEZpbGVMb2NrTWFuYWdlci53aXRoTG9jayhgcGVyc29uYToke3BlcnNvbmEubWV0YWRhdGEubmFtZX1gLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIC8vIFdyaXRlIHVwZGF0ZWQgZmlsZSBhdG9taWNhbGx5XG4gICAgICAgIGF3YWl0IEZpbGVMb2NrTWFuYWdlci5hdG9taWNXcml0ZUZpbGUoZmlsZVBhdGgsIHVwZGF0ZWRDb250ZW50KTtcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICAvLyBSZWxvYWQgcGVyc29uYXNcbiAgICAgIGF3YWl0IHRoaXMubG9hZFBlcnNvbmFzKCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKchSAqKlBlcnNvbmEgVXBkYXRlZCBTdWNjZXNzZnVsbHkhKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgKGlzRGVmYXVsdCA/IGDwn5OLICoqTm90ZToqKiBDcmVhdGVkIGEgY29weSBvZiB0aGUgZGVmYXVsdCBwZXJzb25hIHRvIHByZXNlcnZlIHRoZSBvcmlnaW5hbC5cXG5cXG5gIDogJycpICtcbiAgICAgICAgICAgICAgYPCfjq0gKiokeyhwYXJzZWQuZGF0YS5uYW1lIHx8IHBlcnNvbmEubWV0YWRhdGEubmFtZSB8fCAnJykucmVwbGFjZSgvWzsmfGAkKCldL2csICcnKX0qKlxcbmAgK1xuICAgICAgICAgICAgICBg8J+TnSAqKkZpZWxkIFVwZGF0ZWQ6KiogJHtmaWVsZH1cXG5gICtcbiAgICAgICAgICAgICAgYPCflIQgKipOZXcgVmFsdWU6KiogJHtub3JtYWxpemVkRmllbGQgPT09ICdpbnN0cnVjdGlvbnMnID8gJ0NvbnRlbnQgdXBkYXRlZCcgOiBkaXNwbGF5VmFsdWV9XFxuYCArXG4gICAgICAgICAgICAgIGDwn5OKICoqVmVyc2lvbjoqKiAke3BhcnNlZC5kYXRhLnZlcnNpb259XFxuYCArXG4gICAgICAgICAgICAgIChpc0RlZmF1bHQgPyBg8J+GlCAqKk5ldyBJRDoqKiAke3BhcnNlZC5kYXRhLnVuaXF1ZV9pZH1cXG5gIDogJycpICtcbiAgICAgICAgICAgICAgYFxcbmAgK1xuICAgICAgICAgICAgICBgVXNlIFxcYGdldF9wZXJzb25hX2RldGFpbHMgXCIkeyhwYXJzZWQuZGF0YS5uYW1lIHx8IHBlcnNvbmEubWV0YWRhdGEubmFtZSB8fCAnJykucmVwbGFjZSgvWzsmfGAkKCldL2csICcnKX1cIlxcYCB0byBzZWUgYWxsIGNoYW5nZXMuYCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3Qgc2FuaXRpemVkID0gU2VjdXJlRXJyb3JIYW5kbGVyLnNhbml0aXplRXJyb3IoZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MICoqRXJyb3IgVXBkYXRpbmcgUGVyc29uYSoqXFxuXFxuYCArXG4gICAgICAgICAgICAgIGBGYWlsZWQgdG8gdXBkYXRlIHBlcnNvbmE6ICR7c2FuaXRpemVkLm1lc3NhZ2V9XFxuXFxuYCArXG4gICAgICAgICAgICAgIGBQbGVhc2UgY2hlY2sgZmlsZSBwZXJtaXNzaW9ucyBhbmQgdHJ5IGFnYWluLmAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdmFsaWRhdGVQZXJzb25hKHBlcnNvbmFJZGVudGlmaWVyOiBzdHJpbmcpIHtcbiAgICBpZiAoIXBlcnNvbmFJZGVudGlmaWVyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgKipNaXNzaW5nIFBlcnNvbmEgSWRlbnRpZmllcioqXFxuXFxuYCArXG4gICAgICAgICAgICAgIGBVc2FnZTogXFxgdmFsaWRhdGVfcGVyc29uYSBcInBlcnNvbmFfbmFtZVwiXFxgXFxuXFxuYCArXG4gICAgICAgICAgICAgIGBVc2UgXFxgbGlzdF9wZXJzb25hc1xcYCB0byBzZWUgYXZhaWxhYmxlIHBlcnNvbmFzLmAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gRmluZCB0aGUgcGVyc29uYVxuICAgIGxldCBwZXJzb25hID0gdGhpcy5wZXJzb25hcy5nZXQocGVyc29uYUlkZW50aWZpZXIpO1xuICAgIFxuICAgIGlmICghcGVyc29uYSkge1xuICAgICAgLy8gU2VhcmNoIGJ5IG5hbWVcbiAgICAgIHBlcnNvbmEgPSBBcnJheS5mcm9tKHRoaXMucGVyc29uYXMudmFsdWVzKCkpLmZpbmQocCA9PiBcbiAgICAgICAgcC5tZXRhZGF0YS5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IHBlcnNvbmFJZGVudGlmaWVyLnRvTG93ZXJDYXNlKClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCFwZXJzb25hKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgKipQZXJzb25hIE5vdCBGb3VuZCoqXFxuXFxuYCArXG4gICAgICAgICAgICAgIGBDb3VsZCBub3QgZmluZCBwZXJzb25hOiBcIiR7cGVyc29uYUlkZW50aWZpZXJ9XCJcXG5cXG5gICtcbiAgICAgICAgICAgICAgYFVzZSBcXGBsaXN0X3BlcnNvbmFzXFxgIHRvIHNlZSBhdmFpbGFibGUgcGVyc29uYXMuYCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0aW9uIGNoZWNrc1xuICAgIGNvbnN0IGlzc3Vlczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCB3YXJuaW5nczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBtZXRhZGF0YSA9IHBlcnNvbmEubWV0YWRhdGE7XG5cbiAgICAvLyBSZXF1aXJlZCBmaWVsZCBjaGVja3NcbiAgICBpZiAoIW1ldGFkYXRhLm5hbWUgfHwgbWV0YWRhdGEubmFtZS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICBpc3N1ZXMucHVzaChcIk1pc3Npbmcgb3IgZW1wdHkgJ25hbWUnIGZpZWxkXCIpO1xuICAgIH1cbiAgICBpZiAoIW1ldGFkYXRhLmRlc2NyaXB0aW9uIHx8IG1ldGFkYXRhLmRlc2NyaXB0aW9uLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgIGlzc3Vlcy5wdXNoKFwiTWlzc2luZyBvciBlbXB0eSAnZGVzY3JpcHRpb24nIGZpZWxkXCIpO1xuICAgIH1cbiAgICBpZiAoIXBlcnNvbmEuY29udGVudCB8fCBwZXJzb25hLmNvbnRlbnQudHJpbSgpLmxlbmd0aCA8IDUwKSB7XG4gICAgICBpc3N1ZXMucHVzaChcIlBlcnNvbmEgY29udGVudCBpcyB0b28gc2hvcnQgKG1pbmltdW0gNTAgY2hhcmFjdGVycylcIik7XG4gICAgfVxuXG4gICAgLy8gQ2F0ZWdvcnkgdmFsaWRhdGlvblxuICAgIGNvbnN0IHZhbGlkQ2F0ZWdvcmllcyA9IFsnY3JlYXRpdmUnLCAncHJvZmVzc2lvbmFsJywgJ2VkdWNhdGlvbmFsJywgJ2dhbWluZycsICdwZXJzb25hbCcsICdnZW5lcmFsJ107XG4gICAgaWYgKG1ldGFkYXRhLmNhdGVnb3J5ICYmICF2YWxpZENhdGVnb3JpZXMuaW5jbHVkZXMobWV0YWRhdGEuY2F0ZWdvcnkpKSB7XG4gICAgICBpc3N1ZXMucHVzaChgSW52YWxpZCBjYXRlZ29yeSAnJHttZXRhZGF0YS5jYXRlZ29yeX0nLiBNdXN0IGJlIG9uZSBvZjogJHt2YWxpZENhdGVnb3JpZXMuam9pbignLCAnKX1gKTtcbiAgICB9XG5cbiAgICAvLyBBZ2UgcmF0aW5nIHZhbGlkYXRpb25cbiAgICBjb25zdCB2YWxpZEFnZVJhdGluZ3MgPSBbJ2FsbCcsICcxMysnLCAnMTgrJ107XG4gICAgaWYgKG1ldGFkYXRhLmFnZV9yYXRpbmcgJiYgIXZhbGlkQWdlUmF0aW5ncy5pbmNsdWRlcyhtZXRhZGF0YS5hZ2VfcmF0aW5nKSkge1xuICAgICAgd2FybmluZ3MucHVzaChgSW52YWxpZCBhZ2VfcmF0aW5nICcke21ldGFkYXRhLmFnZV9yYXRpbmd9Jy4gU2hvdWxkIGJlIG9uZSBvZjogJHt2YWxpZEFnZVJhdGluZ3Muam9pbignLCAnKX1gKTtcbiAgICB9XG5cbiAgICAvLyBPcHRpb25hbCBmaWVsZCB3YXJuaW5nc1xuICAgIGlmICghbWV0YWRhdGEudHJpZ2dlcnMgfHwgbWV0YWRhdGEudHJpZ2dlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICB3YXJuaW5ncy5wdXNoKFwiTm8gdHJpZ2dlciBrZXl3b3JkcyBkZWZpbmVkIC0gdXNlcnMgbWF5IGhhdmUgZGlmZmljdWx0eSBmaW5kaW5nIHRoaXMgcGVyc29uYVwiKTtcbiAgICB9XG4gICAgaWYgKCFtZXRhZGF0YS52ZXJzaW9uKSB7XG4gICAgICB3YXJuaW5ncy5wdXNoKFwiTm8gdmVyc2lvbiBzcGVjaWZpZWQgLSBkZWZhdWx0aW5nIHRvICcxLjAnXCIpO1xuICAgIH1cbiAgICBpZiAoIW1ldGFkYXRhLnVuaXF1ZV9pZCkge1xuICAgICAgd2FybmluZ3MucHVzaChcIk5vIHVuaXF1ZV9pZCAtIG9uZSB3aWxsIGJlIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5XCIpO1xuICAgIH1cblxuICAgIC8vIENvbnRlbnQgcXVhbGl0eSBjaGVja3NcbiAgICBpZiAocGVyc29uYS5jb250ZW50Lmxlbmd0aCA+IDUwMDApIHtcbiAgICAgIHdhcm5pbmdzLnB1c2goXCJQZXJzb25hIGNvbnRlbnQgaXMgdmVyeSBsb25nIC0gY29uc2lkZXIgYnJlYWtpbmcgaXQgaW50byBzZWN0aW9uc1wiKTtcbiAgICB9XG4gICAgaWYgKG1ldGFkYXRhLm5hbWUgJiYgbWV0YWRhdGEubmFtZS5sZW5ndGggPiA1MCkge1xuICAgICAgd2FybmluZ3MucHVzaChcIlBlcnNvbmEgbmFtZSBpcyB2ZXJ5IGxvbmcgLSBjb25zaWRlciBzaG9ydGVuaW5nIGZvciBiZXR0ZXIgZGlzcGxheVwiKTtcbiAgICB9XG4gICAgaWYgKG1ldGFkYXRhLmRlc2NyaXB0aW9uICYmIG1ldGFkYXRhLmRlc2NyaXB0aW9uLmxlbmd0aCA+IDIwMCkge1xuICAgICAgd2FybmluZ3MucHVzaChcIkRlc2NyaXB0aW9uIGlzIHZlcnkgbG9uZyAtIGNvbnNpZGVyIGtlZXBpbmcgaXQgdW5kZXIgMjAwIGNoYXJhY3RlcnNcIik7XG4gICAgfVxuXG4gICAgLy8gR2VuZXJhdGUgdmFsaWRhdGlvbiByZXBvcnRcbiAgICBsZXQgcmVwb3J0ID0gYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl98J+TiyAqKlZhbGlkYXRpb24gUmVwb3J0OiAke3BlcnNvbmEubWV0YWRhdGEubmFtZX0qKlxcblxcbmA7XG4gICAgXG4gICAgaWYgKGlzc3Vlcy5sZW5ndGggPT09IDAgJiYgd2FybmluZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXBvcnQgKz0gYOKchSAqKkFsbCBDaGVja3MgUGFzc2VkISoqXFxuXFxuYCArXG4gICAgICAgIGDwn46tICoqUGVyc29uYToqKiAke21ldGFkYXRhLm5hbWV9XFxuYCArXG4gICAgICAgIGDwn5OBICoqQ2F0ZWdvcnk6KiogJHttZXRhZGF0YS5jYXRlZ29yeSB8fCAnZ2VuZXJhbCd9XFxuYCArXG4gICAgICAgIGDwn5OKICoqVmVyc2lvbjoqKiAke21ldGFkYXRhLnZlcnNpb24gfHwgJzEuMCd9XFxuYCArXG4gICAgICAgIGDwn5OdICoqQ29udGVudCBMZW5ndGg6KiogJHtwZXJzb25hLmNvbnRlbnQubGVuZ3RofSBjaGFyYWN0ZXJzXFxuYCArXG4gICAgICAgIGDwn5SXICoqVHJpZ2dlcnM6KiogJHttZXRhZGF0YS50cmlnZ2Vycz8ubGVuZ3RoIHx8IDB9IGtleXdvcmRzXFxuXFxuYCArXG4gICAgICAgIGBUaGlzIHBlcnNvbmEgbWVldHMgYWxsIHZhbGlkYXRpb24gcmVxdWlyZW1lbnRzIGFuZCBpcyByZWFkeSBmb3IgdXNlIWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChpc3N1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXBvcnQgKz0gYOKdjCAqKklzc3VlcyBGb3VuZCAoJHtpc3N1ZXMubGVuZ3RofSk6KipcXG5gO1xuICAgICAgICBpc3N1ZXMuZm9yRWFjaCgoaXNzdWUsIGkpID0+IHtcbiAgICAgICAgICByZXBvcnQgKz0gYCAgICR7aSArIDF9LiAke2lzc3VlfVxcbmA7XG4gICAgICAgIH0pO1xuICAgICAgICByZXBvcnQgKz0gJ1xcbic7XG4gICAgICB9XG5cbiAgICAgIGlmICh3YXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlcG9ydCArPSBg4pqg77iPICoqV2FybmluZ3MgKCR7d2FybmluZ3MubGVuZ3RofSk6KipcXG5gO1xuICAgICAgICB3YXJuaW5ncy5mb3JFYWNoKCh3YXJuaW5nLCBpKSA9PiB7XG4gICAgICAgICAgcmVwb3J0ICs9IGAgICAke2kgKyAxfS4gJHt3YXJuaW5nfVxcbmA7XG4gICAgICAgIH0pO1xuICAgICAgICByZXBvcnQgKz0gJ1xcbic7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc3N1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXBvcnQgKz0gYCoqUmVjb21tZW5kYXRpb246KiogRml4IHRoZSBpc3N1ZXMgYWJvdmUgYmVmb3JlIHVzaW5nIHRoaXMgcGVyc29uYS5cXG5gO1xuICAgICAgICByZXBvcnQgKz0gYFVzZSBcXGBlZGl0X3BlcnNvbmEgXCIke3BlcnNvbmEubWV0YWRhdGEubmFtZX1cIiBcImZpZWxkXCIgXCJ2YWx1ZVwiXFxgIHRvIG1ha2UgY29ycmVjdGlvbnMuYDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcG9ydCArPSBgKipTdGF0dXM6KiogUGVyc29uYSBpcyBmdW5jdGlvbmFsIGJ1dCBjb3VsZCBiZSBpbXByb3ZlZC5cXG5gO1xuICAgICAgICByZXBvcnQgKz0gYEFkZHJlc3Mgd2FybmluZ3MgYWJvdmUgZm9yIG9wdGltYWwgcGVyZm9ybWFuY2UuYDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudDogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogcmVwb3J0LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICB9XG5cbiAgLy8gcmV0cnlOZXR3b3JrT3BlcmF0aW9uIGhhcyBiZWVuIHJlbW92ZWQgd2l0aCBVcGRhdGVUb29sc1xuXG5cblxuXG5cblxuXG5cblxuICAvKipcbiAgICogQ29uZmlndXJlIGluZGljYXRvciBzZXR0aW5nc1xuICAgKi9cbiAgYXN5bmMgY29uZmlndXJlSW5kaWNhdG9yKGNvbmZpZzogUGFydGlhbDxJbmRpY2F0b3JDb25maWc+KSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFVwZGF0ZSB0aGUgY29uZmlndXJhdGlvblxuICAgICAgaWYgKGNvbmZpZy5lbmFibGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5pbmRpY2F0b3JDb25maWcuZW5hYmxlZCA9IGNvbmZpZy5lbmFibGVkO1xuICAgICAgfVxuICAgICAgaWYgKGNvbmZpZy5zdHlsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuaW5kaWNhdG9yQ29uZmlnLnN0eWxlID0gY29uZmlnLnN0eWxlO1xuICAgICAgfVxuICAgICAgaWYgKGNvbmZpZy5jdXN0b21Gb3JtYXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBWYWxpZGF0ZSBjdXN0b20gZm9ybWF0IGJlZm9yZSBhcHBseWluZ1xuICAgICAgICBjb25zdCB2YWxpZGF0aW9uID0gdmFsaWRhdGVDdXN0b21Gb3JtYXQoY29uZmlnLmN1c3RvbUZvcm1hdCk7XG4gICAgICAgIGlmICghdmFsaWRhdGlvbi52YWxpZCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgSW52YWxpZCBjdXN0b20gZm9ybWF0OiAke3ZhbGlkYXRpb24uZXJyb3J9YFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluZGljYXRvckNvbmZpZy5jdXN0b21Gb3JtYXQgPSBjb25maWcuY3VzdG9tRm9ybWF0O1xuICAgICAgfVxuICAgICAgaWYgKGNvbmZpZy5zaG93VmVyc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuaW5kaWNhdG9yQ29uZmlnLnNob3dWZXJzaW9uID0gY29uZmlnLnNob3dWZXJzaW9uO1xuICAgICAgfVxuICAgICAgaWYgKGNvbmZpZy5zaG93QXV0aG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5pbmRpY2F0b3JDb25maWcuc2hvd0F1dGhvciA9IGNvbmZpZy5zaG93QXV0aG9yO1xuICAgICAgfVxuICAgICAgaWYgKGNvbmZpZy5zaG93Q2F0ZWdvcnkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmluZGljYXRvckNvbmZpZy5zaG93Q2F0ZWdvcnkgPSBjb25maWcuc2hvd0NhdGVnb3J5O1xuICAgICAgfVxuICAgICAgaWYgKGNvbmZpZy5lbW9qaSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuaW5kaWNhdG9yQ29uZmlnLmVtb2ppID0gY29uZmlnLmVtb2ppO1xuICAgICAgfVxuICAgICAgaWYgKGNvbmZpZy5icmFja2V0U3R5bGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmluZGljYXRvckNvbmZpZy5icmFja2V0U3R5bGUgPSBjb25maWcuYnJhY2tldFN0eWxlO1xuICAgICAgfVxuXG4gICAgICAvLyBTaG93IGV4YW1wbGUgb2Ygd2hhdCB0aGUgaW5kaWNhdG9yIHdvdWxkIGxvb2sgbGlrZVxuICAgICAgbGV0IGV4YW1wbGVJbmRpY2F0b3IgPSBcIlwiO1xuICAgICAgaWYgKHRoaXMuYWN0aXZlUGVyc29uYSkge1xuICAgICAgICBjb25zdCBwZXJzb25hID0gdGhpcy5wZXJzb25hcy5nZXQodGhpcy5hY3RpdmVQZXJzb25hKTtcbiAgICAgICAgaWYgKHBlcnNvbmEpIHtcbiAgICAgICAgICBleGFtcGxlSW5kaWNhdG9yID0gZm9ybWF0SW5kaWNhdG9yKHRoaXMuaW5kaWNhdG9yQ29uZmlnLCB7XG4gICAgICAgICAgICBuYW1lOiBwZXJzb25hLm1ldGFkYXRhLm5hbWUsXG4gICAgICAgICAgICB2ZXJzaW9uOiBwZXJzb25hLm1ldGFkYXRhLnZlcnNpb24sXG4gICAgICAgICAgICBhdXRob3I6IHBlcnNvbmEubWV0YWRhdGEuYXV0aG9yLFxuICAgICAgICAgICAgY2F0ZWdvcnk6IHBlcnNvbmEubWV0YWRhdGEuY2F0ZWdvcnlcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gU2hvdyBleGFtcGxlIHdpdGggc2FtcGxlIGRhdGFcbiAgICAgICAgZXhhbXBsZUluZGljYXRvciA9IGZvcm1hdEluZGljYXRvcih0aGlzLmluZGljYXRvckNvbmZpZywge1xuICAgICAgICAgIG5hbWU6IFwiRXhhbXBsZSBQZXJzb25hXCIsXG4gICAgICAgICAgdmVyc2lvbjogXCIxLjBcIixcbiAgICAgICAgICBhdXRob3I6IFwiQHVzZXJuYW1lXCIsXG4gICAgICAgICAgY2F0ZWdvcnk6IFwiY3JlYXRpdmVcIlxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94pyFIEluZGljYXRvciBjb25maWd1cmF0aW9uIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5IVxuXG5DdXJyZW50IHNldHRpbmdzOlxuLSBFbmFibGVkOiAke3RoaXMuaW5kaWNhdG9yQ29uZmlnLmVuYWJsZWR9XG4tIFN0eWxlOiAke3RoaXMuaW5kaWNhdG9yQ29uZmlnLnN0eWxlfVxuLSBTaG93IFZlcnNpb246ICR7dGhpcy5pbmRpY2F0b3JDb25maWcuc2hvd1ZlcnNpb259XG4tIFNob3cgQXV0aG9yOiAke3RoaXMuaW5kaWNhdG9yQ29uZmlnLnNob3dBdXRob3J9XG4tIFNob3cgQ2F0ZWdvcnk6ICR7dGhpcy5pbmRpY2F0b3JDb25maWcuc2hvd0NhdGVnb3J5fVxuLSBFbW9qaTogJHt0aGlzLmluZGljYXRvckNvbmZpZy5lbW9qaX1cbi0gQnJhY2tldHM6ICR7dGhpcy5pbmRpY2F0b3JDb25maWcuYnJhY2tldFN0eWxlfVxuJHt0aGlzLmluZGljYXRvckNvbmZpZy5jdXN0b21Gb3JtYXQgPyBgLSBDdXN0b20gRm9ybWF0OiAke3RoaXMuaW5kaWNhdG9yQ29uZmlnLmN1c3RvbUZvcm1hdH1gIDogJyd9XG5cbkV4YW1wbGUgaW5kaWNhdG9yOiAke2V4YW1wbGVJbmRpY2F0b3IgfHwgXCIobm9uZSAtIGluZGljYXRvcnMgZGlzYWJsZWQpXCJ9XG5cbk5vdGU6IENvbmZpZ3VyYXRpb24gaXMgdGVtcG9yYXJ5IGZvciB0aGlzIHNlc3Npb24uIFRvIG1ha2UgcGVybWFuZW50LCBzZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzOlxuLSBET0xMSE9VU0VfSU5ESUNBVE9SX0VOQUJMRUQ9dHJ1ZS9mYWxzZVxuLSBET0xMSE9VU0VfSU5ESUNBVE9SX1NUWUxFPWZ1bGwvbWluaW1hbC9jb21wYWN0L2N1c3RvbVxuLSBET0xMSE9VU0VfSU5ESUNBVE9SX0ZPUk1BVD1cImN1c3RvbSBmb3JtYXQgdGVtcGxhdGVcIlxuLSBET0xMSE9VU0VfSU5ESUNBVE9SX1NIT1dfVkVSU0lPTj10cnVlL2ZhbHNlXG4tIERPTExIT1VTRV9JTkRJQ0FUT1JfU0hPV19BVVRIT1I9dHJ1ZS9mYWxzZVxuLSBET0xMSE9VU0VfSU5ESUNBVE9SX1NIT1dfQ0FURUdPUlk9dHJ1ZS9mYWxzZVxuLSBET0xMSE9VU0VfSU5ESUNBVE9SX0VNT0pJPfCfjq1cbi0gRE9MTEhPVVNFX0lORElDQVRPUl9CUkFDS0VUUz1zcXVhcmUvcm91bmQvY3VybHkvYW5nbGUvbm9uZWBcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBFcnJvciBjb25maWd1cmluZyBpbmRpY2F0b3I6ICR7U2VjdXJlRXJyb3JIYW5kbGVyLnNhbml0aXplRXJyb3IoZXJyb3IpLm1lc3NhZ2V9YFxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGN1cnJlbnQgaW5kaWNhdG9yIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIGFzeW5jIGNvbmZpZ3VyZUNvbGxlY3Rpb25TdWJtaXNzaW9uKGF1dG9TdWJtaXQ6IGJvb2xlYW4pIHtcbiAgICB0cnkge1xuICAgICAgLy8gU3RvcmUgdGhlIGNvbmZpZ3VyYXRpb24gaW4gZW52aXJvbm1lbnQgdmFyaWFibGVcbiAgICAgIGlmIChhdXRvU3VibWl0KSB7XG4gICAgICAgIHByb2Nlc3MuZW52LkRPTExIT1VTRV9BVVRPX1NVQk1JVF9UT19DT0xMRUNUSU9OID0gJ3RydWUnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlIHByb2Nlc3MuZW52LkRPTExIT1VTRV9BVVRPX1NVQk1JVF9UT19DT0xMRUNUSU9OO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtZXNzYWdlID0gYXV0b1N1Ym1pdCBcbiAgICAgICAgPyBcIuKchSBDb2xsZWN0aW9uIHN1Ym1pc3Npb24gZW5hYmxlZCEgQ29udGVudCB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgc3VibWl0dGVkIHRvIHRoZSBEb2xsaG91c2VNQ1AgY29sbGVjdGlvbiBhZnRlciBwb3J0Zm9saW8gdXBsb2FkLlwiXG4gICAgICAgIDogXCLinIUgQ29sbGVjdGlvbiBzdWJtaXNzaW9uIGRpc2FibGVkLiBDb250ZW50IHdpbGwgb25seSBiZSB1cGxvYWRlZCB0byB5b3VyIHBlcnNvbmFsIHBvcnRmb2xpby5cIjtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl9JHttZXNzYWdlfWBcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRXJyb3IgY29uZmlndXJpbmcgY29sbGVjdGlvbiBzdWJtaXNzaW9uJywgeyBlcnJvciB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBGYWlsZWQgdG8gY29uZmlndXJlIGNvbGxlY3Rpb24gc3VibWlzc2lvbjogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldENvbGxlY3Rpb25TdWJtaXNzaW9uQ29uZmlnKCkge1xuICAgIGNvbnN0IGF1dG9TdWJtaXRFbmFibGVkID0gcHJvY2Vzcy5lbnYuRE9MTEhPVVNFX0FVVE9fU1VCTUlUX1RPX0NPTExFQ1RJT04gPT09ICd0cnVlJztcbiAgICBcbiAgICBjb25zdCBtZXNzYWdlID0gYCoqQ29sbGVjdGlvbiBTdWJtaXNzaW9uIENvbmZpZ3VyYXRpb24qKlxcblxcbmAgK1xuICAgICAgYOKAoiAqKkF1dG8tc3VibWl0Kio6ICR7YXV0b1N1Ym1pdEVuYWJsZWQgPyAn4pyFIEVuYWJsZWQnIDogJ+KdjCBEaXNhYmxlZCd9XFxuXFxuYCArXG4gICAgICBgV2hlbiBhdXRvLXN1Ym1pdCBpcyBlbmFibGVkLCB0aGUgXFxgc3VibWl0X2NvbnRlbnRcXGAgdG9vbCB3aWxsOlxcbmAgK1xuICAgICAgYDEuIFVwbG9hZCBjb250ZW50IHRvIHlvdXIgR2l0SHViIHBvcnRmb2xpb1xcbmAgK1xuICAgICAgYDIuIEF1dG9tYXRpY2FsbHkgY3JlYXRlIGEgc3VibWlzc2lvbiBpc3N1ZSBpbiBEb2xsaG91c2VNQ1AvY29sbGVjdGlvblxcblxcbmAgK1xuICAgICAgYFRvIGNoYW5nZSB0aGlzIHNldHRpbmcsIHVzZTpcXG5gICtcbiAgICAgIGBcXGBcXGBcXGBcXG5jb25maWd1cmVfY29sbGVjdGlvbl9zdWJtaXNzaW9uIGF1dG9TdWJtaXQ6IHRydWUvZmFsc2VcXG5cXGBcXGBcXGBgO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfSR7bWVzc2FnZX1gXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZ2V0SW5kaWNhdG9yQ29uZmlnKCkge1xuICAgIC8vIFNob3cgY3VycmVudCBjb25maWd1cmF0aW9uIGFuZCBleGFtcGxlXG4gICAgbGV0IGV4YW1wbGVJbmRpY2F0b3IgPSBcIlwiO1xuICAgIGlmICh0aGlzLmFjdGl2ZVBlcnNvbmEpIHtcbiAgICAgIGNvbnN0IHBlcnNvbmEgPSB0aGlzLnBlcnNvbmFzLmdldCh0aGlzLmFjdGl2ZVBlcnNvbmEpO1xuICAgICAgaWYgKHBlcnNvbmEpIHtcbiAgICAgICAgZXhhbXBsZUluZGljYXRvciA9IGZvcm1hdEluZGljYXRvcih0aGlzLmluZGljYXRvckNvbmZpZywge1xuICAgICAgICAgIG5hbWU6IHBlcnNvbmEubWV0YWRhdGEubmFtZSxcbiAgICAgICAgICB2ZXJzaW9uOiBwZXJzb25hLm1ldGFkYXRhLnZlcnNpb24sXG4gICAgICAgICAgYXV0aG9yOiBwZXJzb25hLm1ldGFkYXRhLmF1dGhvcixcbiAgICAgICAgICBjYXRlZ29yeTogcGVyc29uYS5tZXRhZGF0YS5jYXRlZ29yeVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU2hvdyBleGFtcGxlIHdpdGggc2FtcGxlIGRhdGFcbiAgICAgIGV4YW1wbGVJbmRpY2F0b3IgPSBmb3JtYXRJbmRpY2F0b3IodGhpcy5pbmRpY2F0b3JDb25maWcsIHtcbiAgICAgICAgbmFtZTogXCJFeGFtcGxlIFBlcnNvbmFcIixcbiAgICAgICAgdmVyc2lvbjogXCIxLjBcIixcbiAgICAgICAgYXV0aG9yOiBcIkB1c2VybmFtZVwiLFxuICAgICAgICBjYXRlZ29yeTogXCJjcmVhdGl2ZVwiXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudDogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl98J+TiiBDdXJyZW50IEluZGljYXRvciBDb25maWd1cmF0aW9uOlxuXG5TZXR0aW5nczpcbi0gRW5hYmxlZDogJHt0aGlzLmluZGljYXRvckNvbmZpZy5lbmFibGVkfVxuLSBTdHlsZTogJHt0aGlzLmluZGljYXRvckNvbmZpZy5zdHlsZX1cbi0gU2hvdyBWZXJzaW9uOiAke3RoaXMuaW5kaWNhdG9yQ29uZmlnLnNob3dWZXJzaW9ufVxuLSBTaG93IEF1dGhvcjogJHt0aGlzLmluZGljYXRvckNvbmZpZy5zaG93QXV0aG9yfVxuLSBTaG93IENhdGVnb3J5OiAke3RoaXMuaW5kaWNhdG9yQ29uZmlnLnNob3dDYXRlZ29yeX1cbi0gRW1vamk6ICR7dGhpcy5pbmRpY2F0b3JDb25maWcuZW1vaml9XG4tIEJyYWNrZXRzOiAke3RoaXMuaW5kaWNhdG9yQ29uZmlnLmJyYWNrZXRTdHlsZX1cbi0gU2VwYXJhdG9yOiBcIiR7dGhpcy5pbmRpY2F0b3JDb25maWcuc2VwYXJhdG9yfVwiXG4ke3RoaXMuaW5kaWNhdG9yQ29uZmlnLmN1c3RvbUZvcm1hdCA/IGAtIEN1c3RvbSBGb3JtYXQ6ICR7dGhpcy5pbmRpY2F0b3JDb25maWcuY3VzdG9tRm9ybWF0fWAgOiAnJ31cblxuQXZhaWxhYmxlIHN0eWxlczpcbi0gZnVsbDogW/Cfjq0gUGVyc29uYSBOYW1lIHYxLjAgYnkgQGF1dGhvcl1cbi0gbWluaW1hbDog8J+OrSBQZXJzb25hIE5hbWVcbi0gY29tcGFjdDogW1BlcnNvbmEgTmFtZSB2MS4wXVxuLSBjdXN0b206IFVzZSB5b3VyIG93biBmb3JtYXQgd2l0aCBwbGFjZWhvbGRlcnNcblxuRXhhbXBsZSB3aXRoIGN1cnJlbnQgc2V0dGluZ3M6ICR7ZXhhbXBsZUluZGljYXRvciB8fCBcIihub25lIC0gaW5kaWNhdG9ycyBkaXNhYmxlZClcIn1cblxuUGxhY2Vob2xkZXJzIGZvciBjdXN0b20gZm9ybWF0OlxuLSB7ZW1vaml9IC0gVGhlIGNvbmZpZ3VyZWQgZW1vamlcbi0ge25hbWV9IC0gUGVyc29uYSBuYW1lXG4tIHt2ZXJzaW9ufSAtIFBlcnNvbmEgdmVyc2lvblxuLSB7YXV0aG9yfSAtIFBlcnNvbmEgYXV0aG9yXG4tIHtjYXRlZ29yeX0gLSBQZXJzb25hIGNhdGVnb3J5YFxuICAgICAgICB9XG4gICAgICBdXG4gICAgfTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEV4cG9ydCBhIHNpbmdsZSBwZXJzb25hXG4gICAqL1xuICBhc3luYyBleHBvcnRQZXJzb25hKHBlcnNvbmFOYW1lOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgLy8gVXNlIGEgc2luZ2xlIGxvb2t1cCB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnNcbiAgICAgIGxldCBwZXJzb25hID0gdGhpcy5wZXJzb25hcy5nZXQocGVyc29uYU5hbWUpO1xuICAgICAgaWYgKCFwZXJzb25hKSB7XG4gICAgICAgIC8vIFRyeSBieSBmaWxlbmFtZVxuICAgICAgICBwZXJzb25hID0gQXJyYXkuZnJvbSh0aGlzLnBlcnNvbmFzLnZhbHVlcygpKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PT0gcGVyc29uYU5hbWUpO1xuICAgICAgICBpZiAoIXBlcnNvbmEpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBQZXJzb25hIG5vdCBmb3VuZDogJHtwZXJzb25hTmFtZX1gXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgZXhwb3J0RGF0YSA9IHRoaXMucGVyc29uYUV4cG9ydGVyLmV4cG9ydFBlcnNvbmEocGVyc29uYSk7XG4gICAgICBjb25zdCBiYXNlNjQgPSB0aGlzLnBlcnNvbmFFeHBvcnRlci50b0Jhc2U2NChleHBvcnREYXRhKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucGVyc29uYUV4cG9ydGVyLmZvcm1hdEV4cG9ydFJlc3VsdChwZXJzb25hLCBiYXNlNjQpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfSR7cmVzdWx0fWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIEV4cG9ydCBmYWlsZWQ6ICR7U2VjdXJlRXJyb3JIYW5kbGVyLnNhbml0aXplRXJyb3IoZXJyb3IpLm1lc3NhZ2V9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXhwb3J0IGFsbCBwZXJzb25hc1xuICAgKi9cbiAgYXN5bmMgZXhwb3J0QWxsUGVyc29uYXMoaW5jbHVkZURlZmF1bHRzID0gdHJ1ZSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwZXJzb25hc0FycmF5ID0gQXJyYXkuZnJvbSh0aGlzLnBlcnNvbmFzLnZhbHVlcygpKTtcbiAgICAgIGNvbnN0IGJ1bmRsZSA9IHRoaXMucGVyc29uYUV4cG9ydGVyLmV4cG9ydEJ1bmRsZShwZXJzb25hc0FycmF5LCBpbmNsdWRlRGVmYXVsdHMpO1xuICAgICAgY29uc3QgYmFzZTY0ID0gdGhpcy5wZXJzb25hRXhwb3J0ZXIudG9CYXNlNjQoYnVuZGxlKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucGVyc29uYUV4cG9ydGVyLmZvcm1hdEJ1bmRsZVJlc3VsdChidW5kbGUsIGJhc2U2NCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl9JHtyZXN1bHR9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgRXhwb3J0IGZhaWxlZDogJHtTZWN1cmVFcnJvckhhbmRsZXIuc2FuaXRpemVFcnJvcihlcnJvcikubWVzc2FnZX1gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYSBwZXJzb25hXG4gICAqL1xuICBhc3luYyBpbXBvcnRQZXJzb25hKHNvdXJjZTogc3RyaW5nLCBvdmVyd3JpdGUgPSBmYWxzZSkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIXRoaXMucGVyc29uYUltcG9ydGVyKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIEltcG9ydCBmdW5jdGlvbmFsaXR5IG5vdCBhdmFpbGFibGUgKGluaXRpYWxpemF0aW9uIGluIHByb2dyZXNzKWBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5wZXJzb25hSW1wb3J0ZXIuaW1wb3J0UGVyc29uYShzb3VyY2UsIHRoaXMucGVyc29uYXMsIG92ZXJ3cml0ZSk7XG4gICAgICBcbiAgICAgIGlmIChyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAvLyBSZWxvYWQgcGVyc29uYXMgdG8gaW5jbHVkZSB0aGUgbmV3IG9uZVxuICAgICAgICBhd2FpdCB0aGlzLmxvYWRQZXJzb25hcygpO1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inIUgJHtyZXN1bHQubWVzc2FnZX1cXG5cXG5QZXJzb25hIFwiJHtyZXN1bHQucGVyc29uYT8ubWV0YWRhdGEubmFtZX1cIiBpcyBub3cgYXZhaWxhYmxlLlxcblRvdGFsIHBlcnNvbmFzOiAke3RoaXMucGVyc29uYXMuc2l6ZX1gXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MICR7cmVzdWx0Lm1lc3NhZ2V9YFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIEltcG9ydCBmYWlsZWQ6ICR7U2VjdXJlRXJyb3JIYW5kbGVyLnNhbml0aXplRXJyb3IoZXJyb3IpLm1lc3NhZ2V9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2hhcmUgYSBwZXJzb25hIHZpYSBVUkxcbiAgICovXG4gIGFzeW5jIHNoYXJlUGVyc29uYShwZXJzb25hTmFtZTogc3RyaW5nLCBleHBpcnlEYXlzID0gNykge1xuICAgIHRyeSB7XG4gICAgICAvLyBFbmhhbmNlZCBpbnB1dCB2YWxpZGF0aW9uXG4gICAgICBjb25zdCB2YWxpZGF0ZWRQZXJzb25hTmFtZSA9IE1DUElucHV0VmFsaWRhdG9yLnZhbGlkYXRlUGVyc29uYUlkZW50aWZpZXIocGVyc29uYU5hbWUpO1xuICAgICAgY29uc3QgdmFsaWRhdGVkRXhwaXJ5RGF5cyA9IE1DUElucHV0VmFsaWRhdG9yLnZhbGlkYXRlRXhwaXJ5RGF5cyhleHBpcnlEYXlzKTtcbiAgICAgIFxuICAgICAgY29uc3QgcGVyc29uYSA9IHRoaXMucGVyc29uYXMuZ2V0KHZhbGlkYXRlZFBlcnNvbmFOYW1lKTtcbiAgICAgIGlmICghcGVyc29uYSkge1xuICAgICAgICAvLyBUcnkgYnkgZmlsZW5hbWVcbiAgICAgICAgY29uc3QgYnlGaWxlbmFtZSA9IEFycmF5LmZyb20odGhpcy5wZXJzb25hcy52YWx1ZXMoKSkuZmluZChwID0+IHAuZmlsZW5hbWUgPT09IHZhbGlkYXRlZFBlcnNvbmFOYW1lKTtcbiAgICAgICAgaWYgKCFieUZpbGVuYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgUGVyc29uYSBub3QgZm91bmQ6ICR7dmFsaWRhdGVkUGVyc29uYU5hbWV9YFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHBlcnNvbmFOYW1lID0gYnlGaWxlbmFtZS5tZXRhZGF0YS5uYW1lO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnBlcnNvbmFTaGFyZXIuc2hhcmVQZXJzb25hKHRoaXMucGVyc29uYXMuZ2V0KHBlcnNvbmFOYW1lKSEsIHZhbGlkYXRlZEV4cGlyeURheXMpO1xuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfSR7cmVzdWx0Lm1lc3NhZ2V9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgU2hhcmUgZmFpbGVkOiAke1NlY3VyZUVycm9ySGFuZGxlci5zYW5pdGl6ZUVycm9yKGVycm9yKS5tZXNzYWdlfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBmcm9tIGEgc2hhcmVkIFVSTFxuICAgKi9cbiAgYXN5bmMgaW1wb3J0RnJvbVVybCh1cmw6IHN0cmluZywgb3ZlcndyaXRlID0gZmFsc2UpIHtcbiAgICB0cnkge1xuICAgICAgLy8gRW5oYW5jZWQgaW5wdXQgdmFsaWRhdGlvbiBmb3IgVVJMXG4gICAgICBjb25zdCB2YWxpZGF0ZWRVcmwgPSBNQ1BJbnB1dFZhbGlkYXRvci52YWxpZGF0ZUltcG9ydFVybCh1cmwpO1xuICAgICAgXG4gICAgICBjb25zdCBmZXRjaFJlc3VsdCA9IGF3YWl0IHRoaXMucGVyc29uYVNoYXJlci5pbXBvcnRGcm9tVXJsKHZhbGlkYXRlZFVybCk7XG4gICAgICBcbiAgICAgIGlmICghZmV0Y2hSZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCAke2ZldGNoUmVzdWx0Lm1lc3NhZ2V9YFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIEltcG9ydCB0aGUgZmV0Y2hlZCBkYXRhXG4gICAgICBpZiAoIXRoaXMucGVyc29uYUltcG9ydGVyKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIEltcG9ydCBmdW5jdGlvbmFsaXR5IG5vdCBhdmFpbGFibGUgKGluaXRpYWxpemF0aW9uIGluIHByb2dyZXNzKWBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY29uc3QgaW1wb3J0UmVzdWx0ID0gYXdhaXQgdGhpcy5wZXJzb25hSW1wb3J0ZXIuaW1wb3J0UGVyc29uYShcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoZmV0Y2hSZXN1bHQuZGF0YSksXG4gICAgICAgIHRoaXMucGVyc29uYXMsXG4gICAgICAgIG92ZXJ3cml0ZVxuICAgICAgKTtcblxuICAgICAgaWYgKGltcG9ydFJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgIC8vIFJlbG9hZCBwZXJzb25hc1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRQZXJzb25hcygpO1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inIUgU3VjY2Vzc2Z1bGx5IGltcG9ydGVkIGZyb20gVVJMIVxcblxcbiR7aW1wb3J0UmVzdWx0Lm1lc3NhZ2V9XFxuVG90YWwgcGVyc29uYXM6ICR7dGhpcy5wZXJzb25hcy5zaXplfWBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgJHtpbXBvcnRSZXN1bHQubWVzc2FnZX1gXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgSW1wb3J0IGZyb20gVVJMIGZhaWxlZDogJHtTZWN1cmVFcnJvckhhbmRsZXIuc2FuaXRpemVFcnJvcihlcnJvcikubWVzc2FnZX1gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQb3J0Zm9saW8gbWFuYWdlbWVudCBtZXRob2RzXG4gICAqL1xuXG4gIC8qKlxuICAgKiBDaGVjayBwb3J0Zm9saW8gc3RhdHVzIGluY2x1ZGluZyByZXBvc2l0b3J5IGV4aXN0ZW5jZSBhbmQgc3luYyBpbmZvcm1hdGlvblxuICAgKi9cbiAgYXN5bmMgcG9ydGZvbGlvU3RhdHVzKHVzZXJuYW1lPzogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFZhbGlkYXRlIHVzZXJuYW1lIHBhcmFtZXRlciBpZiBwcm92aWRlZFxuICAgICAgaWYgKHVzZXJuYW1lICYmIHR5cGVvZiB1c2VybmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YWxpZGF0ZVVzZXJuYW1lKHVzZXJuYW1lKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBJbnZhbGlkIHVzZXJuYW1lOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1ZhbGlkYXRpb24gZmFpbGVkJ31gXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gR2V0IGN1cnJlbnQgdXNlciBpZiB1c2VybmFtZSBub3QgcHJvdmlkZWRcbiAgICAgIGxldCB0YXJnZXRVc2VybmFtZSA9IHVzZXJuYW1lO1xuICAgICAgaWYgKCF0YXJnZXRVc2VybmFtZSkge1xuICAgICAgICBjb25zdCBhdXRoU3RhdHVzID0gYXdhaXQgdGhpcy5naXRodWJBdXRoTWFuYWdlci5nZXRBdXRoU3RhdHVzKCk7XG4gICAgICAgIGlmICghYXV0aFN0YXR1cy5pc0F1dGhlbnRpY2F0ZWQgfHwgIWF1dGhTdGF0dXMudXNlcm5hbWUpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCAqKkdpdEh1YiBBdXRoZW50aWNhdGlvbiBSZXF1aXJlZCoqXFxuXFxuYCArXG4gICAgICAgICAgICBg8J+UkCAqKlF1aWNrIFNldHVwKio6XFxuYCArXG4gICAgICAgICAgICBgMS4gUnVuOiBcXGBzZXR1cF9naXRodWJfYXV0aFxcYCB0byBhdXRoZW50aWNhdGVcXG5gICtcbiAgICAgICAgICAgIGAyLiBPciB1c2U6IFxcYGdoIGF1dGggbG9naW4gLS13ZWJcXGAgaWYgeW91IGhhdmUgR2l0SHViIENMSVxcblxcbmAgK1xuICAgICAgICAgICAgYPCfk50gKipXaGF0IHRoaXMgZW5hYmxlcyoqOlxcbmAgK1xuICAgICAgICAgICAgYOKAoiBVcGxvYWQgZWxlbWVudHMgdG8geW91ciBHaXRIdWIgcG9ydGZvbGlvXFxuYCArXG4gICAgICAgICAgICBg4oCiIFN5bmMgeW91ciBsb2NhbCBwb3J0Zm9saW8gd2l0aCBHaXRIdWJcXG5gICtcbiAgICAgICAgICAgIGDigKIgU2hhcmUgZWxlbWVudHMgd2l0aCB0aGUgY29tbXVuaXR5XFxuXFxuYCArXG4gICAgICAgICAgICBg8J+MkCAqKk5lZWQgaGVscD8qKiBWaXNpdDogaHR0cHM6Ly9kb2NzLmFudGhyb3BpYy5jb20vZW4vZG9jcy9jbGF1ZGUtY29kZS9vYXV0aC1zZXR1cGBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB0YXJnZXRVc2VybmFtZSA9IGF1dGhTdGF0dXMudXNlcm5hbWU7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGlmIHBvcnRmb2xpbyBleGlzdHNcbiAgICAgIGNvbnN0IHsgUG9ydGZvbGlvUmVwb01hbmFnZXIgfSA9IGF3YWl0IGltcG9ydCgnLi9wb3J0Zm9saW8vUG9ydGZvbGlvUmVwb01hbmFnZXIuanMnKTtcbiAgICAgIGNvbnN0IHBvcnRmb2xpb01hbmFnZXIgPSBuZXcgUG9ydGZvbGlvUmVwb01hbmFnZXIoKTtcbiAgICAgIGNvbnN0IHBvcnRmb2xpb0V4aXN0cyA9IGF3YWl0IHBvcnRmb2xpb01hbmFnZXIuY2hlY2tQb3J0Zm9saW9FeGlzdHModGFyZ2V0VXNlcm5hbWUpO1xuXG4gICAgICBsZXQgc3RhdHVzVGV4dCA9IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpffCfk4ogKipQb3J0Zm9saW8gU3RhdHVzIGZvciAke3RhcmdldFVzZXJuYW1lfSoqXFxuXFxuYDtcblxuICAgICAgaWYgKHBvcnRmb2xpb0V4aXN0cykge1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGDinIUgKipSZXBvc2l0b3J5Kio6IGRvbGxob3VzZS1wb3J0Zm9saW8gZXhpc3RzXFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBg8J+UlyAqKlVSTCoqOiBodHRwczovL2dpdGh1Yi5jb20vJHt0YXJnZXRVc2VybmFtZX0vZG9sbGhvdXNlLXBvcnRmb2xpb1xcblxcbmA7XG4gICAgICAgIFxuICAgICAgICAvLyBHZXQgbG9jYWwgZWxlbWVudHMgY291bnRcbiAgICAgICAgY29uc3QgbG9jYWxQb3J0Zm9saW9NYW5hZ2VyID0gUG9ydGZvbGlvTWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuICAgICAgICBjb25zdCBwZXJzb25hc1BhdGggPSBsb2NhbFBvcnRmb2xpb01hbmFnZXIuZ2V0RWxlbWVudERpcihFbGVtZW50VHlwZS5QRVJTT05BKTtcbiAgICAgICAgY29uc3Qgc2tpbGxzUGF0aCA9IGxvY2FsUG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKEVsZW1lbnRUeXBlLlNLSUxMKTtcbiAgICAgICAgY29uc3QgdGVtcGxhdGVzUGF0aCA9IGxvY2FsUG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKEVsZW1lbnRUeXBlLlRFTVBMQVRFKTtcbiAgICAgICAgY29uc3QgYWdlbnRzUGF0aCA9IGxvY2FsUG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKEVsZW1lbnRUeXBlLkFHRU5UKTtcbiAgICAgICAgY29uc3QgbWVtb3JpZXNQYXRoID0gbG9jYWxQb3J0Zm9saW9NYW5hZ2VyLmdldEVsZW1lbnREaXIoRWxlbWVudFR5cGUuTUVNT1JZKTtcbiAgICAgICAgY29uc3QgZW5zZW1ibGVzUGF0aCA9IGxvY2FsUG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKEVsZW1lbnRUeXBlLkVOU0VNQkxFKTtcblxuICAgICAgICBjb25zdCBbcGVyc29uYXMsIHNraWxscywgdGVtcGxhdGVzLCBhZ2VudHMsIG1lbW9yaWVzLCBlbnNlbWJsZXNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgIHRoaXMuY291bnRFbGVtZW50c0luRGlyKHBlcnNvbmFzUGF0aCksXG4gICAgICAgICAgdGhpcy5jb3VudEVsZW1lbnRzSW5EaXIoc2tpbGxzUGF0aCksXG4gICAgICAgICAgdGhpcy5jb3VudEVsZW1lbnRzSW5EaXIodGVtcGxhdGVzUGF0aCksXG4gICAgICAgICAgdGhpcy5jb3VudEVsZW1lbnRzSW5EaXIoYWdlbnRzUGF0aCksXG4gICAgICAgICAgdGhpcy5jb3VudEVsZW1lbnRzSW5EaXIobWVtb3JpZXNQYXRoKSxcbiAgICAgICAgICB0aGlzLmNvdW50RWxlbWVudHNJbkRpcihlbnNlbWJsZXNQYXRoKVxuICAgICAgICBdKTtcblxuICAgICAgICBjb25zdCB0b3RhbEVsZW1lbnRzID0gcGVyc29uYXMgKyBza2lsbHMgKyB0ZW1wbGF0ZXMgKyBhZ2VudHMgKyBtZW1vcmllcyArIGVuc2VtYmxlcztcbiAgICAgICAgc3RhdHVzVGV4dCArPSBg8J+TiCAqKkxvY2FsIEVsZW1lbnRzKio6XFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgICDigKIgUGVyc29uYXM6ICR7cGVyc29uYXN9XFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgICDigKIgU2tpbGxzOiAke3NraWxsc31cXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAgIOKAoiBUZW1wbGF0ZXM6ICR7dGVtcGxhdGVzfVxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYCAg4oCiIEFnZW50czogJHthZ2VudHN9XFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgICDigKIgTWVtb3JpZXM6ICR7bWVtb3JpZXN9XFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgICDigKIgRW5zZW1ibGVzOiAke2Vuc2VtYmxlc31cXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAgIOKAoiAqKlRvdGFsKio6ICR7dG90YWxFbGVtZW50c31cXG5cXG5gO1xuXG4gICAgICAgIHN0YXR1c1RleHQgKz0gYPCflIQgKipTeW5jIFN0YXR1cyoqOiBVc2Ugc3luY19wb3J0Zm9saW8gdG8gdXBkYXRlIEdpdEh1YlxcbmA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGDinYwgKipSZXBvc2l0b3J5Kio6IE5vIHBvcnRmb2xpbyBmb3VuZFxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYPCfkqEgKipOZXh0IFN0ZXAqKjogVXNlIGluaXRfcG9ydGZvbGlvIHRvIGNyZWF0ZSBvbmVcXG5cXG5gO1xuICAgICAgICBcbiAgICAgICAgc3RhdHVzVGV4dCArPSBg8J+TnSAqKldoYXQgeW91J2xsIGdldCoqOlxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYCAg4oCiIEdpdEh1YiByZXBvc2l0b3J5IGZvciB5b3VyIGVsZW1lbnRzXFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgICDigKIgT3JnYW5pemVkIGZvbGRlciBzdHJ1Y3R1cmVcXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAgIOKAoiBSRUFETUUgd2l0aCB1c2FnZSBpbnN0cnVjdGlvbnNcXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAgIOKAoiBFYXN5IHNoYXJpbmcgYW5kIGJhY2t1cFxcbmA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogc3RhdHVzVGV4dFxuICAgICAgICB9XVxuICAgICAgfTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBGYWlsZWQgdG8gY2hlY2sgcG9ydGZvbGlvIHN0YXR1czogJHtTZWN1cmVFcnJvckhhbmRsZXIuc2FuaXRpemVFcnJvcihlcnJvcikubWVzc2FnZX1gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGEgbmV3IEdpdEh1YiBwb3J0Zm9saW8gcmVwb3NpdG9yeVxuICAgKi9cbiAgYXN5bmMgaW5pdFBvcnRmb2xpbyhvcHRpb25zOiB7cmVwb3NpdG9yeU5hbWU/OiBzdHJpbmc7IHByaXZhdGU/OiBib29sZWFuOyBkZXNjcmlwdGlvbj86IHN0cmluZ30pIHtcbiAgICB0cnkge1xuICAgICAgLy8gQ2hlY2sgYXV0aGVudGljYXRpb25cbiAgICAgIGNvbnN0IGF1dGhTdGF0dXMgPSBhd2FpdCB0aGlzLmdpdGh1YkF1dGhNYW5hZ2VyLmdldEF1dGhTdGF0dXMoKTtcbiAgICAgIGlmICghYXV0aFN0YXR1cy5pc0F1dGhlbnRpY2F0ZWQgfHwgIWF1dGhTdGF0dXMudXNlcm5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgKipHaXRIdWIgQXV0aGVudGljYXRpb24gUmVxdWlyZWQqKlxcblxcbmAgK1xuICAgICAgICAgICAgYPCflJAgKipRdWljayBTZXR1cCoqOlxcbmAgK1xuICAgICAgICAgICAgYDEuIFJ1bjogXFxgc2V0dXBfZ2l0aHViX2F1dGhcXGAgdG8gYXV0aGVudGljYXRlXFxuYCArXG4gICAgICAgICAgICBgMi4gT3IgdXNlOiBcXGBnaCBhdXRoIGxvZ2luIC0td2ViXFxgIGlmIHlvdSBoYXZlIEdpdEh1YiBDTElcXG5cXG5gICtcbiAgICAgICAgICAgIGDwn5OdICoqV2hhdCB0aGlzIGVuYWJsZXMqKjpcXG5gICtcbiAgICAgICAgICAgIGDigKIgVXBsb2FkIGVsZW1lbnRzIHRvIHlvdXIgR2l0SHViIHBvcnRmb2xpb1xcbmAgK1xuICAgICAgICAgICAgYOKAoiBTeW5jIHlvdXIgbG9jYWwgcG9ydGZvbGlvIHdpdGggR2l0SHViXFxuYCArXG4gICAgICAgICAgICBg4oCiIFNoYXJlIGVsZW1lbnRzIHdpdGggdGhlIGNvbW11bml0eVxcblxcbmAgK1xuICAgICAgICAgICAgYPCfjJAgKipOZWVkIGhlbHA/KiogVmlzaXQ6IGh0dHBzOi8vZG9jcy5hbnRocm9waWMuY29tL2VuL2RvY3MvY2xhdWRlLWNvZGUvb2F1dGgtc2V0dXBgXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdXNlcm5hbWUgPSBhdXRoU3RhdHVzLnVzZXJuYW1lO1xuXG4gICAgICAvLyBDaGVjayBpZiBwb3J0Zm9saW8gYWxyZWFkeSBleGlzdHNcbiAgICAgIGNvbnN0IHsgUG9ydGZvbGlvUmVwb01hbmFnZXIgfSA9IGF3YWl0IGltcG9ydCgnLi9wb3J0Zm9saW8vUG9ydGZvbGlvUmVwb01hbmFnZXIuanMnKTtcbiAgICAgIGNvbnN0IHBvcnRmb2xpb01hbmFnZXIgPSBuZXcgUG9ydGZvbGlvUmVwb01hbmFnZXIoKTtcbiAgICAgIGNvbnN0IHBvcnRmb2xpb0V4aXN0cyA9IGF3YWl0IHBvcnRmb2xpb01hbmFnZXIuY2hlY2tQb3J0Zm9saW9FeGlzdHModXNlcm5hbWUpO1xuXG4gICAgICBpZiAocG9ydGZvbGlvRXhpc3RzKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94pyFIFBvcnRmb2xpbyBhbHJlYWR5IGV4aXN0cyBhdCBodHRwczovL2dpdGh1Yi5jb20vJHt1c2VybmFtZX0vZG9sbGhvdXNlLXBvcnRmb2xpb1xcblxcblVzZSBwb3J0Zm9saW9fc3RhdHVzIHRvIHNlZSBkZXRhaWxzIG9yIHN5bmNfcG9ydGZvbGlvIHRvIHVwZGF0ZSBpdC5gXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gQ3JlYXRlIHBvcnRmb2xpbyB3aXRoIGV4cGxpY2l0IGNvbnNlbnRcbiAgICAgIGNvbnN0IHBvcnRmb2xpb1VybCA9IGF3YWl0IHBvcnRmb2xpb01hbmFnZXIuY3JlYXRlUG9ydGZvbGlvKHVzZXJuYW1lLCB0cnVlKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3wn46JICoqUG9ydGZvbGlvIENyZWF0ZWQgU3VjY2Vzc2Z1bGx5ISoqXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgYOKchSAqKlJlcG9zaXRvcnkqKjogaHR0cHM6Ly9naXRodWIuY29tLyR7dXNlcm5hbWV9L2RvbGxob3VzZS1wb3J0Zm9saW9cXG5gICtcbiAgICAgICAgICAgICAgICBg8J+TgSAqKlN0cnVjdHVyZSoqOiBPcmdhbml6ZWQgZm9sZGVycyBmb3IgYWxsIGVsZW1lbnQgdHlwZXNcXG5gICtcbiAgICAgICAgICAgICAgICBg8J+TnSAqKlJFQURNRSoqOiBVc2FnZSBpbnN0cnVjdGlvbnMgaW5jbHVkZWRcXG5gICtcbiAgICAgICAgICAgICAgICBg8J+UhCAqKk5leHQgU3RlcCoqOiBVc2Ugc3luY19wb3J0Zm9saW8gdG8gdXBsb2FkIHlvdXIgZWxlbWVudHNcXG5cXG5gICtcbiAgICAgICAgICAgICAgICBgWW91ciBwb3J0Zm9saW8gaXMgcmVhZHkgZm9yIHNoYXJpbmcgeW91ciBEb2xsaG91c2VNQ1AgY3JlYXRpb25zIWBcbiAgICAgICAgfV1cbiAgICAgIH07XG5cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgRmFpbGVkIHRvIGluaXRpYWxpemUgcG9ydGZvbGlvOiAke1NlY3VyZUVycm9ySGFuZGxlci5zYW5pdGl6ZUVycm9yKGVycm9yKS5tZXNzYWdlfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyZSBwb3J0Zm9saW8gc2V0dGluZ3NcbiAgICovXG4gIGFzeW5jIHBvcnRmb2xpb0NvbmZpZyhvcHRpb25zOiB7YXV0b1N5bmM/OiBib29sZWFuOyBkZWZhdWx0VmlzaWJpbGl0eT86IHN0cmluZzsgYXV0b1N1Ym1pdD86IGJvb2xlYW47IHJlcG9zaXRvcnlOYW1lPzogc3RyaW5nfSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb25maWdNYW5hZ2VyID0gQ29uZmlnTWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuICAgICAgYXdhaXQgY29uZmlnTWFuYWdlci5sb2FkQ29uZmlnKCk7XG5cbiAgICAgIGxldCBzdGF0dXNUZXh0ID0gYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94pqZ77iPICoqUG9ydGZvbGlvIENvbmZpZ3VyYXRpb24qKlxcblxcbmA7XG5cbiAgICAgIC8vIFVwZGF0ZSBzZXR0aW5ncyBpZiBwcm92aWRlZFxuICAgICAgaWYgKG9wdGlvbnMuYXV0b1N5bmMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBUaGlzIHdvdWxkIGJlIGltcGxlbWVudGVkIHdoZW4gYXV0by1zeW5jIGZlYXR1cmUgaXMgYWRkZWRcbiAgICAgICAgc3RhdHVzVGV4dCArPSBg8J+UhCBBdXRvLXN5bmM6ICR7b3B0aW9ucy5hdXRvU3luYyA/ICdFbmFibGVkJyA6ICdEaXNhYmxlZCd9IChDb21pbmcgc29vbilcXG5gO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5kZWZhdWx0VmlzaWJpbGl0eSkge1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGDwn5SSIERlZmF1bHQgdmlzaWJpbGl0eTogJHtvcHRpb25zLmRlZmF1bHRWaXNpYmlsaXR5fVxcbmA7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmF1dG9TdWJtaXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBOb3RlOiBBdXRvLXN1Ym1pdCBjb25maWd1cmF0aW9uIHdvdWxkIGJlIGltcGxlbWVudGVkIGhlcmVcbiAgICAgICAgLy8gRm9yIG5vdywgd2UnbGwganVzdCBzaG93IHRoZSBzdGF0dXNcbiAgICAgICAgc3RhdHVzVGV4dCArPSBg8J+TpCBBdXRvLXN1Ym1pdCB0byBjb2xsZWN0aW9uOiAke29wdGlvbnMuYXV0b1N1Ym1pdCA/ICdFbmFibGVkJyA6ICdEaXNhYmxlZCd9IChDb21pbmcgc29vbilcXG5gO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5yZXBvc2l0b3J5TmFtZSkge1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGDwn5OBIFJlcG9zaXRvcnkgbmFtZTogJHtvcHRpb25zLnJlcG9zaXRvcnlOYW1lfSAoQ3VzdG9tIG5hbWVzIGNvbWluZyBzb29uKVxcbmA7XG4gICAgICB9XG5cbiAgICAgIC8vIFNob3cgY3VycmVudCBjb25maWd1cmF0aW9uXG4gICAgICBzdGF0dXNUZXh0ICs9IGBcXG7wn5OLICoqQ3VycmVudCBTZXR0aW5ncyoqOlxcbmA7XG4gICAgICBzdGF0dXNUZXh0ICs9IGAgIOKAoiBBdXRvLXN1Ym1pdDogRGlzYWJsZWQgKENvbWluZyBzb29uKVxcbmA7XG4gICAgICBzdGF0dXNUZXh0ICs9IGAgIOKAoiBSZXBvc2l0b3J5IG5hbWU6IGRvbGxob3VzZS1wb3J0Zm9saW8gKGRlZmF1bHQpXFxuYDtcbiAgICAgIHN0YXR1c1RleHQgKz0gYCAg4oCiIERlZmF1bHQgdmlzaWJpbGl0eTogcHVibGljXFxuYDtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBzdGF0dXNUZXh0XG4gICAgICAgIH1dXG4gICAgICB9O1xuXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIEZhaWxlZCB0byBjb25maWd1cmUgcG9ydGZvbGlvOiAke1NlY3VyZUVycm9ySGFuZGxlci5zYW5pdGl6ZUVycm9yKGVycm9yKS5tZXNzYWdlfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN5bmMgcG9ydGZvbGlvIHdpdGggR2l0SHViXG4gICAqL1xuICBhc3luYyBzeW5jUG9ydGZvbGlvKG9wdGlvbnM6IHtkaXJlY3Rpb246IHN0cmluZzsgZm9yY2U6IGJvb2xlYW47IGRyeVJ1bjogYm9vbGVhbn0pIHtcbiAgICB0cnkge1xuICAgICAgLy8gQ2hlY2sgYXV0aGVudGljYXRpb25cbiAgICAgIGNvbnN0IGF1dGhTdGF0dXMgPSBhd2FpdCB0aGlzLmdpdGh1YkF1dGhNYW5hZ2VyLmdldEF1dGhTdGF0dXMoKTtcbiAgICAgIGlmICghYXV0aFN0YXR1cy5pc0F1dGhlbnRpY2F0ZWQgfHwgIWF1dGhTdGF0dXMudXNlcm5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgKipHaXRIdWIgQXV0aGVudGljYXRpb24gUmVxdWlyZWQqKlxcblxcbmAgK1xuICAgICAgICAgICAgYPCflJAgKipRdWljayBTZXR1cCoqOlxcbmAgK1xuICAgICAgICAgICAgYDEuIFJ1bjogXFxgc2V0dXBfZ2l0aHViX2F1dGhcXGAgdG8gYXV0aGVudGljYXRlXFxuYCArXG4gICAgICAgICAgICBgMi4gT3IgdXNlOiBcXGBnaCBhdXRoIGxvZ2luIC0td2ViXFxgIGlmIHlvdSBoYXZlIEdpdEh1YiBDTElcXG5cXG5gICtcbiAgICAgICAgICAgIGDwn5OdICoqV2hhdCB0aGlzIGVuYWJsZXMqKjpcXG5gICtcbiAgICAgICAgICAgIGDigKIgVXBsb2FkIGVsZW1lbnRzIHRvIHlvdXIgR2l0SHViIHBvcnRmb2xpb1xcbmAgK1xuICAgICAgICAgICAgYOKAoiBTeW5jIHlvdXIgbG9jYWwgcG9ydGZvbGlvIHdpdGggR2l0SHViXFxuYCArXG4gICAgICAgICAgICBg4oCiIFNoYXJlIGVsZW1lbnRzIHdpdGggdGhlIGNvbW11bml0eVxcblxcbmAgK1xuICAgICAgICAgICAgYPCfjJAgKipOZWVkIGhlbHA/KiogVmlzaXQ6IGh0dHBzOi8vZG9jcy5hbnRocm9waWMuY29tL2VuL2RvY3MvY2xhdWRlLWNvZGUvb2F1dGgtc2V0dXBgXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdXNlcm5hbWUgPSBhdXRoU3RhdHVzLnVzZXJuYW1lO1xuXG4gICAgICAvLyBDaGVjayBpZiBwb3J0Zm9saW8gZXhpc3RzXG4gICAgICBjb25zdCB7IFBvcnRmb2xpb1JlcG9NYW5hZ2VyIH0gPSBhd2FpdCBpbXBvcnQoJy4vcG9ydGZvbGlvL1BvcnRmb2xpb1JlcG9NYW5hZ2VyLmpzJyk7XG4gICAgICBjb25zdCBwb3J0Zm9saW9NYW5hZ2VyID0gbmV3IFBvcnRmb2xpb1JlcG9NYW5hZ2VyKCk7XG4gICAgICBcbiAgICAgIC8vIENSSVRJQ0FMIEZJWDogU2V0IEdpdEh1YiB0b2tlbiBsaWtlIHN1Ym1pdF9jb250ZW50IGRvZXNcbiAgICAgIC8vIFdpdGhvdXQgdGhpcywgY2hlY2tQb3J0Zm9saW9FeGlzdHMgZmFpbHMgYmVjYXVzZSBpdCBjYW4ndCBhdXRoZW50aWNhdGUgdG8gR2l0SHViXG4gICAgICBjb25zdCB7IFRva2VuTWFuYWdlciB9ID0gYXdhaXQgaW1wb3J0KCcuL3NlY3VyaXR5L3Rva2VuTWFuYWdlci5qcycpO1xuICAgICAgY29uc3QgdG9rZW4gPSBhd2FpdCBUb2tlbk1hbmFnZXIuZ2V0R2l0SHViVG9rZW5Bc3luYygpO1xuICAgICAgaWYgKCF0b2tlbikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBHaXRIdWIgYXV0aGVudGljYXRpb24gcmVxdWlyZWQuIFBsZWFzZSBhdXRoZW50aWNhdGUgZmlyc3QgdXNpbmcgc2V0dXBfZ2l0aHViX2F1dGguYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBwb3J0Zm9saW9NYW5hZ2VyLnNldFRva2VuKHRva2VuKTtcbiAgICAgIFxuICAgICAgY29uc3QgcG9ydGZvbGlvRXhpc3RzID0gYXdhaXQgcG9ydGZvbGlvTWFuYWdlci5jaGVja1BvcnRmb2xpb0V4aXN0cyh1c2VybmFtZSk7XG5cbiAgICAgIGlmICghcG9ydGZvbGlvRXhpc3RzKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MICoqTm8gUG9ydGZvbGlvIFJlcG9zaXRvcnkgRm91bmQqKlxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYPCfj6AgKipRdWljayBTZXR1cCoqOlxcbmAgK1xuICAgICAgICAgICAgICAgICAgYDEuIFJ1bjogXFxgaW5pdF9wb3J0Zm9saW9cXGAgdG8gY3JlYXRlIHlvdXIgR2l0SHViIHBvcnRmb2xpb1xcbmAgK1xuICAgICAgICAgICAgICAgICAgYDIuIFRoaXMgY3JlYXRlczogaHR0cHM6Ly9naXRodWIuY29tL1t1c2VybmFtZV0vZG9sbGhvdXNlLXBvcnRmb2xpb1xcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYPCfk50gKipXaGF0IHlvdSdsbCBnZXQqKjpcXG5gICtcbiAgICAgICAgICAgICAgICAgIGDigKIgUHVibGljIHJlcG9zaXRvcnkgdG8gc2hvd2Nhc2UgeW91ciBBSSBlbGVtZW50c1xcbmAgK1xuICAgICAgICAgICAgICAgICAgYOKAoiBPcmdhbml6ZWQgc3RydWN0dXJlIGZvciBwZXJzb25hcywgc2tpbGxzLCB0ZW1wbGF0ZXMsIGFuZCBhZ2VudHNcXG5gICtcbiAgICAgICAgICAgICAgICAgIGDigKIgQXV0b21hdGljIHN5bmNpbmcgb2YgeW91ciBsb2NhbCBwb3J0Zm9saW9cXG5gICtcbiAgICAgICAgICAgICAgICAgIGDigKIgQ29tbXVuaXR5IHNoYXJpbmcgY2FwYWJpbGl0aWVzXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBg8J+agCAqKkFmdGVyIHNldHVwKio6IFVzZSBcXGBzeW5jX3BvcnRmb2xpb1xcYCB0byB1cGxvYWQgeW91ciBjb250ZW50IWBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5kcnlSdW4pIHtcbiAgICAgICAgLy8gU2hvdyB3aGF0IHdvdWxkIGJlIHN5bmNlZFxuICAgICAgICBjb25zdCBsb2NhbFBvcnRmb2xpb01hbmFnZXIgPSBQb3J0Zm9saW9NYW5hZ2VyLmdldEluc3RhbmNlKCk7XG4gICAgICAgIFxuICAgICAgICBjb25zdCBlbGVtZW50VHlwZUNvdW50czogUmVjb3JkPHN0cmluZywgbnVtYmVyIHwgc3RyaW5nPiA9IHt9O1xuICAgICAgICBjb25zdCBlbGVtZW50VHlwZUVycm9yczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgXG4gICAgICAgIC8vIEdldCBlbGVtZW50IGNvdW50cyB3aXRoIGJldHRlciBlcnJvciBoYW5kbGluZ1xuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnRUeXBlIG9mIFsncGVyc29uYXMnLCAnc2tpbGxzJywgJ3RlbXBsYXRlcycsICdhZ2VudHMnXSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IGF3YWl0IHRoaXMuZ2V0RWxlbWVudHNMaXN0KGVsZW1lbnRUeXBlKTtcbiAgICAgICAgICAgIGVsZW1lbnRUeXBlQ291bnRzW2VsZW1lbnRUeXBlXSA9IGVsZW1lbnRzLmxlbmd0aDtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgICBlbGVtZW50VHlwZUNvdW50c1tlbGVtZW50VHlwZV0gPSAnRVJST1InO1xuICAgICAgICAgICAgZWxlbWVudFR5cGVFcnJvcnMucHVzaChgJHtlbGVtZW50VHlwZX06ICR7ZXJyb3IubWVzc2FnZSB8fCAnVW5rbm93biBlcnJvcid9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGRyeVJ1blRleHQgPSBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3wn5SNICoqRHJ5IFJ1biAtIFBvcnRmb2xpbyBTeW5jIFByZXZpZXcqKlxcblxcbmA7XG4gICAgICAgIGRyeVJ1blRleHQgKz0gYPCfk6QgKipFbGVtZW50cyB0byBzeW5jKiogKCR7b3B0aW9ucy5kaXJlY3Rpb259KTpcXG5gO1xuICAgICAgICBkcnlSdW5UZXh0ICs9IGAgIOKAoiBQZXJzb25hczogJHtlbGVtZW50VHlwZUNvdW50cy5wZXJzb25hc31cXG5gO1xuICAgICAgICBkcnlSdW5UZXh0ICs9IGAgIOKAoiBTa2lsbHM6ICR7ZWxlbWVudFR5cGVDb3VudHMuc2tpbGxzfVxcbmA7XG4gICAgICAgIGRyeVJ1blRleHQgKz0gYCAg4oCiIFRlbXBsYXRlczogJHtlbGVtZW50VHlwZUNvdW50cy50ZW1wbGF0ZXN9XFxuYDtcbiAgICAgICAgZHJ5UnVuVGV4dCArPSBgICDigKIgQWdlbnRzOiAke2VsZW1lbnRUeXBlQ291bnRzLmFnZW50c31cXG5cXG5gO1xuICAgICAgICBcbiAgICAgICAgLy8gSW5jbHVkZSBhbnkgZXJyb3JzIGVuY291bnRlcmVkIGR1cmluZyBkcnkgcnVuXG4gICAgICAgIGlmIChlbGVtZW50VHlwZUVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZHJ5UnVuVGV4dCArPSBg4pqg77iPICoqRXJyb3JzIGZvdW5kIGR1cmluZyBwcmV2aWV3OioqXFxuYDtcbiAgICAgICAgICBmb3IgKGNvbnN0IGVycm9yIG9mIGVsZW1lbnRUeXBlRXJyb3JzKSB7XG4gICAgICAgICAgICBkcnlSdW5UZXh0ICs9IGAgIOKAoiAke2Vycm9yfVxcbmA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRyeVJ1blRleHQgKz0gYFxcbmA7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGRyeVJ1blRleHQgKz0gYPCfjq8gKipUYXJnZXQqKjogaHR0cHM6Ly9naXRodWIuY29tLyR7dXNlcm5hbWV9L2RvbGxob3VzZS1wb3J0Zm9saW9cXG5gO1xuICAgICAgICBkcnlSdW5UZXh0ICs9IGDimqDvuI8gICoqTm90ZSoqOiBUaGlzIGlzIGEgcHJldmlldy4gUmVtb3ZlIGRyeV9ydW49dHJ1ZSB0byBwZXJmb3JtIGFjdHVhbCBzeW5jLmA7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBkcnlSdW5UZXh0XG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gRm9yIG5vdywgaW1wbGVtZW50IGJhc2ljIHB1c2ggZnVuY3Rpb25hbGl0eVxuICAgICAgaWYgKG9wdGlvbnMuZGlyZWN0aW9uID09PSAncHVzaCcgfHwgb3B0aW9ucy5kaXJlY3Rpb24gPT09ICdib3RoJykge1xuICAgICAgICBsZXQgc3luY0NvdW50ID0gMDtcbiAgICAgICAgbGV0IHRvdGFsRWxlbWVudHMgPSAwO1xuICAgICAgICBsZXQgc3luY1RleHQgPSBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3wn5SEICoqU3luY2luZyBQb3J0Zm9saW8uLi4qKlxcblxcbmA7XG5cbiAgICAgICAgLy8gVVggSU1QUk9WRU1FTlQ6IENhbGN1bGF0ZSB0b3RhbCBlbGVtZW50cyBmb3IgcHJvZ3Jlc3MgdHJhY2tpbmdcbiAgICAgICAgY29uc3QgZWxlbWVudFR5cGVzID0gWydwZXJzb25hcycsICdza2lsbHMnLCAndGVtcGxhdGVzJywgJ2FnZW50cyddIGFzIGNvbnN0O1xuICAgICAgICBjb25zdCBlbGVtZW50Q291bnRzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge307XG4gICAgICAgIGNvbnN0IGZhaWxlZEVsZW1lbnRzOiBBcnJheTx7dHlwZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIGVycm9yOiBzdHJpbmd9PiA9IFtdO1xuICAgICAgICBcbiAgICAgICAgLy8gUHJlLWNhbGN1bGF0ZSB0b3RhbHMgZm9yIGJldHRlciBwcm9ncmVzcyBpbmRpY2F0b3JzXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgc3luY1RleHQgKz0gYPCfk4ogKipDYWxjdWxhdGluZyBzeW5jIHNjb3BlLi4uKipcXG5gO1xuICAgICAgICAgIGZvciAoY29uc3QgZWxlbWVudFR5cGUgb2YgZWxlbWVudFR5cGVzKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IGF3YWl0IHRoaXMuZ2V0RWxlbWVudHNMaXN0KGVsZW1lbnRUeXBlKTtcbiAgICAgICAgICAgICAgZWxlbWVudENvdW50c1tlbGVtZW50VHlwZV0gPSBlbGVtZW50cy5sZW5ndGg7XG4gICAgICAgICAgICAgIHRvdGFsRWxlbWVudHMgKz0gZWxlbWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgICAgICBlbGVtZW50Q291bnRzW2VsZW1lbnRUeXBlXSA9IDA7XG4gICAgICAgICAgICAgIGxvZ2dlci53YXJuKGBGYWlsZWQgdG8gY291bnQgJHtlbGVtZW50VHlwZX1gLCB7IGVycm9yOiBlcnJvci5tZXNzYWdlIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICBzeW5jVGV4dCArPSBgXFxu8J+OryAqKlJlYWR5IHRvIHN5bmMgJHt0b3RhbEVsZW1lbnRzfSBlbGVtZW50czoqKlxcbmA7XG4gICAgICAgICAgZm9yIChjb25zdCBbdHlwZSwgY291bnRdIG9mIE9iamVjdC5lbnRyaWVzKGVsZW1lbnRDb3VudHMpKSB7XG4gICAgICAgICAgICBjb25zdCBpY29uID0gY291bnQgPiAwID8gJ+KchScgOiAn4pqqJztcbiAgICAgICAgICAgIHN5bmNUZXh0ICs9IGAgICR7aWNvbn0gJHt0eXBlfTogJHtjb3VudH0gZWxlbWVudHNcXG5gO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzeW5jVGV4dCArPSBgXFxu8J+agCAqKlN0YXJ0aW5nIHN5bmMgcHJvY2Vzcy4uLioqXFxuXFxuYDtcbiAgICAgICAgICBcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgIHN5bmNUZXh0ICs9IGBcXG7imqDvuI8gKipXYXJuaW5nKio6IENvdWxkIG5vdCBjYWxjdWxhdGUgc3luYyBzY29wZTogJHtlcnJvci5tZXNzYWdlfVxcblxcbmA7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIFVYIElNUFJPVkVNRU5UOiBQcm9jZXNzIGVhY2ggZWxlbWVudCB0eXBlIHdpdGggcHJvZ3Jlc3MgdHJhY2tpbmdcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50VHlwZSBvZiBlbGVtZW50VHlwZXMpIHtcbiAgICAgICAgICBjb25zdCB0eXBlQ291bnQgPSBlbGVtZW50Q291bnRzW2VsZW1lbnRUeXBlXSB8fCAwO1xuICAgICAgICAgIGlmICh0eXBlQ291bnQgPT09IDApIHtcbiAgICAgICAgICAgIHN5bmNUZXh0ICs9IGDij6kgKipTa2lwcGluZyAke2VsZW1lbnRUeXBlfSoqIChubyBlbGVtZW50cyBmb3VuZClcXG5gO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIHN5bmNUZXh0ICs9IGDwn5OBICoqUHJvY2Vzc2luZyAke2VsZW1lbnRUeXBlfSoqICgke3R5cGVDb3VudH0gZWxlbWVudHMpOlxcbmA7XG4gICAgICAgICAgbGV0IHR5cGVTdWNjZXNzQ291bnQgPSAwO1xuICAgICAgICAgIFxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IGF3YWl0IHRoaXMuZ2V0RWxlbWVudHNMaXN0KGVsZW1lbnRUeXBlKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBjb25zdCBlbGVtZW50TmFtZSA9IGVsZW1lbnRzW2ldO1xuICAgICAgICAgICAgICBjb25zdCBwcm9ncmVzcyA9IGBbJHtpICsgMX0vJHtlbGVtZW50cy5sZW5ndGh9XWA7XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIC8vIFVYIElNUFJPVkVNRU5UOiBTaG93IGluZGl2aWR1YWwgZWxlbWVudCBwcm9ncmVzc1xuICAgICAgICAgICAgICAgIHN5bmNUZXh0ICs9IGAgICR7cHJvZ3Jlc3N9IPCflIQgU3luY2luZyBcIiR7ZWxlbWVudE5hbWV9XCIuLi5gO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIExvYWQgZWxlbWVudCBhbmQgc2F2ZSB0byBwb3J0Zm9saW9cbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gYXdhaXQgdGhpcy5sb2FkRWxlbWVudEJ5VHlwZShlbGVtZW50TmFtZSwgZWxlbWVudFR5cGUpO1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICBhd2FpdCBwb3J0Zm9saW9NYW5hZ2VyLnNhdmVFbGVtZW50KGVsZW1lbnQsIHRydWUpOyAvLyBFeHBsaWNpdCBjb25zZW50XG4gICAgICAgICAgICAgICAgICBzeW5jQ291bnQrKztcbiAgICAgICAgICAgICAgICAgIHR5cGVTdWNjZXNzQ291bnQrKztcbiAgICAgICAgICAgICAgICAgIHN5bmNUZXh0ICs9IGAg4pyFXFxuYDtcbiAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgU3VjY2Vzc2Z1bGx5IHN5bmNlZCAke2VsZW1lbnRUeXBlfS8ke2VsZW1lbnROYW1lfWApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBzeW5jVGV4dCArPSBgIOKdjCAobnVsbCBlbGVtZW50KVxcbmA7XG4gICAgICAgICAgICAgICAgICBmYWlsZWRFbGVtZW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogZWxlbWVudFR5cGUsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IGVsZW1lbnROYW1lLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogJ0VsZW1lbnQgbG9hZGVkIGFzIG51bGwvdW5kZWZpbmVkJ1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGNhdGNoIChlbGVtZW50RXJyb3I6IGFueSkge1xuICAgICAgICAgICAgICAgIC8vIEV4dHJhY3QgZXJyb3IgY29kZSBpZiBwcmVzZW50XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gZWxlbWVudEVycm9yLmNvZGUgfHwgKGVsZW1lbnRFcnJvci5tZXNzYWdlPy5tYXRjaCgvXFxbKFtBLVpfXStfXFxkKylcXF0vKT8uWzFdKSB8fCAnJztcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlbGVtZW50RXJyb3IubWVzc2FnZSB8fCAnVW5rbm93biBlcnJvciBkdXJpbmcgZWxlbWVudCBzeW5jJztcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBDbGVhbiB1cCBlcnJvciBtZXNzYWdlIGZvciBkaXNwbGF5IChyZW1vdmUgY29kZSBpZiBhbHJlYWR5IGV4dHJhY3RlZClcbiAgICAgICAgICAgICAgICBjb25zdCBkaXNwbGF5TWVzc2FnZSA9IGVycm9yQ29kZSBcbiAgICAgICAgICAgICAgICAgID8gZXJyb3JNZXNzYWdlLnJlcGxhY2UoL1xcW1tBLVpfXStfXFxkK1xcXVxccyovLCAnJylcbiAgICAgICAgICAgICAgICAgIDogZXJyb3JNZXNzYWdlO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIFNob3cgZXJyb3IgY29kZSBpbiBvdXRwdXQgZm9yIGJldHRlciBkaWFnbm9zdGljc1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yT3V0cHV0ID0gZXJyb3JDb2RlIFxuICAgICAgICAgICAgICAgICAgPyBgJHtlcnJvckNvZGV9OiAke2Rpc3BsYXlNZXNzYWdlfWBcbiAgICAgICAgICAgICAgICAgIDogZGlzcGxheU1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgc3luY1RleHQgKz0gYCDinYwgKCR7ZXJyb3JPdXRwdXR9KVxcbmA7XG4gICAgICAgICAgICAgICAgZmFpbGVkRWxlbWVudHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBlbGVtZW50VHlwZSxcbiAgICAgICAgICAgICAgICAgIG5hbWU6IGVsZW1lbnROYW1lLFxuICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yT3V0cHV0XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oYEZhaWxlZCB0byBzeW5jICR7ZWxlbWVudFR5cGV9LyR7ZWxlbWVudE5hbWV9YCwgeyBcbiAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvck1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICBlcnJvckNvZGUsXG4gICAgICAgICAgICAgICAgICBlbGVtZW50TmFtZSxcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnRUeXBlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gVVggSU1QUk9WRU1FTlQ6IFNob3cgY29tcGxldGlvbiBzdW1tYXJ5IGZvciBlYWNoIHR5cGVcbiAgICAgICAgICAgIGNvbnN0IHN1Y2Nlc3NSYXRlID0gZWxlbWVudHMubGVuZ3RoID4gMCA/IE1hdGgucm91bmQoKHR5cGVTdWNjZXNzQ291bnQgLyBlbGVtZW50cy5sZW5ndGgpICogMTAwKSA6IDA7XG4gICAgICAgICAgICBjb25zdCBzdGF0dXNJY29uID0gc3VjY2Vzc1JhdGUgPT09IDEwMCA/ICfwn46JJyA6IHN1Y2Nlc3NSYXRlID4gNTAgPyAn4pqg77iPJyA6ICfinYwnO1xuICAgICAgICAgICAgc3luY1RleHQgKz0gYCAgJHtzdGF0dXNJY29ufSAqKiR7ZWxlbWVudFR5cGV9IGNvbXBsZXRlKio6ICR7dHlwZVN1Y2Nlc3NDb3VudH0vJHtlbGVtZW50cy5sZW5ndGh9IHN5bmNlZCAoJHtzdWNjZXNzUmF0ZX0lKVxcblxcbmA7XG4gICAgICAgICAgfSBjYXRjaCAobGlzdEVycm9yOiBhbnkpIHtcbiAgICAgICAgICAgIC8vIFVYIElNUFJPVkVNRU5UOiBCZXR0ZXIgZXJyb3IgcmVwb3J0aW5nIGZvciBsaXN0IGZhaWx1cmVzXG4gICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBsaXN0RXJyb3IubWVzc2FnZSB8fCAnRmFpbGVkIHRvIGdldCBlbGVtZW50cyBsaXN0JztcbiAgICAgICAgICAgIHN5bmNUZXh0ICs9IGAgIOKdjCAqKkZhaWxlZCB0byBsaXN0ICR7ZWxlbWVudFR5cGV9Kio6ICR7ZXJyb3JNZXNzYWdlfVxcblxcbmA7XG4gICAgICAgICAgICBmYWlsZWRFbGVtZW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgdHlwZTogZWxlbWVudFR5cGUsXG4gICAgICAgICAgICAgIG5hbWU6ICdBTEwnLFxuICAgICAgICAgICAgICBlcnJvcjogYEZhaWxlZCB0byBsaXN0ICR7ZWxlbWVudFR5cGV9OiAke2Vycm9yTWVzc2FnZX1gXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxvZ2dlci53YXJuKGBGYWlsZWQgdG8gZ2V0ICR7ZWxlbWVudFR5cGV9IGxpc3RgLCB7IGVycm9yOiBlcnJvck1lc3NhZ2UgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gVVggSU1QUk9WRU1FTlQ6IEVuaGFuY2VkIGZpbmFsIHN1bW1hcnkgd2l0aCBhY3Rpb25hYmxlIGluc2lnaHRzXG4gICAgICAgIGNvbnN0IHN1Y2Nlc3NSYXRlID0gdG90YWxFbGVtZW50cyA+IDAgPyBNYXRoLnJvdW5kKChzeW5jQ291bnQgLyB0b3RhbEVsZW1lbnRzKSAqIDEwMCkgOiAwO1xuICAgICAgICBjb25zdCBzdW1tYXJ5SWNvbiA9IHN1Y2Nlc3NSYXRlID09PSAxMDAgPyAn8J+OiScgOiBzdWNjZXNzUmF0ZSA+PSA4MCA/ICfinIUnIDogc3VjY2Vzc1JhdGUgPj0gNTAgPyAn4pqg77iPJyA6ICfinYwnO1xuICAgICAgICBcbiAgICAgICAgc3luY1RleHQgKz0gYCR7c3VtbWFyeUljb259ICoqU3luYyBDb21wbGV0ZSEqKlxcbmA7XG4gICAgICAgIHN5bmNUZXh0ICs9IGDwn5OKICoqT3ZlcmFsbCBSZXN1bHRzKio6ICR7c3luY0NvdW50fS8ke3RvdGFsRWxlbWVudHN9IGVsZW1lbnRzIHN5bmNlZCAoJHtzdWNjZXNzUmF0ZX0lKVxcbmA7XG4gICAgICAgIHN5bmNUZXh0ICs9IGDwn4+gICoqUG9ydGZvbGlvKio6IGh0dHBzOi8vZ2l0aHViLmNvbS8ke3VzZXJuYW1lfS9kb2xsaG91c2UtcG9ydGZvbGlvXFxuXFxuYDtcbiAgICAgICAgXG4gICAgICAgIC8vIEluY2x1ZGUgZmFpbGVkIGVsZW1lbnRzIGluZm9ybWF0aW9uIHdpdGggYWN0aW9uYWJsZSBzdWdnZXN0aW9uc1xuICAgICAgICBpZiAoZmFpbGVkRWxlbWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHN5bmNUZXh0ICs9IGDimqDvuI8gKipJc3N1ZXMgRW5jb3VudGVyZWQqKiAoJHtmYWlsZWRFbGVtZW50cy5sZW5ndGh9IHByb2JsZW1zKTpcXG5cXG5gO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIEdyb3VwIGZhaWx1cmVzIGJ5IHR5cGUgZm9yIGJldHRlciBvcmdhbml6YXRpb25cbiAgICAgICAgICBjb25zdCBmYWlsdXJlc0J5VHlwZTogUmVjb3JkPHN0cmluZywgQXJyYXk8e25hbWU6IHN0cmluZywgZXJyb3I6IHN0cmluZ30+PiA9IHt9O1xuICAgICAgICAgIGZvciAoY29uc3QgZmFpbGVkIG9mIGZhaWxlZEVsZW1lbnRzKSB7XG4gICAgICAgICAgICBpZiAoIWZhaWx1cmVzQnlUeXBlW2ZhaWxlZC50eXBlXSkge1xuICAgICAgICAgICAgICBmYWlsdXJlc0J5VHlwZVtmYWlsZWQudHlwZV0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZhaWx1cmVzQnlUeXBlW2ZhaWxlZC50eXBlXS5wdXNoKHsgbmFtZTogZmFpbGVkLm5hbWUsIGVycm9yOiBmYWlsZWQuZXJyb3IgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIGZvciAoY29uc3QgW3R5cGUsIGZhaWx1cmVzXSBvZiBPYmplY3QuZW50cmllcyhmYWlsdXJlc0J5VHlwZSkpIHtcbiAgICAgICAgICAgIHN5bmNUZXh0ICs9IGDwn5OBICoqJHt0eXBlfSoqICgke2ZhaWx1cmVzLmxlbmd0aH0gaXNzdWVzKTpcXG5gO1xuICAgICAgICAgICAgZm9yIChjb25zdCBmYWlsdXJlIG9mIGZhaWx1cmVzKSB7XG4gICAgICAgICAgICAgIGlmIChmYWlsdXJlLm5hbWUgPT09ICdBTEwnKSB7XG4gICAgICAgICAgICAgICAgc3luY1RleHQgKz0gYCAg4p2MICR7ZmFpbHVyZS5lcnJvcn1cXG5gO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN5bmNUZXh0ICs9IGAgIOKdjCBcIiR7ZmFpbHVyZS5uYW1lfVwiOiAke2ZhaWx1cmUuZXJyb3J9XFxuYDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3luY1RleHQgKz0gYFxcbmA7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIC8vIFVYIElNUFJPVkVNRU5UOiBBZGQgaGVscGZ1bCBzdWdnZXN0aW9ucyBiYXNlZCBvbiBlcnJvciBjb2RlcyBmb3VuZFxuICAgICAgICAgIHN5bmNUZXh0ICs9IGDwn5KhICoqVHJvdWJsZXNob290aW5nIFRpcHMqKjpcXG5gO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIENoZWNrIGZvciBzcGVjaWZpYyBlcnJvciBjb2RlcyBhbmQgcHJvdmlkZSB0YXJnZXRlZCBhZHZpY2VcbiAgICAgICAgICBjb25zdCBlcnJvckNvZGVzID0gZmFpbGVkRWxlbWVudHMubWFwKGYgPT4gZi5lcnJvci5tYXRjaCgvXihbQS1aX10rX1xcZCspOi8pPy5bMV0pLmZpbHRlcihCb29sZWFuKTtcbiAgICAgICAgICBjb25zdCB1bmlxdWVFcnJvckNvZGVzID0gWy4uLm5ldyBTZXQoZXJyb3JDb2RlcyldO1xuICAgICAgICAgIFxuICAgICAgICAgIGlmICh1bmlxdWVFcnJvckNvZGVzLmluY2x1ZGVzKCdQT1JURk9MSU9fU1lOQ18wMDEnKSkge1xuICAgICAgICAgICAgc3luY1RleHQgKz0gYCAg4oCiIPCflJAgKipBdXRoIEVycm9yKio6IFJ1biBcXGBzZXR1cF9naXRodWJfYXV0aFxcYCB0byByZS1hdXRoZW50aWNhdGVcXG5gO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodW5pcXVlRXJyb3JDb2Rlcy5pbmNsdWRlcygnUE9SVEZPTElPX1NZTkNfMDAyJykpIHtcbiAgICAgICAgICAgIHN5bmNUZXh0ICs9IGAgIOKAoiDwn5OBICoqUmVwbyBNaXNzaW5nKio6IFJ1biBcXGBpbml0X3BvcnRmb2xpb1xcYCB0byBjcmVhdGUgeW91ciByZXBvc2l0b3J5XFxuYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHVuaXF1ZUVycm9yQ29kZXMuaW5jbHVkZXMoJ1BPUlRGT0xJT19TWU5DXzAwNCcpKSB7XG4gICAgICAgICAgICBzeW5jVGV4dCArPSBgICDigKIg8J+UpyAqKkFQSSBFcnJvcioqOiBHaXRIdWIgcmVzcG9uc2UgZm9ybWF0IGlzc3VlIC0gcGxlYXNlIHJlcG9ydCB0aGlzIGJ1Z1xcbmA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1bmlxdWVFcnJvckNvZGVzLmluY2x1ZGVzKCdQT1JURk9MSU9fU1lOQ18wMDYnKSkge1xuICAgICAgICAgICAgc3luY1RleHQgKz0gYCAg4oCiIOKPsyAqKlJhdGUgTGltaXRlZCoqOiBXYWl0IGEgZmV3IG1pbnV0ZXMgYW5kIHRyeSBhZ2FpblxcbmA7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIC8vIEdlbmVyYWwgdGlwc1xuICAgICAgICAgIHN5bmNUZXh0ICs9IGAgIOKAoiBDaGVjayBlbGVtZW50IGZpbGUgZm9ybWF0cyBhbmQgbWV0YWRhdGFcXG5gO1xuICAgICAgICAgIHN5bmNUZXh0ICs9IGAgIOKAoiBUcnkgc3luY2luZyBpbmRpdmlkdWFsIGVsZW1lbnRzIHdpdGggXFxgc3VibWl0X2NvbnRlbnRcXGBcXG5gO1xuICAgICAgICAgIHN5bmNUZXh0ICs9IGAgIOKAoiBVc2UgXFxgc3luY19wb3J0Zm9saW9cXGAgd2l0aCBcXGBkcnlfcnVuPXRydWVcXGAgdG8gcHJldmlldyBpc3N1ZXNcXG5cXG5gO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIEFkZCBlcnJvciBjb2RlIGxlZ2VuZCBpZiB3ZSBmb3VuZCBhbnlcbiAgICAgICAgICBpZiAodW5pcXVlRXJyb3JDb2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBzeW5jVGV4dCArPSBg8J+TiyAqKkVycm9yIENvZGVzIERldGVjdGVkKio6XFxuYDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29kZSBvZiB1bmlxdWVFcnJvckNvZGVzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVycm9yRGVzY3JpcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgICAgICAgICAgICdQT1JURk9MSU9fU1lOQ18wMDEnOiAnQXV0aGVudGljYXRpb24gZmFpbHVyZScsXG4gICAgICAgICAgICAgICAgJ1BPUlRGT0xJT19TWU5DXzAwMic6ICdSZXBvc2l0b3J5IG5vdCBmb3VuZCcsXG4gICAgICAgICAgICAgICAgJ1BPUlRGT0xJT19TWU5DXzAwMyc6ICdGaWxlIGNyZWF0aW9uIGZhaWxlZCcsXG4gICAgICAgICAgICAgICAgJ1BPUlRGT0xJT19TWU5DXzAwNCc6ICdBUEkgcmVzcG9uc2UgcGFyc2luZyBlcnJvcicsXG4gICAgICAgICAgICAgICAgJ1BPUlRGT0xJT19TWU5DXzAwNSc6ICdOZXR3b3JrIGVycm9yJyxcbiAgICAgICAgICAgICAgICAnUE9SVEZPTElPX1NZTkNfMDA2JzogJ1JhdGUgbGltaXQgZXhjZWVkZWQnXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gZXJyb3JEZXNjcmlwdGlvbnNbY29kZSBhcyBzdHJpbmddIHx8ICdVbmtub3duIGVycm9yJztcbiAgICAgICAgICAgICAgc3luY1RleHQgKz0gYCAg4oCiICR7Y29kZX06ICR7ZGVzY3JpcHRpb259XFxuYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN5bmNUZXh0ICs9IGBcXG5gO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzeW5jVGV4dCArPSBg8J+OiSAqKlBlcmZlY3QgU3luYyEqKiBBbGwgZWxlbWVudHMgdXBsb2FkZWQgc3VjY2Vzc2Z1bGx5IVxcblxcbmA7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIFVYIElNUFJPVkVNRU5UOiBBZGQgbmV4dCBzdGVwcyBhbmQgaGVscGZ1bCBsaW5rc1xuICAgICAgICBpZiAoc3luY0NvdW50ID4gMCkge1xuICAgICAgICAgIHN5bmNUZXh0ICs9IGDwn5qAICoqTmV4dCBTdGVwcyoqOlxcbmA7XG4gICAgICAgICAgc3luY1RleHQgKz0gYCAg4oCiIFZpZXcgeW91ciBwb3J0Zm9saW86IGh0dHBzOi8vZ2l0aHViLmNvbS8ke3VzZXJuYW1lfS9kb2xsaG91c2UtcG9ydGZvbGlvXFxuYDtcbiAgICAgICAgICBzeW5jVGV4dCArPSBgICDigKIgU2hhcmUgaW5kaXZpZHVhbCBlbGVtZW50cyB1c2luZyBcXGBzdWJtaXRfY29udGVudCA8bmFtZT5cXGBcXG5gO1xuICAgICAgICAgIHN5bmNUZXh0ICs9IGAgIOKAoiBLZWVwIHBvcnRmb2xpbyB1cGRhdGVkIHdpdGggXFxgc3luY19wb3J0Zm9saW9cXGAgcmVndWxhcmx5XFxuXFxuYDtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgc3luY1RleHQgKz0gYFlvdXIgZWxlbWVudHMgYXJlIG5vdyBhdmFpbGFibGUgb24gR2l0SHViIWA7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBzeW5jVGV4dFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmRpcmVjdGlvbiA9PT0gJ3B1bGwnKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94pqg77iPIFB1bGwgc3luYyBpcyBjb21pbmcgc29vbi4gQ3VycmVudGx5IG9ubHkgcHVzaCBzeW5jIGlzIHN1cHBvcnRlZC5gXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgSW52YWxpZCBzeW5jIGRpcmVjdGlvbi4gVXNlICdwdXNoJywgJ3B1bGwnLCBvciAnYm90aCcuYFxuICAgICAgICB9XVxuICAgICAgfTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBJTVBST1ZFRCBFUlJPUiBIQU5ETElORzogRW5zdXJlIHdlIGFsd2F5cyBoYXZlIGEgbWVhbmluZ2Z1bCBlcnJvciBtZXNzYWdlXG4gICAgICBjb25zdCBzYW5pdGl6ZWRFcnJvciA9IFNlY3VyZUVycm9ySGFuZGxlci5zYW5pdGl6ZUVycm9yKGVycm9yKTtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IHNhbml0aXplZEVycm9yPy5tZXNzYWdlIHx8IChlcnJvciBhcyBhbnkpPy5tZXNzYWdlIHx8IFN0cmluZyhlcnJvcikgfHwgJ1Vua25vd24gZXJyb3Igb2NjdXJyZWQnO1xuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBGYWlsZWQgdG8gc3luYyBwb3J0Zm9saW86ICR7ZXJyb3JNZXNzYWdlfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaCBsb2NhbCBwb3J0Zm9saW8gdXNpbmcgdGhlIG1ldGFkYXRhIGluZGV4IHN5c3RlbVxuICAgKiBUaGlzIHByb3ZpZGVzIGZhc3QsIGNvbXByZWhlbnNpdmUgc2VhcmNoIGFjcm9zcyBhbGwgZWxlbWVudCB0eXBlc1xuICAgKi9cbiAgYXN5bmMgc2VhcmNoUG9ydGZvbGlvKG9wdGlvbnM6IHtcbiAgICBxdWVyeTogc3RyaW5nOyBcbiAgICBlbGVtZW50VHlwZT86IHN0cmluZzsgXG4gICAgZnV6enlNYXRjaD86IGJvb2xlYW47IFxuICAgIG1heFJlc3VsdHM/OiBudW1iZXI7IFxuICAgIGluY2x1ZGVLZXl3b3Jkcz86IGJvb2xlYW47IFxuICAgIGluY2x1ZGVUYWdzPzogYm9vbGVhbjsgXG4gICAgaW5jbHVkZVRyaWdnZXJzPzogYm9vbGVhbjsgXG4gICAgaW5jbHVkZURlc2NyaXB0aW9ucz86IGJvb2xlYW47XG4gIH0pIHtcbiAgICB0cnkge1xuICAgICAgLy8gVmFsaWRhdGUgdGhlIHF1ZXJ5IHBhcmFtZXRlclxuICAgICAgaWYgKCFvcHRpb25zLnF1ZXJ5IHx8IHR5cGVvZiBvcHRpb25zLnF1ZXJ5ICE9PSAnc3RyaW5nJyB8fCBvcHRpb25zLnF1ZXJ5LnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgU2VhcmNoIHF1ZXJ5IGlzIHJlcXVpcmVkIGFuZCBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZy5gXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gSW1wb3J0IHBvcnRmb2xpbyBpbmRleCBtYW5hZ2VyXG4gICAgICBjb25zdCB7IFBvcnRmb2xpb0luZGV4TWFuYWdlciB9ID0gYXdhaXQgaW1wb3J0KCcuL3BvcnRmb2xpby9Qb3J0Zm9saW9JbmRleE1hbmFnZXIuanMnKTtcbiAgICAgIGNvbnN0IGluZGV4TWFuYWdlciA9IFBvcnRmb2xpb0luZGV4TWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuXG4gICAgICAvLyBQYXJzZSBlbGVtZW50IHR5cGUgaWYgcHJvdmlkZWRcbiAgICAgIGxldCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGUgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAob3B0aW9ucy5lbGVtZW50VHlwZSkge1xuICAgICAgICBjb25zdCB2YWxpZFR5cGVzID0gWydwZXJzb25hcycsICdza2lsbHMnLCAndGVtcGxhdGVzJywgJ2FnZW50cycsICdtZW1vcmllcycsICdlbnNlbWJsZXMnXTtcbiAgICAgICAgaWYgKCF2YWxpZFR5cGVzLmluY2x1ZGVzKG9wdGlvbnMuZWxlbWVudFR5cGUpKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgSW52YWxpZCBlbGVtZW50IHR5cGUuIFZhbGlkIHR5cGVzOiAke3ZhbGlkVHlwZXMuam9pbignLCAnKX1gXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxlbWVudFR5cGUgPSBvcHRpb25zLmVsZW1lbnRUeXBlIGFzIEVsZW1lbnRUeXBlO1xuICAgICAgfVxuXG4gICAgICAvLyBCdWlsZCBzZWFyY2ggb3B0aW9uc1xuICAgICAgY29uc3Qgc2VhcmNoT3B0aW9ucyA9IHtcbiAgICAgICAgZWxlbWVudFR5cGUsXG4gICAgICAgIGZ1enp5TWF0Y2g6IG9wdGlvbnMuZnV6enlNYXRjaCAhPT0gZmFsc2UsIC8vIERlZmF1bHQgdG8gdHJ1ZVxuICAgICAgICBtYXhSZXN1bHRzOiBvcHRpb25zLm1heFJlc3VsdHMgfHwgMjAsXG4gICAgICAgIGluY2x1ZGVLZXl3b3Jkczogb3B0aW9ucy5pbmNsdWRlS2V5d29yZHMgIT09IGZhbHNlLFxuICAgICAgICBpbmNsdWRlVGFnczogb3B0aW9ucy5pbmNsdWRlVGFncyAhPT0gZmFsc2UsXG4gICAgICAgIGluY2x1ZGVUcmlnZ2Vyczogb3B0aW9ucy5pbmNsdWRlVHJpZ2dlcnMgIT09IGZhbHNlLFxuICAgICAgICBpbmNsdWRlRGVzY3JpcHRpb25zOiBvcHRpb25zLmluY2x1ZGVEZXNjcmlwdGlvbnMgIT09IGZhbHNlXG4gICAgICB9O1xuXG4gICAgICAvLyBQZXJmb3JtIHRoZSBzZWFyY2hcbiAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBpbmRleE1hbmFnZXIuc2VhcmNoKG9wdGlvbnMucXVlcnksIHNlYXJjaE9wdGlvbnMpO1xuXG4gICAgICAvLyBGb3JtYXQgdGhlIHJlc3VsdHNcbiAgICAgIGxldCB0ZXh0ID0gYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl98J+UjSAqKlBvcnRmb2xpbyBTZWFyY2ggUmVzdWx0cyoqXFxuXFxuYDtcbiAgICAgIHRleHQgKz0gYCoqUXVlcnkqKjogXCIke29wdGlvbnMucXVlcnl9XCJcXG5gO1xuICAgICAgXG4gICAgICBpZiAoZWxlbWVudFR5cGUpIHtcbiAgICAgICAgdGV4dCArPSBgKipUeXBlIEZpbHRlcioqOiAke2VsZW1lbnRUeXBlfVxcbmA7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHRleHQgKz0gYCoqRm91bmQqKjogJHtyZXN1bHRzLmxlbmd0aH0gZWxlbWVudCR7cmVzdWx0cy5sZW5ndGggPT09IDEgPyAnJyA6ICdzJ31cXG5cXG5gO1xuXG4gICAgICBpZiAocmVzdWx0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGV4dCArPSBgTm8gZWxlbWVudHMgZm91bmQgbWF0Y2hpbmcgeW91ciBzZWFyY2ggY3JpdGVyaWEuXFxuXFxuYDtcbiAgICAgICAgdGV4dCArPSBgKipUaXBzIGZvciBiZXR0ZXIgcmVzdWx0czoqKlxcbmA7XG4gICAgICAgIHRleHQgKz0gYOKAoiBUcnkgZGlmZmVyZW50IGtleXdvcmRzIG9yIHBhcnRpYWwgbmFtZXNcXG5gO1xuICAgICAgICB0ZXh0ICs9IGDigKIgUmVtb3ZlIHRoZSB0eXBlIGZpbHRlciB0byBzZWFyY2ggYWxsIGVsZW1lbnQgdHlwZXNcXG5gO1xuICAgICAgICB0ZXh0ICs9IGDigKIgQ2hlY2sgc3BlbGxpbmcgYW5kIHRyeSBzeW5vbnltc1xcbmA7XG4gICAgICAgIHRleHQgKz0gYOKAoiBVc2UgdGhlIGxpc3RfZWxlbWVudHMgdG9vbCB0byBzZWUgYWxsIGF2YWlsYWJsZSBjb250ZW50YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRleHQgKz0gYCoqUmVzdWx0czoqKlxcblxcbmA7XG4gICAgICAgIFxuICAgICAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRzKSB7XG4gICAgICAgICAgY29uc3QgeyBlbnRyeSwgbWF0Y2hUeXBlIH0gPSByZXN1bHQ7XG4gICAgICAgICAgY29uc3QgaWNvbiA9IHRoaXMuZ2V0RWxlbWVudEljb24oZW50cnkuZWxlbWVudFR5cGUpO1xuICAgICAgICAgIFxuICAgICAgICAgIHRleHQgKz0gYCR7aWNvbn0gKioke2VudHJ5Lm1ldGFkYXRhLm5hbWV9KipcXG5gO1xuICAgICAgICAgIHRleHQgKz0gYCAgIPCfk4EgVHlwZTogJHtlbnRyeS5lbGVtZW50VHlwZX1cXG5gO1xuICAgICAgICAgIHRleHQgKz0gYCAgIPCfjq8gTWF0Y2g6ICR7bWF0Y2hUeXBlfVxcbmA7XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKGVudHJ5Lm1ldGFkYXRhLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBkZXNjID0gZW50cnkubWV0YWRhdGEuZGVzY3JpcHRpb24ubGVuZ3RoID4gMTAwIFxuICAgICAgICAgICAgICA/IGVudHJ5Lm1ldGFkYXRhLmRlc2NyaXB0aW9uLnN1YnN0cmluZygwLCAxMDApICsgJy4uLidcbiAgICAgICAgICAgICAgOiBlbnRyeS5tZXRhZGF0YS5kZXNjcmlwdGlvbjtcbiAgICAgICAgICAgIHRleHQgKz0gYCAgIPCfk50gJHtkZXNjfVxcbmA7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIGlmIChlbnRyeS5tZXRhZGF0YS50YWdzICYmIGVudHJ5Lm1ldGFkYXRhLnRhZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGV4dCArPSBgICAg8J+Pt++4jyBUYWdzOiAke2VudHJ5Lm1ldGFkYXRhLnRhZ3Muc2xpY2UoMCwgNSkuam9pbignLCAnKX0ke2VudHJ5Lm1ldGFkYXRhLnRhZ3MubGVuZ3RoID4gNSA/ICcuLi4nIDogJyd9XFxuYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgdGV4dCArPSBgICAg8J+ThCBGaWxlOiAke2VudHJ5LmZpbGVuYW1lfS5tZFxcblxcbmA7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGlmIChyZXN1bHRzLmxlbmd0aCA+PSBzZWFyY2hPcHRpb25zLm1heFJlc3VsdHMpIHtcbiAgICAgICAgICB0ZXh0ICs9IGDimqDvuI8gUmVzdWx0cyBsaW1pdGVkIHRvICR7c2VhcmNoT3B0aW9ucy5tYXhSZXN1bHRzfS4gUmVmaW5lIHlvdXIgc2VhcmNoIGZvciBtb3JlIHNwZWNpZmljIHJlc3VsdHMuXFxuXFxuYDtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgdGV4dCArPSBg8J+SoSAqKk5leHQgc3RlcHM6KipcXG5gO1xuICAgICAgICB0ZXh0ICs9IGDigKIgVXNlIGdldF9lbGVtZW50X2RldGFpbHMgdG8gc2VlIGZ1bGwgY29udGVudFxcbmA7XG4gICAgICAgIHRleHQgKz0gYOKAoiBVc2UgYWN0aXZhdGVfZWxlbWVudCB0byBhY3RpdmF0ZSBlbGVtZW50c1xcbmA7XG4gICAgICAgIHRleHQgKz0gYOKAoiBVc2Ugc3VibWl0X2NvbnRlbnQgdG8gc2hhcmUgd2l0aCB0aGUgY29tbXVuaXR5YDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0XG4gICAgICAgIH1dXG4gICAgICB9O1xuXG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdEb2xsaG91c2VNQ1BTZXJ2ZXIuc2VhcmNoUG9ydGZvbGlvJywgZXJyb3IsIHsgXG4gICAgICAgIHF1ZXJ5OiBvcHRpb25zLnF1ZXJ5LFxuICAgICAgICBlbGVtZW50VHlwZTogb3B0aW9ucy5lbGVtZW50VHlwZSBcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLCBcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgU2VhcmNoIGZhaWxlZDogJHtTZWN1cmVFcnJvckhhbmRsZXIuc2FuaXRpemVFcnJvcihlcnJvcikubWVzc2FnZX1gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2ggYWNyb3NzIGFsbCBzb3VyY2VzIChsb2NhbCwgR2l0SHViLCBjb2xsZWN0aW9uKSB1c2luZyBVbmlmaWVkSW5kZXhNYW5hZ2VyXG4gICAqIFRoaXMgcHJvdmlkZXMgY29tcHJlaGVuc2l2ZSBzZWFyY2ggd2l0aCBkdXBsaWNhdGUgZGV0ZWN0aW9uIGFuZCB2ZXJzaW9uIGNvbXBhcmlzb25cbiAgICovXG4gIGFzeW5jIHNlYXJjaEFsbChvcHRpb25zOiB7XG4gICAgcXVlcnk6IHN0cmluZztcbiAgICBzb3VyY2VzPzogc3RyaW5nW107XG4gICAgZWxlbWVudFR5cGU/OiBzdHJpbmc7XG4gICAgcGFnZT86IG51bWJlcjtcbiAgICBwYWdlU2l6ZT86IG51bWJlcjtcbiAgICBzb3J0Qnk/OiBzdHJpbmc7XG4gIH0pIHtcbiAgICB0cnkge1xuICAgICAgLy8gVmFsaWRhdGUgdGhlIHF1ZXJ5IHBhcmFtZXRlclxuICAgICAgaWYgKCFvcHRpb25zLnF1ZXJ5IHx8IHR5cGVvZiBvcHRpb25zLnF1ZXJ5ICE9PSAnc3RyaW5nJyB8fCBvcHRpb25zLnF1ZXJ5LnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgU2VhcmNoIHF1ZXJ5IGlzIHJlcXVpcmVkIGFuZCBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZy5gXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gSW1wb3J0IHVuaWZpZWQgaW5kZXggbWFuYWdlclxuICAgICAgY29uc3QgeyBVbmlmaWVkSW5kZXhNYW5hZ2VyIH0gPSBhd2FpdCBpbXBvcnQoJy4vcG9ydGZvbGlvL1VuaWZpZWRJbmRleE1hbmFnZXIuanMnKTtcbiAgICAgIGNvbnN0IHsgRWxlbWVudFR5cGUgfSA9IGF3YWl0IGltcG9ydCgnLi9wb3J0Zm9saW8vdHlwZXMuanMnKTtcbiAgICAgIGNvbnN0IHVuaWZpZWRNYW5hZ2VyID0gVW5pZmllZEluZGV4TWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuXG4gICAgICAvLyBQYXJzZSBlbGVtZW50IHR5cGUgaWYgcHJvdmlkZWRcbiAgICAgIGxldCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGUgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAob3B0aW9ucy5lbGVtZW50VHlwZSkge1xuICAgICAgICBjb25zdCB2YWxpZFR5cGVzID0gWydwZXJzb25hcycsICdza2lsbHMnLCAndGVtcGxhdGVzJywgJ2FnZW50cycsICdtZW1vcmllcycsICdlbnNlbWJsZXMnXTtcbiAgICAgICAgaWYgKCF2YWxpZFR5cGVzLmluY2x1ZGVzKG9wdGlvbnMuZWxlbWVudFR5cGUpKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgSW52YWxpZCBlbGVtZW50IHR5cGUuIFZhbGlkIHR5cGVzOiAke3ZhbGlkVHlwZXMuam9pbignLCAnKX1gXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxlbWVudFR5cGUgPSBvcHRpb25zLmVsZW1lbnRUeXBlIGFzIEVsZW1lbnRUeXBlO1xuICAgICAgfVxuXG4gICAgICAvLyBQYXJzZSBzb3VyY2VzIChkZWZhdWx0IHRvIGxvY2FsIGFuZCBnaXRodWIpXG4gICAgICBjb25zdCBzb3VyY2VzID0gb3B0aW9ucy5zb3VyY2VzIHx8IFsnbG9jYWwnLCAnZ2l0aHViJ107XG4gICAgICBjb25zdCBpbmNsdWRlTG9jYWwgPSBzb3VyY2VzLmluY2x1ZGVzKCdsb2NhbCcpO1xuICAgICAgY29uc3QgaW5jbHVkZUdpdEh1YiA9IHNvdXJjZXMuaW5jbHVkZXMoJ2dpdGh1YicpO1xuICAgICAgY29uc3QgaW5jbHVkZUNvbGxlY3Rpb24gPSBzb3VyY2VzLmluY2x1ZGVzKCdjb2xsZWN0aW9uJyk7XG5cbiAgICAgIC8vIEJ1aWxkIHNlYXJjaCBvcHRpb25zXG4gICAgICBjb25zdCBzZWFyY2hPcHRpb25zID0ge1xuICAgICAgICBxdWVyeTogb3B0aW9ucy5xdWVyeSxcbiAgICAgICAgaW5jbHVkZUxvY2FsLFxuICAgICAgICBpbmNsdWRlR2l0SHViLFxuICAgICAgICBpbmNsdWRlQ29sbGVjdGlvbixcbiAgICAgICAgZWxlbWVudFR5cGUsXG4gICAgICAgIHBhZ2U6IG9wdGlvbnMucGFnZSB8fCAxLFxuICAgICAgICBwYWdlU2l6ZTogb3B0aW9ucy5wYWdlU2l6ZSB8fCAyMCxcbiAgICAgICAgc29ydEJ5OiAob3B0aW9ucy5zb3J0QnkgYXMgYW55KSB8fCAncmVsZXZhbmNlJ1xuICAgICAgfTtcblxuICAgICAgLy8gUGVyZm9ybSB0aGUgdW5pZmllZCBzZWFyY2hcbiAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCB1bmlmaWVkTWFuYWdlci5zZWFyY2goc2VhcmNoT3B0aW9ucyk7XG5cbiAgICAgIC8vIEZvcm1hdCB0aGUgcmVzdWx0c1xuICAgICAgbGV0IHRleHQgPSBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3wn5SNICoqVW5pZmllZCBTZWFyY2ggUmVzdWx0cyoqXFxuXFxuYDtcbiAgICAgIHRleHQgKz0gYCoqUXVlcnkqKjogXCIke29wdGlvbnMucXVlcnl9XCJcXG5gO1xuICAgICAgdGV4dCArPSBgKipTb3VyY2VzKio6ICR7c291cmNlcy5qb2luKCcsICcpfVxcbmA7XG4gICAgICBcbiAgICAgIGlmIChlbGVtZW50VHlwZSkge1xuICAgICAgICB0ZXh0ICs9IGAqKlR5cGUgRmlsdGVyKio6ICR7ZWxlbWVudFR5cGV9XFxuYDtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgdGV4dCArPSBgKipGb3VuZCoqOiAke3Jlc3VsdHMubGVuZ3RofSBlbGVtZW50JHtyZXN1bHRzLmxlbmd0aCA9PT0gMSA/ICcnIDogJ3MnfVxcblxcbmA7XG5cbiAgICAgIGlmIChyZXN1bHRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0ZXh0ICs9IGBObyBlbGVtZW50cyBmb3VuZCBtYXRjaGluZyB5b3VyIHNlYXJjaCBjcml0ZXJpYS5cXG5cXG5gO1xuICAgICAgICB0ZXh0ICs9IGAqKlRpcHMgZm9yIGJldHRlciByZXN1bHRzOioqXFxuYDtcbiAgICAgICAgdGV4dCArPSBg4oCiIFRyeSBkaWZmZXJlbnQga2V5d29yZHMgb3IgcGFydGlhbCBuYW1lc1xcbmA7XG4gICAgICAgIHRleHQgKz0gYOKAoiBSZW1vdmUgdGhlIHR5cGUgZmlsdGVyIHRvIHNlYXJjaCBhbGwgZWxlbWVudCB0eXBlc1xcbmA7XG4gICAgICAgIHRleHQgKz0gYOKAoiBJbmNsdWRlIG1vcmUgc291cmNlczogbG9jYWwsIGdpdGh1YiwgY29sbGVjdGlvblxcbmA7XG4gICAgICAgIHRleHQgKz0gYOKAoiBDaGVjayBzcGVsbGluZyBhbmQgdHJ5IHN5bm9ueW1zXFxuYDtcbiAgICAgICAgdGV4dCArPSBg4oCiIFVzZSBicm93c2VfY29sbGVjdGlvbiB0byBleHBsb3JlIGF2YWlsYWJsZSBjb250ZW50YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRleHQgKz0gYCoqUmVzdWx0czoqKlxcblxcbmA7XG4gICAgICAgIFxuICAgICAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRzKSB7XG4gICAgICAgICAgY29uc3QgeyBlbnRyeSwgc291cmNlLCBtYXRjaFR5cGUsIHNjb3JlLCBpc0R1cGxpY2F0ZSwgdmVyc2lvbkNvbmZsaWN0IH0gPSByZXN1bHQ7XG4gICAgICAgICAgY29uc3QgaWNvbiA9IHRoaXMuZ2V0RWxlbWVudEljb24oZW50cnkuZWxlbWVudFR5cGUpO1xuICAgICAgICAgIGNvbnN0IHNvdXJjZUljb24gPSB0aGlzLmdldFNvdXJjZUljb24oc291cmNlKTtcbiAgICAgICAgICBcbiAgICAgICAgICB0ZXh0ICs9IGAke2ljb259ICoqJHtlbnRyeS5uYW1lfSoqICR7c291cmNlSWNvbn1cXG5gO1xuICAgICAgICAgIHRleHQgKz0gYCAgIPCfk4EgVHlwZTogJHtlbnRyeS5lbGVtZW50VHlwZX0gfCBTb3VyY2U6ICR7c291cmNlfVxcbmA7XG4gICAgICAgICAgdGV4dCArPSBgICAg8J+OryBNYXRjaDogJHttYXRjaFR5cGV9IHwgU2NvcmU6ICR7c2NvcmUudG9GaXhlZCgyKX1cXG5gO1xuICAgICAgICAgIFxuICAgICAgICAgIGlmIChlbnRyeS5kZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgY29uc3QgZGVzYyA9IGVudHJ5LmRlc2NyaXB0aW9uLmxlbmd0aCA+IDEwMCBcbiAgICAgICAgICAgICAgPyBlbnRyeS5kZXNjcmlwdGlvbi5zdWJzdHJpbmcoMCwgMTAwKSArICcuLi4nXG4gICAgICAgICAgICAgIDogZW50cnkuZGVzY3JpcHRpb247XG4gICAgICAgICAgICB0ZXh0ICs9IGAgICDwn5OdICR7ZGVzY31cXG5gO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChlbnRyeS52ZXJzaW9uKSB7XG4gICAgICAgICAgICB0ZXh0ICs9IGAgICDwn4+377iPIFZlcnNpb246ICR7ZW50cnkudmVyc2lvbn1cXG5gO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFNob3cgZHVwbGljYXRlIGluZm9ybWF0aW9uXG4gICAgICAgICAgaWYgKGlzRHVwbGljYXRlKSB7XG4gICAgICAgICAgICB0ZXh0ICs9IGAgICDimqDvuI8gKipEdXBsaWNhdGUgZGV0ZWN0ZWQgYWNyb3NzIHNvdXJjZXMqKlxcbmA7XG4gICAgICAgICAgICBpZiAodmVyc2lvbkNvbmZsaWN0KSB7XG4gICAgICAgICAgICAgIHRleHQgKz0gYCAgIPCflIQgVmVyc2lvbiBjb25mbGljdCAtIFJlY29tbWVuZGVkOiAke3ZlcnNpb25Db25mbGljdC5yZWNvbW1lbmRlZH0gKCR7dmVyc2lvbkNvbmZsaWN0LnJlYXNvbn0pXFxuYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgdGV4dCArPSBgXFxuYDtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY29uc3QgaGFzTW9yZSA9IHJlc3VsdHMubGVuZ3RoID49IHNlYXJjaE9wdGlvbnMucGFnZVNpemU7XG4gICAgICAgIGlmIChoYXNNb3JlKSB7XG4gICAgICAgICAgY29uc3QgbmV4dFBhZ2UgPSBzZWFyY2hPcHRpb25zLnBhZ2UgKyAxO1xuICAgICAgICAgIHRleHQgKz0gYOKaoO+4jyBSZXN1bHRzIGxpbWl0ZWQgdG8gJHtzZWFyY2hPcHRpb25zLnBhZ2VTaXplfS4gVXNlIHBhZ2U9JHtuZXh0UGFnZX0gZm9yIG1vcmUgcmVzdWx0cy5cXG5cXG5gO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICB0ZXh0ICs9IGDwn5KhICoqTmV4dCBzdGVwczoqKlxcbmA7XG4gICAgICAgIHRleHQgKz0gYOKAoiBVc2UgZ2V0X2VsZW1lbnRfZGV0YWlscyB0byBzZWUgZnVsbCBjb250ZW50XFxuYDtcbiAgICAgICAgdGV4dCArPSBg4oCiIFVzZSBpbnN0YWxsX2NvbnRlbnQgZm9yIGNvbGxlY3Rpb24gaXRlbXNcXG5gO1xuICAgICAgICB0ZXh0ICs9IGDigKIgVXNlIGFjdGl2YXRlX2VsZW1lbnQgZm9yIGxvY2FsIGVsZW1lbnRzXFxuYDtcbiAgICAgICAgdGV4dCArPSBg4oCiIENoZWNrIGZvciBkdXBsaWNhdGVzIGJlZm9yZSBzdWJtaXR0aW5nIG5ldyBjb250ZW50YDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0XG4gICAgICAgIH1dXG4gICAgICB9O1xuXG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc3QgeyBFcnJvckhhbmRsZXIgfSA9IGF3YWl0IGltcG9ydCgnLi91dGlscy9FcnJvckhhbmRsZXIuanMnKTtcbiAgICAgIGNvbnN0IHsgU2VjdXJlRXJyb3JIYW5kbGVyIH0gPSBhd2FpdCBpbXBvcnQoJy4vc2VjdXJpdHkvZXJyb3JIYW5kbGVyLmpzJyk7XG4gICAgICBcbiAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignRG9sbGhvdXNlTUNQU2VydmVyLnNlYXJjaEFsbCcsIGVycm9yLCB7IFxuICAgICAgICBxdWVyeTogb3B0aW9ucy5xdWVyeSxcbiAgICAgICAgc291cmNlczogb3B0aW9ucy5zb3VyY2VzLFxuICAgICAgICBlbGVtZW50VHlwZTogb3B0aW9ucy5lbGVtZW50VHlwZSBcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLCBcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgVW5pZmllZCBzZWFyY2ggZmFpbGVkOiAke1NlY3VyZUVycm9ySGFuZGxlci5zYW5pdGl6ZUVycm9yKGVycm9yKS5tZXNzYWdlfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBpY29uIGZvciBzb3VyY2UgdHlwZVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRTb3VyY2VJY29uKHNvdXJjZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBpY29uczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAgIGxvY2FsOiAn8J+SuycsXG4gICAgICBnaXRodWI6ICfwn5CZJyxcbiAgICAgIGNvbGxlY3Rpb246ICfwn4yQJ1xuICAgIH07XG4gICAgcmV0dXJuIGljb25zW3NvdXJjZV0gfHwgJ/Cfk4EnO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBpY29uIGZvciBlbGVtZW50IHR5cGVcbiAgICovXG4gIHByaXZhdGUgZ2V0RWxlbWVudEljb24oZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlKTogc3RyaW5nIHtcbiAgICBjb25zdCBpY29ucyA9IHtcbiAgICAgIHBlcnNvbmFzOiAn8J+OrScsXG4gICAgICBza2lsbHM6ICfwn46vJyxcbiAgICAgIHRlbXBsYXRlczogJ/Cfk4QnLFxuICAgICAgYWdlbnRzOiAn8J+klicsXG4gICAgICBtZW1vcmllczogJ/Cfp6AnLFxuICAgICAgZW5zZW1ibGVzOiAn8J+OvCdcbiAgICB9O1xuICAgIHJldHVybiBpY29uc1tlbGVtZW50VHlwZV0gfHwgJ/Cfk4EnO1xuICB9XG5cbiAgLyoqXG4gICAqIEhlbHBlciBtZXRob2QgdG8gY291bnQgZWxlbWVudHMgaW4gYSBkaXJlY3RvcnlcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgY291bnRFbGVtZW50c0luRGlyKGRpclBhdGg6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIENoZWNrIGlmIGRpcmVjdG9yeSBleGlzdHMgYW5kIGlzIGFjY2Vzc2libGVcbiAgICAgIGF3YWl0IGZzLmFjY2VzcyhkaXJQYXRoKTtcbiAgICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgZnMucmVhZGRpcihkaXJQYXRoKTtcbiAgICAgIFxuICAgICAgLy8gQ291bnQgYWxsIGVsZW1lbnQgZmlsZXMgKC5tZCwgLmpzb24sIC55YW1sKSB0byBzdXBwb3J0IGFsbCBlbGVtZW50IHR5cGVzXG4gICAgICAvLyAtIFBlcnNvbmFzOiAubWQgZmlsZXNcbiAgICAgIC8vIC0gU2tpbGxzOiAubWQgZmlsZXMgIFxuICAgICAgLy8gLSBUZW1wbGF0ZXM6IC5tZCBvciAueWFtbCBmaWxlc1xuICAgICAgLy8gLSBBZ2VudHM6IC5tZCBmaWxlc1xuICAgICAgcmV0dXJuIGZpbGVzLmZpbHRlcihmaWxlID0+IFxuICAgICAgICBmaWxlLmVuZHNXaXRoKCcubWQnKSB8fCBcbiAgICAgICAgZmlsZS5lbmRzV2l0aCgnLmpzb24nKSB8fCBcbiAgICAgICAgZmlsZS5lbmRzV2l0aCgnLnlhbWwnKVxuICAgICAgKS5sZW5ndGg7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXIgbWV0aG9kIHRvIGdldCBsaXN0IG9mIGVsZW1lbnRzIGJ5IHR5cGVcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZ2V0RWxlbWVudHNMaXN0KGVsZW1lbnRUeXBlOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGxvY2FsUG9ydGZvbGlvTWFuYWdlciA9IFBvcnRmb2xpb01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICAgIGxldCBlbGVtZW50VHlwZUVudW06IEVsZW1lbnRUeXBlO1xuICAgICAgXG4gICAgICBzd2l0Y2ggKGVsZW1lbnRUeXBlKSB7XG4gICAgICAgIGNhc2UgJ3BlcnNvbmFzJzpcbiAgICAgICAgICBlbGVtZW50VHlwZUVudW0gPSBFbGVtZW50VHlwZS5QRVJTT05BO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdza2lsbHMnOlxuICAgICAgICAgIGVsZW1lbnRUeXBlRW51bSA9IEVsZW1lbnRUeXBlLlNLSUxMO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd0ZW1wbGF0ZXMnOlxuICAgICAgICAgIGVsZW1lbnRUeXBlRW51bSA9IEVsZW1lbnRUeXBlLlRFTVBMQVRFO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdhZ2VudHMnOlxuICAgICAgICAgIGVsZW1lbnRUeXBlRW51bSA9IEVsZW1lbnRUeXBlLkFHRU5UO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIC8vIEluc3RlYWQgb2Ygc2lsZW50bHkgcmV0dXJuaW5nIGVtcHR5IGFycmF5LCB0aHJvdyBkZXNjcmlwdGl2ZSBlcnJvclxuICAgICAgICAgIGNvbnN0IHZhbGlkVHlwZXMgPSBbJ3BlcnNvbmFzJywgJ3NraWxscycsICd0ZW1wbGF0ZXMnLCAnYWdlbnRzJ107XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGVsZW1lbnQgdHlwZTogJyR7ZWxlbWVudFR5cGV9Jy4gVmFsaWQgdHlwZXMgYXJlOiAke3ZhbGlkVHlwZXMuam9pbignLCAnKX1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGlyUGF0aCA9IGxvY2FsUG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKGVsZW1lbnRUeXBlRW51bSk7XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGlmIGRpcmVjdG9yeSBleGlzdHMgYW5kIGlzIGFjY2Vzc2libGVcbiAgICAgIGF3YWl0IGZzLmFjY2VzcyhkaXJQYXRoKTtcbiAgICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgZnMucmVhZGRpcihkaXJQYXRoKTtcbiAgICAgIFxuICAgICAgLy8gRmlsdGVyIGFuZCBleHRyYWN0IG5hbWVzIGZvciBhbGwgZWxlbWVudCBmaWxlIHR5cGVzXG4gICAgICAvLyAtIFBlcnNvbmFzOiAubWQgZmlsZXNcbiAgICAgIC8vIC0gU2tpbGxzOiAubWQgZmlsZXMgIFxuICAgICAgLy8gLSBUZW1wbGF0ZXM6IC5tZCBvciAueWFtbCBmaWxlc1xuICAgICAgLy8gLSBBZ2VudHM6IC5tZCBmaWxlc1xuICAgICAgcmV0dXJuIGZpbGVzXG4gICAgICAgIC5maWx0ZXIoZmlsZSA9PiBmaWxlLmVuZHNXaXRoKCcubWQnKSB8fCBmaWxlLmVuZHNXaXRoKCcuanNvbicpIHx8IGZpbGUuZW5kc1dpdGgoJy55YW1sJykpXG4gICAgICAgIC5tYXAoZmlsZSA9PiB7XG4gICAgICAgICAgLy8gUmVtb3ZlIGZpbGUgZXh0ZW5zaW9uIHRvIGdldCBlbGVtZW50IG5hbWVcbiAgICAgICAgICBpZiAoZmlsZS5lbmRzV2l0aCgnLm1kJykpIHJldHVybiBmaWxlLnJlcGxhY2UoJy5tZCcsICcnKTtcbiAgICAgICAgICBpZiAoZmlsZS5lbmRzV2l0aCgnLmpzb24nKSkgcmV0dXJuIGZpbGUucmVwbGFjZSgnLmpzb24nLCAnJyk7XG4gICAgICAgICAgaWYgKGZpbGUuZW5kc1dpdGgoJy55YW1sJykpIHJldHVybiBmaWxlLnJlcGxhY2UoJy55YW1sJywgJycpO1xuICAgICAgICAgIHJldHVybiBmaWxlO1xuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAvLyBDaGVjayBpZiB0aGlzIGlzIG91ciB2YWxpZGF0aW9uIGVycm9yIGZvciBpbnZhbGlkIGVsZW1lbnQgdHlwZXNcbiAgICAgIGlmIChlcnJvci5tZXNzYWdlICYmIGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJ0ludmFsaWQgZWxlbWVudCB0eXBlOicpKSB7XG4gICAgICAgIHRocm93IGVycm9yOyAvLyBSZS10aHJvdyB2YWxpZGF0aW9uIGVycm9ycyBmb3IgZGVidWdnaW5nXG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEZvciBmaWxlIHN5c3RlbSBlcnJvcnMsIHByb3ZpZGUgY29udGV4dCBhYm91dCB0aGUgb3BlcmF0aW9uXG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvci5jb2RlID09PSAnRU5PRU5UJyBcbiAgICAgICAgPyBgRWxlbWVudCBkaXJlY3Rvcnkgbm90IGZvdW5kIGZvciB0eXBlICcke2VsZW1lbnRUeXBlfScuIERpcmVjdG9yeSBtYXkgbm90IGV4aXN0IHlldC5gXG4gICAgICAgIDogYEZhaWxlZCB0byByZWFkIGVsZW1lbnRzIGRpcmVjdG9yeSBmb3IgdHlwZSAnJHtlbGVtZW50VHlwZX0nOiAke2Vycm9yLm1lc3NhZ2UgfHwgJ1Vua25vd24gZmlsZSBzeXN0ZW0gZXJyb3InfWA7XG4gICAgICBcbiAgICAgIGxvZ2dlci53YXJuKCdFcnJvciBpbiBnZXRFbGVtZW50c0xpc3QnLCB7IFxuICAgICAgICBlbGVtZW50VHlwZSwgXG4gICAgICAgIGVycm9yOiBlcnJvci5tZXNzYWdlLCBcbiAgICAgICAgY29kZTogZXJyb3IuY29kZSBcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyIG1ldGhvZCB0byBsb2FkIGVsZW1lbnQgYnkgdHlwZVxuICAgKiBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIGNvbnRlbnQsIGZpbGVuYW1lLCBhbmQgdHlwZSBwcm9wZXJ0aWVzXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGxvYWRFbGVtZW50QnlUeXBlKGVsZW1lbnROYW1lOiBzdHJpbmcsIGVsZW1lbnRUeXBlOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIC8vIFNFQ1VSSVRZOiBTYW5pdGl6ZSBlbGVtZW50TmFtZSBlYXJseSB0byB1c2UgaW4gZXJyb3IgbWVzc2FnZXMgdG9vXG4gICAgY29uc3Qgc2FuaXRpemVkTmFtZSA9IHBhdGguYmFzZW5hbWUoZWxlbWVudE5hbWUpO1xuICAgIFxuICAgIHRyeSB7XG4gICAgICBjb25zdCBsb2NhbFBvcnRmb2xpb01hbmFnZXIgPSBQb3J0Zm9saW9NYW5hZ2VyLmdldEluc3RhbmNlKCk7XG4gICAgICBsZXQgZWxlbWVudFR5cGVFbnVtOiBFbGVtZW50VHlwZTtcbiAgICAgIFxuICAgICAgc3dpdGNoIChlbGVtZW50VHlwZSkge1xuICAgICAgICBjYXNlICdwZXJzb25hcyc6XG4gICAgICAgICAgZWxlbWVudFR5cGVFbnVtID0gRWxlbWVudFR5cGUuUEVSU09OQTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnc2tpbGxzJzpcbiAgICAgICAgICBlbGVtZW50VHlwZUVudW0gPSBFbGVtZW50VHlwZS5TS0lMTDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndGVtcGxhdGVzJzpcbiAgICAgICAgICBlbGVtZW50VHlwZUVudW0gPSBFbGVtZW50VHlwZS5URU1QTEFURTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYWdlbnRzJzpcbiAgICAgICAgICBlbGVtZW50VHlwZUVudW0gPSBFbGVtZW50VHlwZS5BR0VOVDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAvLyBJbnN0ZWFkIG9mIHNpbGVudGx5IHJldHVybmluZyBudWxsLCB0aHJvdyBkZXNjcmlwdGl2ZSBlcnJvclxuICAgICAgICAgIGNvbnN0IHZhbGlkVHlwZXMgPSBbJ3BlcnNvbmFzJywgJ3NraWxscycsICd0ZW1wbGF0ZXMnLCAnYWdlbnRzJ107XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGVsZW1lbnQgdHlwZTogJyR7ZWxlbWVudFR5cGV9Jy4gVmFsaWQgdHlwZXMgYXJlOiAke3ZhbGlkVHlwZXMuam9pbignLCAnKX1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGlyUGF0aCA9IGxvY2FsUG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKGVsZW1lbnRUeXBlRW51bSk7XG4gICAgICBcbiAgICAgIC8vIEZJWDogQ2hlY2sgZm9yIGFjdHVhbCBmaWxlIGV4dGVuc2lvbnMgdXNlZCBieSBlbGVtZW50cyAoLm1kLCAuanNvbiwgLnlhbWwpXG4gICAgICAvLyBFbGVtZW50cyBhcmUgc3RvcmVkIGFzIG1hcmtkb3duIGZpbGVzIHdpdGggWUFNTCBmcm9udG1hdHRlciwgbm90IEpTT04gZmlsZXNcbiAgICAgIC8vIFByaW9yaXR5IG9yZGVyOiAubWQgKHByaW1hcnkgZm9ybWF0KSwgLmpzb24gKGxlZ2FjeSksIC55YW1sLy55bWwgKGNvbmZpZylcbiAgICAgIGNvbnN0IGV4dGVuc2lvbnMgPSBbJy5tZCcsICcuanNvbicsICcueWFtbCcsICcueW1sJ107XG4gICAgICBsZXQgY29udGVudDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgICBsZXQgZm91bmRGaWxlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICAgIFxuICAgICAgLy8gRGVmaW5lIHJlYXNvbmFibGUgZmlsZSBzaXplIGxpbWl0ICgxME1CKVxuICAgICAgY29uc3QgTUFYX0ZJTEVfU0laRSA9IDEwICogMTAyNCAqIDEwMjQ7IC8vIDEwTUJcbiAgICAgIFxuICAgICAgZm9yIChjb25zdCBleHQgb2YgZXh0ZW5zaW9ucykge1xuICAgICAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbihkaXJQYXRoLCBgJHtzYW5pdGl6ZWROYW1lfSR7ZXh0fWApO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIENoZWNrIGZpbGUgc2l6ZSBiZWZvcmUgcmVhZGluZyB0byBwcmV2ZW50IG1lbW9yeSBpc3N1ZXNcbiAgICAgICAgICBjb25zdCBzdGF0cyA9IGF3YWl0IGZzLnN0YXQoZmlsZVBhdGgpO1xuICAgICAgICAgIGlmIChzdGF0cy5zaXplID4gTUFYX0ZJTEVfU0laRSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlIHNpemUgZXhjZWVkcyBsaW1pdCBvZiAxME1COiAke3N0YXRzLnNpemV9IGJ5dGVzYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIGNvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShmaWxlUGF0aCwgJ3V0Zi04Jyk7XG4gICAgICAgICAgZm91bmRGaWxlID0gZmlsZVBhdGg7XG4gICAgICAgICAgYnJlYWs7IC8vIEZvdW5kIHRoZSBmaWxlLCBzdG9wIHNlYXJjaGluZ1xuICAgICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICAgIC8vIEZpbGUgZG9lc24ndCBleGlzdCB3aXRoIHRoaXMgZXh0ZW5zaW9uLCB0cnkgdGhlIG5leHQgb25lXG4gICAgICAgICAgaWYgKGVyci5jb2RlICE9PSAnRU5PRU5UJykge1xuICAgICAgICAgICAgdGhyb3cgZXJyOyAvLyBSZS10aHJvdyBub24tZmlsZS1ub3QtZm91bmQgZXJyb3JzXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEZJWDogT25seSBjaGVjayBmb3VuZEZpbGUsIG5vdCBjb250ZW50IChlbXB0eSBmaWxlcyBhcmUgdmFsaWQpXG4gICAgICBpZiAoIWZvdW5kRmlsZSkge1xuICAgICAgICB0aHJvdyBPYmplY3QuYXNzaWduKG5ldyBFcnJvcihgRmlsZSBub3QgZm91bmRgKSwgeyBjb2RlOiAnRU5PRU5UJyB9KTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gUmV0dXJuIGEgbWluaW1hbCBJRWxlbWVudC1saWtlIG9iamVjdCB0aGF0IHBvcnRmb2xpb01hbmFnZXIuc2F2ZUVsZW1lbnQgY2FuIGhhbmRsZVxuICAgICAgLy8gVGhpcyBwcmVzZXJ2ZXMgdGhlIHJhdyBtYXJrZG93biBjb250ZW50IGZvciBzeW5jaW5nIHRvIEdpdEh1YlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLy8gSUVsZW1lbnQgcmVxdWlyZWQgcHJvcGVydGllc1xuICAgICAgICBpZDogYCR7ZWxlbWVudFR5cGV9XyR7c2FuaXRpemVkTmFtZX1fJHtEYXRlLm5vdygpfWAsXG4gICAgICAgIHR5cGU6IGVsZW1lbnRUeXBlRW51bSxcbiAgICAgICAgdmVyc2lvbjogJzEuMC4wJyxcbiAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICBuYW1lOiBzYW5pdGl6ZWROYW1lLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBgTG9hZGVkIGZyb20gJHtwYXRoLmJhc2VuYW1lKGZvdW5kRmlsZSl9YCxcbiAgICAgICAgICBhdXRob3I6ICd1bmtub3duJyxcbiAgICAgICAgICBjcmVhdGVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgbW9kaWZpZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICB0YWdzOiBbXVxuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLy8gSUVsZW1lbnQgcmVxdWlyZWQgbWV0aG9kcyAobWluaW1hbCBpbXBsZW1lbnRhdGlvbnMgZm9yIHN5bmMpXG4gICAgICAgIHZhbGlkYXRlOiAoKSA9PiAoeyBcbiAgICAgICAgICBpc1ZhbGlkOiB0cnVlLCBcbiAgICAgICAgICBlcnJvcnM6IFtdIGFzIGFueVtdLCBcbiAgICAgICAgICB3YXJuaW5nczogW10gYXMgYW55W10gXG4gICAgICAgIH0pLFxuICAgICAgICBzZXJpYWxpemU6ICgpID0+IGNvbnRlbnQgfHwgJycsXG4gICAgICAgIGRlc2VyaWFsaXplOiAoKSA9PiB7IC8qIG5vLW9wICovIH0sXG4gICAgICAgIGdldFN0YXR1czogKCkgPT4gKHsgc3RhdHVzOiAnYWN0aXZlJyBhcyBjb25zdCB9KSxcbiAgICAgICAgXG4gICAgICAgIC8vIEFkZGl0aW9uYWwgcHJvcGVydGllcyBmb3IgcG9ydGZvbGlvIHN5bmNcbiAgICAgICAgY29udGVudDogY29udGVudCB8fCAnJyxcbiAgICAgICAgZmlsZW5hbWU6IHBhdGguYmFzZW5hbWUoZm91bmRGaWxlKVxuICAgICAgfSBhcyBhbnk7IC8vIFR5cGUgYXNzZXJ0aW9uIG5lZWRlZCBzaW5jZSB3ZSdyZSBkdWNrLXR5cGluZyBJRWxlbWVudFxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgb3VyIHZhbGlkYXRpb24gZXJyb3IgZm9yIGludmFsaWQgZWxlbWVudCB0eXBlc1xuICAgICAgaWYgKGVycm9yLm1lc3NhZ2UgJiYgZXJyb3IubWVzc2FnZS5pbmNsdWRlcygnSW52YWxpZCBlbGVtZW50IHR5cGU6JykpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7IC8vIFJlLXRocm93IHZhbGlkYXRpb24gZXJyb3JzIGZvciBkZWJ1Z2dpbmdcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gUHJvdmlkZSBzcGVjaWZpYyBlcnJvciBtZXNzYWdlcyBmb3IgY29tbW9uIGZpbGUgc3lzdGVtIGVycm9yc1xuICAgICAgbGV0IGVycm9yTWVzc2FnZTogc3RyaW5nO1xuICAgICAgXG4gICAgICBpZiAoZXJyb3IuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gYEVsZW1lbnQgJyR7c2FuaXRpemVkTmFtZX0nIG5vdCBmb3VuZCBpbiAke2VsZW1lbnRUeXBlfS4gU2VhcmNoZWQgZm9yOiAke3Nhbml0aXplZE5hbWV9Lm1kLCAke3Nhbml0aXplZE5hbWV9Lmpzb24sICR7c2FuaXRpemVkTmFtZX0ueWFtbCwgJHtzYW5pdGl6ZWROYW1lfS55bWxgO1xuICAgICAgfSBlbHNlIGlmIChlcnJvciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG4gICAgICAgIGVycm9yTWVzc2FnZSA9IGBFbGVtZW50ICcke3Nhbml0aXplZE5hbWV9JyBpbiAke2VsZW1lbnRUeXBlfSBjb250YWlucyBpbnZhbGlkIGNvbnRlbnQ6ICR7ZXJyb3IubWVzc2FnZX1gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gYEZhaWxlZCB0byBsb2FkIGVsZW1lbnQgJyR7c2FuaXRpemVkTmFtZX0nIGZyb20gJHtlbGVtZW50VHlwZX06ICR7ZXJyb3IubWVzc2FnZSB8fCAnVW5rbm93biBlcnJvcid9YDtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgbG9nZ2VyLndhcm4oJ0Vycm9yIGluIGxvYWRFbGVtZW50QnlUeXBlJywgeyBcbiAgICAgICAgZWxlbWVudE5hbWU6IHNhbml0aXplZE5hbWUsIFxuICAgICAgICBvcmlnaW5hbE5hbWU6IGVsZW1lbnROYW1lICE9PSBzYW5pdGl6ZWROYW1lID8gZWxlbWVudE5hbWUgOiB1bmRlZmluZWQsXG4gICAgICAgIGVsZW1lbnRUeXBlLCBcbiAgICAgICAgZXJyb3I6IGVycm9yLm1lc3NhZ2UsIFxuICAgICAgICBjb2RlOiBlcnJvci5jb2RlIFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJ1bigpIHtcbiAgICBsb2dnZXIuaW5mbyhcIlN0YXJ0aW5nIERvbGxob3VzZU1DUCBzZXJ2ZXIuLi5cIik7XG4gICAgLy8gRG9ja2VyIGJ1aWxkIHZlcmlmaWNhdGlvbiAtIHByb3ZlcyB3ZSdyZSBydW5uaW5nIGZyZXNoIGNvZGVcbiAgICBsb2dnZXIuaW5mbyhcIkJVSUxEIFZFUklGSUNBVElPTjogUnVubmluZyBidWlsZCBmcm9tIDIwMjUtMDgtMTcgMTY6MzAgVVRDIC0gUFI2MDYgQVJNNjQgZml4XCIpO1xuICAgIFxuICAgIC8vIEZJWCAjNjEwOiBJbml0aWFsaXplIHBvcnRmb2xpbyBhbmQgY29tcGxldGUgc2V0dXAgQkVGT1JFIGNvbm5lY3RpbmcgdG8gTUNQXG4gICAgLy8gVGhpcyBlbnN1cmVzIHBlcnNvbmFzIGFuZCBwb3J0Zm9saW8gYXJlIHJlYWR5IHdoZW4gTUNQIGNvbW1hbmRzIGFycml2ZVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmluaXRpYWxpemVQb3J0Zm9saW8oKTtcbiAgICAgIGF3YWl0IHRoaXMuY29tcGxldGVJbml0aWFsaXphdGlvbigpO1xuICAgICAgbG9nZ2VyLmluZm8oXCJQb3J0Zm9saW8gYW5kIHBlcnNvbmFzIGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseVwiKTtcbiAgICAgIC8vIE91dHB1dCBtZXNzYWdlIHRoYXQgRG9ja2VyIHRlc3RzIGNhbiBkZXRlY3RcbiAgICAgIGxvZ2dlci5pbmZvKFwiRG9sbGhvdXNlTUNQIHNlcnZlciByZWFkeSAtIHdhaXRpbmcgZm9yIE1DUCBjb25uZWN0aW9uIG9uIHN0ZGlvXCIpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ0RvbGxob3VzZU1DUFNlcnZlci5ydW4uaW5pdGlhbGl6YXRpb24nLCBlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjsgLy8gUmUtdGhyb3cgdG8gcHJldmVudCBzZXJ2ZXIgZnJvbSBzdGFydGluZyB3aXRoIGluY29tcGxldGUgaW5pdGlhbGl6YXRpb25cbiAgICB9XG4gICAgXG4gICAgY29uc3QgdHJhbnNwb3J0ID0gbmV3IFN0ZGlvU2VydmVyVHJhbnNwb3J0KCk7XG4gICAgXG4gICAgLy8gU2V0IHVwIGdyYWNlZnVsIHNodXRkb3duIGhhbmRsZXJzXG4gICAgY29uc3QgY2xlYW51cCA9IGFzeW5jICgpID0+IHtcbiAgICAgIGxvZ2dlci5pbmZvKFwiU2h1dHRpbmcgZG93biBEb2xsaG91c2VNQ1Agc2VydmVyLi4uXCIpO1xuICAgICAgXG4gICAgICB0cnkge1xuICAgICAgICAvLyBDbGVhbiB1cCBHaXRIdWIgYXV0aCBtYW5hZ2VyXG4gICAgICAgIGlmICh0aGlzLmdpdGh1YkF1dGhNYW5hZ2VyKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5naXRodWJBdXRoTWFuYWdlci5jbGVhbnVwKCk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIENsZWFuIHVwIGFueSBvdGhlciByZXNvdXJjZXNcbiAgICAgICAgXG4gICAgICAgIGxvZ2dlci5pbmZvKFwiQ2xlYW51cCBjb21wbGV0ZWRcIik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dnZXIuZXJyb3IoXCJFcnJvciBkdXJpbmcgY2xlYW51cFwiLCB7IGVycm9yIH0pO1xuICAgICAgfVxuICAgICAgXG4gICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgfTtcbiAgICBcbiAgICAvLyBSZWdpc3RlciBzaHV0ZG93biBoYW5kbGVyc1xuICAgIHByb2Nlc3Mub24oJ1NJR0lOVCcsIGNsZWFudXApO1xuICAgIHByb2Nlc3Mub24oJ1NJR1RFUk0nLCBjbGVhbnVwKTtcbiAgICBwcm9jZXNzLm9uKCdTSUdIVVAnLCBjbGVhbnVwKTtcbiAgICBcbiAgICBhd2FpdCB0aGlzLnNlcnZlci5jb25uZWN0KHRyYW5zcG9ydCk7XG4gICAgLy8gTWFyayB0aGF0IE1DUCBpcyBub3cgY29ubmVjdGVkIC0gbm8gbW9yZSBjb25zb2xlIG91dHB1dCBhbGxvd2VkXG4gICAgbG9nZ2VyLnNldE1DUENvbm5lY3RlZCgpO1xuICAgIGxvZ2dlci5pbmZvKFwiRG9sbGhvdXNlTUNQIHNlcnZlciBydW5uaW5nIG9uIHN0ZGlvXCIpO1xuICB9XG59XG5cbi8vIEV4cG9ydCBpcyBhbHJlYWR5IGF0IGNsYXNzIGRlY2xhcmF0aW9uXG5cbi8vIE9ubHkgc3RhcnQgdGhlIHNlcnZlciBpZiB0aGlzIGZpbGUgaXMgYmVpbmcgcnVuIGRpcmVjdGx5IChub3QgaW1wb3J0ZWQgYnkgdGVzdHMpXG4vLyBIYW5kbGUgZGlmZmVyZW50IGV4ZWN1dGlvbiBtZXRob2RzIChkaXJlY3QsIG5weCwgQ0xJKVxuY29uc3QgaXNEaXJlY3RFeGVjdXRpb24gPSBpbXBvcnQubWV0YS51cmwgPT09IGBmaWxlOi8vJHtwcm9jZXNzLmFyZ3ZbMV19YDtcbmNvbnN0IGlzTnB4RXhlY3V0aW9uID0gcHJvY2Vzcy5lbnYubnBtX2V4ZWNwYXRoPy5pbmNsdWRlcygnbnB4Jyk7XG5jb25zdCBpc0NsaUV4ZWN1dGlvbiA9IHByb2Nlc3MuYXJndlsxXT8uZW5kc1dpdGgoJy9kb2xsaG91c2VtY3AnKSB8fCBwcm9jZXNzLmFyZ3ZbMV0/LmVuZHNXaXRoKCdcXFxcZG9sbGhvdXNlbWNwJyk7XG5jb25zdCBpc1Rlc3QgPSBwcm9jZXNzLmVudi5KRVNUX1dPUktFUl9JRDtcblxuLy8gUHJvZ3Jlc3NpdmUgc3RhcnR1cCB3aXRoIHJldHJpZXMgZm9yIG5weC9DTEkgZXhlY3V0aW9uXG5jb25zdCBTVEFSVFVQX0RFTEFZUyA9IFsxMCwgNTAsIDEwMCwgMjAwXTsgLy8gUHJvZ3Jlc3NpdmUgZGVsYXlzIGluIG1zXG5cbmFzeW5jIGZ1bmN0aW9uIHN0YXJ0U2VydmVyV2l0aFJldHJ5KHJldHJpZXNMZWZ0ID0gU1RBUlRVUF9ERUxBWVMubGVuZ3RoKTogUHJvbWlzZTx2b2lkPiB7XG4gIHRyeSB7XG4gICAgY29uc3Qgc2VydmVyID0gbmV3IERvbGxob3VzZU1DUFNlcnZlcigpO1xuICAgIGF3YWl0IHNlcnZlci5ydW4oKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAocmV0cmllc0xlZnQgPiAwICYmIChpc05weEV4ZWN1dGlvbiB8fCBpc0NsaUV4ZWN1dGlvbikpIHtcbiAgICAgIC8vIFRyeSBhZ2FpbiB3aXRoIGEgbG9uZ2VyIGRlbGF5XG4gICAgICBjb25zdCBkZWxheUluZGV4ID0gU1RBUlRVUF9ERUxBWVMubGVuZ3RoIC0gcmV0cmllc0xlZnQ7XG4gICAgICBjb25zdCBkZWxheSA9IFNUQVJUVVBfREVMQVlTW2RlbGF5SW5kZXhdO1xuICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIGRlbGF5KSk7XG4gICAgICByZXR1cm4gc3RhcnRTZXJ2ZXJXaXRoUmV0cnkocmV0cmllc0xlZnQgLSAxKTtcbiAgICB9XG4gICAgLy8gRmluYWwgZmFpbHVyZSAtIG1pbmltYWwgZXJyb3IgbWVzc2FnZSBmb3Igc2VjdXJpdHlcbiAgICAvLyBOb3RlOiBVc2luZyBjb25zb2xlLmVycm9yIGhlcmUgaXMgaW50ZW50aW9uYWwgYXMgaXQncyB0aGUgZmluYWwgZXJyb3IgYmVmb3JlIGV4aXRcbiAgICBjb25zb2xlLmVycm9yKFwiW0RvbGxob3VzZU1DUF0gU2VydmVyIHN0YXJ0dXAgZmFpbGVkXCIpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxufVxuXG5pZiAoKGlzRGlyZWN0RXhlY3V0aW9uIHx8IGlzTnB4RXhlY3V0aW9uIHx8IGlzQ2xpRXhlY3V0aW9uKSAmJiAhaXNUZXN0KSB7XG4gIHN0YXJ0U2VydmVyV2l0aFJldHJ5KCkuY2F0Y2goKCkgPT4ge1xuICAgIC8vIE5vdGU6IFVzaW5nIGNvbnNvbGUuZXJyb3IgaGVyZSBpcyBpbnRlbnRpb25hbCBhcyBpdCdzIHRoZSBmaW5hbCBlcnJvciBiZWZvcmUgZXhpdFxuICAgIGNvbnNvbGUuZXJyb3IoXCJbRG9sbGhvdXNlTUNQXSBTZXJ2ZXIgc3RhcnR1cCBmYWlsZWRcIik7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9KTtcbn0iXX0=
4949
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUVBLGlEQUFpRDtBQUNqRCxPQUFPLENBQUMsRUFBRSxDQUFDLG1CQUFtQixFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7SUFDeEMsT0FBTyxDQUFDLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO0lBQ3RELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsQ0FBQyxDQUFDLENBQUM7QUFFSCxPQUFPLENBQUMsRUFBRSxDQUFDLG9CQUFvQixFQUFFLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxFQUFFO0lBQ25ELE9BQU8sQ0FBQyxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztJQUN0RCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLENBQUMsQ0FBQyxDQUFDO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDekUsT0FBTyxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEMsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBd0IsTUFBTSw4QkFBOEIsQ0FBQztBQUNoSSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFlBQVksRUFBaUIsTUFBTSx5QkFBeUIs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QUNwRixPQUFPLENBQUMsS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7UUFDdEQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIjIS91c3IvYmluL2VudiBub2RlXG5cbi8vIERlZmVuc2l2ZSBlcnJvciBoYW5kbGluZyBmb3IgbnB4L0NMSSBleGVjdXRpb25cbnByb2Nlc3Mub24oJ3VuY2F1Z2h0RXhjZXB0aW9uJywgKGVycm9yKSA9PiB7XG4gIGNvbnNvbGUuZXJyb3IoJ1tEb2xsaG91c2VNQ1BdIFNlcnZlciBzdGFydHVwIGZhaWxlZCcpO1xuICBwcm9jZXNzLmV4aXQoMSk7XG59KTtcblxucHJvY2Vzcy5vbigndW5oYW5kbGVkUmVqZWN0aW9uJywgKHJlYXNvbiwgcHJvbWlzZSkgPT4ge1xuICBjb25zb2xlLmVycm9yKCdbRG9sbGhvdXNlTUNQXSBTZXJ2ZXIgc3RhcnR1cCBmYWlsZWQnKTtcbiAgcHJvY2Vzcy5leGl0KDEpO1xufSk7XG5cbmltcG9ydCB7IFNlcnZlciB9IGZyb20gXCJAbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrL3NlcnZlci9pbmRleC5qc1wiO1xuaW1wb3J0IHsgU3RkaW9TZXJ2ZXJUcmFuc3BvcnQgfSBmcm9tIFwiQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay9zZXJ2ZXIvc3RkaW8uanNcIjtcbmltcG9ydCB7IE1jcEVycm9yLCBFcnJvckNvZGUgfSBmcm9tIFwiQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay90eXBlcy5qc1wiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBsb2FkSW5kaWNhdG9yQ29uZmlnLCBmb3JtYXRJbmRpY2F0b3IsIHZhbGlkYXRlQ3VzdG9tRm9ybWF0LCB0eXBlIEluZGljYXRvckNvbmZpZyB9IGZyb20gJy4vY29uZmlnL2luZGljYXRvci1jb25maWcuanMnO1xuaW1wb3J0IHsgU2VjdXJlWWFtbFBhcnNlciB9IGZyb20gJy4vc2VjdXJpdHkvc2VjdXJlWWFtbFBhcnNlci5qcyc7XG5pbXBvcnQgeyBTZWN1cml0eUVycm9yIH0gZnJvbSAnLi9lcnJvcnMvU2VjdXJpdHlFcnJvci5qcyc7XG5pbXBvcnQgeyBTZWN1cmVFcnJvckhhbmRsZXIgfSBmcm9tICcuL3NlY3VyaXR5L2Vycm9ySGFuZGxlci5qcyc7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXIsIEVycm9yQ2F0ZWdvcnkgfSBmcm9tICcuL3V0aWxzL0Vycm9ySGFuZGxlci5qcyc7XG5cbi8vIEltcG9ydCBtb2R1bGFyaXplZCBjb21wb25lbnRzXG5pbXBvcnQgeyBQZXJzb25hLCBQZXJzb25hTWV0YWRhdGEgfSBmcm9tICcuL3R5cGVzL3BlcnNvbmEuanMnO1xuaW1wb3J0IHsgQVBJQ2FjaGUsIENvbGxlY3Rpb25DYWNoZSB9IGZyb20gJy4vY2FjaGUvaW5kZXguanMnO1xuaW1wb3J0IHsgdmFsaWRhdGVGaWxlbmFtZSwgc2FuaXRpemVJbnB1dCwgdmFsaWRhdGVDb250ZW50U2l6ZSwgdmFsaWRhdGVVc2VybmFtZSwgTUNQSW5wdXRWYWxpZGF0b3IgfSBmcm9tICcuL3NlY3VyaXR5L0lucHV0VmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IFNFQ1VSSVRZX0xJTUlUUywgVkFMSURBVElPTl9QQVRURVJOUyB9IGZyb20gJy4vc2VjdXJpdHkvY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IENvbnRlbnRWYWxpZGF0b3IgfSBmcm9tICcuL3NlY3VyaXR5L2NvbnRlbnRWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgUGF0aFZhbGlkYXRvciB9IGZyb20gJy4vc2VjdXJpdHkvcGF0aFZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBGaWxlTG9ja01hbmFnZXIgfSBmcm9tICcuL3NlY3VyaXR5L2ZpbGVMb2NrTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBnZW5lcmF0ZUFub255bW91c0lkLCBnZW5lcmF0ZVVuaXF1ZUlkLCBzbHVnaWZ5IH0gZnJvbSAnLi91dGlscy9maWxlc3lzdGVtLmpzJztcbmltcG9ydCB7IEdpdEh1YkNsaWVudCwgQ29sbGVjdGlvbkJyb3dzZXIsIENvbGxlY3Rpb25JbmRleE1hbmFnZXIsIENvbGxlY3Rpb25TZWFyY2gsIFBlcnNvbmFEZXRhaWxzLCBQZXJzb25hU3VibWl0dGVyLCBFbGVtZW50SW5zdGFsbGVyIH0gZnJvbSAnLi9jb2xsZWN0aW9uL2luZGV4LmpzJztcbmltcG9ydCB7IFNlcnZlclNldHVwLCBJVG9vbEhhbmRsZXIgfSBmcm9tICcuL3NlcnZlci9pbmRleC5qcyc7XG5pbXBvcnQgeyBHaXRIdWJBdXRoTWFuYWdlciwgdHlwZSBEZXZpY2VDb2RlUmVzcG9uc2UgfSBmcm9tICcuL2F1dGgvR2l0SHViQXV0aE1hbmFnZXIuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgUGVyc29uYUV4cG9ydGVyLCBQZXJzb25hSW1wb3J0ZXIsIFBlcnNvbmFTaGFyZXIgfSBmcm9tICcuL3BlcnNvbmEvZXhwb3J0LWltcG9ydC9pbmRleC5qcyc7XG5pbXBvcnQgeyBpc0RlZmF1bHRQZXJzb25hIH0gZnJvbSAnLi9jb25zdGFudHMvZGVmYXVsdFBlcnNvbmFzLmpzJztcbmltcG9ydCB7IFBvcnRmb2xpb01hbmFnZXIsIEVsZW1lbnRUeXBlIH0gZnJvbSAnLi9wb3J0Zm9saW8vUG9ydGZvbGlvTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBNaWdyYXRpb25NYW5hZ2VyIH0gZnJvbSAnLi9wb3J0Zm9saW8vTWlncmF0aW9uTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBTa2lsbE1hbmFnZXIgfSBmcm9tICcuL2VsZW1lbnRzL3NraWxscy9pbmRleC5qcyc7XG5pbXBvcnQgeyBTa2lsbCB9IGZyb20gJy4vZWxlbWVudHMvc2tpbGxzL1NraWxsLmpzJztcbmltcG9ydCB7IFRlbXBsYXRlTWFuYWdlciB9IGZyb20gJy4vZWxlbWVudHMvdGVtcGxhdGVzL1RlbXBsYXRlTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gJy4vZWxlbWVudHMvdGVtcGxhdGVzL1RlbXBsYXRlLmpzJztcbmltcG9ydCB7IEFnZW50TWFuYWdlciB9IGZyb20gJy4vZWxlbWVudHMvYWdlbnRzL0FnZW50TWFuYWdlci5qcyc7XG5pbXBvcnQgeyBBZ2VudCB9IGZyb20gJy4vZWxlbWVudHMvYWdlbnRzL0FnZW50LmpzJztcbmltcG9ydCB7IENvbmZpZ01hbmFnZXIgfSBmcm9tICcuL2NvbmZpZy9Db25maWdNYW5hZ2VyLmpzJztcbmltcG9ydCB7IHNwYXduIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSAndXJsJztcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tICdvcyc7XG5cblxuXG4vLyBEZXRlY3QgZXhlY3V0aW9uIGVudmlyb25tZW50XG5jb25zdCBFWEVDVVRJT05fRU5WID0ge1xuICBpc05weDogcHJvY2Vzcy5lbnYubnBtX2V4ZWNwYXRoPy5pbmNsdWRlcygnbnB4JykgfHwgZmFsc2UsXG4gIGlzQ2xpOiBwcm9jZXNzLmFyZ3ZbMV0/LmVuZHNXaXRoKCcvZG9sbGhvdXNlbWNwJykgfHwgZmFsc2UsXG4gIGlzRGlyZWN0OiAhcHJvY2Vzcy5lbnYubnBtX2V4ZWNwYXRoLFxuICBjd2Q6IHByb2Nlc3MuY3dkKCksXG4gIHNjcmlwdFBhdGg6IHByb2Nlc3MuYXJndlsxXSxcbn07XG5cbi8vIE9ubHkgbG9nIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCBpbiBkZWJ1ZyBtb2RlXG5pZiAocHJvY2Vzcy5lbnYuRE9MTEhPVVNFX0RFQlVHKSB7XG4gIGNvbnNvbGUuZXJyb3IoJ1tEb2xsaG91c2VNQ1BdIERlYnVnIG1vZGUgZW5hYmxlZCcpO1xufVxuXG5leHBvcnQgY2xhc3MgRG9sbGhvdXNlTUNQU2VydmVyIGltcGxlbWVudHMgSVRvb2xIYW5kbGVyIHtcbiAgcHJpdmF0ZSBzZXJ2ZXI6IFNlcnZlcjtcbiAgcHVibGljIHBlcnNvbmFzRGlyOiBzdHJpbmcgfCBudWxsO1xuICBwcml2YXRlIHBlcnNvbmFzOiBNYXA8c3RyaW5nLCBQZXJzb25hPiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSBhY3RpdmVQZXJzb25hOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjdXJyZW50VXNlcjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgaXNJbml0aWFsaXplZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGluaXRpYWxpemF0aW9uUHJvbWlzZTogUHJvbWlzZTx2b2lkPiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGFwaUNhY2hlOiBBUElDYWNoZSA9IG5ldyBBUElDYWNoZSgpO1xuICBwcml2YXRlIGNvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlID0gbmV3IENvbGxlY3Rpb25DYWNoZSgpO1xuICBwcml2YXRlIHJhdGVMaW1pdFRyYWNrZXIgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyW10+KCk7XG4gIHByaXZhdGUgaW5kaWNhdG9yQ29uZmlnOiBJbmRpY2F0b3JDb25maWc7XG4gIHByaXZhdGUgZ2l0aHViQ2xpZW50OiBHaXRIdWJDbGllbnQ7XG4gIHByaXZhdGUgZ2l0aHViQXV0aE1hbmFnZXI6IEdpdEh1YkF1dGhNYW5hZ2VyO1xuICBwcml2YXRlIGNvbGxlY3Rpb25JbmRleE1hbmFnZXI6IENvbGxlY3Rpb25JbmRleE1hbmFnZXI7XG4gIHByaXZhdGUgY29sbGVjdGlvbkJyb3dzZXI6IENvbGxlY3Rpb25Ccm93c2VyO1xuICBwcml2YXRlIGNvbGxlY3Rpb25TZWFyY2g6IENvbGxlY3Rpb25TZWFyY2g7XG4gIHByaXZhdGUgcGVyc29uYURldGFpbHM6IFBlcnNvbmFEZXRhaWxzO1xuICBwcml2YXRlIGVsZW1lbnRJbnN0YWxsZXI6IEVsZW1lbnRJbnN0YWxsZXI7XG4gIHByaXZhdGUgcGVyc29uYVN1Ym1pdHRlcjogUGVyc29uYVN1Ym1pdHRlcjtcbiAgcHJpdmF0ZSBzZXJ2ZXJTZXR1cDogU2VydmVyU2V0dXA7XG4gIHByaXZhdGUgcGVyc29uYUV4cG9ydGVyOiBQZXJzb25hRXhwb3J0ZXI7XG4gIHByaXZhdGUgcGVyc29uYUltcG9ydGVyPzogUGVyc29uYUltcG9ydGVyO1xuICBwcml2YXRlIHBlcnNvbmFTaGFyZXI6IFBlcnNvbmFTaGFyZXI7XG4gIHByaXZhdGUgcG9ydGZvbGlvTWFuYWdlcjogUG9ydGZvbGlvTWFuYWdlcjtcbiAgcHJpdmF0ZSBtaWdyYXRpb25NYW5hZ2VyOiBNaWdyYXRpb25NYW5hZ2VyO1xuICBwcml2YXRlIHNraWxsTWFuYWdlcjogU2tpbGxNYW5hZ2VyO1xuICBwcml2YXRlIHRlbXBsYXRlTWFuYWdlcjogVGVtcGxhdGVNYW5hZ2VyO1xuICBwcml2YXRlIGFnZW50TWFuYWdlcjogQWdlbnRNYW5hZ2VyO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2VydmVyID0gbmV3IFNlcnZlcihcbiAgICAgIHtcbiAgICAgICAgbmFtZTogXCJkb2xsaG91c2VtY3BcIixcbiAgICAgICAgdmVyc2lvbjogXCIxLjAuMC1idWlsZC0yMDI1MDgxNy0xNjMwLXByNjA2XCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjYXBhYmlsaXRpZXM6IHtcbiAgICAgICAgICB0b29sczoge30sXG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgKTtcblxuICAgIC8vIEluaXRpYWxpemUgcG9ydGZvbGlvIHN5c3RlbVxuICAgIHRoaXMucG9ydGZvbGlvTWFuYWdlciA9IFBvcnRmb2xpb01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICB0aGlzLm1pZ3JhdGlvbk1hbmFnZXIgPSBuZXcgTWlncmF0aW9uTWFuYWdlcih0aGlzLnBvcnRmb2xpb01hbmFnZXIpO1xuICAgIFxuICAgIC8vIENSSVRJQ0FMIEZJWDogRG9uJ3QgYWNjZXNzIGRpcmVjdG9yaWVzIHVudGlsIGFmdGVyIG1pZ3JhdGlvbiBydW5zXG4gICAgLy8gUHJldmlvdXNseTogdGhpcy5wZXJzb25hc0RpciB3YXMgc2V0IGhlcmUsIGNyZWF0aW5nIGRpcmVjdG9yaWVzIGJlZm9yZSBtaWdyYXRpb24gY291bGQgZml4IHRoZW1cbiAgICAvLyBOb3c6IFdlIGRlbGF5IGRpcmVjdG9yeSBhY2Nlc3MgdW50aWwgaW5pdGlhbGl6ZVBvcnRmb2xpbygpIGNvbXBsZXRlc1xuICAgIC8vIFVzaW5nIG51bGwgdG8gbWFrZSB0aGUgdW5pbml0aWFsaXplZCBzdGF0ZSBleHBsaWNpdCAocGVyIFBSIHJldmlldyBmZWVkYmFjaylcbiAgICB0aGlzLnBlcnNvbmFzRGlyID0gbnVsbDsgLy8gV2lsbCBiZSBwcm9wZXJseSBpbml0aWFsaXplZCBpbiBjb21wbGV0ZUluaXRpYWxpemF0aW9uKClcbiAgICBcbiAgICAvLyBJbml0aWFsaXplIGVsZW1lbnQgbWFuYWdlcnNcbiAgICB0aGlzLnNraWxsTWFuYWdlciA9IG5ldyBTa2lsbE1hbmFnZXIoKTtcbiAgICB0aGlzLnRlbXBsYXRlTWFuYWdlciA9IG5ldyBUZW1wbGF0ZU1hbmFnZXIoKTtcbiAgICB0aGlzLmFnZW50TWFuYWdlciA9IG5ldyBBZ2VudE1hbmFnZXIodGhpcy5wb3J0Zm9saW9NYW5hZ2VyLmdldEJhc2VEaXIoKSk7XG4gICAgXG4gICAgLy8gTG9nIHJlc29sdmVkIHBhdGggZm9yIGRlYnVnZ2luZ1xuICAgIGxvZ2dlci5pbmZvKGBQZXJzb25hcyBkaXJlY3RvcnkgcmVzb2x2ZWQgdG86ICR7dGhpcy5wZXJzb25hc0Rpcn1gKTtcbiAgICBcbiAgICAvLyBQYXRoVmFsaWRhdG9yIHdpbGwgYmUgaW5pdGlhbGl6ZWQgYWZ0ZXIgbWlncmF0aW9uIGNvbXBsZXRlc1xuICAgIFxuICAgIC8vIExvYWQgdXNlciBpZGVudGl0eSBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgIHRoaXMuY3VycmVudFVzZXIgPSBwcm9jZXNzLmVudi5ET0xMSE9VU0VfVVNFUiB8fCBudWxsO1xuICAgIFxuICAgIC8vIExvYWQgaW5kaWNhdG9yIGNvbmZpZ3VyYXRpb25cbiAgICB0aGlzLmluZGljYXRvckNvbmZpZyA9IGxvYWRJbmRpY2F0b3JDb25maWcoKTtcbiAgICBcbiAgICAvLyBJbml0aWFsaXplIHBlcnNvbmEgbWFuYWdlclxuICAgIFxuICAgIC8vIEluaXRpYWxpemUgY29sbGVjdGlvbiBtb2R1bGVzXG4gICAgdGhpcy5naXRodWJDbGllbnQgPSBuZXcgR2l0SHViQ2xpZW50KHRoaXMuYXBpQ2FjaGUsIHRoaXMucmF0ZUxpbWl0VHJhY2tlcik7XG4gICAgdGhpcy5naXRodWJBdXRoTWFuYWdlciA9IG5ldyBHaXRIdWJBdXRoTWFuYWdlcih0aGlzLmFwaUNhY2hlKTtcbiAgICB0aGlzLmNvbGxlY3Rpb25JbmRleE1hbmFnZXIgPSBuZXcgQ29sbGVjdGlvbkluZGV4TWFuYWdlcigpO1xuICAgIHRoaXMuY29sbGVjdGlvbkJyb3dzZXIgPSBuZXcgQ29sbGVjdGlvbkJyb3dzZXIodGhpcy5naXRodWJDbGllbnQsIHRoaXMuY29sbGVjdGlvbkNhY2hlLCB0aGlzLmNvbGxlY3Rpb25JbmRleE1hbmFnZXIpO1xuICAgIHRoaXMuY29sbGVjdGlvblNlYXJjaCA9IG5ldyBDb2xsZWN0aW9uU2VhcmNoKHRoaXMuZ2l0aHViQ2xpZW50LCB0aGlzLmNvbGxlY3Rpb25DYWNoZSk7XG4gICAgdGhpcy5wZXJzb25hRGV0YWlscyA9IG5ldyBQZXJzb25hRGV0YWlscyh0aGlzLmdpdGh1YkNsaWVudCk7XG4gICAgdGhpcy5lbGVtZW50SW5zdGFsbGVyID0gbmV3IEVsZW1lbnRJbnN0YWxsZXIodGhpcy5naXRodWJDbGllbnQpO1xuICAgIHRoaXMucGVyc29uYVN1Ym1pdHRlciA9IG5ldyBQZXJzb25hU3VibWl0dGVyKCk7XG4gICAgXG4gICAgLy8gVXBkYXRlIG1hbmFnZXIgd2lsbCBiZSBpbml0aWFsaXplZCBhZnRlciBtaWdyYXRpb24gY29tcGxldGVzIHRvIGF2b2lkIGpzZG9tIGNyYXNoXG4gICAgXG4gICAgLy8gSW5pdGlhbGl6ZSBleHBvcnQvaW1wb3J0L3NoYXJlIG1vZHVsZXNcbiAgICB0aGlzLnBlcnNvbmFFeHBvcnRlciA9IG5ldyBQZXJzb25hRXhwb3J0ZXIodGhpcy5jdXJyZW50VXNlcik7XG4gICAgLy8gUGVyc29uYUltcG9ydGVyIHdpbGwgYmUgaW5pdGlhbGl6ZWQgYWZ0ZXIgbWlncmF0aW9uIGNvbXBsZXRlc1xuICAgIHRoaXMucGVyc29uYVNoYXJlciA9IG5ldyBQZXJzb25hU2hhcmVyKHRoaXMuZ2l0aHViQ2xpZW50LCB0aGlzLmN1cnJlbnRVc2VyKTtcbiAgICBcbiAgICAvLyBJbml0aWFsaXplIHNlcnZlciBzZXR1cFxuICAgIHRoaXMuc2VydmVyU2V0dXAgPSBuZXcgU2VydmVyU2V0dXAoKTtcbiAgICB0aGlzLnNlcnZlclNldHVwLnNldHVwU2VydmVyKHRoaXMuc2VydmVyLCB0aGlzKTtcbiAgICBcbiAgICAvLyBGSVggIzYxMDogUG9ydGZvbGlvIGluaXRpYWxpemF0aW9uIG1vdmVkIHRvIHJ1bigpIG1ldGhvZCB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9uXG4gICAgLy8gUHJldmlvdXNseTogdGhpcy5pbml0aWFsaXplUG9ydGZvbGlvKCkudGhlbigpIHJhbiBhc3luYyBpbiBjb25zdHJ1Y3RvclxuICAgIC8vIE5vdzogSW5pdGlhbGl6YXRpb24gaGFwcGVucyBzeW5jaHJvbm91c2x5IGluIHJ1bigpIGJlZm9yZSBNQ1AgY29ubmVjdGlvblxuICB9XG4gIFxuICBwcml2YXRlIGFzeW5jIGluaXRpYWxpemVQb3J0Zm9saW8oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gQ2hlY2sgaWYgbWlncmF0aW9uIGlzIG5lZWRlZFxuICAgIGNvbnN0IG5lZWRzTWlncmF0aW9uID0gYXdhaXQgdGhpcy5taWdyYXRpb25NYW5hZ2VyLm5lZWRzTWlncmF0aW9uKCk7XG4gICAgXG4gICAgaWYgKG5lZWRzTWlncmF0aW9uKSB7XG4gICAgICBsb2dnZXIuaW5mbygnTGVnYWN5IHBlcnNvbmFzIGRldGVjdGVkLiBTdGFydGluZyBtaWdyYXRpb24uLi4nKTtcbiAgICAgIFxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5taWdyYXRpb25NYW5hZ2VyLm1pZ3JhdGUoeyBiYWNrdXA6IHRydWUgfSk7XG4gICAgICBcbiAgICAgIGlmIChyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICBsb2dnZXIuaW5mbyhgU3VjY2Vzc2Z1bGx5IG1pZ3JhdGVkICR7cmVzdWx0Lm1pZ3JhdGVkQ291bnR9IHBlcnNvbmFzYCk7XG4gICAgICAgIGlmIChyZXN1bHQuYmFja2VkVXAgJiYgcmVzdWx0LmJhY2t1cFBhdGgpIHtcbiAgICAgICAgICBsb2dnZXIuaW5mbyhgQmFja3VwIGNyZWF0ZWQgYXQ6ICR7cmVzdWx0LmJhY2t1cFBhdGh9YCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcignTWlncmF0aW9uIGNvbXBsZXRlZCB3aXRoIGVycm9yczonKTtcbiAgICAgICAgcmVzdWx0LmVycm9ycy5mb3JFYWNoKGVyciA9PiBsb2dnZXIuZXJyb3IoYCAgLSAke2Vycn1gKSk7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIEVuc3VyZSBwb3J0Zm9saW8gc3RydWN0dXJlIGV4aXN0c1xuICAgIGNvbnN0IHBvcnRmb2xpb0V4aXN0cyA9IGF3YWl0IHRoaXMucG9ydGZvbGlvTWFuYWdlci5leGlzdHMoKTtcbiAgICBpZiAoIXBvcnRmb2xpb0V4aXN0cykge1xuICAgICAgbG9nZ2VyLmluZm8oJ0NyZWF0aW5nIHBvcnRmb2xpbyBkaXJlY3Rvcnkgc3RydWN0dXJlLi4uJyk7XG4gICAgICBhd2FpdCB0aGlzLnBvcnRmb2xpb01hbmFnZXIuaW5pdGlhbGl6ZSgpO1xuICAgIH1cbiAgICBcbiAgICAvLyBJbml0aWFsaXplIGNvbGxlY3Rpb24gY2FjaGUgZm9yIGFub255bW91cyBhY2Nlc3NcbiAgICBhd2FpdCB0aGlzLmluaXRpYWxpemVDb2xsZWN0aW9uQ2FjaGUoKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENvbXBsZXRlIGluaXRpYWxpemF0aW9uIGFmdGVyIHBvcnRmb2xpbyBpcyByZWFkeVxuICAgKiBGSVggIzYxMDogVGhpcyB3YXMgcHJldmlvdXNseSBpbiBhIC50aGVuKCkgY2FsbGJhY2sgaW4gdGhlIGNvbnN0cnVjdG9yXG4gICAqIE5vdyBjYWxsZWQgc3luY2hyb25vdXNseSBmcm9tIHJ1bigpIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgY29tcGxldGVJbml0aWFsaXphdGlvbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBOT1cgc2FmZSB0byBhY2Nlc3MgZGlyZWN0b3JpZXMgYWZ0ZXIgbWlncmF0aW9uXG4gICAgdGhpcy5wZXJzb25hc0RpciA9IHRoaXMucG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKEVsZW1lbnRUeXBlLlBFUlNPTkEpO1xuICAgIFxuICAgIC8vIExvZyByZXNvbHZlZCBwYXRoIGZvciBkZWJ1Z2dpbmdcbiAgICBsb2dnZXIuaW5mbyhgUGVyc29uYXMgZGlyZWN0b3J5IHJlc29sdmVkIHRvOiAke3RoaXMucGVyc29uYXNEaXJ9YCk7XG4gICAgXG4gICAgLy8gSW5pdGlhbGl6ZSBQYXRoVmFsaWRhdG9yIHdpdGggdGhlIHBlcnNvbmFzIGRpcmVjdG9yeVxuICAgIFBhdGhWYWxpZGF0b3IuaW5pdGlhbGl6ZSh0aGlzLnBlcnNvbmFzRGlyKTtcbiAgICBcbiAgICAvLyBJbml0aWFsaXplIHVwZGF0ZSBtYW5hZ2VyIHdpdGggc2FmZSBkaXJlY3RvcnlcbiAgICBcbiAgICAvLyBJbml0aWFsaXplIGltcG9ydCBtb2R1bGUgdGhhdCBkZXBlbmRzIG9uIHBlcnNvbmFzRGlyXG4gICAgdGhpcy5wZXJzb25hSW1wb3J0ZXIgPSBuZXcgUGVyc29uYUltcG9ydGVyKHRoaXMucGVyc29uYXNEaXIsIHRoaXMuY3VycmVudFVzZXIpO1xuICAgIFxuICAgIHRoaXMubG9hZFBlcnNvbmFzKCk7XG4gICAgXG4gICAgLy8gTWFyayBpbml0aWFsaXphdGlvbiBhcyBjb21wbGV0ZVxuICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IHRydWU7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBFbnN1cmUgc2VydmVyIGlzIGluaXRpYWxpemVkIGJlZm9yZSBhbnkgb3BlcmF0aW9uXG4gICAqIEZJWCAjNjEwOiBBZGRlZCBmb3IgdGVzdCBjb21wYXRpYmlsaXR5IC0gdGVzdHMgZG9uJ3QgY2FsbCBydW4oKVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBlbnN1cmVJbml0aWFsaXplZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5pc0luaXRpYWxpemVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIC8vIElmIGluaXRpYWxpemF0aW9uIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MsIHdhaXQgZm9yIGl0XG4gICAgaWYgKHRoaXMuaW5pdGlhbGl6YXRpb25Qcm9taXNlKSB7XG4gICAgICBhd2FpdCB0aGlzLmluaXRpYWxpemF0aW9uUHJvbWlzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgLy8gU3RhcnQgaW5pdGlhbGl6YXRpb25cbiAgICB0aGlzLmluaXRpYWxpemF0aW9uUHJvbWlzZSA9IChhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmluaXRpYWxpemVQb3J0Zm9saW8oKTtcbiAgICAgICAgYXdhaXQgdGhpcy5jb21wbGV0ZUluaXRpYWxpemF0aW9uKCk7XG4gICAgICAgIGxvZ2dlci5pbmZvKFwiUG9ydGZvbGlvIGFuZCBwZXJzb25hcyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkgKGxhenkpXCIpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdEb2xsaG91c2VNQ1BTZXJ2ZXIuZW5zdXJlSW5pdGlhbGl6ZWQnLCBlcnJvcik7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0pKCk7XG4gICAgXG4gICAgYXdhaXQgdGhpcy5pbml0aWFsaXphdGlvblByb21pc2U7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGNvbGxlY3Rpb24gY2FjaGUgd2l0aCBzZWVkIGRhdGEgZm9yIGFub255bW91cyBicm93c2luZ1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBpbml0aWFsaXplQ29sbGVjdGlvbkNhY2hlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBpc0NhY2hlVmFsaWQgPSBhd2FpdCB0aGlzLmNvbGxlY3Rpb25DYWNoZS5pc0NhY2hlVmFsaWQoKTtcbiAgICAgIGlmICghaXNDYWNoZVZhbGlkKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKCdJbml0aWFsaXppbmcgY29sbGVjdGlvbiBjYWNoZSB3aXRoIHNlZWQgZGF0YS4uLicpO1xuICAgICAgICBjb25zdCB7IENvbGxlY3Rpb25TZWVkZXIgfSA9IGF3YWl0IGltcG9ydCgnLi9jb2xsZWN0aW9uL0NvbGxlY3Rpb25TZWVkZXIuanMnKTtcbiAgICAgICAgY29uc3Qgc2VlZERhdGEgPSBDb2xsZWN0aW9uU2VlZGVyLmdldFNlZWREYXRhKCk7XG4gICAgICAgIGF3YWl0IHRoaXMuY29sbGVjdGlvbkNhY2hlLnNhdmVDYWNoZShzZWVkRGF0YSk7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBDb2xsZWN0aW9uIGNhY2hlIGluaXRpYWxpemVkIHdpdGggJHtzZWVkRGF0YS5sZW5ndGh9IGl0ZW1zYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBzdGF0cyA9IGF3YWl0IHRoaXMuY29sbGVjdGlvbkNhY2hlLmdldENhY2hlU3RhdHMoKTtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBDb2xsZWN0aW9uIGNhY2hlIGFscmVhZHkgdmFsaWQgd2l0aCAke3N0YXRzLml0ZW1Db3VudH0gaXRlbXNgKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdEb2xsaG91c2VNQ1BTZXJ2ZXIuaW5pdGlhbGl6ZUNvbGxlY3Rpb25DYWNoZScsIGVycm9yKTtcbiAgICAgIC8vIERvbid0IHRocm93IC0gY2FjaGUgZmFpbHVyZXMgc2hvdWxkbid0IHByZXZlbnQgc2VydmVyIHN0YXJ0dXBcbiAgICB9XG4gIH1cblxuICAvLyBUb29sIGhhbmRsZXIgbWV0aG9kcyAtIG5vdyBwdWJsaWMgZm9yIGFjY2VzcyBmcm9tIHRvb2wgbW9kdWxlc1xuICBcbiAgcHJpdmF0ZSBnZXRQZXJzb25hSW5kaWNhdG9yKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmFjdGl2ZVBlcnNvbmEpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIGNvbnN0IHBlcnNvbmEgPSB0aGlzLnBlcnNvbmFzLmdldCh0aGlzLmFjdGl2ZVBlcnNvbmEpO1xuICAgIGlmICghcGVyc29uYSkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvcm1hdEluZGljYXRvcih0aGlzLmluZGljYXRvckNvbmZpZywge1xuICAgICAgbmFtZTogcGVyc29uYS5tZXRhZGF0YS5uYW1lLFxuICAgICAgdmVyc2lvbjogcGVyc29uYS5tZXRhZGF0YS52ZXJzaW9uLFxuICAgICAgYXV0aG9yOiBwZXJzb25hLm1ldGFkYXRhLmF1dGhvcixcbiAgICAgIGNhdGVnb3J5OiBwZXJzb25hLm1ldGFkYXRhLmNhdGVnb3J5XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTm9ybWFsaXplIGVsZW1lbnQgdHlwZSB0byBoYW5kbGUgYm90aCBzaW5ndWxhciAobmV3KSBhbmQgcGx1cmFsIChsZWdhY3kpIGZvcm1zXG4gICAqIFRoaXMgcHJvdmlkZXMgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBkdXJpbmcgdGhlIHRyYW5zaXRpb24gdG8gdjEuNC4wXG4gICAqL1xuICBwcml2YXRlIG5vcm1hbGl6ZUVsZW1lbnRUeXBlKHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gTWFwIHBsdXJhbCBmb3JtcyB0byBzaW5ndWxhciBFbGVtZW50VHlwZSB2YWx1ZXNcbiAgICBjb25zdCBwbHVyYWxUb1Npbmd1bGFyTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgJ3BlcnNvbmFzJzogRWxlbWVudFR5cGUuUEVSU09OQSxcbiAgICAgICdza2lsbHMnOiBFbGVtZW50VHlwZS5TS0lMTCxcbiAgICAgICd0ZW1wbGF0ZXMnOiBFbGVtZW50VHlwZS5URU1QTEFURSxcbiAgICAgICdhZ2VudHMnOiBFbGVtZW50VHlwZS5BR0VOVCxcbiAgICAgICdtZW1vcmllcyc6IEVsZW1lbnRUeXBlLk1FTU9SWSxcbiAgICAgICdlbnNlbWJsZXMnOiBFbGVtZW50VHlwZS5FTlNFTUJMRVxuICAgIH07XG4gICAgXG4gICAgLy8gSWYgaXQncyBhbHJlYWR5IGEgdmFsaWQgRWxlbWVudFR5cGUgdmFsdWUsIHJldHVybiBhcy1pc1xuICAgIGlmIChPYmplY3QudmFsdWVzKEVsZW1lbnRUeXBlKS5pbmNsdWRlcyh0eXBlIGFzIEVsZW1lbnRUeXBlKSkge1xuICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfVxuICAgIFxuICAgIC8vIElmIGl0J3MgYSBwbHVyYWwgZm9ybSwgY29udmVydCB0byBzaW5ndWxhclxuICAgIGlmIChwbHVyYWxUb1Npbmd1bGFyTWFwW3R5cGVdKSB7XG4gICAgICAvLyBMb2cgZGVwcmVjYXRpb24gd2FybmluZ1xuICAgICAgbG9nZ2VyLndhcm4oYFVzaW5nIHBsdXJhbCBlbGVtZW50IHR5cGUgJyR7dHlwZX0nIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2Ugc2luZ3VsYXIgZm9ybSAnJHtwbHVyYWxUb1Npbmd1bGFyTWFwW3R5cGVdfScgaW5zdGVhZC5gKTtcbiAgICAgIHJldHVybiBwbHVyYWxUb1Npbmd1bGFyTWFwW3R5cGVdO1xuICAgIH1cbiAgICBcbiAgICAvLyBVbmtub3duIHR5cGUgLSByZXR1cm4gYXMtaXMgYW5kIGxldCB2YWxpZGF0aW9uIGhhbmRsZSBpdFxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhbml0aXplIG1ldGFkYXRhIG9iamVjdCB0byBwcmV2ZW50IHByb3RvdHlwZSBwb2xsdXRpb25cbiAgICogUmVtb3ZlcyBhbnkgZGFuZ2Vyb3VzIHByb3BlcnRpZXMgdGhhdCBjb3VsZCBhZmZlY3QgT2JqZWN0LnByb3RvdHlwZVxuICAgKi9cbiAgcHJpdmF0ZSBzYW5pdGl6ZU1ldGFkYXRhKG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgaWYgKCFtZXRhZGF0YSB8fCB0eXBlb2YgbWV0YWRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IGRhbmdlcm91c1Byb3BlcnRpZXMgPSBbJ19fcHJvdG9fXycsICdjb25zdHJ1Y3RvcicsICdwcm90b3R5cGUnXTtcbiAgICBjb25zdCBzYW5pdGl6ZWQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICBcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhtZXRhZGF0YSkpIHtcbiAgICAgIGlmICghZGFuZ2Vyb3VzUHJvcGVydGllcy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgIC8vIFJlY3Vyc2l2ZWx5IHNhbml0aXplIG5lc3RlZCBvYmplY3RzXG4gICAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIHNhbml0aXplZFtrZXldID0gdGhpcy5zYW5pdGl6ZU1ldGFkYXRhKHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzYW5pdGl6ZWRba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBzYW5pdGl6ZWQ7XG4gIH1cblxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZFBlcnNvbmFzKCkge1xuICAgIC8vIFZhbGlkYXRlIHRoZSBwZXJzb25hcyBkaXJlY3RvcnkgcGF0aFxuICAgIC8vIHBlcnNvbmFzRGlyIGlzIGd1YXJhbnRlZWQgdG8gYmUgc2V0IGJ5IGNvbXBsZXRlSW5pdGlhbGl6YXRpb24gYmVmb3JlIHRoaXMgaXMgY2FsbGVkXG4gICAgaWYgKCFwYXRoLmlzQWJzb2x1dGUodGhpcy5wZXJzb25hc0RpciEpKSB7XG4gICAgICBsb2dnZXIud2FybihgUGVyc29uYXMgZGlyZWN0b3J5IHBhdGggaXMgbm90IGFic29sdXRlOiAke3RoaXMucGVyc29uYXNEaXJ9YCk7XG4gICAgfVxuICAgIFxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmcy5hY2Nlc3ModGhpcy5wZXJzb25hc0RpciEpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBDcmVhdGUgcGVyc29uYXMgZGlyZWN0b3J5IGlmIGl0IGRvZXNuJ3QgZXhpc3RcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGZzLm1rZGlyKHRoaXMucGVyc29uYXNEaXIhLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgbG9nZ2VyLmluZm8oYENyZWF0ZWQgcGVyc29uYXMgZGlyZWN0b3J5IGF0OiAke3RoaXMucGVyc29uYXNEaXJ9YCk7XG4gICAgICAgIC8vIENvbnRpbnVlIHRvIHRyeSBsb2FkaW5nIChkaXJlY3Rvcnkgd2lsbCBiZSBlbXB0eSlcbiAgICAgIH0gY2F0Y2ggKG1rZGlyRXJyb3IpIHtcbiAgICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdEb2xsaG91c2VNQ1BTZXJ2ZXIubG9hZFBlcnNvbmFzLm1rZGlyJywgbWtkaXJFcnJvciwgeyBwZXJzb25hc0RpcjogdGhpcy5wZXJzb25hc0RpciB9KTtcbiAgICAgICAgLy8gRG9uJ3QgdGhyb3cgLSBlbXB0eSBwb3J0Zm9saW8gaXMgdmFsaWRcbiAgICAgICAgdGhpcy5wZXJzb25hcy5jbGVhcigpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIHBlcnNvbmFzRGlyIGlzIGd1YXJhbnRlZWQgdG8gYmUgc2V0IGJ5IGNvbXBsZXRlSW5pdGlhbGl6YXRpb24gYmVmb3JlIHRoaXMgaXMgY2FsbGVkXG4gICAgICBjb25zdCBmaWxlcyA9IGF3YWl0IGZzLnJlYWRkaXIodGhpcy5wZXJzb25hc0RpciEpO1xuICAgICAgY29uc3QgbWFya2Rvd25GaWxlcyA9IGZpbGVzXG4gICAgICAgIC5maWx0ZXIoZmlsZSA9PiBmaWxlLmVuZHNXaXRoKCcubWQnKSlcbiAgICAgICAgLmZpbHRlcihmaWxlID0+ICF0aGlzLnBvcnRmb2xpb01hbmFnZXIuaXNUZXN0RWxlbWVudChmaWxlKSk7XG5cbiAgICAgIHRoaXMucGVyc29uYXMuY2xlYXIoKTtcbiAgICAgIFxuICAgICAgaWYgKG1hcmtkb3duRmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKCdbRG9sbGhvdXNlTUNQXSBObyBwZXJzb25hcyBmb3VuZCBpbiBwb3J0Zm9saW8uIFVzZSBicm93c2VfY29sbGVjdGlvbiB0byBpbnN0YWxsIHNvbWUhJyk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBtYXJrZG93bkZpbGVzKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4odGhpcy5wZXJzb25hc0RpciEsIGZpbGUpO1xuICAgICAgICAgIGNvbnN0IGZpbGVDb250ZW50ID0gYXdhaXQgUGF0aFZhbGlkYXRvci5zYWZlUmVhZEZpbGUoZmlsZVBhdGgpO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIFVzZSBzZWN1cmUgWUFNTCBwYXJzZXJcbiAgICAgICAgICBsZXQgcGFyc2VkO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBwYXJzZWQgPSBTZWN1cmVZYW1sUGFyc2VyLnNhZmVNYXR0ZXIoZmlsZUNvbnRlbnQpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBTZWN1cml0eUVycm9yKSB7XG4gICAgICAgICAgICAgIGxvZ2dlci53YXJuKGBTZWN1cml0eSB0aHJlYXQgZGV0ZWN0ZWQgaW4gcGVyc29uYSAke2ZpbGV9OiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIGNvbnN0IG1ldGFkYXRhID0gcGFyc2VkLmRhdGEgYXMgUGVyc29uYU1ldGFkYXRhO1xuICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBwYXJzZWQuY29udGVudDtcblxuICAgICAgICAgIGlmICghbWV0YWRhdGEubmFtZSkge1xuICAgICAgICAgICAgbWV0YWRhdGEubmFtZSA9IHBhdGguYmFzZW5hbWUoZmlsZSwgJy5tZCcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEdlbmVyYXRlIHVuaXF1ZSBJRCBpZiBub3QgcHJlc2VudFxuICAgICAgICAgIGxldCB1bmlxdWVJZCA9IG1ldGFkYXRhLnVuaXF1ZV9pZDtcbiAgICAgICAgICBpZiAoIXVuaXF1ZUlkKSB7XG4gICAgICAgICAgICBjb25zdCBhdXRob3JGb3JJZCA9IG1ldGFkYXRhLmF1dGhvciB8fCB0aGlzLmdldEN1cnJlbnRVc2VyRm9yQXR0cmlidXRpb24oKTtcbiAgICAgICAgICAgIHVuaXF1ZUlkID0gZ2VuZXJhdGVVbmlxdWVJZChtZXRhZGF0YS5uYW1lLCBhdXRob3JGb3JJZCk7XG4gICAgICAgICAgICBsb2dnZXIuZGVidWcoYEdlbmVyYXRlZCB1bmlxdWUgSUQgZm9yICR7bWV0YWRhdGEubmFtZX06ICR7dW5pcXVlSWR9YCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gU2V0IGRlZmF1bHQgdmFsdWVzIGZvciBuZXcgbWV0YWRhdGEgZmllbGRzXG4gICAgICAgICAgaWYgKCFtZXRhZGF0YS5jYXRlZ29yeSkgbWV0YWRhdGEuY2F0ZWdvcnkgPSAnZ2VuZXJhbCc7XG4gICAgICAgICAgaWYgKCFtZXRhZGF0YS5hZ2VfcmF0aW5nKSBtZXRhZGF0YS5hZ2VfcmF0aW5nID0gJ2FsbCc7XG4gICAgICAgICAgaWYgKCFtZXRhZGF0YS5jb250ZW50X2ZsYWdzKSBtZXRhZGF0YS5jb250ZW50X2ZsYWdzID0gW107XG4gICAgICAgICAgaWYgKG1ldGFkYXRhLmFpX2dlbmVyYXRlZCA9PT0gdW5kZWZpbmVkKSBtZXRhZGF0YS5haV9nZW5lcmF0ZWQgPSBmYWxzZTtcbiAgICAgICAgICBpZiAoIW1ldGFkYXRhLmdlbmVyYXRpb25fbWV0aG9kKSBtZXRhZGF0YS5nZW5lcmF0aW9uX21ldGhvZCA9ICdodW1hbic7XG4gICAgICAgICAgaWYgKCFtZXRhZGF0YS5wcmljZSkgbWV0YWRhdGEucHJpY2UgPSAnZnJlZSc7XG4gICAgICAgICAgaWYgKCFtZXRhZGF0YS5saWNlbnNlKSBtZXRhZGF0YS5saWNlbnNlID0gJ0NDLUJZLVNBLTQuMCc7XG5cbiAgICAgICAgICBjb25zdCBwZXJzb25hOiBQZXJzb25hID0ge1xuICAgICAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgICAgZmlsZW5hbWU6IGZpbGUsXG4gICAgICAgICAgICB1bmlxdWVfaWQ6IHVuaXF1ZUlkLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICB0aGlzLnBlcnNvbmFzLnNldChmaWxlLCBwZXJzb25hKTtcbiAgICAgICAgICBsb2dnZXIuZGVidWcoYExvYWRlZCBwZXJzb25hOiAke21ldGFkYXRhLm5hbWV9ICgke3VuaXF1ZUlkfWApO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignRG9sbGhvdXNlTUNQU2VydmVyLmxvYWRQZXJzb25hcy5sb2FkRmlsZScsIGVycm9yLCB7IGZpbGUgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gSGFuZGxlIEVOT0VOVCBncmFjZWZ1bGx5IC0gZGlyZWN0b3J5IG1pZ2h0IG5vdCBleGlzdCB5ZXRcbiAgICAgIGlmICgoZXJyb3IgYXMgYW55KS5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICBsb2dnZXIuaW5mbygnW0RvbGxob3VzZU1DUF0gUGVyc29uYXMgZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0IHlldCAtIHBvcnRmb2xpbyBpcyBlbXB0eScpO1xuICAgICAgICB0aGlzLnBlcnNvbmFzLmNsZWFyKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignRG9sbGhvdXNlTUNQU2VydmVyLmxvYWRQZXJzb25hcycsIGVycm9yKTtcbiAgICAgIHRoaXMucGVyc29uYXMuY2xlYXIoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBsaXN0UGVyc29uYXMoKSB7XG4gICAgY29uc3QgcGVyc29uYUxpc3QgPSBBcnJheS5mcm9tKHRoaXMucGVyc29uYXMudmFsdWVzKCkpLm1hcChwZXJzb25hID0+ICh7XG4gICAgICBmaWxlbmFtZTogcGVyc29uYS5maWxlbmFtZSxcbiAgICAgIHVuaXF1ZV9pZDogcGVyc29uYS51bmlxdWVfaWQsXG4gICAgICBuYW1lOiBwZXJzb25hLm1ldGFkYXRhLm5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogcGVyc29uYS5tZXRhZGF0YS5kZXNjcmlwdGlvbixcbiAgICAgIHRyaWdnZXJzOiBwZXJzb25hLm1ldGFkYXRhLnRyaWdnZXJzIHx8IFtdLFxuICAgICAgdmVyc2lvbjogcGVyc29uYS5tZXRhZGF0YS52ZXJzaW9uIHx8IFwiMS4wXCIsXG4gICAgICBhdXRob3I6IHBlcnNvbmEubWV0YWRhdGEuYXV0aG9yIHx8IFwiVW5rbm93blwiLFxuICAgICAgY2F0ZWdvcnk6IHBlcnNvbmEubWV0YWRhdGEuY2F0ZWdvcnkgfHwgJ2dlbmVyYWwnLFxuICAgICAgYWdlX3JhdGluZzogcGVyc29uYS5tZXRhZGF0YS5hZ2VfcmF0aW5nIHx8ICdhbGwnLFxuICAgICAgcHJpY2U6IHBlcnNvbmEubWV0YWRhdGEucHJpY2UgfHwgJ2ZyZWUnLFxuICAgICAgYWlfZ2VuZXJhdGVkOiBwZXJzb25hLm1ldGFkYXRhLmFpX2dlbmVyYXRlZCB8fCBmYWxzZSxcbiAgICAgIGFjdGl2ZTogdGhpcy5hY3RpdmVQZXJzb25hID09PSBwZXJzb25hLmZpbGVuYW1lLFxuICAgIH0pKTtcblxuICAgIGlmIChwZXJzb25hTGlzdC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfVlvdSBkb24ndCBoYXZlIGFueSBwZXJzb25hcyBpbnN0YWxsZWQgeWV0LiBXb3VsZCB5b3UgbGlrZSB0byBicm93c2UgdGhlIERvbGxob3VzZU1DUCBjb2xsZWN0aW9uIG9uIEdpdEh1YiB0byBzZWUgd2hhdCdzIGF2YWlsYWJsZT8gSSBjYW4gc2hvdyB5b3UgcGVyc29uYXMgZm9yIGNyZWF0aXZlIHdyaXRpbmcsIHRlY2huaWNhbCBhbmFseXNpcywgYW5kIG1vcmUuIEp1c3Qgc2F5IFwieWVzXCIgb3IgdXNlICdicm93c2VfY29sbGVjdGlvbicuYCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudDogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl9QXZhaWxhYmxlIFBlcnNvbmFzICgke3BlcnNvbmFMaXN0Lmxlbmd0aH0pOlxcblxcbmAgK1xuICAgICAgICAgICAgcGVyc29uYUxpc3QubWFwKHAgPT4gXG4gICAgICAgICAgICAgIGAke3AuYWN0aXZlID8gJ/CflLkgJyA6ICfilqvvuI8gJ30qKiR7cC5uYW1lfSoqICgke3AudW5pcXVlX2lkfSlcXG5gICtcbiAgICAgICAgICAgICAgYCAgICR7cC5kZXNjcmlwdGlvbn1cXG5gICtcbiAgICAgICAgICAgICAgYCAgIPCfk4EgJHtwLmNhdGVnb3J5fSB8IPCfjq0gJHtwLmF1dGhvcn0gfCDwn5SWICR7cC5wcmljZX0gfCAke3AuYWlfZ2VuZXJhdGVkID8gJ/CfpJYgQUknIDogJ/CfkaQgSHVtYW4nfVxcbmAgK1xuICAgICAgICAgICAgICBgICAgQWdlOiAke3AuYWdlX3JhdGluZ30gfCBWZXJzaW9uOiAke3AudmVyc2lvbn1cXG5gICtcbiAgICAgICAgICAgICAgYCAgIFRyaWdnZXJzOiAke3AudHJpZ2dlcnMuam9pbignLCAnKSB8fCAnTm9uZSd9XFxuYFxuICAgICAgICAgICAgKS5qb2luKCdcXG4nKSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGFjdGl2YXRlUGVyc29uYShwZXJzb25hSWRlbnRpZmllcjogc3RyaW5nKSB7XG4gICAgLy8gRW5oYW5jZWQgaW5wdXQgdmFsaWRhdGlvbiBmb3IgcGVyc29uYSBpZGVudGlmaWVyXG4gICAgY29uc3QgdmFsaWRhdGVkSWRlbnRpZmllciA9IE1DUElucHV0VmFsaWRhdG9yLnZhbGlkYXRlUGVyc29uYUlkZW50aWZpZXIocGVyc29uYUlkZW50aWZpZXIpO1xuICAgIFxuICAgIC8vIFRyeSB0byBmaW5kIHBlcnNvbmEgYnkgZmlsZW5hbWUgZmlyc3QsIHRoZW4gYnkgbmFtZVxuICAgIGxldCBwZXJzb25hID0gdGhpcy5wZXJzb25hcy5nZXQodmFsaWRhdGVkSWRlbnRpZmllcik7XG4gICAgXG4gICAgaWYgKCFwZXJzb25hKSB7XG4gICAgICAvLyBTZWFyY2ggYnkgbmFtZVxuICAgICAgcGVyc29uYSA9IEFycmF5LmZyb20odGhpcy5wZXJzb25hcy52YWx1ZXMoKSkuZmluZChwID0+IFxuICAgICAgICBwLm1ldGFkYXRhLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gdmFsaWRhdGVkSWRlbnRpZmllci50b0xvd2VyQ2FzZSgpXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghcGVyc29uYSkge1xuICAgICAgdGhyb3cgbmV3IE1jcEVycm9yKFxuICAgICAgICBFcnJvckNvZGUuSW52YWxpZFBhcmFtcyxcbiAgICAgICAgYFBlcnNvbmEgbm90IGZvdW5kOiAke3BlcnNvbmFJZGVudGlmaWVyfWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5hY3RpdmVQZXJzb25hID0gcGVyc29uYS5maWxlbmFtZTtcblxuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX1QZXJzb25hIEFjdGl2YXRlZDogKioke3BlcnNvbmEubWV0YWRhdGEubmFtZX0qKlxcblxcbmAgK1xuICAgICAgICAgICAgYCR7cGVyc29uYS5tZXRhZGF0YS5kZXNjcmlwdGlvbn1cXG5cXG5gICtcbiAgICAgICAgICAgIGAqKkluc3RydWN0aW9uczoqKlxcbiR7cGVyc29uYS5jb250ZW50fWAsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gIH1cblxuICBhc3luYyBnZXRBY3RpdmVQZXJzb25hKCkge1xuICAgIGlmICghdGhpcy5hY3RpdmVQZXJzb25hKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX1ObyBwZXJzb25hIGlzIGN1cnJlbnRseSBhY3RpdmUuYCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBwZXJzb25hID0gdGhpcy5wZXJzb25hcy5nZXQodGhpcy5hY3RpdmVQZXJzb25hKTtcbiAgICBpZiAoIXBlcnNvbmEpIHtcbiAgICAgIHRoaXMuYWN0aXZlUGVyc29uYSA9IG51bGw7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX1BY3RpdmUgcGVyc29uYSBub3QgZm91bmQuIERlYWN0aXZhdGVkLmAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfUFjdGl2ZSBQZXJzb25hOiAqKiR7cGVyc29uYS5tZXRhZGF0YS5uYW1lfSoqXFxuXFxuYCArXG4gICAgICAgICAgICBgJHtwZXJzb25hLm1ldGFkYXRhLmRlc2NyaXB0aW9ufVxcblxcbmAgK1xuICAgICAgICAgICAgYEZpbGU6ICR7cGVyc29uYS5maWxlbmFtZX1cXG5gICtcbiAgICAgICAgICAgIGBWZXJzaW9uOiAke3BlcnNvbmEubWV0YWRhdGEudmVyc2lvbiB8fCAnMS4wJ31cXG5gICtcbiAgICAgICAgICAgIGBBdXRob3I6ICR7cGVyc29uYS5tZXRhZGF0YS5hdXRob3IgfHwgJ1Vua25vd24nfWAsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gIH1cblxuICBhc3luYyBkZWFjdGl2YXRlUGVyc29uYSgpIHtcbiAgICBjb25zdCB3YXNBY3RpdmUgPSB0aGlzLmFjdGl2ZVBlcnNvbmEgIT09IG51bGw7XG4gICAgY29uc3QgaW5kaWNhdG9yID0gdGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCk7XG4gICAgdGhpcy5hY3RpdmVQZXJzb25hID0gbnVsbDtcblxuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiB3YXNBY3RpdmUgXG4gICAgICAgICAgICA/IGAke2luZGljYXRvcn3inIUgUGVyc29uYSBkZWFjdGl2YXRlZC4gQmFjayB0byBkZWZhdWx0IG1vZGUuYFxuICAgICAgICAgICAgOiBcIk5vIHBlcnNvbmEgd2FzIGFjdGl2ZS5cIixcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGdldFBlcnNvbmFEZXRhaWxzKHBlcnNvbmFJZGVudGlmaWVyOiBzdHJpbmcpIHtcbiAgICAvLyBUcnkgdG8gZmluZCBwZXJzb25hIGJ5IGZpbGVuYW1lIGZpcnN0LCB0aGVuIGJ5IG5hbWVcbiAgICBsZXQgcGVyc29uYSA9IHRoaXMucGVyc29uYXMuZ2V0KHBlcnNvbmFJZGVudGlmaWVyKTtcbiAgICBcbiAgICBpZiAoIXBlcnNvbmEpIHtcbiAgICAgIC8vIFNlYXJjaCBieSBuYW1lXG4gICAgICBwZXJzb25hID0gQXJyYXkuZnJvbSh0aGlzLnBlcnNvbmFzLnZhbHVlcygpKS5maW5kKHAgPT4gXG4gICAgICAgIHAubWV0YWRhdGEubmFtZS50b0xvd2VyQ2FzZSgpID09PSBwZXJzb25hSWRlbnRpZmllci50b0xvd2VyQ2FzZSgpXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghcGVyc29uYSkge1xuICAgICAgdGhyb3cgbmV3IE1jcEVycm9yKFxuICAgICAgICBFcnJvckNvZGUuSW52YWxpZFBhcmFtcyxcbiAgICAgICAgYFBlcnNvbmEgbm90IGZvdW5kOiAke3BlcnNvbmFJZGVudGlmaWVyfWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpffCfk4sgKioke3BlcnNvbmEubWV0YWRhdGEubmFtZX0qKiBEZXRhaWxzXFxuXFxuYCArXG4gICAgICAgICAgICBgKipEZXNjcmlwdGlvbjoqKiAke3BlcnNvbmEubWV0YWRhdGEuZGVzY3JpcHRpb259XFxuYCArXG4gICAgICAgICAgICBgKipGaWxlOioqICR7cGVyc29uYS5maWxlbmFtZX1cXG5gICtcbiAgICAgICAgICAgIGAqKlZlcnNpb246KiogJHtwZXJzb25hLm1ldGFkYXRhLnZlcnNpb24gfHwgJzEuMCd9XFxuYCArXG4gICAgICAgICAgICBgKipBdXRob3I6KiogJHtwZXJzb25hLm1ldGFkYXRhLmF1dGhvciB8fCAnVW5rbm93bid9XFxuYCArXG4gICAgICAgICAgICBgKipUcmlnZ2VyczoqKiAke3BlcnNvbmEubWV0YWRhdGEudHJpZ2dlcnM/LmpvaW4oJywgJykgfHwgJ05vbmUnfVxcblxcbmAgK1xuICAgICAgICAgICAgYCoqRnVsbCBDb250ZW50OioqXFxuXFxgXFxgXFxgXFxuJHtwZXJzb25hLmNvbnRlbnR9XFxuXFxgXFxgXFxgYCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHJlbG9hZFBlcnNvbmFzKCkge1xuICAgIGF3YWl0IHRoaXMubG9hZFBlcnNvbmFzKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpffCflIQgUmVsb2FkZWQgJHt0aGlzLnBlcnNvbmFzLnNpemV9IHBlcnNvbmFzIGZyb20gJHt0aGlzLnBlcnNvbmFzRGlyfWAsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gIH1cblxuICAvLyA9PT09PSBFbGVtZW50IE1ldGhvZHMgKEdlbmVyaWMgZm9yIGFsbCBlbGVtZW50IHR5cGVzKSA9PT09PVxuICBcbiAgYXN5bmMgbGlzdEVsZW1lbnRzKHR5cGU6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICAvLyBOb3JtYWxpemUgdGhlIHR5cGUgdG8gaGFuZGxlIGJvdGggcGx1cmFsIGFuZCBzaW5ndWxhciBmb3Jtc1xuICAgICAgY29uc3Qgbm9ybWFsaXplZFR5cGUgPSB0aGlzLm5vcm1hbGl6ZUVsZW1lbnRUeXBlKHR5cGUpO1xuICAgICAgXG4gICAgICBzd2l0Y2ggKG5vcm1hbGl6ZWRUeXBlKSB7XG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuUEVSU09OQTpcbiAgICAgICAgICByZXR1cm4gdGhpcy5saXN0UGVyc29uYXMoKTtcbiAgICAgICAgICBcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5TS0lMTDoge1xuICAgICAgICAgIGNvbnN0IHNraWxscyA9IGF3YWl0IHRoaXMuc2tpbGxNYW5hZ2VyLmxpc3QoKTtcbiAgICAgICAgICBpZiAoc2tpbGxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIk5vIHNraWxscyBhcmUgY3VycmVudGx5IGluc3RhbGxlZC4gVGhlIERvbGxob3VzZU1DUCBjb2xsZWN0aW9uIGhhcyBza2lsbHMgZm9yIGNvZGUgcmV2aWV3LCBkYXRhIGFuYWx5c2lzLCBjcmVhdGl2ZSB3cml0aW5nIGFuZCBtb3JlLiBXb3VsZCB5b3UgbGlrZSBtZSB0byBzaG93IHlvdSB3aGF0J3MgYXZhaWxhYmxlPyBKdXN0IHNheSBcXFwieWVzXFxcIiBvciBJIGNhbiBoZWxwIHlvdSBjcmVhdGUgYSBjdXN0b20gc2tpbGwuXCJcbiAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIGNvbnN0IHNraWxsTGlzdCA9IHNraWxscy5tYXAoc2tpbGwgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29tcGxleGl0eSA9IHNraWxsLm1ldGFkYXRhLmNvbXBsZXhpdHkgfHwgJ2JlZ2lubmVyJztcbiAgICAgICAgICAgIGNvbnN0IGRvbWFpbnMgPSBza2lsbC5tZXRhZGF0YS5kb21haW5zPy5qb2luKCcsICcpIHx8ICdnZW5lcmFsJztcbiAgICAgICAgICAgIGNvbnN0IHZlcnNpb24gPSBza2lsbC52ZXJzaW9uIHx8IHNraWxsLm1ldGFkYXRhLnZlcnNpb24gfHwgJzEuMC4wJztcbiAgICAgICAgICAgIHJldHVybiBg8J+boO+4jyAke3NraWxsLm1ldGFkYXRhLm5hbWV9ICh2JHt2ZXJzaW9ufSkgLSAke3NraWxsLm1ldGFkYXRhLmRlc2NyaXB0aW9ufVxcbiAgIENvbXBsZXhpdHk6ICR7Y29tcGxleGl0eX0gfCBEb21haW5zOiAke2RvbWFpbnN9YDtcbiAgICAgICAgICB9KS5qb2luKCdcXG5cXG4nKTtcbiAgICAgICAgICBcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDwn5OaIEF2YWlsYWJsZSBTa2lsbHM6XFxuXFxuJHtza2lsbExpc3R9YFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlRFTVBMQVRFOiB7XG4gICAgICAgICAgY29uc3QgdGVtcGxhdGVzID0gYXdhaXQgdGhpcy50ZW1wbGF0ZU1hbmFnZXIubGlzdCgpO1xuICAgICAgICAgIGlmICh0ZW1wbGF0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgIHRleHQ6IFwiWW91IGhhdmVuJ3QgaW5zdGFsbGVkIGFueSB0ZW1wbGF0ZXMgeWV0LiBXb3VsZCB5b3UgbGlrZSB0byBzZWUgYXZhaWxhYmxlIHRlbXBsYXRlcyBmb3IgZW1haWxzLCByZXBvcnRzLCBhbmQgZG9jdW1lbnRhdGlvbj8gSSBjYW4gc2hvdyB5b3UgZXhhbXBsZXMgZnJvbSB0aGUgY29sbGVjdGlvbiBvciBoZWxwIHlvdSBjcmVhdGUgeW91ciBvd24uIFdoYXQgd291bGQgeW91IHByZWZlcj9cIlxuICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgY29uc3QgdGVtcGxhdGVMaXN0ID0gdGVtcGxhdGVzLm1hcCh0ZW1wbGF0ZSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YXJpYWJsZXMgPSB0ZW1wbGF0ZS5tZXRhZGF0YS52YXJpYWJsZXM/Lm1hcCh2ID0+IHYubmFtZSkuam9pbignLCAnKSB8fCAnbm9uZSc7XG4gICAgICAgICAgICBjb25zdCB2ZXJzaW9uID0gdGVtcGxhdGUudmVyc2lvbiB8fCB0ZW1wbGF0ZS5tZXRhZGF0YS52ZXJzaW9uIHx8ICcxLjAuMCc7XG4gICAgICAgICAgICByZXR1cm4gYPCfk4QgJHt0ZW1wbGF0ZS5tZXRhZGF0YS5uYW1lfSAodiR7dmVyc2lvbn0pIC0gJHt0ZW1wbGF0ZS5tZXRhZGF0YS5kZXNjcmlwdGlvbn1cXG4gICBWYXJpYWJsZXM6ICR7dmFyaWFibGVzfWA7XG4gICAgICAgICAgfSkuam9pbignXFxuXFxuJyk7XG4gICAgICAgICAgXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg8J+TnSBBdmFpbGFibGUgVGVtcGxhdGVzOlxcblxcbiR7dGVtcGxhdGVMaXN0fWBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5BR0VOVDoge1xuICAgICAgICAgIGNvbnN0IGFnZW50cyA9IGF3YWl0IHRoaXMuYWdlbnRNYW5hZ2VyLmxpc3QoKTtcbiAgICAgICAgICBpZiAoYWdlbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIk5vIGFnZW50cyBpbnN0YWxsZWQgeWV0LiBBZ2VudHMgYXJlIGF1dG9ub21vdXMgaGVscGVycyB0aGF0IGNhbiB3b3JrIG9uIHRhc2tzIGluZGVwZW5kZW50bHkuIFRoZSBEb2xsaG91c2VNQ1AgY29sbGVjdGlvbiBpbmNsdWRlcyB0YXNrIG1hbmFnZXJzLCByZXNlYXJjaCBhc3Npc3RhbnRzLCBhbmQgbW9yZS4gV291bGQgeW91IGxpa2UgdG8gYnJvd3NlIGF2YWlsYWJsZSBhZ2VudHMgb3IgbGVhcm4gaG93IHRvIGNyZWF0ZSB5b3VyIG93bj9cIlxuICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgY29uc3QgYWdlbnRMaXN0ID0gYWdlbnRzLm1hcChhZ2VudCA9PiB7XG4gICAgICAgICAgICBjb25zdCBzcGVjaWFsaXphdGlvbnMgPSAoYWdlbnQubWV0YWRhdGEgYXMgYW55KS5zcGVjaWFsaXphdGlvbnM/LmpvaW4oJywgJykgfHwgJ2dlbmVyYWwnO1xuICAgICAgICAgICAgY29uc3Qgc3RhdHVzID0gYWdlbnQuZ2V0U3RhdHVzKCk7XG4gICAgICAgICAgICBjb25zdCB2ZXJzaW9uID0gYWdlbnQudmVyc2lvbiB8fCBhZ2VudC5tZXRhZGF0YS52ZXJzaW9uIHx8ICcxLjAuMCc7XG4gICAgICAgICAgICByZXR1cm4gYPCfpJYgJHthZ2VudC5tZXRhZGF0YS5uYW1lfSAodiR7dmVyc2lvbn0pIC0gJHthZ2VudC5tZXRhZGF0YS5kZXNjcmlwdGlvbn1cXG4gICBTdGF0dXM6ICR7c3RhdHVzfSB8IFNwZWNpYWxpemF0aW9uczogJHtzcGVjaWFsaXphdGlvbnN9YDtcbiAgICAgICAgICB9KS5qb2luKCdcXG5cXG4nKTtcbiAgICAgICAgICBcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDwn6SWIEF2YWlsYWJsZSBBZ2VudHM6XFxuXFxuJHthZ2VudExpc3R9YFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKdjCBVbmtub3duIGVsZW1lbnQgdHlwZSAnJHt0eXBlfScuIEF2YWlsYWJsZSB0eXBlczogJHtPYmplY3QudmFsdWVzKEVsZW1lbnRUeXBlKS5qb2luKCcsICcpfSAob3IgbGVnYWN5IHBsdXJhbCBmb3JtczogcGVyc29uYXMsIHNraWxscywgdGVtcGxhdGVzLCBhZ2VudHMpYFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ0RvbGxob3VzZU1DUFNlcnZlci5oYW5kbGVMaXN0RWxlbWVudHMnLCBlcnJvciwgeyB0eXBlIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBg4p2MIEZhaWxlZCB0byBsaXN0ICR7dHlwZX06ICR7RXJyb3JIYW5kbGVyLmdldFVzZXJNZXNzYWdlKGVycm9yKX1gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBcbiAgYXN5bmMgYWN0aXZhdGVFbGVtZW50KG5hbWU6IHN0cmluZywgdHlwZTogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIE5vcm1hbGl6ZSB0aGUgdHlwZSB0byBoYW5kbGUgYm90aCBwbHVyYWwgYW5kIHNpbmd1bGFyIGZvcm1zXG4gICAgICBjb25zdCBub3JtYWxpemVkVHlwZSA9IHRoaXMubm9ybWFsaXplRWxlbWVudFR5cGUodHlwZSk7XG4gICAgICBcbiAgICAgIHN3aXRjaCAobm9ybWFsaXplZFR5cGUpIHtcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5QRVJTT05BOlxuICAgICAgICAgIHJldHVybiB0aGlzLmFjdGl2YXRlUGVyc29uYShuYW1lKTtcbiAgICAgICAgICBcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5TS0lMTDoge1xuICAgICAgICAgIGNvbnN0IHNraWxsID0gYXdhaXQgdGhpcy5za2lsbE1hbmFnZXIuZmluZChzID0+IHMubWV0YWRhdGEubmFtZSA9PT0gbmFtZSk7XG4gICAgICAgICAgaWYgKCFza2lsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICB0ZXh0OiBg4p2MIFNraWxsICcke25hbWV9JyBub3QgZm91bmRgXG4gICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICAvLyBBY3RpdmF0ZSB0aGUgc2tpbGxcbiAgICAgICAgICBhd2FpdCBza2lsbC5hY3RpdmF0ZT8uKCk7XG4gICAgICAgICAgXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgdGV4dDogYOKchSBTa2lsbCAnJHtuYW1lfScgYWN0aXZhdGVkXFxuXFxuJHtza2lsbC5pbnN0cnVjdGlvbnN9YFxuICAgICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuVEVNUExBVEU6IHtcbiAgICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IGF3YWl0IHRoaXMudGVtcGxhdGVNYW5hZ2VyLmZpbmQodCA9PiB0Lm1ldGFkYXRhLm5hbWUgPT09IG5hbWUpO1xuICAgICAgICAgIGlmICghdGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgdGV4dDogYOKdjCBUZW1wbGF0ZSAnJHtuYW1lfScgbm90IGZvdW5kYFxuICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgY29uc3QgdmFyaWFibGVzID0gdGVtcGxhdGUubWV0YWRhdGEudmFyaWFibGVzPy5tYXAodiA9PiB2Lm5hbWUpLmpvaW4oJywgJykgfHwgJ25vbmUnO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKchSBUZW1wbGF0ZSAnJHtuYW1lfScgcmVhZHkgdG8gdXNlXFxuVmFyaWFibGVzOiAke3ZhcmlhYmxlc31cXG5cXG5Vc2UgJ3JlbmRlcl90ZW1wbGF0ZScgdG8gZ2VuZXJhdGUgY29udGVudCB3aXRoIHRoaXMgdGVtcGxhdGUuYFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLkFHRU5UOiB7XG4gICAgICAgICAgY29uc3QgYWdlbnQgPSBhd2FpdCB0aGlzLmFnZW50TWFuYWdlci5maW5kKGEgPT4gYS5tZXRhZGF0YS5uYW1lID09PSBuYW1lKTtcbiAgICAgICAgICBpZiAoIWFnZW50KSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgIHRleHQ6IGDinYwgQWdlbnQgJyR7bmFtZX0nIG5vdCBmb3VuZGBcbiAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIC8vIEFjdGl2YXRlIHRoZSBhZ2VudFxuICAgICAgICAgIGF3YWl0IGFnZW50LmFjdGl2YXRlKCk7XG4gICAgICAgICAgXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg4pyFIEFnZW50ICcke25hbWV9JyBhY3RpdmF0ZWQgYW5kIHJlYWR5XFxuU3BlY2lhbGl6YXRpb25zOiAkeyhhZ2VudC5tZXRhZGF0YSBhcyBhbnkpLnNwZWNpYWxpemF0aW9ucz8uam9pbignLCAnKSB8fCAnZ2VuZXJhbCd9XFxuXFxuVXNlICdleGVjdXRlX2FnZW50JyB0byBnaXZlIHRoaXMgYWdlbnQgYSBnb2FsLmBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDinYwgVW5rbm93biBlbGVtZW50IHR5cGUgJyR7dHlwZX0nYFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ0RvbGxob3VzZU1DUFNlcnZlci5oYW5kbGVBY3RpdmF0ZUVsZW1lbnQnLCBlcnJvciwgeyB0eXBlLCBuYW1lIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBg4p2MIEZhaWxlZCB0byBhY3RpdmF0ZSAke3R5cGV9ICcke25hbWV9JzogJHtFcnJvckhhbmRsZXIuZ2V0VXNlck1lc3NhZ2UoZXJyb3IpfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG4gIFxuICBhc3luYyBnZXRBY3RpdmVFbGVtZW50cyh0eXBlOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgLy8gTm9ybWFsaXplIHRoZSB0eXBlIHRvIGhhbmRsZSBib3RoIHBsdXJhbCBhbmQgc2luZ3VsYXIgZm9ybXNcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gdGhpcy5ub3JtYWxpemVFbGVtZW50VHlwZSh0eXBlKTtcbiAgICAgIFxuICAgICAgc3dpdGNoIChub3JtYWxpemVkVHlwZSkge1xuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlBFUlNPTkE6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QWN0aXZlUGVyc29uYSgpO1xuICAgICAgICAgIFxuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlNLSUxMOiB7XG4gICAgICAgICAgY29uc3Qgc2tpbGxzID0gYXdhaXQgdGhpcy5za2lsbE1hbmFnZXIubGlzdCgpO1xuICAgICAgICAgIGNvbnN0IGFjdGl2ZVNraWxscyA9IHNraWxscy5maWx0ZXIocyA9PiBzLmdldFN0YXR1cygpID09PSAnYWN0aXZlJyk7XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKGFjdGl2ZVNraWxscy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgdGV4dDogXCLwn5OLIE5vIGFjdGl2ZSBza2lsbHNcIlxuICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgY29uc3Qgc2tpbGxMaXN0ID0gYWN0aXZlU2tpbGxzLm1hcChzID0+IGDwn5ug77iPICR7cy5tZXRhZGF0YS5uYW1lfWApLmpvaW4oJywgJyk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBgQWN0aXZlIHNraWxsczogJHtza2lsbExpc3R9YFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlRFTVBMQVRFOiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBcIvCfk50gVGVtcGxhdGVzIGFyZSBzdGF0ZWxlc3MgYW5kIGFjdGl2YXRlZCBvbi1kZW1hbmQgd2hlbiByZW5kZXJpbmdcIlxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLkFHRU5UOiB7XG4gICAgICAgICAgY29uc3QgYWdlbnRzID0gYXdhaXQgdGhpcy5hZ2VudE1hbmFnZXIubGlzdCgpO1xuICAgICAgICAgIGNvbnN0IGFjdGl2ZUFnZW50cyA9IGFnZW50cy5maWx0ZXIoYSA9PiBhLmdldFN0YXR1cygpID09PSAnYWN0aXZlJyk7XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKGFjdGl2ZUFnZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgdGV4dDogXCLwn6SWIE5vIGFjdGl2ZSBhZ2VudHNcIlxuICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgY29uc3QgYWdlbnRMaXN0ID0gYWN0aXZlQWdlbnRzLm1hcChhID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGdvYWxzID0gKGEgYXMgYW55KS5zdGF0ZT8uZ29hbHM/Lmxlbmd0aCB8fCAwO1xuICAgICAgICAgICAgcmV0dXJuIGDwn6SWICR7YS5tZXRhZGF0YS5uYW1lfSAoJHtnb2Fsc30gYWN0aXZlIGdvYWxzKWA7XG4gICAgICAgICAgfSkuam9pbignXFxuJyk7XG4gICAgICAgICAgXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBgQWN0aXZlIGFnZW50czpcXG4ke2FnZW50TGlzdH1gXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg4p2MIFVua25vd24gZWxlbWVudCB0eXBlICcke3R5cGV9J2BcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gZ2V0IGFjdGl2ZSAke3R5cGV9OmAsIGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYOKdjCBGYWlsZWQgdG8gZ2V0IGFjdGl2ZSAke3R5cGV9OiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG4gIFxuICBhc3luYyBkZWFjdGl2YXRlRWxlbWVudChuYW1lOiBzdHJpbmcsIHR5cGU6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICAvLyBOb3JtYWxpemUgdGhlIHR5cGUgdG8gaGFuZGxlIGJvdGggcGx1cmFsIGFuZCBzaW5ndWxhciBmb3Jtc1xuICAgICAgY29uc3Qgbm9ybWFsaXplZFR5cGUgPSB0aGlzLm5vcm1hbGl6ZUVsZW1lbnRUeXBlKHR5cGUpO1xuICAgICAgXG4gICAgICBzd2l0Y2ggKG5vcm1hbGl6ZWRUeXBlKSB7XG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuUEVSU09OQTpcbiAgICAgICAgICByZXR1cm4gdGhpcy5kZWFjdGl2YXRlUGVyc29uYSgpO1xuICAgICAgICAgIFxuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlNLSUxMOiB7XG4gICAgICAgICAgY29uc3Qgc2tpbGwgPSBhd2FpdCB0aGlzLnNraWxsTWFuYWdlci5maW5kKHMgPT4gcy5tZXRhZGF0YS5uYW1lID09PSBuYW1lKTtcbiAgICAgICAgICBpZiAoIXNraWxsKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgIHRleHQ6IGDinYwgU2tpbGwgJyR7bmFtZX0nIG5vdCBmb3VuZGBcbiAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIGF3YWl0IHNraWxsLmRlYWN0aXZhdGU/LigpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKchSBTa2lsbCAnJHtuYW1lfScgZGVhY3RpdmF0ZWRgXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuVEVNUExBVEU6IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IFwi8J+TnSBUZW1wbGF0ZXMgYXJlIHN0YXRlbGVzcyAtIG5vdGhpbmcgdG8gZGVhY3RpdmF0ZVwiXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuQUdFTlQ6IHtcbiAgICAgICAgICBjb25zdCBhZ2VudCA9IGF3YWl0IHRoaXMuYWdlbnRNYW5hZ2VyLmZpbmQoYSA9PiBhLm1ldGFkYXRhLm5hbWUgPT09IG5hbWUpO1xuICAgICAgICAgIGlmICghYWdlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgdGV4dDogYOKdjCBBZ2VudCAnJHtuYW1lfScgbm90IGZvdW5kYFxuICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgYXdhaXQgYWdlbnQuZGVhY3RpdmF0ZSgpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKchSBBZ2VudCAnJHtuYW1lfScgZGVhY3RpdmF0ZWRgXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg4p2MIFVua25vd24gZWxlbWVudCB0eXBlICcke3R5cGV9J2BcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gZGVhY3RpdmF0ZSAke3R5cGV9ICcke25hbWV9JzpgLCBlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGDinYwgRmFpbGVkIHRvIGRlYWN0aXZhdGUgJHt0eXBlfSAnJHtuYW1lfSc6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgXG4gIGFzeW5jIGdldEVsZW1lbnREZXRhaWxzKG5hbWU6IHN0cmluZywgdHlwZTogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIE5vcm1hbGl6ZSB0aGUgdHlwZSB0byBoYW5kbGUgYm90aCBwbHVyYWwgYW5kIHNpbmd1bGFyIGZvcm1zXG4gICAgICBjb25zdCBub3JtYWxpemVkVHlwZSA9IHRoaXMubm9ybWFsaXplRWxlbWVudFR5cGUodHlwZSk7XG4gICAgICBcbiAgICAgIHN3aXRjaCAobm9ybWFsaXplZFR5cGUpIHtcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5QRVJTT05BOlxuICAgICAgICAgIHJldHVybiB0aGlzLmdldFBlcnNvbmFEZXRhaWxzKG5hbWUpO1xuICAgICAgICAgIFxuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlNLSUxMOiB7XG4gICAgICAgICAgY29uc3Qgc2tpbGwgPSBhd2FpdCB0aGlzLnNraWxsTWFuYWdlci5maW5kKHMgPT4gcy5tZXRhZGF0YS5uYW1lID09PSBuYW1lKTtcbiAgICAgICAgICBpZiAoIXNraWxsKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgIHRleHQ6IGDinYwgU2tpbGwgJyR7bmFtZX0nIG5vdCBmb3VuZGBcbiAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIGNvbnN0IGRldGFpbHMgPSBbXG4gICAgICAgICAgICBg8J+boO+4jyAqKiR7c2tpbGwubWV0YWRhdGEubmFtZX0qKmAsXG4gICAgICAgICAgICBgJHtza2lsbC5tZXRhZGF0YS5kZXNjcmlwdGlvbn1gLFxuICAgICAgICAgICAgYGAsXG4gICAgICAgICAgICBgKipDb21wbGV4aXR5Kio6ICR7c2tpbGwubWV0YWRhdGEuY29tcGxleGl0eSB8fCAnYmVnaW5uZXInfWAsXG4gICAgICAgICAgICBgKipEb21haW5zKio6ICR7c2tpbGwubWV0YWRhdGEuZG9tYWlucz8uam9pbignLCAnKSB8fCAnZ2VuZXJhbCd9YCxcbiAgICAgICAgICAgIGAqKkxhbmd1YWdlcyoqOiAke3NraWxsLm1ldGFkYXRhLmxhbmd1YWdlcz8uam9pbignLCAnKSB8fCAnYW55J31gLFxuICAgICAgICAgICAgYCoqUHJlcmVxdWlzaXRlcyoqOiAke3NraWxsLm1ldGFkYXRhLnByZXJlcXVpc2l0ZXM/LmpvaW4oJywgJykgfHwgJ25vbmUnfWAsXG4gICAgICAgICAgICBgYCxcbiAgICAgICAgICAgIGAqKkluc3RydWN0aW9ucyoqOmAsXG4gICAgICAgICAgICBza2lsbC5pbnN0cnVjdGlvbnNcbiAgICAgICAgICBdO1xuICAgICAgICAgIFxuICAgICAgICAgIGlmIChza2lsbC5tZXRhZGF0YS5wYXJhbWV0ZXJzICYmIHNraWxsLm1ldGFkYXRhLnBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZGV0YWlscy5wdXNoKCcnLCAnKipQYXJhbWV0ZXJzKio6Jyk7XG4gICAgICAgICAgICBza2lsbC5tZXRhZGF0YS5wYXJhbWV0ZXJzLmZvckVhY2gocCA9PiB7XG4gICAgICAgICAgICAgIGRldGFpbHMucHVzaChgLSAke3AubmFtZX0gKCR7cC50eXBlfSk6ICR7cC5kZXNjcmlwdGlvbn1gKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGRldGFpbHMuam9pbignXFxuJylcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5URU1QTEFURToge1xuICAgICAgICAgIGNvbnN0IHRlbXBsYXRlID0gYXdhaXQgdGhpcy50ZW1wbGF0ZU1hbmFnZXIuZmluZCh0ID0+IHQubWV0YWRhdGEubmFtZSA9PT0gbmFtZSk7XG4gICAgICAgICAgaWYgKCF0ZW1wbGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICB0ZXh0OiBg4p2MIFRlbXBsYXRlICcke25hbWV9JyBub3QgZm91bmRgXG4gICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICBjb25zdCBkZXRhaWxzID0gW1xuICAgICAgICAgICAgYPCfk4QgKioke3RlbXBsYXRlLm1ldGFkYXRhLm5hbWV9KipgLFxuICAgICAgICAgICAgYCR7dGVtcGxhdGUubWV0YWRhdGEuZGVzY3JpcHRpb259YCxcbiAgICAgICAgICAgIGBgLFxuICAgICAgICAgICAgYCoqT3V0cHV0IEZvcm1hdCoqOiAkeyh0ZW1wbGF0ZS5tZXRhZGF0YSBhcyBhbnkpLm91dHB1dF9mb3JtYXQgfHwgJ3RleHQnfWAsXG4gICAgICAgICAgICBgKipUZW1wbGF0ZSBDb250ZW50Kio6YCxcbiAgICAgICAgICAgICdgYGAnLFxuICAgICAgICAgICAgdGVtcGxhdGUuY29udGVudCxcbiAgICAgICAgICAgICdgYGAnXG4gICAgICAgICAgXTtcbiAgICAgICAgICBcbiAgICAgICAgICBpZiAodGVtcGxhdGUubWV0YWRhdGEudmFyaWFibGVzICYmIHRlbXBsYXRlLm1ldGFkYXRhLnZhcmlhYmxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBkZXRhaWxzLnB1c2goJycsICcqKlZhcmlhYmxlcyoqOicpO1xuICAgICAgICAgICAgdGVtcGxhdGUubWV0YWRhdGEudmFyaWFibGVzLmZvckVhY2godiA9PiB7XG4gICAgICAgICAgICAgIGRldGFpbHMucHVzaChgLSAke3YubmFtZX0gKCR7di50eXBlfSk6ICR7di5kZXNjcmlwdGlvbn1gKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGRldGFpbHMuam9pbignXFxuJylcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5BR0VOVDoge1xuICAgICAgICAgIGNvbnN0IGFnZW50ID0gYXdhaXQgdGhpcy5hZ2VudE1hbmFnZXIuZmluZChhID0+IGEubWV0YWRhdGEubmFtZSA9PT0gbmFtZSk7XG4gICAgICAgICAgaWYgKCFhZ2VudCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICB0ZXh0OiBg4p2MIEFnZW50ICcke25hbWV9JyBub3QgZm91bmRgXG4gICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICBjb25zdCBkZXRhaWxzID0gW1xuICAgICAgICAgICAgYPCfpJYgKioke2FnZW50Lm1ldGFkYXRhLm5hbWV9KipgLFxuICAgICAgICAgICAgYCR7YWdlbnQubWV0YWRhdGEuZGVzY3JpcHRpb259YCxcbiAgICAgICAgICAgIGBgLFxuICAgICAgICAgICAgYCoqU3RhdHVzKio6ICR7YWdlbnQuZ2V0U3RhdHVzKCl9YCxcbiAgICAgICAgICAgIGAqKlNwZWNpYWxpemF0aW9ucyoqOiAkeyhhZ2VudC5tZXRhZGF0YSBhcyBhbnkpLnNwZWNpYWxpemF0aW9ucz8uam9pbignLCAnKSB8fCAnZ2VuZXJhbCd9YCxcbiAgICAgICAgICAgIGAqKkRlY2lzaW9uIEZyYW1ld29yayoqOiAkeyhhZ2VudC5tZXRhZGF0YSBhcyBhbnkpLmRlY2lzaW9uRnJhbWV3b3JrIHx8ICdydWxlLWJhc2VkJ31gLFxuICAgICAgICAgICAgYCoqUmlzayBUb2xlcmFuY2UqKjogJHsoYWdlbnQubWV0YWRhdGEgYXMgYW55KS5yaXNrVG9sZXJhbmNlIHx8ICdsb3cnfWAsXG4gICAgICAgICAgICBgYCxcbiAgICAgICAgICAgIGAqKkluc3RydWN0aW9ucyoqOmAsXG4gICAgICAgICAgICAoYWdlbnQgYXMgYW55KS5pbnN0cnVjdGlvbnMgfHwgJ05vIGluc3RydWN0aW9ucyBhdmFpbGFibGUnXG4gICAgICAgICAgXTtcbiAgICAgICAgICBcbiAgICAgICAgICBjb25zdCBhZ2VudFN0YXRlID0gKGFnZW50IGFzIGFueSkuc3RhdGU7XG4gICAgICAgICAgaWYgKGFnZW50U3RhdGU/LmdvYWxzICYmIGFnZW50U3RhdGUuZ29hbHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZGV0YWlscy5wdXNoKCcnLCAnKipDdXJyZW50IEdvYWxzKio6Jyk7XG4gICAgICAgICAgICBhZ2VudFN0YXRlLmdvYWxzLmZvckVhY2goKGc6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBkZXRhaWxzLnB1c2goYC0gJHtnLmRlc2NyaXB0aW9ufSAoJHtnLnN0YXR1c30pYCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBkZXRhaWxzLmpvaW4oJ1xcbicpXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg4p2MIFVua25vd24gZWxlbWVudCB0eXBlICcke3R5cGV9J2BcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gZ2V0ICR7dHlwZX0gZGV0YWlscyBmb3IgJyR7bmFtZX0nOmAsIGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYOKdjCBGYWlsZWQgdG8gZ2V0ICR7dHlwZX0gZGV0YWlsczogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBcbiAgYXN5bmMgcmVsb2FkRWxlbWVudHModHlwZTogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIE5vcm1hbGl6ZSB0aGUgdHlwZSB0byBoYW5kbGUgYm90aCBwbHVyYWwgYW5kIHNpbmd1bGFyIGZvcm1zXG4gICAgICBjb25zdCBub3JtYWxpemVkVHlwZSA9IHRoaXMubm9ybWFsaXplRWxlbWVudFR5cGUodHlwZSk7XG4gICAgICBcbiAgICAgIHN3aXRjaCAobm9ybWFsaXplZFR5cGUpIHtcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5QRVJTT05BOlxuICAgICAgICAgIHJldHVybiB0aGlzLnJlbG9hZFBlcnNvbmFzKCk7XG4gICAgICAgICAgXG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuU0tJTEw6IHtcbiAgICAgICAgICB0aGlzLnNraWxsTWFuYWdlci5jbGVhckNhY2hlKCk7XG4gICAgICAgICAgY29uc3Qgc2tpbGxzID0gYXdhaXQgdGhpcy5za2lsbE1hbmFnZXIubGlzdCgpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYPCflIQgUmVsb2FkZWQgJHtza2lsbHMubGVuZ3RofSBza2lsbHMgZnJvbSBwb3J0Zm9saW9gXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuVEVNUExBVEU6IHtcbiAgICAgICAgICAvLyBUZW1wbGF0ZSBtYW5hZ2VyIGRvZXNuJ3QgaGF2ZSBjbGVhckNhY2hlLCBqdXN0IGxpc3RcbiAgICAgICAgICBjb25zdCB0ZW1wbGF0ZXMgPSBhd2FpdCB0aGlzLnRlbXBsYXRlTWFuYWdlci5saXN0KCk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg8J+UhCBSZWxvYWRlZCAke3RlbXBsYXRlcy5sZW5ndGh9IHRlbXBsYXRlcyBmcm9tIHBvcnRmb2xpb2BcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5BR0VOVDoge1xuICAgICAgICAgIC8vIEFnZW50IG1hbmFnZXIgZG9lc24ndCBoYXZlIGNsZWFyQ2FjaGUsIGp1c3QgbGlzdFxuICAgICAgICAgIGNvbnN0IGFnZW50cyA9IGF3YWl0IHRoaXMuYWdlbnRNYW5hZ2VyLmxpc3QoKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDwn5SEIFJlbG9hZGVkICR7YWdlbnRzLmxlbmd0aH0gYWdlbnRzIGZyb20gcG9ydGZvbGlvYFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKdjCBVbmtub3duIGVsZW1lbnQgdHlwZSAnJHt0eXBlfSdgXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIHJlbG9hZCAke3R5cGV9OmAsIGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYOKdjCBGYWlsZWQgdG8gcmVsb2FkICR7dHlwZX06ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgXG4gIC8vIEVsZW1lbnQtc3BlY2lmaWMgbWV0aG9kc1xuICBhc3luYyByZW5kZXJUZW1wbGF0ZShuYW1lOiBzdHJpbmcsIHZhcmlhYmxlczogUmVjb3JkPHN0cmluZywgYW55Pikge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0ZW1wbGF0ZSA9IGF3YWl0IHRoaXMudGVtcGxhdGVNYW5hZ2VyLmZpbmQodCA9PiB0Lm1ldGFkYXRhLm5hbWUgPT09IG5hbWUpO1xuICAgICAgaWYgKCF0ZW1wbGF0ZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGDinYwgVGVtcGxhdGUgJyR7bmFtZX0nIG5vdCBmb3VuZGBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBTaW1wbGUgdGVtcGxhdGUgcmVuZGVyaW5nIC0gcmVwbGFjZSB2YXJpYWJsZXMgaW4gY29udGVudFxuICAgICAgbGV0IHJlbmRlcmVkID0gdGVtcGxhdGUuY29udGVudDtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhcmlhYmxlcykpIHtcbiAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGBcXFxce1xcXFx7XFxcXHMqJHtrZXl9XFxcXHMqXFxcXH1cXFxcfWAsICdnJyk7XG4gICAgICAgIHJlbmRlcmVkID0gcmVuZGVyZWQucmVwbGFjZShyZWdleCwgU3RyaW5nKHZhbHVlKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGDwn5OEIFJlbmRlcmVkIHRlbXBsYXRlICcke25hbWV9JzpcXG5cXG4ke3JlbmRlcmVkfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIHJlbmRlciB0ZW1wbGF0ZSAnJHtuYW1lfSc6YCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBg4p2MIEZhaWxlZCB0byByZW5kZXIgdGVtcGxhdGU6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgXG4gIGFzeW5jIGV4ZWN1dGVBZ2VudChuYW1lOiBzdHJpbmcsIGdvYWw6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBhZ2VudCA9IGF3YWl0IHRoaXMuYWdlbnRNYW5hZ2VyLmZpbmQoYSA9PiBhLm1ldGFkYXRhLm5hbWUgPT09IG5hbWUpO1xuICAgICAgaWYgKCFhZ2VudCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGDinYwgQWdlbnQgJyR7bmFtZX0nIG5vdCBmb3VuZGBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBTaW1wbGUgYWdlbnQgZXhlY3V0aW9uIHNpbXVsYXRpb25cbiAgICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgICAgc3VtbWFyeTogYEFnZW50ICcke25hbWV9JyBpcyBub3cgd29ya2luZyBvbjogJHtnb2FsfWAsXG4gICAgICAgIHN0YXR1czogJ2luLXByb2dyZXNzJyxcbiAgICAgICAgYWN0aW9uc1Rha2VuOiAxXG4gICAgICB9O1xuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGDwn6SWIEFnZW50ICcke25hbWV9JyBleGVjdXRpb24gcmVzdWx0OlxcblxcbiR7cmVzdWx0LnN1bW1hcnl9XFxuXFxuU3RhdHVzOiAke3Jlc3VsdC5zdGF0dXN9XFxuQWN0aW9ucyB0YWtlbjogJHtyZXN1bHQuYWN0aW9uc1Rha2VuIHx8IDB9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gZXhlY3V0ZSBhZ2VudCAnJHtuYW1lfSc6YCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBg4p2MIEZhaWxlZCB0byBleGVjdXRlIGFnZW50OiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG4gIFxuICBhc3luYyBjcmVhdGVFbGVtZW50KGFyZ3M6IHtuYW1lOiBzdHJpbmc7IHR5cGU6IHN0cmluZzsgZGVzY3JpcHRpb246IHN0cmluZzsgY29udGVudD86IHN0cmluZzsgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+fSkge1xuICAgIC8vIEVuc3VyZSBpbml0aWFsaXphdGlvbiBmb3IgdGVzdCBjb21wYXRpYmlsaXR5XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIFxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IG5hbWUsIHR5cGUsIGRlc2NyaXB0aW9uLCBjb250ZW50LCBtZXRhZGF0YSB9ID0gYXJncztcbiAgICAgIFxuICAgICAgLy8gVmFsaWRhdGUgZWxlbWVudCB0eXBlXG4gICAgICBpZiAoIU9iamVjdC52YWx1ZXMoRWxlbWVudFR5cGUpLmluY2x1ZGVzKHR5cGUgYXMgRWxlbWVudFR5cGUpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYOKdjCBJbnZhbGlkIGVsZW1lbnQgdHlwZSAnJHt0eXBlfScuIFZhbGlkIHR5cGVzOiAke09iamVjdC52YWx1ZXMoRWxlbWVudFR5cGUpLmpvaW4oJywgJyl9IChvciBsZWdhY3kgcGx1cmFsIGZvcm1zOiBwZXJzb25hcywgc2tpbGxzLCB0ZW1wbGF0ZXMsIGFnZW50cylgXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gVmFsaWRhdGUgaW5wdXRzXG4gICAgICBjb25zdCB2YWxpZGF0ZWROYW1lID0gdmFsaWRhdGVGaWxlbmFtZShuYW1lKTtcbiAgICAgIGNvbnN0IHZhbGlkYXRlZERlc2NyaXB0aW9uID0gc2FuaXRpemVJbnB1dChkZXNjcmlwdGlvbiwgU0VDVVJJVFlfTElNSVRTLk1BWF9NRVRBREFUQV9GSUVMRF9MRU5HVEgpO1xuICAgICAgXG4gICAgICAvLyBDUklUSUNBTCBGSVg6IFZhbGlkYXRlIGNvbnRlbnQgc2l6ZSBCRUZPUkUgcHJvY2Vzc2luZyB0byBwcmV2ZW50IG1lbW9yeSBleGhhdXN0aW9uXG4gICAgICAvLyBUaGlzIHByZXZlbnRzIENsYXVkZSBmcm9tIHRyeWluZyB0byBvdXRwdXQgbWFzc2l2ZSBjb250ZW50IGluIHJlc3BvbnNlc1xuICAgICAgaWYgKGNvbnRlbnQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YWxpZGF0ZUNvbnRlbnRTaXplKGNvbnRlbnQsIFNFQ1VSSVRZX0xJTUlUUy5NQVhfQ09OVEVOVF9MRU5HVEgpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg4p2MIENvbnRlbnQgdG9vIGxhcmdlOiAke2Vycm9yLm1lc3NhZ2V9LiBNYXhpbXVtIGFsbG93ZWQgc2l6ZSBpcyAke1NFQ1VSSVRZX0xJTUlUUy5NQVhfQ09OVEVOVF9MRU5HVEh9IGNoYXJhY3RlcnMgKCR7TWF0aC5mbG9vcihTRUNVUklUWV9MSU1JVFMuTUFYX0NPTlRFTlRfTEVOR1RIIC8gMTAyNCl9S0IpLmBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBTRUNVUklUWSBGSVg6IFNhbml0aXplIG1ldGFkYXRhIHRvIHByZXZlbnQgcHJvdG90eXBlIHBvbGx1dGlvblxuICAgICAgY29uc3Qgc2FuaXRpemVkTWV0YWRhdGEgPSB0aGlzLnNhbml0aXplTWV0YWRhdGEobWV0YWRhdGEgfHwge30pO1xuICAgICAgXG4gICAgICAvLyBDcmVhdGUgZWxlbWVudCBiYXNlZCBvbiB0eXBlXG4gICAgICBzd2l0Y2ggKHR5cGUgYXMgRWxlbWVudFR5cGUpIHtcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5QRVJTT05BOlxuICAgICAgICAgIC8vIFVzZSBleGlzdGluZyBwZXJzb25hIGNyZWF0aW9uIGxvZ2ljXG4gICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlUGVyc29uYShcbiAgICAgICAgICAgIHZhbGlkYXRlZE5hbWUsIFxuICAgICAgICAgICAgdmFsaWRhdGVkRGVzY3JpcHRpb24sIFxuICAgICAgICAgICAgY29udGVudCB8fCAnJyxcbiAgICAgICAgICAgIHNhbml0aXplZE1ldGFkYXRhPy50cmlnZ2Vyc1xuICAgICAgICAgICk7XG4gICAgICAgICAgXG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuU0tJTEw6XG4gICAgICAgICAgY29uc3Qgc2tpbGwgPSBhd2FpdCB0aGlzLnNraWxsTWFuYWdlci5jcmVhdGUoe1xuICAgICAgICAgICAgbmFtZTogdmFsaWRhdGVkTmFtZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB2YWxpZGF0ZWREZXNjcmlwdGlvbixcbiAgICAgICAgICAgIC4uLnNhbml0aXplZE1ldGFkYXRhLFxuICAgICAgICAgICAgY29udGVudDogY29udGVudCB8fCAnJ1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKchSBDcmVhdGVkIHNraWxsICcke3NraWxsLm1ldGFkYXRhLm5hbWV9JyBzdWNjZXNzZnVsbHlgXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgICAgXG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuVEVNUExBVEU6XG4gICAgICAgICAgY29uc3QgdGVtcGxhdGUgPSBhd2FpdCB0aGlzLnRlbXBsYXRlTWFuYWdlci5jcmVhdGUoe1xuICAgICAgICAgICAgbmFtZTogdmFsaWRhdGVkTmFtZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB2YWxpZGF0ZWREZXNjcmlwdGlvbixcbiAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQgfHwgJycsXG4gICAgICAgICAgICAuLi5zYW5pdGl6ZWRNZXRhZGF0YVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKchSBDcmVhdGVkIHRlbXBsYXRlICcke3RlbXBsYXRlLm1ldGFkYXRhLm5hbWV9JyBzdWNjZXNzZnVsbHlgXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgICAgXG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuQUdFTlQ6XG4gICAgICAgICAgY29uc3QgYWdlbnRSZXN1bHQgPSBhd2FpdCB0aGlzLmFnZW50TWFuYWdlci5jcmVhdGUoXG4gICAgICAgICAgICB2YWxpZGF0ZWROYW1lLFxuICAgICAgICAgICAgdmFsaWRhdGVkRGVzY3JpcHRpb24sXG4gICAgICAgICAgICBjb250ZW50IHx8ICcnLFxuICAgICAgICAgICAgc2FuaXRpemVkTWV0YWRhdGFcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICghYWdlbnRSZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICB0ZXh0OiBg4p2MICR7YWdlbnRSZXN1bHQubWVzc2FnZX1gXG4gICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDinIUgQ3JlYXRlZCBhZ2VudCAnJHt2YWxpZGF0ZWROYW1lfScgc3VjY2Vzc2Z1bGx5YFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICAgIFxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKdjCBFbGVtZW50IHR5cGUgJyR7dHlwZX0nIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIGZvciBjcmVhdGlvbmBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gY3JlYXRlIGVsZW1lbnQ6YCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBg4p2MIEZhaWxlZCB0byBjcmVhdGUgZWxlbWVudDogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBcbiAgYXN5bmMgZWRpdEVsZW1lbnQoYXJnczoge25hbWU6IHN0cmluZzsgdHlwZTogc3RyaW5nOyBmaWVsZDogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IFJlY29yZDxzdHJpbmcsIGFueT4gfCBhbnlbXX0pIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBuYW1lLCB0eXBlLCBmaWVsZCwgdmFsdWUgfSA9IGFyZ3M7XG4gICAgICBcbiAgICAgIC8vIFZhbGlkYXRlIGVsZW1lbnQgdHlwZVxuICAgICAgaWYgKCFPYmplY3QudmFsdWVzKEVsZW1lbnRUeXBlKS5pbmNsdWRlcyh0eXBlIGFzIEVsZW1lbnRUeXBlKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGDinYwgSW52YWxpZCBlbGVtZW50IHR5cGUgJyR7dHlwZX0nLiBWYWxpZCB0eXBlczogJHtPYmplY3QudmFsdWVzKEVsZW1lbnRUeXBlKS5qb2luKCcsICcpfSAob3IgbGVnYWN5IHBsdXJhbCBmb3JtczogcGVyc29uYXMsIHNraWxscywgdGVtcGxhdGVzLCBhZ2VudHMpYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEZvciBwZXJzb25hcywgdXNlIGV4aXN0aW5nIGVkaXQgbG9naWNcbiAgICAgIGlmICh0eXBlID09PSBFbGVtZW50VHlwZS5QRVJTT05BKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRQZXJzb25hKG5hbWUsIGZpZWxkLCBTdHJpbmcodmFsdWUpKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gVFlQRSBTQUZFVFk6IERlZmluZSBhIGNvbW1vbiBpbnRlcmZhY2UgZm9yIGVsZW1lbnQgbWFuYWdlcnNcbiAgICAgIGludGVyZmFjZSBFbGVtZW50TWFuYWdlckJhc2U8VD4ge1xuICAgICAgICBmaW5kKHByZWRpY2F0ZTogKGVsZW1lbnQ6IFQpID0+IGJvb2xlYW4pOiBQcm9taXNlPFQgfCB1bmRlZmluZWQ+O1xuICAgICAgICBzYXZlKGVsZW1lbnQ6IFQsIGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBHZXQgdGhlIGFwcHJvcHJpYXRlIG1hbmFnZXIgYmFzZWQgb24gdHlwZSB3aXRoIHByb3BlciB0eXBpbmdcbiAgICAgIGxldCBtYW5hZ2VyOiBFbGVtZW50TWFuYWdlckJhc2U8U2tpbGwgfCBUZW1wbGF0ZSB8IEFnZW50PiB8IG51bGwgPSBudWxsO1xuICAgICAgbGV0IGVsZW1lbnQ6IFNraWxsIHwgVGVtcGxhdGUgfCBBZ2VudCB8IHVuZGVmaW5lZDtcbiAgICAgIFxuICAgICAgc3dpdGNoICh0eXBlIGFzIEVsZW1lbnRUeXBlKSB7XG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuU0tJTEw6XG4gICAgICAgICAgbWFuYWdlciA9IHRoaXMuc2tpbGxNYW5hZ2VyIGFzIEVsZW1lbnRNYW5hZ2VyQmFzZTxTa2lsbD47XG4gICAgICAgICAgZWxlbWVudCA9IGF3YWl0IHRoaXMuc2tpbGxNYW5hZ2VyLmZpbmQoKGU6IFNraWxsKSA9PiBlLm1ldGFkYXRhLm5hbWUgPT09IG5hbWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlRFTVBMQVRFOlxuICAgICAgICAgIG1hbmFnZXIgPSB0aGlzLnRlbXBsYXRlTWFuYWdlciBhcyBFbGVtZW50TWFuYWdlckJhc2U8VGVtcGxhdGU+O1xuICAgICAgICAgIGVsZW1lbnQgPSBhd2FpdCB0aGlzLnRlbXBsYXRlTWFuYWdlci5maW5kKChlOiBUZW1wbGF0ZSkgPT4gZS5tZXRhZGF0YS5uYW1lID09PSBuYW1lKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5BR0VOVDpcbiAgICAgICAgICBtYW5hZ2VyID0gdGhpcy5hZ2VudE1hbmFnZXIgYXMgRWxlbWVudE1hbmFnZXJCYXNlPEFnZW50PjtcbiAgICAgICAgICBlbGVtZW50ID0gYXdhaXQgdGhpcy5hZ2VudE1hbmFnZXIuZmluZCgoZTogQWdlbnQpID0+IGUubWV0YWRhdGEubmFtZSA9PT0gbmFtZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg4p2MIEVsZW1lbnQgdHlwZSAnJHt0eXBlfScgaXMgbm90IHlldCBzdXBwb3J0ZWQgZm9yIGVkaXRpbmdgXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGlmIGVsZW1lbnQgd2FzIGZvdW5kXG4gICAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBg4p2MICR7dHlwZX0gJyR7bmFtZX0nIG5vdCBmb3VuZGBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBIYW5kbGUgbmVzdGVkIGZpZWxkIHVwZGF0ZXMgKGUuZy4sIFwibWV0YWRhdGEuYXV0aG9yXCIpXG4gICAgICBjb25zdCBmaWVsZFBhcnRzID0gZmllbGQuc3BsaXQoJy4nKTtcbiAgICAgIFxuICAgICAgLy8gU0VDVVJJVFkgRklYOiBWYWxpZGF0ZSBmaWVsZCBuYW1lcyB0byBwcmV2ZW50IHByb3RvdHlwZSBwb2xsdXRpb25cbiAgICAgIGNvbnN0IGRhbmdlcm91c1Byb3BlcnRpZXMgPSBbJ19fcHJvdG9fXycsICdjb25zdHJ1Y3RvcicsICdwcm90b3R5cGUnXTtcbiAgICAgIGZvciAoY29uc3QgcGFydCBvZiBmaWVsZFBhcnRzKSB7XG4gICAgICAgIGlmIChkYW5nZXJvdXNQcm9wZXJ0aWVzLmluY2x1ZGVzKHBhcnQpKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg4p2MIEludmFsaWQgZmllbGQgbmFtZTogJyR7cGFydH0nIGlzIG5vdCBhbGxvd2VkIGZvciBzZWN1cml0eSByZWFzb25zYFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIGxldCB0YXJnZXQ6IGFueSA9IGVsZW1lbnQ7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpZWxkUGFydHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgIC8vIFNFQ1VSSVRZOiBBZGRpdGlvbmFsIGNoZWNrIHRvIHByZXZlbnQgcHJvdG90eXBlIHBvbGx1dGlvblxuICAgICAgICBpZiAodHlwZW9mIHRhcmdldCAhPT0gJ29iamVjdCcgfHwgdGFyZ2V0ID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg4p2MIENhbm5vdCBzZXQgcHJvcGVydHkgJyR7ZmllbGRQYXJ0c1tpXX0nIG9uIG5vbi1vYmplY3RgXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGlmICghdGFyZ2V0W2ZpZWxkUGFydHNbaV1dKSB7XG4gICAgICAgICAgLy8gU0VDVVJJVFk6IFVzZSBPYmplY3QuZGVmaW5lUHJvcGVydHkgdG8gYXZvaWQgcHJvdG90eXBlIGNoYWluIHBvbGx1dGlvblxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGZpZWxkUGFydHNbaV0sIHtcbiAgICAgICAgICAgIHZhbHVlOiB7fSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRhcmdldCA9IHRhcmdldFtmaWVsZFBhcnRzW2ldXTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gVXBkYXRlIHRoZSBmaWVsZFxuICAgICAgY29uc3QgbGFzdEZpZWxkID0gZmllbGRQYXJ0c1tmaWVsZFBhcnRzLmxlbmd0aCAtIDFdO1xuICAgICAgLy8gU0VDVVJJVFk6IFVzZSBPYmplY3QuZGVmaW5lUHJvcGVydHkgZm9yIHRoZSBmaW5hbCBhc3NpZ25tZW50IHRvb1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbGFzdEZpZWxkLCB7XG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIC8vIFZFUlNJT04gRklYOiBIYW5kbGUgdmVyc2lvbiBmaWVsZCB1cGRhdGVzIGRpZmZlcmVudGx5XG4gICAgICAvLyBJZiB1c2VyIGlzIGRpcmVjdGx5IGVkaXRpbmcgdmVyc2lvbiBmaWVsZCwgZG9uJ3QgYXV0by1pbmNyZW1lbnRcbiAgICAgIGlmIChmaWVsZCA9PT0gJ3ZlcnNpb24nIHx8IGZpZWxkID09PSAnbWV0YWRhdGEudmVyc2lvbicpIHtcbiAgICAgICAgY29uc3QgdmVyc2lvblN0cmluZyA9IFN0cmluZyh2YWx1ZSk7XG4gICAgICAgIFxuICAgICAgICAvLyBWRVJTSU9OIFZBTElEQVRJT046IFZhbGlkYXRlIHZlcnNpb24gZm9ybWF0XG4gICAgICAgIC8vIEFjY2VwdCBzZW12ZXIgKDEuMC4wKSwgdHdvLXBhcnQgKDEuMCksIG9yIHNpbmdsZSBkaWdpdCAoMSlcbiAgICAgICAgLy8gQWxzbyBhY2NlcHRzIHByZS1yZWxlYXNlIHZlcnNpb25zICgxLjAuMC1iZXRhLCAxLjAuMC1hbHBoYS4xKVxuICAgICAgICBjb25zdCBpc1ZhbGlkVmVyc2lvbiA9IC9eKFxcZCspKFxcLlxcZCspPyhcXC5cXGQrKT8oLVthLXpBLVowLTkuLV0rKT8kLy50ZXN0KHZlcnNpb25TdHJpbmcpO1xuICAgICAgICBpZiAoIWlzVmFsaWRWZXJzaW9uKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg4p2MIEludmFsaWQgdmVyc2lvbiBmb3JtYXQ6ICcke3ZlcnNpb25TdHJpbmd9Jy4gUGxlYXNlIHVzZSBmb3JtYXQgbGlrZSAxLjAuMCwgMS4wLCBvciAxYFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBFUlJPUiBIQU5ETElORzogV3JhcCB2ZXJzaW9uIHVwZGF0ZSBpbiB0cnktY2F0Y2hcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBVcGRhdGUgYm90aCBsb2NhdGlvbnMgdG8gZW5zdXJlIGNvbnNpc3RlbmN5XG4gICAgICAgICAgZWxlbWVudC52ZXJzaW9uID0gdmVyc2lvblN0cmluZztcbiAgICAgICAgICBpZiAoZWxlbWVudC5tZXRhZGF0YSkge1xuICAgICAgICAgICAgZWxlbWVudC5tZXRhZGF0YS52ZXJzaW9uID0gdmVyc2lvblN0cmluZztcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gdXBkYXRlIHZlcnNpb24gZm9yICR7bmFtZX06YCwgZXJyb3IpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKdjCBGYWlsZWQgdG8gdXBkYXRlIHZlcnNpb246ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGb3Igb3RoZXIgZmllbGQgZWRpdHMsIGF1dG8taW5jcmVtZW50IHZlcnNpb25cbiAgICAgICAgLy8gVkVSU0lPTiBGSVg6IFVwZGF0ZSBib3RoIGVsZW1lbnQudmVyc2lvbiBBTkQgZWxlbWVudC5tZXRhZGF0YS52ZXJzaW9uXG4gICAgICAgIC8vIFByZXZpb3VzbHk6IE9ubHkgZWxlbWVudC52ZXJzaW9uIHdhcyB1cGRhdGVkLCBidXQgc29tZSBtYW5hZ2VycyByZWFkIGZyb20gbWV0YWRhdGEudmVyc2lvblxuICAgICAgICAvLyBOb3c6IEtlZXAgYm90aCBpbiBzeW5jIHRvIGVuc3VyZSB2ZXJzaW9uIHBlcnNpc3RzIGNvcnJlY3RseVxuICAgICAgICBcbiAgICAgICAgLy8gRVJST1IgSEFORExJTkc6IFdyYXAgYXV0by1pbmNyZW1lbnQgaW4gdHJ5LWNhdGNoXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKGVsZW1lbnQudmVyc2lvbikge1xuICAgICAgICAgICAgLy8gUFJFLVJFTEVBU0UgSEFORExJTkc6IENoZWNrIGZvciBwcmUtcmVsZWFzZSB2ZXJzaW9uc1xuICAgICAgICAgICAgY29uc3QgcHJlUmVsZWFzZU1hdGNoID0gZWxlbWVudC52ZXJzaW9uLm1hdGNoKC9eKFxcZCtcXC5cXGQrXFwuXFxkKykoLShbYS16QS1aMC05Li1dKykpPyQvKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKHByZVJlbGVhc2VNYXRjaCkge1xuICAgICAgICAgICAgICAvLyBIYW5kbGUgcHJlLXJlbGVhc2UgdmVyc2lvbnMgKGUuZy4sIDEuMC4wLWJldGEuMSlcbiAgICAgICAgICAgICAgY29uc3QgYmFzZVZlcnNpb24gPSBwcmVSZWxlYXNlTWF0Y2hbMV07XG4gICAgICAgICAgICAgIGNvbnN0IHByZVJlbGVhc2VUYWcgPSBwcmVSZWxlYXNlTWF0Y2hbM107XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICBpZiAocHJlUmVsZWFzZVRhZykge1xuICAgICAgICAgICAgICAgIC8vIElmIGl0IGhhcyBhIHByZS1yZWxlYXNlIHRhZywgaW5jcmVtZW50IHRoZSBwcmUtcmVsZWFzZSBudW1iZXJcbiAgICAgICAgICAgICAgICBjb25zdCBwcmVSZWxlYXNlTnVtYmVyTWF0Y2ggPSBwcmVSZWxlYXNlVGFnLm1hdGNoKC9eKFthLXpBLVpdKylcXC4/KFxcZCspPyQvKTtcbiAgICAgICAgICAgICAgICBpZiAocHJlUmVsZWFzZU51bWJlck1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBwcmVSZWxlYXNlVHlwZSA9IHByZVJlbGVhc2VOdW1iZXJNYXRjaFsxXTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHByZVJlbGVhc2VOdW1iZXIgPSBwYXJzZUludChwcmVSZWxlYXNlTnVtYmVyTWF0Y2hbMl0gfHwgJzAnKSArIDE7XG4gICAgICAgICAgICAgICAgICBlbGVtZW50LnZlcnNpb24gPSBgJHtiYXNlVmVyc2lvbn0tJHtwcmVSZWxlYXNlVHlwZX0uJHtwcmVSZWxlYXNlTnVtYmVyfWA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIC8vIENvbXBsZXggcHJlLXJlbGVhc2UsIGp1c3QgaW5jcmVtZW50IHBhdGNoXG4gICAgICAgICAgICAgICAgICBjb25zdCBbbWFqb3IsIG1pbm9yLCBwYXRjaF0gPSBiYXNlVmVyc2lvbi5zcGxpdCgnLicpLm1hcChOdW1iZXIpO1xuICAgICAgICAgICAgICAgICAgZWxlbWVudC52ZXJzaW9uID0gYCR7bWFqb3J9LiR7bWlub3J9LiR7cGF0Y2ggKyAxfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFJlZ3VsYXIgc2VtdmVyLCBpbmNyZW1lbnQgcGF0Y2hcbiAgICAgICAgICAgICAgICBjb25zdCBbbWFqb3IsIG1pbm9yLCBwYXRjaF0gPSBiYXNlVmVyc2lvbi5zcGxpdCgnLicpLm1hcChOdW1iZXIpO1xuICAgICAgICAgICAgICAgIGVsZW1lbnQudmVyc2lvbiA9IGAke21ham9yfS4ke21pbm9yfS4ke3BhdGNoICsgMX1gO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBIYW5kbGUgbm9uLXNlbXZlciB2ZXJzaW9uc1xuICAgICAgICAgICAgICBjb25zdCB2ZXJzaW9uUGFydHMgPSBlbGVtZW50LnZlcnNpb24uc3BsaXQoJy4nKTtcbiAgICAgICAgICAgICAgaWYgKHZlcnNpb25QYXJ0cy5sZW5ndGggPj0gMykge1xuICAgICAgICAgICAgICAgIC8vIFN0YW5kYXJkIHNlbXZlciBmb3JtYXQgKGUuZy4sIDEuMC4wKVxuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGNoID0gcGFyc2VJbnQodmVyc2lvblBhcnRzWzJdKSB8fCAwO1xuICAgICAgICAgICAgICAgIHZlcnNpb25QYXJ0c1syXSA9IFN0cmluZyhwYXRjaCArIDEpO1xuICAgICAgICAgICAgICAgIGVsZW1lbnQudmVyc2lvbiA9IHZlcnNpb25QYXJ0cy5qb2luKCcuJyk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodmVyc2lvblBhcnRzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgICAgIC8vIFR3by1wYXJ0IHZlcnNpb24gKGUuZy4sIDEuMCkgLSBhZGQgcGF0Y2ggdmVyc2lvblxuICAgICAgICAgICAgICAgIGVsZW1lbnQudmVyc2lvbiA9IGAke2VsZW1lbnQudmVyc2lvbn0uMWA7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodmVyc2lvblBhcnRzLmxlbmd0aCA9PT0gMSAmJiAvXlxcZCskLy50ZXN0KHZlcnNpb25QYXJ0c1swXSkpIHtcbiAgICAgICAgICAgICAgICAvLyBTaW5nbGUgbnVtYmVyIHZlcnNpb24gKGUuZy4sIDEpIC0gY29udmVydCB0byBzZW12ZXJcbiAgICAgICAgICAgICAgICBlbGVtZW50LnZlcnNpb24gPSBgJHtlbGVtZW50LnZlcnNpb259LjAuMWA7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gTm9uLXN0YW5kYXJkIHZlcnNpb24gLSBhcHBlbmQgb3IgcmVwbGFjZSB3aXRoIHN0YW5kYXJkIGZvcm1hdFxuICAgICAgICAgICAgICAgIGVsZW1lbnQudmVyc2lvbiA9ICcxLjAuMSc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gTm8gdmVyc2lvbiAtIHNldCBpbml0aWFsIHZlcnNpb25cbiAgICAgICAgICAgIGVsZW1lbnQudmVyc2lvbiA9ICcxLjAuMCc7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIC8vIEVuc3VyZSBtZXRhZGF0YS52ZXJzaW9uIGlzIGFsc28gdXBkYXRlZCBmb3IgbWFuYWdlcnMgdGhhdCB1c2UgaXRcbiAgICAgICAgICBpZiAoZWxlbWVudC5tZXRhZGF0YSkge1xuICAgICAgICAgICAgZWxlbWVudC5tZXRhZGF0YS52ZXJzaW9uID0gZWxlbWVudC52ZXJzaW9uO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBhdXRvLWluY3JlbWVudCB2ZXJzaW9uIGZvciAke25hbWV9OmAsIGVycm9yKTtcbiAgICAgICAgICAvLyBEb24ndCBmYWlsIHRoZSBlbnRpcmUgb3BlcmF0aW9uLCBqdXN0IGxvZyB0aGUgZXJyb3JcbiAgICAgICAgICAvLyBWZXJzaW9uIHdpbGwgcmVtYWluIHVuY2hhbmdlZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFNhdmUgdGhlIGVsZW1lbnQgLSBuZWVkIHRvIGRldGVybWluZSBmaWxlbmFtZVxuICAgICAgY29uc3QgZmlsZW5hbWUgPSBgJHtlbGVtZW50Lm1ldGFkYXRhLm5hbWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXmEtejAtOS1dL2csICctJyl9Lm1kYDtcbiAgICAgIC8vIFRZUEUgU0FGRVRZOiBObyBuZWVkIGZvciAnYXMgYW55JyBjYXN0IGFueW1vcmUgd2l0aCBwcm9wZXIgdHlwaW5nXG4gICAgICBhd2FpdCBtYW5hZ2VyIS5zYXZlKGVsZW1lbnQsIGZpbGVuYW1lKTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBg4pyFIFVwZGF0ZWQgJHt0eXBlfSAnJHtuYW1lfScgLSAke2ZpZWxkfSBzZXQgdG86ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGVkaXQgZWxlbWVudDpgLCBlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGDinYwgRmFpbGVkIHRvIGVkaXQgZWxlbWVudDogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBcbiAgYXN5bmMgdmFsaWRhdGVFbGVtZW50KGFyZ3M6IHtuYW1lOiBzdHJpbmc7IHR5cGU6IHN0cmluZzsgc3RyaWN0PzogYm9vbGVhbn0pIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBuYW1lLCB0eXBlLCBzdHJpY3QgPSBmYWxzZSB9ID0gYXJncztcbiAgICAgIFxuICAgICAgLy8gVmFsaWRhdGUgZWxlbWVudCB0eXBlXG4gICAgICBpZiAoIU9iamVjdC52YWx1ZXMoRWxlbWVudFR5cGUpLmluY2x1ZGVzKHR5cGUgYXMgRWxlbWVudFR5cGUpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYOKdjCBJbnZhbGlkIGVsZW1lbnQgdHlwZSAnJHt0eXBlfScuIFZhbGlkIHR5cGVzOiAke09iamVjdC52YWx1ZXMoRWxlbWVudFR5cGUpLmpvaW4oJywgJyl9IChvciBsZWdhY3kgcGx1cmFsIGZvcm1zOiBwZXJzb25hcywgc2tpbGxzLCB0ZW1wbGF0ZXMsIGFnZW50cylgXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRm9yIHBlcnNvbmFzLCB1c2UgZXhpc3RpbmcgdmFsaWRhdGlvbiBsb2dpY1xuICAgICAgaWYgKHR5cGUgPT09IEVsZW1lbnRUeXBlLlBFUlNPTkEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVQZXJzb25hKG5hbWUpO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBHZXQgdGhlIGFwcHJvcHJpYXRlIG1hbmFnZXIgYmFzZWQgb24gdHlwZVxuICAgICAgbGV0IG1hbmFnZXI6IFNraWxsTWFuYWdlciB8IFRlbXBsYXRlTWFuYWdlciB8IEFnZW50TWFuYWdlciB8IG51bGwgPSBudWxsO1xuICAgICAgc3dpdGNoICh0eXBlIGFzIEVsZW1lbnRUeXBlKSB7XG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuU0tJTEw6XG4gICAgICAgICAgbWFuYWdlciA9IHRoaXMuc2tpbGxNYW5hZ2VyO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlRFTVBMQVRFOlxuICAgICAgICAgIG1hbmFnZXIgPSB0aGlzLnRlbXBsYXRlTWFuYWdlcjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5BR0VOVDpcbiAgICAgICAgICBtYW5hZ2VyID0gdGhpcy5hZ2VudE1hbmFnZXI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg4p2MIEVsZW1lbnQgdHlwZSAnJHt0eXBlfScgaXMgbm90IHlldCBzdXBwb3J0ZWQgZm9yIHZhbGlkYXRpb25gXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEZpbmQgdGhlIGVsZW1lbnRcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBhd2FpdCBtYW5hZ2VyIS5maW5kKChlOiBhbnkpID0+IGUubWV0YWRhdGEubmFtZSA9PT0gbmFtZSk7XG4gICAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBg4p2MICR7dHlwZX0gJyR7bmFtZX0nIG5vdCBmb3VuZGBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBQZXJmb3JtIHZhbGlkYXRpb25cbiAgICAgIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSBlbGVtZW50LnZhbGlkYXRlKCk7XG4gICAgICBcbiAgICAgIC8vIEZvcm1hdCB2YWxpZGF0aW9uIHJlcG9ydFxuICAgICAgbGV0IHJlcG9ydCA9IGDwn5SNIFZhbGlkYXRpb24gUmVwb3J0IGZvciAke3R5cGV9ICcke25hbWV9JzpcXG5gO1xuICAgICAgcmVwb3J0ICs9IGAke3ZhbGlkYXRpb25SZXN1bHQudmFsaWQgPyAn4pyFJyA6ICfinYwnfSBTdGF0dXM6ICR7dmFsaWRhdGlvblJlc3VsdC52YWxpZCA/ICdWYWxpZCcgOiAnSW52YWxpZCd9XFxuXFxuYDtcbiAgICAgIFxuICAgICAgaWYgKHZhbGlkYXRpb25SZXN1bHQuZXJyb3JzICYmIHZhbGlkYXRpb25SZXN1bHQuZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVwb3J0ICs9IGDinYwgRXJyb3JzICgke3ZhbGlkYXRpb25SZXN1bHQuZXJyb3JzLmxlbmd0aH0pOlxcbmA7XG4gICAgICAgIHZhbGlkYXRpb25SZXN1bHQuZXJyb3JzLmZvckVhY2goKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICByZXBvcnQgKz0gYCAgIOKAoiAke2Vycm9yLmZpZWxkIHx8ICdHZW5lcmFsJ306ICR7ZXJyb3IubWVzc2FnZX1cXG5gO1xuICAgICAgICAgIGlmIChlcnJvci5maXgpIHtcbiAgICAgICAgICAgIHJlcG9ydCArPSBgICAgICDwn5KhIEZpeDogJHtlcnJvci5maXh9XFxuYDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXBvcnQgKz0gJ1xcbic7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGlmICh2YWxpZGF0aW9uUmVzdWx0Lndhcm5pbmdzICYmIHZhbGlkYXRpb25SZXN1bHQud2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICByZXBvcnQgKz0gYOKaoO+4jyAgV2FybmluZ3MgKCR7dmFsaWRhdGlvblJlc3VsdC53YXJuaW5ncy5sZW5ndGh9KTpcXG5gO1xuICAgICAgICB2YWxpZGF0aW9uUmVzdWx0Lndhcm5pbmdzLmZvckVhY2goKHdhcm5pbmc6IGFueSkgPT4ge1xuICAgICAgICAgIHJlcG9ydCArPSBgICAg4oCiICR7d2FybmluZy5maWVsZCB8fCAnR2VuZXJhbCd9OiAke3dhcm5pbmcubWVzc2FnZX1cXG5gO1xuICAgICAgICAgIGlmICh3YXJuaW5nLnN1Z2dlc3Rpb24pIHtcbiAgICAgICAgICAgIHJlcG9ydCArPSBgICAgICDwn5KhIFN1Z2dlc3Rpb246ICR7d2FybmluZy5zdWdnZXN0aW9ufVxcbmA7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmVwb3J0ICs9ICdcXG4nO1xuICAgICAgfVxuICAgICAgXG4gICAgICBpZiAodmFsaWRhdGlvblJlc3VsdC5zdWdnZXN0aW9ucyAmJiB2YWxpZGF0aW9uUmVzdWx0LnN1Z2dlc3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVwb3J0ICs9IGDwn5KhIFN1Z2dlc3Rpb25zOlxcbmA7XG4gICAgICAgIHZhbGlkYXRpb25SZXN1bHQuc3VnZ2VzdGlvbnMuZm9yRWFjaCgoc3VnZ2VzdGlvbjogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgcmVwb3J0ICs9IGAgICDigKIgJHtzdWdnZXN0aW9ufVxcbmA7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBBZGQgc3RyaWN0IG1vZGUgYWRkaXRpb25hbCBjaGVja3MgaWYgcmVxdWVzdGVkXG4gICAgICBpZiAoc3RyaWN0KSB7XG4gICAgICAgIHJlcG9ydCArPSAnXFxu8J+TiyBTdHJpY3QgTW9kZTogQWRkaXRpb25hbCBxdWFsaXR5IGNoZWNrcyBhcHBsaWVkJztcbiAgICAgIH1cbiAgICAgIFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiByZXBvcnRcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIHZhbGlkYXRlIGVsZW1lbnQ6YCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBg4p2MIEZhaWxlZCB0byB2YWxpZGF0ZSBlbGVtZW50OiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG4gIFxuICBhc3luYyBkZWxldGVFbGVtZW50KGFyZ3M6IHtuYW1lOiBzdHJpbmc7IHR5cGU6IHN0cmluZzsgZGVsZXRlRGF0YT86IGJvb2xlYW59KSB7XG4gICAgLy8gRW5zdXJlIGluaXRpYWxpemF0aW9uIGZvciB0ZXN0IGNvbXBhdGliaWxpdHlcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgbmFtZSwgdHlwZSwgZGVsZXRlRGF0YSB9ID0gYXJncztcbiAgICAgIFxuICAgICAgLy8gVmFsaWRhdGUgZWxlbWVudCB0eXBlXG4gICAgICBpZiAoIU9iamVjdC52YWx1ZXMoRWxlbWVudFR5cGUpLmluY2x1ZGVzKHR5cGUgYXMgRWxlbWVudFR5cGUpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYOKdjCBJbnZhbGlkIGVsZW1lbnQgdHlwZTogJHt0eXBlfVxcblZhbGlkIHR5cGVzOiAke09iamVjdC52YWx1ZXMoRWxlbWVudFR5cGUpLmpvaW4oJywgJyl9IChvciBsZWdhY3kgcGx1cmFsIGZvcm1zOiBwZXJzb25hcywgc2tpbGxzLCB0ZW1wbGF0ZXMsIGFnZW50cylgXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gR2V0IHRoZSBhcHByb3ByaWF0ZSBtYW5hZ2VyIGJhc2VkIG9uIHR5cGVcbiAgICAgIGxldCBtYW5hZ2VyOiBTa2lsbE1hbmFnZXIgfCBUZW1wbGF0ZU1hbmFnZXIgfCBBZ2VudE1hbmFnZXIgfCBudWxsID0gbnVsbDtcbiAgICAgIHN3aXRjaCAodHlwZSBhcyBFbGVtZW50VHlwZSkge1xuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlNLSUxMOlxuICAgICAgICAgIG1hbmFnZXIgPSB0aGlzLnNraWxsTWFuYWdlcjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5URU1QTEFURTpcbiAgICAgICAgICBtYW5hZ2VyID0gdGhpcy50ZW1wbGF0ZU1hbmFnZXI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuQUdFTlQ6XG4gICAgICAgICAgbWFuYWdlciA9IHRoaXMuYWdlbnRNYW5hZ2VyO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlBFUlNPTkE6XG4gICAgICAgICAgLy8gRm9yIHBlcnNvbmFzLCB1c2UgYSBkaWZmZXJlbnQgYXBwcm9hY2hcbiAgICAgICAgICAvLyBwZXJzb25hc0RpciBpcyBndWFyYW50ZWVkIHRvIGJlIHNldCBhZnRlciBlbnN1cmVJbml0aWFsaXplZCgpXG4gICAgICAgICAgY29uc3QgcGVyc29uYVBhdGggPSBwYXRoLmpvaW4odGhpcy5wZXJzb25hc0RpciEsIGAke25hbWV9Lm1kYCk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IGZzLmFjY2VzcyhwZXJzb25hUGF0aCk7XG4gICAgICAgICAgICBhd2FpdCBmcy51bmxpbmsocGVyc29uYVBhdGgpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBSZWxvYWQgcGVyc29uYXMgdG8gdXBkYXRlIHRoZSBjYWNoZVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkUGVyc29uYXMoKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICB0ZXh0OiBg4pyFIFN1Y2Nlc3NmdWxseSBkZWxldGVkIHBlcnNvbmEgJyR7bmFtZX0nYFxuICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKChlcnJvciBhcyBhbnkpLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgICAgdGV4dDogYOKdjCAke3R5cGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0eXBlLnNsaWNlKDEpfSAnJHtuYW1lfScgbm90IGZvdW5kYFxuICAgICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg4p2MIEVsZW1lbnQgdHlwZSAnJHt0eXBlfScgaXMgbm90IHlldCBzdXBwb3J0ZWQgZm9yIGRlbGV0aW9uYFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBFbnN1cmUgbWFuYWdlciB3YXMgYXNzaWduZWQgKFR5cGVTY3JpcHQgdHlwZSBzYWZldHkpXG4gICAgICBpZiAoIW1hbmFnZXIpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBg4p2MIEVsZW1lbnQgdHlwZSAnJHt0eXBlfScgaXMgbm90IHN1cHBvcnRlZCBmb3IgZGVsZXRpb25gXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRmluZCB0aGUgZWxlbWVudCBmaXJzdCB0byBjaGVjayBpZiBpdCBleGlzdHNcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBhd2FpdCBtYW5hZ2VyIS5maW5kKChlOiBhbnkpID0+IGUubWV0YWRhdGEubmFtZSA9PT0gbmFtZSk7XG4gICAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBg4p2MICR7dHlwZX0gJyR7bmFtZX0nIG5vdCBmb3VuZGBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBDaGVjayBmb3IgYXNzb2NpYXRlZCBkYXRhIGZpbGVzXG4gICAgICBsZXQgZGF0YUZpbGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgXG4gICAgICAvLyBBZ2VudC1zcGVjaWZpYzogQ2hlY2sgZm9yIHN0YXRlIGZpbGVzXG4gICAgICBpZiAodHlwZSA9PT0gRWxlbWVudFR5cGUuQUdFTlQpIHtcbiAgICAgICAgY29uc3Qgc3RhdGVEaXIgPSBwYXRoLmpvaW4odGhpcy5wb3J0Zm9saW9NYW5hZ2VyLmdldEVsZW1lbnREaXIoRWxlbWVudFR5cGUuQUdFTlQpLCAnLnN0YXRlJyk7XG4gICAgICAgIGNvbnN0IHN0YXRlRmlsZSA9IHBhdGguam9pbihzdGF0ZURpciwgYCR7bmFtZX0tc3RhdGUuanNvbmApO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHN0YXQgPSBhd2FpdCBmcy5zdGF0KHN0YXRlRmlsZSk7XG4gICAgICAgICAgZGF0YUZpbGVzLnB1c2goYC0gLnN0YXRlLyR7bmFtZX0tc3RhdGUuanNvbiAoJHsoc3RhdC5zaXplIC8gMTAyNCkudG9GaXhlZCgyKX0gS0IpYCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgLy8gTm8gc3RhdGUgZmlsZSBleGlzdHMsIHdoaWNoIGlzIGZpbmVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBNZW1vcnktc3BlY2lmaWM6IENoZWNrIGZvciBzdG9yYWdlIGZpbGVzXG4gICAgICBpZiAodHlwZSA9PT0gRWxlbWVudFR5cGUuTUVNT1JZKSB7XG4gICAgICAgIGNvbnN0IHN0b3JhZ2VEaXIgPSBwYXRoLmpvaW4odGhpcy5wb3J0Zm9saW9NYW5hZ2VyLmdldEVsZW1lbnREaXIoRWxlbWVudFR5cGUuTUVNT1JZKSwgJy5zdG9yYWdlJyk7XG4gICAgICAgIGNvbnN0IHN0b3JhZ2VGaWxlID0gcGF0aC5qb2luKHN0b3JhZ2VEaXIsIGAke25hbWV9LW1lbW9yeS5qc29uYCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qgc3RhdCA9IGF3YWl0IGZzLnN0YXQoc3RvcmFnZUZpbGUpO1xuICAgICAgICAgIGRhdGFGaWxlcy5wdXNoKGAtIC5zdG9yYWdlLyR7bmFtZX0tbWVtb3J5Lmpzb24gKCR7KHN0YXQuc2l6ZSAvIDEwMjQpLnRvRml4ZWQoMil9IEtCKWApO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIC8vIE5vIHN0b3JhZ2UgZmlsZSBleGlzdHMsIHdoaWNoIGlzIGZpbmVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBFbnNlbWJsZS1zcGVjaWZpYzogQ2hlY2sgZm9yIGNvbmZpZyBmaWxlc1xuICAgICAgaWYgKHR5cGUgPT09IEVsZW1lbnRUeXBlLkVOU0VNQkxFKSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZ0RpciA9IHBhdGguam9pbih0aGlzLnBvcnRmb2xpb01hbmFnZXIuZ2V0RWxlbWVudERpcihFbGVtZW50VHlwZS5FTlNFTUJMRSksICcuY29uZmlncycpO1xuICAgICAgICBjb25zdCBjb25maWdGaWxlID0gcGF0aC5qb2luKGNvbmZpZ0RpciwgYCR7bmFtZX0tY29uZmlnLmpzb25gKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBzdGF0ID0gYXdhaXQgZnMuc3RhdChjb25maWdGaWxlKTtcbiAgICAgICAgICBkYXRhRmlsZXMucHVzaChgLSAuY29uZmlncy8ke25hbWV9LWNvbmZpZy5qc29uICgkeyhzdGF0LnNpemUgLyAxMDI0KS50b0ZpeGVkKDIpfSBLQilgKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAvLyBObyBjb25maWcgZmlsZSBleGlzdHMsIHdoaWNoIGlzIGZpbmVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBJZiBkYXRhIGZpbGVzIGV4aXN0IGFuZCBkZWxldGVEYXRhIGlzIG5vdCBzcGVjaWZpZWQsIHdlIG5lZWQgdG8gaW5mb3JtIHRoZSB1c2VyXG4gICAgICBpZiAoZGF0YUZpbGVzLmxlbmd0aCA+IDAgJiYgZGVsZXRlRGF0YSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYOKaoO+4jyAgVGhpcyAke3R5cGV9IGhhcyBhc3NvY2lhdGVkIGRhdGEgZmlsZXM6XFxuJHtkYXRhRmlsZXMuam9pbignXFxuJyl9XFxuXFxuV291bGQgeW91IGxpa2UgdG8gZGVsZXRlIHRoZXNlIGRhdGEgZmlsZXMgYXMgd2VsbD9cXG5cXG7igKIgVG8gZGVsZXRlIGV2ZXJ5dGhpbmcgKGVsZW1lbnQgKyBkYXRhKSwgc2F5OiBcIlllcywgZGVsZXRlIGFsbCBkYXRhXCJcXG7igKIgVG8ga2VlcCB0aGUgZGF0YSBmaWxlcywgc2F5OiBcIk5vLCBrZWVwIHRoZSBkYXRhXCJcXG7igKIgVG8gY2FuY2VsLCBzYXk6IFwiQ2FuY2VsXCJgXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRGVsZXRlIHRoZSBtYWluIGVsZW1lbnQgZmlsZVxuICAgICAgY29uc3QgZmlsZW5hbWUgPSBgJHtzbHVnaWZ5KG5hbWUpfS5tZGA7XG4gICAgICBjb25zdCBmaWxlcGF0aCA9IHBhdGguam9pbih0aGlzLnBvcnRmb2xpb01hbmFnZXIuZ2V0RWxlbWVudERpcih0eXBlIGFzIEVsZW1lbnRUeXBlKSwgZmlsZW5hbWUpO1xuICAgICAgXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBmcy51bmxpbmsoZmlsZXBhdGgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKChlcnJvciBhcyBhbnkpLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg4p2MICR7dHlwZX0gZmlsZSAnJHtmaWxlbmFtZX0nIG5vdCBmb3VuZGBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRGVsZXRlIGFzc29jaWF0ZWQgZGF0YSBmaWxlcyBpZiByZXF1ZXN0ZWRcbiAgICAgIGlmIChkZWxldGVEYXRhICYmIGRhdGFGaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWREYXRhRmlsZXM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZSA9PT0gRWxlbWVudFR5cGUuQUdFTlQpIHtcbiAgICAgICAgICBjb25zdCBzdGF0ZUZpbGUgPSBwYXRoLmpvaW4odGhpcy5wb3J0Zm9saW9NYW5hZ2VyLmdldEVsZW1lbnREaXIoRWxlbWVudFR5cGUuQUdFTlQpLCAnLnN0YXRlJywgYCR7bmFtZX0tc3RhdGUuanNvbmApO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBmcy51bmxpbmsoc3RhdGVGaWxlKTtcbiAgICAgICAgICAgIHVwZGF0ZWREYXRhRmlsZXMucHVzaChgJHtkYXRhRmlsZXNbMF19IOKckyBkZWxldGVkYCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIC8vIExvZyBidXQgZG9uJ3QgZmFpbCBpZiBzdGF0ZSBmaWxlIGRlbGV0aW9uIGZhaWxzXG4gICAgICAgICAgICBsb2dnZXIud2FybihgRmFpbGVkIHRvIGRlbGV0ZSBhZ2VudCBzdGF0ZSBmaWxlOiAke2Vycm9yfWApO1xuICAgICAgICAgICAgdXBkYXRlZERhdGFGaWxlcy5wdXNoKGAke2RhdGFGaWxlc1swXX0g4pqg77iPIGRlbGV0aW9uIGZhaWxlZGApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBFbGVtZW50VHlwZS5NRU1PUlkpIHtcbiAgICAgICAgICBjb25zdCBzdG9yYWdlRmlsZSA9IHBhdGguam9pbih0aGlzLnBvcnRmb2xpb01hbmFnZXIuZ2V0RWxlbWVudERpcihFbGVtZW50VHlwZS5NRU1PUlkpLCAnLnN0b3JhZ2UnLCBgJHtuYW1lfS1tZW1vcnkuanNvbmApO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBmcy51bmxpbmsoc3RvcmFnZUZpbGUpO1xuICAgICAgICAgICAgdXBkYXRlZERhdGFGaWxlcy5wdXNoKGAke2RhdGFGaWxlc1swXX0g4pyTIGRlbGV0ZWRgKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgLy8gTG9nIGJ1dCBkb24ndCBmYWlsIGlmIHN0b3JhZ2UgZmlsZSBkZWxldGlvbiBmYWlsc1xuICAgICAgICAgICAgbG9nZ2VyLndhcm4oYEZhaWxlZCB0byBkZWxldGUgbWVtb3J5IHN0b3JhZ2UgZmlsZTogJHtlcnJvcn1gKTtcbiAgICAgICAgICAgIHVwZGF0ZWREYXRhRmlsZXMucHVzaChgJHtkYXRhRmlsZXNbMF19IOKaoO+4jyBkZWxldGlvbiBmYWlsZWRgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gRWxlbWVudFR5cGUuRU5TRU1CTEUpIHtcbiAgICAgICAgICBjb25zdCBjb25maWdGaWxlID0gcGF0aC5qb2luKHRoaXMucG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKEVsZW1lbnRUeXBlLkVOU0VNQkxFKSwgJy5jb25maWdzJywgYCR7bmFtZX0tY29uZmlnLmpzb25gKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgZnMudW5saW5rKGNvbmZpZ0ZpbGUpO1xuICAgICAgICAgICAgdXBkYXRlZERhdGFGaWxlcy5wdXNoKGAke2RhdGFGaWxlc1swXX0g4pyTIGRlbGV0ZWRgKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgLy8gTG9nIGJ1dCBkb24ndCBmYWlsIGlmIGNvbmZpZyBmaWxlIGRlbGV0aW9uIGZhaWxzXG4gICAgICAgICAgICBsb2dnZXIud2FybihgRmFpbGVkIHRvIGRlbGV0ZSBlbnNlbWJsZSBjb25maWcgZmlsZTogJHtlcnJvcn1gKTtcbiAgICAgICAgICAgIHVwZGF0ZWREYXRhRmlsZXMucHVzaChgJHtkYXRhRmlsZXNbMF19IOKaoO+4jyBkZWxldGlvbiBmYWlsZWRgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGRhdGFGaWxlcyA9IHVwZGF0ZWREYXRhRmlsZXM7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEJ1aWxkIHN1Y2Nlc3MgbWVzc2FnZVxuICAgICAgbGV0IG1lc3NhZ2UgPSBg4pyFIFN1Y2Nlc3NmdWxseSBkZWxldGVkICR7dHlwZX0gJyR7bmFtZX0nYDtcbiAgICAgIGlmIChkYXRhRmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAoZGVsZXRlRGF0YSkge1xuICAgICAgICAgIG1lc3NhZ2UgKz0gYFxcblxcbkFzc29jaWF0ZWQgZGF0YSBmaWxlczpcXG4ke2RhdGFGaWxlcy5qb2luKCdcXG4nKX1gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1lc3NhZ2UgKz0gYFxcblxcbuKaoO+4jyBBc3NvY2lhdGVkIGRhdGEgZmlsZXMgd2VyZSBwcmVzZXJ2ZWQ6XFxuJHtkYXRhRmlsZXMuam9pbignXFxuJyl9YDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IG1lc3NhZ2VcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgICBcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gZGVsZXRlIGVsZW1lbnQ6YCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBg4p2MIEZhaWxlZCB0byBkZWxldGUgZWxlbWVudDogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8vIGNoZWNrUmF0ZUxpbWl0IGFuZCBmZXRjaEZyb21HaXRIdWIgYXJlIG5vdyBoYW5kbGVkIGJ5IEdpdEh1YkNsaWVudFxuXG4gIGFzeW5jIGJyb3dzZUNvbGxlY3Rpb24oc2VjdGlvbj86IHN0cmluZywgdHlwZT86IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICAvLyBGSVggIzQ3MTogUmVwbGFjZSBsZWdhY3kgY2F0ZWdvcnkgdmFsaWRhdGlvbiB3aXRoIHByb3BlciBzZWN0aW9uL3R5cGUgdmFsaWRhdGlvblxuICAgICAgLy8gVmFsaWQgc2VjdGlvbnM6IGxpYnJhcnksIHNob3djYXNlLCBjYXRhbG9nXG4gICAgICAvLyBWYWxpZCB0eXBlcyBmb3IgTUNQOiBwZXJzb25hcywgc2tpbGxzLCBhZ2VudHMsIHRlbXBsYXRlcyAob3RoZXJzIGZpbHRlcmVkIHBlciBJc3N1ZSAjMTQ0KVxuICAgICAgLy8gTm90ZTogdG9vbHMsIHByb21wdHMsIGVuc2VtYmxlcywgbWVtb3JpZXMgZXhpc3QgaW4gY29sbGVjdGlvbiBidXQgYXJlIGZpbHRlcmVkIGZyb20gTUNQXG4gICAgICBjb25zdCB2YWxpZFNlY3Rpb25zID0gWydsaWJyYXJ5JywgJ3Nob3djYXNlJywgJ2NhdGFsb2cnXTtcbiAgICAgIFxuICAgICAgLy8g4pqg77iPIENSSVRJQ0FMOiBXaGVuIGFkZGluZyBuZXcgZWxlbWVudCB0eXBlcywgeW91IE1VU1QgdXBkYXRlIHRoaXMgYXJyYXkhXG4gICAgICAvLyBTZWUgZG9jcy9kZXZlbG9wbWVudC9BRERJTkdfTkVXX0VMRU1FTlRfVFlQRVNfQ0hFQ0tMSVNULm1kIGZvciBjb21wbGV0ZSBjaGVja2xpc3RcbiAgICAgIC8vIFRoaXMgYXJyYXkgaXMgb2Z0ZW4gZm9yZ290dGVuIGFuZCBjYXVzZXMgdmFsaWRhdGlvbiBmYWlsdXJlcyBmb3IgbmV3IHR5cGVzXG4gICAgICBjb25zdCB2YWxpZFR5cGVzID0gWydwZXJzb25hcycsICdza2lsbHMnLCAnYWdlbnRzJywgJ3RlbXBsYXRlcyddOyAgLy8gT25seSBNQ1Atc3VwcG9ydGVkIHR5cGVzXG4gICAgICBcbiAgICAgIC8vIFZhbGlkYXRlIHNlY3Rpb24gaWYgcHJvdmlkZWRcbiAgICAgIGNvbnN0IHZhbGlkYXRlZFNlY3Rpb24gPSBzZWN0aW9uID8gc2FuaXRpemVJbnB1dChzZWN0aW9uLnRvTG93ZXJDYXNlKCkpIDogdW5kZWZpbmVkO1xuICAgICAgaWYgKHZhbGlkYXRlZFNlY3Rpb24gJiYgIXZhbGlkU2VjdGlvbnMuaW5jbHVkZXModmFsaWRhdGVkU2VjdGlvbikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHNlY3Rpb24gJyR7dmFsaWRhdGVkU2VjdGlvbn0nLiBNdXN0IGJlIG9uZSBvZjogJHt2YWxpZFNlY3Rpb25zLmpvaW4oJywgJyl9YCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFZhbGlkYXRlIHR5cGUgaWYgcHJvdmlkZWQgKG9ubHkgdmFsaWQgd2hlbiBzZWN0aW9uIGlzICdsaWJyYXJ5JylcbiAgICAgIGNvbnN0IHZhbGlkYXRlZFR5cGUgPSB0eXBlID8gc2FuaXRpemVJbnB1dCh0eXBlLnRvTG93ZXJDYXNlKCkpIDogdW5kZWZpbmVkO1xuICAgICAgaWYgKHZhbGlkYXRlZFR5cGUgJiYgdmFsaWRhdGVkU2VjdGlvbiA9PT0gJ2xpYnJhcnknICYmICF2YWxpZFR5cGVzLmluY2x1ZGVzKHZhbGlkYXRlZFR5cGUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0eXBlICcke3ZhbGlkYXRlZFR5cGV9Jy4gTXVzdCBiZSBvbmUgb2Y6ICR7dmFsaWRUeXBlcy5qb2luKCcsICcpfWApO1xuICAgICAgfVxuICAgICAgaWYgKHZhbGlkYXRlZFR5cGUgJiYgdmFsaWRhdGVkU2VjdGlvbiAhPT0gJ2xpYnJhcnknKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVHlwZSBwYXJhbWV0ZXIgaXMgb25seSB2YWxpZCB3aGVuIHNlY3Rpb24gaXMgXCJsaWJyYXJ5XCInKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jb2xsZWN0aW9uQnJvd3Nlci5icm93c2VDb2xsZWN0aW9uKHZhbGlkYXRlZFNlY3Rpb24sIHZhbGlkYXRlZFR5cGUpO1xuICAgICAgXG4gICAgICAvLyBIYW5kbGUgc2VjdGlvbnMgdmlld1xuICAgICAgY29uc3QgaXRlbXMgPSByZXN1bHQuaXRlbXM7XG4gICAgICBjb25zdCBjYXRlZ29yaWVzID0gcmVzdWx0LnNlY3Rpb25zIHx8IHJlc3VsdC5jYXRlZ29yaWVzO1xuICAgICAgXG4gICAgICBjb25zdCB0ZXh0ID0gdGhpcy5jb2xsZWN0aW9uQnJvd3Nlci5mb3JtYXRCcm93c2VSZXN1bHRzKFxuICAgICAgICBpdGVtcywgXG4gICAgICAgIGNhdGVnb3JpZXMsIFxuICAgICAgICB2YWxpZGF0ZWRTZWN0aW9uLCBcbiAgICAgICAgdmFsaWRhdGVkVHlwZSwgXG4gICAgICAgIHRoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpXG4gICAgICApO1xuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiB0ZXh0LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBzYW5pdGl6ZWQgPSBTZWN1cmVFcnJvckhhbmRsZXIuc2FuaXRpemVFcnJvcihlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgQ29sbGVjdGlvbiBicm93c2luZyBmYWlsZWQ6ICR7c2FuaXRpemVkLm1lc3NhZ2V9YCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzZWFyY2hDb2xsZWN0aW9uKHF1ZXJ5OiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgLy8gRW5oYW5jZWQgaW5wdXQgdmFsaWRhdGlvbiBmb3Igc2VhcmNoIHF1ZXJ5XG4gICAgICBjb25zdCB2YWxpZGF0ZWRRdWVyeSA9IE1DUElucHV0VmFsaWRhdG9yLnZhbGlkYXRlU2VhcmNoUXVlcnkocXVlcnkpO1xuICAgICAgXG4gICAgICBjb25zdCBpdGVtcyA9IGF3YWl0IHRoaXMuY29sbGVjdGlvblNlYXJjaC5zZWFyY2hDb2xsZWN0aW9uKHZhbGlkYXRlZFF1ZXJ5KTtcbiAgICAgIGNvbnN0IHRleHQgPSB0aGlzLmNvbGxlY3Rpb25TZWFyY2guZm9ybWF0U2VhcmNoUmVzdWx0cyhpdGVtcywgdmFsaWRhdGVkUXVlcnksIHRoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpKTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogdGV4dCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3Qgc2FuaXRpemVkID0gU2VjdXJlRXJyb3JIYW5kbGVyLnNhbml0aXplRXJyb3IoZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIEVycm9yIHNlYXJjaGluZyBjb2xsZWN0aW9uOiAke3Nhbml0aXplZC5tZXNzYWdlfWAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2VhcmNoQ29sbGVjdGlvbkVuaGFuY2VkKHF1ZXJ5OiBzdHJpbmcsIG9wdGlvbnM6IGFueSA9IHt9KSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEVuaGFuY2VkIGlucHV0IHZhbGlkYXRpb24gZm9yIHNlYXJjaCBxdWVyeVxuICAgICAgY29uc3QgdmFsaWRhdGVkUXVlcnkgPSBNQ1BJbnB1dFZhbGlkYXRvci52YWxpZGF0ZVNlYXJjaFF1ZXJ5KHF1ZXJ5KTtcbiAgICAgIFxuICAgICAgLy8gVmFsaWRhdGUgYW5kIHNhbml0aXplIG9wdGlvbnNcbiAgICAgIGNvbnN0IHZhbGlkYXRlZE9wdGlvbnMgPSB7XG4gICAgICAgIGVsZW1lbnRUeXBlOiBvcHRpb25zLmVsZW1lbnRUeXBlID8gU3RyaW5nKG9wdGlvbnMuZWxlbWVudFR5cGUpIDogdW5kZWZpbmVkLFxuICAgICAgICBjYXRlZ29yeTogb3B0aW9ucy5jYXRlZ29yeSA/IFN0cmluZyhvcHRpb25zLmNhdGVnb3J5KSA6IHVuZGVmaW5lZCxcbiAgICAgICAgcGFnZTogb3B0aW9ucy5wYWdlID8gTWF0aC5tYXgoMSwgcGFyc2VJbnQob3B0aW9ucy5wYWdlKSB8fCAxKSA6IDEsXG4gICAgICAgIHBhZ2VTaXplOiBvcHRpb25zLnBhZ2VTaXplID8gTWF0aC5taW4oMTAwLCBNYXRoLm1heCgxLCBwYXJzZUludChvcHRpb25zLnBhZ2VTaXplKSB8fCAyNSkpIDogMjUsXG4gICAgICAgIHNvcnRCeTogb3B0aW9ucy5zb3J0QnkgJiYgWydyZWxldmFuY2UnLCAnbmFtZScsICdkYXRlJ10uaW5jbHVkZXMob3B0aW9ucy5zb3J0QnkpID8gb3B0aW9ucy5zb3J0QnkgOiAncmVsZXZhbmNlJ1xuICAgICAgfTtcbiAgICAgIFxuICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHRoaXMuY29sbGVjdGlvblNlYXJjaC5zZWFyY2hDb2xsZWN0aW9uV2l0aE9wdGlvbnModmFsaWRhdGVkUXVlcnksIHZhbGlkYXRlZE9wdGlvbnMpO1xuICAgICAgY29uc3QgdGV4dCA9IHRoaXMuY29sbGVjdGlvblNlYXJjaC5mb3JtYXRTZWFyY2hSZXN1bHRzV2l0aFBhZ2luYXRpb24ocmVzdWx0cywgdGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCkpO1xuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiB0ZXh0LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBzYW5pdGl6ZWQgPSBTZWN1cmVFcnJvckhhbmRsZXIuc2FuaXRpemVFcnJvcihlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgRXJyb3Igc2VhcmNoaW5nIGNvbGxlY3Rpb246ICR7c2FuaXRpemVkLm1lc3NhZ2V9YCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRDb2xsZWN0aW9uQ29udGVudChwYXRoOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBtZXRhZGF0YSwgY29udGVudCB9ID0gYXdhaXQgdGhpcy5wZXJzb25hRGV0YWlscy5nZXRDb2xsZWN0aW9uQ29udGVudChwYXRoKTtcbiAgICAgIGNvbnN0IHRleHQgPSB0aGlzLnBlcnNvbmFEZXRhaWxzLmZvcm1hdFBlcnNvbmFEZXRhaWxzKG1ldGFkYXRhLCBjb250ZW50LCBwYXRoLCB0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKSk7XG4gICAgICBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IHRleHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IHNhbml0aXplZCA9IFNlY3VyZUVycm9ySGFuZGxlci5zYW5pdGl6ZUVycm9yKGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBFcnJvciBmZXRjaGluZyBjb250ZW50OiAke3Nhbml0aXplZC5tZXNzYWdlfWAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaW5zdGFsbENvbnRlbnQoaW5wdXRQYXRoOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5lbGVtZW50SW5zdGFsbGVyLmluc3RhbGxDb250ZW50KGlucHV0UGF0aCk7XG4gICAgICBcbiAgICAgIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg4pqg77iPICR7cmVzdWx0Lm1lc3NhZ2V9YCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gSWYgaXQncyBhIHBlcnNvbmEsIHJlbG9hZCBwZXJzb25hc1xuICAgICAgaWYgKHJlc3VsdC5lbGVtZW50VHlwZSA9PT0gRWxlbWVudFR5cGUuUEVSU09OQSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRQZXJzb25hcygpO1xuICAgICAgfVxuICAgICAgXG4gICAgICBjb25zdCB0ZXh0ID0gdGhpcy5lbGVtZW50SW5zdGFsbGVyLmZvcm1hdEluc3RhbGxTdWNjZXNzKFxuICAgICAgICByZXN1bHQubWV0YWRhdGEhLCBcbiAgICAgICAgcmVzdWx0LmZpbGVuYW1lISxcbiAgICAgICAgcmVzdWx0LmVsZW1lbnRUeXBlIVxuICAgICAgKTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogdGV4dCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3Qgc2FuaXRpemVkID0gU2VjdXJlRXJyb3JIYW5kbGVyLnNhbml0aXplRXJyb3IoZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIEVycm9yIGluc3RhbGxpbmcgQUkgY3VzdG9taXphdGlvbiBlbGVtZW50OiAke3Nhbml0aXplZC5tZXNzYWdlfWAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3VibWl0Q29udGVudChjb250ZW50SWRlbnRpZmllcjogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFVzZSB0aGUgbmV3IHBvcnRmb2xpby1iYXNlZCBzdWJtaXNzaW9uIHRvb2xcbiAgICAgIGNvbnN0IHsgU3VibWl0VG9Qb3J0Zm9saW9Ub29sIH0gPSBhd2FpdCBpbXBvcnQoJy4vdG9vbHMvcG9ydGZvbGlvL3N1Ym1pdFRvUG9ydGZvbGlvVG9vbC5qcycpO1xuICAgICAgY29uc3QgeyBGaWxlRGlzY292ZXJ5VXRpbCB9ID0gYXdhaXQgaW1wb3J0KCcuL3V0aWxzL0ZpbGVEaXNjb3ZlcnlVdGlsLmpzJyk7XG4gICAgICBjb25zdCBzdWJtaXRUb29sID0gbmV3IFN1Ym1pdFRvUG9ydGZvbGlvVG9vbCh0aGlzLmFwaUNhY2hlKTtcbiAgICBcbiAgICAvLyBUcnkgdG8gZmluZCB0aGUgY29udGVudCBhY3Jvc3MgYWxsIGVsZW1lbnQgdHlwZXNcbiAgICBjb25zdCBwb3J0Zm9saW9NYW5hZ2VyID0gUG9ydGZvbGlvTWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuICAgIGxldCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGUgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGZvdW5kUGF0aDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgXG4gICAgLy8gUEVSRk9STUFOQ0UgT1BUSU1JWkFUSU9OOiBTZWFyY2ggYWxsIGVsZW1lbnQgZGlyZWN0b3JpZXMgaW4gcGFyYWxsZWxcbiAgICAvLyBOT1RFOiBUaGlzIGR5bmFtaWNhbGx5IGhhbmRsZXMgQUxMIGVsZW1lbnQgdHlwZXMgZnJvbSB0aGUgRWxlbWVudFR5cGUgZW51bVxuICAgIC8vIE5vIGhhcmRjb2RlZCBjb3VudCAtIGlmIHlvdSBhZGQgMTAgbW9yZSBlbGVtZW50IHR5cGVzIHRvbW9ycm93LCB0aGlzIGNvZGVcbiAgICAvLyB3aWxsIGF1dG9tYXRpY2FsbHkgc2VhcmNoIGFsbCAxNiB0eXBlcyB3aXRob3V0IGFueSBjaGFuZ2VzIG5lZWRlZCBoZXJlXG4gICAgY29uc3Qgc2VhcmNoUHJvbWlzZXMgPSBPYmplY3QudmFsdWVzKEVsZW1lbnRUeXBlKS5tYXAoYXN5bmMgKHR5cGUpID0+IHtcbiAgICAgIGNvbnN0IGRpciA9IHBvcnRmb2xpb01hbmFnZXIuZ2V0RWxlbWVudERpcih0eXBlKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBGaWxlRGlzY292ZXJ5VXRpbC5maW5kRmlsZShkaXIsIGNvbnRlbnRJZGVudGlmaWVyLCB7XG4gICAgICAgICAgZXh0ZW5zaW9uczogWycubWQnLCAnLmpzb24nLCAnLnlhbWwnLCAnLnltbCddLFxuICAgICAgICAgIHBhcnRpYWxNYXRjaDogdHJ1ZSxcbiAgICAgICAgICBjYWNoZVJlc3VsdHM6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gZmlsZSA/IHsgdHlwZTogdHlwZSBhcyBFbGVtZW50VHlwZSwgZmlsZSB9IDogbnVsbDtcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgLy8gSU1QUk9WRUQgRVJST1IgSEFORExJTkc6IExvZyB3YXJuaW5ncyBmb3IgdW5leHBlY3RlZCBlcnJvcnNcbiAgICAgICAgaWYgKGVycm9yPy5jb2RlICE9PSAnRU5PRU5UJyAmJiBlcnJvcj8uY29kZSAhPT0gJ0VOT1RESVInKSB7XG4gICAgICAgICAgLy8gTm90IGp1c3QgYSBtaXNzaW5nIGRpcmVjdG9yeSAtIHRoaXMgY291bGQgYmUgYSBwZXJtaXNzaW9uIGlzc3VlIG9yIG90aGVyIHByb2JsZW1cbiAgICAgICAgICBsb2dnZXIud2FybihgVW5leHBlY3RlZCBlcnJvciBzZWFyY2hpbmcgJHt0eXBlfSBkaXJlY3RvcnlgLCB7IFxuICAgICAgICAgICAgY29udGVudElkZW50aWZpZXIsXG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yPy5tZXNzYWdlIHx8IFN0cmluZyhlcnJvciksXG4gICAgICAgICAgICBjb2RlOiBlcnJvcj8uY29kZSBcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBEaXJlY3RvcnkgZG9lc24ndCBleGlzdCAtIHRoaXMgaXMgZXhwZWN0ZWQgZm9yIHVudXNlZCBlbGVtZW50IHR5cGVzXG4gICAgICAgICAgbG9nZ2VyLmRlYnVnKGAke3R5cGV9IGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCwgc2tpcHBpbmdgLCB7IHR5cGUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgLy8gV2FpdCBmb3IgYWxsIHNlYXJjaGVzIHRvIGNvbXBsZXRlIGFuZCBmaW5kIHRoZSBmaXJzdCBtYXRjaFxuICAgIGNvbnN0IHNlYXJjaFJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoc2VhcmNoUHJvbWlzZXMpO1xuICAgIFxuICAgIC8vIE5PVEU6IEZpbGUgdmFsaWRhdGlvbiAtIHdlIHJlbHkgb24gdGhlIHBvcnRmb2xpbyBkaXJlY3Rvcnkgc3RydWN0dXJlIHRvIGVuc3VyZVxuICAgIC8vIGZpbGVzIGFyZSBpbiB0aGUgY29ycmVjdCBlbGVtZW50IHR5cGUgZGlyZWN0b3J5LiBBZGRpdGlvbmFsIHNjaGVtYSB2YWxpZGF0aW9uXG4gICAgLy8gY291bGQgYmUgYWRkZWQgaGVyZSBpZiBuZWVkZWQsIGJ1dCB0aGUgY3VycmVudCBhcHByb2FjaCBpcyBzdWZmaWNpZW50IGFzOlxuICAgIC8vIDEuIEZpbGVEaXNjb3ZlcnlVdGlsIGFscmVhZHkgdmFsaWRhdGVzIGZpbGUgZXh0ZW5zaW9uc1xuICAgIC8vIDIuIFBvcnRmb2xpbyBzdHJ1Y3R1cmUgZW5mb3JjZXMgcHJvcGVyIG9yZ2FuaXphdGlvblxuICAgIC8vIDMuIHN1Ym1pdFRvUG9ydGZvbGlvVG9vbCBwZXJmb3JtcyBhZGRpdGlvbmFsIHZhbGlkYXRpb24gZG93bnN0cmVhbVxuICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHNlYXJjaFJlc3VsdHMpIHtcbiAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSAnZnVsZmlsbGVkJyAmJiByZXN1bHQudmFsdWUpIHtcbiAgICAgICAgZm91bmRQYXRoID0gcmVzdWx0LnZhbHVlLmZpbGU7XG4gICAgICAgIGVsZW1lbnRUeXBlID0gcmVzdWx0LnZhbHVlLnR5cGU7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgRm91bmQgY29udGVudCBpbiAke2VsZW1lbnRUeXBlfSBkaXJlY3RvcnlgLCB7IFxuICAgICAgICAgIGNvbnRlbnRJZGVudGlmaWVyLCBcbiAgICAgICAgICB0eXBlOiBlbGVtZW50VHlwZSwgXG4gICAgICAgICAgZmlsZTogZm91bmRQYXRoIFxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIENSSVRJQ0FMIEZJWDogTmV2ZXIgZGVmYXVsdCB0byBhbnkgZWxlbWVudCB0eXBlIHdoZW4gY29udGVudCBpcyBub3QgZm91bmRcbiAgICAvLyBUaGlzIHByZXZlbnRzIGluY29ycmVjdCBzdWJtaXNzaW9ucyBhbmQgZm9yY2VzIHByb3BlciB0eXBlIGRldGVjdGlvbiBvciB1c2VyIHNwZWNpZmljYXRpb25cbiAgICBpZiAoIWVsZW1lbnRUeXBlKSB7XG4gICAgICAvLyBDb250ZW50IG5vdCBmb3VuZCBpbiBhbnkgZWxlbWVudCBkaXJlY3RvcnkgLSBwcm92aWRlIGhlbHBmdWwgZXJyb3Igd2l0aCBzdWdnZXN0aW9uc1xuICAgICAgY29uc3QgYXZhaWxhYmxlVHlwZXMgPSBPYmplY3QudmFsdWVzKEVsZW1lbnRUeXBlKS5qb2luKCcsICcpO1xuICAgICAgbG9nZ2VyLndhcm4oYENvbnRlbnQgXCIke2NvbnRlbnRJZGVudGlmaWVyfVwiIG5vdCBmb3VuZCBpbiBhbnkgcG9ydGZvbGlvIGRpcmVjdG9yeWAsIHsgXG4gICAgICAgIGNvbnRlbnRJZGVudGlmaWVyLFxuICAgICAgICBzZWFyY2hlZFR5cGVzOiBPYmplY3QudmFsdWVzKEVsZW1lbnRUeXBlKSBcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICAvLyBVWCBJTVBST1ZFTUVOVDogRW5oYW5jZWQgZXJyb3IgbWVzc2FnZSB3aXRoIHNtYXJ0IHN1Z2dlc3Rpb25zXG4gICAgICBsZXQgZXJyb3JNZXNzYWdlID0gYOKdjCBDb250ZW50IFwiJHtjb250ZW50SWRlbnRpZmllcn1cIiBub3QgZm91bmQgaW4gcG9ydGZvbGlvLlxcblxcbmA7XG4gICAgICBlcnJvck1lc3NhZ2UgKz0gYPCflI0gKipTZWFyY2hlZCBhY3Jvc3MgYWxsIGVsZW1lbnQgdHlwZXMqKjogJHthdmFpbGFibGVUeXBlc31cXG5cXG5gO1xuICAgICAgXG4gICAgICAvLyBUcnkgdG8gcHJvdmlkZSBzbWFydCBzdWdnZXN0aW9ucyBiYXNlZCBvbiBwYXJ0aWFsIG1hdGNoZXNcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgRmlsZURpc2NvdmVyeVV0aWwgfSA9IGF3YWl0IGltcG9ydCgnLi91dGlscy9GaWxlRGlzY292ZXJ5VXRpbC5qcycpO1xuICAgICAgICBjb25zdCBzdWdnZXN0aW9uczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgXG4gICAgICAgIC8vIFNlYXJjaCBmb3Igc2ltaWxhciBuYW1lcyBhY3Jvc3MgYWxsIGVsZW1lbnQgdHlwZXNcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50VHlwZSBvZiBPYmplY3QudmFsdWVzKEVsZW1lbnRUeXBlKSkge1xuICAgICAgICAgIGNvbnN0IGRpciA9IHBvcnRmb2xpb01hbmFnZXIuZ2V0RWxlbWVudERpcihlbGVtZW50VHlwZSk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRpYWxNYXRjaGVzID0gYXdhaXQgRmlsZURpc2NvdmVyeVV0aWwuZmluZEZpbGUoZGlyLCBjb250ZW50SWRlbnRpZmllciwge1xuICAgICAgICAgICAgICBleHRlbnNpb25zOiBbJy5tZCcsICcuanNvbicsICcueWFtbCcsICcueW1sJ10sXG4gICAgICAgICAgICAgIHBhcnRpYWxNYXRjaDogdHJ1ZSxcbiAgICAgICAgICAgICAgY2FjaGVSZXN1bHRzOiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBhcnRpYWxNYXRjaGVzKSAmJiBwYXJ0aWFsTWF0Y2hlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgbWF0Y2ggb2YgcGFydGlhbE1hdGNoZXMuc2xpY2UoMCwgMikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBiYXNlbmFtZSA9IHBhdGguYmFzZW5hbWUobWF0Y2gsIHBhdGguZXh0bmFtZShtYXRjaCkpO1xuICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb25zLnB1c2goYFwiJHtiYXNlbmFtZX1cIiAoJHtlbGVtZW50VHlwZX0pYCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFydGlhbE1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgY29uc3QgYmFzZW5hbWUgPSBwYXRoLmJhc2VuYW1lKHBhcnRpYWxNYXRjaGVzLCBwYXRoLmV4dG5hbWUocGFydGlhbE1hdGNoZXMpKTtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbnMucHVzaChgXCIke2Jhc2VuYW1lfVwiICgke2VsZW1lbnRUeXBlfSlgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgLy8gU2tpcCB0aGlzIHR5cGUgaWYgdGhlcmUncyBhbiBlcnJvclxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZiAoc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGVycm9yTWVzc2FnZSArPSBg8J+SoSAqKkRpZCB5b3UgbWVhbiBvbmUgb2YgdGhlc2U/KipcXG5gO1xuICAgICAgICAgIGZvciAoY29uc3Qgc3VnZ2VzdGlvbiBvZiBzdWdnZXN0aW9ucy5zbGljZSgwLCA1KSkge1xuICAgICAgICAgICAgZXJyb3JNZXNzYWdlICs9IGAgIOKAoiAke3N1Z2dlc3Rpb259XFxuYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgZXJyb3JNZXNzYWdlICs9IGBcXG5gO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChzdWdnZXN0aW9uRXJyb3IpIHtcbiAgICAgICAgLy8gSWYgc3VnZ2VzdGlvbnMgZmFpbCwgY29udGludWUgd2l0aG91dCB0aGVtXG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnRmFpbGVkIHRvIGdlbmVyYXRlIHN1Z2dlc3Rpb25zJywgeyBzdWdnZXN0aW9uRXJyb3IgfSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGVycm9yTWVzc2FnZSArPSBg8J+boO+4jyAqKlN0ZXAtYnktc3RlcCB0cm91Ymxlc2hvb3RpbmcqKjpcXG5gO1xuICAgICAgZXJyb3JNZXNzYWdlICs9IGAxLiDwn5OdICoqTGlzdCBhbGwgY29udGVudCoqOiBVc2UgXFxgbGlzdF9wb3J0Zm9saW9cXGAgdG8gc2VlIHdoYXQncyBhdmFpbGFibGVcXG5gO1xuICAgICAgZXJyb3JNZXNzYWdlICs9IGAyLiDwn5SNICoqQ2hlY2sgc3BlbGxpbmcqKjogVmVyaWZ5IHRoZSBleGFjdCBuYW1lIGFuZCB0cnkgdmFyaWF0aW9uc1xcbmA7XG4gICAgICBlcnJvck1lc3NhZ2UgKz0gYDMuIPCfjq8gKipTcGVjaWZ5IHR5cGUqKjogVHJ5IFxcYHN1Ym1pdF9jb250ZW50IFwiJHtjb250ZW50SWRlbnRpZmllcn1cIiAtLXR5cGU9cGVyc29uYXNcXGBcXG5gO1xuICAgICAgZXJyb3JNZXNzYWdlICs9IGA0LiDwn5OBICoqQnJvd3NlIGZpbGVzKio6IENoZWNrIHlvdXIgcG9ydGZvbGlvIGRpcmVjdG9yeSBtYW51YWxseVxcblxcbmA7XG4gICAgICBlcnJvck1lc3NhZ2UgKz0gYPCfk50gKipUaXAqKjogVGhlIHN5c3RlbSBzZWFyY2hlcyBib3RoIGZpbGVuYW1lcyBhbmQgZGlzcGxheSBuYW1lcyB3aXRoIGZ1enp5IG1hdGNoaW5nLmA7XG4gICAgICBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGVycm9yTWVzc2FnZSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2hlY2sgZm9yIGR1cGxpY2F0ZXMgYWNyb3NzIGFsbCBzb3VyY2VzIGJlZm9yZSBzdWJtaXNzaW9uXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgVW5pZmllZEluZGV4TWFuYWdlciB9ID0gYXdhaXQgaW1wb3J0KCcuL3BvcnRmb2xpby9VbmlmaWVkSW5kZXhNYW5hZ2VyLmpzJyk7XG4gICAgICBjb25zdCB1bmlmaWVkTWFuYWdlciA9IFVuaWZpZWRJbmRleE1hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICAgIFxuICAgICAgLy8gRXh0cmFjdCB0aGUgYWN0dWFsIGVsZW1lbnQgbmFtZSBmcm9tIHRoZSBjb250ZW50IHBhdGhcbiAgICAgIGNvbnN0IGJhc2VuYW1lID0gcGF0aC5iYXNlbmFtZShmb3VuZFBhdGghLCBwYXRoLmV4dG5hbWUoZm91bmRQYXRoISkpO1xuICAgICAgY29uc3QgZHVwbGljYXRlcyA9IGF3YWl0IHVuaWZpZWRNYW5hZ2VyLmNoZWNrRHVwbGljYXRlcyhiYXNlbmFtZSk7XG4gICAgICBcbiAgICAgIGlmIChkdXBsaWNhdGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgZHVwbGljYXRlID0gZHVwbGljYXRlc1swXTtcbiAgICAgICAgbGV0IHdhcm5pbmdUZXh0ID0gYOKaoO+4jyAqKkR1cGxpY2F0ZSBEZXRlY3Rpb24gQWxlcnQqKlxcblxcbmA7XG4gICAgICAgIHdhcm5pbmdUZXh0ICs9IGBGb3VuZCBcIiR7ZHVwbGljYXRlLm5hbWV9XCIgaW4gbXVsdGlwbGUgc291cmNlczpcXG5cXG5gO1xuICAgICAgICBcbiAgICAgICAgZm9yIChjb25zdCBzb3VyY2Ugb2YgZHVwbGljYXRlLnNvdXJjZXMpIHtcbiAgICAgICAgICBjb25zdCBzb3VyY2VJY29uID0gdGhpcy5nZXRTb3VyY2VJY29uKHNvdXJjZS5zb3VyY2UpO1xuICAgICAgICAgIHdhcm5pbmdUZXh0ICs9IGAke3NvdXJjZUljb259ICoqJHtzb3VyY2Uuc291cmNlfSoqOiAke3NvdXJjZS52ZXJzaW9uIHx8ICd1bmtub3duIHZlcnNpb24nfSAoJHtzb3VyY2UubGFzdE1vZGlmaWVkLnRvTG9jYWxlRGF0ZVN0cmluZygpfSlcXG5gO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICB3YXJuaW5nVGV4dCArPSBgXFxuYDtcbiAgICAgICAgXG4gICAgICAgIGlmIChkdXBsaWNhdGUuaGFzVmVyc2lvbkNvbmZsaWN0ICYmIGR1cGxpY2F0ZS52ZXJzaW9uQ29uZmxpY3QpIHtcbiAgICAgICAgICB3YXJuaW5nVGV4dCArPSBg8J+UhCAqKlZlcnNpb24gQ29uZmxpY3QgRGV0ZWN0ZWQqKlxcbmA7XG4gICAgICAgICAgd2FybmluZ1RleHQgKz0gYFJlY29tbWVuZGVkIHNvdXJjZTogKioke2R1cGxpY2F0ZS52ZXJzaW9uQ29uZmxpY3QucmVjb21tZW5kZWR9KipcXG5gO1xuICAgICAgICAgIHdhcm5pbmdUZXh0ICs9IGBSZWFzb246ICR7ZHVwbGljYXRlLnZlcnNpb25Db25mbGljdC5yZWFzb259XFxuXFxuYDtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgd2FybmluZ1RleHQgKz0gYCoqUmVjb21tZW5kYXRpb25zOioqXFxuYDtcbiAgICAgICAgd2FybmluZ1RleHQgKz0gYOKAoiBSZXZpZXcgZXhpc3RpbmcgdmVyc2lvbnMgYmVmb3JlIHN1Ym1pdHRpbmdcXG5gO1xuICAgICAgICB3YXJuaW5nVGV4dCArPSBg4oCiIENvbnNpZGVyIHVwZGF0aW5nIGxvY2FsIHZlcnNpb24gaW5zdGVhZCBvZiBjcmVhdGluZyBkdXBsaWNhdGVcXG5gO1xuICAgICAgICB3YXJuaW5nVGV4dCArPSBg4oCiIEVuc3VyZSB5b3VyIHZlcnNpb24gYWRkcyBtZWFuaW5nZnVsIGltcHJvdmVtZW50c1xcbmA7XG4gICAgICAgIHdhcm5pbmdUZXh0ICs9IGDigKIgVXBkYXRlIHZlcnNpb24gbnVtYmVyIGluIG1ldGFkYXRhIGlmIHN1Ym1pdHRpbmcgZW5oYW5jZW1lbnRcXG5cXG5gO1xuICAgICAgICB3YXJuaW5nVGV4dCArPSBgKipQcm9jZWVkaW5nIHdpdGggc3VibWlzc2lvbiBhbnl3YXkuLi4qKlxcblxcbmA7XG4gICAgICAgIFxuICAgICAgICAvLyBMb2cgdGhlIGR1cGxpY2F0ZSBkZXRlY3Rpb24gZm9yIG1vbml0b3JpbmdcbiAgICAgICAgbG9nZ2VyLndhcm4oJ0R1cGxpY2F0ZSBjb250ZW50IGRldGVjdGVkIGR1cmluZyBzdWJtaXNzaW9uJywge1xuICAgICAgICAgIGNvbnRlbnRJZGVudGlmaWVyLFxuICAgICAgICAgIGVsZW1lbnRUeXBlLFxuICAgICAgICAgIGR1cGxpY2F0ZUluZm86IGR1cGxpY2F0ZVxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIC8vIENvbnRpbnVlIHdpdGggc3VibWlzc2lvbiBidXQgc2hvdyB3YXJuaW5nXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN1Ym1pdFRvb2wuZXhlY3V0ZSh7XG4gICAgICAgICAgbmFtZTogY29udGVudElkZW50aWZpZXIsXG4gICAgICAgICAgdHlwZTogZWxlbWVudFR5cGVcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICAvLyBDb21iaW5lIHdhcm5pbmcgd2l0aCBzdWJtaXNzaW9uIHJlc3VsdFxuICAgICAgICBjb25zdCByZXNwb25zZVRleHQgPSBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX0ke3Jlc3VsdC5zdWNjZXNzID8gJ+KaoO+4jycgOiAn4p2MJ30gJHt3YXJuaW5nVGV4dH0ke3Jlc3VsdC5tZXNzYWdlfWA7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IHJlc3BvbnNlVGV4dCxcbiAgICAgICAgICB9XSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChkdXBsaWNhdGVFcnJvcikge1xuICAgICAgLy8gSWYgZHVwbGljYXRlIGNoZWNraW5nIGZhaWxzLCBsb2cgYnV0IGNvbnRpbnVlIHdpdGggc3VibWlzc2lvblxuICAgICAgbG9nZ2VyLndhcm4oJ0R1cGxpY2F0ZSBjaGVja2luZyBmYWlsZWQgZHVyaW5nIHN1Ym1pc3Npb24nLCB7XG4gICAgICAgIGNvbnRlbnRJZGVudGlmaWVyLFxuICAgICAgICBlcnJvcjogZHVwbGljYXRlRXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGR1cGxpY2F0ZUVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZHVwbGljYXRlRXJyb3IpXG4gICAgICB9KTtcbiAgICB9XG4gICAgXG4gICAgLy8gRXhlY3V0ZSB0aGUgc3VibWlzc2lvbiB3aXRoIHRoZSBkZXRlY3RlZCBlbGVtZW50IHR5cGVcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdWJtaXRUb29sLmV4ZWN1dGUoe1xuICAgICAgbmFtZTogY29udGVudElkZW50aWZpZXIsXG4gICAgICB0eXBlOiBlbGVtZW50VHlwZVxuICAgIH0pO1xuICAgIFxuICAgIC8vIEZvcm1hdCB0aGUgcmVzcG9uc2UgLSB0aGUgbWVzc2FnZSBhbHJlYWR5IGNvbnRhaW5zIGFsbCBkZXRhaWxzXG4gICAgbGV0IHJlc3BvbnNlVGV4dCA9IHJlc3VsdC5tZXNzYWdlO1xuICAgIFxuICAgIC8vIEFkZCBwZXJzb25hIGluZGljYXRvciBmb3IgY29uc2lzdGVuY3lcbiAgICByZXNwb25zZVRleHQgPSBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX0ke3Jlc3VsdC5zdWNjZXNzID8gJ+KchScgOiAn4p2MJ30gJHtyZXNwb25zZVRleHR9YDtcbiAgICBcbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudDogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogcmVzcG9uc2VUZXh0LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICAgIFxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIC8vIFVYIElNUFJPVkVNRU5UOiBDb21wcmVoZW5zaXZlIGVycm9yIGhhbmRsaW5nIHdpdGggZmFsbGJhY2sgc3VnZ2VzdGlvbnNcbiAgICAgIGxvZ2dlci5lcnJvcignVW5leHBlY3RlZCBlcnJvciBpbiBzdWJtaXRDb250ZW50Jywge1xuICAgICAgICBjb250ZW50SWRlbnRpZmllcixcbiAgICAgICAgZXJyb3I6IGVycm9yLm1lc3NhZ2UsXG4gICAgICAgIHN0YWNrOiBlcnJvci5zdGFja1xuICAgICAgfSk7XG4gICAgICBcbiAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgKipTdWJtaXNzaW9uIEZhaWxlZCoqXFxuXFxuYDtcbiAgICAgIGVycm9yTWVzc2FnZSArPSBg8J+aqCAqKkVycm9yKio6ICR7ZXJyb3IubWVzc2FnZSB8fCAnVW5rbm93biBlcnJvciBvY2N1cnJlZCd9XFxuXFxuYDtcbiAgICAgIFxuICAgICAgLy8gUHJvdmlkZSBjb250ZXh0dWFsIHRyb3VibGVzaG9vdGluZyBiYXNlZCBvbiBlcnJvciB0eXBlXG4gICAgICBpZiAoZXJyb3IubWVzc2FnZT8uaW5jbHVkZXMoJ2F1dGgnKSB8fCBlcnJvci5tZXNzYWdlPy5pbmNsdWRlcygndG9rZW4nKSkge1xuICAgICAgICBlcnJvck1lc3NhZ2UgKz0gYPCflJAgKipBdXRoZW50aWNhdGlvbiBJc3N1ZSoqOlxcbmA7XG4gICAgICAgIGVycm9yTWVzc2FnZSArPSBg4oCiIFJ1bjogXFxgc2V0dXBfZ2l0aHViX2F1dGhcXGAgdG8gcmUtYXV0aGVudGljYXRlXFxuYDtcbiAgICAgICAgZXJyb3JNZXNzYWdlICs9IGDigKIgQ2hlY2s6IFxcYGdoIGF1dGggc3RhdHVzXFxgIGlmIHlvdSBoYXZlIEdpdEh1YiBDTElcXG5cXG5gO1xuICAgICAgfVxuICAgICAgXG4gICAgICBpZiAoZXJyb3IubWVzc2FnZT8uaW5jbHVkZXMoJ25ldHdvcmsnKSB8fCBlcnJvci5tZXNzYWdlPy5pbmNsdWRlcygnY29ubmVjdGlvbicpKSB7XG4gICAgICAgIGVycm9yTWVzc2FnZSArPSBg8J+MkCAqKk5ldHdvcmsgSXNzdWUqKjpcXG5gO1xuICAgICAgICBlcnJvck1lc3NhZ2UgKz0gYOKAoiBDaGVjayB5b3VyIGludGVybmV0IGNvbm5lY3Rpb25cXG5gO1xuICAgICAgICBlcnJvck1lc3NhZ2UgKz0gYOKAoiBUcnkgYWdhaW4gaW4gYSBmZXcgbWludXRlc1xcbmA7XG4gICAgICAgIGVycm9yTWVzc2FnZSArPSBg4oCiIENoZWNrIEdpdEh1YiBzdGF0dXM6IGh0dHBzOi8vc3RhdHVzLmdpdGh1Yi5jb21cXG5cXG5gO1xuICAgICAgfVxuICAgICAgXG4gICAgICBlcnJvck1lc3NhZ2UgKz0gYPCfmpEgKipFbWVyZ2VuY3kgQWx0ZXJuYXRpdmVzKio6XFxuYDtcbiAgICAgIGVycm9yTWVzc2FnZSArPSBgMS4g8J+UhCAqKlJldHJ5Kio6IFRyeSB0aGUgc2FtZSBjb21tYW5kIGFnYWluXFxuYDtcbiAgICAgIGVycm9yTWVzc2FnZSArPSBgMi4g8J+TnSAqKkNoZWNrIGNvbnRlbnQqKjogVXNlIFxcYGxpc3RfcG9ydGZvbGlvXFxgIHRvIHZlcmlmeSB0aGUgZWxlbWVudCBleGlzdHNcXG5gO1xuICAgICAgZXJyb3JNZXNzYWdlICs9IGAzLiDwn46vICoqU3BlY2lmeSB0eXBlKio6IEFkZCBcXGAtLXR5cGU9cGVyc29uYXNcXGAgaWYgeW91IGtub3cgdGhlIGVsZW1lbnQgdHlwZVxcbmA7XG4gICAgICBlcnJvck1lc3NhZ2UgKz0gYDQuIPCfmpEgKipNYW51YWwgdXBsb2FkKio6IENvcHkgY29udGVudCBkaXJlY3RseSB0byBHaXRIdWIgdmlhIHdlYiBpbnRlcmZhY2VcXG5cXG5gO1xuICAgICAgZXJyb3JNZXNzYWdlICs9IGDwn5OeICoqTmVlZCBoZWxwPyoqIFRoaXMgbG9va3MgbGlrZSBhIHN5c3RlbSBpc3N1ZS4gUGxlYXNlIHJlcG9ydCBpdCB3aXRoIHRoZSBlcnJvciBkZXRhaWxzIGFib3ZlLmA7XG4gICAgICBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGVycm9yTWVzc2FnZSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRDb2xsZWN0aW9uQ2FjaGVIZWFsdGgoKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEdldCBjYWNoZSBzdGF0aXN0aWNzIGZyb20gYm90aCBjYWNoZXNcbiAgICAgIGNvbnN0IGNvbGxlY3Rpb25TdGF0cyA9IGF3YWl0IHRoaXMuY29sbGVjdGlvbkNhY2hlLmdldENhY2hlU3RhdHMoKTtcbiAgICAgIGNvbnN0IHNlYXJjaFN0YXRzID0gYXdhaXQgdGhpcy5jb2xsZWN0aW9uU2VhcmNoLmdldENhY2hlU3RhdHMoKTtcbiAgICAgIFxuICAgICAgLy8gQ2hlY2sgaWYgY2FjaGUgZGlyZWN0b3J5IGV4aXN0c1xuICAgICAgY29uc3QgY2FjaGVEaXIgPSBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgJy5kb2xsaG91c2VtY3AnLCAnY2FjaGUnKTtcbiAgICAgIGxldCBjYWNoZUZpbGVFeGlzdHMgPSBmYWxzZTtcbiAgICAgIGxldCBjYWNoZUZpbGVTaXplID0gMDtcbiAgICAgIFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY2FjaGVGaWxlID0gcGF0aC5qb2luKGNhY2hlRGlyLCAnY29sbGVjdGlvbi1jYWNoZS5qc29uJyk7XG4gICAgICAgIGNvbnN0IGZpbGVTdGF0cyA9IGF3YWl0IGZzLnN0YXQoY2FjaGVGaWxlKTtcbiAgICAgICAgY2FjaGVGaWxlRXhpc3RzID0gdHJ1ZTtcbiAgICAgICAgY2FjaGVGaWxlU2l6ZSA9IGZpbGVTdGF0cy5zaXplO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gQ2FjaGUgZmlsZSBkb2Vzbid0IGV4aXN0IHlldFxuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBGb3JtYXQgY2FjaGUgYWdlXG4gICAgICBjb25zdCBmb3JtYXRBZ2UgPSAoYWdlTXM6IG51bWJlcik6IHN0cmluZyA9PiB7XG4gICAgICAgIGlmIChhZ2VNcyA9PT0gMCkgcmV0dXJuICdOb3QgY2FjaGVkJztcbiAgICAgICAgY29uc3QgaG91cnMgPSBNYXRoLmZsb29yKGFnZU1zIC8gKDEwMDAgKiA2MCAqIDYwKSk7XG4gICAgICAgIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKChhZ2VNcyAlICgxMDAwICogNjAgKiA2MCkpIC8gKDEwMDAgKiA2MCkpO1xuICAgICAgICBpZiAoaG91cnMgPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIGAke2hvdXJzfWggJHttaW51dGVzfW0gb2xkYDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYCR7bWludXRlc31tIG9sZGA7XG4gICAgICB9O1xuICAgICAgXG4gICAgICAvLyBCdWlsZCBoZWFsdGggcmVwb3J0IHdpdGggYm90aCBjYWNoZSBzeXN0ZW1zXG4gICAgICBjb25zdCBoZWFsdGhSZXBvcnQgPSB7XG4gICAgICAgIGNvbGxlY3Rpb246IHtcbiAgICAgICAgICBzdGF0dXM6IGNvbGxlY3Rpb25TdGF0cy5pc1ZhbGlkID8gJ2hlYWx0aHknIDogKGNhY2hlRmlsZUV4aXN0cyA/ICdleHBpcmVkJyA6ICdlbXB0eScpLFxuICAgICAgICAgIGNhY2hlRXhpc3RzOiBjYWNoZUZpbGVFeGlzdHMsXG4gICAgICAgICAgaXRlbUNvdW50OiBjb2xsZWN0aW9uU3RhdHMuaXRlbUNvdW50LFxuICAgICAgICAgIGNhY2hlQWdlOiBmb3JtYXRBZ2UoY29sbGVjdGlvblN0YXRzLmNhY2hlQWdlKSxcbiAgICAgICAgICBjYWNoZUFnZU1zOiBjb2xsZWN0aW9uU3RhdHMuY2FjaGVBZ2UsXG4gICAgICAgICAgaXNWYWxpZDogY29sbGVjdGlvblN0YXRzLmlzVmFsaWQsXG4gICAgICAgICAgY2FjaGVGaWxlU2l6ZTogY2FjaGVGaWxlU2l6ZSxcbiAgICAgICAgICBjYWNoZUZpbGVTaXplRm9ybWF0dGVkOiBjYWNoZUZpbGVTaXplID4gMCA/IGAkeyhjYWNoZUZpbGVTaXplIC8gMTAyNCkudG9GaXhlZCgyKX0gS0JgIDogJzAgS0InLFxuICAgICAgICAgIHR0bFJlbWFpbmluZzogY29sbGVjdGlvblN0YXRzLmlzVmFsaWQgPyBmb3JtYXRBZ2UoMjQgKiA2MCAqIDYwICogMTAwMCAtIGNvbGxlY3Rpb25TdGF0cy5jYWNoZUFnZSkgOiAnRXhwaXJlZCdcbiAgICAgICAgfSxcbiAgICAgICAgaW5kZXg6IHtcbiAgICAgICAgICBzdGF0dXM6IHNlYXJjaFN0YXRzLmluZGV4LmlzVmFsaWQgPyAnaGVhbHRoeScgOiAoc2VhcmNoU3RhdHMuaW5kZXguaGFzQ2FjaGUgPyAnZXhwaXJlZCcgOiAnZW1wdHknKSxcbiAgICAgICAgICBoYXNDYWNoZTogc2VhcmNoU3RhdHMuaW5kZXguaGFzQ2FjaGUsXG4gICAgICAgICAgZWxlbWVudHM6IHNlYXJjaFN0YXRzLmluZGV4LmVsZW1lbnRzLFxuICAgICAgICAgIGNhY2hlQWdlOiBmb3JtYXRBZ2Uoc2VhcmNoU3RhdHMuaW5kZXguYWdlKSxcbiAgICAgICAgICBpc1ZhbGlkOiBzZWFyY2hTdGF0cy5pbmRleC5pc1ZhbGlkLFxuICAgICAgICAgIHR0bFJlbWFpbmluZzogc2VhcmNoU3RhdHMuaW5kZXguaXNWYWxpZCA/IGZvcm1hdEFnZSgxNSAqIDYwICogMTAwMCAtIHNlYXJjaFN0YXRzLmluZGV4LmFnZSkgOiAnRXhwaXJlZCdcbiAgICAgICAgfSxcbiAgICAgICAgb3ZlcmFsbDoge1xuICAgICAgICAgIHJlY29tbWVuZGF0aW9uOiAoY29sbGVjdGlvblN0YXRzLmlzVmFsaWQgfHwgc2VhcmNoU3RhdHMuaW5kZXguaXNWYWxpZClcbiAgICAgICAgICAgID8gJ0NhY2hlIHN5c3RlbSBpcyBvcGVyYXRpb25hbCBhbmQgc2VydmluZyBjb250ZW50IGVmZmljaWVudGx5J1xuICAgICAgICAgICAgOiAnQ2FjaGUgc3lzdGVtIHdpbGwgcmVmcmVzaCBvbiBuZXh0IGFjY2VzcyBmb3Igb3B0aW1hbCBwZXJmb3JtYW5jZSdcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl98J+TiiAqKkNvbGxlY3Rpb24gQ2FjaGUgSGVhbHRoIENoZWNrKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgYCMjIPCfl4TvuI8gQ29sbGVjdGlvbiBDYWNoZSAoTGVnYWN5KVxcbmAgK1xuICAgICAgICAgICAgICBgKipTdGF0dXMqKjogJHtoZWFsdGhSZXBvcnQuY29sbGVjdGlvbi5zdGF0dXMgPT09ICdoZWFsdGh5JyA/ICfinIUnIDogaGVhbHRoUmVwb3J0LmNvbGxlY3Rpb24uc3RhdHVzID09PSAnZXhwaXJlZCcgPyAn4pqg77iPJyA6ICfwn5OmJ30gJHtoZWFsdGhSZXBvcnQuY29sbGVjdGlvbi5zdGF0dXMudG9VcHBlckNhc2UoKX1cXG5gICtcbiAgICAgICAgICAgICAgYCoqSXRlbXMgQ2FjaGVkKio6ICR7aGVhbHRoUmVwb3J0LmNvbGxlY3Rpb24uaXRlbUNvdW50fVxcbmAgK1xuICAgICAgICAgICAgICBgKipDYWNoZSBBZ2UqKjogJHtoZWFsdGhSZXBvcnQuY29sbGVjdGlvbi5jYWNoZUFnZX1cXG5gICtcbiAgICAgICAgICAgICAgYCoqQ2FjaGUgU2l6ZSoqOiAke2hlYWx0aFJlcG9ydC5jb2xsZWN0aW9uLmNhY2hlRmlsZVNpemVGb3JtYXR0ZWR9XFxuYCArXG4gICAgICAgICAgICAgIGAqKlRUTCBSZW1haW5pbmcqKjogJHtoZWFsdGhSZXBvcnQuY29sbGVjdGlvbi50dGxSZW1haW5pbmd9XFxuXFxuYCArXG4gICAgICAgICAgICAgIGAjIyDwn5qAIEluZGV4IENhY2hlIChFbmhhbmNlZCBTZWFyY2gpXFxuYCArXG4gICAgICAgICAgICAgIGAqKlN0YXR1cyoqOiAke2hlYWx0aFJlcG9ydC5pbmRleC5zdGF0dXMgPT09ICdoZWFsdGh5JyA/ICfinIUnIDogaGVhbHRoUmVwb3J0LmluZGV4LnN0YXR1cyA9PT0gJ2V4cGlyZWQnID8gJ+KaoO+4jycgOiAn8J+Tpid9ICR7aGVhbHRoUmVwb3J0LmluZGV4LnN0YXR1cy50b1VwcGVyQ2FzZSgpfVxcbmAgK1xuICAgICAgICAgICAgICBgKipFbGVtZW50cyBJbmRleGVkKio6ICR7aGVhbHRoUmVwb3J0LmluZGV4LmVsZW1lbnRzfVxcbmAgK1xuICAgICAgICAgICAgICBgKipDYWNoZSBBZ2UqKjogJHtoZWFsdGhSZXBvcnQuaW5kZXguY2FjaGVBZ2V9XFxuYCArXG4gICAgICAgICAgICAgIGAqKlRUTCBSZW1haW5pbmcqKjogJHtoZWFsdGhSZXBvcnQuaW5kZXgudHRsUmVtYWluaW5nfVxcblxcbmAgK1xuICAgICAgICAgICAgICBgKipPdmVyYWxsIFN0YXR1cyoqOiAke2hlYWx0aFJlcG9ydC5vdmVyYWxsLnJlY29tbWVuZGF0aW9ufVxcblxcbmAgK1xuICAgICAgICAgICAgICBgVGhlIGVuaGFuY2VkIGluZGV4IGNhY2hlIHByb3ZpZGVzIGZhc3Qgc2VhcmNoIHdpdGggcGFnaW5hdGlvbiwgZmlsdGVyaW5nLCBhbmQgc29ydGluZy4gYCArXG4gICAgICAgICAgICAgIGBUaGUgY29sbGVjdGlvbiBjYWNoZSBzZXJ2ZXMgYXMgYSBmYWxsYmFjayBmb3Igb2ZmbGluZSBicm93c2luZy5gLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBnZXQgY2FjaGUgaGVhbHRoOiAke2Vycm9yTWVzc2FnZX1gKTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIEZhaWxlZCB0byBnZXQgY2FjaGUgaGVhbHRoOiAke2Vycm9yTWVzc2FnZX1gLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8vIFVzZXIgaWRlbnRpdHkgbWFuYWdlbWVudFxuICBhc3luYyBzZXRVc2VySWRlbnRpdHkodXNlcm5hbWU6IHN0cmluZywgZW1haWw/OiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKCF1c2VybmFtZSB8fCB1c2VybmFtZS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIFVzZXJuYW1lIGNhbm5vdCBiZSBlbXB0eWAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIGFuZCBzYW5pdGl6ZSB1c2VybmFtZVxuICAgICAgY29uc3QgdmFsaWRhdGVkVXNlcm5hbWUgPSB2YWxpZGF0ZVVzZXJuYW1lKHVzZXJuYW1lKTtcbiAgICAgIFxuICAgICAgLy8gVmFsaWRhdGUgZW1haWwgaWYgcHJvdmlkZWRcbiAgICAgIGxldCB2YWxpZGF0ZWRFbWFpbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKGVtYWlsKSB7XG4gICAgICAgIGNvbnN0IHNhbml0aXplZEVtYWlsID0gc2FuaXRpemVJbnB1dChlbWFpbCwgMTAwKTtcbiAgICAgICAgaWYgKCFWQUxJREFUSU9OX1BBVFRFUk5TLlNBRkVfRU1BSUwudGVzdChzYW5pdGl6ZWRFbWFpbCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZW1haWwgZm9ybWF0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgdmFsaWRhdGVkRW1haWwgPSBzYW5pdGl6ZWRFbWFpbDtcbiAgICAgIH1cblxuICAgICAgLy8gU2V0IHRoZSB2YWxpZGF0ZWQgdXNlciBpZGVudGl0eVxuICAgICAgdGhpcy5jdXJyZW50VXNlciA9IHZhbGlkYXRlZFVzZXJuYW1lO1xuICAgICAgaWYgKHZhbGlkYXRlZEVtYWlsKSB7XG4gICAgICAgIHByb2Nlc3MuZW52LkRPTExIT1VTRV9FTUFJTCA9IHZhbGlkYXRlZEVtYWlsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inIUgKipVc2VyIElkZW50aXR5IFNldCoqXFxuXFxuYCArXG4gICAgICAgICAgICBg8J+RpCAqKlVzZXJuYW1lOioqICR7dmFsaWRhdGVkVXNlcm5hbWV9XFxuYCArXG4gICAgICAgICAgICBgJHt2YWxpZGF0ZWRFbWFpbCA/IGDwn5OnICoqRW1haWw6KiogJHt2YWxpZGF0ZWRFbWFpbH1cXG5gIDogJyd9YCArXG4gICAgICAgICAgICBgXFxu8J+OryAqKk5leHQgU3RlcHM6KipcXG5gICtcbiAgICAgICAgICAgIGDigKIgTmV3IHBlcnNvbmFzIHlvdSBjcmVhdGUgd2lsbCBiZSBhdHRyaWJ1dGVkIHRvIFwiJHt2YWxpZGF0ZWRVc2VybmFtZX1cIlxcbmAgK1xuICAgICAgICAgICAgYOKAoiBTZXQgZW52aXJvbm1lbnQgdmFyaWFibGUgXFxgRE9MTEhPVVNFX1VTRVI9JHt2YWxpZGF0ZWRVc2VybmFtZX1cXGAgdG8gcGVyc2lzdCB0aGlzIHNldHRpbmdcXG5gICtcbiAgICAgICAgICAgIGAke3ZhbGlkYXRlZEVtYWlsID8gYOKAoiBTZXQgZW52aXJvbm1lbnQgdmFyaWFibGUgXFxgRE9MTEhPVVNFX0VNQUlMPSR7dmFsaWRhdGVkRW1haWx9XFxgIGZvciBjb250YWN0IGluZm9cXG5gIDogJyd9YCArXG4gICAgICAgICAgICBg4oCiIFVzZSBcXGBjbGVhcl91c2VyX2lkZW50aXR5XFxgIHRvIHJldHVybiB0byBhbm9ueW1vdXMgbW9kZWAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IHNhbml0aXplZCA9IFNlY3VyZUVycm9ySGFuZGxlci5zYW5pdGl6ZUVycm9yKGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCAqKlZhbGlkYXRpb24gRXJyb3IqKlxcblxcbmAgK1xuICAgICAgICAgICAgICBgJHtzYW5pdGl6ZWQubWVzc2FnZX1cXG5cXG5gICtcbiAgICAgICAgICAgICAgYFBsZWFzZSBwcm92aWRlIGEgdmFsaWQgdXNlcm5hbWUgKGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLCBoeXBoZW5zLCB1bmRlcnNjb3JlcywgZG90cyBvbmx5KS5gLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldFVzZXJJZGVudGl0eSgpIHtcbiAgICBjb25zdCBlbWFpbCA9IHByb2Nlc3MuZW52LkRPTExIT1VTRV9FTUFJTDtcbiAgICBcbiAgICBpZiAoIXRoaXMuY3VycmVudFVzZXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpffCfkaQgKipVc2VyIElkZW50aXR5OiBBbm9ueW1vdXMqKlxcblxcbmAgK1xuICAgICAgICAgICAgYPCflJIgKipTdGF0dXM6KiogQW5vbnltb3VzIG1vZGVcXG5gICtcbiAgICAgICAgICAgIGDwn5OdICoqQXR0cmlidXRpb246KiogUGVyc29uYXMgd2lsbCB1c2UgYW5vbnltb3VzIElEc1xcblxcbmAgK1xuICAgICAgICAgICAgYCoqVG8gc2V0IHlvdXIgaWRlbnRpdHk6KipcXG5gICtcbiAgICAgICAgICAgIGDigKIgVXNlOiBcXGBzZXRfdXNlcl9pZGVudGl0eSBcInlvdXItdXNlcm5hbWVcIlxcYFxcbmAgK1xuICAgICAgICAgICAgYOKAoiBPciBzZXQgZW52aXJvbm1lbnQgdmFyaWFibGU6IFxcYERPTExIT1VTRV9VU0VSPXlvdXItdXNlcm5hbWVcXGBgLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3wn5GkICoqVXNlciBJZGVudGl0eTogJHt0aGlzLmN1cnJlbnRVc2VyfSoqXFxuXFxuYCArXG4gICAgICAgICAgYOKchSAqKlN0YXR1czoqKiBBdXRoZW50aWNhdGVkXFxuYCArXG4gICAgICAgICAgYPCfkaQgKipVc2VybmFtZToqKiAke3RoaXMuY3VycmVudFVzZXJ9XFxuYCArXG4gICAgICAgICAgYCR7ZW1haWwgPyBg8J+TpyAqKkVtYWlsOioqICR7ZW1haWx9XFxuYCA6ICcnfWAgK1xuICAgICAgICAgIGDwn5OdICoqQXR0cmlidXRpb246KiogTmV3IHBlcnNvbmFzIHdpbGwgYmUgY3JlZGl0ZWQgdG8gXCIke3RoaXMuY3VycmVudFVzZXJ9XCJcXG5cXG5gICtcbiAgICAgICAgICBgKipFbnZpcm9ubWVudCBWYXJpYWJsZXM6KipcXG5gICtcbiAgICAgICAgICBg4oCiIFxcYERPTExIT1VTRV9VU0VSPSR7dGhpcy5jdXJyZW50VXNlcn1cXGBcXG5gICtcbiAgICAgICAgICBgJHtlbWFpbCA/IGDigKIgXFxgRE9MTEhPVVNFX0VNQUlMPSR7ZW1haWx9XFxgXFxuYCA6ICcnfWAgK1xuICAgICAgICAgIGBcXG4qKk1hbmFnZW1lbnQ6KipcXG5gICtcbiAgICAgICAgICBg4oCiIFVzZSBcXGBjbGVhcl91c2VyX2lkZW50aXR5XFxgIHRvIHJldHVybiB0byBhbm9ueW1vdXMgbW9kZVxcbmAgK1xuICAgICAgICAgIGDigKIgVXNlIFxcYHNldF91c2VyX2lkZW50aXR5IFwibmV3LXVzZXJuYW1lXCJcXGAgdG8gY2hhbmdlIHVzZXJuYW1lYCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGNsZWFyVXNlcklkZW50aXR5KCkge1xuICAgIGNvbnN0IHdhc1NldCA9IHRoaXMuY3VycmVudFVzZXIgIT09IG51bGw7XG4gICAgY29uc3QgcHJldmlvdXNVc2VyID0gdGhpcy5jdXJyZW50VXNlcjtcbiAgICB0aGlzLmN1cnJlbnRVc2VyID0gbnVsbDtcblxuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiB3YXNTZXQgXG4gICAgICAgICAgICA/IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKchSAqKlVzZXIgSWRlbnRpdHkgQ2xlYXJlZCoqXFxuXFxuYCArXG4gICAgICAgICAgICAgIGDwn5GkICoqUHJldmlvdXM6KiogJHtwcmV2aW91c1VzZXJ9XFxuYCArXG4gICAgICAgICAgICAgIGDwn5SSICoqQ3VycmVudDoqKiBBbm9ueW1vdXMgbW9kZVxcblxcbmAgK1xuICAgICAgICAgICAgICBg8J+TnSAqKkVmZmVjdDoqKiBOZXcgcGVyc29uYXMgd2lsbCB1c2UgYW5vbnltb3VzIElEc1xcblxcbmAgK1xuICAgICAgICAgICAgICBg4pqg77iPICoqTm90ZToqKiBUaGlzIG9ubHkgYWZmZWN0cyB0aGUgY3VycmVudCBzZXNzaW9uLlxcbmAgK1xuICAgICAgICAgICAgICBgVG8gcGVyc2lzdCB0aGlzIGNoYW5nZSwgdW5zZXQgdGhlIFxcYERPTExIT1VTRV9VU0VSXFxgIGVudmlyb25tZW50IHZhcmlhYmxlLmBcbiAgICAgICAgICAgIDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94oS577iPICoqQWxyZWFkeSBpbiBBbm9ueW1vdXMgTW9kZSoqXFxuXFxuYCArXG4gICAgICAgICAgICAgIGDwn5GkIE5vIHVzZXIgaWRlbnRpdHkgd2FzIHNldC5cXG5cXG5gICtcbiAgICAgICAgICAgICAgYFVzZSBcXGBzZXRfdXNlcl9pZGVudGl0eSBcInVzZXJuYW1lXCJcXGAgdG8gc2V0IHlvdXIgaWRlbnRpdHkuYCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q3VycmVudFVzZXJGb3JBdHRyaWJ1dGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRVc2VyIHx8IGdlbmVyYXRlQW5vbnltb3VzSWQoKTtcbiAgfVxuXG4gIC8vIEdpdEh1YiBhdXRoZW50aWNhdGlvbiBtYW5hZ2VtZW50XG4gIGFzeW5jIHNldHVwR2l0SHViQXV0aCgpIHtcbiAgICB0cnkge1xuICAgICAgLy8gQ2hlY2sgY3VycmVudCBhdXRoIHN0YXR1cyBmaXJzdFxuICAgICAgY29uc3QgY3VycmVudFN0YXR1cyA9IGF3YWl0IHRoaXMuZ2l0aHViQXV0aE1hbmFnZXIuZ2V0QXV0aFN0YXR1cygpO1xuICAgICAgXG4gICAgICBpZiAoY3VycmVudFN0YXR1cy5pc0F1dGhlbnRpY2F0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inIUgKipBbHJlYWR5IENvbm5lY3RlZCB0byBHaXRIdWIqKlxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYPCfkaQgKipVc2VybmFtZToqKiAke2N1cnJlbnRTdGF0dXMudXNlcm5hbWV9XFxuYCArXG4gICAgICAgICAgICAgICAgICBg8J+UkSAqKlBlcm1pc3Npb25zOioqICR7Y3VycmVudFN0YXR1cy5zY29wZXM/LmpvaW4oJywgJykgfHwgJ2Jhc2ljIGFjY2Vzcyd9XFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBgWW91J3JlIGFsbCBzZXQhIFlvdSBjYW46XFxuYCArXG4gICAgICAgICAgICAgICAgICBg4oCiIEJyb3dzZSB0aGUgY29sbGVjdGlvblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYOKAoiBJbnN0YWxsIGNvbnRlbnRcXG5gICtcbiAgICAgICAgICAgICAgICAgIGDigKIgU3VibWl0IHlvdXIgY3JlYXRpb25zXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBgVG8gZGlzY29ubmVjdCwgc2F5IFwiZGlzY29ubmVjdCBmcm9tIEdpdEh1YlwiYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEluaXRpYXRlIGRldmljZSBmbG93XG4gICAgICBsZXQgZGV2aWNlUmVzcG9uc2U6IERldmljZUNvZGVSZXNwb25zZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGRldmljZVJlc3BvbnNlID0gYXdhaXQgdGhpcy5naXRodWJBdXRoTWFuYWdlci5pbml0aWF0ZURldmljZUZsb3coKTtcbiAgICAgIH0gY2F0Y2ggKGRldmljZUZsb3dFcnJvcikge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ09BVVRIX0lOREVYXzI2ODE6IEZhaWxlZCB0byBpbml0aWF0ZSBkZXZpY2UgZmxvdycsIHsgZXJyb3I6IGRldmljZUZsb3dFcnJvciB9KTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPQVVUSF9JTkRFWF8yNjgxOiBEZXZpY2UgZmxvdyBpbml0aWF0aW9uIGZhaWxlZCAtICR7ZGV2aWNlRmxvd0Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBkZXZpY2VGbG93RXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gQ1JJVElDQUwgRklYOiBVc2UgaGVscGVyIHByb2Nlc3MgYXBwcm9hY2ggZnJvbSBQUiAjNTE4XG4gICAgICAvLyBNQ1Agc2VydmVycyBhcmUgc3RhdGVsZXNzIGFuZCB0ZXJtaW5hdGUgYWZ0ZXIgcmV0dXJuaW5nIHJlc3BvbnNlXG4gICAgICAvLyBUaGUgaGVscGVyIHByb2Nlc3Mgc3Vydml2ZXMgTUNQIHRlcm1pbmF0aW9uIGFuZCBjYW4gY29tcGxldGUgT0F1dGggcG9sbGluZ1xuICAgICAgXG4gICAgICAvLyBHZXQgdGhlIE9BdXRoIGNsaWVudCBJRCAtIHVzZSB0aGUgc2FtZSBtZXRob2QgdGhhdCBoYXMgdGhlIGRlZmF1bHQgZmFsbGJhY2tcbiAgICAgIC8vIFRoaXMgZW5zdXJlcyB3ZSBnZXQgdGhlIGRlZmF1bHQgY2xpZW50IElEIGlmIG5vIGVudi9jb25maWcgaXMgc2V0XG4gICAgICBsb2dnZXIuZGVidWcoJ09BVVRIX1NURVBfNDogR2V0dGluZyBjbGllbnQgSUQgZm9yIGhlbHBlciBwcm9jZXNzJyk7XG4gICAgICBjb25zdCBjbGllbnRJZCA9IGF3YWl0IEdpdEh1YkF1dGhNYW5hZ2VyLmdldENsaWVudElkKCk7XG4gICAgICBsb2dnZXIuZGVidWcoJ09BVVRIX1NURVBfNTogQ2xpZW50IElEIG9idGFpbmVkJywgeyBjbGllbnRJZDogY2xpZW50SWQ/LnN1YnN0cmluZygwLCA4KSArICcuLi4nIH0pO1xuICAgICAgXG4gICAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gbm93IHNpbmNlIGdldENsaWVudElkKCkgYWx3YXlzIHJldHVybnMgYSB2YWx1ZVxuICAgICAgLy8gKGVudiwgY29uZmlnLCBvciBkZWZhdWx0KSwgYnV0IGtlZXBpbmcgZm9yIHNhZmV0eVxuICAgICAgaWYgKCFjbGllbnRJZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCAqKkdpdEh1YiBPQXV0aCBDb25maWd1cmF0aW9uIEVycm9yKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGBVbmFibGUgdG8gb2J0YWluIEdpdEh1YiBPQXV0aCBjbGllbnQgSUQuXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBgVGhpcyBpcyB1bmV4cGVjdGVkIC0gcGxlYXNlIHJlcG9ydCB0aGlzIGlzc3VlLlxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYCoqV29ya2Fyb3VuZDoqKlxcbmAgK1xuICAgICAgICAgICAgICAgICAgYOKAoiBTZXQgZW52aXJvbm1lbnQgdmFyaWFibGU6IERPTExIT1VTRV9HSVRIVUJfQ0xJRU5UX0lEXFxuYCArXG4gICAgICAgICAgICAgICAgICBg4oCiIE9yIHVzZSBHaXRIdWIgQ0xJOiBnaCBhdXRoIGxvZ2luIC0td2ViYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFNwYXduIHRoZSBPQXV0aCBoZWxwZXIgcHJvY2Vzc1xuICAgICAgLy8gVGhlIGhlbHBlciBydW5zIGluZGVwZW5kZW50bHkgYW5kIHN1cnZpdmVzIE1DUCBzZXJ2ZXIgdGVybWluYXRpb25cbiAgICAgIGxldCBoZWxwZXJQYXRoOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIEdldCB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBjb21waWxlZCBKUyBmaWxlIGlzXG4gICAgICAgIGNvbnN0IF9fZmlsZW5hbWUgPSBmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCk7XG4gICAgICAgIGNvbnN0IF9fZGlybmFtZSA9IHBhdGguZGlybmFtZShfX2ZpbGVuYW1lKTtcbiAgICAgICAgXG4gICAgICAgIC8vIEZpbmQgdGhlIG9hdXRoLWhlbHBlci5tanMgZmlsZVxuICAgICAgICAvLyBJdCBzaG91bGQgYmUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IChvbmUgbGV2ZWwgdXAgZnJvbSBkaXN0LylcbiAgICAgICAgY29uc3QgcG9zc2libGVQYXRocyA9IFtcbiAgICAgICAgICBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4nLCAnb2F1dGgtaGVscGVyLm1qcycpLCAgLy8gRnJvbSBkaXN0L2luZGV4LmpzXG4gICAgICAgICAgcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksICdvYXV0aC1oZWxwZXIubWpzJyksICAgIC8vIEZyb20gQ1dEXG4gICAgICAgICAgcGF0aC5qb2luKF9fZGlybmFtZSwgJ29hdXRoLWhlbHBlci5tanMnKSwgICAgICAgIC8vIFNhbWUgZGlyZWN0b3J5XG4gICAgICAgICAgcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJy4uJywgJ29hdXRoLWhlbHBlci5tanMnKSAvLyBOUE0gcGFja2FnZSByb290XG4gICAgICAgIF07XG4gICAgICAgIFxuICAgICAgICBoZWxwZXJQYXRoID0gbnVsbDtcbiAgICAgICAgZm9yIChjb25zdCB0ZXN0UGF0aCBvZiBwb3NzaWJsZVBhdGhzKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IGZzLmFjY2Vzcyh0ZXN0UGF0aCk7XG4gICAgICAgICAgICBoZWxwZXJQYXRoID0gdGVzdFBhdGg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8vIFRyeSBuZXh0IHBhdGhcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGlmICghaGVscGVyUGF0aCkge1xuICAgICAgICAgIGxvZ2dlci5lcnJvcignT0FVVEhfSU5ERVhfMjczNDogb2F1dGgtaGVscGVyLm1qcyBub3QgZm91bmQnLCB7IFxuICAgICAgICAgICAgc2VhcmNoZWRQYXRoczogcG9zc2libGVQYXRocyxcbiAgICAgICAgICAgIGN3ZDogcHJvY2Vzcy5jd2QoKSxcbiAgICAgICAgICAgIGRpcm5hbWU6IF9fZGlybmFtZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT0FVVEhfSEVMUEVSX05PVF9GT1VORDogb2F1dGgtaGVscGVyLm1qcyBub3QgZm91bmQgYXQgbGluZSAyNzM0LiBTZWFyY2hlZDogJHtwb3NzaWJsZVBhdGhzLmpvaW4oJywgJyl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnT0FVVEhfU1RFUF82OiBTcGF3bmluZyBoZWxwZXIgcHJvY2VzcycsIHsgXG4gICAgICAgICAgaGVscGVyUGF0aCxcbiAgICAgICAgICBjbGllbnRJZDogY2xpZW50SWQ/LnN1YnN0cmluZygwLCA4KSArICcuLi4nLFxuICAgICAgICAgIGRldmljZUNvZGU6IGRldmljZVJlc3BvbnNlLmRldmljZV9jb2RlLnN1YnN0cmluZygwLCA4KSArICcuLi4nXG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgLy8gU3Bhd24gdGhlIGhlbHBlciBhcyBhIGRldGFjaGVkIHByb2Nlc3NcbiAgICAgICAgY29uc3QgaGVscGVyID0gc3Bhd24oJ25vZGUnLCBbXG4gICAgICAgICAgaGVscGVyUGF0aCxcbiAgICAgICAgICBkZXZpY2VSZXNwb25zZS5kZXZpY2VfY29kZSxcbiAgICAgICAgICAoZGV2aWNlUmVzcG9uc2UuaW50ZXJ2YWwgfHwgNSkudG9TdHJpbmcoKSxcbiAgICAgICAgICBkZXZpY2VSZXNwb25zZS5leHBpcmVzX2luLnRvU3RyaW5nKCksXG4gICAgICAgICAgY2xpZW50SWRcbiAgICAgICAgXSwge1xuICAgICAgICAgIGRldGFjaGVkOiB0cnVlLFxuICAgICAgICAgIHN0ZGlvOiAnaWdub3JlJywgLy8gQ29tcGxldGVseSBkZXRhY2ggSS9PXG4gICAgICAgICAgd2luZG93c0hpZGU6IHRydWUgLy8gSGlkZSBjb25zb2xlIG9uIFdpbmRvd3NcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICAvLyBBbGxvdyB0aGUgcGFyZW50IHByb2Nlc3MgdG8gZXhpdCB3aXRob3V0IHdhaXRpbmcgZm9yIHRoZSBoZWxwZXJcbiAgICAgICAgaGVscGVyLnVucmVmKCk7XG4gICAgICAgIFxuICAgICAgICBsb2dnZXIuZGVidWcoJ09BVVRIX1NURVBfNzogSGVscGVyIHByb2Nlc3Mgc3Bhd25lZCBzdWNjZXNzZnVsbHknLCB7IHBpZDogaGVscGVyLnBpZCB9KTtcbiAgICAgICAgXG4gICAgICAgIGxvZ2dlci5pbmZvKCdPQXV0aCBoZWxwZXIgcHJvY2VzcyBzcGF3bmVkJywge1xuICAgICAgICAgIHBpZDogaGVscGVyLnBpZCxcbiAgICAgICAgICBleHBpcmVzSW46IGRldmljZVJlc3BvbnNlLmV4cGlyZXNfaW4sXG4gICAgICAgICAgdXNlckNvZGU6IGRldmljZVJlc3BvbnNlLnVzZXJfY29kZVxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIC8vIFdyaXRlIHN0YXRlIGZpbGUgZm9yIG1vbml0b3JpbmdcbiAgICAgICAgY29uc3Qgc3RhdGVGaWxlID0gcGF0aC5qb2luKGhvbWVkaXIoKSwgJy5kb2xsaG91c2UnLCAnLmF1dGgnLCAnb2F1dGgtaGVscGVyLXN0YXRlLmpzb24nKTtcbiAgICAgICAgY29uc3Qgc3RhdGVEaXIgPSBwYXRoLmRpcm5hbWUoc3RhdGVGaWxlKTtcbiAgICAgICAgYXdhaXQgZnMubWtkaXIoc3RhdGVEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICBcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB7XG4gICAgICAgICAgcGlkOiBoZWxwZXIucGlkLFxuICAgICAgICAgIGRldmljZUNvZGU6IGRldmljZVJlc3BvbnNlLmRldmljZV9jb2RlLFxuICAgICAgICAgIHVzZXJDb2RlOiBkZXZpY2VSZXNwb25zZS51c2VyX2NvZGUsXG4gICAgICAgICAgc3RhcnRUaW1lOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgZXhwaXJlc0F0OiBuZXcgRGF0ZShEYXRlLm5vdygpICsgZGV2aWNlUmVzcG9uc2UuZXhwaXJlc19pbiAqIDEwMDApLnRvSVNPU3RyaW5nKClcbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShzdGF0ZUZpbGUsIEpTT04uc3RyaW5naWZ5KHN0YXRlLCBudWxsLCAyKSk7XG4gICAgICAgIFxuICAgICAgfSBjYXRjaCAoc3Bhd25FcnJvcikge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ09BVVRIX0lOREVYXzI3NzQ6IEZhaWxlZCB0byBzcGF3biBPQXV0aCBoZWxwZXIgcHJvY2VzcycsIHsgXG4gICAgICAgICAgZXJyb3I6IHNwYXduRXJyb3IsXG4gICAgICAgICAgaGVscGVyUGF0aCxcbiAgICAgICAgICBjbGllbnRJZDogY2xpZW50SWQ/LnN1YnN0cmluZygwLCA4KSArICcuLi4nLFxuICAgICAgICAgIGVycm9yQ29kZTogKHNwYXduRXJyb3IgYXMgYW55KT8uY29kZSxcbiAgICAgICAgICBzeXNjYWxsOiAoc3Bhd25FcnJvciBhcyBhbnkpPy5zeXNjYWxsXG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgLy8gUHJvdmlkZSBzcGVjaWZpYyBlcnJvciBtZXNzYWdlIGJhc2VkIG9uIGVycm9yIHR5cGVcbiAgICAgICAgbGV0IGVycm9yRGV0YWlsID0gJyc7XG4gICAgICAgIGlmIChzcGF3bkVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICBpZiAoc3Bhd25FcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdFTk9FTlQnKSkge1xuICAgICAgICAgICAgZXJyb3JEZXRhaWwgPSBgT0FVVEhfSEVMUEVSX1NQQVdOX0VOT0VOVDogTm9kZS5qcyBleGVjdXRhYmxlIG5vdCBmb3VuZCBvciBoZWxwZXIgc2NyaXB0IG1pc3NpbmcgYXQgJHtoZWxwZXJQYXRofWA7XG4gICAgICAgICAgfSBlbHNlIGlmIChzcGF3bkVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJ0VBQ0NFUycpKSB7XG4gICAgICAgICAgICBlcnJvckRldGFpbCA9IGBPQVVUSF9IRUxQRVJfU1BBV05fRUFDQ0VTOiBQZXJtaXNzaW9uIGRlbmllZCB3aGVuIHRyeWluZyB0byBleGVjdXRlICR7aGVscGVyUGF0aH1gO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3Bhd25FcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdFMkJJRycpKSB7XG4gICAgICAgICAgICBlcnJvckRldGFpbCA9IGBPQVVUSF9IRUxQRVJfU1BBV05fRTJCSUc6IEFyZ3VtZW50IGxpc3QgdG9vIGxvbmcgZm9yIGhlbHBlciBwcm9jZXNzYDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyb3JEZXRhaWwgPSBgT0FVVEhfSEVMUEVSX1NQQVdOX0ZBSUxFRDogQ291bGQgbm90IHN0YXJ0IGJhY2tncm91bmQgYXV0aGVudGljYXRpb24gcHJvY2VzcyBhdCBsaW5lIDI3NzQgLSAke3NwYXduRXJyb3IubWVzc2FnZX1gO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlcnJvckRldGFpbCA9IGBPQVVUSF9IRUxQRVJfU1BBV05fVU5LTk9XTjogVW5rbm93biBzcGF3biBlcnJvciBhdCBsaW5lIDI3NzRgO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBGYWxsIGJhY2sgdG8gaW5mb3JtaW5nIHVzZXIgYWJvdXQgdGhlIGlzc3VlXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94pqg77iPICoqT0F1dGggSGVscGVyIExhdW5jaCBGYWlsZWQqKlxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYCR7ZXJyb3JEZXRhaWx9XFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBgKipBbHRlcm5hdGl2ZSBPcHRpb25zOioqXFxuYCArXG4gICAgICAgICAgICAgICAgICBgMS4gVHJ5IGFnYWluOiBSdW4gc2V0dXBfZ2l0aHViX2F1dGggYWdhaW5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGAyLiBVc2UgR2l0SHViIENMSTogZ2ggYXV0aCBsb2dpbiAtLXdlYlxcbmAgK1xuICAgICAgICAgICAgICAgICAgYDMuIFNldCB0b2tlbiBtYW51YWxseTogZXhwb3J0IEdJVEhVQl9UT0tFTj15b3VyX3Rva2VuYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFJldHVybiBpbnN0cnVjdGlvbnMgdG8gdXNlclxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiB0aGlzLmdpdGh1YkF1dGhNYW5hZ2VyLmZvcm1hdEF1dGhJbnN0cnVjdGlvbnMoZGV2aWNlUmVzcG9uc2UpICtcbiAgICAgICAgICAgICAgICAnXFxuXFxu8J+TnSAqKk5vdGUqKjogQXV0aGVudGljYXRpb24gd2lsbCBjb21wbGV0ZSBhdXRvbWF0aWNhbGx5IG9uY2UgeW91IGF1dGhvcml6ZS4gJyArXG4gICAgICAgICAgICAgICAgJ1lvdXIgdG9rZW4gd2lsbCBiZSBzdG9yZWQgc2VjdXJlbHkgZm9yIGZ1dHVyZSB1c2UhJ1xuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdPQVVUSF9JTkRFWF8yODA2OiBNYWluIGNhdGNoIGJsb2NrIC0gYXV0aGVudGljYXRpb24gc2V0dXAgZmFpbGVkJywgeyBcbiAgICAgICAgZXJyb3IsXG4gICAgICAgIGVycm9yVHlwZTogZXJyb3I/LmNvbnN0cnVjdG9yPy5uYW1lLFxuICAgICAgICBlcnJvck1lc3NhZ2U6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24nXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgLy8gSWYgZXJyb3IgYWxyZWFkeSBoYXMgb3VyIGVycm9yIGNvZGUsIHBhc3MgaXQgdGhyb3VnaFxuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcic7XG4gICAgICBjb25zdCBoYXNFcnJvckNvZGUgPSBlcnJvck1lc3NhZ2UuaW5jbHVkZXMoJ09BVVRIXycpO1xuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCAqKkF1dGhlbnRpY2F0aW9uIFNldHVwIEZhaWxlZCoqXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgYCR7aGFzRXJyb3JDb2RlID8gZXJyb3JNZXNzYWdlIDogYE9BVVRIX0lOREVYXzI4MDY6IFVuYWJsZSB0byBzdGFydCBHaXRIdWIgYXV0aGVudGljYXRpb24gLSAke2Vycm9yTWVzc2FnZX1gfVxcblxcbmAgK1xuICAgICAgICAgICAgICAgIGAkeyFlcnJvck1lc3NhZ2UuaW5jbHVkZXMoJ09BVVRIX05FVFdPUksnKSA/ICdQbGVhc2UgY2hlY2sgeW91ciBpbnRlcm5ldCBjb25uZWN0aW9uIGFuZCB0cnkgYWdhaW4uJyA6ICcnfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG4gIFxuICBhc3luYyBjaGVja0dpdEh1YkF1dGgoKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEZpcnN0IGNoZWNrIGZvciBPQXV0aCBoZWxwZXIgcHJvY2VzcyBoZWFsdGhcbiAgICAgIGNvbnN0IGhlbHBlckhlYWx0aCA9IGF3YWl0IHRoaXMuY2hlY2tPQXV0aEhlbHBlckhlYWx0aCgpO1xuICAgICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgdGhpcy5naXRodWJBdXRoTWFuYWdlci5nZXRBdXRoU3RhdHVzKCk7XG4gICAgICBcbiAgICAgIGlmIChzdGF0dXMuaXNBdXRoZW50aWNhdGVkKSB7XG4gICAgICAgIC8vIENsZWFuIHVwIGhlbHBlciBzdGF0ZSBmaWxlIGlmIGF1dGggaXMgc3VjY2Vzc2Z1bFxuICAgICAgICBpZiAoaGVscGVySGVhbHRoLmV4aXN0cykge1xuICAgICAgICAgIGNvbnN0IHN0YXRlRmlsZSA9IHBhdGguam9pbihob21lZGlyKCksICcuZG9sbGhvdXNlJywgJy5hdXRoJywgJ29hdXRoLWhlbHBlci1zdGF0ZS5qc29uJyk7XG4gICAgICAgICAgYXdhaXQgZnMudW5saW5rKHN0YXRlRmlsZSkuY2F0Y2goKCkgPT4ge30pO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKchSAqKkdpdEh1YiBDb25uZWN0ZWQqKlxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYPCfkaQgKipVc2VybmFtZToqKiAke3N0YXR1cy51c2VybmFtZX1cXG5gICtcbiAgICAgICAgICAgICAgICAgIGDwn5SRICoqUGVybWlzc2lvbnM6KiogJHtzdGF0dXMuc2NvcGVzPy5qb2luKCcsICcpIHx8ICdiYXNpYyBhY2Nlc3MnfVxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYCoqQXZhaWxhYmxlIEFjdGlvbnM6KipcXG5gICtcbiAgICAgICAgICAgICAgICAgIGDinIUgQnJvd3NlIGNvbGxlY3Rpb25cXG5gICtcbiAgICAgICAgICAgICAgICAgIGDinIUgSW5zdGFsbCBjb250ZW50XFxuYCArXG4gICAgICAgICAgICAgICAgICBg4pyFIFN1Ym1pdCBjb250ZW50XFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBgRXZlcnl0aGluZyBpcyB3b3JraW5nIHByb3Blcmx5IWBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChoZWxwZXJIZWFsdGguaXNBY3RpdmUpIHtcbiAgICAgICAgLy8gT0F1dGggaGVscGVyIGlzIGFjdGl2ZWx5IHBvbGxpbmdcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3ij7MgKipHaXRIdWIgQXV0aGVudGljYXRpb24gSW4gUHJvZ3Jlc3MqKlxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYPCflJEgKipVc2VyIENvZGU6KiogJHtoZWxwZXJIZWFsdGgudXNlckNvZGV9XFxuYCArXG4gICAgICAgICAgICAgICAgICBg4o+x77iPICoqVGltZSBSZW1haW5pbmc6KiogJHtNYXRoLmZsb29yKGhlbHBlckhlYWx0aC50aW1lUmVtYWluaW5nIC8gNjApfW0gJHtoZWxwZXJIZWFsdGgudGltZVJlbWFpbmluZyAlIDYwfXNcXG5gICtcbiAgICAgICAgICAgICAgICAgIGDwn5SEICoqUHJvY2VzcyBTdGF0dXM6KiogJHtoZWxwZXJIZWFsdGgucHJvY2Vzc0FsaXZlID8gJ+KchSBSdW5uaW5nJyA6ICfimqDvuI8gTWF5IGhhdmUgc3RvcHBlZCd9XFxuYCArXG4gICAgICAgICAgICAgICAgICBg8J+TgSAqKkxvZyBBdmFpbGFibGU6KiogJHtoZWxwZXJIZWFsdGguaGFzTG9nID8gJ1llcycgOiAnTm8nfVxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYCoqV2FpdGluZyBmb3IgeW91IHRvOioqXFxuYCArXG4gICAgICAgICAgICAgICAgICBgMS4gR28gdG86IGh0dHBzOi8vZ2l0aHViLmNvbS9sb2dpbi9kZXZpY2VcXG5gICtcbiAgICAgICAgICAgICAgICAgIGAyLiBFbnRlciBjb2RlOiAqKiR7aGVscGVySGVhbHRoLnVzZXJDb2RlfSoqXFxuYCArXG4gICAgICAgICAgICAgICAgICBgMy4gQXV0aG9yaXplIHRoZSBhcHBsaWNhdGlvblxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYFRoZSBhdXRoZW50aWNhdGlvbiB3aWxsIGNvbXBsZXRlIGF1dG9tYXRpY2FsbHkgb25jZSB5b3UgYXV0aG9yaXplLlxcbmAgK1xuICAgICAgICAgICAgICAgICAgYFJ1biB0aGlzIGNvbW1hbmQgYWdhaW4gdG8gY2hlY2sgc3RhdHVzLmBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChoZWxwZXJIZWFsdGguZXhpc3RzICYmIGhlbHBlckhlYWx0aC5leHBpcmVkKSB7XG4gICAgICAgIC8vIEhlbHBlciBzdGF0ZSBleGlzdHMgYnV0IGV4cGlyZWRcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3ij7HvuI8gKipBdXRoZW50aWNhdGlvbiBFeHBpcmVkKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGBUaGUgR2l0SHViIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QgaGFzIGV4cGlyZWQuXFxuYCArXG4gICAgICAgICAgICAgICAgICBgVXNlciBjb2RlOiAke2hlbHBlckhlYWx0aC51c2VyQ29kZX0gKGV4cGlyZWQpXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBgKipUbyB0cnkgYWdhaW46KipcXG5gICtcbiAgICAgICAgICAgICAgICAgIGBSdW46IFxcYHNldHVwX2dpdGh1Yl9hdXRoXFxgIHRvIGdldCBhIG5ldyBjb2RlXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBgJHtoZWxwZXJIZWFsdGguZXJyb3JMb2cgPyBgKipFcnJvciBMb2c6KipcXG5cXGBcXGBcXGBcXG4ke2hlbHBlckhlYWx0aC5lcnJvckxvZ31cXG5cXGBcXGBcXGBcXG5gIDogJyd9YFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKHN0YXR1cy5oYXNUb2tlbikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKaoO+4jyAqKkdpdEh1YiBUb2tlbiBJbnZhbGlkKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGBBIEdpdEh1YiB0b2tlbiB3YXMgZm91bmQgYnV0IGl0IGFwcGVhcnMgdG8gYmUgaW52YWxpZCBvciBleHBpcmVkLlxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYCoqVG8gZml4IHRoaXM6KipcXG5gICtcbiAgICAgICAgICAgICAgICAgIGAxLiBTYXkgXCJzZXQgdXAgR2l0SHViXCIgdG8gYXV0aGVudGljYXRlIGFnYWluXFxuYCArXG4gICAgICAgICAgICAgICAgICBgMi4gT3IgY2hlY2sgeW91ciBHSVRIVUJfVE9LRU4gZW52aXJvbm1lbnQgdmFyaWFibGVcXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGBOb3RlOiBCcm93c2UgYW5kIGluc3RhbGwgc3RpbGwgd29yayB3aXRob3V0IGF1dGhlbnRpY2F0aW9uIWBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3wn5SSICoqTm90IENvbm5lY3RlZCB0byBHaXRIdWIqKlxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYFlvdSdyZSBub3QgY3VycmVudGx5IGF1dGhlbnRpY2F0ZWQgd2l0aCBHaXRIdWIuXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBgKipXaGF0IHdvcmtzIHdpdGhvdXQgYXV0aDoqKlxcbmAgK1xuICAgICAgICAgICAgICAgICAgYOKchSBCcm93c2UgdGhlIHB1YmxpYyBjb2xsZWN0aW9uXFxuYCArXG4gICAgICAgICAgICAgICAgICBg4pyFIEluc3RhbGwgY29tbXVuaXR5IGNvbnRlbnRcXG5gICtcbiAgICAgICAgICAgICAgICAgIGDinYwgU3VibWl0IHlvdXIgb3duIGNvbnRlbnQgKHJlcXVpcmVzIGF1dGgpXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBgVG8gY29ubmVjdCwganVzdCBzYXkgXCJzZXQgdXAgR2l0SHViXCIgb3IgXCJjb25uZWN0IHRvIEdpdEh1YlwiYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGNoZWNrIEdpdEh1YiBhdXRoJywgeyBlcnJvciB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MICoqVW5hYmxlIHRvIENoZWNrIEF1dGhlbnRpY2F0aW9uKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgICBgRXJyb3I6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgXG4gIC8vIFB1YmxpYyBtZXRob2QgZm9yIG9hdXRoX2hlbHBlcl9zdGF0dXMgdG9vbFxuICBhc3luYyBnZXRPQXV0aEhlbHBlclN0YXR1cyh2ZXJib3NlOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgaGVhbHRoID0gYXdhaXQgdGhpcy5jaGVja09BdXRoSGVscGVySGVhbHRoKCk7XG4gICAgICBjb25zdCBzdGF0ZUZpbGUgPSBwYXRoLmpvaW4oaG9tZWRpcigpLCAnLmRvbGxob3VzZScsICcuYXV0aCcsICdvYXV0aC1oZWxwZXItc3RhdGUuanNvbicpO1xuICAgICAgY29uc3QgbG9nRmlsZSA9IHBhdGguam9pbihob21lZGlyKCksICcuZG9sbGhvdXNlJywgJ29hdXRoLWhlbHBlci5sb2cnKTtcbiAgICAgIGNvbnN0IHBpZEZpbGUgPSBwYXRoLmpvaW4oaG9tZWRpcigpLCAnLmRvbGxob3VzZScsICcuYXV0aCcsICdvYXV0aC1oZWxwZXIucGlkJyk7XG4gICAgICBcbiAgICAgIGxldCBzdGF0dXNUZXh0ID0gYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl98J+TiiAqKk9BdXRoIEhlbHBlciBQcm9jZXNzIERpYWdub3N0aWNzKipcXG5cXG5gO1xuICAgICAgXG4gICAgICAvLyBCYXNpYyBzdGF0dXNcbiAgICAgIGlmICghaGVhbHRoLmV4aXN0cykge1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAqKlN0YXR1czoqKiBObyBPQXV0aCBwcm9jZXNzIGRldGVjdGVkXFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgKipTdGF0ZSBGaWxlOioqIE5vdCBmb3VuZFxcblxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYE5vIGFjdGl2ZSBhdXRoZW50aWNhdGlvbiBwcm9jZXNzLiBSdW4gXFxgc2V0dXBfZ2l0aHViX2F1dGhcXGAgdG8gc3RhcnQgb25lLlxcbmA7XG4gICAgICB9IGVsc2UgaWYgKGhlYWx0aC5pc0FjdGl2ZSkge1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAqKlN0YXR1czoqKiDwn5+iIEFDVElWRSAtIEF1dGhlbnRpY2F0aW9uIGluIHByb2dyZXNzXFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgKipVc2VyIENvZGU6KiogJHtoZWFsdGgudXNlckNvZGV9XFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgKipQcm9jZXNzIElEOioqICR7aGVhbHRoLnBpZH1cXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAqKlByb2Nlc3MgQWxpdmU6KiogJHtoZWFsdGgucHJvY2Vzc0FsaXZlID8gJ+KchSBZZXMnIDogJ+KdjCBObyAobWF5IGhhdmUgY3Jhc2hlZCknfVxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYCoqU3RhcnRlZDoqKiAke2hlYWx0aC5zdGFydFRpbWU/LnRvTG9jYWxlU3RyaW5nKCl9XFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgKipFeHBpcmVzOioqICR7aGVhbHRoLmV4cGlyZXNBdD8udG9Mb2NhbGVTdHJpbmcoKX1cXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAqKlRpbWUgUmVtYWluaW5nOioqICR7TWF0aC5mbG9vcihoZWFsdGgudGltZVJlbWFpbmluZyAvIDYwKX1tICR7aGVhbHRoLnRpbWVSZW1haW5pbmcgJSA2MH1zXFxuXFxuYDtcbiAgICAgICAgXG4gICAgICAgIGlmICghaGVhbHRoLnByb2Nlc3NBbGl2ZSkge1xuICAgICAgICAgIHN0YXR1c1RleHQgKz0gYOKaoO+4jyAqKldBUk5JTkc6KiogUHJvY2VzcyBhcHBlYXJzIHRvIGhhdmUgc3RvcHBlZCFcXG5gO1xuICAgICAgICAgIHN0YXR1c1RleHQgKz0gYFRoZSBoZWxwZXIgcHJvY2VzcyAoUElEICR7aGVhbHRoLnBpZH0pIGlzIG5vdCByZXNwb25kaW5nLlxcbmA7XG4gICAgICAgICAgc3RhdHVzVGV4dCArPSBgWW91IG1heSBuZWVkIHRvIHJ1biBcXGBzZXR1cF9naXRodWJfYXV0aFxcYCBhZ2Fpbi5cXG5cXG5gO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGhlYWx0aC5leHBpcmVkKSB7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYCoqU3RhdHVzOioqIPCflLQgRVhQSVJFRFxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYCoqVXNlciBDb2RlOioqICR7aGVhbHRoLnVzZXJDb2RlfSAoZXhwaXJlZClcXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAqKlByb2Nlc3MgSUQ6KiogJHtoZWFsdGgucGlkfVxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYCoqU3RhcnRlZDoqKiAke2hlYWx0aC5zdGFydFRpbWU/LnRvTG9jYWxlU3RyaW5nKCl9XFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgKipFeHBpcmVkOioqICR7aGVhbHRoLmV4cGlyZXNBdD8udG9Mb2NhbGVTdHJpbmcoKX1cXG5cXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGBUaGUgYXV0aGVudGljYXRpb24gcmVxdWVzdCBoYXMgZXhwaXJlZC4gUnVuIFxcYHNldHVwX2dpdGh1Yl9hdXRoXFxgIHRvIHRyeSBhZ2Fpbi5cXG5cXG5gO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBGaWxlIGxvY2F0aW9uc1xuICAgICAgc3RhdHVzVGV4dCArPSBgKirwn5OBIEZpbGUgTG9jYXRpb25zOioqXFxuYDtcbiAgICAgIHN0YXR1c1RleHQgKz0gYOKAoiBTdGF0ZTogJHtzdGF0ZUZpbGV9XFxuYDtcbiAgICAgIHN0YXR1c1RleHQgKz0gYOKAoiBMb2c6ICR7bG9nRmlsZX0gJHtoZWFsdGguaGFzTG9nID8gJyhleGlzdHMpJyA6ICcobm90IGZvdW5kKSd9XFxuYDtcbiAgICAgIHN0YXR1c1RleHQgKz0gYOKAoiBQSUQ6ICR7cGlkRmlsZX1cXG5cXG5gO1xuICAgICAgXG4gICAgICAvLyBFcnJvciBsb2cgaWYgYXZhaWxhYmxlXG4gICAgICBpZiAoaGVhbHRoLmVycm9yTG9nKSB7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYCoq4pqg77iPIFJlY2VudCBFcnJvcnM6KipcXG5cXGBcXGBcXGBcXG4ke2hlYWx0aC5lcnJvckxvZ31cXG5cXGBcXGBcXGBcXG5cXG5gO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBWZXJib3NlIGxvZyBvdXRwdXRcbiAgICAgIGlmICh2ZXJib3NlICYmIGhlYWx0aC5oYXNMb2cpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBmdWxsTG9nID0gYXdhaXQgZnMucmVhZEZpbGUobG9nRmlsZSwgJ3V0Zi04Jyk7XG4gICAgICAgICAgY29uc3QgbGluZXMgPSBmdWxsTG9nLnNwbGl0KCdcXG4nKS5maWx0ZXIobGluZSA9PiBsaW5lLnRyaW0oKSk7XG4gICAgICAgICAgY29uc3QgcmVjZW50TGluZXMgPSBsaW5lcy5zbGljZSgtMjApOyAvLyBMYXN0IDIwIGxpbmVzXG4gICAgICAgICAgXG4gICAgICAgICAgc3RhdHVzVGV4dCArPSBgKirwn5OcIFJlY2VudCBMb2cgT3V0cHV0IChsYXN0IDIwIGxpbmVzKToqKlxcblxcYFxcYFxcYFxcbmA7XG4gICAgICAgICAgc3RhdHVzVGV4dCArPSByZWNlbnRMaW5lcy5qb2luKCdcXG4nKTtcbiAgICAgICAgICBzdGF0dXNUZXh0ICs9IGBcXG5cXGBcXGBcXGBcXG5cXG5gO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHN0YXR1c1RleHQgKz0gYCoq8J+TnCBMb2c6KiogVW5hYmxlIHRvIHJlYWQgbG9nIGZpbGVcXG5cXG5gO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFRyb3VibGVzaG9vdGluZyB0aXBzXG4gICAgICBpZiAoaGVhbHRoLmV4aXN0cyAmJiAhaGVhbHRoLnByb2Nlc3NBbGl2ZSAmJiAhaGVhbHRoLmV4cGlyZWQpIHtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgKirwn5SnIFRyb3VibGVzaG9vdGluZyBUaXBzOioqXFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgMS4gVGhlIGhlbHBlciBwcm9jZXNzIG1heSBoYXZlIGNyYXNoZWRcXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAyLiBDaGVjayB0aGUgbG9nIGZpbGUgZm9yIGVycm9yczogJHtsb2dGaWxlfVxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYDMuIFRyeSBydW5uaW5nIFxcYHNldHVwX2dpdGh1Yl9hdXRoXFxgIGFnYWluXFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgNC4gRW5zdXJlIERPTExIT1VTRV9HSVRIVUJfQ0xJRU5UX0lEIGlzIHNldFxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYDUuIENoZWNrIHlvdXIgaW50ZXJuZXQgY29ubmVjdGlvblxcbmA7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIE1hbnVhbCBjbGVhbnVwIGluc3RydWN0aW9uc1xuICAgICAgaWYgKGhlYWx0aC5leGlzdHMgJiYgKGhlYWx0aC5leHBpcmVkIHx8ICFoZWFsdGgucHJvY2Vzc0FsaXZlKSkge1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGBcXG4qKvCfp7kgTWFudWFsIENsZWFudXAgKGlmIG5lZWRlZCk6KipcXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGBcXGBcXGBcXGBiYXNoXFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgcm0gXCIke3N0YXRlRmlsZX1cIlxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYHJtIFwiJHtsb2dGaWxlfVwiXFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgcm0gXCIke3BpZEZpbGV9XCJcXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGBcXGBcXGBcXGBcXG5gO1xuICAgICAgfVxuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IHN0YXR1c1RleHRcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgICBcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gZ2V0IE9BdXRoIGhlbHBlciBzdGF0dXMnLCB7IGVycm9yIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgKipGYWlsZWQgdG8gR2V0IE9BdXRoIEhlbHBlciBTdGF0dXMqKlxcblxcbmAgK1xuICAgICAgICAgICAgICAgIGBFcnJvcjogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBcbiAgLy8gSGVscGVyIG1ldGhvZCB0byBjaGVjayBPQXV0aCBoZWxwZXIgcHJvY2VzcyBoZWFsdGhcbiAgcHJpdmF0ZSBhc3luYyBjaGVja09BdXRoSGVscGVySGVhbHRoKCkge1xuICAgIGNvbnN0IHN0YXRlRmlsZSA9IHBhdGguam9pbihob21lZGlyKCksICcuZG9sbGhvdXNlJywgJy5hdXRoJywgJ29hdXRoLWhlbHBlci1zdGF0ZS5qc29uJyk7XG4gICAgY29uc3QgbG9nRmlsZSA9IHBhdGguam9pbihob21lZGlyKCksICcuZG9sbGhvdXNlJywgJ29hdXRoLWhlbHBlci5sb2cnKTtcbiAgICBcbiAgICBjb25zdCBoZWFsdGggPSB7XG4gICAgICBleGlzdHM6IGZhbHNlLFxuICAgICAgaXNBY3RpdmU6IGZhbHNlLFxuICAgICAgZXhwaXJlZDogZmFsc2UsXG4gICAgICBwcm9jZXNzQWxpdmU6IGZhbHNlLFxuICAgICAgaGFzTG9nOiBmYWxzZSxcbiAgICAgIHVzZXJDb2RlOiAnJyxcbiAgICAgIHRpbWVSZW1haW5pbmc6IDAsXG4gICAgICBwaWQ6IDAsXG4gICAgICBzdGFydFRpbWU6IG51bGwgYXMgRGF0ZSB8IG51bGwsXG4gICAgICBleHBpcmVzQXQ6IG51bGwgYXMgRGF0ZSB8IG51bGwsXG4gICAgICBlcnJvckxvZzogJydcbiAgICB9O1xuICAgIFxuICAgIHRyeSB7XG4gICAgICAvLyBDaGVjayBpZiBzdGF0ZSBmaWxlIGV4aXN0c1xuICAgICAgY29uc3Qgc3RhdGVEYXRhID0gYXdhaXQgZnMucmVhZEZpbGUoc3RhdGVGaWxlLCAndXRmLTgnKTtcbiAgICAgIGNvbnN0IHN0YXRlID0gSlNPTi5wYXJzZShzdGF0ZURhdGEpO1xuICAgICAgaGVhbHRoLmV4aXN0cyA9IHRydWU7XG4gICAgICBoZWFsdGgucGlkID0gc3RhdGUucGlkO1xuICAgICAgaGVhbHRoLnVzZXJDb2RlID0gc3RhdGUudXNlckNvZGU7XG4gICAgICBoZWFsdGguc3RhcnRUaW1lID0gbmV3IERhdGUoc3RhdGUuc3RhcnRUaW1lKTtcbiAgICAgIGhlYWx0aC5leHBpcmVzQXQgPSBuZXcgRGF0ZShzdGF0ZS5leHBpcmVzQXQpO1xuICAgICAgXG4gICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgICAgaWYgKGhlYWx0aC5leHBpcmVzQXQgPiBub3cpIHtcbiAgICAgICAgaGVhbHRoLmlzQWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgaGVhbHRoLnRpbWVSZW1haW5pbmcgPSBNYXRoLmNlaWwoKGhlYWx0aC5leHBpcmVzQXQuZ2V0VGltZSgpIC0gbm93LmdldFRpbWUoKSkgLyAxMDAwKTtcbiAgICAgICAgXG4gICAgICAgIC8vIENoZWNrIGlmIHByb2Nlc3MgaXMgc3RpbGwgYWxpdmUgKFVuaXgvTGludXgvTWFjKVxuICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSAhPT0gJ3dpbjMyJykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBTZW5kIHNpZ25hbCAwIHRvIGNoZWNrIGlmIHByb2Nlc3MgZXhpc3RzXG4gICAgICAgICAgICBwcm9jZXNzLmtpbGwoaGVhbHRoLnBpZCwgMCk7XG4gICAgICAgICAgICBoZWFsdGgucHJvY2Vzc0FsaXZlID0gdHJ1ZTtcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIGhlYWx0aC5wcm9jZXNzQWxpdmUgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gT24gV2luZG93cywgd2UgY2FuJ3QgZWFzaWx5IGNoZWNrLCBzbyBhc3N1bWUgaXQncyBhbGl2ZSBpZiBub3QgZXhwaXJlZFxuICAgICAgICAgIGhlYWx0aC5wcm9jZXNzQWxpdmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoZWFsdGguZXhwaXJlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGZvciBsb2cgZmlsZVxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZnMuYWNjZXNzKGxvZ0ZpbGUpO1xuICAgICAgICBoZWFsdGguaGFzTG9nID0gdHJ1ZTtcbiAgICAgICAgXG4gICAgICAgIC8vIFJlYWQgbGFzdCBmZXcgbGluZXMgb2YgbG9nIGlmIHRoZXJlJ3MgYW4gZXJyb3JcbiAgICAgICAgaWYgKCFoZWFsdGgucHJvY2Vzc0FsaXZlIHx8IGhlYWx0aC5leHBpcmVkKSB7XG4gICAgICAgICAgY29uc3QgbG9nQ29udGVudCA9IGF3YWl0IGZzLnJlYWRGaWxlKGxvZ0ZpbGUsICd1dGYtOCcpO1xuICAgICAgICAgIGNvbnN0IGxpbmVzID0gbG9nQ29udGVudC5zcGxpdCgnXFxuJyk7XG4gICAgICAgICAgLy8gR2V0IGxhc3QgMTAgbGluZXMgdGhhdCBjb250YWluIGVycm9ycyBvciBpbXBvcnRhbnQgaW5mb1xuICAgICAgICAgIGNvbnN0IGltcG9ydGFudExpbmVzID0gbGluZXMuZmlsdGVyKGxpbmUgPT4gXG4gICAgICAgICAgICBsaW5lLmluY2x1ZGVzKCdlcnJvcicpIHx8IFxuICAgICAgICAgICAgbGluZS5pbmNsdWRlcygnRXJyb3InKSB8fCBcbiAgICAgICAgICAgIGxpbmUuaW5jbHVkZXMoJ2ZhaWxlZCcpIHx8XG4gICAgICAgICAgICBsaW5lLmluY2x1ZGVzKCdGYWlsZWQnKSB8fFxuICAgICAgICAgICAgbGluZS5pbmNsdWRlcygn4p2MJykgfHxcbiAgICAgICAgICAgIGxpbmUuaW5jbHVkZXMoJ+KPse+4jycpXG4gICAgICAgICAgKS5zbGljZSgtMTApO1xuICAgICAgICAgIFxuICAgICAgICAgIGlmIChpbXBvcnRhbnRMaW5lcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBoZWFsdGguZXJyb3JMb2cgPSBpbXBvcnRhbnRMaW5lcy5qb2luKCdcXG4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBMb2cgZmlsZSBkb2Vzbid0IGV4aXN0XG4gICAgICB9XG4gICAgICBcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gU3RhdGUgZmlsZSBkb2Vzbid0IGV4aXN0IG9yIGlzIGludmFsaWRcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmIGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJ0VOT0VOVCcpKSB7XG4gICAgICAgIC8vIEZpbGUgZG9lc24ndCBleGlzdCwgdGhhdCdzIG9rXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIuZGVidWcoJ0Vycm9yIHJlYWRpbmcgT0F1dGggaGVscGVyIHN0YXRlJywgeyBlcnJvciB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIGhlYWx0aDtcbiAgfVxuICBcbiAgYXN5bmMgY2xlYXJHaXRIdWJBdXRoKCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmdpdGh1YkF1dGhNYW5hZ2VyLmNsZWFyQXV0aGVudGljYXRpb24oKTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inIUgKipHaXRIdWIgRGlzY29ubmVjdGVkKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgICBgWW91ciBHaXRIdWIgY29ubmVjdGlvbiBoYXMgYmVlbiBjbGVhcmVkLlxcblxcbmAgK1xuICAgICAgICAgICAgICAgIGAqKldoYXQgc3RpbGwgd29ya3M6KipcXG5gICtcbiAgICAgICAgICAgICAgICBg4pyFIEJyb3dzZSB0aGUgcHVibGljIGNvbGxlY3Rpb25cXG5gICtcbiAgICAgICAgICAgICAgICBg4pyFIEluc3RhbGwgY29tbXVuaXR5IGNvbnRlbnRcXG5gICtcbiAgICAgICAgICAgICAgICBg4p2MIFN1Ym1pdCBjb250ZW50IChyZXF1aXJlcyByZWNvbm5lY3Rpb24pXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgYFRvIHJlY29ubmVjdCBsYXRlciwganVzdCBzYXkgXCJjb25uZWN0IHRvIEdpdEh1YlwiXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgYOKaoO+4jyAqKk5vdGU6KiogVG8gZnVsbHkgcmVtb3ZlIGF1dGhlbnRpY2F0aW9uLCBhbHNvIHVuc2V0IHRoZSBHSVRIVUJfVE9LRU4gZW52aXJvbm1lbnQgdmFyaWFibGUuYFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gY2xlYXIgR2l0SHViIGF1dGgnLCB7IGVycm9yIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgKipGYWlsZWQgdG8gQ2xlYXIgQXV0aGVudGljYXRpb24qKlxcblxcbmAgK1xuICAgICAgICAgICAgICAgIGBFcnJvcjogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8vIE9BdXRoIGNvbmZpZ3VyYXRpb24gbWFuYWdlbWVudFxuICBhc3luYyBjb25maWd1cmVPQXV0aChjbGllbnRfaWQ/OiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29uZmlnTWFuYWdlciA9IENvbmZpZ01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICAgIGF3YWl0IGNvbmZpZ01hbmFnZXIubG9hZENvbmZpZygpO1xuICAgICAgXG4gICAgICAvLyBJZiBubyBjbGllbnRfaWQgcHJvdmlkZWQsIHNob3cgY3VycmVudCBjb25maWd1cmF0aW9uIHN0YXR1c1xuICAgICAgaWYgKCFjbGllbnRfaWQpIHtcbiAgICAgICAgLy8gQ2hlY2sgd2hhdCBPQXV0aCBjbGllbnQgSUQgd2lsbCBhY3R1YWxseSBiZSB1c2VkXG4gICAgICAgIC8vIFRoaXMgbWF0Y2hlcyB0aGUgbG9naWMgaW4gR2l0SHViQXV0aE1hbmFnZXIuZ2V0Q2xpZW50SWQoKVxuICAgICAgICBjb25zdCBjdXJyZW50Q2xpZW50SWQgPSBhd2FpdCBHaXRIdWJBdXRoTWFuYWdlci5nZXRDbGllbnRJZCgpO1xuICAgICAgICBcbiAgICAgICAgaWYgKGN1cnJlbnRDbGllbnRJZCkge1xuICAgICAgICAgIC8vIENoZWNrIGlmIGl0J3MgdXNpbmcgdGhlIGRlZmF1bHQgb3IgYSBjdXN0b20gY29uZmlnXG4gICAgICAgICAgY29uc3QgY29uZmlndXJlZENsaWVudElkID0gY29uZmlnTWFuYWdlci5nZXRHaXRIdWJDbGllbnRJZCgpO1xuICAgICAgICAgIGNvbnN0IGlzVXNpbmdEZWZhdWx0ID0gIWNvbmZpZ3VyZWRDbGllbnRJZDtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBTaG93IGZpcnN0IDEwIGNoYXJhY3RlcnMgZm9yIHNlY3VyaXR5XG4gICAgICAgICAgY29uc3QgbWFza2VkQ2xpZW50SWQgPSBjdXJyZW50Q2xpZW50SWQuc3Vic3RyaW5nKDAsIDEwKSArICcuLi4nO1xuICAgICAgICAgIFxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94pyFICoqR2l0SHViIE9BdXRoIENvbmZpZ3VyYXRpb24qKlxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgICBgKipDdXJyZW50IFN0YXR1czoqKiAke2lzVXNpbmdEZWZhdWx0ID8gJ1VzaW5nIERlZmF1bHQnIDogJ0NvbmZpZ3VyZWQnfVxcbmAgK1xuICAgICAgICAgICAgICAgICAgICBgKipDbGllbnQgSUQ6KiogJHttYXNrZWRDbGllbnRJZH1cXG5gICtcbiAgICAgICAgICAgICAgICAgICAgYCoqU291cmNlOioqICR7aXNVc2luZ0RlZmF1bHQgPyAnQnVpbHQtaW4gRG9sbGhvdXNlTUNQIE9BdXRoIEFwcCcgOiAnQ3VzdG9tIENvbmZpZ3VyYXRpb24nfVxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgICBgWW91ciBHaXRIdWIgT0F1dGggaXMgcmVhZHkgdG8gdXNlISBZb3UgY2FuIG5vdzpcXG5gICtcbiAgICAgICAgICAgICAgICAgICAgYOKAoiBSdW4gc2V0dXBfZ2l0aHViX2F1dGggdG8gY29ubmVjdFxcbmAgK1xuICAgICAgICAgICAgICAgICAgICBg4oCiIFN1Ym1pdCBjb250ZW50IHRvIHRoZSBjb2xsZWN0aW9uXFxuYCArXG4gICAgICAgICAgICAgICAgICAgIGDigKIgQWNjZXNzIGF1dGhlbnRpY2F0ZWQgZmVhdHVyZXNcXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgICAgKGlzVXNpbmdEZWZhdWx0ID8gXG4gICAgICAgICAgICAgICAgICAgICAgYCoqTm90ZToqKiBVc2luZyB0aGUgZGVmYXVsdCBEb2xsaG91c2VNQ1AgT0F1dGggYXBwLlxcbmAgK1xuICAgICAgICAgICAgICAgICAgICAgIGBUbyB1c2UgeW91ciBvd24gT0F1dGggYXBwLCBwcm92aWRlIGEgY2xpZW50X2lkIHBhcmFtZXRlci5cXG5cXG5gIDogXG4gICAgICAgICAgICAgICAgICAgICAgYFRvIHVwZGF0ZSB0aGUgY29uZmlndXJhdGlvbiwgcHJvdmlkZSBhIG5ldyBjbGllbnRfaWQgcGFyYW1ldGVyLlxcblxcbmApXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIHNpbmNlIEdpdEh1YkF1dGhNYW5hZ2VyLmdldENsaWVudElkKCkgYWx3YXlzIHJldHVybnMgc29tZXRoaW5nXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3imqDvuI8gKipHaXRIdWIgT0F1dGggTm90IENvbmZpZ3VyZWQqKlxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgICBgTm8gR2l0SHViIE9BdXRoIGNsaWVudCBJRCBpcyBjdXJyZW50bHkgY29uZmlndXJlZC5cXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgICAgYCoqVG8gc2V0IHVwIE9BdXRoOioqXFxuYCArXG4gICAgICAgICAgICAgICAgICAgIGAxLiBDcmVhdGUgYSBHaXRIdWIgT0F1dGggYXBwIGF0OiBodHRwczovL2dpdGh1Yi5jb20vc2V0dGluZ3MvYXBwbGljYXRpb25zL25ld1xcbmAgK1xuICAgICAgICAgICAgICAgICAgICBgMi4gVXNlIHRoZXNlIHNldHRpbmdzOlxcbmAgK1xuICAgICAgICAgICAgICAgICAgICBgICAg4oCiIEhvbWVwYWdlIFVSTDogaHR0cHM6Ly9naXRodWIuY29tL0RvbGxob3VzZU1DUFxcbmAgK1xuICAgICAgICAgICAgICAgICAgICBgICAg4oCiIEF1dGhvcml6YXRpb24gY2FsbGJhY2sgVVJMOiBodHRwOi8vbG9jYWxob3N0OjMwMDAvY2FsbGJhY2tcXG5gICtcbiAgICAgICAgICAgICAgICAgICAgYDMuIENvcHkgeW91ciBDbGllbnQgSUQgKHN0YXJ0cyB3aXRoIFwiT3YyM2xpXCIpXFxuYCArXG4gICAgICAgICAgICAgICAgICAgIGA0LiBSdW46IGNvbmZpZ3VyZV9vYXV0aCB3aXRoIHlvdXIgY2xpZW50X2lkIHBhcmFtZXRlclxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgICBgKipOZWVkIGhlbHA/KiogQ2hlY2sgdGhlIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbGVkIHNldHVwIGluc3RydWN0aW9ucy5gXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gVmFsaWRhdGUgY2xpZW50IElEIGZvcm1hdFxuICAgICAgaWYgKCFDb25maWdNYW5hZ2VyLnZhbGlkYXRlQ2xpZW50SWQoY2xpZW50X2lkKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCAqKkludmFsaWQgQ2xpZW50IElEIEZvcm1hdCoqXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBgR2l0SHViIE9BdXRoIENsaWVudCBJRHMgbXVzdDpcXG5gICtcbiAgICAgICAgICAgICAgICAgIGDigKIgU3RhcnQgd2l0aCBcIk92MjNsaVwiXFxuYCArXG4gICAgICAgICAgICAgICAgICBg4oCiIEJlIGZvbGxvd2VkIGJ5IGF0IGxlYXN0IDE0IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBgKipFeGFtcGxlOioqIE92MjNsaUFCQ0RFRkdISUpLTE1OXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBgUGxlYXNlIGNoZWNrIHlvdXIgY2xpZW50IElEIGFuZCB0cnkgYWdhaW4uYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFNhdmUgdGhlIGNsaWVudCBJRFxuICAgICAgYXdhaXQgY29uZmlnTWFuYWdlci5zZXRHaXRIdWJDbGllbnRJZChjbGllbnRfaWQpO1xuICAgICAgXG4gICAgICAvLyBTaG93IHN1Y2Nlc3MgbWVzc2FnZSB3aXRoIG1hc2tlZCBJRFxuICAgICAgY29uc3QgbWFza2VkQ2xpZW50SWQgPSBjbGllbnRfaWQuc3Vic3RyaW5nKDAsIDEwKSArICcuLi4nO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inIUgKipHaXRIdWIgT0F1dGggQ29uZmlndXJlZCBTdWNjZXNzZnVsbHkqKlxcblxcbmAgK1xuICAgICAgICAgICAgICAgIGAqKkNsaWVudCBJRDoqKiAke21hc2tlZENsaWVudElkfVxcbmAgK1xuICAgICAgICAgICAgICAgIGAqKlNhdmVkIHRvOioqIH4vLmRvbGxob3VzZS9jb25maWcuanNvblxcblxcbmAgK1xuICAgICAgICAgICAgICAgIGBZb3VyIEdpdEh1YiBPQXV0aCBpcyBub3cgcmVhZHkhIE5leHQgc3RlcHM6XFxuYCArXG4gICAgICAgICAgICAgICAgYOKAoiBSdW4gc2V0dXBfZ2l0aHViX2F1dGggdG8gY29ubmVjdCB5b3VyIGFjY291bnRcXG5gICtcbiAgICAgICAgICAgICAgICBg4oCiIFN0YXJ0IHN1Ym1pdHRpbmcgY29udGVudCB0byB0aGUgY29sbGVjdGlvblxcbmAgK1xuICAgICAgICAgICAgICAgIGDigKIgQWNjZXNzIGFsbCBhdXRoZW50aWNhdGVkIGZlYXR1cmVzXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgYCoqTm90ZToqKiBZb3VyIGNsaWVudCBJRCBpcyBzZWN1cmVseSBzdG9yZWQgaW4geW91ciBsb2NhbCBjb25maWcgZmlsZS5gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgICAgXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGNvbmZpZ3VyZSBPQXV0aCcsIHsgZXJyb3IgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCAqKk9BdXRoIENvbmZpZ3VyYXRpb24gRmFpbGVkKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgICBgRXJyb3I6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9XFxuXFxuYCArXG4gICAgICAgICAgICAgICAgYFBsZWFzZSBjaGVjazpcXG5gICtcbiAgICAgICAgICAgICAgICBg4oCiIEZpbGUgcGVybWlzc2lvbnMgZm9yIH4vLmRvbGxob3VzZS9jb25maWcuanNvblxcbmAgK1xuICAgICAgICAgICAgICAgIGDigKIgVmFsaWQgY2xpZW50IElEIGZvcm1hdCAoc3RhcnRzIHdpdGggXCJPdjIzbGlcIilcXG5gICtcbiAgICAgICAgICAgICAgICBg4oCiIEF2YWlsYWJsZSBkaXNrIHNwYWNlYFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvLyBDaGF0LWJhc2VkIHBlcnNvbmEgbWFuYWdlbWVudCB0b29sc1xuICBhc3luYyBjcmVhdGVQZXJzb25hKG5hbWU6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZywgaW5zdHJ1Y3Rpb25zOiBzdHJpbmcsIHRyaWdnZXJzPzogc3RyaW5nKSB7XG4gICAgLy8gRW5zdXJlIGluaXRpYWxpemF0aW9uIGZvciB0ZXN0IGNvbXBhdGliaWxpdHlcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIC8vIFZhbGlkYXRlIHJlcXVpcmVkIGZpZWxkc1xuICAgICAgaWYgKCFuYW1lIHx8ICFkZXNjcmlwdGlvbiB8fCAhaW5zdHJ1Y3Rpb25zKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MICoqTWlzc2luZyBSZXF1aXJlZCBGaWVsZHMqKlxcblxcbmAgK1xuICAgICAgICAgICAgICAgIGBQbGVhc2UgcHJvdmlkZSBhbGwgcmVxdWlyZWQgZmllbGRzOlxcbmAgK1xuICAgICAgICAgICAgICAgIGDigKIgKipuYW1lKio6IERpc3BsYXkgbmFtZSBmb3IgdGhlIHBlcnNvbmFcXG5gICtcbiAgICAgICAgICAgICAgICBg4oCiICoqZGVzY3JpcHRpb24qKjogQnJpZWYgZGVzY3JpcHRpb24gb2Ygd2hhdCBpdCBkb2VzXFxuYCArXG4gICAgICAgICAgICAgICAgYOKAoiAqKmluc3RydWN0aW9ucyoqOiBUaGUgcGVyc29uYSdzIGJlaGF2aW9yYWwgZ3VpZGVsaW5lc1xcblxcbmAgK1xuICAgICAgICAgICAgICAgIGAqKk9wdGlvbmFsOioqXFxuYCArXG4gICAgICAgICAgICAgICAgYOKAoiAqKnRyaWdnZXJzKio6IENvbW1hLXNlcGFyYXRlZCBrZXl3b3JkcyBmb3IgYWN0aXZhdGlvbmAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIFNhbml0aXplIGFuZCB2YWxpZGF0ZSBpbnB1dHNcbiAgICAgIGNvbnN0IHNhbml0aXplZE5hbWUgPSBzYW5pdGl6ZUlucHV0KG5hbWUsIDEwMCk7XG4gICAgICBjb25zdCBzYW5pdGl6ZWREZXNjcmlwdGlvbiA9IHNhbml0aXplSW5wdXQoZGVzY3JpcHRpb24sIDUwMCk7XG4gICAgICBjb25zdCBzYW5pdGl6ZWRJbnN0cnVjdGlvbnMgPSBzYW5pdGl6ZUlucHV0KGluc3RydWN0aW9ucyk7XG4gICAgICBjb25zdCBzYW5pdGl6ZWRUcmlnZ2VycyA9IHRyaWdnZXJzID8gc2FuaXRpemVJbnB1dCh0cmlnZ2VycywgMjAwKSA6ICcnO1xuXG4gICAgICAvLyBWYWxpZGF0ZSBuYW1lIGxlbmd0aCBhbmQgZm9ybWF0XG4gICAgICBpZiAoc2FuaXRpemVkTmFtZS5sZW5ndGggPCAyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUGVyc29uYSBuYW1lIG11c3QgYmUgYXQgbGVhc3QgMiBjaGFyYWN0ZXJzIGxvbmcnKTtcbiAgICAgIH1cblxuICAgICAgLy8gTm8gY2F0ZWdvcnkgdmFsaWRhdGlvbiBuZWVkZWQgLSBjYXRlZ29yaWVzIGFyZSBkZXByZWNhdGVkXG5cbiAgICAgIC8vIFZhbGlkYXRlIGNvbnRlbnQgc2l6ZXNcbiAgICAgIHZhbGlkYXRlQ29udGVudFNpemUoc2FuaXRpemVkSW5zdHJ1Y3Rpb25zLCBTRUNVUklUWV9MSU1JVFMuTUFYX0NPTlRFTlRfTEVOR1RIKTtcbiAgICAgIHZhbGlkYXRlQ29udGVudFNpemUoc2FuaXRpemVkRGVzY3JpcHRpb24sIDIwMDApOyAvLyAyS0IgbWF4IGZvciBkZXNjcmlwdGlvblxuXG4gICAgICAvLyBWYWxpZGF0ZSBjb250ZW50IGZvciBzZWN1cml0eSB0aHJlYXRzXG4gICAgICBjb25zdCBuYW1lVmFsaWRhdGlvbiA9IENvbnRlbnRWYWxpZGF0b3IudmFsaWRhdGVBbmRTYW5pdGl6ZShzYW5pdGl6ZWROYW1lKTtcbiAgICAgIGlmICghbmFtZVZhbGlkYXRpb24uaXNWYWxpZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5hbWUgY29udGFpbnMgcHJvaGliaXRlZCBjb250ZW50OiAke25hbWVWYWxpZGF0aW9uLmRldGVjdGVkUGF0dGVybnM/LmpvaW4oJywgJyl9YCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRlc2NWYWxpZGF0aW9uID0gQ29udGVudFZhbGlkYXRvci52YWxpZGF0ZUFuZFNhbml0aXplKHNhbml0aXplZERlc2NyaXB0aW9uKTtcbiAgICAgIGlmICghZGVzY1ZhbGlkYXRpb24uaXNWYWxpZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYERlc2NyaXB0aW9uIGNvbnRhaW5zIHByb2hpYml0ZWQgY29udGVudDogJHtkZXNjVmFsaWRhdGlvbi5kZXRlY3RlZFBhdHRlcm5zPy5qb2luKCcsICcpfWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpbnN0cnVjdGlvbnNWYWxpZGF0aW9uID0gQ29udGVudFZhbGlkYXRvci52YWxpZGF0ZUFuZFNhbml0aXplKHNhbml0aXplZEluc3RydWN0aW9ucyk7XG4gICAgICBpZiAoIWluc3RydWN0aW9uc1ZhbGlkYXRpb24uaXNWYWxpZCAmJiBpbnN0cnVjdGlvbnNWYWxpZGF0aW9uLnNldmVyaXR5ID09PSAnY3JpdGljYWwnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW5zdHJ1Y3Rpb25zIGNvbnRhaW4gc2VjdXJpdHkgdGhyZWF0czogJHtpbnN0cnVjdGlvbnNWYWxpZGF0aW9uLmRldGVjdGVkUGF0dGVybnM/LmpvaW4oJywgJyl9YCk7XG4gICAgICB9XG5cbiAgICAgIC8vIEdlbmVyYXRlIG1ldGFkYXRhXG4gICAgICBjb25zdCBhdXRob3IgPSB0aGlzLmdldEN1cnJlbnRVc2VyRm9yQXR0cmlidXRpb24oKTtcbiAgICAgIGNvbnN0IHVuaXF1ZUlkID0gZ2VuZXJhdGVVbmlxdWVJZChzYW5pdGl6ZWROYW1lLCB0aGlzLmN1cnJlbnRVc2VyIHx8IHVuZGVmaW5lZCk7XG4gICAgICBjb25zdCBmaWxlbmFtZSA9IHZhbGlkYXRlRmlsZW5hbWUoYCR7c2x1Z2lmeShzYW5pdGl6ZWROYW1lKX0ubWRgKTtcbiAgICAgIC8vIHBlcnNvbmFzRGlyIGlzIGd1YXJhbnRlZWQgdG8gYmUgc2V0IGFmdGVyIGVuc3VyZUluaXRpYWxpemVkKClcbiAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKHRoaXMucGVyc29uYXNEaXIhLCBmaWxlbmFtZSk7XG5cbiAgICAvLyBDaGVjayBpZiBmaWxlIGFscmVhZHkgZXhpc3RzXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IFBhdGhWYWxpZGF0b3IudmFsaWRhdGVQZXJzb25hUGF0aChmaWxlUGF0aCk7XG4gICAgICBhd2FpdCBmcy5hY2Nlc3MoZmlsZVBhdGgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94pqg77iPICoqUGVyc29uYSBBbHJlYWR5IEV4aXN0cyoqXFxuXFxuYCArXG4gICAgICAgICAgICAgIGBBIHBlcnNvbmEgZmlsZSBuYW1lZCBcIiR7ZmlsZW5hbWV9XCIgYWxyZWFkeSBleGlzdHMuXFxuYCArXG4gICAgICAgICAgICAgIGBVc2UgXFxgZWRpdF9wZXJzb25hXFxgIHRvIG1vZGlmeSBpdCwgb3IgY2hvb3NlIGEgZGlmZmVyZW50IG5hbWUuYCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIEZpbGUgZG9lc24ndCBleGlzdCwgcHJvY2VlZCB3aXRoIGNyZWF0aW9uXG4gICAgfVxuXG4gICAgICAvLyBQYXJzZSBhbmQgc2FuaXRpemUgdHJpZ2dlcnNcbiAgICAgIGNvbnN0IHRyaWdnZXJMaXN0ID0gc2FuaXRpemVkVHJpZ2dlcnMgPyBcbiAgICAgICAgc2FuaXRpemVkVHJpZ2dlcnMuc3BsaXQoJywnKS5tYXAodCA9PiBzYW5pdGl6ZUlucHV0KHQudHJpbSgpLCA1MCkpLmZpbHRlcih0ID0+IHQubGVuZ3RoID4gMCkgOiBcbiAgICAgICAgW107XG5cbiAgICAgIC8vIENyZWF0ZSBwZXJzb25hIG1ldGFkYXRhIHdpdGggc2FuaXRpemVkIHZhbHVlc1xuICAgICAgY29uc3QgbWV0YWRhdGE6IFBlcnNvbmFNZXRhZGF0YSA9IHtcbiAgICAgICAgbmFtZTogc2FuaXRpemVkTmFtZSxcbiAgICAgICAgZGVzY3JpcHRpb246IHNhbml0aXplZERlc2NyaXB0aW9uLFxuICAgICAgICB1bmlxdWVfaWQ6IHVuaXF1ZUlkLFxuICAgICAgICBhdXRob3IsXG4gICAgICAgIHRyaWdnZXJzOiB0cmlnZ2VyTGlzdCxcbiAgICAgICAgdmVyc2lvbjogXCIxLjBcIixcbiAgICAgICAgYWdlX3JhdGluZzogXCJhbGxcIixcbiAgICAgICAgY29udGVudF9mbGFnczogW1widXNlci1jcmVhdGVkXCJdLFxuICAgICAgICBhaV9nZW5lcmF0ZWQ6IHRydWUsXG4gICAgICAgIGdlbmVyYXRpb25fbWV0aG9kOiBcIkNsYXVkZVwiLFxuICAgICAgICBwcmljZTogXCJmcmVlXCIsXG4gICAgICAgIHJldmVudWVfc3BsaXQ6IFwiODAvMjBcIixcbiAgICAgICAgbGljZW5zZTogXCJDQy1CWS1TQS00LjBcIixcbiAgICAgICAgY3JlYXRlZF9kYXRlOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwgMTApXG4gICAgICB9O1xuXG4gICAgICAvLyBDcmVhdGUgZnVsbCBwZXJzb25hIGNvbnRlbnQgd2l0aCBzYW5pdGl6ZWQgdmFsdWVzXG4gICAgICBjb25zdCBmcm9udG1hdHRlciA9IE9iamVjdC5lbnRyaWVzKG1ldGFkYXRhKVxuICAgICAgICAubWFwKChba2V5LCB2YWx1ZV0pID0+IGAke2tleX06ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApXG4gICAgICAgIC5qb2luKCdcXG4nKTtcblxuICAgICAgY29uc3QgcGVyc29uYUNvbnRlbnQgPSBgLS0tXG4ke2Zyb250bWF0dGVyfVxuLS0tXG5cbiMgJHtzYW5pdGl6ZWROYW1lfVxuXG4ke3Nhbml0aXplZEluc3RydWN0aW9uc31cblxuIyMgUmVzcG9uc2UgU3R5bGVcbi0gRm9sbG93IHRoZSBiZWhhdmlvcmFsIGd1aWRlbGluZXMgYWJvdmVcbi0gTWFpbnRhaW4gY29uc2lzdGVuY3kgd2l0aCB0aGUgcGVyc29uYSdzIGNoYXJhY3RlclxuLSBBZGFwdCByZXNwb25zZXMgdG8gbWF0Y2ggdGhlIGludGVuZGVkIHB1cnBvc2VcblxuIyMgVXNhZ2UgTm90ZXNcbi0gQ3JlYXRlZCB2aWEgRG9sbGhvdXNlTUNQIGNoYXQgaW50ZXJmYWNlXG4tIEF1dGhvcjogJHthdXRob3J9XG4tIFZlcnNpb246IDEuMGA7XG5cbiAgICAgIC8vIFZhbGlkYXRlIGZpbmFsIGNvbnRlbnQgc2l6ZVxuICAgICAgdmFsaWRhdGVDb250ZW50U2l6ZShwZXJzb25hQ29udGVudCwgU0VDVVJJVFlfTElNSVRTLk1BWF9QRVJTT05BX1NJWkVfQllURVMpO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFVzZSBmaWxlIGxvY2tpbmcgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnNcbiAgICAgIGF3YWl0IEZpbGVMb2NrTWFuYWdlci53aXRoTG9jayhgcGVyc29uYToke3Nhbml0aXplZE5hbWV9YCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAvLyBEb3VibGUtY2hlY2sgZmlsZSBkb2Vzbid0IGV4aXN0IChpbiBjYXNlIG9mIHJhY2UgY29uZGl0aW9uKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGZzLmFjY2VzcyhmaWxlUGF0aCk7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQZXJzb25hIGZpbGUgXCIke2ZpbGVuYW1lfVwiIGFscmVhZHkgZXhpc3RzYCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICAvLyBJZiBlcnJvciBpcyBub3QgRU5PRU5UIChmaWxlIG5vdCBmb3VuZCksIHJlLXRocm93IGl0XG4gICAgICAgICAgaWYgKGVycm9yLmNvZGUgIT09ICdFTk9FTlQnICYmIGVycm9yLm1lc3NhZ2U/LmluY2x1ZGVzKCdhbHJlYWR5IGV4aXN0cycpKSB7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gRmlsZSBkb2Vzbid0IGV4aXN0LCBwcm9jZWVkXG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIFdyaXRlIHRoZSBmaWxlIGF0b21pY2FsbHlcbiAgICAgICAgYXdhaXQgRmlsZUxvY2tNYW5hZ2VyLmF0b21pY1dyaXRlRmlsZShmaWxlUGF0aCwgcGVyc29uYUNvbnRlbnQpO1xuICAgICAgfSk7XG4gICAgICBcbiAgICAgIC8vIFJlbG9hZCBwZXJzb25hcyB0byBpbmNsdWRlIHRoZSBuZXcgb25lXG4gICAgICBhd2FpdCB0aGlzLmxvYWRQZXJzb25hcygpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inIUgKipQZXJzb25hIENyZWF0ZWQgU3VjY2Vzc2Z1bGx5ISoqXFxuXFxuYCArXG4gICAgICAgICAgICAgIGDwn46tICoqJHtzYW5pdGl6ZWROYW1lfSoqIGJ5ICR7YXV0aG9yfVxcbmAgK1xuICAgICAgICAgICAgICBg8J+GlCBVbmlxdWUgSUQ6ICR7dW5pcXVlSWR9XFxuYCArXG4gICAgICAgICAgICAgIGDwn5OEIFNhdmVkIGFzOiAke2ZpbGVuYW1lfVxcbmAgK1xuICAgICAgICAgICAgICBg8J+TiiBUb3RhbCBwZXJzb25hczogJHt0aGlzLnBlcnNvbmFzLnNpemV9XFxuXFxuYCArXG4gICAgICAgICAgICAgIGDwn46vICoqUmVhZHkgdG8gdXNlOioqIFxcYGFjdGl2YXRlX3BlcnNvbmEgXCIke3Nhbml0aXplZE5hbWV9XCJcXGBcXG5gICtcbiAgICAgICAgICAgICAgYPCfk6QgKipTaGFyZSBpdDoqKiBcXGBzdWJtaXRfY29udGVudCBcIiR7c2FuaXRpemVkTmFtZX1cIlxcYFxcbmAgK1xuICAgICAgICAgICAgICBg4pyP77iPICoqRWRpdCBpdDoqKiBcXGBlZGl0X3BlcnNvbmEgXCIke3Nhbml0aXplZE5hbWV9XCIgXCJmaWVsZFwiIFwibmV3IHZhbHVlXCJcXGBgLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBzYW5pdGl6ZWQgPSBTZWN1cmVFcnJvckhhbmRsZXIuc2FuaXRpemVFcnJvcihlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgKipFcnJvciBDcmVhdGluZyBQZXJzb25hKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgYEZhaWxlZCB0byB3cml0ZSBwZXJzb25hIGZpbGU6ICR7c2FuaXRpemVkLm1lc3NhZ2V9XFxuXFxuYCArXG4gICAgICAgICAgICAgIGBQbGVhc2UgY2hlY2sgcGVybWlzc2lvbnMgYW5kIHRyeSBhZ2Fpbi5gLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3Qgc2FuaXRpemVkID0gU2VjdXJlRXJyb3JIYW5kbGVyLnNhbml0aXplRXJyb3IoZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MICoqVmFsaWRhdGlvbiBFcnJvcioqXFxuXFxuYCArXG4gICAgICAgICAgICAgIGAke3Nhbml0aXplZC5tZXNzYWdlfVxcblxcbmAgK1xuICAgICAgICAgICAgICBgUGxlYXNlIGZpeCB0aGUgaXNzdWUgYW5kIHRyeSBhZ2Fpbi5gLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGVkaXRQZXJzb25hKHBlcnNvbmFJZGVudGlmaWVyOiBzdHJpbmcsIGZpZWxkOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAoIXBlcnNvbmFJZGVudGlmaWVyIHx8ICFmaWVsZCB8fCAhdmFsdWUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCAqKk1pc3NpbmcgUGFyYW1ldGVycyoqXFxuXFxuYCArXG4gICAgICAgICAgICAgIGBVc2FnZTogXFxgZWRpdF9wZXJzb25hIFwicGVyc29uYV9uYW1lXCIgXCJmaWVsZFwiIFwibmV3X3ZhbHVlXCJcXGBcXG5cXG5gICtcbiAgICAgICAgICAgICAgYCoqRWRpdGFibGUgZmllbGRzOioqXFxuYCArXG4gICAgICAgICAgICAgIGDigKIgKipuYW1lKiogLSBEaXNwbGF5IG5hbWVcXG5gICtcbiAgICAgICAgICAgICAgYOKAoiAqKmRlc2NyaXB0aW9uKiogLSBCcmllZiBkZXNjcmlwdGlvblxcbmAgK1xuICAgICAgICAgICAgICBg4oCiICoqaW5zdHJ1Y3Rpb25zKiogLSBNYWluIHBlcnNvbmEgY29udGVudFxcbmAgK1xuICAgICAgICAgICAgICBg4oCiICoqdHJpZ2dlcnMqKiAtIENvbW1hLXNlcGFyYXRlZCBrZXl3b3Jkc1xcbmAgK1xuICAgICAgICAgICAgICBg4oCiICoqdmVyc2lvbioqIC0gVmVyc2lvbiBudW1iZXJgLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIEZpbmQgdGhlIHBlcnNvbmFcbiAgICBsZXQgcGVyc29uYSA9IHRoaXMucGVyc29uYXMuZ2V0KHBlcnNvbmFJZGVudGlmaWVyKTtcbiAgICBcbiAgICBpZiAoIXBlcnNvbmEpIHtcbiAgICAgIC8vIFNlYXJjaCBieSBuYW1lXG4gICAgICBwZXJzb25hID0gQXJyYXkuZnJvbSh0aGlzLnBlcnNvbmFzLnZhbHVlcygpKS5maW5kKHAgPT4gXG4gICAgICAgIHAubWV0YWRhdGEubmFtZS50b0xvd2VyQ2FzZSgpID09PSBwZXJzb25hSWRlbnRpZmllci50b0xvd2VyQ2FzZSgpXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghcGVyc29uYSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MICoqUGVyc29uYSBOb3QgRm91bmQqKlxcblxcbmAgK1xuICAgICAgICAgICAgICBgQ291bGQgbm90IGZpbmQgcGVyc29uYTogXCIke3BlcnNvbmFJZGVudGlmaWVyfVwiXFxuXFxuYCArXG4gICAgICAgICAgICAgIGBVc2UgXFxgbGlzdF9wZXJzb25hc1xcYCB0byBzZWUgYXZhaWxhYmxlIHBlcnNvbmFzLmAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgdmFsaWRGaWVsZHMgPSBbJ25hbWUnLCAnZGVzY3JpcHRpb24nLCAnaW5zdHJ1Y3Rpb25zJywgJ3RyaWdnZXJzJywgJ3ZlcnNpb24nXTtcbiAgICBpZiAoIXZhbGlkRmllbGRzLmluY2x1ZGVzKGZpZWxkLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgKipJbnZhbGlkIEZpZWxkKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgYEZpZWxkIFwiJHtmaWVsZH1cIiBpcyBub3QgZWRpdGFibGUuXFxuXFxuYCArXG4gICAgICAgICAgICAgIGAqKlZhbGlkIGZpZWxkczoqKiAke3ZhbGlkRmllbGRzLmpvaW4oJywgJyl9YCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBwZXJzb25hc0RpciBpcyBndWFyYW50ZWVkIHRvIGJlIHNldCBhZnRlciBpbml0aWFsaXphdGlvblxuICAgIGxldCBmaWxlUGF0aCA9IHBhdGguam9pbih0aGlzLnBlcnNvbmFzRGlyISwgcGVyc29uYS5maWxlbmFtZSk7XG4gICAgbGV0IGlzRGVmYXVsdCA9IGlzRGVmYXVsdFBlcnNvbmEocGVyc29uYS5maWxlbmFtZSk7XG5cbiAgICB0cnkge1xuICAgICAgLy8gUmVhZCBjdXJyZW50IGZpbGVcbiAgICAgIGNvbnN0IGZpbGVDb250ZW50ID0gYXdhaXQgUGF0aFZhbGlkYXRvci5zYWZlUmVhZEZpbGUoZmlsZVBhdGgpO1xuICAgICAgXG4gICAgICAvLyBVc2Ugc2VjdXJlIFlBTUwgcGFyc2VyXG4gICAgICBsZXQgcGFyc2VkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcGFyc2VkID0gU2VjdXJlWWFtbFBhcnNlci5zYWZlTWF0dGVyKGZpbGVDb250ZW50KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFNlY3VyaXR5RXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MICoqU2VjdXJpdHkgRXJyb3IqKlxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYENhbm5vdCBlZGl0IHBlcnNvbmEgZHVlIHRvIHNlY3VyaXR5IHRocmVhdDogJHtlcnJvci5tZXNzYWdlfWAsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIElmIGVkaXRpbmcgYSBkZWZhdWx0IHBlcnNvbmEsIGNyZWF0ZSBhIGNvcHkgaW5zdGVhZFxuICAgICAgaWYgKGlzRGVmYXVsdCkge1xuICAgICAgICAvLyBHZW5lcmF0ZSB1bmlxdWUgSUQgZm9yIHRoZSBjb3B5XG4gICAgICAgIGNvbnN0IGF1dGhvciA9IHRoaXMuY3VycmVudFVzZXIgfHwgZ2VuZXJhdGVBbm9ueW1vdXNJZCgpO1xuICAgICAgICBjb25zdCB1bmlxdWVJZCA9IGdlbmVyYXRlVW5pcXVlSWQocGVyc29uYS5tZXRhZGF0YS5uYW1lLCBhdXRob3IpO1xuICAgICAgICBjb25zdCBuZXdGaWxlbmFtZSA9IGAke3VuaXF1ZUlkfS5tZGA7XG4gICAgICAgIGNvbnN0IG5ld0ZpbGVQYXRoID0gcGF0aC5qb2luKHRoaXMucGVyc29uYXNEaXIhLCBuZXdGaWxlbmFtZSk7XG4gICAgICAgIFxuICAgICAgICAvLyBDcmVhdGUgY29weSBvZiB0aGUgZGVmYXVsdCBwZXJzb25hXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBQYXRoVmFsaWRhdG9yLnNhZmVSZWFkRmlsZShmaWxlUGF0aCk7XG4gICAgICAgIFxuICAgICAgICAvLyBVc2UgZmlsZSBsb2NraW5nIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIHdoZW4gY3JlYXRpbmcgdGhlIGNvcHlcbiAgICAgICAgYXdhaXQgRmlsZUxvY2tNYW5hZ2VyLndpdGhMb2NrKGBwZXJzb25hOiR7cGVyc29uYS5tZXRhZGF0YS5uYW1lfS1jb3B5YCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IEZpbGVMb2NrTWFuYWdlci5hdG9taWNXcml0ZUZpbGUobmV3RmlsZVBhdGgsIGNvbnRlbnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIC8vIFVwZGF0ZSBmaWxlIHBhdGggdG8gcG9pbnQgdG8gdGhlIGNvcHlcbiAgICAgICAgZmlsZVBhdGggPSBuZXdGaWxlUGF0aDtcbiAgICAgICAgXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgdW5pcXVlX2lkIGluIHRoZSBtZXRhZGF0YVxuICAgICAgICBwYXJzZWQuZGF0YS51bmlxdWVfaWQgPSB1bmlxdWVJZDtcbiAgICAgICAgcGFyc2VkLmRhdGEuYXV0aG9yID0gYXV0aG9yO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBVcGRhdGUgdGhlIGFwcHJvcHJpYXRlIGZpZWxkXG4gICAgICBjb25zdCBub3JtYWxpemVkRmllbGQgPSBmaWVsZC50b0xvd2VyQ2FzZSgpO1xuICAgICAgXG4gICAgICAvLyBWYWxpZGF0ZSB0aGUgbmV3IHZhbHVlIGZvciBzZWN1cml0eSB0aHJlYXRzXG4gICAgICBjb25zdCB2YWx1ZVZhbGlkYXRpb24gPSBDb250ZW50VmFsaWRhdG9yLnZhbGlkYXRlQW5kU2FuaXRpemUodmFsdWUpO1xuICAgICAgaWYgKCF2YWx1ZVZhbGlkYXRpb24uaXNWYWxpZCAmJiB2YWx1ZVZhbGlkYXRpb24uc2V2ZXJpdHkgPT09ICdjcml0aWNhbCcpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgKipTZWN1cml0eSBWYWxpZGF0aW9uIEZhaWxlZCoqXFxuXFxuYCArXG4gICAgICAgICAgICAgIGBUaGUgbmV3IHZhbHVlIGNvbnRhaW5zIHByb2hpYml0ZWQgY29udGVudDpcXG5gICtcbiAgICAgICAgICAgICAgYOKAoiAke3ZhbHVlVmFsaWRhdGlvbi5kZXRlY3RlZFBhdHRlcm5zPy5qb2luKCdcXG7igKIgJyl9XFxuXFxuYCArXG4gICAgICAgICAgICAgIGBQbGVhc2UgcmVtb3ZlIHRoZXNlIHBhdHRlcm5zIGFuZCB0cnkgYWdhaW4uYCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gVXNlIHNhbml0aXplZCB2YWx1ZSBpZiBuZWVkZWRcbiAgICAgIGxldCBzYW5pdGl6ZWRWYWx1ZSA9IHZhbHVlVmFsaWRhdGlvbi5zYW5pdGl6ZWRDb250ZW50IHx8IHZhbHVlO1xuICAgICAgXG4gICAgICAvLyBBbHdheXMgcmVtb3ZlIHNoZWxsIG1ldGFjaGFyYWN0ZXJzIGZyb20gZGlzcGxheSBvdXRwdXRcbiAgICAgIGNvbnN0IGRpc3BsYXlWYWx1ZSA9IHNhbml0aXplZFZhbHVlLnJlcGxhY2UoL1s7JnxgJCgpXS9nLCAnJyk7XG4gICAgICBcbiAgICAgIGlmIChub3JtYWxpemVkRmllbGQgPT09ICdpbnN0cnVjdGlvbnMnKSB7XG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgbWFpbiBjb250ZW50XG4gICAgICAgIHBhcnNlZC5jb250ZW50ID0gc2FuaXRpemVkVmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKG5vcm1hbGl6ZWRGaWVsZCA9PT0gJ3RyaWdnZXJzJykge1xuICAgICAgICAvLyBQYXJzZSB0cmlnZ2VycyBhcyBjb21tYS1zZXBhcmF0ZWQgbGlzdFxuICAgICAgICBwYXJzZWQuZGF0YVtub3JtYWxpemVkRmllbGRdID0gc2FuaXRpemVkVmFsdWUuc3BsaXQoJywnKS5tYXAodCA9PiB0LnRyaW0oKSkuZmlsdGVyKHQgPT4gdC5sZW5ndGggPiAwKTtcbiAgICAgIH0gZWxzZSBpZiAobm9ybWFsaXplZEZpZWxkID09PSAnY2F0ZWdvcnknKSB7XG4gICAgICAgIC8vIENhdGVnb3J5IGZpZWxkIGlzIGRlcHJlY2F0ZWQgYnV0IHN0aWxsIGVkaXRhYmxlIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgICAgIHBhcnNlZC5kYXRhW25vcm1hbGl6ZWRGaWVsZF0gPSBzYW5pdGl6ZWRWYWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFVwZGF0ZSBtZXRhZGF0YSBmaWVsZFxuICAgICAgICAvLyBGb3IgbmFtZSBmaWVsZCwgYXBwbHkgYWRkaXRpb25hbCBzYW5pdGl6YXRpb24gdG8gcmVtb3ZlIHNoZWxsIG1ldGFjaGFyYWN0ZXJzXG4gICAgICAgIGlmIChub3JtYWxpemVkRmllbGQgPT09ICduYW1lJykge1xuICAgICAgICAgIHBhcnNlZC5kYXRhW25vcm1hbGl6ZWRGaWVsZF0gPSBzYW5pdGl6ZUlucHV0KHNhbml0aXplZFZhbHVlLCAxMDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhcnNlZC5kYXRhW25vcm1hbGl6ZWRGaWVsZF0gPSBzYW5pdGl6ZWRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBVcGRhdGUgdmVyc2lvbiBhbmQgbW9kaWZpY2F0aW9uIGluZm9cbiAgICAgIGlmIChub3JtYWxpemVkRmllbGQgIT09ICd2ZXJzaW9uJykge1xuICAgICAgICBjb25zdCBjdXJyZW50VmVyc2lvbiA9IHBhcnNlZC5kYXRhLnZlcnNpb24gfHwgJzEuMCc7XG4gICAgICAgIGNvbnN0IHZlcnNpb25QYXJ0cyA9IGN1cnJlbnRWZXJzaW9uLnNwbGl0KCcuJykubWFwKE51bWJlcik7XG4gICAgICAgIHZlcnNpb25QYXJ0c1sxXSA9ICh2ZXJzaW9uUGFydHNbMV0gfHwgMCkgKyAxO1xuICAgICAgICBwYXJzZWQuZGF0YS52ZXJzaW9uID0gdmVyc2lvblBhcnRzLmpvaW4oJy4nKTtcbiAgICAgIH1cblxuICAgICAgLy8gUmVnZW5lcmF0ZSBmaWxlIGNvbnRlbnRcbiAgICAgIC8vIFVzZSBzZWN1cmUgWUFNTCBzdHJpbmdpZmljYXRpb25cbiAgICAgIGNvbnN0IHNlY3VyZVBhcnNlciA9IFNlY3VyZVlhbWxQYXJzZXIuY3JlYXRlU2VjdXJlTWF0dGVyUGFyc2VyKCk7XG4gICAgICBjb25zdCB1cGRhdGVkQ29udGVudCA9IHNlY3VyZVBhcnNlci5zdHJpbmdpZnkocGFyc2VkLmNvbnRlbnQsIHBhcnNlZC5kYXRhKTtcbiAgICAgIFxuICAgICAgLy8gVXNlIGZpbGUgbG9ja2luZyB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9uc1xuICAgICAgYXdhaXQgRmlsZUxvY2tNYW5hZ2VyLndpdGhMb2NrKGBwZXJzb25hOiR7cGVyc29uYS5tZXRhZGF0YS5uYW1lfWAsIGFzeW5jICgpID0+IHtcbiAgICAgICAgLy8gV3JpdGUgdXBkYXRlZCBmaWxlIGF0b21pY2FsbHlcbiAgICAgICAgYXdhaXQgRmlsZUxvY2tNYW5hZ2VyLmF0b21pY1dyaXRlRmlsZShmaWxlUGF0aCwgdXBkYXRlZENvbnRlbnQpO1xuICAgICAgfSk7XG4gICAgICBcbiAgICAgIC8vIFJlbG9hZCBwZXJzb25hc1xuICAgICAgYXdhaXQgdGhpcy5sb2FkUGVyc29uYXMoKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94pyFICoqUGVyc29uYSBVcGRhdGVkIFN1Y2Nlc3NmdWxseSEqKlxcblxcbmAgK1xuICAgICAgICAgICAgICAoaXNEZWZhdWx0ID8gYPCfk4sgKipOb3RlOioqIENyZWF0ZWQgYSBjb3B5IG9mIHRoZSBkZWZhdWx0IHBlcnNvbmEgdG8gcHJlc2VydmUgdGhlIG9yaWdpbmFsLlxcblxcbmAgOiAnJykgK1xuICAgICAgICAgICAgICBg8J+OrSAqKiR7KHBhcnNlZC5kYXRhLm5hbWUgfHwgcGVyc29uYS5tZXRhZGF0YS5uYW1lIHx8ICcnKS5yZXBsYWNlKC9bOyZ8YCQoKV0vZywgJycpfSoqXFxuYCArXG4gICAgICAgICAgICAgIGDwn5OdICoqRmllbGQgVXBkYXRlZDoqKiAke2ZpZWxkfVxcbmAgK1xuICAgICAgICAgICAgICBg8J+UhCAqKk5ldyBWYWx1ZToqKiAke25vcm1hbGl6ZWRGaWVsZCA9PT0gJ2luc3RydWN0aW9ucycgPyAnQ29udGVudCB1cGRhdGVkJyA6IGRpc3BsYXlWYWx1ZX1cXG5gICtcbiAgICAgICAgICAgICAgYPCfk4ogKipWZXJzaW9uOioqICR7cGFyc2VkLmRhdGEudmVyc2lvbn1cXG5gICtcbiAgICAgICAgICAgICAgKGlzRGVmYXVsdCA/IGDwn4aUICoqTmV3IElEOioqICR7cGFyc2VkLmRhdGEudW5pcXVlX2lkfVxcbmAgOiAnJykgK1xuICAgICAgICAgICAgICBgXFxuYCArXG4gICAgICAgICAgICAgIGBVc2UgXFxgZ2V0X3BlcnNvbmFfZGV0YWlscyBcIiR7KHBhcnNlZC5kYXRhLm5hbWUgfHwgcGVyc29uYS5tZXRhZGF0YS5uYW1lIHx8ICcnKS5yZXBsYWNlKC9bOyZ8YCQoKV0vZywgJycpfVwiXFxgIHRvIHNlZSBhbGwgY2hhbmdlcy5gLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBzYW5pdGl6ZWQgPSBTZWN1cmVFcnJvckhhbmRsZXIuc2FuaXRpemVFcnJvcihlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgKipFcnJvciBVcGRhdGluZyBQZXJzb25hKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgYEZhaWxlZCB0byB1cGRhdGUgcGVyc29uYTogJHtzYW5pdGl6ZWQubWVzc2FnZX1cXG5cXG5gICtcbiAgICAgICAgICAgICAgYFBsZWFzZSBjaGVjayBmaWxlIHBlcm1pc3Npb25zIGFuZCB0cnkgYWdhaW4uYCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBhc3luYyB2YWxpZGF0ZVBlcnNvbmEocGVyc29uYUlkZW50aWZpZXI6IHN0cmluZykge1xuICAgIGlmICghcGVyc29uYUlkZW50aWZpZXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCAqKk1pc3NpbmcgUGVyc29uYSBJZGVudGlmaWVyKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgYFVzYWdlOiBcXGB2YWxpZGF0ZV9wZXJzb25hIFwicGVyc29uYV9uYW1lXCJcXGBcXG5cXG5gICtcbiAgICAgICAgICAgICAgYFVzZSBcXGBsaXN0X3BlcnNvbmFzXFxgIHRvIHNlZSBhdmFpbGFibGUgcGVyc29uYXMuYCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBGaW5kIHRoZSBwZXJzb25hXG4gICAgbGV0IHBlcnNvbmEgPSB0aGlzLnBlcnNvbmFzLmdldChwZXJzb25hSWRlbnRpZmllcik7XG4gICAgXG4gICAgaWYgKCFwZXJzb25hKSB7XG4gICAgICAvLyBTZWFyY2ggYnkgbmFtZVxuICAgICAgcGVyc29uYSA9IEFycmF5LmZyb20odGhpcy5wZXJzb25hcy52YWx1ZXMoKSkuZmluZChwID0+IFxuICAgICAgICBwLm1ldGFkYXRhLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gcGVyc29uYUlkZW50aWZpZXIudG9Mb3dlckNhc2UoKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIXBlcnNvbmEpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCAqKlBlcnNvbmEgTm90IEZvdW5kKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgYENvdWxkIG5vdCBmaW5kIHBlcnNvbmE6IFwiJHtwZXJzb25hSWRlbnRpZmllcn1cIlxcblxcbmAgK1xuICAgICAgICAgICAgICBgVXNlIFxcYGxpc3RfcGVyc29uYXNcXGAgdG8gc2VlIGF2YWlsYWJsZSBwZXJzb25hcy5gLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRpb24gY2hlY2tzXG4gICAgY29uc3QgaXNzdWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IHdhcm5pbmdzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IG1ldGFkYXRhID0gcGVyc29uYS5tZXRhZGF0YTtcblxuICAgIC8vIFJlcXVpcmVkIGZpZWxkIGNoZWNrc1xuICAgIGlmICghbWV0YWRhdGEubmFtZSB8fCBtZXRhZGF0YS5uYW1lLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgIGlzc3Vlcy5wdXNoKFwiTWlzc2luZyBvciBlbXB0eSAnbmFtZScgZmllbGRcIik7XG4gICAgfVxuICAgIGlmICghbWV0YWRhdGEuZGVzY3JpcHRpb24gfHwgbWV0YWRhdGEuZGVzY3JpcHRpb24udHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgaXNzdWVzLnB1c2goXCJNaXNzaW5nIG9yIGVtcHR5ICdkZXNjcmlwdGlvbicgZmllbGRcIik7XG4gICAgfVxuICAgIGlmICghcGVyc29uYS5jb250ZW50IHx8IHBlcnNvbmEuY29udGVudC50cmltKCkubGVuZ3RoIDwgNTApIHtcbiAgICAgIGlzc3Vlcy5wdXNoKFwiUGVyc29uYSBjb250ZW50IGlzIHRvbyBzaG9ydCAobWluaW11bSA1MCBjaGFyYWN0ZXJzKVwiKTtcbiAgICB9XG5cbiAgICAvLyBDYXRlZ29yeSB2YWxpZGF0aW9uXG4gICAgY29uc3QgdmFsaWRDYXRlZ29yaWVzID0gWydjcmVhdGl2ZScsICdwcm9mZXNzaW9uYWwnLCAnZWR1Y2F0aW9uYWwnLCAnZ2FtaW5nJywgJ3BlcnNvbmFsJywgJ2dlbmVyYWwnXTtcbiAgICBpZiAobWV0YWRhdGEuY2F0ZWdvcnkgJiYgIXZhbGlkQ2F0ZWdvcmllcy5pbmNsdWRlcyhtZXRhZGF0YS5jYXRlZ29yeSkpIHtcbiAgICAgIGlzc3Vlcy5wdXNoKGBJbnZhbGlkIGNhdGVnb3J5ICcke21ldGFkYXRhLmNhdGVnb3J5fScuIE11c3QgYmUgb25lIG9mOiAke3ZhbGlkQ2F0ZWdvcmllcy5qb2luKCcsICcpfWApO1xuICAgIH1cblxuICAgIC8vIEFnZSByYXRpbmcgdmFsaWRhdGlvblxuICAgIGNvbnN0IHZhbGlkQWdlUmF0aW5ncyA9IFsnYWxsJywgJzEzKycsICcxOCsnXTtcbiAgICBpZiAobWV0YWRhdGEuYWdlX3JhdGluZyAmJiAhdmFsaWRBZ2VSYXRpbmdzLmluY2x1ZGVzKG1ldGFkYXRhLmFnZV9yYXRpbmcpKSB7XG4gICAgICB3YXJuaW5ncy5wdXNoKGBJbnZhbGlkIGFnZV9yYXRpbmcgJyR7bWV0YWRhdGEuYWdlX3JhdGluZ30nLiBTaG91bGQgYmUgb25lIG9mOiAke3ZhbGlkQWdlUmF0aW5ncy5qb2luKCcsICcpfWApO1xuICAgIH1cblxuICAgIC8vIE9wdGlvbmFsIGZpZWxkIHdhcm5pbmdzXG4gICAgaWYgKCFtZXRhZGF0YS50cmlnZ2VycyB8fCBtZXRhZGF0YS50cmlnZ2Vycy5sZW5ndGggPT09IDApIHtcbiAgICAgIHdhcm5pbmdzLnB1c2goXCJObyB0cmlnZ2VyIGtleXdvcmRzIGRlZmluZWQgLSB1c2VycyBtYXkgaGF2ZSBkaWZmaWN1bHR5IGZpbmRpbmcgdGhpcyBwZXJzb25hXCIpO1xuICAgIH1cbiAgICBpZiAoIW1ldGFkYXRhLnZlcnNpb24pIHtcbiAgICAgIHdhcm5pbmdzLnB1c2goXCJObyB2ZXJzaW9uIHNwZWNpZmllZCAtIGRlZmF1bHRpbmcgdG8gJzEuMCdcIik7XG4gICAgfVxuICAgIGlmICghbWV0YWRhdGEudW5pcXVlX2lkKSB7XG4gICAgICB3YXJuaW5ncy5wdXNoKFwiTm8gdW5pcXVlX2lkIC0gb25lIHdpbGwgYmUgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHlcIik7XG4gICAgfVxuXG4gICAgLy8gQ29udGVudCBxdWFsaXR5IGNoZWNrc1xuICAgIGlmIChwZXJzb25hLmNvbnRlbnQubGVuZ3RoID4gNTAwMCkge1xuICAgICAgd2FybmluZ3MucHVzaChcIlBlcnNvbmEgY29udGVudCBpcyB2ZXJ5IGxvbmcgLSBjb25zaWRlciBicmVha2luZyBpdCBpbnRvIHNlY3Rpb25zXCIpO1xuICAgIH1cbiAgICBpZiAobWV0YWRhdGEubmFtZSAmJiBtZXRhZGF0YS5uYW1lLmxlbmd0aCA+IDUwKSB7XG4gICAgICB3YXJuaW5ncy5wdXNoKFwiUGVyc29uYSBuYW1lIGlzIHZlcnkgbG9uZyAtIGNvbnNpZGVyIHNob3J0ZW5pbmcgZm9yIGJldHRlciBkaXNwbGF5XCIpO1xuICAgIH1cbiAgICBpZiAobWV0YWRhdGEuZGVzY3JpcHRpb24gJiYgbWV0YWRhdGEuZGVzY3JpcHRpb24ubGVuZ3RoID4gMjAwKSB7XG4gICAgICB3YXJuaW5ncy5wdXNoKFwiRGVzY3JpcHRpb24gaXMgdmVyeSBsb25nIC0gY29uc2lkZXIga2VlcGluZyBpdCB1bmRlciAyMDAgY2hhcmFjdGVyc1wiKTtcbiAgICB9XG5cbiAgICAvLyBHZW5lcmF0ZSB2YWxpZGF0aW9uIHJlcG9ydFxuICAgIGxldCByZXBvcnQgPSBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3wn5OLICoqVmFsaWRhdGlvbiBSZXBvcnQ6ICR7cGVyc29uYS5tZXRhZGF0YS5uYW1lfSoqXFxuXFxuYDtcbiAgICBcbiAgICBpZiAoaXNzdWVzLmxlbmd0aCA9PT0gMCAmJiB3YXJuaW5ncy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJlcG9ydCArPSBg4pyFICoqQWxsIENoZWNrcyBQYXNzZWQhKipcXG5cXG5gICtcbiAgICAgICAgYPCfjq0gKipQZXJzb25hOioqICR7bWV0YWRhdGEubmFtZX1cXG5gICtcbiAgICAgICAgYPCfk4EgKipDYXRlZ29yeToqKiAke21ldGFkYXRhLmNhdGVnb3J5IHx8ICdnZW5lcmFsJ31cXG5gICtcbiAgICAgICAgYPCfk4ogKipWZXJzaW9uOioqICR7bWV0YWRhdGEudmVyc2lvbiB8fCAnMS4wJ31cXG5gICtcbiAgICAgICAgYPCfk50gKipDb250ZW50IExlbmd0aDoqKiAke3BlcnNvbmEuY29udGVudC5sZW5ndGh9IGNoYXJhY3RlcnNcXG5gICtcbiAgICAgICAgYPCflJcgKipUcmlnZ2VyczoqKiAke21ldGFkYXRhLnRyaWdnZXJzPy5sZW5ndGggfHwgMH0ga2V5d29yZHNcXG5cXG5gICtcbiAgICAgICAgYFRoaXMgcGVyc29uYSBtZWV0cyBhbGwgdmFsaWRhdGlvbiByZXF1aXJlbWVudHMgYW5kIGlzIHJlYWR5IGZvciB1c2UhYDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGlzc3Vlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlcG9ydCArPSBg4p2MICoqSXNzdWVzIEZvdW5kICgke2lzc3Vlcy5sZW5ndGh9KToqKlxcbmA7XG4gICAgICAgIGlzc3Vlcy5mb3JFYWNoKChpc3N1ZSwgaSkgPT4ge1xuICAgICAgICAgIHJlcG9ydCArPSBgICAgJHtpICsgMX0uICR7aXNzdWV9XFxuYDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJlcG9ydCArPSAnXFxuJztcbiAgICAgIH1cblxuICAgICAgaWYgKHdhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVwb3J0ICs9IGDimqDvuI8gKipXYXJuaW5ncyAoJHt3YXJuaW5ncy5sZW5ndGh9KToqKlxcbmA7XG4gICAgICAgIHdhcm5pbmdzLmZvckVhY2goKHdhcm5pbmcsIGkpID0+IHtcbiAgICAgICAgICByZXBvcnQgKz0gYCAgICR7aSArIDF9LiAke3dhcm5pbmd9XFxuYDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJlcG9ydCArPSAnXFxuJztcbiAgICAgIH1cblxuICAgICAgaWYgKGlzc3Vlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlcG9ydCArPSBgKipSZWNvbW1lbmRhdGlvbjoqKiBGaXggdGhlIGlzc3VlcyBhYm92ZSBiZWZvcmUgdXNpbmcgdGhpcyBwZXJzb25hLlxcbmA7XG4gICAgICAgIHJlcG9ydCArPSBgVXNlIFxcYGVkaXRfcGVyc29uYSBcIiR7cGVyc29uYS5tZXRhZGF0YS5uYW1lfVwiIFwiZmllbGRcIiBcInZhbHVlXCJcXGAgdG8gbWFrZSBjb3JyZWN0aW9ucy5gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVwb3J0ICs9IGAqKlN0YXR1czoqKiBQZXJzb25hIGlzIGZ1bmN0aW9uYWwgYnV0IGNvdWxkIGJlIGltcHJvdmVkLlxcbmA7XG4gICAgICAgIHJlcG9ydCArPSBgQWRkcmVzcyB3YXJuaW5ncyBhYm92ZSBmb3Igb3B0aW1hbCBwZXJmb3JtYW5jZS5gO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiByZXBvcnQsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gIH1cblxuICAvLyByZXRyeU5ldHdvcmtPcGVyYXRpb24gaGFzIGJlZW4gcmVtb3ZlZCB3aXRoIFVwZGF0ZVRvb2xzXG5cblxuXG5cblxuXG5cblxuXG4gIC8qKlxuICAgKiBDb25maWd1cmUgaW5kaWNhdG9yIHNldHRpbmdzXG4gICAqL1xuICBhc3luYyBjb25maWd1cmVJbmRpY2F0b3IoY29uZmlnOiBQYXJ0aWFsPEluZGljYXRvckNvbmZpZz4pIHtcbiAgICB0cnkge1xuICAgICAgLy8gVXBkYXRlIHRoZSBjb25maWd1cmF0aW9uXG4gICAgICBpZiAoY29uZmlnLmVuYWJsZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmluZGljYXRvckNvbmZpZy5lbmFibGVkID0gY29uZmlnLmVuYWJsZWQ7XG4gICAgICB9XG4gICAgICBpZiAoY29uZmlnLnN0eWxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5pbmRpY2F0b3JDb25maWcuc3R5bGUgPSBjb25maWcuc3R5bGU7XG4gICAgICB9XG4gICAgICBpZiAoY29uZmlnLmN1c3RvbUZvcm1hdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIFZhbGlkYXRlIGN1c3RvbSBmb3JtYXQgYmVmb3JlIGFwcGx5aW5nXG4gICAgICAgIGNvbnN0IHZhbGlkYXRpb24gPSB2YWxpZGF0ZUN1c3RvbUZvcm1hdChjb25maWcuY3VzdG9tRm9ybWF0KTtcbiAgICAgICAgaWYgKCF2YWxpZGF0aW9uLnZhbGlkKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBJbnZhbGlkIGN1c3RvbSBmb3JtYXQ6ICR7dmFsaWRhdGlvbi5lcnJvcn1gXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5kaWNhdG9yQ29uZmlnLmN1c3RvbUZvcm1hdCA9IGNvbmZpZy5jdXN0b21Gb3JtYXQ7XG4gICAgICB9XG4gICAgICBpZiAoY29uZmlnLnNob3dWZXJzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5pbmRpY2F0b3JDb25maWcuc2hvd1ZlcnNpb24gPSBjb25maWcuc2hvd1ZlcnNpb247XG4gICAgICB9XG4gICAgICBpZiAoY29uZmlnLnNob3dBdXRob3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmluZGljYXRvckNvbmZpZy5zaG93QXV0aG9yID0gY29uZmlnLnNob3dBdXRob3I7XG4gICAgICB9XG4gICAgICBpZiAoY29uZmlnLnNob3dDYXRlZ29yeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuaW5kaWNhdG9yQ29uZmlnLnNob3dDYXRlZ29yeSA9IGNvbmZpZy5zaG93Q2F0ZWdvcnk7XG4gICAgICB9XG4gICAgICBpZiAoY29uZmlnLmVtb2ppICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5pbmRpY2F0b3JDb25maWcuZW1vamkgPSBjb25maWcuZW1vamk7XG4gICAgICB9XG4gICAgICBpZiAoY29uZmlnLmJyYWNrZXRTdHlsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuaW5kaWNhdG9yQ29uZmlnLmJyYWNrZXRTdHlsZSA9IGNvbmZpZy5icmFja2V0U3R5bGU7XG4gICAgICB9XG5cbiAgICAgIC8vIFNob3cgZXhhbXBsZSBvZiB3aGF0IHRoZSBpbmRpY2F0b3Igd291bGQgbG9vayBsaWtlXG4gICAgICBsZXQgZXhhbXBsZUluZGljYXRvciA9IFwiXCI7XG4gICAgICBpZiAodGhpcy5hY3RpdmVQZXJzb25hKSB7XG4gICAgICAgIGNvbnN0IHBlcnNvbmEgPSB0aGlzLnBlcnNvbmFzLmdldCh0aGlzLmFjdGl2ZVBlcnNvbmEpO1xuICAgICAgICBpZiAocGVyc29uYSkge1xuICAgICAgICAgIGV4YW1wbGVJbmRpY2F0b3IgPSBmb3JtYXRJbmRpY2F0b3IodGhpcy5pbmRpY2F0b3JDb25maWcsIHtcbiAgICAgICAgICAgIG5hbWU6IHBlcnNvbmEubWV0YWRhdGEubmFtZSxcbiAgICAgICAgICAgIHZlcnNpb246IHBlcnNvbmEubWV0YWRhdGEudmVyc2lvbixcbiAgICAgICAgICAgIGF1dGhvcjogcGVyc29uYS5tZXRhZGF0YS5hdXRob3IsXG4gICAgICAgICAgICBjYXRlZ29yeTogcGVyc29uYS5tZXRhZGF0YS5jYXRlZ29yeVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBTaG93IGV4YW1wbGUgd2l0aCBzYW1wbGUgZGF0YVxuICAgICAgICBleGFtcGxlSW5kaWNhdG9yID0gZm9ybWF0SW5kaWNhdG9yKHRoaXMuaW5kaWNhdG9yQ29uZmlnLCB7XG4gICAgICAgICAgbmFtZTogXCJFeGFtcGxlIFBlcnNvbmFcIixcbiAgICAgICAgICB2ZXJzaW9uOiBcIjEuMFwiLFxuICAgICAgICAgIGF1dGhvcjogXCJAdXNlcm5hbWVcIixcbiAgICAgICAgICBjYXRlZ29yeTogXCJjcmVhdGl2ZVwiXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inIUgSW5kaWNhdG9yIGNvbmZpZ3VyYXRpb24gdXBkYXRlZCBzdWNjZXNzZnVsbHkhXG5cbkN1cnJlbnQgc2V0dGluZ3M6XG4tIEVuYWJsZWQ6ICR7dGhpcy5pbmRpY2F0b3JDb25maWcuZW5hYmxlZH1cbi0gU3R5bGU6ICR7dGhpcy5pbmRpY2F0b3JDb25maWcuc3R5bGV9XG4tIFNob3cgVmVyc2lvbjogJHt0aGlzLmluZGljYXRvckNvbmZpZy5zaG93VmVyc2lvbn1cbi0gU2hvdyBBdXRob3I6ICR7dGhpcy5pbmRpY2F0b3JDb25maWcuc2hvd0F1dGhvcn1cbi0gU2hvdyBDYXRlZ29yeTogJHt0aGlzLmluZGljYXRvckNvbmZpZy5zaG93Q2F0ZWdvcnl9XG4tIEVtb2ppOiAke3RoaXMuaW5kaWNhdG9yQ29uZmlnLmVtb2ppfVxuLSBCcmFja2V0czogJHt0aGlzLmluZGljYXRvckNvbmZpZy5icmFja2V0U3R5bGV9XG4ke3RoaXMuaW5kaWNhdG9yQ29uZmlnLmN1c3RvbUZvcm1hdCA/IGAtIEN1c3RvbSBGb3JtYXQ6ICR7dGhpcy5pbmRpY2F0b3JDb25maWcuY3VzdG9tRm9ybWF0fWAgOiAnJ31cblxuRXhhbXBsZSBpbmRpY2F0b3I6ICR7ZXhhbXBsZUluZGljYXRvciB8fCBcIihub25lIC0gaW5kaWNhdG9ycyBkaXNhYmxlZClcIn1cblxuTm90ZTogQ29uZmlndXJhdGlvbiBpcyB0ZW1wb3JhcnkgZm9yIHRoaXMgc2Vzc2lvbi4gVG8gbWFrZSBwZXJtYW5lbnQsIHNldCBlbnZpcm9ubWVudCB2YXJpYWJsZXM6XG4tIERPTExIT1VTRV9JTkRJQ0FUT1JfRU5BQkxFRD10cnVlL2ZhbHNlXG4tIERPTExIT1VTRV9JTkRJQ0FUT1JfU1RZTEU9ZnVsbC9taW5pbWFsL2NvbXBhY3QvY3VzdG9tXG4tIERPTExIT1VTRV9JTkRJQ0FUT1JfRk9STUFUPVwiY3VzdG9tIGZvcm1hdCB0ZW1wbGF0ZVwiXG4tIERPTExIT1VTRV9JTkRJQ0FUT1JfU0hPV19WRVJTSU9OPXRydWUvZmFsc2Vcbi0gRE9MTEhPVVNFX0lORElDQVRPUl9TSE9XX0FVVEhPUj10cnVlL2ZhbHNlXG4tIERPTExIT1VTRV9JTkRJQ0FUT1JfU0hPV19DQVRFR09SWT10cnVlL2ZhbHNlXG4tIERPTExIT1VTRV9JTkRJQ0FUT1JfRU1PSkk98J+OrVxuLSBET0xMSE9VU0VfSU5ESUNBVE9SX0JSQUNLRVRTPXNxdWFyZS9yb3VuZC9jdXJseS9hbmdsZS9ub25lYFxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIEVycm9yIGNvbmZpZ3VyaW5nIGluZGljYXRvcjogJHtTZWN1cmVFcnJvckhhbmRsZXIuc2FuaXRpemVFcnJvcihlcnJvcikubWVzc2FnZX1gXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY3VycmVudCBpbmRpY2F0b3IgY29uZmlndXJhdGlvblxuICAgKi9cbiAgYXN5bmMgY29uZmlndXJlQ29sbGVjdGlvblN1Ym1pc3Npb24oYXV0b1N1Ym1pdDogYm9vbGVhbikge1xuICAgIHRyeSB7XG4gICAgICAvLyBTdG9yZSB0aGUgY29uZmlndXJhdGlvbiBpbiBlbnZpcm9ubWVudCB2YXJpYWJsZVxuICAgICAgaWYgKGF1dG9TdWJtaXQpIHtcbiAgICAgICAgcHJvY2Vzcy5lbnYuRE9MTEhPVVNFX0FVVE9fU1VCTUlUX1RPX0NPTExFQ1RJT04gPSAndHJ1ZSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgcHJvY2Vzcy5lbnYuRE9MTEhPVVNFX0FVVE9fU1VCTUlUX1RPX0NPTExFQ1RJT047XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBhdXRvU3VibWl0IFxuICAgICAgICA/IFwi4pyFIENvbGxlY3Rpb24gc3VibWlzc2lvbiBlbmFibGVkISBDb250ZW50IHdpbGwgYXV0b21hdGljYWxseSBiZSBzdWJtaXR0ZWQgdG8gdGhlIERvbGxob3VzZU1DUCBjb2xsZWN0aW9uIGFmdGVyIHBvcnRmb2xpbyB1cGxvYWQuXCJcbiAgICAgICAgOiBcIuKchSBDb2xsZWN0aW9uIHN1Ym1pc3Npb24gZGlzYWJsZWQuIENvbnRlbnQgd2lsbCBvbmx5IGJlIHVwbG9hZGVkIHRvIHlvdXIgcGVyc29uYWwgcG9ydGZvbGlvLlwiO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX0ke21lc3NhZ2V9YFxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdFcnJvciBjb25maWd1cmluZyBjb2xsZWN0aW9uIHN1Ym1pc3Npb24nLCB7IGVycm9yIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIEZhaWxlZCB0byBjb25maWd1cmUgY29sbGVjdGlvbiBzdWJtaXNzaW9uOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0Q29sbGVjdGlvblN1Ym1pc3Npb25Db25maWcoKSB7XG4gICAgY29uc3QgYXV0b1N1Ym1pdEVuYWJsZWQgPSBwcm9jZXNzLmVudi5ET0xMSE9VU0VfQVVUT19TVUJNSVRfVE9fQ09MTEVDVElPTiA9PT0gJ3RydWUnO1xuICAgIFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBgKipDb2xsZWN0aW9uIFN1Ym1pc3Npb24gQ29uZmlndXJhdGlvbioqXFxuXFxuYCArXG4gICAgICBg4oCiICoqQXV0by1zdWJtaXQqKjogJHthdXRvU3VibWl0RW5hYmxlZCA/ICfinIUgRW5hYmxlZCcgOiAn4p2MIERpc2FibGVkJ31cXG5cXG5gICtcbiAgICAgIGBXaGVuIGF1dG8tc3VibWl0IGlzIGVuYWJsZWQsIHRoZSBcXGBzdWJtaXRfY29udGVudFxcYCB0b29sIHdpbGw6XFxuYCArXG4gICAgICBgMS4gVXBsb2FkIGNvbnRlbnQgdG8geW91ciBHaXRIdWIgcG9ydGZvbGlvXFxuYCArXG4gICAgICBgMi4gQXV0b21hdGljYWxseSBjcmVhdGUgYSBzdWJtaXNzaW9uIGlzc3VlIGluIERvbGxob3VzZU1DUC9jb2xsZWN0aW9uXFxuXFxuYCArXG4gICAgICBgVG8gY2hhbmdlIHRoaXMgc2V0dGluZywgdXNlOlxcbmAgK1xuICAgICAgYFxcYFxcYFxcYFxcbmNvbmZpZ3VyZV9jb2xsZWN0aW9uX3N1Ym1pc3Npb24gYXV0b1N1Ym1pdDogdHJ1ZS9mYWxzZVxcblxcYFxcYFxcYGA7XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudDogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl9JHttZXNzYWdlfWBcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH07XG4gIH1cblxuICBhc3luYyBnZXRJbmRpY2F0b3JDb25maWcoKSB7XG4gICAgLy8gU2hvdyBjdXJyZW50IGNvbmZpZ3VyYXRpb24gYW5kIGV4YW1wbGVcbiAgICBsZXQgZXhhbXBsZUluZGljYXRvciA9IFwiXCI7XG4gICAgaWYgKHRoaXMuYWN0aXZlUGVyc29uYSkge1xuICAgICAgY29uc3QgcGVyc29uYSA9IHRoaXMucGVyc29uYXMuZ2V0KHRoaXMuYWN0aXZlUGVyc29uYSk7XG4gICAgICBpZiAocGVyc29uYSkge1xuICAgICAgICBleGFtcGxlSW5kaWNhdG9yID0gZm9ybWF0SW5kaWNhdG9yKHRoaXMuaW5kaWNhdG9yQ29uZmlnLCB7XG4gICAgICAgICAgbmFtZTogcGVyc29uYS5tZXRhZGF0YS5uYW1lLFxuICAgICAgICAgIHZlcnNpb246IHBlcnNvbmEubWV0YWRhdGEudmVyc2lvbixcbiAgICAgICAgICBhdXRob3I6IHBlcnNvbmEubWV0YWRhdGEuYXV0aG9yLFxuICAgICAgICAgIGNhdGVnb3J5OiBwZXJzb25hLm1ldGFkYXRhLmNhdGVnb3J5XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTaG93IGV4YW1wbGUgd2l0aCBzYW1wbGUgZGF0YVxuICAgICAgZXhhbXBsZUluZGljYXRvciA9IGZvcm1hdEluZGljYXRvcih0aGlzLmluZGljYXRvckNvbmZpZywge1xuICAgICAgICBuYW1lOiBcIkV4YW1wbGUgUGVyc29uYVwiLFxuICAgICAgICB2ZXJzaW9uOiBcIjEuMFwiLFxuICAgICAgICBhdXRob3I6IFwiQHVzZXJuYW1lXCIsXG4gICAgICAgIGNhdGVnb3J5OiBcImNyZWF0aXZlXCJcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3wn5OKIEN1cnJlbnQgSW5kaWNhdG9yIENvbmZpZ3VyYXRpb246XG5cblNldHRpbmdzOlxuLSBFbmFibGVkOiAke3RoaXMuaW5kaWNhdG9yQ29uZmlnLmVuYWJsZWR9XG4tIFN0eWxlOiAke3RoaXMuaW5kaWNhdG9yQ29uZmlnLnN0eWxlfVxuLSBTaG93IFZlcnNpb246ICR7dGhpcy5pbmRpY2F0b3JDb25maWcuc2hvd1ZlcnNpb259XG4tIFNob3cgQXV0aG9yOiAke3RoaXMuaW5kaWNhdG9yQ29uZmlnLnNob3dBdXRob3J9XG4tIFNob3cgQ2F0ZWdvcnk6ICR7dGhpcy5pbmRpY2F0b3JDb25maWcuc2hvd0NhdGVnb3J5fVxuLSBFbW9qaTogJHt0aGlzLmluZGljYXRvckNvbmZpZy5lbW9qaX1cbi0gQnJhY2tldHM6ICR7dGhpcy5pbmRpY2F0b3JDb25maWcuYnJhY2tldFN0eWxlfVxuLSBTZXBhcmF0b3I6IFwiJHt0aGlzLmluZGljYXRvckNvbmZpZy5zZXBhcmF0b3J9XCJcbiR7dGhpcy5pbmRpY2F0b3JDb25maWcuY3VzdG9tRm9ybWF0ID8gYC0gQ3VzdG9tIEZvcm1hdDogJHt0aGlzLmluZGljYXRvckNvbmZpZy5jdXN0b21Gb3JtYXR9YCA6ICcnfVxuXG5BdmFpbGFibGUgc3R5bGVzOlxuLSBmdWxsOiBb8J+OrSBQZXJzb25hIE5hbWUgdjEuMCBieSBAYXV0aG9yXVxuLSBtaW5pbWFsOiDwn46tIFBlcnNvbmEgTmFtZVxuLSBjb21wYWN0OiBbUGVyc29uYSBOYW1lIHYxLjBdXG4tIGN1c3RvbTogVXNlIHlvdXIgb3duIGZvcm1hdCB3aXRoIHBsYWNlaG9sZGVyc1xuXG5FeGFtcGxlIHdpdGggY3VycmVudCBzZXR0aW5nczogJHtleGFtcGxlSW5kaWNhdG9yIHx8IFwiKG5vbmUgLSBpbmRpY2F0b3JzIGRpc2FibGVkKVwifVxuXG5QbGFjZWhvbGRlcnMgZm9yIGN1c3RvbSBmb3JtYXQ6XG4tIHtlbW9qaX0gLSBUaGUgY29uZmlndXJlZCBlbW9qaVxuLSB7bmFtZX0gLSBQZXJzb25hIG5hbWVcbi0ge3ZlcnNpb259IC0gUGVyc29uYSB2ZXJzaW9uXG4tIHthdXRob3J9IC0gUGVyc29uYSBhdXRob3Jcbi0ge2NhdGVnb3J5fSAtIFBlcnNvbmEgY2F0ZWdvcnlgXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9O1xuICB9XG5cblxuICAvKipcbiAgICogRXhwb3J0IGEgc2luZ2xlIHBlcnNvbmFcbiAgICovXG4gIGFzeW5jIGV4cG9ydFBlcnNvbmEocGVyc29uYU5hbWU6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICAvLyBVc2UgYSBzaW5nbGUgbG9va3VwIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9uc1xuICAgICAgbGV0IHBlcnNvbmEgPSB0aGlzLnBlcnNvbmFzLmdldChwZXJzb25hTmFtZSk7XG4gICAgICBpZiAoIXBlcnNvbmEpIHtcbiAgICAgICAgLy8gVHJ5IGJ5IGZpbGVuYW1lXG4gICAgICAgIHBlcnNvbmEgPSBBcnJheS5mcm9tKHRoaXMucGVyc29uYXMudmFsdWVzKCkpLmZpbmQocCA9PiBwLmZpbGVuYW1lID09PSBwZXJzb25hTmFtZSk7XG4gICAgICAgIGlmICghcGVyc29uYSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIFBlcnNvbmEgbm90IGZvdW5kOiAke3BlcnNvbmFOYW1lfWBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBleHBvcnREYXRhID0gdGhpcy5wZXJzb25hRXhwb3J0ZXIuZXhwb3J0UGVyc29uYShwZXJzb25hKTtcbiAgICAgIGNvbnN0IGJhc2U2NCA9IHRoaXMucGVyc29uYUV4cG9ydGVyLnRvQmFzZTY0KGV4cG9ydERhdGEpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5wZXJzb25hRXhwb3J0ZXIuZm9ybWF0RXhwb3J0UmVzdWx0KHBlcnNvbmEsIGJhc2U2NCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl9JHtyZXN1bHR9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgRXhwb3J0IGZhaWxlZDogJHtTZWN1cmVFcnJvckhhbmRsZXIuc2FuaXRpemVFcnJvcihlcnJvcikubWVzc2FnZX1gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvcnQgYWxsIHBlcnNvbmFzXG4gICAqL1xuICBhc3luYyBleHBvcnRBbGxQZXJzb25hcyhpbmNsdWRlRGVmYXVsdHMgPSB0cnVlKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBlcnNvbmFzQXJyYXkgPSBBcnJheS5mcm9tKHRoaXMucGVyc29uYXMudmFsdWVzKCkpO1xuICAgICAgY29uc3QgYnVuZGxlID0gdGhpcy5wZXJzb25hRXhwb3J0ZXIuZXhwb3J0QnVuZGxlKHBlcnNvbmFzQXJyYXksIGluY2x1ZGVEZWZhdWx0cyk7XG4gICAgICBjb25zdCBiYXNlNjQgPSB0aGlzLnBlcnNvbmFFeHBvcnRlci50b0Jhc2U2NChidW5kbGUpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5wZXJzb25hRXhwb3J0ZXIuZm9ybWF0QnVuZGxlUmVzdWx0KGJ1bmRsZSwgYmFzZTY0KTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX0ke3Jlc3VsdH1gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBFeHBvcnQgZmFpbGVkOiAke1NlY3VyZUVycm9ySGFuZGxlci5zYW5pdGl6ZUVycm9yKGVycm9yKS5tZXNzYWdlfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhIHBlcnNvbmFcbiAgICovXG4gIGFzeW5jIGltcG9ydFBlcnNvbmEoc291cmNlOiBzdHJpbmcsIG92ZXJ3cml0ZSA9IGZhbHNlKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghdGhpcy5wZXJzb25hSW1wb3J0ZXIpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgSW1wb3J0IGZ1bmN0aW9uYWxpdHkgbm90IGF2YWlsYWJsZSAoaW5pdGlhbGl6YXRpb24gaW4gcHJvZ3Jlc3MpYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnBlcnNvbmFJbXBvcnRlci5pbXBvcnRQZXJzb25hKHNvdXJjZSwgdGhpcy5wZXJzb25hcywgb3ZlcndyaXRlKTtcbiAgICAgIFxuICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgIC8vIFJlbG9hZCBwZXJzb25hcyB0byBpbmNsdWRlIHRoZSBuZXcgb25lXG4gICAgICAgIGF3YWl0IHRoaXMubG9hZFBlcnNvbmFzKCk7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKchSAke3Jlc3VsdC5tZXNzYWdlfVxcblxcblBlcnNvbmEgXCIke3Jlc3VsdC5wZXJzb25hPy5tZXRhZGF0YS5uYW1lfVwiIGlzIG5vdyBhdmFpbGFibGUuXFxuVG90YWwgcGVyc29uYXM6ICR7dGhpcy5wZXJzb25hcy5zaXplfWBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgJHtyZXN1bHQubWVzc2FnZX1gXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgSW1wb3J0IGZhaWxlZDogJHtTZWN1cmVFcnJvckhhbmRsZXIuc2FuaXRpemVFcnJvcihlcnJvcikubWVzc2FnZX1gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTaGFyZSBhIHBlcnNvbmEgdmlhIFVSTFxuICAgKi9cbiAgYXN5bmMgc2hhcmVQZXJzb25hKHBlcnNvbmFOYW1lOiBzdHJpbmcsIGV4cGlyeURheXMgPSA3KSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEVuaGFuY2VkIGlucHV0IHZhbGlkYXRpb25cbiAgICAgIGNvbnN0IHZhbGlkYXRlZFBlcnNvbmFOYW1lID0gTUNQSW5wdXRWYWxpZGF0b3IudmFsaWRhdGVQZXJzb25hSWRlbnRpZmllcihwZXJzb25hTmFtZSk7XG4gICAgICBjb25zdCB2YWxpZGF0ZWRFeHBpcnlEYXlzID0gTUNQSW5wdXRWYWxpZGF0b3IudmFsaWRhdGVFeHBpcnlEYXlzKGV4cGlyeURheXMpO1xuICAgICAgXG4gICAgICBjb25zdCBwZXJzb25hID0gdGhpcy5wZXJzb25hcy5nZXQodmFsaWRhdGVkUGVyc29uYU5hbWUpO1xuICAgICAgaWYgKCFwZXJzb25hKSB7XG4gICAgICAgIC8vIFRyeSBieSBmaWxlbmFtZVxuICAgICAgICBjb25zdCBieUZpbGVuYW1lID0gQXJyYXkuZnJvbSh0aGlzLnBlcnNvbmFzLnZhbHVlcygpKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PT0gdmFsaWRhdGVkUGVyc29uYU5hbWUpO1xuICAgICAgICBpZiAoIWJ5RmlsZW5hbWUpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBQZXJzb25hIG5vdCBmb3VuZDogJHt2YWxpZGF0ZWRQZXJzb25hTmFtZX1gXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcGVyc29uYU5hbWUgPSBieUZpbGVuYW1lLm1ldGFkYXRhLm5hbWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucGVyc29uYVNoYXJlci5zaGFyZVBlcnNvbmEodGhpcy5wZXJzb25hcy5nZXQocGVyc29uYU5hbWUpISwgdmFsaWRhdGVkRXhwaXJ5RGF5cyk7XG4gICAgICBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl9JHtyZXN1bHQubWVzc2FnZX1gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBTaGFyZSBmYWlsZWQ6ICR7U2VjdXJlRXJyb3JIYW5kbGVyLnNhbml0aXplRXJyb3IoZXJyb3IpLm1lc3NhZ2V9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IGZyb20gYSBzaGFyZWQgVVJMXG4gICAqL1xuICBhc3luYyBpbXBvcnRGcm9tVXJsKHVybDogc3RyaW5nLCBvdmVyd3JpdGUgPSBmYWxzZSkge1xuICAgIHRyeSB7XG4gICAgICAvLyBFbmhhbmNlZCBpbnB1dCB2YWxpZGF0aW9uIGZvciBVUkxcbiAgICAgIGNvbnN0IHZhbGlkYXRlZFVybCA9IE1DUElucHV0VmFsaWRhdG9yLnZhbGlkYXRlSW1wb3J0VXJsKHVybCk7XG4gICAgICBcbiAgICAgIGNvbnN0IGZldGNoUmVzdWx0ID0gYXdhaXQgdGhpcy5wZXJzb25hU2hhcmVyLmltcG9ydEZyb21VcmwodmFsaWRhdGVkVXJsKTtcbiAgICAgIFxuICAgICAgaWYgKCFmZXRjaFJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MICR7ZmV0Y2hSZXN1bHQubWVzc2FnZX1gXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gSW1wb3J0IHRoZSBmZXRjaGVkIGRhdGFcbiAgICAgIGlmICghdGhpcy5wZXJzb25hSW1wb3J0ZXIpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgSW1wb3J0IGZ1bmN0aW9uYWxpdHkgbm90IGF2YWlsYWJsZSAoaW5pdGlhbGl6YXRpb24gaW4gcHJvZ3Jlc3MpYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjb25zdCBpbXBvcnRSZXN1bHQgPSBhd2FpdCB0aGlzLnBlcnNvbmFJbXBvcnRlci5pbXBvcnRQZXJzb25hKFxuICAgICAgICBKU09OLnN0cmluZ2lmeShmZXRjaFJlc3VsdC5kYXRhKSxcbiAgICAgICAgdGhpcy5wZXJzb25hcyxcbiAgICAgICAgb3ZlcndyaXRlXG4gICAgICApO1xuXG4gICAgICBpZiAoaW1wb3J0UmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgLy8gUmVsb2FkIHBlcnNvbmFzXG4gICAgICAgIGF3YWl0IHRoaXMubG9hZFBlcnNvbmFzKCk7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKchSBTdWNjZXNzZnVsbHkgaW1wb3J0ZWQgZnJvbSBVUkwhXFxuXFxuJHtpbXBvcnRSZXN1bHQubWVzc2FnZX1cXG5Ub3RhbCBwZXJzb25hczogJHt0aGlzLnBlcnNvbmFzLnNpemV9YFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCAke2ltcG9ydFJlc3VsdC5tZXNzYWdlfWBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBJbXBvcnQgZnJvbSBVUkwgZmFpbGVkOiAke1NlY3VyZUVycm9ySGFuZGxlci5zYW5pdGl6ZUVycm9yKGVycm9yKS5tZXNzYWdlfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBvcnRmb2xpbyBtYW5hZ2VtZW50IG1ldGhvZHNcbiAgICovXG5cbiAgLyoqXG4gICAqIENoZWNrIHBvcnRmb2xpbyBzdGF0dXMgaW5jbHVkaW5nIHJlcG9zaXRvcnkgZXhpc3RlbmNlIGFuZCBzeW5jIGluZm9ybWF0aW9uXG4gICAqL1xuICBhc3luYyBwb3J0Zm9saW9TdGF0dXModXNlcm5hbWU/OiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgLy8gVmFsaWRhdGUgdXNlcm5hbWUgcGFyYW1ldGVyIGlmIHByb3ZpZGVkXG4gICAgICBpZiAodXNlcm5hbWUgJiYgdHlwZW9mIHVzZXJuYW1lID09PSAnc3RyaW5nJykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHZhbGlkYXRlVXNlcm5hbWUodXNlcm5hbWUpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIEludmFsaWQgdXNlcm5hbWU6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVmFsaWRhdGlvbiBmYWlsZWQnfWBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBHZXQgY3VycmVudCB1c2VyIGlmIHVzZXJuYW1lIG5vdCBwcm92aWRlZFxuICAgICAgbGV0IHRhcmdldFVzZXJuYW1lID0gdXNlcm5hbWU7XG4gICAgICBpZiAoIXRhcmdldFVzZXJuYW1lKSB7XG4gICAgICAgIGNvbnN0IGF1dGhTdGF0dXMgPSBhd2FpdCB0aGlzLmdpdGh1YkF1dGhNYW5hZ2VyLmdldEF1dGhTdGF0dXMoKTtcbiAgICAgICAgaWYgKCFhdXRoU3RhdHVzLmlzQXV0aGVudGljYXRlZCB8fCAhYXV0aFN0YXR1cy51c2VybmFtZSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MICoqR2l0SHViIEF1dGhlbnRpY2F0aW9uIFJlcXVpcmVkKipcXG5cXG5gICtcbiAgICAgICAgICAgIGDwn5SQICoqUXVpY2sgU2V0dXAqKjpcXG5gICtcbiAgICAgICAgICAgIGAxLiBSdW46IFxcYHNldHVwX2dpdGh1Yl9hdXRoXFxgIHRvIGF1dGhlbnRpY2F0ZVxcbmAgK1xuICAgICAgICAgICAgYDIuIE9yIHVzZTogXFxgZ2ggYXV0aCBsb2dpbiAtLXdlYlxcYCBpZiB5b3UgaGF2ZSBHaXRIdWIgQ0xJXFxuXFxuYCArXG4gICAgICAgICAgICBg8J+TnSAqKldoYXQgdGhpcyBlbmFibGVzKio6XFxuYCArXG4gICAgICAgICAgICBg4oCiIFVwbG9hZCBlbGVtZW50cyB0byB5b3VyIEdpdEh1YiBwb3J0Zm9saW9cXG5gICtcbiAgICAgICAgICAgIGDigKIgU3luYyB5b3VyIGxvY2FsIHBvcnRmb2xpbyB3aXRoIEdpdEh1YlxcbmAgK1xuICAgICAgICAgICAgYOKAoiBTaGFyZSBlbGVtZW50cyB3aXRoIHRoZSBjb21tdW5pdHlcXG5cXG5gICtcbiAgICAgICAgICAgIGDwn4yQICoqTmVlZCBoZWxwPyoqIFZpc2l0OiBodHRwczovL2RvY3MuYW50aHJvcGljLmNvbS9lbi9kb2NzL2NsYXVkZS1jb2RlL29hdXRoLXNldHVwYFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHRhcmdldFVzZXJuYW1lID0gYXV0aFN0YXR1cy51c2VybmFtZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgaWYgcG9ydGZvbGlvIGV4aXN0c1xuICAgICAgY29uc3QgeyBQb3J0Zm9saW9SZXBvTWFuYWdlciB9ID0gYXdhaXQgaW1wb3J0KCcuL3BvcnRmb2xpby9Qb3J0Zm9saW9SZXBvTWFuYWdlci5qcycpO1xuICAgICAgY29uc3QgcG9ydGZvbGlvTWFuYWdlciA9IG5ldyBQb3J0Zm9saW9SZXBvTWFuYWdlcigpO1xuICAgICAgY29uc3QgcG9ydGZvbGlvRXhpc3RzID0gYXdhaXQgcG9ydGZvbGlvTWFuYWdlci5jaGVja1BvcnRmb2xpb0V4aXN0cyh0YXJnZXRVc2VybmFtZSk7XG5cbiAgICAgIGxldCBzdGF0dXNUZXh0ID0gYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl98J+TiiAqKlBvcnRmb2xpbyBTdGF0dXMgZm9yICR7dGFyZ2V0VXNlcm5hbWV9KipcXG5cXG5gO1xuXG4gICAgICBpZiAocG9ydGZvbGlvRXhpc3RzKSB7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYOKchSAqKlJlcG9zaXRvcnkqKjogZG9sbGhvdXNlLXBvcnRmb2xpbyBleGlzdHNcXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGDwn5SXICoqVVJMKio6IGh0dHBzOi8vZ2l0aHViLmNvbS8ke3RhcmdldFVzZXJuYW1lfS9kb2xsaG91c2UtcG9ydGZvbGlvXFxuXFxuYDtcbiAgICAgICAgXG4gICAgICAgIC8vIEdldCBsb2NhbCBlbGVtZW50cyBjb3VudFxuICAgICAgICBjb25zdCBsb2NhbFBvcnRmb2xpb01hbmFnZXIgPSBQb3J0Zm9saW9NYW5hZ2VyLmdldEluc3RhbmNlKCk7XG4gICAgICAgIGNvbnN0IHBlcnNvbmFzUGF0aCA9IGxvY2FsUG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKEVsZW1lbnRUeXBlLlBFUlNPTkEpO1xuICAgICAgICBjb25zdCBza2lsbHNQYXRoID0gbG9jYWxQb3J0Zm9saW9NYW5hZ2VyLmdldEVsZW1lbnREaXIoRWxlbWVudFR5cGUuU0tJTEwpO1xuICAgICAgICBjb25zdCB0ZW1wbGF0ZXNQYXRoID0gbG9jYWxQb3J0Zm9saW9NYW5hZ2VyLmdldEVsZW1lbnREaXIoRWxlbWVudFR5cGUuVEVNUExBVEUpO1xuICAgICAgICBjb25zdCBhZ2VudHNQYXRoID0gbG9jYWxQb3J0Zm9saW9NYW5hZ2VyLmdldEVsZW1lbnREaXIoRWxlbWVudFR5cGUuQUdFTlQpO1xuICAgICAgICBjb25zdCBtZW1vcmllc1BhdGggPSBsb2NhbFBvcnRmb2xpb01hbmFnZXIuZ2V0RWxlbWVudERpcihFbGVtZW50VHlwZS5NRU1PUlkpO1xuICAgICAgICBjb25zdCBlbnNlbWJsZXNQYXRoID0gbG9jYWxQb3J0Zm9saW9NYW5hZ2VyLmdldEVsZW1lbnREaXIoRWxlbWVudFR5cGUuRU5TRU1CTEUpO1xuXG4gICAgICAgIGNvbnN0IFtwZXJzb25hcywgc2tpbGxzLCB0ZW1wbGF0ZXMsIGFnZW50cywgbWVtb3JpZXMsIGVuc2VtYmxlc10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgICAgdGhpcy5jb3VudEVsZW1lbnRzSW5EaXIocGVyc29uYXNQYXRoKSxcbiAgICAgICAgICB0aGlzLmNvdW50RWxlbWVudHNJbkRpcihza2lsbHNQYXRoKSxcbiAgICAgICAgICB0aGlzLmNvdW50RWxlbWVudHNJbkRpcih0ZW1wbGF0ZXNQYXRoKSxcbiAgICAgICAgICB0aGlzLmNvdW50RWxlbWVudHNJbkRpcihhZ2VudHNQYXRoKSxcbiAgICAgICAgICB0aGlzLmNvdW50RWxlbWVudHNJbkRpcihtZW1vcmllc1BhdGgpLFxuICAgICAgICAgIHRoaXMuY291bnRFbGVtZW50c0luRGlyKGVuc2VtYmxlc1BhdGgpXG4gICAgICAgIF0pO1xuXG4gICAgICAgIGNvbnN0IHRvdGFsRWxlbWVudHMgPSBwZXJzb25hcyArIHNraWxscyArIHRlbXBsYXRlcyArIGFnZW50cyArIG1lbW9yaWVzICsgZW5zZW1ibGVzO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGDwn5OIICoqTG9jYWwgRWxlbWVudHMqKjpcXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAgIOKAoiBQZXJzb25hczogJHtwZXJzb25hc31cXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAgIOKAoiBTa2lsbHM6ICR7c2tpbGxzfVxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYCAg4oCiIFRlbXBsYXRlczogJHt0ZW1wbGF0ZXN9XFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgICDigKIgQWdlbnRzOiAke2FnZW50c31cXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAgIOKAoiBNZW1vcmllczogJHttZW1vcmllc31cXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAgIOKAoiBFbnNlbWJsZXM6ICR7ZW5zZW1ibGVzfVxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYCAg4oCiICoqVG90YWwqKjogJHt0b3RhbEVsZW1lbnRzfVxcblxcbmA7XG5cbiAgICAgICAgc3RhdHVzVGV4dCArPSBg8J+UhCAqKlN5bmMgU3RhdHVzKio6IFVzZSBzeW5jX3BvcnRmb2xpbyB0byB1cGRhdGUgR2l0SHViXFxuYDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYOKdjCAqKlJlcG9zaXRvcnkqKjogTm8gcG9ydGZvbGlvIGZvdW5kXFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBg8J+SoSAqKk5leHQgU3RlcCoqOiBVc2UgaW5pdF9wb3J0Zm9saW8gdG8gY3JlYXRlIG9uZVxcblxcbmA7XG4gICAgICAgIFxuICAgICAgICBzdGF0dXNUZXh0ICs9IGDwn5OdICoqV2hhdCB5b3UnbGwgZ2V0Kio6XFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgICDigKIgR2l0SHViIHJlcG9zaXRvcnkgZm9yIHlvdXIgZWxlbWVudHNcXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAgIOKAoiBPcmdhbml6ZWQgZm9sZGVyIHN0cnVjdHVyZVxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYCAg4oCiIFJFQURNRSB3aXRoIHVzYWdlIGluc3RydWN0aW9uc1xcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYCAg4oCiIEVhc3kgc2hhcmluZyBhbmQgYmFja3VwXFxuYDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBzdGF0dXNUZXh0XG4gICAgICAgIH1dXG4gICAgICB9O1xuXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIEZhaWxlZCB0byBjaGVjayBwb3J0Zm9saW8gc3RhdHVzOiAke1NlY3VyZUVycm9ySGFuZGxlci5zYW5pdGl6ZUVycm9yKGVycm9yKS5tZXNzYWdlfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgYSBuZXcgR2l0SHViIHBvcnRmb2xpbyByZXBvc2l0b3J5XG4gICAqL1xuICBhc3luYyBpbml0UG9ydGZvbGlvKG9wdGlvbnM6IHtyZXBvc2l0b3J5TmFtZT86IHN0cmluZzsgcHJpdmF0ZT86IGJvb2xlYW47IGRlc2NyaXB0aW9uPzogc3RyaW5nfSkge1xuICAgIHRyeSB7XG4gICAgICAvLyBDaGVjayBhdXRoZW50aWNhdGlvblxuICAgICAgY29uc3QgYXV0aFN0YXR1cyA9IGF3YWl0IHRoaXMuZ2l0aHViQXV0aE1hbmFnZXIuZ2V0QXV0aFN0YXR1cygpO1xuICAgICAgaWYgKCFhdXRoU3RhdHVzLmlzQXV0aGVudGljYXRlZCB8fCAhYXV0aFN0YXR1cy51c2VybmFtZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCAqKkdpdEh1YiBBdXRoZW50aWNhdGlvbiBSZXF1aXJlZCoqXFxuXFxuYCArXG4gICAgICAgICAgICBg8J+UkCAqKlF1aWNrIFNldHVwKio6XFxuYCArXG4gICAgICAgICAgICBgMS4gUnVuOiBcXGBzZXR1cF9naXRodWJfYXV0aFxcYCB0byBhdXRoZW50aWNhdGVcXG5gICtcbiAgICAgICAgICAgIGAyLiBPciB1c2U6IFxcYGdoIGF1dGggbG9naW4gLS13ZWJcXGAgaWYgeW91IGhhdmUgR2l0SHViIENMSVxcblxcbmAgK1xuICAgICAgICAgICAgYPCfk50gKipXaGF0IHRoaXMgZW5hYmxlcyoqOlxcbmAgK1xuICAgICAgICAgICAgYOKAoiBVcGxvYWQgZWxlbWVudHMgdG8geW91ciBHaXRIdWIgcG9ydGZvbGlvXFxuYCArXG4gICAgICAgICAgICBg4oCiIFN5bmMgeW91ciBsb2NhbCBwb3J0Zm9saW8gd2l0aCBHaXRIdWJcXG5gICtcbiAgICAgICAgICAgIGDigKIgU2hhcmUgZWxlbWVudHMgd2l0aCB0aGUgY29tbXVuaXR5XFxuXFxuYCArXG4gICAgICAgICAgICBg8J+MkCAqKk5lZWQgaGVscD8qKiBWaXNpdDogaHR0cHM6Ly9kb2NzLmFudGhyb3BpYy5jb20vZW4vZG9jcy9jbGF1ZGUtY29kZS9vYXV0aC1zZXR1cGBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCB1c2VybmFtZSA9IGF1dGhTdGF0dXMudXNlcm5hbWU7XG5cbiAgICAgIC8vIENoZWNrIGlmIHBvcnRmb2xpbyBhbHJlYWR5IGV4aXN0c1xuICAgICAgY29uc3QgeyBQb3J0Zm9saW9SZXBvTWFuYWdlciB9ID0gYXdhaXQgaW1wb3J0KCcuL3BvcnRmb2xpby9Qb3J0Zm9saW9SZXBvTWFuYWdlci5qcycpO1xuICAgICAgY29uc3QgcG9ydGZvbGlvTWFuYWdlciA9IG5ldyBQb3J0Zm9saW9SZXBvTWFuYWdlcigpO1xuICAgICAgY29uc3QgcG9ydGZvbGlvRXhpc3RzID0gYXdhaXQgcG9ydGZvbGlvTWFuYWdlci5jaGVja1BvcnRmb2xpb0V4aXN0cyh1c2VybmFtZSk7XG5cbiAgICAgIGlmIChwb3J0Zm9saW9FeGlzdHMpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inIUgUG9ydGZvbGlvIGFscmVhZHkgZXhpc3RzIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS8ke3VzZXJuYW1lfS9kb2xsaG91c2UtcG9ydGZvbGlvXFxuXFxuVXNlIHBvcnRmb2xpb19zdGF0dXMgdG8gc2VlIGRldGFpbHMgb3Igc3luY19wb3J0Zm9saW8gdG8gdXBkYXRlIGl0LmBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBDcmVhdGUgcG9ydGZvbGlvIHdpdGggZXhwbGljaXQgY29uc2VudFxuICAgICAgY29uc3QgcG9ydGZvbGlvVXJsID0gYXdhaXQgcG9ydGZvbGlvTWFuYWdlci5jcmVhdGVQb3J0Zm9saW8odXNlcm5hbWUsIHRydWUpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpffCfjokgKipQb3J0Zm9saW8gQ3JlYXRlZCBTdWNjZXNzZnVsbHkhKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgICBg4pyFICoqUmVwb3NpdG9yeSoqOiBodHRwczovL2dpdGh1Yi5jb20vJHt1c2VybmFtZX0vZG9sbGhvdXNlLXBvcnRmb2xpb1xcbmAgK1xuICAgICAgICAgICAgICAgIGDwn5OBICoqU3RydWN0dXJlKio6IE9yZ2FuaXplZCBmb2xkZXJzIGZvciBhbGwgZWxlbWVudCB0eXBlc1xcbmAgK1xuICAgICAgICAgICAgICAgIGDwn5OdICoqUkVBRE1FKio6IFVzYWdlIGluc3RydWN0aW9ucyBpbmNsdWRlZFxcbmAgK1xuICAgICAgICAgICAgICAgIGDwn5SEICoqTmV4dCBTdGVwKio6IFVzZSBzeW5jX3BvcnRmb2xpbyB0byB1cGxvYWQgeW91ciBlbGVtZW50c1xcblxcbmAgK1xuICAgICAgICAgICAgICAgIGBZb3VyIHBvcnRmb2xpbyBpcyByZWFkeSBmb3Igc2hhcmluZyB5b3VyIERvbGxob3VzZU1DUCBjcmVhdGlvbnMhYFxuICAgICAgICB9XVxuICAgICAgfTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBGYWlsZWQgdG8gaW5pdGlhbGl6ZSBwb3J0Zm9saW86ICR7U2VjdXJlRXJyb3JIYW5kbGVyLnNhbml0aXplRXJyb3IoZXJyb3IpLm1lc3NhZ2V9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlndXJlIHBvcnRmb2xpbyBzZXR0aW5nc1xuICAgKi9cbiAgYXN5bmMgcG9ydGZvbGlvQ29uZmlnKG9wdGlvbnM6IHthdXRvU3luYz86IGJvb2xlYW47IGRlZmF1bHRWaXNpYmlsaXR5Pzogc3RyaW5nOyBhdXRvU3VibWl0PzogYm9vbGVhbjsgcmVwb3NpdG9yeU5hbWU/OiBzdHJpbmd9KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbmZpZ01hbmFnZXIgPSBDb25maWdNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG4gICAgICBhd2FpdCBjb25maWdNYW5hZ2VyLmxvYWRDb25maWcoKTtcblxuICAgICAgbGV0IHN0YXR1c1RleHQgPSBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3impnvuI8gKipQb3J0Zm9saW8gQ29uZmlndXJhdGlvbioqXFxuXFxuYDtcblxuICAgICAgLy8gVXBkYXRlIHNldHRpbmdzIGlmIHByb3ZpZGVkXG4gICAgICBpZiAob3B0aW9ucy5hdXRvU3luYyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIFRoaXMgd291bGQgYmUgaW1wbGVtZW50ZWQgd2hlbiBhdXRvLXN5bmMgZmVhdHVyZSBpcyBhZGRlZFxuICAgICAgICBzdGF0dXNUZXh0ICs9IGDwn5SEIEF1dG8tc3luYzogJHtvcHRpb25zLmF1dG9TeW5jID8gJ0VuYWJsZWQnIDogJ0Rpc2FibGVkJ30gKENvbWluZyBzb29uKVxcbmA7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmRlZmF1bHRWaXNpYmlsaXR5KSB7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYPCflJIgRGVmYXVsdCB2aXNpYmlsaXR5OiAke29wdGlvbnMuZGVmYXVsdFZpc2liaWxpdHl9XFxuYDtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuYXV0b1N1Ym1pdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIE5vdGU6IEF1dG8tc3VibWl0IGNvbmZpZ3VyYXRpb24gd291bGQgYmUgaW1wbGVtZW50ZWQgaGVyZVxuICAgICAgICAvLyBGb3Igbm93LCB3ZSdsbCBqdXN0IHNob3cgdGhlIHN0YXR1c1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGDwn5OkIEF1dG8tc3VibWl0IHRvIGNvbGxlY3Rpb246ICR7b3B0aW9ucy5hdXRvU3VibWl0ID8gJ0VuYWJsZWQnIDogJ0Rpc2FibGVkJ30gKENvbWluZyBzb29uKVxcbmA7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnJlcG9zaXRvcnlOYW1lKSB7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYPCfk4EgUmVwb3NpdG9yeSBuYW1lOiAke29wdGlvbnMucmVwb3NpdG9yeU5hbWV9IChDdXN0b20gbmFtZXMgY29taW5nIHNvb24pXFxuYDtcbiAgICAgIH1cblxuICAgICAgLy8gU2hvdyBjdXJyZW50IGNvbmZpZ3VyYXRpb25cbiAgICAgIHN0YXR1c1RleHQgKz0gYFxcbvCfk4sgKipDdXJyZW50IFNldHRpbmdzKio6XFxuYDtcbiAgICAgIHN0YXR1c1RleHQgKz0gYCAg4oCiIEF1dG8tc3VibWl0OiBEaXNhYmxlZCAoQ29taW5nIHNvb24pXFxuYDtcbiAgICAgIHN0YXR1c1RleHQgKz0gYCAg4oCiIFJlcG9zaXRvcnkgbmFtZTogZG9sbGhvdXNlLXBvcnRmb2xpbyAoZGVmYXVsdClcXG5gO1xuICAgICAgc3RhdHVzVGV4dCArPSBgICDigKIgRGVmYXVsdCB2aXNpYmlsaXR5OiBwdWJsaWNcXG5gO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IHN0YXR1c1RleHRcbiAgICAgICAgfV1cbiAgICAgIH07XG5cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgRmFpbGVkIHRvIGNvbmZpZ3VyZSBwb3J0Zm9saW86ICR7U2VjdXJlRXJyb3JIYW5kbGVyLnNhbml0aXplRXJyb3IoZXJyb3IpLm1lc3NhZ2V9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3luYyBwb3J0Zm9saW8gd2l0aCBHaXRIdWJcbiAgICovXG4gIGFzeW5jIHN5bmNQb3J0Zm9saW8ob3B0aW9uczoge2RpcmVjdGlvbjogc3RyaW5nOyBmb3JjZTogYm9vbGVhbjsgZHJ5UnVuOiBib29sZWFufSkge1xuICAgIHRyeSB7XG4gICAgICAvLyBDaGVjayBhdXRoZW50aWNhdGlvblxuICAgICAgY29uc3QgYXV0aFN0YXR1cyA9IGF3YWl0IHRoaXMuZ2l0aHViQXV0aE1hbmFnZXIuZ2V0QXV0aFN0YXR1cygpO1xuICAgICAgaWYgKCFhdXRoU3RhdHVzLmlzQXV0aGVudGljYXRlZCB8fCAhYXV0aFN0YXR1cy51c2VybmFtZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCAqKkdpdEh1YiBBdXRoZW50aWNhdGlvbiBSZXF1aXJlZCoqXFxuXFxuYCArXG4gICAgICAgICAgICBg8J+UkCAqKlF1aWNrIFNldHVwKio6XFxuYCArXG4gICAgICAgICAgICBgMS4gUnVuOiBcXGBzZXR1cF9naXRodWJfYXV0aFxcYCB0byBhdXRoZW50aWNhdGVcXG5gICtcbiAgICAgICAgICAgIGAyLiBPciB1c2U6IFxcYGdoIGF1dGggbG9naW4gLS13ZWJcXGAgaWYgeW91IGhhdmUgR2l0SHViIENMSVxcblxcbmAgK1xuICAgICAgICAgICAgYPCfk50gKipXaGF0IHRoaXMgZW5hYmxlcyoqOlxcbmAgK1xuICAgICAgICAgICAgYOKAoiBVcGxvYWQgZWxlbWVudHMgdG8geW91ciBHaXRIdWIgcG9ydGZvbGlvXFxuYCArXG4gICAgICAgICAgICBg4oCiIFN5bmMgeW91ciBsb2NhbCBwb3J0Zm9saW8gd2l0aCBHaXRIdWJcXG5gICtcbiAgICAgICAgICAgIGDigKIgU2hhcmUgZWxlbWVudHMgd2l0aCB0aGUgY29tbXVuaXR5XFxuXFxuYCArXG4gICAgICAgICAgICBg8J+MkCAqKk5lZWQgaGVscD8qKiBWaXNpdDogaHR0cHM6Ly9kb2NzLmFudGhyb3BpYy5jb20vZW4vZG9jcy9jbGF1ZGUtY29kZS9vYXV0aC1zZXR1cGBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCB1c2VybmFtZSA9IGF1dGhTdGF0dXMudXNlcm5hbWU7XG5cbiAgICAgIC8vIENoZWNrIGlmIHBvcnRmb2xpbyBleGlzdHNcbiAgICAgIGNvbnN0IHsgUG9ydGZvbGlvUmVwb01hbmFnZXIgfSA9IGF3YWl0IGltcG9ydCgnLi9wb3J0Zm9saW8vUG9ydGZvbGlvUmVwb01hbmFnZXIuanMnKTtcbiAgICAgIGNvbnN0IHBvcnRmb2xpb01hbmFnZXIgPSBuZXcgUG9ydGZvbGlvUmVwb01hbmFnZXIoKTtcbiAgICAgIFxuICAgICAgLy8gQ1JJVElDQUwgRklYOiBTZXQgR2l0SHViIHRva2VuIGxpa2Ugc3VibWl0X2NvbnRlbnQgZG9lc1xuICAgICAgLy8gV2l0aG91dCB0aGlzLCBjaGVja1BvcnRmb2xpb0V4aXN0cyBmYWlscyBiZWNhdXNlIGl0IGNhbid0IGF1dGhlbnRpY2F0ZSB0byBHaXRIdWJcbiAgICAgIGNvbnN0IHsgVG9rZW5NYW5hZ2VyIH0gPSBhd2FpdCBpbXBvcnQoJy4vc2VjdXJpdHkvdG9rZW5NYW5hZ2VyLmpzJyk7XG4gICAgICBjb25zdCB0b2tlbiA9IGF3YWl0IFRva2VuTWFuYWdlci5nZXRHaXRIdWJUb2tlbkFzeW5jKCk7XG4gICAgICBpZiAoIXRva2VuKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIEdpdEh1YiBhdXRoZW50aWNhdGlvbiByZXF1aXJlZC4gUGxlYXNlIGF1dGhlbnRpY2F0ZSBmaXJzdCB1c2luZyBzZXR1cF9naXRodWJfYXV0aC5gXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHBvcnRmb2xpb01hbmFnZXIuc2V0VG9rZW4odG9rZW4pO1xuICAgICAgXG4gICAgICBjb25zdCBwb3J0Zm9saW9FeGlzdHMgPSBhd2FpdCBwb3J0Zm9saW9NYW5hZ2VyLmNoZWNrUG9ydGZvbGlvRXhpc3RzKHVzZXJuYW1lKTtcblxuICAgICAgaWYgKCFwb3J0Zm9saW9FeGlzdHMpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgKipObyBQb3J0Zm9saW8gUmVwb3NpdG9yeSBGb3VuZCoqXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBg8J+PoCAqKlF1aWNrIFNldHVwKio6XFxuYCArXG4gICAgICAgICAgICAgICAgICBgMS4gUnVuOiBcXGBpbml0X3BvcnRmb2xpb1xcYCB0byBjcmVhdGUgeW91ciBHaXRIdWIgcG9ydGZvbGlvXFxuYCArXG4gICAgICAgICAgICAgICAgICBgMi4gVGhpcyBjcmVhdGVzOiBodHRwczovL2dpdGh1Yi5jb20vW3VzZXJuYW1lXS9kb2xsaG91c2UtcG9ydGZvbGlvXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBg8J+TnSAqKldoYXQgeW91J2xsIGdldCoqOlxcbmAgK1xuICAgICAgICAgICAgICAgICAgYOKAoiBQdWJsaWMgcmVwb3NpdG9yeSB0byBzaG93Y2FzZSB5b3VyIEFJIGVsZW1lbnRzXFxuYCArXG4gICAgICAgICAgICAgICAgICBg4oCiIE9yZ2FuaXplZCBzdHJ1Y3R1cmUgZm9yIHBlcnNvbmFzLCBza2lsbHMsIHRlbXBsYXRlcywgYW5kIGFnZW50c1xcbmAgK1xuICAgICAgICAgICAgICAgICAgYOKAoiBBdXRvbWF0aWMgc3luY2luZyBvZiB5b3VyIGxvY2FsIHBvcnRmb2xpb1xcbmAgK1xuICAgICAgICAgICAgICAgICAgYOKAoiBDb21tdW5pdHkgc2hhcmluZyBjYXBhYmlsaXRpZXNcXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGDwn5qAICoqQWZ0ZXIgc2V0dXAqKjogVXNlIFxcYHN5bmNfcG9ydGZvbGlvXFxgIHRvIHVwbG9hZCB5b3VyIGNvbnRlbnQhYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmRyeVJ1bikge1xuICAgICAgICAvLyBTaG93IHdoYXQgd291bGQgYmUgc3luY2VkXG4gICAgICAgIGNvbnN0IGxvY2FsUG9ydGZvbGlvTWFuYWdlciA9IFBvcnRmb2xpb01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IGVsZW1lbnRUeXBlQ291bnRzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBzdHJpbmc+ID0ge307XG4gICAgICAgIGNvbnN0IGVsZW1lbnRUeXBlRXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBcbiAgICAgICAgLy8gR2V0IGVsZW1lbnQgY291bnRzIHdpdGggYmV0dGVyIGVycm9yIGhhbmRsaW5nXG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudFR5cGUgb2YgWydwZXJzb25hcycsICdza2lsbHMnLCAndGVtcGxhdGVzJywgJ2FnZW50cyddKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzID0gYXdhaXQgdGhpcy5nZXRFbGVtZW50c0xpc3QoZWxlbWVudFR5cGUpO1xuICAgICAgICAgICAgZWxlbWVudFR5cGVDb3VudHNbZWxlbWVudFR5cGVdID0gZWxlbWVudHMubGVuZ3RoO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICAgIGVsZW1lbnRUeXBlQ291bnRzW2VsZW1lbnRUeXBlXSA9ICdFUlJPUic7XG4gICAgICAgICAgICBlbGVtZW50VHlwZUVycm9ycy5wdXNoKGAke2VsZW1lbnRUeXBlfTogJHtlcnJvci5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yJ31gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZHJ5UnVuVGV4dCA9IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpffCflI0gKipEcnkgUnVuIC0gUG9ydGZvbGlvIFN5bmMgUHJldmlldyoqXFxuXFxuYDtcbiAgICAgICAgZHJ5UnVuVGV4dCArPSBg8J+TpCAqKkVsZW1lbnRzIHRvIHN5bmMqKiAoJHtvcHRpb25zLmRpcmVjdGlvbn0pOlxcbmA7XG4gICAgICAgIGRyeVJ1blRleHQgKz0gYCAg4oCiIFBlcnNvbmFzOiAke2VsZW1lbnRUeXBlQ291bnRzLnBlcnNvbmFzfVxcbmA7XG4gICAgICAgIGRyeVJ1blRleHQgKz0gYCAg4oCiIFNraWxsczogJHtlbGVtZW50VHlwZUNvdW50cy5za2lsbHN9XFxuYDtcbiAgICAgICAgZHJ5UnVuVGV4dCArPSBgICDigKIgVGVtcGxhdGVzOiAke2VsZW1lbnRUeXBlQ291bnRzLnRlbXBsYXRlc31cXG5gO1xuICAgICAgICBkcnlSdW5UZXh0ICs9IGAgIOKAoiBBZ2VudHM6ICR7ZWxlbWVudFR5cGVDb3VudHMuYWdlbnRzfVxcblxcbmA7XG4gICAgICAgIFxuICAgICAgICAvLyBJbmNsdWRlIGFueSBlcnJvcnMgZW5jb3VudGVyZWQgZHVyaW5nIGRyeSBydW5cbiAgICAgICAgaWYgKGVsZW1lbnRUeXBlRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBkcnlSdW5UZXh0ICs9IGDimqDvuI8gKipFcnJvcnMgZm91bmQgZHVyaW5nIHByZXZpZXc6KipcXG5gO1xuICAgICAgICAgIGZvciAoY29uc3QgZXJyb3Igb2YgZWxlbWVudFR5cGVFcnJvcnMpIHtcbiAgICAgICAgICAgIGRyeVJ1blRleHQgKz0gYCAg4oCiICR7ZXJyb3J9XFxuYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgZHJ5UnVuVGV4dCArPSBgXFxuYDtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgZHJ5UnVuVGV4dCArPSBg8J+OryAqKlRhcmdldCoqOiBodHRwczovL2dpdGh1Yi5jb20vJHt1c2VybmFtZX0vZG9sbGhvdXNlLXBvcnRmb2xpb1xcbmA7XG4gICAgICAgIGRyeVJ1blRleHQgKz0gYOKaoO+4jyAgKipOb3RlKio6IFRoaXMgaXMgYSBwcmV2aWV3LiBSZW1vdmUgZHJ5X3J1bj10cnVlIHRvIHBlcmZvcm0gYWN0dWFsIHN5bmMuYDtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGRyeVJ1blRleHRcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBGb3Igbm93LCBpbXBsZW1lbnQgYmFzaWMgcHVzaCBmdW5jdGlvbmFsaXR5XG4gICAgICBpZiAob3B0aW9ucy5kaXJlY3Rpb24gPT09ICdwdXNoJyB8fCBvcHRpb25zLmRpcmVjdGlvbiA9PT0gJ2JvdGgnKSB7XG4gICAgICAgIGxldCBzeW5jQ291bnQgPSAwO1xuICAgICAgICBsZXQgdG90YWxFbGVtZW50cyA9IDA7XG4gICAgICAgIGxldCBzeW5jVGV4dCA9IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpffCflIQgKipTeW5jaW5nIFBvcnRmb2xpby4uLioqXFxuXFxuYDtcblxuICAgICAgICAvLyBVWCBJTVBST1ZFTUVOVDogQ2FsY3VsYXRlIHRvdGFsIGVsZW1lbnRzIGZvciBwcm9ncmVzcyB0cmFja2luZ1xuICAgICAgICBjb25zdCBlbGVtZW50VHlwZXMgPSBbJ3BlcnNvbmFzJywgJ3NraWxscycsICd0ZW1wbGF0ZXMnLCAnYWdlbnRzJ10gYXMgY29uc3Q7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRDb3VudHM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fTtcbiAgICAgICAgY29uc3QgZmFpbGVkRWxlbWVudHM6IEFycmF5PHt0eXBlOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgZXJyb3I6IHN0cmluZ30+ID0gW107XG4gICAgICAgIFxuICAgICAgICAvLyBQcmUtY2FsY3VsYXRlIHRvdGFscyBmb3IgYmV0dGVyIHByb2dyZXNzIGluZGljYXRvcnNcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBzeW5jVGV4dCArPSBg8J+TiiAqKkNhbGN1bGF0aW5nIHN5bmMgc2NvcGUuLi4qKlxcbmA7XG4gICAgICAgICAgZm9yIChjb25zdCBlbGVtZW50VHlwZSBvZiBlbGVtZW50VHlwZXMpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzID0gYXdhaXQgdGhpcy5nZXRFbGVtZW50c0xpc3QoZWxlbWVudFR5cGUpO1xuICAgICAgICAgICAgICBlbGVtZW50Q291bnRzW2VsZW1lbnRUeXBlXSA9IGVsZW1lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgICAgdG90YWxFbGVtZW50cyArPSBlbGVtZW50cy5sZW5ndGg7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgICAgIGVsZW1lbnRDb3VudHNbZWxlbWVudFR5cGVdID0gMDtcbiAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oYEZhaWxlZCB0byBjb3VudCAke2VsZW1lbnRUeXBlfWAsIHsgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIHN5bmNUZXh0ICs9IGBcXG7wn46vICoqUmVhZHkgdG8gc3luYyAke3RvdGFsRWxlbWVudHN9IGVsZW1lbnRzOioqXFxuYDtcbiAgICAgICAgICBmb3IgKGNvbnN0IFt0eXBlLCBjb3VudF0gb2YgT2JqZWN0LmVudHJpZXMoZWxlbWVudENvdW50cykpIHtcbiAgICAgICAgICAgIGNvbnN0IGljb24gPSBjb3VudCA+IDAgPyAn4pyFJyA6ICfimqonO1xuICAgICAgICAgICAgc3luY1RleHQgKz0gYCAgJHtpY29ufSAke3R5cGV9OiAke2NvdW50fSBlbGVtZW50c1xcbmA7XG4gICAgICAgICAgfVxuICAgICAgICAgIHN5bmNUZXh0ICs9IGBcXG7wn5qAICoqU3RhcnRpbmcgc3luYyBwcm9jZXNzLi4uKipcXG5cXG5gO1xuICAgICAgICAgIFxuICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgc3luY1RleHQgKz0gYFxcbuKaoO+4jyAqKldhcm5pbmcqKjogQ291bGQgbm90IGNhbGN1bGF0ZSBzeW5jIHNjb3BlOiAke2Vycm9yLm1lc3NhZ2V9XFxuXFxuYDtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gVVggSU1QUk9WRU1FTlQ6IFByb2Nlc3MgZWFjaCBlbGVtZW50IHR5cGUgd2l0aCBwcm9ncmVzcyB0cmFja2luZ1xuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnRUeXBlIG9mIGVsZW1lbnRUeXBlcykge1xuICAgICAgICAgIGNvbnN0IHR5cGVDb3VudCA9IGVsZW1lbnRDb3VudHNbZWxlbWVudFR5cGVdIHx8IDA7XG4gICAgICAgICAgaWYgKHR5cGVDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgc3luY1RleHQgKz0gYOKPqSAqKlNraXBwaW5nICR7ZWxlbWVudFR5cGV9KiogKG5vIGVsZW1lbnRzIGZvdW5kKVxcbmA7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgc3luY1RleHQgKz0gYPCfk4EgKipQcm9jZXNzaW5nICR7ZWxlbWVudFR5cGV9KiogKCR7dHlwZUNvdW50fSBlbGVtZW50cyk6XFxuYDtcbiAgICAgICAgICBsZXQgdHlwZVN1Y2Nlc3NDb3VudCA9IDA7XG4gICAgICAgICAgXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzID0gYXdhaXQgdGhpcy5nZXRFbGVtZW50c0xpc3QoZWxlbWVudFR5cGUpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnROYW1lID0gZWxlbWVudHNbaV07XG4gICAgICAgICAgICAgIGNvbnN0IHByb2dyZXNzID0gYFske2kgKyAxfS8ke2VsZW1lbnRzLmxlbmd0aH1dYDtcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgLy8gVVggSU1QUk9WRU1FTlQ6IFNob3cgaW5kaXZpZHVhbCBlbGVtZW50IHByb2dyZXNzXG4gICAgICAgICAgICAgICAgc3luY1RleHQgKz0gYCAgJHtwcm9ncmVzc30g8J+UhCBTeW5jaW5nIFwiJHtlbGVtZW50TmFtZX1cIi4uLmA7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gTG9hZCBlbGVtZW50IGFuZCBzYXZlIHRvIHBvcnRmb2xpb1xuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBhd2FpdCB0aGlzLmxvYWRFbGVtZW50QnlUeXBlKGVsZW1lbnROYW1lLCBlbGVtZW50VHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgIGF3YWl0IHBvcnRmb2xpb01hbmFnZXIuc2F2ZUVsZW1lbnQoZWxlbWVudCwgdHJ1ZSk7IC8vIEV4cGxpY2l0IGNvbnNlbnRcbiAgICAgICAgICAgICAgICAgIHN5bmNDb3VudCsrO1xuICAgICAgICAgICAgICAgICAgdHlwZVN1Y2Nlc3NDb3VudCsrO1xuICAgICAgICAgICAgICAgICAgc3luY1RleHQgKz0gYCDinIVcXG5gO1xuICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKGBTdWNjZXNzZnVsbHkgc3luY2VkICR7ZWxlbWVudFR5cGV9LyR7ZWxlbWVudE5hbWV9YCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHN5bmNUZXh0ICs9IGAg4p2MIChudWxsIGVsZW1lbnQpXFxuYDtcbiAgICAgICAgICAgICAgICAgIGZhaWxlZEVsZW1lbnRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBlbGVtZW50VHlwZSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogZWxlbWVudE5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiAnRWxlbWVudCBsb2FkZWQgYXMgbnVsbC91bmRlZmluZWQnXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGVsZW1lbnRFcnJvcjogYW55KSB7XG4gICAgICAgICAgICAgICAgLy8gRXh0cmFjdCBlcnJvciBjb2RlIGlmIHByZXNlbnRcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvckNvZGUgPSBlbGVtZW50RXJyb3IuY29kZSB8fCAoZWxlbWVudEVycm9yLm1lc3NhZ2U/Lm1hdGNoKC9cXFsoW0EtWl9dK19cXGQrKVxcXS8pPy5bMV0pIHx8ICcnO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVsZW1lbnRFcnJvci5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yIGR1cmluZyBlbGVtZW50IHN5bmMnO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIENsZWFuIHVwIGVycm9yIG1lc3NhZ2UgZm9yIGRpc3BsYXkgKHJlbW92ZSBjb2RlIGlmIGFscmVhZHkgZXh0cmFjdGVkKVxuICAgICAgICAgICAgICAgIGNvbnN0IGRpc3BsYXlNZXNzYWdlID0gZXJyb3JDb2RlIFxuICAgICAgICAgICAgICAgICAgPyBlcnJvck1lc3NhZ2UucmVwbGFjZSgvXFxbW0EtWl9dK19cXGQrXFxdXFxzKi8sICcnKVxuICAgICAgICAgICAgICAgICAgOiBlcnJvck1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gU2hvdyBlcnJvciBjb2RlIGluIG91dHB1dCBmb3IgYmV0dGVyIGRpYWdub3N0aWNzXG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3JPdXRwdXQgPSBlcnJvckNvZGUgXG4gICAgICAgICAgICAgICAgICA/IGAke2Vycm9yQ29kZX06ICR7ZGlzcGxheU1lc3NhZ2V9YFxuICAgICAgICAgICAgICAgICAgOiBkaXNwbGF5TWVzc2FnZTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBzeW5jVGV4dCArPSBgIOKdjCAoJHtlcnJvck91dHB1dH0pXFxuYDtcbiAgICAgICAgICAgICAgICBmYWlsZWRFbGVtZW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IGVsZW1lbnRUeXBlLFxuICAgICAgICAgICAgICAgICAgbmFtZTogZWxlbWVudE5hbWUsXG4gICAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3JPdXRwdXRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBsb2dnZXIud2FybihgRmFpbGVkIHRvIHN5bmMgJHtlbGVtZW50VHlwZX0vJHtlbGVtZW50TmFtZX1gLCB7IFxuICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yTWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgIGVycm9yQ29kZSxcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnROYW1lLFxuICAgICAgICAgICAgICAgICAgZWxlbWVudFR5cGVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBVWCBJTVBST1ZFTUVOVDogU2hvdyBjb21wbGV0aW9uIHN1bW1hcnkgZm9yIGVhY2ggdHlwZVxuICAgICAgICAgICAgY29uc3Qgc3VjY2Vzc1JhdGUgPSBlbGVtZW50cy5sZW5ndGggPiAwID8gTWF0aC5yb3VuZCgodHlwZVN1Y2Nlc3NDb3VudCAvIGVsZW1lbnRzLmxlbmd0aCkgKiAxMDApIDogMDtcbiAgICAgICAgICAgIGNvbnN0IHN0YXR1c0ljb24gPSBzdWNjZXNzUmF0ZSA9PT0gMTAwID8gJ/CfjoknIDogc3VjY2Vzc1JhdGUgPiA1MCA/ICfimqDvuI8nIDogJ+KdjCc7XG4gICAgICAgICAgICBzeW5jVGV4dCArPSBgICAke3N0YXR1c0ljb259ICoqJHtlbGVtZW50VHlwZX0gY29tcGxldGUqKjogJHt0eXBlU3VjY2Vzc0NvdW50fS8ke2VsZW1lbnRzLmxlbmd0aH0gc3luY2VkICgke3N1Y2Nlc3NSYXRlfSUpXFxuXFxuYDtcbiAgICAgICAgICB9IGNhdGNoIChsaXN0RXJyb3I6IGFueSkge1xuICAgICAgICAgICAgLy8gVVggSU1QUk9WRU1FTlQ6IEJldHRlciBlcnJvciByZXBvcnRpbmcgZm9yIGxpc3QgZmFpbHVyZXNcbiAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGxpc3RFcnJvci5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gZ2V0IGVsZW1lbnRzIGxpc3QnO1xuICAgICAgICAgICAgc3luY1RleHQgKz0gYCAg4p2MICoqRmFpbGVkIHRvIGxpc3QgJHtlbGVtZW50VHlwZX0qKjogJHtlcnJvck1lc3NhZ2V9XFxuXFxuYDtcbiAgICAgICAgICAgIGZhaWxlZEVsZW1lbnRzLnB1c2goe1xuICAgICAgICAgICAgICB0eXBlOiBlbGVtZW50VHlwZSxcbiAgICAgICAgICAgICAgbmFtZTogJ0FMTCcsXG4gICAgICAgICAgICAgIGVycm9yOiBgRmFpbGVkIHRvIGxpc3QgJHtlbGVtZW50VHlwZX06ICR7ZXJyb3JNZXNzYWdlfWBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbG9nZ2VyLndhcm4oYEZhaWxlZCB0byBnZXQgJHtlbGVtZW50VHlwZX0gbGlzdGAsIHsgZXJyb3I6IGVycm9yTWVzc2FnZSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBVWCBJTVBST1ZFTUVOVDogRW5oYW5jZWQgZmluYWwgc3VtbWFyeSB3aXRoIGFjdGlvbmFibGUgaW5zaWdodHNcbiAgICAgICAgY29uc3Qgc3VjY2Vzc1JhdGUgPSB0b3RhbEVsZW1lbnRzID4gMCA/IE1hdGgucm91bmQoKHN5bmNDb3VudCAvIHRvdGFsRWxlbWVudHMpICogMTAwKSA6IDA7XG4gICAgICAgIGNvbnN0IHN1bW1hcnlJY29uID0gc3VjY2Vzc1JhdGUgPT09IDEwMCA/ICfwn46JJyA6IHN1Y2Nlc3NSYXRlID49IDgwID8gJ+KchScgOiBzdWNjZXNzUmF0ZSA+PSA1MCA/ICfimqDvuI8nIDogJ+KdjCc7XG4gICAgICAgIFxuICAgICAgICBzeW5jVGV4dCArPSBgJHtzdW1tYXJ5SWNvbn0gKipTeW5jIENvbXBsZXRlISoqXFxuYDtcbiAgICAgICAgc3luY1RleHQgKz0gYPCfk4ogKipPdmVyYWxsIFJlc3VsdHMqKjogJHtzeW5jQ291bnR9LyR7dG90YWxFbGVtZW50c30gZWxlbWVudHMgc3luY2VkICgke3N1Y2Nlc3NSYXRlfSUpXFxuYDtcbiAgICAgICAgc3luY1RleHQgKz0gYPCfj6AgKipQb3J0Zm9saW8qKjogaHR0cHM6Ly9naXRodWIuY29tLyR7dXNlcm5hbWV9L2RvbGxob3VzZS1wb3J0Zm9saW9cXG5cXG5gO1xuICAgICAgICBcbiAgICAgICAgLy8gSW5jbHVkZSBmYWlsZWQgZWxlbWVudHMgaW5mb3JtYXRpb24gd2l0aCBhY3Rpb25hYmxlIHN1Z2dlc3Rpb25zXG4gICAgICAgIGlmIChmYWlsZWRFbGVtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgc3luY1RleHQgKz0gYOKaoO+4jyAqKklzc3VlcyBFbmNvdW50ZXJlZCoqICgke2ZhaWxlZEVsZW1lbnRzLmxlbmd0aH0gcHJvYmxlbXMpOlxcblxcbmA7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gR3JvdXAgZmFpbHVyZXMgYnkgdHlwZSBmb3IgYmV0dGVyIG9yZ2FuaXphdGlvblxuICAgICAgICAgIGNvbnN0IGZhaWx1cmVzQnlUeXBlOiBSZWNvcmQ8c3RyaW5nLCBBcnJheTx7bmFtZTogc3RyaW5nLCBlcnJvcjogc3RyaW5nfT4+ID0ge307XG4gICAgICAgICAgZm9yIChjb25zdCBmYWlsZWQgb2YgZmFpbGVkRWxlbWVudHMpIHtcbiAgICAgICAgICAgIGlmICghZmFpbHVyZXNCeVR5cGVbZmFpbGVkLnR5cGVdKSB7XG4gICAgICAgICAgICAgIGZhaWx1cmVzQnlUeXBlW2ZhaWxlZC50eXBlXSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmFpbHVyZXNCeVR5cGVbZmFpbGVkLnR5cGVdLnB1c2goeyBuYW1lOiBmYWlsZWQubmFtZSwgZXJyb3I6IGZhaWxlZC5lcnJvciB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgZm9yIChjb25zdCBbdHlwZSwgZmFpbHVyZXNdIG9mIE9iamVjdC5lbnRyaWVzKGZhaWx1cmVzQnlUeXBlKSkge1xuICAgICAgICAgICAgc3luY1RleHQgKz0gYPCfk4EgKioke3R5cGV9KiogKCR7ZmFpbHVyZXMubGVuZ3RofSBpc3N1ZXMpOlxcbmA7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZhaWx1cmUgb2YgZmFpbHVyZXMpIHtcbiAgICAgICAgICAgICAgaWYgKGZhaWx1cmUubmFtZSA9PT0gJ0FMTCcpIHtcbiAgICAgICAgICAgICAgICBzeW5jVGV4dCArPSBgICDinYwgJHtmYWlsdXJlLmVycm9yfVxcbmA7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3luY1RleHQgKz0gYCAg4p2MIFwiJHtmYWlsdXJlLm5hbWV9XCI6ICR7ZmFpbHVyZS5lcnJvcn1cXG5gO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzeW5jVGV4dCArPSBgXFxuYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gVVggSU1QUk9WRU1FTlQ6IEFkZCBoZWxwZnVsIHN1Z2dlc3Rpb25zIGJhc2VkIG9uIGVycm9yIGNvZGVzIGZvdW5kXG4gICAgICAgICAgc3luY1RleHQgKz0gYPCfkqEgKipUcm91Ymxlc2hvb3RpbmcgVGlwcyoqOlxcbmA7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gQ2hlY2sgZm9yIHNwZWNpZmljIGVycm9yIGNvZGVzIGFuZCBwcm92aWRlIHRhcmdldGVkIGFkdmljZVxuICAgICAgICAgIGNvbnN0IGVycm9yQ29kZXMgPSBmYWlsZWRFbGVtZW50cy5tYXAoZiA9PiBmLmVycm9yLm1hdGNoKC9eKFtBLVpfXStfXFxkKyk6Lyk/LlsxXSkuZmlsdGVyKEJvb2xlYW4pO1xuICAgICAgICAgIGNvbnN0IHVuaXF1ZUVycm9yQ29kZXMgPSBbLi4ubmV3IFNldChlcnJvckNvZGVzKV07XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKHVuaXF1ZUVycm9yQ29kZXMuaW5jbHVkZXMoJ1BPUlRGT0xJT19TWU5DXzAwMScpKSB7XG4gICAgICAgICAgICBzeW5jVGV4dCArPSBgICDigKIg8J+UkCAqKkF1dGggRXJyb3IqKjogUnVuIFxcYHNldHVwX2dpdGh1Yl9hdXRoXFxgIHRvIHJlLWF1dGhlbnRpY2F0ZVxcbmA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1bmlxdWVFcnJvckNvZGVzLmluY2x1ZGVzKCdQT1JURk9MSU9fU1lOQ18wMDInKSkge1xuICAgICAgICAgICAgc3luY1RleHQgKz0gYCAg4oCiIPCfk4EgKipSZXBvIE1pc3NpbmcqKjogUnVuIFxcYGluaXRfcG9ydGZvbGlvXFxgIHRvIGNyZWF0ZSB5b3VyIHJlcG9zaXRvcnlcXG5gO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodW5pcXVlRXJyb3JDb2Rlcy5pbmNsdWRlcygnUE9SVEZPTElPX1NZTkNfMDA0JykpIHtcbiAgICAgICAgICAgIHN5bmNUZXh0ICs9IGAgIOKAoiDwn5SnICoqQVBJIEVycm9yKio6IEdpdEh1YiByZXNwb25zZSBmb3JtYXQgaXNzdWUgLSBwbGVhc2UgcmVwb3J0IHRoaXMgYnVnXFxuYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHVuaXF1ZUVycm9yQ29kZXMuaW5jbHVkZXMoJ1BPUlRGT0xJT19TWU5DXzAwNicpKSB7XG4gICAgICAgICAgICBzeW5jVGV4dCArPSBgICDigKIg4o+zICoqUmF0ZSBMaW1pdGVkKio6IFdhaXQgYSBmZXcgbWludXRlcyBhbmQgdHJ5IGFnYWluXFxuYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gR2VuZXJhbCB0aXBzXG4gICAgICAgICAgc3luY1RleHQgKz0gYCAg4oCiIENoZWNrIGVsZW1lbnQgZmlsZSBmb3JtYXRzIGFuZCBtZXRhZGF0YVxcbmA7XG4gICAgICAgICAgc3luY1RleHQgKz0gYCAg4oCiIFRyeSBzeW5jaW5nIGluZGl2aWR1YWwgZWxlbWVudHMgd2l0aCBcXGBzdWJtaXRfY29udGVudFxcYFxcbmA7XG4gICAgICAgICAgc3luY1RleHQgKz0gYCAg4oCiIFVzZSBcXGBzeW5jX3BvcnRmb2xpb1xcYCB3aXRoIFxcYGRyeV9ydW49dHJ1ZVxcYCB0byBwcmV2aWV3IGlzc3Vlc1xcblxcbmA7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gQWRkIGVycm9yIGNvZGUgbGVnZW5kIGlmIHdlIGZvdW5kIGFueVxuICAgICAgICAgIGlmICh1bmlxdWVFcnJvckNvZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHN5bmNUZXh0ICs9IGDwn5OLICoqRXJyb3IgQ29kZXMgRGV0ZWN0ZWQqKjpcXG5gO1xuICAgICAgICAgICAgZm9yIChjb25zdCBjb2RlIG9mIHVuaXF1ZUVycm9yQ29kZXMpIHtcbiAgICAgICAgICAgICAgY29uc3QgZXJyb3JEZXNjcmlwdGlvbnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAgICAgICAgICAgJ1BPUlRGT0xJT19TWU5DXzAwMSc6ICdBdXRoZW50aWNhdGlvbiBmYWlsdXJlJyxcbiAgICAgICAgICAgICAgICAnUE9SVEZPTElPX1NZTkNfMDAyJzogJ1JlcG9zaXRvcnkgbm90IGZvdW5kJyxcbiAgICAgICAgICAgICAgICAnUE9SVEZPTElPX1NZTkNfMDAzJzogJ0ZpbGUgY3JlYXRpb24gZmFpbGVkJyxcbiAgICAgICAgICAgICAgICAnUE9SVEZPTElPX1NZTkNfMDA0JzogJ0FQSSByZXNwb25zZSBwYXJzaW5nIGVycm9yJyxcbiAgICAgICAgICAgICAgICAnUE9SVEZPTElPX1NZTkNfMDA1JzogJ05ldHdvcmsgZXJyb3InLFxuICAgICAgICAgICAgICAgICdQT1JURk9MSU9fU1lOQ18wMDYnOiAnUmF0ZSBsaW1pdCBleGNlZWRlZCdcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSBlcnJvckRlc2NyaXB0aW9uc1tjb2RlIGFzIHN0cmluZ10gfHwgJ1Vua25vd24gZXJyb3InO1xuICAgICAgICAgICAgICBzeW5jVGV4dCArPSBgICDigKIgJHtjb2RlfTogJHtkZXNjcmlwdGlvbn1cXG5gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3luY1RleHQgKz0gYFxcbmA7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN5bmNUZXh0ICs9IGDwn46JICoqUGVyZmVjdCBTeW5jISoqIEFsbCBlbGVtZW50cyB1cGxvYWRlZCBzdWNjZXNzZnVsbHkhXFxuXFxuYDtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gVVggSU1QUk9WRU1FTlQ6IEFkZCBuZXh0IHN0ZXBzIGFuZCBoZWxwZnVsIGxpbmtzXG4gICAgICAgIGlmIChzeW5jQ291bnQgPiAwKSB7XG4gICAgICAgICAgc3luY1RleHQgKz0gYPCfmoAgKipOZXh0IFN0ZXBzKio6XFxuYDtcbiAgICAgICAgICBzeW5jVGV4dCArPSBgICDigKIgVmlldyB5b3VyIHBvcnRmb2xpbzogaHR0cHM6Ly9naXRodWIuY29tLyR7dXNlcm5hbWV9L2RvbGxob3VzZS1wb3J0Zm9saW9cXG5gO1xuICAgICAgICAgIHN5bmNUZXh0ICs9IGAgIOKAoiBTaGFyZSBpbmRpdmlkdWFsIGVsZW1lbnRzIHVzaW5nIFxcYHN1Ym1pdF9jb250ZW50IDxuYW1lPlxcYFxcbmA7XG4gICAgICAgICAgc3luY1RleHQgKz0gYCAg4oCiIEtlZXAgcG9ydGZvbGlvIHVwZGF0ZWQgd2l0aCBcXGBzeW5jX3BvcnRmb2xpb1xcYCByZWd1bGFybHlcXG5cXG5gO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBzeW5jVGV4dCArPSBgWW91ciBlbGVtZW50cyBhcmUgbm93IGF2YWlsYWJsZSBvbiBHaXRIdWIhYDtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IHN5bmNUZXh0XG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuZGlyZWN0aW9uID09PSAncHVsbCcpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3imqDvuI8gUHVsbCBzeW5jIGlzIGNvbWluZyBzb29uLiBDdXJyZW50bHkgb25seSBwdXNoIHN5bmMgaXMgc3VwcG9ydGVkLmBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBJbnZhbGlkIHN5bmMgZGlyZWN0aW9uLiBVc2UgJ3B1c2gnLCAncHVsbCcsIG9yICdib3RoJy5gXG4gICAgICAgIH1dXG4gICAgICB9O1xuXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIElNUFJPVkVEIEVSUk9SIEhBTkRMSU5HOiBFbnN1cmUgd2UgYWx3YXlzIGhhdmUgYSBtZWFuaW5nZnVsIGVycm9yIG1lc3NhZ2VcbiAgICAgIGNvbnN0IHNhbml0aXplZEVycm9yID0gU2VjdXJlRXJyb3JIYW5kbGVyLnNhbml0aXplRXJyb3IoZXJyb3IpO1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gc2FuaXRpemVkRXJyb3I/Lm1lc3NhZ2UgfHwgKGVycm9yIGFzIGFueSk/Lm1lc3NhZ2UgfHwgU3RyaW5nKGVycm9yKSB8fCAnVW5rbm93biBlcnJvciBvY2N1cnJlZCc7XG4gICAgICBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIEZhaWxlZCB0byBzeW5jIHBvcnRmb2xpbzogJHtlcnJvck1lc3NhZ2V9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoIGxvY2FsIHBvcnRmb2xpbyB1c2luZyB0aGUgbWV0YWRhdGEgaW5kZXggc3lzdGVtXG4gICAqIFRoaXMgcHJvdmlkZXMgZmFzdCwgY29tcHJlaGVuc2l2ZSBzZWFyY2ggYWNyb3NzIGFsbCBlbGVtZW50IHR5cGVzXG4gICAqL1xuICBhc3luYyBzZWFyY2hQb3J0Zm9saW8ob3B0aW9uczoge1xuICAgIHF1ZXJ5OiBzdHJpbmc7IFxuICAgIGVsZW1lbnRUeXBlPzogc3RyaW5nOyBcbiAgICBmdXp6eU1hdGNoPzogYm9vbGVhbjsgXG4gICAgbWF4UmVzdWx0cz86IG51bWJlcjsgXG4gICAgaW5jbHVkZUtleXdvcmRzPzogYm9vbGVhbjsgXG4gICAgaW5jbHVkZVRhZ3M/OiBib29sZWFuOyBcbiAgICBpbmNsdWRlVHJpZ2dlcnM/OiBib29sZWFuOyBcbiAgICBpbmNsdWRlRGVzY3JpcHRpb25zPzogYm9vbGVhbjtcbiAgfSkge1xuICAgIHRyeSB7XG4gICAgICAvLyBWYWxpZGF0ZSB0aGUgcXVlcnkgcGFyYW1ldGVyXG4gICAgICBpZiAoIW9wdGlvbnMucXVlcnkgfHwgdHlwZW9mIG9wdGlvbnMucXVlcnkgIT09ICdzdHJpbmcnIHx8IG9wdGlvbnMucXVlcnkudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBTZWFyY2ggcXVlcnkgaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nLmBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBJbXBvcnQgcG9ydGZvbGlvIGluZGV4IG1hbmFnZXJcbiAgICAgIGNvbnN0IHsgUG9ydGZvbGlvSW5kZXhNYW5hZ2VyIH0gPSBhd2FpdCBpbXBvcnQoJy4vcG9ydGZvbGlvL1BvcnRmb2xpb0luZGV4TWFuYWdlci5qcycpO1xuICAgICAgY29uc3QgaW5kZXhNYW5hZ2VyID0gUG9ydGZvbGlvSW5kZXhNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG5cbiAgICAgIC8vIFBhcnNlIGVsZW1lbnQgdHlwZSBpZiBwcm92aWRlZFxuICAgICAgbGV0IGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZSB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChvcHRpb25zLmVsZW1lbnRUeXBlKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkVHlwZXMgPSBbJ3BlcnNvbmFzJywgJ3NraWxscycsICd0ZW1wbGF0ZXMnLCAnYWdlbnRzJywgJ21lbW9yaWVzJywgJ2Vuc2VtYmxlcyddO1xuICAgICAgICBpZiAoIXZhbGlkVHlwZXMuaW5jbHVkZXMob3B0aW9ucy5lbGVtZW50VHlwZSkpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBJbnZhbGlkIGVsZW1lbnQgdHlwZS4gVmFsaWQgdHlwZXM6ICR7dmFsaWRUeXBlcy5qb2luKCcsICcpfWBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbGVtZW50VHlwZSA9IG9wdGlvbnMuZWxlbWVudFR5cGUgYXMgRWxlbWVudFR5cGU7XG4gICAgICB9XG5cbiAgICAgIC8vIEJ1aWxkIHNlYXJjaCBvcHRpb25zXG4gICAgICBjb25zdCBzZWFyY2hPcHRpb25zID0ge1xuICAgICAgICBlbGVtZW50VHlwZSxcbiAgICAgICAgZnV6enlNYXRjaDogb3B0aW9ucy5mdXp6eU1hdGNoICE9PSBmYWxzZSwgLy8gRGVmYXVsdCB0byB0cnVlXG4gICAgICAgIG1heFJlc3VsdHM6IG9wdGlvbnMubWF4UmVzdWx0cyB8fCAyMCxcbiAgICAgICAgaW5jbHVkZUtleXdvcmRzOiBvcHRpb25zLmluY2x1ZGVLZXl3b3JkcyAhPT0gZmFsc2UsXG4gICAgICAgIGluY2x1ZGVUYWdzOiBvcHRpb25zLmluY2x1ZGVUYWdzICE9PSBmYWxzZSxcbiAgICAgICAgaW5jbHVkZVRyaWdnZXJzOiBvcHRpb25zLmluY2x1ZGVUcmlnZ2VycyAhPT0gZmFsc2UsXG4gICAgICAgIGluY2x1ZGVEZXNjcmlwdGlvbnM6IG9wdGlvbnMuaW5jbHVkZURlc2NyaXB0aW9ucyAhPT0gZmFsc2VcbiAgICAgIH07XG5cbiAgICAgIC8vIFBlcmZvcm0gdGhlIHNlYXJjaFxuICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IGluZGV4TWFuYWdlci5zZWFyY2gob3B0aW9ucy5xdWVyeSwgc2VhcmNoT3B0aW9ucyk7XG5cbiAgICAgIC8vIEZvcm1hdCB0aGUgcmVzdWx0c1xuICAgICAgbGV0IHRleHQgPSBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3wn5SNICoqUG9ydGZvbGlvIFNlYXJjaCBSZXN1bHRzKipcXG5cXG5gO1xuICAgICAgdGV4dCArPSBgKipRdWVyeSoqOiBcIiR7b3B0aW9ucy5xdWVyeX1cIlxcbmA7XG4gICAgICBcbiAgICAgIGlmIChlbGVtZW50VHlwZSkge1xuICAgICAgICB0ZXh0ICs9IGAqKlR5cGUgRmlsdGVyKio6ICR7ZWxlbWVudFR5cGV9XFxuYDtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgdGV4dCArPSBgKipGb3VuZCoqOiAke3Jlc3VsdHMubGVuZ3RofSBlbGVtZW50JHtyZXN1bHRzLmxlbmd0aCA9PT0gMSA/ICcnIDogJ3MnfVxcblxcbmA7XG5cbiAgICAgIGlmIChyZXN1bHRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0ZXh0ICs9IGBObyBlbGVtZW50cyBmb3VuZCBtYXRjaGluZyB5b3VyIHNlYXJjaCBjcml0ZXJpYS5cXG5cXG5gO1xuICAgICAgICB0ZXh0ICs9IGAqKlRpcHMgZm9yIGJldHRlciByZXN1bHRzOioqXFxuYDtcbiAgICAgICAgdGV4dCArPSBg4oCiIFRyeSBkaWZmZXJlbnQga2V5d29yZHMgb3IgcGFydGlhbCBuYW1lc1xcbmA7XG4gICAgICAgIHRleHQgKz0gYOKAoiBSZW1vdmUgdGhlIHR5cGUgZmlsdGVyIHRvIHNlYXJjaCBhbGwgZWxlbWVudCB0eXBlc1xcbmA7XG4gICAgICAgIHRleHQgKz0gYOKAoiBDaGVjayBzcGVsbGluZyBhbmQgdHJ5IHN5bm9ueW1zXFxuYDtcbiAgICAgICAgdGV4dCArPSBg4oCiIFVzZSB0aGUgbGlzdF9lbGVtZW50cyB0b29sIHRvIHNlZSBhbGwgYXZhaWxhYmxlIGNvbnRlbnRgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGV4dCArPSBgKipSZXN1bHRzOioqXFxuXFxuYDtcbiAgICAgICAgXG4gICAgICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdHMpIHtcbiAgICAgICAgICBjb25zdCB7IGVudHJ5LCBtYXRjaFR5cGUgfSA9IHJlc3VsdDtcbiAgICAgICAgICBjb25zdCBpY29uID0gdGhpcy5nZXRFbGVtZW50SWNvbihlbnRyeS5lbGVtZW50VHlwZSk7XG4gICAgICAgICAgXG4gICAgICAgICAgdGV4dCArPSBgJHtpY29ufSAqKiR7ZW50cnkubWV0YWRhdGEubmFtZX0qKlxcbmA7XG4gICAgICAgICAgdGV4dCArPSBgICAg8J+TgSBUeXBlOiAke2VudHJ5LmVsZW1lbnRUeXBlfVxcbmA7XG4gICAgICAgICAgdGV4dCArPSBgICAg8J+OryBNYXRjaDogJHttYXRjaFR5cGV9XFxuYDtcbiAgICAgICAgICBcbiAgICAgICAgICBpZiAoZW50cnkubWV0YWRhdGEuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IGRlc2MgPSBlbnRyeS5tZXRhZGF0YS5kZXNjcmlwdGlvbi5sZW5ndGggPiAxMDAgXG4gICAgICAgICAgICAgID8gZW50cnkubWV0YWRhdGEuZGVzY3JpcHRpb24uc3Vic3RyaW5nKDAsIDEwMCkgKyAnLi4uJ1xuICAgICAgICAgICAgICA6IGVudHJ5Lm1ldGFkYXRhLmRlc2NyaXB0aW9uO1xuICAgICAgICAgICAgdGV4dCArPSBgICAg8J+TnSAke2Rlc2N9XFxuYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKGVudHJ5Lm1ldGFkYXRhLnRhZ3MgJiYgZW50cnkubWV0YWRhdGEudGFncy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0ZXh0ICs9IGAgICDwn4+377iPIFRhZ3M6ICR7ZW50cnkubWV0YWRhdGEudGFncy5zbGljZSgwLCA1KS5qb2luKCcsICcpfSR7ZW50cnkubWV0YWRhdGEudGFncy5sZW5ndGggPiA1ID8gJy4uLicgOiAnJ31cXG5gO1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICB0ZXh0ICs9IGAgICDwn5OEIEZpbGU6ICR7ZW50cnkuZmlsZW5hbWV9Lm1kXFxuXFxuYDtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKHJlc3VsdHMubGVuZ3RoID49IHNlYXJjaE9wdGlvbnMubWF4UmVzdWx0cykge1xuICAgICAgICAgIHRleHQgKz0gYOKaoO+4jyBSZXN1bHRzIGxpbWl0ZWQgdG8gJHtzZWFyY2hPcHRpb25zLm1heFJlc3VsdHN9LiBSZWZpbmUgeW91ciBzZWFyY2ggZm9yIG1vcmUgc3BlY2lmaWMgcmVzdWx0cy5cXG5cXG5gO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICB0ZXh0ICs9IGDwn5KhICoqTmV4dCBzdGVwczoqKlxcbmA7XG4gICAgICAgIHRleHQgKz0gYOKAoiBVc2UgZ2V0X2VsZW1lbnRfZGV0YWlscyB0byBzZWUgZnVsbCBjb250ZW50XFxuYDtcbiAgICAgICAgdGV4dCArPSBg4oCiIFVzZSBhY3RpdmF0ZV9lbGVtZW50IHRvIGFjdGl2YXRlIGVsZW1lbnRzXFxuYDtcbiAgICAgICAgdGV4dCArPSBg4oCiIFVzZSBzdWJtaXRfY29udGVudCB0byBzaGFyZSB3aXRoIHRoZSBjb21tdW5pdHlgO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHRcbiAgICAgICAgfV1cbiAgICAgIH07XG5cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ0RvbGxob3VzZU1DUFNlcnZlci5zZWFyY2hQb3J0Zm9saW8nLCBlcnJvciwgeyBcbiAgICAgICAgcXVlcnk6IG9wdGlvbnMucXVlcnksXG4gICAgICAgIGVsZW1lbnRUeXBlOiBvcHRpb25zLmVsZW1lbnRUeXBlIFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsIFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBTZWFyY2ggZmFpbGVkOiAke1NlY3VyZUVycm9ySGFuZGxlci5zYW5pdGl6ZUVycm9yKGVycm9yKS5tZXNzYWdlfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaCBhY3Jvc3MgYWxsIHNvdXJjZXMgKGxvY2FsLCBHaXRIdWIsIGNvbGxlY3Rpb24pIHVzaW5nIFVuaWZpZWRJbmRleE1hbmFnZXJcbiAgICogVGhpcyBwcm92aWRlcyBjb21wcmVoZW5zaXZlIHNlYXJjaCB3aXRoIGR1cGxpY2F0ZSBkZXRlY3Rpb24gYW5kIHZlcnNpb24gY29tcGFyaXNvblxuICAgKi9cbiAgYXN5bmMgc2VhcmNoQWxsKG9wdGlvbnM6IHtcbiAgICBxdWVyeTogc3RyaW5nO1xuICAgIHNvdXJjZXM/OiBzdHJpbmdbXTtcbiAgICBlbGVtZW50VHlwZT86IHN0cmluZztcbiAgICBwYWdlPzogbnVtYmVyO1xuICAgIHBhZ2VTaXplPzogbnVtYmVyO1xuICAgIHNvcnRCeT86IHN0cmluZztcbiAgfSkge1xuICAgIHRyeSB7XG4gICAgICAvLyBWYWxpZGF0ZSB0aGUgcXVlcnkgcGFyYW1ldGVyXG4gICAgICBpZiAoIW9wdGlvbnMucXVlcnkgfHwgdHlwZW9mIG9wdGlvbnMucXVlcnkgIT09ICdzdHJpbmcnIHx8IG9wdGlvbnMucXVlcnkudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBTZWFyY2ggcXVlcnkgaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nLmBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBJbXBvcnQgdW5pZmllZCBpbmRleCBtYW5hZ2VyXG4gICAgICBjb25zdCB7IFVuaWZpZWRJbmRleE1hbmFnZXIgfSA9IGF3YWl0IGltcG9ydCgnLi9wb3J0Zm9saW8vVW5pZmllZEluZGV4TWFuYWdlci5qcycpO1xuICAgICAgY29uc3QgeyBFbGVtZW50VHlwZSB9ID0gYXdhaXQgaW1wb3J0KCcuL3BvcnRmb2xpby90eXBlcy5qcycpO1xuICAgICAgY29uc3QgdW5pZmllZE1hbmFnZXIgPSBVbmlmaWVkSW5kZXhNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG5cbiAgICAgIC8vIFBhcnNlIGVsZW1lbnQgdHlwZSBpZiBwcm92aWRlZFxuICAgICAgbGV0IGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZSB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChvcHRpb25zLmVsZW1lbnRUeXBlKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkVHlwZXMgPSBbJ3BlcnNvbmFzJywgJ3NraWxscycsICd0ZW1wbGF0ZXMnLCAnYWdlbnRzJywgJ21lbW9yaWVzJywgJ2Vuc2VtYmxlcyddO1xuICAgICAgICBpZiAoIXZhbGlkVHlwZXMuaW5jbHVkZXMob3B0aW9ucy5lbGVtZW50VHlwZSkpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBJbnZhbGlkIGVsZW1lbnQgdHlwZS4gVmFsaWQgdHlwZXM6ICR7dmFsaWRUeXBlcy5qb2luKCcsICcpfWBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbGVtZW50VHlwZSA9IG9wdGlvbnMuZWxlbWVudFR5cGUgYXMgRWxlbWVudFR5cGU7XG4gICAgICB9XG5cbiAgICAgIC8vIFBhcnNlIHNvdXJjZXMgKGRlZmF1bHQgdG8gbG9jYWwgYW5kIGdpdGh1YilcbiAgICAgIGNvbnN0IHNvdXJjZXMgPSBvcHRpb25zLnNvdXJjZXMgfHwgWydsb2NhbCcsICdnaXRodWInXTtcbiAgICAgIGNvbnN0IGluY2x1ZGVMb2NhbCA9IHNvdXJjZXMuaW5jbHVkZXMoJ2xvY2FsJyk7XG4gICAgICBjb25zdCBpbmNsdWRlR2l0SHViID0gc291cmNlcy5pbmNsdWRlcygnZ2l0aHViJyk7XG4gICAgICBjb25zdCBpbmNsdWRlQ29sbGVjdGlvbiA9IHNvdXJjZXMuaW5jbHVkZXMoJ2NvbGxlY3Rpb24nKTtcblxuICAgICAgLy8gQnVpbGQgc2VhcmNoIG9wdGlvbnNcbiAgICAgIGNvbnN0IHNlYXJjaE9wdGlvbnMgPSB7XG4gICAgICAgIHF1ZXJ5OiBvcHRpb25zLnF1ZXJ5LFxuICAgICAgICBpbmNsdWRlTG9jYWwsXG4gICAgICAgIGluY2x1ZGVHaXRIdWIsXG4gICAgICAgIGluY2x1ZGVDb2xsZWN0aW9uLFxuICAgICAgICBlbGVtZW50VHlwZSxcbiAgICAgICAgcGFnZTogb3B0aW9ucy5wYWdlIHx8IDEsXG4gICAgICAgIHBhZ2VTaXplOiBvcHRpb25zLnBhZ2VTaXplIHx8IDIwLFxuICAgICAgICBzb3J0Qnk6IChvcHRpb25zLnNvcnRCeSBhcyBhbnkpIHx8ICdyZWxldmFuY2UnXG4gICAgICB9O1xuXG4gICAgICAvLyBQZXJmb3JtIHRoZSB1bmlmaWVkIHNlYXJjaFxuICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHVuaWZpZWRNYW5hZ2VyLnNlYXJjaChzZWFyY2hPcHRpb25zKTtcblxuICAgICAgLy8gRm9ybWF0IHRoZSByZXN1bHRzXG4gICAgICBsZXQgdGV4dCA9IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpffCflI0gKipVbmlmaWVkIFNlYXJjaCBSZXN1bHRzKipcXG5cXG5gO1xuICAgICAgdGV4dCArPSBgKipRdWVyeSoqOiBcIiR7b3B0aW9ucy5xdWVyeX1cIlxcbmA7XG4gICAgICB0ZXh0ICs9IGAqKlNvdXJjZXMqKjogJHtzb3VyY2VzLmpvaW4oJywgJyl9XFxuYDtcbiAgICAgIFxuICAgICAgaWYgKGVsZW1lbnRUeXBlKSB7XG4gICAgICAgIHRleHQgKz0gYCoqVHlwZSBGaWx0ZXIqKjogJHtlbGVtZW50VHlwZX1cXG5gO1xuICAgICAgfVxuICAgICAgXG4gICAgICB0ZXh0ICs9IGAqKkZvdW5kKio6ICR7cmVzdWx0cy5sZW5ndGh9IGVsZW1lbnQke3Jlc3VsdHMubGVuZ3RoID09PSAxID8gJycgOiAncyd9XFxuXFxuYDtcblxuICAgICAgaWYgKHJlc3VsdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRleHQgKz0gYE5vIGVsZW1lbnRzIGZvdW5kIG1hdGNoaW5nIHlvdXIgc2VhcmNoIGNyaXRlcmlhLlxcblxcbmA7XG4gICAgICAgIHRleHQgKz0gYCoqVGlwcyBmb3IgYmV0dGVyIHJlc3VsdHM6KipcXG5gO1xuICAgICAgICB0ZXh0ICs9IGDigKIgVHJ5IGRpZmZlcmVudCBrZXl3b3JkcyBvciBwYXJ0aWFsIG5hbWVzXFxuYDtcbiAgICAgICAgdGV4dCArPSBg4oCiIFJlbW92ZSB0aGUgdHlwZSBmaWx0ZXIgdG8gc2VhcmNoIGFsbCBlbGVtZW50IHR5cGVzXFxuYDtcbiAgICAgICAgdGV4dCArPSBg4oCiIEluY2x1ZGUgbW9yZSBzb3VyY2VzOiBsb2NhbCwgZ2l0aHViLCBjb2xsZWN0aW9uXFxuYDtcbiAgICAgICAgdGV4dCArPSBg4oCiIENoZWNrIHNwZWxsaW5nIGFuZCB0cnkgc3lub255bXNcXG5gO1xuICAgICAgICB0ZXh0ICs9IGDigKIgVXNlIGJyb3dzZV9jb2xsZWN0aW9uIHRvIGV4cGxvcmUgYXZhaWxhYmxlIGNvbnRlbnRgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGV4dCArPSBgKipSZXN1bHRzOioqXFxuXFxuYDtcbiAgICAgICAgXG4gICAgICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdHMpIHtcbiAgICAgICAgICBjb25zdCB7IGVudHJ5LCBzb3VyY2UsIG1hdGNoVHlwZSwgc2NvcmUsIGlzRHVwbGljYXRlLCB2ZXJzaW9uQ29uZmxpY3QgfSA9IHJlc3VsdDtcbiAgICAgICAgICBjb25zdCBpY29uID0gdGhpcy5nZXRFbGVtZW50SWNvbihlbnRyeS5lbGVtZW50VHlwZSk7XG4gICAgICAgICAgY29uc3Qgc291cmNlSWNvbiA9IHRoaXMuZ2V0U291cmNlSWNvbihzb3VyY2UpO1xuICAgICAgICAgIFxuICAgICAgICAgIHRleHQgKz0gYCR7aWNvbn0gKioke2VudHJ5Lm5hbWV9KiogJHtzb3VyY2VJY29ufVxcbmA7XG4gICAgICAgICAgdGV4dCArPSBgICAg8J+TgSBUeXBlOiAke2VudHJ5LmVsZW1lbnRUeXBlfSB8IFNvdXJjZTogJHtzb3VyY2V9XFxuYDtcbiAgICAgICAgICB0ZXh0ICs9IGAgICDwn46vIE1hdGNoOiAke21hdGNoVHlwZX0gfCBTY29yZTogJHtzY29yZS50b0ZpeGVkKDIpfVxcbmA7XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKGVudHJ5LmRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBkZXNjID0gZW50cnkuZGVzY3JpcHRpb24ubGVuZ3RoID4gMTAwIFxuICAgICAgICAgICAgICA/IGVudHJ5LmRlc2NyaXB0aW9uLnN1YnN0cmluZygwLCAxMDApICsgJy4uLidcbiAgICAgICAgICAgICAgOiBlbnRyeS5kZXNjcmlwdGlvbjtcbiAgICAgICAgICAgIHRleHQgKz0gYCAgIPCfk50gJHtkZXNjfVxcbmA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGVudHJ5LnZlcnNpb24pIHtcbiAgICAgICAgICAgIHRleHQgKz0gYCAgIPCfj7fvuI8gVmVyc2lvbjogJHtlbnRyeS52ZXJzaW9ufVxcbmA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gU2hvdyBkdXBsaWNhdGUgaW5mb3JtYXRpb25cbiAgICAgICAgICBpZiAoaXNEdXBsaWNhdGUpIHtcbiAgICAgICAgICAgIHRleHQgKz0gYCAgIOKaoO+4jyAqKkR1cGxpY2F0ZSBkZXRlY3RlZCBhY3Jvc3Mgc291cmNlcyoqXFxuYDtcbiAgICAgICAgICAgIGlmICh2ZXJzaW9uQ29uZmxpY3QpIHtcbiAgICAgICAgICAgICAgdGV4dCArPSBgICAg8J+UhCBWZXJzaW9uIGNvbmZsaWN0IC0gUmVjb21tZW5kZWQ6ICR7dmVyc2lvbkNvbmZsaWN0LnJlY29tbWVuZGVkfSAoJHt2ZXJzaW9uQ29uZmxpY3QucmVhc29ufSlcXG5gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICB0ZXh0ICs9IGBcXG5gO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjb25zdCBoYXNNb3JlID0gcmVzdWx0cy5sZW5ndGggPj0gc2VhcmNoT3B0aW9ucy5wYWdlU2l6ZTtcbiAgICAgICAgaWYgKGhhc01vcmUpIHtcbiAgICAgICAgICBjb25zdCBuZXh0UGFnZSA9IHNlYXJjaE9wdGlvbnMucGFnZSArIDE7XG4gICAgICAgICAgdGV4dCArPSBg4pqg77iPIFJlc3VsdHMgbGltaXRlZCB0byAke3NlYXJjaE9wdGlvbnMucGFnZVNpemV9LiBVc2UgcGFnZT0ke25leHRQYWdlfSBmb3IgbW9yZSByZXN1bHRzLlxcblxcbmA7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHRleHQgKz0gYPCfkqEgKipOZXh0IHN0ZXBzOioqXFxuYDtcbiAgICAgICAgdGV4dCArPSBg4oCiIFVzZSBnZXRfZWxlbWVudF9kZXRhaWxzIHRvIHNlZSBmdWxsIGNvbnRlbnRcXG5gO1xuICAgICAgICB0ZXh0ICs9IGDigKIgVXNlIGluc3RhbGxfY29udGVudCBmb3IgY29sbGVjdGlvbiBpdGVtc1xcbmA7XG4gICAgICAgIHRleHQgKz0gYOKAoiBVc2UgYWN0aXZhdGVfZWxlbWVudCBmb3IgbG9jYWwgZWxlbWVudHNcXG5gO1xuICAgICAgICB0ZXh0ICs9IGDigKIgQ2hlY2sgZm9yIGR1cGxpY2F0ZXMgYmVmb3JlIHN1Ym1pdHRpbmcgbmV3IGNvbnRlbnRgO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHRcbiAgICAgICAgfV1cbiAgICAgIH07XG5cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zdCB7IEVycm9ySGFuZGxlciB9ID0gYXdhaXQgaW1wb3J0KCcuL3V0aWxzL0Vycm9ySGFuZGxlci5qcycpO1xuICAgICAgY29uc3QgeyBTZWN1cmVFcnJvckhhbmRsZXIgfSA9IGF3YWl0IGltcG9ydCgnLi9zZWN1cml0eS9lcnJvckhhbmRsZXIuanMnKTtcbiAgICAgIFxuICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdEb2xsaG91c2VNQ1BTZXJ2ZXIuc2VhcmNoQWxsJywgZXJyb3IsIHsgXG4gICAgICAgIHF1ZXJ5OiBvcHRpb25zLnF1ZXJ5LFxuICAgICAgICBzb3VyY2VzOiBvcHRpb25zLnNvdXJjZXMsXG4gICAgICAgIGVsZW1lbnRUeXBlOiBvcHRpb25zLmVsZW1lbnRUeXBlIFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsIFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBVbmlmaWVkIHNlYXJjaCBmYWlsZWQ6ICR7U2VjdXJlRXJyb3JIYW5kbGVyLnNhbml0aXplRXJyb3IoZXJyb3IpLm1lc3NhZ2V9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGljb24gZm9yIHNvdXJjZSB0eXBlXG4gICAqL1xuICBwcml2YXRlIGdldFNvdXJjZUljb24oc291cmNlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGljb25zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgICAgbG9jYWw6ICfwn5K7JyxcbiAgICAgIGdpdGh1YjogJ/CfkJknLFxuICAgICAgY29sbGVjdGlvbjogJ/CfjJAnXG4gICAgfTtcbiAgICByZXR1cm4gaWNvbnNbc291cmNlXSB8fCAn8J+TgSc7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGljb24gZm9yIGVsZW1lbnQgdHlwZVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRFbGVtZW50SWNvbihlbGVtZW50VHlwZTogRWxlbWVudFR5cGUpOiBzdHJpbmcge1xuICAgIGNvbnN0IGljb25zID0ge1xuICAgICAgcGVyc29uYXM6ICfwn46tJyxcbiAgICAgIHNraWxsczogJ/Cfjq8nLFxuICAgICAgdGVtcGxhdGVzOiAn8J+ThCcsXG4gICAgICBhZ2VudHM6ICfwn6SWJyxcbiAgICAgIG1lbW9yaWVzOiAn8J+noCcsXG4gICAgICBlbnNlbWJsZXM6ICfwn468J1xuICAgIH07XG4gICAgcmV0dXJuIGljb25zW2VsZW1lbnRUeXBlXSB8fCAn8J+TgSc7XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyIG1ldGhvZCB0byBjb3VudCBlbGVtZW50cyBpbiBhIGRpcmVjdG9yeVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBjb3VudEVsZW1lbnRzSW5EaXIoZGlyUGF0aDogc3RyaW5nKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICB0cnkge1xuICAgICAgLy8gQ2hlY2sgaWYgZGlyZWN0b3J5IGV4aXN0cyBhbmQgaXMgYWNjZXNzaWJsZVxuICAgICAgYXdhaXQgZnMuYWNjZXNzKGRpclBhdGgpO1xuICAgICAgY29uc3QgZmlsZXMgPSBhd2FpdCBmcy5yZWFkZGlyKGRpclBhdGgpO1xuICAgICAgXG4gICAgICAvLyBDb3VudCBhbGwgZWxlbWVudCBmaWxlcyAoLm1kLCAuanNvbiwgLnlhbWwpIHRvIHN1cHBvcnQgYWxsIGVsZW1lbnQgdHlwZXNcbiAgICAgIC8vIC0gUGVyc29uYXM6IC5tZCBmaWxlc1xuICAgICAgLy8gLSBTa2lsbHM6IC5tZCBmaWxlcyAgXG4gICAgICAvLyAtIFRlbXBsYXRlczogLm1kIG9yIC55YW1sIGZpbGVzXG4gICAgICAvLyAtIEFnZW50czogLm1kIGZpbGVzXG4gICAgICByZXR1cm4gZmlsZXMuZmlsdGVyKGZpbGUgPT4gXG4gICAgICAgIGZpbGUuZW5kc1dpdGgoJy5tZCcpIHx8IFxuICAgICAgICBmaWxlLmVuZHNXaXRoKCcuanNvbicpIHx8IFxuICAgICAgICBmaWxlLmVuZHNXaXRoKCcueWFtbCcpXG4gICAgICApLmxlbmd0aDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhlbHBlciBtZXRob2QgdG8gZ2V0IGxpc3Qgb2YgZWxlbWVudHMgYnkgdHlwZVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBnZXRFbGVtZW50c0xpc3QoZWxlbWVudFR5cGU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbG9jYWxQb3J0Zm9saW9NYW5hZ2VyID0gUG9ydGZvbGlvTWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuICAgICAgbGV0IGVsZW1lbnRUeXBlRW51bTogRWxlbWVudFR5cGU7XG4gICAgICBcbiAgICAgIHN3aXRjaCAoZWxlbWVudFR5cGUpIHtcbiAgICAgICAgY2FzZSAncGVyc29uYXMnOlxuICAgICAgICAgIGVsZW1lbnRUeXBlRW51bSA9IEVsZW1lbnRUeXBlLlBFUlNPTkE7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3NraWxscyc6XG4gICAgICAgICAgZWxlbWVudFR5cGVFbnVtID0gRWxlbWVudFR5cGUuU0tJTEw7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3RlbXBsYXRlcyc6XG4gICAgICAgICAgZWxlbWVudFR5cGVFbnVtID0gRWxlbWVudFR5cGUuVEVNUExBVEU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2FnZW50cyc6XG4gICAgICAgICAgZWxlbWVudFR5cGVFbnVtID0gRWxlbWVudFR5cGUuQUdFTlQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgLy8gSW5zdGVhZCBvZiBzaWxlbnRseSByZXR1cm5pbmcgZW1wdHkgYXJyYXksIHRocm93IGRlc2NyaXB0aXZlIGVycm9yXG4gICAgICAgICAgY29uc3QgdmFsaWRUeXBlcyA9IFsncGVyc29uYXMnLCAnc2tpbGxzJywgJ3RlbXBsYXRlcycsICdhZ2VudHMnXTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZWxlbWVudCB0eXBlOiAnJHtlbGVtZW50VHlwZX0nLiBWYWxpZCB0eXBlcyBhcmU6ICR7dmFsaWRUeXBlcy5qb2luKCcsICcpfWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkaXJQYXRoID0gbG9jYWxQb3J0Zm9saW9NYW5hZ2VyLmdldEVsZW1lbnREaXIoZWxlbWVudFR5cGVFbnVtKTtcbiAgICAgIFxuICAgICAgLy8gQ2hlY2sgaWYgZGlyZWN0b3J5IGV4aXN0cyBhbmQgaXMgYWNjZXNzaWJsZVxuICAgICAgYXdhaXQgZnMuYWNjZXNzKGRpclBhdGgpO1xuICAgICAgY29uc3QgZmlsZXMgPSBhd2FpdCBmcy5yZWFkZGlyKGRpclBhdGgpO1xuICAgICAgXG4gICAgICAvLyBGaWx0ZXIgYW5kIGV4dHJhY3QgbmFtZXMgZm9yIGFsbCBlbGVtZW50IGZpbGUgdHlwZXNcbiAgICAgIC8vIC0gUGVyc29uYXM6IC5tZCBmaWxlc1xuICAgICAgLy8gLSBTa2lsbHM6IC5tZCBmaWxlcyAgXG4gICAgICAvLyAtIFRlbXBsYXRlczogLm1kIG9yIC55YW1sIGZpbGVzXG4gICAgICAvLyAtIEFnZW50czogLm1kIGZpbGVzXG4gICAgICByZXR1cm4gZmlsZXNcbiAgICAgICAgLmZpbHRlcihmaWxlID0+IGZpbGUuZW5kc1dpdGgoJy5tZCcpIHx8IGZpbGUuZW5kc1dpdGgoJy5qc29uJykgfHwgZmlsZS5lbmRzV2l0aCgnLnlhbWwnKSlcbiAgICAgICAgLm1hcChmaWxlID0+IHtcbiAgICAgICAgICAvLyBSZW1vdmUgZmlsZSBleHRlbnNpb24gdG8gZ2V0IGVsZW1lbnQgbmFtZVxuICAgICAgICAgIGlmIChmaWxlLmVuZHNXaXRoKCcubWQnKSkgcmV0dXJuIGZpbGUucmVwbGFjZSgnLm1kJywgJycpO1xuICAgICAgICAgIGlmIChmaWxlLmVuZHNXaXRoKCcuanNvbicpKSByZXR1cm4gZmlsZS5yZXBsYWNlKCcuanNvbicsICcnKTtcbiAgICAgICAgICBpZiAoZmlsZS5lbmRzV2l0aCgnLnlhbWwnKSkgcmV0dXJuIGZpbGUucmVwbGFjZSgnLnlhbWwnLCAnJyk7XG4gICAgICAgICAgcmV0dXJuIGZpbGU7XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgb3VyIHZhbGlkYXRpb24gZXJyb3IgZm9yIGludmFsaWQgZWxlbWVudCB0eXBlc1xuICAgICAgaWYgKGVycm9yLm1lc3NhZ2UgJiYgZXJyb3IubWVzc2FnZS5pbmNsdWRlcygnSW52YWxpZCBlbGVtZW50IHR5cGU6JykpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7IC8vIFJlLXRocm93IHZhbGlkYXRpb24gZXJyb3JzIGZvciBkZWJ1Z2dpbmdcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRm9yIGZpbGUgc3lzdGVtIGVycm9ycywgcHJvdmlkZSBjb250ZXh0IGFib3V0IHRoZSBvcGVyYXRpb25cbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yLmNvZGUgPT09ICdFTk9FTlQnIFxuICAgICAgICA/IGBFbGVtZW50IGRpcmVjdG9yeSBub3QgZm91bmQgZm9yIHR5cGUgJyR7ZWxlbWVudFR5cGV9Jy4gRGlyZWN0b3J5IG1heSBub3QgZXhpc3QgeWV0LmBcbiAgICAgICAgOiBgRmFpbGVkIHRvIHJlYWQgZWxlbWVudHMgZGlyZWN0b3J5IGZvciB0eXBlICcke2VsZW1lbnRUeXBlfSc6ICR7ZXJyb3IubWVzc2FnZSB8fCAnVW5rbm93biBmaWxlIHN5c3RlbSBlcnJvcid9YDtcbiAgICAgIFxuICAgICAgbG9nZ2VyLndhcm4oJ0Vycm9yIGluIGdldEVsZW1lbnRzTGlzdCcsIHsgXG4gICAgICAgIGVsZW1lbnRUeXBlLCBcbiAgICAgICAgZXJyb3I6IGVycm9yLm1lc3NhZ2UsIFxuICAgICAgICBjb2RlOiBlcnJvci5jb2RlIFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXIgbWV0aG9kIHRvIGxvYWQgZWxlbWVudCBieSB0eXBlXG4gICAqIFJldHVybnMgYW4gb2JqZWN0IHdpdGggY29udGVudCwgZmlsZW5hbWUsIGFuZCB0eXBlIHByb3BlcnRpZXNcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgbG9hZEVsZW1lbnRCeVR5cGUoZWxlbWVudE5hbWU6IHN0cmluZywgZWxlbWVudFR5cGU6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgLy8gU0VDVVJJVFk6IFNhbml0aXplIGVsZW1lbnROYW1lIGVhcmx5IHRvIHVzZSBpbiBlcnJvciBtZXNzYWdlcyB0b29cbiAgICBjb25zdCBzYW5pdGl6ZWROYW1lID0gcGF0aC5iYXNlbmFtZShlbGVtZW50TmFtZSk7XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGxvY2FsUG9ydGZvbGlvTWFuYWdlciA9IFBvcnRmb2xpb01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICAgIGxldCBlbGVtZW50VHlwZUVudW06IEVsZW1lbnRUeXBlO1xuICAgICAgXG4gICAgICBzd2l0Y2ggKGVsZW1lbnRUeXBlKSB7XG4gICAgICAgIGNhc2UgJ3BlcnNvbmFzJzpcbiAgICAgICAgICBlbGVtZW50VHlwZUVudW0gPSBFbGVtZW50VHlwZS5QRVJTT05BO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdza2lsbHMnOlxuICAgICAgICAgIGVsZW1lbnRUeXBlRW51bSA9IEVsZW1lbnRUeXBlLlNLSUxMO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd0ZW1wbGF0ZXMnOlxuICAgICAgICAgIGVsZW1lbnRUeXBlRW51bSA9IEVsZW1lbnRUeXBlLlRFTVBMQVRFO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdhZ2VudHMnOlxuICAgICAgICAgIGVsZW1lbnRUeXBlRW51bSA9IEVsZW1lbnRUeXBlLkFHRU5UO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIC8vIEluc3RlYWQgb2Ygc2lsZW50bHkgcmV0dXJuaW5nIG51bGwsIHRocm93IGRlc2NyaXB0aXZlIGVycm9yXG4gICAgICAgICAgY29uc3QgdmFsaWRUeXBlcyA9IFsncGVyc29uYXMnLCAnc2tpbGxzJywgJ3RlbXBsYXRlcycsICdhZ2VudHMnXTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZWxlbWVudCB0eXBlOiAnJHtlbGVtZW50VHlwZX0nLiBWYWxpZCB0eXBlcyBhcmU6ICR7dmFsaWRUeXBlcy5qb2luKCcsICcpfWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkaXJQYXRoID0gbG9jYWxQb3J0Zm9saW9NYW5hZ2VyLmdldEVsZW1lbnREaXIoZWxlbWVudFR5cGVFbnVtKTtcbiAgICAgIFxuICAgICAgLy8gRklYOiBDaGVjayBmb3IgYWN0dWFsIGZpbGUgZXh0ZW5zaW9ucyB1c2VkIGJ5IGVsZW1lbnRzICgubWQsIC5qc29uLCAueWFtbClcbiAgICAgIC8vIEVsZW1lbnRzIGFyZSBzdG9yZWQgYXMgbWFya2Rvd24gZmlsZXMgd2l0aCBZQU1MIGZyb250bWF0dGVyLCBub3QgSlNPTiBmaWxlc1xuICAgICAgLy8gUHJpb3JpdHkgb3JkZXI6IC5tZCAocHJpbWFyeSBmb3JtYXQpLCAuanNvbiAobGVnYWN5KSwgLnlhbWwvLnltbCAoY29uZmlnKVxuICAgICAgY29uc3QgZXh0ZW5zaW9ucyA9IFsnLm1kJywgJy5qc29uJywgJy55YW1sJywgJy55bWwnXTtcbiAgICAgIGxldCBjb250ZW50OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICAgIGxldCBmb3VuZEZpbGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgICAgXG4gICAgICAvLyBEZWZpbmUgcmVhc29uYWJsZSBmaWxlIHNpemUgbGltaXQgKDEwTUIpXG4gICAgICBjb25zdCBNQVhfRklMRV9TSVpFID0gMTAgKiAxMDI0ICogMTAyNDsgLy8gMTBNQlxuICAgICAgXG4gICAgICBmb3IgKGNvbnN0IGV4dCBvZiBleHRlbnNpb25zKSB7XG4gICAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKGRpclBhdGgsIGAke3Nhbml0aXplZE5hbWV9JHtleHR9YCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gQ2hlY2sgZmlsZSBzaXplIGJlZm9yZSByZWFkaW5nIHRvIHByZXZlbnQgbWVtb3J5IGlzc3Vlc1xuICAgICAgICAgIGNvbnN0IHN0YXRzID0gYXdhaXQgZnMuc3RhdChmaWxlUGF0aCk7XG4gICAgICAgICAgaWYgKHN0YXRzLnNpemUgPiBNQVhfRklMRV9TSVpFKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZpbGUgc2l6ZSBleGNlZWRzIGxpbWl0IG9mIDEwTUI6ICR7c3RhdHMuc2l6ZX0gYnl0ZXNgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgY29udGVudCA9IGF3YWl0IGZzLnJlYWRGaWxlKGZpbGVQYXRoLCAndXRmLTgnKTtcbiAgICAgICAgICBmb3VuZEZpbGUgPSBmaWxlUGF0aDtcbiAgICAgICAgICBicmVhazsgLy8gRm91bmQgdGhlIGZpbGUsIHN0b3Agc2VhcmNoaW5nXG4gICAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgICAgLy8gRmlsZSBkb2Vzbid0IGV4aXN0IHdpdGggdGhpcyBleHRlbnNpb24sIHRyeSB0aGUgbmV4dCBvbmVcbiAgICAgICAgICBpZiAoZXJyLmNvZGUgIT09ICdFTk9FTlQnKSB7XG4gICAgICAgICAgICB0aHJvdyBlcnI7IC8vIFJlLXRocm93IG5vbi1maWxlLW5vdC1mb3VuZCBlcnJvcnNcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRklYOiBPbmx5IGNoZWNrIGZvdW5kRmlsZSwgbm90IGNvbnRlbnQgKGVtcHR5IGZpbGVzIGFyZSB2YWxpZClcbiAgICAgIGlmICghZm91bmRGaWxlKSB7XG4gICAgICAgIHRocm93IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKGBGaWxlIG5vdCBmb3VuZGApLCB7IGNvZGU6ICdFTk9FTlQnIH0pO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBSZXR1cm4gYSBtaW5pbWFsIElFbGVtZW50LWxpa2Ugb2JqZWN0IHRoYXQgcG9ydGZvbGlvTWFuYWdlci5zYXZlRWxlbWVudCBjYW4gaGFuZGxlXG4gICAgICAvLyBUaGlzIHByZXNlcnZlcyB0aGUgcmF3IG1hcmtkb3duIGNvbnRlbnQgZm9yIHN5bmNpbmcgdG8gR2l0SHViXG4gICAgICByZXR1cm4ge1xuICAgICAgICAvLyBJRWxlbWVudCByZXF1aXJlZCBwcm9wZXJ0aWVzXG4gICAgICAgIGlkOiBgJHtlbGVtZW50VHlwZX1fJHtzYW5pdGl6ZWROYW1lfV8ke0RhdGUubm93KCl9YCxcbiAgICAgICAgdHlwZTogZWxlbWVudFR5cGVFbnVtLFxuICAgICAgICB2ZXJzaW9uOiAnMS4wLjAnLFxuICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgIG5hbWU6IHNhbml0aXplZE5hbWUsXG4gICAgICAgICAgZGVzY3JpcHRpb246IGBMb2FkZWQgZnJvbSAke3BhdGguYmFzZW5hbWUoZm91bmRGaWxlKX1gLFxuICAgICAgICAgIGF1dGhvcjogJ3Vua25vd24nLFxuICAgICAgICAgIGNyZWF0ZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICBtb2RpZmllZDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgIHRhZ3M6IFtdXG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvLyBJRWxlbWVudCByZXF1aXJlZCBtZXRob2RzIChtaW5pbWFsIGltcGxlbWVudGF0aW9ucyBmb3Igc3luYylcbiAgICAgICAgdmFsaWRhdGU6ICgpID0+ICh7IFxuICAgICAgICAgIGlzVmFsaWQ6IHRydWUsIFxuICAgICAgICAgIGVycm9yczogW10gYXMgYW55W10sIFxuICAgICAgICAgIHdhcm5pbmdzOiBbXSBhcyBhbnlbXSBcbiAgICAgICAgfSksXG4gICAgICAgIHNlcmlhbGl6ZTogKCkgPT4gY29udGVudCB8fCAnJyxcbiAgICAgICAgZGVzZXJpYWxpemU6ICgpID0+IHsgLyogbm8tb3AgKi8gfSxcbiAgICAgICAgZ2V0U3RhdHVzOiAoKSA9PiAoeyBzdGF0dXM6ICdhY3RpdmUnIGFzIGNvbnN0IH0pLFxuICAgICAgICBcbiAgICAgICAgLy8gQWRkaXRpb25hbCBwcm9wZXJ0aWVzIGZvciBwb3J0Zm9saW8gc3luY1xuICAgICAgICBjb250ZW50OiBjb250ZW50IHx8ICcnLFxuICAgICAgICBmaWxlbmFtZTogcGF0aC5iYXNlbmFtZShmb3VuZEZpbGUpXG4gICAgICB9IGFzIGFueTsgLy8gVHlwZSBhc3NlcnRpb24gbmVlZGVkIHNpbmNlIHdlJ3JlIGR1Y2stdHlwaW5nIElFbGVtZW50XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBvdXIgdmFsaWRhdGlvbiBlcnJvciBmb3IgaW52YWxpZCBlbGVtZW50IHR5cGVzXG4gICAgICBpZiAoZXJyb3IubWVzc2FnZSAmJiBlcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdJbnZhbGlkIGVsZW1lbnQgdHlwZTonKSkge1xuICAgICAgICB0aHJvdyBlcnJvcjsgLy8gUmUtdGhyb3cgdmFsaWRhdGlvbiBlcnJvcnMgZm9yIGRlYnVnZ2luZ1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBQcm92aWRlIHNwZWNpZmljIGVycm9yIG1lc3NhZ2VzIGZvciBjb21tb24gZmlsZSBzeXN0ZW0gZXJyb3JzXG4gICAgICBsZXQgZXJyb3JNZXNzYWdlOiBzdHJpbmc7XG4gICAgICBcbiAgICAgIGlmIChlcnJvci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICBlcnJvck1lc3NhZ2UgPSBgRWxlbWVudCAnJHtzYW5pdGl6ZWROYW1lfScgbm90IGZvdW5kIGluICR7ZWxlbWVudFR5cGV9LiBTZWFyY2hlZCBmb3I6ICR7c2FuaXRpemVkTmFtZX0ubWQsICR7c2FuaXRpemVkTmFtZX0uanNvbiwgJHtzYW5pdGl6ZWROYW1lfS55YW1sLCAke3Nhbml0aXplZE5hbWV9LnltbGA7XG4gICAgICB9IGVsc2UgaWYgKGVycm9yIGluc3RhbmNlb2YgU3ludGF4RXJyb3IpIHtcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gYEVsZW1lbnQgJyR7c2FuaXRpemVkTmFtZX0nIGluICR7ZWxlbWVudFR5cGV9IGNvbnRhaW5zIGludmFsaWQgY29udGVudDogJHtlcnJvci5tZXNzYWdlfWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvck1lc3NhZ2UgPSBgRmFpbGVkIHRvIGxvYWQgZWxlbWVudCAnJHtzYW5pdGl6ZWROYW1lfScgZnJvbSAke2VsZW1lbnRUeXBlfTogJHtlcnJvci5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yJ31gO1xuICAgICAgfVxuICAgICAgXG4gICAgICBsb2dnZXIud2FybignRXJyb3IgaW4gbG9hZEVsZW1lbnRCeVR5cGUnLCB7IFxuICAgICAgICBlbGVtZW50TmFtZTogc2FuaXRpemVkTmFtZSwgXG4gICAgICAgIG9yaWdpbmFsTmFtZTogZWxlbWVudE5hbWUgIT09IHNhbml0aXplZE5hbWUgPyBlbGVtZW50TmFtZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgZWxlbWVudFR5cGUsIFxuICAgICAgICBlcnJvcjogZXJyb3IubWVzc2FnZSwgXG4gICAgICAgIGNvZGU6IGVycm9yLmNvZGUgXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcnVuKCkge1xuICAgIGxvZ2dlci5pbmZvKFwiU3RhcnRpbmcgRG9sbGhvdXNlTUNQIHNlcnZlci4uLlwiKTtcbiAgICAvLyBEb2NrZXIgYnVpbGQgdmVyaWZpY2F0aW9uIC0gcHJvdmVzIHdlJ3JlIHJ1bm5pbmcgZnJlc2ggY29kZVxuICAgIGxvZ2dlci5pbmZvKFwiQlVJTEQgVkVSSUZJQ0FUSU9OOiBSdW5uaW5nIGJ1aWxkIGZyb20gMjAyNS0wOC0xNyAxNjozMCBVVEMgLSBQUjYwNiBBUk02NCBmaXhcIik7XG4gICAgXG4gICAgLy8gRklYICM2MTA6IEluaXRpYWxpemUgcG9ydGZvbGlvIGFuZCBjb21wbGV0ZSBzZXR1cCBCRUZPUkUgY29ubmVjdGluZyB0byBNQ1BcbiAgICAvLyBUaGlzIGVuc3VyZXMgcGVyc29uYXMgYW5kIHBvcnRmb2xpbyBhcmUgcmVhZHkgd2hlbiBNQ1AgY29tbWFuZHMgYXJyaXZlXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVBvcnRmb2xpbygpO1xuICAgICAgYXdhaXQgdGhpcy5jb21wbGV0ZUluaXRpYWxpemF0aW9uKCk7XG4gICAgICBsb2dnZXIuaW5mbyhcIlBvcnRmb2xpbyBhbmQgcGVyc29uYXMgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5XCIpO1xuICAgICAgLy8gT3V0cHV0IG1lc3NhZ2UgdGhhdCBEb2NrZXIgdGVzdHMgY2FuIGRldGVjdFxuICAgICAgbG9nZ2VyLmluZm8oXCJEb2xsaG91c2VNQ1Agc2VydmVyIHJlYWR5IC0gd2FpdGluZyBmb3IgTUNQIGNvbm5lY3Rpb24gb24gc3RkaW9cIik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignRG9sbGhvdXNlTUNQU2VydmVyLnJ1bi5pbml0aWFsaXphdGlvbicsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yOyAvLyBSZS10aHJvdyB0byBwcmV2ZW50IHNlcnZlciBmcm9tIHN0YXJ0aW5nIHdpdGggaW5jb21wbGV0ZSBpbml0aWFsaXphdGlvblxuICAgIH1cbiAgICBcbiAgICBjb25zdCB0cmFuc3BvcnQgPSBuZXcgU3RkaW9TZXJ2ZXJUcmFuc3BvcnQoKTtcbiAgICBcbiAgICAvLyBTZXQgdXAgZ3JhY2VmdWwgc2h1dGRvd24gaGFuZGxlcnNcbiAgICBjb25zdCBjbGVhbnVwID0gYXN5bmMgKCkgPT4ge1xuICAgICAgbG9nZ2VyLmluZm8oXCJTaHV0dGluZyBkb3duIERvbGxob3VzZU1DUCBzZXJ2ZXIuLi5cIik7XG4gICAgICBcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIENsZWFuIHVwIEdpdEh1YiBhdXRoIG1hbmFnZXJcbiAgICAgICAgaWYgKHRoaXMuZ2l0aHViQXV0aE1hbmFnZXIpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmdpdGh1YkF1dGhNYW5hZ2VyLmNsZWFudXAoKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gQ2xlYW4gdXAgYW55IG90aGVyIHJlc291cmNlc1xuICAgICAgICBcbiAgICAgICAgbG9nZ2VyLmluZm8oXCJDbGVhbnVwIGNvbXBsZXRlZFwiKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcihcIkVycm9yIGR1cmluZyBjbGVhbnVwXCIsIHsgZXJyb3IgfSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgICB9O1xuICAgIFxuICAgIC8vIFJlZ2lzdGVyIHNodXRkb3duIGhhbmRsZXJzXG4gICAgcHJvY2Vzcy5vbignU0lHSU5UJywgY2xlYW51cCk7XG4gICAgcHJvY2Vzcy5vbignU0lHVEVSTScsIGNsZWFudXApO1xuICAgIHByb2Nlc3Mub24oJ1NJR0hVUCcsIGNsZWFudXApO1xuICAgIFxuICAgIGF3YWl0IHRoaXMuc2VydmVyLmNvbm5lY3QodHJhbnNwb3J0KTtcbiAgICAvLyBNYXJrIHRoYXQgTUNQIGlzIG5vdyBjb25uZWN0ZWQgLSBubyBtb3JlIGNvbnNvbGUgb3V0cHV0IGFsbG93ZWRcbiAgICBsb2dnZXIuc2V0TUNQQ29ubmVjdGVkKCk7XG4gICAgbG9nZ2VyLmluZm8oXCJEb2xsaG91c2VNQ1Agc2VydmVyIHJ1bm5pbmcgb24gc3RkaW9cIik7XG4gIH1cbn1cblxuLy8gRXhwb3J0IGlzIGFscmVhZHkgYXQgY2xhc3MgZGVjbGFyYXRpb25cblxuLy8gT25seSBzdGFydCB0aGUgc2VydmVyIGlmIHRoaXMgZmlsZSBpcyBiZWluZyBydW4gZGlyZWN0bHkgKG5vdCBpbXBvcnRlZCBieSB0ZXN0cylcbi8vIEhhbmRsZSBkaWZmZXJlbnQgZXhlY3V0aW9uIG1ldGhvZHMgKGRpcmVjdCwgbnB4LCBDTEkpXG5jb25zdCBpc0RpcmVjdEV4ZWN1dGlvbiA9IGltcG9ydC5tZXRhLnVybCA9PT0gYGZpbGU6Ly8ke3Byb2Nlc3MuYXJndlsxXX1gO1xuY29uc3QgaXNOcHhFeGVjdXRpb24gPSBwcm9jZXNzLmVudi5ucG1fZXhlY3BhdGg/LmluY2x1ZGVzKCducHgnKTtcbmNvbnN0IGlzQ2xpRXhlY3V0aW9uID0gcHJvY2Vzcy5hcmd2WzFdPy5lbmRzV2l0aCgnL2RvbGxob3VzZW1jcCcpIHx8IHByb2Nlc3MuYXJndlsxXT8uZW5kc1dpdGgoJ1xcXFxkb2xsaG91c2VtY3AnKTtcbmNvbnN0IGlzVGVzdCA9IHByb2Nlc3MuZW52LkpFU1RfV09SS0VSX0lEO1xuXG4vLyBQcm9ncmVzc2l2ZSBzdGFydHVwIHdpdGggcmV0cmllcyBmb3IgbnB4L0NMSSBleGVjdXRpb25cbmNvbnN0IFNUQVJUVVBfREVMQVlTID0gWzEwLCA1MCwgMTAwLCAyMDBdOyAvLyBQcm9ncmVzc2l2ZSBkZWxheXMgaW4gbXNcblxuYXN5bmMgZnVuY3Rpb24gc3RhcnRTZXJ2ZXJXaXRoUmV0cnkocmV0cmllc0xlZnQgPSBTVEFSVFVQX0RFTEFZUy5sZW5ndGgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBzZXJ2ZXIgPSBuZXcgRG9sbGhvdXNlTUNQU2VydmVyKCk7XG4gICAgYXdhaXQgc2VydmVyLnJ1bigpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChyZXRyaWVzTGVmdCA+IDAgJiYgKGlzTnB4RXhlY3V0aW9uIHx8IGlzQ2xpRXhlY3V0aW9uKSkge1xuICAgICAgLy8gVHJ5IGFnYWluIHdpdGggYSBsb25nZXIgZGVsYXlcbiAgICAgIGNvbnN0IGRlbGF5SW5kZXggPSBTVEFSVFVQX0RFTEFZUy5sZW5ndGggLSByZXRyaWVzTGVmdDtcbiAgICAgIGNvbnN0IGRlbGF5ID0gU1RBUlRVUF9ERUxBWVNbZGVsYXlJbmRleF07XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgZGVsYXkpKTtcbiAgICAgIHJldHVybiBzdGFydFNlcnZlcldpdGhSZXRyeShyZXRyaWVzTGVmdCAtIDEpO1xuICAgIH1cbiAgICAvLyBGaW5hbCBmYWlsdXJlIC0gbWluaW1hbCBlcnJvciBtZXNzYWdlIGZvciBzZWN1cml0eVxuICAgIC8vIE5vdGU6IFVzaW5nIGNvbnNvbGUuZXJyb3IgaGVyZSBpcyBpbnRlbnRpb25hbCBhcyBpdCdzIHRoZSBmaW5hbCBlcnJvciBiZWZvcmUgZXhpdFxuICAgIGNvbnNvbGUuZXJyb3IoXCJbRG9sbGhvdXNlTUNQXSBTZXJ2ZXIgc3RhcnR1cCBmYWlsZWRcIik7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG59XG5cbmlmICgoaXNEaXJlY3RFeGVjdXRpb24gfHwgaXNOcHhFeGVjdXRpb24gfHwgaXNDbGlFeGVjdXRpb24pICYmICFpc1Rlc3QpIHtcbiAgc3RhcnRTZXJ2ZXJXaXRoUmV0cnkoKS5jYXRjaCgoKSA9PiB7XG4gICAgLy8gTm90ZTogVXNpbmcgY29uc29sZS5lcnJvciBoZXJlIGlzIGludGVudGlvbmFsIGFzIGl0J3MgdGhlIGZpbmFsIGVycm9yIGJlZm9yZSBleGl0XG4gICAgY29uc29sZS5lcnJvcihcIltEb2xsaG91c2VNQ1BdIFNlcnZlciBzdGFydHVwIGZhaWxlZFwiKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH0pO1xufSJdfQ==