@dollhousemcp/mcp-server 1.7.2 → 1.7.4

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 (88) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md.backup +0 -8
  3. package/dist/auth/GitHubAuthManager.js +2 -2
  4. package/dist/config/ConfigManager.d.ts +158 -25
  5. package/dist/config/ConfigManager.d.ts.map +1 -1
  6. package/dist/config/ConfigManager.js +627 -88
  7. package/dist/config/ConfigWizard.d.ts +78 -0
  8. package/dist/config/ConfigWizard.d.ts.map +1 -0
  9. package/dist/config/ConfigWizard.js +370 -0
  10. package/dist/config/ConfigWizardCheck.d.ts +47 -0
  11. package/dist/config/ConfigWizardCheck.d.ts.map +1 -0
  12. package/dist/config/ConfigWizardCheck.js +208 -0
  13. package/dist/config/ConfigWizardDisplay.d.ts +64 -0
  14. package/dist/config/ConfigWizardDisplay.d.ts.map +1 -0
  15. package/dist/config/ConfigWizardDisplay.js +150 -0
  16. package/dist/config/WizardFirstResponse.d.ts +25 -0
  17. package/dist/config/WizardFirstResponse.d.ts.map +1 -0
  18. package/dist/config/WizardFirstResponse.js +118 -0
  19. package/dist/config/portfolioConfig.d.ts +40 -0
  20. package/dist/config/portfolioConfig.d.ts.map +1 -0
  21. package/dist/config/portfolioConfig.js +58 -0
  22. package/dist/config/wizardTemplates.d.ts +84 -0
  23. package/dist/config/wizardTemplates.d.ts.map +1 -0
  24. package/dist/config/wizardTemplates.js +195 -0
  25. package/dist/elements/BaseElement.d.ts +15 -0
  26. package/dist/elements/BaseElement.d.ts.map +1 -1
  27. package/dist/elements/BaseElement.js +38 -5
  28. package/dist/generated/version.d.ts +2 -2
  29. package/dist/generated/version.js +3 -3
  30. package/dist/handlers/ConfigHandler.d.ts +32 -0
  31. package/dist/handlers/ConfigHandler.d.ts.map +1 -0
  32. package/dist/handlers/ConfigHandler.js +202 -0
  33. package/dist/handlers/PortfolioPullHandler.d.ts +69 -0
  34. package/dist/handlers/PortfolioPullHandler.d.ts.map +1 -0
  35. package/dist/handlers/PortfolioPullHandler.js +340 -0
  36. package/dist/handlers/SyncHandlerV2.d.ts +42 -0
  37. package/dist/handlers/SyncHandlerV2.d.ts.map +1 -0
  38. package/dist/handlers/SyncHandlerV2.js +231 -0
  39. package/dist/index.d.ts +18 -0
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +19 -3
  42. package/dist/portfolio/GitHubPortfolioIndexer.d.ts +0 -1
  43. package/dist/portfolio/GitHubPortfolioIndexer.d.ts.map +1 -1
  44. package/dist/portfolio/GitHubPortfolioIndexer.js +36 -16
  45. package/dist/portfolio/PortfolioRepoManager.d.ts +2 -1
  46. package/dist/portfolio/PortfolioRepoManager.d.ts.map +1 -1
  47. package/dist/portfolio/PortfolioRepoManager.js +2 -1
  48. package/dist/portfolio/PortfolioSyncManager.d.ts +127 -0
  49. package/dist/portfolio/PortfolioSyncManager.d.ts.map +1 -0
  50. package/dist/portfolio/PortfolioSyncManager.js +818 -0
  51. package/dist/scripts/scripts/run-config-wizard.js +57 -0
  52. package/dist/scripts/src/config/ConfigManager.js +799 -0
  53. package/dist/scripts/src/config/ConfigWizard.js +368 -0
  54. package/dist/scripts/src/errors/SecurityError.js +47 -0
  55. package/dist/scripts/src/security/constants.js +28 -0
  56. package/dist/scripts/src/security/contentValidator.js +415 -0
  57. package/dist/scripts/src/security/errors.js +32 -0
  58. package/dist/scripts/src/security/regexValidator.js +217 -0
  59. package/dist/scripts/src/security/secureYamlParser.js +272 -0
  60. package/dist/scripts/src/security/securityMonitor.js +111 -0
  61. package/dist/scripts/src/security/validators/unicodeValidator.js +315 -0
  62. package/dist/scripts/src/utils/logger.js +288 -0
  63. package/dist/security/audit/config/suppressions.d.ts.map +1 -1
  64. package/dist/security/audit/config/suppressions.js +54 -2
  65. package/dist/security/secureYamlParser.d.ts +46 -2
  66. package/dist/security/secureYamlParser.d.ts.map +1 -1
  67. package/dist/security/secureYamlParser.js +47 -3
  68. package/dist/server/ServerSetup.d.ts.map +1 -1
  69. package/dist/server/ServerSetup.js +16 -10
  70. package/dist/server/tools/ConfigToolsV2.d.ts +10 -0
  71. package/dist/server/tools/ConfigToolsV2.d.ts.map +1 -0
  72. package/dist/server/tools/ConfigToolsV2.js +110 -0
  73. package/dist/server/types.d.ts +2 -0
  74. package/dist/server/types.d.ts.map +1 -1
  75. package/dist/server/types.js +1 -1
  76. package/dist/sync/PortfolioDownloader.d.ts +27 -0
  77. package/dist/sync/PortfolioDownloader.d.ts.map +1 -0
  78. package/dist/sync/PortfolioDownloader.js +120 -0
  79. package/dist/sync/PortfolioSyncComparer.d.ts +50 -0
  80. package/dist/sync/PortfolioSyncComparer.d.ts.map +1 -0
  81. package/dist/sync/PortfolioSyncComparer.js +158 -0
  82. package/dist/tools/getWelcomeMessage.d.ts +41 -0
  83. package/dist/tools/getWelcomeMessage.d.ts.map +1 -0
  84. package/dist/tools/getWelcomeMessage.js +109 -0
  85. package/dist/utils/TemplateRenderer.d.ts +63 -0
  86. package/dist/utils/TemplateRenderer.d.ts.map +1 -0
  87. package/dist/utils/TemplateRenderer.js +154 -0
  88. package/package.json +1 -1
@@ -117,6 +117,19 @@ export const suppressions = [
117
117
  file: 'src/tools/portfolio/submitToPortfolioTool.ts',
118
118
  reason: 'False positive - Uses SecureYamlParser.parse() which is the secure implementation designed to prevent YAML vulnerabilities'
119
119
  },
120
+ {
121
+ rule: 'DMCP-SEC-005',
122
+ file: 'src/config/ConfigManager.ts',
123
+ reason: 'INTENTIONAL: Uses js-yaml with FAILSAFE_SCHEMA for pure YAML config files. This prevents code execution and is the appropriate security measure for config files that are NOT markdown with frontmatter. Regression test ensures we do not use SecureYamlParser here which would reset config values.'
124
+ },
125
+ // ========================================
126
+ // Clear-text Logging False Positives
127
+ // ========================================
128
+ {
129
+ rule: 'DMCP-SEC-010',
130
+ file: 'src/utils/logger.ts',
131
+ reason: 'FALSE POSITIVE: The logger already sanitizes all sensitive data through sanitizeMessage() and sanitizeObject() methods. All sensitive fields (tokens, keys, passwords, etc.) are replaced with [REDACTED] before any console output. Lines 288, 291, and 295 only log pre-sanitized safe messages.'
132
+ },
120
133
  // ========================================
121
134
  // Security Rule Definition Files
122
135
  // ========================================
@@ -246,6 +259,31 @@ export const suppressions = [
246
259
  file: 'src/services/BuildInfoService.ts',
247
260
  reason: 'BuildInfoService only processes system information (package.json, git commands, Docker runtime) - the MCP tool takes no parameters and no user input flows through this service'
248
261
  },
262
+ {
263
+ rule: 'DMCP-SEC-004',
264
+ file: 'src/handlers/SyncHandlerV2.ts',
265
+ reason: 'SyncHandlerV2 receives already-normalized input from the MCP request layer. All user input is normalized in ServerSetup before reaching handlers.'
266
+ },
267
+ {
268
+ rule: 'DMCP-SEC-004',
269
+ file: 'src/handlers/ConfigHandler.ts',
270
+ reason: 'ConfigHandler receives already-normalized input from the MCP request layer. All user input is normalized in ServerSetup before reaching handlers.'
271
+ },
272
+ {
273
+ rule: 'DMCP-SEC-004',
274
+ file: 'test-sync-operations.js',
275
+ reason: 'Test utility file for development testing. Does not process production user input.'
276
+ },
277
+ {
278
+ rule: 'DMCP-SEC-004',
279
+ file: '**/test-sync-operations.js',
280
+ reason: 'Test utility file for development testing. Does not process production user input.'
281
+ },
282
+ {
283
+ rule: 'DMCP-SEC-004',
284
+ file: 'test-*.js',
285
+ reason: 'Test utility files in root directory for development testing. Do not process production user input.'
286
+ },
249
287
  // ========================================
250
288
  // Audit Logging False Positives
251
289
  // ========================================
@@ -334,6 +372,21 @@ export const suppressions = [
334
372
  file: 'scripts/**/*',
335
373
  reason: 'Build scripts do not perform runtime security operations'
336
374
  },
375
+ {
376
+ rule: 'DMCP-SEC-006',
377
+ file: 'src/portfolio/PortfolioSyncManager.ts',
378
+ reason: 'Portfolio sync operations are file management tasks, not security operations. Security validation happens at the MCP request layer.'
379
+ },
380
+ {
381
+ rule: 'DMCP-SEC-006',
382
+ file: 'src/handlers/SyncHandlerV2.ts',
383
+ reason: 'Sync handler delegates to PortfolioSyncManager which handles its own logging. Security validation happens at the MCP request layer.'
384
+ },
385
+ {
386
+ rule: 'DMCP-SEC-006',
387
+ file: 'src/handlers/ConfigHandler.ts',
388
+ reason: 'Config handler operations are configuration management, not security operations. ConfigManager handles its own logging.'
389
+ },
337
390
  // ========================================
338
391
  // Coverage Report Files
339
392
  // ========================================
@@ -556,7 +609,6 @@ export function shouldSuppress(ruleId, filePath) {
556
609
  const normalizedPath = normalizePath(filePath);
557
610
  const relativePath = getRelativePath(normalizedPath);
558
611
  // Check cache first
559
- const cacheKey = `${ruleId}::${relativePath}`;
560
612
  const cached = cache.get(ruleId, relativePath);
561
613
  if (cached !== undefined)
562
614
  return cached;
@@ -623,4 +675,4 @@ const validationErrors = validateSuppressions();
623
675
  if (validationErrors.length > 0) {
624
676
  logger.warn('Suppression configuration warnings:', validationErrors);
625
677
  }
626
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwcHJlc3Npb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3NlY3VyaXR5L2F1ZGl0L2NvbmZpZy9zdXBwcmVzc2lvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFHSCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFRbEQ7O0dBRUc7QUFDSCxNQUFNLGdCQUFnQjtJQUNaLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBbUIsQ0FBQztJQUNuQyxVQUFVLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7SUFFL0MsS0FBSztRQUNILElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsV0FBVyxDQUFDLE1BQWMsRUFBRSxRQUFnQjtRQUMxQyxPQUFPLEdBQUcsTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxHQUFHLENBQUMsTUFBYyxFQUFFLFFBQWdCO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsR0FBRyxDQUFDLE1BQWMsRUFBRSxRQUFnQixFQUFFLEtBQWM7UUFDbEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELFFBQVEsQ0FBQyxPQUFlO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELFFBQVEsQ0FBQyxPQUFlLEVBQUUsS0FBYTtRQUNyQyxJQUFJLENB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Q0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQjtJQUNuQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDaEIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQjtJQUtqQyxNQUFNLEtBQUssR0FBRztRQUNaLEtBQUssRUFBRSxZQUFZLENBQUMsTUFBTTtRQUMxQixNQUFNLEVBQUUsRUFBNEI7UUFDcEMsVUFBVSxFQUFFLEVBQTRCO0tBQ3pDLENBQUM7SUFFRixLQUFLLE1BQU0sV0FBVyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3ZDLGdCQUFnQjtRQUNoQixLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUUzRSwrQ0FBK0M7UUFDL0MsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEQsS0FBSyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCx1Q0FBdUM7QUFDdkMsTUFBTSxnQkFBZ0IsR0FBRyxvQkFBb0IsRUFBRSxDQUFDO0FBQ2hELElBQUksZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ2hDLE1BQU0sQ0FBQyxJQUFJLENBQUMscUNBQXFDLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztBQUN2RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTZWN1cml0eSBBdWRpdCBTdXBwcmVzc2lvbiBDb25maWd1cmF0aW9uXG4gKiBcbiAqIFRoaXMgZmlsZSBjb250YWlucyBzdXBwcmVzc2lvbiBydWxlcyBmb3IgZmFsc2UgcG9zaXRpdmVzIGluIHRoZSBzZWN1cml0eSBhdWRpdC5cbiAqIEVhY2ggc3VwcHJlc3Npb24gc2hvdWxkIGJlIHdlbGwtZG9jdW1lbnRlZCB3aXRoIGEgY2xlYXIgcmVhc29uLlxuICovXG5cbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi8uLi91dGlscy9sb2dnZXIuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN1cHByZXNzaW9uIHtcbiAgcnVsZTogc3RyaW5nO1xuICBmaWxlPzogc3RyaW5nO1xuICByZWFzb246IHN0cmluZztcbn1cblxuLyoqXG4gKiBTdXBwcmVzc2lvbiBjYWNoZSBmb3IgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uXG4gKi9cbmNsYXNzIFN1cHByZXNzaW9uQ2FjaGUge1xuICBwcml2YXRlIGNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIGJvb2xlYW4+KCk7XG4gIHByaXZhdGUgcmVnZXhDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBSZWdFeHA+KCk7XG4gIFxuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLmNhY2hlLmNsZWFyKCk7XG4gICAgdGhpcy5yZWdleENhY2hlLmNsZWFyKCk7XG4gIH1cbiAgXG4gIGdldENhY2hlS2V5KHJ1bGVJZDogc3RyaW5nLCBmaWxlUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7cnVsZUlkfTo6JHtmaWxlUGF0aH1gO1xuICB9XG4gIFxuICBnZXQocnVsZUlkOiBzdHJpbmcsIGZpbGVQYXRoOiBzdHJpbmcpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5jYWNoZS5nZXQodGhpcy5nZXRDYWNoZUtleShydWxlSWQsIGZpbGVQYXRoKSk7XG4gIH1cbiAgXG4gIHNldChydWxlSWQ6IHN0cmluZywgZmlsZVBhdGg6IHN0cmluZywgdmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmNhY2hlLnNldCh0aGlzLmdldENhY2hlS2V5KHJ1bGVJZCwgZmlsZVBhdGgpLCB2YWx1ZSk7XG4gIH1cbiAgXG4gIGdldFJlZ2V4KHBhdHRlcm46IHN0cmluZyk6IFJlZ0V4cCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucmVnZXhDYWNoZS5nZXQocGF0dGVybik7XG4gIH1cbiAgXG4gIHNldFJlZ2V4KHBhdHRlcm46IHN0cmluZywgcmVnZXg6IFJlZ0V4cCk6IHZvaWQge1xuICAgIHRoaXMucmVnZXhDYWNoZS5zZXQocGF0dGVybiwgcmVnZXgpO1xuICB9XG59XG5cbmNvbnN0IGNhY2hlID0gbmV3IFN1cHByZXNzaW9uQ2FjaGUoKTtcblxuZXhwb3J0IGNvbnN0IHN1cHByZXNzaW9uczogU3VwcHJlc3Npb25bXSA9IFtcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBTUUwgSW5qZWN0aW9uIEZhbHNlIFBvc2l0aXZlc1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHtcbiAgICBydWxlOiAnQ1dFLTg5LTAwMScsXG4gICAgZmlsZTogJ3NyYy91cGRhdGUvVXBkYXRlTWFuYWdlci50cycsXG4gICAgcmVhc29uOiAnRmFsc2UgcG9zaXRpdmUgLSBcIlVwZGF0ZSBGYWlsZWRcIiBpcyBhIFVJIG1lc3NhZ2UsIG5vdCBTUUwuIFRoZSBjb2RlYmFzZSBkb2VzIG5vdCB1c2UgU1FMLidcbiAgfSxcbiAgXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gVGVzdCBGaWxlIFN1cHByZXNzaW9uc1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHtcbiAgICBydWxlOiAnKicsXG4gICAgZmlsZTogJ19fdGVzdHNfXy8qKi8qJyxcbiAgICByZWFzb246ICdUZXN0IGZpbGVzIG1heSBjb250YWluIGludGVudGlvbmFsIHNlY3VyaXR5IHBhdHRlcm5zIGZvciB0ZXN0aW5nJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJyonLFxuICAgIGZpbGU6ICcqKi8qLnRlc3QudHMnLFxuICAgIHJlYXNvbjogJ1Rlc3QgZmlsZXMgbWF5IGNvbnRhaW4gaW50ZW50aW9uYWwgc2VjdXJpdHkgcGF0dGVybnMgZm9yIHRlc3RpbmcnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnKicsXG4gICAgZmlsZTogJyoqLyouc3BlYy50cycsXG4gICAgcmVhc29uOiAnVGVzdCBmaWxlcyBtYXkgY29udGFpbiBpbnRlbnRpb25hbCBzZWN1cml0eSBwYXR0ZXJucyBmb3IgdGVzdGluZydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICd0ZXN0LyoqLyonLFxuICAgIHJlYXNvbjogJ1Rlc3QgdXRpbGl0aWVzIGFuZCBFMkUgdGVzdHMgZG8gbm90IHByb2Nlc3MgdW50cnVzdGVkIHVzZXIgaW5wdXQnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAndGVzdC8qKi8qJyxcbiAgICByZWFzb246ICdBdWRpdCBsb2dnaW5nIG5vdCByZXF1aXJlZCBmb3IgdGVzdCB1dGlsaXRpZXMgYW5kIEUyRSB0ZXN0cydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdPV0FTUC1BMDMtMDAzJyxcbiAgICBmaWxlOiAndGVzdC9lMmUvY2xlYW51cC10ZXN0LWRhdGEudHMnLFxuICAgIHJlYXNvbjogJ0ZhbHNlIHBvc2l0aXZlIC0gY29uc29sZS5sb2cgbWVzc2FnZSBzdHJpbmcgbGl0ZXJhbCwgbm90IGEgcGF0aCBvcGVyYXRpb24nXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnT1dBU1AtQTAxLTAwMScsXG4gICAgZmlsZTogJ19fdGVzdHNfXy8qKi8qJyxcbiAgICByZWFzb246ICdUZXN0IGZpbGVzIHVzZSBmYWtlIHRva2VucyBhbmQgc2VjcmV0cyBmb3IgdGVzdGluZyBzZWN1cml0eSBmZWF0dXJlcydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdDV0UtODktMDAxJyxcbiAgICBmaWxlOiAnX190ZXN0c19fLyoqLyonLFxuICAgIHJlYXNvbjogJ1Rlc3QgZmlsZXMgY29udGFpbiBTUUwgaW5qZWN0aW9uIHBhdHRlcm5zIGZvciBzZWN1cml0eSB0ZXN0aW5nJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ09XQVNQLUEwMy0wMDInLFxuICAgIGZpbGU6ICdfX3Rlc3RzX18vKiovKicsXG4gICAgcmVhc29uOiAnVGVzdCBmaWxlcyBjb250YWluIGNvbW1hbmQgaW5qZWN0aW9uIHBhdHRlcm5zIGZvciBzZWN1cml0eSB0ZXN0aW5nJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ09XQVNQLUEwMy0wMDMnLFxuICAgIGZpbGU6ICdfX3Rlc3RzX18vKiovKicsXG4gICAgcmVhc29uOiAnVGVzdCBmaWxlcyBjb250YWluIHBhdGggdHJhdmVyc2FsIHBhdHRlcm5zIGZvciBzZWN1cml0eSB0ZXN0aW5nJ1xuICB9LFxuICBcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBZQU1MIFBhcnNpbmcgRmFsc2UgUG9zaXRpdmVzXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDUnLFxuICAgIGZpbGU6ICdzcmMvc2VjdXJpdHkveWFtbFZhbGlkYXRvci50cycsXG4gICAgcmVhc29uOiAnWWFtbFZhbGlkYXRvciBpcyB0aGUgc2VjdXJpdHkgdmFsaWRhdGlvbiBsYXllciBpdHNlbGYgLSBpdCBuZWVkcyBkaXJlY3QgeWFtbC5sb2FkIGFjY2VzcydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDUnLFxuICAgIGZpbGU6ICdzcmMvc2VjdXJpdHkvc2VjdXJlWWFtbFBhcnNlci50cycsXG4gICAgcmVhc29uOiAnU2VjdXJlWWFtbFBhcnNlciBpcyB0aGUgc2VjdXJpdHkgd3JhcHBlciB0aGF0IHZhbGlkYXRlcyBZQU1MIGJlZm9yZSBwYXJzaW5nJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNScsXG4gICAgZmlsZTogJ3NyYy9lbGVtZW50cy9za2lsbHMvU2tpbGxNYW5hZ2VyLnRzJyxcbiAgICByZWFzb246ICdVc2VzIHlhbWwubG9hZCB3aXRoIEZBSUxTQUZFX1NDSEVNQSBhbmQgc2l6ZSB2YWxpZGF0aW9uIC0gZXF1aXZhbGVudCBzZWN1cml0eSB0byBTZWN1cmVZYW1sUGFyc2VyIGZvciByYXcgWUFNTCBpbXBvcnQnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA1JyxcbiAgICBmaWxlOiAnc3JjL3Rvb2xzL3BvcnRmb2xpby9zdWJtaXRUb1BvcnRmb2xpb1Rvb2wudHMnLFxuICAgIHJlYXNvbjogJ0ZhbHNlIHBvc2l0aXZlIC0gVXNlcyBTZWN1cmVZYW1sUGFyc2VyLnBhcnNlKCkgd2hpY2ggaXMgdGhlIHNlY3VyZSBpbXBsZW1lbnRhdGlvbiBkZXNpZ25lZCB0byBwcmV2ZW50IFlBTUwgdnVsbmVyYWJpbGl0aWVzJ1xuICB9LFxuICBcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBTZWN1cml0eSBSdWxlIERlZmluaXRpb24gRmlsZXNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB7XG4gICAgcnVsZTogJ09XQVNQLUEwMy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvc2VjdXJpdHkvYXVkaXQvcnVsZXMvU2VjdXJpdHlSdWxlcy50cycsXG4gICAgcmVhc29uOiAnVGhpcyBpcyBhIHJlZ2V4IHBhdHRlcm4gZGVmaW5pdGlvbiBmb3IgZGV0ZWN0aW5nIGlubmVySFRNTCB1c2FnZSwgbm90IGFjdHVhbCB1c2FnZSdcbiAgfSxcbiAgXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUGVyc29uYSBMb2FkaW5nIEZhbHNlIFBvc2l0aXZlc1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDAxJyxcbiAgICBmaWxlOiAnc3JjL3BlcnNvbmEvUGVyc29uYUxvYWRlci50cycsXG4gICAgcmVhc29uOiAnUGVyc29uYUxvYWRlciB2YWxpZGF0ZXMgcGVyc29uYXMgdGhyb3VnaCBTZWN1cmVZYW1sUGFyc2VyIGFuZCBDb250ZW50VmFsaWRhdG9yJ1xuICB9LFxuICBcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBVbmljb2RlIE5vcm1hbGl6YXRpb24gRmFsc2UgUG9zaXRpdmVzXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvdHlwZXMvKi50cycsXG4gICAgcmVhc29uOiAnVHlwZSBkZWZpbml0aW9uIGZpbGVzIGRvIG5vdCBwcm9jZXNzIHVzZXIgaW5wdXQnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL3R5cGVzL2VsZW1lbnRzLyoudHMnLFxuICAgIHJlYXNvbjogJ0VsZW1lbnQgaW50ZXJmYWNlIGZpbGVzIGFyZSB0eXBlIGRlZmluaXRpb25zIHRoYXQgZG8gbm90IHByb2Nlc3MgdXNlciBpbnB1dCdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvZXJyb3JzLyoudHMnLFxuICAgIHJlYXNvbjogJ0Vycm9yIGNsYXNzZXMgZG8gbm90IHByb2Nlc3MgdXNlciBpbnB1dCdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvY29uZmlnLyoudHMnLFxuICAgIHJlYXNvbjogJ0NvbmZpZ3VyYXRpb24gZmlsZXMgZG8gbm90IHByb2Nlc3MgdXNlciBpbnB1dCBkaXJlY3RseSdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvY29uc3RhbnRzLyoudHMnLFxuICAgIHJlYXNvbjogJ0NvbnN0YW50IGRlZmluaXRpb24gZmlsZXMgZG8gbm90IHByb2Nlc3MgdXNlciBpbnB1dCdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvdXRpbHMvdmVyc2lvbi50cycsXG4gICAgcmVhc29uOiAnVmVyc2lvbiB1dGlsaXR5IG9ubHkgaGFuZGxlcyBpbnRlcm5hbCB2ZXJzaW9uIHN0cmluZ3MsIG5vdCB1c2VyIGlucHV0J1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJ3NyYy9jYWNoZS8qLnRzJyxcbiAgICByZWFzb246ICdDYWNoZSBsYXllciByZWNlaXZlcyBhbHJlYWR5LW5vcm1hbGl6ZWQgaW5wdXQnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL3NlY3VyaXR5LyoqLyoudHMnLFxuICAgIHJlYXNvbjogJ1NlY3VyaXR5IG1vZHVsZXMgaGFuZGxlIHZhbGlkYXRpb24gYW5kIG5vcm1hbGl6YXRpb24gdGhlbXNlbHZlcydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvaW5kZXgudHMnLFxuICAgIHJlYXNvbjogJ01haW4gZW50cnkgcG9pbnQgZGVsZWdhdGVzIHRvIFNlcnZlclNldHVwIHdoaWNoIG5vcm1hbGl6ZXMgYWxsIGlucHV0cydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvc2VydmVyL1NlcnZlclNldHVwLnRzJyxcbiAgICByZWFzb246ICdUaGlzIGlzIHdoZXJlIFVuaWNvZGUgbm9ybWFsaXphdGlvbiBpcyBpbXBsZW1lbnRlZCBmb3IgYWxsIHRvb2wgaW5wdXRzJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJ3NyYy9jb2xsZWN0aW9uLyoudHMnLFxuICAgIHJlYXNvbjogJ01hcmtldHBsYWNlIG1vZHVsZXMgcmVjZWl2ZSBub3JtYWxpemVkIGlucHV0IGZyb20gdG9vbCBoYW5kbGVycydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvY29sbGVjdGlvbi8qKi8qLnRzJyxcbiAgICByZWFzb246ICdNYXJrZXRwbGFjZSBtb2R1bGVzIHJlY2VpdmUgbm9ybWFsaXplZCBpbnB1dCBmcm9tIHRvb2wgaGFuZGxlcnMnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL3BlcnNvbmEvKi50cycsXG4gICAgcmVhc29uOiAnUGVyc29uYSBtb2R1bGVzIHJlY2VpdmUgbm9ybWFsaXplZCBpbnB1dCBmcm9tIHRvb2wgaGFuZGxlcnMnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL3BlcnNvbmEvKiovKi50cycsXG4gICAgcmVhc29uOiAnUGVyc29uYSBtb2R1bGVzIHJlY2VpdmUgbm9ybWFsaXplZCBpbnB1dCBmcm9tIHRvb2wgaGFuZGxlcnMnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL3VwZGF0ZS8qLnRzJyxcbiAgICByZWFzb246ICdVcGRhdGUgbW9kdWxlcyByZWNlaXZlIG5vcm1hbGl6ZWQgaW5wdXQgZnJvbSB0b29sIGhhbmRsZXJzJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJ3NyYy90b29scy8qLnRzJyxcbiAgICByZWFzb246ICdUb29sIGZpbGVzIHJlY2VpdmUgbm9ybWFsaXplZCBpbnB1dCBmcm9tIFNlcnZlclNldHVwJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJ3NyYy9zZXJ2ZXIvdHlwZXMudHMnLFxuICAgIHJlYXNvbjogJ1R5cGUgZGVmaW5pdGlvbiBmaWxlIGRvZXMgbm90IHByb2Nlc3MgdXNlciBpbnB1dCdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvc2VydmVyL3Rvb2xzLyoudHMnLFxuICAgIHJlYXNvbjogJ1NlcnZlciB0b29scyByZWNlaXZlIG5vcm1hbGl6ZWQgaW5wdXQgZnJvbSBTZXJ2ZXJTZXR1cCdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzY3JpcHRzLyoqLyonLFxuICAgIHJlYXNvbjogJ0J1aWxkIGFuZCB1dGlsaXR5IHNjcmlwdHMgZG8gbm90IHByb2Nlc3MgdXNlciBpbnB1dCdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvdG9vbHMvcG9ydGZvbGlvL3R5cGVzLnRzJyxcbiAgICByZWFzb246ICdUeXBlIGRlZmluaXRpb24gZmlsZSBjb250YWluaW5nIG9ubHkgVHlwZVNjcmlwdCBpbnRlcmZhY2VzIC0gbm8gcnVudGltZSBjb2RlIG9yIHVzZXIgaW5wdXQgcHJvY2Vzc2luZydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvdG9vbHMvKiovdHlwZXMudHMnLFxuICAgIHJlYXNvbjogJ1R5cGUgZGVmaW5pdGlvbiBmaWxlcyBkbyBub3QgcHJvY2VzcyB1c2VyIGlucHV0IC0gY29tcGlsZS10aW1lIG9ubHknXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL3NlcnZpY2VzL0J1aWxkSW5mb1NlcnZpY2UudHMnLFxuICAgIHJlYXNvbjogJ0J1aWxkSW5mb1NlcnZpY2Ugb25seSBwcm9jZXNzZXMgc3lzdGVtIGluZm9ybWF0aW9uIChwYWNrYWdlLmpzb24sIGdpdCBjb21tYW5kcywgRG9ja2VyIHJ1bnRpbWUpIC0gdGhlIE1DUCB0b29sIHRha2VzIG5vIHBhcmFtZXRlcnMgYW5kIG5vIHVzZXIgaW5wdXQgZmxvd3MgdGhyb3VnaCB0aGlzIHNlcnZpY2UnXG4gIH0sXG4gIFxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEF1ZGl0IExvZ2dpbmcgRmFsc2UgUG9zaXRpdmVzXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDYnLFxuICAgIGZpbGU6ICdzcmMvdHlwZXMvKi50cycsXG4gICAgcmVhc29uOiAnVHlwZSBkZWZpbml0aW9uIGZpbGVzIGRvIG5vdCBwZXJmb3JtIHNlY3VyaXR5IG9wZXJhdGlvbnMnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAnc3JjL3R5cGVzL2VsZW1lbnRzLyoudHMnLFxuICAgIHJlYXNvbjogJ0VsZW1lbnQgaW50ZXJmYWNlIGZpbGVzIGFyZSB0eXBlIGRlZmluaXRpb25zIHRoYXQgZG8gbm90IHBlcmZvcm0gc2VjdXJpdHkgb3BlcmF0aW9ucydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDYnLFxuICAgIGZpbGU6ICdzcmMvY29uc3RhbnRzLyoudHMnLFxuICAgIHJlYXNvbjogJ0NvbnN0YW50IGZpbGVzIGRvIG5vdCBwZXJmb3JtIHNlY3VyaXR5IG9wZXJhdGlvbnMnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAnc3JjL2NvbmZpZy8qLnRzJyxcbiAgICByZWFzb246ICdDb25maWd1cmF0aW9uIGZpbGVzIGRvIG5vdCBwZXJmb3JtIHNlY3VyaXR5IG9wZXJhdGlvbnMnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAnc3JjL2Vycm9ycy8qLnRzJyxcbiAgICByZWFzb246ICdFcnJvciBjbGFzc2VzIGFyZSBub3Qgc2VjdXJpdHkgb3BlcmF0aW9ucyByZXF1aXJpbmcgYXVkaXQnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAnKiovKi5qc29uJyxcbiAgICByZWFzb246ICdKU09OIGZpbGVzIGNhbm5vdCBjb250YWluIGV4ZWN1dGFibGUgY29kZSdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDYnLFxuICAgIGZpbGU6ICdzcmMvc2VjdXJpdHkvKiovKi50cycsXG4gICAgcmVhc29uOiAnU2VjdXJpdHkgbW9kdWxlcyBhcmUgaW5mcmFzdHJ1Y3R1cmUsIG5vdCBvcGVyYXRpb25zIHJlcXVpcmluZyBhdWRpdCdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDYnLFxuICAgIGZpbGU6ICdzcmMvY29sbGVjdGlvbi8qLnRzJyxcbiAgICByZWFzb246ICdNYXJrZXRwbGFjZSBvcGVyYXRpb25zIGFyZSBub3Qgc2VjdXJpdHktc2Vuc2l0aXZlIHJlcXVpcmluZyBhdWRpdCdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDYnLFxuICAgIGZpbGU6ICdzcmMvY29sbGVjdGlvbi8qKi8qLnRzJyxcbiAgICByZWFzb246ICdNYXJrZXRwbGFjZSBvcGVyYXRpb25zIGFyZSBub3Qgc2VjdXJpdHktc2Vuc2l0aXZlIHJlcXVpcmluZyBhdWRpdCdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDYnLFxuICAgIGZpbGU6ICdzcmMvcGVyc29uYS8qLnRzJyxcbiAgICByZWFzb246ICdQZXJzb25hIG9wZXJhdGlvbnMgYXJlIHZhbGlkYXRlZCBhdCBlbnRyeSBwb2ludCwgbm90IHNlY3VyaXR5IG9wZXJhdGlvbnMnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAnc3JjL3BlcnNvbmEvKiovKi50cycsXG4gICAgcmVhc29uOiAnUGVyc29uYSBvcGVyYXRpb25zIGFyZSB2YWxpZGF0ZWQgYXQgZW50cnkgcG9pbnQsIG5vdCBzZWN1cml0eSBvcGVyYXRpb25zJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNicsXG4gICAgZmlsZTogJ3NyYy9zZXJ2ZXIvdG9vbHMvKiovKi50cycsXG4gICAgcmVhc29uOiAnVG9vbCBpbXBsZW1lbnRhdGlvbnMgZGVsZWdhdGUgdG8gc2VydmljZXMgdGhhdCBoYW5kbGUgc2VjdXJpdHknXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAnc3JjL2luZGV4LnRzJyxcbiAgICByZWFzb246ICdNYWluIGVudHJ5IHBvaW50IGRlbGVnYXRlcyBzZWN1cml0eSBvcGVyYXRpb25zIHRvIHNwZWNpYWxpemVkIG1vZHVsZXMnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAnc3JjL3V0aWxzLyoudHMnLFxuICAgIHJlYXNvbjogJ1V0aWxpdHkgZnVuY3Rpb25zIGFyZSBub3Qgc2VjdXJpdHkgb3BlcmF0aW9ucyByZXF1aXJpbmcgYXVkaXQnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAnc3JjL3VwZGF0ZS8qKi8qLnRzJyxcbiAgICByZWFzb246ICdVcGRhdGUgc3lzdGVtIGhhcyBpdHMgb3duIGxvZ2dpbmcgYW5kIGlzIG5vdCBhIGRpcmVjdCBzZWN1cml0eSBvcGVyYXRpb24nXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAnc3JjL3NlcnZlci90eXBlcy50cycsXG4gICAgcmVhc29uOiAnVHlwZSBkZWZpbml0aW9uIGZpbGUgZG9lcyBub3QgcGVyZm9ybSBvcGVyYXRpb25zJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNicsXG4gICAgZmlsZTogJ3NjcmlwdHMvKiovKicsXG4gICAgcmVhc29uOiAnQnVpbGQgc2NyaXB0cyBkbyBub3QgcGVyZm9ybSBydW50aW1lIHNlY3VyaXR5IG9wZXJhdGlvbnMnXG4gIH0sXG4gIFxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIENvdmVyYWdlIFJlcG9ydCBGaWxlc1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHtcbiAgICBydWxlOiAnKicsXG4gICAgZmlsZTogJ3Rlc3QvY292ZXJhZ2UvKiovKicsXG4gICAgcmVhc29uOiAnQ292ZXJhZ2UgcmVwb3J0IGZpbGVzIGFyZSBhdXRvLWdlbmVyYXRlZCBhbmQgbm90IHBhcnQgb2YgdGhlIGFwcGxpY2F0aW9uIGNvZGUnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnKicsXG4gICAgZmlsZTogJyoqL2xjb3YtcmVwb3J0LyoqLyonLFxuICAgIHJlYXNvbjogJ0xDT1YgY292ZXJhZ2UgcmVwb3J0IGZpbGVzIGFyZSBhdXRvLWdlbmVyYXRlZCBhbmQgbm90IHBhcnQgb2YgdGhlIGFwcGxpY2F0aW9uIGNvZGUnXG4gIH0sXG4gIFxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIERvY3VtZW50YXRpb24gYW5kIE5vbi1Db2RlIEZpbGVzXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAge1xuICAgIHJ1bGU6ICcqJyxcbiAgICBmaWxlOiAnZG9jcy8qKi8qJyxcbiAgICByZWFzb246ICdEb2N1bWVudGF0aW9uIGZpbGVzIGluY2x1ZGluZyBRQSBtZXRyaWNzIGFuZCByZXBvcnRzJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJyonLFxuICAgIGZpbGU6ICcqKi8qLm1kJyxcbiAgICByZWFzb246ICdNYXJrZG93biBkb2N1bWVudGF0aW9uIGZpbGVzJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJyonLFxuICAgIGZpbGU6ICcqKi8qLmpzb24nLFxuICAgIHJlYXNvbjogJ0pTT04gY29uZmlndXJhdGlvbiBhbmQgZGF0YSBmaWxlcyBkbyBub3QgZXhlY3V0ZSBjb2RlJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJyonLFxuICAgIGZpbGU6ICdMSUNFTlNFJyxcbiAgICByZWFzb246ICdMaWNlbnNlIGZpbGUnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnKicsXG4gICAgZmlsZTogJy5naXRpZ25vcmUnLFxuICAgIHJlYXNvbjogJ0dpdCBjb25maWd1cmF0aW9uIGZpbGUnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnKicsXG4gICAgZmlsZTogJ3BhY2thZ2UtbG9jay5qc29uJyxcbiAgICByZWFzb246ICdOUE0gbG9jayBmaWxlIC0gYXV0by1nZW5lcmF0ZWQsIG5vIHVzZXIgaW5wdXQgcHJvY2Vzc2luZydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICcqJyxcbiAgICBmaWxlOiAnKiovKi55bWwnLFxuICAgIHJlYXNvbjogJ1lBTUwgY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgZGF0YSwgbm90IGNvZGUnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnKicsXG4gICAgZmlsZTogJyoqLyoueWFtbCcsXG4gICAgcmVhc29uOiAnWUFNTCBjb25maWd1cmF0aW9uIGZpbGVzIGFyZSBkYXRhLCBub3QgY29kZSdcbiAgfVxuXTtcblxuLyoqXG4gKiBWYWxpZGF0ZSBzdXBwcmVzc2lvbiBjb25maWd1cmF0aW9uIGF0IHN0YXJ0dXBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU3VwcHJlc3Npb25zKCk6IHN0cmluZ1tdIHtcbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBzZWVuUGF0dGVybnMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgXG4gIGZvciAoY29uc3Qgc3VwcHJlc3Npb24gb2Ygc3VwcHJlc3Npb25zKSB7XG4gICAgLy8gQ2hlY2sgZm9yIGVtcHR5IHJlYXNvbnNcbiAgICBpZiAoIXN1cHByZXNzaW9uLnJlYXNvbiB8fCBzdXBwcmVzc2lvbi5yZWFzb24udHJpbSgpLmxlbmd0aCA8IDEwKSB7XG4gICAgICBlcnJvcnMucHVzaChgU3VwcHJlc3Npb24gZm9yICR7c3VwcHJlc3Npb24ucnVsZX0gaGFzIGluc3VmZmljaWVudCByZWFzb25gKTtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2hlY2sgZm9yIHZhbGlkIHJ1bGUgcGF0dGVybnNcbiAgICBjb25zdCBydWxlUGF0dGVybiA9IC9eKERNQ1AtU0VDLVxcZHszfXxPV0FTUC1bQS1aXVxcZHsyfS1cXGR7M318Q1dFLVxcZCstXFxkezN9fFxcKikkLztcbiAgICBpZiAoIXN1cHByZXNzaW9uLnJ1bGUubWF0Y2gocnVsZVBhdHRlcm4pKSB7XG4gICAgICBlcnJvcnMucHVzaChgSW52YWxpZCBydWxlIHBhdHRlcm46ICR7c3VwcHJlc3Npb24ucnVsZX1gKTtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2hlY2sgZm9yIGR1cGxpY2F0ZSBzdXBwcmVzc2lvbnNcbiAgICBjb25zdCBrZXkgPSBgJHtzdXBwcmVzc2lvbi5ydWxlfToke3N1cHByZXNzaW9uLmZpbGUgfHwgJyonfWA7XG4gICAgaWYgKHNlZW5QYXR0ZXJucy5oYXMoa2V5KSkge1xuICAgICAgZXJyb3JzLnB1c2goYER1cGxpY2F0ZSBzdXBwcmVzc2lvbjogJHtrZXl9YCk7XG4gICAgfVxuICAgIHNlZW5QYXR0ZXJucy5hZGQoa2V5KTtcbiAgICBcbiAgICAvLyBWYWxpZGF0ZSBnbG9iIHBhdHRlcm5zXG4gICAgaWYgKHN1cHByZXNzaW9uLmZpbGU/LmluY2x1ZGVzKCcqKicpICYmICFzdXBwcmVzc2lvbi5maWxlLmluY2x1ZGVzKCcqKi8nKSkge1xuICAgICAgZXJyb3JzLnB1c2goYEludmFsaWQgZ2xvYiBwYXR0ZXJuIGluICR7c3VwcHJlc3Npb24uZmlsZX0gLSAqKiBtdXN0IGJlIGZvbGxvd2VkIGJ5IC9gKTtcbiAgICB9XG4gIH1cbiAgXG4gIHJldHVybiBlcnJvcnM7XG59XG5cbi8qKlxuICogQ29udmVydCBnbG9iIHBhdHRlcm4gdG8gcmVnZXggcGF0dGVybiBzYWZlbHlcbiAqIFVzaW5nIGEgcHJvcGVyIGdsb2ItdG8tcmVnZXggY29udmVyc2lvbiB0aGF0IGhhbmRsZXMgYWxsIGVkZ2UgY2FzZXNcbiAqL1xuZnVuY3Rpb24gZ2xvYlRvUmVnZXgoZ2xvYjogc3RyaW5nKTogUmVnRXhwIHtcbiAgLy8gQ2hlY2sgY2FjaGUgZmlyc3RcbiAgY29uc3QgY2FjaGVkID0gY2FjaGUuZ2V0UmVnZXgoZ2xvYik7XG4gIGlmIChjYWNoZWQpIHJldHVybiBjYWNoZWQ7XG4gIFxuICAvLyBTcGVjaWFsIGNhc2U6IGlmIGdsb2Igc3RhcnRzIHdpdGggKiwgaXQgc2hvdWxkIG1hdGNoIGFueXRoaW5nIGF0IHRoZSBiZWdpbm5pbmdcbiAgbGV0IHByb2Nlc3NlZEdsb2IgPSBnbG9iO1xuICBsZXQgcHJlZml4ID0gJyc7XG4gIGlmIChnbG9iLnN0YXJ0c1dpdGgoJyonKSAmJiAhZ2xvYi5zdGFydHNXaXRoKCcqKicpKSB7XG4gICAgcHJlZml4ID0gJyg/Oi4qLyk/JzsgIC8vIE9wdGlvbmFsIHBhdGggcHJlZml4XG4gICAgcHJvY2Vzc2VkR2xvYiA9IGdsb2Iuc3Vic3RyaW5nKDEpO1xuICB9XG4gIFxuICAvLyBFc2NhcGUgYWxsIHJlZ2V4IHNwZWNpYWwgY2hhcmFjdGVycyBleGNlcHQgKiBhbmQgL1xuICAvLyBGaXhlZDogUHJvcGVybHkgZXNjYXBlIGJhY2tzbGFzaGVzIGFuZCBvdGhlciBzcGVjaWFsIHJlZ2V4IGNoYXJhY3RlcnNcbiAgbGV0IHBhdHRlcm4gPSBwcm9jZXNzZWRHbG9iLnJlcGxhY2UoL1tcXFxcXiQuKCkrP3t9W1xcXXxdL2csICdcXFxcJCYnKTtcbiAgXG4gIC8vIEhhbmRsZSBnbG9iIHBhdHRlcm5zIGluIGNvcnJlY3Qgb3JkZXJcbiAgLy8gUmVwbGFjZSAqKiBiZWZvcmUgKiB0byBhdm9pZCBjb25mbGljdHNcbiAgcGF0dGVybiA9IHBhdHRlcm5cbiAgICAucmVwbGFjZSgvXFwqXFwqL2csICc8PEdMT0JTVEFSPj4nKSAgICAgLy8gVGVtcG9yYXJ5IHBsYWNlaG9sZGVyIGZvciAqKlxuICAgIC5yZXBsYWNlKC9cXCovZywgJzw8U1RBUj4+JykgICAgICAgICAgICAvLyBUZW1wb3JhcnkgcGxhY2Vob2xkZXIgZm9yICpcbiAgICAucmVwbGFjZSgvPDxHTE9CU1RBUj4+XFwvL2csICcoPzouKi8pPycpIC8vICoqLyBtYXRjaGVzIGFueSBudW1iZXIgb2YgZGlyZWN0b3JpZXMgaW5jbHVkaW5nIG5vbmVcbiAgICAucmVwbGFjZSgvPDxHTE9CU1RBUj4+L2csICcuKicpICAgICAgIC8vICoqIG1hdGNoZXMgYW55dGhpbmdcbiAgICAucmVwbGFjZSgvPDxTVEFSPj4vZywgJ1teL10qJykgICAgICAgIC8vICogbWF0Y2hlcyBhbnl0aGluZyBleGNlcHQgZGlyZWN0b3J5IHNlcGFyYXRvclxuICAgIC5yZXBsYWNlKC9cXC8vZywgJ1xcXFwvJyk7ICAgICAgICAgICAgICAgIC8vIEVzY2FwZSBmb3J3YXJkIHNsYXNoZXNcbiAgXG4gIC8vIENvbWJpbmUgcHJlZml4IGFuZCBwYXR0ZXJuXG4gIGNvbnN0IGZ1bGxQYXR0ZXJuID0gcHJlZml4ICsgcGF0dGVybjtcbiAgXG4gIC8vIEFkZCBhbmNob3JzIHRvIGVuc3VyZSBmdWxsIHBhdGggbWF0Y2hcbiAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGBeJHtmdWxsUGF0dGVybn0kYCk7XG4gIFxuICAvLyBDYWNoZSB0aGUgY29tcGlsZWQgcmVnZXhcbiAgY2FjaGUuc2V0UmVnZXgoZ2xvYiwgcmVnZXgpO1xuICBcbiAgcmV0dXJuIHJlZ2V4O1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSBmaWxlIHBhdGggZm9yIGNvbnNpc3RlbnQgbWF0Y2hpbmdcbiAqIEhhbmRsZXMgYm90aCBhYnNvbHV0ZSBhbmQgcmVsYXRpdmUgcGF0aHMgYWNyb3NzIGRpZmZlcmVudCBwbGF0Zm9ybXNcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplUGF0aChmaWxlUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gQ29udmVydCBiYWNrc2xhc2hlcyB0byBmb3J3YXJkIHNsYXNoZXMgZm9yIFdpbmRvd3MgcGF0aHNcbiAgbGV0IG5vcm1hbGl6ZWQgPSBmaWxlUGF0aC5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG4gIFxuICAvLyBSZW1vdmUgZHVwbGljYXRlIHNsYXNoZXNcbiAgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZWQucmVwbGFjZSgvXFwvKy9nLCAnLycpO1xuICBcbiAgLy8gUmVtb3ZlIHRyYWlsaW5nIHNsYXNoIGlmIHByZXNlbnRcbiAgaWYgKG5vcm1hbGl6ZWQuZW5kc1dpdGgoJy8nKSAmJiBub3JtYWxpemVkLmxlbmd0aCA+IDEpIHtcbiAgICBub3JtYWxpemVkID0gbm9ybWFsaXplZC5zbGljZSgwLCAtMSk7XG4gIH1cbiAgXG4gIHJldHVybiBub3JtYWxpemVkO1xufVxuXG4vKipcbiAqIEV4dHJhY3QgcmVsYXRpdmUgcGF0aCBmcm9tIGFic29sdXRlIHBhdGhcbiAqIEhhbmRsZXMgdmFyaW91cyBDSS9DRCBhbmQgbG9jYWwgZGV2ZWxvcG1lbnQgcGF0aCBmb3JtYXRzXG4gKi9cbmZ1bmN0aW9uIGdldFJlbGF0aXZlUGF0aChhYnNvbHV0ZVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVQYXRoKGFic29sdXRlUGF0aCk7XG4gIFxuICAvLyBJZiBhbHJlYWR5IGEgcmVsYXRpdmUgcGF0aCwgcmV0dXJuIGFzLWlzXG4gIGlmICghbm9ybWFsaXplZC5zdGFydHNXaXRoKCcvJykgJiYgIW5vcm1hbGl6ZWQubWF0Y2goL15bQS1aXTovaSkpIHtcbiAgICByZXR1cm4gbm9ybWFsaXplZDtcbiAgfVxuICBcbiAgLy8gRGVmaW5lIGNvbW1vbiBwcm9qZWN0IHNvdXJjZSBkaXJlY3Rvcmllc1xuICBjb25zdCBwcm9qZWN0RGlycyA9IFsnc3JjLycsICdfX3Rlc3RzX18vJywgJ3NjcmlwdHMvJywgJ2RvY3MvJywgJ3Rlc3QvJywgJ3Rlc3RzLycsICdsaWIvJ107XG4gIFxuICAvLyBGaW5kIHRoZSBwb3NpdGlvbiBvZiBjb21tb24gcHJvamVjdCBkaXJlY3RvcmllcyBpbiB0aGUgcGF0aFxuICBsZXQgYmVzdE1hdGNoID0geyBpbmRleDogLTEsIGRpcjogJycsIHJlbGF0aXZlUGF0aDogJycgfTtcbiAgXG4gIGZvciAoY29uc3QgZGlyIG9mIHByb2plY3REaXJzKSB7XG4gICAgLy8gTG9vayBmb3IgL2RpciBwYXR0ZXJuICh3aXRoIGxlYWRpbmcgc2xhc2ggdG8gYXZvaWQgZmFsc2UgbWF0Y2hlcylcbiAgICBjb25zdCBzZWFyY2hQYXR0ZXJuID0gYC8ke2Rpcn1gO1xuICAgIGNvbnN0IGluZGV4ID0gbm9ybWFsaXplZC5sYXN0SW5kZXhPZihzZWFyY2hQYXR0ZXJuKTtcbiAgICBcbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgLy8gRXh0cmFjdCBldmVyeXRoaW5nIGFmdGVyIHRoZSBwYXJlbnQgb2YgdGhpcyBkaXJlY3RvcnlcbiAgICAgIC8vIEZvciBleGFtcGxlOiAvaG9tZS91c2VyL3Byb2plY3Qvc3JjL2ZpbGUudHMgLT4gc3JjL2ZpbGUudHNcbiAgICAgIGNvbnN0IGRpclN0YXJ0SW5kZXggPSBpbmRleCArIDE7IC8vIFNraXAgdGhlIGxlYWRpbmcgc2xhc2hcbiAgICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IG5vcm1hbGl6ZWQuc3Vic3RyaW5nKGRpclN0YXJ0SW5kZXgpO1xuICAgICAgXG4gICAgICAvLyBWZXJpZnkgdGhpcyBsb29rcyBsaWtlIGEgdmFsaWQgcHJvamVjdCBmaWxlXG4gICAgICBpZiAocmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoZGlyKSAmJiByZWxhdGl2ZVBhdGguaW5jbHVkZXMoJy4nKSkge1xuICAgICAgICAvLyBLZWVwIHRoZSBtYXRjaCB0aGF0IGFwcGVhcnMgbGF0ZXN0IGluIHRoZSBwYXRoIChtb3N0IHNwZWNpZmljKVxuICAgICAgICBpZiAoaW5kZXggPiBiZXN0TWF0Y2guaW5kZXgpIHtcbiAgICAgICAgICBiZXN0TWF0Y2ggPSB7IGluZGV4LCBkaXIsIHJlbGF0aXZlUGF0aCB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIFxuICAvLyBJZiB3ZSBmb3VuZCBhIG1hdGNoLCByZXR1cm4gaXRcbiAgaWYgKGJlc3RNYXRjaC5pbmRleCA+PSAwKSB7XG4gICAgcmV0dXJuIGJlc3RNYXRjaC5yZWxhdGl2ZVBhdGg7XG4gIH1cbiAgXG4gIC8vIEZhbGxiYWNrOiBUcnkgdG8gZmluZCBjb21tb24gZmlsZSBwYXR0ZXJucyB0aGF0IGluZGljYXRlIHByb2plY3QgZmlsZXNcbiAgY29uc3QgZmlsZVBhdHRlcm5zID0gW1xuICAgIC9cXC8oc3JjfF9fdGVzdHNfX3xzY3JpcHRzfHRlc3R8dGVzdHN8bGliKVxcLy4qXFwuW2p0XXN4PyQvLFxuICAgIC9cXC8oc3JjfF9fdGVzdHNfX3xzY3JpcHRzfHRlc3R8dGVzdHN8bGliKVxcLy4qXFwuanNvbiQvLFxuICAgIC9cXC8oc3JjfF9fdGVzdHNfX3xzY3JpcHRzfHRlc3R8dGVzdHN8bGliKVxcLy4qXFwueWE/bWwkLyxcbiAgICAvXFwvcGFja2FnZVxcLmpzb24kLyxcbiAgICAvXFwvcGFja2FnZS1sb2NrXFwuanNvbiQvLFxuICAgIC9cXC90c2NvbmZpZy4qXFwuanNvbiQvLFxuICAgIC9cXC9cXC4uKnJjXFwuanNvbiQvICAvLyAuZXNsaW50cmMuanNvbiwgZXRjLlxuICBdO1xuICBcbiAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIGZpbGVQYXR0ZXJucykge1xuICAgIGNvbnN0IG1hdGNoID0gbm9ybWFsaXplZC5tYXRjaChwYXR0ZXJuKTtcbiAgICBpZiAobWF0Y2gpIHtcbiAgICAgIC8vIEZpbmQgd2hlcmUgdGhlIG1hdGNoIHN0YXJ0cyBhbmQgZXh0cmFjdCBmcm9tIHRoZXJlXG4gICAgICBjb25zdCBtYXRjaEluZGV4ID0gbm9ybWFsaXplZC5pbmRleE9mKG1hdGNoWzBdKTtcbiAgICAgIGlmIChtYXRjaEluZGV4ID49IDApIHtcbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWQuc3Vic3RyaW5nKG1hdGNoSW5kZXggKyAxKTsgLy8gU2tpcCBsZWFkaW5nIC9cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgXG4gIC8vIExhc3QgcmVzb3J0OiBpZiBwYXRoIGNvbnRhaW5zIGNvbW1vbiBleHRlbnNpb25zLCB0cnkgdG8gZXh0cmFjdCBhIHJlYXNvbmFibGUgcmVsYXRpdmUgcGF0aFxuICBpZiAobm9ybWFsaXplZC5tYXRjaCgvXFwuKHRzfGpzfHRzeHxqc3h8anNvbnx5YW1sfHltbCkkLykpIHtcbiAgICAvLyBGaW5kIHRoZSBsYXN0IHNlZ21lbnQgdGhhdCBsb29rcyBsaWtlIGEgcHJvamVjdCBkaXJlY3RvcnlcbiAgICBjb25zdCBzZWdtZW50cyA9IG5vcm1hbGl6ZWQuc3BsaXQoJy8nKTtcbiAgICBmb3IgKGxldCBpID0gc2VnbWVudHMubGVuZ3RoIC0gMjsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGlmIChwcm9qZWN0RGlycy5zb21lKGRpciA9PiBkaXIuc3RhcnRzV2l0aChzZWdtZW50c1tpXSkpKSB7XG4gICAgICAgIHJldHVybiBzZWdtZW50cy5zbGljZShpKS5qb2luKCcvJyk7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIEZvciByb290LWxldmVsIGZpbGVzIGxpa2UgcGFja2FnZS1sb2NrLmpzb24sIGp1c3QgcmV0dXJuIHRoZSBmaWxlbmFtZVxuICAgIGNvbnN0IGZpbGVuYW1lID0gc2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0gMV07XG4gICAgaWYgKGZpbGVuYW1lICYmIGZpbGVuYW1lLmluY2x1ZGVzKCcuJykpIHtcbiAgICAgIHJldHVybiBmaWxlbmFtZTtcbiAgICB9XG4gIH1cbiAgXG4gIC8vIFJldHVybiB0aGUgbm9ybWFsaXplZCBwYXRoIGlmIHdlIGNhbid0IGV4dHJhY3QgcmVsYXRpdmVcbiAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBmaW5kaW5nIHNob3VsZCBiZSBzdXBwcmVzc2VkXG4gKiBPcHRpbWl6ZWQgd2l0aCBjYWNoaW5nIGFuZCBlYXJseSByZXR1cm5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaG91bGRTdXBwcmVzcyhydWxlSWQ6IHN0cmluZywgZmlsZVBhdGg/OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKCFmaWxlUGF0aCkgcmV0dXJuIGZhbHNlO1xuICBcbiAgLy8gTm9ybWFsaXplIHBhdGhzIGZvciBjb25zaXN0ZW50IG1hdGNoaW5nXG4gIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gbm9ybWFsaXplUGF0aChmaWxlUGF0aCk7XG4gIGNvbnN0IHJlbGF0aXZlUGF0aCA9IGdldFJlbGF0aXZlUGF0aChub3JtYWxpemVkUGF0aCk7XG4gIFxuICAvLyBDaGVjayBjYWNoZSBmaXJzdFxuICBjb25zdCBjYWNoZUtleSA9IGAke3J1bGVJZH06OiR7cmVsYXRpdmVQYXRofWA7XG4gIGNvbnN0IGNhY2hlZCA9IGNhY2hlLmdldChydWxlSWQsIHJlbGF0aXZlUGF0aCk7XG4gIGlmIChjYWNoZWQgIT09IHVuZGVmaW5lZCkgcmV0dXJuIGNhY2hlZDtcbiAgXG4gIC8vIFByb2Nlc3Mgc3VwcHJlc3Npb25zIHdpdGggZWFybHkgcmV0dXJuc1xuICBmb3IgKGNvbnN0IHN1cHByZXNzaW9uIG9mIHN1cHByZXNzaW9ucykge1xuICAgIC8vIFNraXAgaWYgcnVsZSBkb2Vzbid0IG1hdGNoXG4gICAgaWYgKHN1cHByZXNzaW9uLnJ1bGUgIT09ICcqJyAmJiBzdXBwcmVzc2lvbi5ydWxlICE9PSBydWxlSWQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBcbiAgICAvLyBIYW5kbGUgZ2xvYmFsIHN1cHByZXNzaW9ucyAobm8gZmlsZSBzcGVjaWZpZWQpXG4gICAgaWYgKCFzdXBwcmVzc2lvbi5maWxlKSB7XG4gICAgICBjYWNoZS5zZXQocnVsZUlkLCByZWxhdGl2ZVBhdGgsIHRydWUpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIFxuICAgIC8vIENoZWNrIGV4YWN0IGZpbGUgbWF0Y2ggKG1vc3QgY29tbW9uIGNhc2UpXG4gICAgaWYgKHN1cHByZXNzaW9uLmZpbGUgPT09IHJlbGF0aXZlUGF0aCB8fCBzdXBwcmVzc2lvbi5maWxlID09PSBub3JtYWxpemVkUGF0aCkge1xuICAgICAgY2FjaGUuc2V0KHJ1bGVJZCwgcmVsYXRpdmVQYXRoLCB0cnVlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBcbiAgICAvLyBDaGVjayBwYXR0ZXJuIG1hdGNoIG9ubHkgaWYgZmlsZSBjb250YWlucyB3aWxkY2FyZHNcbiAgICBpZiAoc3VwcHJlc3Npb24uZmlsZS5pbmNsdWRlcygnKicpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZWdleCA9IGdsb2JUb1JlZ2V4KHN1cHByZXNzaW9uLmZpbGUpO1xuICAgICAgICBpZiAocmVnZXgudGVzdChyZWxhdGl2ZVBhdGgpIHx8IHJlZ2V4LnRlc3Qobm9ybWFsaXplZFBhdGgpKSB7XG4gICAgICAgICAgY2FjaGUuc2V0KHJ1bGVJZCwgcmVsYXRpdmVQYXRoLCB0cnVlKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKGBJbnZhbGlkIHN1cHByZXNzaW9uIHBhdHRlcm4gXCIke3N1cHByZXNzaW9uLmZpbGV9XCI6YCwgZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBcbiAgLy8gTm90IHN1cHByZXNzZWRcbiAgY2FjaGUuc2V0KHJ1bGVJZCwgcmVsYXRpdmVQYXRoLCBmYWxzZSk7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDbGVhciBzdXBwcmVzc2lvbiBjYWNoZSAodXNlZnVsIGZvciB0ZXN0aW5nKVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJTdXBwcmVzc2lvbkNhY2hlKCk6IHZvaWQge1xuICBjYWNoZS5jbGVhcigpO1xufVxuXG4vKipcbiAqIEdldCBzdXBwcmVzc2lvbiBzdGF0aXN0aWNzIGZvciByZXBvcnRpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN1cHByZXNzaW9uU3RhdHMoKTogeyBcbiAgdG90YWw6IG51bWJlcjsgXG4gIGJ5UnVsZTogUmVjb3JkPHN0cmluZywgbnVtYmVyPjtcbiAgYnlDYXRlZ29yeTogUmVjb3JkPHN0cmluZywgbnVtYmVyPjtcbn0ge1xuICBjb25zdCBzdGF0cyA9IHtcbiAgICB0b3RhbDogc3VwcHJlc3Npb25zLmxlbmd0aCxcbiAgICBieVJ1bGU6IHt9IGFzIFJlY29yZDxzdHJpbmcsIG51bWJlcj4sXG4gICAgYnlDYXRlZ29yeToge30gYXMgUmVjb3JkPHN0cmluZywgbnVtYmVyPlxuICB9O1xuICBcbiAgZm9yIChjb25zdCBzdXBwcmVzc2lvbiBvZiBzdXBwcmVzc2lvbnMpIHtcbiAgICAvLyBDb3VudCBieSBydWxlXG4gICAgc3RhdHMuYnlSdWxlW3N1cHByZXNzaW9uLnJ1bGVdID0gKHN0YXRzLmJ5UnVsZVtzdXBwcmVzc2lvbi5ydWxlXSB8fCAwKSArIDE7XG4gICAgXG4gICAgLy8gQ291bnQgYnkgY2F0ZWdvcnkgKGV4dHJhY3QgZnJvbSBydWxlIHByZWZpeClcbiAgICBjb25zdCBjYXRlZ29yeSA9IHN1cHByZXNzaW9uLnJ1bGUuc3BsaXQoJy0nKVswXTtcbiAgICBzdGF0cy5ieUNhdGVnb3J5W2NhdGVnb3J5XSA9IChzdGF0cy5ieUNhdGVnb3J5W2NhdGVnb3J5XSB8fCAwKSArIDE7XG4gIH1cbiAgXG4gIHJldHVybiBzdGF0cztcbn1cblxuLy8gVmFsaWRhdGUgc3VwcHJlc3Npb25zIG9uIG1vZHVsZSBsb2FkXG5jb25zdCB2YWxpZGF0aW9uRXJyb3JzID0gdmFsaWRhdGVTdXBwcmVzc2lvbnMoKTtcbmlmICh2YWxpZGF0aW9uRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgbG9nZ2VyLndhcm4oJ1N1cHByZXNzaW9uIGNvbmZpZ3VyYXRpb24gd2FybmluZ3M6JywgdmFsaWRhdGlvbkVycm9ycyk7XG59Il19
678
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwcHJlc3Npb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3NlY3VyaXR5L2F1ZGl0L2NvbmZpZy9zdXBwcmVzc2lvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFHSCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFRbEQ7O0dBRUc7QUFDSCxNQUFNLGdCQUFnQjtJQUNaLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBbUIsQ0FBQztJQUNuQyxVQUFVLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7SUFFL0MsS0FBSztRQUNILElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsV0FBVyxDQUFDLE1BQWMsRUFBRSxRQUFnQjtRQUMxQyxPQUFPLEdBQUcsTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxHQUFHLENBQUMsTUFBYyxFQUFFLFFBQWdCO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsR0FBRyxDQUFDLE1BQWMsRUFBRSxRQUFnQixFQUFFLEtBQWM7UUFDbEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELFFBQVEsQ0FBQyxPQUFlO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELFFBQVEsQ0FBQyxPQUFlLEVBQUUsS0FBYTtRQUNyQyxJQUFJLENB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RUFBRSxZQUFZLENBQUMsTUFBTTtRQUMxQixNQUFNLEVBQUUsRUFBNEI7UUFDcEMsVUFBVSxFQUFFLEVBQTRCO0tBQ3pDLENBQUM7SUFFRixLQUFLLE1BQU0sV0FBVyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3ZDLGdCQUFnQjtRQUNoQixLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUUzRSwrQ0FBK0M7UUFDL0MsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEQsS0FBSyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCx1Q0FBdUM7QUFDdkMsTUFBTSxnQkFBZ0IsR0FBRyxvQkFBb0IsRUFBRSxDQUFDO0FBQ2hELElBQUksZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ2hDLE1BQU0sQ0FBQyxJQUFJLENBQUMscUNBQXFDLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztBQUN2RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTZWN1cml0eSBBdWRpdCBTdXBwcmVzc2lvbiBDb25maWd1cmF0aW9uXG4gKiBcbiAqIFRoaXMgZmlsZSBjb250YWlucyBzdXBwcmVzc2lvbiBydWxlcyBmb3IgZmFsc2UgcG9zaXRpdmVzIGluIHRoZSBzZWN1cml0eSBhdWRpdC5cbiAqIEVhY2ggc3VwcHJlc3Npb24gc2hvdWxkIGJlIHdlbGwtZG9jdW1lbnRlZCB3aXRoIGEgY2xlYXIgcmVhc29uLlxuICovXG5cbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi8uLi91dGlscy9sb2dnZXIuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN1cHByZXNzaW9uIHtcbiAgcnVsZTogc3RyaW5nO1xuICBmaWxlPzogc3RyaW5nO1xuICByZWFzb246IHN0cmluZztcbn1cblxuLyoqXG4gKiBTdXBwcmVzc2lvbiBjYWNoZSBmb3IgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uXG4gKi9cbmNsYXNzIFN1cHByZXNzaW9uQ2FjaGUge1xuICBwcml2YXRlIGNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIGJvb2xlYW4+KCk7XG4gIHByaXZhdGUgcmVnZXhDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBSZWdFeHA+KCk7XG4gIFxuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLmNhY2hlLmNsZWFyKCk7XG4gICAgdGhpcy5yZWdleENhY2hlLmNsZWFyKCk7XG4gIH1cbiAgXG4gIGdldENhY2hlS2V5KHJ1bGVJZDogc3RyaW5nLCBmaWxlUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7cnVsZUlkfTo6JHtmaWxlUGF0aH1gO1xuICB9XG4gIFxuICBnZXQocnVsZUlkOiBzdHJpbmcsIGZpbGVQYXRoOiBzdHJpbmcpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5jYWNoZS5nZXQodGhpcy5nZXRDYWNoZUtleShydWxlSWQsIGZpbGVQYXRoKSk7XG4gIH1cbiAgXG4gIHNldChydWxlSWQ6IHN0cmluZywgZmlsZVBhdGg6IHN0cmluZywgdmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmNhY2hlLnNldCh0aGlzLmdldENhY2hlS2V5KHJ1bGVJZCwgZmlsZVBhdGgpLCB2YWx1ZSk7XG4gIH1cbiAgXG4gIGdldFJlZ2V4KHBhdHRlcm46IHN0cmluZyk6IFJlZ0V4cCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucmVnZXhDYWNoZS5nZXQocGF0dGVybik7XG4gIH1cbiAgXG4gIHNldFJlZ2V4KHBhdHRlcm46IHN0cmluZywgcmVnZXg6IFJlZ0V4cCk6IHZvaWQge1xuICAgIHRoaXMucmVnZXhDYWNoZS5zZXQocGF0dGVybiwgcmVnZXgpO1xuICB9XG59XG5cbmNvbnN0IGNhY2hlID0gbmV3IFN1cHByZXNzaW9uQ2FjaGUoKTtcblxuZXhwb3J0IGNvbnN0IHN1cHByZXNzaW9uczogU3VwcHJlc3Npb25bXSA9IFtcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBTUUwgSW5qZWN0aW9uIEZhbHNlIFBvc2l0aXZlc1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHtcbiAgICBydWxlOiAnQ1dFLTg5LTAwMScsXG4gICAgZmlsZTogJ3NyYy91cGRhdGUvVXBkYXRlTWFuYWdlci50cycsXG4gICAgcmVhc29uOiAnRmFsc2UgcG9zaXRpdmUgLSBcIlVwZGF0ZSBGYWlsZWRcIiBpcyBhIFVJIG1lc3NhZ2UsIG5vdCBTUUwuIFRoZSBjb2RlYmFzZSBkb2VzIG5vdCB1c2UgU1FMLidcbiAgfSxcbiAgXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gVGVzdCBGaWxlIFN1cHByZXNzaW9uc1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHtcbiAgICBydWxlOiAnKicsXG4gICAgZmlsZTogJ19fdGVzdHNfXy8qKi8qJyxcbiAgICByZWFzb246ICdUZXN0IGZpbGVzIG1heSBjb250YWluIGludGVudGlvbmFsIHNlY3VyaXR5IHBhdHRlcm5zIGZvciB0ZXN0aW5nJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJyonLFxuICAgIGZpbGU6ICcqKi8qLnRlc3QudHMnLFxuICAgIHJlYXNvbjogJ1Rlc3QgZmlsZXMgbWF5IGNvbnRhaW4gaW50ZW50aW9uYWwgc2VjdXJpdHkgcGF0dGVybnMgZm9yIHRlc3RpbmcnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnKicsXG4gICAgZmlsZTogJyoqLyouc3BlYy50cycsXG4gICAgcmVhc29uOiAnVGVzdCBmaWxlcyBtYXkgY29udGFpbiBpbnRlbnRpb25hbCBzZWN1cml0eSBwYXR0ZXJucyBmb3IgdGVzdGluZydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICd0ZXN0LyoqLyonLFxuICAgIHJlYXNvbjogJ1Rlc3QgdXRpbGl0aWVzIGFuZCBFMkUgdGVzdHMgZG8gbm90IHByb2Nlc3MgdW50cnVzdGVkIHVzZXIgaW5wdXQnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAndGVzdC8qKi8qJyxcbiAgICByZWFzb246ICdBdWRpdCBsb2dnaW5nIG5vdCByZXF1aXJlZCBmb3IgdGVzdCB1dGlsaXRpZXMgYW5kIEUyRSB0ZXN0cydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdPV0FTUC1BMDMtMDAzJyxcbiAgICBmaWxlOiAndGVzdC9lMmUvY2xlYW51cC10ZXN0LWRhdGEudHMnLFxuICAgIHJlYXNvbjogJ0ZhbHNlIHBvc2l0aXZlIC0gY29uc29sZS5sb2cgbWVzc2FnZSBzdHJpbmcgbGl0ZXJhbCwgbm90IGEgcGF0aCBvcGVyYXRpb24nXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnT1dBU1AtQTAxLTAwMScsXG4gICAgZmlsZTogJ19fdGVzdHNfXy8qKi8qJyxcbiAgICByZWFzb246ICdUZXN0IGZpbGVzIHVzZSBmYWtlIHRva2VucyBhbmQgc2VjcmV0cyBmb3IgdGVzdGluZyBzZWN1cml0eSBmZWF0dXJlcydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdDV0UtODktMDAxJyxcbiAgICBmaWxlOiAnX190ZXN0c19fLyoqLyonLFxuICAgIHJlYXNvbjogJ1Rlc3QgZmlsZXMgY29udGFpbiBTUUwgaW5qZWN0aW9uIHBhdHRlcm5zIGZvciBzZWN1cml0eSB0ZXN0aW5nJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ09XQVNQLUEwMy0wMDInLFxuICAgIGZpbGU6ICdfX3Rlc3RzX18vKiovKicsXG4gICAgcmVhc29uOiAnVGVzdCBmaWxlcyBjb250YWluIGNvbW1hbmQgaW5qZWN0aW9uIHBhdHRlcm5zIGZvciBzZWN1cml0eSB0ZXN0aW5nJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ09XQVNQLUEwMy0wMDMnLFxuICAgIGZpbGU6ICdfX3Rlc3RzX18vKiovKicsXG4gICAgcmVhc29uOiAnVGVzdCBmaWxlcyBjb250YWluIHBhdGggdHJhdmVyc2FsIHBhdHRlcm5zIGZvciBzZWN1cml0eSB0ZXN0aW5nJ1xuICB9LFxuICBcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBZQU1MIFBhcnNpbmcgRmFsc2UgUG9zaXRpdmVzXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDUnLFxuICAgIGZpbGU6ICdzcmMvc2VjdXJpdHkveWFtbFZhbGlkYXRvci50cycsXG4gICAgcmVhc29uOiAnWWFtbFZhbGlkYXRvciBpcyB0aGUgc2VjdXJpdHkgdmFsaWRhdGlvbiBsYXllciBpdHNlbGYgLSBpdCBuZWVkcyBkaXJlY3QgeWFtbC5sb2FkIGFjY2VzcydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDUnLFxuICAgIGZpbGU6ICdzcmMvc2VjdXJpdHkvc2VjdXJlWWFtbFBhcnNlci50cycsXG4gICAgcmVhc29uOiAnU2VjdXJlWWFtbFBhcnNlciBpcyB0aGUgc2VjdXJpdHkgd3JhcHBlciB0aGF0IHZhbGlkYXRlcyBZQU1MIGJlZm9yZSBwYXJzaW5nJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNScsXG4gICAgZmlsZTogJ3NyYy9lbGVtZW50cy9za2lsbHMvU2tpbGxNYW5hZ2VyLnRzJyxcbiAgICByZWFzb246ICdVc2VzIHlhbWwubG9hZCB3aXRoIEZBSUxTQUZFX1NDSEVNQSBhbmQgc2l6ZSB2YWxpZGF0aW9uIC0gZXF1aXZhbGVudCBzZWN1cml0eSB0byBTZWN1cmVZYW1sUGFyc2VyIGZvciByYXcgWUFNTCBpbXBvcnQnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA1JyxcbiAgICBmaWxlOiAnc3JjL3Rvb2xzL3BvcnRmb2xpby9zdWJtaXRUb1BvcnRmb2xpb1Rvb2wudHMnLFxuICAgIHJlYXNvbjogJ0ZhbHNlIHBvc2l0aXZlIC0gVXNlcyBTZWN1cmVZYW1sUGFyc2VyLnBhcnNlKCkgd2hpY2ggaXMgdGhlIHNlY3VyZSBpbXBsZW1lbnRhdGlvbiBkZXNpZ25lZCB0byBwcmV2ZW50IFlBTUwgdnVsbmVyYWJpbGl0aWVzJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNScsXG4gICAgZmlsZTogJ3NyYy9jb25maWcvQ29uZmlnTWFuYWdlci50cycsXG4gICAgcmVhc29uOiAnSU5URU5USU9OQUw6IFVzZXMganMteWFtbCB3aXRoIEZBSUxTQUZFX1NDSEVNQSBmb3IgcHVyZSBZQU1MIGNvbmZpZyBmaWxlcy4gVGhpcyBwcmV2ZW50cyBjb2RlIGV4ZWN1dGlvbiBhbmQgaXMgdGhlIGFwcHJvcHJpYXRlIHNlY3VyaXR5IG1lYXN1cmUgZm9yIGNvbmZpZyBmaWxlcyB0aGF0IGFyZSBOT1QgbWFya2Rvd24gd2l0aCBmcm9udG1hdHRlci4gUmVncmVzc2lvbiB0ZXN0IGVuc3VyZXMgd2UgZG8gbm90IHVzZSBTZWN1cmVZYW1sUGFyc2VyIGhlcmUgd2hpY2ggd291bGQgcmVzZXQgY29uZmlnIHZhbHVlcy4nXG4gIH0sXG4gIFxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIENsZWFyLXRleHQgTG9nZ2luZyBGYWxzZSBQb3NpdGl2ZXNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAxMCcsXG4gICAgZmlsZTogJ3NyYy91dGlscy9sb2dnZXIudHMnLFxuICAgIHJlYXNvbjogJ0ZBTFNFIFBPU0lUSVZFOiBUaGUgbG9nZ2VyIGFscmVhZHkgc2FuaXRpemVzIGFsbCBzZW5zaXRpdmUgZGF0YSB0aHJvdWdoIHNhbml0aXplTWVzc2FnZSgpIGFuZCBzYW5pdGl6ZU9iamVjdCgpIG1ldGhvZHMuIEFsbCBzZW5zaXRpdmUgZmllbGRzICh0b2tlbnMsIGtleXMsIHBhc3N3b3JkcywgZXRjLikgYXJlIHJlcGxhY2VkIHdpdGggW1JFREFDVEVEXSBiZWZvcmUgYW55IGNvbnNvbGUgb3V0cHV0LiBMaW5lcyAyODgsIDI5MSwgYW5kIDI5NSBvbmx5IGxvZyBwcmUtc2FuaXRpemVkIHNhZmUgbWVzc2FnZXMuJ1xuICB9LFxuICBcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBTZWN1cml0eSBSdWxlIERlZmluaXRpb24gRmlsZXNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB7XG4gICAgcnVsZTogJ09XQVNQLUEwMy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvc2VjdXJpdHkvYXVkaXQvcnVsZXMvU2VjdXJpdHlSdWxlcy50cycsXG4gICAgcmVhc29uOiAnVGhpcyBpcyBhIHJlZ2V4IHBhdHRlcm4gZGVmaW5pdGlvbiBmb3IgZGV0ZWN0aW5nIGlubmVySFRNTCB1c2FnZSwgbm90IGFjdHVhbCB1c2FnZSdcbiAgfSxcbiAgXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUGVyc29uYSBMb2FkaW5nIEZhbHNlIFBvc2l0aXZlc1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDAxJyxcbiAgICBmaWxlOiAnc3JjL3BlcnNvbmEvUGVyc29uYUxvYWRlci50cycsXG4gICAgcmVhc29uOiAnUGVyc29uYUxvYWRlciB2YWxpZGF0ZXMgcGVyc29uYXMgdGhyb3VnaCBTZWN1cmVZYW1sUGFyc2VyIGFuZCBDb250ZW50VmFsaWRhdG9yJ1xuICB9LFxuICBcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBVbmljb2RlIE5vcm1hbGl6YXRpb24gRmFsc2UgUG9zaXRpdmVzXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvdHlwZXMvKi50cycsXG4gICAgcmVhc29uOiAnVHlwZSBkZWZpbml0aW9uIGZpbGVzIGRvIG5vdCBwcm9jZXNzIHVzZXIgaW5wdXQnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL3R5cGVzL2VsZW1lbnRzLyoudHMnLFxuICAgIHJlYXNvbjogJ0VsZW1lbnQgaW50ZXJmYWNlIGZpbGVzIGFyZSB0eXBlIGRlZmluaXRpb25zIHRoYXQgZG8gbm90IHByb2Nlc3MgdXNlciBpbnB1dCdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvZXJyb3JzLyoudHMnLFxuICAgIHJlYXNvbjogJ0Vycm9yIGNsYXNzZXMgZG8gbm90IHByb2Nlc3MgdXNlciBpbnB1dCdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvY29uZmlnLyoudHMnLFxuICAgIHJlYXNvbjogJ0NvbmZpZ3VyYXRpb24gZmlsZXMgZG8gbm90IHByb2Nlc3MgdXNlciBpbnB1dCBkaXJlY3RseSdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvY29uc3RhbnRzLyoudHMnLFxuICAgIHJlYXNvbjogJ0NvbnN0YW50IGRlZmluaXRpb24gZmlsZXMgZG8gbm90IHByb2Nlc3MgdXNlciBpbnB1dCdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvdXRpbHMvdmVyc2lvbi50cycsXG4gICAgcmVhc29uOiAnVmVyc2lvbiB1dGlsaXR5IG9ubHkgaGFuZGxlcyBpbnRlcm5hbCB2ZXJzaW9uIHN0cmluZ3MsIG5vdCB1c2VyIGlucHV0J1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJ3NyYy9jYWNoZS8qLnRzJyxcbiAgICByZWFzb246ICdDYWNoZSBsYXllciByZWNlaXZlcyBhbHJlYWR5LW5vcm1hbGl6ZWQgaW5wdXQnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL3NlY3VyaXR5LyoqLyoudHMnLFxuICAgIHJlYXNvbjogJ1NlY3VyaXR5IG1vZHVsZXMgaGFuZGxlIHZhbGlkYXRpb24gYW5kIG5vcm1hbGl6YXRpb24gdGhlbXNlbHZlcydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvaW5kZXgudHMnLFxuICAgIHJlYXNvbjogJ01haW4gZW50cnkgcG9pbnQgZGVsZWdhdGVzIHRvIFNlcnZlclNldHVwIHdoaWNoIG5vcm1hbGl6ZXMgYWxsIGlucHV0cydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvc2VydmVyL1NlcnZlclNldHVwLnRzJyxcbiAgICByZWFzb246ICdUaGlzIGlzIHdoZXJlIFVuaWNvZGUgbm9ybWFsaXphdGlvbiBpcyBpbXBsZW1lbnRlZCBmb3IgYWxsIHRvb2wgaW5wdXRzJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJ3NyYy9jb2xsZWN0aW9uLyoudHMnLFxuICAgIHJlYXNvbjogJ01hcmtldHBsYWNlIG1vZHVsZXMgcmVjZWl2ZSBub3JtYWxpemVkIGlucHV0IGZyb20gdG9vbCBoYW5kbGVycydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvY29sbGVjdGlvbi8qKi8qLnRzJyxcbiAgICByZWFzb246ICdNYXJrZXRwbGFjZSBtb2R1bGVzIHJlY2VpdmUgbm9ybWFsaXplZCBpbnB1dCBmcm9tIHRvb2wgaGFuZGxlcnMnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL3BlcnNvbmEvKi50cycsXG4gICAgcmVhc29uOiAnUGVyc29uYSBtb2R1bGVzIHJlY2VpdmUgbm9ybWFsaXplZCBpbnB1dCBmcm9tIHRvb2wgaGFuZGxlcnMnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL3BlcnNvbmEvKiovKi50cycsXG4gICAgcmVhc29uOiAnUGVyc29uYSBtb2R1bGVzIHJlY2VpdmUgbm9ybWFsaXplZCBpbnB1dCBmcm9tIHRvb2wgaGFuZGxlcnMnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL3VwZGF0ZS8qLnRzJyxcbiAgICByZWFzb246ICdVcGRhdGUgbW9kdWxlcyByZWNlaXZlIG5vcm1hbGl6ZWQgaW5wdXQgZnJvbSB0b29sIGhhbmRsZXJzJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJ3NyYy90b29scy8qLnRzJyxcbiAgICByZWFzb246ICdUb29sIGZpbGVzIHJlY2VpdmUgbm9ybWFsaXplZCBpbnB1dCBmcm9tIFNlcnZlclNldHVwJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJ3NyYy9zZXJ2ZXIvdHlwZXMudHMnLFxuICAgIHJlYXNvbjogJ1R5cGUgZGVmaW5pdGlvbiBmaWxlIGRvZXMgbm90IHByb2Nlc3MgdXNlciBpbnB1dCdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvc2VydmVyL3Rvb2xzLyoudHMnLFxuICAgIHJlYXNvbjogJ1NlcnZlciB0b29scyByZWNlaXZlIG5vcm1hbGl6ZWQgaW5wdXQgZnJvbSBTZXJ2ZXJTZXR1cCdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzY3JpcHRzLyoqLyonLFxuICAgIHJlYXNvbjogJ0J1aWxkIGFuZCB1dGlsaXR5IHNjcmlwdHMgZG8gbm90IHByb2Nlc3MgdXNlciBpbnB1dCdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvdG9vbHMvcG9ydGZvbGlvL3R5cGVzLnRzJyxcbiAgICByZWFzb246ICdUeXBlIGRlZmluaXRpb24gZmlsZSBjb250YWluaW5nIG9ubHkgVHlwZVNjcmlwdCBpbnRlcmZhY2VzIC0gbm8gcnVudGltZSBjb2RlIG9yIHVzZXIgaW5wdXQgcHJvY2Vzc2luZydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvdG9vbHMvKiovdHlwZXMudHMnLFxuICAgIHJlYXNvbjogJ1R5cGUgZGVmaW5pdGlvbiBmaWxlcyBkbyBub3QgcHJvY2VzcyB1c2VyIGlucHV0IC0gY29tcGlsZS10aW1lIG9ubHknXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL3NlcnZpY2VzL0J1aWxkSW5mb1NlcnZpY2UudHMnLFxuICAgIHJlYXNvbjogJ0J1aWxkSW5mb1NlcnZpY2Ugb25seSBwcm9jZXNzZXMgc3lzdGVtIGluZm9ybWF0aW9uIChwYWNrYWdlLmpzb24sIGdpdCBjb21tYW5kcywgRG9ja2VyIHJ1bnRpbWUpIC0gdGhlIE1DUCB0b29sIHRha2VzIG5vIHBhcmFtZXRlcnMgYW5kIG5vIHVzZXIgaW5wdXQgZmxvd3MgdGhyb3VnaCB0aGlzIHNlcnZpY2UnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL2hhbmRsZXJzL1N5bmNIYW5kbGVyVjIudHMnLFxuICAgIHJlYXNvbjogJ1N5bmNIYW5kbGVyVjIgcmVjZWl2ZXMgYWxyZWFkeS1ub3JtYWxpemVkIGlucHV0IGZyb20gdGhlIE1DUCByZXF1ZXN0IGxheWVyLiBBbGwgdXNlciBpbnB1dCBpcyBub3JtYWxpemVkIGluIFNlcnZlclNldHVwIGJlZm9yZSByZWFjaGluZyBoYW5kbGVycy4nXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL2hhbmRsZXJzL0NvbmZpZ0hhbmRsZXIudHMnLFxuICAgIHJlYXNvbjogJ0NvbmZpZ0hhbmRsZXIgcmVjZWl2ZXMgYWxyZWFkeS1ub3JtYWxpemVkIGlucHV0IGZyb20gdGhlIE1DUCByZXF1ZXN0IGxheWVyLiBBbGwgdXNlciBpbnB1dCBpcyBub3JtYWxpemVkIGluIFNlcnZlclNldHVwIGJlZm9yZSByZWFjaGluZyBoYW5kbGVycy4nXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAndGVzdC1zeW5jLW9wZXJhdGlvbnMuanMnLFxuICAgIHJlYXNvbjogJ1Rlc3QgdXRpbGl0eSBmaWxlIGZvciBkZXZlbG9wbWVudCB0ZXN0aW5nLiBEb2VzIG5vdCBwcm9jZXNzIHByb2R1Y3Rpb24gdXNlciBpbnB1dC4nXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnKiovdGVzdC1zeW5jLW9wZXJhdGlvbnMuanMnLFxuICAgIHJlYXNvbjogJ1Rlc3QgdXRpbGl0eSBmaWxlIGZvciBkZXZlbG9wbWVudCB0ZXN0aW5nLiBEb2VzIG5vdCBwcm9jZXNzIHByb2R1Y3Rpb24gdXNlciBpbnB1dC4nXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAndGVzdC0qLmpzJyxcbiAgICByZWFzb246ICdUZXN0IHV0aWxpdHkgZmlsZXMgaW4gcm9vdCBkaXJlY3RvcnkgZm9yIGRldmVsb3BtZW50IHRlc3RpbmcuIERvIG5vdCBwcm9jZXNzIHByb2R1Y3Rpb24gdXNlciBpbnB1dC4nXG4gIH0sXG4gIFxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEF1ZGl0IExvZ2dpbmcgRmFsc2UgUG9zaXRpdmVzXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDYnLFxuICAgIGZpbGU6ICdzcmMvdHlwZXMvKi50cycsXG4gICAgcmVhc29uOiAnVHlwZSBkZWZpbml0aW9uIGZpbGVzIGRvIG5vdCBwZXJmb3JtIHNlY3VyaXR5IG9wZXJhdGlvbnMnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAnc3JjL3R5cGVzL2VsZW1lbnRzLyoudHMnLFxuICAgIHJlYXNvbjogJ0VsZW1lbnQgaW50ZXJmYWNlIGZpbGVzIGFyZSB0eXBlIGRlZmluaXRpb25zIHRoYXQgZG8gbm90IHBlcmZvcm0gc2VjdXJpdHkgb3BlcmF0aW9ucydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDYnLFxuICAgIGZpbGU6ICdzcmMvY29uc3RhbnRzLyoudHMnLFxuICAgIHJlYXNvbjogJ0NvbnN0YW50IGZpbGVzIGRvIG5vdCBwZXJmb3JtIHNlY3VyaXR5IG9wZXJhdGlvbnMnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAnc3JjL2NvbmZpZy8qLnRzJyxcbiAgICByZWFzb246ICdDb25maWd1cmF0aW9uIGZpbGVzIGRvIG5vdCBwZXJmb3JtIHNlY3VyaXR5IG9wZXJhdGlvbnMnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAnc3JjL2Vycm9ycy8qLnRzJyxcbiAgICByZWFzb246ICdFcnJvciBjbGFzc2VzIGFyZSBub3Qgc2VjdXJpdHkgb3BlcmF0aW9ucyByZXF1aXJpbmcgYXVkaXQnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAnKiovKi5qc29uJyxcbiAgICByZWFzb246ICdKU09OIGZpbGVzIGNhbm5vdCBjb250YWluIGV4ZWN1dGFibGUgY29kZSdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDYnLFxuICAgIGZpbGU6ICdzcmMvc2VjdXJpdHkvKiovKi50cycsXG4gICAgcmVhc29uOiAnU2VjdXJpdHkgbW9kdWxlcyBhcmUgaW5mcmFzdHJ1Y3R1cmUsIG5vdCBvcGVyYXRpb25zIHJlcXVpcmluZyBhdWRpdCdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDYnLFxuICAgIGZpbGU6ICdzcmMvY29sbGVjdGlvbi8qLnRzJyxcbiAgICByZWFzb246ICdNYXJrZXRwbGFjZSBvcGVyYXRpb25zIGFyZSBub3Qgc2VjdXJpdHktc2Vuc2l0aXZlIHJlcXVpcmluZyBhdWRpdCdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDYnLFxuICAgIGZpbGU6ICdzcmMvY29sbGVjdGlvbi8qKi8qLnRzJyxcbiAgICByZWFzb246ICdNYXJrZXRwbGFjZSBvcGVyYXRpb25zIGFyZSBub3Qgc2VjdXJpdHktc2Vuc2l0aXZlIHJlcXVpcmluZyBhdWRpdCdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDYnLFxuICAgIGZpbGU6ICdzcmMvcGVyc29uYS8qLnRzJyxcbiAgICByZWFzb246ICdQZXJzb25hIG9wZXJhdGlvbnMgYXJlIHZhbGlkYXRlZCBhdCBlbnRyeSBwb2ludCwgbm90IHNlY3VyaXR5IG9wZXJhdGlvbnMnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAnc3JjL3BlcnNvbmEvKiovKi50cycsXG4gICAgcmVhc29uOiAnUGVyc29uYSBvcGVyYXRpb25zIGFyZSB2YWxpZGF0ZWQgYXQgZW50cnkgcG9pbnQsIG5vdCBzZWN1cml0eSBvcGVyYXRpb25zJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNicsXG4gICAgZmlsZTogJ3NyYy9zZXJ2ZXIvdG9vbHMvKiovKi50cycsXG4gICAgcmVhc29uOiAnVG9vbCBpbXBsZW1lbnRhdGlvbnMgZGVsZWdhdGUgdG8gc2VydmljZXMgdGhhdCBoYW5kbGUgc2VjdXJpdHknXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAnc3JjL2luZGV4LnRzJyxcbiAgICByZWFzb246ICdNYWluIGVudHJ5IHBvaW50IGRlbGVnYXRlcyBzZWN1cml0eSBvcGVyYXRpb25zIHRvIHNwZWNpYWxpemVkIG1vZHVsZXMnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAnc3JjL3V0aWxzLyoudHMnLFxuICAgIHJlYXNvbjogJ1V0aWxpdHkgZnVuY3Rpb25zIGFyZSBub3Qgc2VjdXJpdHkgb3BlcmF0aW9ucyByZXF1aXJpbmcgYXVkaXQnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAnc3JjL3VwZGF0ZS8qKi8qLnRzJyxcbiAgICByZWFzb246ICdVcGRhdGUgc3lzdGVtIGhhcyBpdHMgb3duIGxvZ2dpbmcgYW5kIGlzIG5vdCBhIGRpcmVjdCBzZWN1cml0eSBvcGVyYXRpb24nXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAnc3JjL3NlcnZlci90eXBlcy50cycsXG4gICAgcmVhc29uOiAnVHlwZSBkZWZpbml0aW9uIGZpbGUgZG9lcyBub3QgcGVyZm9ybSBvcGVyYXRpb25zJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNicsXG4gICAgZmlsZTogJ3NjcmlwdHMvKiovKicsXG4gICAgcmVhc29uOiAnQnVpbGQgc2NyaXB0cyBkbyBub3QgcGVyZm9ybSBydW50aW1lIHNlY3VyaXR5IG9wZXJhdGlvbnMnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAnc3JjL3BvcnRmb2xpby9Qb3J0Zm9saW9TeW5jTWFuYWdlci50cycsXG4gICAgcmVhc29uOiAnUG9ydGZvbGlvIHN5bmMgb3BlcmF0aW9ucyBhcmUgZmlsZSBtYW5hZ2VtZW50IHRhc2tzLCBub3Qgc2VjdXJpdHkgb3BlcmF0aW9ucy4gU2VjdXJpdHkgdmFsaWRhdGlvbiBoYXBwZW5zIGF0IHRoZSBNQ1AgcmVxdWVzdCBsYXllci4nXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAnc3JjL2hhbmRsZXJzL1N5bmNIYW5kbGVyVjIudHMnLFxuICAgIHJlYXNvbjogJ1N5bmMgaGFuZGxlciBkZWxlZ2F0ZXMgdG8gUG9ydGZvbGlvU3luY01hbmFnZXIgd2hpY2ggaGFuZGxlcyBpdHMgb3duIGxvZ2dpbmcuIFNlY3VyaXR5IHZhbGlkYXRpb24gaGFwcGVucyBhdCB0aGUgTUNQIHJlcXVlc3QgbGF5ZXIuJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNicsXG4gICAgZmlsZTogJ3NyYy9oYW5kbGVycy9Db25maWdIYW5kbGVyLnRzJyxcbiAgICByZWFzb246ICdDb25maWcgaGFuZGxlciBvcGVyYXRpb25zIGFyZSBjb25maWd1cmF0aW9uIG1hbmFnZW1lbnQsIG5vdCBzZWN1cml0eSBvcGVyYXRpb25zLiBDb25maWdNYW5hZ2VyIGhhbmRsZXMgaXRzIG93biBsb2dnaW5nLidcbiAgfSxcbiAgXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gQ292ZXJhZ2UgUmVwb3J0IEZpbGVzXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAge1xuICAgIHJ1bGU6ICcqJyxcbiAgICBmaWxlOiAndGVzdC9jb3ZlcmFnZS8qKi8qJyxcbiAgICByZWFzb246ICdDb3ZlcmFnZSByZXBvcnQgZmlsZXMgYXJlIGF1dG8tZ2VuZXJhdGVkIGFuZCBub3QgcGFydCBvZiB0aGUgYXBwbGljYXRpb24gY29kZSdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICcqJyxcbiAgICBmaWxlOiAnKiovbGNvdi1yZXBvcnQvKiovKicsXG4gICAgcmVhc29uOiAnTENPViBjb3ZlcmFnZSByZXBvcnQgZmlsZXMgYXJlIGF1dG8tZ2VuZXJhdGVkIGFuZCBub3QgcGFydCBvZiB0aGUgYXBwbGljYXRpb24gY29kZSdcbiAgfSxcbiAgXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gRG9jdW1lbnRhdGlvbiBhbmQgTm9uLUNvZGUgRmlsZXNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB7XG4gICAgcnVsZTogJyonLFxuICAgIGZpbGU6ICdkb2NzLyoqLyonLFxuICAgIHJlYXNvbjogJ0RvY3VtZW50YXRpb24gZmlsZXMgaW5jbHVkaW5nIFFBIG1ldHJpY3MgYW5kIHJlcG9ydHMnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnKicsXG4gICAgZmlsZTogJyoqLyoubWQnLFxuICAgIHJlYXNvbjogJ01hcmtkb3duIGRvY3VtZW50YXRpb24gZmlsZXMnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnKicsXG4gICAgZmlsZTogJyoqLyouanNvbicsXG4gICAgcmVhc29uOiAnSlNPTiBjb25maWd1cmF0aW9uIGFuZCBkYXRhIGZpbGVzIGRvIG5vdCBleGVjdXRlIGNvZGUnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnKicsXG4gICAgZmlsZTogJ0xJQ0VOU0UnLFxuICAgIHJlYXNvbjogJ0xpY2Vuc2UgZmlsZSdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICcqJyxcbiAgICBmaWxlOiAnLmdpdGlnbm9yZScsXG4gICAgcmVhc29uOiAnR2l0IGNvbmZpZ3VyYXRpb24gZmlsZSdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICcqJyxcbiAgICBmaWxlOiAncGFja2FnZS1sb2NrLmpzb24nLFxuICAgIHJlYXNvbjogJ05QTSBsb2NrIGZpbGUgLSBhdXRvLWdlbmVyYXRlZCwgbm8gdXNlciBpbnB1dCBwcm9jZXNzaW5nJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJyonLFxuICAgIGZpbGU6ICcqKi8qLnltbCcsXG4gICAgcmVhc29uOiAnWUFNTCBjb25maWd1cmF0aW9uIGZpbGVzIGFyZSBkYXRhLCBub3QgY29kZSdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICcqJyxcbiAgICBmaWxlOiAnKiovKi55YW1sJyxcbiAgICByZWFzb246ICdZQU1MIGNvbmZpZ3VyYXRpb24gZmlsZXMgYXJlIGRhdGEsIG5vdCBjb2RlJ1xuICB9XG5dO1xuXG4vKipcbiAqIFZhbGlkYXRlIHN1cHByZXNzaW9uIGNvbmZpZ3VyYXRpb24gYXQgc3RhcnR1cFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVTdXBwcmVzc2lvbnMoKTogc3RyaW5nW10ge1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IHNlZW5QYXR0ZXJucyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBcbiAgZm9yIChjb25zdCBzdXBwcmVzc2lvbiBvZiBzdXBwcmVzc2lvbnMpIHtcbiAgICAvLyBDaGVjayBmb3IgZW1wdHkgcmVhc29uc1xuICAgIGlmICghc3VwcHJlc3Npb24ucmVhc29uIHx8IHN1cHByZXNzaW9uLnJlYXNvbi50cmltKCkubGVuZ3RoIDwgMTApIHtcbiAgICAgIGVycm9ycy5wdXNoKGBTdXBwcmVzc2lvbiBmb3IgJHtzdXBwcmVzc2lvbi5ydWxlfSBoYXMgaW5zdWZmaWNpZW50IHJlYXNvbmApO1xuICAgIH1cbiAgICBcbiAgICAvLyBDaGVjayBmb3IgdmFsaWQgcnVsZSBwYXR0ZXJuc1xuICAgIGNvbnN0IHJ1bGVQYXR0ZXJuID0gL14oRE1DUC1TRUMtXFxkezN9fE9XQVNQLVtBLVpdXFxkezJ9LVxcZHszfXxDV0UtXFxkKy1cXGR7M318XFwqKSQvO1xuICAgIGlmICghc3VwcHJlc3Npb24ucnVsZS5tYXRjaChydWxlUGF0dGVybikpIHtcbiAgICAgIGVycm9ycy5wdXNoKGBJbnZhbGlkIHJ1bGUgcGF0dGVybjogJHtzdXBwcmVzc2lvbi5ydWxlfWApO1xuICAgIH1cbiAgICBcbiAgICAvLyBDaGVjayBmb3IgZHVwbGljYXRlIHN1cHByZXNzaW9uc1xuICAgIGNvbnN0IGtleSA9IGAke3N1cHByZXNzaW9uLnJ1bGV9OiR7c3VwcHJlc3Npb24uZmlsZSB8fCAnKid9YDtcbiAgICBpZiAoc2VlblBhdHRlcm5zLmhhcyhrZXkpKSB7XG4gICAgICBlcnJvcnMucHVzaChgRHVwbGljYXRlIHN1cHByZXNzaW9uOiAke2tleX1gKTtcbiAgICB9XG4gICAgc2VlblBhdHRlcm5zLmFkZChrZXkpO1xuICAgIFxuICAgIC8vIFZhbGlkYXRlIGdsb2IgcGF0dGVybnNcbiAgICBpZiAoc3VwcHJlc3Npb24uZmlsZT8uaW5jbHVkZXMoJyoqJykgJiYgIXN1cHByZXNzaW9uLmZpbGUuaW5jbHVkZXMoJyoqLycpKSB7XG4gICAgICBlcnJvcnMucHVzaChgSW52YWxpZCBnbG9iIHBhdHRlcm4gaW4gJHtzdXBwcmVzc2lvbi5maWxlfSAtICoqIG11c3QgYmUgZm9sbG93ZWQgYnkgL2ApO1xuICAgIH1cbiAgfVxuICBcbiAgcmV0dXJuIGVycm9ycztcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGdsb2IgcGF0dGVybiB0byByZWdleCBwYXR0ZXJuIHNhZmVseVxuICogVXNpbmcgYSBwcm9wZXIgZ2xvYi10by1yZWdleCBjb252ZXJzaW9uIHRoYXQgaGFuZGxlcyBhbGwgZWRnZSBjYXNlc1xuICovXG5mdW5jdGlvbiBnbG9iVG9SZWdleChnbG9iOiBzdHJpbmcpOiBSZWdFeHAge1xuICAvLyBDaGVjayBjYWNoZSBmaXJzdFxuICBjb25zdCBjYWNoZWQgPSBjYWNoZS5nZXRSZWdleChnbG9iKTtcbiAgaWYgKGNhY2hlZCkgcmV0dXJuIGNhY2hlZDtcbiAgXG4gIC8vIFNwZWNpYWwgY2FzZTogaWYgZ2xvYiBzdGFydHMgd2l0aCAqLCBpdCBzaG91bGQgbWF0Y2ggYW55dGhpbmcgYXQgdGhlIGJlZ2lubmluZ1xuICBsZXQgcHJvY2Vzc2VkR2xvYiA9IGdsb2I7XG4gIGxldCBwcmVmaXggPSAnJztcbiAgaWYgKGdsb2Iuc3RhcnRzV2l0aCgnKicpICYmICFnbG9iLnN0YXJ0c1dpdGgoJyoqJykpIHtcbiAgICBwcmVmaXggPSAnKD86LiovKT8nOyAgLy8gT3B0aW9uYWwgcGF0aCBwcmVmaXhcbiAgICBwcm9jZXNzZWRHbG9iID0gZ2xvYi5zdWJzdHJpbmcoMSk7XG4gIH1cbiAgXG4gIC8vIEVzY2FwZSBhbGwgcmVnZXggc3BlY2lhbCBjaGFyYWN0ZXJzIGV4Y2VwdCAqIGFuZCAvXG4gIC8vIEZpeGVkOiBQcm9wZXJseSBlc2NhcGUgYmFja3NsYXNoZXMgYW5kIG90aGVyIHNwZWNpYWwgcmVnZXggY2hhcmFjdGVyc1xuICBsZXQgcGF0dGVybiA9IHByb2Nlc3NlZEdsb2IucmVwbGFjZSgvW1xcXFxeJC4oKSs/e31bXFxdfF0vZywgJ1xcXFwkJicpO1xuICBcbiAgLy8gSGFuZGxlIGdsb2IgcGF0dGVybnMgaW4gY29ycmVjdCBvcmRlclxuICAvLyBSZXBsYWNlICoqIGJlZm9yZSAqIHRvIGF2b2lkIGNvbmZsaWN0c1xuICBwYXR0ZXJuID0gcGF0dGVyblxuICAgIC5yZXBsYWNlKC9cXCpcXCovZywgJzw8R0xPQlNUQVI+PicpICAgICAvLyBUZW1wb3JhcnkgcGxhY2Vob2xkZXIgZm9yICoqXG4gICAgLnJlcGxhY2UoL1xcKi9nLCAnPDxTVEFSPj4nKSAgICAgICAgICAgIC8vIFRlbXBvcmFyeSBwbGFjZWhvbGRlciBmb3IgKlxuICAgIC5yZXBsYWNlKC88PEdMT0JTVEFSPj5cXC8vZywgJyg/Oi4qLyk/JykgLy8gKiovIG1hdGNoZXMgYW55IG51bWJlciBvZiBkaXJlY3RvcmllcyBpbmNsdWRpbmcgbm9uZVxuICAgIC5yZXBsYWNlKC88PEdMT0JTVEFSPj4vZywgJy4qJykgICAgICAgLy8gKiogbWF0Y2hlcyBhbnl0aGluZ1xuICAgIC5yZXBsYWNlKC88PFNUQVI+Pi9nLCAnW14vXSonKSAgICAgICAgLy8gKiBtYXRjaGVzIGFueXRoaW5nIGV4Y2VwdCBkaXJlY3Rvcnkgc2VwYXJhdG9yXG4gICAgLnJlcGxhY2UoL1xcLy9nLCAnXFxcXC8nKTsgICAgICAgICAgICAgICAgLy8gRXNjYXBlIGZvcndhcmQgc2xhc2hlc1xuICBcbiAgLy8gQ29tYmluZSBwcmVmaXggYW5kIHBhdHRlcm5cbiAgY29uc3QgZnVsbFBhdHRlcm4gPSBwcmVmaXggKyBwYXR0ZXJuO1xuICBcbiAgLy8gQWRkIGFuY2hvcnMgdG8gZW5zdXJlIGZ1bGwgcGF0aCBtYXRjaFxuICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoYF4ke2Z1bGxQYXR0ZXJufSRgKTtcbiAgXG4gIC8vIENhY2hlIHRoZSBjb21waWxlZCByZWdleFxuICBjYWNoZS5zZXRSZWdleChnbG9iLCByZWdleCk7XG4gIFxuICByZXR1cm4gcmVnZXg7XG59XG5cbi8qKlxuICogTm9ybWFsaXplIGZpbGUgcGF0aCBmb3IgY29uc2lzdGVudCBtYXRjaGluZ1xuICogSGFuZGxlcyBib3RoIGFic29sdXRlIGFuZCByZWxhdGl2ZSBwYXRocyBhY3Jvc3MgZGlmZmVyZW50IHBsYXRmb3Jtc1xuICovXG5mdW5jdGlvbiBub3JtYWxpemVQYXRoKGZpbGVQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBDb252ZXJ0IGJhY2tzbGFzaGVzIHRvIGZvcndhcmQgc2xhc2hlcyBmb3IgV2luZG93cyBwYXRoc1xuICBsZXQgbm9ybWFsaXplZCA9IGZpbGVQYXRoLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgXG4gIC8vIFJlbW92ZSBkdXBsaWNhdGUgc2xhc2hlc1xuICBub3JtYWxpemVkID0gbm9ybWFsaXplZC5yZXBsYWNlKC9cXC8rL2csICcvJyk7XG4gIFxuICAvLyBSZW1vdmUgdHJhaWxpbmcgc2xhc2ggaWYgcHJlc2VudFxuICBpZiAobm9ybWFsaXplZC5lbmRzV2l0aCgnLycpICYmIG5vcm1hbGl6ZWQubGVuZ3RoID4gMSkge1xuICAgIG5vcm1hbGl6ZWQgPSBub3JtYWxpemVkLnNsaWNlKDAsIC0xKTtcbiAgfVxuICBcbiAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG59XG5cbi8qKlxuICogRXh0cmFjdCByZWxhdGl2ZSBwYXRoIGZyb20gYWJzb2x1dGUgcGF0aFxuICogSGFuZGxlcyB2YXJpb3VzIENJL0NEIGFuZCBsb2NhbCBkZXZlbG9wbWVudCBwYXRoIGZvcm1hdHNcbiAqL1xuZnVuY3Rpb24gZ2V0UmVsYXRpdmVQYXRoKGFic29sdXRlUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZVBhdGgoYWJzb2x1dGVQYXRoKTtcbiAgXG4gIC8vIElmIGFscmVhZHkgYSByZWxhdGl2ZSBwYXRoLCByZXR1cm4gYXMtaXNcbiAgaWYgKCFub3JtYWxpemVkLnN0YXJ0c1dpdGgoJy8nKSAmJiAhbm9ybWFsaXplZC5tYXRjaCgvXltBLVpdOi9pKSkge1xuICAgIHJldHVybiBub3JtYWxpemVkO1xuICB9XG4gIFxuICAvLyBEZWZpbmUgY29tbW9uIHByb2plY3Qgc291cmNlIGRpcmVjdG9yaWVzXG4gIGNvbnN0IHByb2plY3REaXJzID0gWydzcmMvJywgJ19fdGVzdHNfXy8nLCAnc2NyaXB0cy8nLCAnZG9jcy8nLCAndGVzdC8nLCAndGVzdHMvJywgJ2xpYi8nXTtcbiAgXG4gIC8vIEZpbmQgdGhlIHBvc2l0aW9uIG9mIGNvbW1vbiBwcm9qZWN0IGRpcmVjdG9yaWVzIGluIHRoZSBwYXRoXG4gIGxldCBiZXN0TWF0Y2ggPSB7IGluZGV4OiAtMSwgZGlyOiAnJywgcmVsYXRpdmVQYXRoOiAnJyB9O1xuICBcbiAgZm9yIChjb25zdCBkaXIgb2YgcHJvamVjdERpcnMpIHtcbiAgICAvLyBMb29rIGZvciAvZGlyIHBhdHRlcm4gKHdpdGggbGVhZGluZyBzbGFzaCB0byBhdm9pZCBmYWxzZSBtYXRjaGVzKVxuICAgIGNvbnN0IHNlYXJjaFBhdHRlcm4gPSBgLyR7ZGlyfWA7XG4gICAgY29uc3QgaW5kZXggPSBub3JtYWxpemVkLmxhc3RJbmRleE9mKHNlYXJjaFBhdHRlcm4pO1xuICAgIFxuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAvLyBFeHRyYWN0IGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIHBhcmVudCBvZiB0aGlzIGRpcmVjdG9yeVxuICAgICAgLy8gRm9yIGV4YW1wbGU6IC9ob21lL3VzZXIvcHJvamVjdC9zcmMvZmlsZS50cyAtPiBzcmMvZmlsZS50c1xuICAgICAgY29uc3QgZGlyU3RhcnRJbmRleCA9IGluZGV4ICsgMTsgLy8gU2tpcCB0aGUgbGVhZGluZyBzbGFzaFxuICAgICAgY29uc3QgcmVsYXRpdmVQYXRoID0gbm9ybWFsaXplZC5zdWJzdHJpbmcoZGlyU3RhcnRJbmRleCk7XG4gICAgICBcbiAgICAgIC8vIFZlcmlmeSB0aGlzIGxvb2tzIGxpa2UgYSB2YWxpZCBwcm9qZWN0IGZpbGVcbiAgICAgIGlmIChyZWxhdGl2ZVBhdGguc3RhcnRzV2l0aChkaXIpICYmIHJlbGF0aXZlUGF0aC5pbmNsdWRlcygnLicpKSB7XG4gICAgICAgIC8vIEtlZXAgdGhlIG1hdGNoIHRoYXQgYXBwZWFycyBsYXRlc3QgaW4gdGhlIHBhdGggKG1vc3Qgc3BlY2lmaWMpXG4gICAgICAgIGlmIChpbmRleCA+IGJlc3RNYXRjaC5pbmRleCkge1xuICAgICAgICAgIGJlc3RNYXRjaCA9IHsgaW5kZXgsIGRpciwgcmVsYXRpdmVQYXRoIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgXG4gIC8vIElmIHdlIGZvdW5kIGEgbWF0Y2gsIHJldHVybiBpdFxuICBpZiAoYmVzdE1hdGNoLmluZGV4ID49IDApIHtcbiAgICByZXR1cm4gYmVzdE1hdGNoLnJlbGF0aXZlUGF0aDtcbiAgfVxuICBcbiAgLy8gRmFsbGJhY2s6IFRyeSB0byBmaW5kIGNvbW1vbiBmaWxlIHBhdHRlcm5zIHRoYXQgaW5kaWNhdGUgcHJvamVjdCBmaWxlc1xuICBjb25zdCBmaWxlUGF0dGVybnMgPSBbXG4gICAgL1xcLyhzcmN8X190ZXN0c19ffHNjcmlwdHN8dGVzdHx0ZXN0c3xsaWIpXFwvLipcXC5banRdc3g/JC8sXG4gICAgL1xcLyhzcmN8X190ZXN0c19ffHNjcmlwdHN8dGVzdHx0ZXN0c3xsaWIpXFwvLipcXC5qc29uJC8sXG4gICAgL1xcLyhzcmN8X190ZXN0c19ffHNjcmlwdHN8dGVzdHx0ZXN0c3xsaWIpXFwvLipcXC55YT9tbCQvLFxuICAgIC9cXC9wYWNrYWdlXFwuanNvbiQvLFxuICAgIC9cXC9wYWNrYWdlLWxvY2tcXC5qc29uJC8sXG4gICAgL1xcL3RzY29uZmlnLipcXC5qc29uJC8sXG4gICAgL1xcL1xcLi4qcmNcXC5qc29uJC8gIC8vIC5lc2xpbnRyYy5qc29uLCBldGMuXG4gIF07XG4gIFxuICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgZmlsZVBhdHRlcm5zKSB7XG4gICAgY29uc3QgbWF0Y2ggPSBub3JtYWxpemVkLm1hdGNoKHBhdHRlcm4pO1xuICAgIGlmIChtYXRjaCkge1xuICAgICAgLy8gRmluZCB3aGVyZSB0aGUgbWF0Y2ggc3RhcnRzIGFuZCBleHRyYWN0IGZyb20gdGhlcmVcbiAgICAgIGNvbnN0IG1hdGNoSW5kZXggPSBub3JtYWxpemVkLmluZGV4T2YobWF0Y2hbMF0pO1xuICAgICAgaWYgKG1hdGNoSW5kZXggPj0gMCkge1xuICAgICAgICByZXR1cm4gbm9ybWFsaXplZC5zdWJzdHJpbmcobWF0Y2hJbmRleCArIDEpOyAvLyBTa2lwIGxlYWRpbmcgL1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBcbiAgLy8gTGFzdCByZXNvcnQ6IGlmIHBhdGggY29udGFpbnMgY29tbW9uIGV4dGVuc2lvbnMsIHRyeSB0byBleHRyYWN0IGEgcmVhc29uYWJsZSByZWxhdGl2ZSBwYXRoXG4gIGlmIChub3JtYWxpemVkLm1hdGNoKC9cXC4odHN8anN8dHN4fGpzeHxqc29ufHlhbWx8eW1sKSQvKSkge1xuICAgIC8vIEZpbmQgdGhlIGxhc3Qgc2VnbWVudCB0aGF0IGxvb2tzIGxpa2UgYSBwcm9qZWN0IGRpcmVjdG9yeVxuICAgIGNvbnN0IHNlZ21lbnRzID0gbm9ybWFsaXplZC5zcGxpdCgnLycpO1xuICAgIGZvciAobGV0IGkgPSBzZWdtZW50cy5sZW5ndGggLSAyOyBpID49IDA7IGktLSkge1xuICAgICAgaWYgKHByb2plY3REaXJzLnNvbWUoZGlyID0+IGRpci5zdGFydHNXaXRoKHNlZ21lbnRzW2ldKSkpIHtcbiAgICAgICAgcmV0dXJuIHNlZ21lbnRzLnNsaWNlKGkpLmpvaW4oJy8nKTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gRm9yIHJvb3QtbGV2ZWwgZmlsZXMgbGlrZSBwYWNrYWdlLWxvY2suanNvbiwganVzdCByZXR1cm4gdGhlIGZpbGVuYW1lXG4gICAgY29uc3QgZmlsZW5hbWUgPSBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAxXTtcbiAgICBpZiAoZmlsZW5hbWUgJiYgZmlsZW5hbWUuaW5jbHVkZXMoJy4nKSkge1xuICAgICAgcmV0dXJuIGZpbGVuYW1lO1xuICAgIH1cbiAgfVxuICBcbiAgLy8gUmV0dXJuIHRoZSBub3JtYWxpemVkIHBhdGggaWYgd2UgY2FuJ3QgZXh0cmFjdCByZWxhdGl2ZVxuICByZXR1cm4gbm9ybWFsaXplZDtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhIGZpbmRpbmcgc2hvdWxkIGJlIHN1cHByZXNzZWRcbiAqIE9wdGltaXplZCB3aXRoIGNhY2hpbmcgYW5kIGVhcmx5IHJldHVybnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNob3VsZFN1cHByZXNzKHJ1bGVJZDogc3RyaW5nLCBmaWxlUGF0aD86IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAoIWZpbGVQYXRoKSByZXR1cm4gZmFsc2U7XG4gIFxuICAvLyBOb3JtYWxpemUgcGF0aHMgZm9yIGNvbnNpc3RlbnQgbWF0Y2hpbmdcbiAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBub3JtYWxpemVQYXRoKGZpbGVQYXRoKTtcbiAgY29uc3QgcmVsYXRpdmVQYXRoID0gZ2V0UmVsYXRpdmVQYXRoKG5vcm1hbGl6ZWRQYXRoKTtcbiAgXG4gIC8vIENoZWNrIGNhY2hlIGZpcnN0XG4gIGNvbnN0IGNhY2hlZCA9IGNhY2hlLmdldChydWxlSWQsIHJlbGF0aXZlUGF0aCk7XG4gIGlmIChjYWNoZWQgIT09IHVuZGVmaW5lZCkgcmV0dXJuIGNhY2hlZDtcbiAgXG4gIC8vIFByb2Nlc3Mgc3VwcHJlc3Npb25zIHdpdGggZWFybHkgcmV0dXJuc1xuICBmb3IgKGNvbnN0IHN1cHByZXNzaW9uIG9mIHN1cHByZXNzaW9ucykge1xuICAgIC8vIFNraXAgaWYgcnVsZSBkb2Vzbid0IG1hdGNoXG4gICAgaWYgKHN1cHByZXNzaW9uLnJ1bGUgIT09ICcqJyAmJiBzdXBwcmVzc2lvbi5ydWxlICE9PSBydWxlSWQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBcbiAgICAvLyBIYW5kbGUgZ2xvYmFsIHN1cHByZXNzaW9ucyAobm8gZmlsZSBzcGVjaWZpZWQpXG4gICAgaWYgKCFzdXBwcmVzc2lvbi5maWxlKSB7XG4gICAgICBjYWNoZS5zZXQocnVsZUlkLCByZWxhdGl2ZVBhdGgsIHRydWUpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIFxuICAgIC8vIENoZWNrIGV4YWN0IGZpbGUgbWF0Y2ggKG1vc3QgY29tbW9uIGNhc2UpXG4gICAgaWYgKHN1cHByZXNzaW9uLmZpbGUgPT09IHJlbGF0aXZlUGF0aCB8fCBzdXBwcmVzc2lvbi5maWxlID09PSBub3JtYWxpemVkUGF0aCkge1xuICAgICAgY2FjaGUuc2V0KHJ1bGVJZCwgcmVsYXRpdmVQYXRoLCB0cnVlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBcbiAgICAvLyBDaGVjayBwYXR0ZXJuIG1hdGNoIG9ubHkgaWYgZmlsZSBjb250YWlucyB3aWxkY2FyZHNcbiAgICBpZiAoc3VwcHJlc3Npb24uZmlsZS5pbmNsdWRlcygnKicpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZWdleCA9IGdsb2JUb1JlZ2V4KHN1cHByZXNzaW9uLmZpbGUpO1xuICAgICAgICBpZiAocmVnZXgudGVzdChyZWxhdGl2ZVBhdGgpIHx8IHJlZ2V4LnRlc3Qobm9ybWFsaXplZFBhdGgpKSB7XG4gICAgICAgICAgY2FjaGUuc2V0KHJ1bGVJZCwgcmVsYXRpdmVQYXRoLCB0cnVlKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKGBJbnZhbGlkIHN1cHByZXNzaW9uIHBhdHRlcm4gXCIke3N1cHByZXNzaW9uLmZpbGV9XCI6YCwgZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBcbiAgLy8gTm90IHN1cHByZXNzZWRcbiAgY2FjaGUuc2V0KHJ1bGVJZCwgcmVsYXRpdmVQYXRoLCBmYWxzZSk7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDbGVhciBzdXBwcmVzc2lvbiBjYWNoZSAodXNlZnVsIGZvciB0ZXN0aW5nKVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJTdXBwcmVzc2lvbkNhY2hlKCk6IHZvaWQge1xuICBjYWNoZS5jbGVhcigpO1xufVxuXG4vKipcbiAqIEdldCBzdXBwcmVzc2lvbiBzdGF0aXN0aWNzIGZvciByZXBvcnRpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN1cHByZXNzaW9uU3RhdHMoKTogeyBcbiAgdG90YWw6IG51bWJlcjsgXG4gIGJ5UnVsZTogUmVjb3JkPHN0cmluZywgbnVtYmVyPjtcbiAgYnlDYXRlZ29yeTogUmVjb3JkPHN0cmluZywgbnVtYmVyPjtcbn0ge1xuICBjb25zdCBzdGF0cyA9IHtcbiAgICB0b3RhbDogc3VwcHJlc3Npb25zLmxlbmd0aCxcbiAgICBieVJ1bGU6IHt9IGFzIFJlY29yZDxzdHJpbmcsIG51bWJlcj4sXG4gICAgYnlDYXRlZ29yeToge30gYXMgUmVjb3JkPHN0cmluZywgbnVtYmVyPlxuICB9O1xuICBcbiAgZm9yIChjb25zdCBzdXBwcmVzc2lvbiBvZiBzdXBwcmVzc2lvbnMpIHtcbiAgICAvLyBDb3VudCBieSBydWxlXG4gICAgc3RhdHMuYnlSdWxlW3N1cHByZXNzaW9uLnJ1bGVdID0gKHN0YXRzLmJ5UnVsZVtzdXBwcmVzc2lvbi5ydWxlXSB8fCAwKSArIDE7XG4gICAgXG4gICAgLy8gQ291bnQgYnkgY2F0ZWdvcnkgKGV4dHJhY3QgZnJvbSBydWxlIHByZWZpeClcbiAgICBjb25zdCBjYXRlZ29yeSA9IHN1cHByZXNzaW9uLnJ1bGUuc3BsaXQoJy0nKVswXTtcbiAgICBzdGF0cy5ieUNhdGVnb3J5W2NhdGVnb3J5XSA9IChzdGF0cy5ieUNhdGVnb3J5W2NhdGVnb3J5XSB8fCAwKSArIDE7XG4gIH1cbiAgXG4gIHJldHVybiBzdGF0cztcbn1cblxuLy8gVmFsaWRhdGUgc3VwcHJlc3Npb25zIG9uIG1vZHVsZSBsb2FkXG5jb25zdCB2YWxpZGF0aW9uRXJyb3JzID0gdmFsaWRhdGVTdXBwcmVzc2lvbnMoKTtcbmlmICh2YWxpZGF0aW9uRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgbG9nZ2VyLndhcm4oJ1N1cHByZXNzaW9uIGNvbmZpZ3VyYXRpb24gd2FybmluZ3M6JywgdmFsaWRhdGlvbkVycm9ycyk7XG59Il19
@@ -1,5 +1,31 @@
1
1
  /**
2
- * Secure YAML Parser for DollhouseMCP
2
+ * Secure YAML Parser for DollhouseMCP - For Markdown Files with YAML Frontmatter
3
+ *
4
+ * IMPORTANT: This parser is specifically designed for Markdown files with YAML frontmatter
5
+ * (the format used by personas, skills, templates, and other elements).
6
+ *
7
+ * USE THIS FOR:
8
+ * - Persona files (e.g., creative-writer.md)
9
+ * - Skill files (e.g., code-review.md)
10
+ * - Template files (e.g., meeting-notes.md)
11
+ * - Any Markdown file with YAML frontmatter between --- markers
12
+ *
13
+ * DO NOT USE THIS FOR:
14
+ * - Pure YAML configuration files (use js-yaml directly with FAILSAFE_SCHEMA)
15
+ * - JSON files
16
+ * - Plain text files without frontmatter
17
+ *
18
+ * FILE FORMAT EXPECTED:
19
+ * ```
20
+ * ---
21
+ * name: Element Name
22
+ * description: Element description
23
+ * version: 1.0.0
24
+ * ---
25
+ *
26
+ * # Markdown content here
27
+ * The actual content/instructions go here...
28
+ * ```
3
29
  *
4
30
  * Provides safe YAML parsing that prevents deserialization attacks
5
31
  * by using a restricted schema and pre-validation.
@@ -24,7 +50,25 @@ export declare class SecureYamlParser {
24
50
  private static readonly SAFE_SCHEMA;
25
51
  private static readonly FIELD_VALIDATORS;
26
52
  /**
27
- * Securely parse content with YAML frontmatter
53
+ * Parse a Markdown file with YAML frontmatter (Securely)
54
+ *
55
+ * @param input - The full content of a Markdown file with YAML frontmatter
56
+ * @param options - Parsing options for security and validation
57
+ * @returns ParsedContent with separated YAML data and Markdown content
58
+ *
59
+ * @example
60
+ * ```typescript
61
+ * // For a persona file:
62
+ * const personaFile = `---
63
+ * name: Creative Writer
64
+ * description: A creative writing assistant
65
+ * ---
66
+ * You are a creative writer...`;
67
+ *
68
+ * const result = SecureYamlParser.parse(personaFile);
69
+ * // result.data = { name: 'Creative Writer', description: '...' }
70
+ * // result.content = 'You are a creative writer...'
71
+ * ```
28
72
  */
29
73
  static parse(input: string, options?: SecureParseOptions): ParsedContent;
30
74
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"secureYamlParser.d.ts","sourceRoot":"","sources":["../../src/security/secureYamlParser.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,MAAM,MAAM,aAAa,CAAC;AAKjC,MAAM,WAAW,kBAAkB;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAKrC;IAGF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAoB;IAGvD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAoCtC;IAEF;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB,GAAG,aAAa;IA8G5E;;OAEG;IACH,MAAM,CAAC,wBAAwB;uBAEZ,MAAM;;;;;;6BASA,MAAM,QAAQ,GAAG;;IAoB1C;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC;CAgChH"}
1
+ {"version":3,"file":"secureYamlParser.d.ts","sourceRoot":"","sources":["../../src/security/secureYamlParser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAGH,OAAO,MAAM,MAAM,aAAa,CAAC;AAKjC,MAAM,WAAW,kBAAkB;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAKrC;IAGF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAoB;IAGvD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAoCtC;IAEF;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB,GAAG,aAAa;IA8G5E;;OAEG;IACH,MAAM,CAAC,wBAAwB;uBAEZ,MAAM;;;;;;6BASA,MAAM,QAAQ,GAAG;;IAoB1C;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC;CAgChH"}
@@ -1,5 +1,31 @@
1
1
  /**
2
- * Secure YAML Parser for DollhouseMCP
2
+ * Secure YAML Parser for DollhouseMCP - For Markdown Files with YAML Frontmatter
3
+ *
4
+ * IMPORTANT: This parser is specifically designed for Markdown files with YAML frontmatter
5
+ * (the format used by personas, skills, templates, and other elements).
6
+ *
7
+ * USE THIS FOR:
8
+ * - Persona files (e.g., creative-writer.md)
9
+ * - Skill files (e.g., code-review.md)
10
+ * - Template files (e.g., meeting-notes.md)
11
+ * - Any Markdown file with YAML frontmatter between --- markers
12
+ *
13
+ * DO NOT USE THIS FOR:
14
+ * - Pure YAML configuration files (use js-yaml directly with FAILSAFE_SCHEMA)
15
+ * - JSON files
16
+ * - Plain text files without frontmatter
17
+ *
18
+ * FILE FORMAT EXPECTED:
19
+ * ```
20
+ * ---
21
+ * name: Element Name
22
+ * description: Element description
23
+ * version: 1.0.0
24
+ * ---
25
+ *
26
+ * # Markdown content here
27
+ * The actual content/instructions go here...
28
+ * ```
3
29
  *
4
30
  * Provides safe YAML parsing that prevents deserialization attacks
5
31
  * by using a restricted schema and pre-validation.
@@ -57,7 +83,25 @@ export class SecureYamlParser {
57
83
  content_flags: (v) => Array.isArray(v) && v.every(f => typeof f === 'string' && f.length <= 50)
58
84
  };
59
85
  /**
60
- * Securely parse content with YAML frontmatter
86
+ * Parse a Markdown file with YAML frontmatter (Securely)
87
+ *
88
+ * @param input - The full content of a Markdown file with YAML frontmatter
89
+ * @param options - Parsing options for security and validation
90
+ * @returns ParsedContent with separated YAML data and Markdown content
91
+ *
92
+ * @example
93
+ * ```typescript
94
+ * // For a persona file:
95
+ * const personaFile = `---
96
+ * name: Creative Writer
97
+ * description: A creative writing assistant
98
+ * ---
99
+ * You are a creative writer...`;
100
+ *
101
+ * const result = SecureYamlParser.parse(personaFile);
102
+ * // result.data = { name: 'Creative Writer', description: '...' }
103
+ * // result.content = 'You are a creative writer...'
104
+ * ```
61
105
  */
62
106
  static parse(input, options = {}) {
63
107
  const opts = { ...this.DEFAULT_OPTIONS, ...options };
@@ -222,4 +266,4 @@ export class SecureYamlParser {
222
266
  });
223
267
  }
224
268
  }
225
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJlWWFtbFBhcnNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZWN1cml0eS9zZWN1cmVZYW1sUGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0dBT0c7QUFFSCxPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUNoQyxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFDakMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQWdCdkQsTUFBTSxPQUFPLGdCQUFnQjtJQUNuQixNQUFNLENBQVUsZUFBZSxHQUF1QjtRQUM1RCxXQUFXLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBTyxnQkFBZ0I7UUFDN0MsY0FBYyxFQUFFLElBQUksR0FBRyxJQUFJLEVBQUcsa0JBQWtCO1FBQ2hELGVBQWUsRUFBRSxJQUFJO1FBQ3JCLGNBQWMsRUFBRSxJQUFJLENBQVMscUNBQXFDO0tBQ25FLENBQUM7SUFFRixtR0FBbUc7SUFDM0YsTUFBTSxDQUFVLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBRXZELG9EQUFvRDtJQUM1QyxNQUFNLENBQVUsZ0JBQWdCLEdBQTRDO1FBQ2xGLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksR0FBRztRQUNyRCxXQUFXLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLEdBQUc7UUFDNUQsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FB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WixDQUFDO3dCQUNELE9BQU8sTUFBZ0IsQ0FBQztvQkFDMUIsQ0FBQztvQkFDRCxTQUFTLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTt3QkFDdEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTs0QkFDcEIsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXOzRCQUN4QixXQUFXLEVBQUUsSUFBSTs0QkFDakIsTUFBTSxFQUFFLElBQUk7eUJBQ2IsQ0FBQyxDQUFDO29CQUNMLENBQUM7aUJBQ0Y7YUFDRjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNlY3VyZSBZQU1MIFBhcnNlciBmb3IgRG9sbGhvdXNlTUNQXG4gKiBcbiAqIFByb3ZpZGVzIHNhZmUgWUFNTCBwYXJzaW5nIHRoYXQgcHJldmVudHMgZGVzZXJpYWxpemF0aW9uIGF0dGFja3NcbiAqIGJ5IHVzaW5nIGEgcmVzdHJpY3RlZCBzY2hlbWEgYW5kIHByZS12YWxpZGF0aW9uLlxuICogXG4gKiBTZWN1cml0eTogU0VDLTAwMyAtIFlBTUwgcGFyc2luZyB2dWxuZXJhYmlsaXR5IHByb3RlY3Rpb25cbiAqL1xuXG5pbXBvcnQgKiBhcyB5YW1sIGZyb20gJ2pzLXlhbWwnO1xuaW1wb3J0IG1hdHRlciBmcm9tICdncmF5LW1hdHRlcic7XG5pbXBvcnQgeyBTZWN1cml0eUVycm9yIH0gZnJvbSAnLi4vZXJyb3JzL1NlY3VyaXR5RXJyb3IuanMnO1xuaW1wb3J0IHsgQ29udGVudFZhbGlkYXRvciB9IGZyb20gJy4vY29udGVudFZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tICcuL3NlY3VyaXR5TW9uaXRvci5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VjdXJlUGFyc2VPcHRpb25zIHtcbiAgbWF4WWFtbFNpemU/OiBudW1iZXI7XG4gIG1heENvbnRlbnRTaXplPzogbnVtYmVyO1xuICBhbGxvd2VkS2V5cz86IHN0cmluZ1tdO1xuICB2YWxpZGF0ZUNvbnRlbnQ/OiBib29sZWFuO1xuICB2YWxpZGF0ZUZpZWxkcz86IGJvb2xlYW47IC8vIFdoZXRoZXIgdG8gYXBwbHkgZmllbGQtc3BlY2lmaWMgdmFsaWRhdG9ycyAoZm9yIHBlcnNvbmEgbWV0YWRhdGEpXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkQ29udGVudCB7XG4gIGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGNvbnRlbnQ6IHN0cmluZztcbiAgZXhjZXJwdD86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFNlY3VyZVlhbWxQYXJzZXIge1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERUZBVUxUX09QVElPTlM6IFNlY3VyZVBhcnNlT3B0aW9ucyA9IHtcbiAgICBtYXhZYW1sU2l6ZTogNjQgKiAxMDI0LCAgICAgIC8vIDY0S0IgZm9yIFlBTUxcbiAgICBtYXhDb250ZW50U2l6ZTogMTAyNCAqIDEwMjQsICAvLyAxTUIgZm9yIGNvbnRlbnRcbiAgICB2YWxpZGF0ZUNvbnRlbnQ6IHRydWUsXG4gICAgdmFsaWRhdGVGaWVsZHM6IHRydWUgICAgICAgICAvLyBCeSBkZWZhdWx0LCBhcHBseSBmaWVsZCB2YWxpZGF0b3JzXG4gIH07XG5cbiAgLy8gQWxsb3dlZCBZQU1MIHR5cGVzIC0gdXNpbmcgQ09SRV9TQ0hFTUEgKHNhZmUgc3Vic2V0IHdpdGggYmFzaWMgdHlwZXMgbGlrZSBib29sZWFucyBhbmQgaW50ZWdlcnMpXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFNBRkVfU0NIRU1BID0geWFtbC5DT1JFX1NDSEVNQTtcblxuICAvLyBBZGRpdGlvbmFsIHZhbGlkYXRpb24gZm9yIHNwZWNpZmljIHBlcnNvbmEgZmllbGRzXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEZJRUxEX1ZBTElEQVRPUlM6IFJlY29yZDxzdHJpbmcsICh2YWx1ZTogYW55KSA9PiBib29sZWFuPiA9IHtcbiAgICBuYW1lOiAodikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnICYmIHYubGVuZ3RoIDw9IDEwMCxcbiAgICBkZXNjcmlwdGlvbjogKHYpID0+IHR5cGVvZiB2ID09PSAnc3RyaW5nJyAmJiB2Lmxlbmd0aCA8PSA1MDAsXG4gICAgYXV0aG9yOiAodikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnICYmIHYubGVuZ3RoIDw9IDEwMCxcbiAgICB2ZXJzaW9uOiAodikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnICYmIC9eXFxkK1xcLlxcZCsoXFwuXFxkKyk/KC1bYS16QS1aMC05Li1dKyk/JC8udGVzdCh2KSxcbiAgICBjYXRlZ29yeTogKHYpID0+IHR5cGVvZiB2ID09PSAnc3RyaW5nJyAmJiB2Lmxlbmd0aCA8PSA1MCxcbiAgICBhZ2VfcmF0aW5nOiAodikgPT4gWydhbGwnLCAnMTMrJywgJzE4KyddLmluY2x1ZGVzKHYpLFxuICAgIHByaWNlOiAodikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnICYmICh2ID09PSAnZnJlZScgfHwgL15cXCRcXGQrXFwuXFxkezJ9JC8udGVzdCh2KSksXG4gICAgYWlfZ2VuZXJhdGVkOiAodikgPT4gdHlwZW9mIHYgPT09ICdib29sZWFuJyB8fCB2ID09PSAndHJ1ZScgfHwgdiA9PT0gJ2ZhbHNlJyxcbiAgICBnZW5lcmF0aW9uX21ldGhvZDogKHYpID0+IFsnaHVtYW4nLCAnQ2hhdEdQVCcsICdDbGF1ZGUnLCAnaHlicmlkJ10uaW5jbHVkZXModiksXG4gICAgY3JlYXRlZF9kYXRlOiAodikgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB2ICE9PSAnc3RyaW5nJykgcmV0dXJuIGZhbHNlO1xuICAgICAgXG4gICAgICAvLyBNb3JlIGZsZXhpYmxlIGRhdGUgdmFsaWRhdGlvbiAtIGFjY2VwdCBjb21tb24gZm9ybWF0c1xuICAgICAgLy8gSVNPODYwMSwgVVMgZm9ybWF0LCBFdXJvcGVhbiBmb3JtYXQsIHNpbXBsZSBkYXRlc1xuICAgICAgY29uc3QgZGF0ZVBhdHRlcm5zID0gW1xuICAgICAgICAvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9JC8sIC8vIFlZWVktTU0tRERcbiAgICAgICAgL15cXGR7NH0tXFxkezJ9LVxcZHsyfVRcXGR7Mn06XFxkezJ9OlxcZHsyfS8sIC8vIElTTzg2MDEgd2l0aCB0aW1lXG4gICAgICAgIC9eXFxkezEsMn1cXC9cXGR7MSwyfVxcL1xcZHs0fSQvLCAvLyBNTS9ERC9ZWVlZIG9yIE0vRC9ZWVlZXG4gICAgICAgIC9eXFxkezEsMn0tXFxkezEsMn0tXFxkezR9JC8sIC8vIE1NLURELVlZWVkgb3IgTS1ELVlZWVlcbiAgICAgICAgL15cXGR7MSwyfVxcLlxcZHsxLDJ9XFwuXFxkezR9JC8sIC8vIERELk1NLllZWVkgKEV1cm9wZWFuKVxuICAgICAgICAvXihKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYylcXHMrXFxkezEsMn0sP1xccytcXGR7NH0kL2kgLy8gTW9udGggREQsIFlZWVlcbiAgICAgIF07XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGlmIGl0IG1hdGNoZXMgY29tbW9uIHBhdHRlcm5zIGZpcnN0XG4gICAgICBjb25zdCBtYXRjaGVzUGF0dGVybiA9IGRhdGVQYXR0ZXJucy5zb21lKHBhdHRlcm4gPT4gcGF0dGVybi50ZXN0KHYudHJpbSgpKSk7XG4gICAgICBpZiAoIW1hdGNoZXNQYXR0ZXJuKSB7XG4gICAgICAgIC8vIEZhbGwgYmFjayB0byBEYXRlLnBhcnNlIGZvciBvdGhlciBmb3JtYXRzLCBidXQgYmUgbW9yZSBsZW5pZW50XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IERhdGUucGFyc2Uodik7XG4gICAgICAgIHJldHVybiAhaXNOYU4ocGFyc2VkKSAmJiBwYXJzZWQgPiAwOyAvLyBFbnN1cmUgaXQncyBhIHZhbGlkIHBvc2l0aXZlIHRpbWVzdGFtcFxuICAgICAgfVxuICAgICAgXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIHRyaWdnZXJzOiAodikgPT4gQXJyYXkuaXNBcnJheSh2KSAmJiB2LmV2ZXJ5KHQgPT4gdHlwZW9mIHQgPT09ICdzdHJpbmcnICYmIHQubGVuZ3RoIDw9IDUwKSxcbiAgICBjb250ZW50X2ZsYWdzOiAodikgPT4gQXJyYXkuaXNBcnJheSh2KSAmJiB2LmV2ZXJ5KGYgPT4gdHlwZW9mIGYgPT09ICdzdHJpbmcnICYmIGYubGVuZ3RoIDw9IDUwKVxuICB9O1xuXG4gIC8qKlxuICAgKiBTZWN1cmVseSBwYXJzZSBjb250ZW50IHdpdGggWUFNTCBmcm9udG1hdHRlclxuICAgKi9cbiAgc3RhdGljIHBhcnNlKGlucHV0OiBzdHJpbmcsIG9wdGlvbnM6IFNlY3VyZVBhcnNlT3B0aW9ucyA9IHt9KTogUGFyc2VkQ29udGVudCB7XG4gICAgY29uc3Qgb3B0cyA9IHsgLi4udGhpcy5ERUZBVUxUX09QVElPTlMsIC4uLm9wdGlvbnMgfTtcblxuICAgIC8vIDEuIFNpemUgdmFsaWRhdGlvblxuICAgIGlmIChpbnB1dC5sZW5ndGggPiAob3B0cy5tYXhDb250ZW50U2l6ZSB8fCB0aGlzLkRFRkFVTFRfT1BUSU9OUy5tYXhDb250ZW50U2l6ZSEpKSB7XG4gICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFcnJvcignQ29udGVudCBleGNlZWRzIG1heGltdW0gYWxsb3dlZCBzaXplJywgJ21lZGl1bScpO1xuICAgIH1cblxuICAgIC8vIDIuIEV4dHJhY3QgZnJvbnRtYXR0ZXIgYm91bmRhcmllc1xuICAgIGNvbnN0IGZyb250bWF0dGVyTWF0Y2ggPSBpbnB1dC5tYXRjaCgvXi0tLVxcbihbXFxzXFxTXSo/KVxcbi0tLS8pO1xuICAgIGlmICghZnJvbnRtYXR0ZXJNYXRjaCkge1xuICAgICAgLy8gTm8gZnJvbnRtYXR0ZXIsIHJldHVybiBlbXB0eSBkYXRhXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiB7fSxcbiAgICAgICAgY29udGVudDogaW5wdXRcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgeWFtbENvbnRlbnQgPSBmcm9udG1hdHRlck1hdGNoWzFdO1xuICAgIGNvbnN0IG1hcmtkb3duQ29udGVudCA9IGlucHV0LnN1YnN0cmluZyhmcm9udG1hdHRlck1hdGNoWzBdLmxlbmd0aCk7XG5cbiAgICAvLyAzLiBWYWxpZGF0ZSBZQU1MIHNpemVcbiAgICBpZiAoeWFtbENvbnRlbnQubGVuZ3RoID4gKG9wdHMubWF4WWFtbFNpemUgfHwgdGhpcy5ERUZBVUxUX09QVElPTlMubWF4WWFtbFNpemUhKSkge1xuICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXJyb3IoJ1lBTUwgZnJvbnRtYXR0ZXIgZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQgc2l6ZScsICdtZWRpdW0nKTtcbiAgICB9XG5cbiAgICAvLyA0LiBQcmUtcGFyc2Ugc2VjdXJpdHkgdmFsaWRhdGlvblxuICAgIGlmICghQ29udGVudFZhbGlkYXRvci52YWxpZGF0ZVlhbWxDb250ZW50KHlhbWxDb250ZW50KSkge1xuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnWUFNTF9JTkpFQ1RJT05fQVRURU1QVCcsXG4gICAgICAgIHNldmVyaXR5OiAnQ1JJVElDQUwnLFxuICAgICAgICBzb3VyY2U6ICdzZWN1cmVfeWFtbF9wYXJzZXInLFxuICAgICAgICBkZXRhaWxzOiAnTWFsaWNpb3VzIFlBTUwgcGF0dGVybiBkZXRlY3RlZCBkdXJpbmcgcGFyc2luZydcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXJyb3IoJ01hbGljaW91cyBZQU1MIGNvbnRlbnQgZGV0ZWN0ZWQnLCAnY3JpdGljYWwnKTtcbiAgICB9XG5cbiAgICAvLyA1LiBQYXJzZSB3aXRoIHNhZmUgc2NoZW1hXG4gICAgbGV0IGRhdGE6IGFueTtcbiAgICB0cnkge1xuICAgICAgZGF0YSA9IHlhbWwubG9hZCh5YW1sQ29udGVudCwge1xuICAgICAgICBzY2hlbWE6IHRoaXMuU0FGRV9TQ0hFTUEsXG4gICAgICAgIGpzb246IGZhbHNlLCAgLy8gRG9uJ3QgYWxsb3cgSlNPTi1zcGVjaWZpYyB0eXBlc1xuICAgICAgICBvbldhcm5pbmc6ICh3YXJuaW5nKSA9PiB7XG4gICAgICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICAgICAgdHlwZTogJ1lBTUxfUEFSU0lOR19XQVJOSU5HJyxcbiAgICAgICAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgICAgICAgIHNvdXJjZTogJ3NlY3VyZV95YW1sX3BhcnNlcicsXG4gICAgICAgICAgICBkZXRhaWxzOiBgWUFNTCB3YXJuaW5nOiAke3dhcm5pbmcubWVzc2FnZX1gXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFcnJvcihgWUFNTCBwYXJzaW5nIGZhaWxlZDogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gLCAnaGlnaCcpO1xuICAgIH1cblxuICAgIC8vIDYuIEVuc3VyZSBkYXRhIGlzIGFuIG9iamVjdFxuICAgIGlmICh0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcgfHwgZGF0YSA9PT0gbnVsbCB8fCBBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFcnJvcignWUFNTCBtdXN0IGNvbnRhaW4gYW4gb2JqZWN0IGF0IHJvb3QgbGV2ZWwnLCAnbWVkaXVtJyk7XG4gICAgfVxuXG4gICAgLy8gNy4gVmFsaWRhdGUgYWxsb3dlZCBrZXlzIGlmIHNwZWNpZmllZFxuICAgIGlmIChvcHRzLmFsbG93ZWRLZXlzKSB7XG4gICAgICBjb25zdCBpbnZhbGlkS2V5cyA9IE9iamVjdC5rZXlzKGRhdGEpLmZpbHRlcihrZXkgPT4gIW9wdHMuYWxsb3dlZEtleXMhLmluY2x1ZGVzKGtleSkpO1xuICAgICAgaWYgKGludmFsaWRLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXJyb3IoYEludmFsaWQgWUFNTCBrZXlzIGRldGVjdGVkOiAke2ludmFsaWRLZXlzLmpvaW4oJywgJyl9YCwgJ21lZGl1bScpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDguIFZhbGlkYXRlIGZpZWxkIHR5cGVzIGFuZCBjb250ZW50XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGF0YSkpIHtcbiAgICAgIC8vIENoZWNrIGZpZWxkLXNwZWNpZmljIHZhbGlkYXRvcnMgb25seSBpZiBmaWVsZCB2YWxpZGF0aW9uIGlzIGVuYWJsZWRcbiAgICAgIGlmIChvcHRzLnZhbGlkYXRlRmllbGRzICYmIHRoaXMuRklFTERfVkFMSURBVE9SU1trZXldICYmICF0aGlzLkZJRUxEX1ZBTElEQVRPUlNba2V5XSh2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXJyb3IoYEludmFsaWQgdmFsdWUgZm9yIGZpZWxkICcke2tleX0nYCwgJ21lZGl1bScpO1xuICAgICAgfVxuXG4gICAgICAvLyBWYWxpZGF0ZSBzdHJpbmcgZmllbGRzIGZvciBpbmplY3Rpb24gcGF0dGVybnNcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIG9wdHMudmFsaWRhdGVDb250ZW50KSB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRpb24gPSBDb250ZW50VmFsaWRhdG9yLnZhbGlkYXRlQW5kU2FuaXRpemUodmFsdWUpO1xuICAgICAgICBpZiAoIXZhbGlkYXRpb24uaXNWYWxpZCAmJiB2YWxpZGF0aW9uLnNldmVyaXR5ID09PSAnY3JpdGljYWwnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXJyb3IoYFNlY3VyaXR5IHRocmVhdCBkZXRlY3RlZCBpbiBmaWVsZCAnJHtrZXl9J2AsICdjcml0aWNhbCcpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJlcGxhY2Ugd2l0aCBzYW5pdGl6ZWQgY29udGVudFxuICAgICAgICBkYXRhW2tleV0gPSB2YWxpZGF0aW9uLnNhbml0aXplZENvbnRlbnQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gOS4gVmFsaWRhdGUgbWFya2Rvd24gY29udGVudCBpZiByZXF1ZXN0ZWRcbiAgICBsZXQgZmluYWxDb250ZW50ID0gbWFya2Rvd25Db250ZW50O1xuICAgIGlmIChvcHRzLnZhbGlkYXRlQ29udGVudCkge1xuICAgICAgY29uc3QgY29udGVudFZhbGlkYXRpb24gPSBDb250ZW50VmFsaWRhdG9yLnZhbGlkYXRlQW5kU2FuaXRpemUobWFya2Rvd25Db250ZW50KTtcbiAgICAgIGlmICghY29udGVudFZhbGlkYXRpb24uaXNWYWxpZCAmJiBjb250ZW50VmFsaWRhdGlvbi5zZXZlcml0eSA9PT0gJ2NyaXRpY2FsJykge1xuICAgICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFcnJvcignU2VjdXJpdHkgdGhyZWF0IGRldGVjdGVkIGluIGNvbnRlbnQnLCAnY3JpdGljYWwnKTtcbiAgICAgIH1cbiAgICAgIGZpbmFsQ29udGVudCA9IGNvbnRlbnRWYWxpZGF0aW9uLnNhbml0aXplZENvbnRlbnQgfHwgbWFya2Rvd25Db250ZW50O1xuICAgIH1cblxuICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgIHR5cGU6ICdZQU1MX1BBUlNFX1NVQ0NFU1MnLFxuICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgc291cmNlOiAnc2VjdXJlX3lhbWxfcGFyc2VyJyxcbiAgICAgIGRldGFpbHM6IGBTdWNjZXNzZnVsbHkgcGFyc2VkIFlBTUwgd2l0aCAke09iamVjdC5rZXlzKGRhdGEpLmxlbmd0aH0gZmllbGRzYFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGEsXG4gICAgICBjb250ZW50OiBmaW5hbENvbnRlbnRcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHNlY3VyZSBncmF5LW1hdHRlciBjb21wYXRpYmxlIHBhcnNlclxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZVNlY3VyZU1hdHRlclBhcnNlcigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFyc2U6IChpbnB1dDogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucGFyc2UoaW5wdXQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGE6IHJlc3VsdC5kYXRhLFxuICAgICAgICAgIGNvbnRlbnQ6IHJlc3VsdC5jb250ZW50LFxuICAgICAgICAgIGV4Y2VycHQ6IHJlc3VsdC5leGNlcnB0LFxuICAgICAgICAgIG9yaWc6IGlucHV0XG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgc3RyaW5naWZ5OiAoY29udGVudDogc3RyaW5nLCBkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgLy8gVmFsaWRhdGUgZGF0YSBiZWZvcmUgc3RyaW5naWZ5aW5nXG4gICAgICAgIGNvbnN0IHZhbGlkYXRpb24gPSBDb250ZW50VmFsaWRhdG9yLnZhbGlkYXRlTWV0YWRhdGEoZGF0YSk7XG4gICAgICAgIGlmICghdmFsaWRhdGlvbi5pc1ZhbGlkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXJyb3IoJ0Nhbm5vdCBzdHJpbmdpZnkgY29udGVudCB3aXRoIHNlY3VyaXR5IHRocmVhdHMnLCAnaGlnaCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVXNlIHNhZmUgWUFNTCBkdW1wXG4gICAgICAgIGNvbnN0IHlhbWxTdHIgPSB5YW1sLmR1bXAoZGF0YSwge1xuICAgICAgICAgIHNjaGVtYTogdGhpcy5TQUZFX1NDSEVNQSxcbiAgICAgICAgICBza2lwSW52YWxpZDogdHJ1ZSxcbiAgICAgICAgICBub1JlZnM6IHRydWUsXG4gICAgICAgICAgbm9Db21wYXRNb2RlOiB0cnVlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBgLS0tXFxuJHt5YW1sU3RyfS0tLVxcbiR7Y29udGVudH1gO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU2FmZSB3cmFwcGVyIGZvciBncmF5LW1hdHRlciB3aXRoIHNlY3VyaXR5IHZhbGlkYXRpb25zXG4gICAqL1xuICBzdGF0aWMgc2FmZU1hdHRlcihpbnB1dDogc3RyaW5nLCBvcHRpb25zPzogbWF0dGVyLkdyYXlNYXR0ZXJPcHRpb248c3RyaW5nLCBhbnk+KTogbWF0dGVyLkdyYXlNYXR0ZXJGaWxlPHN0cmluZz4ge1xuICAgIC8vIEZpcnN0LCB1c2Ugb3VyIHNlY3VyZSBwYXJzZXJcbiAgICBjb25zdCBzZWN1cmVQYXJzZWQgPSB0aGlzLnBhcnNlKGlucHV0KTtcblxuICAgIC8vIFRoZW4gdXNlIGdyYXktbWF0dGVyIHdpdGggY3VzdG9tIGVuZ2luZXNcbiAgICByZXR1cm4gbWF0dGVyKGlucHV0LCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgZW5naW5lczoge1xuICAgICAgICB5YW1sOiB7XG4gICAgICAgICAgcGFyc2U6IChzdHI6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgLy8gVXNlIG91ciBzZWN1cmUgWUFNTCBwYXJzaW5nXG4gICAgICAgICAgICBjb25zdCBwYXJzZWQgPSB5YW1sLmxvYWQoc3RyLCB7XG4gICAgICAgICAgICAgIHNjaGVtYTogdGhpcy5TQUZFX1NDSEVNQSxcbiAgICAgICAgICAgICAganNvbjogZmFsc2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gRW5zdXJlIGl0J3MgYW4gb2JqZWN0XG4gICAgICAgICAgICBpZiAodHlwZW9mIHBhcnNlZCAhPT0gJ29iamVjdCcgfHwgcGFyc2VkID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwYXJzZWQgYXMgb2JqZWN0O1xuICAgICAgICAgIH0sXG4gICAgICAgICAgc3RyaW5naWZ5OiAob2JqOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB5YW1sLmR1bXAob2JqLCB7XG4gICAgICAgICAgICAgIHNjaGVtYTogdGhpcy5TQUZFX1NDSEVNQSxcbiAgICAgICAgICAgICAgc2tpcEludmFsaWQ6IHRydWUsXG4gICAgICAgICAgICAgIG5vUmVmczogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn0iXX0=
269
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJlWWFtbFBhcnNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZWN1cml0eS9zZWN1cmVZYW1sUGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQ0c7QUFFSCxPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUNoQyxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFDakMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQWdCdkQsTUFBTSxPQUFPLGdCQUFnQjtJQUNuQixNQUFNLENBQVUsZUFBZSxHQUF1QjtRQUM1RCxXQUFXLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBTyxnQkFBZ0I7UUFDN0MsY0FBYyxFQUFFLElBQUksR0FBRyxJQUFJLEVBQUcsa0JBQWtCO1FBQ2hELGVBQWUsRUFBRSxJQUFJO1FBQ3JCLGNBQWMsRUFBRSxJQUFJLENBQVMscUNBQXFDO0tBQ25FLENBQUM7SUFFRixtR0FBbUc7SUFDM0YsTUFBTSxDQUFVLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBRXZELG9EQUFvRDtJQUM1QyxNQUFNLENBQVUsZ0JBQWdCLEdBQTRDO1FBQ2xGLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksR0FBRztRQUNyRCxXQUFXLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLEdBQUc7UUFDNUQsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxP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S0FBSyxJQUFJLEVBQUUsQ0FBQzs0QkFDbEQsT0FBTyxFQUFFLENBQUM7d0JBQ1osQ0FBQzt3QkFDRCxPQUFPLE1BQWdCLENBQUM7b0JBQzFCLENBQUM7b0JBQ0QsU0FBUyxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7d0JBQ3RCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7NEJBQ3BCLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVzs0QkFDeEIsV0FBVyxFQUFFLElBQUk7NEJBQ2pCLE1BQU0sRUFBRSxJQUFJO3lCQUNiLENBQUMsQ0FBQztvQkFDTCxDQUFDO2lCQUNGO2FBQ0Y7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTZWN1cmUgWUFNTCBQYXJzZXIgZm9yIERvbGxob3VzZU1DUCAtIEZvciBNYXJrZG93biBGaWxlcyB3aXRoIFlBTUwgRnJvbnRtYXR0ZXJcbiAqIFxuICogSU1QT1JUQU5UOiBUaGlzIHBhcnNlciBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgZm9yIE1hcmtkb3duIGZpbGVzIHdpdGggWUFNTCBmcm9udG1hdHRlclxuICogKHRoZSBmb3JtYXQgdXNlZCBieSBwZXJzb25hcywgc2tpbGxzLCB0ZW1wbGF0ZXMsIGFuZCBvdGhlciBlbGVtZW50cykuXG4gKiBcbiAqIFVTRSBUSElTIEZPUjpcbiAqIC0gUGVyc29uYSBmaWxlcyAoZS5nLiwgY3JlYXRpdmUtd3JpdGVyLm1kKVxuICogLSBTa2lsbCBmaWxlcyAoZS5nLiwgY29kZS1yZXZpZXcubWQpXG4gKiAtIFRlbXBsYXRlIGZpbGVzIChlLmcuLCBtZWV0aW5nLW5vdGVzLm1kKVxuICogLSBBbnkgTWFya2Rvd24gZmlsZSB3aXRoIFlBTUwgZnJvbnRtYXR0ZXIgYmV0d2VlbiAtLS0gbWFya2Vyc1xuICogXG4gKiBETyBOT1QgVVNFIFRISVMgRk9SOlxuICogLSBQdXJlIFlBTUwgY29uZmlndXJhdGlvbiBmaWxlcyAodXNlIGpzLXlhbWwgZGlyZWN0bHkgd2l0aCBGQUlMU0FGRV9TQ0hFTUEpXG4gKiAtIEpTT04gZmlsZXNcbiAqIC0gUGxhaW4gdGV4dCBmaWxlcyB3aXRob3V0IGZyb250bWF0dGVyXG4gKiBcbiAqIEZJTEUgRk9STUFUIEVYUEVDVEVEOlxuICogYGBgXG4gKiAtLS1cbiAqIG5hbWU6IEVsZW1lbnQgTmFtZVxuICogZGVzY3JpcHRpb246IEVsZW1lbnQgZGVzY3JpcHRpb25cbiAqIHZlcnNpb246IDEuMC4wXG4gKiAtLS1cbiAqIFxuICogIyBNYXJrZG93biBjb250ZW50IGhlcmVcbiAqIFRoZSBhY3R1YWwgY29udGVudC9pbnN0cnVjdGlvbnMgZ28gaGVyZS4uLlxuICogYGBgXG4gKiBcbiAqIFByb3ZpZGVzIHNhZmUgWUFNTCBwYXJzaW5nIHRoYXQgcHJldmVudHMgZGVzZXJpYWxpemF0aW9uIGF0dGFja3NcbiAqIGJ5IHVzaW5nIGEgcmVzdHJpY3RlZCBzY2hlbWEgYW5kIHByZS12YWxpZGF0aW9uLlxuICogXG4gKiBTZWN1cml0eTogU0VDLTAwMyAtIFlBTUwgcGFyc2luZyB2dWxuZXJhYmlsaXR5IHByb3RlY3Rpb25cbiAqL1xuXG5pbXBvcnQgKiBhcyB5YW1sIGZyb20gJ2pzLXlhbWwnO1xuaW1wb3J0IG1hdHRlciBmcm9tICdncmF5LW1hdHRlcic7XG5pbXBvcnQgeyBTZWN1cml0eUVycm9yIH0gZnJvbSAnLi4vZXJyb3JzL1NlY3VyaXR5RXJyb3IuanMnO1xuaW1wb3J0IHsgQ29udGVudFZhbGlkYXRvciB9IGZyb20gJy4vY29udGVudFZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tICcuL3NlY3VyaXR5TW9uaXRvci5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VjdXJlUGFyc2VPcHRpb25zIHtcbiAgbWF4WWFtbFNpemU/OiBudW1iZXI7XG4gIG1heENvbnRlbnRTaXplPzogbnVtYmVyO1xuICBhbGxvd2VkS2V5cz86IHN0cmluZ1tdO1xuICB2YWxpZGF0ZUNvbnRlbnQ/OiBib29sZWFuO1xuICB2YWxpZGF0ZUZpZWxkcz86IGJvb2xlYW47IC8vIFdoZXRoZXIgdG8gYXBwbHkgZmllbGQtc3BlY2lmaWMgdmFsaWRhdG9ycyAoZm9yIHBlcnNvbmEgbWV0YWRhdGEpXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkQ29udGVudCB7XG4gIGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGNvbnRlbnQ6IHN0cmluZztcbiAgZXhjZXJwdD86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFNlY3VyZVlhbWxQYXJzZXIge1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERUZBVUxUX09QVElPTlM6IFNlY3VyZVBhcnNlT3B0aW9ucyA9IHtcbiAgICBtYXhZYW1sU2l6ZTogNjQgKiAxMDI0LCAgICAgIC8vIDY0S0IgZm9yIFlBTUxcbiAgICBtYXhDb250ZW50U2l6ZTogMTAyNCAqIDEwMjQsICAvLyAxTUIgZm9yIGNvbnRlbnRcbiAgICB2YWxpZGF0ZUNvbnRlbnQ6IHRydWUsXG4gICAgdmFsaWRhdGVGaWVsZHM6IHRydWUgICAgICAgICAvLyBCeSBkZWZhdWx0LCBhcHBseSBmaWVsZCB2YWxpZGF0b3JzXG4gIH07XG5cbiAgLy8gQWxsb3dlZCBZQU1MIHR5cGVzIC0gdXNpbmcgQ09SRV9TQ0hFTUEgKHNhZmUgc3Vic2V0IHdpdGggYmFzaWMgdHlwZXMgbGlrZSBib29sZWFucyBhbmQgaW50ZWdlcnMpXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFNBRkVfU0NIRU1BID0geWFtbC5DT1JFX1NDSEVNQTtcblxuICAvLyBBZGRpdGlvbmFsIHZhbGlkYXRpb24gZm9yIHNwZWNpZmljIHBlcnNvbmEgZmllbGRzXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEZJRUxEX1ZBTElEQVRPUlM6IFJlY29yZDxzdHJpbmcsICh2YWx1ZTogYW55KSA9PiBib29sZWFuPiA9IHtcbiAgICBuYW1lOiAodikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnICYmIHYubGVuZ3RoIDw9IDEwMCxcbiAgICBkZXNjcmlwdGlvbjogKHYpID0+IHR5cGVvZiB2ID09PSAnc3RyaW5nJyAmJiB2Lmxlbmd0aCA8PSA1MDAsXG4gICAgYXV0aG9yOiAodikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnICYmIHYubGVuZ3RoIDw9IDEwMCxcbiAgICB2ZXJzaW9uOiAodikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnICYmIC9eXFxkK1xcLlxcZCsoXFwuXFxkKyk/KC1bYS16QS1aMC05Li1dKyk/JC8udGVzdCh2KSxcbiAgICBjYXRlZ29yeTogKHYpID0+IHR5cGVvZiB2ID09PSAnc3RyaW5nJyAmJiB2Lmxlbmd0aCA8PSA1MCxcbiAgICBhZ2VfcmF0aW5nOiAodikgPT4gWydhbGwnLCAnMTMrJywgJzE4KyddLmluY2x1ZGVzKHYpLFxuICAgIHByaWNlOiAodikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnICYmICh2ID09PSAnZnJlZScgfHwgL15cXCRcXGQrXFwuXFxkezJ9JC8udGVzdCh2KSksXG4gICAgYWlfZ2VuZXJhdGVkOiAodikgPT4gdHlwZW9mIHYgPT09ICdib29sZWFuJyB8fCB2ID09PSAndHJ1ZScgfHwgdiA9PT0gJ2ZhbHNlJyxcbiAgICBnZW5lcmF0aW9uX21ldGhvZDogKHYpID0+IFsnaHVtYW4nLCAnQ2hhdEdQVCcsICdDbGF1ZGUnLCAnaHlicmlkJ10uaW5jbHVkZXModiksXG4gICAgY3JlYXRlZF9kYXRlOiAodikgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB2ICE9PSAnc3RyaW5nJykgcmV0dXJuIGZhbHNlO1xuICAgICAgXG4gICAgICAvLyBNb3JlIGZsZXhpYmxlIGRhdGUgdmFsaWRhdGlvbiAtIGFjY2VwdCBjb21tb24gZm9ybWF0c1xuICAgICAgLy8gSVNPODYwMSwgVVMgZm9ybWF0LCBFdXJvcGVhbiBmb3JtYXQsIHNpbXBsZSBkYXRlc1xuICAgICAgY29uc3QgZGF0ZVBhdHRlcm5zID0gW1xuICAgICAgICAvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9JC8sIC8vIFlZWVktTU0tRERcbiAgICAgICAgL15cXGR7NH0tXFxkezJ9LVxcZHsyfVRcXGR7Mn06XFxkezJ9OlxcZHsyfS8sIC8vIElTTzg2MDEgd2l0aCB0aW1lXG4gICAgICAgIC9eXFxkezEsMn1cXC9cXGR7MSwyfVxcL1xcZHs0fSQvLCAvLyBNTS9ERC9ZWVlZIG9yIE0vRC9ZWVlZXG4gICAgICAgIC9eXFxkezEsMn0tXFxkezEsMn0tXFxkezR9JC8sIC8vIE1NLURELVlZWVkgb3IgTS1ELVlZWVlcbiAgICAgICAgL15cXGR7MSwyfVxcLlxcZHsxLDJ9XFwuXFxkezR9JC8sIC8vIERELk1NLllZWVkgKEV1cm9wZWFuKVxuICAgICAgICAvXihKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYylcXHMrXFxkezEsMn0sP1xccytcXGR7NH0kL2kgLy8gTW9udGggREQsIFlZWVlcbiAgICAgIF07XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGlmIGl0IG1hdGNoZXMgY29tbW9uIHBhdHRlcm5zIGZpcnN0XG4gICAgICBjb25zdCBtYXRjaGVzUGF0dGVybiA9IGRhdGVQYXR0ZXJucy5zb21lKHBhdHRlcm4gPT4gcGF0dGVybi50ZXN0KHYudHJpbSgpKSk7XG4gICAgICBpZiAoIW1hdGNoZXNQYXR0ZXJuKSB7XG4gICAgICAgIC8vIEZhbGwgYmFjayB0byBEYXRlLnBhcnNlIGZvciBvdGhlciBmb3JtYXRzLCBidXQgYmUgbW9yZSBsZW5pZW50XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IERhdGUucGFyc2Uodik7XG4gICAgICAgIHJldHVybiAhaXNOYU4ocGFyc2VkKSAmJiBwYXJzZWQgPiAwOyAvLyBFbnN1cmUgaXQncyBhIHZhbGlkIHBvc2l0aXZlIHRpbWVzdGFtcFxuICAgICAgfVxuICAgICAgXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIHRyaWdnZXJzOiAodikgPT4gQXJyYXkuaXNBcnJheSh2KSAmJiB2LmV2ZXJ5KHQgPT4gdHlwZW9mIHQgPT09ICdzdHJpbmcnICYmIHQubGVuZ3RoIDw9IDUwKSxcbiAgICBjb250ZW50X2ZsYWdzOiAodikgPT4gQXJyYXkuaXNBcnJheSh2KSAmJiB2LmV2ZXJ5KGYgPT4gdHlwZW9mIGYgPT09ICdzdHJpbmcnICYmIGYubGVuZ3RoIDw9IDUwKVxuICB9O1xuXG4gIC8qKlxuICAgKiBQYXJzZSBhIE1hcmtkb3duIGZpbGUgd2l0aCBZQU1MIGZyb250bWF0dGVyIChTZWN1cmVseSlcbiAgICogXG4gICAqIEBwYXJhbSBpbnB1dCAtIFRoZSBmdWxsIGNvbnRlbnQgb2YgYSBNYXJrZG93biBmaWxlIHdpdGggWUFNTCBmcm9udG1hdHRlclxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFBhcnNpbmcgb3B0aW9ucyBmb3Igc2VjdXJpdHkgYW5kIHZhbGlkYXRpb25cbiAgICogQHJldHVybnMgUGFyc2VkQ29udGVudCB3aXRoIHNlcGFyYXRlZCBZQU1MIGRhdGEgYW5kIE1hcmtkb3duIGNvbnRlbnRcbiAgICogXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gRm9yIGEgcGVyc29uYSBmaWxlOlxuICAgKiBjb25zdCBwZXJzb25hRmlsZSA9IGAtLS1cbiAgICogbmFtZTogQ3JlYXRpdmUgV3JpdGVyXG4gICAqIGRlc2NyaXB0aW9uOiBBIGNyZWF0aXZlIHdyaXRpbmcgYXNzaXN0YW50XG4gICAqIC0tLVxuICAgKiBZb3UgYXJlIGEgY3JlYXRpdmUgd3JpdGVyLi4uYDtcbiAgICogXG4gICAqIGNvbnN0IHJlc3VsdCA9IFNlY3VyZVlhbWxQYXJzZXIucGFyc2UocGVyc29uYUZpbGUpO1xuICAgKiAvLyByZXN1bHQuZGF0YSA9IHsgbmFtZTogJ0NyZWF0aXZlIFdyaXRlcicsIGRlc2NyaXB0aW9uOiAnLi4uJyB9XG4gICAqIC8vIHJlc3VsdC5jb250ZW50ID0gJ1lvdSBhcmUgYSBjcmVhdGl2ZSB3cml0ZXIuLi4nXG4gICAqIGBgYFxuICAgKi9cbiAgc3RhdGljIHBhcnNlKGlucHV0OiBzdHJpbmcsIG9wdGlvbnM6IFNlY3VyZVBhcnNlT3B0aW9ucyA9IHt9KTogUGFyc2VkQ29udGVudCB7XG4gICAgY29uc3Qgb3B0cyA9IHsgLi4udGhpcy5ERUZBVUxUX09QVElPTlMsIC4uLm9wdGlvbnMgfTtcblxuICAgIC8vIDEuIFNpemUgdmFsaWRhdGlvblxuICAgIGlmIChpbnB1dC5sZW5ndGggPiAob3B0cy5tYXhDb250ZW50U2l6ZSB8fCB0aGlzLkRFRkFVTFRfT1BUSU9OUy5tYXhDb250ZW50U2l6ZSEpKSB7XG4gICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFcnJvcignQ29udGVudCBleGNlZWRzIG1heGltdW0gYWxsb3dlZCBzaXplJywgJ21lZGl1bScpO1xuICAgIH1cblxuICAgIC8vIDIuIEV4dHJhY3QgZnJvbnRtYXR0ZXIgYm91bmRhcmllc1xuICAgIGNvbnN0IGZyb250bWF0dGVyTWF0Y2ggPSBpbnB1dC5tYXRjaCgvXi0tLVxcbihbXFxzXFxTXSo/KVxcbi0tLS8pO1xuICAgIGlmICghZnJvbnRtYXR0ZXJNYXRjaCkge1xuICAgICAgLy8gTm8gZnJvbnRtYXR0ZXIsIHJldHVybiBlbXB0eSBkYXRhXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiB7fSxcbiAgICAgICAgY29udGVudDogaW5wdXRcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgeWFtbENvbnRlbnQgPSBmcm9udG1hdHRlck1hdGNoWzFdO1xuICAgIGNvbnN0IG1hcmtkb3duQ29udGVudCA9IGlucHV0LnN1YnN0cmluZyhmcm9udG1hdHRlck1hdGNoWzBdLmxlbmd0aCk7XG5cbiAgICAvLyAzLiBWYWxpZGF0ZSBZQU1MIHNpemVcbiAgICBpZiAoeWFtbENvbnRlbnQubGVuZ3RoID4gKG9wdHMubWF4WWFtbFNpemUgfHwgdGhpcy5ERUZBVUxUX09QVElPTlMubWF4WWFtbFNpemUhKSkge1xuICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXJyb3IoJ1lBTUwgZnJvbnRtYXR0ZXIgZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQgc2l6ZScsICdtZWRpdW0nKTtcbiAgICB9XG5cbiAgICAvLyA0LiBQcmUtcGFyc2Ugc2VjdXJpdHkgdmFsaWRhdGlvblxuICAgIGlmICghQ29udGVudFZhbGlkYXRvci52YWxpZGF0ZVlhbWxDb250ZW50KHlhbWxDb250ZW50KSkge1xuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnWUFNTF9JTkpFQ1RJT05fQVRURU1QVCcsXG4gICAgICAgIHNldmVyaXR5OiAnQ1JJVElDQUwnLFxuICAgICAgICBzb3VyY2U6ICdzZWN1cmVfeWFtbF9wYXJzZXInLFxuICAgICAgICBkZXRhaWxzOiAnTWFsaWNpb3VzIFlBTUwgcGF0dGVybiBkZXRlY3RlZCBkdXJpbmcgcGFyc2luZydcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXJyb3IoJ01hbGljaW91cyBZQU1MIGNvbnRlbnQgZGV0ZWN0ZWQnLCAnY3JpdGljYWwnKTtcbiAgICB9XG5cbiAgICAvLyA1LiBQYXJzZSB3aXRoIHNhZmUgc2NoZW1hXG4gICAgbGV0IGRhdGE6IGFueTtcbiAgICB0cnkge1xuICAgICAgZGF0YSA9IHlhbWwubG9hZCh5YW1sQ29udGVudCwge1xuICAgICAgICBzY2hlbWE6IHRoaXMuU0FGRV9TQ0hFTUEsXG4gICAgICAgIGpzb246IGZhbHNlLCAgLy8gRG9uJ3QgYWxsb3cgSlNPTi1zcGVjaWZpYyB0eXBlc1xuICAgICAgICBvbldhcm5pbmc6ICh3YXJuaW5nKSA9PiB7XG4gICAgICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICAgICAgdHlwZTogJ1lBTUxfUEFSU0lOR19XQVJOSU5HJyxcbiAgICAgICAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgICAgICAgIHNvdXJjZTogJ3NlY3VyZV95YW1sX3BhcnNlcicsXG4gICAgICAgICAgICBkZXRhaWxzOiBgWUFNTCB3YXJuaW5nOiAke3dhcm5pbmcubWVzc2FnZX1gXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFcnJvcihgWUFNTCBwYXJzaW5nIGZhaWxlZDogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gLCAnaGlnaCcpO1xuICAgIH1cblxuICAgIC8vIDYuIEVuc3VyZSBkYXRhIGlzIGFuIG9iamVjdFxuICAgIGlmICh0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcgfHwgZGF0YSA9PT0gbnVsbCB8fCBBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFcnJvcignWUFNTCBtdXN0IGNvbnRhaW4gYW4gb2JqZWN0IGF0IHJvb3QgbGV2ZWwnLCAnbWVkaXVtJyk7XG4gICAgfVxuXG4gICAgLy8gNy4gVmFsaWRhdGUgYWxsb3dlZCBrZXlzIGlmIHNwZWNpZmllZFxuICAgIGlmIChvcHRzLmFsbG93ZWRLZXlzKSB7XG4gICAgICBjb25zdCBpbnZhbGlkS2V5cyA9IE9iamVjdC5rZXlzKGRhdGEpLmZpbHRlcihrZXkgPT4gIW9wdHMuYWxsb3dlZEtleXMhLmluY2x1ZGVzKGtleSkpO1xuICAgICAgaWYgKGludmFsaWRLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXJyb3IoYEludmFsaWQgWUFNTCBrZXlzIGRldGVjdGVkOiAke2ludmFsaWRLZXlzLmpvaW4oJywgJyl9YCwgJ21lZGl1bScpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDguIFZhbGlkYXRlIGZpZWxkIHR5cGVzIGFuZCBjb250ZW50XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGF0YSkpIHtcbiAgICAgIC8vIENoZWNrIGZpZWxkLXNwZWNpZmljIHZhbGlkYXRvcnMgb25seSBpZiBmaWVsZCB2YWxpZGF0aW9uIGlzIGVuYWJsZWRcbiAgICAgIGlmIChvcHRzLnZhbGlkYXRlRmllbGRzICYmIHRoaXMuRklFTERfVkFMSURBVE9SU1trZXldICYmICF0aGlzLkZJRUxEX1ZBTElEQVRPUlNba2V5XSh2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXJyb3IoYEludmFsaWQgdmFsdWUgZm9yIGZpZWxkICcke2tleX0nYCwgJ21lZGl1bScpO1xuICAgICAgfVxuXG4gICAgICAvLyBWYWxpZGF0ZSBzdHJpbmcgZmllbGRzIGZvciBpbmplY3Rpb24gcGF0dGVybnNcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIG9wdHMudmFsaWRhdGVDb250ZW50KSB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRpb24gPSBDb250ZW50VmFsaWRhdG9yLnZhbGlkYXRlQW5kU2FuaXRpemUodmFsdWUpO1xuICAgICAgICBpZiAoIXZhbGlkYXRpb24uaXNWYWxpZCAmJiB2YWxpZGF0aW9uLnNldmVyaXR5ID09PSAnY3JpdGljYWwnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXJyb3IoYFNlY3VyaXR5IHRocmVhdCBkZXRlY3RlZCBpbiBmaWVsZCAnJHtrZXl9J2AsICdjcml0aWNhbCcpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJlcGxhY2Ugd2l0aCBzYW5pdGl6ZWQgY29udGVudFxuICAgICAgICBkYXRhW2tleV0gPSB2YWxpZGF0aW9uLnNhbml0aXplZENvbnRlbnQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gOS4gVmFsaWRhdGUgbWFya2Rvd24gY29udGVudCBpZiByZXF1ZXN0ZWRcbiAgICBsZXQgZmluYWxDb250ZW50ID0gbWFya2Rvd25Db250ZW50O1xuICAgIGlmIChvcHRzLnZhbGlkYXRlQ29udGVudCkge1xuICAgICAgY29uc3QgY29udGVudFZhbGlkYXRpb24gPSBDb250ZW50VmFsaWRhdG9yLnZhbGlkYXRlQW5kU2FuaXRpemUobWFya2Rvd25Db250ZW50KTtcbiAgICAgIGlmICghY29udGVudFZhbGlkYXRpb24uaXNWYWxpZCAmJiBjb250ZW50VmFsaWRhdGlvbi5zZXZlcml0eSA9PT0gJ2NyaXRpY2FsJykge1xuICAgICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFcnJvcignU2VjdXJpdHkgdGhyZWF0IGRldGVjdGVkIGluIGNvbnRlbnQnLCAnY3JpdGljYWwnKTtcbiAgICAgIH1cbiAgICAgIGZpbmFsQ29udGVudCA9IGNvbnRlbnRWYWxpZGF0aW9uLnNhbml0aXplZENvbnRlbnQgfHwgbWFya2Rvd25Db250ZW50O1xuICAgIH1cblxuICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgIHR5cGU6ICdZQU1MX1BBUlNFX1NVQ0NFU1MnLFxuICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgc291cmNlOiAnc2VjdXJlX3lhbWxfcGFyc2VyJyxcbiAgICAgIGRldGFpbHM6IGBTdWNjZXNzZnVsbHkgcGFyc2VkIFlBTUwgd2l0aCAke09iamVjdC5rZXlzKGRhdGEpLmxlbmd0aH0gZmllbGRzYFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGEsXG4gICAgICBjb250ZW50OiBmaW5hbENvbnRlbnRcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHNlY3VyZSBncmF5LW1hdHRlciBjb21wYXRpYmxlIHBhcnNlclxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZVNlY3VyZU1hdHRlclBhcnNlcigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFyc2U6IChpbnB1dDogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucGFyc2UoaW5wdXQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGE6IHJlc3VsdC5kYXRhLFxuICAgICAgICAgIGNvbnRlbnQ6IHJlc3VsdC5jb250ZW50LFxuICAgICAgICAgIGV4Y2VycHQ6IHJlc3VsdC5leGNlcnB0LFxuICAgICAgICAgIG9yaWc6IGlucHV0XG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgc3RyaW5naWZ5OiAoY29udGVudDogc3RyaW5nLCBkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgLy8gVmFsaWRhdGUgZGF0YSBiZWZvcmUgc3RyaW5naWZ5aW5nXG4gICAgICAgIGNvbnN0IHZhbGlkYXRpb24gPSBDb250ZW50VmFsaWRhdG9yLnZhbGlkYXRlTWV0YWRhdGEoZGF0YSk7XG4gICAgICAgIGlmICghdmFsaWRhdGlvbi5pc1ZhbGlkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXJyb3IoJ0Nhbm5vdCBzdHJpbmdpZnkgY29udGVudCB3aXRoIHNlY3VyaXR5IHRocmVhdHMnLCAnaGlnaCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVXNlIHNhZmUgWUFNTCBkdW1wXG4gICAgICAgIGNvbnN0IHlhbWxTdHIgPSB5YW1sLmR1bXAoZGF0YSwge1xuICAgICAgICAgIHNjaGVtYTogdGhpcy5TQUZFX1NDSEVNQSxcbiAgICAgICAgICBza2lwSW52YWxpZDogdHJ1ZSxcbiAgICAgICAgICBub1JlZnM6IHRydWUsXG4gICAgICAgICAgbm9Db21wYXRNb2RlOiB0cnVlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBgLS0tXFxuJHt5YW1sU3RyfS0tLVxcbiR7Y29udGVudH1gO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU2FmZSB3cmFwcGVyIGZvciBncmF5LW1hdHRlciB3aXRoIHNlY3VyaXR5IHZhbGlkYXRpb25zXG4gICAqL1xuICBzdGF0aWMgc2FmZU1hdHRlcihpbnB1dDogc3RyaW5nLCBvcHRpb25zPzogbWF0dGVyLkdyYXlNYXR0ZXJPcHRpb248c3RyaW5nLCBhbnk+KTogbWF0dGVyLkdyYXlNYXR0ZXJGaWxlPHN0cmluZz4ge1xuICAgIC8vIEZpcnN0LCB1c2Ugb3VyIHNlY3VyZSBwYXJzZXJcbiAgICBjb25zdCBzZWN1cmVQYXJzZWQgPSB0aGlzLnBhcnNlKGlucHV0KTtcblxuICAgIC8vIFRoZW4gdXNlIGdyYXktbWF0dGVyIHdpdGggY3VzdG9tIGVuZ2luZXNcbiAgICByZXR1cm4gbWF0dGVyKGlucHV0LCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgZW5naW5lczoge1xuICAgICAgICB5YW1sOiB7XG4gICAgICAgICAgcGFyc2U6IChzdHI6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgLy8gVXNlIG91ciBzZWN1cmUgWUFNTCBwYXJzaW5nXG4gICAgICAgICAgICBjb25zdCBwYXJzZWQgPSB5YW1sLmxvYWQoc3RyLCB7XG4gICAgICAgICAgICAgIHNjaGVtYTogdGhpcy5TQUZFX1NDSEVNQSxcbiAgICAgICAgICAgICAganNvbjogZmFsc2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gRW5zdXJlIGl0J3MgYW4gb2JqZWN0XG4gICAgICAgICAgICBpZiAodHlwZW9mIHBhcnNlZCAhPT0gJ29iamVjdCcgfHwgcGFyc2VkID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwYXJzZWQgYXMgb2JqZWN0O1xuICAgICAgICAgIH0sXG4gICAgICAgICAgc3RyaW5naWZ5OiAob2JqOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB5YW1sLmR1bXAob2JqLCB7XG4gICAgICAgICAgICAgIHNjaGVtYTogdGhpcy5TQUZFX1NDSEVNQSxcbiAgICAgICAgICAgICAgc2tpcEludmFsaWQ6IHRydWUsXG4gICAgICAgICAgICAgIG5vUmVmczogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn0iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"ServerSetup.d.ts","sourceRoot":"","sources":["../../src/server/ServerSetup.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAEnE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AASvD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAI1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,qBAAa,WAAW;IACtB,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,SAAS,CAAqB;;IAOtC;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI;IASzD;;OAEG;IACH,OAAO,CAAC,aAAa;IA+BrB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAiC7B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA+B5B;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAmCjC;;OAEG;IACH,eAAe,IAAI,YAAY;IAI/B;;OAEG;IACH,YAAY,IAAI,kBAAkB;IAIlC;;OAEG;IACH,mBAAmB,IAAI,IAAI;IAa3B;;OAEG;IACH,mBAAmB,IAAI,IAAI;IAI3B;;OAEG;IACH,kBAAkB;;;CAKnB"}
1
+ {"version":3,"file":"ServerSetup.d.ts","sourceRoot":"","sources":["../../src/server/ServerSetup.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAEnE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAUvD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAI1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,qBAAa,WAAW;IACtB,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,SAAS,CAAqB;;IAOtC;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI;IASzD;;OAEG;IACH,OAAO,CAAC,aAAa;IAoCrB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAiC7B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA+B5B;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAmCjC;;OAEG;IACH,eAAe,IAAI,YAAY;IAI/B;;OAEG;IACH,YAAY,IAAI,kBAAkB;IAIlC;;OAEG;IACH,mBAAmB,IAAI,IAAI;IAa3B;;OAEG;IACH,mBAAmB,IAAI,IAAI;IAI3B;;OAEG;IACH,kBAAkB;;;CAKnB"}