@dollhousemcp/mcp-server 1.9.13 → 1.9.15

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 (79) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/README.github.md +54 -0
  3. package/README.md.backup +1241 -49
  4. package/dist/cache/CollectionCache.js +2 -2
  5. package/dist/collection/CollectionIndexManager.js +3 -3
  6. package/dist/config/ConfigWizard.js +3 -3
  7. package/dist/config/indicator-config.js +2 -2
  8. package/dist/config/portfolio-constants.js +12 -12
  9. package/dist/elements/BaseElement.js +7 -7
  10. package/dist/elements/FeedbackProcessor.d.ts +7 -0
  11. package/dist/elements/FeedbackProcessor.d.ts.map +1 -1
  12. package/dist/elements/FeedbackProcessor.js +67 -14
  13. package/dist/elements/agents/AgentManager.js +6 -6
  14. package/dist/elements/memories/Memory.js +4 -4
  15. package/dist/elements/memories/MemoryManager.js +3 -3
  16. package/dist/elements/memories/utils.js +3 -3
  17. package/dist/elements/skills/Skill.js +2 -2
  18. package/dist/elements/skills/SkillManager.js +2 -2
  19. package/dist/elements/templates/Template.d.ts.map +1 -1
  20. package/dist/elements/templates/Template.js +38 -14
  21. package/dist/elements/templates/TemplateManager.js +2 -2
  22. package/dist/generated/version.d.ts +2 -2
  23. package/dist/generated/version.js +3 -3
  24. package/dist/handlers/ConfigHandler.js +3 -3
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +20 -16
  27. package/dist/persona/PersonaElementManager.js +3 -3
  28. package/dist/persona/PersonaManager.js +2 -2
  29. package/dist/persona/export-import/PersonaImporter.js +3 -3
  30. package/dist/portfolio/DefaultElementProvider.d.ts +12 -0
  31. package/dist/portfolio/DefaultElementProvider.d.ts.map +1 -1
  32. package/dist/portfolio/DefaultElementProvider.js +23 -6
  33. package/dist/portfolio/GitHubPortfolioIndexer.js +2 -2
  34. package/dist/portfolio/MigrationManager.js +2 -2
  35. package/dist/portfolio/NLPScoringManager.js +2 -2
  36. package/dist/portfolio/PortfolioManager.d.ts +5 -0
  37. package/dist/portfolio/PortfolioManager.d.ts.map +1 -1
  38. package/dist/portfolio/PortfolioManager.js +8 -1
  39. package/dist/portfolio/PortfolioRepoManager.js +2 -2
  40. package/dist/portfolio/PortfolioSyncManager.js +5 -5
  41. package/dist/portfolio/RelationshipManager.js +4 -4
  42. package/dist/portfolio/UnifiedIndexManager.js +4 -4
  43. package/dist/portfolio/types/RelationshipTypes.js +2 -2
  44. package/dist/security/InputValidator.d.ts +12 -0
  45. package/dist/security/InputValidator.d.ts.map +1 -1
  46. package/dist/security/InputValidator.js +38 -18
  47. package/dist/security/audit/config/suppressions.js +10 -10
  48. package/dist/security/commandValidator.js +2 -2
  49. package/dist/security/dosProtection.d.ts +123 -0
  50. package/dist/security/dosProtection.d.ts.map +1 -0
  51. package/dist/security/dosProtection.js +392 -0
  52. package/dist/security/pathValidator.js +2 -2
  53. package/dist/security/secureYamlParser.d.ts.map +1 -1
  54. package/dist/security/secureYamlParser.js +4 -3
  55. package/dist/security/tokenManager.js +10 -10
  56. package/dist/security/validators/unicodeValidator.js +2 -2
  57. package/dist/security/yamlValidator.js +3 -3
  58. package/dist/sync/PortfolioDownloader.js +2 -2
  59. package/dist/sync/PortfolioSyncComparer.js +2 -2
  60. package/dist/tools/portfolio/PortfolioElementAdapter.js +3 -3
  61. package/dist/tools/portfolio/submitToPortfolioTool.js +14 -14
  62. package/dist/utils/EarlyTerminationSearch.d.ts +1 -1
  63. package/dist/utils/EarlyTerminationSearch.d.ts.map +1 -1
  64. package/dist/utils/EarlyTerminationSearch.js +3 -3
  65. package/dist/utils/ElementFormatter.d.ts +1 -0
  66. package/dist/utils/ElementFormatter.d.ts.map +1 -1
  67. package/dist/utils/ElementFormatter.js +21 -13
  68. package/dist/utils/GitHubRateLimiter.d.ts +6 -0
  69. package/dist/utils/GitHubRateLimiter.d.ts.map +1 -1
  70. package/dist/utils/GitHubRateLimiter.js +20 -5
  71. package/dist/utils/RateLimiter.js +2 -2
  72. package/dist/utils/SecureDownloader.js +2 -2
  73. package/dist/utils/fileOperations.d.ts +6 -1
  74. package/dist/utils/fileOperations.d.ts.map +1 -1
  75. package/dist/utils/fileOperations.js +29 -5
  76. package/dist/utils/filesystem.js +6 -6
  77. package/dist/utils/searchUtils.js +2 -2
  78. package/dist/utils/version.js +3 -3
  79. package/package.json +1 -1
@@ -194,7 +194,7 @@ export class TemplateManager {
194
194
  description: sanitizedDescription
195
195
  }, sanitizedContent);
196
196
  // Generate filename from template name
197
- const filename = `${sanitizedName.toLowerCase().replace(/[^a-z0-9-]/g, '-')}.md`;
197
+ const filename = `${sanitizedName.toLowerCase().replaceAll(/[^a-z0-9-]/g, '-')}.md`;
198
198
  // Save the template
199
199
  await this.save(template, filename);
200
200
  // SECURITY FIX #5: Audit successful creation
@@ -570,4 +570,4 @@ export class TemplateManager {
570
570
  .slice(0, validatedLimit);
571
571
  }
572
572
  }
573
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGVtcGxhdGVNYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL3RlbXBsYXRlcy9UZW1wbGF0ZU1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O0dBV0c7QUFJSCxPQUFPLEVBQUUsUUFBUSxFQUFvQixNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdkUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFFLGFBQWEsRUFBZ0IsTUFBTSxrQ0FBa0MsQ0FBQztBQUMvRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNqRixPQUFPLEVBQUUsUUFBUSxJQUFJLEVBQUUsRUFBRSxNQUFNLElBQUksQ0FBQztBQUNwQyxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUNoQyxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFFakMsNkNBQTZDO0FBQzdDLE1BQU0sa0JBQWtCLEdBQUcsRUFBRSxDQUFDO0FBQzlCLE1BQU0sd0JBQXdCLEdBQUcsbUJBQW1CLENBQUM7QUFFckQsTUFBTSxPQUFPLGVBQWU7SUFDbEIsZ0JBQWdCLENBQW1CO0lBQ25DLFlBQVksQ0FBUztJQUNyQixTQUFTLEdBQTBCLElBQUksR0FBRyxFQUFFLENBQUM7SUFFckQ7UUFDRSxJQUFJ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LFdBQVcsQ0FBQyxRQUFnQixFQUFFO1FBQ2xDLDJFQUEyRTtRQUMzRSwwREFBMEQ7UUFDMUQsa0NBQWtDO1FBQ2xDLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQztRQUNwQixNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUM7UUFDdEIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFbkYsSUFBSSxLQUFLLEtBQUssY0FBYyxFQUFFLENBQUM7WUFDN0IsTUFBTSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsS0FBSyxnQkFBZ0IsY0FBYyxrQkFBa0IsU0FBUyxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFDcEgsQ0FBQztRQUVELE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3BDLE9BQU8sU0FBUzthQUNiLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUM3RSxLQUFLLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQzlCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGVtcGxhdGVNYW5hZ2VyIC0gSW1wbGVtZW50YXRpb24gb2YgSUVsZW1lbnRNYW5hZ2VyIGZvciBUZW1wbGF0ZSBlbGVtZW50c1xuICogSGFuZGxlcyBDUlVEIG9wZXJhdGlvbnMgYW5kIGxpZmVjeWNsZSBtYW5hZ2VtZW50IGZvciB0ZW1wbGF0ZXMgaW1wbGVtZW50aW5nIElFbGVtZW50XG4gKiBcbiAqIFNFQ1VSSVRZIEZJWEVTIElNUExFTUVOVEVEIChGb2xsb3dpbmcgUFIgIzMxOSBwYXR0ZXJucyk6XG4gKiAxLiBDUklUSUNBTDogRml4ZWQgcmFjZSBjb25kaXRpb25zIGluIGZpbGUgb3BlcmF0aW9ucyBieSB1c2luZyBGaWxlTG9ja01hbmFnZXIgZm9yIGF0b21pYyByZWFkcy93cml0ZXNcbiAqIDIuIENSSVRJQ0FMOiBGaXhlZCBkeW5hbWljIHJlcXVpcmUoKSBzdGF0ZW1lbnRzIGJ5IHVzaW5nIHN0YXRpYyBpbXBvcnRzXG4gKiAzLiBISUdIOiBGaXhlZCB1bnZhbGlkYXRlZCBZQU1MIHBhcnNpbmcgdnVsbmVyYWJpbGl0eSBieSB1c2luZyBTZWN1cmVZYW1sUGFyc2VyXG4gKiA0LiBNRURJVU06IEFsbCB1c2VyIGlucHV0cyBhcmUgbm93IHZhbGlkYXRlZCBhbmQgc2FuaXRpemVkXG4gKiA1LiBNRURJVU06IEF1ZGl0IGxvZ2dpbmcgYWRkZWQgZm9yIHNlY3VyaXR5IG9wZXJhdGlvbnNcbiAqIDYuIE1FRElVTTogUGF0aCB0cmF2ZXJzYWwgcHJldmVudGlvbiBmb3IgYWxsIGZpbGUgb3BlcmF0aW9uc1xuICovXG5cbmltcG9ydCB7IElFbGVtZW50TWFuYWdlciB9IGZyb20gJy4uLy4uL3R5cGVzL2VsZW1lbnRzL0lFbGVtZW50TWFuYWdlci5qcyc7XG5pbXBvcnQgeyBFbGVtZW50VmFsaWRhdGlvblJlc3VsdCB9IGZyb20gJy4uLy4uL3R5cGVzL2VsZW1lbnRzL0lFbGVtZW50LmpzJztcbmltcG9ydCB7IFRlbXBsYXRlLCBUZW1wbGF0ZU1ldGFkYXRhIH0gZnJvbSAnLi9UZW1wbGF0ZS5qcyc7XG5pbXBvcnQgeyBFbGVtZW50VHlwZSB9IGZyb20gJy4uLy4uL3BvcnRmb2xpby90eXBlcy5qcyc7XG5pbXBvcnQgeyBQb3J0Zm9saW9NYW5hZ2VyIH0gZnJvbSAnLi4vLi4vcG9ydGZvbGlvL1BvcnRmb2xpb01hbmFnZXIuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IEZpbGVMb2NrTWFuYWdlciB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L2ZpbGVMb2NrTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBTZWN1cmVZYW1sUGFyc2VyIH0gZnJvbSAnLi4vLi4vc2VjdXJpdHkvc2VjdXJlWWFtbFBhcnNlci5qcyc7XG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tICcuLi8uLi9zZWN1cml0eS9zZWN1cml0eU1vbml0b3IuanMnO1xuaW1wb3J0IHsgc2FuaXRpemVJbnB1dCwgdmFsaWRhdGVQYXRoIH0gZnJvbSAnLi4vLi4vc2VjdXJpdHkvSW5wdXRWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgVW5pY29kZVZhbGlkYXRvciB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L3ZhbGlkYXRvcnMvdW5pY29kZVZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBwcm9taXNlcyBhcyBmcyB9IGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyB5YW1sIGZyb20gJ2pzLXlhbWwnO1xuaW1wb3J0IG1hdHRlciBmcm9tICdncmF5LW1hdHRlcic7XG5cbi8vIFZhbGlkYXRpb24gY29uc3RhbnRzIGZvciB0ZW1wbGF0ZSB0cmlnZ2Vyc1xuY29uc3QgTUFYX1RSSUdHRVJfTEVOR1RIID0gNTA7XG5jb25zdCBUUklHR0VSX1ZBTElEQVRJT05fUkVHRVggPSAvXlthLXpBLVowLTlcXC1fXSskLztcblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlTWFuYWdlciBpbXBsZW1lbnRzIElFbGVtZW50TWFuYWdlcjxUZW1wbGF0ZT4ge1xuICBwcml2YXRlIHBvcnRmb2xpb01hbmFnZXI6IFBvcnRmb2xpb01hbmFnZXI7XG4gIHByaXZhdGUgdGVtcGxhdGVzRGlyOiBzdHJpbmc7XG4gIHByaXZhdGUgdGVtcGxhdGVzOiBNYXA8c3RyaW5nLCBUZW1wbGF0ZT4gPSBuZXcgTWFwKCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5wb3J0Zm9saW9NYW5hZ2VyID0gUG9ydGZvbGlvTWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuICAgIHRoaXMudGVtcGxhdGVzRGlyID0gdGhpcy5wb3J0Zm9saW9NYW5hZ2VyLmdldEVsZW1lbnREaXIoRWxlbWVudFR5cGUuVEVNUExBVEUpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgYSB0ZW1wbGF0ZSBmcm9tIGZpbGVcbiAgICogU0VDVVJJVFkgRklYICMxOiBVc2VzIEZpbGVMb2NrTWFuYWdlci5hdG9taWNSZWFkRmlsZSgpIGluc3RlYWQgb2YgZnMucmVhZEZpbGUoKVxuICAgKiB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBhbmQgZW5zdXJlIGF0b21pYyBmaWxlIG9wZXJhdGlvbnNcbiAgICovXG4gIGFzeW5jIGxvYWQoZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8VGVtcGxhdGU+IHtcbiAgICAvLyBTRUNVUklUWSBGSVggIzQgJiAjNjogVmFsaWRhdGUgYW5kIHNhbml0aXplIHRoZSBmaWxlIHBhdGhcbiAgICAvLyBQcmV2aW91c2x5OiBEaXJlY3QgdXNlIG9mIHVzZXItcHJvdmlkZWQgcGF0aHMgY291bGQgbGVhZCB0byBwYXRoIHRyYXZlcnNhbFxuICAgIC8vIE5vdzogRnVsbCB2YWxpZGF0aW9uIHByZXZlbnRzIGFjY2Vzc2luZyBmaWxlcyBvdXRzaWRlIHRlbXBsYXRlcyBkaXJlY3RvcnlcbiAgICBjb25zdCBzYW5pdGl6ZWRQYXRoID0gc2FuaXRpemVJbnB1dChmaWxlUGF0aCwgMjU1KTtcbiAgICBcbiAgICAvLyBFbnN1cmUgdGhlIHBhdGggaXMgd2l0aGluIHRoZSB0ZW1wbGF0ZXMgZGlyZWN0b3J5XG4gICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLmlzQWJzb2x1dGUoc2FuaXRpemVkUGF0aCkgXG4gICAgICA/IHNhbml0aXplZFBhdGggXG4gICAgICA6IHBhdGguam9pbih0aGlzLnRlbXBsYXRlc0Rpciwgc2FuaXRpemVkUGF0aCk7XG4gICAgXG4gICAgLy8gU0VDVVJJVFkgRklYICM2OiBQcmV2ZW50IHBhdGggdHJhdmVyc2FsIGF0dGFja3NcbiAgICBjb25zdCBub3JtYWxpemVkUGF0aCA9IHBhdGgubm9ybWFsaXplKGZ1bGxQYXRoKTtcbiAgICBpZiAoIW5vcm1hbGl6ZWRQYXRoLnN0YXJ0c1dpdGgodGhpcy50ZW1wbGF0ZXNEaXIpKSB7XG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdQQVRIX1RSQVZFUlNBTF9BVFRFTVBUJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdDUklUSUNBTCcsXG4gICAgICAgIHNvdXJjZTogJ1RlbXBsYXRlTWFuYWdlci5sb2FkJyxcbiAgICAgICAgZGV0YWlsczogYEF0dGVtcHRlZCB0byBhY2Nlc3MgZmlsZSBvdXRzaWRlIHRlbXBsYXRlcyBkaXJlY3Rvcnk6ICR7c2FuaXRpemVkUGF0aH1gXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGF0aCB0cmF2ZXJzYWwgYXR0ZW1wdCBkZXRlY3RlZCcpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBDUklUSUNBTCBGSVg6IFVzZSBhdG9taWMgZmlsZSByZWFkIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zXG4gICAgICAvLyBQcmV2aW91c2x5OiBjb25zdCBjb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUoZnVsbFBhdGgsICd1dGYtOCcpO1xuICAgICAgLy8gTm93OiBVc2VzIEZpbGVMb2NrTWFuYWdlciB3aXRoIHByb3BlciBlbmNvZGluZyBvYmplY3QgZm9ybWF0XG4gICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgRmlsZUxvY2tNYW5hZ2VyLmF0b21pY1JlYWRGaWxlKG5vcm1hbGl6ZWRQYXRoLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pO1xuICAgICAgXG4gICAgICAvLyBQYXJzZSB0aGUgdGVtcGxhdGUgZmlsZSAoZXhwZWN0ZWQgZm9ybWF0OiBZQU1MIGZyb250bWF0dGVyICsgY29udGVudClcbiAgICAgIGNvbnN0IHBhcnNlZCA9IG1hdHRlcihjb250ZW50KTtcbiAgICAgIFxuICAgICAgLy8gU0VDVVJJVFkgRklYICMzOiBWYWxpZGF0ZSBZQU1MIG1ldGFkYXRhIHVzaW5nIFNlY3VyZVlhbWxQYXJzZXJcbiAgICAgIC8vIFByZXZpb3VzbHk6IEZyb250bWF0dGVyIHBhcnNpbmcgY291bGQgYmUgdnVsbmVyYWJsZSB0byBZQU1MIGluamVjdGlvblxuICAgICAgLy8gTm93OiBTZWN1cmVZYW1sUGFyc2VyIHZhbGlkYXRlcyBhbmQgc2FuaXRpemVzIFlBTUwgY29udGVudFxuICAgICAgY29uc3QgbWV0YWRhdGEgPSBhd2FpdCB0aGlzLnZhbGlkYXRlTWV0YWRhdGEocGFyc2VkLmRhdGEpO1xuICAgICAgXG4gICAgICAvLyBDcmVhdGUgdGhlIHRlbXBsYXRlIGluc3RhbmNlXG4gICAgICBjb25zdCB0ZW1wbGF0ZSA9IG5ldyBUZW1wbGF0ZShtZXRhZGF0YSwgcGFyc2VkLmNvbnRlbnQpO1xuICAgICAgXG4gICAgICAvLyBDYWNoZSB0aGUgdGVtcGxhdGVcbiAgICAgIHRoaXMudGVtcGxhdGVzLnNldChub3JtYWxpemVkUGF0aCwgdGVtcGxhdGUpO1xuICAgICAgXG4gICAgICAvLyBTRUNVUklUWSBGSVggIzU6IExvZyBzdWNjZXNzZnVsIHRlbXBsYXRlIGxvYWQgZm9yIGF1ZGl0IHRyYWlsXG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdURU1QTEFURV9MT0FERUQnLFxuICAgICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICAgIHNvdXJjZTogJ1RlbXBsYXRlTWFuYWdlci5sb2FkJyxcbiAgICAgICAgZGV0YWlsczogYFRlbXBsYXRlIGxvYWRlZDogJHt0ZW1wbGF0ZS5tZXRhZGF0YS5uYW1lfSBmcm9tICR7cGF0aC5iYXNlbmFtZShub3JtYWxpemVkUGF0aCl9YFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gbG9hZCB0ZW1wbGF0ZSBmcm9tICR7bm9ybWFsaXplZFBhdGh9OiAke2Vycm9yfWApO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgYSB0ZW1wbGF0ZSB0byBmaWxlXG4gICAqIFNFQ1VSSVRZIEZJWCAjMTogVXNlcyBGaWxlTG9ja01hbmFnZXIuYXRvbWljV3JpdGVGaWxlKCkgZm9yIGF0b21pYyBvcGVyYXRpb25zXG4gICAqL1xuICBhc3luYyBzYXZlKHRlbXBsYXRlOiBUZW1wbGF0ZSwgZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFNFQ1VSSVRZIEZJWCAjNDogVmFsaWRhdGUgaW5wdXRzXG4gICAgY29uc3QgdmFsaWRhdGlvbiA9IHRlbXBsYXRlLnZhbGlkYXRlKCk7XG4gICAgaWYgKCF2YWxpZGF0aW9uLnZhbGlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBzYXZlIGludmFsaWQgdGVtcGxhdGU6ICR7dmFsaWRhdGlvbi5lcnJvcnM/Lm1hcChlID0+IGUubWVzc2FnZSkuam9pbignLCAnKX1gKTtcbiAgICB9XG5cbiAgICAvLyBTRUNVUklUWSBGSVggIzQgJiAjNjogVmFsaWRhdGUgYW5kIHNhbml0aXplIHRoZSBmaWxlIHBhdGhcbiAgICBjb25zdCBzYW5pdGl6ZWRQYXRoID0gc2FuaXRpemVJbnB1dChmaWxlUGF0aCwgMjU1KTtcbiAgICBcbiAgICAvLyBFbnN1cmUgdGhlIHBhdGggaXMgd2l0aGluIHRoZSB0ZW1wbGF0ZXMgZGlyZWN0b3J5XG4gICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLmlzQWJzb2x1dGUoc2FuaXRpemVkUGF0aCkgXG4gICAgICA/IHNhbml0aXplZFBhdGggXG4gICAgICA6IHBhdGguam9pbih0aGlzLnRlbXBsYXRlc0Rpciwgc2FuaXRpemVkUGF0aCk7XG4gICAgXG4gICAgLy8gU0VDVVJJVFkgRklYICM2OiBQcmV2ZW50IHBhdGggdHJhdmVyc2FsIGF0dGFja3NcbiAgICBjb25zdCBub3JtYWxpemVkUGF0aCA9IHBhdGgubm9ybWFsaXplKGZ1bGxQYXRoKTtcbiAgICBpZiAoIW5vcm1hbGl6ZWRQYXRoLnN0YXJ0c1dpdGgodGhpcy50ZW1wbGF0ZXNEaXIpKSB7XG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdQQVRIX1RSQVZFUlNBTF9BVFRFTVBUJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdDUklUSUNBTCcsXG4gICAgICAgIHNvdXJjZTogJ1RlbXBsYXRlTWFuYWdlci5zYXZlJyxcbiAgICAgICAgZGV0YWlsczogYEF0dGVtcHRlZCB0byBzYXZlIGZpbGUgb3V0c2lkZSB0ZW1wbGF0ZXMgZGlyZWN0b3J5OiAke3Nhbml0aXplZFBhdGh9YFxuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhdGggdHJhdmVyc2FsIGF0dGVtcHQgZGV0ZWN0ZWQnKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gRW5zdXJlIGRpcmVjdG9yeSBleGlzdHNcbiAgICAgIGF3YWl0IGZzLm1rZGlyKHBhdGguZGlybmFtZShub3JtYWxpemVkUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgXG4gICAgICAvLyBDcmVhdGUgZnJvbnRtYXR0ZXIgY29udGVudFxuICAgICAgY29uc3QgZnJvbnRtYXR0ZXIgPSB0aGlzLmNyZWF0ZUZyb250bWF0dGVyKHRlbXBsYXRlLm1ldGFkYXRhKTtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBgLS0tXFxuJHtmcm9udG1hdHRlcn1cXG4tLS1cXG5cXG4ke3RlbXBsYXRlLmNvbnRlbnR9YDtcbiAgICAgIFxuICAgICAgLy8gQ1JJVElDQUwgRklYOiBVc2UgYXRvbWljIGZpbGUgd3JpdGUgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnNcbiAgICAgIC8vIFByZXZpb3VzbHk6IGF3YWl0IGZzLndyaXRlRmlsZShmdWxsUGF0aCwgY29udGVudCwgJ3V0Zi04Jyk7XG4gICAgICAvLyBOb3c6IFVzZXMgRmlsZUxvY2tNYW5hZ2VyIGZvciBhdG9taWMgb3BlcmF0aW9uc1xuICAgICAgYXdhaXQgRmlsZUxvY2tNYW5hZ2VyLmF0b21pY1dyaXRlRmlsZShub3JtYWxpemVkUGF0aCwgY29udGVudCwgeyBlbmNvZGluZzogJ3V0Zi04JyB9KTtcbiAgICAgIFxuICAgICAgLy8gVXBkYXRlIGNhY2hlXG4gICAgICB0aGlzLnRlbXBsYXRlcy5zZXQobm9ybWFsaXplZFBhdGgsIHRlbXBsYXRlKTtcbiAgICAgIFxuICAgICAgLy8gU0VDVVJJVFkgRklYICM1OiBMb2cgc3VjY2Vzc2Z1bCBzYXZlIGZvciBhdWRpdCB0cmFpbFxuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnVEVNUExBVEVfU0FWRUQnLFxuICAgICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICAgIHNvdXJjZTogJ1RlbXBsYXRlTWFuYWdlci5zYXZlJyxcbiAgICAgICAgZGV0YWlsczogYFRlbXBsYXRlIHNhdmVkOiAke3RlbXBsYXRlLm1ldGFkYXRhLm5hbWV9IHRvICR7cGF0aC5iYXNlbmFtZShub3JtYWxpemVkUGF0aCl9YFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIGxvZ2dlci5pbmZvKGBUZW1wbGF0ZSBzYXZlZDogJHt0ZW1wbGF0ZS5tZXRhZGF0YS5uYW1lfWApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBzYXZlIHRlbXBsYXRlIHRvICR7bm9ybWFsaXplZFBhdGh9OiAke2Vycm9yfWApO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExpc3QgYWxsIHRlbXBsYXRlc1xuICAgKiBTRUNVUklUWSBGSVg6IFVzZXMgUG9ydGZvbGlvTWFuYWdlci5saXN0RWxlbWVudHMoKSB3aGljaCBmaWx0ZXJzIHRlc3QgZWxlbWVudHNcbiAgICovXG4gIGFzeW5jIGxpc3QoKTogUHJvbWlzZTxUZW1wbGF0ZVtdPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFVzZSBQb3J0Zm9saW9NYW5hZ2VyIHRvIGdldCBmaWx0ZXJlZCBsaXN0IChleGNsdWRlcyB0ZXN0IGVsZW1lbnRzKVxuICAgICAgY29uc3QgdGVtcGxhdGVGaWxlcyA9IGF3YWl0IHRoaXMucG9ydGZvbGlvTWFuYWdlci5saXN0RWxlbWVudHMoRWxlbWVudFR5cGUuVEVNUExBVEUpO1xuICAgICAgXG4gICAgICAvLyBMb2FkIHRlbXBsYXRlcyBpbiBwYXJhbGxlbCB3aXRoIGVycm9yIGhhbmRsaW5nXG4gICAgICBjb25zdCB0ZW1wbGF0ZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgdGVtcGxhdGVGaWxlcy5tYXAoYXN5bmMgZmlsZSA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmxvYWQoZmlsZSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGxvYWQgdGVtcGxhdGUgJHtmaWxlfTogJHtlcnJvcn1gKTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICBcbiAgICAgIC8vIEZpbHRlciBvdXQgZmFpbGVkIGxvYWRzXG4gICAgICByZXR1cm4gdGVtcGxhdGVzLmZpbHRlcigodCk6IHQgaXMgVGVtcGxhdGUgPT4gdCAhPT0gbnVsbCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIEhhbmRsZSBtaXNzaW5nIGRpcmVjdG9yeSBncmFjZWZ1bGx5IHdpdGggdHlwZS1zYWZlIGNoZWNrXG4gICAgICBpZiAoZXJyb3IgJiYgdHlwZW9mIGVycm9yID09PSAnb2JqZWN0JyAmJiAnY29kZScgaW4gZXJyb3IgJiYgZXJyb3IuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdUZW1wbGF0ZXMgZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0IHlldCwgcmV0dXJuaW5nIGVtcHR5IGFycmF5Jyk7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGxpc3QgdGVtcGxhdGVzOiAke2Vycm9yfWApO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIGEgdGVtcGxhdGUgYnkgcHJlZGljYXRlXG4gICAqL1xuICBhc3luYyBmaW5kKHByZWRpY2F0ZTogKHRlbXBsYXRlOiBUZW1wbGF0ZSkgPT4gYm9vbGVhbik6IFByb21pc2U8VGVtcGxhdGUgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCB0ZW1wbGF0ZXMgPSBhd2FpdCB0aGlzLmxpc3QoKTtcbiAgICByZXR1cm4gdGVtcGxhdGVzLmZpbmQocHJlZGljYXRlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgdGVtcGxhdGVcbiAgICovXG4gIGFzeW5jIGNyZWF0ZShkYXRhOiB7bmFtZTogc3RyaW5nOyBkZXNjcmlwdGlvbjogc3RyaW5nOyBjb250ZW50Pzogc3RyaW5nOyBtZXRhZGF0YT86IGFueX0pOiBQcm9taXNlPFRlbXBsYXRlPiB7XG4gICAgLy8gU0VDVVJJVFkgRklYICM0OiBWYWxpZGF0ZSBhbmQgc2FuaXRpemUgYWxsIGlucHV0c1xuICAgIGNvbnN0IHNhbml0aXplZE5hbWUgPSBzYW5pdGl6ZUlucHV0KGRhdGEubmFtZSB8fCAnbmV3LXRlbXBsYXRlJywgMTAwKTtcbiAgICBjb25zdCBzYW5pdGl6ZWREZXNjcmlwdGlvbiA9IHNhbml0aXplSW5wdXQoZGF0YS5kZXNjcmlwdGlvbiB8fCAnJywgNTAwKTtcbiAgICBjb25zdCBzYW5pdGl6ZWRDb250ZW50ID0gc2FuaXRpemVJbnB1dChkYXRhLmNvbnRlbnQgfHwgJycsIDEwMDAwMCk7IC8vIDEwMEtCIG1heFxuICAgIFxuICAgIC8vIENyZWF0ZSB0aGUgdGVtcGxhdGUgaW5zdGFuY2VcbiAgICBjb25zdCB0ZW1wbGF0ZSA9IG5ldyBUZW1wbGF0ZSh7XG4gICAgICAuLi5kYXRhLm1ldGFkYXRhLFxuICAgICAgbmFtZTogc2FuaXRpemVkTmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBzYW5pdGl6ZWREZXNjcmlwdGlvblxuICAgIH0sIHNhbml0aXplZENvbnRlbnQpO1xuICAgIFxuICAgIC8vIEdlbmVyYXRlIGZpbGVuYW1lIGZyb20gdGVtcGxhdGUgbmFtZVxuICAgIGNvbnN0IGZpbGVuYW1lID0gYCR7c2FuaXRpemVkTmFtZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teYS16MC05LV0vZywgJy0nKX0ubWRgO1xuICAgIFxuICAgIC8vIFNhdmUgdGhlIHRlbXBsYXRlXG4gICAgYXdhaXQgdGhpcy5zYXZlKHRlbXBsYXRlLCBmaWxlbmFtZSk7XG4gICAgXG4gICAgLy8gU0VDVVJJVFkgRklYICM1OiBBdWRpdCBzdWNjZXNzZnVsIGNyZWF0aW9uXG4gICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgdHlwZTogJ0VMRU1FTlRfQ1JFQVRFRCcsXG4gICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICBzb3VyY2U6ICdUZW1wbGF0ZU1hbmFnZXIuY3JlYXRlJyxcbiAgICAgIGRldGFpbHM6IGBUZW1wbGF0ZSBjcmVhdGVkOiAke3RlbXBsYXRlLm1ldGFkYXRhLm5hbWV9YFxuICAgIH0pO1xuICAgIFxuICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgYSB0ZW1wbGF0ZVxuICAgKiBTRUNVUklUWSBGSVggIzY6IFBhdGggdmFsaWRhdGlvbiB0byBwcmV2ZW50IGRlbGV0aW9uIG91dHNpZGUgZGlyZWN0b3J5XG4gICAqL1xuICBhc3luYyBkZWxldGUoZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFNFQ1VSSVRZIEZJWCAjNCAmICM2OiBWYWxpZGF0ZSBhbmQgc2FuaXRpemUgdGhlIGZpbGUgcGF0aFxuICAgIGNvbnN0IHNhbml0aXplZFBhdGggPSBzYW5pdGl6ZUlucHV0KGZpbGVQYXRoLCAyNTUpO1xuICAgIFxuICAgIC8vIEVuc3VyZSB0aGUgcGF0aCBpcyB3aXRoaW4gdGhlIHRlbXBsYXRlcyBkaXJlY3RvcnlcbiAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguaXNBYnNvbHV0ZShzYW5pdGl6ZWRQYXRoKSBcbiAgICAgID8gc2FuaXRpemVkUGF0aCBcbiAgICAgIDogcGF0aC5qb2luKHRoaXMudGVtcGxhdGVzRGlyLCBzYW5pdGl6ZWRQYXRoKTtcbiAgICBcbiAgICAvLyBTRUNVUklUWSBGSVggIzY6IFByZXZlbnQgcGF0aCB0cmF2ZXJzYWwgYXR0YWNrc1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gcGF0aC5ub3JtYWxpemUoZnVsbFBhdGgpO1xuICAgIGlmICghbm9ybWFsaXplZFBhdGguc3RhcnRzV2l0aCh0aGlzLnRlbXBsYXRlc0RpcikpIHtcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ1BBVEhfVFJBVkVSU0FMX0FUVEVNUFQnLFxuICAgICAgICBzZXZlcml0eTogJ0NSSVRJQ0FMJyxcbiAgICAgICAgc291cmNlOiAnVGVtcGxhdGVNYW5hZ2VyLmRlbGV0ZScsXG4gICAgICAgIGRldGFpbHM6IGBBdHRlbXB0ZWQgdG8gZGVsZXRlIGZpbGUgb3V0c2lkZSB0ZW1wbGF0ZXMgZGlyZWN0b3J5OiAke3Nhbml0aXplZFBhdGh9YFxuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhdGggdHJhdmVyc2FsIGF0dGVtcHQgZGV0ZWN0ZWQnKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgZnMudW5saW5rKG5vcm1hbGl6ZWRQYXRoKTtcbiAgICAgIHRoaXMudGVtcGxhdGVzLmRlbGV0ZShub3JtYWxpemVkUGF0aCk7XG4gICAgICBcbiAgICAgIC8vIFNFQ1VSSVRZIEZJWCAjNTogTG9nIGRlbGV0aW9uIGZvciBhdWRpdCB0cmFpbFxuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnVEVNUExBVEVfREVMRVRFRCcsXG4gICAgICAgIHNldmVyaXR5OiAnTUVESVVNJyxcbiAgICAgICAgc291cmNlOiAnVGVtcGxhdGVNYW5hZ2VyLmRlbGV0ZScsXG4gICAgICAgIGRldGFpbHM6IGBUZW1wbGF0ZSBkZWxldGVkOiAke3BhdGguYmFzZW5hbWUobm9ybWFsaXplZFBhdGgpfWBcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICBsb2dnZXIuaW5mbyhgVGVtcGxhdGUgZGVsZXRlZDogJHtwYXRoLmJhc2VuYW1lKG5vcm1hbGl6ZWRQYXRoKX1gKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gZGVsZXRlIHRlbXBsYXRlICR7bm9ybWFsaXplZFBhdGh9OiAke2Vycm9yfWApO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhIHRlbXBsYXRlIGZyb20gZXh0ZXJuYWwgZm9ybWF0XG4gICAqIFNFQ1VSSVRZIEZJWCAjMzogVXNlcyBTZWN1cmVZYW1sUGFyc2VyIGZvciBzYWZlIFlBTUwgcGFyc2luZ1xuICAgKi9cbiAgYXN5bmMgaW1wb3J0RWxlbWVudChkYXRhOiBzdHJpbmcsIGZvcm1hdDogJ2pzb24nIHwgJ3lhbWwnIHwgJ21hcmtkb3duJyk6IFByb21pc2U8VGVtcGxhdGU+IHtcbiAgICB0cnkge1xuICAgICAgbGV0IG1ldGFkYXRhOiBQYXJ0aWFsPFRlbXBsYXRlTWV0YWRhdGE+O1xuICAgICAgbGV0IGNvbnRlbnQ6IHN0cmluZyA9ICcnO1xuICAgICAgXG4gICAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgICBjYXNlICdqc29uJzpcbiAgICAgICAgICBjb25zdCBqc29uRGF0YSA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICAgICAgbWV0YWRhdGEgPSBhd2FpdCB0aGlzLnZhbGlkYXRlTWV0YWRhdGEoanNvbkRhdGEubWV0YWRhdGEgfHwge30pO1xuICAgICAgICAgIGNvbnRlbnQgPSBqc29uRGF0YS5jb250ZW50IHx8ICcnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIFxuICAgICAgICBjYXNlICd5YW1sJzpcbiAgICAgICAgICAvLyBISUdIIFNFVkVSSVRZIEZJWDogVXNlIFNlY3VyZVlhbWxQYXJzZXIgdG8gcHJldmVudCBZQU1MIGluamVjdGlvbiBhdHRhY2tzXG4gICAgICAgICAgLy8gUHJldmlvdXNseTogVXNlZCB1bnNhZmUgWUFNTCBwYXJzaW5nIHdpdGhvdXQgdmFsaWRhdGlvblxuICAgICAgICAgIC8vIE5vdzogVXNlcyBTZWN1cmVZYW1sUGFyc2VyIHdoaWNoIHZhbGlkYXRlcyBjb250ZW50IGFuZCBwcmV2ZW50cyBtYWxpY2lvdXMgcGF0dGVybnNcbiAgICAgICAgICBjb25zdCBwYXJzZWQgPSBTZWN1cmVZYW1sUGFyc2VyLnBhcnNlKGRhdGEsIHtcbiAgICAgICAgICAgIG1heFlhbWxTaXplOiA2NCAqIDEwMjQsIC8vIDY0S0IgbGltaXRcbiAgICAgICAgICAgIHZhbGlkYXRlQ29udGVudDogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIFxuICAgICAgICAgIG1ldGFkYXRhID0gYXdhaXQgdGhpcy52YWxpZGF0ZU1ldGFkYXRhKChwYXJzZWQgYXMgYW55KS5tZXRhZGF0YSB8fCB7fSk7XG4gICAgICAgICAgY29udGVudCA9IHBhcnNlZC5jb250ZW50IHx8ICcnO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIExvZyBzZWN1cml0eSBldmVudCBmb3IgYXVkaXQgdHJhaWxcbiAgICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgICB0eXBlOiAnWUFNTF9QQVJTRV9TVUNDRVNTJyxcbiAgICAgICAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgICAgICAgIHNvdXJjZTogJ1RlbXBsYXRlTWFuYWdlci5pbXBvcnRFbGVtZW50JyxcbiAgICAgICAgICAgIGRldGFpbHM6ICdZQU1MIGNvbnRlbnQgc2FmZWx5IHBhcnNlZCBkdXJpbmcgaW1wb3J0J1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIFxuICAgICAgICBjYXNlICdtYXJrZG93bic6XG4gICAgICAgICAgY29uc3QgbWRQYXJzZWQgPSBtYXR0ZXIoZGF0YSk7XG4gICAgICAgICAgbWV0YWRhdGEgPSBhd2FpdCB0aGlzLnZhbGlkYXRlTWV0YWRhdGEobWRQYXJzZWQuZGF0YSk7XG4gICAgICAgICAgY29udGVudCA9IG1kUGFyc2VkLmNvbnRlbnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBpbXBvcnQgZm9ybWF0OiAke2Zvcm1hdH1gKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gQ3JlYXRlIGFuZCB2YWxpZGF0ZSB0aGUgdGVtcGxhdGVcbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gbmV3IFRlbXBsYXRlKG1ldGFkYXRhLCBjb250ZW50KTtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb24gPSB0ZW1wbGF0ZS52YWxpZGF0ZSgpO1xuICAgICAgXG4gICAgICBpZiAoIXZhbGlkYXRpb24udmFsaWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHRlbXBsYXRlOiAke3ZhbGlkYXRpb24uZXJyb3JzPy5tYXAoZSA9PiBlLm1lc3NhZ2UpLmpvaW4oJywgJyl9YCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gaW1wb3J0IHRlbXBsYXRlOiAke2Vycm9yfWApO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9ydCBhIHRlbXBsYXRlIHRvIGV4dGVybmFsIGZvcm1hdFxuICAgKiBTRUNVUklUWSBGSVggIzM6IFVzZXMgc2FmZSBZQU1MIHNlcmlhbGl6YXRpb25cbiAgICovXG4gIGFzeW5jIGV4cG9ydEVsZW1lbnQodGVtcGxhdGU6IFRlbXBsYXRlLCBmb3JtYXQ6ICdqc29uJyB8ICd5YW1sJyB8ICdtYXJrZG93bicpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHRyeSB7XG4gICAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgICBjYXNlICdqc29uJzpcbiAgICAgICAgICAvLyBVc2Ugc2VyaWFsaXplVG9KU09OIGZvciBKU09OIGZvcm1hdCwgb3Igc2VyaWFsaXplIGlmIG5vdCBhdmFpbGFibGVcbiAgICAgICAgICByZXR1cm4gKHRlbXBsYXRlIGFzIGFueSkuc2VyaWFsaXplVG9KU09OID8gKHRlbXBsYXRlIGFzIGFueSkuc2VyaWFsaXplVG9KU09OKCkgOiB0ZW1wbGF0ZS5zZXJpYWxpemUoKTtcbiAgICAgICAgICBcbiAgICAgICAgY2FzZSAneWFtbCc6XG4gICAgICAgICAgLy8gU0VDVVJJVFkgRklYOiBVc2UgeWFtbC5kdW1wIHdpdGggRkFJTFNBRkVfU0NIRU1BIHRvIHByZXZlbnQgY29kZSBleGVjdXRpb25cbiAgICAgICAgICAvLyBQcmV2aW91c2x5OiBDb3VsZCBwb3RlbnRpYWxseSB1c2UgdW5zYWZlIFlBTUwgZmVhdHVyZXNcbiAgICAgICAgICAvLyBOb3c6IEZBSUxTQUZFX1NDSEVNQSBvbmx5IGFsbG93cyBiYXNpYyBZQU1MIHR5cGVzLCBubyBKUy1zcGVjaWZpYyBjb25zdHJ1Y3RzXG4gICAgICAgICAgY29uc3QgeWFtbERhdGEgPSB7XG4gICAgICAgICAgICBtZXRhZGF0YTogdGVtcGxhdGUubWV0YWRhdGEsXG4gICAgICAgICAgICBjb250ZW50OiB0ZW1wbGF0ZS5jb250ZW50LFxuICAgICAgICAgICAgaWQ6IHRlbXBsYXRlLmlkLFxuICAgICAgICAgICAgdmVyc2lvbjogdGVtcGxhdGUudmVyc2lvblxuICAgICAgICAgIH07XG4gICAgICAgICAgXG4gICAgICAgICAgcmV0dXJuIHlhbWwuZHVtcCh5YW1sRGF0YSwge1xuICAgICAgICAgICAgLy8gU0VDVVJJVFkgVFJBREUtT0ZGOiBVc2luZyBERUZBVUxUX1NDSEVNQSBpbnN0ZWFkIG9mIEZBSUxTQUZFX1NDSEVNQVxuICAgICAgICAgICAgLy8gUmVhc29uOiBGQUlMU0FGRV9TQ0hFTUEgZG9lc24ndCBzdXBwb3J0IG51bWJlciB0eXBlcyB3aGljaCBhcmUgbmVlZGVkIGZvciB0ZW1wbGF0ZSBtZXRhZGF0YVxuICAgICAgICAgICAgLy8gUmlzazogREVGQVVMVF9TQ0hFTUEgYWxsb3dzIG1vcmUgWUFNTCBmZWF0dXJlcyB0aGF0IGNvdWxkIGJlIGV4cGxvaXRlZFxuICAgICAgICAgICAgLy8gTWl0aWdhdGlvbjogbm9SZWZzIHByZXZlbnRzIHJlZmVyZW5jZSBhdHRhY2tzLCBza2lwSW52YWxpZCBkcm9wcyBkYW5nZXJvdXMgY29uc3RydWN0c1xuICAgICAgICAgICAgLy8gQ29uc2lkZXI6IEZvciBtYXhpbXVtIHNlY3VyaXR5LCBpbXBsZW1lbnQgY3VzdG9tIHNjaGVtYSB0aGF0IG9ubHkgYWxsb3dzIG5lZWRlZCB0eXBlc1xuICAgICAgICAgICAgc2NoZW1hOiB5YW1sLkRFRkFVTFRfU0NIRU1BLFxuICAgICAgICAgICAgbm9SZWZzOiB0cnVlLCAgICAgICAgLy8gUHJldmVudCByZWZlcmVuY2UgYXR0YWNrc1xuICAgICAgICAgICAgc29ydEtleXM6IHRydWUsICAgICAgLy8gQ29uc2lzdGVudCBvdXRwdXRcbiAgICAgICAgICAgIHNraXBJbnZhbGlkOiB0cnVlLCAgIC8vIFNraXAgdW5zZXJpYWxpemFibGUgdmFsdWVzIGluc3RlYWQgb2YgdGhyb3dpbmdcbiAgICAgICAgICAgIGNvbmRlbnNlRmxvdzogdHJ1ZSwgIC8vIE1vcmUgY29tcGFjdCBvdXRwdXRcbiAgICAgICAgICAgIHF1b3RpbmdUeXBlOiAnXCInLCAgICAvLyBGb3JjZSBkb3VibGUgcXVvdGVzIGZvciBjb25zaXN0ZW5jeVxuICAgICAgICAgICAgZm9yY2VRdW90ZXM6IGZhbHNlICAgLy8gT25seSBxdW90ZSB3aGVuIG5lY2Vzc2FyeVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIFxuICAgICAgICBjYXNlICdtYXJrZG93bic6XG4gICAgICAgICAgY29uc3QgZnJvbnRtYXR0ZXIgPSB0aGlzLmNyZWF0ZUZyb250bWF0dGVyKHRlbXBsYXRlLm1ldGFkYXRhKTtcbiAgICAgICAgICByZXR1cm4gYC0tLVxcbiR7ZnJvbnRtYXR0ZXJ9XFxuLS0tXFxuXFxuJHt0ZW1wbGF0ZS5jb250ZW50fWA7XG4gICAgICAgICAgXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBleHBvcnQgZm9ybWF0OiAke2Zvcm1hdH1gKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gZXhwb3J0IHRlbXBsYXRlOiAke2Vycm9yfWApO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGFuZCBzYW5pdGl6ZSBtZXRhZGF0YVxuICAgKiBTRUNVUklUWSBGSVggIzQ6IENvbXByZWhlbnNpdmUgbWV0YWRhdGEgdmFsaWRhdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyB2YWxpZGF0ZU1ldGFkYXRhKGRhdGE6IGFueSk6IFByb21pc2U8UGFydGlhbDxUZW1wbGF0ZU1ldGFkYXRhPj4ge1xuICAgIGNvbnN0IG1ldGFkYXRhOiBQYXJ0aWFsPFRlbXBsYXRlTWV0YWRhdGE+ID0ge307XG4gICAgXG4gICAgLy8gU2FuaXRpemUgc3RyaW5nIGZpZWxkc1xuICAgIGlmIChkYXRhLm5hbWUpIHtcbiAgICAgIG1ldGFkYXRhLm5hbWUgPSBzYW5pdGl6ZUlucHV0KFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKGRhdGEubmFtZSkubm9ybWFsaXplZENvbnRlbnQsIDEwMCk7XG4gICAgfVxuICAgIFxuICAgIGlmIChkYXRhLmRlc2NyaXB0aW9uKSB7XG4gICAgICBtZXRhZGF0YS5kZXNjcmlwdGlvbiA9IHNhbml0aXplSW5wdXQoVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUoZGF0YS5kZXNjcmlwdGlvbikubm9ybWFsaXplZENvbnRlbnQsIDUwMCk7XG4gICAgfVxuICAgIFxuICAgIGlmIChkYXRhLmNhdGVnb3J5KSB7XG4gICAgICBtZXRhZGF0YS5jYXRlZ29yeSA9IHNhbml0aXplSW5wdXQoZGF0YS5jYXRlZ29yeSwgNTApO1xuICAgIH1cbiAgICBcbiAgICBpZiAoZGF0YS5vdXRwdXRfZm9ybWF0KSB7XG4gICAgICBtZXRhZGF0YS5vdXRwdXRfZm9ybWF0ID0gc2FuaXRpemVJbnB1dChkYXRhLm91dHB1dF9mb3JtYXQsIDIwKTtcbiAgICB9XG4gICAgXG4gICAgLy8gVmFsaWRhdGUgYXJyYXlzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YS50YWdzKSkge1xuICAgICAgbWV0YWRhdGEudGFncyA9IGRhdGEudGFncy5tYXAoKHRhZzogYW55KSA9PiBzYW5pdGl6ZUlucHV0KFN0cmluZyh0YWcpLCA1MCkpO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEuaW5jbHVkZXMpKSB7XG4gICAgICBtZXRhZGF0YS5pbmNsdWRlcyA9IGRhdGEuaW5jbHVkZXMubWFwKChpbmM6IGFueSkgPT4gc2FuaXRpemVJbnB1dChTdHJpbmcoaW5jKSwgMjAwKSk7XG4gICAgfVxuXG4gICAgLy8gRklYICMxMTIyOiBFeHRyYWN0IGFuZCB2YWxpZGF0ZSB0cmlnZ2VycyBmb3IgRW5oYW5jZWQgSW5kZXggc3VwcG9ydFxuICAgIC8vIEZvbGxvd2luZyBwYXR0ZXJuIGZyb20gU2tpbGxNYW5hZ2VyIChQUiAjMTEzNikgYW5kIE1lbW9yeU1hbmFnZXIgKFBSICMxMTMzKVxuICAgIGlmIChkYXRhLnRyaWdnZXJzICYmIEFycmF5LmlzQXJyYXkoZGF0YS50cmlnZ2VycykpIHtcbiAgICAgIGNvbnN0IHJhd1RyaWdnZXJzID0gZGF0YS50cmlnZ2VycztcbiAgICAgIGNvbnN0IHNhbml0aXplZFRyaWdnZXJzID0gcmF3VHJpZ2dlcnMubWFwKCh0cmlnZ2VyOiBhbnkpID0+ICh7XG4gICAgICAgIHJhdzogdHJpZ2dlcixcbiAgICAgICAgc2FuaXRpemVkOiBzYW5pdGl6ZUlucHV0KFN0cmluZyh0cmlnZ2VyKSwgTUFYX1RSSUdHRVJfTEVOR1RIKVxuICAgICAgfSkpO1xuXG4gICAgICAvLyBGaWx0ZXIgdmFsaWQgdHJpZ2dlcnMgYW5kIHRyYWNrIHJlamVjdGVkIG9uZXNcbiAgICAgIGNvbnN0IHZhbGlkVHJpZ2dlcnM6IHN0cmluZ1tdID0gW107XG4gICAgICBjb25zdCByZWplY3RlZFRyaWdnZXJzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IHsgcmF3LCBzYW5pdGl6ZWQgfSBvZiBzYW5pdGl6ZWRUcmlnZ2Vycykge1xuICAgICAgICBpZiAoIXNhbml0aXplZCkge1xuICAgICAgICAgIHJlamVjdGVkVHJpZ2dlcnMucHVzaChgXCIke3Jhd31cIiAoZW1wdHkgYWZ0ZXIgc2FuaXRpemF0aW9uKWApO1xuICAgICAgICB9IGVsc2UgaWYgKCFUUklHR0VSX1ZBTElEQVRJT05fUkVHRVgudGVzdChzYW5pdGl6ZWQpKSB7XG4gICAgICAgICAgcmVqZWN0ZWRUcmlnZ2Vycy5wdXNoKGBcIiR7c2FuaXRpemVkfVwiIChpbnZhbGlkIGZvcm1hdCAtIG11c3QgYmUgYWxwaGFudW1lcmljIHdpdGggaHlwaGVucy91bmRlcnNjb3JlcyBvbmx5KWApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbGlkVHJpZ2dlcnMucHVzaChzYW5pdGl6ZWQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIExvZyB3YXJuaW5ncyBmb3IgcmVqZWN0ZWQgdHJpZ2dlcnMgdG8gYWlkIGRlYnVnZ2luZ1xuICAgICAgaWYgKHJlamVjdGVkVHJpZ2dlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICBsb2dnZXIud2FybihcbiAgICAgICAgICBgVGVtcGxhdGUgXCIke21ldGFkYXRhLm5hbWUgfHwgJ3Vua25vd24nfVwiOiBSZWplY3RlZCAke3JlamVjdGVkVHJpZ2dlcnMubGVuZ3RofSBpbnZhbGlkIHRyaWdnZXIocylgLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRlbXBsYXRlTmFtZTogbWV0YWRhdGEubmFtZSxcbiAgICAgICAgICAgIHJlamVjdGVkVHJpZ2dlcnMsXG4gICAgICAgICAgICBhY2NlcHRlZENvdW50OiB2YWxpZFRyaWdnZXJzLmxlbmd0aFxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gQXBwbHkgbGltaXQgYW5kIHdhcm4gaWYgZXhjZWVkZWRcbiAgICAgIGlmICh2YWxpZFRyaWdnZXJzLmxlbmd0aCA+IDIwKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKFxuICAgICAgICAgIGBUZW1wbGF0ZSBcIiR7bWV0YWRhdGEubmFtZSB8fCAndW5rbm93bid9XCI6IFRyaWdnZXIgY291bnQgZXhjZWVkcyBsaW1pdCAoJHt2YWxpZFRyaWdnZXJzLmxlbmd0aH0gPiAyMCksIHRydW5jYXRpbmdgLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRlbXBsYXRlTmFtZTogbWV0YWRhdGEubmFtZSxcbiAgICAgICAgICAgIHRvdGFsVHJpZ2dlcnM6IHZhbGlkVHJpZ2dlcnMubGVuZ3RoLFxuICAgICAgICAgICAgdHJ1bmNhdGVkVHJpZ2dlcnM6IHZhbGlkVHJpZ2dlcnMuc2xpY2UoMjApXG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBtZXRhZGF0YS50cmlnZ2VycyA9IHZhbGlkVHJpZ2dlcnMuc2xpY2UoMCwgMjApO1xuICAgIH1cbiAgICBcbiAgICAvLyBDb3B5IHNhZmUgZmllbGRzXG4gICAgaWYgKHR5cGVvZiBkYXRhLnVzYWdlX2NvdW50ID09PSAnbnVtYmVyJykge1xuICAgICAgbWV0YWRhdGEudXNhZ2VfY291bnQgPSBNYXRoLm1heCgwLCBNYXRoLmZsb29yKGRhdGEudXNhZ2VfY291bnQpKTtcbiAgICB9XG4gICAgXG4gICAgaWYgKGRhdGEubGFzdF91c2VkKSB7XG4gICAgICBtZXRhZGF0YS5sYXN0X3VzZWQgPSBzYW5pdGl6ZUlucHV0KFN0cmluZyhkYXRhLmxhc3RfdXNlZCksIDUwKTtcbiAgICB9XG4gICAgXG4gICAgLy8gVmFsaWRhdGUgY29tcGxleCBmaWVsZHNcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhLnZhcmlhYmxlcykpIHtcbiAgICAgIG1ldGFkYXRhLnZhcmlhYmxlcyA9IGRhdGEudmFyaWFibGVzLm1hcCgodjogYW55KSA9PiAoe1xuICAgICAgICBuYW1lOiBzYW5pdGl6ZUlucHV0KHYubmFtZSB8fCAnJywgNTApLFxuICAgICAgICB0eXBlOiBzYW5pdGl6ZUlucHV0KHYudHlwZSB8fCAnc3RyaW5nJywgMjApLFxuICAgICAgICBkZXNjcmlwdGlvbjogdi5kZXNjcmlwdGlvbiA/IHNhbml0aXplSW5wdXQodi5kZXNjcmlwdGlvbiwgMjAwKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgcmVxdWlyZWQ6IEJvb2xlYW4odi5yZXF1aXJlZCksXG4gICAgICAgIGRlZmF1bHQ6IHYuZGVmYXVsdCxcbiAgICAgICAgdmFsaWRhdGlvbjogdi52YWxpZGF0aW9uID8gc2FuaXRpemVJbnB1dCh2LnZhbGlkYXRpb24sIDIwMCkgOiB1bmRlZmluZWQsXG4gICAgICAgIG9wdGlvbnM6IEFycmF5LmlzQXJyYXkodi5vcHRpb25zKSA/IHYub3B0aW9ucy5tYXAoKG86IGFueSkgPT4gc2FuaXRpemVJbnB1dChTdHJpbmcobyksIDEwMCkpIDogdW5kZWZpbmVkLFxuICAgICAgICBmb3JtYXQ6IHYuZm9ybWF0ID8gc2FuaXRpemVJbnB1dCh2LmZvcm1hdCwgNTApIDogdW5kZWZpbmVkXG4gICAgICB9KSk7XG4gICAgfVxuICAgIFxuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEuZXhhbXBsZXMpKSB7XG4gICAgICBtZXRhZGF0YS5leGFtcGxlcyA9IGRhdGEuZXhhbXBsZXMubWFwKChleDogYW55KSA9PiAoe1xuICAgICAgICB0aXRsZTogc2FuaXRpemVJbnB1dChleC50aXRsZSB8fCAnJywgMTAwKSxcbiAgICAgICAgZGVzY3JpcHRpb246IGV4LmRlc2NyaXB0aW9uID8gc2FuaXRpemVJbnB1dChleC5kZXNjcmlwdGlvbiwgNTAwKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgdmFyaWFibGVzOiBleC52YXJpYWJsZXMgfHwge30sXG4gICAgICAgIG91dHB1dDogZXgub3V0cHV0ID8gc2FuaXRpemVJbnB1dChleC5vdXRwdXQsIDUwMDApIDogdW5kZWZpbmVkXG4gICAgICB9KSk7XG4gICAgfVxuICAgIFxuICAgIC8vIENvcHkgc3RhbmRhcmQgZWxlbWVudCBmaWVsZHNcbiAgICBtZXRhZGF0YS5hdXRob3IgPSBkYXRhLmF1dGhvciA/IHNhbml0aXplSW5wdXQoZGF0YS5hdXRob3IsIDEwMCkgOiB1bmRlZmluZWQ7XG4gICAgbWV0YWRhdGEudmVyc2lvbiA9IGRhdGEudmVyc2lvbiA/IHNhbml0aXplSW5wdXQoZGF0YS52ZXJzaW9uLCAyMCkgOiB1bmRlZmluZWQ7XG4gICAgXG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBZQU1MIGZyb250bWF0dGVyIGZyb20gbWV0YWRhdGFcbiAgICogU0VDVVJJVFkgRklYICMzOiBTYWZlIFlBTUwgZ2VuZXJhdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVGcm9udG1hdHRlcihtZXRhZGF0YTogVGVtcGxhdGVNZXRhZGF0YSk6IHN0cmluZyB7XG4gICAgLy8gU0VDVVJJVFkgRklYOiBVc2UgeWFtbC5kdW1wIHdpdGggc2VjdXJpdHkgb3B0aW9uc1xuICAgIC8vIEVuc3VyZXMgbm8gY29kZSBleGVjdXRpb24gdnVsbmVyYWJpbGl0aWVzIGluIGdlbmVyYXRlZCBZQU1MXG4gICAgY29uc3Qgc2FmZU1ldGFkYXRhID0ge1xuICAgICAgbmFtZTogbWV0YWRhdGEubmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBtZXRhZGF0YS5kZXNjcmlwdGlvbixcbiAgICAgIGF1dGhvcjogbWV0YWRhdGEuYXV0aG9yLFxuICAgICAgdmVyc2lvbjogbWV0YWRhdGEudmVyc2lvbixcbiAgICAgIGNhdGVnb3J5OiBtZXRhZGF0YS5jYXRlZ29yeSxcbiAgICAgIG91dHB1dF9mb3JtYXQ6IG1ldGFkYXRhLm91dHB1dF9mb3JtYXQsXG4gICAgICB0YWdzOiBtZXRhZGF0YS50YWdzLFxuICAgICAgaW5jbHVkZXM6IG1ldGFkYXRhLmluY2x1ZGVzLFxuICAgICAgdXNhZ2VfY291bnQ6IG1ldGFkYXRhLnVzYWdlX2NvdW50LFxuICAgICAgbGFzdF91c2VkOiBtZXRhZGF0YS5sYXN0X3VzZWQsXG4gICAgICB2YXJpYWJsZXM6IG1ldGFkYXRhLnZhcmlhYmxlcyxcbiAgICAgIGV4YW1wbGVzOiBtZXRhZGF0YS5leGFtcGxlcyxcbiAgICAgIHRyaWdnZXJzOiBtZXRhZGF0YS50cmlnZ2VycyAgLy8gRklYICMxMTIyOiBQcmVzZXJ2ZSB0cmlnZ2VycyB3aGVuIHNhdmluZ1xuICAgIH07XG4gICAgXG4gICAgLy8gUmVtb3ZlIHVuZGVmaW5lZCB2YWx1ZXNcbiAgICBjb25zdCBjbGVhbk1ldGFkYXRhID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgT2JqZWN0LmVudHJpZXMoc2FmZU1ldGFkYXRhKS5maWx0ZXIoKFtfLCB2YWx1ZV0pID0+IHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgKTtcbiAgICBcbiAgICByZXR1cm4geWFtbC5kdW1wKGNsZWFuTWV0YWRhdGEsIHtcbiAgICAgIC8vIFNFQ1VSSVRZIFRSQURFLU9GRjogU2FtZSBhcyBleHBvcnRFbGVtZW50IC0gdXNpbmcgREVGQVVMVF9TQ0hFTUEgZm9yIHR5cGUgc3VwcG9ydFxuICAgICAgLy8gU2VlIGV4cG9ydEVsZW1lbnQgbWV0aG9kIGZvciBkZXRhaWxlZCBzZWN1cml0eSBjb25zaWRlcmF0aW9uc1xuICAgICAgc2NoZW1hOiB5YW1sLkRFRkFVTFRfU0NIRU1BLFxuICAgICAgbm9SZWZzOiB0cnVlLFxuICAgICAgc29ydEtleXM6IHRydWUsXG4gICAgICBsaW5lV2lkdGg6IDgwLFxuICAgICAgc2tpcEludmFsaWQ6IHRydWUsXG4gICAgICBjb25kZW5zZUZsb3c6IHRydWUsXG4gICAgICBxdW90aW5nVHlwZTogJ1wiJyxcbiAgICAgIGZvcmNlUXVvdGVzOiBmYWxzZVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgdGVtcGxhdGUgZmlsZSBleGlzdHNcbiAgICovXG4gIGFzeW5jIGV4aXN0cyhmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3Qgc2FuaXRpemVkUGF0aCA9IHNhbml0aXplSW5wdXQoZmlsZVBhdGgsIDI1NSk7XG4gICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLmlzQWJzb2x1dGUoc2FuaXRpemVkUGF0aCkgXG4gICAgICA/IHNhbml0aXplZFBhdGggXG4gICAgICA6IHBhdGguam9pbih0aGlzLnRlbXBsYXRlc0Rpciwgc2FuaXRpemVkUGF0aCk7XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZzLmFjY2VzcyhmdWxsUGF0aCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmluZCBtdWx0aXBsZSB0ZW1wbGF0ZXMgYnkgcHJlZGljYXRlXG4gICAqL1xuICBhc3luYyBmaW5kTWFueShwcmVkaWNhdGU6ICh0ZW1wbGF0ZTogVGVtcGxhdGUpID0+IGJvb2xlYW4pOiBQcm9taXNlPFRlbXBsYXRlW10+IHtcbiAgICBjb25zdCB0ZW1wbGF0ZXMgPSBhd2FpdCB0aGlzLmxpc3QoKTtcbiAgICByZXR1cm4gdGVtcGxhdGVzLmZpbHRlcihwcmVkaWNhdGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGEgdGVtcGxhdGVcbiAgICovXG4gIHZhbGlkYXRlKHRlbXBsYXRlOiBUZW1wbGF0ZSk6IEVsZW1lbnRWYWxpZGF0aW9uUmVzdWx0IHtcbiAgICByZXR1cm4gdGVtcGxhdGUudmFsaWRhdGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBhIGZpbGUgcGF0aFxuICAgKi9cbiAgdmFsaWRhdGVQYXRoKGZpbGVQYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc2FuaXRpemVkUGF0aCA9IHNhbml0aXplSW5wdXQoZmlsZVBhdGgsIDI1NSk7XG4gICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguaXNBYnNvbHV0ZShzYW5pdGl6ZWRQYXRoKSBcbiAgICAgICAgPyBzYW5pdGl6ZWRQYXRoIFxuICAgICAgICA6IHBhdGguam9pbih0aGlzLnRlbXBsYXRlc0Rpciwgc2FuaXRpemVkUGF0aCk7XG4gICAgICBcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gcGF0aC5ub3JtYWxpemUoZnVsbFBhdGgpO1xuICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRQYXRoLnN0YXJ0c1dpdGgodGhpcy50ZW1wbGF0ZXNEaXIpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGVsZW1lbnQgdHlwZVxuICAgKi9cbiAgZ2V0RWxlbWVudFR5cGUoKTogRWxlbWVudFR5cGUge1xuICAgIHJldHVybiBFbGVtZW50VHlwZS5URU1QTEFURTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGZpbGUgZXh0ZW5zaW9uXG4gICAqL1xuICBnZXRGaWxlRXh0ZW5zaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICcubWQnO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgdGVtcGxhdGVzIGJ5IGNhdGVnb3J5XG4gICAqL1xuICBhc3luYyBmaW5kQnlDYXRlZ29yeShjYXRlZ29yeTogc3RyaW5nKTogUHJvbWlzZTxUZW1wbGF0ZVtdPiB7XG4gICAgY29uc3Qgc2FuaXRpemVkQ2F0ZWdvcnkgPSBzYW5pdGl6ZUlucHV0KGNhdGVnb3J5LCA1MCk7XG4gICAgcmV0dXJuIHRoaXMubGlzdCgpLnRoZW4odGVtcGxhdGVzID0+IFxuICAgICAgdGVtcGxhdGVzLmZpbHRlcih0ID0+IHQubWV0YWRhdGEuY2F0ZWdvcnkgPT09IHNhbml0aXplZENhdGVnb3J5KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRmluZCB0ZW1wbGF0ZXMgYnkgdGFnXG4gICAqL1xuICBhc3luYyBmaW5kQnlUYWcodGFnOiBzdHJpbmcpOiBQcm9taXNlPFRlbXBsYXRlW10+IHtcbiAgICBjb25zdCBzYW5pdGl6ZWRUYWcgPSBzYW5pdGl6ZUlucHV0KHRhZywgNTApO1xuICAgIHJldHVybiB0aGlzLmxpc3QoKS50aGVuKHRlbXBsYXRlcyA9PiBcbiAgICAgIHRlbXBsYXRlcy5maWx0ZXIodCA9PiB0Lm1ldGFkYXRhLnRhZ3M/LmluY2x1ZGVzKHNhbml0aXplZFRhZykpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgbW9zdCB1c2VkIHRlbXBsYXRlc1xuICAgKi9cbiAgYXN5bmMgZ2V0TW9zdFVzZWQobGltaXQ6IG51bWJlciA9IDEwKTogUHJvbWlzZTxUZW1wbGF0ZVtdPiB7XG4gICAgLy8gU0VDVVJJVFkgRklYOiBWYWxpZGF0ZSBsaW1pdCBwYXJhbWV0ZXIgdG8gcHJldmVudCBleGNlc3NpdmUgbWVtb3J5IHVzYWdlXG4gICAgLy8gUHJldmlvdXNseTogTm8gdmFsaWRhdGlvbiBjb3VsZCBhbGxvdyB2ZXJ5IGxhcmdlIGxpbWl0c1xuICAgIC8vIE5vdzogRW5mb3JjZXMgcmVhc29uYWJsZSBib3VuZHNcbiAgICBjb25zdCBNSU5fTElNSVQgPSAxO1xuICAgIGNvbnN0IE1BWF9MSU1JVCA9IDEwMDtcbiAgICBjb25zdCB2YWxpZGF0ZWRMaW1pdCA9IE1hdGgubWF4KE1JTl9MSU1JVCwgTWF0aC5taW4oTUFYX0xJTUlULCBNYXRoLmZsb29yKGxpbWl0KSkpO1xuICAgIFxuICAgIGlmIChsaW1pdCAhPT0gdmFsaWRhdGVkTGltaXQpIHtcbiAgICAgIGxvZ2dlci53YXJuKGBnZXRNb3N0VXNlZDogbGltaXQgJHtsaW1pdH0gYWRqdXN0ZWQgdG8gJHt2YWxpZGF0ZWRMaW1pdH0gKHZhbGlkIHJhbmdlOiAke01JTl9MSU1JVH0tJHtNQVhfTElNSVR9KWApO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCB0ZW1wbGF0ZXMgPSBhd2FpdCB0aGlzLmxpc3QoKTtcbiAgICByZXR1cm4gdGVtcGxhdGVzXG4gICAgICAuc29ydCgoYSwgYikgPT4gKGIubWV0YWRhdGEudXNhZ2VfY291bnQgfHwgMCkgLSAoYS5tZXRhZGF0YS51c2FnZV9jb3VudCB8fCAwKSlcbiAgICAgIC5zbGljZSgwLCB2YWxpZGF0ZWRMaW1pdCk7XG4gIH1cbn0iXX0=
573
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGVtcGxhdGVNYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL3RlbXBsYXRlcy9UZW1wbGF0ZU1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O0dBV0c7QUFJSCxPQUFPLEVBQUUsUUFBUSxFQUFvQixNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdkUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFFLGFBQWEsRUFBZ0IsTUFBTSxrQ0FBa0MsQ0FBQztBQUMvRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNqRixPQUFPLEVBQUUsUUFBUSxJQUFJLEVBQUUsRUFBRSxNQUFNLElBQUksQ0FBQztBQUNwQyxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUNoQyxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFFakMsNkNBQTZDO0FBQzdDLE1BQU0sa0JBQWtCLEdBQUcsRUFBRSxDQUFDO0FBQzlCLE1BQU0sd0JBQXdCLEdBQUcsbUJBQW1CLENBQUM7QUFFckQsTUFBTSxPQUFPLGVBQWU7SUFDbEIsZ0JBQWdCLENBQW1CO0lBQ25DLFlBQVksQ0FBUztJQUNyQixTQUFTLEdBQTBCLElBQUksR0FBRyxFQUFFLENBQUM7SUFFckQ7UUFDRSxJQUFJ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LFdBQVcsQ0FBQyxRQUFnQixFQUFFO1FBQ2xDLDJFQUEyRTtRQUMzRSwwREFBMEQ7UUFDMUQsa0NBQWtDO1FBQ2xDLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQztRQUNwQixNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUM7UUFDdEIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFbkYsSUFBSSxLQUFLLEtBQUssY0FBYyxFQUFFLENBQUM7WUFDN0IsTUFBTSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsS0FBSyxnQkFBZ0IsY0FBYyxrQkFBa0IsU0FBUyxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFDcEgsQ0FBQztRQUVELE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3BDLE9BQU8sU0FBUzthQUNiLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUM3RSxLQUFLLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQzlCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGVtcGxhdGVNYW5hZ2VyIC0gSW1wbGVtZW50YXRpb24gb2YgSUVsZW1lbnRNYW5hZ2VyIGZvciBUZW1wbGF0ZSBlbGVtZW50c1xuICogSGFuZGxlcyBDUlVEIG9wZXJhdGlvbnMgYW5kIGxpZmVjeWNsZSBtYW5hZ2VtZW50IGZvciB0ZW1wbGF0ZXMgaW1wbGVtZW50aW5nIElFbGVtZW50XG4gKiBcbiAqIFNFQ1VSSVRZIEZJWEVTIElNUExFTUVOVEVEIChGb2xsb3dpbmcgUFIgIzMxOSBwYXR0ZXJucyk6XG4gKiAxLiBDUklUSUNBTDogRml4ZWQgcmFjZSBjb25kaXRpb25zIGluIGZpbGUgb3BlcmF0aW9ucyBieSB1c2luZyBGaWxlTG9ja01hbmFnZXIgZm9yIGF0b21pYyByZWFkcy93cml0ZXNcbiAqIDIuIENSSVRJQ0FMOiBGaXhlZCBkeW5hbWljIHJlcXVpcmUoKSBzdGF0ZW1lbnRzIGJ5IHVzaW5nIHN0YXRpYyBpbXBvcnRzXG4gKiAzLiBISUdIOiBGaXhlZCB1bnZhbGlkYXRlZCBZQU1MIHBhcnNpbmcgdnVsbmVyYWJpbGl0eSBieSB1c2luZyBTZWN1cmVZYW1sUGFyc2VyXG4gKiA0LiBNRURJVU06IEFsbCB1c2VyIGlucHV0cyBhcmUgbm93IHZhbGlkYXRlZCBhbmQgc2FuaXRpemVkXG4gKiA1LiBNRURJVU06IEF1ZGl0IGxvZ2dpbmcgYWRkZWQgZm9yIHNlY3VyaXR5IG9wZXJhdGlvbnNcbiAqIDYuIE1FRElVTTogUGF0aCB0cmF2ZXJzYWwgcHJldmVudGlvbiBmb3IgYWxsIGZpbGUgb3BlcmF0aW9uc1xuICovXG5cbmltcG9ydCB7IElFbGVtZW50TWFuYWdlciB9IGZyb20gJy4uLy4uL3R5cGVzL2VsZW1lbnRzL0lFbGVtZW50TWFuYWdlci5qcyc7XG5pbXBvcnQgeyBFbGVtZW50VmFsaWRhdGlvblJlc3VsdCB9IGZyb20gJy4uLy4uL3R5cGVzL2VsZW1lbnRzL0lFbGVtZW50LmpzJztcbmltcG9ydCB7IFRlbXBsYXRlLCBUZW1wbGF0ZU1ldGFkYXRhIH0gZnJvbSAnLi9UZW1wbGF0ZS5qcyc7XG5pbXBvcnQgeyBFbGVtZW50VHlwZSB9IGZyb20gJy4uLy4uL3BvcnRmb2xpby90eXBlcy5qcyc7XG5pbXBvcnQgeyBQb3J0Zm9saW9NYW5hZ2VyIH0gZnJvbSAnLi4vLi4vcG9ydGZvbGlvL1BvcnRmb2xpb01hbmFnZXIuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IEZpbGVMb2NrTWFuYWdlciB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L2ZpbGVMb2NrTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBTZWN1cmVZYW1sUGFyc2VyIH0gZnJvbSAnLi4vLi4vc2VjdXJpdHkvc2VjdXJlWWFtbFBhcnNlci5qcyc7XG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tICcuLi8uLi9zZWN1cml0eS9zZWN1cml0eU1vbml0b3IuanMnO1xuaW1wb3J0IHsgc2FuaXRpemVJbnB1dCwgdmFsaWRhdGVQYXRoIH0gZnJvbSAnLi4vLi4vc2VjdXJpdHkvSW5wdXRWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgVW5pY29kZVZhbGlkYXRvciB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L3ZhbGlkYXRvcnMvdW5pY29kZVZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBwcm9taXNlcyBhcyBmcyB9IGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyB5YW1sIGZyb20gJ2pzLXlhbWwnO1xuaW1wb3J0IG1hdHRlciBmcm9tICdncmF5LW1hdHRlcic7XG5cbi8vIFZhbGlkYXRpb24gY29uc3RhbnRzIGZvciB0ZW1wbGF0ZSB0cmlnZ2Vyc1xuY29uc3QgTUFYX1RSSUdHRVJfTEVOR1RIID0gNTA7XG5jb25zdCBUUklHR0VSX1ZBTElEQVRJT05fUkVHRVggPSAvXlthLXpBLVowLTlcXC1fXSskLztcblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlTWFuYWdlciBpbXBsZW1lbnRzIElFbGVtZW50TWFuYWdlcjxUZW1wbGF0ZT4ge1xuICBwcml2YXRlIHBvcnRmb2xpb01hbmFnZXI6IFBvcnRmb2xpb01hbmFnZXI7XG4gIHByaXZhdGUgdGVtcGxhdGVzRGlyOiBzdHJpbmc7XG4gIHByaXZhdGUgdGVtcGxhdGVzOiBNYXA8c3RyaW5nLCBUZW1wbGF0ZT4gPSBuZXcgTWFwKCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5wb3J0Zm9saW9NYW5hZ2VyID0gUG9ydGZvbGlvTWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuICAgIHRoaXMudGVtcGxhdGVzRGlyID0gdGhpcy5wb3J0Zm9saW9NYW5hZ2VyLmdldEVsZW1lbnREaXIoRWxlbWVudFR5cGUuVEVNUExBVEUpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgYSB0ZW1wbGF0ZSBmcm9tIGZpbGVcbiAgICogU0VDVVJJVFkgRklYICMxOiBVc2VzIEZpbGVMb2NrTWFuYWdlci5hdG9taWNSZWFkRmlsZSgpIGluc3RlYWQgb2YgZnMucmVhZEZpbGUoKVxuICAgKiB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBhbmQgZW5zdXJlIGF0b21pYyBmaWxlIG9wZXJhdGlvbnNcbiAgICovXG4gIGFzeW5jIGxvYWQoZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8VGVtcGxhdGU+IHtcbiAgICAvLyBTRUNVUklUWSBGSVggIzQgJiAjNjogVmFsaWRhdGUgYW5kIHNhbml0aXplIHRoZSBmaWxlIHBhdGhcbiAgICAvLyBQcmV2aW91c2x5OiBEaXJlY3QgdXNlIG9mIHVzZXItcHJvdmlkZWQgcGF0aHMgY291bGQgbGVhZCB0byBwYXRoIHRyYXZlcnNhbFxuICAgIC8vIE5vdzogRnVsbCB2YWxpZGF0aW9uIHByZXZlbnRzIGFjY2Vzc2luZyBmaWxlcyBvdXRzaWRlIHRlbXBsYXRlcyBkaXJlY3RvcnlcbiAgICBjb25zdCBzYW5pdGl6ZWRQYXRoID0gc2FuaXRpemVJbnB1dChmaWxlUGF0aCwgMjU1KTtcbiAgICBcbiAgICAvLyBFbnN1cmUgdGhlIHBhdGggaXMgd2l0aGluIHRoZSB0ZW1wbGF0ZXMgZGlyZWN0b3J5XG4gICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLmlzQWJzb2x1dGUoc2FuaXRpemVkUGF0aCkgXG4gICAgICA/IHNhbml0aXplZFBhdGggXG4gICAgICA6IHBhdGguam9pbih0aGlzLnRlbXBsYXRlc0Rpciwgc2FuaXRpemVkUGF0aCk7XG4gICAgXG4gICAgLy8gU0VDVVJJVFkgRklYICM2OiBQcmV2ZW50IHBhdGggdHJhdmVyc2FsIGF0dGFja3NcbiAgICBjb25zdCBub3JtYWxpemVkUGF0aCA9IHBhdGgubm9ybWFsaXplKGZ1bGxQYXRoKTtcbiAgICBpZiAoIW5vcm1hbGl6ZWRQYXRoLnN0YXJ0c1dpdGgodGhpcy50ZW1wbGF0ZXNEaXIpKSB7XG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdQQVRIX1RSQVZFUlNBTF9BVFRFTVBUJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdDUklUSUNBTCcsXG4gICAgICAgIHNvdXJjZTogJ1RlbXBsYXRlTWFuYWdlci5sb2FkJyxcbiAgICAgICAgZGV0YWlsczogYEF0dGVtcHRlZCB0byBhY2Nlc3MgZmlsZSBvdXRzaWRlIHRlbXBsYXRlcyBkaXJlY3Rvcnk6ICR7c2FuaXRpemVkUGF0aH1gXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGF0aCB0cmF2ZXJzYWwgYXR0ZW1wdCBkZXRlY3RlZCcpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBDUklUSUNBTCBGSVg6IFVzZSBhdG9taWMgZmlsZSByZWFkIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zXG4gICAgICAvLyBQcmV2aW91c2x5OiBjb25zdCBjb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUoZnVsbFBhdGgsICd1dGYtOCcpO1xuICAgICAgLy8gTm93OiBVc2VzIEZpbGVMb2NrTWFuYWdlciB3aXRoIHByb3BlciBlbmNvZGluZyBvYmplY3QgZm9ybWF0XG4gICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgRmlsZUxvY2tNYW5hZ2VyLmF0b21pY1JlYWRGaWxlKG5vcm1hbGl6ZWRQYXRoLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pO1xuICAgICAgXG4gICAgICAvLyBQYXJzZSB0aGUgdGVtcGxhdGUgZmlsZSAoZXhwZWN0ZWQgZm9ybWF0OiBZQU1MIGZyb250bWF0dGVyICsgY29udGVudClcbiAgICAgIGNvbnN0IHBhcnNlZCA9IG1hdHRlcihjb250ZW50KTtcbiAgICAgIFxuICAgICAgLy8gU0VDVVJJVFkgRklYICMzOiBWYWxpZGF0ZSBZQU1MIG1ldGFkYXRhIHVzaW5nIFNlY3VyZVlhbWxQYXJzZXJcbiAgICAgIC8vIFByZXZpb3VzbHk6IEZyb250bWF0dGVyIHBhcnNpbmcgY291bGQgYmUgdnVsbmVyYWJsZSB0byBZQU1MIGluamVjdGlvblxuICAgICAgLy8gTm93OiBTZWN1cmVZYW1sUGFyc2VyIHZhbGlkYXRlcyBhbmQgc2FuaXRpemVzIFlBTUwgY29udGVudFxuICAgICAgY29uc3QgbWV0YWRhdGEgPSBhd2FpdCB0aGlzLnZhbGlkYXRlTWV0YWRhdGEocGFyc2VkLmRhdGEpO1xuICAgICAgXG4gICAgICAvLyBDcmVhdGUgdGhlIHRlbXBsYXRlIGluc3RhbmNlXG4gICAgICBjb25zdCB0ZW1wbGF0ZSA9IG5ldyBUZW1wbGF0ZShtZXRhZGF0YSwgcGFyc2VkLmNvbnRlbnQpO1xuICAgICAgXG4gICAgICAvLyBDYWNoZSB0aGUgdGVtcGxhdGVcbiAgICAgIHRoaXMudGVtcGxhdGVzLnNldChub3JtYWxpemVkUGF0aCwgdGVtcGxhdGUpO1xuICAgICAgXG4gICAgICAvLyBTRUNVUklUWSBGSVggIzU6IExvZyBzdWNjZXNzZnVsIHRlbXBsYXRlIGxvYWQgZm9yIGF1ZGl0IHRyYWlsXG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdURU1QTEFURV9MT0FERUQnLFxuICAgICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICAgIHNvdXJjZTogJ1RlbXBsYXRlTWFuYWdlci5sb2FkJyxcbiAgICAgICAgZGV0YWlsczogYFRlbXBsYXRlIGxvYWRlZDogJHt0ZW1wbGF0ZS5tZXRhZGF0YS5uYW1lfSBmcm9tICR7cGF0aC5iYXNlbmFtZShub3JtYWxpemVkUGF0aCl9YFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gbG9hZCB0ZW1wbGF0ZSBmcm9tICR7bm9ybWFsaXplZFBhdGh9OiAke2Vycm9yfWApO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgYSB0ZW1wbGF0ZSB0byBmaWxlXG4gICAqIFNFQ1VSSVRZIEZJWCAjMTogVXNlcyBGaWxlTG9ja01hbmFnZXIuYXRvbWljV3JpdGVGaWxlKCkgZm9yIGF0b21pYyBvcGVyYXRpb25zXG4gICAqL1xuICBhc3luYyBzYXZlKHRlbXBsYXRlOiBUZW1wbGF0ZSwgZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFNFQ1VSSVRZIEZJWCAjNDogVmFsaWRhdGUgaW5wdXRzXG4gICAgY29uc3QgdmFsaWRhdGlvbiA9IHRlbXBsYXRlLnZhbGlkYXRlKCk7XG4gICAgaWYgKCF2YWxpZGF0aW9uLnZhbGlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBzYXZlIGludmFsaWQgdGVtcGxhdGU6ICR7dmFsaWRhdGlvbi5lcnJvcnM/Lm1hcChlID0+IGUubWVzc2FnZSkuam9pbignLCAnKX1gKTtcbiAgICB9XG5cbiAgICAvLyBTRUNVUklUWSBGSVggIzQgJiAjNjogVmFsaWRhdGUgYW5kIHNhbml0aXplIHRoZSBmaWxlIHBhdGhcbiAgICBjb25zdCBzYW5pdGl6ZWRQYXRoID0gc2FuaXRpemVJbnB1dChmaWxlUGF0aCwgMjU1KTtcbiAgICBcbiAgICAvLyBFbnN1cmUgdGhlIHBhdGggaXMgd2l0aGluIHRoZSB0ZW1wbGF0ZXMgZGlyZWN0b3J5XG4gICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLmlzQWJzb2x1dGUoc2FuaXRpemVkUGF0aCkgXG4gICAgICA/IHNhbml0aXplZFBhdGggXG4gICAgICA6IHBhdGguam9pbih0aGlzLnRlbXBsYXRlc0Rpciwgc2FuaXRpemVkUGF0aCk7XG4gICAgXG4gICAgLy8gU0VDVVJJVFkgRklYICM2OiBQcmV2ZW50IHBhdGggdHJhdmVyc2FsIGF0dGFja3NcbiAgICBjb25zdCBub3JtYWxpemVkUGF0aCA9IHBhdGgubm9ybWFsaXplKGZ1bGxQYXRoKTtcbiAgICBpZiAoIW5vcm1hbGl6ZWRQYXRoLnN0YXJ0c1dpdGgodGhpcy50ZW1wbGF0ZXNEaXIpKSB7XG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdQQVRIX1RSQVZFUlNBTF9BVFRFTVBUJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdDUklUSUNBTCcsXG4gICAgICAgIHNvdXJjZTogJ1RlbXBsYXRlTWFuYWdlci5zYXZlJyxcbiAgICAgICAgZGV0YWlsczogYEF0dGVtcHRlZCB0byBzYXZlIGZpbGUgb3V0c2lkZSB0ZW1wbGF0ZXMgZGlyZWN0b3J5OiAke3Nhbml0aXplZFBhdGh9YFxuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhdGggdHJhdmVyc2FsIGF0dGVtcHQgZGV0ZWN0ZWQnKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gRW5zdXJlIGRpcmVjdG9yeSBleGlzdHNcbiAgICAgIGF3YWl0IGZzLm1rZGlyKHBhdGguZGlybmFtZShub3JtYWxpemVkUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgXG4gICAgICAvLyBDcmVhdGUgZnJvbnRtYXR0ZXIgY29udGVudFxuICAgICAgY29uc3QgZnJvbnRtYXR0ZXIgPSB0aGlzLmNyZWF0ZUZyb250bWF0dGVyKHRlbXBsYXRlLm1ldGFkYXRhKTtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBgLS0tXFxuJHtmcm9udG1hdHRlcn1cXG4tLS1cXG5cXG4ke3RlbXBsYXRlLmNvbnRlbnR9YDtcbiAgICAgIFxuICAgICAgLy8gQ1JJVElDQUwgRklYOiBVc2UgYXRvbWljIGZpbGUgd3JpdGUgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnNcbiAgICAgIC8vIFByZXZpb3VzbHk6IGF3YWl0IGZzLndyaXRlRmlsZShmdWxsUGF0aCwgY29udGVudCwgJ3V0Zi04Jyk7XG4gICAgICAvLyBOb3c6IFVzZXMgRmlsZUxvY2tNYW5hZ2VyIGZvciBhdG9taWMgb3BlcmF0aW9uc1xuICAgICAgYXdhaXQgRmlsZUxvY2tNYW5hZ2VyLmF0b21pY1dyaXRlRmlsZShub3JtYWxpemVkUGF0aCwgY29udGVudCwgeyBlbmNvZGluZzogJ3V0Zi04JyB9KTtcbiAgICAgIFxuICAgICAgLy8gVXBkYXRlIGNhY2hlXG4gICAgICB0aGlzLnRlbXBsYXRlcy5zZXQobm9ybWFsaXplZFBhdGgsIHRlbXBsYXRlKTtcbiAgICAgIFxuICAgICAgLy8gU0VDVVJJVFkgRklYICM1OiBMb2cgc3VjY2Vzc2Z1bCBzYXZlIGZvciBhdWRpdCB0cmFpbFxuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnVEVNUExBVEVfU0FWRUQnLFxuICAgICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICAgIHNvdXJjZTogJ1RlbXBsYXRlTWFuYWdlci5zYXZlJyxcbiAgICAgICAgZGV0YWlsczogYFRlbXBsYXRlIHNhdmVkOiAke3RlbXBsYXRlLm1ldGFkYXRhLm5hbWV9IHRvICR7cGF0aC5iYXNlbmFtZShub3JtYWxpemVkUGF0aCl9YFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIGxvZ2dlci5pbmZvKGBUZW1wbGF0ZSBzYXZlZDogJHt0ZW1wbGF0ZS5tZXRhZGF0YS5uYW1lfWApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBzYXZlIHRlbXBsYXRlIHRvICR7bm9ybWFsaXplZFBhdGh9OiAke2Vycm9yfWApO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExpc3QgYWxsIHRlbXBsYXRlc1xuICAgKiBTRUNVUklUWSBGSVg6IFVzZXMgUG9ydGZvbGlvTWFuYWdlci5saXN0RWxlbWVudHMoKSB3aGljaCBmaWx0ZXJzIHRlc3QgZWxlbWVudHNcbiAgICovXG4gIGFzeW5jIGxpc3QoKTogUHJvbWlzZTxUZW1wbGF0ZVtdPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFVzZSBQb3J0Zm9saW9NYW5hZ2VyIHRvIGdldCBmaWx0ZXJlZCBsaXN0IChleGNsdWRlcyB0ZXN0IGVsZW1lbnRzKVxuICAgICAgY29uc3QgdGVtcGxhdGVGaWxlcyA9IGF3YWl0IHRoaXMucG9ydGZvbGlvTWFuYWdlci5saXN0RWxlbWVudHMoRWxlbWVudFR5cGUuVEVNUExBVEUpO1xuICAgICAgXG4gICAgICAvLyBMb2FkIHRlbXBsYXRlcyBpbiBwYXJhbGxlbCB3aXRoIGVycm9yIGhhbmRsaW5nXG4gICAgICBjb25zdCB0ZW1wbGF0ZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgdGVtcGxhdGVGaWxlcy5tYXAoYXN5bmMgZmlsZSA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmxvYWQoZmlsZSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGxvYWQgdGVtcGxhdGUgJHtmaWxlfTogJHtlcnJvcn1gKTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICBcbiAgICAgIC8vIEZpbHRlciBvdXQgZmFpbGVkIGxvYWRzXG4gICAgICByZXR1cm4gdGVtcGxhdGVzLmZpbHRlcigodCk6IHQgaXMgVGVtcGxhdGUgPT4gdCAhPT0gbnVsbCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIEhhbmRsZSBtaXNzaW5nIGRpcmVjdG9yeSBncmFjZWZ1bGx5IHdpdGggdHlwZS1zYWZlIGNoZWNrXG4gICAgICBpZiAoZXJyb3IgJiYgdHlwZW9mIGVycm9yID09PSAnb2JqZWN0JyAmJiAnY29kZScgaW4gZXJyb3IgJiYgZXJyb3IuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdUZW1wbGF0ZXMgZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0IHlldCwgcmV0dXJuaW5nIGVtcHR5IGFycmF5Jyk7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGxpc3QgdGVtcGxhdGVzOiAke2Vycm9yfWApO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIGEgdGVtcGxhdGUgYnkgcHJlZGljYXRlXG4gICAqL1xuICBhc3luYyBmaW5kKHByZWRpY2F0ZTogKHRlbXBsYXRlOiBUZW1wbGF0ZSkgPT4gYm9vbGVhbik6IFByb21pc2U8VGVtcGxhdGUgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCB0ZW1wbGF0ZXMgPSBhd2FpdCB0aGlzLmxpc3QoKTtcbiAgICByZXR1cm4gdGVtcGxhdGVzLmZpbmQocHJlZGljYXRlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgdGVtcGxhdGVcbiAgICovXG4gIGFzeW5jIGNyZWF0ZShkYXRhOiB7bmFtZTogc3RyaW5nOyBkZXNjcmlwdGlvbjogc3RyaW5nOyBjb250ZW50Pzogc3RyaW5nOyBtZXRhZGF0YT86IGFueX0pOiBQcm9taXNlPFRlbXBsYXRlPiB7XG4gICAgLy8gU0VDVVJJVFkgRklYICM0OiBWYWxpZGF0ZSBhbmQgc2FuaXRpemUgYWxsIGlucHV0c1xuICAgIGNvbnN0IHNhbml0aXplZE5hbWUgPSBzYW5pdGl6ZUlucHV0KGRhdGEubmFtZSB8fCAnbmV3LXRlbXBsYXRlJywgMTAwKTtcbiAgICBjb25zdCBzYW5pdGl6ZWREZXNjcmlwdGlvbiA9IHNhbml0aXplSW5wdXQoZGF0YS5kZXNjcmlwdGlvbiB8fCAnJywgNTAwKTtcbiAgICBjb25zdCBzYW5pdGl6ZWRDb250ZW50ID0gc2FuaXRpemVJbnB1dChkYXRhLmNvbnRlbnQgfHwgJycsIDEwMDAwMCk7IC8vIDEwMEtCIG1heFxuICAgIFxuICAgIC8vIENyZWF0ZSB0aGUgdGVtcGxhdGUgaW5zdGFuY2VcbiAgICBjb25zdCB0ZW1wbGF0ZSA9IG5ldyBUZW1wbGF0ZSh7XG4gICAgICAuLi5kYXRhLm1ldGFkYXRhLFxuICAgICAgbmFtZTogc2FuaXRpemVkTmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBzYW5pdGl6ZWREZXNjcmlwdGlvblxuICAgIH0sIHNhbml0aXplZENvbnRlbnQpO1xuICAgIFxuICAgIC8vIEdlbmVyYXRlIGZpbGVuYW1lIGZyb20gdGVtcGxhdGUgbmFtZVxuICAgIGNvbnN0IGZpbGVuYW1lID0gYCR7c2FuaXRpemVkTmFtZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2VBbGwoL1teYS16MC05LV0vZywgJy0nKX0ubWRgO1xuICAgIFxuICAgIC8vIFNhdmUgdGhlIHRlbXBsYXRlXG4gICAgYXdhaXQgdGhpcy5zYXZlKHRlbXBsYXRlLCBmaWxlbmFtZSk7XG4gICAgXG4gICAgLy8gU0VDVVJJVFkgRklYICM1OiBBdWRpdCBzdWNjZXNzZnVsIGNyZWF0aW9uXG4gICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgdHlwZTogJ0VMRU1FTlRfQ1JFQVRFRCcsXG4gICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICBzb3VyY2U6ICdUZW1wbGF0ZU1hbmFnZXIuY3JlYXRlJyxcbiAgICAgIGRldGFpbHM6IGBUZW1wbGF0ZSBjcmVhdGVkOiAke3RlbXBsYXRlLm1ldGFkYXRhLm5hbWV9YFxuICAgIH0pO1xuICAgIFxuICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgYSB0ZW1wbGF0ZVxuICAgKiBTRUNVUklUWSBGSVggIzY6IFBhdGggdmFsaWRhdGlvbiB0byBwcmV2ZW50IGRlbGV0aW9uIG91dHNpZGUgZGlyZWN0b3J5XG4gICAqL1xuICBhc3luYyBkZWxldGUoZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFNFQ1VSSVRZIEZJWCAjNCAmICM2OiBWYWxpZGF0ZSBhbmQgc2FuaXRpemUgdGhlIGZpbGUgcGF0aFxuICAgIGNvbnN0IHNhbml0aXplZFBhdGggPSBzYW5pdGl6ZUlucHV0KGZpbGVQYXRoLCAyNTUpO1xuICAgIFxuICAgIC8vIEVuc3VyZSB0aGUgcGF0aCBpcyB3aXRoaW4gdGhlIHRlbXBsYXRlcyBkaXJlY3RvcnlcbiAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguaXNBYnNvbHV0ZShzYW5pdGl6ZWRQYXRoKSBcbiAgICAgID8gc2FuaXRpemVkUGF0aCBcbiAgICAgIDogcGF0aC5qb2luKHRoaXMudGVtcGxhdGVzRGlyLCBzYW5pdGl6ZWRQYXRoKTtcbiAgICBcbiAgICAvLyBTRUNVUklUWSBGSVggIzY6IFByZXZlbnQgcGF0aCB0cmF2ZXJzYWwgYXR0YWNrc1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gcGF0aC5ub3JtYWxpemUoZnVsbFBhdGgpO1xuICAgIGlmICghbm9ybWFsaXplZFBhdGguc3RhcnRzV2l0aCh0aGlzLnRlbXBsYXRlc0RpcikpIHtcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ1BBVEhfVFJBVkVSU0FMX0FUVEVNUFQnLFxuICAgICAgICBzZXZlcml0eTogJ0NSSVRJQ0FMJyxcbiAgICAgICAgc291cmNlOiAnVGVtcGxhdGVNYW5hZ2VyLmRlbGV0ZScsXG4gICAgICAgIGRldGFpbHM6IGBBdHRlbXB0ZWQgdG8gZGVsZXRlIGZpbGUgb3V0c2lkZSB0ZW1wbGF0ZXMgZGlyZWN0b3J5OiAke3Nhbml0aXplZFBhdGh9YFxuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhdGggdHJhdmVyc2FsIGF0dGVtcHQgZGV0ZWN0ZWQnKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgZnMudW5saW5rKG5vcm1hbGl6ZWRQYXRoKTtcbiAgICAgIHRoaXMudGVtcGxhdGVzLmRlbGV0ZShub3JtYWxpemVkUGF0aCk7XG4gICAgICBcbiAgICAgIC8vIFNFQ1VSSVRZIEZJWCAjNTogTG9nIGRlbGV0aW9uIGZvciBhdWRpdCB0cmFpbFxuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnVEVNUExBVEVfREVMRVRFRCcsXG4gICAgICAgIHNldmVyaXR5OiAnTUVESVVNJyxcbiAgICAgICAgc291cmNlOiAnVGVtcGxhdGVNYW5hZ2VyLmRlbGV0ZScsXG4gICAgICAgIGRldGFpbHM6IGBUZW1wbGF0ZSBkZWxldGVkOiAke3BhdGguYmFzZW5hbWUobm9ybWFsaXplZFBhdGgpfWBcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICBsb2dnZXIuaW5mbyhgVGVtcGxhdGUgZGVsZXRlZDogJHtwYXRoLmJhc2VuYW1lKG5vcm1hbGl6ZWRQYXRoKX1gKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gZGVsZXRlIHRlbXBsYXRlICR7bm9ybWFsaXplZFBhdGh9OiAke2Vycm9yfWApO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhIHRlbXBsYXRlIGZyb20gZXh0ZXJuYWwgZm9ybWF0XG4gICAqIFNFQ1VSSVRZIEZJWCAjMzogVXNlcyBTZWN1cmVZYW1sUGFyc2VyIGZvciBzYWZlIFlBTUwgcGFyc2luZ1xuICAgKi9cbiAgYXN5bmMgaW1wb3J0RWxlbWVudChkYXRhOiBzdHJpbmcsIGZvcm1hdDogJ2pzb24nIHwgJ3lhbWwnIHwgJ21hcmtkb3duJyk6IFByb21pc2U8VGVtcGxhdGU+IHtcbiAgICB0cnkge1xuICAgICAgbGV0IG1ldGFkYXRhOiBQYXJ0aWFsPFRlbXBsYXRlTWV0YWRhdGE+O1xuICAgICAgbGV0IGNvbnRlbnQ6IHN0cmluZyA9ICcnO1xuICAgICAgXG4gICAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgICBjYXNlICdqc29uJzpcbiAgICAgICAgICBjb25zdCBqc29uRGF0YSA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICAgICAgbWV0YWRhdGEgPSBhd2FpdCB0aGlzLnZhbGlkYXRlTWV0YWRhdGEoanNvbkRhdGEubWV0YWRhdGEgfHwge30pO1xuICAgICAgICAgIGNvbnRlbnQgPSBqc29uRGF0YS5jb250ZW50IHx8ICcnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIFxuICAgICAgICBjYXNlICd5YW1sJzpcbiAgICAgICAgICAvLyBISUdIIFNFVkVSSVRZIEZJWDogVXNlIFNlY3VyZVlhbWxQYXJzZXIgdG8gcHJldmVudCBZQU1MIGluamVjdGlvbiBhdHRhY2tzXG4gICAgICAgICAgLy8gUHJldmlvdXNseTogVXNlZCB1bnNhZmUgWUFNTCBwYXJzaW5nIHdpdGhvdXQgdmFsaWRhdGlvblxuICAgICAgICAgIC8vIE5vdzogVXNlcyBTZWN1cmVZYW1sUGFyc2VyIHdoaWNoIHZhbGlkYXRlcyBjb250ZW50IGFuZCBwcmV2ZW50cyBtYWxpY2lvdXMgcGF0dGVybnNcbiAgICAgICAgICBjb25zdCBwYXJzZWQgPSBTZWN1cmVZYW1sUGFyc2VyLnBhcnNlKGRhdGEsIHtcbiAgICAgICAgICAgIG1heFlhbWxTaXplOiA2NCAqIDEwMjQsIC8vIDY0S0IgbGltaXRcbiAgICAgICAgICAgIHZhbGlkYXRlQ29udGVudDogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIFxuICAgICAgICAgIG1ldGFkYXRhID0gYXdhaXQgdGhpcy52YWxpZGF0ZU1ldGFkYXRhKChwYXJzZWQgYXMgYW55KS5tZXRhZGF0YSB8fCB7fSk7XG4gICAgICAgICAgY29udGVudCA9IHBhcnNlZC5jb250ZW50IHx8ICcnO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIExvZyBzZWN1cml0eSBldmVudCBmb3IgYXVkaXQgdHJhaWxcbiAgICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgICB0eXBlOiAnWUFNTF9QQVJTRV9TVUNDRVNTJyxcbiAgICAgICAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgICAgICAgIHNvdXJjZTogJ1RlbXBsYXRlTWFuYWdlci5pbXBvcnRFbGVtZW50JyxcbiAgICAgICAgICAgIGRldGFpbHM6ICdZQU1MIGNvbnRlbnQgc2FmZWx5IHBhcnNlZCBkdXJpbmcgaW1wb3J0J1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIFxuICAgICAgICBjYXNlICdtYXJrZG93bic6XG4gICAgICAgICAgY29uc3QgbWRQYXJzZWQgPSBtYXR0ZXIoZGF0YSk7XG4gICAgICAgICAgbWV0YWRhdGEgPSBhd2FpdCB0aGlzLnZhbGlkYXRlTWV0YWRhdGEobWRQYXJzZWQuZGF0YSk7XG4gICAgICAgICAgY29udGVudCA9IG1kUGFyc2VkLmNvbnRlbnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBpbXBvcnQgZm9ybWF0OiAke2Zvcm1hdH1gKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gQ3JlYXRlIGFuZCB2YWxpZGF0ZSB0aGUgdGVtcGxhdGVcbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gbmV3IFRlbXBsYXRlKG1ldGFkYXRhLCBjb250ZW50KTtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb24gPSB0ZW1wbGF0ZS52YWxpZGF0ZSgpO1xuICAgICAgXG4gICAgICBpZiAoIXZhbGlkYXRpb24udmFsaWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHRlbXBsYXRlOiAke3ZhbGlkYXRpb24uZXJyb3JzPy5tYXAoZSA9PiBlLm1lc3NhZ2UpLmpvaW4oJywgJyl9YCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gaW1wb3J0IHRlbXBsYXRlOiAke2Vycm9yfWApO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9ydCBhIHRlbXBsYXRlIHRvIGV4dGVybmFsIGZvcm1hdFxuICAgKiBTRUNVUklUWSBGSVggIzM6IFVzZXMgc2FmZSBZQU1MIHNlcmlhbGl6YXRpb25cbiAgICovXG4gIGFzeW5jIGV4cG9ydEVsZW1lbnQodGVtcGxhdGU6IFRlbXBsYXRlLCBmb3JtYXQ6ICdqc29uJyB8ICd5YW1sJyB8ICdtYXJrZG93bicpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHRyeSB7XG4gICAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgICBjYXNlICdqc29uJzpcbiAgICAgICAgICAvLyBVc2Ugc2VyaWFsaXplVG9KU09OIGZvciBKU09OIGZvcm1hdCwgb3Igc2VyaWFsaXplIGlmIG5vdCBhdmFpbGFibGVcbiAgICAgICAgICByZXR1cm4gKHRlbXBsYXRlIGFzIGFueSkuc2VyaWFsaXplVG9KU09OID8gKHRlbXBsYXRlIGFzIGFueSkuc2VyaWFsaXplVG9KU09OKCkgOiB0ZW1wbGF0ZS5zZXJpYWxpemUoKTtcbiAgICAgICAgICBcbiAgICAgICAgY2FzZSAneWFtbCc6XG4gICAgICAgICAgLy8gU0VDVVJJVFkgRklYOiBVc2UgeWFtbC5kdW1wIHdpdGggRkFJTFNBRkVfU0NIRU1BIHRvIHByZXZlbnQgY29kZSBleGVjdXRpb25cbiAgICAgICAgICAvLyBQcmV2aW91c2x5OiBDb3VsZCBwb3RlbnRpYWxseSB1c2UgdW5zYWZlIFlBTUwgZmVhdHVyZXNcbiAgICAgICAgICAvLyBOb3c6IEZBSUxTQUZFX1NDSEVNQSBvbmx5IGFsbG93cyBiYXNpYyBZQU1MIHR5cGVzLCBubyBKUy1zcGVjaWZpYyBjb25zdHJ1Y3RzXG4gICAgICAgICAgY29uc3QgeWFtbERhdGEgPSB7XG4gICAgICAgICAgICBtZXRhZGF0YTogdGVtcGxhdGUubWV0YWRhdGEsXG4gICAgICAgICAgICBjb250ZW50OiB0ZW1wbGF0ZS5jb250ZW50LFxuICAgICAgICAgICAgaWQ6IHRlbXBsYXRlLmlkLFxuICAgICAgICAgICAgdmVyc2lvbjogdGVtcGxhdGUudmVyc2lvblxuICAgICAgICAgIH07XG4gICAgICAgICAgXG4gICAgICAgICAgcmV0dXJuIHlhbWwuZHVtcCh5YW1sRGF0YSwge1xuICAgICAgICAgICAgLy8gU0VDVVJJVFkgVFJBREUtT0ZGOiBVc2luZyBERUZBVUxUX1NDSEVNQSBpbnN0ZWFkIG9mIEZBSUxTQUZFX1NDSEVNQVxuICAgICAgICAgICAgLy8gUmVhc29uOiBGQUlMU0FGRV9TQ0hFTUEgZG9lc24ndCBzdXBwb3J0IG51bWJlciB0eXBlcyB3aGljaCBhcmUgbmVlZGVkIGZvciB0ZW1wbGF0ZSBtZXRhZGF0YVxuICAgICAgICAgICAgLy8gUmlzazogREVGQVVMVF9TQ0hFTUEgYWxsb3dzIG1vcmUgWUFNTCBmZWF0dXJlcyB0aGF0IGNvdWxkIGJlIGV4cGxvaXRlZFxuICAgICAgICAgICAgLy8gTWl0aWdhdGlvbjogbm9SZWZzIHByZXZlbnRzIHJlZmVyZW5jZSBhdHRhY2tzLCBza2lwSW52YWxpZCBkcm9wcyBkYW5nZXJvdXMgY29uc3RydWN0c1xuICAgICAgICAgICAgLy8gQ29uc2lkZXI6IEZvciBtYXhpbXVtIHNlY3VyaXR5LCBpbXBsZW1lbnQgY3VzdG9tIHNjaGVtYSB0aGF0IG9ubHkgYWxsb3dzIG5lZWRlZCB0eXBlc1xuICAgICAgICAgICAgc2NoZW1hOiB5YW1sLkRFRkFVTFRfU0NIRU1BLFxuICAgICAgICAgICAgbm9SZWZzOiB0cnVlLCAgICAgICAgLy8gUHJldmVudCByZWZlcmVuY2UgYXR0YWNrc1xuICAgICAgICAgICAgc29ydEtleXM6IHRydWUsICAgICAgLy8gQ29uc2lzdGVudCBvdXRwdXRcbiAgICAgICAgICAgIHNraXBJbnZhbGlkOiB0cnVlLCAgIC8vIFNraXAgdW5zZXJpYWxpemFibGUgdmFsdWVzIGluc3RlYWQgb2YgdGhyb3dpbmdcbiAgICAgICAgICAgIGNvbmRlbnNlRmxvdzogdHJ1ZSwgIC8vIE1vcmUgY29tcGFjdCBvdXRwdXRcbiAgICAgICAgICAgIHF1b3RpbmdUeXBlOiAnXCInLCAgICAvLyBGb3JjZSBkb3VibGUgcXVvdGVzIGZvciBjb25zaXN0ZW5jeVxuICAgICAgICAgICAgZm9yY2VRdW90ZXM6IGZhbHNlICAgLy8gT25seSBxdW90ZSB3aGVuIG5lY2Vzc2FyeVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIFxuICAgICAgICBjYXNlICdtYXJrZG93bic6XG4gICAgICAgICAgY29uc3QgZnJvbnRtYXR0ZXIgPSB0aGlzLmNyZWF0ZUZyb250bWF0dGVyKHRlbXBsYXRlLm1ldGFkYXRhKTtcbiAgICAgICAgICByZXR1cm4gYC0tLVxcbiR7ZnJvbnRtYXR0ZXJ9XFxuLS0tXFxuXFxuJHt0ZW1wbGF0ZS5jb250ZW50fWA7XG4gICAgICAgICAgXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBleHBvcnQgZm9ybWF0OiAke2Zvcm1hdH1gKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gZXhwb3J0IHRlbXBsYXRlOiAke2Vycm9yfWApO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGFuZCBzYW5pdGl6ZSBtZXRhZGF0YVxuICAgKiBTRUNVUklUWSBGSVggIzQ6IENvbXByZWhlbnNpdmUgbWV0YWRhdGEgdmFsaWRhdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyB2YWxpZGF0ZU1ldGFkYXRhKGRhdGE6IGFueSk6IFByb21pc2U8UGFydGlhbDxUZW1wbGF0ZU1ldGFkYXRhPj4ge1xuICAgIGNvbnN0IG1ldGFkYXRhOiBQYXJ0aWFsPFRlbXBsYXRlTWV0YWRhdGE+ID0ge307XG4gICAgXG4gICAgLy8gU2FuaXRpemUgc3RyaW5nIGZpZWxkc1xuICAgIGlmIChkYXRhLm5hbWUpIHtcbiAgICAgIG1ldGFkYXRhLm5hbWUgPSBzYW5pdGl6ZUlucHV0KFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKGRhdGEubmFtZSkubm9ybWFsaXplZENvbnRlbnQsIDEwMCk7XG4gICAgfVxuICAgIFxuICAgIGlmIChkYXRhLmRlc2NyaXB0aW9uKSB7XG4gICAgICBtZXRhZGF0YS5kZXNjcmlwdGlvbiA9IHNhbml0aXplSW5wdXQoVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUoZGF0YS5kZXNjcmlwdGlvbikubm9ybWFsaXplZENvbnRlbnQsIDUwMCk7XG4gICAgfVxuICAgIFxuICAgIGlmIChkYXRhLmNhdGVnb3J5KSB7XG4gICAgICBtZXRhZGF0YS5jYXRlZ29yeSA9IHNhbml0aXplSW5wdXQoZGF0YS5jYXRlZ29yeSwgNTApO1xuICAgIH1cbiAgICBcbiAgICBpZiAoZGF0YS5vdXRwdXRfZm9ybWF0KSB7XG4gICAgICBtZXRhZGF0YS5vdXRwdXRfZm9ybWF0ID0gc2FuaXRpemVJbnB1dChkYXRhLm91dHB1dF9mb3JtYXQsIDIwKTtcbiAgICB9XG4gICAgXG4gICAgLy8gVmFsaWRhdGUgYXJyYXlzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YS50YWdzKSkge1xuICAgICAgbWV0YWRhdGEudGFncyA9IGRhdGEudGFncy5tYXAoKHRhZzogYW55KSA9PiBzYW5pdGl6ZUlucHV0KFN0cmluZyh0YWcpLCA1MCkpO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEuaW5jbHVkZXMpKSB7XG4gICAgICBtZXRhZGF0YS5pbmNsdWRlcyA9IGRhdGEuaW5jbHVkZXMubWFwKChpbmM6IGFueSkgPT4gc2FuaXRpemVJbnB1dChTdHJpbmcoaW5jKSwgMjAwKSk7XG4gICAgfVxuXG4gICAgLy8gRklYICMxMTIyOiBFeHRyYWN0IGFuZCB2YWxpZGF0ZSB0cmlnZ2VycyBmb3IgRW5oYW5jZWQgSW5kZXggc3VwcG9ydFxuICAgIC8vIEZvbGxvd2luZyBwYXR0ZXJuIGZyb20gU2tpbGxNYW5hZ2VyIChQUiAjMTEzNikgYW5kIE1lbW9yeU1hbmFnZXIgKFBSICMxMTMzKVxuICAgIGlmIChkYXRhLnRyaWdnZXJzICYmIEFycmF5LmlzQXJyYXkoZGF0YS50cmlnZ2VycykpIHtcbiAgICAgIGNvbnN0IHJhd1RyaWdnZXJzID0gZGF0YS50cmlnZ2VycztcbiAgICAgIGNvbnN0IHNhbml0aXplZFRyaWdnZXJzID0gcmF3VHJpZ2dlcnMubWFwKCh0cmlnZ2VyOiBhbnkpID0+ICh7XG4gICAgICAgIHJhdzogdHJpZ2dlcixcbiAgICAgICAgc2FuaXRpemVkOiBzYW5pdGl6ZUlucHV0KFN0cmluZyh0cmlnZ2VyKSwgTUFYX1RSSUdHRVJfTEVOR1RIKVxuICAgICAgfSkpO1xuXG4gICAgICAvLyBGaWx0ZXIgdmFsaWQgdHJpZ2dlcnMgYW5kIHRyYWNrIHJlamVjdGVkIG9uZXNcbiAgICAgIGNvbnN0IHZhbGlkVHJpZ2dlcnM6IHN0cmluZ1tdID0gW107XG4gICAgICBjb25zdCByZWplY3RlZFRyaWdnZXJzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IHsgcmF3LCBzYW5pdGl6ZWQgfSBvZiBzYW5pdGl6ZWRUcmlnZ2Vycykge1xuICAgICAgICBpZiAoIXNhbml0aXplZCkge1xuICAgICAgICAgIHJlamVjdGVkVHJpZ2dlcnMucHVzaChgXCIke3Jhd31cIiAoZW1wdHkgYWZ0ZXIgc2FuaXRpemF0aW9uKWApO1xuICAgICAgICB9IGVsc2UgaWYgKCFUUklHR0VSX1ZBTElEQVRJT05fUkVHRVgudGVzdChzYW5pdGl6ZWQpKSB7XG4gICAgICAgICAgcmVqZWN0ZWRUcmlnZ2Vycy5wdXNoKGBcIiR7c2FuaXRpemVkfVwiIChpbnZhbGlkIGZvcm1hdCAtIG11c3QgYmUgYWxwaGFudW1lcmljIHdpdGggaHlwaGVucy91bmRlcnNjb3JlcyBvbmx5KWApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbGlkVHJpZ2dlcnMucHVzaChzYW5pdGl6ZWQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIExvZyB3YXJuaW5ncyBmb3IgcmVqZWN0ZWQgdHJpZ2dlcnMgdG8gYWlkIGRlYnVnZ2luZ1xuICAgICAgaWYgKHJlamVjdGVkVHJpZ2dlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICBsb2dnZXIud2FybihcbiAgICAgICAgICBgVGVtcGxhdGUgXCIke21ldGFkYXRhLm5hbWUgfHwgJ3Vua25vd24nfVwiOiBSZWplY3RlZCAke3JlamVjdGVkVHJpZ2dlcnMubGVuZ3RofSBpbnZhbGlkIHRyaWdnZXIocylgLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRlbXBsYXRlTmFtZTogbWV0YWRhdGEubmFtZSxcbiAgICAgICAgICAgIHJlamVjdGVkVHJpZ2dlcnMsXG4gICAgICAgICAgICBhY2NlcHRlZENvdW50OiB2YWxpZFRyaWdnZXJzLmxlbmd0aFxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gQXBwbHkgbGltaXQgYW5kIHdhcm4gaWYgZXhjZWVkZWRcbiAgICAgIGlmICh2YWxpZFRyaWdnZXJzLmxlbmd0aCA+IDIwKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKFxuICAgICAgICAgIGBUZW1wbGF0ZSBcIiR7bWV0YWRhdGEubmFtZSB8fCAndW5rbm93bid9XCI6IFRyaWdnZXIgY291bnQgZXhjZWVkcyBsaW1pdCAoJHt2YWxpZFRyaWdnZXJzLmxlbmd0aH0gPiAyMCksIHRydW5jYXRpbmdgLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRlbXBsYXRlTmFtZTogbWV0YWRhdGEubmFtZSxcbiAgICAgICAgICAgIHRvdGFsVHJpZ2dlcnM6IHZhbGlkVHJpZ2dlcnMubGVuZ3RoLFxuICAgICAgICAgICAgdHJ1bmNhdGVkVHJpZ2dlcnM6IHZhbGlkVHJpZ2dlcnMuc2xpY2UoMjApXG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBtZXRhZGF0YS50cmlnZ2VycyA9IHZhbGlkVHJpZ2dlcnMuc2xpY2UoMCwgMjApO1xuICAgIH1cbiAgICBcbiAgICAvLyBDb3B5IHNhZmUgZmllbGRzXG4gICAgaWYgKHR5cGVvZiBkYXRhLnVzYWdlX2NvdW50ID09PSAnbnVtYmVyJykge1xuICAgICAgbWV0YWRhdGEudXNhZ2VfY291bnQgPSBNYXRoLm1heCgwLCBNYXRoLmZsb29yKGRhdGEudXNhZ2VfY291bnQpKTtcbiAgICB9XG4gICAgXG4gICAgaWYgKGRhdGEubGFzdF91c2VkKSB7XG4gICAgICBtZXRhZGF0YS5sYXN0X3VzZWQgPSBzYW5pdGl6ZUlucHV0KFN0cmluZyhkYXRhLmxhc3RfdXNlZCksIDUwKTtcbiAgICB9XG4gICAgXG4gICAgLy8gVmFsaWRhdGUgY29tcGxleCBmaWVsZHNcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhLnZhcmlhYmxlcykpIHtcbiAgICAgIG1ldGFkYXRhLnZhcmlhYmxlcyA9IGRhdGEudmFyaWFibGVzLm1hcCgodjogYW55KSA9PiAoe1xuICAgICAgICBuYW1lOiBzYW5pdGl6ZUlucHV0KHYubmFtZSB8fCAnJywgNTApLFxuICAgICAgICB0eXBlOiBzYW5pdGl6ZUlucHV0KHYudHlwZSB8fCAnc3RyaW5nJywgMjApLFxuICAgICAgICBkZXNjcmlwdGlvbjogdi5kZXNjcmlwdGlvbiA/IHNhbml0aXplSW5wdXQodi5kZXNjcmlwdGlvbiwgMjAwKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgcmVxdWlyZWQ6IEJvb2xlYW4odi5yZXF1aXJlZCksXG4gICAgICAgIGRlZmF1bHQ6IHYuZGVmYXVsdCxcbiAgICAgICAgdmFsaWRhdGlvbjogdi52YWxpZGF0aW9uID8gc2FuaXRpemVJbnB1dCh2LnZhbGlkYXRpb24sIDIwMCkgOiB1bmRlZmluZWQsXG4gICAgICAgIG9wdGlvbnM6IEFycmF5LmlzQXJyYXkodi5vcHRpb25zKSA/IHYub3B0aW9ucy5tYXAoKG86IGFueSkgPT4gc2FuaXRpemVJbnB1dChTdHJpbmcobyksIDEwMCkpIDogdW5kZWZpbmVkLFxuICAgICAgICBmb3JtYXQ6IHYuZm9ybWF0ID8gc2FuaXRpemVJbnB1dCh2LmZvcm1hdCwgNTApIDogdW5kZWZpbmVkXG4gICAgICB9KSk7XG4gICAgfVxuICAgIFxuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEuZXhhbXBsZXMpKSB7XG4gICAgICBtZXRhZGF0YS5leGFtcGxlcyA9IGRhdGEuZXhhbXBsZXMubWFwKChleDogYW55KSA9PiAoe1xuICAgICAgICB0aXRsZTogc2FuaXRpemVJbnB1dChleC50aXRsZSB8fCAnJywgMTAwKSxcbiAgICAgICAgZGVzY3JpcHRpb246IGV4LmRlc2NyaXB0aW9uID8gc2FuaXRpemVJbnB1dChleC5kZXNjcmlwdGlvbiwgNTAwKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgdmFyaWFibGVzOiBleC52YXJpYWJsZXMgfHwge30sXG4gICAgICAgIG91dHB1dDogZXgub3V0cHV0ID8gc2FuaXRpemVJbnB1dChleC5vdXRwdXQsIDUwMDApIDogdW5kZWZpbmVkXG4gICAgICB9KSk7XG4gICAgfVxuICAgIFxuICAgIC8vIENvcHkgc3RhbmRhcmQgZWxlbWVudCBmaWVsZHNcbiAgICBtZXRhZGF0YS5hdXRob3IgPSBkYXRhLmF1dGhvciA/IHNhbml0aXplSW5wdXQoZGF0YS5hdXRob3IsIDEwMCkgOiB1bmRlZmluZWQ7XG4gICAgbWV0YWRhdGEudmVyc2lvbiA9IGRhdGEudmVyc2lvbiA/IHNhbml0aXplSW5wdXQoZGF0YS52ZXJzaW9uLCAyMCkgOiB1bmRlZmluZWQ7XG4gICAgXG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBZQU1MIGZyb250bWF0dGVyIGZyb20gbWV0YWRhdGFcbiAgICogU0VDVVJJVFkgRklYICMzOiBTYWZlIFlBTUwgZ2VuZXJhdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVGcm9udG1hdHRlcihtZXRhZGF0YTogVGVtcGxhdGVNZXRhZGF0YSk6IHN0cmluZyB7XG4gICAgLy8gU0VDVVJJVFkgRklYOiBVc2UgeWFtbC5kdW1wIHdpdGggc2VjdXJpdHkgb3B0aW9uc1xuICAgIC8vIEVuc3VyZXMgbm8gY29kZSBleGVjdXRpb24gdnVsbmVyYWJpbGl0aWVzIGluIGdlbmVyYXRlZCBZQU1MXG4gICAgY29uc3Qgc2FmZU1ldGFkYXRhID0ge1xuICAgICAgbmFtZTogbWV0YWRhdGEubmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBtZXRhZGF0YS5kZXNjcmlwdGlvbixcbiAgICAgIGF1dGhvcjogbWV0YWRhdGEuYXV0aG9yLFxuICAgICAgdmVyc2lvbjogbWV0YWRhdGEudmVyc2lvbixcbiAgICAgIGNhdGVnb3J5OiBtZXRhZGF0YS5jYXRlZ29yeSxcbiAgICAgIG91dHB1dF9mb3JtYXQ6IG1ldGFkYXRhLm91dHB1dF9mb3JtYXQsXG4gICAgICB0YWdzOiBtZXRhZGF0YS50YWdzLFxuICAgICAgaW5jbHVkZXM6IG1ldGFkYXRhLmluY2x1ZGVzLFxuICAgICAgdXNhZ2VfY291bnQ6IG1ldGFkYXRhLnVzYWdlX2NvdW50LFxuICAgICAgbGFzdF91c2VkOiBtZXRhZGF0YS5sYXN0X3VzZWQsXG4gICAgICB2YXJpYWJsZXM6IG1ldGFkYXRhLnZhcmlhYmxlcyxcbiAgICAgIGV4YW1wbGVzOiBtZXRhZGF0YS5leGFtcGxlcyxcbiAgICAgIHRyaWdnZXJzOiBtZXRhZGF0YS50cmlnZ2VycyAgLy8gRklYICMxMTIyOiBQcmVzZXJ2ZSB0cmlnZ2VycyB3aGVuIHNhdmluZ1xuICAgIH07XG4gICAgXG4gICAgLy8gUmVtb3ZlIHVuZGVmaW5lZCB2YWx1ZXNcbiAgICBjb25zdCBjbGVhbk1ldGFkYXRhID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgT2JqZWN0LmVudHJpZXMoc2FmZU1ldGFkYXRhKS5maWx0ZXIoKFtfLCB2YWx1ZV0pID0+IHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgKTtcbiAgICBcbiAgICByZXR1cm4geWFtbC5kdW1wKGNsZWFuTWV0YWRhdGEsIHtcbiAgICAgIC8vIFNFQ1VSSVRZIFRSQURFLU9GRjogU2FtZSBhcyBleHBvcnRFbGVtZW50IC0gdXNpbmcgREVGQVVMVF9TQ0hFTUEgZm9yIHR5cGUgc3VwcG9ydFxuICAgICAgLy8gU2VlIGV4cG9ydEVsZW1lbnQgbWV0aG9kIGZvciBkZXRhaWxlZCBzZWN1cml0eSBjb25zaWRlcmF0aW9uc1xuICAgICAgc2NoZW1hOiB5YW1sLkRFRkFVTFRfU0NIRU1BLFxuICAgICAgbm9SZWZzOiB0cnVlLFxuICAgICAgc29ydEtleXM6IHRydWUsXG4gICAgICBsaW5lV2lkdGg6IDgwLFxuICAgICAgc2tpcEludmFsaWQ6IHRydWUsXG4gICAgICBjb25kZW5zZUZsb3c6IHRydWUsXG4gICAgICBxdW90aW5nVHlwZTogJ1wiJyxcbiAgICAgIGZvcmNlUXVvdGVzOiBmYWxzZVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgdGVtcGxhdGUgZmlsZSBleGlzdHNcbiAgICovXG4gIGFzeW5jIGV4aXN0cyhmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3Qgc2FuaXRpemVkUGF0aCA9IHNhbml0aXplSW5wdXQoZmlsZVBhdGgsIDI1NSk7XG4gICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLmlzQWJzb2x1dGUoc2FuaXRpemVkUGF0aCkgXG4gICAgICA/IHNhbml0aXplZFBhdGggXG4gICAgICA6IHBhdGguam9pbih0aGlzLnRlbXBsYXRlc0Rpciwgc2FuaXRpemVkUGF0aCk7XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZzLmFjY2VzcyhmdWxsUGF0aCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmluZCBtdWx0aXBsZSB0ZW1wbGF0ZXMgYnkgcHJlZGljYXRlXG4gICAqL1xuICBhc3luYyBmaW5kTWFueShwcmVkaWNhdGU6ICh0ZW1wbGF0ZTogVGVtcGxhdGUpID0+IGJvb2xlYW4pOiBQcm9taXNlPFRlbXBsYXRlW10+IHtcbiAgICBjb25zdCB0ZW1wbGF0ZXMgPSBhd2FpdCB0aGlzLmxpc3QoKTtcbiAgICByZXR1cm4gdGVtcGxhdGVzLmZpbHRlcihwcmVkaWNhdGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGEgdGVtcGxhdGVcbiAgICovXG4gIHZhbGlkYXRlKHRlbXBsYXRlOiBUZW1wbGF0ZSk6IEVsZW1lbnRWYWxpZGF0aW9uUmVzdWx0IHtcbiAgICByZXR1cm4gdGVtcGxhdGUudmFsaWRhdGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBhIGZpbGUgcGF0aFxuICAgKi9cbiAgdmFsaWRhdGVQYXRoKGZpbGVQYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc2FuaXRpemVkUGF0aCA9IHNhbml0aXplSW5wdXQoZmlsZVBhdGgsIDI1NSk7XG4gICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguaXNBYnNvbHV0ZShzYW5pdGl6ZWRQYXRoKSBcbiAgICAgICAgPyBzYW5pdGl6ZWRQYXRoIFxuICAgICAgICA6IHBhdGguam9pbih0aGlzLnRlbXBsYXRlc0Rpciwgc2FuaXRpemVkUGF0aCk7XG4gICAgICBcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gcGF0aC5ub3JtYWxpemUoZnVsbFBhdGgpO1xuICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRQYXRoLnN0YXJ0c1dpdGgodGhpcy50ZW1wbGF0ZXNEaXIpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGVsZW1lbnQgdHlwZVxuICAgKi9cbiAgZ2V0RWxlbWVudFR5cGUoKTogRWxlbWVudFR5cGUge1xuICAgIHJldHVybiBFbGVtZW50VHlwZS5URU1QTEFURTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGZpbGUgZXh0ZW5zaW9uXG4gICAqL1xuICBnZXRGaWxlRXh0ZW5zaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICcubWQnO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgdGVtcGxhdGVzIGJ5IGNhdGVnb3J5XG4gICAqL1xuICBhc3luYyBmaW5kQnlDYXRlZ29yeShjYXRlZ29yeTogc3RyaW5nKTogUHJvbWlzZTxUZW1wbGF0ZVtdPiB7XG4gICAgY29uc3Qgc2FuaXRpemVkQ2F0ZWdvcnkgPSBzYW5pdGl6ZUlucHV0KGNhdGVnb3J5LCA1MCk7XG4gICAgcmV0dXJuIHRoaXMubGlzdCgpLnRoZW4odGVtcGxhdGVzID0+IFxuICAgICAgdGVtcGxhdGVzLmZpbHRlcih0ID0+IHQubWV0YWRhdGEuY2F0ZWdvcnkgPT09IHNhbml0aXplZENhdGVnb3J5KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRmluZCB0ZW1wbGF0ZXMgYnkgdGFnXG4gICAqL1xuICBhc3luYyBmaW5kQnlUYWcodGFnOiBzdHJpbmcpOiBQcm9taXNlPFRlbXBsYXRlW10+IHtcbiAgICBjb25zdCBzYW5pdGl6ZWRUYWcgPSBzYW5pdGl6ZUlucHV0KHRhZywgNTApO1xuICAgIHJldHVybiB0aGlzLmxpc3QoKS50aGVuKHRlbXBsYXRlcyA9PiBcbiAgICAgIHRlbXBsYXRlcy5maWx0ZXIodCA9PiB0Lm1ldGFkYXRhLnRhZ3M/LmluY2x1ZGVzKHNhbml0aXplZFRhZykpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgbW9zdCB1c2VkIHRlbXBsYXRlc1xuICAgKi9cbiAgYXN5bmMgZ2V0TW9zdFVzZWQobGltaXQ6IG51bWJlciA9IDEwKTogUHJvbWlzZTxUZW1wbGF0ZVtdPiB7XG4gICAgLy8gU0VDVVJJVFkgRklYOiBWYWxpZGF0ZSBsaW1pdCBwYXJhbWV0ZXIgdG8gcHJldmVudCBleGNlc3NpdmUgbWVtb3J5IHVzYWdlXG4gICAgLy8gUHJldmlvdXNseTogTm8gdmFsaWRhdGlvbiBjb3VsZCBhbGxvdyB2ZXJ5IGxhcmdlIGxpbWl0c1xuICAgIC8vIE5vdzogRW5mb3JjZXMgcmVhc29uYWJsZSBib3VuZHNcbiAgICBjb25zdCBNSU5fTElNSVQgPSAxO1xuICAgIGNvbnN0IE1BWF9MSU1JVCA9IDEwMDtcbiAgICBjb25zdCB2YWxpZGF0ZWRMaW1pdCA9IE1hdGgubWF4KE1JTl9MSU1JVCwgTWF0aC5taW4oTUFYX0xJTUlULCBNYXRoLmZsb29yKGxpbWl0KSkpO1xuICAgIFxuICAgIGlmIChsaW1pdCAhPT0gdmFsaWRhdGVkTGltaXQpIHtcbiAgICAgIGxvZ2dlci53YXJuKGBnZXRNb3N0VXNlZDogbGltaXQgJHtsaW1pdH0gYWRqdXN0ZWQgdG8gJHt2YWxpZGF0ZWRMaW1pdH0gKHZhbGlkIHJhbmdlOiAke01JTl9MSU1JVH0tJHtNQVhfTElNSVR9KWApO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCB0ZW1wbGF0ZXMgPSBhd2FpdCB0aGlzLmxpc3QoKTtcbiAgICByZXR1cm4gdGVtcGxhdGVzXG4gICAgICAuc29ydCgoYSwgYikgPT4gKGIubWV0YWRhdGEudXNhZ2VfY291bnQgfHwgMCkgLSAoYS5tZXRhZGF0YS51c2FnZV9jb3VudCB8fCAwKSlcbiAgICAgIC5zbGljZSgwLCB2YWxpZGF0ZWRMaW1pdCk7XG4gIH1cbn0iXX0=
@@ -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 = "1.9.13";
6
- export declare const BUILD_TIMESTAMP = "2025-09-29T23:29:32.116Z";
5
+ export declare const PACKAGE_VERSION = "1.9.15";
6
+ export declare const BUILD_TIMESTAMP = "2025-10-01T22:14:42.800Z";
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
@@ -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 = '1.9.13';
6
- export const BUILD_TIMESTAMP = '2025-09-29T23:29:32.116Z';
5
+ export const PACKAGE_VERSION = '1.9.15';
6
+ export const BUILD_TIMESTAMP = '2025-10-01T22:14:42.800Z';
7
7
  export const BUILD_TYPE = 'npm';
8
8
  export const PACKAGE_NAME = '@dollhousemcp/mcp-server';
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZW5lcmF0ZWQvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBQ3hDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRywwQkFBMEIsQ0FBQztBQUMxRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWtCLEtBQUssQ0FBQztBQUMvQyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEF1dG8tZ2VuZXJhdGVkIGZpbGUgLSBETyBOT1QgRURJVFxuICogR2VuZXJhdGVkIGF0IGJ1aWxkIHRpbWUgYnkgc2NyaXB0cy9nZW5lcmF0ZS12ZXJzaW9uLmpzXG4gKi9cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9ICcxLjkuMTMnO1xuZXhwb3J0IGNvbnN0IEJVSUxEX1RJTUVTVEFNUCA9ICcyMDI1LTA5LTI5VDIzOjI5OjMyLjExNlonO1xuZXhwb3J0IGNvbnN0IEJVSUxEX1RZUEU6ICducG0nIHwgJ2dpdCcgPSAnbnBtJztcbmV4cG9ydCBjb25zdCBQQUNLQUdFX05BTUUgPSAnQGRvbGxob3VzZW1jcC9tY3Atc2VydmVyJztcbiJdfQ==
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZW5lcmF0ZWQvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBQ3hDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRywwQkFBMEIsQ0FBQztBQUMxRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWtCLEtBQUssQ0FBQztBQUMvQyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEF1dG8tZ2VuZXJhdGVkIGZpbGUgLSBETyBOT1QgRURJVFxuICogR2VuZXJhdGVkIGF0IGJ1aWxkIHRpbWUgYnkgc2NyaXB0cy9nZW5lcmF0ZS12ZXJzaW9uLmpzXG4gKi9cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9ICcxLjkuMTUnO1xuZXhwb3J0IGNvbnN0IEJVSUxEX1RJTUVTVEFNUCA9ICcyMDI1LTEwLTAxVDIyOjE0OjQyLjgwMFonO1xuZXhwb3J0IGNvbnN0IEJVSUxEX1RZUEU6ICducG0nIHwgJ2dpdCcgPSAnbnBtJztcbmV4cG9ydCBjb25zdCBQQUNLQUdFX05BTUUgPSAnQGRvbGxob3VzZW1jcC9tY3Atc2VydmVyJztcbiJdfQ==
@@ -122,8 +122,8 @@ export class ConfigHandler {
122
122
  }
123
123
  else if (/^\d+$/.test(coercedValue)) {
124
124
  // Convert numeric strings to numbers
125
- const numValue = parseInt(coercedValue, 10);
126
- if (!isNaN(numValue)) {
125
+ const numValue = Number.parseInt(coercedValue, 10);
126
+ if (!Number.isNaN(numValue)) {
127
127
  coercedValue = numValue;
128
128
  }
129
129
  }
@@ -327,4 +327,4 @@ Customize how DollhouseMCP shows information.
327
327
  return friendly;
328
328
  }
329
329
  }
330
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uZmlnSGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9oYW5kbGVycy9Db25maWdIYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNwRSxvRUFBb0U7QUFDcEUsd0VBQXdFO0FBQ3hFLE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBV2hDLE1BQU0sT0FBTyxhQUFhO0lBQ2hCLGFBQWEsQ0FBZ0I7SUFFckM7UUFDRSxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNuRCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7T0FnQkc7SUFDSCxLQUFLLENBQUMscUJBQXFCLENBQUMsT0FBK0IsRUFBRSxZQUFvQixFQUFFO1FBQ2pGLElBQUksQ0FBQztZQUNILE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUV0QyxRQUFRLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDdkIsS0FBSyxLQUFLO29CQUNSLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBRTVDLEtBQUssS0FBSztvQkFDUixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUU1QyxLQUFLLE9BQU87b0JBQ1YsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFFOUMsS0FBSyxRQUFRO29CQUNYLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENB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QUN6QyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNwQixJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxLQUFLLEtBQUssSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDL0UsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsZ0NBQWdDLENBQUM7WUFDN0QsQ0FBQztpQkFBTSxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUM5QyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxhQUFhLENBQUM7WUFDMUMsQ0FBQztpQkFBTSxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUM5QyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxjQUFjLENBQUM7WUFDM0MsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbmZpZ3VyYXRpb24gaGFuZGxlciBmb3IgdGhlIGRvbGxob3VzZV9jb25maWcgTUNQIHRvb2xcbiAqIFByb3ZpZGVzIHVuaWZpZWQgaW50ZXJmYWNlIGZvciBhbGwgY29uZmlndXJhdGlvbiBtYW5hZ2VtZW50IG9wZXJhdGlvbnNcbiAqL1xuXG5pbXBvcnQgeyBDb25maWdNYW5hZ2VyIH0gZnJvbSAnLi4vY29uZmlnL0NvbmZpZ01hbmFnZXIuanMnO1xuaW1wb3J0IHsgU2VjdXJlRXJyb3JIYW5kbGVyIH0gZnJvbSAnLi4vc2VjdXJpdHkvZXJyb3JIYW5kbGVyLmpzJztcbmltcG9ydCB7IGdldEZyaWVuZGx5TnVsbFZhbHVlIH0gZnJvbSAnLi4vY29uZmlnL3dpemFyZFRlbXBsYXRlcy5qcyc7XG4vLyBXaXphcmRUZW1wbGF0ZUJ1aWxkZXIgaW1wb3J0ZWQgZm9yIGZ1dHVyZSBmdWxsIHRlbXBsYXRlIG1pZ3JhdGlvblxuLy8gaW1wb3J0IHsgV2l6YXJkVGVtcGxhdGVCdWlsZGVyIH0gZnJvbSAnLi4vY29uZmlnL3dpemFyZFRlbXBsYXRlcy5qcyc7XG5pbXBvcnQgKiBhcyB5YW1sIGZyb20gJ2pzLXlhbWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbmZpZ09wZXJhdGlvbk9wdGlvbnMge1xuICBhY3Rpb246ICdnZXQnIHwgJ3NldCcgfCAncmVzZXQnIHwgJ2V4cG9ydCcgfCAnaW1wb3J0JyB8ICd3aXphcmQnO1xuICBzZXR0aW5nPzogc3RyaW5nO1xuICB2YWx1ZT86IGFueTtcbiAgc2VjdGlvbj86IHN0cmluZztcbiAgZm9ybWF0PzogJ3lhbWwnIHwgJ2pzb24nO1xuICBkYXRhPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgQ29uZmlnSGFuZGxlciB7XG4gIHByaXZhdGUgY29uZmlnTWFuYWdlcjogQ29uZmlnTWFuYWdlcjtcbiAgXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY29uZmlnTWFuYWdlciA9IENvbmZpZ01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEhhbmRsZSBjb25maWd1cmF0aW9uIG9wZXJhdGlvbnMgdmlhIHRoZSBkb2xsaG91c2VfY29uZmlnIHRvb2xcbiAgICogXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQ29uZmlndXJhdGlvbiBvcGVyYXRpb24gb3B0aW9uc1xuICAgKiBAcGFyYW0gb3B0aW9ucy5hY3Rpb24gLSBUaGUgYWN0aW9uIHRvIHBlcmZvcm0gKGdldCwgc2V0LCByZXNldCwgZXhwb3J0LCBpbXBvcnQsIHdpemFyZClcbiAgICogQHBhcmFtIG9wdGlvbnMuc2V0dGluZyAtIE9wdGlvbmFsIHNldHRpbmcgcGF0aCBmb3IgZ2V0L3NldCBvcGVyYXRpb25zXG4gICAqIEBwYXJhbSBvcHRpb25zLnZhbHVlIC0gT3B0aW9uYWwgdmFsdWUgZm9yIHNldCBvcGVyYXRpb25zXG4gICAqIEBwYXJhbSBvcHRpb25zLnNlY3Rpb24gLSBPcHRpb25hbCBzZWN0aW9uIGZvciBmaWx0ZXJpbmdcbiAgICogQHBhcmFtIG9wdGlvbnMuZm9ybWF0IC0gT3B0aW9uYWwgZm9ybWF0IGZvciBleHBvcnQgKHlhbWwgb3IganNvbilcbiAgICogQHBhcmFtIG9wdGlvbnMuZGF0YSAtIE9wdGlvbmFsIGRhdGEgZm9yIGltcG9ydCBvcGVyYXRpb25zXG4gICAqIEBwYXJhbSBpbmRpY2F0b3IgLSBPcHRpb25hbCBpbmRpY2F0b3Igc3RyaW5nIGZvciBwZXJzb25hIGNvbnRleHRcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gY29udGVudCBvYmplY3Qgd2l0aCBvcGVyYXRpb24gcmVzdWx0XG4gICAqIEBhc3luY1xuICAgKiBcbiAgICogQG5vdGUgVGhlIHdpemFyZCBhY3Rpb24gaXMgYXN5bmMgYW5kIHdpbGwgYXdhaXQgdGhlIGhhbmRsZVdpemFyZCBtZXRob2RcbiAgICogQHNpbmNlIHYxLjQuMCAtIGhhbmRsZVdpemFyZCBtYWRlIGFzeW5jIGZvciBiZXR0ZXIgY29uZmlnIGZldGNoaW5nXG4gICAqL1xuICBhc3luYyBoYW5kbGVDb25maWdPcGVyYXRpb24ob3B0aW9uczogQ29uZmlnT3BlcmF0aW9uT3B0aW9ucywgaW5kaWNhdG9yOiBzdHJpbmcgPSAnJykge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmNvbmZpZ01hbmFnZXIuaW5pdGlhbGl6ZSgpO1xuICAgICAgXG4gICAgICBzd2l0Y2ggKG9wdGlvbnMuYWN0aW9uKSB7XG4gICAgICAgIGNhc2UgJ2dldCc6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlR2V0KG9wdGlvbnMsIGluZGljYXRvcik7XG4gICAgICAgIFxuICAgICAgICBjYXNlICdzZXQnOlxuICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZVNldChvcHRpb25zLCBpbmRpY2F0b3IpO1xuICAgICAgICBcbiAgICAgICAgY2FzZSAncmVzZXQnOlxuICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZVJlc2V0KG9wdGlvbnMsIGluZGljYXRvcik7XG4gICAgICAgIFxuICAgICAgICBjYXNlICdleHBvcnQnOlxuICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZUV4cG9ydChvcHRpb25zLCBpbmRpY2F0b3IpO1xuICAgICAgICBcbiAgICAgICAgY2FzZSAnaW1wb3J0JzpcbiAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVJbXBvcnQob3B0aW9ucywgaW5kaWNhdG9yKTtcbiAgICAgICAgXG4gICAgICAgIGNhc2UgJ3dpemFyZCc6XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaGFuZGxlV2l6YXJkKGluZGljYXRvcik7XG4gICAgICAgIFxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYCR7aW5kaWNhdG9yfeKdjCBJbnZhbGlkIGFjdGlvbiAnJHtvcHRpb25zLmFjdGlvbn0nLlxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgICBgVmFsaWQgYWN0aW9uczogZ2V0LCBzZXQsIHJlc2V0LCBleHBvcnQsIGltcG9ydCwgd2l6YXJkYFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IHNhbml0aXplZEVycm9yID0gU2VjdXJlRXJyb3JIYW5kbGVyLnNhbml0aXplRXJyb3IoZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHtpbmRpY2F0b3J94p2MIENvbmZpZ3VyYXRpb24gb3BlcmF0aW9uIGZhaWxlZDogJHtzYW5pdGl6ZWRFcnJvci5tZXNzYWdlfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG4gIFxuICBwcml2YXRlIGFzeW5jIGhhbmRsZUdldChvcHRpb25zOiBDb25maWdPcGVyYXRpb25PcHRpb25zLCBpbmRpY2F0b3I6IHN0cmluZykge1xuICAgIC8vIEdldCBhIHNwZWNpZmljIHNldHRpbmcgb3IgYWxsIHNldHRpbmdzXG4gICAgaWYgKG9wdGlvbnMuc2V0dGluZykge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmNvbmZpZ01hbmFnZXIuZ2V0U2V0dGluZyhvcHRpb25zLnNldHRpbmcpO1xuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHtpbmRpY2F0b3J94p2MIFNldHRpbmcgJyR7b3B0aW9ucy5zZXR0aW5nfScgbm90IGZvdW5kLlxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYFVzZSBcXGBkb2xsaG91c2VfY29uZmlnIGFjdGlvbjogXCJnZXRcIlxcYCB0byBzZWUgYWxsIGF2YWlsYWJsZSBzZXR0aW5ncy5gXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHtpbmRpY2F0b3J94pqZ77iPICoqQ29uZmlndXJhdGlvbiBTZXR0aW5nKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgICBgKioke29wdGlvbnMuc2V0dGluZ30qKjogJHt0aGlzLmZvcm1hdFZhbHVlKHZhbHVlKX1gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgICBcbiAgICAvLyBHZXQgYWxsIHNldHRpbmdzIC0gbWFrZSB0aGVtIHVzZXItZnJpZW5kbHlcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZ01hbmFnZXIuZ2V0Q29uZmlnKCk7XG4gICAgY29uc3QgZnJpZW5kbHlDb25maWcgPSB0aGlzLm1ha2VGcmllbmRseUNvbmZpZyhjb25maWcpO1xuICAgIFxuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbe1xuICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgdGV4dDogYCR7aW5kaWNhdG9yfeKame+4jyAqKkRvbGxob3VzZU1DUCBDb25maWd1cmF0aW9uKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgYFxcYFxcYFxcYHlhbWxcXG4ke3lhbWwuZHVtcChmcmllbmRseUNvbmZpZywgeyBsaW5lV2lkdGg6IC0xIH0pfVxcYFxcYFxcYGBcbiAgICAgIH1dXG4gICAgfTtcbiAgfVxuICBcbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVTZXQob3B0aW9uczogQ29uZmlnT3BlcmF0aW9uT3B0aW9ucywgaW5kaWNhdG9yOiBzdHJpbmcpIHtcbiAgICAvLyBTZXQgYSBjb25maWd1cmF0aW9uIHZhbHVlXG4gICAgaWYgKCFvcHRpb25zLnNldHRpbmcgfHwgb3B0aW9ucy52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke2luZGljYXRvcn3inYwgQm90aCAnc2V0dGluZycgYW5kICd2YWx1ZScgYXJlIHJlcXVpcmVkIGZvciBzZXQgb3BlcmF0aW9uLlxcblxcbmAgK1xuICAgICAgICAgICAgICAgIGBFeGFtcGxlOiBcXGBkb2xsaG91c2VfY29uZmlnIGFjdGlvbjogXCJzZXRcIiwgc2V0dGluZzogXCJzeW5jLmVuYWJsZWRcIiwgdmFsdWU6IHRydWVcXGBgXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgICBcbiAgICAvLyBUeXBlIGNvZXJjaW9uIGZvciBjb21tb24gc3RyaW5nLXRvLXR5cGUgY29udmVyc2lvbnNcbiAgICBsZXQgY29lcmNlZFZhbHVlID0gb3B0aW9ucy52YWx1ZTtcbiAgICBcbiAgICAvLyBDb252ZXJ0IHN0cmluZyBib29sZWFucyB0byBhY3R1YWwgYm9vbGVhbnNcbiAgICBpZiAodHlwZW9mIGNvZXJjZWRWYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IGxvd2VyVmFsdWUgPSBjb2VyY2VkVmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChsb3dlclZhbHVlID09PSAndHJ1ZScpIHtcbiAgICAgICAgY29lcmNlZFZhbHVlID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAobG93ZXJWYWx1ZSA9PT0gJ2ZhbHNlJykge1xuICAgICAgICBjb2VyY2VkVmFsdWUgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAoL15cXGQrJC8udGVzdChjb2VyY2VkVmFsdWUpKSB7XG4gICAgICAgIC8vIENvbnZlcnQgbnVtZXJpYyBzdHJpbmdzIHRvIG51bWJlcnNcbiAgICAgICAgY29uc3QgbnVtVmFsdWUgPSBwYXJzZUludChjb2VyY2VkVmFsdWUsIDEwKTtcbiAgICAgICAgaWYgKCFpc05hTihudW1WYWx1ZSkpIHtcbiAgICAgICAgICBjb2VyY2VkVmFsdWUgPSBudW1WYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBhd2FpdCB0aGlzLmNvbmZpZ01hbmFnZXIudXBkYXRlU2V0dGluZyhvcHRpb25zLnNldHRpbmcsIGNvZXJjZWRWYWx1ZSk7XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICB0ZXh0OiBgJHtpbmRpY2F0b3J94pyFICoqQ29uZmlndXJhdGlvbiBVcGRhdGVkKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgYCoqJHtvcHRpb25zLnNldHRpbmd9Kiogc2V0IHRvOiAke0pTT04uc3RyaW5naWZ5KGNvZXJjZWRWYWx1ZSwgbnVsbCwgMil9XFxuXFxuYCArXG4gICAgICAgICAgICAgIGBDaGFuZ2VzIGhhdmUgYmVlbiBzYXZlZCB0byB0aGUgY29uZmlndXJhdGlvbiBmaWxlLmBcbiAgICAgIH1dXG4gICAgfTtcbiAgfVxuICBcbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVSZXNldChvcHRpb25zOiBDb25maWdPcGVyYXRpb25PcHRpb25zLCBpbmRpY2F0b3I6IHN0cmluZykge1xuICAgIC8vIFJlc2V0IGNvbmZpZ3VyYXRpb24gdG8gZGVmYXVsdHNcbiAgICBpZiAob3B0aW9ucy5zZWN0aW9uKSB7XG4gICAgICBhd2FpdCB0aGlzLmNvbmZpZ01hbmFnZXIucmVzZXRDb25maWcob3B0aW9ucy5zZWN0aW9uKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7aW5kaWNhdG9yffCflIQgKipDb25maWd1cmF0aW9uIFJlc2V0KipcXG5cXG5gICtcbiAgICAgICAgICAgICAgICBgU2VjdGlvbiAnJHtvcHRpb25zLnNlY3Rpb259JyBoYXMgYmVlbiByZXNldCB0byBkZWZhdWx0IHZhbHVlcy5gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgICBcbiAgICAvLyBSZXNldCBhbGwgY29uZmlndXJhdGlvblxuICAgIGF3YWl0IHRoaXMuY29uZmlnTWFuYWdlci5yZXNldENvbmZpZygpO1xuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbe1xuICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgdGV4dDogYCR7aW5kaWNhdG9yffCflIQgKipDb25maWd1cmF0aW9uIFJlc2V0KipcXG5cXG5gICtcbiAgICAgICAgICAgICAgYEFsbCBzZXR0aW5ncyBoYXZlIGJlZW4gcmVzZXQgdG8gZGVmYXVsdCB2YWx1ZXMuXFxuXFxuYCArXG4gICAgICAgICAgICAgIGBOb3RlOiBVc2VyIGlkZW50aXR5IGFuZCBHaXRIdWIgYXV0aGVudGljYXRpb24gYXJlIHByZXNlcnZlZC5gXG4gICAgICB9XVxuICAgIH07XG4gIH1cbiAgXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlRXhwb3J0KG9wdGlvbnM6IENvbmZpZ09wZXJhdGlvbk9wdGlvbnMsIGluZGljYXRvcjogc3RyaW5nKSB7XG4gICAgLy8gRXhwb3J0IGNvbmZpZ3VyYXRpb25cbiAgICBjb25zdCBmb3JtYXQgPSBvcHRpb25zLmZvcm1hdCB8fCAneWFtbCc7XG4gICAgY29uc3QgZXhwb3J0ZWQgPSBhd2FpdCB0aGlzLmNvbmZpZ01hbmFnZXIuZXhwb3J0Q29uZmlnKGZvcm1hdCk7XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICB0ZXh0OiBgJHtpbmRpY2F0b3J98J+TpCAqKkNvbmZpZ3VyYXRpb24gRXhwb3J0KipcXG5cXG5gICtcbiAgICAgICAgICAgICAgYFxcYFxcYFxcYCR7Zm9ybWF0fVxcbiR7ZXhwb3J0ZWR9XFxgXFxgXFxgXFxuXFxuYCArXG4gICAgICAgICAgICAgIGBZb3UgY2FuIHNhdmUgdGhpcyBjb25maWd1cmF0aW9uIGFuZCBpbXBvcnQgaXQgbGF0ZXIuYFxuICAgICAgfV1cbiAgICB9O1xuICB9XG4gIFxuICBwcml2YXRlIGFzeW5jIGhhbmRsZUltcG9ydChvcHRpb25zOiBDb25maWdPcGVyYXRpb25PcHRpb25zLCBpbmRpY2F0b3I6IHN0cmluZykge1xuICAgIC8vIEltcG9ydCBjb25maWd1cmF0aW9uXG4gICAgaWYgKCFvcHRpb25zLmRhdGEpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7aW5kaWNhdG9yfeKdjCBDb25maWd1cmF0aW9uIGRhdGEgaXMgcmVxdWlyZWQgZm9yIGltcG9ydC5cXG5cXG5gICtcbiAgICAgICAgICAgICAgICBgUHJvdmlkZSBZQU1MIG9yIEpTT04gY29uZmlndXJhdGlvbiBpbiB0aGUgJ2RhdGEnIHBhcmFtZXRlci5gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgICBcbiAgICBhd2FpdCB0aGlzLmNvbmZpZ01hbmFnZXIuaW1wb3J0Q29uZmlnKG9wdGlvbnMuZGF0YSk7XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICB0ZXh0OiBgJHtpbmRpY2F0b3J94pyFICoqQ29uZmlndXJhdGlvbiBJbXBvcnRlZCoqXFxuXFxuYCArXG4gICAgICAgICAgICAgIGBDb25maWd1cmF0aW9uIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBpbXBvcnRlZCBhbmQgc2F2ZWQuYFxuICAgICAgfV1cbiAgICB9O1xuICB9XG4gIFxuICAvKipcbiAgICogSGFuZGxlIHRoZSBjb25maWd1cmF0aW9uIHdpemFyZFxuICAgKiBAcmV0dXJucyBQcm9taXNlIHdpdGggd2l6YXJkIGludGVyZmFjZSBjb250ZW50XG4gICAqIEBhc3luY1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVXaXphcmQoaW5kaWNhdG9yOiBzdHJpbmcpIHtcbiAgICAvLyBHZXQgY3VycmVudCBjb25maWd1cmF0aW9uIHRvIHNob3cgdGhlIHVzZXJcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZ01hbmFnZXIuZ2V0Q29uZmlnKCk7XG4gICAgY29uc3QgZnJpZW5kbHlDb25maWcgPSB0aGlzLm1ha2VGcmllbmRseUNvbmZpZyhjb25maWcpO1xuICAgIFxuICAgIC8vIEJ1aWxkIHdpemFyZCBjb250ZW50IHVzaW5nIHRlbXBsYXRlc1xuICAgIC8vIE5vdGU6IFRlbXBsYXRlIGJ1aWxkZXIgaXMgaW1wb3J0ZWQgZm9yIGZ1dHVyZSB1c2Ugd2hlbiB3ZSBmdWxseSBtaWdyYXRlIHRvIHRlbXBsYXRlIHN5c3RlbVxuICAgIGNvbnN0IHdpemFyZENvbnRlbnQgPSBgJHtpbmRpY2F0b3J98J+nmSAqKkNvbmZpZ3VyYXRpb24gV2l6YXJkIC0gTGV0J3MgU2V0IFVwIERvbGxob3VzZU1DUCEqKlxuXG5JJ2xsIGhlbHAgeW91IGNvbmZpZ3VyZSBEb2xsaG91c2VNQ1Agc3RlcCBieSBzdGVwLiBGaXJzdCwgbGV0IG1lIHNob3cgeW91IHlvdXIgY3VycmVudCBzZXR0aW5nczpcblxuKirwn5OKIEN1cnJlbnQgQ29uZmlndXJhdGlvbjoqKlxuXFxgXFxgXFxgeWFtbFxuJHt5YW1sLmR1bXAoZnJpZW5kbHlDb25maWcsIHsgbGluZVdpZHRoOiAtMSB9KX1cblxcYFxcYFxcYFxuXG4qKk5vdywgbGV0J3MgY29uZmlndXJlIHlvdXIgc2V0dGluZ3Mgb25lIGJ5IG9uZSEqKlxuXG7wn46vICoqU3RlcCAxOiBVc2VyIElkZW50aXR5KipcblRoaXMgdGFncyB5b3VyIGNyZWF0aW9ucyBzbyB5b3UgY2FuIGZpbmQgdGhlbSBsYXRlci4gRXZlcnl0aGluZyBpcyBzYXZlZCBsb2NhbGx5IG9uIHlvdXIgY29tcHV0ZXIuXG4tIFRvIHNldCBhIHVzZXJuYW1lOiBTYXkgXCJTZXQgbXkgdXNlcm5hbWUgdG8gW3lvdXItbmFtZV1cIlxuLSBUbyBzdGF5IGFub255bW91czogU2F5IFwiSSdsbCBzdGF5IGFub255bW91c1wiXG4tIEN1cnJlbnQ6ICR7ZnJpZW5kbHlDb25maWcudXNlcj8udXNlcm5hbWUgfHwgJyhub3Qgc2V0IC0gYW5vbnltb3VzIG1vZGUpJ31cblxu8J+UkCAqKlN0ZXAgMjogR2l0SHViIEludGVncmF0aW9uIChPcHRpb25hbCkqKlxuQ29ubmVjdCB0byBHaXRIdWIgdG8gc2hhcmUgeW91ciBjcmVhdGlvbnMgYW5kIGJyb3dzZSBjb21tdW5pdHkgY29udGVudC5cbi0gVG8gY29ubmVjdCBHaXRIdWI6IFNheSBcIkNvbm5lY3QgbXkgR2l0SHViIGFjY291bnRcIlxuLSBUbyBza2lwOiBTYXkgXCJTa2lwIEdpdEh1YiBmb3Igbm93XCJcbi0gQ3VycmVudDogJHtmcmllbmRseUNvbmZpZy5naXRodWI/LmF1dGhfdG9rZW4gPyAnQ29ubmVjdGVkJyA6ICcobm90IGNvbm5lY3RlZCknfVxuXG7wn5SEICoqU3RlcCAzOiBQb3J0Zm9saW8gU3luYyAoT3B0aW9uYWwpKipcbkF1dG9tYXRpY2FsbHkgYmFja3VwIHlvdXIgY3JlYXRpb25zIHRvIEdpdEh1Yi5cbi0gVG8gZW5hYmxlOiBTYXkgXCJFbmFibGUgYXV0by1zeW5jXCJcbi0gVG8ga2VlcCBtYW51YWw6IFNheSBcIkknbGwgc3luYyBtYW51YWxseVwiXG4tIEN1cnJlbnQ6ICR7ZnJpZW5kbHlDb25maWcucG9ydGZvbGlvPy5hdXRvX3N5bmMgPyAnRW5hYmxlZCcgOiAnTWFudWFsJ31cblxu8J+OqCAqKlN0ZXAgNDogRGlzcGxheSBQcmVmZXJlbmNlcyoqXG5DdXN0b21pemUgaG93IERvbGxob3VzZU1DUCBzaG93cyBpbmZvcm1hdGlvbi5cbi0gVG8gc2hvdyBhY3RpdmUgcGVyc29uYTogU2F5IFwiU2hvdyBwZXJzb25hIGluZGljYXRvcnNcIlxuLSBUbyBrZWVwIG1pbmltYWw6IFNheSBcIlVzZSBtaW5pbWFsIGRpc3BsYXlcIlxuLSBDdXJyZW50OiAke2ZyaWVuZGx5Q29uZmlnLmluZGljYXRvcj8uZW5hYmxlZCA/ICdFbmFibGVkJyA6ICdNaW5pbWFsJ31cblxu8J+SoSAqKlF1aWNrIFNldHVwKio6IFNheSBcIkNvbmZpZ3VyZSB0aGUgYmFzaWNzXCIgdG8gc2V0IGp1c3QgdXNlcm5hbWUgYW5kIEdpdEh1Ylxu8J+TnSAqKkRldGFpbGVkIFNldHVwKio6IFNheSBcIkNvbmZpZ3VyZSBldmVyeXRoaW5nXCIgdG8gZ28gdGhyb3VnaCBhbGwgb3B0aW9uc1xu4o+t77iPICoqU2tpcCBmb3IgTm93Kio6IFNheSBcIlNraXAgd2l6YXJkXCIgdG8gdXNlIGFub255bW91cyBtb2RlXG5cbuKcqCBZb3UgY2FuIGFsd2F5cyBjaGFuZ2UgdGhlc2Ugc2V0dGluZ3MgbGF0ZXIgYnkgc2F5aW5nIFwiT3BlbiBjb25maWd1cmF0aW9uIHdpemFyZFwiYDtcbiAgICBcbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudDogW3tcbiAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgIHRleHQ6IHdpemFyZENvbnRlbnRcbiAgICAgIH1dXG4gICAgfTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEZvcm1hdCBhIHZhbHVlIGZvciB1c2VyLWZyaWVuZGx5IGRpc3BsYXlcbiAgICogUmVwbGFjZXMgbnVsbC91bmRlZmluZWQgd2l0aCBoZWxwZnVsIG1lc3NhZ2VzXG4gICAqL1xuICBwcml2YXRlIGZvcm1hdFZhbHVlKHZhbHVlOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gXCIobm90IHNldClcIjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUudHJpbSgpID09PSAnJykge1xuICAgICAgcmV0dXJuIFwiKGVtcHR5KVwiO1xuICAgIH1cbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUsIG51bGwsIDIpO1xuICB9XG4gIFxuICAvKipcbiAgICogTWFrZSBjb25maWd1cmF0aW9uIGRpc3BsYXkgdXNlci1mcmllbmRseSBmb3Igbm9uLXRlY2huaWNhbCB1c2Vyc1xuICAgKiBSZXBsYWNlcyBudWxsIHZhbHVlcyB3aXRoIGhlbHBmdWwgZXhwbGFuYXRpb25zXG4gICAqIFVzZXMgY2VudHJhbGl6ZWQgZnJpZW5kbHkgdmFsdWVzIGZvciBpMThuIHN1cHBvcnRcbiAgICovXG4gIHByaXZhdGUgbWFrZUZyaWVuZGx5Q29uZmlnKGNvbmZpZzogYW55KTogYW55IHtcbiAgICBjb25zdCBmcmllbmRseSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY29uZmlnKSk7IC8vIERlZXAgY2xvbmVcbiAgICBcbiAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gcmVwbGFjZSBudWxsIHZhbHVlcyB3aXRoIGZyaWVuZGx5IG1lc3NhZ2VzXG4gICAgY29uc3QgcmVwbGFjZUZyaWVuZGx5VmFsdWUgPSAob2JqOiBhbnksIHBhdGg6IHN0cmluZyA9ICcnKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICAgICAgY29uc3QgY3VycmVudFBhdGggPSBwYXRoID8gYCR7cGF0aH0uJHtrZXl9YCA6IGtleTtcbiAgICAgICAgXG4gICAgICAgIGlmIChvYmpba2V5XSA9PT0gbnVsbCkge1xuICAgICAgICAgIG9ialtrZXldID0gZ2V0RnJpZW5kbHlOdWxsVmFsdWUoY3VycmVudFBhdGgpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBvYmpba2V5XSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkob2JqW2tleV0pKSB7XG4gICAgICAgICAgcmVwbGFjZUZyaWVuZGx5VmFsdWUob2JqW2tleV0sIGN1cnJlbnRQYXRoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgXG4gICAgLy8gQXBwbHkgZnJpZW5kbHkgcmVwbGFjZW1lbnRzXG4gICAgcmVwbGFjZUZyaWVuZGx5VmFsdWUoZnJpZW5kbHkpO1xuICAgIFxuICAgIC8vIExlZ2FjeSBtYW51YWwgcmVwbGFjZW1lbnRzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgLy8gKFRoZXNlIHdpbGwgYmUgcmVtb3ZlZCBvbmNlIHdlIGZ1bGx5IG1pZ3JhdGUgdG8gdGVtcGxhdGUgc3lzdGVtKVxuICAgIGlmIChmcmllbmRseS5zeW5jKSB7XG4gICAgICBpZiAoZnJpZW5kbHkuc3luYy5sYXN0X3N5bmMgPT09IFwiKG5vdCBzZXQpXCIpIHtcbiAgICAgICAgZnJpZW5kbHkuc3luYy5sYXN0X3N5bmMgPSBcIihuZXZlciBzeW5jZWQpXCI7XG4gICAgICB9XG4gICAgICBpZiAoZnJpZW5kbHkuc3luYy5yZW1vdGVfdXJsID09PSBcIihub3Qgc2V0KVwiKSB7XG4gICAgICAgIGZyaWVuZGx5LnN5bmMucmVtb3RlX3VybCA9IFwiKG5vIHJlbW90ZSByZXBvc2l0b3J5KVwiO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICAvLyBEaXNwbGF5IHNldHRpbmdzXG4gICAgaWYgKGZyaWVuZGx5LmRpc3BsYXkpIHtcbiAgICAgIC8vIFRoZXNlIGFyZSB0eXBpY2FsbHkgYm9vbGVhbnMsIGJ1dCBoYW5kbGUgbnVsbHMganVzdCBpbiBjYXNlXG4gICAgICBpZiAoZnJpZW5kbHkuZGlzcGxheS5zaG93X3BlcnNvbmFfaW5kaWNhdG9yID09PSBudWxsKSB7XG4gICAgICAgIGZyaWVuZGx5LmRpc3BsYXkuc2hvd19wZXJzb25hX2luZGljYXRvciA9IHRydWU7IC8vIERlZmF1bHQgdmFsdWVcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gQ29sbGVjdGlvbiBzZXR0aW5nc1xuICAgIGlmIChmcmllbmRseS5jb2xsZWN0aW9uKSB7XG4gICAgICBpZiAoZnJpZW5kbHkuY29sbGVjdGlvbi5hdXRvX3N1Ym1pdCA9PT0gbnVsbCkge1xuICAgICAgICBmcmllbmRseS5jb2xsZWN0aW9uLmF1dG9fc3VibWl0ID0gZmFsc2U7IC8vIERlZmF1bHQgdmFsdWVcbiAgICAgIH1cbiAgICAgIGlmIChmcmllbmRseS5jb2xsZWN0aW9uLmxhc3RfY2FjaGVfdXBkYXRlID09PSBudWxsKSB7XG4gICAgICAgIGZyaWVuZGx5LmNvbGxlY3Rpb24ubGFzdF9jYWNoZV91cGRhdGUgPSBcIihjYWNoZSBub3QgaW5pdGlhbGl6ZWQpXCI7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIFdpemFyZCBzZXR0aW5ncyAtIHNob3cgZnJpZW5kbHkgc3RhdHVzXG4gICAgaWYgKGZyaWVuZGx5LndpemFyZCkge1xuICAgICAgaWYgKGZyaWVuZGx5LndpemFyZC5jb21wbGV0ZWQgPT09IGZhbHNlICYmIGZyaWVuZGx5LndpemFyZC5kaXNtaXNzZWQgPT09IGZhbHNlKSB7XG4gICAgICAgIGZyaWVuZGx5LndpemFyZC5fc3RhdHVzID0gXCLij7MgUmVhZHkgdG8gcnVuIChub3QgY29tcGxldGVkKVwiO1xuICAgICAgfSBlbHNlIGlmIChmcmllbmRseS53aXphcmQuY29tcGxldGVkID09PSB0cnVlKSB7XG4gICAgICAgIGZyaWVuZGx5LndpemFyZC5fc3RhdHVzID0gXCLinIUgQ29tcGxldGVkXCI7XG4gICAgICB9IGVsc2UgaWYgKGZyaWVuZGx5LndpemFyZC5kaXNtaXNzZWQgPT09IHRydWUpIHtcbiAgICAgICAgZnJpZW5kbHkud2l6YXJkLl9zdGF0dXMgPSBcIuKPre+4jyBEaXNtaXNzZWRcIjtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIGZyaWVuZGx5O1xuICB9XG59Il19
330
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uZmlnSGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9oYW5kbGVycy9Db25maWdIYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNwRSxvRUFBb0U7QUFDcEUsd0VBQXdFO0FBQ3hFLE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBV2hDLE1BQU0sT0FBTyxhQUFhO0lBQ2hCLGFBQWEsQ0FBZ0I7SUFFckM7UUFDRSxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNuRCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7T0FnQkc7SUFDSCxLQUFLLENBQUMscUJBQXFCLENBQUMsT0FBK0IsRUFBRSxZQUFvQixFQUFFO1FBQ2pGLElBQUksQ0FBQztZQUNILE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUV0QyxRQUFRLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDdkIsS0FBSyxLQUFLO29CQUNSLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBRTVDLEtBQUssS0FBSztvQkFDUixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUU1QyxLQUFLLE9BQU87b0JBQ1YsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFFOUMsS0FBSyxRQUFRO29CQUNYLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENB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SCxDQUFDO1FBRUQseUNBQXlDO1FBQ3pDLElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3BCLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEtBQUssS0FBSyxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxLQUFLLEtBQUssRUFBRSxDQUFDO2dCQUMvRSxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxnQ0FBZ0MsQ0FBQztZQUM3RCxDQUFDO2lCQUFNLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQzlDLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLGFBQWEsQ0FBQztZQUMxQyxDQUFDO2lCQUFNLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQzlDLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLGNBQWMsQ0FBQztZQUMzQyxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29uZmlndXJhdGlvbiBoYW5kbGVyIGZvciB0aGUgZG9sbGhvdXNlX2NvbmZpZyBNQ1AgdG9vbFxuICogUHJvdmlkZXMgdW5pZmllZCBpbnRlcmZhY2UgZm9yIGFsbCBjb25maWd1cmF0aW9uIG1hbmFnZW1lbnQgb3BlcmF0aW9uc1xuICovXG5cbmltcG9ydCB7IENvbmZpZ01hbmFnZXIgfSBmcm9tICcuLi9jb25maWcvQ29uZmlnTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBTZWN1cmVFcnJvckhhbmRsZXIgfSBmcm9tICcuLi9zZWN1cml0eS9lcnJvckhhbmRsZXIuanMnO1xuaW1wb3J0IHsgZ2V0RnJpZW5kbHlOdWxsVmFsdWUgfSBmcm9tICcuLi9jb25maWcvd2l6YXJkVGVtcGxhdGVzLmpzJztcbi8vIFdpemFyZFRlbXBsYXRlQnVpbGRlciBpbXBvcnRlZCBmb3IgZnV0dXJlIGZ1bGwgdGVtcGxhdGUgbWlncmF0aW9uXG4vLyBpbXBvcnQgeyBXaXphcmRUZW1wbGF0ZUJ1aWxkZXIgfSBmcm9tICcuLi9jb25maWcvd2l6YXJkVGVtcGxhdGVzLmpzJztcbmltcG9ydCAqIGFzIHlhbWwgZnJvbSAnanMteWFtbCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uZmlnT3BlcmF0aW9uT3B0aW9ucyB7XG4gIGFjdGlvbjogJ2dldCcgfCAnc2V0JyB8ICdyZXNldCcgfCAnZXhwb3J0JyB8ICdpbXBvcnQnIHwgJ3dpemFyZCc7XG4gIHNldHRpbmc/OiBzdHJpbmc7XG4gIHZhbHVlPzogYW55O1xuICBzZWN0aW9uPzogc3RyaW5nO1xuICBmb3JtYXQ/OiAneWFtbCcgfCAnanNvbic7XG4gIGRhdGE/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBDb25maWdIYW5kbGVyIHtcbiAgcHJpdmF0ZSBjb25maWdNYW5hZ2VyOiBDb25maWdNYW5hZ2VyO1xuICBcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jb25maWdNYW5hZ2VyID0gQ29uZmlnTWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuICB9XG4gIFxuICAvKipcbiAgICogSGFuZGxlIGNvbmZpZ3VyYXRpb24gb3BlcmF0aW9ucyB2aWEgdGhlIGRvbGxob3VzZV9jb25maWcgdG9vbFxuICAgKiBcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBDb25maWd1cmF0aW9uIG9wZXJhdGlvbiBvcHRpb25zXG4gICAqIEBwYXJhbSBvcHRpb25zLmFjdGlvbiAtIFRoZSBhY3Rpb24gdG8gcGVyZm9ybSAoZ2V0LCBzZXQsIHJlc2V0LCBleHBvcnQsIGltcG9ydCwgd2l6YXJkKVxuICAgKiBAcGFyYW0gb3B0aW9ucy5zZXR0aW5nIC0gT3B0aW9uYWwgc2V0dGluZyBwYXRoIGZvciBnZXQvc2V0IG9wZXJhdGlvbnNcbiAgICogQHBhcmFtIG9wdGlvbnMudmFsdWUgLSBPcHRpb25hbCB2YWx1ZSBmb3Igc2V0IG9wZXJhdGlvbnNcbiAgICogQHBhcmFtIG9wdGlvbnMuc2VjdGlvbiAtIE9wdGlvbmFsIHNlY3Rpb24gZm9yIGZpbHRlcmluZ1xuICAgKiBAcGFyYW0gb3B0aW9ucy5mb3JtYXQgLSBPcHRpb25hbCBmb3JtYXQgZm9yIGV4cG9ydCAoeWFtbCBvciBqc29uKVxuICAgKiBAcGFyYW0gb3B0aW9ucy5kYXRhIC0gT3B0aW9uYWwgZGF0YSBmb3IgaW1wb3J0IG9wZXJhdGlvbnNcbiAgICogQHBhcmFtIGluZGljYXRvciAtIE9wdGlvbmFsIGluZGljYXRvciBzdHJpbmcgZm9yIHBlcnNvbmEgY29udGV4dFxuICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byBjb250ZW50IG9iamVjdCB3aXRoIG9wZXJhdGlvbiByZXN1bHRcbiAgICogQGFzeW5jXG4gICAqIFxuICAgKiBAbm90ZSBUaGUgd2l6YXJkIGFjdGlvbiBpcyBhc3luYyBhbmQgd2lsbCBhd2FpdCB0aGUgaGFuZGxlV2l6YXJkIG1ldGhvZFxuICAgKiBAc2luY2UgdjEuNC4wIC0gaGFuZGxlV2l6YXJkIG1hZGUgYXN5bmMgZm9yIGJldHRlciBjb25maWcgZmV0Y2hpbmdcbiAgICovXG4gIGFzeW5jIGhhbmRsZUNvbmZpZ09wZXJhdGlvbihvcHRpb25zOiBDb25maWdPcGVyYXRpb25PcHRpb25zLCBpbmRpY2F0b3I6IHN0cmluZyA9ICcnKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuY29uZmlnTWFuYWdlci5pbml0aWFsaXplKCk7XG4gICAgICBcbiAgICAgIHN3aXRjaCAob3B0aW9ucy5hY3Rpb24pIHtcbiAgICAgICAgY2FzZSAnZ2V0JzpcbiAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVHZXQob3B0aW9ucywgaW5kaWNhdG9yKTtcbiAgICAgICAgXG4gICAgICAgIGNhc2UgJ3NldCc6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlU2V0KG9wdGlvbnMsIGluZGljYXRvcik7XG4gICAgICAgIFxuICAgICAgICBjYXNlICdyZXNldCc6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlUmVzZXQob3B0aW9ucywgaW5kaWNhdG9yKTtcbiAgICAgICAgXG4gICAgICAgIGNhc2UgJ2V4cG9ydCc6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlRXhwb3J0KG9wdGlvbnMsIGluZGljYXRvcik7XG4gICAgICAgIFxuICAgICAgICBjYXNlICdpbXBvcnQnOlxuICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZUltcG9ydChvcHRpb25zLCBpbmRpY2F0b3IpO1xuICAgICAgICBcbiAgICAgICAgY2FzZSAnd2l6YXJkJzpcbiAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5oYW5kbGVXaXphcmQoaW5kaWNhdG9yKTtcbiAgICAgICAgXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBgJHtpbmRpY2F0b3J94p2MIEludmFsaWQgYWN0aW9uICcke29wdGlvbnMuYWN0aW9ufScuXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICAgIGBWYWxpZCBhY3Rpb25zOiBnZXQsIHNldCwgcmVzZXQsIGV4cG9ydCwgaW1wb3J0LCB3aXphcmRgXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICB9XG4gICAgICBcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3Qgc2FuaXRpemVkRXJyb3IgPSBTZWN1cmVFcnJvckhhbmRsZXIuc2FuaXRpemVFcnJvcihlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke2luZGljYXRvcn3inYwgQ29uZmlndXJhdGlvbiBvcGVyYXRpb24gZmFpbGVkOiAke3Nhbml0aXplZEVycm9yLm1lc3NhZ2V9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlR2V0KG9wdGlvbnM6IENvbmZpZ09wZXJhdGlvbk9wdGlvbnMsIGluZGljYXRvcjogc3RyaW5nKSB7XG4gICAgLy8gR2V0IGEgc3BlY2lmaWMgc2V0dGluZyBvciBhbGwgc2V0dGluZ3NcbiAgICBpZiAob3B0aW9ucy5zZXR0aW5nKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuY29uZmlnTWFuYWdlci5nZXRTZXR0aW5nKG9wdGlvbnMuc2V0dGluZyk7XG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke2luZGljYXRvcn3inYwgU2V0dGluZyAnJHtvcHRpb25zLnNldHRpbmd9JyBub3QgZm91bmQuXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBgVXNlIFxcYGRvbGxob3VzZV9jb25maWcgYWN0aW9uOiBcImdldFwiXFxgIHRvIHNlZSBhbGwgYXZhaWxhYmxlIHNldHRpbmdzLmBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke2luZGljYXRvcn3impnvuI8gKipDb25maWd1cmF0aW9uIFNldHRpbmcqKlxcblxcbmAgK1xuICAgICAgICAgICAgICAgIGAqKiR7b3B0aW9ucy5zZXR0aW5nfSoqOiAke3RoaXMuZm9ybWF0VmFsdWUodmFsdWUpfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICAgIFxuICAgIC8vIEdldCBhbGwgc2V0dGluZ3MgLSBtYWtlIHRoZW0gdXNlci1mcmllbmRseVxuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnTWFuYWdlci5nZXRDb25maWcoKTtcbiAgICBjb25zdCBmcmllbmRseUNvbmZpZyA9IHRoaXMubWFrZUZyaWVuZGx5Q29uZmlnKGNvbmZpZyk7XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICB0ZXh0OiBgJHtpbmRpY2F0b3J94pqZ77iPICoqRG9sbGhvdXNlTUNQIENvbmZpZ3VyYXRpb24qKlxcblxcbmAgK1xuICAgICAgICAgICAgICBgXFxgXFxgXFxgeWFtbFxcbiR7eWFtbC5kdW1wKGZyaWVuZGx5Q29uZmlnLCB7IGxpbmVXaWR0aDogLTEgfSl9XFxgXFxgXFxgYFxuICAgICAgfV1cbiAgICB9O1xuICB9XG4gIFxuICBwcml2YXRlIGFzeW5jIGhhbmRsZVNldChvcHRpb25zOiBDb25maWdPcGVyYXRpb25PcHRpb25zLCBpbmRpY2F0b3I6IHN0cmluZykge1xuICAgIC8vIFNldCBhIGNvbmZpZ3VyYXRpb24gdmFsdWVcbiAgICBpZiAoIW9wdGlvbnMuc2V0dGluZyB8fCBvcHRpb25zLnZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7aW5kaWNhdG9yfeKdjCBCb3RoICdzZXR0aW5nJyBhbmQgJ3ZhbHVlJyBhcmUgcmVxdWlyZWQgZm9yIHNldCBvcGVyYXRpb24uXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgYEV4YW1wbGU6IFxcYGRvbGxob3VzZV9jb25maWcgYWN0aW9uOiBcInNldFwiLCBzZXR0aW5nOiBcInN5bmMuZW5hYmxlZFwiLCB2YWx1ZTogdHJ1ZVxcYGBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICAgIFxuICAgIC8vIFR5cGUgY29lcmNpb24gZm9yIGNvbW1vbiBzdHJpbmctdG8tdHlwZSBjb252ZXJzaW9uc1xuICAgIGxldCBjb2VyY2VkVmFsdWUgPSBvcHRpb25zLnZhbHVlO1xuICAgIFxuICAgIC8vIENvbnZlcnQgc3RyaW5nIGJvb2xlYW5zIHRvIGFjdHVhbCBib29sZWFuc1xuICAgIGlmICh0eXBlb2YgY29lcmNlZFZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgbG93ZXJWYWx1ZSA9IGNvZXJjZWRWYWx1ZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKGxvd2VyVmFsdWUgPT09ICd0cnVlJykge1xuICAgICAgICBjb2VyY2VkVmFsdWUgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChsb3dlclZhbHVlID09PSAnZmFsc2UnKSB7XG4gICAgICAgIGNvZXJjZWRWYWx1ZSA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmICgvXlxcZCskLy50ZXN0KGNvZXJjZWRWYWx1ZSkpIHtcbiAgICAgICAgLy8gQ29udmVydCBudW1lcmljIHN0cmluZ3MgdG8gbnVtYmVyc1xuICAgICAgICBjb25zdCBudW1WYWx1ZSA9IE51bWJlci5wYXJzZUludChjb2VyY2VkVmFsdWUsIDEwKTtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4obnVtVmFsdWUpKSB7XG4gICAgICAgICAgY29lcmNlZFZhbHVlID0gbnVtVmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgYXdhaXQgdGhpcy5jb25maWdNYW5hZ2VyLnVwZGF0ZVNldHRpbmcob3B0aW9ucy5zZXR0aW5nLCBjb2VyY2VkVmFsdWUpO1xuICAgIFxuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbe1xuICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgdGV4dDogYCR7aW5kaWNhdG9yfeKchSAqKkNvbmZpZ3VyYXRpb24gVXBkYXRlZCoqXFxuXFxuYCArXG4gICAgICAgICAgICAgIGAqKiR7b3B0aW9ucy5zZXR0aW5nfSoqIHNldCB0bzogJHtKU09OLnN0cmluZ2lmeShjb2VyY2VkVmFsdWUsIG51bGwsIDIpfVxcblxcbmAgK1xuICAgICAgICAgICAgICBgQ2hhbmdlcyBoYXZlIGJlZW4gc2F2ZWQgdG8gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS5gXG4gICAgICB9XVxuICAgIH07XG4gIH1cbiAgXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlUmVzZXQob3B0aW9uczogQ29uZmlnT3BlcmF0aW9uT3B0aW9ucywgaW5kaWNhdG9yOiBzdHJpbmcpIHtcbiAgICAvLyBSZXNldCBjb25maWd1cmF0aW9uIHRvIGRlZmF1bHRzXG4gICAgaWYgKG9wdGlvbnMuc2VjdGlvbikge1xuICAgICAgYXdhaXQgdGhpcy5jb25maWdNYW5hZ2VyLnJlc2V0Q29uZmlnKG9wdGlvbnMuc2VjdGlvbik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke2luZGljYXRvcn3wn5SEICoqQ29uZmlndXJhdGlvbiBSZXNldCoqXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgYFNlY3Rpb24gJyR7b3B0aW9ucy5zZWN0aW9ufScgaGFzIGJlZW4gcmVzZXQgdG8gZGVmYXVsdCB2YWx1ZXMuYFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gICAgXG4gICAgLy8gUmVzZXQgYWxsIGNvbmZpZ3VyYXRpb25cbiAgICBhd2FpdCB0aGlzLmNvbmZpZ01hbmFnZXIucmVzZXRDb25maWcoKTtcbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudDogW3tcbiAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgIHRleHQ6IGAke2luZGljYXRvcn3wn5SEICoqQ29uZmlndXJhdGlvbiBSZXNldCoqXFxuXFxuYCArXG4gICAgICAgICAgICAgIGBBbGwgc2V0dGluZ3MgaGF2ZSBiZWVuIHJlc2V0IHRvIGRlZmF1bHQgdmFsdWVzLlxcblxcbmAgK1xuICAgICAgICAgICAgICBgTm90ZTogVXNlciBpZGVudGl0eSBhbmQgR2l0SHViIGF1dGhlbnRpY2F0aW9uIGFyZSBwcmVzZXJ2ZWQuYFxuICAgICAgfV1cbiAgICB9O1xuICB9XG4gIFxuICBwcml2YXRlIGFzeW5jIGhhbmRsZUV4cG9ydChvcHRpb25zOiBDb25maWdPcGVyYXRpb25PcHRpb25zLCBpbmRpY2F0b3I6IHN0cmluZykge1xuICAgIC8vIEV4cG9ydCBjb25maWd1cmF0aW9uXG4gICAgY29uc3QgZm9ybWF0ID0gb3B0aW9ucy5mb3JtYXQgfHwgJ3lhbWwnO1xuICAgIGNvbnN0IGV4cG9ydGVkID0gYXdhaXQgdGhpcy5jb25maWdNYW5hZ2VyLmV4cG9ydENvbmZpZyhmb3JtYXQpO1xuICAgIFxuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbe1xuICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgdGV4dDogYCR7aW5kaWNhdG9yffCfk6QgKipDb25maWd1cmF0aW9uIEV4cG9ydCoqXFxuXFxuYCArXG4gICAgICAgICAgICAgIGBcXGBcXGBcXGAke2Zvcm1hdH1cXG4ke2V4cG9ydGVkfVxcYFxcYFxcYFxcblxcbmAgK1xuICAgICAgICAgICAgICBgWW91IGNhbiBzYXZlIHRoaXMgY29uZmlndXJhdGlvbiBhbmQgaW1wb3J0IGl0IGxhdGVyLmBcbiAgICAgIH1dXG4gICAgfTtcbiAgfVxuICBcbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVJbXBvcnQob3B0aW9uczogQ29uZmlnT3BlcmF0aW9uT3B0aW9ucywgaW5kaWNhdG9yOiBzdHJpbmcpIHtcbiAgICAvLyBJbXBvcnQgY29uZmlndXJhdGlvblxuICAgIGlmICghb3B0aW9ucy5kYXRhKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke2luZGljYXRvcn3inYwgQ29uZmlndXJhdGlvbiBkYXRhIGlzIHJlcXVpcmVkIGZvciBpbXBvcnQuXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgYFByb3ZpZGUgWUFNTCBvciBKU09OIGNvbmZpZ3VyYXRpb24gaW4gdGhlICdkYXRhJyBwYXJhbWV0ZXIuYFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gICAgXG4gICAgYXdhaXQgdGhpcy5jb25maWdNYW5hZ2VyLmltcG9ydENvbmZpZyhvcHRpb25zLmRhdGEpO1xuICAgIFxuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbe1xuICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgdGV4dDogYCR7aW5kaWNhdG9yfeKchSAqKkNvbmZpZ3VyYXRpb24gSW1wb3J0ZWQqKlxcblxcbmAgK1xuICAgICAgICAgICAgICBgQ29uZmlndXJhdGlvbiBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgaW1wb3J0ZWQgYW5kIHNhdmVkLmBcbiAgICAgIH1dXG4gICAgfTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEhhbmRsZSB0aGUgY29uZmlndXJhdGlvbiB3aXphcmRcbiAgICogQHJldHVybnMgUHJvbWlzZSB3aXRoIHdpemFyZCBpbnRlcmZhY2UgY29udGVudFxuICAgKiBAYXN5bmNcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlV2l6YXJkKGluZGljYXRvcjogc3RyaW5nKSB7XG4gICAgLy8gR2V0IGN1cnJlbnQgY29uZmlndXJhdGlvbiB0byBzaG93IHRoZSB1c2VyXG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWdNYW5hZ2VyLmdldENvbmZpZygpO1xuICAgIGNvbnN0IGZyaWVuZGx5Q29uZmlnID0gdGhpcy5tYWtlRnJpZW5kbHlDb25maWcoY29uZmlnKTtcbiAgICBcbiAgICAvLyBCdWlsZCB3aXphcmQgY29udGVudCB1c2luZyB0ZW1wbGF0ZXNcbiAgICAvLyBOb3RlOiBUZW1wbGF0ZSBidWlsZGVyIGlzIGltcG9ydGVkIGZvciBmdXR1cmUgdXNlIHdoZW4gd2UgZnVsbHkgbWlncmF0ZSB0byB0ZW1wbGF0ZSBzeXN0ZW1cbiAgICBjb25zdCB3aXphcmRDb250ZW50ID0gYCR7aW5kaWNhdG9yffCfp5kgKipDb25maWd1cmF0aW9uIFdpemFyZCAtIExldCdzIFNldCBVcCBEb2xsaG91c2VNQ1AhKipcblxuSSdsbCBoZWxwIHlvdSBjb25maWd1cmUgRG9sbGhvdXNlTUNQIHN0ZXAgYnkgc3RlcC4gRmlyc3QsIGxldCBtZSBzaG93IHlvdSB5b3VyIGN1cnJlbnQgc2V0dGluZ3M6XG5cbioq8J+TiiBDdXJyZW50IENvbmZpZ3VyYXRpb246KipcblxcYFxcYFxcYHlhbWxcbiR7eWFtbC5kdW1wKGZyaWVuZGx5Q29uZmlnLCB7IGxpbmVXaWR0aDogLTEgfSl9XG5cXGBcXGBcXGBcblxuKipOb3csIGxldCdzIGNvbmZpZ3VyZSB5b3VyIHNldHRpbmdzIG9uZSBieSBvbmUhKipcblxu8J+OryAqKlN0ZXAgMTogVXNlciBJZGVudGl0eSoqXG5UaGlzIHRhZ3MgeW91ciBjcmVhdGlvbnMgc28geW91IGNhbiBmaW5kIHRoZW0gbGF0ZXIuIEV2ZXJ5dGhpbmcgaXMgc2F2ZWQgbG9jYWxseSBvbiB5b3VyIGNvbXB1dGVyLlxuLSBUbyBzZXQgYSB1c2VybmFtZTogU2F5IFwiU2V0IG15IHVzZXJuYW1lIHRvIFt5b3VyLW5hbWVdXCJcbi0gVG8gc3RheSBhbm9ueW1vdXM6IFNheSBcIkknbGwgc3RheSBhbm9ueW1vdXNcIlxuLSBDdXJyZW50OiAke2ZyaWVuZGx5Q29uZmlnLnVzZXI/LnVzZXJuYW1lIHx8ICcobm90IHNldCAtIGFub255bW91cyBtb2RlKSd9XG5cbvCflJAgKipTdGVwIDI6IEdpdEh1YiBJbnRlZ3JhdGlvbiAoT3B0aW9uYWwpKipcbkNvbm5lY3QgdG8gR2l0SHViIHRvIHNoYXJlIHlvdXIgY3JlYXRpb25zIGFuZCBicm93c2UgY29tbXVuaXR5IGNvbnRlbnQuXG4tIFRvIGNvbm5lY3QgR2l0SHViOiBTYXkgXCJDb25uZWN0IG15IEdpdEh1YiBhY2NvdW50XCJcbi0gVG8gc2tpcDogU2F5IFwiU2tpcCBHaXRIdWIgZm9yIG5vd1wiXG4tIEN1cnJlbnQ6ICR7ZnJpZW5kbHlDb25maWcuZ2l0aHViPy5hdXRoX3Rva2VuID8gJ0Nvbm5lY3RlZCcgOiAnKG5vdCBjb25uZWN0ZWQpJ31cblxu8J+UhCAqKlN0ZXAgMzogUG9ydGZvbGlvIFN5bmMgKE9wdGlvbmFsKSoqXG5BdXRvbWF0aWNhbGx5IGJhY2t1cCB5b3VyIGNyZWF0aW9ucyB0byBHaXRIdWIuXG4tIFRvIGVuYWJsZTogU2F5IFwiRW5hYmxlIGF1dG8tc3luY1wiXG4tIFRvIGtlZXAgbWFudWFsOiBTYXkgXCJJJ2xsIHN5bmMgbWFudWFsbHlcIlxuLSBDdXJyZW50OiAke2ZyaWVuZGx5Q29uZmlnLnBvcnRmb2xpbz8uYXV0b19zeW5jID8gJ0VuYWJsZWQnIDogJ01hbnVhbCd9XG5cbvCfjqggKipTdGVwIDQ6IERpc3BsYXkgUHJlZmVyZW5jZXMqKlxuQ3VzdG9taXplIGhvdyBEb2xsaG91c2VNQ1Agc2hvd3MgaW5mb3JtYXRpb24uXG4tIFRvIHNob3cgYWN0aXZlIHBlcnNvbmE6IFNheSBcIlNob3cgcGVyc29uYSBpbmRpY2F0b3JzXCJcbi0gVG8ga2VlcCBtaW5pbWFsOiBTYXkgXCJVc2UgbWluaW1hbCBkaXNwbGF5XCJcbi0gQ3VycmVudDogJHtmcmllbmRseUNvbmZpZy5pbmRpY2F0b3I/LmVuYWJsZWQgPyAnRW5hYmxlZCcgOiAnTWluaW1hbCd9XG5cbvCfkqEgKipRdWljayBTZXR1cCoqOiBTYXkgXCJDb25maWd1cmUgdGhlIGJhc2ljc1wiIHRvIHNldCBqdXN0IHVzZXJuYW1lIGFuZCBHaXRIdWJcbvCfk50gKipEZXRhaWxlZCBTZXR1cCoqOiBTYXkgXCJDb25maWd1cmUgZXZlcnl0aGluZ1wiIHRvIGdvIHRocm91Z2ggYWxsIG9wdGlvbnNcbuKPre+4jyAqKlNraXAgZm9yIE5vdyoqOiBTYXkgXCJTa2lwIHdpemFyZFwiIHRvIHVzZSBhbm9ueW1vdXMgbW9kZVxuXG7inKggWW91IGNhbiBhbHdheXMgY2hhbmdlIHRoZXNlIHNldHRpbmdzIGxhdGVyIGJ5IHNheWluZyBcIk9wZW4gY29uZmlndXJhdGlvbiB3aXphcmRcImA7XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICB0ZXh0OiB3aXphcmRDb250ZW50XG4gICAgICB9XVxuICAgIH07XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBGb3JtYXQgYSB2YWx1ZSBmb3IgdXNlci1mcmllbmRseSBkaXNwbGF5XG4gICAqIFJlcGxhY2VzIG51bGwvdW5kZWZpbmVkIHdpdGggaGVscGZ1bCBtZXNzYWdlc1xuICAgKi9cbiAgcHJpdmF0ZSBmb3JtYXRWYWx1ZSh2YWx1ZTogYW55KTogc3RyaW5nIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIFwiKG5vdCBzZXQpXCI7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgIHJldHVybiBcIihlbXB0eSlcIjtcbiAgICB9XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlLCBudWxsLCAyKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIE1ha2UgY29uZmlndXJhdGlvbiBkaXNwbGF5IHVzZXItZnJpZW5kbHkgZm9yIG5vbi10ZWNobmljYWwgdXNlcnNcbiAgICogUmVwbGFjZXMgbnVsbCB2YWx1ZXMgd2l0aCBoZWxwZnVsIGV4cGxhbmF0aW9uc1xuICAgKiBVc2VzIGNlbnRyYWxpemVkIGZyaWVuZGx5IHZhbHVlcyBmb3IgaTE4biBzdXBwb3J0XG4gICAqL1xuICBwcml2YXRlIG1ha2VGcmllbmRseUNvbmZpZyhjb25maWc6IGFueSk6IGFueSB7XG4gICAgY29uc3QgZnJpZW5kbHkgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNvbmZpZykpOyAvLyBEZWVwIGNsb25lXG4gICAgXG4gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHJlcGxhY2UgbnVsbCB2YWx1ZXMgd2l0aCBmcmllbmRseSBtZXNzYWdlc1xuICAgIGNvbnN0IHJlcGxhY2VGcmllbmRseVZhbHVlID0gKG9iajogYW55LCBwYXRoOiBzdHJpbmcgPSAnJykgPT4ge1xuICAgICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRQYXRoID0gcGF0aCA/IGAke3BhdGh9LiR7a2V5fWAgOiBrZXk7XG4gICAgICAgIFxuICAgICAgICBpZiAob2JqW2tleV0gPT09IG51bGwpIHtcbiAgICAgICAgICBvYmpba2V5XSA9IGdldEZyaWVuZGx5TnVsbFZhbHVlKGN1cnJlbnRQYXRoKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb2JqW2tleV0gPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KG9ialtrZXldKSkge1xuICAgICAgICAgIHJlcGxhY2VGcmllbmRseVZhbHVlKG9ialtrZXldLCBjdXJyZW50UGF0aCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIFxuICAgIC8vIEFwcGx5IGZyaWVuZGx5IHJlcGxhY2VtZW50c1xuICAgIHJlcGxhY2VGcmllbmRseVZhbHVlKGZyaWVuZGx5KTtcbiAgICBcbiAgICAvLyBMZWdhY3kgbWFudWFsIHJlcGxhY2VtZW50cyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgIC8vIChUaGVzZSB3aWxsIGJlIHJlbW92ZWQgb25jZSB3ZSBmdWxseSBtaWdyYXRlIHRvIHRlbXBsYXRlIHN5c3RlbSlcbiAgICBpZiAoZnJpZW5kbHkuc3luYykge1xuICAgICAgaWYgKGZyaWVuZGx5LnN5bmMubGFzdF9zeW5jID09PSBcIihub3Qgc2V0KVwiKSB7XG4gICAgICAgIGZyaWVuZGx5LnN5bmMubGFzdF9zeW5jID0gXCIobmV2ZXIgc3luY2VkKVwiO1xuICAgICAgfVxuICAgICAgaWYgKGZyaWVuZGx5LnN5bmMucmVtb3RlX3VybCA9PT0gXCIobm90IHNldClcIikge1xuICAgICAgICBmcmllbmRseS5zeW5jLnJlbW90ZV91cmwgPSBcIihubyByZW1vdGUgcmVwb3NpdG9yeSlcIjtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gRGlzcGxheSBzZXR0aW5nc1xuICAgIGlmIChmcmllbmRseS5kaXNwbGF5KSB7XG4gICAgICAvLyBUaGVzZSBhcmUgdHlwaWNhbGx5IGJvb2xlYW5zLCBidXQgaGFuZGxlIG51bGxzIGp1c3QgaW4gY2FzZVxuICAgICAgaWYgKGZyaWVuZGx5LmRpc3BsYXkuc2hvd19wZXJzb25hX2luZGljYXRvciA9PT0gbnVsbCkge1xuICAgICAgICBmcmllbmRseS5kaXNwbGF5LnNob3dfcGVyc29uYV9pbmRpY2F0b3IgPSB0cnVlOyAvLyBEZWZhdWx0IHZhbHVlXG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIENvbGxlY3Rpb24gc2V0dGluZ3NcbiAgICBpZiAoZnJpZW5kbHkuY29sbGVjdGlvbikge1xuICAgICAgaWYgKGZyaWVuZGx5LmNvbGxlY3Rpb24uYXV0b19zdWJtaXQgPT09IG51bGwpIHtcbiAgICAgICAgZnJpZW5kbHkuY29sbGVjdGlvbi5hdXRvX3N1Ym1pdCA9IGZhbHNlOyAvLyBEZWZhdWx0IHZhbHVlXG4gICAgICB9XG4gICAgICBpZiAoZnJpZW5kbHkuY29sbGVjdGlvbi5sYXN0X2NhY2hlX3VwZGF0ZSA9PT0gbnVsbCkge1xuICAgICAgICBmcmllbmRseS5jb2xsZWN0aW9uLmxhc3RfY2FjaGVfdXBkYXRlID0gXCIoY2FjaGUgbm90IGluaXRpYWxpemVkKVwiO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICAvLyBXaXphcmQgc2V0dGluZ3MgLSBzaG93IGZyaWVuZGx5IHN0YXR1c1xuICAgIGlmIChmcmllbmRseS53aXphcmQpIHtcbiAgICAgIGlmIChmcmllbmRseS53aXphcmQuY29tcGxldGVkID09PSBmYWxzZSAmJiBmcmllbmRseS53aXphcmQuZGlzbWlzc2VkID09PSBmYWxzZSkge1xuICAgICAgICBmcmllbmRseS53aXphcmQuX3N0YXR1cyA9IFwi4o+zIFJlYWR5IHRvIHJ1biAobm90IGNvbXBsZXRlZClcIjtcbiAgICAgIH0gZWxzZSBpZiAoZnJpZW5kbHkud2l6YXJkLmNvbXBsZXRlZCA9PT0gdHJ1ZSkge1xuICAgICAgICBmcmllbmRseS53aXphcmQuX3N0YXR1cyA9IFwi4pyFIENvbXBsZXRlZFwiO1xuICAgICAgfSBlbHNlIGlmIChmcmllbmRseS53aXphcmQuZGlzbWlzc2VkID09PSB0cnVlKSB7XG4gICAgICAgIGZyaWVuZGx5LndpemFyZC5fc3RhdHVzID0gXCLij63vuI8gRGlzbWlzc2VkXCI7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBmcmllbmRseTtcbiAgfVxufSJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAkBA,OAAO,EAA8D,KAAK,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAgBhI,OAAO,EAAe,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAwC9D,qBAAa,kBAAmB,YAAW,YAAY;IACrD,OAAO,CAAC,MAAM,CAAS;IAChB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,qBAAqB,CAA8B;IAC3D,OAAO,CAAC,QAAQ,CAA4B;IAC5C,OAAO,CAAC,eAAe,CAA0C;IACjE,OAAO,CAAC,gBAAgB,CAA+B;IACvD,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,sBAAsB,CAAyB;IACvD,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,eAAe,CAAC,CAAkB;IAC1C,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,oBAAoB,CAAuB;IACnD,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,aAAa,CAAgB;;YA0EvB,mBAAmB;IA+BjC;;;;OAIG;YACW,sBAAsB;IAqBpC;;;OAGG;YACW,iBAAiB;IA0B/B;;OAEG;YACW,yBAAyB;IAqBvC,OAAO,CAAC,mBAAmB;IAkB3B;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IA2B5B;;;;;;OAMG;YACW,mBAAmB;IAmCjC;;;OAGG;IAEH;;;OAGG;IACH,OAAO,CAAC,gBAAgB;YAuBV,YAAY;IAsGpB,YAAY;;;;;;IA4CZ,eAAe,CAAC,iBAAiB,EAAE,MAAM;;;;;;IAmCzC,gBAAgB;;;;;;IAuChB,iBAAiB;;;;;;IAiBjB,iBAAiB,CAAC,iBAAiB,EAAE,MAAM;;;;;;IA0C3C,cAAc;;;;;;IAcd,YAAY,CAAC,IAAI,EAAE,MAAM;;;;;;IAmIzB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;;;;;;IA6H1C,iBAAiB,CAAC,IAAI,EAAE,MAAM;;;;;;IAgH9B,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;;;;;;IAuG5C,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;;;;;;IAyL5C,cAAc,CAAC,IAAI,EAAE,MAAM;;;;;;IAyE3B,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;;;;;;IAqB3D,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;;;;;;IAoCvC,aAAa,CAAC,IAAI,EAAE;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KAAC;;;;;;IA6IvH,WAAW,CAAC,IAAI,EAAE;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,CAAA;KAAC;;;;;;IAoT7H,eAAe,CAAC,IAAI,EAAE;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAC;;;;;;IAmHpE,aAAa,CAAC,IAAI,EAAE;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAA;KAAC;;;;;;IA8WtE,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM;;;;;;IA+DhD,gBAAgB,CAAC,KAAK,EAAE,MAAM;;;;;;IA6B9B,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,GAAQ;;;;;;IAsCzD,oBAAoB,CAAC,IAAI,EAAE,MAAM;;;;;;IA0BjC,cAAc,CAAC,SAAS,EAAE,MAAM;;;;;;IA+ChC,aAAa,CAAC,iBAAiB,EAAE,MAAM;;;;;;IA4QvC,wBAAwB;;;;;;IAiGxB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;;;;;;IA8DhD,eAAe;;;;;;IAuCf,iBAAiB;;;;;;IAwBvB,OAAO,CAAC,4BAA4B;IAK9B,eAAe;;;;;;IAgNf,eAAe;;;;;;IAgGf,oBAAoB,CAAC,OAAO,GAAE,OAAe;;;;;;YAuGrC,sBAAsB;IAyF9B,eAAe;;;;;;IA8Bf,cAAc,CAAC,SAAS,CAAC,EAAE,MAAM;;;;;;IA2GjC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;;;;;;IAsRxF,WAAW,CAAC,iBAAiB,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;;;;;;IA0NnE,eAAe,CAAC,iBAAiB,EAAE,MAAM;;;;;;IA8J/C;;OAEG;IACG,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC;;;;;;IAwGzD;;OAEG;IACG,6BAA6B,CAAC,UAAU,EAAE,OAAO;;;;;;IAkCjD,6BAA6B;;;;;;IAqB7B,kBAAkB;;;;;;IA4DxB;;OAEG;IACG,aAAa,CAAC,WAAW,EAAE,MAAM;;;;;;IAqCvC;;OAEG;IACG,iBAAiB,CAAC,eAAe,UAAO;;;;;;IAuB9C;;OAEG;IACG,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,UAAQ;;;;;;IAyCrD;;OAEG;IAEH;;OAEG;IACG,eAAe,CAAC,QAAQ,CAAC,EAAE,MAAM;;;;;;IA4GvC;;OAEG;IACG,aAAa,CAAC,OAAO,EAAE;QAAC,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAC;;;;;;IA+D/F;;OAEG;IACG,eAAe,CAAC,OAAO,EAAE;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAC;;;;;;IAmD9H;;OAEG;IACG,aAAa,CAAC,OAAO,EAAE;QAC3B,SAAS,EAAE,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,OAAO,CAAC;QACf,MAAM,EAAE,OAAO,CAAC;QAChB,gBAAgB,CAAC,EAAE,OAAO,CAAC;KAC5B;IAgWD;;OAEG;IACG,qBAAqB,CAAC,OAAO,EAAE,GAAG;;;;;;IAMxC;;OAEG;IACG,mBAAmB,CAAC,OAAO,EAAE,GAAG;;;;;;IAMtC;;;OAGG;IACG,eAAe,CAAC,OAAO,EAAE;QAC7B,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,mBAAmB,CAAC,EAAE,OAAO,CAAC;KAC/B;;;;;;IAuHD;;;OAGG;IACG,SAAS,CAAC,OAAO,EAAE;QACvB,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB;;;;;;IAiJD;;OAEG;IACG,mBAAmB,CAAC,OAAO,EAAE;QACjC,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;KACnB;;;;;;IAID;;OAEG;IACG,uBAAuB,CAAC,OAAO,EAAE;QACrC,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;KAC9B;;;;;;IAID;;OAEG;IACG,YAAY,CAAC,OAAO,EAAE;QAC1B,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;KACf;;;;;;IAID;;OAEG;IACG,oBAAoB;;;;;;IAI1B;;OAEG;IACH,OAAO,CAAC,aAAa;IASrB;;OAEG;IACH,OAAO,CAAC,cAAc;IAYtB;;OAEG;YACW,kBAAkB;IAqBhC;;OAEG;YACW,eAAe;IAoE7B;;;OAGG;YACW,iBAAiB;IA8HzB,GAAG;CAkDV"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}