@dollhousemcp/mcp-server 2.0.12-rc.9 → 2.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/CHANGELOG.md +66 -0
  2. package/README.md +4 -4
  3. package/README.md.backup +5 -5
  4. package/README.npm.md +4 -4
  5. package/dist/di/Container.d.ts +14 -0
  6. package/dist/di/Container.d.ts.map +1 -1
  7. package/dist/di/Container.js +43 -26
  8. package/dist/elements/agents/AgentManager.d.ts +11 -4
  9. package/dist/elements/agents/AgentManager.d.ts.map +1 -1
  10. package/dist/elements/agents/AgentManager.js +38 -11
  11. package/dist/elements/base/BaseElementManager.d.ts +10 -0
  12. package/dist/elements/base/BaseElementManager.d.ts.map +1 -1
  13. package/dist/elements/base/BaseElementManager.js +26 -1
  14. package/dist/elements/ensembles/EnsembleManager.d.ts +1 -0
  15. package/dist/elements/ensembles/EnsembleManager.d.ts.map +1 -1
  16. package/dist/elements/ensembles/EnsembleManager.js +13 -2
  17. package/dist/elements/templates/Template.d.ts +33 -1
  18. package/dist/elements/templates/Template.d.ts.map +1 -1
  19. package/dist/elements/templates/Template.js +74 -15
  20. package/dist/elements/templates/TemplateManager.d.ts.map +1 -1
  21. package/dist/elements/templates/TemplateManager.js +8 -1
  22. package/dist/generated/version.d.ts +2 -2
  23. package/dist/generated/version.d.ts.map +1 -1
  24. package/dist/generated/version.js +3 -3
  25. package/dist/handlers/element-crud/createElement.js +2 -2
  26. package/dist/handlers/mcp-aql/SchemaDispatcher.d.ts.map +1 -1
  27. package/dist/handlers/mcp-aql/SchemaDispatcher.js +8 -1
  28. package/dist/handlers/strategies/EnsembleActivationStrategy.d.ts +3 -0
  29. package/dist/handlers/strategies/EnsembleActivationStrategy.d.ts.map +1 -1
  30. package/dist/handlers/strategies/EnsembleActivationStrategy.js +48 -9
  31. package/dist/index.js +19 -13
  32. package/dist/portfolio/DefaultElementProvider.d.ts +8 -0
  33. package/dist/portfolio/DefaultElementProvider.d.ts.map +1 -1
  34. package/dist/portfolio/DefaultElementProvider.js +43 -1
  35. package/dist/security/contentValidator.d.ts +15 -0
  36. package/dist/security/contentValidator.d.ts.map +1 -1
  37. package/dist/security/contentValidator.js +40 -2
  38. package/dist/utils/TemplateRenderer.d.ts +9 -0
  39. package/dist/utils/TemplateRenderer.d.ts.map +1 -1
  40. package/dist/utils/TemplateRenderer.js +21 -1
  41. package/dist/web/console/IngestRoutes.d.ts.map +1 -1
  42. package/dist/web/console/IngestRoutes.js +193 -59
  43. package/dist/web/console/SessionNames.d.ts +18 -5
  44. package/dist/web/console/SessionNames.d.ts.map +1 -1
  45. package/dist/web/console/SessionNames.js +63 -8
  46. package/dist/web/console/StaleProcessRecovery.d.ts.map +1 -1
  47. package/dist/web/console/StaleProcessRecovery.js +5 -4
  48. package/dist/web/console/UnifiedConsole.js +3 -3
  49. package/dist/web/console/consoleToken.js +3 -3
  50. package/dist/web/portDiscovery.d.ts +1 -1
  51. package/dist/web/portDiscovery.d.ts.map +1 -1
  52. package/dist/web/portDiscovery.js +2 -2
  53. package/dist/web/public/app.js +65 -11
  54. package/dist/web/public/index.html +2 -0
  55. package/dist/web/public/logs.js +24 -2
  56. package/dist/web/public/metrics.js +22 -4
  57. package/dist/web/public/sessions.js +55 -8
  58. package/dist/web/public/setup.js +11 -2
  59. package/dist/web/public/styles.css +12 -0
  60. package/dist/web/routes/permissionRoutes.js +2 -2
  61. package/dist/web/routes/setupRoutes.d.ts +67 -1
  62. package/dist/web/routes/setupRoutes.d.ts.map +1 -1
  63. package/dist/web/routes/setupRoutes.js +298 -6
  64. package/dist/web/routes.d.ts.map +1 -1
  65. package/dist/web/routes.js +4 -2
  66. package/dist/web/server.d.ts.map +1 -1
  67. package/dist/web/server.js +14 -5
  68. package/package.json +5 -3
  69. package/server.json +2 -2
@@ -39,6 +39,13 @@ export class TemplateManager extends BaseElementManager {
39
39
  return template;
40
40
  }
41
41
  async save(template, filePath) {
42
+ // Auto-derive variables from content (#1896): ensures every {{placeholder}}
43
+ // has a matching schema entry so render() never silently returns unfilled text.
44
+ // Existing entries are never overwritten — user-set descriptions, types, and
45
+ // required flags survive. New entries default to type: 'string', required: false.
46
+ if (template.content) {
47
+ template.metadata.variables = Template.deriveVariablesFromContent(template.content, template.metadata.variables ?? []);
48
+ }
42
49
  await super.save(template, filePath);
43
50
  SecurityMonitor.logSecurityEvent({
44
51
  type: 'TEMPLATE_SAVED',
@@ -344,4 +351,4 @@ export class TemplateManager extends BaseElementManager {
344
351
  return metadata;
345
352
  }
346
353
  }
347
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGVtcGxhdGVNYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL3RlbXBsYXRlcy9UZW1wbGF0ZU1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFFN0IsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBRWpGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsUUFBUSxFQUFvQixNQUFNLGVBQWUsQ0FBQztBQVMzRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUM5RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFOUQsTUFBTSxPQUFPLGVBQWdCLFNBQVEsa0JBQTRCO0lBV3JEO0lBVkYsd0JBQXdCLENBQTJCO0lBQ25ELGlCQUFpQixDQUFvQjtJQUNyQyxvQkFBb0IsQ0FBdUI7SUFFbkQsWUFDRSxnQkFBa0MsRUFDbEMsZUFBZ0MsRUFDaEMscUJBQTRDLEVBQzVDLGtCQUFzQyxFQUN0QyxvQkFBMEMsRUFDbEMsZUFBZ0MsRUFDeEMsZ0JBQW1DLEVBQ25DLFlBQTJFLEVBQzNFLGFBQXVFO1FBRXZFLEtBQUssQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxF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d0JBQXdCLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsSUFBSSxJQUFJLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUV4RyxRQUFRLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLElBQUksbUJBQW1CLENBQUM7UUFDckQsUUFBUSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztRQUVsRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRlbXBsYXRlTWFuYWdlciAtIFJlZmFjdG9yZWQgdG8gZXh0ZW5kIEJhc2VFbGVtZW50TWFuYWdlciwga2VlcGluZ1xuICogdGVtcGxhdGUtc3BlY2lmaWMgdmFsaWRhdGlvbiwgaW1wb3J0L2V4cG9ydCBsb2dpYywgYW5kIGFuYWx5dGljcyBoZWxwZXJzLlxuICovXG5cbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5cbmltcG9ydCB7IEVsZW1lbnRUeXBlIH0gZnJvbSAnLi4vLi4vcG9ydGZvbGlvL3R5cGVzLmpzJztcbmltcG9ydCB7IHRvU2luZ3VsYXJMYWJlbCB9IGZyb20gJy4uLy4uL3V0aWxzL2VsZW1lbnRUeXBlTm9ybWFsaXphdGlvbi5qcyc7XG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tICcuLi8uLi9zZWN1cml0eS9zZWN1cml0eU1vbml0b3IuanMnO1xuaW1wb3J0IHsgc2FuaXRpemVJbnB1dCB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L0lucHV0VmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IFVuaWNvZGVWYWxpZGF0b3IgfSBmcm9tICcuLi8uLi9zZWN1cml0eS92YWxpZGF0b3JzL3VuaWNvZGVWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgRmlsZUxvY2tNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vc2VjdXJpdHkvZmlsZUxvY2tNYW5hZ2VyLmpzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uLy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBCYXNlRWxlbWVudE1hbmFnZXIgfSBmcm9tICcuLi9iYXNlL0Jhc2VFbGVtZW50TWFuYWdlci5qcyc7XG5pbXBvcnQgeyBUZW1wbGF0ZSwgVGVtcGxhdGVNZXRhZGF0YSB9IGZyb20gJy4vVGVtcGxhdGUuanMnO1xuaW1wb3J0IHsgUG9ydGZvbGlvTWFuYWdlciB9IGZyb20gJy4uLy4uL3BvcnRmb2xpby9Qb3J0Zm9saW9NYW5hZ2VyLmpzJztcbmltcG9ydCB7IFZhbGlkYXRpb25SZWdpc3RyeSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ZhbGlkYXRpb24vVmFsaWRhdGlvblJlZ2lzdHJ5LmpzJztcbmltcG9ydCB7IFRyaWdnZXJWYWxpZGF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ZhbGlkYXRpb24vVHJpZ2dlclZhbGlkYXRpb25TZXJ2aWNlLmpzJztcbmltcG9ydCB7IFZhbGlkYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdmFsaWRhdGlvbi9WYWxpZGF0aW9uU2VydmljZS5qcyc7XG5pbXBvcnQgeyBTZXJpYWxpemF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL1NlcmlhbGl6YXRpb25TZXJ2aWNlLmpzJztcbmltcG9ydCB7IE1ldGFkYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL01ldGFkYXRhU2VydmljZS5qcyc7XG5pbXBvcnQgeyBGaWxlT3BlcmF0aW9uc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9GaWxlT3BlcmF0aW9uc1NlcnZpY2UuanMnO1xuaW1wb3J0IHsgRmlsZVdhdGNoU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL0ZpbGVXYXRjaFNlcnZpY2UuanMnO1xuaW1wb3J0IHsgc2FuaXRpemVHYXRla2VlcGVyUG9saWN5IH0gZnJvbSAnLi4vLi4vaGFuZGxlcnMvbWNwLWFxbC9wb2xpY2llcy9FbGVtZW50UG9saWNpZXMuanMnO1xuaW1wb3J0IHsgU0VDVVJJVFlfTElNSVRTIH0gZnJvbSAnLi4vLi4vc2VjdXJpdHkvY29uc3RhbnRzLmpzJztcblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlTWFuYWdlciBleHRlbmRzIEJhc2VFbGVtZW50TWFuYWdlcjxUZW1wbGF0ZT4ge1xuICBwcml2YXRlIHRyaWdnZXJWYWxpZGF0aW9uU2VydmljZTogVHJpZ2dlclZhbGlkYXRpb25TZXJ2aWNlO1xuICBwcml2YXRlIHZhbGlkYXRpb25TZXJ2aWNlOiBWYWxpZGF0aW9uU2VydmljZTtcbiAgcHJpdmF0ZSBzZXJpYWxpemF0aW9uU2VydmljZTogU2VyaWFsaXphdGlvblNlcnZpY2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcG9ydGZvbGlvTWFuYWdlcjogUG9ydGZvbGlvTWFuYWdlcixcbiAgICBmaWxlTG9ja01hbmFnZXI6IEZpbGVMb2NrTWFuYWdlcixcbiAgICBmaWxlT3BlcmF0aW9uc1NlcnZpY2U6IEZpbGVPcGVyYXRpb25zU2VydmljZSxcbiAgICB2YWxpZGF0aW9uUmVnaXN0cnk6IFZhbGlkYXRpb25SZWdpc3RyeSxcbiAgICBzZXJpYWxpemF0aW9uU2VydmljZTogU2VyaWFsaXphdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtZXRhZGF0YVNlcnZpY2U6IE1ldGFkYXRhU2VydmljZSxcbiAgICBmaWxlV2F0Y2hTZXJ2aWNlPzogRmlsZVdhdGNoU2VydmljZSxcbiAgICBtZW1vcnlCdWRnZXQ/OiBpbXBvcnQoJy4uLy4uL2NhY2hlL0NhY2hlTWVtb3J5QnVkZ2V0LmpzJykuQ2FjaGVNZW1vcnlCdWRnZXQsXG4gICAgYmFja3VwU2VydmljZT86IGltcG9ydCgnLi4vLi4vc2VydmljZXMvQmFja3VwU2VydmljZS5qcycpLkJhY2t1cFNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoRWxlbWVudFR5cGUuVEVNUExBVEUsIHBvcnRmb2xpb01hbmFnZXIsIGZpbGVMb2NrTWFuYWdlciwgeyBmaWxlV2F0Y2hTZXJ2aWNlLCBtZW1vcnlCdWRnZXQsIGJhY2t1cFNlcnZpY2UgfSwgZmlsZU9wZXJhdGlvbnNTZXJ2aWNlLCB2YWxpZGF0aW9uUmVnaXN0cnkpO1xuICAgIHRoaXMudHJpZ2dlclZhbGlkYXRpb25TZXJ2aWNlID0gdmFsaWRhdGlvblJlZ2lzdHJ5LmdldFRyaWdnZXJWYWxpZGF0aW9uU2VydmljZSgpO1xuICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2UgPSB2YWxpZGF0aW9uUmVnaXN0cnkuZ2V0VmFsaWRhdGlvblNlcnZpY2UoKTtcbiAgICB0aGlzLnNlcmlhbGl6YXRpb25TZXJ2aWNlID0gc2VyaWFsaXphdGlvblNlcnZpY2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZ2V0RWxlbWVudExhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICd0ZW1wbGF0ZSc7XG4gIH1cblxuICBvdmVycmlkZSBhc3luYyBsb2FkKGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPFRlbXBsYXRlPiB7XG4gICAgY29uc3QgdGVtcGxhdGUgPSBhd2FpdCBzdXBlci5sb2FkKGZpbGVQYXRoKTtcblxuICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgIHR5cGU6ICdURU1QTEFURV9MT0FERUQnLFxuICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgc291cmNlOiAnVGVtcGxhdGVNYW5hZ2VyLmxvYWQnLFxuICAgICAgZGV0YWlsczogYFRlbXBsYXRlIGxvYWRlZDogJHt0ZW1wbGF0ZS5tZXRhZGF0YS5uYW1lfSBmcm9tICR7cGF0aC5iYXNlbmFtZShmaWxlUGF0aCl9YFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRlbXBsYXRlO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgc2F2ZSh0ZW1wbGF0ZTogVGVtcGxhdGUsIGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBzdXBlci5zYXZlKHRlbXBsYXRlLCBmaWxlUGF0aCk7XG5cbiAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICB0eXBlOiAnVEVNUExBVEVfU0FWRUQnLFxuICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgc291cmNlOiAnVGVtcGxhdGVNYW5hZ2VyLnNhdmUnLFxuICAgICAgZGV0YWlsczogYFRlbXBsYXRlIHNhdmVkOiAke3RlbXBsYXRlLm1ldGFkYXRhLm5hbWV9IHRvICR7cGF0aC5iYXNlbmFtZShmaWxlUGF0aCl9YFxuICAgIH0pO1xuXG4gICAgbG9nZ2VyLmluZm8oYFRlbXBsYXRlIHNhdmVkOiAke3RlbXBsYXRlLm1ldGFkYXRhLm5hbWV9YCk7XG4gIH1cblxuICBvdmVycmlkZSBhc3luYyBkZWxldGUoZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHN1cGVyLmRlbGV0ZShmaWxlUGF0aCk7XG5cbiAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICB0eXBlOiAnVEVNUExBVEVfREVMRVRFRCcsXG4gICAgICBzZXZlcml0eTogJ01FRElVTScsXG4gICAgICBzb3VyY2U6ICdUZW1wbGF0ZU1hbmFnZXIuZGVsZXRlJyxcbiAgICAgIGRldGFpbHM6IGBUZW1wbGF0ZSBkZWxldGVkOiAke3BhdGguYmFzZW5hbWUoZmlsZVBhdGgpfWBcbiAgICB9KTtcblxuICAgIGxvZ2dlci5pbmZvKGBUZW1wbGF0ZSBkZWxldGVkOiAke3BhdGguYmFzZW5hbWUoZmlsZVBhdGgpfWApO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlKGRhdGE6IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgICBjb250ZW50Pzogc3RyaW5nO1xuICAgIGluc3RydWN0aW9ucz86IHN0cmluZztcbiAgICBtZXRhZGF0YT86IFBhcnRpYWw8VGVtcGxhdGVNZXRhZGF0YT47XG4gIH0pOiBQcm9taXNlPFRlbXBsYXRlPiB7XG4gICAgLy8gVXNlIHNwZWNpYWxpemVkIHZhbGlkYXRvciBmb3IgaW5wdXQgdmFsaWRhdGlvblxuICAgIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSBhd2FpdCB0aGlzLnZhbGlkYXRvci52YWxpZGF0ZUNyZWF0ZSh7XG4gICAgICBuYW1lOiBkYXRhLm5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogZGF0YS5kZXNjcmlwdGlvbixcbiAgICAgIGNvbnRlbnQ6IGRhdGEuY29udGVudFxuICAgIH0pO1xuXG4gICAgaWYgKCF2YWxpZGF0aW9uUmVzdWx0LmlzVmFsaWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVmFsaWRhdGlvbiBmYWlsZWQ6ICR7dmFsaWRhdGlvblJlc3VsdC5lcnJvcnMuam9pbignLCAnKX1gKTtcbiAgICB9XG5cbiAgICAvLyBMb2cgd2FybmluZ3MgaWYgYW55XG4gICAgaWYgKHZhbGlkYXRpb25SZXN1bHQud2FybmluZ3MgJiYgdmFsaWRhdGlvblJlc3VsdC53YXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICBsb2dnZXIud2FybihgVGVtcGxhdGUgY3JlYXRpb24gd2FybmluZ3M6ICR7dmFsaWRhdGlvblJlc3VsdC53YXJuaW5ncy5qb2luKCcsICcpfWApO1xuICAgIH1cblxuICAgIC8vIEdldCBzYW5pdGl6ZWQgbmFtZSBmb3IgZmlsZSBvcGVyYXRpb25zICh2YWxpZGF0b3IgYWxyZWFkeSB2YWxpZGF0ZWQpXG4gICAgY29uc3QgbmFtZUlucHV0ID0gZGF0YS5uYW1lIHx8ICduZXctdGVtcGxhdGUnO1xuICAgIGNvbnN0IG5hbWVSZXN1bHQgPSB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLnZhbGlkYXRlQW5kU2FuaXRpemVJbnB1dChuYW1lSW5wdXQsIHtcbiAgICAgIG1heExlbmd0aDogU0VDVVJJVFlfTElNSVRTLk1BWF9OQU1FX0xFTkdUSCxcbiAgICAgIGFsbG93U3BhY2VzOiB0cnVlXG4gICAgfSk7XG4gICAgY29uc3Qgc2FuaXRpemVkTmFtZSA9IG5hbWVSZXN1bHQuc2FuaXRpemVkVmFsdWUhO1xuXG4gICAgLy8gVXNlIGluaGVyaXRlZCBnZXRFbGVtZW50RmlsZW5hbWUoKSBmb3IgY29uc2lzdGVudCBmaWxlbmFtZSBub3JtYWxpemF0aW9uXG4gICAgY29uc3QgZmlsZW5hbWUgPSB0aGlzLmdldEVsZW1lbnRGaWxlbmFtZShzYW5pdGl6ZWROYW1lKTtcblxuICAgIC8vIEZJWDogSXNzdWUgIzIwIC0gQ2hlY2sgZm9yIGR1cGxpY2F0ZSBiZWZvcmUgY3JlYXRpbmdcbiAgICBjb25zdCBleGlzdGluZ1RlbXBsYXRlcyA9IGF3YWl0IHRoaXMubGlzdCgpO1xuICAgIGNvbnN0IGR1cGxpY2F0ZSA9IGV4aXN0aW5nVGVtcGxhdGVzLmZpbmQodCA9PlxuICAgICAgdC5tZXRhZGF0YS5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IHNhbml0aXplZE5hbWUudG9Mb3dlckNhc2UoKVxuICAgICk7XG5cbiAgICBpZiAoZHVwbGljYXRlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEEgdGVtcGxhdGUgbmFtZWQgXCIke3Nhbml0aXplZE5hbWV9XCIgYWxyZWFkeSBleGlzdHNgKTtcbiAgICB9XG5cbiAgICBjb25zdCB0ZW1wbGF0ZSA9IG5ldyBUZW1wbGF0ZShcbiAgICAgIHtcbiAgICAgICAgLi4uZGF0YS5tZXRhZGF0YSxcbiAgICAgICAgbmFtZTogc2FuaXRpemVkTmFtZSxcbiAgICAgICAgZGVzY3JpcHRpb246IGRhdGEuZGVzY3JpcHRpb24gfHwgJydcbiAgICAgIH0sXG4gICAgICBkYXRhLmNvbnRlbnQgfHwgJycsXG4gICAgICB0aGlzLm1ldGFkYXRhU2VydmljZVxuICAgICk7XG4gICAgLy8gU2V0IGluc3RydWN0aW9ucyAocmVuZGVyaW5nIGRpcmVjdGl2ZXMpIGlmIHByb3ZpZGVkXG4gICAgaWYgKGRhdGEuaW5zdHJ1Y3Rpb25zKSB7XG4gICAgICB0ZW1wbGF0ZS5pbnN0cnVjdGlvbnMgPSBkYXRhLmluc3RydWN0aW9ucztcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnNhdmUodGVtcGxhdGUsIGZpbGVuYW1lKTtcbiAgICAvLyBOb3RlOiBObyByZWxvYWQoKSBoZXJlIOKAlCBzYXZlKCkgY2FjaGVzIHRoZSBlbGVtZW50IGNvcnJlY3RseS5cbiAgICAvLyBTZWUgSXNzdWUgIzQ5MSBmb3Igd2h5IFBlcnNvbmFNYW5hZ2VyJ3MgcmVsb2FkLWFmdGVyLWNyZWF0ZSB3YXMgcmVtb3ZlZC5cblxuICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgIHR5cGU6ICdFTEVNRU5UX0NSRUFURUQnLFxuICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgc291cmNlOiAnVGVtcGxhdGVNYW5hZ2VyLmNyZWF0ZScsXG4gICAgICBkZXRhaWxzOiBgVGVtcGxhdGUgY3JlYXRlZDogJHt0ZW1wbGF0ZS5tZXRhZGF0YS5uYW1lfWBcbiAgICB9KTtcblxuICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgfVxuXG4gIGFzeW5jIGltcG9ydEVsZW1lbnQoZGF0YTogc3RyaW5nLCBmb3JtYXQ6ICdqc29uJyB8ICd5YW1sJyB8ICdtYXJrZG93bicgPSAnbWFya2Rvd24nKTogUHJvbWlzZTxUZW1wbGF0ZT4ge1xuICAgIHRyeSB7XG4gICAgICBsZXQgbWV0YWRhdGE6IFBhcnRpYWw8VGVtcGxhdGVNZXRhZGF0YT47XG4gICAgICBsZXQgY29udGVudCA9ICcnO1xuXG4gICAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgICBjYXNlICdqc29uJzoge1xuICAgICAgICAgIGNvbnN0IGpzb25EYXRhID0gdGhpcy5zZXJpYWxpemF0aW9uU2VydmljZS5wYXJzZUpzb24oZGF0YSwge1xuICAgICAgICAgICAgc291cmNlOiAnVGVtcGxhdGVNYW5hZ2VyLmltcG9ydEVsZW1lbnQnXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgbWV0YWRhdGEgPSBhd2FpdCB0aGlzLnNhbml0aXplTWV0YWRhdGEoanNvbkRhdGEubWV0YWRhdGEgfHwge30pO1xuICAgICAgICAgIGNvbnRlbnQgPSBqc29uRGF0YS5jb250ZW50IHx8ICcnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSAneWFtbCc6IHtcbiAgICAgICAgICBjb25zdCBwYXJzZWQgPSB0aGlzLnNlcmlhbGl6YXRpb25TZXJ2aWNlLnBhcnNlRnJvbnRtYXR0ZXIoZGF0YSwge1xuICAgICAgICAgICAgbWF4WWFtbFNpemU6IDY0ICogMTAyNCxcbiAgICAgICAgICAgIHZhbGlkYXRlQ29udGVudDogdHJ1ZSxcbiAgICAgICAgICAgIHNvdXJjZTogJ1RlbXBsYXRlTWFuYWdlci5pbXBvcnRFbGVtZW50J1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgbWV0YWRhdGEgPSBhd2FpdCB0aGlzLnNhbml0aXplTWV0YWRhdGEocGFyc2VkLmRhdGEubWV0YWRhdGEgfHwgcGFyc2VkLmRhdGEpO1xuICAgICAgICAgIGNvbnRlbnQgPSBwYXJzZWQuY29udGVudCB8fCAnJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgJ21hcmtkb3duJzoge1xuICAgICAgICAgIGNvbnN0IG1kUGFyc2VkID0gdGhpcy5zZXJpYWxpemF0aW9uU2VydmljZS5wYXJzZUZyb250bWF0dGVyKGRhdGEsIHtcbiAgICAgICAgICAgIG1heFlhbWxTaXplOiA2NCAqIDEwMjQsXG4gICAgICAgICAgICB2YWxpZGF0ZUNvbnRlbnQ6IHRydWUsXG4gICAgICAgICAgICBzb3VyY2U6ICdUZW1wbGF0ZU1hbmFnZXIuaW1wb3J0RWxlbWVudCdcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBtZXRhZGF0YSA9IGF3YWl0IHRoaXMuc2FuaXRpemVNZXRhZGF0YShtZFBhcnNlZC5kYXRhKTtcbiAgICAgICAgICBjb250ZW50ID0gbWRQYXJzZWQuY29udGVudDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBpbXBvcnQgZm9ybWF0OiAke2Zvcm1hdH1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdGVtcGxhdGUgPSBuZXcgVGVtcGxhdGUobWV0YWRhdGEsIGNvbnRlbnQsIHRoaXMubWV0YWRhdGFTZXJ2aWNlKTtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb24gPSB0ZW1wbGF0ZS52YWxpZGF0ZSgpO1xuICAgICAgaWYgKCF2YWxpZGF0aW9uLnZhbGlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0ZW1wbGF0ZTogJHt2YWxpZGF0aW9uLmVycm9ycz8ubWFwKGUgPT4gZS5tZXNzYWdlKS5qb2luKCcsICcpfWApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGVtcGxhdGU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGltcG9ydCB0ZW1wbGF0ZTogJHtlcnJvcn1gKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGV4cG9ydEVsZW1lbnQodGVtcGxhdGU6IFRlbXBsYXRlLCBmb3JtYXQ6ICdqc29uJyB8ICd5YW1sJyB8ICdtYXJrZG93bicgPSAnbWFya2Rvd24nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICB0cnkge1xuICAgICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgICAgY2FzZSAnanNvbic6XG4gICAgICAgICAgcmV0dXJuICh0ZW1wbGF0ZSBhcyBhbnkpLnNlcmlhbGl6ZVRvSlNPTiA/ICh0ZW1wbGF0ZSBhcyBhbnkpLnNlcmlhbGl6ZVRvSlNPTigpIDogdGVtcGxhdGUuc2VyaWFsaXplKCk7XG5cbiAgICAgICAgY2FzZSAneWFtbCc6IHtcbiAgICAgICAgICBjb25zdCB5YW1sRGF0YSA9IHtcbiAgICAgICAgICAgIG1ldGFkYXRhOiB0ZW1wbGF0ZS5tZXRhZGF0YSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IHRlbXBsYXRlLmNvbnRlbnQsXG4gICAgICAgICAgICBpZDogdGVtcGxhdGUuaWQsXG4gICAgICAgICAgICB2ZXJzaW9uOiB0ZW1wbGF0ZS52ZXJzaW9uXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHJldHVybiB0aGlzLnNlcmlhbGl6YXRpb25TZXJ2aWNlLmR1bXBZYW1sKHlhbWxEYXRhLCB7XG4gICAgICAgICAgICBzY2hlbWE6ICdqc29uJywgIC8vIEZpeCAjOTE0OiBzdGFuZGFyZGl6ZSBvbiBKU09OIHNjaGVtYSBhY3Jvc3MgYWxsIG1hbmFnZXJzXG4gICAgICAgICAgICBub1JlZnM6IHRydWUsXG4gICAgICAgICAgICBzb3J0S2V5czogdHJ1ZSxcbiAgICAgICAgICAgIHNraXBJbnZhbGlkOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlICdtYXJrZG93bic6IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5zZXJpYWxpemF0aW9uU2VydmljZS5jcmVhdGVGcm9udG1hdHRlcihcbiAgICAgICAgICAgIHRlbXBsYXRlLm1ldGFkYXRhLFxuICAgICAgICAgICAgdGVtcGxhdGUuY29udGVudCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbWV0aG9kOiAnbWFudWFsJyxcbiAgICAgICAgICAgICAgc2NoZW1hOiAnanNvbicsICAvLyBGaXggIzkxNDogc3RhbmRhcmRpemUgb24gSlNPTiBzY2hlbWEgYWNyb3NzIGFsbCBtYW5hZ2Vyc1xuICAgICAgICAgICAgICBjbGVhbk1ldGFkYXRhOiB0cnVlLFxuICAgICAgICAgICAgICBjbGVhbmluZ1N0cmF0ZWd5OiAncmVtb3ZlLWJvdGgnICAvLyBGaXggIzkxMzogc3RhbmRhcmRpemUgYWNyb3NzIGFsbCBtYW5hZ2Vyc1xuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgZXhwb3J0IGZvcm1hdDogJHtmb3JtYXR9YCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGV4cG9ydCB0ZW1wbGF0ZTogJHtlcnJvcn1gKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZpbmRCeUNhdGVnb3J5KGNhdGVnb3J5OiBzdHJpbmcpOiBQcm9taXNlPFRlbXBsYXRlW10+IHtcbiAgICBjb25zdCBzYW5pdGl6ZWRDYXRlZ29yeSA9IHNhbml0aXplSW5wdXQoY2F0ZWdvcnksIDUwKTtcbiAgICBjb25zdCB0ZW1wbGF0ZXMgPSBhd2FpdCB0aGlzLmxpc3QoKTtcbiAgICByZXR1cm4gdGVtcGxhdGVzLmZpbHRlcih0ID0+IHQubWV0YWRhdGEuY2F0ZWdvcnkgPT09IHNhbml0aXplZENhdGVnb3J5KTtcbiAgfVxuXG4gIGFzeW5jIGZpbmRCeVRhZyh0YWc6IHN0cmluZyk6IFByb21pc2U8VGVtcGxhdGVbXT4ge1xuICAgIGNvbnN0IHNhbml0aXplZFRhZyA9IHNhbml0aXplSW5wdXQodGFnLCA1MCk7XG4gICAgY29uc3QgdGVtcGxhdGVzID0gYXdhaXQgdGhpcy5saXN0KCk7XG4gICAgcmV0dXJuIHRlbXBsYXRlcy5maWx0ZXIodCA9PiB0Lm1ldGFkYXRhLnRhZ3M/LmluY2x1ZGVzKHNhbml0aXplZFRhZykpO1xuICB9XG5cbiAgYXN5bmMgZ2V0TW9zdFVzZWQobGltaXQ6IG51bWJlciA9IDEwKTogUHJvbWlzZTxUZW1wbGF0ZVtdPiB7XG4gICAgY29uc3QgTUlOX0xJTUlUID0gMTtcbiAgICBjb25zdCBNQVhfTElNSVQgPSAxMDA7XG4gICAgY29uc3QgdmFsaWRhdGVkTGltaXQgPSBNYXRoLm1heChNSU5fTElNSVQsIE1hdGgubWluKE1BWF9MSU1JVCwgTWF0aC5mbG9vcihsaW1pdCkpKTtcblxuICAgIGlmIChsaW1pdCAhPT0gdmFsaWRhdGVkTGltaXQpIHtcbiAgICAgIGxvZ2dlci53YXJuKGBnZXRNb3N0VXNlZDogbGltaXQgJHtsaW1pdH0gYWRqdXN0ZWQgdG8gJHt2YWxpZGF0ZWRMaW1pdH0gKHZhbGlkIHJhbmdlOiAke01JTl9MSU1JVH0tJHtNQVhfTElNSVR9KWApO1xuICAgIH1cblxuICAgIGNvbnN0IHRlbXBsYXRlcyA9IGF3YWl0IHRoaXMubGlzdCgpO1xuICAgIHJldHVybiB0ZW1wbGF0ZXNcbiAgICAgIC5zb3J0KChhLCBiKSA9PiAoYi5tZXRhZGF0YS51c2FnZV9jb3VudCB8fCAwKSAtIChhLm1ldGFkYXRhLnVzYWdlX2NvdW50IHx8IDApKVxuICAgICAgLnNsaWNlKDAsIHZhbGlkYXRlZExpbWl0KTtcbiAgfVxuXG4gIG92ZXJyaWRlIGdldEZpbGVFeHRlbnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJy5tZCc7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgcGFyc2VNZXRhZGF0YShkYXRhOiBhbnkpOiBQcm9taXNlPFRlbXBsYXRlTWV0YWRhdGE+IHtcbiAgICBjb25zdCBzYW5pdGl6ZWQgPSBhd2FpdCB0aGlzLnNhbml0aXplTWV0YWRhdGEoZGF0YSk7XG4gICAgLy8gVXNlIFRlbXBsYXRlIGNvbnN0cnVjdG9yIHRvIGVuc3VyZSByZXF1aXJlZCBmaWVsZHMgYXJlIHBvcHVsYXRlZFxuICAgIGNvbnN0IHRlbXBUZW1wbGF0ZSA9IG5ldyBUZW1wbGF0ZShzYW5pdGl6ZWQsICcnLCB0aGlzLm1ldGFkYXRhU2VydmljZSk7XG4gICAgcmV0dXJuIHRlbXBUZW1wbGF0ZS5tZXRhZGF0YTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBjcmVhdGVFbGVtZW50KG1ldGFkYXRhOiBUZW1wbGF0ZU1ldGFkYXRhLCBib2R5Q29udGVudDogc3RyaW5nKTogVGVtcGxhdGUge1xuICAgIC8vIEZpeCAjOTEyOiBQcmVmZXIgZXhwbGljaXQgZm9ybWF0X3ZlcnNpb24gbWFya2VyLCBmYWxsIGJhY2sgdG8gaW5zdHJ1Y3Rpb25zLXByZXNlbmNlIGNoZWNrXG4gICAgY29uc3QgbWV0YWRhdGFJbnN0cnVjdGlvbnMgPSBtZXRhZGF0YS5pbnN0cnVjdGlvbnM7XG4gICAgZGVsZXRlIChtZXRhZGF0YSBhcyBhbnkpLmZvcm1hdF92ZXJzaW9uOyAgLy8gU3RyaXAgbWFya2VyIGZyb20gcnVudGltZSBtZXRhZGF0YVxuICAgIGNvbnN0IHRlbXBsYXRlID0gbmV3IFRlbXBsYXRlKG1ldGFkYXRhLCBib2R5Q29udGVudCwgdGhpcy5tZXRhZGF0YVNlcnZpY2UpO1xuICAgIGlmIChtZXRhZGF0YUluc3RydWN0aW9ucykge1xuICAgICAgdGVtcGxhdGUuaW5zdHJ1Y3Rpb25zID0gbWV0YWRhdGFJbnN0cnVjdGlvbnM7XG4gICAgICBkZWxldGUgbWV0YWRhdGEuaW5zdHJ1Y3Rpb25zO1xuICAgIH1cbiAgICByZXR1cm4gdGVtcGxhdGU7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRGVmYXVsdEJvZHkodGVtcGxhdGU6IFRlbXBsYXRlKTogc3RyaW5nIHtcbiAgICBjb25zdCBuYW1lID0gKHRlbXBsYXRlLm1ldGFkYXRhLm5hbWUgPz8gJycpLnRyaW0oKTtcbiAgICBjb25zdCBkZXNjcmlwdGlvbiA9ICh0ZW1wbGF0ZS5tZXRhZGF0YS5kZXNjcmlwdGlvbiA/PyAnJykudHJpbSgpO1xuICAgIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmIChuYW1lKSB7XG4gICAgICBsaW5lcy5wdXNoKGAjICR7bmFtZX1gKTtcbiAgICAgIGxpbmVzLnB1c2goJycpO1xuICAgIH1cbiAgICBpZiAoZGVzY3JpcHRpb24pIHtcbiAgICAgIGxpbmVzLnB1c2goZGVzY3JpcHRpb24pO1xuICAgICAgbGluZXMucHVzaCgnJyk7XG4gICAgfVxuICAgIC8vIFNlY3Rpb24gZm9ybWF0OiA8dGVtcGxhdGU+IGZvciBIYW5kbGViYXJzIGNvbnRlbnQsIDxzdHlsZT4vPHNjcmlwdD4gZm9yIHJhdyBwYXNzdGhyb3VnaC5cbiAgICAvLyBBdXRvLWRldGVjdGlvbiAoaXNzdWUgIzcwNSk6IHNlY3Rpb24gbW9kZSBhY3RpdmF0ZXMgd2hlbiBib2R5IGhhcyBhIDx0ZW1wbGF0ZT4gcm9vdCBlbGVtZW50LlxuICAgIGxpbmVzLnB1c2goJzx0ZW1wbGF0ZT4nKTtcbiAgICBsaW5lcy5wdXNoKCc8IS0tIEhUTUwgY29udGVudCB3aXRoIHt7dmFyaWFibGV9fSBzdWJzdGl0dXRpb24gLS0+Jyk7XG4gICAgbGluZXMucHVzaCgnPC90ZW1wbGF0ZT4nKTtcbiAgICBsaW5lcy5wdXNoKCcnKTtcbiAgICBsaW5lcy5wdXNoKCc8c3R5bGU+Jyk7XG4gICAgbGluZXMucHVzaCgnLyogQ1NTIHN0eWxlcyAofX0gaXMgc2FmZSBoZXJlIOKAlCBub3QgSGFuZGxlYmFycyBwcm9jZXNzZWQpICovJyk7XG4gICAgbGluZXMucHVzaCgnPC9zdHlsZT4nKTtcbiAgICBsaW5lcy5wdXNoKCcnKTtcbiAgICBsaW5lcy5wdXNoKCc8c2NyaXB0PicpO1xuICAgIGxpbmVzLnB1c2goJy8vIEphdmFTY3JpcHQgKH19IGlzIHNhZmUgaGVyZSDigJQgbm90IEhhbmRsZWJhcnMgcHJvY2Vzc2VkKScpO1xuICAgIGxpbmVzLnB1c2goJzwvc2NyaXB0PicpO1xuICAgIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBzZXJpYWxpemVFbGVtZW50KHRlbXBsYXRlOiBUZW1wbGF0ZSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgLy8gdjIuMCBmb3JtYXQ6IGFkZCBpbnN0cnVjdGlvbnMgdG8gWUFNTCBmcm9udG1hdHRlciBpZiBwcmVzZW50XG4gICAgY29uc3QgbWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7IC4uLnRlbXBsYXRlLm1ldGFkYXRhIH07XG4gICAgLy8gSXNzdWUgIzc1NTogU2VyaWFsaXplIHR5cGUgYXMgc2luZ3VsYXIgYW5kIHBlcnNpc3QgdW5pcXVlX2lkXG4gICAgbWV0YWRhdGEudHlwZSA9IHRvU2luZ3VsYXJMYWJlbChFbGVtZW50VHlwZS5URU1QTEFURSk7XG4gICAgbWV0YWRhdGEudW5pcXVlX2lkID0gdGVtcGxhdGUuaWQ7XG4gICAgLy8gRml4ICM5MTI6IEV4cGxpY2l0IGZvcm1hdCBtYXJrZXJcbiAgICBtZXRhZGF0YS5mb3JtYXRfdmVyc2lvbiA9ICd2Mic7XG4gICAgaWYgKHRlbXBsYXRlLmluc3RydWN0aW9ucykge1xuICAgICAgbWV0YWRhdGEuaW5zdHJ1Y3Rpb25zID0gdGVtcGxhdGUuaW5zdHJ1Y3Rpb25zO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zZXJpYWxpemF0aW9uU2VydmljZS5jcmVhdGVGcm9udG1hdHRlcihcbiAgICAgIG1ldGFkYXRhLFxuICAgICAgdGVtcGxhdGUuY29udGVudCB8fCB0aGlzLmJ1aWxkRGVmYXVsdEJvZHkodGVtcGxhdGUpLFxuICAgICAge1xuICAgICAgICBtZXRob2Q6ICdtYW51YWwnLFxuICAgICAgICBzY2hlbWE6ICdqc29uJywgIC8vIEZpeCAjOTE0OiBzdGFuZGFyZGl6ZSBvbiBKU09OIHNjaGVtYSBhY3Jvc3MgYWxsIG1hbmFnZXJzXG4gICAgICAgIGNsZWFuTWV0YWRhdGE6IHRydWUsXG4gICAgICAgIGNsZWFuaW5nU3RyYXRlZ3k6ICdyZW1vdmUtYm90aCcsICAvLyBGaXggIzkxMzogc3RhbmRhcmRpemUgYWNyb3NzIGFsbCBtYW5hZ2Vyc1xuICAgICAgICBzb3J0S2V5czogdHJ1ZSxcbiAgICAgICAgbGluZVdpZHRoOiA4MCxcbiAgICAgICAgc2tpcEludmFsaWQ6IHRydWVcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzYW5pdGl6ZU1ldGFkYXRhKGRhdGE6IGFueSk6IFByb21pc2U8UGFydGlhbDxUZW1wbGF0ZU1ldGFkYXRhPj4ge1xuICAgIGNvbnN0IG1ldGFkYXRhOiBQYXJ0aWFsPFRlbXBsYXRlTWV0YWRhdGE+ID0ge307XG5cbiAgICBpZiAoZGF0YS5uYW1lKSB7XG4gICAgICBtZXRhZGF0YS5uYW1lID0gc2FuaXRpemVJbnB1dChVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShkYXRhLm5hbWUpLm5vcm1hbGl6ZWRDb250ZW50LCAxMDApO1xuICAgIH1cblxuICAgIGlmIChkYXRhLmRlc2NyaXB0aW9uKSB7XG4gICAgICBtZXRhZGF0YS5kZXNjcmlwdGlvbiA9IHNhbml0aXplSW5wdXQoVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUoZGF0YS5kZXNjcmlwdGlvbikubm9ybWFsaXplZENvbnRlbnQsIDUwMCk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEuY2F0ZWdvcnkpIHtcbiAgICAgIC8vIFNFQ1VSSVRZIEZJWDogVXNlIFZhbGlkYXRpb25TZXJ2aWNlIGZvciBjYXRlZ29yeSB2YWxpZGF0aW9uXG4gICAgICBjb25zdCBjYXRlZ29yeVJlc3VsdCA9IHRoaXMudmFsaWRhdGlvblNlcnZpY2UudmFsaWRhdGVDYXRlZ29yeShkYXRhLmNhdGVnb3J5KTtcbiAgICAgIGlmIChjYXRlZ29yeVJlc3VsdC5pc1ZhbGlkICYmIGNhdGVnb3J5UmVzdWx0LnNhbml0aXplZFZhbHVlKSB7XG4gICAgICAgIG1ldGFkYXRhLmNhdGVnb3J5ID0gY2F0ZWdvcnlSZXN1bHQuc2FuaXRpemVkVmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRhdGEub3V0cHV0X2Zvcm1hdCkge1xuICAgICAgbWV0YWRhdGEub3V0cHV0X2Zvcm1hdCA9IHNhbml0aXplSW5wdXQoZGF0YS5vdXRwdXRfZm9ybWF0LCAyMCk7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YS50YWdzKSkge1xuICAgICAgbWV0YWRhdGEudGFncyA9IGRhdGEudGFncy5tYXAoKHRhZzogYW55KSA9PiBzYW5pdGl6ZUlucHV0KFN0cmluZyh0YWcpLCA1MCkpO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEuaW5jbHVkZXMpKSB7XG4gICAgICBtZXRhZGF0YS5pbmNsdWRlcyA9IGRhdGEuaW5jbHVkZXMubWFwKChpbmM6IGFueSkgPT4gc2FuaXRpemVJbnB1dChTdHJpbmcoaW5jKSwgMjAwKSk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEudHJpZ2dlcnMgJiYgQXJyYXkuaXNBcnJheShkYXRhLnRyaWdnZXJzKSkge1xuICAgICAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IHRoaXMudHJpZ2dlclZhbGlkYXRpb25TZXJ2aWNlLnZhbGlkYXRlVHJpZ2dlcnMoXG4gICAgICAgIGRhdGEudHJpZ2dlcnMsXG4gICAgICAgIEVsZW1lbnRUeXBlLlRFTVBMQVRFLFxuICAgICAgICBtZXRhZGF0YS5uYW1lIHx8ICd1bmtub3duJ1xuICAgICAgKTtcbiAgICAgIG1ldGFkYXRhLnRyaWdnZXJzID0gdmFsaWRhdGlvblJlc3VsdC52YWxpZFRyaWdnZXJzO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZGF0YS51c2FnZV9jb3VudCA9PT0gJ251bWJlcicpIHtcbiAgICAgIG1ldGFkYXRhLnVzYWdlX2NvdW50ID0gTWF0aC5tYXgoMCwgTWF0aC5mbG9vcihkYXRhLnVzYWdlX2NvdW50KSk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEubGFzdF91c2VkKSB7XG4gICAgICBtZXRhZGF0YS5sYXN0X3VzZWQgPSBzYW5pdGl6ZUlucHV0KFN0cmluZyhkYXRhLmxhc3RfdXNlZCksIDUwKTtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhLnZhcmlhYmxlcykpIHtcbiAgICAgIG1ldGFkYXRhLnZhcmlhYmxlcyA9IGRhdGEudmFyaWFibGVzLm1hcCgodjogYW55KSA9PiAoe1xuICAgICAgICBuYW1lOiBzYW5pdGl6ZUlucHV0KHYubmFtZSB8fCAnJywgNTApLFxuICAgICAgICB0eXBlOiBzYW5pdGl6ZUlucHV0KHYudHlwZSB8fCAnc3RyaW5nJywgMjApLFxuICAgICAgICBkZXNjcmlwdGlvbjogdi5kZXNjcmlwdGlvbiA/IHNhbml0aXplSW5wdXQodi5kZXNjcmlwdGlvbiwgMjAwKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgcmVxdWlyZWQ6IEJvb2xlYW4odi5yZXF1aXJlZCksXG4gICAgICAgIGRlZmF1bHQ6IHYuZGVmYXVsdCxcbiAgICAgICAgdmFsaWRhdGlvbjogdi52YWxpZGF0aW9uID8gc2FuaXRpemVJbnB1dCh2LnZhbGlkYXRpb24sIDIwMCkgOiB1bmRlZmluZWQsXG4gICAgICAgIG9wdGlvbnM6IEFycmF5LmlzQXJyYXkodi5vcHRpb25zKSA/IHYub3B0aW9ucy5tYXAoKG86IGFueSkgPT4gc2FuaXRpemVJbnB1dChTdHJpbmcobyksIDEwMCkpIDogdW5kZWZpbmVkLFxuICAgICAgICBmb3JtYXQ6IHYuZm9ybWF0ID8gc2FuaXRpemVJbnB1dCh2LmZvcm1hdCwgNTApIDogdW5kZWZpbmVkXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YS5leGFtcGxlcykpIHtcbiAgICAgIG1ldGFkYXRhLmV4YW1wbGVzID0gZGF0YS5leGFtcGxlcy5tYXAoKGV4OiBhbnkpID0+ICh7XG4gICAgICAgIHRpdGxlOiBzYW5pdGl6ZUlucHV0KGV4LnRpdGxlIHx8ICcnLCAxMDApLFxuICAgICAgICBkZXNjcmlwdGlvbjogZXguZGVzY3JpcHRpb24gPyBzYW5pdGl6ZUlucHV0KGV4LmRlc2NyaXB0aW9uLCA1MDApIDogdW5kZWZpbmVkLFxuICAgICAgICB2YXJpYWJsZXM6IGV4LnZhcmlhYmxlcyB8fCB7fSxcbiAgICAgICAgb3V0cHV0OiBleC5vdXRwdXQgPyBzYW5pdGl6ZUlucHV0KGV4Lm91dHB1dCwgNTAwMCkgOiB1bmRlZmluZWRcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBtZXRhZGF0YS5hdXRob3IgPSBkYXRhLmF1dGhvciA/IHNhbml0aXplSW5wdXQoZGF0YS5hdXRob3IsIDEwMCkgOiB1bmRlZmluZWQ7XG4gICAgbWV0YWRhdGEudmVyc2lvbiA9IGRhdGEudmVyc2lvbiA/IHNhbml0aXplSW5wdXQoZGF0YS52ZXJzaW9uLCAyMCkgOiB1bmRlZmluZWQ7XG5cbiAgICAvLyBJc3N1ZSAjNTI0IOKAlCBHYXRla2VlcGVyIHBvbGljeSAoYWxsIGVsZW1lbnQgdHlwZXMpXG4gICAgbWV0YWRhdGEuZ2F0ZWtlZXBlciA9IHNhbml0aXplR2F0ZWtlZXBlclBvbGljeShkYXRhLmdhdGVrZWVwZXIsIG1ldGFkYXRhLm5hbWUgfHwgJ3Vua25vd24nLCAndGVtcGxhdGUnKTtcblxuICAgIG1ldGFkYXRhLm5hbWUgPSBtZXRhZGF0YS5uYW1lID8/ICdVbnRpdGxlZCBUZW1wbGF0ZSc7XG4gICAgbWV0YWRhdGEuZGVzY3JpcHRpb24gPSBtZXRhZGF0YS5kZXNjcmlwdGlvbiA/PyAnJztcblxuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfVxufVxuIl19
354
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGVtcGxhdGVNYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL3RlbXBsYXRlcy9UZW1wbGF0ZU1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFFN0IsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBRWpGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsUUFBUSxFQUFvQixNQUFNLGVBQWUsQ0FBQztBQVMzRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUM5RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFOUQsTUFBTSxPQUFPLGVBQWdCLFNBQVEsa0JBQTRCO0lBV3JEO0lBVkYsd0JBQXdCLENBQTJCO0lBQ25ELGlCQUFpQixDQUFvQjtJQUNyQyxvQkFBb0IsQ0FBdUI7SUFFbkQsWUFDRSxnQkFBa0MsRUFDbEMsZUFBZ0MsRUFDaEMscUJBQTRDLEVBQzVDLGtCQUFzQyxFQUN0QyxvQkFBMEMsRUFDbEMsZUFBZ0MsRUFDeEMsZ0JBQW1DLEVBQ25DLFlBQTJFLEVBQzNFLGFBQXVFO1FBRXZFLEtBQUssQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxF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QWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDNUUsUUFBUSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBRTlFLHFEQUFxRDtRQUNyRCxRQUFRLENBQUMsVUFBVSxHQUFHLHdCQUF3QixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLElBQUksSUFBSSxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFeEcsUUFBUSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxJQUFJLG1CQUFtQixDQUFDO1FBQ3JELFFBQVEsQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7UUFFbEQsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUZW1wbGF0ZU1hbmFnZXIgLSBSZWZhY3RvcmVkIHRvIGV4dGVuZCBCYXNlRWxlbWVudE1hbmFnZXIsIGtlZXBpbmdcbiAqIHRlbXBsYXRlLXNwZWNpZmljIHZhbGlkYXRpb24sIGltcG9ydC9leHBvcnQgbG9naWMsIGFuZCBhbmFseXRpY3MgaGVscGVycy5cbiAqL1xuXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQgeyBFbGVtZW50VHlwZSB9IGZyb20gJy4uLy4uL3BvcnRmb2xpby90eXBlcy5qcyc7XG5pbXBvcnQgeyB0b1Npbmd1bGFyTGFiZWwgfSBmcm9tICcuLi8uLi91dGlscy9lbGVtZW50VHlwZU5vcm1hbGl6YXRpb24uanMnO1xuaW1wb3J0IHsgU2VjdXJpdHlNb25pdG9yIH0gZnJvbSAnLi4vLi4vc2VjdXJpdHkvc2VjdXJpdHlNb25pdG9yLmpzJztcbmltcG9ydCB7IHNhbml0aXplSW5wdXQgfSBmcm9tICcuLi8uLi9zZWN1cml0eS9JbnB1dFZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBVbmljb2RlVmFsaWRhdG9yIH0gZnJvbSAnLi4vLi4vc2VjdXJpdHkvdmFsaWRhdG9ycy91bmljb2RlVmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IEZpbGVMb2NrTWFuYWdlciB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L2ZpbGVMb2NrTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgQmFzZUVsZW1lbnRNYW5hZ2VyIH0gZnJvbSAnLi4vYmFzZS9CYXNlRWxlbWVudE1hbmFnZXIuanMnO1xuaW1wb3J0IHsgVGVtcGxhdGUsIFRlbXBsYXRlTWV0YWRhdGEgfSBmcm9tICcuL1RlbXBsYXRlLmpzJztcbmltcG9ydCB7IFBvcnRmb2xpb01hbmFnZXIgfSBmcm9tICcuLi8uLi9wb3J0Zm9saW8vUG9ydGZvbGlvTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uUmVnaXN0cnkgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy92YWxpZGF0aW9uL1ZhbGlkYXRpb25SZWdpc3RyeS5qcyc7XG5pbXBvcnQgeyBUcmlnZ2VyVmFsaWRhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy92YWxpZGF0aW9uL1RyaWdnZXJWYWxpZGF0aW9uU2VydmljZS5qcyc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ZhbGlkYXRpb24vVmFsaWRhdGlvblNlcnZpY2UuanMnO1xuaW1wb3J0IHsgU2VyaWFsaXphdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9TZXJpYWxpemF0aW9uU2VydmljZS5qcyc7XG5pbXBvcnQgeyBNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9NZXRhZGF0YVNlcnZpY2UuanMnO1xuaW1wb3J0IHsgRmlsZU9wZXJhdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvRmlsZU9wZXJhdGlvbnNTZXJ2aWNlLmpzJztcbmltcG9ydCB7IEZpbGVXYXRjaFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9GaWxlV2F0Y2hTZXJ2aWNlLmpzJztcbmltcG9ydCB7IHNhbml0aXplR2F0ZWtlZXBlclBvbGljeSB9IGZyb20gJy4uLy4uL2hhbmRsZXJzL21jcC1hcWwvcG9saWNpZXMvRWxlbWVudFBvbGljaWVzLmpzJztcbmltcG9ydCB7IFNFQ1VSSVRZX0xJTUlUUyB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L2NvbnN0YW50cy5qcyc7XG5cbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZU1hbmFnZXIgZXh0ZW5kcyBCYXNlRWxlbWVudE1hbmFnZXI8VGVtcGxhdGU+IHtcbiAgcHJpdmF0ZSB0cmlnZ2VyVmFsaWRhdGlvblNlcnZpY2U6IFRyaWdnZXJWYWxpZGF0aW9uU2VydmljZTtcbiAgcHJpdmF0ZSB2YWxpZGF0aW9uU2VydmljZTogVmFsaWRhdGlvblNlcnZpY2U7XG4gIHByaXZhdGUgc2VyaWFsaXphdGlvblNlcnZpY2U6IFNlcmlhbGl6YXRpb25TZXJ2aWNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHBvcnRmb2xpb01hbmFnZXI6IFBvcnRmb2xpb01hbmFnZXIsXG4gICAgZmlsZUxvY2tNYW5hZ2VyOiBGaWxlTG9ja01hbmFnZXIsXG4gICAgZmlsZU9wZXJhdGlvbnNTZXJ2aWNlOiBGaWxlT3BlcmF0aW9uc1NlcnZpY2UsXG4gICAgdmFsaWRhdGlvblJlZ2lzdHJ5OiBWYWxpZGF0aW9uUmVnaXN0cnksXG4gICAgc2VyaWFsaXphdGlvblNlcnZpY2U6IFNlcmlhbGl6YXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgbWV0YWRhdGFTZXJ2aWNlOiBNZXRhZGF0YVNlcnZpY2UsXG4gICAgZmlsZVdhdGNoU2VydmljZT86IEZpbGVXYXRjaFNlcnZpY2UsXG4gICAgbWVtb3J5QnVkZ2V0PzogaW1wb3J0KCcuLi8uLi9jYWNoZS9DYWNoZU1lbW9yeUJ1ZGdldC5qcycpLkNhY2hlTWVtb3J5QnVkZ2V0LFxuICAgIGJhY2t1cFNlcnZpY2U/OiBpbXBvcnQoJy4uLy4uL3NlcnZpY2VzL0JhY2t1cFNlcnZpY2UuanMnKS5CYWNrdXBTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKEVsZW1lbnRUeXBlLlRFTVBMQVRFLCBwb3J0Zm9saW9NYW5hZ2VyLCBmaWxlTG9ja01hbmFnZXIsIHsgZmlsZVdhdGNoU2VydmljZSwgbWVtb3J5QnVkZ2V0LCBiYWNrdXBTZXJ2aWNlIH0sIGZpbGVPcGVyYXRpb25zU2VydmljZSwgdmFsaWRhdGlvblJlZ2lzdHJ5KTtcbiAgICB0aGlzLnRyaWdnZXJWYWxpZGF0aW9uU2VydmljZSA9IHZhbGlkYXRpb25SZWdpc3RyeS5nZXRUcmlnZ2VyVmFsaWRhdGlvblNlcnZpY2UoKTtcbiAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlID0gdmFsaWRhdGlvblJlZ2lzdHJ5LmdldFZhbGlkYXRpb25TZXJ2aWNlKCk7XG4gICAgdGhpcy5zZXJpYWxpemF0aW9uU2VydmljZSA9IHNlcmlhbGl6YXRpb25TZXJ2aWNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGdldEVsZW1lbnRMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiAndGVtcGxhdGUnO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgbG9hZChmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTxUZW1wbGF0ZT4ge1xuICAgIGNvbnN0IHRlbXBsYXRlID0gYXdhaXQgc3VwZXIubG9hZChmaWxlUGF0aCk7XG5cbiAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICB0eXBlOiAnVEVNUExBVEVfTE9BREVEJyxcbiAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgIHNvdXJjZTogJ1RlbXBsYXRlTWFuYWdlci5sb2FkJyxcbiAgICAgIGRldGFpbHM6IGBUZW1wbGF0ZSBsb2FkZWQ6ICR7dGVtcGxhdGUubWV0YWRhdGEubmFtZX0gZnJvbSAke3BhdGguYmFzZW5hbWUoZmlsZVBhdGgpfWBcbiAgICB9KTtcblxuICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIHNhdmUodGVtcGxhdGU6IFRlbXBsYXRlLCBmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gQXV0by1kZXJpdmUgdmFyaWFibGVzIGZyb20gY29udGVudCAoIzE4OTYpOiBlbnN1cmVzIGV2ZXJ5IHt7cGxhY2Vob2xkZXJ9fVxuICAgIC8vIGhhcyBhIG1hdGNoaW5nIHNjaGVtYSBlbnRyeSBzbyByZW5kZXIoKSBuZXZlciBzaWxlbnRseSByZXR1cm5zIHVuZmlsbGVkIHRleHQuXG4gICAgLy8gRXhpc3RpbmcgZW50cmllcyBhcmUgbmV2ZXIgb3ZlcndyaXR0ZW4g4oCUIHVzZXItc2V0IGRlc2NyaXB0aW9ucywgdHlwZXMsIGFuZFxuICAgIC8vIHJlcXVpcmVkIGZsYWdzIHN1cnZpdmUuIE5ldyBlbnRyaWVzIGRlZmF1bHQgdG8gdHlwZTogJ3N0cmluZycsIHJlcXVpcmVkOiBmYWxzZS5cbiAgICBpZiAodGVtcGxhdGUuY29udGVudCkge1xuICAgICAgdGVtcGxhdGUubWV0YWRhdGEudmFyaWFibGVzID0gVGVtcGxhdGUuZGVyaXZlVmFyaWFibGVzRnJvbUNvbnRlbnQoXG4gICAgICAgIHRlbXBsYXRlLmNvbnRlbnQsXG4gICAgICAgIHRlbXBsYXRlLm1ldGFkYXRhLnZhcmlhYmxlcyA/PyBbXVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBhd2FpdCBzdXBlci5zYXZlKHRlbXBsYXRlLCBmaWxlUGF0aCk7XG5cbiAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICB0eXBlOiAnVEVNUExBVEVfU0FWRUQnLFxuICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgc291cmNlOiAnVGVtcGxhdGVNYW5hZ2VyLnNhdmUnLFxuICAgICAgZGV0YWlsczogYFRlbXBsYXRlIHNhdmVkOiAke3RlbXBsYXRlLm1ldGFkYXRhLm5hbWV9IHRvICR7cGF0aC5iYXNlbmFtZShmaWxlUGF0aCl9YFxuICAgIH0pO1xuXG4gICAgbG9nZ2VyLmluZm8oYFRlbXBsYXRlIHNhdmVkOiAke3RlbXBsYXRlLm1ldGFkYXRhLm5hbWV9YCk7XG4gIH1cblxuICBvdmVycmlkZSBhc3luYyBkZWxldGUoZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHN1cGVyLmRlbGV0ZShmaWxlUGF0aCk7XG5cbiAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICB0eXBlOiAnVEVNUExBVEVfREVMRVRFRCcsXG4gICAgICBzZXZlcml0eTogJ01FRElVTScsXG4gICAgICBzb3VyY2U6ICdUZW1wbGF0ZU1hbmFnZXIuZGVsZXRlJyxcbiAgICAgIGRldGFpbHM6IGBUZW1wbGF0ZSBkZWxldGVkOiAke3BhdGguYmFzZW5hbWUoZmlsZVBhdGgpfWBcbiAgICB9KTtcblxuICAgIGxvZ2dlci5pbmZvKGBUZW1wbGF0ZSBkZWxldGVkOiAke3BhdGguYmFzZW5hbWUoZmlsZVBhdGgpfWApO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlKGRhdGE6IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgICBjb250ZW50Pzogc3RyaW5nO1xuICAgIGluc3RydWN0aW9ucz86IHN0cmluZztcbiAgICBtZXRhZGF0YT86IFBhcnRpYWw8VGVtcGxhdGVNZXRhZGF0YT47XG4gIH0pOiBQcm9taXNlPFRlbXBsYXRlPiB7XG4gICAgLy8gVXNlIHNwZWNpYWxpemVkIHZhbGlkYXRvciBmb3IgaW5wdXQgdmFsaWRhdGlvblxuICAgIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSBhd2FpdCB0aGlzLnZhbGlkYXRvci52YWxpZGF0ZUNyZWF0ZSh7XG4gICAgICBuYW1lOiBkYXRhLm5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogZGF0YS5kZXNjcmlwdGlvbixcbiAgICAgIGNvbnRlbnQ6IGRhdGEuY29udGVudFxuICAgIH0pO1xuXG4gICAgaWYgKCF2YWxpZGF0aW9uUmVzdWx0LmlzVmFsaWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVmFsaWRhdGlvbiBmYWlsZWQ6ICR7dmFsaWRhdGlvblJlc3VsdC5lcnJvcnMuam9pbignLCAnKX1gKTtcbiAgICB9XG5cbiAgICAvLyBMb2cgd2FybmluZ3MgaWYgYW55XG4gICAgaWYgKHZhbGlkYXRpb25SZXN1bHQud2FybmluZ3MgJiYgdmFsaWRhdGlvblJlc3VsdC53YXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICBsb2dnZXIud2FybihgVGVtcGxhdGUgY3JlYXRpb24gd2FybmluZ3M6ICR7dmFsaWRhdGlvblJlc3VsdC53YXJuaW5ncy5qb2luKCcsICcpfWApO1xuICAgIH1cblxuICAgIC8vIEdldCBzYW5pdGl6ZWQgbmFtZSBmb3IgZmlsZSBvcGVyYXRpb25zICh2YWxpZGF0b3IgYWxyZWFkeSB2YWxpZGF0ZWQpXG4gICAgY29uc3QgbmFtZUlucHV0ID0gZGF0YS5uYW1lIHx8ICduZXctdGVtcGxhdGUnO1xuICAgIGNvbnN0IG5hbWVSZXN1bHQgPSB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLnZhbGlkYXRlQW5kU2FuaXRpemVJbnB1dChuYW1lSW5wdXQsIHtcbiAgICAgIG1heExlbmd0aDogU0VDVVJJVFlfTElNSVRTLk1BWF9OQU1FX0xFTkdUSCxcbiAgICAgIGFsbG93U3BhY2VzOiB0cnVlXG4gICAgfSk7XG4gICAgY29uc3Qgc2FuaXRpemVkTmFtZSA9IG5hbWVSZXN1bHQuc2FuaXRpemVkVmFsdWUhO1xuXG4gICAgLy8gVXNlIGluaGVyaXRlZCBnZXRFbGVtZW50RmlsZW5hbWUoKSBmb3IgY29uc2lzdGVudCBmaWxlbmFtZSBub3JtYWxpemF0aW9uXG4gICAgY29uc3QgZmlsZW5hbWUgPSB0aGlzLmdldEVsZW1lbnRGaWxlbmFtZShzYW5pdGl6ZWROYW1lKTtcblxuICAgIC8vIEZJWDogSXNzdWUgIzIwIC0gQ2hlY2sgZm9yIGR1cGxpY2F0ZSBiZWZvcmUgY3JlYXRpbmdcbiAgICBjb25zdCBleGlzdGluZ1RlbXBsYXRlcyA9IGF3YWl0IHRoaXMubGlzdCgpO1xuICAgIGNvbnN0IGR1cGxpY2F0ZSA9IGV4aXN0aW5nVGVtcGxhdGVzLmZpbmQodCA9PlxuICAgICAgdC5tZXRhZGF0YS5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IHNhbml0aXplZE5hbWUudG9Mb3dlckNhc2UoKVxuICAgICk7XG5cbiAgICBpZiAoZHVwbGljYXRlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEEgdGVtcGxhdGUgbmFtZWQgXCIke3Nhbml0aXplZE5hbWV9XCIgYWxyZWFkeSBleGlzdHNgKTtcbiAgICB9XG5cbiAgICBjb25zdCB0ZW1wbGF0ZSA9IG5ldyBUZW1wbGF0ZShcbiAgICAgIHtcbiAgICAgICAgLi4uZGF0YS5tZXRhZGF0YSxcbiAgICAgICAgbmFtZTogc2FuaXRpemVkTmFtZSxcbiAgICAgICAgZGVzY3JpcHRpb246IGRhdGEuZGVzY3JpcHRpb24gfHwgJydcbiAgICAgIH0sXG4gICAgICBkYXRhLmNvbnRlbnQgfHwgJycsXG4gICAgICB0aGlzLm1ldGFkYXRhU2VydmljZVxuICAgICk7XG4gICAgLy8gU2V0IGluc3RydWN0aW9ucyAocmVuZGVyaW5nIGRpcmVjdGl2ZXMpIGlmIHByb3ZpZGVkXG4gICAgaWYgKGRhdGEuaW5zdHJ1Y3Rpb25zKSB7XG4gICAgICB0ZW1wbGF0ZS5pbnN0cnVjdGlvbnMgPSBkYXRhLmluc3RydWN0aW9ucztcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnNhdmUodGVtcGxhdGUsIGZpbGVuYW1lKTtcbiAgICAvLyBOb3RlOiBObyByZWxvYWQoKSBoZXJlIOKAlCBzYXZlKCkgY2FjaGVzIHRoZSBlbGVtZW50IGNvcnJlY3RseS5cbiAgICAvLyBTZWUgSXNzdWUgIzQ5MSBmb3Igd2h5IFBlcnNvbmFNYW5hZ2VyJ3MgcmVsb2FkLWFmdGVyLWNyZWF0ZSB3YXMgcmVtb3ZlZC5cblxuICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgIHR5cGU6ICdFTEVNRU5UX0NSRUFURUQnLFxuICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgc291cmNlOiAnVGVtcGxhdGVNYW5hZ2VyLmNyZWF0ZScsXG4gICAgICBkZXRhaWxzOiBgVGVtcGxhdGUgY3JlYXRlZDogJHt0ZW1wbGF0ZS5tZXRhZGF0YS5uYW1lfWBcbiAgICB9KTtcblxuICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgfVxuXG4gIGFzeW5jIGltcG9ydEVsZW1lbnQoZGF0YTogc3RyaW5nLCBmb3JtYXQ6ICdqc29uJyB8ICd5YW1sJyB8ICdtYXJrZG93bicgPSAnbWFya2Rvd24nKTogUHJvbWlzZTxUZW1wbGF0ZT4ge1xuICAgIHRyeSB7XG4gICAgICBsZXQgbWV0YWRhdGE6IFBhcnRpYWw8VGVtcGxhdGVNZXRhZGF0YT47XG4gICAgICBsZXQgY29udGVudCA9ICcnO1xuXG4gICAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgICBjYXNlICdqc29uJzoge1xuICAgICAgICAgIGNvbnN0IGpzb25EYXRhID0gdGhpcy5zZXJpYWxpemF0aW9uU2VydmljZS5wYXJzZUpzb24oZGF0YSwge1xuICAgICAgICAgICAgc291cmNlOiAnVGVtcGxhdGVNYW5hZ2VyLmltcG9ydEVsZW1lbnQnXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgbWV0YWRhdGEgPSBhd2FpdCB0aGlzLnNhbml0aXplTWV0YWRhdGEoanNvbkRhdGEubWV0YWRhdGEgfHwge30pO1xuICAgICAgICAgIGNvbnRlbnQgPSBqc29uRGF0YS5jb250ZW50IHx8ICcnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSAneWFtbCc6IHtcbiAgICAgICAgICBjb25zdCBwYXJzZWQgPSB0aGlzLnNlcmlhbGl6YXRpb25TZXJ2aWNlLnBhcnNlRnJvbnRtYXR0ZXIoZGF0YSwge1xuICAgICAgICAgICAgbWF4WWFtbFNpemU6IDY0ICogMTAyNCxcbiAgICAgICAgICAgIHZhbGlkYXRlQ29udGVudDogdHJ1ZSxcbiAgICAgICAgICAgIHNvdXJjZTogJ1RlbXBsYXRlTWFuYWdlci5pbXBvcnRFbGVtZW50J1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgbWV0YWRhdGEgPSBhd2FpdCB0aGlzLnNhbml0aXplTWV0YWRhdGEocGFyc2VkLmRhdGEubWV0YWRhdGEgfHwgcGFyc2VkLmRhdGEpO1xuICAgICAgICAgIGNvbnRlbnQgPSBwYXJzZWQuY29udGVudCB8fCAnJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgJ21hcmtkb3duJzoge1xuICAgICAgICAgIGNvbnN0IG1kUGFyc2VkID0gdGhpcy5zZXJpYWxpemF0aW9uU2VydmljZS5wYXJzZUZyb250bWF0dGVyKGRhdGEsIHtcbiAgICAgICAgICAgIG1heFlhbWxTaXplOiA2NCAqIDEwMjQsXG4gICAgICAgICAgICB2YWxpZGF0ZUNvbnRlbnQ6IHRydWUsXG4gICAgICAgICAgICBzb3VyY2U6ICdUZW1wbGF0ZU1hbmFnZXIuaW1wb3J0RWxlbWVudCdcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBtZXRhZGF0YSA9IGF3YWl0IHRoaXMuc2FuaXRpemVNZXRhZGF0YShtZFBhcnNlZC5kYXRhKTtcbiAgICAgICAgICBjb250ZW50ID0gbWRQYXJzZWQuY29udGVudDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBpbXBvcnQgZm9ybWF0OiAke2Zvcm1hdH1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdGVtcGxhdGUgPSBuZXcgVGVtcGxhdGUobWV0YWRhdGEsIGNvbnRlbnQsIHRoaXMubWV0YWRhdGFTZXJ2aWNlKTtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb24gPSB0ZW1wbGF0ZS52YWxpZGF0ZSgpO1xuICAgICAgaWYgKCF2YWxpZGF0aW9uLnZhbGlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0ZW1wbGF0ZTogJHt2YWxpZGF0aW9uLmVycm9ycz8ubWFwKGUgPT4gZS5tZXNzYWdlKS5qb2luKCcsICcpfWApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGVtcGxhdGU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGltcG9ydCB0ZW1wbGF0ZTogJHtlcnJvcn1gKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGV4cG9ydEVsZW1lbnQodGVtcGxhdGU6IFRlbXBsYXRlLCBmb3JtYXQ6ICdqc29uJyB8ICd5YW1sJyB8ICdtYXJrZG93bicgPSAnbWFya2Rvd24nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICB0cnkge1xuICAgICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgICAgY2FzZSAnanNvbic6XG4gICAgICAgICAgcmV0dXJuICh0ZW1wbGF0ZSBhcyBhbnkpLnNlcmlhbGl6ZVRvSlNPTiA/ICh0ZW1wbGF0ZSBhcyBhbnkpLnNlcmlhbGl6ZVRvSlNPTigpIDogdGVtcGxhdGUuc2VyaWFsaXplKCk7XG5cbiAgICAgICAgY2FzZSAneWFtbCc6IHtcbiAgICAgICAgICBjb25zdCB5YW1sRGF0YSA9IHtcbiAgICAgICAgICAgIG1ldGFkYXRhOiB0ZW1wbGF0ZS5tZXRhZGF0YSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IHRlbXBsYXRlLmNvbnRlbnQsXG4gICAgICAgICAgICBpZDogdGVtcGxhdGUuaWQsXG4gICAgICAgICAgICB2ZXJzaW9uOiB0ZW1wbGF0ZS52ZXJzaW9uXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHJldHVybiB0aGlzLnNlcmlhbGl6YXRpb25TZXJ2aWNlLmR1bXBZYW1sKHlhbWxEYXRhLCB7XG4gICAgICAgICAgICBzY2hlbWE6ICdqc29uJywgIC8vIEZpeCAjOTE0OiBzdGFuZGFyZGl6ZSBvbiBKU09OIHNjaGVtYSBhY3Jvc3MgYWxsIG1hbmFnZXJzXG4gICAgICAgICAgICBub1JlZnM6IHRydWUsXG4gICAgICAgICAgICBzb3J0S2V5czogdHJ1ZSxcbiAgICAgICAgICAgIHNraXBJbnZhbGlkOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlICdtYXJrZG93bic6IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5zZXJpYWxpemF0aW9uU2VydmljZS5jcmVhdGVGcm9udG1hdHRlcihcbiAgICAgICAgICAgIHRlbXBsYXRlLm1ldGFkYXRhLFxuICAgICAgICAgICAgdGVtcGxhdGUuY29udGVudCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbWV0aG9kOiAnbWFudWFsJyxcbiAgICAgICAgICAgICAgc2NoZW1hOiAnanNvbicsICAvLyBGaXggIzkxNDogc3RhbmRhcmRpemUgb24gSlNPTiBzY2hlbWEgYWNyb3NzIGFsbCBtYW5hZ2Vyc1xuICAgICAgICAgICAgICBjbGVhbk1ldGFkYXRhOiB0cnVlLFxuICAgICAgICAgICAgICBjbGVhbmluZ1N0cmF0ZWd5OiAncmVtb3ZlLWJvdGgnICAvLyBGaXggIzkxMzogc3RhbmRhcmRpemUgYWNyb3NzIGFsbCBtYW5hZ2Vyc1xuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgZXhwb3J0IGZvcm1hdDogJHtmb3JtYXR9YCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGV4cG9ydCB0ZW1wbGF0ZTogJHtlcnJvcn1gKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZpbmRCeUNhdGVnb3J5KGNhdGVnb3J5OiBzdHJpbmcpOiBQcm9taXNlPFRlbXBsYXRlW10+IHtcbiAgICBjb25zdCBzYW5pdGl6ZWRDYXRlZ29yeSA9IHNhbml0aXplSW5wdXQoY2F0ZWdvcnksIDUwKTtcbiAgICBjb25zdCB0ZW1wbGF0ZXMgPSBhd2FpdCB0aGlzLmxpc3QoKTtcbiAgICByZXR1cm4gdGVtcGxhdGVzLmZpbHRlcih0ID0+IHQubWV0YWRhdGEuY2F0ZWdvcnkgPT09IHNhbml0aXplZENhdGVnb3J5KTtcbiAgfVxuXG4gIGFzeW5jIGZpbmRCeVRhZyh0YWc6IHN0cmluZyk6IFByb21pc2U8VGVtcGxhdGVbXT4ge1xuICAgIGNvbnN0IHNhbml0aXplZFRhZyA9IHNhbml0aXplSW5wdXQodGFnLCA1MCk7XG4gICAgY29uc3QgdGVtcGxhdGVzID0gYXdhaXQgdGhpcy5saXN0KCk7XG4gICAgcmV0dXJuIHRlbXBsYXRlcy5maWx0ZXIodCA9PiB0Lm1ldGFkYXRhLnRhZ3M/LmluY2x1ZGVzKHNhbml0aXplZFRhZykpO1xuICB9XG5cbiAgYXN5bmMgZ2V0TW9zdFVzZWQobGltaXQ6IG51bWJlciA9IDEwKTogUHJvbWlzZTxUZW1wbGF0ZVtdPiB7XG4gICAgY29uc3QgTUlOX0xJTUlUID0gMTtcbiAgICBjb25zdCBNQVhfTElNSVQgPSAxMDA7XG4gICAgY29uc3QgdmFsaWRhdGVkTGltaXQgPSBNYXRoLm1heChNSU5fTElNSVQsIE1hdGgubWluKE1BWF9MSU1JVCwgTWF0aC5mbG9vcihsaW1pdCkpKTtcblxuICAgIGlmIChsaW1pdCAhPT0gdmFsaWRhdGVkTGltaXQpIHtcbiAgICAgIGxvZ2dlci53YXJuKGBnZXRNb3N0VXNlZDogbGltaXQgJHtsaW1pdH0gYWRqdXN0ZWQgdG8gJHt2YWxpZGF0ZWRMaW1pdH0gKHZhbGlkIHJhbmdlOiAke01JTl9MSU1JVH0tJHtNQVhfTElNSVR9KWApO1xuICAgIH1cblxuICAgIGNvbnN0IHRlbXBsYXRlcyA9IGF3YWl0IHRoaXMubGlzdCgpO1xuICAgIHJldHVybiB0ZW1wbGF0ZXNcbiAgICAgIC5zb3J0KChhLCBiKSA9PiAoYi5tZXRhZGF0YS51c2FnZV9jb3VudCB8fCAwKSAtIChhLm1ldGFkYXRhLnVzYWdlX2NvdW50IHx8IDApKVxuICAgICAgLnNsaWNlKDAsIHZhbGlkYXRlZExpbWl0KTtcbiAgfVxuXG4gIG92ZXJyaWRlIGdldEZpbGVFeHRlbnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJy5tZCc7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgcGFyc2VNZXRhZGF0YShkYXRhOiBhbnkpOiBQcm9taXNlPFRlbXBsYXRlTWV0YWRhdGE+IHtcbiAgICBjb25zdCBzYW5pdGl6ZWQgPSBhd2FpdCB0aGlzLnNhbml0aXplTWV0YWRhdGEoZGF0YSk7XG4gICAgLy8gVXNlIFRlbXBsYXRlIGNvbnN0cnVjdG9yIHRvIGVuc3VyZSByZXF1aXJlZCBmaWVsZHMgYXJlIHBvcHVsYXRlZFxuICAgIGNvbnN0IHRlbXBUZW1wbGF0ZSA9IG5ldyBUZW1wbGF0ZShzYW5pdGl6ZWQsICcnLCB0aGlzLm1ldGFkYXRhU2VydmljZSk7XG4gICAgcmV0dXJuIHRlbXBUZW1wbGF0ZS5tZXRhZGF0YTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBjcmVhdGVFbGVtZW50KG1ldGFkYXRhOiBUZW1wbGF0ZU1ldGFkYXRhLCBib2R5Q29udGVudDogc3RyaW5nKTogVGVtcGxhdGUge1xuICAgIC8vIEZpeCAjOTEyOiBQcmVmZXIgZXhwbGljaXQgZm9ybWF0X3ZlcnNpb24gbWFya2VyLCBmYWxsIGJhY2sgdG8gaW5zdHJ1Y3Rpb25zLXByZXNlbmNlIGNoZWNrXG4gICAgY29uc3QgbWV0YWRhdGFJbnN0cnVjdGlvbnMgPSBtZXRhZGF0YS5pbnN0cnVjdGlvbnM7XG4gICAgZGVsZXRlIChtZXRhZGF0YSBhcyBhbnkpLmZvcm1hdF92ZXJzaW9uOyAgLy8gU3RyaXAgbWFya2VyIGZyb20gcnVudGltZSBtZXRhZGF0YVxuICAgIGNvbnN0IHRlbXBsYXRlID0gbmV3IFRlbXBsYXRlKG1ldGFkYXRhLCBib2R5Q29udGVudCwgdGhpcy5tZXRhZGF0YVNlcnZpY2UpO1xuICAgIGlmIChtZXRhZGF0YUluc3RydWN0aW9ucykge1xuICAgICAgdGVtcGxhdGUuaW5zdHJ1Y3Rpb25zID0gbWV0YWRhdGFJbnN0cnVjdGlvbnM7XG4gICAgICBkZWxldGUgbWV0YWRhdGEuaW5zdHJ1Y3Rpb25zO1xuICAgIH1cbiAgICByZXR1cm4gdGVtcGxhdGU7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRGVmYXVsdEJvZHkodGVtcGxhdGU6IFRlbXBsYXRlKTogc3RyaW5nIHtcbiAgICBjb25zdCBuYW1lID0gKHRlbXBsYXRlLm1ldGFkYXRhLm5hbWUgPz8gJycpLnRyaW0oKTtcbiAgICBjb25zdCBkZXNjcmlwdGlvbiA9ICh0ZW1wbGF0ZS5tZXRhZGF0YS5kZXNjcmlwdGlvbiA/PyAnJykudHJpbSgpO1xuICAgIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmIChuYW1lKSB7XG4gICAgICBsaW5lcy5wdXNoKGAjICR7bmFtZX1gKTtcbiAgICAgIGxpbmVzLnB1c2goJycpO1xuICAgIH1cbiAgICBpZiAoZGVzY3JpcHRpb24pIHtcbiAgICAgIGxpbmVzLnB1c2goZGVzY3JpcHRpb24pO1xuICAgICAgbGluZXMucHVzaCgnJyk7XG4gICAgfVxuICAgIC8vIFNlY3Rpb24gZm9ybWF0OiA8dGVtcGxhdGU+IGZvciBIYW5kbGViYXJzIGNvbnRlbnQsIDxzdHlsZT4vPHNjcmlwdD4gZm9yIHJhdyBwYXNzdGhyb3VnaC5cbiAgICAvLyBBdXRvLWRldGVjdGlvbiAoaXNzdWUgIzcwNSk6IHNlY3Rpb24gbW9kZSBhY3RpdmF0ZXMgd2hlbiBib2R5IGhhcyBhIDx0ZW1wbGF0ZT4gcm9vdCBlbGVtZW50LlxuICAgIGxpbmVzLnB1c2goJzx0ZW1wbGF0ZT4nKTtcbiAgICBsaW5lcy5wdXNoKCc8IS0tIEhUTUwgY29udGVudCB3aXRoIHt7dmFyaWFibGV9fSBzdWJzdGl0dXRpb24gLS0+Jyk7XG4gICAgbGluZXMucHVzaCgnPC90ZW1wbGF0ZT4nKTtcbiAgICBsaW5lcy5wdXNoKCcnKTtcbiAgICBsaW5lcy5wdXNoKCc8c3R5bGU+Jyk7XG4gICAgbGluZXMucHVzaCgnLyogQ1NTIHN0eWxlcyAofX0gaXMgc2FmZSBoZXJlIOKAlCBub3QgSGFuZGxlYmFycyBwcm9jZXNzZWQpICovJyk7XG4gICAgbGluZXMucHVzaCgnPC9zdHlsZT4nKTtcbiAgICBsaW5lcy5wdXNoKCcnKTtcbiAgICBsaW5lcy5wdXNoKCc8c2NyaXB0PicpO1xuICAgIGxpbmVzLnB1c2goJy8vIEphdmFTY3JpcHQgKH19IGlzIHNhZmUgaGVyZSDigJQgbm90IEhhbmRsZWJhcnMgcHJvY2Vzc2VkKScpO1xuICAgIGxpbmVzLnB1c2goJzwvc2NyaXB0PicpO1xuICAgIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBzZXJpYWxpemVFbGVtZW50KHRlbXBsYXRlOiBUZW1wbGF0ZSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgLy8gdjIuMCBmb3JtYXQ6IGFkZCBpbnN0cnVjdGlvbnMgdG8gWUFNTCBmcm9udG1hdHRlciBpZiBwcmVzZW50XG4gICAgY29uc3QgbWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7IC4uLnRlbXBsYXRlLm1ldGFkYXRhIH07XG4gICAgLy8gSXNzdWUgIzc1NTogU2VyaWFsaXplIHR5cGUgYXMgc2luZ3VsYXIgYW5kIHBlcnNpc3QgdW5pcXVlX2lkXG4gICAgbWV0YWRhdGEudHlwZSA9IHRvU2luZ3VsYXJMYWJlbChFbGVtZW50VHlwZS5URU1QTEFURSk7XG4gICAgbWV0YWRhdGEudW5pcXVlX2lkID0gdGVtcGxhdGUuaWQ7XG4gICAgLy8gRml4ICM5MTI6IEV4cGxpY2l0IGZvcm1hdCBtYXJrZXJcbiAgICBtZXRhZGF0YS5mb3JtYXRfdmVyc2lvbiA9ICd2Mic7XG4gICAgaWYgKHRlbXBsYXRlLmluc3RydWN0aW9ucykge1xuICAgICAgbWV0YWRhdGEuaW5zdHJ1Y3Rpb25zID0gdGVtcGxhdGUuaW5zdHJ1Y3Rpb25zO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zZXJpYWxpemF0aW9uU2VydmljZS5jcmVhdGVGcm9udG1hdHRlcihcbiAgICAgIG1ldGFkYXRhLFxuICAgICAgdGVtcGxhdGUuY29udGVudCB8fCB0aGlzLmJ1aWxkRGVmYXVsdEJvZHkodGVtcGxhdGUpLFxuICAgICAge1xuICAgICAgICBtZXRob2Q6ICdtYW51YWwnLFxuICAgICAgICBzY2hlbWE6ICdqc29uJywgIC8vIEZpeCAjOTE0OiBzdGFuZGFyZGl6ZSBvbiBKU09OIHNjaGVtYSBhY3Jvc3MgYWxsIG1hbmFnZXJzXG4gICAgICAgIGNsZWFuTWV0YWRhdGE6IHRydWUsXG4gICAgICAgIGNsZWFuaW5nU3RyYXRlZ3k6ICdyZW1vdmUtYm90aCcsICAvLyBGaXggIzkxMzogc3RhbmRhcmRpemUgYWNyb3NzIGFsbCBtYW5hZ2Vyc1xuICAgICAgICBzb3J0S2V5czogdHJ1ZSxcbiAgICAgICAgbGluZVdpZHRoOiA4MCxcbiAgICAgICAgc2tpcEludmFsaWQ6IHRydWVcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzYW5pdGl6ZU1ldGFkYXRhKGRhdGE6IGFueSk6IFByb21pc2U8UGFydGlhbDxUZW1wbGF0ZU1ldGFkYXRhPj4ge1xuICAgIGNvbnN0IG1ldGFkYXRhOiBQYXJ0aWFsPFRlbXBsYXRlTWV0YWRhdGE+ID0ge307XG5cbiAgICBpZiAoZGF0YS5uYW1lKSB7XG4gICAgICBtZXRhZGF0YS5uYW1lID0gc2FuaXRpemVJbnB1dChVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShkYXRhLm5hbWUpLm5vcm1hbGl6ZWRDb250ZW50LCAxMDApO1xuICAgIH1cblxuICAgIGlmIChkYXRhLmRlc2NyaXB0aW9uKSB7XG4gICAgICBtZXRhZGF0YS5kZXNjcmlwdGlvbiA9IHNhbml0aXplSW5wdXQoVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUoZGF0YS5kZXNjcmlwdGlvbikubm9ybWFsaXplZENvbnRlbnQsIDUwMCk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEuY2F0ZWdvcnkpIHtcbiAgICAgIC8vIFNFQ1VSSVRZIEZJWDogVXNlIFZhbGlkYXRpb25TZXJ2aWNlIGZvciBjYXRlZ29yeSB2YWxpZGF0aW9uXG4gICAgICBjb25zdCBjYXRlZ29yeVJlc3VsdCA9IHRoaXMudmFsaWRhdGlvblNlcnZpY2UudmFsaWRhdGVDYXRlZ29yeShkYXRhLmNhdGVnb3J5KTtcbiAgICAgIGlmIChjYXRlZ29yeVJlc3VsdC5pc1ZhbGlkICYmIGNhdGVnb3J5UmVzdWx0LnNhbml0aXplZFZhbHVlKSB7XG4gICAgICAgIG1ldGFkYXRhLmNhdGVnb3J5ID0gY2F0ZWdvcnlSZXN1bHQuc2FuaXRpemVkVmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRhdGEub3V0cHV0X2Zvcm1hdCkge1xuICAgICAgbWV0YWRhdGEub3V0cHV0X2Zvcm1hdCA9IHNhbml0aXplSW5wdXQoZGF0YS5vdXRwdXRfZm9ybWF0LCAyMCk7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YS50YWdzKSkge1xuICAgICAgbWV0YWRhdGEudGFncyA9IGRhdGEudGFncy5tYXAoKHRhZzogYW55KSA9PiBzYW5pdGl6ZUlucHV0KFN0cmluZyh0YWcpLCA1MCkpO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEuaW5jbHVkZXMpKSB7XG4gICAgICBtZXRhZGF0YS5pbmNsdWRlcyA9IGRhdGEuaW5jbHVkZXMubWFwKChpbmM6IGFueSkgPT4gc2FuaXRpemVJbnB1dChTdHJpbmcoaW5jKSwgMjAwKSk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEudHJpZ2dlcnMgJiYgQXJyYXkuaXNBcnJheShkYXRhLnRyaWdnZXJzKSkge1xuICAgICAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IHRoaXMudHJpZ2dlclZhbGlkYXRpb25TZXJ2aWNlLnZhbGlkYXRlVHJpZ2dlcnMoXG4gICAgICAgIGRhdGEudHJpZ2dlcnMsXG4gICAgICAgIEVsZW1lbnRUeXBlLlRFTVBMQVRFLFxuICAgICAgICBtZXRhZGF0YS5uYW1lIHx8ICd1bmtub3duJ1xuICAgICAgKTtcbiAgICAgIG1ldGFkYXRhLnRyaWdnZXJzID0gdmFsaWRhdGlvblJlc3VsdC52YWxpZFRyaWdnZXJzO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZGF0YS51c2FnZV9jb3VudCA9PT0gJ251bWJlcicpIHtcbiAgICAgIG1ldGFkYXRhLnVzYWdlX2NvdW50ID0gTWF0aC5tYXgoMCwgTWF0aC5mbG9vcihkYXRhLnVzYWdlX2NvdW50KSk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEubGFzdF91c2VkKSB7XG4gICAgICBtZXRhZGF0YS5sYXN0X3VzZWQgPSBzYW5pdGl6ZUlucHV0KFN0cmluZyhkYXRhLmxhc3RfdXNlZCksIDUwKTtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhLnZhcmlhYmxlcykpIHtcbiAgICAgIG1ldGFkYXRhLnZhcmlhYmxlcyA9IGRhdGEudmFyaWFibGVzLm1hcCgodjogYW55KSA9PiAoe1xuICAgICAgICBuYW1lOiBzYW5pdGl6ZUlucHV0KHYubmFtZSB8fCAnJywgNTApLFxuICAgICAgICB0eXBlOiBzYW5pdGl6ZUlucHV0KHYudHlwZSB8fCAnc3RyaW5nJywgMjApLFxuICAgICAgICBkZXNjcmlwdGlvbjogdi5kZXNjcmlwdGlvbiA/IHNhbml0aXplSW5wdXQodi5kZXNjcmlwdGlvbiwgMjAwKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgcmVxdWlyZWQ6IEJvb2xlYW4odi5yZXF1aXJlZCksXG4gICAgICAgIGRlZmF1bHQ6IHYuZGVmYXVsdCxcbiAgICAgICAgdmFsaWRhdGlvbjogdi52YWxpZGF0aW9uID8gc2FuaXRpemVJbnB1dCh2LnZhbGlkYXRpb24sIDIwMCkgOiB1bmRlZmluZWQsXG4gICAgICAgIG9wdGlvbnM6IEFycmF5LmlzQXJyYXkodi5vcHRpb25zKSA/IHYub3B0aW9ucy5tYXAoKG86IGFueSkgPT4gc2FuaXRpemVJbnB1dChTdHJpbmcobyksIDEwMCkpIDogdW5kZWZpbmVkLFxuICAgICAgICBmb3JtYXQ6IHYuZm9ybWF0ID8gc2FuaXRpemVJbnB1dCh2LmZvcm1hdCwgNTApIDogdW5kZWZpbmVkXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YS5leGFtcGxlcykpIHtcbiAgICAgIG1ldGFkYXRhLmV4YW1wbGVzID0gZGF0YS5leGFtcGxlcy5tYXAoKGV4OiBhbnkpID0+ICh7XG4gICAgICAgIHRpdGxlOiBzYW5pdGl6ZUlucHV0KGV4LnRpdGxlIHx8ICcnLCAxMDApLFxuICAgICAgICBkZXNjcmlwdGlvbjogZXguZGVzY3JpcHRpb24gPyBzYW5pdGl6ZUlucHV0KGV4LmRlc2NyaXB0aW9uLCA1MDApIDogdW5kZWZpbmVkLFxuICAgICAgICB2YXJpYWJsZXM6IGV4LnZhcmlhYmxlcyB8fCB7fSxcbiAgICAgICAgb3V0cHV0OiBleC5vdXRwdXQgPyBzYW5pdGl6ZUlucHV0KGV4Lm91dHB1dCwgNTAwMCkgOiB1bmRlZmluZWRcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBtZXRhZGF0YS5hdXRob3IgPSBkYXRhLmF1dGhvciA/IHNhbml0aXplSW5wdXQoZGF0YS5hdXRob3IsIDEwMCkgOiB1bmRlZmluZWQ7XG4gICAgbWV0YWRhdGEudmVyc2lvbiA9IGRhdGEudmVyc2lvbiA/IHNhbml0aXplSW5wdXQoZGF0YS52ZXJzaW9uLCAyMCkgOiB1bmRlZmluZWQ7XG5cbiAgICAvLyBJc3N1ZSAjNTI0IOKAlCBHYXRla2VlcGVyIHBvbGljeSAoYWxsIGVsZW1lbnQgdHlwZXMpXG4gICAgbWV0YWRhdGEuZ2F0ZWtlZXBlciA9IHNhbml0aXplR2F0ZWtlZXBlclBvbGljeShkYXRhLmdhdGVrZWVwZXIsIG1ldGFkYXRhLm5hbWUgfHwgJ3Vua25vd24nLCAndGVtcGxhdGUnKTtcblxuICAgIG1ldGFkYXRhLm5hbWUgPSBtZXRhZGF0YS5uYW1lID8/ICdVbnRpdGxlZCBUZW1wbGF0ZSc7XG4gICAgbWV0YWRhdGEuZGVzY3JpcHRpb24gPSBtZXRhZGF0YS5kZXNjcmlwdGlvbiA/PyAnJztcblxuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfVxufVxuIl19
@@ -2,8 +2,8 @@
2
2
  * Auto-generated file - DO NOT EDIT
3
3
  * Generated at build time by scripts/generate-version.js
4
4
  */
5
- export declare const PACKAGE_VERSION = "2.0.12-rc.9";
6
- export declare const BUILD_TIMESTAMP = "2026-04-09T04:57:47.874Z";
5
+ export declare const PACKAGE_VERSION = "2.0.13";
6
+ export declare const BUILD_TIMESTAMP = "2026-04-13T16:33:05.030Z";
7
7
  export declare const BUILD_TYPE: 'npm' | 'git';
8
8
  export declare const PACKAGE_NAME = "@dollhousemcp/mcp-server";
9
9
  //# sourceMappingURL=version.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/generated/version.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,eAAe,gBAAgB,CAAC;AAC7C,eAAO,MAAM,eAAe,6BAA6B,CAAC;AAC1D,eAAO,MAAM,UAAU,EAAE,KAAK,GAAG,KAAa,CAAC;AAC/C,eAAO,MAAM,YAAY,6BAA6B,CAAC"}
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/generated/version.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,eAAe,WAAW,CAAC;AACxC,eAAO,MAAM,eAAe,6BAA6B,CAAC;AAC1D,eAAO,MAAM,UAAU,EAAE,KAAK,GAAG,KAAa,CAAC;AAC/C,eAAO,MAAM,YAAY,6BAA6B,CAAC"}
@@ -2,8 +2,8 @@
2
2
  * Auto-generated file - DO NOT EDIT
3
3
  * Generated at build time by scripts/generate-version.js
4
4
  */
5
- export const PACKAGE_VERSION = '2.0.12-rc.9';
6
- export const BUILD_TIMESTAMP = '2026-04-09T04:57:47.874Z';
5
+ export const PACKAGE_VERSION = '2.0.13';
6
+ export const BUILD_TIMESTAMP = '2026-04-13T16:33:05.030Z';
7
7
  export const BUILD_TYPE = 'npm';
8
8
  export const PACKAGE_NAME = '@dollhousemcp/mcp-server';
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZW5lcmF0ZWQvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsYUFBYSxDQUFDO0FBQzdDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRywwQkFBMEIsQ0FBQztBQUMxRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWtCLEtBQUssQ0FBQztBQUMvQyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEF1dG8tZ2VuZXJhdGVkIGZpbGUgLSBETyBOT1QgRURJVFxuICogR2VuZXJhdGVkIGF0IGJ1aWxkIHRpbWUgYnkgc2NyaXB0cy9nZW5lcmF0ZS12ZXJzaW9uLmpzXG4gKi9cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9ICcyLjAuMTItcmMuOSc7XG5leHBvcnQgY29uc3QgQlVJTERfVElNRVNUQU1QID0gJzIwMjYtMDQtMDlUMDQ6NTc6NDcuODc0Wic7XG5leHBvcnQgY29uc3QgQlVJTERfVFlQRTogJ25wbScgfCAnZ2l0JyA9ICducG0nO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfTkFNRSA9ICdAZG9sbGhvdXNlbWNwL21jcC1zZXJ2ZXInO1xuIl19
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZW5lcmF0ZWQvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBQ3hDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRywwQkFBMEIsQ0FBQztBQUMxRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWtCLEtBQUssQ0FBQztBQUMvQyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEF1dG8tZ2VuZXJhdGVkIGZpbGUgLSBETyBOT1QgRURJVFxuICogR2VuZXJhdGVkIGF0IGJ1aWxkIHRpbWUgYnkgc2NyaXB0cy9nZW5lcmF0ZS12ZXJzaW9uLmpzXG4gKi9cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9ICcyLjAuMTMnO1xuZXhwb3J0IGNvbnN0IEJVSUxEX1RJTUVTVEFNUCA9ICcyMDI2LTA0LTEzVDE2OjMzOjA1LjAzMFonO1xuZXhwb3J0IGNvbnN0IEJVSUxEX1RZUEU6ICducG0nIHwgJ2dpdCcgPSAnbnBtJztcbmV4cG9ydCBjb25zdCBQQUNLQUdFX05BTUUgPSAnQGRvbGxob3VzZW1jcC9tY3Atc2VydmVyJztcbiJdfQ==
@@ -148,11 +148,11 @@ export async function createElement(context, args) {
148
148
  // FIX: Issue #20 - Catch duplicate errors from TemplateManager
149
149
  try {
150
150
  const template = await context.templateManager.create({
151
- ...sanitized,
152
151
  name: validatedName,
153
152
  description: validatedDescription,
154
153
  instructions: instructions,
155
154
  content: content || '',
155
+ metadata: sanitized,
156
156
  });
157
157
  const successMsg = `${warningText}✅ Created template '${template.metadata.name}' successfully`;
158
158
  return { content: [{ type: "text", text: `${context.getPersonaIndicator()}${successMsg}` }] };
@@ -267,4 +267,4 @@ export async function createElement(context, args) {
267
267
  };
268
268
  }
269
269
  }
270
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlRWxlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9oYW5kbGVycy9lbGVtZW50LWNydWQvY3JlYXRlRWxlbWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUVILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hHLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIseUJBQXlCLEVBQ3pCLDJCQUEyQixFQUMzQiwrQkFBK0IsRUFDL0IsNkJBQTZCLEVBQzdCLCtCQUErQixFQUNoQyxNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUV6RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0MsbUdBQW1HO0FBQ25HLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsb0JBQW9CLEVBQ3BCLG9CQUFvQixFQUNyQixNQUFNLHdCQUF3QixDQUFDO0FBOEdoQzs7R0FFRztBQUNILFNBQVMsbUJBQW1CLENBQUMsUUFBeUIsRUFBRSxTQUFpQjtJQUN2RSxPQUFPO1FBQ0wsR0FBRyxRQUFRO1FBQ1gsT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNsQyxHQUFHLENBQUM7WUFDSixJQUFJLEVBQUUsR0FBRyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRTtTQUM5QixDQUFDLENBQUM7S0FDSixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sQ0FBQyxLQUFLLFVBQVUsYUFBYSxDQUFDLE9BQTJCLEVBQUUsSUFBdUI7SUFDdEYs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QUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7b0JBQy9GLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUM7d0JBQ3RELENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQzt3QkFDM0QsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLGFBQWEsRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQztvQkFDdkYsT0FBTyxtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQztnQkFDM0UsQ0FBQztZQUNILENBQUM7WUFFRDtnQkFDRSxPQUFPO29CQUNMLE9BQU8sRUFBRSxDQUFDOzRCQUNSLElBQUksRUFBRSxNQUFNOzRCQUNaLElBQUksRUFBRSxtQkFBbUIsSUFBSSxxQ0FBcUM7eUJBQ25FLENBQUM7aUJBQ0gsQ0FBQztRQUNOLENBQUM7SUFDSCxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE1BQU0sQ0FBQyxLQUFLLENBQUMsa0NBQWtDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDeEQsTUFBTSxPQUFPLEdBQUcsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDO1FBQ3pFLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQ2hELE9BQU87WUFDTCxPQUFPLEVBQUUsQ0FBQztvQkFDUixJQUFJLEVBQUUsTUFBTTtvQkFDWixJQUFJLEVBQUUsR0FBRyxTQUFTLCtCQUErQixPQUFPLEVBQUU7aUJBQzNELENBQUM7U0FDSCxDQUFDO0lBQ0osQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZJWDogRE1DUC1TRUMtMDA2IC0gU2VjdXJpdHkgYXVkaXQgc3VwcHJlc3Npb25cbiAqIFRoaXMgZmlsZSBkZWxlZ2F0ZXMgZWxlbWVudCBjcmVhdGlvbiB0byBzcGVjaWFsaXplZCBtYW5hZ2Vycy5cbiAqIEF1ZGl0IGxvZ2dpbmcgaGFwcGVucyBpbiB0aGUgbWFuYWdlcnMgdGhlbXNlbHZlcyAoUGVyc29uYU1hbmFnZXIsIFNraWxsTWFuYWdlciwgZXRjLikuXG4gKiBAc2VjdXJpdHktYXVkaXQtc3VwcHJlc3MgRE1DUC1TRUMtMDA2XG4gKi9cblxuaW1wb3J0IHsgRWxlbWVudFR5cGUgfSBmcm9tICcuLi8uLi9wb3J0Zm9saW8vUG9ydGZvbGlvTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBTRUNVUklUWV9MSU1JVFMgfSBmcm9tICcuLi8uLi9zZWN1cml0eS9jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgc2FuaXRpemVJbnB1dCwgdmFsaWRhdGVDb250ZW50U2l6ZSwgdmFsaWRhdGVDYXRlZ29yeSB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L0lucHV0VmFsaWRhdG9yLmpzJztcbmltcG9ydCB7XG4gIHNhbml0aXplTWV0YWRhdGEsXG4gIG5vcm1hbGl6ZUVsZW1lbnRUeXBlSW5wdXQsXG4gIGZvcm1hdFZhbGlkRWxlbWVudFR5cGVzTGlzdCxcbiAgZGV0ZWN0VW5rbm93bk1ldGFkYXRhUHJvcGVydGllcyxcbiAgZm9ybWF0VW5rbm93blByb3BlcnR5V2FybmluZ3MsXG4gIGZvcm1hdEVsZW1lbnRSZXNvbHV0aW9uV2FybmluZ3Ncbn0gZnJvbSAnLi9oZWxwZXJzLmpzJztcbmltcG9ydCB7IHJlc29sdmVFbGVtZW50VHlwZXMgfSBmcm9tICcuLi8uLi91dGlscy9lbGVtZW50VHlwZVJlc29sdmVyLmpzJztcbmltcG9ydCB7IEVsZW1lbnRDcnVkQ29udGV4dCB9IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9nZ2VyLmpzJztcbi8vIEZJWDogSXNzdWUgIzI4MSAtIFNlY3VyaXR5TW9uaXRvciBpbXBvcnQgcmVtb3ZlZCwgcGVyc29uYSBsb2dnaW5nIG5vdyBpbiBQZXJzb25hTWFuYWdlci5jcmVhdGUoKVxuaW1wb3J0IHtcbiAgZm9ybWF0U2ltcGxlRXJyb3JSZXNwb25zZSxcbiAgZm9ybWF0RHVwbGljYXRlRXJyb3IsXG4gIGZvcm1hdEV4Y2VwdGlvbkVycm9yXG59IGZyb20gJy4vcmVzcG9uc2VGb3JtYXR0ZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBNY3BUb29sUmVzcG9uc2UgfSBmcm9tICcuL3Jlc3BvbnNlRm9ybWF0dGVyLmpzJztcbmltcG9ydCB0eXBlIHsgRW5zZW1ibGVFbGVtZW50IH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvZW5zZW1ibGVzL3R5cGVzLmpzJztcblxuLyoqXG4gKiBBcmd1bWVudHMgZm9yIGNyZWF0aW5nIGEgbmV3IGVsZW1lbnQuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENyZWF0ZSBhIHBlcnNvbmFcbiAqIHsgbmFtZTogJ2hlbHBlcicsIHR5cGU6ICdwZXJzb25hJywgZGVzY3JpcHRpb246ICdBIGhlbHBmdWwgYXNzaXN0YW50JywgaW5zdHJ1Y3Rpb25zOiAnQmUgaGVscGZ1bCcgfVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDcmVhdGUgYW4gZW5zZW1ibGUgd2l0aCBlbGVtZW50c1xuICoge1xuICogICBuYW1lOiAnbXktZW5zZW1ibGUnLFxuICogICB0eXBlOiAnZW5zZW1ibGUnLFxuICogICBkZXNjcmlwdGlvbjogJ0EgY29vcmRpbmF0ZWQgZ3JvdXAnLFxuICogICBlbGVtZW50czogW3sgbmFtZTogJ3NraWxsMScsIHR5cGU6ICdza2lsbCcsIHJvbGU6ICdwcmltYXJ5JywgcHJpb3JpdHk6IDEwMCwgYWN0aXZhdGlvbjogJ2Fsd2F5cycgfV1cbiAqIH1cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ3JlYXRlIGEgVjIgYWdlbnQgd2l0aCBnb2FsIGNvbmZpZ3VyYXRpb25cbiAqIHtcbiAqICAgbmFtZTogJ3Rhc2stcnVubmVyJyxcbiAqICAgdHlwZTogJ2FnZW50JyxcbiAqICAgZGVzY3JpcHRpb246ICdFeGVjdXRlcyB0YXNrcyBhdXRvbm9tb3VzbHknLFxuICogICBnb2FsOiB7XG4gKiAgICAgdGVtcGxhdGU6ICdDb21wbGV0ZSB0aGUgZm9sbG93aW5nIHRhc2s6IHtvYmplY3RpdmV9JyxcbiAqICAgICBwYXJhbWV0ZXJzOiBbeyBuYW1lOiAnb2JqZWN0aXZlJywgdHlwZTogJ3N0cmluZycsIHJlcXVpcmVkOiB0cnVlIH1dLFxuICogICAgIHN1Y2Nlc3NDcml0ZXJpYTogWydUYXNrIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHknLCAnUmVzdWx0cyBkb2N1bWVudGVkJ11cbiAqICAgfSxcbiAqICAgYWN0aXZhdGVzOiB7IHNraWxsczogWydjb2RlLXJldmlldyddLCBwZXJzb25hczogWydkZXZlbG9wZXInXSB9XG4gKiB9XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlRWxlbWVudEFyZ3Mge1xuICBuYW1lOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgLyoqIFJlZmVyZW5jZSBtYXRlcmlhbCwga25vd2xlZGdlLCBjb250ZXh0IChpbmZvcm1hdGlvbmFsKS4gRm9yIHRlbXBsYXRlczogdGVtcGxhdGUgYm9keS4gKi9cbiAgY29udGVudD86IHN0cmluZztcbiAgLyoqIEJlaGF2aW9yYWwgZGlyZWN0aXZlcyAoY29tbWFuZCB2b2ljZSkuIEZvciBwZXJzb25hczogYmVoYXZpb3JhbCBwcm9maWxlLiBGb3Igc2tpbGxzOiBob3cgdG8gYXBwbHkuIEZvciBhZ2VudHM6IGFnZW50IGJlaGF2aW9yYWwgcHJvdG9jb2wuICovXG4gIGluc3RydWN0aW9ucz86IHN0cmluZztcbiAgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLyoqXG4gICAqIEZvciBlbnNlbWJsZXMgLSBhcnJheSBvZiBlbGVtZW50IHJlZmVyZW5jZXMuXG4gICAqIElzc3VlICMyNzg6IExMTXMgb2Z0ZW4gcGFzcyBlbGVtZW50cyBhdCB0b3AgbGV2ZWwsIG5vdCBpbnNpZGUgbWV0YWRhdGEuXG4gICAqL1xuICBlbGVtZW50cz86IEVuc2VtYmxlRWxlbWVudFtdO1xuXG4gIC8vIFYyIEFnZW50IGZpZWxkcyAoY2FuIGFsc28gYmUgcGFzc2VkIGluIG1ldGFkYXRhKVxuICAvKipcbiAgICogRm9yIFYyIGFnZW50cyAtIGdvYWwgY29uZmlndXJhdGlvbiB3aXRoIHRlbXBsYXRlIGFuZCBwYXJhbWV0ZXJzLlxuICAgKiBDYW4gYmUgcGFzc2VkIGFzIGEgc2ltcGxlIHN0cmluZyAod2lsbCBiZSBjb252ZXJ0ZWQgdG8gVjIgZm9ybWF0KVxuICAgKiBvciBhcyBhIGZ1bGwgVjIgY29uZmlnIG9iamVjdC5cbiAgICpcbiAgICogQHNpbmNlIHYyLjAuMCAtIEFnZW50IFYyIEluZnJhc3RydWN0dXJlXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIFNpbXBsZSBzdHJpbmcgZ29hbCAoYXV0by1jb252ZXJ0ZWQgdG8gVjIgZm9ybWF0KVxuICAgKiBnb2FsOiAnQ29tcGxldGUgdGhlIGFuYWx5c2lzIHRhc2snXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIEZ1bGwgVjIgY29uZmlnIHdpdGggcGFyYW1ldGVyc1xuICAgKiBnb2FsOiB7XG4gICAqICAgdGVtcGxhdGU6ICdBbmFseXplIHt0YXJnZXR9IGZvciB7cHVycG9zZX0nLFxuICAgKiAgIHBhcmFtZXRlcnM6IFtcbiAgICogICAgIHsgbmFtZTogJ3RhcmdldCcsIHR5cGU6ICdzdHJpbmcnLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgKiAgICAgeyBuYW1lOiAncHVycG9zZScsIHR5cGU6ICdzdHJpbmcnLCByZXF1aXJlZDogdHJ1ZSB9XG4gICAqICAgXSxcbiAgICogICBzdWNjZXNzQ3JpdGVyaWE6IFsnQW5hbHlzaXMgY29tcGxldGUnLCAnUmVwb3J0IGdlbmVyYXRlZCddXG4gICAqIH1cbiAgICovXG4gIGdvYWw/OiBzdHJpbmcgfCB7XG4gICAgdGVtcGxhdGU6IHN0cmluZztcbiAgICBwYXJhbWV0ZXJzPzogQXJyYXk8e1xuICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgdHlwZTogJ3N0cmluZycgfCAnbnVtYmVyJyB8ICdib29sZWFuJztcbiAgICAgIHJlcXVpcmVkOiBib29sZWFuO1xuICAgICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgICBkZWZhdWx0Pzogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbjtcbiAgICB9PjtcbiAgICBzdWNjZXNzQ3JpdGVyaWE/OiBzdHJpbmdbXTtcbiAgfTtcbiAgLyoqXG4gICAqIEZvciBWMiBhZ2VudHMgLSBlbGVtZW50cyB0byBhY3RpdmF0ZSB3aGVuIGFnZW50IGV4ZWN1dGVzLlxuICAgKiBAc2luY2UgdjIuMC4wIC0gQWdlbnQgVjIgSW5mcmFzdHJ1Y3R1cmVcbiAgICovXG4gIGFjdGl2YXRlcz86IHtcbiAgICBwZXJzb25hcz86IHN0cmluZ1tdO1xuICAgIHNraWxscz86IHN0cmluZ1tdO1xuICAgIG1lbW9yaWVzPzogc3RyaW5nW107XG4gICAgdGVtcGxhdGVzPzogc3RyaW5nW107XG4gICAgZW5zZW1ibGVzPzogc3RyaW5nW107XG4gICAgW2tleTogc3RyaW5nXTogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG4gIH07XG4gIC8qKlxuICAgKiBGb3IgVjIgYWdlbnRzIC0gdG9vbCBjb25maWd1cmF0aW9uIChpbmZvcm1hdGlvbmFsKS5cbiAgICogQHNpbmNlIHYyLjAuMCAtIEFnZW50IFYyIEluZnJhc3RydWN0dXJlXG4gICAqL1xuICB0b29scz86IHtcbiAgICBhbGxvd2VkOiBzdHJpbmdbXTtcbiAgICBkZW5pZWQ/OiBzdHJpbmdbXTtcbiAgfTtcbiAgLyoqXG4gICAqIEZvciBWMiBhZ2VudHMgLSBjdXN0b20gc3lzdGVtIHByb21wdCBmb3IgTExNIGNvbnRleHQuXG4gICAqIEBzaW5jZSB2Mi4wLjAgLSBBZ2VudCBWMiBJbmZyYXN0cnVjdHVyZVxuICAgKi9cbiAgc3lzdGVtUHJvbXB0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEhlbHBlciB0byBhZGQgcGVyc29uYSBpbmRpY2F0b3IgcHJlZml4IHRvIHJlc3BvbnNlXG4gKi9cbmZ1bmN0aW9uIGFkZFBlcnNvbmFJbmRpY2F0b3IocmVzcG9uc2U6IE1jcFRvb2xSZXNwb25zZSwgaW5kaWNhdG9yOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5yZXNwb25zZSxcbiAgICBjb250ZW50OiByZXNwb25zZS5jb250ZW50Lm1hcChjID0+ICh7XG4gICAgICAuLi5jLFxuICAgICAgdGV4dDogYCR7aW5kaWNhdG9yfSR7Yy50ZXh0fWBcbiAgICB9KSlcbiAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQoY29udGV4dDogRWxlbWVudENydWRDb250ZXh0LCBhcmdzOiBDcmVhdGVFbGVtZW50QXJncykge1xuICBhd2FpdCBjb250ZXh0LmVuc3VyZUluaXRpYWxpemVkKCk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB7IG5hbWUsIHR5cGUsIGRlc2NyaXB0aW9uLCBjb250ZW50LCBpbnN0cnVjdGlvbnMsIG1ldGFkYXRhIH0gPSBhcmdzO1xuXG4gICAgY29uc3QgeyB0eXBlOiBub3JtYWxpemVkVHlwZSB9ID0gbm9ybWFsaXplRWxlbWVudFR5cGVJbnB1dCh0eXBlKTtcblxuICAgIGlmICghbm9ybWFsaXplZFR5cGUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYOKdjCBJbnZhbGlkIGVsZW1lbnQgdHlwZSAnJHt0eXBlfScuIFZhbGlkIHR5cGVzOiAke2Zvcm1hdFZhbGlkRWxlbWVudFR5cGVzTGlzdCgpfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgdmFsaWRhdGVkTmFtZSA9IHNhbml0aXplSW5wdXQobmFtZSwgU0VDVVJJVFlfTElNSVRTLk1BWF9GSUxFTkFNRV9MRU5HVEgpO1xuICAgIGNvbnN0IHZhbGlkYXRlZERlc2NyaXB0aW9uID0gc2FuaXRpemVJbnB1dChkZXNjcmlwdGlvbiwgU0VDVVJJVFlfTElNSVRTLk1BWF9NRVRBREFUQV9GSUVMRF9MRU5HVEgpO1xuXG4gICAgaWYgKGNvbnRlbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhbGlkYXRlQ29udGVudFNpemUoY29udGVudCwgU0VDVVJJVFlfTElNSVRTLk1BWF9DT05URU5UX0xFTkdUSCk7XG4gICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYOKdjCBDb250ZW50IHRvbyBsYXJnZTogJHtlcnJvci5tZXNzYWdlfS4gTWF4aW11bSBhbGxvd2VkIHNpemUgaXMgJHtTRUNVUklUWV9MSU1JVFMuTUFYX0NPTlRFTlRfTEVOR1RIfSBjaGFyYWN0ZXJzICgke01hdGguZmxvb3IoU0VDVVJJVFlfTElNSVRTLk1BWF9DT05URU5UX0xFTkdUSCAvIDEwMjQpfUtCKS5gXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJc3N1ZSAjNjAyIHJlc29sdmVkOiBCb3RoICdpbnN0cnVjdGlvbnMnIGFuZCAnY29udGVudCcgYXJlIGZpcnN0LWNsYXNzIGZpZWxkcy5cbiAgICAvLyBpbnN0cnVjdGlvbnMgPSBiZWhhdmlvcmFsIGRpcmVjdGl2ZXMgKGNvbW1hbmQgdm9pY2UsIFwiWW91IEFSRS4uLlwiLCBcIkFMV0FZUy4uLlwiKVxuICAgIC8vIGNvbnRlbnQgPSByZWZlcmVuY2UgbWF0ZXJpYWwgKGluZm9ybWF0aW9uYWwsIGRvbWFpbiBrbm93bGVkZ2UsIGV4YW1wbGVzKVxuICAgIGlmIChpbnN0cnVjdGlvbnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhbGlkYXRlQ29udGVudFNpemUoaW5zdHJ1Y3Rpb25zLCBTRUNVUklUWV9MSU1JVFMuTUFYX0NPTlRFTlRfTEVOR1RIKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBg4p2MIEluc3RydWN0aW9ucyB0b28gbGFyZ2U6ICR7ZXJyb3IubWVzc2FnZX0uIE1heGltdW0gYWxsb3dlZCBzaXplIGlzICR7U0VDVVJJVFlfTElNSVRTLk1BWF9DT05URU5UX0xFTkdUSH0gY2hhcmFjdGVycy5gXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBFbGVtZW50LXNwZWNpZmljIGZpZWxkcyAoZW5zZW1ibGUgZWxlbWVudHMsIGFnZW50IFYyIGZpZWxkcykgYXJlIG1lcmdlZCBpbnRvXG4gICAgLy8gbWV0YWRhdGEgYnkgdGhlIGRpc3BhdGNoZXIgKE1DUEFRTEhhbmRsZXIpLiBjcmVhdGVFbGVtZW50IGp1c3Qgc2FuaXRpemVzIGFuZCBkZWxlZ2F0ZXMuXG4gICAgY29uc3Qgc2FuaXRpemVkID0gc2FuaXRpemVNZXRhZGF0YShtZXRhZGF0YSk7XG5cbiAgICAvLyBJc3N1ZSAjNjIxOiBWYWxpZGF0ZSBjYXRlZ29yeSBmb3JtYXQgZm9yIGVsZW1lbnQgdHlwZXMgdGhhdCBzdXBwb3J0IGl0XG4gICAgLy8gUGVyc29uYSBhbHNvIHN1cHBvcnRzIGNhdGVnb3JpZXMgKHZhbGlkYXRlZCBpbnRlcm5hbGx5IGJ5IFBlcnNvbmFNYW5hZ2VyKSDigJQgaW5jbHVkZSBoZXJlIGZvciBjb25zaXN0ZW50IGVhcmx5IGVycm9yIHJlcG9ydGluZ1xuICAgIGNvbnN0IENBVEVHT1JZX1RZUEVTID0gbmV3IFNldChbRWxlbWVudFR5cGUuUEVSU09OQSwgRWxlbWVudFR5cGUuU0tJTEwsIEVsZW1lbnRUeXBlLlRFTVBMQVRFLCBFbGVtZW50VHlwZS5NRU1PUlldKTtcbiAgICBpZiAoc2FuaXRpemVkLmNhdGVnb3J5ICYmIENBVEVHT1JZX1RZUEVTLmhhcyhub3JtYWxpemVkVHlwZSkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhbGlkYXRlQ2F0ZWdvcnkoc2FuaXRpemVkLmNhdGVnb3J5IGFzIHN0cmluZyk7XG4gICAgICB9IGNhdGNoIChjYXRlZ29yeUVycm9yOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIGZvcm1hdFNpbXBsZUVycm9yUmVzcG9uc2UoXG4gICAgICAgICAgYEludmFsaWQgY2F0ZWdvcnkgJyR7c2FuaXRpemVkLmNhdGVnb3J5fSc6ICR7Y2F0ZWdvcnlFcnJvci5tZXNzYWdlfWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEZXRlY3QgdW5rbm93biBtZXRhZGF0YSBwcm9wZXJ0aWVzIGFuZCBnZW5lcmF0ZSB3YXJuaW5ncyBmb3IgTExNIGZlZWRiYWNrXG4gICAgY29uc3QgdW5rbm93blByb3BlcnR5V2FybmluZ3MgPSBkZXRlY3RVbmtub3duTWV0YWRhdGFQcm9wZXJ0aWVzKFxuICAgICAgbm9ybWFsaXplZFR5cGUsXG4gICAgICBtZXRhZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICk7XG4gICAgY29uc3Qgd2FybmluZ1RleHQgPSBmb3JtYXRVbmtub3duUHJvcGVydHlXYXJuaW5ncyh1bmtub3duUHJvcGVydHlXYXJuaW5ncyk7XG5cbiAgICAvLyBMb2cgd2FybmluZ3MgZm9yIGRlYnVnZ2luZyB3aXRoIHN0cnVjdHVyZWQgZGF0YSBmb3IgYmV0dGVyIG9ic2VydmFiaWxpdHlcbiAgICBpZiAodW5rbm93blByb3BlcnR5V2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgbG9nZ2VyLndhcm4oYFtjcmVhdGVFbGVtZW50XSBVbmtub3duIG1ldGFkYXRhIHByb3BlcnRpZXMgZGV0ZWN0ZWRgLCB7XG4gICAgICAgIGVsZW1lbnRUeXBlOiBub3JtYWxpemVkVHlwZSxcbiAgICAgICAgZWxlbWVudE5hbWU6IG5hbWUsXG4gICAgICAgIHdhcm5pbmdDb3VudDogdW5rbm93blByb3BlcnR5V2FybmluZ3MubGVuZ3RoLFxuICAgICAgICB1bmtub3duUHJvcGVydGllczogdW5rbm93blByb3BlcnR5V2FybmluZ3MubWFwKHcgPT4gKHtcbiAgICAgICAgICBwcm9wZXJ0eTogdy5wcm9wZXJ0eSxcbiAgICAgICAgICBzdWdnZXN0aW9uOiB3LnN1Z2dlc3Rpb25cbiAgICAgICAgfSkpXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKG5vcm1hbGl6ZWRUeXBlKSB7XG4gICAgICBjYXNlIEVsZW1lbnRUeXBlLlBFUlNPTkE6IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBJc3N1ZSAjNjAyOiBCb3RoICdpbnN0cnVjdGlvbnMnIGFuZCAnY29udGVudCcgYXJlIGZpcnN0LWNsYXNzIGZpZWxkcy5cbiAgICAgICAgICBjb25zdCBwZXJzb25hID0gYXdhaXQgY29udGV4dC5wZXJzb25hTWFuYWdlci5jcmVhdGUoe1xuICAgICAgICAgICAgLi4uc2FuaXRpemVkLFxuICAgICAgICAgICAgbmFtZTogdmFsaWRhdGVkTmFtZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB2YWxpZGF0ZWREZXNjcmlwdGlvbixcbiAgICAgICAgICAgIGluc3RydWN0aW9uczogaW5zdHJ1Y3Rpb25zLFxuICAgICAgICAgICAgY29udGVudDogY29udGVudCxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IHN1Y2Nlc3NNc2cgPSBgJHt3YXJuaW5nVGV4dH3inIUgQ3JlYXRlZCBwZXJzb25hICcke3BlcnNvbmEubWV0YWRhdGEubmFtZX0nIHN1Y2Nlc3NmdWxseWA7XG4gICAgICAgICAgcmV0dXJuIHsgY29udGVudDogW3sgdHlwZTogXCJ0ZXh0XCIsIHRleHQ6IGAke2NvbnRleHQuZ2V0UGVyc29uYUluZGljYXRvcigpfSR7c3VjY2Vzc01zZ31gIH1dIH07XG4gICAgICAgIH0gY2F0Y2ggKHBlcnNvbmFFcnJvcikge1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBwZXJzb25hRXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IHBlcnNvbmFFcnJvci5tZXNzYWdlIDogU3RyaW5nKHBlcnNvbmFFcnJvcik7XG4gICAgICAgICAgaWYgKG1lc3NhZ2UuaW5jbHVkZXMoJ2luc3RydWN0aW9ucyBhcmUgcmVxdWlyZWQnKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdFNpbXBsZUVycm9yUmVzcG9uc2UobWVzc2FnZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGVycm9yUmVzcG9uc2UgPSBtZXNzYWdlLmluY2x1ZGVzKCdhbHJlYWR5IGV4aXN0cycpXG4gICAgICAgICAgICA/IGZvcm1hdER1cGxpY2F0ZUVycm9yKEVsZW1lbnRUeXBlLlBFUlNPTkEsIHZhbGlkYXRlZE5hbWUpXG4gICAgICAgICAgICA6IGZvcm1hdEV4Y2VwdGlvbkVycm9yKHBlcnNvbmFFcnJvciwgJ2NyZWF0ZScsIEVsZW1lbnRUeXBlLlBFUlNPTkEsIHZhbGlkYXRlZE5hbWUpO1xuICAgICAgICAgIHJldHVybiBhZGRQZXJzb25hSW5kaWNhdG9yKGVycm9yUmVzcG9uc2UsIGNvbnRleHQuZ2V0UGVyc29uYUluZGljYXRvcigpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjYXNlIEVsZW1lbnRUeXBlLlNLSUxMOiB7XG4gICAgICAgIC8vIEZJWDogSXNzdWUgIzIwIC0gQ2F0Y2ggZHVwbGljYXRlIGVycm9ycyBmcm9tIFNraWxsTWFuYWdlclxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHNraWxsID0gYXdhaXQgY29udGV4dC5za2lsbE1hbmFnZXIuY3JlYXRlKHtcbiAgICAgICAgICAgIG5hbWU6IHZhbGlkYXRlZE5hbWUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogdmFsaWRhdGVkRGVzY3JpcHRpb24sXG4gICAgICAgICAgICAuLi5zYW5pdGl6ZWQsXG4gICAgICAgICAgICBpbnN0cnVjdGlvbnM6IGluc3RydWN0aW9ucyxcbiAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQgfHwgJydcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCBzdWNjZXNzTXNnID0gYCR7d2FybmluZ1RleHR94pyFIENyZWF0ZWQgc2tpbGwgJyR7c2tpbGwubWV0YWRhdGEubmFtZX0nIHN1Y2Nlc3NmdWxseWA7XG4gICAgICAgICAgcmV0dXJuIHsgY29udGVudDogW3sgdHlwZTogXCJ0ZXh0XCIsIHRleHQ6IGAke2NvbnRleHQuZ2V0UGVyc29uYUluZGljYXRvcigpfSR7c3VjY2Vzc01zZ31gIH1dIH07XG4gICAgICAgIH0gY2F0Y2ggKHNraWxsRXJyb3IpIHtcbiAgICAgICAgICAvLyBDaGVjayBpZiBpdCdzIGEgZHVwbGljYXRlIGVycm9yXG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHNraWxsRXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IHNraWxsRXJyb3IubWVzc2FnZSA6IFN0cmluZyhza2lsbEVycm9yKTtcbiAgICAgICAgICBjb25zdCBlcnJvclJlc3BvbnNlID0gbWVzc2FnZS5pbmNsdWRlcygnYWxyZWFkeSBleGlzdHMnKVxuICAgICAgICAgICAgPyBmb3JtYXREdXBsaWNhdGVFcnJvcihFbGVtZW50VHlwZS5TS0lMTCwgdmFsaWRhdGVkTmFtZSlcbiAgICAgICAgICAgIDogZm9ybWF0RXhjZXB0aW9uRXJyb3Ioc2tpbGxFcnJvciwgJ2NyZWF0ZScsIEVsZW1lbnRUeXBlLlNLSUxMLCB2YWxpZGF0ZWROYW1lKTtcbiAgICAgICAgICByZXR1cm4gYWRkUGVyc29uYUluZGljYXRvcihlcnJvclJlc3BvbnNlLCBjb250ZXh0LmdldFBlcnNvbmFJbmRpY2F0b3IoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY2FzZSBFbGVtZW50VHlwZS5URU1QTEFURToge1xuICAgICAgICAvLyBGSVg6IElzc3VlICMyMCAtIENhdGNoIGR1cGxpY2F0ZSBlcnJvcnMgZnJvbSBUZW1wbGF0ZU1hbmFnZXJcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IGF3YWl0IGNvbnRleHQudGVtcGxhdGVNYW5hZ2VyLmNyZWF0ZSh7XG4gICAgICAgICAgICAuLi5zYW5pdGl6ZWQsXG4gICAgICAgICAgICBuYW1lOiB2YWxpZGF0ZWROYW1lLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHZhbGlkYXRlZERlc2NyaXB0aW9uLFxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zOiBpbnN0cnVjdGlvbnMsXG4gICAgICAgICAgICBjb250ZW50OiBjb250ZW50IHx8ICcnLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IHN1Y2Nlc3NNc2cgPSBgJHt3YXJuaW5nVGV4dH3inIUgQ3JlYXRlZCB0ZW1wbGF0ZSAnJHt0ZW1wbGF0ZS5tZXRhZGF0YS5uYW1lfScgc3VjY2Vzc2Z1bGx5YDtcbiAgICAgICAgICByZXR1cm4geyBjb250ZW50OiBbeyB0eXBlOiBcInRleHRcIiwgdGV4dDogYCR7Y29udGV4dC5nZXRQZXJzb25hSW5kaWNhdG9yKCl9JHtzdWNjZXNzTXNnfWAgfV0gfTtcbiAgICAgICAgfSBjYXRjaCAodGVtcGxhdGVFcnJvcikge1xuICAgICAgICAgIC8vIENoZWNrIGlmIGl0J3MgYSBkdXBsaWNhdGUgZXJyb3JcbiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gdGVtcGxhdGVFcnJvciBpbnN0YW5jZW9mIEVycm9yID8gdGVtcGxhdGVFcnJvci5tZXNzYWdlIDogU3RyaW5nKHRlbXBsYXRlRXJyb3IpO1xuICAgICAgICAgIGNvbnN0IGVycm9yUmVzcG9uc2UgPSBtZXNzYWdlLmluY2x1ZGVzKCdhbHJlYWR5IGV4aXN0cycpXG4gICAgICAgICAgICA/IGZvcm1hdER1cGxpY2F0ZUVycm9yKEVsZW1lbnRUeXBlLlRFTVBMQVRFLCB2YWxpZGF0ZWROYW1lKVxuICAgICAgICAgICAgOiBmb3JtYXRFeGNlcHRpb25FcnJvcih0ZW1wbGF0ZUVycm9yLCAnY3JlYXRlJywgRWxlbWVudFR5cGUuVEVNUExBVEUsIHZhbGlkYXRlZE5hbWUpO1xuICAgICAgICAgIHJldHVybiBhZGRQZXJzb25hSW5kaWNhdG9yKGVycm9yUmVzcG9uc2UsIGNvbnRleHQuZ2V0UGVyc29uYUluZGljYXRvcigpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjYXNlIEVsZW1lbnRUeXBlLkFHRU5UOiB7XG4gICAgICAgIC8vIFYyIGZpZWxkcyBhcmUgbWVyZ2VkIGludG8gbWV0YWRhdGEgYnkgdGhlIGRpc3BhdGNoZXIgKE1DUEFRTEhhbmRsZXIpLlxuICAgICAgICAvLyBHb2FsIG5vcm1hbGl6YXRpb24gKHN0cmluZ+KGkm9iamVjdCkgaXMgaGFuZGxlZCBieSBBZ2VudE1hbmFnZXIuY3JlYXRlKCkuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gSXNzdWUgIzcyMjogdjIgZHVhbC1maWVsZCBhcmNoaXRlY3R1cmUg4oCUIGVhY2ggZmllbGQgZ29lcyB3aGVyZSBpdCBiZWxvbmdzLlxuICAgICAgICAgIC8vIEFnZW50TWFuYWdlci5jcmVhdGUoKSAzcmQgcGFyYW0gPSBiZWhhdmlvcmFsIGRpcmVjdGl2ZXMgKGFnZW50Lmluc3RydWN0aW9ucykuXG4gICAgICAgICAgLy8gbWV0YWRhdGEuY29udGVudCA9IHJlZmVyZW5jZSBtYXRlcmlhbCAobWFya2Rvd24gYm9keSBhZnRlciBmcm9udG1hdHRlcikuXG4gICAgICAgICAgY29uc3QgYWdlbnRJbnN0cnVjdGlvbnMgPSBpbnN0cnVjdGlvbnMgfHwgJyc7XG4gICAgICAgICAgY29uc3QgYWdlbnRDb250ZW50ID0gY29udGVudCB8fCAnJztcbiAgICAgICAgICBjb25zdCBhZ2VudCA9IGF3YWl0IGNvbnRleHQuYWdlbnRNYW5hZ2VyLmNyZWF0ZShcbiAgICAgICAgICAgIHZhbGlkYXRlZE5hbWUsXG4gICAgICAgICAgICB2YWxpZGF0ZWREZXNjcmlwdGlvbixcbiAgICAgICAgICAgIGFnZW50SW5zdHJ1Y3Rpb25zLFxuICAgICAgICAgICAgeyAuLi5zYW5pdGl6ZWQsIGNvbnRlbnQ6IGFnZW50Q29udGVudCB9XG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoYWdlbnQuc3VjY2Vzcykge1xuICAgICAgICAgICAgY29uc3QgYmFzZU1lc3NhZ2UgPSBhZ2VudC5tZXNzYWdlICYmIGFnZW50Lm1lc3NhZ2UudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnY3JlYXRlZCBhZ2VudCcpXG4gICAgICAgICAgICAgID8gYWdlbnQubWVzc2FnZVxuICAgICAgICAgICAgICA6IGBDcmVhdGVkIGFnZW50ICcke3ZhbGlkYXRlZE5hbWV9JyBzdWNjZXNzZnVsbHlgO1xuICAgICAgICAgICAgY29uc3Qgc3VjY2Vzc01zZyA9IGAke3dhcm5pbmdUZXh0feKchSAke2Jhc2VNZXNzYWdlfWA7XG4gICAgICAgICAgICByZXR1cm4geyBjb250ZW50OiBbeyB0eXBlOiBcInRleHRcIiwgdGV4dDogYCR7Y29udGV4dC5nZXRQZXJzb25hSW5kaWNhdG9yKCl9JHtzdWNjZXNzTXNnfWAgfV0gfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gRklYOiBJc3N1ZSAjMjAgLSBJbmNsdWRlIFwiZmFpbGVkIHRvIGNyZWF0ZVwiIGluIGVycm9yIG1lc3NhZ2UgZm9yIHRlc3QgY29tcGF0aWJpbGl0eVxuICAgICAgICAgIGNvbnN0IGZhaWx1cmVSZWFzb24gPSBhZ2VudC5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yJztcbiAgICAgICAgICByZXR1cm4gZm9ybWF0U2ltcGxlRXJyb3JSZXNwb25zZShgRmFpbGVkIHRvIGNyZWF0ZSBhZ2VudDogJHtmYWlsdXJlUmVhc29ufWApO1xuICAgICAgICB9IGNhdGNoIChhZ2VudEVycm9yKSB7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGFnZW50RXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGFnZW50RXJyb3IubWVzc2FnZSA6IFN0cmluZyhhZ2VudEVycm9yKTtcbiAgICAgICAgICBjb25zdCBlcnJvclJlc3BvbnNlID0gbWVzc2FnZS5pbmNsdWRlcygnYWxyZWFkeSBleGlzdHMnKVxuICAgICAgICAgICAgPyBmb3JtYXREdXBsaWNhdGVFcnJvcihFbGVtZW50VHlwZS5BR0VOVCwgdmFsaWRhdGVkTmFtZSlcbiAgICAgICAgICAgIDogZm9ybWF0RXhjZXB0aW9uRXJyb3IoYWdlbnRFcnJvciwgJ2NyZWF0ZScsIEVsZW1lbnRUeXBlLkFHRU5ULCB2YWxpZGF0ZWROYW1lKTtcbiAgICAgICAgICByZXR1cm4gYWRkUGVyc29uYUluZGljYXRvcihlcnJvclJlc3BvbnNlLCBjb250ZXh0LmdldFBlcnNvbmFJbmRpY2F0b3IoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY2FzZSBFbGVtZW50VHlwZS5NRU1PUlk6IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBtZW1vcnkgPSBhd2FpdCBjb250ZXh0Lm1lbW9yeU1hbmFnZXIuY3JlYXRlKHtcbiAgICAgICAgICAgIC4uLnNhbml0aXplZCxcbiAgICAgICAgICAgIG5hbWU6IHZhbGlkYXRlZE5hbWUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogdmFsaWRhdGVkRGVzY3JpcHRpb24sXG4gICAgICAgICAgICBjb250ZW50OiBjb250ZW50LFxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zOiBpbnN0cnVjdGlvbnMsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29uc3Qgc3VjY2Vzc01zZyA9IGAke3dhcm5pbmdUZXh0feKchSBDcmVhdGVkIG1lbW9yeSAnJHttZW1vcnkubWV0YWRhdGEubmFtZX0nIHN1Y2Nlc3NmdWxseWA7XG4gICAgICAgICAgcmV0dXJuIHsgY29udGVudDogW3sgdHlwZTogXCJ0ZXh0XCIsIHRleHQ6IGAke2NvbnRleHQuZ2V0UGVyc29uYUluZGljYXRvcigpfSR7c3VjY2Vzc01zZ31gIH1dIH07XG4gICAgICAgIH0gY2F0Y2ggKG1lbW9yeUVycm9yKSB7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IG1lbW9yeUVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBtZW1vcnlFcnJvci5tZXNzYWdlIDogU3RyaW5nKG1lbW9yeUVycm9yKTtcbiAgICAgICAgICBjb25zdCBlcnJvclJlc3BvbnNlID0gbWVzc2FnZS5pbmNsdWRlcygnYWxyZWFkeSBleGlzdHMnKVxuICAgICAgICAgICAgPyBmb3JtYXREdXBsaWNhdGVFcnJvcihFbGVtZW50VHlwZS5NRU1PUlksIHZhbGlkYXRlZE5hbWUpXG4gICAgICAgICAgICA6IGZvcm1hdEV4Y2VwdGlvbkVycm9yKG1lbW9yeUVycm9yLCAnY3JlYXRlJywgRWxlbWVudFR5cGUuTUVNT1JZLCB2YWxpZGF0ZWROYW1lKTtcbiAgICAgICAgICByZXR1cm4gYWRkUGVyc29uYUluZGljYXRvcihlcnJvclJlc3BvbnNlLCBjb250ZXh0LmdldFBlcnNvbmFJbmRpY2F0b3IoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY2FzZSBFbGVtZW50VHlwZS5FTlNFTUJMRToge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIElzc3VlICM0NjY6IFJlc29sdmUgbWlzc2luZyBlbGVtZW50X3R5cGUgdmlhIHBvcnRmb2xpbyBsb29rdXAgYmVmb3JlIGNyZWF0ZVxuICAgICAgICAgIGNvbnN0IHJlc29sdXRpb25SZXN1bHQgPSBhd2FpdCByZXNvbHZlRWxlbWVudFR5cGVzKFxuICAgICAgICAgICAgc2FuaXRpemVkLmVsZW1lbnRzIHx8IFtdLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBza2lsbE1hbmFnZXI6IGNvbnRleHQuc2tpbGxNYW5hZ2VyLFxuICAgICAgICAgICAgICB0ZW1wbGF0ZU1hbmFnZXI6IGNvbnRleHQudGVtcGxhdGVNYW5hZ2VyLFxuICAgICAgICAgICAgICBhZ2VudE1hbmFnZXI6IGNvbnRleHQuYWdlbnRNYW5hZ2VyLFxuICAgICAgICAgICAgICBtZW1vcnlNYW5hZ2VyOiBjb250ZXh0Lm1lbW9yeU1hbmFnZXIsXG4gICAgICAgICAgICAgIHBlcnNvbmFNYW5hZ2VyOiBjb250ZXh0LnBlcnNvbmFNYW5hZ2VyLFxuICAgICAgICAgICAgICBlbnNlbWJsZU1hbmFnZXI6IGNvbnRleHQuZW5zZW1ibGVNYW5hZ2VyLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgcmVzb2x1dGlvbldhcm5pbmdUZXh0ID0gZm9ybWF0RWxlbWVudFJlc29sdXRpb25XYXJuaW5ncyhyZXNvbHV0aW9uUmVzdWx0KTtcblxuICAgICAgICAgIGNvbnN0IGVuc2VtYmxlID0gYXdhaXQgY29udGV4dC5lbnNlbWJsZU1hbmFnZXIuY3JlYXRlKHtcbiAgICAgICAgICAgIC4uLnNhbml0aXplZCxcbiAgICAgICAgICAgIG5hbWU6IHZhbGlkYXRlZE5hbWUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogdmFsaWRhdGVkRGVzY3JpcHRpb24sXG4gICAgICAgICAgICBlbGVtZW50czogcmVzb2x1dGlvblJlc3VsdC5yZXNvbHZlZCxcbiAgICAgICAgICAgIGluc3RydWN0aW9uczogaW5zdHJ1Y3Rpb25zLFxuICAgICAgICAgICAgY29udGVudDogY29udGVudCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCBzdWNjZXNzTXNnID0gYCR7d2FybmluZ1RleHR9JHtyZXNvbHV0aW9uV2FybmluZ1RleHR94pyFIENyZWF0ZWQgZW5zZW1ibGUgJyR7ZW5zZW1ibGUubWV0YWRhdGEubmFtZX0nIHN1Y2Nlc3NmdWxseWA7XG4gICAgICAgICAgcmV0dXJuIHsgY29udGVudDogW3sgdHlwZTogXCJ0ZXh0XCIsIHRleHQ6IGAke2NvbnRleHQuZ2V0UGVyc29uYUluZGljYXRvcigpfSR7c3VjY2Vzc01zZ31gIH1dIH07XG4gICAgICAgIH0gY2F0Y2ggKGVuc2VtYmxlRXJyb3IpIHtcbiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gZW5zZW1ibGVFcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZW5zZW1ibGVFcnJvci5tZXNzYWdlIDogU3RyaW5nKGVuc2VtYmxlRXJyb3IpO1xuICAgICAgICAgIGNvbnN0IGVycm9yUmVzcG9uc2UgPSBtZXNzYWdlLmluY2x1ZGVzKCdhbHJlYWR5IGV4aXN0cycpXG4gICAgICAgICAgICA/IGZvcm1hdER1cGxpY2F0ZUVycm9yKEVsZW1lbnRUeXBlLkVOU0VNQkxFLCB2YWxpZGF0ZWROYW1lKVxuICAgICAgICAgICAgOiBmb3JtYXRFeGNlcHRpb25FcnJvcihlbnNlbWJsZUVycm9yLCAnY3JlYXRlJywgRWxlbWVudFR5cGUuRU5TRU1CTEUsIHZhbGlkYXRlZE5hbWUpO1xuICAgICAgICAgIHJldHVybiBhZGRQZXJzb25hSW5kaWNhdG9yKGVycm9yUmVzcG9uc2UsIGNvbnRleHQuZ2V0UGVyc29uYUluZGljYXRvcigpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGDinYwgRWxlbWVudCB0eXBlICcke3R5cGV9JyBpcyBub3QgeWV0IHN1cHBvcnRlZCBmb3IgY3JlYXRpb25gXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nZ2VyLmVycm9yKCdFbGVtZW50Q1JVREhhbmRsZXIuY3JlYXRlRWxlbWVudCcsIGVycm9yKTtcbiAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcic7XG4gICAgY29uc3QgaW5kaWNhdG9yID0gY29udGV4dC5nZXRQZXJzb25hSW5kaWNhdG9yKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICB0ZXh0OiBgJHtpbmRpY2F0b3J94p2MIEZhaWxlZCB0byBjcmVhdGUgZWxlbWVudDogJHttZXNzYWdlfWBcbiAgICAgIH1dXG4gICAgfTtcbiAgfVxufSJdfQ==
270
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlRWxlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9oYW5kbGVycy9lbGVtZW50LWNydWQvY3JlYXRlRWxlbWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUVILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hHLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIseUJBQXlCLEVBQ3pCLDJCQUEyQixFQUMzQiwrQkFBK0IsRUFDL0IsNkJBQTZCLEVBQzdCLCtCQUErQixFQUNoQyxNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUV6RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0MsbUdBQW1HO0FBQ25HLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsb0JBQW9CLEVBQ3BCLG9CQUFvQixFQUNyQixNQUFNLHdCQUF3QixDQUFDO0FBOEdoQzs7R0FFRztBQUNILFNBQVMsbUJBQW1CLENBQUMsUUFBeUIsRUFBRSxTQUFpQjtJQUN2RSxPQUFPO1FBQ0wsR0FBRyxRQUFRO1FBQ1gsT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNsQyxHQUFHLENBQUM7WUFDSixJQUFJLEVBQUUsR0FBRyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRTtTQUM5QixDQUFDLENBQUM7S0FDSixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sQ0FBQyxLQUFLLFVBQVUsYUFBYSxDQUFDLE9BQTJCLEVBQUUsSUFBdUI7SUFDdEYs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cHJlc3Npb25cbiAqIFRoaXMgZmlsZSBkZWxlZ2F0ZXMgZWxlbWVudCBjcmVhdGlvbiB0byBzcGVjaWFsaXplZCBtYW5hZ2Vycy5cbiAqIEF1ZGl0IGxvZ2dpbmcgaGFwcGVucyBpbiB0aGUgbWFuYWdlcnMgdGhlbXNlbHZlcyAoUGVyc29uYU1hbmFnZXIsIFNraWxsTWFuYWdlciwgZXRjLikuXG4gKiBAc2VjdXJpdHktYXVkaXQtc3VwcHJlc3MgRE1DUC1TRUMtMDA2XG4gKi9cblxuaW1wb3J0IHsgRWxlbWVudFR5cGUgfSBmcm9tICcuLi8uLi9wb3J0Zm9saW8vUG9ydGZvbGlvTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBTRUNVUklUWV9MSU1JVFMgfSBmcm9tICcuLi8uLi9zZWN1cml0eS9jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgc2FuaXRpemVJbnB1dCwgdmFsaWRhdGVDb250ZW50U2l6ZSwgdmFsaWRhdGVDYXRlZ29yeSB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L0lucHV0VmFsaWRhdG9yLmpzJztcbmltcG9ydCB7XG4gIHNhbml0aXplTWV0YWRhdGEsXG4gIG5vcm1hbGl6ZUVsZW1lbnRUeXBlSW5wdXQsXG4gIGZvcm1hdFZhbGlkRWxlbWVudFR5cGVzTGlzdCxcbiAgZGV0ZWN0VW5rbm93bk1ldGFkYXRhUHJvcGVydGllcyxcbiAgZm9ybWF0VW5rbm93blByb3BlcnR5V2FybmluZ3MsXG4gIGZvcm1hdEVsZW1lbnRSZXNvbHV0aW9uV2FybmluZ3Ncbn0gZnJvbSAnLi9oZWxwZXJzLmpzJztcbmltcG9ydCB7IHJlc29sdmVFbGVtZW50VHlwZXMgfSBmcm9tICcuLi8uLi91dGlscy9lbGVtZW50VHlwZVJlc29sdmVyLmpzJztcbmltcG9ydCB7IEVsZW1lbnRDcnVkQ29udGV4dCB9IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9nZ2VyLmpzJztcbi8vIEZJWDogSXNzdWUgIzI4MSAtIFNlY3VyaXR5TW9uaXRvciBpbXBvcnQgcmVtb3ZlZCwgcGVyc29uYSBsb2dnaW5nIG5vdyBpbiBQZXJzb25hTWFuYWdlci5jcmVhdGUoKVxuaW1wb3J0IHtcbiAgZm9ybWF0U2ltcGxlRXJyb3JSZXNwb25zZSxcbiAgZm9ybWF0RHVwbGljYXRlRXJyb3IsXG4gIGZvcm1hdEV4Y2VwdGlvbkVycm9yXG59IGZyb20gJy4vcmVzcG9uc2VGb3JtYXR0ZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBNY3BUb29sUmVzcG9uc2UgfSBmcm9tICcuL3Jlc3BvbnNlRm9ybWF0dGVyLmpzJztcbmltcG9ydCB0eXBlIHsgRW5zZW1ibGVFbGVtZW50IH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvZW5zZW1ibGVzL3R5cGVzLmpzJztcblxuLyoqXG4gKiBBcmd1bWVudHMgZm9yIGNyZWF0aW5nIGEgbmV3IGVsZW1lbnQuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENyZWF0ZSBhIHBlcnNvbmFcbiAqIHsgbmFtZTogJ2hlbHBlcicsIHR5cGU6ICdwZXJzb25hJywgZGVzY3JpcHRpb246ICdBIGhlbHBmdWwgYXNzaXN0YW50JywgaW5zdHJ1Y3Rpb25zOiAnQmUgaGVscGZ1bCcgfVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDcmVhdGUgYW4gZW5zZW1ibGUgd2l0aCBlbGVtZW50c1xuICoge1xuICogICBuYW1lOiAnbXktZW5zZW1ibGUnLFxuICogICB0eXBlOiAnZW5zZW1ibGUnLFxuICogICBkZXNjcmlwdGlvbjogJ0EgY29vcmRpbmF0ZWQgZ3JvdXAnLFxuICogICBlbGVtZW50czogW3sgbmFtZTogJ3NraWxsMScsIHR5cGU6ICdza2lsbCcsIHJvbGU6ICdwcmltYXJ5JywgcHJpb3JpdHk6IDEwMCwgYWN0aXZhdGlvbjogJ2Fsd2F5cycgfV1cbiAqIH1cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ3JlYXRlIGEgVjIgYWdlbnQgd2l0aCBnb2FsIGNvbmZpZ3VyYXRpb25cbiAqIHtcbiAqICAgbmFtZTogJ3Rhc2stcnVubmVyJyxcbiAqICAgdHlwZTogJ2FnZW50JyxcbiAqICAgZGVzY3JpcHRpb246ICdFeGVjdXRlcyB0YXNrcyBhdXRvbm9tb3VzbHknLFxuICogICBnb2FsOiB7XG4gKiAgICAgdGVtcGxhdGU6ICdDb21wbGV0ZSB0aGUgZm9sbG93aW5nIHRhc2s6IHtvYmplY3RpdmV9JyxcbiAqICAgICBwYXJhbWV0ZXJzOiBbeyBuYW1lOiAnb2JqZWN0aXZlJywgdHlwZTogJ3N0cmluZycsIHJlcXVpcmVkOiB0cnVlIH1dLFxuICogICAgIHN1Y2Nlc3NDcml0ZXJpYTogWydUYXNrIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHknLCAnUmVzdWx0cyBkb2N1bWVudGVkJ11cbiAqICAgfSxcbiAqICAgYWN0aXZhdGVzOiB7IHNraWxsczogWydjb2RlLXJldmlldyddLCBwZXJzb25hczogWydkZXZlbG9wZXInXSB9XG4gKiB9XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlRWxlbWVudEFyZ3Mge1xuICBuYW1lOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgLyoqIFJlZmVyZW5jZSBtYXRlcmlhbCwga25vd2xlZGdlLCBjb250ZXh0IChpbmZvcm1hdGlvbmFsKS4gRm9yIHRlbXBsYXRlczogdGVtcGxhdGUgYm9keS4gKi9cbiAgY29udGVudD86IHN0cmluZztcbiAgLyoqIEJlaGF2aW9yYWwgZGlyZWN0aXZlcyAoY29tbWFuZCB2b2ljZSkuIEZvciBwZXJzb25hczogYmVoYXZpb3JhbCBwcm9maWxlLiBGb3Igc2tpbGxzOiBob3cgdG8gYXBwbHkuIEZvciBhZ2VudHM6IGFnZW50IGJlaGF2aW9yYWwgcHJvdG9jb2wuICovXG4gIGluc3RydWN0aW9ucz86IHN0cmluZztcbiAgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLyoqXG4gICAqIEZvciBlbnNlbWJsZXMgLSBhcnJheSBvZiBlbGVtZW50IHJlZmVyZW5jZXMuXG4gICAqIElzc3VlICMyNzg6IExMTXMgb2Z0ZW4gcGFzcyBlbGVtZW50cyBhdCB0b3AgbGV2ZWwsIG5vdCBpbnNpZGUgbWV0YWRhdGEuXG4gICAqL1xuICBlbGVtZW50cz86IEVuc2VtYmxlRWxlbWVudFtdO1xuXG4gIC8vIFYyIEFnZW50IGZpZWxkcyAoY2FuIGFsc28gYmUgcGFzc2VkIGluIG1ldGFkYXRhKVxuICAvKipcbiAgICogRm9yIFYyIGFnZW50cyAtIGdvYWwgY29uZmlndXJhdGlvbiB3aXRoIHRlbXBsYXRlIGFuZCBwYXJhbWV0ZXJzLlxuICAgKiBDYW4gYmUgcGFzc2VkIGFzIGEgc2ltcGxlIHN0cmluZyAod2lsbCBiZSBjb252ZXJ0ZWQgdG8gVjIgZm9ybWF0KVxuICAgKiBvciBhcyBhIGZ1bGwgVjIgY29uZmlnIG9iamVjdC5cbiAgICpcbiAgICogQHNpbmNlIHYyLjAuMCAtIEFnZW50IFYyIEluZnJhc3RydWN0dXJlXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIFNpbXBsZSBzdHJpbmcgZ29hbCAoYXV0by1jb252ZXJ0ZWQgdG8gVjIgZm9ybWF0KVxuICAgKiBnb2FsOiAnQ29tcGxldGUgdGhlIGFuYWx5c2lzIHRhc2snXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIEZ1bGwgVjIgY29uZmlnIHdpdGggcGFyYW1ldGVyc1xuICAgKiBnb2FsOiB7XG4gICAqICAgdGVtcGxhdGU6ICdBbmFseXplIHt0YXJnZXR9IGZvciB7cHVycG9zZX0nLFxuICAgKiAgIHBhcmFtZXRlcnM6IFtcbiAgICogICAgIHsgbmFtZTogJ3RhcmdldCcsIHR5cGU6ICdzdHJpbmcnLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgKiAgICAgeyBuYW1lOiAncHVycG9zZScsIHR5cGU6ICdzdHJpbmcnLCByZXF1aXJlZDogdHJ1ZSB9XG4gICAqICAgXSxcbiAgICogICBzdWNjZXNzQ3JpdGVyaWE6IFsnQW5hbHlzaXMgY29tcGxldGUnLCAnUmVwb3J0IGdlbmVyYXRlZCddXG4gICAqIH1cbiAgICovXG4gIGdvYWw/OiBzdHJpbmcgfCB7XG4gICAgdGVtcGxhdGU6IHN0cmluZztcbiAgICBwYXJhbWV0ZXJzPzogQXJyYXk8e1xuICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgdHlwZTogJ3N0cmluZycgfCAnbnVtYmVyJyB8ICdib29sZWFuJztcbiAgICAgIHJlcXVpcmVkOiBib29sZWFuO1xuICAgICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgICBkZWZhdWx0Pzogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbjtcbiAgICB9PjtcbiAgICBzdWNjZXNzQ3JpdGVyaWE/OiBzdHJpbmdbXTtcbiAgfTtcbiAgLyoqXG4gICAqIEZvciBWMiBhZ2VudHMgLSBlbGVtZW50cyB0byBhY3RpdmF0ZSB3aGVuIGFnZW50IGV4ZWN1dGVzLlxuICAgKiBAc2luY2UgdjIuMC4wIC0gQWdlbnQgVjIgSW5mcmFzdHJ1Y3R1cmVcbiAgICovXG4gIGFjdGl2YXRlcz86IHtcbiAgICBwZXJzb25hcz86IHN0cmluZ1tdO1xuICAgIHNraWxscz86IHN0cmluZ1tdO1xuICAgIG1lbW9yaWVzPzogc3RyaW5nW107XG4gICAgdGVtcGxhdGVzPzogc3RyaW5nW107XG4gICAgZW5zZW1ibGVzPzogc3RyaW5nW107XG4gICAgW2tleTogc3RyaW5nXTogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG4gIH07XG4gIC8qKlxuICAgKiBGb3IgVjIgYWdlbnRzIC0gdG9vbCBjb25maWd1cmF0aW9uIChpbmZvcm1hdGlvbmFsKS5cbiAgICogQHNpbmNlIHYyLjAuMCAtIEFnZW50IFYyIEluZnJhc3RydWN0dXJlXG4gICAqL1xuICB0b29scz86IHtcbiAgICBhbGxvd2VkOiBzdHJpbmdbXTtcbiAgICBkZW5pZWQ/OiBzdHJpbmdbXTtcbiAgfTtcbiAgLyoqXG4gICAqIEZvciBWMiBhZ2VudHMgLSBjdXN0b20gc3lzdGVtIHByb21wdCBmb3IgTExNIGNvbnRleHQuXG4gICAqIEBzaW5jZSB2Mi4wLjAgLSBBZ2VudCBWMiBJbmZyYXN0cnVjdHVyZVxuICAgKi9cbiAgc3lzdGVtUHJvbXB0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEhlbHBlciB0byBhZGQgcGVyc29uYSBpbmRpY2F0b3IgcHJlZml4IHRvIHJlc3BvbnNlXG4gKi9cbmZ1bmN0aW9uIGFkZFBlcnNvbmFJbmRpY2F0b3IocmVzcG9uc2U6IE1jcFRvb2xSZXNwb25zZSwgaW5kaWNhdG9yOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5yZXNwb25zZSxcbiAgICBjb250ZW50OiByZXNwb25zZS5jb250ZW50Lm1hcChjID0+ICh7XG4gICAgICAuLi5jLFxuICAgICAgdGV4dDogYCR7aW5kaWNhdG9yfSR7Yy50ZXh0fWBcbiAgICB9KSlcbiAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQoY29udGV4dDogRWxlbWVudENydWRDb250ZXh0LCBhcmdzOiBDcmVhdGVFbGVtZW50QXJncykge1xuICBhd2FpdCBjb250ZXh0LmVuc3VyZUluaXRpYWxpemVkKCk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB7IG5hbWUsIHR5cGUsIGRlc2NyaXB0aW9uLCBjb250ZW50LCBpbnN0cnVjdGlvbnMsIG1ldGFkYXRhIH0gPSBhcmdzO1xuXG4gICAgY29uc3QgeyB0eXBlOiBub3JtYWxpemVkVHlwZSB9ID0gbm9ybWFsaXplRWxlbWVudFR5cGVJbnB1dCh0eXBlKTtcblxuICAgIGlmICghbm9ybWFsaXplZFR5cGUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYOKdjCBJbnZhbGlkIGVsZW1lbnQgdHlwZSAnJHt0eXBlfScuIFZhbGlkIHR5cGVzOiAke2Zvcm1hdFZhbGlkRWxlbWVudFR5cGVzTGlzdCgpfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgdmFsaWRhdGVkTmFtZSA9IHNhbml0aXplSW5wdXQobmFtZSwgU0VDVVJJVFlfTElNSVRTLk1BWF9GSUxFTkFNRV9MRU5HVEgpO1xuICAgIGNvbnN0IHZhbGlkYXRlZERlc2NyaXB0aW9uID0gc2FuaXRpemVJbnB1dChkZXNjcmlwdGlvbiwgU0VDVVJJVFlfTElNSVRTLk1BWF9NRVRBREFUQV9GSUVMRF9MRU5HVEgpO1xuXG4gICAgaWYgKGNvbnRlbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhbGlkYXRlQ29udGVudFNpemUoY29udGVudCwgU0VDVVJJVFlfTElNSVRTLk1BWF9DT05URU5UX0xFTkdUSCk7XG4gICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYOKdjCBDb250ZW50IHRvbyBsYXJnZTogJHtlcnJvci5tZXNzYWdlfS4gTWF4aW11bSBhbGxvd2VkIHNpemUgaXMgJHtTRUNVUklUWV9MSU1JVFMuTUFYX0NPTlRFTlRfTEVOR1RIfSBjaGFyYWN0ZXJzICgke01hdGguZmxvb3IoU0VDVVJJVFlfTElNSVRTLk1BWF9DT05URU5UX0xFTkdUSCAvIDEwMjQpfUtCKS5gXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJc3N1ZSAjNjAyIHJlc29sdmVkOiBCb3RoICdpbnN0cnVjdGlvbnMnIGFuZCAnY29udGVudCcgYXJlIGZpcnN0LWNsYXNzIGZpZWxkcy5cbiAgICAvLyBpbnN0cnVjdGlvbnMgPSBiZWhhdmlvcmFsIGRpcmVjdGl2ZXMgKGNvbW1hbmQgdm9pY2UsIFwiWW91IEFSRS4uLlwiLCBcIkFMV0FZUy4uLlwiKVxuICAgIC8vIGNvbnRlbnQgPSByZWZlcmVuY2UgbWF0ZXJpYWwgKGluZm9ybWF0aW9uYWwsIGRvbWFpbiBrbm93bGVkZ2UsIGV4YW1wbGVzKVxuICAgIGlmIChpbnN0cnVjdGlvbnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhbGlkYXRlQ29udGVudFNpemUoaW5zdHJ1Y3Rpb25zLCBTRUNVUklUWV9MSU1JVFMuTUFYX0NPTlRFTlRfTEVOR1RIKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBg4p2MIEluc3RydWN0aW9ucyB0b28gbGFyZ2U6ICR7ZXJyb3IubWVzc2FnZX0uIE1heGltdW0gYWxsb3dlZCBzaXplIGlzICR7U0VDVVJJVFlfTElNSVRTLk1BWF9DT05URU5UX0xFTkdUSH0gY2hhcmFjdGVycy5gXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBFbGVtZW50LXNwZWNpZmljIGZpZWxkcyAoZW5zZW1ibGUgZWxlbWVudHMsIGFnZW50IFYyIGZpZWxkcykgYXJlIG1lcmdlZCBpbnRvXG4gICAgLy8gbWV0YWRhdGEgYnkgdGhlIGRpc3BhdGNoZXIgKE1DUEFRTEhhbmRsZXIpLiBjcmVhdGVFbGVtZW50IGp1c3Qgc2FuaXRpemVzIGFuZCBkZWxlZ2F0ZXMuXG4gICAgY29uc3Qgc2FuaXRpemVkID0gc2FuaXRpemVNZXRhZGF0YShtZXRhZGF0YSk7XG5cbiAgICAvLyBJc3N1ZSAjNjIxOiBWYWxpZGF0ZSBjYXRlZ29yeSBmb3JtYXQgZm9yIGVsZW1lbnQgdHlwZXMgdGhhdCBzdXBwb3J0IGl0XG4gICAgLy8gUGVyc29uYSBhbHNvIHN1cHBvcnRzIGNhdGVnb3JpZXMgKHZhbGlkYXRlZCBpbnRlcm5hbGx5IGJ5IFBlcnNvbmFNYW5hZ2VyKSDigJQgaW5jbHVkZSBoZXJlIGZvciBjb25zaXN0ZW50IGVhcmx5IGVycm9yIHJlcG9ydGluZ1xuICAgIGNvbnN0IENBVEVHT1JZX1RZUEVTID0gbmV3IFNldChbRWxlbWVudFR5cGUuUEVSU09OQSwgRWxlbWVudFR5cGUuU0tJTEwsIEVsZW1lbnRUeXBlLlRFTVBMQVRFLCBFbGVtZW50VHlwZS5NRU1PUlldKTtcbiAgICBpZiAoc2FuaXRpemVkLmNhdGVnb3J5ICYmIENBVEVHT1JZX1RZUEVTLmhhcyhub3JtYWxpemVkVHlwZSkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhbGlkYXRlQ2F0ZWdvcnkoc2FuaXRpemVkLmNhdGVnb3J5IGFzIHN0cmluZyk7XG4gICAgICB9IGNhdGNoIChjYXRlZ29yeUVycm9yOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIGZvcm1hdFNpbXBsZUVycm9yUmVzcG9uc2UoXG4gICAgICAgICAgYEludmFsaWQgY2F0ZWdvcnkgJyR7c2FuaXRpemVkLmNhdGVnb3J5fSc6ICR7Y2F0ZWdvcnlFcnJvci5tZXNzYWdlfWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEZXRlY3QgdW5rbm93biBtZXRhZGF0YSBwcm9wZXJ0aWVzIGFuZCBnZW5lcmF0ZSB3YXJuaW5ncyBmb3IgTExNIGZlZWRiYWNrXG4gICAgY29uc3QgdW5rbm93blByb3BlcnR5V2FybmluZ3MgPSBkZXRlY3RVbmtub3duTWV0YWRhdGFQcm9wZXJ0aWVzKFxuICAgICAgbm9ybWFsaXplZFR5cGUsXG4gICAgICBtZXRhZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICk7XG4gICAgY29uc3Qgd2FybmluZ1RleHQgPSBmb3JtYXRVbmtub3duUHJvcGVydHlXYXJuaW5ncyh1bmtub3duUHJvcGVydHlXYXJuaW5ncyk7XG5cbiAgICAvLyBMb2cgd2FybmluZ3MgZm9yIGRlYnVnZ2luZyB3aXRoIHN0cnVjdHVyZWQgZGF0YSBmb3IgYmV0dGVyIG9ic2VydmFiaWxpdHlcbiAgICBpZiAodW5rbm93blByb3BlcnR5V2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgbG9nZ2VyLndhcm4oYFtjcmVhdGVFbGVtZW50XSBVbmtub3duIG1ldGFkYXRhIHByb3BlcnRpZXMgZGV0ZWN0ZWRgLCB7XG4gICAgICAgIGVsZW1lbnRUeXBlOiBub3JtYWxpemVkVHlwZSxcbiAgICAgICAgZWxlbWVudE5hbWU6IG5hbWUsXG4gICAgICAgIHdhcm5pbmdDb3VudDogdW5rbm93blByb3BlcnR5V2FybmluZ3MubGVuZ3RoLFxuICAgICAgICB1bmtub3duUHJvcGVydGllczogdW5rbm93blByb3BlcnR5V2FybmluZ3MubWFwKHcgPT4gKHtcbiAgICAgICAgICBwcm9wZXJ0eTogdy5wcm9wZXJ0eSxcbiAgICAgICAgICBzdWdnZXN0aW9uOiB3LnN1Z2dlc3Rpb25cbiAgICAgICAgfSkpXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKG5vcm1hbGl6ZWRUeXBlKSB7XG4gICAgICBjYXNlIEVsZW1lbnRUeXBlLlBFUlNPTkE6IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBJc3N1ZSAjNjAyOiBCb3RoICdpbnN0cnVjdGlvbnMnIGFuZCAnY29udGVudCcgYXJlIGZpcnN0LWNsYXNzIGZpZWxkcy5cbiAgICAgICAgICBjb25zdCBwZXJzb25hID0gYXdhaXQgY29udGV4dC5wZXJzb25hTWFuYWdlci5jcmVhdGUoe1xuICAgICAgICAgICAgLi4uc2FuaXRpemVkLFxuICAgICAgICAgICAgbmFtZTogdmFsaWRhdGVkTmFtZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB2YWxpZGF0ZWREZXNjcmlwdGlvbixcbiAgICAgICAgICAgIGluc3RydWN0aW9uczogaW5zdHJ1Y3Rpb25zLFxuICAgICAgICAgICAgY29udGVudDogY29udGVudCxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IHN1Y2Nlc3NNc2cgPSBgJHt3YXJuaW5nVGV4dH3inIUgQ3JlYXRlZCBwZXJzb25hICcke3BlcnNvbmEubWV0YWRhdGEubmFtZX0nIHN1Y2Nlc3NmdWxseWA7XG4gICAgICAgICAgcmV0dXJuIHsgY29udGVudDogW3sgdHlwZTogXCJ0ZXh0XCIsIHRleHQ6IGAke2NvbnRleHQuZ2V0UGVyc29uYUluZGljYXRvcigpfSR7c3VjY2Vzc01zZ31gIH1dIH07XG4gICAgICAgIH0gY2F0Y2ggKHBlcnNvbmFFcnJvcikge1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBwZXJzb25hRXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IHBlcnNvbmFFcnJvci5tZXNzYWdlIDogU3RyaW5nKHBlcnNvbmFFcnJvcik7XG4gICAgICAgICAgaWYgKG1lc3NhZ2UuaW5jbHVkZXMoJ2luc3RydWN0aW9ucyBhcmUgcmVxdWlyZWQnKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdFNpbXBsZUVycm9yUmVzcG9uc2UobWVzc2FnZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGVycm9yUmVzcG9uc2UgPSBtZXNzYWdlLmluY2x1ZGVzKCdhbHJlYWR5IGV4aXN0cycpXG4gICAgICAgICAgICA/IGZvcm1hdER1cGxpY2F0ZUVycm9yKEVsZW1lbnRUeXBlLlBFUlNPTkEsIHZhbGlkYXRlZE5hbWUpXG4gICAgICAgICAgICA6IGZvcm1hdEV4Y2VwdGlvbkVycm9yKHBlcnNvbmFFcnJvciwgJ2NyZWF0ZScsIEVsZW1lbnRUeXBlLlBFUlNPTkEsIHZhbGlkYXRlZE5hbWUpO1xuICAgICAgICAgIHJldHVybiBhZGRQZXJzb25hSW5kaWNhdG9yKGVycm9yUmVzcG9uc2UsIGNvbnRleHQuZ2V0UGVyc29uYUluZGljYXRvcigpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjYXNlIEVsZW1lbnRUeXBlLlNLSUxMOiB7XG4gICAgICAgIC8vIEZJWDogSXNzdWUgIzIwIC0gQ2F0Y2ggZHVwbGljYXRlIGVycm9ycyBmcm9tIFNraWxsTWFuYWdlclxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHNraWxsID0gYXdhaXQgY29udGV4dC5za2lsbE1hbmFnZXIuY3JlYXRlKHtcbiAgICAgICAgICAgIG5hbWU6IHZhbGlkYXRlZE5hbWUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogdmFsaWRhdGVkRGVzY3JpcHRpb24sXG4gICAgICAgICAgICAuLi5zYW5pdGl6ZWQsXG4gICAgICAgICAgICBpbnN0cnVjdGlvbnM6IGluc3RydWN0aW9ucyxcbiAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQgfHwgJydcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCBzdWNjZXNzTXNnID0gYCR7d2FybmluZ1RleHR94pyFIENyZWF0ZWQgc2tpbGwgJyR7c2tpbGwubWV0YWRhdGEubmFtZX0nIHN1Y2Nlc3NmdWxseWA7XG4gICAgICAgICAgcmV0dXJuIHsgY29udGVudDogW3sgdHlwZTogXCJ0ZXh0XCIsIHRleHQ6IGAke2NvbnRleHQuZ2V0UGVyc29uYUluZGljYXRvcigpfSR7c3VjY2Vzc01zZ31gIH1dIH07XG4gICAgICAgIH0gY2F0Y2ggKHNraWxsRXJyb3IpIHtcbiAgICAgICAgICAvLyBDaGVjayBpZiBpdCdzIGEgZHVwbGljYXRlIGVycm9yXG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHNraWxsRXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IHNraWxsRXJyb3IubWVzc2FnZSA6IFN0cmluZyhza2lsbEVycm9yKTtcbiAgICAgICAgICBjb25zdCBlcnJvclJlc3BvbnNlID0gbWVzc2FnZS5pbmNsdWRlcygnYWxyZWFkeSBleGlzdHMnKVxuICAgICAgICAgICAgPyBmb3JtYXREdXBsaWNhdGVFcnJvcihFbGVtZW50VHlwZS5TS0lMTCwgdmFsaWRhdGVkTmFtZSlcbiAgICAgICAgICAgIDogZm9ybWF0RXhjZXB0aW9uRXJyb3Ioc2tpbGxFcnJvciwgJ2NyZWF0ZScsIEVsZW1lbnRUeXBlLlNLSUxMLCB2YWxpZGF0ZWROYW1lKTtcbiAgICAgICAgICByZXR1cm4gYWRkUGVyc29uYUluZGljYXRvcihlcnJvclJlc3BvbnNlLCBjb250ZXh0LmdldFBlcnNvbmFJbmRpY2F0b3IoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY2FzZSBFbGVtZW50VHlwZS5URU1QTEFURToge1xuICAgICAgICAvLyBGSVg6IElzc3VlICMyMCAtIENhdGNoIGR1cGxpY2F0ZSBlcnJvcnMgZnJvbSBUZW1wbGF0ZU1hbmFnZXJcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IGF3YWl0IGNvbnRleHQudGVtcGxhdGVNYW5hZ2VyLmNyZWF0ZSh7XG4gICAgICAgICAgICBuYW1lOiB2YWxpZGF0ZWROYW1lLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHZhbGlkYXRlZERlc2NyaXB0aW9uLFxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zOiBpbnN0cnVjdGlvbnMsXG4gICAgICAgICAgICBjb250ZW50OiBjb250ZW50IHx8ICcnLFxuICAgICAgICAgICAgbWV0YWRhdGE6IHNhbml0aXplZCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCBzdWNjZXNzTXNnID0gYCR7d2FybmluZ1RleHR94pyFIENyZWF0ZWQgdGVtcGxhdGUgJyR7dGVtcGxhdGUubWV0YWRhdGEubmFtZX0nIHN1Y2Nlc3NmdWxseWA7XG4gICAgICAgICAgcmV0dXJuIHsgY29udGVudDogW3sgdHlwZTogXCJ0ZXh0XCIsIHRleHQ6IGAke2NvbnRleHQuZ2V0UGVyc29uYUluZGljYXRvcigpfSR7c3VjY2Vzc01zZ31gIH1dIH07XG4gICAgICAgIH0gY2F0Y2ggKHRlbXBsYXRlRXJyb3IpIHtcbiAgICAgICAgICAvLyBDaGVjayBpZiBpdCdzIGEgZHVwbGljYXRlIGVycm9yXG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRlbXBsYXRlRXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IHRlbXBsYXRlRXJyb3IubWVzc2FnZSA6IFN0cmluZyh0ZW1wbGF0ZUVycm9yKTtcbiAgICAgICAgICBjb25zdCBlcnJvclJlc3BvbnNlID0gbWVzc2FnZS5pbmNsdWRlcygnYWxyZWFkeSBleGlzdHMnKVxuICAgICAgICAgICAgPyBmb3JtYXREdXBsaWNhdGVFcnJvcihFbGVtZW50VHlwZS5URU1QTEFURSwgdmFsaWRhdGVkTmFtZSlcbiAgICAgICAgICAgIDogZm9ybWF0RXhjZXB0aW9uRXJyb3IodGVtcGxhdGVFcnJvciwgJ2NyZWF0ZScsIEVsZW1lbnRUeXBlLlRFTVBMQVRFLCB2YWxpZGF0ZWROYW1lKTtcbiAgICAgICAgICByZXR1cm4gYWRkUGVyc29uYUluZGljYXRvcihlcnJvclJlc3BvbnNlLCBjb250ZXh0LmdldFBlcnNvbmFJbmRpY2F0b3IoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY2FzZSBFbGVtZW50VHlwZS5BR0VOVDoge1xuICAgICAgICAvLyBWMiBmaWVsZHMgYXJlIG1lcmdlZCBpbnRvIG1ldGFkYXRhIGJ5IHRoZSBkaXNwYXRjaGVyIChNQ1BBUUxIYW5kbGVyKS5cbiAgICAgICAgLy8gR29hbCBub3JtYWxpemF0aW9uIChzdHJpbmfihpJvYmplY3QpIGlzIGhhbmRsZWQgYnkgQWdlbnRNYW5hZ2VyLmNyZWF0ZSgpLlxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIElzc3VlICM3MjI6IHYyIGR1YWwtZmllbGQgYXJjaGl0ZWN0dXJlIOKAlCBlYWNoIGZpZWxkIGdvZXMgd2hlcmUgaXQgYmVsb25ncy5cbiAgICAgICAgICAvLyBBZ2VudE1hbmFnZXIuY3JlYXRlKCkgM3JkIHBhcmFtID0gYmVoYXZpb3JhbCBkaXJlY3RpdmVzIChhZ2VudC5pbnN0cnVjdGlvbnMpLlxuICAgICAgICAgIC8vIG1ldGFkYXRhLmNvbnRlbnQgPSByZWZlcmVuY2UgbWF0ZXJpYWwgKG1hcmtkb3duIGJvZHkgYWZ0ZXIgZnJvbnRtYXR0ZXIpLlxuICAgICAgICAgIGNvbnN0IGFnZW50SW5zdHJ1Y3Rpb25zID0gaW5zdHJ1Y3Rpb25zIHx8ICcnO1xuICAgICAgICAgIGNvbnN0IGFnZW50Q29udGVudCA9IGNvbnRlbnQgfHwgJyc7XG4gICAgICAgICAgY29uc3QgYWdlbnQgPSBhd2FpdCBjb250ZXh0LmFnZW50TWFuYWdlci5jcmVhdGUoXG4gICAgICAgICAgICB2YWxpZGF0ZWROYW1lLFxuICAgICAgICAgICAgdmFsaWRhdGVkRGVzY3JpcHRpb24sXG4gICAgICAgICAgICBhZ2VudEluc3RydWN0aW9ucyxcbiAgICAgICAgICAgIHsgLi4uc2FuaXRpemVkLCBjb250ZW50OiBhZ2VudENvbnRlbnQgfVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGFnZW50LnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIGNvbnN0IGJhc2VNZXNzYWdlID0gYWdlbnQubWVzc2FnZSAmJiBhZ2VudC5tZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2NyZWF0ZWQgYWdlbnQnKVxuICAgICAgICAgICAgICA/IGFnZW50Lm1lc3NhZ2VcbiAgICAgICAgICAgICAgOiBgQ3JlYXRlZCBhZ2VudCAnJHt2YWxpZGF0ZWROYW1lfScgc3VjY2Vzc2Z1bGx5YDtcbiAgICAgICAgICAgIGNvbnN0IHN1Y2Nlc3NNc2cgPSBgJHt3YXJuaW5nVGV4dH3inIUgJHtiYXNlTWVzc2FnZX1gO1xuICAgICAgICAgICAgcmV0dXJuIHsgY29udGVudDogW3sgdHlwZTogXCJ0ZXh0XCIsIHRleHQ6IGAke2NvbnRleHQuZ2V0UGVyc29uYUluZGljYXRvcigpfSR7c3VjY2Vzc01zZ31gIH1dIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEZJWDogSXNzdWUgIzIwIC0gSW5jbHVkZSBcImZhaWxlZCB0byBjcmVhdGVcIiBpbiBlcnJvciBtZXNzYWdlIGZvciB0ZXN0IGNvbXBhdGliaWxpdHlcbiAgICAgICAgICBjb25zdCBmYWlsdXJlUmVhc29uID0gYWdlbnQubWVzc2FnZSB8fCAnVW5rbm93biBlcnJvcic7XG4gICAgICAgICAgcmV0dXJuIGZvcm1hdFNpbXBsZUVycm9yUmVzcG9uc2UoYEZhaWxlZCB0byBjcmVhdGUgYWdlbnQ6ICR7ZmFpbHVyZVJlYXNvbn1gKTtcbiAgICAgICAgfSBjYXRjaCAoYWdlbnRFcnJvcikge1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBhZ2VudEVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBhZ2VudEVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoYWdlbnRFcnJvcik7XG4gICAgICAgICAgY29uc3QgZXJyb3JSZXNwb25zZSA9IG1lc3NhZ2UuaW5jbHVkZXMoJ2FscmVhZHkgZXhpc3RzJylcbiAgICAgICAgICAgID8gZm9ybWF0RHVwbGljYXRlRXJyb3IoRWxlbWVudFR5cGUuQUdFTlQsIHZhbGlkYXRlZE5hbWUpXG4gICAgICAgICAgICA6IGZvcm1hdEV4Y2VwdGlvbkVycm9yKGFnZW50RXJyb3IsICdjcmVhdGUnLCBFbGVtZW50VHlwZS5BR0VOVCwgdmFsaWRhdGVkTmFtZSk7XG4gICAgICAgICAgcmV0dXJuIGFkZFBlcnNvbmFJbmRpY2F0b3IoZXJyb3JSZXNwb25zZSwgY29udGV4dC5nZXRQZXJzb25hSW5kaWNhdG9yKCkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNhc2UgRWxlbWVudFR5cGUuTUVNT1JZOiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgbWVtb3J5ID0gYXdhaXQgY29udGV4dC5tZW1vcnlNYW5hZ2VyLmNyZWF0ZSh7XG4gICAgICAgICAgICAuLi5zYW5pdGl6ZWQsXG4gICAgICAgICAgICBuYW1lOiB2YWxpZGF0ZWROYW1lLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHZhbGlkYXRlZERlc2NyaXB0aW9uLFxuICAgICAgICAgICAgY29udGVudDogY29udGVudCxcbiAgICAgICAgICAgIGluc3RydWN0aW9uczogaW5zdHJ1Y3Rpb25zLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IHN1Y2Nlc3NNc2cgPSBgJHt3YXJuaW5nVGV4dH3inIUgQ3JlYXRlZCBtZW1vcnkgJyR7bWVtb3J5Lm1ldGFkYXRhLm5hbWV9JyBzdWNjZXNzZnVsbHlgO1xuICAgICAgICAgIHJldHVybiB7IGNvbnRlbnQ6IFt7IHR5cGU6IFwidGV4dFwiLCB0ZXh0OiBgJHtjb250ZXh0LmdldFBlcnNvbmFJbmRpY2F0b3IoKX0ke3N1Y2Nlc3NNc2d9YCB9XSB9O1xuICAgICAgICB9IGNhdGNoIChtZW1vcnlFcnJvcikge1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBtZW1vcnlFcnJvciBpbnN0YW5jZW9mIEVycm9yID8gbWVtb3J5RXJyb3IubWVzc2FnZSA6IFN0cmluZyhtZW1vcnlFcnJvcik7XG4gICAgICAgICAgY29uc3QgZXJyb3JSZXNwb25zZSA9IG1lc3NhZ2UuaW5jbHVkZXMoJ2FscmVhZHkgZXhpc3RzJylcbiAgICAgICAgICAgID8gZm9ybWF0RHVwbGljYXRlRXJyb3IoRWxlbWVudFR5cGUuTUVNT1JZLCB2YWxpZGF0ZWROYW1lKVxuICAgICAgICAgICAgOiBmb3JtYXRFeGNlcHRpb25FcnJvcihtZW1vcnlFcnJvciwgJ2NyZWF0ZScsIEVsZW1lbnRUeXBlLk1FTU9SWSwgdmFsaWRhdGVkTmFtZSk7XG4gICAgICAgICAgcmV0dXJuIGFkZFBlcnNvbmFJbmRpY2F0b3IoZXJyb3JSZXNwb25zZSwgY29udGV4dC5nZXRQZXJzb25hSW5kaWNhdG9yKCkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNhc2UgRWxlbWVudFR5cGUuRU5TRU1CTEU6IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBJc3N1ZSAjNDY2OiBSZXNvbHZlIG1pc3NpbmcgZWxlbWVudF90eXBlIHZpYSBwb3J0Zm9saW8gbG9va3VwIGJlZm9yZSBjcmVhdGVcbiAgICAgICAgICBjb25zdCByZXNvbHV0aW9uUmVzdWx0ID0gYXdhaXQgcmVzb2x2ZUVsZW1lbnRUeXBlcyhcbiAgICAgICAgICAgIHNhbml0aXplZC5lbGVtZW50cyB8fCBbXSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc2tpbGxNYW5hZ2VyOiBjb250ZXh0LnNraWxsTWFuYWdlcixcbiAgICAgICAgICAgICAgdGVtcGxhdGVNYW5hZ2VyOiBjb250ZXh0LnRlbXBsYXRlTWFuYWdlcixcbiAgICAgICAgICAgICAgYWdlbnRNYW5hZ2VyOiBjb250ZXh0LmFnZW50TWFuYWdlcixcbiAgICAgICAgICAgICAgbWVtb3J5TWFuYWdlcjogY29udGV4dC5tZW1vcnlNYW5hZ2VyLFxuICAgICAgICAgICAgICBwZXJzb25hTWFuYWdlcjogY29udGV4dC5wZXJzb25hTWFuYWdlcixcbiAgICAgICAgICAgICAgZW5zZW1ibGVNYW5hZ2VyOiBjb250ZXh0LmVuc2VtYmxlTWFuYWdlcixcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHJlc29sdXRpb25XYXJuaW5nVGV4dCA9IGZvcm1hdEVsZW1lbnRSZXNvbHV0aW9uV2FybmluZ3MocmVzb2x1dGlvblJlc3VsdCk7XG5cbiAgICAgICAgICBjb25zdCBlbnNlbWJsZSA9IGF3YWl0IGNvbnRleHQuZW5zZW1ibGVNYW5hZ2VyLmNyZWF0ZSh7XG4gICAgICAgICAgICAuLi5zYW5pdGl6ZWQsXG4gICAgICAgICAgICBuYW1lOiB2YWxpZGF0ZWROYW1lLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHZhbGlkYXRlZERlc2NyaXB0aW9uLFxuICAgICAgICAgICAgZWxlbWVudHM6IHJlc29sdXRpb25SZXN1bHQucmVzb2x2ZWQsXG4gICAgICAgICAgICBpbnN0cnVjdGlvbnM6IGluc3RydWN0aW9ucyxcbiAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29uc3Qgc3VjY2Vzc01zZyA9IGAke3dhcm5pbmdUZXh0fSR7cmVzb2x1dGlvbldhcm5pbmdUZXh0feKchSBDcmVhdGVkIGVuc2VtYmxlICcke2Vuc2VtYmxlLm1ldGFkYXRhLm5hbWV9JyBzdWNjZXNzZnVsbHlgO1xuICAgICAgICAgIHJldHVybiB7IGNvbnRlbnQ6IFt7IHR5cGU6IFwidGV4dFwiLCB0ZXh0OiBgJHtjb250ZXh0LmdldFBlcnNvbmFJbmRpY2F0b3IoKX0ke3N1Y2Nlc3NNc2d9YCB9XSB9O1xuICAgICAgICB9IGNhdGNoIChlbnNlbWJsZUVycm9yKSB7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGVuc2VtYmxlRXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVuc2VtYmxlRXJyb3IubWVzc2FnZSA6IFN0cmluZyhlbnNlbWJsZUVycm9yKTtcbiAgICAgICAgICBjb25zdCBlcnJvclJlc3BvbnNlID0gbWVzc2FnZS5pbmNsdWRlcygnYWxyZWFkeSBleGlzdHMnKVxuICAgICAgICAgICAgPyBmb3JtYXREdXBsaWNhdGVFcnJvcihFbGVtZW50VHlwZS5FTlNFTUJMRSwgdmFsaWRhdGVkTmFtZSlcbiAgICAgICAgICAgIDogZm9ybWF0RXhjZXB0aW9uRXJyb3IoZW5zZW1ibGVFcnJvciwgJ2NyZWF0ZScsIEVsZW1lbnRUeXBlLkVOU0VNQkxFLCB2YWxpZGF0ZWROYW1lKTtcbiAgICAgICAgICByZXR1cm4gYWRkUGVyc29uYUluZGljYXRvcihlcnJvclJlc3BvbnNlLCBjb250ZXh0LmdldFBlcnNvbmFJbmRpY2F0b3IoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBg4p2MIEVsZW1lbnQgdHlwZSAnJHt0eXBlfScgaXMgbm90IHlldCBzdXBwb3J0ZWQgZm9yIGNyZWF0aW9uYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZ2dlci5lcnJvcignRWxlbWVudENSVURIYW5kbGVyLmNyZWF0ZUVsZW1lbnQnLCBlcnJvcik7XG4gICAgY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InO1xuICAgIGNvbnN0IGluZGljYXRvciA9IGNvbnRleHQuZ2V0UGVyc29uYUluZGljYXRvcigpO1xuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbe1xuICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgdGV4dDogYCR7aW5kaWNhdG9yfeKdjCBGYWlsZWQgdG8gY3JlYXRlIGVsZW1lbnQ6ICR7bWVzc2FnZX1gXG4gICAgICB9XVxuICAgIH07XG4gIH1cbn1cbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaDispatcher.d.ts","sourceRoot":"","sources":["../../../src/handlers/mcp-aql/SchemaDispatcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAIH,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EAKlB,MAAM,sBAAsB,CAAC;AAI9B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAejD;;;;;GAKG;AACH,iBAAS,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAyB3E;AAi0BD;;;;;;GAMG;AACH,qBAAa,gBAAgB;IAC3B;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI9C;;;;;;;;;OASG;WACU,QAAQ,CACnB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,QAAQ,EAAE,eAAe,EACzB,KAAK,CAAC,EAAE,cAAc,GACrB,OAAO,CAAC,OAAO,CAAC;CAoGpB;AAMD,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,CAAC;AAGjD,eAAO,MAAM,QAAQ;;;;CAIpB,CAAC"}
1
+ {"version":3,"file":"SchemaDispatcher.d.ts","sourceRoot":"","sources":["../../../src/handlers/mcp-aql/SchemaDispatcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAIH,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EAKlB,MAAM,sBAAsB,CAAC;AAI9B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAejD;;;;;GAKG;AACH,iBAAS,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAyB3E;AAy0BD;;;;;;GAMG;AACH,qBAAa,gBAAgB;IAC3B;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI9C;;;;;;;;;OASG;WACU,QAAQ,CACnB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,QAAQ,EAAE,eAAe,EACzB,KAAK,CAAC,EAAE,cAAc,GACrB,OAAO,CAAC,OAAO,CAAC;CAoGpB;AAMD,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,CAAC;AAGjD,eAAO,MAAM,QAAQ;;;;CAIpB,CAAC"}