@mnaoumov/typescript-dev-toolkit 6.0.0 → 6.0.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.
package/README.md CHANGED
@@ -16,6 +16,12 @@ The guides and the API reference are at <https://mnaoumov.dev/typescript-dev-too
16
16
 
17
17
  It is one of five packages that replace [`obsidian-dev-utils`](https://github.com/mnaoumov/obsidian-dev-utils): [`@mnaoumov/typescript-lib`](https://github.com/mnaoumov/typescript-lib), [`@mnaoumov/typescript-test-toolkit`](https://github.com/mnaoumov/typescript-test-toolkit), [`@mnaoumov/typescript-dev-toolkit`](https://github.com/mnaoumov/typescript-dev-toolkit), [`@mnaoumov/obsidian-lib`](https://github.com/mnaoumov/obsidian-lib) and [`@mnaoumov/obsidian-dev-toolkit`](https://github.com/mnaoumov/obsidian-dev-toolkit). It depends on [`@mnaoumov/typescript-lib`](https://github.com/mnaoumov/typescript-lib). It moved here from that repository with its history.
18
18
 
19
+ ## Filing an issue (for AI agents and humans)
20
+
21
+ Open issues through the [issue forms](https://github.com/mnaoumov/typescript-dev-toolkit/issues/new/choose), not as blank issues.
22
+
23
+ Filing from the CLI or the API (`gh issue create --body`, or an AI agent filing for you) skips the form, and `gh issue create --template` cannot load an issue form. In that case, open the matching form in [`.github/ISSUE_TEMPLATE/`](https://github.com/mnaoumov/typescript-dev-toolkit/tree/HEAD/.github/ISSUE_TEMPLATE), copy every field as a `### <label>` heading in the form's order, and fill in each one. Always state the version you used and your operating system.
24
+
19
25
  ## License
20
26
 
21
27
  © [Michael Naumov](https://github.com/mnaoumov/)
@@ -141,7 +141,16 @@ function memberHref(memberSlugString, inheritedFrom, allTypes, currentNamespace)
141
141
  if (!inheritedFrom) {
142
142
  return `./${memberSlugString}/`;
143
143
  }
144
- const parentInfo = findType(allTypes, inheritedFrom, currentNamespace);
144
+ let parentInfo = findType(allTypes, inheritedFrom, currentNamespace);
145
+ const visited = /* @__PURE__ */ new Set();
146
+ while (parentInfo && !doesMemberPageExist(parentInfo.namespace, parentInfo.name, memberSlugString)) {
147
+ if (visited.has(parentInfo)) {
148
+ return "";
149
+ }
150
+ visited.add(parentInfo);
151
+ const member = parentInfo.properties.find((property) => (0, import_api_doc_text_utils.memberRouteSegment)(property.name) === memberSlugString) ?? parentInfo.methods.find((method) => (0, import_api_doc_text_utils.overloadRouteSegment)(method.overloadKey) === memberSlugString);
152
+ parentInfo = member?.inheritedFrom ? findType(allTypes, member.inheritedFrom, parentInfo.namespace) : void 0;
153
+ }
145
154
  if (!parentInfo || !doesMemberPageExist(parentInfo.namespace, parentInfo.name, memberSlugString)) {
146
155
  return "";
147
156
  }
@@ -374,4 +383,4 @@ function warnMemberSlugCollisions(info, namespace) {
374
383
  typeHref,
375
384
  typeLink
376
385
  });
377
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvYXBpLWRvYy1saW5rLXJlbmRlcmluZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVHlwZS1saW5rIHJlbmRlcmluZzogdHVybnMgdHlwZSB0ZXh0IGFuZCBpbmxpbmUgbGluayB0YWdzIGludG8gbWFya2Rvd24gbGlua3MgdG8gZ2VuZXJhdGVkIHBhZ2VzXG4gKiBvciBleHRlcm5hbCByZWZlcmVuY2VzIChUeXBlU2NyaXB0IGhhbmRib29rLCBNRE4gV2ViIEFQSSwgSlMgZ2xvYmFscykuXG4gKi9cblxuaW1wb3J0IHtcbiAgZ2V0TWFuZGF0b3J5TmFtZWRHcm91cCxcbiAgZ2V0T3B0aW9uYWxOYW1lZEdyb3VwXG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9yZWctZXhwJztcbmltcG9ydCB7IHJlYWRGaWxlU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgVHlwZUluZm8sXG4gIFdlYkFwaUVudHJ5XG59IGZyb20gJy4vYXBpLWRvYy10eXBlcy50cyc7XG5cbmltcG9ydCB7XG4gIEdFTkVSSUNfVFlQRV9QQVJBTVMsXG4gIFRTX0dMT0JBTF9UWVBFUyxcbiAgVFNfUFJJTUlUSVZFX1RZUEVTLFxuICBUU19VVElMSVRZX1RZUEVTXG59IGZyb20gJy4vYXBpLWRvYy1jb25zdGFudHMudHMnO1xuaW1wb3J0IHsgZ2V0UGFja2FnZVR5cGVVcmwgfSBmcm9tICcuL2FwaS1kb2MtcGFja2FnZS1zaXRlcy50cyc7XG5pbXBvcnQge1xuICB0b1JvdXRlU2VnbWVudCxcbiAgdG9Sb3V0ZVNlZ21lbnRQcmVzZXJ2ZUNhc2Vcbn0gZnJvbSAnLi9hcGktZG9jLXJvdXRlLXNlZ21lbnRzLnRzJztcbmltcG9ydCB7IGdldEFwaURvY1NldHRpbmdzIH0gZnJvbSAnLi9hcGktZG9jLXNldHRpbmdzLnRzJztcbmltcG9ydCB7XG4gIGVzY2FwZU1keEFuZ2xlQnJhY2tldHMsXG4gIGVzY2FwZU1keFByb3NlLFxuICBnZXROYW1lc3BhY2VEaXJlY3RvcnksXG4gIG1lbWJlclJvdXRlU2VnbWVudCxcbiAgbWVtYmVyU2x1ZyxcbiAgb3ZlcmxvYWRSb3V0ZVNlZ21lbnQsXG4gIG92ZXJsb2FkU2x1ZyxcbiAgcmVwbGFjZVJlZ0V4cE1hdGNoZXMsXG4gIHNlZ21lbnRNYXJrZG93blxufSBmcm9tICcuL2FwaS1kb2MtdGV4dC11dGlscy50cyc7XG5cbi8qKlxuTG9hZGVkIGZyb20gdHlwZWRvYy1wbHVnaW4tbWRuLWxpbmtzIGRhdGEgYXQgcnVudGltZVxuICovXG4vKipcbk1vZHVsZS1sZXZlbCBtdXRhYmxlIHN0YXRlLCBoZWxkIGluIG9uZSBvYmplY3Qgc28gZWFjaCBtdXRhdGlvbiBuYW1lcyBpdCBleHBsaWNpdGx5LlxuICovXG5pbnRlcmZhY2UgTW9kdWxlU3RhdGUge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9yZWFkb25seS1pbnRlcmZhY2UtbWVtYmVycyAtLSBUaGUgV2ViIEFQSSBtZXRhZGF0YSBjYWNoZSBpcyByZXBsYWNlZCBhZnRlciBsb2FkaW5nLlxuICB3ZWJBcGlUeXBlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbmNvbnN0IG1vZHVsZVN0YXRlOiBNb2R1bGVTdGF0ZSA9IHtcbiAgd2ViQXBpVHlwZXM6IHt9XG59O1xuLyoqXG5Mb3dlcmNhc2VkLCBjb2xsaXNpb24tZGlzYW1iaWd1YXRlZCBPTi1ESVNLIHNlZ21lbnQgcGVyIHF1YWxpZmllZCB0eXBlIGtleSAoYCR7bmFtZXNwYWNlfSMke25hbWV9YCkuXG4gKi9cbmNvbnN0IHR5cGVGaWxlU2VnbWVudHMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuLyoqXG5DYXNlLXByZXNlcnZlZCBVUkwvcm91dGUgc2VnbWVudCBwZXIgcXVhbGlmaWVkIHR5cGUga2V5IChgJHtuYW1lc3BhY2V9IyR7bmFtZX1gKS5cbiAqL1xuY29uc3QgdHlwZVJvdXRlU2VnbWVudHMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuXG4vKipcbiAqIFJvdXRlLXNlZ21lbnQga2V5cyBvZiB0aGUgbWVtYmVyIHBhZ2VzIHRoYXQgYGdlbmVyYXRlTWVtYmVyUGFnZXNgIHdpbGwgYWN0dWFsbHkgZW1pdCwgYXNcbiAqIGAke25hbWVzcGFjZX0jJHtUeXBlTmFtZX0jJHtyb3V0ZVNlZ21lbnR9YC4gT25seSBOT04taW5oZXJpdGVkIHByb3BlcnRpZXMgYW5kIG5vbi1pbmhlcml0ZWQgbWV0aG9kXG4gKiBvdmVybG9hZCBrZXlzIGdldCBhIHBhZ2UsIHNvIHRoaXMgbGV0cyBsaW5rIGVtaXR0ZXJzIGF2b2lkIHBvaW50aW5nIGF0IGEgbWVtYmVyIHBhZ2UgdGhhdCBpcyBuZXZlclxuICogZ2VuZXJhdGVkIChhbiBpbmhlcml0ZWQgbWVtYmVyLCBhbiBlbnVtIG1lbWJlciwgYW4gb3B0aW9ucy1pbnRlcmZhY2UgbWVtYmVyKSDigJQgd2hpY2ggd291bGQgNDA0LlxuICovXG5jb25zdCBnZW5lcmF0ZWRNZW1iZXJQYWdlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4vKipcbiAqIFdoZXRoZXIgYSBtZW1iZXIgcGFnZSB3aWxsIGJlIGdlbmVyYXRlZCBmb3IgYHJvdXRlU2VnbWVudGAgb24gdGhlIGdpdmVuIHR5cGUuXG4gKlxuICogQHBhcmFtIG5hbWVzcGFjZSAtIFRoZSB0eXBlJ3MgbmFtZXNwYWNlLlxuICogQHBhcmFtIHR5cGVOYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHBhcmFtIHJvdXRlU2VnbWVudCAtIFRoZSBtZW1iZXIncyByb3V0ZSBzZWdtZW50LlxuICogQHJldHVybnMgV2hldGhlciB0aGUgcGFnZSBpcyBnZW5lcmF0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkb2VzTWVtYmVyUGFnZUV4aXN0KG5hbWVzcGFjZTogc3RyaW5nLCB0eXBlTmFtZTogc3RyaW5nLCByb3V0ZVNlZ21lbnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gZ2VuZXJhdGVkTWVtYmVyUGFnZXMuaGFzKGAke25hbWVzcGFjZX0jJHt0eXBlTmFtZX0jJHtyb3V0ZVNlZ21lbnR9YCk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIGJhcmUgdHlwZSBuYW1lIHRvIGEgZG9jdW1lbnRlZCBgVHlwZUluZm9gLlxuICpcbiAqIFRoZSBtb2RlbCBtYXAgaXMga2V5ZWQgYnkgYSBxdWFsaWZpZWQgYCR7bmFtZXNwYWNlfSMke25hbWV9YCBpZGVudGl0eSwgYmVjYXVzZSBhIHBhY2thZ2VcbiAqIGNhbiBleHBvcnQgdGhlIHNhbWUgc2ltcGxlIG5hbWUgZnJvbSBkaWZmZXJlbnQgbW9kdWxlcy4gUmVzb2x1dGlvbiBpcyBiZXN0LWVmZm9ydDpcbiAqICAgMS4gUHJlZmVyIGEgdHlwZSBpbiBgY3VycmVudE5hbWVzcGFjZWAgKHRoZSByZWZlcmVuY2luZyBwYWdlJ3MgbW9kdWxlKS5cbiAqICAgMi4gT3RoZXJ3aXNlLCBpZiBleGFjdGx5IG9uZSB0eXBlIGFjcm9zcyBhbGwgbW9kdWxlcyBoYXMgdGhhdCBiYXJlIG5hbWUsIHVzZSBpdC5cbiAqICAgMy4gSWYgdGhlIGJhcmUgbmFtZSBpcyBhbWJpZ3VvdXMgKG11bHRpcGxlIG1vZHVsZXMpLCBnaXZlIHVwIChjYWxsZXIgcmVuZGVycyBwbGFpbiBjb2RlKS5cbiAqXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSB0eXBlJ3MgbmFtZS5cbiAqIEBwYXJhbSBjdXJyZW50TmFtZXNwYWNlIC0gVGhlIG5hbWVzcGFjZSBvZiB0aGUgcmVmZXJlbmNpbmcgcGFnZSwgcHJlZmVycmVkIHdoZW4gdGhlIG5hbWUgaXMgYW1iaWd1b3VzLlxuICogQHJldHVybnMgVGhlIHR5cGUsIG9yIGB1bmRlZmluZWRgIHdoZW4gbm8gdHlwZSBvciBtb3JlIHRoYW4gb25lIGhhcyB0aGF0IG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kVHlwZShhbGxUeXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+LCBuYW1lOiBzdHJpbmcsIGN1cnJlbnROYW1lc3BhY2U/OiBzdHJpbmcpOiBUeXBlSW5mbyB8IHVuZGVmaW5lZCB7XG4gIGlmIChjdXJyZW50TmFtZXNwYWNlICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBxdWFsaWZpZWQgPSBhbGxUeXBlcy5nZXQoYCR7Y3VycmVudE5hbWVzcGFjZX0jJHtuYW1lfWApO1xuICAgIGlmIChxdWFsaWZpZWQpIHtcbiAgICAgIHJldHVybiBxdWFsaWZpZWQ7XG4gICAgfVxuICB9XG4gIGxldCBmb3VuZDogVHlwZUluZm8gfCB1bmRlZmluZWQ7XG4gIGxldCBtYXRjaENvdW50ID0gMDtcbiAgZm9yIChjb25zdCBpbmZvIG9mIGFsbFR5cGVzLnZhbHVlcygpKSB7XG4gICAgaWYgKGluZm8ubmFtZSAhPT0gbmFtZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgZm91bmQgPSBpbmZvO1xuICAgIG1hdGNoQ291bnQrKztcbiAgICBpZiAobWF0Y2hDb3VudCA+IDEpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBtYXRjaENvdW50ID09PSAxID8gZm91bmQgOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogTGluayBhIGJhc2UgdHlwZSBleHByZXNzaW9uIGZvciB0aGUgXCJFeHRlbmRzOlwiIGxpbmUuXG4gKiBTaW1wbGUgdHlwZSByZWZlcmVuY2VzIChpZGVudGlmaWVyICsgb3B0aW9uYWwgZ2VuZXJpY3MpIHVzZSByZW5kZXJUeXBlV2l0aExpbmtzXG4gKiBzbyBlYWNoIHR5cGUgYXJndW1lbnQgZ2V0cyBpdHMgb3duIGxpbmsuXG4gKiBDb21wbGV4IGV4cHJlc3Npb25zIChvYmplY3QgdHlwZXMsIGludGVyc2VjdGlvbnMsIGV0Yy4pIGZhbGwgYmFjayB0byB0eXBlTGlua1xuICogdG8gYXZvaWQgTURYIHBhcnNpbmcgaXNzdWVzIHdpdGggYHtgLCBgfWAsIGB8YCBldGMuXG4gKlxuICogQHBhcmFtIHR5cGVOYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICogQHBhcmFtIGN1cnJlbnROYW1lc3BhY2UgLSBUaGUgbmFtZXNwYWNlIG9mIHRoZSByZWZlcmVuY2luZyBwYWdlLCBwcmVmZXJyZWQgd2hlbiB0aGUgbmFtZSBpcyBhbWJpZ3VvdXMuXG4gKiBAcmV0dXJucyBUaGUgbGlua2VkIHR5cGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsaW5rQmFzZVR5cGUodHlwZU5hbWU6IHN0cmluZywgYWxsVHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPiwgY3VycmVudE5hbWVzcGFjZT86IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGlzU2ltcGxlVHlwZVJlZiA9IC9eW2EtekEtWl1bYS16QS1aMC05XSooPzo8Lio+KT8kLy50ZXN0KHR5cGVOYW1lLnRyaW0oKSk7XG4gIHJldHVybiBpc1NpbXBsZVR5cGVSZWYgPyBlc2NhcGVNZHhBbmdsZUJyYWNrZXRzKHJlbmRlclR5cGVXaXRoTGlua3ModHlwZU5hbWUsIGFsbFR5cGVzLCB1bmRlZmluZWQsIGN1cnJlbnROYW1lc3BhY2UpKSA6IHR5cGVMaW5rKHR5cGVOYW1lLCBhbGxUeXBlcywgY3VycmVudE5hbWVzcGFjZSk7XG59XG5cbi8qKlxuICogTG9hZHMgdGhlIFdlYiBBUEkgbGlua3MgYHR5cGVkb2MtcGx1Z2luLW1kbi1saW5rc2Agc2hpcHMsIGlmIGl0IGlzIGluc3RhbGxlZC4gV2l0aG91dCBpdCwgV2ViIEFQSSB0eXBlcyByZW5kZXJcbiAqIHVubGlua2VkLlxuICpcbiAqIEBwYXJhbSByb290RGlyZWN0b3J5IC0gVGhlIGZvbGRlciB3aG9zZSBgbm9kZV9tb2R1bGVzYCBob2xkcyB0aGUgcGFja2FnZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRFeHRlcm5hbFR5cGVNYXBzKHJvb3REaXJlY3Rvcnk6IHN0cmluZyk6IHZvaWQge1xuICB0cnkge1xuICAgIGNvbnN0IGRhdGFQYXRoID0gam9pbihyb290RGlyZWN0b3J5LCAnbm9kZV9tb2R1bGVzL3R5cGVkb2MtcGx1Z2luLW1kbi1saW5rcy9kYXRhL3dlYi1hcGkuanNvbicpO1xuICAgIG1vZHVsZVN0YXRlLndlYkFwaVR5cGVzID0gSlNPTi5wYXJzZShyZWFkRmlsZVN5bmMoZGF0YVBhdGgsICd1dGYtOCcpKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjb25zb2xlLndhcm4oYExvYWRlZCAke1N0cmluZyhPYmplY3Qua2V5cyhtb2R1bGVTdGF0ZS53ZWJBcGlUeXBlcykubGVuZ3RoKX0gV2ViIEFQSSB0eXBlIGxpbmtzYCk7XG4gIH0gY2F0Y2gge1xuICAgIG1vZHVsZVN0YXRlLndlYkFwaVR5cGVzID0ge307XG4gICAgY29uc29sZS53YXJuKCd0eXBlZG9jLXBsdWdpbi1tZG4tbGlua3MgZGF0YSBub3QgZm91bmQg4oCUIFdlYiBBUEkgbGlua3Mgd2lsbCBiZSB1bmF2YWlsYWJsZS4nKTtcbiAgfVxufVxuXG4vKipcbiAqIENvbnZlcnQgaW5saW5lIG1hcmtkb3duIHRvIEhUTUwgZm9yIHVzZSBpbiBjb21wb25lbnQgcHJvcHMgd2l0aCBzZXQ6aHRtbFxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQuXG4gKiBAcmV0dXJucyBUaGUgSFRNTC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hcmtkb3duVG9IdG1sKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGVzY2FwZWQgPSB0ZXh0XG4gICAgLnJlcGxhY2VBbGwoJyYnLCAnJmFtcDsnKVxuICAgIC5yZXBsYWNlQWxsKCc8JywgJyZsdDsnKVxuICAgIC5yZXBsYWNlQWxsKCc+JywgJyZndDsnKTtcbiAgcmV0dXJuIHJlcGxhY2VSZWdFeHBNYXRjaGVzKGVzY2FwZWQsIC9cXFsoPzx0ZXh0PlteXFxdXSspXFxdXFwoKD88dXJsPlteKV0rKVxcKS9nLCAobWF0Y2gpID0+IHtcbiAgICBjb25zdCBsaW5rVGV4dCA9IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICd0ZXh0Jyk7XG4gICAgY29uc3QgdXJsID0gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ3VybCcpO1xuICAgIC8vIEEgcmVsYXRpdmUgVVJMIGhlcmUgaXMgYW4gaWxsdXN0cmF0aXZlIGV4YW1wbGUgcGF0aCBpbiBUU0RvYyAoZS5nLiBgW2Zvb10oZm9vLnBuZylgKSwgbm90IGFcbiAgICAvLyByZWFsIG5hdmlnYWJsZSBsaW5rIOKAlCByZW5kZXIgaXQgYXMgbGl0ZXJhbCBpbmxpbmUgY29kZSBzbyBpdCBuZWl0aGVyIDQwNHMgbm9yIGxvc2VzIG1lYW5pbmcuXG4gICAgcmV0dXJuIC9eKD86aHR0cHM/OlxcL1xcL3xcXC98I3xtYWlsdG86KS8udGVzdCh1cmwpID8gYDxhIGhyZWY9XCIke3VybH1cIj4ke2xpbmtUZXh0fTwvYT5gIDogYDxjb2RlPlske2xpbmtUZXh0fV0oJHt1cmx9KTwvY29kZT5gO1xuICB9KVxuICAgIC5yZXBsYWNlQWxsKC9gKD88Y29kZT5bXmBdKylgL2csICc8Y29kZT4kPGNvZGU+PC9jb2RlPicpXG4gICAgLnJlcGxhY2VBbGwoJ1xcbicsICc8YnIvPicpO1xufVxuXG4vKipcbiAqIEJ1aWxkIHRoZSBocmVmIGZvciBhIG1lbWJlciwgcG9pbnRpbmcgdG8gdGhlIHBhcmVudCB0eXBlJ3MgcGFnZSBpZiBpbmhlcml0ZWRcbiAqXG4gKiBAcGFyYW0gbWVtYmVyU2x1Z1N0cmluZyAtIFRoZSBtZW1iZXIncyByb3V0ZSBzZWdtZW50LlxuICogQHBhcmFtIGluaGVyaXRlZEZyb20gLSBUaGUgbmFtZSBvZiB0aGUgdHlwZSB0aGUgbWVtYmVyIGlzIGluaGVyaXRlZCBmcm9tLCBvciBhbiBlbXB0eSBzdHJpbmcgZm9yIGFuIG93biBtZW1iZXIuXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKiBAcGFyYW0gY3VycmVudE5hbWVzcGFjZSAtIFRoZSBuYW1lc3BhY2Ugb2YgdGhlIHJlZmVyZW5jaW5nIHBhZ2UsIHByZWZlcnJlZCB3aGVuIHRoZSBuYW1lIGlzIGFtYmlndW91cy5cbiAqIEByZXR1cm5zIFRoZSBsaW5rLCBvciBhbiBlbXB0eSBzdHJpbmcgd2hlbiBubyBwYWdlIGRvY3VtZW50cyB0aGUgbWVtYmVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVtYmVySHJlZihtZW1iZXJTbHVnU3RyaW5nOiBzdHJpbmcsIGluaGVyaXRlZEZyb206IHN0cmluZywgYWxsVHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPiwgY3VycmVudE5hbWVzcGFjZT86IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghaW5oZXJpdGVkRnJvbSkge1xuICAgIC8vIE93biAobm9uLWluaGVyaXRlZCkgbWVtYmVyIOKAlCBgZ2VuZXJhdGVNZW1iZXJQYWdlc2AgYWx3YXlzIGVtaXRzIGl0cyBwYWdlIG9uIHRoaXMgc2FtZSBwYWdlLlxuICAgIHJldHVybiBgLi8ke21lbWJlclNsdWdTdHJpbmd9L2A7XG4gIH1cbiAgY29uc3QgcGFyZW50SW5mbyA9IGZpbmRUeXBlKGFsbFR5cGVzLCBpbmhlcml0ZWRGcm9tLCBjdXJyZW50TmFtZXNwYWNlKTtcbiAgaWYgKCFwYXJlbnRJbmZvIHx8ICFkb2VzTWVtYmVyUGFnZUV4aXN0KHBhcmVudEluZm8ubmFtZXNwYWNlLCBwYXJlbnRJbmZvLm5hbWUsIG1lbWJlclNsdWdTdHJpbmcpKSB7XG4gICAgLy8gVGhlIGRlY2xhcmluZyBwYXJlbnQgaGFzIG5vIGdlbmVyYXRlZCBwYWdlIGZvciB0aGlzIG1lbWJlciAoaXQgaW5oZXJpdGVkIHRoZSBtZW1iZXIgdG9vLCBvciBpc1xuICAgIC8vIHVuZG9jdW1lbnRlZCkuIFJldHVybiBubyBocmVmIHNvIHRoZSBjYWxsZXIgcmVuZGVycyBwbGFpbiB0ZXh0IGluc3RlYWQgb2YgYSBicm9rZW4gbGluay5cbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgY29uc3QgcGFyZW50TnNEaXJlY3RvcnkgPSBnZXROYW1lc3BhY2VEaXJlY3RvcnkocGFyZW50SW5mby5uYW1lc3BhY2UpO1xuICByZXR1cm4gYCR7Z2V0QmFzZVBhdGgoKX0vYXBpLyR7cGFyZW50TnNEaXJlY3Rvcnl9LyR7dG9UeXBlUm91dGVTZWdtZW50KHBhcmVudEluZm8ubmFtZXNwYWNlLCBwYXJlbnRJbmZvLm5hbWUpfS8ke21lbWJlclNsdWdTdHJpbmd9L2A7XG59XG5cbi8qKlxuICogUG9wdWxhdGUge0BsaW5rIGRvZXNNZW1iZXJQYWdlRXhpc3R9LiBNaXJyb3JzIGBnZW5lcmF0ZU1lbWJlclBhZ2VzYCdzIG93biBmaWx0ZXJpbmcgZXhhY3RseSAob25lIHBhZ2VcbiAqIHBlciBub24taW5oZXJpdGVkIHByb3BlcnR5LCBvbmUgcGVyIG5vbi1pbmhlcml0ZWQgbWV0aG9kIG92ZXJsb2FkIGtleSkuIE11c3QgcnVuIG9uY2UgYmVmb3JlIGFueVxuICogbGluayBpcyByZW5kZXJlZC5cbiAqXG4gKiBAcGFyYW0gdHlwZXMgLSBUaGUgZG9jdW1lbnRlZCB0eXBlcywga2V5ZWQgYnkgcXVhbGlmaWVkIGlkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJNZW1iZXJQYWdlcyh0eXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+KTogdm9pZCB7XG4gIGdlbmVyYXRlZE1lbWJlclBhZ2VzLmNsZWFyKCk7XG4gIGZvciAoY29uc3QgaW5mbyBvZiB0eXBlcy52YWx1ZXMoKSkge1xuICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgaW5mby5wcm9wZXJ0aWVzKSB7XG4gICAgICBpZiAoIXByb3BlcnR5LmluaGVyaXRlZEZyb20pIHtcbiAgICAgICAgZ2VuZXJhdGVkTWVtYmVyUGFnZXMuYWRkKGAke2luZm8ubmFtZXNwYWNlfSMke2luZm8ubmFtZX0jJHttZW1iZXJSb3V0ZVNlZ21lbnQocHJvcGVydHkubmFtZSl9YCk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG92ZXJsb2FkS2V5cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGZvciAoY29uc3QgbWV0aG9kIG9mIGluZm8ubWV0aG9kcykge1xuICAgICAgaWYgKCFtZXRob2QuaW5oZXJpdGVkRnJvbSkge1xuICAgICAgICBvdmVybG9hZEtleXMuYWRkKG1ldGhvZC5vdmVybG9hZEtleSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3Qgb3ZlcmxvYWRLZXkgb2Ygb3ZlcmxvYWRLZXlzKSB7XG4gICAgICBnZW5lcmF0ZWRNZW1iZXJQYWdlcy5hZGQoYCR7aW5mby5uYW1lc3BhY2V9IyR7aW5mby5uYW1lfSMke292ZXJsb2FkUm91dGVTZWdtZW50KG92ZXJsb2FkS2V5KX1gKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBGb3IgZXZlcnkgZG9jdW1lbnRlZCB0eXBlIGFzc2lnbiBCT1RIOlxuICogIC0gYSBsb3dlcmNhc2VkLCBudW1lcmljYWxseS1kaXNhbWJpZ3VhdGVkIEZJTEUgc2VnbWVudCAoc28gYFR5cGVBc3NlcnRlcmAgdnMgYHR5cGVBc3NlcnRlcmAsIHdoaWNoXG4gKiAgICBib3RoIGxvd2VyY2FzZSB0byBgdHlwZWFzc2VydGVyYCwgYmVjb21lIGB0eXBlYXNzZXJ0ZXJgIC8gYHR5cGVhc3NlcnRlci0yYCBvbiBkaXNrIGFuZCBuZXZlclxuICogICAgY29sbGlkZSBvbiBXaW5kb3dzJyBjYXNlLWluc2Vuc2l0aXZlIGZpbGVzeXN0ZW0pLCBhbmRcbiAqICAtIGEgY2FzZS1QUkVTRVJWRUQgUk9VVEUgc2VnbWVudCAoYFR5cGVBc3NlcnRlcmAgLyBgdHlwZUFzc2VydGVyYCkgdXNlZCBmb3IgdGhlIGV4cGxpY2l0IGBzbHVnOmBcbiAqICAgIGZyb250bWF0dGVyIGFuZCBldmVyeSBpbnRlcm5hbCBsaW5rLCBzbyB0aGUgVVJMcyBzdGF5IHByZXR0eSBhbmQgbmF0dXJhbGx5IGRpc3RpbmN0LlxuICogVGhlIHJvdXRlIGRlY291cGxlcyBmcm9tIHRoZSBmaWxlIHBhdGggdmlhIHRoZSBgc2x1ZzpgIGZyb250bWF0dGVyLCBzbyBubyBgLTJgIHN1ZmZpeCBsZWFrcyBpbnRvXG4gKiBVUkxzLiBBbHNvIHdhcm5zIGFib3V0IG1lbWJlci1zbHVnIGNvbGxpc2lvbnMgd2l0aGluIGEgdHlwZS4gTXVzdCBydW4gb25jZSBiZWZvcmUgYW55IHBhZ2UvbGluay5cbiAqXG4gKiBAcGFyYW0gdHlwZXMgLSBUaGUgZG9jdW1lbnRlZCB0eXBlcywga2V5ZWQgYnkgcXVhbGlmaWVkIGlkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJSb3V0ZVNlZ21lbnRzKHR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4pOiB2b2lkIHtcbiAgdHlwZUZpbGVTZWdtZW50cy5jbGVhcigpO1xuICB0eXBlUm91dGVTZWdtZW50cy5jbGVhcigpO1xuICBjb25zdCBieU5hbWVzcGFjZSA9IG5ldyBNYXA8c3RyaW5nLCBUeXBlSW5mb1tdPigpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9wcmVmZXItZ3JvdXAtYnkgLS0gYE1hcC5ncm91cEJ5YCBpcyBFUzIwMjQsIGFuZCB0aGUgc2hhcmVkIGB0c2NvbmZpZy5qc29uYCB0eXBlcyBvbmx5IEVTMjAyMi5cbiAgZm9yIChjb25zdCBpbmZvIG9mIHR5cGVzLnZhbHVlcygpKSB7XG4gICAgY29uc3QgbGlzdCA9IGJ5TmFtZXNwYWNlLmdldChpbmZvLm5hbWVzcGFjZSkgPz8gW107XG4gICAgbGlzdC5wdXNoKGluZm8pO1xuICAgIGJ5TmFtZXNwYWNlLnNldChpbmZvLm5hbWVzcGFjZSwgbGlzdCk7XG4gIH1cbiAgZm9yIChjb25zdCBbbmFtZXNwYWNlLCBpbmZvc10gb2YgYnlOYW1lc3BhY2UpIHtcbiAgICBjb25zdCB1c2VkRmlsZVNlZ21lbnRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3QgdXNlZFJvdXRlU2VnbWVudHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBjb25zdCBzb3J0ZWQgPSBbLi4uaW5mb3NdLnNvcnQoKGFscGhhLCBicmF2bykgPT4gYWxwaGEubmFtZS5sb2NhbGVDb21wYXJlKGJyYXZvLm5hbWUpKTtcbiAgICBmb3IgKGNvbnN0IGluZm8gb2Ygc29ydGVkKSB7XG4gICAgICB0eXBlRmlsZVNlZ21lbnRzLnNldChgJHtuYW1lc3BhY2V9IyR7aW5mby5uYW1lfWAsIGRpc2FtYmlndWF0ZSh0b1JvdXRlU2VnbWVudChpbmZvLm5hbWUpLCB1c2VkRmlsZVNlZ21lbnRzLCAoc2VnbWVudCkgPT4gc2VnbWVudCkpO1xuXG4gICAgICBjb25zdCByb3V0ZUJhc2UgPSB0b1JvdXRlU2VnbWVudFByZXNlcnZlQ2FzZShpbmZvLm5hbWUpO1xuICAgICAgLy8gRGlzYW1iaWd1YXRlIFJPVVRFUyBjYXNlLUlOU0VOU0lUSVZFTFk6IHRoZSBzbHVnIGJlY29tZXMgQXN0cm8ncyBvbi1kaXNrIG91dHB1dCBwYXRoLCBzb1xuICAgICAgLy8gYFR5cGVBc3NlcnRlcmAgYW5kIGB0eXBlQXNzZXJ0ZXJgIChzYW1lIG5hbWUgbW9kdWxvIGNhc2UpIHdvdWxkIGNvbGxpZGUgd2hlbiB0aGUgc2l0ZSBpcyBidWlsdFxuICAgICAgLy8gb24gYSBjYXNlLWluc2Vuc2l0aXZlIGZpbGVzeXN0ZW0gKFdpbmRvd3MvbWFjT1MpLCBzaWxlbnRseSBvdmVyd3JpdGluZyBvbmUgcGFnZSBzbyBldmVyeSBsaW5rXG4gICAgICAvLyB0byBpdCA0MDRzLiBDb21wYXJpbmcgbG93ZXJjYXNlZCBrZXlzIGZvcmNlcyB0aGUgc2Vjb25kIG9jY3VycmVuY2UgdG8gdGFrZSBhIGAtMmAgc3VmZml4LlxuICAgICAgY29uc3Qgcm91dGVTZWdtZW50ID0gZGlzYW1iaWd1YXRlKHJvdXRlQmFzZSwgdXNlZFJvdXRlU2VnbWVudHMsIChzZWdtZW50KSA9PiBzZWdtZW50LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgdHlwZVJvdXRlU2VnbWVudHMuc2V0KGAke25hbWVzcGFjZX0jJHtpbmZvLm5hbWV9YCwgcm91dGVTZWdtZW50KTtcbiAgICAgIGlmIChyb3V0ZVNlZ21lbnQgIT09IHJvdXRlQmFzZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oYERpc2FtYmlndWF0ZWQgUk9VVEUgZm9yIFwiJHtuYW1lc3BhY2V9IyR7aW5mby5uYW1lfVwiOiBcIiR7cm91dGVCYXNlfVwiIC0+IFwiJHtyb3V0ZVNlZ21lbnR9XCIgKHNsdWcgY29sbGlzaW9uKS5gKTtcbiAgICAgIH1cbiAgICAgIHdhcm5NZW1iZXJTbHVnQ29sbGlzaW9ucyhpbmZvLCBuYW1lc3BhY2UpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlbmRlciBhbiBgQGV4YW1wbGVgIGJsb2NrIGFzIE1EWC4gSWYgdGhlIGV4YW1wbGUgYWxyZWFkeSBjb250YWlucyBhIGZlbmNlZCBjb2RlIGJsb2NrLCBpdCBpc1xuICogbm9ybWFsaXplZCB0aHJvdWdoIHtAbGluayByZW5kZXJNZHhQcm9zZX0gKGNvZGUgcHJlc2VydmVkIHJhdywgc3Vycm91bmRpbmcgcHJvc2UgZXNjYXBlZCk7XG4gKiBvdGhlcndpc2UgdGhlIHJhdyBleGFtcGxlIHRleHQgaXMgd3JhcHBlZCBpbiBhIGB0c2AgY29kZSBmZW5jZSBzbyBpdCBpcyBlbWl0dGVkIGxpdGVyYWxseS5cbiAqXG4gKiBAcGFyYW0gZXhhbXBsZSAtIFRoZSBgQGV4YW1wbGVgIHRleHQuXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKiBAcGFyYW0gc2VsZk5hbWVzcGFjZSAtIFRoZSBuYW1lc3BhY2Ugb2YgdGhlIHBhZ2UgYmVpbmcgcmVuZGVyZWQsIHByZWZlcnJlZCB3aGVuIGEgbmFtZSBpcyBhbWJpZ3VvdXMuXG4gKiBAcmV0dXJucyBUaGUgTURYLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyRXhhbXBsZU1keChleGFtcGxlOiBzdHJpbmcsIGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4sIHNlbGZOYW1lc3BhY2U/OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gLyg/Ol58XFxuKVxccyooPzpgYGB8fn5+KS8udGVzdChleGFtcGxlKSA/IHJlbmRlck1keFByb3NlKGV4YW1wbGUsIGFsbFR5cGVzLCBzZWxmTmFtZXNwYWNlKSA6IGBcXGBcXGBcXGB0c1xcbiR7ZXhhbXBsZX1cXG5cXGBcXGBcXGBgO1xufVxuXG4vKipcbiAqIFJlbmRlciBtYXJrZG93biBibG9jayB0ZXh0IChhIGRlc2NyaXB0aW9uLCByZW1hcmtzLCBvciBtb2R1bGUgb3ZlcnZpZXcpIGFzIE1EWC1zYWZlIG1hcmtkb3duLlxuICogRmVuY2VkIGNvZGUgYmxvY2tzIGFyZSByZS1lbWl0dGVkIHZlcmJhdGltIChzdXJyb3VuZGVkIGJ5IGJsYW5rIGxpbmVzLCB3aXRoIGEgbGFuZ3VhZ2UpOyBwcm9zZVxuICogc2VnbWVudHMgaGF2ZSB0aGVpciBpbmxpbmUgbGluayB0YWdzIHJlc29sdmVkIGFuZCB0aGVpciBNRFgtdW5zYWZlIGNoYXJhY3RlcnMgZXNjYXBlZC5cbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0LlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICogQHBhcmFtIHNlbGZOYW1lc3BhY2UgLSBUaGUgbmFtZXNwYWNlIG9mIHRoZSBwYWdlIGJlaW5nIHJlbmRlcmVkLCBwcmVmZXJyZWQgd2hlbiBhIG5hbWUgaXMgYW1iaWd1b3VzLlxuICogQHJldHVybnMgVGhlIE1EWC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlck1keFByb3NlKHRleHQ6IHN0cmluZywgYWxsVHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPiwgc2VsZk5hbWVzcGFjZT86IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG91dDogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBzZWcgb2Ygc2VnbWVudE1hcmtkb3duKHRleHQpKSB7XG4gICAgaWYgKHNlZy50eXBlID09PSAnY29kZScpIHtcbiAgICAgIG91dC5wdXNoKCcnLCBgXFxgXFxgXFxgJHtzZWcubGFuZyB8fCAndHMnfWAsIHNlZy50ZXh0LCAnYGBgJywgJycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQucHVzaChlc2NhcGVNZHhQcm9zZShyZXNvbHZlTGlua3Moc2VnLnRleHQsIGFsbFR5cGVzLCBzZWxmTmFtZXNwYWNlKSkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0LmpvaW4oJ1xcbicpLnJlcGxhY2VBbGwoL1xcbnszLH0vZywgJ1xcblxcbicpLnRyaW0oKTtcbn1cblxuLyoqXG4gKiBSZW5kZXIgYSB0eXBlIHN0cmluZyB3aXRoIGNsaWNrYWJsZSBsaW5rcyBmb3Iga25vd24gdHlwZXNcbiAqXG4gKiBAcGFyYW0gdHlwZVRleHQgLSBUaGUgdHlwZSB0ZXh0LlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICogQHBhcmFtIHNlbGZUeXBlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB0eXBlIHRoZSBwYWdlIGRvY3VtZW50cywgd2hpY2ggYHRoaXNgIGxpbmtzIHRvLlxuICogQHBhcmFtIHNlbGZOYW1lc3BhY2UgLSBUaGUgbmFtZXNwYWNlIG9mIHRoZSBwYWdlIGJlaW5nIHJlbmRlcmVkLCBwcmVmZXJyZWQgd2hlbiBhIG5hbWUgaXMgYW1iaWd1b3VzLlxuICogQHJldHVybnMgVGhlIHR5cGUgdGV4dCB3aXRoIG1hcmtkb3duIGxpbmtzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyVHlwZVdpdGhMaW5rcyh0eXBlVGV4dDogc3RyaW5nLCBhbGxUeXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+LCBzZWxmVHlwZU5hbWU/OiBzdHJpbmcsIHNlbGZOYW1lc3BhY2U/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBQcmUtcGFzczogbGluayBPYmplY3QubWV0aG9kIHBhdHRlcm5zIHRvIE1ETiBiZWZvcmUgd29yZC1ieS13b3JkIGxpbmtpbmdcbiAgY29uc3QgTUROX09CSkVDVF9CQVNFID0gJ2h0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdCc7XG4gIGNvbnN0IHdpdGhPYmplY3RNZXRob2RzID0gcmVwbGFjZVJlZ0V4cE1hdGNoZXModHlwZVRleHQsIC9cXGJPYmplY3RcXC4oPzxtZXRob2Q+W2EtekEtWl1bYS16QS1aMC05XSopXFxiL2csIChtYXRjaCkgPT4ge1xuICAgIGNvbnN0IG1ldGhvZCA9IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICdtZXRob2QnKTtcbiAgICByZXR1cm4gYFtPYmplY3RdKCR7TUROX09CSkVDVF9CQVNFfSkuWyR7bWV0aG9kfV0oJHtNRE5fT0JKRUNUX0JBU0V9LyR7bWV0aG9kfSlgO1xuICB9KTtcbiAgLy8gTWFpbiBwYXNzOiBsaW5rIGluZGl2aWR1YWwgdHlwZSBuYW1lcywgc2tpcHBpbmcgdGV4dCBhbHJlYWR5IGluc2lkZSBtYXJrZG93biBsaW5rc1xuICByZXR1cm4gcmVwbGFjZVJlZ0V4cE1hdGNoZXMoXG4gICAgd2l0aE9iamVjdE1ldGhvZHMsXG4gICAgL1xcW1teXFxdXStcXF1cXChbXildK1xcKXxcXGIoPzx0eXBlTmFtZT5bYS16QS1aXVthLXpBLVowLTldKilcXGIvZyxcbiAgICAobWF0Y2gpID0+IHtcbiAgICAgIGNvbnN0IHR5cGVOYW1lID0gZ2V0T3B0aW9uYWxOYW1lZEdyb3VwKG1hdGNoLCAndHlwZU5hbWUnKTtcbiAgICAgIGlmICh0eXBlTmFtZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbWF0Y2hbMF07XG4gICAgICB9XG4gICAgICAvLyBMaW5rIGB0aGlzYCByZXR1cm4gdHlwZSB0byB0aGUgY3VycmVudCB0eXBlJ3MgcGFnZVxuICAgICAgaWYgKHR5cGVOYW1lID09PSAndGhpcycgJiYgc2VsZlR5cGVOYW1lKSB7XG4gICAgICAgIGNvbnN0IHNlbGZJbmZvID0gZmluZFR5cGUoYWxsVHlwZXMsIHNlbGZUeXBlTmFtZSwgc2VsZk5hbWVzcGFjZSk7XG4gICAgICAgIGlmIChzZWxmSW5mbykge1xuICAgICAgICAgIHJldHVybiBgWyR7dHlwZU5hbWV9XSgke3R5cGVIcmVmKHNlbGZJbmZvKX0pYDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTa2lwIGdlbmVyaWMgdHlwZSBwYXJhbWV0ZXJzXG4gICAgICBpZiAoR0VORVJJQ19UWVBFX1BBUkFNUy5oYXModHlwZU5hbWUpKSB7XG4gICAgICAgIHJldHVybiB0eXBlTmFtZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgb3VyIG93biB0eXBlcyBmaXJzdFxuICAgICAgY29uc3QgaW5mbyA9IGZpbmRUeXBlKGFsbFR5cGVzLCB0eXBlTmFtZSwgc2VsZk5hbWVzcGFjZSk7XG4gICAgICBpZiAoaW5mbykge1xuICAgICAgICByZXR1cm4gYFske3R5cGVOYW1lfV0oJHt0eXBlSHJlZihpbmZvKX0pYDtcbiAgICAgIH1cblxuICAgICAgLy8gQSB0eXBlIGFub3RoZXIgZG9jdW1lbnRlZCBwYWNrYWdlIGRlY2xhcmVzLCBvciBvbmUgdGhlIHNpdGUgbWFwcyBpdHNlbGZcbiAgICAgIGNvbnN0IGV4dGVybmFsVXJsID0gcmVzb2x2ZUV4dGVybmFsVHlwZVVybCh0eXBlTmFtZSk7XG4gICAgICBpZiAoZXh0ZXJuYWxVcmwpIHtcbiAgICAgICAgcmV0dXJuIGBbJHt0eXBlTmFtZX1dKCR7ZXh0ZXJuYWxVcmx9KWA7XG4gICAgICB9XG5cbiAgICAgIC8vIFR5cGVTY3JpcHQgdXRpbGl0eSB0eXBlc1xuICAgICAgY29uc3QgdHNVcmwgPSByZXNvbHZlVHNVdGlsaXR5VXJsKHR5cGVOYW1lKTtcbiAgICAgIGlmICh0c1VybCkge1xuICAgICAgICByZXR1cm4gYFske3R5cGVOYW1lfV0oJHt0c1VybH0pYDtcbiAgICAgIH1cblxuICAgICAgLy8gSlMgZ2xvYmFsIHR5cGVzIChBcnJheSwgUHJvbWlzZSwgTWFwLCBldGMuKVxuICAgICAgY29uc3QgZ2xvYmFsVXJsID0gT2JqZWN0Lmhhc093bihUU19HTE9CQUxfVFlQRVMsIHR5cGVOYW1lKSA/IFRTX0dMT0JBTF9UWVBFU1t0eXBlTmFtZV0gOiB1bmRlZmluZWQ7XG4gICAgICBpZiAoZ2xvYmFsVXJsKSB7XG4gICAgICAgIHJldHVybiBgWyR7dHlwZU5hbWV9XSgke2dsb2JhbFVybH0pYDtcbiAgICAgIH1cblxuICAgICAgLy8gV2ViIEFQSSAvIE1ETiB0eXBlc1xuICAgICAgY29uc3QgbWRuVXJsID0gcmVzb2x2ZVdlYkFwaVVybCh0eXBlTmFtZSk7XG4gICAgICBpZiAobWRuVXJsKSB7XG4gICAgICAgIHJldHVybiBgWyR7dHlwZU5hbWV9XSgke21kblVybH0pYDtcbiAgICAgIH1cblxuICAgICAgLy8gVHlwZVNjcmlwdCBwcmltaXRpdmUgdHlwZXNcbiAgICAgIGNvbnN0IHByaW1pdGl2ZVVybCA9IE9iamVjdC5oYXNPd24oVFNfUFJJTUlUSVZFX1RZUEVTLCB0eXBlTmFtZSkgPyBUU19QUklNSVRJVkVfVFlQRVNbdHlwZU5hbWVdIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHByaW1pdGl2ZVVybCA/IGBbJHt0eXBlTmFtZX1dKCR7cHJpbWl0aXZlVXJsfSlgIDogdHlwZU5hbWU7XG4gICAgfVxuICApO1xufVxuXG4vKipcbiAqIFJlc29sdmUgYSB0eXBlIG5vIHBhZ2Ugb2YgdGhpcyBzaXRlIGRvY3VtZW50cyB0byB0aGUgcGFnZSB0aGF0IGRvZXM6IGFub3RoZXIgZG9jdW1lbnRlZCBwYWNrYWdlJ3Mgc2l0ZSwgb3IgYW5cbiAqIGVudHJ5IG9mIHRoZSBzaXRlJ3Mgb3duIGBleHRlcm5hbFR5cGVMaW5rc2Agc2V0dGluZy5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSB0eXBlJ3MgbmFtZS5cbiAqIEByZXR1cm5zIFRoZSBVUkwsIG9yIGB1bmRlZmluZWRgIHdoZW4gbmVpdGhlciBrbm93cyB0aGUgdHlwZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVFeHRlcm5hbFR5cGVVcmwobmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGdldFBhY2thZ2VUeXBlVXJsKG5hbWUpID8/IGdldEFwaURvY1NldHRpbmdzKCkuZXh0ZXJuYWxUeXBlTGlua3MuZ2V0KG5hbWUpO1xufVxuXG4vKipcbiAqIFJlc29sdmUgYEBsaW5rYCB0YWdzLCB3aXRoIG9yIHdpdGhvdXQgYSBgfCBkaXNwbGF5IHRleHRgIHBhcnQsIGluIGRlc2NyaXB0aW9uIHRleHRcbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0LlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICogQHBhcmFtIHNlbGZOYW1lc3BhY2UgLSBUaGUgbmFtZXNwYWNlIG9mIHRoZSBwYWdlIGJlaW5nIHJlbmRlcmVkLCBwcmVmZXJyZWQgd2hlbiBhIG5hbWUgaXMgYW1iaWd1b3VzLlxuICogQHJldHVybnMgVGhlIHRleHQgd2l0aCBtYXJrZG93biBsaW5rcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVMaW5rcyh0ZXh0OiBzdHJpbmcsIGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4sIHNlbGZOYW1lc3BhY2U/OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcmVwbGFjZVJlZ0V4cE1hdGNoZXModGV4dCwgL1xce0BsaW5rXFxzKyg/PHRhcmdldD5bXnx9XSs/KSg/OlxccypcXHxcXHMqKD88ZGlzcGxheT5bXn1dKz8pKT9cXH0vZywgKG1hdGNoKSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ3RhcmdldCcpLnRyaW0oKTtcbiAgICBjb25zdCBkaXNwbGF5ID0gKGdldE9wdGlvbmFsTmFtZWRHcm91cChtYXRjaCwgJ2Rpc3BsYXknKT8udHJpbSgpID8/IHRhcmdldCkucmVwbGFjZUFsbCgvXFxcXCg/PVs8Pnt9XSkvZywgJycpO1xuXG4gICAgLy8gSGFuZGxlIFR5cGUubWVtYmVyIHJlZmVyZW5jZXMgKGUuZy4sIFBsdWdpbk5vdGljZUNvbXBvbmVudC5zaG93Tm90aWNlKVxuICAgIGNvbnN0IGRvdE1hdGNoID0gL14oPzx0eXBlTmFtZT5bQS1aYS16XVxcdyopXFwuKD88bWVtYmVyTmFtZT5cXHcrKSQvLmV4ZWModGFyZ2V0KTtcbiAgICBpZiAoZG90TWF0Y2gpIHtcbiAgICAgIGNvbnN0IHR5cGVOYW1lID0gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChkb3RNYXRjaCwgJ3R5cGVOYW1lJyk7XG4gICAgICBjb25zdCBtZW1iZXJOYW1lID0gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChkb3RNYXRjaCwgJ21lbWJlck5hbWUnKTtcbiAgICAgIGNvbnN0IHR5cGVJbmZvID0gZmluZFR5cGUoYWxsVHlwZXMsIHR5cGVOYW1lLCBzZWxmTmFtZXNwYWNlKTtcbiAgICAgIGlmICh0eXBlSW5mbyAmJiBkb2VzTWVtYmVyUGFnZUV4aXN0KHR5cGVJbmZvLm5hbWVzcGFjZSwgdHlwZUluZm8ubmFtZSwgbWVtYmVyUm91dGVTZWdtZW50KG1lbWJlck5hbWUpKSkge1xuICAgICAgICBjb25zdCB0YXJnZXROc0RpcmVjdG9yeSA9IGdldE5hbWVzcGFjZURpcmVjdG9yeSh0eXBlSW5mby5uYW1lc3BhY2UpO1xuICAgICAgICByZXR1cm4gYFske2Rpc3BsYXl9XSgke2dldEJhc2VQYXRoKCl9L2FwaS8ke3RhcmdldE5zRGlyZWN0b3J5fS8ke3RvVHlwZVJvdXRlU2VnbWVudCh0eXBlSW5mby5uYW1lc3BhY2UsIHR5cGVJbmZvLm5hbWUpfS8ke21lbWJlclJvdXRlU2VnbWVudChtZW1iZXJOYW1lKX0vKWA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHNpbXBsZSB0eXBlIHJlZmVyZW5jZXMg4oCUIGlmIGRpc3BsYXkgY29udGFpbnMgZ2VuZXJpYyBhcmdzLCBsaW5rIGVhY2ggdHlwZSBpbmRpdmlkdWFsbHlcbiAgICBjb25zdCBpbmZvID0gZmluZFR5cGUoYWxsVHlwZXMsIHRhcmdldCwgc2VsZk5hbWVzcGFjZSk7XG4gICAgaWYgKGluZm8pIHtcbiAgICAgIHJldHVybiBkaXNwbGF5ICE9PSB0YXJnZXQgJiYgZGlzcGxheS5pbmNsdWRlcygnPCcpID8gcmVuZGVyVHlwZVdpdGhMaW5rcyhkaXNwbGF5LCBhbGxUeXBlcywgdW5kZWZpbmVkLCBzZWxmTmFtZXNwYWNlKSA6IGBbJHtkaXNwbGF5fV0oJHt0eXBlSHJlZihpbmZvKX0pYDtcbiAgICB9XG5cbiAgICBjb25zdCBleHRlcm5hbFVybCA9IHJlc29sdmVFeHRlcm5hbFR5cGVVcmwodGFyZ2V0KTtcbiAgICByZXR1cm4gZXh0ZXJuYWxVcmwgPyBgWyR7ZGlzcGxheX1dKCR7ZXh0ZXJuYWxVcmx9KWAgOiBgXFxgJHtkaXNwbGF5fVxcYGA7XG4gIH0pO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIGEgVHlwZVNjcmlwdCB1dGlsaXR5IHR5cGUgdG8gaXRzIGhhbmRib29rIGVudHJ5LlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHJldHVybnMgVGhlIGhhbmRib29rIFVSTCwgb3IgYHVuZGVmaW5lZGAgd2hlbiBpdCBpcyBub3QgYSB1dGlsaXR5IHR5cGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlVHNVdGlsaXR5VXJsKG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGhhc2ggPSBUU19VVElMSVRZX1RZUEVTLmdldChuYW1lKTtcbiAgaWYgKGhhc2gpIHtcbiAgICBpZiAoWydJdGVyYWJsZSddLmluY2x1ZGVzKG5hbWUpKSB7XG4gICAgICByZXR1cm4gYGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rL2l0ZXJhdG9ycy1hbmQtZ2VuZXJhdG9ycy5odG1sIyR7aGFzaH1gO1xuICAgIH1cbiAgICBjb25zdCBoYW5kYm9va1BhZ2UgPSBbJ0NhcGl0YWxpemUnLCAnTG93ZXJjYXNlJywgJ1VuY2FwaXRhbGl6ZScsICdVcHBlcmNhc2UnXS5pbmNsdWRlcyhuYW1lKSA/ICcyL3RlbXBsYXRlLWxpdGVyYWwtdHlwZXMnIDogJ3V0aWxpdHktdHlwZXMnOyAvLyBDc3BlbGw6ZGlzYWJsZS1saW5lXG4gICAgcmV0dXJuIGBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8ke2hhbmRib29rUGFnZX0uaHRtbCMke2hhc2h9YDtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIGEgV2ViIEFQSSB0eXBlIHRvIGl0cyBNRE4gcGFnZS5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSB0eXBlJ3MgbmFtZS5cbiAqIEByZXR1cm5zIFRoZSBNRE4gVVJMLCBvciBgdW5kZWZpbmVkYCB3aGVuIGl0IGlzIG5vdCBhIGtub3duIFdlYiBBUEkgdHlwZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVXZWJBcGlVcmwobmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFPYmplY3QuaGFzT3duKG1vZHVsZVN0YXRlLndlYkFwaVR5cGVzLCBuYW1lKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgZW50cnkgPSBtb2R1bGVTdGF0ZS53ZWJBcGlUeXBlc1tuYW1lXTtcbiAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZW50cnk7XG4gIH1cbiAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ29iamVjdCcgJiYgZW50cnkgIT09IG51bGwgJiYgJ3VybCcgaW4gZW50cnkpIHtcbiAgICBjb25zdCB0eXBlZEVudHJ5ID0gZW50cnkgYXMgV2ViQXBpRW50cnk7XG4gICAgcmV0dXJuIHR5cGVkRW50cnkudXJsO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgbG93ZXJjYXNlZCBPTi1ESVNLIHNlZ21lbnQgZm9yIGEgdHlwZSAoZmlsZSBwYXRoICsgY29tcG9uZW50LWltcG9ydCByZWxhdGl2ZSBwYXRoKS5cbiAqXG4gKiBAcGFyYW0gbmFtZXNwYWNlIC0gVGhlIHR5cGUncyBuYW1lc3BhY2UuXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSB0eXBlJ3MgbmFtZS5cbiAqIEByZXR1cm5zIFRoZSBzZWdtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9UeXBlRmlsZVNlZ21lbnQobmFtZXNwYWNlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0eXBlRmlsZVNlZ21lbnRzLmdldChgJHtuYW1lc3BhY2V9IyR7bmFtZX1gKSA/PyB0b1JvdXRlU2VnbWVudChuYW1lKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIHRoZSBjYXNlLXByZXNlcnZlZCBVUkwvUk9VVEUgc2VnbWVudCBmb3IgYSB0eXBlIChzbHVnIGZyb250bWF0dGVyICsgaW50ZXJuYWwgbGlua3MpLlxuICpcbiAqIEBwYXJhbSBuYW1lc3BhY2UgLSBUaGUgdHlwZSdzIG5hbWVzcGFjZS5cbiAqIEBwYXJhbSBuYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHJldHVybnMgVGhlIHNlZ21lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1R5cGVSb3V0ZVNlZ21lbnQobmFtZXNwYWNlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0eXBlUm91dGVTZWdtZW50cy5nZXQoYCR7bmFtZXNwYWNlfSMke25hbWV9YCkgPz8gdG9Sb3V0ZVNlZ21lbnRQcmVzZXJ2ZUNhc2UobmFtZSk7XG59XG5cbi8qKlxuICogQWJzb2x1dGUgbGluayB0byBhIHR5cGUncyBvdmVydmlldyBwYWdlLlxuICpcbiAqIEBwYXJhbSBpbmZvIC0gVGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAqIEByZXR1cm5zIFRoZSBsaW5rLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdHlwZUhyZWYoaW5mbzogVHlwZUluZm8pOiBzdHJpbmcge1xuICByZXR1cm4gYCR7Z2V0QmFzZVBhdGgoKX0vYXBpLyR7Z2V0TmFtZXNwYWNlRGlyZWN0b3J5KGluZm8ubmFtZXNwYWNlKX0vJHt0b1R5cGVSb3V0ZVNlZ21lbnQoaW5mby5uYW1lc3BhY2UsIGluZm8ubmFtZSl9L2A7XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIGFic29sdXRlIGxpbmsgdG8gYSB0eXBlIHBhZ2VcbiAqXG4gKiBAcGFyYW0gdHlwZU5hbWUgLSBUaGUgdHlwZSdzIG5hbWUuXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKiBAcGFyYW0gY3VycmVudE5hbWVzcGFjZSAtIFRoZSBuYW1lc3BhY2Ugb2YgdGhlIHJlZmVyZW5jaW5nIHBhZ2UsIHByZWZlcnJlZCB3aGVuIHRoZSBuYW1lIGlzIGFtYmlndW91cy5cbiAqIEByZXR1cm5zIEEgbWFya2Rvd24gbGluaywgb3IgaW5saW5lIGNvZGUgd2hlbiB0aGUgdHlwZSBpcyBub3QgZG9jdW1lbnRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHR5cGVMaW5rKHR5cGVOYW1lOiBzdHJpbmcsIGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4sIGN1cnJlbnROYW1lc3BhY2U/OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBjbGVhbk5hbWUgPSB0eXBlTmFtZS5yZXBsYWNlKC88Lio+JC8sICcnKS50cmltKCk7XG4gIGNvbnN0IGluZm8gPSBmaW5kVHlwZShhbGxUeXBlcywgY2xlYW5OYW1lLCBjdXJyZW50TmFtZXNwYWNlKTtcbiAgcmV0dXJuIGluZm8gPyBgWyR7ZXNjYXBlTWR4QW5nbGVCcmFja2V0cyh0eXBlTmFtZSl9XSgke3R5cGVIcmVmKGluZm8pfSlgIDogYFxcYCR7dHlwZU5hbWV9XFxgYDtcbn1cblxuZnVuY3Rpb24gZGlzYW1iaWd1YXRlKGJhc2U6IHN0cmluZywgdXNlZDogU2V0PHN0cmluZz4sIGtleU9mOiAoc2VnbWVudDogc3RyaW5nKSA9PiBzdHJpbmcpOiBzdHJpbmcge1xuICBsZXQgc2VnbWVudCA9IGJhc2U7XG4gIGNvbnN0IEZJUlNUX0RJU0FNQklHVUFUSU9OX1NVRkZJWCA9IDI7XG4gIGxldCBzdWZmaXggPSBGSVJTVF9ESVNBTUJJR1VBVElPTl9TVUZGSVg7XG4gIHdoaWxlICh1c2VkLmhhcyhrZXlPZihzZWdtZW50KSkpIHtcbiAgICBzZWdtZW50ID0gYCR7YmFzZX0tJHtTdHJpbmcoc3VmZml4KX1gO1xuICAgIHN1ZmZpeCsrO1xuICB9XG4gIHVzZWQuYWRkKGtleU9mKHNlZ21lbnQpKTtcbiAgcmV0dXJuIHNlZ21lbnQ7XG59XG5cbmZ1bmN0aW9uIGdldEJhc2VQYXRoKCk6IHN0cmluZyB7XG4gIHJldHVybiBnZXRBcGlEb2NTZXR0aW5ncygpLmJhc2VQYXRoO1xufVxuXG4vKipcbiAqIFdhcm4gd2hlbiB0d28gZGlzdGluY3QgbWVtYmVycyBvZiBhIHR5cGUgcHJvZHVjZSB0aGUgc2FtZSBtZW1iZXIgc2x1ZyAoVVJML2ZpbGUgc2VnbWVudCkuIFRoZVxuICogb3B0aW9uYWwtYD9gIHN1ZmZpeCBpcyBzdHJpcHBlZCBmaXJzdCwgc28gYSBwcm9wZXJ0eSBhcHBlYXJpbmcgYXMgYm90aCByZXF1aXJlZCBhbmQgb3B0aW9uYWwgaXMgbm90XG4gKiBhIGZhbHNlIHBvc2l0aXZlLlxuICpcbiAqIEBwYXJhbSBpbmZvIC0gVGhlIHR5cGUuXG4gKiBAcGFyYW0gbmFtZXNwYWNlIC0gVGhlIHR5cGUncyBuYW1lc3BhY2UuXG4gKi9cbmZ1bmN0aW9uIHdhcm5NZW1iZXJTbHVnQ29sbGlzaW9ucyhpbmZvOiBUeXBlSW5mbywgbmFtZXNwYWNlOiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3Qgc2VlbiA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gIGZ1bmN0aW9uIGNoZWNrKHNsdWc6IHN0cmluZywgb3JpZ2luYWw6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBvcmlnaW5hbC5yZXBsYWNlKC9cXD8kLywgJycpO1xuICAgIGNvbnN0IGV4aXN0aW5nID0gc2Vlbi5nZXQoc2x1Zyk7XG4gICAgaWYgKGV4aXN0aW5nICE9PSB1bmRlZmluZWQgJiYgZXhpc3RpbmcgIT09IG5vcm1hbGl6ZWQpIHtcbiAgICAgIGNvbnNvbGUud2FybihgTWVtYmVyIHJvdXRlIGNvbGxpc2lvbiBpbiBcIiR7bmFtZXNwYWNlfSMke2luZm8ubmFtZX1cIjogXCIke2V4aXN0aW5nfVwiIGFuZCBcIiR7bm9ybWFsaXplZH1cIiBib3RoIG1hcCB0byBcIi8ke3NsdWd9L1wiLmApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZWVuLnNldChzbHVnLCBub3JtYWxpemVkKTtcbiAgfVxuICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIGluZm8ucHJvcGVydGllcykge1xuICAgIGNoZWNrKG1lbWJlclNsdWcocHJvcGVydHkubmFtZSksIHByb3BlcnR5Lm5hbWUpO1xuICB9XG4gIGZvciAoY29uc3QgbWV0aG9kIG9mIGluZm8ubWV0aG9kcykge1xuICAgIGNoZWNrKG92ZXJsb2FkU2x1ZyhtZXRob2Qub3ZlcmxvYWRLZXkpLCBtZXRob2Qub3ZlcmxvYWRLZXkpO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU9BLHFCQUdPO0FBQ1AscUJBQTZCO0FB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
386
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvYXBpLWRvYy1saW5rLXJlbmRlcmluZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVHlwZS1saW5rIHJlbmRlcmluZzogdHVybnMgdHlwZSB0ZXh0IGFuZCBpbmxpbmUgbGluayB0YWdzIGludG8gbWFya2Rvd24gbGlua3MgdG8gZ2VuZXJhdGVkIHBhZ2VzXG4gKiBvciBleHRlcm5hbCByZWZlcmVuY2VzIChUeXBlU2NyaXB0IGhhbmRib29rLCBNRE4gV2ViIEFQSSwgSlMgZ2xvYmFscykuXG4gKi9cblxuaW1wb3J0IHtcbiAgZ2V0TWFuZGF0b3J5TmFtZWRHcm91cCxcbiAgZ2V0T3B0aW9uYWxOYW1lZEdyb3VwXG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9yZWctZXhwJztcbmltcG9ydCB7IHJlYWRGaWxlU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgVHlwZUluZm8sXG4gIFdlYkFwaUVudHJ5XG59IGZyb20gJy4vYXBpLWRvYy10eXBlcy50cyc7XG5cbmltcG9ydCB7XG4gIEdFTkVSSUNfVFlQRV9QQVJBTVMsXG4gIFRTX0dMT0JBTF9UWVBFUyxcbiAgVFNfUFJJTUlUSVZFX1RZUEVTLFxuICBUU19VVElMSVRZX1RZUEVTXG59IGZyb20gJy4vYXBpLWRvYy1jb25zdGFudHMudHMnO1xuaW1wb3J0IHsgZ2V0UGFja2FnZVR5cGVVcmwgfSBmcm9tICcuL2FwaS1kb2MtcGFja2FnZS1zaXRlcy50cyc7XG5pbXBvcnQge1xuICB0b1JvdXRlU2VnbWVudCxcbiAgdG9Sb3V0ZVNlZ21lbnRQcmVzZXJ2ZUNhc2Vcbn0gZnJvbSAnLi9hcGktZG9jLXJvdXRlLXNlZ21lbnRzLnRzJztcbmltcG9ydCB7IGdldEFwaURvY1NldHRpbmdzIH0gZnJvbSAnLi9hcGktZG9jLXNldHRpbmdzLnRzJztcbmltcG9ydCB7XG4gIGVzY2FwZU1keEFuZ2xlQnJhY2tldHMsXG4gIGVzY2FwZU1keFByb3NlLFxuICBnZXROYW1lc3BhY2VEaXJlY3RvcnksXG4gIG1lbWJlclJvdXRlU2VnbWVudCxcbiAgbWVtYmVyU2x1ZyxcbiAgb3ZlcmxvYWRSb3V0ZVNlZ21lbnQsXG4gIG92ZXJsb2FkU2x1ZyxcbiAgcmVwbGFjZVJlZ0V4cE1hdGNoZXMsXG4gIHNlZ21lbnRNYXJrZG93blxufSBmcm9tICcuL2FwaS1kb2MtdGV4dC11dGlscy50cyc7XG5cbi8qKlxuTG9hZGVkIGZyb20gdHlwZWRvYy1wbHVnaW4tbWRuLWxpbmtzIGRhdGEgYXQgcnVudGltZVxuICovXG4vKipcbk1vZHVsZS1sZXZlbCBtdXRhYmxlIHN0YXRlLCBoZWxkIGluIG9uZSBvYmplY3Qgc28gZWFjaCBtdXRhdGlvbiBuYW1lcyBpdCBleHBsaWNpdGx5LlxuICovXG5pbnRlcmZhY2UgTW9kdWxlU3RhdGUge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9yZWFkb25seS1pbnRlcmZhY2UtbWVtYmVycyAtLSBUaGUgV2ViIEFQSSBtZXRhZGF0YSBjYWNoZSBpcyByZXBsYWNlZCBhZnRlciBsb2FkaW5nLlxuICB3ZWJBcGlUeXBlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbmNvbnN0IG1vZHVsZVN0YXRlOiBNb2R1bGVTdGF0ZSA9IHtcbiAgd2ViQXBpVHlwZXM6IHt9XG59O1xuLyoqXG5Mb3dlcmNhc2VkLCBjb2xsaXNpb24tZGlzYW1iaWd1YXRlZCBPTi1ESVNLIHNlZ21lbnQgcGVyIHF1YWxpZmllZCB0eXBlIGtleSAoYCR7bmFtZXNwYWNlfSMke25hbWV9YCkuXG4gKi9cbmNvbnN0IHR5cGVGaWxlU2VnbWVudHMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuLyoqXG5DYXNlLXByZXNlcnZlZCBVUkwvcm91dGUgc2VnbWVudCBwZXIgcXVhbGlmaWVkIHR5cGUga2V5IChgJHtuYW1lc3BhY2V9IyR7bmFtZX1gKS5cbiAqL1xuY29uc3QgdHlwZVJvdXRlU2VnbWVudHMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuXG4vKipcbiAqIFJvdXRlLXNlZ21lbnQga2V5cyBvZiB0aGUgbWVtYmVyIHBhZ2VzIHRoYXQgYGdlbmVyYXRlTWVtYmVyUGFnZXNgIHdpbGwgYWN0dWFsbHkgZW1pdCwgYXNcbiAqIGAke25hbWVzcGFjZX0jJHtUeXBlTmFtZX0jJHtyb3V0ZVNlZ21lbnR9YC4gT25seSBOT04taW5oZXJpdGVkIHByb3BlcnRpZXMgYW5kIG5vbi1pbmhlcml0ZWQgbWV0aG9kXG4gKiBvdmVybG9hZCBrZXlzIGdldCBhIHBhZ2UsIHNvIHRoaXMgbGV0cyBsaW5rIGVtaXR0ZXJzIGF2b2lkIHBvaW50aW5nIGF0IGEgbWVtYmVyIHBhZ2UgdGhhdCBpcyBuZXZlclxuICogZ2VuZXJhdGVkIChhbiBpbmhlcml0ZWQgbWVtYmVyLCBhbiBlbnVtIG1lbWJlciwgYW4gb3B0aW9ucy1pbnRlcmZhY2UgbWVtYmVyKSDigJQgd2hpY2ggd291bGQgNDA0LlxuICovXG5jb25zdCBnZW5lcmF0ZWRNZW1iZXJQYWdlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4vKipcbiAqIFdoZXRoZXIgYSBtZW1iZXIgcGFnZSB3aWxsIGJlIGdlbmVyYXRlZCBmb3IgYHJvdXRlU2VnbWVudGAgb24gdGhlIGdpdmVuIHR5cGUuXG4gKlxuICogQHBhcmFtIG5hbWVzcGFjZSAtIFRoZSB0eXBlJ3MgbmFtZXNwYWNlLlxuICogQHBhcmFtIHR5cGVOYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHBhcmFtIHJvdXRlU2VnbWVudCAtIFRoZSBtZW1iZXIncyByb3V0ZSBzZWdtZW50LlxuICogQHJldHVybnMgV2hldGhlciB0aGUgcGFnZSBpcyBnZW5lcmF0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkb2VzTWVtYmVyUGFnZUV4aXN0KG5hbWVzcGFjZTogc3RyaW5nLCB0eXBlTmFtZTogc3RyaW5nLCByb3V0ZVNlZ21lbnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gZ2VuZXJhdGVkTWVtYmVyUGFnZXMuaGFzKGAke25hbWVzcGFjZX0jJHt0eXBlTmFtZX0jJHtyb3V0ZVNlZ21lbnR9YCk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIGJhcmUgdHlwZSBuYW1lIHRvIGEgZG9jdW1lbnRlZCBgVHlwZUluZm9gLlxuICpcbiAqIFRoZSBtb2RlbCBtYXAgaXMga2V5ZWQgYnkgYSBxdWFsaWZpZWQgYCR7bmFtZXNwYWNlfSMke25hbWV9YCBpZGVudGl0eSwgYmVjYXVzZSBhIHBhY2thZ2VcbiAqIGNhbiBleHBvcnQgdGhlIHNhbWUgc2ltcGxlIG5hbWUgZnJvbSBkaWZmZXJlbnQgbW9kdWxlcy4gUmVzb2x1dGlvbiBpcyBiZXN0LWVmZm9ydDpcbiAqICAgMS4gUHJlZmVyIGEgdHlwZSBpbiBgY3VycmVudE5hbWVzcGFjZWAgKHRoZSByZWZlcmVuY2luZyBwYWdlJ3MgbW9kdWxlKS5cbiAqICAgMi4gT3RoZXJ3aXNlLCBpZiBleGFjdGx5IG9uZSB0eXBlIGFjcm9zcyBhbGwgbW9kdWxlcyBoYXMgdGhhdCBiYXJlIG5hbWUsIHVzZSBpdC5cbiAqICAgMy4gSWYgdGhlIGJhcmUgbmFtZSBpcyBhbWJpZ3VvdXMgKG11bHRpcGxlIG1vZHVsZXMpLCBnaXZlIHVwIChjYWxsZXIgcmVuZGVycyBwbGFpbiBjb2RlKS5cbiAqXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSB0eXBlJ3MgbmFtZS5cbiAqIEBwYXJhbSBjdXJyZW50TmFtZXNwYWNlIC0gVGhlIG5hbWVzcGFjZSBvZiB0aGUgcmVmZXJlbmNpbmcgcGFnZSwgcHJlZmVycmVkIHdoZW4gdGhlIG5hbWUgaXMgYW1iaWd1b3VzLlxuICogQHJldHVybnMgVGhlIHR5cGUsIG9yIGB1bmRlZmluZWRgIHdoZW4gbm8gdHlwZSBvciBtb3JlIHRoYW4gb25lIGhhcyB0aGF0IG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kVHlwZShhbGxUeXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+LCBuYW1lOiBzdHJpbmcsIGN1cnJlbnROYW1lc3BhY2U/OiBzdHJpbmcpOiBUeXBlSW5mbyB8IHVuZGVmaW5lZCB7XG4gIGlmIChjdXJyZW50TmFtZXNwYWNlICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBxdWFsaWZpZWQgPSBhbGxUeXBlcy5nZXQoYCR7Y3VycmVudE5hbWVzcGFjZX0jJHtuYW1lfWApO1xuICAgIGlmIChxdWFsaWZpZWQpIHtcbiAgICAgIHJldHVybiBxdWFsaWZpZWQ7XG4gICAgfVxuICB9XG4gIGxldCBmb3VuZDogVHlwZUluZm8gfCB1bmRlZmluZWQ7XG4gIGxldCBtYXRjaENvdW50ID0gMDtcbiAgZm9yIChjb25zdCBpbmZvIG9mIGFsbFR5cGVzLnZhbHVlcygpKSB7XG4gICAgaWYgKGluZm8ubmFtZSAhPT0gbmFtZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgZm91bmQgPSBpbmZvO1xuICAgIG1hdGNoQ291bnQrKztcbiAgICBpZiAobWF0Y2hDb3VudCA+IDEpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBtYXRjaENvdW50ID09PSAxID8gZm91bmQgOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogTGluayBhIGJhc2UgdHlwZSBleHByZXNzaW9uIGZvciB0aGUgXCJFeHRlbmRzOlwiIGxpbmUuXG4gKiBTaW1wbGUgdHlwZSByZWZlcmVuY2VzIChpZGVudGlmaWVyICsgb3B0aW9uYWwgZ2VuZXJpY3MpIHVzZSByZW5kZXJUeXBlV2l0aExpbmtzXG4gKiBzbyBlYWNoIHR5cGUgYXJndW1lbnQgZ2V0cyBpdHMgb3duIGxpbmsuXG4gKiBDb21wbGV4IGV4cHJlc3Npb25zIChvYmplY3QgdHlwZXMsIGludGVyc2VjdGlvbnMsIGV0Yy4pIGZhbGwgYmFjayB0byB0eXBlTGlua1xuICogdG8gYXZvaWQgTURYIHBhcnNpbmcgaXNzdWVzIHdpdGggYHtgLCBgfWAsIGB8YCBldGMuXG4gKlxuICogQHBhcmFtIHR5cGVOYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICogQHBhcmFtIGN1cnJlbnROYW1lc3BhY2UgLSBUaGUgbmFtZXNwYWNlIG9mIHRoZSByZWZlcmVuY2luZyBwYWdlLCBwcmVmZXJyZWQgd2hlbiB0aGUgbmFtZSBpcyBhbWJpZ3VvdXMuXG4gKiBAcmV0dXJucyBUaGUgbGlua2VkIHR5cGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsaW5rQmFzZVR5cGUodHlwZU5hbWU6IHN0cmluZywgYWxsVHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPiwgY3VycmVudE5hbWVzcGFjZT86IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGlzU2ltcGxlVHlwZVJlZiA9IC9eW2EtekEtWl1bYS16QS1aMC05XSooPzo8Lio+KT8kLy50ZXN0KHR5cGVOYW1lLnRyaW0oKSk7XG4gIHJldHVybiBpc1NpbXBsZVR5cGVSZWYgPyBlc2NhcGVNZHhBbmdsZUJyYWNrZXRzKHJlbmRlclR5cGVXaXRoTGlua3ModHlwZU5hbWUsIGFsbFR5cGVzLCB1bmRlZmluZWQsIGN1cnJlbnROYW1lc3BhY2UpKSA6IHR5cGVMaW5rKHR5cGVOYW1lLCBhbGxUeXBlcywgY3VycmVudE5hbWVzcGFjZSk7XG59XG5cbi8qKlxuICogTG9hZHMgdGhlIFdlYiBBUEkgbGlua3MgYHR5cGVkb2MtcGx1Z2luLW1kbi1saW5rc2Agc2hpcHMsIGlmIGl0IGlzIGluc3RhbGxlZC4gV2l0aG91dCBpdCwgV2ViIEFQSSB0eXBlcyByZW5kZXJcbiAqIHVubGlua2VkLlxuICpcbiAqIEBwYXJhbSByb290RGlyZWN0b3J5IC0gVGhlIGZvbGRlciB3aG9zZSBgbm9kZV9tb2R1bGVzYCBob2xkcyB0aGUgcGFja2FnZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRFeHRlcm5hbFR5cGVNYXBzKHJvb3REaXJlY3Rvcnk6IHN0cmluZyk6IHZvaWQge1xuICB0cnkge1xuICAgIGNvbnN0IGRhdGFQYXRoID0gam9pbihyb290RGlyZWN0b3J5LCAnbm9kZV9tb2R1bGVzL3R5cGVkb2MtcGx1Z2luLW1kbi1saW5rcy9kYXRhL3dlYi1hcGkuanNvbicpO1xuICAgIG1vZHVsZVN0YXRlLndlYkFwaVR5cGVzID0gSlNPTi5wYXJzZShyZWFkRmlsZVN5bmMoZGF0YVBhdGgsICd1dGYtOCcpKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjb25zb2xlLndhcm4oYExvYWRlZCAke1N0cmluZyhPYmplY3Qua2V5cyhtb2R1bGVTdGF0ZS53ZWJBcGlUeXBlcykubGVuZ3RoKX0gV2ViIEFQSSB0eXBlIGxpbmtzYCk7XG4gIH0gY2F0Y2gge1xuICAgIG1vZHVsZVN0YXRlLndlYkFwaVR5cGVzID0ge307XG4gICAgY29uc29sZS53YXJuKCd0eXBlZG9jLXBsdWdpbi1tZG4tbGlua3MgZGF0YSBub3QgZm91bmQg4oCUIFdlYiBBUEkgbGlua3Mgd2lsbCBiZSB1bmF2YWlsYWJsZS4nKTtcbiAgfVxufVxuXG4vKipcbiAqIENvbnZlcnQgaW5saW5lIG1hcmtkb3duIHRvIEhUTUwgZm9yIHVzZSBpbiBjb21wb25lbnQgcHJvcHMgd2l0aCBzZXQ6aHRtbFxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQuXG4gKiBAcmV0dXJucyBUaGUgSFRNTC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hcmtkb3duVG9IdG1sKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGVzY2FwZWQgPSB0ZXh0XG4gICAgLnJlcGxhY2VBbGwoJyYnLCAnJmFtcDsnKVxuICAgIC5yZXBsYWNlQWxsKCc8JywgJyZsdDsnKVxuICAgIC5yZXBsYWNlQWxsKCc+JywgJyZndDsnKTtcbiAgcmV0dXJuIHJlcGxhY2VSZWdFeHBNYXRjaGVzKGVzY2FwZWQsIC9cXFsoPzx0ZXh0PlteXFxdXSspXFxdXFwoKD88dXJsPlteKV0rKVxcKS9nLCAobWF0Y2gpID0+IHtcbiAgICBjb25zdCBsaW5rVGV4dCA9IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICd0ZXh0Jyk7XG4gICAgY29uc3QgdXJsID0gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ3VybCcpO1xuICAgIC8vIEEgcmVsYXRpdmUgVVJMIGhlcmUgaXMgYW4gaWxsdXN0cmF0aXZlIGV4YW1wbGUgcGF0aCBpbiBUU0RvYyAoZS5nLiBgW2Zvb10oZm9vLnBuZylgKSwgbm90IGFcbiAgICAvLyByZWFsIG5hdmlnYWJsZSBsaW5rIOKAlCByZW5kZXIgaXQgYXMgbGl0ZXJhbCBpbmxpbmUgY29kZSBzbyBpdCBuZWl0aGVyIDQwNHMgbm9yIGxvc2VzIG1lYW5pbmcuXG4gICAgcmV0dXJuIC9eKD86aHR0cHM/OlxcL1xcL3xcXC98I3xtYWlsdG86KS8udGVzdCh1cmwpID8gYDxhIGhyZWY9XCIke3VybH1cIj4ke2xpbmtUZXh0fTwvYT5gIDogYDxjb2RlPlske2xpbmtUZXh0fV0oJHt1cmx9KTwvY29kZT5gO1xuICB9KVxuICAgIC5yZXBsYWNlQWxsKC9gKD88Y29kZT5bXmBdKylgL2csICc8Y29kZT4kPGNvZGU+PC9jb2RlPicpXG4gICAgLnJlcGxhY2VBbGwoJ1xcbicsICc8YnIvPicpO1xufVxuXG4vKipcbiAqIEJ1aWxkIHRoZSBocmVmIGZvciBhIG1lbWJlciwgcG9pbnRpbmcgdG8gdGhlIHBhcmVudCB0eXBlJ3MgcGFnZSBpZiBpbmhlcml0ZWRcbiAqXG4gKiBAcGFyYW0gbWVtYmVyU2x1Z1N0cmluZyAtIFRoZSBtZW1iZXIncyByb3V0ZSBzZWdtZW50LlxuICogQHBhcmFtIGluaGVyaXRlZEZyb20gLSBUaGUgbmFtZSBvZiB0aGUgdHlwZSB0aGUgbWVtYmVyIGlzIGluaGVyaXRlZCBmcm9tLCBvciBhbiBlbXB0eSBzdHJpbmcgZm9yIGFuIG93biBtZW1iZXIuXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKiBAcGFyYW0gY3VycmVudE5hbWVzcGFjZSAtIFRoZSBuYW1lc3BhY2Ugb2YgdGhlIHJlZmVyZW5jaW5nIHBhZ2UsIHByZWZlcnJlZCB3aGVuIHRoZSBuYW1lIGlzIGFtYmlndW91cy5cbiAqIEByZXR1cm5zIFRoZSBsaW5rLCBvciBhbiBlbXB0eSBzdHJpbmcgd2hlbiBubyBwYWdlIGRvY3VtZW50cyB0aGUgbWVtYmVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVtYmVySHJlZihtZW1iZXJTbHVnU3RyaW5nOiBzdHJpbmcsIGluaGVyaXRlZEZyb206IHN0cmluZywgYWxsVHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPiwgY3VycmVudE5hbWVzcGFjZT86IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghaW5oZXJpdGVkRnJvbSkge1xuICAgIC8vIE93biAobm9uLWluaGVyaXRlZCkgbWVtYmVyIOKAlCBgZ2VuZXJhdGVNZW1iZXJQYWdlc2AgYWx3YXlzIGVtaXRzIGl0cyBwYWdlIG9uIHRoaXMgc2FtZSBwYWdlLlxuICAgIHJldHVybiBgLi8ke21lbWJlclNsdWdTdHJpbmd9L2A7XG4gIH1cbiAgbGV0IHBhcmVudEluZm8gPSBmaW5kVHlwZShhbGxUeXBlcywgaW5oZXJpdGVkRnJvbSwgY3VycmVudE5hbWVzcGFjZSk7XG4gIGNvbnN0IHZpc2l0ZWQgPSBuZXcgU2V0PFR5cGVJbmZvPigpO1xuICB3aGlsZSAocGFyZW50SW5mbyAmJiAhZG9lc01lbWJlclBhZ2VFeGlzdChwYXJlbnRJbmZvLm5hbWVzcGFjZSwgcGFyZW50SW5mby5uYW1lLCBtZW1iZXJTbHVnU3RyaW5nKSkge1xuICAgIGlmICh2aXNpdGVkLmhhcyhwYXJlbnRJbmZvKSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICB2aXNpdGVkLmFkZChwYXJlbnRJbmZvKTtcbiAgICBjb25zdCBtZW1iZXIgPSBwYXJlbnRJbmZvLnByb3BlcnRpZXMuZmluZCgocHJvcGVydHkpID0+IG1lbWJlclJvdXRlU2VnbWVudChwcm9wZXJ0eS5uYW1lKSA9PT0gbWVtYmVyU2x1Z1N0cmluZylcbiAgICAgID8/IHBhcmVudEluZm8ubWV0aG9kcy5maW5kKChtZXRob2QpID0+IG92ZXJsb2FkUm91dGVTZWdtZW50KG1ldGhvZC5vdmVybG9hZEtleSkgPT09IG1lbWJlclNsdWdTdHJpbmcpO1xuICAgIHBhcmVudEluZm8gPSBtZW1iZXI/LmluaGVyaXRlZEZyb20gPyBmaW5kVHlwZShhbGxUeXBlcywgbWVtYmVyLmluaGVyaXRlZEZyb20sIHBhcmVudEluZm8ubmFtZXNwYWNlKSA6IHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoIXBhcmVudEluZm8gfHwgIWRvZXNNZW1iZXJQYWdlRXhpc3QocGFyZW50SW5mby5uYW1lc3BhY2UsIHBhcmVudEluZm8ubmFtZSwgbWVtYmVyU2x1Z1N0cmluZykpIHtcbiAgICAvLyBBbiB1bmRvY3VtZW50ZWQgb3IgYW1iaWd1b3VzIGFuY2VzdG9yIGhhcyBubyBzYWZlIG1lbWJlciBkZXN0aW5hdGlvbi5cbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgY29uc3QgcGFyZW50TnNEaXJlY3RvcnkgPSBnZXROYW1lc3BhY2VEaXJlY3RvcnkocGFyZW50SW5mby5uYW1lc3BhY2UpO1xuICByZXR1cm4gYCR7Z2V0QmFzZVBhdGgoKX0vYXBpLyR7cGFyZW50TnNEaXJlY3Rvcnl9LyR7dG9UeXBlUm91dGVTZWdtZW50KHBhcmVudEluZm8ubmFtZXNwYWNlLCBwYXJlbnRJbmZvLm5hbWUpfS8ke21lbWJlclNsdWdTdHJpbmd9L2A7XG59XG5cbi8qKlxuICogUG9wdWxhdGUge0BsaW5rIGRvZXNNZW1iZXJQYWdlRXhpc3R9LiBNaXJyb3JzIGBnZW5lcmF0ZU1lbWJlclBhZ2VzYCdzIG93biBmaWx0ZXJpbmcgZXhhY3RseSAob25lIHBhZ2VcbiAqIHBlciBub24taW5oZXJpdGVkIHByb3BlcnR5LCBvbmUgcGVyIG5vbi1pbmhlcml0ZWQgbWV0aG9kIG92ZXJsb2FkIGtleSkuIE11c3QgcnVuIG9uY2UgYmVmb3JlIGFueVxuICogbGluayBpcyByZW5kZXJlZC5cbiAqXG4gKiBAcGFyYW0gdHlwZXMgLSBUaGUgZG9jdW1lbnRlZCB0eXBlcywga2V5ZWQgYnkgcXVhbGlmaWVkIGlkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJNZW1iZXJQYWdlcyh0eXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+KTogdm9pZCB7XG4gIGdlbmVyYXRlZE1lbWJlclBhZ2VzLmNsZWFyKCk7XG4gIGZvciAoY29uc3QgaW5mbyBvZiB0eXBlcy52YWx1ZXMoKSkge1xuICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgaW5mby5wcm9wZXJ0aWVzKSB7XG4gICAgICBpZiAoIXByb3BlcnR5LmluaGVyaXRlZEZyb20pIHtcbiAgICAgICAgZ2VuZXJhdGVkTWVtYmVyUGFnZXMuYWRkKGAke2luZm8ubmFtZXNwYWNlfSMke2luZm8ubmFtZX0jJHttZW1iZXJSb3V0ZVNlZ21lbnQocHJvcGVydHkubmFtZSl9YCk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG92ZXJsb2FkS2V5cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGZvciAoY29uc3QgbWV0aG9kIG9mIGluZm8ubWV0aG9kcykge1xuICAgICAgaWYgKCFtZXRob2QuaW5oZXJpdGVkRnJvbSkge1xuICAgICAgICBvdmVybG9hZEtleXMuYWRkKG1ldGhvZC5vdmVybG9hZEtleSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3Qgb3ZlcmxvYWRLZXkgb2Ygb3ZlcmxvYWRLZXlzKSB7XG4gICAgICBnZW5lcmF0ZWRNZW1iZXJQYWdlcy5hZGQoYCR7aW5mby5uYW1lc3BhY2V9IyR7aW5mby5uYW1lfSMke292ZXJsb2FkUm91dGVTZWdtZW50KG92ZXJsb2FkS2V5KX1gKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBGb3IgZXZlcnkgZG9jdW1lbnRlZCB0eXBlIGFzc2lnbiBCT1RIOlxuICogIC0gYSBsb3dlcmNhc2VkLCBudW1lcmljYWxseS1kaXNhbWJpZ3VhdGVkIEZJTEUgc2VnbWVudCAoc28gYFR5cGVBc3NlcnRlcmAgdnMgYHR5cGVBc3NlcnRlcmAsIHdoaWNoXG4gKiAgICBib3RoIGxvd2VyY2FzZSB0byBgdHlwZWFzc2VydGVyYCwgYmVjb21lIGB0eXBlYXNzZXJ0ZXJgIC8gYHR5cGVhc3NlcnRlci0yYCBvbiBkaXNrIGFuZCBuZXZlclxuICogICAgY29sbGlkZSBvbiBXaW5kb3dzJyBjYXNlLWluc2Vuc2l0aXZlIGZpbGVzeXN0ZW0pLCBhbmRcbiAqICAtIGEgY2FzZS1QUkVTRVJWRUQgUk9VVEUgc2VnbWVudCAoYFR5cGVBc3NlcnRlcmAgLyBgdHlwZUFzc2VydGVyYCkgdXNlZCBmb3IgdGhlIGV4cGxpY2l0IGBzbHVnOmBcbiAqICAgIGZyb250bWF0dGVyIGFuZCBldmVyeSBpbnRlcm5hbCBsaW5rLCBzbyB0aGUgVVJMcyBzdGF5IHByZXR0eSBhbmQgbmF0dXJhbGx5IGRpc3RpbmN0LlxuICogVGhlIHJvdXRlIGRlY291cGxlcyBmcm9tIHRoZSBmaWxlIHBhdGggdmlhIHRoZSBgc2x1ZzpgIGZyb250bWF0dGVyLCBzbyBubyBgLTJgIHN1ZmZpeCBsZWFrcyBpbnRvXG4gKiBVUkxzLiBBbHNvIHdhcm5zIGFib3V0IG1lbWJlci1zbHVnIGNvbGxpc2lvbnMgd2l0aGluIGEgdHlwZS4gTXVzdCBydW4gb25jZSBiZWZvcmUgYW55IHBhZ2UvbGluay5cbiAqXG4gKiBAcGFyYW0gdHlwZXMgLSBUaGUgZG9jdW1lbnRlZCB0eXBlcywga2V5ZWQgYnkgcXVhbGlmaWVkIGlkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJSb3V0ZVNlZ21lbnRzKHR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4pOiB2b2lkIHtcbiAgdHlwZUZpbGVTZWdtZW50cy5jbGVhcigpO1xuICB0eXBlUm91dGVTZWdtZW50cy5jbGVhcigpO1xuICBjb25zdCBieU5hbWVzcGFjZSA9IG5ldyBNYXA8c3RyaW5nLCBUeXBlSW5mb1tdPigpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9wcmVmZXItZ3JvdXAtYnkgLS0gYE1hcC5ncm91cEJ5YCBpcyBFUzIwMjQsIGFuZCB0aGUgc2hhcmVkIGB0c2NvbmZpZy5qc29uYCB0eXBlcyBvbmx5IEVTMjAyMi5cbiAgZm9yIChjb25zdCBpbmZvIG9mIHR5cGVzLnZhbHVlcygpKSB7XG4gICAgY29uc3QgbGlzdCA9IGJ5TmFtZXNwYWNlLmdldChpbmZvLm5hbWVzcGFjZSkgPz8gW107XG4gICAgbGlzdC5wdXNoKGluZm8pO1xuICAgIGJ5TmFtZXNwYWNlLnNldChpbmZvLm5hbWVzcGFjZSwgbGlzdCk7XG4gIH1cbiAgZm9yIChjb25zdCBbbmFtZXNwYWNlLCBpbmZvc10gb2YgYnlOYW1lc3BhY2UpIHtcbiAgICBjb25zdCB1c2VkRmlsZVNlZ21lbnRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3QgdXNlZFJvdXRlU2VnbWVudHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBjb25zdCBzb3J0ZWQgPSBbLi4uaW5mb3NdLnNvcnQoKGFscGhhLCBicmF2bykgPT4gYWxwaGEubmFtZS5sb2NhbGVDb21wYXJlKGJyYXZvLm5hbWUpKTtcbiAgICBmb3IgKGNvbnN0IGluZm8gb2Ygc29ydGVkKSB7XG4gICAgICB0eXBlRmlsZVNlZ21lbnRzLnNldChgJHtuYW1lc3BhY2V9IyR7aW5mby5uYW1lfWAsIGRpc2FtYmlndWF0ZSh0b1JvdXRlU2VnbWVudChpbmZvLm5hbWUpLCB1c2VkRmlsZVNlZ21lbnRzLCAoc2VnbWVudCkgPT4gc2VnbWVudCkpO1xuXG4gICAgICBjb25zdCByb3V0ZUJhc2UgPSB0b1JvdXRlU2VnbWVudFByZXNlcnZlQ2FzZShpbmZvLm5hbWUpO1xuICAgICAgLy8gRGlzYW1iaWd1YXRlIFJPVVRFUyBjYXNlLUlOU0VOU0lUSVZFTFk6IHRoZSBzbHVnIGJlY29tZXMgQXN0cm8ncyBvbi1kaXNrIG91dHB1dCBwYXRoLCBzb1xuICAgICAgLy8gYFR5cGVBc3NlcnRlcmAgYW5kIGB0eXBlQXNzZXJ0ZXJgIChzYW1lIG5hbWUgbW9kdWxvIGNhc2UpIHdvdWxkIGNvbGxpZGUgd2hlbiB0aGUgc2l0ZSBpcyBidWlsdFxuICAgICAgLy8gb24gYSBjYXNlLWluc2Vuc2l0aXZlIGZpbGVzeXN0ZW0gKFdpbmRvd3MvbWFjT1MpLCBzaWxlbnRseSBvdmVyd3JpdGluZyBvbmUgcGFnZSBzbyBldmVyeSBsaW5rXG4gICAgICAvLyB0byBpdCA0MDRzLiBDb21wYXJpbmcgbG93ZXJjYXNlZCBrZXlzIGZvcmNlcyB0aGUgc2Vjb25kIG9jY3VycmVuY2UgdG8gdGFrZSBhIGAtMmAgc3VmZml4LlxuICAgICAgY29uc3Qgcm91dGVTZWdtZW50ID0gZGlzYW1iaWd1YXRlKHJvdXRlQmFzZSwgdXNlZFJvdXRlU2VnbWVudHMsIChzZWdtZW50KSA9PiBzZWdtZW50LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgdHlwZVJvdXRlU2VnbWVudHMuc2V0KGAke25hbWVzcGFjZX0jJHtpbmZvLm5hbWV9YCwgcm91dGVTZWdtZW50KTtcbiAgICAgIGlmIChyb3V0ZVNlZ21lbnQgIT09IHJvdXRlQmFzZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oYERpc2FtYmlndWF0ZWQgUk9VVEUgZm9yIFwiJHtuYW1lc3BhY2V9IyR7aW5mby5uYW1lfVwiOiBcIiR7cm91dGVCYXNlfVwiIC0+IFwiJHtyb3V0ZVNlZ21lbnR9XCIgKHNsdWcgY29sbGlzaW9uKS5gKTtcbiAgICAgIH1cbiAgICAgIHdhcm5NZW1iZXJTbHVnQ29sbGlzaW9ucyhpbmZvLCBuYW1lc3BhY2UpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlbmRlciBhbiBgQGV4YW1wbGVgIGJsb2NrIGFzIE1EWC4gSWYgdGhlIGV4YW1wbGUgYWxyZWFkeSBjb250YWlucyBhIGZlbmNlZCBjb2RlIGJsb2NrLCBpdCBpc1xuICogbm9ybWFsaXplZCB0aHJvdWdoIHtAbGluayByZW5kZXJNZHhQcm9zZX0gKGNvZGUgcHJlc2VydmVkIHJhdywgc3Vycm91bmRpbmcgcHJvc2UgZXNjYXBlZCk7XG4gKiBvdGhlcndpc2UgdGhlIHJhdyBleGFtcGxlIHRleHQgaXMgd3JhcHBlZCBpbiBhIGB0c2AgY29kZSBmZW5jZSBzbyBpdCBpcyBlbWl0dGVkIGxpdGVyYWxseS5cbiAqXG4gKiBAcGFyYW0gZXhhbXBsZSAtIFRoZSBgQGV4YW1wbGVgIHRleHQuXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKiBAcGFyYW0gc2VsZk5hbWVzcGFjZSAtIFRoZSBuYW1lc3BhY2Ugb2YgdGhlIHBhZ2UgYmVpbmcgcmVuZGVyZWQsIHByZWZlcnJlZCB3aGVuIGEgbmFtZSBpcyBhbWJpZ3VvdXMuXG4gKiBAcmV0dXJucyBUaGUgTURYLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyRXhhbXBsZU1keChleGFtcGxlOiBzdHJpbmcsIGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4sIHNlbGZOYW1lc3BhY2U/OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gLyg/Ol58XFxuKVxccyooPzpgYGB8fn5+KS8udGVzdChleGFtcGxlKSA/IHJlbmRlck1keFByb3NlKGV4YW1wbGUsIGFsbFR5cGVzLCBzZWxmTmFtZXNwYWNlKSA6IGBcXGBcXGBcXGB0c1xcbiR7ZXhhbXBsZX1cXG5cXGBcXGBcXGBgO1xufVxuXG4vKipcbiAqIFJlbmRlciBtYXJrZG93biBibG9jayB0ZXh0IChhIGRlc2NyaXB0aW9uLCByZW1hcmtzLCBvciBtb2R1bGUgb3ZlcnZpZXcpIGFzIE1EWC1zYWZlIG1hcmtkb3duLlxuICogRmVuY2VkIGNvZGUgYmxvY2tzIGFyZSByZS1lbWl0dGVkIHZlcmJhdGltIChzdXJyb3VuZGVkIGJ5IGJsYW5rIGxpbmVzLCB3aXRoIGEgbGFuZ3VhZ2UpOyBwcm9zZVxuICogc2VnbWVudHMgaGF2ZSB0aGVpciBpbmxpbmUgbGluayB0YWdzIHJlc29sdmVkIGFuZCB0aGVpciBNRFgtdW5zYWZlIGNoYXJhY3RlcnMgZXNjYXBlZC5cbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0LlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICogQHBhcmFtIHNlbGZOYW1lc3BhY2UgLSBUaGUgbmFtZXNwYWNlIG9mIHRoZSBwYWdlIGJlaW5nIHJlbmRlcmVkLCBwcmVmZXJyZWQgd2hlbiBhIG5hbWUgaXMgYW1iaWd1b3VzLlxuICogQHJldHVybnMgVGhlIE1EWC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlck1keFByb3NlKHRleHQ6IHN0cmluZywgYWxsVHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPiwgc2VsZk5hbWVzcGFjZT86IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG91dDogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBzZWcgb2Ygc2VnbWVudE1hcmtkb3duKHRleHQpKSB7XG4gICAgaWYgKHNlZy50eXBlID09PSAnY29kZScpIHtcbiAgICAgIG91dC5wdXNoKCcnLCBgXFxgXFxgXFxgJHtzZWcubGFuZyB8fCAndHMnfWAsIHNlZy50ZXh0LCAnYGBgJywgJycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQucHVzaChlc2NhcGVNZHhQcm9zZShyZXNvbHZlTGlua3Moc2VnLnRleHQsIGFsbFR5cGVzLCBzZWxmTmFtZXNwYWNlKSkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0LmpvaW4oJ1xcbicpLnJlcGxhY2VBbGwoL1xcbnszLH0vZywgJ1xcblxcbicpLnRyaW0oKTtcbn1cblxuLyoqXG4gKiBSZW5kZXIgYSB0eXBlIHN0cmluZyB3aXRoIGNsaWNrYWJsZSBsaW5rcyBmb3Iga25vd24gdHlwZXNcbiAqXG4gKiBAcGFyYW0gdHlwZVRleHQgLSBUaGUgdHlwZSB0ZXh0LlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICogQHBhcmFtIHNlbGZUeXBlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB0eXBlIHRoZSBwYWdlIGRvY3VtZW50cywgd2hpY2ggYHRoaXNgIGxpbmtzIHRvLlxuICogQHBhcmFtIHNlbGZOYW1lc3BhY2UgLSBUaGUgbmFtZXNwYWNlIG9mIHRoZSBwYWdlIGJlaW5nIHJlbmRlcmVkLCBwcmVmZXJyZWQgd2hlbiBhIG5hbWUgaXMgYW1iaWd1b3VzLlxuICogQHJldHVybnMgVGhlIHR5cGUgdGV4dCB3aXRoIG1hcmtkb3duIGxpbmtzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyVHlwZVdpdGhMaW5rcyh0eXBlVGV4dDogc3RyaW5nLCBhbGxUeXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+LCBzZWxmVHlwZU5hbWU/OiBzdHJpbmcsIHNlbGZOYW1lc3BhY2U/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBQcmUtcGFzczogbGluayBPYmplY3QubWV0aG9kIHBhdHRlcm5zIHRvIE1ETiBiZWZvcmUgd29yZC1ieS13b3JkIGxpbmtpbmdcbiAgY29uc3QgTUROX09CSkVDVF9CQVNFID0gJ2h0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdCc7XG4gIGNvbnN0IHdpdGhPYmplY3RNZXRob2RzID0gcmVwbGFjZVJlZ0V4cE1hdGNoZXModHlwZVRleHQsIC9cXGJPYmplY3RcXC4oPzxtZXRob2Q+W2EtekEtWl1bYS16QS1aMC05XSopXFxiL2csIChtYXRjaCkgPT4ge1xuICAgIGNvbnN0IG1ldGhvZCA9IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICdtZXRob2QnKTtcbiAgICByZXR1cm4gYFtPYmplY3RdKCR7TUROX09CSkVDVF9CQVNFfSkuWyR7bWV0aG9kfV0oJHtNRE5fT0JKRUNUX0JBU0V9LyR7bWV0aG9kfSlgO1xuICB9KTtcbiAgLy8gTWFpbiBwYXNzOiBsaW5rIGluZGl2aWR1YWwgdHlwZSBuYW1lcywgc2tpcHBpbmcgdGV4dCBhbHJlYWR5IGluc2lkZSBtYXJrZG93biBsaW5rc1xuICByZXR1cm4gcmVwbGFjZVJlZ0V4cE1hdGNoZXMoXG4gICAgd2l0aE9iamVjdE1ldGhvZHMsXG4gICAgL1xcW1teXFxdXStcXF1cXChbXildK1xcKXxcXGIoPzx0eXBlTmFtZT5bYS16QS1aXVthLXpBLVowLTldKilcXGIvZyxcbiAgICAobWF0Y2gpID0+IHtcbiAgICAgIGNvbnN0IHR5cGVOYW1lID0gZ2V0T3B0aW9uYWxOYW1lZEdyb3VwKG1hdGNoLCAndHlwZU5hbWUnKTtcbiAgICAgIGlmICh0eXBlTmFtZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbWF0Y2hbMF07XG4gICAgICB9XG4gICAgICAvLyBMaW5rIGB0aGlzYCByZXR1cm4gdHlwZSB0byB0aGUgY3VycmVudCB0eXBlJ3MgcGFnZVxuICAgICAgaWYgKHR5cGVOYW1lID09PSAndGhpcycgJiYgc2VsZlR5cGVOYW1lKSB7XG4gICAgICAgIGNvbnN0IHNlbGZJbmZvID0gZmluZFR5cGUoYWxsVHlwZXMsIHNlbGZUeXBlTmFtZSwgc2VsZk5hbWVzcGFjZSk7XG4gICAgICAgIGlmIChzZWxmSW5mbykge1xuICAgICAgICAgIHJldHVybiBgWyR7dHlwZU5hbWV9XSgke3R5cGVIcmVmKHNlbGZJbmZvKX0pYDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTa2lwIGdlbmVyaWMgdHlwZSBwYXJhbWV0ZXJzXG4gICAgICBpZiAoR0VORVJJQ19UWVBFX1BBUkFNUy5oYXModHlwZU5hbWUpKSB7XG4gICAgICAgIHJldHVybiB0eXBlTmFtZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgb3VyIG93biB0eXBlcyBmaXJzdFxuICAgICAgY29uc3QgaW5mbyA9IGZpbmRUeXBlKGFsbFR5cGVzLCB0eXBlTmFtZSwgc2VsZk5hbWVzcGFjZSk7XG4gICAgICBpZiAoaW5mbykge1xuICAgICAgICByZXR1cm4gYFske3R5cGVOYW1lfV0oJHt0eXBlSHJlZihpbmZvKX0pYDtcbiAgICAgIH1cblxuICAgICAgLy8gQSB0eXBlIGFub3RoZXIgZG9jdW1lbnRlZCBwYWNrYWdlIGRlY2xhcmVzLCBvciBvbmUgdGhlIHNpdGUgbWFwcyBpdHNlbGZcbiAgICAgIGNvbnN0IGV4dGVybmFsVXJsID0gcmVzb2x2ZUV4dGVybmFsVHlwZVVybCh0eXBlTmFtZSk7XG4gICAgICBpZiAoZXh0ZXJuYWxVcmwpIHtcbiAgICAgICAgcmV0dXJuIGBbJHt0eXBlTmFtZX1dKCR7ZXh0ZXJuYWxVcmx9KWA7XG4gICAgICB9XG5cbiAgICAgIC8vIFR5cGVTY3JpcHQgdXRpbGl0eSB0eXBlc1xuICAgICAgY29uc3QgdHNVcmwgPSByZXNvbHZlVHNVdGlsaXR5VXJsKHR5cGVOYW1lKTtcbiAgICAgIGlmICh0c1VybCkge1xuICAgICAgICByZXR1cm4gYFske3R5cGVOYW1lfV0oJHt0c1VybH0pYDtcbiAgICAgIH1cblxuICAgICAgLy8gSlMgZ2xvYmFsIHR5cGVzIChBcnJheSwgUHJvbWlzZSwgTWFwLCBldGMuKVxuICAgICAgY29uc3QgZ2xvYmFsVXJsID0gT2JqZWN0Lmhhc093bihUU19HTE9CQUxfVFlQRVMsIHR5cGVOYW1lKSA/IFRTX0dMT0JBTF9UWVBFU1t0eXBlTmFtZV0gOiB1bmRlZmluZWQ7XG4gICAgICBpZiAoZ2xvYmFsVXJsKSB7XG4gICAgICAgIHJldHVybiBgWyR7dHlwZU5hbWV9XSgke2dsb2JhbFVybH0pYDtcbiAgICAgIH1cblxuICAgICAgLy8gV2ViIEFQSSAvIE1ETiB0eXBlc1xuICAgICAgY29uc3QgbWRuVXJsID0gcmVzb2x2ZVdlYkFwaVVybCh0eXBlTmFtZSk7XG4gICAgICBpZiAobWRuVXJsKSB7XG4gICAgICAgIHJldHVybiBgWyR7dHlwZU5hbWV9XSgke21kblVybH0pYDtcbiAgICAgIH1cblxuICAgICAgLy8gVHlwZVNjcmlwdCBwcmltaXRpdmUgdHlwZXNcbiAgICAgIGNvbnN0IHByaW1pdGl2ZVVybCA9IE9iamVjdC5oYXNPd24oVFNfUFJJTUlUSVZFX1RZUEVTLCB0eXBlTmFtZSkgPyBUU19QUklNSVRJVkVfVFlQRVNbdHlwZU5hbWVdIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHByaW1pdGl2ZVVybCA/IGBbJHt0eXBlTmFtZX1dKCR7cHJpbWl0aXZlVXJsfSlgIDogdHlwZU5hbWU7XG4gICAgfVxuICApO1xufVxuXG4vKipcbiAqIFJlc29sdmUgYSB0eXBlIG5vIHBhZ2Ugb2YgdGhpcyBzaXRlIGRvY3VtZW50cyB0byB0aGUgcGFnZSB0aGF0IGRvZXM6IGFub3RoZXIgZG9jdW1lbnRlZCBwYWNrYWdlJ3Mgc2l0ZSwgb3IgYW5cbiAqIGVudHJ5IG9mIHRoZSBzaXRlJ3Mgb3duIGBleHRlcm5hbFR5cGVMaW5rc2Agc2V0dGluZy5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSB0eXBlJ3MgbmFtZS5cbiAqIEByZXR1cm5zIFRoZSBVUkwsIG9yIGB1bmRlZmluZWRgIHdoZW4gbmVpdGhlciBrbm93cyB0aGUgdHlwZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVFeHRlcm5hbFR5cGVVcmwobmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGdldFBhY2thZ2VUeXBlVXJsKG5hbWUpID8/IGdldEFwaURvY1NldHRpbmdzKCkuZXh0ZXJuYWxUeXBlTGlua3MuZ2V0KG5hbWUpO1xufVxuXG4vKipcbiAqIFJlc29sdmUgYEBsaW5rYCB0YWdzLCB3aXRoIG9yIHdpdGhvdXQgYSBgfCBkaXNwbGF5IHRleHRgIHBhcnQsIGluIGRlc2NyaXB0aW9uIHRleHRcbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0LlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICogQHBhcmFtIHNlbGZOYW1lc3BhY2UgLSBUaGUgbmFtZXNwYWNlIG9mIHRoZSBwYWdlIGJlaW5nIHJlbmRlcmVkLCBwcmVmZXJyZWQgd2hlbiBhIG5hbWUgaXMgYW1iaWd1b3VzLlxuICogQHJldHVybnMgVGhlIHRleHQgd2l0aCBtYXJrZG93biBsaW5rcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVMaW5rcyh0ZXh0OiBzdHJpbmcsIGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4sIHNlbGZOYW1lc3BhY2U/OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcmVwbGFjZVJlZ0V4cE1hdGNoZXModGV4dCwgL1xce0BsaW5rXFxzKyg/PHRhcmdldD5bXnx9XSs/KSg/OlxccypcXHxcXHMqKD88ZGlzcGxheT5bXn1dKz8pKT9cXH0vZywgKG1hdGNoKSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ3RhcmdldCcpLnRyaW0oKTtcbiAgICBjb25zdCBkaXNwbGF5ID0gKGdldE9wdGlvbmFsTmFtZWRHcm91cChtYXRjaCwgJ2Rpc3BsYXknKT8udHJpbSgpID8/IHRhcmdldCkucmVwbGFjZUFsbCgvXFxcXCg/PVs8Pnt9XSkvZywgJycpO1xuXG4gICAgLy8gSGFuZGxlIFR5cGUubWVtYmVyIHJlZmVyZW5jZXMgKGUuZy4sIFBsdWdpbk5vdGljZUNvbXBvbmVudC5zaG93Tm90aWNlKVxuICAgIGNvbnN0IGRvdE1hdGNoID0gL14oPzx0eXBlTmFtZT5bQS1aYS16XVxcdyopXFwuKD88bWVtYmVyTmFtZT5cXHcrKSQvLmV4ZWModGFyZ2V0KTtcbiAgICBpZiAoZG90TWF0Y2gpIHtcbiAgICAgIGNvbnN0IHR5cGVOYW1lID0gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChkb3RNYXRjaCwgJ3R5cGVOYW1lJyk7XG4gICAgICBjb25zdCBtZW1iZXJOYW1lID0gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChkb3RNYXRjaCwgJ21lbWJlck5hbWUnKTtcbiAgICAgIGNvbnN0IHR5cGVJbmZvID0gZmluZFR5cGUoYWxsVHlwZXMsIHR5cGVOYW1lLCBzZWxmTmFtZXNwYWNlKTtcbiAgICAgIGlmICh0eXBlSW5mbyAmJiBkb2VzTWVtYmVyUGFnZUV4aXN0KHR5cGVJbmZvLm5hbWVzcGFjZSwgdHlwZUluZm8ubmFtZSwgbWVtYmVyUm91dGVTZWdtZW50KG1lbWJlck5hbWUpKSkge1xuICAgICAgICBjb25zdCB0YXJnZXROc0RpcmVjdG9yeSA9IGdldE5hbWVzcGFjZURpcmVjdG9yeSh0eXBlSW5mby5uYW1lc3BhY2UpO1xuICAgICAgICByZXR1cm4gYFske2Rpc3BsYXl9XSgke2dldEJhc2VQYXRoKCl9L2FwaS8ke3RhcmdldE5zRGlyZWN0b3J5fS8ke3RvVHlwZVJvdXRlU2VnbWVudCh0eXBlSW5mby5uYW1lc3BhY2UsIHR5cGVJbmZvLm5hbWUpfS8ke21lbWJlclJvdXRlU2VnbWVudChtZW1iZXJOYW1lKX0vKWA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHNpbXBsZSB0eXBlIHJlZmVyZW5jZXMg4oCUIGlmIGRpc3BsYXkgY29udGFpbnMgZ2VuZXJpYyBhcmdzLCBsaW5rIGVhY2ggdHlwZSBpbmRpdmlkdWFsbHlcbiAgICBjb25zdCBpbmZvID0gZmluZFR5cGUoYWxsVHlwZXMsIHRhcmdldCwgc2VsZk5hbWVzcGFjZSk7XG4gICAgaWYgKGluZm8pIHtcbiAgICAgIHJldHVybiBkaXNwbGF5ICE9PSB0YXJnZXQgJiYgZGlzcGxheS5pbmNsdWRlcygnPCcpID8gcmVuZGVyVHlwZVdpdGhMaW5rcyhkaXNwbGF5LCBhbGxUeXBlcywgdW5kZWZpbmVkLCBzZWxmTmFtZXNwYWNlKSA6IGBbJHtkaXNwbGF5fV0oJHt0eXBlSHJlZihpbmZvKX0pYDtcbiAgICB9XG5cbiAgICBjb25zdCBleHRlcm5hbFVybCA9IHJlc29sdmVFeHRlcm5hbFR5cGVVcmwodGFyZ2V0KTtcbiAgICByZXR1cm4gZXh0ZXJuYWxVcmwgPyBgWyR7ZGlzcGxheX1dKCR7ZXh0ZXJuYWxVcmx9KWAgOiBgXFxgJHtkaXNwbGF5fVxcYGA7XG4gIH0pO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIGEgVHlwZVNjcmlwdCB1dGlsaXR5IHR5cGUgdG8gaXRzIGhhbmRib29rIGVudHJ5LlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHJldHVybnMgVGhlIGhhbmRib29rIFVSTCwgb3IgYHVuZGVmaW5lZGAgd2hlbiBpdCBpcyBub3QgYSB1dGlsaXR5IHR5cGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlVHNVdGlsaXR5VXJsKG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGhhc2ggPSBUU19VVElMSVRZX1RZUEVTLmdldChuYW1lKTtcbiAgaWYgKGhhc2gpIHtcbiAgICBpZiAoWydJdGVyYWJsZSddLmluY2x1ZGVzKG5hbWUpKSB7XG4gICAgICByZXR1cm4gYGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rL2l0ZXJhdG9ycy1hbmQtZ2VuZXJhdG9ycy5odG1sIyR7aGFzaH1gO1xuICAgIH1cbiAgICBjb25zdCBoYW5kYm9va1BhZ2UgPSBbJ0NhcGl0YWxpemUnLCAnTG93ZXJjYXNlJywgJ1VuY2FwaXRhbGl6ZScsICdVcHBlcmNhc2UnXS5pbmNsdWRlcyhuYW1lKSA/ICcyL3RlbXBsYXRlLWxpdGVyYWwtdHlwZXMnIDogJ3V0aWxpdHktdHlwZXMnOyAvLyBDc3BlbGw6ZGlzYWJsZS1saW5lXG4gICAgcmV0dXJuIGBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8ke2hhbmRib29rUGFnZX0uaHRtbCMke2hhc2h9YDtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIGEgV2ViIEFQSSB0eXBlIHRvIGl0cyBNRE4gcGFnZS5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSB0eXBlJ3MgbmFtZS5cbiAqIEByZXR1cm5zIFRoZSBNRE4gVVJMLCBvciBgdW5kZWZpbmVkYCB3aGVuIGl0IGlzIG5vdCBhIGtub3duIFdlYiBBUEkgdHlwZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVXZWJBcGlVcmwobmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFPYmplY3QuaGFzT3duKG1vZHVsZVN0YXRlLndlYkFwaVR5cGVzLCBuYW1lKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgZW50cnkgPSBtb2R1bGVTdGF0ZS53ZWJBcGlUeXBlc1tuYW1lXTtcbiAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZW50cnk7XG4gIH1cbiAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ29iamVjdCcgJiYgZW50cnkgIT09IG51bGwgJiYgJ3VybCcgaW4gZW50cnkpIHtcbiAgICBjb25zdCB0eXBlZEVudHJ5ID0gZW50cnkgYXMgV2ViQXBpRW50cnk7XG4gICAgcmV0dXJuIHR5cGVkRW50cnkudXJsO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgbG93ZXJjYXNlZCBPTi1ESVNLIHNlZ21lbnQgZm9yIGEgdHlwZSAoZmlsZSBwYXRoICsgY29tcG9uZW50LWltcG9ydCByZWxhdGl2ZSBwYXRoKS5cbiAqXG4gKiBAcGFyYW0gbmFtZXNwYWNlIC0gVGhlIHR5cGUncyBuYW1lc3BhY2UuXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSB0eXBlJ3MgbmFtZS5cbiAqIEByZXR1cm5zIFRoZSBzZWdtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9UeXBlRmlsZVNlZ21lbnQobmFtZXNwYWNlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0eXBlRmlsZVNlZ21lbnRzLmdldChgJHtuYW1lc3BhY2V9IyR7bmFtZX1gKSA/PyB0b1JvdXRlU2VnbWVudChuYW1lKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIHRoZSBjYXNlLXByZXNlcnZlZCBVUkwvUk9VVEUgc2VnbWVudCBmb3IgYSB0eXBlIChzbHVnIGZyb250bWF0dGVyICsgaW50ZXJuYWwgbGlua3MpLlxuICpcbiAqIEBwYXJhbSBuYW1lc3BhY2UgLSBUaGUgdHlwZSdzIG5hbWVzcGFjZS5cbiAqIEBwYXJhbSBuYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHJldHVybnMgVGhlIHNlZ21lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1R5cGVSb3V0ZVNlZ21lbnQobmFtZXNwYWNlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0eXBlUm91dGVTZWdtZW50cy5nZXQoYCR7bmFtZXNwYWNlfSMke25hbWV9YCkgPz8gdG9Sb3V0ZVNlZ21lbnRQcmVzZXJ2ZUNhc2UobmFtZSk7XG59XG5cbi8qKlxuICogQWJzb2x1dGUgbGluayB0byBhIHR5cGUncyBvdmVydmlldyBwYWdlLlxuICpcbiAqIEBwYXJhbSBpbmZvIC0gVGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAqIEByZXR1cm5zIFRoZSBsaW5rLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdHlwZUhyZWYoaW5mbzogVHlwZUluZm8pOiBzdHJpbmcge1xuICByZXR1cm4gYCR7Z2V0QmFzZVBhdGgoKX0vYXBpLyR7Z2V0TmFtZXNwYWNlRGlyZWN0b3J5KGluZm8ubmFtZXNwYWNlKX0vJHt0b1R5cGVSb3V0ZVNlZ21lbnQoaW5mby5uYW1lc3BhY2UsIGluZm8ubmFtZSl9L2A7XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIGFic29sdXRlIGxpbmsgdG8gYSB0eXBlIHBhZ2VcbiAqXG4gKiBAcGFyYW0gdHlwZU5hbWUgLSBUaGUgdHlwZSdzIG5hbWUuXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKiBAcGFyYW0gY3VycmVudE5hbWVzcGFjZSAtIFRoZSBuYW1lc3BhY2Ugb2YgdGhlIHJlZmVyZW5jaW5nIHBhZ2UsIHByZWZlcnJlZCB3aGVuIHRoZSBuYW1lIGlzIGFtYmlndW91cy5cbiAqIEByZXR1cm5zIEEgbWFya2Rvd24gbGluaywgb3IgaW5saW5lIGNvZGUgd2hlbiB0aGUgdHlwZSBpcyBub3QgZG9jdW1lbnRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHR5cGVMaW5rKHR5cGVOYW1lOiBzdHJpbmcsIGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4sIGN1cnJlbnROYW1lc3BhY2U/OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBjbGVhbk5hbWUgPSB0eXBlTmFtZS5yZXBsYWNlKC88Lio+JC8sICcnKS50cmltKCk7XG4gIGNvbnN0IGluZm8gPSBmaW5kVHlwZShhbGxUeXBlcywgY2xlYW5OYW1lLCBjdXJyZW50TmFtZXNwYWNlKTtcbiAgcmV0dXJuIGluZm8gPyBgWyR7ZXNjYXBlTWR4QW5nbGVCcmFja2V0cyh0eXBlTmFtZSl9XSgke3R5cGVIcmVmKGluZm8pfSlgIDogYFxcYCR7dHlwZU5hbWV9XFxgYDtcbn1cblxuZnVuY3Rpb24gZGlzYW1iaWd1YXRlKGJhc2U6IHN0cmluZywgdXNlZDogU2V0PHN0cmluZz4sIGtleU9mOiAoc2VnbWVudDogc3RyaW5nKSA9PiBzdHJpbmcpOiBzdHJpbmcge1xuICBsZXQgc2VnbWVudCA9IGJhc2U7XG4gIGNvbnN0IEZJUlNUX0RJU0FNQklHVUFUSU9OX1NVRkZJWCA9IDI7XG4gIGxldCBzdWZmaXggPSBGSVJTVF9ESVNBTUJJR1VBVElPTl9TVUZGSVg7XG4gIHdoaWxlICh1c2VkLmhhcyhrZXlPZihzZWdtZW50KSkpIHtcbiAgICBzZWdtZW50ID0gYCR7YmFzZX0tJHtTdHJpbmcoc3VmZml4KX1gO1xuICAgIHN1ZmZpeCsrO1xuICB9XG4gIHVzZWQuYWRkKGtleU9mKHNlZ21lbnQpKTtcbiAgcmV0dXJuIHNlZ21lbnQ7XG59XG5cbmZ1bmN0aW9uIGdldEJhc2VQYXRoKCk6IHN0cmluZyB7XG4gIHJldHVybiBnZXRBcGlEb2NTZXR0aW5ncygpLmJhc2VQYXRoO1xufVxuXG4vKipcbiAqIFdhcm4gd2hlbiB0d28gZGlzdGluY3QgbWVtYmVycyBvZiBhIHR5cGUgcHJvZHVjZSB0aGUgc2FtZSBtZW1iZXIgc2x1ZyAoVVJML2ZpbGUgc2VnbWVudCkuIFRoZVxuICogb3B0aW9uYWwtYD9gIHN1ZmZpeCBpcyBzdHJpcHBlZCBmaXJzdCwgc28gYSBwcm9wZXJ0eSBhcHBlYXJpbmcgYXMgYm90aCByZXF1aXJlZCBhbmQgb3B0aW9uYWwgaXMgbm90XG4gKiBhIGZhbHNlIHBvc2l0aXZlLlxuICpcbiAqIEBwYXJhbSBpbmZvIC0gVGhlIHR5cGUuXG4gKiBAcGFyYW0gbmFtZXNwYWNlIC0gVGhlIHR5cGUncyBuYW1lc3BhY2UuXG4gKi9cbmZ1bmN0aW9uIHdhcm5NZW1iZXJTbHVnQ29sbGlzaW9ucyhpbmZvOiBUeXBlSW5mbywgbmFtZXNwYWNlOiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3Qgc2VlbiA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gIGZ1bmN0aW9uIGNoZWNrKHNsdWc6IHN0cmluZywgb3JpZ2luYWw6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBvcmlnaW5hbC5yZXBsYWNlKC9cXD8kLywgJycpO1xuICAgIGNvbnN0IGV4aXN0aW5nID0gc2Vlbi5nZXQoc2x1Zyk7XG4gICAgaWYgKGV4aXN0aW5nICE9PSB1bmRlZmluZWQgJiYgZXhpc3RpbmcgIT09IG5vcm1hbGl6ZWQpIHtcbiAgICAgIGNvbnNvbGUud2FybihgTWVtYmVyIHJvdXRlIGNvbGxpc2lvbiBpbiBcIiR7bmFtZXNwYWNlfSMke2luZm8ubmFtZX1cIjogXCIke2V4aXN0aW5nfVwiIGFuZCBcIiR7bm9ybWFsaXplZH1cIiBib3RoIG1hcCB0byBcIi8ke3NsdWd9L1wiLmApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZWVuLnNldChzbHVnLCBub3JtYWxpemVkKTtcbiAgfVxuICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIGluZm8ucHJvcGVydGllcykge1xuICAgIGNoZWNrKG1lbWJlclNsdWcocHJvcGVydHkubmFtZSksIHByb3BlcnR5Lm5hbWUpO1xuICB9XG4gIGZvciAoY29uc3QgbWV0aG9kIG9mIGluZm8ubWV0aG9kcykge1xuICAgIGNoZWNrKG92ZXJsb2FkU2x1ZyhtZXRob2Qub3ZlcmxvYWRLZXkpLCBtZXRob2Qub3ZlcmxvYWRLZXkpO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU9BLHFCQUdPO0FBQ1AscUJBQTZCO0FBQzdCLHVCQUFxQjtBQU9yQiwrQkFLTztBQUNQLG1DQUFrQztBQUNsQyxvQ0FHTztBQUNQLDhCQUFrQztBQUNsQyxnQ0FVTztBQWFQLE1BQU0sY0FBMkI7QUFBQSxFQUMvQixhQUFhLENBQUM7QUFDaEI7QUFJQSxNQUFNLG1CQUFtQixvQkFBSSxJQUFvQjtBQUlqRCxNQUFNLG9CQUFvQixvQkFBSSxJQUFvQjtBQVFsRCxNQUFNLHVCQUF1QixvQkFBSSxJQUFZO0FBVXRDLFNBQVMsb0JBQW9CLFdBQW1CLFVBQWtCLGNBQStCO0FBQ3RHLFNBQU8scUJBQXFCLElBQUksR0FBRyxTQUFTLElBQUksUUFBUSxJQUFJLFlBQVksRUFBRTtBQUM1RTtBQWdCTyxTQUFTLFNBQVMsVUFBaUMsTUFBYyxrQkFBaUQ7QUFDdkgsTUFBSSxxQkFBcUIsUUFBVztBQUNsQyxVQUFNLFlBQVksU0FBUyxJQUFJLEdBQUcsZ0JBQWdCLElBQUksSUFBSSxFQUFFO0FBQzVELFFBQUksV0FBVztBQUNiLGFBQU87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
@@ -105,13 +105,23 @@ function parseTypeArguments(baseTypeName) {
105
105
  return $arguments;
106
106
  }
107
107
  function resolveInheritedMembers(types) {
108
- for (const [, info] of types) {
108
+ const resolved = /* @__PURE__ */ new Set();
109
+ const resolving = /* @__PURE__ */ new Set();
110
+ for (const info of types.values()) {
111
+ resolve(info);
112
+ }
113
+ function resolve(info) {
114
+ if (resolved.has(info)) {
115
+ return;
116
+ }
117
+ resolving.add(info);
109
118
  for (const baseTypeName of [...info.baseTypes, ...info.implementsTypes]) {
110
119
  const cleanBase = baseTypeName.replace(/<.*>$/, "").trim();
111
120
  const baseInfo = (0, import_api_doc_link_rendering.findType)(types, cleanBase, info.namespace);
112
- if (!baseInfo) {
121
+ if (!baseInfo || resolving.has(baseInfo)) {
113
122
  continue;
114
123
  }
124
+ resolve(baseInfo);
115
125
  const typeArguments = parseTypeArguments(baseTypeName);
116
126
  const typeParameterMap = buildTypeParameterMap(baseInfo, typeArguments);
117
127
  for (const property of baseInfo.properties) {
@@ -120,13 +130,15 @@ function resolveInheritedMembers(types) {
120
130
  }
121
131
  }
122
132
  for (const method of baseInfo.methods) {
123
- const hasOwnMethod = info.methods.some((m) => m.name === method.name && m.signature === method.signature);
124
- const hasInheritedMethod = info.methods.some((m) => m.inheritedFrom === baseInfo.name && m.overloadKey === method.overloadKey);
125
- if (!hasOwnMethod && !hasInheritedMethod) {
126
- info.methods.push(substituteMemberTypes({ ...method, inheritedFrom: baseInfo.name }, typeParameterMap));
133
+ const inheritedMethod = substituteMemberTypes({ ...method, inheritedFrom: baseInfo.name }, typeParameterMap);
134
+ const hasMethod = info.methods.some((m) => m.name === inheritedMethod.name && m.signature === inheritedMethod.signature);
135
+ if (!hasMethod) {
136
+ info.methods.push(inheritedMethod);
127
137
  }
128
138
  }
129
139
  }
140
+ resolving.delete(info);
141
+ resolved.add(info);
130
142
  }
131
143
  }
132
144
  function substituteMemberTypes(member, mapping) {
@@ -154,4 +166,4 @@ function substituteTypeParams(typeText, mapping) {
154
166
  substituteMemberTypes,
155
167
  substituteTypeParams
156
168
  });
157
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvYXBpLWRvYy10eXBlLW1lcmdpbmcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEluaGVyaXRhbmNlIHJlc29sdXRpb246IGNvcGllcyBpbmhlcml0ZWQgbWVtYmVycyBvbnRvIHN1YnR5cGVzLCBzdWJzdGl0dXRpbmcgZ2VuZXJpYyB0eXBlIGFyZ3MuXG4gKlxuICogKEEgZG9jdW1lbnRlZCBwYWNrYWdlIGlzIGEgbm9ybWFsIGxpYnJhcnksIG5vdCBhbiBhdWdtZW50YXRpb24gb2YgYW5vdGhlciBwYWNrYWdlJ3MgZGVjbGFyYXRpb25zLCBzbyB0aGVyZSBpcyBub1xuICogb2ZmaWNpYWwtdnMtdW5vZmZpY2lhbCBtZXJnZSBtYWNoaW5lcnkgaGVyZSDigJQgb25seSB0aGUgZ2VuZXJpYyBpbmhlcml0YW5jZSBoZWxwZXJzLilcbiAqL1xuXG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5cbmltcG9ydCB0eXBlIHtcbiAgTWVtYmVySW5mbyxcbiAgVHlwZUluZm9cbn0gZnJvbSAnLi9hcGktZG9jLXR5cGVzLnRzJztcblxuaW1wb3J0IHsgZmluZFR5cGUgfSBmcm9tICcuL2FwaS1kb2MtbGluay1yZW5kZXJpbmcudHMnO1xuXG4vKipcbiAqIEJ1aWxkIGEgbWFwcGluZyBmcm9tIHBhcmVudCB0eXBlIHBhcmFtZXRlciBuYW1lcyB0byBjb25jcmV0ZSB0eXBlIGFyZ3VtZW50cy5cbiAqIEUuZy4sIHBhcmVudCBoYXMgYHR5cGVQYXJhbWV0ZXJzOiBbJ0luc3RhbmNlIGV4dGVuZHMgQmFzZUluc3RhbmNlJ11gIGFuZFxuICogY2hpbGQgZXh0ZW5kcyBgUGFyZW50PENhbnZhc1BsdWdpbkluc3RhbmNlPmAg4oaSIGB7SW5zdGFuY2U6ICdDYW52YXNQbHVnaW5JbnN0YW5jZSd9YFxuICpcbiAqIEBwYXJhbSBiYXNlSW5mbyAtIFRoZSBiYXNlIHR5cGUuXG4gKiBAcGFyYW0gdHlwZUFyZ3VtZW50cyAtIFRoZSB0eXBlIGFyZ3VtZW50cyB0aGUgYmFzZSB0eXBlIGlzIGdpdmVuLlxuICogQHJldHVybnMgVGhlIHBhcmFtZXRlciBuYW1lcyBtYXBwZWQgdG8gdGhlaXIgYXJndW1lbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRUeXBlUGFyYW1ldGVyTWFwKGJhc2VJbmZvOiBUeXBlSW5mbywgdHlwZUFyZ3VtZW50czogc3RyaW5nW10pOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcbiAgY29uc3QgbWFwcGluZyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gIGNvbnN0IGNvdW50ID0gTWF0aC5taW4oYmFzZUluZm8udHlwZVBhcmFtZXRlcnMubGVuZ3RoLCB0eXBlQXJndW1lbnRzLmxlbmd0aCk7XG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBjb3VudDsgaW5kZXgrKykge1xuICAgIC8vIEJvdGggbGlzdHMgYXJlIGxvbmdlciB0aGFuIGBpbmRleGAuXG4gICAgY29uc3QgcGFyYW1ldGVyID0gZW5zdXJlTm9uTnVsbGFibGUoYmFzZUluZm8udHlwZVBhcmFtZXRlcnNbaW5kZXhdKTtcbiAgICBjb25zdCBhcmd1bWVudCA9IGVuc3VyZU5vbk51bGxhYmxlKHR5cGVBcmd1bWVudHNbaW5kZXhdKTtcbiAgICBjb25zdCBiYXJlUGFyYW1ldGVyID0gcGFyYW1ldGVyLnJlcGxhY2UoL1xccytleHRlbmRzXFxzKy4qJC8sICcnKTtcbiAgICBtYXBwaW5nLnNldChiYXJlUGFyYW1ldGVyLCBhcmd1bWVudCk7XG4gIH1cbiAgcmV0dXJuIG1hcHBpbmc7XG59XG5cbi8qKlxuICogUGFyc2UgZ2VuZXJpYyB0eXBlIGFyZ3VtZW50cyBmcm9tIGEgYmFzZSB0eXBlIGV4cHJlc3Npb24uXG4gKiBFLmcuLCBgSW50ZXJuYWxQbHVnaW48Q2FudmFzUGx1Z2luSW5zdGFuY2U+YCDihpIgYFsnQ2FudmFzUGx1Z2luSW5zdGFuY2UnXWBcbiAqIEhhbmRsZXMgbmVzdGVkIGFuZ2xlIGJyYWNrZXRzOiBgRm9vPEJhcjxCYXo+LCBRdXg+YCDihpIgYFsnQmFyPEJhej4nLCAnUXV4J11gXG4gKlxuICogQHBhcmFtIGJhc2VUeXBlTmFtZSAtIFRoZSBiYXNlIHR5cGUgZXhwcmVzc2lvbiwgZS5nLiBgRm9vPEJhciwgQmF6PmAuXG4gKiBAcmV0dXJucyBUaGUgdHlwZSBhcmd1bWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVR5cGVBcmd1bWVudHMoYmFzZVR5cGVOYW1lOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IG9wZW5JbmRleCA9IGJhc2VUeXBlTmFtZS5pbmRleE9mKCc8Jyk7XG4gIGlmIChvcGVuSW5kZXggPT09IC0xKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGNvbnN0IGlubmVyID0gYmFzZVR5cGVOYW1lLnNsaWNlKG9wZW5JbmRleCArIDEsIC0xKTtcbiAgY29uc3QgJGFyZ3VtZW50czogc3RyaW5nW10gPSBbXTtcbiAgbGV0IGRlcHRoID0gMDtcbiAgbGV0IGN1cnJlbnQgPSAnJztcbiAgZm9yIChjb25zdCBjaCBvZiBpbm5lcikge1xuICAgIGlmIChjaCA9PT0gJzwnKSB7XG4gICAgICBkZXB0aCsrO1xuICAgICAgY3VycmVudCArPSBjaDtcbiAgICB9IGVsc2UgaWYgKGNoID09PSAnPicpIHtcbiAgICAgIGRlcHRoLS07XG4gICAgICBjdXJyZW50ICs9IGNoO1xuICAgIH0gZWxzZSBpZiAoY2ggPT09ICcsJyAmJiBkZXB0aCA9PT0gMCkge1xuICAgICAgJGFyZ3VtZW50cy5wdXNoKGN1cnJlbnQudHJpbSgpKTtcbiAgICAgIGN1cnJlbnQgPSAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudCArPSBjaDtcbiAgICB9XG4gIH1cbiAgaWYgKGN1cnJlbnQudHJpbSgpKSB7XG4gICAgJGFyZ3VtZW50cy5wdXNoKGN1cnJlbnQudHJpbSgpKTtcbiAgfVxuICByZXR1cm4gJGFyZ3VtZW50cztcbn1cblxuLyoqXG4gKiBDb3BpZXMgZXZlcnkgaW5oZXJpdGVkIG1lbWJlciBvbnRvIGl0cyBzdWJ0eXBlcywgc3Vic3RpdHV0aW5nIHRoZSB0eXBlIGFyZ3VtZW50cyB0aGUgc3VidHlwZSBwYXNzZXMuXG4gKlxuICogQHBhcmFtIHR5cGVzIC0gVGhlIGRvY3VtZW50ZWQgdHlwZXMsIGtleWVkIGJ5IHF1YWxpZmllZCBpZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVJbmhlcml0ZWRNZW1iZXJzKHR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4pOiB2b2lkIHtcbiAgZm9yIChjb25zdCBbLCBpbmZvXSBvZiB0eXBlcykge1xuICAgIGZvciAoY29uc3QgYmFzZVR5cGVOYW1lIG9mIFsuLi5pbmZvLmJhc2VUeXBlcywgLi4uaW5mby5pbXBsZW1lbnRzVHlwZXNdKSB7XG4gICAgICBjb25zdCBjbGVhbkJhc2UgPSBiYXNlVHlwZU5hbWUucmVwbGFjZSgvPC4qPiQvLCAnJykudHJpbSgpO1xuICAgICAgY29uc3QgYmFzZUluZm8gPSBmaW5kVHlwZSh0eXBlcywgY2xlYW5CYXNlLCBpbmZvLm5hbWVzcGFjZSk7XG4gICAgICBpZiAoIWJhc2VJbmZvKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0eXBlQXJndW1lbnRzID0gcGFyc2VUeXBlQXJndW1lbnRzKGJhc2VUeXBlTmFtZSk7XG4gICAgICBjb25zdCB0eXBlUGFyYW1ldGVyTWFwID0gYnVpbGRUeXBlUGFyYW1ldGVyTWFwKGJhc2VJbmZvLCB0eXBlQXJndW1lbnRzKTtcblxuICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBiYXNlSW5mby5wcm9wZXJ0aWVzKSB7XG4gICAgICAgIGlmIChpbmZvLnByb3BlcnRpZXMuZXZlcnkoKHApID0+IHAubmFtZSAhPT0gcHJvcGVydHkubmFtZSkpIHtcbiAgICAgICAgICBpbmZvLnByb3BlcnRpZXMucHVzaChzdWJzdGl0dXRlTWVtYmVyVHlwZXMoeyAuLi5wcm9wZXJ0eSwgaW5oZXJpdGVkRnJvbTogYmFzZUluZm8ubmFtZSB9LCB0eXBlUGFyYW1ldGVyTWFwKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBtZXRob2Qgb2YgYmFzZUluZm8ubWV0aG9kcykge1xuICAgICAgICBjb25zdCBoYXNPd25NZXRob2QgPSBpbmZvLm1ldGhvZHMuc29tZSgobSkgPT4gbS5uYW1lID09PSBtZXRob2QubmFtZSAmJiBtLnNpZ25hdHVyZSA9PT0gbWV0aG9kLnNpZ25hdHVyZSk7XG4gICAgICAgIGNvbnN0IGhhc0luaGVyaXRlZE1ldGhvZCA9IGluZm8ubWV0aG9kcy5zb21lKChtKSA9PiBtLmluaGVyaXRlZEZyb20gPT09IGJhc2VJbmZvLm5hbWUgJiYgbS5vdmVybG9hZEtleSA9PT0gbWV0aG9kLm92ZXJsb2FkS2V5KTtcbiAgICAgICAgaWYgKCFoYXNPd25NZXRob2QgJiYgIWhhc0luaGVyaXRlZE1ldGhvZCkge1xuICAgICAgICAgIGluZm8ubWV0aG9kcy5wdXNoKHN1YnN0aXR1dGVNZW1iZXJUeXBlcyh7IC4uLm1ldGhvZCwgaW5oZXJpdGVkRnJvbTogYmFzZUluZm8ubmFtZSB9LCB0eXBlUGFyYW1ldGVyTWFwKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBcHBseSB0eXBlIHBhcmFtZXRlciBzdWJzdGl0dXRpb24gdG8gYWxsIHR5cGUtYmVhcmluZyBmaWVsZHMgb2YgYSBtZW1iZXJcbiAqXG4gKiBAcGFyYW0gbWVtYmVyIC0gVGhlIG1lbWJlci5cbiAqIEBwYXJhbSBtYXBwaW5nIC0gVHlwZSBwYXJhbWV0ZXIgbmFtZXMgbWFwcGVkIHRvIHRoZWlyIGFyZ3VtZW50cy5cbiAqIEByZXR1cm5zIFRoZSBtZW1iZXIgd2l0aCBpdHMgdHlwZXMgc3Vic3RpdHV0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdGl0dXRlTWVtYmVyVHlwZXMobWVtYmVyOiBNZW1iZXJJbmZvLCBtYXBwaW5nOiBNYXA8c3RyaW5nLCBzdHJpbmc+KTogTWVtYmVySW5mbyB7XG4gIHJldHVybiBtYXBwaW5nLnNpemUgPT09IDBcbiAgICA/IG1lbWJlclxuICAgIDoge1xuICAgICAgLi4ubWVtYmVyLFxuICAgICAgcGFyYW1ldGVyczogbWVtYmVyLnBhcmFtZXRlcnMubWFwKChwKSA9PiAoe1xuICAgICAgICAuLi5wLFxuICAgICAgICB0eXBlOiBzdWJzdGl0dXRlVHlwZVBhcmFtcyhwLnR5cGUsIG1hcHBpbmcpXG4gICAgICB9KSksXG4gICAgICByZXR1cm5UeXBlOiBzdWJzdGl0dXRlVHlwZVBhcmFtcyhtZW1iZXIucmV0dXJuVHlwZSwgbWFwcGluZyksXG4gICAgICBzaWduYXR1cmU6IHN1YnN0aXR1dGVUeXBlUGFyYW1zKG1lbWJlci5zaWduYXR1cmUsIG1hcHBpbmcpLFxuICAgICAgdHlwZTogc3Vic3RpdHV0ZVR5cGVQYXJhbXMobWVtYmVyLnR5cGUsIG1hcHBpbmcpXG4gICAgfTtcbn1cblxuLyoqXG4gKiBTdWJzdGl0dXRlIGdlbmVyaWMgdHlwZSBwYXJhbWV0ZXJzIGluIGEgdHlwZSBzdHJpbmcgdXNpbmcgYSBtYXBwaW5nXG4gKlxuICogQHBhcmFtIHR5cGVUZXh0IC0gVGhlIHR5cGUgdGV4dC5cbiAqIEBwYXJhbSBtYXBwaW5nIC0gVHlwZSBwYXJhbWV0ZXIgbmFtZXMgbWFwcGVkIHRvIHRoZWlyIGFyZ3VtZW50cy5cbiAqIEByZXR1cm5zIFRoZSBzdWJzdGl0dXRlZCB0eXBlIHRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdGl0dXRlVHlwZVBhcmFtcyh0eXBlVGV4dDogc3RyaW5nLCBtYXBwaW5nOiBNYXA8c3RyaW5nLCBzdHJpbmc+KTogc3RyaW5nIHtcbiAgcmV0dXJuIG1hcHBpbmcuc2l6ZSA9PT0gMFxuICAgID8gdHlwZVRleHRcbiAgICA6IHR5cGVUZXh0LnJlcGxhY2VBbGwoL1xcYig/PHR5cGVOYW1lPlthLXpBLVpdW2EtekEtWjAtOV0qKVxcYi9nLCAobWF0Y2gpID0+IHtcbiAgICAgIHJldHVybiBtYXBwaW5nLmdldChtYXRjaCkgPz8gbWF0Y2g7XG4gICAgfSk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBU0EseUJBQWtDO0FBT2xDLG9DQUF5QjtBQVdsQixTQUFTLHNCQUFzQixVQUFvQixlQUE4QztBQUN0RyxRQUFNLFVBQVUsb0JBQUksSUFBb0I7QUFDeEMsUUFBTSxRQUFRLEtBQUssSUFBSSxTQUFTLGVBQWUsUUFBUSxjQUFjLE1BQU07QUFDM0UsV0FBUyxRQUFRLEdBQUcsUUFBUSxPQUFPLFNBQVM7QUFFMUMsVUFBTSxnQkFBWSxzQ0FBa0IsU0FBUyxlQUFlLEtBQUssQ0FBQztBQUNsRSxVQUFNLGVBQVcsc0NBQWtCLGNBQWMsS0FBSyxDQUFDO0FBQ3ZELFVBQU0sZ0JBQWdCLFVBQVUsUUFBUSxvQkFBb0IsRUFBRTtBQUM5RCxZQUFRLElBQUksZUFBZSxRQUFRO0FBQUEsRUFDckM7QUFDQSxTQUFPO0FBQ1Q7QUFVTyxTQUFTLG1CQUFtQixjQUFnQztBQUNqRSxRQUFNLFlBQVksYUFBYSxRQUFRLEdBQUc7QUFDMUMsTUFBSSxjQUFjLElBQUk7QUFDcEIsV0FBTyxDQUFDO0FBQUEsRUFDVjtBQUNBLFFBQU0sUUFBUSxhQUFhLE1BQU0sWUFBWSxHQUFHLEVBQUU7QUFDbEQsUUFBTSxhQUF1QixDQUFDO0FBQzlCLE1BQUksUUFBUTtBQUNaLE1BQUksVUFBVTtBQUNkLGFBQVcsTUFBTSxPQUFPO0FBQ3RCLFFBQUksT0FBTyxLQUFLO0FBQ2Q7QUFDQSxpQkFBVztBQUFBLElBQ2IsV0FBVyxPQUFPLEtBQUs7QUFDckI7QUFDQSxpQkFBVztBQUFBLElBQ2IsV0FBVyxPQUFPLE9BQU8sVUFBVSxHQUFHO0FBQ3BDLGlCQUFXLEtBQUssUUFBUSxLQUFLLENBQUM7QUFDOUIsZ0JBQVU7QUFBQSxJQUNaLE9BQU87QUFDTCxpQkFBVztBQUFBLElBQ2I7QUFBQSxFQUNGO0FBQ0EsTUFBSSxRQUFRLEtBQUssR0FBRztBQUNsQixlQUFXLEtBQUssUUFBUSxLQUFLLENBQUM7QUFBQSxFQUNoQztBQUNBLFNBQU87QUFDVDtBQU9PLFNBQVMsd0JBQXdCLE9BQW9DO0FBQzFFLGFBQVcsQ0FBQyxFQUFFLElBQUksS0FBSyxPQUFPO0FBQzVCLGVBQVcsZ0JBQWdCLENBQUMsR0FBRyxLQUFLLFdBQVcsR0FBRyxLQUFLLGVBQWUsR0FBRztBQUN2RSxZQUFNLFlBQVksYUFBYSxRQUFRLFNBQVMsRUFBRSxFQUFFLEtBQUs7QUFDekQsWUFBTSxlQUFXLHdDQUFTLE9BQU8sV0FBVyxLQUFLLFNBQVM7QUFDMUQsVUFBSSxDQUFDLFVBQVU7QUFDYjtBQUFBLE1BQ0Y7QUFFQSxZQUFNLGdCQUFnQixtQkFBbUIsWUFBWTtBQUNyRCxZQUFNLG1CQUFtQixzQkFBc0IsVUFBVSxhQUFhO0FBRXRFLGlCQUFXLFlBQVksU0FBUyxZQUFZO0FBQzFDLFlBQUksS0FBSyxXQUFXLE1BQU0sQ0FBQyxNQUFNLEVBQUUsU0FBUyxTQUFTLElBQUksR0FBRztBQUMxRCxlQUFLLFdBQVcsS0FBSyxzQkFBc0IsRUFBRSxHQUFHLFVBQVUsZUFBZSxTQUFTLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQztBQUFBLFFBQzdHO0FBQUEsTUFDRjtBQUVBLGlCQUFXLFVBQVUsU0FBUyxTQUFTO0FBQ3JDLGNBQU0sZUFBZSxLQUFLLFFBQVEsS0FBSyxDQUFDLE1BQU0sRUFBRSxTQUFTLE9BQU8sUUFBUSxFQUFFLGNBQWMsT0FBTyxTQUFTO0FBQ3hHLGNBQU0scUJBQXFCLEtBQUssUUFBUSxLQUFLLENBQUMsTUFBTSxFQUFFLGtCQUFrQixTQUFTLFFBQVEsRUFBRSxnQkFBZ0IsT0FBTyxXQUFXO0FBQzdILFlBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxvQkFBb0I7QUFDeEMsZUFBSyxRQUFRLEtBQUssc0JBQXNCLEVBQUUsR0FBRyxRQUFRLGVBQWUsU0FBUyxLQUFLLEdBQUcsZ0JBQWdCLENBQUM7QUFBQSxRQUN4RztBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGO0FBU08sU0FBUyxzQkFBc0IsUUFBb0IsU0FBMEM7QUFDbEcsU0FBTyxRQUFRLFNBQVMsSUFDcEIsU0FDQTtBQUFBLElBQ0EsR0FBRztBQUFBLElBQ0gsWUFBWSxPQUFPLFdBQVcsSUFBSSxDQUFDLE9BQU87QUFBQSxNQUN4QyxHQUFHO0FBQUEsTUFDSCxNQUFNLHFCQUFxQixFQUFFLE1BQU0sT0FBTztBQUFBLElBQzVDLEVBQUU7QUFBQSxJQUNGLFlBQVkscUJBQXFCLE9BQU8sWUFBWSxPQUFPO0FBQUEsSUFDM0QsV0FBVyxxQkFBcUIsT0FBTyxXQUFXLE9BQU87QUFBQSxJQUN6RCxNQUFNLHFCQUFxQixPQUFPLE1BQU0sT0FBTztBQUFBLEVBQ2pEO0FBQ0o7QUFTTyxTQUFTLHFCQUFxQixVQUFrQixTQUFzQztBQUMzRixTQUFPLFFBQVEsU0FBUyxJQUNwQixXQUNBLFNBQVMsV0FBVywwQ0FBMEMsQ0FBQyxVQUFVO0FBQ3pFLFdBQU8sUUFBUSxJQUFJLEtBQUssS0FBSztBQUFBLEVBQy9CLENBQUM7QUFDTDsiLCJuYW1lcyI6W119
169
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvYXBpLWRvYy10eXBlLW1lcmdpbmcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEluaGVyaXRhbmNlIHJlc29sdXRpb246IGNvcGllcyBpbmhlcml0ZWQgbWVtYmVycyBvbnRvIHN1YnR5cGVzLCBzdWJzdGl0dXRpbmcgZ2VuZXJpYyB0eXBlIGFyZ3MuXG4gKlxuICogKEEgZG9jdW1lbnRlZCBwYWNrYWdlIGlzIGEgbm9ybWFsIGxpYnJhcnksIG5vdCBhbiBhdWdtZW50YXRpb24gb2YgYW5vdGhlciBwYWNrYWdlJ3MgZGVjbGFyYXRpb25zLCBzbyB0aGVyZSBpcyBub1xuICogb2ZmaWNpYWwtdnMtdW5vZmZpY2lhbCBtZXJnZSBtYWNoaW5lcnkgaGVyZSDigJQgb25seSB0aGUgZ2VuZXJpYyBpbmhlcml0YW5jZSBoZWxwZXJzLilcbiAqL1xuXG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5cbmltcG9ydCB0eXBlIHtcbiAgTWVtYmVySW5mbyxcbiAgVHlwZUluZm9cbn0gZnJvbSAnLi9hcGktZG9jLXR5cGVzLnRzJztcblxuaW1wb3J0IHsgZmluZFR5cGUgfSBmcm9tICcuL2FwaS1kb2MtbGluay1yZW5kZXJpbmcudHMnO1xuXG4vKipcbiAqIEJ1aWxkIGEgbWFwcGluZyBmcm9tIHBhcmVudCB0eXBlIHBhcmFtZXRlciBuYW1lcyB0byBjb25jcmV0ZSB0eXBlIGFyZ3VtZW50cy5cbiAqIEUuZy4sIHBhcmVudCBoYXMgYHR5cGVQYXJhbWV0ZXJzOiBbJ0luc3RhbmNlIGV4dGVuZHMgQmFzZUluc3RhbmNlJ11gIGFuZFxuICogY2hpbGQgZXh0ZW5kcyBgUGFyZW50PENhbnZhc1BsdWdpbkluc3RhbmNlPmAg4oaSIGB7SW5zdGFuY2U6ICdDYW52YXNQbHVnaW5JbnN0YW5jZSd9YFxuICpcbiAqIEBwYXJhbSBiYXNlSW5mbyAtIFRoZSBiYXNlIHR5cGUuXG4gKiBAcGFyYW0gdHlwZUFyZ3VtZW50cyAtIFRoZSB0eXBlIGFyZ3VtZW50cyB0aGUgYmFzZSB0eXBlIGlzIGdpdmVuLlxuICogQHJldHVybnMgVGhlIHBhcmFtZXRlciBuYW1lcyBtYXBwZWQgdG8gdGhlaXIgYXJndW1lbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRUeXBlUGFyYW1ldGVyTWFwKGJhc2VJbmZvOiBUeXBlSW5mbywgdHlwZUFyZ3VtZW50czogc3RyaW5nW10pOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcbiAgY29uc3QgbWFwcGluZyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gIGNvbnN0IGNvdW50ID0gTWF0aC5taW4oYmFzZUluZm8udHlwZVBhcmFtZXRlcnMubGVuZ3RoLCB0eXBlQXJndW1lbnRzLmxlbmd0aCk7XG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBjb3VudDsgaW5kZXgrKykge1xuICAgIC8vIEJvdGggbGlzdHMgYXJlIGxvbmdlciB0aGFuIGBpbmRleGAuXG4gICAgY29uc3QgcGFyYW1ldGVyID0gZW5zdXJlTm9uTnVsbGFibGUoYmFzZUluZm8udHlwZVBhcmFtZXRlcnNbaW5kZXhdKTtcbiAgICBjb25zdCBhcmd1bWVudCA9IGVuc3VyZU5vbk51bGxhYmxlKHR5cGVBcmd1bWVudHNbaW5kZXhdKTtcbiAgICBjb25zdCBiYXJlUGFyYW1ldGVyID0gcGFyYW1ldGVyLnJlcGxhY2UoL1xccytleHRlbmRzXFxzKy4qJC8sICcnKTtcbiAgICBtYXBwaW5nLnNldChiYXJlUGFyYW1ldGVyLCBhcmd1bWVudCk7XG4gIH1cbiAgcmV0dXJuIG1hcHBpbmc7XG59XG5cbi8qKlxuICogUGFyc2UgZ2VuZXJpYyB0eXBlIGFyZ3VtZW50cyBmcm9tIGEgYmFzZSB0eXBlIGV4cHJlc3Npb24uXG4gKiBFLmcuLCBgSW50ZXJuYWxQbHVnaW48Q2FudmFzUGx1Z2luSW5zdGFuY2U+YCDihpIgYFsnQ2FudmFzUGx1Z2luSW5zdGFuY2UnXWBcbiAqIEhhbmRsZXMgbmVzdGVkIGFuZ2xlIGJyYWNrZXRzOiBgRm9vPEJhcjxCYXo+LCBRdXg+YCDihpIgYFsnQmFyPEJhej4nLCAnUXV4J11gXG4gKlxuICogQHBhcmFtIGJhc2VUeXBlTmFtZSAtIFRoZSBiYXNlIHR5cGUgZXhwcmVzc2lvbiwgZS5nLiBgRm9vPEJhciwgQmF6PmAuXG4gKiBAcmV0dXJucyBUaGUgdHlwZSBhcmd1bWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVR5cGVBcmd1bWVudHMoYmFzZVR5cGVOYW1lOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IG9wZW5JbmRleCA9IGJhc2VUeXBlTmFtZS5pbmRleE9mKCc8Jyk7XG4gIGlmIChvcGVuSW5kZXggPT09IC0xKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGNvbnN0IGlubmVyID0gYmFzZVR5cGVOYW1lLnNsaWNlKG9wZW5JbmRleCArIDEsIC0xKTtcbiAgY29uc3QgJGFyZ3VtZW50czogc3RyaW5nW10gPSBbXTtcbiAgbGV0IGRlcHRoID0gMDtcbiAgbGV0IGN1cnJlbnQgPSAnJztcbiAgZm9yIChjb25zdCBjaCBvZiBpbm5lcikge1xuICAgIGlmIChjaCA9PT0gJzwnKSB7XG4gICAgICBkZXB0aCsrO1xuICAgICAgY3VycmVudCArPSBjaDtcbiAgICB9IGVsc2UgaWYgKGNoID09PSAnPicpIHtcbiAgICAgIGRlcHRoLS07XG4gICAgICBjdXJyZW50ICs9IGNoO1xuICAgIH0gZWxzZSBpZiAoY2ggPT09ICcsJyAmJiBkZXB0aCA9PT0gMCkge1xuICAgICAgJGFyZ3VtZW50cy5wdXNoKGN1cnJlbnQudHJpbSgpKTtcbiAgICAgIGN1cnJlbnQgPSAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudCArPSBjaDtcbiAgICB9XG4gIH1cbiAgaWYgKGN1cnJlbnQudHJpbSgpKSB7XG4gICAgJGFyZ3VtZW50cy5wdXNoKGN1cnJlbnQudHJpbSgpKTtcbiAgfVxuICByZXR1cm4gJGFyZ3VtZW50cztcbn1cblxuLyoqXG4gKiBDb3BpZXMgZXZlcnkgaW5oZXJpdGVkIG1lbWJlciBvbnRvIGl0cyBzdWJ0eXBlcywgc3Vic3RpdHV0aW5nIHRoZSB0eXBlIGFyZ3VtZW50cyB0aGUgc3VidHlwZSBwYXNzZXMuXG4gKlxuICogQHBhcmFtIHR5cGVzIC0gVGhlIGRvY3VtZW50ZWQgdHlwZXMsIGtleWVkIGJ5IHF1YWxpZmllZCBpZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVJbmhlcml0ZWRNZW1iZXJzKHR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4pOiB2b2lkIHtcbiAgY29uc3QgcmVzb2x2ZWQgPSBuZXcgU2V0PFR5cGVJbmZvPigpO1xuICBjb25zdCByZXNvbHZpbmcgPSBuZXcgU2V0PFR5cGVJbmZvPigpO1xuXG4gIGZvciAoY29uc3QgaW5mbyBvZiB0eXBlcy52YWx1ZXMoKSkge1xuICAgIHJlc29sdmUoaW5mbyk7XG4gIH1cblxuICBmdW5jdGlvbiByZXNvbHZlKGluZm86IFR5cGVJbmZvKTogdm9pZCB7XG4gICAgaWYgKHJlc29sdmVkLmhhcyhpbmZvKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXNvbHZpbmcuYWRkKGluZm8pO1xuICAgIGZvciAoY29uc3QgYmFzZVR5cGVOYW1lIG9mIFsuLi5pbmZvLmJhc2VUeXBlcywgLi4uaW5mby5pbXBsZW1lbnRzVHlwZXNdKSB7XG4gICAgICBjb25zdCBjbGVhbkJhc2UgPSBiYXNlVHlwZU5hbWUucmVwbGFjZSgvPC4qPiQvLCAnJykudHJpbSgpO1xuICAgICAgY29uc3QgYmFzZUluZm8gPSBmaW5kVHlwZSh0eXBlcywgY2xlYW5CYXNlLCBpbmZvLm5hbWVzcGFjZSk7XG4gICAgICBpZiAoIWJhc2VJbmZvIHx8IHJlc29sdmluZy5oYXMoYmFzZUluZm8pKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICByZXNvbHZlKGJhc2VJbmZvKTtcblxuICAgICAgY29uc3QgdHlwZUFyZ3VtZW50cyA9IHBhcnNlVHlwZUFyZ3VtZW50cyhiYXNlVHlwZU5hbWUpO1xuICAgICAgY29uc3QgdHlwZVBhcmFtZXRlck1hcCA9IGJ1aWxkVHlwZVBhcmFtZXRlck1hcChiYXNlSW5mbywgdHlwZUFyZ3VtZW50cyk7XG5cbiAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgYmFzZUluZm8ucHJvcGVydGllcykge1xuICAgICAgICBpZiAoaW5mby5wcm9wZXJ0aWVzLmV2ZXJ5KChwKSA9PiBwLm5hbWUgIT09IHByb3BlcnR5Lm5hbWUpKSB7XG4gICAgICAgICAgaW5mby5wcm9wZXJ0aWVzLnB1c2goc3Vic3RpdHV0ZU1lbWJlclR5cGVzKHsgLi4ucHJvcGVydHksIGluaGVyaXRlZEZyb206IGJhc2VJbmZvLm5hbWUgfSwgdHlwZVBhcmFtZXRlck1hcCkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgbWV0aG9kIG9mIGJhc2VJbmZvLm1ldGhvZHMpIHtcbiAgICAgICAgY29uc3QgaW5oZXJpdGVkTWV0aG9kID0gc3Vic3RpdHV0ZU1lbWJlclR5cGVzKHsgLi4ubWV0aG9kLCBpbmhlcml0ZWRGcm9tOiBiYXNlSW5mby5uYW1lIH0sIHR5cGVQYXJhbWV0ZXJNYXApO1xuICAgICAgICBjb25zdCBoYXNNZXRob2QgPSBpbmZvLm1ldGhvZHMuc29tZSgobSkgPT4gbS5uYW1lID09PSBpbmhlcml0ZWRNZXRob2QubmFtZSAmJiBtLnNpZ25hdHVyZSA9PT0gaW5oZXJpdGVkTWV0aG9kLnNpZ25hdHVyZSk7XG4gICAgICAgIGlmICghaGFzTWV0aG9kKSB7XG4gICAgICAgICAgaW5mby5tZXRob2RzLnB1c2goaW5oZXJpdGVkTWV0aG9kKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXNvbHZpbmcuZGVsZXRlKGluZm8pO1xuICAgIHJlc29sdmVkLmFkZChpbmZvKTtcbiAgfVxufVxuXG4vKipcbiAqIEFwcGx5IHR5cGUgcGFyYW1ldGVyIHN1YnN0aXR1dGlvbiB0byBhbGwgdHlwZS1iZWFyaW5nIGZpZWxkcyBvZiBhIG1lbWJlclxuICpcbiAqIEBwYXJhbSBtZW1iZXIgLSBUaGUgbWVtYmVyLlxuICogQHBhcmFtIG1hcHBpbmcgLSBUeXBlIHBhcmFtZXRlciBuYW1lcyBtYXBwZWQgdG8gdGhlaXIgYXJndW1lbnRzLlxuICogQHJldHVybnMgVGhlIG1lbWJlciB3aXRoIGl0cyB0eXBlcyBzdWJzdGl0dXRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0aXR1dGVNZW1iZXJUeXBlcyhtZW1iZXI6IE1lbWJlckluZm8sIG1hcHBpbmc6IE1hcDxzdHJpbmcsIHN0cmluZz4pOiBNZW1iZXJJbmZvIHtcbiAgcmV0dXJuIG1hcHBpbmcuc2l6ZSA9PT0gMFxuICAgID8gbWVtYmVyXG4gICAgOiB7XG4gICAgICAuLi5tZW1iZXIsXG4gICAgICBwYXJhbWV0ZXJzOiBtZW1iZXIucGFyYW1ldGVycy5tYXAoKHApID0+ICh7XG4gICAgICAgIC4uLnAsXG4gICAgICAgIHR5cGU6IHN1YnN0aXR1dGVUeXBlUGFyYW1zKHAudHlwZSwgbWFwcGluZylcbiAgICAgIH0pKSxcbiAgICAgIHJldHVyblR5cGU6IHN1YnN0aXR1dGVUeXBlUGFyYW1zKG1lbWJlci5yZXR1cm5UeXBlLCBtYXBwaW5nKSxcbiAgICAgIHNpZ25hdHVyZTogc3Vic3RpdHV0ZVR5cGVQYXJhbXMobWVtYmVyLnNpZ25hdHVyZSwgbWFwcGluZyksXG4gICAgICB0eXBlOiBzdWJzdGl0dXRlVHlwZVBhcmFtcyhtZW1iZXIudHlwZSwgbWFwcGluZylcbiAgICB9O1xufVxuXG4vKipcbiAqIFN1YnN0aXR1dGUgZ2VuZXJpYyB0eXBlIHBhcmFtZXRlcnMgaW4gYSB0eXBlIHN0cmluZyB1c2luZyBhIG1hcHBpbmdcbiAqXG4gKiBAcGFyYW0gdHlwZVRleHQgLSBUaGUgdHlwZSB0ZXh0LlxuICogQHBhcmFtIG1hcHBpbmcgLSBUeXBlIHBhcmFtZXRlciBuYW1lcyBtYXBwZWQgdG8gdGhlaXIgYXJndW1lbnRzLlxuICogQHJldHVybnMgVGhlIHN1YnN0aXR1dGVkIHR5cGUgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0aXR1dGVUeXBlUGFyYW1zKHR5cGVUZXh0OiBzdHJpbmcsIG1hcHBpbmc6IE1hcDxzdHJpbmcsIHN0cmluZz4pOiBzdHJpbmcge1xuICByZXR1cm4gbWFwcGluZy5zaXplID09PSAwXG4gICAgPyB0eXBlVGV4dFxuICAgIDogdHlwZVRleHQucmVwbGFjZUFsbCgvXFxiKD88dHlwZU5hbWU+W2EtekEtWl1bYS16QS1aMC05XSopXFxiL2csIChtYXRjaCkgPT4ge1xuICAgICAgcmV0dXJuIG1hcHBpbmcuZ2V0KG1hdGNoKSA/PyBtYXRjaDtcbiAgICB9KTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFTQSx5QkFBa0M7QUFPbEMsb0NBQXlCO0FBV2xCLFNBQVMsc0JBQXNCLFVBQW9CLGVBQThDO0FBQ3RHLFFBQU0sVUFBVSxvQkFBSSxJQUFvQjtBQUN4QyxRQUFNLFFBQVEsS0FBSyxJQUFJLFNBQVMsZUFBZSxRQUFRLGNBQWMsTUFBTTtBQUMzRSxXQUFTLFFBQVEsR0FBRyxRQUFRLE9BQU8sU0FBUztBQUUxQyxVQUFNLGdCQUFZLHNDQUFrQixTQUFTLGVBQWUsS0FBSyxDQUFDO0FBQ2xFLFVBQU0sZUFBVyxzQ0FBa0IsY0FBYyxLQUFLLENBQUM7QUFDdkQsVUFBTSxnQkFBZ0IsVUFBVSxRQUFRLG9CQUFvQixFQUFFO0FBQzlELFlBQVEsSUFBSSxlQUFlLFFBQVE7QUFBQSxFQUNyQztBQUNBLFNBQU87QUFDVDtBQVVPLFNBQVMsbUJBQW1CLGNBQWdDO0FBQ2pFLFFBQU0sWUFBWSxhQUFhLFFBQVEsR0FBRztBQUMxQyxNQUFJLGNBQWMsSUFBSTtBQUNwQixXQUFPLENBQUM7QUFBQSxFQUNWO0FBQ0EsUUFB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
@@ -106,7 +106,7 @@ async function lint(options) {
106
106
  const skipEntries = (0, import_link_check_skip.readLinkCheckSkipEntries)();
107
107
  const skipConfigFolder = skipEntries.length > 0 ? await writeSkipConfig(skipEntries, linkCheckFiles, rootFolder) : null;
108
108
  try {
109
- await runLinkinator(linkCheckFiles, skipConfigFolder);
109
+ await runLinkinator(linkCheckFiles, skipConfigFolder, rootFolder);
110
110
  } finally {
111
111
  if (skipConfigFolder !== null) {
112
112
  await (0, import_promises.rm)(skipConfigFolder, { force: true, recursive: true });
@@ -127,9 +127,11 @@ async function getMarkdownFiles() {
127
127
  ]
128
128
  }));
129
129
  }
130
- async function runLinkinator(linkCheckFiles, skipConfigFolder) {
130
+ async function runLinkinator(linkCheckFiles, skipConfigFolder, rootFolder) {
131
131
  await (0, import_root.execFromRoot)([
132
132
  ...(0, import_package_manager.resolveToolCommand)({ tool: "linkinator" }),
133
+ "--server-root",
134
+ (0, import_node_path.resolve)(rootFolder),
133
135
  "--concurrency",
134
136
  String((0, import_bulk_concurrency.getBulkConcurrency)(LINK_CHECK_CONCURRENCY)),
135
137
  "--timeout",
@@ -169,4 +171,4 @@ async function writeSkipConfig(skipEntries, linkCheckFiles, rootFolder) {
169
171
  0 && (module.exports = {
170
172
  lint
171
173
  });
172
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL21hcmtkb3dubGludC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogTGludCBtYXJrZG93biBkb2N1bWVudGF0aW9uIHVzaW5nIGBtYXJrZG93bmxpbnQtY2xpMmAgYW5kIGBsaW5raW5hdG9yYC5cbiAqL1xuXG5pbXBvcnQgeyB0b0FycmF5IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FzeW5jJztcbmltcG9ydCB7IGdldExpYkRlYnVnZ2VyIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2RlYnVnJztcbmltcG9ydCB7IGJhc2VuYW1lIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3BhdGgnO1xuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtcbiAgY3AsXG4gIGdsb2IsXG4gIG1rZHRlbXAsXG4gIHJlYWRGaWxlLFxuICBybSxcbiAgd3JpdGVGaWxlXG59IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQge1xuICBqb2luLFxuICBtYXRjaGVzR2xvYixcbiAgcmVsYXRpdmUsXG4gIHJlc29sdmVcbn0gZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IHR5cGUgeyBMaW5rQ2hlY2tTa2lwRW50cnkgfSBmcm9tICcuLi9saW5rLWNoZWNrLXNraXAudHMnO1xuXG5pbXBvcnQgeyBnZXRCdWxrQ29uY3VycmVuY3kgfSBmcm9tICcuLi9idWxrLWNvbmN1cnJlbmN5LnRzJztcbmltcG9ydCB7IGdldE5vbklnbm9yZWRGaWxlcyB9IGZyb20gJy4uL2dpdC50cyc7XG5pbXBvcnQge1xuICBnZXRMaW5rQ2hlY2tTa2lwV2FybmluZ3MsXG4gIG1lcmdlTGlua2luYXRvclNraXBDb25maWcsXG4gIHJlYWRMaW5rQ2hlY2tTa2lwRW50cmllc1xufSBmcm9tICcuLi9saW5rLWNoZWNrLXNraXAudHMnO1xuaW1wb3J0IHsgcmVzb2x2ZVRvb2xDb21tYW5kIH0gZnJvbSAnLi4vcGFja2FnZS1tYW5hZ2VyLnRzJztcbmltcG9ydCB7IFJlcG9QYXRocyB9IGZyb20gJy4uL3JlcG8tcGF0aHMudHMnO1xuaW1wb3J0IHtcbiAgZXhlY0Zyb21Sb290LFxuICBnZXRSb290Rm9sZGVyLFxuICByZXNvbHZlUGF0aEZyb21Sb290U2FmZVxufSBmcm9tICcuLi9yb290LnRzJztcbmltcG9ydCB7XG4gIGNoZWNrSXNJbk5vZGVNb2R1bGVzLFxuICBOT0RFX01PRFVMRVNfSUdOT1JFX0dMT0Jcbn0gZnJvbSAnLi9tYXJrZG93bmxpbnQtaWdub3Jlcy50cyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgdGhlIHtAbGluayBsaW50fSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaW50T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBmaWxlIGNvcGllZCB0byB0aGUgcHJvamVjdCByb290IHdoZW4gdGhlIHByb2plY3QgaGFzIG5vbmUuIFdpdGhvdXQgaXQsXG4gICAqIGBtYXJrZG93bmxpbnQtY2xpMmAgcnVucyB3aXRoIGl0cyBvd24gZGVmYXVsdHMuXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0Q29uZmlnRmlsZVBhdGg/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEdsb2JzLCByZWxhdGl2ZSB0byB0aGUgcm9vdCBmb2xkZXIsIG9mIG1hcmtkb3duIGZpbGVzIHRvIGxlYXZlIG91dCBvZiB0aGUgYGxpbmtpbmF0b3JgIHBhc3Mgb25seTtcbiAgICogYG1hcmtkb3dubGludC1jbGkyYCBzdGlsbCBsaW50cyB0aGVtLlxuICAgKlxuICAgKiBGb3IgYSBkb2N1bWVudGF0aW9uIHNpdGUgd2hvc2UgcGFnZXMgbGluayB0byBlYWNoIG90aGVyIGJhc2UtYWJzb2x1dGVseSAoYC88c2l0ZS1iYXNlPi9ndWlkZXMvLi4uYCk6IHRob3NlXG4gICAqIGxpbmtzIHJlc29sdmUgb25seSBhZ2FpbnN0IHRoZSBCVUlMVCBzaXRlLCBzbyBgbGlua2luYXRvcmAgcmVwb3J0cyBlYWNoIG9uZSBhcyBhIDQwNCwgYW5kIHRoZSBzaXRlJ3Mgb3duXG4gICAqIGJ1aWxkIGlzIHdoYXQgY2hlY2tzIHRoZW0uXG4gICAqXG4gICAqIEBleGFtcGxlIGBbJ2RvY3MvKionXWBcbiAgICovXG4gIHJlYWRvbmx5IGxpbmtDaGVja0V4Y2x1ZGVHbG9icz86IHJlYWRvbmx5IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBmaWxlIHBhdGhzIHRvIGxpbnQuIElmIG9taXR0ZWQsIGxpbnRzIHRoZSBlbnRpcmUgcHJvamVjdC5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGhzPzogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZml4IGxpbnRpbmcgaXNzdWVzIGF1dG9tYXRpY2FsbHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEZpeD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogTGludCBtYXJrZG93biBkb2N1bWVudGF0aW9uIHVzaW5nIGBtYXJrZG93bmxpbnQtY2xpMmAgYW5kIGBsaW5raW5hdG9yYC5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSB7QGxpbmsgTGludE9wdGlvbnN9LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGludChvcHRpb25zPzogTGludE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBkZWZhdWx0Q29uZmlnRmlsZVBhdGgsIGxpbmtDaGVja0V4Y2x1ZGVHbG9icyA9IFtdLCBwYXRocywgc2hvdWxkRml4ID0gZmFsc2UgfSA9IG9wdGlvbnMgPz8ge307XG4gIGNvbnN0IGNvbmZpZ0ZpbGVzID0gW1xuICAgIFJlcG9QYXRocy5NYXJrZG93bmxpbnRDbGkyQ29uZmlnSnNvbmMsXG4gICAgUmVwb1BhdGhzLk1hcmtkb3dubGludENsaTJDb25maWdZYW1sLFxuICAgIFJlcG9QYXRocy5NYXJrZG93bmxpbnRDbGkyQ29uZmlnQ2pzLFxuICAgIFJlcG9QYXRocy5NYXJrZG93bmxpbnRDbGkyQ29uZmlnTWpzLFxuICAgIFJlcG9QYXRocy5NYXJrZG93bmxpbnRDb25maWdKc29uYyxcbiAgICBSZXBvUGF0aHMuTWFya2Rvd25saW50Q29uZmlnSnNvbixcbiAgICBSZXBvUGF0aHMuTWFya2Rvd25saW50Q29uZmlnWWFtbCxcbiAgICBSZXBvUGF0aHMuTWFya2Rvd25saW50Q29uZmlnWW1sLFxuICAgIFJlcG9QYXRocy5NYXJrZG93bmxpbnRDb25maWdDanMsXG4gICAgUmVwb1BhdGhzLk1hcmtkb3dubGludENvbmZpZ01qc1xuICBdO1xuXG4gIGNvbnN0IGRvZXNDb25maWdGaWxlRXhpc3QgPSBjb25maWdGaWxlcy5zb21lKChjb25maWdGaWxlKSA9PiB7XG4gICAgY29uc3QgY29uZmlnRmlsZVBhdGggPSByZXNvbHZlUGF0aEZyb21Sb290U2FmZSh7IHBhdGg6IGNvbmZpZ0ZpbGUgfSk7XG4gICAgcmV0dXJuIGV4aXN0c1N5bmMoY29uZmlnRmlsZVBhdGgpO1xuICB9KTtcblxuICBpZiAoIWRvZXNDb25maWdGaWxlRXhpc3QgJiYgZGVmYXVsdENvbmZpZ0ZpbGVQYXRoKSB7XG4gICAgZ2V0TGliRGVidWdnZXIoJ21hcmtkb3dubGludDpsaW50JykoJ21hcmtkb3dubGludCBjb25maWd1cmF0aW9uIGZpbGUgbm90IGZvdW5kLiBDcmVhdGluZyBkZWZhdWx0IGNvbmZpZy4uLicpO1xuICAgIGF3YWl0IGNwKGRlZmF1bHRDb25maWdGaWxlUGF0aCwgcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmUoeyBwYXRoOiBiYXNlbmFtZShkZWZhdWx0Q29uZmlnRmlsZVBhdGgpIH0pKTtcbiAgfVxuXG4gIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBUaGUgcGF0aHMtcHJvdmlkZWQgYnJhbmNoZXMgYXJlIG9ubHkgZXhlcmNpc2VkIGJ5IGNvbnN1bWVyIHByb2plY3RzIHBhc3NpbmcgZmlsZSBsaXN0cy4gKi9cbiAgY29uc3QgdGFyZ2V0cyA9IHBhdGhzPy5sZW5ndGggPyBwYXRocyA6IFtSZXBvUGF0aHMuQ3VycmVudEZvbGRlcl07XG4gIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gIGF3YWl0IGV4ZWNGcm9tUm9vdChbLi4ucmVzb2x2ZVRvb2xDb21tYW5kKHsgdG9vbDogJ21hcmtkb3dubGludC1jbGkyJyB9KSwgLi4uKHNob3VsZEZpeCA/IFsnLS1maXgnXSA6IFtdKSwgeyBiYXRjaGVkQXJndW1lbnRzOiB0YXJnZXRzIH1dKTtcblxuICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gVGhlIHBhdGhzLXByb3ZpZGVkIGJyYW5jaCBpcyBvbmx5IGV4ZXJjaXNlZCBieSBjb25zdW1lciBwcm9qZWN0cyBwYXNzaW5nIGZpbGUgbGlzdHMuICovXG4gIGNvbnN0IHJvb3RGb2xkZXIgPSBnZXRSb290Rm9sZGVyKCkgPz8gcHJvY2Vzcy5jd2QoKTtcbiAgY29uc3QgbWRGaWxlcyA9IHBhdGhzPy5sZW5ndGhcbiAgICA/IHBhdGhzLm1hcCgocCkgPT4gcmVsYXRpdmUocm9vdEZvbGRlciwgcCkucmVwbGFjZUFsbCgnXFxcXCcsICcvJykgfHwgcClcbiAgICA6IGF3YWl0IGdldE1hcmtkb3duRmlsZXMoKTtcbiAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgY29uc3QgbGlua0NoZWNrRmlsZXMgPSBtZEZpbGVzLmZpbHRlcigobWRGaWxlKSA9PiBsaW5rQ2hlY2tFeGNsdWRlR2xvYnMuZXZlcnkoKGV4Y2x1ZGVHbG9iKSA9PiAhbWF0Y2hlc0dsb2IobWRGaWxlLCBleGNsdWRlR2xvYikpKTtcbiAgLy8gYGxpbmtpbmF0b3JgIHdpdGggbm8gTE9DQVRJT04gcHJpbnRzIGl0cyB1c2FnZSBhbmQgZXhpdHMgbm9uLXplcm8sIHNvIGEgbGlzdCBlbXB0aWVkIGJ5IHRoZSBleGNsdXNpb25zIGhhcyBub3RoaW5nIHRvIGNoZWNrLlxuICBpZiAobGlua0NoZWNrRmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHNraXBFbnRyaWVzID0gcmVhZExpbmtDaGVja1NraXBFbnRyaWVzKCk7XG4gIGNvbnN0IHNraXBDb25maWdGb2xkZXIgPSBza2lwRW50cmllcy5sZW5ndGggPiAwID8gYXdhaXQgd3JpdGVTa2lwQ29uZmlnKHNraXBFbnRyaWVzLCBsaW5rQ2hlY2tGaWxlcywgcm9vdEZvbGRlcikgOiBudWxsO1xuICB0cnkge1xuICAgIGF3YWl0IHJ1bkxpbmtpbmF0b3IobGlua0NoZWNrRmlsZXMsIHNraXBDb25maWdGb2xkZXIpO1xuICB9IGZpbmFsbHkge1xuICAgIGlmIChza2lwQ29uZmlnRm9sZGVyICE9PSBudWxsKSB7XG4gICAgICBhd2FpdCBybShza2lwQ29uZmlnRm9sZGVyLCB7IGZvcmNlOiB0cnVlLCByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVGhlIGdpdCBwYXRoc3BlYyBtYXRjaGluZyBldmVyeSBtYXJrZG93biBmaWxlIGluIHRoZSByZXBvc2l0b3J5LCBhdCBhbnkgZGVwdGguXG4gKi9cbmNvbnN0IE1BUktET1dOX1BBVEhTUEVDID0gJyoubWQnO1xuY29uc3QgTElOS19DSEVDS19DT05DVVJSRU5DWSA9IDEwMDtcbmNvbnN0IExJTktfQ0hFQ0tfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAzMF8wMDA7XG5jb25zdCBMSU5LSU5BVE9SX0NPTkZJR19GSUxFX05BTUUgPSAnbGlua2luYXRvci5jb25maWcuanNvbic7XG5cbi8qKlxuICogTGlzdHMgdGhlIG1hcmtkb3duIGZpbGVzIHRvIGhhbmQgdG8gYGxpbmtpbmF0b3JgLlxuICpcbiAqIGBsaW5raW5hdG9yYCB0YWtlcyBhIGZpbGUgbGlzdCByYXRoZXIgdGhhbiBhbiBpZ25vcmUgY29uZmlndXJhdGlvbiwgc28gdGhlIGdpdGlnbm9yZWQgZmlsZXMgaGF2ZSB0byBiZVxuICogZHJvcHBlZCBiZWZvcmUgaXQgaXMgaW52b2tlZC4gR2l0IGl0c2VsZiBhbnN3ZXJzIHRoYXQgKG5lc3RlZCBpZ25vcmUgZmlsZXMsIGAhYCBuZWdhdGlvbnMgYW5kIGFsbCk7IHRoZVxuICogaGFuZC1tYWludGFpbmVkIGdsb2IgZXhjbHVzaW9ucyBiZWxvdyBhcmUgb25seSB0aGUgZmFsbGJhY2sgZm9yIGEgY2hlY2tvdXQgd2l0aG91dCBnaXQsIGFuZCB0aGV5IGFyZSB0aGVcbiAqIHZlcnkgbGlzdHMgdGhpcyBpbmRpcmVjdGlvbiBleGlzdHMgdG8gc3RvcCBmcm9tIGRyaWZ0aW5nLlxuICpcbiAqIFRoZSBgbm9kZV9tb2R1bGVzYCBmaWx0ZXIgaXMgYXBwbGllZCB0byB0aGUgZ2l0LWRlcml2ZWQgbGlzdCB0b28sIGFuZCBkZWxpYmVyYXRlbHkgc286IGdpdCBvbmx5IHNraXBzXG4gKiB3aGF0IHRoZSByZXBvc2l0b3J5IGFza2VkIGl0IHRvIHNraXAsIGFuZCBhIHJlcG9zaXRvcnkgY2FuIGRlbGliZXJhdGVseSBUUkFDSyBhIHZlbmRvcmVkIGBub2RlX21vZHVsZXNgXG4gKiB0cmVlLiBUaGF0IGlzIHRoZSBvbmUgZXhjbHVzaW9uIGAuZ2l0aWdub3JlYCBjYW5ub3QgYW5zd2VyIOKAlCBzZWUgYG1hcmtkb3dubGludC1pZ25vcmVzLnRzYC4gQXBwbHlpbmcgaXRcbiAqIGhlcmUga2VlcHMgYGxpbmtpbmF0b3JgIGluIHN0ZXAgd2l0aCB0aGUgbWFya2Rvd25saW50IGhhbGYsIHdoaWNoIGlnbm9yZXMgdGhlIHNhbWUgcGF0aHMgYnkgZ2xvYi5cbiAqXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIG1hcmtkb3duIGZpbGUgcGF0aHMsIHJlbGF0aXZlIHRvIHRoZSByb290IGZvbGRlci5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0TWFya2Rvd25GaWxlcygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IG5vbklnbm9yZWRGaWxlcyA9IGF3YWl0IGdldE5vbklnbm9yZWRGaWxlcyh7IHBhdHRlcm5zOiBbTUFSS0RPV05fUEFUSFNQRUNdIH0pO1xuICByZXR1cm4gbm9uSWdub3JlZEZpbGVzXG4gICAgPyBub25JZ25vcmVkRmlsZXMuZmlsdGVyKChwYXRoKSA9PiAhY2hlY2tJc0luTm9kZU1vZHVsZXMocGF0aCkpXG4gICAgOiAoYXdhaXQgdG9BcnJheShnbG9iKFsnKiovKi5tZCddLCB7XG4gICAgICBleGNsdWRlOiBbXG4gICAgICAgICcuZ2l0LyoqJyxcbiAgICAgICAgJ2Rpc3QvKionLFxuICAgICAgICBOT0RFX01PRFVMRVNfSUdOT1JFX0dMT0JcbiAgICAgIF1cbiAgICB9KSkpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBydW5MaW5raW5hdG9yKGxpbmtDaGVja0ZpbGVzOiBzdHJpbmdbXSwgc2tpcENvbmZpZ0ZvbGRlcjogbnVsbCB8IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAvLyBFcnJvciByZXRyaWVzIHVzZSBtaWxsaXNlY29uZCBqaXR0ZXIuIE9taXQgLS1yZXRyeTogaXRzIHNlcGFyYXRlIFJldHJ5LUFmdGVyIG1vZGUgY2FuIHNsZWVwIGZvciB0aG91c2FuZHNcbiAgLy8gb2Ygc2Vjb25kcyBvbiBhIDQyOSB3ZSBhbHJlYWR5IGFjY2VwdCBhcyBhIHdhcm5pbmcuIFJlcXVlc3QgdGltZW91dHMgcmVtYWluIGVycm9ycyBhbmQga2VlcCB0aGVpciByZXRyaWVzLlxuICAvLyBBIDQwOCBpcyB0aGUgc2VydmVyJ3Mgb3duIHRpbWVvdXQgKHNoaWVsZHMuaW8gYW5zd2VycyBpdCB3aGVuIGl0cyB1cHN0cmVhbSBpcyBzbG93KTsgLS1yZXRyeS1lcnJvcnMgbmV2ZXIgcmV0cmllc1xuICAvLyBpdCwgc28gaXQgaXMgYSB3YXJuaW5nIGxpa2UgYSA0MjkgcmF0aGVyIHRoYW4gYSBnYXRlIGZhaWx1cmUgdGhhdCBzYXlzIG5vdGhpbmcgYWJvdXQgd2hldGhlciB0aGUgbGluayBleGlzdHMuXG4gIGF3YWl0IGV4ZWNGcm9tUm9vdChbXG4gICAgLi4ucmVzb2x2ZVRvb2xDb21tYW5kKHsgdG9vbDogJ2xpbmtpbmF0b3InIH0pLFxuICAgICctLWNvbmN1cnJlbmN5JyxcbiAgICBTdHJpbmcoZ2V0QnVsa0NvbmN1cnJlbmN5KExJTktfQ0hFQ0tfQ09OQ1VSUkVOQ1kpKSxcbiAgICAnLS10aW1lb3V0JyxcbiAgICBTdHJpbmcoTElOS19DSEVDS19USU1FT1VUX0lOX01JTExJU0VDT05EUyksXG4gICAgJy0tcmV0cnktZXJyb3JzJyxcbiAgICAnLS1yZXRyeS1lcnJvcnMtY291bnQnLFxuICAgICczJyxcbiAgICAnLS1yZXRyeS1lcnJvcnMtaml0dGVyJyxcbiAgICAnNTAwMCcsXG4gICAgJy0tc3RhdHVzLWNvZGUnLFxuICAgICc0Mjk6d2FybicsXG4gICAgJy0tc3RhdHVzLWNvZGUnLFxuICAgICc0MDg6d2FybicsXG4gICAgJy0tdXJsLXJld3JpdGUtc2VhcmNoJyxcbiAgICBTdHJpbmcucmF3YGh0dHBzOi8vd3d3XFwubnBtanNcXC5jb20vcGFja2FnZS9gLFxuICAgICctLXVybC1yZXdyaXRlLXJlcGxhY2UnLFxuICAgICdodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy8nLFxuICAgIC4uLihza2lwQ29uZmlnRm9sZGVyID09PSBudWxsID8gW10gOiBbJy0tY29uZmlnJywgam9pbihza2lwQ29uZmlnRm9sZGVyLCBMSU5LSU5BVE9SX0NPTkZJR19GSUxFX05BTUUpXSksXG4gICAgeyBiYXRjaGVkQXJndW1lbnRzOiBsaW5rQ2hlY2tGaWxlcyB9XG4gIF0pO1xufVxuXG4vKipcbiAqIFdhcm5zIGFib3V0IGV2ZXJ5IGxpbmsgdGhlIHNraXAgZW50cmllcyB0YWtlIG91dCBvZiB0aGUgY2hlY2ssIGFuZCB3cml0ZXMgdGhlIGBsaW5raW5hdG9yYCBjb25maWcgdGhhdCBza2lwcyB0aGVtLlxuICpcbiAqIEBwYXJhbSBza2lwRW50cmllcyAtIFRoZSBza2lwIGVudHJpZXMuXG4gKiBAcGFyYW0gbGlua0NoZWNrRmlsZXMgLSBUaGUgbWFya2Rvd24gZmlsZXMgaGFuZGVkIHRvIGBsaW5raW5hdG9yYCwgcmVsYXRpdmUgdG8gdGhlIHJvb3QgZm9sZGVyLlxuICogQHBhcmFtIHJvb3RGb2xkZXIgLSBUaGUgcm9vdCBmb2xkZXIuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHRlbXBvcmFyeSBmb2xkZXIgaG9sZGluZyB0aGUgY29uZmlnOyB0aGUgY2FsbGVyIHJlbW92ZXMgaXQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHdyaXRlU2tpcENvbmZpZyhza2lwRW50cmllczogcmVhZG9ubHkgTGlua0NoZWNrU2tpcEVudHJ5W10sIGxpbmtDaGVja0ZpbGVzOiByZWFkb25seSBzdHJpbmdbXSwgcm9vdEZvbGRlcjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3Qgc291cmNlRmlsZXMgPSBhd2FpdCBQcm9taXNlLmFsbChsaW5rQ2hlY2tGaWxlcy5tYXAoYXN5bmMgKHBhdGgpID0+ICh7XG4gICAgY29udGVudDogYXdhaXQgcmVhZEZpbGUocmVzb2x2ZShyb290Rm9sZGVyLCBwYXRoKSwgJ3V0Zi04JyksXG4gICAgcGF0aFxuICB9KSkpO1xuICBmb3IgKGNvbnN0IHdhcm5pbmcgb2YgZ2V0TGlua0NoZWNrU2tpcFdhcm5pbmdzKHNraXBFbnRyaWVzLCBzb3VyY2VGaWxlcykpIHtcbiAgICBjb25zb2xlLndhcm4od2FybmluZyk7XG4gIH1cblxuICBjb25zdCBwcm9qZWN0Q29uZmlnUGF0aCA9IHJlc29sdmUocm9vdEZvbGRlciwgTElOS0lOQVRPUl9DT05GSUdfRklMRV9OQU1FKTtcbiAgY29uc3QgcHJvamVjdENvbmZpZzogdW5rbm93biA9IGV4aXN0c1N5bmMocHJvamVjdENvbmZpZ1BhdGgpID8gSlNPTi5wYXJzZShhd2FpdCByZWFkRmlsZShwcm9qZWN0Q29uZmlnUGF0aCwgJ3V0Zi04JykpIDogdW5kZWZpbmVkO1xuICBjb25zdCBza2lwQ29uZmlnRm9sZGVyID0gYXdhaXQgbWtkdGVtcChqb2luKHRtcGRpcigpLCAnbGluay1jaGVjay1za2lwLScpKTtcbiAgYXdhaXQgd3JpdGVGaWxlKGpvaW4oc2tpcENvbmZpZ0ZvbGRlciwgTElOS0lOQVRPUl9DT05GSUdfRklMRV9OQU1FKSwgSlNPTi5zdHJpbmdpZnkobWVyZ2VMaW5raW5hdG9yU2tpcENvbmZpZyhwcm9qZWN0Q29uZmlnLCBza2lwRW50cmllcykpKTtcbiAgcmV0dXJuIHNraXBDb25maWdGb2xkZXI7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU1BLG1CQUF3QjtBQUN4QixtQkFBK0I7QUFDL0Isa0JBQXlCO0FBQ3pCLHFCQUEyQjtBQUMzQixzQkFPTztBQUNQLHFCQUF1QjtBQUN2Qix1QkFLTztBQUlQLDhCQUFtQztBQUNuQyxpQkFBbUM7QUFDbkMsNkJBSU87QUFDUCw2QkFBbUM7QUFDbkMsd0JBQTBCO0FBQzFCLGtCQUlPO0FBQ1Asa0NBR087QUEwQ1AsZUFBc0IsS0FBSyxTQUFzQztBQUMvRCxRQUFNLEVBQUUsdUJBQXVCLHdCQUF3QixDQUFDLEdBQUcsT0FBTyxZQUFZLE1BQU0sSUFBSSxXQUFXLENBQUM7QUFDcEcsUUFBTSxjQUFjO0FBQUEsSUFDbEIsNEJBQVU7QUFBQSxJQUNWLDRCQUFVO0FBQUEsSUFDViw0QkFBVTtBQUFBLElBQ1YsNEJBQVU7QUFBQSxJQUNWLDRCQUFVO0FBQUEsSUFDViw0QkFBVTtBQUFBLElBQ1YsNEJBQVU7QUFBQSxJQUNWLDRCQUFVO0FBQUEsSUFDViw0QkFBVTtBQUFBLElBQ1YsNEJBQVU7QUFBQSxFQUNaO0FBRUEsUUFBTSxzQkFBc0IsWUFBWSxLQUFLLENBQUMsZUFBZTtBQUMzRCxVQUFNLHFCQUFpQixxQ0FBd0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNuRSxlQUFPLDJCQUFXLGNB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
174
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL21hcmtkb3dubGludC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogTGludCBtYXJrZG93biBkb2N1bWVudGF0aW9uIHVzaW5nIGBtYXJrZG93bmxpbnQtY2xpMmAgYW5kIGBsaW5raW5hdG9yYC5cbiAqL1xuXG5pbXBvcnQgeyB0b0FycmF5IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FzeW5jJztcbmltcG9ydCB7IGdldExpYkRlYnVnZ2VyIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2RlYnVnJztcbmltcG9ydCB7IGJhc2VuYW1lIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3BhdGgnO1xuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtcbiAgY3AsXG4gIGdsb2IsXG4gIG1rZHRlbXAsXG4gIHJlYWRGaWxlLFxuICBybSxcbiAgd3JpdGVGaWxlXG59IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQge1xuICBqb2luLFxuICBtYXRjaGVzR2xvYixcbiAgcmVsYXRpdmUsXG4gIHJlc29sdmVcbn0gZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IHR5cGUgeyBMaW5rQ2hlY2tTa2lwRW50cnkgfSBmcm9tICcuLi9saW5rLWNoZWNrLXNraXAudHMnO1xuXG5pbXBvcnQgeyBnZXRCdWxrQ29uY3VycmVuY3kgfSBmcm9tICcuLi9idWxrLWNvbmN1cnJlbmN5LnRzJztcbmltcG9ydCB7IGdldE5vbklnbm9yZWRGaWxlcyB9IGZyb20gJy4uL2dpdC50cyc7XG5pbXBvcnQge1xuICBnZXRMaW5rQ2hlY2tTa2lwV2FybmluZ3MsXG4gIG1lcmdlTGlua2luYXRvclNraXBDb25maWcsXG4gIHJlYWRMaW5rQ2hlY2tTa2lwRW50cmllc1xufSBmcm9tICcuLi9saW5rLWNoZWNrLXNraXAudHMnO1xuaW1wb3J0IHsgcmVzb2x2ZVRvb2xDb21tYW5kIH0gZnJvbSAnLi4vcGFja2FnZS1tYW5hZ2VyLnRzJztcbmltcG9ydCB7IFJlcG9QYXRocyB9IGZyb20gJy4uL3JlcG8tcGF0aHMudHMnO1xuaW1wb3J0IHtcbiAgZXhlY0Zyb21Sb290LFxuICBnZXRSb290Rm9sZGVyLFxuICByZXNvbHZlUGF0aEZyb21Sb290U2FmZVxufSBmcm9tICcuLi9yb290LnRzJztcbmltcG9ydCB7XG4gIGNoZWNrSXNJbk5vZGVNb2R1bGVzLFxuICBOT0RFX01PRFVMRVNfSUdOT1JFX0dMT0Jcbn0gZnJvbSAnLi9tYXJrZG93bmxpbnQtaWdub3Jlcy50cyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgdGhlIHtAbGluayBsaW50fSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaW50T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBmaWxlIGNvcGllZCB0byB0aGUgcHJvamVjdCByb290IHdoZW4gdGhlIHByb2plY3QgaGFzIG5vbmUuIFdpdGhvdXQgaXQsXG4gICAqIGBtYXJrZG93bmxpbnQtY2xpMmAgcnVucyB3aXRoIGl0cyBvd24gZGVmYXVsdHMuXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0Q29uZmlnRmlsZVBhdGg/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEdsb2JzLCByZWxhdGl2ZSB0byB0aGUgcm9vdCBmb2xkZXIsIG9mIG1hcmtkb3duIGZpbGVzIHRvIGxlYXZlIG91dCBvZiB0aGUgYGxpbmtpbmF0b3JgIHBhc3Mgb25seTtcbiAgICogYG1hcmtkb3dubGludC1jbGkyYCBzdGlsbCBsaW50cyB0aGVtLlxuICAgKlxuICAgKiBGb3IgYSBkb2N1bWVudGF0aW9uIHNpdGUgd2hvc2UgcGFnZXMgbGluayB0byBlYWNoIG90aGVyIGJhc2UtYWJzb2x1dGVseSAoYC88c2l0ZS1iYXNlPi9ndWlkZXMvLi4uYCk6IHRob3NlXG4gICAqIGxpbmtzIHJlc29sdmUgb25seSBhZ2FpbnN0IHRoZSBCVUlMVCBzaXRlLCBzbyBgbGlua2luYXRvcmAgcmVwb3J0cyBlYWNoIG9uZSBhcyBhIDQwNCwgYW5kIHRoZSBzaXRlJ3Mgb3duXG4gICAqIGJ1aWxkIGlzIHdoYXQgY2hlY2tzIHRoZW0uXG4gICAqXG4gICAqIEBleGFtcGxlIGBbJ2RvY3MvKionXWBcbiAgICovXG4gIHJlYWRvbmx5IGxpbmtDaGVja0V4Y2x1ZGVHbG9icz86IHJlYWRvbmx5IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBmaWxlIHBhdGhzIHRvIGxpbnQuIElmIG9taXR0ZWQsIGxpbnRzIHRoZSBlbnRpcmUgcHJvamVjdC5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGhzPzogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZml4IGxpbnRpbmcgaXNzdWVzIGF1dG9tYXRpY2FsbHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEZpeD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogTGludCBtYXJrZG93biBkb2N1bWVudGF0aW9uIHVzaW5nIGBtYXJrZG93bmxpbnQtY2xpMmAgYW5kIGBsaW5raW5hdG9yYC5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSB7QGxpbmsgTGludE9wdGlvbnN9LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGludChvcHRpb25zPzogTGludE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBkZWZhdWx0Q29uZmlnRmlsZVBhdGgsIGxpbmtDaGVja0V4Y2x1ZGVHbG9icyA9IFtdLCBwYXRocywgc2hvdWxkRml4ID0gZmFsc2UgfSA9IG9wdGlvbnMgPz8ge307XG4gIGNvbnN0IGNvbmZpZ0ZpbGVzID0gW1xuICAgIFJlcG9QYXRocy5NYXJrZG93bmxpbnRDbGkyQ29uZmlnSnNvbmMsXG4gICAgUmVwb1BhdGhzLk1hcmtkb3dubGludENsaTJDb25maWdZYW1sLFxuICAgIFJlcG9QYXRocy5NYXJrZG93bmxpbnRDbGkyQ29uZmlnQ2pzLFxuICAgIFJlcG9QYXRocy5NYXJrZG93bmxpbnRDbGkyQ29uZmlnTWpzLFxuICAgIFJlcG9QYXRocy5NYXJrZG93bmxpbnRDb25maWdKc29uYyxcbiAgICBSZXBvUGF0aHMuTWFya2Rvd25saW50Q29uZmlnSnNvbixcbiAgICBSZXBvUGF0aHMuTWFya2Rvd25saW50Q29uZmlnWWFtbCxcbiAgICBSZXBvUGF0aHMuTWFya2Rvd25saW50Q29uZmlnWW1sLFxuICAgIFJlcG9QYXRocy5NYXJrZG93bmxpbnRDb25maWdDanMsXG4gICAgUmVwb1BhdGhzLk1hcmtkb3dubGludENvbmZpZ01qc1xuICBdO1xuXG4gIGNvbnN0IGRvZXNDb25maWdGaWxlRXhpc3QgPSBjb25maWdGaWxlcy5zb21lKChjb25maWdGaWxlKSA9PiB7XG4gICAgY29uc3QgY29uZmlnRmlsZVBhdGggPSByZXNvbHZlUGF0aEZyb21Sb290U2FmZSh7IHBhdGg6IGNvbmZpZ0ZpbGUgfSk7XG4gICAgcmV0dXJuIGV4aXN0c1N5bmMoY29uZmlnRmlsZVBhdGgpO1xuICB9KTtcblxuICBpZiAoIWRvZXNDb25maWdGaWxlRXhpc3QgJiYgZGVmYXVsdENvbmZpZ0ZpbGVQYXRoKSB7XG4gICAgZ2V0TGliRGVidWdnZXIoJ21hcmtkb3dubGludDpsaW50JykoJ21hcmtkb3dubGludCBjb25maWd1cmF0aW9uIGZpbGUgbm90IGZvdW5kLiBDcmVhdGluZyBkZWZhdWx0IGNvbmZpZy4uLicpO1xuICAgIGF3YWl0IGNwKGRlZmF1bHRDb25maWdGaWxlUGF0aCwgcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmUoeyBwYXRoOiBiYXNlbmFtZShkZWZhdWx0Q29uZmlnRmlsZVBhdGgpIH0pKTtcbiAgfVxuXG4gIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBUaGUgcGF0aHMtcHJvdmlkZWQgYnJhbmNoZXMgYXJlIG9ubHkgZXhlcmNpc2VkIGJ5IGNvbnN1bWVyIHByb2plY3RzIHBhc3NpbmcgZmlsZSBsaXN0cy4gKi9cbiAgY29uc3QgdGFyZ2V0cyA9IHBhdGhzPy5sZW5ndGggPyBwYXRocyA6IFtSZXBvUGF0aHMuQ3VycmVudEZvbGRlcl07XG4gIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gIGF3YWl0IGV4ZWNGcm9tUm9vdChbLi4ucmVzb2x2ZVRvb2xDb21tYW5kKHsgdG9vbDogJ21hcmtkb3dubGludC1jbGkyJyB9KSwgLi4uKHNob3VsZEZpeCA/IFsnLS1maXgnXSA6IFtdKSwgeyBiYXRjaGVkQXJndW1lbnRzOiB0YXJnZXRzIH1dKTtcblxuICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gVGhlIHBhdGhzLXByb3ZpZGVkIGJyYW5jaCBpcyBvbmx5IGV4ZXJjaXNlZCBieSBjb25zdW1lciBwcm9qZWN0cyBwYXNzaW5nIGZpbGUgbGlzdHMuICovXG4gIGNvbnN0IHJvb3RGb2xkZXIgPSBnZXRSb290Rm9sZGVyKCkgPz8gcHJvY2Vzcy5jd2QoKTtcbiAgY29uc3QgbWRGaWxlcyA9IHBhdGhzPy5sZW5ndGhcbiAgICA/IHBhdGhzLm1hcCgocCkgPT4gcmVsYXRpdmUocm9vdEZvbGRlciwgcCkucmVwbGFjZUFsbCgnXFxcXCcsICcvJykgfHwgcClcbiAgICA6IGF3YWl0IGdldE1hcmtkb3duRmlsZXMoKTtcbiAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgY29uc3QgbGlua0NoZWNrRmlsZXMgPSBtZEZpbGVzLmZpbHRlcigobWRGaWxlKSA9PiBsaW5rQ2hlY2tFeGNsdWRlR2xvYnMuZXZlcnkoKGV4Y2x1ZGVHbG9iKSA9PiAhbWF0Y2hlc0dsb2IobWRGaWxlLCBleGNsdWRlR2xvYikpKTtcbiAgLy8gYGxpbmtpbmF0b3JgIHdpdGggbm8gTE9DQVRJT04gcHJpbnRzIGl0cyB1c2FnZSBhbmQgZXhpdHMgbm9uLXplcm8sIHNvIGEgbGlzdCBlbXB0aWVkIGJ5IHRoZSBleGNsdXNpb25zIGhhcyBub3RoaW5nIHRvIGNoZWNrLlxuICBpZiAobGlua0NoZWNrRmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHNraXBFbnRyaWVzID0gcmVhZExpbmtDaGVja1NraXBFbnRyaWVzKCk7XG4gIGNvbnN0IHNraXBDb25maWdGb2xkZXIgPSBza2lwRW50cmllcy5sZW5ndGggPiAwID8gYXdhaXQgd3JpdGVTa2lwQ29uZmlnKHNraXBFbnRyaWVzLCBsaW5rQ2hlY2tGaWxlcywgcm9vdEZvbGRlcikgOiBudWxsO1xuICB0cnkge1xuICAgIGF3YWl0IHJ1bkxpbmtpbmF0b3IobGlua0NoZWNrRmlsZXMsIHNraXBDb25maWdGb2xkZXIsIHJvb3RGb2xkZXIpO1xuICB9IGZpbmFsbHkge1xuICAgIGlmIChza2lwQ29uZmlnRm9sZGVyICE9PSBudWxsKSB7XG4gICAgICBhd2FpdCBybShza2lwQ29uZmlnRm9sZGVyLCB7IGZvcmNlOiB0cnVlLCByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVGhlIGdpdCBwYXRoc3BlYyBtYXRjaGluZyBldmVyeSBtYXJrZG93biBmaWxlIGluIHRoZSByZXBvc2l0b3J5LCBhdCBhbnkgZGVwdGguXG4gKi9cbmNvbnN0IE1BUktET1dOX1BBVEhTUEVDID0gJyoubWQnO1xuY29uc3QgTElOS19DSEVDS19DT05DVVJSRU5DWSA9IDEwMDtcbmNvbnN0IExJTktfQ0hFQ0tfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAzMF8wMDA7XG5jb25zdCBMSU5LSU5BVE9SX0NPTkZJR19GSUxFX05BTUUgPSAnbGlua2luYXRvci5jb25maWcuanNvbic7XG5cbi8qKlxuICogTGlzdHMgdGhlIG1hcmtkb3duIGZpbGVzIHRvIGhhbmQgdG8gYGxpbmtpbmF0b3JgLlxuICpcbiAqIGBsaW5raW5hdG9yYCB0YWtlcyBhIGZpbGUgbGlzdCByYXRoZXIgdGhhbiBhbiBpZ25vcmUgY29uZmlndXJhdGlvbiwgc28gdGhlIGdpdGlnbm9yZWQgZmlsZXMgaGF2ZSB0byBiZVxuICogZHJvcHBlZCBiZWZvcmUgaXQgaXMgaW52b2tlZC4gR2l0IGl0c2VsZiBhbnN3ZXJzIHRoYXQgKG5lc3RlZCBpZ25vcmUgZmlsZXMsIGAhYCBuZWdhdGlvbnMgYW5kIGFsbCk7IHRoZVxuICogaGFuZC1tYWludGFpbmVkIGdsb2IgZXhjbHVzaW9ucyBiZWxvdyBhcmUgb25seSB0aGUgZmFsbGJhY2sgZm9yIGEgY2hlY2tvdXQgd2l0aG91dCBnaXQsIGFuZCB0aGV5IGFyZSB0aGVcbiAqIHZlcnkgbGlzdHMgdGhpcyBpbmRpcmVjdGlvbiBleGlzdHMgdG8gc3RvcCBmcm9tIGRyaWZ0aW5nLlxuICpcbiAqIFRoZSBgbm9kZV9tb2R1bGVzYCBmaWx0ZXIgaXMgYXBwbGllZCB0byB0aGUgZ2l0LWRlcml2ZWQgbGlzdCB0b28sIGFuZCBkZWxpYmVyYXRlbHkgc286IGdpdCBvbmx5IHNraXBzXG4gKiB3aGF0IHRoZSByZXBvc2l0b3J5IGFza2VkIGl0IHRvIHNraXAsIGFuZCBhIHJlcG9zaXRvcnkgY2FuIGRlbGliZXJhdGVseSBUUkFDSyBhIHZlbmRvcmVkIGBub2RlX21vZHVsZXNgXG4gKiB0cmVlLiBUaGF0IGlzIHRoZSBvbmUgZXhjbHVzaW9uIGAuZ2l0aWdub3JlYCBjYW5ub3QgYW5zd2VyIOKAlCBzZWUgYG1hcmtkb3dubGludC1pZ25vcmVzLnRzYC4gQXBwbHlpbmcgaXRcbiAqIGhlcmUga2VlcHMgYGxpbmtpbmF0b3JgIGluIHN0ZXAgd2l0aCB0aGUgbWFya2Rvd25saW50IGhhbGYsIHdoaWNoIGlnbm9yZXMgdGhlIHNhbWUgcGF0aHMgYnkgZ2xvYi5cbiAqXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIG1hcmtkb3duIGZpbGUgcGF0aHMsIHJlbGF0aXZlIHRvIHRoZSByb290IGZvbGRlci5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0TWFya2Rvd25GaWxlcygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IG5vbklnbm9yZWRGaWxlcyA9IGF3YWl0IGdldE5vbklnbm9yZWRGaWxlcyh7IHBhdHRlcm5zOiBbTUFSS0RPV05fUEFUSFNQRUNdIH0pO1xuICByZXR1cm4gbm9uSWdub3JlZEZpbGVzXG4gICAgPyBub25JZ25vcmVkRmlsZXMuZmlsdGVyKChwYXRoKSA9PiAhY2hlY2tJc0luTm9kZU1vZHVsZXMocGF0aCkpXG4gICAgOiAoYXdhaXQgdG9BcnJheShnbG9iKFsnKiovKi5tZCddLCB7XG4gICAgICBleGNsdWRlOiBbXG4gICAgICAgICcuZ2l0LyoqJyxcbiAgICAgICAgJ2Rpc3QvKionLFxuICAgICAgICBOT0RFX01PRFVMRVNfSUdOT1JFX0dMT0JcbiAgICAgIF1cbiAgICB9KSkpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBydW5MaW5raW5hdG9yKGxpbmtDaGVja0ZpbGVzOiBzdHJpbmdbXSwgc2tpcENvbmZpZ0ZvbGRlcjogbnVsbCB8IHN0cmluZywgcm9vdEZvbGRlcjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIC8vIFRoZSBzZXJ2ZXIgcm9vdCBpcyBhbHdheXMgdGhlIHJvb3QgZm9sZGVyLCBhbmQgQUJTT0xVVEUuIExlZnQgdG8gaXRzZWxmLCBsaW5raW5hdG9yIHNlcnZlcyBhIGxvbmUgZmlsZSdzIG93blxuICAvLyBmb2xkZXIsIHNvIGEgc2luZ2xlIHN0YWdlZCBmaWxlIChvciBhIGJhdGNoIG9mIG9uZSkgNDA0cyBldmVyeSBgLi4vYCBsaW5rIGFib3ZlIGl0LiBBIHJlbGF0aXZlIGAuYCBpcyBub1xuICAvLyBhbnN3ZXIgZWl0aGVyOiBsaW5raW5hdG9yIDguMS4wIHN0cmlwcyBvbmUgbGVhZGluZyBzZWdtZW50IHBlciBzZWdtZW50IG9mIHRoZSByb290LCBgLmAgaW5jbHVkZWQsIHNvIGl0XG4gIC8vIGxvb2tlZCBmb3IgYGRvY3Mvd3JpdGUtdXAubWRgIGFzIGB3cml0ZS11cC5tZGAuXG4gIC8vIEVycm9yIHJldHJpZXMgdXNlIG1pbGxpc2Vjb25kIGppdHRlci4gT21pdCAtLXJldHJ5OiBpdHMgc2VwYXJhdGUgUmV0cnktQWZ0ZXIgbW9kZSBjYW4gc2xlZXAgZm9yIHRob3VzYW5kc1xuICAvLyBvZiBzZWNvbmRzIG9uIGEgNDI5IHdlIGFscmVhZHkgYWNjZXB0IGFzIGEgd2FybmluZy4gUmVxdWVzdCB0aW1lb3V0cyByZW1haW4gZXJyb3JzIGFuZCBrZWVwIHRoZWlyIHJldHJpZXMuXG4gIC8vIEEgNDA4IGlzIHRoZSBzZXJ2ZXIncyBvd24gdGltZW91dCAoc2hpZWxkcy5pbyBhbnN3ZXJzIGl0IHdoZW4gaXRzIHVwc3RyZWFtIGlzIHNsb3cpOyAtLXJldHJ5LWVycm9ycyBuZXZlciByZXRyaWVzXG4gIC8vIGl0LCBzbyBpdCBpcyBhIHdhcm5pbmcgbGlrZSBhIDQyOSByYXRoZXIgdGhhbiBhIGdhdGUgZmFpbHVyZSB0aGF0IHNheXMgbm90aGluZyBhYm91dCB3aGV0aGVyIHRoZSBsaW5rIGV4aXN0cy5cbiAgYXdhaXQgZXhlY0Zyb21Sb290KFtcbiAgICAuLi5yZXNvbHZlVG9vbENvbW1hbmQoeyB0b29sOiAnbGlua2luYXRvcicgfSksXG4gICAgJy0tc2VydmVyLXJvb3QnLFxuICAgIHJlc29sdmUocm9vdEZvbGRlciksXG4gICAgJy0tY29uY3VycmVuY3knLFxuICAgIFN0cmluZyhnZXRCdWxrQ29uY3VycmVuY3koTElOS19DSEVDS19DT05DVVJSRU5DWSkpLFxuICAgICctLXRpbWVvdXQnLFxuICAgIFN0cmluZyhMSU5LX0NIRUNLX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKSxcbiAgICAnLS1yZXRyeS1lcnJvcnMnLFxuICAgICctLXJldHJ5LWVycm9ycy1jb3VudCcsXG4gICAgJzMnLFxuICAgICctLXJldHJ5LWVycm9ycy1qaXR0ZXInLFxuICAgICc1MDAwJyxcbiAgICAnLS1zdGF0dXMtY29kZScsXG4gICAgJzQyOTp3YXJuJyxcbiAgICAnLS1zdGF0dXMtY29kZScsXG4gICAgJzQwODp3YXJuJyxcbiAgICAnLS11cmwtcmV3cml0ZS1zZWFyY2gnLFxuICAgIFN0cmluZy5yYXdgaHR0cHM6Ly93d3dcXC5ucG1qc1xcLmNvbS9wYWNrYWdlL2AsXG4gICAgJy0tdXJsLXJld3JpdGUtcmVwbGFjZScsXG4gICAgJ2h0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnLycsXG4gICAgLi4uKHNraXBDb25maWdGb2xkZXIgPT09IG51bGwgPyBbXSA6IFsnLS1jb25maWcnLCBqb2luKHNraXBDb25maWdGb2xkZXIsIExJTktJTkFUT1JfQ09ORklHX0ZJTEVfTkFNRSldKSxcbiAgICB7IGJhdGNoZWRBcmd1bWVudHM6IGxpbmtDaGVja0ZpbGVzIH1cbiAgXSk7XG59XG5cbi8qKlxuICogV2FybnMgYWJvdXQgZXZlcnkgbGluayB0aGUgc2tpcCBlbnRyaWVzIHRha2Ugb3V0IG9mIHRoZSBjaGVjaywgYW5kIHdyaXRlcyB0aGUgYGxpbmtpbmF0b3JgIGNvbmZpZyB0aGF0IHNraXBzIHRoZW0uXG4gKlxuICogQHBhcmFtIHNraXBFbnRyaWVzIC0gVGhlIHNraXAgZW50cmllcy5cbiAqIEBwYXJhbSBsaW5rQ2hlY2tGaWxlcyAtIFRoZSBtYXJrZG93biBmaWxlcyBoYW5kZWQgdG8gYGxpbmtpbmF0b3JgLCByZWxhdGl2ZSB0byB0aGUgcm9vdCBmb2xkZXIuXG4gKiBAcGFyYW0gcm9vdEZvbGRlciAtIFRoZSByb290IGZvbGRlci5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdGVtcG9yYXJ5IGZvbGRlciBob2xkaW5nIHRoZSBjb25maWc7IHRoZSBjYWxsZXIgcmVtb3ZlcyBpdC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gd3JpdGVTa2lwQ29uZmlnKHNraXBFbnRyaWVzOiByZWFkb25seSBMaW5rQ2hlY2tTa2lwRW50cnlbXSwgbGlua0NoZWNrRmlsZXM6IHJlYWRvbmx5IHN0cmluZ1tdLCByb290Rm9sZGVyOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBzb3VyY2VGaWxlcyA9IGF3YWl0IFByb21pc2UuYWxsKGxpbmtDaGVja0ZpbGVzLm1hcChhc3luYyAocGF0aCkgPT4gKHtcbiAgICBjb250ZW50OiBhd2FpdCByZWFkRmlsZShyZXNvbHZlKHJvb3RGb2xkZXIsIHBhdGgpLCAndXRmLTgnKSxcbiAgICBwYXRoXG4gIH0pKSk7XG4gIGZvciAoY29uc3Qgd2FybmluZyBvZiBnZXRMaW5rQ2hlY2tTa2lwV2FybmluZ3Moc2tpcEVudHJpZXMsIHNvdXJjZUZpbGVzKSkge1xuICAgIGNvbnNvbGUud2Fybih3YXJuaW5nKTtcbiAgfVxuXG4gIGNvbnN0IHByb2plY3RDb25maWdQYXRoID0gcmVzb2x2ZShyb290Rm9sZGVyLCBMSU5LSU5BVE9SX0NPTkZJR19GSUxFX05BTUUpO1xuICBjb25zdCBwcm9qZWN0Q29uZmlnOiB1bmtub3duID0gZXhpc3RzU3luYyhwcm9qZWN0Q29uZmlnUGF0aCkgPyBKU09OLnBhcnNlKGF3YWl0IHJlYWRGaWxlKHByb2plY3RDb25maWdQYXRoLCAndXRmLTgnKSkgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IHNraXBDb25maWdGb2xkZXIgPSBhd2FpdCBta2R0ZW1wKGpvaW4odG1wZGlyKCksICdsaW5rLWNoZWNrLXNraXAtJykpO1xuICBhd2FpdCB3cml0ZUZpbGUoam9pbihza2lwQ29uZmlnRm9sZGVyLCBMSU5LSU5BVE9SX0NPTkZJR19GSUxFX05BTUUpLCBKU09OLnN0cmluZ2lmeShtZXJnZUxpbmtpbmF0b3JTa2lwQ29uZmlnKHByb2plY3RDb25maWcsIHNraXBFbnRyaWVzKSkpO1xuICByZXR1cm4gc2tpcENvbmZpZ0ZvbGRlcjtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBTUEsbUJBQXdCO0FBQ3hCLG1CQUErQjtBQUMvQixrQkFBeUI7QUFDekIscUJBQTJCO0FBQzNCLHNCQU9PO0FBQ1AscUJBQXVCO0FBQ3ZCLHVC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
@@ -121,7 +121,16 @@ function memberHref(memberSlugString, inheritedFrom, allTypes, currentNamespace)
121
121
  if (!inheritedFrom) {
122
122
  return `./${memberSlugString}/`;
123
123
  }
124
- const parentInfo = findType(allTypes, inheritedFrom, currentNamespace);
124
+ let parentInfo = findType(allTypes, inheritedFrom, currentNamespace);
125
+ const visited = /* @__PURE__ */ new Set();
126
+ while (parentInfo && !doesMemberPageExist(parentInfo.namespace, parentInfo.name, memberSlugString)) {
127
+ if (visited.has(parentInfo)) {
128
+ return "";
129
+ }
130
+ visited.add(parentInfo);
131
+ const member = parentInfo.properties.find((property) => memberRouteSegment(property.name) === memberSlugString) ?? parentInfo.methods.find((method) => overloadRouteSegment(method.overloadKey) === memberSlugString);
132
+ parentInfo = member?.inheritedFrom ? findType(allTypes, member.inheritedFrom, parentInfo.namespace) : void 0;
133
+ }
125
134
  if (!parentInfo || !doesMemberPageExist(parentInfo.namespace, parentInfo.name, memberSlugString)) {
126
135
  return "";
127
136
  }
@@ -353,4 +362,4 @@ export {
353
362
  typeHref,
354
363
  typeLink
355
364
  };
356
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvYXBpLWRvYy1saW5rLXJlbmRlcmluZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVHlwZS1saW5rIHJlbmRlcmluZzogdHVybnMgdHlwZSB0ZXh0IGFuZCBpbmxpbmUgbGluayB0YWdzIGludG8gbWFya2Rvd24gbGlua3MgdG8gZ2VuZXJhdGVkIHBhZ2VzXG4gKiBvciBleHRlcm5hbCByZWZlcmVuY2VzIChUeXBlU2NyaXB0IGhhbmRib29rLCBNRE4gV2ViIEFQSSwgSlMgZ2xvYmFscykuXG4gKi9cblxuaW1wb3J0IHtcbiAgZ2V0TWFuZGF0b3J5TmFtZWRHcm91cCxcbiAgZ2V0T3B0aW9uYWxOYW1lZEdyb3VwXG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9yZWctZXhwJztcbmltcG9ydCB7IHJlYWRGaWxlU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgVHlwZUluZm8sXG4gIFdlYkFwaUVudHJ5XG59IGZyb20gJy4vYXBpLWRvYy10eXBlcy50cyc7XG5cbmltcG9ydCB7XG4gIEdFTkVSSUNfVFlQRV9QQVJBTVMsXG4gIFRTX0dMT0JBTF9UWVBFUyxcbiAgVFNfUFJJTUlUSVZFX1RZUEVTLFxuICBUU19VVElMSVRZX1RZUEVTXG59IGZyb20gJy4vYXBpLWRvYy1jb25zdGFudHMudHMnO1xuaW1wb3J0IHsgZ2V0UGFja2FnZVR5cGVVcmwgfSBmcm9tICcuL2FwaS1kb2MtcGFja2FnZS1zaXRlcy50cyc7XG5pbXBvcnQge1xuICB0b1JvdXRlU2VnbWVudCxcbiAgdG9Sb3V0ZVNlZ21lbnRQcmVzZXJ2ZUNhc2Vcbn0gZnJvbSAnLi9hcGktZG9jLXJvdXRlLXNlZ21lbnRzLnRzJztcbmltcG9ydCB7IGdldEFwaURvY1NldHRpbmdzIH0gZnJvbSAnLi9hcGktZG9jLXNldHRpbmdzLnRzJztcbmltcG9ydCB7XG4gIGVzY2FwZU1keEFuZ2xlQnJhY2tldHMsXG4gIGVzY2FwZU1keFByb3NlLFxuICBnZXROYW1lc3BhY2VEaXJlY3RvcnksXG4gIG1lbWJlclJvdXRlU2VnbWVudCxcbiAgbWVtYmVyU2x1ZyxcbiAgb3ZlcmxvYWRSb3V0ZVNlZ21lbnQsXG4gIG92ZXJsb2FkU2x1ZyxcbiAgcmVwbGFjZVJlZ0V4cE1hdGNoZXMsXG4gIHNlZ21lbnRNYXJrZG93blxufSBmcm9tICcuL2FwaS1kb2MtdGV4dC11dGlscy50cyc7XG5cbi8qKlxuTG9hZGVkIGZyb20gdHlwZWRvYy1wbHVnaW4tbWRuLWxpbmtzIGRhdGEgYXQgcnVudGltZVxuICovXG4vKipcbk1vZHVsZS1sZXZlbCBtdXRhYmxlIHN0YXRlLCBoZWxkIGluIG9uZSBvYmplY3Qgc28gZWFjaCBtdXRhdGlvbiBuYW1lcyBpdCBleHBsaWNpdGx5LlxuICovXG5pbnRlcmZhY2UgTW9kdWxlU3RhdGUge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9yZWFkb25seS1pbnRlcmZhY2UtbWVtYmVycyAtLSBUaGUgV2ViIEFQSSBtZXRhZGF0YSBjYWNoZSBpcyByZXBsYWNlZCBhZnRlciBsb2FkaW5nLlxuICB3ZWJBcGlUeXBlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbmNvbnN0IG1vZHVsZVN0YXRlOiBNb2R1bGVTdGF0ZSA9IHtcbiAgd2ViQXBpVHlwZXM6IHt9XG59O1xuLyoqXG5Mb3dlcmNhc2VkLCBjb2xsaXNpb24tZGlzYW1iaWd1YXRlZCBPTi1ESVNLIHNlZ21lbnQgcGVyIHF1YWxpZmllZCB0eXBlIGtleSAoYCR7bmFtZXNwYWNlfSMke25hbWV9YCkuXG4gKi9cbmNvbnN0IHR5cGVGaWxlU2VnbWVudHMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuLyoqXG5DYXNlLXByZXNlcnZlZCBVUkwvcm91dGUgc2VnbWVudCBwZXIgcXVhbGlmaWVkIHR5cGUga2V5IChgJHtuYW1lc3BhY2V9IyR7bmFtZX1gKS5cbiAqL1xuY29uc3QgdHlwZVJvdXRlU2VnbWVudHMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuXG4vKipcbiAqIFJvdXRlLXNlZ21lbnQga2V5cyBvZiB0aGUgbWVtYmVyIHBhZ2VzIHRoYXQgYGdlbmVyYXRlTWVtYmVyUGFnZXNgIHdpbGwgYWN0dWFsbHkgZW1pdCwgYXNcbiAqIGAke25hbWVzcGFjZX0jJHtUeXBlTmFtZX0jJHtyb3V0ZVNlZ21lbnR9YC4gT25seSBOT04taW5oZXJpdGVkIHByb3BlcnRpZXMgYW5kIG5vbi1pbmhlcml0ZWQgbWV0aG9kXG4gKiBvdmVybG9hZCBrZXlzIGdldCBhIHBhZ2UsIHNvIHRoaXMgbGV0cyBsaW5rIGVtaXR0ZXJzIGF2b2lkIHBvaW50aW5nIGF0IGEgbWVtYmVyIHBhZ2UgdGhhdCBpcyBuZXZlclxuICogZ2VuZXJhdGVkIChhbiBpbmhlcml0ZWQgbWVtYmVyLCBhbiBlbnVtIG1lbWJlciwgYW4gb3B0aW9ucy1pbnRlcmZhY2UgbWVtYmVyKSDigJQgd2hpY2ggd291bGQgNDA0LlxuICovXG5jb25zdCBnZW5lcmF0ZWRNZW1iZXJQYWdlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4vKipcbiAqIFdoZXRoZXIgYSBtZW1iZXIgcGFnZSB3aWxsIGJlIGdlbmVyYXRlZCBmb3IgYHJvdXRlU2VnbWVudGAgb24gdGhlIGdpdmVuIHR5cGUuXG4gKlxuICogQHBhcmFtIG5hbWVzcGFjZSAtIFRoZSB0eXBlJ3MgbmFtZXNwYWNlLlxuICogQHBhcmFtIHR5cGVOYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHBhcmFtIHJvdXRlU2VnbWVudCAtIFRoZSBtZW1iZXIncyByb3V0ZSBzZWdtZW50LlxuICogQHJldHVybnMgV2hldGhlciB0aGUgcGFnZSBpcyBnZW5lcmF0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkb2VzTWVtYmVyUGFnZUV4aXN0KG5hbWVzcGFjZTogc3RyaW5nLCB0eXBlTmFtZTogc3RyaW5nLCByb3V0ZVNlZ21lbnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gZ2VuZXJhdGVkTWVtYmVyUGFnZXMuaGFzKGAke25hbWVzcGFjZX0jJHt0eXBlTmFtZX0jJHtyb3V0ZVNlZ21lbnR9YCk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIGJhcmUgdHlwZSBuYW1lIHRvIGEgZG9jdW1lbnRlZCBgVHlwZUluZm9gLlxuICpcbiAqIFRoZSBtb2RlbCBtYXAgaXMga2V5ZWQgYnkgYSBxdWFsaWZpZWQgYCR7bmFtZXNwYWNlfSMke25hbWV9YCBpZGVudGl0eSwgYmVjYXVzZSBhIHBhY2thZ2VcbiAqIGNhbiBleHBvcnQgdGhlIHNhbWUgc2ltcGxlIG5hbWUgZnJvbSBkaWZmZXJlbnQgbW9kdWxlcy4gUmVzb2x1dGlvbiBpcyBiZXN0LWVmZm9ydDpcbiAqICAgMS4gUHJlZmVyIGEgdHlwZSBpbiBgY3VycmVudE5hbWVzcGFjZWAgKHRoZSByZWZlcmVuY2luZyBwYWdlJ3MgbW9kdWxlKS5cbiAqICAgMi4gT3RoZXJ3aXNlLCBpZiBleGFjdGx5IG9uZSB0eXBlIGFjcm9zcyBhbGwgbW9kdWxlcyBoYXMgdGhhdCBiYXJlIG5hbWUsIHVzZSBpdC5cbiAqICAgMy4gSWYgdGhlIGJhcmUgbmFtZSBpcyBhbWJpZ3VvdXMgKG11bHRpcGxlIG1vZHVsZXMpLCBnaXZlIHVwIChjYWxsZXIgcmVuZGVycyBwbGFpbiBjb2RlKS5cbiAqXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSB0eXBlJ3MgbmFtZS5cbiAqIEBwYXJhbSBjdXJyZW50TmFtZXNwYWNlIC0gVGhlIG5hbWVzcGFjZSBvZiB0aGUgcmVmZXJlbmNpbmcgcGFnZSwgcHJlZmVycmVkIHdoZW4gdGhlIG5hbWUgaXMgYW1iaWd1b3VzLlxuICogQHJldHVybnMgVGhlIHR5cGUsIG9yIGB1bmRlZmluZWRgIHdoZW4gbm8gdHlwZSBvciBtb3JlIHRoYW4gb25lIGhhcyB0aGF0IG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kVHlwZShhbGxUeXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+LCBuYW1lOiBzdHJpbmcsIGN1cnJlbnROYW1lc3BhY2U/OiBzdHJpbmcpOiBUeXBlSW5mbyB8IHVuZGVmaW5lZCB7XG4gIGlmIChjdXJyZW50TmFtZXNwYWNlICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBxdWFsaWZpZWQgPSBhbGxUeXBlcy5nZXQoYCR7Y3VycmVudE5hbWVzcGFjZX0jJHtuYW1lfWApO1xuICAgIGlmIChxdWFsaWZpZWQpIHtcbiAgICAgIHJldHVybiBxdWFsaWZpZWQ7XG4gICAgfVxuICB9XG4gIGxldCBmb3VuZDogVHlwZUluZm8gfCB1bmRlZmluZWQ7XG4gIGxldCBtYXRjaENvdW50ID0gMDtcbiAgZm9yIChjb25zdCBpbmZvIG9mIGFsbFR5cGVzLnZhbHVlcygpKSB7XG4gICAgaWYgKGluZm8ubmFtZSAhPT0gbmFtZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgZm91bmQgPSBpbmZvO1xuICAgIG1hdGNoQ291bnQrKztcbiAgICBpZiAobWF0Y2hDb3VudCA+IDEpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBtYXRjaENvdW50ID09PSAxID8gZm91bmQgOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogTGluayBhIGJhc2UgdHlwZSBleHByZXNzaW9uIGZvciB0aGUgXCJFeHRlbmRzOlwiIGxpbmUuXG4gKiBTaW1wbGUgdHlwZSByZWZlcmVuY2VzIChpZGVudGlmaWVyICsgb3B0aW9uYWwgZ2VuZXJpY3MpIHVzZSByZW5kZXJUeXBlV2l0aExpbmtzXG4gKiBzbyBlYWNoIHR5cGUgYXJndW1lbnQgZ2V0cyBpdHMgb3duIGxpbmsuXG4gKiBDb21wbGV4IGV4cHJlc3Npb25zIChvYmplY3QgdHlwZXMsIGludGVyc2VjdGlvbnMsIGV0Yy4pIGZhbGwgYmFjayB0byB0eXBlTGlua1xuICogdG8gYXZvaWQgTURYIHBhcnNpbmcgaXNzdWVzIHdpdGggYHtgLCBgfWAsIGB8YCBldGMuXG4gKlxuICogQHBhcmFtIHR5cGVOYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICogQHBhcmFtIGN1cnJlbnROYW1lc3BhY2UgLSBUaGUgbmFtZXNwYWNlIG9mIHRoZSByZWZlcmVuY2luZyBwYWdlLCBwcmVmZXJyZWQgd2hlbiB0aGUgbmFtZSBpcyBhbWJpZ3VvdXMuXG4gKiBAcmV0dXJucyBUaGUgbGlua2VkIHR5cGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsaW5rQmFzZVR5cGUodHlwZU5hbWU6IHN0cmluZywgYWxsVHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPiwgY3VycmVudE5hbWVzcGFjZT86IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGlzU2ltcGxlVHlwZVJlZiA9IC9eW2EtekEtWl1bYS16QS1aMC05XSooPzo8Lio+KT8kLy50ZXN0KHR5cGVOYW1lLnRyaW0oKSk7XG4gIHJldHVybiBpc1NpbXBsZVR5cGVSZWYgPyBlc2NhcGVNZHhBbmdsZUJyYWNrZXRzKHJlbmRlclR5cGVXaXRoTGlua3ModHlwZU5hbWUsIGFsbFR5cGVzLCB1bmRlZmluZWQsIGN1cnJlbnROYW1lc3BhY2UpKSA6IHR5cGVMaW5rKHR5cGVOYW1lLCBhbGxUeXBlcywgY3VycmVudE5hbWVzcGFjZSk7XG59XG5cbi8qKlxuICogTG9hZHMgdGhlIFdlYiBBUEkgbGlua3MgYHR5cGVkb2MtcGx1Z2luLW1kbi1saW5rc2Agc2hpcHMsIGlmIGl0IGlzIGluc3RhbGxlZC4gV2l0aG91dCBpdCwgV2ViIEFQSSB0eXBlcyByZW5kZXJcbiAqIHVubGlua2VkLlxuICpcbiAqIEBwYXJhbSByb290RGlyZWN0b3J5IC0gVGhlIGZvbGRlciB3aG9zZSBgbm9kZV9tb2R1bGVzYCBob2xkcyB0aGUgcGFja2FnZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRFeHRlcm5hbFR5cGVNYXBzKHJvb3REaXJlY3Rvcnk6IHN0cmluZyk6IHZvaWQge1xuICB0cnkge1xuICAgIGNvbnN0IGRhdGFQYXRoID0gam9pbihyb290RGlyZWN0b3J5LCAnbm9kZV9tb2R1bGVzL3R5cGVkb2MtcGx1Z2luLW1kbi1saW5rcy9kYXRhL3dlYi1hcGkuanNvbicpO1xuICAgIG1vZHVsZVN0YXRlLndlYkFwaVR5cGVzID0gSlNPTi5wYXJzZShyZWFkRmlsZVN5bmMoZGF0YVBhdGgsICd1dGYtOCcpKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjb25zb2xlLndhcm4oYExvYWRlZCAke1N0cmluZyhPYmplY3Qua2V5cyhtb2R1bGVTdGF0ZS53ZWJBcGlUeXBlcykubGVuZ3RoKX0gV2ViIEFQSSB0eXBlIGxpbmtzYCk7XG4gIH0gY2F0Y2gge1xuICAgIG1vZHVsZVN0YXRlLndlYkFwaVR5cGVzID0ge307XG4gICAgY29uc29sZS53YXJuKCd0eXBlZG9jLXBsdWdpbi1tZG4tbGlua3MgZGF0YSBub3QgZm91bmQg4oCUIFdlYiBBUEkgbGlua3Mgd2lsbCBiZSB1bmF2YWlsYWJsZS4nKTtcbiAgfVxufVxuXG4vKipcbiAqIENvbnZlcnQgaW5saW5lIG1hcmtkb3duIHRvIEhUTUwgZm9yIHVzZSBpbiBjb21wb25lbnQgcHJvcHMgd2l0aCBzZXQ6aHRtbFxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQuXG4gKiBAcmV0dXJucyBUaGUgSFRNTC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hcmtkb3duVG9IdG1sKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGVzY2FwZWQgPSB0ZXh0XG4gICAgLnJlcGxhY2VBbGwoJyYnLCAnJmFtcDsnKVxuICAgIC5yZXBsYWNlQWxsKCc8JywgJyZsdDsnKVxuICAgIC5yZXBsYWNlQWxsKCc+JywgJyZndDsnKTtcbiAgcmV0dXJuIHJlcGxhY2VSZWdFeHBNYXRjaGVzKGVzY2FwZWQsIC9cXFsoPzx0ZXh0PlteXFxdXSspXFxdXFwoKD88dXJsPlteKV0rKVxcKS9nLCAobWF0Y2gpID0+IHtcbiAgICBjb25zdCBsaW5rVGV4dCA9IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICd0ZXh0Jyk7XG4gICAgY29uc3QgdXJsID0gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ3VybCcpO1xuICAgIC8vIEEgcmVsYXRpdmUgVVJMIGhlcmUgaXMgYW4gaWxsdXN0cmF0aXZlIGV4YW1wbGUgcGF0aCBpbiBUU0RvYyAoZS5nLiBgW2Zvb10oZm9vLnBuZylgKSwgbm90IGFcbiAgICAvLyByZWFsIG5hdmlnYWJsZSBsaW5rIOKAlCByZW5kZXIgaXQgYXMgbGl0ZXJhbCBpbmxpbmUgY29kZSBzbyBpdCBuZWl0aGVyIDQwNHMgbm9yIGxvc2VzIG1lYW5pbmcuXG4gICAgcmV0dXJuIC9eKD86aHR0cHM/OlxcL1xcL3xcXC98I3xtYWlsdG86KS8udGVzdCh1cmwpID8gYDxhIGhyZWY9XCIke3VybH1cIj4ke2xpbmtUZXh0fTwvYT5gIDogYDxjb2RlPlske2xpbmtUZXh0fV0oJHt1cmx9KTwvY29kZT5gO1xuICB9KVxuICAgIC5yZXBsYWNlQWxsKC9gKD88Y29kZT5bXmBdKylgL2csICc8Y29kZT4kPGNvZGU+PC9jb2RlPicpXG4gICAgLnJlcGxhY2VBbGwoJ1xcbicsICc8YnIvPicpO1xufVxuXG4vKipcbiAqIEJ1aWxkIHRoZSBocmVmIGZvciBhIG1lbWJlciwgcG9pbnRpbmcgdG8gdGhlIHBhcmVudCB0eXBlJ3MgcGFnZSBpZiBpbmhlcml0ZWRcbiAqXG4gKiBAcGFyYW0gbWVtYmVyU2x1Z1N0cmluZyAtIFRoZSBtZW1iZXIncyByb3V0ZSBzZWdtZW50LlxuICogQHBhcmFtIGluaGVyaXRlZEZyb20gLSBUaGUgbmFtZSBvZiB0aGUgdHlwZSB0aGUgbWVtYmVyIGlzIGluaGVyaXRlZCBmcm9tLCBvciBhbiBlbXB0eSBzdHJpbmcgZm9yIGFuIG93biBtZW1iZXIuXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKiBAcGFyYW0gY3VycmVudE5hbWVzcGFjZSAtIFRoZSBuYW1lc3BhY2Ugb2YgdGhlIHJlZmVyZW5jaW5nIHBhZ2UsIHByZWZlcnJlZCB3aGVuIHRoZSBuYW1lIGlzIGFtYmlndW91cy5cbiAqIEByZXR1cm5zIFRoZSBsaW5rLCBvciBhbiBlbXB0eSBzdHJpbmcgd2hlbiBubyBwYWdlIGRvY3VtZW50cyB0aGUgbWVtYmVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVtYmVySHJlZihtZW1iZXJTbHVnU3RyaW5nOiBzdHJpbmcsIGluaGVyaXRlZEZyb206IHN0cmluZywgYWxsVHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPiwgY3VycmVudE5hbWVzcGFjZT86IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghaW5oZXJpdGVkRnJvbSkge1xuICAgIC8vIE93biAobm9uLWluaGVyaXRlZCkgbWVtYmVyIOKAlCBgZ2VuZXJhdGVNZW1iZXJQYWdlc2AgYWx3YXlzIGVtaXRzIGl0cyBwYWdlIG9uIHRoaXMgc2FtZSBwYWdlLlxuICAgIHJldHVybiBgLi8ke21lbWJlclNsdWdTdHJpbmd9L2A7XG4gIH1cbiAgY29uc3QgcGFyZW50SW5mbyA9IGZpbmRUeXBlKGFsbFR5cGVzLCBpbmhlcml0ZWRGcm9tLCBjdXJyZW50TmFtZXNwYWNlKTtcbiAgaWYgKCFwYXJlbnRJbmZvIHx8ICFkb2VzTWVtYmVyUGFnZUV4aXN0KHBhcmVudEluZm8ubmFtZXNwYWNlLCBwYXJlbnRJbmZvLm5hbWUsIG1lbWJlclNsdWdTdHJpbmcpKSB7XG4gICAgLy8gVGhlIGRlY2xhcmluZyBwYXJlbnQgaGFzIG5vIGdlbmVyYXRlZCBwYWdlIGZvciB0aGlzIG1lbWJlciAoaXQgaW5oZXJpdGVkIHRoZSBtZW1iZXIgdG9vLCBvciBpc1xuICAgIC8vIHVuZG9jdW1lbnRlZCkuIFJldHVybiBubyBocmVmIHNvIHRoZSBjYWxsZXIgcmVuZGVycyBwbGFpbiB0ZXh0IGluc3RlYWQgb2YgYSBicm9rZW4gbGluay5cbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgY29uc3QgcGFyZW50TnNEaXJlY3RvcnkgPSBnZXROYW1lc3BhY2VEaXJlY3RvcnkocGFyZW50SW5mby5uYW1lc3BhY2UpO1xuICByZXR1cm4gYCR7Z2V0QmFzZVBhdGgoKX0vYXBpLyR7cGFyZW50TnNEaXJlY3Rvcnl9LyR7dG9UeXBlUm91dGVTZWdtZW50KHBhcmVudEluZm8ubmFtZXNwYWNlLCBwYXJlbnRJbmZvLm5hbWUpfS8ke21lbWJlclNsdWdTdHJpbmd9L2A7XG59XG5cbi8qKlxuICogUG9wdWxhdGUge0BsaW5rIGRvZXNNZW1iZXJQYWdlRXhpc3R9LiBNaXJyb3JzIGBnZW5lcmF0ZU1lbWJlclBhZ2VzYCdzIG93biBmaWx0ZXJpbmcgZXhhY3RseSAob25lIHBhZ2VcbiAqIHBlciBub24taW5oZXJpdGVkIHByb3BlcnR5LCBvbmUgcGVyIG5vbi1pbmhlcml0ZWQgbWV0aG9kIG92ZXJsb2FkIGtleSkuIE11c3QgcnVuIG9uY2UgYmVmb3JlIGFueVxuICogbGluayBpcyByZW5kZXJlZC5cbiAqXG4gKiBAcGFyYW0gdHlwZXMgLSBUaGUgZG9jdW1lbnRlZCB0eXBlcywga2V5ZWQgYnkgcXVhbGlmaWVkIGlkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJNZW1iZXJQYWdlcyh0eXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+KTogdm9pZCB7XG4gIGdlbmVyYXRlZE1lbWJlclBhZ2VzLmNsZWFyKCk7XG4gIGZvciAoY29uc3QgaW5mbyBvZiB0eXBlcy52YWx1ZXMoKSkge1xuICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgaW5mby5wcm9wZXJ0aWVzKSB7XG4gICAgICBpZiAoIXByb3BlcnR5LmluaGVyaXRlZEZyb20pIHtcbiAgICAgICAgZ2VuZXJhdGVkTWVtYmVyUGFnZXMuYWRkKGAke2luZm8ubmFtZXNwYWNlfSMke2luZm8ubmFtZX0jJHttZW1iZXJSb3V0ZVNlZ21lbnQocHJvcGVydHkubmFtZSl9YCk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG92ZXJsb2FkS2V5cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGZvciAoY29uc3QgbWV0aG9kIG9mIGluZm8ubWV0aG9kcykge1xuICAgICAgaWYgKCFtZXRob2QuaW5oZXJpdGVkRnJvbSkge1xuICAgICAgICBvdmVybG9hZEtleXMuYWRkKG1ldGhvZC5vdmVybG9hZEtleSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3Qgb3ZlcmxvYWRLZXkgb2Ygb3ZlcmxvYWRLZXlzKSB7XG4gICAgICBnZW5lcmF0ZWRNZW1iZXJQYWdlcy5hZGQoYCR7aW5mby5uYW1lc3BhY2V9IyR7aW5mby5uYW1lfSMke292ZXJsb2FkUm91dGVTZWdtZW50KG92ZXJsb2FkS2V5KX1gKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBGb3IgZXZlcnkgZG9jdW1lbnRlZCB0eXBlIGFzc2lnbiBCT1RIOlxuICogIC0gYSBsb3dlcmNhc2VkLCBudW1lcmljYWxseS1kaXNhbWJpZ3VhdGVkIEZJTEUgc2VnbWVudCAoc28gYFR5cGVBc3NlcnRlcmAgdnMgYHR5cGVBc3NlcnRlcmAsIHdoaWNoXG4gKiAgICBib3RoIGxvd2VyY2FzZSB0byBgdHlwZWFzc2VydGVyYCwgYmVjb21lIGB0eXBlYXNzZXJ0ZXJgIC8gYHR5cGVhc3NlcnRlci0yYCBvbiBkaXNrIGFuZCBuZXZlclxuICogICAgY29sbGlkZSBvbiBXaW5kb3dzJyBjYXNlLWluc2Vuc2l0aXZlIGZpbGVzeXN0ZW0pLCBhbmRcbiAqICAtIGEgY2FzZS1QUkVTRVJWRUQgUk9VVEUgc2VnbWVudCAoYFR5cGVBc3NlcnRlcmAgLyBgdHlwZUFzc2VydGVyYCkgdXNlZCBmb3IgdGhlIGV4cGxpY2l0IGBzbHVnOmBcbiAqICAgIGZyb250bWF0dGVyIGFuZCBldmVyeSBpbnRlcm5hbCBsaW5rLCBzbyB0aGUgVVJMcyBzdGF5IHByZXR0eSBhbmQgbmF0dXJhbGx5IGRpc3RpbmN0LlxuICogVGhlIHJvdXRlIGRlY291cGxlcyBmcm9tIHRoZSBmaWxlIHBhdGggdmlhIHRoZSBgc2x1ZzpgIGZyb250bWF0dGVyLCBzbyBubyBgLTJgIHN1ZmZpeCBsZWFrcyBpbnRvXG4gKiBVUkxzLiBBbHNvIHdhcm5zIGFib3V0IG1lbWJlci1zbHVnIGNvbGxpc2lvbnMgd2l0aGluIGEgdHlwZS4gTXVzdCBydW4gb25jZSBiZWZvcmUgYW55IHBhZ2UvbGluay5cbiAqXG4gKiBAcGFyYW0gdHlwZXMgLSBUaGUgZG9jdW1lbnRlZCB0eXBlcywga2V5ZWQgYnkgcXVhbGlmaWVkIGlkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJSb3V0ZVNlZ21lbnRzKHR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4pOiB2b2lkIHtcbiAgdHlwZUZpbGVTZWdtZW50cy5jbGVhcigpO1xuICB0eXBlUm91dGVTZWdtZW50cy5jbGVhcigpO1xuICBjb25zdCBieU5hbWVzcGFjZSA9IG5ldyBNYXA8c3RyaW5nLCBUeXBlSW5mb1tdPigpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9wcmVmZXItZ3JvdXAtYnkgLS0gYE1hcC5ncm91cEJ5YCBpcyBFUzIwMjQsIGFuZCB0aGUgc2hhcmVkIGB0c2NvbmZpZy5qc29uYCB0eXBlcyBvbmx5IEVTMjAyMi5cbiAgZm9yIChjb25zdCBpbmZvIG9mIHR5cGVzLnZhbHVlcygpKSB7XG4gICAgY29uc3QgbGlzdCA9IGJ5TmFtZXNwYWNlLmdldChpbmZvLm5hbWVzcGFjZSkgPz8gW107XG4gICAgbGlzdC5wdXNoKGluZm8pO1xuICAgIGJ5TmFtZXNwYWNlLnNldChpbmZvLm5hbWVzcGFjZSwgbGlzdCk7XG4gIH1cbiAgZm9yIChjb25zdCBbbmFtZXNwYWNlLCBpbmZvc10gb2YgYnlOYW1lc3BhY2UpIHtcbiAgICBjb25zdCB1c2VkRmlsZVNlZ21lbnRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3QgdXNlZFJvdXRlU2VnbWVudHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBjb25zdCBzb3J0ZWQgPSBbLi4uaW5mb3NdLnNvcnQoKGFscGhhLCBicmF2bykgPT4gYWxwaGEubmFtZS5sb2NhbGVDb21wYXJlKGJyYXZvLm5hbWUpKTtcbiAgICBmb3IgKGNvbnN0IGluZm8gb2Ygc29ydGVkKSB7XG4gICAgICB0eXBlRmlsZVNlZ21lbnRzLnNldChgJHtuYW1lc3BhY2V9IyR7aW5mby5uYW1lfWAsIGRpc2FtYmlndWF0ZSh0b1JvdXRlU2VnbWVudChpbmZvLm5hbWUpLCB1c2VkRmlsZVNlZ21lbnRzLCAoc2VnbWVudCkgPT4gc2VnbWVudCkpO1xuXG4gICAgICBjb25zdCByb3V0ZUJhc2UgPSB0b1JvdXRlU2VnbWVudFByZXNlcnZlQ2FzZShpbmZvLm5hbWUpO1xuICAgICAgLy8gRGlzYW1iaWd1YXRlIFJPVVRFUyBjYXNlLUlOU0VOU0lUSVZFTFk6IHRoZSBzbHVnIGJlY29tZXMgQXN0cm8ncyBvbi1kaXNrIG91dHB1dCBwYXRoLCBzb1xuICAgICAgLy8gYFR5cGVBc3NlcnRlcmAgYW5kIGB0eXBlQXNzZXJ0ZXJgIChzYW1lIG5hbWUgbW9kdWxvIGNhc2UpIHdvdWxkIGNvbGxpZGUgd2hlbiB0aGUgc2l0ZSBpcyBidWlsdFxuICAgICAgLy8gb24gYSBjYXNlLWluc2Vuc2l0aXZlIGZpbGVzeXN0ZW0gKFdpbmRvd3MvbWFjT1MpLCBzaWxlbnRseSBvdmVyd3JpdGluZyBvbmUgcGFnZSBzbyBldmVyeSBsaW5rXG4gICAgICAvLyB0byBpdCA0MDRzLiBDb21wYXJpbmcgbG93ZXJjYXNlZCBrZXlzIGZvcmNlcyB0aGUgc2Vjb25kIG9jY3VycmVuY2UgdG8gdGFrZSBhIGAtMmAgc3VmZml4LlxuICAgICAgY29uc3Qgcm91dGVTZWdtZW50ID0gZGlzYW1iaWd1YXRlKHJvdXRlQmFzZSwgdXNlZFJvdXRlU2VnbWVudHMsIChzZWdtZW50KSA9PiBzZWdtZW50LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgdHlwZVJvdXRlU2VnbWVudHMuc2V0KGAke25hbWVzcGFjZX0jJHtpbmZvLm5hbWV9YCwgcm91dGVTZWdtZW50KTtcbiAgICAgIGlmIChyb3V0ZVNlZ21lbnQgIT09IHJvdXRlQmFzZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oYERpc2FtYmlndWF0ZWQgUk9VVEUgZm9yIFwiJHtuYW1lc3BhY2V9IyR7aW5mby5uYW1lfVwiOiBcIiR7cm91dGVCYXNlfVwiIC0+IFwiJHtyb3V0ZVNlZ21lbnR9XCIgKHNsdWcgY29sbGlzaW9uKS5gKTtcbiAgICAgIH1cbiAgICAgIHdhcm5NZW1iZXJTbHVnQ29sbGlzaW9ucyhpbmZvLCBuYW1lc3BhY2UpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlbmRlciBhbiBgQGV4YW1wbGVgIGJsb2NrIGFzIE1EWC4gSWYgdGhlIGV4YW1wbGUgYWxyZWFkeSBjb250YWlucyBhIGZlbmNlZCBjb2RlIGJsb2NrLCBpdCBpc1xuICogbm9ybWFsaXplZCB0aHJvdWdoIHtAbGluayByZW5kZXJNZHhQcm9zZX0gKGNvZGUgcHJlc2VydmVkIHJhdywgc3Vycm91bmRpbmcgcHJvc2UgZXNjYXBlZCk7XG4gKiBvdGhlcndpc2UgdGhlIHJhdyBleGFtcGxlIHRleHQgaXMgd3JhcHBlZCBpbiBhIGB0c2AgY29kZSBmZW5jZSBzbyBpdCBpcyBlbWl0dGVkIGxpdGVyYWxseS5cbiAqXG4gKiBAcGFyYW0gZXhhbXBsZSAtIFRoZSBgQGV4YW1wbGVgIHRleHQuXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKiBAcGFyYW0gc2VsZk5hbWVzcGFjZSAtIFRoZSBuYW1lc3BhY2Ugb2YgdGhlIHBhZ2UgYmVpbmcgcmVuZGVyZWQsIHByZWZlcnJlZCB3aGVuIGEgbmFtZSBpcyBhbWJpZ3VvdXMuXG4gKiBAcmV0dXJucyBUaGUgTURYLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyRXhhbXBsZU1keChleGFtcGxlOiBzdHJpbmcsIGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4sIHNlbGZOYW1lc3BhY2U/OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gLyg/Ol58XFxuKVxccyooPzpgYGB8fn5+KS8udGVzdChleGFtcGxlKSA/IHJlbmRlck1keFByb3NlKGV4YW1wbGUsIGFsbFR5cGVzLCBzZWxmTmFtZXNwYWNlKSA6IGBcXGBcXGBcXGB0c1xcbiR7ZXhhbXBsZX1cXG5cXGBcXGBcXGBgO1xufVxuXG4vKipcbiAqIFJlbmRlciBtYXJrZG93biBibG9jayB0ZXh0IChhIGRlc2NyaXB0aW9uLCByZW1hcmtzLCBvciBtb2R1bGUgb3ZlcnZpZXcpIGFzIE1EWC1zYWZlIG1hcmtkb3duLlxuICogRmVuY2VkIGNvZGUgYmxvY2tzIGFyZSByZS1lbWl0dGVkIHZlcmJhdGltIChzdXJyb3VuZGVkIGJ5IGJsYW5rIGxpbmVzLCB3aXRoIGEgbGFuZ3VhZ2UpOyBwcm9zZVxuICogc2VnbWVudHMgaGF2ZSB0aGVpciBpbmxpbmUgbGluayB0YWdzIHJlc29sdmVkIGFuZCB0aGVpciBNRFgtdW5zYWZlIGNoYXJhY3RlcnMgZXNjYXBlZC5cbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0LlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICogQHBhcmFtIHNlbGZOYW1lc3BhY2UgLSBUaGUgbmFtZXNwYWNlIG9mIHRoZSBwYWdlIGJlaW5nIHJlbmRlcmVkLCBwcmVmZXJyZWQgd2hlbiBhIG5hbWUgaXMgYW1iaWd1b3VzLlxuICogQHJldHVybnMgVGhlIE1EWC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlck1keFByb3NlKHRleHQ6IHN0cmluZywgYWxsVHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPiwgc2VsZk5hbWVzcGFjZT86IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG91dDogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBzZWcgb2Ygc2VnbWVudE1hcmtkb3duKHRleHQpKSB7XG4gICAgaWYgKHNlZy50eXBlID09PSAnY29kZScpIHtcbiAgICAgIG91dC5wdXNoKCcnLCBgXFxgXFxgXFxgJHtzZWcubGFuZyB8fCAndHMnfWAsIHNlZy50ZXh0LCAnYGBgJywgJycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQucHVzaChlc2NhcGVNZHhQcm9zZShyZXNvbHZlTGlua3Moc2VnLnRleHQsIGFsbFR5cGVzLCBzZWxmTmFtZXNwYWNlKSkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0LmpvaW4oJ1xcbicpLnJlcGxhY2VBbGwoL1xcbnszLH0vZywgJ1xcblxcbicpLnRyaW0oKTtcbn1cblxuLyoqXG4gKiBSZW5kZXIgYSB0eXBlIHN0cmluZyB3aXRoIGNsaWNrYWJsZSBsaW5rcyBmb3Iga25vd24gdHlwZXNcbiAqXG4gKiBAcGFyYW0gdHlwZVRleHQgLSBUaGUgdHlwZSB0ZXh0LlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICogQHBhcmFtIHNlbGZUeXBlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB0eXBlIHRoZSBwYWdlIGRvY3VtZW50cywgd2hpY2ggYHRoaXNgIGxpbmtzIHRvLlxuICogQHBhcmFtIHNlbGZOYW1lc3BhY2UgLSBUaGUgbmFtZXNwYWNlIG9mIHRoZSBwYWdlIGJlaW5nIHJlbmRlcmVkLCBwcmVmZXJyZWQgd2hlbiBhIG5hbWUgaXMgYW1iaWd1b3VzLlxuICogQHJldHVybnMgVGhlIHR5cGUgdGV4dCB3aXRoIG1hcmtkb3duIGxpbmtzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyVHlwZVdpdGhMaW5rcyh0eXBlVGV4dDogc3RyaW5nLCBhbGxUeXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+LCBzZWxmVHlwZU5hbWU/OiBzdHJpbmcsIHNlbGZOYW1lc3BhY2U/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBQcmUtcGFzczogbGluayBPYmplY3QubWV0aG9kIHBhdHRlcm5zIHRvIE1ETiBiZWZvcmUgd29yZC1ieS13b3JkIGxpbmtpbmdcbiAgY29uc3QgTUROX09CSkVDVF9CQVNFID0gJ2h0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdCc7XG4gIGNvbnN0IHdpdGhPYmplY3RNZXRob2RzID0gcmVwbGFjZVJlZ0V4cE1hdGNoZXModHlwZVRleHQsIC9cXGJPYmplY3RcXC4oPzxtZXRob2Q+W2EtekEtWl1bYS16QS1aMC05XSopXFxiL2csIChtYXRjaCkgPT4ge1xuICAgIGNvbnN0IG1ldGhvZCA9IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICdtZXRob2QnKTtcbiAgICByZXR1cm4gYFtPYmplY3RdKCR7TUROX09CSkVDVF9CQVNFfSkuWyR7bWV0aG9kfV0oJHtNRE5fT0JKRUNUX0JBU0V9LyR7bWV0aG9kfSlgO1xuICB9KTtcbiAgLy8gTWFpbiBwYXNzOiBsaW5rIGluZGl2aWR1YWwgdHlwZSBuYW1lcywgc2tpcHBpbmcgdGV4dCBhbHJlYWR5IGluc2lkZSBtYXJrZG93biBsaW5rc1xuICByZXR1cm4gcmVwbGFjZVJlZ0V4cE1hdGNoZXMoXG4gICAgd2l0aE9iamVjdE1ldGhvZHMsXG4gICAgL1xcW1teXFxdXStcXF1cXChbXildK1xcKXxcXGIoPzx0eXBlTmFtZT5bYS16QS1aXVthLXpBLVowLTldKilcXGIvZyxcbiAgICAobWF0Y2gpID0+IHtcbiAgICAgIGNvbnN0IHR5cGVOYW1lID0gZ2V0T3B0aW9uYWxOYW1lZEdyb3VwKG1hdGNoLCAndHlwZU5hbWUnKTtcbiAgICAgIGlmICh0eXBlTmFtZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbWF0Y2hbMF07XG4gICAgICB9XG4gICAgICAvLyBMaW5rIGB0aGlzYCByZXR1cm4gdHlwZSB0byB0aGUgY3VycmVudCB0eXBlJ3MgcGFnZVxuICAgICAgaWYgKHR5cGVOYW1lID09PSAndGhpcycgJiYgc2VsZlR5cGVOYW1lKSB7XG4gICAgICAgIGNvbnN0IHNlbGZJbmZvID0gZmluZFR5cGUoYWxsVHlwZXMsIHNlbGZUeXBlTmFtZSwgc2VsZk5hbWVzcGFjZSk7XG4gICAgICAgIGlmIChzZWxmSW5mbykge1xuICAgICAgICAgIHJldHVybiBgWyR7dHlwZU5hbWV9XSgke3R5cGVIcmVmKHNlbGZJbmZvKX0pYDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTa2lwIGdlbmVyaWMgdHlwZSBwYXJhbWV0ZXJzXG4gICAgICBpZiAoR0VORVJJQ19UWVBFX1BBUkFNUy5oYXModHlwZU5hbWUpKSB7XG4gICAgICAgIHJldHVybiB0eXBlTmFtZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgb3VyIG93biB0eXBlcyBmaXJzdFxuICAgICAgY29uc3QgaW5mbyA9IGZpbmRUeXBlKGFsbFR5cGVzLCB0eXBlTmFtZSwgc2VsZk5hbWVzcGFjZSk7XG4gICAgICBpZiAoaW5mbykge1xuICAgICAgICByZXR1cm4gYFske3R5cGVOYW1lfV0oJHt0eXBlSHJlZihpbmZvKX0pYDtcbiAgICAgIH1cblxuICAgICAgLy8gQSB0eXBlIGFub3RoZXIgZG9jdW1lbnRlZCBwYWNrYWdlIGRlY2xhcmVzLCBvciBvbmUgdGhlIHNpdGUgbWFwcyBpdHNlbGZcbiAgICAgIGNvbnN0IGV4dGVybmFsVXJsID0gcmVzb2x2ZUV4dGVybmFsVHlwZVVybCh0eXBlTmFtZSk7XG4gICAgICBpZiAoZXh0ZXJuYWxVcmwpIHtcbiAgICAgICAgcmV0dXJuIGBbJHt0eXBlTmFtZX1dKCR7ZXh0ZXJuYWxVcmx9KWA7XG4gICAgICB9XG5cbiAgICAgIC8vIFR5cGVTY3JpcHQgdXRpbGl0eSB0eXBlc1xuICAgICAgY29uc3QgdHNVcmwgPSByZXNvbHZlVHNVdGlsaXR5VXJsKHR5cGVOYW1lKTtcbiAgICAgIGlmICh0c1VybCkge1xuICAgICAgICByZXR1cm4gYFske3R5cGVOYW1lfV0oJHt0c1VybH0pYDtcbiAgICAgIH1cblxuICAgICAgLy8gSlMgZ2xvYmFsIHR5cGVzIChBcnJheSwgUHJvbWlzZSwgTWFwLCBldGMuKVxuICAgICAgY29uc3QgZ2xvYmFsVXJsID0gT2JqZWN0Lmhhc093bihUU19HTE9CQUxfVFlQRVMsIHR5cGVOYW1lKSA/IFRTX0dMT0JBTF9UWVBFU1t0eXBlTmFtZV0gOiB1bmRlZmluZWQ7XG4gICAgICBpZiAoZ2xvYmFsVXJsKSB7XG4gICAgICAgIHJldHVybiBgWyR7dHlwZU5hbWV9XSgke2dsb2JhbFVybH0pYDtcbiAgICAgIH1cblxuICAgICAgLy8gV2ViIEFQSSAvIE1ETiB0eXBlc1xuICAgICAgY29uc3QgbWRuVXJsID0gcmVzb2x2ZVdlYkFwaVVybCh0eXBlTmFtZSk7XG4gICAgICBpZiAobWRuVXJsKSB7XG4gICAgICAgIHJldHVybiBgWyR7dHlwZU5hbWV9XSgke21kblVybH0pYDtcbiAgICAgIH1cblxuICAgICAgLy8gVHlwZVNjcmlwdCBwcmltaXRpdmUgdHlwZXNcbiAgICAgIGNvbnN0IHByaW1pdGl2ZVVybCA9IE9iamVjdC5oYXNPd24oVFNfUFJJTUlUSVZFX1RZUEVTLCB0eXBlTmFtZSkgPyBUU19QUklNSVRJVkVfVFlQRVNbdHlwZU5hbWVdIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHByaW1pdGl2ZVVybCA/IGBbJHt0eXBlTmFtZX1dKCR7cHJpbWl0aXZlVXJsfSlgIDogdHlwZU5hbWU7XG4gICAgfVxuICApO1xufVxuXG4vKipcbiAqIFJlc29sdmUgYSB0eXBlIG5vIHBhZ2Ugb2YgdGhpcyBzaXRlIGRvY3VtZW50cyB0byB0aGUgcGFnZSB0aGF0IGRvZXM6IGFub3RoZXIgZG9jdW1lbnRlZCBwYWNrYWdlJ3Mgc2l0ZSwgb3IgYW5cbiAqIGVudHJ5IG9mIHRoZSBzaXRlJ3Mgb3duIGBleHRlcm5hbFR5cGVMaW5rc2Agc2V0dGluZy5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSB0eXBlJ3MgbmFtZS5cbiAqIEByZXR1cm5zIFRoZSBVUkwsIG9yIGB1bmRlZmluZWRgIHdoZW4gbmVpdGhlciBrbm93cyB0aGUgdHlwZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVFeHRlcm5hbFR5cGVVcmwobmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGdldFBhY2thZ2VUeXBlVXJsKG5hbWUpID8/IGdldEFwaURvY1NldHRpbmdzKCkuZXh0ZXJuYWxUeXBlTGlua3MuZ2V0KG5hbWUpO1xufVxuXG4vKipcbiAqIFJlc29sdmUgYEBsaW5rYCB0YWdzLCB3aXRoIG9yIHdpdGhvdXQgYSBgfCBkaXNwbGF5IHRleHRgIHBhcnQsIGluIGRlc2NyaXB0aW9uIHRleHRcbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0LlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICogQHBhcmFtIHNlbGZOYW1lc3BhY2UgLSBUaGUgbmFtZXNwYWNlIG9mIHRoZSBwYWdlIGJlaW5nIHJlbmRlcmVkLCBwcmVmZXJyZWQgd2hlbiBhIG5hbWUgaXMgYW1iaWd1b3VzLlxuICogQHJldHVybnMgVGhlIHRleHQgd2l0aCBtYXJrZG93biBsaW5rcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVMaW5rcyh0ZXh0OiBzdHJpbmcsIGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4sIHNlbGZOYW1lc3BhY2U/OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcmVwbGFjZVJlZ0V4cE1hdGNoZXModGV4dCwgL1xce0BsaW5rXFxzKyg/PHRhcmdldD5bXnx9XSs/KSg/OlxccypcXHxcXHMqKD88ZGlzcGxheT5bXn1dKz8pKT9cXH0vZywgKG1hdGNoKSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ3RhcmdldCcpLnRyaW0oKTtcbiAgICBjb25zdCBkaXNwbGF5ID0gKGdldE9wdGlvbmFsTmFtZWRHcm91cChtYXRjaCwgJ2Rpc3BsYXknKT8udHJpbSgpID8/IHRhcmdldCkucmVwbGFjZUFsbCgvXFxcXCg/PVs8Pnt9XSkvZywgJycpO1xuXG4gICAgLy8gSGFuZGxlIFR5cGUubWVtYmVyIHJlZmVyZW5jZXMgKGUuZy4sIFBsdWdpbk5vdGljZUNvbXBvbmVudC5zaG93Tm90aWNlKVxuICAgIGNvbnN0IGRvdE1hdGNoID0gL14oPzx0eXBlTmFtZT5bQS1aYS16XVxcdyopXFwuKD88bWVtYmVyTmFtZT5cXHcrKSQvLmV4ZWModGFyZ2V0KTtcbiAgICBpZiAoZG90TWF0Y2gpIHtcbiAgICAgIGNvbnN0IHR5cGVOYW1lID0gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChkb3RNYXRjaCwgJ3R5cGVOYW1lJyk7XG4gICAgICBjb25zdCBtZW1iZXJOYW1lID0gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChkb3RNYXRjaCwgJ21lbWJlck5hbWUnKTtcbiAgICAgIGNvbnN0IHR5cGVJbmZvID0gZmluZFR5cGUoYWxsVHlwZXMsIHR5cGVOYW1lLCBzZWxmTmFtZXNwYWNlKTtcbiAgICAgIGlmICh0eXBlSW5mbyAmJiBkb2VzTWVtYmVyUGFnZUV4aXN0KHR5cGVJbmZvLm5hbWVzcGFjZSwgdHlwZUluZm8ubmFtZSwgbWVtYmVyUm91dGVTZWdtZW50KG1lbWJlck5hbWUpKSkge1xuICAgICAgICBjb25zdCB0YXJnZXROc0RpcmVjdG9yeSA9IGdldE5hbWVzcGFjZURpcmVjdG9yeSh0eXBlSW5mby5uYW1lc3BhY2UpO1xuICAgICAgICByZXR1cm4gYFske2Rpc3BsYXl9XSgke2dldEJhc2VQYXRoKCl9L2FwaS8ke3RhcmdldE5zRGlyZWN0b3J5fS8ke3RvVHlwZVJvdXRlU2VnbWVudCh0eXBlSW5mby5uYW1lc3BhY2UsIHR5cGVJbmZvLm5hbWUpfS8ke21lbWJlclJvdXRlU2VnbWVudChtZW1iZXJOYW1lKX0vKWA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHNpbXBsZSB0eXBlIHJlZmVyZW5jZXMg4oCUIGlmIGRpc3BsYXkgY29udGFpbnMgZ2VuZXJpYyBhcmdzLCBsaW5rIGVhY2ggdHlwZSBpbmRpdmlkdWFsbHlcbiAgICBjb25zdCBpbmZvID0gZmluZFR5cGUoYWxsVHlwZXMsIHRhcmdldCwgc2VsZk5hbWVzcGFjZSk7XG4gICAgaWYgKGluZm8pIHtcbiAgICAgIHJldHVybiBkaXNwbGF5ICE9PSB0YXJnZXQgJiYgZGlzcGxheS5pbmNsdWRlcygnPCcpID8gcmVuZGVyVHlwZVdpdGhMaW5rcyhkaXNwbGF5LCBhbGxUeXBlcywgdW5kZWZpbmVkLCBzZWxmTmFtZXNwYWNlKSA6IGBbJHtkaXNwbGF5fV0oJHt0eXBlSHJlZihpbmZvKX0pYDtcbiAgICB9XG5cbiAgICBjb25zdCBleHRlcm5hbFVybCA9IHJlc29sdmVFeHRlcm5hbFR5cGVVcmwodGFyZ2V0KTtcbiAgICByZXR1cm4gZXh0ZXJuYWxVcmwgPyBgWyR7ZGlzcGxheX1dKCR7ZXh0ZXJuYWxVcmx9KWAgOiBgXFxgJHtkaXNwbGF5fVxcYGA7XG4gIH0pO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIGEgVHlwZVNjcmlwdCB1dGlsaXR5IHR5cGUgdG8gaXRzIGhhbmRib29rIGVudHJ5LlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHJldHVybnMgVGhlIGhhbmRib29rIFVSTCwgb3IgYHVuZGVmaW5lZGAgd2hlbiBpdCBpcyBub3QgYSB1dGlsaXR5IHR5cGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlVHNVdGlsaXR5VXJsKG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGhhc2ggPSBUU19VVElMSVRZX1RZUEVTLmdldChuYW1lKTtcbiAgaWYgKGhhc2gpIHtcbiAgICBpZiAoWydJdGVyYWJsZSddLmluY2x1ZGVzKG5hbWUpKSB7XG4gICAgICByZXR1cm4gYGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rL2l0ZXJhdG9ycy1hbmQtZ2VuZXJhdG9ycy5odG1sIyR7aGFzaH1gO1xuICAgIH1cbiAgICBjb25zdCBoYW5kYm9va1BhZ2UgPSBbJ0NhcGl0YWxpemUnLCAnTG93ZXJjYXNlJywgJ1VuY2FwaXRhbGl6ZScsICdVcHBlcmNhc2UnXS5pbmNsdWRlcyhuYW1lKSA/ICcyL3RlbXBsYXRlLWxpdGVyYWwtdHlwZXMnIDogJ3V0aWxpdHktdHlwZXMnOyAvLyBDc3BlbGw6ZGlzYWJsZS1saW5lXG4gICAgcmV0dXJuIGBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8ke2hhbmRib29rUGFnZX0uaHRtbCMke2hhc2h9YDtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIGEgV2ViIEFQSSB0eXBlIHRvIGl0cyBNRE4gcGFnZS5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSB0eXBlJ3MgbmFtZS5cbiAqIEByZXR1cm5zIFRoZSBNRE4gVVJMLCBvciBgdW5kZWZpbmVkYCB3aGVuIGl0IGlzIG5vdCBhIGtub3duIFdlYiBBUEkgdHlwZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVXZWJBcGlVcmwobmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFPYmplY3QuaGFzT3duKG1vZHVsZVN0YXRlLndlYkFwaVR5cGVzLCBuYW1lKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgZW50cnkgPSBtb2R1bGVTdGF0ZS53ZWJBcGlUeXBlc1tuYW1lXTtcbiAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZW50cnk7XG4gIH1cbiAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ29iamVjdCcgJiYgZW50cnkgIT09IG51bGwgJiYgJ3VybCcgaW4gZW50cnkpIHtcbiAgICBjb25zdCB0eXBlZEVudHJ5ID0gZW50cnkgYXMgV2ViQXBpRW50cnk7XG4gICAgcmV0dXJuIHR5cGVkRW50cnkudXJsO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgbG93ZXJjYXNlZCBPTi1ESVNLIHNlZ21lbnQgZm9yIGEgdHlwZSAoZmlsZSBwYXRoICsgY29tcG9uZW50LWltcG9ydCByZWxhdGl2ZSBwYXRoKS5cbiAqXG4gKiBAcGFyYW0gbmFtZXNwYWNlIC0gVGhlIHR5cGUncyBuYW1lc3BhY2UuXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSB0eXBlJ3MgbmFtZS5cbiAqIEByZXR1cm5zIFRoZSBzZWdtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9UeXBlRmlsZVNlZ21lbnQobmFtZXNwYWNlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0eXBlRmlsZVNlZ21lbnRzLmdldChgJHtuYW1lc3BhY2V9IyR7bmFtZX1gKSA/PyB0b1JvdXRlU2VnbWVudChuYW1lKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIHRoZSBjYXNlLXByZXNlcnZlZCBVUkwvUk9VVEUgc2VnbWVudCBmb3IgYSB0eXBlIChzbHVnIGZyb250bWF0dGVyICsgaW50ZXJuYWwgbGlua3MpLlxuICpcbiAqIEBwYXJhbSBuYW1lc3BhY2UgLSBUaGUgdHlwZSdzIG5hbWVzcGFjZS5cbiAqIEBwYXJhbSBuYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHJldHVybnMgVGhlIHNlZ21lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1R5cGVSb3V0ZVNlZ21lbnQobmFtZXNwYWNlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0eXBlUm91dGVTZWdtZW50cy5nZXQoYCR7bmFtZXNwYWNlfSMke25hbWV9YCkgPz8gdG9Sb3V0ZVNlZ21lbnRQcmVzZXJ2ZUNhc2UobmFtZSk7XG59XG5cbi8qKlxuICogQWJzb2x1dGUgbGluayB0byBhIHR5cGUncyBvdmVydmlldyBwYWdlLlxuICpcbiAqIEBwYXJhbSBpbmZvIC0gVGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAqIEByZXR1cm5zIFRoZSBsaW5rLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdHlwZUhyZWYoaW5mbzogVHlwZUluZm8pOiBzdHJpbmcge1xuICByZXR1cm4gYCR7Z2V0QmFzZVBhdGgoKX0vYXBpLyR7Z2V0TmFtZXNwYWNlRGlyZWN0b3J5KGluZm8ubmFtZXNwYWNlKX0vJHt0b1R5cGVSb3V0ZVNlZ21lbnQoaW5mby5uYW1lc3BhY2UsIGluZm8ubmFtZSl9L2A7XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIGFic29sdXRlIGxpbmsgdG8gYSB0eXBlIHBhZ2VcbiAqXG4gKiBAcGFyYW0gdHlwZU5hbWUgLSBUaGUgdHlwZSdzIG5hbWUuXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKiBAcGFyYW0gY3VycmVudE5hbWVzcGFjZSAtIFRoZSBuYW1lc3BhY2Ugb2YgdGhlIHJlZmVyZW5jaW5nIHBhZ2UsIHByZWZlcnJlZCB3aGVuIHRoZSBuYW1lIGlzIGFtYmlndW91cy5cbiAqIEByZXR1cm5zIEEgbWFya2Rvd24gbGluaywgb3IgaW5saW5lIGNvZGUgd2hlbiB0aGUgdHlwZSBpcyBub3QgZG9jdW1lbnRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHR5cGVMaW5rKHR5cGVOYW1lOiBzdHJpbmcsIGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4sIGN1cnJlbnROYW1lc3BhY2U/OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBjbGVhbk5hbWUgPSB0eXBlTmFtZS5yZXBsYWNlKC88Lio+JC8sICcnKS50cmltKCk7XG4gIGNvbnN0IGluZm8gPSBmaW5kVHlwZShhbGxUeXBlcywgY2xlYW5OYW1lLCBjdXJyZW50TmFtZXNwYWNlKTtcbiAgcmV0dXJuIGluZm8gPyBgWyR7ZXNjYXBlTWR4QW5nbGVCcmFja2V0cyh0eXBlTmFtZSl9XSgke3R5cGVIcmVmKGluZm8pfSlgIDogYFxcYCR7dHlwZU5hbWV9XFxgYDtcbn1cblxuZnVuY3Rpb24gZGlzYW1iaWd1YXRlKGJhc2U6IHN0cmluZywgdXNlZDogU2V0PHN0cmluZz4sIGtleU9mOiAoc2VnbWVudDogc3RyaW5nKSA9PiBzdHJpbmcpOiBzdHJpbmcge1xuICBsZXQgc2VnbWVudCA9IGJhc2U7XG4gIGNvbnN0IEZJUlNUX0RJU0FNQklHVUFUSU9OX1NVRkZJWCA9IDI7XG4gIGxldCBzdWZmaXggPSBGSVJTVF9ESVNBTUJJR1VBVElPTl9TVUZGSVg7XG4gIHdoaWxlICh1c2VkLmhhcyhrZXlPZihzZWdtZW50KSkpIHtcbiAgICBzZWdtZW50ID0gYCR7YmFzZX0tJHtTdHJpbmcoc3VmZml4KX1gO1xuICAgIHN1ZmZpeCsrO1xuICB9XG4gIHVzZWQuYWRkKGtleU9mKHNlZ21lbnQpKTtcbiAgcmV0dXJuIHNlZ21lbnQ7XG59XG5cbmZ1bmN0aW9uIGdldEJhc2VQYXRoKCk6IHN0cmluZyB7XG4gIHJldHVybiBnZXRBcGlEb2NTZXR0aW5ncygpLmJhc2VQYXRoO1xufVxuXG4vKipcbiAqIFdhcm4gd2hlbiB0d28gZGlzdGluY3QgbWVtYmVycyBvZiBhIHR5cGUgcHJvZHVjZSB0aGUgc2FtZSBtZW1iZXIgc2x1ZyAoVVJML2ZpbGUgc2VnbWVudCkuIFRoZVxuICogb3B0aW9uYWwtYD9gIHN1ZmZpeCBpcyBzdHJpcHBlZCBmaXJzdCwgc28gYSBwcm9wZXJ0eSBhcHBlYXJpbmcgYXMgYm90aCByZXF1aXJlZCBhbmQgb3B0aW9uYWwgaXMgbm90XG4gKiBhIGZhbHNlIHBvc2l0aXZlLlxuICpcbiAqIEBwYXJhbSBpbmZvIC0gVGhlIHR5cGUuXG4gKiBAcGFyYW0gbmFtZXNwYWNlIC0gVGhlIHR5cGUncyBuYW1lc3BhY2UuXG4gKi9cbmZ1bmN0aW9uIHdhcm5NZW1iZXJTbHVnQ29sbGlzaW9ucyhpbmZvOiBUeXBlSW5mbywgbmFtZXNwYWNlOiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3Qgc2VlbiA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gIGZ1bmN0aW9uIGNoZWNrKHNsdWc6IHN0cmluZywgb3JpZ2luYWw6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBvcmlnaW5hbC5yZXBsYWNlKC9cXD8kLywgJycpO1xuICAgIGNvbnN0IGV4aXN0aW5nID0gc2Vlbi5nZXQoc2x1Zyk7XG4gICAgaWYgKGV4aXN0aW5nICE9PSB1bmRlZmluZWQgJiYgZXhpc3RpbmcgIT09IG5vcm1hbGl6ZWQpIHtcbiAgICAgIGNvbnNvbGUud2FybihgTWVtYmVyIHJvdXRlIGNvbGxpc2lvbiBpbiBcIiR7bmFtZXNwYWNlfSMke2luZm8ubmFtZX1cIjogXCIke2V4aXN0aW5nfVwiIGFuZCBcIiR7bm9ybWFsaXplZH1cIiBib3RoIG1hcCB0byBcIi8ke3NsdWd9L1wiLmApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZWVuLnNldChzbHVnLCBub3JtYWxpemVkKTtcbiAgfVxuICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIGluZm8ucHJvcGVydGllcykge1xuICAgIGNoZWNrKG1lbWJlclNsdWcocHJvcGVydHkubmFtZSksIHByb3BlcnR5Lm5hbWUpO1xuICB9XG4gIGZvciAoY29uc3QgbWV0aG9kIG9mIGluZm8ubWV0aG9kcykge1xuICAgIGNoZWNrKG92ZXJsb2FkU2x1ZyhtZXRob2Qub3ZlcmxvYWRLZXkpLCBtZXRob2Qub3ZlcmxvYWRLZXkpO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBT0E7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLG9CQUFvQjtBQUM3QixTQUFTLFlBQVk7QUFPckI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMseUJBQXlCO0FBQ2xDO0FBQUEsRUFDRTtB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
365
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvYXBpLWRvYy1saW5rLXJlbmRlcmluZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVHlwZS1saW5rIHJlbmRlcmluZzogdHVybnMgdHlwZSB0ZXh0IGFuZCBpbmxpbmUgbGluayB0YWdzIGludG8gbWFya2Rvd24gbGlua3MgdG8gZ2VuZXJhdGVkIHBhZ2VzXG4gKiBvciBleHRlcm5hbCByZWZlcmVuY2VzIChUeXBlU2NyaXB0IGhhbmRib29rLCBNRE4gV2ViIEFQSSwgSlMgZ2xvYmFscykuXG4gKi9cblxuaW1wb3J0IHtcbiAgZ2V0TWFuZGF0b3J5TmFtZWRHcm91cCxcbiAgZ2V0T3B0aW9uYWxOYW1lZEdyb3VwXG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9yZWctZXhwJztcbmltcG9ydCB7IHJlYWRGaWxlU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgVHlwZUluZm8sXG4gIFdlYkFwaUVudHJ5XG59IGZyb20gJy4vYXBpLWRvYy10eXBlcy50cyc7XG5cbmltcG9ydCB7XG4gIEdFTkVSSUNfVFlQRV9QQVJBTVMsXG4gIFRTX0dMT0JBTF9UWVBFUyxcbiAgVFNfUFJJTUlUSVZFX1RZUEVTLFxuICBUU19VVElMSVRZX1RZUEVTXG59IGZyb20gJy4vYXBpLWRvYy1jb25zdGFudHMudHMnO1xuaW1wb3J0IHsgZ2V0UGFja2FnZVR5cGVVcmwgfSBmcm9tICcuL2FwaS1kb2MtcGFja2FnZS1zaXRlcy50cyc7XG5pbXBvcnQge1xuICB0b1JvdXRlU2VnbWVudCxcbiAgdG9Sb3V0ZVNlZ21lbnRQcmVzZXJ2ZUNhc2Vcbn0gZnJvbSAnLi9hcGktZG9jLXJvdXRlLXNlZ21lbnRzLnRzJztcbmltcG9ydCB7IGdldEFwaURvY1NldHRpbmdzIH0gZnJvbSAnLi9hcGktZG9jLXNldHRpbmdzLnRzJztcbmltcG9ydCB7XG4gIGVzY2FwZU1keEFuZ2xlQnJhY2tldHMsXG4gIGVzY2FwZU1keFByb3NlLFxuICBnZXROYW1lc3BhY2VEaXJlY3RvcnksXG4gIG1lbWJlclJvdXRlU2VnbWVudCxcbiAgbWVtYmVyU2x1ZyxcbiAgb3ZlcmxvYWRSb3V0ZVNlZ21lbnQsXG4gIG92ZXJsb2FkU2x1ZyxcbiAgcmVwbGFjZVJlZ0V4cE1hdGNoZXMsXG4gIHNlZ21lbnRNYXJrZG93blxufSBmcm9tICcuL2FwaS1kb2MtdGV4dC11dGlscy50cyc7XG5cbi8qKlxuTG9hZGVkIGZyb20gdHlwZWRvYy1wbHVnaW4tbWRuLWxpbmtzIGRhdGEgYXQgcnVudGltZVxuICovXG4vKipcbk1vZHVsZS1sZXZlbCBtdXRhYmxlIHN0YXRlLCBoZWxkIGluIG9uZSBvYmplY3Qgc28gZWFjaCBtdXRhdGlvbiBuYW1lcyBpdCBleHBsaWNpdGx5LlxuICovXG5pbnRlcmZhY2UgTW9kdWxlU3RhdGUge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9yZWFkb25seS1pbnRlcmZhY2UtbWVtYmVycyAtLSBUaGUgV2ViIEFQSSBtZXRhZGF0YSBjYWNoZSBpcyByZXBsYWNlZCBhZnRlciBsb2FkaW5nLlxuICB3ZWJBcGlUeXBlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbmNvbnN0IG1vZHVsZVN0YXRlOiBNb2R1bGVTdGF0ZSA9IHtcbiAgd2ViQXBpVHlwZXM6IHt9XG59O1xuLyoqXG5Mb3dlcmNhc2VkLCBjb2xsaXNpb24tZGlzYW1iaWd1YXRlZCBPTi1ESVNLIHNlZ21lbnQgcGVyIHF1YWxpZmllZCB0eXBlIGtleSAoYCR7bmFtZXNwYWNlfSMke25hbWV9YCkuXG4gKi9cbmNvbnN0IHR5cGVGaWxlU2VnbWVudHMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuLyoqXG5DYXNlLXByZXNlcnZlZCBVUkwvcm91dGUgc2VnbWVudCBwZXIgcXVhbGlmaWVkIHR5cGUga2V5IChgJHtuYW1lc3BhY2V9IyR7bmFtZX1gKS5cbiAqL1xuY29uc3QgdHlwZVJvdXRlU2VnbWVudHMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuXG4vKipcbiAqIFJvdXRlLXNlZ21lbnQga2V5cyBvZiB0aGUgbWVtYmVyIHBhZ2VzIHRoYXQgYGdlbmVyYXRlTWVtYmVyUGFnZXNgIHdpbGwgYWN0dWFsbHkgZW1pdCwgYXNcbiAqIGAke25hbWVzcGFjZX0jJHtUeXBlTmFtZX0jJHtyb3V0ZVNlZ21lbnR9YC4gT25seSBOT04taW5oZXJpdGVkIHByb3BlcnRpZXMgYW5kIG5vbi1pbmhlcml0ZWQgbWV0aG9kXG4gKiBvdmVybG9hZCBrZXlzIGdldCBhIHBhZ2UsIHNvIHRoaXMgbGV0cyBsaW5rIGVtaXR0ZXJzIGF2b2lkIHBvaW50aW5nIGF0IGEgbWVtYmVyIHBhZ2UgdGhhdCBpcyBuZXZlclxuICogZ2VuZXJhdGVkIChhbiBpbmhlcml0ZWQgbWVtYmVyLCBhbiBlbnVtIG1lbWJlciwgYW4gb3B0aW9ucy1pbnRlcmZhY2UgbWVtYmVyKSDigJQgd2hpY2ggd291bGQgNDA0LlxuICovXG5jb25zdCBnZW5lcmF0ZWRNZW1iZXJQYWdlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4vKipcbiAqIFdoZXRoZXIgYSBtZW1iZXIgcGFnZSB3aWxsIGJlIGdlbmVyYXRlZCBmb3IgYHJvdXRlU2VnbWVudGAgb24gdGhlIGdpdmVuIHR5cGUuXG4gKlxuICogQHBhcmFtIG5hbWVzcGFjZSAtIFRoZSB0eXBlJ3MgbmFtZXNwYWNlLlxuICogQHBhcmFtIHR5cGVOYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHBhcmFtIHJvdXRlU2VnbWVudCAtIFRoZSBtZW1iZXIncyByb3V0ZSBzZWdtZW50LlxuICogQHJldHVybnMgV2hldGhlciB0aGUgcGFnZSBpcyBnZW5lcmF0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkb2VzTWVtYmVyUGFnZUV4aXN0KG5hbWVzcGFjZTogc3RyaW5nLCB0eXBlTmFtZTogc3RyaW5nLCByb3V0ZVNlZ21lbnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gZ2VuZXJhdGVkTWVtYmVyUGFnZXMuaGFzKGAke25hbWVzcGFjZX0jJHt0eXBlTmFtZX0jJHtyb3V0ZVNlZ21lbnR9YCk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIGJhcmUgdHlwZSBuYW1lIHRvIGEgZG9jdW1lbnRlZCBgVHlwZUluZm9gLlxuICpcbiAqIFRoZSBtb2RlbCBtYXAgaXMga2V5ZWQgYnkgYSBxdWFsaWZpZWQgYCR7bmFtZXNwYWNlfSMke25hbWV9YCBpZGVudGl0eSwgYmVjYXVzZSBhIHBhY2thZ2VcbiAqIGNhbiBleHBvcnQgdGhlIHNhbWUgc2ltcGxlIG5hbWUgZnJvbSBkaWZmZXJlbnQgbW9kdWxlcy4gUmVzb2x1dGlvbiBpcyBiZXN0LWVmZm9ydDpcbiAqICAgMS4gUHJlZmVyIGEgdHlwZSBpbiBgY3VycmVudE5hbWVzcGFjZWAgKHRoZSByZWZlcmVuY2luZyBwYWdlJ3MgbW9kdWxlKS5cbiAqICAgMi4gT3RoZXJ3aXNlLCBpZiBleGFjdGx5IG9uZSB0eXBlIGFjcm9zcyBhbGwgbW9kdWxlcyBoYXMgdGhhdCBiYXJlIG5hbWUsIHVzZSBpdC5cbiAqICAgMy4gSWYgdGhlIGJhcmUgbmFtZSBpcyBhbWJpZ3VvdXMgKG11bHRpcGxlIG1vZHVsZXMpLCBnaXZlIHVwIChjYWxsZXIgcmVuZGVycyBwbGFpbiBjb2RlKS5cbiAqXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSB0eXBlJ3MgbmFtZS5cbiAqIEBwYXJhbSBjdXJyZW50TmFtZXNwYWNlIC0gVGhlIG5hbWVzcGFjZSBvZiB0aGUgcmVmZXJlbmNpbmcgcGFnZSwgcHJlZmVycmVkIHdoZW4gdGhlIG5hbWUgaXMgYW1iaWd1b3VzLlxuICogQHJldHVybnMgVGhlIHR5cGUsIG9yIGB1bmRlZmluZWRgIHdoZW4gbm8gdHlwZSBvciBtb3JlIHRoYW4gb25lIGhhcyB0aGF0IG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kVHlwZShhbGxUeXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+LCBuYW1lOiBzdHJpbmcsIGN1cnJlbnROYW1lc3BhY2U/OiBzdHJpbmcpOiBUeXBlSW5mbyB8IHVuZGVmaW5lZCB7XG4gIGlmIChjdXJyZW50TmFtZXNwYWNlICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBxdWFsaWZpZWQgPSBhbGxUeXBlcy5nZXQoYCR7Y3VycmVudE5hbWVzcGFjZX0jJHtuYW1lfWApO1xuICAgIGlmIChxdWFsaWZpZWQpIHtcbiAgICAgIHJldHVybiBxdWFsaWZpZWQ7XG4gICAgfVxuICB9XG4gIGxldCBmb3VuZDogVHlwZUluZm8gfCB1bmRlZmluZWQ7XG4gIGxldCBtYXRjaENvdW50ID0gMDtcbiAgZm9yIChjb25zdCBpbmZvIG9mIGFsbFR5cGVzLnZhbHVlcygpKSB7XG4gICAgaWYgKGluZm8ubmFtZSAhPT0gbmFtZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgZm91bmQgPSBpbmZvO1xuICAgIG1hdGNoQ291bnQrKztcbiAgICBpZiAobWF0Y2hDb3VudCA+IDEpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBtYXRjaENvdW50ID09PSAxID8gZm91bmQgOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogTGluayBhIGJhc2UgdHlwZSBleHByZXNzaW9uIGZvciB0aGUgXCJFeHRlbmRzOlwiIGxpbmUuXG4gKiBTaW1wbGUgdHlwZSByZWZlcmVuY2VzIChpZGVudGlmaWVyICsgb3B0aW9uYWwgZ2VuZXJpY3MpIHVzZSByZW5kZXJUeXBlV2l0aExpbmtzXG4gKiBzbyBlYWNoIHR5cGUgYXJndW1lbnQgZ2V0cyBpdHMgb3duIGxpbmsuXG4gKiBDb21wbGV4IGV4cHJlc3Npb25zIChvYmplY3QgdHlwZXMsIGludGVyc2VjdGlvbnMsIGV0Yy4pIGZhbGwgYmFjayB0byB0eXBlTGlua1xuICogdG8gYXZvaWQgTURYIHBhcnNpbmcgaXNzdWVzIHdpdGggYHtgLCBgfWAsIGB8YCBldGMuXG4gKlxuICogQHBhcmFtIHR5cGVOYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICogQHBhcmFtIGN1cnJlbnROYW1lc3BhY2UgLSBUaGUgbmFtZXNwYWNlIG9mIHRoZSByZWZlcmVuY2luZyBwYWdlLCBwcmVmZXJyZWQgd2hlbiB0aGUgbmFtZSBpcyBhbWJpZ3VvdXMuXG4gKiBAcmV0dXJucyBUaGUgbGlua2VkIHR5cGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsaW5rQmFzZVR5cGUodHlwZU5hbWU6IHN0cmluZywgYWxsVHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPiwgY3VycmVudE5hbWVzcGFjZT86IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGlzU2ltcGxlVHlwZVJlZiA9IC9eW2EtekEtWl1bYS16QS1aMC05XSooPzo8Lio+KT8kLy50ZXN0KHR5cGVOYW1lLnRyaW0oKSk7XG4gIHJldHVybiBpc1NpbXBsZVR5cGVSZWYgPyBlc2NhcGVNZHhBbmdsZUJyYWNrZXRzKHJlbmRlclR5cGVXaXRoTGlua3ModHlwZU5hbWUsIGFsbFR5cGVzLCB1bmRlZmluZWQsIGN1cnJlbnROYW1lc3BhY2UpKSA6IHR5cGVMaW5rKHR5cGVOYW1lLCBhbGxUeXBlcywgY3VycmVudE5hbWVzcGFjZSk7XG59XG5cbi8qKlxuICogTG9hZHMgdGhlIFdlYiBBUEkgbGlua3MgYHR5cGVkb2MtcGx1Z2luLW1kbi1saW5rc2Agc2hpcHMsIGlmIGl0IGlzIGluc3RhbGxlZC4gV2l0aG91dCBpdCwgV2ViIEFQSSB0eXBlcyByZW5kZXJcbiAqIHVubGlua2VkLlxuICpcbiAqIEBwYXJhbSByb290RGlyZWN0b3J5IC0gVGhlIGZvbGRlciB3aG9zZSBgbm9kZV9tb2R1bGVzYCBob2xkcyB0aGUgcGFja2FnZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRFeHRlcm5hbFR5cGVNYXBzKHJvb3REaXJlY3Rvcnk6IHN0cmluZyk6IHZvaWQge1xuICB0cnkge1xuICAgIGNvbnN0IGRhdGFQYXRoID0gam9pbihyb290RGlyZWN0b3J5LCAnbm9kZV9tb2R1bGVzL3R5cGVkb2MtcGx1Z2luLW1kbi1saW5rcy9kYXRhL3dlYi1hcGkuanNvbicpO1xuICAgIG1vZHVsZVN0YXRlLndlYkFwaVR5cGVzID0gSlNPTi5wYXJzZShyZWFkRmlsZVN5bmMoZGF0YVBhdGgsICd1dGYtOCcpKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjb25zb2xlLndhcm4oYExvYWRlZCAke1N0cmluZyhPYmplY3Qua2V5cyhtb2R1bGVTdGF0ZS53ZWJBcGlUeXBlcykubGVuZ3RoKX0gV2ViIEFQSSB0eXBlIGxpbmtzYCk7XG4gIH0gY2F0Y2gge1xuICAgIG1vZHVsZVN0YXRlLndlYkFwaVR5cGVzID0ge307XG4gICAgY29uc29sZS53YXJuKCd0eXBlZG9jLXBsdWdpbi1tZG4tbGlua3MgZGF0YSBub3QgZm91bmQg4oCUIFdlYiBBUEkgbGlua3Mgd2lsbCBiZSB1bmF2YWlsYWJsZS4nKTtcbiAgfVxufVxuXG4vKipcbiAqIENvbnZlcnQgaW5saW5lIG1hcmtkb3duIHRvIEhUTUwgZm9yIHVzZSBpbiBjb21wb25lbnQgcHJvcHMgd2l0aCBzZXQ6aHRtbFxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQuXG4gKiBAcmV0dXJucyBUaGUgSFRNTC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hcmtkb3duVG9IdG1sKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGVzY2FwZWQgPSB0ZXh0XG4gICAgLnJlcGxhY2VBbGwoJyYnLCAnJmFtcDsnKVxuICAgIC5yZXBsYWNlQWxsKCc8JywgJyZsdDsnKVxuICAgIC5yZXBsYWNlQWxsKCc+JywgJyZndDsnKTtcbiAgcmV0dXJuIHJlcGxhY2VSZWdFeHBNYXRjaGVzKGVzY2FwZWQsIC9cXFsoPzx0ZXh0PlteXFxdXSspXFxdXFwoKD88dXJsPlteKV0rKVxcKS9nLCAobWF0Y2gpID0+IHtcbiAgICBjb25zdCBsaW5rVGV4dCA9IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICd0ZXh0Jyk7XG4gICAgY29uc3QgdXJsID0gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ3VybCcpO1xuICAgIC8vIEEgcmVsYXRpdmUgVVJMIGhlcmUgaXMgYW4gaWxsdXN0cmF0aXZlIGV4YW1wbGUgcGF0aCBpbiBUU0RvYyAoZS5nLiBgW2Zvb10oZm9vLnBuZylgKSwgbm90IGFcbiAgICAvLyByZWFsIG5hdmlnYWJsZSBsaW5rIOKAlCByZW5kZXIgaXQgYXMgbGl0ZXJhbCBpbmxpbmUgY29kZSBzbyBpdCBuZWl0aGVyIDQwNHMgbm9yIGxvc2VzIG1lYW5pbmcuXG4gICAgcmV0dXJuIC9eKD86aHR0cHM/OlxcL1xcL3xcXC98I3xtYWlsdG86KS8udGVzdCh1cmwpID8gYDxhIGhyZWY9XCIke3VybH1cIj4ke2xpbmtUZXh0fTwvYT5gIDogYDxjb2RlPlske2xpbmtUZXh0fV0oJHt1cmx9KTwvY29kZT5gO1xuICB9KVxuICAgIC5yZXBsYWNlQWxsKC9gKD88Y29kZT5bXmBdKylgL2csICc8Y29kZT4kPGNvZGU+PC9jb2RlPicpXG4gICAgLnJlcGxhY2VBbGwoJ1xcbicsICc8YnIvPicpO1xufVxuXG4vKipcbiAqIEJ1aWxkIHRoZSBocmVmIGZvciBhIG1lbWJlciwgcG9pbnRpbmcgdG8gdGhlIHBhcmVudCB0eXBlJ3MgcGFnZSBpZiBpbmhlcml0ZWRcbiAqXG4gKiBAcGFyYW0gbWVtYmVyU2x1Z1N0cmluZyAtIFRoZSBtZW1iZXIncyByb3V0ZSBzZWdtZW50LlxuICogQHBhcmFtIGluaGVyaXRlZEZyb20gLSBUaGUgbmFtZSBvZiB0aGUgdHlwZSB0aGUgbWVtYmVyIGlzIGluaGVyaXRlZCBmcm9tLCBvciBhbiBlbXB0eSBzdHJpbmcgZm9yIGFuIG93biBtZW1iZXIuXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKiBAcGFyYW0gY3VycmVudE5hbWVzcGFjZSAtIFRoZSBuYW1lc3BhY2Ugb2YgdGhlIHJlZmVyZW5jaW5nIHBhZ2UsIHByZWZlcnJlZCB3aGVuIHRoZSBuYW1lIGlzIGFtYmlndW91cy5cbiAqIEByZXR1cm5zIFRoZSBsaW5rLCBvciBhbiBlbXB0eSBzdHJpbmcgd2hlbiBubyBwYWdlIGRvY3VtZW50cyB0aGUgbWVtYmVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVtYmVySHJlZihtZW1iZXJTbHVnU3RyaW5nOiBzdHJpbmcsIGluaGVyaXRlZEZyb206IHN0cmluZywgYWxsVHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPiwgY3VycmVudE5hbWVzcGFjZT86IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghaW5oZXJpdGVkRnJvbSkge1xuICAgIC8vIE93biAobm9uLWluaGVyaXRlZCkgbWVtYmVyIOKAlCBgZ2VuZXJhdGVNZW1iZXJQYWdlc2AgYWx3YXlzIGVtaXRzIGl0cyBwYWdlIG9uIHRoaXMgc2FtZSBwYWdlLlxuICAgIHJldHVybiBgLi8ke21lbWJlclNsdWdTdHJpbmd9L2A7XG4gIH1cbiAgbGV0IHBhcmVudEluZm8gPSBmaW5kVHlwZShhbGxUeXBlcywgaW5oZXJpdGVkRnJvbSwgY3VycmVudE5hbWVzcGFjZSk7XG4gIGNvbnN0IHZpc2l0ZWQgPSBuZXcgU2V0PFR5cGVJbmZvPigpO1xuICB3aGlsZSAocGFyZW50SW5mbyAmJiAhZG9lc01lbWJlclBhZ2VFeGlzdChwYXJlbnRJbmZvLm5hbWVzcGFjZSwgcGFyZW50SW5mby5uYW1lLCBtZW1iZXJTbHVnU3RyaW5nKSkge1xuICAgIGlmICh2aXNpdGVkLmhhcyhwYXJlbnRJbmZvKSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICB2aXNpdGVkLmFkZChwYXJlbnRJbmZvKTtcbiAgICBjb25zdCBtZW1iZXIgPSBwYXJlbnRJbmZvLnByb3BlcnRpZXMuZmluZCgocHJvcGVydHkpID0+IG1lbWJlclJvdXRlU2VnbWVudChwcm9wZXJ0eS5uYW1lKSA9PT0gbWVtYmVyU2x1Z1N0cmluZylcbiAgICAgID8/IHBhcmVudEluZm8ubWV0aG9kcy5maW5kKChtZXRob2QpID0+IG92ZXJsb2FkUm91dGVTZWdtZW50KG1ldGhvZC5vdmVybG9hZEtleSkgPT09IG1lbWJlclNsdWdTdHJpbmcpO1xuICAgIHBhcmVudEluZm8gPSBtZW1iZXI/LmluaGVyaXRlZEZyb20gPyBmaW5kVHlwZShhbGxUeXBlcywgbWVtYmVyLmluaGVyaXRlZEZyb20sIHBhcmVudEluZm8ubmFtZXNwYWNlKSA6IHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoIXBhcmVudEluZm8gfHwgIWRvZXNNZW1iZXJQYWdlRXhpc3QocGFyZW50SW5mby5uYW1lc3BhY2UsIHBhcmVudEluZm8ubmFtZSwgbWVtYmVyU2x1Z1N0cmluZykpIHtcbiAgICAvLyBBbiB1bmRvY3VtZW50ZWQgb3IgYW1iaWd1b3VzIGFuY2VzdG9yIGhhcyBubyBzYWZlIG1lbWJlciBkZXN0aW5hdGlvbi5cbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgY29uc3QgcGFyZW50TnNEaXJlY3RvcnkgPSBnZXROYW1lc3BhY2VEaXJlY3RvcnkocGFyZW50SW5mby5uYW1lc3BhY2UpO1xuICByZXR1cm4gYCR7Z2V0QmFzZVBhdGgoKX0vYXBpLyR7cGFyZW50TnNEaXJlY3Rvcnl9LyR7dG9UeXBlUm91dGVTZWdtZW50KHBhcmVudEluZm8ubmFtZXNwYWNlLCBwYXJlbnRJbmZvLm5hbWUpfS8ke21lbWJlclNsdWdTdHJpbmd9L2A7XG59XG5cbi8qKlxuICogUG9wdWxhdGUge0BsaW5rIGRvZXNNZW1iZXJQYWdlRXhpc3R9LiBNaXJyb3JzIGBnZW5lcmF0ZU1lbWJlclBhZ2VzYCdzIG93biBmaWx0ZXJpbmcgZXhhY3RseSAob25lIHBhZ2VcbiAqIHBlciBub24taW5oZXJpdGVkIHByb3BlcnR5LCBvbmUgcGVyIG5vbi1pbmhlcml0ZWQgbWV0aG9kIG92ZXJsb2FkIGtleSkuIE11c3QgcnVuIG9uY2UgYmVmb3JlIGFueVxuICogbGluayBpcyByZW5kZXJlZC5cbiAqXG4gKiBAcGFyYW0gdHlwZXMgLSBUaGUgZG9jdW1lbnRlZCB0eXBlcywga2V5ZWQgYnkgcXVhbGlmaWVkIGlkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJNZW1iZXJQYWdlcyh0eXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+KTogdm9pZCB7XG4gIGdlbmVyYXRlZE1lbWJlclBhZ2VzLmNsZWFyKCk7XG4gIGZvciAoY29uc3QgaW5mbyBvZiB0eXBlcy52YWx1ZXMoKSkge1xuICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgaW5mby5wcm9wZXJ0aWVzKSB7XG4gICAgICBpZiAoIXByb3BlcnR5LmluaGVyaXRlZEZyb20pIHtcbiAgICAgICAgZ2VuZXJhdGVkTWVtYmVyUGFnZXMuYWRkKGAke2luZm8ubmFtZXNwYWNlfSMke2luZm8ubmFtZX0jJHttZW1iZXJSb3V0ZVNlZ21lbnQocHJvcGVydHkubmFtZSl9YCk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG92ZXJsb2FkS2V5cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGZvciAoY29uc3QgbWV0aG9kIG9mIGluZm8ubWV0aG9kcykge1xuICAgICAgaWYgKCFtZXRob2QuaW5oZXJpdGVkRnJvbSkge1xuICAgICAgICBvdmVybG9hZEtleXMuYWRkKG1ldGhvZC5vdmVybG9hZEtleSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3Qgb3ZlcmxvYWRLZXkgb2Ygb3ZlcmxvYWRLZXlzKSB7XG4gICAgICBnZW5lcmF0ZWRNZW1iZXJQYWdlcy5hZGQoYCR7aW5mby5uYW1lc3BhY2V9IyR7aW5mby5uYW1lfSMke292ZXJsb2FkUm91dGVTZWdtZW50KG92ZXJsb2FkS2V5KX1gKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBGb3IgZXZlcnkgZG9jdW1lbnRlZCB0eXBlIGFzc2lnbiBCT1RIOlxuICogIC0gYSBsb3dlcmNhc2VkLCBudW1lcmljYWxseS1kaXNhbWJpZ3VhdGVkIEZJTEUgc2VnbWVudCAoc28gYFR5cGVBc3NlcnRlcmAgdnMgYHR5cGVBc3NlcnRlcmAsIHdoaWNoXG4gKiAgICBib3RoIGxvd2VyY2FzZSB0byBgdHlwZWFzc2VydGVyYCwgYmVjb21lIGB0eXBlYXNzZXJ0ZXJgIC8gYHR5cGVhc3NlcnRlci0yYCBvbiBkaXNrIGFuZCBuZXZlclxuICogICAgY29sbGlkZSBvbiBXaW5kb3dzJyBjYXNlLWluc2Vuc2l0aXZlIGZpbGVzeXN0ZW0pLCBhbmRcbiAqICAtIGEgY2FzZS1QUkVTRVJWRUQgUk9VVEUgc2VnbWVudCAoYFR5cGVBc3NlcnRlcmAgLyBgdHlwZUFzc2VydGVyYCkgdXNlZCBmb3IgdGhlIGV4cGxpY2l0IGBzbHVnOmBcbiAqICAgIGZyb250bWF0dGVyIGFuZCBldmVyeSBpbnRlcm5hbCBsaW5rLCBzbyB0aGUgVVJMcyBzdGF5IHByZXR0eSBhbmQgbmF0dXJhbGx5IGRpc3RpbmN0LlxuICogVGhlIHJvdXRlIGRlY291cGxlcyBmcm9tIHRoZSBmaWxlIHBhdGggdmlhIHRoZSBgc2x1ZzpgIGZyb250bWF0dGVyLCBzbyBubyBgLTJgIHN1ZmZpeCBsZWFrcyBpbnRvXG4gKiBVUkxzLiBBbHNvIHdhcm5zIGFib3V0IG1lbWJlci1zbHVnIGNvbGxpc2lvbnMgd2l0aGluIGEgdHlwZS4gTXVzdCBydW4gb25jZSBiZWZvcmUgYW55IHBhZ2UvbGluay5cbiAqXG4gKiBAcGFyYW0gdHlwZXMgLSBUaGUgZG9jdW1lbnRlZCB0eXBlcywga2V5ZWQgYnkgcXVhbGlmaWVkIGlkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJSb3V0ZVNlZ21lbnRzKHR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4pOiB2b2lkIHtcbiAgdHlwZUZpbGVTZWdtZW50cy5jbGVhcigpO1xuICB0eXBlUm91dGVTZWdtZW50cy5jbGVhcigpO1xuICBjb25zdCBieU5hbWVzcGFjZSA9IG5ldyBNYXA8c3RyaW5nLCBUeXBlSW5mb1tdPigpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9wcmVmZXItZ3JvdXAtYnkgLS0gYE1hcC5ncm91cEJ5YCBpcyBFUzIwMjQsIGFuZCB0aGUgc2hhcmVkIGB0c2NvbmZpZy5qc29uYCB0eXBlcyBvbmx5IEVTMjAyMi5cbiAgZm9yIChjb25zdCBpbmZvIG9mIHR5cGVzLnZhbHVlcygpKSB7XG4gICAgY29uc3QgbGlzdCA9IGJ5TmFtZXNwYWNlLmdldChpbmZvLm5hbWVzcGFjZSkgPz8gW107XG4gICAgbGlzdC5wdXNoKGluZm8pO1xuICAgIGJ5TmFtZXNwYWNlLnNldChpbmZvLm5hbWVzcGFjZSwgbGlzdCk7XG4gIH1cbiAgZm9yIChjb25zdCBbbmFtZXNwYWNlLCBpbmZvc10gb2YgYnlOYW1lc3BhY2UpIHtcbiAgICBjb25zdCB1c2VkRmlsZVNlZ21lbnRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3QgdXNlZFJvdXRlU2VnbWVudHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBjb25zdCBzb3J0ZWQgPSBbLi4uaW5mb3NdLnNvcnQoKGFscGhhLCBicmF2bykgPT4gYWxwaGEubmFtZS5sb2NhbGVDb21wYXJlKGJyYXZvLm5hbWUpKTtcbiAgICBmb3IgKGNvbnN0IGluZm8gb2Ygc29ydGVkKSB7XG4gICAgICB0eXBlRmlsZVNlZ21lbnRzLnNldChgJHtuYW1lc3BhY2V9IyR7aW5mby5uYW1lfWAsIGRpc2FtYmlndWF0ZSh0b1JvdXRlU2VnbWVudChpbmZvLm5hbWUpLCB1c2VkRmlsZVNlZ21lbnRzLCAoc2VnbWVudCkgPT4gc2VnbWVudCkpO1xuXG4gICAgICBjb25zdCByb3V0ZUJhc2UgPSB0b1JvdXRlU2VnbWVudFByZXNlcnZlQ2FzZShpbmZvLm5hbWUpO1xuICAgICAgLy8gRGlzYW1iaWd1YXRlIFJPVVRFUyBjYXNlLUlOU0VOU0lUSVZFTFk6IHRoZSBzbHVnIGJlY29tZXMgQXN0cm8ncyBvbi1kaXNrIG91dHB1dCBwYXRoLCBzb1xuICAgICAgLy8gYFR5cGVBc3NlcnRlcmAgYW5kIGB0eXBlQXNzZXJ0ZXJgIChzYW1lIG5hbWUgbW9kdWxvIGNhc2UpIHdvdWxkIGNvbGxpZGUgd2hlbiB0aGUgc2l0ZSBpcyBidWlsdFxuICAgICAgLy8gb24gYSBjYXNlLWluc2Vuc2l0aXZlIGZpbGVzeXN0ZW0gKFdpbmRvd3MvbWFjT1MpLCBzaWxlbnRseSBvdmVyd3JpdGluZyBvbmUgcGFnZSBzbyBldmVyeSBsaW5rXG4gICAgICAvLyB0byBpdCA0MDRzLiBDb21wYXJpbmcgbG93ZXJjYXNlZCBrZXlzIGZvcmNlcyB0aGUgc2Vjb25kIG9jY3VycmVuY2UgdG8gdGFrZSBhIGAtMmAgc3VmZml4LlxuICAgICAgY29uc3Qgcm91dGVTZWdtZW50ID0gZGlzYW1iaWd1YXRlKHJvdXRlQmFzZSwgdXNlZFJvdXRlU2VnbWVudHMsIChzZWdtZW50KSA9PiBzZWdtZW50LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgdHlwZVJvdXRlU2VnbWVudHMuc2V0KGAke25hbWVzcGFjZX0jJHtpbmZvLm5hbWV9YCwgcm91dGVTZWdtZW50KTtcbiAgICAgIGlmIChyb3V0ZVNlZ21lbnQgIT09IHJvdXRlQmFzZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oYERpc2FtYmlndWF0ZWQgUk9VVEUgZm9yIFwiJHtuYW1lc3BhY2V9IyR7aW5mby5uYW1lfVwiOiBcIiR7cm91dGVCYXNlfVwiIC0+IFwiJHtyb3V0ZVNlZ21lbnR9XCIgKHNsdWcgY29sbGlzaW9uKS5gKTtcbiAgICAgIH1cbiAgICAgIHdhcm5NZW1iZXJTbHVnQ29sbGlzaW9ucyhpbmZvLCBuYW1lc3BhY2UpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlbmRlciBhbiBgQGV4YW1wbGVgIGJsb2NrIGFzIE1EWC4gSWYgdGhlIGV4YW1wbGUgYWxyZWFkeSBjb250YWlucyBhIGZlbmNlZCBjb2RlIGJsb2NrLCBpdCBpc1xuICogbm9ybWFsaXplZCB0aHJvdWdoIHtAbGluayByZW5kZXJNZHhQcm9zZX0gKGNvZGUgcHJlc2VydmVkIHJhdywgc3Vycm91bmRpbmcgcHJvc2UgZXNjYXBlZCk7XG4gKiBvdGhlcndpc2UgdGhlIHJhdyBleGFtcGxlIHRleHQgaXMgd3JhcHBlZCBpbiBhIGB0c2AgY29kZSBmZW5jZSBzbyBpdCBpcyBlbWl0dGVkIGxpdGVyYWxseS5cbiAqXG4gKiBAcGFyYW0gZXhhbXBsZSAtIFRoZSBgQGV4YW1wbGVgIHRleHQuXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKiBAcGFyYW0gc2VsZk5hbWVzcGFjZSAtIFRoZSBuYW1lc3BhY2Ugb2YgdGhlIHBhZ2UgYmVpbmcgcmVuZGVyZWQsIHByZWZlcnJlZCB3aGVuIGEgbmFtZSBpcyBhbWJpZ3VvdXMuXG4gKiBAcmV0dXJucyBUaGUgTURYLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyRXhhbXBsZU1keChleGFtcGxlOiBzdHJpbmcsIGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4sIHNlbGZOYW1lc3BhY2U/OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gLyg/Ol58XFxuKVxccyooPzpgYGB8fn5+KS8udGVzdChleGFtcGxlKSA/IHJlbmRlck1keFByb3NlKGV4YW1wbGUsIGFsbFR5cGVzLCBzZWxmTmFtZXNwYWNlKSA6IGBcXGBcXGBcXGB0c1xcbiR7ZXhhbXBsZX1cXG5cXGBcXGBcXGBgO1xufVxuXG4vKipcbiAqIFJlbmRlciBtYXJrZG93biBibG9jayB0ZXh0IChhIGRlc2NyaXB0aW9uLCByZW1hcmtzLCBvciBtb2R1bGUgb3ZlcnZpZXcpIGFzIE1EWC1zYWZlIG1hcmtkb3duLlxuICogRmVuY2VkIGNvZGUgYmxvY2tzIGFyZSByZS1lbWl0dGVkIHZlcmJhdGltIChzdXJyb3VuZGVkIGJ5IGJsYW5rIGxpbmVzLCB3aXRoIGEgbGFuZ3VhZ2UpOyBwcm9zZVxuICogc2VnbWVudHMgaGF2ZSB0aGVpciBpbmxpbmUgbGluayB0YWdzIHJlc29sdmVkIGFuZCB0aGVpciBNRFgtdW5zYWZlIGNoYXJhY3RlcnMgZXNjYXBlZC5cbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0LlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICogQHBhcmFtIHNlbGZOYW1lc3BhY2UgLSBUaGUgbmFtZXNwYWNlIG9mIHRoZSBwYWdlIGJlaW5nIHJlbmRlcmVkLCBwcmVmZXJyZWQgd2hlbiBhIG5hbWUgaXMgYW1iaWd1b3VzLlxuICogQHJldHVybnMgVGhlIE1EWC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlck1keFByb3NlKHRleHQ6IHN0cmluZywgYWxsVHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPiwgc2VsZk5hbWVzcGFjZT86IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG91dDogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBzZWcgb2Ygc2VnbWVudE1hcmtkb3duKHRleHQpKSB7XG4gICAgaWYgKHNlZy50eXBlID09PSAnY29kZScpIHtcbiAgICAgIG91dC5wdXNoKCcnLCBgXFxgXFxgXFxgJHtzZWcubGFuZyB8fCAndHMnfWAsIHNlZy50ZXh0LCAnYGBgJywgJycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQucHVzaChlc2NhcGVNZHhQcm9zZShyZXNvbHZlTGlua3Moc2VnLnRleHQsIGFsbFR5cGVzLCBzZWxmTmFtZXNwYWNlKSkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0LmpvaW4oJ1xcbicpLnJlcGxhY2VBbGwoL1xcbnszLH0vZywgJ1xcblxcbicpLnRyaW0oKTtcbn1cblxuLyoqXG4gKiBSZW5kZXIgYSB0eXBlIHN0cmluZyB3aXRoIGNsaWNrYWJsZSBsaW5rcyBmb3Iga25vd24gdHlwZXNcbiAqXG4gKiBAcGFyYW0gdHlwZVRleHQgLSBUaGUgdHlwZSB0ZXh0LlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICogQHBhcmFtIHNlbGZUeXBlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB0eXBlIHRoZSBwYWdlIGRvY3VtZW50cywgd2hpY2ggYHRoaXNgIGxpbmtzIHRvLlxuICogQHBhcmFtIHNlbGZOYW1lc3BhY2UgLSBUaGUgbmFtZXNwYWNlIG9mIHRoZSBwYWdlIGJlaW5nIHJlbmRlcmVkLCBwcmVmZXJyZWQgd2hlbiBhIG5hbWUgaXMgYW1iaWd1b3VzLlxuICogQHJldHVybnMgVGhlIHR5cGUgdGV4dCB3aXRoIG1hcmtkb3duIGxpbmtzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyVHlwZVdpdGhMaW5rcyh0eXBlVGV4dDogc3RyaW5nLCBhbGxUeXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+LCBzZWxmVHlwZU5hbWU/OiBzdHJpbmcsIHNlbGZOYW1lc3BhY2U/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBQcmUtcGFzczogbGluayBPYmplY3QubWV0aG9kIHBhdHRlcm5zIHRvIE1ETiBiZWZvcmUgd29yZC1ieS13b3JkIGxpbmtpbmdcbiAgY29uc3QgTUROX09CSkVDVF9CQVNFID0gJ2h0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdCc7XG4gIGNvbnN0IHdpdGhPYmplY3RNZXRob2RzID0gcmVwbGFjZVJlZ0V4cE1hdGNoZXModHlwZVRleHQsIC9cXGJPYmplY3RcXC4oPzxtZXRob2Q+W2EtekEtWl1bYS16QS1aMC05XSopXFxiL2csIChtYXRjaCkgPT4ge1xuICAgIGNvbnN0IG1ldGhvZCA9IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICdtZXRob2QnKTtcbiAgICByZXR1cm4gYFtPYmplY3RdKCR7TUROX09CSkVDVF9CQVNFfSkuWyR7bWV0aG9kfV0oJHtNRE5fT0JKRUNUX0JBU0V9LyR7bWV0aG9kfSlgO1xuICB9KTtcbiAgLy8gTWFpbiBwYXNzOiBsaW5rIGluZGl2aWR1YWwgdHlwZSBuYW1lcywgc2tpcHBpbmcgdGV4dCBhbHJlYWR5IGluc2lkZSBtYXJrZG93biBsaW5rc1xuICByZXR1cm4gcmVwbGFjZVJlZ0V4cE1hdGNoZXMoXG4gICAgd2l0aE9iamVjdE1ldGhvZHMsXG4gICAgL1xcW1teXFxdXStcXF1cXChbXildK1xcKXxcXGIoPzx0eXBlTmFtZT5bYS16QS1aXVthLXpBLVowLTldKilcXGIvZyxcbiAgICAobWF0Y2gpID0+IHtcbiAgICAgIGNvbnN0IHR5cGVOYW1lID0gZ2V0T3B0aW9uYWxOYW1lZEdyb3VwKG1hdGNoLCAndHlwZU5hbWUnKTtcbiAgICAgIGlmICh0eXBlTmFtZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbWF0Y2hbMF07XG4gICAgICB9XG4gICAgICAvLyBMaW5rIGB0aGlzYCByZXR1cm4gdHlwZSB0byB0aGUgY3VycmVudCB0eXBlJ3MgcGFnZVxuICAgICAgaWYgKHR5cGVOYW1lID09PSAndGhpcycgJiYgc2VsZlR5cGVOYW1lKSB7XG4gICAgICAgIGNvbnN0IHNlbGZJbmZvID0gZmluZFR5cGUoYWxsVHlwZXMsIHNlbGZUeXBlTmFtZSwgc2VsZk5hbWVzcGFjZSk7XG4gICAgICAgIGlmIChzZWxmSW5mbykge1xuICAgICAgICAgIHJldHVybiBgWyR7dHlwZU5hbWV9XSgke3R5cGVIcmVmKHNlbGZJbmZvKX0pYDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTa2lwIGdlbmVyaWMgdHlwZSBwYXJhbWV0ZXJzXG4gICAgICBpZiAoR0VORVJJQ19UWVBFX1BBUkFNUy5oYXModHlwZU5hbWUpKSB7XG4gICAgICAgIHJldHVybiB0eXBlTmFtZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgb3VyIG93biB0eXBlcyBmaXJzdFxuICAgICAgY29uc3QgaW5mbyA9IGZpbmRUeXBlKGFsbFR5cGVzLCB0eXBlTmFtZSwgc2VsZk5hbWVzcGFjZSk7XG4gICAgICBpZiAoaW5mbykge1xuICAgICAgICByZXR1cm4gYFske3R5cGVOYW1lfV0oJHt0eXBlSHJlZihpbmZvKX0pYDtcbiAgICAgIH1cblxuICAgICAgLy8gQSB0eXBlIGFub3RoZXIgZG9jdW1lbnRlZCBwYWNrYWdlIGRlY2xhcmVzLCBvciBvbmUgdGhlIHNpdGUgbWFwcyBpdHNlbGZcbiAgICAgIGNvbnN0IGV4dGVybmFsVXJsID0gcmVzb2x2ZUV4dGVybmFsVHlwZVVybCh0eXBlTmFtZSk7XG4gICAgICBpZiAoZXh0ZXJuYWxVcmwpIHtcbiAgICAgICAgcmV0dXJuIGBbJHt0eXBlTmFtZX1dKCR7ZXh0ZXJuYWxVcmx9KWA7XG4gICAgICB9XG5cbiAgICAgIC8vIFR5cGVTY3JpcHQgdXRpbGl0eSB0eXBlc1xuICAgICAgY29uc3QgdHNVcmwgPSByZXNvbHZlVHNVdGlsaXR5VXJsKHR5cGVOYW1lKTtcbiAgICAgIGlmICh0c1VybCkge1xuICAgICAgICByZXR1cm4gYFske3R5cGVOYW1lfV0oJHt0c1VybH0pYDtcbiAgICAgIH1cblxuICAgICAgLy8gSlMgZ2xvYmFsIHR5cGVzIChBcnJheSwgUHJvbWlzZSwgTWFwLCBldGMuKVxuICAgICAgY29uc3QgZ2xvYmFsVXJsID0gT2JqZWN0Lmhhc093bihUU19HTE9CQUxfVFlQRVMsIHR5cGVOYW1lKSA/IFRTX0dMT0JBTF9UWVBFU1t0eXBlTmFtZV0gOiB1bmRlZmluZWQ7XG4gICAgICBpZiAoZ2xvYmFsVXJsKSB7XG4gICAgICAgIHJldHVybiBgWyR7dHlwZU5hbWV9XSgke2dsb2JhbFVybH0pYDtcbiAgICAgIH1cblxuICAgICAgLy8gV2ViIEFQSSAvIE1ETiB0eXBlc1xuICAgICAgY29uc3QgbWRuVXJsID0gcmVzb2x2ZVdlYkFwaVVybCh0eXBlTmFtZSk7XG4gICAgICBpZiAobWRuVXJsKSB7XG4gICAgICAgIHJldHVybiBgWyR7dHlwZU5hbWV9XSgke21kblVybH0pYDtcbiAgICAgIH1cblxuICAgICAgLy8gVHlwZVNjcmlwdCBwcmltaXRpdmUgdHlwZXNcbiAgICAgIGNvbnN0IHByaW1pdGl2ZVVybCA9IE9iamVjdC5oYXNPd24oVFNfUFJJTUlUSVZFX1RZUEVTLCB0eXBlTmFtZSkgPyBUU19QUklNSVRJVkVfVFlQRVNbdHlwZU5hbWVdIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHByaW1pdGl2ZVVybCA/IGBbJHt0eXBlTmFtZX1dKCR7cHJpbWl0aXZlVXJsfSlgIDogdHlwZU5hbWU7XG4gICAgfVxuICApO1xufVxuXG4vKipcbiAqIFJlc29sdmUgYSB0eXBlIG5vIHBhZ2Ugb2YgdGhpcyBzaXRlIGRvY3VtZW50cyB0byB0aGUgcGFnZSB0aGF0IGRvZXM6IGFub3RoZXIgZG9jdW1lbnRlZCBwYWNrYWdlJ3Mgc2l0ZSwgb3IgYW5cbiAqIGVudHJ5IG9mIHRoZSBzaXRlJ3Mgb3duIGBleHRlcm5hbFR5cGVMaW5rc2Agc2V0dGluZy5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSB0eXBlJ3MgbmFtZS5cbiAqIEByZXR1cm5zIFRoZSBVUkwsIG9yIGB1bmRlZmluZWRgIHdoZW4gbmVpdGhlciBrbm93cyB0aGUgdHlwZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVFeHRlcm5hbFR5cGVVcmwobmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGdldFBhY2thZ2VUeXBlVXJsKG5hbWUpID8/IGdldEFwaURvY1NldHRpbmdzKCkuZXh0ZXJuYWxUeXBlTGlua3MuZ2V0KG5hbWUpO1xufVxuXG4vKipcbiAqIFJlc29sdmUgYEBsaW5rYCB0YWdzLCB3aXRoIG9yIHdpdGhvdXQgYSBgfCBkaXNwbGF5IHRleHRgIHBhcnQsIGluIGRlc2NyaXB0aW9uIHRleHRcbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0LlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICogQHBhcmFtIHNlbGZOYW1lc3BhY2UgLSBUaGUgbmFtZXNwYWNlIG9mIHRoZSBwYWdlIGJlaW5nIHJlbmRlcmVkLCBwcmVmZXJyZWQgd2hlbiBhIG5hbWUgaXMgYW1iaWd1b3VzLlxuICogQHJldHVybnMgVGhlIHRleHQgd2l0aCBtYXJrZG93biBsaW5rcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVMaW5rcyh0ZXh0OiBzdHJpbmcsIGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4sIHNlbGZOYW1lc3BhY2U/OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcmVwbGFjZVJlZ0V4cE1hdGNoZXModGV4dCwgL1xce0BsaW5rXFxzKyg/PHRhcmdldD5bXnx9XSs/KSg/OlxccypcXHxcXHMqKD88ZGlzcGxheT5bXn1dKz8pKT9cXH0vZywgKG1hdGNoKSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ3RhcmdldCcpLnRyaW0oKTtcbiAgICBjb25zdCBkaXNwbGF5ID0gKGdldE9wdGlvbmFsTmFtZWRHcm91cChtYXRjaCwgJ2Rpc3BsYXknKT8udHJpbSgpID8/IHRhcmdldCkucmVwbGFjZUFsbCgvXFxcXCg/PVs8Pnt9XSkvZywgJycpO1xuXG4gICAgLy8gSGFuZGxlIFR5cGUubWVtYmVyIHJlZmVyZW5jZXMgKGUuZy4sIFBsdWdpbk5vdGljZUNvbXBvbmVudC5zaG93Tm90aWNlKVxuICAgIGNvbnN0IGRvdE1hdGNoID0gL14oPzx0eXBlTmFtZT5bQS1aYS16XVxcdyopXFwuKD88bWVtYmVyTmFtZT5cXHcrKSQvLmV4ZWModGFyZ2V0KTtcbiAgICBpZiAoZG90TWF0Y2gpIHtcbiAgICAgIGNvbnN0IHR5cGVOYW1lID0gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChkb3RNYXRjaCwgJ3R5cGVOYW1lJyk7XG4gICAgICBjb25zdCBtZW1iZXJOYW1lID0gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChkb3RNYXRjaCwgJ21lbWJlck5hbWUnKTtcbiAgICAgIGNvbnN0IHR5cGVJbmZvID0gZmluZFR5cGUoYWxsVHlwZXMsIHR5cGVOYW1lLCBzZWxmTmFtZXNwYWNlKTtcbiAgICAgIGlmICh0eXBlSW5mbyAmJiBkb2VzTWVtYmVyUGFnZUV4aXN0KHR5cGVJbmZvLm5hbWVzcGFjZSwgdHlwZUluZm8ubmFtZSwgbWVtYmVyUm91dGVTZWdtZW50KG1lbWJlck5hbWUpKSkge1xuICAgICAgICBjb25zdCB0YXJnZXROc0RpcmVjdG9yeSA9IGdldE5hbWVzcGFjZURpcmVjdG9yeSh0eXBlSW5mby5uYW1lc3BhY2UpO1xuICAgICAgICByZXR1cm4gYFske2Rpc3BsYXl9XSgke2dldEJhc2VQYXRoKCl9L2FwaS8ke3RhcmdldE5zRGlyZWN0b3J5fS8ke3RvVHlwZVJvdXRlU2VnbWVudCh0eXBlSW5mby5uYW1lc3BhY2UsIHR5cGVJbmZvLm5hbWUpfS8ke21lbWJlclJvdXRlU2VnbWVudChtZW1iZXJOYW1lKX0vKWA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHNpbXBsZSB0eXBlIHJlZmVyZW5jZXMg4oCUIGlmIGRpc3BsYXkgY29udGFpbnMgZ2VuZXJpYyBhcmdzLCBsaW5rIGVhY2ggdHlwZSBpbmRpdmlkdWFsbHlcbiAgICBjb25zdCBpbmZvID0gZmluZFR5cGUoYWxsVHlwZXMsIHRhcmdldCwgc2VsZk5hbWVzcGFjZSk7XG4gICAgaWYgKGluZm8pIHtcbiAgICAgIHJldHVybiBkaXNwbGF5ICE9PSB0YXJnZXQgJiYgZGlzcGxheS5pbmNsdWRlcygnPCcpID8gcmVuZGVyVHlwZVdpdGhMaW5rcyhkaXNwbGF5LCBhbGxUeXBlcywgdW5kZWZpbmVkLCBzZWxmTmFtZXNwYWNlKSA6IGBbJHtkaXNwbGF5fV0oJHt0eXBlSHJlZihpbmZvKX0pYDtcbiAgICB9XG5cbiAgICBjb25zdCBleHRlcm5hbFVybCA9IHJlc29sdmVFeHRlcm5hbFR5cGVVcmwodGFyZ2V0KTtcbiAgICByZXR1cm4gZXh0ZXJuYWxVcmwgPyBgWyR7ZGlzcGxheX1dKCR7ZXh0ZXJuYWxVcmx9KWAgOiBgXFxgJHtkaXNwbGF5fVxcYGA7XG4gIH0pO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIGEgVHlwZVNjcmlwdCB1dGlsaXR5IHR5cGUgdG8gaXRzIGhhbmRib29rIGVudHJ5LlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHJldHVybnMgVGhlIGhhbmRib29rIFVSTCwgb3IgYHVuZGVmaW5lZGAgd2hlbiBpdCBpcyBub3QgYSB1dGlsaXR5IHR5cGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlVHNVdGlsaXR5VXJsKG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGhhc2ggPSBUU19VVElMSVRZX1RZUEVTLmdldChuYW1lKTtcbiAgaWYgKGhhc2gpIHtcbiAgICBpZiAoWydJdGVyYWJsZSddLmluY2x1ZGVzKG5hbWUpKSB7XG4gICAgICByZXR1cm4gYGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rL2l0ZXJhdG9ycy1hbmQtZ2VuZXJhdG9ycy5odG1sIyR7aGFzaH1gO1xuICAgIH1cbiAgICBjb25zdCBoYW5kYm9va1BhZ2UgPSBbJ0NhcGl0YWxpemUnLCAnTG93ZXJjYXNlJywgJ1VuY2FwaXRhbGl6ZScsICdVcHBlcmNhc2UnXS5pbmNsdWRlcyhuYW1lKSA/ICcyL3RlbXBsYXRlLWxpdGVyYWwtdHlwZXMnIDogJ3V0aWxpdHktdHlwZXMnOyAvLyBDc3BlbGw6ZGlzYWJsZS1saW5lXG4gICAgcmV0dXJuIGBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8ke2hhbmRib29rUGFnZX0uaHRtbCMke2hhc2h9YDtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIGEgV2ViIEFQSSB0eXBlIHRvIGl0cyBNRE4gcGFnZS5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSB0eXBlJ3MgbmFtZS5cbiAqIEByZXR1cm5zIFRoZSBNRE4gVVJMLCBvciBgdW5kZWZpbmVkYCB3aGVuIGl0IGlzIG5vdCBhIGtub3duIFdlYiBBUEkgdHlwZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVXZWJBcGlVcmwobmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFPYmplY3QuaGFzT3duKG1vZHVsZVN0YXRlLndlYkFwaVR5cGVzLCBuYW1lKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgZW50cnkgPSBtb2R1bGVTdGF0ZS53ZWJBcGlUeXBlc1tuYW1lXTtcbiAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZW50cnk7XG4gIH1cbiAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ29iamVjdCcgJiYgZW50cnkgIT09IG51bGwgJiYgJ3VybCcgaW4gZW50cnkpIHtcbiAgICBjb25zdCB0eXBlZEVudHJ5ID0gZW50cnkgYXMgV2ViQXBpRW50cnk7XG4gICAgcmV0dXJuIHR5cGVkRW50cnkudXJsO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgbG93ZXJjYXNlZCBPTi1ESVNLIHNlZ21lbnQgZm9yIGEgdHlwZSAoZmlsZSBwYXRoICsgY29tcG9uZW50LWltcG9ydCByZWxhdGl2ZSBwYXRoKS5cbiAqXG4gKiBAcGFyYW0gbmFtZXNwYWNlIC0gVGhlIHR5cGUncyBuYW1lc3BhY2UuXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSB0eXBlJ3MgbmFtZS5cbiAqIEByZXR1cm5zIFRoZSBzZWdtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9UeXBlRmlsZVNlZ21lbnQobmFtZXNwYWNlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0eXBlRmlsZVNlZ21lbnRzLmdldChgJHtuYW1lc3BhY2V9IyR7bmFtZX1gKSA/PyB0b1JvdXRlU2VnbWVudChuYW1lKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIHRoZSBjYXNlLXByZXNlcnZlZCBVUkwvUk9VVEUgc2VnbWVudCBmb3IgYSB0eXBlIChzbHVnIGZyb250bWF0dGVyICsgaW50ZXJuYWwgbGlua3MpLlxuICpcbiAqIEBwYXJhbSBuYW1lc3BhY2UgLSBUaGUgdHlwZSdzIG5hbWVzcGFjZS5cbiAqIEBwYXJhbSBuYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHJldHVybnMgVGhlIHNlZ21lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1R5cGVSb3V0ZVNlZ21lbnQobmFtZXNwYWNlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0eXBlUm91dGVTZWdtZW50cy5nZXQoYCR7bmFtZXNwYWNlfSMke25hbWV9YCkgPz8gdG9Sb3V0ZVNlZ21lbnRQcmVzZXJ2ZUNhc2UobmFtZSk7XG59XG5cbi8qKlxuICogQWJzb2x1dGUgbGluayB0byBhIHR5cGUncyBvdmVydmlldyBwYWdlLlxuICpcbiAqIEBwYXJhbSBpbmZvIC0gVGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAqIEByZXR1cm5zIFRoZSBsaW5rLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdHlwZUhyZWYoaW5mbzogVHlwZUluZm8pOiBzdHJpbmcge1xuICByZXR1cm4gYCR7Z2V0QmFzZVBhdGgoKX0vYXBpLyR7Z2V0TmFtZXNwYWNlRGlyZWN0b3J5KGluZm8ubmFtZXNwYWNlKX0vJHt0b1R5cGVSb3V0ZVNlZ21lbnQoaW5mby5uYW1lc3BhY2UsIGluZm8ubmFtZSl9L2A7XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIGFic29sdXRlIGxpbmsgdG8gYSB0eXBlIHBhZ2VcbiAqXG4gKiBAcGFyYW0gdHlwZU5hbWUgLSBUaGUgdHlwZSdzIG5hbWUuXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKiBAcGFyYW0gY3VycmVudE5hbWVzcGFjZSAtIFRoZSBuYW1lc3BhY2Ugb2YgdGhlIHJlZmVyZW5jaW5nIHBhZ2UsIHByZWZlcnJlZCB3aGVuIHRoZSBuYW1lIGlzIGFtYmlndW91cy5cbiAqIEByZXR1cm5zIEEgbWFya2Rvd24gbGluaywgb3IgaW5saW5lIGNvZGUgd2hlbiB0aGUgdHlwZSBpcyBub3QgZG9jdW1lbnRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHR5cGVMaW5rKHR5cGVOYW1lOiBzdHJpbmcsIGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4sIGN1cnJlbnROYW1lc3BhY2U/OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBjbGVhbk5hbWUgPSB0eXBlTmFtZS5yZXBsYWNlKC88Lio+JC8sICcnKS50cmltKCk7XG4gIGNvbnN0IGluZm8gPSBmaW5kVHlwZShhbGxUeXBlcywgY2xlYW5OYW1lLCBjdXJyZW50TmFtZXNwYWNlKTtcbiAgcmV0dXJuIGluZm8gPyBgWyR7ZXNjYXBlTWR4QW5nbGVCcmFja2V0cyh0eXBlTmFtZSl9XSgke3R5cGVIcmVmKGluZm8pfSlgIDogYFxcYCR7dHlwZU5hbWV9XFxgYDtcbn1cblxuZnVuY3Rpb24gZGlzYW1iaWd1YXRlKGJhc2U6IHN0cmluZywgdXNlZDogU2V0PHN0cmluZz4sIGtleU9mOiAoc2VnbWVudDogc3RyaW5nKSA9PiBzdHJpbmcpOiBzdHJpbmcge1xuICBsZXQgc2VnbWVudCA9IGJhc2U7XG4gIGNvbnN0IEZJUlNUX0RJU0FNQklHVUFUSU9OX1NVRkZJWCA9IDI7XG4gIGxldCBzdWZmaXggPSBGSVJTVF9ESVNBTUJJR1VBVElPTl9TVUZGSVg7XG4gIHdoaWxlICh1c2VkLmhhcyhrZXlPZihzZWdtZW50KSkpIHtcbiAgICBzZWdtZW50ID0gYCR7YmFzZX0tJHtTdHJpbmcoc3VmZml4KX1gO1xuICAgIHN1ZmZpeCsrO1xuICB9XG4gIHVzZWQuYWRkKGtleU9mKHNlZ21lbnQpKTtcbiAgcmV0dXJuIHNlZ21lbnQ7XG59XG5cbmZ1bmN0aW9uIGdldEJhc2VQYXRoKCk6IHN0cmluZyB7XG4gIHJldHVybiBnZXRBcGlEb2NTZXR0aW5ncygpLmJhc2VQYXRoO1xufVxuXG4vKipcbiAqIFdhcm4gd2hlbiB0d28gZGlzdGluY3QgbWVtYmVycyBvZiBhIHR5cGUgcHJvZHVjZSB0aGUgc2FtZSBtZW1iZXIgc2x1ZyAoVVJML2ZpbGUgc2VnbWVudCkuIFRoZVxuICogb3B0aW9uYWwtYD9gIHN1ZmZpeCBpcyBzdHJpcHBlZCBmaXJzdCwgc28gYSBwcm9wZXJ0eSBhcHBlYXJpbmcgYXMgYm90aCByZXF1aXJlZCBhbmQgb3B0aW9uYWwgaXMgbm90XG4gKiBhIGZhbHNlIHBvc2l0aXZlLlxuICpcbiAqIEBwYXJhbSBpbmZvIC0gVGhlIHR5cGUuXG4gKiBAcGFyYW0gbmFtZXNwYWNlIC0gVGhlIHR5cGUncyBuYW1lc3BhY2UuXG4gKi9cbmZ1bmN0aW9uIHdhcm5NZW1iZXJTbHVnQ29sbGlzaW9ucyhpbmZvOiBUeXBlSW5mbywgbmFtZXNwYWNlOiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3Qgc2VlbiA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gIGZ1bmN0aW9uIGNoZWNrKHNsdWc6IHN0cmluZywgb3JpZ2luYWw6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBvcmlnaW5hbC5yZXBsYWNlKC9cXD8kLywgJycpO1xuICAgIGNvbnN0IGV4aXN0aW5nID0gc2Vlbi5nZXQoc2x1Zyk7XG4gICAgaWYgKGV4aXN0aW5nICE9PSB1bmRlZmluZWQgJiYgZXhpc3RpbmcgIT09IG5vcm1hbGl6ZWQpIHtcbiAgICAgIGNvbnNvbGUud2FybihgTWVtYmVyIHJvdXRlIGNvbGxpc2lvbiBpbiBcIiR7bmFtZXNwYWNlfSMke2luZm8ubmFtZX1cIjogXCIke2V4aXN0aW5nfVwiIGFuZCBcIiR7bm9ybWFsaXplZH1cIiBib3RoIG1hcCB0byBcIi8ke3NsdWd9L1wiLmApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZWVuLnNldChzbHVnLCBub3JtYWxpemVkKTtcbiAgfVxuICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIGluZm8ucHJvcGVydGllcykge1xuICAgIGNoZWNrKG1lbWJlclNsdWcocHJvcGVydHkubmFtZSksIHByb3BlcnR5Lm5hbWUpO1xuICB9XG4gIGZvciAoY29uc3QgbWV0aG9kIG9mIGluZm8ubWV0aG9kcykge1xuICAgIGNoZWNrKG92ZXJsb2FkU2x1ZyhtZXRob2Qub3ZlcmxvYWRLZXkpLCBtZXRob2Qub3ZlcmxvYWRLZXkpO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBT0E7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLG9CQUFvQjtBQUM3QixTQUFTLFlBQVk7QUFPckI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMseUJBQXlCO0FBQ2xDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyx5QkFBeUI7QUFDbEM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBYVAsTUFBTSxjQUEyQjtBQUFBLEVBQy9CLGFBQWEsQ0FBQztBQUNoQjtBQUlBLE1BQU0sbUJBQW1CLG9CQUFJLElBQW9CO0FBSWpELE1BQU0sb0JBQW9CLG9CQUFJLElBQW9CO0FBUWxELE1BQU0sdUJBQXVCLG9CQUFJLElBQVk7QUFVdEMsU0FBUyxvQkFBb0IsV0FBbUIsVUFBa0IsY0FBK0I7QUFDdEcsU0FBTyxxQkFBcUIsSUFBSSxHQUFHLFNBQVMsSUFBSSxRQUFRLElBQUksWUFBWSxFQUFFO0FBQzVFO0FBZ0JPLFNBQVMsU0FBUyxVQUFpQyxNQUFjLGtCQUFpRDtBQUN2SCxNQUFJLHFCQUFxQixRQUFXO0FBQ2xDLFVB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
@@ -78,13 +78,23 @@ function parseTypeArguments(baseTypeName) {
78
78
  return $arguments;
79
79
  }
80
80
  function resolveInheritedMembers(types) {
81
- for (const [, info] of types) {
81
+ const resolved = /* @__PURE__ */ new Set();
82
+ const resolving = /* @__PURE__ */ new Set();
83
+ for (const info of types.values()) {
84
+ resolve(info);
85
+ }
86
+ function resolve(info) {
87
+ if (resolved.has(info)) {
88
+ return;
89
+ }
90
+ resolving.add(info);
82
91
  for (const baseTypeName of [...info.baseTypes, ...info.implementsTypes]) {
83
92
  const cleanBase = baseTypeName.replace(/<.*>$/, "").trim();
84
93
  const baseInfo = findType(types, cleanBase, info.namespace);
85
- if (!baseInfo) {
94
+ if (!baseInfo || resolving.has(baseInfo)) {
86
95
  continue;
87
96
  }
97
+ resolve(baseInfo);
88
98
  const typeArguments = parseTypeArguments(baseTypeName);
89
99
  const typeParameterMap = buildTypeParameterMap(baseInfo, typeArguments);
90
100
  for (const property of baseInfo.properties) {
@@ -93,13 +103,15 @@ function resolveInheritedMembers(types) {
93
103
  }
94
104
  }
95
105
  for (const method of baseInfo.methods) {
96
- const hasOwnMethod = info.methods.some((m) => m.name === method.name && m.signature === method.signature);
97
- const hasInheritedMethod = info.methods.some((m) => m.inheritedFrom === baseInfo.name && m.overloadKey === method.overloadKey);
98
- if (!hasOwnMethod && !hasInheritedMethod) {
99
- info.methods.push(substituteMemberTypes({ ...method, inheritedFrom: baseInfo.name }, typeParameterMap));
106
+ const inheritedMethod = substituteMemberTypes({ ...method, inheritedFrom: baseInfo.name }, typeParameterMap);
107
+ const hasMethod = info.methods.some((m) => m.name === inheritedMethod.name && m.signature === inheritedMethod.signature);
108
+ if (!hasMethod) {
109
+ info.methods.push(inheritedMethod);
100
110
  }
101
111
  }
102
112
  }
113
+ resolving.delete(info);
114
+ resolved.add(info);
103
115
  }
104
116
  }
105
117
  function substituteMemberTypes(member, mapping) {
@@ -126,4 +138,4 @@ export {
126
138
  substituteMemberTypes,
127
139
  substituteTypeParams
128
140
  };
129
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvYXBpLWRvYy10eXBlLW1lcmdpbmcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEluaGVyaXRhbmNlIHJlc29sdXRpb246IGNvcGllcyBpbmhlcml0ZWQgbWVtYmVycyBvbnRvIHN1YnR5cGVzLCBzdWJzdGl0dXRpbmcgZ2VuZXJpYyB0eXBlIGFyZ3MuXG4gKlxuICogKEEgZG9jdW1lbnRlZCBwYWNrYWdlIGlzIGEgbm9ybWFsIGxpYnJhcnksIG5vdCBhbiBhdWdtZW50YXRpb24gb2YgYW5vdGhlciBwYWNrYWdlJ3MgZGVjbGFyYXRpb25zLCBzbyB0aGVyZSBpcyBub1xuICogb2ZmaWNpYWwtdnMtdW5vZmZpY2lhbCBtZXJnZSBtYWNoaW5lcnkgaGVyZSDigJQgb25seSB0aGUgZ2VuZXJpYyBpbmhlcml0YW5jZSBoZWxwZXJzLilcbiAqL1xuXG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5cbmltcG9ydCB0eXBlIHtcbiAgTWVtYmVySW5mbyxcbiAgVHlwZUluZm9cbn0gZnJvbSAnLi9hcGktZG9jLXR5cGVzLnRzJztcblxuaW1wb3J0IHsgZmluZFR5cGUgfSBmcm9tICcuL2FwaS1kb2MtbGluay1yZW5kZXJpbmcudHMnO1xuXG4vKipcbiAqIEJ1aWxkIGEgbWFwcGluZyBmcm9tIHBhcmVudCB0eXBlIHBhcmFtZXRlciBuYW1lcyB0byBjb25jcmV0ZSB0eXBlIGFyZ3VtZW50cy5cbiAqIEUuZy4sIHBhcmVudCBoYXMgYHR5cGVQYXJhbWV0ZXJzOiBbJ0luc3RhbmNlIGV4dGVuZHMgQmFzZUluc3RhbmNlJ11gIGFuZFxuICogY2hpbGQgZXh0ZW5kcyBgUGFyZW50PENhbnZhc1BsdWdpbkluc3RhbmNlPmAg4oaSIGB7SW5zdGFuY2U6ICdDYW52YXNQbHVnaW5JbnN0YW5jZSd9YFxuICpcbiAqIEBwYXJhbSBiYXNlSW5mbyAtIFRoZSBiYXNlIHR5cGUuXG4gKiBAcGFyYW0gdHlwZUFyZ3VtZW50cyAtIFRoZSB0eXBlIGFyZ3VtZW50cyB0aGUgYmFzZSB0eXBlIGlzIGdpdmVuLlxuICogQHJldHVybnMgVGhlIHBhcmFtZXRlciBuYW1lcyBtYXBwZWQgdG8gdGhlaXIgYXJndW1lbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRUeXBlUGFyYW1ldGVyTWFwKGJhc2VJbmZvOiBUeXBlSW5mbywgdHlwZUFyZ3VtZW50czogc3RyaW5nW10pOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcbiAgY29uc3QgbWFwcGluZyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gIGNvbnN0IGNvdW50ID0gTWF0aC5taW4oYmFzZUluZm8udHlwZVBhcmFtZXRlcnMubGVuZ3RoLCB0eXBlQXJndW1lbnRzLmxlbmd0aCk7XG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBjb3VudDsgaW5kZXgrKykge1xuICAgIC8vIEJvdGggbGlzdHMgYXJlIGxvbmdlciB0aGFuIGBpbmRleGAuXG4gICAgY29uc3QgcGFyYW1ldGVyID0gZW5zdXJlTm9uTnVsbGFibGUoYmFzZUluZm8udHlwZVBhcmFtZXRlcnNbaW5kZXhdKTtcbiAgICBjb25zdCBhcmd1bWVudCA9IGVuc3VyZU5vbk51bGxhYmxlKHR5cGVBcmd1bWVudHNbaW5kZXhdKTtcbiAgICBjb25zdCBiYXJlUGFyYW1ldGVyID0gcGFyYW1ldGVyLnJlcGxhY2UoL1xccytleHRlbmRzXFxzKy4qJC8sICcnKTtcbiAgICBtYXBwaW5nLnNldChiYXJlUGFyYW1ldGVyLCBhcmd1bWVudCk7XG4gIH1cbiAgcmV0dXJuIG1hcHBpbmc7XG59XG5cbi8qKlxuICogUGFyc2UgZ2VuZXJpYyB0eXBlIGFyZ3VtZW50cyBmcm9tIGEgYmFzZSB0eXBlIGV4cHJlc3Npb24uXG4gKiBFLmcuLCBgSW50ZXJuYWxQbHVnaW48Q2FudmFzUGx1Z2luSW5zdGFuY2U+YCDihpIgYFsnQ2FudmFzUGx1Z2luSW5zdGFuY2UnXWBcbiAqIEhhbmRsZXMgbmVzdGVkIGFuZ2xlIGJyYWNrZXRzOiBgRm9vPEJhcjxCYXo+LCBRdXg+YCDihpIgYFsnQmFyPEJhej4nLCAnUXV4J11gXG4gKlxuICogQHBhcmFtIGJhc2VUeXBlTmFtZSAtIFRoZSBiYXNlIHR5cGUgZXhwcmVzc2lvbiwgZS5nLiBgRm9vPEJhciwgQmF6PmAuXG4gKiBAcmV0dXJucyBUaGUgdHlwZSBhcmd1bWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVR5cGVBcmd1bWVudHMoYmFzZVR5cGVOYW1lOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IG9wZW5JbmRleCA9IGJhc2VUeXBlTmFtZS5pbmRleE9mKCc8Jyk7XG4gIGlmIChvcGVuSW5kZXggPT09IC0xKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGNvbnN0IGlubmVyID0gYmFzZVR5cGVOYW1lLnNsaWNlKG9wZW5JbmRleCArIDEsIC0xKTtcbiAgY29uc3QgJGFyZ3VtZW50czogc3RyaW5nW10gPSBbXTtcbiAgbGV0IGRlcHRoID0gMDtcbiAgbGV0IGN1cnJlbnQgPSAnJztcbiAgZm9yIChjb25zdCBjaCBvZiBpbm5lcikge1xuICAgIGlmIChjaCA9PT0gJzwnKSB7XG4gICAgICBkZXB0aCsrO1xuICAgICAgY3VycmVudCArPSBjaDtcbiAgICB9IGVsc2UgaWYgKGNoID09PSAnPicpIHtcbiAgICAgIGRlcHRoLS07XG4gICAgICBjdXJyZW50ICs9IGNoO1xuICAgIH0gZWxzZSBpZiAoY2ggPT09ICcsJyAmJiBkZXB0aCA9PT0gMCkge1xuICAgICAgJGFyZ3VtZW50cy5wdXNoKGN1cnJlbnQudHJpbSgpKTtcbiAgICAgIGN1cnJlbnQgPSAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudCArPSBjaDtcbiAgICB9XG4gIH1cbiAgaWYgKGN1cnJlbnQudHJpbSgpKSB7XG4gICAgJGFyZ3VtZW50cy5wdXNoKGN1cnJlbnQudHJpbSgpKTtcbiAgfVxuICByZXR1cm4gJGFyZ3VtZW50cztcbn1cblxuLyoqXG4gKiBDb3BpZXMgZXZlcnkgaW5oZXJpdGVkIG1lbWJlciBvbnRvIGl0cyBzdWJ0eXBlcywgc3Vic3RpdHV0aW5nIHRoZSB0eXBlIGFyZ3VtZW50cyB0aGUgc3VidHlwZSBwYXNzZXMuXG4gKlxuICogQHBhcmFtIHR5cGVzIC0gVGhlIGRvY3VtZW50ZWQgdHlwZXMsIGtleWVkIGJ5IHF1YWxpZmllZCBpZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVJbmhlcml0ZWRNZW1iZXJzKHR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4pOiB2b2lkIHtcbiAgZm9yIChjb25zdCBbLCBpbmZvXSBvZiB0eXBlcykge1xuICAgIGZvciAoY29uc3QgYmFzZVR5cGVOYW1lIG9mIFsuLi5pbmZvLmJhc2VUeXBlcywgLi4uaW5mby5pbXBsZW1lbnRzVHlwZXNdKSB7XG4gICAgICBjb25zdCBjbGVhbkJhc2UgPSBiYXNlVHlwZU5hbWUucmVwbGFjZSgvPC4qPiQvLCAnJykudHJpbSgpO1xuICAgICAgY29uc3QgYmFzZUluZm8gPSBmaW5kVHlwZSh0eXBlcywgY2xlYW5CYXNlLCBpbmZvLm5hbWVzcGFjZSk7XG4gICAgICBpZiAoIWJhc2VJbmZvKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0eXBlQXJndW1lbnRzID0gcGFyc2VUeXBlQXJndW1lbnRzKGJhc2VUeXBlTmFtZSk7XG4gICAgICBjb25zdCB0eXBlUGFyYW1ldGVyTWFwID0gYnVpbGRUeXBlUGFyYW1ldGVyTWFwKGJhc2VJbmZvLCB0eXBlQXJndW1lbnRzKTtcblxuICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBiYXNlSW5mby5wcm9wZXJ0aWVzKSB7XG4gICAgICAgIGlmIChpbmZvLnByb3BlcnRpZXMuZXZlcnkoKHApID0+IHAubmFtZSAhPT0gcHJvcGVydHkubmFtZSkpIHtcbiAgICAgICAgICBpbmZvLnByb3BlcnRpZXMucHVzaChzdWJzdGl0dXRlTWVtYmVyVHlwZXMoeyAuLi5wcm9wZXJ0eSwgaW5oZXJpdGVkRnJvbTogYmFzZUluZm8ubmFtZSB9LCB0eXBlUGFyYW1ldGVyTWFwKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBtZXRob2Qgb2YgYmFzZUluZm8ubWV0aG9kcykge1xuICAgICAgICBjb25zdCBoYXNPd25NZXRob2QgPSBpbmZvLm1ldGhvZHMuc29tZSgobSkgPT4gbS5uYW1lID09PSBtZXRob2QubmFtZSAmJiBtLnNpZ25hdHVyZSA9PT0gbWV0aG9kLnNpZ25hdHVyZSk7XG4gICAgICAgIGNvbnN0IGhhc0luaGVyaXRlZE1ldGhvZCA9IGluZm8ubWV0aG9kcy5zb21lKChtKSA9PiBtLmluaGVyaXRlZEZyb20gPT09IGJhc2VJbmZvLm5hbWUgJiYgbS5vdmVybG9hZEtleSA9PT0gbWV0aG9kLm92ZXJsb2FkS2V5KTtcbiAgICAgICAgaWYgKCFoYXNPd25NZXRob2QgJiYgIWhhc0luaGVyaXRlZE1ldGhvZCkge1xuICAgICAgICAgIGluZm8ubWV0aG9kcy5wdXNoKHN1YnN0aXR1dGVNZW1iZXJUeXBlcyh7IC4uLm1ldGhvZCwgaW5oZXJpdGVkRnJvbTogYmFzZUluZm8ubmFtZSB9LCB0eXBlUGFyYW1ldGVyTWFwKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBcHBseSB0eXBlIHBhcmFtZXRlciBzdWJzdGl0dXRpb24gdG8gYWxsIHR5cGUtYmVhcmluZyBmaWVsZHMgb2YgYSBtZW1iZXJcbiAqXG4gKiBAcGFyYW0gbWVtYmVyIC0gVGhlIG1lbWJlci5cbiAqIEBwYXJhbSBtYXBwaW5nIC0gVHlwZSBwYXJhbWV0ZXIgbmFtZXMgbWFwcGVkIHRvIHRoZWlyIGFyZ3VtZW50cy5cbiAqIEByZXR1cm5zIFRoZSBtZW1iZXIgd2l0aCBpdHMgdHlwZXMgc3Vic3RpdHV0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdGl0dXRlTWVtYmVyVHlwZXMobWVtYmVyOiBNZW1iZXJJbmZvLCBtYXBwaW5nOiBNYXA8c3RyaW5nLCBzdHJpbmc+KTogTWVtYmVySW5mbyB7XG4gIHJldHVybiBtYXBwaW5nLnNpemUgPT09IDBcbiAgICA/IG1lbWJlclxuICAgIDoge1xuICAgICAgLi4ubWVtYmVyLFxuICAgICAgcGFyYW1ldGVyczogbWVtYmVyLnBhcmFtZXRlcnMubWFwKChwKSA9PiAoe1xuICAgICAgICAuLi5wLFxuICAgICAgICB0eXBlOiBzdWJzdGl0dXRlVHlwZVBhcmFtcyhwLnR5cGUsIG1hcHBpbmcpXG4gICAgICB9KSksXG4gICAgICByZXR1cm5UeXBlOiBzdWJzdGl0dXRlVHlwZVBhcmFtcyhtZW1iZXIucmV0dXJuVHlwZSwgbWFwcGluZyksXG4gICAgICBzaWduYXR1cmU6IHN1YnN0aXR1dGVUeXBlUGFyYW1zKG1lbWJlci5zaWduYXR1cmUsIG1hcHBpbmcpLFxuICAgICAgdHlwZTogc3Vic3RpdHV0ZVR5cGVQYXJhbXMobWVtYmVyLnR5cGUsIG1hcHBpbmcpXG4gICAgfTtcbn1cblxuLyoqXG4gKiBTdWJzdGl0dXRlIGdlbmVyaWMgdHlwZSBwYXJhbWV0ZXJzIGluIGEgdHlwZSBzdHJpbmcgdXNpbmcgYSBtYXBwaW5nXG4gKlxuICogQHBhcmFtIHR5cGVUZXh0IC0gVGhlIHR5cGUgdGV4dC5cbiAqIEBwYXJhbSBtYXBwaW5nIC0gVHlwZSBwYXJhbWV0ZXIgbmFtZXMgbWFwcGVkIHRvIHRoZWlyIGFyZ3VtZW50cy5cbiAqIEByZXR1cm5zIFRoZSBzdWJzdGl0dXRlZCB0eXBlIHRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdGl0dXRlVHlwZVBhcmFtcyh0eXBlVGV4dDogc3RyaW5nLCBtYXBwaW5nOiBNYXA8c3RyaW5nLCBzdHJpbmc+KTogc3RyaW5nIHtcbiAgcmV0dXJuIG1hcHBpbmcuc2l6ZSA9PT0gMFxuICAgID8gdHlwZVRleHRcbiAgICA6IHR5cGVUZXh0LnJlcGxhY2VBbGwoL1xcYig/PHR5cGVOYW1lPlthLXpBLVpdW2EtekEtWjAtOV0qKVxcYi9nLCAobWF0Y2gpID0+IHtcbiAgICAgIHJldHVybiBtYXBwaW5nLmdldChtYXRjaCkgPz8gbWF0Y2g7XG4gICAgfSk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBU0EsU0FBUyx5QkFBeUI7QUFPbEMsU0FBUyxnQkFBZ0I7QUFXbEIsU0FBUyxzQkFBc0IsVUFBb0IsZUFBOEM7QUFDdEcsUUFBTSxVQUFVLG9CQUFJLElBQW9CO0FBQ3hDLFFBQU0sUUFBUSxLQUFLLElBQUksU0FBUyxlQUFlLFFBQVEsY0FBYyxNQUFNO0FBQzNFLFdBQVMsUUFBUSxHQUFHLFFBQVEsT0FBTyxTQUFTO0FBRTFDLFVBQU0sWUFBWSxrQkFBa0IsU0FBUyxlQUFlLEtBQUssQ0FBQztBQUNsRSxVQUFNLFdBQVcsa0JBQWtCLGNBQWMsS0FBSyxDQUFDO0FBQ3ZELFVBQU0sZ0JBQWdCLFVBQVUsUUFBUSxvQkFBb0IsRUFBRTtBQUM5RCxZQUFRLElBQUksZUFBZSxRQUFRO0FBQUEsRUFDckM7QUFDQSxTQUFPO0FBQ1Q7QUFVTyxTQUFTLG1CQUFtQixjQUFnQztBQUNqRSxRQUFNLFlBQVksYUFBYSxRQUFRLEdBQUc7QUFDMUMsTUFBSSxjQUFjLElBQUk7QUFDcEIsV0FBTyxDQUFDO0FBQUEsRUFDVjtBQUNBLFFBQU0sUUFBUSxhQUFhLE1BQU0sWUFBWSxHQUFHLEVBQUU7QUFDbEQsUUFBTSxhQUF1QixDQUFDO0FBQzlCLE1BQUksUUFBUTtBQUNaLE1BQUksVUFBVTtBQUNkLGFBQVcsTUFBTSxPQUFPO0FBQ3RCLFFBQUksT0FBTyxLQUFLO0FBQ2Q7QUFDQSxpQkFBVztBQUFBLElBQ2IsV0FBVyxPQUFPLEtBQUs7QUFDckI7QUFDQSxpQkFBVztBQUFBLElBQ2IsV0FBVyxPQUFPLE9BQU8sVUFBVSxHQUFHO0FBQ3BDLGlCQUFXLEtBQUssUUFBUSxLQUFLLENBQUM7QUFDOUIsZ0JBQVU7QUFBQSxJQUNaLE9BQU87QUFDTCxpQkFBVztBQUFBLElBQ2I7QUFBQSxFQUNGO0FBQ0EsTUFBSSxRQUFRLEtBQUssR0FBRztBQUNsQixlQUFXLEtBQUssUUFBUSxLQUFLLENBQUM7QUFBQSxFQUNoQztBQUNBLFNBQU87QUFDVDtBQU9PLFNBQVMsd0JBQXdCLE9BQW9DO0FBQzFFLGFBQVcsQ0FBQyxFQUFFLElBQUksS0FBSyxPQUFPO0FBQzVCLGVBQVcsZ0JBQWdCLENBQUMsR0FBRyxLQUFLLFdBQVcsR0FBRyxLQUFLLGVBQWUsR0FBRztBQUN2RSxZQUFNLFlBQVksYUFBYSxRQUFRLFNBQVMsRUFBRSxFQUFFLEtBQUs7QUFDekQsWUFBTSxXQUFXLFNBQVMsT0FBTyxXQUFXLEtBQUssU0FBUztBQUMxRCxVQUFJLENBQUMsVUFBVTtBQUNiO0FBQUEsTUFDRjtBQUVBLFlBQU0sZ0JBQWdCLG1CQUFtQixZQUFZO0FBQ3JELFlBQU0sbUJBQW1CLHNCQUFzQixVQUFVLGFBQWE7QUFFdEUsaUJBQVcsWUFBWSxTQUFTLFlBQVk7QUFDMUMsWUFBSSxLQUFLLFdBQVcsTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFTLFNBQVMsSUFBSSxHQUFHO0FBQzFELGVBQUssV0FBVyxLQUFLLHNCQUFzQixFQUFFLEdBQUcsVUFBVSxlQUFlLFNBQVMsS0FBSyxHQUFHLGdCQUFnQixDQUFDO0FBQUEsUUFDN0c7QUFBQSxNQUNGO0FBRUEsaUJBQVcsVUFBVSxTQUFTLFNBQVM7QUFDckMsY0FBTSxlQUFlLEtBQUssUUFBUSxLQUFLLENBQUMsTUFBTSxFQUFFLFNBQVMsT0FBTyxRQUFRLEVBQUUsY0FBYyxPQUFPLFNBQVM7QUFDeEcsY0FBTSxxQkFBcUIsS0FBSyxRQUFRLEtBQUssQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLFNBQVMsUUFBUSxFQUFFLGdCQUFnQixPQUFPLFdBQVc7QUFDN0gsWUFBSSxDQUFDLGdCQUFnQixDQUFDLG9CQUFvQjtBQUN4QyxlQUFLLFFBQVEsS0FBSyxzQkFBc0IsRUFBRSxHQUFHLFFBQVEsZUFBZSxTQUFTLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQztBQUFBLFFBQ3hHO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0Y7QUFTTyxTQUFTLHNCQUFzQixRQUFvQixTQUEwQztBQUNsRyxTQUFPLFFBQVEsU0FBUyxJQUNwQixTQUNBO0FBQUEsSUFDQSxHQUFHO0FBQUEsSUFDSCxZQUFZLE9BQU8sV0FBVyxJQUFJLENBQUMsT0FBTztBQUFBLE1BQ3hDLEdBQUc7QUFBQSxNQUNILE1BQU0scUJBQXFCLEVBQUUsTUFBTSxPQUFPO0FBQUEsSUFDNUMsRUFBRTtBQUFBLElBQ0YsWUFBWSxxQkFBcUIsT0FBTyxZQUFZLE9BQU87QUFBQSxJQUMzRCxXQUFXLHFCQUFxQixPQUFPLFdBQVcsT0FBTztBQUFBLElBQ3pELE1BQU0scUJBQXFCLE9BQU8sTUFBTSxPQUFPO0FBQUEsRUFDakQ7QUFDSjtBQVNPLFNBQVMscUJBQXFCLFVBQWtCLFNBQXNDO0FBQzNGLFNBQU8sUUFBUSxTQUFTLElBQ3BCLFdBQ0EsU0FBUyxXQUFXLDBDQUEwQyxDQUFDLFVBQVU7QUFDekUsV0FBTyxRQUFRLElBQUksS0FBSyxLQUFLO0FBQUEsRUFDL0IsQ0FBQztBQUNMOyIsIm5hbWVzIjpbXX0=
141
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvYXBpLWRvYy10eXBlLW1lcmdpbmcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEluaGVyaXRhbmNlIHJlc29sdXRpb246IGNvcGllcyBpbmhlcml0ZWQgbWVtYmVycyBvbnRvIHN1YnR5cGVzLCBzdWJzdGl0dXRpbmcgZ2VuZXJpYyB0eXBlIGFyZ3MuXG4gKlxuICogKEEgZG9jdW1lbnRlZCBwYWNrYWdlIGlzIGEgbm9ybWFsIGxpYnJhcnksIG5vdCBhbiBhdWdtZW50YXRpb24gb2YgYW5vdGhlciBwYWNrYWdlJ3MgZGVjbGFyYXRpb25zLCBzbyB0aGVyZSBpcyBub1xuICogb2ZmaWNpYWwtdnMtdW5vZmZpY2lhbCBtZXJnZSBtYWNoaW5lcnkgaGVyZSDigJQgb25seSB0aGUgZ2VuZXJpYyBpbmhlcml0YW5jZSBoZWxwZXJzLilcbiAqL1xuXG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5cbmltcG9ydCB0eXBlIHtcbiAgTWVtYmVySW5mbyxcbiAgVHlwZUluZm9cbn0gZnJvbSAnLi9hcGktZG9jLXR5cGVzLnRzJztcblxuaW1wb3J0IHsgZmluZFR5cGUgfSBmcm9tICcuL2FwaS1kb2MtbGluay1yZW5kZXJpbmcudHMnO1xuXG4vKipcbiAqIEJ1aWxkIGEgbWFwcGluZyBmcm9tIHBhcmVudCB0eXBlIHBhcmFtZXRlciBuYW1lcyB0byBjb25jcmV0ZSB0eXBlIGFyZ3VtZW50cy5cbiAqIEUuZy4sIHBhcmVudCBoYXMgYHR5cGVQYXJhbWV0ZXJzOiBbJ0luc3RhbmNlIGV4dGVuZHMgQmFzZUluc3RhbmNlJ11gIGFuZFxuICogY2hpbGQgZXh0ZW5kcyBgUGFyZW50PENhbnZhc1BsdWdpbkluc3RhbmNlPmAg4oaSIGB7SW5zdGFuY2U6ICdDYW52YXNQbHVnaW5JbnN0YW5jZSd9YFxuICpcbiAqIEBwYXJhbSBiYXNlSW5mbyAtIFRoZSBiYXNlIHR5cGUuXG4gKiBAcGFyYW0gdHlwZUFyZ3VtZW50cyAtIFRoZSB0eXBlIGFyZ3VtZW50cyB0aGUgYmFzZSB0eXBlIGlzIGdpdmVuLlxuICogQHJldHVybnMgVGhlIHBhcmFtZXRlciBuYW1lcyBtYXBwZWQgdG8gdGhlaXIgYXJndW1lbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRUeXBlUGFyYW1ldGVyTWFwKGJhc2VJbmZvOiBUeXBlSW5mbywgdHlwZUFyZ3VtZW50czogc3RyaW5nW10pOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcbiAgY29uc3QgbWFwcGluZyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gIGNvbnN0IGNvdW50ID0gTWF0aC5taW4oYmFzZUluZm8udHlwZVBhcmFtZXRlcnMubGVuZ3RoLCB0eXBlQXJndW1lbnRzLmxlbmd0aCk7XG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBjb3VudDsgaW5kZXgrKykge1xuICAgIC8vIEJvdGggbGlzdHMgYXJlIGxvbmdlciB0aGFuIGBpbmRleGAuXG4gICAgY29uc3QgcGFyYW1ldGVyID0gZW5zdXJlTm9uTnVsbGFibGUoYmFzZUluZm8udHlwZVBhcmFtZXRlcnNbaW5kZXhdKTtcbiAgICBjb25zdCBhcmd1bWVudCA9IGVuc3VyZU5vbk51bGxhYmxlKHR5cGVBcmd1bWVudHNbaW5kZXhdKTtcbiAgICBjb25zdCBiYXJlUGFyYW1ldGVyID0gcGFyYW1ldGVyLnJlcGxhY2UoL1xccytleHRlbmRzXFxzKy4qJC8sICcnKTtcbiAgICBtYXBwaW5nLnNldChiYXJlUGFyYW1ldGVyLCBhcmd1bWVudCk7XG4gIH1cbiAgcmV0dXJuIG1hcHBpbmc7XG59XG5cbi8qKlxuICogUGFyc2UgZ2VuZXJpYyB0eXBlIGFyZ3VtZW50cyBmcm9tIGEgYmFzZSB0eXBlIGV4cHJlc3Npb24uXG4gKiBFLmcuLCBgSW50ZXJuYWxQbHVnaW48Q2FudmFzUGx1Z2luSW5zdGFuY2U+YCDihpIgYFsnQ2FudmFzUGx1Z2luSW5zdGFuY2UnXWBcbiAqIEhhbmRsZXMgbmVzdGVkIGFuZ2xlIGJyYWNrZXRzOiBgRm9vPEJhcjxCYXo+LCBRdXg+YCDihpIgYFsnQmFyPEJhej4nLCAnUXV4J11gXG4gKlxuICogQHBhcmFtIGJhc2VUeXBlTmFtZSAtIFRoZSBiYXNlIHR5cGUgZXhwcmVzc2lvbiwgZS5nLiBgRm9vPEJhciwgQmF6PmAuXG4gKiBAcmV0dXJucyBUaGUgdHlwZSBhcmd1bWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVR5cGVBcmd1bWVudHMoYmFzZVR5cGVOYW1lOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IG9wZW5JbmRleCA9IGJhc2VUeXBlTmFtZS5pbmRleE9mKCc8Jyk7XG4gIGlmIChvcGVuSW5kZXggPT09IC0xKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGNvbnN0IGlubmVyID0gYmFzZVR5cGVOYW1lLnNsaWNlKG9wZW5JbmRleCArIDEsIC0xKTtcbiAgY29uc3QgJGFyZ3VtZW50czogc3RyaW5nW10gPSBbXTtcbiAgbGV0IGRlcHRoID0gMDtcbiAgbGV0IGN1cnJlbnQgPSAnJztcbiAgZm9yIChjb25zdCBjaCBvZiBpbm5lcikge1xuICAgIGlmIChjaCA9PT0gJzwnKSB7XG4gICAgICBkZXB0aCsrO1xuICAgICAgY3VycmVudCArPSBjaDtcbiAgICB9IGVsc2UgaWYgKGNoID09PSAnPicpIHtcbiAgICAgIGRlcHRoLS07XG4gICAgICBjdXJyZW50ICs9IGNoO1xuICAgIH0gZWxzZSBpZiAoY2ggPT09ICcsJyAmJiBkZXB0aCA9PT0gMCkge1xuICAgICAgJGFyZ3VtZW50cy5wdXNoKGN1cnJlbnQudHJpbSgpKTtcbiAgICAgIGN1cnJlbnQgPSAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudCArPSBjaDtcbiAgICB9XG4gIH1cbiAgaWYgKGN1cnJlbnQudHJpbSgpKSB7XG4gICAgJGFyZ3VtZW50cy5wdXNoKGN1cnJlbnQudHJpbSgpKTtcbiAgfVxuICByZXR1cm4gJGFyZ3VtZW50cztcbn1cblxuLyoqXG4gKiBDb3BpZXMgZXZlcnkgaW5oZXJpdGVkIG1lbWJlciBvbnRvIGl0cyBzdWJ0eXBlcywgc3Vic3RpdHV0aW5nIHRoZSB0eXBlIGFyZ3VtZW50cyB0aGUgc3VidHlwZSBwYXNzZXMuXG4gKlxuICogQHBhcmFtIHR5cGVzIC0gVGhlIGRvY3VtZW50ZWQgdHlwZXMsIGtleWVkIGJ5IHF1YWxpZmllZCBpZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVJbmhlcml0ZWRNZW1iZXJzKHR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4pOiB2b2lkIHtcbiAgY29uc3QgcmVzb2x2ZWQgPSBuZXcgU2V0PFR5cGVJbmZvPigpO1xuICBjb25zdCByZXNvbHZpbmcgPSBuZXcgU2V0PFR5cGVJbmZvPigpO1xuXG4gIGZvciAoY29uc3QgaW5mbyBvZiB0eXBlcy52YWx1ZXMoKSkge1xuICAgIHJlc29sdmUoaW5mbyk7XG4gIH1cblxuICBmdW5jdGlvbiByZXNvbHZlKGluZm86IFR5cGVJbmZvKTogdm9pZCB7XG4gICAgaWYgKHJlc29sdmVkLmhhcyhpbmZvKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXNvbHZpbmcuYWRkKGluZm8pO1xuICAgIGZvciAoY29uc3QgYmFzZVR5cGVOYW1lIG9mIFsuLi5pbmZvLmJhc2VUeXBlcywgLi4uaW5mby5pbXBsZW1lbnRzVHlwZXNdKSB7XG4gICAgICBjb25zdCBjbGVhbkJhc2UgPSBiYXNlVHlwZU5hbWUucmVwbGFjZSgvPC4qPiQvLCAnJykudHJpbSgpO1xuICAgICAgY29uc3QgYmFzZUluZm8gPSBmaW5kVHlwZSh0eXBlcywgY2xlYW5CYXNlLCBpbmZvLm5hbWVzcGFjZSk7XG4gICAgICBpZiAoIWJhc2VJbmZvIHx8IHJlc29sdmluZy5oYXMoYmFzZUluZm8pKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICByZXNvbHZlKGJhc2VJbmZvKTtcblxuICAgICAgY29uc3QgdHlwZUFyZ3VtZW50cyA9IHBhcnNlVHlwZUFyZ3VtZW50cyhiYXNlVHlwZU5hbWUpO1xuICAgICAgY29uc3QgdHlwZVBhcmFtZXRlck1hcCA9IGJ1aWxkVHlwZVBhcmFtZXRlck1hcChiYXNlSW5mbywgdHlwZUFyZ3VtZW50cyk7XG5cbiAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgYmFzZUluZm8ucHJvcGVydGllcykge1xuICAgICAgICBpZiAoaW5mby5wcm9wZXJ0aWVzLmV2ZXJ5KChwKSA9PiBwLm5hbWUgIT09IHByb3BlcnR5Lm5hbWUpKSB7XG4gICAgICAgICAgaW5mby5wcm9wZXJ0aWVzLnB1c2goc3Vic3RpdHV0ZU1lbWJlclR5cGVzKHsgLi4ucHJvcGVydHksIGluaGVyaXRlZEZyb206IGJhc2VJbmZvLm5hbWUgfSwgdHlwZVBhcmFtZXRlck1hcCkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgbWV0aG9kIG9mIGJhc2VJbmZvLm1ldGhvZHMpIHtcbiAgICAgICAgY29uc3QgaW5oZXJpdGVkTWV0aG9kID0gc3Vic3RpdHV0ZU1lbWJlclR5cGVzKHsgLi4ubWV0aG9kLCBpbmhlcml0ZWRGcm9tOiBiYXNlSW5mby5uYW1lIH0sIHR5cGVQYXJhbWV0ZXJNYXApO1xuICAgICAgICBjb25zdCBoYXNNZXRob2QgPSBpbmZvLm1ldGhvZHMuc29tZSgobSkgPT4gbS5uYW1lID09PSBpbmhlcml0ZWRNZXRob2QubmFtZSAmJiBtLnNpZ25hdHVyZSA9PT0gaW5oZXJpdGVkTWV0aG9kLnNpZ25hdHVyZSk7XG4gICAgICAgIGlmICghaGFzTWV0aG9kKSB7XG4gICAgICAgICAgaW5mby5tZXRob2RzLnB1c2goaW5oZXJpdGVkTWV0aG9kKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXNvbHZpbmcuZGVsZXRlKGluZm8pO1xuICAgIHJlc29sdmVkLmFkZChpbmZvKTtcbiAgfVxufVxuXG4vKipcbiAqIEFwcGx5IHR5cGUgcGFyYW1ldGVyIHN1YnN0aXR1dGlvbiB0byBhbGwgdHlwZS1iZWFyaW5nIGZpZWxkcyBvZiBhIG1lbWJlclxuICpcbiAqIEBwYXJhbSBtZW1iZXIgLSBUaGUgbWVtYmVyLlxuICogQHBhcmFtIG1hcHBpbmcgLSBUeXBlIHBhcmFtZXRlciBuYW1lcyBtYXBwZWQgdG8gdGhlaXIgYXJndW1lbnRzLlxuICogQHJldHVybnMgVGhlIG1lbWJlciB3aXRoIGl0cyB0eXBlcyBzdWJzdGl0dXRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0aXR1dGVNZW1iZXJUeXBlcyhtZW1iZXI6IE1lbWJlckluZm8sIG1hcHBpbmc6IE1hcDxzdHJpbmcsIHN0cmluZz4pOiBNZW1iZXJJbmZvIHtcbiAgcmV0dXJuIG1hcHBpbmcuc2l6ZSA9PT0gMFxuICAgID8gbWVtYmVyXG4gICAgOiB7XG4gICAgICAuLi5tZW1iZXIsXG4gICAgICBwYXJhbWV0ZXJzOiBtZW1iZXIucGFyYW1ldGVycy5tYXAoKHApID0+ICh7XG4gICAgICAgIC4uLnAsXG4gICAgICAgIHR5cGU6IHN1YnN0aXR1dGVUeXBlUGFyYW1zKHAudHlwZSwgbWFwcGluZylcbiAgICAgIH0pKSxcbiAgICAgIHJldHVyblR5cGU6IHN1YnN0aXR1dGVUeXBlUGFyYW1zKG1lbWJlci5yZXR1cm5UeXBlLCBtYXBwaW5nKSxcbiAgICAgIHNpZ25hdHVyZTogc3Vic3RpdHV0ZVR5cGVQYXJhbXMobWVtYmVyLnNpZ25hdHVyZSwgbWFwcGluZyksXG4gICAgICB0eXBlOiBzdWJzdGl0dXRlVHlwZVBhcmFtcyhtZW1iZXIudHlwZSwgbWFwcGluZylcbiAgICB9O1xufVxuXG4vKipcbiAqIFN1YnN0aXR1dGUgZ2VuZXJpYyB0eXBlIHBhcmFtZXRlcnMgaW4gYSB0eXBlIHN0cmluZyB1c2luZyBhIG1hcHBpbmdcbiAqXG4gKiBAcGFyYW0gdHlwZVRleHQgLSBUaGUgdHlwZSB0ZXh0LlxuICogQHBhcmFtIG1hcHBpbmcgLSBUeXBlIHBhcmFtZXRlciBuYW1lcyBtYXBwZWQgdG8gdGhlaXIgYXJndW1lbnRzLlxuICogQHJldHVybnMgVGhlIHN1YnN0aXR1dGVkIHR5cGUgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0aXR1dGVUeXBlUGFyYW1zKHR5cGVUZXh0OiBzdHJpbmcsIG1hcHBpbmc6IE1hcDxzdHJpbmcsIHN0cmluZz4pOiBzdHJpbmcge1xuICByZXR1cm4gbWFwcGluZy5zaXplID09PSAwXG4gICAgPyB0eXBlVGV4dFxuICAgIDogdHlwZVRleHQucmVwbGFjZUFsbCgvXFxiKD88dHlwZU5hbWU+W2EtekEtWl1bYS16QS1aMC05XSopXFxiL2csIChtYXRjaCkgPT4ge1xuICAgICAgcmV0dXJuIG1hcHBpbmcuZ2V0KG1hdGNoKSA/PyBtYXRjaDtcbiAgICB9KTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFTQSxTQUFTLHlCQUF5QjtBQU9sQyxTQUFTLGdCQUFnQjtBQVdsQixTQUFTLHNCQUFzQixVQUFvQixlQUE4QztBQUN0RyxRQUFNLFVBQVUsb0JBQUksSUFBb0I7QUFDeEMsUUFBTSxRQUFRLEtBQUssSUFBSSxTQUFTLGVBQWUsUUFBUSxjQUFjLE1BQU07QUFDM0UsV0FBUyxRQUFRLEdBQUcsUUFBUSxPQUFPLFNBQVM7QUFFMUMsVUFBTSxZQUFZLGtCQUFrQixTQUFTLGVBQWUsS0FBSyxDQUFDO0FBQ2xFLFVBQU0sV0FBVyxrQkFBa0IsY0FBYyxLQUFLLENBQUM7QUFDdkQsVUFBTSxnQkFBZ0IsVUFBVSxRQUFRLG9CQUFvQixFQUFFO0FBQzlELFlBQVEsSUFBSSxlQUFlLFFBQVE7QUFBQSxFQUNyQztBQUNBLFNBQU87QUFDVDtBQVVPLFNBQVMsbUJBQW1CLGNBQWdDO0FBQ2pFLFFBQU0sWUFBWSxhQUFhLFFBQVEsR0FBRztBQUMxQyxNQUFJLGNBQWMsSUFBSTtBQUNwQixXQUFPLENBQUM7QUFBQSxFQUNWO0FBQ0EsUUFBTSxRQUFRLGFBQWEsTUFBTSxZQUFZLEdBQUcsRUFBRTtBQUNsRCxRQUFNLGFBQXVCLENBQUM7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
@@ -106,7 +106,7 @@ async function lint(options) {
106
106
  const skipEntries = readLinkCheckSkipEntries();
107
107
  const skipConfigFolder = skipEntries.length > 0 ? await writeSkipConfig(skipEntries, linkCheckFiles, rootFolder) : null;
108
108
  try {
109
- await runLinkinator(linkCheckFiles, skipConfigFolder);
109
+ await runLinkinator(linkCheckFiles, skipConfigFolder, rootFolder);
110
110
  } finally {
111
111
  if (skipConfigFolder !== null) {
112
112
  await rm(skipConfigFolder, { force: true, recursive: true });
@@ -127,9 +127,11 @@ async function getMarkdownFiles() {
127
127
  ]
128
128
  }));
129
129
  }
130
- async function runLinkinator(linkCheckFiles, skipConfigFolder) {
130
+ async function runLinkinator(linkCheckFiles, skipConfigFolder, rootFolder) {
131
131
  await execFromRoot([
132
132
  ...resolveToolCommand({ tool: "linkinator" }),
133
+ "--server-root",
134
+ resolve(rootFolder),
133
135
  "--concurrency",
134
136
  String(getBulkConcurrency(LINK_CHECK_CONCURRENCY)),
135
137
  "--timeout",
@@ -168,4 +170,4 @@ async function writeSkipConfig(skipEntries, linkCheckFiles, rootFolder) {
168
170
  export {
169
171
  lint
170
172
  };
171
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL21hcmtkb3dubGludC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogTGludCBtYXJrZG93biBkb2N1bWVudGF0aW9uIHVzaW5nIGBtYXJrZG93bmxpbnQtY2xpMmAgYW5kIGBsaW5raW5hdG9yYC5cbiAqL1xuXG5pbXBvcnQgeyB0b0FycmF5IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FzeW5jJztcbmltcG9ydCB7IGdldExpYkRlYnVnZ2VyIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2RlYnVnJztcbmltcG9ydCB7IGJhc2VuYW1lIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3BhdGgnO1xuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtcbiAgY3AsXG4gIGdsb2IsXG4gIG1rZHRlbXAsXG4gIHJlYWRGaWxlLFxuICBybSxcbiAgd3JpdGVGaWxlXG59IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQge1xuICBqb2luLFxuICBtYXRjaGVzR2xvYixcbiAgcmVsYXRpdmUsXG4gIHJlc29sdmVcbn0gZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IHR5cGUgeyBMaW5rQ2hlY2tTa2lwRW50cnkgfSBmcm9tICcuLi9saW5rLWNoZWNrLXNraXAudHMnO1xuXG5pbXBvcnQgeyBnZXRCdWxrQ29uY3VycmVuY3kgfSBmcm9tICcuLi9idWxrLWNvbmN1cnJlbmN5LnRzJztcbmltcG9ydCB7IGdldE5vbklnbm9yZWRGaWxlcyB9IGZyb20gJy4uL2dpdC50cyc7XG5pbXBvcnQge1xuICBnZXRMaW5rQ2hlY2tTa2lwV2FybmluZ3MsXG4gIG1lcmdlTGlua2luYXRvclNraXBDb25maWcsXG4gIHJlYWRMaW5rQ2hlY2tTa2lwRW50cmllc1xufSBmcm9tICcuLi9saW5rLWNoZWNrLXNraXAudHMnO1xuaW1wb3J0IHsgcmVzb2x2ZVRvb2xDb21tYW5kIH0gZnJvbSAnLi4vcGFja2FnZS1tYW5hZ2VyLnRzJztcbmltcG9ydCB7IFJlcG9QYXRocyB9IGZyb20gJy4uL3JlcG8tcGF0aHMudHMnO1xuaW1wb3J0IHtcbiAgZXhlY0Zyb21Sb290LFxuICBnZXRSb290Rm9sZGVyLFxuICByZXNvbHZlUGF0aEZyb21Sb290U2FmZVxufSBmcm9tICcuLi9yb290LnRzJztcbmltcG9ydCB7XG4gIGNoZWNrSXNJbk5vZGVNb2R1bGVzLFxuICBOT0RFX01PRFVMRVNfSUdOT1JFX0dMT0Jcbn0gZnJvbSAnLi9tYXJrZG93bmxpbnQtaWdub3Jlcy50cyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgdGhlIHtAbGluayBsaW50fSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaW50T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBmaWxlIGNvcGllZCB0byB0aGUgcHJvamVjdCByb290IHdoZW4gdGhlIHByb2plY3QgaGFzIG5vbmUuIFdpdGhvdXQgaXQsXG4gICAqIGBtYXJrZG93bmxpbnQtY2xpMmAgcnVucyB3aXRoIGl0cyBvd24gZGVmYXVsdHMuXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0Q29uZmlnRmlsZVBhdGg/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEdsb2JzLCByZWxhdGl2ZSB0byB0aGUgcm9vdCBmb2xkZXIsIG9mIG1hcmtkb3duIGZpbGVzIHRvIGxlYXZlIG91dCBvZiB0aGUgYGxpbmtpbmF0b3JgIHBhc3Mgb25seTtcbiAgICogYG1hcmtkb3dubGludC1jbGkyYCBzdGlsbCBsaW50cyB0aGVtLlxuICAgKlxuICAgKiBGb3IgYSBkb2N1bWVudGF0aW9uIHNpdGUgd2hvc2UgcGFnZXMgbGluayB0byBlYWNoIG90aGVyIGJhc2UtYWJzb2x1dGVseSAoYC88c2l0ZS1iYXNlPi9ndWlkZXMvLi4uYCk6IHRob3NlXG4gICAqIGxpbmtzIHJlc29sdmUgb25seSBhZ2FpbnN0IHRoZSBCVUlMVCBzaXRlLCBzbyBgbGlua2luYXRvcmAgcmVwb3J0cyBlYWNoIG9uZSBhcyBhIDQwNCwgYW5kIHRoZSBzaXRlJ3Mgb3duXG4gICAqIGJ1aWxkIGlzIHdoYXQgY2hlY2tzIHRoZW0uXG4gICAqXG4gICAqIEBleGFtcGxlIGBbJ2RvY3MvKionXWBcbiAgICovXG4gIHJlYWRvbmx5IGxpbmtDaGVja0V4Y2x1ZGVHbG9icz86IHJlYWRvbmx5IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBmaWxlIHBhdGhzIHRvIGxpbnQuIElmIG9taXR0ZWQsIGxpbnRzIHRoZSBlbnRpcmUgcHJvamVjdC5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGhzPzogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZml4IGxpbnRpbmcgaXNzdWVzIGF1dG9tYXRpY2FsbHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEZpeD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogTGludCBtYXJrZG93biBkb2N1bWVudGF0aW9uIHVzaW5nIGBtYXJrZG93bmxpbnQtY2xpMmAgYW5kIGBsaW5raW5hdG9yYC5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSB7QGxpbmsgTGludE9wdGlvbnN9LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGludChvcHRpb25zPzogTGludE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBkZWZhdWx0Q29uZmlnRmlsZVBhdGgsIGxpbmtDaGVja0V4Y2x1ZGVHbG9icyA9IFtdLCBwYXRocywgc2hvdWxkRml4ID0gZmFsc2UgfSA9IG9wdGlvbnMgPz8ge307XG4gIGNvbnN0IGNvbmZpZ0ZpbGVzID0gW1xuICAgIFJlcG9QYXRocy5NYXJrZG93bmxpbnRDbGkyQ29uZmlnSnNvbmMsXG4gICAgUmVwb1BhdGhzLk1hcmtkb3dubGludENsaTJDb25maWdZYW1sLFxuICAgIFJlcG9QYXRocy5NYXJrZG93bmxpbnRDbGkyQ29uZmlnQ2pzLFxuICAgIFJlcG9QYXRocy5NYXJrZG93bmxpbnRDbGkyQ29uZmlnTWpzLFxuICAgIFJlcG9QYXRocy5NYXJrZG93bmxpbnRDb25maWdKc29uYyxcbiAgICBSZXBvUGF0aHMuTWFya2Rvd25saW50Q29uZmlnSnNvbixcbiAgICBSZXBvUGF0aHMuTWFya2Rvd25saW50Q29uZmlnWWFtbCxcbiAgICBSZXBvUGF0aHMuTWFya2Rvd25saW50Q29uZmlnWW1sLFxuICAgIFJlcG9QYXRocy5NYXJrZG93bmxpbnRDb25maWdDanMsXG4gICAgUmVwb1BhdGhzLk1hcmtkb3dubGludENvbmZpZ01qc1xuICBdO1xuXG4gIGNvbnN0IGRvZXNDb25maWdGaWxlRXhpc3QgPSBjb25maWdGaWxlcy5zb21lKChjb25maWdGaWxlKSA9PiB7XG4gICAgY29uc3QgY29uZmlnRmlsZVBhdGggPSByZXNvbHZlUGF0aEZyb21Sb290U2FmZSh7IHBhdGg6IGNvbmZpZ0ZpbGUgfSk7XG4gICAgcmV0dXJuIGV4aXN0c1N5bmMoY29uZmlnRmlsZVBhdGgpO1xuICB9KTtcblxuICBpZiAoIWRvZXNDb25maWdGaWxlRXhpc3QgJiYgZGVmYXVsdENvbmZpZ0ZpbGVQYXRoKSB7XG4gICAgZ2V0TGliRGVidWdnZXIoJ21hcmtkb3dubGludDpsaW50JykoJ21hcmtkb3dubGludCBjb25maWd1cmF0aW9uIGZpbGUgbm90IGZvdW5kLiBDcmVhdGluZyBkZWZhdWx0IGNvbmZpZy4uLicpO1xuICAgIGF3YWl0IGNwKGRlZmF1bHRDb25maWdGaWxlUGF0aCwgcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmUoeyBwYXRoOiBiYXNlbmFtZShkZWZhdWx0Q29uZmlnRmlsZVBhdGgpIH0pKTtcbiAgfVxuXG4gIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBUaGUgcGF0aHMtcHJvdmlkZWQgYnJhbmNoZXMgYXJlIG9ubHkgZXhlcmNpc2VkIGJ5IGNvbnN1bWVyIHByb2plY3RzIHBhc3NpbmcgZmlsZSBsaXN0cy4gKi9cbiAgY29uc3QgdGFyZ2V0cyA9IHBhdGhzPy5sZW5ndGggPyBwYXRocyA6IFtSZXBvUGF0aHMuQ3VycmVudEZvbGRlcl07XG4gIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gIGF3YWl0IGV4ZWNGcm9tUm9vdChbLi4ucmVzb2x2ZVRvb2xDb21tYW5kKHsgdG9vbDogJ21hcmtkb3dubGludC1jbGkyJyB9KSwgLi4uKHNob3VsZEZpeCA/IFsnLS1maXgnXSA6IFtdKSwgeyBiYXRjaGVkQXJndW1lbnRzOiB0YXJnZXRzIH1dKTtcblxuICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gVGhlIHBhdGhzLXByb3ZpZGVkIGJyYW5jaCBpcyBvbmx5IGV4ZXJjaXNlZCBieSBjb25zdW1lciBwcm9qZWN0cyBwYXNzaW5nIGZpbGUgbGlzdHMuICovXG4gIGNvbnN0IHJvb3RGb2xkZXIgPSBnZXRSb290Rm9sZGVyKCkgPz8gcHJvY2Vzcy5jd2QoKTtcbiAgY29uc3QgbWRGaWxlcyA9IHBhdGhzPy5sZW5ndGhcbiAgICA/IHBhdGhzLm1hcCgocCkgPT4gcmVsYXRpdmUocm9vdEZvbGRlciwgcCkucmVwbGFjZUFsbCgnXFxcXCcsICcvJykgfHwgcClcbiAgICA6IGF3YWl0IGdldE1hcmtkb3duRmlsZXMoKTtcbiAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgY29uc3QgbGlua0NoZWNrRmlsZXMgPSBtZEZpbGVzLmZpbHRlcigobWRGaWxlKSA9PiBsaW5rQ2hlY2tFeGNsdWRlR2xvYnMuZXZlcnkoKGV4Y2x1ZGVHbG9iKSA9PiAhbWF0Y2hlc0dsb2IobWRGaWxlLCBleGNsdWRlR2xvYikpKTtcbiAgLy8gYGxpbmtpbmF0b3JgIHdpdGggbm8gTE9DQVRJT04gcHJpbnRzIGl0cyB1c2FnZSBhbmQgZXhpdHMgbm9uLXplcm8sIHNvIGEgbGlzdCBlbXB0aWVkIGJ5IHRoZSBleGNsdXNpb25zIGhhcyBub3RoaW5nIHRvIGNoZWNrLlxuICBpZiAobGlua0NoZWNrRmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHNraXBFbnRyaWVzID0gcmVhZExpbmtDaGVja1NraXBFbnRyaWVzKCk7XG4gIGNvbnN0IHNraXBDb25maWdGb2xkZXIgPSBza2lwRW50cmllcy5sZW5ndGggPiAwID8gYXdhaXQgd3JpdGVTa2lwQ29uZmlnKHNraXBFbnRyaWVzLCBsaW5rQ2hlY2tGaWxlcywgcm9vdEZvbGRlcikgOiBudWxsO1xuICB0cnkge1xuICAgIGF3YWl0IHJ1bkxpbmtpbmF0b3IobGlua0NoZWNrRmlsZXMsIHNraXBDb25maWdGb2xkZXIpO1xuICB9IGZpbmFsbHkge1xuICAgIGlmIChza2lwQ29uZmlnRm9sZGVyICE9PSBudWxsKSB7XG4gICAgICBhd2FpdCBybShza2lwQ29uZmlnRm9sZGVyLCB7IGZvcmNlOiB0cnVlLCByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVGhlIGdpdCBwYXRoc3BlYyBtYXRjaGluZyBldmVyeSBtYXJrZG93biBmaWxlIGluIHRoZSByZXBvc2l0b3J5LCBhdCBhbnkgZGVwdGguXG4gKi9cbmNvbnN0IE1BUktET1dOX1BBVEhTUEVDID0gJyoubWQnO1xuY29uc3QgTElOS19DSEVDS19DT05DVVJSRU5DWSA9IDEwMDtcbmNvbnN0IExJTktfQ0hFQ0tfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAzMF8wMDA7XG5jb25zdCBMSU5LSU5BVE9SX0NPTkZJR19GSUxFX05BTUUgPSAnbGlua2luYXRvci5jb25maWcuanNvbic7XG5cbi8qKlxuICogTGlzdHMgdGhlIG1hcmtkb3duIGZpbGVzIHRvIGhhbmQgdG8gYGxpbmtpbmF0b3JgLlxuICpcbiAqIGBsaW5raW5hdG9yYCB0YWtlcyBhIGZpbGUgbGlzdCByYXRoZXIgdGhhbiBhbiBpZ25vcmUgY29uZmlndXJhdGlvbiwgc28gdGhlIGdpdGlnbm9yZWQgZmlsZXMgaGF2ZSB0byBiZVxuICogZHJvcHBlZCBiZWZvcmUgaXQgaXMgaW52b2tlZC4gR2l0IGl0c2VsZiBhbnN3ZXJzIHRoYXQgKG5lc3RlZCBpZ25vcmUgZmlsZXMsIGAhYCBuZWdhdGlvbnMgYW5kIGFsbCk7IHRoZVxuICogaGFuZC1tYWludGFpbmVkIGdsb2IgZXhjbHVzaW9ucyBiZWxvdyBhcmUgb25seSB0aGUgZmFsbGJhY2sgZm9yIGEgY2hlY2tvdXQgd2l0aG91dCBnaXQsIGFuZCB0aGV5IGFyZSB0aGVcbiAqIHZlcnkgbGlzdHMgdGhpcyBpbmRpcmVjdGlvbiBleGlzdHMgdG8gc3RvcCBmcm9tIGRyaWZ0aW5nLlxuICpcbiAqIFRoZSBgbm9kZV9tb2R1bGVzYCBmaWx0ZXIgaXMgYXBwbGllZCB0byB0aGUgZ2l0LWRlcml2ZWQgbGlzdCB0b28sIGFuZCBkZWxpYmVyYXRlbHkgc286IGdpdCBvbmx5IHNraXBzXG4gKiB3aGF0IHRoZSByZXBvc2l0b3J5IGFza2VkIGl0IHRvIHNraXAsIGFuZCBhIHJlcG9zaXRvcnkgY2FuIGRlbGliZXJhdGVseSBUUkFDSyBhIHZlbmRvcmVkIGBub2RlX21vZHVsZXNgXG4gKiB0cmVlLiBUaGF0IGlzIHRoZSBvbmUgZXhjbHVzaW9uIGAuZ2l0aWdub3JlYCBjYW5ub3QgYW5zd2VyIOKAlCBzZWUgYG1hcmtkb3dubGludC1pZ25vcmVzLnRzYC4gQXBwbHlpbmcgaXRcbiAqIGhlcmUga2VlcHMgYGxpbmtpbmF0b3JgIGluIHN0ZXAgd2l0aCB0aGUgbWFya2Rvd25saW50IGhhbGYsIHdoaWNoIGlnbm9yZXMgdGhlIHNhbWUgcGF0aHMgYnkgZ2xvYi5cbiAqXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIG1hcmtkb3duIGZpbGUgcGF0aHMsIHJlbGF0aXZlIHRvIHRoZSByb290IGZvbGRlci5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0TWFya2Rvd25GaWxlcygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IG5vbklnbm9yZWRGaWxlcyA9IGF3YWl0IGdldE5vbklnbm9yZWRGaWxlcyh7IHBhdHRlcm5zOiBbTUFSS0RPV05fUEFUSFNQRUNdIH0pO1xuICByZXR1cm4gbm9uSWdub3JlZEZpbGVzXG4gICAgPyBub25JZ25vcmVkRmlsZXMuZmlsdGVyKChwYXRoKSA9PiAhY2hlY2tJc0luTm9kZU1vZHVsZXMocGF0aCkpXG4gICAgOiAoYXdhaXQgdG9BcnJheShnbG9iKFsnKiovKi5tZCddLCB7XG4gICAgICBleGNsdWRlOiBbXG4gICAgICAgICcuZ2l0LyoqJyxcbiAgICAgICAgJ2Rpc3QvKionLFxuICAgICAgICBOT0RFX01PRFVMRVNfSUdOT1JFX0dMT0JcbiAgICAgIF1cbiAgICB9KSkpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBydW5MaW5raW5hdG9yKGxpbmtDaGVja0ZpbGVzOiBzdHJpbmdbXSwgc2tpcENvbmZpZ0ZvbGRlcjogbnVsbCB8IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAvLyBFcnJvciByZXRyaWVzIHVzZSBtaWxsaXNlY29uZCBqaXR0ZXIuIE9taXQgLS1yZXRyeTogaXRzIHNlcGFyYXRlIFJldHJ5LUFmdGVyIG1vZGUgY2FuIHNsZWVwIGZvciB0aG91c2FuZHNcbiAgLy8gb2Ygc2Vjb25kcyBvbiBhIDQyOSB3ZSBhbHJlYWR5IGFjY2VwdCBhcyBhIHdhcm5pbmcuIFJlcXVlc3QgdGltZW91dHMgcmVtYWluIGVycm9ycyBhbmQga2VlcCB0aGVpciByZXRyaWVzLlxuICAvLyBBIDQwOCBpcyB0aGUgc2VydmVyJ3Mgb3duIHRpbWVvdXQgKHNoaWVsZHMuaW8gYW5zd2VycyBpdCB3aGVuIGl0cyB1cHN0cmVhbSBpcyBzbG93KTsgLS1yZXRyeS1lcnJvcnMgbmV2ZXIgcmV0cmllc1xuICAvLyBpdCwgc28gaXQgaXMgYSB3YXJuaW5nIGxpa2UgYSA0MjkgcmF0aGVyIHRoYW4gYSBnYXRlIGZhaWx1cmUgdGhhdCBzYXlzIG5vdGhpbmcgYWJvdXQgd2hldGhlciB0aGUgbGluayBleGlzdHMuXG4gIGF3YWl0IGV4ZWNGcm9tUm9vdChbXG4gICAgLi4ucmVzb2x2ZVRvb2xDb21tYW5kKHsgdG9vbDogJ2xpbmtpbmF0b3InIH0pLFxuICAgICctLWNvbmN1cnJlbmN5JyxcbiAgICBTdHJpbmcoZ2V0QnVsa0NvbmN1cnJlbmN5KExJTktfQ0hFQ0tfQ09OQ1VSUkVOQ1kpKSxcbiAgICAnLS10aW1lb3V0JyxcbiAgICBTdHJpbmcoTElOS19DSEVDS19USU1FT1VUX0lOX01JTExJU0VDT05EUyksXG4gICAgJy0tcmV0cnktZXJyb3JzJyxcbiAgICAnLS1yZXRyeS1lcnJvcnMtY291bnQnLFxuICAgICczJyxcbiAgICAnLS1yZXRyeS1lcnJvcnMtaml0dGVyJyxcbiAgICAnNTAwMCcsXG4gICAgJy0tc3RhdHVzLWNvZGUnLFxuICAgICc0Mjk6d2FybicsXG4gICAgJy0tc3RhdHVzLWNvZGUnLFxuICAgICc0MDg6d2FybicsXG4gICAgJy0tdXJsLXJld3JpdGUtc2VhcmNoJyxcbiAgICBTdHJpbmcucmF3YGh0dHBzOi8vd3d3XFwubnBtanNcXC5jb20vcGFja2FnZS9gLFxuICAgICctLXVybC1yZXdyaXRlLXJlcGxhY2UnLFxuICAgICdodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy8nLFxuICAgIC4uLihza2lwQ29uZmlnRm9sZGVyID09PSBudWxsID8gW10gOiBbJy0tY29uZmlnJywgam9pbihza2lwQ29uZmlnRm9sZGVyLCBMSU5LSU5BVE9SX0NPTkZJR19GSUxFX05BTUUpXSksXG4gICAgeyBiYXRjaGVkQXJndW1lbnRzOiBsaW5rQ2hlY2tGaWxlcyB9XG4gIF0pO1xufVxuXG4vKipcbiAqIFdhcm5zIGFib3V0IGV2ZXJ5IGxpbmsgdGhlIHNraXAgZW50cmllcyB0YWtlIG91dCBvZiB0aGUgY2hlY2ssIGFuZCB3cml0ZXMgdGhlIGBsaW5raW5hdG9yYCBjb25maWcgdGhhdCBza2lwcyB0aGVtLlxuICpcbiAqIEBwYXJhbSBza2lwRW50cmllcyAtIFRoZSBza2lwIGVudHJpZXMuXG4gKiBAcGFyYW0gbGlua0NoZWNrRmlsZXMgLSBUaGUgbWFya2Rvd24gZmlsZXMgaGFuZGVkIHRvIGBsaW5raW5hdG9yYCwgcmVsYXRpdmUgdG8gdGhlIHJvb3QgZm9sZGVyLlxuICogQHBhcmFtIHJvb3RGb2xkZXIgLSBUaGUgcm9vdCBmb2xkZXIuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHRlbXBvcmFyeSBmb2xkZXIgaG9sZGluZyB0aGUgY29uZmlnOyB0aGUgY2FsbGVyIHJlbW92ZXMgaXQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHdyaXRlU2tpcENvbmZpZyhza2lwRW50cmllczogcmVhZG9ubHkgTGlua0NoZWNrU2tpcEVudHJ5W10sIGxpbmtDaGVja0ZpbGVzOiByZWFkb25seSBzdHJpbmdbXSwgcm9vdEZvbGRlcjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3Qgc291cmNlRmlsZXMgPSBhd2FpdCBQcm9taXNlLmFsbChsaW5rQ2hlY2tGaWxlcy5tYXAoYXN5bmMgKHBhdGgpID0+ICh7XG4gICAgY29udGVudDogYXdhaXQgcmVhZEZpbGUocmVzb2x2ZShyb290Rm9sZGVyLCBwYXRoKSwgJ3V0Zi04JyksXG4gICAgcGF0aFxuICB9KSkpO1xuICBmb3IgKGNvbnN0IHdhcm5pbmcgb2YgZ2V0TGlua0NoZWNrU2tpcFdhcm5pbmdzKHNraXBFbnRyaWVzLCBzb3VyY2VGaWxlcykpIHtcbiAgICBjb25zb2xlLndhcm4od2FybmluZyk7XG4gIH1cblxuICBjb25zdCBwcm9qZWN0Q29uZmlnUGF0aCA9IHJlc29sdmUocm9vdEZvbGRlciwgTElOS0lOQVRPUl9DT05GSUdfRklMRV9OQU1FKTtcbiAgY29uc3QgcHJvamVjdENvbmZpZzogdW5rbm93biA9IGV4aXN0c1N5bmMocHJvamVjdENvbmZpZ1BhdGgpID8gSlNPTi5wYXJzZShhd2FpdCByZWFkRmlsZShwcm9qZWN0Q29uZmlnUGF0aCwgJ3V0Zi04JykpIDogdW5kZWZpbmVkO1xuICBjb25zdCBza2lwQ29uZmlnRm9sZGVyID0gYXdhaXQgbWtkdGVtcChqb2luKHRtcGRpcigpLCAnbGluay1jaGVjay1za2lwLScpKTtcbiAgYXdhaXQgd3JpdGVGaWxlKGpvaW4oc2tpcENvbmZpZ0ZvbGRlciwgTElOS0lOQVRPUl9DT05GSUdfRklMRV9OQU1FKSwgSlNPTi5zdHJpbmdpZnkobWVyZ2VMaW5raW5hdG9yU2tpcENvbmZpZyhwcm9qZWN0Q29uZmlnLCBza2lwRW50cmllcykpKTtcbiAgcmV0dXJuIHNraXBDb25maWdGb2xkZXI7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTUEsU0FBUyxlQUFlO0FBQ3hCLFNBQVMsc0JBQXNCO0FBQy9CLFNBQVMsZ0JBQWdCO0FBQ3pCLFNBQVMsa0JBQWtCO0FBQzNCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsY0FBYztBQUN2QjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBSVAsU0FBUywwQkFBMEI7QUFDbkMsU0FBUywwQkFBMEI7QUFDbkM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUywwQkFBMEI7QUFDbkMsU0FBUyxpQkFBaUI7QUFDMUI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUEwQ1AsZUFBc0IsS0FBSyxTQUFzQztBQUMvRCxRQUFNLEVBQUUsdUJBQXVCLHdCQUF3QixDQUFDLEdBQUcsT0FBTyxZQUFZLE1BQU0sSUFBSSxXQUFXLENBQUM7QUFDcEcsUUFBTSxjQUFjO0FBQUEsSUFDbEIsVUFBVTtBQUFBLElBQ1YsVUFBVTtBQUFBLElBQ1YsVUFBVTtBQUFBLElBQ1YsVUFBVTtBQUFBLElBQ1YsVUFB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
173
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL21hcmtkb3dubGludC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogTGludCBtYXJrZG93biBkb2N1bWVudGF0aW9uIHVzaW5nIGBtYXJrZG93bmxpbnQtY2xpMmAgYW5kIGBsaW5raW5hdG9yYC5cbiAqL1xuXG5pbXBvcnQgeyB0b0FycmF5IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FzeW5jJztcbmltcG9ydCB7IGdldExpYkRlYnVnZ2VyIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2RlYnVnJztcbmltcG9ydCB7IGJhc2VuYW1lIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3BhdGgnO1xuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtcbiAgY3AsXG4gIGdsb2IsXG4gIG1rZHRlbXAsXG4gIHJlYWRGaWxlLFxuICBybSxcbiAgd3JpdGVGaWxlXG59IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQge1xuICBqb2luLFxuICBtYXRjaGVzR2xvYixcbiAgcmVsYXRpdmUsXG4gIHJlc29sdmVcbn0gZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IHR5cGUgeyBMaW5rQ2hlY2tTa2lwRW50cnkgfSBmcm9tICcuLi9saW5rLWNoZWNrLXNraXAudHMnO1xuXG5pbXBvcnQgeyBnZXRCdWxrQ29uY3VycmVuY3kgfSBmcm9tICcuLi9idWxrLWNvbmN1cnJlbmN5LnRzJztcbmltcG9ydCB7IGdldE5vbklnbm9yZWRGaWxlcyB9IGZyb20gJy4uL2dpdC50cyc7XG5pbXBvcnQge1xuICBnZXRMaW5rQ2hlY2tTa2lwV2FybmluZ3MsXG4gIG1lcmdlTGlua2luYXRvclNraXBDb25maWcsXG4gIHJlYWRMaW5rQ2hlY2tTa2lwRW50cmllc1xufSBmcm9tICcuLi9saW5rLWNoZWNrLXNraXAudHMnO1xuaW1wb3J0IHsgcmVzb2x2ZVRvb2xDb21tYW5kIH0gZnJvbSAnLi4vcGFja2FnZS1tYW5hZ2VyLnRzJztcbmltcG9ydCB7IFJlcG9QYXRocyB9IGZyb20gJy4uL3JlcG8tcGF0aHMudHMnO1xuaW1wb3J0IHtcbiAgZXhlY0Zyb21Sb290LFxuICBnZXRSb290Rm9sZGVyLFxuICByZXNvbHZlUGF0aEZyb21Sb290U2FmZVxufSBmcm9tICcuLi9yb290LnRzJztcbmltcG9ydCB7XG4gIGNoZWNrSXNJbk5vZGVNb2R1bGVzLFxuICBOT0RFX01PRFVMRVNfSUdOT1JFX0dMT0Jcbn0gZnJvbSAnLi9tYXJrZG93bmxpbnQtaWdub3Jlcy50cyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgdGhlIHtAbGluayBsaW50fSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaW50T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBmaWxlIGNvcGllZCB0byB0aGUgcHJvamVjdCByb290IHdoZW4gdGhlIHByb2plY3QgaGFzIG5vbmUuIFdpdGhvdXQgaXQsXG4gICAqIGBtYXJrZG93bmxpbnQtY2xpMmAgcnVucyB3aXRoIGl0cyBvd24gZGVmYXVsdHMuXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0Q29uZmlnRmlsZVBhdGg/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEdsb2JzLCByZWxhdGl2ZSB0byB0aGUgcm9vdCBmb2xkZXIsIG9mIG1hcmtkb3duIGZpbGVzIHRvIGxlYXZlIG91dCBvZiB0aGUgYGxpbmtpbmF0b3JgIHBhc3Mgb25seTtcbiAgICogYG1hcmtkb3dubGludC1jbGkyYCBzdGlsbCBsaW50cyB0aGVtLlxuICAgKlxuICAgKiBGb3IgYSBkb2N1bWVudGF0aW9uIHNpdGUgd2hvc2UgcGFnZXMgbGluayB0byBlYWNoIG90aGVyIGJhc2UtYWJzb2x1dGVseSAoYC88c2l0ZS1iYXNlPi9ndWlkZXMvLi4uYCk6IHRob3NlXG4gICAqIGxpbmtzIHJlc29sdmUgb25seSBhZ2FpbnN0IHRoZSBCVUlMVCBzaXRlLCBzbyBgbGlua2luYXRvcmAgcmVwb3J0cyBlYWNoIG9uZSBhcyBhIDQwNCwgYW5kIHRoZSBzaXRlJ3Mgb3duXG4gICAqIGJ1aWxkIGlzIHdoYXQgY2hlY2tzIHRoZW0uXG4gICAqXG4gICAqIEBleGFtcGxlIGBbJ2RvY3MvKionXWBcbiAgICovXG4gIHJlYWRvbmx5IGxpbmtDaGVja0V4Y2x1ZGVHbG9icz86IHJlYWRvbmx5IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBmaWxlIHBhdGhzIHRvIGxpbnQuIElmIG9taXR0ZWQsIGxpbnRzIHRoZSBlbnRpcmUgcHJvamVjdC5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGhzPzogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZml4IGxpbnRpbmcgaXNzdWVzIGF1dG9tYXRpY2FsbHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEZpeD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogTGludCBtYXJrZG93biBkb2N1bWVudGF0aW9uIHVzaW5nIGBtYXJrZG93bmxpbnQtY2xpMmAgYW5kIGBsaW5raW5hdG9yYC5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSB7QGxpbmsgTGludE9wdGlvbnN9LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGludChvcHRpb25zPzogTGludE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBkZWZhdWx0Q29uZmlnRmlsZVBhdGgsIGxpbmtDaGVja0V4Y2x1ZGVHbG9icyA9IFtdLCBwYXRocywgc2hvdWxkRml4ID0gZmFsc2UgfSA9IG9wdGlvbnMgPz8ge307XG4gIGNvbnN0IGNvbmZpZ0ZpbGVzID0gW1xuICAgIFJlcG9QYXRocy5NYXJrZG93bmxpbnRDbGkyQ29uZmlnSnNvbmMsXG4gICAgUmVwb1BhdGhzLk1hcmtkb3dubGludENsaTJDb25maWdZYW1sLFxuICAgIFJlcG9QYXRocy5NYXJrZG93bmxpbnRDbGkyQ29uZmlnQ2pzLFxuICAgIFJlcG9QYXRocy5NYXJrZG93bmxpbnRDbGkyQ29uZmlnTWpzLFxuICAgIFJlcG9QYXRocy5NYXJrZG93bmxpbnRDb25maWdKc29uYyxcbiAgICBSZXBvUGF0aHMuTWFya2Rvd25saW50Q29uZmlnSnNvbixcbiAgICBSZXBvUGF0aHMuTWFya2Rvd25saW50Q29uZmlnWWFtbCxcbiAgICBSZXBvUGF0aHMuTWFya2Rvd25saW50Q29uZmlnWW1sLFxuICAgIFJlcG9QYXRocy5NYXJrZG93bmxpbnRDb25maWdDanMsXG4gICAgUmVwb1BhdGhzLk1hcmtkb3dubGludENvbmZpZ01qc1xuICBdO1xuXG4gIGNvbnN0IGRvZXNDb25maWdGaWxlRXhpc3QgPSBjb25maWdGaWxlcy5zb21lKChjb25maWdGaWxlKSA9PiB7XG4gICAgY29uc3QgY29uZmlnRmlsZVBhdGggPSByZXNvbHZlUGF0aEZyb21Sb290U2FmZSh7IHBhdGg6IGNvbmZpZ0ZpbGUgfSk7XG4gICAgcmV0dXJuIGV4aXN0c1N5bmMoY29uZmlnRmlsZVBhdGgpO1xuICB9KTtcblxuICBpZiAoIWRvZXNDb25maWdGaWxlRXhpc3QgJiYgZGVmYXVsdENvbmZpZ0ZpbGVQYXRoKSB7XG4gICAgZ2V0TGliRGVidWdnZXIoJ21hcmtkb3dubGludDpsaW50JykoJ21hcmtkb3dubGludCBjb25maWd1cmF0aW9uIGZpbGUgbm90IGZvdW5kLiBDcmVhdGluZyBkZWZhdWx0IGNvbmZpZy4uLicpO1xuICAgIGF3YWl0IGNwKGRlZmF1bHRDb25maWdGaWxlUGF0aCwgcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmUoeyBwYXRoOiBiYXNlbmFtZShkZWZhdWx0Q29uZmlnRmlsZVBhdGgpIH0pKTtcbiAgfVxuXG4gIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBUaGUgcGF0aHMtcHJvdmlkZWQgYnJhbmNoZXMgYXJlIG9ubHkgZXhlcmNpc2VkIGJ5IGNvbnN1bWVyIHByb2plY3RzIHBhc3NpbmcgZmlsZSBsaXN0cy4gKi9cbiAgY29uc3QgdGFyZ2V0cyA9IHBhdGhzPy5sZW5ndGggPyBwYXRocyA6IFtSZXBvUGF0aHMuQ3VycmVudEZvbGRlcl07XG4gIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gIGF3YWl0IGV4ZWNGcm9tUm9vdChbLi4ucmVzb2x2ZVRvb2xDb21tYW5kKHsgdG9vbDogJ21hcmtkb3dubGludC1jbGkyJyB9KSwgLi4uKHNob3VsZEZpeCA/IFsnLS1maXgnXSA6IFtdKSwgeyBiYXRjaGVkQXJndW1lbnRzOiB0YXJnZXRzIH1dKTtcblxuICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gVGhlIHBhdGhzLXByb3ZpZGVkIGJyYW5jaCBpcyBvbmx5IGV4ZXJjaXNlZCBieSBjb25zdW1lciBwcm9qZWN0cyBwYXNzaW5nIGZpbGUgbGlzdHMuICovXG4gIGNvbnN0IHJvb3RGb2xkZXIgPSBnZXRSb290Rm9sZGVyKCkgPz8gcHJvY2Vzcy5jd2QoKTtcbiAgY29uc3QgbWRGaWxlcyA9IHBhdGhzPy5sZW5ndGhcbiAgICA/IHBhdGhzLm1hcCgocCkgPT4gcmVsYXRpdmUocm9vdEZvbGRlciwgcCkucmVwbGFjZUFsbCgnXFxcXCcsICcvJykgfHwgcClcbiAgICA6IGF3YWl0IGdldE1hcmtkb3duRmlsZXMoKTtcbiAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgY29uc3QgbGlua0NoZWNrRmlsZXMgPSBtZEZpbGVzLmZpbHRlcigobWRGaWxlKSA9PiBsaW5rQ2hlY2tFeGNsdWRlR2xvYnMuZXZlcnkoKGV4Y2x1ZGVHbG9iKSA9PiAhbWF0Y2hlc0dsb2IobWRGaWxlLCBleGNsdWRlR2xvYikpKTtcbiAgLy8gYGxpbmtpbmF0b3JgIHdpdGggbm8gTE9DQVRJT04gcHJpbnRzIGl0cyB1c2FnZSBhbmQgZXhpdHMgbm9uLXplcm8sIHNvIGEgbGlzdCBlbXB0aWVkIGJ5IHRoZSBleGNsdXNpb25zIGhhcyBub3RoaW5nIHRvIGNoZWNrLlxuICBpZiAobGlua0NoZWNrRmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHNraXBFbnRyaWVzID0gcmVhZExpbmtDaGVja1NraXBFbnRyaWVzKCk7XG4gIGNvbnN0IHNraXBDb25maWdGb2xkZXIgPSBza2lwRW50cmllcy5sZW5ndGggPiAwID8gYXdhaXQgd3JpdGVTa2lwQ29uZmlnKHNraXBFbnRyaWVzLCBsaW5rQ2hlY2tGaWxlcywgcm9vdEZvbGRlcikgOiBudWxsO1xuICB0cnkge1xuICAgIGF3YWl0IHJ1bkxpbmtpbmF0b3IobGlua0NoZWNrRmlsZXMsIHNraXBDb25maWdGb2xkZXIsIHJvb3RGb2xkZXIpO1xuICB9IGZpbmFsbHkge1xuICAgIGlmIChza2lwQ29uZmlnRm9sZGVyICE9PSBudWxsKSB7XG4gICAgICBhd2FpdCBybShza2lwQ29uZmlnRm9sZGVyLCB7IGZvcmNlOiB0cnVlLCByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVGhlIGdpdCBwYXRoc3BlYyBtYXRjaGluZyBldmVyeSBtYXJrZG93biBmaWxlIGluIHRoZSByZXBvc2l0b3J5LCBhdCBhbnkgZGVwdGguXG4gKi9cbmNvbnN0IE1BUktET1dOX1BBVEhTUEVDID0gJyoubWQnO1xuY29uc3QgTElOS19DSEVDS19DT05DVVJSRU5DWSA9IDEwMDtcbmNvbnN0IExJTktfQ0hFQ0tfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAzMF8wMDA7XG5jb25zdCBMSU5LSU5BVE9SX0NPTkZJR19GSUxFX05BTUUgPSAnbGlua2luYXRvci5jb25maWcuanNvbic7XG5cbi8qKlxuICogTGlzdHMgdGhlIG1hcmtkb3duIGZpbGVzIHRvIGhhbmQgdG8gYGxpbmtpbmF0b3JgLlxuICpcbiAqIGBsaW5raW5hdG9yYCB0YWtlcyBhIGZpbGUgbGlzdCByYXRoZXIgdGhhbiBhbiBpZ25vcmUgY29uZmlndXJhdGlvbiwgc28gdGhlIGdpdGlnbm9yZWQgZmlsZXMgaGF2ZSB0byBiZVxuICogZHJvcHBlZCBiZWZvcmUgaXQgaXMgaW52b2tlZC4gR2l0IGl0c2VsZiBhbnN3ZXJzIHRoYXQgKG5lc3RlZCBpZ25vcmUgZmlsZXMsIGAhYCBuZWdhdGlvbnMgYW5kIGFsbCk7IHRoZVxuICogaGFuZC1tYWludGFpbmVkIGdsb2IgZXhjbHVzaW9ucyBiZWxvdyBhcmUgb25seSB0aGUgZmFsbGJhY2sgZm9yIGEgY2hlY2tvdXQgd2l0aG91dCBnaXQsIGFuZCB0aGV5IGFyZSB0aGVcbiAqIHZlcnkgbGlzdHMgdGhpcyBpbmRpcmVjdGlvbiBleGlzdHMgdG8gc3RvcCBmcm9tIGRyaWZ0aW5nLlxuICpcbiAqIFRoZSBgbm9kZV9tb2R1bGVzYCBmaWx0ZXIgaXMgYXBwbGllZCB0byB0aGUgZ2l0LWRlcml2ZWQgbGlzdCB0b28sIGFuZCBkZWxpYmVyYXRlbHkgc286IGdpdCBvbmx5IHNraXBzXG4gKiB3aGF0IHRoZSByZXBvc2l0b3J5IGFza2VkIGl0IHRvIHNraXAsIGFuZCBhIHJlcG9zaXRvcnkgY2FuIGRlbGliZXJhdGVseSBUUkFDSyBhIHZlbmRvcmVkIGBub2RlX21vZHVsZXNgXG4gKiB0cmVlLiBUaGF0IGlzIHRoZSBvbmUgZXhjbHVzaW9uIGAuZ2l0aWdub3JlYCBjYW5ub3QgYW5zd2VyIOKAlCBzZWUgYG1hcmtkb3dubGludC1pZ25vcmVzLnRzYC4gQXBwbHlpbmcgaXRcbiAqIGhlcmUga2VlcHMgYGxpbmtpbmF0b3JgIGluIHN0ZXAgd2l0aCB0aGUgbWFya2Rvd25saW50IGhhbGYsIHdoaWNoIGlnbm9yZXMgdGhlIHNhbWUgcGF0aHMgYnkgZ2xvYi5cbiAqXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIG1hcmtkb3duIGZpbGUgcGF0aHMsIHJlbGF0aXZlIHRvIHRoZSByb290IGZvbGRlci5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0TWFya2Rvd25GaWxlcygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IG5vbklnbm9yZWRGaWxlcyA9IGF3YWl0IGdldE5vbklnbm9yZWRGaWxlcyh7IHBhdHRlcm5zOiBbTUFSS0RPV05fUEFUSFNQRUNdIH0pO1xuICByZXR1cm4gbm9uSWdub3JlZEZpbGVzXG4gICAgPyBub25JZ25vcmVkRmlsZXMuZmlsdGVyKChwYXRoKSA9PiAhY2hlY2tJc0luTm9kZU1vZHVsZXMocGF0aCkpXG4gICAgOiAoYXdhaXQgdG9BcnJheShnbG9iKFsnKiovKi5tZCddLCB7XG4gICAgICBleGNsdWRlOiBbXG4gICAgICAgICcuZ2l0LyoqJyxcbiAgICAgICAgJ2Rpc3QvKionLFxuICAgICAgICBOT0RFX01PRFVMRVNfSUdOT1JFX0dMT0JcbiAgICAgIF1cbiAgICB9KSkpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBydW5MaW5raW5hdG9yKGxpbmtDaGVja0ZpbGVzOiBzdHJpbmdbXSwgc2tpcENvbmZpZ0ZvbGRlcjogbnVsbCB8IHN0cmluZywgcm9vdEZvbGRlcjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIC8vIFRoZSBzZXJ2ZXIgcm9vdCBpcyBhbHdheXMgdGhlIHJvb3QgZm9sZGVyLCBhbmQgQUJTT0xVVEUuIExlZnQgdG8gaXRzZWxmLCBsaW5raW5hdG9yIHNlcnZlcyBhIGxvbmUgZmlsZSdzIG93blxuICAvLyBmb2xkZXIsIHNvIGEgc2luZ2xlIHN0YWdlZCBmaWxlIChvciBhIGJhdGNoIG9mIG9uZSkgNDA0cyBldmVyeSBgLi4vYCBsaW5rIGFib3ZlIGl0LiBBIHJlbGF0aXZlIGAuYCBpcyBub1xuICAvLyBhbnN3ZXIgZWl0aGVyOiBsaW5raW5hdG9yIDguMS4wIHN0cmlwcyBvbmUgbGVhZGluZyBzZWdtZW50IHBlciBzZWdtZW50IG9mIHRoZSByb290LCBgLmAgaW5jbHVkZWQsIHNvIGl0XG4gIC8vIGxvb2tlZCBmb3IgYGRvY3Mvd3JpdGUtdXAubWRgIGFzIGB3cml0ZS11cC5tZGAuXG4gIC8vIEVycm9yIHJldHJpZXMgdXNlIG1pbGxpc2Vjb25kIGppdHRlci4gT21pdCAtLXJldHJ5OiBpdHMgc2VwYXJhdGUgUmV0cnktQWZ0ZXIgbW9kZSBjYW4gc2xlZXAgZm9yIHRob3VzYW5kc1xuICAvLyBvZiBzZWNvbmRzIG9uIGEgNDI5IHdlIGFscmVhZHkgYWNjZXB0IGFzIGEgd2FybmluZy4gUmVxdWVzdCB0aW1lb3V0cyByZW1haW4gZXJyb3JzIGFuZCBrZWVwIHRoZWlyIHJldHJpZXMuXG4gIC8vIEEgNDA4IGlzIHRoZSBzZXJ2ZXIncyBvd24gdGltZW91dCAoc2hpZWxkcy5pbyBhbnN3ZXJzIGl0IHdoZW4gaXRzIHVwc3RyZWFtIGlzIHNsb3cpOyAtLXJldHJ5LWVycm9ycyBuZXZlciByZXRyaWVzXG4gIC8vIGl0LCBzbyBpdCBpcyBhIHdhcm5pbmcgbGlrZSBhIDQyOSByYXRoZXIgdGhhbiBhIGdhdGUgZmFpbHVyZSB0aGF0IHNheXMgbm90aGluZyBhYm91dCB3aGV0aGVyIHRoZSBsaW5rIGV4aXN0cy5cbiAgYXdhaXQgZXhlY0Zyb21Sb290KFtcbiAgICAuLi5yZXNvbHZlVG9vbENvbW1hbmQoeyB0b29sOiAnbGlua2luYXRvcicgfSksXG4gICAgJy0tc2VydmVyLXJvb3QnLFxuICAgIHJlc29sdmUocm9vdEZvbGRlciksXG4gICAgJy0tY29uY3VycmVuY3knLFxuICAgIFN0cmluZyhnZXRCdWxrQ29uY3VycmVuY3koTElOS19DSEVDS19DT05DVVJSRU5DWSkpLFxuICAgICctLXRpbWVvdXQnLFxuICAgIFN0cmluZyhMSU5LX0NIRUNLX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKSxcbiAgICAnLS1yZXRyeS1lcnJvcnMnLFxuICAgICctLXJldHJ5LWVycm9ycy1jb3VudCcsXG4gICAgJzMnLFxuICAgICctLXJldHJ5LWVycm9ycy1qaXR0ZXInLFxuICAgICc1MDAwJyxcbiAgICAnLS1zdGF0dXMtY29kZScsXG4gICAgJzQyOTp3YXJuJyxcbiAgICAnLS1zdGF0dXMtY29kZScsXG4gICAgJzQwODp3YXJuJyxcbiAgICAnLS11cmwtcmV3cml0ZS1zZWFyY2gnLFxuICAgIFN0cmluZy5yYXdgaHR0cHM6Ly93d3dcXC5ucG1qc1xcLmNvbS9wYWNrYWdlL2AsXG4gICAgJy0tdXJsLXJld3JpdGUtcmVwbGFjZScsXG4gICAgJ2h0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnLycsXG4gICAgLi4uKHNraXBDb25maWdGb2xkZXIgPT09IG51bGwgPyBbXSA6IFsnLS1jb25maWcnLCBqb2luKHNraXBDb25maWdGb2xkZXIsIExJTktJTkFUT1JfQ09ORklHX0ZJTEVfTkFNRSldKSxcbiAgICB7IGJhdGNoZWRBcmd1bWVudHM6IGxpbmtDaGVja0ZpbGVzIH1cbiAgXSk7XG59XG5cbi8qKlxuICogV2FybnMgYWJvdXQgZXZlcnkgbGluayB0aGUgc2tpcCBlbnRyaWVzIHRha2Ugb3V0IG9mIHRoZSBjaGVjaywgYW5kIHdyaXRlcyB0aGUgYGxpbmtpbmF0b3JgIGNvbmZpZyB0aGF0IHNraXBzIHRoZW0uXG4gKlxuICogQHBhcmFtIHNraXBFbnRyaWVzIC0gVGhlIHNraXAgZW50cmllcy5cbiAqIEBwYXJhbSBsaW5rQ2hlY2tGaWxlcyAtIFRoZSBtYXJrZG93biBmaWxlcyBoYW5kZWQgdG8gYGxpbmtpbmF0b3JgLCByZWxhdGl2ZSB0byB0aGUgcm9vdCBmb2xkZXIuXG4gKiBAcGFyYW0gcm9vdEZvbGRlciAtIFRoZSByb290IGZvbGRlci5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdGVtcG9yYXJ5IGZvbGRlciBob2xkaW5nIHRoZSBjb25maWc7IHRoZSBjYWxsZXIgcmVtb3ZlcyBpdC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gd3JpdGVTa2lwQ29uZmlnKHNraXBFbnRyaWVzOiByZWFkb25seSBMaW5rQ2hlY2tTa2lwRW50cnlbXSwgbGlua0NoZWNrRmlsZXM6IHJlYWRvbmx5IHN0cmluZ1tdLCByb290Rm9sZGVyOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBzb3VyY2VGaWxlcyA9IGF3YWl0IFByb21pc2UuYWxsKGxpbmtDaGVja0ZpbGVzLm1hcChhc3luYyAocGF0aCkgPT4gKHtcbiAgICBjb250ZW50OiBhd2FpdCByZWFkRmlsZShyZXNvbHZlKHJvb3RGb2xkZXIsIHBhdGgpLCAndXRmLTgnKSxcbiAgICBwYXRoXG4gIH0pKSk7XG4gIGZvciAoY29uc3Qgd2FybmluZyBvZiBnZXRMaW5rQ2hlY2tTa2lwV2FybmluZ3Moc2tpcEVudHJpZXMsIHNvdXJjZUZpbGVzKSkge1xuICAgIGNvbnNvbGUud2Fybih3YXJuaW5nKTtcbiAgfVxuXG4gIGNvbnN0IHByb2plY3RDb25maWdQYXRoID0gcmVzb2x2ZShyb290Rm9sZGVyLCBMSU5LSU5BVE9SX0NPTkZJR19GSUxFX05BTUUpO1xuICBjb25zdCBwcm9qZWN0Q29uZmlnOiB1bmtub3duID0gZXhpc3RzU3luYyhwcm9qZWN0Q29uZmlnUGF0aCkgPyBKU09OLnBhcnNlKGF3YWl0IHJlYWRGaWxlKHByb2plY3RDb25maWdQYXRoLCAndXRmLTgnKSkgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IHNraXBDb25maWdGb2xkZXIgPSBhd2FpdCBta2R0ZW1wKGpvaW4odG1wZGlyKCksICdsaW5rLWNoZWNrLXNraXAtJykpO1xuICBhd2FpdCB3cml0ZUZpbGUoam9pbihza2lwQ29uZmlnRm9sZGVyLCBMSU5LSU5BVE9SX0NPTkZJR19GSUxFX05BTUUpLCBKU09OLnN0cmluZ2lmeShtZXJnZUxpbmtpbmF0b3JTa2lwQ29uZmlnKHByb2plY3RDb25maWcsIHNraXBFbnRyaWVzKSkpO1xuICByZXR1cm4gc2tpcENvbmZpZ0ZvbGRlcjtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFNQSxTQUFTLGVBQWU7QUFDeEIsU0FBUyxzQkFBc0I7QUFDL0IsU0FBUyxnQkFBZ0I7QUFDekIsU0FBUyxrQkFBa0I7QUFDM0I7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtB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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mnaoumov/typescript-dev-toolkit",
3
- "version": "6.0.0",
3
+ "version": "6.0.2",
4
4
  "description": "Generic TypeScript project tooling: build, lint, format, spellcheck, test, gate and release scripts.",
5
5
  "keywords": [
6
6
  "typescript",