@dbx-tools/core 0.6.185 → 0.6.188

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
@@ -41,7 +41,8 @@ const executable = await bin.ensure("tool", releaseUrl, {
41
41
  ```
42
42
 
43
43
  `bin.ensure()` installs to `$HOME/.<name>/bin/<name>` and returns its `root`,
44
- `binDir`, and executable `path`. An existing executable returns immediately, so
44
+ `binDir`, and executable `path`. Pass `destination` to supply those exact paths
45
+ for a different layout. An existing executable returns immediately, so
45
46
  a URL resolver is only called when installation is necessary. Concurrent
46
47
  callers use a file lock with a check-lock-check-load sequence, preventing
47
48
  duplicate downloads across processes and worker threads. Direct downloads
package/index.ts CHANGED
@@ -3,7 +3,7 @@
3
3
  // Hand edits are overwritten on the next watch; this file is read-only.
4
4
 
5
5
  export const PACKAGE_IDENTIFIER = "@dbx-tools/core";
6
- export const PACKAGE_VERSION = "0.6.185";
6
+ export const PACKAGE_VERSION = "0.6.188";
7
7
  export * as bin from "./src/bin.ts";
8
8
  export * as brand from "./src/brand.ts";
9
9
  export * as bundle from "./src/bundle.ts";
package/lib/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export declare const PACKAGE_IDENTIFIER = "@dbx-tools/core";
2
- export declare const PACKAGE_VERSION = "0.6.185";
2
+ export declare const PACKAGE_VERSION = "0.6.188";
3
3
  export * as bin from "./src/bin.ts";
4
4
  export * as brand from "./src/brand.ts";
5
5
  export * as bundle from "./src/bundle.ts";
package/lib/index.js CHANGED
@@ -2,7 +2,7 @@
2
2
  // Regenerated from the exporting modules in ./src.
3
3
  // Hand edits are overwritten on the next watch; this file is read-only.
4
4
  export const PACKAGE_IDENTIFIER = "@dbx-tools/core";
5
- export const PACKAGE_VERSION = "0.6.185";
5
+ export const PACKAGE_VERSION = "0.6.188";
6
6
  export * as bin from "./src/bin.js";
7
7
  export * as brand from "./src/brand.js";
8
8
  export * as bundle from "./src/bundle.js";
@@ -15,4 +15,4 @@ export * as project from "./src/project.js";
15
15
  export { BrandContextSchema, defaultBrandContext, parseBrandContext, brandContextJsonSchema, brandContextPrompt } from "./src/brand.js";
16
16
  export { MAX_TCP_PORT, ENV_ONLY, valueSchema, bundleResourceSchema, bundleEnvEntrySchema, bundleAppSchema, appEnvEntrySchema, appSchema } from "./src/config.js";
17
17
  export { COMMAND_NOT_FOUND_EXIT_CODE } from "./src/exec.js";
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxpQkFBaUIsQ0FBQztBQUNwRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxHQUFHLE1BQU0sY0FBYyxDQUFDO0FBQ3BDLE9BQU8sS0FBSyxLQUFLLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxJQUFJLE1BQU0sZUFBZSxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxJQUFJLE1BQU0sZUFBZSxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxRQUFRLE1BQU0sb0JBQW9CLENBQUM7QUFDL0MsT0FBTyxLQUFLLFdBQVcsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBRTVDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSxzQkFBc0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXhJLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxvQkFBb0IsRUFBRSxvQkFBb0IsRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFakssT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gR0VORVJBVEVEIGJ5IHByb2plbiB3YXRjaCAtIERPIE5PVCBFRElULlxuLy8gUmVnZW5lcmF0ZWQgZnJvbSB0aGUgZXhwb3J0aW5nIG1vZHVsZXMgaW4gLi9zcmMuXG4vLyBIYW5kIGVkaXRzIGFyZSBvdmVyd3JpdHRlbiBvbiB0aGUgbmV4dCB3YXRjaDsgdGhpcyBmaWxlIGlzIHJlYWQtb25seS5cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfSURFTlRJRklFUiA9IFwiQGRieC10b29scy9jb3JlXCI7XG5leHBvcnQgY29uc3QgUEFDS0FHRV9WRVJTSU9OID0gXCIwLjYuMTg1XCI7XG5leHBvcnQgKiBhcyBiaW4gZnJvbSBcIi4vc3JjL2Jpbi50c1wiO1xuZXhwb3J0ICogYXMgYnJhbmQgZnJvbSBcIi4vc3JjL2JyYW5kLnRzXCI7XG5leHBvcnQgKiBhcyBidW5kbGUgZnJvbSBcIi4vc3JjL2J1bmRsZS50c1wiO1xuZXhwb3J0ICogYXMgY29uZmlnIGZyb20gXCIuL3NyYy9jb25maWcudHNcIjtcbmV4cG9ydCAqIGFzIGV4ZWMgZnJvbSBcIi4vc3JjL2V4ZWMudHNcIjtcbmV4cG9ydCAqIGFzIGZpbGUgZnJvbSBcIi4vc3JjL2ZpbGUudHNcIjtcbmV4cG9ydCAqIGFzIGZpbGVMb2NrIGZyb20gXCIuL3NyYy9maWxlLWxvY2sudHNcIjtcbmV4cG9ydCAqIGFzIHByb2Nlc3NMb2NrIGZyb20gXCIuL3NyYy9wcm9jZXNzLWxvY2sudHNcIjtcbmV4cG9ydCAqIGFzIHByb2plY3QgZnJvbSBcIi4vc3JjL3Byb2plY3QudHNcIjtcbmV4cG9ydCB0eXBlIHsgQmluQ29udGV4dCwgQmluU2VsZWN0aW9uQ29udGV4dCwgQmluU2VsZWN0b3IsIEJpblZlcnNpb25PdXRwdXQsIEJpblZlcnNpb25QYXJzZXIsIEJpbk9wdGlvbnMsIEJpblVybCB9IGZyb20gXCIuL3NyYy9iaW4udHNcIjtcbmV4cG9ydCB7IEJyYW5kQ29udGV4dFNjaGVtYSwgZGVmYXVsdEJyYW5kQ29udGV4dCwgcGFyc2VCcmFuZENvbnRleHQsIGJyYW5kQ29udGV4dEpzb25TY2hlbWEsIGJyYW5kQ29udGV4dFByb21wdCB9IGZyb20gXCIuL3NyYy9icmFuZC50c1wiO1xuZXhwb3J0IHR5cGUgeyBCcmFuZENvbnRleHQsIEJyYW5kQ29udGV4dElucHV0IH0gZnJvbSBcIi4vc3JjL2JyYW5kLnRzXCI7XG5leHBvcnQgeyBNQVhfVENQX1BPUlQsIEVOVl9PTkxZLCB2YWx1ZVNjaGVtYSwgYnVuZGxlUmVzb3VyY2VTY2hlbWEsIGJ1bmRsZUVudkVudHJ5U2NoZW1hLCBidW5kbGVBcHBTY2hlbWEsIGFwcEVudkVudHJ5U2NoZW1hLCBhcHBTY2hlbWEgfSBmcm9tIFwiLi9zcmMvY29uZmlnLnRzXCI7XG5leHBvcnQgdHlwZSB7IENvbmZpZ01hcFZhbHVlLCBDb25maWdEYXRhLCBDb25maWdTb3VyY2UsIENvbmZpZ09wdGlvbnMsIENvbmZpZ0ZpbGUgfSBmcm9tIFwiLi9zcmMvY29uZmlnLnRzXCI7XG5leHBvcnQgeyBDT01NQU5EX05PVF9GT1VORF9FWElUX0NPREUgfSBmcm9tIFwiLi9zcmMvZXhlYy50c1wiO1xuZXhwb3J0IHR5cGUgeyBFeGVjU3RkaW8sIExpbmVIYW5kbGVyLCBTdGRpb09wdGlvbiwgRXhlY1Jlc3VsdCwgQ2hpbGRQcm9jZXNzUmVzdWx0LCBFeGVjT3B0aW9ucywgU3luY0V4ZWNTdGRpbywgU3luY0V4ZWNPcHRpb25zLCBTcGF3bkFyZ3MgfSBmcm9tIFwiLi9zcmMvZXhlYy50c1wiO1xuZXhwb3J0IHR5cGUgeyBGaWxlTG9ja0JhY2tlbmQsIEZpbGVMb2NrQWNxdWlzaXRpb24sIEZpbGVMb2NrT3B0aW9ucyB9IGZyb20gXCIuL3NyYy9maWxlLWxvY2sudHNcIjtcbmV4cG9ydCB0eXBlIHsgUHJvamVjdENvbnRleHQgfSBmcm9tIFwiLi9zcmMvcHJvamVjdC50c1wiO1xuIl19
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxpQkFBaUIsQ0FBQztBQUNwRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxHQUFHLE1BQU0sY0FBYyxDQUFDO0FBQ3BDLE9BQU8sS0FBSyxLQUFLLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxJQUFJLE1BQU0sZUFBZSxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxJQUFJLE1BQU0sZUFBZSxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxRQUFRLE1BQU0sb0JBQW9CLENBQUM7QUFDL0MsT0FBTyxLQUFLLFdBQVcsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBRTVDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSxzQkFBc0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXhJLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxvQkFBb0IsRUFBRSxvQkFBb0IsRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFakssT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gR0VORVJBVEVEIGJ5IHByb2plbiB3YXRjaCAtIERPIE5PVCBFRElULlxuLy8gUmVnZW5lcmF0ZWQgZnJvbSB0aGUgZXhwb3J0aW5nIG1vZHVsZXMgaW4gLi9zcmMuXG4vLyBIYW5kIGVkaXRzIGFyZSBvdmVyd3JpdHRlbiBvbiB0aGUgbmV4dCB3YXRjaDsgdGhpcyBmaWxlIGlzIHJlYWQtb25seS5cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfSURFTlRJRklFUiA9IFwiQGRieC10b29scy9jb3JlXCI7XG5leHBvcnQgY29uc3QgUEFDS0FHRV9WRVJTSU9OID0gXCIwLjYuMTg4XCI7XG5leHBvcnQgKiBhcyBiaW4gZnJvbSBcIi4vc3JjL2Jpbi50c1wiO1xuZXhwb3J0ICogYXMgYnJhbmQgZnJvbSBcIi4vc3JjL2JyYW5kLnRzXCI7XG5leHBvcnQgKiBhcyBidW5kbGUgZnJvbSBcIi4vc3JjL2J1bmRsZS50c1wiO1xuZXhwb3J0ICogYXMgY29uZmlnIGZyb20gXCIuL3NyYy9jb25maWcudHNcIjtcbmV4cG9ydCAqIGFzIGV4ZWMgZnJvbSBcIi4vc3JjL2V4ZWMudHNcIjtcbmV4cG9ydCAqIGFzIGZpbGUgZnJvbSBcIi4vc3JjL2ZpbGUudHNcIjtcbmV4cG9ydCAqIGFzIGZpbGVMb2NrIGZyb20gXCIuL3NyYy9maWxlLWxvY2sudHNcIjtcbmV4cG9ydCAqIGFzIHByb2Nlc3NMb2NrIGZyb20gXCIuL3NyYy9wcm9jZXNzLWxvY2sudHNcIjtcbmV4cG9ydCAqIGFzIHByb2plY3QgZnJvbSBcIi4vc3JjL3Byb2plY3QudHNcIjtcbmV4cG9ydCB0eXBlIHsgQmluQ29udGV4dCwgQmluU2VsZWN0aW9uQ29udGV4dCwgQmluU2VsZWN0b3IsIEJpblZlcnNpb25PdXRwdXQsIEJpblZlcnNpb25QYXJzZXIsIEJpbk9wdGlvbnMsIEJpblVybCB9IGZyb20gXCIuL3NyYy9iaW4udHNcIjtcbmV4cG9ydCB7IEJyYW5kQ29udGV4dFNjaGVtYSwgZGVmYXVsdEJyYW5kQ29udGV4dCwgcGFyc2VCcmFuZENvbnRleHQsIGJyYW5kQ29udGV4dEpzb25TY2hlbWEsIGJyYW5kQ29udGV4dFByb21wdCB9IGZyb20gXCIuL3NyYy9icmFuZC50c1wiO1xuZXhwb3J0IHR5cGUgeyBCcmFuZENvbnRleHQsIEJyYW5kQ29udGV4dElucHV0IH0gZnJvbSBcIi4vc3JjL2JyYW5kLnRzXCI7XG5leHBvcnQgeyBNQVhfVENQX1BPUlQsIEVOVl9PTkxZLCB2YWx1ZVNjaGVtYSwgYnVuZGxlUmVzb3VyY2VTY2hlbWEsIGJ1bmRsZUVudkVudHJ5U2NoZW1hLCBidW5kbGVBcHBTY2hlbWEsIGFwcEVudkVudHJ5U2NoZW1hLCBhcHBTY2hlbWEgfSBmcm9tIFwiLi9zcmMvY29uZmlnLnRzXCI7XG5leHBvcnQgdHlwZSB7IENvbmZpZ01hcFZhbHVlLCBDb25maWdEYXRhLCBDb25maWdTb3VyY2UsIENvbmZpZ09wdGlvbnMsIENvbmZpZ0ZpbGUgfSBmcm9tIFwiLi9zcmMvY29uZmlnLnRzXCI7XG5leHBvcnQgeyBDT01NQU5EX05PVF9GT1VORF9FWElUX0NPREUgfSBmcm9tIFwiLi9zcmMvZXhlYy50c1wiO1xuZXhwb3J0IHR5cGUgeyBFeGVjU3RkaW8sIExpbmVIYW5kbGVyLCBTdGRpb09wdGlvbiwgRXhlY1Jlc3VsdCwgQ2hpbGRQcm9jZXNzUmVzdWx0LCBFeGVjT3B0aW9ucywgU3luY0V4ZWNTdGRpbywgU3luY0V4ZWNPcHRpb25zLCBTcGF3bkFyZ3MgfSBmcm9tIFwiLi9zcmMvZXhlYy50c1wiO1xuZXhwb3J0IHR5cGUgeyBGaWxlTG9ja0JhY2tlbmQsIEZpbGVMb2NrQWNxdWlzaXRpb24sIEZpbGVMb2NrT3B0aW9ucyB9IGZyb20gXCIuL3NyYy9maWxlLWxvY2sudHNcIjtcbmV4cG9ydCB0eXBlIHsgUHJvamVjdENvbnRleHQgfSBmcm9tIFwiLi9zcmMvcHJvamVjdC50c1wiO1xuIl19
package/lib/src/bin.d.ts CHANGED
@@ -27,6 +27,8 @@ export interface BinOptions {
27
27
  autoUnpackage?: boolean;
28
28
  selector?: BinSelector;
29
29
  homeDir?: string;
30
+ /** Exact installation paths. Omission keeps `$HOME/.<name>/bin/<name>`. */
31
+ destination?: BinContext;
30
32
  /** Minimum accepted numeric version, with one to three components. */
31
33
  minVersion?: string;
32
34
  /** Argument passed to the binary for version detection. Defaults to `--version`. */
package/lib/src/bin.js CHANGED
@@ -15,10 +15,12 @@ import { x as extractTar } from "tar";
15
15
  import { withFileLock } from "./file-lock.js";
16
16
  const execFileAsync = promisify(execFile);
17
17
  const logger = log.logger("core:bin");
18
- function context(name, homeDir) {
18
+ function context(name, homeDir, destination) {
19
19
  if (!name || basename(name) !== name || name === "." || name === "..") {
20
20
  throw new TypeError(`invalid binary name: ${name}`);
21
21
  }
22
+ if (destination)
23
+ return destination;
22
24
  const root = join(homeDir, `.${name}`);
23
25
  const binDir = join(root, "bin");
24
26
  return { root, binDir, path: join(binDir, name) };
@@ -226,7 +228,7 @@ export async function ensure(name, url, options = {}) {
226
228
  if (options.minVersion && !numericVersion(options.minVersion, true)) {
227
229
  throw new TypeError(`invalid minimum binary version: ${options.minVersion}`);
228
230
  }
229
- const destination = context(name, options.homeDir ?? homedir());
231
+ const destination = context(name, options.homeDir ?? homedir(), options.destination);
230
232
  if (await isValidBin(destination.path, options)) {
231
233
  logger.debug("using installed binary", { name, path: destination.path });
232
234
  return destination;
@@ -279,4 +281,4 @@ export async function ensure(name, url, options = {}) {
279
281
  }
280
282
  });
281
283
  }
282
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmluLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDekMsT0FBTyxFQUNMLEtBQUssRUFDTCxRQUFRLEVBQ1IsS0FBSyxFQUNMLE9BQU8sRUFDUCxPQUFPLEVBQ1AsTUFBTSxFQUNOLEVBQUUsRUFDRixJQUFJLEVBQ0osU0FBUyxHQUNWLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDMUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUV0QyxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3BELE9BQU8sVUFBVSxNQUFNLGFBQWEsQ0FBQztBQUNyQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLFVBQVUsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUV0QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUMsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzFDLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7QUF5RHRDLFNBQVMsT0FBTyxDQUFDLElBQVksRUFBRSxPQUFlO0lBQzVDLElBQUksQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssR0FBRyxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUN0RSxNQUFNLElBQUks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LEVBQUUsSUFBSSxJQUFJLElBQUksVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzlELE1BQU0sUUFBUSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUNqQyxNQUFNLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDM0IsTUFBTSxNQUFNLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2QyxNQUFNLEdBQUcsU0FBUyxDQUFDO1lBQ25CLElBQUksQ0FBQyxDQUFDLE1BQU0sVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNuRCxNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNuRixDQUFDO1lBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtnQkFDOUIsSUFBSTtnQkFDSixJQUFJO2dCQUNKLEVBQUUsRUFBRSxXQUFXLENBQUMsSUFBSTthQUNyQixDQUFDLENBQUM7WUFDSCxPQUFPLFdBQVcsQ0FBQztRQUNyQixDQUFDO2dCQUFTLENBQUM7WUFDVCxJQUFJLE1BQU07Z0JBQUUsTUFBTSxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDOUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNuRCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBJbnN0YWxsIGFuZCByZXVzZSBleGVjdXRhYmxlIGJpbmFyaWVzIHVuZGVyIGEgcGVyLXRvb2wgaG9tZSBkaXJlY3RvcnkuXG4gKlxuICogQG1vZHVsZVxuICovXG5pbXBvcnQgeyBleGVjRmlsZSB9IGZyb20gXCJub2RlOmNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IHJhbmRvbVVVSUQgfSBmcm9tIFwibm9kZTpjcnlwdG9cIjtcbmltcG9ydCB7XG4gIGNobW9kLFxuICBjb3B5RmlsZSxcbiAgbWtkaXIsXG4gIG1rZHRlbXAsXG4gIHJlYWRkaXIsXG4gIHJlbmFtZSxcbiAgcm0sXG4gIHN0YXQsXG4gIHdyaXRlRmlsZSxcbn0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IGhvbWVkaXIsIHRtcGRpciB9IGZyb20gXCJub2RlOm9zXCI7XG5pbXBvcnQgeyBiYXNlbmFtZSwgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IHByb21pc2lmeSB9IGZyb20gXCJub2RlOnV0aWxcIjtcblxuaW1wb3J0IHsgZXJyb3IsIGxvZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgZXh0cmFjdFppcCBmcm9tIFwiZXh0cmFjdC16aXBcIjtcbmltcG9ydCB7IHggYXMgZXh0cmFjdFRhciB9IGZyb20gXCJ0YXJcIjtcblxuaW1wb3J0IHsgd2l0aEZpbGVMb2NrIH0gZnJvbSBcIi4vZmlsZS1sb2NrLnRzXCI7XG5cbmNvbnN0IGV4ZWNGaWxlQXN5bmMgPSBwcm9taXNpZnkoZXhlY0ZpbGUpO1xuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcImNvcmU6YmluXCIpO1xuXG5pbnRlcmZhY2UgUGFyc2VkVmVyc2lvbiB7XG4gIHJhdzogc3RyaW5nO1xuICBwYXJ0czogbnVtYmVyW107XG59XG5cbmludGVyZmFjZSBCaW5BY2Nlc3NDb250ZXh0IHtcbiAgZmlsZTogYm9vbGVhbjtcbiAgZXhlY3V0YWJsZTogYm9vbGVhbjtcbn1cblxuLyoqIFN0YWJsZSBwYXRocyBmb3IgYW4gaW5zdGFsbGVkIGJpbmFyeS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmluQ29udGV4dCB7XG4gIHJvb3Q6IHN0cmluZztcbiAgYmluRGlyOiBzdHJpbmc7XG4gIHBhdGg6IHN0cmluZztcbn1cblxuLyoqIFRlbXBvcmFyeSBkb3dubG9hZCBhbmQgZXh0cmFjdGlvbiBwYXRocyBzdXBwbGllZCB0byBhIGN1c3RvbSBzZWxlY3Rvci4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmluU2VsZWN0aW9uQ29udGV4dCB7XG4gIGRlc3RpbmF0aW9uOiBCaW5Db250ZXh0O1xuICBkb3dubG9hZFBhdGg6IHN0cmluZztcbiAgc291cmNlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogU2VsZWN0IHRoZSBleGVjdXRhYmxlIGZyb20gYSBkb3dubG9hZCBvciB1bnBhY2tlZCBhcmNoaXZlLiBBIHNlbGVjdG9yIG1heVxuICogYWxzbyBwcmVwYXJlIHRoZSBmaWxlLCBzdWNoIGFzIGFwcGx5aW5nIGl0cyBleGVjdXRhYmxlIG1vZGUuXG4gKi9cbmV4cG9ydCB0eXBlIEJpblNlbGVjdG9yID0gKGNvbnRleHQ6IEJpblNlbGVjdGlvbkNvbnRleHQpID0+IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPjtcblxuLyoqIENhcHR1cmVkIG91dHB1dCBwYXNzZWQgdG8gYSBjdXN0b20gYmluYXJ5IHZlcnNpb24gcGFyc2VyLiAqL1xuZXhwb3J0IGludGVyZmFjZSBCaW5WZXJzaW9uT3V0cHV0IHtcbiAgc3Rkb3V0OiBzdHJpbmc7XG4gIHN0ZGVycjogc3RyaW5nO1xufVxuXG4vKiogRXh0cmFjdCBhIHZlcnNpb24gc3RyaW5nIGZyb20gYSBzdWNjZXNzZnVsIHZlcnNpb24tY29tbWFuZCByZXN1bHQuICovXG5leHBvcnQgdHlwZSBCaW5WZXJzaW9uUGFyc2VyID0gKG91dHB1dDogQmluVmVyc2lvbk91dHB1dCkgPT4gc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4vKiogT3B0aW9ucyBmb3Ige0BsaW5rIGVuc3VyZX0uICovXG5leHBvcnQgaW50ZXJmYWNlIEJpbk9wdGlvbnMge1xuICBhdXRvVW5wYWNrYWdlPzogYm9vbGVhbjtcbiAgc2VsZWN0b3I/OiBCaW5TZWxlY3RvcjtcbiAgaG9tZURpcj86IHN0cmluZztcbiAgLyoqIE1pbmltdW0gYWNjZXB0ZWQgbnVtZXJpYyB2ZXJzaW9uLCB3aXRoIG9uZSB0byB0aHJlZSBjb21wb25lbnRzLiAqL1xuICBtaW5WZXJzaW9uPzogc3RyaW5nO1xuICAvKiogQXJndW1lbnQgcGFzc2VkIHRvIHRoZSBiaW5hcnkgZm9yIHZlcnNpb24gZGV0ZWN0aW9uLiBEZWZhdWx0cyB0byBgLS12ZXJzaW9uYC4gKi9cbiAgdmVyc2lvbkFyZ3VtZW50Pzogc3RyaW5nO1xuICAvKiogVmVyc2lvbiBvdXRwdXQgcGFyc2VyLiBEZWZhdWx0cyB0byB7QGxpbmsgcGFyc2VWZXJzaW9ufS4gKi9cbiAgdmVyc2lvblBhcnNlcj86IEJpblZlcnNpb25QYXJzZXI7XG59XG5cbi8qKiBBIFVSTCByZXNvbHZlZCBvbmx5IHdoZW4gdGhlIGV4ZWN1dGFibGUgaXMgbm90IGFscmVhZHkgaW5zdGFsbGVkLiAqL1xuZXhwb3J0IHR5cGUgQmluVXJsID0gc3RyaW5nIHwgKCgpID0+IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPik7XG5cbmZ1bmN0aW9uIGNvbnRleHQobmFtZTogc3RyaW5nLCBob21lRGlyOiBzdHJpbmcpOiBCaW5Db250ZXh0IHtcbiAgaWYgKCFuYW1lIHx8IGJhc2VuYW1lKG5hbWUpICE9PSBuYW1lIHx8IG5hbWUgPT09IFwiLlwiIHx8IG5hbWUgPT09IFwiLi5cIikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGludmFsaWQgYmluYXJ5IG5hbWU6ICR7bmFtZX1gKTtcbiAgfVxuICBjb25zdCByb290ID0gam9pbihob21lRGlyLCBgLiR7bmFtZX1gKTtcbiAgY29uc3QgYmluRGlyID0gam9pbihyb290LCBcImJpblwiKTtcbiAgcmV0dXJuIHsgcm9vdCwgYmluRGlyLCBwYXRoOiBqb2luKGJpbkRpciwgbmFtZSkgfTtcbn1cblxuZnVuY3Rpb24gZGlzcGxheVVybChyYXc6IHN0cmluZyk6IHN0cmluZyB7XG4gIHRyeSB7XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTChyYXcpO1xuICAgIGlmICh1cmwucHJvdG9jb2wgPT09IFwiZGF0YTpcIikgcmV0dXJuIFwiZGF0YTpcIjtcbiAgICB1cmwudXNlcm5hbWUgPSBcIlwiO1xuICAgIHVybC5wYXNzd29yZCA9IFwiXCI7XG4gICAgdXJsLnNlYXJjaCA9IFwiXCI7XG4gICAgdXJsLmhhc2ggPSBcIlwiO1xuICAgIHJldHVybiB1cmwudG9TdHJpbmcoKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHJhdztcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBhY2Nlc3NDb250ZXh0KHBhdGg6IHN0cmluZyk6IFByb21pc2U8QmluQWNjZXNzQ29udGV4dD4ge1xuICB0cnkge1xuICAgIGNvbnN0IGVudHJ5ID0gYXdhaXQgc3RhdChwYXRoKTtcbiAgICBjb25zdCBmaWxlID0gZW50cnkuaXNGaWxlKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZpbGUsXG4gICAgICBleGVjdXRhYmxlOiBmaWxlICYmIChwcm9jZXNzLnBsYXRmb3JtID09PSBcIndpbjMyXCIgfHwgKGVudHJ5Lm1vZGUgJiAwbzExMSkgIT09IDApLFxuICAgIH07XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB7IGZpbGU6IGZhbHNlLCBleGVjdXRhYmxlOiBmYWxzZSB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIGRldGVjdGVkVmVyc2lvbnMob3V0cHV0OiBzdHJpbmcpOiBQYXJzZWRWZXJzaW9uW10ge1xuICBjb25zdCB2ZXJzaW9uczogUGFyc2VkVmVyc2lvbltdID0gW107XG4gIGNvbnN0IHBhdHRlcm4gPSAvXFxidj8oXFxkKyg/OlxcLlxcZCspezAsMn0pKD86Wy0rLl9dP1thLXpdWzAtOWEtei4rXy1dKik/L2dpO1xuICBmb3IgKGNvbnN0IG1hdGNoIG9mIG91dHB1dC5tYXRjaEFsbChwYXR0ZXJuKSkge1xuICAgIGNvbnN0IHJhdyA9IG1hdGNoWzBdLnJlcGxhY2UoL152L2ksIFwiXCIpO1xuICAgIGNvbnN0IHBhcnRzID0gbWF0Y2hbMV0/LnNwbGl0KFwiLlwiKS5tYXAoTnVtYmVyKTtcbiAgICBpZiAocGFydHM/LmV2ZXJ5KE51bWJlci5pc0Zpbml0ZSkpIHZlcnNpb25zLnB1c2goeyByYXcsIHBhcnRzIH0pO1xuICB9XG4gIHJldHVybiB2ZXJzaW9ucy5zb3J0KChhLCBiKSA9PiB7XG4gICAgaWYgKGEucGFydHMubGVuZ3RoICE9PSBiLnBhcnRzLmxlbmd0aCkgcmV0dXJuIGIucGFydHMubGVuZ3RoIC0gYS5wYXJ0cy5sZW5ndGg7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGEucGFydHMubGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgICBjb25zdCBvcmRlciA9IChiLnBhcnRzW2luZGV4XSA/PyAwKSAtIChhLnBhcnRzW2luZGV4XSA/PyAwKTtcbiAgICAgIGlmIChvcmRlciAhPT0gMCkgcmV0dXJuIG9yZGVyO1xuICAgIH1cbiAgICByZXR1cm4gMDtcbiAgfSk7XG59XG5cbi8qKlxuICogUGFyc2UgdGhlIGRlZXBlc3QsIGhpZ2hlc3QgdmVyc2lvbiBmcm9tIHN0ZG91dCwgZmFsbGluZyBiYWNrIHRvIHN0ZGVyciBvbmx5XG4gKiB3aGVuIHN0ZG91dCBjb250YWlucyBubyB2ZXJzaW9uLiBTdXBwb3J0cyBvbmUgdG8gdGhyZWUgbnVtZXJpYyBjb21wb25lbnRzXG4gKiBhbmQgY29tbW9uIHN1ZmZpeGVzIHN1Y2ggYXMgYHJjMWAsIGAucG9zdDFgLCBhbmQgYC1kZXYuMmAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVZlcnNpb24oeyBzdGRvdXQsIHN0ZGVyciB9OiBCaW5WZXJzaW9uT3V0cHV0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGRldGVjdGVkVmVyc2lvbnMoc3Rkb3V0KS5hdCgwKT8ucmF3ID8/IGRldGVjdGVkVmVyc2lvbnMoc3RkZXJyKS5hdCgwKT8ucmF3O1xufVxuXG5mdW5jdGlvbiBudW1lcmljVmVyc2lvbih2ZXJzaW9uOiBzdHJpbmcsIHN0cmljdDogYm9vbGVhbik6IG51bWJlcltdIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcGF0dGVybiA9IHN0cmljdCA/IC9eXFxzKnY/KFxcZCsoPzpcXC5cXGQrKXswLDJ9KVxccyokL2kgOiAvXFxidj8oXFxkKyg/OlxcLlxcZCspezAsMn0pL2k7XG4gIGNvbnN0IG1hdGNoID0gcGF0dGVybi5leGVjKHZlcnNpb24pO1xuICByZXR1cm4gbWF0Y2g/LlsxXT8uc3BsaXQoXCIuXCIpLm1hcChOdW1iZXIpO1xufVxuXG5mdW5jdGlvbiBtZWV0c01pblZlcnNpb24odmVyc2lvbjogc3RyaW5nLCBtaW5WZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgaWYgKCFtaW5WZXJzaW9uKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgYWN0dWFsID0gbnVtZXJpY1ZlcnNpb24odmVyc2lvbiwgZmFsc2UpO1xuICBjb25zdCBtaW5pbXVtID0gbnVtZXJpY1ZlcnNpb24obWluVmVyc2lvbiwgdHJ1ZSk7XG4gIGlmICghbWluaW11bSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGludmFsaWQgbWluaW11bSBiaW5hcnkgdmVyc2lvbjogJHttaW5WZXJzaW9ufWApO1xuICB9XG4gIGlmICghYWN0dWFsKSByZXR1cm4gZmFsc2U7XG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBNYXRoLm1heChhY3R1YWwubGVuZ3RoLCBtaW5pbXVtLmxlbmd0aCk7IGluZGV4ICs9IDEpIHtcbiAgICBjb25zdCBkaWZmZXJlbmNlID0gKGFjdHVhbFtpbmRleF0gPz8gMCkgLSAobWluaW11bVtpbmRleF0gPz8gMCk7XG4gICAgaWYgKGRpZmZlcmVuY2UgIT09IDApIHJldHVybiBkaWZmZXJlbmNlID4gMDtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaXNWYWxpZEJpbihwYXRoOiBzdHJpbmcsIG9wdGlvbnM6IEJpbk9wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgbG9nZ2VyLmRlYnVnKFwiY2hlY2tpbmcgYmluYXJ5XCIsIHtcbiAgICBwYXRoLFxuICAgIG1pblZlcnNpb246IG9wdGlvbnMubWluVmVyc2lvbixcbiAgICB2ZXJzaW9uQXJndW1lbnQ6IG9wdGlvbnMudmVyc2lvbkFyZ3VtZW50ID8/IFwiLS12ZXJzaW9uXCIsXG4gIH0pO1xuICBjb25zdCBhY2Nlc3MgPSBhd2FpdCBhY2Nlc3NDb250ZXh0KHBhdGgpO1xuICBpZiAoIWFjY2Vzcy5maWxlIHx8ICFhY2Nlc3MuZXhlY3V0YWJsZSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcImJpbmFyeSBhY2Nlc3MgY2hlY2sgZmFpbGVkXCIsIHsgcGF0aCwgLi4uYWNjZXNzIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBsZXQgc3Rkb3V0OiBzdHJpbmc7XG4gIGxldCBzdGRlcnI6IHN0cmluZztcbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBleGVjRmlsZUFzeW5jKHBhdGgsIFtvcHRpb25zLnZlcnNpb25Bcmd1bWVudCA/PyBcIi0tdmVyc2lvblwiXSwge1xuICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgIH0pO1xuICAgIHN0ZG91dCA9IHJlc3VsdC5zdGRvdXQ7XG4gICAgc3RkZXJyID0gcmVzdWx0LnN0ZGVycjtcbiAgfSBjYXRjaCAoY2F1c2UpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJiaW5hcnkgdmVyc2lvbiBjb21tYW5kIGZhaWxlZFwiLCB7XG4gICAgICBwYXRoLFxuICAgICAgZXJyb3I6IGVycm9yLmVycm9yTWVzc2FnZShjYXVzZSksXG4gICAgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IHZlcnNpb24gPSAob3B0aW9ucy52ZXJzaW9uUGFyc2VyID8/IHBhcnNlVmVyc2lvbikoe1xuICAgIHN0ZG91dCxcbiAgICBzdGRlcnIsXG4gIH0pO1xuICBjb25zdCB2YWxpZCA9IHZlcnNpb24gIT09IHVuZGVmaW5lZCAmJiBtZWV0c01pblZlcnNpb24odmVyc2lvbiwgb3B0aW9ucy5taW5WZXJzaW9uKTtcbiAgbG9nZ2VyLmRlYnVnKFwiYmluYXJ5IHZlcnNpb24gY2hlY2tlZFwiLCB7XG4gICAgcGF0aCxcbiAgICB2ZXJzaW9uLFxuICAgIG1pblZlcnNpb246IG9wdGlvbnMubWluVmVyc2lvbixcbiAgICB2YWxpZCxcbiAgfSk7XG4gIHJldHVybiB2YWxpZDtcbn1cblxuZnVuY3Rpb24gZG93bmxvYWROYW1lKHVybDogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICB0cnkge1xuICAgIGNvbnN0IGNhbmRpZGF0ZSA9IGJhc2VuYW1lKGRlY29kZVVSSUNvbXBvbmVudChuZXcgVVJMKHVybCkucGF0aG5hbWUpKTtcbiAgICByZXR1cm4gY2FuZGlkYXRlICYmIEJ1ZmZlci5ieXRlTGVuZ3RoKGNhbmRpZGF0ZSkgPD0gMjAwID8gY2FuZGlkYXRlIDogbmFtZTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gdW5wYWNrKGFyY2hpdmU6IHN0cmluZywgZGVzdGluYXRpb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBmaWxlbmFtZSA9IGFyY2hpdmUudG9Mb3dlckNhc2UoKTtcbiAgaWYgKGZpbGVuYW1lLmVuZHNXaXRoKFwiLnppcFwiKSkge1xuICAgIGF3YWl0IGV4dHJhY3RaaXAoYXJjaGl2ZSwgeyBkaXI6IGRlc3RpbmF0aW9uIH0pO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoZmlsZW5hbWUuZW5kc1dpdGgoXCIudGFyXCIpIHx8IGZpbGVuYW1lLmVuZHNXaXRoKFwiLnRhci5nelwiKSB8fCBmaWxlbmFtZS5lbmRzV2l0aChcIi50Z3pcIikpIHtcbiAgICBhd2FpdCBleHRyYWN0VGFyKHsgZmlsZTogYXJjaGl2ZSwgY3dkOiBkZXN0aW5hdGlvbiB9KTtcbiAgICByZXR1cm47XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCBiaW5hcnkgYXJjaGl2ZTogJHtiYXNlbmFtZShhcmNoaXZlKX1gKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmlsZXNVbmRlcihyb290OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IGVudHJpZXMgPSBhd2FpdCByZWFkZGlyKHJvb3QsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KTtcbiAgY29uc3QgZmlsZXM6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgIGNvbnN0IHBhdGggPSBqb2luKHJvb3QsIGVudHJ5Lm5hbWUpO1xuICAgIGlmIChlbnRyeS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICBmaWxlcy5wdXNoKC4uLihhd2FpdCBmaWxlc1VuZGVyKHBhdGgpKSk7XG4gICAgfSBlbHNlIGlmIChlbnRyeS5pc0ZpbGUoKSkge1xuICAgICAgZmlsZXMucHVzaChwYXRoKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZpbGVzO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzZWxlY3RTaW5nbGVGaWxlKHNvdXJjZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZmlsZXMgPSBhd2FpdCBmaWxlc1VuZGVyKHNvdXJjZSk7XG4gIGNvbnN0IHNlbGVjdGVkID0gZmlsZXMuYXQoMCk7XG4gIGlmIChmaWxlcy5sZW5ndGggIT09IDEgfHwgIXNlbGVjdGVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBiaW5hcnkgYXJjaGl2ZSBtdXN0IGNvbnRhaW4gb25lIGZpbGUsIGZvdW5kICR7ZmlsZXMubGVuZ3RofWApO1xuICB9XG4gIHJldHVybiBzZWxlY3RlZDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2VsZWN0ZWRCaW4oXG4gIGRlc3RpbmF0aW9uOiBCaW5Db250ZXh0LFxuICB1cmw6IHN0cmluZyxcbiAgdGVtcDogc3RyaW5nLFxuICBvcHRpb25zOiBCaW5PcHRpb25zLFxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgbmFtZSA9IGRvd25sb2FkTmFtZSh1cmwsIGJhc2VuYW1lKGRlc3RpbmF0aW9uLnBhdGgpKTtcbiAgY29uc3QgZG93bmxvYWRQYXRoID0gam9pbih0ZW1wLCBuYW1lKTtcbiAgbG9nZ2VyLmRlYnVnKFwiZG93bmxvYWRpbmcgYmluYXJ5XCIsIHtcbiAgICBmcm9tOiBkaXNwbGF5VXJsKHVybCksXG4gICAgdG86IGRvd25sb2FkUGF0aCxcbiAgfSk7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsKTtcbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIHRocm93IG5ldyBFcnJvcihgYmluYXJ5IGRvd25sb2FkIGZhaWxlZCAoJHtyZXNwb25zZS5zdGF0dXN9KWApO1xuICB9XG4gIGF3YWl0IHdyaXRlRmlsZShkb3dubG9hZFBhdGgsIEJ1ZmZlci5mcm9tKGF3YWl0IHJlc3BvbnNlLmFycmF5QnVmZmVyKCkpLCB7IG1vZGU6IDBvNzU1IH0pO1xuXG4gIGxldCBzb3VyY2UgPSBkb3dubG9hZFBhdGg7XG4gIGlmIChvcHRpb25zLmF1dG9VbnBhY2thZ2UpIHtcbiAgICBzb3VyY2UgPSBqb2luKHRlbXAsIGB1bnBhY2tlZC0ke3JhbmRvbVVVSUQoKX1gKTtcbiAgICBhd2FpdCBta2Rpcihzb3VyY2UpO1xuICAgIGxvZ2dlci5kZWJ1ZyhcInVucGFja2luZyBiaW5hcnkgYXJjaGl2ZVwiLCB7XG4gICAgICBhcmNoaXZlOiBkb3dubG9hZFBhdGgsXG4gICAgICB0bzogc291cmNlLFxuICAgIH0pO1xuICAgIGF3YWl0IHVucGFjayhkb3dubG9hZFBhdGgsIHNvdXJjZSk7XG4gIH1cblxuICBpZiAob3B0aW9ucy5zZWxlY3Rvcikge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gYXdhaXQgb3B0aW9ucy5zZWxlY3Rvcih7IGRlc3RpbmF0aW9uLCBkb3dubG9hZFBhdGgsIHNvdXJjZSB9KTtcbiAgICBsb2dnZXIuZGVidWcoXCJzZWxlY3RlZCBiaW5hcnlcIiwgeyBwYXRoOiBzZWxlY3RlZCB9KTtcbiAgICByZXR1cm4gc2VsZWN0ZWQ7XG4gIH1cbiAgY29uc3Qgc2VsZWN0ZWQgPSBvcHRpb25zLmF1dG9VbnBhY2thZ2UgPyBhd2FpdCBzZWxlY3RTaW5nbGVGaWxlKHNvdXJjZSkgOiBzb3VyY2U7XG4gIGxvZ2dlci5kZWJ1ZyhcInNlbGVjdGVkIGJpbmFyeVwiLCB7IHBhdGg6IHNlbGVjdGVkIH0pO1xuICByZXR1cm4gc2VsZWN0ZWQ7XG59XG5cbi8qKlxuICogUmV0dXJuIGFuIGV4aXN0aW5nIGV4ZWN1dGFibGUgb3IgaW5zdGFsbCBpdCBhdG9taWNhbGx5IHVuZGVyXG4gKiBgJEhPTUUvLjxuYW1lPi9iaW4vPG5hbWU+YC4gSW5zdGFsbGF0aW9uIHVzZXMgYSBjaGVjay1sb2NrLWNoZWNrLWxvYWRcbiAqIHNlcXVlbmNlIHNvIGNvbmN1cnJlbnQgY2FsbGVycyByZXNvbHZlIGFuZCBkb3dubG9hZCB0aGUgYmluYXJ5IG9ubHkgb25jZS5cbiAqIFRoZSBkb3dubG9hZGVkIGNhbmRpZGF0ZSBhbmQgZmluYWwgcmVuYW1lZCBleGVjdXRhYmxlIG11c3QgYm90aCBwYXNzIHRoZVxuICogc2FtZSBleGVjdXRhYmxlIGFuZCB2ZXJzaW9uIGNoZWNrcy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuc3VyZShcbiAgbmFtZTogc3RyaW5nLFxuICB1cmw6IEJpblVybCxcbiAgb3B0aW9uczogQmluT3B0aW9ucyA9IHt9LFxuKTogUHJvbWlzZTxCaW5Db250ZXh0PiB7XG4gIGlmIChvcHRpb25zLm1pblZlcnNpb24gJiYgIW51bWVyaWNWZXJzaW9uKG9wdGlvbnMubWluVmVyc2lvbiwgdHJ1ZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBpbnZhbGlkIG1pbmltdW0gYmluYXJ5IHZlcnNpb246ICR7b3B0aW9ucy5taW5WZXJzaW9ufWApO1xuICB9XG4gIGNvbnN0IGRlc3RpbmF0aW9uID0gY29udGV4dChuYW1lLCBvcHRpb25zLmhvbWVEaXIgPz8gaG9tZWRpcigpKTtcbiAgaWYgKGF3YWl0IGlzVmFsaWRCaW4oZGVzdGluYXRpb24ucGF0aCwgb3B0aW9ucykpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJ1c2luZyBpbnN0YWxsZWQgYmluYXJ5XCIsIHsgbmFtZSwgcGF0aDogZGVzdGluYXRpb24ucGF0aCB9KTtcbiAgICByZXR1cm4gZGVzdGluYXRpb247XG4gIH1cblxuICBsb2dnZXIuZGVidWcoXCJ3YWl0aW5nIGZvciBiaW5hcnkgaW5zdGFsbCBsb2NrXCIsIHsgbmFtZSwgcGF0aDogZGVzdGluYXRpb24ucGF0aCB9KTtcbiAgcmV0dXJuIHdpdGhGaWxlTG9jayhbXCJiaW4uZW5zdXJlXCIsIGRlc3RpbmF0aW9uLnBhdGhdLCBhc3luYyAoKSA9PiB7XG4gICAgaWYgKGF3YWl0IGlzVmFsaWRCaW4oZGVzdGluYXRpb24ucGF0aCwgb3B0aW9ucykpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcInVzaW5nIGJpbmFyeSBpbnN0YWxsZWQgYnkgYW5vdGhlciBjYWxsZXJcIiwge1xuICAgICAgICBuYW1lLFxuICAgICAgICBwYXRoOiBkZXN0aW5hdGlvbi5wYXRoLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZGVzdGluYXRpb247XG4gICAgfVxuXG4gICAgY29uc3QgcmVzb2x2ZWRVcmwgPSB0eXBlb2YgdXJsID09PSBcImZ1bmN0aW9uXCIgPyBhd2FpdCB1cmwoKSA6IHVybDtcbiAgICBjb25zdCBmcm9tID0gZGlzcGxheVVybChyZXNvbHZlZFVybCk7XG4gICAgbG9nZ2VyLmRlYnVnKFwiaW5zdGFsbGluZyBiaW5hcnlcIiwge1xuICAgICAgbmFtZSxcbiAgICAgIGZyb20sXG4gICAgICB0bzogZGVzdGluYXRpb24ucGF0aCxcbiAgICAgIG1pblZlcnNpb246IG9wdGlvbnMubWluVmVyc2lvbixcbiAgICB9KTtcbiAgICBjb25zdCB0ZW1wID0gYXdhaXQgbWtkdGVtcChqb2luKHRtcGRpcigpLCBgJHtuYW1lfS1gKSk7XG4gICAgbGV0IHN0YWdlZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzZWxlY3RlZCA9IGF3YWl0IHNlbGVjdGVkQmluKGRlc3RpbmF0aW9uLCByZXNvbHZlZFVybCwgdGVtcCwgb3B0aW9ucyk7XG4gICAgICBhd2FpdCBjaG1vZChzZWxlY3RlZCwgMG83NTUpO1xuICAgICAgaWYgKCEoYXdhaXQgaXNWYWxpZEJpbihzZWxlY3RlZCwgb3B0aW9ucykpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgc2VsZWN0ZWQgYmluYXJ5IGhhcyBubyBhY2NlcHRhYmxlIHZlcnNpb246ICR7c2VsZWN0ZWR9YCk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IG1rZGlyKGRlc3RpbmF0aW9uLmJpbkRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICBzdGFnZWQgPSBqb2luKGRlc3RpbmF0aW9uLmJpbkRpciwgYC4ke25hbWV9LSR7cmFuZG9tVVVJRCgpfWApO1xuICAgICAgYXdhaXQgY29weUZpbGUoc2VsZWN0ZWQsIHN0YWdlZCk7XG4gICAgICBhd2FpdCBjaG1vZChzdGFnZWQsIDBvNzU1KTtcbiAgICAgIGF3YWl0IHJlbmFtZShzdGFnZWQsIGRlc3RpbmF0aW9uLnBhdGgpO1xuICAgICAgc3RhZ2VkID0gdW5kZWZpbmVkO1xuICAgICAgaWYgKCEoYXdhaXQgaXNWYWxpZEJpbihkZXN0aW5hdGlvbi5wYXRoLCBvcHRpb25zKSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnN0YWxsZWQgYmluYXJ5IGlzIGludmFsaWQgYWZ0ZXIgcmVuYW1lOiAke2Rlc3RpbmF0aW9uLnBhdGh9YCk7XG4gICAgICB9XG4gICAgICBsb2dnZXIuaW5mbyhcImluc3RhbGxlZCBiaW5hcnlcIiwge1xuICAgICAgICBuYW1lLFxuICAgICAgICBmcm9tLFxuICAgICAgICB0bzogZGVzdGluYXRpb24ucGF0aCxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoc3RhZ2VkKSBhd2FpdCBybShzdGFnZWQsIHsgZm9yY2U6IHRydWUgfSk7XG4gICAgICBhd2FpdCBybSh0ZW1wLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgfVxuICB9KTtcbn1cbiJdfQ==
284
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmluLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDekMsT0FBTyxFQUNMLEtBQUssRUFDTCxRQUFRLEVBQ1IsS0FBSyxFQUNMLE9BQU8sRUFDUCxPQUFPLEVBQ1AsTUFBTSxFQUNOLEVBQUUsRUFDRixJQUFJLEVBQ0osU0FBUyxHQUNWLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDMUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUV0QyxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3BELE9BQU8sVUFBVSxNQUFNLGFBQWEsQ0FBQztBQUNyQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLFVBQVUsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUV0QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUMsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzFDLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7QUEyRHRDLFNBQVMsT0FBTyxDQUFDLElBQVksRUFBRSxPQUFlLEVBQUUsV0FBd0I7SUFDdEUsSUFBSSxDQUFDLElBQUksSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxHQUFHLElBQUksSUFBSSxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ3RF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UyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDckQsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksSUFBSSxJQUFJLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM5RCxNQUFNLFFBQVEsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDakMsTUFBTSxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzNCLE1BQU0sTUFBTSxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkMsTUFBTSxHQUFHLFNBQVMsQ0FBQztZQUNuQixJQUFJLENBQUMsQ0FBQyxNQUFNLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDbkQsTUFBTSxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFDbkYsQ0FBQztZQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUU7Z0JBQzlCLElBQUk7Z0JBQ0osSUFBSTtnQkFDSixFQUFFLEVBQUUsV0FBVyxDQUFDLElBQUk7YUFDckIsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxXQUFXLENBQUM7UUFDckIsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsSUFBSSxNQUFNO2dCQUFFLE1BQU0sRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzlDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDbkQsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSW5zdGFsbCBhbmQgcmV1c2UgZXhlY3V0YWJsZSBiaW5hcmllcyB1bmRlciBhIHBlci10b29sIGhvbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuaW1wb3J0IHsgZXhlY0ZpbGUgfSBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyByYW5kb21VVUlEIH0gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5pbXBvcnQge1xuICBjaG1vZCxcbiAgY29weUZpbGUsXG4gIG1rZGlyLFxuICBta2R0ZW1wLFxuICByZWFkZGlyLFxuICByZW5hbWUsXG4gIHJtLFxuICBzdGF0LFxuICB3cml0ZUZpbGUsXG59IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBob21lZGlyLCB0bXBkaXIgfSBmcm9tIFwibm9kZTpvc1wiO1xuaW1wb3J0IHsgYmFzZW5hbWUsIGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBwcm9taXNpZnkgfSBmcm9tIFwibm9kZTp1dGlsXCI7XG5cbmltcG9ydCB7IGVycm9yLCBsb2cgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IGV4dHJhY3RaaXAgZnJvbSBcImV4dHJhY3QtemlwXCI7XG5pbXBvcnQgeyB4IGFzIGV4dHJhY3RUYXIgfSBmcm9tIFwidGFyXCI7XG5cbmltcG9ydCB7IHdpdGhGaWxlTG9jayB9IGZyb20gXCIuL2ZpbGUtbG9jay50c1wiO1xuXG5jb25zdCBleGVjRmlsZUFzeW5jID0gcHJvbWlzaWZ5KGV4ZWNGaWxlKTtcbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJjb3JlOmJpblwiKTtcblxuaW50ZXJmYWNlIFBhcnNlZFZlcnNpb24ge1xuICByYXc6IHN0cmluZztcbiAgcGFydHM6IG51bWJlcltdO1xufVxuXG5pbnRlcmZhY2UgQmluQWNjZXNzQ29udGV4dCB7XG4gIGZpbGU6IGJvb2xlYW47XG4gIGV4ZWN1dGFibGU6IGJvb2xlYW47XG59XG5cbi8qKiBTdGFibGUgcGF0aHMgZm9yIGFuIGluc3RhbGxlZCBiaW5hcnkuICovXG5leHBvcnQgaW50ZXJmYWNlIEJpbkNvbnRleHQge1xuICByb290OiBzdHJpbmc7XG4gIGJpbkRpcjogc3RyaW5nO1xuICBwYXRoOiBzdHJpbmc7XG59XG5cbi8qKiBUZW1wb3JhcnkgZG93bmxvYWQgYW5kIGV4dHJhY3Rpb24gcGF0aHMgc3VwcGxpZWQgdG8gYSBjdXN0b20gc2VsZWN0b3IuICovXG5leHBvcnQgaW50ZXJmYWNlIEJpblNlbGVjdGlvbkNvbnRleHQge1xuICBkZXN0aW5hdGlvbjogQmluQ29udGV4dDtcbiAgZG93bmxvYWRQYXRoOiBzdHJpbmc7XG4gIHNvdXJjZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNlbGVjdCB0aGUgZXhlY3V0YWJsZSBmcm9tIGEgZG93bmxvYWQgb3IgdW5wYWNrZWQgYXJjaGl2ZS4gQSBzZWxlY3RvciBtYXlcbiAqIGFsc28gcHJlcGFyZSB0aGUgZmlsZSwgc3VjaCBhcyBhcHBseWluZyBpdHMgZXhlY3V0YWJsZSBtb2RlLlxuICovXG5leHBvcnQgdHlwZSBCaW5TZWxlY3RvciA9IChjb250ZXh0OiBCaW5TZWxlY3Rpb25Db250ZXh0KSA9PiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz47XG5cbi8qKiBDYXB0dXJlZCBvdXRwdXQgcGFzc2VkIHRvIGEgY3VzdG9tIGJpbmFyeSB2ZXJzaW9uIHBhcnNlci4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmluVmVyc2lvbk91dHB1dCB7XG4gIHN0ZG91dDogc3RyaW5nO1xuICBzdGRlcnI6IHN0cmluZztcbn1cblxuLyoqIEV4dHJhY3QgYSB2ZXJzaW9uIHN0cmluZyBmcm9tIGEgc3VjY2Vzc2Z1bCB2ZXJzaW9uLWNvbW1hbmQgcmVzdWx0LiAqL1xuZXhwb3J0IHR5cGUgQmluVmVyc2lvblBhcnNlciA9IChvdXRwdXQ6IEJpblZlcnNpb25PdXRwdXQpID0+IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuLyoqIE9wdGlvbnMgZm9yIHtAbGluayBlbnN1cmV9LiAqL1xuZXhwb3J0IGludGVyZmFjZSBCaW5PcHRpb25zIHtcbiAgYXV0b1VucGFja2FnZT86IGJvb2xlYW47XG4gIHNlbGVjdG9yPzogQmluU2VsZWN0b3I7XG4gIGhvbWVEaXI/OiBzdHJpbmc7XG4gIC8qKiBFeGFjdCBpbnN0YWxsYXRpb24gcGF0aHMuIE9taXNzaW9uIGtlZXBzIGAkSE9NRS8uPG5hbWU+L2Jpbi88bmFtZT5gLiAqL1xuICBkZXN0aW5hdGlvbj86IEJpbkNvbnRleHQ7XG4gIC8qKiBNaW5pbXVtIGFjY2VwdGVkIG51bWVyaWMgdmVyc2lvbiwgd2l0aCBvbmUgdG8gdGhyZWUgY29tcG9uZW50cy4gKi9cbiAgbWluVmVyc2lvbj86IHN0cmluZztcbiAgLyoqIEFyZ3VtZW50IHBhc3NlZCB0byB0aGUgYmluYXJ5IGZvciB2ZXJzaW9uIGRldGVjdGlvbi4gRGVmYXVsdHMgdG8gYC0tdmVyc2lvbmAuICovXG4gIHZlcnNpb25Bcmd1bWVudD86IHN0cmluZztcbiAgLyoqIFZlcnNpb24gb3V0cHV0IHBhcnNlci4gRGVmYXVsdHMgdG8ge0BsaW5rIHBhcnNlVmVyc2lvbn0uICovXG4gIHZlcnNpb25QYXJzZXI/OiBCaW5WZXJzaW9uUGFyc2VyO1xufVxuXG4vKiogQSBVUkwgcmVzb2x2ZWQgb25seSB3aGVuIHRoZSBleGVjdXRhYmxlIGlzIG5vdCBhbHJlYWR5IGluc3RhbGxlZC4gKi9cbmV4cG9ydCB0eXBlIEJpblVybCA9IHN0cmluZyB8ICgoKSA9PiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz4pO1xuXG5mdW5jdGlvbiBjb250ZXh0KG5hbWU6IHN0cmluZywgaG9tZURpcjogc3RyaW5nLCBkZXN0aW5hdGlvbj86IEJpbkNvbnRleHQpOiBCaW5Db250ZXh0IHtcbiAgaWYgKCFuYW1lIHx8IGJhc2VuYW1lKG5hbWUpICE9PSBuYW1lIHx8IG5hbWUgPT09IFwiLlwiIHx8IG5hbWUgPT09IFwiLi5cIikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGludmFsaWQgYmluYXJ5IG5hbWU6ICR7bmFtZX1gKTtcbiAgfVxuICBpZiAoZGVzdGluYXRpb24pIHJldHVybiBkZXN0aW5hdGlvbjtcbiAgY29uc3Qgcm9vdCA9IGpvaW4oaG9tZURpciwgYC4ke25hbWV9YCk7XG4gIGNvbnN0IGJpbkRpciA9IGpvaW4ocm9vdCwgXCJiaW5cIik7XG4gIHJldHVybiB7IHJvb3QsIGJpbkRpciwgcGF0aDogam9pbihiaW5EaXIsIG5hbWUpIH07XG59XG5cbmZ1bmN0aW9uIGRpc3BsYXlVcmwocmF3OiBzdHJpbmcpOiBzdHJpbmcge1xuICB0cnkge1xuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwocmF3KTtcbiAgICBpZiAodXJsLnByb3RvY29sID09PSBcImRhdGE6XCIpIHJldHVybiBcImRhdGE6XCI7XG4gICAgdXJsLnVzZXJuYW1lID0gXCJcIjtcbiAgICB1cmwucGFzc3dvcmQgPSBcIlwiO1xuICAgIHVybC5zZWFyY2ggPSBcIlwiO1xuICAgIHVybC5oYXNoID0gXCJcIjtcbiAgICByZXR1cm4gdXJsLnRvU3RyaW5nKCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiByYXc7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gYWNjZXNzQ29udGV4dChwYXRoOiBzdHJpbmcpOiBQcm9taXNlPEJpbkFjY2Vzc0NvbnRleHQ+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBlbnRyeSA9IGF3YWl0IHN0YXQocGF0aCk7XG4gICAgY29uc3QgZmlsZSA9IGVudHJ5LmlzRmlsZSgpO1xuICAgIHJldHVybiB7XG4gICAgICBmaWxlLFxuICAgICAgZXhlY3V0YWJsZTogZmlsZSAmJiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gXCJ3aW4zMlwiIHx8IChlbnRyeS5tb2RlICYgMG8xMTEpICE9PSAwKSxcbiAgICB9O1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4geyBmaWxlOiBmYWxzZSwgZXhlY3V0YWJsZTogZmFsc2UgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZXRlY3RlZFZlcnNpb25zKG91dHB1dDogc3RyaW5nKTogUGFyc2VkVmVyc2lvbltdIHtcbiAgY29uc3QgdmVyc2lvbnM6IFBhcnNlZFZlcnNpb25bXSA9IFtdO1xuICBjb25zdCBwYXR0ZXJuID0gL1xcYnY/KFxcZCsoPzpcXC5cXGQrKXswLDJ9KSg/OlstKy5fXT9bYS16XVswLTlhLXouK18tXSopPy9naTtcbiAgZm9yIChjb25zdCBtYXRjaCBvZiBvdXRwdXQubWF0Y2hBbGwocGF0dGVybikpIHtcbiAgICBjb25zdCByYXcgPSBtYXRjaFswXS5yZXBsYWNlKC9edi9pLCBcIlwiKTtcbiAgICBjb25zdCBwYXJ0cyA9IG1hdGNoWzFdPy5zcGxpdChcIi5cIikubWFwKE51bWJlcik7XG4gICAgaWYgKHBhcnRzPy5ldmVyeShOdW1iZXIuaXNGaW5pdGUpKSB2ZXJzaW9ucy5wdXNoKHsgcmF3LCBwYXJ0cyB9KTtcbiAgfVxuICByZXR1cm4gdmVyc2lvbnMuc29ydCgoYSwgYikgPT4ge1xuICAgIGlmIChhLnBhcnRzLmxlbmd0aCAhPT0gYi5wYXJ0cy5sZW5ndGgpIHJldHVybiBiLnBhcnRzLmxlbmd0aCAtIGEucGFydHMubGVuZ3RoO1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBhLnBhcnRzLmxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgICAgY29uc3Qgb3JkZXIgPSAoYi5wYXJ0c1tpbmRleF0gPz8gMCkgLSAoYS5wYXJ0c1tpbmRleF0gPz8gMCk7XG4gICAgICBpZiAob3JkZXIgIT09IDApIHJldHVybiBvcmRlcjtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH0pO1xufVxuXG4vKipcbiAqIFBhcnNlIHRoZSBkZWVwZXN0LCBoaWdoZXN0IHZlcnNpb24gZnJvbSBzdGRvdXQsIGZhbGxpbmcgYmFjayB0byBzdGRlcnIgb25seVxuICogd2hlbiBzdGRvdXQgY29udGFpbnMgbm8gdmVyc2lvbi4gU3VwcG9ydHMgb25lIHRvIHRocmVlIG51bWVyaWMgY29tcG9uZW50c1xuICogYW5kIGNvbW1vbiBzdWZmaXhlcyBzdWNoIGFzIGByYzFgLCBgLnBvc3QxYCwgYW5kIGAtZGV2LjJgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VWZXJzaW9uKHsgc3Rkb3V0LCBzdGRlcnIgfTogQmluVmVyc2lvbk91dHB1dCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBkZXRlY3RlZFZlcnNpb25zKHN0ZG91dCkuYXQoMCk/LnJhdyA/PyBkZXRlY3RlZFZlcnNpb25zKHN0ZGVycikuYXQoMCk/LnJhdztcbn1cblxuZnVuY3Rpb24gbnVtZXJpY1ZlcnNpb24odmVyc2lvbjogc3RyaW5nLCBzdHJpY3Q6IGJvb2xlYW4pOiBudW1iZXJbXSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHBhdHRlcm4gPSBzdHJpY3QgPyAvXlxccyp2PyhcXGQrKD86XFwuXFxkKyl7MCwyfSlcXHMqJC9pIDogL1xcYnY/KFxcZCsoPzpcXC5cXGQrKXswLDJ9KS9pO1xuICBjb25zdCBtYXRjaCA9IHBhdHRlcm4uZXhlYyh2ZXJzaW9uKTtcbiAgcmV0dXJuIG1hdGNoPy5bMV0/LnNwbGl0KFwiLlwiKS5tYXAoTnVtYmVyKTtcbn1cblxuZnVuY3Rpb24gbWVldHNNaW5WZXJzaW9uKHZlcnNpb246IHN0cmluZywgbWluVmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIGlmICghbWluVmVyc2lvbikgcmV0dXJuIHRydWU7XG4gIGNvbnN0IGFjdHVhbCA9IG51bWVyaWNWZXJzaW9uKHZlcnNpb24sIGZhbHNlKTtcbiAgY29uc3QgbWluaW11bSA9IG51bWVyaWNWZXJzaW9uKG1pblZlcnNpb24sIHRydWUpO1xuICBpZiAoIW1pbmltdW0pIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBpbnZhbGlkIG1pbmltdW0gYmluYXJ5IHZlcnNpb246ICR7bWluVmVyc2lvbn1gKTtcbiAgfVxuICBpZiAoIWFjdHVhbCkgcmV0dXJuIGZhbHNlO1xuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgTWF0aC5tYXgoYWN0dWFsLmxlbmd0aCwgbWluaW11bS5sZW5ndGgpOyBpbmRleCArPSAxKSB7XG4gICAgY29uc3QgZGlmZmVyZW5jZSA9IChhY3R1YWxbaW5kZXhdID8/IDApIC0gKG1pbmltdW1baW5kZXhdID8/IDApO1xuICAgIGlmIChkaWZmZXJlbmNlICE9PSAwKSByZXR1cm4gZGlmZmVyZW5jZSA+IDA7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGlzVmFsaWRCaW4ocGF0aDogc3RyaW5nLCBvcHRpb25zOiBCaW5PcHRpb25zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGxvZ2dlci5kZWJ1ZyhcImNoZWNraW5nIGJpbmFyeVwiLCB7XG4gICAgcGF0aCxcbiAgICBtaW5WZXJzaW9uOiBvcHRpb25zLm1pblZlcnNpb24sXG4gICAgdmVyc2lvbkFyZ3VtZW50OiBvcHRpb25zLnZlcnNpb25Bcmd1bWVudCA/PyBcIi0tdmVyc2lvblwiLFxuICB9KTtcbiAgY29uc3QgYWNjZXNzID0gYXdhaXQgYWNjZXNzQ29udGV4dChwYXRoKTtcbiAgaWYgKCFhY2Nlc3MuZmlsZSB8fCAhYWNjZXNzLmV4ZWN1dGFibGUpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJiaW5hcnkgYWNjZXNzIGNoZWNrIGZhaWxlZFwiLCB7IHBhdGgsIC4uLmFjY2VzcyB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgbGV0IHN0ZG91dDogc3RyaW5nO1xuICBsZXQgc3RkZXJyOiBzdHJpbmc7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXhlY0ZpbGVBc3luYyhwYXRoLCBbb3B0aW9ucy52ZXJzaW9uQXJndW1lbnQgPz8gXCItLXZlcnNpb25cIl0sIHtcbiAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICB9KTtcbiAgICBzdGRvdXQgPSByZXN1bHQuc3Rkb3V0O1xuICAgIHN0ZGVyciA9IHJlc3VsdC5zdGRlcnI7XG4gIH0gY2F0Y2ggKGNhdXNlKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwiYmluYXJ5IHZlcnNpb24gY29tbWFuZCBmYWlsZWRcIiwge1xuICAgICAgcGF0aCxcbiAgICAgIGVycm9yOiBlcnJvci5lcnJvck1lc3NhZ2UoY2F1c2UpLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCB2ZXJzaW9uID0gKG9wdGlvbnMudmVyc2lvblBhcnNlciA/PyBwYXJzZVZlcnNpb24pKHtcbiAgICBzdGRvdXQsXG4gICAgc3RkZXJyLFxuICB9KTtcbiAgY29uc3QgdmFsaWQgPSB2ZXJzaW9uICE9PSB1bmRlZmluZWQgJiYgbWVldHNNaW5WZXJzaW9uKHZlcnNpb24sIG9wdGlvbnMubWluVmVyc2lvbik7XG4gIGxvZ2dlci5kZWJ1ZyhcImJpbmFyeSB2ZXJzaW9uIGNoZWNrZWRcIiwge1xuICAgIHBhdGgsXG4gICAgdmVyc2lvbixcbiAgICBtaW5WZXJzaW9uOiBvcHRpb25zLm1pblZlcnNpb24sXG4gICAgdmFsaWQsXG4gIH0pO1xuICByZXR1cm4gdmFsaWQ7XG59XG5cbmZ1bmN0aW9uIGRvd25sb2FkTmFtZSh1cmw6IHN0cmluZywgbmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBjYW5kaWRhdGUgPSBiYXNlbmFtZShkZWNvZGVVUklDb21wb25lbnQobmV3IFVSTCh1cmwpLnBhdGhuYW1lKSk7XG4gICAgcmV0dXJuIGNhbmRpZGF0ZSAmJiBCdWZmZXIuYnl0ZUxlbmd0aChjYW5kaWRhdGUpIDw9IDIwMCA/IGNhbmRpZGF0ZSA6IG5hbWU7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBuYW1lO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHVucGFjayhhcmNoaXZlOiBzdHJpbmcsIGRlc3RpbmF0aW9uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgZmlsZW5hbWUgPSBhcmNoaXZlLnRvTG93ZXJDYXNlKCk7XG4gIGlmIChmaWxlbmFtZS5lbmRzV2l0aChcIi56aXBcIikpIHtcbiAgICBhd2FpdCBleHRyYWN0WmlwKGFyY2hpdmUsIHsgZGlyOiBkZXN0aW5hdGlvbiB9KTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGZpbGVuYW1lLmVuZHNXaXRoKFwiLnRhclwiKSB8fCBmaWxlbmFtZS5lbmRzV2l0aChcIi50YXIuZ3pcIikgfHwgZmlsZW5hbWUuZW5kc1dpdGgoXCIudGd6XCIpKSB7XG4gICAgYXdhaXQgZXh0cmFjdFRhcih7IGZpbGU6IGFyY2hpdmUsIGN3ZDogZGVzdGluYXRpb24gfSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgYmluYXJ5IGFyY2hpdmU6ICR7YmFzZW5hbWUoYXJjaGl2ZSl9YCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZpbGVzVW5kZXIocm9vdDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBlbnRyaWVzID0gYXdhaXQgcmVhZGRpcihyb290LCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSk7XG4gIGNvbnN0IGZpbGVzOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICBjb25zdCBwYXRoID0gam9pbihyb290LCBlbnRyeS5uYW1lKTtcbiAgICBpZiAoZW50cnkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgZmlsZXMucHVzaCguLi4oYXdhaXQgZmlsZXNVbmRlcihwYXRoKSkpO1xuICAgIH0gZWxzZSBpZiAoZW50cnkuaXNGaWxlKCkpIHtcbiAgICAgIGZpbGVzLnB1c2gocGF0aCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBmaWxlcztcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2VsZWN0U2luZ2xlRmlsZShzb3VyY2U6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGZpbGVzID0gYXdhaXQgZmlsZXNVbmRlcihzb3VyY2UpO1xuICBjb25zdCBzZWxlY3RlZCA9IGZpbGVzLmF0KDApO1xuICBpZiAoZmlsZXMubGVuZ3RoICE9PSAxIHx8ICFzZWxlY3RlZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgYmluYXJ5IGFyY2hpdmUgbXVzdCBjb250YWluIG9uZSBmaWxlLCBmb3VuZCAke2ZpbGVzLmxlbmd0aH1gKTtcbiAgfVxuICByZXR1cm4gc2VsZWN0ZWQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNlbGVjdGVkQmluKFxuICBkZXN0aW5hdGlvbjogQmluQ29udGV4dCxcbiAgdXJsOiBzdHJpbmcsXG4gIHRlbXA6IHN0cmluZyxcbiAgb3B0aW9uczogQmluT3B0aW9ucyxcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IG5hbWUgPSBkb3dubG9hZE5hbWUodXJsLCBiYXNlbmFtZShkZXN0aW5hdGlvbi5wYXRoKSk7XG4gIGNvbnN0IGRvd25sb2FkUGF0aCA9IGpvaW4odGVtcCwgbmFtZSk7XG4gIGxvZ2dlci5kZWJ1ZyhcImRvd25sb2FkaW5nIGJpbmFyeVwiLCB7XG4gICAgZnJvbTogZGlzcGxheVVybCh1cmwpLFxuICAgIHRvOiBkb3dubG9hZFBhdGgsXG4gIH0pO1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCk7XG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGJpbmFyeSBkb3dubG9hZCBmYWlsZWQgKCR7cmVzcG9uc2Uuc3RhdHVzfSlgKTtcbiAgfVxuICBhd2FpdCB3cml0ZUZpbGUoZG93bmxvYWRQYXRoLCBCdWZmZXIuZnJvbShhd2FpdCByZXNwb25zZS5hcnJheUJ1ZmZlcigpKSwgeyBtb2RlOiAwbzc1NSB9KTtcblxuICBsZXQgc291cmNlID0gZG93bmxvYWRQYXRoO1xuICBpZiAob3B0aW9ucy5hdXRvVW5wYWNrYWdlKSB7XG4gICAgc291cmNlID0gam9pbih0ZW1wLCBgdW5wYWNrZWQtJHtyYW5kb21VVUlEKCl9YCk7XG4gICAgYXdhaXQgbWtkaXIoc291cmNlKTtcbiAgICBsb2dnZXIuZGVidWcoXCJ1bnBhY2tpbmcgYmluYXJ5IGFyY2hpdmVcIiwge1xuICAgICAgYXJjaGl2ZTogZG93bmxvYWRQYXRoLFxuICAgICAgdG86IHNvdXJjZSxcbiAgICB9KTtcbiAgICBhd2FpdCB1bnBhY2soZG93bmxvYWRQYXRoLCBzb3VyY2UpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMuc2VsZWN0b3IpIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IGF3YWl0IG9wdGlvbnMuc2VsZWN0b3IoeyBkZXN0aW5hdGlvbiwgZG93bmxvYWRQYXRoLCBzb3VyY2UgfSk7XG4gICAgbG9nZ2VyLmRlYnVnKFwic2VsZWN0ZWQgYmluYXJ5XCIsIHsgcGF0aDogc2VsZWN0ZWQgfSk7XG4gICAgcmV0dXJuIHNlbGVjdGVkO1xuICB9XG4gIGNvbnN0IHNlbGVjdGVkID0gb3B0aW9ucy5hdXRvVW5wYWNrYWdlID8gYXdhaXQgc2VsZWN0U2luZ2xlRmlsZShzb3VyY2UpIDogc291cmNlO1xuICBsb2dnZXIuZGVidWcoXCJzZWxlY3RlZCBiaW5hcnlcIiwgeyBwYXRoOiBzZWxlY3RlZCB9KTtcbiAgcmV0dXJuIHNlbGVjdGVkO1xufVxuXG4vKipcbiAqIFJldHVybiBhbiBleGlzdGluZyBleGVjdXRhYmxlIG9yIGluc3RhbGwgaXQgYXRvbWljYWxseSB1bmRlclxuICogYCRIT01FLy48bmFtZT4vYmluLzxuYW1lPmAuIEluc3RhbGxhdGlvbiB1c2VzIGEgY2hlY2stbG9jay1jaGVjay1sb2FkXG4gKiBzZXF1ZW5jZSBzbyBjb25jdXJyZW50IGNhbGxlcnMgcmVzb2x2ZSBhbmQgZG93bmxvYWQgdGhlIGJpbmFyeSBvbmx5IG9uY2UuXG4gKiBUaGUgZG93bmxvYWRlZCBjYW5kaWRhdGUgYW5kIGZpbmFsIHJlbmFtZWQgZXhlY3V0YWJsZSBtdXN0IGJvdGggcGFzcyB0aGVcbiAqIHNhbWUgZXhlY3V0YWJsZSBhbmQgdmVyc2lvbiBjaGVja3MuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbnN1cmUoXG4gIG5hbWU6IHN0cmluZyxcbiAgdXJsOiBCaW5VcmwsXG4gIG9wdGlvbnM6IEJpbk9wdGlvbnMgPSB7fSxcbik6IFByb21pc2U8QmluQ29udGV4dD4ge1xuICBpZiAob3B0aW9ucy5taW5WZXJzaW9uICYmICFudW1lcmljVmVyc2lvbihvcHRpb25zLm1pblZlcnNpb24sIHRydWUpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgaW52YWxpZCBtaW5pbXVtIGJpbmFyeSB2ZXJzaW9uOiAke29wdGlvbnMubWluVmVyc2lvbn1gKTtcbiAgfVxuICBjb25zdCBkZXN0aW5hdGlvbiA9IGNvbnRleHQobmFtZSwgb3B0aW9ucy5ob21lRGlyID8/IGhvbWVkaXIoKSwgb3B0aW9ucy5kZXN0aW5hdGlvbik7XG4gIGlmIChhd2FpdCBpc1ZhbGlkQmluKGRlc3RpbmF0aW9uLnBhdGgsIG9wdGlvbnMpKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwidXNpbmcgaW5zdGFsbGVkIGJpbmFyeVwiLCB7IG5hbWUsIHBhdGg6IGRlc3RpbmF0aW9uLnBhdGggfSk7XG4gICAgcmV0dXJuIGRlc3RpbmF0aW9uO1xuICB9XG5cbiAgbG9nZ2VyLmRlYnVnKFwid2FpdGluZyBmb3IgYmluYXJ5IGluc3RhbGwgbG9ja1wiLCB7IG5hbWUsIHBhdGg6IGRlc3RpbmF0aW9uLnBhdGggfSk7XG4gIHJldHVybiB3aXRoRmlsZUxvY2soW1wiYmluLmVuc3VyZVwiLCBkZXN0aW5hdGlvbi5wYXRoXSwgYXN5bmMgKCkgPT4ge1xuICAgIGlmIChhd2FpdCBpc1ZhbGlkQmluKGRlc3RpbmF0aW9uLnBhdGgsIG9wdGlvbnMpKSB7XG4gICAgICBsb2dnZXIuZGVidWcoXCJ1c2luZyBiaW5hcnkgaW5zdGFsbGVkIGJ5IGFub3RoZXIgY2FsbGVyXCIsIHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgcGF0aDogZGVzdGluYXRpb24ucGF0aCxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc29sdmVkVXJsID0gdHlwZW9mIHVybCA9PT0gXCJmdW5jdGlvblwiID8gYXdhaXQgdXJsKCkgOiB1cmw7XG4gICAgY29uc3QgZnJvbSA9IGRpc3BsYXlVcmwocmVzb2x2ZWRVcmwpO1xuICAgIGxvZ2dlci5kZWJ1ZyhcImluc3RhbGxpbmcgYmluYXJ5XCIsIHtcbiAgICAgIG5hbWUsXG4gICAgICBmcm9tLFxuICAgICAgdG86IGRlc3RpbmF0aW9uLnBhdGgsXG4gICAgICBtaW5WZXJzaW9uOiBvcHRpb25zLm1pblZlcnNpb24sXG4gICAgfSk7XG4gICAgY29uc3QgdGVtcCA9IGF3YWl0IG1rZHRlbXAoam9pbih0bXBkaXIoKSwgYCR7bmFtZX0tYCkpO1xuICAgIGxldCBzdGFnZWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBhd2FpdCBzZWxlY3RlZEJpbihkZXN0aW5hdGlvbiwgcmVzb2x2ZWRVcmwsIHRlbXAsIG9wdGlvbnMpO1xuICAgICAgYXdhaXQgY2htb2Qoc2VsZWN0ZWQsIDBvNzU1KTtcbiAgICAgIGlmICghKGF3YWl0IGlzVmFsaWRCaW4oc2VsZWN0ZWQsIG9wdGlvbnMpKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHNlbGVjdGVkIGJpbmFyeSBoYXMgbm8gYWNjZXB0YWJsZSB2ZXJzaW9uOiAke3NlbGVjdGVkfWApO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCBta2RpcihkZXN0aW5hdGlvbi5iaW5EaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgc3RhZ2VkID0gam9pbihkZXN0aW5hdGlvbi5iaW5EaXIsIGAuJHtuYW1lfS0ke3JhbmRvbVVVSUQoKX1gKTtcbiAgICAgIGF3YWl0IGNvcHlGaWxlKHNlbGVjdGVkLCBzdGFnZWQpO1xuICAgICAgYXdhaXQgY2htb2Qoc3RhZ2VkLCAwbzc1NSk7XG4gICAgICBhd2FpdCByZW5hbWUoc3RhZ2VkLCBkZXN0aW5hdGlvbi5wYXRoKTtcbiAgICAgIHN0YWdlZCA9IHVuZGVmaW5lZDtcbiAgICAgIGlmICghKGF3YWl0IGlzVmFsaWRCaW4oZGVzdGluYXRpb24ucGF0aCwgb3B0aW9ucykpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW5zdGFsbGVkIGJpbmFyeSBpcyBpbnZhbGlkIGFmdGVyIHJlbmFtZTogJHtkZXN0aW5hdGlvbi5wYXRofWApO1xuICAgICAgfVxuICAgICAgbG9nZ2VyLmluZm8oXCJpbnN0YWxsZWQgYmluYXJ5XCIsIHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgZnJvbSxcbiAgICAgICAgdG86IGRlc3RpbmF0aW9uLnBhdGgsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBkZXN0aW5hdGlvbjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHN0YWdlZCkgYXdhaXQgcm0oc3RhZ2VkLCB7IGZvcmNlOiB0cnVlIH0pO1xuICAgICAgYXdhaXQgcm0odGVtcCwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICAgIH1cbiAgfSk7XG59XG4iXX0=
package/lib/src/exec.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * Portable subprocess helper built on `child_process.spawn` and line streaming.
3
3
  *
4
- * Ported from `dbx-tools-js/packages/cli/src/exec.ts`. Each stdio fd defaults to
5
- * `"inherit"`. {@link spawn} streams output line-by-line into {@link ExecResult.stdoutLines}
4
+ * Each stdio fd defaults to `"inherit"`. {@link spawn} streams output
5
+ * line-by-line into {@link ExecResult.stdoutLines}
6
6
  * / {@link ExecResult.stderrLines}; its `stdout` / `stderr` getters join those lines.
7
7
  * {@link spawnSync} keeps the captured string; its `stdout` / `stderr` getters read
8
8
  * that string directly (line arrays split lazily on read).
package/lib/src/exec.js CHANGED
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * Portable subprocess helper built on `child_process.spawn` and line streaming.
3
3
  *
4
- * Ported from `dbx-tools-js/packages/cli/src/exec.ts`. Each stdio fd defaults to
5
- * `"inherit"`. {@link spawn} streams output line-by-line into {@link ExecResult.stdoutLines}
4
+ * Each stdio fd defaults to `"inherit"`. {@link spawn} streams output
5
+ * line-by-line into {@link ExecResult.stdoutLines}
6
6
  * / {@link ExecResult.stderrLines}; its `stdout` / `stderr` getters join those lines.
7
7
  * {@link spawnSync} keeps the captured string; its `stdout` / `stderr` getters read
8
8
  * that string directly (line arrays split lazily on read).
@@ -529,4 +529,4 @@ export function shlex(command) {
529
529
  push();
530
530
  return args.length ? args : [command];
531
531
  }
532
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0NHO0FBQ0gsT0FBTyxFQUdMLEtBQUssSUFBSSxTQUFTLEVBQ2xCLFNBQVMsSUFBSSxhQUFhLEdBQzNCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxLQUFLLFFBQVEsTUFBTSxlQUFlLENBQUM7QUFFMUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWhELDhFQUE4RTtBQUM5RSxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxHQUFHLENBQUM7QUEwSC9DLFNBQVMsY0FBYyxDQUF5QixLQUFtQjtJQUNqRSxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQy9CLE1BQU0sQ0FBQyxPQUFPLEVBQUUsR0FBRyxXQUFXLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFL0MsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNCLE1BQU0sT0FBTyxHQUNYLElBQUksS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDdkYsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDOUQsTUFBTSxTQUFTLEdBQ2IsY0FBYyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8s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LEdBQUcsSUFBSSxDQUFDO1lBQ2QsU0FBUztRQUNYLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNsQixJQUFJLEVBQUUsQ0FBQztZQUNQLFNBQVM7UUFDWCxDQUFDO1FBRUQsT0FBTyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRUQsK0NBQStDO0lBQy9DLElBQUksS0FBSyxFQUFFLENBQUM7UUFDVixPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkIsQ0FBQztJQUVELGlDQUFpQztJQUNqQyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ1osT0FBTyxJQUFJLElBQUksQ0FBQztJQUNsQixDQUFDO0lBRUQsSUFBSSxFQUFFLENBQUM7SUFFUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN4QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQb3J0YWJsZSBzdWJwcm9jZXNzIGhlbHBlciBidWlsdCBvbiBgY2hpbGRfcHJvY2Vzcy5zcGF3bmAgYW5kIGxpbmUgc3RyZWFtaW5nLlxuICpcbiAqIFBvcnRlZCBmcm9tIGBkYngtdG9vbHMtanMvcGFja2FnZXMvY2xpL3NyYy9leGVjLnRzYC4gRWFjaCBzdGRpbyBmZCBkZWZhdWx0cyB0b1xuICogYFwiaW5oZXJpdFwiYC4ge0BsaW5rIHNwYXdufSBzdHJlYW1zIG91dHB1dCBsaW5lLWJ5LWxpbmUgaW50byB7QGxpbmsgRXhlY1Jlc3VsdC5zdGRvdXRMaW5lc31cbiAqIC8ge0BsaW5rIEV4ZWNSZXN1bHQuc3RkZXJyTGluZXN9OyBpdHMgYHN0ZG91dGAgLyBgc3RkZXJyYCBnZXR0ZXJzIGpvaW4gdGhvc2UgbGluZXMuXG4gKiB7QGxpbmsgc3Bhd25TeW5jfSBrZWVwcyB0aGUgY2FwdHVyZWQgc3RyaW5nOyBpdHMgYHN0ZG91dGAgLyBgc3RkZXJyYCBnZXR0ZXJzIHJlYWRcbiAqIHRoYXQgc3RyaW5nIGRpcmVjdGx5IChsaW5lIGFycmF5cyBzcGxpdCBsYXppbHkgb24gcmVhZCkuXG4gKiBPbWl0dGVkIGB0cmltYCAoZGVmYXVsdCkgYXBwbGllcyBhZGFwdGl2ZSBub3JtYWxpemF0aW9uOiB7QGxpbmsgc3Bhd25TeW5jfSBkcm9wc1xuICogYXQgbW9zdCBvbmUgdHJhaWxpbmcgZW1wdHkgbGluZSAvIG5ld2xpbmUgYHNwYXduU3luY2AgYWRkczsge0BsaW5rIHNwYXdufSBkb2VzXG4gKiBub3QgKHJlYWRsaW5lIG5ldmVyIGVtaXRzIHRoYXQgZXh0cmEgbGluZSkuIGB0cmltOiB0cnVlYCBzdHJpcHMgYWxsIGxlYWRpbmcvXG4gKiB0cmFpbGluZyB3aGl0ZXNwYWNlIGluIGJvdGggbW9kZXM7IGB0cmltOiBmYWxzZWAgbGVhdmVzIG91dHB1dCB1bmNoYW5nZWQuXG4gKlxuICogQGV4YW1wbGUgQ2FwdHVyZSBjb21tYW5kIG91dHB1dFxuICogYGBgdHNcbiAqIGNvbnN0IHsgc3Rkb3V0IH0gPSBhd2FpdCBleGVjKFwiZ2l0XCIsIFtcInJldi1wYXJzZVwiLCBcIi0tc2hvdy10b3BsZXZlbFwiXSwge1xuICogICBzdGRvdXQ6IFwiY2FwdHVyZVwiLFxuICogICBzdGRlcnI6IFwiaWdub3JlXCIsXG4gKiAgIHN0ZGluOiBcImlnbm9yZVwiLFxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSBTdHJlYW0gYW5kIGNhcHR1cmUgdG9nZXRoZXJcbiAqIGBgYHRzXG4gKiBhd2FpdCBleGVjKFwicG5wbVwiLCBbXCJpbnN0YWxsXCJdLCB7XG4gKiAgIHN0ZG91dDogWyhsaW5lKSA9PiBjb25zb2xlLmxvZyhsaW5lKSwgXCJjYXB0dXJlXCJdLFxuICogICBjaGVjazogdHJ1ZSxcbiAqIH0pO1xuICogYGBgXG4gKlxuICogQGV4YW1wbGUgU3luY2hyb25vdXMgY2FwdHVyZSAobm8gbGluZSBjYWxsYmFja3MpXG4gKiBgYGB0c1xuICogY29uc3QgeyBzdGRvdXQgfSA9IGV4ZWNTeW5jKFwiZ2l0XCIsIFtcInJldi1wYXJzZVwiLCBcIi0tc2hvdy10b3BsZXZlbFwiXSwge1xuICogICBzdGRvdXQ6IFwiY2FwdHVyZVwiLFxuICogICBzdGRlcnI6IFwiaWdub3JlXCIsXG4gKiAgIHN0ZGluOiBcImlnbm9yZVwiLFxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAbW9kdWxlXG4gKi9cbmltcG9ydCB7XG4gIHR5cGUgQ2hpbGRQcm9jZXNzLFxuICB0eXBlIFNwYXduT3B0aW9ucyxcbiAgc3Bhd24gYXMgbm9kZVNwYXduLFxuICBzcGF3blN5bmMgYXMgbm9kZVNwYXduU3luYyxcbn0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0ICogYXMgcmVhZGxpbmUgZnJvbSBcIm5vZGU6cmVhZGxpbmVcIjtcbmltcG9ydCB7IFJlYWRhYmxlIH0gZnJvbSBcIm5vZGU6c3RyZWFtXCI7XG5pbXBvcnQgeyBmaW5pc2hlZCB9IGZyb20gXCJub2RlOnN0cmVhbS9wcm9taXNlc1wiO1xuXG4vKiogU2hlbGwtY29tcGF0aWJsZSBleGl0IGNvZGUgcmV0dXJuZWQgd2hlbiBhbiBleGVjdXRhYmxlIGNhbm5vdCBiZSBmb3VuZC4gKi9cbmV4cG9ydCBjb25zdCBDT01NQU5EX05PVF9GT1VORF9FWElUX0NPREUgPSAxMjc7XG5cbi8qKiBTdGRpbyBtb2RlIGZvciBhIHN1YnByb2Nlc3MgZmQuICovXG5leHBvcnQgdHlwZSBFeGVjU3RkaW8gPSBcImluaGVyaXRcIiB8IFwicGlwZVwiIHwgXCJpZ25vcmVcIjtcblxuLyoqIEludm9rZWQgb25jZSBwZXIgb3V0cHV0IGxpbmUgd2hlbiBhIGZkIGlzIHBpcGVkLiAqL1xuZXhwb3J0IHR5cGUgTGluZUhhbmRsZXIgPSAobGluZTogc3RyaW5nKSA9PiB2b2lkO1xuXG4vKipcbiAqIFN0ZGlvIGNvbmZpZyBmb3Igb25lIGZkLlxuICpcbiAqIC0gYFwiaW5oZXJpdFwiYCAvIGBcInBpcGVcImAgLyBgXCJpZ25vcmVcImAg4oCUIHBhc3MgdGhyb3VnaCB0byBgc3Bhd25gXG4gKiAtIGBcImNhcHR1cmVcImAg4oCUIHBpcGUgdGhlIGZkIGFuZCBhcHBlbmQgZWFjaCBsaW5lIHRvIHRoZSByZXN1bHRcbiAqIC0ge0BsaW5rIExpbmVIYW5kbGVyfSDigJQgcGlwZSBhbmQgaW52b2tlIHRoZSBoYW5kbGVyIHBlciBsaW5lIChsaW5lcyBhcmUgc3RpbGwgY2FwdHVyZWQpXG4gKiAtIGAoTGluZUhhbmRsZXIgfCBcImNhcHR1cmVcIilbXWAg4oCUIHBpcGU7IGBcImNhcHR1cmVcImAgaXMgYSBuby1vcCBtYXJrZXIsIGhhbmRsZXJzIHJ1biBwZXIgbGluZVxuICovXG5leHBvcnQgdHlwZSBTdGRpb09wdGlvbiA9IEV4ZWNTdGRpbyB8IExpbmVIYW5kbGVyIHwgXCJjYXB0dXJlXCIgfCAoTGluZUhhbmRsZXIgfCBcImNhcHR1cmVcIilbXTtcblxuLyoqIE91dGNvbWUgb2Yge0BsaW5rIHNwYXdufSAvIHtAbGluayBzcGF3blN5bmN9OiBleGl0IGNvZGUsIGNhcHR1cmVkIG91dHB1dCwgYW5kIGxpbmUgdmlld3MuICovXG5leHBvcnQgdHlwZSBFeGVjUmVzdWx0ID0ge1xuICBleGl0Q29kZTogbnVtYmVyO1xuICAvKipcbiAgICogQ2FwdHVyZWQgc3Rkb3V0IGxpbmVzLiBGb3Ige0BsaW5rIHNwYXdufSB0aGVzZSBhcmUgYnVpbHQgd2hpbGUgdGhlIHByb2Nlc3MgcnVucztcbiAgICogZm9yIHtAbGluayBzcGF3blN5bmN9IHRoZXkgYXJlIHNwbGl0IGZyb20gdGhlIGNhcHR1cmVkIHN0cmluZyBvbiBmaXJzdCByZWFkLlxuICAgKi9cbiAgcmVhZG9ubHkgc3Rkb3V0TGluZXM6IHN0cmluZ1tdO1xuICAvKipcbiAgICogQ2FwdHVyZWQgc3RkZXJyIGxpbmVzLiBGb3Ige0BsaW5rIHNwYXdufSB0aGVzZSBhcmUgYnVpbHQgd2hpbGUgdGhlIHByb2Nlc3MgcnVucztcbiAgICogZm9yIHtAbGluayBzcGF3blN5bmN9IHRoZXkgYXJlIHNwbGl0IGZyb20gdGhlIGNhcHR1cmVkIHN0cmluZyBvbiBmaXJzdCByZWFkLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RkZXJyTGluZXM6IHN0cmluZ1tdO1xuICAvKipcbiAgICogQ2FwdHVyZWQgc3Rkb3V0IHRleHQuIHtAbGluayBzcGF3blN5bmN9IHJlYWRzIHRoZSBjYXB0dXJlZCBzdHJpbmc7XG4gICAqIHtAbGluayBzcGF3bn0gam9pbnMge0BsaW5rIHN0ZG91dExpbmVzfS4gU2VlIGB0cmltYCBmb3Igbm9ybWFsaXphdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IHN0ZG91dDogc3RyaW5nO1xuICAvKipcbiAgICogQ2FwdHVyZWQgc3RkZXJyIHRleHQuIHtAbGluayBzcGF3blN5bmN9IHJlYWRzIHRoZSBjYXB0dXJlZCBzdHJpbmc7XG4gICAqIHtAbGluayBzcGF3bn0gam9pbnMge0BsaW5rIHN0ZGVyckxpbmVzfS4gU2VlIGB0cmltYCBmb3Igbm9ybWFsaXphdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IHN0ZGVycjogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBXaGF0IHtAbGluayBzcGF3bn0gcmV0dXJuczogdGhlIExJVkUgYENoaWxkUHJvY2Vzc2AgaGFuZGxlIHRoYXQgaXMgQUxTTyBhXG4gKiBgUHJvbWlzZTxFeGVjUmVzdWx0PmAgcmVzb2x2aW5nIG9uIGV4aXQuXG4gKlxuICogVGhpcyBpcyBhZGRpdGl2ZSAtIHRoZSBvYmplY3Qgc3RpbGwgc2F0aXNmaWVzIGBQcm9taXNlPEV4ZWNSZXN1bHQ+YCwgc28gZXZlcnlcbiAqIGV4aXN0aW5nIGBhd2FpdCBzcGF3biguLi4pYCAvIGBzcGF3biguLi4pLnRoZW4oLi4uKWAgY2FsbGVyIGlzIHVuY2hhbmdlZC4gV2hhdFxuICogaXMgbmV3IGlzIHRoYXQgdGhlIHNhbWUgdmFsdWUgaXMgdGhlIGxpdmUgY2hpbGQ6IGNhbGxlcnMgdGhhdCB3YW50IHRvIHN1cGVydmlzZVxuICogaXQgKHJlYWQgYC5waWRgLCBgLmtpbGwoc2lnbmFsKWAsIGxpc3RlbiBmb3IgYGV4aXRgKSBjYW4sIHdpdGhvdXQgYSBzZWNvbmRcbiAqIHNwYXduLiBgQGRieC10b29scy9hcHBraXRgJ3MgYGJpbmRQcm9jZXNzYCBjb25zdW1lcyBleGFjdGx5IHRoaXMgLSBvbmUgY29kZSBwYXRoXG4gKiBzdXBlcnZpc2VzIGJvdGggYSBiYXJlIGBDaGlsZFByb2Nlc3NgIChlLmcuIHBvcnRyKSBhbmQgYSBgc3Bhd24oKWAgcmVzdWx0LlxuICpcbiAqIEBleGFtcGxlIEF3YWl0IGl0ICh1bmNoYW5nZWQpXG4gKiBjb25zdCB7IHN0ZG91dCB9ID0gYXdhaXQgc3Bhd24oXCJnaXRcIiwgW1wicmV2LXBhcnNlXCIsIFwiSEVBRFwiXSwgeyBzdGRvdXQ6IFwiY2FwdHVyZVwiIH0pO1xuICpcbiAqIEBleGFtcGxlIFN1cGVydmlzZSBpdFxuICogY29uc3QgcHJvYyA9IHNwYXduKFwiYnVuXCIsIFtcInNyYy9zZXJ2ZXIudHNcIl0pO1xuICogY3R4LmJpbmRQcm9jZXNzKHByb2MpOyAgICAgICAgICAgIC8vIGxpdmUgaGFuZGxlXG4gKiBjb25zdCB7IGV4aXRDb2RlIH0gPSBhd2FpdCBwcm9jOyAgLy8gc3RpbGwgYSBwcm9taXNlXG4gKi9cbmV4cG9ydCB0eXBlIENoaWxkUHJvY2Vzc1Jlc3VsdCA9IENoaWxkUHJvY2VzcyAmIFByb21pc2U8RXhlY1Jlc3VsdD47XG5cbi8qKiBPcHRpb25zIGZvciB7QGxpbmsgc3Bhd259LiBFeHRlbmRzIGBTcGF3bk9wdGlvbnNgIGV4Y2VwdCBgc3RkaW9gLCB3aGljaCBpcyBkcml2ZW4gYnkgYHN0ZGluYCAvIGBzdGRvdXRgIC8gYHN0ZGVycmAuICovXG5leHBvcnQgdHlwZSBFeGVjT3B0aW9ucyA9IE9taXQ8U3Bhd25PcHRpb25zLCBcInN0ZGlvXCI+ICYge1xuICAvKiogYFwiaW5oZXJpdFwiYCBieSBkZWZhdWx0OyBgXCJwaXBlXCJgIC8gYFwiaWdub3JlXCJgIHNlbGVjdCBtb2RlcywgYW55IG90aGVyIHN0cmluZyBpcyBpbnB1dC4gKi9cbiAgc3RkaW4/OiBFeGVjU3RkaW8gfCBzdHJpbmc7XG4gIHN0ZG91dD86IFN0ZGlvT3B0aW9uO1xuICBzdGRlcnI/OiBTdGRpb09wdGlvbjtcbiAgLyoqIFRocm93IHdoZW4gdGhlIHByb2Nlc3MgZXhpdHMgd2l0aCBhIG5vbi16ZXJvIGNvZGUuICovXG4gIGNoZWNrPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIE9taXR0ZWQg4oCUIGFkYXB0aXZlIHRyaW0gKHtAbGluayBzcGF3blN5bmN9IGRyb3BzIG9uZSBzcGF3biB0cmFpbGluZyBuZXdsaW5lLFxuICAgKiB7QGxpbmsgc3Bhd259IGRvZXMgbm90KTsgYHRydWVgIOKAlCBzdHJpcCBhbGwgbGVhZGluZy90cmFpbGluZyB3aGl0ZXNwYWNlO1xuICAgKiBgZmFsc2VgIOKAlCBsZWF2ZSBjYXB0dXJlZCBvdXRwdXQgdW5jaGFuZ2VkLlxuICAgKi9cbiAgdHJpbT86IGJvb2xlYW47XG59O1xuXG4vKiogU3RkaW8gbW9kZSBmb3Ige0BsaW5rIHNwYXduU3luY30gKG5vIHBlci1saW5lIGNhbGxiYWNrcykuICovXG5leHBvcnQgdHlwZSBTeW5jRXhlY1N0ZGlvID0gRXhlY1N0ZGlvIHwgXCJjYXB0dXJlXCI7XG5cbi8qKiBPcHRpb25zIGZvciB7QGxpbmsgc3Bhd25TeW5jfS4gU2FtZSBzaGFwZSBhcyB7QGxpbmsgRXhlY09wdGlvbnN9IGJ1dCB3aXRob3V0IGxpbmUtaGFuZGxlciBzdGRpby4gKi9cbmV4cG9ydCB0eXBlIFN5bmNFeGVjT3B0aW9ucyA9IE9taXQ8U3Bhd25PcHRpb25zLCBcInN0ZGlvXCI+ICYge1xuICAvKiogYFwiaW5oZXJpdFwiYCBieSBkZWZhdWx0OyBgXCJwaXBlXCJgIC8gYFwiaWdub3JlXCJgIHNlbGVjdCBtb2RlcywgYW55IG90aGVyIHN0cmluZyBpcyBpbnB1dC4gKi9cbiAgc3RkaW4/OiBFeGVjU3RkaW8gfCBzdHJpbmc7XG4gIHN0ZG91dD86IFN5bmNFeGVjU3RkaW87XG4gIHN0ZGVycj86IFN5bmNFeGVjU3RkaW87XG4gIC8qKiBUaHJvdyB3aGVuIHRoZSBwcm9jZXNzIGV4aXRzIHdpdGggYSBub24temVybyBjb2RlLiAqL1xuICBjaGVjaz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBPbWl0dGVkIOKAlCBhZGFwdGl2ZSB0cmltICh7QGxpbmsgc3Bhd25TeW5jfSBkcm9wcyBvbmUgc3Bhd24gdHJhaWxpbmcgbmV3bGluZSxcbiAgICoge0BsaW5rIHNwYXdufSBkb2VzIG5vdCk7IGB0cnVlYCDigJQgc3RyaXAgYWxsIGxlYWRpbmcvdHJhaWxpbmcgd2hpdGVzcGFjZTtcbiAgICogYGZhbHNlYCDigJQgbGVhdmUgY2FwdHVyZWQgb3V0cHV0IHVuY2hhbmdlZC5cbiAgICovXG4gIHRyaW0/OiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBTcGF3biBzdGRpbyBtb2RlIHBsdXMgYW4gb3B0aW9uYWwgcGVyLWxpbmUgY2FsbGJhY2sgYWZ0ZXIge0BsaW5rIHJlc29sdmVTdGRpb31cbiAqIG1hcHMgYSB7QGxpbmsgU3RkaW9PcHRpb259IGludG8gc29tZXRoaW5nIGBzcGF3bmAgY2FuIGNvbnN1bWUuXG4gKi9cbnR5cGUgUmVzb2x2ZWRTdGRpbyA9IHtcbiAgLyoqIFZhbHVlIHBhc3NlZCB0byBgc3Bhd25gJ3MgYHN0ZGlvYCB0dXBsZSBmb3IgdGhpcyBmZC4gKi9cbiAgbW9kZTogRXhlY1N0ZGlvO1xuICAvKiogV2hlbiBzZXQsIGVhY2ggb3V0cHV0IGxpbmUgaXMgYXBwZW5kZWQgdG8gdGhlIGNhcHR1cmUgYnVmZmVyIGFuZCBmb3J3YXJkZWQgaGVyZS4gKi9cbiAgb25MaW5lPzogTGluZUhhbmRsZXI7XG59O1xuXG5leHBvcnQgdHlwZSBTcGF3bkFyZ3M8VCBleHRlbmRzIFNwYXduT3B0aW9ucz4gPVxuICB8IFtjb21tYW5kOiBzdHJpbmcsIC4uLmFyZ3M6IHN0cmluZ1tdXVxuICB8IFtjb21tYW5kOiBzdHJpbmcsIGFyZ3M6IHJlYWRvbmx5IHN0cmluZ1tdXVxuICB8IFtjb21tYW5kOiBzdHJpbmcsIGFyZ3M6IHJlYWRvbmx5IHN0cmluZ1tdLCBvcHRpb25zOiBUXVxuICB8IFtjb21tYW5kOiBzdHJpbmcsIC4uLmFyZ3NBbmRPcHRpb25zOiBbLi4uc3RyaW5nW10sIFRdXTtcblxuaW50ZXJmYWNlIFBhcnNlZFNwYXduQXJnczxUIGV4dGVuZHMgU3Bhd25PcHRpb25zPiB7XG4gIGNvbW1hbmQ6IHN0cmluZztcbiAgY29tbWFuZEFyZ3M6IHN0cmluZ1tdO1xuICBvcHRpb25zPzogVDtcbn1cblxuZnVuY3Rpb24gcGFyc2VTcGF3bkFyZ3M8VCBleHRlbmRzIFNwYXduT3B0aW9ucz4oaW5wdXQ6IFNwYXduQXJnczxUPik6IFBhcnNlZFNwYXduQXJnczxUPiB7XG4gIGxldCBbdmFsdWUsIC4uLnZhbHVlc10gPSBpbnB1dDtcbiAgY29uc3QgW2NvbW1hbmQsIC4uLmNvbW1hbmRBcmdzXSA9IHNobGV4KHZhbHVlKTtcblxuICBjb25zdCBsYXN0ID0gdmFsdWVzLmF0KC0xKTtcbiAgY29uc3Qgb3B0aW9ucyA9XG4gICAgbGFzdCAhPT0gbnVsbCAmJiB0eXBlb2YgbGFzdCA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShsYXN0KSA/IGxhc3QgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGFyZ3VtZW50VmFsdWVzID0gb3B0aW9ucyA/IHZhbHVlcy5zbGljZSgwLCAtMSkgOiB2YWx1ZXM7XG4gIGNvbnN0IHZhbHVlQXJnczogc3RyaW5nW10gPVxuICAgIGFyZ3VtZW50VmFsdWVzLmxlbmd0aCA9PT0gMSAmJiBBcnJheS5pc0FycmF5KGFyZ3VtZW50VmFsdWVzWzBdKVxuICAgICAgPyBbLi4uYXJndW1lbnRWYWx1ZXNbMF1dXG4gICAgICA6IGFyZ3VtZW50VmFsdWVzO1xuXG4gIHJldHVybiB7XG4gICAgY29tbWFuZCxcbiAgICBjb21tYW5kQXJnczogWy4uLmNvbW1hbmRBcmdzLCAuLi52YWx1ZUFyZ3NdLFxuICAgIG9wdGlvbnM6IG9wdGlvbnMgYXMgVCxcbiAgfTtcbn1cblxuLyoqXG4gKiBEcm9wIHRoZSBzaW5nbGUgdHJhaWxpbmcgZW1wdHkgZW50cnkgYHNwYXduU3luY2AgYWRkcyB3aGVuIHNwbGl0dGluZyBvbiBhIGZpbmFsXG4gKiBuZXdsaW5lIChgXCJoaVxcblwiYCAtPiBgW1wiaGlcIiwgXCJcIl1gKS4gRG9lcyBub3QgcmVtb3ZlIG11bHRpcGxlIHRyYWlsaW5nIGVtcHRpZXMuXG4gKi9cbmZ1bmN0aW9uIHdpdGhvdXRTcGF3blRyYWlsaW5nRW1wdHlMaW5lKGxpbmVzOiByZWFkb25seSBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgaWYgKGxpbmVzLmxlbmd0aCA+IDAgJiYgbGluZXNbbGluZXMubGVuZ3RoIC0gMV0gPT09IFwiXCIpIHtcbiAgICByZXR1cm4gbGluZXMuc2xpY2UoMCwgLTEpO1xuICB9XG4gIHJldHVybiBsaW5lcyBhcyBzdHJpbmdbXTtcbn1cblxuLyoqIFJlbW92ZSBhdCBtb3N0IG9uZSB0cmFpbGluZyBuZXdsaW5lIGZyb20gY2FwdHVyZWQgc3Bhd24gc3Rkb3V0L3N0ZGVyciB0ZXh0LiAqL1xuZnVuY3Rpb24gdHJpbVNpbmdsZVRyYWlsaW5nTmV3bGluZSh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAodGV4dC5lbmRzV2l0aChcIlxcclxcblwiKSkgcmV0dXJuIHRleHQuc2xpY2UoMCwgLTIpO1xuICBpZiAodGV4dC5lbmRzV2l0aChcIlxcblwiKSkgcmV0dXJuIHRleHQuc2xpY2UoMCwgLTEpO1xuICByZXR1cm4gdGV4dDtcbn1cblxuLyoqIExpbmUtYXJyYXkgdmlldyBvZiBhc3luYy1jYXB0dXJlZCBvdXRwdXQuICovXG5mdW5jdGlvbiBub3JtYWxpemVkQXN5bmNMaW5lcyhsaW5lczogcmVhZG9ubHkgc3RyaW5nW10sIHRyaW06IGJvb2xlYW4gfCB1bmRlZmluZWQpOiBzdHJpbmdbXSB7XG4gIGlmICh0cmltID09PSB0cnVlKSByZXR1cm4gbGluZXNGcm9tQ2FwdHVyZWRPdXRwdXQobGluZXMuam9pbihcIlxcblwiKS50cmltKCkpO1xuICByZXR1cm4gbGluZXMgYXMgc3RyaW5nW107XG59XG5cbi8qKiBKb2luIGFzeW5jLWNhcHR1cmVkIGxpbmVzIGludG8gc3Rkb3V0L3N0ZGVyciB0ZXh0LiAqL1xuZnVuY3Rpb24gZm9ybWF0QXN5bmNDYXB0dXJlZExpbmVzKGxpbmVzOiByZWFkb25seSBzdHJpbmdbXSwgdHJpbTogYm9vbGVhbiB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gIGNvbnN0IGpvaW5lZCA9IGxpbmVzLmpvaW4oXCJcXG5cIik7XG4gIHJldHVybiB0cmltID09PSB0cnVlID8gam9pbmVkLnRyaW0oKSA6IGpvaW5lZDtcbn1cblxuLyoqIExpbmUtYXJyYXkgdmlldyBvZiBzeW5jLWNhcHR1cmVkIG91dHB1dC4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZWRTeW5jTGluZXMobGluZXM6IHJlYWRvbmx5IHN0cmluZ1tdLCB0cmltOiBib29sZWFuIHwgdW5kZWZpbmVkKTogc3RyaW5nW10ge1xuICBpZiAodHJpbSA9PT0gZmFsc2UpIHJldHVybiBsaW5lcyBhcyBzdHJpbmdbXTtcbiAgaWYgKHRyaW0gPT09IHRydWUpIHJldHVybiBsaW5lc0Zyb21DYXB0dXJlZE91dHB1dChsaW5lcy5qb2luKFwiXFxuXCIpLnRyaW0oKSk7XG4gIHJldHVybiB3aXRob3V0U3Bhd25UcmFpbGluZ0VtcHR5TGluZShsaW5lcyk7XG59XG5cbi8qKiBGb3JtYXQgc3luYy1jYXB0dXJlZCBzdGRvdXQvc3RkZXJyIHRleHQuICovXG5mdW5jdGlvbiBmb3JtYXRTeW5jQ2FwdHVyZWRUZXh0KFxuICB0ZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHRyaW06IGJvb2xlYW4gfCB1bmRlZmluZWQsXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAodGV4dCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAodHJpbSA9PT0gZmFsc2UpIHJldHVybiB0ZXh0O1xuICBpZiAodHJpbSA9PT0gdHJ1ZSkgcmV0dXJuIHRleHQudHJpbSgpO1xuICByZXR1cm4gdHJpbVNpbmdsZVRyYWlsaW5nTmV3bGluZSh0ZXh0KTtcbn1cblxuLyoqXG4gKiBIdW1hbi1yZWFkYWJsZSBsYWJlbCBmb3IgYSBzcGF3bmVkIGNvbW1hbmQsIHVzZWQgaW4gZXJyb3IgbWVzc2FnZXMuXG4gKlxuICogQHBhcmFtIGNvbW1hbmQgLSBFeGVjdXRhYmxlIG5hbWUgb3IgcGF0aFxuICogQHBhcmFtIGFyZ3MgLSBBcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBleGVjdXRhYmxlXG4gKiBAcmV0dXJucyBCYWNrdGljay13cmFwcGVkIGBjb21tYW5kIGFyZzEgYXJnMiAuLi5gIHN0cmluZ1xuICovXG5mdW5jdGlvbiBjb21tYW5kTGFiZWwoY29tbWFuZDogc3RyaW5nLCBhcmdzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIHJldHVybiBgXFxgJHtjb21tYW5kfSAke2FyZ3Muam9pbihcIiBcIil9XFxgYDtcbn1cblxuLyoqIFJldHVybiB3aGV0aGVyIE5vZGUgZmFpbGVkIHRvIHNwYXduIGJlY2F1c2UgdGhlIGV4ZWN1dGFibGUgd2FzIG5vdCBmb3VuZC4gKi9cbmZ1bmN0aW9uIGlzQ29tbWFuZE5vdEZvdW5kRXJyb3IoZXJyb3I6IHVua25vd24pOiBlcnJvciBpcyBOb2RlSlMuRXJybm9FeGNlcHRpb24ge1xuICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiBcImNvZGVcIiBpbiBlcnJvciAmJiBlcnJvci5jb2RlID09PSBcIkVOT0VOVFwiO1xufVxuXG4vKipcbiAqIEJ1aWxkIHRoZSBvYmplY3QgcmV0dXJuZWQgZnJvbSB7QGxpbmsgc3Bhd259IHdpdGggbGl2ZSBsaW5lIGFycmF5cyBhbmQgbGF6eVxuICogdHJpbW1lZCBgc3Rkb3V0YCAvIGBzdGRlcnJgIGdldHRlcnMgZGVyaXZlZCBmcm9tIHRob3NlIGxpbmVzLlxuICovXG5mdW5jdGlvbiBjcmVhdGVFeGVjUmVzdWx0KFxuICBleGl0Q29kZTogbnVtYmVyLFxuICBzdGRvdXRMaW5lczogc3RyaW5nW10sXG4gIHN0ZGVyckxpbmVzOiBzdHJpbmdbXSxcbiAgdHJpbTogYm9vbGVhbiB8IHVuZGVmaW5lZCxcbik6IEV4ZWNSZXN1bHQge1xuICByZXR1cm4ge1xuICAgIGV4aXRDb2RlLFxuICAgIGdldCBzdGRvdXRMaW5lcygpIHtcbiAgICAgIHJldHVybiBub3JtYWxpemVkQXN5bmNMaW5lcyhzdGRvdXRMaW5lcywgdHJpbSk7XG4gICAgfSxcbiAgICBnZXQgc3RkZXJyTGluZXMoKSB7XG4gICAgICByZXR1cm4gbm9ybWFsaXplZEFzeW5jTGluZXMoc3RkZXJyTGluZXMsIHRyaW0pO1xuICAgIH0sXG4gICAgZ2V0IHN0ZG91dCgpIHtcbiAgICAgIHJldHVybiBmb3JtYXRBc3luY0NhcHR1cmVkTGluZXMoc3Rkb3V0TGluZXMsIHRyaW0pO1xuICAgIH0sXG4gICAgZ2V0IHN0ZGVycigpIHtcbiAgICAgIHJldHVybiBmb3JtYXRBc3luY0NhcHR1cmVkTGluZXMoc3RkZXJyTGluZXMsIHRyaW0pO1xuICAgIH0sXG4gIH07XG59XG5cbi8qKlxuICogQnVpbGQgdGhlIG9iamVjdCByZXR1cm5lZCBmcm9tIHtAbGluayBzcGF3blN5bmN9LiBDYXB0dXJlZCBzdHJpbmdzIGFyZSBzdG9yZWRcbiAqIGFzLWlzOyBgc3Rkb3V0YCAvIGBzdGRlcnJgIHRyaW0gZGlyZWN0bHksIGFuZCBsaW5lIGFycmF5cyBzcGxpdCBvbmx5IG9uIHJlYWQuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVN5bmNFeGVjUmVzdWx0KFxuICBleGl0Q29kZTogbnVtYmVyLFxuICBzdGRvdXRUZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHN0ZGVyclRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgdHJpbTogYm9vbGVhbiB8IHVuZGVmaW5lZCxcbik6IEV4ZWNSZXN1bHQge1xuICBsZXQgc3Rkb3V0TGluZXNDYWNoZTogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG4gIGxldCBzdGRlcnJMaW5lc0NhY2hlOiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcblxuICBjb25zdCBzeW5jTGluZXMgPSAodGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nW10gfCB1bmRlZmluZWQgPT4ge1xuICAgIGlmICh0ZXh0ID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZWRTeW5jTGluZXMobGluZXNGcm9tQ2FwdHVyZWRPdXRwdXQodGV4dCksIHRyaW0pO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgZXhpdENvZGUsXG4gICAgZ2V0IHN0ZG91dExpbmVzKCkge1xuICAgICAgaWYgKHN0ZG91dFRleHQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIFtdO1xuICAgICAgc3Rkb3V0TGluZXNDYWNoZSA/Pz0gc3luY0xpbmVzKHN0ZG91dFRleHQpID8/IFtdO1xuICAgICAgcmV0dXJuIHN0ZG91dExpbmVzQ2FjaGU7XG4gICAgfSxcbiAgICBnZXQgc3RkZXJyTGluZXMoKSB7XG4gICAgICBpZiAoc3RkZXJyVGV4dCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gW107XG4gICAgICBzdGRlcnJMaW5lc0NhY2hlID8/PSBzeW5jTGluZXMoc3RkZXJyVGV4dCkgPz8gW107XG4gICAgICByZXR1cm4gc3RkZXJyTGluZXNDYWNoZTtcbiAgICB9LFxuICAgIGdldCBzdGRvdXQoKSB7XG4gICAgICByZXR1cm4gZm9ybWF0U3luY0NhcHR1cmVkVGV4dChzdGRvdXRUZXh0LCB0cmltKSA/PyBcIlwiO1xuICAgIH0sXG4gICAgZ2V0IHN0ZGVycigpIHtcbiAgICAgIHJldHVybiBmb3JtYXRTeW5jQ2FwdHVyZWRUZXh0KHN0ZGVyclRleHQsIHRyaW0pID8/IFwiXCI7XG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0IHVzZXItc3VwcGxpZWQgbGluZSBoYW5kbGVycyBmcm9tIGEge0BsaW5rIFN0ZGlvT3B0aW9ufS5cbiAqXG4gKiBUaGUgYFwiY2FwdHVyZVwiYCBtYXJrZXIgaXMgZmlsdGVyZWQgb3V0OyBjYXB0dXJlIGl0c2VsZiBpcyBhbHdheXMgaGFuZGxlZCBieVxuICogcHVzaGluZyBpbnRvIHRoZSBsaW5lIGJ1ZmZlciBpbnNpZGUge0BsaW5rIHJlc29sdmVTdGRpb30uXG4gKlxuICogQHBhcmFtIG9wdGlvbiAtIFN0ZGlvIG9wdGlvbiB0aGF0IG1heSBlbWJlZCBvbmUgb3IgbW9yZSBoYW5kbGVyc1xuICogQHJldHVybnMgSGFuZGxlcnMgdG8gaW52b2tlIGFmdGVyIGVhY2ggY2FwdHVyZWQgbGluZSAobWF5IGJlIGVtcHR5KVxuICovXG5mdW5jdGlvbiBsaW5lSGFuZGxlcnMob3B0aW9uOiBTdGRpb09wdGlvbik6IExpbmVIYW5kbGVyW10ge1xuICBpZiAodHlwZW9mIG9wdGlvbiA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gW29wdGlvbl07XG4gIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbikpIHtcbiAgICByZXR1cm4gb3B0aW9uLmZpbHRlcigoaXRlbSk6IGl0ZW0gaXMgTGluZUhhbmRsZXIgPT4gaXRlbSAhPT0gXCJjYXB0dXJlXCIpO1xuICB9XG4gIHJldHVybiBbXTtcbn1cblxuLyoqXG4gKiBUcnVlIHdoZW4gYSBzdGRpbyBvcHRpb24gaXMgYSBzdHJpbmcgc3Bhd24gbW9kZSByYXRoZXIgdGhhbiBjYXB0dXJlL2hhbmRsZXJzLlxuICpcbiAqIHtAbGluayByZXNvbHZlU3RkaW99IHN0aWxsIHRyZWF0cyBgXCJwaXBlXCJgIGFzIHBpcGUtYW5kLWNhcHR1cmU7IG9ubHlcbiAqIGBcImluaGVyaXRcImAgYW5kIGBcImlnbm9yZVwiYCByZXR1cm4gd2l0aG91dCBhIGxpbmUgY2FsbGJhY2suXG4gKlxuICogQHBhcmFtIG9wdGlvbiAtIFN0ZGlvIG9wdGlvbiB0byBjbGFzc2lmeVxuICogQHJldHVybnMgV2hldGhlciBgb3B0aW9uYCBpcyBgXCJpbmhlcml0XCJgLCBgXCJwaXBlXCJgLCBvciBgXCJpZ25vcmVcImBcbiAqL1xuZnVuY3Rpb24gaXNQYXNzdGhyb3VnaE1vZGUob3B0aW9uOiB1bmtub3duKTogb3B0aW9uIGlzIEV4ZWNTdGRpbyB7XG4gIHJldHVybiBvcHRpb24gPT09IFwiaW5oZXJpdFwiIHx8IG9wdGlvbiA9PT0gXCJwaXBlXCIgfHwgb3B0aW9uID09PSBcImlnbm9yZVwiO1xufVxuXG4vKiogVHJ1ZSB3aGVuIHN0ZGluIGlzIGRhdGEgcmF0aGVyIHRoYW4gb25lIG9mIHRoZSB0aHJlZSByZXNlcnZlZCBzdGRpbyBtb2Rlcy4gKi9cbmZ1bmN0aW9uIGlzU3RkaW5QYXlsb2FkKHN0ZGluOiBFeGVjU3RkaW8gfCBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdGRpbiBpcyBzdHJpbmcge1xuICByZXR1cm4gdHlwZW9mIHN0ZGluID09PSBcInN0cmluZ1wiICYmICFpc1Bhc3N0aHJvdWdoTW9kZShzdGRpbik7XG59XG5cbi8qKlxuICogTWFwIGEge0BsaW5rIFN0ZGlvT3B0aW9ufSBpbnRvIGEgc3Bhd24gc3RkaW8gbW9kZSBhbmQgb3B0aW9uYWwgbGluZSBjYWxsYmFjay5cbiAqXG4gKiBQaXBlZCBtb2RlcyAoYFwiY2FwdHVyZVwiYCwgYFwicGlwZVwiYCwgaGFuZGxlcnMsIGFycmF5cykgYXBwZW5kIGV2ZXJ5IGxpbmUgdG9cbiAqIGBsaW5lc2AgYW5kIGludm9rZSBhbnkgZW1iZWRkZWQgaGFuZGxlcnMuIE9taXR0ZWQgb3B0aW9ucyB1c2UgYGRlZmF1bHRNb2RlYC5cbiAqXG4gKiBAcGFyYW0gb3B0aW9uIC0gQ2FsbGVyIHN0ZGlvIHByZWZlcmVuY2UgZm9yIG9uZSBmZFxuICogQHBhcmFtIGxpbmVzIC0gTXV0YWJsZSBidWZmZXIgdGhhdCByZWNlaXZlcyBlYWNoIHBpcGVkIGxpbmVcbiAqIEBwYXJhbSBkZWZhdWx0TW9kZSAtIFNwYXduIG1vZGUgd2hlbiBgb3B0aW9uYCBpcyBvbWl0dGVkIChgXCJpbmhlcml0XCJgIGJ5IGRlZmF1bHQpXG4gKiBAcmV0dXJucyBSZXNvbHZlZCBzcGF3biBtb2RlIGFuZCBvcHRpb25hbCBwZXItbGluZSBjYWxsYmFja1xuICovXG5mdW5jdGlvbiByZXNvbHZlU3RkaW8oXG4gIG9wdGlvbjogU3RkaW9PcHRpb24gfCB1bmRlZmluZWQsXG4gIGxpbmVzOiBzdHJpbmdbXSxcbiAgZGVmYXVsdE1vZGU6IEV4ZWNTdGRpbyA9IFwiaW5oZXJpdFwiLFxuKTogUmVzb2x2ZWRTdGRpbyB7XG4gIGlmIChvcHRpb24gPT09IHVuZGVmaW5lZCkgcmV0dXJuIHsgbW9kZTogZGVmYXVsdE1vZGUgfTtcbiAgaWYgKGlzUGFzc3Rocm91Z2hNb2RlKG9wdGlvbikgJiYgb3B0aW9uICE9PSBcInBpcGVcIikgcmV0dXJuIHsgbW9kZTogb3B0aW9uIH07XG5cbiAgY29uc3QgaGFuZGxlcnMgPSBsaW5lSGFuZGxlcnMob3B0aW9uKTtcbiAgcmV0dXJuIHtcbiAgICBtb2RlOiBcInBpcGVcIixcbiAgICBvbkxpbmU6IChsaW5lKSA9PiB7XG4gICAgICBsaW5lcy5wdXNoKGxpbmUpO1xuICAgICAgZm9yIChjb25zdCBoYW5kbGVyIG9mIGhhbmRsZXJzKSBoYW5kbGVyKGxpbmUpO1xuICAgIH0sXG4gIH07XG59XG5cbi8qKlxuICogUmVhZCBhIHJlYWRhYmxlIHN0cmVhbSBsaW5lLWJ5LWxpbmUgYW5kIGludm9rZSBgb25MaW5lYCBmb3IgZWFjaCBjaHVuay5cbiAqXG4gKiBVc2VzIGByZWFkbGluZWAgc28gYFxcclxcbmAgYW5kIGJhcmUgYFxcbmAgYXJlIG5vcm1hbGl6ZWQuIFRoZSBpbnRlcmZhY2UgaXNcbiAqIGFsd2F5cyBjbG9zZWQgaW4gYSBgZmluYWxseWAgYmxvY2suXG4gKlxuICogQHBhcmFtIHN0cmVhbSAtIFN1YnByb2Nlc3Mgc3Rkb3V0IG9yIHN0ZGVyciBzdHJlYW1cbiAqIEBwYXJhbSBvbkxpbmUgLSBDYWxsYmFjayBpbnZva2VkIG9uY2UgcGVyIG91dHB1dCBsaW5lXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlYWRMaW5lcyhzdHJlYW06IFJlYWRhYmxlLCBvbkxpbmU6IExpbmVIYW5kbGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHJsID0gcmVhZGxpbmUuY3JlYXRlSW50ZXJmYWNlKHsgaW5wdXQ6IHN0cmVhbSwgY3JsZkRlbGF5OiBJbmZpbml0eSB9KTtcbiAgdHJ5IHtcbiAgICBmb3IgYXdhaXQgKGNvbnN0IGxpbmUgb2YgcmwpIG9uTGluZShsaW5lKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBybC5jbG9zZSgpO1xuICB9XG59XG5cbi8qKlxuICogU3RhcnQgYSBiYWNrZ3JvdW5kIGxpbmUgcmVhZCB3aGVuIHRoZSByZXNvbHZlZCBoYW5kbGVyIHBpcGVzIGEgc3RyZWFtLlxuICpcbiAqIEBwYXJhbSByZWFkcyAtIFByb21pc2UgbGlzdCBhd2FpdGVkIGJlZm9yZSByZXR1cm5pbmcgdGhlIHtAbGluayBFeGVjUmVzdWx0fVxuICogQHBhcmFtIHN0cmVhbSAtIFN1YnByb2Nlc3Mgc3RyZWFtIGZvciB0aGlzIGZkIChgbnVsbGAgd2hlbiB1bmF2YWlsYWJsZSlcbiAqIEBwYXJhbSBoYW5kbGVyIC0gUmVzb2x2ZWQgc3RkaW8gY29uZmlnIGZyb20ge0BsaW5rIHJlc29sdmVTdGRpb31cbiAqL1xuZnVuY3Rpb24gcXVldWVMaW5lUmVhZHMoXG4gIHJlYWRzOiBQcm9taXNlPHZvaWQ+W10sXG4gIHN0cmVhbTogUmVhZGFibGUgfCBudWxsLFxuICBoYW5kbGVyOiBSZXNvbHZlZFN0ZGlvLFxuKTogdm9pZCB7XG4gIGlmIChoYW5kbGVyLm9uTGluZSAmJiBzdHJlYW0pIHJlYWRzLnB1c2gocmVhZExpbmVzKHN0cmVhbSwgaGFuZGxlci5vbkxpbmUpKTtcbn1cblxuLyoqXG4gKiBXcml0ZSBzdHJpbmcgc3RkaW4gdG8gYSBzcGF3bmVkIHByb2Nlc3MgYW5kIGNsb3NlIHRoZSBzdHJlYW0uXG4gKlxuICogTm8tb3AgdW5sZXNzIGBzdGRpbmAgaXMgYSBwYXlsb2FkIHN0cmluZyAobm90IGEgc3RkaW8gbW9kZSkgYW5kXG4gKiBgcHJvYy5zdGRpbmAgaXMgYXZhaWxhYmxlLiBBIGNoaWxkIHRoYXQgZXhpdHMgYmVmb3JlIGNvbnN1bWluZyB0aGUgcGF5bG9hZFxuICogY2xvc2VzIGl0cyBwaXBlOyBFUElQRSBpcyBleHBlY3RlZCBpbiB0aGF0IGNhc2UgYW5kIGlzIGlnbm9yZWQuXG4gKlxuICogQHBhcmFtIHByb2MgLSBDaGlsZCBwcm9jZXNzIHJldHVybmVkIGZyb20gYHNwYXduYFxuICogQHBhcmFtIHN0ZGluIC0gU3RkaW8gbW9kZSBvciBzdHJpbmcgcGF5bG9hZCBmcm9tIHtAbGluayBFeGVjT3B0aW9uc31cbiAqL1xuYXN5bmMgZnVuY3Rpb24gd3JpdGVTdGRpbihcbiAgcHJvYzogQ2hpbGRQcm9jZXNzLFxuICBzdGRpbjogRXhlY1N0ZGlvIHwgc3RyaW5nIHwgdW5kZWZpbmVkLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICghaXNTdGRpblBheWxvYWQoc3RkaW4pIHx8ICFwcm9jLnN0ZGluKSByZXR1cm47XG4gIGNvbnN0IGNvbXBsZXRpb24gPSBmaW5pc2hlZChwcm9jLnN0ZGluLCB7IGNsZWFudXA6IHRydWUgfSk7XG4gIHByb2Muc3RkaW4uZW5kKHN0ZGluKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBjb21wbGV0aW9uO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoIShlcnIgaW5zdGFuY2VvZiBFcnJvciAmJiBcImNvZGVcIiBpbiBlcnIgJiYgZXJyLmNvZGUgPT09IFwiRVBJUEVcIikpIHRocm93IGVycjtcbiAgfVxufVxuXG4vKipcbiAqIEF3YWl0IHByb2Nlc3MgZXhpdCBhbmQgbm9ybWFsaXplIGEgbWlzc2luZyBleGl0IGNvZGUgdG8gYDFgLlxuICpcbiAqIFJlamVjdHMgd2hlbiBzcGF3biBmYWlscyBiZWZvcmUgYGNsb3NlYCAoZS5nLiBleGVjdXRhYmxlIG5vdCBmb3VuZCkuXG4gKlxuICogQHBhcmFtIHByb2MgLSBDaGlsZCBwcm9jZXNzIHJldHVybmVkIGZyb20gYHNwYXduYFxuICogQHJldHVybnMgUmVzb2x2ZWQgZXhpdCBjb2RlXG4gKi9cbmZ1bmN0aW9uIHdhaXRGb3JFeGl0KHByb2M6IENoaWxkUHJvY2Vzcyk6IFByb21pc2U8bnVtYmVyPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgcHJvYy5vbmNlKFwiZXJyb3JcIiwgcmVqZWN0KTtcbiAgICBwcm9jLm9uY2UoXCJjbG9zZVwiLCAoY29kZSkgPT4gcmVzb2x2ZShjb2RlID8/IDEpKTtcbiAgfSk7XG59XG5cbi8qKlxuICogQnVpbGQgYW4gYEVycm9yYCBmb3IgYSBub24temVybyBleGl0IHdoZW4ge0BsaW5rIEV4ZWNPcHRpb25zLmNoZWNrfSBpcyBzZXQuXG4gKlxuICogUHJlZmVycyB0cmltbWVkIHN0ZGVyciB0ZXh0LCB0aGVuIHN0ZG91dCwgaW4gdGhlIG1lc3NhZ2UgYm9keS5cbiAqXG4gKiBAcGFyYW0gY29tbWFuZCAtIEV4ZWN1dGFibGUgbmFtZSBvciBwYXRoXG4gKiBAcGFyYW0gYXJncyAtIEFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGV4ZWN1dGFibGVcbiAqIEBwYXJhbSByZXN1bHQgLSBDb21wbGV0ZWQgZXhlYyBvdXRjb21lIHdpdGggY2FwdHVyZWQgb3V0cHV0XG4gKiBAcmV0dXJucyBFcnJvciBzdWl0YWJsZSBmb3IgdGhyb3dpbmcgZnJvbSB7QGxpbmsgc3Bhd259XG4gKi9cbmZ1bmN0aW9uIGV4ZWNFcnJvcihjb21tYW5kOiBzdHJpbmcsIGFyZ3M6IHN0cmluZ1tdLCByZXN1bHQ6IEV4ZWNSZXN1bHQpOiBFcnJvciB7XG4gIGNvbnN0IGRldGFpbCA9IHJlc3VsdC5zdGRlcnIgfHwgcmVzdWx0LnN0ZG91dDtcbiAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICBgJHtjb21tYW5kTGFiZWwoY29tbWFuZCwgYXJncyl9IGZhaWxlZCAoZXhpdCAke3Jlc3VsdC5leGl0Q29kZX0pJHtkZXRhaWwgPyBgOiAke2RldGFpbH1gIDogXCJcIn1gLFxuICApO1xufVxuXG4vKipcbiAqIE1hcCBhIHtAbGluayBTeW5jRXhlY1N0ZGlvfSBvcHRpb24gdG8gYSBgc3Bhd25TeW5jYCBzdGRpbyBtb2RlLlxuICpcbiAqIGBcImNhcHR1cmVcImAgcGlwZXMgdGhlIGZkIHNvIG91dHB1dCBjYW4gYmUgcmVhZCBpbnRvIHRoZSB7QGxpbmsgRXhlY1Jlc3VsdH0uXG4gKlxuICogQHBhcmFtIG9wdGlvbiAtIENhbGxlciBzdGRpbyBwcmVmZXJlbmNlIGZvciBvbmUgZmRcbiAqIEBwYXJhbSBkZWZhdWx0TW9kZSAtIFNwYXduIG1vZGUgd2hlbiBgb3B0aW9uYCBpcyBvbWl0dGVkIChgXCJpbmhlcml0XCJgIGJ5IGRlZmF1bHQpXG4gKiBAcmV0dXJucyBWYWx1ZSBmb3IgdGhlIGBzcGF3blN5bmNgIHN0ZGlvIHR1cGxlXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVTeW5jU3RkaW8oXG4gIG9wdGlvbjogU3luY0V4ZWNTdGRpbyB8IHVuZGVmaW5lZCxcbiAgZGVmYXVsdE1vZGU6IEV4ZWNTdGRpbyA9IFwiaW5oZXJpdFwiLFxuKTogRXhlY1N0ZGlvIHtcbiAgaWYgKG9wdGlvbiA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZGVmYXVsdE1vZGU7XG4gIGlmIChvcHRpb24gPT09IFwiY2FwdHVyZVwiKSByZXR1cm4gXCJwaXBlXCI7XG4gIHJldHVybiBvcHRpb247XG59XG5cbi8qKlxuICogTm9ybWFsaXplIHJhdyBgc3Bhd25TeW5jYCBvdXRwdXQgdG8gYSBVVEYtOCBzdHJpbmcgd2hlbiBjYXB0dXJlIGlzIGVuYWJsZWQuXG4gKi9cbmZ1bmN0aW9uIGNhcHR1cmVkVGV4dChvdXRwdXQ6IHN0cmluZyB8IEJ1ZmZlciB8IG51bGwgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAob3V0cHV0ID09PSBudWxsIHx8IG91dHB1dCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gdHlwZW9mIG91dHB1dCA9PT0gXCJzdHJpbmdcIiA/IG91dHB1dCA6IG91dHB1dC50b1N0cmluZyhcInV0ZjhcIik7XG59XG5cbi8qKlxuICogU3BsaXQgY2FwdHVyZWQgcHJvY2VzcyBvdXRwdXQgaW50byBsaW5lcyBmb3Ige0BsaW5rIEV4ZWNSZXN1bHQuc3Rkb3V0TGluZXN9IC9cbiAqIHtAbGluayBFeGVjUmVzdWx0LnN0ZGVyckxpbmVzfSAoe0BsaW5rIHNwYXduU3luY30gb25seTsgaW52b2tlZCBsYXppbHkpLlxuICovXG5mdW5jdGlvbiBsaW5lc0Zyb21DYXB0dXJlZE91dHB1dChvdXRwdXQ6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIG91dHB1dC5yZXBsYWNlKC9cXHJcXG4vZywgXCJcXG5cIikucmVwbGFjZSgvXFxyL2csIFwiXFxuXCIpLnNwbGl0KFwiXFxuXCIpO1xufVxuXG4vKipcbiAqIFNwYXduIGEgc3VicHJvY2Vzcy4gUmV0dXJucyB0aGUgTElWRSBjaGlsZCBoYW5kbGUgdGhhdCBpcyBBTFNPIGFcbiAqIGBQcm9taXNlPEV4ZWNSZXN1bHQ+YCByZXNvbHZpbmcgb24gZXhpdCAtIHNlZSB7QGxpbmsgQ2hpbGRQcm9jZXNzUmVzdWx0fS5cbiAqXG4gKiBUaGUgcHJvbWlzZSBoYWxmIGlzIHRoZSBleGFjdCBiZWhhdmlvdXIgdGhpcyBmdW5jdGlvbiBoYWQgYmVmb3JlOiBpdCBhd2FpdHNcbiAqIGV4aXQgKGFuZCBhbnkgbGluZSByZWFkcyAvIHN0ZGluIHdyaXRlKSwgdGhlbiByZXNvbHZlcyB0byB0aGUge0BsaW5rIEV4ZWNSZXN1bHR9XG4gKiBvciByZWplY3RzIChzcGF3biBlcnJvciBvdGhlciB0aGFuIGEgbWlzc2luZyBleGVjdXRhYmxlLCBvciBgY2hlY2tgIG9uIG5vbi16ZXJvXG4gKiBleGl0KS4gRXhpc3RpbmcgYGF3YWl0IHNwYXduKC4uLilgIGNhbGxlcnMgYXJlIHVuYWZmZWN0ZWQuIFRoZSBoYW5kbGUgaGFsZiBsZXRzIGFcbiAqIGNhbGxlciBzdXBlcnZpc2UgdGhlIHByb2Nlc3MgKGAucGlkYCwgYC5raWxsKHNpZ25hbClgLCBgZXhpdGAgZXZlbnQpIHdpdGhvdXQgYVxuICogc2Vjb25kIHNwYXduIC0gZS5nLiBgQGRieC10b29scy9hcHBraXRgJ3MgYGJpbmRQcm9jZXNzYC5cbiAqXG4gKiBAcGFyYW0gY29tbWFuZCAtIEV4ZWN1dGFibGUgdG8gcnVuIChyZXNvbHZlZCBvbiBgUEFUSGAgd2hlbiBgc2hlbGxgIGlzIHNldCBvbiBvcHRpb25zKVxuICogQHBhcmFtIGFyZ3MgLSBBcmd1bWVudHMgcGFzc2VkIHZlcmJhdGltIHRvIHRoZSBleGVjdXRhYmxlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFNwYXduLCBzdGRpbywgYW5kIGNoZWNrIG9wdGlvbnNcbiAqIEByZXR1cm5zIFRoZSBsaXZlIGBDaGlsZFByb2Nlc3NgLCBhd2FpdGFibGUgdG8gZXhpdCBjb2RlICsgY2FwdHVyZWQgb3V0cHV0XG4gKiBAdGhyb3dzIChvbiB0aGUgcHJvbWlzZSkgV2hlbiBzcGF3biBmYWlscyBmb3IgYSByZWFzb24gb3RoZXIgdGhhbiBhIG1pc3NpbmdcbiAqIGV4ZWN1dGFibGUsIGxpbmUgcmVhZHMgZmFpbCwgb3IgYGNoZWNrYCBpcyB0cnVlIGFuZCBleGl0IGNvZGUgaXMgbm9uLXplcm9cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwYXduKC4uLmFyZ3M6IFNwYXduQXJnczxFeGVjT3B0aW9ucz4pOiBDaGlsZFByb2Nlc3NSZXN1bHQge1xuICBjb25zdCB7IGNvbW1hbmQsIGNvbW1hbmRBcmdzLCBvcHRpb25zID0ge30gfSA9IHBhcnNlU3Bhd25BcmdzKGFyZ3MpO1xuICBjb25zdCB7IHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgY2hlY2ssIHRyaW0sIC4uLnNwYXduT3B0cyB9ID0gb3B0aW9ucztcbiAgY29uc3Qgc3Rkb3V0TGluZXM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IHN0ZGVyckxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBzdGRvdXRIYW5kbGVyID0gcmVzb2x2ZVN0ZGlvKHN0ZG91dCwgc3Rkb3V0TGluZXMpO1xuICBjb25zdCBzdGRlcnJIYW5kbGVyID0gcmVzb2x2ZVN0ZGlvKHN0ZGVyciwgc3RkZXJyTGluZXMpO1xuICBjb25zdCBzdGRpbk1vZGU6IEV4ZWNTdGRpbyA9IGlzU3RkaW5QYXlsb2FkKHN0ZGluKSA/IFwicGlwZVwiIDogKHN0ZGluID8/IFwiaW5oZXJpdFwiKTtcblxuICBjb25zdCBwcm9jID0gbm9kZVNwYXduKGNvbW1hbmQsIGNvbW1hbmRBcmdzLCB7XG4gICAgLi4uc3Bhd25PcHRzLFxuICAgIHN0ZGlvOiBbc3RkaW5Nb2RlLCBzdGRvdXRIYW5kbGVyLm1vZGUsIHN0ZGVyckhhbmRsZXIubW9kZV0sXG4gIH0pO1xuXG4gIGNvbnN0IHN0ZGluV3JpdGUgPSB3cml0ZVN0ZGluKHByb2MsIHN0ZGluKTtcblxuICBjb25zdCByZWFkczogUHJvbWlzZTx2b2lkPltdID0gW107XG4gIHF1ZXVlTGluZVJlYWRzKHJlYWRzLCBwcm9jLnN0ZG91dCwgc3Rkb3V0SGFuZGxlcik7XG4gIHF1ZXVlTGluZVJlYWRzKHJlYWRzLCBwcm9jLnN0ZGVyciwgc3RkZXJySGFuZGxlcik7XG5cbiAgY29uc3QgY29tcGxldGlvbiA9IChhc3luYyAoKTogUHJvbWlzZTxFeGVjUmVzdWx0PiA9PiB7XG4gICAgbGV0IGV4aXRDb2RlID0gMTtcbiAgICBsZXQgY29tbWFuZE5vdEZvdW5kRXJyb3I6IE5vZGVKUy5FcnJub0V4Y2VwdGlvbiB8IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgZXhpdENvZGUgPSBhd2FpdCB3YWl0Rm9yRXhpdChwcm9jKTtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFtzdGRpbldyaXRlLCAuLi5yZWFkc10pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFtzdGRpbldyaXRlLCAuLi5yZWFkc10pO1xuICAgICAgaWYgKCFpc0NvbW1hbmROb3RGb3VuZEVycm9yKGVycikpIHRocm93IGVycjtcbiAgICAgIGNvbW1hbmROb3RGb3VuZEVycm9yID0gZXJyO1xuICAgICAgZXhpdENvZGUgPSBDT01NQU5EX05PVF9GT1VORF9FWElUX0NPREU7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gY3JlYXRlRXhlY1Jlc3VsdChleGl0Q29kZSwgc3Rkb3V0TGluZXMsIHN0ZGVyckxpbmVzLCB0cmltKTtcbiAgICBpZiAoY2hlY2sgJiYgcmVzdWx0LmV4aXRDb2RlICE9PSAwKSB7XG4gICAgICBjb25zdCBlcnIgPSBleGVjRXJyb3IoY29tbWFuZCwgY29tbWFuZEFyZ3MsIHJlc3VsdCk7XG4gICAgICBpZiAoY29tbWFuZE5vdEZvdW5kRXJyb3IpIGVyci5jYXVzZSA9IGNvbW1hbmROb3RGb3VuZEVycm9yO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9KSgpO1xuXG4gIC8vIEF0dGFjaCB0aGUgcHJvbWlzZSBpbnRlcmZhY2Ugb250byB0aGUgbGl2ZSBjaGlsZCBzbyBPTkUgb2JqZWN0IGlzIGJvdGguIFRoZVxuICAvLyBtZXRob2RzIGFyZSBib3VuZCB0byBgY29tcGxldGlvbmAgc28gYHRoaXNgIGlzIHRoZSByZWFsIHByb21pc2U7IHRoZSBjaGlsZFxuICAvLyBvd25zIG5vIGNvbmZsaWN0aW5nIGB0aGVuYC9gY2F0Y2hgL2BmaW5hbGx5YCwgc28gdGhpcyBpcyBwdXJlbHkgYWRkaXRpdmUuXG4gIHJldHVybiBhdHRhY2hQcm9taXNlKHByb2MsIGNvbXBsZXRpb24pO1xufVxuXG4vKipcbiAqIEF0dGFjaCBhIHByb21pc2UncyBgdGhlbmAgLyBgY2F0Y2hgIC8gYGZpbmFsbHlgIG9udG8gYSBsaXZlIG9iamVjdCwgcmV0dXJuaW5nXG4gKiB0aGUgc2FtZSBvYmplY3QgdHlwZWQgYXMgYm90aC4gVXNlZCBieSB7QGxpbmsgc3Bhd259IHRvIG1ha2UgaXRzIGBDaGlsZFByb2Nlc3NgXG4gKiBhd2FpdGFibGUgd2l0aG91dCB3cmFwcGluZyBpdCAtIHNvIGNhbGxlcnMga2VlcCB0aGUgbGl2ZSBoYW5kbGUgQU5EIGBhd2FpdGAgaXQuXG4gKi9cbmZ1bmN0aW9uIGF0dGFjaFByb21pc2U8VCBleHRlbmRzIG9iamVjdCwgUj4odGFyZ2V0OiBULCBwcm9taXNlOiBQcm9taXNlPFI+KTogVCAmIFByb21pc2U8Uj4ge1xuICBjb25zdCBoeWJyaWQgPSB0YXJnZXQgYXMgVCAmIFByb21pc2U8Uj47XG4gIGh5YnJpZC50aGVuID0gcHJvbWlzZS50aGVuLmJpbmQocHJvbWlzZSk7XG4gIGh5YnJpZC5jYXRjaCA9IHByb21pc2UuY2F0Y2guYmluZChwcm9taXNlKTtcbiAgaHlicmlkLmZpbmFsbHkgPSBwcm9taXNlLmZpbmFsbHkuYmluZChwcm9taXNlKTtcbiAgcmV0dXJuIGh5YnJpZDtcbn1cblxuLyoqXG4gKiBTcGF3biBhIHN1YnByb2Nlc3Mgc3luY2hyb25vdXNseSBhbmQgd2FpdCBmb3IgZXhpdC5cbiAqXG4gKiBVbmxpa2Uge0BsaW5rIHNwYXdufSwgc3RkaW8gb3B0aW9ucyBhcmUgbGltaXRlZCB0byBgXCJpbmhlcml0XCJgLCBgXCJwaXBlXCJgLFxuICogYFwiaWdub3JlXCJgLCBhbmQgYFwiY2FwdHVyZVwiYCDigJQgbm8gcGVyLWxpbmUgY2FsbGJhY2tzLlxuICpcbiAqIEBwYXJhbSBjb21tYW5kIC0gRXhlY3V0YWJsZSB0byBydW4gKHJlc29sdmVkIG9uIGBQQVRIYCB3aGVuIGBzaGVsbGAgaXMgc2V0IG9uIG9wdGlvbnMpXG4gKiBAcGFyYW0gYXJncyAtIEFyZ3VtZW50cyBwYXNzZWQgdmVyYmF0aW0gdG8gdGhlIGV4ZWN1dGFibGVcbiAqIEBwYXJhbSBzcGF3blN5bmMgLSBTcGF3biwgc3RkaW8sIGFuZCBjaGVjayBvcHRpb25zXG4gKiBAcmV0dXJucyBFeGl0IGNvZGUsIGNhcHR1cmVkIGxpbmUgYXJyYXlzLCBhbmQgdHJpbW1lZCBgc3Rkb3V0YCAvIGBzdGRlcnJgIGdldHRlcnNcbiAqIEB0aHJvd3MgV2hlbiBzcGF3biBmYWlscyBmb3IgYSByZWFzb24gb3RoZXIgdGhhbiBhIG1pc3NpbmcgZXhlY3V0YWJsZSwgb3JcbiAqIGBjaGVja2AgaXMgdHJ1ZSBhbmQgZXhpdCBjb2RlIGlzIG5vbi16ZXJvXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzcGF3blN5bmMoLi4uYXJnczogU3Bhd25BcmdzPFN5bmNFeGVjT3B0aW9ucz4pOiBFeGVjUmVzdWx0IHtcbiAgY29uc3QgeyBjb21tYW5kLCBjb21tYW5kQXJncywgb3B0aW9ucyA9IHt9IH0gPSBwYXJzZVNwYXduQXJncyhhcmdzKTtcbiAgY29uc3QgeyBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGNoZWNrLCB0cmltLCAuLi5zcGF3bk9wdHMgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHN0ZGluTW9kZTogRXhlY1N0ZGlvID0gaXNTdGRpblBheWxvYWQoc3RkaW4pID8gXCJwaXBlXCIgOiAoc3RkaW4gPz8gXCJpbmhlcml0XCIpO1xuICBjb25zdCBjYXB0dXJlU3Rkb3V0ID0gc3Rkb3V0ID09PSBcImNhcHR1cmVcIjtcbiAgY29uc3QgY2FwdHVyZVN0ZGVyciA9IHN0ZGVyciA9PT0gXCJjYXB0dXJlXCI7XG4gIGNvbnN0IHN0ZG91dE1vZGUgPSByZXNvbHZlU3luY1N0ZGlvKHN0ZG91dCk7XG4gIGNvbnN0IHN0ZGVyck1vZGUgPSByZXNvbHZlU3luY1N0ZGlvKHN0ZGVycik7XG5cbiAgY29uc3QgcmVzdWx0ID0gbm9kZVNwYXduU3luYyhjb21tYW5kLCBjb21tYW5kQXJncywge1xuICAgIC4uLnNwYXduT3B0cyxcbiAgICBlbmNvZGluZzogY2FwdHVyZVN0ZG91dCB8fCBjYXB0dXJlU3RkZXJyID8gXCJ1dGY4XCIgOiB1bmRlZmluZWQsXG4gICAgc3RkaW86IFtzdGRpbk1vZGUsIHN0ZG91dE1vZGUsIHN0ZGVyck1vZGVdLFxuICAgIGlucHV0OiBpc1N0ZGluUGF5bG9hZChzdGRpbikgPyBzdGRpbiA6IHVuZGVmaW5lZCxcbiAgfSk7XG5cbiAgY29uc3QgY29tbWFuZE5vdEZvdW5kID0gaXNDb21tYW5kTm90Rm91bmRFcnJvcihyZXN1bHQuZXJyb3IpO1xuICBjb25zdCBleGl0Q29kZSA9IGNvbW1hbmROb3RGb3VuZCA/IENPTU1BTkRfTk9UX0ZPVU5EX0VYSVRfQ09ERSA6IChyZXN1bHQuc3RhdHVzID8/IDEpO1xuICBjb25zdCBzdGRvdXRUZXh0ID0gY2FwdHVyZVN0ZG91dCA/IGNhcHR1cmVkVGV4dChyZXN1bHQuc3Rkb3V0KSA6IHVuZGVmaW5lZDtcbiAgY29uc3Qgc3RkZXJyVGV4dCA9IGNhcHR1cmVTdGRlcnIgPyBjYXB0dXJlZFRleHQocmVzdWx0LnN0ZGVycikgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGV4ZWNSZXN1bHQgPSBjcmVhdGVTeW5jRXhlY1Jlc3VsdChleGl0Q29kZSwgc3Rkb3V0VGV4dCwgc3RkZXJyVGV4dCwgdHJpbSk7XG5cbiAgaWYgKHJlc3VsdC5lcnJvciAmJiAoIWNvbW1hbmROb3RGb3VuZCB8fCBjaGVjaykpIHtcbiAgICBjb25zdCBlcnIgPSBleGVjRXJyb3IoY29tbWFuZCwgY29tbWFuZEFyZ3MsIGV4ZWNSZXN1bHQpO1xuICAgIGVyci5jYXVzZSA9IHJlc3VsdC5lcnJvcjtcbiAgICB0aHJvdyBlcnI7XG4gIH1cblxuICBpZiAoY2hlY2sgJiYgZXhlY1Jlc3VsdC5leGl0Q29kZSAhPT0gMCkgdGhyb3cgZXhlY0Vycm9yKGNvbW1hbmQsIGNvbW1hbmRBcmdzLCBleGVjUmVzdWx0KTtcbiAgcmV0dXJuIGV4ZWNSZXN1bHQ7XG59XG5cbi8qKlxuICogU3BsaXRzIGEgc2hlbGwtbGlrZSBjb21tYW5kIGludG8gYXJndi5cbiAqXG4gKiBTdXBwb3J0czpcbiAqICAgLSB3aGl0ZXNwYWNlIHNlcGFyYXRvcnNcbiAqICAgLSBzaW5nbGUgYW5kIGRvdWJsZSBxdW90ZXNcbiAqICAgLSBiYWNrc2xhc2ggZXNjYXBpbmdcbiAqICAgLSBlc2NhcGVkIHNwYWNlc1xuICogICAtIGVtcHR5IHF1b3RlZCBzdHJpbmdzXG4gKlxuICogSWYgdGhlIGlucHV0IGlzIG1hbGZvcm1lZCAoZm9yIGV4YW1wbGUsIGFuIHVudGVybWluYXRlZCBxdW90ZSksXG4gKiByZXR1cm5zIHRoZSBvcmlnaW5hbCBzdHJpbmcgYXMgYSBzaW5nbGUgYXJndW1lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaGxleChjb21tYW5kOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGFyZ3M6IHN0cmluZ1tdID0gW107XG5cbiAgbGV0IGN1cnJlbnQgPSBcIlwiO1xuICBsZXQgcXVvdGU6IFwiJ1wiIHwgJ1wiJyB8IHVuZGVmaW5lZDtcbiAgbGV0IGVzY2FwZWQgPSBmYWxzZTtcbiAgbGV0IHF1b3RlZCA9IGZhbHNlO1xuXG4gIGNvbnN0IHB1c2ggPSAoKSA9PiB7XG4gICAgaWYgKHF1b3RlZCB8fCBjdXJyZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgIGFyZ3MucHVzaChjdXJyZW50KTtcbiAgICB9XG4gICAgY3VycmVudCA9IFwiXCI7XG4gICAgcXVvdGVkID0gZmFsc2U7XG4gIH07XG5cbiAgZm9yIChjb25zdCBjaCBvZiBjb21tYW5kKSB7XG4gICAgaWYgKGVzY2FwZWQpIHtcbiAgICAgIGN1cnJlbnQgKz0gY2g7XG4gICAgICBlc2NhcGVkID0gZmFsc2U7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoY2ggPT09IFwiXFxcXFwiKSB7XG4gICAgICBlc2NhcGVkID0gdHJ1ZTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChxdW90ZSkge1xuICAgICAgaWYgKGNoID09PSBxdW90ZSkge1xuICAgICAgICBxdW90ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgcXVvdGVkID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN1cnJlbnQgKz0gY2g7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoY2ggPT09IFwiJ1wiIHx8IGNoID09PSAnXCInKSB7XG4gICAgICBxdW90ZSA9IGNoO1xuICAgICAgcXVvdGVkID0gdHJ1ZTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICgvXFxzLy50ZXN0KGNoKSkge1xuICAgICAgcHVzaCgpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY3VycmVudCArPSBjaDtcbiAgfVxuXG4gIC8vIE1hbGZvcm1lZCBpbnB1dDogdHJlYXQgYXMgYSBsaXRlcmFsIGNvbW1hbmQuXG4gIGlmIChxdW90ZSkge1xuICAgIHJldHVybiBbY29tbWFuZF07XG4gIH1cblxuICAvLyBUcmFpbGluZyBiYWNrc2xhc2ggaXMgbGl0ZXJhbC5cbiAgaWYgKGVzY2FwZWQpIHtcbiAgICBjdXJyZW50ICs9IFwiXFxcXFwiO1xuICB9XG5cbiAgcHVzaCgpO1xuXG4gIHJldHVybiBhcmdzLmxlbmd0aCA/IGFyZ3MgOiBbY29tbWFuZF07XG59XG4iXX0=
532
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0NHO0FBQ0gsT0FBTyxFQUdMLEtBQUssSUFBSSxTQUFTLEVBQ2xCLFNBQVMsSUFBSSxhQUFhLEdBQzNCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxLQUFLLFFBQVEsTUFBTSxlQUFlLENBQUM7QUFFMUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWhELDhFQUE4RTtBQUM5RSxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxHQUFHLENBQUM7QUEwSC9DLFNBQVMsY0FBYyxDQUF5QixLQUFtQjtJQUNqRSxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQy9CLE1BQU0sQ0FBQyxPQUFPLEVBQUUsR0FBRyxXQUFXLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFL0MsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNCLE1BQU0sT0FBTyxHQUNYLElBQUksS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDdkYsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDOUQsTUFBTSxTQUFTLEdBQ2IsY0FBYyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8s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LEdBQUcsSUFBSSxDQUFDO1lBQ2QsU0FBUztRQUNYLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNsQixJQUFJLEVBQUUsQ0FBQztZQUNQLFNBQVM7UUFDWCxDQUFDO1FBRUQsT0FBTyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRUQsK0NBQStDO0lBQy9DLElBQUksS0FBSyxFQUFFLENBQUM7UUFDVixPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkIsQ0FBQztJQUVELGlDQUFpQztJQUNqQyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ1osT0FBTyxJQUFJLElBQUksQ0FBQztJQUNsQixDQUFDO0lBRUQsSUFBSSxFQUFFLENBQUM7SUFFUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN4QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQb3J0YWJsZSBzdWJwcm9jZXNzIGhlbHBlciBidWlsdCBvbiBgY2hpbGRfcHJvY2Vzcy5zcGF3bmAgYW5kIGxpbmUgc3RyZWFtaW5nLlxuICpcbiAqIEVhY2ggc3RkaW8gZmQgZGVmYXVsdHMgdG8gYFwiaW5oZXJpdFwiYC4ge0BsaW5rIHNwYXdufSBzdHJlYW1zIG91dHB1dFxuICogbGluZS1ieS1saW5lIGludG8ge0BsaW5rIEV4ZWNSZXN1bHQuc3Rkb3V0TGluZXN9XG4gKiAvIHtAbGluayBFeGVjUmVzdWx0LnN0ZGVyckxpbmVzfTsgaXRzIGBzdGRvdXRgIC8gYHN0ZGVycmAgZ2V0dGVycyBqb2luIHRob3NlIGxpbmVzLlxuICoge0BsaW5rIHNwYXduU3luY30ga2VlcHMgdGhlIGNhcHR1cmVkIHN0cmluZzsgaXRzIGBzdGRvdXRgIC8gYHN0ZGVycmAgZ2V0dGVycyByZWFkXG4gKiB0aGF0IHN0cmluZyBkaXJlY3RseSAobGluZSBhcnJheXMgc3BsaXQgbGF6aWx5IG9uIHJlYWQpLlxuICogT21pdHRlZCBgdHJpbWAgKGRlZmF1bHQpIGFwcGxpZXMgYWRhcHRpdmUgbm9ybWFsaXphdGlvbjoge0BsaW5rIHNwYXduU3luY30gZHJvcHNcbiAqIGF0IG1vc3Qgb25lIHRyYWlsaW5nIGVtcHR5IGxpbmUgLyBuZXdsaW5lIGBzcGF3blN5bmNgIGFkZHM7IHtAbGluayBzcGF3bn0gZG9lc1xuICogbm90IChyZWFkbGluZSBuZXZlciBlbWl0cyB0aGF0IGV4dHJhIGxpbmUpLiBgdHJpbTogdHJ1ZWAgc3RyaXBzIGFsbCBsZWFkaW5nL1xuICogdHJhaWxpbmcgd2hpdGVzcGFjZSBpbiBib3RoIG1vZGVzOyBgdHJpbTogZmFsc2VgIGxlYXZlcyBvdXRwdXQgdW5jaGFuZ2VkLlxuICpcbiAqIEBleGFtcGxlIENhcHR1cmUgY29tbWFuZCBvdXRwdXRcbiAqIGBgYHRzXG4gKiBjb25zdCB7IHN0ZG91dCB9ID0gYXdhaXQgZXhlYyhcImdpdFwiLCBbXCJyZXYtcGFyc2VcIiwgXCItLXNob3ctdG9wbGV2ZWxcIl0sIHtcbiAqICAgc3Rkb3V0OiBcImNhcHR1cmVcIixcbiAqICAgc3RkZXJyOiBcImlnbm9yZVwiLFxuICogICBzdGRpbjogXCJpZ25vcmVcIixcbiAqIH0pO1xuICogYGBgXG4gKlxuICogQGV4YW1wbGUgU3RyZWFtIGFuZCBjYXB0dXJlIHRvZ2V0aGVyXG4gKiBgYGB0c1xuICogYXdhaXQgZXhlYyhcInBucG1cIiwgW1wiaW5zdGFsbFwiXSwge1xuICogICBzdGRvdXQ6IFsobGluZSkgPT4gY29uc29sZS5sb2cobGluZSksIFwiY2FwdHVyZVwiXSxcbiAqICAgY2hlY2s6IHRydWUsXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIFN5bmNocm9ub3VzIGNhcHR1cmUgKG5vIGxpbmUgY2FsbGJhY2tzKVxuICogYGBgdHNcbiAqIGNvbnN0IHsgc3Rkb3V0IH0gPSBleGVjU3luYyhcImdpdFwiLCBbXCJyZXYtcGFyc2VcIiwgXCItLXNob3ctdG9wbGV2ZWxcIl0sIHtcbiAqICAgc3Rkb3V0OiBcImNhcHR1cmVcIixcbiAqICAgc3RkZXJyOiBcImlnbm9yZVwiLFxuICogICBzdGRpbjogXCJpZ25vcmVcIixcbiAqIH0pO1xuICogYGBgXG4gKlxuICogQG1vZHVsZVxuICovXG5pbXBvcnQge1xuICB0eXBlIENoaWxkUHJvY2VzcyxcbiAgdHlwZSBTcGF3bk9wdGlvbnMsXG4gIHNwYXduIGFzIG5vZGVTcGF3bixcbiAgc3Bhd25TeW5jIGFzIG5vZGVTcGF3blN5bmMsXG59IGZyb20gXCJub2RlOmNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCAqIGFzIHJlYWRsaW5lIGZyb20gXCJub2RlOnJlYWRsaW5lXCI7XG5pbXBvcnQgeyBSZWFkYWJsZSB9IGZyb20gXCJub2RlOnN0cmVhbVwiO1xuaW1wb3J0IHsgZmluaXNoZWQgfSBmcm9tIFwibm9kZTpzdHJlYW0vcHJvbWlzZXNcIjtcblxuLyoqIFNoZWxsLWNvbXBhdGlibGUgZXhpdCBjb2RlIHJldHVybmVkIHdoZW4gYW4gZXhlY3V0YWJsZSBjYW5ub3QgYmUgZm91bmQuICovXG5leHBvcnQgY29uc3QgQ09NTUFORF9OT1RfRk9VTkRfRVhJVF9DT0RFID0gMTI3O1xuXG4vKiogU3RkaW8gbW9kZSBmb3IgYSBzdWJwcm9jZXNzIGZkLiAqL1xuZXhwb3J0IHR5cGUgRXhlY1N0ZGlvID0gXCJpbmhlcml0XCIgfCBcInBpcGVcIiB8IFwiaWdub3JlXCI7XG5cbi8qKiBJbnZva2VkIG9uY2UgcGVyIG91dHB1dCBsaW5lIHdoZW4gYSBmZCBpcyBwaXBlZC4gKi9cbmV4cG9ydCB0eXBlIExpbmVIYW5kbGVyID0gKGxpbmU6IHN0cmluZykgPT4gdm9pZDtcblxuLyoqXG4gKiBTdGRpbyBjb25maWcgZm9yIG9uZSBmZC5cbiAqXG4gKiAtIGBcImluaGVyaXRcImAgLyBgXCJwaXBlXCJgIC8gYFwiaWdub3JlXCJgIOKAlCBwYXNzIHRocm91Z2ggdG8gYHNwYXduYFxuICogLSBgXCJjYXB0dXJlXCJgIOKAlCBwaXBlIHRoZSBmZCBhbmQgYXBwZW5kIGVhY2ggbGluZSB0byB0aGUgcmVzdWx0XG4gKiAtIHtAbGluayBMaW5lSGFuZGxlcn0g4oCUIHBpcGUgYW5kIGludm9rZSB0aGUgaGFuZGxlciBwZXIgbGluZSAobGluZXMgYXJlIHN0aWxsIGNhcHR1cmVkKVxuICogLSBgKExpbmVIYW5kbGVyIHwgXCJjYXB0dXJlXCIpW11gIOKAlCBwaXBlOyBgXCJjYXB0dXJlXCJgIGlzIGEgbm8tb3AgbWFya2VyLCBoYW5kbGVycyBydW4gcGVyIGxpbmVcbiAqL1xuZXhwb3J0IHR5cGUgU3RkaW9PcHRpb24gPSBFeGVjU3RkaW8gfCBMaW5lSGFuZGxlciB8IFwiY2FwdHVyZVwiIHwgKExpbmVIYW5kbGVyIHwgXCJjYXB0dXJlXCIpW107XG5cbi8qKiBPdXRjb21lIG9mIHtAbGluayBzcGF3bn0gLyB7QGxpbmsgc3Bhd25TeW5jfTogZXhpdCBjb2RlLCBjYXB0dXJlZCBvdXRwdXQsIGFuZCBsaW5lIHZpZXdzLiAqL1xuZXhwb3J0IHR5cGUgRXhlY1Jlc3VsdCA9IHtcbiAgZXhpdENvZGU6IG51bWJlcjtcbiAgLyoqXG4gICAqIENhcHR1cmVkIHN0ZG91dCBsaW5lcy4gRm9yIHtAbGluayBzcGF3bn0gdGhlc2UgYXJlIGJ1aWx0IHdoaWxlIHRoZSBwcm9jZXNzIHJ1bnM7XG4gICAqIGZvciB7QGxpbmsgc3Bhd25TeW5jfSB0aGV5IGFyZSBzcGxpdCBmcm9tIHRoZSBjYXB0dXJlZCBzdHJpbmcgb24gZmlyc3QgcmVhZC5cbiAgICovXG4gIHJlYWRvbmx5IHN0ZG91dExpbmVzOiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIENhcHR1cmVkIHN0ZGVyciBsaW5lcy4gRm9yIHtAbGluayBzcGF3bn0gdGhlc2UgYXJlIGJ1aWx0IHdoaWxlIHRoZSBwcm9jZXNzIHJ1bnM7XG4gICAqIGZvciB7QGxpbmsgc3Bhd25TeW5jfSB0aGV5IGFyZSBzcGxpdCBmcm9tIHRoZSBjYXB0dXJlZCBzdHJpbmcgb24gZmlyc3QgcmVhZC5cbiAgICovXG4gIHJlYWRvbmx5IHN0ZGVyckxpbmVzOiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIENhcHR1cmVkIHN0ZG91dCB0ZXh0LiB7QGxpbmsgc3Bhd25TeW5jfSByZWFkcyB0aGUgY2FwdHVyZWQgc3RyaW5nO1xuICAgKiB7QGxpbmsgc3Bhd259IGpvaW5zIHtAbGluayBzdGRvdXRMaW5lc30uIFNlZSBgdHJpbWAgZm9yIG5vcm1hbGl6YXRpb24uXG4gICAqL1xuICByZWFkb25seSBzdGRvdXQ6IHN0cmluZztcbiAgLyoqXG4gICAqIENhcHR1cmVkIHN0ZGVyciB0ZXh0LiB7QGxpbmsgc3Bhd25TeW5jfSByZWFkcyB0aGUgY2FwdHVyZWQgc3RyaW5nO1xuICAgKiB7QGxpbmsgc3Bhd259IGpvaW5zIHtAbGluayBzdGRlcnJMaW5lc30uIFNlZSBgdHJpbWAgZm9yIG5vcm1hbGl6YXRpb24uXG4gICAqL1xuICByZWFkb25seSBzdGRlcnI6IHN0cmluZztcbn07XG5cbi8qKlxuICogV2hhdCB7QGxpbmsgc3Bhd259IHJldHVybnM6IHRoZSBMSVZFIGBDaGlsZFByb2Nlc3NgIGhhbmRsZSB0aGF0IGlzIEFMU08gYVxuICogYFByb21pc2U8RXhlY1Jlc3VsdD5gIHJlc29sdmluZyBvbiBleGl0LlxuICpcbiAqIFRoaXMgaXMgYWRkaXRpdmUgLSB0aGUgb2JqZWN0IHN0aWxsIHNhdGlzZmllcyBgUHJvbWlzZTxFeGVjUmVzdWx0PmAsIHNvIGV2ZXJ5XG4gKiBleGlzdGluZyBgYXdhaXQgc3Bhd24oLi4uKWAgLyBgc3Bhd24oLi4uKS50aGVuKC4uLilgIGNhbGxlciBpcyB1bmNoYW5nZWQuIFdoYXRcbiAqIGlzIG5ldyBpcyB0aGF0IHRoZSBzYW1lIHZhbHVlIGlzIHRoZSBsaXZlIGNoaWxkOiBjYWxsZXJzIHRoYXQgd2FudCB0byBzdXBlcnZpc2VcbiAqIGl0IChyZWFkIGAucGlkYCwgYC5raWxsKHNpZ25hbClgLCBsaXN0ZW4gZm9yIGBleGl0YCkgY2FuLCB3aXRob3V0IGEgc2Vjb25kXG4gKiBzcGF3bi4gYEBkYngtdG9vbHMvYXBwa2l0YCdzIGBiaW5kUHJvY2Vzc2AgY29uc3VtZXMgZXhhY3RseSB0aGlzIC0gb25lIGNvZGUgcGF0aFxuICogc3VwZXJ2aXNlcyBib3RoIGEgYmFyZSBgQ2hpbGRQcm9jZXNzYCAoZS5nLiBwb3J0cikgYW5kIGEgYHNwYXduKClgIHJlc3VsdC5cbiAqXG4gKiBAZXhhbXBsZSBBd2FpdCBpdCAodW5jaGFuZ2VkKVxuICogY29uc3QgeyBzdGRvdXQgfSA9IGF3YWl0IHNwYXduKFwiZ2l0XCIsIFtcInJldi1wYXJzZVwiLCBcIkhFQURcIl0sIHsgc3Rkb3V0OiBcImNhcHR1cmVcIiB9KTtcbiAqXG4gKiBAZXhhbXBsZSBTdXBlcnZpc2UgaXRcbiAqIGNvbnN0IHByb2MgPSBzcGF3bihcImJ1blwiLCBbXCJzcmMvc2VydmVyLnRzXCJdKTtcbiAqIGN0eC5iaW5kUHJvY2Vzcyhwcm9jKTsgICAgICAgICAgICAvLyBsaXZlIGhhbmRsZVxuICogY29uc3QgeyBleGl0Q29kZSB9ID0gYXdhaXQgcHJvYzsgIC8vIHN0aWxsIGEgcHJvbWlzZVxuICovXG5leHBvcnQgdHlwZSBDaGlsZFByb2Nlc3NSZXN1bHQgPSBDaGlsZFByb2Nlc3MgJiBQcm9taXNlPEV4ZWNSZXN1bHQ+O1xuXG4vKiogT3B0aW9ucyBmb3Ige0BsaW5rIHNwYXdufS4gRXh0ZW5kcyBgU3Bhd25PcHRpb25zYCBleGNlcHQgYHN0ZGlvYCwgd2hpY2ggaXMgZHJpdmVuIGJ5IGBzdGRpbmAgLyBgc3Rkb3V0YCAvIGBzdGRlcnJgLiAqL1xuZXhwb3J0IHR5cGUgRXhlY09wdGlvbnMgPSBPbWl0PFNwYXduT3B0aW9ucywgXCJzdGRpb1wiPiAmIHtcbiAgLyoqIGBcImluaGVyaXRcImAgYnkgZGVmYXVsdDsgYFwicGlwZVwiYCAvIGBcImlnbm9yZVwiYCBzZWxlY3QgbW9kZXMsIGFueSBvdGhlciBzdHJpbmcgaXMgaW5wdXQuICovXG4gIHN0ZGluPzogRXhlY1N0ZGlvIHwgc3RyaW5nO1xuICBzdGRvdXQ/OiBTdGRpb09wdGlvbjtcbiAgc3RkZXJyPzogU3RkaW9PcHRpb247XG4gIC8qKiBUaHJvdyB3aGVuIHRoZSBwcm9jZXNzIGV4aXRzIHdpdGggYSBub24temVybyBjb2RlLiAqL1xuICBjaGVjaz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBPbWl0dGVkIOKAlCBhZGFwdGl2ZSB0cmltICh7QGxpbmsgc3Bhd25TeW5jfSBkcm9wcyBvbmUgc3Bhd24gdHJhaWxpbmcgbmV3bGluZSxcbiAgICoge0BsaW5rIHNwYXdufSBkb2VzIG5vdCk7IGB0cnVlYCDigJQgc3RyaXAgYWxsIGxlYWRpbmcvdHJhaWxpbmcgd2hpdGVzcGFjZTtcbiAgICogYGZhbHNlYCDigJQgbGVhdmUgY2FwdHVyZWQgb3V0cHV0IHVuY2hhbmdlZC5cbiAgICovXG4gIHRyaW0/OiBib29sZWFuO1xufTtcblxuLyoqIFN0ZGlvIG1vZGUgZm9yIHtAbGluayBzcGF3blN5bmN9IChubyBwZXItbGluZSBjYWxsYmFja3MpLiAqL1xuZXhwb3J0IHR5cGUgU3luY0V4ZWNTdGRpbyA9IEV4ZWNTdGRpbyB8IFwiY2FwdHVyZVwiO1xuXG4vKiogT3B0aW9ucyBmb3Ige0BsaW5rIHNwYXduU3luY30uIFNhbWUgc2hhcGUgYXMge0BsaW5rIEV4ZWNPcHRpb25zfSBidXQgd2l0aG91dCBsaW5lLWhhbmRsZXIgc3RkaW8uICovXG5leHBvcnQgdHlwZSBTeW5jRXhlY09wdGlvbnMgPSBPbWl0PFNwYXduT3B0aW9ucywgXCJzdGRpb1wiPiAmIHtcbiAgLyoqIGBcImluaGVyaXRcImAgYnkgZGVmYXVsdDsgYFwicGlwZVwiYCAvIGBcImlnbm9yZVwiYCBzZWxlY3QgbW9kZXMsIGFueSBvdGhlciBzdHJpbmcgaXMgaW5wdXQuICovXG4gIHN0ZGluPzogRXhlY1N0ZGlvIHwgc3RyaW5nO1xuICBzdGRvdXQ/OiBTeW5jRXhlY1N0ZGlvO1xuICBzdGRlcnI/OiBTeW5jRXhlY1N0ZGlvO1xuICAvKiogVGhyb3cgd2hlbiB0aGUgcHJvY2VzcyBleGl0cyB3aXRoIGEgbm9uLXplcm8gY29kZS4gKi9cbiAgY2hlY2s/OiBib29sZWFuO1xuICAvKipcbiAgICogT21pdHRlZCDigJQgYWRhcHRpdmUgdHJpbSAoe0BsaW5rIHNwYXduU3luY30gZHJvcHMgb25lIHNwYXduIHRyYWlsaW5nIG5ld2xpbmUsXG4gICAqIHtAbGluayBzcGF3bn0gZG9lcyBub3QpOyBgdHJ1ZWAg4oCUIHN0cmlwIGFsbCBsZWFkaW5nL3RyYWlsaW5nIHdoaXRlc3BhY2U7XG4gICAqIGBmYWxzZWAg4oCUIGxlYXZlIGNhcHR1cmVkIG91dHB1dCB1bmNoYW5nZWQuXG4gICAqL1xuICB0cmltPzogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogU3Bhd24gc3RkaW8gbW9kZSBwbHVzIGFuIG9wdGlvbmFsIHBlci1saW5lIGNhbGxiYWNrIGFmdGVyIHtAbGluayByZXNvbHZlU3RkaW99XG4gKiBtYXBzIGEge0BsaW5rIFN0ZGlvT3B0aW9ufSBpbnRvIHNvbWV0aGluZyBgc3Bhd25gIGNhbiBjb25zdW1lLlxuICovXG50eXBlIFJlc29sdmVkU3RkaW8gPSB7XG4gIC8qKiBWYWx1ZSBwYXNzZWQgdG8gYHNwYXduYCdzIGBzdGRpb2AgdHVwbGUgZm9yIHRoaXMgZmQuICovXG4gIG1vZGU6IEV4ZWNTdGRpbztcbiAgLyoqIFdoZW4gc2V0LCBlYWNoIG91dHB1dCBsaW5lIGlzIGFwcGVuZGVkIHRvIHRoZSBjYXB0dXJlIGJ1ZmZlciBhbmQgZm9yd2FyZGVkIGhlcmUuICovXG4gIG9uTGluZT86IExpbmVIYW5kbGVyO1xufTtcblxuZXhwb3J0IHR5cGUgU3Bhd25BcmdzPFQgZXh0ZW5kcyBTcGF3bk9wdGlvbnM+ID1cbiAgfCBbY29tbWFuZDogc3RyaW5nLCAuLi5hcmdzOiBzdHJpbmdbXV1cbiAgfCBbY29tbWFuZDogc3RyaW5nLCBhcmdzOiByZWFkb25seSBzdHJpbmdbXV1cbiAgfCBbY29tbWFuZDogc3RyaW5nLCBhcmdzOiByZWFkb25seSBzdHJpbmdbXSwgb3B0aW9uczogVF1cbiAgfCBbY29tbWFuZDogc3RyaW5nLCAuLi5hcmdzQW5kT3B0aW9uczogWy4uLnN0cmluZ1tdLCBUXV07XG5cbmludGVyZmFjZSBQYXJzZWRTcGF3bkFyZ3M8VCBleHRlbmRzIFNwYXduT3B0aW9ucz4ge1xuICBjb21tYW5kOiBzdHJpbmc7XG4gIGNvbW1hbmRBcmdzOiBzdHJpbmdbXTtcbiAgb3B0aW9ucz86IFQ7XG59XG5cbmZ1bmN0aW9uIHBhcnNlU3Bhd25BcmdzPFQgZXh0ZW5kcyBTcGF3bk9wdGlvbnM+KGlucHV0OiBTcGF3bkFyZ3M8VD4pOiBQYXJzZWRTcGF3bkFyZ3M8VD4ge1xuICBsZXQgW3ZhbHVlLCAuLi52YWx1ZXNdID0gaW5wdXQ7XG4gIGNvbnN0IFtjb21tYW5kLCAuLi5jb21tYW5kQXJnc10gPSBzaGxleCh2YWx1ZSk7XG5cbiAgY29uc3QgbGFzdCA9IHZhbHVlcy5hdCgtMSk7XG4gIGNvbnN0IG9wdGlvbnMgPVxuICAgIGxhc3QgIT09IG51bGwgJiYgdHlwZW9mIGxhc3QgPT09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkobGFzdCkgPyBsYXN0IDogdW5kZWZpbmVkO1xuICBjb25zdCBhcmd1bWVudFZhbHVlcyA9IG9wdGlvbnMgPyB2YWx1ZXMuc2xpY2UoMCwgLTEpIDogdmFsdWVzO1xuICBjb25zdCB2YWx1ZUFyZ3M6IHN0cmluZ1tdID1cbiAgICBhcmd1bWVudFZhbHVlcy5sZW5ndGggPT09IDEgJiYgQXJyYXkuaXNBcnJheShhcmd1bWVudFZhbHVlc1swXSlcbiAgICAgID8gWy4uLmFyZ3VtZW50VmFsdWVzWzBdXVxuICAgICAgOiBhcmd1bWVudFZhbHVlcztcblxuICByZXR1cm4ge1xuICAgIGNvbW1hbmQsXG4gICAgY29tbWFuZEFyZ3M6IFsuLi5jb21tYW5kQXJncywgLi4udmFsdWVBcmdzXSxcbiAgICBvcHRpb25zOiBvcHRpb25zIGFzIFQsXG4gIH07XG59XG5cbi8qKlxuICogRHJvcCB0aGUgc2luZ2xlIHRyYWlsaW5nIGVtcHR5IGVudHJ5IGBzcGF3blN5bmNgIGFkZHMgd2hlbiBzcGxpdHRpbmcgb24gYSBmaW5hbFxuICogbmV3bGluZSAoYFwiaGlcXG5cImAgLT4gYFtcImhpXCIsIFwiXCJdYCkuIERvZXMgbm90IHJlbW92ZSBtdWx0aXBsZSB0cmFpbGluZyBlbXB0aWVzLlxuICovXG5mdW5jdGlvbiB3aXRob3V0U3Bhd25UcmFpbGluZ0VtcHR5TGluZShsaW5lczogcmVhZG9ubHkgc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gIGlmIChsaW5lcy5sZW5ndGggPiAwICYmIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdID09PSBcIlwiKSB7XG4gICAgcmV0dXJuIGxpbmVzLnNsaWNlKDAsIC0xKTtcbiAgfVxuICByZXR1cm4gbGluZXMgYXMgc3RyaW5nW107XG59XG5cbi8qKiBSZW1vdmUgYXQgbW9zdCBvbmUgdHJhaWxpbmcgbmV3bGluZSBmcm9tIGNhcHR1cmVkIHNwYXduIHN0ZG91dC9zdGRlcnIgdGV4dC4gKi9cbmZ1bmN0aW9uIHRyaW1TaW5nbGVUcmFpbGluZ05ld2xpbmUodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHRleHQuZW5kc1dpdGgoXCJcXHJcXG5cIikpIHJldHVybiB0ZXh0LnNsaWNlKDAsIC0yKTtcbiAgaWYgKHRleHQuZW5kc1dpdGgoXCJcXG5cIikpIHJldHVybiB0ZXh0LnNsaWNlKDAsIC0xKTtcbiAgcmV0dXJuIHRleHQ7XG59XG5cbi8qKiBMaW5lLWFycmF5IHZpZXcgb2YgYXN5bmMtY2FwdHVyZWQgb3V0cHV0LiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplZEFzeW5jTGluZXMobGluZXM6IHJlYWRvbmx5IHN0cmluZ1tdLCB0cmltOiBib29sZWFuIHwgdW5kZWZpbmVkKTogc3RyaW5nW10ge1xuICBpZiAodHJpbSA9PT0gdHJ1ZSkgcmV0dXJuIGxpbmVzRnJvbUNhcHR1cmVkT3V0cHV0KGxpbmVzLmpvaW4oXCJcXG5cIikudHJpbSgpKTtcbiAgcmV0dXJuIGxpbmVzIGFzIHN0cmluZ1tdO1xufVxuXG4vKiogSm9pbiBhc3luYy1jYXB0dXJlZCBsaW5lcyBpbnRvIHN0ZG91dC9zdGRlcnIgdGV4dC4gKi9cbmZ1bmN0aW9uIGZvcm1hdEFzeW5jQ2FwdHVyZWRMaW5lcyhsaW5lczogcmVhZG9ubHkgc3RyaW5nW10sIHRyaW06IGJvb2xlYW4gfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICBjb25zdCBqb2luZWQgPSBsaW5lcy5qb2luKFwiXFxuXCIpO1xuICByZXR1cm4gdHJpbSA9PT0gdHJ1ZSA/IGpvaW5lZC50cmltKCkgOiBqb2luZWQ7XG59XG5cbi8qKiBMaW5lLWFycmF5IHZpZXcgb2Ygc3luYy1jYXB0dXJlZCBvdXRwdXQuICovXG5mdW5jdGlvbiBub3JtYWxpemVkU3luY0xpbmVzKGxpbmVzOiByZWFkb25seSBzdHJpbmdbXSwgdHJpbTogYm9vbGVhbiB8IHVuZGVmaW5lZCk6IHN0cmluZ1tdIHtcbiAgaWYgKHRyaW0gPT09IGZhbHNlKSByZXR1cm4gbGluZXMgYXMgc3RyaW5nW107XG4gIGlmICh0cmltID09PSB0cnVlKSByZXR1cm4gbGluZXNGcm9tQ2FwdHVyZWRPdXRwdXQobGluZXMuam9pbihcIlxcblwiKS50cmltKCkpO1xuICByZXR1cm4gd2l0aG91dFNwYXduVHJhaWxpbmdFbXB0eUxpbmUobGluZXMpO1xufVxuXG4vKiogRm9ybWF0IHN5bmMtY2FwdHVyZWQgc3Rkb3V0L3N0ZGVyciB0ZXh0LiAqL1xuZnVuY3Rpb24gZm9ybWF0U3luY0NhcHR1cmVkVGV4dChcbiAgdGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICB0cmltOiBib29sZWFuIHwgdW5kZWZpbmVkLFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHRleHQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKHRyaW0gPT09IGZhbHNlKSByZXR1cm4gdGV4dDtcbiAgaWYgKHRyaW0gPT09IHRydWUpIHJldHVybiB0ZXh0LnRyaW0oKTtcbiAgcmV0dXJuIHRyaW1TaW5nbGVUcmFpbGluZ05ld2xpbmUodGV4dCk7XG59XG5cbi8qKlxuICogSHVtYW4tcmVhZGFibGUgbGFiZWwgZm9yIGEgc3Bhd25lZCBjb21tYW5kLCB1c2VkIGluIGVycm9yIG1lc3NhZ2VzLlxuICpcbiAqIEBwYXJhbSBjb21tYW5kIC0gRXhlY3V0YWJsZSBuYW1lIG9yIHBhdGhcbiAqIEBwYXJhbSBhcmdzIC0gQXJndW1lbnRzIHBhc3NlZCB0byB0aGUgZXhlY3V0YWJsZVxuICogQHJldHVybnMgQmFja3RpY2std3JhcHBlZCBgY29tbWFuZCBhcmcxIGFyZzIgLi4uYCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gY29tbWFuZExhYmVsKGNvbW1hbmQ6IHN0cmluZywgYXJnczogc3RyaW5nW10pOiBzdHJpbmcge1xuICByZXR1cm4gYFxcYCR7Y29tbWFuZH0gJHthcmdzLmpvaW4oXCIgXCIpfVxcYGA7XG59XG5cbi8qKiBSZXR1cm4gd2hldGhlciBOb2RlIGZhaWxlZCB0byBzcGF3biBiZWNhdXNlIHRoZSBleGVjdXRhYmxlIHdhcyBub3QgZm91bmQuICovXG5mdW5jdGlvbiBpc0NvbW1hbmROb3RGb3VuZEVycm9yKGVycm9yOiB1bmtub3duKTogZXJyb3IgaXMgTm9kZUpTLkVycm5vRXhjZXB0aW9uIHtcbiAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgXCJjb2RlXCIgaW4gZXJyb3IgJiYgZXJyb3IuY29kZSA9PT0gXCJFTk9FTlRcIjtcbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgb2JqZWN0IHJldHVybmVkIGZyb20ge0BsaW5rIHNwYXdufSB3aXRoIGxpdmUgbGluZSBhcnJheXMgYW5kIGxhenlcbiAqIHRyaW1tZWQgYHN0ZG91dGAgLyBgc3RkZXJyYCBnZXR0ZXJzIGRlcml2ZWQgZnJvbSB0aG9zZSBsaW5lcy5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRXhlY1Jlc3VsdChcbiAgZXhpdENvZGU6IG51bWJlcixcbiAgc3Rkb3V0TGluZXM6IHN0cmluZ1tdLFxuICBzdGRlcnJMaW5lczogc3RyaW5nW10sXG4gIHRyaW06IGJvb2xlYW4gfCB1bmRlZmluZWQsXG4pOiBFeGVjUmVzdWx0IHtcbiAgcmV0dXJuIHtcbiAgICBleGl0Q29kZSxcbiAgICBnZXQgc3Rkb3V0TGluZXMoKSB7XG4gICAgICByZXR1cm4gbm9ybWFsaXplZEFzeW5jTGluZXMoc3Rkb3V0TGluZXMsIHRyaW0pO1xuICAgIH0sXG4gICAgZ2V0IHN0ZGVyckxpbmVzKCkge1xuICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRBc3luY0xpbmVzKHN0ZGVyckxpbmVzLCB0cmltKTtcbiAgICB9LFxuICAgIGdldCBzdGRvdXQoKSB7XG4gICAgICByZXR1cm4gZm9ybWF0QXN5bmNDYXB0dXJlZExpbmVzKHN0ZG91dExpbmVzLCB0cmltKTtcbiAgICB9LFxuICAgIGdldCBzdGRlcnIoKSB7XG4gICAgICByZXR1cm4gZm9ybWF0QXN5bmNDYXB0dXJlZExpbmVzKHN0ZGVyckxpbmVzLCB0cmltKTtcbiAgICB9LFxuICB9O1xufVxuXG4vKipcbiAqIEJ1aWxkIHRoZSBvYmplY3QgcmV0dXJuZWQgZnJvbSB7QGxpbmsgc3Bhd25TeW5jfS4gQ2FwdHVyZWQgc3RyaW5ncyBhcmUgc3RvcmVkXG4gKiBhcy1pczsgYHN0ZG91dGAgLyBgc3RkZXJyYCB0cmltIGRpcmVjdGx5LCBhbmQgbGluZSBhcnJheXMgc3BsaXQgb25seSBvbiByZWFkLlxuICovXG5mdW5jdGlvbiBjcmVhdGVTeW5jRXhlY1Jlc3VsdChcbiAgZXhpdENvZGU6IG51bWJlcixcbiAgc3Rkb3V0VGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBzdGRlcnJUZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHRyaW06IGJvb2xlYW4gfCB1bmRlZmluZWQsXG4pOiBFeGVjUmVzdWx0IHtcbiAgbGV0IHN0ZG91dExpbmVzQ2FjaGU6IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuICBsZXQgc3RkZXJyTGluZXNDYWNoZTogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG5cbiAgY29uc3Qgc3luY0xpbmVzID0gKHRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZ1tdIHwgdW5kZWZpbmVkID0+IHtcbiAgICBpZiAodGV4dCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiBub3JtYWxpemVkU3luY0xpbmVzKGxpbmVzRnJvbUNhcHR1cmVkT3V0cHV0KHRleHQpLCB0cmltKTtcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGV4aXRDb2RlLFxuICAgIGdldCBzdGRvdXRMaW5lcygpIHtcbiAgICAgIGlmIChzdGRvdXRUZXh0ID09PSB1bmRlZmluZWQpIHJldHVybiBbXTtcbiAgICAgIHN0ZG91dExpbmVzQ2FjaGUgPz89IHN5bmNMaW5lcyhzdGRvdXRUZXh0KSA/PyBbXTtcbiAgICAgIHJldHVybiBzdGRvdXRMaW5lc0NhY2hlO1xuICAgIH0sXG4gICAgZ2V0IHN0ZGVyckxpbmVzKCkge1xuICAgICAgaWYgKHN0ZGVyclRleHQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIFtdO1xuICAgICAgc3RkZXJyTGluZXNDYWNoZSA/Pz0gc3luY0xpbmVzKHN0ZGVyclRleHQpID8/IFtdO1xuICAgICAgcmV0dXJuIHN0ZGVyckxpbmVzQ2FjaGU7XG4gICAgfSxcbiAgICBnZXQgc3Rkb3V0KCkge1xuICAgICAgcmV0dXJuIGZvcm1hdFN5bmNDYXB0dXJlZFRleHQoc3Rkb3V0VGV4dCwgdHJpbSkgPz8gXCJcIjtcbiAgICB9LFxuICAgIGdldCBzdGRlcnIoKSB7XG4gICAgICByZXR1cm4gZm9ybWF0U3luY0NhcHR1cmVkVGV4dChzdGRlcnJUZXh0LCB0cmltKSA/PyBcIlwiO1xuICAgIH0sXG4gIH07XG59XG5cbi8qKlxuICogRXh0cmFjdCB1c2VyLXN1cHBsaWVkIGxpbmUgaGFuZGxlcnMgZnJvbSBhIHtAbGluayBTdGRpb09wdGlvbn0uXG4gKlxuICogVGhlIGBcImNhcHR1cmVcImAgbWFya2VyIGlzIGZpbHRlcmVkIG91dDsgY2FwdHVyZSBpdHNlbGYgaXMgYWx3YXlzIGhhbmRsZWQgYnlcbiAqIHB1c2hpbmcgaW50byB0aGUgbGluZSBidWZmZXIgaW5zaWRlIHtAbGluayByZXNvbHZlU3RkaW99LlxuICpcbiAqIEBwYXJhbSBvcHRpb24gLSBTdGRpbyBvcHRpb24gdGhhdCBtYXkgZW1iZWQgb25lIG9yIG1vcmUgaGFuZGxlcnNcbiAqIEByZXR1cm5zIEhhbmRsZXJzIHRvIGludm9rZSBhZnRlciBlYWNoIGNhcHR1cmVkIGxpbmUgKG1heSBiZSBlbXB0eSlcbiAqL1xuZnVuY3Rpb24gbGluZUhhbmRsZXJzKG9wdGlvbjogU3RkaW9PcHRpb24pOiBMaW5lSGFuZGxlcltdIHtcbiAgaWYgKHR5cGVvZiBvcHRpb24gPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFtvcHRpb25dO1xuICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb24pKSB7XG4gICAgcmV0dXJuIG9wdGlvbi5maWx0ZXIoKGl0ZW0pOiBpdGVtIGlzIExpbmVIYW5kbGVyID0+IGl0ZW0gIT09IFwiY2FwdHVyZVwiKTtcbiAgfVxuICByZXR1cm4gW107XG59XG5cbi8qKlxuICogVHJ1ZSB3aGVuIGEgc3RkaW8gb3B0aW9uIGlzIGEgc3RyaW5nIHNwYXduIG1vZGUgcmF0aGVyIHRoYW4gY2FwdHVyZS9oYW5kbGVycy5cbiAqXG4gKiB7QGxpbmsgcmVzb2x2ZVN0ZGlvfSBzdGlsbCB0cmVhdHMgYFwicGlwZVwiYCBhcyBwaXBlLWFuZC1jYXB0dXJlOyBvbmx5XG4gKiBgXCJpbmhlcml0XCJgIGFuZCBgXCJpZ25vcmVcImAgcmV0dXJuIHdpdGhvdXQgYSBsaW5lIGNhbGxiYWNrLlxuICpcbiAqIEBwYXJhbSBvcHRpb24gLSBTdGRpbyBvcHRpb24gdG8gY2xhc3NpZnlcbiAqIEByZXR1cm5zIFdoZXRoZXIgYG9wdGlvbmAgaXMgYFwiaW5oZXJpdFwiYCwgYFwicGlwZVwiYCwgb3IgYFwiaWdub3JlXCJgXG4gKi9cbmZ1bmN0aW9uIGlzUGFzc3Rocm91Z2hNb2RlKG9wdGlvbjogdW5rbm93bik6IG9wdGlvbiBpcyBFeGVjU3RkaW8ge1xuICByZXR1cm4gb3B0aW9uID09PSBcImluaGVyaXRcIiB8fCBvcHRpb24gPT09IFwicGlwZVwiIHx8IG9wdGlvbiA9PT0gXCJpZ25vcmVcIjtcbn1cblxuLyoqIFRydWUgd2hlbiBzdGRpbiBpcyBkYXRhIHJhdGhlciB0aGFuIG9uZSBvZiB0aGUgdGhyZWUgcmVzZXJ2ZWQgc3RkaW8gbW9kZXMuICovXG5mdW5jdGlvbiBpc1N0ZGluUGF5bG9hZChzdGRpbjogRXhlY1N0ZGlvIHwgc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RkaW4gaXMgc3RyaW5nIHtcbiAgcmV0dXJuIHR5cGVvZiBzdGRpbiA9PT0gXCJzdHJpbmdcIiAmJiAhaXNQYXNzdGhyb3VnaE1vZGUoc3RkaW4pO1xufVxuXG4vKipcbiAqIE1hcCBhIHtAbGluayBTdGRpb09wdGlvbn0gaW50byBhIHNwYXduIHN0ZGlvIG1vZGUgYW5kIG9wdGlvbmFsIGxpbmUgY2FsbGJhY2suXG4gKlxuICogUGlwZWQgbW9kZXMgKGBcImNhcHR1cmVcImAsIGBcInBpcGVcImAsIGhhbmRsZXJzLCBhcnJheXMpIGFwcGVuZCBldmVyeSBsaW5lIHRvXG4gKiBgbGluZXNgIGFuZCBpbnZva2UgYW55IGVtYmVkZGVkIGhhbmRsZXJzLiBPbWl0dGVkIG9wdGlvbnMgdXNlIGBkZWZhdWx0TW9kZWAuXG4gKlxuICogQHBhcmFtIG9wdGlvbiAtIENhbGxlciBzdGRpbyBwcmVmZXJlbmNlIGZvciBvbmUgZmRcbiAqIEBwYXJhbSBsaW5lcyAtIE11dGFibGUgYnVmZmVyIHRoYXQgcmVjZWl2ZXMgZWFjaCBwaXBlZCBsaW5lXG4gKiBAcGFyYW0gZGVmYXVsdE1vZGUgLSBTcGF3biBtb2RlIHdoZW4gYG9wdGlvbmAgaXMgb21pdHRlZCAoYFwiaW5oZXJpdFwiYCBieSBkZWZhdWx0KVxuICogQHJldHVybnMgUmVzb2x2ZWQgc3Bhd24gbW9kZSBhbmQgb3B0aW9uYWwgcGVyLWxpbmUgY2FsbGJhY2tcbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVN0ZGlvKFxuICBvcHRpb246IFN0ZGlvT3B0aW9uIHwgdW5kZWZpbmVkLFxuICBsaW5lczogc3RyaW5nW10sXG4gIGRlZmF1bHRNb2RlOiBFeGVjU3RkaW8gPSBcImluaGVyaXRcIixcbik6IFJlc29sdmVkU3RkaW8ge1xuICBpZiAob3B0aW9uID09PSB1bmRlZmluZWQpIHJldHVybiB7IG1vZGU6IGRlZmF1bHRNb2RlIH07XG4gIGlmIChpc1Bhc3N0aHJvdWdoTW9kZShvcHRpb24pICYmIG9wdGlvbiAhPT0gXCJwaXBlXCIpIHJldHVybiB7IG1vZGU6IG9wdGlvbiB9O1xuXG4gIGNvbnN0IGhhbmRsZXJzID0gbGluZUhhbmRsZXJzKG9wdGlvbik7XG4gIHJldHVybiB7XG4gICAgbW9kZTogXCJwaXBlXCIsXG4gICAgb25MaW5lOiAobGluZSkgPT4ge1xuICAgICAgbGluZXMucHVzaChsaW5lKTtcbiAgICAgIGZvciAoY29uc3QgaGFuZGxlciBvZiBoYW5kbGVycykgaGFuZGxlcihsaW5lKTtcbiAgICB9LFxuICB9O1xufVxuXG4vKipcbiAqIFJlYWQgYSByZWFkYWJsZSBzdHJlYW0gbGluZS1ieS1saW5lIGFuZCBpbnZva2UgYG9uTGluZWAgZm9yIGVhY2ggY2h1bmsuXG4gKlxuICogVXNlcyBgcmVhZGxpbmVgIHNvIGBcXHJcXG5gIGFuZCBiYXJlIGBcXG5gIGFyZSBub3JtYWxpemVkLiBUaGUgaW50ZXJmYWNlIGlzXG4gKiBhbHdheXMgY2xvc2VkIGluIGEgYGZpbmFsbHlgIGJsb2NrLlxuICpcbiAqIEBwYXJhbSBzdHJlYW0gLSBTdWJwcm9jZXNzIHN0ZG91dCBvciBzdGRlcnIgc3RyZWFtXG4gKiBAcGFyYW0gb25MaW5lIC0gQ2FsbGJhY2sgaW52b2tlZCBvbmNlIHBlciBvdXRwdXQgbGluZVxuICovXG5hc3luYyBmdW5jdGlvbiByZWFkTGluZXMoc3RyZWFtOiBSZWFkYWJsZSwgb25MaW5lOiBMaW5lSGFuZGxlcik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBybCA9IHJlYWRsaW5lLmNyZWF0ZUludGVyZmFjZSh7IGlucHV0OiBzdHJlYW0sIGNybGZEZWxheTogSW5maW5pdHkgfSk7XG4gIHRyeSB7XG4gICAgZm9yIGF3YWl0IChjb25zdCBsaW5lIG9mIHJsKSBvbkxpbmUobGluZSk7XG4gIH0gZmluYWxseSB7XG4gICAgcmwuY2xvc2UoKTtcbiAgfVxufVxuXG4vKipcbiAqIFN0YXJ0IGEgYmFja2dyb3VuZCBsaW5lIHJlYWQgd2hlbiB0aGUgcmVzb2x2ZWQgaGFuZGxlciBwaXBlcyBhIHN0cmVhbS5cbiAqXG4gKiBAcGFyYW0gcmVhZHMgLSBQcm9taXNlIGxpc3QgYXdhaXRlZCBiZWZvcmUgcmV0dXJuaW5nIHRoZSB7QGxpbmsgRXhlY1Jlc3VsdH1cbiAqIEBwYXJhbSBzdHJlYW0gLSBTdWJwcm9jZXNzIHN0cmVhbSBmb3IgdGhpcyBmZCAoYG51bGxgIHdoZW4gdW5hdmFpbGFibGUpXG4gKiBAcGFyYW0gaGFuZGxlciAtIFJlc29sdmVkIHN0ZGlvIGNvbmZpZyBmcm9tIHtAbGluayByZXNvbHZlU3RkaW99XG4gKi9cbmZ1bmN0aW9uIHF1ZXVlTGluZVJlYWRzKFxuICByZWFkczogUHJvbWlzZTx2b2lkPltdLFxuICBzdHJlYW06IFJlYWRhYmxlIHwgbnVsbCxcbiAgaGFuZGxlcjogUmVzb2x2ZWRTdGRpbyxcbik6IHZvaWQge1xuICBpZiAoaGFuZGxlci5vbkxpbmUgJiYgc3RyZWFtKSByZWFkcy5wdXNoKHJlYWRMaW5lcyhzdHJlYW0sIGhhbmRsZXIub25MaW5lKSk7XG59XG5cbi8qKlxuICogV3JpdGUgc3RyaW5nIHN0ZGluIHRvIGEgc3Bhd25lZCBwcm9jZXNzIGFuZCBjbG9zZSB0aGUgc3RyZWFtLlxuICpcbiAqIE5vLW9wIHVubGVzcyBgc3RkaW5gIGlzIGEgcGF5bG9hZCBzdHJpbmcgKG5vdCBhIHN0ZGlvIG1vZGUpIGFuZFxuICogYHByb2Muc3RkaW5gIGlzIGF2YWlsYWJsZS4gQSBjaGlsZCB0aGF0IGV4aXRzIGJlZm9yZSBjb25zdW1pbmcgdGhlIHBheWxvYWRcbiAqIGNsb3NlcyBpdHMgcGlwZTsgRVBJUEUgaXMgZXhwZWN0ZWQgaW4gdGhhdCBjYXNlIGFuZCBpcyBpZ25vcmVkLlxuICpcbiAqIEBwYXJhbSBwcm9jIC0gQ2hpbGQgcHJvY2VzcyByZXR1cm5lZCBmcm9tIGBzcGF3bmBcbiAqIEBwYXJhbSBzdGRpbiAtIFN0ZGlvIG1vZGUgb3Igc3RyaW5nIHBheWxvYWQgZnJvbSB7QGxpbmsgRXhlY09wdGlvbnN9XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHdyaXRlU3RkaW4oXG4gIHByb2M6IENoaWxkUHJvY2VzcyxcbiAgc3RkaW46IEV4ZWNTdGRpbyB8IHN0cmluZyB8IHVuZGVmaW5lZCxcbik6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoIWlzU3RkaW5QYXlsb2FkKHN0ZGluKSB8fCAhcHJvYy5zdGRpbikgcmV0dXJuO1xuICBjb25zdCBjb21wbGV0aW9uID0gZmluaXNoZWQocHJvYy5zdGRpbiwgeyBjbGVhbnVwOiB0cnVlIH0pO1xuICBwcm9jLnN0ZGluLmVuZChzdGRpbik7XG4gIHRyeSB7XG4gICAgYXdhaXQgY29tcGxldGlvbjtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKCEoZXJyIGluc3RhbmNlb2YgRXJyb3IgJiYgXCJjb2RlXCIgaW4gZXJyICYmIGVyci5jb2RlID09PSBcIkVQSVBFXCIpKSB0aHJvdyBlcnI7XG4gIH1cbn1cblxuLyoqXG4gKiBBd2FpdCBwcm9jZXNzIGV4aXQgYW5kIG5vcm1hbGl6ZSBhIG1pc3NpbmcgZXhpdCBjb2RlIHRvIGAxYC5cbiAqXG4gKiBSZWplY3RzIHdoZW4gc3Bhd24gZmFpbHMgYmVmb3JlIGBjbG9zZWAgKGUuZy4gZXhlY3V0YWJsZSBub3QgZm91bmQpLlxuICpcbiAqIEBwYXJhbSBwcm9jIC0gQ2hpbGQgcHJvY2VzcyByZXR1cm5lZCBmcm9tIGBzcGF3bmBcbiAqIEByZXR1cm5zIFJlc29sdmVkIGV4aXQgY29kZVxuICovXG5mdW5jdGlvbiB3YWl0Rm9yRXhpdChwcm9jOiBDaGlsZFByb2Nlc3MpOiBQcm9taXNlPG51bWJlcj4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHByb2Mub25jZShcImVycm9yXCIsIHJlamVjdCk7XG4gICAgcHJvYy5vbmNlKFwiY2xvc2VcIiwgKGNvZGUpID0+IHJlc29sdmUoY29kZSA/PyAxKSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEJ1aWxkIGFuIGBFcnJvcmAgZm9yIGEgbm9uLXplcm8gZXhpdCB3aGVuIHtAbGluayBFeGVjT3B0aW9ucy5jaGVja30gaXMgc2V0LlxuICpcbiAqIFByZWZlcnMgdHJpbW1lZCBzdGRlcnIgdGV4dCwgdGhlbiBzdGRvdXQsIGluIHRoZSBtZXNzYWdlIGJvZHkuXG4gKlxuICogQHBhcmFtIGNvbW1hbmQgLSBFeGVjdXRhYmxlIG5hbWUgb3IgcGF0aFxuICogQHBhcmFtIGFyZ3MgLSBBcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBleGVjdXRhYmxlXG4gKiBAcGFyYW0gcmVzdWx0IC0gQ29tcGxldGVkIGV4ZWMgb3V0Y29tZSB3aXRoIGNhcHR1cmVkIG91dHB1dFxuICogQHJldHVybnMgRXJyb3Igc3VpdGFibGUgZm9yIHRocm93aW5nIGZyb20ge0BsaW5rIHNwYXdufVxuICovXG5mdW5jdGlvbiBleGVjRXJyb3IoY29tbWFuZDogc3RyaW5nLCBhcmdzOiBzdHJpbmdbXSwgcmVzdWx0OiBFeGVjUmVzdWx0KTogRXJyb3Ige1xuICBjb25zdCBkZXRhaWwgPSByZXN1bHQuc3RkZXJyIHx8IHJlc3VsdC5zdGRvdXQ7XG4gIHJldHVybiBuZXcgRXJyb3IoXG4gICAgYCR7Y29tbWFuZExhYmVsKGNvbW1hbmQsIGFyZ3MpfSBmYWlsZWQgKGV4aXQgJHtyZXN1bHQuZXhpdENvZGV9KSR7ZGV0YWlsID8gYDogJHtkZXRhaWx9YCA6IFwiXCJ9YCxcbiAgKTtcbn1cblxuLyoqXG4gKiBNYXAgYSB7QGxpbmsgU3luY0V4ZWNTdGRpb30gb3B0aW9uIHRvIGEgYHNwYXduU3luY2Agc3RkaW8gbW9kZS5cbiAqXG4gKiBgXCJjYXB0dXJlXCJgIHBpcGVzIHRoZSBmZCBzbyBvdXRwdXQgY2FuIGJlIHJlYWQgaW50byB0aGUge0BsaW5rIEV4ZWNSZXN1bHR9LlxuICpcbiAqIEBwYXJhbSBvcHRpb24gLSBDYWxsZXIgc3RkaW8gcHJlZmVyZW5jZSBmb3Igb25lIGZkXG4gKiBAcGFyYW0gZGVmYXVsdE1vZGUgLSBTcGF3biBtb2RlIHdoZW4gYG9wdGlvbmAgaXMgb21pdHRlZCAoYFwiaW5oZXJpdFwiYCBieSBkZWZhdWx0KVxuICogQHJldHVybnMgVmFsdWUgZm9yIHRoZSBgc3Bhd25TeW5jYCBzdGRpbyB0dXBsZVxuICovXG5mdW5jdGlvbiByZXNvbHZlU3luY1N0ZGlvKFxuICBvcHRpb246IFN5bmNFeGVjU3RkaW8gfCB1bmRlZmluZWQsXG4gIGRlZmF1bHRNb2RlOiBFeGVjU3RkaW8gPSBcImluaGVyaXRcIixcbik6IEV4ZWNTdGRpbyB7XG4gIGlmIChvcHRpb24gPT09IHVuZGVmaW5lZCkgcmV0dXJuIGRlZmF1bHRNb2RlO1xuICBpZiAob3B0aW9uID09PSBcImNhcHR1cmVcIikgcmV0dXJuIFwicGlwZVwiO1xuICByZXR1cm4gb3B0aW9uO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSByYXcgYHNwYXduU3luY2Agb3V0cHV0IHRvIGEgVVRGLTggc3RyaW5nIHdoZW4gY2FwdHVyZSBpcyBlbmFibGVkLlxuICovXG5mdW5jdGlvbiBjYXB0dXJlZFRleHQob3V0cHV0OiBzdHJpbmcgfCBCdWZmZXIgfCBudWxsIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKG91dHB1dCA9PT0gbnVsbCB8fCBvdXRwdXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIHR5cGVvZiBvdXRwdXQgPT09IFwic3RyaW5nXCIgPyBvdXRwdXQgOiBvdXRwdXQudG9TdHJpbmcoXCJ1dGY4XCIpO1xufVxuXG4vKipcbiAqIFNwbGl0IGNhcHR1cmVkIHByb2Nlc3Mgb3V0cHV0IGludG8gbGluZXMgZm9yIHtAbGluayBFeGVjUmVzdWx0LnN0ZG91dExpbmVzfSAvXG4gKiB7QGxpbmsgRXhlY1Jlc3VsdC5zdGRlcnJMaW5lc30gKHtAbGluayBzcGF3blN5bmN9IG9ubHk7IGludm9rZWQgbGF6aWx5KS5cbiAqL1xuZnVuY3Rpb24gbGluZXNGcm9tQ2FwdHVyZWRPdXRwdXQob3V0cHV0OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIHJldHVybiBvdXRwdXQucmVwbGFjZSgvXFxyXFxuL2csIFwiXFxuXCIpLnJlcGxhY2UoL1xcci9nLCBcIlxcblwiKS5zcGxpdChcIlxcblwiKTtcbn1cblxuLyoqXG4gKiBTcGF3biBhIHN1YnByb2Nlc3MuIFJldHVybnMgdGhlIExJVkUgY2hpbGQgaGFuZGxlIHRoYXQgaXMgQUxTTyBhXG4gKiBgUHJvbWlzZTxFeGVjUmVzdWx0PmAgcmVzb2x2aW5nIG9uIGV4aXQgLSBzZWUge0BsaW5rIENoaWxkUHJvY2Vzc1Jlc3VsdH0uXG4gKlxuICogVGhlIHByb21pc2UgaGFsZiBpcyB0aGUgZXhhY3QgYmVoYXZpb3VyIHRoaXMgZnVuY3Rpb24gaGFkIGJlZm9yZTogaXQgYXdhaXRzXG4gKiBleGl0IChhbmQgYW55IGxpbmUgcmVhZHMgLyBzdGRpbiB3cml0ZSksIHRoZW4gcmVzb2x2ZXMgdG8gdGhlIHtAbGluayBFeGVjUmVzdWx0fVxuICogb3IgcmVqZWN0cyAoc3Bhd24gZXJyb3Igb3RoZXIgdGhhbiBhIG1pc3NpbmcgZXhlY3V0YWJsZSwgb3IgYGNoZWNrYCBvbiBub24temVyb1xuICogZXhpdCkuIEV4aXN0aW5nIGBhd2FpdCBzcGF3biguLi4pYCBjYWxsZXJzIGFyZSB1bmFmZmVjdGVkLiBUaGUgaGFuZGxlIGhhbGYgbGV0cyBhXG4gKiBjYWxsZXIgc3VwZXJ2aXNlIHRoZSBwcm9jZXNzIChgLnBpZGAsIGAua2lsbChzaWduYWwpYCwgYGV4aXRgIGV2ZW50KSB3aXRob3V0IGFcbiAqIHNlY29uZCBzcGF3biAtIGUuZy4gYEBkYngtdG9vbHMvYXBwa2l0YCdzIGBiaW5kUHJvY2Vzc2AuXG4gKlxuICogQHBhcmFtIGNvbW1hbmQgLSBFeGVjdXRhYmxlIHRvIHJ1biAocmVzb2x2ZWQgb24gYFBBVEhgIHdoZW4gYHNoZWxsYCBpcyBzZXQgb24gb3B0aW9ucylcbiAqIEBwYXJhbSBhcmdzIC0gQXJndW1lbnRzIHBhc3NlZCB2ZXJiYXRpbSB0byB0aGUgZXhlY3V0YWJsZVxuICogQHBhcmFtIG9wdGlvbnMgLSBTcGF3biwgc3RkaW8sIGFuZCBjaGVjayBvcHRpb25zXG4gKiBAcmV0dXJucyBUaGUgbGl2ZSBgQ2hpbGRQcm9jZXNzYCwgYXdhaXRhYmxlIHRvIGV4aXQgY29kZSArIGNhcHR1cmVkIG91dHB1dFxuICogQHRocm93cyAob24gdGhlIHByb21pc2UpIFdoZW4gc3Bhd24gZmFpbHMgZm9yIGEgcmVhc29uIG90aGVyIHRoYW4gYSBtaXNzaW5nXG4gKiBleGVjdXRhYmxlLCBsaW5lIHJlYWRzIGZhaWwsIG9yIGBjaGVja2AgaXMgdHJ1ZSBhbmQgZXhpdCBjb2RlIGlzIG5vbi16ZXJvXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzcGF3biguLi5hcmdzOiBTcGF3bkFyZ3M8RXhlY09wdGlvbnM+KTogQ2hpbGRQcm9jZXNzUmVzdWx0IHtcbiAgY29uc3QgeyBjb21tYW5kLCBjb21tYW5kQXJncywgb3B0aW9ucyA9IHt9IH0gPSBwYXJzZVNwYXduQXJncyhhcmdzKTtcbiAgY29uc3QgeyBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGNoZWNrLCB0cmltLCAuLi5zcGF3bk9wdHMgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHN0ZG91dExpbmVzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBzdGRlcnJMaW5lczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3Qgc3Rkb3V0SGFuZGxlciA9IHJlc29sdmVTdGRpbyhzdGRvdXQsIHN0ZG91dExpbmVzKTtcbiAgY29uc3Qgc3RkZXJySGFuZGxlciA9IHJlc29sdmVTdGRpbyhzdGRlcnIsIHN0ZGVyckxpbmVzKTtcbiAgY29uc3Qgc3RkaW5Nb2RlOiBFeGVjU3RkaW8gPSBpc1N0ZGluUGF5bG9hZChzdGRpbikgPyBcInBpcGVcIiA6IChzdGRpbiA/PyBcImluaGVyaXRcIik7XG5cbiAgY29uc3QgcHJvYyA9IG5vZGVTcGF3bihjb21tYW5kLCBjb21tYW5kQXJncywge1xuICAgIC4uLnNwYXduT3B0cyxcbiAgICBzdGRpbzogW3N0ZGluTW9kZSwgc3Rkb3V0SGFuZGxlci5tb2RlLCBzdGRlcnJIYW5kbGVyLm1vZGVdLFxuICB9KTtcblxuICBjb25zdCBzdGRpbldyaXRlID0gd3JpdGVTdGRpbihwcm9jLCBzdGRpbik7XG5cbiAgY29uc3QgcmVhZHM6IFByb21pc2U8dm9pZD5bXSA9IFtdO1xuICBxdWV1ZUxpbmVSZWFkcyhyZWFkcywgcHJvYy5zdGRvdXQsIHN0ZG91dEhhbmRsZXIpO1xuICBxdWV1ZUxpbmVSZWFkcyhyZWFkcywgcHJvYy5zdGRlcnIsIHN0ZGVyckhhbmRsZXIpO1xuXG4gIGNvbnN0IGNvbXBsZXRpb24gPSAoYXN5bmMgKCk6IFByb21pc2U8RXhlY1Jlc3VsdD4gPT4ge1xuICAgIGxldCBleGl0Q29kZSA9IDE7XG4gICAgbGV0IGNvbW1hbmROb3RGb3VuZEVycm9yOiBOb2RlSlMuRXJybm9FeGNlcHRpb24gfCB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIGV4aXRDb2RlID0gYXdhaXQgd2FpdEZvckV4aXQocHJvYyk7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChbc3RkaW5Xcml0ZSwgLi4ucmVhZHNdKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChbc3RkaW5Xcml0ZSwgLi4ucmVhZHNdKTtcbiAgICAgIGlmICghaXNDb21tYW5kTm90Rm91bmRFcnJvcihlcnIpKSB0aHJvdyBlcnI7XG4gICAgICBjb21tYW5kTm90Rm91bmRFcnJvciA9IGVycjtcbiAgICAgIGV4aXRDb2RlID0gQ09NTUFORF9OT1RfRk9VTkRfRVhJVF9DT0RFO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGNyZWF0ZUV4ZWNSZXN1bHQoZXhpdENvZGUsIHN0ZG91dExpbmVzLCBzdGRlcnJMaW5lcywgdHJpbSk7XG4gICAgaWYgKGNoZWNrICYmIHJlc3VsdC5leGl0Q29kZSAhPT0gMCkge1xuICAgICAgY29uc3QgZXJyID0gZXhlY0Vycm9yKGNvbW1hbmQsIGNvbW1hbmRBcmdzLCByZXN1bHQpO1xuICAgICAgaWYgKGNvbW1hbmROb3RGb3VuZEVycm9yKSBlcnIuY2F1c2UgPSBjb21tYW5kTm90Rm91bmRFcnJvcjtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSkoKTtcblxuICAvLyBBdHRhY2ggdGhlIHByb21pc2UgaW50ZXJmYWNlIG9udG8gdGhlIGxpdmUgY2hpbGQgc28gT05FIG9iamVjdCBpcyBib3RoLiBUaGVcbiAgLy8gbWV0aG9kcyBhcmUgYm91bmQgdG8gYGNvbXBsZXRpb25gIHNvIGB0aGlzYCBpcyB0aGUgcmVhbCBwcm9taXNlOyB0aGUgY2hpbGRcbiAgLy8gb3ducyBubyBjb25mbGljdGluZyBgdGhlbmAvYGNhdGNoYC9gZmluYWxseWAsIHNvIHRoaXMgaXMgcHVyZWx5IGFkZGl0aXZlLlxuICByZXR1cm4gYXR0YWNoUHJvbWlzZShwcm9jLCBjb21wbGV0aW9uKTtcbn1cblxuLyoqXG4gKiBBdHRhY2ggYSBwcm9taXNlJ3MgYHRoZW5gIC8gYGNhdGNoYCAvIGBmaW5hbGx5YCBvbnRvIGEgbGl2ZSBvYmplY3QsIHJldHVybmluZ1xuICogdGhlIHNhbWUgb2JqZWN0IHR5cGVkIGFzIGJvdGguIFVzZWQgYnkge0BsaW5rIHNwYXdufSB0byBtYWtlIGl0cyBgQ2hpbGRQcm9jZXNzYFxuICogYXdhaXRhYmxlIHdpdGhvdXQgd3JhcHBpbmcgaXQgLSBzbyBjYWxsZXJzIGtlZXAgdGhlIGxpdmUgaGFuZGxlIEFORCBgYXdhaXRgIGl0LlxuICovXG5mdW5jdGlvbiBhdHRhY2hQcm9taXNlPFQgZXh0ZW5kcyBvYmplY3QsIFI+KHRhcmdldDogVCwgcHJvbWlzZTogUHJvbWlzZTxSPik6IFQgJiBQcm9taXNlPFI+IHtcbiAgY29uc3QgaHlicmlkID0gdGFyZ2V0IGFzIFQgJiBQcm9taXNlPFI+O1xuICBoeWJyaWQudGhlbiA9IHByb21pc2UudGhlbi5iaW5kKHByb21pc2UpO1xuICBoeWJyaWQuY2F0Y2ggPSBwcm9taXNlLmNhdGNoLmJpbmQocHJvbWlzZSk7XG4gIGh5YnJpZC5maW5hbGx5ID0gcHJvbWlzZS5maW5hbGx5LmJpbmQocHJvbWlzZSk7XG4gIHJldHVybiBoeWJyaWQ7XG59XG5cbi8qKlxuICogU3Bhd24gYSBzdWJwcm9jZXNzIHN5bmNocm9ub3VzbHkgYW5kIHdhaXQgZm9yIGV4aXQuXG4gKlxuICogVW5saWtlIHtAbGluayBzcGF3bn0sIHN0ZGlvIG9wdGlvbnMgYXJlIGxpbWl0ZWQgdG8gYFwiaW5oZXJpdFwiYCwgYFwicGlwZVwiYCxcbiAqIGBcImlnbm9yZVwiYCwgYW5kIGBcImNhcHR1cmVcImAg4oCUIG5vIHBlci1saW5lIGNhbGxiYWNrcy5cbiAqXG4gKiBAcGFyYW0gY29tbWFuZCAtIEV4ZWN1dGFibGUgdG8gcnVuIChyZXNvbHZlZCBvbiBgUEFUSGAgd2hlbiBgc2hlbGxgIGlzIHNldCBvbiBvcHRpb25zKVxuICogQHBhcmFtIGFyZ3MgLSBBcmd1bWVudHMgcGFzc2VkIHZlcmJhdGltIHRvIHRoZSBleGVjdXRhYmxlXG4gKiBAcGFyYW0gc3Bhd25TeW5jIC0gU3Bhd24sIHN0ZGlvLCBhbmQgY2hlY2sgb3B0aW9uc1xuICogQHJldHVybnMgRXhpdCBjb2RlLCBjYXB0dXJlZCBsaW5lIGFycmF5cywgYW5kIHRyaW1tZWQgYHN0ZG91dGAgLyBgc3RkZXJyYCBnZXR0ZXJzXG4gKiBAdGhyb3dzIFdoZW4gc3Bhd24gZmFpbHMgZm9yIGEgcmVhc29uIG90aGVyIHRoYW4gYSBtaXNzaW5nIGV4ZWN1dGFibGUsIG9yXG4gKiBgY2hlY2tgIGlzIHRydWUgYW5kIGV4aXQgY29kZSBpcyBub24temVyb1xuICovXG5leHBvcnQgZnVuY3Rpb24gc3Bhd25TeW5jKC4uLmFyZ3M6IFNwYXduQXJnczxTeW5jRXhlY09wdGlvbnM+KTogRXhlY1Jlc3VsdCB7XG4gIGNvbnN0IHsgY29tbWFuZCwgY29tbWFuZEFyZ3MsIG9wdGlvbnMgPSB7fSB9ID0gcGFyc2VTcGF3bkFyZ3MoYXJncyk7XG4gIGNvbnN0IHsgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBjaGVjaywgdHJpbSwgLi4uc3Bhd25PcHRzIH0gPSBvcHRpb25zO1xuICBjb25zdCBzdGRpbk1vZGU6IEV4ZWNTdGRpbyA9IGlzU3RkaW5QYXlsb2FkKHN0ZGluKSA/IFwicGlwZVwiIDogKHN0ZGluID8/IFwiaW5oZXJpdFwiKTtcbiAgY29uc3QgY2FwdHVyZVN0ZG91dCA9IHN0ZG91dCA9PT0gXCJjYXB0dXJlXCI7XG4gIGNvbnN0IGNhcHR1cmVTdGRlcnIgPSBzdGRlcnIgPT09IFwiY2FwdHVyZVwiO1xuICBjb25zdCBzdGRvdXRNb2RlID0gcmVzb2x2ZVN5bmNTdGRpbyhzdGRvdXQpO1xuICBjb25zdCBzdGRlcnJNb2RlID0gcmVzb2x2ZVN5bmNTdGRpbyhzdGRlcnIpO1xuXG4gIGNvbnN0IHJlc3VsdCA9IG5vZGVTcGF3blN5bmMoY29tbWFuZCwgY29tbWFuZEFyZ3MsIHtcbiAgICAuLi5zcGF3bk9wdHMsXG4gICAgZW5jb2Rpbmc6IGNhcHR1cmVTdGRvdXQgfHwgY2FwdHVyZVN0ZGVyciA/IFwidXRmOFwiIDogdW5kZWZpbmVkLFxuICAgIHN0ZGlvOiBbc3RkaW5Nb2RlLCBzdGRvdXRNb2RlLCBzdGRlcnJNb2RlXSxcbiAgICBpbnB1dDogaXNTdGRpblBheWxvYWQoc3RkaW4pID8gc3RkaW4gOiB1bmRlZmluZWQsXG4gIH0pO1xuXG4gIGNvbnN0IGNvbW1hbmROb3RGb3VuZCA9IGlzQ29tbWFuZE5vdEZvdW5kRXJyb3IocmVzdWx0LmVycm9yKTtcbiAgY29uc3QgZXhpdENvZGUgPSBjb21tYW5kTm90Rm91bmQgPyBDT01NQU5EX05PVF9GT1VORF9FWElUX0NPREUgOiAocmVzdWx0LnN0YXR1cyA/PyAxKTtcbiAgY29uc3Qgc3Rkb3V0VGV4dCA9IGNhcHR1cmVTdGRvdXQgPyBjYXB0dXJlZFRleHQocmVzdWx0LnN0ZG91dCkgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IHN0ZGVyclRleHQgPSBjYXB0dXJlU3RkZXJyID8gY2FwdHVyZWRUZXh0KHJlc3VsdC5zdGRlcnIpIDogdW5kZWZpbmVkO1xuICBjb25zdCBleGVjUmVzdWx0ID0gY3JlYXRlU3luY0V4ZWNSZXN1bHQoZXhpdENvZGUsIHN0ZG91dFRleHQsIHN0ZGVyclRleHQsIHRyaW0pO1xuXG4gIGlmIChyZXN1bHQuZXJyb3IgJiYgKCFjb21tYW5kTm90Rm91bmQgfHwgY2hlY2spKSB7XG4gICAgY29uc3QgZXJyID0gZXhlY0Vycm9yKGNvbW1hbmQsIGNvbW1hbmRBcmdzLCBleGVjUmVzdWx0KTtcbiAgICBlcnIuY2F1c2UgPSByZXN1bHQuZXJyb3I7XG4gICAgdGhyb3cgZXJyO1xuICB9XG5cbiAgaWYgKGNoZWNrICYmIGV4ZWNSZXN1bHQuZXhpdENvZGUgIT09IDApIHRocm93IGV4ZWNFcnJvcihjb21tYW5kLCBjb21tYW5kQXJncywgZXhlY1Jlc3VsdCk7XG4gIHJldHVybiBleGVjUmVzdWx0O1xufVxuXG4vKipcbiAqIFNwbGl0cyBhIHNoZWxsLWxpa2UgY29tbWFuZCBpbnRvIGFyZ3YuXG4gKlxuICogU3VwcG9ydHM6XG4gKiAgIC0gd2hpdGVzcGFjZSBzZXBhcmF0b3JzXG4gKiAgIC0gc2luZ2xlIGFuZCBkb3VibGUgcXVvdGVzXG4gKiAgIC0gYmFja3NsYXNoIGVzY2FwaW5nXG4gKiAgIC0gZXNjYXBlZCBzcGFjZXNcbiAqICAgLSBlbXB0eSBxdW90ZWQgc3RyaW5nc1xuICpcbiAqIElmIHRoZSBpbnB1dCBpcyBtYWxmb3JtZWQgKGZvciBleGFtcGxlLCBhbiB1bnRlcm1pbmF0ZWQgcXVvdGUpLFxuICogcmV0dXJucyB0aGUgb3JpZ2luYWwgc3RyaW5nIGFzIGEgc2luZ2xlIGFyZ3VtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2hsZXgoY29tbWFuZDogc3RyaW5nKTogc3RyaW5nW10ge1xuICBjb25zdCBhcmdzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGxldCBjdXJyZW50ID0gXCJcIjtcbiAgbGV0IHF1b3RlOiBcIidcIiB8ICdcIicgfCB1bmRlZmluZWQ7XG4gIGxldCBlc2NhcGVkID0gZmFsc2U7XG4gIGxldCBxdW90ZWQgPSBmYWxzZTtcblxuICBjb25zdCBwdXNoID0gKCkgPT4ge1xuICAgIGlmIChxdW90ZWQgfHwgY3VycmVudC5sZW5ndGggPiAwKSB7XG4gICAgICBhcmdzLnB1c2goY3VycmVudCk7XG4gICAgfVxuICAgIGN1cnJlbnQgPSBcIlwiO1xuICAgIHF1b3RlZCA9IGZhbHNlO1xuICB9O1xuXG4gIGZvciAoY29uc3QgY2ggb2YgY29tbWFuZCkge1xuICAgIGlmIChlc2NhcGVkKSB7XG4gICAgICBjdXJyZW50ICs9IGNoO1xuICAgICAgZXNjYXBlZCA9IGZhbHNlO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGNoID09PSBcIlxcXFxcIikge1xuICAgICAgZXNjYXBlZCA9IHRydWU7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAocXVvdGUpIHtcbiAgICAgIGlmIChjaCA9PT0gcXVvdGUpIHtcbiAgICAgICAgcXVvdGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIHF1b3RlZCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdXJyZW50ICs9IGNoO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGNoID09PSBcIidcIiB8fCBjaCA9PT0gJ1wiJykge1xuICAgICAgcXVvdGUgPSBjaDtcbiAgICAgIHF1b3RlZCA9IHRydWU7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoL1xccy8udGVzdChjaCkpIHtcbiAgICAgIHB1c2goKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGN1cnJlbnQgKz0gY2g7XG4gIH1cblxuICAvLyBNYWxmb3JtZWQgaW5wdXQ6IHRyZWF0IGFzIGEgbGl0ZXJhbCBjb21tYW5kLlxuICBpZiAocXVvdGUpIHtcbiAgICByZXR1cm4gW2NvbW1hbmRdO1xuICB9XG5cbiAgLy8gVHJhaWxpbmcgYmFja3NsYXNoIGlzIGxpdGVyYWwuXG4gIGlmIChlc2NhcGVkKSB7XG4gICAgY3VycmVudCArPSBcIlxcXFxcIjtcbiAgfVxuXG4gIHB1c2goKTtcblxuICByZXR1cm4gYXJncy5sZW5ndGggPyBhcmdzIDogW2NvbW1hbmRdO1xufVxuIl19
package/package.json CHANGED
@@ -23,7 +23,7 @@
23
23
  "typescript": "^5.9.3"
24
24
  },
25
25
  "dependencies": {
26
- "@dbx-tools/shared-core": "0.6.185",
26
+ "@dbx-tools/shared-core": "0.6.188",
27
27
  "extract-zip": "^2.0.1",
28
28
  "tar": "^7.5.22",
29
29
  "yaml": "^2.9.0",
@@ -43,7 +43,7 @@
43
43
  "./package.json": "./package.json"
44
44
  }
45
45
  },
46
- "version": "0.6.185",
46
+ "version": "0.6.188",
47
47
  "types": "./lib/index.d.ts",
48
48
  "type": "module",
49
49
  "exports": {
package/src/bin.ts CHANGED
@@ -73,6 +73,8 @@ export interface BinOptions {
73
73
  autoUnpackage?: boolean;
74
74
  selector?: BinSelector;
75
75
  homeDir?: string;
76
+ /** Exact installation paths. Omission keeps `$HOME/.<name>/bin/<name>`. */
77
+ destination?: BinContext;
76
78
  /** Minimum accepted numeric version, with one to three components. */
77
79
  minVersion?: string;
78
80
  /** Argument passed to the binary for version detection. Defaults to `--version`. */
@@ -84,10 +86,11 @@ export interface BinOptions {
84
86
  /** A URL resolved only when the executable is not already installed. */
85
87
  export type BinUrl = string | (() => string | Promise<string>);
86
88
 
87
- function context(name: string, homeDir: string): BinContext {
89
+ function context(name: string, homeDir: string, destination?: BinContext): BinContext {
88
90
  if (!name || basename(name) !== name || name === "." || name === "..") {
89
91
  throw new TypeError(`invalid binary name: ${name}`);
90
92
  }
93
+ if (destination) return destination;
91
94
  const root = join(homeDir, `.${name}`);
92
95
  const binDir = join(root, "bin");
93
96
  return { root, binDir, path: join(binDir, name) };
@@ -307,7 +310,7 @@ export async function ensure(
307
310
  if (options.minVersion && !numericVersion(options.minVersion, true)) {
308
311
  throw new TypeError(`invalid minimum binary version: ${options.minVersion}`);
309
312
  }
310
- const destination = context(name, options.homeDir ?? homedir());
313
+ const destination = context(name, options.homeDir ?? homedir(), options.destination);
311
314
  if (await isValidBin(destination.path, options)) {
312
315
  logger.debug("using installed binary", { name, path: destination.path });
313
316
  return destination;
package/src/exec.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * Portable subprocess helper built on `child_process.spawn` and line streaming.
3
3
  *
4
- * Ported from `dbx-tools-js/packages/cli/src/exec.ts`. Each stdio fd defaults to
5
- * `"inherit"`. {@link spawn} streams output line-by-line into {@link ExecResult.stdoutLines}
4
+ * Each stdio fd defaults to `"inherit"`. {@link spawn} streams output
5
+ * line-by-line into {@link ExecResult.stdoutLines}
6
6
  * / {@link ExecResult.stderrLines}; its `stdout` / `stderr` getters join those lines.
7
7
  * {@link spawnSync} keeps the captured string; its `stdout` / `stderr` getters read
8
8
  * that string directly (line arrays split lazily on read).