@dbx-tools/shared-core 0.9.58 → 0.9.61
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 +3 -3
- package/index.ts +3 -3
- package/lib/index.d.ts +3 -3
- package/lib/index.js +3 -3
- package/lib/src/brand-utils.d.ts +5 -5
- package/lib/src/brand-utils.js +6 -6
- package/lib/src/http.d.ts +1 -1
- package/lib/src/http.js +2 -2
- package/lib/src/net.d.ts +1 -13
- package/lib/src/net.js +1 -18
- package/lib/src/object.d.ts +2 -14
- package/lib/src/object.js +3 -27
- package/lib/src/options.d.ts +14 -3
- package/lib/src/options.js +24 -5
- package/package.json +1 -1
- package/src/brand-utils.ts +5 -5
- package/src/http.ts +1 -1
- package/src/net.ts +1 -18
- package/src/object.ts +2 -27
- package/src/options.ts +38 -10
package/lib/src/options.d.ts
CHANGED
|
@@ -37,6 +37,19 @@ export declare const databricksEnvironmentNames: Readonly<{
|
|
|
37
37
|
appPort: "DATABRICKS_APP_PORT";
|
|
38
38
|
lakebaseEndpoint: "LAKEBASE_ENDPOINT";
|
|
39
39
|
}>;
|
|
40
|
+
export declare const PostgresEnvironmentNamesSchema: z.ZodObject<{
|
|
41
|
+
postgresRole: z.ZodDefault<z.ZodLiteral<"DBX_TOOLS_POSTGRES_ROLE">>;
|
|
42
|
+
}, z.core.$strict>;
|
|
43
|
+
export type PostgresEnvironmentNames = z.output<typeof PostgresEnvironmentNamesSchema>;
|
|
44
|
+
/** Canonical PostgreSQL environment names derived from the owning schema. */
|
|
45
|
+
export declare const postgresEnvironmentNames: Readonly<{
|
|
46
|
+
postgresRole: "DBX_TOOLS_POSTGRES_ROLE";
|
|
47
|
+
}>;
|
|
48
|
+
export declare const postgresRoleSchema: z.ZodString;
|
|
49
|
+
export declare const PostgresOptionsSchema: z.ZodObject<{
|
|
50
|
+
postgresRole: z.ZodOptional<z.ZodString>;
|
|
51
|
+
}, z.core.$strict>;
|
|
52
|
+
export type PostgresOptions = z.input<typeof PostgresOptionsSchema>;
|
|
40
53
|
export declare const tcpPortSchema: z.ZodCoercedNumber<number>;
|
|
41
54
|
export declare const tcpPortOrZeroSchema: z.ZodCoercedNumber<number>;
|
|
42
55
|
export declare const normalizedUrlSchema: z.ZodString;
|
|
@@ -56,10 +69,8 @@ export declare const DatabricksOptionsSchema: z.ZodObject<{
|
|
|
56
69
|
lakebaseEndpoint: z.ZodOptional<z.ZodString>;
|
|
57
70
|
}, z.core.$strict>;
|
|
58
71
|
export type DatabricksOptions = z.input<typeof DatabricksOptionsSchema>;
|
|
59
|
-
/** Key format
|
|
72
|
+
/** Key format used when serializing parsed options. */
|
|
60
73
|
export type OptionSerializationFormat = "flag" | "env";
|
|
61
|
-
/** Serialize complete parsed options as JSON keyed by flags or environment names. */
|
|
62
|
-
export declare function serializeOpts<T extends z.ZodRawShape>(schema: z.ZodObject<T>, values: z.input<z.ZodObject<T>>, format: OptionSerializationFormat): string;
|
|
63
74
|
/** Serialize complete parsed options as a process environment map. */
|
|
64
75
|
export declare function serializeOptsEnvironment<T extends z.ZodRawShape>(schema: z.ZodObject<T>, values: z.input<z.ZodObject<T>>): Readonly<Record<string, string>>;
|
|
65
76
|
export declare const LakebaseOptionsSchema: z.ZodObject<{
|
package/lib/src/options.js
CHANGED
|
@@ -29,6 +29,29 @@ export const DatabricksEnvironmentNamesSchema = z
|
|
|
29
29
|
.describe("Canonical Databricks CLI, SDK, Apps, and Lakebase environment names.");
|
|
30
30
|
/** Canonical Databricks environment names derived from the owning schema. */
|
|
31
31
|
export const databricksEnvironmentNames = Object.freeze(DatabricksEnvironmentNamesSchema.parse({}));
|
|
32
|
+
export const PostgresEnvironmentNamesSchema = z
|
|
33
|
+
.object({
|
|
34
|
+
postgresRole: environmentName("DBX_TOOLS_POSTGRES_ROLE", "PostgreSQL assumed-role environment."),
|
|
35
|
+
})
|
|
36
|
+
.strict()
|
|
37
|
+
.describe("Canonical dbx-tools PostgreSQL environment names.");
|
|
38
|
+
/** Canonical PostgreSQL environment names derived from the owning schema. */
|
|
39
|
+
export const postgresEnvironmentNames = Object.freeze(PostgresEnvironmentNamesSchema.parse({}));
|
|
40
|
+
export const postgresRoleSchema = z
|
|
41
|
+
.string()
|
|
42
|
+
.trim()
|
|
43
|
+
.min(1)
|
|
44
|
+
.regex(/^[A-Za-z0-9._@+-]{1,255}$/, "PostgreSQL role must contain only letters, numbers, dot, underscore, at, plus, or hyphen.")
|
|
45
|
+
.describe("PostgreSQL role assumed after authentication.");
|
|
46
|
+
export const PostgresOptionsSchema = z
|
|
47
|
+
.object({
|
|
48
|
+
postgresRole: postgresRoleSchema
|
|
49
|
+
.optional()
|
|
50
|
+
.describe("PostgreSQL role assumed after authentication.")
|
|
51
|
+
.meta({ env: postgresEnvironmentNames.postgresRole }),
|
|
52
|
+
})
|
|
53
|
+
.strict()
|
|
54
|
+
.describe("Shared PostgreSQL session options.");
|
|
32
55
|
export const tcpPortSchema = z.coerce
|
|
33
56
|
.number()
|
|
34
57
|
.int()
|
|
@@ -80,10 +103,6 @@ export const DatabricksOptionsSchema = z
|
|
|
80
103
|
})
|
|
81
104
|
.strict()
|
|
82
105
|
.describe("Common Databricks CLI, SDK, Apps, and Lakebase options.");
|
|
83
|
-
/** Serialize complete parsed options as JSON keyed by flags or environment names. */
|
|
84
|
-
export function serializeOpts(schema, values, format) {
|
|
85
|
-
return JSON.stringify(serializedOpts(schema, values, format), null, 2);
|
|
86
|
-
}
|
|
87
106
|
/** Serialize complete parsed options as a process environment map. */
|
|
88
107
|
export function serializeOptsEnvironment(schema, values) {
|
|
89
108
|
return Object.fromEntries(Object.entries(serializedOpts(schema, values, "env")).map(([key, value]) => [
|
|
@@ -293,4 +312,4 @@ function normalizeUrl(value) {
|
|
|
293
312
|
const normalized = url.toString();
|
|
294
313
|
return url.pathname === "/" && !url.search && !url.hash ? normalized.slice(0, -1) : normalized;
|
|
295
314
|
}
|
|
296
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFFSCxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBQ3hCLE9BQU8sRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNwRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRS9FLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFeEMsTUFBTSxlQUFlLEdBQUcsQ0FBbUIsSUFBTyxFQUFFLFdBQW1CLEVBQUUsRUFBRSxDQUN6RSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7QUFFdEQsTUFBTSxDQUFDLE1BQU0sZ0NBQWdDLEdBQUcsQ0FBQztLQUM5QyxNQUFNLENBQUM7SUFDTixPQUFPLEVBQUUsZUFBZSxDQUFDLDJCQUEyQixFQUFFLHFDQUFxQyxDQUFDO0lBQzVGLElBQUksRUFBRSxlQUFlLENBQUMsaUJBQWlCLEVBQUUsOEJBQThCLENBQUM7SUFDeEUsU0FBUyxFQUFFLGVBQWUsQ0FBQyx1QkFBdUIsRUFBRSxvQ0FBb0MsQ0FBQztJQUN6RixXQUFXLEVBQUUsZUFBZSxDQUFDLHlCQUF5QixFQUFFLHNDQUFzQyxDQUFDO0lBQy9GLFVBQVUsRUFBRSxlQUFlLENBQ3pCLHdCQUF3QixFQUN4Qix5Q0FBeUMsQ0FDMUM7SUFDRCxRQUFRLEVBQUUsZUFBZSxDQUFDLHNCQUFzQixFQUFFLHlDQUF5QyxDQUFDO0lBQzVGLFlBQVksRUFBRSxlQUFlLENBQzNCLDBCQUEwQixFQUMxQiw2Q0FBNkMsQ0FDOUM7SUFDRCxXQUFXLEVBQUUsZUFBZSxDQUFDLGtCQUFrQixFQUFFLHNDQUFzQyxDQUFDO0lBQ3hGLE9BQU8sRUFBRSxlQUFlLENBQUMscUJBQXFCLEVBQUUsa0NBQWtDLENBQUM7SUFDbkYsUUFBUSxFQUFFLGVBQWUsQ0FBQyxzQkFBc0IsRUFBRSxtQ0FBbUMsQ0FBQztJQUN0RixPQUFPLEVBQUUsZUFBZSxDQUFDLHFCQUFxQixFQUFFLGtDQUFrQyxDQUFDO0lBQ25GLE9BQU8sRUFBRSxlQUFlLENBQUMscUJBQXFCLEVBQUUsa0NBQWtDLENBQUM7SUFDbkYsZ0JBQWdCLEVBQUUsZUFBZSxDQUFDLG1CQUFtQixFQUFFLGdDQUFnQyxDQUFDO0NBQ3pGLENBQUM7S0FDRCxNQUFNLEVBQUU7S0FDUixRQUFRLENBQUMsc0VBQXNFLENBQUMsQ0FBQztBQUlwRiw2RUFBNkU7QUFDN0UsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxnQ0FBZ0MsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUVwRyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxDQUFDLE1BQU07S0FDbEMsTUFBTSxFQUFVO0tBQ2hCLEdBQUcsRUFBRTtLQUNMLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDTixHQUFHLENBQUMsWUFBWSxDQUFDO0tBQ2pCLFFBQVEsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO0FBRTlDLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsQ0FBQyxNQUFNO0tBQ3hDLE1BQU0sRUFBVTtLQUNoQixHQUFHLEVBQUU7S0FDTCxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQ04sR0FBRyxDQUFDLFlBQVksQ0FBQztLQUNqQixRQUFRLENBQUMsMEVBQTBFLENBQUMsQ0FBQztBQUV4RixNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxDQUFDO0tBQ2pDLE1BQU0sRUFBRTtLQUNSLElBQUksRUFBRTtLQUNOLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDTixNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxTQUFTLEVBQUU7SUFDbEQsT0FBTyxFQUFFLCtCQUErQjtDQUN6QyxDQUFDO0tBQ0QsU0FBUyxDQUFDLFlBQVksQ0FBQztLQUN2QixRQUFRLENBQUMsZ0RBQWdELENBQUMsQ0FBQztBQUU5RCxNQUFNLGNBQWMsR0FBRyxDQUFDLFdBQW1CLEVBQUUsRUFBRSxDQUM3QyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUM1RCxNQUFNLG9CQUFvQixHQUFHLENBQUMsR0FBVyxFQUFFLElBQUksR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDMUQsR0FBRztJQUNILElBQUk7SUFDSixXQUFXLEVBQUUsS0FBSztDQUNuQixDQUFDLENBQUM7QUFFSCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxDQUFDO0tBQ3JDLE1BQU0sQ0FBQztJQUNOLE9BQU8sRUFBRSxjQUFjLENBQUMseUJBQXlCLENBQUMsQ0FBQyxJQUFJLENBQ3JELG9CQUFvQixDQUFDLDBCQUEwQixDQUFDLE9BQU8sQ0FBQyxDQUN6RDtJQUNELElBQUksRUFBRSxtQkFBbUI7U0FDdEIsUUFBUSxFQUFFO1NBQ1YsUUFBUSxDQUFDLGtCQUFrQixDQUFDO1NBQzVCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDckUsU0FBUyxFQUFFLGNBQWMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLElBQUksQ0FDdEQsb0JBQW9CLENBQUMsMEJBQTBCLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUNsRTtJQUNELFdBQVcsRUFBRSxjQUFjLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxJQUFJLENBQzFELG9CQUFvQixDQUFDLDBCQUEwQixDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FDcEU7SUFDRCxVQUFVLEVBQUUsY0FBYyxDQUFDLDZCQUE2QixDQUFDLENBQUMsSUFBSSxDQUM1RCxvQkFBb0IsQ0FBQywwQkFBMEIsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQ25FO0lBQ0QsUUFBUSxFQUFFLGNBQWMsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLElBQUksQ0FDMUQsb0JBQW9CLENBQUMsMEJBQTBCLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUNqRTtJQUNELFlBQVksRUFBRSxjQUFjLENBQUMsaUNBQWlDLENBQUMsQ0FBQyxJQUFJLENBQ2xFLG9CQUFvQixDQUFDLDBCQUEwQixDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FDckU7SUFDRCxXQUFXLEVBQUUsY0FBYyxDQUFDLDBCQUEwQixDQUFDLENBQUMsSUFBSSxDQUMxRCxvQkFBb0IsQ0FBQywwQkFBMEIsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQ3BFO0lBQ0QsT0FBTyxFQUFFLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLElBQUksQ0FDbEQsb0JBQW9CLENBQUMsMEJBQTBCLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUNoRTtJQUNELFFBQVEsRUFBRSxjQUFjLENBQUMsaUNBQWlDLENBQUMsQ0FBQyxJQUFJLENBQzlELG9CQUFvQixDQUFDLDBCQUEwQixDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FDakU7SUFDRCxPQUFPLEVBQUUsY0FBYyxDQUFDLHNCQUFzQixDQUFDLENBQUMsSUFBSSxDQUNsRCxvQkFBb0IsQ0FBQywwQkFBMEIsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQ2hFO0lBQ0QsT0FBTyxFQUFFLGFBQWE7U0FDbkIsUUFBUSxFQUFFO1NBQ1YsUUFBUSxDQUFDLHNCQUFzQixDQUFDO1NBQ2hDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQywwQkFBMEIsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDeEUsZ0JBQWdCLEVBQUUsY0FBYyxDQUFDLG9CQUFvQixDQUFDLENBQUMsSUFBSSxDQUN6RCxvQkFBb0IsQ0FBQywwQkFBMEIsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FDekU7Q0FDRixDQUFDO0tBQ0QsTUFBTSxFQUFFO0tBQ1IsUUFBUSxDQUFDLHlEQUF5RCxDQUFDLENBQUM7QUFjdkUscUZBQXFGO0FBQ3JGLE1BQU0sVUFBVSxhQUFhLENBQzNCLE1BQXNCLEVBQ3RCLE1BQStCLEVBQy9CLE1BQWlDO0lBRWpDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDekUsQ0FBQztBQUVELHNFQUFzRTtBQUN0RSxNQUFNLFVBQVUsd0JBQXdCLENBQ3RDLE1BQXNCLEVBQ3RCLE1BQStCO0lBRS9CLE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FDdkIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUMxRSxHQUFHO1FBQ0gsc0JBQXNCLENBQUMsS0FBSyxDQUFDO0tBQzlCLENBQUMsQ0FDSCxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsY0FBYyxDQUNyQixNQUFzQixFQUN0QixNQUErQixFQUMvQixNQUFpQztJQUVqQyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBc0MsQ0FBQztJQUN6RSxNQUFNLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtRQUM1RCxJQUFJLE1BQU0sS0FBSyxNQUFNLElBQUksUUFBUSxDQUFDLElBQUksS0FBSyxLQUFLO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDNUQsTUFBTSxHQUFHLEdBQ1AsTUFBTSxLQUFLLE1BQU07WUFDZixDQUFDLENBQUMsS0FBSyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzdCLENBQUMsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDcEIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQyxPQUFPLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBVSxDQUFDLENBQUM7SUFDbkYsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDckMsQ0FBQztBQUVELE1BQU0sWUFBWSxHQUFHLENBQUMsV0FBbUIsRUFBRSxHQUFXLEVBQUUsRUFBRSxDQUN4RCxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7QUFFdkYsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FBQztLQUNuQyxNQUFNLENBQUM7SUFDTixnQkFBZ0IsRUFBRSxZQUFZLENBQzVCLGdEQUFnRCxFQUNoRCwwQkFBMEIsQ0FBQyxnQkFBZ0IsQ0FDNUM7Q0FDRixDQUFDO0tBQ0QsTUFBTSxFQUFFO0tBQ1IsUUFBUSxDQUFDLDBCQUEwQixDQUFDLENBQUM7QUFPeEMsMkZBQTJGO0FBQzNGLE1BQU0sVUFBVSxTQUFTLENBQ3ZCLE1BQXNCLEVBQ3RCLFFBQXdCLElBQUksRUFDNUIsY0FBOEIsSUFBSTtJQUVsQyxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUM1RCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3hDLE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FDdkIsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUEwQixDQUFDLENBQUMsQ0FBQyxDQUMzQyxDQUFDO0FBQ3pDLENBQUM7QUFxREQsaUdBQWlHO0FBQ2pHLE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMsT0FBNkI7SUFFN0IsTUFBTSxRQUFRLEdBQXFCO1FBQ2pDLE1BQU0sRUFBRSxLQUFLO1FBQ2IsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLElBQUksV0FBVztRQUNqQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7S0FDbkIsQ0FBQztJQUNGLE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxDQUFlLE9BQU8sQ0FBQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLE1BQU0sTUFBTSxHQUFHLENBQUM7U0FDYixVQUFVLENBQ1QsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsRUFDdkUsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRTtRQUM3QixDQUFDO2FBQ0UsTUFBTSxDQUFDO1lBQ04sTUFBTSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQ3hCLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQ25FLElBQUksRUFBRSxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztTQUNqRCxDQUFDO2FBQ0QsTUFBTSxFQUFFO1FBQ1gsQ0FBQzthQUNFLE1BQU0sQ0FBQztZQUNOLE1BQU0sRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUN6QixJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDL0IsQ0FBQzthQUNELE1BQU0sRUFBRTtLQUNaLENBQUMsQ0FDSDtTQUNBLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsaUNBQWlDLENBQUM7U0FDbkYsTUFBTSxDQUNMLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFDMUYsaUNBQWlDLENBQ2xDO1NBQ0EsUUFBUSxDQUFDLHNDQUFzQyxDQUFzQyxDQUFDO0lBQ3pGLE9BQU8sT0FBTyxDQUFDLFdBQVcsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMzRSxDQUFDO0FBRUQsZ0VBQWdFO0FBQ2hFLE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxPQUFzQjtJQUN4RCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssTUFBTSxFQUFFLENBQUM7UUFDOUIsT0FBTyxVQUFVLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDNUUsQ0FBQztJQUNELE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztJQUM3RSxPQUFPLFNBQVMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN6QyxDQUFDO0FBRUQsU0FBUyxrQkFBa0IsQ0FDekIsS0FBYyxFQUNkLFFBQTBCLEVBQzFCLGFBQTJCO0lBRTNCLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDbEQsSUFBSSxPQUFPLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDL0QsT0FBTyxFQUFFLEdBQUcsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUNyQyxDQUFDO1FBQ0QsSUFBSSxPQUFPLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDbkMsT0FBTyxFQUFFLEdBQUcsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUN0QyxDQUFDO0lBQ0gsQ0FBQztJQUNELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDOUIsT0FBTyxhQUFhLEtBQUssS0FBSztZQUM1QixDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUU7WUFDckQsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7SUFDOUMsQ0FBQztJQUNELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQzVDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMxQixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUMvQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLENBQUM7SUFDNUUsQ0FBQztJQUNELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDM0UsSUFBSSxhQUFhLEtBQUssTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQzNELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBQ0QsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNoRixJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxD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TyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDO0lBQ3pELElBQUksSUFBSSxLQUFLLE9BQU8sSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQUUsT0FBTyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0UsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxNQUFzQixFQUFFLElBQXVCO0lBQ3ZFLElBQUksQ0FBQyxNQUFNO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDOUIsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN2QixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUIsSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUU7WUFBRSxPQUFPLEtBQUssQ0FBQztJQUMxRSxDQUFDO0lBQ0QsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLEtBQWE7SUFDakMsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCLElBQUksQ0FBQyxHQUFHO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDdkIsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xDLE9BQU8sR0FBRyxDQUFDLFFBQVEsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO0FBQ2pHLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEJyb3dzZXItc2FmZSBvcHRpb24gcHJpbWl0aXZlcyBzaGFyZWQgYWNyb3NzIGRieC10b29scyBwYWNrYWdlcy5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB7IGlzTG9vcGJhY2tIb3N0LCBNQVhfVENQX1BPUlQsIHVybEJ1aWxkZXIgfSBmcm9tIFwiLi9uZXQudHNcIjtcbmltcG9ydCB7IGlzUmVjb3JkLCB0b0Jvb2xlYW4gfSBmcm9tIFwiLi9vYmplY3QudHNcIjtcbmltcG9ydCB7IHBhcnNlTGlzdCwgdG9JZGVudGlmaWVyV2l0aE9wdGlvbnMsIHRvU2x1ZyB9IGZyb20gXCIuL3N0cmluZy11dGlscy50c1wiO1xuXG5leHBvcnQgeyBNQVhfVENQX1BPUlQgfSBmcm9tIFwiLi9uZXQudHNcIjtcblxuY29uc3QgZW52aXJvbm1lbnROYW1lID0gPFQgZXh0ZW5kcyBzdHJpbmc+KG5hbWU6IFQsIGRlc2NyaXB0aW9uOiBzdHJpbmcpID0+XG4gIHoubGl0ZXJhbChuYW1lKS5kZWZhdWx0KG5hbWUpLmRlc2NyaWJlKGRlc2NyaXB0aW9uKTtcblxuZXhwb3J0IGNvbnN0IERhdGFicmlja3NFbnZpcm9ubWVudE5hbWVzU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBwcm9maWxlOiBlbnZpcm9ubWVudE5hbWUoXCJEQVRBQlJJQ0tTX0NPTkZJR19QUk9GSUxFXCIsIFwiRGF0YWJyaWNrcyBDTEkgcHJvZmlsZSBlbnZpcm9ubWVudC5cIiksXG4gICAgaG9zdDogZW52aXJvbm1lbnROYW1lKFwiREFUQUJSSUNLU19IT1NUXCIsIFwiRGF0YWJyaWNrcyBob3N0IGVudmlyb25tZW50LlwiKSxcbiAgICBhY2NvdW50SWQ6IGVudmlyb25tZW50TmFtZShcIkRBVEFCUklDS1NfQUNDT1VOVF9JRFwiLCBcIkRhdGFicmlja3MgYWNjb3VudCBJRCBlbnZpcm9ubWVudC5cIiksXG4gICAgd29ya3NwYWNlSWQ6IGVudmlyb25tZW50TmFtZShcIkRBVEFCUklDS1NfV09SS1NQQUNFX0lEXCIsIFwiRGF0YWJyaWNrcyB3b3Jrc3BhY2UgSUQgZW52aXJvbm1lbnQuXCIpLFxuICAgIGNvbmZpZ0ZpbGU6IGVudmlyb25tZW50TmFtZShcbiAgICAgIFwiREFUQUJSSUNLU19DT05GSUdfRklMRVwiLFxuICAgICAgXCJEYXRhYnJpY2tzIENMSSBjb25maWcgZmlsZSBlbnZpcm9ubWVudC5cIixcbiAgICApLFxuICAgIGNsaWVudElkOiBlbnZpcm9ubWVudE5hbWUoXCJEQVRBQlJJQ0tTX0NMSUVOVF9JRFwiLCBcIkRhdGFicmlja3MgT0F1dGggY2xpZW50IElEIGVudmlyb25tZW50LlwiKSxcbiAgICBjbGllbnRTZWNyZXQ6IGVudmlyb25tZW50TmFtZShcbiAgICAgIFwiREFUQUJSSUNLU19DTElFTlRfU0VDUkVUXCIsXG4gICAgICBcIkRhdGFicmlja3MgT0F1dGggY2xpZW50IHNlY3JldCBlbnZpcm9ubWVudC5cIixcbiAgICApLFxuICAgIGFjY2Vzc1Rva2VuOiBlbnZpcm9ubWVudE5hbWUoXCJEQVRBQlJJQ0tTX1RPS0VOXCIsIFwiRGF0YWJyaWNrcyBhY2Nlc3MgdG9rZW4gZW52aXJvbm1lbnQuXCIpLFxuICAgIGdyb3VwSWQ6IGVudmlyb25tZW50TmFtZShcIkRBVEFCUklDS1NfR1JPVVBfSURcIiwgXCJEYXRhYnJpY2tzIGdyb3VwIElEIGVudmlyb25tZW50LlwiKSxcbiAgICBhdXRoVHlwZTogZW52aXJvbm1lbnROYW1lKFwiREFUQUJSSUNLU19BVVRIX1RZUEVcIiwgXCJEYXRhYnJpY2tzIGF1dGggdHlwZSBlbnZpcm9ubWVudC5cIiksXG4gICAgYXBwTmFtZTogZW52aXJvbm1lbnROYW1lKFwiREFUQUJSSUNLU19BUFBfTkFNRVwiLCBcIkRhdGFicmlja3MgQXBwIG5hbWUgZW52aXJvbm1lbnQuXCIpLFxuICAgIGFwcFBvcnQ6IGVudmlyb25tZW50TmFtZShcIkRBVEFCUklDS1NfQVBQX1BPUlRcIiwgXCJEYXRhYnJpY2tzIEFwcCBwb3J0IGVudmlyb25tZW50LlwiKSxcbiAgICBsYWtlYmFzZUVuZHBvaW50OiBlbnZpcm9ubWVudE5hbWUoXCJMQUtFQkFTRV9FTkRQT0lOVFwiLCBcIkxha2ViYXNlIGVuZHBvaW50IGVudmlyb25tZW50LlwiKSxcbiAgfSlcbiAgLnN0cmljdCgpXG4gIC5kZXNjcmliZShcIkNhbm9uaWNhbCBEYXRhYnJpY2tzIENMSSwgU0RLLCBBcHBzLCBhbmQgTGFrZWJhc2UgZW52aXJvbm1lbnQgbmFtZXMuXCIpO1xuXG5leHBvcnQgdHlwZSBEYXRhYnJpY2tzRW52aXJvbm1lbnROYW1lcyA9IHoub3V0cHV0PHR5cGVvZiBEYXRhYnJpY2tzRW52aXJvbm1lbnROYW1lc1NjaGVtYT47XG5cbi8qKiBDYW5vbmljYWwgRGF0YWJyaWNrcyBlbnZpcm9ubWVudCBuYW1lcyBkZXJpdmVkIGZyb20gdGhlIG93bmluZyBzY2hlbWEuICovXG5leHBvcnQgY29uc3QgZGF0YWJyaWNrc0Vudmlyb25tZW50TmFtZXMgPSBPYmplY3QuZnJlZXplKERhdGFicmlja3NFbnZpcm9ubWVudE5hbWVzU2NoZW1hLnBhcnNlKHt9KSk7XG5cbmV4cG9ydCBjb25zdCB0Y3BQb3J0U2NoZW1hID0gei5jb2VyY2VcbiAgLm51bWJlcjxudW1iZXI+KClcbiAgLmludCgpXG4gIC5taW4oMSlcbiAgLm1heChNQVhfVENQX1BPUlQpXG4gIC5kZXNjcmliZShcIlRDUCBwb3J0IGZyb20gMSB0aHJvdWdoIDY1NTM1LlwiKTtcblxuZXhwb3J0IGNvbnN0IHRjcFBvcnRPclplcm9TY2hlbWEgPSB6LmNvZXJjZVxuICAubnVtYmVyPG51bWJlcj4oKVxuICAuaW50KClcbiAgLm1pbigwKVxuICAubWF4KE1BWF9UQ1BfUE9SVClcbiAgLmRlc2NyaWJlKFwiVENQIHBvcnQgZnJvbSAwIHRocm91Z2ggNjU1MzUsIHdoZXJlIHplcm8gcmVxdWVzdHMgYXV0b21hdGljIGFsbG9jYXRpb24uXCIpO1xuXG5leHBvcnQgY29uc3Qgbm9ybWFsaXplZFVybFNjaGVtYSA9IHpcbiAgLnN0cmluZygpXG4gIC50cmltKClcbiAgLm1pbigxKVxuICAucmVmaW5lKCh2YWx1ZSkgPT4gdXJsQnVpbGRlcih2YWx1ZSkgIT09IHVuZGVmaW5lZCwge1xuICAgIG1lc3NhZ2U6IFwiRXhwZWN0ZWQgYSB2YWxpZCBVUkwgb3IgaG9zdC5cIixcbiAgfSlcbiAgLm92ZXJ3cml0ZShub3JtYWxpemVVcmwpXG4gIC5kZXNjcmliZShcIlVSTCBub3JtYWxpemVkIHRocm91Z2ggdGhlIHNoYXJlZCBVUkwgYnVpbGRlci5cIik7XG5cbmNvbnN0IGRhdGFicmlja3NUZXh0ID0gKGRlc2NyaXB0aW9uOiBzdHJpbmcpID0+XG4gIHouc3RyaW5nKCkudHJpbSgpLm1pbigxKS5vcHRpb25hbCgpLmRlc2NyaWJlKGRlc2NyaXB0aW9uKTtcbmNvbnN0IGRhdGFicmlja3NPcHRpb25NZXRhID0gKGVudjogc3RyaW5nLCBmbGFnID0gdHJ1ZSkgPT4gKHtcbiAgZW52LFxuICBmbGFnLFxuICBoZWxwRGVmYXVsdDogZmFsc2UsXG59KTtcblxuZXhwb3J0IGNvbnN0IERhdGFicmlja3NPcHRpb25zU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBwcm9maWxlOiBkYXRhYnJpY2tzVGV4dChcIkRhdGFicmlja3MgQ0xJIHByb2ZpbGUuXCIpLm1ldGEoXG4gICAgICBkYXRhYnJpY2tzT3B0aW9uTWV0YShkYXRhYnJpY2tzRW52aXJvbm1lbnROYW1lcy5wcm9maWxlKSxcbiAgICApLFxuICAgIGhvc3Q6IG5vcm1hbGl6ZWRVcmxTY2hlbWFcbiAgICAgIC5vcHRpb25hbCgpXG4gICAgICAuZGVzY3JpYmUoXCJEYXRhYnJpY2tzIGhvc3QuXCIpXG4gICAgICAubWV0YShkYXRhYnJpY2tzT3B0aW9uTWV0YShkYXRhYnJpY2tzRW52aXJvbm1lbnROYW1lcy5ob3N0LCBmYWxzZSkpLFxuICAgIGFjY291bnRJZDogZGF0YWJyaWNrc1RleHQoXCJEYXRhYnJpY2tzIGFjY291bnQgSUQuXCIpLm1ldGEoXG4gICAgICBkYXRhYnJpY2tzT3B0aW9uTWV0YShkYXRhYnJpY2tzRW52aXJvbm1lbnROYW1lcy5hY2NvdW50SWQsIGZhbHNlKSxcbiAgICApLFxuICAgIHdvcmtzcGFjZUlkOiBkYXRhYnJpY2tzVGV4dChcIkRhdGFicmlja3Mgd29ya3NwYWNlIElELlwiKS5tZXRhKFxuICAgICAgZGF0YWJyaWNrc09wdGlvbk1ldGEoZGF0YWJyaWNrc0Vudmlyb25tZW50TmFtZXMud29ya3NwYWNlSWQsIGZhbHNlKSxcbiAgICApLFxuICAgIGNvbmZpZ0ZpbGU6IGRhdGFicmlja3NUZXh0KFwiRGF0YWJyaWNrcyBDTEkgY29uZmlnIGZpbGUuXCIpLm1ldGEoXG4gICAgICBkYXRhYnJpY2tzT3B0aW9uTWV0YShkYXRhYnJpY2tzRW52aXJvbm1lbnROYW1lcy5jb25maWdGaWxlLCBmYWxzZSksXG4gICAgKSxcbiAgICBjbGllbnRJZDogZGF0YWJyaWNrc1RleHQoXCJEYXRhYnJpY2tzIE9BdXRoIGNsaWVudCBJRC5cIikubWV0YShcbiAgICAgIGRhdGFicmlja3NPcHRpb25NZXRhKGRhdGFicmlja3NFbnZpcm9ubWVudE5hbWVzLmNsaWVudElkLCBmYWxzZSksXG4gICAgKSxcbiAgICBjbGllbnRTZWNyZXQ6IGRhdGFicmlja3NUZXh0KFwiRGF0YWJyaWNrcyBPQXV0aCBjbGllbnQgc2VjcmV0LlwiKS5tZXRhKFxuICAgICAgZGF0YWJyaWNrc09wdGlvbk1ldGEoZGF0YWJyaWNrc0Vudmlyb25tZW50TmFtZXMuY2xpZW50U2VjcmV0LCBmYWxzZSksXG4gICAgKSxcbiAgICBhY2Nlc3NUb2tlbjogZGF0YWJyaWNrc1RleHQoXCJEYXRhYnJpY2tzIGFjY2VzcyB0b2tlbi5cIikubWV0YShcbiAgICAgIGRhdGFicmlja3NPcHRpb25NZXRhKGRhdGFicmlja3NFbnZpcm9ubWVudE5hbWVzLmFjY2Vzc1Rva2VuLCBmYWxzZSksXG4gICAgKSxcbiAgICBncm91cElkOiBkYXRhYnJpY2tzVGV4dChcIkRhdGFicmlja3MgZ3JvdXAgSUQuXCIpLm1ldGEoXG4gICAgICBkYXRhYnJpY2tzT3B0aW9uTWV0YShkYXRhYnJpY2tzRW52aXJvbm1lbnROYW1lcy5ncm91cElkLCBmYWxzZSksXG4gICAgKSxcbiAgICBhdXRoVHlwZTogZGF0YWJyaWNrc1RleHQoXCJEYXRhYnJpY2tzIGF1dGhlbnRpY2F0aW9uIHR5cGUuXCIpLm1ldGEoXG4gICAgICBkYXRhYnJpY2tzT3B0aW9uTWV0YShkYXRhYnJpY2tzRW52aXJvbm1lbnROYW1lcy5hdXRoVHlwZSwgZmFsc2UpLFxuICAgICksXG4gICAgYXBwTmFtZTogZGF0YWJyaWNrc1RleHQoXCJEYXRhYnJpY2tzIEFwcCBuYW1lLlwiKS5tZXRhKFxuICAgICAgZGF0YWJyaWNrc09wdGlvbk1ldGEoZGF0YWJyaWNrc0Vudmlyb25tZW50TmFtZXMuYXBwTmFtZSwgZmFsc2UpLFxuICAgICksXG4gICAgYXBwUG9ydDogdGNwUG9ydFNjaGVtYVxuICAgICAgLm9wdGlvbmFsKClcbiAgICAgIC5kZXNjcmliZShcIkRhdGFicmlja3MgQXBwIHBvcnQuXCIpXG4gICAgICAubWV0YShkYXRhYnJpY2tzT3B0aW9uTWV0YShkYXRhYnJpY2tzRW52aXJvbm1lbnROYW1lcy5hcHBQb3J0LCBmYWxzZSkpLFxuICAgIGxha2ViYXNlRW5kcG9pbnQ6IGRhdGFicmlja3NUZXh0KFwiTGFrZWJhc2UgZW5kcG9pbnQuXCIpLm1ldGEoXG4gICAgICBkYXRhYnJpY2tzT3B0aW9uTWV0YShkYXRhYnJpY2tzRW52aXJvbm1lbnROYW1lcy5sYWtlYmFzZUVuZHBvaW50LCBmYWxzZSksXG4gICAgKSxcbiAgfSlcbiAgLnN0cmljdCgpXG4gIC5kZXNjcmliZShcIkNvbW1vbiBEYXRhYnJpY2tzIENMSSwgU0RLLCBBcHBzLCBhbmQgTGFrZWJhc2Ugb3B0aW9ucy5cIik7XG5cbmV4cG9ydCB0eXBlIERhdGFicmlja3NPcHRpb25zID0gei5pbnB1dDx0eXBlb2YgRGF0YWJyaWNrc09wdGlvbnNTY2hlbWE+O1xuXG4vKiogS2V5IGZvcm1hdCBlbWl0dGVkIGJ5IHtAbGluayBzZXJpYWxpemVPcHRzfS4gKi9cbmV4cG9ydCB0eXBlIE9wdGlvblNlcmlhbGl6YXRpb25Gb3JtYXQgPSBcImZsYWdcIiB8IFwiZW52XCI7XG5cbmludGVyZmFjZSBPcHRpb25Qcm9wZXJ0eSB7XG4gIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuICByZWFkb25seSB0eXBlPzogc3RyaW5nO1xuICByZWFkb25seSBlbnY/OiBzdHJpbmcgfCByZWFkb25seSBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgZmxhZz86IGJvb2xlYW47XG59XG5cbi8qKiBTZXJpYWxpemUgY29tcGxldGUgcGFyc2VkIG9wdGlvbnMgYXMgSlNPTiBrZXllZCBieSBmbGFncyBvciBlbnZpcm9ubWVudCBuYW1lcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVPcHRzPFQgZXh0ZW5kcyB6LlpvZFJhd1NoYXBlPihcbiAgc2NoZW1hOiB6LlpvZE9iamVjdDxUPixcbiAgdmFsdWVzOiB6LmlucHV0PHouWm9kT2JqZWN0PFQ+PixcbiAgZm9ybWF0OiBPcHRpb25TZXJpYWxpemF0aW9uRm9ybWF0LFxuKTogc3RyaW5nIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHNlcmlhbGl6ZWRPcHRzKHNjaGVtYSwgdmFsdWVzLCBmb3JtYXQpLCBudWxsLCAyKTtcbn1cblxuLyoqIFNlcmlhbGl6ZSBjb21wbGV0ZSBwYXJzZWQgb3B0aW9ucyBhcyBhIHByb2Nlc3MgZW52aXJvbm1lbnQgbWFwLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZU9wdHNFbnZpcm9ubWVudDxUIGV4dGVuZHMgei5ab2RSYXdTaGFwZT4oXG4gIHNjaGVtYTogei5ab2RPYmplY3Q8VD4sXG4gIHZhbHVlczogei5pbnB1dDx6LlpvZE9iamVjdDxUPj4sXG4pOiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiB7XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMoc2VyaWFsaXplZE9wdHMoc2NoZW1hLCB2YWx1ZXMsIFwiZW52XCIpKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gW1xuICAgICAga2V5LFxuICAgICAgZW52aXJvbm1lbnRPcHRpb25WYWx1ZSh2YWx1ZSksXG4gICAgXSksXG4gICk7XG59XG5cbmZ1bmN0aW9uIHNlcmlhbGl6ZWRPcHRzPFQgZXh0ZW5kcyB6LlpvZFJhd1NoYXBlPihcbiAgc2NoZW1hOiB6LlpvZE9iamVjdDxUPixcbiAgdmFsdWVzOiB6LmlucHV0PHouWm9kT2JqZWN0PFQ+PixcbiAgZm9ybWF0OiBPcHRpb25TZXJpYWxpemF0aW9uRm9ybWF0LFxuKTogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcbiAgY29uc3QgcGFyc2VkID0gc2NoZW1hLnBhcnNlKHZhbHVlcykgYXMgUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xuICBjb25zdCBlbnRyaWVzID0gb3B0aW9uUHJvcGVydGllcyhzY2hlbWEpLmZsYXRNYXAoKHByb3BlcnR5KSA9PiB7XG4gICAgaWYgKGZvcm1hdCA9PT0gXCJmbGFnXCIgJiYgcHJvcGVydHkuZmxhZyA9PT0gZmFsc2UpIHJldHVybiBbXTtcbiAgICBjb25zdCBrZXkgPVxuICAgICAgZm9ybWF0ID09PSBcImZsYWdcIlxuICAgICAgICA/IGAtLSR7dG9TbHVnKHByb3BlcnR5LmtleSl9YFxuICAgICAgICA6IChvcHRpb25FbnZpcm9ubWVudE5hbWVzKHByb3BlcnR5LmtleSwgcHJvcGVydHkuZW52KVswXSA/PyBcIlwiKTtcbiAgICBpZiAoIWtleSkgcmV0dXJuIFtdO1xuICAgIGNvbnN0IHZhbHVlID0gcGFyc2VkW3Byb3BlcnR5LmtleV07XG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyBbXSA6IFtba2V5LCBzZXJpYWxpemVkT3B0aW9uVmFsdWUodmFsdWUpXSBhcyBjb25zdF07XG4gIH0pO1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKGVudHJpZXMpO1xufVxuXG5jb25zdCBvcHRpb25hbFRleHQgPSAoZGVzY3JpcHRpb246IHN0cmluZywgZW52OiBzdHJpbmcpID0+XG4gIHouc3RyaW5nKCkudHJpbSgpLm1pbigxKS5vcHRpb25hbCgpLmRlc2NyaWJlKGRlc2NyaXB0aW9uKS5tZXRhKHsgZW52LCBmbGFnOiBmYWxzZSB9KTtcblxuZXhwb3J0IGNvbnN0IExha2ViYXNlT3B0aW9uc1NjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgbGFrZWJhc2VFbmRwb2ludDogb3B0aW9uYWxUZXh0KFxuICAgICAgXCJMYWtlYmFzZSBwcm9qZWN0LCByZXNvdXJjZSBwYXRoLCBob3N0LCBvciBVUkwuXCIsXG4gICAgICBkYXRhYnJpY2tzRW52aXJvbm1lbnROYW1lcy5sYWtlYmFzZUVuZHBvaW50LFxuICAgICksXG4gIH0pXG4gIC5zdHJpY3QoKVxuICAuZGVzY3JpYmUoXCJDb21tb24gTGFrZWJhc2Ugb3B0aW9ucy5cIik7XG5cbmV4cG9ydCB0eXBlIExha2ViYXNlT3B0aW9ucyA9IHouaW5wdXQ8dHlwZW9mIExha2ViYXNlT3B0aW9uc1NjaGVtYT47XG5cbi8qKiBFeHBsaWNpdCBvcHRpb24gdmFsdWVzIG9yIGVudmlyb25tZW50IGVudHJpZXMgY29uc3VtZWQgYnkgb3B0aW9uIHBhcnNpbmcgaGVscGVycy4gKi9cbmV4cG9ydCB0eXBlIE9wdGlvblZhbHVlTWFwID0gUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHwgbnVsbDtcblxuLyoqIFBhcnNlIG9ubHkgc3VwcGxpZWQgZmxhZyBhbmQgZW52aXJvbm1lbnQgdmFsdWVzIHRocm91Z2ggYW4gb3duaW5nIFpvZCBvYmplY3Qgc2NoZW1hLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlT3B0czxUIGV4dGVuZHMgei5ab2RSYXdTaGFwZT4oXG4gIHNjaGVtYTogei5ab2RPYmplY3Q8VD4sXG4gIGZsYWdzOiBPcHRpb25WYWx1ZU1hcCA9IG51bGwsXG4gIGVudmlyb25tZW50OiBPcHRpb25WYWx1ZU1hcCA9IG51bGwsXG4pOiBQYXJ0aWFsPHoub3V0cHV0PHouWm9kT2JqZWN0PFQ+Pj4ge1xuICBjb25zdCBjb25maWd1cmVkID0gb3B0aW9uVmFsdWVzKHNjaGVtYSwgZmxhZ3MsIGVudmlyb25tZW50KTtcbiAgY29uc3QgcGFyc2VkID0gc2NoZW1hLnBhcnNlKGNvbmZpZ3VyZWQpO1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5rZXlzKGNvbmZpZ3VyZWQpLm1hcCgoa2V5KSA9PiBba2V5LCBwYXJzZWRba2V5IGFzIGtleW9mIHR5cGVvZiBwYXJzZWRdXSksXG4gICkgYXMgUGFydGlhbDx6Lm91dHB1dDx6LlpvZE9iamVjdDxUPj4+O1xufVxuXG4vKiogU3VwcG9ydGVkIGxpc3RlbmVyIHRyYW5zcG9ydCBzY2hlbWVzLiAqL1xuZXhwb3J0IHR5cGUgTGlzdGVuU2NoZW1lID0gXCJ0Y3BcIiB8IFwidW5peFwiO1xuXG4vKiogVENQIGxpc3RlbmVyIHJldHVybmVkIGJ5IHtAbGluayBsaXN0ZW5BZGRyZXNzU2NoZW1hfS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGNwTGlzdGVuQWRkcmVzcyB7XG4gIHJlYWRvbmx5IHNjaGVtZTogXCJ0Y3BcIjtcbiAgcmVhZG9ubHkgaG9zdDogc3RyaW5nO1xuICByZWFkb25seSBwb3J0OiBudW1iZXI7XG59XG5cbi8qKiBVbml4LWRvbWFpbiBsaXN0ZW5lciByZXR1cm5lZCBieSB7QGxpbmsgbGlzdGVuQWRkcmVzc1NjaGVtYX0uICovXG5leHBvcnQgaW50ZXJmYWNlIFVuaXhMaXN0ZW5BZGRyZXNzIHtcbiAgcmVhZG9ubHkgc2NoZW1lOiBcInVuaXhcIjtcbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xufVxuXG4vKiogVHJhbnNwb3J0LWF3YXJlIGxpc3RlbmVyIGFkZHJlc3MuICovXG5leHBvcnQgdHlwZSBMaXN0ZW5BZGRyZXNzID0gVGNwTGlzdGVuQWRkcmVzcyB8IFVuaXhMaXN0ZW5BZGRyZXNzO1xuXG4vKiogRGVmYXVsdHMgYW5kIHZhbGlkYXRpb24gcG9saWN5IGZvciB7QGxpbmsgbGlzdGVuQWRkcmVzc1NjaGVtYX0uICovXG5leHBvcnQgaW50ZXJmYWNlIExpc3RlbkFkZHJlc3NPcHRpb25zIHtcbiAgcmVhZG9ubHkgcG9ydDogbnVtYmVyO1xuICByZWFkb25seSBob3N0Pzogc3RyaW5nO1xuICByZWFkb25seSBsb29wYmFjaz86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHNjaGVtZT86IExpc3RlblNjaGVtZTtcbiAgcmVhZG9ubHkgc2NoZW1lcz86IHJlYWRvbmx5IExpc3RlblNjaGVtZVtdO1xuICByZWFkb25seSB3aXRoRGVmYXVsdD86IGJvb2xlYW47XG59XG5cbi8qKiBSYXcgbGlzdGVuZXIgaW5wdXQgYWNjZXB0ZWQgYmVmb3JlIHRyYW5zcG9ydC1hd2FyZSBub3JtYWxpemF0aW9uLiAqL1xuZXhwb3J0IHR5cGUgTGlzdGVuQWRkcmVzc0lucHV0ID0gTGlzdGVuQWRkcmVzcyB8IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZDtcblxuZXhwb3J0IGZ1bmN0aW9uIGxpc3RlbkFkZHJlc3NTY2hlbWEoXG4gIG9wdGlvbnM6IExpc3RlbkFkZHJlc3NPcHRpb25zICYge1xuICAgIHJlYWRvbmx5IHNjaGVtZXM6IHJlYWRvbmx5IFtcInRjcFwiLCBcInVuaXhcIl07XG4gICAgcmVhZG9ubHkgd2l0aERlZmF1bHQ6IGZhbHNlO1xuICB9LFxuKTogei5ab2RUeXBlPExpc3RlbkFkZHJlc3MsIHVua25vd24+O1xuXG5leHBvcnQgZnVuY3Rpb24gbGlzdGVuQWRkcmVzc1NjaGVtYShcbiAgb3B0aW9uczogTGlzdGVuQWRkcmVzc09wdGlvbnMgJiB7IHJlYWRvbmx5IHNjaGVtZXM6IHJlYWRvbmx5IFtcInRjcFwiLCBcInVuaXhcIl0gfSxcbik6IHouWm9kRGVmYXVsdDx6LlpvZFR5cGU8TGlzdGVuQWRkcmVzcywgdW5rbm93bj4+O1xuXG5leHBvcnQgZnVuY3Rpb24gbGlzdGVuQWRkcmVzc1NjaGVtYShcbiAgb3B0aW9uczogTGlzdGVuQWRkcmVzc09wdGlvbnMgJiB7IHJlYWRvbmx5IHdpdGhEZWZhdWx0OiBmYWxzZSB9LFxuKTogei5ab2RUeXBlPFRjcExpc3RlbkFkZHJlc3MsIHVua25vd24+O1xuXG5leHBvcnQgZnVuY3Rpb24gbGlzdGVuQWRkcmVzc1NjaGVtYShcbiAgb3B0aW9uczogTGlzdGVuQWRkcmVzc09wdGlvbnMsXG4pOiB6LlpvZERlZmF1bHQ8ei5ab2RUeXBlPFRjcExpc3RlbkFkZHJlc3MsIHVua25vd24+PjtcblxuLyoqIEJ1aWxkIGEgdHJhbnNwb3J0LWF3YXJlIGxpc3RlbmVyIHNjaGVtYS4gQmFyZSBhZGRyZXNzZXMgdXNlIHRoZSBjb25maWd1cmVkIGRlZmF1bHQgc2NoZW1lLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxpc3RlbkFkZHJlc3NTY2hlbWEoXG4gIG9wdGlvbnM6IExpc3RlbkFkZHJlc3NPcHRpb25zLFxuKTogei5ab2RUeXBlPExpc3RlbkFkZHJlc3MsIHVua25vd24+IHwgei5ab2REZWZhdWx0PHouWm9kVHlwZTxMaXN0ZW5BZGRyZXNzLCB1bmtub3duPj4ge1xuICBjb25zdCBkZWZhdWx0czogVGNwTGlzdGVuQWRkcmVzcyA9IHtcbiAgICBzY2hlbWU6IFwidGNwXCIsXG4gICAgaG9zdDogb3B0aW9ucy5ob3N0ID8/IFwibG9jYWxob3N0XCIsXG4gICAgcG9ydDogb3B0aW9ucy5wb3J0LFxuICB9O1xuICBjb25zdCBhbGxvd2VkID0gbmV3IFNldDxMaXN0ZW5TY2hlbWU+KG9wdGlvbnMuc2NoZW1lcyA/PyBbXCJ0Y3BcIl0pO1xuICBjb25zdCBzY2hlbWEgPSB6XG4gICAgLnByZXByb2Nlc3MoXG4gICAgICAodmFsdWUpID0+IHBhcnNlTGlzdGVuQWRkcmVzcyh2YWx1ZSwgZGVmYXVsdHMsIG9wdGlvbnMuc2NoZW1lID8/IFwidGNwXCIpLFxuICAgICAgei5kaXNjcmltaW5hdGVkVW5pb24oXCJzY2hlbWVcIiwgW1xuICAgICAgICB6XG4gICAgICAgICAgLm9iamVjdCh7XG4gICAgICAgICAgICBzY2hlbWU6IHoubGl0ZXJhbChcInRjcFwiKSxcbiAgICAgICAgICAgIGhvc3Q6IHouc3RyaW5nKCkudHJpbSgpLnRvTG93ZXJDYXNlKCkubWluKDEpLmRlZmF1bHQoZGVmYXVsdHMuaG9zdCksXG4gICAgICAgICAgICBwb3J0OiB0Y3BQb3J0T3JaZXJvU2NoZW1hLmRlZmF1bHQoZGVmYXVsdHMucG9ydCksXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuc3RyaWN0KCksXG4gICAgICAgIHpcbiAgICAgICAgICAub2JqZWN0KHtcbiAgICAgICAgICAgIHNjaGVtZTogei5saXRlcmFsKFwidW5peFwiKSxcbiAgICAgICAgICAgIHBhdGg6IHouc3RyaW5nKCkudHJpbSgpLm1pbigxKSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zdHJpY3QoKSxcbiAgICAgIF0pLFxuICAgIClcbiAgICAucmVmaW5lKChhZGRyZXNzKSA9PiBhbGxvd2VkLmhhcyhhZGRyZXNzLnNjaGVtZSksIFwiTGlzdGVuZXIgc2NoZW1lIGlzIG5vdCBhbGxvd2VkLlwiKVxuICAgIC5yZWZpbmUoXG4gICAgICAoYWRkcmVzcykgPT4gYWRkcmVzcy5zY2hlbWUgIT09IFwidGNwXCIgfHwgIW9wdGlvbnMubG9vcGJhY2sgfHwgaXNMb29wYmFja0hvc3QoYWRkcmVzcy5ob3N0KSxcbiAgICAgIFwiTGlzdGVuZXIgaG9zdCBtdXN0IGJlIGxvb3BiYWNrLlwiLFxuICAgIClcbiAgICAuZGVzY3JpYmUoXCJUQ1Agb3IgVW5peC1kb21haW4gbGlzdGVuZXIgYWRkcmVzcy5cIikgYXMgei5ab2RUeXBlPExpc3RlbkFkZHJlc3MsIHVua25vd24+O1xuICByZXR1cm4gb3B0aW9ucy53aXRoRGVmYXVsdCA9PT0gZmFsc2UgPyBzY2hlbWEgOiBzY2hlbWEuZGVmYXVsdChkZWZhdWx0cyk7XG59XG5cbi8qKiBSZW5kZXIgYSBsaXN0ZW5lciBhZGRyZXNzIGFzIGEgYHRjcDovL2Agb3IgYHVuaXg6Ly9gIFVSTC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRMaXN0ZW5BZGRyZXNzKGFkZHJlc3M6IExpc3RlbkFkZHJlc3MpOiBzdHJpbmcge1xuICBpZiAoYWRkcmVzcy5zY2hlbWUgPT09IFwidW5peFwiKSB7XG4gICAgcmV0dXJuIGB1bml4Oi8vJHthZGRyZXNzLnBhdGguc3RhcnRzV2l0aChcIi9cIikgPyBcIlwiIDogXCIvXCJ9JHthZGRyZXNzLnBhdGh9YDtcbiAgfVxuICBjb25zdCBob3N0ID0gYWRkcmVzcy5ob3N0LmluY2x1ZGVzKFwiOlwiKSA/IGBbJHthZGRyZXNzLmhvc3R9XWAgOiBhZGRyZXNzLmhvc3Q7XG4gIHJldHVybiBgdGNwOi8vJHtob3N0fToke2FkZHJlc3MucG9ydH1gO1xufVxuXG5mdW5jdGlvbiBwYXJzZUxpc3RlbkFkZHJlc3MoXG4gIHZhbHVlOiB1bmtub3duLFxuICBkZWZhdWx0czogVGNwTGlzdGVuQWRkcmVzcyxcbiAgZGVmYXVsdFNjaGVtZTogTGlzdGVuU2NoZW1lLFxuKTogdW5rbm93biB7XG4gIGlmIChpc1JlY29yZCh2YWx1ZSkgJiYgdmFsdWUuc2NoZW1lID09PSB1bmRlZmluZWQpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlLmhvc3QgPT09IFwic3RyaW5nXCIgJiYgdmFsdWUucG9ydCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4geyAuLi52YWx1ZSwgc2NoZW1lOiBcInRjcFwiIH07XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUucGF0aCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIHsgLi4udmFsdWUsIHNjaGVtZTogXCJ1bml4XCIgfTtcbiAgICB9XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikge1xuICAgIHJldHVybiBkZWZhdWx0U2NoZW1lID09PSBcInRjcFwiXG4gICAgICA/IHsgc2NoZW1lOiBcInRjcFwiLCBob3N0OiBkZWZhdWx0cy5ob3N0LCBwb3J0OiB2YWx1ZSB9XG4gICAgICA6IHsgc2NoZW1lOiBcInVuaXhcIiwgcGF0aDogU3RyaW5nKHZhbHVlKSB9O1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIpIHJldHVybiB2YWx1ZTtcbiAgY29uc3QgdGV4dCA9IHZhbHVlLnRyaW0oKTtcbiAgaWYgKHRleHQuc3RhcnRzV2l0aChcInVuaXg6Ly9cIikpIHtcbiAgICBjb25zdCBwYXRoID0gdGV4dC5zbGljZShcInVuaXg6Ly9cIi5sZW5ndGgpO1xuICAgIHJldHVybiB7IHNjaGVtZTogXCJ1bml4XCIsIHBhdGg6IHBhdGguc3RhcnRzV2l0aChcIi9cIikgPyBwYXRoIDogYC8ke3BhdGh9YCB9O1xuICB9XG4gIGNvbnN0IHRjcCA9IHRleHQuc3RhcnRzV2l0aChcInRjcDovL1wiKSA/IHRleHQuc2xpY2UoXCJ0Y3A6Ly9cIi5sZW5ndGgpIDogdGV4dDtcbiAgaWYgKGRlZmF1bHRTY2hlbWUgPT09IFwidW5peFwiICYmICF0ZXh0LnN0YXJ0c1dpdGgoXCJ0Y3A6Ly9cIikpIHtcbiAgICByZXR1cm4geyBzY2hlbWU6IFwidW5peFwiLCBwYXRoOiB0ZXh0IH07XG4gIH1cbiAgaWYgKC9eXFxkKyQvLnRlc3QodGNwKSkgcmV0dXJuIHsgc2NoZW1lOiBcInRjcFwiLCBob3N0OiBkZWZhdWx0cy5ob3N0LCBwb3J0OiB0Y3AgfTtcbiAgaWYgKC9eOlxcZCskLy50ZXN0KHRjcCkpIHtcbiAgICByZXR1cm4geyBzY2hlbWU6IFwidGNwXCIsIGhvc3Q6IGRlZmF1bHRzLmhvc3QsIHBvcnQ6IHRjcC5zbGljZSgxKSB9O1xuICB9XG4gIGNvbnN0IGJyYWNrZXRlZCA9IHRjcC5tYXRjaCgvXlxcWyhbXlxcXV0rKVxcXSg/OjooXFxkKykpPyQvKTtcbiAgaWYgKGJyYWNrZXRlZCkge1xuICAgIHJldHVybiB7XG4gICAgICBzY2hlbWU6IFwidGNwXCIsXG4gICAgICBob3N0OiBicmFja2V0ZWRbMV0sXG4gICAgICBwb3J0OiBicmFja2V0ZWRbMl0gPz8gZGVmYXVsdHMucG9ydCxcbiAgICB9O1xuICB9XG4gIGNvbnN0IHNlcGFyYXRvciA9IHRjcC5sYXN0SW5kZXhPZihcIjpcIik7XG4gIGlmIChzZXBhcmF0b3IgPiAwICYmICF0Y3Auc2xpY2UoMCwgc2VwYXJhdG9yKS5pbmNsdWRlcyhcIjpcIikpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2NoZW1lOiBcInRjcFwiLFxuICAgICAgaG9zdDogdGNwLnNsaWNlKDAsIHNlcGFyYXRvciksXG4gICAgICBwb3J0OiB0Y3Auc2xpY2Uoc2VwYXJhdG9yICsgMSksXG4gICAgfTtcbiAgfVxuICByZXR1cm4geyBzY2hlbWU6IFwidGNwXCIsIGhvc3Q6IHRjcCB8fCBkZWZhdWx0cy5ob3N0LCBwb3J0OiBkZWZhdWx0cy5wb3J0IH07XG59XG5cbmZ1bmN0aW9uIG9wdGlvblByb3BlcnRpZXMoc2NoZW1hOiB6LlpvZE9iamVjdDx6LlpvZFJhd1NoYXBlPik6IE9wdGlvblByb3BlcnR5W10ge1xuICBjb25zdCBkb2N1bWVudCA9IHoudG9KU09OU2NoZW1hKHNjaGVtYSk7XG4gIGlmICghaXNSZWNvcmQoZG9jdW1lbnQucHJvcGVydGllcykpIHJldHVybiBbXTtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGRvY3VtZW50LnByb3BlcnRpZXMpLmZsYXRNYXAoKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgIGlmICghaXNSZWNvcmQodmFsdWUpKSByZXR1cm4gW107XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAga2V5LFxuICAgICAgICB0eXBlOiB0eXBlb2YgdmFsdWUudHlwZSA9PT0gXCJzdHJpbmdcIiA/IHZhbHVlLnR5cGUgOiB1bmRlZmluZWQsXG4gICAgICAgIGVudjpcbiAgICAgICAgICB0eXBlb2YgdmFsdWUuZW52ID09PSBcInN0cmluZ1wiIHx8IEFycmF5LmlzQXJyYXkodmFsdWUuZW52KVxuICAgICAgICAgICAgPyAodmFsdWUuZW52IGFzIHN0cmluZyB8IHJlYWRvbmx5IHN0cmluZ1tdKVxuICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGZsYWc6IHR5cGVvZiB2YWx1ZS5mbGFnID09PSBcImJvb2xlYW5cIiA/IHZhbHVlLmZsYWcgOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgIF07XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBzZXJpYWxpemVkT3B0aW9uVmFsdWUodmFsdWU6IHVua25vd24pOiB1bmtub3duIHtcbiAgaWYgKGlzUmVjb3JkKHZhbHVlKSAmJiB2YWx1ZS5zY2hlbWUgPT09IFwidGNwXCIpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlLmhvc3QgPT09IFwic3RyaW5nXCIgJiYgdHlwZW9mIHZhbHVlLnBvcnQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIHJldHVybiBmb3JtYXRMaXN0ZW5BZGRyZXNzKHsgc2NoZW1lOiBcInRjcFwiLCBob3N0OiB2YWx1ZS5ob3N0LCBwb3J0OiB2YWx1ZS5wb3J0IH0pO1xuICAgIH1cbiAgfVxuICBpZiAoaXNSZWNvcmQodmFsdWUpICYmIHZhbHVlLnNjaGVtZSA9PT0gXCJ1bml4XCIgJiYgdHlwZW9mIHZhbHVlLnBhdGggPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gZm9ybWF0TGlzdGVuQWRkcmVzcyh7IHNjaGVtZTogXCJ1bml4XCIsIHBhdGg6IHZhbHVlLnBhdGggfSk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiBlbnZpcm9ubWVudE9wdGlvblZhbHVlKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gdmFsdWUubWFwKFN0cmluZykuam9pbihcIixcIik7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGwpIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gIHJldHVybiBTdHJpbmcodmFsdWUpO1xufVxuXG5mdW5jdGlvbiBvcHRpb25WYWx1ZXM8VCBleHRlbmRzIHouWm9kUmF3U2hhcGU+KFxuICBzY2hlbWE6IHouWm9kT2JqZWN0PFQ+LFxuICB2YWx1ZXM6IE9wdGlvblZhbHVlTWFwLFxuICBlbnZpcm9ubWVudDogT3B0aW9uVmFsdWVNYXAsXG4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGNvbnN0IGRvY3VtZW50ID0gei50b0pTT05TY2hlbWEoc2NoZW1hKTtcbiAgY29uc3QgcHJvcGVydGllcyA9IGlzUmVjb3JkKGRvY3VtZW50LnByb3BlcnRpZXMpID8gZG9jdW1lbnQucHJvcGVydGllcyA6IHt9O1xuICBjb25zdCBjb25maWd1cmVkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICBmb3IgKGNvbnN0IFtrZXksIHByb3BlcnR5XSBvZiBPYmplY3QuZW50cmllcyhwcm9wZXJ0aWVzKSkge1xuICAgIGlmICghaXNSZWNvcmQocHJvcGVydHkpKSBjb250aW51ZTtcbiAgICBjb25zdCBleHBsaWNpdCA9IGZpcnN0T3B0aW9uVmFsdWUodmFsdWVzLCBba2V5LCBgLS0ke3RvU2x1ZyhrZXkpfWBdKTtcbiAgICBpZiAoZXhwbGljaXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uZmlndXJlZFtrZXldID0gb3B0aW9uRW52aXJvbm1lbnRWYWx1ZShwcm9wZXJ0eS50eXBlLCBleHBsaWNpdCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgbmFtZXMgPSBvcHRpb25FbnZpcm9ubWVudE5hbWVzKGtleSwgcHJvcGVydHkuZW52KTtcbiAgICBjb25zdCBzb3VyY2VkID0gZmlyc3RPcHRpb25WYWx1ZShlbnZpcm9ubWVudCwgbmFtZXMpO1xuICAgIGlmIChzb3VyY2VkID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuICAgIGNvbmZpZ3VyZWRba2V5XSA9IG9wdGlvbkVudmlyb25tZW50VmFsdWUocHJvcGVydHkudHlwZSwgc291cmNlZCk7XG4gIH1cbiAgcmV0dXJuIGNvbmZpZ3VyZWQ7XG59XG5cbmZ1bmN0aW9uIG9wdGlvbkVudmlyb25tZW50TmFtZXMoa2V5OiBzdHJpbmcsIGNvbmZpZ3VyZWQ6IHVua25vd24pOiBzdHJpbmdbXSB7XG4gIGlmICh0eXBlb2YgY29uZmlndXJlZCA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIFtjb25maWd1cmVkXTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoY29uZmlndXJlZCkpIHtcbiAgICByZXR1cm4gY29uZmlndXJlZC5maWx0ZXIoKHZhbHVlKTogdmFsdWUgaXMgc3RyaW5nID0+IHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIik7XG4gIH1cbiAgcmV0dXJuIFt0b0lkZW50aWZpZXJXaXRoT3B0aW9ucyh7IGRlbGltaXRlcjogXCJfXCIgfSwga2V5KS50b1VwcGVyQ2FzZSgpXTtcbn1cblxuZnVuY3Rpb24gb3B0aW9uRW52aXJvbm1lbnRWYWx1ZSh0eXBlOiB1bmtub3duLCB2YWx1ZTogdW5rbm93bik6IHVua25vd24ge1xuICBpZiAodHlwZSA9PT0gXCJib29sZWFuXCIpIHJldHVybiB0b0Jvb2xlYW4odmFsdWUpID8/IHZhbHVlO1xuICBpZiAodHlwZSA9PT0gXCJhcnJheVwiICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIHBhcnNlTGlzdCh2YWx1ZSk7XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gZmlyc3RPcHRpb25WYWx1ZShzb3VyY2U6IE9wdGlvblZhbHVlTWFwLCBrZXlzOiByZWFkb25seSBzdHJpbmdbXSk6IHVua25vd24gfCB1bmRlZmluZWQge1xuICBpZiAoIXNvdXJjZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgIGNvbnN0IHZhbHVlID0gc291cmNlW2tleV07XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IFwiXCIpIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVVcmwodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHVybCA9IHVybEJ1aWxkZXIodmFsdWUpO1xuICBpZiAoIXVybCkgcmV0dXJuIHZhbHVlO1xuICBjb25zdCBub3JtYWxpemVkID0gdXJsLnRvU3RyaW5nKCk7XG4gIHJldHVybiB1cmwucGF0aG5hbWUgPT09IFwiL1wiICYmICF1cmwuc2VhcmNoICYmICF1cmwuaGFzaCA/IG5vcm1hbGl6ZWQuc2xpY2UoMCwgLTEpIDogbm9ybWFsaXplZDtcbn1cbiJdfQ==
|
|
315
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFFSCxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBQ3hCLE9BQU8sRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNwRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRS9FLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFeEMsTUFBTSxlQUFlLEdBQUcsQ0FBbUIsSUFBTyxFQUFFLFdBQW1CLEVBQUUsRUFBRSxDQUN6RSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7QUFFdEQsTUFBTSxDQUFDLE1BQU0sZ0NBQWdDLEdBQUcsQ0FBQztLQUM5QyxNQUFNLENBQUM7SUFDTixPQUFPLEVBQUUsZUFBZSxDQUFDLDJCQUEyQixFQUFFLHFDQUFxQyxDQUFDO0lBQzVGLElBQUksRUFBRSxlQUFlLENBQUMsaUJBQWlCLEVBQUUsOEJBQThCLENBQUM7SUFDeEUsU0FBUyxFQUFFLGVBQWUsQ0FBQyx1QkFBdUIsRUFBRSxvQ0FBb0MsQ0FBQztJQUN6RixXQUFXLEVBQUUsZUFBZSxDQUFDLHlCQUF5QixFQUFFLHNDQUFzQyxDQUFDO0lBQy9GLFVBQVUsRUFBRSxlQUFlLENBQ3pCLHdCQUF3QixFQUN4Qix5Q0FBeUMsQ0FDMUM7SUFDRCxRQUFRLEVBQUUsZUFBZSxDQUFDLHNCQUFzQixFQUFFLHlDQUF5QyxDQUFDO0lBQzVGLFlBQVksRUFBRSxlQUFlLENB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QUssUUFBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDL0QsT0FBTyxFQUFFLEdBQUcsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUNyQyxDQUFDO1FBQ0QsSUFBSSxPQUFPLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDbkMsT0FBTyxFQUFFLEdBQUcsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUN0QyxDQUFDO0lBQ0gsQ0FBQztJQUNELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDOUIsT0FBTyxhQUFhLEtBQUssS0FBSztZQUM1QixDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUU7WUFDckQsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7SUFDOUMsQ0FBQztJQUNELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQzVDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMxQixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUMvQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLENBQUM7SUFDNUUsQ0FBQztJQUNELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFD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QUMxRSxDQUFDO0lBQ0QsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLEtBQWE7SUFDakMsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCLElBQUksQ0FBQyxHQUFHO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDdkIsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xDLE9BQU8sR0FBRyxDQUFDLFFBQVEsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO0FBQ2pHLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEJyb3dzZXItc2FmZSBvcHRpb24gcHJpbWl0aXZlcyBzaGFyZWQgYWNyb3NzIGRieC10b29scyBwYWNrYWdlcy5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB7IGlzTG9vcGJhY2tIb3N0LCBNQVhfVENQX1BPUlQsIHVybEJ1aWxkZXIgfSBmcm9tIFwiLi9uZXQudHNcIjtcbmltcG9ydCB7IGlzUmVjb3JkLCB0b0Jvb2xlYW4gfSBmcm9tIFwiLi9vYmplY3QudHNcIjtcbmltcG9ydCB7IHBhcnNlTGlzdCwgdG9JZGVudGlmaWVyV2l0aE9wdGlvbnMsIHRvU2x1ZyB9IGZyb20gXCIuL3N0cmluZy11dGlscy50c1wiO1xuXG5leHBvcnQgeyBNQVhfVENQX1BPUlQgfSBmcm9tIFwiLi9uZXQudHNcIjtcblxuY29uc3QgZW52aXJvbm1lbnROYW1lID0gPFQgZXh0ZW5kcyBzdHJpbmc+KG5hbWU6IFQsIGRlc2NyaXB0aW9uOiBzdHJpbmcpID0+XG4gIHoubGl0ZXJhbChuYW1lKS5kZWZhdWx0KG5hbWUpLmRlc2NyaWJlKGRlc2NyaXB0aW9uKTtcblxuZXhwb3J0IGNvbnN0IERhdGFicmlja3NFbnZpcm9ubWVudE5hbWVzU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBwcm9maWxlOiBlbnZpcm9ubWVudE5hbWUoXCJEQVRBQlJJQ0tTX0NPTkZJR19QUk9GSUxFXCIsIFwiRGF0YWJyaWNrcyBDTEkgcHJvZmlsZSBlbnZpcm9ubWVudC5cIiksXG4gICAgaG9zdDogZW52aXJvbm1lbnROYW1lKFwiREFUQUJSSUNLU19IT1NUXCIsIFwiRGF0YWJyaWNrcyBob3N0IGVudmlyb25tZW50LlwiKSxcbiAgICBhY2NvdW50SWQ6IGVudmlyb25tZW50TmFtZShcIkRBVEFCUklDS1NfQUNDT1VOVF9JRFwiLCBcIkRhdGFicmlja3MgYWNjb3VudCBJRCBlbnZpcm9ubWVudC5cIiksXG4gICAgd29ya3NwYWNlSWQ6IGVudmlyb25tZW50TmFtZShcIkRBVEFCUklDS1NfV09SS1NQQUNFX0lEXCIsIFwiRGF0YWJyaWNrcyB3b3Jrc3BhY2UgSUQgZW52aXJvbm1lbnQuXCIpLFxuICAgIGNvbmZpZ0ZpbGU6IGVudmlyb25tZW50TmFtZShcbiAgICAgIFwiREFUQUJSSUNLU19DT05GSUdfRklMRVwiLFxuICAgICAgXCJEYXRhYnJpY2tzIENMSSBjb25maWcgZmlsZSBlbnZpcm9ubWVudC5cIixcbiAgICApLFxuICAgIGNsaWVudElkOiBlbnZpcm9ubWVudE5hbWUoXCJEQVRBQlJJQ0tTX0NMSUVOVF9JRFwiLCBcIkRhdGFicmlja3MgT0F1dGggY2xpZW50IElEIGVudmlyb25tZW50LlwiKSxcbiAgICBjbGllbnRTZWNyZXQ6IGVudmlyb25tZW50TmFtZShcbiAgICAgIFwiREFUQUJSSUNLU19DTElFTlRfU0VDUkVUXCIsXG4gICAgICBcIkRhdGFicmlja3MgT0F1dGggY2xpZW50IHNlY3JldCBlbnZpcm9ubWVudC5cIixcbiAgICApLFxuICAgIGFjY2Vzc1Rva2VuOiBlbnZpcm9ubWVudE5hbWUoXCJEQVRBQlJJQ0tTX1RPS0VOXCIsIFwiRGF0YWJyaWNrcyBhY2Nlc3MgdG9rZW4gZW52aXJvbm1lbnQuXCIpLFxuICAgIGdyb3VwSWQ6IGVudmlyb25tZW50TmFtZShcIkRBVEFCUklDS1NfR1JPVVBfSURcIiwgXCJEYXRhYnJpY2tzIGdyb3VwIElEIGVudmlyb25tZW50LlwiKSxcbiAgICBhdXRoVHlwZTogZW52aXJvbm1lbnROYW1lKFwiREFUQUJSSUNLU19BVVRIX1RZUEVcIiwgXCJEYXRhYnJpY2tzIGF1dGggdHlwZSBlbnZpcm9ubWVudC5cIiksXG4gICAgYXBwTmFtZTogZW52aXJvbm1lbnROYW1lKFwiREFUQUJSSUNLU19BUFBfTkFNRVwiLCBcIkRhdGFicmlja3MgQXBwIG5hbWUgZW52aXJvbm1lbnQuXCIpLFxuICAgIGFwcFBvcnQ6IGVudmlyb25tZW50TmFtZShcIkRBVEFCUklDS1NfQVBQX1BPUlRcIiwgXCJEYXRhYnJpY2tzIEFwcCBwb3J0IGVudmlyb25tZW50LlwiKSxcbiAgICBsYWtlYmFzZUVuZHBvaW50OiBlbnZpcm9ubWVudE5hbWUoXCJMQUtFQkFTRV9FTkRQT0lOVFwiLCBcIkxha2ViYXNlIGVuZHBvaW50IGVudmlyb25tZW50LlwiKSxcbiAgfSlcbiAgLnN0cmljdCgpXG4gIC5kZXNjcmliZShcIkNhbm9uaWNhbCBEYXRhYnJpY2tzIENMSSwgU0RLLCBBcHBzLCBhbmQgTGFrZWJhc2UgZW52aXJvbm1lbnQgbmFtZXMuXCIpO1xuXG5leHBvcnQgdHlwZSBEYXRhYnJpY2tzRW52aXJvbm1lbnROYW1lcyA9IHoub3V0cHV0PHR5cGVvZiBEYXRhYnJpY2tzRW52aXJvbm1lbnROYW1lc1NjaGVtYT47XG5cbi8qKiBDYW5vbmljYWwgRGF0YWJyaWNrcyBlbnZpcm9ubWVudCBuYW1lcyBkZXJpdmVkIGZyb20gdGhlIG93bmluZyBzY2hlbWEuICovXG5leHBvcnQgY29uc3QgZGF0YWJyaWNrc0Vudmlyb25tZW50TmFtZXMgPSBPYmplY3QuZnJlZXplKERhdGFicmlja3NFbnZpcm9ubWVudE5hbWVzU2NoZW1hLnBhcnNlKHt9KSk7XG5cbmV4cG9ydCBjb25zdCBQb3N0Z3Jlc0Vudmlyb25tZW50TmFtZXNTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIHBvc3RncmVzUm9sZTogZW52aXJvbm1lbnROYW1lKFxuICAgICAgXCJEQlhfVE9PTFNfUE9TVEdSRVNfUk9MRVwiLFxuICAgICAgXCJQb3N0Z3JlU1FMIGFzc3VtZWQtcm9sZSBlbnZpcm9ubWVudC5cIixcbiAgICApLFxuICB9KVxuICAuc3RyaWN0KClcbiAgLmRlc2NyaWJlKFwiQ2Fub25pY2FsIGRieC10b29scyBQb3N0Z3JlU1FMIGVudmlyb25tZW50IG5hbWVzLlwiKTtcblxuZXhwb3J0IHR5cGUgUG9zdGdyZXNFbnZpcm9ubWVudE5hbWVzID0gei5vdXRwdXQ8dHlwZW9mIFBvc3RncmVzRW52aXJvbm1lbnROYW1lc1NjaGVtYT47XG5cbi8qKiBDYW5vbmljYWwgUG9zdGdyZVNRTCBlbnZpcm9ubWVudCBuYW1lcyBkZXJpdmVkIGZyb20gdGhlIG93bmluZyBzY2hlbWEuICovXG5leHBvcnQgY29uc3QgcG9zdGdyZXNFbnZpcm9ubWVudE5hbWVzID0gT2JqZWN0LmZyZWV6ZShQb3N0Z3Jlc0Vudmlyb25tZW50TmFtZXNTY2hlbWEucGFyc2Uoe30pKTtcblxuZXhwb3J0IGNvbnN0IHBvc3RncmVzUm9sZVNjaGVtYSA9IHpcbiAgLnN0cmluZygpXG4gIC50cmltKClcbiAgLm1pbigxKVxuICAucmVnZXgoXG4gICAgL15bQS1aYS16MC05Ll9AKy1dezEsMjU1fSQvLFxuICAgIFwiUG9zdGdyZVNRTCByb2xlIG11c3QgY29udGFpbiBvbmx5IGxldHRlcnMsIG51bWJlcnMsIGRvdCwgdW5kZXJzY29yZSwgYXQsIHBsdXMsIG9yIGh5cGhlbi5cIixcbiAgKVxuICAuZGVzY3JpYmUoXCJQb3N0Z3JlU1FMIHJvbGUgYXNzdW1lZCBhZnRlciBhdXRoZW50aWNhdGlvbi5cIik7XG5cbmV4cG9ydCBjb25zdCBQb3N0Z3Jlc09wdGlvbnNTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIHBvc3RncmVzUm9sZTogcG9zdGdyZXNSb2xlU2NoZW1hXG4gICAgICAub3B0aW9uYWwoKVxuICAgICAgLmRlc2NyaWJlKFwiUG9zdGdyZVNRTCByb2xlIGFzc3VtZWQgYWZ0ZXIgYXV0aGVudGljYXRpb24uXCIpXG4gICAgICAubWV0YSh7IGVudjogcG9zdGdyZXNFbnZpcm9ubWVudE5hbWVzLnBvc3RncmVzUm9sZSB9KSxcbiAgfSlcbiAgLnN0cmljdCgpXG4gIC5kZXNjcmliZShcIlNoYXJlZCBQb3N0Z3JlU1FMIHNlc3Npb24gb3B0aW9ucy5cIik7XG5cbmV4cG9ydCB0eXBlIFBvc3RncmVzT3B0aW9ucyA9IHouaW5wdXQ8dHlwZW9mIFBvc3RncmVzT3B0aW9uc1NjaGVtYT47XG5cbmV4cG9ydCBjb25zdCB0Y3BQb3J0U2NoZW1hID0gei5jb2VyY2VcbiAgLm51bWJlcjxudW1iZXI+KClcbiAgLmludCgpXG4gIC5taW4oMSlcbiAgLm1heChNQVhfVENQX1BPUlQpXG4gIC5kZXNjcmliZShcIlRDUCBwb3J0IGZyb20gMSB0aHJvdWdoIDY1NTM1LlwiKTtcblxuZXhwb3J0IGNvbnN0IHRjcFBvcnRPclplcm9TY2hlbWEgPSB6LmNvZXJjZVxuICAubnVtYmVyPG51bWJlcj4oKVxuICAuaW50KClcbiAgLm1pbigwKVxuICAubWF4KE1BWF9UQ1BfUE9SVClcbiAgLmRlc2NyaWJlKFwiVENQIHBvcnQgZnJvbSAwIHRocm91Z2ggNjU1MzUsIHdoZXJlIHplcm8gcmVxdWVzdHMgYXV0b21hdGljIGFsbG9jYXRpb24uXCIpO1xuXG5leHBvcnQgY29uc3Qgbm9ybWFsaXplZFVybFNjaGVtYSA9IHpcbiAgLnN0cmluZygpXG4gIC50cmltKClcbiAgLm1pbigxKVxuICAucmVmaW5lKCh2YWx1ZSkgPT4gdXJsQnVpbGRlcih2YWx1ZSkgIT09IHVuZGVmaW5lZCwge1xuICAgIG1lc3NhZ2U6IFwiRXhwZWN0ZWQgYSB2YWxpZCBVUkwgb3IgaG9zdC5cIixcbiAgfSlcbiAgLm92ZXJ3cml0ZShub3JtYWxpemVVcmwpXG4gIC5kZXNjcmliZShcIlVSTCBub3JtYWxpemVkIHRocm91Z2ggdGhlIHNoYXJlZCBVUkwgYnVpbGRlci5cIik7XG5cbmNvbnN0IGRhdGFicmlja3NUZXh0ID0gKGRlc2NyaXB0aW9uOiBzdHJpbmcpID0+XG4gIHouc3RyaW5nKCkudHJpbSgpLm1pbigxKS5vcHRpb25hbCgpLmRlc2NyaWJlKGRlc2NyaXB0aW9uKTtcbmNvbnN0IGRhdGFicmlja3NPcHRpb25NZXRhID0gKGVudjogc3RyaW5nLCBmbGFnID0gdHJ1ZSkgPT4gKHtcbiAgZW52LFxuICBmbGFnLFxuICBoZWxwRGVmYXVsdDogZmFsc2UsXG59KTtcblxuZXhwb3J0IGNvbnN0IERhdGFicmlja3NPcHRpb25zU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBwcm9maWxlOiBkYXRhYnJpY2tzVGV4dChcIkRhdGFicmlja3MgQ0xJIHByb2ZpbGUuXCIpLm1ldGEoXG4gICAgICBkYXRhYnJpY2tzT3B0aW9uTWV0YShkYXRhYnJpY2tzRW52aXJvbm1lbnROYW1lcy5wcm9maWxlKSxcbiAgICApLFxuICAgIGhvc3Q6IG5vcm1hbGl6ZWRVcmxTY2hlbWFcbiAgICAgIC5vcHRpb25hbCgpXG4gICAgICAuZGVzY3JpYmUoXCJEYXRhYnJpY2tzIGhvc3QuXCIpXG4gICAgICAubWV0YShkYXRhYnJpY2tzT3B0aW9uTWV0YShkYXRhYnJpY2tzRW52aXJvbm1lbnROYW1lcy5ob3N0LCBmYWxzZSkpLFxuICAgIGFjY291bnRJZDogZGF0YWJyaWNrc1RleHQoXCJEYXRhYnJpY2tzIGFjY291bnQgSUQuXCIpLm1ldGEoXG4gICAgICBkYXRhYnJpY2tzT3B0aW9uTWV0YShkYXRhYnJpY2tzRW52aXJvbm1lbnROYW1lcy5hY2NvdW50SWQsIGZhbHNlKSxcbiAgICApLFxuICAgIHdvcmtzcGFjZUlkOiBkYXRhYnJpY2tzVGV4dChcIkRhdGFicmlja3Mgd29ya3NwYWNlIElELlwiKS5tZXRhKFxuICAgICAgZGF0YWJyaWNrc09wdGlvbk1ldGEoZGF0YWJyaWNrc0Vudmlyb25tZW50TmFtZXMud29ya3NwYWNlSWQsIGZhbHNlKSxcbiAgICApLFxuICAgIGNvbmZpZ0ZpbGU6IGRhdGFicmlja3NUZXh0KFwiRGF0YWJyaWNrcyBDTEkgY29uZmlnIGZpbGUuXCIpLm1ldGEoXG4gICAgICBkYXRhYnJpY2tzT3B0aW9uTWV0YShkYXRhYnJpY2tzRW52aXJvbm1lbnROYW1lcy5jb25maWdGaWxlLCBmYWxzZSksXG4gICAgKSxcbiAgICBjbGllbnRJZDogZGF0YWJyaWNrc1RleHQoXCJEYXRhYnJpY2tzIE9BdXRoIGNsaWVudCBJRC5cIikubWV0YShcbiAgICAgIGRhdGFicmlja3NPcHRpb25NZXRhKGRhdGFicmlja3NFbnZpcm9ubWVudE5hbWVzLmNsaWVudElkLCBmYWxzZSksXG4gICAgKSxcbiAgICBjbGllbnRTZWNyZXQ6IGRhdGFicmlja3NUZXh0KFwiRGF0YWJyaWNrcyBPQXV0aCBjbGllbnQgc2VjcmV0LlwiKS5tZXRhKFxuICAgICAgZGF0YWJyaWNrc09wdGlvbk1ldGEoZGF0YWJyaWNrc0Vudmlyb25tZW50TmFtZXMuY2xpZW50U2VjcmV0LCBmYWxzZSksXG4gICAgKSxcbiAgICBhY2Nlc3NUb2tlbjogZGF0YWJyaWNrc1RleHQoXCJEYXRhYnJpY2tzIGFjY2VzcyB0b2tlbi5cIikubWV0YShcbiAgICAgIGRhdGFicmlja3NPcHRpb25NZXRhKGRhdGFicmlja3NFbnZpcm9ubWVudE5hbWVzLmFjY2Vzc1Rva2VuLCBmYWxzZSksXG4gICAgKSxcbiAgICBncm91cElkOiBkYXRhYnJpY2tzVGV4dChcIkRhdGFicmlja3MgZ3JvdXAgSUQuXCIpLm1ldGEoXG4gICAgICBkYXRhYnJpY2tzT3B0aW9uTWV0YShkYXRhYnJpY2tzRW52aXJvbm1lbnROYW1lcy5ncm91cElkLCBmYWxzZSksXG4gICAgKSxcbiAgICBhdXRoVHlwZTogZGF0YWJyaWNrc1RleHQoXCJEYXRhYnJpY2tzIGF1dGhlbnRpY2F0aW9uIHR5cGUuXCIpLm1ldGEoXG4gICAgICBkYXRhYnJpY2tzT3B0aW9uTWV0YShkYXRhYnJpY2tzRW52aXJvbm1lbnROYW1lcy5hdXRoVHlwZSwgZmFsc2UpLFxuICAgICksXG4gICAgYXBwTmFtZTogZGF0YWJyaWNrc1RleHQoXCJEYXRhYnJpY2tzIEFwcCBuYW1lLlwiKS5tZXRhKFxuICAgICAgZGF0YWJyaWNrc09wdGlvbk1ldGEoZGF0YWJyaWNrc0Vudmlyb25tZW50TmFtZXMuYXBwTmFtZSwgZmFsc2UpLFxuICAgICksXG4gICAgYXBwUG9ydDogdGNwUG9ydFNjaGVtYVxuICAgICAgLm9wdGlvbmFsKClcbiAgICAgIC5kZXNjcmliZShcIkRhdGFicmlja3MgQXBwIHBvcnQuXCIpXG4gICAgICAubWV0YShkYXRhYnJpY2tzT3B0aW9uTWV0YShkYXRhYnJpY2tzRW52aXJvbm1lbnROYW1lcy5hcHBQb3J0LCBmYWxzZSkpLFxuICAgIGxha2ViYXNlRW5kcG9pbnQ6IGRhdGFicmlja3NUZXh0KFwiTGFrZWJhc2UgZW5kcG9pbnQuXCIpLm1ldGEoXG4gICAgICBkYXRhYnJpY2tzT3B0aW9uTWV0YShkYXRhYnJpY2tzRW52aXJvbm1lbnROYW1lcy5sYWtlYmFzZUVuZHBvaW50LCBmYWxzZSksXG4gICAgKSxcbiAgfSlcbiAgLnN0cmljdCgpXG4gIC5kZXNjcmliZShcIkNvbW1vbiBEYXRhYnJpY2tzIENMSSwgU0RLLCBBcHBzLCBhbmQgTGFrZWJhc2Ugb3B0aW9ucy5cIik7XG5cbmV4cG9ydCB0eXBlIERhdGFicmlja3NPcHRpb25zID0gei5pbnB1dDx0eXBlb2YgRGF0YWJyaWNrc09wdGlvbnNTY2hlbWE+O1xuXG4vKiogS2V5IGZvcm1hdCB1c2VkIHdoZW4gc2VyaWFsaXppbmcgcGFyc2VkIG9wdGlvbnMuICovXG5leHBvcnQgdHlwZSBPcHRpb25TZXJpYWxpemF0aW9uRm9ybWF0ID0gXCJmbGFnXCIgfCBcImVudlwiO1xuXG5pbnRlcmZhY2UgT3B0aW9uUHJvcGVydHkge1xuICByZWFkb25seSBrZXk6IHN0cmluZztcbiAgcmVhZG9ubHkgdHlwZT86IHN0cmluZztcbiAgcmVhZG9ubHkgZW52Pzogc3RyaW5nIHwgcmVhZG9ubHkgc3RyaW5nW107XG4gIHJlYWRvbmx5IGZsYWc/OiBib29sZWFuO1xufVxuXG4vKiogU2VyaWFsaXplIGNvbXBsZXRlIHBhcnNlZCBvcHRpb25zIGFzIGEgcHJvY2VzcyBlbnZpcm9ubWVudCBtYXAuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplT3B0c0Vudmlyb25tZW50PFQgZXh0ZW5kcyB6LlpvZFJhd1NoYXBlPihcbiAgc2NoZW1hOiB6LlpvZE9iamVjdDxUPixcbiAgdmFsdWVzOiB6LmlucHV0PHouWm9kT2JqZWN0PFQ+Pixcbik6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHN0cmluZz4+IHtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhzZXJpYWxpemVkT3B0cyhzY2hlbWEsIHZhbHVlcywgXCJlbnZcIikpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBbXG4gICAgICBrZXksXG4gICAgICBlbnZpcm9ubWVudE9wdGlvblZhbHVlKHZhbHVlKSxcbiAgICBdKSxcbiAgKTtcbn1cblxuZnVuY3Rpb24gc2VyaWFsaXplZE9wdHM8VCBleHRlbmRzIHouWm9kUmF3U2hhcGU+KFxuICBzY2hlbWE6IHouWm9kT2JqZWN0PFQ+LFxuICB2YWx1ZXM6IHouaW5wdXQ8ei5ab2RPYmplY3Q8VD4+LFxuICBmb3JtYXQ6IE9wdGlvblNlcmlhbGl6YXRpb25Gb3JtYXQsXG4pOiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICBjb25zdCBwYXJzZWQgPSBzY2hlbWEucGFyc2UodmFsdWVzKSBhcyBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj47XG4gIGNvbnN0IGVudHJpZXMgPSBvcHRpb25Qcm9wZXJ0aWVzKHNjaGVtYSkuZmxhdE1hcCgocHJvcGVydHkpID0+IHtcbiAgICBpZiAoZm9ybWF0ID09PSBcImZsYWdcIiAmJiBwcm9wZXJ0eS5mbGFnID09PSBmYWxzZSkgcmV0dXJuIFtdO1xuICAgIGNvbnN0IGtleSA9XG4gICAgICBmb3JtYXQgPT09IFwiZmxhZ1wiXG4gICAgICAgID8gYC0tJHt0b1NsdWcocHJvcGVydHkua2V5KX1gXG4gICAgICAgIDogKG9wdGlvbkVudmlyb25tZW50TmFtZXMocHJvcGVydHkua2V5LCBwcm9wZXJ0eS5lbnYpWzBdID8/IFwiXCIpO1xuICAgIGlmICgha2V5KSByZXR1cm4gW107XG4gICAgY29uc3QgdmFsdWUgPSBwYXJzZWRbcHJvcGVydHkua2V5XTtcbiAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IFtdIDogW1trZXksIHNlcmlhbGl6ZWRPcHRpb25WYWx1ZSh2YWx1ZSldIGFzIGNvbnN0XTtcbiAgfSk7XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoZW50cmllcyk7XG59XG5cbmNvbnN0IG9wdGlvbmFsVGV4dCA9IChkZXNjcmlwdGlvbjogc3RyaW5nLCBlbnY6IHN0cmluZykgPT5cbiAgei5zdHJpbmcoKS50cmltKCkubWluKDEpLm9wdGlvbmFsKCkuZGVzY3JpYmUoZGVzY3JpcHRpb24pLm1ldGEoeyBlbnYsIGZsYWc6IGZhbHNlIH0pO1xuXG5leHBvcnQgY29uc3QgTGFrZWJhc2VPcHRpb25zU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBsYWtlYmFzZUVuZHBvaW50OiBvcHRpb25hbFRleHQoXG4gICAgICBcIkxha2ViYXNlIHByb2plY3QsIHJlc291cmNlIHBhdGgsIGhvc3QsIG9yIFVSTC5cIixcbiAgICAgIGRhdGFicmlja3NFbnZpcm9ubWVudE5hbWVzLmxha2ViYXNlRW5kcG9pbnQsXG4gICAgKSxcbiAgfSlcbiAgLnN0cmljdCgpXG4gIC5kZXNjcmliZShcIkNvbW1vbiBMYWtlYmFzZSBvcHRpb25zLlwiKTtcblxuZXhwb3J0IHR5cGUgTGFrZWJhc2VPcHRpb25zID0gei5pbnB1dDx0eXBlb2YgTGFrZWJhc2VPcHRpb25zU2NoZW1hPjtcblxuLyoqIEV4cGxpY2l0IG9wdGlvbiB2YWx1ZXMgb3IgZW52aXJvbm1lbnQgZW50cmllcyBjb25zdW1lZCBieSBvcHRpb24gcGFyc2luZyBoZWxwZXJzLiAqL1xuZXhwb3J0IHR5cGUgT3B0aW9uVmFsdWVNYXAgPSBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4gfCBudWxsO1xuXG4vKiogUGFyc2Ugb25seSBzdXBwbGllZCBmbGFnIGFuZCBlbnZpcm9ubWVudCB2YWx1ZXMgdGhyb3VnaCBhbiBvd25pbmcgWm9kIG9iamVjdCBzY2hlbWEuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VPcHRzPFQgZXh0ZW5kcyB6LlpvZFJhd1NoYXBlPihcbiAgc2NoZW1hOiB6LlpvZE9iamVjdDxUPixcbiAgZmxhZ3M6IE9wdGlvblZhbHVlTWFwID0gbnVsbCxcbiAgZW52aXJvbm1lbnQ6IE9wdGlvblZhbHVlTWFwID0gbnVsbCxcbik6IFBhcnRpYWw8ei5vdXRwdXQ8ei5ab2RPYmplY3Q8VD4+PiB7XG4gIGNvbnN0IGNvbmZpZ3VyZWQgPSBvcHRpb25WYWx1ZXMoc2NoZW1hLCBmbGFncywgZW52aXJvbm1lbnQpO1xuICBjb25zdCBwYXJzZWQgPSBzY2hlbWEucGFyc2UoY29uZmlndXJlZCk7XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmtleXMoY29uZmlndXJlZCkubWFwKChrZXkpID0+IFtrZXksIHBhcnNlZFtrZXkgYXMga2V5b2YgdHlwZW9mIHBhcnNlZF1dKSxcbiAgKSBhcyBQYXJ0aWFsPHoub3V0cHV0PHouWm9kT2JqZWN0PFQ+Pj47XG59XG5cbi8qKiBTdXBwb3J0ZWQgbGlzdGVuZXIgdHJhbnNwb3J0IHNjaGVtZXMuICovXG5leHBvcnQgdHlwZSBMaXN0ZW5TY2hlbWUgPSBcInRjcFwiIHwgXCJ1bml4XCI7XG5cbi8qKiBUQ1AgbGlzdGVuZXIgcmV0dXJuZWQgYnkge0BsaW5rIGxpc3RlbkFkZHJlc3NTY2hlbWF9LiAqL1xuZXhwb3J0IGludGVyZmFjZSBUY3BMaXN0ZW5BZGRyZXNzIHtcbiAgcmVhZG9ubHkgc2NoZW1lOiBcInRjcFwiO1xuICByZWFkb25seSBob3N0OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBvcnQ6IG51bWJlcjtcbn1cblxuLyoqIFVuaXgtZG9tYWluIGxpc3RlbmVyIHJldHVybmVkIGJ5IHtAbGluayBsaXN0ZW5BZGRyZXNzU2NoZW1hfS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVW5peExpc3RlbkFkZHJlc3Mge1xuICByZWFkb25seSBzY2hlbWU6IFwidW5peFwiO1xuICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG59XG5cbi8qKiBUcmFuc3BvcnQtYXdhcmUgbGlzdGVuZXIgYWRkcmVzcy4gKi9cbmV4cG9ydCB0eXBlIExpc3RlbkFkZHJlc3MgPSBUY3BMaXN0ZW5BZGRyZXNzIHwgVW5peExpc3RlbkFkZHJlc3M7XG5cbi8qKiBEZWZhdWx0cyBhbmQgdmFsaWRhdGlvbiBwb2xpY3kgZm9yIHtAbGluayBsaXN0ZW5BZGRyZXNzU2NoZW1hfS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdGVuQWRkcmVzc09wdGlvbnMge1xuICByZWFkb25seSBwb3J0OiBudW1iZXI7XG4gIHJlYWRvbmx5IGhvc3Q/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGxvb3BiYWNrPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgc2NoZW1lPzogTGlzdGVuU2NoZW1lO1xuICByZWFkb25seSBzY2hlbWVzPzogcmVhZG9ubHkgTGlzdGVuU2NoZW1lW107XG4gIHJlYWRvbmx5IHdpdGhEZWZhdWx0PzogYm9vbGVhbjtcbn1cblxuLyoqIFJhdyBsaXN0ZW5lciBpbnB1dCBhY2NlcHRlZCBiZWZvcmUgdHJhbnNwb3J0LWF3YXJlIG5vcm1hbGl6YXRpb24uICovXG5leHBvcnQgdHlwZSBMaXN0ZW5BZGRyZXNzSW5wdXQgPSBMaXN0ZW5BZGRyZXNzIHwgc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG5leHBvcnQgZnVuY3Rpb24gbGlzdGVuQWRkcmVzc1NjaGVtYShcbiAgb3B0aW9uczogTGlzdGVuQWRkcmVzc09wdGlvbnMgJiB7XG4gICAgcmVhZG9ubHkgc2NoZW1lczogcmVhZG9ubHkgW1widGNwXCIsIFwidW5peFwiXTtcbiAgICByZWFkb25seSB3aXRoRGVmYXVsdDogZmFsc2U7XG4gIH0sXG4pOiB6LlpvZFR5cGU8TGlzdGVuQWRkcmVzcywgdW5rbm93bj47XG5cbmV4cG9ydCBmdW5jdGlvbiBsaXN0ZW5BZGRyZXNzU2NoZW1hKFxuICBvcHRpb25zOiBMaXN0ZW5BZGRyZXNzT3B0aW9ucyAmIHsgcmVhZG9ubHkgc2NoZW1lczogcmVhZG9ubHkgW1widGNwXCIsIFwidW5peFwiXSB9LFxuKTogei5ab2REZWZhdWx0PHouWm9kVHlwZTxMaXN0ZW5BZGRyZXNzLCB1bmtub3duPj47XG5cbmV4cG9ydCBmdW5jdGlvbiBsaXN0ZW5BZGRyZXNzU2NoZW1hKFxuICBvcHRpb25zOiBMaXN0ZW5BZGRyZXNzT3B0aW9ucyAmIHsgcmVhZG9ubHkgd2l0aERlZmF1bHQ6IGZhbHNlIH0sXG4pOiB6LlpvZFR5cGU8VGNwTGlzdGVuQWRkcmVzcywgdW5rbm93bj47XG5cbmV4cG9ydCBmdW5jdGlvbiBsaXN0ZW5BZGRyZXNzU2NoZW1hKFxuICBvcHRpb25zOiBMaXN0ZW5BZGRyZXNzT3B0aW9ucyxcbik6IHouWm9kRGVmYXVsdDx6LlpvZFR5cGU8VGNwTGlzdGVuQWRkcmVzcywgdW5rbm93bj4+O1xuXG4vKiogQnVpbGQgYSB0cmFuc3BvcnQtYXdhcmUgbGlzdGVuZXIgc2NoZW1hLiBCYXJlIGFkZHJlc3NlcyB1c2UgdGhlIGNvbmZpZ3VyZWQgZGVmYXVsdCBzY2hlbWUuICovXG5leHBvcnQgZnVuY3Rpb24gbGlzdGVuQWRkcmVzc1NjaGVtYShcbiAgb3B0aW9uczogTGlzdGVuQWRkcmVzc09wdGlvbnMsXG4pOiB6LlpvZFR5cGU8TGlzdGVuQWRkcmVzcywgdW5rbm93bj4gfCB6LlpvZERlZmF1bHQ8ei5ab2RUeXBlPExpc3RlbkFkZHJlc3MsIHVua25vd24+PiB7XG4gIGNvbnN0IGRlZmF1bHRzOiBUY3BMaXN0ZW5BZGRyZXNzID0ge1xuICAgIHNjaGVtZTogXCJ0Y3BcIixcbiAgICBob3N0OiBvcHRpb25zLmhvc3QgPz8gXCJsb2NhbGhvc3RcIixcbiAgICBwb3J0OiBvcHRpb25zLnBvcnQsXG4gIH07XG4gIGNvbnN0IGFsbG93ZWQgPSBuZXcgU2V0PExpc3RlblNjaGVtZT4ob3B0aW9ucy5zY2hlbWVzID8/IFtcInRjcFwiXSk7XG4gIGNvbnN0IHNjaGVtYSA9IHpcbiAgICAucHJlcHJvY2VzcyhcbiAgICAgICh2YWx1ZSkgPT4gcGFyc2VMaXN0ZW5BZGRyZXNzKHZhbHVlLCBkZWZhdWx0cywgb3B0aW9ucy5zY2hlbWUgPz8gXCJ0Y3BcIiksXG4gICAgICB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInNjaGVtZVwiLCBbXG4gICAgICAgIHpcbiAgICAgICAgICAub2JqZWN0KHtcbiAgICAgICAgICAgIHNjaGVtZTogei5saXRlcmFsKFwidGNwXCIpLFxuICAgICAgICAgICAgaG9zdDogei5zdHJpbmcoKS50cmltKCkudG9Mb3dlckNhc2UoKS5taW4oMSkuZGVmYXVsdChkZWZhdWx0cy5ob3N0KSxcbiAgICAgICAgICAgIHBvcnQ6IHRjcFBvcnRPclplcm9TY2hlbWEuZGVmYXVsdChkZWZhdWx0cy5wb3J0KSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zdHJpY3QoKSxcbiAgICAgICAgelxuICAgICAgICAgIC5vYmplY3Qoe1xuICAgICAgICAgICAgc2NoZW1lOiB6LmxpdGVyYWwoXCJ1bml4XCIpLFxuICAgICAgICAgICAgcGF0aDogei5zdHJpbmcoKS50cmltKCkubWluKDEpLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnN0cmljdCgpLFxuICAgICAgXSksXG4gICAgKVxuICAgIC5yZWZpbmUoKGFkZHJlc3MpID0+IGFsbG93ZWQuaGFzKGFkZHJlc3Muc2NoZW1lKSwgXCJMaXN0ZW5lciBzY2hlbWUgaXMgbm90IGFsbG93ZWQuXCIpXG4gICAgLnJlZmluZShcbiAgICAgIChhZGRyZXNzKSA9PiBhZGRyZXNzLnNjaGVtZSAhPT0gXCJ0Y3BcIiB8fCAhb3B0aW9ucy5sb29wYmFjayB8fCBpc0xvb3BiYWNrSG9zdChhZGRyZXNzLmhvc3QpLFxuICAgICAgXCJMaXN0ZW5lciBob3N0IG11c3QgYmUgbG9vcGJhY2suXCIsXG4gICAgKVxuICAgIC5kZXNjcmliZShcIlRDUCBvciBVbml4LWRvbWFpbiBsaXN0ZW5lciBhZGRyZXNzLlwiKSBhcyB6LlpvZFR5cGU8TGlzdGVuQWRkcmVzcywgdW5rbm93bj47XG4gIHJldHVybiBvcHRpb25zLndpdGhEZWZhdWx0ID09PSBmYWxzZSA/IHNjaGVtYSA6IHNjaGVtYS5kZWZhdWx0KGRlZmF1bHRzKTtcbn1cblxuLyoqIFJlbmRlciBhIGxpc3RlbmVyIGFkZHJlc3MgYXMgYSBgdGNwOi8vYCBvciBgdW5peDovL2AgVVJMLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdExpc3RlbkFkZHJlc3MoYWRkcmVzczogTGlzdGVuQWRkcmVzcyk6IHN0cmluZyB7XG4gIGlmIChhZGRyZXNzLnNjaGVtZSA9PT0gXCJ1bml4XCIpIHtcbiAgICByZXR1cm4gYHVuaXg6Ly8ke2FkZHJlc3MucGF0aC5zdGFydHNXaXRoKFwiL1wiKSA/IFwiXCIgOiBcIi9cIn0ke2FkZHJlc3MucGF0aH1gO1xuICB9XG4gIGNvbnN0IGhvc3QgPSBhZGRyZXNzLmhvc3QuaW5jbHVkZXMoXCI6XCIpID8gYFske2FkZHJlc3MuaG9zdH1dYCA6IGFkZHJlc3MuaG9zdDtcbiAgcmV0dXJuIGB0Y3A6Ly8ke2hvc3R9OiR7YWRkcmVzcy5wb3J0fWA7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTGlzdGVuQWRkcmVzcyhcbiAgdmFsdWU6IHVua25vd24sXG4gIGRlZmF1bHRzOiBUY3BMaXN0ZW5BZGRyZXNzLFxuICBkZWZhdWx0U2NoZW1lOiBMaXN0ZW5TY2hlbWUsXG4pOiB1bmtub3duIHtcbiAgaWYgKGlzUmVjb3JkKHZhbHVlKSAmJiB2YWx1ZS5zY2hlbWUgPT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUuaG9zdCA9PT0gXCJzdHJpbmdcIiAmJiB2YWx1ZS5wb3J0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB7IC4uLnZhbHVlLCBzY2hlbWU6IFwidGNwXCIgfTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZS5wYXRoID09PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4geyAuLi52YWx1ZSwgc2NoZW1lOiBcInVuaXhcIiB9O1xuICAgIH1cbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRTY2hlbWUgPT09IFwidGNwXCJcbiAgICAgID8geyBzY2hlbWU6IFwidGNwXCIsIGhvc3Q6IGRlZmF1bHRzLmhvc3QsIHBvcnQ6IHZhbHVlIH1cbiAgICAgIDogeyBzY2hlbWU6IFwidW5peFwiLCBwYXRoOiBTdHJpbmcodmFsdWUpIH07XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIHZhbHVlO1xuICBjb25zdCB0ZXh0ID0gdmFsdWUudHJpbSgpO1xuICBpZiAodGV4dC5zdGFydHNXaXRoKFwidW5peDovL1wiKSkge1xuICAgIGNvbnN0IHBhdGggPSB0ZXh0LnNsaWNlKFwidW5peDovL1wiLmxlbmd0aCk7XG4gICAgcmV0dXJuIHsgc2NoZW1lOiBcInVuaXhcIiwgcGF0aDogcGF0aC5zdGFydHNXaXRoKFwiL1wiKSA/IHBhdGggOiBgLyR7cGF0aH1gIH07XG4gIH1cbiAgY29uc3QgdGNwID0gdGV4dC5zdGFydHNXaXRoKFwidGNwOi8vXCIpID8gdGV4dC5zbGljZShcInRjcDovL1wiLmxlbmd0aCkgOiB0ZXh0O1xuICBpZiAoZGVmYXVsdFNjaGVtZSA9PT0gXCJ1bml4XCIgJiYgIXRleHQuc3RhcnRzV2l0aChcInRjcDovL1wiKSkge1xuICAgIHJldHVybiB7IHNjaGVtZTogXCJ1bml4XCIsIHBhdGg6IHRleHQgfTtcbiAgfVxuICBpZiAoL15cXGQrJC8udGVzdCh0Y3ApKSByZXR1cm4geyBzY2hlbWU6IFwidGNwXCIsIGhvc3Q6IGRlZmF1bHRzLmhvc3QsIHBvcnQ6IHRjcCB9O1xuICBpZiAoL146XFxkKyQvLnRlc3QodGNwKSkge1xuICAgIHJldHVybiB7IHNjaGVtZTogXCJ0Y3BcIiwgaG9zdDogZGVmYXVsdHMuaG9zdCwgcG9ydDogdGNwLnNsaWNlKDEpIH07XG4gIH1cbiAgY29uc3QgYnJhY2tldGVkID0gdGNwLm1hdGNoKC9eXFxbKFteXFxdXSspXFxdKD86OihcXGQrKSk/JC8pO1xuICBpZiAoYnJhY2tldGVkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNjaGVtZTogXCJ0Y3BcIixcbiAgICAgIGhvc3Q6IGJyYWNrZXRlZFsxXSxcbiAgICAgIHBvcnQ6IGJyYWNrZXRlZFsyXSA/PyBkZWZhdWx0cy5wb3J0LFxuICAgIH07XG4gIH1cbiAgY29uc3Qgc2VwYXJhdG9yID0gdGNwLmxhc3RJbmRleE9mKFwiOlwiKTtcbiAgaWYgKHNlcGFyYXRvciA+IDAgJiYgIXRjcC5zbGljZSgwLCBzZXBhcmF0b3IpLmluY2x1ZGVzKFwiOlwiKSkge1xuICAgIHJldHVybiB7XG4gICAgICBzY2hlbWU6IFwidGNwXCIsXG4gICAgICBob3N0OiB0Y3Auc2xpY2UoMCwgc2VwYXJhdG9yKSxcbiAgICAgIHBvcnQ6IHRjcC5zbGljZShzZXBhcmF0b3IgKyAxKSxcbiAgICB9O1xuICB9XG4gIHJldHVybiB7IHNjaGVtZTogXCJ0Y3BcIiwgaG9zdDogdGNwIHx8IGRlZmF1bHRzLmhvc3QsIHBvcnQ6IGRlZmF1bHRzLnBvcnQgfTtcbn1cblxuZnVuY3Rpb24gb3B0aW9uUHJvcGVydGllcyhzY2hlbWE6IHouWm9kT2JqZWN0PHouWm9kUmF3U2hhcGU+KTogT3B0aW9uUHJvcGVydHlbXSB7XG4gIGNvbnN0IGRvY3VtZW50ID0gei50b0pTT05TY2hlbWEoc2NoZW1hKTtcbiAgaWYgKCFpc1JlY29yZChkb2N1bWVudC5wcm9wZXJ0aWVzKSkgcmV0dXJuIFtdO1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZG9jdW1lbnQucHJvcGVydGllcykuZmxhdE1hcCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgaWYgKCFpc1JlY29yZCh2YWx1ZSkpIHJldHVybiBbXTtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBrZXksXG4gICAgICAgIHR5cGU6IHR5cGVvZiB2YWx1ZS50eXBlID09PSBcInN0cmluZ1wiID8gdmFsdWUudHlwZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgZW52OlxuICAgICAgICAgIHR5cGVvZiB2YWx1ZS5lbnYgPT09IFwic3RyaW5nXCIgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZS5lbnYpXG4gICAgICAgICAgICA/ICh2YWx1ZS5lbnYgYXMgc3RyaW5nIHwgcmVhZG9ubHkgc3RyaW5nW10pXG4gICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgZmxhZzogdHlwZW9mIHZhbHVlLmZsYWcgPT09IFwiYm9vbGVhblwiID8gdmFsdWUuZmxhZyA6IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgXTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHNlcmlhbGl6ZWRPcHRpb25WYWx1ZSh2YWx1ZTogdW5rbm93bik6IHVua25vd24ge1xuICBpZiAoaXNSZWNvcmQodmFsdWUpICYmIHZhbHVlLnNjaGVtZSA9PT0gXCJ0Y3BcIikge1xuICAgIGlmICh0eXBlb2YgdmFsdWUuaG9zdCA9PT0gXCJzdHJpbmdcIiAmJiB0eXBlb2YgdmFsdWUucG9ydCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgcmV0dXJuIGZvcm1hdExpc3RlbkFkZHJlc3MoeyBzY2hlbWU6IFwidGNwXCIsIGhvc3Q6IHZhbHVlLmhvc3QsIHBvcnQ6IHZhbHVlLnBvcnQgfSk7XG4gICAgfVxuICB9XG4gIGlmIChpc1JlY29yZCh2YWx1ZSkgJiYgdmFsdWUuc2NoZW1lID09PSBcInVuaXhcIiAmJiB0eXBlb2YgdmFsdWUucGF0aCA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBmb3JtYXRMaXN0ZW5BZGRyZXNzKHsgc2NoZW1lOiBcInVuaXhcIiwgcGF0aDogdmFsdWUucGF0aCB9KTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIGVudmlyb25tZW50T3B0aW9uVmFsdWUodmFsdWU6IHVua25vd24pOiBzdHJpbmcge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiB2YWx1ZS5tYXAoU3RyaW5nKS5qb2luKFwiLFwiKTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbCkgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIG9wdGlvblZhbHVlczxUIGV4dGVuZHMgei5ab2RSYXdTaGFwZT4oXG4gIHNjaGVtYTogei5ab2RPYmplY3Q8VD4sXG4gIHZhbHVlczogT3B0aW9uVmFsdWVNYXAsXG4gIGVudmlyb25tZW50OiBPcHRpb25WYWx1ZU1hcCxcbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgY29uc3QgZG9jdW1lbnQgPSB6LnRvSlNPTlNjaGVtYShzY2hlbWEpO1xuICBjb25zdCBwcm9wZXJ0aWVzID0gaXNSZWNvcmQoZG9jdW1lbnQucHJvcGVydGllcykgPyBkb2N1bWVudC5wcm9wZXJ0aWVzIDoge307XG4gIGNvbnN0IGNvbmZpZ3VyZWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gIGZvciAoY29uc3QgW2tleSwgcHJvcGVydHldIG9mIE9iamVjdC5lbnRyaWVzKHByb3BlcnRpZXMpKSB7XG4gICAgaWYgKCFpc1JlY29yZChwcm9wZXJ0eSkpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGV4cGxpY2l0ID0gZmlyc3RPcHRpb25WYWx1ZSh2YWx1ZXMsIFtrZXksIGAtLSR7dG9TbHVnKGtleSl9YF0pO1xuICAgIGlmIChleHBsaWNpdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25maWd1cmVkW2tleV0gPSBvcHRpb25FbnZpcm9ubWVudFZhbHVlKHByb3BlcnR5LnR5cGUsIGV4cGxpY2l0KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBuYW1lcyA9IG9wdGlvbkVudmlyb25tZW50TmFtZXMoa2V5LCBwcm9wZXJ0eS5lbnYpO1xuICAgIGNvbnN0IHNvdXJjZWQgPSBmaXJzdE9wdGlvblZhbHVlKGVudmlyb25tZW50LCBuYW1lcyk7XG4gICAgaWYgKHNvdXJjZWQgPT09IHVuZGVmaW5lZCkgY29udGludWU7XG4gICAgY29uZmlndXJlZFtrZXldID0gb3B0aW9uRW52aXJvbm1lbnRWYWx1ZShwcm9wZXJ0eS50eXBlLCBzb3VyY2VkKTtcbiAgfVxuICByZXR1cm4gY29uZmlndXJlZDtcbn1cblxuZnVuY3Rpb24gb3B0aW9uRW52aXJvbm1lbnROYW1lcyhrZXk6IHN0cmluZywgY29uZmlndXJlZDogdW5rbm93bik6IHN0cmluZ1tdIHtcbiAgaWYgKHR5cGVvZiBjb25maWd1cmVkID09PSBcInN0cmluZ1wiKSByZXR1cm4gW2NvbmZpZ3VyZWRdO1xuICBpZiAoQXJyYXkuaXNBcnJheShjb25maWd1cmVkKSkge1xuICAgIHJldHVybiBjb25maWd1cmVkLmZpbHRlcigodmFsdWUpOiB2YWx1ZSBpcyBzdHJpbmcgPT4gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKTtcbiAgfVxuICByZXR1cm4gW3RvSWRlbnRpZmllcldpdGhPcHRpb25zKHsgZGVsaW1pdGVyOiBcIl9cIiB9LCBrZXkpLnRvVXBwZXJDYXNlKCldO1xufVxuXG5mdW5jdGlvbiBvcHRpb25FbnZpcm9ubWVudFZhbHVlKHR5cGU6IHVua25vd24sIHZhbHVlOiB1bmtub3duKTogdW5rbm93biB7XG4gIGlmICh0eXBlID09PSBcImJvb2xlYW5cIikgcmV0dXJuIHRvQm9vbGVhbih2YWx1ZSkgPz8gdmFsdWU7XG4gIGlmICh0eXBlID09PSBcImFycmF5XCIgJiYgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSByZXR1cm4gcGFyc2VMaXN0KHZhbHVlKTtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiBmaXJzdE9wdGlvblZhbHVlKHNvdXJjZTogT3B0aW9uVmFsdWVNYXAsIGtleXM6IHJlYWRvbmx5IHN0cmluZ1tdKTogdW5rbm93biB8IHVuZGVmaW5lZCB7XG4gIGlmICghc291cmNlKSByZXR1cm4gdW5kZWZpbmVkO1xuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgY29uc3QgdmFsdWUgPSBzb3VyY2Vba2V5XTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gXCJcIikgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVVybCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgdXJsID0gdXJsQnVpbGRlcih2YWx1ZSk7XG4gIGlmICghdXJsKSByZXR1cm4gdmFsdWU7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSB1cmwudG9TdHJpbmcoKTtcbiAgcmV0dXJuIHVybC5wYXRobmFtZSA9PT0gXCIvXCIgJiYgIXVybC5zZWFyY2ggJiYgIXVybC5oYXNoID8gbm9ybWFsaXplZC5zbGljZSgwLCAtMSkgOiBub3JtYWxpemVkO1xufVxuIl19
|
package/package.json
CHANGED
package/src/brand-utils.ts
CHANGED
|
@@ -14,14 +14,14 @@ const color = z.string().regex(/^#(?:[\da-f]{3}|[\da-f]{6}|[\da-f]{8})$/i, "Expe
|
|
|
14
14
|
/** Package asset references used when a brand context supplies no custom artwork. */
|
|
15
15
|
export const DEFAULT_BRAND_ASSETS = {
|
|
16
16
|
icon: {
|
|
17
|
-
light: "@dbx-tools/ui
|
|
18
|
-
dark: "@dbx-tools/ui
|
|
17
|
+
light: "@dbx-tools/ui/branding/assets/icon-light.svg",
|
|
18
|
+
dark: "@dbx-tools/ui/branding/assets/icon-dark.svg",
|
|
19
19
|
},
|
|
20
20
|
logo: {
|
|
21
|
-
light: "@dbx-tools/ui
|
|
22
|
-
dark: "@dbx-tools/ui
|
|
21
|
+
light: "@dbx-tools/ui/branding/assets/logo-light.svg",
|
|
22
|
+
dark: "@dbx-tools/ui/branding/assets/logo-dark.svg",
|
|
23
23
|
},
|
|
24
|
-
favicon: "@dbx-tools/ui
|
|
24
|
+
favicon: "@dbx-tools/ui/branding/assets/icon-light.svg",
|
|
25
25
|
} as const;
|
|
26
26
|
|
|
27
27
|
/** Validates light and optional dark variants for one visual asset. */
|
package/src/http.ts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* of those shapes. Dependency-free and browser-safe so it can run in
|
|
7
7
|
* either a server or a client bundle.
|
|
8
8
|
*
|
|
9
|
-
* URL path matching lives
|
|
9
|
+
* URL path matching lives on `net.urlBuilder` (`pathMatches`).
|
|
10
10
|
*
|
|
11
11
|
* @module
|
|
12
12
|
*/
|
package/src/net.ts
CHANGED
|
@@ -42,7 +42,7 @@ const EMAIL_ADDRESS = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
|
42
42
|
// ────────────────────────────────────────────────────────────────
|
|
43
43
|
|
|
44
44
|
/**
|
|
45
|
-
* Anything {@link urlBuilder}
|
|
45
|
+
* Anything {@link urlBuilder} knows how to coerce
|
|
46
46
|
* into a URL:
|
|
47
47
|
*
|
|
48
48
|
* - A string: a host, a full URL, or a path / query / hash fragment.
|
|
@@ -218,23 +218,6 @@ export function urlBuilder(input?: UrlLike): UrlBuilder | undefined {
|
|
|
218
218
|
return url ? urlBuilder(url) : undefined;
|
|
219
219
|
}
|
|
220
220
|
|
|
221
|
-
/**
|
|
222
|
-
* Convenience wrapper over {@link UrlBuilder.pathMatches}: coerce
|
|
223
|
-
* `input` via {@link urlBuilder} and test its pathname against `path`.
|
|
224
|
-
* Returns `false` for input that can't be parsed into a URL.
|
|
225
|
-
*
|
|
226
|
-
* @example
|
|
227
|
-
* pathMatch("/api/cool?q=1", "/api"); // true
|
|
228
|
-
* pathMatch("/apicool", "/api"); // false
|
|
229
|
-
* pathMatch("https://host/api", "/api"); // true
|
|
230
|
-
* pathMatch(request, "/api/v2"); // fetch Request
|
|
231
|
-
*/
|
|
232
|
-
export function pathMatch(input: UrlLike, path: string): boolean {
|
|
233
|
-
const urlb = urlBuilder(input);
|
|
234
|
-
if (!urlb) return false;
|
|
235
|
-
return urlb.pathMatches(path);
|
|
236
|
-
}
|
|
237
|
-
|
|
238
221
|
/**
|
|
239
222
|
* Base origin for resolving path-only inputs. In a browser this is the
|
|
240
223
|
* current page's origin (`window.location.origin`), so `urlBuilder("/api")`
|
package/src/object.ts
CHANGED
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
* can be derived from it, and {@link NameLike}/{@link NonFunctionKeys} describe
|
|
17
17
|
* object shapes.
|
|
18
18
|
*
|
|
19
|
-
* Iterable helpers: {@link
|
|
20
|
-
*
|
|
19
|
+
* Iterable helpers: {@link sequence} wraps source(s) in a lazy, `Array`-compatible
|
|
20
|
+
* {@link Sequence}. Every
|
|
21
21
|
* transform/terminal is a standalone function operating on plain {@link
|
|
22
22
|
* Container}s (see {@link map}, {@link filter}, {@link group}, ...); the {@link
|
|
23
23
|
* Sequence} methods are thin forwarders over them so the same logic backs both
|
|
@@ -775,31 +775,6 @@ export function sequence<T>(...sources: readonly SequenceSource<T>[]): Sequence<
|
|
|
775
775
|
);
|
|
776
776
|
}
|
|
777
777
|
|
|
778
|
-
/**
|
|
779
|
-
* Flattens a mix of single items and iterables into one lazy {@link Generator}.
|
|
780
|
-
*
|
|
781
|
-
* Arguments are emitted in order: `null`/`undefined` are skipped, non-string
|
|
782
|
-
* iterables (per {@link isContainer}) are yielded element-by-element, and
|
|
783
|
-
* anything else (including strings) is yielded as a single item.
|
|
784
|
-
*
|
|
785
|
-
* @typeParam T - Element type produced by the generator.
|
|
786
|
-
* @param items - Items and/or iterables to flatten, in order.
|
|
787
|
-
* @returns A generator over the flattened elements.
|
|
788
|
-
*/
|
|
789
|
-
export function* generator<T>(
|
|
790
|
-
...items: readonly (T | Iterable<T> | null | undefined)[]
|
|
791
|
-
): Generator<T> {
|
|
792
|
-
for (const item of items) {
|
|
793
|
-
if (item === null || item === undefined) {
|
|
794
|
-
continue;
|
|
795
|
-
} else if (isContainer(item)) {
|
|
796
|
-
yield* item;
|
|
797
|
-
} else {
|
|
798
|
-
yield item;
|
|
799
|
-
}
|
|
800
|
-
}
|
|
801
|
-
}
|
|
802
|
-
|
|
803
778
|
// ---------------------------------------------------------------------------
|
|
804
779
|
// Object value guards, coercions, and structural equality
|
|
805
780
|
// ---------------------------------------------------------------------------
|
package/src/options.ts
CHANGED
|
@@ -44,6 +44,43 @@ export type DatabricksEnvironmentNames = z.output<typeof DatabricksEnvironmentNa
|
|
|
44
44
|
/** Canonical Databricks environment names derived from the owning schema. */
|
|
45
45
|
export const databricksEnvironmentNames = Object.freeze(DatabricksEnvironmentNamesSchema.parse({}));
|
|
46
46
|
|
|
47
|
+
export const PostgresEnvironmentNamesSchema = z
|
|
48
|
+
.object({
|
|
49
|
+
postgresRole: environmentName(
|
|
50
|
+
"DBX_TOOLS_POSTGRES_ROLE",
|
|
51
|
+
"PostgreSQL assumed-role environment.",
|
|
52
|
+
),
|
|
53
|
+
})
|
|
54
|
+
.strict()
|
|
55
|
+
.describe("Canonical dbx-tools PostgreSQL environment names.");
|
|
56
|
+
|
|
57
|
+
export type PostgresEnvironmentNames = z.output<typeof PostgresEnvironmentNamesSchema>;
|
|
58
|
+
|
|
59
|
+
/** Canonical PostgreSQL environment names derived from the owning schema. */
|
|
60
|
+
export const postgresEnvironmentNames = Object.freeze(PostgresEnvironmentNamesSchema.parse({}));
|
|
61
|
+
|
|
62
|
+
export const postgresRoleSchema = z
|
|
63
|
+
.string()
|
|
64
|
+
.trim()
|
|
65
|
+
.min(1)
|
|
66
|
+
.regex(
|
|
67
|
+
/^[A-Za-z0-9._@+-]{1,255}$/,
|
|
68
|
+
"PostgreSQL role must contain only letters, numbers, dot, underscore, at, plus, or hyphen.",
|
|
69
|
+
)
|
|
70
|
+
.describe("PostgreSQL role assumed after authentication.");
|
|
71
|
+
|
|
72
|
+
export const PostgresOptionsSchema = z
|
|
73
|
+
.object({
|
|
74
|
+
postgresRole: postgresRoleSchema
|
|
75
|
+
.optional()
|
|
76
|
+
.describe("PostgreSQL role assumed after authentication.")
|
|
77
|
+
.meta({ env: postgresEnvironmentNames.postgresRole }),
|
|
78
|
+
})
|
|
79
|
+
.strict()
|
|
80
|
+
.describe("Shared PostgreSQL session options.");
|
|
81
|
+
|
|
82
|
+
export type PostgresOptions = z.input<typeof PostgresOptionsSchema>;
|
|
83
|
+
|
|
47
84
|
export const tcpPortSchema = z.coerce
|
|
48
85
|
.number<number>()
|
|
49
86
|
.int()
|
|
@@ -125,7 +162,7 @@ export const DatabricksOptionsSchema = z
|
|
|
125
162
|
|
|
126
163
|
export type DatabricksOptions = z.input<typeof DatabricksOptionsSchema>;
|
|
127
164
|
|
|
128
|
-
/** Key format
|
|
165
|
+
/** Key format used when serializing parsed options. */
|
|
129
166
|
export type OptionSerializationFormat = "flag" | "env";
|
|
130
167
|
|
|
131
168
|
interface OptionProperty {
|
|
@@ -135,15 +172,6 @@ interface OptionProperty {
|
|
|
135
172
|
readonly flag?: boolean;
|
|
136
173
|
}
|
|
137
174
|
|
|
138
|
-
/** Serialize complete parsed options as JSON keyed by flags or environment names. */
|
|
139
|
-
export function serializeOpts<T extends z.ZodRawShape>(
|
|
140
|
-
schema: z.ZodObject<T>,
|
|
141
|
-
values: z.input<z.ZodObject<T>>,
|
|
142
|
-
format: OptionSerializationFormat,
|
|
143
|
-
): string {
|
|
144
|
-
return JSON.stringify(serializedOpts(schema, values, format), null, 2);
|
|
145
|
-
}
|
|
146
|
-
|
|
147
175
|
/** Serialize complete parsed options as a process environment map. */
|
|
148
176
|
export function serializeOptsEnvironment<T extends z.ZodRawShape>(
|
|
149
177
|
schema: z.ZodObject<T>,
|