@dbx-tools/cli-args 0.9.154 → 0.9.157

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/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/cli-args";
6
- export const PACKAGE_VERSION = "0.9.154";
6
+ export const PACKAGE_VERSION = "0.9.157";
7
7
  export * as args from "./src/args.ts";
8
+ export { addArgs, parseArgs, parseArgv, serializeArgs } from "./src/args.ts";
8
9
  export type { CliArgsOptions, CliArgMeta, CliObjectSchema, ArgumentSource } from "./src/args.ts";
9
- export * from "./exports.ts";
package/lib/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export declare const PACKAGE_IDENTIFIER = "@dbx-tools/cli-args";
2
- export declare const PACKAGE_VERSION = "0.9.154";
2
+ export declare const PACKAGE_VERSION = "0.9.157";
3
3
  export * as args from "./src/args.ts";
4
+ export { addArgs, parseArgs, parseArgv, serializeArgs } from "./src/args.ts";
4
5
  export type { CliArgsOptions, CliArgMeta, CliObjectSchema, ArgumentSource } from "./src/args.ts";
5
- export * from "./exports.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/cli-args";
5
- export const PACKAGE_VERSION = "0.9.154";
5
+ export const PACKAGE_VERSION = "0.9.157";
6
6
  export * as args from "./src/args.js";
7
- export * from "./exports.js";
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxxQkFBcUIsQ0FBQztBQUN4RCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxJQUFJLE1BQU0sZUFBZSxDQUFDO0FBRXRDLGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gR0VORVJBVEVEIGJ5IHByb2plbiB3YXRjaCAtIERPIE5PVCBFRElULlxuLy8gUmVnZW5lcmF0ZWQgZnJvbSB0aGUgZXhwb3J0aW5nIG1vZHVsZXMgaW4gLi9zcmMuXG4vLyBIYW5kIGVkaXRzIGFyZSBvdmVyd3JpdHRlbiBvbiB0aGUgbmV4dCB3YXRjaDsgdGhpcyBmaWxlIGlzIHJlYWQtb25seS5cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfSURFTlRJRklFUiA9IFwiQGRieC10b29scy9jbGktYXJnc1wiO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9IFwiMC45LjE1NFwiO1xuZXhwb3J0ICogYXMgYXJncyBmcm9tIFwiLi9zcmMvYXJncy50c1wiO1xuZXhwb3J0IHR5cGUgeyBDbGlBcmdzT3B0aW9ucywgQ2xpQXJnTWV0YSwgQ2xpT2JqZWN0U2NoZW1hLCBBcmd1bWVudFNvdXJjZSB9IGZyb20gXCIuL3NyYy9hcmdzLnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9leHBvcnRzLnRzXCI7XG4iXX0=
7
+ export { addArgs, parseArgs, parseArgv, serializeArgs } from "./src/args.js";
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxxQkFBcUIsQ0FBQztBQUN4RCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxJQUFJLE1BQU0sZUFBZSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHRU5FUkFURUQgYnkgcHJvamVuIHdhdGNoIC0gRE8gTk9UIEVESVQuXG4vLyBSZWdlbmVyYXRlZCBmcm9tIHRoZSBleHBvcnRpbmcgbW9kdWxlcyBpbiAuL3NyYy5cbi8vIEhhbmQgZWRpdHMgYXJlIG92ZXJ3cml0dGVuIG9uIHRoZSBuZXh0IHdhdGNoOyB0aGlzIGZpbGUgaXMgcmVhZC1vbmx5LlxuXG5leHBvcnQgY29uc3QgUEFDS0FHRV9JREVOVElGSUVSID0gXCJAZGJ4LXRvb2xzL2NsaS1hcmdzXCI7XG5leHBvcnQgY29uc3QgUEFDS0FHRV9WRVJTSU9OID0gXCIwLjkuMTU3XCI7XG5leHBvcnQgKiBhcyBhcmdzIGZyb20gXCIuL3NyYy9hcmdzLnRzXCI7XG5leHBvcnQgeyBhZGRBcmdzLCBwYXJzZUFyZ3MsIHBhcnNlQXJndiwgc2VyaWFsaXplQXJncyB9IGZyb20gXCIuL3NyYy9hcmdzLnRzXCI7XG5leHBvcnQgdHlwZSB7IENsaUFyZ3NPcHRpb25zLCBDbGlBcmdNZXRhLCBDbGlPYmplY3RTY2hlbWEsIEFyZ3VtZW50U291cmNlIH0gZnJvbSBcIi4vc3JjL2FyZ3MudHNcIjtcbiJdfQ==
package/lib/src/args.d.ts CHANGED
@@ -7,10 +7,10 @@
7
7
  *
8
8
  * @module
9
9
  */
10
- import { configUtils } from "@dbx-tools/core";
10
+ import { type ConfigOptions } from "@dbx-tools/core";
11
11
  import { Command } from "commander";
12
12
  /** Layered config lookup used to resolve argument values and help defaults. */
13
- export type CliArgsOptions = configUtils.ConfigOptions;
13
+ export type CliArgsOptions = ConfigOptions;
14
14
  /** CLI metadata read from a field's Zod `.meta()` value. */
15
15
  export interface CliArgMeta {
16
16
  /** Exact environment name or ordered aliases used instead of field-name derivation. */
package/lib/src/args.js CHANGED
@@ -7,8 +7,8 @@
7
7
  *
8
8
  * @module
9
9
  */
10
- import { configUtils } from "@dbx-tools/core";
11
- import { object, options as sharedOptions, stringUtils } from "@dbx-tools/shared-core";
10
+ import { configUtils, environmentKeys, list, boolean, text, } from "@dbx-tools/core";
11
+ import { isRecord, formatListenAddress, toSlug, tokenize, } from "@dbx-tools/shared-core";
12
12
  import { Command, Option } from "commander";
13
13
  const boundOptions = new WeakMap();
14
14
  /** Register Commander arguments for every enabled field on a Zod object schema. */
@@ -34,7 +34,7 @@ export function addArgs(command, schema, options = {}) {
34
34
  option.choices(field.choices);
35
35
  if (fallback !== undefined && field.helpDefault !== false) {
36
36
  const address = listenAddress(fallback);
37
- option.default(fallback, address ? sharedOptions.formatListenAddress(address) : undefined);
37
+ option.default(fallback, address ? formatListenAddress(address) : undefined);
38
38
  }
39
39
  if (field.type === "array") {
40
40
  option.argParser((value, previous) => previous === fallback || !Array.isArray(previous) ? [value] : [...previous, value]);
@@ -76,12 +76,12 @@ export function serializeArgs(source) {
76
76
  }
77
77
  function fields(schema) {
78
78
  const document = schema.toJSONSchema();
79
- const properties = object.isRecord(document) ? document.properties : undefined;
80
- if (!object.isRecord(properties)) {
79
+ const properties = isRecord(document) ? document.properties : undefined;
80
+ if (!isRecord(properties)) {
81
81
  throw new TypeError("Zod Commander binding requires a z.object() schema");
82
82
  }
83
83
  return Object.entries(properties).map(([key, value]) => {
84
- if (!object.isRecord(value)) {
84
+ if (!isRecord(value)) {
85
85
  throw new TypeError(`Cannot bind CLI argument "${key}"`);
86
86
  }
87
87
  const json = value;
@@ -103,7 +103,7 @@ function isCliObjectSchema(value) {
103
103
  return typeof value.parse === "function" && typeof value.toJSONSchema === "function";
104
104
  }
105
105
  function argFlags(field, short) {
106
- const long = `--${stringUtils.toSlug(field.key)}`;
106
+ const long = `--${toSlug(field.key)}`;
107
107
  const value = field.type === "boolean" ? "" : " <value>";
108
108
  if (short)
109
109
  return `-${short}, ${long}${value}`;
@@ -130,7 +130,7 @@ function fieldShortFlags(fields) {
130
130
  for (const field of fields) {
131
131
  if (field.short !== undefined)
132
132
  continue;
133
- const short = [...stringUtils.tokenize(field.key)][0]?.[0]?.toLowerCase();
133
+ const short = [...tokenize(field.key)][0]?.[0]?.toLowerCase();
134
134
  if (!short || reserved.has(short))
135
135
  continue;
136
136
  const matching = candidates.get(short) ?? [];
@@ -148,7 +148,7 @@ function fieldEnvKeys(field) {
148
148
  return [field.env];
149
149
  if (Array.isArray(field.env))
150
150
  return [...field.env];
151
- return configUtils.environmentKeys(field.key);
151
+ return environmentKeys(field.key);
152
152
  }
153
153
  function envArgName(field, envKeys, options) {
154
154
  if (field.env !== undefined)
@@ -162,17 +162,17 @@ function envArgName(field, envKeys, options) {
162
162
  }
163
163
  function configValue(field, envKeys, options) {
164
164
  if (field.type === "array") {
165
- const values = configUtils.list(undefined, envKeys, undefined, options);
165
+ const values = list(undefined, envKeys, undefined, options);
166
166
  return values.length > 0 ? values : undefined;
167
167
  }
168
168
  if (field.type === "boolean")
169
- return configUtils.boolean(undefined, envKeys, options);
170
- return configUtils.text(envKeys, options);
169
+ return boolean(undefined, envKeys, options);
170
+ return text(envKeys, options);
171
171
  }
172
172
  function valueArguments(key, value) {
173
173
  if (value === undefined || value === null)
174
174
  return [];
175
- const flag = `--${stringUtils.toSlug(key)}`;
175
+ const flag = `--${toSlug(key)}`;
176
176
  if (typeof value === "boolean")
177
177
  return [value ? flag : `--no-${flag.slice(2)}`];
178
178
  if (Array.isArray(value)) {
@@ -186,11 +186,11 @@ function scalarArgument(key, value) {
186
186
  }
187
187
  const address = listenAddress(value);
188
188
  if (address)
189
- return sharedOptions.formatListenAddress(address);
189
+ return formatListenAddress(address);
190
190
  throw new TypeError(`Cannot serialize CLI argument "${key}" with a non-scalar value`);
191
191
  }
192
192
  function listenAddress(value) {
193
- if (!object.isRecord(value))
193
+ if (!isRecord(value))
194
194
  return undefined;
195
195
  if (value.scheme === "tcp" && typeof value.host === "string" && typeof value.port === "number") {
196
196
  return { scheme: "tcp", host: value.host, port: value.port };
@@ -200,4 +200,4 @@ function listenAddress(value) {
200
200
  }
201
201
  return undefined;
202
202
  }
203
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcmdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBRUgsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxJQUFJLGFBQWEsRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQTRDNUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxPQUFPLEVBQTJCLENBQUM7QUFFNUQsbUZBQW1GO0FBQ25GLE1BQU0sVUFBVSxPQUFPLENBQ3JCLE9BQWdCLEVBQ2hCLE1BQWUsRUFDZixVQUEwQixFQUFFO0lBRTVCLFlBQVksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ25DLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwQyxNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDakQsS0FBSyxNQUFNLEtBQUssSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNqQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSztZQUFFLFNBQVM7UUFDbkMsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3BELE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN6RCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsV0FBVyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxD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LE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDL0QsQ0FBQztJQUNELElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxNQUFNLElBQUksT0FBTyxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzlELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDOUMsQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbW1hbmRlciBhcmd1bWVudHMgZ2VuZXJhdGVkIGZyb20gYSBab2Qgb2JqZWN0IHNjaGVtYS5cbiAqXG4gKiBab2Qgb3ducyB2YWxpZGF0aW9uLCBjb2VyY2lvbiwgbWV0YWRhdGEsIGFuZCBkZWZhdWx0cy4gQ29tbWFuZGVyIG93bnMgZmxhZ3MsXG4gKiBoZWxwLCBhbmQgZW52aXJvbm1lbnQgZGlzcGxheS4ge0BsaW5rIGNvbmZpZ1V0aWxzfSBzdXBwbGllcyBsYXllcmVkIGxvY2FsXG4gKiBjb25maWd1cmF0aW9uIGJlZm9yZSB0aGUgZmluYWwgWm9kIHBhcnNlLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBjb25maWdVdGlscyB9IGZyb20gXCJAZGJ4LXRvb2xzL2NvcmVcIjtcbmltcG9ydCB7IG9iamVjdCwgb3B0aW9ucyBhcyBzaGFyZWRPcHRpb25zLCBzdHJpbmdVdGlscyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgeyBDb21tYW5kLCBPcHRpb24gfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5cbi8qKiBMYXllcmVkIGNvbmZpZyBsb29rdXAgdXNlZCB0byByZXNvbHZlIGFyZ3VtZW50IHZhbHVlcyBhbmQgaGVscCBkZWZhdWx0cy4gKi9cbmV4cG9ydCB0eXBlIENsaUFyZ3NPcHRpb25zID0gY29uZmlnVXRpbHMuQ29uZmlnT3B0aW9ucztcblxuLyoqIENMSSBtZXRhZGF0YSByZWFkIGZyb20gYSBmaWVsZCdzIFpvZCBgLm1ldGEoKWAgdmFsdWUuICovXG5leHBvcnQgaW50ZXJmYWNlIENsaUFyZ01ldGEge1xuICAvKiogRXhhY3QgZW52aXJvbm1lbnQgbmFtZSBvciBvcmRlcmVkIGFsaWFzZXMgdXNlZCBpbnN0ZWFkIG9mIGZpZWxkLW5hbWUgZGVyaXZhdGlvbi4gKi9cbiAgcmVhZG9ubHkgZW52Pzogc3RyaW5nIHwgcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKiBTZXQgZmFsc2UgdG8gcmVzb2x2ZSB0aGUgZmllbGQgZnJvbSBjb25maWcgd2l0aG91dCBnZW5lcmF0aW5nIGEgQ29tbWFuZGVyIGZsYWcuICovXG4gIHJlYWRvbmx5IGZsYWc/OiBib29sZWFuO1xuICAvKiogU2V0IGZhbHNlIHRvIGhpZGUgZGVmYXVsdHMgYW5kIGRlZmVyIGxheWVyZWQgY29uZmlndXJhdGlvbiBsb2FkaW5nIHVudGlsIHBhcnNpbmcuICovXG4gIHJlYWRvbmx5IGhlbHBEZWZhdWx0PzogYm9vbGVhbjtcbiAgLyoqIE9uZS1jaGFyYWN0ZXIgc2hvcnQgZmxhZyB3aXRob3V0IGEgZGFzaCwgb3IgZmFsc2UgdG8gZGlzYWJsZSBhdXRvbWF0aWMgZ2VuZXJhdGlvbi4gKi9cbiAgcmVhZG9ubHkgc2hvcnQ/OiBzdHJpbmcgfCBmYWxzZTtcbn1cblxuLyoqIFN0cnVjdHVyYWwgWm9kIG9iamVjdCBjb250cmFjdCB0aGF0IHJlbWFpbnMgY29tcGF0aWJsZSBhY3Jvc3MgWm9kIHY0IG1pbm9ycy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2xpT2JqZWN0U2NoZW1hPFxuICBUT3V0cHV0IGV4dGVuZHMgUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+ID0gUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+LFxuPiB7XG4gIHBhcnNlKHZhbHVlOiB1bmtub3duKTogVE91dHB1dDtcbiAgdG9KU09OU2NoZW1hKCk6IHVua25vd247XG59XG5cbi8qKiBab2QgZGVmYXVsdHMgb3IgY29uY3JldGUgb3B0aW9uIHZhbHVlcyBzZXJpYWxpemVkIGJ5IHtAbGluayBzZXJpYWxpemVBcmdzfS4gKi9cbmV4cG9ydCB0eXBlIEFyZ3VtZW50U291cmNlID0gQ2xpT2JqZWN0U2NoZW1hIHwgUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xuXG5pbnRlcmZhY2UgSnNvbkZpZWxkIGV4dGVuZHMgQ2xpQXJnTWV0YSB7XG4gIHR5cGU/OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBkZWZhdWx0PzogdW5rbm93bjtcbiAgZW51bT86IHVua25vd25bXTtcbiAgY29uc3Q/OiB1bmtub3duO1xufVxuXG5pbnRlcmZhY2UgRmllbGQgZXh0ZW5kcyBDbGlBcmdNZXRhIHtcbiAga2V5OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHR5cGU/OiBzdHJpbmc7XG4gIGNob2ljZXM/OiBzdHJpbmdbXTtcbiAgZmFsbGJhY2s/OiB1bmtub3duO1xufVxuXG5jb25zdCBib3VuZE9wdGlvbnMgPSBuZXcgV2Vha01hcDxDb21tYW5kLCBDbGlBcmdzT3B0aW9ucz4oKTtcblxuLyoqIFJlZ2lzdGVyIENvbW1hbmRlciBhcmd1bWVudHMgZm9yIGV2ZXJ5IGVuYWJsZWQgZmllbGQgb24gYSBab2Qgb2JqZWN0IHNjaGVtYS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRBcmdzPFRTY2hlbWEgZXh0ZW5kcyBDbGlPYmplY3RTY2hlbWE+KFxuICBjb21tYW5kOiBDb21tYW5kLFxuICBzY2hlbWE6IFRTY2hlbWEsXG4gIG9wdGlvbnM6IENsaUFyZ3NPcHRpb25zID0ge30sXG4pOiBDb21tYW5kIHtcbiAgYm91bmRPcHRpb25zLnNldChjb21tYW5kLCBvcHRpb25zKTtcbiAgY29uc3Qgc2NoZW1hRmllbGRzID0gZmllbGRzKHNjaGVtYSk7XG4gIGNvbnN0IHNob3J0RmxhZ3MgPSBmaWVsZFNob3J0RmxhZ3Moc2NoZW1hRmllbGRzKTtcbiAgZm9yIChjb25zdCBmaWVsZCBvZiBzY2hlbWFGaWVsZHMpIHtcbiAgICBpZiAoZmllbGQuZmxhZyA9PT0gZmFsc2UpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGVudktleXMgPSBmaWVsZEVudktleXMoZmllbGQpO1xuICAgIGNvbnN0IGVudk5hbWUgPSBlbnZBcmdOYW1lKGZpZWxkLCBlbnZLZXlzLCBvcHRpb25zKTtcbiAgICBjb25zdCBmbGFncyA9IGFyZ0ZsYWdzKGZpZWxkLCBzaG9ydEZsYWdzLmdldChmaWVsZC5rZXkpKTtcbiAgICBjb25zdCBzb3VyY2VkID0gZmllbGQuaGVscERlZmF1bHQgPT09IGZhbHNlID8gdW5kZWZpbmVkIDogY29uZmlnVmFsdWUoZmllbGQsIGVudktleXMsIG9wdGlvbnMpO1xuICAgIGNvbnN0IGZhbGxiYWNrID0gc291cmNlZCA/PyBmaWVsZC5mYWxsYmFjaztcbiAgICBjb25zdCBvcHRpb24gPSBuZXcgT3B0aW9uKGZsYWdzLCBmaWVsZC5kZXNjcmlwdGlvbik7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9wdGlvbiwgXCJzY2hlbWFIZWxwRGVmYXVsdFwiLCB7XG4gICAgICB2YWx1ZTogZmllbGQuaGVscERlZmF1bHQgPT09IGZhbHNlID8gdW5kZWZpbmVkIDogZmllbGQuZmFsbGJhY2ssXG4gICAgfSk7XG4gICAgaWYgKGVudk5hbWUpIG9wdGlvbi5lbnYoZW52TmFtZSk7XG4gICAgaWYgKGZpZWxkLmNob2ljZXMgJiYgZmllbGQuY2hvaWNlcy5sZW5ndGggPiAwKSBvcHRpb24uY2hvaWNlcyhmaWVsZC5jaG9pY2VzKTtcbiAgICBpZiAoZmFsbGJhY2sgIT09IHVuZGVmaW5lZCAmJiBmaWVsZC5oZWxwRGVmYXVsdCAhPT0gZmFsc2UpIHtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBsaXN0ZW5BZGRyZXNzKGZhbGxiYWNrKTtcbiAgICAgIG9wdGlvbi5kZWZhdWx0KGZhbGxiYWNrLCBhZGRyZXNzID8gc2hhcmVkT3B0aW9ucy5mb3JtYXRMaXN0ZW5BZGRyZXNzKGFkZHJlc3MpIDogdW5kZWZpbmVkKTtcbiAgICB9XG4gICAgaWYgKGZpZWxkLnR5cGUgPT09IFwiYXJyYXlcIikge1xuICAgICAgb3B0aW9uLmFyZ1BhcnNlcigodmFsdWU6IHN0cmluZywgcHJldmlvdXM6IHVua25vd24pID0+XG4gICAgICAgIHByZXZpb3VzID09PSBmYWxsYmFjayB8fCAhQXJyYXkuaXNBcnJheShwcmV2aW91cykgPyBbdmFsdWVdIDogWy4uLnByZXZpb3VzLCB2YWx1ZV0sXG4gICAgICApO1xuICAgIH1cbiAgICBjb21tYW5kLmFkZE9wdGlvbihvcHRpb24pO1xuICAgIGlmIChmaWVsZC50eXBlID09PSBcImJvb2xlYW5cIiAmJiBvcHRpb24ubG9uZykge1xuICAgICAgY29tbWFuZC5hZGRPcHRpb24oXG4gICAgICAgIG5ldyBPcHRpb24oYC0tbm8tJHtvcHRpb24ubG9uZy5zbGljZSgyKX1gLCBgRGlzYWJsZSAke2ZpZWxkLmRlc2NyaXB0aW9uLnRvTG93ZXJDYXNlKCl9YCksXG4gICAgICApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY29tbWFuZDtcbn1cblxuLyoqIE1lcmdlIENMSSB2YWx1ZXMgb3ZlciBsYXllcmVkIGNvbmZpZywgdGhlbiB2YWxpZGF0ZSBhbmQgZGVmYXVsdCB0aHJvdWdoIFpvZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUFyZ3M8VFNjaGVtYSBleHRlbmRzIENsaU9iamVjdFNjaGVtYT4oXG4gIGNvbW1hbmQ6IENvbW1hbmQsXG4gIHNjaGVtYTogVFNjaGVtYSxcbiAgb3B0aW9uczogQ2xpQXJnc09wdGlvbnMgPSBib3VuZE9wdGlvbnMuZ2V0KGNvbW1hbmQpID8/IHt9LFxuKTogUmV0dXJuVHlwZTxUU2NoZW1hW1wicGFyc2VcIl0+IHtcbiAgY29uc3QgdmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcyhzY2hlbWEpKSB7XG4gICAgaWYgKGNvbW1hbmQuZ2V0T3B0aW9uVmFsdWVTb3VyY2UoZmllbGQua2V5KSA9PT0gXCJjbGlcIikge1xuICAgICAgdmFsdWVzW2ZpZWxkLmtleV0gPSBjb21tYW5kLmdldE9wdGlvblZhbHVlKGZpZWxkLmtleSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3Qgc291cmNlZCA9IGNvbmZpZ1ZhbHVlKGZpZWxkLCBmaWVsZEVudktleXMoZmllbGQpLCBvcHRpb25zKTtcbiAgICBpZiAoc291cmNlZCAhPT0gdW5kZWZpbmVkKSB2YWx1ZXNbZmllbGQua2V5XSA9IHNvdXJjZWQ7XG4gIH1cbiAgcmV0dXJuIHNjaGVtYS5wYXJzZSh2YWx1ZXMpIGFzIFJldHVyblR5cGU8VFNjaGVtYVtcInBhcnNlXCJdPjtcbn1cblxuLyoqIFBhcnNlIGEgc3RhbmRhbG9uZSBhcmd2IGFycmF5IHRocm91Z2ggQ29tbWFuZGVyIGFuZCBhbiBvd25pbmcgWm9kIHNjaGVtYS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUFyZ3Y8VFNjaGVtYSBleHRlbmRzIENsaU9iamVjdFNjaGVtYT4oXG4gIHNjaGVtYTogVFNjaGVtYSxcbiAgYXJndjogcmVhZG9ubHkgc3RyaW5nW10gPSBwcm9jZXNzLmFyZ3Yuc2xpY2UoMiksXG4gIG9wdGlvbnM6IENsaUFyZ3NPcHRpb25zID0ge30sXG4pOiBSZXR1cm5UeXBlPFRTY2hlbWFbXCJwYXJzZVwiXT4ge1xuICBjb25zdCBjb21tYW5kID0gYWRkQXJncyhuZXcgQ29tbWFuZCgpLCBzY2hlbWEsIG9wdGlvbnMpO1xuICBjb21tYW5kLnBhcnNlKFsuLi5hcmd2XSwgeyBmcm9tOiBcInVzZXJcIiB9KTtcbiAgcmV0dXJuIHBhcnNlQXJncyhjb21tYW5kLCBzY2hlbWEsIG9wdGlvbnMpO1xufVxuXG4vKiogQ29udmVydCBzY2hlbWEgZGVmYXVsdHMgb3IgY29uY3JldGUgb3B0aW9uIHZhbHVlcyBpbnRvIENvbW1hbmRlciBhcmd1bWVudHMuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplQXJncyhzb3VyY2U6IEFyZ3VtZW50U291cmNlKTogc3RyaW5nW10ge1xuICBpZiAoaXNDbGlPYmplY3RTY2hlbWEoc291cmNlKSkge1xuICAgIGNvbnN0IHZhbHVlcyA9IHNvdXJjZS5wYXJzZSh7fSkgYXMgUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xuICAgIHJldHVybiBmaWVsZHMoc291cmNlKS5mbGF0TWFwKChmaWVsZCkgPT5cbiAgICAgIGZpZWxkLmZsYWcgPT09IGZhbHNlID8gW10gOiB2YWx1ZUFyZ3VtZW50cyhmaWVsZC5rZXksIHZhbHVlc1tmaWVsZC5rZXldKSxcbiAgICApO1xuICB9XG4gIHJldHVybiBPYmplY3QuZW50cmllcyhzb3VyY2UpLmZsYXRNYXAoKFtrZXksIHZhbHVlXSkgPT4gdmFsdWVBcmd1bWVudHMoa2V5LCB2YWx1ZSkpO1xufVxuXG5mdW5jdGlvbiBmaWVsZHMoc2NoZW1hOiBDbGlPYmplY3RTY2hlbWEpOiBGaWVsZFtdIHtcbiAgY29uc3QgZG9jdW1lbnQgPSBzY2hlbWEudG9KU09OU2NoZW1hKCk7XG4gIGNvbnN0IHByb3BlcnRpZXMgPSBvYmplY3QuaXNSZWNvcmQoZG9jdW1lbnQpID8gZG9jdW1lbnQucHJvcGVydGllcyA6IHVuZGVmaW5lZDtcbiAgaWYgKCFvYmplY3QuaXNSZWNvcmQocHJvcGVydGllcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiWm9kIENvbW1hbmRlciBiaW5kaW5nIHJlcXVpcmVzIGEgei5vYmplY3QoKSBzY2hlbWFcIik7XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHByb3BlcnRpZXMpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgaWYgKCFvYmplY3QuaXNSZWNvcmQodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBDYW5ub3QgYmluZCBDTEkgYXJndW1lbnQgXCIke2tleX1cImApO1xuICAgIH1cbiAgICBjb25zdCBqc29uID0gdmFsdWUgYXMgSnNvbkZpZWxkO1xuICAgIGNvbnN0IGNob2ljZXMgPVxuICAgICAganNvbi5lbnVtPy5tYXAoU3RyaW5nKSA/PyAoanNvbi5jb25zdCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogW1N0cmluZyhqc29uLmNvbnN0KV0pO1xuICAgIHJldHVybiB7XG4gICAgICBrZXksXG4gICAgICBkZXNjcmlwdGlvbjogdHlwZW9mIGpzb24uZGVzY3JpcHRpb24gPT09IFwic3RyaW5nXCIgPyBqc29uLmRlc2NyaXB0aW9uIDogXCJcIixcbiAgICAgIHR5cGU6IGpzb24udHlwZSxcbiAgICAgIGNob2ljZXMsXG4gICAgICBmYWxsYmFjazoganNvbi5kZWZhdWx0LFxuICAgICAgZW52OiBqc29uLmVudixcbiAgICAgIGZsYWc6IGpzb24uZmxhZyxcbiAgICAgIGhlbHBEZWZhdWx0OiBqc29uLmhlbHBEZWZhdWx0LFxuICAgICAgc2hvcnQ6IGpzb24uc2hvcnQsXG4gICAgfTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzQ2xpT2JqZWN0U2NoZW1hKHZhbHVlOiBBcmd1bWVudFNvdXJjZSk6IHZhbHVlIGlzIENsaU9iamVjdFNjaGVtYSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUucGFyc2UgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgdmFsdWUudG9KU09OU2NoZW1hID09PSBcImZ1bmN0aW9uXCI7XG59XG5cbmZ1bmN0aW9uIGFyZ0ZsYWdzKGZpZWxkOiBGaWVsZCwgc2hvcnQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gIGNvbnN0IGxvbmcgPSBgLS0ke3N0cmluZ1V0aWxzLnRvU2x1ZyhmaWVsZC5rZXkpfWA7XG4gIGNvbnN0IHZhbHVlID0gZmllbGQudHlwZSA9PT0gXCJib29sZWFuXCIgPyBcIlwiIDogXCIgPHZhbHVlPlwiO1xuICBpZiAoc2hvcnQpIHJldHVybiBgLSR7c2hvcnR9LCAke2xvbmd9JHt2YWx1ZX1gO1xuICByZXR1cm4gYCR7bG9uZ30ke3ZhbHVlfWA7XG59XG5cbmZ1bmN0aW9uIGZpZWxkU2hvcnRGbGFncyhmaWVsZHM6IHJlYWRvbmx5IEZpZWxkW10pOiBSZWFkb25seU1hcDxzdHJpbmcsIHN0cmluZz4ge1xuICBjb25zdCByZXN1bHQgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICBjb25zdCByZXNlcnZlZCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KFtbXCJoXCIsIFwiaGVscFwiXV0pO1xuICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuICAgIGlmIChmaWVsZC5zaG9ydCA9PT0gZmFsc2UgfHwgZmllbGQuc2hvcnQgPT09IHVuZGVmaW5lZCkgY29udGludWU7XG4gICAgaWYgKCEvXltBLVphLXpdJC8udGVzdChmaWVsZC5zaG9ydCkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFNob3J0IGZsYWcgZm9yIFwiJHtmaWVsZC5rZXl9XCIgbXVzdCBiZSBvbmUgbGV0dGVyIG9yIGZhbHNlYCk7XG4gICAgfVxuICAgIGNvbnN0IHNob3J0ID0gZmllbGQuc2hvcnQudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBleGlzdGluZyA9IHJlc2VydmVkLmdldChzaG9ydCk7XG4gICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBTaG9ydCBmbGFnIC0ke3Nob3J0fSBpcyBzaGFyZWQgYnkgXCIke2V4aXN0aW5nfVwiIGFuZCBcIiR7ZmllbGQua2V5fVwiYCk7XG4gICAgfVxuICAgIHJlc2VydmVkLnNldChzaG9ydCwgZmllbGQua2V5KTtcbiAgICByZXN1bHQuc2V0KGZpZWxkLmtleSwgc2hvcnQpO1xuICB9XG4gIGNvbnN0IGNhbmRpZGF0ZXMgPSBuZXcgTWFwPHN0cmluZywgRmllbGRbXT4oKTtcbiAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICBpZiAoZmllbGQuc2hvcnQgIT09IHVuZGVmaW5lZCkgY29udGludWU7XG4gICAgY29uc3Qgc2hvcnQgPSBbLi4uc3RyaW5nVXRpbHMudG9rZW5pemUoZmllbGQua2V5KV1bMF0/LlswXT8udG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoIXNob3J0IHx8IHJlc2VydmVkLmhhcyhzaG9ydCkpIGNvbnRpbnVlO1xuICAgIGNvbnN0IG1hdGNoaW5nID0gY2FuZGlkYXRlcy5nZXQoc2hvcnQpID8/IFtdO1xuICAgIG1hdGNoaW5nLnB1c2goZmllbGQpO1xuICAgIGNhbmRpZGF0ZXMuc2V0KHNob3J0LCBtYXRjaGluZyk7XG4gIH1cbiAgZm9yIChjb25zdCBbc2hvcnQsIG1hdGNoaW5nXSBvZiBjYW5kaWRhdGVzKSB7XG4gICAgaWYgKG1hdGNoaW5nLmxlbmd0aCA9PT0gMSkgcmVzdWx0LnNldChtYXRjaGluZ1swXSEua2V5LCBzaG9ydCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gZmllbGRFbnZLZXlzKGZpZWxkOiBGaWVsZCk6IHJlYWRvbmx5IHN0cmluZ1tdIHtcbiAgaWYgKHR5cGVvZiBmaWVsZC5lbnYgPT09IFwic3RyaW5nXCIpIHJldHVybiBbZmllbGQuZW52XTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoZmllbGQuZW52KSkgcmV0dXJuIFsuLi5maWVsZC5lbnZdO1xuICByZXR1cm4gY29uZmlnVXRpbHMuZW52aXJvbm1lbnRLZXlzKGZpZWxkLmtleSk7XG59XG5cbmZ1bmN0aW9uIGVudkFyZ05hbWUoZmllbGQ6IEZpZWxkLCBlbnZLZXlzOiByZWFkb25seSBzdHJpbmdbXSwgb3B0aW9uczogQ2xpQXJnc09wdGlvbnMpOiBzdHJpbmcge1xuICBpZiAoZmllbGQuZW52ICE9PSB1bmRlZmluZWQpIHJldHVybiBlbnZLZXlzWzBdID8/IFwiXCI7XG4gIGNvbnN0IGNhbm9uaWNhbCA9XG4gICAgZW52S2V5cy5maW5kKChrZXkpID0+IC9eW0EtWl1bQS1aMC05XSooX1tBLVowLTldKykrJC8udGVzdChrZXkpKSA/P1xuICAgIGVudktleXMuZmluZCgoa2V5KSA9PiBrZXkgPT09IGtleS50b1VwcGVyQ2FzZSgpICYmIC9bQS1aXS8udGVzdChrZXkpKSA/P1xuICAgIGVudktleXMuYXQoLTEpID8/XG4gICAgXCJcIjtcbiAgLy8gSGVscCBzaG93cyB0aGUgdW5zY29wZWQgbmFtZTsgY29uZmlnVXRpbHMgc3RpbGwgcmVhZHMgREJYX1RPT0xTXyBhbGlhc2VzLlxuICByZXR1cm4gY29uZmlnVXRpbHMubmFtZShjYW5vbmljYWwsIHsgLi4ub3B0aW9ucywgc2NvcGU6IFtdIH0pO1xufVxuXG5mdW5jdGlvbiBjb25maWdWYWx1ZShcbiAgZmllbGQ6IEZpZWxkLFxuICBlbnZLZXlzOiBzdHJpbmcgfCByZWFkb25seSBzdHJpbmdbXSxcbiAgb3B0aW9uczogQ2xpQXJnc09wdGlvbnMsXG4pOiB1bmtub3duIHtcbiAgaWYgKGZpZWxkLnR5cGUgPT09IFwiYXJyYXlcIikge1xuICAgIGNvbnN0IHZhbHVlcyA9IGNvbmZpZ1V0aWxzLmxpc3QodW5kZWZpbmVkLCBlbnZLZXlzLCB1bmRlZmluZWQsIG9wdGlvbnMpO1xuICAgIHJldHVybiB2YWx1ZXMubGVuZ3RoID4gMCA/IHZhbHVlcyA6IHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoZmllbGQudHlwZSA9PT0gXCJib29sZWFuXCIpIHJldHVybiBjb25maWdVdGlscy5ib29sZWFuKHVuZGVmaW5lZCwgZW52S2V5cywgb3B0aW9ucyk7XG4gIHJldHVybiBjb25maWdVdGlscy50ZXh0KGVudktleXMsIG9wdGlvbnMpO1xufVxuXG5mdW5jdGlvbiB2YWx1ZUFyZ3VtZW50cyhrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiBzdHJpbmdbXSB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSByZXR1cm4gW107XG4gIGNvbnN0IGZsYWcgPSBgLS0ke3N0cmluZ1V0aWxzLnRvU2x1ZyhrZXkpfWA7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwiYm9vbGVhblwiKSByZXR1cm4gW3ZhbHVlID8gZmxhZyA6IGAtLW5vLSR7ZmxhZy5zbGljZSgyKX1gXTtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlLmZsYXRNYXAoKGVudHJ5KSA9PiBbZmxhZywgc2NhbGFyQXJndW1lbnQoa2V5LCBlbnRyeSldKTtcbiAgfVxuICByZXR1cm4gW2ZsYWcsIHNjYWxhckFyZ3VtZW50KGtleSwgdmFsdWUpXTtcbn1cblxuZnVuY3Rpb24gc2NhbGFyQXJndW1lbnQoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcImJpZ2ludFwiKSB7XG4gICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gIH1cbiAgY29uc3QgYWRkcmVzcyA9IGxpc3RlbkFkZHJlc3ModmFsdWUpO1xuICBpZiAoYWRkcmVzcykgcmV0dXJuIHNoYXJlZE9wdGlvbnMuZm9ybWF0TGlzdGVuQWRkcmVzcyhhZGRyZXNzKTtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihgQ2Fubm90IHNlcmlhbGl6ZSBDTEkgYXJndW1lbnQgXCIke2tleX1cIiB3aXRoIGEgbm9uLXNjYWxhciB2YWx1ZWApO1xufVxuXG5mdW5jdGlvbiBsaXN0ZW5BZGRyZXNzKHZhbHVlOiB1bmtub3duKTogc2hhcmVkT3B0aW9ucy5MaXN0ZW5BZGRyZXNzIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFvYmplY3QuaXNSZWNvcmQodmFsdWUpKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAodmFsdWUuc2NoZW1lID09PSBcInRjcFwiICYmIHR5cGVvZiB2YWx1ZS5ob3N0ID09PSBcInN0cmluZ1wiICYmIHR5cGVvZiB2YWx1ZS5wb3J0ID09PSBcIm51bWJlclwiKSB7XG4gICAgcmV0dXJuIHsgc2NoZW1lOiBcInRjcFwiLCBob3N0OiB2YWx1ZS5ob3N0LCBwb3J0OiB2YWx1ZS5wb3J0IH07XG4gIH1cbiAgaWYgKHZhbHVlLnNjaGVtZSA9PT0gXCJ1bml4XCIgJiYgdHlwZW9mIHZhbHVlLnBhdGggPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4geyBzY2hlbWU6IFwidW5peFwiLCBwYXRoOiB2YWx1ZS5wYXRoIH07XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbiJdfQ==
203
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcmdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBRUgsT0FBTyxFQUNMLFdBQVcsRUFFWCxlQUFlLEVBQ2YsSUFBSSxFQUNKLE9BQU8sRUFDUCxJQUFJLEdBQ0wsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQ0wsUUFBUSxFQUNSLG1CQUFtQixFQUVuQixNQUFNLEVBQ04sUUFBUSxHQUNULE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxXQUFXLENBQUM7QUE0QzVDLE1BQU0sWUFBWSxHQUFHLElBQUksT0FBTyxFQUEyQixDQUFDO0FBRTVELG1GQUFtRjtBQUNuRixNQUFNLFVBQVUsT0FBTyxDQUNyQixPQUFnQixFQUNoQixNQUFlLEVBQ2YsVUFBMEIsRUFBRTtJQUU1QixZQUFZLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNuQyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEMsTUFBTSxVQUFVLEdBQUcsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2pELEtBQUssTUFBTSxLQUFLLElBQUksWUFBWSxFQUFFLENBQUM7UUFDakMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUs7WUFBRSxTQUFTO1FBQ25DLE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNwRCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDekQsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLFdBQVcsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDL0YsTUFBTSxRQUFRLEdBQUcsT0FBTyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFDM0MsTUFBTSxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNwRCxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxtQkFBbUIsRUFBRTtZQUNqRCxLQUFLLEVBQUUsS0FBSyxDQUFDLFdBQVcsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVE7U0FDaEUsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxPQUFPO1lBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNqQyxJQUFJLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdFLElBQUksUUFBUSxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsV0FBVyxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQzFELE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN4QyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvRSxDQUFDO1FBQ0QsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQzNCLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFhLEVBQUUsUUFBaUIsRUFBRSxFQUFFLENBQ3BELFFBQVEsS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUNuRixDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUIsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDNUMsT0FBTyxDQUFDLFNBQVMsQ0FDZixJQUFJLE1BQU0sQ0FBQyxRQUFRLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsV0FBVyxLQUFLLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FDekYsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQztBQUVELG1GQUFtRjtBQUNuRixNQUFNLFVBQVUsU0FBUyxDQUN2QixPQUFnQixFQUNoQixNQUFlLEVBQ2YsVUFBMEIsWUFBWSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFO0lBRXpELE1BQU0sTUFBTSxHQUE0QixFQUFFLENBQUM7SUFDM0MsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUNuQyxJQUFJLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDdEQsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN0RCxTQUFTO1FBQ1gsQ0FBQztRQUNELE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2pFLElBQUksT0FBTyxLQUFLLFNBQVM7WUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQztJQUN6RCxDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBaUMsQ0FBQztBQUM5RCxDQUFDO0FBRUQsZ0ZBQWdGO0FBQ2hGLE1BQU0sVUFBVSxTQUFTLENBQ3ZCLE1BQWUsRUFDZixPQUEwQixPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDL0MsVUFBMEIsRUFBRTtJQUU1QixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDeEQsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUMzQyxPQUFPLFNBQVMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzdDLENBQUM7QUFFRCxrRkFBa0Y7QUFDbEYsTUFBTSxVQUFVLGFBQWEsQ0FBQyxNQUFzQjtJQUNsRCxJQUFJLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDOUIsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQXNDLENBQUM7UUFDckUsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDdEMsS0FBSyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUN6RSxDQUFDO0lBQ0osQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3RGLENBQUM7QUFFRCxTQUFTLE1BQU0sQ0FBQyxNQUF1QjtJQUNyQyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdkMsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDeEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQzFCLE1BQU0sSUFBSSxTQUFTLENBQUMsb0RBQW9ELENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7UUFDckQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sSUFBSSxTQUFTLENBQUMsNkJBQTZCLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDM0QsQ0FBQztRQUNELE1BQU0sSUFBSSxHQUFHLEtBQWtCLENBQUM7UUFDaEMsTUFBTSxPQUFPLEdBQ1gsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFGLE9BQU87WUFDTCxHQUFHO1lBQ0gsV0FBVyxFQUFFLE9BQU8sSUFBSSxDQUFDLFdBQVcsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDekUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsT0FBTztZQUNQLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTztZQUN0QixHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7WUFDYixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDN0IsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1NBQ2xCLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUFDLEtBQXFCO0lBQzlDLE9BQU8sT0FBTyxLQUFLLENBQUMsS0FBSyxLQUFLLFVBQVUsSUFBSSxPQUFPLEtBQUssQ0FBQyxZQUFZLEtBQUssVUFBVSxDQUFDO0FBQ3ZGLENBQUM7QUFFRCxTQUFTLFFBQVEsQ0FBQyxLQUFZLEVBQUUsS0FBeUI7SUFDdkQsTUFBTSxJQUFJLEdBQUcsS0FBSyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7SUFDdEMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO0lBQ3pELElBQUksS0FBSztRQUFFLE9BQU8sSUFBSSxLQUFLLEtBQUssSUFBSSxHQUFHLEtBQUssRUFBRSxDQUFDO0lBQy9DLE9BQU8sR0FBRyxJQUFJLEdBQUcsS0FBSyxFQUFFLENBQUM7QUFDM0IsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLE1BQXdCO0lBQy9DLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0lBQ3pDLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxDQUFpQixDQUFDLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxRCxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQzNCLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxLQUFLLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxTQUFTO1lBQUUsU0FBUztRQUNqRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNwQyxNQUFNLElBQUksU0FBUyxDQUFDLG1CQUFtQixLQUFLLENBQUMsR0FBRywrQkFBK0IsQ0FBQyxDQUFDO1FBQ25GLENBQUM7UUFDRCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3hDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckMsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLE1BQU0sSUFBSSxTQUFTLENBQUMsZUFBZSxLQUFLLGtCQUFrQixRQUFRLFVBQVUsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDNUYsQ0FBQztRQUNELFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvQixNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUNELE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxFQUFtQixDQUFDO0lBQzlDLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7UUFDM0IsSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLFNBQVM7WUFBRSxTQUFTO1FBQ3hDLE1BQU0sS0FBSyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUM5RCxJQUFJLENBQUMsS0FBSyxJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1lBQUUsU0FBUztRQUM1QyxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM3QyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JCLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFDRCxLQUFLLE1BQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLElBQUksVUFBVSxFQUFFLENBQUM7UUFDM0MsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxLQUFZO0lBQ2hDLElBQUksT0FBTyxLQUFLLENBQUMsR0FBRyxLQUFLLFFBQVE7UUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO1FBQUUsT0FBTyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BELE9BQU8sZUFBZSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQyxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsS0FBWSxFQUFFLE9BQTBCLEVBQUUsT0FBdUI7SUFDbkYsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLFNBQVM7UUFBRSxPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDckQsTUFBTSxTQUFTLEdBQ2IsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsK0JBQStCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsV0FBVyxFQUFFLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyRSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsRUFBRSxDQUFDO0lBQ0wsNEVBQTRFO0lBQzVFLE9BQU8sV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxHQUFHLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNoRSxDQUFDO0FBRUQsU0FBUyxXQUFXLENBQ2xCLEtBQVksRUFDWixPQUFtQyxFQUNuQyxPQUF1QjtJQUV2QixJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7UUFDM0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzVELE9BQU8sTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ2hELENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUztRQUFFLE9BQU8sT0FBTyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDMUUsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2hDLENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxHQUFXLEVBQUUsS0FBYztJQUNqRCxJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxLQUFLLElBQUk7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUNyRCxNQUFNLElBQUksR0FBRyxLQUFLLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ2hDLElBQUksT0FBTyxLQUFLLEtBQUssU0FBUztRQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoRixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN6QixPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFDRCxPQUFPLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUM1QyxDQUFDO0FBRUQsU0FBUyxjQUFjLENBQUMsR0FBVyxFQUFFLEtBQWM7SUFDakQsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3hGLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckMsSUFBSSxPQUFPO1FBQUUsT0FBTyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqRCxNQUFNLElBQUksU0FBUyxDQUFDLGtDQUFrQyxHQUFHLDJCQUEyQixDQUFDLENBQUM7QUFDeEYsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLEtBQWM7SUFDbkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUN2QyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssS0FBSyxJQUFJLE9BQU8sS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRLElBQUksT0FBTyxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQy9GLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDL0QsQ0FBQztJQUNELElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxNQUFNLElBQUksT0FBTyxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzlELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDOUMsQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbW1hbmRlciBhcmd1bWVudHMgZ2VuZXJhdGVkIGZyb20gYSBab2Qgb2JqZWN0IHNjaGVtYS5cbiAqXG4gKiBab2Qgb3ducyB2YWxpZGF0aW9uLCBjb2VyY2lvbiwgbWV0YWRhdGEsIGFuZCBkZWZhdWx0cy4gQ29tbWFuZGVyIG93bnMgZmxhZ3MsXG4gKiBoZWxwLCBhbmQgZW52aXJvbm1lbnQgZGlzcGxheS4ge0BsaW5rIGNvbmZpZ1V0aWxzfSBzdXBwbGllcyBsYXllcmVkIGxvY2FsXG4gKiBjb25maWd1cmF0aW9uIGJlZm9yZSB0aGUgZmluYWwgWm9kIHBhcnNlLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQge1xuICBjb25maWdVdGlscyxcbiAgdHlwZSBDb25maWdPcHRpb25zLFxuICBlbnZpcm9ubWVudEtleXMsXG4gIGxpc3QsXG4gIGJvb2xlYW4sXG4gIHRleHQsXG59IGZyb20gXCJAZGJ4LXRvb2xzL2NvcmVcIjtcbmltcG9ydCB7XG4gIGlzUmVjb3JkLFxuICBmb3JtYXRMaXN0ZW5BZGRyZXNzLFxuICB0eXBlIExpc3RlbkFkZHJlc3MsXG4gIHRvU2x1ZyxcbiAgdG9rZW5pemUsXG59IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgeyBDb21tYW5kLCBPcHRpb24gfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5cbi8qKiBMYXllcmVkIGNvbmZpZyBsb29rdXAgdXNlZCB0byByZXNvbHZlIGFyZ3VtZW50IHZhbHVlcyBhbmQgaGVscCBkZWZhdWx0cy4gKi9cbmV4cG9ydCB0eXBlIENsaUFyZ3NPcHRpb25zID0gQ29uZmlnT3B0aW9ucztcblxuLyoqIENMSSBtZXRhZGF0YSByZWFkIGZyb20gYSBmaWVsZCdzIFpvZCBgLm1ldGEoKWAgdmFsdWUuICovXG5leHBvcnQgaW50ZXJmYWNlIENsaUFyZ01ldGEge1xuICAvKiogRXhhY3QgZW52aXJvbm1lbnQgbmFtZSBvciBvcmRlcmVkIGFsaWFzZXMgdXNlZCBpbnN0ZWFkIG9mIGZpZWxkLW5hbWUgZGVyaXZhdGlvbi4gKi9cbiAgcmVhZG9ubHkgZW52Pzogc3RyaW5nIHwgcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKiBTZXQgZmFsc2UgdG8gcmVzb2x2ZSB0aGUgZmllbGQgZnJvbSBjb25maWcgd2l0aG91dCBnZW5lcmF0aW5nIGEgQ29tbWFuZGVyIGZsYWcuICovXG4gIHJlYWRvbmx5IGZsYWc/OiBib29sZWFuO1xuICAvKiogU2V0IGZhbHNlIHRvIGhpZGUgZGVmYXVsdHMgYW5kIGRlZmVyIGxheWVyZWQgY29uZmlndXJhdGlvbiBsb2FkaW5nIHVudGlsIHBhcnNpbmcuICovXG4gIHJlYWRvbmx5IGhlbHBEZWZhdWx0PzogYm9vbGVhbjtcbiAgLyoqIE9uZS1jaGFyYWN0ZXIgc2hvcnQgZmxhZyB3aXRob3V0IGEgZGFzaCwgb3IgZmFsc2UgdG8gZGlzYWJsZSBhdXRvbWF0aWMgZ2VuZXJhdGlvbi4gKi9cbiAgcmVhZG9ubHkgc2hvcnQ/OiBzdHJpbmcgfCBmYWxzZTtcbn1cblxuLyoqIFN0cnVjdHVyYWwgWm9kIG9iamVjdCBjb250cmFjdCB0aGF0IHJlbWFpbnMgY29tcGF0aWJsZSBhY3Jvc3MgWm9kIHY0IG1pbm9ycy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2xpT2JqZWN0U2NoZW1hPFxuICBUT3V0cHV0IGV4dGVuZHMgUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+ID0gUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+LFxuPiB7XG4gIHBhcnNlKHZhbHVlOiB1bmtub3duKTogVE91dHB1dDtcbiAgdG9KU09OU2NoZW1hKCk6IHVua25vd247XG59XG5cbi8qKiBab2QgZGVmYXVsdHMgb3IgY29uY3JldGUgb3B0aW9uIHZhbHVlcyBzZXJpYWxpemVkIGJ5IHtAbGluayBzZXJpYWxpemVBcmdzfS4gKi9cbmV4cG9ydCB0eXBlIEFyZ3VtZW50U291cmNlID0gQ2xpT2JqZWN0U2NoZW1hIHwgUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xuXG5pbnRlcmZhY2UgSnNvbkZpZWxkIGV4dGVuZHMgQ2xpQXJnTWV0YSB7XG4gIHR5cGU/OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBkZWZhdWx0PzogdW5rbm93bjtcbiAgZW51bT86IHVua25vd25bXTtcbiAgY29uc3Q/OiB1bmtub3duO1xufVxuXG5pbnRlcmZhY2UgRmllbGQgZXh0ZW5kcyBDbGlBcmdNZXRhIHtcbiAga2V5OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHR5cGU/OiBzdHJpbmc7XG4gIGNob2ljZXM/OiBzdHJpbmdbXTtcbiAgZmFsbGJhY2s/OiB1bmtub3duO1xufVxuXG5jb25zdCBib3VuZE9wdGlvbnMgPSBuZXcgV2Vha01hcDxDb21tYW5kLCBDbGlBcmdzT3B0aW9ucz4oKTtcblxuLyoqIFJlZ2lzdGVyIENvbW1hbmRlciBhcmd1bWVudHMgZm9yIGV2ZXJ5IGVuYWJsZWQgZmllbGQgb24gYSBab2Qgb2JqZWN0IHNjaGVtYS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRBcmdzPFRTY2hlbWEgZXh0ZW5kcyBDbGlPYmplY3RTY2hlbWE+KFxuICBjb21tYW5kOiBDb21tYW5kLFxuICBzY2hlbWE6IFRTY2hlbWEsXG4gIG9wdGlvbnM6IENsaUFyZ3NPcHRpb25zID0ge30sXG4pOiBDb21tYW5kIHtcbiAgYm91bmRPcHRpb25zLnNldChjb21tYW5kLCBvcHRpb25zKTtcbiAgY29uc3Qgc2NoZW1hRmllbGRzID0gZmllbGRzKHNjaGVtYSk7XG4gIGNvbnN0IHNob3J0RmxhZ3MgPSBmaWVsZFNob3J0RmxhZ3Moc2NoZW1hRmllbGRzKTtcbiAgZm9yIChjb25zdCBmaWVsZCBvZiBzY2hlbWFGaWVsZHMpIHtcbiAgICBpZiAoZmllbGQuZmxhZyA9PT0gZmFsc2UpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGVudktleXMgPSBmaWVsZEVudktleXMoZmllbGQpO1xuICAgIGNvbnN0IGVudk5hbWUgPSBlbnZBcmdOYW1lKGZpZWxkLCBlbnZLZXlzLCBvcHRpb25zKTtcbiAgICBjb25zdCBmbGFncyA9IGFyZ0ZsYWdzKGZpZWxkLCBzaG9ydEZsYWdzLmdldChmaWVsZC5rZXkpKTtcbiAgICBjb25zdCBzb3VyY2VkID0gZmllbGQuaGVscERlZmF1bHQgPT09IGZhbHNlID8gdW5kZWZpbmVkIDogY29uZmlnVmFsdWUoZmllbGQsIGVudktleXMsIG9wdGlvbnMpO1xuICAgIGNvbnN0IGZhbGxiYWNrID0gc291cmNlZCA/PyBmaWVsZC5mYWxsYmFjaztcbiAgICBjb25zdCBvcHRpb24gPSBuZXcgT3B0aW9uKGZsYWdzLCBmaWVsZC5kZXNjcmlwdGlvbik7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9wdGlvbiwgXCJzY2hlbWFIZWxwRGVmYXVsdFwiLCB7XG4gICAgICB2YWx1ZTogZmllbGQuaGVscERlZmF1bHQgPT09IGZhbHNlID8gdW5kZWZpbmVkIDogZmllbGQuZmFsbGJhY2ssXG4gICAgfSk7XG4gICAgaWYgKGVudk5hbWUpIG9wdGlvbi5lbnYoZW52TmFtZSk7XG4gICAgaWYgKGZpZWxkLmNob2ljZXMgJiYgZmllbGQuY2hvaWNlcy5sZW5ndGggPiAwKSBvcHRpb24uY2hvaWNlcyhmaWVsZC5jaG9pY2VzKTtcbiAgICBpZiAoZmFsbGJhY2sgIT09IHVuZGVmaW5lZCAmJiBmaWVsZC5oZWxwRGVmYXVsdCAhPT0gZmFsc2UpIHtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBsaXN0ZW5BZGRyZXNzKGZhbGxiYWNrKTtcbiAgICAgIG9wdGlvbi5kZWZhdWx0KGZhbGxiYWNrLCBhZGRyZXNzID8gZm9ybWF0TGlzdGVuQWRkcmVzcyhhZGRyZXNzKSA6IHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIGlmIChmaWVsZC50eXBlID09PSBcImFycmF5XCIpIHtcbiAgICAgIG9wdGlvbi5hcmdQYXJzZXIoKHZhbHVlOiBzdHJpbmcsIHByZXZpb3VzOiB1bmtub3duKSA9PlxuICAgICAgICBwcmV2aW91cyA9PT0gZmFsbGJhY2sgfHwgIUFycmF5LmlzQXJyYXkocHJldmlvdXMpID8gW3ZhbHVlXSA6IFsuLi5wcmV2aW91cywgdmFsdWVdLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29tbWFuZC5hZGRPcHRpb24ob3B0aW9uKTtcbiAgICBpZiAoZmllbGQudHlwZSA9PT0gXCJib29sZWFuXCIgJiYgb3B0aW9uLmxvbmcpIHtcbiAgICAgIGNvbW1hbmQuYWRkT3B0aW9uKFxuICAgICAgICBuZXcgT3B0aW9uKGAtLW5vLSR7b3B0aW9uLmxvbmcuc2xpY2UoMil9YCwgYERpc2FibGUgJHtmaWVsZC5kZXNjcmlwdGlvbi50b0xvd2VyQ2FzZSgpfWApLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNvbW1hbmQ7XG59XG5cbi8qKiBNZXJnZSBDTEkgdmFsdWVzIG92ZXIgbGF5ZXJlZCBjb25maWcsIHRoZW4gdmFsaWRhdGUgYW5kIGRlZmF1bHQgdGhyb3VnaCBab2QuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VBcmdzPFRTY2hlbWEgZXh0ZW5kcyBDbGlPYmplY3RTY2hlbWE+KFxuICBjb21tYW5kOiBDb21tYW5kLFxuICBzY2hlbWE6IFRTY2hlbWEsXG4gIG9wdGlvbnM6IENsaUFyZ3NPcHRpb25zID0gYm91bmRPcHRpb25zLmdldChjb21tYW5kKSA/PyB7fSxcbik6IFJldHVyblR5cGU8VFNjaGVtYVtcInBhcnNlXCJdPiB7XG4gIGNvbnN0IHZhbHVlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMoc2NoZW1hKSkge1xuICAgIGlmIChjb21tYW5kLmdldE9wdGlvblZhbHVlU291cmNlKGZpZWxkLmtleSkgPT09IFwiY2xpXCIpIHtcbiAgICAgIHZhbHVlc1tmaWVsZC5rZXldID0gY29tbWFuZC5nZXRPcHRpb25WYWx1ZShmaWVsZC5rZXkpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IHNvdXJjZWQgPSBjb25maWdWYWx1ZShmaWVsZCwgZmllbGRFbnZLZXlzKGZpZWxkKSwgb3B0aW9ucyk7XG4gICAgaWYgKHNvdXJjZWQgIT09IHVuZGVmaW5lZCkgdmFsdWVzW2ZpZWxkLmtleV0gPSBzb3VyY2VkO1xuICB9XG4gIHJldHVybiBzY2hlbWEucGFyc2UodmFsdWVzKSBhcyBSZXR1cm5UeXBlPFRTY2hlbWFbXCJwYXJzZVwiXT47XG59XG5cbi8qKiBQYXJzZSBhIHN0YW5kYWxvbmUgYXJndiBhcnJheSB0aHJvdWdoIENvbW1hbmRlciBhbmQgYW4gb3duaW5nIFpvZCBzY2hlbWEuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VBcmd2PFRTY2hlbWEgZXh0ZW5kcyBDbGlPYmplY3RTY2hlbWE+KFxuICBzY2hlbWE6IFRTY2hlbWEsXG4gIGFyZ3Y6IHJlYWRvbmx5IHN0cmluZ1tdID0gcHJvY2Vzcy5hcmd2LnNsaWNlKDIpLFxuICBvcHRpb25zOiBDbGlBcmdzT3B0aW9ucyA9IHt9LFxuKTogUmV0dXJuVHlwZTxUU2NoZW1hW1wicGFyc2VcIl0+IHtcbiAgY29uc3QgY29tbWFuZCA9IGFkZEFyZ3MobmV3IENvbW1hbmQoKSwgc2NoZW1hLCBvcHRpb25zKTtcbiAgY29tbWFuZC5wYXJzZShbLi4uYXJndl0sIHsgZnJvbTogXCJ1c2VyXCIgfSk7XG4gIHJldHVybiBwYXJzZUFyZ3MoY29tbWFuZCwgc2NoZW1hLCBvcHRpb25zKTtcbn1cblxuLyoqIENvbnZlcnQgc2NoZW1hIGRlZmF1bHRzIG9yIGNvbmNyZXRlIG9wdGlvbiB2YWx1ZXMgaW50byBDb21tYW5kZXIgYXJndW1lbnRzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUFyZ3Moc291cmNlOiBBcmd1bWVudFNvdXJjZSk6IHN0cmluZ1tdIHtcbiAgaWYgKGlzQ2xpT2JqZWN0U2NoZW1hKHNvdXJjZSkpIHtcbiAgICBjb25zdCB2YWx1ZXMgPSBzb3VyY2UucGFyc2Uoe30pIGFzIFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PjtcbiAgICByZXR1cm4gZmllbGRzKHNvdXJjZSkuZmxhdE1hcCgoZmllbGQpID0+XG4gICAgICBmaWVsZC5mbGFnID09PSBmYWxzZSA/IFtdIDogdmFsdWVBcmd1bWVudHMoZmllbGQua2V5LCB2YWx1ZXNbZmllbGQua2V5XSksXG4gICAgKTtcbiAgfVxuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoc291cmNlKS5mbGF0TWFwKChba2V5LCB2YWx1ZV0pID0+IHZhbHVlQXJndW1lbnRzKGtleSwgdmFsdWUpKTtcbn1cblxuZnVuY3Rpb24gZmllbGRzKHNjaGVtYTogQ2xpT2JqZWN0U2NoZW1hKTogRmllbGRbXSB7XG4gIGNvbnN0IGRvY3VtZW50ID0gc2NoZW1hLnRvSlNPTlNjaGVtYSgpO1xuICBjb25zdCBwcm9wZXJ0aWVzID0gaXNSZWNvcmQoZG9jdW1lbnQpID8gZG9jdW1lbnQucHJvcGVydGllcyA6IHVuZGVmaW5lZDtcbiAgaWYgKCFpc1JlY29yZChwcm9wZXJ0aWVzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJab2QgQ29tbWFuZGVyIGJpbmRpbmcgcmVxdWlyZXMgYSB6Lm9iamVjdCgpIHNjaGVtYVwiKTtcbiAgfVxuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocHJvcGVydGllcykubWFwKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICBpZiAoIWlzUmVjb3JkKHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgQ2Fubm90IGJpbmQgQ0xJIGFyZ3VtZW50IFwiJHtrZXl9XCJgKTtcbiAgICB9XG4gICAgY29uc3QganNvbiA9IHZhbHVlIGFzIEpzb25GaWVsZDtcbiAgICBjb25zdCBjaG9pY2VzID1cbiAgICAgIGpzb24uZW51bT8ubWFwKFN0cmluZykgPz8gKGpzb24uY29uc3QgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IFtTdHJpbmcoanNvbi5jb25zdCldKTtcbiAgICByZXR1cm4ge1xuICAgICAga2V5LFxuICAgICAgZGVzY3JpcHRpb246IHR5cGVvZiBqc29uLmRlc2NyaXB0aW9uID09PSBcInN0cmluZ1wiID8ganNvbi5kZXNjcmlwdGlvbiA6IFwiXCIsXG4gICAgICB0eXBlOiBqc29uLnR5cGUsXG4gICAgICBjaG9pY2VzLFxuICAgICAgZmFsbGJhY2s6IGpzb24uZGVmYXVsdCxcbiAgICAgIGVudjoganNvbi5lbnYsXG4gICAgICBmbGFnOiBqc29uLmZsYWcsXG4gICAgICBoZWxwRGVmYXVsdDoganNvbi5oZWxwRGVmYXVsdCxcbiAgICAgIHNob3J0OiBqc29uLnNob3J0LFxuICAgIH07XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBpc0NsaU9iamVjdFNjaGVtYSh2YWx1ZTogQXJndW1lbnRTb3VyY2UpOiB2YWx1ZSBpcyBDbGlPYmplY3RTY2hlbWEge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlLnBhcnNlID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIHZhbHVlLnRvSlNPTlNjaGVtYSA9PT0gXCJmdW5jdGlvblwiO1xufVxuXG5mdW5jdGlvbiBhcmdGbGFncyhmaWVsZDogRmllbGQsIHNob3J0OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICBjb25zdCBsb25nID0gYC0tJHt0b1NsdWcoZmllbGQua2V5KX1gO1xuICBjb25zdCB2YWx1ZSA9IGZpZWxkLnR5cGUgPT09IFwiYm9vbGVhblwiID8gXCJcIiA6IFwiIDx2YWx1ZT5cIjtcbiAgaWYgKHNob3J0KSByZXR1cm4gYC0ke3Nob3J0fSwgJHtsb25nfSR7dmFsdWV9YDtcbiAgcmV0dXJuIGAke2xvbmd9JHt2YWx1ZX1gO1xufVxuXG5mdW5jdGlvbiBmaWVsZFNob3J0RmxhZ3MoZmllbGRzOiByZWFkb25seSBGaWVsZFtdKTogUmVhZG9ubHlNYXA8c3RyaW5nLCBzdHJpbmc+IHtcbiAgY29uc3QgcmVzdWx0ID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgY29uc3QgcmVzZXJ2ZWQgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPihbW1wiaFwiLCBcImhlbHBcIl1dKTtcbiAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICBpZiAoZmllbGQuc2hvcnQgPT09IGZhbHNlIHx8IGZpZWxkLnNob3J0ID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuICAgIGlmICghL15bQS1aYS16XSQvLnRlc3QoZmllbGQuc2hvcnQpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBTaG9ydCBmbGFnIGZvciBcIiR7ZmllbGQua2V5fVwiIG11c3QgYmUgb25lIGxldHRlciBvciBmYWxzZWApO1xuICAgIH1cbiAgICBjb25zdCBzaG9ydCA9IGZpZWxkLnNob3J0LnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgZXhpc3RpbmcgPSByZXNlcnZlZC5nZXQoc2hvcnQpO1xuICAgIGlmIChleGlzdGluZykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgU2hvcnQgZmxhZyAtJHtzaG9ydH0gaXMgc2hhcmVkIGJ5IFwiJHtleGlzdGluZ31cIiBhbmQgXCIke2ZpZWxkLmtleX1cImApO1xuICAgIH1cbiAgICByZXNlcnZlZC5zZXQoc2hvcnQsIGZpZWxkLmtleSk7XG4gICAgcmVzdWx0LnNldChmaWVsZC5rZXksIHNob3J0KTtcbiAgfVxuICBjb25zdCBjYW5kaWRhdGVzID0gbmV3IE1hcDxzdHJpbmcsIEZpZWxkW10+KCk7XG4gIGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzKSB7XG4gICAgaWYgKGZpZWxkLnNob3J0ICE9PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuICAgIGNvbnN0IHNob3J0ID0gWy4uLnRva2VuaXplKGZpZWxkLmtleSldWzBdPy5bMF0/LnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKCFzaG9ydCB8fCByZXNlcnZlZC5oYXMoc2hvcnQpKSBjb250aW51ZTtcbiAgICBjb25zdCBtYXRjaGluZyA9IGNhbmRpZGF0ZXMuZ2V0KHNob3J0KSA/PyBbXTtcbiAgICBtYXRjaGluZy5wdXNoKGZpZWxkKTtcbiAgICBjYW5kaWRhdGVzLnNldChzaG9ydCwgbWF0Y2hpbmcpO1xuICB9XG4gIGZvciAoY29uc3QgW3Nob3J0LCBtYXRjaGluZ10gb2YgY2FuZGlkYXRlcykge1xuICAgIGlmIChtYXRjaGluZy5sZW5ndGggPT09IDEpIHJlc3VsdC5zZXQobWF0Y2hpbmdbMF0hLmtleSwgc2hvcnQpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGZpZWxkRW52S2V5cyhmaWVsZDogRmllbGQpOiByZWFkb25seSBzdHJpbmdbXSB7XG4gIGlmICh0eXBlb2YgZmllbGQuZW52ID09PSBcInN0cmluZ1wiKSByZXR1cm4gW2ZpZWxkLmVudl07XG4gIGlmIChBcnJheS5pc0FycmF5KGZpZWxkLmVudikpIHJldHVybiBbLi4uZmllbGQuZW52XTtcbiAgcmV0dXJuIGVudmlyb25tZW50S2V5cyhmaWVsZC5rZXkpO1xufVxuXG5mdW5jdGlvbiBlbnZBcmdOYW1lKGZpZWxkOiBGaWVsZCwgZW52S2V5czogcmVhZG9ubHkgc3RyaW5nW10sIG9wdGlvbnM6IENsaUFyZ3NPcHRpb25zKTogc3RyaW5nIHtcbiAgaWYgKGZpZWxkLmVudiAhPT0gdW5kZWZpbmVkKSByZXR1cm4gZW52S2V5c1swXSA/PyBcIlwiO1xuICBjb25zdCBjYW5vbmljYWwgPVxuICAgIGVudktleXMuZmluZCgoa2V5KSA9PiAvXltBLVpdW0EtWjAtOV0qKF9bQS1aMC05XSspKyQvLnRlc3Qoa2V5KSkgPz9cbiAgICBlbnZLZXlzLmZpbmQoKGtleSkgPT4ga2V5ID09PSBrZXkudG9VcHBlckNhc2UoKSAmJiAvW0EtWl0vLnRlc3Qoa2V5KSkgPz9cbiAgICBlbnZLZXlzLmF0KC0xKSA/P1xuICAgIFwiXCI7XG4gIC8vIEhlbHAgc2hvd3MgdGhlIHVuc2NvcGVkIG5hbWU7IGNvbmZpZ1V0aWxzIHN0aWxsIHJlYWRzIERCWF9UT09MU18gYWxpYXNlcy5cbiAgcmV0dXJuIGNvbmZpZ1V0aWxzLm5hbWUoY2Fub25pY2FsLCB7IC4uLm9wdGlvbnMsIHNjb3BlOiBbXSB9KTtcbn1cblxuZnVuY3Rpb24gY29uZmlnVmFsdWUoXG4gIGZpZWxkOiBGaWVsZCxcbiAgZW52S2V5czogc3RyaW5nIHwgcmVhZG9ubHkgc3RyaW5nW10sXG4gIG9wdGlvbnM6IENsaUFyZ3NPcHRpb25zLFxuKTogdW5rbm93biB7XG4gIGlmIChmaWVsZC50eXBlID09PSBcImFycmF5XCIpIHtcbiAgICBjb25zdCB2YWx1ZXMgPSBsaXN0KHVuZGVmaW5lZCwgZW52S2V5cywgdW5kZWZpbmVkLCBvcHRpb25zKTtcbiAgICByZXR1cm4gdmFsdWVzLmxlbmd0aCA+IDAgPyB2YWx1ZXMgOiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKGZpZWxkLnR5cGUgPT09IFwiYm9vbGVhblwiKSByZXR1cm4gYm9vbGVhbih1bmRlZmluZWQsIGVudktleXMsIG9wdGlvbnMpO1xuICByZXR1cm4gdGV4dChlbnZLZXlzLCBvcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gdmFsdWVBcmd1bWVudHMoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogc3RyaW5nW10ge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuIFtdO1xuICBjb25zdCBmbGFnID0gYC0tJHt0b1NsdWcoa2V5KX1gO1xuICBpZiAodHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIikgcmV0dXJuIFt2YWx1ZSA/IGZsYWcgOiBgLS1uby0ke2ZsYWcuc2xpY2UoMil9YF07XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZS5mbGF0TWFwKChlbnRyeSkgPT4gW2ZsYWcsIHNjYWxhckFyZ3VtZW50KGtleSwgZW50cnkpXSk7XG4gIH1cbiAgcmV0dXJuIFtmbGFnLCBzY2FsYXJBcmd1bWVudChrZXksIHZhbHVlKV07XG59XG5cbmZ1bmN0aW9uIHNjYWxhckFyZ3VtZW50KGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJiaWdpbnRcIikge1xuICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICB9XG4gIGNvbnN0IGFkZHJlc3MgPSBsaXN0ZW5BZGRyZXNzKHZhbHVlKTtcbiAgaWYgKGFkZHJlc3MpIHJldHVybiBmb3JtYXRMaXN0ZW5BZGRyZXNzKGFkZHJlc3MpO1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKGBDYW5ub3Qgc2VyaWFsaXplIENMSSBhcmd1bWVudCBcIiR7a2V5fVwiIHdpdGggYSBub24tc2NhbGFyIHZhbHVlYCk7XG59XG5cbmZ1bmN0aW9uIGxpc3RlbkFkZHJlc3ModmFsdWU6IHVua25vd24pOiBMaXN0ZW5BZGRyZXNzIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFpc1JlY29yZCh2YWx1ZSkpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmICh2YWx1ZS5zY2hlbWUgPT09IFwidGNwXCIgJiYgdHlwZW9mIHZhbHVlLmhvc3QgPT09IFwic3RyaW5nXCIgJiYgdHlwZW9mIHZhbHVlLnBvcnQgPT09IFwibnVtYmVyXCIpIHtcbiAgICByZXR1cm4geyBzY2hlbWU6IFwidGNwXCIsIGhvc3Q6IHZhbHVlLmhvc3QsIHBvcnQ6IHZhbHVlLnBvcnQgfTtcbiAgfVxuICBpZiAodmFsdWUuc2NoZW1lID09PSBcInVuaXhcIiAmJiB0eXBlb2YgdmFsdWUucGF0aCA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiB7IHNjaGVtZTogXCJ1bml4XCIsIHBhdGg6IHZhbHVlLnBhdGggfTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuIl19
package/package.json CHANGED
@@ -23,8 +23,8 @@
23
23
  "typescript": "^5.9.3"
24
24
  },
25
25
  "dependencies": {
26
- "@dbx-tools/core": "^0.9.154",
27
- "@dbx-tools/shared-core": "^0.9.154",
26
+ "@dbx-tools/core": "^0.9.157",
27
+ "@dbx-tools/shared-core": "^0.9.157",
28
28
  "commander": "^15.0.0",
29
29
  "zod": "4.3.6"
30
30
  },
@@ -39,18 +39,10 @@
39
39
  "types": "./lib/index.d.ts",
40
40
  "default": "./lib/index.js"
41
41
  },
42
- "./args": {
43
- "types": "./lib/src/args.d.ts",
44
- "default": "./lib/src/args.js"
45
- },
46
- "./*": {
47
- "types": "./lib/src/*/index.d.ts",
48
- "default": "./lib/src/*/index.js"
49
- },
50
42
  "./package.json": "./package.json"
51
43
  }
52
44
  },
53
- "version": "0.9.154",
45
+ "version": "0.9.157",
54
46
  "types": "./lib/index.d.ts",
55
47
  "dbxToolsConfig": {
56
48
  "tags": [
@@ -63,20 +55,11 @@
63
55
  "types": "./lib/index.d.ts",
64
56
  "default": "./lib/index.js"
65
57
  },
66
- "./args": {
67
- "types": "./lib/src/args.d.ts",
68
- "default": "./lib/src/args.js"
69
- },
70
- "./*": {
71
- "types": "./lib/src/*/index.d.ts",
72
- "default": "./lib/src/*/index.js"
73
- },
74
58
  "./package.json": "./package.json"
75
59
  },
76
60
  "files": [
77
- "index.ts",
61
+ "index*.ts",
78
62
  "src",
79
- "exports.ts",
80
63
  "bin",
81
64
  "lib"
82
65
  ],
package/src/args.ts CHANGED
@@ -8,12 +8,25 @@
8
8
  * @module
9
9
  */
10
10
 
11
- import { configUtils } from "@dbx-tools/core";
12
- import { object, options as sharedOptions, stringUtils } from "@dbx-tools/shared-core";
11
+ import {
12
+ configUtils,
13
+ type ConfigOptions,
14
+ environmentKeys,
15
+ list,
16
+ boolean,
17
+ text,
18
+ } from "@dbx-tools/core";
19
+ import {
20
+ isRecord,
21
+ formatListenAddress,
22
+ type ListenAddress,
23
+ toSlug,
24
+ tokenize,
25
+ } from "@dbx-tools/shared-core";
13
26
  import { Command, Option } from "commander";
14
27
 
15
28
  /** Layered config lookup used to resolve argument values and help defaults. */
16
- export type CliArgsOptions = configUtils.ConfigOptions;
29
+ export type CliArgsOptions = ConfigOptions;
17
30
 
18
31
  /** CLI metadata read from a field's Zod `.meta()` value. */
19
32
  export interface CliArgMeta {
@@ -80,7 +93,7 @@ export function addArgs<TSchema extends CliObjectSchema>(
80
93
  if (field.choices && field.choices.length > 0) option.choices(field.choices);
81
94
  if (fallback !== undefined && field.helpDefault !== false) {
82
95
  const address = listenAddress(fallback);
83
- option.default(fallback, address ? sharedOptions.formatListenAddress(address) : undefined);
96
+ option.default(fallback, address ? formatListenAddress(address) : undefined);
84
97
  }
85
98
  if (field.type === "array") {
86
99
  option.argParser((value: string, previous: unknown) =>
@@ -139,12 +152,12 @@ export function serializeArgs(source: ArgumentSource): string[] {
139
152
 
140
153
  function fields(schema: CliObjectSchema): Field[] {
141
154
  const document = schema.toJSONSchema();
142
- const properties = object.isRecord(document) ? document.properties : undefined;
143
- if (!object.isRecord(properties)) {
155
+ const properties = isRecord(document) ? document.properties : undefined;
156
+ if (!isRecord(properties)) {
144
157
  throw new TypeError("Zod Commander binding requires a z.object() schema");
145
158
  }
146
159
  return Object.entries(properties).map(([key, value]) => {
147
- if (!object.isRecord(value)) {
160
+ if (!isRecord(value)) {
148
161
  throw new TypeError(`Cannot bind CLI argument "${key}"`);
149
162
  }
150
163
  const json = value as JsonField;
@@ -169,7 +182,7 @@ function isCliObjectSchema(value: ArgumentSource): value is CliObjectSchema {
169
182
  }
170
183
 
171
184
  function argFlags(field: Field, short: string | undefined): string {
172
- const long = `--${stringUtils.toSlug(field.key)}`;
185
+ const long = `--${toSlug(field.key)}`;
173
186
  const value = field.type === "boolean" ? "" : " <value>";
174
187
  if (short) return `-${short}, ${long}${value}`;
175
188
  return `${long}${value}`;
@@ -194,7 +207,7 @@ function fieldShortFlags(fields: readonly Field[]): ReadonlyMap<string, string>
194
207
  const candidates = new Map<string, Field[]>();
195
208
  for (const field of fields) {
196
209
  if (field.short !== undefined) continue;
197
- const short = [...stringUtils.tokenize(field.key)][0]?.[0]?.toLowerCase();
210
+ const short = [...tokenize(field.key)][0]?.[0]?.toLowerCase();
198
211
  if (!short || reserved.has(short)) continue;
199
212
  const matching = candidates.get(short) ?? [];
200
213
  matching.push(field);
@@ -209,7 +222,7 @@ function fieldShortFlags(fields: readonly Field[]): ReadonlyMap<string, string>
209
222
  function fieldEnvKeys(field: Field): readonly string[] {
210
223
  if (typeof field.env === "string") return [field.env];
211
224
  if (Array.isArray(field.env)) return [...field.env];
212
- return configUtils.environmentKeys(field.key);
225
+ return environmentKeys(field.key);
213
226
  }
214
227
 
215
228
  function envArgName(field: Field, envKeys: readonly string[], options: CliArgsOptions): string {
@@ -229,16 +242,16 @@ function configValue(
229
242
  options: CliArgsOptions,
230
243
  ): unknown {
231
244
  if (field.type === "array") {
232
- const values = configUtils.list(undefined, envKeys, undefined, options);
245
+ const values = list(undefined, envKeys, undefined, options);
233
246
  return values.length > 0 ? values : undefined;
234
247
  }
235
- if (field.type === "boolean") return configUtils.boolean(undefined, envKeys, options);
236
- return configUtils.text(envKeys, options);
248
+ if (field.type === "boolean") return boolean(undefined, envKeys, options);
249
+ return text(envKeys, options);
237
250
  }
238
251
 
239
252
  function valueArguments(key: string, value: unknown): string[] {
240
253
  if (value === undefined || value === null) return [];
241
- const flag = `--${stringUtils.toSlug(key)}`;
254
+ const flag = `--${toSlug(key)}`;
242
255
  if (typeof value === "boolean") return [value ? flag : `--no-${flag.slice(2)}`];
243
256
  if (Array.isArray(value)) {
244
257
  return value.flatMap((entry) => [flag, scalarArgument(key, entry)]);
@@ -251,12 +264,12 @@ function scalarArgument(key: string, value: unknown): string {
251
264
  return String(value);
252
265
  }
253
266
  const address = listenAddress(value);
254
- if (address) return sharedOptions.formatListenAddress(address);
267
+ if (address) return formatListenAddress(address);
255
268
  throw new TypeError(`Cannot serialize CLI argument "${key}" with a non-scalar value`);
256
269
  }
257
270
 
258
- function listenAddress(value: unknown): sharedOptions.ListenAddress | undefined {
259
- if (!object.isRecord(value)) return undefined;
271
+ function listenAddress(value: unknown): ListenAddress | undefined {
272
+ if (!isRecord(value)) return undefined;
260
273
  if (value.scheme === "tcp" && typeof value.host === "string" && typeof value.port === "number") {
261
274
  return { scheme: "tcp", host: value.host, port: value.port };
262
275
  }
package/exports.ts DELETED
@@ -1 +0,0 @@
1
- export { addArgs, parseArgs, parseArgv, serializeArgs } from "./src/args.ts";
package/lib/exports.d.ts DELETED
@@ -1 +0,0 @@
1
- export { addArgs, parseArgs, parseArgv, serializeArgs } from "./src/args.ts";
package/lib/exports.js DELETED
@@ -1,2 +0,0 @@
1
- export { addArgs, parseArgs, parseArgv, serializeArgs } from "./src/args.js";
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL2V4cG9ydHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IGFkZEFyZ3MsIHBhcnNlQXJncywgcGFyc2VBcmd2LCBzZXJpYWxpemVBcmdzIH0gZnJvbSBcIi4vc3JjL2FyZ3MudHNcIjtcbiJdfQ==