@dollhousemcp/mcp-server 2.0.11 → 2.0.12-rc.2

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 (93) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/dist/config/ConfigManager.d.ts +34 -0
  3. package/dist/config/ConfigManager.d.ts.map +1 -1
  4. package/dist/config/ConfigManager.js +46 -1
  5. package/dist/config/env.d.ts +18 -0
  6. package/dist/config/env.d.ts.map +1 -1
  7. package/dist/config/env.js +89 -2
  8. package/dist/di/Container.d.ts +1 -0
  9. package/dist/di/Container.d.ts.map +1 -1
  10. package/dist/di/Container.js +38 -2
  11. package/dist/elements/agents/AgentManager.js +2 -2
  12. package/dist/generated/version.d.ts +2 -2
  13. package/dist/generated/version.d.ts.map +1 -1
  14. package/dist/generated/version.js +3 -3
  15. package/dist/handlers/mcp-aql/GatekeeperSession.d.ts.map +1 -1
  16. package/dist/handlers/mcp-aql/GatekeeperSession.js +3 -2
  17. package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts.map +1 -1
  18. package/dist/handlers/mcp-aql/MCPAQLHandler.js +11 -3
  19. package/dist/handlers/mcp-aql/OperationSchema.d.ts.map +1 -1
  20. package/dist/handlers/mcp-aql/OperationSchema.js +11 -6
  21. package/dist/handlers/mcp-aql/policies/ToolClassification.d.ts.map +1 -1
  22. package/dist/handlers/mcp-aql/policies/ToolClassification.js +8 -1
  23. package/dist/index.js +53 -3
  24. package/dist/security/InputNormalizer.d.ts +4 -6
  25. package/dist/security/InputNormalizer.d.ts.map +1 -1
  26. package/dist/security/InputNormalizer.js +10 -16
  27. package/dist/security/audit/config/suppressions.d.ts.map +1 -1
  28. package/dist/security/audit/config/suppressions.js +26 -1
  29. package/dist/security/constants.d.ts +7 -0
  30. package/dist/security/constants.d.ts.map +1 -1
  31. package/dist/security/constants.js +10 -1
  32. package/dist/security/contentValidator.d.ts.map +1 -1
  33. package/dist/security/contentValidator.js +14 -6
  34. package/dist/security/encryption/PatternEncryptor.d.ts.map +1 -1
  35. package/dist/security/encryption/PatternEncryptor.js +18 -10
  36. package/dist/security/securityMonitor.d.ts +1 -1
  37. package/dist/security/securityMonitor.d.ts.map +1 -1
  38. package/dist/security/securityMonitor.js +1 -1
  39. package/dist/security/tokenManager.d.ts +18 -2
  40. package/dist/security/tokenManager.d.ts.map +1 -1
  41. package/dist/security/tokenManager.js +47 -15
  42. package/dist/security/validators/unicodeValidator.d.ts +4 -5
  43. package/dist/security/validators/unicodeValidator.d.ts.map +1 -1
  44. package/dist/security/validators/unicodeValidator.js +19 -20
  45. package/dist/services/VerificationNotifier.d.ts.map +1 -1
  46. package/dist/services/VerificationNotifier.js +15 -13
  47. package/dist/services/validation/GenericElementValidator.js +5 -5
  48. package/dist/web/console/IngestRoutes.d.ts +14 -2
  49. package/dist/web/console/IngestRoutes.d.ts.map +1 -1
  50. package/dist/web/console/IngestRoutes.js +69 -5
  51. package/dist/web/console/LeaderElection.d.ts +37 -3
  52. package/dist/web/console/LeaderElection.d.ts.map +1 -1
  53. package/dist/web/console/LeaderElection.js +67 -7
  54. package/dist/web/console/LeaderForwardingSink.d.ts +19 -3
  55. package/dist/web/console/LeaderForwardingSink.d.ts.map +1 -1
  56. package/dist/web/console/LeaderForwardingSink.js +44 -9
  57. package/dist/web/console/PromotionManager.d.ts +29 -0
  58. package/dist/web/console/PromotionManager.d.ts.map +1 -0
  59. package/dist/web/console/PromotionManager.js +94 -0
  60. package/dist/web/console/SessionNames.d.ts +7 -0
  61. package/dist/web/console/SessionNames.d.ts.map +1 -1
  62. package/dist/web/console/SessionNames.js +10 -1
  63. package/dist/web/console/UnifiedConsole.d.ts +26 -1
  64. package/dist/web/console/UnifiedConsole.d.ts.map +1 -1
  65. package/dist/web/console/UnifiedConsole.js +143 -20
  66. package/dist/web/portDiscovery.d.ts +4 -3
  67. package/dist/web/portDiscovery.d.ts.map +1 -1
  68. package/dist/web/portDiscovery.js +7 -5
  69. package/dist/web/public/app.js +35 -18
  70. package/dist/web/public/consoleAuth.js +152 -0
  71. package/dist/web/public/index.html +243 -9
  72. package/dist/web/public/logs.js +1 -1
  73. package/dist/web/public/metrics.js +3 -3
  74. package/dist/web/public/permissions.js +1 -1
  75. package/dist/web/public/security.css +396 -0
  76. package/dist/web/public/security.js +393 -0
  77. package/dist/web/public/sessions.css +54 -4
  78. package/dist/web/public/sessions.js +46 -6
  79. package/dist/web/public/setup.css +439 -0
  80. package/dist/web/public/setup.js +490 -18
  81. package/dist/web/public/styles.css +10 -0
  82. package/dist/web/routes/permissionRoutes.d.ts.map +1 -1
  83. package/dist/web/routes/permissionRoutes.js +8 -3
  84. package/dist/web/routes/setupRoutes.d.ts +4 -0
  85. package/dist/web/routes/setupRoutes.d.ts.map +1 -1
  86. package/dist/web/routes/setupRoutes.js +418 -7
  87. package/dist/web/routes.d.ts.map +1 -1
  88. package/dist/web/routes.js +9 -5
  89. package/dist/web/server.d.ts +49 -3
  90. package/dist/web/server.d.ts.map +1 -1
  91. package/dist/web/server.js +282 -82
  92. package/package.json +11 -2
  93. package/server.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/web/routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAgB,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAM1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAid1E,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAiJ5D;AAqBD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CA0H3F"}
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/web/routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAgB,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAM1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAid1E,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAoJ5D;AAqBD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CA6H3F"}
@@ -460,11 +460,13 @@ export function createApiRoutes(portfolioDir) {
460
460
  res.status(429).json({ error: 'Too many install requests. Max 10 per minute.' });
461
461
  return;
462
462
  }
463
- const { path: elementPath, name, type } = req.body;
464
- if (!elementPath || !type || !name) {
463
+ const { path: elementPath, name: rawName, type } = req.body;
464
+ if (!elementPath || !type || !rawName) {
465
465
  res.status(400).json({ error: 'Missing required fields: path, name, type' });
466
466
  return;
467
467
  }
468
+ // NFC-normalize name before safety checks to prevent Unicode homograph bypasses (#1736)
469
+ const name = normalizeInput(rawName);
468
470
  // Validate type
469
471
  const pluralType = type.endsWith('s') ? type : `${type}s`;
470
472
  if (!ELEMENT_TYPES.includes(pluralType)) {
@@ -657,11 +659,13 @@ export function createGatewayApiRoutes(handler, portfolioDir) {
657
659
  res.status(429).json({ error: 'Too many install requests. Max 10 per minute.' });
658
660
  return;
659
661
  }
660
- const { path: elementPath, name, type } = req.body;
661
- if (!elementPath || !type || !name) {
662
+ const { path: elementPath, name: rawName, type } = req.body;
663
+ if (!elementPath || !type || !rawName) {
662
664
  res.status(400).json({ error: 'Missing required fields: path, name, type' });
663
665
  return;
664
666
  }
667
+ // NFC-normalize name before safety checks to prevent Unicode homograph bypasses (#1736)
668
+ const name = normalizeInput(rawName);
665
669
  if (elementPath.includes('..') || name.includes('..')) {
666
670
  res.status(400).json({ error: 'Invalid path or name' });
667
671
  return;
@@ -692,4 +696,4 @@ export function createGatewayApiRoutes(handler, portfolioDir) {
692
696
  });
693
697
  return router;
694
698
  }
695
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3dlYi9yb3V0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUVILE9BQU8sT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzNELE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUMsT0FBTyxFQUFFLHNCQUFzQixFQUFvRCxNQUFNLHNCQUFzQixDQUFDO0FBR2hILDRFQUE0RTtBQUM1RSxTQUFTLGNBQWMsQ0FBQyxLQUFhO0lBQ25DLE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNoQyxDQUFDO0FBQ0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFaEYsTUFBTSxhQUFhLEdBQUcsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFdBQVcsQ0FBVSxDQUFDO0FBRXRHLDZDQUE2QztBQUM3QyxNQUFNLG1CQUFtQixHQUFHLFNBQVMsQ0FBQztBQUV0QyxvQ0FBb0M7QUFDcEMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUUzRCx5R0FBeUc7QUFDekcsTUFBTSxnQkFBZ0IsR0FBRyw0Q0FBNEMs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QUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFdlYiBVSSBBUEkgUm91dGVzXG4gKlxuICogUkVTVCBlbmRwb2ludHMgZm9yIHJlYWRpbmcgcG9ydGZvbGlvIGVsZW1lbnRzLlxuICogUmVhZC1vbmx5IOKAlCBubyBtdXRhdGlvbnMgaW4gVjEuXG4gKlxuICogQWxsIGVsZW1lbnQgY29udGVudCBpcyBzYW5pdGl6ZWQgYmVmb3JlIHNlcnZpbmcgdG8gcHJldmVudCBYU1MuXG4gKlxuICogU2VjdXJpdHkgbm90ZTogVGhpcyB3ZWIgc2VydmVyIGJpbmRzIHRvIDEyNy4wLjAuMSBvbmx5IChzZWUgc2VydmVyLnRzKS5cbiAqIFJhdGUgbGltaXRpbmcgb24gcmVhZC1vbmx5IEdFVCBlbmRwb2ludHMgaXMgbm90IHJlcXVpcmVkIGZvciBsb2NhbGhvc3Qtb25seVxuICogbWFuYWdlbWVudCBpbnRlcmZhY2VzLiBUaGUgUE9TVCAvYXBpL2luc3RhbGwgZW5kcG9pbnQgaGFzIGV4cGxpY2l0IHJhdGUgbGltaXRpbmdcbiAqIHZpYSBTbGlkaW5nV2luZG93UmF0ZUxpbWl0ZXIgKG1heCAxMCBwZXIgbWludXRlKS5cbiAqIGNvZGVxbFtqcy9taXNzaW5nLXJhdGUtbGltaXRpbmddIOKAlCBBY2tub3dsZWRnZWQ7IGxvY2FsaG9zdC1vbmx5IGJpbmRpbmcgbWl0aWdhdGVzIERvUyByaXNrLlxuICovXG5cbmltcG9ydCBleHByZXNzLCB7IFJvdXRlciB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IHsgcmVhZGRpciwgcmVhZEZpbGUsIHN0YXQgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IGpvaW4sIGV4dG5hbWUsIHJlc29sdmUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgU2VjdXJlWWFtbFBhcnNlciB9IGZyb20gJy4uL3NlY3VyaXR5L3NlY3VyZVlhbWxQYXJzZXIuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IHZhbGlkYXRlRWxlbWVudENvbnRlbnQsIHR5cGUgUGlwZWxpbmVSZXN1bHQsIHR5cGUgRWxlbWVudERpc3BsYXlNZXRhZGF0YSB9IGZyb20gJy4vY29udGVudFBpcGVsaW5lLmpzJztcbmltcG9ydCB0eXBlIHsgTUNQQVFMSGFuZGxlciB9IGZyb20gJy4uL2hhbmRsZXJzL21jcC1hcWwvTUNQQVFMSGFuZGxlci5qcyc7XG5cbi8qKiBOb3JtYWxpemUgdXNlciBpbnB1dCB0byBORkMgZm9ybSB0byBwcmV2ZW50IFVuaWNvZGUgaG9tb2dyYXBoIGF0dGFja3MgKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUlucHV0KGlucHV0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gaW5wdXQubm9ybWFsaXplKCdORkMnKTtcbn1cbmltcG9ydCB7IENvbnRlbnRWYWxpZGF0b3IgfSBmcm9tICcuLi9zZWN1cml0eS9jb250ZW50VmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IFNsaWRpbmdXaW5kb3dSYXRlTGltaXRlciB9IGZyb20gJy4uL3V0aWxzL1NsaWRpbmdXaW5kb3dSYXRlTGltaXRlci5qcyc7XG5cbmNvbnN0IEVMRU1FTlRfVFlQRVMgPSBbJ3BlcnNvbmFzJywgJ3NraWxscycsICd0ZW1wbGF0ZXMnLCAnYWdlbnRzJywgJ21lbW9yaWVzJywgJ2Vuc2VtYmxlcyddIGFzIGNvbnN0O1xuXG4vKiogTWF4IGZpbGUgc2l6ZSBmb3IgZWxlbWVudCByZWFkcyAoMSBNQikgKi9cbmNvbnN0IE1BWF9GSUxFX1NJWkVfQllURVMgPSAxXzA0OF81NzY7XG5cbi8qKiBWYWxpZCBlbGVtZW50IGZpbGUgZXh0ZW5zaW9ucyAqL1xuY29uc3QgVkFMSURfRVhURU5TSU9OUyA9IG5ldyBTZXQoWycubWQnLCAnLnlhbWwnLCAnLnltbCddKTtcblxuLyoqIEtub3duLXNhZmUgZmlsZW5hbWUgcGF0dGVybjogc3RhcnRzIGFscGhhbnVtZXJpYywgYm9keSBhbGxvd3MgaHlwaGVucy91bmRlcnNjb3JlcywgdmFsaWQgZXh0ZW5zaW9uICovXG5jb25zdCBTQUZFX0ZJTEVOQU1FX1JFID0gL15bYS16QS1aMC05XVthLXpBLVowLTlfLV0qXFwuKHlhbWx8eW1sfG1kKSQvO1xuXG4vKiogQ2hlY2sgaWYgYSBmaWxlbmFtZSBpcyBhIGJhY2t1cCBvciBjcnVmdCBmaWxlICovXG5mdW5jdGlvbiBpc0JhY2t1cE9yQ3J1ZnQoZmlsZW5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAvLyBHdWFyYW50ZWVkIHNhZmUgZmlsZW5hbWVzIHNraXAgYmxhY2tsaXN0IGNoZWNrcyBlbnRpcmVseVxuICBpZiAoU0FGRV9GSUxFTkFNRV9SRS50ZXN0KGZpbGVuYW1lKSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoZmlsZW5hbWUuc3RhcnRzV2l0aCgnLicpKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKGZpbGVuYW1lID09PSAnX2luZGV4Lmpzb24nKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKGZpbGVuYW1lLmluY2x1ZGVzKCcuYmFja3VwJykgfHwgZmlsZW5hbWUuaW5jbHVkZXMoJy5zdGF0ZScpKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKGZpbGVuYW1lLmVuZHNXaXRoKCcuYmFrJykgfHwgZmlsZW5hbWUuZW5kc1dpdGgoJ34nKSkgcmV0dXJuIHRydWU7XG4gIGlmIChmaWxlbmFtZS5pbmNsdWRlcygnIGNvcHknKSkgcmV0dXJuIHRydWU7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBTY2FuIGEgZGlyZWN0b3J5IGZvciB2YWxpZCBlbGVtZW50cywgcnVubmluZyBlYWNoIHRocm91Z2ggdGhlIHNlY3VyaXR5XG4gKiB2YWxpZGF0aW9uIHBpcGVsaW5lLiBSZXR1cm5zIG1ldGFkYXRhIG9iamVjdHMgcmVhZHkgZm9yIEFQSSByZXNwb25zZXMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNjYW5FbGVtZW50RGlyZWN0b3J5KHR5cGVEaXI6IHN0cmluZywgdHlwZTogc3RyaW5nLCBsb2dQcmVmaXg6IHN0cmluZyk6IFByb21pc2U8dW5rbm93bltdPiB7XG4gIGNvbnN0IGZpbGVzID0gYXdhaXQgcmVhZGRpcih0eXBlRGlyKTtcbiAgY29uc3QgZWxlbWVudHM6IHVua25vd25bXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgIGlmIChpc0JhY2t1cE9yQ3J1ZnQoZmlsZSkpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGV4dCA9IGV4dG5hbWUoZmlsZSk7XG4gICAgaWYgKCFWQUxJRF9FWFRFTlNJT05TLmhhcyhleHQpKSBjb250aW51ZTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWxlUGF0aCA9IGpvaW4odHlwZURpciwgZmlsZSk7XG4gICAgICBjb25zdCBmaWxlU3RhdCA9IGF3YWl0IHN0YXQoZmlsZVBhdGgpO1xuICAgICAgaWYgKCFmaWxlU3RhdC5pc0ZpbGUoKSB8fCBmaWxlU3RhdC5zaXplID4gTUFYX0ZJTEVfU0laRV9CWVRFUykgY29udGludWU7XG5cbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCByZWFkRmlsZShmaWxlUGF0aCwgJ3V0Zi04Jyk7XG4gICAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gdmFsaWRhdGVFbGVtZW50Q29udGVudChmaWxlLCBjb250ZW50LCB0eXBlKTtcblxuICAgICAgaWYgKCF2YWxpZGF0aW9uUmVzdWx0LnZhbGlkKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgJHtsb2dQcmVmaXh9IFNraXBwaW5nIHJlamVjdGVkIGZpbGUgJHtmaWxlfTogJHt2YWxpZGF0aW9uUmVzdWx0LnJlamVjdGlvbj8ucmVhc29ufWApO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBtZXRhZGF0YSB9ID0gdmFsaWRhdGlvblJlc3VsdDtcbiAgICAgIGVsZW1lbnRzLnB1c2goe1xuICAgICAgICBuYW1lOiBtZXRhZGF0YS5uYW1lIHx8IGZpbGUucmVwbGFjZShleHQsICcnKSxcbiAgICAgICAgZGVzY3JpcHRpb246IG1ldGFkYXRhLmRlc2NyaXB0aW9uIHx8ICcnLFxuICAgICAgICB0eXBlOiB0eXBlLnNsaWNlKDAsIC0xKSxcbiAgICAgICAgdmVyc2lvbjogbWV0YWRhdGEudmVyc2lvbiB8fCAnMS4wLjAnLFxuICAgICAgICBhdXRob3I6IG1ldGFkYXRhLmF1dGhvciB8fCAnJyxcbiAgICAgICAgY2F0ZWdvcnk6IG1ldGFkYXRhLmNhdGVnb3J5IHx8ICcnLFxuICAgICAgICB0YWdzOiBtZXRhZGF0YS50YWdzIHx8ICcnLFxuICAgICAgICBjcmVhdGVkOiBtZXRhZGF0YS5jcmVhdGVkIHx8ICcnLFxuICAgICAgICBmaWxlbmFtZTogZmlsZSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nZ2VyLmRlYnVnKGAke2xvZ1ByZWZpeH0gRmFpbGVkIHRvIHBhcnNlICR7ZmlsZX06YCwgZXJyKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZWxlbWVudHM7XG59XG5cbi8qKiBOb3JtYWxpemUgcGx1cmFsIGVsZW1lbnQgdHlwZSB0byBzaW5ndWxhciBmb3JtICovXG5jb25zdCBQTFVSQUxfVE9fU0lOR1VMQVI6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gIHBlcnNvbmFzOiAncGVyc29uYScsIHNraWxsczogJ3NraWxsJywgdGVtcGxhdGVzOiAndGVtcGxhdGUnLFxuICBhZ2VudHM6ICdhZ2VudCcsIG1lbW9yaWVzOiAnbWVtb3J5JywgZW5zZW1ibGVzOiAnZW5zZW1ibGUnLFxufTtcbmZ1bmN0aW9uIHRvU2luZ3VsYXJUeXBlKHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBQTFVSQUxfVE9fU0lOR1VMQVJbdHlwZV0gfHwgKHR5cGUuZW5kc1dpdGgoJ3MnKSA/IHR5cGUuc2xpY2UoMCwgLTEpIDogdHlwZSk7XG59XG5cbi8qKiBCdWlsZCBhIHN0cnVjdHVyZWQgdmFsaWRhdGlvbiByZXNwb25zZSBmb3IgZWxlbWVudCBkZXRhaWwgcm91dGVzICovXG5mdW5jdGlvbiBidWlsZFZhbGlkYXRpb25SZXNwb25zZSh2YWxpZGF0aW9uOiBQaXBlbGluZVJlc3VsdCwgY29udGVudDogc3RyaW5nLCB0eXBlOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHtcbiAgICBtZXRhZGF0YTogdmFsaWRhdGlvbi5tZXRhZGF0YSxcbiAgICBib2R5OiB2YWxpZGF0aW9uLmJvZHksXG4gICAgcmF3OiBjb250ZW50LFxuICAgIHR5cGU6IHRvU2luZ3VsYXJUeXBlKHR5cGUpLFxuICAgIHZhbGlkYXRpb246IHtcbiAgICAgIHN0YXR1czogdmFsaWRhdGlvbi52YWxpZCA/ICdwYXNzJyA6ICd3YXJuJyxcbiAgICAgIC4uLih2YWxpZGF0aW9uLnJlamVjdGlvbiAmJiB7XG4gICAgICAgIHJlYXNvbjogdmFsaWRhdGlvbi5yZWplY3Rpb24ucmVhc29uLFxuICAgICAgICBzZXZlcml0eTogdmFsaWRhdGlvbi5yZWplY3Rpb24uc2V2ZXJpdHksXG4gICAgICAgIHBhdHRlcm5zOiB2YWxpZGF0aW9uLnJlamVjdGlvbi5wYXR0ZXJucyxcbiAgICAgIH0pLFxuICAgIH0sXG4gIH07XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIGZpbGUgcGF0aCBmb3IgYW4gZWxlbWVudCwgaGFuZGxpbmcgbWVtb3J5IGRhdGUtcGF0aHNcbiAqIGFuZCBuYW1lLXdpdGgtb3Itd2l0aG91dC1leHRlbnNpb24gbWF0Y2hpbmcuXG4gKiBSZXR1cm5zIHRoZSByZXNvbHZlZCBwYXRoIG9yIG51bGwgd2l0aCBhbiBlcnJvciB0byBzZW5kLlxuICovXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlRWxlbWVudEZpbGVQYXRoKFxuICBwb3J0Zm9saW9EaXI6IHN0cmluZywgdHlwZTogc3RyaW5nLCBuYW1lOiBzdHJpbmdcbik6IFByb21pc2U8eyBmaWxlUGF0aDogc3RyaW5nIH0gfCB7IGVycm9yOiBzdHJpbmc7IHN0YXR1czogbnVtYmVyIH0+IHtcbiAgaWYgKHR5cGUgPT09ICdtZW1vcmllcycgJiYgbmFtZS5pbmNsdWRlcygnLycpKSB7XG4gICAgY29uc3QgcGFydHMgPSBuYW1lLnNwbGl0KCcvJyk7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gMiB8fCAhL15cXGR7NH0tXFxkezJ9LVxcZHsyfSQvLnRlc3QocGFydHNbMF0pIHx8IGlzQmFja3VwT3JDcnVmdChwYXJ0c1sxXSkpIHtcbiAgICAgIHJldHVybiB7IGVycm9yOiAnSW52YWxpZCBtZW1vcnkgcGF0aCcsIHN0YXR1czogNDAwIH07XG4gICAgfVxuICAgIGNvbnN0IGZpbGVQYXRoID0gam9pbihwb3J0Zm9saW9EaXIsIHR5cGUsIG5hbWUpO1xuICAgIGNvbnN0IHJlc29sdmVkUGF0aCA9IHJlc29sdmUoZmlsZVBhdGgpO1xuICAgIGlmICghcmVzb2x2ZWRQYXRoLnN0YXJ0c1dpdGgocmVzb2x2ZShwb3J0Zm9saW9EaXIpKSkge1xuICAgICAgcmV0dXJuIHsgZXJyb3I6ICdQYXRoIHRyYXZlcnNhbCBkZXRlY3RlZCcsIHN0YXR1czogNDAwIH07XG4gICAgfVxuICAgIHJldHVybiB7IGZpbGVQYXRoIH07XG4gIH1cblxuICBjb25zdCB0eXBlRGlyID0gam9pbihwb3J0Zm9saW9EaXIsIHR5cGUpO1xuICBjb25zdCBmaWxlcyA9IGF3YWl0IHJlYWRkaXIodHlwZURpcik7XG4gIGNvbnN0IG1hdGNoID0gZmlsZXMuZmluZChmID0+IHtcbiAgICBjb25zdCBiYXNlID0gZi5yZXBsYWNlKGV4dG5hbWUoZiksICcnKTtcbiAgICByZXR1cm4gYmFzZSA9PT0gbmFtZSB8fCBmID09PSBuYW1lO1xuICB9KTtcblxuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6IGBFbGVtZW50IG5vdCBmb3VuZDogJHt0eXBlfS8ke25hbWV9YCwgc3RhdHVzOiA0MDQgfTtcbiAgfVxuXG4gIGNvbnN0IGZpbGVQYXRoID0gam9pbihwb3J0Zm9saW9EaXIsIHR5cGUsIG1hdGNoKTtcbiAgY29uc3QgcmVzb2x2ZWRQYXRoID0gcmVzb2x2ZShmaWxlUGF0aCk7XG4gIGlmICghcmVzb2x2ZWRQYXRoLnN0YXJ0c1dpdGgocmVzb2x2ZShwb3J0Zm9saW9EaXIpKSkge1xuICAgIHJldHVybiB7IGVycm9yOiAnUGF0aCB0cmF2ZXJzYWwgZGV0ZWN0ZWQnLCBzdGF0dXM6IDQwMCB9O1xuICB9XG4gIHJldHVybiB7IGZpbGVQYXRoIH07XG59XG5cbi8qKlxuICogTG9hZCBtZW1vcmllcyBmcm9tIHRoZSBfaW5kZXguanNvbiBmaWxlLlxuICogTWVtb3JpZXMgdXNlIGRhdGUtcGFydGl0aW9uZWQgc3RvcmFnZSB3aXRoIGFuIGluZGV4LCB1bmxpa2Ugb3RoZXJcbiAqIGVsZW1lbnQgdHlwZXMgd2hpY2ggYXJlIGZsYXQgZmlsZXMgaW4gYSBkaXJlY3RvcnkuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGxvYWRNZW1vcmllc0Zyb21JbmRleChwb3J0Zm9saW9EaXI6IHN0cmluZyk6IFByb21pc2U8dW5rbm93bltdPiB7XG4gIGNvbnN0IGluZGV4UGF0aCA9IGpvaW4ocG9ydGZvbGlvRGlyLCAnbWVtb3JpZXMnLCAnX2luZGV4Lmpzb24nKTtcbiAgdHJ5IHtcbiAgICBjb25zdCByYXcgPSBhd2FpdCByZWFkRmlsZShpbmRleFBhdGgsICd1dGYtOCcpO1xuICAgIGNvbnN0IGluZGV4ID0gSlNPTi5wYXJzZShyYXcpIGFzIHtcbiAgICAgIGVudHJpZXM/OiBSZWNvcmQ8c3RyaW5nLCB7IG5hbWU/OiBzdHJpbmc7IGRlc2NyaXB0aW9uPzogc3RyaW5nOyB0YWdzPzogc3RyaW5nW107IGNyZWF0ZWQ/OiBzdHJpbmc7IFtrZXk6IHN0cmluZ106IHVua25vd24gfT47XG4gICAgICBlbnRyeUNvdW50PzogbnVtYmVyO1xuICAgIH07XG5cbiAgICBjb25zdCBlbnRyaWVzID0gaW5kZXguZW50cmllcyB8fCB7fTtcbiAgICBjb25zdCBlbGVtZW50czogdW5rbm93bltdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IFtwYXRoLCBlbnRyeV0gb2YgT2JqZWN0LmVudHJpZXMoZW50cmllcykpIHtcbiAgICAgIGlmICghZW50cnkgfHwgdHlwZW9mIGVudHJ5ICE9PSAnb2JqZWN0JykgY29udGludWU7XG4gICAgICBjb25zdCBwYXRoUGFydHMgPSBwYXRoLnNwbGl0KCcvJyk7XG4gICAgICBjb25zdCBmaWxlbmFtZSA9IHBhdGhQYXJ0cy5wb3AoKSB8fCBwYXRoO1xuICAgICAgLy8gRXh0cmFjdCBkYXRlIGZyb20gZGlyZWN0b3J5IHBhdGggKGUuZy4sIFwiMjAyNS0wOS0xOS9jb2RlLXBhdHRlcm5zLnlhbWxcIiAtPiBcIjIwMjUtMDktMTlcIilcbiAgICAgIGNvbnN0IGRhdGVGcm9tUGF0aCA9IHBhdGhQYXJ0cy5sZW5ndGggPiAwICYmIC9eXFxkezR9LVxcZHsyfS1cXGR7Mn0kLy50ZXN0KHBhdGhQYXJ0c1swXSkgPyBwYXRoUGFydHNbMF0gOiAnJztcbiAgICAgIC8vIEZhbGwgYmFjayB0byBmaWxlbmFtZSBpZiBpbmRleCBoYXMgbm8gbmFtZSBvciBzdG9yZWQgXCJ1bm5hbWVkXCIgKHVwc3RyZWFtIGluZGV4ZXIgYnVnKVxuICAgICAgY29uc3QgaW5kZXhOYW1lID0gZW50cnkubmFtZSAmJiBlbnRyeS5uYW1lICE9PSAndW5uYW1lZCcgPyBlbnRyeS5uYW1lIDogbnVsbDtcbiAgICAgIGNvbnN0IG5hbWUgPSBpbmRleE5hbWUgfHwgZmlsZW5hbWUucmVwbGFjZSgvXFwuKHlhbWx8eW1sfG1kKSQvLCAnJyk7XG5cbiAgICAgIGVsZW1lbnRzLnB1c2goe1xuICAgICAgICBuYW1lLFxuICAgICAgICBkZXNjcmlwdGlvbjogZW50cnkuZGVzY3JpcHRpb24gfHwgJycsXG4gICAgICAgIHR5cGU6ICdtZW1vcnknLFxuICAgICAgICB2ZXJzaW9uOiBlbnRyeS52ZXJzaW9uIHx8ICcxLjAuMCcsXG4gICAgICAgIGF1dGhvcjogZW50cnkuYXV0aG9yIHx8ICcnLFxuICAgICAgICBjYXRlZ29yeTogZW50cnkuY2F0ZWdvcnkgfHwgZW50cnkubWVtb3J5VHlwZSB8fCAnJyxcbiAgICAgICAgdGFnczogZW50cnkudGFncyB8fCBbXSxcbiAgICAgICAgY3JlYXRlZDogZW50cnkuY3JlYXRlZCB8fCBkYXRlRnJvbVBhdGgsXG4gICAgICAgIGZpbGVuYW1lOiBwYXRoLCAvLyBkYXRlL2ZpbGVuYW1lIHBhdGggZm9yIGNvbnRlbnQgbG9hZGluZ1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVsZW1lbnRzO1xuICB9IGNhdGNoIHtcbiAgICAvLyBGYWxsIGJhY2sgdG8gZW1wdHkgaWYgbm8gaW5kZXhcbiAgICByZXR1cm4gW107XG4gIH1cbn1cblxuLyoqIFJhdGUgbGltaXRlciBmb3IgL2FwaS9pbnN0YWxsOiBtYXggMTAgaW5zdGFsbHMgcGVyIDYwIHNlY29uZHMgKi9cbmNvbnN0IGluc3RhbGxSYXRlTGltaXRlciA9IG5ldyBTbGlkaW5nV2luZG93UmF0ZUxpbWl0ZXIoMTAsIDYwXzAwMCk7XG5cbi8qKiBTYW5pdGl6ZSB0ZXh0IGNvbnRlbnQgdG8gcHJldmVudCBYU1MgaW4gcmVuZGVyZWQgSFRNTCAqL1xuZnVuY3Rpb24gc2FuaXRpemVGb3JIdG1sKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0XG4gICAgLnJlcGxhY2UoLyYvZywgJyZhbXA7JylcbiAgICAucmVwbGFjZSgvPC9nLCAnJmx0OycpXG4gICAgLnJlcGxhY2UoLz4vZywgJyZndDsnKVxuICAgIC5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7JylcbiAgICAucmVwbGFjZSgvJy9nLCAnJiMzOTsnKTtcbn1cblxuLyoqIFBhcnNlIFlBTUwgZnJvbnQgbWF0dGVyIGZyb20gYSBtYXJrZG93biBmaWxlICovXG5mdW5jdGlvbiBwYXJzZUZyb250TWF0dGVyKGNvbnRlbnQ6IHN0cmluZyk6IHsgbWV0YWRhdGE6IEVsZW1lbnREaXNwbGF5TWV0YWRhdGE7IGJvZHk6IHN0cmluZyB9IHtcbiAgY29uc3QgbWF0Y2ggPSBjb250ZW50Lm1hdGNoKC9eLS0tXFxyP1xcbihbXFxzXFxTXSo/KVxccj9cXG4tLS1cXHI/XFxuPyhbXFxzXFxTXSopJC8pO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuIHsgbWV0YWRhdGE6IHt9LCBib2R5OiBjb250ZW50IH07XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IFNlY3VyZVlhbWxQYXJzZXIucGFyc2VSYXdZYW1sKG1hdGNoWzFdKTtcbiAgICBjb25zdCBtZXRhZGF0YSA9ICh0eXBlb2YgcGFyc2VkID09PSAnb2JqZWN0JyAmJiBwYXJzZWQgIT09IG51bGwpID8gcGFyc2VkIGFzIEVsZW1lbnREaXNwbGF5TWV0YWRhdGEgOiB7fTtcbiAgICByZXR1cm4geyBtZXRhZGF0YSwgYm9keTogbWF0Y2hbMl0gfTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHsgbWV0YWRhdGE6IHt9LCBib2R5OiBtYXRjaFsyXSB8fCBjb250ZW50IH07XG4gIH1cbn1cblxuLyoqIFBhcnNlIGEgWUFNTC1vbmx5IGZpbGUgKG1lbW9yaWVzKSAqL1xuZnVuY3Rpb24gcGFyc2VZYW1sRmlsZShjb250ZW50OiBzdHJpbmcpOiB7IG1ldGFkYXRhOiBFbGVtZW50RGlzcGxheU1ldGFkYXRhOyBib2R5OiBzdHJpbmcgfSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGFyc2VkID0gU2VjdXJlWWFtbFBhcnNlci5wYXJzZVJhd1lhbWwoY29udGVudCk7XG4gICAgY29uc3QgbWV0YWRhdGEgPSAodHlwZW9mIHBhcnNlZCA9PT0gJ29iamVjdCcgJiYgcGFyc2VkICE9PSBudWxsKSA/IHBhcnNlZCBhcyBFbGVtZW50RGlzcGxheU1ldGFkYXRhIDoge307XG4gICAgcmV0dXJuIHsgbWV0YWRhdGEsIGJvZHk6ICcnIH07XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB7IG1ldGFkYXRhOiB7fSwgYm9keTogY29udGVudCB9O1xuICB9XG59XG5cbi8qKlxuICogUmVnaXN0ZXIgcG9ydGZvbGlvIHJvdXRlcyBzaGFyZWQgYmV0d2VlbiBzaW1wbGUgYW5kIGdhdGV3YXkgbW9kZXMuXG4gKiBUaGUgc3RydWN0dXJlZERldGFpbCBvcHRpb24gY29udHJvbHMgd2hldGhlciBkZXRhaWwgcm91dGVzIHJldHVyblxuICogc3RydWN0dXJlZCBKU09OIChnYXRld2F5KSBvciBwbGFpbiB0ZXh0IChzaW1wbGUvbGVnYWN5KS5cbiAqL1xuZnVuY3Rpb24gcmVnaXN0ZXJQb3J0Zm9saW9Sb3V0ZXMoXG4gIHJvdXRlcjogUm91dGVyLFxuICBwb3J0Zm9saW9EaXI6IHN0cmluZyxcbiAgb3B0aW9uczogeyBzdHJ1Y3R1cmVkRGV0YWlsOiBib29sZWFuOyBsb2dQcmVmaXg6IHN0cmluZyB9LFxuKTogdm9pZCB7XG4gIGNvbnN0IHsgc3RydWN0dXJlZERldGFpbCwgbG9nUHJlZml4IH0gPSBvcHRpb25zO1xuXG4gIHJvdXRlci5nZXQoJy9lbGVtZW50cycsIGFzeW5jIChyZXEsIHJlcykgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYWdlUGFyYW0gPSByZXEucXVlcnkucGFnZSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBwYWdlU2l6ZVBhcmFtID0gcmVxLnF1ZXJ5LnBhZ2VTaXplIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHdhbnRQYWdpbmF0aW9uID0gcGFnZVBhcmFtICE9PSB1bmRlZmluZWQgJiYgcGFnZVNpemVQYXJhbSAhPT0gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgcGFnZSA9IE1hdGgubWF4KDEsIE51bWJlci5wYXJzZUludChwYWdlUGFyYW0gfHwgJzEnLCAxMCkgfHwgMSk7XG4gICAgICBjb25zdCBwYWdlU2l6ZSA9IE1hdGgubWF4KDEsIE1hdGgubWluKDIwMCwgTnVtYmVyLnBhcnNlSW50KHBhZ2VTaXplUGFyYW0gfHwgJzUwJywgMTApIHx8IDUwKSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgdW5rbm93bltdPiA9IHt9O1xuICAgICAgbGV0IHRvdGFsQ291bnQgPSAwO1xuXG4gICAgICBmb3IgKGNvbnN0IHR5cGUgb2YgRUxFTUVOVF9UWVBFUykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmICh0eXBlID09PSAnbWVtb3JpZXMnKSB7XG4gICAgICAgICAgICBjb25zdCBtZW1FbGVtZW50cyA9IGF3YWl0IGxvYWRNZW1vcmllc0Zyb21JbmRleChwb3J0Zm9saW9EaXIpO1xuICAgICAgICAgICAgcmVzdWx0W3R5cGVdID0gbWVtRWxlbWVudHM7XG4gICAgICAgICAgICB0b3RhbENvdW50ICs9IG1lbUVsZW1lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHR5cGVEaXIgPSBqb2luKHBvcnRmb2xpb0RpciwgdHlwZSk7XG4gICAgICAgICAgY29uc3QgZGlyU3RhdCA9IGF3YWl0IHN0YXQodHlwZURpcik7XG4gICAgICAgICAgaWYgKCFkaXJTdGF0LmlzRGlyZWN0b3J5KCkpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgY29uc3QgZWxlbWVudHMgPSBhd2FpdCBzY2FuRWxlbWVudERpcmVjdG9yeSh0eXBlRGlyLCB0eXBlLCBsb2dQcmVmaXgpO1xuICAgICAgICAgIHJlc3VsdFt0eXBlXSA9IGVsZW1lbnRzO1xuICAgICAgICAgIHRvdGFsQ291bnQgKz0gZWxlbWVudHMubGVuZ3RoO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXN1bHRbdHlwZV0gPSBbXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAod2FudFBhZ2luYXRpb24pIHtcbiAgICAgICAgY29uc3QgYWxsRWxlbWVudHM6IHVua25vd25bXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHR5cGUgb2YgRUxFTUVOVF9UWVBFUykge1xuICAgICAgICAgIGFsbEVsZW1lbnRzLnB1c2goLi4uKHJlc3VsdFt0eXBlXSB8fCBbXSkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gKHBhZ2UgLSAxKSAqIHBhZ2VTaXplO1xuICAgICAgICBjb25zdCBwYWdlZCA9IGFsbEVsZW1lbnRzLnNsaWNlKHN0YXJ0LCBzdGFydCArIHBhZ2VTaXplKTtcbiAgICAgICAgY29uc3QgdG90YWxQYWdlcyA9IE1hdGguY2VpbChhbGxFbGVtZW50cy5sZW5ndGggLyBwYWdlU2l6ZSk7XG4gICAgICAgIHJlcy5qc29uKHsgZWxlbWVudHM6IHBhZ2VkLCB0b3RhbENvdW50OiBhbGxFbGVtZW50cy5sZW5ndGgsIHBhZ2UsIHBhZ2VTaXplLCB0b3RhbFBhZ2VzIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzLmpzb24oeyBlbGVtZW50czogcmVzdWx0LCB0b3RhbENvdW50IH0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nZ2VyLmVycm9yKGAke2xvZ1ByZWZpeH0gRmFpbGVkIHRvIGxpc3QgZWxlbWVudHM6YCwgZXJyKTtcbiAgICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHsgZXJyb3I6ICdGYWlsZWQgdG8gbGlzdCBlbGVtZW50cycgfSk7XG4gICAgfVxuICB9KTtcblxuICByb3V0ZXIuZ2V0KCcvZWxlbWVudHMvOnR5cGUnLCBhc3luYyAocmVxLCByZXMpID0+IHtcbiAgICBjb25zdCB0eXBlID0gbm9ybWFsaXplSW5wdXQocmVxLnBhcmFtcy50eXBlKTtcbiAgICBpZiAoIUVMRU1FTlRfVFlQRVMuaW5jbHVkZXModHlwZSBhcyB0eXBlb2YgRUxFTUVOVF9UWVBFU1tudW1iZXJdKSkge1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogYEludmFsaWQgZWxlbWVudCB0eXBlOiAke3R5cGV9YCB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGUgPT09ICdtZW1vcmllcycpIHtcbiAgICAgICAgY29uc3QgbWVtRWxlbWVudHMgPSBhd2FpdCBsb2FkTWVtb3JpZXNGcm9tSW5kZXgocG9ydGZvbGlvRGlyKTtcbiAgICAgICAgcmVzLmpzb24oeyB0eXBlLCBlbGVtZW50czogbWVtRWxlbWVudHMsIGNvdW50OiBtZW1FbGVtZW50cy5sZW5ndGggfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZWxlbWVudHMgPSBhd2FpdCBzY2FuRWxlbWVudERpcmVjdG9yeShqb2luKHBvcnRmb2xpb0RpciwgdHlwZSksIHR5cGUsIGxvZ1ByZWZpeCk7XG4gICAgICByZXMuanNvbih7IHR5cGUsIGVsZW1lbnRzLCBjb3VudDogZWxlbWVudHMubGVuZ3RoIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmVzLnN0YXR1cyg1MDApLmpzb24oeyBlcnJvcjogYEZhaWxlZCB0byBsaXN0ICR7dHlwZX1gIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgcm91dGVyLmdldCgnL2VsZW1lbnRzL21lbW9yaWVzLzpkYXRlLzpmaWxlJywgYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gICAgY29uc3QgeyBkYXRlLCBmaWxlIH0gPSByZXEucGFyYW1zO1xuXG4gICAgaWYgKCEvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9JC8udGVzdChkYXRlKSkge1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogJ0ludmFsaWQgZGF0ZSBmb3JtYXQnIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZmlsZS5pbmNsdWRlcygnLi4nKSB8fCBmaWxlLmluY2x1ZGVzKCcvJykgfHwgZmlsZS5pbmNsdWRlcygnXFxcXCcpIHx8IGlzQmFja3VwT3JDcnVmdChmaWxlKSkge1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogJ0ludmFsaWQgZmlsZW5hbWUnIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWxlUGF0aCA9IGpvaW4ocG9ydGZvbGlvRGlyLCAnbWVtb3JpZXMnLCBkYXRlLCBmaWxlKTtcbiAgICAgIGNvbnN0IHJlc29sdmVkUGF0aCA9IHJlc29sdmUoZmlsZVBhdGgpO1xuICAgICAgaWYgKCFyZXNvbHZlZFBhdGguc3RhcnRzV2l0aChyZXNvbHZlKHBvcnRmb2xpb0RpcikpKSB7XG4gICAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdQYXRoIHRyYXZlcnNhbCBkZXRlY3RlZCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmlsZVN0YXQgPSBhd2FpdCBzdGF0KGZpbGVQYXRoKTtcbiAgICAgIGlmICghZmlsZVN0YXQuaXNGaWxlKCkgfHwgZmlsZVN0YXQuc2l6ZSA+IE1BWF9GSUxFX1NJWkVfQllURVMpIHtcbiAgICAgICAgcmVzLnN0YXR1cyhmaWxlU3RhdC5pc0ZpbGUoKSA/IDQxMyA6IDQwNCkuanNvbih7IGVycm9yOiBmaWxlU3RhdC5pc0ZpbGUoKSA/ICdGaWxlIHRvbyBsYXJnZScgOiAnTm90IGZvdW5kJyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgcmVhZEZpbGUoZmlsZVBhdGgsICd1dGYtOCcpO1xuICAgICAgaWYgKHN0cnVjdHVyZWREZXRhaWwpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGlvbiA9IHZhbGlkYXRlRWxlbWVudENvbnRlbnQoZmlsZSwgY29udGVudCwgJ21lbW9yaWVzJyk7XG4gICAgICAgIHJlcy5qc29uKGJ1aWxkVmFsaWRhdGlvblJlc3BvbnNlKHZhbGlkYXRpb24sIGNvbnRlbnQsICdtZW1vcmllcycpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Jyk7XG4gICAgICAgIHJlcy5zZW5kKGNvbnRlbnQpO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgcmVzLnN0YXR1cyg0MDQpLmpzb24oeyBlcnJvcjogYE1lbW9yeSBub3QgZm91bmQ6ICR7ZGF0ZX0vJHtmaWxlfWAgfSk7XG4gICAgfVxuICB9KTtcblxuICByb3V0ZXIuZ2V0KCcvZWxlbWVudHMvOnR5cGUvOm5hbWUnLCBhc3luYyAocmVxLCByZXMpID0+IHtcbiAgICBjb25zdCB0eXBlID0gcmVxLnBhcmFtcy50eXBlO1xuICAgIGNvbnN0IG5hbWUgPSBub3JtYWxpemVJbnB1dChyZXEucGFyYW1zLm5hbWUpO1xuICAgIGlmICghRUxFTUVOVF9UWVBFUy5pbmNsdWRlcyh0eXBlIGFzIHR5cGVvZiBFTEVNRU5UX1RZUEVTW251bWJlcl0pKSB7XG4gICAgICByZXMuc3RhdHVzKDQwMCkuanNvbih7IGVycm9yOiBgSW52YWxpZCBlbGVtZW50IHR5cGU6ICR7dHlwZX1gIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChuYW1lLmluY2x1ZGVzKCcuLicpIHx8IG5hbWUuaW5jbHVkZXMoJ1xcXFwnKSkge1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogJ0ludmFsaWQgZWxlbWVudCBuYW1lJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodHlwZSAhPT0gJ21lbW9yaWVzJyAmJiBuYW1lLmluY2x1ZGVzKCcvJykpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdJbnZhbGlkIGVsZW1lbnQgbmFtZScgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc29sdmVkID0gYXdhaXQgcmVzb2x2ZUVsZW1lbnRGaWxlUGF0aChwb3J0Zm9saW9EaXIsIHR5cGUsIG5hbWUpO1xuICAgICAgaWYgKCdlcnJvcicgaW4gcmVzb2x2ZWQpIHtcbiAgICAgICAgcmVzLnN0YXR1cyhyZXNvbHZlZC5zdGF0dXMpLmpzb24oeyBlcnJvcjogcmVzb2x2ZWQuZXJyb3IgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmlsZVN0YXQgPSBhd2FpdCBzdGF0KHJlc29sdmVkLmZpbGVQYXRoKTtcbiAgICAgIGlmIChmaWxlU3RhdC5zaXplID4gTUFYX0ZJTEVfU0laRV9CWVRFUykge1xuICAgICAgICByZXMuc3RhdHVzKDQxMykuanNvbih7IGVycm9yOiBgRmlsZSB0b28gbGFyZ2UgKCR7ZmlsZVN0YXQuc2l6ZX0gYnl0ZXMpLiBNYXggMSBNQi5gIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCByZWFkRmlsZShyZXNvbHZlZC5maWxlUGF0aCwgJ3V0Zi04Jyk7XG4gICAgICBpZiAoc3RydWN0dXJlZERldGFpbCkge1xuICAgICAgICBjb25zdCBmaWxlbmFtZSA9IHJlc29sdmVkLmZpbGVQYXRoLnNwbGl0KCcvJykucG9wKCkgfHwgbmFtZTtcbiAgICAgICAgY29uc3QgdmFsaWRhdGlvbiA9IHZhbGlkYXRlRWxlbWVudENvbnRlbnQoZmlsZW5hbWUsIGNvbnRlbnQsIHR5cGUpO1xuICAgICAgICByZXMuanNvbihidWlsZFZhbGlkYXRpb25SZXNwb25zZSh2YWxpZGF0aW9uLCBjb250ZW50LCB0eXBlKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXMuc2V0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCcpO1xuICAgICAgICByZXMuc2VuZChjb250ZW50KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHsgZXJyb3I6IGBGYWlsZWQgdG8gZ2V0IGVsZW1lbnQ6ICR7dHlwZX0vJHtuYW1lfWAgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqIFJlZ2lzdGVyIGZpbGVzeXN0ZW0tYmFzZWQgc3RhdHMgcm91dGUgKHNoYXJlZCBiZXR3ZWVuIHNpbXBsZSBhbmQgZ2F0ZXdheSkgKi9cbmZ1bmN0aW9uIHJlZ2lzdGVyU3RhdHNSb3V0ZShyb3V0ZXI6IFJvdXRlciwgcG9ydGZvbGlvRGlyOiBzdHJpbmcpOiB2b2lkIHtcbiAgcm91dGVyLmdldCgnL3N0YXRzJywgYXN5bmMgKF9yZXEsIHJlcykgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGF0czogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9O1xuICAgICAgbGV0IHRvdGFsID0gMDtcblxuICAgICAgZm9yIChjb25zdCB0eXBlIG9mIEVMRU1FTlRfVFlQRVMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAodHlwZSA9PT0gJ21lbW9yaWVzJykge1xuICAgICAgICAgICAgY29uc3QgbWVtRWxlbWVudHMgPSBhd2FpdCBsb2FkTWVtb3JpZXNGcm9tSW5kZXgocG9ydGZvbGlvRGlyKTtcbiAgICAgICAgICAgIHN0YXRzW3R5cGVdID0gbWVtRWxlbWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgdG90YWwgKz0gbWVtRWxlbWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHR5cGVEaXIgPSBqb2luKHBvcnRmb2xpb0RpciwgdHlwZSk7XG4gICAgICAgICAgY29uc3QgZmlsZXMgPSBhd2FpdCByZWFkZGlyKHR5cGVEaXIpO1xuICAgICAgICAgIGNvbnN0IGNvdW50ID0gZmlsZXMuZmlsdGVyKGYgPT4gIWlzQmFja3VwT3JDcnVmdChmKSAmJiBWQUxJRF9FWFRFTlNJT05TLmhhcyhleHRuYW1lKGYpKSkubGVuZ3RoO1xuICAgICAgICAgIHN0YXRzW3R5cGVdID0gY291bnQ7XG4gICAgICAgICAgdG90YWwgKz0gY291bnQ7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHN0YXRzW3R5cGVdID0gMDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXMuanNvbih7IHN0YXRzLCB0b3RhbCB9KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHsgZXJyb3I6ICdGYWlsZWQgdG8gZ2V0IHN0YXRzJyB9KTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKiogUmVnaXN0ZXIgY29sbGVjdGlvbiBpbmRleCBwcm94eSByb3V0ZSAoc2hhcmVkIGJldHdlZW4gc2ltcGxlIGFuZCBnYXRld2F5KSAqL1xuZnVuY3Rpb24gcmVnaXN0ZXJDb2xsZWN0aW9uUm91dGUocm91dGVyOiBSb3V0ZXIsIHBvcnRmb2xpb0Rpcjogc3RyaW5nKTogdm9pZCB7XG4gIHJvdXRlci5nZXQoJy9jb2xsZWN0aW9uJywgYXN5bmMgKF9yZXEsIHJlcykgPT4ge1xuICAgIHJlcy5zZXRIZWFkZXIoJ0NhY2hlLUNvbnRyb2wnLCAnbm8tY2FjaGUnKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKCdodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vRG9sbGhvdXNlTUNQL2NvbGxlY3Rpb24vbWFpbi9wdWJsaWMvY29sbGVjdGlvbi1pbmRleC5qc29uJyk7XG4gICAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICAgICAgcmVzLnNldEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICAgICAgcmVzLnNlbmQoZGF0YSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHsgLyogR2l0SHViIHVucmVhY2hhYmxlIOKAlCBmYWxsIGJhY2sgdG8gbG9jYWwgKi8gfVxuXG4gICAgY29uc3QgbG9jYWxQYXRocyA9IFtcbiAgICAgIGpvaW4ocG9ydGZvbGlvRGlyLCAnLi4nLCAnLi4nLCAnLi4nLCAnY29sbGVjdGlvbicsICdwdWJsaWMnLCAnY29sbGVjdGlvbi1pbmRleC5qc29uJyksXG4gICAgICBqb2luKHBvcnRmb2xpb0RpciwgJy4uJywgJ2NvbGxlY3Rpb24nLCAncHVibGljJywgJ2NvbGxlY3Rpb24taW5kZXguanNvbicpLFxuICAgIF07XG5cbiAgICBmb3IgKGNvbnN0IGxvY2FsUGF0aCBvZiBsb2NhbFBhdGhzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgcmVhZEZpbGUobG9jYWxQYXRoLCAndXRmLTgnKTtcbiAgICAgICAgcmVzLnNldEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICAgICAgcmVzLnNlbmQoY29udGVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gY2F0Y2ggeyAvKiB0cnkgbmV4dCAqLyB9XG4gICAgfVxuXG4gICAgcmVzLnN0YXR1cyg0MDQpLmpzb24oeyBlcnJvcjogJ0NvbGxlY3Rpb24gaW5kZXggbm90IGF2YWlsYWJsZScgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQXBpUm91dGVzKHBvcnRmb2xpb0Rpcjogc3RyaW5nKTogUm91dGVyIHtcbiAgY29uc3Qgcm91dGVyID0gUm91dGVyKCk7XG5cbiAgcmVnaXN0ZXJQb3J0Zm9saW9Sb3V0ZXMocm91dGVyLCBwb3J0Zm9saW9EaXIsIHsgc3RydWN0dXJlZERldGFpbDogZmFsc2UsIGxvZ1ByZWZpeDogJ1tXZWJVSV0nIH0pO1xuXG4gIHJlZ2lzdGVyU3RhdHNSb3V0ZShyb3V0ZXIsIHBvcnRmb2xpb0Rpcik7XG4gIHJlZ2lzdGVyQ29sbGVjdGlvblJvdXRlKHJvdXRlciwgcG9ydGZvbGlvRGlyKTtcblxuICAvKipcbiAgICogUE9TVCAvYXBpL2luc3RhbGxcbiAgICogSW5zdGFsbCBhIGNvbGxlY3Rpb24gZWxlbWVudCBpbnRvIHRoZSBsb2NhbCBwb3J0Zm9saW8uXG4gICAqIFJvdXRlcyB0aHJvdWdoIERvbGxob3VzZU1DUCdzIGluc3RhbGxfY29sbGVjdGlvbl9jb250ZW50IHBpcGVsaW5lXG4gICAqIGZvciBwcm9wZXIgdmFsaWRhdGlvbiwgZ2F0ZWtlZXBlciBjaGVja3MsIGFuZCBlbGVtZW50IG1hbmFnZW1lbnQuXG4gICAqXG4gICAqIFJlcXVpcmVzIHRoZSBNQ1Agc2VydmVyJ3MgQ29sbGVjdGlvbkhhbmRsZXIgdG8gYmUgYXZhaWxhYmxlLlxuICAgKiBGYWxscyBiYWNrIHRvIGRpcmVjdCBmaWxlIHdyaXRlIGlmIG5vdCAoc3RhbmRhbG9uZSB3ZWIgbW9kZSkuXG4gICAqL1xuICByb3V0ZXIucG9zdCgnL2luc3RhbGwnLCBleHByZXNzLmpzb24oKSwgYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gICAgaWYgKCFpbnN0YWxsUmF0ZUxpbWl0ZXIudHJ5QWNxdWlyZSgpKSB7XG4gICAgICByZXMuc3RhdHVzKDQyOSkuanNvbih7IGVycm9yOiAnVG9vIG1hbnkgaW5zdGFsbCByZXF1ZXN0cy4gTWF4IDEwIHBlciBtaW51dGUuJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IHBhdGg6IGVsZW1lbnRQYXRoLCBuYW1lLCB0eXBlIH0gPSByZXEuYm9keSBhcyB7IHBhdGg/OiBzdHJpbmc7IG5hbWU/OiBzdHJpbmc7IHR5cGU/OiBzdHJpbmcgfTtcblxuICAgIGlmICghZWxlbWVudFBhdGggfHwgIXR5cGUgfHwgIW5hbWUpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdNaXNzaW5nIHJlcXVpcmVkIGZpZWxkczogcGF0aCwgbmFtZSwgdHlwZScgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgdHlwZVxuICAgIGNvbnN0IHBsdXJhbFR5cGUgPSB0eXBlLmVuZHNXaXRoKCdzJykgPyB0eXBlIDogYCR7dHlwZX1zYDtcbiAgICBpZiAoIUVMRU1FTlRfVFlQRVMuaW5jbHVkZXMocGx1cmFsVHlwZSBhcyB0eXBlb2YgRUxFTUVOVF9UWVBFU1tudW1iZXJdKSkge1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogYEludmFsaWQgZWxlbWVudCB0eXBlOiAke3R5cGV9YCB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBQcmV2ZW50IHBhdGggdHJhdmVyc2FsXG4gICAgaWYgKGVsZW1lbnRQYXRoLmluY2x1ZGVzKCcuLicpIHx8IG5hbWUuaW5jbHVkZXMoJy4uJykpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdJbnZhbGlkIHBhdGggb3IgbmFtZScgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgZWxlbWVudFBhdGggY29udGFpbnMgb25seSBzYWZlIGNoYXJhY3RlcnMgKGFscGhhbnVtZXJpYywgaHlwaGVucywgdW5kZXJzY29yZXMsIGRvdHMsIHNsYXNoZXMpXG4gICAgaWYgKCEvXlthLXpBLVowLTkvXy4tXSskLy50ZXN0KGVsZW1lbnRQYXRoKSkge1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogJ0ludmFsaWQgZWxlbWVudCBwYXRoIGNoYXJhY3RlcnMnIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBGZXRjaCBjb250ZW50IGZyb20gR2l0SHViXG4gICAgICBjb25zdCBnaFVybCA9IGBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vRG9sbGhvdXNlTUNQL2NvbGxlY3Rpb24vbWFpbi8ke2VsZW1lbnRQYXRofWA7XG5cbiAgICAgIC8vIFZhbGlkYXRlIHRoZSBjb25zdHJ1Y3RlZCBVUkwgc3RheXMgd2l0aGluIGV4cGVjdGVkIGRvbWFpbiBhbmQgcGF0aFxuICAgICAgY29uc3QgcGFyc2VkVXJsID0gbmV3IFVSTChnaFVybCk7XG4gICAgICBpZiAocGFyc2VkVXJsLmhvc3RuYW1lICE9PSAncmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbScgfHwgIXBhcnNlZFVybC5wYXRobmFtZS5zdGFydHNXaXRoKCcvRG9sbGhvdXNlTUNQL2NvbGxlY3Rpb24vJykpIHtcbiAgICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogJ0ludmFsaWQgY29sbGVjdGlvbiBwYXRoJyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGdoVXJsKTtcbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgcmVzLnN0YXR1cyg1MDIpLmpzb24oeyBlcnJvcjogYEZhaWxlZCB0byBmZXRjaCBmcm9tIGNvbGxlY3Rpb246IEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9YCB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcblxuICAgICAgLy8gVmFsaWRhdGUgY29udGVudCB0aHJvdWdoIHRoZSBzZWN1cml0eSBwaXBlbGluZSBiZWZvcmUgd3JpdGluZ1xuICAgICAgY29uc3QgZXh0ID0gZXh0bmFtZShlbGVtZW50UGF0aCk7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoZXh0ID09PSAnLnlhbWwnIHx8IGV4dCA9PT0gJy55bWwnKSB7XG4gICAgICAgICAgLy8gVmFsaWRhdGUgWUFNTCBjb250ZW50IGZvciBib21icywgY2lyY3VsYXIgcmVmZXJlbmNlcywgbWFsaWNpb3VzIHBhdHRlcm5zXG4gICAgICAgICAgaWYgKCFDb250ZW50VmFsaWRhdG9yLnZhbGlkYXRlWWFtbENvbnRlbnQoY29udGVudCkpIHtcbiAgICAgICAgICAgIHJlcy5zdGF0dXMoNDIyKS5qc29uKHsgZXJyb3I6ICdDb250ZW50IGZhaWxlZCBZQU1MIHZhbGlkYXRpb24g4oCUIHBvdGVudGlhbGx5IG1hbGljaW91cyBwYXR0ZXJucyBkZXRlY3RlZCcgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIFNlY3VyZVlhbWxQYXJzZXIucGFyc2VSYXdZYW1sKGNvbnRlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFZhbGlkYXRlIG1hcmtkb3duK2Zyb250bWF0dGVyIGNvbnRlbnRcbiAgICAgICAgICBTZWN1cmVZYW1sUGFyc2VyLnBhcnNlKGNvbnRlbnQpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChwYXJzZUVycikge1xuICAgICAgICByZXMuc3RhdHVzKDQyMikuanNvbih7IGVycm9yOiBgQ29udGVudCBmYWlsZWQgcGFyc2UgdmFsaWRhdGlvbjogJHsocGFyc2VFcnIgYXMgRXJyb3IpLm1lc3NhZ2V9YCB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBWYWxpZGF0ZSBjb250ZW50IGJvZHkgZm9yIGluamVjdGlvbiBwYXR0ZXJuc1xuICAgICAgY29uc3Qgc2luZ3VsYXJUeXBlID0gcGx1cmFsVHlwZS5zbGljZSgwLCAtMSk7XG4gICAgICBjb25zdCBjb250ZXh0VHlwZXMgPSBbJ3BlcnNvbmEnLCAnc2tpbGwnLCAndGVtcGxhdGUnLCAnYWdlbnQnLCAnbWVtb3J5J10gYXMgY29uc3Q7XG4gICAgICB0eXBlIENvbnRlbnRDb250ZXh0ID0gdHlwZW9mIGNvbnRleHRUeXBlc1tudW1iZXJdO1xuICAgICAgY29uc3QgY29udGVudENvbnRleHQgPSBjb250ZXh0VHlwZXMuaW5jbHVkZXMoc2luZ3VsYXJUeXBlIGFzIENvbnRlbnRDb250ZXh0KSA/IHNpbmd1bGFyVHlwZSBhcyBDb250ZW50Q29udGV4dCA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSBDb250ZW50VmFsaWRhdG9yLnZhbGlkYXRlQW5kU2FuaXRpemUoY29udGVudCwge1xuICAgICAgICBjb250ZW50Q29udGV4dCxcbiAgICAgIH0pO1xuICAgICAgaWYgKCF2YWxpZGF0aW9uUmVzdWx0LmlzVmFsaWQpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ1tXZWJVSV0gSW5zdGFsbCBibG9ja2VkIOKAlCBjb250ZW50IHZhbGlkYXRpb24gZmFpbGVkJywge1xuICAgICAgICAgIGVsZW1lbnQ6IGAke3BsdXJhbFR5cGV9LyR7bmFtZX1gLFxuICAgICAgICAgIHBhdHRlcm5zOiB2YWxpZGF0aW9uUmVzdWx0LmRldGVjdGVkUGF0dGVybnMsXG4gICAgICAgICAgc2V2ZXJpdHk6IHZhbGlkYXRpb25SZXN1bHQuc2V2ZXJpdHksXG4gICAgICAgIH0pO1xuICAgICAgICByZXMuc3RhdHVzKDQyMikuanNvbih7XG4gICAgICAgICAgZXJyb3I6ICdDb250ZW50IGZhaWxlZCBzZWN1cml0eSB2YWxpZGF0aW9uJyxcbiAgICAgICAgICBwYXR0ZXJuczogdmFsaWRhdGlvblJlc3VsdC5kZXRlY3RlZFBhdHRlcm5zLFxuICAgICAgICAgIHNldmVyaXR5OiB2YWxpZGF0aW9uUmVzdWx0LnNldmVyaXR5LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBEZXRlcm1pbmUgZmlsZW5hbWVcbiAgICAgIGNvbnN0IGZpbGVuYW1lID0gZWxlbWVudFBhdGguc3BsaXQoJy8nKS5wb3AoKSB8fCBgJHtuYW1lfS5tZGA7XG5cbiAgICAgIC8vIEVuc3VyZSB0eXBlIGRpcmVjdG9yeSBleGlzdHNcbiAgICAgIGNvbnN0IHR5cGVEaXIgPSBqb2luKHBvcnRmb2xpb0RpciwgcGx1cmFsVHlwZSk7XG4gICAgICBjb25zdCB7IG1rZGlyIH0gPSBhd2FpdCBpbXBvcnQoJ25vZGU6ZnMvcHJvbWlzZXMnKTtcbiAgICAgIGF3YWl0IG1rZGlyKHR5cGVEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gICAgICAvLyBXcml0ZSB0byBwb3J0Zm9saW9cbiAgICAgIGNvbnN0IGRlc3RQYXRoID0gam9pbih0eXBlRGlyLCBmaWxlbmFtZSk7XG5cbiAgICAgIC8vIFZlcmlmeSByZXNvbHZlZCBkZXN0aW5hdGlvbiBwYXRoIHN0YXlzIHdpdGhpbiBwb3J0Zm9saW8gZGlyZWN0b3J5IChkZWZlbnNlIGluIGRlcHRoKVxuICAgICAgY29uc3QgcmVzb2x2ZWREZXN0ID0gcmVzb2x2ZShkZXN0UGF0aCk7XG4gICAgICBpZiAoIXJlc29sdmVkRGVzdC5zdGFydHNXaXRoKHJlc29sdmUocG9ydGZvbGlvRGlyKSkpIHtcbiAgICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogJ1BhdGggdHJhdmVyc2FsIGRldGVjdGVkJyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBpZiBmaWxlIGFscmVhZHkgZXhpc3RzXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBzdGF0KGRlc3RQYXRoKTtcbiAgICAgICAgcmVzLnN0YXR1cyg0MDkpLmpzb24oeyBlcnJvcjogYEVsZW1lbnQgYWxyZWFkeSBleGlzdHM6ICR7cGx1cmFsVHlwZX0vJHtmaWxlbmFtZX0uIERlbGV0ZSBpdCBmaXJzdCBvciByZW5hbWUuYCB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBjYXRjaCB7IC8qIGRvZXNuJ3QgZXhpc3Qg4oCUIGdvb2QgKi8gfVxuXG4gICAgICBjb25zdCB7IHdyaXRlRmlsZTogd3JpdGVGaWxlRnMgfSA9IGF3YWl0IGltcG9ydCgnbm9kZTpmcy9wcm9taXNlcycpO1xuICAgICAgYXdhaXQgd3JpdGVGaWxlRnMoZGVzdFBhdGgsIGNvbnRlbnQsICd1dGYtOCcpO1xuXG4gICAgICBsb2dnZXIuaW5mbyhgW1dlYlVJXSBJbnN0YWxsZWQgY29sbGVjdGlvbiBlbGVtZW50OiAke3BsdXJhbFR5cGV9LyR7ZmlsZW5hbWV9YCk7XG4gICAgICByZXMuanNvbih7IHN1Y2Nlc3M6IHRydWUsIG1lc3NhZ2U6IGBJbnN0YWxsZWQgJHtuYW1lfSB0byBwb3J0Zm9saW9gLCBwYXRoOiBgJHtwbHVyYWxUeXBlfS8ke2ZpbGVuYW1lfWAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ1tXZWJVSV0gSW5zdGFsbCBmYWlsZWQ6JywgZXJyKTtcbiAgICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHsgZXJyb3I6IGBJbnN0YWxsIGZhaWxlZDogJHsoZXJyIGFzIEVycm9yKS5tZXNzYWdlfWAgfSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcm91dGVyO1xufVxuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIFdlYiBNQ1AtQVFMIEdhdGV3YXkgUm91dGVzIChJc3N1ZSAjNzk2KVxuLy9cbi8vIFRoZXNlIHJvdXRlcyB0cmFuc2xhdGUgSFRUUCByZXF1ZXN0cyBpbnRvIE1DUEFRTEhhbmRsZXIgY2FsbHMsIHJvdXRpbmcgYWxsXG4vLyByZWFkcy93cml0ZXMgdGhyb3VnaCB0aGUgZXhpc3RpbmcgZWxlbWVudCBtYW5hZ2VycywgdmFsaWRhdGlvbiwgYW5kIGdhdGVrZWVwZXIuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBFeHRyYWN0IHNpbmdsZSBvcGVyYXRpb24gcmVzdWx0IGZyb20gTUNQQVFMSGFuZGxlciByZXNwb25zZS5cbiAqIFdlYiByb3V0ZXMgbmV2ZXIgc2VuZCBiYXRjaCByZXF1ZXN0cywgc28gY2FzdCBpcyBzYWZlLlxuICovXG5pbnRlcmZhY2UgU2luZ2xlT3BSZXN1bHQgeyBzdWNjZXNzOiBib29sZWFuOyBkYXRhPzogdW5rbm93bjsgZXJyb3I/OiBzdHJpbmcgfVxuZnVuY3Rpb24gYXNTaW5nbGVSZXN1bHQocjogdW5rbm93bik6IFNpbmdsZU9wUmVzdWx0IHtcbiAgaWYgKHR5cGVvZiByID09PSAnb2JqZWN0JyAmJiByICE9PSBudWxsICYmICdzdWNjZXNzJyBpbiByKSB7XG4gICAgcmV0dXJuIHIgYXMgU2luZ2xlT3BSZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIGVycm9yOiAnSW52YWxpZCBvcGVyYXRpb24gcmVzdWx0IGZvcm1hdCcgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgQVBJIHJvdXRlcyB0aGF0IHJvdXRlIHRocm91Z2ggTUNQQVFMSGFuZGxlciAoZ2F0ZXdheSBtb2RlKS5cbiAqIEFsbCBvcGVyYXRpb25zIGdvIHRocm91Z2ggdGhlIE1DUC1BUUwgcGlwZWxpbmU6IHZhbGlkYXRpb24sIGNhY2hlLCBnYXRla2VlcGVyLlxuICpcbiAqIEZhbGxzIGJhY2sgdG8gZGlyZWN0IGZpbGVzeXN0ZW0gZm9yIC9hcGkvY29sbGVjdGlvbiAoZXh0ZXJuYWwgZmV0Y2gsIG5vIE1DUC1BUUwgZXF1aXZhbGVudClcbiAqIGFuZCAvYXBpL3N0YXRzIChsaWdodHdlaWdodCBhZ2dyZWdhdGUsIG5vIG1hdGNoaW5nIG9wZXJhdGlvbikuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVHYXRld2F5QXBpUm91dGVzKGhhbmRsZXI6IE1DUEFRTEhhbmRsZXIsIHBvcnRmb2xpb0Rpcjogc3RyaW5nKTogUm91dGVyIHtcbiAgY29uc3Qgcm91dGVyID0gUm91dGVyKCk7XG5cbiAgLy8gU2hhcmVkIHBvcnRmb2xpbyByb3V0ZXMg4oCUIHN0cnVjdHVyZWQgSlNPTiBmb3IgZGV0YWlsIHZpZXdzXG4gIC8vIGNvZGVxbFtqcy9taXNzaW5nLXJhdGUtbGltaXRpbmddIOKAlCBSYXRlLWxpbWl0ZWQgYnkgcm91dGVyLnVzZSgpIG1pZGRsZXdhcmUgaW4gc2VydmVyLnRzXG4gIHJlZ2lzdGVyUG9ydGZvbGlvUm91dGVzKHJvdXRlciwgcG9ydGZvbGlvRGlyLCB7IHN0cnVjdHVyZWREZXRhaWw6IHRydWUsIGxvZ1ByZWZpeDogJ1tXZWJVSS9HYXRld2F5XScgfSk7XG4gIHJlZ2lzdGVyU3RhdHNSb3V0ZShyb3V0ZXIsIHBvcnRmb2xpb0Rpcik7XG4gIHJlZ2lzdGVyQ29sbGVjdGlvblJvdXRlKHJvdXRlciwgcG9ydGZvbGlvRGlyKTtcblxuICAvKipcbiAgICogR0VUIC9hcGkvY29sbGVjdGlvbi9jb250ZW50LypcbiAgICogUHJveGllcyBjb2xsZWN0aW9uIGVsZW1lbnQgY29udGVudCBmcm9tIEdpdEh1YiwgdmFsaWRhdGVzIHRocm91Z2ggdGhlXG4gICAqIHNlY3VyaXR5IHBpcGVsaW5lLCBhbmQgcmV0dXJucyBzdHJ1Y3R1cmVkIEpTT04gKHNhbWUgZm9ybWF0IGFzIHBvcnRmb2xpbyBkZXRhaWwpLlxuICAgKiBjb2RlcWxbanMvbWlzc2luZy1yYXRlLWxpbWl0aW5nXSDigJQgUmF0ZS1saW1pdGVkIGJ5IHJvdXRlci51c2UoKSBtaWRkbGV3YXJlIGFib3ZlLlxuICAgKi9cbiAgcm91dGVyLmdldCgnL2NvbGxlY3Rpb24vY29udGVudC86cHJlZml4Lzp0eXBlLzpuYW1lJywgYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gICAgY29uc3QgcHJlZml4ID0gbm9ybWFsaXplSW5wdXQocmVxLnBhcmFtcy5wcmVmaXgpO1xuICAgIGNvbnN0IGVsZW1lbnRUeXBlID0gbm9ybWFsaXplSW5wdXQocmVxLnBhcmFtcy50eXBlKTtcbiAgICBjb25zdCBmaWxlbmFtZSA9IG5vcm1hbGl6ZUlucHV0KHJlcS5wYXJhbXMubmFtZSk7XG4gICAgY29uc3QgZWxlbWVudFBhdGggPSBgJHtwcmVmaXh9LyR7ZWxlbWVudFR5cGV9LyR7ZmlsZW5hbWV9YDtcbiAgICBpZiAoIWVsZW1lbnRQYXRoIHx8IGVsZW1lbnRQYXRoLmluY2x1ZGVzKCcuLicpIHx8IGVsZW1lbnRQYXRoLmluY2x1ZGVzKCdcXFxcJykpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdJbnZhbGlkIGVsZW1lbnQgcGF0aCcgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgZWxlbWVudCB0eXBlIGFnYWluc3Qga25vd24gdHlwZXMgdG8gcHJldmVudCBhcmJpdHJhcnkgcGF0aCBjb25zdHJ1Y3Rpb25cbiAgICBpZiAoIUVMRU1FTlRfVFlQRVMuaW5jbHVkZXMoZWxlbWVudFR5cGUgYXMgdHlwZW9mIEVMRU1FTlRfVFlQRVNbbnVtYmVyXSkpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6IGBJbnZhbGlkIGVsZW1lbnQgdHlwZTogJHtlbGVtZW50VHlwZX1gIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBjb2RlcWxbanMvcmVxdWVzdC1mb3JnZXJ5XSDigJQgbWl0aWdhdGVkOiBkb21haW4gYW5kIHJlcG8gYXJlIGhhcmRjb2RlZCBjb25zdGFudHMsXG4gICAgICAvLyBlbGVtZW50VHlwZSBpcyB2YWxpZGF0ZWQgYWdhaW5zdCBFTEVNRU5UX1RZUEVTIHdoaXRlbGlzdCBhYm92ZSwgcGF0aCB0cmF2ZXJzYWxcbiAgICAgIC8vIGlzIGNoZWNrZWQsIGFuZCB0aGUgb25seSByZWFjaGFibGUgdGFyZ2V0IGlzIGEgc3BlY2lmaWMgcHVibGljIEdpdEh1YiByZXBvc2l0b3J5LlxuICAgICAgY29uc3QgZ2l0aHViVXJsID0gYGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9Eb2xsaG91c2VNQ1AvY29sbGVjdGlvbi9tYWluLyR7ZWxlbWVudFBhdGh9YDtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goZ2l0aHViVXJsKTtcbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgcmVzLnN0YXR1cyhyZXNwb25zZS5zdGF0dXMgPT09IDQwNCA/IDQwNCA6IDUwMikuanNvbih7XG4gICAgICAgICAgZXJyb3I6IHJlc3BvbnNlLnN0YXR1cyA9PT0gNDA0XG4gICAgICAgICAgICA/IGBDb2xsZWN0aW9uIGVsZW1lbnQgbm90IGZvdW5kOiAke2VsZW1lbnRQYXRofWBcbiAgICAgICAgICAgIDogYEZhaWxlZCB0byBmZXRjaCBmcm9tIEdpdEh1YiAoSFRUUCAke3Jlc3BvbnNlLnN0YXR1c30pYCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb24gPSB2YWxpZGF0ZUVsZW1lbnRDb250ZW50KGZpbGVuYW1lLCBjb250ZW50LCBlbGVtZW50VHlwZSk7XG4gICAgICBjb25zdCBzaW5ndWxhclR5cGUgPSBQTFVSQUxfVE9fU0lOR1VMQVJbZWxlbWVudFR5cGVdIHx8IChlbGVtZW50VHlwZS5lbmRzV2l0aCgncycpID8gZWxlbWVudFR5cGUuc2xpY2UoMCwgLTEpIDogZWxlbWVudFR5cGUpO1xuXG4gICAgICByZXMuanNvbih7XG4gICAgICAgIG1ldGFkYXRhOiB2YWxpZGF0aW9uLm1ldGFkYXRhLFxuICAgICAgICBib2R5OiB2YWxpZGF0aW9uLmJvZHksXG4gICAgICAgIHJhdzogY29udGVudCxcbiAgICAgICAgdHlwZTogc2luZ3VsYXJUeXBlLFxuICAgICAgICB2YWxpZGF0aW9uOiB7XG4gICAgICAgICAgc3RhdHVzOiB2YWxpZGF0aW9uLnZhbGlkID8gJ3Bhc3MnIDogJ3dhcm4nLFxuICAgICAgICAgIC4uLih2YWxpZGF0aW9uLnJlamVjdGlvbiAmJiB7XG4gICAgICAgICAgICByZWFzb246IHZhbGlkYXRpb24ucmVqZWN0aW9uLnJlYXNvbixcbiAgICAgICAgICAgIHNldmVyaXR5OiB2YWxpZGF0aW9uLnJlamVjdGlvbi5zZXZlcml0eSxcbiAgICAgICAgICAgIHBhdHRlcm5zOiB2YWxpZGF0aW9uLnJlamVjdGlvbi5wYXR0ZXJucyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdbV2ViVUkvR2F0ZXdheV0gRmFpbGVkIHRvIGZldGNoIGNvbGxlY3Rpb24gY29udGVudDonLCBlcnIpO1xuICAgICAgcmVzLnN0YXR1cyg1MDIpLmpzb24oeyBlcnJvcjogJ0ZhaWxlZCB0byBmZXRjaCBjb2xsZWN0aW9uIGVsZW1lbnQnIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgLyoqXG4gICAqIFBPU1QgL2FwaS9pbnN0YWxsXG4gICAqIFJvdXRlcyB0aHJvdWdoIGluc3RhbGxfY29sbGVjdGlvbl9jb250ZW50IE1DUC1BUUwgb3BlcmF0aW9uLlxuICAgKiBBbGwgdmFsaWRhdGlvbiwgZ2F0ZWtlZXBlciBjaGVja3MgaGFuZGxlZCBieSB0aGUgcGlwZWxpbmUuXG4gICAqL1xuICBjb25zdCBpbnN0YWxsTGltaXRlciA9IG5ldyBTbGlkaW5nV2luZG93UmF0ZUxpbWl0ZXIoMTAsIDYwXzAwMCk7XG4gIHJvdXRlci5wb3N0KCcvaW5zdGFsbCcsIGV4cHJlc3MuanNvbigpLCBhc3luYyAocmVxLCByZXMpID0+IHtcbiAgICBpZiAoIWluc3RhbGxMaW1pdGVyLnRyeUFjcXVpcmUoKSkge1xuICAgICAgcmVzLnN0YXR1cyg0MjkpLmpzb24oeyBlcnJvcjogJ1RvbyBtYW55IGluc3RhbGwgcmVxdWVzdHMuIE1heCAxMCBwZXIgbWludXRlLicgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeyBwYXRoOiBlbGVtZW50UGF0aCwgbmFtZSwgdHlwZSB9ID0gcmVxLmJvZHkgYXMgeyBwYXRoPzogc3RyaW5nOyBuYW1lPzogc3RyaW5nOyB0eXBlPzogc3RyaW5nIH07XG5cbiAgICBpZiAoIWVsZW1lbnRQYXRoIHx8ICF0eXBlIHx8ICFuYW1lKSB7XG4gICAgICByZXMuc3RhdHVzKDQwMCkuanNvbih7IGVycm9yOiAnTWlzc2luZyByZXF1aXJlZCBmaWVsZHM6IHBhdGgsIG5hbWUsIHR5cGUnIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChlbGVtZW50UGF0aC5pbmNsdWRlcygnLi4nKSB8fCBuYW1lLmluY2x1ZGVzKCcuLicpKSB7XG4gICAgICByZXMuc3RhdHVzKDQwMCkuanNvbih7IGVycm9yOiAnSW52YWxpZCBwYXRoIG9yIG5hbWUnIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGVsZW1lbnRQYXRoIGNvbnRhaW5zIG9ubHkgc2FmZSBjaGFyYWN0ZXJzIChhbHBoYW51bWVyaWMsIGh5cGhlbnMsIHVuZGVyc2NvcmVzLCBkb3RzLCBzbGFzaGVzKVxuICAgIGlmICghL15bYS16QS1aMC05L18uLV0rJC8udGVzdChlbGVtZW50UGF0aCkpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdJbnZhbGlkIGVsZW1lbnQgcGF0aCBjaGFyYWN0ZXJzJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gUm91dGUgdGhyb3VnaCBNQ1AtQVFMIGluc3RhbGxfY29sbGVjdGlvbl9jb250ZW50IG9wZXJhdGlvblxuICAgICAgY29uc3QgaW5zdGFsbFBhdGggPSBlbGVtZW50UGF0aC5yZXBsYWNlKC9ebGlicmFyeVxcLy8sICcnKTtcbiAgICAgIGNvbnN0IG9wUmVzdWx0ID0gYXNTaW5nbGVSZXN1bHQoYXdhaXQgaGFuZGxlci5oYW5kbGVDcmVhdGUoe1xuICAgICAgICBvcGVyYXRpb246ICdpbnN0YWxsX2NvbGxlY3Rpb25fY29udGVudCcsXG4gICAgICAgIHBhcmFtczogeyBwYXRoOiBpbnN0YWxsUGF0aCB9LFxuICAgICAgfSkpO1xuXG4gICAgICBpZiAoIW9wUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgcmVzLnN0YXR1cyg0MjIpLmpzb24oeyBlcnJvcjogb3BSZXN1bHQuZXJyb3IgfHwgJ0luc3RhbGwgZmFpbGVkJyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsb2dnZXIuaW5mbyhgW1dlYlVJL0dhdGV3YXldIEluc3RhbGxlZCBjb2xsZWN0aW9uIGVsZW1lbnQ6ICR7aW5zdGFsbFBhdGh9YCk7XG4gICAgICByZXMuanNvbih7IHN1Y2Nlc3M6IHRydWUsIG1lc3NhZ2U6IGBJbnN0YWxsZWQgJHtuYW1lfSB0byBwb3J0Zm9saW9gLCBkYXRhOiBvcFJlc3VsdC5kYXRhIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdbV2ViVUkvR2F0ZXdheV0gSW5zdGFsbCBmYWlsZWQ6JywgZXJyKTtcbiAgICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHsgZXJyb3I6IGBJbnN0YWxsIGZhaWxlZDogJHsoZXJyIGFzIEVycm9yKS5tZXNzYWdlfWAgfSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcm91dGVyO1xufVxuIl19
699
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3dlYi9yb3V0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUVILE9BQU8sT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzNELE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUMsT0FBTyxFQUFFLHNCQUFzQixFQUFvRCxNQUFNLHNCQUFzQixDQUFDO0FBR2hILDRFQUE0RTtBQUM1RSxTQUFTLGNBQWMsQ0FBQyxLQUFhO0lBQ25DLE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNoQyxDQUFDO0FBQ0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFaEYsTUFBTSxhQUFhLEdBQUcsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFdBQVcsQ0FBVSxDQUFDO0FBRXRHLDZDQUE2QztBQUM3QyxNQUFNLG1CQUFtQixHQUFHLFNBQVMsQ0FBQztBQUV0QyxvQ0FBb0M7QUFDcEMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUUzRCx5R0FBeUc7QUFDekcsTUFBTSxnQkFBZ0IsR0FBRyw0Q0FBNEMs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RyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLG1CQUFvQixHQUFhLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQy9FLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFdlYiBVSSBBUEkgUm91dGVzXG4gKlxuICogUkVTVCBlbmRwb2ludHMgZm9yIHJlYWRpbmcgcG9ydGZvbGlvIGVsZW1lbnRzLlxuICogUmVhZC1vbmx5IOKAlCBubyBtdXRhdGlvbnMgaW4gVjEuXG4gKlxuICogQWxsIGVsZW1lbnQgY29udGVudCBpcyBzYW5pdGl6ZWQgYmVmb3JlIHNlcnZpbmcgdG8gcHJldmVudCBYU1MuXG4gKlxuICogU2VjdXJpdHkgbm90ZTogVGhpcyB3ZWIgc2VydmVyIGJpbmRzIHRvIDEyNy4wLjAuMSBvbmx5IChzZWUgc2VydmVyLnRzKS5cbiAqIFJhdGUgbGltaXRpbmcgb24gcmVhZC1vbmx5IEdFVCBlbmRwb2ludHMgaXMgbm90IHJlcXVpcmVkIGZvciBsb2NhbGhvc3Qtb25seVxuICogbWFuYWdlbWVudCBpbnRlcmZhY2VzLiBUaGUgUE9TVCAvYXBpL2luc3RhbGwgZW5kcG9pbnQgaGFzIGV4cGxpY2l0IHJhdGUgbGltaXRpbmdcbiAqIHZpYSBTbGlkaW5nV2luZG93UmF0ZUxpbWl0ZXIgKG1heCAxMCBwZXIgbWludXRlKS5cbiAqIGNvZGVxbFtqcy9taXNzaW5nLXJhdGUtbGltaXRpbmddIOKAlCBBY2tub3dsZWRnZWQ7IGxvY2FsaG9zdC1vbmx5IGJpbmRpbmcgbWl0aWdhdGVzIERvUyByaXNrLlxuICovXG5cbmltcG9ydCBleHByZXNzLCB7IFJvdXRlciB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IHsgcmVhZGRpciwgcmVhZEZpbGUsIHN0YXQgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IGpvaW4sIGV4dG5hbWUsIHJlc29sdmUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgU2VjdXJlWWFtbFBhcnNlciB9IGZyb20gJy4uL3NlY3VyaXR5L3NlY3VyZVlhbWxQYXJzZXIuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IHZhbGlkYXRlRWxlbWVudENvbnRlbnQsIHR5cGUgUGlwZWxpbmVSZXN1bHQsIHR5cGUgRWxlbWVudERpc3BsYXlNZXRhZGF0YSB9IGZyb20gJy4vY29udGVudFBpcGVsaW5lLmpzJztcbmltcG9ydCB0eXBlIHsgTUNQQVFMSGFuZGxlciB9IGZyb20gJy4uL2hhbmRsZXJzL21jcC1hcWwvTUNQQVFMSGFuZGxlci5qcyc7XG5cbi8qKiBOb3JtYWxpemUgdXNlciBpbnB1dCB0byBORkMgZm9ybSB0byBwcmV2ZW50IFVuaWNvZGUgaG9tb2dyYXBoIGF0dGFja3MgKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUlucHV0KGlucHV0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gaW5wdXQubm9ybWFsaXplKCdORkMnKTtcbn1cbmltcG9ydCB7IENvbnRlbnRWYWxpZGF0b3IgfSBmcm9tICcuLi9zZWN1cml0eS9jb250ZW50VmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IFNsaWRpbmdXaW5kb3dSYXRlTGltaXRlciB9IGZyb20gJy4uL3V0aWxzL1NsaWRpbmdXaW5kb3dSYXRlTGltaXRlci5qcyc7XG5cbmNvbnN0IEVMRU1FTlRfVFlQRVMgPSBbJ3BlcnNvbmFzJywgJ3NraWxscycsICd0ZW1wbGF0ZXMnLCAnYWdlbnRzJywgJ21lbW9yaWVzJywgJ2Vuc2VtYmxlcyddIGFzIGNvbnN0O1xuXG4vKiogTWF4IGZpbGUgc2l6ZSBmb3IgZWxlbWVudCByZWFkcyAoMSBNQikgKi9cbmNvbnN0IE1BWF9GSUxFX1NJWkVfQllURVMgPSAxXzA0OF81NzY7XG5cbi8qKiBWYWxpZCBlbGVtZW50IGZpbGUgZXh0ZW5zaW9ucyAqL1xuY29uc3QgVkFMSURfRVhURU5TSU9OUyA9IG5ldyBTZXQoWycubWQnLCAnLnlhbWwnLCAnLnltbCddKTtcblxuLyoqIEtub3duLXNhZmUgZmlsZW5hbWUgcGF0dGVybjogc3RhcnRzIGFscGhhbnVtZXJpYywgYm9keSBhbGxvd3MgaHlwaGVucy91bmRlcnNjb3JlcywgdmFsaWQgZXh0ZW5zaW9uICovXG5jb25zdCBTQUZFX0ZJTEVOQU1FX1JFID0gL15bYS16QS1aMC05XVthLXpBLVowLTlfLV0qXFwuKHlhbWx8eW1sfG1kKSQvO1xuXG4vKiogQ2hlY2sgaWYgYSBmaWxlbmFtZSBpcyBhIGJhY2t1cCBvciBjcnVmdCBmaWxlICovXG5mdW5jdGlvbiBpc0JhY2t1cE9yQ3J1ZnQoZmlsZW5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAvLyBHdWFyYW50ZWVkIHNhZmUgZmlsZW5hbWVzIHNraXAgYmxhY2tsaXN0IGNoZWNrcyBlbnRpcmVseVxuICBpZiAoU0FGRV9GSUxFTkFNRV9SRS50ZXN0KGZpbGVuYW1lKSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoZmlsZW5hbWUuc3RhcnRzV2l0aCgnLicpKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKGZpbGVuYW1lID09PSAnX2luZGV4Lmpzb24nKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKGZpbGVuYW1lLmluY2x1ZGVzKCcuYmFja3VwJykgfHwgZmlsZW5hbWUuaW5jbHVkZXMoJy5zdGF0ZScpKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKGZpbGVuYW1lLmVuZHNXaXRoKCcuYmFrJykgfHwgZmlsZW5hbWUuZW5kc1dpdGgoJ34nKSkgcmV0dXJuIHRydWU7XG4gIGlmIChmaWxlbmFtZS5pbmNsdWRlcygnIGNvcHknKSkgcmV0dXJuIHRydWU7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBTY2FuIGEgZGlyZWN0b3J5IGZvciB2YWxpZCBlbGVtZW50cywgcnVubmluZyBlYWNoIHRocm91Z2ggdGhlIHNlY3VyaXR5XG4gKiB2YWxpZGF0aW9uIHBpcGVsaW5lLiBSZXR1cm5zIG1ldGFkYXRhIG9iamVjdHMgcmVhZHkgZm9yIEFQSSByZXNwb25zZXMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNjYW5FbGVtZW50RGlyZWN0b3J5KHR5cGVEaXI6IHN0cmluZywgdHlwZTogc3RyaW5nLCBsb2dQcmVmaXg6IHN0cmluZyk6IFByb21pc2U8dW5rbm93bltdPiB7XG4gIGNvbnN0IGZpbGVzID0gYXdhaXQgcmVhZGRpcih0eXBlRGlyKTtcbiAgY29uc3QgZWxlbWVudHM6IHVua25vd25bXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgIGlmIChpc0JhY2t1cE9yQ3J1ZnQoZmlsZSkpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGV4dCA9IGV4dG5hbWUoZmlsZSk7XG4gICAgaWYgKCFWQUxJRF9FWFRFTlNJT05TLmhhcyhleHQpKSBjb250aW51ZTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWxlUGF0aCA9IGpvaW4odHlwZURpciwgZmlsZSk7XG4gICAgICBjb25zdCBmaWxlU3RhdCA9IGF3YWl0IHN0YXQoZmlsZVBhdGgpO1xuICAgICAgaWYgKCFmaWxlU3RhdC5pc0ZpbGUoKSB8fCBmaWxlU3RhdC5zaXplID4gTUFYX0ZJTEVfU0laRV9CWVRFUykgY29udGludWU7XG5cbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCByZWFkRmlsZShmaWxlUGF0aCwgJ3V0Zi04Jyk7XG4gICAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gdmFsaWRhdGVFbGVtZW50Q29udGVudChmaWxlLCBjb250ZW50LCB0eXBlKTtcblxuICAgICAgaWYgKCF2YWxpZGF0aW9uUmVzdWx0LnZhbGlkKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgJHtsb2dQcmVmaXh9IFNraXBwaW5nIHJlamVjdGVkIGZpbGUgJHtmaWxlfTogJHt2YWxpZGF0aW9uUmVzdWx0LnJlamVjdGlvbj8ucmVhc29ufWApO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBtZXRhZGF0YSB9ID0gdmFsaWRhdGlvblJlc3VsdDtcbiAgICAgIGVsZW1lbnRzLnB1c2goe1xuICAgICAgICBuYW1lOiBtZXRhZGF0YS5uYW1lIHx8IGZpbGUucmVwbGFjZShleHQsICcnKSxcbiAgICAgICAgZGVzY3JpcHRpb246IG1ldGFkYXRhLmRlc2NyaXB0aW9uIHx8ICcnLFxuICAgICAgICB0eXBlOiB0eXBlLnNsaWNlKDAsIC0xKSxcbiAgICAgICAgdmVyc2lvbjogbWV0YWRhdGEudmVyc2lvbiB8fCAnMS4wLjAnLFxuICAgICAgICBhdXRob3I6IG1ldGFkYXRhLmF1dGhvciB8fCAnJyxcbiAgICAgICAgY2F0ZWdvcnk6IG1ldGFkYXRhLmNhdGVnb3J5IHx8ICcnLFxuICAgICAgICB0YWdzOiBtZXRhZGF0YS50YWdzIHx8ICcnLFxuICAgICAgICBjcmVhdGVkOiBtZXRhZGF0YS5jcmVhdGVkIHx8ICcnLFxuICAgICAgICBmaWxlbmFtZTogZmlsZSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nZ2VyLmRlYnVnKGAke2xvZ1ByZWZpeH0gRmFpbGVkIHRvIHBhcnNlICR7ZmlsZX06YCwgZXJyKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZWxlbWVudHM7XG59XG5cbi8qKiBOb3JtYWxpemUgcGx1cmFsIGVsZW1lbnQgdHlwZSB0byBzaW5ndWxhciBmb3JtICovXG5jb25zdCBQTFVSQUxfVE9fU0lOR1VMQVI6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gIHBlcnNvbmFzOiAncGVyc29uYScsIHNraWxsczogJ3NraWxsJywgdGVtcGxhdGVzOiAndGVtcGxhdGUnLFxuICBhZ2VudHM6ICdhZ2VudCcsIG1lbW9yaWVzOiAnbWVtb3J5JywgZW5zZW1ibGVzOiAnZW5zZW1ibGUnLFxufTtcbmZ1bmN0aW9uIHRvU2luZ3VsYXJUeXBlKHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBQTFVSQUxfVE9fU0lOR1VMQVJbdHlwZV0gfHwgKHR5cGUuZW5kc1dpdGgoJ3MnKSA/IHR5cGUuc2xpY2UoMCwgLTEpIDogdHlwZSk7XG59XG5cbi8qKiBCdWlsZCBhIHN0cnVjdHVyZWQgdmFsaWRhdGlvbiByZXNwb25zZSBmb3IgZWxlbWVudCBkZXRhaWwgcm91dGVzICovXG5mdW5jdGlvbiBidWlsZFZhbGlkYXRpb25SZXNwb25zZSh2YWxpZGF0aW9uOiBQaXBlbGluZVJlc3VsdCwgY29udGVudDogc3RyaW5nLCB0eXBlOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHtcbiAgICBtZXRhZGF0YTogdmFsaWRhdGlvbi5tZXRhZGF0YSxcbiAgICBib2R5OiB2YWxpZGF0aW9uLmJvZHksXG4gICAgcmF3OiBjb250ZW50LFxuICAgIHR5cGU6IHRvU2luZ3VsYXJUeXBlKHR5cGUpLFxuICAgIHZhbGlkYXRpb246IHtcbiAgICAgIHN0YXR1czogdmFsaWRhdGlvbi52YWxpZCA/ICdwYXNzJyA6ICd3YXJuJyxcbiAgICAgIC4uLih2YWxpZGF0aW9uLnJlamVjdGlvbiAmJiB7XG4gICAgICAgIHJlYXNvbjogdmFsaWRhdGlvbi5yZWplY3Rpb24ucmVhc29uLFxuICAgICAgICBzZXZlcml0eTogdmFsaWRhdGlvbi5yZWplY3Rpb24uc2V2ZXJpdHksXG4gICAgICAgIHBhdHRlcm5zOiB2YWxpZGF0aW9uLnJlamVjdGlvbi5wYXR0ZXJucyxcbiAgICAgIH0pLFxuICAgIH0sXG4gIH07XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIGZpbGUgcGF0aCBmb3IgYW4gZWxlbWVudCwgaGFuZGxpbmcgbWVtb3J5IGRhdGUtcGF0aHNcbiAqIGFuZCBuYW1lLXdpdGgtb3Itd2l0aG91dC1leHRlbnNpb24gbWF0Y2hpbmcuXG4gKiBSZXR1cm5zIHRoZSByZXNvbHZlZCBwYXRoIG9yIG51bGwgd2l0aCBhbiBlcnJvciB0byBzZW5kLlxuICovXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlRWxlbWVudEZpbGVQYXRoKFxuICBwb3J0Zm9saW9EaXI6IHN0cmluZywgdHlwZTogc3RyaW5nLCBuYW1lOiBzdHJpbmdcbik6IFByb21pc2U8eyBmaWxlUGF0aDogc3RyaW5nIH0gfCB7IGVycm9yOiBzdHJpbmc7IHN0YXR1czogbnVtYmVyIH0+IHtcbiAgaWYgKHR5cGUgPT09ICdtZW1vcmllcycgJiYgbmFtZS5pbmNsdWRlcygnLycpKSB7XG4gICAgY29uc3QgcGFydHMgPSBuYW1lLnNwbGl0KCcvJyk7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gMiB8fCAhL15cXGR7NH0tXFxkezJ9LVxcZHsyfSQvLnRlc3QocGFydHNbMF0pIHx8IGlzQmFja3VwT3JDcnVmdChwYXJ0c1sxXSkpIHtcbiAgICAgIHJldHVybiB7IGVycm9yOiAnSW52YWxpZCBtZW1vcnkgcGF0aCcsIHN0YXR1czogNDAwIH07XG4gICAgfVxuICAgIGNvbnN0IGZpbGVQYXRoID0gam9pbihwb3J0Zm9saW9EaXIsIHR5cGUsIG5hbWUpO1xuICAgIGNvbnN0IHJlc29sdmVkUGF0aCA9IHJlc29sdmUoZmlsZVBhdGgpO1xuICAgIGlmICghcmVzb2x2ZWRQYXRoLnN0YXJ0c1dpdGgocmVzb2x2ZShwb3J0Zm9saW9EaXIpKSkge1xuICAgICAgcmV0dXJuIHsgZXJyb3I6ICdQYXRoIHRyYXZlcnNhbCBkZXRlY3RlZCcsIHN0YXR1czogNDAwIH07XG4gICAgfVxuICAgIHJldHVybiB7IGZpbGVQYXRoIH07XG4gIH1cblxuICBjb25zdCB0eXBlRGlyID0gam9pbihwb3J0Zm9saW9EaXIsIHR5cGUpO1xuICBjb25zdCBmaWxlcyA9IGF3YWl0IHJlYWRkaXIodHlwZURpcik7XG4gIGNvbnN0IG1hdGNoID0gZmlsZXMuZmluZChmID0+IHtcbiAgICBjb25zdCBiYXNlID0gZi5yZXBsYWNlKGV4dG5hbWUoZiksICcnKTtcbiAgICByZXR1cm4gYmFzZSA9PT0gbmFtZSB8fCBmID09PSBuYW1lO1xuICB9KTtcblxuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6IGBFbGVtZW50IG5vdCBmb3VuZDogJHt0eXBlfS8ke25hbWV9YCwgc3RhdHVzOiA0MDQgfTtcbiAgfVxuXG4gIGNvbnN0IGZpbGVQYXRoID0gam9pbihwb3J0Zm9saW9EaXIsIHR5cGUsIG1hdGNoKTtcbiAgY29uc3QgcmVzb2x2ZWRQYXRoID0gcmVzb2x2ZShmaWxlUGF0aCk7XG4gIGlmICghcmVzb2x2ZWRQYXRoLnN0YXJ0c1dpdGgocmVzb2x2ZShwb3J0Zm9saW9EaXIpKSkge1xuICAgIHJldHVybiB7IGVycm9yOiAnUGF0aCB0cmF2ZXJzYWwgZGV0ZWN0ZWQnLCBzdGF0dXM6IDQwMCB9O1xuICB9XG4gIHJldHVybiB7IGZpbGVQYXRoIH07XG59XG5cbi8qKlxuICogTG9hZCBtZW1vcmllcyBmcm9tIHRoZSBfaW5kZXguanNvbiBmaWxlLlxuICogTWVtb3JpZXMgdXNlIGRhdGUtcGFydGl0aW9uZWQgc3RvcmFnZSB3aXRoIGFuIGluZGV4LCB1bmxpa2Ugb3RoZXJcbiAqIGVsZW1lbnQgdHlwZXMgd2hpY2ggYXJlIGZsYXQgZmlsZXMgaW4gYSBkaXJlY3RvcnkuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGxvYWRNZW1vcmllc0Zyb21JbmRleChwb3J0Zm9saW9EaXI6IHN0cmluZyk6IFByb21pc2U8dW5rbm93bltdPiB7XG4gIGNvbnN0IGluZGV4UGF0aCA9IGpvaW4ocG9ydGZvbGlvRGlyLCAnbWVtb3JpZXMnLCAnX2luZGV4Lmpzb24nKTtcbiAgdHJ5IHtcbiAgICBjb25zdCByYXcgPSBhd2FpdCByZWFkRmlsZShpbmRleFBhdGgsICd1dGYtOCcpO1xuICAgIGNvbnN0IGluZGV4ID0gSlNPTi5wYXJzZShyYXcpIGFzIHtcbiAgICAgIGVudHJpZXM/OiBSZWNvcmQ8c3RyaW5nLCB7IG5hbWU/OiBzdHJpbmc7IGRlc2NyaXB0aW9uPzogc3RyaW5nOyB0YWdzPzogc3RyaW5nW107IGNyZWF0ZWQ/OiBzdHJpbmc7IFtrZXk6IHN0cmluZ106IHVua25vd24gfT47XG4gICAgICBlbnRyeUNvdW50PzogbnVtYmVyO1xuICAgIH07XG5cbiAgICBjb25zdCBlbnRyaWVzID0gaW5kZXguZW50cmllcyB8fCB7fTtcbiAgICBjb25zdCBlbGVtZW50czogdW5rbm93bltdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IFtwYXRoLCBlbnRyeV0gb2YgT2JqZWN0LmVudHJpZXMoZW50cmllcykpIHtcbiAgICAgIGlmICghZW50cnkgfHwgdHlwZW9mIGVudHJ5ICE9PSAnb2JqZWN0JykgY29udGludWU7XG4gICAgICBjb25zdCBwYXRoUGFydHMgPSBwYXRoLnNwbGl0KCcvJyk7XG4gICAgICBjb25zdCBmaWxlbmFtZSA9IHBhdGhQYXJ0cy5wb3AoKSB8fCBwYXRoO1xuICAgICAgLy8gRXh0cmFjdCBkYXRlIGZyb20gZGlyZWN0b3J5IHBhdGggKGUuZy4sIFwiMjAyNS0wOS0xOS9jb2RlLXBhdHRlcm5zLnlhbWxcIiAtPiBcIjIwMjUtMDktMTlcIilcbiAgICAgIGNvbnN0IGRhdGVGcm9tUGF0aCA9IHBhdGhQYXJ0cy5sZW5ndGggPiAwICYmIC9eXFxkezR9LVxcZHsyfS1cXGR7Mn0kLy50ZXN0KHBhdGhQYXJ0c1swXSkgPyBwYXRoUGFydHNbMF0gOiAnJztcbiAgICAgIC8vIEZhbGwgYmFjayB0byBmaWxlbmFtZSBpZiBpbmRleCBoYXMgbm8gbmFtZSBvciBzdG9yZWQgXCJ1bm5hbWVkXCIgKHVwc3RyZWFtIGluZGV4ZXIgYnVnKVxuICAgICAgY29uc3QgaW5kZXhOYW1lID0gZW50cnkubmFtZSAmJiBlbnRyeS5uYW1lICE9PSAndW5uYW1lZCcgPyBlbnRyeS5uYW1lIDogbnVsbDtcbiAgICAgIGNvbnN0IG5hbWUgPSBpbmRleE5hbWUgfHwgZmlsZW5hbWUucmVwbGFjZSgvXFwuKHlhbWx8eW1sfG1kKSQvLCAnJyk7XG5cbiAgICAgIGVsZW1lbnRzLnB1c2goe1xuICAgICAgICBuYW1lLFxuICAgICAgICBkZXNjcmlwdGlvbjogZW50cnkuZGVzY3JpcHRpb24gfHwgJycsXG4gICAgICAgIHR5cGU6ICdtZW1vcnknLFxuICAgICAgICB2ZXJzaW9uOiBlbnRyeS52ZXJzaW9uIHx8ICcxLjAuMCcsXG4gICAgICAgIGF1dGhvcjogZW50cnkuYXV0aG9yIHx8ICcnLFxuICAgICAgICBjYXRlZ29yeTogZW50cnkuY2F0ZWdvcnkgfHwgZW50cnkubWVtb3J5VHlwZSB8fCAnJyxcbiAgICAgICAgdGFnczogZW50cnkudGFncyB8fCBbXSxcbiAgICAgICAgY3JlYXRlZDogZW50cnkuY3JlYXRlZCB8fCBkYXRlRnJvbVBhdGgsXG4gICAgICAgIGZpbGVuYW1lOiBwYXRoLCAvLyBkYXRlL2ZpbGVuYW1lIHBhdGggZm9yIGNvbnRlbnQgbG9hZGluZ1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVsZW1lbnRzO1xuICB9IGNhdGNoIHtcbiAgICAvLyBGYWxsIGJhY2sgdG8gZW1wdHkgaWYgbm8gaW5kZXhcbiAgICByZXR1cm4gW107XG4gIH1cbn1cblxuLyoqIFJhdGUgbGltaXRlciBmb3IgL2FwaS9pbnN0YWxsOiBtYXggMTAgaW5zdGFsbHMgcGVyIDYwIHNlY29uZHMgKi9cbmNvbnN0IGluc3RhbGxSYXRlTGltaXRlciA9IG5ldyBTbGlkaW5nV2luZG93UmF0ZUxpbWl0ZXIoMTAsIDYwXzAwMCk7XG5cbi8qKiBTYW5pdGl6ZSB0ZXh0IGNvbnRlbnQgdG8gcHJldmVudCBYU1MgaW4gcmVuZGVyZWQgSFRNTCAqL1xuZnVuY3Rpb24gc2FuaXRpemVGb3JIdG1sKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0XG4gICAgLnJlcGxhY2UoLyYvZywgJyZhbXA7JylcbiAgICAucmVwbGFjZSgvPC9nLCAnJmx0OycpXG4gICAgLnJlcGxhY2UoLz4vZywgJyZndDsnKVxuICAgIC5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7JylcbiAgICAucmVwbGFjZSgvJy9nLCAnJiMzOTsnKTtcbn1cblxuLyoqIFBhcnNlIFlBTUwgZnJvbnQgbWF0dGVyIGZyb20gYSBtYXJrZG93biBmaWxlICovXG5mdW5jdGlvbiBwYXJzZUZyb250TWF0dGVyKGNvbnRlbnQ6IHN0cmluZyk6IHsgbWV0YWRhdGE6IEVsZW1lbnREaXNwbGF5TWV0YWRhdGE7IGJvZHk6IHN0cmluZyB9IHtcbiAgY29uc3QgbWF0Y2ggPSBjb250ZW50Lm1hdGNoKC9eLS0tXFxyP1xcbihbXFxzXFxTXSo/KVxccj9cXG4tLS1cXHI/XFxuPyhbXFxzXFxTXSopJC8pO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuIHsgbWV0YWRhdGE6IHt9LCBib2R5OiBjb250ZW50IH07XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IFNlY3VyZVlhbWxQYXJzZXIucGFyc2VSYXdZYW1sKG1hdGNoWzFdKTtcbiAgICBjb25zdCBtZXRhZGF0YSA9ICh0eXBlb2YgcGFyc2VkID09PSAnb2JqZWN0JyAmJiBwYXJzZWQgIT09IG51bGwpID8gcGFyc2VkIGFzIEVsZW1lbnREaXNwbGF5TWV0YWRhdGEgOiB7fTtcbiAgICByZXR1cm4geyBtZXRhZGF0YSwgYm9keTogbWF0Y2hbMl0gfTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHsgbWV0YWRhdGE6IHt9LCBib2R5OiBtYXRjaFsyXSB8fCBjb250ZW50IH07XG4gIH1cbn1cblxuLyoqIFBhcnNlIGEgWUFNTC1vbmx5IGZpbGUgKG1lbW9yaWVzKSAqL1xuZnVuY3Rpb24gcGFyc2VZYW1sRmlsZShjb250ZW50OiBzdHJpbmcpOiB7IG1ldGFkYXRhOiBFbGVtZW50RGlzcGxheU1ldGFkYXRhOyBib2R5OiBzdHJpbmcgfSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGFyc2VkID0gU2VjdXJlWWFtbFBhcnNlci5wYXJzZVJhd1lhbWwoY29udGVudCk7XG4gICAgY29uc3QgbWV0YWRhdGEgPSAodHlwZW9mIHBhcnNlZCA9PT0gJ29iamVjdCcgJiYgcGFyc2VkICE9PSBudWxsKSA/IHBhcnNlZCBhcyBFbGVtZW50RGlzcGxheU1ldGFkYXRhIDoge307XG4gICAgcmV0dXJuIHsgbWV0YWRhdGEsIGJvZHk6ICcnIH07XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB7IG1ldGFkYXRhOiB7fSwgYm9keTogY29udGVudCB9O1xuICB9XG59XG5cbi8qKlxuICogUmVnaXN0ZXIgcG9ydGZvbGlvIHJvdXRlcyBzaGFyZWQgYmV0d2VlbiBzaW1wbGUgYW5kIGdhdGV3YXkgbW9kZXMuXG4gKiBUaGUgc3RydWN0dXJlZERldGFpbCBvcHRpb24gY29udHJvbHMgd2hldGhlciBkZXRhaWwgcm91dGVzIHJldHVyblxuICogc3RydWN0dXJlZCBKU09OIChnYXRld2F5KSBvciBwbGFpbiB0ZXh0IChzaW1wbGUvbGVnYWN5KS5cbiAqL1xuZnVuY3Rpb24gcmVnaXN0ZXJQb3J0Zm9saW9Sb3V0ZXMoXG4gIHJvdXRlcjogUm91dGVyLFxuICBwb3J0Zm9saW9EaXI6IHN0cmluZyxcbiAgb3B0aW9uczogeyBzdHJ1Y3R1cmVkRGV0YWlsOiBib29sZWFuOyBsb2dQcmVmaXg6IHN0cmluZyB9LFxuKTogdm9pZCB7XG4gIGNvbnN0IHsgc3RydWN0dXJlZERldGFpbCwgbG9nUHJlZml4IH0gPSBvcHRpb25zO1xuXG4gIHJvdXRlci5nZXQoJy9lbGVtZW50cycsIGFzeW5jIChyZXEsIHJlcykgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYWdlUGFyYW0gPSByZXEucXVlcnkucGFnZSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBwYWdlU2l6ZVBhcmFtID0gcmVxLnF1ZXJ5LnBhZ2VTaXplIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHdhbnRQYWdpbmF0aW9uID0gcGFnZVBhcmFtICE9PSB1bmRlZmluZWQgJiYgcGFnZVNpemVQYXJhbSAhPT0gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgcGFnZSA9IE1hdGgubWF4KDEsIE51bWJlci5wYXJzZUludChwYWdlUGFyYW0gfHwgJzEnLCAxMCkgfHwgMSk7XG4gICAgICBjb25zdCBwYWdlU2l6ZSA9IE1hdGgubWF4KDEsIE1hdGgubWluKDIwMCwgTnVtYmVyLnBhcnNlSW50KHBhZ2VTaXplUGFyYW0gfHwgJzUwJywgMTApIHx8IDUwKSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgdW5rbm93bltdPiA9IHt9O1xuICAgICAgbGV0IHRvdGFsQ291bnQgPSAwO1xuXG4gICAgICBmb3IgKGNvbnN0IHR5cGUgb2YgRUxFTUVOVF9UWVBFUykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmICh0eXBlID09PSAnbWVtb3JpZXMnKSB7XG4gICAgICAgICAgICBjb25zdCBtZW1FbGVtZW50cyA9IGF3YWl0IGxvYWRNZW1vcmllc0Zyb21JbmRleChwb3J0Zm9saW9EaXIpO1xuICAgICAgICAgICAgcmVzdWx0W3R5cGVdID0gbWVtRWxlbWVudHM7XG4gICAgICAgICAgICB0b3RhbENvdW50ICs9IG1lbUVsZW1lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHR5cGVEaXIgPSBqb2luKHBvcnRmb2xpb0RpciwgdHlwZSk7XG4gICAgICAgICAgY29uc3QgZGlyU3RhdCA9IGF3YWl0IHN0YXQodHlwZURpcik7XG4gICAgICAgICAgaWYgKCFkaXJTdGF0LmlzRGlyZWN0b3J5KCkpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgY29uc3QgZWxlbWVudHMgPSBhd2FpdCBzY2FuRWxlbWVudERpcmVjdG9yeSh0eXBlRGlyLCB0eXBlLCBsb2dQcmVmaXgpO1xuICAgICAgICAgIHJlc3VsdFt0eXBlXSA9IGVsZW1lbnRzO1xuICAgICAgICAgIHRvdGFsQ291bnQgKz0gZWxlbWVudHMubGVuZ3RoO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXN1bHRbdHlwZV0gPSBbXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAod2FudFBhZ2luYXRpb24pIHtcbiAgICAgICAgY29uc3QgYWxsRWxlbWVudHM6IHVua25vd25bXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHR5cGUgb2YgRUxFTUVOVF9UWVBFUykge1xuICAgICAgICAgIGFsbEVsZW1lbnRzLnB1c2goLi4uKHJlc3VsdFt0eXBlXSB8fCBbXSkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gKHBhZ2UgLSAxKSAqIHBhZ2VTaXplO1xuICAgICAgICBjb25zdCBwYWdlZCA9IGFsbEVsZW1lbnRzLnNsaWNlKHN0YXJ0LCBzdGFydCArIHBhZ2VTaXplKTtcbiAgICAgICAgY29uc3QgdG90YWxQYWdlcyA9IE1hdGguY2VpbChhbGxFbGVtZW50cy5sZW5ndGggLyBwYWdlU2l6ZSk7XG4gICAgICAgIHJlcy5qc29uKHsgZWxlbWVudHM6IHBhZ2VkLCB0b3RhbENvdW50OiBhbGxFbGVtZW50cy5sZW5ndGgsIHBhZ2UsIHBhZ2VTaXplLCB0b3RhbFBhZ2VzIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzLmpzb24oeyBlbGVtZW50czogcmVzdWx0LCB0b3RhbENvdW50IH0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nZ2VyLmVycm9yKGAke2xvZ1ByZWZpeH0gRmFpbGVkIHRvIGxpc3QgZWxlbWVudHM6YCwgZXJyKTtcbiAgICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHsgZXJyb3I6ICdGYWlsZWQgdG8gbGlzdCBlbGVtZW50cycgfSk7XG4gICAgfVxuICB9KTtcblxuICByb3V0ZXIuZ2V0KCcvZWxlbWVudHMvOnR5cGUnLCBhc3luYyAocmVxLCByZXMpID0+IHtcbiAgICBjb25zdCB0eXBlID0gbm9ybWFsaXplSW5wdXQocmVxLnBhcmFtcy50eXBlKTtcbiAgICBpZiAoIUVMRU1FTlRfVFlQRVMuaW5jbHVkZXModHlwZSBhcyB0eXBlb2YgRUxFTUVOVF9UWVBFU1tudW1iZXJdKSkge1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogYEludmFsaWQgZWxlbWVudCB0eXBlOiAke3R5cGV9YCB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGUgPT09ICdtZW1vcmllcycpIHtcbiAgICAgICAgY29uc3QgbWVtRWxlbWVudHMgPSBhd2FpdCBsb2FkTWVtb3JpZXNGcm9tSW5kZXgocG9ydGZvbGlvRGlyKTtcbiAgICAgICAgcmVzLmpzb24oeyB0eXBlLCBlbGVtZW50czogbWVtRWxlbWVudHMsIGNvdW50OiBtZW1FbGVtZW50cy5sZW5ndGggfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZWxlbWVudHMgPSBhd2FpdCBzY2FuRWxlbWVudERpcmVjdG9yeShqb2luKHBvcnRmb2xpb0RpciwgdHlwZSksIHR5cGUsIGxvZ1ByZWZpeCk7XG4gICAgICByZXMuanNvbih7IHR5cGUsIGVsZW1lbnRzLCBjb3VudDogZWxlbWVudHMubGVuZ3RoIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmVzLnN0YXR1cyg1MDApLmpzb24oeyBlcnJvcjogYEZhaWxlZCB0byBsaXN0ICR7dHlwZX1gIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgcm91dGVyLmdldCgnL2VsZW1lbnRzL21lbW9yaWVzLzpkYXRlLzpmaWxlJywgYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gICAgY29uc3QgeyBkYXRlLCBmaWxlIH0gPSByZXEucGFyYW1zO1xuXG4gICAgaWYgKCEvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9JC8udGVzdChkYXRlKSkge1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogJ0ludmFsaWQgZGF0ZSBmb3JtYXQnIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZmlsZS5pbmNsdWRlcygnLi4nKSB8fCBmaWxlLmluY2x1ZGVzKCcvJykgfHwgZmlsZS5pbmNsdWRlcygnXFxcXCcpIHx8IGlzQmFja3VwT3JDcnVmdChmaWxlKSkge1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogJ0ludmFsaWQgZmlsZW5hbWUnIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWxlUGF0aCA9IGpvaW4ocG9ydGZvbGlvRGlyLCAnbWVtb3JpZXMnLCBkYXRlLCBmaWxlKTtcbiAgICAgIGNvbnN0IHJlc29sdmVkUGF0aCA9IHJlc29sdmUoZmlsZVBhdGgpO1xuICAgICAgaWYgKCFyZXNvbHZlZFBhdGguc3RhcnRzV2l0aChyZXNvbHZlKHBvcnRmb2xpb0RpcikpKSB7XG4gICAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdQYXRoIHRyYXZlcnNhbCBkZXRlY3RlZCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmlsZVN0YXQgPSBhd2FpdCBzdGF0KGZpbGVQYXRoKTtcbiAgICAgIGlmICghZmlsZVN0YXQuaXNGaWxlKCkgfHwgZmlsZVN0YXQuc2l6ZSA+IE1BWF9GSUxFX1NJWkVfQllURVMpIHtcbiAgICAgICAgcmVzLnN0YXR1cyhmaWxlU3RhdC5pc0ZpbGUoKSA/IDQxMyA6IDQwNCkuanNvbih7IGVycm9yOiBmaWxlU3RhdC5pc0ZpbGUoKSA/ICdGaWxlIHRvbyBsYXJnZScgOiAnTm90IGZvdW5kJyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgcmVhZEZpbGUoZmlsZVBhdGgsICd1dGYtOCcpO1xuICAgICAgaWYgKHN0cnVjdHVyZWREZXRhaWwpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGlvbiA9IHZhbGlkYXRlRWxlbWVudENvbnRlbnQoZmlsZSwgY29udGVudCwgJ21lbW9yaWVzJyk7XG4gICAgICAgIHJlcy5qc29uKGJ1aWxkVmFsaWRhdGlvblJlc3BvbnNlKHZhbGlkYXRpb24sIGNvbnRlbnQsICdtZW1vcmllcycpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Jyk7XG4gICAgICAgIHJlcy5zZW5kKGNvbnRlbnQpO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgcmVzLnN0YXR1cyg0MDQpLmpzb24oeyBlcnJvcjogYE1lbW9yeSBub3QgZm91bmQ6ICR7ZGF0ZX0vJHtmaWxlfWAgfSk7XG4gICAgfVxuICB9KTtcblxuICByb3V0ZXIuZ2V0KCcvZWxlbWVudHMvOnR5cGUvOm5hbWUnLCBhc3luYyAocmVxLCByZXMpID0+IHtcbiAgICBjb25zdCB0eXBlID0gcmVxLnBhcmFtcy50eXBlO1xuICAgIGNvbnN0IG5hbWUgPSBub3JtYWxpemVJbnB1dChyZXEucGFyYW1zLm5hbWUpO1xuICAgIGlmICghRUxFTUVOVF9UWVBFUy5pbmNsdWRlcyh0eXBlIGFzIHR5cGVvZiBFTEVNRU5UX1RZUEVTW251bWJlcl0pKSB7XG4gICAgICByZXMuc3RhdHVzKDQwMCkuanNvbih7IGVycm9yOiBgSW52YWxpZCBlbGVtZW50IHR5cGU6ICR7dHlwZX1gIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChuYW1lLmluY2x1ZGVzKCcuLicpIHx8IG5hbWUuaW5jbHVkZXMoJ1xcXFwnKSkge1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogJ0ludmFsaWQgZWxlbWVudCBuYW1lJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodHlwZSAhPT0gJ21lbW9yaWVzJyAmJiBuYW1lLmluY2x1ZGVzKCcvJykpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdJbnZhbGlkIGVsZW1lbnQgbmFtZScgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc29sdmVkID0gYXdhaXQgcmVzb2x2ZUVsZW1lbnRGaWxlUGF0aChwb3J0Zm9saW9EaXIsIHR5cGUsIG5hbWUpO1xuICAgICAgaWYgKCdlcnJvcicgaW4gcmVzb2x2ZWQpIHtcbiAgICAgICAgcmVzLnN0YXR1cyhyZXNvbHZlZC5zdGF0dXMpLmpzb24oeyBlcnJvcjogcmVzb2x2ZWQuZXJyb3IgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmlsZVN0YXQgPSBhd2FpdCBzdGF0KHJlc29sdmVkLmZpbGVQYXRoKTtcbiAgICAgIGlmIChmaWxlU3RhdC5zaXplID4gTUFYX0ZJTEVfU0laRV9CWVRFUykge1xuICAgICAgICByZXMuc3RhdHVzKDQxMykuanNvbih7IGVycm9yOiBgRmlsZSB0b28gbGFyZ2UgKCR7ZmlsZVN0YXQuc2l6ZX0gYnl0ZXMpLiBNYXggMSBNQi5gIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCByZWFkRmlsZShyZXNvbHZlZC5maWxlUGF0aCwgJ3V0Zi04Jyk7XG4gICAgICBpZiAoc3RydWN0dXJlZERldGFpbCkge1xuICAgICAgICBjb25zdCBmaWxlbmFtZSA9IHJlc29sdmVkLmZpbGVQYXRoLnNwbGl0KCcvJykucG9wKCkgfHwgbmFtZTtcbiAgICAgICAgY29uc3QgdmFsaWRhdGlvbiA9IHZhbGlkYXRlRWxlbWVudENvbnRlbnQoZmlsZW5hbWUsIGNvbnRlbnQsIHR5cGUpO1xuICAgICAgICByZXMuanNvbihidWlsZFZhbGlkYXRpb25SZXNwb25zZSh2YWxpZGF0aW9uLCBjb250ZW50LCB0eXBlKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXMuc2V0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCcpO1xuICAgICAgICByZXMuc2VuZChjb250ZW50KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHsgZXJyb3I6IGBGYWlsZWQgdG8gZ2V0IGVsZW1lbnQ6ICR7dHlwZX0vJHtuYW1lfWAgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqIFJlZ2lzdGVyIGZpbGVzeXN0ZW0tYmFzZWQgc3RhdHMgcm91dGUgKHNoYXJlZCBiZXR3ZWVuIHNpbXBsZSBhbmQgZ2F0ZXdheSkgKi9cbmZ1bmN0aW9uIHJlZ2lzdGVyU3RhdHNSb3V0ZShyb3V0ZXI6IFJvdXRlciwgcG9ydGZvbGlvRGlyOiBzdHJpbmcpOiB2b2lkIHtcbiAgcm91dGVyLmdldCgnL3N0YXRzJywgYXN5bmMgKF9yZXEsIHJlcykgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGF0czogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9O1xuICAgICAgbGV0IHRvdGFsID0gMDtcblxuICAgICAgZm9yIChjb25zdCB0eXBlIG9mIEVMRU1FTlRfVFlQRVMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAodHlwZSA9PT0gJ21lbW9yaWVzJykge1xuICAgICAgICAgICAgY29uc3QgbWVtRWxlbWVudHMgPSBhd2FpdCBsb2FkTWVtb3JpZXNGcm9tSW5kZXgocG9ydGZvbGlvRGlyKTtcbiAgICAgICAgICAgIHN0YXRzW3R5cGVdID0gbWVtRWxlbWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgdG90YWwgKz0gbWVtRWxlbWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHR5cGVEaXIgPSBqb2luKHBvcnRmb2xpb0RpciwgdHlwZSk7XG4gICAgICAgICAgY29uc3QgZmlsZXMgPSBhd2FpdCByZWFkZGlyKHR5cGVEaXIpO1xuICAgICAgICAgIGNvbnN0IGNvdW50ID0gZmlsZXMuZmlsdGVyKGYgPT4gIWlzQmFja3VwT3JDcnVmdChmKSAmJiBWQUxJRF9FWFRFTlNJT05TLmhhcyhleHRuYW1lKGYpKSkubGVuZ3RoO1xuICAgICAgICAgIHN0YXRzW3R5cGVdID0gY291bnQ7XG4gICAgICAgICAgdG90YWwgKz0gY291bnQ7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHN0YXRzW3R5cGVdID0gMDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXMuanNvbih7IHN0YXRzLCB0b3RhbCB9KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHsgZXJyb3I6ICdGYWlsZWQgdG8gZ2V0IHN0YXRzJyB9KTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKiogUmVnaXN0ZXIgY29sbGVjdGlvbiBpbmRleCBwcm94eSByb3V0ZSAoc2hhcmVkIGJldHdlZW4gc2ltcGxlIGFuZCBnYXRld2F5KSAqL1xuZnVuY3Rpb24gcmVnaXN0ZXJDb2xsZWN0aW9uUm91dGUocm91dGVyOiBSb3V0ZXIsIHBvcnRmb2xpb0Rpcjogc3RyaW5nKTogdm9pZCB7XG4gIHJvdXRlci5nZXQoJy9jb2xsZWN0aW9uJywgYXN5bmMgKF9yZXEsIHJlcykgPT4ge1xuICAgIHJlcy5zZXRIZWFkZXIoJ0NhY2hlLUNvbnRyb2wnLCAnbm8tY2FjaGUnKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKCdodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vRG9sbGhvdXNlTUNQL2NvbGxlY3Rpb24vbWFpbi9wdWJsaWMvY29sbGVjdGlvbi1pbmRleC5qc29uJyk7XG4gICAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICAgICAgcmVzLnNldEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICAgICAgcmVzLnNlbmQoZGF0YSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHsgLyogR2l0SHViIHVucmVhY2hhYmxlIOKAlCBmYWxsIGJhY2sgdG8gbG9jYWwgKi8gfVxuXG4gICAgY29uc3QgbG9jYWxQYXRocyA9IFtcbiAgICAgIGpvaW4ocG9ydGZvbGlvRGlyLCAnLi4nLCAnLi4nLCAnLi4nLCAnY29sbGVjdGlvbicsICdwdWJsaWMnLCAnY29sbGVjdGlvbi1pbmRleC5qc29uJyksXG4gICAgICBqb2luKHBvcnRmb2xpb0RpciwgJy4uJywgJ2NvbGxlY3Rpb24nLCAncHVibGljJywgJ2NvbGxlY3Rpb24taW5kZXguanNvbicpLFxuICAgIF07XG5cbiAgICBmb3IgKGNvbnN0IGxvY2FsUGF0aCBvZiBsb2NhbFBhdGhzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgcmVhZEZpbGUobG9jYWxQYXRoLCAndXRmLTgnKTtcbiAgICAgICAgcmVzLnNldEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICAgICAgcmVzLnNlbmQoY29udGVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gY2F0Y2ggeyAvKiB0cnkgbmV4dCAqLyB9XG4gICAgfVxuXG4gICAgcmVzLnN0YXR1cyg0MDQpLmpzb24oeyBlcnJvcjogJ0NvbGxlY3Rpb24gaW5kZXggbm90IGF2YWlsYWJsZScgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQXBpUm91dGVzKHBvcnRmb2xpb0Rpcjogc3RyaW5nKTogUm91dGVyIHtcbiAgY29uc3Qgcm91dGVyID0gUm91dGVyKCk7XG5cbiAgcmVnaXN0ZXJQb3J0Zm9saW9Sb3V0ZXMocm91dGVyLCBwb3J0Zm9saW9EaXIsIHsgc3RydWN0dXJlZERldGFpbDogZmFsc2UsIGxvZ1ByZWZpeDogJ1tXZWJVSV0nIH0pO1xuXG4gIHJlZ2lzdGVyU3RhdHNSb3V0ZShyb3V0ZXIsIHBvcnRmb2xpb0Rpcik7XG4gIHJlZ2lzdGVyQ29sbGVjdGlvblJvdXRlKHJvdXRlciwgcG9ydGZvbGlvRGlyKTtcblxuICAvKipcbiAgICogUE9TVCAvYXBpL2luc3RhbGxcbiAgICogSW5zdGFsbCBhIGNvbGxlY3Rpb24gZWxlbWVudCBpbnRvIHRoZSBsb2NhbCBwb3J0Zm9saW8uXG4gICAqIFJvdXRlcyB0aHJvdWdoIERvbGxob3VzZU1DUCdzIGluc3RhbGxfY29sbGVjdGlvbl9jb250ZW50IHBpcGVsaW5lXG4gICAqIGZvciBwcm9wZXIgdmFsaWRhdGlvbiwgZ2F0ZWtlZXBlciBjaGVja3MsIGFuZCBlbGVtZW50IG1hbmFnZW1lbnQuXG4gICAqXG4gICAqIFJlcXVpcmVzIHRoZSBNQ1Agc2VydmVyJ3MgQ29sbGVjdGlvbkhhbmRsZXIgdG8gYmUgYXZhaWxhYmxlLlxuICAgKiBGYWxscyBiYWNrIHRvIGRpcmVjdCBmaWxlIHdyaXRlIGlmIG5vdCAoc3RhbmRhbG9uZSB3ZWIgbW9kZSkuXG4gICAqL1xuICByb3V0ZXIucG9zdCgnL2luc3RhbGwnLCBleHByZXNzLmpzb24oKSwgYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gICAgaWYgKCFpbnN0YWxsUmF0ZUxpbWl0ZXIudHJ5QWNxdWlyZSgpKSB7XG4gICAgICByZXMuc3RhdHVzKDQyOSkuanNvbih7IGVycm9yOiAnVG9vIG1hbnkgaW5zdGFsbCByZXF1ZXN0cy4gTWF4IDEwIHBlciBtaW51dGUuJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IHBhdGg6IGVsZW1lbnRQYXRoLCBuYW1lOiByYXdOYW1lLCB0eXBlIH0gPSByZXEuYm9keSBhcyB7IHBhdGg/OiBzdHJpbmc7IG5hbWU/OiBzdHJpbmc7IHR5cGU/OiBzdHJpbmcgfTtcblxuICAgIGlmICghZWxlbWVudFBhdGggfHwgIXR5cGUgfHwgIXJhd05hbWUpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdNaXNzaW5nIHJlcXVpcmVkIGZpZWxkczogcGF0aCwgbmFtZSwgdHlwZScgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gTkZDLW5vcm1hbGl6ZSBuYW1lIGJlZm9yZSBzYWZldHkgY2hlY2tzIHRvIHByZXZlbnQgVW5pY29kZSBob21vZ3JhcGggYnlwYXNzZXMgKCMxNzM2KVxuICAgIGNvbnN0IG5hbWUgPSBub3JtYWxpemVJbnB1dChyYXdOYW1lKTtcblxuICAgIC8vIFZhbGlkYXRlIHR5cGVcbiAgICBjb25zdCBwbHVyYWxUeXBlID0gdHlwZS5lbmRzV2l0aCgncycpID8gdHlwZSA6IGAke3R5cGV9c2A7XG4gICAgaWYgKCFFTEVNRU5UX1RZUEVTLmluY2x1ZGVzKHBsdXJhbFR5cGUgYXMgdHlwZW9mIEVMRU1FTlRfVFlQRVNbbnVtYmVyXSkpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6IGBJbnZhbGlkIGVsZW1lbnQgdHlwZTogJHt0eXBlfWAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gUHJldmVudCBwYXRoIHRyYXZlcnNhbFxuICAgIGlmIChlbGVtZW50UGF0aC5pbmNsdWRlcygnLi4nKSB8fCBuYW1lLmluY2x1ZGVzKCcuLicpKSB7XG4gICAgICByZXMuc3RhdHVzKDQwMCkuanNvbih7IGVycm9yOiAnSW52YWxpZCBwYXRoIG9yIG5hbWUnIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGVsZW1lbnRQYXRoIGNvbnRhaW5zIG9ubHkgc2FmZSBjaGFyYWN0ZXJzIChhbHBoYW51bWVyaWMsIGh5cGhlbnMsIHVuZGVyc2NvcmVzLCBkb3RzLCBzbGFzaGVzKVxuICAgIGlmICghL15bYS16QS1aMC05L18uLV0rJC8udGVzdChlbGVtZW50UGF0aCkpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdJbnZhbGlkIGVsZW1lbnQgcGF0aCBjaGFyYWN0ZXJzJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gRmV0Y2ggY29udGVudCBmcm9tIEdpdEh1YlxuICAgICAgY29uc3QgZ2hVcmwgPSBgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL0RvbGxob3VzZU1DUC9jb2xsZWN0aW9uL21haW4vJHtlbGVtZW50UGF0aH1gO1xuXG4gICAgICAvLyBWYWxpZGF0ZSB0aGUgY29uc3RydWN0ZWQgVVJMIHN0YXlzIHdpdGhpbiBleHBlY3RlZCBkb21haW4gYW5kIHBhdGhcbiAgICAgIGNvbnN0IHBhcnNlZFVybCA9IG5ldyBVUkwoZ2hVcmwpO1xuICAgICAgaWYgKHBhcnNlZFVybC5ob3N0bmFtZSAhPT0gJ3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20nIHx8ICFwYXJzZWRVcmwucGF0aG5hbWUuc3RhcnRzV2l0aCgnL0RvbGxob3VzZU1DUC9jb2xsZWN0aW9uLycpKSB7XG4gICAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdJbnZhbGlkIGNvbGxlY3Rpb24gcGF0aCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChnaFVybCk7XG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIHJlcy5zdGF0dXMoNTAyKS5qc29uKHsgZXJyb3I6IGBGYWlsZWQgdG8gZmV0Y2ggZnJvbSBjb2xsZWN0aW9uOiBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfWAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG5cbiAgICAgIC8vIFZhbGlkYXRlIGNvbnRlbnQgdGhyb3VnaCB0aGUgc2VjdXJpdHkgcGlwZWxpbmUgYmVmb3JlIHdyaXRpbmdcbiAgICAgIGNvbnN0IGV4dCA9IGV4dG5hbWUoZWxlbWVudFBhdGgpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGV4dCA9PT0gJy55YW1sJyB8fCBleHQgPT09ICcueW1sJykge1xuICAgICAgICAgIC8vIFZhbGlkYXRlIFlBTUwgY29udGVudCBmb3IgYm9tYnMsIGNpcmN1bGFyIHJlZmVyZW5jZXMsIG1hbGljaW91cyBwYXR0ZXJuc1xuICAgICAgICAgIGlmICghQ29udGVudFZhbGlkYXRvci52YWxpZGF0ZVlhbWxDb250ZW50KGNvbnRlbnQpKSB7XG4gICAgICAgICAgICByZXMuc3RhdHVzKDQyMikuanNvbih7IGVycm9yOiAnQ29udGVudCBmYWlsZWQgWUFNTCB2YWxpZGF0aW9uIOKAlCBwb3RlbnRpYWxseSBtYWxpY2lvdXMgcGF0dGVybnMgZGV0ZWN0ZWQnIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBTZWN1cmVZYW1sUGFyc2VyLnBhcnNlUmF3WWFtbChjb250ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBWYWxpZGF0ZSBtYXJrZG93bitmcm9udG1hdHRlciBjb250ZW50XG4gICAgICAgICAgU2VjdXJlWWFtbFBhcnNlci5wYXJzZShjb250ZW50KTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAocGFyc2VFcnIpIHtcbiAgICAgICAgcmVzLnN0YXR1cyg0MjIpLmpzb24oeyBlcnJvcjogYENvbnRlbnQgZmFpbGVkIHBhcnNlIHZhbGlkYXRpb246ICR7KHBhcnNlRXJyIGFzIEVycm9yKS5tZXNzYWdlfWAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gVmFsaWRhdGUgY29udGVudCBib2R5IGZvciBpbmplY3Rpb24gcGF0dGVybnNcbiAgICAgIGNvbnN0IHNpbmd1bGFyVHlwZSA9IHBsdXJhbFR5cGUuc2xpY2UoMCwgLTEpO1xuICAgICAgY29uc3QgY29udGV4dFR5cGVzID0gWydwZXJzb25hJywgJ3NraWxsJywgJ3RlbXBsYXRlJywgJ2FnZW50JywgJ21lbW9yeSddIGFzIGNvbnN0O1xuICAgICAgdHlwZSBDb250ZW50Q29udGV4dCA9IHR5cGVvZiBjb250ZXh0VHlwZXNbbnVtYmVyXTtcbiAgICAgIGNvbnN0IGNvbnRlbnRDb250ZXh0ID0gY29udGV4dFR5cGVzLmluY2x1ZGVzKHNpbmd1bGFyVHlwZSBhcyBDb250ZW50Q29udGV4dCkgPyBzaW5ndWxhclR5cGUgYXMgQ29udGVudENvbnRleHQgOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gQ29udGVudFZhbGlkYXRvci52YWxpZGF0ZUFuZFNhbml0aXplKGNvbnRlbnQsIHtcbiAgICAgICAgY29udGVudENvbnRleHQsXG4gICAgICB9KTtcbiAgICAgIGlmICghdmFsaWRhdGlvblJlc3VsdC5pc1ZhbGlkKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdbV2ViVUldIEluc3RhbGwgYmxvY2tlZCDigJQgY29udGVudCB2YWxpZGF0aW9uIGZhaWxlZCcsIHtcbiAgICAgICAgICBlbGVtZW50OiBgJHtwbHVyYWxUeXBlfS8ke25hbWV9YCxcbiAgICAgICAgICBwYXR0ZXJuczogdmFsaWRhdGlvblJlc3VsdC5kZXRlY3RlZFBhdHRlcm5zLFxuICAgICAgICAgIHNldmVyaXR5OiB2YWxpZGF0aW9uUmVzdWx0LnNldmVyaXR5LFxuICAgICAgICB9KTtcbiAgICAgICAgcmVzLnN0YXR1cyg0MjIpLmpzb24oe1xuICAgICAgICAgIGVycm9yOiAnQ29udGVudCBmYWlsZWQgc2VjdXJpdHkgdmFsaWRhdGlvbicsXG4gICAgICAgICAgcGF0dGVybnM6IHZhbGlkYXRpb25SZXN1bHQuZGV0ZWN0ZWRQYXR0ZXJucyxcbiAgICAgICAgICBzZXZlcml0eTogdmFsaWRhdGlvblJlc3VsdC5zZXZlcml0eSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gRGV0ZXJtaW5lIGZpbGVuYW1lXG4gICAgICBjb25zdCBmaWxlbmFtZSA9IGVsZW1lbnRQYXRoLnNwbGl0KCcvJykucG9wKCkgfHwgYCR7bmFtZX0ubWRgO1xuXG4gICAgICAvLyBFbnN1cmUgdHlwZSBkaXJlY3RvcnkgZXhpc3RzXG4gICAgICBjb25zdCB0eXBlRGlyID0gam9pbihwb3J0Zm9saW9EaXIsIHBsdXJhbFR5cGUpO1xuICAgICAgY29uc3QgeyBta2RpciB9ID0gYXdhaXQgaW1wb3J0KCdub2RlOmZzL3Byb21pc2VzJyk7XG4gICAgICBhd2FpdCBta2Rpcih0eXBlRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAgICAgLy8gV3JpdGUgdG8gcG9ydGZvbGlvXG4gICAgICBjb25zdCBkZXN0UGF0aCA9IGpvaW4odHlwZURpciwgZmlsZW5hbWUpO1xuXG4gICAgICAvLyBWZXJpZnkgcmVzb2x2ZWQgZGVzdGluYXRpb24gcGF0aCBzdGF5cyB3aXRoaW4gcG9ydGZvbGlvIGRpcmVjdG9yeSAoZGVmZW5zZSBpbiBkZXB0aClcbiAgICAgIGNvbnN0IHJlc29sdmVkRGVzdCA9IHJlc29sdmUoZGVzdFBhdGgpO1xuICAgICAgaWYgKCFyZXNvbHZlZERlc3Quc3RhcnRzV2l0aChyZXNvbHZlKHBvcnRmb2xpb0RpcikpKSB7XG4gICAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdQYXRoIHRyYXZlcnNhbCBkZXRlY3RlZCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgaWYgZmlsZSBhbHJlYWR5IGV4aXN0c1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgc3RhdChkZXN0UGF0aCk7XG4gICAgICAgIHJlcy5zdGF0dXMoNDA5KS5qc29uKHsgZXJyb3I6IGBFbGVtZW50IGFscmVhZHkgZXhpc3RzOiAke3BsdXJhbFR5cGV9LyR7ZmlsZW5hbWV9LiBEZWxldGUgaXQgZmlyc3Qgb3IgcmVuYW1lLmAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gY2F0Y2ggeyAvKiBkb2Vzbid0IGV4aXN0IOKAlCBnb29kICovIH1cblxuICAgICAgY29uc3QgeyB3cml0ZUZpbGU6IHdyaXRlRmlsZUZzIH0gPSBhd2FpdCBpbXBvcnQoJ25vZGU6ZnMvcHJvbWlzZXMnKTtcbiAgICAgIGF3YWl0IHdyaXRlRmlsZUZzKGRlc3RQYXRoLCBjb250ZW50LCAndXRmLTgnKTtcblxuICAgICAgbG9nZ2VyLmluZm8oYFtXZWJVSV0gSW5zdGFsbGVkIGNvbGxlY3Rpb24gZWxlbWVudDogJHtwbHVyYWxUeXBlfS8ke2ZpbGVuYW1lfWApO1xuICAgICAgcmVzLmpzb24oeyBzdWNjZXNzOiB0cnVlLCBtZXNzYWdlOiBgSW5zdGFsbGVkICR7bmFtZX0gdG8gcG9ydGZvbGlvYCwgcGF0aDogYCR7cGx1cmFsVHlwZX0vJHtmaWxlbmFtZX1gIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdbV2ViVUldIEluc3RhbGwgZmFpbGVkOicsIGVycik7XG4gICAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7IGVycm9yOiBgSW5zdGFsbCBmYWlsZWQ6ICR7KGVyciBhcyBFcnJvcikubWVzc2FnZX1gIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHJvdXRlcjtcbn1cblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBXZWIgTUNQLUFRTCBHYXRld2F5IFJvdXRlcyAoSXNzdWUgIzc5Nilcbi8vXG4vLyBUaGVzZSByb3V0ZXMgdHJhbnNsYXRlIEhUVFAgcmVxdWVzdHMgaW50byBNQ1BBUUxIYW5kbGVyIGNhbGxzLCByb3V0aW5nIGFsbFxuLy8gcmVhZHMvd3JpdGVzIHRocm91Z2ggdGhlIGV4aXN0aW5nIGVsZW1lbnQgbWFuYWdlcnMsIHZhbGlkYXRpb24sIGFuZCBnYXRla2VlcGVyLlxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogRXh0cmFjdCBzaW5nbGUgb3BlcmF0aW9uIHJlc3VsdCBmcm9tIE1DUEFRTEhhbmRsZXIgcmVzcG9uc2UuXG4gKiBXZWIgcm91dGVzIG5ldmVyIHNlbmQgYmF0Y2ggcmVxdWVzdHMsIHNvIGNhc3QgaXMgc2FmZS5cbiAqL1xuaW50ZXJmYWNlIFNpbmdsZU9wUmVzdWx0IHsgc3VjY2VzczogYm9vbGVhbjsgZGF0YT86IHVua25vd247IGVycm9yPzogc3RyaW5nIH1cbmZ1bmN0aW9uIGFzU2luZ2xlUmVzdWx0KHI6IHVua25vd24pOiBTaW5nbGVPcFJlc3VsdCB7XG4gIGlmICh0eXBlb2YgciA9PT0gJ29iamVjdCcgJiYgciAhPT0gbnVsbCAmJiAnc3VjY2VzcycgaW4gcikge1xuICAgIHJldHVybiByIGFzIFNpbmdsZU9wUmVzdWx0O1xuICB9XG4gIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogJ0ludmFsaWQgb3BlcmF0aW9uIHJlc3VsdCBmb3JtYXQnIH07XG59XG5cbi8qKlxuICogQ3JlYXRlIEFQSSByb3V0ZXMgdGhhdCByb3V0ZSB0aHJvdWdoIE1DUEFRTEhhbmRsZXIgKGdhdGV3YXkgbW9kZSkuXG4gKiBBbGwgb3BlcmF0aW9ucyBnbyB0aHJvdWdoIHRoZSBNQ1AtQVFMIHBpcGVsaW5lOiB2YWxpZGF0aW9uLCBjYWNoZSwgZ2F0ZWtlZXBlci5cbiAqXG4gKiBGYWxscyBiYWNrIHRvIGRpcmVjdCBmaWxlc3lzdGVtIGZvciAvYXBpL2NvbGxlY3Rpb24gKGV4dGVybmFsIGZldGNoLCBubyBNQ1AtQVFMIGVxdWl2YWxlbnQpXG4gKiBhbmQgL2FwaS9zdGF0cyAobGlnaHR3ZWlnaHQgYWdncmVnYXRlLCBubyBtYXRjaGluZyBvcGVyYXRpb24pLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlR2F0ZXdheUFwaVJvdXRlcyhoYW5kbGVyOiBNQ1BBUUxIYW5kbGVyLCBwb3J0Zm9saW9EaXI6IHN0cmluZyk6IFJvdXRlciB7XG4gIGNvbnN0IHJvdXRlciA9IFJvdXRlcigpO1xuXG4gIC8vIFNoYXJlZCBwb3J0Zm9saW8gcm91dGVzIOKAlCBzdHJ1Y3R1cmVkIEpTT04gZm9yIGRldGFpbCB2aWV3c1xuICAvLyBjb2RlcWxbanMvbWlzc2luZy1yYXRlLWxpbWl0aW5nXSDigJQgUmF0ZS1saW1pdGVkIGJ5IHJvdXRlci51c2UoKSBtaWRkbGV3YXJlIGluIHNlcnZlci50c1xuICByZWdpc3RlclBvcnRmb2xpb1JvdXRlcyhyb3V0ZXIsIHBvcnRmb2xpb0RpciwgeyBzdHJ1Y3R1cmVkRGV0YWlsOiB0cnVlLCBsb2dQcmVmaXg6ICdbV2ViVUkvR2F0ZXdheV0nIH0pO1xuICByZWdpc3RlclN0YXRzUm91dGUocm91dGVyLCBwb3J0Zm9saW9EaXIpO1xuICByZWdpc3RlckNvbGxlY3Rpb25Sb3V0ZShyb3V0ZXIsIHBvcnRmb2xpb0Rpcik7XG5cbiAgLyoqXG4gICAqIEdFVCAvYXBpL2NvbGxlY3Rpb24vY29udGVudC8qXG4gICAqIFByb3hpZXMgY29sbGVjdGlvbiBlbGVtZW50IGNvbnRlbnQgZnJvbSBHaXRIdWIsIHZhbGlkYXRlcyB0aHJvdWdoIHRoZVxuICAgKiBzZWN1cml0eSBwaXBlbGluZSwgYW5kIHJldHVybnMgc3RydWN0dXJlZCBKU09OIChzYW1lIGZvcm1hdCBhcyBwb3J0Zm9saW8gZGV0YWlsKS5cbiAgICogY29kZXFsW2pzL21pc3NpbmctcmF0ZS1saW1pdGluZ10g4oCUIFJhdGUtbGltaXRlZCBieSByb3V0ZXIudXNlKCkgbWlkZGxld2FyZSBhYm92ZS5cbiAgICovXG4gIHJvdXRlci5nZXQoJy9jb2xsZWN0aW9uL2NvbnRlbnQvOnByZWZpeC86dHlwZS86bmFtZScsIGFzeW5jIChyZXEsIHJlcykgPT4ge1xuICAgIGNvbnN0IHByZWZpeCA9IG5vcm1hbGl6ZUlucHV0KHJlcS5wYXJhbXMucHJlZml4KTtcbiAgICBjb25zdCBlbGVtZW50VHlwZSA9IG5vcm1hbGl6ZUlucHV0KHJlcS5wYXJhbXMudHlwZSk7XG4gICAgY29uc3QgZmlsZW5hbWUgPSBub3JtYWxpemVJbnB1dChyZXEucGFyYW1zLm5hbWUpO1xuICAgIGNvbnN0IGVsZW1lbnRQYXRoID0gYCR7cHJlZml4fS8ke2VsZW1lbnRUeXBlfS8ke2ZpbGVuYW1lfWA7XG4gICAgaWYgKCFlbGVtZW50UGF0aCB8fCBlbGVtZW50UGF0aC5pbmNsdWRlcygnLi4nKSB8fCBlbGVtZW50UGF0aC5pbmNsdWRlcygnXFxcXCcpKSB7XG4gICAgICByZXMuc3RhdHVzKDQwMCkuanNvbih7IGVycm9yOiAnSW52YWxpZCBlbGVtZW50IHBhdGgnIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGVsZW1lbnQgdHlwZSBhZ2FpbnN0IGtub3duIHR5cGVzIHRvIHByZXZlbnQgYXJiaXRyYXJ5IHBhdGggY29uc3RydWN0aW9uXG4gICAgaWYgKCFFTEVNRU5UX1RZUEVTLmluY2x1ZGVzKGVsZW1lbnRUeXBlIGFzIHR5cGVvZiBFTEVNRU5UX1RZUEVTW251bWJlcl0pKSB7XG4gICAgICByZXMuc3RhdHVzKDQwMCkuanNvbih7IGVycm9yOiBgSW52YWxpZCBlbGVtZW50IHR5cGU6ICR7ZWxlbWVudFR5cGV9YCB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gY29kZXFsW2pzL3JlcXVlc3QtZm9yZ2VyeV0g4oCUIG1pdGlnYXRlZDogZG9tYWluIGFuZCByZXBvIGFyZSBoYXJkY29kZWQgY29uc3RhbnRzLFxuICAgICAgLy8gZWxlbWVudFR5cGUgaXMgdmFsaWRhdGVkIGFnYWluc3QgRUxFTUVOVF9UWVBFUyB3aGl0ZWxpc3QgYWJvdmUsIHBhdGggdHJhdmVyc2FsXG4gICAgICAvLyBpcyBjaGVja2VkLCBhbmQgdGhlIG9ubHkgcmVhY2hhYmxlIHRhcmdldCBpcyBhIHNwZWNpZmljIHB1YmxpYyBHaXRIdWIgcmVwb3NpdG9yeS5cbiAgICAgIGNvbnN0IGdpdGh1YlVybCA9IGBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vRG9sbGhvdXNlTUNQL2NvbGxlY3Rpb24vbWFpbi8ke2VsZW1lbnRQYXRofWA7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGdpdGh1YlVybCk7XG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIHJlcy5zdGF0dXMocmVzcG9uc2Uuc3RhdHVzID09PSA0MDQgPyA0MDQgOiA1MDIpLmpzb24oe1xuICAgICAgICAgIGVycm9yOiByZXNwb25zZS5zdGF0dXMgPT09IDQwNFxuICAgICAgICAgICAgPyBgQ29sbGVjdGlvbiBlbGVtZW50IG5vdCBmb3VuZDogJHtlbGVtZW50UGF0aH1gXG4gICAgICAgICAgICA6IGBGYWlsZWQgdG8gZmV0Y2ggZnJvbSBHaXRIdWIgKEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9KWAsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgICBjb25zdCB2YWxpZGF0aW9uID0gdmFsaWRhdGVFbGVtZW50Q29udGVudChmaWxlbmFtZSwgY29udGVudCwgZWxlbWVudFR5cGUpO1xuICAgICAgY29uc3Qgc2luZ3VsYXJUeXBlID0gUExVUkFMX1RPX1NJTkdVTEFSW2VsZW1lbnRUeXBlXSB8fCAoZWxlbWVudFR5cGUuZW5kc1dpdGgoJ3MnKSA/IGVsZW1lbnRUeXBlLnNsaWNlKDAsIC0xKSA6IGVsZW1lbnRUeXBlKTtcblxuICAgICAgcmVzLmpzb24oe1xuICAgICAgICBtZXRhZGF0YTogdmFsaWRhdGlvbi5tZXRhZGF0YSxcbiAgICAgICAgYm9keTogdmFsaWRhdGlvbi5ib2R5LFxuICAgICAgICByYXc6IGNvbnRlbnQsXG4gICAgICAgIHR5cGU6IHNpbmd1bGFyVHlwZSxcbiAgICAgICAgdmFsaWRhdGlvbjoge1xuICAgICAgICAgIHN0YXR1czogdmFsaWRhdGlvbi52YWxpZCA/ICdwYXNzJyA6ICd3YXJuJyxcbiAgICAgICAgICAuLi4odmFsaWRhdGlvbi5yZWplY3Rpb24gJiYge1xuICAgICAgICAgICAgcmVhc29uOiB2YWxpZGF0aW9uLnJlamVjdGlvbi5yZWFzb24sXG4gICAgICAgICAgICBzZXZlcml0eTogdmFsaWRhdGlvbi5yZWplY3Rpb24uc2V2ZXJpdHksXG4gICAgICAgICAgICBwYXR0ZXJuczogdmFsaWRhdGlvbi5yZWplY3Rpb24ucGF0dGVybnMsXG4gICAgICAgICAgfSksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignW1dlYlVJL0dhdGV3YXldIEZhaWxlZCB0byBmZXRjaCBjb2xsZWN0aW9uIGNvbnRlbnQ6JywgZXJyKTtcbiAgICAgIHJlcy5zdGF0dXMoNTAyKS5qc29uKHsgZXJyb3I6ICdGYWlsZWQgdG8gZmV0Y2ggY29sbGVjdGlvbiBlbGVtZW50JyB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBQT1NUIC9hcGkvaW5zdGFsbFxuICAgKiBSb3V0ZXMgdGhyb3VnaCBpbnN0YWxsX2NvbGxlY3Rpb25fY29udGVudCBNQ1AtQVFMIG9wZXJhdGlvbi5cbiAgICogQWxsIHZhbGlkYXRpb24sIGdhdGVrZWVwZXIgY2hlY2tzIGhhbmRsZWQgYnkgdGhlIHBpcGVsaW5lLlxuICAgKi9cbiAgY29uc3QgaW5zdGFsbExpbWl0ZXIgPSBuZXcgU2xpZGluZ1dpbmRvd1JhdGVMaW1pdGVyKDEwLCA2MF8wMDApO1xuICByb3V0ZXIucG9zdCgnL2luc3RhbGwnLCBleHByZXNzLmpzb24oKSwgYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gICAgaWYgKCFpbnN0YWxsTGltaXRlci50cnlBY3F1aXJlKCkpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDI5KS5qc29uKHsgZXJyb3I6ICdUb28gbWFueSBpbnN0YWxsIHJlcXVlc3RzLiBNYXggMTAgcGVyIG1pbnV0ZS4nIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHsgcGF0aDogZWxlbWVudFBhdGgsIG5hbWU6IHJhd05hbWUsIHR5cGUgfSA9IHJlcS5ib2R5IGFzIHsgcGF0aD86IHN0cmluZzsgbmFtZT86IHN0cmluZzsgdHlwZT86IHN0cmluZyB9O1xuXG4gICAgaWYgKCFlbGVtZW50UGF0aCB8fCAhdHlwZSB8fCAhcmF3TmFtZSkge1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogJ01pc3NpbmcgcmVxdWlyZWQgZmllbGRzOiBwYXRoLCBuYW1lLCB0eXBlJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBORkMtbm9ybWFsaXplIG5hbWUgYmVmb3JlIHNhZmV0eSBjaGVja3MgdG8gcHJldmVudCBVbmljb2RlIGhvbW9ncmFwaCBieXBhc3NlcyAoIzE3MzYpXG4gICAgY29uc3QgbmFtZSA9IG5vcm1hbGl6ZUlucHV0KHJhd05hbWUpO1xuXG4gICAgaWYgKGVsZW1lbnRQYXRoLmluY2x1ZGVzKCcuLicpIHx8IG5hbWUuaW5jbHVkZXMoJy4uJykpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdJbnZhbGlkIHBhdGggb3IgbmFtZScgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgZWxlbWVudFBhdGggY29udGFpbnMgb25seSBzYWZlIGNoYXJhY3RlcnMgKGFscGhhbnVtZXJpYywgaHlwaGVucywgdW5kZXJzY29yZXMsIGRvdHMsIHNsYXNoZXMpXG4gICAgaWYgKCEvXlthLXpBLVowLTkvXy4tXSskLy50ZXN0KGVsZW1lbnRQYXRoKSkge1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogJ0ludmFsaWQgZWxlbWVudCBwYXRoIGNoYXJhY3RlcnMnIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBSb3V0ZSB0aHJvdWdoIE1DUC1BUUwgaW5zdGFsbF9jb2xsZWN0aW9uX2NvbnRlbnQgb3BlcmF0aW9uXG4gICAgICBjb25zdCBpbnN0YWxsUGF0aCA9IGVsZW1lbnRQYXRoLnJlcGxhY2UoL15saWJyYXJ5XFwvLywgJycpO1xuICAgICAgY29uc3Qgb3BSZXN1bHQgPSBhc1NpbmdsZVJlc3VsdChhd2FpdCBoYW5kbGVyLmhhbmRsZUNyZWF0ZSh7XG4gICAgICAgIG9wZXJhdGlvbjogJ2luc3RhbGxfY29sbGVjdGlvbl9jb250ZW50JyxcbiAgICAgICAgcGFyYW1zOiB7IHBhdGg6IGluc3RhbGxQYXRoIH0sXG4gICAgICB9KSk7XG5cbiAgICAgIGlmICghb3BSZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICByZXMuc3RhdHVzKDQyMikuanNvbih7IGVycm9yOiBvcFJlc3VsdC5lcnJvciB8fCAnSW5zdGFsbCBmYWlsZWQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxvZ2dlci5pbmZvKGBbV2ViVUkvR2F0ZXdheV0gSW5zdGFsbGVkIGNvbGxlY3Rpb24gZWxlbWVudDogJHtpbnN0YWxsUGF0aH1gKTtcbiAgICAgIHJlcy5qc29uKHsgc3VjY2VzczogdHJ1ZSwgbWVzc2FnZTogYEluc3RhbGxlZCAke25hbWV9IHRvIHBvcnRmb2xpb2AsIGRhdGE6IG9wUmVzdWx0LmRhdGEgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ1tXZWJVSS9HYXRld2F5XSBJbnN0YWxsIGZhaWxlZDonLCBlcnIpO1xuICAgICAgcmVzLnN0YXR1cyg1MDApLmpzb24oeyBlcnJvcjogYEluc3RhbGwgZmFpbGVkOiAkeyhlcnIgYXMgRXJyb3IpLm1lc3NhZ2V9YCB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiByb3V0ZXI7XG59XG4iXX0=
@@ -13,13 +13,21 @@
13
13
  import type { MCPAQLHandler } from '../handlers/mcp-aql/MCPAQLHandler.js';
14
14
  import type { MemoryLogSink } from '../logging/sinks/MemoryLogSink.js';
15
15
  import type { MemoryMetricsSink } from '../metrics/sinks/MemoryMetricsSink.js';
16
+ import type { ConsoleTokenStore } from './console/consoleToken.js';
16
17
  /** Check whether the web server has been started in this process. */
17
18
  export declare function isWebServerRunning(): boolean;
19
+ /**
20
+ * Reset module-level server state. Exported for testing only —
21
+ * allows tests to exercise startWebServer/bindAndListen without
22
+ * interference from prior runs in the same process.
23
+ * @internal
24
+ */
25
+ export declare function _resetServerState(): void;
18
26
  /**
19
27
  * Options for starting the web server.
20
28
  */
21
29
  export interface WebServerOptions {
22
- /** Port to bind to (default: 3939) */
30
+ /** Port to bind to (defaults to `DOLLHOUSE_WEB_CONSOLE_PORT`, see `src/config/env.ts`) */
23
31
  port?: number;
24
32
  /** Path to the portfolio directory (e.g., ~/.dollhouse/portfolio) */
25
33
  portfolioDir: string;
@@ -38,6 +46,24 @@ export interface WebServerOptions {
38
46
  metricsSink?: MemoryMetricsSink;
39
47
  /** Additional routers to mount before the SPA fallback (e.g., ingest routes) */
40
48
  additionalRouters?: import('express').Router[];
49
+ /**
50
+ * Console token store (#1780). When provided, the server will:
51
+ * 1. Mount Bearer token auth middleware before protected routers.
52
+ * 2. Inject the primary token into index.html so the browser client
53
+ * can attach it to fetch calls and EventSource URLs.
54
+ * 3. Append the token file location to the startup banner.
55
+ * Auth enforcement is still gated on DOLLHOUSE_WEB_AUTH_ENABLED — the
56
+ * middleware is a pass-through when the flag is false (the Phase 1 default).
57
+ */
58
+ tokenStore?: ConsoleTokenStore;
59
+ }
60
+ /**
61
+ * Result of attempting to bind the HTTP server to a port.
62
+ */
63
+ export interface BindResult {
64
+ success: boolean;
65
+ error?: 'EADDRINUSE' | 'OTHER';
66
+ detail?: string;
41
67
  }
42
68
  /**
43
69
  * Result of starting the web server, including hooks for DI wiring.
@@ -49,6 +75,8 @@ export interface WebServerResult {
49
75
  logBroadcast?: (entry: import('../logging/types.js').UnifiedLogEntry) => void;
50
76
  /** Metrics snapshot function — call with each snapshot to push to SSE clients */
51
77
  metricsOnSnapshot?: (snapshot: import('../metrics/types.js').MetricSnapshot) => void;
78
+ /** Result of the port binding attempt */
79
+ bindResult?: BindResult;
52
80
  }
53
81
  /**
54
82
  * Result of attempting to open the browser.
@@ -76,6 +104,12 @@ export interface BrowserOpenResult {
76
104
  * @returns Hooks for DI wiring (log broadcast, metrics onSnapshot)
77
105
  */
78
106
  export declare function startWebServer(options: WebServerOptions): Promise<WebServerResult>;
107
+ /**
108
+ * Retry binding an already-configured Express app to a port.
109
+ * Used by UnifiedConsole when EADDRINUSE occurs — avoids recreating
110
+ * the Express app and all its routes on each retry attempt.
111
+ */
112
+ export declare function retryBind(app: import('express').Express, port: number, options: WebServerOptions): Promise<BindResult>;
79
113
  /**
80
114
  * Open the portfolio browser from within the MCP server process.
81
115
  *
@@ -86,8 +120,20 @@ export declare function startWebServer(options: WebServerOptions): Promise<WebSe
86
120
  * Called by the `open_portfolio_browser` MCP-AQL operation (Issue #774).
87
121
  *
88
122
  * @param portfolioDir - Path to the portfolio directory (e.g., ~/.dollhouse/portfolio)
89
- * @param port - Port to bind to (default: 3939)
123
+ * @param port - Port to bind to (defaults to `DOLLHOUSE_WEB_CONSOLE_PORT`)
90
124
  * @returns Result with URL, server status, and browser open status
91
125
  */
92
- export declare function openPortfolioBrowser(portfolioDir: string, port?: number, mcpAqlHandler?: MCPAQLHandler, tab?: string, urlParams?: Record<string, string>): Promise<BrowserOpenResult>;
126
+ /**
127
+ * Options for opening the portfolio browser.
128
+ */
129
+ export interface OpenBrowserOptions {
130
+ portfolioDir: string;
131
+ port?: number;
132
+ mcpAqlHandler?: MCPAQLHandler;
133
+ tab?: string;
134
+ urlParams?: Record<string, string>;
135
+ memorySink?: MemoryLogSink;
136
+ metricsSink?: MemoryMetricsSink;
137
+ }
138
+ export declare function openPortfolioBrowser(options: OpenBrowserOptions): Promise<BrowserOpenResult>;
93
139
  //# sourceMappingURL=server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/web/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAcH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAa/E,qEAAqE;AACrE,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,YAAY,EAAE,MAAM,CAAC;IACrB,qEAAqE;IACrE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,kFAAkF;IAClF,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,6FAA6F;IAC7F,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,gFAAgF;IAChF,iBAAiB,CAAC,EAAE,OAAO,SAAS,EAAE,MAAM,EAAE,CAAC;CAChD;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,kFAAkF;IAClF,GAAG,CAAC,EAAE,OAAO,SAAS,EAAE,OAAO,CAAC;IAChC,2EAA2E;IAC3E,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,qBAAqB,EAAE,eAAe,KAAK,IAAI,CAAC;IAC9E,iFAAiF;IACjF,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,qBAAqB,EAAE,cAAc,KAAK,IAAI,CAAC;CACtF;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,uCAAuC;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,4EAA4E;IAC5E,cAAc,EAAE,OAAO,CAAC;IACxB,kDAAkD;IAClD,aAAa,EAAE,OAAO,CAAC;IACvB,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAsCD;;;;;;;;;;;GAWG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAmLxF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,oBAAoB,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,aAAa,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAkC3L"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/web/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAiBH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAyCnE,qEAAqE;AACrE,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAQxC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,0FAA0F;IAC1F,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,YAAY,EAAE,MAAM,CAAC;IACrB,qEAAqE;IACrE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,kFAAkF;IAClF,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,6FAA6F;IAC7F,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,gFAAgF;IAChF,iBAAiB,CAAC,EAAE,OAAO,SAAS,EAAE,MAAM,EAAE,CAAC;IAC/C;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,kFAAkF;IAClF,GAAG,CAAC,EAAE,OAAO,SAAS,EAAE,OAAO,CAAC;IAChC,2EAA2E;IAC3E,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,qBAAqB,EAAE,eAAe,KAAK,IAAI,CAAC;IAC9E,iFAAiF;IACjF,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,qBAAqB,EAAE,cAAc,KAAK,IAAI,CAAC;IACrF,yCAAyC;IACzC,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,uCAAuC;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,4EAA4E;IAC5E,cAAc,EAAE,OAAO,CAAC;IACxB,kDAAkD;IAClD,aAAa,EAAE,OAAO,CAAC;IACvB,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAsCD;;;;;;;;;;;GAWG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAuNxF;AA2DD;;;;GAIG;AACH,wBAAsB,SAAS,CAC7B,GAAG,EAAE,OAAO,SAAS,EAAE,OAAO,EAC9B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,UAAU,CAAC,CAErB;AAmDD;;;;;;;;;;;;GAYG;AACH;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,WAAW,CAAC,EAAE,iBAAiB,CAAC;CACjC;AAmDD,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA4BlG"}