@dollhousemcp/mcp-server 2.0.8 → 2.0.9

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.
@@ -2,8 +2,8 @@
2
2
  * Auto-generated file - DO NOT EDIT
3
3
  * Generated at build time by scripts/generate-version.js
4
4
  */
5
- export declare const PACKAGE_VERSION = "2.0.8";
6
- export declare const BUILD_TIMESTAMP = "2026-04-02T23:02:41.967Z";
5
+ export declare const PACKAGE_VERSION = "2.0.9";
6
+ export declare const BUILD_TIMESTAMP = "2026-04-03T16:02:10.270Z";
7
7
  export declare const BUILD_TYPE: 'npm' | 'git';
8
8
  export declare const PACKAGE_NAME = "@dollhousemcp/mcp-server";
9
9
  //# sourceMappingURL=version.d.ts.map
@@ -2,8 +2,8 @@
2
2
  * Auto-generated file - DO NOT EDIT
3
3
  * Generated at build time by scripts/generate-version.js
4
4
  */
5
- export const PACKAGE_VERSION = '2.0.8';
6
- export const BUILD_TIMESTAMP = '2026-04-02T23:02:41.967Z';
5
+ export const PACKAGE_VERSION = '2.0.9';
6
+ export const BUILD_TIMESTAMP = '2026-04-03T16:02:10.270Z';
7
7
  export const BUILD_TYPE = 'npm';
8
8
  export const PACKAGE_NAME = '@dollhousemcp/mcp-server';
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZW5lcmF0ZWQvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDO0FBQ3ZDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRywwQkFBMEIsQ0FBQztBQUMxRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWtCLEtBQUssQ0FBQztBQUMvQyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEF1dG8tZ2VuZXJhdGVkIGZpbGUgLSBETyBOT1QgRURJVFxuICogR2VuZXJhdGVkIGF0IGJ1aWxkIHRpbWUgYnkgc2NyaXB0cy9nZW5lcmF0ZS12ZXJzaW9uLmpzXG4gKi9cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9ICcyLjAuOCc7XG5leHBvcnQgY29uc3QgQlVJTERfVElNRVNUQU1QID0gJzIwMjYtMDQtMDJUMjM6MDI6NDEuOTY3Wic7XG5leHBvcnQgY29uc3QgQlVJTERfVFlQRTogJ25wbScgfCAnZ2l0JyA9ICducG0nO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfTkFNRSA9ICdAZG9sbGhvdXNlbWNwL21jcC1zZXJ2ZXInO1xuIl19
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZW5lcmF0ZWQvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDO0FBQ3ZDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRywwQkFBMEIsQ0FBQztBQUMxRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWtCLEtBQUssQ0FBQztBQUMvQyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEF1dG8tZ2VuZXJhdGVkIGZpbGUgLSBETyBOT1QgRURJVFxuICogR2VuZXJhdGVkIGF0IGJ1aWxkIHRpbWUgYnkgc2NyaXB0cy9nZW5lcmF0ZS12ZXJzaW9uLmpzXG4gKi9cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9ICcyLjAuOSc7XG5leHBvcnQgY29uc3QgQlVJTERfVElNRVNUQU1QID0gJzIwMjYtMDQtMDNUMTY6MDI6MTAuMjcwWic7XG5leHBvcnQgY29uc3QgQlVJTERfVFlQRTogJ25wbScgfCAnZ2l0JyA9ICducG0nO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfTkFNRSA9ICdAZG9sbGhvdXNlbWNwL21jcC1zZXJ2ZXInO1xuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/web/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAcH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAa/E,qEAAqE;AACrE,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,YAAY,EAAE,MAAM,CAAC;IACrB,qEAAqE;IACrE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,kFAAkF;IAClF,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,6FAA6F;IAC7F,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,gFAAgF;IAChF,iBAAiB,CAAC,EAAE,OAAO,SAAS,EAAE,MAAM,EAAE,CAAC;CAChD;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,kFAAkF;IAClF,GAAG,CAAC,EAAE,OAAO,SAAS,EAAE,OAAO,CAAC;IAChC,2EAA2E;IAC3E,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,qBAAqB,EAAE,eAAe,KAAK,IAAI,CAAC;IAC9E,iFAAiF;IACjF,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,qBAAqB,EAAE,cAAc,KAAK,IAAI,CAAC;CACtF;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,uCAAuC;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,4EAA4E;IAC5E,cAAc,EAAE,OAAO,CAAC;IACxB,kDAAkD;IAClD,aAAa,EAAE,OAAO,CAAC;IACvB,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAsCD;;;;;;;;;;;GAWG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAmLxF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,oBAAoB,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,aAAa,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAuBvJ"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/web/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAcH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAa/E,qEAAqE;AACrE,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,YAAY,EAAE,MAAM,CAAC;IACrB,qEAAqE;IACrE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,kFAAkF;IAClF,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,6FAA6F;IAC7F,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,gFAAgF;IAChF,iBAAiB,CAAC,EAAE,OAAO,SAAS,EAAE,MAAM,EAAE,CAAC;CAChD;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,kFAAkF;IAClF,GAAG,CAAC,EAAE,OAAO,SAAS,EAAE,OAAO,CAAC;IAChC,2EAA2E;IAC3E,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,qBAAqB,EAAE,eAAe,KAAK,IAAI,CAAC;IAC9E,iFAAiF;IACjF,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,qBAAqB,EAAE,cAAc,KAAK,IAAI,CAAC;CACtF;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,uCAAuC;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,4EAA4E;IAC5E,cAAc,EAAE,OAAO,CAAC;IACxB,kDAAkD;IAClD,aAAa,EAAE,OAAO,CAAC;IACvB,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAsCD;;;;;;;;;;;GAWG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAkLxF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,oBAAoB,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,aAAa,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAuBvJ"}
@@ -211,10 +211,9 @@ export async function startWebServer(options) {
211
211
  }
212
212
  });
213
213
  // Bind to localhost only — handle port conflicts gracefully
214
- // NOTE: console.log is intentional here (not logger). In --web standalone mode,
215
- // the user sees terminal output directly. logger.info writes to the structured
216
- // log system (MemoryLogSink SSE web console). Both are needed: console.log
217
- // for the human at the terminal, logger for the log viewer tab.
214
+ // NOTE: Use stderr for terminal output, not stdout. In MCP stdio mode, stdout
215
+ // is reserved for JSON-RPC messages any non-JSON output corrupts the protocol.
216
+ // stderr is safe for human-readable messages in both MCP and standalone modes.
218
217
  await new Promise((resolve) => {
219
218
  const httpServer = app.listen(port, '127.0.0.1', () => {
220
219
  serverRunning = true;
@@ -222,7 +221,7 @@ export async function startWebServer(options) {
222
221
  const url = `http://${CONSOLE_HOST}:${port}`;
223
222
  const fallbackUrl = `http://127.0.0.1:${port}`;
224
223
  logger.info(`[WebUI] Management console running at ${url}`);
225
- console.log(`\n DollhouseMCP Management Console\n ${url}\n ${fallbackUrl} (fallback)\n`);
224
+ console.error(`\n DollhouseMCP Management Console\n ${url}\n ${fallbackUrl} (fallback)\n`);
226
225
  if (options.openBrowser) {
227
226
  openInBrowser(url);
228
227
  }
@@ -232,7 +231,7 @@ export async function startWebServer(options) {
232
231
  if (err.code === 'EADDRINUSE') {
233
232
  const url = `http://${CONSOLE_HOST}:${port}`;
234
233
  logger.info(`[WebUI] Port ${port} already in use — opening existing console`);
235
- console.log(`\n DollhouseMCP Management Console (existing instance)\n ${url}\n`);
234
+ console.error(`\n DollhouseMCP Management Console (existing instance)\n ${url}\n`);
236
235
  if (options.openBrowser) {
237
236
  openInBrowser(url);
238
237
  }
@@ -279,4 +278,4 @@ export async function openPortfolioBrowser(portfolioDir, port, mcpAqlHandler, ta
279
278
  ...(browserResult.error ? { warning: `Browser could not be opened automatically: ${browserResult.error}. Open ${url} manually.` } : {}),
280
279
  };
281
280
  }
282
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3dlYi9zZXJ2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O0dBV0c7QUFFSCxPQUFPLE9BQU8sTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDekMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDbkMsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsZUFBZSxFQUFFLHNCQUFzQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxlQUFlLEVBQXdCLE1BQU0sdUJBQXVCLENBQUM7QUFDOUUsT0FBTyxFQUFFLG1CQUFtQixFQUE0QixNQUFNLDJCQUEyQixDQUFDO0FBQzFGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzVELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUs1QyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMxRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUM7QUFDMUIsTUFBTSxZQUFZLEdBQUcscUJBQXFCLENBQUM7QUFDM0MsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQzNELG1H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QUMsQ0FBQyxFQUFFLENBQUM7S0FDeEksQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERvbGxob3VzZU1DUCBXZWIgVUkgU2VydmVyXG4gKlxuICogTGlnaHR3ZWlnaHQgRXhwcmVzcyBzZXJ2ZXIgZm9yIGJyb3dzaW5nIHBvcnRmb2xpbyBlbGVtZW50cyBpbiBhIGJyb3dzZXIuXG4gKiBCb3VuZCB0byAxMjcuMC4wLjEgb25seSAobG9jYWxob3N0KS4gUmVhZC1vbmx5IGZvciBWMS5cbiAqXG4gKiBDYW4gYmUgc3RhcnRlZCBzdGFuZGFsb25lIChgLS13ZWJgIGZsYWcpIG9yIGZyb20gd2l0aGluIHRoZSBNQ1Agc2VydmVyXG4gKiBwcm9jZXNzIHZpYSBgb3BlblBvcnRmb2xpb0Jyb3dzZXIoKWAuXG4gKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vRG9sbGhvdXNlTUNQL21jcC1zZXJ2ZXItdjItcmVmYWN0b3IvaXNzdWVzLzcwNFxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vRG9sbGhvdXNlTUNQL21jcC1zZXJ2ZXItdjItcmVmYWN0b3IvaXNzdWVzLzc3NFxuICovXG5cbmltcG9ydCBleHByZXNzIGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IHsgam9pbiwgZGlybmFtZSwgZXh0bmFtZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSAnbm9kZTp1cmwnO1xuaW1wb3J0IHsgZXhlY0ZpbGUgfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgcGxhdGZvcm0gfSBmcm9tICdub2RlOm9zJztcbmltcG9ydCB7IG1rZGlyLCByZWFkZGlyIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyBjcmVhdGVBcGlSb3V0ZXMsIGNyZWF0ZUdhdGV3YXlBcGlSb3V0ZXMgfSBmcm9tICcuL3JvdXRlcy5qcyc7XG5pbXBvcnQgeyBjcmVhdGVMb2dSb3V0ZXMsIHR5cGUgTG9nUm91dGVzUmVzdWx0IH0gZnJvbSAnLi9yb3V0ZXMvbG9nUm91dGVzLmpzJztcbmltcG9ydCB7IGNyZWF0ZU1ldHJpY3NSb3V0ZXMsIHR5cGUgTWV0cmljc1JvdXRlc1Jlc3VsdCB9IGZyb20gJy4vcm91dGVzL21ldHJpY3NSb3V0ZXMuanMnO1xuaW1wb3J0IHsgY3JlYXRlSGVhbHRoUm91dGVzIH0gZnJvbSAnLi9yb3V0ZXMvaGVhbHRoUm91dGVzLmpzJztcbmltcG9ydCB7IGNyZWF0ZVNldHVwUm91dGVzIH0gZnJvbSAnLi9yb3V0ZXMvc2V0dXBSb3V0ZXMuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB0eXBlIHsgTUNQQVFMSGFuZGxlciB9IGZyb20gJy4uL2hhbmRsZXJzL21jcC1hcWwvTUNQQVFMSGFuZGxlci5qcyc7XG5pbXBvcnQgdHlwZSB7IE1lbW9yeUxvZ1NpbmsgfSBmcm9tICcuLi9sb2dnaW5nL3NpbmtzL01lbW9yeUxvZ1NpbmsuanMnO1xuaW1wb3J0IHR5cGUgeyBNZW1vcnlNZXRyaWNzU2luayB9IGZyb20gJy4uL21ldHJpY3Mvc2lua3MvTWVtb3J5TWV0cmljc1NpbmsuanMnO1xuXG5jb25zdCBfX2Rpcm5hbWUgPSBkaXJuYW1lKGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKSk7XG5jb25zdCBERUZBVUxUX1BPUlQgPSAzOTM5O1xuY29uc3QgQ09OU09MRV9IT1NUID0gJ2RvbGxob3VzZS5sb2NhbGhvc3QnO1xuY29uc3QgQUxMT1dFRF9QQUdFX0VYVEVOU0lPTlMgPSBuZXcgU2V0KFsnLmh0bWwnLCAnLmh0bSddKTtcbi8qKiBNYXggSlNPTiBib2R5IGZvciBzZXR1cCByb3V0ZXMgKGluc3RhbGwvb3Blbi1jb25maWcpLiBJbmdlc3Qgcm91dGVzIHVzZSB0aGVpciBvd24gMW1iIGxpbWl0LiAqL1xuY29uc3QgU0VUVVBfQk9EWV9MSU1JVCA9ICcxa2InO1xuXG4vKiogVHJhY2sgd2hldGhlciB0aGUgd2ViIHNlcnZlciBpcyBhbHJlYWR5IHJ1bm5pbmcgaW4tcHJvY2Vzcy4gKi9cbmxldCBzZXJ2ZXJSdW5uaW5nID0gZmFsc2U7XG5sZXQgc2VydmVyUG9ydCA9IERFRkFVTFRfUE9SVDtcblxuLyoqIENoZWNrIHdoZXRoZXIgdGhlIHdlYiBzZXJ2ZXIgaGFzIGJlZW4gc3RhcnRlZCBpbiB0aGlzIHByb2Nlc3MuICovXG5leHBvcnQgZnVuY3Rpb24gaXNXZWJTZXJ2ZXJSdW5uaW5nKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gc2VydmVyUnVubmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBzdGFydGluZyB0aGUgd2ViIHNlcnZlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJTZXJ2ZXJPcHRpb25zIHtcbiAgLyoqIFBvcnQgdG8gYmluZCB0byAoZGVmYXVsdDogMzkzOSkgKi9cbiAgcG9ydD86IG51bWJlcjtcbiAgLyoqIFBhdGggdG8gdGhlIHBvcnRmb2xpbyBkaXJlY3RvcnkgKGUuZy4sIH4vLmRvbGxob3VzZS9wb3J0Zm9saW8pICovXG4gIHBvcnRmb2xpb0Rpcjogc3RyaW5nO1xuICAvKiogT3BlbiB0aGUgYnJvd3NlciBhdXRvbWF0aWNhbGx5IGFmdGVyIHN0YXJ0aW5nIChkZWZhdWx0OiBmYWxzZSkgKi9cbiAgb3BlbkJyb3dzZXI/OiBib29sZWFuO1xuICAvKipcbiAgICogTUNQQVFMSGFuZGxlciBmb3Igcm91dGluZyB0aHJvdWdoIHRoZSBNQ1AtQVFMIHBpcGVsaW5lLlxuICAgKiBXaGVuIHByb3ZpZGVkLCBBUEkgcm91dGVzIHVzZSB0aGUgZ2F0ZXdheSAodmFsaWRhdGVkLCBjYWNoZWQsIGdhdGVrZWVwZXItY2hlY2tlZCkuXG4gICAqIFdoZW4gYWJzZW50LCBmYWxscyBiYWNrIHRvIGRpcmVjdCBmaWxlc3lzdGVtIGFjY2VzcyAobGVnYWN5IGJlaGF2aW9yKS5cbiAgICogSXNzdWUgIzc5NjogV2ViIE1DUC1BUUwgR2F0ZXdheS5cbiAgICovXG4gIG1jcEFxbEhhbmRsZXI/OiBNQ1BBUUxIYW5kbGVyO1xuICAvKiogTWVtb3J5TG9nU2luayBmb3IgbG9nIHJvdXRlcyAob3B0aW9uYWwg4oCUIGxvZ3MgdGFiIGRpc2FibGVkIGlmIG5vdCBwcm92aWRlZCkgKi9cbiAgbWVtb3J5U2luaz86IE1lbW9yeUxvZ1Npbms7XG4gIC8qKiBNZW1vcnlNZXRyaWNzU2luayBmb3IgbWV0cmljcyByb3V0ZXMgKG9wdGlvbmFsIOKAlCBtZXRyaWNzIHRhYiBkaXNhYmxlZCBpZiBub3QgcHJvdmlkZWQpICovXG4gIG1ldHJpY3NTaW5rPzogTWVtb3J5TWV0cmljc1Npbms7XG4gIC8qKiBBZGRpdGlvbmFsIHJvdXRlcnMgdG8gbW91bnQgYmVmb3JlIHRoZSBTUEEgZmFsbGJhY2sgKGUuZy4sIGluZ2VzdCByb3V0ZXMpICovXG4gIGFkZGl0aW9uYWxSb3V0ZXJzPzogaW1wb3J0KCdleHByZXNzJykuUm91dGVyW107XG59XG5cbi8qKlxuICogUmVzdWx0IG9mIHN0YXJ0aW5nIHRoZSB3ZWIgc2VydmVyLCBpbmNsdWRpbmcgaG9va3MgZm9yIERJIHdpcmluZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJTZXJ2ZXJSZXN1bHQge1xuICAvKiogRXhwcmVzcyBhcHAgaW5zdGFuY2Ug4oCUIGZvciBtb3VudGluZyBhZGRpdGlvbmFsIHJvdXRlcyAoZS5nLiwgaW5nZXN0IHJvdXRlcykgKi9cbiAgYXBwPzogaW1wb3J0KCdleHByZXNzJykuRXhwcmVzcztcbiAgLyoqIExvZyBicm9hZGNhc3QgZnVuY3Rpb24g4oCUIGNhbGwgd2l0aCBlYWNoIGVudHJ5IHRvIHB1c2ggdG8gU1NFIGNsaWVudHMgKi9cbiAgbG9nQnJvYWRjYXN0PzogKGVudHJ5OiBpbXBvcnQoJy4uL2xvZ2dpbmcvdHlwZXMuanMnKS5VbmlmaWVkTG9nRW50cnkpID0+IHZvaWQ7XG4gIC8qKiBNZXRyaWNzIHNuYXBzaG90IGZ1bmN0aW9uIOKAlCBjYWxsIHdpdGggZWFjaCBzbmFwc2hvdCB0byBwdXNoIHRvIFNTRSBjbGllbnRzICovXG4gIG1ldHJpY3NPblNuYXBzaG90PzogKHNuYXBzaG90OiBpbXBvcnQoJy4uL21ldHJpY3MvdHlwZXMuanMnKS5NZXRyaWNTbmFwc2hvdCkgPT4gdm9pZDtcbn1cblxuLyoqXG4gKiBSZXN1bHQgb2YgYXR0ZW1wdGluZyB0byBvcGVuIHRoZSBicm93c2VyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJyb3dzZXJPcGVuUmVzdWx0IHtcbiAgLyoqIFRoZSBVUkwgdGhlIHNlcnZlciBpcyBydW5uaW5nIG9uICovXG4gIHVybDogc3RyaW5nO1xuICAvKiogV2hldGhlciB0aGUgc2VydmVyIHdhcyBhbHJlYWR5IHJ1bm5pbmcgKHRydWUpIG9yIGp1c3Qgc3RhcnRlZCAoZmFsc2UpICovXG4gIGFscmVhZHlSdW5uaW5nOiBib29sZWFuO1xuICAvKiogV2hldGhlciB0aGUgYnJvd3NlciB3YXMgc3VjY2Vzc2Z1bGx5IG9wZW5lZCAqL1xuICBicm93c2VyT3BlbmVkOiBib29sZWFuO1xuICAvKiogV2FybmluZyBtZXNzYWdlIGlmIHRoZSBicm93c2VyIGNvdWxkIG5vdCBiZSBvcGVuZWQgKi9cbiAgd2FybmluZz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcGVuIGEgVVJMIGluIHRoZSBzeXN0ZW0ncyBkZWZhdWx0IGJyb3dzZXIuXG4gKlxuICogUGxhdGZvcm0tYXdhcmU6XG4gKiAtIG1hY09TOiBgb3BlbmBcbiAqIC0gTGludXg6IGB4ZGctb3BlbmBcbiAqIC0gV2luZG93czogYHN0YXJ0YFxuICpcbiAqIEBwYXJhbSB1cmwgLSBUaGUgVVJMIHRvIG9wZW5cbiAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0cnVlIGlmIHRoZSBicm93c2VyIG9wZW5lZCwgZmFsc2Ugd2l0aCBlcnJvciBtZXNzYWdlIGlmIG5vdFxuICovXG5mdW5jdGlvbiBvcGVuSW5Ccm93c2VyKHVybDogc3RyaW5nKTogUHJvbWlzZTx7IHN1Y2Nlc3M6IGJvb2xlYW47IGVycm9yPzogc3RyaW5nIH0+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3QgcGxhdCA9IHBsYXRmb3JtKCk7XG4gICAgY29uc3QgY21kID0gcGxhdCA9PT0gJ2RhcndpbicgPyAnb3BlbidcbiAgICAgIDogcGxhdCA9PT0gJ3dpbjMyJyA/ICdzdGFydCdcbiAgICAgIDogJ3hkZy1vcGVuJztcblxuICAgIC8vIFNlY3VyaXR5OiB1c2UgZXhlY0ZpbGUgd2l0aCBVUkwgYXMgYXJndW1lbnQgYXJyYXksIG5vdCBzdHJpbmcgaW50ZXJwb2xhdGlvblxuICAgIGNvbnN0IHVybFN0ciA9IFN0cmluZyh1cmwpO1xuICAgIC8vIEFjY2VwdCBsb2NhbGhvc3QsIDEyNy4wLjAuMSwgYW5kICoubG9jYWxob3N0IHN1YmRvbWFpbnMgKFJGQyA2NzYxKVxuICAgIGlmICghL15odHRwcz86XFwvXFwvKGxvY2FsaG9zdHwxMjdcXC4wXFwuMFxcLjF8W1xcdy1dK1xcLmxvY2FsaG9zdClbOi9dLy50ZXN0KHVybFN0cikpIHtcbiAgICAgIHJlc29sdmUoeyBzdWNjZXNzOiBmYWxzZSwgZXJyb3I6ICdVUkwgbXVzdCBiZSBhIGxvY2FsaG9zdCBIVFRQIFVSTCcgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGV4ZWNGaWxlKGNtZCwgW3VybFN0cl0sIChlcnIpID0+IHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oYFtXZWJVSV0gQ291bGQgbm90IGF1dG8tb3BlbiBicm93c2VyOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICByZXNvbHZlKHsgc3VjY2VzczogZmFsc2UsIGVycm9yOiBlcnIubWVzc2FnZSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUoeyBzdWNjZXNzOiB0cnVlIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBTdGFydCB0aGUgcG9ydGZvbGlvIHdlYiBzZXJ2ZXIuXG4gKlxuICogQmluZHMgdG8gMTI3LjAuMC4xIG9ubHkgKGxvY2FsaG9zdCkuIFNlcnZlcyB0aGUgcG9ydGZvbGlvIGJyb3dzZXJcbiAqIGZyb250ZW5kIGFuZCBBUEkgcm91dGVzIGZvciByZWFkaW5nIGVsZW1lbnRzLlxuICpcbiAqIElkZW1wb3RlbnQ6IGlmIHRoZSBzZXJ2ZXIgaXMgYWxyZWFkeSBydW5uaW5nLCBvcHRpb25hbGx5IG9wZW5zIHRoZVxuICogYnJvd3NlciB3aXRob3V0IHN0YXJ0aW5nIGEgc2Vjb25kIGluc3RhbmNlLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gU2VydmVyIGNvbmZpZ3VyYXRpb25cbiAqIEByZXR1cm5zIEhvb2tzIGZvciBESSB3aXJpbmcgKGxvZyBicm9hZGNhc3QsIG1ldHJpY3Mgb25TbmFwc2hvdClcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0V2ViU2VydmVyKG9wdGlvbnM6IFdlYlNlcnZlck9wdGlvbnMpOiBQcm9taXNlPFdlYlNlcnZlclJlc3VsdD4ge1xuICBjb25zdCBwb3J0ID0gb3B0aW9ucy5wb3J0IHx8IERFRkFVTFRfUE9SVDtcbiAgY29uc3QgcmVzdWx0OiBXZWJTZXJ2ZXJSZXN1bHQgPSB7fTtcblxuICBpZiAoc2VydmVyUnVubmluZykge1xuICAgIGlmIChvcHRpb25zLm9wZW5Ccm93c2VyKSB7XG4gICAgICBvcGVuSW5Ccm93c2VyKGBodHRwOi8vJHtDT05TT0xFX0hPU1R9OiR7c2VydmVyUG9ydH1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGNvbnN0IGFwcCA9IGV4cHJlc3MoKTtcbiAgcmVzdWx0LmFwcCA9IGFwcDtcbiAgYXBwLmRpc2FibGUoJ3gtcG93ZXJlZC1ieScpO1xuXG4gIC8vIFNlY3VyaXR5IGhlYWRlcnNcbiAgYXBwLnVzZSgoX3JlcSwgcmVzLCBuZXh0KSA9PiB7XG4gICAgcmVzLnNldEhlYWRlcignWC1Db250ZW50LVR5cGUtT3B0aW9ucycsICdub3NuaWZmJyk7XG4gICAgcmVzLnNldEhlYWRlcignWC1GcmFtZS1PcHRpb25zJywgJ0RFTlknKTtcbiAgICByZXMuc2V0SGVhZGVyKCdYLVhTUy1Qcm90ZWN0aW9uJywgJzE7IG1vZGU9YmxvY2snKTtcbiAgICByZXMuc2V0SGVhZGVyKCdSZWZlcnJlci1Qb2xpY3knLCAnbm8tcmVmZXJyZXInKTtcbiAgICByZXMuc2V0SGVhZGVyKCdBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4nLCBgaHR0cDovLyR7Q09OU09MRV9IT1NUfToke3BvcnR9YCk7XG4gICAgcmVzLnNldEhlYWRlcignQ29udGVudC1TZWN1cml0eS1Qb2xpY3knLCBbXG4gICAgICBcImRlZmF1bHQtc3JjICdzZWxmJ1wiLFxuICAgICAgXCJzY3JpcHQtc3JjICdzZWxmJyBjZG4uanNkZWxpdnIubmV0IGNkbmpzLmNsb3VkZmxhcmUuY29tXCIsXG4gICAgICBcInN0eWxlLXNyYyAnc2VsZicgJ3Vuc2FmZS1pbmxpbmUnIGNkbmpzLmNsb3VkZmxhcmUuY29tIGNkbi5qc2RlbGl2ci5uZXRcIixcbiAgICAgIFwiY29ubmVjdC1zcmMgJ3NlbGYnIHJhdy5naXRodWJ1c2VyY29udGVudC5jb21cIixcbiAgICAgIFwiZm9udC1zcmMgJ3NlbGYnXCIsXG4gICAgXS5qb2luKCc7ICcpKTtcbiAgICBuZXh0KCk7XG4gIH0pO1xuXG4gIC8vIFNldHVwIHJvdXRlczogYXV0by1pbnN0YWxsIERvbGxob3VzZU1DUCB0byBNQ1AgY2xpZW50cyAobW91bnQgQkVGT1JFIEFQSSByb3V0ZXMpXG4gIC8vIEJvZHkgbGltaXQgc2NvcGVkIHRvIHNldHVwIHJvdXRlcyBvbmx5IOKAlCBpbmdlc3Qgcm91dGVzIG5lZWQgMW1iIGZvciBmb2xsb3dlciBsb2cgZm9yd2FyZGluZ1xuICBjb25zdCBzZXR1cEpzb25QYXJzZXIgPSBleHByZXNzLmpzb24oeyBsaW1pdDogU0VUVVBfQk9EWV9MSU1JVCwgdHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nIH0pO1xuICBjb25zdCB7IGluc3RhbGxIYW5kbGVyLCBvcGVuQ29uZmlnSGFuZGxlciwgdmVyc2lvbkhhbmRsZXIsIG1jcGJSZWRpcmVjdEhhbmRsZXIsIGRldGVjdEhhbmRsZXIgfSA9IGNyZWF0ZVNldHVwUm91dGVzKCk7XG4gIGFwcC5wb3N0KCcvYXBpL3NldHVwL2luc3RhbGwnLCBzZXR1cEpzb25QYXJzZXIsIGluc3RhbGxIYW5kbGVyKTtcbiAgYXBwLnBvc3QoJy9hcGkvc2V0dXAvb3Blbi1jb25maWcnLCBzZXR1cEpzb25QYXJzZXIsIG9wZW5Db25maWdIYW5kbGVyKTtcbiAgYXBwLmdldCgnL2FwaS9zZXR1cC92ZXJzaW9uJywgdmVyc2lvbkhhbmRsZXIpO1xuICBhcHAuZ2V0KCcvYXBpL3NldHVwL21jcGInLCBtY3BiUmVkaXJlY3RIYW5kbGVyKTtcbiAgYXBwLmdldCgnL2FwaS9zZXR1cC9kZXRlY3QnLCBkZXRlY3RIYW5kbGVyKTtcbiAgbG9nZ2VyLmluZm8oJ1tXZWJVSV0gU2V0dXAgcm91dGVzIG1vdW50ZWQgYXQgL2FwaS9zZXR1cCcpO1xuXG4gIC8vIEFQSSByb3V0ZXMg4oCUIHVzZSBNQ1AtQVFMIGdhdGV3YXkgd2hlbiBoYW5kbGVyIGlzIGF2YWlsYWJsZSAoSXNzdWUgIzc5NilcbiAgaWYgKG9wdGlvbnMubWNwQXFsSGFuZGxlcikge1xuICAgIGFwcC51c2UoJy9hcGknLCBjcmVhdGVHYXRld2F5QXBpUm91dGVzKG9wdGlvbnMubWNwQXFsSGFuZGxlciwgb3B0aW9ucy5wb3J0Zm9saW9EaXIpKTtcblxuICAgIC8vIFBlcm1pc3Npb24gZXZhbHVhdGlvbiByb3V0ZXMgKFBPU1QgL2V2YWx1YXRlX3Blcm1pc3Npb24sIEdFVCAvcGVybWlzc2lvbnMvc3RhdHVzKVxuICAgIGNvbnN0IHsgcmVnaXN0ZXJQZXJtaXNzaW9uUm91dGVzIH0gPSBhd2FpdCBpbXBvcnQoJy4vcm91dGVzL3Blcm1pc3Npb25Sb3V0ZXMuanMnKTtcbiAgICBjb25zdCBwZXJtUm91dGVyID0gKGF3YWl0IGltcG9ydCgnZXhwcmVzcycpKS5Sb3V0ZXIoKTtcbiAgICByZWdpc3RlclBlcm1pc3Npb25Sb3V0ZXMocGVybVJvdXRlciwgb3B0aW9ucy5tY3BBcWxIYW5kbGVyKTtcbiAgICBhcHAudXNlKCcvYXBpJywgcGVybVJvdXRlcik7XG5cbiAgICBsb2dnZXIuaW5mbygnW1dlYlVJXSBBUEkgcm91dGVzIHVzaW5nIE1DUC1BUUwgR2F0ZXdheSArIHBlcm1pc3Npb24gcm91dGVzJyk7XG4gIH0gZWxzZSB7XG4gICAgYXBwLnVzZSgnL2FwaScsIGNyZWF0ZUFwaVJvdXRlcyhvcHRpb25zLnBvcnRmb2xpb0RpcikpO1xuICAgIGxvZ2dlci53YXJuKCdbV2ViVUldIEFQSSByb3V0ZXMgdXNpbmcgZGlyZWN0IGZpbGVzeXN0ZW0gYWNjZXNzIChubyBNQ1AtQVFMIGhhbmRsZXIgYXZhaWxhYmxlKScpO1xuICB9XG5cbiAgLy8gQ29uc29sZSByb3V0ZXM6IGxvZ3MsIG1ldHJpY3MsIGhlYWx0aFxuICBsZXQgbG9nUm91dGVzOiBMb2dSb3V0ZXNSZXN1bHQgfCB1bmRlZmluZWQ7XG4gIGxldCBtZXRyaWNzUm91dGVzOiBNZXRyaWNzUm91dGVzUmVzdWx0IHwgdW5kZWZpbmVkO1xuXG4gIGlmIChvcHRpb25zLm1lbW9yeVNpbmspIHtcbiAgICBsb2dSb3V0ZXMgPSBjcmVhdGVMb2dSb3V0ZXMob3B0aW9ucy5tZW1vcnlTaW5rKTtcbiAgICBhcHAudXNlKCcvYXBpJywgbG9nUm91dGVzLnJvdXRlcik7XG4gICAgcmVzdWx0LmxvZ0Jyb2FkY2FzdCA9IGxvZ1JvdXRlcy5icm9hZGNhc3Q7XG4gICAgbG9nZ2VyLmluZm8oJ1tXZWJVSV0gTG9nIHZpZXdlciByb3V0ZXMgbW91bnRlZCBhdCAvYXBpL2xvZ3MnKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLm1ldHJpY3NTaW5rKSB7XG4gICAgbWV0cmljc1JvdXRlcyA9IGNyZWF0ZU1ldHJpY3NSb3V0ZXMob3B0aW9ucy5tZXRyaWNzU2luayk7XG4gICAgYXBwLnVzZSgnL2FwaScsIG1ldHJpY3NSb3V0ZXMucm91dGVyKTtcbiAgICByZXN1bHQubWV0cmljc09uU25hcHNob3QgPSBtZXRyaWNzUm91dGVzLm9uU25hcHNob3Q7XG4gICAgbG9nZ2VyLmluZm8oJ1tXZWJVSV0gTWV0cmljcyByb3V0ZXMgbW91bnRlZCBhdCAvYXBpL21ldHJpY3MnKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLm1lbW9yeVNpbmspIHtcbiAgICBjb25zdCBoZWFsdGhSb3V0ZXIgPSBjcmVhdGVIZWFsdGhSb3V0ZXMoe1xuICAgICAgbWVtb3J5U2luazogb3B0aW9ucy5tZW1vcnlTaW5rLFxuICAgICAgbWV0cmljc1Npbms6IG9wdGlvbnMubWV0cmljc1NpbmssXG4gICAgICBsb2dDbGllbnRDb3VudDogbG9nUm91dGVzID8gbG9nUm91dGVzLmNsaWVudENvdW50IDogKCkgPT4gMCxcbiAgICAgIG1ldHJpY3NDbGllbnRDb3VudDogbWV0cmljc1JvdXRlcyA/IG1ldHJpY3NSb3V0ZXMuY2xpZW50Q291bnQgOiAoKSA9PiAwLFxuICAgIH0pO1xuICAgIGFwcC51c2UoJy9hcGknLCBoZWFsdGhSb3V0ZXIpO1xuICB9XG5cbiAgLy8gU2VydmUgfi8uZG9sbGhvdXNlL3BhZ2VzLyBhdCAvcGFnZXMvIOKAlCBkYXNoYm9hcmRzLCBnZW5lcmF0ZWQgY29udGVudCwgc3RhY2sgdmlld3NcbiAgY29uc3QgcGFnZXNEaXIgPSBqb2luKGRpcm5hbWUob3B0aW9ucy5wb3J0Zm9saW9EaXIpLCAncGFnZXMnKTtcbiAgbWtkaXIocGFnZXNEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgbG9nZ2VyLndhcm4oYFtXZWJVSV0gQ291bGQgbm90IGNyZWF0ZSBwYWdlcyBkaXJlY3Rvcnk6ICR7KGVyciBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgfSk7XG4gIGFwcC51c2UoJy9wYWdlcycsIGV4cHJlc3Muc3RhdGljKHBhZ2VzRGlyKSk7XG5cbiAgLyoqXG4gICAqIEdFVCAvYXBpL3BhZ2VzXG4gICAqIExpc3RzIGF2YWlsYWJsZSBIVE1MIHBhZ2VzIGluIH4vLmRvbGxob3VzZS9wYWdlcy8uXG4gICAqIFJldHVybnMgcGFnZSBuYW1lcyBhbmQgdGhlaXIgVVJMcyBmb3IgdGhlIG1hbmFnZW1lbnQgY29uc29sZS5cbiAgICovXG4gIGFwcC5nZXQoJy9hcGkvcGFnZXMnLCBhc3luYyAoX3JlcSwgcmVzKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgcmVhZGRpcihwYWdlc0Rpcik7XG4gICAgICBjb25zdCBwYWdlcyA9IGZpbGVzXG4gICAgICAgIC5maWx0ZXIoZiA9PiAhZi5zdGFydHNXaXRoKCcuJykgJiYgQUxMT1dFRF9QQUdFX0VYVEVOU0lPTlMuaGFzKGV4dG5hbWUoZikpKVxuICAgICAgICAubWFwKGYgPT4gKHsgbmFtZTogZiwgdXJsOiBgL3BhZ2VzLyR7Zn1gIH0pKTtcbiAgICAgIHJlcy5qc29uKHsgcGFnZXMsIGRpcmVjdG9yeTogcGFnZXNEaXIgfSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXMuanNvbih7IHBhZ2VzOiBbXSwgZGlyZWN0b3J5OiBwYWdlc0RpciB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIEFkZGl0aW9uYWwgcm91dGVycyAoZS5nLiwgdW5pZmllZCBjb25zb2xlIGluZ2VzdCByb3V0ZXMpIOKAlCBtdXN0IG1vdW50IGJlZm9yZSBTUEEgZmFsbGJhY2tcbiAgb3B0aW9ucy5hZGRpdGlvbmFsUm91dGVycz8uZm9yRWFjaChyb3V0ZXIgPT4gYXBwLnVzZShyb3V0ZXIpKTtcblxuICAvLyBTdGF0aWMgZnJvbnRlbmQgZmlsZXNcbiAgY29uc3QgcHVibGljRGlyID0gam9pbihfX2Rpcm5hbWUsICdwdWJsaWMnKTtcbiAgYXBwLnVzZShleHByZXNzLnN0YXRpYyhwdWJsaWNEaXIpKTtcblxuICAvLyBTUEEgZmFsbGJhY2tcbiAgYXBwLmdldCgnL3sqcGF0aH0nLCAocmVxLCByZXMpID0+IHtcbiAgICBjb25zdCBub3JtYWxpemVkUGF0aCA9IHJlcS5wYXRoLm5vcm1hbGl6ZSgnTkZDJyk7XG4gICAgaWYgKG5vcm1hbGl6ZWRQYXRoLnN0YXJ0c1dpdGgoJy9hcGkvJykpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDA0KS5qc29uKHsgZXJyb3I6IGBBUEkgcm91dGUgbm90IGZvdW5kOiAke25vcm1hbGl6ZWRQYXRofWAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChub3JtYWxpemVkUGF0aC5zdGFydHNXaXRoKCcvcGFnZXMvJykpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDA0KS5qc29uKHsgZXJyb3I6IGBQYWdlIG5vdCBmb3VuZDogJHtub3JtYWxpemVkUGF0aH1gIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXMuc2VuZEZpbGUoam9pbihwdWJsaWNEaXIsICdpbmRleC5odG1sJykpO1xuICB9KTtcblxuICAvLyBHbG9iYWwgZXJyb3IgaGFuZGxlciDigJQgY2F0Y2ggRXhwcmVzcyBlcnJvcnMgYW5kIHJvdXRlIHRvIGxvZ2dlciBpbnN0ZWFkIG9mIHRlcm1pbmFsLlxuICAvLyBXaXRob3V0IHRoaXMsIEV4cHJlc3MgZHVtcHMgc3RhY2sgdHJhY2VzIHRvIHN0ZGVyciAodmlzaWJsZSBpbiAtLXdlYiB0ZXJtaW5hbCkuXG4gIC8vIEFsbCBlcnJvcnMgc3RpbGwgYXBwZWFyIGluIHRoZSBtYW5hZ2VtZW50IGNvbnNvbGUncyBMb2dzIHRhYiB2aWEgTWVtb3J5TG9nU2luay5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBhcHAudXNlKChlcnI6IEVycm9yLCBfcmVxOiBpbXBvcnQoJ2V4cHJlc3MnKS5SZXF1ZXN0LCByZXM6IGltcG9ydCgnZXhwcmVzcycpLlJlc3BvbnNlLCBfbmV4dDogaW1wb3J0KCdleHByZXNzJykuTmV4dEZ1bmN0aW9uKSA9PiB7XG4gICAgY29uc3Qgc3RhdHVzID0gKGVyciBhcyBhbnkpLnN0YXR1cyB8fCAoZXJyIGFzIGFueSkuc3RhdHVzQ29kZSB8fCA1MDA7XG4gICAgbG9nZ2VyLndhcm4oYFtXZWJVSV0gJHtlcnIubmFtZX06ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgaWYgKCFyZXMuaGVhZGVyc1NlbnQpIHtcbiAgICAgIHJlcy5zdGF0dXMoc3RhdHVzKS5qc29uKHsgZXJyb3I6IGVyci5tZXNzYWdlIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gQmluZCB0byBsb2NhbGhvc3Qgb25seSDigJQgaGFuZGxlIHBvcnQgY29uZmxpY3RzIGdyYWNlZnVsbHlcbiAgLy8gTk9URTogY29uc29sZS5sb2cgaXMgaW50ZW50aW9uYWwgaGVyZSAobm90IGxvZ2dlcikuIEluIC0td2ViIHN0YW5kYWxvbmUgbW9kZSxcbiAgLy8gdGhlIHVzZXIgc2VlcyB0ZXJtaW5hbCBvdXRwdXQgZGlyZWN0bHkuIGxvZ2dlci5pbmZvIHdyaXRlcyB0byB0aGUgc3RydWN0dXJlZFxuICAvLyBsb2cgc3lzdGVtIChNZW1vcnlMb2dTaW5rIOKGkiBTU0Ug4oaSIHdlYiBjb25zb2xlKS4gQm90aCBhcmUgbmVlZGVkOiBjb25zb2xlLmxvZ1xuICAvLyBmb3IgdGhlIGh1bWFuIGF0IHRoZSB0ZXJtaW5hbCwgbG9nZ2VyIGZvciB0aGUgbG9nIHZpZXdlciB0YWIuXG4gIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3QgaHR0cFNlcnZlciA9IGFwcC5saXN0ZW4ocG9ydCwgJzEyNy4wLjAuMScsICgpID0+IHtcbiAgICAgIHNlcnZlclJ1bm5pbmcgPSB0cnVlO1xuICAgICAgc2VydmVyUG9ydCA9IHBvcnQ7XG4gICAgICBjb25zdCB1cmwgPSBgaHR0cDovLyR7Q09OU09MRV9IT1NUfToke3BvcnR9YDtcbiAgICAgIGNvbnN0IGZhbGxiYWNrVXJsID0gYGh0dHA6Ly8xMjcuMC4wLjE6JHtwb3J0fWA7XG4gICAgICBsb2dnZXIuaW5mbyhgW1dlYlVJXSBNYW5hZ2VtZW50IGNvbnNvbGUgcnVubmluZyBhdCAke3VybH1gKTtcbiAgICAgIGNvbnNvbGUubG9nKGBcXG4gIERvbGxob3VzZU1DUCBNYW5hZ2VtZW50IENvbnNvbGVcXG4gICR7dXJsfVxcbiAgJHtmYWxsYmFja1VybH0gKGZhbGxiYWNrKVxcbmApO1xuXG4gICAgICBpZiAob3B0aW9ucy5vcGVuQnJvd3Nlcikge1xuICAgICAgICBvcGVuSW5Ccm93c2VyKHVybCk7XG4gICAgICB9XG4gICAgICByZXNvbHZlKCk7XG4gICAgfSk7XG4gICAgaHR0cFNlcnZlci5vbignZXJyb3InLCAoZXJyOiBOb2RlSlMuRXJybm9FeGNlcHRpb24pID0+IHtcbiAgICAgIGlmIChlcnIuY29kZSA9PT0gJ0VBRERSSU5VU0UnKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGBodHRwOi8vJHtDT05TT0xFX0hPU1R9OiR7cG9ydH1gO1xuICAgICAgICBsb2dnZXIuaW5mbyhgW1dlYlVJXSBQb3J0ICR7cG9ydH0gYWxyZWFkeSBpbiB1c2Ug4oCUIG9wZW5pbmcgZXhpc3RpbmcgY29uc29sZWApO1xuICAgICAgICBjb25zb2xlLmxvZyhgXFxuICBEb2xsaG91c2VNQ1AgTWFuYWdlbWVudCBDb25zb2xlIChleGlzdGluZyBpbnN0YW5jZSlcXG4gICR7dXJsfVxcbmApO1xuICAgICAgICBpZiAob3B0aW9ucy5vcGVuQnJvd3Nlcikge1xuICAgICAgICAgIG9wZW5JbkJyb3dzZXIodXJsKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKGBbV2ViVUldIEZhaWxlZCB0byBiaW5kIHBvcnQgJHtwb3J0fTogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICAgIHJlc29sdmUoKTsgLy8gV2ViIGNvbnNvbGUgaXMgb3B0aW9uYWwg4oCUIGRvbid0IGJsb2NrIHN0YXJ0dXBcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBPcGVuIHRoZSBwb3J0Zm9saW8gYnJvd3NlciBmcm9tIHdpdGhpbiB0aGUgTUNQIHNlcnZlciBwcm9jZXNzLlxuICpcbiAqIFN0YXJ0cyB0aGUgd2ViIHNlcnZlciBpZiBub3QgYWxyZWFkeSBydW5uaW5nLCB0aGVuIG9wZW5zIHRoZSBzeXN0ZW1cbiAqIGJyb3dzZXIgdG8gdGhlIHBvcnRmb2xpbyBVSS4gUmV0dXJucyBhIHJlc3VsdCBvYmplY3QgaW5kaWNhdGluZ1xuICogd2hldGhlciB0aGUgc2VydmVyIHN0YXJ0ZWQgYW5kIHRoZSBicm93c2VyIG9wZW5lZCBzdWNjZXNzZnVsbHkuXG4gKlxuICogQ2FsbGVkIGJ5IHRoZSBgb3Blbl9wb3J0Zm9saW9fYnJvd3NlcmAgTUNQLUFRTCBvcGVyYXRpb24gKElzc3VlICM3NzQpLlxuICpcbiAqIEBwYXJhbSBwb3J0Zm9saW9EaXIgLSBQYXRoIHRvIHRoZSBwb3J0Zm9saW8gZGlyZWN0b3J5IChlLmcuLCB+Ly5kb2xsaG91c2UvcG9ydGZvbGlvKVxuICogQHBhcmFtIHBvcnQgLSBQb3J0IHRvIGJpbmQgdG8gKGRlZmF1bHQ6IDM5MzkpXG4gKiBAcmV0dXJucyBSZXN1bHQgd2l0aCBVUkwsIHNlcnZlciBzdGF0dXMsIGFuZCBicm93c2VyIG9wZW4gc3RhdHVzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBvcGVuUG9ydGZvbGlvQnJvd3Nlcihwb3J0Zm9saW9EaXI6IHN0cmluZywgcG9ydD86IG51bWJlciwgbWNwQXFsSGFuZGxlcj86IE1DUEFRTEhhbmRsZXIsIHRhYj86IHN0cmluZyk6IFByb21pc2U8QnJvd3Nlck9wZW5SZXN1bHQ+IHtcbiAgY29uc3QgdGFyZ2V0UG9ydCA9IHBvcnQgfHwgREVGQVVMVF9QT1JUO1xuICBjb25zdCBiYXNlVXJsID0gYGh0dHA6Ly8ke0NPTlNPTEVfSE9TVH06JHt0YXJnZXRQb3J0fWA7XG4gIGNvbnN0IHVybCA9IHRhYiA/IGAke2Jhc2VVcmx9LyMke3RhYn1gIDogYmFzZVVybDtcbiAgY29uc3QgYWxyZWFkeVJ1bm5pbmcgPSBzZXJ2ZXJSdW5uaW5nO1xuXG4gIGlmICghc2VydmVyUnVubmluZykge1xuICAgIGF3YWl0IHN0YXJ0V2ViU2VydmVyKHtcbiAgICAgIHBvcnRmb2xpb0RpcixcbiAgICAgIHBvcnQ6IHRhcmdldFBvcnQsXG4gICAgICBvcGVuQnJvd3NlcjogZmFsc2UsIC8vIFdlJ2xsIG9wZW4gbWFudWFsbHkgYmVsb3cgdG8gY2FwdHVyZSB0aGUgcmVzdWx0XG4gICAgICBtY3BBcWxIYW5kbGVyLFxuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgYnJvd3NlclJlc3VsdCA9IGF3YWl0IG9wZW5JbkJyb3dzZXIodXJsKTtcblxuICByZXR1cm4ge1xuICAgIHVybCxcbiAgICBhbHJlYWR5UnVubmluZyxcbiAgICBicm93c2VyT3BlbmVkOiBicm93c2VyUmVzdWx0LnN1Y2Nlc3MsXG4gICAgLi4uKGJyb3dzZXJSZXN1bHQuZXJyb3IgPyB7IHdhcm5pbmc6IGBCcm93c2VyIGNvdWxkIG5vdCBiZSBvcGVuZWQgYXV0b21hdGljYWxseTogJHticm93c2VyUmVzdWx0LmVycm9yfS4gT3BlbiAke3VybH0gbWFudWFsbHkuYCB9IDoge30pLFxuICB9O1xufVxuIl19
281
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3dlYi9zZXJ2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O0dBV0c7QUFFSCxPQUFPLE9BQU8sTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDekMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDbkMsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsZUFBZSxFQUFFLHNCQUFzQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxlQUFlLEVBQXdCLE1BQU0sdUJBQXVCLENBQUM7QUFDOUUsT0FBTyxFQUFFLG1CQUFtQixFQUE0QixNQUFNLDJCQUEyQixDQUFDO0FBQzFGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzVELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUs1QyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMxRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUM7QUFDMUIsTUFBTSxZQUFZLEdBQUcscUJBQXFCLENBQUM7QUFDM0MsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQzNELG1H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Q0FBQztLQUN4SSxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRG9sbGhvdXNlTUNQIFdlYiBVSSBTZXJ2ZXJcbiAqXG4gKiBMaWdodHdlaWdodCBFeHByZXNzIHNlcnZlciBmb3IgYnJvd3NpbmcgcG9ydGZvbGlvIGVsZW1lbnRzIGluIGEgYnJvd3Nlci5cbiAqIEJvdW5kIHRvIDEyNy4wLjAuMSBvbmx5IChsb2NhbGhvc3QpLiBSZWFkLW9ubHkgZm9yIFYxLlxuICpcbiAqIENhbiBiZSBzdGFydGVkIHN0YW5kYWxvbmUgKGAtLXdlYmAgZmxhZykgb3IgZnJvbSB3aXRoaW4gdGhlIE1DUCBzZXJ2ZXJcbiAqIHByb2Nlc3MgdmlhIGBvcGVuUG9ydGZvbGlvQnJvd3NlcigpYC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9Eb2xsaG91c2VNQ1AvbWNwLXNlcnZlci12Mi1yZWZhY3Rvci9pc3N1ZXMvNzA0XG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9Eb2xsaG91c2VNQ1AvbWNwLXNlcnZlci12Mi1yZWZhY3Rvci9pc3N1ZXMvNzc0XG4gKi9cblxuaW1wb3J0IGV4cHJlc3MgZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgeyBqb2luLCBkaXJuYW1lLCBleHRuYW1lIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICdub2RlOnVybCc7XG5pbXBvcnQgeyBleGVjRmlsZSB9IGZyb20gJ25vZGU6Y2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyBwbGF0Zm9ybSB9IGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IHsgbWtkaXIsIHJlYWRkaXIgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IGNyZWF0ZUFwaVJvdXRlcywgY3JlYXRlR2F0ZXdheUFwaVJvdXRlcyB9IGZyb20gJy4vcm91dGVzLmpzJztcbmltcG9ydCB7IGNyZWF0ZUxvZ1JvdXRlcywgdHlwZSBMb2dSb3V0ZXNSZXN1bHQgfSBmcm9tICcuL3JvdXRlcy9sb2dSb3V0ZXMuanMnO1xuaW1wb3J0IHsgY3JlYXRlTWV0cmljc1JvdXRlcywgdHlwZSBNZXRyaWNzUm91dGVzUmVzdWx0IH0gZnJvbSAnLi9yb3V0ZXMvbWV0cmljc1JvdXRlcy5qcyc7XG5pbXBvcnQgeyBjcmVhdGVIZWFsdGhSb3V0ZXMgfSBmcm9tICcuL3JvdXRlcy9oZWFsdGhSb3V0ZXMuanMnO1xuaW1wb3J0IHsgY3JlYXRlU2V0dXBSb3V0ZXMgfSBmcm9tICcuL3JvdXRlcy9zZXR1cFJvdXRlcy5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBNQ1BBUUxIYW5kbGVyIH0gZnJvbSAnLi4vaGFuZGxlcnMvbWNwLWFxbC9NQ1BBUUxIYW5kbGVyLmpzJztcbmltcG9ydCB0eXBlIHsgTWVtb3J5TG9nU2luayB9IGZyb20gJy4uL2xvZ2dpbmcvc2lua3MvTWVtb3J5TG9nU2luay5qcyc7XG5pbXBvcnQgdHlwZSB7IE1lbW9yeU1ldHJpY3NTaW5rIH0gZnJvbSAnLi4vbWV0cmljcy9zaW5rcy9NZW1vcnlNZXRyaWNzU2luay5qcyc7XG5cbmNvbnN0IF9fZGlybmFtZSA9IGRpcm5hbWUoZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpKTtcbmNvbnN0IERFRkFVTFRfUE9SVCA9IDM5Mzk7XG5jb25zdCBDT05TT0xFX0hPU1QgPSAnZG9sbGhvdXNlLmxvY2FsaG9zdCc7XG5jb25zdCBBTExPV0VEX1BBR0VfRVhURU5TSU9OUyA9IG5ldyBTZXQoWycuaHRtbCcsICcuaHRtJ10pO1xuLyoqIE1heCBKU09OIGJvZHkgZm9yIHNldHVwIHJvdXRlcyAoaW5zdGFsbC9vcGVuLWNvbmZpZykuIEluZ2VzdCByb3V0ZXMgdXNlIHRoZWlyIG93biAxbWIgbGltaXQuICovXG5jb25zdCBTRVRVUF9CT0RZX0xJTUlUID0gJzFrYic7XG5cbi8qKiBUcmFjayB3aGV0aGVyIHRoZSB3ZWIgc2VydmVyIGlzIGFscmVhZHkgcnVubmluZyBpbi1wcm9jZXNzLiAqL1xubGV0IHNlcnZlclJ1bm5pbmcgPSBmYWxzZTtcbmxldCBzZXJ2ZXJQb3J0ID0gREVGQVVMVF9QT1JUO1xuXG4vKiogQ2hlY2sgd2hldGhlciB0aGUgd2ViIHNlcnZlciBoYXMgYmVlbiBzdGFydGVkIGluIHRoaXMgcHJvY2Vzcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1dlYlNlcnZlclJ1bm5pbmcoKTogYm9vbGVhbiB7XG4gIHJldHVybiBzZXJ2ZXJSdW5uaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHN0YXJ0aW5nIHRoZSB3ZWIgc2VydmVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYlNlcnZlck9wdGlvbnMge1xuICAvKiogUG9ydCB0byBiaW5kIHRvIChkZWZhdWx0OiAzOTM5KSAqL1xuICBwb3J0PzogbnVtYmVyO1xuICAvKiogUGF0aCB0byB0aGUgcG9ydGZvbGlvIGRpcmVjdG9yeSAoZS5nLiwgfi8uZG9sbGhvdXNlL3BvcnRmb2xpbykgKi9cbiAgcG9ydGZvbGlvRGlyOiBzdHJpbmc7XG4gIC8qKiBPcGVuIHRoZSBicm93c2VyIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgc3RhcnRpbmcgKGRlZmF1bHQ6IGZhbHNlKSAqL1xuICBvcGVuQnJvd3Nlcj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBNQ1BBUUxIYW5kbGVyIGZvciByb3V0aW5nIHRocm91Z2ggdGhlIE1DUC1BUUwgcGlwZWxpbmUuXG4gICAqIFdoZW4gcHJvdmlkZWQsIEFQSSByb3V0ZXMgdXNlIHRoZSBnYXRld2F5ICh2YWxpZGF0ZWQsIGNhY2hlZCwgZ2F0ZWtlZXBlci1jaGVja2VkKS5cbiAgICogV2hlbiBhYnNlbnQsIGZhbGxzIGJhY2sgdG8gZGlyZWN0IGZpbGVzeXN0ZW0gYWNjZXNzIChsZWdhY3kgYmVoYXZpb3IpLlxuICAgKiBJc3N1ZSAjNzk2OiBXZWIgTUNQLUFRTCBHYXRld2F5LlxuICAgKi9cbiAgbWNwQXFsSGFuZGxlcj86IE1DUEFRTEhhbmRsZXI7XG4gIC8qKiBNZW1vcnlMb2dTaW5rIGZvciBsb2cgcm91dGVzIChvcHRpb25hbCDigJQgbG9ncyB0YWIgZGlzYWJsZWQgaWYgbm90IHByb3ZpZGVkKSAqL1xuICBtZW1vcnlTaW5rPzogTWVtb3J5TG9nU2luaztcbiAgLyoqIE1lbW9yeU1ldHJpY3NTaW5rIGZvciBtZXRyaWNzIHJvdXRlcyAob3B0aW9uYWwg4oCUIG1ldHJpY3MgdGFiIGRpc2FibGVkIGlmIG5vdCBwcm92aWRlZCkgKi9cbiAgbWV0cmljc1Npbms/OiBNZW1vcnlNZXRyaWNzU2luaztcbiAgLyoqIEFkZGl0aW9uYWwgcm91dGVycyB0byBtb3VudCBiZWZvcmUgdGhlIFNQQSBmYWxsYmFjayAoZS5nLiwgaW5nZXN0IHJvdXRlcykgKi9cbiAgYWRkaXRpb25hbFJvdXRlcnM/OiBpbXBvcnQoJ2V4cHJlc3MnKS5Sb3V0ZXJbXTtcbn1cblxuLyoqXG4gKiBSZXN1bHQgb2Ygc3RhcnRpbmcgdGhlIHdlYiBzZXJ2ZXIsIGluY2x1ZGluZyBob29rcyBmb3IgREkgd2lyaW5nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYlNlcnZlclJlc3VsdCB7XG4gIC8qKiBFeHByZXNzIGFwcCBpbnN0YW5jZSDigJQgZm9yIG1vdW50aW5nIGFkZGl0aW9uYWwgcm91dGVzIChlLmcuLCBpbmdlc3Qgcm91dGVzKSAqL1xuICBhcHA/OiBpbXBvcnQoJ2V4cHJlc3MnKS5FeHByZXNzO1xuICAvKiogTG9nIGJyb2FkY2FzdCBmdW5jdGlvbiDigJQgY2FsbCB3aXRoIGVhY2ggZW50cnkgdG8gcHVzaCB0byBTU0UgY2xpZW50cyAqL1xuICBsb2dCcm9hZGNhc3Q/OiAoZW50cnk6IGltcG9ydCgnLi4vbG9nZ2luZy90eXBlcy5qcycpLlVuaWZpZWRMb2dFbnRyeSkgPT4gdm9pZDtcbiAgLyoqIE1ldHJpY3Mgc25hcHNob3QgZnVuY3Rpb24g4oCUIGNhbGwgd2l0aCBlYWNoIHNuYXBzaG90IHRvIHB1c2ggdG8gU1NFIGNsaWVudHMgKi9cbiAgbWV0cmljc09uU25hcHNob3Q/OiAoc25hcHNob3Q6IGltcG9ydCgnLi4vbWV0cmljcy90eXBlcy5qcycpLk1ldHJpY1NuYXBzaG90KSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIFJlc3VsdCBvZiBhdHRlbXB0aW5nIHRvIG9wZW4gdGhlIGJyb3dzZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnJvd3Nlck9wZW5SZXN1bHQge1xuICAvKiogVGhlIFVSTCB0aGUgc2VydmVyIGlzIHJ1bm5pbmcgb24gKi9cbiAgdXJsOiBzdHJpbmc7XG4gIC8qKiBXaGV0aGVyIHRoZSBzZXJ2ZXIgd2FzIGFscmVhZHkgcnVubmluZyAodHJ1ZSkgb3IganVzdCBzdGFydGVkIChmYWxzZSkgKi9cbiAgYWxyZWFkeVJ1bm5pbmc6IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRoZSBicm93c2VyIHdhcyBzdWNjZXNzZnVsbHkgb3BlbmVkICovXG4gIGJyb3dzZXJPcGVuZWQ6IGJvb2xlYW47XG4gIC8qKiBXYXJuaW5nIG1lc3NhZ2UgaWYgdGhlIGJyb3dzZXIgY291bGQgbm90IGJlIG9wZW5lZCAqL1xuICB3YXJuaW5nPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wZW4gYSBVUkwgaW4gdGhlIHN5c3RlbSdzIGRlZmF1bHQgYnJvd3Nlci5cbiAqXG4gKiBQbGF0Zm9ybS1hd2FyZTpcbiAqIC0gbWFjT1M6IGBvcGVuYFxuICogLSBMaW51eDogYHhkZy1vcGVuYFxuICogLSBXaW5kb3dzOiBgc3RhcnRgXG4gKlxuICogQHBhcmFtIHVybCAtIFRoZSBVUkwgdG8gb3BlblxuICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRydWUgaWYgdGhlIGJyb3dzZXIgb3BlbmVkLCBmYWxzZSB3aXRoIGVycm9yIG1lc3NhZ2UgaWYgbm90XG4gKi9cbmZ1bmN0aW9uIG9wZW5JbkJyb3dzZXIodXJsOiBzdHJpbmcpOiBQcm9taXNlPHsgc3VjY2VzczogYm9vbGVhbjsgZXJyb3I/OiBzdHJpbmcgfT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBwbGF0ID0gcGxhdGZvcm0oKTtcbiAgICBjb25zdCBjbWQgPSBwbGF0ID09PSAnZGFyd2luJyA/ICdvcGVuJ1xuICAgICAgOiBwbGF0ID09PSAnd2luMzInID8gJ3N0YXJ0J1xuICAgICAgOiAneGRnLW9wZW4nO1xuXG4gICAgLy8gU2VjdXJpdHk6IHVzZSBleGVjRmlsZSB3aXRoIFVSTCBhcyBhcmd1bWVudCBhcnJheSwgbm90IHN0cmluZyBpbnRlcnBvbGF0aW9uXG4gICAgY29uc3QgdXJsU3RyID0gU3RyaW5nKHVybCk7XG4gICAgLy8gQWNjZXB0IGxvY2FsaG9zdCwgMTI3LjAuMC4xLCBhbmQgKi5sb2NhbGhvc3Qgc3ViZG9tYWlucyAoUkZDIDY3NjEpXG4gICAgaWYgKCEvXmh0dHBzPzpcXC9cXC8obG9jYWxob3N0fDEyN1xcLjBcXC4wXFwuMXxbXFx3LV0rXFwubG9jYWxob3N0KVs6L10vLnRlc3QodXJsU3RyKSkge1xuICAgICAgcmVzb2x2ZSh7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogJ1VSTCBtdXN0IGJlIGEgbG9jYWxob3N0IEhUVFAgVVJMJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZXhlY0ZpbGUoY21kLCBbdXJsU3RyXSwgKGVycikgPT4ge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBsb2dnZXIud2FybihgW1dlYlVJXSBDb3VsZCBub3QgYXV0by1vcGVuIGJyb3dzZXI6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgIHJlc29sdmUoeyBzdWNjZXNzOiBmYWxzZSwgZXJyb3I6IGVyci5tZXNzYWdlIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZSh7IHN1Y2Nlc3M6IHRydWUgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFN0YXJ0IHRoZSBwb3J0Zm9saW8gd2ViIHNlcnZlci5cbiAqXG4gKiBCaW5kcyB0byAxMjcuMC4wLjEgb25seSAobG9jYWxob3N0KS4gU2VydmVzIHRoZSBwb3J0Zm9saW8gYnJvd3NlclxuICogZnJvbnRlbmQgYW5kIEFQSSByb3V0ZXMgZm9yIHJlYWRpbmcgZWxlbWVudHMuXG4gKlxuICogSWRlbXBvdGVudDogaWYgdGhlIHNlcnZlciBpcyBhbHJlYWR5IHJ1bm5pbmcsIG9wdGlvbmFsbHkgb3BlbnMgdGhlXG4gKiBicm93c2VyIHdpdGhvdXQgc3RhcnRpbmcgYSBzZWNvbmQgaW5zdGFuY2UuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBTZXJ2ZXIgY29uZmlndXJhdGlvblxuICogQHJldHVybnMgSG9va3MgZm9yIERJIHdpcmluZyAobG9nIGJyb2FkY2FzdCwgbWV0cmljcyBvblNuYXBzaG90KVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RhcnRXZWJTZXJ2ZXIob3B0aW9uczogV2ViU2VydmVyT3B0aW9ucyk6IFByb21pc2U8V2ViU2VydmVyUmVzdWx0PiB7XG4gIGNvbnN0IHBvcnQgPSBvcHRpb25zLnBvcnQgfHwgREVGQVVMVF9QT1JUO1xuICBjb25zdCByZXN1bHQ6IFdlYlNlcnZlclJlc3VsdCA9IHt9O1xuXG4gIGlmIChzZXJ2ZXJSdW5uaW5nKSB7XG4gICAgaWYgKG9wdGlvbnMub3BlbkJyb3dzZXIpIHtcbiAgICAgIG9wZW5JbkJyb3dzZXIoYGh0dHA6Ly8ke0NPTlNPTEVfSE9TVH06JHtzZXJ2ZXJQb3J0fWApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgY29uc3QgYXBwID0gZXhwcmVzcygpO1xuICByZXN1bHQuYXBwID0gYXBwO1xuICBhcHAuZGlzYWJsZSgneC1wb3dlcmVkLWJ5Jyk7XG5cbiAgLy8gU2VjdXJpdHkgaGVhZGVyc1xuICBhcHAudXNlKChfcmVxLCByZXMsIG5leHQpID0+IHtcbiAgICByZXMuc2V0SGVhZGVyKCdYLUNvbnRlbnQtVHlwZS1PcHRpb25zJywgJ25vc25pZmYnKTtcbiAgICByZXMuc2V0SGVhZGVyKCdYLUZyYW1lLU9wdGlvbnMnLCAnREVOWScpO1xuICAgIHJlcy5zZXRIZWFkZXIoJ1gtWFNTLVByb3RlY3Rpb24nLCAnMTsgbW9kZT1ibG9jaycpO1xuICAgIHJlcy5zZXRIZWFkZXIoJ1JlZmVycmVyLVBvbGljeScsICduby1yZWZlcnJlcicpO1xuICAgIHJlcy5zZXRIZWFkZXIoJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbicsIGBodHRwOi8vJHtDT05TT0xFX0hPU1R9OiR7cG9ydH1gKTtcbiAgICByZXMuc2V0SGVhZGVyKCdDb250ZW50LVNlY3VyaXR5LVBvbGljeScsIFtcbiAgICAgIFwiZGVmYXVsdC1zcmMgJ3NlbGYnXCIsXG4gICAgICBcInNjcmlwdC1zcmMgJ3NlbGYnIGNkbi5qc2RlbGl2ci5uZXQgY2RuanMuY2xvdWRmbGFyZS5jb21cIixcbiAgICAgIFwic3R5bGUtc3JjICdzZWxmJyAndW5zYWZlLWlubGluZScgY2RuanMuY2xvdWRmbGFyZS5jb20gY2RuLmpzZGVsaXZyLm5ldFwiLFxuICAgICAgXCJjb25uZWN0LXNyYyAnc2VsZicgcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbVwiLFxuICAgICAgXCJmb250LXNyYyAnc2VsZidcIixcbiAgICBdLmpvaW4oJzsgJykpO1xuICAgIG5leHQoKTtcbiAgfSk7XG5cbiAgLy8gU2V0dXAgcm91dGVzOiBhdXRvLWluc3RhbGwgRG9sbGhvdXNlTUNQIHRvIE1DUCBjbGllbnRzIChtb3VudCBCRUZPUkUgQVBJIHJvdXRlcylcbiAgLy8gQm9keSBsaW1pdCBzY29wZWQgdG8gc2V0dXAgcm91dGVzIG9ubHkg4oCUIGluZ2VzdCByb3V0ZXMgbmVlZCAxbWIgZm9yIGZvbGxvd2VyIGxvZyBmb3J3YXJkaW5nXG4gIGNvbnN0IHNldHVwSnNvblBhcnNlciA9IGV4cHJlc3MuanNvbih7IGxpbWl0OiBTRVRVUF9CT0RZX0xJTUlULCB0eXBlOiAnYXBwbGljYXRpb24vanNvbicgfSk7XG4gIGNvbnN0IHsgaW5zdGFsbEhhbmRsZXIsIG9wZW5Db25maWdIYW5kbGVyLCB2ZXJzaW9uSGFuZGxlciwgbWNwYlJlZGlyZWN0SGFuZGxlciwgZGV0ZWN0SGFuZGxlciB9ID0gY3JlYXRlU2V0dXBSb3V0ZXMoKTtcbiAgYXBwLnBvc3QoJy9hcGkvc2V0dXAvaW5zdGFsbCcsIHNldHVwSnNvblBhcnNlciwgaW5zdGFsbEhhbmRsZXIpO1xuICBhcHAucG9zdCgnL2FwaS9zZXR1cC9vcGVuLWNvbmZpZycsIHNldHVwSnNvblBhcnNlciwgb3BlbkNvbmZpZ0hhbmRsZXIpO1xuICBhcHAuZ2V0KCcvYXBpL3NldHVwL3ZlcnNpb24nLCB2ZXJzaW9uSGFuZGxlcik7XG4gIGFwcC5nZXQoJy9hcGkvc2V0dXAvbWNwYicsIG1jcGJSZWRpcmVjdEhhbmRsZXIpO1xuICBhcHAuZ2V0KCcvYXBpL3NldHVwL2RldGVjdCcsIGRldGVjdEhhbmRsZXIpO1xuICBsb2dnZXIuaW5mbygnW1dlYlVJXSBTZXR1cCByb3V0ZXMgbW91bnRlZCBhdCAvYXBpL3NldHVwJyk7XG5cbiAgLy8gQVBJIHJvdXRlcyDigJQgdXNlIE1DUC1BUUwgZ2F0ZXdheSB3aGVuIGhhbmRsZXIgaXMgYXZhaWxhYmxlIChJc3N1ZSAjNzk2KVxuICBpZiAob3B0aW9ucy5tY3BBcWxIYW5kbGVyKSB7XG4gICAgYXBwLnVzZSgnL2FwaScsIGNyZWF0ZUdhdGV3YXlBcGlSb3V0ZXMob3B0aW9ucy5tY3BBcWxIYW5kbGVyLCBvcHRpb25zLnBvcnRmb2xpb0RpcikpO1xuXG4gICAgLy8gUGVybWlzc2lvbiBldmFsdWF0aW9uIHJvdXRlcyAoUE9TVCAvZXZhbHVhdGVfcGVybWlzc2lvbiwgR0VUIC9wZXJtaXNzaW9ucy9zdGF0dXMpXG4gICAgY29uc3QgeyByZWdpc3RlclBlcm1pc3Npb25Sb3V0ZXMgfSA9IGF3YWl0IGltcG9ydCgnLi9yb3V0ZXMvcGVybWlzc2lvblJvdXRlcy5qcycpO1xuICAgIGNvbnN0IHBlcm1Sb3V0ZXIgPSAoYXdhaXQgaW1wb3J0KCdleHByZXNzJykpLlJvdXRlcigpO1xuICAgIHJlZ2lzdGVyUGVybWlzc2lvblJvdXRlcyhwZXJtUm91dGVyLCBvcHRpb25zLm1jcEFxbEhhbmRsZXIpO1xuICAgIGFwcC51c2UoJy9hcGknLCBwZXJtUm91dGVyKTtcblxuICAgIGxvZ2dlci5pbmZvKCdbV2ViVUldIEFQSSByb3V0ZXMgdXNpbmcgTUNQLUFRTCBHYXRld2F5ICsgcGVybWlzc2lvbiByb3V0ZXMnKTtcbiAgfSBlbHNlIHtcbiAgICBhcHAudXNlKCcvYXBpJywgY3JlYXRlQXBpUm91dGVzKG9wdGlvbnMucG9ydGZvbGlvRGlyKSk7XG4gICAgbG9nZ2VyLndhcm4oJ1tXZWJVSV0gQVBJIHJvdXRlcyB1c2luZyBkaXJlY3QgZmlsZXN5c3RlbSBhY2Nlc3MgKG5vIE1DUC1BUUwgaGFuZGxlciBhdmFpbGFibGUpJyk7XG4gIH1cblxuICAvLyBDb25zb2xlIHJvdXRlczogbG9ncywgbWV0cmljcywgaGVhbHRoXG4gIGxldCBsb2dSb3V0ZXM6IExvZ1JvdXRlc1Jlc3VsdCB8IHVuZGVmaW5lZDtcbiAgbGV0IG1ldHJpY3NSb3V0ZXM6IE1ldHJpY3NSb3V0ZXNSZXN1bHQgfCB1bmRlZmluZWQ7XG5cbiAgaWYgKG9wdGlvbnMubWVtb3J5U2luaykge1xuICAgIGxvZ1JvdXRlcyA9IGNyZWF0ZUxvZ1JvdXRlcyhvcHRpb25zLm1lbW9yeVNpbmspO1xuICAgIGFwcC51c2UoJy9hcGknLCBsb2dSb3V0ZXMucm91dGVyKTtcbiAgICByZXN1bHQubG9nQnJvYWRjYXN0ID0gbG9nUm91dGVzLmJyb2FkY2FzdDtcbiAgICBsb2dnZXIuaW5mbygnW1dlYlVJXSBMb2cgdmlld2VyIHJvdXRlcyBtb3VudGVkIGF0IC9hcGkvbG9ncycpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMubWV0cmljc1NpbmspIHtcbiAgICBtZXRyaWNzUm91dGVzID0gY3JlYXRlTWV0cmljc1JvdXRlcyhvcHRpb25zLm1ldHJpY3NTaW5rKTtcbiAgICBhcHAudXNlKCcvYXBpJywgbWV0cmljc1JvdXRlcy5yb3V0ZXIpO1xuICAgIHJlc3VsdC5tZXRyaWNzT25TbmFwc2hvdCA9IG1ldHJpY3NSb3V0ZXMub25TbmFwc2hvdDtcbiAgICBsb2dnZXIuaW5mbygnW1dlYlVJXSBNZXRyaWNzIHJvdXRlcyBtb3VudGVkIGF0IC9hcGkvbWV0cmljcycpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMubWVtb3J5U2luaykge1xuICAgIGNvbnN0IGhlYWx0aFJvdXRlciA9IGNyZWF0ZUhlYWx0aFJvdXRlcyh7XG4gICAgICBtZW1vcnlTaW5rOiBvcHRpb25zLm1lbW9yeVNpbmssXG4gICAgICBtZXRyaWNzU2luazogb3B0aW9ucy5tZXRyaWNzU2luayxcbiAgICAgIGxvZ0NsaWVudENvdW50OiBsb2dSb3V0ZXMgPyBsb2dSb3V0ZXMuY2xpZW50Q291bnQgOiAoKSA9PiAwLFxuICAgICAgbWV0cmljc0NsaWVudENvdW50OiBtZXRyaWNzUm91dGVzID8gbWV0cmljc1JvdXRlcy5jbGllbnRDb3VudCA6ICgpID0+IDAsXG4gICAgfSk7XG4gICAgYXBwLnVzZSgnL2FwaScsIGhlYWx0aFJvdXRlcik7XG4gIH1cblxuICAvLyBTZXJ2ZSB+Ly5kb2xsaG91c2UvcGFnZXMvIGF0IC9wYWdlcy8g4oCUIGRhc2hib2FyZHMsIGdlbmVyYXRlZCBjb250ZW50LCBzdGFjayB2aWV3c1xuICBjb25zdCBwYWdlc0RpciA9IGpvaW4oZGlybmFtZShvcHRpb25zLnBvcnRmb2xpb0RpciksICdwYWdlcycpO1xuICBta2RpcihwYWdlc0RpciwgeyByZWN1cnNpdmU6IHRydWUgfSkuY2F0Y2goZXJyID0+IHtcbiAgICBsb2dnZXIud2FybihgW1dlYlVJXSBDb3VsZCBub3QgY3JlYXRlIHBhZ2VzIGRpcmVjdG9yeTogJHsoZXJyIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICB9KTtcbiAgYXBwLnVzZSgnL3BhZ2VzJywgZXhwcmVzcy5zdGF0aWMocGFnZXNEaXIpKTtcblxuICAvKipcbiAgICogR0VUIC9hcGkvcGFnZXNcbiAgICogTGlzdHMgYXZhaWxhYmxlIEhUTUwgcGFnZXMgaW4gfi8uZG9sbGhvdXNlL3BhZ2VzLy5cbiAgICogUmV0dXJucyBwYWdlIG5hbWVzIGFuZCB0aGVpciBVUkxzIGZvciB0aGUgbWFuYWdlbWVudCBjb25zb2xlLlxuICAgKi9cbiAgYXBwLmdldCgnL2FwaS9wYWdlcycsIGFzeW5jIChfcmVxLCByZXMpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZmlsZXMgPSBhd2FpdCByZWFkZGlyKHBhZ2VzRGlyKTtcbiAgICAgIGNvbnN0IHBhZ2VzID0gZmlsZXNcbiAgICAgICAgLmZpbHRlcihmID0+ICFmLnN0YXJ0c1dpdGgoJy4nKSAmJiBBTExPV0VEX1BBR0VfRVhURU5TSU9OUy5oYXMoZXh0bmFtZShmKSkpXG4gICAgICAgIC5tYXAoZiA9PiAoeyBuYW1lOiBmLCB1cmw6IGAvcGFnZXMvJHtmfWAgfSkpO1xuICAgICAgcmVzLmpzb24oeyBwYWdlcywgZGlyZWN0b3J5OiBwYWdlc0RpciB9KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJlcy5qc29uKHsgcGFnZXM6IFtdLCBkaXJlY3Rvcnk6IHBhZ2VzRGlyIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gQWRkaXRpb25hbCByb3V0ZXJzIChlLmcuLCB1bmlmaWVkIGNvbnNvbGUgaW5nZXN0IHJvdXRlcykg4oCUIG11c3QgbW91bnQgYmVmb3JlIFNQQSBmYWxsYmFja1xuICBvcHRpb25zLmFkZGl0aW9uYWxSb3V0ZXJzPy5mb3JFYWNoKHJvdXRlciA9PiBhcHAudXNlKHJvdXRlcikpO1xuXG4gIC8vIFN0YXRpYyBmcm9udGVuZCBmaWxlc1xuICBjb25zdCBwdWJsaWNEaXIgPSBqb2luKF9fZGlybmFtZSwgJ3B1YmxpYycpO1xuICBhcHAudXNlKGV4cHJlc3Muc3RhdGljKHB1YmxpY0RpcikpO1xuXG4gIC8vIFNQQSBmYWxsYmFja1xuICBhcHAuZ2V0KCcveypwYXRofScsIChyZXEsIHJlcykgPT4ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gcmVxLnBhdGgubm9ybWFsaXplKCdORkMnKTtcbiAgICBpZiAobm9ybWFsaXplZFBhdGguc3RhcnRzV2l0aCgnL2FwaS8nKSkge1xuICAgICAgcmVzLnN0YXR1cyg0MDQpLmpzb24oeyBlcnJvcjogYEFQSSByb3V0ZSBub3QgZm91bmQ6ICR7bm9ybWFsaXplZFBhdGh9YCB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG5vcm1hbGl6ZWRQYXRoLnN0YXJ0c1dpdGgoJy9wYWdlcy8nKSkge1xuICAgICAgcmVzLnN0YXR1cyg0MDQpLmpzb24oeyBlcnJvcjogYFBhZ2Ugbm90IGZvdW5kOiAke25vcm1hbGl6ZWRQYXRofWAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJlcy5zZW5kRmlsZShqb2luKHB1YmxpY0RpciwgJ2luZGV4Lmh0bWwnKSk7XG4gIH0pO1xuXG4gIC8vIEdsb2JhbCBlcnJvciBoYW5kbGVyIOKAlCBjYXRjaCBFeHByZXNzIGVycm9ycyBhbmQgcm91dGUgdG8gbG9nZ2VyIGluc3RlYWQgb2YgdGVybWluYWwuXG4gIC8vIFdpdGhvdXQgdGhpcywgRXhwcmVzcyBkdW1wcyBzdGFjayB0cmFjZXMgdG8gc3RkZXJyICh2aXNpYmxlIGluIC0td2ViIHRlcm1pbmFsKS5cbiAgLy8gQWxsIGVycm9ycyBzdGlsbCBhcHBlYXIgaW4gdGhlIG1hbmFnZW1lbnQgY29uc29sZSdzIExvZ3MgdGFiIHZpYSBNZW1vcnlMb2dTaW5rLlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGFwcC51c2UoKGVycjogRXJyb3IsIF9yZXE6IGltcG9ydCgnZXhwcmVzcycpLlJlcXVlc3QsIHJlczogaW1wb3J0KCdleHByZXNzJykuUmVzcG9uc2UsIF9uZXh0OiBpbXBvcnQoJ2V4cHJlc3MnKS5OZXh0RnVuY3Rpb24pID0+IHtcbiAgICBjb25zdCBzdGF0dXMgPSAoZXJyIGFzIGFueSkuc3RhdHVzIHx8IChlcnIgYXMgYW55KS5zdGF0dXNDb2RlIHx8IDUwMDtcbiAgICBsb2dnZXIud2FybihgW1dlYlVJXSAke2Vyci5uYW1lfTogJHtlcnIubWVzc2FnZX1gKTtcbiAgICBpZiAoIXJlcy5oZWFkZXJzU2VudCkge1xuICAgICAgcmVzLnN0YXR1cyhzdGF0dXMpLmpzb24oeyBlcnJvcjogZXJyLm1lc3NhZ2UgfSk7XG4gICAgfVxuICB9KTtcblxuICAvLyBCaW5kIHRvIGxvY2FsaG9zdCBvbmx5IOKAlCBoYW5kbGUgcG9ydCBjb25mbGljdHMgZ3JhY2VmdWxseVxuICAvLyBOT1RFOiBVc2Ugc3RkZXJyIGZvciB0ZXJtaW5hbCBvdXRwdXQsIG5vdCBzdGRvdXQuIEluIE1DUCBzdGRpbyBtb2RlLCBzdGRvdXRcbiAgLy8gaXMgcmVzZXJ2ZWQgZm9yIEpTT04tUlBDIG1lc3NhZ2VzIOKAlCBhbnkgbm9uLUpTT04gb3V0cHV0IGNvcnJ1cHRzIHRoZSBwcm90b2NvbC5cbiAgLy8gc3RkZXJyIGlzIHNhZmUgZm9yIGh1bWFuLXJlYWRhYmxlIG1lc3NhZ2VzIGluIGJvdGggTUNQIGFuZCBzdGFuZGFsb25lIG1vZGVzLlxuICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IGh0dHBTZXJ2ZXIgPSBhcHAubGlzdGVuKHBvcnQsICcxMjcuMC4wLjEnLCAoKSA9PiB7XG4gICAgICBzZXJ2ZXJSdW5uaW5nID0gdHJ1ZTtcbiAgICAgIHNlcnZlclBvcnQgPSBwb3J0O1xuICAgICAgY29uc3QgdXJsID0gYGh0dHA6Ly8ke0NPTlNPTEVfSE9TVH06JHtwb3J0fWA7XG4gICAgICBjb25zdCBmYWxsYmFja1VybCA9IGBodHRwOi8vMTI3LjAuMC4xOiR7cG9ydH1gO1xuICAgICAgbG9nZ2VyLmluZm8oYFtXZWJVSV0gTWFuYWdlbWVudCBjb25zb2xlIHJ1bm5pbmcgYXQgJHt1cmx9YCk7XG4gICAgICBjb25zb2xlLmVycm9yKGBcXG4gIERvbGxob3VzZU1DUCBNYW5hZ2VtZW50IENvbnNvbGVcXG4gICR7dXJsfVxcbiAgJHtmYWxsYmFja1VybH0gKGZhbGxiYWNrKVxcbmApO1xuXG4gICAgICBpZiAob3B0aW9ucy5vcGVuQnJvd3Nlcikge1xuICAgICAgICBvcGVuSW5Ccm93c2VyKHVybCk7XG4gICAgICB9XG4gICAgICByZXNvbHZlKCk7XG4gICAgfSk7XG4gICAgaHR0cFNlcnZlci5vbignZXJyb3InLCAoZXJyOiBOb2RlSlMuRXJybm9FeGNlcHRpb24pID0+IHtcbiAgICAgIGlmIChlcnIuY29kZSA9PT0gJ0VBRERSSU5VU0UnKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGBodHRwOi8vJHtDT05TT0xFX0hPU1R9OiR7cG9ydH1gO1xuICAgICAgICBsb2dnZXIuaW5mbyhgW1dlYlVJXSBQb3J0ICR7cG9ydH0gYWxyZWFkeSBpbiB1c2Ug4oCUIG9wZW5pbmcgZXhpc3RpbmcgY29uc29sZWApO1xuICAgICAgICBjb25zb2xlLmVycm9yKGBcXG4gIERvbGxob3VzZU1DUCBNYW5hZ2VtZW50IENvbnNvbGUgKGV4aXN0aW5nIGluc3RhbmNlKVxcbiAgJHt1cmx9XFxuYCk7XG4gICAgICAgIGlmIChvcHRpb25zLm9wZW5Ccm93c2VyKSB7XG4gICAgICAgICAgb3BlbkluQnJvd3Nlcih1cmwpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIuZXJyb3IoYFtXZWJVSV0gRmFpbGVkIHRvIGJpbmQgcG9ydCAke3BvcnR9OiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgICAgcmVzb2x2ZSgpOyAvLyBXZWIgY29uc29sZSBpcyBvcHRpb25hbCDigJQgZG9uJ3QgYmxvY2sgc3RhcnR1cFxuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIE9wZW4gdGhlIHBvcnRmb2xpbyBicm93c2VyIGZyb20gd2l0aGluIHRoZSBNQ1Agc2VydmVyIHByb2Nlc3MuXG4gKlxuICogU3RhcnRzIHRoZSB3ZWIgc2VydmVyIGlmIG5vdCBhbHJlYWR5IHJ1bm5pbmcsIHRoZW4gb3BlbnMgdGhlIHN5c3RlbVxuICogYnJvd3NlciB0byB0aGUgcG9ydGZvbGlvIFVJLiBSZXR1cm5zIGEgcmVzdWx0IG9iamVjdCBpbmRpY2F0aW5nXG4gKiB3aGV0aGVyIHRoZSBzZXJ2ZXIgc3RhcnRlZCBhbmQgdGhlIGJyb3dzZXIgb3BlbmVkIHN1Y2Nlc3NmdWxseS5cbiAqXG4gKiBDYWxsZWQgYnkgdGhlIGBvcGVuX3BvcnRmb2xpb19icm93c2VyYCBNQ1AtQVFMIG9wZXJhdGlvbiAoSXNzdWUgIzc3NCkuXG4gKlxuICogQHBhcmFtIHBvcnRmb2xpb0RpciAtIFBhdGggdG8gdGhlIHBvcnRmb2xpbyBkaXJlY3RvcnkgKGUuZy4sIH4vLmRvbGxob3VzZS9wb3J0Zm9saW8pXG4gKiBAcGFyYW0gcG9ydCAtIFBvcnQgdG8gYmluZCB0byAoZGVmYXVsdDogMzkzOSlcbiAqIEByZXR1cm5zIFJlc3VsdCB3aXRoIFVSTCwgc2VydmVyIHN0YXR1cywgYW5kIGJyb3dzZXIgb3BlbiBzdGF0dXNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5Qb3J0Zm9saW9Ccm93c2VyKHBvcnRmb2xpb0Rpcjogc3RyaW5nLCBwb3J0PzogbnVtYmVyLCBtY3BBcWxIYW5kbGVyPzogTUNQQVFMSGFuZGxlciwgdGFiPzogc3RyaW5nKTogUHJvbWlzZTxCcm93c2VyT3BlblJlc3VsdD4ge1xuICBjb25zdCB0YXJnZXRQb3J0ID0gcG9ydCB8fCBERUZBVUxUX1BPUlQ7XG4gIGNvbnN0IGJhc2VVcmwgPSBgaHR0cDovLyR7Q09OU09MRV9IT1NUfToke3RhcmdldFBvcnR9YDtcbiAgY29uc3QgdXJsID0gdGFiID8gYCR7YmFzZVVybH0vIyR7dGFifWAgOiBiYXNlVXJsO1xuICBjb25zdCBhbHJlYWR5UnVubmluZyA9IHNlcnZlclJ1bm5pbmc7XG5cbiAgaWYgKCFzZXJ2ZXJSdW5uaW5nKSB7XG4gICAgYXdhaXQgc3RhcnRXZWJTZXJ2ZXIoe1xuICAgICAgcG9ydGZvbGlvRGlyLFxuICAgICAgcG9ydDogdGFyZ2V0UG9ydCxcbiAgICAgIG9wZW5Ccm93c2VyOiBmYWxzZSwgLy8gV2UnbGwgb3BlbiBtYW51YWxseSBiZWxvdyB0byBjYXB0dXJlIHRoZSByZXN1bHRcbiAgICAgIG1jcEFxbEhhbmRsZXIsXG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBicm93c2VyUmVzdWx0ID0gYXdhaXQgb3BlbkluQnJvd3Nlcih1cmwpO1xuXG4gIHJldHVybiB7XG4gICAgdXJsLFxuICAgIGFscmVhZHlSdW5uaW5nLFxuICAgIGJyb3dzZXJPcGVuZWQ6IGJyb3dzZXJSZXN1bHQuc3VjY2VzcyxcbiAgICAuLi4oYnJvd3NlclJlc3VsdC5lcnJvciA/IHsgd2FybmluZzogYEJyb3dzZXIgY291bGQgbm90IGJlIG9wZW5lZCBhdXRvbWF0aWNhbGx5OiAke2Jyb3dzZXJSZXN1bHQuZXJyb3J9LiBPcGVuICR7dXJsfSBtYW51YWxseS5gIH0gOiB7fSksXG4gIH07XG59XG4iXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dollhousemcp/mcp-server",
3
- "version": "2.0.8",
3
+ "version": "2.0.9",
4
4
  "description": "DollhouseMCP - A Model Context Protocol (MCP) server that enables dynamic AI persona management from markdown files, allowing Claude and other compatible AI assistants to activate and switch between different behavioral personas.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -201,7 +201,7 @@
201
201
  "packages/safety"
202
202
  ],
203
203
  "engines": {
204
- "node": ">=20.0.0",
204
+ "node": ">=18.0.0",
205
205
  "npm": ">=10.0.0"
206
206
  },
207
207
  "overrides": {