@fjall/util 0.87.4 → 0.87.8
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/dist/src/Config.d.ts +4 -0
- package/dist/src/Config.js +54 -34
- package/package.json +2 -2
package/dist/src/Config.d.ts
CHANGED
|
@@ -80,6 +80,10 @@ export declare class Config {
|
|
|
80
80
|
* @throws Error if config file cannot be parsed or fails schema validation
|
|
81
81
|
*/
|
|
82
82
|
static loadConfig(): Config;
|
|
83
|
+
/**
|
|
84
|
+
* Format a Zod error into a readable error message
|
|
85
|
+
*/
|
|
86
|
+
private static formatZodError;
|
|
83
87
|
/**
|
|
84
88
|
* Save configuration to file
|
|
85
89
|
*/
|
package/dist/src/Config.js
CHANGED
|
@@ -4,7 +4,6 @@ exports.Config = void 0;
|
|
|
4
4
|
const fs = require("fs");
|
|
5
5
|
const path = require("path");
|
|
6
6
|
const zod_1 = require("zod");
|
|
7
|
-
const logger_js_1 = require("./logger.js");
|
|
8
7
|
/**
|
|
9
8
|
* Maximum depth for searching up the directory tree for config files.
|
|
10
9
|
* Prevents infinite loops when traversing directories.
|
|
@@ -81,7 +80,8 @@ const AccountSchema = zod_1.z
|
|
|
81
80
|
Name: zod_1.z.string().optional(),
|
|
82
81
|
Status: zod_1.z.enum(["ACTIVE", "SUSPENDED", "PENDING_CLOSURE"]).optional(),
|
|
83
82
|
JoinedMethod: zod_1.z.enum(["INVITED", "CREATED"]).optional(),
|
|
84
|
-
|
|
83
|
+
// z.coerce.date() handles both Date objects (from AWS SDK) and ISO 8601 strings (from JSON parsing)
|
|
84
|
+
JoinedTimestamp: zod_1.z.coerce.date().optional()
|
|
85
85
|
})
|
|
86
86
|
.strict();
|
|
87
87
|
/**
|
|
@@ -116,16 +116,10 @@ class Config {
|
|
|
116
116
|
if (fs.existsSync(configFile)) {
|
|
117
117
|
return fjallDir;
|
|
118
118
|
}
|
|
119
|
-
logger_js_1.logger.debug("Config", "Config file not found in fjall subdirectory", {
|
|
120
|
-
path: configFile
|
|
121
|
-
});
|
|
122
119
|
const directConfigFile = path.join(currentDir, "fjall-config.json");
|
|
123
120
|
if (fs.existsSync(directConfigFile)) {
|
|
124
121
|
return currentDir;
|
|
125
122
|
}
|
|
126
|
-
logger_js_1.logger.debug("Config", "Config file not found in directory", {
|
|
127
|
-
path: directConfigFile
|
|
128
|
-
});
|
|
129
123
|
const parentDir = path.dirname(currentDir);
|
|
130
124
|
if (parentDir === currentDir)
|
|
131
125
|
break;
|
|
@@ -143,11 +137,7 @@ class Config {
|
|
|
143
137
|
fs.accessSync(configFile, fs.constants.R_OK | fs.constants.W_OK);
|
|
144
138
|
return fs.readFileSync(configFile, { encoding: "utf8" });
|
|
145
139
|
}
|
|
146
|
-
catch
|
|
147
|
-
logger_js_1.logger.debug("Config", "Failed to load config file", {
|
|
148
|
-
path: configFile,
|
|
149
|
-
error: err instanceof Error ? err.message : String(err)
|
|
150
|
-
});
|
|
140
|
+
catch {
|
|
151
141
|
return null;
|
|
152
142
|
}
|
|
153
143
|
}
|
|
@@ -165,28 +155,58 @@ class Config {
|
|
|
165
155
|
const rootConfigJson = Config.loadConfigFile(path.join(configDir, "fjall-config.json"));
|
|
166
156
|
const existingAccountJson = Config.loadConfigFile(path.join(configDir, "accounts-config.json"));
|
|
167
157
|
const costAllocationTagsJson = Config.loadConfigFile(path.join(configDir, "cost-allocation-tags-config.json"));
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
158
|
+
// Parse each config file separately to identify which one fails
|
|
159
|
+
let rootConfig;
|
|
160
|
+
let existingAccountsConfig;
|
|
161
|
+
let costAllocationTagsConfig;
|
|
162
|
+
// 1. Parse root config (fjall-config.json)
|
|
163
|
+
if (rootConfigJson) {
|
|
164
|
+
try {
|
|
165
|
+
rootConfig = RootConfigSchema.parse(JSON.parse(rootConfigJson));
|
|
166
|
+
}
|
|
167
|
+
catch (err) {
|
|
168
|
+
throw Config.formatZodError(err, "fjall-config.json");
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
// 2. Parse accounts config (accounts-config.json)
|
|
172
|
+
if (existingAccountJson) {
|
|
173
|
+
try {
|
|
174
|
+
const raw = JSON.parse(existingAccountJson);
|
|
175
|
+
existingAccountsConfig = zod_1.z.array(AccountSchema).parse(raw);
|
|
176
|
+
}
|
|
177
|
+
catch (err) {
|
|
178
|
+
throw Config.formatZodError(err, "accounts-config.json");
|
|
179
|
+
}
|
|
185
180
|
}
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
181
|
+
// 3. Parse cost allocation tags config
|
|
182
|
+
if (costAllocationTagsJson) {
|
|
183
|
+
try {
|
|
184
|
+
const raw = JSON.parse(costAllocationTagsJson);
|
|
185
|
+
costAllocationTagsConfig = zod_1.z.array(CostAllocationTagsSchema).parse(raw);
|
|
186
|
+
}
|
|
187
|
+
catch (err) {
|
|
188
|
+
throw Config.formatZodError(err, "cost-allocation-tags-config.json");
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
return new Config(rootConfig, existingAccountsConfig, costAllocationTagsConfig);
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Format a Zod error into a readable error message
|
|
195
|
+
*/
|
|
196
|
+
static formatZodError(err, fileName) {
|
|
197
|
+
const zodError = err;
|
|
198
|
+
if (zodError.issues &&
|
|
199
|
+
Array.isArray(zodError.issues) &&
|
|
200
|
+
zodError.issues.length > 0) {
|
|
201
|
+
const issueDetails = zodError.issues
|
|
202
|
+
.map((issue) => `${issue.path.join(".")}: ${issue.message}`)
|
|
203
|
+
.join("; ");
|
|
204
|
+
return new Error(`Failed to parse ${fileName}: ${issueDetails}`);
|
|
189
205
|
}
|
|
206
|
+
// Fall back to the error message, but replace newlines to keep it on one line
|
|
207
|
+
const rawMessage = err instanceof Error ? err.message : String(err);
|
|
208
|
+
const message = rawMessage.replace(/\n/g, " ").substring(0, 500);
|
|
209
|
+
return new Error(`Failed to parse ${fileName}: ${message}`);
|
|
190
210
|
}
|
|
191
211
|
/**
|
|
192
212
|
* Save configuration to file
|
|
@@ -365,4 +385,4 @@ class Config {
|
|
|
365
385
|
}
|
|
366
386
|
}
|
|
367
387
|
exports.Config = Config;
|
|
368
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL0NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLDZCQUF3QjtBQUN4QiwyQ0FBcUM7QUFJckM7OztHQUdHO0FBQ0gsTUFBTSx1QkFBdUIsR0FBRyxFQUFFLENBQUM7QUEyRG5DLDZCQUE2QjtBQUM3QixNQUFNLGtCQUFrQixHQUFHLE9BQUM7S0FDekIsTUFBTSxDQUFDO0lBQ04sY0FBYyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUU7SUFDMUIsYUFBYSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUU7Q0FDMUIsQ0FBQztLQUNELE1BQU0sRUFBRSxDQUFDO0FBRVosTUFBTSxtQkFBbUIsR0FBRyxPQUFDO0tBQzFCLE1BQU0sQ0FBQztJQUNOLEVBQUUsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO0lBQ2QsSUFBSSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDM0IsT0FBTyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDOUIsT0FBTyxFQUFFLE9BQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzlDLFlBQVksRUFBRSxrQkFBa0IsQ0FBQyxRQUFRLEVBQUU7SUFDM0MsZ0JBQWdCLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUN4QyxDQUFDO0tBQ0QsTUFBTSxFQUFFLENBQUM7QUFFWixNQUFNLHFCQUFxQixHQUFHLE9BQUM7S0FDNUIsTUFBTSxDQUFDO0lBQ04sRUFBRSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUU7SUFDZCxJQUFJLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNoQixXQUFXLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtJQUN2QixPQUFP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V0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnZXIuanNcIjtcbmltcG9ydCB0eXBlIHsgQWNjb3VudCB9IGZyb20gXCJAYXdzLXNkay9jbGllbnQtb3JnYW5pemF0aW9uc1wiO1xuZXhwb3J0IHR5cGUgeyBBY2NvdW50IH0gZnJvbSBcIkBhd3Mtc2RrL2NsaWVudC1vcmdhbml6YXRpb25zXCI7XG5cbi8qKlxuICogTWF4aW11bSBkZXB0aCBmb3Igc2VhcmNoaW5nIHVwIHRoZSBkaXJlY3RvcnkgdHJlZSBmb3IgY29uZmlnIGZpbGVzLlxuICogUHJldmVudHMgaW5maW5pdGUgbG9vcHMgd2hlbiB0cmF2ZXJzaW5nIGRpcmVjdG9yaWVzLlxuICovXG5jb25zdCBDT05GSUdfU0VBUkNIX01BWF9ERVBUSCA9IDEwO1xuXG5leHBvcnQgdHlwZSBTZXJ2aWNlQ29uZmlnID0ge1xuICBpZDogc3RyaW5nO1xuICB0eXBlPzogc3RyaW5nO1xuICB2ZXJzaW9uPzogbnVtYmVyO1xuICBvcHRpb25zPzogb2JqZWN0O1xuICBkb2NrZXJDb25maWc/OiB7XG4gICAgZG9ja2VyZmlsZVBhdGg6IHN0cmluZztcbiAgICBjb250YWluZXJQb3J0OiBudW1iZXI7XG4gIH07XG4gIGFwaUFwcGxpY2F0aW9uSWQ/OiBzdHJpbmc7IC8vIEZqYWxsIEFQSSBhcHBsaWNhdGlvbiBJRFxufTtcblxuZXhwb3J0IHR5cGUgUHJvdmlkZXJBY2NvdW50ID0ge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGVudmlyb25tZW50OiBzdHJpbmc7XG4gIG1hbmFnZWQ/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgUHJvZmlsZSA9IHtcbiAgdHlwZTogXCJpYW1cIiB8IFwic3NvXCIgfCBcIm9pZGNcIjtcbiAgcmVnaW9uOiBzdHJpbmc7XG4gIC8vIFNTTyBwcm9maWxlc1xuICBzc29BY2NvdW50SWQ/OiBzdHJpbmc7XG4gIHNzb1JvbGVOYW1lPzogc3RyaW5nO1xuICBzc29TZXNzaW9uPzogc3RyaW5nO1xuICAvLyBJQU0gcHJvZmlsZXNcbiAgY3JlZGVudGlhbFNvdXJjZT86IFwia2V5Y2hhaW5cIjtcbiAgLy8gT0lEQyBwcm9maWxlcyAoQ0kvQ0QpXG4gIG9pZGNSb2xlQXJuPzogc3RyaW5nO1xuICBvaWRjUHJvdmlkZXJBcm4/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBTU09TZXNzaW9uID0ge1xuICBzc29SZWdpb246IHN0cmluZztcbiAgc3NvU3RhcnRVcmw6IHN0cmluZztcbn07XG5cbnR5cGUgUm9vdENvbmZpZyA9IHtcbiAgdmVyc2lvbj86IG51bWJlcjtcbiAgZGV2ZWxvcG1lbnQ/OiBib29sZWFuO1xuICBzZXJ2aWNlcz86IHsgW2tleTogc3RyaW5nXTogU2VydmljZUNvbmZpZyB9O1xuICBwcm92aWRlckFjY291bnRzPzogUHJvdmlkZXJBY2NvdW50W107XG4gIHByaW1hcnlSZWdpb24/OiBzdHJpbmc7XG4gIHNlY29uZGFyeVJlZ2lvbnM/OiBzdHJpbmdbXTtcbiAgZGlzYXN0ZXJSZWNvdmVyeVJlZ2lvbj86IHN0cmluZztcbiAgLy8gUHJvZmlsZSBtYW5hZ2VtZW50XG4gIGN1cnJlbnRQcm9maWxlPzogc3RyaW5nO1xuICBwcm9maWxlcz86IHsgW2tleTogc3RyaW5nXTogUHJvZmlsZSB9O1xuICBzc29TZXNzaW9ucz86IHsgW2tleTogc3RyaW5nXTogU1NPU2Vzc2lvbiB9O1xufTtcblxudHlwZSBDb3N0QWxsb2NhdGlvblRhZ3MgPSB7XG4gIFRhZ0tleTogc3RyaW5nO1xuICBTdGF0dXM6IHN0cmluZztcbn07XG5cbi8vIFpvZCBzY2hlbWFzIGZvciB2YWxpZGF0aW9uXG5jb25zdCBEb2NrZXJDb25maWdTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIGRvY2tlcmZpbGVQYXRoOiB6LnN0cmluZygpLFxuICAgIGNvbnRhaW5lclBvcnQ6IHoubnVtYmVyKClcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5jb25zdCBTZXJ2aWNlQ29uZmlnU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBpZDogei5zdHJpbmcoKSxcbiAgICB0eXBlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgdmVyc2lvbjogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgIG9wdGlvbnM6IHoub2JqZWN0KHt9KS5wYXNzdGhyb3VnaCgpLm9wdGlvbmFsKCksXG4gICAgZG9ja2VyQ29uZmlnOiBEb2NrZXJDb25maWdTY2hlbWEub3B0aW9uYWwoKSxcbiAgICBhcGlBcHBsaWNhdGlvbklkOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5jb25zdCBQcm92aWRlckFjY291bnRTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIGlkOiB6LnN0cmluZygpLFxuICAgIG5hbWU6IHouc3RyaW5nKCksXG4gICAgZW52aXJvbm1lbnQ6IHouc3RyaW5nKCksXG4gICAgbWFuYWdlZDogei5ib29sZWFuKCkub3B0aW9uYWwoKVxuICB9KVxuICAuc3RyaWN0KCk7XG5cbmNvbnN0IFByb2ZpbGVTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIHR5cGU6IHouZW51bShbXCJpYW1cIiwgXCJzc29cIiwgXCJvaWRjXCJdKSxcbiAgICByZWdpb246IHouc3RyaW5nKCksXG4gICAgc3NvQWNjb3VudElkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgc3NvUm9sZU5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBzc29TZXNzaW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgY3JlZGVudGlhbFNvdXJjZTogei5saXRlcmFsKFwia2V5Y2hhaW5cIikub3B0aW9uYWwoKSxcbiAgICBvaWRjUm9sZUFybjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIG9pZGNQcm92aWRlckFybjogei5zdHJpbmcoKS5vcHRpb25hbCgpXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuY29uc3QgU1NPU2Vzc2lvblNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgc3NvUmVnaW9uOiB6LnN0cmluZygpLFxuICAgIHNzb1N0YXJ0VXJsOiB6LnN0cmluZygpXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuY29uc3QgUm9vdENvbmZpZ1NjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgdmVyc2lvbjogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgIGRldmVsb3BtZW50OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICAgIHNlcnZpY2VzOiB6LnJlY29yZCh6LnN0cmluZygpLCBTZXJ2aWNlQ29uZmlnU2NoZW1hKS5vcHRpb25hbCgpLFxuICAgIHByb3ZpZGVyQWNjb3VudHM6IHouYXJyYXkoUHJvdmlkZXJBY2NvdW50U2NoZW1hKS5vcHRpb25hbCgpLFxuICAgIHByaW1hcnlSZWdpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBzZWNvbmRhcnlSZWdpb25zOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gICAgZGlzYXN0ZXJSZWNvdmVyeVJlZ2lvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGN1cnJlbnRQcm9maWxlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgcHJvZmlsZXM6IHoucmVjb3JkKHouc3RyaW5nKCksIFByb2ZpbGVTY2hlbWEpLm9wdGlvbmFsKCksXG4gICAgc3NvU2Vzc2lvbnM6IHoucmVjb3JkKHouc3RyaW5nKCksIFNTT1Nlc3Npb25TY2hlbWEpLm9wdGlvbmFsKClcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5jb25zdCBDb3N0QWxsb2NhdGlvblRhZ3NTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIFRhZ0tleTogei5zdHJpbmcoKSxcbiAgICBTdGF0dXM6IHouc3RyaW5nKClcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5jb25zdCBBY2NvdW50U2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIEFybjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIEVtYWlsOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgTmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIFN0YXR1czogei5lbnVtKFtcIkFDVElWRVwiLCBcIlNVU1BFTkRFRFwiLCBcIlBFTkRJTkdfQ0xPU1VSRVwiXSkub3B0aW9uYWwoKSxcbiAgICBKb2luZWRNZXRob2Q6IHouZW51bShbXCJJTlZJVEVEXCIsIFwiQ1JFQVRFRFwiXSkub3B0aW9uYWwoKSxcbiAgICBKb2luZWRUaW1lc3RhbXA6IHouZGF0ZSgpLm9wdGlvbmFsKClcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG4vKipcbiAqIFRoZSBjdXJyZW50IGJhc2UtdmVyc2lvbiBvZiBhbnkgbmV3bHkgY3JlYXRlZCBjb25maWcgZmlsZVxuICovXG5jb25zdCBCQVNFX0NPTkZJR19WRVJTSU9OID0gMC4xO1xuXG4vKipcbiAqIENvbmZpZyBjbGFzcyBmb3IgbG9hZGluZyBhbmQgc2F2aW5nIGZqYWxsLWNvbmZpZy5qc29uIGZpbGVcbiAqL1xuZXhwb3J0IGNsYXNzIENvbmZpZyB7XG4gIHJvb3RDb25maWc6IFJvb3RDb25maWc7XG4gIGV4aXN0aW5nQWNjb3VudHNDb25maWc6IEFjY291bnRbXTtcbiAgY29zdEFsbG9jYXRpb25UYWdzQ29uZmlnOiBDb3N0QWxsb2NhdGlvblRhZ3NbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICByb290Q29uZmlnPzogUm9vdENvbmZpZyxcbiAgICBleGlzdGluZ0FjY291bnRzQ29uZmlnPzogQWNjb3VudFtdLFxuICAgIGNvc3RBbGxvY2F0aW9uVGFnc0NvbmZpZz86IENvc3RBbGxvY2F0aW9uVGFnc1tdXG4gICkge1xuICAgIHRoaXMucm9vdENvbmZpZyA9IHJvb3RDb25maWcgPz8ge1xuICAgICAgdmVyc2lvbjogQkFTRV9DT05GSUdfVkVSU0lPTixcbiAgICAgIHNlcnZpY2VzOiB7fSxcbiAgICAgIHByb3ZpZGVyQWNjb3VudHM6IFtdXG4gICAgfTtcbiAgICB0aGlzLmV4aXN0aW5nQWNjb3VudHNDb25maWcgPSBleGlzdGluZ0FjY291bnRzQ29uZmlnID8/IFtdO1xuICAgIHRoaXMuY29zdEFsbG9jYXRpb25UYWdzQ29uZmlnID0gY29zdEFsbG9jYXRpb25UYWdzQ29uZmlnID8/IFtdO1xuICB9XG5cbiAgaXNEZXZlbG9wbWVudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnJvb3RDb25maWc/LmRldmVsb3BtZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgdGhlIGZqYWxsIGNvbmZpZyBkaXJlY3RvcnkgYnkgd2Fsa2luZyB1cCB0aGUgZGlyZWN0b3J5IHRyZWVcbiAgICogQHJldHVybnMgVGhlIHBhdGggdG8gdGhlIGZqYWxsIGNvbmZpZyBkaXJlY3Rvcnkgb3IgbnVsbCBpZiBub3QgZm91bmRcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGZpbmRDb25maWdEaXJlY3RvcnkoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgbGV0IGN1cnJlbnREaXIgPSBwcm9jZXNzLmN3ZCgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBDT05GSUdfU0VBUkNIX01BWF9ERVBUSDsgaSsrKSB7XG4gICAgICBjb25zdCBmamFsbERpciA9IHBhdGguam9pbihjdXJyZW50RGlyLCBcImZqYWxsXCIpO1xuICAgICAgY29uc3QgY29uZmlnRmlsZSA9IHBhdGguam9pbihmamFsbERpciwgXCJmamFsbC1jb25maWcuanNvblwiKTtcblxuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoY29uZmlnRmlsZSkpIHtcbiAgICAgICAgcmV0dXJuIGZqYWxsRGlyO1xuICAgICAgfVxuICAgICAgbG9nZ2VyLmRlYnVnKFwiQ29uZmlnXCIsIFwiQ29uZmlnIGZpbGUgbm90IGZvdW5kIGluIGZqYWxsIHN1YmRpcmVjdG9yeVwiLCB7XG4gICAgICAgIHBhdGg6IGNvbmZpZ0ZpbGVcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBkaXJlY3RDb25maWdGaWxlID0gcGF0aC5qb2luKGN1cnJlbnREaXIsIFwiZmphbGwtY29uZmlnLmpzb25cIik7XG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhkaXJlY3RDb25maWdGaWxlKSkge1xuICAgICAgICByZXR1cm4gY3VycmVudERpcjtcbiAgICAgIH1cbiAgICAgIGxvZ2dlci5kZWJ1ZyhcIkNvbmZpZ1wiLCBcIkNvbmZpZyBmaWxlIG5vdCBmb3VuZCBpbiBkaXJlY3RvcnlcIiwge1xuICAgICAgICBwYXRoOiBkaXJlY3RDb25maWdGaWxlXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcGFyZW50RGlyID0gcGF0aC5kaXJuYW1lKGN1cnJlbnREaXIpO1xuICAgICAgaWYgKHBhcmVudERpciA9PT0gY3VycmVudERpcikgYnJlYWs7XG4gICAgICBjdXJyZW50RGlyID0gcGFyZW50RGlyO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgY29uZmlnIGZpbGUgaW50byBtZW1vcnkgYXMgYSByYXcgSlNPTiBzdHJpbmdcbiAgICogQHBhcmFtIGNvbmZpZ0ZpbGUgLSBQYXRoIHRvIHRoZSBjb25maWcgZmlsZVxuICAgKiBAcmV0dXJucyBDb25maWcgYXMgSlNPTiBzdHJpbmcgb3IgTlVMTCBpZiBubyBjb25maWcgZmlsZSBhY2Nlc3NpYmxlXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBsb2FkQ29uZmlnRmlsZShjb25maWdGaWxlOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgICB0cnkge1xuICAgICAgZnMuYWNjZXNzU3luYyhjb25maWdGaWxlLCBmcy5jb25zdGFudHMuUl9PSyB8IGZzLmNvbnN0YW50cy5XX09LKTtcbiAgICAgIHJldHVybiBmcy5yZWFkRmlsZVN5bmMoY29uZmlnRmlsZSwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2dnZXIuZGVidWcoXCJDb25maWdcIiwgXCJGYWlsZWQgdG8gbG9hZCBjb25maWcgZmlsZVwiLCB7XG4gICAgICAgIHBhdGg6IGNvbmZpZ0ZpbGUsXG4gICAgICAgIGVycm9yOiBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycilcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgY29uZmlndXJhdGlvbiBmcm9tIGZpbGVcbiAgICpcbiAgICogQHJldHVybnMgTG9hZGVkIGNvbmZpZ3VyYXRpb25cbiAgICogQHRocm93cyBFcnJvciBpZiBjb25maWcgZmlsZSBjYW5ub3QgYmUgcGFyc2VkIG9yIGZhaWxzIHNjaGVtYSB2YWxpZGF0aW9uXG4gICAqL1xuICBzdGF0aWMgbG9hZENvbmZpZygpOiBDb25maWcge1xuICAgIGNvbnN0IGNvbmZpZ0RpciA9IENvbmZpZy5maW5kQ29uZmlnRGlyZWN0b3J5KCk7XG4gICAgaWYgKCFjb25maWdEaXIpIHtcbiAgICAgIHJldHVybiBuZXcgQ29uZmlnKCk7XG4gICAgfVxuXG4gICAgY29uc3Qgcm9vdENvbmZpZ0pzb24gPSBDb25maWcubG9hZENvbmZpZ0ZpbGUoXG4gICAgICBwYXRoLmpvaW4oY29uZmlnRGlyLCBcImZqYWxsLWNvbmZpZy5qc29uXCIpXG4gICAgKTtcbiAgICBjb25zdCBleGlzdGluZ0FjY291bnRKc29uID0gQ29uZmlnLmxvYWRDb25maWdGaWxlKFxuICAgICAgcGF0aC5qb2luKGNvbmZpZ0RpciwgXCJhY2NvdW50cy1jb25maWcuanNvblwiKVxuICAgICk7XG4gICAgY29uc3QgY29zdEFsbG9jYXRpb25UYWdzSnNvbiA9IENvbmZpZy5sb2FkQ29uZmlnRmlsZShcbiAgICAgIHBhdGguam9pbihjb25maWdEaXIsIFwiY29zdC1hbGxvY2F0aW9uLXRhZ3MtY29uZmlnLmpzb25cIilcbiAgICApO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJvb3RDb25maWcgPSByb290Q29uZmlnSnNvblxuICAgICAgICA/IFJvb3RDb25maWdTY2hlbWEucGFyc2UoSlNPTi5wYXJzZShyb290Q29uZmlnSnNvbikpXG4gICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICBjb25zdCBleGlzdGluZ0FjY291bnRzQ29uZmlnUmF3ID0gZXhpc3RpbmdBY2NvdW50SnNvblxuICAgICAgICA/IEpTT04ucGFyc2UoZXhpc3RpbmdBY2NvdW50SnNvbilcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBleGlzdGluZ0FjY291bnRzQ29uZmlnID0gZXhpc3RpbmdBY2NvdW50c0NvbmZpZ1Jhd1xuICAgICAgICA/IHouYXJyYXkoQWNjb3VudFNjaGVtYSkucGFyc2UoZXhpc3RpbmdBY2NvdW50c0NvbmZpZ1JhdylcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgIGNvbnN0IGNvc3RBbGxvY2F0aW9uVGFnc0NvbmZpZ1JhdyA9IGNvc3RBbGxvY2F0aW9uVGFnc0pzb25cbiAgICAgICAgPyBKU09OLnBhcnNlKGNvc3RBbGxvY2F0aW9uVGFnc0pzb24pXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgY29uc3QgY29zdEFsbG9jYXRpb25UYWdzQ29uZmlnID0gY29zdEFsbG9jYXRpb25UYWdzQ29uZmlnUmF3XG4gICAgICAgID8gei5hcnJheShDb3N0QWxsb2NhdGlvblRhZ3NTY2hlbWEpLnBhcnNlKGNvc3RBbGxvY2F0aW9uVGFnc0NvbmZpZ1JhdylcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgIHJldHVybiBuZXcgQ29uZmlnKFxuICAgICAgICByb290Q29uZmlnLFxuICAgICAgICBleGlzdGluZ0FjY291bnRzQ29uZmlnLFxuICAgICAgICBjb3N0QWxsb2NhdGlvblRhZ3NDb25maWdcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gcGFyc2UgY29uZmlnIGZpbGU6ICR7bWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSBjb25maWd1cmF0aW9uIHRvIGZpbGVcbiAgICovXG4gIHNhdmVDb25maWcoKTogdm9pZCB7XG4gICAgY29uc3QgY29uZmlnRGlyID1cbiAgICAgIENvbmZpZy5maW5kQ29uZmlnRGlyZWN0b3J5KCkgfHwgcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIFwiZmphbGxcIik7XG5cbiAgICAvLyBFbnN1cmUgZGlyZWN0b3J5IGV4aXN0c1xuICAgIGZzLm1rZGlyU3luYyhjb25maWdEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gICAgY29uc3Qgcm9vdEpzb25TdHJpbmcgPSBKU09OLnN0cmluZ2lmeSh0aGlzLnJvb3RDb25maWcsIG51bGwsIDIpO1xuICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKGNvbmZpZ0RpciwgXCJmamFsbC1jb25maWcuanNvblwiKSwgcm9vdEpzb25TdHJpbmcpO1xuXG4gICAgY29uc3QgZXhpc3RpbmdBY2NvdW50c0pzb25TdHJpbmcgPSBKU09OLnN0cmluZ2lmeShcbiAgICAgIHRoaXMuZXhpc3RpbmdBY2NvdW50c0NvbmZpZyxcbiAgICAgIG51bGwsXG4gICAgICAyXG4gICAgKTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgcGF0aC5qb2luKGNvbmZpZ0RpciwgXCJhY2NvdW50cy1jb25maWcuanNvblwiKSxcbiAgICAgIGV4aXN0aW5nQWNjb3VudHNKc29uU3RyaW5nXG4gICAgKTtcblxuICAgIGNvbnN0IGNvc3RBbGxvY2F0aW9uVGFnc0pzb25TdHJpbmcgPSBKU09OLnN0cmluZ2lmeShcbiAgICAgIHRoaXMuY29zdEFsbG9jYXRpb25UYWdzQ29uZmlnLFxuICAgICAgbnVsbCxcbiAgICAgIDJcbiAgICApO1xuICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICBwYXRoLmpvaW4oY29uZmlnRGlyLCBcImNvc3QtYWxsb2NhdGlvbi10YWdzLWNvbmZpZy5qc29uXCIpLFxuICAgICAgY29zdEFsbG9jYXRpb25UYWdzSnNvblN0cmluZ1xuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgbmV3IHNlcnZpY2UgdG8gdGhlIGNvbmZpZyBmaWxlXG4gICAqIEBwYXJhbSBzZXJ2aWNlS2V5IE5hbWUva2V5IG9mIHRoZSBzZXJ2aWNlXG4gICAqIEBwYXJhbSBjb25maWcgU2VydmljZSBjb25maWd1cmF0aW9uIHByb3BlcnRpZXNcbiAgICovXG4gIGFkZFNlcnZpY2Uoc2VydmljZUtleTogc3RyaW5nLCBjb25maWc6IFNlcnZpY2VDb25maWcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucm9vdENvbmZpZy5zZXJ2aWNlcykgdGhpcy5yb290Q29uZmlnLnNlcnZpY2VzID0ge307XG4gICAgdGhpcy5yb290Q29uZmlnLnNlcnZpY2VzW3NlcnZpY2VLZXldID0gY29uZmlnO1xuICB9XG5cbiAgZ2V0U2VydmljZUNvbmZpZyhzZXJ2aWNlS2V5OiBzdHJpbmcpOiBTZXJ2aWNlQ29uZmlnIHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLnJvb3RDb25maWcuc2VydmljZXMpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLnJvb3RDb25maWcuc2VydmljZXNbc2VydmljZUtleV0gfHwgbnVsbDtcbiAgfVxuXG4gIGFkZFByb3ZpZGVyQWNjb3VudChhY2NvdW50OiBQcm92aWRlckFjY291bnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucm9vdENvbmZpZy5wcm92aWRlckFjY291bnRzKVxuICAgICAgdGhpcy5yb290Q29uZmlnLnByb3ZpZGVyQWNjb3VudHMgPSBbXTtcblxuICAgIC8vIGVuc3VyZSBhY2NvdW50IG5hbWUgaXMgYWx3YXlzIGxvd2VyY2FzZVxuICAgIGFjY291bnQubmFtZSA9IGFjY291bnQubmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuXG4gICAgdGhpcy5yb290Q29uZmlnLnByb3ZpZGVyQWNjb3VudHMucHVzaChhY2NvdW50KTtcbiAgfVxuXG4gIGdldFByb3ZpZGVyQWNjb3VudChhY2NvdW50TmFtZTogc3RyaW5nKTogUHJvdmlkZXJBY2NvdW50IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMucm9vdENvbmZpZy5wcm92aWRlckFjY291bnRzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiB0aGlzLnJvb3RDb25maWcucHJvdmlkZXJBY2NvdW50cy5maW5kKFxuICAgICAgKGFjY291bnQpID0+XG4gICAgICAgIGFjY291bnQubmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSBhY2NvdW50TmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpXG4gICAgKTtcbiAgfVxuXG4gIGdldFByb3ZpZGVyQWNjb3VudEJ5SWQoYWNjb3VudElkOiBzdHJpbmcpOiBQcm92aWRlckFjY291bnQgfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy5yb290Q29uZmlnLnByb3ZpZGVyQWNjb3VudHMpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHRoaXMucm9vdENvbmZpZy5wcm92aWRlckFjY291bnRzLmZpbmQoXG4gICAgICAoYWNjb3VudCkgPT4gYWNjb3VudC5pZCA9PT0gYWNjb3VudElkXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgcHJvdmlkZXIgYWNjb3VudCBieSBlbnZpcm9ubWVudCB0eXBlXG4gICAqIEBwYXJhbSBlbnZpcm9ubWVudCBUaGUgZW52aXJvbm1lbnQgdHlwZSAoZS5nLiwgJ3BsYXRmb3JtJywgJ3N0YWdpbmcnLCAncHJvZHVjdGlvbicpXG4gICAqIEByZXR1cm5zIFRoZSBwcm92aWRlciBhY2NvdW50IHdpdGggdGhlIHNwZWNpZmllZCBlbnZpcm9ubWVudCBvciB1bmRlZmluZWQgaWYgbm90IGZvdW5kXG4gICAqL1xuICBnZXRBY2NvdW50QnlFbnZpcm9ubWVudChlbnZpcm9ubWVudDogc3RyaW5nKTogUHJvdmlkZXJBY2NvdW50IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMucm9vdENvbmZpZy5wcm92aWRlckFjY291bnRzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiB0aGlzLnJvb3RDb25maWcucHJvdmlkZXJBY2NvdW50cy5maW5kKFxuICAgICAgKGFjY291bnQpID0+IGFjY291bnQuZW52aXJvbm1lbnQgPT09IGVudmlyb25tZW50XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBleGlzdGluZyBhY2NvdW50cyBsaXN0LiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgYnkgQWNjb3VudFNlcnZpY2VcbiAgICogYWZ0ZXIgaXQgZmV0Y2hlcyB0aGUgYWNjb3VudHMgZnJvbSBBV1MuXG4gICAqIEBwYXJhbSBhY2NvdW50cyBMaXN0IG9mIEFXUyBhY2NvdW50cyBmcm9tIE9yZ2FuaXphdGlvbnMgQVBJXG4gICAqL1xuICBzZXRFeGlzdGluZ0FjY291bnRzTGlzdChhY2NvdW50czogQWNjb3VudFtdKTogdm9pZCB7XG4gICAgdGhpcy5leGlzdGluZ0FjY291bnRzQ29uZmlnID0gYWNjb3VudHM7XG4gIH1cblxuICBnZXRFeGlzdGluZ0FjY291bnRzKCk6IEFjY291bnRbXSB7XG4gICAgcmV0dXJuIHRoaXMuZXhpc3RpbmdBY2NvdW50c0NvbmZpZztcbiAgfVxuXG4gIHNldFByaW1hcnlSZWdpb24ocmVnaW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnJvb3RDb25maWcucHJpbWFyeVJlZ2lvbiA9IHJlZ2lvbjtcbiAgfVxuXG4gIHNldFNlY29uZGFyeVJlZ2lvbnMocmVnaW9uczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICB0aGlzLnJvb3RDb25maWcuc2Vjb25kYXJ5UmVnaW9ucyA9IHJlZ2lvbnM7XG4gIH1cblxuICBzZXREaXNhc3RlclJlY292ZXJ5UmVnaW9uKHJlZ2lvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5yb290Q29uZmlnLmRpc2FzdGVyUmVjb3ZlcnlSZWdpb24gPSByZWdpb247XG4gIH1cblxuICBnZXRQcmltYXJ5UmVnaW9uKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucm9vdENvbmZpZy5wcmltYXJ5UmVnaW9uO1xuICB9XG5cbiAgZ2V0U2Vjb25kYXJ5UmVnaW9ucygpOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucm9vdENvbmZpZy5zZWNvbmRhcnlSZWdpb25zO1xuICB9XG5cbiAgZ2V0RGlzYXN0ZXJSZWNvdmVyeVJlZ2lvbigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJvb3RDb25maWcuZGlzYXN0ZXJSZWNvdmVyeVJlZ2lvbjtcbiAgfVxuXG4gIGdldEFsbFJlZ2lvbnMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHJlZ2lvbnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAodGhpcy5yb290Q29uZmlnLnByaW1hcnlSZWdpb24pIHtcbiAgICAgIHJlZ2lvbnMucHVzaCh0aGlzLnJvb3RDb25maWcucHJpbWFyeVJlZ2lvbik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucm9vdENvbmZpZy5zZWNvbmRhcnlSZWdpb25zKSB7XG4gICAgICByZWdpb25zLnB1c2goLi4udGhpcy5yb290Q29uZmlnLnNlY29uZGFyeVJlZ2lvbnMpO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHRoaXMucm9vdENvbmZpZy5kaXNhc3RlclJlY292ZXJ5UmVnaW9uICYmXG4gICAgICAhcmVnaW9ucy5pbmNsdWRlcyh0aGlzLnJvb3RDb25maWcuZGlzYXN0ZXJSZWNvdmVyeVJlZ2lvbilcbiAgICApIHtcbiAgICAgIHJlZ2lvbnMucHVzaCh0aGlzLnJvb3RDb25maWcuZGlzYXN0ZXJSZWNvdmVyeVJlZ2lvbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlZ2lvbnM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgY29zdCBhbGxvY2F0aW9uIHRhZ3MgbGlzdC4gVGhpcyBzaG91bGQgYmUgY2FsbGVkIGJ5IEFjY291bnRTZXJ2aWNlXG4gICAqIGFmdGVyIGl0IGZldGNoZXMgdGhlIHRhZ3MgZnJvbSBBV1MgQ29zdCBFeHBsb3Jlci5cbiAgICogQHBhcmFtIHRhZ3MgTGlzdCBvZiBjb3N0IGFsbG9jYXRpb24gdGFnc1xuICAgKi9cbiAgc2V0Q29zdEFsbG9jYXRpb25UYWdzTGlzdCh0YWdzOiBDb3N0QWxsb2NhdGlvblRhZ3NbXSk6IHZvaWQge1xuICAgIHRoaXMuY29zdEFsbG9jYXRpb25UYWdzQ29uZmlnID0gdGFncztcbiAgfVxuXG4gIGdldENvc3RBbGxvY2F0aW9uVGFncygpOiBDb3N0QWxsb2NhdGlvblRhZ3NbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29zdEFsbG9jYXRpb25UYWdzQ29uZmlnO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZmphbGwgY29uZmlnIGRpcmVjdG9yeSBwYXRoXG4gICAqIEByZXR1cm5zIFRoZSBwYXRoIHRvIHRoZSBmamFsbCBjb25maWcgZGlyZWN0b3J5IG9yIG51bGwgaWYgbm90IGZvdW5kXG4gICAqL1xuICBzdGF0aWMgZ2V0Q29uZmlnRGlyZWN0b3J5KCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiBDb25maWcuZmluZENvbmZpZ0RpcmVjdG9yeSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2ZpbGUgbWFuYWdlbWVudCBtZXRob2RzXG4gICAqL1xuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50bHkgYWN0aXZlIHByb2ZpbGUuXG4gICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IHByb2ZpbGUgbmFtZSwgb3IgdW5kZWZpbmVkIGlmIG5vIHByb2ZpbGUgaXMgc2V0XG4gICAqL1xuICBnZXRDdXJyZW50UHJvZmlsZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJvb3RDb25maWcuY3VycmVudFByb2ZpbGU7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgY3VycmVudGx5IGFjdGl2ZSBwcm9maWxlLlxuICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvZmlsZSB0byBzZXQgYXMgY3VycmVudFxuICAgKi9cbiAgc2V0Q3VycmVudFByb2ZpbGUobmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5yb290Q29uZmlnLmN1cnJlbnRQcm9maWxlID0gbmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYSBwcm9maWxlIGJ5IG5hbWUuXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9maWxlIHRvIHJldHJpZXZlXG4gICAqIEByZXR1cm5zIFRoZSBwcm9maWxlIGNvbmZpZ3VyYXRpb24sIG9yIHVuZGVmaW5lZCBpZiBub3QgZm91bmRcbiAgICovXG4gIGdldFByb2ZpbGUobmFtZTogc3RyaW5nKTogUHJvZmlsZSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLnJvb3RDb25maWcucHJvZmlsZXMpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHRoaXMucm9vdENvbmZpZy5wcm9maWxlc1tuYW1lXTtcbiAgfVxuXG4gIGdldEFsbFByb2ZpbGVOYW1lcygpOiBzdHJpbmdbXSB7XG4gICAgaWYgKCF0aGlzLnJvb3RDb25maWcucHJvZmlsZXMpIHJldHVybiBbXTtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5yb290Q29uZmlnLnByb2ZpbGVzKTtcbiAgfVxuXG4gIGFkZFByb2ZpbGUobmFtZTogc3RyaW5nLCBwcm9maWxlOiBQcm9maWxlKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnJvb3RDb25maWcucHJvZmlsZXMpIHtcbiAgICAgIHRoaXMucm9vdENvbmZpZy5wcm9maWxlcyA9IHt9O1xuICAgIH1cbiAgICB0aGlzLnJvb3RDb25maWcucHJvZmlsZXNbbmFtZV0gPSBwcm9maWxlO1xuICB9XG5cbiAgcmVtb3ZlUHJvZmlsZShuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucm9vdENvbmZpZy5wcm9maWxlcykgcmV0dXJuO1xuICAgIGRlbGV0ZSB0aGlzLnJvb3RDb25maWcucHJvZmlsZXNbbmFtZV07XG5cbiAgICAvLyBJZiB3ZSByZW1vdmVkIHRoZSBjdXJyZW50IHByb2ZpbGUsIGNsZWFyIGl0XG4gICAgaWYgKHRoaXMucm9vdENvbmZpZy5jdXJyZW50UHJvZmlsZSA9PT0gbmFtZSkge1xuICAgICAgdGhpcy5yb290Q29uZmlnLmN1cnJlbnRQcm9maWxlID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIGdldFNTT1Nlc3Npb24obmFtZTogc3RyaW5nKTogU1NPU2Vzc2lvbiB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLnJvb3RDb25maWcuc3NvU2Vzc2lvbnMpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHRoaXMucm9vdENvbmZpZy5zc29TZXNzaW9uc1tuYW1lXTtcbiAgfVxuXG4gIGFkZFNTT1Nlc3Npb24obmFtZTogc3RyaW5nLCBzZXNzaW9uOiBTU09TZXNzaW9uKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnJvb3RDb25maWcuc3NvU2Vzc2lvbnMpIHtcbiAgICAgIHRoaXMucm9vdENvbmZpZy5zc29TZXNzaW9ucyA9IHt9O1xuICAgIH1cbiAgICB0aGlzLnJvb3RDb25maWcuc3NvU2Vzc2lvbnNbbmFtZV0gPSBzZXNzaW9uO1xuICB9XG59XG4iXX0=
|
|
388
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL0NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLDZCQUF3QjtBQUl4Qjs7O0dBR0c7QUFDSCxNQUFNLHVCQUF1QixHQUFHLEVBQUUsQ0FBQztBQTJEbkMsNkJBQTZCO0FBQzdCLE1BQU0sa0JBQWtCLEdBQUcsT0FBQztLQUN6QixNQUFNLENBQUM7SUFDTixjQUFjLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtJQUMxQixhQUFhLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtDQUMxQixDQUFDO0tBQ0QsTUFBTSxFQUFFLENBQUM7QUFFWixNQUFNLG1CQUFtQixHQUFHLE9BQUM7S0FDMUIsTUFBTSxDQUFDO0lBQ04sRUFBRSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUU7SUFDZCxJQUFJLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUMzQixPQUFPLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM5QixPQUFPLEVBQUUsT0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDOUMsWUFBWSxFQUFFLGtCQUFrQixDQUFDLFFBQVEsRUFBRTtJQUMzQyxnQkFBZ0IsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0NBQ3hDLENBQUM7S0FDRCxNQUFNLEVBQUUsQ0FBQztBQUVaLE1BQU0scUJBQXFCLEdBQUcsT0FBQztLQUM1QixNQUFNLENBQUM7SUFDTixFQUFFLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNkLElBQUksRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO0lBQ2hCLFdBQVcsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO0lBQ3ZCLE9BQU8sRUFBRSxPQUFDLENB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QUFDLElBQUksQ0FBQyxDQUFDO1FBRXRDLDhDQUE4QztRQUM5QyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzVDLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQztRQUM3QyxDQUFDO0lBQ0gsQ0FBQztJQUVELGFBQWEsQ0FBQyxJQUFZO1FBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVc7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUNuRCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxhQUFhLENBQUMsSUFBWSxFQUFFLE9BQW1CO1FBQzdDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUNuQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDO0lBQzlDLENBQUM7Q0FDRjtBQTNYRCx3QkEyWEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5pbXBvcnQgdHlwZSB7IEFjY291bnQgfSBmcm9tIFwiQGF3cy1zZGsvY2xpZW50LW9yZ2FuaXphdGlvbnNcIjtcbmV4cG9ydCB0eXBlIHsgQWNjb3VudCB9IGZyb20gXCJAYXdzLXNkay9jbGllbnQtb3JnYW5pemF0aW9uc1wiO1xuXG4vKipcbiAqIE1heGltdW0gZGVwdGggZm9yIHNlYXJjaGluZyB1cCB0aGUgZGlyZWN0b3J5IHRyZWUgZm9yIGNvbmZpZyBmaWxlcy5cbiAqIFByZXZlbnRzIGluZmluaXRlIGxvb3BzIHdoZW4gdHJhdmVyc2luZyBkaXJlY3Rvcmllcy5cbiAqL1xuY29uc3QgQ09ORklHX1NFQVJDSF9NQVhfREVQVEggPSAxMDtcblxuZXhwb3J0IHR5cGUgU2VydmljZUNvbmZpZyA9IHtcbiAgaWQ6IHN0cmluZztcbiAgdHlwZT86IHN0cmluZztcbiAgdmVyc2lvbj86IG51bWJlcjtcbiAgb3B0aW9ucz86IG9iamVjdDtcbiAgZG9ja2VyQ29uZmlnPzoge1xuICAgIGRvY2tlcmZpbGVQYXRoOiBzdHJpbmc7XG4gICAgY29udGFpbmVyUG9ydDogbnVtYmVyO1xuICB9O1xuICBhcGlBcHBsaWNhdGlvbklkPzogc3RyaW5nOyAvLyBGamFsbCBBUEkgYXBwbGljYXRpb24gSURcbn07XG5cbmV4cG9ydCB0eXBlIFByb3ZpZGVyQWNjb3VudCA9IHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBlbnZpcm9ubWVudDogc3RyaW5nO1xuICBtYW5hZ2VkPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFByb2ZpbGUgPSB7XG4gIHR5cGU6IFwiaWFtXCIgfCBcInNzb1wiIHwgXCJvaWRjXCI7XG4gIHJlZ2lvbjogc3RyaW5nO1xuICAvLyBTU08gcHJvZmlsZXNcbiAgc3NvQWNjb3VudElkPzogc3RyaW5nO1xuICBzc29Sb2xlTmFtZT86IHN0cmluZztcbiAgc3NvU2Vzc2lvbj86IHN0cmluZztcbiAgLy8gSUFNIHByb2ZpbGVzXG4gIGNyZWRlbnRpYWxTb3VyY2U/OiBcImtleWNoYWluXCI7XG4gIC8vIE9JREMgcHJvZmlsZXMgKENJL0NEKVxuICBvaWRjUm9sZUFybj86IHN0cmluZztcbiAgb2lkY1Byb3ZpZGVyQXJuPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgU1NPU2Vzc2lvbiA9IHtcbiAgc3NvUmVnaW9uOiBzdHJpbmc7XG4gIHNzb1N0YXJ0VXJsOiBzdHJpbmc7XG59O1xuXG50eXBlIFJvb3RDb25maWcgPSB7XG4gIHZlcnNpb24/OiBudW1iZXI7XG4gIGRldmVsb3BtZW50PzogYm9vbGVhbjtcbiAgc2VydmljZXM/OiB7IFtrZXk6IHN0cmluZ106IFNlcnZpY2VDb25maWcgfTtcbiAgcHJvdmlkZXJBY2NvdW50cz86IFByb3ZpZGVyQWNjb3VudFtdO1xuICBwcmltYXJ5UmVnaW9uPzogc3RyaW5nO1xuICBzZWNvbmRhcnlSZWdpb25zPzogc3RyaW5nW107XG4gIGRpc2FzdGVyUmVjb3ZlcnlSZWdpb24/OiBzdHJpbmc7XG4gIC8vIFByb2ZpbGUgbWFuYWdlbWVudFxuICBjdXJyZW50UHJvZmlsZT86IHN0cmluZztcbiAgcHJvZmlsZXM/OiB7IFtrZXk6IHN0cmluZ106IFByb2ZpbGUgfTtcbiAgc3NvU2Vzc2lvbnM/OiB7IFtrZXk6IHN0cmluZ106IFNTT1Nlc3Npb24gfTtcbn07XG5cbnR5cGUgQ29zdEFsbG9jYXRpb25UYWdzID0ge1xuICBUYWdLZXk6IHN0cmluZztcbiAgU3RhdHVzOiBzdHJpbmc7XG59O1xuXG4vLyBab2Qgc2NoZW1hcyBmb3IgdmFsaWRhdGlvblxuY29uc3QgRG9ja2VyQ29uZmlnU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBkb2NrZXJmaWxlUGF0aDogei5zdHJpbmcoKSxcbiAgICBjb250YWluZXJQb3J0OiB6Lm51bWJlcigpXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuY29uc3QgU2VydmljZUNvbmZpZ1NjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgaWQ6IHouc3RyaW5nKCksXG4gICAgdHlwZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIHZlcnNpb246IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgICBvcHRpb25zOiB6Lm9iamVjdCh7fSkucGFzc3Rocm91Z2goKS5vcHRpb25hbCgpLFxuICAgIGRvY2tlckNvbmZpZzogRG9ja2VyQ29uZmlnU2NoZW1hLm9wdGlvbmFsKCksXG4gICAgYXBpQXBwbGljYXRpb25JZDogei5zdHJpbmcoKS5vcHRpb25hbCgpXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuY29uc3QgUHJvdmlkZXJBY2NvdW50U2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBpZDogei5zdHJpbmcoKSxcbiAgICBuYW1lOiB6LnN0cmluZygpLFxuICAgIGVudmlyb25tZW50OiB6LnN0cmluZygpLFxuICAgIG1hbmFnZWQ6IHouYm9vbGVhbigpLm9wdGlvbmFsKClcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5jb25zdCBQcm9maWxlU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICB0eXBlOiB6LmVudW0oW1wiaWFtXCIsIFwic3NvXCIsIFwib2lkY1wiXSksXG4gICAgcmVnaW9uOiB6LnN0cmluZygpLFxuICAgIHNzb0FjY291bnRJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIHNzb1JvbGVOYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgc3NvU2Vzc2lvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGNyZWRlbnRpYWxTb3VyY2U6IHoubGl0ZXJhbChcImtleWNoYWluXCIpLm9wdGlvbmFsKCksXG4gICAgb2lkY1JvbGVBcm46IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBvaWRjUHJvdmlkZXJBcm46IHouc3RyaW5nKCkub3B0aW9uYWwoKVxuICB9KVxuICAuc3RyaWN0KCk7XG5cbmNvbnN0IFNTT1Nlc3Npb25TY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIHNzb1JlZ2lvbjogei5zdHJpbmcoKSxcbiAgICBzc29TdGFydFVybDogei5zdHJpbmcoKVxuICB9KVxuICAuc3RyaWN0KCk7XG5cbmNvbnN0IFJvb3RDb25maWdTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIHZlcnNpb246IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgICBkZXZlbG9wbWVudDogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgICBzZXJ2aWNlczogei5yZWNvcmQoei5zdHJpbmcoKSwgU2VydmljZUNvbmZpZ1NjaGVtYSkub3B0aW9uYWwoKSxcbiAgICBwcm92aWRlckFjY291bnRzOiB6LmFycmF5KFByb3ZpZGVyQWNjb3VudFNjaGVtYSkub3B0aW9uYWwoKSxcbiAgICBwcmltYXJ5UmVnaW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgc2Vjb25kYXJ5UmVnaW9uczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICAgIGRpc2FzdGVyUmVjb3ZlcnlSZWdpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBjdXJyZW50UHJvZmlsZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIHByb2ZpbGVzOiB6LnJlY29yZCh6LnN0cmluZygpLCBQcm9maWxlU2NoZW1hKS5vcHRpb25hbCgpLFxuICAgIHNzb1Nlc3Npb25zOiB6LnJlY29yZCh6LnN0cmluZygpLCBTU09TZXNzaW9uU2NoZW1hKS5vcHRpb25hbCgpXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuY29uc3QgQ29zdEFsbG9jYXRpb25UYWdzU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBUYWdLZXk6IHouc3RyaW5nKCksXG4gICAgU3RhdHVzOiB6LnN0cmluZygpXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuY29uc3QgQWNjb3VudFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgSWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBBcm46IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBFbWFpbDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIE5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBTdGF0dXM6IHouZW51bShbXCJBQ1RJVkVcIiwgXCJTVVNQRU5ERURcIiwgXCJQRU5ESU5HX0NMT1NVUkVcIl0pLm9wdGlvbmFsKCksXG4gICAgSm9pbmVkTWV0aG9kOiB6LmVudW0oW1wiSU5WSVRFRFwiLCBcIkNSRUFURURcIl0pLm9wdGlvbmFsKCksXG4gICAgLy8gei5jb2VyY2UuZGF0ZSgpIGhhbmRsZXMgYm90aCBEYXRlIG9iamVjdHMgKGZyb20gQVdTIFNESykgYW5kIElTTyA4NjAxIHN0cmluZ3MgKGZyb20gSlNPTiBwYXJzaW5nKVxuICAgIEpvaW5lZFRpbWVzdGFtcDogei5jb2VyY2UuZGF0ZSgpLm9wdGlvbmFsKClcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG4vKipcbiAqIFRoZSBjdXJyZW50IGJhc2UtdmVyc2lvbiBvZiBhbnkgbmV3bHkgY3JlYXRlZCBjb25maWcgZmlsZVxuICovXG5jb25zdCBCQVNFX0NPTkZJR19WRVJTSU9OID0gMC4xO1xuXG4vKipcbiAqIENvbmZpZyBjbGFzcyBmb3IgbG9hZGluZyBhbmQgc2F2aW5nIGZqYWxsLWNvbmZpZy5qc29uIGZpbGVcbiAqL1xuZXhwb3J0IGNsYXNzIENvbmZpZyB7XG4gIHJvb3RDb25maWc6IFJvb3RDb25maWc7XG4gIGV4aXN0aW5nQWNjb3VudHNDb25maWc6IEFjY291bnRbXTtcbiAgY29zdEFsbG9jYXRpb25UYWdzQ29uZmlnOiBDb3N0QWxsb2NhdGlvblRhZ3NbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICByb290Q29uZmlnPzogUm9vdENvbmZpZyxcbiAgICBleGlzdGluZ0FjY291bnRzQ29uZmlnPzogQWNjb3VudFtdLFxuICAgIGNvc3RBbGxvY2F0aW9uVGFnc0NvbmZpZz86IENvc3RBbGxvY2F0aW9uVGFnc1tdXG4gICkge1xuICAgIHRoaXMucm9vdENvbmZpZyA9IHJvb3RDb25maWcgPz8ge1xuICAgICAgdmVyc2lvbjogQkFTRV9DT05GSUdfVkVSU0lPTixcbiAgICAgIHNlcnZpY2VzOiB7fSxcbiAgICAgIHByb3ZpZGVyQWNjb3VudHM6IFtdXG4gICAgfTtcbiAgICB0aGlzLmV4aXN0aW5nQWNjb3VudHNDb25maWcgPSBleGlzdGluZ0FjY291bnRzQ29uZmlnID8/IFtdO1xuICAgIHRoaXMuY29zdEFsbG9jYXRpb25UYWdzQ29uZmlnID0gY29zdEFsbG9jYXRpb25UYWdzQ29uZmlnID8/IFtdO1xuICB9XG5cbiAgaXNEZXZlbG9wbWVudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnJvb3RDb25maWc/LmRldmVsb3BtZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgdGhlIGZqYWxsIGNvbmZpZyBkaXJlY3RvcnkgYnkgd2Fsa2luZyB1cCB0aGUgZGlyZWN0b3J5IHRyZWVcbiAgICogQHJldHVybnMgVGhlIHBhdGggdG8gdGhlIGZqYWxsIGNvbmZpZyBkaXJlY3Rvcnkgb3IgbnVsbCBpZiBub3QgZm91bmRcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGZpbmRDb25maWdEaXJlY3RvcnkoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgbGV0IGN1cnJlbnREaXIgPSBwcm9jZXNzLmN3ZCgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBDT05GSUdfU0VBUkNIX01BWF9ERVBUSDsgaSsrKSB7XG4gICAgICBjb25zdCBmamFsbERpciA9IHBhdGguam9pbihjdXJyZW50RGlyLCBcImZqYWxsXCIpO1xuICAgICAgY29uc3QgY29uZmlnRmlsZSA9IHBhdGguam9pbihmamFsbERpciwgXCJmamFsbC1jb25maWcuanNvblwiKTtcblxuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoY29uZmlnRmlsZSkpIHtcbiAgICAgICAgcmV0dXJuIGZqYWxsRGlyO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkaXJlY3RDb25maWdGaWxlID0gcGF0aC5qb2luKGN1cnJlbnREaXIsIFwiZmphbGwtY29uZmlnLmpzb25cIik7XG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhkaXJlY3RDb25maWdGaWxlKSkge1xuICAgICAgICByZXR1cm4gY3VycmVudERpcjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFyZW50RGlyID0gcGF0aC5kaXJuYW1lKGN1cnJlbnREaXIpO1xuICAgICAgaWYgKHBhcmVudERpciA9PT0gY3VycmVudERpcikgYnJlYWs7XG4gICAgICBjdXJyZW50RGlyID0gcGFyZW50RGlyO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgY29uZmlnIGZpbGUgaW50byBtZW1vcnkgYXMgYSByYXcgSlNPTiBzdHJpbmdcbiAgICogQHBhcmFtIGNvbmZpZ0ZpbGUgLSBQYXRoIHRvIHRoZSBjb25maWcgZmlsZVxuICAgKiBAcmV0dXJucyBDb25maWcgYXMgSlNPTiBzdHJpbmcgb3IgTlVMTCBpZiBubyBjb25maWcgZmlsZSBhY2Nlc3NpYmxlXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBsb2FkQ29uZmlnRmlsZShjb25maWdGaWxlOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgICB0cnkge1xuICAgICAgZnMuYWNjZXNzU3luYyhjb25maWdGaWxlLCBmcy5jb25zdGFudHMuUl9PSyB8IGZzLmNvbnN0YW50cy5XX09LKTtcbiAgICAgIHJldHVybiBmcy5yZWFkRmlsZVN5bmMoY29uZmlnRmlsZSwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9hZCBjb25maWd1cmF0aW9uIGZyb20gZmlsZVxuICAgKlxuICAgKiBAcmV0dXJucyBMb2FkZWQgY29uZmlndXJhdGlvblxuICAgKiBAdGhyb3dzIEVycm9yIGlmIGNvbmZpZyBmaWxlIGNhbm5vdCBiZSBwYXJzZWQgb3IgZmFpbHMgc2NoZW1hIHZhbGlkYXRpb25cbiAgICovXG4gIHN0YXRpYyBsb2FkQ29uZmlnKCk6IENvbmZpZyB7XG4gICAgY29uc3QgY29uZmlnRGlyID0gQ29uZmlnLmZpbmRDb25maWdEaXJlY3RvcnkoKTtcbiAgICBpZiAoIWNvbmZpZ0Rpcikge1xuICAgICAgcmV0dXJuIG5ldyBDb25maWcoKTtcbiAgICB9XG5cbiAgICBjb25zdCByb290Q29uZmlnSnNvbiA9IENvbmZpZy5sb2FkQ29uZmlnRmlsZShcbiAgICAgIHBhdGguam9pbihjb25maWdEaXIsIFwiZmphbGwtY29uZmlnLmpzb25cIilcbiAgICApO1xuICAgIGNvbnN0IGV4aXN0aW5nQWNjb3VudEpzb24gPSBDb25maWcubG9hZENvbmZpZ0ZpbGUoXG4gICAgICBwYXRoLmpvaW4oY29uZmlnRGlyLCBcImFjY291bnRzLWNvbmZpZy5qc29uXCIpXG4gICAgKTtcbiAgICBjb25zdCBjb3N0QWxsb2NhdGlvblRhZ3NKc29uID0gQ29uZmlnLmxvYWRDb25maWdGaWxlKFxuICAgICAgcGF0aC5qb2luKGNvbmZpZ0RpciwgXCJjb3N0LWFsbG9jYXRpb24tdGFncy1jb25maWcuanNvblwiKVxuICAgICk7XG5cbiAgICAvLyBQYXJzZSBlYWNoIGNvbmZpZyBmaWxlIHNlcGFyYXRlbHkgdG8gaWRlbnRpZnkgd2hpY2ggb25lIGZhaWxzXG4gICAgbGV0IHJvb3RDb25maWc6IFJvb3RDb25maWcgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGV4aXN0aW5nQWNjb3VudHNDb25maWc6IEFjY291bnRbXSB8IHVuZGVmaW5lZDtcbiAgICBsZXQgY29zdEFsbG9jYXRpb25UYWdzQ29uZmlnOiBDb3N0QWxsb2NhdGlvblRhZ3NbXSB8IHVuZGVmaW5lZDtcblxuICAgIC8vIDEuIFBhcnNlIHJvb3QgY29uZmlnIChmamFsbC1jb25maWcuanNvbilcbiAgICBpZiAocm9vdENvbmZpZ0pzb24pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJvb3RDb25maWcgPSBSb290Q29uZmlnU2NoZW1hLnBhcnNlKEpTT04ucGFyc2Uocm9vdENvbmZpZ0pzb24pKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyBDb25maWcuZm9ybWF0Wm9kRXJyb3IoZXJyLCBcImZqYWxsLWNvbmZpZy5qc29uXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDIuIFBhcnNlIGFjY291bnRzIGNvbmZpZyAoYWNjb3VudHMtY29uZmlnLmpzb24pXG4gICAgaWYgKGV4aXN0aW5nQWNjb3VudEpzb24pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJhdyA9IEpTT04ucGFyc2UoZXhpc3RpbmdBY2NvdW50SnNvbik7XG4gICAgICAgIGV4aXN0aW5nQWNjb3VudHNDb25maWcgPSB6LmFycmF5KEFjY291bnRTY2hlbWEpLnBhcnNlKHJhdyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgQ29uZmlnLmZvcm1hdFpvZEVycm9yKGVyciwgXCJhY2NvdW50cy1jb25maWcuanNvblwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAzLiBQYXJzZSBjb3N0IGFsbG9jYXRpb24gdGFncyBjb25maWdcbiAgICBpZiAoY29zdEFsbG9jYXRpb25UYWdzSnNvbikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmF3ID0gSlNPTi5wYXJzZShjb3N0QWxsb2NhdGlvblRhZ3NKc29uKTtcbiAgICAgICAgY29zdEFsbG9jYXRpb25UYWdzQ29uZmlnID0gei5hcnJheShDb3N0QWxsb2NhdGlvblRhZ3NTY2hlbWEpLnBhcnNlKHJhdyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgQ29uZmlnLmZvcm1hdFpvZEVycm9yKGVyciwgXCJjb3N0LWFsbG9jYXRpb24tdGFncy1jb25maWcuanNvblwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IENvbmZpZyhcbiAgICAgIHJvb3RDb25maWcsXG4gICAgICBleGlzdGluZ0FjY291bnRzQ29uZmlnLFxuICAgICAgY29zdEFsbG9jYXRpb25UYWdzQ29uZmlnXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXQgYSBab2QgZXJyb3IgaW50byBhIHJlYWRhYmxlIGVycm9yIG1lc3NhZ2VcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGZvcm1hdFpvZEVycm9yKGVycjogdW5rbm93biwgZmlsZU5hbWU6IHN0cmluZyk6IEVycm9yIHtcbiAgICBjb25zdCB6b2RFcnJvciA9IGVyciBhcyB7XG4gICAgICBpc3N1ZXM/OiBBcnJheTx7IHBhdGg6IEFycmF5PHN0cmluZyB8IG51bWJlcj47IG1lc3NhZ2U6IHN0cmluZyB9PjtcbiAgICB9O1xuICAgIGlmIChcbiAgICAgIHpvZEVycm9yLmlzc3VlcyAmJlxuICAgICAgQXJyYXkuaXNBcnJheSh6b2RFcnJvci5pc3N1ZXMpICYmXG4gICAgICB6b2RFcnJvci5pc3N1ZXMubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgY29uc3QgaXNzdWVEZXRhaWxzID0gem9kRXJyb3IuaXNzdWVzXG4gICAgICAgIC5tYXAoKGlzc3VlKSA9PiBgJHtpc3N1ZS5wYXRoLmpvaW4oXCIuXCIpfTogJHtpc3N1ZS5tZXNzYWdlfWApXG4gICAgICAgIC5qb2luKFwiOyBcIik7XG4gICAgICByZXR1cm4gbmV3IEVycm9yKGBGYWlsZWQgdG8gcGFyc2UgJHtmaWxlTmFtZX06ICR7aXNzdWVEZXRhaWxzfWApO1xuICAgIH1cbiAgICAvLyBGYWxsIGJhY2sgdG8gdGhlIGVycm9yIG1lc3NhZ2UsIGJ1dCByZXBsYWNlIG5ld2xpbmVzIHRvIGtlZXAgaXQgb24gb25lIGxpbmVcbiAgICBjb25zdCByYXdNZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSByYXdNZXNzYWdlLnJlcGxhY2UoL1xcbi9nLCBcIiBcIikuc3Vic3RyaW5nKDAsIDUwMCk7XG4gICAgcmV0dXJuIG5ldyBFcnJvcihgRmFpbGVkIHRvIHBhcnNlICR7ZmlsZU5hbWV9OiAke21lc3NhZ2V9YCk7XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSBjb25maWd1cmF0aW9uIHRvIGZpbGVcbiAgICovXG4gIHNhdmVDb25maWcoKTogdm9pZCB7XG4gICAgY29uc3QgY29uZmlnRGlyID1cbiAgICAgIENvbmZpZy5maW5kQ29uZmlnRGlyZWN0b3J5KCkgfHwgcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIFwiZmphbGxcIik7XG5cbiAgICAvLyBFbnN1cmUgZGlyZWN0b3J5IGV4aXN0c1xuICAgIGZzLm1rZGlyU3luYyhjb25maWdEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gICAgY29uc3Qgcm9vdEpzb25TdHJpbmcgPSBKU09OLnN0cmluZ2lmeSh0aGlzLnJvb3RDb25maWcsIG51bGwsIDIpO1xuICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKGNvbmZpZ0RpciwgXCJmamFsbC1jb25maWcuanNvblwiKSwgcm9vdEpzb25TdHJpbmcpO1xuXG4gICAgY29uc3QgZXhpc3RpbmdBY2NvdW50c0pzb25TdHJpbmcgPSBKU09OLnN0cmluZ2lmeShcbiAgICAgIHRoaXMuZXhpc3RpbmdBY2NvdW50c0NvbmZpZyxcbiAgICAgIG51bGwsXG4gICAgICAyXG4gICAgKTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgcGF0aC5qb2luKGNvbmZpZ0RpciwgXCJhY2NvdW50cy1jb25maWcuanNvblwiKSxcbiAgICAgIGV4aXN0aW5nQWNjb3VudHNKc29uU3RyaW5nXG4gICAgKTtcblxuICAgIGNvbnN0IGNvc3RBbGxvY2F0aW9uVGFnc0pzb25TdHJpbmcgPSBKU09OLnN0cmluZ2lmeShcbiAgICAgIHRoaXMuY29zdEFsbG9jYXRpb25UYWdzQ29uZmlnLFxuICAgICAgbnVsbCxcbiAgICAgIDJcbiAgICApO1xuICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICBwYXRoLmpvaW4oY29uZmlnRGlyLCBcImNvc3QtYWxsb2NhdGlvbi10YWdzLWNvbmZpZy5qc29uXCIpLFxuICAgICAgY29zdEFsbG9jYXRpb25UYWdzSnNvblN0cmluZ1xuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgbmV3IHNlcnZpY2UgdG8gdGhlIGNvbmZpZyBmaWxlXG4gICAqIEBwYXJhbSBzZXJ2aWNlS2V5IE5hbWUva2V5IG9mIHRoZSBzZXJ2aWNlXG4gICAqIEBwYXJhbSBjb25maWcgU2VydmljZSBjb25maWd1cmF0aW9uIHByb3BlcnRpZXNcbiAgICovXG4gIGFkZFNlcnZpY2Uoc2VydmljZUtleTogc3RyaW5nLCBjb25maWc6IFNlcnZpY2VDb25maWcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucm9vdENvbmZpZy5zZXJ2aWNlcykgdGhpcy5yb290Q29uZmlnLnNlcnZpY2VzID0ge307XG4gICAgdGhpcy5yb290Q29uZmlnLnNlcnZpY2VzW3NlcnZpY2VLZXldID0gY29uZmlnO1xuICB9XG5cbiAgZ2V0U2VydmljZUNvbmZpZyhzZXJ2aWNlS2V5OiBzdHJpbmcpOiBTZXJ2aWNlQ29uZmlnIHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLnJvb3RDb25maWcuc2VydmljZXMpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLnJvb3RDb25maWcuc2VydmljZXNbc2VydmljZUtleV0gfHwgbnVsbDtcbiAgfVxuXG4gIGFkZFByb3ZpZGVyQWNjb3VudChhY2NvdW50OiBQcm92aWRlckFjY291bnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucm9vdENvbmZpZy5wcm92aWRlckFjY291bnRzKVxuICAgICAgdGhpcy5yb290Q29uZmlnLnByb3ZpZGVyQWNjb3VudHMgPSBbXTtcblxuICAgIC8vIGVuc3VyZSBhY2NvdW50IG5hbWUgaXMgYWx3YXlzIGxvd2VyY2FzZVxuICAgIGFjY291bnQubmFtZSA9IGFjY291bnQubmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuXG4gICAgdGhpcy5yb290Q29uZmlnLnByb3ZpZGVyQWNjb3VudHMucHVzaChhY2NvdW50KTtcbiAgfVxuXG4gIGdldFByb3ZpZGVyQWNjb3VudChhY2NvdW50TmFtZTogc3RyaW5nKTogUHJvdmlkZXJBY2NvdW50IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMucm9vdENvbmZpZy5wcm92aWRlckFjY291bnRzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiB0aGlzLnJvb3RDb25maWcucHJvdmlkZXJBY2NvdW50cy5maW5kKFxuICAgICAgKGFjY291bnQpID0+XG4gICAgICAgIGFjY291bnQubmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSBhY2NvdW50TmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpXG4gICAgKTtcbiAgfVxuXG4gIGdldFByb3ZpZGVyQWNjb3VudEJ5SWQoYWNjb3VudElkOiBzdHJpbmcpOiBQcm92aWRlckFjY291bnQgfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy5yb290Q29uZmlnLnByb3ZpZGVyQWNjb3VudHMpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHRoaXMucm9vdENvbmZpZy5wcm92aWRlckFjY291bnRzLmZpbmQoXG4gICAgICAoYWNjb3VudCkgPT4gYWNjb3VudC5pZCA9PT0gYWNjb3VudElkXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgcHJvdmlkZXIgYWNjb3VudCBieSBlbnZpcm9ubWVudCB0eXBlXG4gICAqIEBwYXJhbSBlbnZpcm9ubWVudCBUaGUgZW52aXJvbm1lbnQgdHlwZSAoZS5nLiwgJ3BsYXRmb3JtJywgJ3N0YWdpbmcnLCAncHJvZHVjdGlvbicpXG4gICAqIEByZXR1cm5zIFRoZSBwcm92aWRlciBhY2NvdW50IHdpdGggdGhlIHNwZWNpZmllZCBlbnZpcm9ubWVudCBvciB1bmRlZmluZWQgaWYgbm90IGZvdW5kXG4gICAqL1xuICBnZXRBY2NvdW50QnlFbnZpcm9ubWVudChlbnZpcm9ubWVudDogc3RyaW5nKTogUHJvdmlkZXJBY2NvdW50IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMucm9vdENvbmZpZy5wcm92aWRlckFjY291bnRzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiB0aGlzLnJvb3RDb25maWcucHJvdmlkZXJBY2NvdW50cy5maW5kKFxuICAgICAgKGFjY291bnQpID0+IGFjY291bnQuZW52aXJvbm1lbnQgPT09IGVudmlyb25tZW50XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBleGlzdGluZyBhY2NvdW50cyBsaXN0LiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgYnkgQWNjb3VudFNlcnZpY2VcbiAgICogYWZ0ZXIgaXQgZmV0Y2hlcyB0aGUgYWNjb3VudHMgZnJvbSBBV1MuXG4gICAqIEBwYXJhbSBhY2NvdW50cyBMaXN0IG9mIEFXUyBhY2NvdW50cyBmcm9tIE9yZ2FuaXphdGlvbnMgQVBJXG4gICAqL1xuICBzZXRFeGlzdGluZ0FjY291bnRzTGlzdChhY2NvdW50czogQWNjb3VudFtdKTogdm9pZCB7XG4gICAgdGhpcy5leGlzdGluZ0FjY291bnRzQ29uZmlnID0gYWNjb3VudHM7XG4gIH1cblxuICBnZXRFeGlzdGluZ0FjY291bnRzKCk6IEFjY291bnRbXSB7XG4gICAgcmV0dXJuIHRoaXMuZXhpc3RpbmdBY2NvdW50c0NvbmZpZztcbiAgfVxuXG4gIHNldFByaW1hcnlSZWdpb24ocmVnaW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnJvb3RDb25maWcucHJpbWFyeVJlZ2lvbiA9IHJlZ2lvbjtcbiAgfVxuXG4gIHNldFNlY29uZGFyeVJlZ2lvbnMocmVnaW9uczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICB0aGlzLnJvb3RDb25maWcuc2Vjb25kYXJ5UmVnaW9ucyA9IHJlZ2lvbnM7XG4gIH1cblxuICBzZXREaXNhc3RlclJlY292ZXJ5UmVnaW9uKHJlZ2lvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5yb290Q29uZmlnLmRpc2FzdGVyUmVjb3ZlcnlSZWdpb24gPSByZWdpb247XG4gIH1cblxuICBnZXRQcmltYXJ5UmVnaW9uKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucm9vdENvbmZpZy5wcmltYXJ5UmVnaW9uO1xuICB9XG5cbiAgZ2V0U2Vjb25kYXJ5UmVnaW9ucygpOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucm9vdENvbmZpZy5zZWNvbmRhcnlSZWdpb25zO1xuICB9XG5cbiAgZ2V0RGlzYXN0ZXJSZWNvdmVyeVJlZ2lvbigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJvb3RDb25maWcuZGlzYXN0ZXJSZWNvdmVyeVJlZ2lvbjtcbiAgfVxuXG4gIGdldEFsbFJlZ2lvbnMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHJlZ2lvbnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAodGhpcy5yb290Q29uZmlnLnByaW1hcnlSZWdpb24pIHtcbiAgICAgIHJlZ2lvbnMucHVzaCh0aGlzLnJvb3RDb25maWcucHJpbWFyeVJlZ2lvbik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucm9vdENvbmZpZy5zZWNvbmRhcnlSZWdpb25zKSB7XG4gICAgICByZWdpb25zLnB1c2goLi4udGhpcy5yb290Q29uZmlnLnNlY29uZGFyeVJlZ2lvbnMpO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHRoaXMucm9vdENvbmZpZy5kaXNhc3RlclJlY292ZXJ5UmVnaW9uICYmXG4gICAgICAhcmVnaW9ucy5pbmNsdWRlcyh0aGlzLnJvb3RDb25maWcuZGlzYXN0ZXJSZWNvdmVyeVJlZ2lvbilcbiAgICApIHtcbiAgICAgIHJlZ2lvbnMucHVzaCh0aGlzLnJvb3RDb25maWcuZGlzYXN0ZXJSZWNvdmVyeVJlZ2lvbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlZ2lvbnM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgY29zdCBhbGxvY2F0aW9uIHRhZ3MgbGlzdC4gVGhpcyBzaG91bGQgYmUgY2FsbGVkIGJ5IEFjY291bnRTZXJ2aWNlXG4gICAqIGFmdGVyIGl0IGZldGNoZXMgdGhlIHRhZ3MgZnJvbSBBV1MgQ29zdCBFeHBsb3Jlci5cbiAgICogQHBhcmFtIHRhZ3MgTGlzdCBvZiBjb3N0IGFsbG9jYXRpb24gdGFnc1xuICAgKi9cbiAgc2V0Q29zdEFsbG9jYXRpb25UYWdzTGlzdCh0YWdzOiBDb3N0QWxsb2NhdGlvblRhZ3NbXSk6IHZvaWQge1xuICAgIHRoaXMuY29zdEFsbG9jYXRpb25UYWdzQ29uZmlnID0gdGFncztcbiAgfVxuXG4gIGdldENvc3RBbGxvY2F0aW9uVGFncygpOiBDb3N0QWxsb2NhdGlvblRhZ3NbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29zdEFsbG9jYXRpb25UYWdzQ29uZmlnO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZmphbGwgY29uZmlnIGRpcmVjdG9yeSBwYXRoXG4gICAqIEByZXR1cm5zIFRoZSBwYXRoIHRvIHRoZSBmamFsbCBjb25maWcgZGlyZWN0b3J5IG9yIG51bGwgaWYgbm90IGZvdW5kXG4gICAqL1xuICBzdGF0aWMgZ2V0Q29uZmlnRGlyZWN0b3J5KCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiBDb25maWcuZmluZENvbmZpZ0RpcmVjdG9yeSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2ZpbGUgbWFuYWdlbWVudCBtZXRob2RzXG4gICAqL1xuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50bHkgYWN0aXZlIHByb2ZpbGUuXG4gICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IHByb2ZpbGUgbmFtZSwgb3IgdW5kZWZpbmVkIGlmIG5vIHByb2ZpbGUgaXMgc2V0XG4gICAqL1xuICBnZXRDdXJyZW50UHJvZmlsZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJvb3RDb25maWcuY3VycmVudFByb2ZpbGU7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgY3VycmVudGx5IGFjdGl2ZSBwcm9maWxlLlxuICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvZmlsZSB0byBzZXQgYXMgY3VycmVudFxuICAgKi9cbiAgc2V0Q3VycmVudFByb2ZpbGUobmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5yb290Q29uZmlnLmN1cnJlbnRQcm9maWxlID0gbmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYSBwcm9maWxlIGJ5IG5hbWUuXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9maWxlIHRvIHJldHJpZXZlXG4gICAqIEByZXR1cm5zIFRoZSBwcm9maWxlIGNvbmZpZ3VyYXRpb24sIG9yIHVuZGVmaW5lZCBpZiBub3QgZm91bmRcbiAgICovXG4gIGdldFByb2ZpbGUobmFtZTogc3RyaW5nKTogUHJvZmlsZSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLnJvb3RDb25maWcucHJvZmlsZXMpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHRoaXMucm9vdENvbmZpZy5wcm9maWxlc1tuYW1lXTtcbiAgfVxuXG4gIGdldEFsbFByb2ZpbGVOYW1lcygpOiBzdHJpbmdbXSB7XG4gICAgaWYgKCF0aGlzLnJvb3RDb25maWcucHJvZmlsZXMpIHJldHVybiBbXTtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5yb290Q29uZmlnLnByb2ZpbGVzKTtcbiAgfVxuXG4gIGFkZFByb2ZpbGUobmFtZTogc3RyaW5nLCBwcm9maWxlOiBQcm9maWxlKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnJvb3RDb25maWcucHJvZmlsZXMpIHtcbiAgICAgIHRoaXMucm9vdENvbmZpZy5wcm9maWxlcyA9IHt9O1xuICAgIH1cbiAgICB0aGlzLnJvb3RDb25maWcucHJvZmlsZXNbbmFtZV0gPSBwcm9maWxlO1xuICB9XG5cbiAgcmVtb3ZlUHJvZmlsZShuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucm9vdENvbmZpZy5wcm9maWxlcykgcmV0dXJuO1xuICAgIGRlbGV0ZSB0aGlzLnJvb3RDb25maWcucHJvZmlsZXNbbmFtZV07XG5cbiAgICAvLyBJZiB3ZSByZW1vdmVkIHRoZSBjdXJyZW50IHByb2ZpbGUsIGNsZWFyIGl0XG4gICAgaWYgKHRoaXMucm9vdENvbmZpZy5jdXJyZW50UHJvZmlsZSA9PT0gbmFtZSkge1xuICAgICAgdGhpcy5yb290Q29uZmlnLmN1cnJlbnRQcm9maWxlID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIGdldFNTT1Nlc3Npb24obmFtZTogc3RyaW5nKTogU1NPU2Vzc2lvbiB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLnJvb3RDb25maWcuc3NvU2Vzc2lvbnMpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHRoaXMucm9vdENvbmZpZy5zc29TZXNzaW9uc1tuYW1lXTtcbiAgfVxuXG4gIGFkZFNTT1Nlc3Npb24obmFtZTogc3RyaW5nLCBzZXNzaW9uOiBTU09TZXNzaW9uKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnJvb3RDb25maWcuc3NvU2Vzc2lvbnMpIHtcbiAgICAgIHRoaXMucm9vdENvbmZpZy5zc29TZXNzaW9ucyA9IHt9O1xuICAgIH1cbiAgICB0aGlzLnJvb3RDb25maWcuc3NvU2Vzc2lvbnNbbmFtZV0gPSBzZXNzaW9uO1xuICB9XG59XG4iXX0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fjall/util",
|
|
3
|
-
"version": "0.87.
|
|
3
|
+
"version": "0.87.8",
|
|
4
4
|
"description": "Common utility methods",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -33,5 +33,5 @@
|
|
|
33
33
|
"engines": {
|
|
34
34
|
"node": ">=18.0.0"
|
|
35
35
|
},
|
|
36
|
-
"gitHead": "
|
|
36
|
+
"gitHead": "dc14e33d3b3f2e3b507d2efd93ac63025946422c"
|
|
37
37
|
}
|