obsidian-integration-testing 8.0.1 → 8.1.1

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 (65) hide show
  1. package/README.md +23 -4
  2. package/dist/lib/cjs/cli.cjs +29 -8
  3. package/dist/lib/cjs/cli.d.cts +2 -1
  4. package/dist/lib/cjs/connect-to-cdp.cjs +17 -11
  5. package/dist/lib/cjs/connect-to-cdp.d.cts +35 -3
  6. package/dist/lib/cjs/context-provider.cjs +1 -1
  7. package/dist/lib/cjs/context-provider.d.cts +1 -1
  8. package/dist/lib/cjs/global-setup-core.cjs +17 -5
  9. package/dist/lib/cjs/global-setup-core.d.cts +11 -1
  10. package/dist/lib/cjs/incompatible-installer-version-error.cjs +52 -0
  11. package/dist/lib/cjs/incompatible-installer-version-error.d.cts +44 -0
  12. package/dist/lib/cjs/index.cjs +13 -1
  13. package/dist/lib/cjs/index.d.cts +7 -0
  14. package/dist/lib/cjs/installer-compatibility.cjs +64 -0
  15. package/dist/lib/cjs/installer-compatibility.d.cts +75 -0
  16. package/dist/lib/cjs/library.cjs +1 -1
  17. package/dist/lib/cjs/namespace-bootstrap.cjs +16 -7
  18. package/dist/lib/cjs/obsidian-installer.cjs +7 -4
  19. package/dist/lib/cjs/obsidian-metadata.cjs +1811 -0
  20. package/dist/lib/cjs/obsidian-metadata.d.cts +56 -0
  21. package/dist/lib/cjs/renderer-boot-detection.cjs +49 -0
  22. package/dist/lib/cjs/renderer-boot-detection.d.cts +83 -0
  23. package/dist/lib/cjs/renderer-failed-to-initialize-error.cjs +41 -0
  24. package/dist/lib/cjs/renderer-failed-to-initialize-error.d.cts +23 -0
  25. package/dist/lib/cjs/transport-desktop-cdp.cjs +85 -3
  26. package/dist/lib/cjs/transport-desktop-cdp.d.cts +55 -1
  27. package/dist/lib/cjs/transport-factory.cjs +76 -21
  28. package/dist/lib/cjs/transport-factory.d.cts +1 -1
  29. package/dist/lib/cjs/transport-options.cjs +1 -1
  30. package/dist/lib/cjs/transport-options.d.cts +37 -4
  31. package/dist/lib/cjs/visibility.cjs +10 -2
  32. package/dist/lib/cjs/visibility.d.cts +27 -8
  33. package/dist/lib/esm/cli.d.mts +2 -1
  34. package/dist/lib/esm/cli.mjs +29 -8
  35. package/dist/lib/esm/connect-to-cdp.d.mts +35 -3
  36. package/dist/lib/esm/connect-to-cdp.mjs +17 -11
  37. package/dist/lib/esm/context-provider.d.mts +1 -1
  38. package/dist/lib/esm/context-provider.mjs +1 -1
  39. package/dist/lib/esm/global-setup-core.d.mts +11 -1
  40. package/dist/lib/esm/global-setup-core.mjs +15 -4
  41. package/dist/lib/esm/incompatible-installer-version-error.d.mts +44 -0
  42. package/dist/lib/esm/incompatible-installer-version-error.mjs +28 -0
  43. package/dist/lib/esm/index.d.mts +7 -0
  44. package/dist/lib/esm/index.mjs +9 -1
  45. package/dist/lib/esm/installer-compatibility.d.mts +75 -0
  46. package/dist/lib/esm/installer-compatibility.mjs +40 -0
  47. package/dist/lib/esm/library.mjs +1 -1
  48. package/dist/lib/esm/namespace-bootstrap.mjs +16 -7
  49. package/dist/lib/esm/obsidian-installer.mjs +7 -4
  50. package/dist/lib/esm/obsidian-metadata.d.mts +56 -0
  51. package/dist/lib/esm/obsidian-metadata.mjs +1787 -0
  52. package/dist/lib/esm/renderer-boot-detection.d.mts +83 -0
  53. package/dist/lib/esm/renderer-boot-detection.mjs +23 -0
  54. package/dist/lib/esm/renderer-failed-to-initialize-error.d.mts +23 -0
  55. package/dist/lib/esm/renderer-failed-to-initialize-error.mjs +17 -0
  56. package/dist/lib/esm/transport-desktop-cdp.d.mts +55 -1
  57. package/dist/lib/esm/transport-desktop-cdp.mjs +89 -3
  58. package/dist/lib/esm/transport-factory.d.mts +1 -1
  59. package/dist/lib/esm/transport-factory.mjs +76 -21
  60. package/dist/lib/esm/transport-options.d.mts +37 -4
  61. package/dist/lib/esm/visibility.d.mts +27 -8
  62. package/dist/lib/esm/visibility.mjs +8 -2
  63. package/dist/obsidian-integration-testing-8.1.1.tgz +0 -0
  64. package/package.json +2 -3
  65. package/dist/obsidian-integration-testing-8.0.1.tgz +0 -0
@@ -168,9 +168,12 @@ function extractWindowsShell(assetPath, shellDir) {
168
168
  }
169
169
  async function fetchReleaseAssetNames(version) {
170
170
  try {
171
- const response = await fetch(`${RELEASE_API_TAG_URL}/v${version}`, {
172
- headers: { "Accept": "application/vnd.github+json", "User-Agent": DOWNLOAD_USER_AGENT }
173
- });
171
+ const headers = new Headers({ "Accept": "application/vnd.github+json", "User-Agent": DOWNLOAD_USER_AGENT });
172
+ const token = import_node_process.default.env["GITHUB_TOKEN"] ?? import_node_process.default.env["GH_TOKEN"];
173
+ if (token) {
174
+ headers.set("Authorization", `Bearer ${token}`);
175
+ }
176
+ const response = await fetch(`${RELEASE_API_TAG_URL}/v${version}`, { headers });
174
177
  if (!response.ok) {
175
178
  (0, import_log.log)(`[installer] Release API for ${version} returned HTTP ${String(response.status)}; falling back to templated asset names.`);
176
179
  return void 0;
@@ -214,4 +217,4 @@ function run(command, args) {
214
217
  ensureShellCached,
215
218
  getCachedShellDir
216
219
  });
217
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuLWluc3RhbGxlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEludGVncmF0aW9uLXRpbWUgaGVscGVycyBmb3IgcmVzb2x2aW5nIHRoZSBPYnNpZGlhbiAqKnNoZWxsKiogKHRoZSBFbGVjdHJvblxuICogcnVudGltZSAvIGluc3RhbGxlciBidWlsZCkgdG8gbGF1bmNoLlxuICpcbiAqIEJ5IGRlZmF1bHQgdGhlIGhhcm5lc3MgdXNlcyB0aGUgaW5zdGFsbGVkIHNoZWxsLiBXaGVuIGEgc3BlY2lmaWMgaW5zdGFsbGVyXG4gKiB2ZXJzaW9uIGlzIHJlcXVlc3RlZCwgaXQgZG93bmxvYWRzIHRoYXQgdmVyc2lvbidzIEdpdEh1YiByZWxlYXNlIGFzc2V0IGFuZFxuICogZXh0cmFjdHMgYSBwb3J0YWJsZSBzaGVsbCBpbnRvIGEgY2FjaGUsIHJldHVybmluZyB0aGUgZXhlY3V0YWJsZSB0byBsYXVuY2guXG4gKlxuICogR2l0SHViIHJlbGVhc2UgYXNzZXRzIGV4aXN0IGZvciAqKnB1YmxpYyoqIHJlbGVhc2VzIG9ubHk7IGNhdGFseXN0IChiZXRhKVxuICogYnVpbGRzIHB1Ymxpc2ggb25seSB0aGUgYXNhciwgc28gaW5zdGFsbGVyLXBpbm5pbmcgc3VwcG9ydHMgcHVibGljIHZlcnNpb25zLlxuICogVGhlIGV4dHJhY3RlZCBzaGVsbCdzIGJ1bmRsZWQgYHJlc291cmNlcy9vYnNpZGlhbi5hc2FyYCBpcyB0aGF0IHZlcnNpb24sIHNvXG4gKiBwaW5uaW5nIHRoZSBpbnN0YWxsZXIgaXMgaG93IHlvdSBydW4gYSB2ZXJzaW9uICoqb2xkZXIqKiB0aGFuIHRoZSBpbnN0YWxsZWRcbiAqIHNoZWxsIChhc2FyLXN3YXAgaXMgdXBncmFkZS1vbmx5IFx1MjAxNCBzZWUgYG9ic2lkaWFuLXZlcnNpb24tc3dpdGNoLnRzYCkuXG4gKi9cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIEludGVncmF0aW9uLXRpbWUgZG93bmxvYWQvZXh0cmFjdGlvbiBnbHVlIGNvdmVyZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQge1xuICBleGVjRmlsZVN5bmMsXG4gIHNwYXduU3luY1xufSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHtcbiAgZXhpc3RzU3luYyxcbiAgbWtkaXJTeW5jLFxuICByZWFkRmlsZVN5bmMsXG4gIHJtU3luYyxcbiAgd3JpdGVGaWxlU3luY1xufSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IHtcbiAgYmFzZW5hbWUsXG4gIGRpcm5hbWUsXG4gIGpvaW5cbn0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmltcG9ydCB7XG4gIGJ1aWxkSW5zdGFsbGVyQXNzZXROYW1lQ2FuZGlkYXRlcyxcbiAgc2VsZWN0SW5zdGFsbGVyQXNzZXROYW1lXG59IGZyb20gJy4vaW5zdGFsbGVyLWFzc2V0LmNqcyc7XG5pbXBvcnQgeyBsb2cgfSBmcm9tICcuL2xvZy5janMnO1xuXG4vKipcbiAqIEJyb3dzZXIgVXNlci1BZ2VudCBmb3IgZG93bmxvYWRpbmcgcmVsZWFzZSBhc3NldHMgKENsb3VkZmxhcmUtZ2F0ZWQpLlxuICovXG5jb25zdCBET1dOTE9BRF9VU0VSX0FHRU5UID0gJ01vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS84Ni4wLjQyNDAuMTgzIFNhZmFyaS81MzcuMzYnO1xuXG4vKiogQmFzZSBVUkwgZm9yIGBvYnNpZGlhbi1yZWxlYXNlc2AgcmVsZWFzZSBhc3NldHMgKGAuLi4vZG93bmxvYWQvdjx2ZXI+Lzxhc3NldD5gKS4gKi9cbmNvbnN0IFJFTEVBU0VfRE9XTkxPQURfQkFTRV9VUkwgPSAnaHR0cHM6Ly9naXRodWIuY29tL29ic2lkaWFubWQvb2JzaWRpYW4tcmVsZWFzZXMvcmVsZWFzZXMvZG93bmxvYWQnO1xuXG4vKiogR2l0SHViIFJFU1QgZW5kcG9pbnQgbGlzdGluZyBhIHJlbGVhc2UncyBhc3NldHMgYnkgdGFnIChgLi4uL3JlbGVhc2VzL3RhZ3Mvdjx2ZXI+YCkuICovXG5jb25zdCBSRUxFQVNFX0FQSV9UQUdfVVJMID0gJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3Mvb2JzaWRpYW5tZC9vYnNpZGlhbi1yZWxlYXNlcy9yZWxlYXNlcy90YWdzJztcblxuLyoqIFRoZSBzdWJzZXQgb2YgdGhlIEdpdEh1YiByZWxlYXNlIEFQSSByZXNwb25zZSB0aGlzIG1vZHVsZSByZWFkcy4gKi9cbmludGVyZmFjZSBHaXRIdWJSZWxlYXNlIHtcbiAgLyoqIFRoZSByZWxlYXNlJ3MgZG93bmxvYWRhYmxlIGFzc2V0cy4gKi9cbiAgcmVhZG9ubHkgYXNzZXRzOiByZWFkb25seSBHaXRIdWJSZWxlYXNlQXNzZXRbXTtcbn1cblxuLyoqIFRoZSBzdWJzZXQgb2YgYSBHaXRIdWIgcmVsZWFzZSdzIGFzc2V0IG9iamVjdCB0aGlzIG1vZHVsZSByZWFkcy4gKi9cbmludGVyZmFjZSBHaXRIdWJSZWxlYXNlQXNzZXQge1xuICAvKiogVGhlIGFzc2V0IGZpbGUgbmFtZSwgZS5nLiBgT2JzaWRpYW4uMC4xNC41LmV4ZWAuICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbn1cblxuY29uc3QgQ0FDSEVfUk9PVCA9IGpvaW4odG1wZGlyKCksICdvYnNpZGlhbi1pbnRlZ3JhdGlvbi10ZXN0aW5nJyk7XG5jb25zdCBTSEVMTF9DQUNIRV9ESVIgPSBqb2luKENBQ0hFX1JPT1QsICdzaGVsbC1jYWNoZScpO1xuY29uc3QgTUFDX1BMSVNUX1ZFUlNJT05fUEFUVEVSTiA9IC88a2V5PkNGQnVuZGxlU2hvcnRWZXJzaW9uU3RyaW5nPFxcL2tleT5cXHMqPHN0cmluZz4oPzx2ZXJzaW9uPltePF0rKTxcXC9zdHJpbmc+LztcblxuLyoqXG4gKiBBIHJlc29sdmVkIE9ic2lkaWFuIHNoZWxsIGV4ZWN1dGFibGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRTaGVsbCB7XG4gIC8qKiBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBPYnNpZGlhbiBleGVjdXRhYmxlIHRvIGxhdW5jaC4gKi9cbiAgcmVhZG9ubHkgZXhlUGF0aDogc3RyaW5nO1xuXG4gIC8qKiBUaGUgc2hlbGwncyB2ZXJzaW9uLCBvciBgdW5kZWZpbmVkYCBpZiBpdCBjb3VsZCBub3QgYmUgZGV0ZWN0ZWQuICovXG4gIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBEZXRlY3RzIHRoZSB2ZXJzaW9uIG9mIGFuIGluc3RhbGxlZCBPYnNpZGlhbiBzaGVsbCBmcm9tIGl0cyBleGVjdXRhYmxlLlxuICpcbiAqIC0gV2luZG93czogdGhlIGV4ZWN1dGFibGUncyBQRSBgRmlsZVZlcnNpb25gLlxuICogLSBtYWNPUzogYENGQnVuZGxlU2hvcnRWZXJzaW9uU3RyaW5nYCBmcm9tIHRoZSBhcHAgYnVuZGxlJ3MgYEluZm8ucGxpc3RgLlxuICogLSBMaW51eDogYmVzdC1lZmZvcnQgcGFyc2UgZnJvbSB0aGUgZXhlY3V0YWJsZSBwYXRoIChvZnRlbiBgdW5kZWZpbmVkYCkuXG4gKlxuICogQHBhcmFtIGV4ZVBhdGggLSBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBPYnNpZGlhbiBleGVjdXRhYmxlLlxuICogQHJldHVybnMgVGhlIGB4LnkuemAgdmVyc2lvbiwgb3IgYHVuZGVmaW5lZGAgaWYgaXQgY2Fubm90IGJlIGRldGVybWluZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3RJbnN0YWxsZWRTaGVsbFZlcnNpb24oZXhlUGF0aDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgICByZXR1cm4gZGV0ZWN0V2luZG93c0ZpbGVWZXJzaW9uKGV4ZVBhdGgpO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XG4gICAgcmV0dXJuIGRldGVjdE1hY0J1bmRsZVZlcnNpb24oZXhlUGF0aCk7XG4gIH1cblxuICByZXR1cm4gZGV0ZWN0VmVyc2lvbkZyb21QYXRoKGV4ZVBhdGgpO1xufVxuXG4vKipcbiAqIEVuc3VyZXMgYSBwb3J0YWJsZSBPYnNpZGlhbiBzaGVsbCBmb3IgdGhlIGdpdmVuIHZlcnNpb24gaXMgZXh0cmFjdGVkIGludG8gdGhlXG4gKiBjYWNoZSwgZG93bmxvYWRpbmcgYW5kIGV4dHJhY3RpbmcgaXRzIEdpdEh1YiByZWxlYXNlIGFzc2V0IGlmIG5lY2Vzc2FyeS5cbiAqXG4gKiBAcGFyYW0gdmVyc2lvbiAtIEEgY29uY3JldGUgcHVibGljIGB4LnkuemAgdmVyc2lvbi5cbiAqIEByZXR1cm5zIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBjYWNoZWQgc2hlbGwgZXhlY3V0YWJsZS5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIGFzc2V0IGNhbm5vdCBiZSBkb3dubG9hZGVkIG9yIGV4dHJhY3RlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuc3VyZVNoZWxsQ2FjaGVkKHZlcnNpb246IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHNoZWxsRGlyID0gZ2V0Q2FjaGVkU2hlbGxEaXIodmVyc2lvbik7XG4gIGNvbnN0IGV4ZVBhdGggPSBnZXRDYWNoZWRTaGVsbEV4ZVBhdGgoc2hlbGxEaXIpO1xuICBpZiAoZXhpc3RzU3luYyhleGVQYXRoKSkge1xuICAgIGxvZyhgW2luc3RhbGxlcl0gVXNpbmcgY2FjaGVkIHNoZWxsIGZvciAke3ZlcnNpb259LmApO1xuICAgIHJldHVybiBleGVQYXRoO1xuICB9XG5cbiAgbWtkaXJTeW5jKHNoZWxsRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgY29uc3QgYXNzZXRVcmxzID0gYXdhaXQgcmVzb2x2ZUluc3RhbGxlckFzc2V0VXJscyh2ZXJzaW9uKTtcbiAgY29uc3QgYXNzZXRQYXRoID0gYXdhaXQgZG93bmxvYWRJbnN0YWxsZXJBc3NldChhc3NldFVybHMsIHNoZWxsRGlyLCB2ZXJzaW9uKTtcbiAgZXh0cmFjdFNoZWxsKGFzc2V0UGF0aCwgc2hlbGxEaXIpO1xuICBybVN5bmMoYXNzZXRQYXRoLCB7IGZvcmNlOiB0cnVlIH0pO1xuXG4gIGlmICghZXhpc3RzU3luYyhleGVQYXRoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRXh0cmFjdGVkIE9ic2lkaWFuIHNoZWxsICR7dmVyc2lvbn0gYnV0IGV4ZWN1dGFibGUgbm90IGZvdW5kIGF0ICR7ZXhlUGF0aH0uYCk7XG4gIH1cbiAgbG9nKGBbaW5zdGFsbGVyXSBFeHRyYWN0ZWQgc2hlbGwgJHt2ZXJzaW9ufSAtPiAke2V4ZVBhdGh9YCk7XG4gIHJldHVybiBleGVQYXRoO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGNhY2hlIGRpcmVjdG9yeSBhIHZlcnNpb24ncyBleHRyYWN0ZWQgc2hlbGwgbGl2ZXMgaW4gKHRoZVxuICogZGlyZWN0b3J5IG1heSBub3QgeWV0IGV4aXN0KS5cbiAqXG4gKiBAcGFyYW0gdmVyc2lvbiAtIEEgY29uY3JldGUgcHVibGljIGB4LnkuemAgdmVyc2lvbi5cbiAqIEByZXR1cm5zIFRoZSBhYnNvbHV0ZSBzaGVsbCBjYWNoZSBkaXJlY3RvcnkgZm9yIHRoZSB2ZXJzaW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2FjaGVkU2hlbGxEaXIodmVyc2lvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGpvaW4oU0hFTExfQ0FDSEVfRElSLCB2ZXJzaW9uKTtcbn1cblxuLyoqXG4gKiBUaHJvd3MgYSBkZXNjcmlwdGl2ZSBlcnJvciBpZiBhIHJlcXVpcmVkIGNvbW1hbmQgaXMgbm90IG9uIGBQQVRIYC5cbiAqXG4gKiBAcGFyYW0gY29tbWFuZCAtIFRoZSBjb21tYW5kIG5hbWUuXG4gKiBAcGFyYW0gaGludCAtIEFjdGlvbmFibGUgZ3VpZGFuY2UgYXBwZW5kZWQgdG8gdGhlIGVycm9yLlxuICovXG5mdW5jdGlvbiBhc3NlcnRDb21tYW5kQXZhaWxhYmxlKGNvbW1hbmQ6IHN0cmluZywgaGludDogc3RyaW5nKTogdm9pZCB7XG4gIGNvbnN0IHByb2JlID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/ICd3aGVyZS5leGUnIDogJ3doaWNoJztcbiAgY29uc3QgcmVzdWx0ID0gc3Bhd25TeW5jKHByb2JlLCBbY29tbWFuZF0sIHsgc3RkaW86ICdpZ25vcmUnIH0pO1xuICBpZiAocmVzdWx0LnN0YXR1cyAhPT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgUmVxdWlyZWQgY29tbWFuZCBcIiR7Y29tbWFuZH1cIiB3YXMgbm90IGZvdW5kIG9uIFBBVEguICR7aGludH1gKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlYWRzIGBDRkJ1bmRsZVNob3J0VmVyc2lvblN0cmluZ2AgZnJvbSBhIG1hY09TIGFwcCBidW5kbGUncyBgSW5mby5wbGlzdGAuXG4gKlxuICogQHBhcmFtIGV4ZVBhdGggLSBQYXRoIHRvIGAuLi4vT2JzaWRpYW4uYXBwL0NvbnRlbnRzL01hY09TL09ic2lkaWFuYC5cbiAqIEByZXR1cm5zIFRoZSBgeC55LnpgIHZlcnNpb24sIG9yIGB1bmRlZmluZWRgLlxuICovXG5mdW5jdGlvbiBkZXRlY3RNYWNCdW5kbGVWZXJzaW9uKGV4ZVBhdGg6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHRyeSB7XG4gICAgY29uc3QgY29udGVudHNEaXIgPSBkaXJuYW1lKGRpcm5hbWUoZXhlUGF0aCkpO1xuICAgIGNvbnN0IHBsaXN0ID0gcmVhZEZpbGVTeW5jKGpvaW4oY29udGVudHNEaXIsICdJbmZvLnBsaXN0JyksICd1dGYtOCcpO1xuICAgIGNvbnN0IG1hdGNoID0gTUFDX1BMSVNUX1ZFUlNJT05fUEFUVEVSTi5leGVjKHBsaXN0KTtcbiAgICByZXR1cm4gbWF0Y2g/Lmdyb3Vwcz8uWyd2ZXJzaW9uJ107XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBCZXN0LWVmZm9ydCBwYXJzZSBvZiBhbiBgeC55LnpgIHZlcnNpb24gZW1iZWRkZWQgaW4gYSBwYXRoLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBwYXRoIG9yIHN0cmluZyB0byBzY2FuLlxuICogQHJldHVybnMgVGhlIGZpcnN0IGB4LnkuemAgbWF0Y2gsIG9yIGB1bmRlZmluZWRgLlxuICovXG5mdW5jdGlvbiBkZXRlY3RWZXJzaW9uRnJvbVBhdGgodmFsdWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IG1hdGNoID0gLyg/PHZlcnNpb24+XFxkK1xcLlxcZCtcXC5cXGQrKS8uZXhlYyh2YWx1ZSk7XG4gIHJldHVybiBtYXRjaD8uZ3JvdXBzPy5bJ3ZlcnNpb24nXTtcbn1cblxuLyoqXG4gKiBSZWFkcyB0aGUgUEUgYEZpbGVWZXJzaW9uYCBvZiBhIFdpbmRvd3MgZXhlY3V0YWJsZSB2aWEgUG93ZXJTaGVsbC5cbiAqXG4gKiBAcGFyYW0gZXhlUGF0aCAtIEFic29sdXRlIHBhdGggdG8gdGhlIGV4ZWN1dGFibGUuXG4gKiBAcmV0dXJucyBUaGUgYHgueS56YCB2ZXJzaW9uLCBvciBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZGV0ZWN0V2luZG93c0ZpbGVWZXJzaW9uKGV4ZVBhdGg6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHRyeSB7XG4gICAgY29uc3Qgb3V0cHV0ID0gZXhlY0ZpbGVTeW5jKFxuICAgICAgJ3Bvd2Vyc2hlbGwnLFxuICAgICAgWyctTm9Qcm9maWxlJywgJy1Db21tYW5kJywgYChHZXQtSXRlbSAtTGl0ZXJhbFBhdGggJHtKU09OLnN0cmluZ2lmeShleGVQYXRoKX0pLlZlcnNpb25JbmZvLkZpbGVWZXJzaW9uYF0sXG4gICAgICB7IGVuY29kaW5nOiAndXRmLTgnIH1cbiAgICApO1xuICAgIGNvbnN0IHZlcnNpb24gPSBvdXRwdXQudHJpbSgpO1xuICAgIHJldHVybiB2ZXJzaW9uLmxlbmd0aCA+IDAgPyB2ZXJzaW9uIDogdW5kZWZpbmVkO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogRG93bmxvYWRzIGEgc2luZ2xlIHJlbGVhc2UgYXNzZXQgZm9yIGEgdmVyc2lvbiB0byBhIGRlc3RpbmF0aW9uIGZpbGUuXG4gKlxuICogQHBhcmFtIHVybCAtIFRoZSBhc3NldCBkb3dubG9hZCBVUkwuXG4gKiBAcGFyYW0gZGVzdCAtIERlc3RpbmF0aW9uIGZpbGUgcGF0aC5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIHJlcXVlc3QgZmFpbHMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRvd25sb2FkQXNzZXQodXJsOiBzdHJpbmcsIGRlc3Q6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBsb2coYFtpbnN0YWxsZXJdIERvd25sb2FkaW5nIGluc3RhbGxlciBmcm9tICR7dXJsfSAuLi5gKTtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHsgaGVhZGVyczogeyAnVXNlci1BZ2VudCc6IERPV05MT0FEX1VTRVJfQUdFTlQgfSB9KTtcbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIHRocm93IG5ldyBFcnJvcihgSFRUUCAke1N0cmluZyhyZXNwb25zZS5zdGF0dXMpfWApO1xuICB9XG4gIHdyaXRlRmlsZVN5bmMoZGVzdCwgQnVmZmVyLmZyb20oYXdhaXQgcmVzcG9uc2UuYXJyYXlCdWZmZXIoKSkpO1xufVxuXG4vKipcbiAqIERvd25sb2FkcyB0aGUgZmlyc3QgcmVhY2hhYmxlIGluc3RhbGxlciBhc3NldCBmcm9tIGFuIG9yZGVyZWQgbGlzdCBvZlxuICogY2FuZGlkYXRlIFVSTHMsIHJldHVybmluZyB0aGUgcGF0aCBpdCB3YXMgc2F2ZWQgdG8uXG4gKlxuICogQHBhcmFtIHVybHMgLSBDYW5kaWRhdGUgYXNzZXQgVVJMcywgaW4gcHJpb3JpdHkgb3JkZXIuXG4gKiBAcGFyYW0gc2hlbGxEaXIgLSBUaGUgZGVzdGluYXRpb24gc2hlbGwgZGlyZWN0b3J5LlxuICogQHBhcmFtIHZlcnNpb24gLSBUaGUgcmVsZWFzZSB2ZXJzaW9uIChmb3IgZXJyb3IgbWVzc2FnZXMpLlxuICogQHJldHVybnMgVGhlIGRvd25sb2FkZWQgYXNzZXQncyBwYXRoLlxuICogQHRocm93cyBFcnJvciBpZiBub25lIG9mIHRoZSBjYW5kaWRhdGVzIGNhbiBiZSBkb3dubG9hZGVkLlxuICovXG5hc3luYyBmdW5jdGlvbiBkb3dubG9hZEluc3RhbGxlckFzc2V0KHVybHM6IHN0cmluZ1tdLCBzaGVsbERpcjogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgdXJsIG9mIHVybHMpIHtcbiAgICBjb25zdCBhc3NldFBhdGggPSBqb2luKHNoZWxsRGlyLCBiYXNlbmFtZSh1cmwpKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZG93bmxvYWRBc3NldCh1cmwsIGFzc2V0UGF0aCk7XG4gICAgICByZXR1cm4gYXNzZXRQYXRoO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBlcnJvcnMucHVzaChgJHt1cmx9OiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKX1gKTtcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgYEZhaWxlZCB0byBkb3dubG9hZCBPYnNpZGlhbiBpbnN0YWxsZXIgJHt2ZXJzaW9ufS4gQXR0ZW1wdHM6ICR7ZXJyb3JzLmpvaW4oJzsgJyl9LiBgXG4gICAgICArICdDYXRhbHlzdC9iZXRhIHZlcnNpb25zIGhhdmUgbm8gcHVibGljIGluc3RhbGxlciBcdTIwMTQgcGluIGFuIGFzYXIgdmVyc2lvbiBvbiBhIHB1YmxpYy9pbnN0YWxsZWQgc2hlbGwgaW5zdGVhZC4nXG4gICk7XG59XG5cbi8qKlxuICogRXh0cmFjdHMgYSBMaW51eCBgLnRhci5nemAgcG9ydGFibGUgYnVpbGQuXG4gKlxuICogQHBhcmFtIGFzc2V0UGF0aCAtIFBhdGggdG8gdGhlIGRvd25sb2FkZWQgYC50YXIuZ3pgLlxuICogQHBhcmFtIHNoZWxsRGlyIC0gRGVzdGluYXRpb24gc2hlbGwgZGlyZWN0b3J5LlxuICovXG5mdW5jdGlvbiBleHRyYWN0TGludXhTaGVsbChhc3NldFBhdGg6IHN0cmluZywgc2hlbGxEaXI6IHN0cmluZyk6IHZvaWQge1xuICBydW4oJ3RhcicsIFsneHpmJywgYXNzZXRQYXRoLCAnLUMnLCBzaGVsbERpciwgJy0tc3RyaXAtY29tcG9uZW50cz0xJ10pO1xufVxuXG4vKipcbiAqIEV4dHJhY3RzIGEgbWFjT1MgYC5kbWdgIGJ5IG1vdW50aW5nIGl0IGFuZCBjb3B5aW5nIHRoZSBhcHAgYnVuZGxlLlxuICpcbiAqIEBwYXJhbSBhc3NldFBhdGggLSBQYXRoIHRvIHRoZSBkb3dubG9hZGVkIGAuZG1nYC5cbiAqIEBwYXJhbSBzaGVsbERpciAtIERlc3RpbmF0aW9uIHNoZWxsIGRpcmVjdG9yeS5cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdE1hY1NoZWxsKGFzc2V0UGF0aDogc3RyaW5nLCBzaGVsbERpcjogc3RyaW5nKTogdm9pZCB7XG4gIGNvbnN0IG1vdW50UG9pbnQgPSBqb2luKHNoZWxsRGlyLCAnX19tbnQnKTtcbiAgbWtkaXJTeW5jKG1vdW50UG9pbnQsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBydW4oJ2hkaXV0aWwnLCBbJ2F0dGFjaCcsICctbm9icm93c2UnLCAnLW1vdW50cG9pbnQnLCBtb3VudFBvaW50LCBhc3NldFBhdGhdKTtcbiAgdHJ5IHtcbiAgICBydW4oJ2NwJywgWyctUicsIGpvaW4obW91bnRQb2ludCwgJ09ic2lkaWFuLmFwcCcpLCBzaGVsbERpcl0pO1xuICB9IGZpbmFsbHkge1xuICAgIHJ1bignaGRpdXRpbCcsIFsnZGV0YWNoJywgbW91bnRQb2ludF0pO1xuICB9XG4gIHJtU3luYyhtb3VudFBvaW50LCB7IGZvcmNlOiB0cnVlLCByZWN1cnNpdmU6IHRydWUgfSk7XG59XG5cbi8qKlxuICogRXh0cmFjdHMgYSBkb3dubG9hZGVkIGluc3RhbGxlciBhc3NldCBpbnRvIGEgc2hlbGwgZGlyZWN0b3J5LCBwZXIgcGxhdGZvcm0uXG4gKlxuICogQHBhcmFtIGFzc2V0UGF0aCAtIFRoZSBkb3dubG9hZGVkIGFzc2V0IHBhdGguXG4gKiBAcGFyYW0gc2hlbGxEaXIgLSBUaGUgZGVzdGluYXRpb24gc2hlbGwgZGlyZWN0b3J5LlxuICovXG5mdW5jdGlvbiBleHRyYWN0U2hlbGwoYXNzZXRQYXRoOiBzdHJpbmcsIHNoZWxsRGlyOiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgICBleHRyYWN0V2luZG93c1NoZWxsKGFzc2V0UGF0aCwgc2hlbGxEaXIpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJykge1xuICAgIGV4dHJhY3RNYWNTaGVsbChhc3NldFBhdGgsIHNoZWxsRGlyKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBleHRyYWN0TGludXhTaGVsbChhc3NldFBhdGgsIHNoZWxsRGlyKTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyBhIFdpbmRvd3MgTlNJUyBpbnN0YWxsZXIncyBpbm5lciBhcHAgcGF5bG9hZCB2aWEgNy1aaXAuXG4gKlxuICogVGhlIE5TSVMgaW5zdGFsbGVyIGAuZXhlYCBjb250YWlucyBgJFBMVUdJTlNESVIvYXBwLTY0Ljd6YCwgd2hpY2ggaG9sZHMgdGhlXG4gKiBwb3J0YWJsZSBhcHAgKG1pcnJvcnMgaG93IHRoZSBzY29vcCBtYW5pZmVzdCBpbnN0YWxscyBPYnNpZGlhbikuXG4gKlxuICogQHBhcmFtIGFzc2V0UGF0aCAtIFBhdGggdG8gdGhlIGRvd25sb2FkZWQgYC5leGVgLlxuICogQHBhcmFtIHNoZWxsRGlyIC0gRGVzdGluYXRpb24gc2hlbGwgZGlyZWN0b3J5LlxuICovXG5mdW5jdGlvbiBleHRyYWN0V2luZG93c1NoZWxsKGFzc2V0UGF0aDogc3RyaW5nLCBzaGVsbERpcjogc3RyaW5nKTogdm9pZCB7XG4gIGFzc2VydENvbW1hbmRBdmFpbGFibGUoJzd6JywgJ0luc3RhbGwgNy1aaXAgKGUuZy4gYHNjb29wIGluc3RhbGwgN3ppcGApIHRvIGV4dHJhY3QgYSBwaW5uZWQgT2JzaWRpYW4gaW5zdGFsbGVyLicpO1xuICBjb25zdCBuc2lzRXh0cmFjdERpciA9IGpvaW4oc2hlbGxEaXIsICdfX25zaXMnKTtcbiAgcnVuKCc3eicsIFsneCcsICcteScsIGAtbyR7bnNpc0V4dHJhY3REaXJ9YCwgYXNzZXRQYXRoXSk7XG4gIGNvbnN0IGlubmVyQXJjaGl2ZSA9IGpvaW4obnNpc0V4dHJhY3REaXIsICckUExVR0lOU0RJUicsICdhcHAtNjQuN3onKTtcbiAgcnVuKCc3eicsIFsneCcsICcteScsIGAtbyR7c2hlbGxEaXJ9YCwgaW5uZXJBcmNoaXZlXSk7XG4gIHJtU3luYyhuc2lzRXh0cmFjdERpciwgeyBmb3JjZTogdHJ1ZSwgcmVjdXJzaXZlOiB0cnVlIH0pO1xufVxuXG4vKipcbiAqIEZldGNoZXMgYSByZWxlYXNlJ3MgYXNzZXQgbmFtZXMgZnJvbSB0aGUgR2l0SHViIEFQSS5cbiAqXG4gKiBAcGFyYW0gdmVyc2lvbiAtIFRoZSByZWxlYXNlIHZlcnNpb24gKHRhZyBgdjx2ZXJzaW9uPmApLlxuICogQHJldHVybnMgVGhlIGFzc2V0IG5hbWVzLCBvciBgdW5kZWZpbmVkYCBpZiB0aGUgQVBJIGlzIHVuYXZhaWxhYmxlLlxuICovXG5hc3luYyBmdW5jdGlvbiBmZXRjaFJlbGVhc2VBc3NldE5hbWVzKHZlcnNpb246IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10gfCB1bmRlZmluZWQ+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke1JFTEVBU0VfQVBJX1RBR19VUkx9L3Yke3ZlcnNpb259YCwge1xuICAgICAgaGVhZGVyczogeyAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL3ZuZC5naXRodWIranNvbicsICdVc2VyLUFnZW50JzogRE9XTkxPQURfVVNFUl9BR0VOVCB9XG4gICAgfSk7XG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgbG9nKGBbaW5zdGFsbGVyXSBSZWxlYXNlIEFQSSBmb3IgJHt2ZXJzaW9ufSByZXR1cm5lZCBIVFRQICR7U3RyaW5nKHJlc3BvbnNlLnN0YXR1cyl9OyBmYWxsaW5nIGJhY2sgdG8gdGVtcGxhdGVkIGFzc2V0IG5hbWVzLmApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgcmVsZWFzZSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBHaXRIdWJSZWxlYXNlO1xuICAgIHJldHVybiByZWxlYXNlLmFzc2V0cy5tYXAoKGFzc2V0KSA9PiBhc3NldC5uYW1lKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2coYFtpbnN0YWxsZXJdIFJlbGVhc2UgQVBJIGZvciAke3ZlcnNpb259IHVuYXZhaWxhYmxlICgke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKX0pOyBmYWxsaW5nIGJhY2sgdG8gdGVtcGxhdGVkIGFzc2V0IG5hbWVzLmApO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBleHBlY3RlZCBjYWNoZWQgc2hlbGwgZXhlY3V0YWJsZSBwYXRoIGZvciB0aGUgY3VycmVudCBwbGF0Zm9ybS5cbiAqXG4gKiBAcGFyYW0gc2hlbGxEaXIgLSBUaGUgc2hlbGwgY2FjaGUgZGlyZWN0b3J5IGZvciBhIHZlcnNpb24uXG4gKiBAcmV0dXJucyBUaGUgZXhlY3V0YWJsZSBwYXRoLlxuICovXG5mdW5jdGlvbiBnZXRDYWNoZWRTaGVsbEV4ZVBhdGgoc2hlbGxEaXI6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgcmV0dXJuIGpvaW4oc2hlbGxEaXIsICdPYnNpZGlhbi5leGUnKTtcbiAgfVxuXG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJykge1xuICAgIHJldHVybiBqb2luKHNoZWxsRGlyLCAnT2JzaWRpYW4uYXBwJywgJ0NvbnRlbnRzJywgJ01hY09TJywgJ09ic2lkaWFuJyk7XG4gIH1cblxuICByZXR1cm4gam9pbihzaGVsbERpciwgJ29ic2lkaWFuJyk7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIG9yZGVyZWQgaW5zdGFsbGVyIGFzc2V0IGRvd25sb2FkIFVSTHMgdG8gdHJ5IGZvciBhIHZlcnNpb24uXG4gKlxuICogVGhlIHJlbGVhc2UncyByZWFsIGFzc2V0IGxpc3QgaXMgcXVlcmllZCBmaXJzdCBzbyB0aGUgcGxhdGZvcm0tY29ycmVjdCBhc3NldFxuICogaXMgcGlja2VkIHJlZ2FyZGxlc3Mgb2YgdGhlIGhpc3RvcmljYWwgZG90LXZzLWh5cGhlbiBuYW1pbmc7IGlmIHRoYXQgY2FsbCBpc1xuICogdW5hdmFpbGFibGUgaXQgZmFsbHMgYmFjayB0byB0cnlpbmcgYm90aCB0ZW1wbGF0ZWQgc2VwYXJhdG9yIGZvcm1zLlxuICpcbiAqIEBwYXJhbSB2ZXJzaW9uIC0gVGhlIGNvbmNyZXRlIGB4LnkuemAgdmVyc2lvbi5cbiAqIEByZXR1cm5zIENhbmRpZGF0ZSBhc3NldCBVUkxzLCBpbiBwcmlvcml0eSBvcmRlci5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUluc3RhbGxlckFzc2V0VXJscyh2ZXJzaW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IGFzc2V0TmFtZXMgPSBhd2FpdCBmZXRjaFJlbGVhc2VBc3NldE5hbWVzKHZlcnNpb24pO1xuICBpZiAoYXNzZXROYW1lcykge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gc2VsZWN0SW5zdGFsbGVyQXNzZXROYW1lKHsgYXNzZXROYW1lcywgcGxhdGZvcm06IHByb2Nlc3MucGxhdGZvcm0sIHZlcnNpb24gfSk7XG4gICAgaWYgKHNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBbYCR7UkVMRUFTRV9ET1dOTE9BRF9CQVNFX1VSTH0vdiR7dmVyc2lvbn0vJHtzZWxlY3RlZH1gXTtcbiAgICB9XG4gICAgbG9nKGBbaW5zdGFsbGVyXSBObyBpbnN0YWxsZXIgYXNzZXQgbWF0Y2hlZCBmb3IgJHt2ZXJzaW9ufTsgZmFsbGluZyBiYWNrIHRvIHRlbXBsYXRlZCBhc3NldCBuYW1lcy5gKTtcbiAgfVxuXG4gIHJldHVybiBidWlsZEluc3RhbGxlckFzc2V0TmFtZUNhbmRpZGF0ZXMoeyBwbGF0Zm9ybTogcHJvY2Vzcy5wbGF0Zm9ybSwgdmVyc2lvbiB9KVxuICAgIC5tYXAoKG5hbWUpID0+IGAke1JFTEVBU0VfRE9XTkxPQURfQkFTRV9VUkx9L3Yke3ZlcnNpb259LyR7bmFtZX1gKTtcbn1cblxuLyoqXG4gKiBSdW5zIGEgY29tbWFuZCBzeW5jaHJvbm91c2x5LCB0aHJvd2luZyBvbiBhIG5vbi16ZXJvIGV4aXQuXG4gKlxuICogQHBhcmFtIGNvbW1hbmQgLSBUaGUgY29tbWFuZC5cbiAqIEBwYXJhbSBhcmdzIC0gVGhlIGFyZ3VtZW50cy5cbiAqL1xuZnVuY3Rpb24gcnVuKGNvbW1hbmQ6IHN0cmluZywgYXJnczogc3RyaW5nW10pOiB2b2lkIHtcbiAgY29uc3QgcmVzdWx0ID0gc3Bhd25TeW5jKGNvbW1hbmQsIGFyZ3MsIHsgc3RkaW86ICdpZ25vcmUnIH0pO1xuICBpZiAocmVzdWx0LnN0YXR1cyAhPT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ29tbWFuZCBmYWlsZWQ6ICR7Y29tbWFuZH0gJHthcmdzLm1hcCgoYXJnKSA9PiBiYXNlbmFtZShhcmcpKS5qb2luKCcgJyl9IChleGl0ICR7U3RyaW5nKHJlc3VsdC5zdGF0dXMpfSlgKTtcbiAgfVxufVxuXG4v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MENBQTBDO0FBQzdILGFBQU87QUFBQSxJQUNUO0FBQ0EsVUFBTSxVQUFVLE1BQU0sU0FBUyxLQUFLO0FBQ3BDLFdBQU8sUUFBUSxPQUFPLElBQUksQ0FBQyxVQUFVLE1BQU0sSUFBSTtBQUFBLEVBQ2pELFNBQVMsT0FBTztBQUNkLHdCQUFJLCtCQUErQixPQUFPLGlCQUFpQixpQkFBaUIsUUFBUSxNQUFNLFVBQVUsT0FBTyxLQUFLLENBQUMsMkNBQTJDO0FBQzVKLFdBQU87QUFBQSxFQUNUO0FBQ0Y7QUFRQSxTQUFTLHNCQUFzQixVQUEwQjtBQUN2RCxNQUFJLG9CQUFBQSxRQUFRLGFBQWEsU0FBUztBQUNoQyxlQUFPLHVCQUFLLFVBQVUsY0FBYztBQUFBLEVBQ3RDO0FBRUEsTUFBSSxvQkFBQUEsUUFBUSxhQUFhLFVBQVU7QUFDakMsZUFBTyx1QkFBSyxVQUFVLGdCQUFnQixZQUFZLFNBQVMsVUFBVTtBQUFBLEVBQ3ZFO0FBRUEsYUFBTyx1QkFBSyxVQUFVLFVBQVU7QUFDbEM7QUFZQSxlQUFlLDBCQUEwQixTQUFvQztBQUMzRSxRQUFNLGFBQWEsTUFBTSx1QkFBdUIsT0FBTztBQUN2RCxNQUFJLFlBQVk7QUFDZCxVQUFNLGVBQVcsaURBQXlCLEVBQUUsWUFBWSxVQUFVLG9CQUFBQSxRQUFRLFVBQVUsUUFBUSxDQUFDO0FBQzdGLFFBQUksYUFBYSxRQUFXO0FBQzFCLGFBQU8sQ0FBQyxHQUFHLHlCQUF5QixLQUFLLE9BQU8sSUFBSSxRQUFRLEVBQUU7QUFBQSxJQUNoRTtBQUNBLHdCQUFJLDhDQUE4QyxPQUFPLDBDQUEwQztBQUFBLEVBQ3JHO0FBRUEsYUFBTywwREFBa0MsRUFBRSxVQUFVLG9CQUFBQSxRQUFRLFVBQVUsUUFBUSxDQUFDLEVBQzdFLElBQUksQ0FBQyxTQUFTLEdBQUcseUJBQXlCLEtBQUssT0FBTyxJQUFJLElBQUksRUFBRTtBQUNyRTtBQVFBLFNBQVMsSUFBSSxTQUFpQixNQUFzQjtBQUNsRCxRQUFNLGFBQVMscUNBQVUsU0FBUyxNQUFNLEVBQUUsT0FBTyxTQUFTLENBQUM7QUFDM0QsTUFBSSxPQUFPLFdBQVcsR0FBRztBQUN2QixVQUFNLElBQUksTUFBTSxtQkFBbUIsT0FBTyxJQUFJLEtBQUssSUFBSSxDQUFDLFlBQVEsMkJBQVMsR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsVUFBVSxPQUFPLE9BQU8sTUFBTSxDQUFDLEdBQUc7QUFBQSxFQUM1SDtBQUNGOyIsCiAgIm5hbWVzIjogWyJwcm9jZXNzIl0KfQo=
220
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuLWluc3RhbGxlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEludGVncmF0aW9uLXRpbWUgaGVscGVycyBmb3IgcmVzb2x2aW5nIHRoZSBPYnNpZGlhbiAqKnNoZWxsKiogKHRoZSBFbGVjdHJvblxuICogcnVudGltZSAvIGluc3RhbGxlciBidWlsZCkgdG8gbGF1bmNoLlxuICpcbiAqIEJ5IGRlZmF1bHQgdGhlIGhhcm5lc3MgdXNlcyB0aGUgaW5zdGFsbGVkIHNoZWxsLiBXaGVuIGEgc3BlY2lmaWMgaW5zdGFsbGVyXG4gKiB2ZXJzaW9uIGlzIHJlcXVlc3RlZCwgaXQgZG93bmxvYWRzIHRoYXQgdmVyc2lvbidzIEdpdEh1YiByZWxlYXNlIGFzc2V0IGFuZFxuICogZXh0cmFjdHMgYSBwb3J0YWJsZSBzaGVsbCBpbnRvIGEgY2FjaGUsIHJldHVybmluZyB0aGUgZXhlY3V0YWJsZSB0byBsYXVuY2guXG4gKlxuICogR2l0SHViIHJlbGVhc2UgYXNzZXRzIGV4aXN0IGZvciAqKnB1YmxpYyoqIHJlbGVhc2VzIG9ubHk7IGNhdGFseXN0IChiZXRhKVxuICogYnVpbGRzIHB1Ymxpc2ggb25seSB0aGUgYXNhciwgc28gaW5zdGFsbGVyLXBpbm5pbmcgc3VwcG9ydHMgcHVibGljIHZlcnNpb25zLlxuICogVGhlIGV4dHJhY3RlZCBzaGVsbCdzIGJ1bmRsZWQgYHJlc291cmNlcy9vYnNpZGlhbi5hc2FyYCBpcyB0aGF0IHZlcnNpb24sIHNvXG4gKiBwaW5uaW5nIHRoZSBpbnN0YWxsZXIgaXMgaG93IHlvdSBydW4gYSB2ZXJzaW9uICoqb2xkZXIqKiB0aGFuIHRoZSBpbnN0YWxsZWRcbiAqIHNoZWxsIChhc2FyLXN3YXAgaXMgdXBncmFkZS1vbmx5IFx1MjAxNCBzZWUgYG9ic2lkaWFuLXZlcnNpb24tc3dpdGNoLnRzYCkuXG4gKi9cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIEludGVncmF0aW9uLXRpbWUgZG93bmxvYWQvZXh0cmFjdGlvbiBnbHVlIGNvdmVyZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQge1xuICBleGVjRmlsZVN5bmMsXG4gIHNwYXduU3luY1xufSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHtcbiAgZXhpc3RzU3luYyxcbiAgbWtkaXJTeW5jLFxuICByZWFkRmlsZVN5bmMsXG4gIHJtU3luYyxcbiAgd3JpdGVGaWxlU3luY1xufSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IHtcbiAgYmFzZW5hbWUsXG4gIGRpcm5hbWUsXG4gIGpvaW5cbn0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmltcG9ydCB7XG4gIGJ1aWxkSW5zdGFsbGVyQXNzZXROYW1lQ2FuZGlkYXRlcyxcbiAgc2VsZWN0SW5zdGFsbGVyQXNzZXROYW1lXG59IGZyb20gJy4vaW5zdGFsbGVyLWFzc2V0LmNqcyc7XG5pbXBvcnQgeyBsb2cgfSBmcm9tICcuL2xvZy5janMnO1xuXG4vKipcbiAqIEJyb3dzZXIgVXNlci1BZ2VudCBmb3IgZG93bmxvYWRpbmcgcmVsZWFzZSBhc3NldHMgKENsb3VkZmxhcmUtZ2F0ZWQpLlxuICovXG5jb25zdCBET1dOTE9BRF9VU0VSX0FHRU5UID0gJ01vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS84Ni4wLjQyNDAuMTgzIFNhZmFyaS81MzcuMzYnO1xuXG4vKiogQmFzZSBVUkwgZm9yIGBvYnNpZGlhbi1yZWxlYXNlc2AgcmVsZWFzZSBhc3NldHMgKGAuLi4vZG93bmxvYWQvdjx2ZXI+Lzxhc3NldD5gKS4gKi9cbmNvbnN0IFJFTEVBU0VfRE9XTkxPQURfQkFTRV9VUkwgPSAnaHR0cHM6Ly9naXRodWIuY29tL29ic2lkaWFubWQvb2JzaWRpYW4tcmVsZWFzZXMvcmVsZWFzZXMvZG93bmxvYWQnO1xuXG4vKiogR2l0SHViIFJFU1QgZW5kcG9pbnQgbGlzdGluZyBhIHJlbGVhc2UncyBhc3NldHMgYnkgdGFnIChgLi4uL3JlbGVhc2VzL3RhZ3Mvdjx2ZXI+YCkuICovXG5jb25zdCBSRUxFQVNFX0FQSV9UQUdfVVJMID0gJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3Mvb2JzaWRpYW5tZC9vYnNpZGlhbi1yZWxlYXNlcy9yZWxlYXNlcy90YWdzJztcblxuLyoqIFRoZSBzdWJzZXQgb2YgdGhlIEdpdEh1YiByZWxlYXNlIEFQSSByZXNwb25zZSB0aGlzIG1vZHVsZSByZWFkcy4gKi9cbmludGVyZmFjZSBHaXRIdWJSZWxlYXNlIHtcbiAgLyoqIFRoZSByZWxlYXNlJ3MgZG93bmxvYWRhYmxlIGFzc2V0cy4gKi9cbiAgcmVhZG9ubHkgYXNzZXRzOiByZWFkb25seSBHaXRIdWJSZWxlYXNlQXNzZXRbXTtcbn1cblxuLyoqIFRoZSBzdWJzZXQgb2YgYSBHaXRIdWIgcmVsZWFzZSdzIGFzc2V0IG9iamVjdCB0aGlzIG1vZHVsZSByZWFkcy4gKi9cbmludGVyZmFjZSBHaXRIdWJSZWxlYXNlQXNzZXQge1xuICAvKiogVGhlIGFzc2V0IGZpbGUgbmFtZSwgZS5nLiBgT2JzaWRpYW4uMC4xNC41LmV4ZWAuICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbn1cblxuY29uc3QgQ0FDSEVfUk9PVCA9IGpvaW4odG1wZGlyKCksICdvYnNpZGlhbi1pbnRlZ3JhdGlvbi10ZXN0aW5nJyk7XG5jb25zdCBTSEVMTF9DQUNIRV9ESVIgPSBqb2luKENBQ0hFX1JPT1QsICdzaGVsbC1jYWNoZScpO1xuY29uc3QgTUFDX1BMSVNUX1ZFUlNJT05fUEFUVEVSTiA9IC88a2V5PkNGQnVuZGxlU2hvcnRWZXJzaW9uU3RyaW5nPFxcL2tleT5cXHMqPHN0cmluZz4oPzx2ZXJzaW9uPltePF0rKTxcXC9zdHJpbmc+LztcblxuLyoqXG4gKiBBIHJlc29sdmVkIE9ic2lkaWFuIHNoZWxsIGV4ZWN1dGFibGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRTaGVsbCB7XG4gIC8qKiBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBPYnNpZGlhbiBleGVjdXRhYmxlIHRvIGxhdW5jaC4gKi9cbiAgcmVhZG9ubHkgZXhlUGF0aDogc3RyaW5nO1xuXG4gIC8qKiBUaGUgc2hlbGwncyB2ZXJzaW9uLCBvciBgdW5kZWZpbmVkYCBpZiBpdCBjb3VsZCBub3QgYmUgZGV0ZWN0ZWQuICovXG4gIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBEZXRlY3RzIHRoZSB2ZXJzaW9uIG9mIGFuIGluc3RhbGxlZCBPYnNpZGlhbiBzaGVsbCBmcm9tIGl0cyBleGVjdXRhYmxlLlxuICpcbiAqIC0gV2luZG93czogdGhlIGV4ZWN1dGFibGUncyBQRSBgRmlsZVZlcnNpb25gLlxuICogLSBtYWNPUzogYENGQnVuZGxlU2hvcnRWZXJzaW9uU3RyaW5nYCBmcm9tIHRoZSBhcHAgYnVuZGxlJ3MgYEluZm8ucGxpc3RgLlxuICogLSBMaW51eDogYmVzdC1lZmZvcnQgcGFyc2UgZnJvbSB0aGUgZXhlY3V0YWJsZSBwYXRoIChvZnRlbiBgdW5kZWZpbmVkYCkuXG4gKlxuICogQHBhcmFtIGV4ZVBhdGggLSBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBPYnNpZGlhbiBleGVjdXRhYmxlLlxuICogQHJldHVybnMgVGhlIGB4LnkuemAgdmVyc2lvbiwgb3IgYHVuZGVmaW5lZGAgaWYgaXQgY2Fubm90IGJlIGRldGVybWluZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3RJbnN0YWxsZWRTaGVsbFZlcnNpb24oZXhlUGF0aDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgICByZXR1cm4gZGV0ZWN0V2luZG93c0ZpbGVWZXJzaW9uKGV4ZVBhdGgpO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XG4gICAgcmV0dXJuIGRldGVjdE1hY0J1bmRsZVZlcnNpb24oZXhlUGF0aCk7XG4gIH1cblxuICByZXR1cm4gZGV0ZWN0VmVyc2lvbkZyb21QYXRoKGV4ZVBhdGgpO1xufVxuXG4vKipcbiAqIEVuc3VyZXMgYSBwb3J0YWJsZSBPYnNpZGlhbiBzaGVsbCBmb3IgdGhlIGdpdmVuIHZlcnNpb24gaXMgZXh0cmFjdGVkIGludG8gdGhlXG4gKiBjYWNoZSwgZG93bmxvYWRpbmcgYW5kIGV4dHJhY3RpbmcgaXRzIEdpdEh1YiByZWxlYXNlIGFzc2V0IGlmIG5lY2Vzc2FyeS5cbiAqXG4gKiBAcGFyYW0gdmVyc2lvbiAtIEEgY29uY3JldGUgcHVibGljIGB4LnkuemAgdmVyc2lvbi5cbiAqIEByZXR1cm5zIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBjYWNoZWQgc2hlbGwgZXhlY3V0YWJsZS5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIGFzc2V0IGNhbm5vdCBiZSBkb3dubG9hZGVkIG9yIGV4dHJhY3RlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuc3VyZVNoZWxsQ2FjaGVkKHZlcnNpb246IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHNoZWxsRGlyID0gZ2V0Q2FjaGVkU2hlbGxEaXIodmVyc2lvbik7XG4gIGNvbnN0IGV4ZVBhdGggPSBnZXRDYWNoZWRTaGVsbEV4ZVBhdGgoc2hlbGxEaXIpO1xuICBpZiAoZXhpc3RzU3luYyhleGVQYXRoKSkge1xuICAgIGxvZyhgW2luc3RhbGxlcl0gVXNpbmcgY2FjaGVkIHNoZWxsIGZvciAke3ZlcnNpb259LmApO1xuICAgIHJldHVybiBleGVQYXRoO1xuICB9XG5cbiAgbWtkaXJTeW5jKHNoZWxsRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgY29uc3QgYXNzZXRVcmxzID0gYXdhaXQgcmVzb2x2ZUluc3RhbGxlckFzc2V0VXJscyh2ZXJzaW9uKTtcbiAgY29uc3QgYXNzZXRQYXRoID0gYXdhaXQgZG93bmxvYWRJbnN0YWxsZXJBc3NldChhc3NldFVybHMsIHNoZWxsRGlyLCB2ZXJzaW9uKTtcbiAgZXh0cmFjdFNoZWxsKGFzc2V0UGF0aCwgc2hlbGxEaXIpO1xuICBybVN5bmMoYXNzZXRQYXRoLCB7IGZvcmNlOiB0cnVlIH0pO1xuXG4gIGlmICghZXhpc3RzU3luYyhleGVQYXRoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRXh0cmFjdGVkIE9ic2lkaWFuIHNoZWxsICR7dmVyc2lvbn0gYnV0IGV4ZWN1dGFibGUgbm90IGZvdW5kIGF0ICR7ZXhlUGF0aH0uYCk7XG4gIH1cbiAgbG9nKGBbaW5zdGFsbGVyXSBFeHRyYWN0ZWQgc2hlbGwgJHt2ZXJzaW9ufSAtPiAke2V4ZVBhdGh9YCk7XG4gIHJldHVybiBleGVQYXRoO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGNhY2hlIGRpcmVjdG9yeSBhIHZlcnNpb24ncyBleHRyYWN0ZWQgc2hlbGwgbGl2ZXMgaW4gKHRoZVxuICogZGlyZWN0b3J5IG1heSBub3QgeWV0IGV4aXN0KS5cbiAqXG4gKiBAcGFyYW0gdmVyc2lvbiAtIEEgY29uY3JldGUgcHVibGljIGB4LnkuemAgdmVyc2lvbi5cbiAqIEByZXR1cm5zIFRoZSBhYnNvbHV0ZSBzaGVsbCBjYWNoZSBkaXJlY3RvcnkgZm9yIHRoZSB2ZXJzaW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2FjaGVkU2hlbGxEaXIodmVyc2lvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGpvaW4oU0hFTExfQ0FDSEVfRElSLCB2ZXJzaW9uKTtcbn1cblxuLyoqXG4gKiBUaHJvd3MgYSBkZXNjcmlwdGl2ZSBlcnJvciBpZiBhIHJlcXVpcmVkIGNvbW1hbmQgaXMgbm90IG9uIGBQQVRIYC5cbiAqXG4gKiBAcGFyYW0gY29tbWFuZCAtIFRoZSBjb21tYW5kIG5hbWUuXG4gKiBAcGFyYW0gaGludCAtIEFjdGlvbmFibGUgZ3VpZGFuY2UgYXBwZW5kZWQgdG8gdGhlIGVycm9yLlxuICovXG5mdW5jdGlvbiBhc3NlcnRDb21tYW5kQXZhaWxhYmxlKGNvbW1hbmQ6IHN0cmluZywgaGludDogc3RyaW5nKTogdm9pZCB7XG4gIGNvbnN0IHByb2JlID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/ICd3aGVyZS5leGUnIDogJ3doaWNoJztcbiAgY29uc3QgcmVzdWx0ID0gc3Bhd25TeW5jKHByb2JlLCBbY29tbWFuZF0sIHsgc3RkaW86ICdpZ25vcmUnIH0pO1xuICBpZiAocmVzdWx0LnN0YXR1cyAhPT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgUmVxdWlyZWQgY29tbWFuZCBcIiR7Y29tbWFuZH1cIiB3YXMgbm90IGZvdW5kIG9uIFBBVEguICR7aGludH1gKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlYWRzIGBDRkJ1bmRsZVNob3J0VmVyc2lvblN0cmluZ2AgZnJvbSBhIG1hY09TIGFwcCBidW5kbGUncyBgSW5mby5wbGlzdGAuXG4gKlxuICogQHBhcmFtIGV4ZVBhdGggLSBQYXRoIHRvIGAuLi4vT2JzaWRpYW4uYXBwL0NvbnRlbnRzL01hY09TL09ic2lkaWFuYC5cbiAqIEByZXR1cm5zIFRoZSBgeC55LnpgIHZlcnNpb24sIG9yIGB1bmRlZmluZWRgLlxuICovXG5mdW5jdGlvbiBkZXRlY3RNYWNCdW5kbGVWZXJzaW9uKGV4ZVBhdGg6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHRyeSB7XG4gICAgY29uc3QgY29udGVudHNEaXIgPSBkaXJuYW1lKGRpcm5hbWUoZXhlUGF0aCkpO1xuICAgIGNvbnN0IHBsaXN0ID0gcmVhZEZpbGVTeW5jKGpvaW4oY29udGVudHNEaXIsICdJbmZvLnBsaXN0JyksICd1dGYtOCcpO1xuICAgIGNvbnN0IG1hdGNoID0gTUFDX1BMSVNUX1ZFUlNJT05fUEFUVEVSTi5leGVjKHBsaXN0KTtcbiAgICByZXR1cm4gbWF0Y2g/Lmdyb3Vwcz8uWyd2ZXJzaW9uJ107XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBCZXN0LWVmZm9ydCBwYXJzZSBvZiBhbiBgeC55LnpgIHZlcnNpb24gZW1iZWRkZWQgaW4gYSBwYXRoLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBwYXRoIG9yIHN0cmluZyB0byBzY2FuLlxuICogQHJldHVybnMgVGhlIGZpcnN0IGB4LnkuemAgbWF0Y2gsIG9yIGB1bmRlZmluZWRgLlxuICovXG5mdW5jdGlvbiBkZXRlY3RWZXJzaW9uRnJvbVBhdGgodmFsdWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IG1hdGNoID0gLyg/PHZlcnNpb24+XFxkK1xcLlxcZCtcXC5cXGQrKS8uZXhlYyh2YWx1ZSk7XG4gIHJldHVybiBtYXRjaD8uZ3JvdXBzPy5bJ3ZlcnNpb24nXTtcbn1cblxuLyoqXG4gKiBSZWFkcyB0aGUgUEUgYEZpbGVWZXJzaW9uYCBvZiBhIFdpbmRvd3MgZXhlY3V0YWJsZSB2aWEgUG93ZXJTaGVsbC5cbiAqXG4gKiBAcGFyYW0gZXhlUGF0aCAtIEFic29sdXRlIHBhdGggdG8gdGhlIGV4ZWN1dGFibGUuXG4gKiBAcmV0dXJucyBUaGUgYHgueS56YCB2ZXJzaW9uLCBvciBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZGV0ZWN0V2luZG93c0ZpbGVWZXJzaW9uKGV4ZVBhdGg6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHRyeSB7XG4gICAgY29uc3Qgb3V0cHV0ID0gZXhlY0ZpbGVTeW5jKFxuICAgICAgJ3Bvd2Vyc2hlbGwnLFxuICAgICAgWyctTm9Qcm9maWxlJywgJy1Db21tYW5kJywgYChHZXQtSXRlbSAtTGl0ZXJhbFBhdGggJHtKU09OLnN0cmluZ2lmeShleGVQYXRoKX0pLlZlcnNpb25JbmZvLkZpbGVWZXJzaW9uYF0sXG4gICAgICB7IGVuY29kaW5nOiAndXRmLTgnIH1cbiAgICApO1xuICAgIGNvbnN0IHZlcnNpb24gPSBvdXRwdXQudHJpbSgpO1xuICAgIHJldHVybiB2ZXJzaW9uLmxlbmd0aCA+IDAgPyB2ZXJzaW9uIDogdW5kZWZpbmVkO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogRG93bmxvYWRzIGEgc2luZ2xlIHJlbGVhc2UgYXNzZXQgZm9yIGEgdmVyc2lvbiB0byBhIGRlc3RpbmF0aW9uIGZpbGUuXG4gKlxuICogQHBhcmFtIHVybCAtIFRoZSBhc3NldCBkb3dubG9hZCBVUkwuXG4gKiBAcGFyYW0gZGVzdCAtIERlc3RpbmF0aW9uIGZpbGUgcGF0aC5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIHJlcXVlc3QgZmFpbHMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRvd25sb2FkQXNzZXQodXJsOiBzdHJpbmcsIGRlc3Q6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBsb2coYFtpbnN0YWxsZXJdIERvd25sb2FkaW5nIGluc3RhbGxlciBmcm9tICR7dXJsfSAuLi5gKTtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHsgaGVhZGVyczogeyAnVXNlci1BZ2VudCc6IERPV05MT0FEX1VTRVJfQUdFTlQgfSB9KTtcbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIHRocm93IG5ldyBFcnJvcihgSFRUUCAke1N0cmluZyhyZXNwb25zZS5zdGF0dXMpfWApO1xuICB9XG4gIHdyaXRlRmlsZVN5bmMoZGVzdCwgQnVmZmVyLmZyb20oYXdhaXQgcmVzcG9uc2UuYXJyYXlCdWZmZXIoKSkpO1xufVxuXG4vKipcbiAqIERvd25sb2FkcyB0aGUgZmlyc3QgcmVhY2hhYmxlIGluc3RhbGxlciBhc3NldCBmcm9tIGFuIG9yZGVyZWQgbGlzdCBvZlxuICogY2FuZGlkYXRlIFVSTHMsIHJldHVybmluZyB0aGUgcGF0aCBpdCB3YXMgc2F2ZWQgdG8uXG4gKlxuICogQHBhcmFtIHVybHMgLSBDYW5kaWRhdGUgYXNzZXQgVVJMcywgaW4gcHJpb3JpdHkgb3JkZXIuXG4gKiBAcGFyYW0gc2hlbGxEaXIgLSBUaGUgZGVzdGluYXRpb24gc2hlbGwgZGlyZWN0b3J5LlxuICogQHBhcmFtIHZlcnNpb24gLSBUaGUgcmVsZWFzZSB2ZXJzaW9uIChmb3IgZXJyb3IgbWVzc2FnZXMpLlxuICogQHJldHVybnMgVGhlIGRvd25sb2FkZWQgYXNzZXQncyBwYXRoLlxuICogQHRocm93cyBFcnJvciBpZiBub25lIG9mIHRoZSBjYW5kaWRhdGVzIGNhbiBiZSBkb3dubG9hZGVkLlxuICovXG5hc3luYyBmdW5jdGlvbiBkb3dubG9hZEluc3RhbGxlckFzc2V0KHVybHM6IHN0cmluZ1tdLCBzaGVsbERpcjogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgdXJsIG9mIHVybHMpIHtcbiAgICBjb25zdCBhc3NldFBhdGggPSBqb2luKHNoZWxsRGlyLCBiYXNlbmFtZSh1cmwpKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZG93bmxvYWRBc3NldCh1cmwsIGFzc2V0UGF0aCk7XG4gICAgICByZXR1cm4gYXNzZXRQYXRoO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBlcnJvcnMucHVzaChgJHt1cmx9OiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKX1gKTtcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgYEZhaWxlZCB0byBkb3dubG9hZCBPYnNpZGlhbiBpbnN0YWxsZXIgJHt2ZXJzaW9ufS4gQXR0ZW1wdHM6ICR7ZXJyb3JzLmpvaW4oJzsgJyl9LiBgXG4gICAgICArICdDYXRhbHlzdC9iZXRhIHZlcnNpb25zIGhhdmUgbm8gcHVibGljIGluc3RhbGxlciBcdTIwMTQgcGluIGFuIGFzYXIgdmVyc2lvbiBvbiBhIHB1YmxpYy9pbnN0YWxsZWQgc2hlbGwgaW5zdGVhZC4nXG4gICk7XG59XG5cbi8qKlxuICogRXh0cmFjdHMgYSBMaW51eCBgLnRhci5nemAgcG9ydGFibGUgYnVpbGQuXG4gKlxuICogQHBhcmFtIGFzc2V0UGF0aCAtIFBhdGggdG8gdGhlIGRvd25sb2FkZWQgYC50YXIuZ3pgLlxuICogQHBhcmFtIHNoZWxsRGlyIC0gRGVzdGluYXRpb24gc2hlbGwgZGlyZWN0b3J5LlxuICovXG5mdW5jdGlvbiBleHRyYWN0TGludXhTaGVsbChhc3NldFBhdGg6IHN0cmluZywgc2hlbGxEaXI6IHN0cmluZyk6IHZvaWQge1xuICBydW4oJ3RhcicsIFsneHpmJywgYXNzZXRQYXRoLCAnLUMnLCBzaGVsbERpciwgJy0tc3RyaXAtY29tcG9uZW50cz0xJ10pO1xufVxuXG4vKipcbiAqIEV4dHJhY3RzIGEgbWFjT1MgYC5kbWdgIGJ5IG1vdW50aW5nIGl0IGFuZCBjb3B5aW5nIHRoZSBhcHAgYnVuZGxlLlxuICpcbiAqIEBwYXJhbSBhc3NldFBhdGggLSBQYXRoIHRvIHRoZSBkb3dubG9hZGVkIGAuZG1nYC5cbiAqIEBwYXJhbSBzaGVsbERpciAtIERlc3RpbmF0aW9uIHNoZWxsIGRpcmVjdG9yeS5cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdE1hY1NoZWxsKGFzc2V0UGF0aDogc3RyaW5nLCBzaGVsbERpcjogc3RyaW5nKTogdm9pZCB7XG4gIGNvbnN0IG1vdW50UG9pbnQgPSBqb2luKHNoZWxsRGlyLCAnX19tbnQnKTtcbiAgbWtkaXJTeW5jKG1vdW50UG9pbnQsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBydW4oJ2hkaXV0aWwnLCBbJ2F0dGFjaCcsICctbm9icm93c2UnLCAnLW1vdW50cG9pbnQnLCBtb3VudFBvaW50LCBhc3NldFBhdGhdKTtcbiAgdHJ5IHtcbiAgICBydW4oJ2NwJywgWyctUicsIGpvaW4obW91bnRQb2ludCwgJ09ic2lkaWFuLmFwcCcpLCBzaGVsbERpcl0pO1xuICB9IGZpbmFsbHkge1xuICAgIHJ1bignaGRpdXRpbCcsIFsnZGV0YWNoJywgbW91bnRQb2ludF0pO1xuICB9XG4gIHJtU3luYyhtb3VudFBvaW50LCB7IGZvcmNlOiB0cnVlLCByZWN1cnNpdmU6IHRydWUgfSk7XG59XG5cbi8qKlxuICogRXh0cmFjdHMgYSBkb3dubG9hZGVkIGluc3RhbGxlciBhc3NldCBpbnRvIGEgc2hlbGwgZGlyZWN0b3J5LCBwZXIgcGxhdGZvcm0uXG4gKlxuICogQHBhcmFtIGFzc2V0UGF0aCAtIFRoZSBkb3dubG9hZGVkIGFzc2V0IHBhdGguXG4gKiBAcGFyYW0gc2hlbGxEaXIgLSBUaGUgZGVzdGluYXRpb24gc2hlbGwgZGlyZWN0b3J5LlxuICovXG5mdW5jdGlvbiBleHRyYWN0U2hlbGwoYXNzZXRQYXRoOiBzdHJpbmcsIHNoZWxsRGlyOiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgICBleHRyYWN0V2luZG93c1NoZWxsKGFzc2V0UGF0aCwgc2hlbGxEaXIpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJykge1xuICAgIGV4dHJhY3RNYWNTaGVsbChhc3NldFBhdGgsIHNoZWxsRGlyKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBleHRyYWN0TGludXhTaGVsbChhc3NldFBhdGgsIHNoZWxsRGlyKTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyBhIFdpbmRvd3MgTlNJUyBpbnN0YWxsZXIncyBpbm5lciBhcHAgcGF5bG9hZCB2aWEgNy1aaXAuXG4gKlxuICogVGhlIE5TSVMgaW5zdGFsbGVyIGAuZXhlYCBjb250YWlucyBgJFBMVUdJTlNESVIvYXBwLTY0Ljd6YCwgd2hpY2ggaG9sZHMgdGhlXG4gKiBwb3J0YWJsZSBhcHAgKG1pcnJvcnMgaG93IHRoZSBzY29vcCBtYW5pZmVzdCBpbnN0YWxscyBPYnNpZGlhbikuXG4gKlxuICogQHBhcmFtIGFzc2V0UGF0aCAtIFBhdGggdG8gdGhlIGRvd25sb2FkZWQgYC5leGVgLlxuICogQHBhcmFtIHNoZWxsRGlyIC0gRGVzdGluYXRpb24gc2hlbGwgZGlyZWN0b3J5LlxuICovXG5mdW5jdGlvbiBleHRyYWN0V2luZG93c1NoZWxsKGFzc2V0UGF0aDogc3RyaW5nLCBzaGVsbERpcjogc3RyaW5nKTogdm9pZCB7XG4gIGFzc2VydENvbW1hbmRBdmFpbGFibGUoJzd6JywgJ0luc3RhbGwgNy1aaXAgKGUuZy4gYHNjb29wIGluc3RhbGwgN3ppcGApIHRvIGV4dHJhY3QgYSBwaW5uZWQgT2JzaWRpYW4gaW5zdGFsbGVyLicpO1xuICBjb25zdCBuc2lzRXh0cmFjdERpciA9IGpvaW4oc2hlbGxEaXIsICdfX25zaXMnKTtcbiAgcnVuKCc3eicsIFsneCcsICcteScsIGAtbyR7bnNpc0V4dHJhY3REaXJ9YCwgYXNzZXRQYXRoXSk7XG4gIGNvbnN0IGlubmVyQXJjaGl2ZSA9IGpvaW4obnNpc0V4dHJhY3REaXIsICckUExVR0lOU0RJUicsICdhcHAtNjQuN3onKTtcbiAgcnVuKCc3eicsIFsneCcsICcteScsIGAtbyR7c2hlbGxEaXJ9YCwgaW5uZXJBcmNoaXZlXSk7XG4gIHJtU3luYyhuc2lzRXh0cmFjdERpciwgeyBmb3JjZTogdHJ1ZSwgcmVjdXJzaXZlOiB0cnVlIH0pO1xufVxuXG4vKipcbiAqIEZldGNoZXMgYSByZWxlYXNlJ3MgYXNzZXQgbmFtZXMgZnJvbSB0aGUgR2l0SHViIEFQSS5cbiAqXG4gKiBSZWFkcyBhIGBHSVRIVUJfVE9LRU5gIChvciBgR0hfVE9LRU5gKSBmcm9tIHRoZSBlbnZpcm9ubWVudCBhbmQgc2VuZHMgaXQgYXMgYVxuICogYmVhcmVyIHRva2VuIHdoZW4gcHJlc2VudCwgdG8gbGlmdCB0aGUgYW5vbnltb3VzIHJhdGUgbGltaXQgdGhhdCBvdGhlcndpc2VcbiAqIHJldHVybnMgSFRUUCA0MDMgb24gc2hhcmVkIENJIHJ1bm5lciBJUHMuXG4gKlxuICogQHBhcmFtIHZlcnNpb24gLSBUaGUgcmVsZWFzZSB2ZXJzaW9uICh0YWcgYHY8dmVyc2lvbj5gKS5cbiAqIEByZXR1cm5zIFRoZSBhc3NldCBuYW1lcywgb3IgYHVuZGVmaW5lZGAgaWYgdGhlIEFQSSBpcyB1bmF2YWlsYWJsZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZmV0Y2hSZWxlYXNlQXNzZXROYW1lcyh2ZXJzaW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZ1tdIHwgdW5kZWZpbmVkPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKHsgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi92bmQuZ2l0aHViK2pzb24nLCAnVXNlci1BZ2VudCc6IERPV05MT0FEX1VTRVJfQUdFTlQgfSk7XG4gICAgLy8gU2VuZCBhIGJlYXJlciB0b2tlbiB3aGVuIG9uZSBpcyBhdmFpbGFibGUgKGUuZy4gR0lUSFVCX1RPS0VOIG9uIENJKS5cbiAgICAvLyBXaXRob3V0IGl0IHRoZSBhc3NldC1saXN0IEFQSSBpcyBsaW1pdGVkIHRvIHRoZSBhbm9ueW1vdXMgcXVvdGEuXG4gICAgLy8gVGhhdCBxdW90YSByZXR1cm5zIEhUVFAgNDAzIG9uIHNoYXJlZCBDSSBydW5uZXIgSVBzIGFuZCBmb3JjZXMgdGhlIGZhbGxiYWNrLlxuICAgIGNvbnN0IHRva2VuID0gcHJvY2Vzcy5lbnZbJ0dJVEhVQl9UT0tFTiddID8/IHByb2Nlc3MuZW52WydHSF9UT0tFTiddO1xuICAgIGlmICh0b2tlbikge1xuICAgICAgaGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCBgQmVhcmVyICR7dG9rZW59YCk7XG4gICAgfVxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7UkVMRUFTRV9BUElfVEFHX1VSTH0vdiR7dmVyc2lvbn1gLCB7IGhlYWRlcnMgfSk7XG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgbG9nKGBbaW5zdGFsbGVyXSBSZWxlYXNlIEFQSSBmb3IgJHt2ZXJzaW9ufSByZXR1cm5lZCBIVFRQICR7U3RyaW5nKHJlc3BvbnNlLnN0YXR1cyl9OyBmYWxsaW5nIGJhY2sgdG8gdGVtcGxhdGVkIGFzc2V0IG5hbWVzLmApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgcmVsZWFzZSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBHaXRIdWJSZWxlYXNlO1xuICAgIHJldHVybiByZWxlYXNlLmFzc2V0cy5tYXAoKGFzc2V0KSA9PiBhc3NldC5uYW1lKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2coYFtpbnN0YWxsZXJdIFJlbGVhc2UgQVBJIGZvciAke3ZlcnNpb259IHVuYXZhaWxhYmxlICgke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKX0pOyBmYWxsaW5nIGJhY2sgdG8gdGVtcGxhdGVkIGFzc2V0IG5hbWVzLmApO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBleHBlY3RlZCBjYWNoZWQgc2hlbGwgZXhlY3V0YWJsZSBwYXRoIGZvciB0aGUgY3VycmVudCBwbGF0Zm9ybS5cbiAqXG4gKiBAcGFyYW0gc2hlbGxEaXIgLSBUaGUgc2hlbGwgY2FjaGUgZGlyZWN0b3J5IGZvciBhIHZlcnNpb24uXG4gKiBAcmV0dXJucyBUaGUgZXhlY3V0YWJsZSBwYXRoLlxuICovXG5mdW5jdGlvbiBnZXRDYWNoZWRTaGVsbEV4ZVBhdGgoc2hlbGxEaXI6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgcmV0dXJuIGpvaW4oc2hlbGxEaXIsICdPYnNpZGlhbi5leGUnKTtcbiAgfVxuXG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJykge1xuICAgIHJldHVybiBqb2luKHNoZWxsRGlyLCAnT2JzaWRpYW4uYXBwJywgJ0NvbnRlbnRzJywgJ01hY09TJywgJ09ic2lkaWFuJyk7XG4gIH1cblxuICByZXR1cm4gam9pbihzaGVsbERpciwgJ29ic2lkaWFuJyk7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIG9yZGVyZWQgaW5zdGFsbGVyIGFzc2V0IGRvd25sb2FkIFVSTHMgdG8gdHJ5IGZvciBhIHZlcnNpb24uXG4gKlxuICogVGhlIHJlbGVhc2UncyByZWFsIGFzc2V0IGxpc3QgaXMgcXVlcmllZCBmaXJzdCBzbyB0aGUgcGxhdGZvcm0tY29ycmVjdCBhc3NldFxuICogaXMgcGlja2VkIHJlZ2FyZGxlc3Mgb2YgdGhlIGhpc3RvcmljYWwgZG90LXZzLWh5cGhlbiBuYW1pbmc7IGlmIHRoYXQgY2FsbCBpc1xuICogdW5hdmFpbGFibGUgaXQgZmFsbHMgYmFjayB0byB0cnlpbmcgYm90aCB0ZW1wbGF0ZWQgc2VwYXJhdG9yIGZvcm1zLlxuICpcbiAqIEBwYXJhbSB2ZXJzaW9uIC0gVGhlIGNvbmNyZXRlIGB4LnkuemAgdmVyc2lvbi5cbiAqIEByZXR1cm5zIENhbmRpZGF0ZSBhc3NldCBVUkxzLCBpbiBwcmlvcml0eSBvcmRlci5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUluc3RhbGxlckFzc2V0VXJscyh2ZXJzaW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IGFzc2V0TmFtZXMgPSBhd2FpdCBmZXRjaFJlbGVhc2VBc3NldE5hbWVzKHZlcnNpb24pO1xuICBpZiAoYXNzZXROYW1lcykge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gc2VsZWN0SW5zdGFsbGVyQXNzZXROYW1lKHsgYXNzZXROYW1lcywgcGxhdGZvcm06IHByb2Nlc3MucGxhdGZvcm0sIHZlcnNpb24gfSk7XG4gICAgaWYgKHNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBbYCR7UkVMRUFTRV9ET1dOTE9BRF9CQVNFX1VSTH0vdiR7dmVyc2lvbn0vJHtzZWxlY3RlZH1gXTtcbiAgICB9XG4gICAgbG9nKGBbaW5zdGFsbGVyXSBObyBpbnN0YWxsZXIgYXNzZXQgbWF0Y2hlZCBmb3IgJHt2ZXJzaW9ufTsgZmFsbGluZyBiYWNrIHRvIHRlbXBsYXRlZCBhc3NldCBuYW1lcy5gKTtcbiAgfVxuXG4gIHJldHVybiBidWlsZEluc3RhbGxlckFzc2V0TmFtZUNhbmRpZGF0ZXMoeyBwbGF0Zm9ybTogcHJvY2Vzcy5wbGF0Zm9ybSwgdmVyc2lvbiB9KVxuICAgIC5tYXAoKG5hbWUpID0+IGAke1JFTEVBU0VfRE9XTkxPQURfQkFTRV9VUkx9L3Yke3ZlcnNpb259LyR7bmFtZX1gKTtcbn1cblxuLyoqXG4gKiBSdW5zIGEgY29tbWFuZCBzeW5jaHJvbm91c2x5LCB0aHJvd2luZyBvbiBhIG5vbi16ZXJvIGV4aXQuXG4gKlxuICogQHBhcmFtIGNvbW1hbmQgLSBUaGUgY29tbWFuZC5cbiAqIEBwYXJhbSBhcmdzIC0gVGhlIGFyZ3VtZW50cy5cbiAqL1xuZnVuY3Rpb24gcnVuKGNvbW1hbmQ6IHN0cmluZywgYXJnczogc3RyaW5nW10pOiB2b2lkIHtcbiAgY29uc3QgcmVzdWx0ID0gc3Bhd25TeW5jKGNvbW1hbmQsIGFyZ3MsIHsgc3RkaW86ICdpZ25vcmUnIH0pO1xuICBpZiAocmVzdWx0LnN0YXR1cyAhPT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ29tbWFuZCBmYWlsZWQ6ICR7Y29tbWFuZH0gJHthcmdzLm1hcCgoYXJnKSA9PiBiYXNlbmFtZShhcmcpKS5qb2luKCcgJyl9IChleGl0ICR7U3RyaW5nKHJlc3VsdC5zdGF0dXMpfSlgKTtcbiAgfVxufVxuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBbUJBLGdDQUdPO0FBQ1AscUJBTU87QUFDUCxxQkFBdUI7QUFDdkIsdUJBSU87QUFDUCwwQkFBb0I7QUFFcEIsNkJBR087QUFDUCxpQkFBb0I7QUFLcEIsTUFBTSxzQkFBc0I7QUFHNUIsTUFBTSw0QkFBNEI7QUFHbEMsTUFBTSxzQkFBc0I7QUFjNUIsTUFBTSxpQkFBYSwyQkFBSyx1QkFBTyxHQUFHLDhC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