@cartanova/qgrid-cli 2.0.3 → 2.1.1
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/bundle/dist/application/qgrid/qgrid.frame.js +39 -25
- package/bundle/dist/application/request-log/request-log.model.js +1 -1
- package/bundle/dist/utils/providers/common/model-cost.js +6 -1
- package/bundle/dist/utils/providers/openai/codex-worker.js +100 -35
- package/bundle/dist/utils/providers/openai/openai-dispatcher.js +11 -1
- package/bundle/src/application/qgrid/qgrid.frame.ts +51 -28
- package/bundle/src/application/request-log/request-log.model.ts +1 -3
- package/bundle/src/utils/providers/common/model-cost.ts +1 -0
- package/bundle/src/utils/providers/openai/codex-worker.test.ts +72 -0
- package/bundle/src/utils/providers/openai/codex-worker.ts +129 -22
- package/bundle/src/utils/providers/openai/openai-dispatcher.test.ts +59 -0
- package/bundle/src/utils/providers/openai/openai-dispatcher.ts +12 -0
- package/package.json +1 -1
|
@@ -39,6 +39,11 @@ async function deleteOAuthState(state) {
|
|
|
39
39
|
if (!cache) return;
|
|
40
40
|
await cache.delete({ key: `${OAUTH_STATE_PREFIX}${state}` });
|
|
41
41
|
}
|
|
42
|
+
function getOAuthRedirectUri() {
|
|
43
|
+
const publicBaseUrl = process.env.QGRID_PUBLIC_BASE_URL?.replace(/\/+$/, "");
|
|
44
|
+
if (publicBaseUrl) return `${publicBaseUrl}/callback`;
|
|
45
|
+
return `http://localhost:${process.env.PORT ?? "44900"}/callback`;
|
|
46
|
+
}
|
|
42
47
|
const logger = getLogger(["qgrid"]);
|
|
43
48
|
const oauthLogger = getLogger(["qgrid", "oauth"]);
|
|
44
49
|
var QgridFrameClass = class extends BaseFrameClass {
|
|
@@ -62,30 +67,37 @@ var QgridFrameClass = class extends BaseFrameClass {
|
|
|
62
67
|
}
|
|
63
68
|
}
|
|
64
69
|
const result = await QgridDispatcher.query(args, args.timeout);
|
|
65
|
-
if (effectiveLogMode === "auto")
|
|
66
|
-
const toolCallCount = result.content.filter((item) => item.type === "tool-call").length;
|
|
67
|
-
const responseText = result.content.filter((item) => item.type === "text").map((item) => item.text).join("\n");
|
|
68
|
-
RequestLogModel.save([{
|
|
69
|
-
token_name: result.tokenName,
|
|
70
|
-
project_name: args.projectName?.length ? args.projectName : null,
|
|
71
|
-
model_name: result.model ?? null,
|
|
72
|
-
user_prompt: args.prompt,
|
|
73
|
-
system_prompt: args.system ?? null,
|
|
74
|
-
response: responseText,
|
|
75
|
-
input_tokens: result.usage.input_tokens,
|
|
76
|
-
output_tokens: result.usage.output_tokens,
|
|
77
|
-
cache_read_tokens: result.usage.cache_read_input_tokens,
|
|
78
|
-
cache_creation_tokens: result.usage.cache_creation_input_tokens,
|
|
79
|
-
duration_ms: result.durationMs,
|
|
80
|
-
cost_usd: result.costUsd !== null ? Math.round(result.costUsd * MICRO_USD) : null,
|
|
81
|
-
effort: args.effort ?? null,
|
|
82
|
-
history: args.history ? JSON.parse(args.history) : null,
|
|
83
|
-
status: "succeeded",
|
|
84
|
-
tool_call_count: toolCallCount
|
|
85
|
-
}]).catch((e) => logger.error(`requestLog save failed: ${e.message}`));
|
|
86
|
-
}
|
|
70
|
+
if (effectiveLogMode === "auto") this.saveAutoRequestLog(args, result);
|
|
87
71
|
return result;
|
|
88
72
|
}
|
|
73
|
+
saveAutoRequestLog(args, result) {
|
|
74
|
+
const toolCallCount = result.content.filter((item) => item.type === "tool-call").length;
|
|
75
|
+
const responseText = result.content.filter((item) => item.type === "text").map((item) => item.text).join("\n");
|
|
76
|
+
RequestLogModel.save([{
|
|
77
|
+
token_name: result.tokenName,
|
|
78
|
+
project_name: args.projectName?.length ? args.projectName : null,
|
|
79
|
+
model_name: result.model ?? null,
|
|
80
|
+
user_prompt: args.prompt,
|
|
81
|
+
system_prompt: args.system ?? null,
|
|
82
|
+
response: responseText,
|
|
83
|
+
input_tokens: result.usage.input_tokens,
|
|
84
|
+
output_tokens: result.usage.output_tokens,
|
|
85
|
+
cache_read_tokens: result.usage.cache_read_input_tokens,
|
|
86
|
+
cache_creation_tokens: result.usage.cache_creation_input_tokens,
|
|
87
|
+
duration_ms: result.durationMs,
|
|
88
|
+
cost_usd: result.costUsd !== null ? Math.round(result.costUsd * MICRO_USD) : null,
|
|
89
|
+
effort: args.effort ?? null,
|
|
90
|
+
history: (() => {
|
|
91
|
+
try {
|
|
92
|
+
return args.history ? JSON.parse(args.history) : null;
|
|
93
|
+
} catch {
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
})(),
|
|
97
|
+
status: "succeeded",
|
|
98
|
+
tool_call_count: toolCallCount
|
|
99
|
+
}]).catch((e) => logger.error(`requestLog save failed: ${e.message}`));
|
|
100
|
+
}
|
|
89
101
|
async prepareStream(args) {
|
|
90
102
|
const streamId = crypto.randomUUID();
|
|
91
103
|
pendingStreams.set(streamId, args);
|
|
@@ -96,7 +108,8 @@ var QgridFrameClass = class extends BaseFrameClass {
|
|
|
96
108
|
const args = pendingStreams.get(streamId);
|
|
97
109
|
pendingStreams.delete(streamId);
|
|
98
110
|
if (!args) throw new Error("invalid or expired streamId");
|
|
99
|
-
const
|
|
111
|
+
const effectiveLogMode = args.logMode ?? (args.isStep ? "run" : "auto");
|
|
112
|
+
const shouldLog = effectiveLogMode === "run";
|
|
100
113
|
let runInfo;
|
|
101
114
|
if (shouldLog) try {
|
|
102
115
|
runInfo = await beforeQuery(args);
|
|
@@ -141,6 +154,7 @@ var QgridFrameClass = class extends BaseFrameClass {
|
|
|
141
154
|
} catch (e) {
|
|
142
155
|
logger.error(`stream afterQuery failed: ${e.message}`);
|
|
143
156
|
}
|
|
157
|
+
else if (effectiveLogMode === "auto") this.saveAutoRequestLog(args, streamResult);
|
|
144
158
|
if (!sse.closed) sse.publish("done", {
|
|
145
159
|
...streamResult,
|
|
146
160
|
runContext
|
|
@@ -249,7 +263,7 @@ var QgridFrameClass = class extends BaseFrameClass {
|
|
|
249
263
|
}
|
|
250
264
|
async oauthStart(name) {
|
|
251
265
|
const { codeVerifier, codeChallenge, state } = generatePKCE();
|
|
252
|
-
const redirectUri =
|
|
266
|
+
const redirectUri = getOAuthRedirectUri();
|
|
253
267
|
const authUrl = buildAuthUrl(codeChallenge, state, redirectUri);
|
|
254
268
|
await setOAuthState(state, {
|
|
255
269
|
codeVerifier,
|
|
@@ -553,4 +567,4 @@ function convertAnthropicUsage(raw) {
|
|
|
553
567
|
//#endregion
|
|
554
568
|
export { QgridFrame };
|
|
555
569
|
|
|
556
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWdyaWQuZnJhbWUuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3FncmlkL3FncmlkLmZyYW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjcnlwdG8gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5cbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gXCJAbG9ndGFwZS9sb2d0YXBlXCI7XG5pbXBvcnQgeyB0eXBlIEZhc3RpZnlSZXBseSB9IGZyb20gXCJmYXN0aWZ5XCI7XG5pbXBvcnQgeyBhcGksIEJhc2VGcmFtZUNsYXNzLCBTb25hbXUsIHN0cmVhbSB9IGZyb20gXCJzb25hbXVcIjtcbmltcG9ydCB7IGdldENhY2hlTWFuYWdlclJlZiB9IGZyb20gXCJzb25hbXUvY2FjaGVcIjtcblxuaW1wb3J0IHtcbiAgZ2V0QWNjZXNzVG9rZW4sXG4gIGdldEV4cGlyZXNBdCxcbiAgZ2V0UmVmcmVzaFRva2VuLFxufSBmcm9tIFwiLi4vLi4vdXRpbHMvcHJvdmlkZXJzL2NvbW1vbi9jcmVkZW50aWFsc1wiO1xuaW1wb3J0IHsgTUlDUk9fVVNELCBSZXF1ZXN0TG9nTW9kZWwgfSBmcm9tIFwiLi4vcmVxdWVzdC1sb2cvcmVxdWVzdC1sb2cubW9kZWxcIjtcbmltcG9ydCB7IHR5cGUgVG9rZW5TdWJzZXRBIH0gZnJvbSBcIi4uL3NvbmFtdS5nZW5lcmF0ZWRcIjtcbmltcG9ydCB7IFRva2VuTW9kZWwgfSBmcm9tIFwiLi4vdG9rZW4vdG9rZW4ubW9kZWxcIjtcbmltcG9ydCB7IFRva2VuQ3JlZGVudGlhbHMgfSBmcm9tIFwiLi4vdG9rZW4vdG9rZW4udHlwZXNcIjtcbmltcG9ydCB7XG4gIHR5cGUgQW50aHJvcGljVXNhZ2VSYXcsXG4gIGJ1aWxkQXV0aFVybCxcbiAgZXhjaGFuZ2VDb2RlRm9yVG9rZW5zLFxuICBmZXRjaFVzYWdlLFxuICBnZW5lcmF0ZVBLQ0UsXG4gIHJlZnJlc2hBY2Nlc3NUb2tlbixcbn0gZnJvbSBcIi4vb2F1dGhcIjtcbmltcG9ydCB7XG4gIGFmdGVyUXVlcnksXG4gIGJlZm9yZVF1ZXJ5LFxuICBmaW5pc2hSdW5BYm9ydGVkLFxuICBmaW5pc2hSdW5XaXRoRXJyb3IsXG59IGZyb20gXCIuL3FncmlkLXJ1bi1saWZlY3ljbGVcIjtcbmltcG9ydCB7IFFncmlkRGlzcGF0Y2hlciB9IGZyb20gXCIuL3FncmlkLmRpc3BhdGNoZXJcIjtcbmltcG9ydCB7XG4gIHR5cGUgUXVlcnlJbnB1dCxcbiAgdHlwZSBBcHBlbmRTdGVwSW5wdXQsXG4gIHR5cGUgQ3JlYXRlUnVuSW5wdXQsXG4gIHR5cGUgRmluaXNoUnVuSW5wdXQsXG4gIHR5cGUgSGVhbHRoUmVzcG9uc2UsXG4gIHR5cGUgT0F1dGhTdGFydFJlc3VsdCxcbiAgdHlwZSBRdWVyeU91dHB1dCxcbiAgU3RyZWFtRXZlbnRzLFxuICB0eXBlIFRva2VuU3RhdHMsXG4gIHR5cGUgVXNhZ2VSZXNwb25zZSxcbn0gZnJvbSBcIi4vcWdyaWQudHlwZXNcIjtcblxuY29uc3QgcGVuZGluZ1N0cmVhbXMgPSBuZXcgTWFwPHN0cmluZywgUXVlcnlJbnB1dD4oKTtcblxudHlwZSBQZW5kaW5nT0F1dGggPSB7IGNvZGVWZXJpZmllcjogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IHJlZGlyZWN0VXJpOiBzdHJpbmcgfTtcbmNvbnN0IE9BVVRIX1NUQVRFX1BSRUZJWCA9IFwib2F1dGg6c3RhdGU6XCI7XG5jb25zdCBPQVVUSF9TVEFURV9UVEwgPSBcIjVtXCI7XG5cbmFzeW5jIGZ1bmN0aW9uIHNldE9BdXRoU3RhdGUoc3RhdGU6IHN0cmluZywgZGF0YTogUGVuZGluZ09BdXRoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGNhY2hlID0gZ2V0Q2FjaGVNYW5hZ2VyUmVmKCk7XG4gIGlmICghY2FjaGUpIHRocm93IG5ldyBFcnJvcihcIkNhY2hlTWFuYWdlciBub3QgaW5pdGlhbGl6ZWRcIik7XG4gIGF3YWl0IGNhY2hlLnNldCh7XG4gICAga2V5OiBgJHtPQVVUSF9TVEFURV9QUkVGSVh9JHtzdGF0ZX1gLFxuICAgIHZhbHVlOiBKU09OLnN0cmluZ2lmeShkYXRhKSxcbiAgICB0dGw6IE9BVVRIX1NUQVRFX1RUTCxcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldE9BdXRoU3RhdGUoc3RhdGU6IHN0cmluZyk6IFByb21pc2U8UGVuZGluZ09BdXRoIHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IGNhY2hlID0gZ2V0Q2FjaGVNYW5hZ2VyUmVmKCk7XG4gIGlmICghY2FjaGUpIHRocm93IG5ldyBFcnJvcihcIkNhY2hlTWFuYWdlciBub3QgaW5pdGlhbGl6ZWRcIik7XG4gIGNvbnN0IHJhdyA9IGF3YWl0IGNhY2hlLmdldDxzdHJpbmc+KHsga2V5OiBgJHtPQVVUSF9TVEFURV9QUkVGSVh9JHtzdGF0ZX1gIH0pO1xuICBpZiAoIXJhdykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIEpTT04ucGFyc2UocmF3KSBhcyBQZW5kaW5nT0F1dGg7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRlbGV0ZU9BdXRoU3RhdGUoc3RhdGU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBjYWNoZSA9IGdldENhY2hlTWFuYWdlclJlZigpO1xuICBpZiAoIWNhY2hlKSByZXR1cm47XG4gIGF3YWl0IGNhY2hlLmRlbGV0ZSh7IGtleTogYCR7T0FVVEhfU1RBVEVfUFJFRklYfSR7c3RhdGV9YCB9KTtcbn1cblxuY29uc3QgbG9nZ2VyID0gZ2V0TG9nZ2VyKFtcInFncmlkXCJdKTtcbmNvbnN0IG9hdXRoTG9nZ2VyID0gZ2V0TG9nZ2VyKFtcInFncmlkXCIsIFwib2F1dGhcIl0pO1xuXG5jbGFzcyBRZ3JpZEZyYW1lQ2xhc3MgZXh0ZW5kcyBCYXNlRnJhbWVDbGFzcyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiUWdyaWRcIik7XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJQT1NUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stbXV0YXRpb25cIl0gfSlcbiAgYXN5bmMgcXVlcnkoYXJnczogUXVlcnlJbnB1dCk6IFByb21pc2U8UXVlcnlPdXRwdXQ+IHtcbiAgICBjb25zdCBlZmZlY3RpdmVMb2dNb2RlID0gYXJncy5sb2dNb2RlID8/IChhcmdzLmlzU3RlcCA/IFwicnVuXCIgOiBcImF1dG9cIik7XG5cbiAgICAvLyBsb2dNb2RlOiBcInJ1blwiIOKGkiDshJzrsoTqsIAgbGlmZWN5Y2xlIOq0gOumrFxuICAgIGlmIChlZmZlY3RpdmVMb2dNb2RlID09PSBcInJ1blwiKSB7XG4gICAgICBjb25zdCB7IHJlcXVlc3RMb2dJZCwgc3RlcEluZGV4IH0gPSBhd2FpdCBiZWZvcmVRdWVyeShhcmdzKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFFncmlkRGlzcGF0Y2hlci5xdWVyeShhcmdzLCBhcmdzLnRpbWVvdXQpO1xuICAgICAgICBjb25zdCBsaWZlY3ljbGUgPSBhd2FpdCBhZnRlclF1ZXJ5KHJlcXVlc3RMb2dJZCwgc3RlcEluZGV4LCBhcmdzLCByZXN1bHQpO1xuICAgICAgICByZXR1cm4geyAuLi5yZXN1bHQsIHJ1bkNvbnRleHQ6IGxpZmVjeWNsZS5ydW5Db250ZXh0IH07XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGF3YWl0IGZpbmlzaFJ1bldpdGhFcnJvcihyZXF1ZXN0TG9nSWQsIChlIGFzIEVycm9yKS5tZXNzYWdlLCBhcmdzKTtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBsb2dNb2RlOiBcImF1dG9cIiAo6riw7KG0IG5vbi1zdGVwIOqyveuhnCkg65iQ64qUIFwibm9uZVwiXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUWdyaWREaXNwYXRjaGVyLnF1ZXJ5KGFyZ3MsIGFyZ3MudGltZW91dCk7XG5cbiAgICBpZiAoZWZmZWN0aXZlTG9nTW9kZSA9PT0gXCJhdXRvXCIpIHtcbiAgICAgIGNvbnN0IHRvb2xDYWxsQ291bnQgPSByZXN1bHQuY29udGVudC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0udHlwZSA9PT0gXCJ0b29sLWNhbGxcIikubGVuZ3RoO1xuICAgICAgY29uc3QgcmVzcG9uc2VUZXh0ID0gcmVzdWx0LmNvbnRlbnRcbiAgICAgICAgLmZpbHRlcigoaXRlbSkgPT4gaXRlbS50eXBlID09PSBcInRleHRcIilcbiAgICAgICAgLm1hcCgoaXRlbSkgPT4gaXRlbS50ZXh0KVxuICAgICAgICAuam9pbihcIlxcblwiKTtcblxuICAgICAgUmVxdWVzdExvZ01vZGVsLnNhdmUoW1xuICAgICAgICB7XG4gICAgICAgICAgdG9rZW5fbmFtZTogcmVzdWx0LnRva2VuTmFtZSxcbiAgICAgICAgICBwcm9qZWN0X25hbWU6IGFyZ3MucHJvamVjdE5hbWU/Lmxlbmd0aCA/IGFyZ3MucHJvamVjdE5hbWUgOiBudWxsLFxuICAgICAgICAgIG1vZGVsX25hbWU6IHJlc3VsdC5tb2RlbCA/PyBudWxsLFxuICAgICAgICAgIHVzZXJfcHJvbXB0OiBhcmdzLnByb21wdCxcbiAgICAgICAgICBzeXN0ZW1fcHJvbXB0OiBhcmdzLnN5c3RlbSA/PyBudWxsLFxuICAgICAgICAgIHJlc3BvbnNlOiByZXNwb25zZVRleHQsXG4gICAgICAgICAgaW5wdXRfdG9rZW5zOiByZXN1bHQudXNhZ2UuaW5wdXRfdG9rZW5zLFxuICAgICAgICAgIG91dHB1dF90b2tlbnM6IHJlc3VsdC51c2FnZS5vdXRwdXRfdG9rZW5zLFxuICAgICAgICAgIGNhY2hlX3JlYWRfdG9rZW5zOiByZXN1bHQudXNhZ2UuY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMsXG4gICAgICAgICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiByZXN1bHQudXNhZ2UuY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zLFxuICAgICAgICAgIGR1cmF0aW9uX21zOiByZXN1bHQuZHVyYXRpb25NcyxcbiAgICAgICAgICBjb3N0X3VzZDogcmVzdWx0LmNvc3RVc2QgIT09IG51bGwgPyBNYXRoLnJvdW5kKHJlc3VsdC5jb3N0VXNkICogTUlDUk9fVVNEKSA6IG51bGwsXG4gICAgICAgICAgZWZmb3J0OiBhcmdzLmVmZm9ydCA/PyBudWxsLFxuICAgICAgICAgIGhpc3Rvcnk6IGFyZ3MuaGlzdG9yeSA/IEpTT04ucGFyc2UoYXJncy5oaXN0b3J5KSA6IG51bGwsXG4gICAgICAgICAgc3RhdHVzOiBcInN1Y2NlZWRlZFwiLFxuICAgICAgICAgIHRvb2xfY2FsbF9jb3VudDogdG9vbENhbGxDb3VudCxcbiAgICAgICAgfSxcbiAgICAgIF0pLmNhdGNoKChlKSA9PiBsb2dnZXIuZXJyb3IoYHJlcXVlc3RMb2cgc2F2ZSBmYWlsZWQ6ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCkpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJQT1NUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stbXV0YXRpb25cIl0gfSlcbiAgYXN5bmMgcHJlcGFyZVN0cmVhbShhcmdzOiBRdWVyeUlucHV0KTogUHJvbWlzZTx7IHN0cmVhbUlkOiBzdHJpbmcgfT4ge1xuICAgIGNvbnN0IHN0cmVhbUlkID0gY3J5cHRvLnJhbmRvbVVVSUQoKTtcbiAgICBwZW5kaW5nU3RyZWFtcy5zZXQoc3RyZWFtSWQsIGFyZ3MpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4gcGVuZGluZ1N0cmVhbXMuZGVsZXRlKHN0cmVhbUlkKSwgMzBfMDAwKTtcbiAgICByZXR1cm4geyBzdHJlYW1JZCB9O1xuICB9XG5cbiAgQHN0cmVhbSh7IHR5cGU6IFwic3NlXCIsIGV2ZW50czogU3RyZWFtRXZlbnRzIH0pXG4gIGFzeW5jIHF1ZXJ5U3RyZWFtKHN0cmVhbUlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBhcmdzID0gcGVuZGluZ1N0cmVhbXMuZ2V0KHN0cmVhbUlkKTtcbiAgICBwZW5kaW5nU3RyZWFtcy5kZWxldGUoc3RyZWFtSWQpO1xuICAgIGlmICghYXJncykgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBvciBleHBpcmVkIHN0cmVhbUlkXCIpO1xuXG4gICAgY29uc3QgZWZmZWN0aXZlTG9nTW9kZSA9IGFyZ3MubG9nTW9kZSA/PyAoYXJncy5pc1N0ZXAgPyBcInJ1blwiIDogXCJhdXRvXCIpO1xuICAgIGNvbnN0IHNob3VsZExvZyA9IGVmZmVjdGl2ZUxvZ01vZGUgPT09IFwicnVuXCI7XG5cbiAgICBsZXQgcnVuSW5mbzogeyByZXF1ZXN0TG9nSWQ6IG51bWJlcjsgc3RlcEluZGV4OiBudW1iZXIgfSB8IHVuZGVmaW5lZDtcbiAgICBpZiAoc2hvdWxkTG9nKSB7XG4gICAgICB0cnkge1xuICAgICAgICBydW5JbmZvID0gYXdhaXQgYmVmb3JlUXVlcnkoYXJncyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcihgc3RyZWFtIGJlZm9yZVF1ZXJ5IGZhaWxlZDogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjdHggPSBTb25hbXUuZ2V0Q29udGV4dCgpO1xuICAgIGNvbnN0IHNzZSA9IGN0eC5jcmVhdGVTU0UoU3RyZWFtRXZlbnRzKTtcbiAgICBsZXQgdGhyZWFkSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBsZXQgdHVybklkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgbGV0IHN0cmVhbVJlc3VsdDogUXVlcnlPdXRwdXQgfCB1bmRlZmluZWQ7XG4gICAgbGV0IHN0cmVhbUVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcblxuICAgIHNzZS5vbkNsb3NlKCgpID0+IHtcbiAgICAgIGlmICh0aHJlYWRJZCAmJiB0dXJuSWQpIHtcbiAgICAgICAgUWdyaWREaXNwYXRjaGVyLm9wZW5haURpc3BhdGNoZXI/LmludGVycnVwdFdvcmtlclR1cm4odGhyZWFkSWQsIHR1cm5JZCkuY2F0Y2goKCkgPT4ge30pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IFFncmlkRGlzcGF0Y2hlci5xdWVyeVN0cmVhbShhcmdzLCB7XG4gICAgICAgIG9uRGVsdGE6ICh0ZXh0KSA9PiB7XG4gICAgICAgICAgaWYgKCFzc2UuY2xvc2VkKSBzc2UucHVibGlzaChcImRlbHRhXCIsIHsgdGV4dCB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgb25UaHJlYWRJZDogKGlkKSA9PiB7XG4gICAgICAgICAgdGhyZWFkSWQgPSBpZDtcbiAgICAgICAgICBpZiAoc3NlLmNsb3NlZCAmJiB0dXJuSWQpIHtcbiAgICAgICAgICAgIFFncmlkRGlzcGF0Y2hlci5vcGVuYWlEaXNwYXRjaGVyPy5pbnRlcnJ1cHRXb3JrZXJUdXJuKHRocmVhZElkLCB0dXJuSWQpLmNhdGNoKCgpID0+IHt9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG9uVHVybklkOiAoaWQpID0+IHtcbiAgICAgICAgICB0dXJuSWQgPSBpZDtcbiAgICAgICAgICBpZiAoc3NlLmNsb3NlZCAmJiB0aHJlYWRJZCkge1xuICAgICAgICAgICAgUWdyaWREaXNwYXRjaGVyLm9wZW5haURpc3BhdGNoZXI/LmludGVycnVwdFdvcmtlclR1cm4odGhyZWFkSWQsIHR1cm5JZCkuY2F0Y2goKCkgPT4ge30pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgb25Db21wbGV0ZTogKHJlc3VsdCkgPT4ge1xuICAgICAgICAgIHN0cmVhbVJlc3VsdCA9IHJlc3VsdDtcbiAgICAgICAgfSxcbiAgICAgICAgb25FcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgIHN0cmVhbUVycm9yID0gZXJyO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgc3RyZWFtRXJyb3IgPSBlIGFzIEVycm9yO1xuICAgIH1cblxuICAgIC8vIGRpc3BhdGNoZXIg7JmE66OMIO2bhCBsaWZlY3ljbGUg7LKY66asIChhd2FpdCDslYjsoIQpXG4gICAgaWYgKHN0cmVhbVJlc3VsdCkge1xuICAgICAgbGV0IHJ1bkNvbnRleHQ6IHsgcmVxdWVzdExvZ0lkOiBudW1iZXIgfSB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChydW5JbmZvKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgbGlmZWN5Y2xlID0gYXdhaXQgYWZ0ZXJRdWVyeShcbiAgICAgICAgICAgIHJ1bkluZm8ucmVxdWVzdExvZ0lkLFxuICAgICAgICAgICAgcnVuSW5mby5zdGVwSW5kZXgsXG4gICAgICAgICAgICBhcmdzLFxuICAgICAgICAgICAgc3RyZWFtUmVzdWx0LFxuICAgICAgICAgICk7XG4gICAgICAgICAgcnVuQ29udGV4dCA9IGxpZmVjeWNsZS5ydW5Db250ZXh0O1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKGBzdHJlYW0gYWZ0ZXJRdWVyeSBmYWlsZWQ6ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghc3NlLmNsb3NlZCkgc3NlLnB1Ymxpc2goXCJkb25lXCIsIHsgLi4uc3RyZWFtUmVzdWx0LCBydW5Db250ZXh0IH0pO1xuICAgIH0gZWxzZSBpZiAoc3RyZWFtRXJyb3IpIHtcbiAgICAgIGlmIChydW5JbmZvKSBhd2FpdCBmaW5pc2hSdW5XaXRoRXJyb3IocnVuSW5mby5yZXF1ZXN0TG9nSWQsIHN0cmVhbUVycm9yLm1lc3NhZ2UsIGFyZ3MpO1xuICAgICAgaWYgKCFzc2UuY2xvc2VkKSBzc2UucHVibGlzaChcImVycm9yXCIsIHsgbWVzc2FnZTogc3RyZWFtRXJyb3IubWVzc2FnZSB9KTtcbiAgICB9IGVsc2UgaWYgKHNzZS5jbG9zZWQgJiYgcnVuSW5mbykge1xuICAgICAgYXdhaXQgZmluaXNoUnVuQWJvcnRlZChydW5JbmZvLnJlcXVlc3RMb2dJZCwgYXJncyk7XG4gICAgfVxuXG4gICAgYXdhaXQgc3NlLmVuZCgpO1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiUE9TVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLW11dGF0aW9uXCJdIH0pXG4gIGFzeW5jIGNyZWF0ZVJ1bihpbnB1dDogQ3JlYXRlUnVuSW5wdXQpOiBQcm9taXNlPHsgcmVxdWVzdExvZ0lkOiBudW1iZXIgfT4ge1xuICAgIGNvbnN0IHJlcXVlc3RMb2dJZCA9IGF3YWl0IFJlcXVlc3RMb2dNb2RlbC5jcmVhdGVSdW4oe1xuICAgICAgdXNlcl9wcm9tcHQ6IGlucHV0LnVzZXJQcm9tcHQsXG4gICAgICBtb2RlbF9uYW1lOiBpbnB1dC5tb2RlbE5hbWUsXG4gICAgICBlZmZvcnQ6IGlucHV0LmVmZm9ydCxcbiAgICAgIHByb2plY3RfbmFtZTogaW5wdXQucHJvamVjdE5hbWUsXG4gICAgICBzeXN0ZW1fcHJvbXB0OiBpbnB1dC5zeXN0ZW1Qcm9tcHQsXG4gICAgICBoaXN0b3J5OiBpbnB1dC5oaXN0b3J5ID8gSlNPTi5wYXJzZShpbnB1dC5oaXN0b3J5KSA6IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgICByZXR1cm4geyByZXF1ZXN0TG9nSWQgfTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIlBPU1RcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1tdXRhdGlvblwiXSB9KVxuICBhc3luYyBhcHBlbmRTdGVwKGlucHV0OiBBcHBlbmRTdGVwSW5wdXQpOiBQcm9taXNlPHsgc3RlcElkOiBudW1iZXIgfT4ge1xuICAgIGNvbnN0IHN0ZXBJZCA9IGF3YWl0IFJlcXVlc3RMb2dNb2RlbC5hcHBlbmRTdGVwKGlucHV0LnJlcXVlc3RMb2dJZCwge1xuICAgICAgc3RlcF9pbmRleDogaW5wdXQuc3RlcEluZGV4LFxuICAgICAgdHlwZTogaW5wdXQudHlwZSxcbiAgICAgIGlucHV0X3Rva2VuczogaW5wdXQuaW5wdXRUb2tlbnMsXG4gICAgICBvdXRwdXRfdG9rZW5zOiBpbnB1dC5vdXRwdXRUb2tlbnMsXG4gICAgICBjYWNoZV9yZWFkX3Rva2VuczogaW5wdXQuY2FjaGVSZWFkVG9rZW5zLFxuICAgICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiBpbnB1dC5jYWNoZUNyZWF0aW9uVG9rZW5zLFxuICAgICAgZHVyYXRpb25fbXM6IGlucHV0LmR1cmF0aW9uTXMsXG4gICAgICBmaW5pc2hfcmVhc29uOiBpbnB1dC5maW5pc2hSZWFzb24sXG4gICAgICByZWFzb25pbmdfdGV4dDogaW5wdXQucmVhc29uaW5nVGV4dCxcbiAgICAgIHJlYXNvbmluZ190b2tlbnM6IGlucHV0LnJlYXNvbmluZ1Rva2VucyxcbiAgICAgIHRvb2xfY2FsbF9pbmRleDogaW5wdXQudG9vbENhbGxJbmRleCxcbiAgICAgIHRvb2xfY2FsbF9pZDogaW5wdXQudG9vbENhbGxJZCxcbiAgICAgIHRvb2xfbmFtZTogaW5wdXQudG9vbE5hbWUsXG4gICAgICB0b29sX2FyZ3M6IGlucHV0LnRvb2xBcmdzLFxuICAgICAgdG9vbF9yZXN1bHQ6IGlucHV0LnRvb2xSZXN1bHQsXG4gICAgICB0b29sX2R1cmF0aW9uX21zOiBpbnB1dC50b29sRHVyYXRpb25NcyxcbiAgICAgIGVycm9yOiBpbnB1dC5lcnJvcixcbiAgICB9KTtcbiAgICByZXR1cm4geyBzdGVwSWQgfTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIlBPU1RcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1tdXRhdGlvblwiXSB9KVxuICBhc3luYyBmaW5pc2hSdW4oaW5wdXQ6IEZpbmlzaFJ1bklucHV0KTogUHJvbWlzZTx7IG9rOiBib29sZWFuIH0+IHtcbiAgICBhd2FpdCBSZXF1ZXN0TG9nTW9kZWwuZmluaXNoUnVuKGlucHV0LnJlcXVlc3RMb2dJZCwge1xuICAgICAgc3RhdHVzOiBpbnB1dC5zdGF0dXMsXG4gICAgICByZXNwb25zZTogaW5wdXQucmVzcG9uc2UsXG4gICAgICB0b2tlbl9uYW1lOiBpbnB1dC50b2tlbk5hbWUsXG4gICAgICBpbnB1dF90b2tlbnM6IGlucHV0LnRvdGFsSW5wdXRUb2tlbnMsXG4gICAgICBvdXRwdXRfdG9rZW5zOiBpbnB1dC50b3RhbE91dHB1dFRva2VucyxcbiAgICAgIGNhY2hlX3JlYWRfdG9rZW5zOiBpbnB1dC50b3RhbENhY2hlUmVhZFRva2VucyxcbiAgICAgIGNhY2hlX2NyZWF0aW9uX3Rva2VuczogaW5wdXQudG90YWxDYWNoZUNyZWF0aW9uVG9rZW5zLFxuICAgICAgZHVyYXRpb25fbXM6IGlucHV0LnRvdGFsRHVyYXRpb25NcyxcbiAgICAgIGhpc3Rvcnk6IGlucHV0Lmhpc3RvcnkgPyBKU09OLnBhcnNlKGlucHV0Lmhpc3RvcnkpIDogdW5kZWZpbmVkLFxuICAgICAgZXJyb3JfbWVzc2FnZTogaW5wdXQuZXJyb3JNZXNzYWdlLFxuICAgIH0pO1xuICAgIHJldHVybiB7IG9rOiB0cnVlIH07XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJHRVRcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1xdWVyeVwiXSB9KVxuICBhc3luYyBzdGF0cygpOiBQcm9taXNlPFRva2VuU3RhdHNbXT4ge1xuICAgIHJldHVybiBRZ3JpZERpc3BhdGNoZXIuZ2V0U3RhdHMoKTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIkdFVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLXF1ZXJ5XCJdIH0pXG4gIGFzeW5jIHRvdGFsQ29zdCh0b2tlbk5hbWU/OiBzdHJpbmcpOiBQcm9taXNlPHsgdXNkOiBudW1iZXIgfT4ge1xuICAgIHJldHVybiB7IHVzZDogYXdhaXQgUmVxdWVzdExvZ01vZGVsLnRvdGFsQ29zdCh7IHRva2VuX25hbWU6IHRva2VuTmFtZSB9KSB9O1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiR0VUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stcXVlcnlcIl0gfSlcbiAgYXN5bmMgcHJvamVjdE5hbWVzKCk6IFByb21pc2U8eyBuYW1lczogc3RyaW5nW10gfT4ge1xuICAgIHJldHVybiB7IG5hbWVzOiBhd2FpdCBSZXF1ZXN0TG9nTW9kZWwuZGlzdGluY3RQcm9qZWN0TmFtZXMoKSB9O1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiUE9TVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLW11dGF0aW9uXCJdIH0pXG4gIGFzeW5jIGFkZFRva2VuKFxuICAgIHByb3ZpZGVyOiBzdHJpbmcsXG4gICAgY3JlZGVudGlhbHM6IFRva2VuQ3JlZGVudGlhbHMsXG4gICAgbmFtZTogc3RyaW5nLFxuICApOiBQcm9taXNlPHsgYWRkZWQ6IGJvb2xlYW4gfT4ge1xuICAgIGF3YWl0IFRva2VuTW9kZWwuc2F2ZShbXG4gICAgICB7XG4gICAgICAgIHByb3ZpZGVyLFxuICAgICAgICBjcmVkZW50aWFscyxcbiAgICAgICAgbmFtZSxcbiAgICAgIH0sXG4gICAgXSk7XG4gICAgcmV0dXJuIHsgYWRkZWQ6IHRydWUgfTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIlBPU1RcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1tdXRhdGlvblwiXSB9KVxuICBhc3luYyB1cGRhdGVUb2tlbihpZDogbnVtYmVyLCBuYW1lPzogc3RyaW5nKTogUHJvbWlzZTx7IHVwZGF0ZWQ6IGJvb2xlYW4gfT4ge1xuICAgIGNvbnN0IGVudHJ5ID0gYXdhaXQgVG9rZW5Nb2RlbC5maW5kT25lKFwiQVwiLCB7IGlkIH0pO1xuICAgIGlmICghZW50cnkpIHJldHVybiB7IHVwZGF0ZWQ6IGZhbHNlIH07XG5cbiAgICBhd2FpdCBUb2tlbk1vZGVsLnNhdmUoW1xuICAgICAge1xuICAgICAgICBpZDogZW50cnkuaWQsXG4gICAgICAgIHByb3ZpZGVyOiBlbnRyeS5wcm92aWRlcixcbiAgICAgICAgY3JlZGVudGlhbHM6IGVudHJ5LmNyZWRlbnRpYWxzLFxuICAgICAgICBuYW1lOiBuYW1lICE9PSB1bmRlZmluZWQgPyBuYW1lIDogZW50cnkubmFtZSxcbiAgICAgIH0sXG4gICAgXSk7XG4gICAgcmV0dXJuIHsgdXBkYXRlZDogdHJ1ZSB9O1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiUE9TVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLW11dGF0aW9uXCJdIH0pXG4gIGFzeW5jIHJlbW92ZVRva2VuKGlkOiBudW1iZXIpOiBQcm9taXNlPHsgcmVtb3ZlZDogYm9vbGVhbiB9PiB7XG4gICAgY29uc3QgZW50cnkgPSBhd2FpdCBUb2tlbk1vZGVsLmZpbmRPbmUoXCJBXCIsIHsgaWQgfSk7XG4gICAgaWYgKCFlbnRyeSkgcmV0dXJuIHsgcmVtb3ZlZDogZmFsc2UgfTtcbiAgICBhd2FpdCBUb2tlbk1vZGVsLmRlbChbZW50cnkuaWRdKTtcbiAgICByZXR1cm4geyByZW1vdmVkOiB0cnVlIH07XG4gIH1cblxuICAvKipcbiAgICog7Yag7YGwIO2ZnOyEse2ZlC/ruYTtmZzshLHtmZQg7Yag6riAIERC7J2YIGFjdGl2ZSDtlYTrk5wg7JeF642w7J207Yq4XG4gICAqL1xuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJQT1NUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stbXV0YXRpb25cIl0gfSlcbiAgYXN5bmMgdG9nZ2xlVG9rZW4oaWQ6IG51bWJlcik6IFByb21pc2U8eyBhY3RpdmU6IGJvb2xlYW4gfT4ge1xuICAgIGNvbnN0IGVudHJ5ID0gYXdhaXQgVG9rZW5Nb2RlbC5maW5kT25lKFwiQVwiLCB7IGlkIH0pO1xuICAgIGlmICghZW50cnkpIHJldHVybiB7IGFjdGl2ZTogZmFsc2UgfTtcblxuICAgIGNvbnN0IG5ld0FjdGl2ZSA9ICFlbnRyeS5hY3RpdmU7XG4gICAgYXdhaXQgVG9rZW5Nb2RlbC5zYXZlKFtcbiAgICAgIHtcbiAgICAgICAgaWQsXG4gICAgICAgIHByb3ZpZGVyOiBlbnRyeS5wcm92aWRlcixcbiAgICAgICAgY3JlZGVudGlhbHM6IGVudHJ5LmNyZWRlbnRpYWxzLFxuICAgICAgICBhY3RpdmU6IG5ld0FjdGl2ZSxcbiAgICAgICAgbmFtZTogZW50cnkubmFtZSxcbiAgICAgIH0sXG4gICAgXSk7XG4gICAgcmV0dXJuIHsgYWN0aXZlOiBuZXdBY3RpdmUgfTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIlBPU1RcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1tdXRhdGlvblwiXSB9KVxuICBhc3luYyBvYXV0aFN0YXJ0KG5hbWU6IHN0cmluZyk6IFByb21pc2U8T0F1dGhTdGFydFJlc3VsdD4ge1xuICAgIGNvbnN0IHsgY29kZVZlcmlmaWVyLCBjb2RlQ2hhbGxlbmdlLCBzdGF0ZSB9ID0gZ2VuZXJhdGVQS0NFKCk7XG5cbiAgICBjb25zdCBzZXJ2ZXJQb3J0ID0gcHJvY2Vzcy5lbnYuUE9SVCA/PyBcIjQ0OTAwXCI7XG4gICAgY29uc3QgcmVkaXJlY3RVcmkgPSBgaHR0cDovL2xvY2FsaG9zdDoke3NlcnZlclBvcnR9L2NhbGxiYWNrYDtcbiAgICBjb25zdCBhdXRoVXJsID0gYnVpbGRBdXRoVXJsKGNvZGVDaGFsbGVuZ2UsIHN0YXRlLCByZWRpcmVjdFVyaSk7XG5cbiAgICBhd2FpdCBzZXRPQXV0aFN0YXRlKHN0YXRlLCB7IGNvZGVWZXJpZmllciwgbmFtZSwgcmVkaXJlY3RVcmkgfSk7XG5cbiAgICByZXR1cm4geyBhdXRoVXJsIH07XG4gIH1cblxuICBhc3luYyBoYW5kbGVPQXV0aENhbGxiYWNrKGNvZGU6IHN0cmluZywgc3RhdGU6IHN0cmluZywgcmVwbHk6IEZhc3RpZnlSZXBseSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBlbmRpbmcgPSBhd2FpdCBnZXRPQXV0aFN0YXRlKHN0YXRlKTtcbiAgICBpZiAoIXBlbmRpbmcpIHtcbiAgICAgIGxvZ2dlci53YXJuKFwib2F1dGggY2FsbGJhY2s6IGludmFsaWRfc3RhdGVcIik7XG4gICAgICByZXR1cm4gcmVwbHkucmVkaXJlY3QoXCIvP29hdXRoPWVycm9yJnJlYXNvbj1pbnZhbGlkX3N0YXRlXCIpO1xuICAgIH1cbiAgICBhd2FpdCBkZWxldGVPQXV0aFN0YXRlKHN0YXRlKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB0b2tlbnMgPSBhd2FpdCBleGNoYW5nZUNvZGVGb3JUb2tlbnMoXG4gICAgICAgIGNvZGUsXG4gICAgICAgIHBlbmRpbmcuY29kZVZlcmlmaWVyLFxuICAgICAgICBzdGF0ZSxcbiAgICAgICAgcGVuZGluZy5yZWRpcmVjdFVyaSxcbiAgICAgICk7XG5cbiAgICAgIGlmICh0b2tlbnMuYWNjb3VudFV1aWQpIHtcbiAgICAgICAgY29uc3Qgb2xkRW50cmllcyA9IGF3YWl0IFRva2VuTW9kZWwuZmluZEJ5QWNjb3VudElkZW50aWZpZXIoXG4gICAgICAgICAgXCJBXCIsXG4gICAgICAgICAgXCJhbnRocm9waWNcIixcbiAgICAgICAgICB0b2tlbnMuYWNjb3VudFV1aWQsXG4gICAgICAgICk7XG4gICAgICAgIGlmIChvbGRFbnRyaWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBhd2FpdCBUb2tlbk1vZGVsLmRlbChvbGRFbnRyaWVzLm1hcCgobykgPT4gby5pZCkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IFRva2VuTW9kZWwuc2F2ZShbXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlcjogXCJhbnRocm9waWNcIixcbiAgICAgICAgICBjcmVkZW50aWFsczoge1xuICAgICAgICAgICAgYWNjZXNzVG9rZW46IHRva2Vucy5hY2Nlc3NUb2tlbixcbiAgICAgICAgICAgIHJlZnJlc2hUb2tlbjogdG9rZW5zLnJlZnJlc2hUb2tlbixcbiAgICAgICAgICAgIGV4cGlyZXNBdDogdG9rZW5zLmV4cGlyZXNBdCA/PyAwLFxuICAgICAgICAgICAgYWNjb3VudFV1aWQ6IHRva2Vucy5hY2NvdW50VXVpZCA/PyBcIlwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbmFtZTogcGVuZGluZy5uYW1lLFxuICAgICAgICB9LFxuICAgICAgXSk7XG5cbiAgICAgIHJldHVybiByZXBseS5yZWRpcmVjdChgLz9vYXV0aD1zdWNjZXNzJm5hbWU9JHtlbmNvZGVVUklDb21wb25lbnQocGVuZGluZy5uYW1lKX1gKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gcmVwbHkucmVkaXJlY3QoYC8/b2F1dGg9ZXJyb3ImcmVhc29uPSR7ZW5jb2RlVVJJQ29tcG9uZW50KChlIGFzIEVycm9yKS5tZXNzYWdlKX1gKTtcbiAgICB9XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJQT1NUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stbXV0YXRpb25cIl0gfSlcbiAgYXN5bmMgb2F1dGhTdGFydE9wZW5BSShuYW1lOiBzdHJpbmcpOiBQcm9taXNlPE9BdXRoU3RhcnRSZXN1bHQ+IHtcbiAgICBpZiAoIVFncmlkRGlzcGF0Y2hlci5vcGVuYWlEaXNwYXRjaGVyKSB0aHJvdyBuZXcgRXJyb3IoXCJPcGVuQUkgZGlzcGF0Y2hlciBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgY29uc3QgeyBhdXRoVXJsIH0gPSBhd2FpdCBRZ3JpZERpc3BhdGNoZXIub3BlbmFpRGlzcGF0Y2hlci5zdGFydEJyb3dzZXJMb2dpbihuYW1lKTtcblxuICAgIC8vIGZpcmUtYW5kLWZvcmdldDogY29kZXggbG9naW4g7JmE66OMIOuMgOq4sCDihpIg7Yag7YGwIOyggOyepVxuICAgIFFncmlkRGlzcGF0Y2hlci5vcGVuYWlEaXNwYXRjaGVyXG4gICAgICAuY29tcGxldGVCcm93c2VyTG9naW4oKVxuICAgICAgLnRoZW4oYXN5bmMgKGNyZWRzKSA9PiB7XG4gICAgICAgIGlmIChjcmVkcy5hY2NvdW50SWQpIHtcbiAgICAgICAgICBjb25zdCBvbGRFbnRyaWVzID0gYXdhaXQgVG9rZW5Nb2RlbC5maW5kQnlBY2NvdW50SWRlbnRpZmllcihcbiAgICAgICAgICAgIFwiQVwiLFxuICAgICAgICAgICAgXCJvcGVuYWlcIixcbiAgICAgICAgICAgIGNyZWRzLmFjY291bnRJZCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChvbGRFbnRyaWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGF3YWl0IFRva2VuTW9kZWwuZGVsKG9sZEVudHJpZXMubWFwKChvKSA9PiBvLmlkKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGF3YWl0IFRva2VuTW9kZWwuc2F2ZShbXG4gICAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZXI6IFwib3BlbmFpXCIsXG4gICAgICAgICAgICBjcmVkZW50aWFsczoge1xuICAgICAgICAgICAgICBhY2Nlc3NUb2tlbjogY3JlZHMuYWNjZXNzVG9rZW4sXG4gICAgICAgICAgICAgIHJlZnJlc2hUb2tlbjogY3JlZHMucmVmcmVzaFRva2VuLFxuICAgICAgICAgICAgICBpZFRva2VuOiBjcmVkcy5pZFRva2VuLFxuICAgICAgICAgICAgICBhY2Nlc3NUb2tlbkV4cGlyZXNBdDogRGF0ZS5ub3coKSArIDEwICogMjQgKiAzNjAwICogMTAwMCxcbiAgICAgICAgICAgICAgYWNjb3VudElkOiBjcmVkcy5hY2NvdW50SWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICBdKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oYE9wZW5BSSB0b2tlbiBzYXZlZCBmb3IgJHtuYW1lfWApO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICBsb2dnZXIud2FybihgT3BlbkFJIGJyb3dzZXIgbG9naW4gZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgICAgfSk7XG5cbiAgICByZXR1cm4geyBhdXRoVXJsIH07XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJHRVRcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1xdWVyeVwiXSB9KVxuICBhc3luYyB1c2FnZSh0b2tlbklkPzogbnVtYmVyKTogUHJvbWlzZTxVc2FnZVJlc3BvbnNlPiB7XG4gICAgY29uc3QgeyByb3dzOiBhbGxUb2tlbnMgfSA9IGF3YWl0IFRva2VuTW9kZWwuZmluZE1hbnkoXCJBXCIpO1xuICAgIGNvbnN0IGVudHJ5ID0gdG9rZW5JZFxuICAgICAgPyBhbGxUb2tlbnMuZmluZCgoZSkgPT4gZS5pZCA9PT0gdG9rZW5JZClcbiAgICAgIDogYWxsVG9rZW5zLmZpbmRMYXN0KChlKSA9PiBlLmFjdGl2ZSAmJiBlLnByb3ZpZGVyID09PSBcImFudGhyb3BpY1wiKTtcblxuICAgIGlmICghZW50cnkpIHJldHVybiB7IGVycm9yOiBcIk5PVF9GT1VORFwiIH07XG5cbiAgICBpZiAoZW50cnkucHJvdmlkZXIgPT09IFwib3BlbmFpXCIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJhdyA9IChhd2FpdCBRZ3JpZERpc3BhdGNoZXIub3BlbmFpRGlzcGF0Y2hlcj8uZ2V0UmF0ZUxpbWl0cyhlbnRyeS5uYW1lKSkgYXMge1xuICAgICAgICAgIHJhdGVMaW1pdHM/OiB7XG4gICAgICAgICAgICBwcmltYXJ5PzogeyB1c2VkUGVyY2VudDogbnVtYmVyOyB3aW5kb3dEdXJhdGlvbk1pbnM6IG51bWJlcjsgcmVzZXRzQXQ6IG51bWJlciB9O1xuICAgICAgICAgICAgc2Vjb25kYXJ5PzogeyB1c2VkUGVyY2VudDogbnVtYmVyOyB3aW5kb3dEdXJhdGlvbk1pbnM6IG51bWJlcjsgcmVzZXRzQXQ6IG51bWJlciB9O1xuICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJsID0gcmF3Py5yYXRlTGltaXRzO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHByb3ZpZGVyOiBcIm9wZW5haVwiLFxuICAgICAgICAgIGZpdmVIb3VyOiBybD8ucHJpbWFyeVxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgdXRpbGl6YXRpb246IHJsLnByaW1hcnkudXNlZFBlcmNlbnQsXG4gICAgICAgICAgICAgICAgcmVzZXRzQXQ6IG5ldyBEYXRlKHJsLnByaW1hcnkucmVzZXRzQXQgKiAxMDAwKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgc2V2ZW5EYXk6IHJsPy5zZWNvbmRhcnlcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIHV0aWxpemF0aW9uOiBybC5zZWNvbmRhcnkudXNlZFBlcmNlbnQsXG4gICAgICAgICAgICAgICAgcmVzZXRzQXQ6IG5ldyBEYXRlKHJsLnNlY29uZGFyeS5yZXNldHNBdCAqIDEwMDApLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgfTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIHsgZXJyb3I6IGBPcGVuQUkgdXNhZ2UgZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZW50cnkucHJvdmlkZXIgIT09IFwiYW50aHJvcGljXCIpIHtcbiAgICAgIHJldHVybiB7IGVycm9yOiBgdXNhZ2UgQVBJIG5vdCBzdXBwb3J0ZWQgZm9yIHByb3ZpZGVyOiAke2VudHJ5LnByb3ZpZGVyfWAgfTtcbiAgICB9XG5cbiAgICBsZXQgYWNjZXNzVG9rZW4gPSBnZXRBY2Nlc3NUb2tlbihlbnRyeS5jcmVkZW50aWFscyk7XG4gICAgY29uc3QgaXNFeHBpcmVkID0gZ2V0RXhwaXJlc0F0KGVudHJ5LmNyZWRlbnRpYWxzKSA8IERhdGUubm93KCk7XG5cbiAgICBpZiAoaXNFeHBpcmVkICYmIGdldFJlZnJlc2hUb2tlbihlbnRyeS5jcmVkZW50aWFscykpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGFjY2Vzc1Rva2VuID0gYXdhaXQgdGhpcy5yZWZyZXNoVG9rZW4oZW50cnkpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBvYXV0aExvZ2dlci53YXJuKGByZWZyZXNoIGZhaWxlZCBmb3IgJHtlbnRyeS5uYW1lfTogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgICAgICAgcmV0dXJuIHsgZXJyb3I6IFwicmUtbG9naW4gcmVxdWlyZWRcIiB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHJhdyA9IGF3YWl0IGZldGNoVXNhZ2UoYWNjZXNzVG9rZW4pO1xuICAgIGlmIChyYXcuZXJyb3IgJiYgZ2V0UmVmcmVzaFRva2VuKGVudHJ5LmNyZWRlbnRpYWxzKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYWNjZXNzVG9rZW4gPSBhd2FpdCB0aGlzLnJlZnJlc2hUb2tlbihlbnRyeSk7XG4gICAgICAgIGNvbnN0IHJldHJpZWQgPSBhd2FpdCBmZXRjaFVzYWdlKGFjY2Vzc1Rva2VuKTtcbiAgICAgICAgaWYgKHJldHJpZWQuZXJyb3IpIHJldHVybiB7IGVycm9yOiByZXRyaWVkLmVycm9yIH07XG4gICAgICAgIHJldHVybiBjb252ZXJ0QW50aHJvcGljVXNhZ2UocmV0cmllZCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIG9hdXRoTG9nZ2VyLndhcm4oYHJlZnJlc2ggZmFpbGVkIGZvciAke2VudHJ5Lm5hbWV9OiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgICAgICByZXR1cm4geyBlcnJvcjogXCJyZS1sb2dpbiByZXF1aXJlZFwiIH07XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChyYXcuZXJyb3IpIHJldHVybiB7IGVycm9yOiByYXcuZXJyb3IgfTtcbiAgICByZXR1cm4gY29udmVydEFudGhyb3BpY1VzYWdlKHJhdyk7XG4gIH1cblxuICBhc3luYyByZWZyZXNoVG9rZW4odG9rZW46IFRva2VuU3Vic2V0QSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgY3JlZHMgPSB0b2tlbi5jcmVkZW50aWFscztcbiAgICBjb25zdCBydCA9IGdldFJlZnJlc2hUb2tlbihjcmVkcyk7XG4gICAgaWYgKCFydCkgdGhyb3cgbmV3IEVycm9yKFwiTm8gcmVmcmVzaCB0b2tlblwiKTtcbiAgICBjb25zdCByZWZyZXNoZWQgPSBhd2FpdCByZWZyZXNoQWNjZXNzVG9rZW4ocnQpO1xuICAgIGNvbnN0IHVwZGF0ZWQgPSBUb2tlbkNyZWRlbnRpYWxzLnBhcnNlKHtcbiAgICAgIC4uLmNyZWRzLFxuICAgICAgYWNjZXNzVG9rZW46IHJlZnJlc2hlZC5hY2Nlc3NUb2tlbixcbiAgICAgIHJlZnJlc2hUb2tlbjogcmVmcmVzaGVkLnJlZnJlc2hUb2tlbixcbiAgICAgIGV4cGlyZXNBdDogcmVmcmVzaGVkLmV4cGlyZXNBdCxcbiAgICB9KTtcbiAgICBhd2FpdCBUb2tlbk1vZGVsLnNhdmUoW1xuICAgICAge1xuICAgICAgICBpZDogdG9rZW4uaWQsXG4gICAgICAgIHByb3ZpZGVyOiB0b2tlbi5wcm92aWRlcixcbiAgICAgICAgY3JlZGVudGlhbHM6IHVwZGF0ZWQsXG4gICAgICAgIG5hbWU6IHRva2VuLm5hbWUsXG4gICAgICB9LFxuICAgIF0pO1xuICAgIHJldHVybiByZWZyZXNoZWQuYWNjZXNzVG9rZW47XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJHRVRcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1xdWVyeVwiXSB9KVxuICBhc3luYyBoZWFsdGgoKTogUHJvbWlzZTxIZWFsdGhSZXNwb25zZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IFwib2tcIixcbiAgICAgIGFjdGl2ZVRva2VuczogUWdyaWREaXNwYXRjaGVyLnRva2Vucy5zaXplLFxuICAgICAgc3Vic2NyaWJlcjogUWdyaWREaXNwYXRjaGVyLnN1YnNjcmliZXI/LnN0YXR1cygpID8/IG51bGwsXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgUWdyaWRGcmFtZSA9IG5ldyBRZ3JpZEZyYW1lQ2xhc3MoKTtcblxuZnVuY3Rpb24gY29udmVydEFudGhyb3BpY1VzYWdlKHJhdzogQW50aHJvcGljVXNhZ2VSYXcpOiBVc2FnZVJlc3BvbnNlIHtcbiAgcmV0dXJuIHtcbiAgICBwcm92aWRlcjogXCJhbnRocm9waWNcIixcbiAgICBmaXZlSG91cjogcmF3LmZpdmVfaG91clxuICAgICAgPyB7IHV0aWxpemF0aW9uOiByYXcuZml2ZV9ob3VyLnV0aWxpemF0aW9uLCByZXNldHNBdDogcmF3LmZpdmVfaG91ci5yZXNldHNfYXQgfVxuICAgICAgOiBudWxsLFxuICAgIHNldmVuRGF5OiByYXcuc2V2ZW5fZGF5XG4gICAgICA/IHsgdXRpbGl6YXRpb246IHJhdy5zZXZlbl9kYXkudXRpbGl6YXRpb24sIHJlc2V0c0F0OiByYXcuc2V2ZW5fZGF5LnJlc2V0c19hdCB9XG4gICAgICA6IG51bGwsXG4gIH07XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNENBLE1BQU0saUNBQWlCLElBQUksS0FBeUI7QUFHcEQsTUFBTSxxQkFBcUI7QUFDM0IsTUFBTSxrQkFBa0I7QUFFeEIsZUFBZSxjQUFjLE9BQWUsTUFBbUM7Q0FDN0UsTUFBTSxRQUFRLG9CQUFvQjtBQUNsQyxLQUFJLENBQUMsTUFBTyxPQUFNLElBQUksTUFBTSwrQkFBK0I7QUFDM0QsT0FBTSxNQUFNLElBQUk7RUFDZCxLQUFLLEdBQUcscUJBQXFCO0VBQzdCLE9BQU8sS0FBSyxVQUFVLEtBQUs7RUFDM0IsS0FBSztFQUNOLENBQUM7O0FBR0osZUFBZSxjQUFjLE9BQWtEO0NBQzdFLE1BQU0sUUFBUSxvQkFBb0I7QUFDbEMsS0FBSSxDQUFDLE1BQU8sT0FBTSxJQUFJLE1BQU0sK0JBQStCO0NBQzNELE1BQU0sTUFBTSxNQUFNLE1BQU0sSUFBWSxFQUFFLEtBQUssR0FBRyxxQkFBcUIsU0FBUyxDQUFDO0FBQzdFLEtBQUksQ0FBQyxJQUFLLFFBQU87QUFDakIsUUFBTyxLQUFLLE1BQU0sSUFBSTs7QUFHeEIsZUFBZSxpQkFBaUIsT0FBOEI7Q0FDNUQsTUFBTSxRQUFRLG9CQUFvQjtBQUNsQyxLQUFJLENBQUMsTUFBTztBQUNaLE9BQU0sTUFBTSxPQUFPLEVBQUUsS0FBSyxHQUFHLHFCQUFxQixTQUFTLENBQUM7O0FBRzlELE1BQU0sU0FBUyxVQUFVLENBQUMsUUFBUSxDQUFDO0FBQ25DLE1BQU0sY0FBYyxVQUFVLENBQUMsU0FBUyxRQUFRLENBQUM7QUFFakQsSUFBTSxrQkFBTixjQUE4QixlQUFlO0NBQzNDLGNBQWM7QUFDWixRQUFNLFFBQVE7O0NBR2hCLE1BQ00sTUFBTSxNQUF3QztFQUNsRCxNQUFNLG1CQUFtQixLQUFLLFlBQVksS0FBSyxTQUFTLFFBQVE7QUFHaEUsTUFBSSxxQkFBcUIsT0FBTztHQUM5QixNQUFNLEVBQUUsY0FBYyxjQUFjLE1BQU0sWUFBWSxLQUFLO0FBQzNELE9BQUk7SUFDRixNQUFNLFNBQVMsTUFBTSxnQkFBZ0IsTUFBTSxNQUFNLEtBQUssUUFBUTtJQUM5RCxNQUFNLFlBQVksTUFBTSxXQUFXLGNBQWMsV0FBVyxNQUFNLE9BQU87QUFDekUsV0FBTztLQUFFLEdBQUc7S0FBUSxZQUFZLFVBQVU7S0FBWTtZQUMvQyxHQUFHO0FBQ1YsVUFBTSxtQkFBbUIsY0FBZSxFQUFZLFNBQVMsS0FBSztBQUNsRSxVQUFNOzs7RUFLVixNQUFNLFNBQVMsTUFBTSxnQkFBZ0IsTUFBTSxNQUFNLEtBQUssUUFBUTtBQUU5RCxNQUFJLHFCQUFxQixRQUFRO0dBQy9CLE1BQU0sZ0JBQWdCLE9BQU8sUUFBUSxRQUFRLFNBQVMsS0FBSyxTQUFTLFlBQVksQ0FBQztHQUNqRixNQUFNLGVBQWUsT0FBTyxRQUN6QixRQUFRLFNBQVMsS0FBSyxTQUFTLE9BQU8sQ0FDdEMsS0FBSyxTQUFTLEtBQUssS0FBSyxDQUN4QixLQUFLLEtBQUs7QUFFYixtQkFBZ0IsS0FBSyxDQUNuQjtJQUNFLFlBQVksT0FBTztJQUNuQixjQUFjLEtBQUssYUFBYSxTQUFTLEtBQUssY0FBYztJQUM1RCxZQUFZLE9BQU8sU0FBUztJQUM1QixhQUFhLEtBQUs7SUFDbEIsZUFBZSxLQUFLLFVBQVU7SUFDOUIsVUFBVTtJQUNWLGNBQWMsT0FBTyxNQUFNO0lBQzNCLGVBQWUsT0FBTyxNQUFNO0lBQzVCLG1CQUFtQixPQUFPLE1BQU07SUFDaEMsdUJBQXVCLE9BQU8sTUFBTTtJQUNwQyxhQUFhLE9BQU87SUFDcEIsVUFBVSxPQUFPLFlBQVksT0FBTyxLQUFLLE1BQU0sT0FBTyxVQUFVLFVBQVUsR0FBRztJQUM3RSxRQUFRLEtBQUssVUFBVTtJQUN2QixTQUFTLEtBQUssVUFBVSxLQUFLLE1BQU0sS0FBSyxRQUFRLEdBQUc7SUFDbkQsUUFBUTtJQUNSLGlCQUFpQjtJQUNsQixDQUNGLENBQUMsQ0FBQyxPQUFPLE1BQU0sT0FBTyxNQUFNLDJCQUE0QixFQUFZLFVBQVUsQ0FBQzs7QUFHbEYsU0FBTzs7Q0FHVCxNQUNNLGNBQWMsTUFBaUQ7RUFDbkUsTUFBTSxXQUFXLE9BQU8sWUFBWTtBQUNwQyxpQkFBZSxJQUFJLFVBQVUsS0FBSztBQUNsQyxtQkFBaUIsZUFBZSxPQUFPLFNBQVMsRUFBRSxJQUFPO0FBQ3pELFNBQU8sRUFBRSxVQUFVOztDQUdyQixNQUNNLFlBQVksVUFBaUM7RUFDakQsTUFBTSxPQUFPLGVBQWUsSUFBSSxTQUFTO0FBQ3pDLGlCQUFlLE9BQU8sU0FBUztBQUMvQixNQUFJLENBQUMsS0FBTSxPQUFNLElBQUksTUFBTSw4QkFBOEI7RUFHekQsTUFBTSxhQURtQixLQUFLLFlBQVksS0FBSyxTQUFTLFFBQVEsYUFDekI7RUFFdkMsSUFBSTtBQUNKLE1BQUksVUFDRixLQUFJO0FBQ0YsYUFBVSxNQUFNLFlBQVksS0FBSztXQUMxQixHQUFHO0FBQ1YsVUFBTyxNQUFNLDhCQUErQixFQUFZLFVBQVU7O0VBS3RFLE1BQU0sTUFETSxPQUFPLFlBQVksQ0FDZixVQUFVLGFBQWE7RUFDdkMsSUFBSTtFQUNKLElBQUk7RUFDSixJQUFJO0VBQ0osSUFBSTtBQUVKLE1BQUksY0FBYztBQUNoQixPQUFJLFlBQVksT0FDZCxpQkFBZ0Isa0JBQWtCLG9CQUFvQixVQUFVLE9BQU8sQ0FBQyxZQUFZLEdBQUc7SUFFekY7QUFFRixNQUFJO0FBQ0YsU0FBTSxnQkFBZ0IsWUFBWSxNQUFNO0lBQ3RDLFVBQVUsU0FBUztBQUNqQixTQUFJLENBQUMsSUFBSSxPQUFRLEtBQUksUUFBUSxTQUFTLEVBQUUsTUFBTSxDQUFDOztJQUVqRCxhQUFhLE9BQU87QUFDbEIsZ0JBQVc7QUFDWCxTQUFJLElBQUksVUFBVSxPQUNoQixpQkFBZ0Isa0JBQWtCLG9CQUFvQixVQUFVLE9BQU8sQ0FBQyxZQUFZLEdBQUc7O0lBRzNGLFdBQVcsT0FBTztBQUNoQixjQUFTO0FBQ1QsU0FBSSxJQUFJLFVBQVUsU0FDaEIsaUJBQWdCLGtCQUFrQixvQkFBb0IsVUFBVSxPQUFPLENBQUMsWUFBWSxHQUFHOztJQUczRixhQUFhLFdBQVc7QUFDdEIsb0JBQWU7O0lBRWpCLFVBQVUsUUFBUTtBQUNoQixtQkFBYzs7SUFFakIsQ0FBQztXQUNLLEdBQUc7QUFDVixpQkFBYzs7QUFJaEIsTUFBSSxjQUFjO0dBQ2hCLElBQUk7QUFDSixPQUFJLFFBQ0YsS0FBSTtBQU9GLGtCQU5rQixNQUFNLFdBQ3RCLFFBQVEsY0FDUixRQUFRLFdBQ1IsTUFDQSxhQUNELEVBQ3NCO1lBQ2hCLEdBQUc7QUFDVixXQUFPLE1BQU0sNkJBQThCLEVBQVksVUFBVTs7QUFHckUsT0FBSSxDQUFDLElBQUksT0FBUSxLQUFJLFFBQVEsUUFBUTtJQUFFLEdBQUc7SUFBYztJQUFZLENBQUM7YUFDNUQsYUFBYTtBQUN0QixPQUFJLFFBQVMsT0FBTSxtQkFBbUIsUUFBUSxjQUFjLFlBQVksU0FBUyxLQUFLO0FBQ3RGLE9BQUksQ0FBQyxJQUFJLE9BQVEsS0FBSSxRQUFRLFNBQVMsRUFBRSxTQUFTLFlBQVksU0FBUyxDQUFDO2FBQzlELElBQUksVUFBVSxRQUN2QixPQUFNLGlCQUFpQixRQUFRLGNBQWMsS0FBSztBQUdwRCxRQUFNLElBQUksS0FBSzs7Q0FHakIsTUFDTSxVQUFVLE9BQTBEO0FBU3hFLFNBQU8sRUFBRSxjQVJZLE1BQU0sZ0JBQWdCLFVBQVU7R0FDbkQsYUFBYSxNQUFNO0dBQ25CLFlBQVksTUFBTTtHQUNsQixRQUFRLE1BQU07R0FDZCxjQUFjLE1BQU07R0FDcEIsZUFBZSxNQUFNO0dBQ3JCLFNBQVMsTUFBTSxVQUFVLEtBQUssTUFBTSxNQUFNLFFBQVEsR0FBRztHQUN0RCxDQUFDLEVBQ3FCOztDQUd6QixNQUNNLFdBQVcsT0FBcUQ7QUFvQnBFLFNBQU8sRUFBRSxRQW5CTSxNQUFNLGdCQUFnQixXQUFXLE1BQU0sY0FBYztHQUNsRSxZQUFZLE1BQU07R0FDbEIsTUFBTSxNQUFNO0dBQ1osY0FBYyxNQUFNO0dBQ3BCLGVBQWUsTUFBTTtHQUNyQixtQkFBbUIsTUFBTTtHQUN6Qix1QkFBdUIsTUFBTTtHQUM3QixhQUFhLE1BQU07R0FDbkIsZUFBZSxNQUFNO0dBQ3JCLGdCQUFnQixNQUFNO0dBQ3RCLGtCQUFrQixNQUFNO0dBQ3hCLGlCQUFpQixNQUFNO0dBQ3ZCLGNBQWMsTUFBTTtHQUNwQixXQUFXLE1BQU07R0FDakIsV0FBVyxNQUFNO0dBQ2pCLGFBQWEsTUFBTTtHQUNuQixrQkFBa0IsTUFBTTtHQUN4QixPQUFPLE1BQU07R0FDZCxDQUFDLEVBQ2U7O0NBR25CLE1BQ00sVUFBVSxPQUFpRDtBQUMvRCxRQUFNLGdCQUFnQixVQUFVLE1BQU0sY0FBYztHQUNsRCxRQUFRLE1BQU07R0FDZCxVQUFVLE1BQU07R0FDaEIsWUFBWSxNQUFNO0dBQ2xCLGNBQWMsTUFBTTtHQUNwQixlQUFlLE1BQU07R0FDckIsbUJBQW1CLE1BQU07R0FDekIsdUJBQXVCLE1BQU07R0FDN0IsYUFBYSxNQUFNO0dBQ25CLFNBQVMsTUFBTSxVQUFVLEtBQUssTUFBTSxNQUFNLFFBQVEsR0FBRztHQUNyRCxlQUFlLE1BQU07R0FDdEIsQ0FBQztBQUNGLFNBQU8sRUFBRSxJQUFJLE1BQU07O0NBR3JCLE1BQ00sUUFBK0I7QUFDbkMsU0FBTyxnQkFBZ0IsVUFBVTs7Q0FHbkMsTUFDTSxVQUFVLFdBQThDO0FBQzVELFNBQU8sRUFBRSxLQUFLLE1BQU0sZ0JBQWdCLFVBQVUsRUFBRSxZQUFZLFdBQVcsQ0FBQyxFQUFFOztDQUc1RSxNQUNNLGVBQTZDO0FBQ2pELFNBQU8sRUFBRSxPQUFPLE1BQU0sZ0JBQWdCLHNCQUFzQixFQUFFOztDQUdoRSxNQUNNLFNBQ0osVUFDQSxhQUNBLE1BQzZCO0FBQzdCLFFBQU0sV0FBVyxLQUFLLENBQ3BCO0dBQ0U7R0FDQTtHQUNBO0dBQ0QsQ0FDRixDQUFDO0FBQ0YsU0FBTyxFQUFFLE9BQU8sTUFBTTs7Q0FHeEIsTUFDTSxZQUFZLElBQVksTUFBOEM7RUFDMUUsTUFBTSxRQUFRLE1BQU0sV0FBVyxRQUFRLEtBQUssRUFBRSxJQUFJLENBQUM7QUFDbkQsTUFBSSxDQUFDLE1BQU8sUUFBTyxFQUFFLFNBQVMsT0FBTztBQUVyQyxRQUFNLFdBQVcsS0FBSyxDQUNwQjtHQUNFLElBQUksTUFBTTtHQUNWLFVBQVUsTUFBTTtHQUNoQixhQUFhLE1BQU07R0FDbkIsTUFBTSxTQUFTLFNBQVksT0FBTyxNQUFNO0dBQ3pDLENBQ0YsQ0FBQztBQUNGLFNBQU8sRUFBRSxTQUFTLE1BQU07O0NBRzFCLE1BQ00sWUFBWSxJQUEyQztFQUMzRCxNQUFNLFFBQVEsTUFBTSxXQUFXLFFBQVEsS0FBSyxFQUFFLElBQUksQ0FBQztBQUNuRCxNQUFJLENBQUMsTUFBTyxRQUFPLEVBQUUsU0FBUyxPQUFPO0FBQ3JDLFFBQU0sV0FBVyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUM7QUFDaEMsU0FBTyxFQUFFLFNBQVMsTUFBTTs7Ozs7Q0FNMUIsTUFDTSxZQUFZLElBQTBDO0VBQzFELE1BQU0sUUFBUSxNQUFNLFdBQVcsUUFBUSxLQUFLLEVBQUUsSUFBSSxDQUFDO0FBQ25ELE1BQUksQ0FBQyxNQUFPLFFBQU8sRUFBRSxRQUFRLE9BQU87RUFFcEMsTUFBTSxZQUFZLENBQUMsTUFBTTtBQUN6QixRQUFNLFdBQVcsS0FBSyxDQUNwQjtHQUNFO0dBQ0EsVUFBVSxNQUFNO0dBQ2hCLGFBQWEsTUFBTTtHQUNuQixRQUFRO0dBQ1IsTUFBTSxNQUFNO0dBQ2IsQ0FDRixDQUFDO0FBQ0YsU0FBTyxFQUFFLFFBQVEsV0FBVzs7Q0FHOUIsTUFDTSxXQUFXLE1BQXlDO0VBQ3hELE1BQU0sRUFBRSxjQUFjLGVBQWUsVUFBVSxjQUFjO0VBRzdELE1BQU0sY0FBYyxvQkFERCxRQUFRLElBQUksUUFBUSxRQUNZO0VBQ25ELE1BQU0sVUFBVSxhQUFhLGVBQWUsT0FBTyxZQUFZO0FBRS9ELFFBQU0sY0FBYyxPQUFPO0dBQUU7R0FBYztHQUFNO0dBQWEsQ0FBQztBQUUvRCxTQUFPLEVBQUUsU0FBUzs7Q0FHcEIsTUFBTSxvQkFBb0IsTUFBYyxPQUFlLE9BQW9DO0VBQ3pGLE1BQU0sVUFBVSxNQUFNLGNBQWMsTUFBTTtBQUMxQyxNQUFJLENBQUMsU0FBUztBQUNaLFVBQU8sS0FBSyxnQ0FBZ0M7QUFDNUMsVUFBTyxNQUFNLFNBQVMscUNBQXFDOztBQUU3RCxRQUFNLGlCQUFpQixNQUFNO0FBRTdCLE1BQUk7R0FDRixNQUFNLFNBQVMsTUFBTSxzQkFDbkIsTUFDQSxRQUFRLGNBQ1IsT0FDQSxRQUFRLFlBQ1Q7QUFFRCxPQUFJLE9BQU8sYUFBYTtJQUN0QixNQUFNLGFBQWEsTUFBTSxXQUFXLHdCQUNsQyxLQUNBLGFBQ0EsT0FBTyxZQUNSO0FBQ0QsUUFBSSxXQUFXLFNBQVMsRUFDdEIsT0FBTSxXQUFXLElBQUksV0FBVyxLQUFLLE1BQU0sRUFBRSxHQUFHLENBQUM7O0FBSXJELFNBQU0sV0FBVyxLQUFLLENBQ3BCO0lBQ0UsVUFBVTtJQUNWLGFBQWE7S0FDWCxhQUFhLE9BQU87S0FDcEIsY0FBYyxPQUFPO0tBQ3JCLFdBQVcsT0FBTyxhQUFhO0tBQy9CLGFBQWEsT0FBTyxlQUFlO0tBQ3BDO0lBQ0QsTUFBTSxRQUFRO0lBQ2YsQ0FDRixDQUFDO0FBRUYsVUFBTyxNQUFNLFNBQVMsd0JBQXdCLG1CQUFtQixRQUFRLEtBQUssR0FBRztXQUMxRSxHQUFHO0FBQ1YsVUFBTyxNQUFNLFNBQVMsd0JBQXdCLG1CQUFvQixFQUFZLFFBQVEsR0FBRzs7O0NBSTdGLE1BQ00saUJBQWlCLE1BQXlDO0FBQzlELE1BQUksQ0FBQyxnQkFBZ0IsaUJBQWtCLE9BQU0sSUFBSSxNQUFNLG9DQUFvQztFQUMzRixNQUFNLEVBQUUsWUFBWSxNQUFNLGdCQUFnQixpQkFBaUIsa0JBQWtCLEtBQUs7QUFHbEYsa0JBQWdCLGlCQUNiLHNCQUFzQixDQUN0QixLQUFLLE9BQU8sVUFBVTtBQUNyQixPQUFJLE1BQU0sV0FBVztJQUNuQixNQUFNLGFBQWEsTUFBTSxXQUFXLHdCQUNsQyxLQUNBLFVBQ0EsTUFBTSxVQUNQO0FBQ0QsUUFBSSxXQUFXLFNBQVMsRUFDdEIsT0FBTSxXQUFXLElBQUksV0FBVyxLQUFLLE1BQU0sRUFBRSxHQUFHLENBQUM7O0FBR3JELFNBQU0sV0FBVyxLQUFLLENBQ3BCO0lBQ0UsVUFBVTtJQUNWLGFBQWE7S0FDWCxhQUFhLE1BQU07S0FDbkIsY0FBYyxNQUFNO0tBQ3BCLFNBQVMsTUFBTTtLQUNmLHNCQUFzQixLQUFLLEtBQUssR0FBRyxNQUFVLE9BQU87S0FDcEQsV0FBVyxNQUFNO0tBQ2xCO0lBQ0Q7SUFDRCxDQUNGLENBQUM7QUFDRixVQUFPLEtBQUssMEJBQTBCLE9BQU87SUFDN0MsQ0FDRCxPQUFPLE1BQU07QUFDWixVQUFPLEtBQUssZ0NBQWlDLEVBQVksVUFBVTtJQUNuRTtBQUVKLFNBQU8sRUFBRSxTQUFTOztDQUdwQixNQUNNLE1BQU0sU0FBMEM7RUFDcEQsTUFBTSxFQUFFLE1BQU0sY0FBYyxNQUFNLFdBQVcsU0FBUyxJQUFJO0VBQzFELE1BQU0sUUFBUSxVQUNWLFVBQVUsTUFBTSxNQUFNLEVBQUUsT0FBTyxRQUFRLEdBQ3ZDLFVBQVUsVUFBVSxNQUFNLEVBQUUsVUFBVSxFQUFFLGFBQWEsWUFBWTtBQUVyRSxNQUFJLENBQUMsTUFBTyxRQUFPLEVBQUUsT0FBTyxhQUFhO0FBRXpDLE1BQUksTUFBTSxhQUFhLFNBQ3JCLEtBQUk7R0FPRixNQUFNLE1BTk8sTUFBTSxnQkFBZ0Isa0JBQWtCLGNBQWMsTUFBTSxLQUFLLEdBTTlEO0FBQ2hCLFVBQU87SUFDTCxVQUFVO0lBQ1YsVUFBVSxJQUFJLFVBQ1Y7S0FDRSxhQUFhLEdBQUcsUUFBUTtLQUN4QiwyQkFBVSxJQUFJLEtBQUssR0FBRyxRQUFRLFdBQVcsSUFBSyxFQUFDLGFBQWE7S0FDN0QsR0FDRDtJQUNKLFVBQVUsSUFBSSxZQUNWO0tBQ0UsYUFBYSxHQUFHLFVBQVU7S0FDMUIsMkJBQVUsSUFBSSxLQUFLLEdBQUcsVUFBVSxXQUFXLElBQUssRUFBQyxhQUFhO0tBQy9ELEdBQ0Q7SUFDTDtXQUNNLEdBQUc7QUFDVixVQUFPLEVBQUUsT0FBTyx3QkFBeUIsRUFBWSxXQUFXOztBQUlwRSxNQUFJLE1BQU0sYUFBYSxZQUNyQixRQUFPLEVBQUUsT0FBTyx5Q0FBeUMsTUFBTSxZQUFZO0VBRzdFLElBQUksY0FBYyxlQUFlLE1BQU0sWUFBWTtBQUduRCxNQUZrQixhQUFhLE1BQU0sWUFBWSxHQUFHLEtBQUssS0FBSyxJQUU3QyxnQkFBZ0IsTUFBTSxZQUFZLENBQ2pELEtBQUk7QUFDRixpQkFBYyxNQUFNLEtBQUssYUFBYSxNQUFNO1dBQ3JDLEdBQUc7QUFDVixlQUFZLEtBQUssc0JBQXNCLE1BQU0sS0FBSyxJQUFLLEVBQVksVUFBVTtBQUM3RSxVQUFPLEVBQUUsT0FBTyxxQkFBcUI7O0VBSXpDLE1BQU0sTUFBTSxNQUFNLFdBQVcsWUFBWTtBQUN6QyxNQUFJLElBQUksU0FBUyxnQkFBZ0IsTUFBTSxZQUFZLENBQ2pELEtBQUk7QUFDRixpQkFBYyxNQUFNLEtBQUssYUFBYSxNQUFNO0dBQzVDLE1BQU0sVUFBVSxNQUFNLFdBQVcsWUFBWTtBQUM3QyxPQUFJLFFBQVEsTUFBTyxRQUFPLEVBQUUsT0FBTyxRQUFRLE9BQU87QUFDbEQsVUFBTyxzQkFBc0IsUUFBUTtXQUM5QixHQUFHO0FBQ1YsZUFBWSxLQUFLLHNCQUFzQixNQUFNLEtBQUssSUFBSyxFQUFZLFVBQVU7QUFDN0UsVUFBTyxFQUFFLE9BQU8scUJBQXFCOztBQUd6QyxNQUFJLElBQUksTUFBTyxRQUFPLEVBQUUsT0FBTyxJQUFJLE9BQU87QUFDMUMsU0FBTyxzQkFBc0IsSUFBSTs7Q0FHbkMsTUFBTSxhQUFhLE9BQXNDO0VBQ3ZELE1BQU0sUUFBUSxNQUFNO0VBQ3BCLE1BQU0sS0FBSyxnQkFBZ0IsTUFBTTtBQUNqQyxNQUFJLENBQUMsR0FBSSxPQUFNLElBQUksTUFBTSxtQkFBbUI7RUFDNUMsTUFBTSxZQUFZLE1BQU0sbUJBQW1CLEdBQUc7RUFDOUMsTUFBTSxVQUFVLGlCQUFpQixNQUFNO0dBQ3JDLEdBQUc7R0FDSCxhQUFhLFVBQVU7R0FDdkIsY0FBYyxVQUFVO0dBQ3hCLFdBQVcsVUFBVTtHQUN0QixDQUFDO0FBQ0YsUUFBTSxXQUFXLEtBQUssQ0FDcEI7R0FDRSxJQUFJLE1BQU07R0FDVixVQUFVLE1BQU07R0FDaEIsYUFBYTtHQUNiLE1BQU0sTUFBTTtHQUNiLENBQ0YsQ0FBQztBQUNGLFNBQU8sVUFBVTs7Q0FHbkIsTUFDTSxTQUFrQztBQUN0QyxTQUFPO0dBQ0wsUUFBUTtHQUNSLGNBQWMsZ0JBQWdCLE9BQU87R0FDckMsWUFBWSxnQkFBZ0IsWUFBWSxRQUFRLElBQUk7R0FDckQ7Ozs7Q0ExZEYsSUFBSTtFQUFFLFlBQVk7RUFBUSxTQUFTLENBQUMsU0FBUyxvQkFBb0I7RUFBRSxDQUFDOzs7Ozs7Q0FvRHBFLElBQUk7RUFBRSxZQUFZO0VBQVEsU0FBUyxDQUFDLFNBQVMsb0JBQW9CO0VBQUUsQ0FBQzs7Ozs7O0NBUXBFLE9BQU87RUFBRSxNQUFNO0VBQU8sUUFBUTtFQUFjLENBQUM7Ozs7OztDQXNGN0MsSUFBSTtFQUFFLFlBQVk7RUFBUSxTQUFTLENBQUMsU0FBUyxvQkFBb0I7RUFBRSxDQUFDOzs7Ozs7Q0FhcEUsSUFBSTtFQUFFLFlBQVk7RUFBUSxTQUFTLENBQUMsU0FBUyxvQkFBb0I7RUFBRSxDQUFDOzs7Ozs7Q0F3QnBFLElBQUk7RUFBRSxZQUFZO0VBQVEsU0FBUyxDQUFDLFNBQVMsb0JBQW9CO0VBQUUsQ0FBQzs7Ozs7O0NBaUJwRSxJQUFJO0VBQUUsWUFBWTtFQUFPLFNBQVMsQ0FBQyxTQUFTLGlCQUFpQjtFQUFFLENBQUM7Ozs7OztDQUtoRSxJQUFJO0VBQUUsWUFBWTtFQUFPLFNBQVMsQ0FBQyxTQUFTLGlCQUFpQjtFQUFFLENBQUM7Ozs7OztDQUtoRSxJQUFJO0VBQUUsWUFBWTtFQUFPLFNBQVMsQ0FBQyxTQUFTLGlCQUFpQjtFQUFFLENBQUM7Ozs7OztDQUtoRSxJQUFJO0VBQUUsWUFBWTtFQUFRLFNBQVMsQ0FBQyxTQUFTLG9CQUFvQjtFQUFFLENBQUM7Ozs7Ozs7Ozs7Q0FnQnBFLElBQUk7RUFBRSxZQUFZO0VBQVEsU0FBUyxDQUFDLFNBQVMsb0JBQW9CO0VBQUUsQ0FBQzs7Ozs7O0NBZ0JwRSxJQUFJO0VBQUUsWUFBWTtFQUFRLFNBQVMsQ0FBQyxTQUFTLG9CQUFvQjtFQUFFLENBQUM7Ozs7OztDQVdwRSxJQUFJO0VBQUUsWUFBWTtFQUFRLFNBQVMsQ0FBQyxTQUFTLG9CQUFvQjtFQUFFLENBQUM7Ozs7OztDQWtCcEUsSUFBSTtFQUFFLFlBQVk7RUFBUSxTQUFTLENBQUMsU0FBUyxvQkFBb0I7RUFBRSxDQUFDOzs7Ozs7Q0EyRHBFLElBQUk7RUFBRSxZQUFZO0VBQVEsU0FBUyxDQUFDLFNBQVMsb0JBQW9CO0VBQUUsQ0FBQzs7Ozs7O0NBeUNwRSxJQUFJO0VBQUUsWUFBWTtFQUFPLFNBQVMsQ0FBQyxTQUFTLGlCQUFpQjtFQUFFLENBQUM7Ozs7OztDQTRGaEUsSUFBSTtFQUFFLFlBQVk7RUFBTyxTQUFTLENBQUMsU0FBUyxpQkFBaUI7RUFBRSxDQUFDOzs7OztBQVVuRSxNQUFhLGFBQWEsSUFBSSxpQkFBaUI7QUFFL0MsU0FBUyxzQkFBc0IsS0FBdUM7QUFDcEUsUUFBTztFQUNMLFVBQVU7RUFDVixVQUFVLElBQUksWUFDVjtHQUFFLGFBQWEsSUFBSSxVQUFVO0dBQWEsVUFBVSxJQUFJLFVBQVU7R0FBVyxHQUM3RTtFQUNKLFVBQVUsSUFBSSxZQUNWO0dBQUUsYUFBYSxJQUFJLFVBQVU7R0FBYSxVQUFVLElBQUksVUFBVTtHQUFXLEdBQzdFO0VBQ0wifQ==
|
|
570
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWdyaWQuZnJhbWUuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3FncmlkL3FncmlkLmZyYW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjcnlwdG8gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5cbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gXCJAbG9ndGFwZS9sb2d0YXBlXCI7XG5pbXBvcnQgeyB0eXBlIEZhc3RpZnlSZXBseSB9IGZyb20gXCJmYXN0aWZ5XCI7XG5pbXBvcnQgeyBhcGksIEJhc2VGcmFtZUNsYXNzLCBTb25hbXUsIHN0cmVhbSB9IGZyb20gXCJzb25hbXVcIjtcbmltcG9ydCB7IGdldENhY2hlTWFuYWdlclJlZiB9IGZyb20gXCJzb25hbXUvY2FjaGVcIjtcblxuaW1wb3J0IHtcbiAgZ2V0QWNjZXNzVG9rZW4sXG4gIGdldEV4cGlyZXNBdCxcbiAgZ2V0UmVmcmVzaFRva2VuLFxufSBmcm9tIFwiLi4vLi4vdXRpbHMvcHJvdmlkZXJzL2NvbW1vbi9jcmVkZW50aWFsc1wiO1xuaW1wb3J0IHsgTUlDUk9fVVNELCBSZXF1ZXN0TG9nTW9kZWwgfSBmcm9tIFwiLi4vcmVxdWVzdC1sb2cvcmVxdWVzdC1sb2cubW9kZWxcIjtcbmltcG9ydCB7IHR5cGUgVG9rZW5TdWJzZXRBIH0gZnJvbSBcIi4uL3NvbmFtdS5nZW5lcmF0ZWRcIjtcbmltcG9ydCB7IFRva2VuTW9kZWwgfSBmcm9tIFwiLi4vdG9rZW4vdG9rZW4ubW9kZWxcIjtcbmltcG9ydCB7IFRva2VuQ3JlZGVudGlhbHMgfSBmcm9tIFwiLi4vdG9rZW4vdG9rZW4udHlwZXNcIjtcbmltcG9ydCB7XG4gIHR5cGUgQW50aHJvcGljVXNhZ2VSYXcsXG4gIGJ1aWxkQXV0aFVybCxcbiAgZXhjaGFuZ2VDb2RlRm9yVG9rZW5zLFxuICBmZXRjaFVzYWdlLFxuICBnZW5lcmF0ZVBLQ0UsXG4gIHJlZnJlc2hBY2Nlc3NUb2tlbixcbn0gZnJvbSBcIi4vb2F1dGhcIjtcbmltcG9ydCB7XG4gIGFmdGVyUXVlcnksXG4gIGJlZm9yZVF1ZXJ5LFxuICBmaW5pc2hSdW5BYm9ydGVkLFxuICBmaW5pc2hSdW5XaXRoRXJyb3IsXG59IGZyb20gXCIuL3FncmlkLXJ1bi1saWZlY3ljbGVcIjtcbmltcG9ydCB7IFFncmlkRGlzcGF0Y2hlciB9IGZyb20gXCIuL3FncmlkLmRpc3BhdGNoZXJcIjtcbmltcG9ydCB7XG4gIHR5cGUgUXVlcnlJbnB1dCxcbiAgdHlwZSBBcHBlbmRTdGVwSW5wdXQsXG4gIHR5cGUgQ3JlYXRlUnVuSW5wdXQsXG4gIHR5cGUgRmluaXNoUnVuSW5wdXQsXG4gIHR5cGUgSGVhbHRoUmVzcG9uc2UsXG4gIHR5cGUgT0F1dGhTdGFydFJlc3VsdCxcbiAgdHlwZSBRdWVyeU91dHB1dCxcbiAgU3RyZWFtRXZlbnRzLFxuICB0eXBlIFRva2VuU3RhdHMsXG4gIHR5cGUgVXNhZ2VSZXNwb25zZSxcbn0gZnJvbSBcIi4vcWdyaWQudHlwZXNcIjtcblxuY29uc3QgcGVuZGluZ1N0cmVhbXMgPSBuZXcgTWFwPHN0cmluZywgUXVlcnlJbnB1dD4oKTtcblxudHlwZSBQZW5kaW5nT0F1dGggPSB7IGNvZGVWZXJpZmllcjogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IHJlZGlyZWN0VXJpOiBzdHJpbmcgfTtcbmNvbnN0IE9BVVRIX1NUQVRFX1BSRUZJWCA9IFwib2F1dGg6c3RhdGU6XCI7XG5jb25zdCBPQVVUSF9TVEFURV9UVEwgPSBcIjVtXCI7XG5cbmFzeW5jIGZ1bmN0aW9uIHNldE9BdXRoU3RhdGUoc3RhdGU6IHN0cmluZywgZGF0YTogUGVuZGluZ09BdXRoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGNhY2hlID0gZ2V0Q2FjaGVNYW5hZ2VyUmVmKCk7XG4gIGlmICghY2FjaGUpIHRocm93IG5ldyBFcnJvcihcIkNhY2hlTWFuYWdlciBub3QgaW5pdGlhbGl6ZWRcIik7XG4gIGF3YWl0IGNhY2hlLnNldCh7XG4gICAga2V5OiBgJHtPQVVUSF9TVEFURV9QUkVGSVh9JHtzdGF0ZX1gLFxuICAgIHZhbHVlOiBKU09OLnN0cmluZ2lmeShkYXRhKSxcbiAgICB0dGw6IE9BVVRIX1NUQVRFX1RUTCxcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldE9BdXRoU3RhdGUoc3RhdGU6IHN0cmluZyk6IFByb21pc2U8UGVuZGluZ09BdXRoIHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IGNhY2hlID0gZ2V0Q2FjaGVNYW5hZ2VyUmVmKCk7XG4gIGlmICghY2FjaGUpIHRocm93IG5ldyBFcnJvcihcIkNhY2hlTWFuYWdlciBub3QgaW5pdGlhbGl6ZWRcIik7XG4gIGNvbnN0IHJhdyA9IGF3YWl0IGNhY2hlLmdldDxzdHJpbmc+KHsga2V5OiBgJHtPQVVUSF9TVEFURV9QUkVGSVh9JHtzdGF0ZX1gIH0pO1xuICBpZiAoIXJhdykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIEpTT04ucGFyc2UocmF3KSBhcyBQZW5kaW5nT0F1dGg7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRlbGV0ZU9BdXRoU3RhdGUoc3RhdGU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBjYWNoZSA9IGdldENhY2hlTWFuYWdlclJlZigpO1xuICBpZiAoIWNhY2hlKSByZXR1cm47XG4gIGF3YWl0IGNhY2hlLmRlbGV0ZSh7IGtleTogYCR7T0FVVEhfU1RBVEVfUFJFRklYfSR7c3RhdGV9YCB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0T0F1dGhSZWRpcmVjdFVyaSgpOiBzdHJpbmcge1xuICBjb25zdCBwdWJsaWNCYXNlVXJsID0gcHJvY2Vzcy5lbnYuUUdSSURfUFVCTElDX0JBU0VfVVJMPy5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpO1xuICBpZiAocHVibGljQmFzZVVybCkgcmV0dXJuIGAke3B1YmxpY0Jhc2VVcmx9L2NhbGxiYWNrYDtcblxuICBjb25zdCBzZXJ2ZXJQb3J0ID0gcHJvY2Vzcy5lbnYuUE9SVCA/PyBcIjQ0OTAwXCI7XG4gIHJldHVybiBgaHR0cDovL2xvY2FsaG9zdDoke3NlcnZlclBvcnR9L2NhbGxiYWNrYDtcbn1cblxuY29uc3QgbG9nZ2VyID0gZ2V0TG9nZ2VyKFtcInFncmlkXCJdKTtcbmNvbnN0IG9hdXRoTG9nZ2VyID0gZ2V0TG9nZ2VyKFtcInFncmlkXCIsIFwib2F1dGhcIl0pO1xuXG5jbGFzcyBRZ3JpZEZyYW1lQ2xhc3MgZXh0ZW5kcyBCYXNlRnJhbWVDbGFzcyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiUWdyaWRcIik7XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJQT1NUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stbXV0YXRpb25cIl0gfSlcbiAgYXN5bmMgcXVlcnkoYXJnczogUXVlcnlJbnB1dCk6IFByb21pc2U8UXVlcnlPdXRwdXQ+IHtcbiAgICBjb25zdCBlZmZlY3RpdmVMb2dNb2RlID0gYXJncy5sb2dNb2RlID8/IChhcmdzLmlzU3RlcCA/IFwicnVuXCIgOiBcImF1dG9cIik7XG5cbiAgICAvLyBsb2dNb2RlOiBcInJ1blwiIOKGkiDshJzrsoTqsIAgbGlmZWN5Y2xlIOq0gOumrFxuICAgIGlmIChlZmZlY3RpdmVMb2dNb2RlID09PSBcInJ1blwiKSB7XG4gICAgICBjb25zdCB7IHJlcXVlc3RMb2dJZCwgc3RlcEluZGV4IH0gPSBhd2FpdCBiZWZvcmVRdWVyeShhcmdzKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFFncmlkRGlzcGF0Y2hlci5xdWVyeShhcmdzLCBhcmdzLnRpbWVvdXQpO1xuICAgICAgICBjb25zdCBsaWZlY3ljbGUgPSBhd2FpdCBhZnRlclF1ZXJ5KHJlcXVlc3RMb2dJZCwgc3RlcEluZGV4LCBhcmdzLCByZXN1bHQpO1xuICAgICAgICByZXR1cm4geyAuLi5yZXN1bHQsIHJ1bkNvbnRleHQ6IGxpZmVjeWNsZS5ydW5Db250ZXh0IH07XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGF3YWl0IGZpbmlzaFJ1bldpdGhFcnJvcihyZXF1ZXN0TG9nSWQsIChlIGFzIEVycm9yKS5tZXNzYWdlLCBhcmdzKTtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBsb2dNb2RlOiBcImF1dG9cIiAo6riw7KG0IG5vbi1zdGVwIOqyveuhnCkg65iQ64qUIFwibm9uZVwiXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUWdyaWREaXNwYXRjaGVyLnF1ZXJ5KGFyZ3MsIGFyZ3MudGltZW91dCk7XG5cbiAgICBpZiAoZWZmZWN0aXZlTG9nTW9kZSA9PT0gXCJhdXRvXCIpIHtcbiAgICAgIHRoaXMuc2F2ZUF1dG9SZXF1ZXN0TG9nKGFyZ3MsIHJlc3VsdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGxvZ01vZGUgXCJhdXRvXCIg64uo7J28IOyalOyyrSDroZzquYU6IHJ1biBsaWZlY3ljbGUoc3RlcCDrtoTtlbQpIOyXhuydtCByZXF1ZXN0X2xvZyAx6rG066eMIOuCqOq4tOuLpC5cbiAgLy8gcXVlcnnsmYAgcXVlcnlTdHJlYW0g7JaR7Kq97JeQ7IScIOyCrOyaqS5cbiAgcHJpdmF0ZSBzYXZlQXV0b1JlcXVlc3RMb2coYXJnczogUXVlcnlJbnB1dCwgcmVzdWx0OiBRdWVyeU91dHB1dCk6IHZvaWQge1xuICAgIGNvbnN0IHRvb2xDYWxsQ291bnQgPSByZXN1bHQuY29udGVudC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0udHlwZSA9PT0gXCJ0b29sLWNhbGxcIikubGVuZ3RoO1xuICAgIGNvbnN0IHJlc3BvbnNlVGV4dCA9IHJlc3VsdC5jb250ZW50XG4gICAgICAuZmlsdGVyKChpdGVtKSA9PiBpdGVtLnR5cGUgPT09IFwidGV4dFwiKVxuICAgICAgLm1hcCgoaXRlbSkgPT4gaXRlbS50ZXh0KVxuICAgICAgLmpvaW4oXCJcXG5cIik7XG5cbiAgICBSZXF1ZXN0TG9nTW9kZWwuc2F2ZShbXG4gICAgICB7XG4gICAgICAgIHRva2VuX25hbWU6IHJlc3VsdC50b2tlbk5hbWUsXG4gICAgICAgIHByb2plY3RfbmFtZTogYXJncy5wcm9qZWN0TmFtZT8ubGVuZ3RoID8gYXJncy5wcm9qZWN0TmFtZSA6IG51bGwsXG4gICAgICAgIG1vZGVsX25hbWU6IHJlc3VsdC5tb2RlbCA/PyBudWxsLFxuICAgICAgICB1c2VyX3Byb21wdDogYXJncy5wcm9tcHQsXG4gICAgICAgIHN5c3RlbV9wcm9tcHQ6IGFyZ3Muc3lzdGVtID8/IG51bGwsXG4gICAgICAgIHJlc3BvbnNlOiByZXNwb25zZVRleHQsXG4gICAgICAgIGlucHV0X3Rva2VuczogcmVzdWx0LnVzYWdlLmlucHV0X3Rva2VucyxcbiAgICAgICAgb3V0cHV0X3Rva2VuczogcmVzdWx0LnVzYWdlLm91dHB1dF90b2tlbnMsXG4gICAgICAgIGNhY2hlX3JlYWRfdG9rZW5zOiByZXN1bHQudXNhZ2UuY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMsXG4gICAgICAgIGNhY2hlX2NyZWF0aW9uX3Rva2VuczogcmVzdWx0LnVzYWdlLmNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyxcbiAgICAgICAgZHVyYXRpb25fbXM6IHJlc3VsdC5kdXJhdGlvbk1zLFxuICAgICAgICBjb3N0X3VzZDogcmVzdWx0LmNvc3RVc2QgIT09IG51bGwgPyBNYXRoLnJvdW5kKHJlc3VsdC5jb3N0VXNkICogTUlDUk9fVVNEKSA6IG51bGwsXG4gICAgICAgIGVmZm9ydDogYXJncy5lZmZvcnQgPz8gbnVsbCxcbiAgICAgICAgLy8gbWFsZm9ybWVkIGhpc3RvcnnqsIAg7JmA64+EIOyEseqzte2VnCDthLQo7Yq57Z6IIHN0cmVhbSBzc2UuZW5kKCkp7J2EIOq5qOyngCDslYrrj4TroZ0g67Cp7Ja0LlxuICAgICAgICBoaXN0b3J5OiAoKCk6IHsgdHlwZTogc3RyaW5nIH1bXSB8IG51bGwgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gYXJncy5oaXN0b3J5ID8gSlNPTi5wYXJzZShhcmdzLmhpc3RvcnkpIDogbnVsbDtcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkoKSxcbiAgICAgICAgc3RhdHVzOiBcInN1Y2NlZWRlZFwiLFxuICAgICAgICB0b29sX2NhbGxfY291bnQ6IHRvb2xDYWxsQ291bnQsXG4gICAgICB9LFxuICAgIF0pLmNhdGNoKChlKSA9PiBsb2dnZXIuZXJyb3IoYHJlcXVlc3RMb2cgc2F2ZSBmYWlsZWQ6ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCkpO1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiUE9TVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLW11dGF0aW9uXCJdIH0pXG4gIGFzeW5jIHByZXBhcmVTdHJlYW0oYXJnczogUXVlcnlJbnB1dCk6IFByb21pc2U8eyBzdHJlYW1JZDogc3RyaW5nIH0+IHtcbiAgICBjb25zdCBzdHJlYW1JZCA9IGNyeXB0by5yYW5kb21VVUlEKCk7XG4gICAgcGVuZGluZ1N0cmVhbXMuc2V0KHN0cmVhbUlkLCBhcmdzKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHBlbmRpbmdTdHJlYW1zLmRlbGV0ZShzdHJlYW1JZCksIDMwXzAwMCk7XG4gICAgcmV0dXJuIHsgc3RyZWFtSWQgfTtcbiAgfVxuXG4gIEBzdHJlYW0oeyB0eXBlOiBcInNzZVwiLCBldmVudHM6IFN0cmVhbUV2ZW50cyB9KVxuICBhc3luYyBxdWVyeVN0cmVhbShzdHJlYW1JZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgYXJncyA9IHBlbmRpbmdTdHJlYW1zLmdldChzdHJlYW1JZCk7XG4gICAgcGVuZGluZ1N0cmVhbXMuZGVsZXRlKHN0cmVhbUlkKTtcbiAgICBpZiAoIWFyZ3MpIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgb3IgZXhwaXJlZCBzdHJlYW1JZFwiKTtcblxuICAgIGNvbnN0IGVmZmVjdGl2ZUxvZ01vZGUgPSBhcmdzLmxvZ01vZGUgPz8gKGFyZ3MuaXNTdGVwID8gXCJydW5cIiA6IFwiYXV0b1wiKTtcbiAgICBjb25zdCBzaG91bGRMb2cgPSBlZmZlY3RpdmVMb2dNb2RlID09PSBcInJ1blwiO1xuXG4gICAgbGV0IHJ1bkluZm86IHsgcmVxdWVzdExvZ0lkOiBudW1iZXI7IHN0ZXBJbmRleDogbnVtYmVyIH0gfCB1bmRlZmluZWQ7XG4gICAgaWYgKHNob3VsZExvZykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcnVuSW5mbyA9IGF3YWl0IGJlZm9yZVF1ZXJ5KGFyZ3MpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIuZXJyb3IoYHN0cmVhbSBiZWZvcmVRdWVyeSBmYWlsZWQ6ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY3R4ID0gU29uYW11LmdldENvbnRleHQoKTtcbiAgICBjb25zdCBzc2UgPSBjdHguY3JlYXRlU1NFKFN0cmVhbUV2ZW50cyk7XG4gICAgbGV0IHRocmVhZElkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgbGV0IHR1cm5JZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGxldCBzdHJlYW1SZXN1bHQ6IFF1ZXJ5T3V0cHV0IHwgdW5kZWZpbmVkO1xuICAgIGxldCBzdHJlYW1FcnJvcjogRXJyb3IgfCB1bmRlZmluZWQ7XG5cbiAgICBzc2Uub25DbG9zZSgoKSA9PiB7XG4gICAgICBpZiAodGhyZWFkSWQgJiYgdHVybklkKSB7XG4gICAgICAgIFFncmlkRGlzcGF0Y2hlci5vcGVuYWlEaXNwYXRjaGVyPy5pbnRlcnJ1cHRXb3JrZXJUdXJuKHRocmVhZElkLCB0dXJuSWQpLmNhdGNoKCgpID0+IHt9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBRZ3JpZERpc3BhdGNoZXIucXVlcnlTdHJlYW0oYXJncywge1xuICAgICAgICBvbkRlbHRhOiAodGV4dCkgPT4ge1xuICAgICAgICAgIGlmICghc3NlLmNsb3NlZCkgc3NlLnB1Ymxpc2goXCJkZWx0YVwiLCB7IHRleHQgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uVGhyZWFkSWQ6IChpZCkgPT4ge1xuICAgICAgICAgIHRocmVhZElkID0gaWQ7XG4gICAgICAgICAgaWYgKHNzZS5jbG9zZWQgJiYgdHVybklkKSB7XG4gICAgICAgICAgICBRZ3JpZERpc3BhdGNoZXIub3BlbmFpRGlzcGF0Y2hlcj8uaW50ZXJydXB0V29ya2VyVHVybih0aHJlYWRJZCwgdHVybklkKS5jYXRjaCgoKSA9PiB7fSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBvblR1cm5JZDogKGlkKSA9PiB7XG4gICAgICAgICAgdHVybklkID0gaWQ7XG4gICAgICAgICAgaWYgKHNzZS5jbG9zZWQgJiYgdGhyZWFkSWQpIHtcbiAgICAgICAgICAgIFFncmlkRGlzcGF0Y2hlci5vcGVuYWlEaXNwYXRjaGVyPy5pbnRlcnJ1cHRXb3JrZXJUdXJuKHRocmVhZElkLCB0dXJuSWQpLmNhdGNoKCgpID0+IHt9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG9uQ29tcGxldGU6IChyZXN1bHQpID0+IHtcbiAgICAgICAgICBzdHJlYW1SZXN1bHQgPSByZXN1bHQ7XG4gICAgICAgIH0sXG4gICAgICAgIG9uRXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICBzdHJlYW1FcnJvciA9IGVycjtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHN0cmVhbUVycm9yID0gZSBhcyBFcnJvcjtcbiAgICB9XG5cbiAgICAvLyBkaXNwYXRjaGVyIOyZhOujjCDtm4QgbGlmZWN5Y2xlIOyymOumrCAoYXdhaXQg7JWI7KCEKVxuICAgIGlmIChzdHJlYW1SZXN1bHQpIHtcbiAgICAgIGxldCBydW5Db250ZXh0OiB7IHJlcXVlc3RMb2dJZDogbnVtYmVyIH0gfCB1bmRlZmluZWQ7XG4gICAgICBpZiAocnVuSW5mbykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGxpZmVjeWNsZSA9IGF3YWl0IGFmdGVyUXVlcnkoXG4gICAgICAgICAgICBydW5JbmZvLnJlcXVlc3RMb2dJZCxcbiAgICAgICAgICAgIHJ1bkluZm8uc3RlcEluZGV4LFxuICAgICAgICAgICAgYXJncyxcbiAgICAgICAgICAgIHN0cmVhbVJlc3VsdCxcbiAgICAgICAgICApO1xuICAgICAgICAgIHJ1bkNvbnRleHQgPSBsaWZlY3ljbGUucnVuQ29udGV4dDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGxvZ2dlci5lcnJvcihgc3RyZWFtIGFmdGVyUXVlcnkgZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGVmZmVjdGl2ZUxvZ01vZGUgPT09IFwiYXV0b1wiKSB7XG4gICAgICAgIC8vIHJ1biBsaWZlY3ljbGXsnYQg7JWIIO2DgOuKlCDri6jsnbwgc3RyZWFtIOyalOyyreuPhCByZXF1ZXN0X2xvZyAx6rG07J2AIOuCqOq4tOuLpCAocXVlcnnsmYAg64yA7LmtKS5cbiAgICAgICAgdGhpcy5zYXZlQXV0b1JlcXVlc3RMb2coYXJncywgc3RyZWFtUmVzdWx0KTtcbiAgICAgIH1cbiAgICAgIGlmICghc3NlLmNsb3NlZCkgc3NlLnB1Ymxpc2goXCJkb25lXCIsIHsgLi4uc3RyZWFtUmVzdWx0LCBydW5Db250ZXh0IH0pO1xuICAgIH0gZWxzZSBpZiAoc3RyZWFtRXJyb3IpIHtcbiAgICAgIGlmIChydW5JbmZvKSBhd2FpdCBmaW5pc2hSdW5XaXRoRXJyb3IocnVuSW5mby5yZXF1ZXN0TG9nSWQsIHN0cmVhbUVycm9yLm1lc3NhZ2UsIGFyZ3MpO1xuICAgICAgaWYgKCFzc2UuY2xvc2VkKSBzc2UucHVibGlzaChcImVycm9yXCIsIHsgbWVzc2FnZTogc3RyZWFtRXJyb3IubWVzc2FnZSB9KTtcbiAgICB9IGVsc2UgaWYgKHNzZS5jbG9zZWQgJiYgcnVuSW5mbykge1xuICAgICAgYXdhaXQgZmluaXNoUnVuQWJvcnRlZChydW5JbmZvLnJlcXVlc3RMb2dJZCwgYXJncyk7XG4gICAgfVxuXG4gICAgYXdhaXQgc3NlLmVuZCgpO1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiUE9TVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLW11dGF0aW9uXCJdIH0pXG4gIGFzeW5jIGNyZWF0ZVJ1bihpbnB1dDogQ3JlYXRlUnVuSW5wdXQpOiBQcm9taXNlPHsgcmVxdWVzdExvZ0lkOiBudW1iZXIgfT4ge1xuICAgIGNvbnN0IHJlcXVlc3RMb2dJZCA9IGF3YWl0IFJlcXVlc3RMb2dNb2RlbC5jcmVhdGVSdW4oe1xuICAgICAgdXNlcl9wcm9tcHQ6IGlucHV0LnVzZXJQcm9tcHQsXG4gICAgICBtb2RlbF9uYW1lOiBpbnB1dC5tb2RlbE5hbWUsXG4gICAgICBlZmZvcnQ6IGlucHV0LmVmZm9ydCxcbiAgICAgIHByb2plY3RfbmFtZTogaW5wdXQucHJvamVjdE5hbWUsXG4gICAgICBzeXN0ZW1fcHJvbXB0OiBpbnB1dC5zeXN0ZW1Qcm9tcHQsXG4gICAgICBoaXN0b3J5OiBpbnB1dC5oaXN0b3J5ID8gSlNPTi5wYXJzZShpbnB1dC5oaXN0b3J5KSA6IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgICByZXR1cm4geyByZXF1ZXN0TG9nSWQgfTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIlBPU1RcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1tdXRhdGlvblwiXSB9KVxuICBhc3luYyBhcHBlbmRTdGVwKGlucHV0OiBBcHBlbmRTdGVwSW5wdXQpOiBQcm9taXNlPHsgc3RlcElkOiBudW1iZXIgfT4ge1xuICAgIGNvbnN0IHN0ZXBJZCA9IGF3YWl0IFJlcXVlc3RMb2dNb2RlbC5hcHBlbmRTdGVwKGlucHV0LnJlcXVlc3RMb2dJZCwge1xuICAgICAgc3RlcF9pbmRleDogaW5wdXQuc3RlcEluZGV4LFxuICAgICAgdHlwZTogaW5wdXQudHlwZSxcbiAgICAgIGlucHV0X3Rva2VuczogaW5wdXQuaW5wdXRUb2tlbnMsXG4gICAgICBvdXRwdXRfdG9rZW5zOiBpbnB1dC5vdXRwdXRUb2tlbnMsXG4gICAgICBjYWNoZV9yZWFkX3Rva2VuczogaW5wdXQuY2FjaGVSZWFkVG9rZW5zLFxuICAgICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiBpbnB1dC5jYWNoZUNyZWF0aW9uVG9rZW5zLFxuICAgICAgZHVyYXRpb25fbXM6IGlucHV0LmR1cmF0aW9uTXMsXG4gICAgICBmaW5pc2hfcmVhc29uOiBpbnB1dC5maW5pc2hSZWFzb24sXG4gICAgICByZWFzb25pbmdfdGV4dDogaW5wdXQucmVhc29uaW5nVGV4dCxcbiAgICAgIHJlYXNvbmluZ190b2tlbnM6IGlucHV0LnJlYXNvbmluZ1Rva2VucyxcbiAgICAgIHRvb2xfY2FsbF9pbmRleDogaW5wdXQudG9vbENhbGxJbmRleCxcbiAgICAgIHRvb2xfY2FsbF9pZDogaW5wdXQudG9vbENhbGxJZCxcbiAgICAgIHRvb2xfbmFtZTogaW5wdXQudG9vbE5hbWUsXG4gICAgICB0b29sX2FyZ3M6IGlucHV0LnRvb2xBcmdzLFxuICAgICAgdG9vbF9yZXN1bHQ6IGlucHV0LnRvb2xSZXN1bHQsXG4gICAgICB0b29sX2R1cmF0aW9uX21zOiBpbnB1dC50b29sRHVyYXRpb25NcyxcbiAgICAgIGVycm9yOiBpbnB1dC5lcnJvcixcbiAgICB9KTtcbiAgICByZXR1cm4geyBzdGVwSWQgfTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIlBPU1RcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1tdXRhdGlvblwiXSB9KVxuICBhc3luYyBmaW5pc2hSdW4oaW5wdXQ6IEZpbmlzaFJ1bklucHV0KTogUHJvbWlzZTx7IG9rOiBib29sZWFuIH0+IHtcbiAgICBhd2FpdCBSZXF1ZXN0TG9nTW9kZWwuZmluaXNoUnVuKGlucHV0LnJlcXVlc3RMb2dJZCwge1xuICAgICAgc3RhdHVzOiBpbnB1dC5zdGF0dXMsXG4gICAgICByZXNwb25zZTogaW5wdXQucmVzcG9uc2UsXG4gICAgICB0b2tlbl9uYW1lOiBpbnB1dC50b2tlbk5hbWUsXG4gICAgICBpbnB1dF90b2tlbnM6IGlucHV0LnRvdGFsSW5wdXRUb2tlbnMsXG4gICAgICBvdXRwdXRfdG9rZW5zOiBpbnB1dC50b3RhbE91dHB1dFRva2VucyxcbiAgICAgIGNhY2hlX3JlYWRfdG9rZW5zOiBpbnB1dC50b3RhbENhY2hlUmVhZFRva2VucyxcbiAgICAgIGNhY2hlX2NyZWF0aW9uX3Rva2VuczogaW5wdXQudG90YWxDYWNoZUNyZWF0aW9uVG9rZW5zLFxuICAgICAgZHVyYXRpb25fbXM6IGlucHV0LnRvdGFsRHVyYXRpb25NcyxcbiAgICAgIGhpc3Rvcnk6IGlucHV0Lmhpc3RvcnkgPyBKU09OLnBhcnNlKGlucHV0Lmhpc3RvcnkpIDogdW5kZWZpbmVkLFxuICAgICAgZXJyb3JfbWVzc2FnZTogaW5wdXQuZXJyb3JNZXNzYWdlLFxuICAgIH0pO1xuICAgIHJldHVybiB7IG9rOiB0cnVlIH07XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJHRVRcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1xdWVyeVwiXSB9KVxuICBhc3luYyBzdGF0cygpOiBQcm9taXNlPFRva2VuU3RhdHNbXT4ge1xuICAgIHJldHVybiBRZ3JpZERpc3BhdGNoZXIuZ2V0U3RhdHMoKTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIkdFVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLXF1ZXJ5XCJdIH0pXG4gIGFzeW5jIHRvdGFsQ29zdCh0b2tlbk5hbWU/OiBzdHJpbmcpOiBQcm9taXNlPHsgdXNkOiBudW1iZXIgfT4ge1xuICAgIHJldHVybiB7IHVzZDogYXdhaXQgUmVxdWVzdExvZ01vZGVsLnRvdGFsQ29zdCh7IHRva2VuX25hbWU6IHRva2VuTmFtZSB9KSB9O1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiR0VUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stcXVlcnlcIl0gfSlcbiAgYXN5bmMgcHJvamVjdE5hbWVzKCk6IFByb21pc2U8eyBuYW1lczogc3RyaW5nW10gfT4ge1xuICAgIHJldHVybiB7IG5hbWVzOiBhd2FpdCBSZXF1ZXN0TG9nTW9kZWwuZGlzdGluY3RQcm9qZWN0TmFtZXMoKSB9O1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiUE9TVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLW11dGF0aW9uXCJdIH0pXG4gIGFzeW5jIGFkZFRva2VuKFxuICAgIHByb3ZpZGVyOiBzdHJpbmcsXG4gICAgY3JlZGVudGlhbHM6IFRva2VuQ3JlZGVudGlhbHMsXG4gICAgbmFtZTogc3RyaW5nLFxuICApOiBQcm9taXNlPHsgYWRkZWQ6IGJvb2xlYW4gfT4ge1xuICAgIGF3YWl0IFRva2VuTW9kZWwuc2F2ZShbXG4gICAgICB7XG4gICAgICAgIHByb3ZpZGVyLFxuICAgICAgICBjcmVkZW50aWFscyxcbiAgICAgICAgbmFtZSxcbiAgICAgIH0sXG4gICAgXSk7XG4gICAgcmV0dXJuIHsgYWRkZWQ6IHRydWUgfTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIlBPU1RcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1tdXRhdGlvblwiXSB9KVxuICBhc3luYyB1cGRhdGVUb2tlbihpZDogbnVtYmVyLCBuYW1lPzogc3RyaW5nKTogUHJvbWlzZTx7IHVwZGF0ZWQ6IGJvb2xlYW4gfT4ge1xuICAgIGNvbnN0IGVudHJ5ID0gYXdhaXQgVG9rZW5Nb2RlbC5maW5kT25lKFwiQVwiLCB7IGlkIH0pO1xuICAgIGlmICghZW50cnkpIHJldHVybiB7IHVwZGF0ZWQ6IGZhbHNlIH07XG5cbiAgICBhd2FpdCBUb2tlbk1vZGVsLnNhdmUoW1xuICAgICAge1xuICAgICAgICBpZDogZW50cnkuaWQsXG4gICAgICAgIHByb3ZpZGVyOiBlbnRyeS5wcm92aWRlcixcbiAgICAgICAgY3JlZGVudGlhbHM6IGVudHJ5LmNyZWRlbnRpYWxzLFxuICAgICAgICBuYW1lOiBuYW1lICE9PSB1bmRlZmluZWQgPyBuYW1lIDogZW50cnkubmFtZSxcbiAgICAgIH0sXG4gICAgXSk7XG4gICAgcmV0dXJuIHsgdXBkYXRlZDogdHJ1ZSB9O1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiUE9TVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLW11dGF0aW9uXCJdIH0pXG4gIGFzeW5jIHJlbW92ZVRva2VuKGlkOiBudW1iZXIpOiBQcm9taXNlPHsgcmVtb3ZlZDogYm9vbGVhbiB9PiB7XG4gICAgY29uc3QgZW50cnkgPSBhd2FpdCBUb2tlbk1vZGVsLmZpbmRPbmUoXCJBXCIsIHsgaWQgfSk7XG4gICAgaWYgKCFlbnRyeSkgcmV0dXJuIHsgcmVtb3ZlZDogZmFsc2UgfTtcbiAgICBhd2FpdCBUb2tlbk1vZGVsLmRlbChbZW50cnkuaWRdKTtcbiAgICByZXR1cm4geyByZW1vdmVkOiB0cnVlIH07XG4gIH1cblxuICAvKipcbiAgICog7Yag7YGwIO2ZnOyEse2ZlC/ruYTtmZzshLHtmZQg7Yag6riAIERC7J2YIGFjdGl2ZSDtlYTrk5wg7JeF642w7J207Yq4XG4gICAqL1xuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJQT1NUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stbXV0YXRpb25cIl0gfSlcbiAgYXN5bmMgdG9nZ2xlVG9rZW4oaWQ6IG51bWJlcik6IFByb21pc2U8eyBhY3RpdmU6IGJvb2xlYW4gfT4ge1xuICAgIGNvbnN0IGVudHJ5ID0gYXdhaXQgVG9rZW5Nb2RlbC5maW5kT25lKFwiQVwiLCB7IGlkIH0pO1xuICAgIGlmICghZW50cnkpIHJldHVybiB7IGFjdGl2ZTogZmFsc2UgfTtcblxuICAgIGNvbnN0IG5ld0FjdGl2ZSA9ICFlbnRyeS5hY3RpdmU7XG4gICAgYXdhaXQgVG9rZW5Nb2RlbC5zYXZlKFtcbiAgICAgIHtcbiAgICAgICAgaWQsXG4gICAgICAgIHByb3ZpZGVyOiBlbnRyeS5wcm92aWRlcixcbiAgICAgICAgY3JlZGVudGlhbHM6IGVudHJ5LmNyZWRlbnRpYWxzLFxuICAgICAgICBhY3RpdmU6IG5ld0FjdGl2ZSxcbiAgICAgICAgbmFtZTogZW50cnkubmFtZSxcbiAgICAgIH0sXG4gICAgXSk7XG4gICAgcmV0dXJuIHsgYWN0aXZlOiBuZXdBY3RpdmUgfTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIlBPU1RcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1tdXRhdGlvblwiXSB9KVxuICBhc3luYyBvYXV0aFN0YXJ0KG5hbWU6IHN0cmluZyk6IFByb21pc2U8T0F1dGhTdGFydFJlc3VsdD4ge1xuICAgIGNvbnN0IHsgY29kZVZlcmlmaWVyLCBjb2RlQ2hhbGxlbmdlLCBzdGF0ZSB9ID0gZ2VuZXJhdGVQS0NFKCk7XG5cbiAgICBjb25zdCByZWRpcmVjdFVyaSA9IGdldE9BdXRoUmVkaXJlY3RVcmkoKTtcbiAgICBjb25zdCBhdXRoVXJsID0gYnVpbGRBdXRoVXJsKGNvZGVDaGFsbGVuZ2UsIHN0YXRlLCByZWRpcmVjdFVyaSk7XG5cbiAgICBhd2FpdCBzZXRPQXV0aFN0YXRlKHN0YXRlLCB7IGNvZGVWZXJpZmllciwgbmFtZSwgcmVkaXJlY3RVcmkgfSk7XG5cbiAgICByZXR1cm4geyBhdXRoVXJsIH07XG4gIH1cblxuICBhc3luYyBoYW5kbGVPQXV0aENhbGxiYWNrKGNvZGU6IHN0cmluZywgc3RhdGU6IHN0cmluZywgcmVwbHk6IEZhc3RpZnlSZXBseSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBlbmRpbmcgPSBhd2FpdCBnZXRPQXV0aFN0YXRlKHN0YXRlKTtcbiAgICBpZiAoIXBlbmRpbmcpIHtcbiAgICAgIGxvZ2dlci53YXJuKFwib2F1dGggY2FsbGJhY2s6IGludmFsaWRfc3RhdGVcIik7XG4gICAgICByZXR1cm4gcmVwbHkucmVkaXJlY3QoXCIvP29hdXRoPWVycm9yJnJlYXNvbj1pbnZhbGlkX3N0YXRlXCIpO1xuICAgIH1cbiAgICBhd2FpdCBkZWxldGVPQXV0aFN0YXRlKHN0YXRlKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB0b2tlbnMgPSBhd2FpdCBleGNoYW5nZUNvZGVGb3JUb2tlbnMoXG4gICAgICAgIGNvZGUsXG4gICAgICAgIHBlbmRpbmcuY29kZVZlcmlmaWVyLFxuICAgICAgICBzdGF0ZSxcbiAgICAgICAgcGVuZGluZy5yZWRpcmVjdFVyaSxcbiAgICAgICk7XG5cbiAgICAgIGlmICh0b2tlbnMuYWNjb3VudFV1aWQpIHtcbiAgICAgICAgY29uc3Qgb2xkRW50cmllcyA9IGF3YWl0IFRva2VuTW9kZWwuZmluZEJ5QWNjb3VudElkZW50aWZpZXIoXG4gICAgICAgICAgXCJBXCIsXG4gICAgICAgICAgXCJhbnRocm9waWNcIixcbiAgICAgICAgICB0b2tlbnMuYWNjb3VudFV1aWQsXG4gICAgICAgICk7XG4gICAgICAgIGlmIChvbGRFbnRyaWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBhd2FpdCBUb2tlbk1vZGVsLmRlbChvbGRFbnRyaWVzLm1hcCgobykgPT4gby5pZCkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IFRva2VuTW9kZWwuc2F2ZShbXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlcjogXCJhbnRocm9waWNcIixcbiAgICAgICAgICBjcmVkZW50aWFsczoge1xuICAgICAgICAgICAgYWNjZXNzVG9rZW46IHRva2Vucy5hY2Nlc3NUb2tlbixcbiAgICAgICAgICAgIHJlZnJlc2hUb2tlbjogdG9rZW5zLnJlZnJlc2hUb2tlbixcbiAgICAgICAgICAgIGV4cGlyZXNBdDogdG9rZW5zLmV4cGlyZXNBdCA/PyAwLFxuICAgICAgICAgICAgYWNjb3VudFV1aWQ6IHRva2Vucy5hY2NvdW50VXVpZCA/PyBcIlwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbmFtZTogcGVuZGluZy5uYW1lLFxuICAgICAgICB9LFxuICAgICAgXSk7XG5cbiAgICAgIHJldHVybiByZXBseS5yZWRpcmVjdChgLz9vYXV0aD1zdWNjZXNzJm5hbWU9JHtlbmNvZGVVUklDb21wb25lbnQocGVuZGluZy5uYW1lKX1gKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gcmVwbHkucmVkaXJlY3QoYC8/b2F1dGg9ZXJyb3ImcmVhc29uPSR7ZW5jb2RlVVJJQ29tcG9uZW50KChlIGFzIEVycm9yKS5tZXNzYWdlKX1gKTtcbiAgICB9XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJQT1NUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stbXV0YXRpb25cIl0gfSlcbiAgYXN5bmMgb2F1dGhTdGFydE9wZW5BSShuYW1lOiBzdHJpbmcpOiBQcm9taXNlPE9BdXRoU3RhcnRSZXN1bHQ+IHtcbiAgICBpZiAoIVFncmlkRGlzcGF0Y2hlci5vcGVuYWlEaXNwYXRjaGVyKSB0aHJvdyBuZXcgRXJyb3IoXCJPcGVuQUkgZGlzcGF0Y2hlciBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgY29uc3QgeyBhdXRoVXJsIH0gPSBhd2FpdCBRZ3JpZERpc3BhdGNoZXIub3BlbmFpRGlzcGF0Y2hlci5zdGFydEJyb3dzZXJMb2dpbihuYW1lKTtcblxuICAgIC8vIGZpcmUtYW5kLWZvcmdldDogY29kZXggbG9naW4g7JmE66OMIOuMgOq4sCDihpIg7Yag7YGwIOyggOyepVxuICAgIFFncmlkRGlzcGF0Y2hlci5vcGVuYWlEaXNwYXRjaGVyXG4gICAgICAuY29tcGxldGVCcm93c2VyTG9naW4oKVxuICAgICAgLnRoZW4oYXN5bmMgKGNyZWRzKSA9PiB7XG4gICAgICAgIGlmIChjcmVkcy5hY2NvdW50SWQpIHtcbiAgICAgICAgICBjb25zdCBvbGRFbnRyaWVzID0gYXdhaXQgVG9rZW5Nb2RlbC5maW5kQnlBY2NvdW50SWRlbnRpZmllcihcbiAgICAgICAgICAgIFwiQVwiLFxuICAgICAgICAgICAgXCJvcGVuYWlcIixcbiAgICAgICAgICAgIGNyZWRzLmFjY291bnRJZCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChvbGRFbnRyaWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGF3YWl0IFRva2VuTW9kZWwuZGVsKG9sZEVudHJpZXMubWFwKChvKSA9PiBvLmlkKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGF3YWl0IFRva2VuTW9kZWwuc2F2ZShbXG4gICAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZXI6IFwib3BlbmFpXCIsXG4gICAgICAgICAgICBjcmVkZW50aWFsczoge1xuICAgICAgICAgICAgICBhY2Nlc3NUb2tlbjogY3JlZHMuYWNjZXNzVG9rZW4sXG4gICAgICAgICAgICAgIHJlZnJlc2hUb2tlbjogY3JlZHMucmVmcmVzaFRva2VuLFxuICAgICAgICAgICAgICBpZFRva2VuOiBjcmVkcy5pZFRva2VuLFxuICAgICAgICAgICAgICBhY2Nlc3NUb2tlbkV4cGlyZXNBdDogRGF0ZS5ub3coKSArIDEwICogMjQgKiAzNjAwICogMTAwMCxcbiAgICAgICAgICAgICAgYWNjb3VudElkOiBjcmVkcy5hY2NvdW50SWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICBdKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oYE9wZW5BSSB0b2tlbiBzYXZlZCBmb3IgJHtuYW1lfWApO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICBsb2dnZXIud2FybihgT3BlbkFJIGJyb3dzZXIgbG9naW4gZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgICAgfSk7XG5cbiAgICByZXR1cm4geyBhdXRoVXJsIH07XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJHRVRcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1xdWVyeVwiXSB9KVxuICBhc3luYyB1c2FnZSh0b2tlbklkPzogbnVtYmVyKTogUHJvbWlzZTxVc2FnZVJlc3BvbnNlPiB7XG4gICAgY29uc3QgeyByb3dzOiBhbGxUb2tlbnMgfSA9IGF3YWl0IFRva2VuTW9kZWwuZmluZE1hbnkoXCJBXCIpO1xuICAgIGNvbnN0IGVudHJ5ID0gdG9rZW5JZFxuICAgICAgPyBhbGxUb2tlbnMuZmluZCgoZSkgPT4gZS5pZCA9PT0gdG9rZW5JZClcbiAgICAgIDogYWxsVG9rZW5zLmZpbmRMYXN0KChlKSA9PiBlLmFjdGl2ZSAmJiBlLnByb3ZpZGVyID09PSBcImFudGhyb3BpY1wiKTtcblxuICAgIGlmICghZW50cnkpIHJldHVybiB7IGVycm9yOiBcIk5PVF9GT1VORFwiIH07XG5cbiAgICBpZiAoZW50cnkucHJvdmlkZXIgPT09IFwib3BlbmFpXCIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJhdyA9IChhd2FpdCBRZ3JpZERpc3BhdGNoZXIub3BlbmFpRGlzcGF0Y2hlcj8uZ2V0UmF0ZUxpbWl0cyhlbnRyeS5uYW1lKSkgYXMge1xuICAgICAgICAgIHJhdGVMaW1pdHM/OiB7XG4gICAgICAgICAgICBwcmltYXJ5PzogeyB1c2VkUGVyY2VudDogbnVtYmVyOyB3aW5kb3dEdXJhdGlvbk1pbnM6IG51bWJlcjsgcmVzZXRzQXQ6IG51bWJlciB9O1xuICAgICAgICAgICAgc2Vjb25kYXJ5PzogeyB1c2VkUGVyY2VudDogbnVtYmVyOyB3aW5kb3dEdXJhdGlvbk1pbnM6IG51bWJlcjsgcmVzZXRzQXQ6IG51bWJlciB9O1xuICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJsID0gcmF3Py5yYXRlTGltaXRzO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHByb3ZpZGVyOiBcIm9wZW5haVwiLFxuICAgICAgICAgIGZpdmVIb3VyOiBybD8ucHJpbWFyeVxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgdXRpbGl6YXRpb246IHJsLnByaW1hcnkudXNlZFBlcmNlbnQsXG4gICAgICAgICAgICAgICAgcmVzZXRzQXQ6IG5ldyBEYXRlKHJsLnByaW1hcnkucmVzZXRzQXQgKiAxMDAwKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgc2V2ZW5EYXk6IHJsPy5zZWNvbmRhcnlcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIHV0aWxpemF0aW9uOiBybC5zZWNvbmRhcnkudXNlZFBlcmNlbnQsXG4gICAgICAgICAgICAgICAgcmVzZXRzQXQ6IG5ldyBEYXRlKHJsLnNlY29uZGFyeS5yZXNldHNBdCAqIDEwMDApLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgfTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIHsgZXJyb3I6IGBPcGVuQUkgdXNhZ2UgZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZW50cnkucHJvdmlkZXIgIT09IFwiYW50aHJvcGljXCIpIHtcbiAgICAgIHJldHVybiB7IGVycm9yOiBgdXNhZ2UgQVBJIG5vdCBzdXBwb3J0ZWQgZm9yIHByb3ZpZGVyOiAke2VudHJ5LnByb3ZpZGVyfWAgfTtcbiAgICB9XG5cbiAgICBsZXQgYWNjZXNzVG9rZW4gPSBnZXRBY2Nlc3NUb2tlbihlbnRyeS5jcmVkZW50aWFscyk7XG4gICAgY29uc3QgaXNFeHBpcmVkID0gZ2V0RXhwaXJlc0F0KGVudHJ5LmNyZWRlbnRpYWxzKSA8IERhdGUubm93KCk7XG5cbiAgICBpZiAoaXNFeHBpcmVkICYmIGdldFJlZnJlc2hUb2tlbihlbnRyeS5jcmVkZW50aWFscykpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGFjY2Vzc1Rva2VuID0gYXdhaXQgdGhpcy5yZWZyZXNoVG9rZW4oZW50cnkpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBvYXV0aExvZ2dlci53YXJuKGByZWZyZXNoIGZhaWxlZCBmb3IgJHtlbnRyeS5uYW1lfTogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgICAgICAgcmV0dXJuIHsgZXJyb3I6IFwicmUtbG9naW4gcmVxdWlyZWRcIiB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHJhdyA9IGF3YWl0IGZldGNoVXNhZ2UoYWNjZXNzVG9rZW4pO1xuICAgIGlmIChyYXcuZXJyb3IgJiYgZ2V0UmVmcmVzaFRva2VuKGVudHJ5LmNyZWRlbnRpYWxzKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYWNjZXNzVG9rZW4gPSBhd2FpdCB0aGlzLnJlZnJlc2hUb2tlbihlbnRyeSk7XG4gICAgICAgIGNvbnN0IHJldHJpZWQgPSBhd2FpdCBmZXRjaFVzYWdlKGFjY2Vzc1Rva2VuKTtcbiAgICAgICAgaWYgKHJldHJpZWQuZXJyb3IpIHJldHVybiB7IGVycm9yOiByZXRyaWVkLmVycm9yIH07XG4gICAgICAgIHJldHVybiBjb252ZXJ0QW50aHJvcGljVXNhZ2UocmV0cmllZCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIG9hdXRoTG9nZ2VyLndhcm4oYHJlZnJlc2ggZmFpbGVkIGZvciAke2VudHJ5Lm5hbWV9OiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgICAgICByZXR1cm4geyBlcnJvcjogXCJyZS1sb2dpbiByZXF1aXJlZFwiIH07XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChyYXcuZXJyb3IpIHJldHVybiB7IGVycm9yOiByYXcuZXJyb3IgfTtcbiAgICByZXR1cm4gY29udmVydEFudGhyb3BpY1VzYWdlKHJhdyk7XG4gIH1cblxuICBhc3luYyByZWZyZXNoVG9rZW4odG9rZW46IFRva2VuU3Vic2V0QSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgY3JlZHMgPSB0b2tlbi5jcmVkZW50aWFscztcbiAgICBjb25zdCBydCA9IGdldFJlZnJlc2hUb2tlbihjcmVkcyk7XG4gICAgaWYgKCFydCkgdGhyb3cgbmV3IEVycm9yKFwiTm8gcmVmcmVzaCB0b2tlblwiKTtcbiAgICBjb25zdCByZWZyZXNoZWQgPSBhd2FpdCByZWZyZXNoQWNjZXNzVG9rZW4ocnQpO1xuICAgIGNvbnN0IHVwZGF0ZWQgPSBUb2tlbkNyZWRlbnRpYWxzLnBhcnNlKHtcbiAgICAgIC4uLmNyZWRzLFxuICAgICAgYWNjZXNzVG9rZW46IHJlZnJlc2hlZC5hY2Nlc3NUb2tlbixcbiAgICAgIHJlZnJlc2hUb2tlbjogcmVmcmVzaGVkLnJlZnJlc2hUb2tlbixcbiAgICAgIGV4cGlyZXNBdDogcmVmcmVzaGVkLmV4cGlyZXNBdCxcbiAgICB9KTtcbiAgICBhd2FpdCBUb2tlbk1vZGVsLnNhdmUoW1xuICAgICAge1xuICAgICAgICBpZDogdG9rZW4uaWQsXG4gICAgICAgIHByb3ZpZGVyOiB0b2tlbi5wcm92aWRlcixcbiAgICAgICAgY3JlZGVudGlhbHM6IHVwZGF0ZWQsXG4gICAgICAgIG5hbWU6IHRva2VuLm5hbWUsXG4gICAgICB9LFxuICAgIF0pO1xuICAgIHJldHVybiByZWZyZXNoZWQuYWNjZXNzVG9rZW47XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJHRVRcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1xdWVyeVwiXSB9KVxuICBhc3luYyBoZWFsdGgoKTogUHJvbWlzZTxIZWFsdGhSZXNwb25zZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IFwib2tcIixcbiAgICAgIGFjdGl2ZVRva2VuczogUWdyaWREaXNwYXRjaGVyLnRva2Vucy5zaXplLFxuICAgICAgc3Vic2NyaWJlcjogUWdyaWREaXNwYXRjaGVyLnN1YnNjcmliZXI/LnN0YXR1cygpID8/IG51bGwsXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgUWdyaWRGcmFtZSA9IG5ldyBRZ3JpZEZyYW1lQ2xhc3MoKTtcblxuZnVuY3Rpb24gY29udmVydEFudGhyb3BpY1VzYWdlKHJhdzogQW50aHJvcGljVXNhZ2VSYXcpOiBVc2FnZVJlc3BvbnNlIHtcbiAgcmV0dXJuIHtcbiAgICBwcm92aWRlcjogXCJhbnRocm9waWNcIixcbiAgICBmaXZlSG91cjogcmF3LmZpdmVfaG91clxuICAgICAgPyB7IHV0aWxpemF0aW9uOiByYXcuZml2ZV9ob3VyLnV0aWxpemF0aW9uLCByZXNldHNBdDogcmF3LmZpdmVfaG91ci5yZXNldHNfYXQgfVxuICAgICAgOiBudWxsLFxuICAgIHNldmVuRGF5OiByYXcuc2V2ZW5fZGF5XG4gICAgICA/IHsgdXRpbGl6YXRpb246IHJhdy5zZXZlbl9kYXkudXRpbGl6YXRpb24sIHJlc2V0c0F0OiByYXcuc2V2ZW5fZGF5LnJlc2V0c19hdCB9XG4gICAgICA6IG51bGwsXG4gIH07XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNENBLE1BQU0saUNBQWlCLElBQUksS0FBeUI7QUFHcEQsTUFBTSxxQkFBcUI7QUFDM0IsTUFBTSxrQkFBa0I7QUFFeEIsZUFBZSxjQUFjLE9BQWUsTUFBbUM7Q0FDN0UsTUFBTSxRQUFRLG9CQUFvQjtBQUNsQyxLQUFJLENBQUMsTUFBTyxPQUFNLElBQUksTUFBTSwrQkFBK0I7QUFDM0QsT0FBTSxNQUFNLElBQUk7RUFDZCxLQUFLLEdBQUcscUJBQXFCO0VBQzdCLE9BQU8sS0FBSyxVQUFVLEtBQUs7RUFDM0IsS0FBSztFQUNOLENBQUM7O0FBR0osZUFBZSxjQUFjLE9BQWtEO0NBQzdFLE1BQU0sUUFBUSxvQkFBb0I7QUFDbEMsS0FBSSxDQUFDLE1BQU8sT0FBTSxJQUFJLE1BQU0sK0JBQStCO0NBQzNELE1BQU0sTUFBTSxNQUFNLE1BQU0sSUFBWSxFQUFFLEtBQUssR0FBRyxxQkFBcUIsU0FBUyxDQUFDO0FBQzdFLEtBQUksQ0FBQyxJQUFLLFFBQU87QUFDakIsUUFBTyxLQUFLLE1BQU0sSUFBSTs7QUFHeEIsZUFBZSxpQkFBaUIsT0FBOEI7Q0FDNUQsTUFBTSxRQUFRLG9CQUFvQjtBQUNsQyxLQUFJLENBQUMsTUFBTztBQUNaLE9BQU0sTUFBTSxPQUFP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
|
|
@@ -229,4 +229,4 @@ const RequestLogModel = new RequestLogModelClass();
|
|
|
229
229
|
//#endregion
|
|
230
230
|
export { MICRO_USD, RequestLogModel };
|
|
231
231
|
|
|
232
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1sb2cubW9kZWwuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3JlcXVlc3QtbG9nL3JlcXVlc3QtbG9nLm1vZGVsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGFwaSxcbiAgYXNBcnJheSxcbiAgQmFkUmVxdWVzdEV4Y2VwdGlvbixcbiAgQmFzZU1vZGVsQ2xhc3MsXG4gIGV4aGF1c3RpdmUsXG4gIHR5cGUgTGlzdFJlc3VsdCxcbiAgTm90Rm91bmRFeGNlcHRpb24sXG59IGZyb20gXCJzb25hbXVcIjtcblxuaW1wb3J0IHsgU0QgfSBmcm9tIFwiLi4vLi4vaTE4bi9zZC5nZW5lcmF0ZWRcIjtcbmltcG9ydCB7IGNhbGN1bGF0ZUNvc3RVc2QgfSBmcm9tIFwiLi4vLi4vdXRpbHMvcHJvdmlkZXJzL2NvbW1vbi9tb2RlbC1jb3N0XCI7XG5pbXBvcnQgeyB0eXBlIFJlcXVlc3RMb2dTdWJzZXRLZXksIHR5cGUgUmVxdWVzdExvZ1N1YnNldE1hcHBpbmcgfSBmcm9tIFwiLi4vc29uYW11LmdlbmVyYXRlZFwiO1xuaW1wb3J0IHsgcmVxdWVzdExvZ0xvYWRlclF1ZXJpZXMsIHJlcXVlc3RMb2dTdWJzZXRRdWVyaWVzIH0gZnJvbSBcIi4uL3NvbmFtdS5nZW5lcmF0ZWQuc3NvXCI7XG5pbXBvcnQgeyB0eXBlIFJlcXVlc3RMb2dMaXN0UGFyYW1zLCB0eXBlIFJlcXVlc3RMb2dTYXZlUGFyYW1zIH0gZnJvbSBcIi4vcmVxdWVzdC1sb2cudHlwZXNcIjtcblxuLy8gY29zdF91c2TripQg7KCV7IiYIG1pY3JvLVVTROuhnCDsoIDsnqUuIOyLpOygnCBVU0QgPSBjb3N0X3VzZCAvIE1JQ1JPX1VTRC5cbmV4cG9ydCBjb25zdCBNSUNST19VU0QgPSAxXzAwMF8wMDA7XG5cbi8qXG4gIFJlcXVlc3RMb2cgTW9kZWxcbiovXG5jbGFzcyBSZXF1ZXN0TG9nTW9kZWxDbGFzcyBleHRlbmRzIEJhc2VNb2RlbENsYXNzPFxuICBSZXF1ZXN0TG9nU3Vic2V0S2V5LFxuICBSZXF1ZXN0TG9nU3Vic2V0TWFwcGluZyxcbiAgdHlwZW9mIHJlcXVlc3RMb2dTdWJzZXRRdWVyaWVzLFxuICB0eXBlb2YgcmVxdWVzdExvZ0xvYWRlclF1ZXJpZXNcbj4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIlJlcXVlc3RMb2dcIiwgcmVxdWVzdExvZ1N1YnNldFF1ZXJpZXMsIHJlcXVlc3RMb2dMb2FkZXJRdWVyaWVzKTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIkdFVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLXF1ZXJ5XCJdLCByZXNvdXJjZU5hbWU6IFwiUmVxdWVzdExvZ1wiIH0pXG4gIGFzeW5jIGZpbmRCeUlkPFQgZXh0ZW5kcyBSZXF1ZXN0TG9nU3Vic2V0S2V5PihcbiAgICBzdWJzZXQ6IFQsXG4gICAgaWQ6IG51bWJlcixcbiAgKTogUHJvbWlzZTxSZXF1ZXN0TG9nU3Vic2V0TWFwcGluZ1tUXT4ge1xuICAgIGNvbnN0IHsgcm93cyB9ID0gYXdhaXQgdGhpcy5maW5kTWFueShzdWJzZXQsIHtcbiAgICAgIGlkLFxuICAgICAgbnVtOiAxLFxuICAgICAgcGFnZTogMSxcbiAgICB9KTtcbiAgICBpZiAoIXJvd3NbMF0pIHtcbiAgICAgIHRocm93IG5ldyBOb3RGb3VuZEV4Y2VwdGlvbihTRChcImVycm9yLmVudGl0eU5vdEZvdW5kXCIpKFwiUmVxdWVzdExvZ1wiLCBpZCkpO1xuICAgIH1cblxuICAgIHJldHVybiByb3dzWzBdO1xuICB9XG5cbiAgYXN5bmMgZmluZE9uZTxUIGV4dGVuZHMgUmVxdWVzdExvZ1N1YnNldEtleT4oXG4gICAgc3Vic2V0OiBULFxuICAgIGxpc3RQYXJhbXM6IFJlcXVlc3RMb2dMaXN0UGFyYW1zLFxuICApOiBQcm9taXNlPFJlcXVlc3RMb2dTdWJzZXRNYXBwaW5nW1RdIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgcm93cyB9ID0gYXdhaXQgdGhpcy5maW5kTWFueShzdWJzZXQsIHtcbiAgICAgIC4uLmxpc3RQYXJhbXMsXG4gICAgICBudW06IDEsXG4gICAgICBwYWdlOiAxLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJvd3NbMF0gPz8gbnVsbDtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIkdFVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLXF1ZXJ5XCJdLCByZXNvdXJjZU5hbWU6IFwiUmVxdWVzdExvZ3NcIiB9KVxuICBhc3luYyBmaW5kTWFueTxUIGV4dGVuZHMgUmVxdWVzdExvZ1N1YnNldEtleSwgTFAgZXh0ZW5kcyBSZXF1ZXN0TG9nTGlzdFBhcmFtcz4oXG4gICAgc3Vic2V0OiBULFxuICAgIHJhd1BhcmFtcz86IExQLFxuICApOiBQcm9taXNlPExpc3RSZXN1bHQ8TFAsIFJlcXVlc3RMb2dTdWJzZXRNYXBwaW5nW1RdPj4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIG51bTogMjQsXG4gICAgICBwYWdlOiAxLFxuICAgICAgc2VhcmNoOiBcImlkXCIgYXMgY29uc3QsXG4gICAgICBvcmRlckJ5OiBcImlkLWRlc2NcIiBhcyBjb25zdCxcbiAgICAgIC4uLnJhd1BhcmFtcyxcbiAgICB9IHNhdGlzZmllcyBSZXF1ZXN0TG9nTGlzdFBhcmFtcztcblxuICAgIGNvbnN0IHsgcWIsIG9uU3Vic2V0OiBfIH0gPSB0aGlzLmdldFN1YnNldFF1ZXJpZXMoc3Vic2V0KTtcblxuICAgIGlmIChwYXJhbXMuaWQpIHtcbiAgICAgIHFiLndoZXJlSW4oXCJyZXF1ZXN0X2xvZ3MuaWRcIiwgYXNBcnJheShwYXJhbXMuaWQpKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLnRva2VuX25hbWUpIHtcbiAgICAgIHFiLndoZXJlKFwicmVxdWVzdF9sb2dzLnRva2VuX25hbWVcIiwgcGFyYW1zLnRva2VuX25hbWUpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMucHJvamVjdF9uYW1lX2lzX251bGwpIHtcbiAgICAgIHFiLndoZXJlKFwicmVxdWVzdF9sb2dzLnByb2plY3RfbmFtZVwiLCBudWxsKTtcbiAgICB9IGVsc2UgaWYgKHBhcmFtcy5wcm9qZWN0X25hbWVfaXNfbm90X251bGwpIHtcbiAgICAgIHFiLndoZXJlKFwicmVxdWVzdF9sb2dzLnByb2plY3RfbmFtZVwiLCBcIiE9XCIsIG51bGwpO1xuICAgIH0gZWxzZSBpZiAocGFyYW1zLnByb2plY3RfbmFtZSkge1xuICAgICAgcWIud2hlcmUoXCJyZXF1ZXN0X2xvZ3MucHJvamVjdF9uYW1lXCIsIHBhcmFtcy5wcm9qZWN0X25hbWUpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMubW9kZWxfbmFtZSkge1xuICAgICAgcWIud2hlcmUoXCJyZXF1ZXN0X2xvZ3MubW9kZWxfbmFtZVwiLCBwYXJhbXMubW9kZWxfbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5zZWFyY2ggJiYgcGFyYW1zLmtleXdvcmQgJiYgcGFyYW1zLmtleXdvcmQubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKHBhcmFtcy5zZWFyY2ggPT09IFwiaWRcIikge1xuICAgICAgICBxYi53aGVyZShcInJlcXVlc3RfbG9ncy5pZFwiLCBOdW1iZXIocGFyYW1zLmtleXdvcmQpKTtcbiAgICAgIH0gZWxzZSBpZiAocGFyYW1zLnNlYXJjaCA9PT0gXCJ0b2tlbl9uYW1lXCIpIHtcbiAgICAgICAgcWIud2hlcmUoXCJyZXF1ZXN0X2xvZ3MudG9rZW5fbmFtZVwiLCBcImxpa2VcIiwgYCUke3BhcmFtcy5rZXl3b3JkfSVgKTtcbiAgICAgIH0gZWxzZSBpZiAocGFyYW1zLnNlYXJjaCA9PT0gXCJ1c2VyX3Byb21wdFwiKSB7XG4gICAgICAgIHFiLndoZXJlKFwicmVxdWVzdF9sb2dzLnVzZXJfcHJvbXB0XCIsIFwibGlrZVwiLCBgJSR7cGFyYW1zLmtleXdvcmR9JWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24oU0QoXCJlcnJvci51bmtub3duU2VhcmNoRmllbGRcIikocGFyYW1zLnNlYXJjaCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIG9yZGVyQnlcbiAgICBpZiAocGFyYW1zLm9yZGVyQnkpIHtcbiAgICAgIC8vIGRlZmF1bHQgb3JkZXJCeVxuICAgICAgaWYgKHBhcmFtcy5vcmRlckJ5ID09PSBcImlkLWRlc2NcIikge1xuICAgICAgICBxYi5vcmRlckJ5KFwicmVxdWVzdF9sb2dzLmlkXCIsIFwiZGVzY1wiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4aGF1c3RpdmUocGFyYW1zLm9yZGVyQnkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGVuaGFuY2VycyA9IHRoaXMuY3JlYXRlRW5oYW5jZXJzKHtcbiAgICAgIEE6IChyb3cpID0+ICh7XG4gICAgICAgIC4uLnJvdyxcbiAgICAgICAgLy8g7ISc67iM7IWL67OE66GcIHZpcnR1YWwg7ZWE65OcIOqzhOyCsOuhnOyngSDstpTqsIBcbiAgICAgIH0pLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZVN1YnNldFF1ZXJ5KHtcbiAgICAgIHN1YnNldCxcbiAgICAgIHFiLFxuICAgICAgcGFyYW1zLFxuICAgICAgZW5oYW5jZXJzLFxuICAgICAgZGVidWc6IGZhbHNlLFxuICAgIH0pO1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiUE9TVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLW11dGF0aW9uXCJdIH0pXG4gIGFzeW5jIHNhdmUoc3BhOiBSZXF1ZXN0TG9nU2F2ZVBhcmFtc1tdKTogUHJvbWlzZTxudW1iZXJbXT4ge1xuICAgIGNvbnN0IHdkYiA9IHRoaXMuZ2V0UHVyaShcIndcIik7XG5cbiAgICAvLyByZWdpc3RlclxuICAgIHNwYS5mb3JFYWNoKChzcCkgPT4ge1xuICAgICAgd2RiLnViUmVnaXN0ZXIoXCJyZXF1ZXN0X2xvZ3NcIiwgc3ApO1xuICAgIH0pO1xuXG4gICAgLy8gdHJhbnNhY3Rpb25cbiAgICByZXR1cm4gd2RiLnRyYW5zYWN0aW9uKGFzeW5jICh0cngpID0+IHtcbiAgICAgIGNvbnN0IGlkcyA9IGF3YWl0IHRyeC51YlVwc2VydChcInJlcXVlc3RfbG9nc1wiKTtcblxuICAgICAgcmV0dXJuIGlkcztcbiAgICB9KTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBSdW4gTGlmZWN5Y2xlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIGFzeW5jIGNyZWF0ZVJ1bihwYXJhbXM6IHtcbiAgICB1c2VyX3Byb21wdDogc3RyaW5nO1xuICAgIHN5c3RlbV9wcm9tcHQ/OiBzdHJpbmcgfCBudWxsO1xuICAgIG1vZGVsX25hbWU/OiBzdHJpbmcgfCBudWxsO1xuICAgIGVmZm9ydD86IHN0cmluZyB8IG51bGw7XG4gICAgcHJvamVjdF9uYW1lPzogc3RyaW5nIHwgbnVsbDtcbiAgICBoaXN0b3J5PzogdW5rbm93bjtcbiAgfSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3Qgd2RiID0gdGhpcy5nZXRQdXJpKFwid1wiKTtcbiAgICB3ZGIudWJSZWdpc3RlcihcInJlcXVlc3RfbG9nc1wiLCB7XG4gICAgICB1c2VyX3Byb21wdDogcGFyYW1zLnVzZXJfcHJvbXB0LFxuICAgICAgc3lzdGVtX3Byb21wdDogcGFyYW1zLnN5c3RlbV9wcm9tcHQgPz8gbnVsbCxcbiAgICAgIG1vZGVsX25hbWU6IHBhcmFtcy5tb2RlbF9uYW1lID8/IG51bGwsXG4gICAgICBlZmZvcnQ6IHBhcmFtcy5lZmZvcnQgPz8gbnVsbCxcbiAgICAgIHByb2plY3RfbmFtZTogcGFyYW1zLnByb2plY3RfbmFtZSA/PyBudWxsLFxuICAgICAgc3RhdHVzOiBcInJ1bm5pbmdcIixcbiAgICAgIHJlc3BvbnNlOiBcIlwiLFxuICAgICAgaW5wdXRfdG9rZW5zOiAwLFxuICAgICAgb3V0cHV0X3Rva2VuczogMCxcbiAgICAgIGNhY2hlX3JlYWRfdG9rZW5zOiAwLFxuICAgICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiAwLFxuICAgICAgZHVyYXRpb25fbXM6IDAsXG4gICAgICB0b29sX2NhbGxfY291bnQ6IDAsXG4gICAgICAuLi4ocGFyYW1zLmhpc3RvcnkgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IHsgaGlzdG9yeTogcGFyYW1zLmhpc3RvcnkgYXMgeyB0eXBlOiBzdHJpbmcgfVtdIH1cbiAgICAgICAgOiB7fSksXG4gICAgfSk7XG4gICAgcmV0dXJuIHdkYi50cmFuc2FjdGlvbihhc3luYyAodHJ4KSA9PiB7XG4gICAgICBjb25zdCBpZHMgPSBhd2FpdCB0cngudWJVcHNlcnQoXCJyZXF1ZXN0X2xvZ3NcIik7XG4gICAgICByZXR1cm4gaWRzWzBdITtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGFwcGVuZFN0ZXAocmVxdWVzdExvZ0lkOiBudW1iZXIsIHN0ZXA6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCB3ZGIgPSB0aGlzLmdldFB1cmkoXCJ3XCIpO1xuICAgIHdkYi51YlJlZ2lzdGVyKFwicmVxdWVzdF9sb2dfc3RlcHNcIiwgeyByZXF1ZXN0X2xvZ19pZDogcmVxdWVzdExvZ0lkLCAuLi5zdGVwIH0pO1xuICAgIHJldHVybiB3ZGIudHJhbnNhY3Rpb24oYXN5bmMgKHRyeCkgPT4ge1xuICAgICAgY29uc3QgaWRzID0gYXdhaXQgdHJ4LnViVXBzZXJ0KFwicmVxdWVzdF9sb2dfc3RlcHNcIik7XG4gICAgICBpZiAoc3RlcC50eXBlID09PSBcInRvb2xfY2FsbFwiKSB7XG4gICAgICAgIGF3YWl0IHRyeC5mcm9tKFwicmVxdWVzdF9sb2dzXCIpLndoZXJlKFwiaWRcIiwgcmVxdWVzdExvZ0lkKS5pbmNyZW1lbnQoXCJ0b29sX2NhbGxfY291bnRcIiwgMSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaWRzWzBdITtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGZpbmlzaFJ1bihcbiAgICByZXF1ZXN0TG9nSWQ6IG51bWJlcixcbiAgICBwYXJhbXM6IHtcbiAgICAgIHN0YXR1czogc3RyaW5nO1xuICAgICAgcmVzcG9uc2U/OiBzdHJpbmc7XG4gICAgICB0b2tlbl9uYW1lPzogc3RyaW5nO1xuICAgICAgaW5wdXRfdG9rZW5zPzogbnVtYmVyO1xuICAgICAgb3V0cHV0X3Rva2Vucz86IG51bWJlcjtcbiAgICAgIGNhY2hlX3JlYWRfdG9rZW5zPzogbnVtYmVyO1xuICAgICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zPzogbnVtYmVyO1xuICAgICAgZHVyYXRpb25fbXM/OiBudW1iZXI7XG4gICAgICBoaXN0b3J5PzogdW5rbm93bjtcbiAgICAgIGVycm9yX21lc3NhZ2U/OiBzdHJpbmc7XG4gICAgICB0b29sX2NhbGxfY291bnQ/OiBudW1iZXI7XG4gICAgfSxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHBhcmFtcy5zdGF0dXMgPT09IFwic3VjY2VlZGVkXCIgJiYgIXBhcmFtcy50b2tlbl9uYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0b2tlbk5hbWUgaXMgcmVxdWlyZWQgZm9yIHN1Y2NlZWRlZCBydW5zXCIpO1xuICAgIH1cbiAgICBjb25zdCB1cGRhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0geyBpZDogcmVxdWVzdExvZ0lkLCBzdGF0dXM6IHBhcmFtcy5zdGF0dXMgfTtcbiAgICBjb25zdCBmaWVsZHMgPSBbXG4gICAgICBcInJlc3BvbnNlXCIsXG4gICAgICBcInRva2VuX25hbWVcIixcbiAgICAgIFwiaW5wdXRfdG9rZW5zXCIsXG4gICAgICBcIm91dHB1dF90b2tlbnNcIixcbiAgICAgIFwiY2FjaGVfcmVhZF90b2tlbnNcIixcbiAgICAgIFwiY2FjaGVfY3JlYXRpb25fdG9rZW5zXCIsXG4gICAgICBcImR1cmF0aW9uX21zXCIsXG4gICAgICBcImVycm9yX21lc3NhZ2VcIixcbiAgICAgIFwidG9vbF9jYWxsX2NvdW50XCIsXG4gICAgXSBhcyBjb25zdDtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBmaWVsZHMpIHtcbiAgICAgIGlmIChwYXJhbXNba2V5XSAhPT0gdW5kZWZpbmVkKSB1cGRhdGVba2V5XSA9IHBhcmFtc1trZXldO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLmhpc3RvcnkgIT09IHVuZGVmaW5lZCkgdXBkYXRlLmhpc3RvcnkgPSBwYXJhbXMuaGlzdG9yeTtcblxuICAgIGlmIChwYXJhbXMuaW5wdXRfdG9rZW5zICE9PSB1bmRlZmluZWQgJiYgcGFyYW1zLm91dHB1dF90b2tlbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZGIgPSB0aGlzLmdldERCKFwiclwiKTtcbiAgICAgIGNvbnN0IFtyb3ddID0gYXdhaXQgZGIoXCJyZXF1ZXN0X2xvZ3NcIilcbiAgICAgICAgLnNlbGVjdChcIm1vZGVsX25hbWVcIilcbiAgICAgICAgLndoZXJlKFwiaWRcIiwgcmVxdWVzdExvZ0lkKVxuICAgICAgICAubGltaXQoMSk7XG4gICAgICBpZiAocm93Py5tb2RlbF9uYW1lKSB7XG4gICAgICAgIGNvbnN0IG1vZGVsID0gcm93Lm1vZGVsX25hbWUuaW5jbHVkZXMoXCIvXCIpXG4gICAgICAgICAgPyByb3cubW9kZWxfbmFtZS5zcGxpdChcIi9cIikucG9wKCkhXG4gICAgICAgICAgOiByb3cubW9kZWxfbmFtZTtcbiAgICAgICAgdXBkYXRlLmNvc3RfdXNkID0gTWF0aC5yb3VuZChcbiAgICAgICAgICBjYWxjdWxhdGVDb3N0VXNkKG1vZGVsLCB7XG4gICAgICAgICAgICBpbnB1dFRva2VuczogcGFyYW1zLmlucHV0X3Rva2VucyxcbiAgICAgICAgICAgIG91dHB1dFRva2VuczogcGFyYW1zLm91dHB1dF90b2tlbnMsXG4gICAgICAgICAgICBjYWNoZWRJbnB1dFRva2VuczogcGFyYW1zLmNhY2hlX3JlYWRfdG9rZW5zID8/IDAsXG4gICAgICAgICAgfSkgKiAxXzAwMF8wMDAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgd2RiID0gdGhpcy5nZXRQdXJpKFwid1wiKTtcbiAgICB3ZGIudWJSZWdpc3RlcihcInJlcXVlc3RfbG9nc1wiLCB1cGRhdGUpO1xuICAgIGF3YWl0IHdkYi50cmFuc2FjdGlvbihhc3luYyAodHJ4KSA9PiB7XG4gICAgICBhd2FpdCB0cngudWJVcHNlcnQoXCJyZXF1ZXN0X2xvZ3NcIik7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBhZ2dyZWdhdGVTdGVwVXNhZ2UocmVxdWVzdExvZ0lkOiBudW1iZXIpOiBQcm9taXNlPHtcbiAgICBpbnB1dF90b2tlbnM6IG51bWJlcjtcbiAgICBvdXRwdXRfdG9rZW5zOiBudW1iZXI7XG4gICAgY2FjaGVfcmVhZF90b2tlbnM6IG51bWJlcjtcbiAgICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IG51bWJlcjtcbiAgICBkdXJhdGlvbl9tczogbnVtYmVyO1xuICB9PiB7XG4gICAgY29uc3QgZGIgPSB0aGlzLmdldERCKFwiclwiKTtcbiAgICBjb25zdCBbcm93XSA9IGF3YWl0IGRiKFwicmVxdWVzdF9sb2dfc3RlcHNcIilcbiAgICAgIC53aGVyZShcInJlcXVlc3RfbG9nX2lkXCIsIHJlcXVlc3RMb2dJZClcbiAgICAgIC53aGVyZShcInR5cGVcIiwgXCJnZW5lcmF0ZVwiKVxuICAgICAgLnN1bSh7XG4gICAgICAgIGlucHV0X3Rva2VuczogXCJpbnB1dF90b2tlbnNcIixcbiAgICAgICAgb3V0cHV0X3Rva2VuczogXCJvdXRwdXRfdG9rZW5zXCIsXG4gICAgICAgIGNhY2hlX3JlYWRfdG9rZW5zOiBcImNhY2hlX3JlYWRfdG9rZW5zXCIsXG4gICAgICAgIGNhY2hlX2NyZWF0aW9uX3Rva2VuczogXCJjYWNoZV9jcmVhdGlvbl90b2tlbnNcIixcbiAgICAgICAgZHVyYXRpb25fbXM6IFwiZHVyYXRpb25fbXNcIixcbiAgICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBpbnB1dF90b2tlbnM6IE51bWJlcihyb3c/LmlucHV0X3Rva2VucyA/PyAwKSxcbiAgICAgIG91dHB1dF90b2tlbnM6IE51bWJlcihyb3c/Lm91dHB1dF90b2tlbnMgPz8gMCksXG4gICAgICBjYWNoZV9yZWFkX3Rva2VuczogTnVtYmVyKHJvdz8uY2FjaGVfcmVhZF90b2tlbnMgPz8gMCksXG4gICAgICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IE51bWJlcihyb3c/LmNhY2hlX2NyZWF0aW9uX3Rva2VucyA/PyAwKSxcbiAgICAgIGR1cmF0aW9uX21zOiBOdW1iZXIocm93Py5kdXJhdGlvbl9tcyA/PyAwKSxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZmluZFN0YWxlUnVubmluZ0lkcyh0aHJlc2hvbGRNczogbnVtYmVyLCBsaW1pdDogbnVtYmVyID0gMTApOiBQcm9taXNlPG51bWJlcltdPiB7XG4gICAgY29uc3QgZGIgPSB0aGlzLmdldERCKFwiclwiKTtcbiAgICBjb25zdCB0aHJlc2hvbGQgPSBuZXcgRGF0ZShEYXRlLm5vdygpIC0gdGhyZXNob2xkTXMpO1xuICAgIGNvbnN0IHJvd3MgPSBhd2FpdCBkYihcInJlcXVlc3RfbG9nc1wiKVxuICAgICAgLnNlbGVjdChcImlkXCIpXG4gICAgICAud2hlcmUoXCJzdGF0dXNcIiwgXCJydW5uaW5nXCIpXG4gICAgICAud2hlcmUoXCJjcmVhdGVkX2F0XCIsIFwiPFwiLCB0aHJlc2hvbGQpXG4gICAgICAubGltaXQobGltaXQpO1xuICAgIHJldHVybiByb3dzLm1hcCgocjogeyBpZDogbnVtYmVyIH0pID0+IHIuaWQpO1xuICB9XG5cbiAgYXN5bmMgZ2V0TmV4dFN0ZXBJbmRleChyZXF1ZXN0TG9nSWQ6IG51bWJlcik6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgZGIgPSB0aGlzLmdldERCKFwiclwiKTtcbiAgICBjb25zdCBbcm93XSA9IGF3YWl0IGRiKFwicmVxdWVzdF9sb2dfc3RlcHNcIilcbiAgICAgIC53aGVyZShcInJlcXVlc3RfbG9nX2lkXCIsIHJlcXVlc3RMb2dJZClcbiAgICAgIC5tYXgoXCJzdGVwX2luZGV4IGFzIG1heFN0ZXBcIik7XG4gICAgcmV0dXJuICgocm93IGFzIHsgbWF4U3RlcDogbnVtYmVyIHwgbnVsbCB9KT8ubWF4U3RlcCA/PyAtMSkgKyAxO1xuICB9XG5cbiAgYXN5bmMgY29tcGxldGVUb29sQ2FsbChcbiAgICByZXF1ZXN0TG9nSWQ6IG51bWJlcixcbiAgICB0b29sQ2FsbElkOiBzdHJpbmcsXG4gICAgcGFyYW1zOiB7IHRvb2xfcmVzdWx0Pzogc3RyaW5nOyB0b29sX2R1cmF0aW9uX21zPzogbnVtYmVyOyBlcnJvcj86IHN0cmluZyB9LFxuICApOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IHdkYiA9IHRoaXMuZ2V0UHVyaShcIndcIik7XG4gICAgcmV0dXJuIHdkYi50cmFuc2FjdGlvbihhc3luYyAodHJ4KSA9PiB7XG4gICAgICBjb25zdCB1cGRhdGVkID0gYXdhaXQgdHJ4XG4gICAgICAgIC5mcm9tKFwicmVxdWVzdF9sb2dfc3RlcHNcIilcbiAgICAgICAgLndoZXJlKFwicmVxdWVzdF9sb2dfaWRcIiwgcmVxdWVzdExvZ0lkKVxuICAgICAgICAud2hlcmUoXCJ0b29sX2NhbGxfaWRcIiwgdG9vbENhbGxJZClcbiAgICAgICAgLndoZXJlKFwidHlwZVwiLCBcInRvb2xfY2FsbFwiKVxuICAgICAgICAudXBkYXRlKHtcbiAgICAgICAgICAuLi4ocGFyYW1zLnRvb2xfcmVzdWx0ICE9PSB1bmRlZmluZWQgPyB7IHRvb2xfcmVzdWx0OiBwYXJhbXMudG9vbF9yZXN1bHQgfSA6IHt9KSxcbiAgICAgICAgICAuLi4ocGFyYW1zLnRvb2xfZHVyYXRpb25fbXMgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB7IHRvb2xfZHVyYXRpb25fbXM6IHBhcmFtcy50b29sX2R1cmF0aW9uX21zIH1cbiAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgIC4uLihwYXJhbXMuZXJyb3IgIT09IHVuZGVmaW5lZCA/IHsgZXJyb3I6IHBhcmFtcy5lcnJvciB9IDoge30pLFxuICAgICAgICB9KTtcbiAgICAgIHJldHVybiB1cGRhdGVkO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gU29uYW11IGZpbmRNYW5564qUIHN1YnNldCDsoITssrQg7Lus65+8KHRleHQg7Y+s7ZWoKeydhCDtjpjsuZjtlbTshJwgYWdncmVnYXRl7JeUIOuEiOustCDrrLTqsbDsm4Ag4oaSIHJhdyBzdW0g7IKs7JqpLlxuICBhc3luYyB0b3RhbENvc3QocGFyYW1zOiB7IHRva2VuX25hbWU/OiBzdHJpbmcgfSA9IHt9KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCBxYiA9IHRoaXMuZ2V0REIoXCJyXCIpKFwicmVxdWVzdF9sb2dzXCIpO1xuICAgIGlmIChwYXJhbXMudG9rZW5fbmFtZSkge1xuICAgICAgcWIud2hlcmUoXCJ0b2tlbl9uYW1lXCIsIHBhcmFtcy50b2tlbl9uYW1lKTtcbiAgICB9XG4gICAgLy8ga25leOuKlCBwZ+yXkOyEnCBudW1lcmljIGFnZ3JlZ2F0ZeulvCBzdHJpbmfsnLzroZwg67CY7ZmYLlxuICAgIGNvbnN0IHJvdyA9IChhd2FpdCBxYi5zdW0oeyBzdW06IFwiY29zdF91c2RcIiB9KS5maXJzdCgpKSBhcyB7IHN1bTogc3RyaW5nIHwgbnVsbCB9IHwgdW5kZWZpbmVkO1xuICAgIHJldHVybiBOdW1iZXIocm93Py5zdW0gPz8gMCkgLyBNSUNST19VU0Q7XG4gIH1cblxuICBhc3luYyBkaXN0aW5jdFByb2plY3ROYW1lcygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgY29uc3Qgcm93cyA9IGF3YWl0IHRoaXMuZ2V0UHVyaShcInJcIilcbiAgICAgIC5mcm9tKFwicmVxdWVzdF9sb2dzXCIpXG4gICAgICAuZGlzdGluY3QoXCJwcm9qZWN0X25hbWVcIilcbiAgICAgIC53aGVyZShcInByb2plY3RfbmFtZVwiLCBcIiE9XCIsIG51bGwpXG4gICAgICAub3JkZXJCeShcInByb2plY3RfbmFtZVwiLCBcImFzY1wiKVxuICAgICAgLnNlbGVjdCh7XG4gICAgICAgIHByb2plY3RfbmFtZTogXCJwcm9qZWN0X25hbWVcIixcbiAgICAgIH0pO1xuICAgIHJldHVybiByb3dzLm1hcCgocikgPT4gci5wcm9qZWN0X25hbWUhKTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIlBPU1RcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1tdXRhdGlvblwiXSB9KVxuICBhc3luYyBkZWwoaWRzOiBudW1iZXJbXSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3Qgd2RiID0gdGhpcy5nZXRQdXJpKFwid1wiKTtcblxuICAgIC8vIHRyYW5zYWN0aW9uXG4gICAgYXdhaXQgd2RiLnRyYW5zYWN0aW9uKGFzeW5jICh0cngpID0+IHtcbiAgICAgIGF3YWl0IHRyeFxuICAgICAgICAudGFibGUoXCJyZXF1ZXN0X2xvZ19zdGVwc1wiKVxuICAgICAgICAud2hlcmVJbihcInJlcXVlc3RfbG9nX3N0ZXBzLnJlcXVlc3RfbG9nX2lkXCIsIGlkcylcbiAgICAgICAgLmRlbGV0ZSgpO1xuICAgICAgcmV0dXJuIHRyeC50YWJsZShcInJlcXVlc3RfbG9nc1wiKS53aGVyZUluKFwicmVxdWVzdF9sb2dzLmlkXCIsIGlkcykuZGVsZXRlKCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gaWRzLmxlbmd0aDtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgUmVxdWVzdExvZ01vZGVsID0gbmV3IFJlcXVlc3RMb2dNb2RlbENsYXNzKCk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBaUJBLE1BQWEsWUFBWTtBQUt6QixJQUFNLHVCQUFOLGNBQW1DLGVBS2pDO0NBQ0EsY0FBYztBQUNaLFFBQU0sY0FBYyx5QkFBeUIsd0JBQXdCOztDQUd2RSxNQUNNLFNBQ0osUUFDQSxJQUNxQztFQUNyQyxNQUFNLEVBQUUsU0FBUyxNQUFNLEtBQUssU0FBUyxRQUFRO0dBQzND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
|
|
232
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1sb2cubW9kZWwuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3JlcXVlc3QtbG9nL3JlcXVlc3QtbG9nLm1vZGVsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGFwaSxcbiAgYXNBcnJheSxcbiAgQmFkUmVxdWVzdEV4Y2VwdGlvbixcbiAgQmFzZU1vZGVsQ2xhc3MsXG4gIGV4aGF1c3RpdmUsXG4gIHR5cGUgTGlzdFJlc3VsdCxcbiAgTm90Rm91bmRFeGNlcHRpb24sXG59IGZyb20gXCJzb25hbXVcIjtcblxuaW1wb3J0IHsgU0QgfSBmcm9tIFwiLi4vLi4vaTE4bi9zZC5nZW5lcmF0ZWRcIjtcbmltcG9ydCB7IGNhbGN1bGF0ZUNvc3RVc2QgfSBmcm9tIFwiLi4vLi4vdXRpbHMvcHJvdmlkZXJzL2NvbW1vbi9tb2RlbC1jb3N0XCI7XG5pbXBvcnQgeyB0eXBlIFJlcXVlc3RMb2dTdWJzZXRLZXksIHR5cGUgUmVxdWVzdExvZ1N1YnNldE1hcHBpbmcgfSBmcm9tIFwiLi4vc29uYW11LmdlbmVyYXRlZFwiO1xuaW1wb3J0IHsgcmVxdWVzdExvZ0xvYWRlclF1ZXJpZXMsIHJlcXVlc3RMb2dTdWJzZXRRdWVyaWVzIH0gZnJvbSBcIi4uL3NvbmFtdS5nZW5lcmF0ZWQuc3NvXCI7XG5pbXBvcnQgeyB0eXBlIFJlcXVlc3RMb2dMaXN0UGFyYW1zLCB0eXBlIFJlcXVlc3RMb2dTYXZlUGFyYW1zIH0gZnJvbSBcIi4vcmVxdWVzdC1sb2cudHlwZXNcIjtcblxuLy8gY29zdF91c2TripQg7KCV7IiYIG1pY3JvLVVTROuhnCDsoIDsnqUuIOyLpOygnCBVU0QgPSBjb3N0X3VzZCAvIE1JQ1JPX1VTRC5cbmV4cG9ydCBjb25zdCBNSUNST19VU0QgPSAxXzAwMF8wMDA7XG5cbi8qXG4gIFJlcXVlc3RMb2cgTW9kZWxcbiovXG5jbGFzcyBSZXF1ZXN0TG9nTW9kZWxDbGFzcyBleHRlbmRzIEJhc2VNb2RlbENsYXNzPFxuICBSZXF1ZXN0TG9nU3Vic2V0S2V5LFxuICBSZXF1ZXN0TG9nU3Vic2V0TWFwcGluZyxcbiAgdHlwZW9mIHJlcXVlc3RMb2dTdWJzZXRRdWVyaWVzLFxuICB0eXBlb2YgcmVxdWVzdExvZ0xvYWRlclF1ZXJpZXNcbj4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIlJlcXVlc3RMb2dcIiwgcmVxdWVzdExvZ1N1YnNldFF1ZXJpZXMsIHJlcXVlc3RMb2dMb2FkZXJRdWVyaWVzKTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIkdFVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLXF1ZXJ5XCJdLCByZXNvdXJjZU5hbWU6IFwiUmVxdWVzdExvZ1wiIH0pXG4gIGFzeW5jIGZpbmRCeUlkPFQgZXh0ZW5kcyBSZXF1ZXN0TG9nU3Vic2V0S2V5PihcbiAgICBzdWJzZXQ6IFQsXG4gICAgaWQ6IG51bWJlcixcbiAgKTogUHJvbWlzZTxSZXF1ZXN0TG9nU3Vic2V0TWFwcGluZ1tUXT4ge1xuICAgIGNvbnN0IHsgcm93cyB9ID0gYXdhaXQgdGhpcy5maW5kTWFueShzdWJzZXQsIHtcbiAgICAgIGlkLFxuICAgICAgbnVtOiAxLFxuICAgICAgcGFnZTogMSxcbiAgICB9KTtcbiAgICBpZiAoIXJvd3NbMF0pIHtcbiAgICAgIHRocm93IG5ldyBOb3RGb3VuZEV4Y2VwdGlvbihTRChcImVycm9yLmVudGl0eU5vdEZvdW5kXCIpKFwiUmVxdWVzdExvZ1wiLCBpZCkpO1xuICAgIH1cblxuICAgIHJldHVybiByb3dzWzBdO1xuICB9XG5cbiAgYXN5bmMgZmluZE9uZTxUIGV4dGVuZHMgUmVxdWVzdExvZ1N1YnNldEtleT4oXG4gICAgc3Vic2V0OiBULFxuICAgIGxpc3RQYXJhbXM6IFJlcXVlc3RMb2dMaXN0UGFyYW1zLFxuICApOiBQcm9taXNlPFJlcXVlc3RMb2dTdWJzZXRNYXBwaW5nW1RdIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgcm93cyB9ID0gYXdhaXQgdGhpcy5maW5kTWFueShzdWJzZXQsIHtcbiAgICAgIC4uLmxpc3RQYXJhbXMsXG4gICAgICBudW06IDEsXG4gICAgICBwYWdlOiAxLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJvd3NbMF0gPz8gbnVsbDtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIkdFVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLXF1ZXJ5XCJdLCByZXNvdXJjZU5hbWU6IFwiUmVxdWVzdExvZ3NcIiB9KVxuICBhc3luYyBmaW5kTWFueTxUIGV4dGVuZHMgUmVxdWVzdExvZ1N1YnNldEtleSwgTFAgZXh0ZW5kcyBSZXF1ZXN0TG9nTGlzdFBhcmFtcz4oXG4gICAgc3Vic2V0OiBULFxuICAgIHJhd1BhcmFtcz86IExQLFxuICApOiBQcm9taXNlPExpc3RSZXN1bHQ8TFAsIFJlcXVlc3RMb2dTdWJzZXRNYXBwaW5nW1RdPj4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIG51bTogMjQsXG4gICAgICBwYWdlOiAxLFxuICAgICAgc2VhcmNoOiBcImlkXCIgYXMgY29uc3QsXG4gICAgICBvcmRlckJ5OiBcImlkLWRlc2NcIiBhcyBjb25zdCxcbiAgICAgIC4uLnJhd1BhcmFtcyxcbiAgICB9IHNhdGlzZmllcyBSZXF1ZXN0TG9nTGlzdFBhcmFtcztcblxuICAgIGNvbnN0IHsgcWIsIG9uU3Vic2V0OiBfIH0gPSB0aGlzLmdldFN1YnNldFF1ZXJpZXMoc3Vic2V0KTtcblxuICAgIGlmIChwYXJhbXMuaWQpIHtcbiAgICAgIHFiLndoZXJlSW4oXCJyZXF1ZXN0X2xvZ3MuaWRcIiwgYXNBcnJheShwYXJhbXMuaWQpKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLnRva2VuX25hbWUpIHtcbiAgICAgIHFiLndoZXJlKFwicmVxdWVzdF9sb2dzLnRva2VuX25hbWVcIiwgcGFyYW1zLnRva2VuX25hbWUpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMucHJvamVjdF9uYW1lX2lzX251bGwpIHtcbiAgICAgIHFiLndoZXJlKFwicmVxdWVzdF9sb2dzLnByb2plY3RfbmFtZVwiLCBudWxsKTtcbiAgICB9IGVsc2UgaWYgKHBhcmFtcy5wcm9qZWN0X25hbWVfaXNfbm90X251bGwpIHtcbiAgICAgIHFiLndoZXJlKFwicmVxdWVzdF9sb2dzLnByb2plY3RfbmFtZVwiLCBcIiE9XCIsIG51bGwpO1xuICAgIH0gZWxzZSBpZiAocGFyYW1zLnByb2plY3RfbmFtZSkge1xuICAgICAgcWIud2hlcmUoXCJyZXF1ZXN0X2xvZ3MucHJvamVjdF9uYW1lXCIsIHBhcmFtcy5wcm9qZWN0X25hbWUpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMubW9kZWxfbmFtZSkge1xuICAgICAgcWIud2hlcmUoXCJyZXF1ZXN0X2xvZ3MubW9kZWxfbmFtZVwiLCBwYXJhbXMubW9kZWxfbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5zZWFyY2ggJiYgcGFyYW1zLmtleXdvcmQgJiYgcGFyYW1zLmtleXdvcmQubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKHBhcmFtcy5zZWFyY2ggPT09IFwiaWRcIikge1xuICAgICAgICBxYi53aGVyZShcInJlcXVlc3RfbG9ncy5pZFwiLCBOdW1iZXIocGFyYW1zLmtleXdvcmQpKTtcbiAgICAgIH0gZWxzZSBpZiAocGFyYW1zLnNlYXJjaCA9PT0gXCJ0b2tlbl9uYW1lXCIpIHtcbiAgICAgICAgcWIud2hlcmUoXCJyZXF1ZXN0X2xvZ3MudG9rZW5fbmFtZVwiLCBcImxpa2VcIiwgYCUke3BhcmFtcy5rZXl3b3JkfSVgKTtcbiAgICAgIH0gZWxzZSBpZiAocGFyYW1zLnNlYXJjaCA9PT0gXCJ1c2VyX3Byb21wdFwiKSB7XG4gICAgICAgIHFiLndoZXJlKFwicmVxdWVzdF9sb2dzLnVzZXJfcHJvbXB0XCIsIFwibGlrZVwiLCBgJSR7cGFyYW1zLmtleXdvcmR9JWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24oU0QoXCJlcnJvci51bmtub3duU2VhcmNoRmllbGRcIikocGFyYW1zLnNlYXJjaCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIG9yZGVyQnlcbiAgICBpZiAocGFyYW1zLm9yZGVyQnkpIHtcbiAgICAgIC8vIGRlZmF1bHQgb3JkZXJCeVxuICAgICAgaWYgKHBhcmFtcy5vcmRlckJ5ID09PSBcImlkLWRlc2NcIikge1xuICAgICAgICBxYi5vcmRlckJ5KFwicmVxdWVzdF9sb2dzLmlkXCIsIFwiZGVzY1wiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4aGF1c3RpdmUocGFyYW1zLm9yZGVyQnkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGVuaGFuY2VycyA9IHRoaXMuY3JlYXRlRW5oYW5jZXJzKHtcbiAgICAgIEE6IChyb3cpID0+ICh7XG4gICAgICAgIC4uLnJvdyxcbiAgICAgICAgLy8g7ISc67iM7IWL67OE66GcIHZpcnR1YWwg7ZWE65OcIOqzhOyCsOuhnOyngSDstpTqsIBcbiAgICAgIH0pLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZVN1YnNldFF1ZXJ5KHtcbiAgICAgIHN1YnNldCxcbiAgICAgIHFiLFxuICAgICAgcGFyYW1zLFxuICAgICAgZW5oYW5jZXJzLFxuICAgICAgZGVidWc6IGZhbHNlLFxuICAgIH0pO1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiUE9TVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLW11dGF0aW9uXCJdIH0pXG4gIGFzeW5jIHNhdmUoc3BhOiBSZXF1ZXN0TG9nU2F2ZVBhcmFtc1tdKTogUHJvbWlzZTxudW1iZXJbXT4ge1xuICAgIGNvbnN0IHdkYiA9IHRoaXMuZ2V0UHVyaShcIndcIik7XG5cbiAgICAvLyByZWdpc3RlclxuICAgIHNwYS5mb3JFYWNoKChzcCkgPT4ge1xuICAgICAgd2RiLnViUmVnaXN0ZXIoXCJyZXF1ZXN0X2xvZ3NcIiwgc3ApO1xuICAgIH0pO1xuXG4gICAgLy8gdHJhbnNhY3Rpb25cbiAgICByZXR1cm4gd2RiLnRyYW5zYWN0aW9uKGFzeW5jICh0cngpID0+IHtcbiAgICAgIGNvbnN0IGlkcyA9IGF3YWl0IHRyeC51YlVwc2VydChcInJlcXVlc3RfbG9nc1wiKTtcblxuICAgICAgcmV0dXJuIGlkcztcbiAgICB9KTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBSdW4gTGlmZWN5Y2xlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIGFzeW5jIGNyZWF0ZVJ1bihwYXJhbXM6IHtcbiAgICB1c2VyX3Byb21wdDogc3RyaW5nO1xuICAgIHN5c3RlbV9wcm9tcHQ/OiBzdHJpbmcgfCBudWxsO1xuICAgIG1vZGVsX25hbWU/OiBzdHJpbmcgfCBudWxsO1xuICAgIGVmZm9ydD86IHN0cmluZyB8IG51bGw7XG4gICAgcHJvamVjdF9uYW1lPzogc3RyaW5nIHwgbnVsbDtcbiAgICBoaXN0b3J5PzogdW5rbm93bjtcbiAgfSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3Qgd2RiID0gdGhpcy5nZXRQdXJpKFwid1wiKTtcbiAgICB3ZGIudWJSZWdpc3RlcihcInJlcXVlc3RfbG9nc1wiLCB7XG4gICAgICB1c2VyX3Byb21wdDogcGFyYW1zLnVzZXJfcHJvbXB0LFxuICAgICAgc3lzdGVtX3Byb21wdDogcGFyYW1zLnN5c3RlbV9wcm9tcHQgPz8gbnVsbCxcbiAgICAgIG1vZGVsX25hbWU6IHBhcmFtcy5tb2RlbF9uYW1lID8/IG51bGwsXG4gICAgICBlZmZvcnQ6IHBhcmFtcy5lZmZvcnQgPz8gbnVsbCxcbiAgICAgIHByb2plY3RfbmFtZTogcGFyYW1zLnByb2plY3RfbmFtZSA/PyBudWxsLFxuICAgICAgc3RhdHVzOiBcInJ1bm5pbmdcIixcbiAgICAgIHJlc3BvbnNlOiBcIlwiLFxuICAgICAgaW5wdXRfdG9rZW5zOiAwLFxuICAgICAgb3V0cHV0X3Rva2VuczogMCxcbiAgICAgIGNhY2hlX3JlYWRfdG9rZW5zOiAwLFxuICAgICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiAwLFxuICAgICAgZHVyYXRpb25fbXM6IDAsXG4gICAgICB0b29sX2NhbGxfY291bnQ6IDAsXG4gICAgICAuLi4ocGFyYW1zLmhpc3RvcnkgIT09IHVuZGVmaW5lZCA/IHsgaGlzdG9yeTogcGFyYW1zLmhpc3RvcnkgYXMgeyB0eXBlOiBzdHJpbmcgfVtdIH0gOiB7fSksXG4gICAgfSk7XG4gICAgcmV0dXJuIHdkYi50cmFuc2FjdGlvbihhc3luYyAodHJ4KSA9PiB7XG4gICAgICBjb25zdCBpZHMgPSBhd2FpdCB0cngudWJVcHNlcnQoXCJyZXF1ZXN0X2xvZ3NcIik7XG4gICAgICByZXR1cm4gaWRzWzBdITtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGFwcGVuZFN0ZXAocmVxdWVzdExvZ0lkOiBudW1iZXIsIHN0ZXA6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCB3ZGIgPSB0aGlzLmdldFB1cmkoXCJ3XCIpO1xuICAgIHdkYi51YlJlZ2lzdGVyKFwicmVxdWVzdF9sb2dfc3RlcHNcIiwgeyByZXF1ZXN0X2xvZ19pZDogcmVxdWVzdExvZ0lkLCAuLi5zdGVwIH0pO1xuICAgIHJldHVybiB3ZGIudHJhbnNhY3Rpb24oYXN5bmMgKHRyeCkgPT4ge1xuICAgICAgY29uc3QgaWRzID0gYXdhaXQgdHJ4LnViVXBzZXJ0KFwicmVxdWVzdF9sb2dfc3RlcHNcIik7XG4gICAgICBpZiAoc3RlcC50eXBlID09PSBcInRvb2xfY2FsbFwiKSB7XG4gICAgICAgIGF3YWl0IHRyeC5mcm9tKFwicmVxdWVzdF9sb2dzXCIpLndoZXJlKFwiaWRcIiwgcmVxdWVzdExvZ0lkKS5pbmNyZW1lbnQoXCJ0b29sX2NhbGxfY291bnRcIiwgMSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaWRzWzBdITtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGZpbmlzaFJ1bihcbiAgICByZXF1ZXN0TG9nSWQ6IG51bWJlcixcbiAgICBwYXJhbXM6IHtcbiAgICAgIHN0YXR1czogc3RyaW5nO1xuICAgICAgcmVzcG9uc2U/OiBzdHJpbmc7XG4gICAgICB0b2tlbl9uYW1lPzogc3RyaW5nO1xuICAgICAgaW5wdXRfdG9rZW5zPzogbnVtYmVyO1xuICAgICAgb3V0cHV0X3Rva2Vucz86IG51bWJlcjtcbiAgICAgIGNhY2hlX3JlYWRfdG9rZW5zPzogbnVtYmVyO1xuICAgICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zPzogbnVtYmVyO1xuICAgICAgZHVyYXRpb25fbXM/OiBudW1iZXI7XG4gICAgICBoaXN0b3J5PzogdW5rbm93bjtcbiAgICAgIGVycm9yX21lc3NhZ2U/OiBzdHJpbmc7XG4gICAgICB0b29sX2NhbGxfY291bnQ/OiBudW1iZXI7XG4gICAgfSxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHBhcmFtcy5zdGF0dXMgPT09IFwic3VjY2VlZGVkXCIgJiYgIXBhcmFtcy50b2tlbl9uYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0b2tlbk5hbWUgaXMgcmVxdWlyZWQgZm9yIHN1Y2NlZWRlZCBydW5zXCIpO1xuICAgIH1cbiAgICBjb25zdCB1cGRhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0geyBpZDogcmVxdWVzdExvZ0lkLCBzdGF0dXM6IHBhcmFtcy5zdGF0dXMgfTtcbiAgICBjb25zdCBmaWVsZHMgPSBbXG4gICAgICBcInJlc3BvbnNlXCIsXG4gICAgICBcInRva2VuX25hbWVcIixcbiAgICAgIFwiaW5wdXRfdG9rZW5zXCIsXG4gICAgICBcIm91dHB1dF90b2tlbnNcIixcbiAgICAgIFwiY2FjaGVfcmVhZF90b2tlbnNcIixcbiAgICAgIFwiY2FjaGVfY3JlYXRpb25fdG9rZW5zXCIsXG4gICAgICBcImR1cmF0aW9uX21zXCIsXG4gICAgICBcImVycm9yX21lc3NhZ2VcIixcbiAgICAgIFwidG9vbF9jYWxsX2NvdW50XCIsXG4gICAgXSBhcyBjb25zdDtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBmaWVsZHMpIHtcbiAgICAgIGlmIChwYXJhbXNba2V5XSAhPT0gdW5kZWZpbmVkKSB1cGRhdGVba2V5XSA9IHBhcmFtc1trZXldO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLmhpc3RvcnkgIT09IHVuZGVmaW5lZCkgdXBkYXRlLmhpc3RvcnkgPSBwYXJhbXMuaGlzdG9yeTtcblxuICAgIGlmIChwYXJhbXMuaW5wdXRfdG9rZW5zICE9PSB1bmRlZmluZWQgJiYgcGFyYW1zLm91dHB1dF90b2tlbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZGIgPSB0aGlzLmdldERCKFwiclwiKTtcbiAgICAgIGNvbnN0IFtyb3ddID0gYXdhaXQgZGIoXCJyZXF1ZXN0X2xvZ3NcIilcbiAgICAgICAgLnNlbGVjdChcIm1vZGVsX25hbWVcIilcbiAgICAgICAgLndoZXJlKFwiaWRcIiwgcmVxdWVzdExvZ0lkKVxuICAgICAgICAubGltaXQoMSk7XG4gICAgICBpZiAocm93Py5tb2RlbF9uYW1lKSB7XG4gICAgICAgIGNvbnN0IG1vZGVsID0gcm93Lm1vZGVsX25hbWUuaW5jbHVkZXMoXCIvXCIpXG4gICAgICAgICAgPyByb3cubW9kZWxfbmFtZS5zcGxpdChcIi9cIikucG9wKCkhXG4gICAgICAgICAgOiByb3cubW9kZWxfbmFtZTtcbiAgICAgICAgdXBkYXRlLmNvc3RfdXNkID0gTWF0aC5yb3VuZChcbiAgICAgICAgICBjYWxjdWxhdGVDb3N0VXNkKG1vZGVsLCB7XG4gICAgICAgICAgICBpbnB1dFRva2VuczogcGFyYW1zLmlucHV0X3Rva2VucyxcbiAgICAgICAgICAgIG91dHB1dFRva2VuczogcGFyYW1zLm91dHB1dF90b2tlbnMsXG4gICAgICAgICAgICBjYWNoZWRJbnB1dFRva2VuczogcGFyYW1zLmNhY2hlX3JlYWRfdG9rZW5zID8/IDAsXG4gICAgICAgICAgfSkgKiAxXzAwMF8wMDAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgd2RiID0gdGhpcy5nZXRQdXJpKFwid1wiKTtcbiAgICB3ZGIudWJSZWdpc3RlcihcInJlcXVlc3RfbG9nc1wiLCB1cGRhdGUpO1xuICAgIGF3YWl0IHdkYi50cmFuc2FjdGlvbihhc3luYyAodHJ4KSA9PiB7XG4gICAgICBhd2FpdCB0cngudWJVcHNlcnQoXCJyZXF1ZXN0X2xvZ3NcIik7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBhZ2dyZWdhdGVTdGVwVXNhZ2UocmVxdWVzdExvZ0lkOiBudW1iZXIpOiBQcm9taXNlPHtcbiAgICBpbnB1dF90b2tlbnM6IG51bWJlcjtcbiAgICBvdXRwdXRfdG9rZW5zOiBudW1iZXI7XG4gICAgY2FjaGVfcmVhZF90b2tlbnM6IG51bWJlcjtcbiAgICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IG51bWJlcjtcbiAgICBkdXJhdGlvbl9tczogbnVtYmVyO1xuICB9PiB7XG4gICAgY29uc3QgZGIgPSB0aGlzLmdldERCKFwiclwiKTtcbiAgICBjb25zdCBbcm93XSA9IGF3YWl0IGRiKFwicmVxdWVzdF9sb2dfc3RlcHNcIilcbiAgICAgIC53aGVyZShcInJlcXVlc3RfbG9nX2lkXCIsIHJlcXVlc3RMb2dJZClcbiAgICAgIC53aGVyZShcInR5cGVcIiwgXCJnZW5lcmF0ZVwiKVxuICAgICAgLnN1bSh7XG4gICAgICAgIGlucHV0X3Rva2VuczogXCJpbnB1dF90b2tlbnNcIixcbiAgICAgICAgb3V0cHV0X3Rva2VuczogXCJvdXRwdXRfdG9rZW5zXCIsXG4gICAgICAgIGNhY2hlX3JlYWRfdG9rZW5zOiBcImNhY2hlX3JlYWRfdG9rZW5zXCIsXG4gICAgICAgIGNhY2hlX2NyZWF0aW9uX3Rva2VuczogXCJjYWNoZV9jcmVhdGlvbl90b2tlbnNcIixcbiAgICAgICAgZHVyYXRpb25fbXM6IFwiZHVyYXRpb25fbXNcIixcbiAgICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBpbnB1dF90b2tlbnM6IE51bWJlcihyb3c/LmlucHV0X3Rva2VucyA/PyAwKSxcbiAgICAgIG91dHB1dF90b2tlbnM6IE51bWJlcihyb3c/Lm91dHB1dF90b2tlbnMgPz8gMCksXG4gICAgICBjYWNoZV9yZWFkX3Rva2VuczogTnVtYmVyKHJvdz8uY2FjaGVfcmVhZF90b2tlbnMgPz8gMCksXG4gICAgICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IE51bWJlcihyb3c/LmNhY2hlX2NyZWF0aW9uX3Rva2VucyA/PyAwKSxcbiAgICAgIGR1cmF0aW9uX21zOiBOdW1iZXIocm93Py5kdXJhdGlvbl9tcyA/PyAwKSxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZmluZFN0YWxlUnVubmluZ0lkcyh0aHJlc2hvbGRNczogbnVtYmVyLCBsaW1pdDogbnVtYmVyID0gMTApOiBQcm9taXNlPG51bWJlcltdPiB7XG4gICAgY29uc3QgZGIgPSB0aGlzLmdldERCKFwiclwiKTtcbiAgICBjb25zdCB0aHJlc2hvbGQgPSBuZXcgRGF0ZShEYXRlLm5vdygpIC0gdGhyZXNob2xkTXMpO1xuICAgIGNvbnN0IHJvd3MgPSBhd2FpdCBkYihcInJlcXVlc3RfbG9nc1wiKVxuICAgICAgLnNlbGVjdChcImlkXCIpXG4gICAgICAud2hlcmUoXCJzdGF0dXNcIiwgXCJydW5uaW5nXCIpXG4gICAgICAud2hlcmUoXCJjcmVhdGVkX2F0XCIsIFwiPFwiLCB0aHJlc2hvbGQpXG4gICAgICAubGltaXQobGltaXQpO1xuICAgIHJldHVybiByb3dzLm1hcCgocjogeyBpZDogbnVtYmVyIH0pID0+IHIuaWQpO1xuICB9XG5cbiAgYXN5bmMgZ2V0TmV4dFN0ZXBJbmRleChyZXF1ZXN0TG9nSWQ6IG51bWJlcik6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgZGIgPSB0aGlzLmdldERCKFwiclwiKTtcbiAgICBjb25zdCBbcm93XSA9IGF3YWl0IGRiKFwicmVxdWVzdF9sb2dfc3RlcHNcIilcbiAgICAgIC53aGVyZShcInJlcXVlc3RfbG9nX2lkXCIsIHJlcXVlc3RMb2dJZClcbiAgICAgIC5tYXgoXCJzdGVwX2luZGV4IGFzIG1heFN0ZXBcIik7XG4gICAgcmV0dXJuICgocm93IGFzIHsgbWF4U3RlcDogbnVtYmVyIHwgbnVsbCB9KT8ubWF4U3RlcCA/PyAtMSkgKyAxO1xuICB9XG5cbiAgYXN5bmMgY29tcGxldGVUb29sQ2FsbChcbiAgICByZXF1ZXN0TG9nSWQ6IG51bWJlcixcbiAgICB0b29sQ2FsbElkOiBzdHJpbmcsXG4gICAgcGFyYW1zOiB7IHRvb2xfcmVzdWx0Pzogc3RyaW5nOyB0b29sX2R1cmF0aW9uX21zPzogbnVtYmVyOyBlcnJvcj86IHN0cmluZyB9LFxuICApOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IHdkYiA9IHRoaXMuZ2V0UHVyaShcIndcIik7XG4gICAgcmV0dXJuIHdkYi50cmFuc2FjdGlvbihhc3luYyAodHJ4KSA9PiB7XG4gICAgICBjb25zdCB1cGRhdGVkID0gYXdhaXQgdHJ4XG4gICAgICAgIC5mcm9tKFwicmVxdWVzdF9sb2dfc3RlcHNcIilcbiAgICAgICAgLndoZXJlKFwicmVxdWVzdF9sb2dfaWRcIiwgcmVxdWVzdExvZ0lkKVxuICAgICAgICAud2hlcmUoXCJ0b29sX2NhbGxfaWRcIiwgdG9vbENhbGxJZClcbiAgICAgICAgLndoZXJlKFwidHlwZVwiLCBcInRvb2xfY2FsbFwiKVxuICAgICAgICAudXBkYXRlKHtcbiAgICAgICAgICAuLi4ocGFyYW1zLnRvb2xfcmVzdWx0ICE9PSB1bmRlZmluZWQgPyB7IHRvb2xfcmVzdWx0OiBwYXJhbXMudG9vbF9yZXN1bHQgfSA6IHt9KSxcbiAgICAgICAgICAuLi4ocGFyYW1zLnRvb2xfZHVyYXRpb25fbXMgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB7IHRvb2xfZHVyYXRpb25fbXM6IHBhcmFtcy50b29sX2R1cmF0aW9uX21zIH1cbiAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgIC4uLihwYXJhbXMuZXJyb3IgIT09IHVuZGVmaW5lZCA/IHsgZXJyb3I6IHBhcmFtcy5lcnJvciB9IDoge30pLFxuICAgICAgICB9KTtcbiAgICAgIHJldHVybiB1cGRhdGVkO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gU29uYW11IGZpbmRNYW5564qUIHN1YnNldCDsoITssrQg7Lus65+8KHRleHQg7Y+s7ZWoKeydhCDtjpjsuZjtlbTshJwgYWdncmVnYXRl7JeUIOuEiOustCDrrLTqsbDsm4Ag4oaSIHJhdyBzdW0g7IKs7JqpLlxuICBhc3luYyB0b3RhbENvc3QocGFyYW1zOiB7IHRva2VuX25hbWU/OiBzdHJpbmcgfSA9IHt9KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCBxYiA9IHRoaXMuZ2V0REIoXCJyXCIpKFwicmVxdWVzdF9sb2dzXCIpO1xuICAgIGlmIChwYXJhbXMudG9rZW5fbmFtZSkge1xuICAgICAgcWIud2hlcmUoXCJ0b2tlbl9uYW1lXCIsIHBhcmFtcy50b2tlbl9uYW1lKTtcbiAgICB9XG4gICAgLy8ga25leOuKlCBwZ+yXkOyEnCBudW1lcmljIGFnZ3JlZ2F0ZeulvCBzdHJpbmfsnLzroZwg67CY7ZmYLlxuICAgIGNvbnN0IHJvdyA9IChhd2FpdCBxYi5zdW0oeyBzdW06IFwiY29zdF91c2RcIiB9KS5maXJzdCgpKSBhcyB7IHN1bTogc3RyaW5nIHwgbnVsbCB9IHwgdW5kZWZpbmVkO1xuICAgIHJldHVybiBOdW1iZXIocm93Py5zdW0gPz8gMCkgLyBNSUNST19VU0Q7XG4gIH1cblxuICBhc3luYyBkaXN0aW5jdFByb2plY3ROYW1lcygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgY29uc3Qgcm93cyA9IGF3YWl0IHRoaXMuZ2V0UHVyaShcInJcIilcbiAgICAgIC5mcm9tKFwicmVxdWVzdF9sb2dzXCIpXG4gICAgICAuZGlzdGluY3QoXCJwcm9qZWN0X25hbWVcIilcbiAgICAgIC53aGVyZShcInByb2plY3RfbmFtZVwiLCBcIiE9XCIsIG51bGwpXG4gICAgICAub3JkZXJCeShcInByb2plY3RfbmFtZVwiLCBcImFzY1wiKVxuICAgICAgLnNlbGVjdCh7XG4gICAgICAgIHByb2plY3RfbmFtZTogXCJwcm9qZWN0X25hbWVcIixcbiAgICAgIH0pO1xuICAgIHJldHVybiByb3dzLm1hcCgocikgPT4gci5wcm9qZWN0X25hbWUhKTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIlBPU1RcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1tdXRhdGlvblwiXSB9KVxuICBhc3luYyBkZWwoaWRzOiBudW1iZXJbXSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3Qgd2RiID0gdGhpcy5nZXRQdXJpKFwid1wiKTtcblxuICAgIC8vIHRyYW5zYWN0aW9uXG4gICAgYXdhaXQgd2RiLnRyYW5zYWN0aW9uKGFzeW5jICh0cngpID0+IHtcbiAgICAgIGF3YWl0IHRyeFxuICAgICAgICAudGFibGUoXCJyZXF1ZXN0X2xvZ19zdGVwc1wiKVxuICAgICAgICAud2hlcmVJbihcInJlcXVlc3RfbG9nX3N0ZXBzLnJlcXVlc3RfbG9nX2lkXCIsIGlkcylcbiAgICAgICAgLmRlbGV0ZSgpO1xuICAgICAgcmV0dXJuIHRyeC50YWJsZShcInJlcXVlc3RfbG9nc1wiKS53aGVyZUluKFwicmVxdWVzdF9sb2dzLmlkXCIsIGlkcykuZGVsZXRlKCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gaWRzLmxlbmd0aDtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgUmVxdWVzdExvZ01vZGVsID0gbmV3IFJlcXVlc3RMb2dNb2RlbENsYXNzKCk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBaUJBLE1BQWEsWUFBWTtBQUt6QixJQUFNLHVCQUFOLGNBQW1DLGVBS2pDO0NBQ0EsY0FBYztBQUNaLFFBQU0sY0FBYyx5QkFBeUIsd0JBQXdCOztDQUd2RSxNQUNNLFNBQ0osUUFDQSxJQUNxQztFQUNyQyxNQUFNLEVBQUUsU0FBUyxNQUFNLEtBQUssU0FBUyxRQUFRO0dBQzNDO0dBQ0EsS0FBSztHQUNMLE1B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
|
|
@@ -97,6 +97,11 @@ const ANTHROPIC_COSTS = {
|
|
|
97
97
|
inputTokens: 5,
|
|
98
98
|
outputTokens: 25,
|
|
99
99
|
cachedInputTokens: .5
|
|
100
|
+
},
|
|
101
|
+
"claude-opus-4-8": {
|
|
102
|
+
inputTokens: 5,
|
|
103
|
+
outputTokens: 25,
|
|
104
|
+
cachedInputTokens: .5
|
|
100
105
|
}
|
|
101
106
|
};
|
|
102
107
|
const DEFAULT_COSTS = {
|
|
@@ -114,4 +119,4 @@ function calculateCostUsd(model, usage) {
|
|
|
114
119
|
//#endregion
|
|
115
120
|
export { calculateCostUsd, getModelCosts };
|
|
116
121
|
|
|
117
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtY29zdC5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbHMvcHJvdmlkZXJzL2NvbW1vbi9tb2RlbC1jb3N0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICog66qo642467OEIO2GoO2BsCDqsIDqsqkg7YWM7J2067iUICsgY29zdCDqs4TsgrAuXG4gKlxuICogY2xhdWRlIGNvZGUg7JmAIOuPmeydvCDtjKjthLQ6IO2BtOudvOydtOyWuO2KuOyXkOyEnCDqsIDqsqkg7YWM7J2067iU66GcIOyngeygkSDqs4TsgrAuXG4gKiDqsIDqsqkg64uo7JyEOiBVU0QgcGVyIDFNIHRva2Vucy5cbiAqXG4gKiBPcGVuQUkg66qo6424IOuqqeuhnTogY29kZXggYXBwLXNlcnZlciBtb2RlbC9saXN0IFJQQyDroZwg7Iuk7LihICgyMDI2LTA1LTE4KVxuICpcbiAqIEBzZWUgaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvcHJpY2luZ1xuICogQHNlZSBodHRwczovL3BsYXRmb3JtLmNsYXVkZS5jb20vZG9jcy9lbi9hYm91dC1jbGF1ZGUvcHJpY2luZ1xuICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9kZWxDb3N0cyB7XG4gIGlucHV0VG9rZW5zOiBudW1iZXI7XG4gIG91dHB1dFRva2VuczogbnVtYmVyO1xuICBjYWNoZWRJbnB1dFRva2VuczogbnVtYmVyO1xufVxuXG4vLyDilIDilIAgT3BlbkFJIOKAlCBjb2RleCBhcHAtc2VydmVyIOyXkOyEnCDsgqzsmqkg6rCA64ql7ZWcIOuqqOuNuCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuY29uc3QgT1BFTkFJX0NPU1RTOiBSZWNvcmQ8c3RyaW5nLCBNb2RlbENvc3RzPiA9IHtcbiAgXCJncHQtNS41XCI6IHsgaW5wdXRUb2tlbnM6IDIsIG91dHB1dFRva2VuczogOCwgY2FjaGVkSW5wdXRUb2tlbnM6IDAuNSB9LFxuICBcImdwdC01LjRcIjogeyBpbnB1dFRva2VuczogMiwgb3V0cHV0VG9rZW5zOiA4LCBjYWNoZWRJbnB1dFRva2VuczogMC41IH0sXG4gIFwiZ3B0LTUuNC1taW5pXCI6IHsgaW5wdXRUb2tlbnM6IDAuNCwgb3V0cHV0VG9rZW5zOiAxLjYsIGNhY2hlZElucHV0VG9rZW5zOiAwLjEgfSxcbiAgXCJncHQtNS4zLWNvZGV4XCI6IHsgaW5wdXRUb2tlbnM6IDIsIG91dHB1dFRva2VuczogOCwgY2FjaGVkSW5wdXRUb2tlbnM6IDAuNSB9LFxuICBcImdwdC01LjJcIjogeyBpbnB1dFRva2VuczogMiwgb3V0cHV0VG9rZW5zOiA4LCBjYWNoZWRJbnB1dFRva2VuczogMC41IH0sXG59O1xuXG4vLyDilIDilIAgQW50aHJvcGljIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5jb25zdCBBTlRIUk9QSUNfQ09TVFM6IFJlY29yZDxzdHJpbmcsIE1vZGVsQ29zdHM+
|
|
122
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtY29zdC5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbHMvcHJvdmlkZXJzL2NvbW1vbi9tb2RlbC1jb3N0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICog66qo642467OEIO2GoO2BsCDqsIDqsqkg7YWM7J2067iUICsgY29zdCDqs4TsgrAuXG4gKlxuICogY2xhdWRlIGNvZGUg7JmAIOuPmeydvCDtjKjthLQ6IO2BtOudvOydtOyWuO2KuOyXkOyEnCDqsIDqsqkg7YWM7J2067iU66GcIOyngeygkSDqs4TsgrAuXG4gKiDqsIDqsqkg64uo7JyEOiBVU0QgcGVyIDFNIHRva2Vucy5cbiAqXG4gKiBPcGVuQUkg66qo6424IOuqqeuhnTogY29kZXggYXBwLXNlcnZlciBtb2RlbC9saXN0IFJQQyDroZwg7Iuk7LihICgyMDI2LTA1LTE4KVxuICpcbiAqIEBzZWUgaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvcHJpY2luZ1xuICogQHNlZSBodHRwczovL3BsYXRmb3JtLmNsYXVkZS5jb20vZG9jcy9lbi9hYm91dC1jbGF1ZGUvcHJpY2luZ1xuICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9kZWxDb3N0cyB7XG4gIGlucHV0VG9rZW5zOiBudW1iZXI7XG4gIG91dHB1dFRva2VuczogbnVtYmVyO1xuICBjYWNoZWRJbnB1dFRva2VuczogbnVtYmVyO1xufVxuXG4vLyDilIDilIAgT3BlbkFJIOKAlCBjb2RleCBhcHAtc2VydmVyIOyXkOyEnCDsgqzsmqkg6rCA64ql7ZWcIOuqqOuNuCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuY29uc3QgT1BFTkFJX0NPU1RTOiBSZWNvcmQ8c3RyaW5nLCBNb2RlbENvc3RzPiA9IHtcbiAgXCJncHQtNS41XCI6IHsgaW5wdXRUb2tlbnM6IDIsIG91dHB1dFRva2VuczogOCwgY2FjaGVkSW5wdXRUb2tlbnM6IDAuNSB9LFxuICBcImdwdC01LjRcIjogeyBpbnB1dFRva2VuczogMiwgb3V0cHV0VG9rZW5zOiA4LCBjYWNoZWRJbnB1dFRva2VuczogMC41IH0sXG4gIFwiZ3B0LTUuNC1taW5pXCI6IHsgaW5wdXRUb2tlbnM6IDAuNCwgb3V0cHV0VG9rZW5zOiAxLjYsIGNhY2hlZElucHV0VG9rZW5zOiAwLjEgfSxcbiAgXCJncHQtNS4zLWNvZGV4XCI6IHsgaW5wdXRUb2tlbnM6IDIsIG91dHB1dFRva2VuczogOCwgY2FjaGVkSW5wdXRUb2tlbnM6IDAuNSB9LFxuICBcImdwdC01LjJcIjogeyBpbnB1dFRva2VuczogMiwgb3V0cHV0VG9rZW5zOiA4LCBjYWNoZWRJbnB1dFRva2VuczogMC41IH0sXG59O1xuXG4vLyDilIDilIAgQW50aHJvcGljIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5jb25zdCBBTlRIUk9QSUNfQ09TVFM6IFJlY29yZDxzdHJpbmcsIE1vZGVsQ29zdHM+ID0ge1xuICBzb25uZXQ6IHsgaW5wdXRUb2tlbnM6IDMsIG91dHB1dFRva2VuczogMTUsIGNhY2hlZElucHV0VG9rZW5zOiAwLjMgfSxcbiAgXCJjbGF1ZGUtMy01LWhhaWt1XCI6IHsgaW5wdXRUb2tlbnM6IDAuOCwgb3V0cHV0VG9rZW5zOiA0LCBjYWNoZWRJbnB1dFRva2VuczogMC4wOCB9LFxuICBcImNsYXVkZS1oYWlrdS00LTVcIjogeyBpbnB1dFRva2VuczogMSwgb3V0cHV0VG9rZW5zOiA1LCBjYWNoZWRJbnB1dFRva2VuczogMC4xIH0sXG4gIFwiY2xhdWRlLTMtNS1zb25uZXRcIjogeyBpbnB1dFRva2VuczogMywgb3V0cHV0VG9rZW5zOiAxNSwgY2FjaGVkSW5wdXRUb2tlbnM6IDAuMyB9LFxuICBcImNsYXVkZS0zLTctc29ubmV0XCI6IHsgaW5wdXRUb2tlbnM6IDMsIG91dHB1dFRva2VuczogMTUsIGNhY2hlZElucHV0VG9rZW5zOiAwLjMgfSxcbiAgXCJjbGF1ZGUtc29ubmV0LTRcIjogeyBpbnB1dFRva2VuczogMywgb3V0cHV0VG9rZW5zOiAxNSwgY2FjaGVkSW5wdXRUb2tlbnM6IDAuMyB9LFxuICBcImNsYXVkZS1zb25uZXQtNC01XCI6IHsgaW5wdXRUb2tlbnM6IDMsIG91dHB1dFRva2VuczogMTUsIGNhY2hlZElucHV0VG9rZW5zOiAwLjMgfSxcbiAgXCJjbGF1ZGUtc29ubmV0LTQtNlwiOiB7IGlucHV0VG9rZW5zOiAzLCBvdXRwdXRUb2tlbnM6IDE1LCBjYWNoZWRJbnB1dFRva2VuczogMC4zIH0sXG4gIFwiY2xhdWRlLXNvbm5ldC00LTdcIjogeyBpbnB1dFRva2VuczogMywgb3V0cHV0VG9rZW5zOiAxNSwgY2FjaGVkSW5wdXRUb2tlbnM6IDAuMyB9LFxuICBcImNsYXVkZS1vcHVzLTRcIjogeyBpbnB1dFRva2VuczogMTUsIG91dHB1dFRva2VuczogNzUsIGNhY2hlZElucHV0VG9rZW5zOiAxLjUgfSxcbiAgXCJjbGF1ZGUtb3B1cy00LTFcIjogeyBpbnB1dFRva2VuczogMTUsIG91dHB1dFRva2VuczogNzUsIGNhY2hlZElucHV0VG9rZW5zOiAxLjUgfSxcbiAgXCJjbGF1ZGUtb3B1cy00LTVcIjogeyBpbnB1dFRva2VuczogNSwgb3V0cHV0VG9rZW5zOiAyNSwgY2FjaGVkSW5wdXRUb2tlbnM6IDAuNSB9LFxuICBcImNsYXVkZS1vcHVzLTQtNlwiOiB7IGlucHV0VG9rZW5zOiA1LCBvdXRwdXRUb2tlbnM6IDI1LCBjYWNoZWRJbnB1dFRva2VuczogMC41IH0sXG4gIFwiY2xhdWRlLW9wdXMtNC03XCI6IHsgaW5wdXRUb2tlbnM6IDUsIG91dHB1dFRva2VuczogMjUsIGNhY2hlZElucHV0VG9rZW5zOiAwLjUgfSxcbiAgXCJjbGF1ZGUtb3B1cy00LThcIjogeyBpbnB1dFRva2VuczogNSwgb3V0cHV0VG9rZW5zOiAyNSwgY2FjaGVkSW5wdXRUb2tlbnM6IDAuNSB9LFxufTtcblxuY29uc3QgREVGQVVMVF9DT1NUUzogTW9kZWxDb3N0cyA9IHsgaW5wdXRUb2tlbnM6IDMsIG91dHB1dFRva2VuczogMTUsIGNhY2hlZElucHV0VG9rZW5zOiAwLjMgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1vZGVsQ29zdHMobW9kZWw6IHN0cmluZyk6IE1vZGVsQ29zdHMge1xuICByZXR1cm4gT1BFTkFJX0NPU1RTW21vZGVsXSA/PyBBTlRIUk9QSUNfQ09TVFNbbW9kZWxdID8/IERFRkFVTFRfQ09TVFM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVDb3N0VXNkKFxuICBtb2RlbDogc3RyaW5nLFxuICB1c2FnZTogeyBpbnB1dFRva2VuczogbnVtYmVyOyBvdXRwdXRUb2tlbnM6IG51bWJlcjsgY2FjaGVkSW5wdXRUb2tlbnM/OiBudW1iZXIgfSxcbik6IG51bWJlciB7XG4gIGNvbnN0IGNvc3RzID0gZ2V0TW9kZWxDb3N0cyhtb2RlbCk7XG4gIGNvbnN0IG5vbkNhY2hlZElucHV0ID0gdXNhZ2UuaW5wdXRUb2tlbnMgLSAodXNhZ2UuY2FjaGVkSW5wdXRUb2tlbnMgPz8gMCk7XG4gIHJldHVybiAoXG4gICAgKG5vbkNhY2hlZElucHV0IC8gMV8wMDBfMDAwKSAqIGNvc3RzLmlucHV0VG9rZW5zICtcbiAgICAodXNhZ2Uub3V0cHV0VG9rZW5zIC8gMV8wMDBfMDAwKSAqIGNvc3RzLm91dHB1dFRva2VucyArXG4gICAgKCh1c2FnZS5jYWNoZWRJbnB1dFRva2VucyA/PyAwKSAvIDFfMDAwXzAwMCkgKiBjb3N0cy5jYWNoZWRJbnB1dFRva2Vuc1xuICApO1xufVxuIl0sIm1hcHBpbmdzIjoiOztBQW9CQSxNQUFNLGVBQTJDO0NBQy9DLFdBQVc7RUFBRSxhQUFhO0VBQUcsY0FBYztFQUFHLG1CQUFtQjtFQUFLO0NBQ3RFLFdBQVc7RUFBRSxhQUFhO0VBQUcsY0FBYztFQUFHLG1CQUFtQjtFQUFLO0NBQ3RFLGdCQUFnQjtFQUFFLGFBQWE7RUFBSyxjQUFjO0VBQUssbUJBQW1CO0VBQUs7Q0FDL0UsaUJBQWlCO0VBQUUsYUFBYTtFQUFHLGNBQWM7RUFBRyxtQkFBbUI7RUFBSztDQUM1RSxXQUFXO0VBQUUsYUFBYTtFQUFHLGNBQWM7RUFBRyxtQkFBbUI7RUFBSztDQUN2RTtBQUlELE1BQU0sa0JBQThDO0NBQ2xELFFBQVE7RUFBRSxhQUFhO0VBQUcsY0FBYztFQUFJLG1CQUFtQjtFQUFLO0NBQ3BFLG9CQUFvQjtFQUFFLGFBQWE7RUFBSyxjQUFjO0VBQUcsbUJBQW1CO0VBQU07Q0FDbEYsb0JBQW9CO0VBQUUsYUFBYTtFQUFHLGNBQWM7RUFBRyxtQkFBbUI7RUFBSztDQUMvRSxxQkFBcUI7RUFBRSxhQUFhO0VBQUcsY0FBYztFQUFJLG1CQUFtQjtFQUFLO0NBQ2pGLHFCQUFxQjtFQUFFLGFBQWE7RUFBRyxjQUFjO0VBQUksbUJBQW1CO0VBQUs7Q0FDakYsbUJBQW1CO0VBQUUsYUFBYTtFQUFHLGNBQWM7RUFBSSxtQkFBbUI7RUFBSztDQUMvRSxxQkFBcUI7RUFBRSxhQUFhO0VBQUcsY0FBYztFQUFJLG1CQUFtQjtFQUFLO0NBQ2pGLHFCQUFxQjtFQUFFLGFBQWE7RUFBRyxjQUFjO0VBQUksbUJBQW1CO0VBQUs7Q0FDakYscUJBQXFCO0VBQUUsYUFBYTtFQUFHLGNBQWM7RUFBSSxtQkFBbUI7RUFBSztDQUNqRixpQkFBaUI7RUFBRSxhQUFhO0VBQUksY0FBYztFQUFJLG1CQUFtQjtFQUFLO0NBQzlFLG1CQUFtQjtFQUFFLGFBQWE7RUFBSSxjQUFjO0VBQUksbUJBQW1CO0VBQUs7Q0FDaEYsbUJBQW1CO0VBQUUsYUFBYTtFQUFHLGNBQWM7RUFBSSxtQkFBbUI7RUFBSztDQUMvRSxtQkFBbUI7RUFBRSxhQUFhO0VBQUcsY0FBYztFQUFJLG1CQUFtQjtFQUFLO0NBQy9FLG1CQUFtQjtFQUFFLGFBQWE7RUFBRyxjQUFjO0VBQUksbUJBQW1CO0VBQUs7Q0FDL0UsbUJBQW1CO0VBQUUsYUFBYTtFQUFHLGNBQWM7RUFBSSxtQkFBbUI7RUFBSztDQUNoRjtBQUVELE1BQU0sZ0JBQTRCO0NBQUUsYUFBYTtDQUFHLGNBQWM7Q0FBSSxtQkFBbUI7Q0FBSztBQUU5RixTQUFnQixjQUFjLE9BQTJCO0FBQ3ZELFFBQU8sYUFBYSxVQUFVLGdCQUFnQixVQUFVOztBQUcxRCxTQUFnQixpQkFDZCxPQUNBLE9BQ1E7Q0FDUixNQUFNLFFBQVEsY0FBYyxNQUFNO0FBRWxDLFNBRHVCLE1BQU0sZUFBZSxNQUFNLHFCQUFxQixNQUVuRCxNQUFhLE1BQU0sY0FDcEMsTUFBTSxlQUFlLE1BQWEsTUFBTSxnQkFDdkMsTUFBTSxxQkFBcUIsS0FBSyxNQUFhLE1BQU0ifQ==
|