@sendly/cli 3.38.0 → 3.39.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +92 -2
- package/dist/commands/rcs/agents/create.d.ts +44 -0
- package/dist/commands/rcs/agents/create.js +71 -0
- package/dist/commands/rcs/agents/devices/set.d.ts +16 -0
- package/dist/commands/rcs/agents/devices/set.js +77 -0
- package/dist/commands/rcs/agents/get.d.ts +13 -0
- package/dist/commands/rcs/agents/get.js +51 -0
- package/dist/commands/rcs/agents/request-launch.d.ts +16 -0
- package/dist/commands/rcs/agents/request-launch.js +71 -0
- package/dist/commands/rcs/agents/submit.d.ts +14 -0
- package/dist/commands/rcs/agents/submit.js +56 -0
- package/dist/commands/rcs/agents/update.d.ts +48 -0
- package/dist/commands/rcs/agents/update.js +81 -0
- package/dist/commands/rcs/agents.js +10 -2
- package/dist/commands/rcs/brands/create.d.ts +30 -0
- package/dist/commands/rcs/brands/create.js +55 -0
- package/dist/commands/rcs/brands/update.d.ts +33 -0
- package/dist/commands/rcs/brands/update.js +62 -0
- package/dist/commands/rcs/dossier.d.ts +10 -0
- package/dist/commands/rcs/dossier.js +73 -0
- package/dist/commands/rcs/registration.d.ts +10 -0
- package/dist/commands/rcs/registration.js +59 -0
- package/dist/lib/api-client.d.ts +11 -2
- package/dist/lib/api-client.js +19 -9
- package/dist/lib/base-command.js +5 -2
- package/dist/lib/rcs-registration.d.ts +231 -0
- package/dist/lib/rcs-registration.js +734 -0
- package/oclif.manifest.json +3242 -1960
- package/package.json +11 -2
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { AuthenticatedCommand } from "../../lib/base-command.js";
|
|
2
|
+
import { apiClient } from "../../lib/api-client.js";
|
|
3
|
+
import { json, info, warn, colors, spinner, isJsonMode, } from "../../lib/output.js";
|
|
4
|
+
import { formatStage, nextStepFor, printAgent, printBrand, printDevices, printNextSteps, reportRcsError, } from "../../lib/rcs-registration.js";
|
|
5
|
+
export default class RcsRegistration extends AuthenticatedCommand {
|
|
6
|
+
static description = "Show where your RCS registration stands — brand, agent, test devices, and what to do next";
|
|
7
|
+
static examples = [
|
|
8
|
+
"<%= config.bin %> rcs registration",
|
|
9
|
+
"<%= config.bin %> rcs registration --json",
|
|
10
|
+
];
|
|
11
|
+
static flags = {
|
|
12
|
+
...AuthenticatedCommand.baseFlags,
|
|
13
|
+
};
|
|
14
|
+
async run() {
|
|
15
|
+
await this.parse(RcsRegistration);
|
|
16
|
+
const loadSpinner = spinner("Fetching RCS registration...");
|
|
17
|
+
if (!isJsonMode()) {
|
|
18
|
+
loadSpinner.start();
|
|
19
|
+
}
|
|
20
|
+
let response;
|
|
21
|
+
try {
|
|
22
|
+
response = await apiClient.get("/api/v1/rcs/registration");
|
|
23
|
+
loadSpinner.stop();
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
loadSpinner.stop();
|
|
27
|
+
if (reportRcsError(err))
|
|
28
|
+
this.exit(1);
|
|
29
|
+
throw err;
|
|
30
|
+
}
|
|
31
|
+
if (isJsonMode()) {
|
|
32
|
+
json(response);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
const { brand, agent, devices, stage, usEligible } = response;
|
|
36
|
+
console.log();
|
|
37
|
+
console.log(`${colors.bold("RCS registration")} ${formatStage(stage)}`);
|
|
38
|
+
console.log();
|
|
39
|
+
if (!usEligible) {
|
|
40
|
+
warn("The business details on file name a non-US country. RCS registration is available to US businesses for now.");
|
|
41
|
+
console.log();
|
|
42
|
+
}
|
|
43
|
+
if (!brand && !agent) {
|
|
44
|
+
info("No RCS registration yet.");
|
|
45
|
+
printNextSteps(nextStepFor("draft", {}));
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
if (brand) {
|
|
49
|
+
printBrand(brand);
|
|
50
|
+
console.log();
|
|
51
|
+
}
|
|
52
|
+
if (agent) {
|
|
53
|
+
printAgent(agent);
|
|
54
|
+
printDevices(devices ?? []);
|
|
55
|
+
}
|
|
56
|
+
printNextSteps(nextStepFor(stage, { brandId: brand?.id, agentId: agent?.id }));
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0cmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL3Jjcy9yZWdpc3RyYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDakUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFDTCxJQUFJLEVBQ0osSUFBSSxFQUNKLElBQUksRUFDSixNQUFNLEVBQ04sT0FBTyxFQUNQLFVBQVUsR0FDWCxNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFDTCxXQUFXLEVBQ1gsV0FBVyxFQUNYLFVBQVUsRUFDVixVQUFVLEVBQ1YsWUFBWSxFQUNaLGNBQWMsRUFDZCxjQUFjLEdBRWYsTUFBTSwrQkFBK0IsQ0FBQztBQUV2QyxNQUFNLENBQUMsT0FBTyxPQUFPLGVBQWdCLFNBQVEsb0JBQW9CO0lBQy9ELE1BQU0sQ0FBQyxXQUFXLEdBQ2hCLDJGQUEyRixDQUFDO0lBRTlGLE1BQU0sQ0FBQyxRQUFRLEdBQUc7UUFDaEIsb0NBQW9DO1FBQ3BDLDJDQUEyQztLQUM1QyxDQUFDO0lBRUYsTUFBTSxDQUFDLEtBQUssR0FBRztRQUNiLEdBQUcsb0JBQW9CLENBQUMsU0FBUztLQUNsQyxDQUFDO0lBRUYsS0FBSyxDQUFDLEdBQUc7UUFDUCxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFbEMsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7WUFDbEIsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3RCLENBQUM7UUFFRCxJQUFJLFFBQThCLENBQUM7UUFDbkMsSUFBSSxDQUFDO1lBQ0gsUUFBUSxHQUFHLE1BQU0sU0FBUyxDQUFDLEdBQUcsQ0FDNUIsMEJBQTBCLENBQzNCLENBQUM7WUFDRixXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbkIsSUFBSSxjQUFjLENBQUMsR0FBRyxDQUFDO2dCQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsTUFBTSxHQUFHLENBQUM7UUFDWixDQUFDO1FBRUQsSUFBSSxVQUFVLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNmLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsR0FBRyxRQUFRLENBQUM7UUFFOUQsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pFLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUVkLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQ0YsNkdBQTZHLENBQzlHLENBQUM7WUFDRixPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDaEIsQ0FBQztRQUVELElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQztZQUNqQyxjQUFjLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNsQixPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDaEIsQ0FBQztRQUVELElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbEIsWUFBWSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM5QixDQUFDO1FBRUQsY0FBYyxDQUNaLFdBQVcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQy9ELENBQUM7SUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXV0aGVudGljYXRlZENvbW1hbmQgfSBmcm9tIFwiLi4vLi4vbGliL2Jhc2UtY29tbWFuZC5qc1wiO1xuaW1wb3J0IHsgYXBpQ2xpZW50IH0gZnJvbSBcIi4uLy4uL2xpYi9hcGktY2xpZW50LmpzXCI7XG5pbXBvcnQge1xuICBqc29uLFxuICBpbmZvLFxuICB3YXJuLFxuICBjb2xvcnMsXG4gIHNwaW5uZXIsXG4gIGlzSnNvbk1vZGUsXG59IGZyb20gXCIuLi8uLi9saWIvb3V0cHV0LmpzXCI7XG5pbXBvcnQge1xuICBmb3JtYXRTdGFnZSxcbiAgbmV4dFN0ZXBGb3IsXG4gIHByaW50QWdlbnQsXG4gIHByaW50QnJhbmQsXG4gIHByaW50RGV2aWNlcyxcbiAgcHJpbnROZXh0U3RlcHMsXG4gIHJlcG9ydFJjc0Vycm9yLFxuICB0eXBlIFJlZ2lzdHJhdGlvblJlc3BvbnNlLFxufSBmcm9tIFwiLi4vLi4vbGliL3Jjcy1yZWdpc3RyYXRpb24uanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmNzUmVnaXN0cmF0aW9uIGV4dGVuZHMgQXV0aGVudGljYXRlZENvbW1hbmQge1xuICBzdGF0aWMgZGVzY3JpcHRpb24gPVxuICAgIFwiU2hvdyB3aGVyZSB5b3VyIFJDUyByZWdpc3RyYXRpb24gc3RhbmRzIOKAlCBicmFuZCwgYWdlbnQsIHRlc3QgZGV2aWNlcywgYW5kIHdoYXQgdG8gZG8gbmV4dFwiO1xuXG4gIHN0YXRpYyBleGFtcGxlcyA9IFtcbiAgICBcIjwlPSBjb25maWcuYmluICU+IHJjcyByZWdpc3RyYXRpb25cIixcbiAgICBcIjwlPSBjb25maWcuYmluICU+IHJjcyByZWdpc3RyYXRpb24gLS1qc29uXCIsXG4gIF07XG5cbiAgc3RhdGljIGZsYWdzID0ge1xuICAgIC4uLkF1dGhlbnRpY2F0ZWRDb21tYW5kLmJhc2VGbGFncyxcbiAgfTtcblxuICBhc3luYyBydW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5wYXJzZShSY3NSZWdpc3RyYXRpb24pO1xuXG4gICAgY29uc3QgbG9hZFNwaW5uZXIgPSBzcGlubmVyKFwiRmV0Y2hpbmcgUkNTIHJlZ2lzdHJhdGlvbi4uLlwiKTtcbiAgICBpZiAoIWlzSnNvbk1vZGUoKSkge1xuICAgICAgbG9hZFNwaW5uZXIuc3RhcnQoKTtcbiAgICB9XG5cbiAgICBsZXQgcmVzcG9uc2U6IFJlZ2lzdHJhdGlvblJlc3BvbnNlO1xuICAgIHRyeSB7XG4gICAgICByZXNwb25zZSA9IGF3YWl0IGFwaUNsaWVudC5nZXQ8UmVnaXN0cmF0aW9uUmVzcG9uc2U+KFxuICAgICAgICBcIi9hcGkvdjEvcmNzL3JlZ2lzdHJhdGlvblwiLFxuICAgICAgKTtcbiAgICAgIGxvYWRTcGlubmVyLnN0b3AoKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvYWRTcGlubmVyLnN0b3AoKTtcbiAgICAgIGlmIChyZXBvcnRSY3NFcnJvcihlcnIpKSB0aGlzLmV4aXQoMSk7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuXG4gICAgaWYgKGlzSnNvbk1vZGUoKSkge1xuICAgICAganNvbihyZXNwb25zZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeyBicmFuZCwgYWdlbnQsIGRldmljZXMsIHN0YWdlLCB1c0VsaWdpYmxlIH0gPSByZXNwb25zZTtcblxuICAgIGNvbnNvbGUubG9nKCk7XG4gICAgY29uc29sZS5sb2coYCR7Y29sb3JzLmJvbGQoXCJSQ1MgcmVnaXN0cmF0aW9uXCIpfSAgJHtmb3JtYXRTdGFnZShzdGFnZSl9YCk7XG4gICAgY29uc29sZS5sb2coKTtcblxuICAgIGlmICghdXNFbGlnaWJsZSkge1xuICAgICAgd2FybihcbiAgICAgICAgXCJUaGUgYnVzaW5lc3MgZGV0YWlscyBvbiBmaWxlIG5hbWUgYSBub24tVVMgY291bnRyeS4gUkNTIHJlZ2lzdHJhdGlvbiBpcyBhdmFpbGFibGUgdG8gVVMgYnVzaW5lc3NlcyBmb3Igbm93LlwiLFxuICAgICAgKTtcbiAgICAgIGNvbnNvbGUubG9nKCk7XG4gICAgfVxuXG4gICAgaWYgKCFicmFuZCAmJiAhYWdlbnQpIHtcbiAgICAgIGluZm8oXCJObyBSQ1MgcmVnaXN0cmF0aW9uIHlldC5cIik7XG4gICAgICBwcmludE5leHRTdGVwcyhuZXh0U3RlcEZvcihcImRyYWZ0XCIsIHt9KSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGJyYW5kKSB7XG4gICAgICBwcmludEJyYW5kKGJyYW5kKTtcbiAgICAgIGNvbnNvbGUubG9nKCk7XG4gICAgfVxuXG4gICAgaWYgKGFnZW50KSB7XG4gICAgICBwcmludEFnZW50KGFnZW50KTtcbiAgICAgIHByaW50RGV2aWNlcyhkZXZpY2VzID8/IFtdKTtcbiAgICB9XG5cbiAgICBwcmludE5leHRTdGVwcyhcbiAgICAgIG5leHRTdGVwRm9yKHN0YWdlLCB7IGJyYW5kSWQ6IGJyYW5kPy5pZCwgYWdlbnRJZDogYWdlbnQ/LmlkIH0pLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
|
package/dist/lib/api-client.d.ts
CHANGED
|
@@ -15,11 +15,16 @@ export interface RateLimitInfo {
|
|
|
15
15
|
remaining: number;
|
|
16
16
|
reset: number;
|
|
17
17
|
}
|
|
18
|
+
export interface ApiFieldError {
|
|
19
|
+
path: string;
|
|
20
|
+
message: string;
|
|
21
|
+
}
|
|
18
22
|
export declare class ApiError extends Error {
|
|
19
23
|
code: string;
|
|
20
24
|
statusCode: number;
|
|
21
25
|
details?: Record<string, unknown> | undefined;
|
|
22
26
|
hint?: string;
|
|
27
|
+
fieldErrors?: ApiFieldError[];
|
|
23
28
|
constructor(code: string, message: string, statusCode: number, details?: Record<string, unknown> | undefined, hint?: string);
|
|
24
29
|
}
|
|
25
30
|
export declare class AuthenticationError extends ApiError {
|
|
@@ -67,8 +72,12 @@ declare class ApiClient {
|
|
|
67
72
|
idempotencyKey?: string;
|
|
68
73
|
autoIdempotencyKey?: boolean;
|
|
69
74
|
}): Promise<T>;
|
|
70
|
-
patch<T>(path: string, body?: Record<string, unknown>, requireAuth?: boolean
|
|
71
|
-
|
|
75
|
+
patch<T>(path: string, body?: Record<string, unknown>, requireAuth?: boolean, options?: {
|
|
76
|
+
idempotencyKey?: string;
|
|
77
|
+
}): Promise<T>;
|
|
78
|
+
put<T>(path: string, body?: Record<string, unknown>, requireAuth?: boolean, options?: {
|
|
79
|
+
idempotencyKey?: string;
|
|
80
|
+
}): Promise<T>;
|
|
72
81
|
delete<T>(path: string, requireAuth?: boolean): Promise<T>;
|
|
73
82
|
/**
|
|
74
83
|
* Upload a file using multipart/form-data
|
package/dist/lib/api-client.js
CHANGED
|
@@ -64,6 +64,7 @@ export class ApiError extends Error {
|
|
|
64
64
|
statusCode;
|
|
65
65
|
details;
|
|
66
66
|
hint;
|
|
67
|
+
fieldErrors;
|
|
67
68
|
constructor(code, message, statusCode, details, hint) {
|
|
68
69
|
super(message);
|
|
69
70
|
this.code = code;
|
|
@@ -279,6 +280,9 @@ class ApiClient {
|
|
|
279
280
|
const error = data?.error || "unknown_error";
|
|
280
281
|
const message = data?.message || `HTTP ${statusCode}`;
|
|
281
282
|
const details = data?.details;
|
|
283
|
+
const fieldErrors = Array.isArray(data?.errors)
|
|
284
|
+
? data.errors
|
|
285
|
+
: undefined;
|
|
282
286
|
switch (statusCode) {
|
|
283
287
|
case 401:
|
|
284
288
|
case 403:
|
|
@@ -289,8 +293,11 @@ class ApiClient {
|
|
|
289
293
|
throw new ApiKeyRequiredError("API key required for sending messages", "Set SENDLY_API_KEY environment variable or create a key with:\n sendly keys create --type test");
|
|
290
294
|
}
|
|
291
295
|
throw new AuthenticationError(message);
|
|
292
|
-
case 400:
|
|
293
|
-
|
|
296
|
+
case 400: {
|
|
297
|
+
const validation = new ValidationError(message, details);
|
|
298
|
+
validation.fieldErrors = fieldErrors;
|
|
299
|
+
throw validation;
|
|
300
|
+
}
|
|
294
301
|
case 402:
|
|
295
302
|
// A bare 402 can mean either "out of credits" or "no card on file" —
|
|
296
303
|
// they need opposite remedies, so branch on the server error code
|
|
@@ -305,11 +312,14 @@ class ApiClient {
|
|
|
305
312
|
case 429:
|
|
306
313
|
const retryAfter = data?.retryAfter || 60;
|
|
307
314
|
throw new RateLimitError(retryAfter, message);
|
|
308
|
-
default:
|
|
315
|
+
default: {
|
|
309
316
|
const defaultHint = statusCode >= 500
|
|
310
317
|
? "This is a server error. Try again later or check https://status.sendly.live"
|
|
311
318
|
: undefined;
|
|
312
|
-
|
|
319
|
+
const apiError = new ApiError(error, message, statusCode, details, defaultHint);
|
|
320
|
+
apiError.fieldErrors = fieldErrors;
|
|
321
|
+
throw apiError;
|
|
322
|
+
}
|
|
313
323
|
}
|
|
314
324
|
}
|
|
315
325
|
getRateLimitInfo() {
|
|
@@ -322,11 +332,11 @@ class ApiClient {
|
|
|
322
332
|
async post(path, body, requireAuth = true, options = {}) {
|
|
323
333
|
return this.request("POST", path, { body, requireAuth, ...options });
|
|
324
334
|
}
|
|
325
|
-
async patch(path, body, requireAuth = true) {
|
|
326
|
-
return this.request("PATCH", path, { body, requireAuth });
|
|
335
|
+
async patch(path, body, requireAuth = true, options = {}) {
|
|
336
|
+
return this.request("PATCH", path, { body, requireAuth, ...options });
|
|
327
337
|
}
|
|
328
|
-
async put(path, body, requireAuth = true) {
|
|
329
|
-
return this.request("PUT", path, { body, requireAuth });
|
|
338
|
+
async put(path, body, requireAuth = true, options = {}) {
|
|
339
|
+
return this.request("PUT", path, { body, requireAuth, ...options });
|
|
330
340
|
}
|
|
331
341
|
async delete(path, requireAuth = true) {
|
|
332
342
|
return this.request("DELETE", path, { requireAuth });
|
|
@@ -406,4 +416,4 @@ class ApiClient {
|
|
|
406
416
|
}
|
|
407
417
|
}
|
|
408
418
|
export const apiClient = new ApiClient();
|
|
409
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvYXBpLWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDekMsT0FBTyxFQUNMLFlBQVksRUFDWixvQkFBb0IsRUFDcEIsaUJBQWlCLEVBQ2pCLGNBQWMsRUFDZCxhQUFhLEdBQ2QsTUFBTSxhQUFhLENBQUM7QUFFckIsaUNBQWlDO0FBQ2pDLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9DLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxPQUFPLENBQUMsb0JBQW9CLENBQXdCLENBQUM7QUFFekU7O0dBRUc7QUFDSCxTQUFTLEtBQUssQ0FBQyxFQUFVO0lBQ3ZCLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzRCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsc0JBQXNCO0lBQzdCLE9BQU8sb0JBQW9CLFVBQVUsRUFBRSxFQUFFLENBQUM7QUFDNUMsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLHVCQUF1QixDQUFDLEdBQXVCO0lBQ3RELElBQUksR0FBRyxLQUFLLFNBQVM7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUN4QyxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDM0IsSUFBSSxDQUFDLE9BQU87UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUMvQixJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDNUQsTUFBTSxJQUFJLGVBQWUsQ0FDdkIsMERBQTBELENBQzNELENBQUM7SUFDSixDQUFDO0lBQ0QsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMscUJBQXFCLENBQUMsS0FBYztJQUMzQyxPQUFPLEtBQUssWUFBWSxRQUFRLElBQUksS0FBSyxDQUFDLFVBQVUsSUFBSSxHQUFHLENBQUM7QUFDOUQsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxLQUFjO0lBQ3RDLGlCQUFpQjtJQUNqQixJQUFJLEtBQUssWUFBWSxTQUFTLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNsRSxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRCxvQ0FBb0M7SUFDcEMsSUFBSSxLQUFLLFlBQVksUUFBUSxJQUFJLEtBQUssQ0FBQyxVQUFVLElBQUksR0FBRyxFQUFFLENBQUM7UUFDekQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBaUJELE1BQU0sT0FBTyxRQUFTLFNBQVEsS0FBSztJQUl4QjtJQUVBO0lBQ0E7SUFORixJQUFJLENBQVU7SUFFckIsWUFDUyxJQUFZLEVBQ25CLE9BQWUsRUFDUixVQUFrQixFQUNsQixPQUFpQyxFQUN4QyxJQUFhO1FBRWIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBTlIsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUVaLGVBQVUsR0FBVixVQUFVLENBQVE7UUFDbEIsWUFBTyxHQUFQLE9BQU8sQ0FBMEI7UUFJeEMsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUM7UUFDdkIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDbkIsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLG1CQUFvQixTQUFRLFFBQVE7SUFDL0MsWUFDRSxVQUFrQix1QkFBdUIsRUFDekMsT0FBZSxxRkFBcUY7UUFFcEcsS0FBSyxDQUFDLHNCQUFzQixFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxJQUFJLEdBQUcscUJBQXFCLENBQUM7SUFDcEMsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLG1CQUFvQixTQUFRLFFBQVE7SUFHdEM7SUFGVCxZQUNFLFVBQWtCLHNDQUFzQyxFQUNqRCxPQUFlLDhGQUE4RjtRQUVwSCxLQUFLLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRmpDLFNBQUksR0FBSixJQUFJLENBQXlHO1FBR3BILElBQUksQ0FBQyxJQUFJLEdBQUcscUJBQXFCLENBQUM7SUFDcEMsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLGNBQWUsU0FBUSxRQUFRO0lBRWpDO0lBRFQsWUFDUyxVQUFrQixFQUN6QixVQUFrQixxQkFBcUI7UUFFdkMsTUFBTSxJQUFJLEdBQUcsUUFBUSxVQUFVLGtFQUFrRSxDQUFDO1FBQ2xHLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUpyRCxlQUFVLEdBQVYsVUFBVSxDQUFRO1FBS3pCLElBQUksQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUM7SUFDL0IsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLHdCQUF5QixTQUFRLFFBQVE7SUFDcEQsWUFBWSxVQUFrQixzQkFBc0I7UUFDbEQsTUFBTSxJQUFJLEdBQ1IsbUdBQW1HLENBQUM7UUFDdEcsS0FBSyxDQUFDLHNCQUFzQixFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxJQUFJLEdBQUcsMEJBQTBCLENBQUM7SUFDekMsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLDBCQUEyQixTQUFRLFFBQVE7SUFDdEQsWUFBWSxVQUFrQiw4QkFBOEI7UUFDMUQsTUFBTSxJQUFJLEdBQ1IscUVBQXFFLENBQUM7UUFDeEUsS0FBSyxDQUFDLHlCQUF5QixFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxJQUFJLEdBQUcsNEJBQTRCLENBQUM7SUFDM0MsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLGFBQWMsU0FBUSxRQUFRO0lBQ3pDLFlBQ0UsVUFBa0Isb0JBQW9CLEVBQ3RDLE9BQWUsNEVBQTRFO1FBRTNGLEtBQUssQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLElBQUksR0FBRyxlQUFlLENBQUM7SUFDOUIsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLGVBQWdCLFNBQVEsUUFBUTtJQUMzQyxZQUNFLFVBQWtCLG1CQUFtQixFQUNyQyxPQUFpQztRQUVqQyxNQUFNLElBQUksR0FDUixrRUFBa0UsQ0FBQztRQUNyRSxLQUFLLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLElBQUksR0FBRyxpQkFBaUIsQ0FBQztJQUNoQyxDQUFDO0NBQ0Y7QUFFRCxNQUFNLFNBQVM7SUFDTCxhQUFhLENBQWlCO0lBQzlCLFVBQVUsR0FBNEIsSUFBSSxDQUFDO0lBRTNDLFVBQVU7UUFDaEIsT0FBTyxjQUFjLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU8sS0FBSyxDQUFDLFVBQVU7UUFDdEIsSUFBSSxLQUFLLEdBQUcsWUFBWSxFQUFFLENBQUM7UUFDM0IsSUFBSSxLQUFLO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFeEIsTUFBTSxNQUFNLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQztRQUN0QyxJQUFJLE1BQU0sRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUMvQixNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUM3QyxJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUNkLEtBQUssR0FBRyxZQUFZLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxLQUFLO29CQUFFLE9BQU8sS0FBSyxDQUFDO1lBQzFCLENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxJQUFJLG1CQUFtQixFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVPLEtBQUssQ0FBQyxVQUFVLENBQ3RCLGNBQXVCLElBQUk7UUFFM0IsTUFBTSxPQUFPLEdBQTJCO1lBQ3RDLGNBQWMsRUFBRSxrQkFBa0I7WUFDbEMsTUFBTSxFQUFFLGtCQUFrQjtZQUMxQixZQUFZLEVBQUUsZUFBZSxPQUFPLEVBQUU7U0FDdkMsQ0FBQztRQUVGLElBQUksV0FBVyxFQUFFLENBQUM7WUFDaEIsT0FBTyxDQUFDLGVBQWUsQ0FBQyxHQUFHLFVBQVUsTUFBTSxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztRQUNqRSxDQUFDO1FBRUQsTUFBTSxLQUFLLEdBQUcsaUJBQWlCLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDaEQsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUN2QyxDQUFDO1FBRUQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVPLEtBQUssQ0FBQyxhQUFhO1FBQ3pCLElBQUksSUFBSSxDQUFDLFVBQVU7WUFBRSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7UUFFNUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQzVCLE1BQU0sTUFBTSxHQUFHLG9CQUFvQixFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLE1BQU07Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFFMUIsSUFBSSxDQUFDO2dCQUNILE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUMxQixHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsdUJBQXVCLEVBQzNDO29CQUNFLE1BQU0sRUFBRSxNQUFNO29CQUNkLE9BQU8sRUFBRTt3QkFDUCxjQUFjLEVBQUUsa0JBQWtCO3dCQUNsQyxZQUFZLEVBQUUsZUFBZSxPQUFPLEVBQUU7cUJBQ3ZDO29CQUNELElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDO2lCQUM5QyxDQUNGLENBQUM7Z0JBRUYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO29CQUFFLE9BQU8sS0FBSyxDQUFDO2dCQUUvQixNQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQU1sQyxDQUFDO2dCQUVGLGFBQWEsQ0FDWCxJQUFJLENBQUMsV0FBVyxFQUNoQixJQUFJLENBQUMsWUFBWSxFQUNqQixJQUFJLENBQUMsU0FBUyxFQUNkLElBQUksQ0FBQyxNQUFNLEVBQ1gsSUFBSSxDQUFDLEtBQUssQ0FDWCxDQUFDO2dCQUVGLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztZQUFDLE1BQU0sQ0FBQztnQkFDUCxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7UUFDSCxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRUwsSUFBSSxDQUFDO1lBQ0gsT0FBTyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDL0IsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDekIsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTyxDQUNYLE1BQWMsRUFDZCxJQUFZLEVBQ1osVUFNSSxFQUFFO1FBRU4sTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsV0FBVyxHQUFHLElBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUNwRCxNQUFNLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNuRCxNQUFNLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUU3QyxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7Z0JBQzdDLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUN4QixHQUFHLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQzlDLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxNQUFNLFdBQVcsR0FBRyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDcEUsSUFBSSxjQUFjLEdBQ2hCLFdBQVc7WUFDWCxDQUFDLE1BQU0sS0FBSyxNQUFNLElBQUksT0FBTyxDQUFDLGtCQUFrQixLQUFLLEtBQUs7Z0JBQ3hELENBQUMsQ0FBQyxzQkFBc0IsRUFBRTtnQkFDMUIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRWpCLElBQUksU0FBNEIsQ0FBQztRQUNqQyxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFFdkIsS0FBSyxJQUFJLE9BQU8sR0FBRyxDQUFDLEVBQUUsT0FBTyxJQUFJLFVBQVUsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ3ZELElBQUksQ0FBQztnQkFDSCxNQUFNLFVBQVUsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO2dCQUN6QyxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUVoRSxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ25ELElBQUksY0FBYyxFQUFFLENBQUM7b0JBQ25CLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLGNBQWMsQ0FBQztnQkFDOUMsQ0FBQztnQkFFRCxNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUU7b0JBQzNDLE1BQU07b0JBQ04sT0FBTztvQkFDUCxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO29CQUM3QyxNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU07aUJBQzFCLENBQUMsQ0FBQztnQkFFSCxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBRXhCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBRTNDLE1BQU0sSUFBSSxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBRXJELElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxHQUFHLElBQUksV0FBVyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7b0JBQzFELFVBQVUsR0FBRyxJQUFJLENBQUM7b0JBQ2xCLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO29CQUM3QyxJQUFJLFNBQVMsRUFBRSxDQUFDO3dCQUNkLE9BQU8sRUFBRSxDQUFDO3dCQUNWLFNBQVM7b0JBQ1gsQ0FBQztnQkFDSCxDQUFDO2dCQUVELElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7b0JBQ2pCLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDMUMsQ0FBQztnQkFFRCxPQUFPLElBQVMsQ0FBQztZQUNuQixDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZixTQUFTLEdBQUcsS0FBYyxDQUFDO2dCQUUzQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDN0IsTUFBTSxLQUFLLENBQUM7Z0JBQ2QsQ0FBQztnQkFFRCxJQUFJLE9BQU8sS0FBSyxVQUFVLEVBQUUsQ0FBQztvQkFDM0IsTUFBTSxLQUFLLENBQUM7Z0JBQ2QsQ0FBQztnQkFFRCxzRUFBc0U7Z0JBQ3RFLHVFQUF1RTtnQkFDdkUsb0VBQW9FO2dCQUNwRSxzRUFBc0U7Z0JBQ3RFLDBDQUEwQztnQkFDMUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxjQUFjLElBQUkscUJBQXFCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDbkUsY0FBYyxHQUFHLHNCQUFzQixFQUFFLENBQUM7Z0JBQzVDLENBQUM7Z0JBRUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQy9ELE1BQU0sS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3pCLENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxTQUFTLElBQUksSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRU8sbUJBQW1CLENBQUMsT0FBZ0I7UUFDMUMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQy9DLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUN2RCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFFL0MsSUFBSSxLQUFLLElBQUksU0FBUyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxhQUFhLEdBQUc7Z0JBQ25CLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztnQkFDMUIsU0FBUyxFQUFFLFFBQVEsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO2dCQUNsQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7YUFDM0IsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRU8sV0FBVyxDQUFDLFVBQWtCLEVBQUUsSUFBUztRQUMvQyxNQUFNLEtBQUssR0FBRyxJQUFJLEVBQUUsS0FBSyxJQUFJLGVBQWUsQ0FBQztRQUM3QyxNQUFNLE9BQU8sR0FBRyxJQUFJLEVBQUUsT0FBTyxJQUFJLFFBQVEsVUFBVSxFQUFFLENBQUM7UUFDdEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxFQUFFLE9BQU8sQ0FBQztRQUU5QixRQUFRLFVBQVUsRUFBRSxDQUFDO1lBQ25CLEtBQUssR0FBRyxDQUFDO1lBQ1QsS0FBSyxHQUFHO2dCQUNOLG9FQUFvRTtnQkFDcEUsSUFDRSxLQUFLLEtBQUssaUJBQWlCO29CQUMzQixLQUFLLEtBQUssa0JBQWtCO29CQUM1QixPQUFPLEVBQUUsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUMxQyxDQUFDO29CQUNELE1BQU0sSUFBSSxtQkFBbUIsQ0FDM0IsdUNBQXVDLEVBQ3ZDLGlHQUFpRyxDQUNsRyxDQUFDO2dCQUNKLENBQUM7Z0JBQ0QsTUFBTSxJQUFJLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3pDLEtBQUssR0FBRztnQkFDTixNQUFNLElBQUksZUFBZSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUM5QyxLQUFLLEdBQUc7Z0JBQ04scUVBQXFFO2dCQUNyRSxrRUFBa0U7Z0JBQ2xFLHNEQUFzRDtnQkFDdEQsSUFBSSxLQUFLLEtBQUsseUJBQXlCO29CQUNyQyxNQUFNLElBQUksMEJBQTBCLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2hELE1BQU0sSUFBSSx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM5QyxLQUFLLEdBQUc7Z0JBQ04sc0VBQXNFO2dCQUN0RSx3REFBd0Q7Z0JBQ3hELE1BQU0sSUFBSSxhQUFhLENBQUMsSUFBSSxFQUFFLE9BQU8sSUFBSSxTQUFTLENBQUMsQ0FBQztZQUN0RCxLQUFLLEdBQUc7Z0JBQ04sTUFBTSxVQUFVLEdBQUcsSUFBSSxFQUFFLFVBQVUsSUFBSSxFQUFFLENBQUM7Z0JBQzFDLE1BQU0sSUFBSSxjQUFjLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2hEO2dCQUNFLE1BQU0sV0FBVyxHQUNmLFVBQVUsSUFBSSxHQUFHO29CQUNmLENBQUMsQ0FBQyw2RUFBNkU7b0JBQy9FLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQ2hCLE1BQU0sSUFBSSxRQUFRLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3pFLENBQUM7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFRCxzQkFBc0I7SUFDdEIsS0FBSyxDQUFDLEdBQUcsQ0FDUCxJQUFZLEVBQ1osS0FBNkQsRUFDN0QsY0FBdUIsSUFBSTtRQUUzQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUksS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSSxDQUNSLElBQVksRUFDWixJQUE4QixFQUM5QixjQUF1QixJQUFJLEVBQzNCLFVBQXFFLEVBQUU7UUFFdkUsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFJLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRUQsS0FBSyxDQUFDLEtBQUssQ0FDVCxJQUFZLEVBQ1osSUFBOEIsRUFDOUIsY0FBdUIsSUFBSTtRQUUzQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUksT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxLQUFLLENBQUMsR0FBRyxDQUNQLElBQVksRUFDWixJQUE4QixFQUM5QixjQUF1QixJQUFJO1FBRTNCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBSSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFNLENBQUksSUFBWSxFQUFFLGNBQXVCLElBQUk7UUFDdkQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFJLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsVUFBVSxDQUNkLElBQVksRUFDWixJQUlDLEVBQ0QsY0FBdUIsSUFBSTtRQUUzQixNQUFNLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNuRCxNQUFNLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3QyxNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztRQUUxQywwREFBMEQ7UUFDMUQsTUFBTSxRQUFRLEdBQUcsbUJBQW1CLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzNGLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLElBQUksVUFBVSxDQUFDO1FBRTdDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQ3hCLEtBQUssUUFBUSxNQUFNO1lBQ2pCLDBEQUEwRCxJQUFJLENBQUMsUUFBUSxPQUFPO1lBQzlFLGlCQUFpQixRQUFRLFVBQVUsQ0FDdEMsQ0FBQztRQUNGLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxRQUFRLFFBQVEsQ0FBQyxDQUFDO1FBQ3RELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBRTFELE1BQU0sT0FBTyxHQUEyQjtZQUN0QyxjQUFjLEVBQUUsaUNBQWlDLFFBQVEsRUFBRTtZQUMzRCxNQUFNLEVBQUUsa0JBQWtCO1lBQzFCLFlBQVksRUFBRSxlQUFlLE9BQU8sRUFBRTtTQUN2QyxDQUFDO1FBRUYsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNoQixPQUFPLENBQUMsZUFBZSxDQUFDLEdBQUcsVUFBVSxNQUFNLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO1FBQ2pFLENBQUM7UUFFRCxJQUFJLGNBQWMsR0FBRyxzQkFBc0IsRUFBRSxDQUFDO1FBRTlDLElBQUksU0FBNEIsQ0FBQztRQUNqQyxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFFdkIsS0FBSyxJQUFJLE9BQU8sR0FBRyxDQUFDLEVBQUUsT0FBTyxJQUFJLFVBQVUsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ3ZELElBQUksQ0FBQztnQkFDSCxNQUFNLFVBQVUsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO2dCQUN6QyxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUVoRSxNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLEVBQUU7b0JBQ2hDLE1BQU0sRUFBRSxNQUFNO29CQUNkLE9BQU8sRUFBRSxFQUFFLEdBQUcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRTtvQkFDMUQsSUFBSTtvQkFDSixNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU07aUJBQzFCLENBQUMsQ0FBQztnQkFFSCxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBRXhCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzNDLE1BQU0sSUFBSSxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBRXJELElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxHQUFHLElBQUksV0FBVyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7b0JBQzFELFVBQVUsR0FBRyxJQUFJLENBQUM7b0JBQ2xCLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO29CQUM3QyxJQUFJLFNBQVMsRUFBRSxDQUFDO3dCQUNkLE9BQU8sQ0FBQyxlQUFlLENBQUMsR0FBRyxVQUFVLFlBQVksRUFBRSxFQUFFLENBQUM7d0JBQ3RELE9BQU8sRUFBRSxDQUFDO3dCQUNWLFNBQVM7b0JBQ1gsQ0FBQztnQkFDSCxDQUFDO2dCQUVELElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7b0JBQ2pCLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDMUMsQ0FBQztnQkFFRCxPQUFPLElBQVMsQ0FBQztZQUNuQixDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZixTQUFTLEdBQUcsS0FBYyxDQUFDO2dCQUUzQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDN0IsTUFBTSxLQUFLLENBQUM7Z0JBQ2QsQ0FBQztnQkFFRCxJQUFJLE9BQU8sS0FBSyxVQUFVLEVBQUUsQ0FBQztvQkFDM0IsTUFBTSxLQUFLLENBQUM7Z0JBQ2QsQ0FBQztnQkFFRCxtRUFBbUU7Z0JBQ25FLGdFQUFnRTtnQkFDaEUsSUFBSSxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUNqQyxjQUFjLEdBQUcsc0JBQXNCLEVBQUUsQ0FBQztnQkFDNUMsQ0FBQztnQkFFRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDL0QsTUFBTSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDekIsQ0FBQztRQUNILENBQUM7UUFFRCxNQUFNLFNBQVMsSUFBSSxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNoRCxDQUFDO0NBQ0Y7QUFFRCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQVBJIENsaWVudCBmb3IgU2VuZGx5IENMSVxuICogSGFuZGxlcyBhbGwgSFRUUCByZXF1ZXN0cyB0byB0aGUgU2VuZGx5IEFQSVxuICovXG5cbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tIFwibm9kZTptb2R1bGVcIjtcbmltcG9ydCB7IHJhbmRvbVVVSUQgfSBmcm9tIFwibm9kZTpjcnlwdG9cIjtcbmltcG9ydCB7XG4gIGdldEF1dGhUb2tlbixcbiAgZ2V0U3RvcmVkQWNjZXNzVG9rZW4sXG4gIGdldEVmZmVjdGl2ZVZhbHVlLFxuICByZXNvbHZlQmFzZVVybCxcbiAgc2V0QXV0aFRva2Vucyxcbn0gZnJvbSBcIi4vY29uZmlnLmpzXCI7XG5cbi8vIFJlYWQgdmVyc2lvbiBmcm9tIHBhY2thZ2UuanNvblxuY29uc3QgcmVxdWlyZSA9IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKTtcbmNvbnN0IHsgdmVyc2lvbiB9ID0gcmVxdWlyZShcIi4uLy4uL3BhY2thZ2UuanNvblwiKSBhcyB7IHZlcnNpb246IHN0cmluZyB9O1xuXG4vKipcbiAqIFNsZWVwIGZvciBhIGdpdmVuIG51bWJlciBvZiBtaWxsaXNlY29uZHNcbiAqL1xuZnVuY3Rpb24gc2xlZXAobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBhbiBpZGVtcG90ZW5jeSBrZXkgZm9yIGEgbG9naWNhbCByZXF1ZXN0LiBSZXVzZWQgYWNyb3NzIHJldHJ5XG4gKiBhdHRlbXB0cyBzbyB0aGUgc2VydmVyIGNhbiByZWNvZ25pemUgYSByZXRyeSBvZiBhIFBPU1QgdGhhdCBhY3R1YWxseVxuICogcmVhY2hlZCBpdC5cbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVJZGVtcG90ZW5jeUtleSgpOiBzdHJpbmcge1xuICByZXR1cm4gYHNlbmRseS1jbGktcmV0cnktJHtyYW5kb21VVUlEKCl9YDtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBhbmQgbm9ybWFsaXplIGEgY2FsbGVyLXN1cHBsaWVkIGlkZW1wb3RlbmN5IGtleS4gRW1wdHkgYW5kXG4gKiB3aGl0ZXNwYWNlLW9ubHkgdmFsdWVzIGFyZSB0cmVhdGVkIGFzIGFic2VudCAoYXV0by1nZW5lcmF0aW9uIHN0aWxsXG4gKiBhcHBsaWVzKTsgaW52YWxpZCB2YWx1ZXMgZmFpbCBmYXN0IGJlZm9yZSBhbnkgbmV0d29yayBjYWxsLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVJZGVtcG90ZW5jeUtleShrZXk6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChrZXkgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgdHJpbW1lZCA9IGtleS50cmltKCk7XG4gIGlmICghdHJpbW1lZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKHRyaW1tZWQubGVuZ3RoID4gMjU1IHx8ICEvXltcXHgyMC1cXHg3RV0rJC8udGVzdCh0cmltbWVkKSkge1xuICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICBcIklkZW1wb3RlbmN5IGtleSBtdXN0IGJlIDEtMjU1IHByaW50YWJsZSBBU0NJSSBjaGFyYWN0ZXJzXCIsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gdHJpbW1lZDtcbn1cblxuLyoqXG4gKiBUcnVlIHdoZW4gdGhlIGVycm9yIGNhcnJpZXMgYW4gYWN0dWFsIDV4eCByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIsIGFzXG4gKiBvcHBvc2VkIHRvIGEgbmV0d29yayBmYWlsdXJlIHdoZXJlIHRoZSBvdXRjb21lIG9mIHRoZSByZXF1ZXN0IGlzIHVua25vd24uXG4gKi9cbmZ1bmN0aW9uIGlzU2VydmVyRXJyb3JSZXNwb25zZShlcnJvcjogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBBcGlFcnJvciAmJiBlcnJvci5zdGF0dXNDb2RlID49IDUwMDtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhbiBlcnJvciBpcyByZXRyeWFibGUgKG5ldHdvcmsgZXJyb3JzIG9yIDV4eCBzZXJ2ZXIgZXJyb3JzKVxuICovXG5mdW5jdGlvbiBpc1JldHJ5YWJsZUVycm9yKGVycm9yOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIC8vIE5ldHdvcmsgZXJyb3JzXG4gIGlmIChlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJvciAmJiBlcnJvci5tZXNzYWdlLmluY2x1ZGVzKFwiZmV0Y2hcIikpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvLyBTZXJ2ZXIgZXJyb3JzICg1eHgpIGFyZSByZXRyeWFibGVcbiAgaWYgKGVycm9yIGluc3RhbmNlb2YgQXBpRXJyb3IgJiYgZXJyb3Iuc3RhdHVzQ29kZSA+PSA1MDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBpUmVzcG9uc2U8VD4ge1xuICBkYXRhPzogVDtcbiAgZXJyb3I/OiB7XG4gICAgY29kZTogc3RyaW5nO1xuICAgIG1lc3NhZ2U6IHN0cmluZztcbiAgICBkZXRhaWxzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmF0ZUxpbWl0SW5mbyB7XG4gIGxpbWl0OiBudW1iZXI7XG4gIHJlbWFpbmluZzogbnVtYmVyO1xuICByZXNldDogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgQXBpRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHB1YmxpYyBoaW50Pzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBjb2RlOiBzdHJpbmcsXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIHB1YmxpYyBzdGF0dXNDb2RlOiBudW1iZXIsXG4gICAgcHVibGljIGRldGFpbHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICBoaW50Pzogc3RyaW5nLFxuICApIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSBcIkFwaUVycm9yXCI7XG4gICAgdGhpcy5oaW50ID0gaGludDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXV0aGVudGljYXRpb25FcnJvciBleHRlbmRzIEFwaUVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgbWVzc2FnZTogc3RyaW5nID0gXCJBdXRoZW50aWNhdGlvbiBmYWlsZWRcIixcbiAgICBoaW50OiBzdHJpbmcgPSBcIlJ1biAnc2VuZGx5IGxvZ2luJyB0byBhdXRoZW50aWNhdGUsIG9yIGNoZWNrIHlvdXIgY3VycmVudCBhdXRoIHdpdGggJ3NlbmRseSB3aG9hbWknXCIsXG4gICkge1xuICAgIHN1cGVyKFwiYXV0aGVudGljYXRpb25fZXJyb3JcIiwgbWVzc2FnZSwgNDAxLCB1bmRlZmluZWQsIGhpbnQpO1xuICAgIHRoaXMubmFtZSA9IFwiQXV0aGVudGljYXRpb25FcnJvclwiO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBcGlLZXlSZXF1aXJlZEVycm9yIGV4dGVuZHMgQXBpRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBtZXNzYWdlOiBzdHJpbmcgPSBcIkFQSSBrZXkgcmVxdWlyZWQgZm9yIHRoaXMgb3BlcmF0aW9uLlwiLFxuICAgIHB1YmxpYyBoaW50OiBzdHJpbmcgPSBcIlNldCBTRU5ETFlfQVBJX0tFWSBlbnZpcm9ubWVudCB2YXJpYWJsZSBvciBjcmVhdGUgYSBrZXkgd2l0aDogc2VuZGx5IGtleXMgY3JlYXRlIC0tdHlwZSB0ZXN0XCIsXG4gICkge1xuICAgIHN1cGVyKFwiYXBpX2tleV9yZXF1aXJlZFwiLCBtZXNzYWdlLCA0MDEpO1xuICAgIHRoaXMubmFtZSA9IFwiQXBpS2V5UmVxdWlyZWRFcnJvclwiO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSYXRlTGltaXRFcnJvciBleHRlbmRzIEFwaUVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJldHJ5QWZ0ZXI6IG51bWJlcixcbiAgICBtZXNzYWdlOiBzdHJpbmcgPSBcIlJhdGUgbGltaXQgZXhjZWVkZWRcIixcbiAgKSB7XG4gICAgY29uc3QgaGludCA9IGBXYWl0ICR7cmV0cnlBZnRlcn0gc2Vjb25kcyBiZWZvcmUgcmV0cnlpbmcsIG9yIHVwZ3JhZGUgeW91ciBwbGFuIGZvciBoaWdoZXIgbGltaXRzYDtcbiAgICBzdXBlcihcInJhdGVfbGltaXRfZXhjZWVkZWRcIiwgbWVzc2FnZSwgNDI5LCB1bmRlZmluZWQsIGhpbnQpO1xuICAgIHRoaXMubmFtZSA9IFwiUmF0ZUxpbWl0RXJyb3JcIjtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW5zdWZmaWNpZW50Q3JlZGl0c0Vycm9yIGV4dGVuZHMgQXBpRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcgPSBcIkluc3VmZmljaWVudCBjcmVkaXRzXCIpIHtcbiAgICBjb25zdCBoaW50ID1cbiAgICAgIFwiQ2hlY2sgeW91ciBiYWxhbmNlIHdpdGggJ3NlbmRseSBjcmVkaXRzJywgb3IgYWRkIGNyZWRpdHMgYXQgaHR0cHM6Ly9zZW5kbHkubGl2ZS9kYXNoYm9hcmQvYmlsbGluZ1wiO1xuICAgIHN1cGVyKFwiaW5zdWZmaWNpZW50X2NyZWRpdHNcIiwgbWVzc2FnZSwgNDAyLCB1bmRlZmluZWQsIGhpbnQpO1xuICAgIHRoaXMubmFtZSA9IFwiSW5zdWZmaWNpZW50Q3JlZGl0c0Vycm9yXCI7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFBheW1lbnRNZXRob2RSZXF1aXJlZEVycm9yIGV4dGVuZHMgQXBpRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcgPSBcIkEgcGF5bWVudCBtZXRob2QgaXMgcmVxdWlyZWRcIikge1xuICAgIGNvbnN0IGhpbnQgPVxuICAgICAgXCJBZGQgYSBjYXJkIGF0IGh0dHBzOi8vc2VuZGx5LmxpdmUvZGFzaGJvYXJkL2JpbGxpbmcsIHRoZW4gdHJ5IGFnYWluXCI7XG4gICAgc3VwZXIoXCJwYXltZW50X21ldGhvZF9yZXF1aXJlZFwiLCBtZXNzYWdlLCA0MDIsIHVuZGVmaW5lZCwgaGludCk7XG4gICAgdGhpcy5uYW1lID0gXCJQYXltZW50TWV0aG9kUmVxdWlyZWRFcnJvclwiO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb3RGb3VuZEVycm9yIGV4dGVuZHMgQXBpRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBtZXNzYWdlOiBzdHJpbmcgPSBcIlJlc291cmNlIG5vdCBmb3VuZFwiLFxuICAgIGhpbnQ6IHN0cmluZyA9IFwiVmVyaWZ5IHRoZSBJRCBpcyBjb3JyZWN0LCBvciB1c2UgYSBsaXN0IGNvbW1hbmQgdG8gc2VlIGF2YWlsYWJsZSByZXNvdXJjZXNcIixcbiAgKSB7XG4gICAgc3VwZXIoXCJub3RfZm91bmRcIiwgbWVzc2FnZSwgNDA0LCB1bmRlZmluZWQsIGhpbnQpO1xuICAgIHRoaXMubmFtZSA9IFwiTm90Rm91bmRFcnJvclwiO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBWYWxpZGF0aW9uRXJyb3IgZXh0ZW5kcyBBcGlFcnJvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIG1lc3NhZ2U6IHN0cmluZyA9IFwiVmFsaWRhdGlvbiBmYWlsZWRcIixcbiAgICBkZXRhaWxzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICkge1xuICAgIGNvbnN0IGhpbnQgPVxuICAgICAgXCJDaGVjayB0aGUgY29tbWFuZCBoZWxwIHdpdGggLS1oZWxwIGZvciB2YWxpZCBvcHRpb25zIGFuZCBmb3JtYXRzXCI7XG4gICAgc3VwZXIoXCJ2YWxpZGF0aW9uX2Vycm9yXCIsIG1lc3NhZ2UsIDQwMCwgZGV0YWlscywgaGludCk7XG4gICAgdGhpcy5uYW1lID0gXCJWYWxpZGF0aW9uRXJyb3JcIjtcbiAgfVxufVxuXG5jbGFzcyBBcGlDbGllbnQge1xuICBwcml2YXRlIHJhdGVMaW1pdEluZm8/OiBSYXRlTGltaXRJbmZvO1xuICBwcml2YXRlIHJlZnJlc2hpbmc6IFByb21pc2U8Ym9vbGVhbj4gfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIGdldEJhc2VVcmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVzb2x2ZUJhc2VVcmwoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZW5zdXJlQXV0aCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGxldCB0b2tlbiA9IGdldEF1dGhUb2tlbigpO1xuICAgIGlmICh0b2tlbikgcmV0dXJuIHRva2VuO1xuXG4gICAgY29uc3Qgc3RvcmVkID0gZ2V0U3RvcmVkQWNjZXNzVG9rZW4oKTtcbiAgICBpZiAoc3RvcmVkPy5zdGFydHNXaXRoKFwiY2xpX1wiKSkge1xuICAgICAgY29uc3QgcmVmcmVzaGVkID0gYXdhaXQgdGhpcy5yZWZyZXNoVG9rZW5zKCk7XG4gICAgICBpZiAocmVmcmVzaGVkKSB7XG4gICAgICAgIHRva2VuID0gZ2V0QXV0aFRva2VuKCk7XG4gICAgICAgIGlmICh0b2tlbikgcmV0dXJuIHRva2VuO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRocm93IG5ldyBBdXRoZW50aWNhdGlvbkVycm9yKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldEhlYWRlcnMoXG4gICAgcmVxdWlyZUF1dGg6IGJvb2xlYW4gPSB0cnVlLFxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+IHtcbiAgICBjb25zdCBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgXCJVc2VyLUFnZW50XCI6IGBAc2VuZGx5L2NsaS8ke3ZlcnNpb259YCxcbiAgICB9O1xuXG4gICAgaWYgKHJlcXVpcmVBdXRoKSB7XG4gICAgICBoZWFkZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBCZWFyZXIgJHthd2FpdCB0aGlzLmVuc3VyZUF1dGgoKX1gO1xuICAgIH1cblxuICAgIGNvbnN0IG9yZ0lkID0gZ2V0RWZmZWN0aXZlVmFsdWUoXCJjdXJyZW50T3JnSWRcIik7XG4gICAgaWYgKG9yZ0lkKSB7XG4gICAgICBoZWFkZXJzW1wiWC1Pcmdhbml6YXRpb24tSWRcIl0gPSBvcmdJZDtcbiAgICB9XG5cbiAgICByZXR1cm4gaGVhZGVycztcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVmcmVzaFRva2VucygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodGhpcy5yZWZyZXNoaW5nKSByZXR1cm4gdGhpcy5yZWZyZXNoaW5nO1xuXG4gICAgdGhpcy5yZWZyZXNoaW5nID0gKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHN0b3JlZCA9IGdldFN0b3JlZEFjY2Vzc1Rva2VuKCk7XG4gICAgICBpZiAoIXN0b3JlZCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKFxuICAgICAgICAgIGAke3RoaXMuZ2V0QmFzZVVybCgpfS9hcGkvY2xpL2F1dGgvcmVmcmVzaGAsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgICAgIFwiVXNlci1BZ2VudFwiOiBgQHNlbmRseS9jbGkvJHt2ZXJzaW9ufWAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBhY2Nlc3NUb2tlbjogc3RvcmVkIH0pLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCFyZXNwb25zZS5vaykgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IGRhdGEgPSAoYXdhaXQgcmVzcG9uc2UuanNvbigpKSBhcyB7XG4gICAgICAgICAgYWNjZXNzVG9rZW46IHN0cmluZztcbiAgICAgICAgICByZWZyZXNoVG9rZW46IHN0cmluZztcbiAgICAgICAgICBleHBpcmVzSW46IG51bWJlcjtcbiAgICAgICAgICB1c2VySWQ6IHN0cmluZztcbiAgICAgICAgICBlbWFpbDogc3RyaW5nO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNldEF1dGhUb2tlbnMoXG4gICAgICAgICAgZGF0YS5hY2Nlc3NUb2tlbixcbiAgICAgICAgICBkYXRhLnJlZnJlc2hUb2tlbixcbiAgICAgICAgICBkYXRhLmV4cGlyZXNJbixcbiAgICAgICAgICBkYXRhLnVzZXJJZCxcbiAgICAgICAgICBkYXRhLmVtYWlsLFxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9KSgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJlZnJlc2hpbmc7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMucmVmcmVzaGluZyA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcmVxdWVzdDxUPihcbiAgICBtZXRob2Q6IHN0cmluZyxcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgb3B0aW9uczoge1xuICAgICAgYm9keT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgcXVlcnk/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgdW5kZWZpbmVkPjtcbiAgICAgIHJlcXVpcmVBdXRoPzogYm9vbGVhbjtcbiAgICAgIGlkZW1wb3RlbmN5S2V5Pzogc3RyaW5nO1xuICAgICAgYXV0b0lkZW1wb3RlbmN5S2V5PzogYm9vbGVhbjtcbiAgICB9ID0ge30sXG4gICk6IFByb21pc2U8VD4ge1xuICAgIGNvbnN0IHsgYm9keSwgcXVlcnksIHJlcXVpcmVBdXRoID0gdHJ1ZSB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBtYXhSZXRyaWVzID0gZ2V0RWZmZWN0aXZlVmFsdWUoXCJtYXhSZXRyaWVzXCIpO1xuICAgIGNvbnN0IHRpbWVvdXQgPSBnZXRFZmZlY3RpdmVWYWx1ZShcInRpbWVvdXRcIik7XG5cbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKGAke3RoaXMuZ2V0QmFzZVVybCgpfSR7cGF0aH1gKTtcbiAgICBpZiAocXVlcnkpIHtcbiAgICAgIE9iamVjdC5lbnRyaWVzKHF1ZXJ5KS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB1cmwuc2VhcmNoUGFyYW1zLmFwcGVuZChrZXksIFN0cmluZyh2YWx1ZSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBleHBsaWNpdEtleSA9IG5vcm1hbGl6ZUlkZW1wb3RlbmN5S2V5KG9wdGlvbnMuaWRlbXBvdGVuY3lLZXkpO1xuICAgIGxldCBpZGVtcG90ZW5jeUtleSA9XG4gICAgICBleHBsaWNpdEtleSA/P1xuICAgICAgKG1ldGhvZCA9PT0gXCJQT1NUXCIgJiYgb3B0aW9ucy5hdXRvSWRlbXBvdGVuY3lLZXkgIT09IGZhbHNlXG4gICAgICAgID8gZ2VuZXJhdGVJZGVtcG90ZW5jeUtleSgpXG4gICAgICAgIDogdW5kZWZpbmVkKTtcblxuICAgIGxldCBsYXN0RXJyb3I6IEVycm9yIHwgdW5kZWZpbmVkO1xuICAgIGxldCBkaWRSZWZyZXNoID0gZmFsc2U7XG5cbiAgICBmb3IgKGxldCBhdHRlbXB0ID0gMDsgYXR0ZW1wdCA8PSBtYXhSZXRyaWVzOyBhdHRlbXB0KyspIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4gY29udHJvbGxlci5hYm9ydCgpLCB0aW1lb3V0KTtcblxuICAgICAgICBjb25zdCBoZWFkZXJzID0gYXdhaXQgdGhpcy5nZXRIZWFkZXJzKHJlcXVpcmVBdXRoKTtcbiAgICAgICAgaWYgKGlkZW1wb3RlbmN5S2V5KSB7XG4gICAgICAgICAgaGVhZGVyc1tcIklkZW1wb3RlbmN5LUtleVwiXSA9IGlkZW1wb3RlbmN5S2V5O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwudG9TdHJpbmcoKSwge1xuICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgIGJvZHk6IGJvZHkgPyBKU09OLnN0cmluZ2lmeShib2R5KSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgICB9KTtcblxuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcblxuICAgICAgICB0aGlzLnVwZGF0ZVJhdGVMaW1pdEluZm8ocmVzcG9uc2UuaGVhZGVycyk7XG5cbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKS5jYXRjaCgoKSA9PiAoe30pKTtcblxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDEgJiYgcmVxdWlyZUF1dGggJiYgIWRpZFJlZnJlc2gpIHtcbiAgICAgICAgICBkaWRSZWZyZXNoID0gdHJ1ZTtcbiAgICAgICAgICBjb25zdCByZWZyZXNoZWQgPSBhd2FpdCB0aGlzLnJlZnJlc2hUb2tlbnMoKTtcbiAgICAgICAgICBpZiAocmVmcmVzaGVkKSB7XG4gICAgICAgICAgICBhdHRlbXB0LS07XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihyZXNwb25zZS5zdGF0dXMsIGRhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGEgYXMgVDtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxhc3RFcnJvciA9IGVycm9yIGFzIEVycm9yO1xuXG4gICAgICAgIGlmICghaXNSZXRyeWFibGVFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhdHRlbXB0ID09PSBtYXhSZXRyaWVzKSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBIDV4eCBtZWFucyB0aGUgc2VydmVyIHJlc3BvbmRlZCAoYW5kIG1heSBoYXZlIGNhY2hlZCB0aGF0IHJlc3BvbnNlXG4gICAgICAgIC8vIHVuZGVyIHRoZSBrZXkpLCBzbyBhbiBhdXRvLWdlbmVyYXRlZCBrZXkgaXMgcm90YXRlZCB0byBsZXQgdGhlIHJldHJ5XG4gICAgICAgIC8vIHJlLWV4ZWN1dGUuIE5ldHdvcmsgZXJyb3JzIGxlYXZlIHRoZSBvdXRjb21lIHVua25vd24g4oCUIHRoZSBrZXkgaXNcbiAgICAgICAgLy8ga2VwdCBzbyB0aGUgc2VydmVyIGNhbiBkZWR1cGUgYSByZXF1ZXN0IHRoYXQgYWN0dWFsbHkgd2VudCB0aHJvdWdoLlxuICAgICAgICAvLyBDYWxsZXItc3VwcGxpZWQga2V5cyBhcmUgbmV2ZXIgcm90YXRlZC5cbiAgICAgICAgaWYgKCFleHBsaWNpdEtleSAmJiBpZGVtcG90ZW5jeUtleSAmJiBpc1NlcnZlckVycm9yUmVzcG9uc2UoZXJyb3IpKSB7XG4gICAgICAgICAgaWRlbXBvdGVuY3lLZXkgPSBnZW5lcmF0ZUlkZW1wb3RlbmN5S2V5KCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBiYWNrb2ZmTXMgPSBNYXRoLm1pbigxMDAwICogTWF0aC5wb3coMiwgYXR0ZW1wdCksIDEwMDAwKTtcbiAgICAgICAgYXdhaXQgc2xlZXAoYmFja29mZk1zKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBsYXN0RXJyb3IgfHwgbmV3IEVycm9yKFwiUmVxdWVzdCBmYWlsZWRcIik7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVJhdGVMaW1pdEluZm8oaGVhZGVyczogSGVhZGVycyk6IHZvaWQge1xuICAgIGNvbnN0IGxpbWl0ID0gaGVhZGVycy5nZXQoXCJYLVJhdGVMaW1pdC1MaW1pdFwiKTtcbiAgICBjb25zdCByZW1haW5pbmcgPSBoZWFkZXJzLmdldChcIlgtUmF0ZUxpbWl0LVJlbWFpbmluZ1wiKTtcbiAgICBjb25zdCByZXNldCA9IGhlYWRlcnMuZ2V0KFwiWC1SYXRlTGltaXQtUmVzZXRcIik7XG5cbiAgICBpZiAobGltaXQgJiYgcmVtYWluaW5nICYmIHJlc2V0KSB7XG4gICAgICB0aGlzLnJhdGVMaW1pdEluZm8gPSB7XG4gICAgICAgIGxpbWl0OiBwYXJzZUludChsaW1pdCwgMTApLFxuICAgICAgICByZW1haW5pbmc6IHBhcnNlSW50KHJlbWFpbmluZywgMTApLFxuICAgICAgICByZXNldDogcGFyc2VJbnQocmVzZXQsIDEwKSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVFcnJvcihzdGF0dXNDb2RlOiBudW1iZXIsIGRhdGE6IGFueSk6IG5ldmVyIHtcbiAgICBjb25zdCBlcnJvciA9IGRhdGE/LmVycm9yIHx8IFwidW5rbm93bl9lcnJvclwiO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBkYXRhPy5tZXNzYWdlIHx8IGBIVFRQICR7c3RhdHVzQ29kZX1gO1xuICAgIGNvbnN0IGRldGFpbHMgPSBkYXRhPy5kZXRhaWxzO1xuXG4gICAgc3dpdGNoIChzdGF0dXNDb2RlKSB7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgIGNhc2UgNDAzOlxuICAgICAgICAvLyBEZXRlY3QgaWYgdGhpcyBpcyBhbiBBUEkga2V5IHJlcXVpcmVkIGVycm9yIHZzIGdlbmVyYWwgYXV0aCBlcnJvclxuICAgICAgICBpZiAoXG4gICAgICAgICAgZXJyb3IgPT09IFwiaW52YWxpZF9hcGlfa2V5XCIgfHxcbiAgICAgICAgICBlcnJvciA9PT0gXCJhcGlfa2V5X3JlcXVpcmVkXCIgfHxcbiAgICAgICAgICBtZXNzYWdlPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwiYXBpIGtleVwiKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQXBpS2V5UmVxdWlyZWRFcnJvcihcbiAgICAgICAgICAgIFwiQVBJIGtleSByZXF1aXJlZCBmb3Igc2VuZGluZyBtZXNzYWdlc1wiLFxuICAgICAgICAgICAgXCJTZXQgU0VORExZX0FQSV9LRVkgZW52aXJvbm1lbnQgdmFyaWFibGUgb3IgY3JlYXRlIGEga2V5IHdpdGg6XFxuICBzZW5kbHkga2V5cyBjcmVhdGUgLS10eXBlIHRlc3RcIixcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBBdXRoZW50aWNhdGlvbkVycm9yKG1lc3NhZ2UpO1xuICAgICAgY2FzZSA0MDA6XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobWVzc2FnZSwgZGV0YWlscyk7XG4gICAgICBjYXNlIDQwMjpcbiAgICAgICAgLy8gQSBiYXJlIDQwMiBjYW4gbWVhbiBlaXRoZXIgXCJvdXQgb2YgY3JlZGl0c1wiIG9yIFwibm8gY2FyZCBvbiBmaWxlXCIg4oCUXG4gICAgICAgIC8vIHRoZXkgbmVlZCBvcHBvc2l0ZSByZW1lZGllcywgc28gYnJhbmNoIG9uIHRoZSBzZXJ2ZXIgZXJyb3IgY29kZVxuICAgICAgICAvLyBpbnN0ZWFkIG9mIGFsd2F5cyBzdGVlcmluZyB0aGUgdXNlciB0byBidXkgY3JlZGl0cy5cbiAgICAgICAgaWYgKGVycm9yID09PSBcInBheW1lbnRfbWV0aG9kX3JlcXVpcmVkXCIpXG4gICAgICAgICAgdGhyb3cgbmV3IFBheW1lbnRNZXRob2RSZXF1aXJlZEVycm9yKG1lc3NhZ2UpO1xuICAgICAgICB0aHJvdyBuZXcgSW5zdWZmaWNpZW50Q3JlZGl0c0Vycm9yKG1lc3NhZ2UpO1xuICAgICAgY2FzZSA0MDQ6XG4gICAgICAgIC8vIElmIHRoZSBzZXJ2ZXIgc2VudCBubyBtZXNzYWdlLCB1c2UgTm90Rm91bmRFcnJvcidzIGZyaWVuZGx5IGRlZmF1bHRcbiAgICAgICAgLy8gKFwiUmVzb3VyY2Ugbm90IGZvdW5kXCIpIHJhdGhlciB0aGFuIGEgYmFyZSBcIkhUVFAgNDA0XCIuXG4gICAgICAgIHRocm93IG5ldyBOb3RGb3VuZEVycm9yKGRhdGE/Lm1lc3NhZ2UgfHwgdW5kZWZpbmVkKTtcbiAgICAgIGNhc2UgNDI5OlxuICAgICAgICBjb25zdCByZXRyeUFmdGVyID0gZGF0YT8ucmV0cnlBZnRlciB8fCA2MDtcbiAgICAgICAgdGhyb3cgbmV3IFJhdGVMaW1pdEVycm9yKHJldHJ5QWZ0ZXIsIG1lc3NhZ2UpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29uc3QgZGVmYXVsdEhpbnQgPVxuICAgICAgICAgIHN0YXR1c0NvZGUgPj0gNTAwXG4gICAgICAgICAgICA/IFwiVGhpcyBpcyBhIHNlcnZlciBlcnJvci4gVHJ5IGFnYWluIGxhdGVyIG9yIGNoZWNrIGh0dHBzOi8vc3RhdHVzLnNlbmRseS5saXZlXCJcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICB0aHJvdyBuZXcgQXBpRXJyb3IoZXJyb3IsIG1lc3NhZ2UsIHN0YXR1c0NvZGUsIGRldGFpbHMsIGRlZmF1bHRIaW50KTtcbiAgICB9XG4gIH1cblxuICBnZXRSYXRlTGltaXRJbmZvKCk6IFJhdGVMaW1pdEluZm8gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJhdGVMaW1pdEluZm87XG4gIH1cblxuICAvLyBDb252ZW5pZW5jZSBtZXRob2RzXG4gIGFzeW5jIGdldDxUPihcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgcXVlcnk/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgdW5kZWZpbmVkPixcbiAgICByZXF1aXJlQXV0aDogYm9vbGVhbiA9IHRydWUsXG4gICk6IFByb21pc2U8VD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3Q8VD4oXCJHRVRcIiwgcGF0aCwgeyBxdWVyeSwgcmVxdWlyZUF1dGggfSk7XG4gIH1cblxuICBhc3luYyBwb3N0PFQ+KFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBib2R5PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgcmVxdWlyZUF1dGg6IGJvb2xlYW4gPSB0cnVlLFxuICAgIG9wdGlvbnM6IHsgaWRlbXBvdGVuY3lLZXk/OiBzdHJpbmc7IGF1dG9JZGVtcG90ZW5jeUtleT86IGJvb2xlYW4gfSA9IHt9LFxuICApOiBQcm9taXNlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0PFQ+KFwiUE9TVFwiLCBwYXRoLCB7IGJvZHksIHJlcXVpcmVBdXRoLCAuLi5vcHRpb25zIH0pO1xuICB9XG5cbiAgYXN5bmMgcGF0Y2g8VD4oXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIGJvZHk/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICByZXF1aXJlQXV0aDogYm9vbGVhbiA9IHRydWUsXG4gICk6IFByb21pc2U8VD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3Q8VD4oXCJQQVRDSFwiLCBwYXRoLCB7IGJvZHksIHJlcXVpcmVBdXRoIH0pO1xuICB9XG5cbiAgYXN5bmMgcHV0PFQ+KFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBib2R5PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgcmVxdWlyZUF1dGg6IGJvb2xlYW4gPSB0cnVlLFxuICApOiBQcm9taXNlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0PFQ+KFwiUFVUXCIsIHBhdGgsIHsgYm9keSwgcmVxdWlyZUF1dGggfSk7XG4gIH1cblxuICBhc3luYyBkZWxldGU8VD4ocGF0aDogc3RyaW5nLCByZXF1aXJlQXV0aDogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0PFQ+KFwiREVMRVRFXCIsIHBhdGgsIHsgcmVxdWlyZUF1dGggfSk7XG4gIH1cblxuICAvKipcbiAgICogVXBsb2FkIGEgZmlsZSB1c2luZyBtdWx0aXBhcnQvZm9ybS1kYXRhXG4gICAqIFVzZWQgZm9yIGJhdGNoIENTViB1cGxvYWRzIHRvIFIyIHN0b3JhZ2VcbiAgICovXG4gIGFzeW5jIHVwbG9hZEZpbGU8VD4oXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIGZpbGU6IHtcbiAgICAgIGJ1ZmZlcjogQnVmZmVyO1xuICAgICAgZmlsZW5hbWU6IHN0cmluZztcbiAgICAgIG1pbWV0eXBlPzogc3RyaW5nO1xuICAgIH0sXG4gICAgcmVxdWlyZUF1dGg6IGJvb2xlYW4gPSB0cnVlLFxuICApOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCBtYXhSZXRyaWVzID0gZ2V0RWZmZWN0aXZlVmFsdWUoXCJtYXhSZXRyaWVzXCIpO1xuICAgIGNvbnN0IHRpbWVvdXQgPSBnZXRFZmZlY3RpdmVWYWx1ZShcInRpbWVvdXRcIik7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5nZXRCYXNlVXJsKCl9JHtwYXRofWA7XG5cbiAgICAvLyBCdWlsZCBtdWx0aXBhcnQgZm9ybSBkYXRhIG1hbnVhbGx5IChOb2RlLmpzIGNvbXBhdGlibGUpXG4gICAgY29uc3QgYm91bmRhcnkgPSBgLS0tLUZvcm1Cb3VuZGFyeSR7RGF0ZS5ub3coKX0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyKX1gO1xuICAgIGNvbnN0IG1pbWV0eXBlID0gZmlsZS5taW1ldHlwZSB8fCBcInRleHQvY3N2XCI7XG5cbiAgICBjb25zdCBoZWFkZXIgPSBCdWZmZXIuZnJvbShcbiAgICAgIGAtLSR7Ym91bmRhcnl9XFxyXFxuYCArXG4gICAgICAgIGBDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9XCJmaWxlXCI7IGZpbGVuYW1lPVwiJHtmaWxlLmZpbGVuYW1lfVwiXFxyXFxuYCArXG4gICAgICAgIGBDb250ZW50LVR5cGU6ICR7bWltZXR5cGV9XFxyXFxuXFxyXFxuYCxcbiAgICApO1xuICAgIGNvbnN0IGZvb3RlciA9IEJ1ZmZlci5mcm9tKGBcXHJcXG4tLSR7Ym91bmRhcnl9LS1cXHJcXG5gKTtcbiAgICBjb25zdCBib2R5ID0gQnVmZmVyLmNvbmNhdChbaGVhZGVyLCBmaWxlLmJ1ZmZlciwgZm9vdGVyXSk7XG5cbiAgICBjb25zdCBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgXCJDb250ZW50LVR5cGVcIjogYG11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSR7Ym91bmRhcnl9YCxcbiAgICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICBcIlVzZXItQWdlbnRcIjogYEBzZW5kbHkvY2xpLyR7dmVyc2lvbn1gLFxuICAgIH07XG5cbiAgICBpZiAocmVxdWlyZUF1dGgpIHtcbiAgICAgIGhlYWRlcnNbXCJBdXRob3JpemF0aW9uXCJdID0gYEJlYXJlciAke2F3YWl0IHRoaXMuZW5zdXJlQXV0aCgpfWA7XG4gICAgfVxuXG4gICAgbGV0IGlkZW1wb3RlbmN5S2V5ID0gZ2VuZXJhdGVJZGVtcG90ZW5jeUtleSgpO1xuXG4gICAgbGV0IGxhc3RFcnJvcjogRXJyb3IgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGRpZFJlZnJlc2ggPSBmYWxzZTtcblxuICAgIGZvciAobGV0IGF0dGVtcHQgPSAwOyBhdHRlbXB0IDw9IG1heFJldHJpZXM7IGF0dGVtcHQrKykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiBjb250cm9sbGVyLmFib3J0KCksIHRpbWVvdXQpO1xuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICBoZWFkZXJzOiB7IC4uLmhlYWRlcnMsIFwiSWRlbXBvdGVuY3ktS2V5XCI6IGlkZW1wb3RlbmN5S2V5IH0sXG4gICAgICAgICAgYm9keSxcbiAgICAgICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgICB9KTtcblxuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcblxuICAgICAgICB0aGlzLnVwZGF0ZVJhdGVMaW1pdEluZm8ocmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkuY2F0Y2goKCkgPT4gKHt9KSk7XG5cbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAxICYmIHJlcXVpcmVBdXRoICYmICFkaWRSZWZyZXNoKSB7XG4gICAgICAgICAgZGlkUmVmcmVzaCA9IHRydWU7XG4gICAgICAgICAgY29uc3QgcmVmcmVzaGVkID0gYXdhaXQgdGhpcy5yZWZyZXNoVG9rZW5zKCk7XG4gICAgICAgICAgaWYgKHJlZnJlc2hlZCkge1xuICAgICAgICAgICAgaGVhZGVyc1tcIkF1dGhvcml6YXRpb25cIl0gPSBgQmVhcmVyICR7Z2V0QXV0aFRva2VuKCl9YDtcbiAgICAgICAgICAgIGF0dGVtcHQtLTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKHJlc3BvbnNlLnN0YXR1cywgZGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0YSBhcyBUO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbGFzdEVycm9yID0gZXJyb3IgYXMgRXJyb3I7XG5cbiAgICAgICAgaWYgKCFpc1JldHJ5YWJsZUVycm9yKGVycm9yKSkge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGF0dGVtcHQgPT09IG1heFJldHJpZXMpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNhbWUgcm90YXRpb24gcnVsZXMgYXMgcmVxdWVzdCgpOiByb3RhdGUgdGhlIGF1dG8ga2V5IG9ubHkgYWZ0ZXJcbiAgICAgICAgLy8gYW4gYWN0dWFsIDV4eCByZXNwb25zZTsga2VlcCBpdCBhY3Jvc3MgbmV0d29yay1lcnJvciByZXRyaWVzLlxuICAgICAgICBpZiAoaXNTZXJ2ZXJFcnJvclJlc3BvbnNlKGVycm9yKSkge1xuICAgICAgICAgIGlkZW1wb3RlbmN5S2V5ID0gZ2VuZXJhdGVJZGVtcG90ZW5jeUtleSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYmFja29mZk1zID0gTWF0aC5taW4oMTAwMCAqIE1hdGgucG93KDIsIGF0dGVtcHQpLCAxMDAwMCk7XG4gICAgICAgIGF3YWl0IHNsZWVwKGJhY2tvZmZNcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhyb3cgbGFzdEVycm9yIHx8IG5ldyBFcnJvcihcIlVwbG9hZCBmYWlsZWRcIik7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGFwaUNsaWVudCA9IG5ldyBBcGlDbGllbnQoKTtcbiJdfQ==
|
|
419
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvYXBpLWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDekMsT0FBTyxFQUNMLFlBQVksRUFDWixvQkFBb0IsRUFDcEIsaUJBQWlCLEVBQ2pCLGNBQWMsRUFDZCxhQUFhLEdBQ2QsTUFBTSxhQUFhLENBQUM7QUFFckIsaUNBQWlDO0FBQ2pDLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9DLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxPQUFPLENBQUMsb0JBQW9CLENBQXdCLENBQUM7QUFFekU7O0dBRUc7QUFDSCxTQUFTLEtBQUssQ0FBQyxFQUFVO0lBQ3ZCLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzRCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsc0JBQXNCO0lBQzdCLE9BQU8sb0JBQW9CLFVBQVUsRUFBRSxFQUFFLENBQUM7QUFDNUMsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLHVCQUF1QixDQUFDLEdBQXVCO0lBQ3RELElBQUksR0FBRyxLQUFLLFNBQVM7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUN4QyxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDM0IsSUFBSSxDQUFDLE9BQU87UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUMvQixJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8s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WUFDbkIsQ0FBQztZQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7Z0JBQ2YsU0FBUyxHQUFHLEtBQWMsQ0FBQztnQkFFM0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQzdCLE1BQU0sS0FBSyxDQUFDO2dCQUNkLENBQUM7Z0JBRUQsSUFBSSxPQUFPLEtBQUssVUFBVSxFQUFFLENBQUM7b0JBQzNCLE1BQU0sS0FBSyxDQUFDO2dCQUNkLENBQUM7Z0JBRUQsbUVBQW1FO2dCQUNuRSxnRUFBZ0U7Z0JBQ2hFLElBQUkscUJBQXFCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDakMsY0FBYyxHQUFHLHNCQUFzQixFQUFFLENBQUM7Z0JBQzVDLENBQUM7Z0JBRUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQy9ELE1BQU0sS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3pCLENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxTQUFTLElBQUksSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDaEQsQ0FBQztDQUNGO0FBRUQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLElBQUksU0FBUyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEFQSSBDbGllbnQgZm9yIFNlbmRseSBDTElcbiAqIEhhbmRsZXMgYWxsIEhUVFAgcmVxdWVzdHMgdG8gdGhlIFNlbmRseSBBUElcbiAqL1xuXG5pbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSBcIm5vZGU6bW9kdWxlXCI7XG5pbXBvcnQgeyByYW5kb21VVUlEIH0gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5pbXBvcnQge1xuICBnZXRBdXRoVG9rZW4sXG4gIGdldFN0b3JlZEFjY2Vzc1Rva2VuLFxuICBnZXRFZmZlY3RpdmVWYWx1ZSxcbiAgcmVzb2x2ZUJhc2VVcmwsXG4gIHNldEF1dGhUb2tlbnMsXG59IGZyb20gXCIuL2NvbmZpZy5qc1wiO1xuXG4vLyBSZWFkIHZlcnNpb24gZnJvbSBwYWNrYWdlLmpzb25cbmNvbnN0IHJlcXVpcmUgPSBjcmVhdGVSZXF1aXJlKGltcG9ydC5tZXRhLnVybCk7XG5jb25zdCB7IHZlcnNpb24gfSA9IHJlcXVpcmUoXCIuLi8uLi9wYWNrYWdlLmpzb25cIikgYXMgeyB2ZXJzaW9uOiBzdHJpbmcgfTtcblxuLyoqXG4gKiBTbGVlcCBmb3IgYSBnaXZlbiBudW1iZXIgb2YgbWlsbGlzZWNvbmRzXG4gKi9cbmZ1bmN0aW9uIHNsZWVwKG1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG59XG5cbi8qKlxuICogR2VuZXJhdGUgYW4gaWRlbXBvdGVuY3kga2V5IGZvciBhIGxvZ2ljYWwgcmVxdWVzdC4gUmV1c2VkIGFjcm9zcyByZXRyeVxuICogYXR0ZW1wdHMgc28gdGhlIHNlcnZlciBjYW4gcmVjb2duaXplIGEgcmV0cnkgb2YgYSBQT1NUIHRoYXQgYWN0dWFsbHlcbiAqIHJlYWNoZWQgaXQuXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlSWRlbXBvdGVuY3lLZXkoKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBzZW5kbHktY2xpLXJldHJ5LSR7cmFuZG9tVVVJRCgpfWA7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgYW5kIG5vcm1hbGl6ZSBhIGNhbGxlci1zdXBwbGllZCBpZGVtcG90ZW5jeSBrZXkuIEVtcHR5IGFuZFxuICogd2hpdGVzcGFjZS1vbmx5IHZhbHVlcyBhcmUgdHJlYXRlZCBhcyBhYnNlbnQgKGF1dG8tZ2VuZXJhdGlvbiBzdGlsbFxuICogYXBwbGllcyk7IGludmFsaWQgdmFsdWVzIGZhaWwgZmFzdCBiZWZvcmUgYW55IG5ldHdvcmsgY2FsbC5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplSWRlbXBvdGVuY3lLZXkoa2V5OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IHRyaW1tZWQgPSBrZXkudHJpbSgpO1xuICBpZiAoIXRyaW1tZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmICh0cmltbWVkLmxlbmd0aCA+IDI1NSB8fCAhL15bXFx4MjAtXFx4N0VdKyQvLnRlc3QodHJpbW1lZCkpIHtcbiAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgXCJJZGVtcG90ZW5jeSBrZXkgbXVzdCBiZSAxLTI1NSBwcmludGFibGUgQVNDSUkgY2hhcmFjdGVyc1wiLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHRyaW1tZWQ7XG59XG5cbi8qKlxuICogVHJ1ZSB3aGVuIHRoZSBlcnJvciBjYXJyaWVzIGFuIGFjdHVhbCA1eHggcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyLCBhc1xuICogb3Bwb3NlZCB0byBhIG5ldHdvcmsgZmFpbHVyZSB3aGVyZSB0aGUgb3V0Y29tZSBvZiB0aGUgcmVxdWVzdCBpcyB1bmtub3duLlxuICovXG5mdW5jdGlvbiBpc1NlcnZlckVycm9yUmVzcG9uc2UoZXJyb3I6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgQXBpRXJyb3IgJiYgZXJyb3Iuc3RhdHVzQ29kZSA+PSA1MDA7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYW4gZXJyb3IgaXMgcmV0cnlhYmxlIChuZXR3b3JrIGVycm9ycyBvciA1eHggc2VydmVyIGVycm9ycylcbiAqL1xuZnVuY3Rpb24gaXNSZXRyeWFibGVFcnJvcihlcnJvcjogdW5rbm93bik6IGJvb2xlYW4ge1xuICAvLyBOZXR3b3JrIGVycm9yc1xuICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3IgJiYgZXJyb3IubWVzc2FnZS5pbmNsdWRlcyhcImZldGNoXCIpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLy8gU2VydmVyIGVycm9ycyAoNXh4KSBhcmUgcmV0cnlhYmxlXG4gIGlmIChlcnJvciBpbnN0YW5jZW9mIEFwaUVycm9yICYmIGVycm9yLnN0YXR1c0NvZGUgPj0gNTAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFwaVJlc3BvbnNlPFQ+IHtcbiAgZGF0YT86IFQ7XG4gIGVycm9yPzoge1xuICAgIGNvZGU6IHN0cmluZztcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG4gICAgZGV0YWlscz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJhdGVMaW1pdEluZm8ge1xuICBsaW1pdDogbnVtYmVyO1xuICByZW1haW5pbmc6IG51bWJlcjtcbiAgcmVzZXQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcGlGaWVsZEVycm9yIHtcbiAgcGF0aDogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBBcGlFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcHVibGljIGhpbnQ/OiBzdHJpbmc7XG4gIHB1YmxpYyBmaWVsZEVycm9ycz86IEFwaUZpZWxkRXJyb3JbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgY29kZTogc3RyaW5nLFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICBwdWJsaWMgc3RhdHVzQ29kZTogbnVtYmVyLFxuICAgIHB1YmxpYyBkZXRhaWxzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgaGludD86IHN0cmluZyxcbiAgKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gXCJBcGlFcnJvclwiO1xuICAgIHRoaXMuaGludCA9IGhpbnQ7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEF1dGhlbnRpY2F0aW9uRXJyb3IgZXh0ZW5kcyBBcGlFcnJvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIG1lc3NhZ2U6IHN0cmluZyA9IFwiQXV0aGVudGljYXRpb24gZmFpbGVkXCIsXG4gICAgaGludDogc3RyaW5nID0gXCJSdW4gJ3NlbmRseSBsb2dpbicgdG8gYXV0aGVudGljYXRlLCBvciBjaGVjayB5b3VyIGN1cnJlbnQgYXV0aCB3aXRoICdzZW5kbHkgd2hvYW1pJ1wiLFxuICApIHtcbiAgICBzdXBlcihcImF1dGhlbnRpY2F0aW9uX2Vycm9yXCIsIG1lc3NhZ2UsIDQwMSwgdW5kZWZpbmVkLCBoaW50KTtcbiAgICB0aGlzLm5hbWUgPSBcIkF1dGhlbnRpY2F0aW9uRXJyb3JcIjtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXBpS2V5UmVxdWlyZWRFcnJvciBleHRlbmRzIEFwaUVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgbWVzc2FnZTogc3RyaW5nID0gXCJBUEkga2V5IHJlcXVpcmVkIGZvciB0aGlzIG9wZXJhdGlvbi5cIixcbiAgICBwdWJsaWMgaGludDogc3RyaW5nID0gXCJTZXQgU0VORExZX0FQSV9LRVkgZW52aXJvbm1lbnQgdmFyaWFibGUgb3IgY3JlYXRlIGEga2V5IHdpdGg6IHNlbmRseSBrZXlzIGNyZWF0ZSAtLXR5cGUgdGVzdFwiLFxuICApIHtcbiAgICBzdXBlcihcImFwaV9rZXlfcmVxdWlyZWRcIiwgbWVzc2FnZSwgNDAxKTtcbiAgICB0aGlzLm5hbWUgPSBcIkFwaUtleVJlcXVpcmVkRXJyb3JcIjtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmF0ZUxpbWl0RXJyb3IgZXh0ZW5kcyBBcGlFcnJvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZXRyeUFmdGVyOiBudW1iZXIsXG4gICAgbWVzc2FnZTogc3RyaW5nID0gXCJSYXRlIGxpbWl0IGV4Y2VlZGVkXCIsXG4gICkge1xuICAgIGNvbnN0IGhpbnQgPSBgV2FpdCAke3JldHJ5QWZ0ZXJ9IHNlY29uZHMgYmVmb3JlIHJldHJ5aW5nLCBvciB1cGdyYWRlIHlvdXIgcGxhbiBmb3IgaGlnaGVyIGxpbWl0c2A7XG4gICAgc3VwZXIoXCJyYXRlX2xpbWl0X2V4Y2VlZGVkXCIsIG1lc3NhZ2UsIDQyOSwgdW5kZWZpbmVkLCBoaW50KTtcbiAgICB0aGlzLm5hbWUgPSBcIlJhdGVMaW1pdEVycm9yXCI7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEluc3VmZmljaWVudENyZWRpdHNFcnJvciBleHRlbmRzIEFwaUVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nID0gXCJJbnN1ZmZpY2llbnQgY3JlZGl0c1wiKSB7XG4gICAgY29uc3QgaGludCA9XG4gICAgICBcIkNoZWNrIHlvdXIgYmFsYW5jZSB3aXRoICdzZW5kbHkgY3JlZGl0cycsIG9yIGFkZCBjcmVkaXRzIGF0IGh0dHBzOi8vc2VuZGx5LmxpdmUvZGFzaGJvYXJkL2JpbGxpbmdcIjtcbiAgICBzdXBlcihcImluc3VmZmljaWVudF9jcmVkaXRzXCIsIG1lc3NhZ2UsIDQwMiwgdW5kZWZpbmVkLCBoaW50KTtcbiAgICB0aGlzLm5hbWUgPSBcIkluc3VmZmljaWVudENyZWRpdHNFcnJvclwiO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQYXltZW50TWV0aG9kUmVxdWlyZWRFcnJvciBleHRlbmRzIEFwaUVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nID0gXCJBIHBheW1lbnQgbWV0aG9kIGlzIHJlcXVpcmVkXCIpIHtcbiAgICBjb25zdCBoaW50ID1cbiAgICAgIFwiQWRkIGEgY2FyZCBhdCBodHRwczovL3NlbmRseS5saXZlL2Rhc2hib2FyZC9iaWxsaW5nLCB0aGVuIHRyeSBhZ2FpblwiO1xuICAgIHN1cGVyKFwicGF5bWVudF9tZXRob2RfcmVxdWlyZWRcIiwgbWVzc2FnZSwgNDAyLCB1bmRlZmluZWQsIGhpbnQpO1xuICAgIHRoaXMubmFtZSA9IFwiUGF5bWVudE1ldGhvZFJlcXVpcmVkRXJyb3JcIjtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm90Rm91bmRFcnJvciBleHRlbmRzIEFwaUVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgbWVzc2FnZTogc3RyaW5nID0gXCJSZXNvdXJjZSBub3QgZm91bmRcIixcbiAgICBoaW50OiBzdHJpbmcgPSBcIlZlcmlmeSB0aGUgSUQgaXMgY29ycmVjdCwgb3IgdXNlIGEgbGlzdCBjb21tYW5kIHRvIHNlZSBhdmFpbGFibGUgcmVzb3VyY2VzXCIsXG4gICkge1xuICAgIHN1cGVyKFwibm90X2ZvdW5kXCIsIG1lc3NhZ2UsIDQwNCwgdW5kZWZpbmVkLCBoaW50KTtcbiAgICB0aGlzLm5hbWUgPSBcIk5vdEZvdW5kRXJyb3JcIjtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVmFsaWRhdGlvbkVycm9yIGV4dGVuZHMgQXBpRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBtZXNzYWdlOiBzdHJpbmcgPSBcIlZhbGlkYXRpb24gZmFpbGVkXCIsXG4gICAgZGV0YWlscz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICApIHtcbiAgICBjb25zdCBoaW50ID1cbiAgICAgIFwiQ2hlY2sgdGhlIGNvbW1hbmQgaGVscCB3aXRoIC0taGVscCBmb3IgdmFsaWQgb3B0aW9ucyBhbmQgZm9ybWF0c1wiO1xuICAgIHN1cGVyKFwidmFsaWRhdGlvbl9lcnJvclwiLCBtZXNzYWdlLCA0MDAsIGRldGFpbHMsIGhpbnQpO1xuICAgIHRoaXMubmFtZSA9IFwiVmFsaWRhdGlvbkVycm9yXCI7XG4gIH1cbn1cblxuY2xhc3MgQXBpQ2xpZW50IHtcbiAgcHJpdmF0ZSByYXRlTGltaXRJbmZvPzogUmF0ZUxpbWl0SW5mbztcbiAgcHJpdmF0ZSByZWZyZXNoaW5nOiBQcm9taXNlPGJvb2xlYW4+IHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBnZXRCYXNlVXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHJlc29sdmVCYXNlVXJsKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGVuc3VyZUF1dGgoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBsZXQgdG9rZW4gPSBnZXRBdXRoVG9rZW4oKTtcbiAgICBpZiAodG9rZW4pIHJldHVybiB0b2tlbjtcblxuICAgIGNvbnN0IHN0b3JlZCA9IGdldFN0b3JlZEFjY2Vzc1Rva2VuKCk7XG4gICAgaWYgKHN0b3JlZD8uc3RhcnRzV2l0aChcImNsaV9cIikpIHtcbiAgICAgIGNvbnN0IHJlZnJlc2hlZCA9IGF3YWl0IHRoaXMucmVmcmVzaFRva2VucygpO1xuICAgICAgaWYgKHJlZnJlc2hlZCkge1xuICAgICAgICB0b2tlbiA9IGdldEF1dGhUb2tlbigpO1xuICAgICAgICBpZiAodG9rZW4pIHJldHVybiB0b2tlbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgQXV0aGVudGljYXRpb25FcnJvcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRIZWFkZXJzKFxuICAgIHJlcXVpcmVBdXRoOiBib29sZWFuID0gdHJ1ZSxcbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiB7XG4gICAgY29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgIFwiVXNlci1BZ2VudFwiOiBgQHNlbmRseS9jbGkvJHt2ZXJzaW9ufWAsXG4gICAgfTtcblxuICAgIGlmIChyZXF1aXJlQXV0aCkge1xuICAgICAgaGVhZGVyc1tcIkF1dGhvcml6YXRpb25cIl0gPSBgQmVhcmVyICR7YXdhaXQgdGhpcy5lbnN1cmVBdXRoKCl9YDtcbiAgICB9XG5cbiAgICBjb25zdCBvcmdJZCA9IGdldEVmZmVjdGl2ZVZhbHVlKFwiY3VycmVudE9yZ0lkXCIpO1xuICAgIGlmIChvcmdJZCkge1xuICAgICAgaGVhZGVyc1tcIlgtT3JnYW5pemF0aW9uLUlkXCJdID0gb3JnSWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhlYWRlcnM7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlZnJlc2hUb2tlbnMoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHRoaXMucmVmcmVzaGluZykgcmV0dXJuIHRoaXMucmVmcmVzaGluZztcblxuICAgIHRoaXMucmVmcmVzaGluZyA9IChhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBzdG9yZWQgPSBnZXRTdG9yZWRBY2Nlc3NUb2tlbigpO1xuICAgICAgaWYgKCFzdG9yZWQpIHJldHVybiBmYWxzZTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChcbiAgICAgICAgICBgJHt0aGlzLmdldEJhc2VVcmwoKX0vYXBpL2NsaS9hdXRoL3JlZnJlc2hgLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgICBcIlVzZXItQWdlbnRcIjogYEBzZW5kbHkvY2xpLyR7dmVyc2lvbn1gLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgYWNjZXNzVG9rZW46IHN0b3JlZCB9KSxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuXG4gICAgICAgIGlmICghcmVzcG9uc2Uub2spIHJldHVybiBmYWxzZTtcblxuICAgICAgICBjb25zdCBkYXRhID0gKGF3YWl0IHJlc3BvbnNlLmpzb24oKSkgYXMge1xuICAgICAgICAgIGFjY2Vzc1Rva2VuOiBzdHJpbmc7XG4gICAgICAgICAgcmVmcmVzaFRva2VuOiBzdHJpbmc7XG4gICAgICAgICAgZXhwaXJlc0luOiBudW1iZXI7XG4gICAgICAgICAgdXNlcklkOiBzdHJpbmc7XG4gICAgICAgICAgZW1haWw6IHN0cmluZztcbiAgICAgICAgfTtcblxuICAgICAgICBzZXRBdXRoVG9rZW5zKFxuICAgICAgICAgIGRhdGEuYWNjZXNzVG9rZW4sXG4gICAgICAgICAgZGF0YS5yZWZyZXNoVG9rZW4sXG4gICAgICAgICAgZGF0YS5leHBpcmVzSW4sXG4gICAgICAgICAgZGF0YS51c2VySWQsXG4gICAgICAgICAgZGF0YS5lbWFpbCxcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSkoKTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5yZWZyZXNoaW5nO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnJlZnJlc2hpbmcgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJlcXVlc3Q8VD4oXG4gICAgbWV0aG9kOiBzdHJpbmcsXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGJvZHk/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgIHF1ZXJ5PzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IHVuZGVmaW5lZD47XG4gICAgICByZXF1aXJlQXV0aD86IGJvb2xlYW47XG4gICAgICBpZGVtcG90ZW5jeUtleT86IHN0cmluZztcbiAgICAgIGF1dG9JZGVtcG90ZW5jeUtleT86IGJvb2xlYW47XG4gICAgfSA9IHt9LFxuICApOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCB7IGJvZHksIHF1ZXJ5LCByZXF1aXJlQXV0aCA9IHRydWUgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgbWF4UmV0cmllcyA9IGdldEVmZmVjdGl2ZVZhbHVlKFwibWF4UmV0cmllc1wiKTtcbiAgICBjb25zdCB0aW1lb3V0ID0gZ2V0RWZmZWN0aXZlVmFsdWUoXCJ0aW1lb3V0XCIpO1xuXG4gICAgY29uc3QgdXJsID0gbmV3IFVSTChgJHt0aGlzLmdldEJhc2VVcmwoKX0ke3BhdGh9YCk7XG4gICAgaWYgKHF1ZXJ5KSB7XG4gICAgICBPYmplY3QuZW50cmllcyhxdWVyeSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoa2V5LCBTdHJpbmcodmFsdWUpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgZXhwbGljaXRLZXkgPSBub3JtYWxpemVJZGVtcG90ZW5jeUtleShvcHRpb25zLmlkZW1wb3RlbmN5S2V5KTtcbiAgICBsZXQgaWRlbXBvdGVuY3lLZXkgPVxuICAgICAgZXhwbGljaXRLZXkgPz9cbiAgICAgIChtZXRob2QgPT09IFwiUE9TVFwiICYmIG9wdGlvbnMuYXV0b0lkZW1wb3RlbmN5S2V5ICE9PSBmYWxzZVxuICAgICAgICA/IGdlbmVyYXRlSWRlbXBvdGVuY3lLZXkoKVxuICAgICAgICA6IHVuZGVmaW5lZCk7XG5cbiAgICBsZXQgbGFzdEVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcbiAgICBsZXQgZGlkUmVmcmVzaCA9IGZhbHNlO1xuXG4gICAgZm9yIChsZXQgYXR0ZW1wdCA9IDA7IGF0dGVtcHQgPD0gbWF4UmV0cmllczsgYXR0ZW1wdCsrKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKSwgdGltZW91dCk7XG5cbiAgICAgICAgY29uc3QgaGVhZGVycyA9IGF3YWl0IHRoaXMuZ2V0SGVhZGVycyhyZXF1aXJlQXV0aCk7XG4gICAgICAgIGlmIChpZGVtcG90ZW5jeUtleSkge1xuICAgICAgICAgIGhlYWRlcnNbXCJJZGVtcG90ZW5jeS1LZXlcIl0gPSBpZGVtcG90ZW5jeUtleTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLnRvU3RyaW5nKCksIHtcbiAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICBib2R5OiBib2R5ID8gSlNPTi5zdHJpbmdpZnkoYm9keSkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG5cbiAgICAgICAgdGhpcy51cGRhdGVSYXRlTGltaXRJbmZvKHJlc3BvbnNlLmhlYWRlcnMpO1xuXG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkuY2F0Y2goKCkgPT4gKHt9KSk7XG5cbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAxICYmIHJlcXVpcmVBdXRoICYmICFkaWRSZWZyZXNoKSB7XG4gICAgICAgICAgZGlkUmVmcmVzaCA9IHRydWU7XG4gICAgICAgICAgY29uc3QgcmVmcmVzaGVkID0gYXdhaXQgdGhpcy5yZWZyZXNoVG9rZW5zKCk7XG4gICAgICAgICAgaWYgKHJlZnJlc2hlZCkge1xuICAgICAgICAgICAgYXR0ZW1wdC0tO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IocmVzcG9uc2Uuc3RhdHVzLCBkYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRhIGFzIFQ7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsYXN0RXJyb3IgPSBlcnJvciBhcyBFcnJvcjtcblxuICAgICAgICBpZiAoIWlzUmV0cnlhYmxlRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXR0ZW1wdCA9PT0gbWF4UmV0cmllcykge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQSA1eHggbWVhbnMgdGhlIHNlcnZlciByZXNwb25kZWQgKGFuZCBtYXkgaGF2ZSBjYWNoZWQgdGhhdCByZXNwb25zZVxuICAgICAgICAvLyB1bmRlciB0aGUga2V5KSwgc28gYW4gYXV0by1nZW5lcmF0ZWQga2V5IGlzIHJvdGF0ZWQgdG8gbGV0IHRoZSByZXRyeVxuICAgICAgICAvLyByZS1leGVjdXRlLiBOZXR3b3JrIGVycm9ycyBsZWF2ZSB0aGUgb3V0Y29tZSB1bmtub3duIOKAlCB0aGUga2V5IGlzXG4gICAgICAgIC8vIGtlcHQgc28gdGhlIHNlcnZlciBjYW4gZGVkdXBlIGEgcmVxdWVzdCB0aGF0IGFjdHVhbGx5IHdlbnQgdGhyb3VnaC5cbiAgICAgICAgLy8gQ2FsbGVyLXN1cHBsaWVkIGtleXMgYXJlIG5ldmVyIHJvdGF0ZWQuXG4gICAgICAgIGlmICghZXhwbGljaXRLZXkgJiYgaWRlbXBvdGVuY3lLZXkgJiYgaXNTZXJ2ZXJFcnJvclJlc3BvbnNlKGVycm9yKSkge1xuICAgICAgICAgIGlkZW1wb3RlbmN5S2V5ID0gZ2VuZXJhdGVJZGVtcG90ZW5jeUtleSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYmFja29mZk1zID0gTWF0aC5taW4oMTAwMCAqIE1hdGgucG93KDIsIGF0dGVtcHQpLCAxMDAwMCk7XG4gICAgICAgIGF3YWl0IHNsZWVwKGJhY2tvZmZNcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhyb3cgbGFzdEVycm9yIHx8IG5ldyBFcnJvcihcIlJlcXVlc3QgZmFpbGVkXCIpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVSYXRlTGltaXRJbmZvKGhlYWRlcnM6IEhlYWRlcnMpOiB2b2lkIHtcbiAgICBjb25zdCBsaW1pdCA9IGhlYWRlcnMuZ2V0KFwiWC1SYXRlTGltaXQtTGltaXRcIik7XG4gICAgY29uc3QgcmVtYWluaW5nID0gaGVhZGVycy5nZXQoXCJYLVJhdGVMaW1pdC1SZW1haW5pbmdcIik7XG4gICAgY29uc3QgcmVzZXQgPSBoZWFkZXJzLmdldChcIlgtUmF0ZUxpbWl0LVJlc2V0XCIpO1xuXG4gICAgaWYgKGxpbWl0ICYmIHJlbWFpbmluZyAmJiByZXNldCkge1xuICAgICAgdGhpcy5yYXRlTGltaXRJbmZvID0ge1xuICAgICAgICBsaW1pdDogcGFyc2VJbnQobGltaXQsIDEwKSxcbiAgICAgICAgcmVtYWluaW5nOiBwYXJzZUludChyZW1haW5pbmcsIDEwKSxcbiAgICAgICAgcmVzZXQ6IHBhcnNlSW50KHJlc2V0LCAxMCksXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRXJyb3Ioc3RhdHVzQ29kZTogbnVtYmVyLCBkYXRhOiBhbnkpOiBuZXZlciB7XG4gICAgY29uc3QgZXJyb3IgPSBkYXRhPy5lcnJvciB8fCBcInVua25vd25fZXJyb3JcIjtcbiAgICBjb25zdCBtZXNzYWdlID0gZGF0YT8ubWVzc2FnZSB8fCBgSFRUUCAke3N0YXR1c0NvZGV9YDtcbiAgICBjb25zdCBkZXRhaWxzID0gZGF0YT8uZGV0YWlscztcbiAgICBjb25zdCBmaWVsZEVycm9ycyA9IEFycmF5LmlzQXJyYXkoZGF0YT8uZXJyb3JzKVxuICAgICAgPyAoZGF0YS5lcnJvcnMgYXMgQXBpRmllbGRFcnJvcltdKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBzd2l0Y2ggKHN0YXR1c0NvZGUpIHtcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgY2FzZSA0MDM6XG4gICAgICAgIC8vIERldGVjdCBpZiB0aGlzIGlzIGFuIEFQSSBrZXkgcmVxdWlyZWQgZXJyb3IgdnMgZ2VuZXJhbCBhdXRoIGVycm9yXG4gICAgICAgIGlmIChcbiAgICAgICAgICBlcnJvciA9PT0gXCJpbnZhbGlkX2FwaV9rZXlcIiB8fFxuICAgICAgICAgIGVycm9yID09PSBcImFwaV9rZXlfcmVxdWlyZWRcIiB8fFxuICAgICAgICAgIG1lc3NhZ2U/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoXCJhcGkga2V5XCIpXG4gICAgICAgICkge1xuICAgICAgICAgIHRocm93IG5ldyBBcGlLZXlSZXF1aXJlZEVycm9yKFxuICAgICAgICAgICAgXCJBUEkga2V5IHJlcXVpcmVkIGZvciBzZW5kaW5nIG1lc3NhZ2VzXCIsXG4gICAgICAgICAgICBcIlNldCBTRU5ETFlfQVBJX0tFWSBlbnZpcm9ubWVudCB2YXJpYWJsZSBvciBjcmVhdGUgYSBrZXkgd2l0aDpcXG4gIHNlbmRseSBrZXlzIGNyZWF0ZSAtLXR5cGUgdGVzdFwiLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEF1dGhlbnRpY2F0aW9uRXJyb3IobWVzc2FnZSk7XG4gICAgICBjYXNlIDQwMDoge1xuICAgICAgICBjb25zdCB2YWxpZGF0aW9uID0gbmV3IFZhbGlkYXRpb25FcnJvcihtZXNzYWdlLCBkZXRhaWxzKTtcbiAgICAgICAgdmFsaWRhdGlvbi5maWVsZEVycm9ycyA9IGZpZWxkRXJyb3JzO1xuICAgICAgICB0aHJvdyB2YWxpZGF0aW9uO1xuICAgICAgfVxuICAgICAgY2FzZSA0MDI6XG4gICAgICAgIC8vIEEgYmFyZSA0MDIgY2FuIG1lYW4gZWl0aGVyIFwib3V0IG9mIGNyZWRpdHNcIiBvciBcIm5vIGNhcmQgb24gZmlsZVwiIOKAlFxuICAgICAgICAvLyB0aGV5IG5lZWQgb3Bwb3NpdGUgcmVtZWRpZXMsIHNvIGJyYW5jaCBvbiB0aGUgc2VydmVyIGVycm9yIGNvZGVcbiAgICAgICAgLy8gaW5zdGVhZCBvZiBhbHdheXMgc3RlZXJpbmcgdGhlIHVzZXIgdG8gYnV5IGNyZWRpdHMuXG4gICAgICAgIGlmIChlcnJvciA9PT0gXCJwYXltZW50X21ldGhvZF9yZXF1aXJlZFwiKVxuICAgICAgICAgIHRocm93IG5ldyBQYXltZW50TWV0aG9kUmVxdWlyZWRFcnJvcihtZXNzYWdlKTtcbiAgICAgICAgdGhyb3cgbmV3IEluc3VmZmljaWVudENyZWRpdHNFcnJvcihtZXNzYWdlKTtcbiAgICAgIGNhc2UgNDA0OlxuICAgICAgICAvLyBJZiB0aGUgc2VydmVyIHNlbnQgbm8gbWVzc2FnZSwgdXNlIE5vdEZvdW5kRXJyb3IncyBmcmllbmRseSBkZWZhdWx0XG4gICAgICAgIC8vIChcIlJlc291cmNlIG5vdCBmb3VuZFwiKSByYXRoZXIgdGhhbiBhIGJhcmUgXCJIVFRQIDQwNFwiLlxuICAgICAgICB0aHJvdyBuZXcgTm90Rm91bmRFcnJvcihkYXRhPy5tZXNzYWdlIHx8IHVuZGVmaW5lZCk7XG4gICAgICBjYXNlIDQyOTpcbiAgICAgICAgY29uc3QgcmV0cnlBZnRlciA9IGRhdGE/LnJldHJ5QWZ0ZXIgfHwgNjA7XG4gICAgICAgIHRocm93IG5ldyBSYXRlTGltaXRFcnJvcihyZXRyeUFmdGVyLCBtZXNzYWdlKTtcbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgY29uc3QgZGVmYXVsdEhpbnQgPVxuICAgICAgICAgIHN0YXR1c0NvZGUgPj0gNTAwXG4gICAgICAgICAgICA/IFwiVGhpcyBpcyBhIHNlcnZlciBlcnJvci4gVHJ5IGFnYWluIGxhdGVyIG9yIGNoZWNrIGh0dHBzOi8vc3RhdHVzLnNlbmRseS5saXZlXCJcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBhcGlFcnJvciA9IG5ldyBBcGlFcnJvcihcbiAgICAgICAgICBlcnJvcixcbiAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgIHN0YXR1c0NvZGUsXG4gICAgICAgICAgZGV0YWlscyxcbiAgICAgICAgICBkZWZhdWx0SGludCxcbiAgICAgICAgKTtcbiAgICAgICAgYXBpRXJyb3IuZmllbGRFcnJvcnMgPSBmaWVsZEVycm9ycztcbiAgICAgICAgdGhyb3cgYXBpRXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0UmF0ZUxpbWl0SW5mbygpOiBSYXRlTGltaXRJbmZvIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5yYXRlTGltaXRJbmZvO1xuICB9XG5cbiAgLy8gQ29udmVuaWVuY2UgbWV0aG9kc1xuICBhc3luYyBnZXQ8VD4oXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIHF1ZXJ5PzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IHVuZGVmaW5lZD4sXG4gICAgcmVxdWlyZUF1dGg6IGJvb2xlYW4gPSB0cnVlLFxuICApOiBQcm9taXNlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0PFQ+KFwiR0VUXCIsIHBhdGgsIHsgcXVlcnksIHJlcXVpcmVBdXRoIH0pO1xuICB9XG5cbiAgYXN5bmMgcG9zdDxUPihcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgYm9keT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgIHJlcXVpcmVBdXRoOiBib29sZWFuID0gdHJ1ZSxcbiAgICBvcHRpb25zOiB7IGlkZW1wb3RlbmN5S2V5Pzogc3RyaW5nOyBhdXRvSWRlbXBvdGVuY3lLZXk/OiBib29sZWFuIH0gPSB7fSxcbiAgKTogUHJvbWlzZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdDxUPihcIlBPU1RcIiwgcGF0aCwgeyBib2R5LCByZXF1aXJlQXV0aCwgLi4ub3B0aW9ucyB9KTtcbiAgfVxuXG4gIGFzeW5jIHBhdGNoPFQ+KFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBib2R5PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgcmVxdWlyZUF1dGg6IGJvb2xlYW4gPSB0cnVlLFxuICAgIG9wdGlvbnM6IHsgaWRlbXBvdGVuY3lLZXk/OiBzdHJpbmcgfSA9IHt9LFxuICApOiBQcm9taXNlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0PFQ+KFwiUEFUQ0hcIiwgcGF0aCwgeyBib2R5LCByZXF1aXJlQXV0aCwgLi4ub3B0aW9ucyB9KTtcbiAgfVxuXG4gIGFzeW5jIHB1dDxUPihcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgYm9keT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgIHJlcXVpcmVBdXRoOiBib29sZWFuID0gdHJ1ZSxcbiAgICBvcHRpb25zOiB7IGlkZW1wb3RlbmN5S2V5Pzogc3RyaW5nIH0gPSB7fSxcbiAgKTogUHJvbWlzZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdDxUPihcIlBVVFwiLCBwYXRoLCB7IGJvZHksIHJlcXVpcmVBdXRoLCAuLi5vcHRpb25zIH0pO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlPFQ+KHBhdGg6IHN0cmluZywgcmVxdWlyZUF1dGg6IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdDxUPihcIkRFTEVURVwiLCBwYXRoLCB7IHJlcXVpcmVBdXRoIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwbG9hZCBhIGZpbGUgdXNpbmcgbXVsdGlwYXJ0L2Zvcm0tZGF0YVxuICAgKiBVc2VkIGZvciBiYXRjaCBDU1YgdXBsb2FkcyB0byBSMiBzdG9yYWdlXG4gICAqL1xuICBhc3luYyB1cGxvYWRGaWxlPFQ+KFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBmaWxlOiB7XG4gICAgICBidWZmZXI6IEJ1ZmZlcjtcbiAgICAgIGZpbGVuYW1lOiBzdHJpbmc7XG4gICAgICBtaW1ldHlwZT86IHN0cmluZztcbiAgICB9LFxuICAgIHJlcXVpcmVBdXRoOiBib29sZWFuID0gdHJ1ZSxcbiAgKTogUHJvbWlzZTxUPiB7XG4gICAgY29uc3QgbWF4UmV0cmllcyA9IGdldEVmZmVjdGl2ZVZhbHVlKFwibWF4UmV0cmllc1wiKTtcbiAgICBjb25zdCB0aW1lb3V0ID0gZ2V0RWZmZWN0aXZlVmFsdWUoXCJ0aW1lb3V0XCIpO1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZ2V0QmFzZVVybCgpfSR7cGF0aH1gO1xuXG4gICAgLy8gQnVpbGQgbXVsdGlwYXJ0IGZvcm0gZGF0YSBtYW51YWxseSAoTm9kZS5qcyBjb21wYXRpYmxlKVxuICAgIGNvbnN0IGJvdW5kYXJ5ID0gYC0tLS1Gb3JtQm91bmRhcnkke0RhdGUubm93KCl9JHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMil9YDtcbiAgICBjb25zdCBtaW1ldHlwZSA9IGZpbGUubWltZXR5cGUgfHwgXCJ0ZXh0L2NzdlwiO1xuXG4gICAgY29uc3QgaGVhZGVyID0gQnVmZmVyLmZyb20oXG4gICAgICBgLS0ke2JvdW5kYXJ5fVxcclxcbmAgK1xuICAgICAgICBgQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPVwiZmlsZVwiOyBmaWxlbmFtZT1cIiR7ZmlsZS5maWxlbmFtZX1cIlxcclxcbmAgK1xuICAgICAgICBgQ29udGVudC1UeXBlOiAke21pbWV0eXBlfVxcclxcblxcclxcbmAsXG4gICAgKTtcbiAgICBjb25zdCBmb290ZXIgPSBCdWZmZXIuZnJvbShgXFxyXFxuLS0ke2JvdW5kYXJ5fS0tXFxyXFxuYCk7XG4gICAgY29uc3QgYm9keSA9IEJ1ZmZlci5jb25jYXQoW2hlYWRlciwgZmlsZS5idWZmZXIsIGZvb3Rlcl0pO1xuXG4gICAgY29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgIFwiQ29udGVudC1UeXBlXCI6IGBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0ke2JvdW5kYXJ5fWAsXG4gICAgICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgXCJVc2VyLUFnZW50XCI6IGBAc2VuZGx5L2NsaS8ke3ZlcnNpb259YCxcbiAgICB9O1xuXG4gICAgaWYgKHJlcXVpcmVBdXRoKSB7XG4gICAgICBoZWFkZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBCZWFyZXIgJHthd2FpdCB0aGlzLmVuc3VyZUF1dGgoKX1gO1xuICAgIH1cblxuICAgIGxldCBpZGVtcG90ZW5jeUtleSA9IGdlbmVyYXRlSWRlbXBvdGVuY3lLZXkoKTtcblxuICAgIGxldCBsYXN0RXJyb3I6IEVycm9yIHwgdW5kZWZpbmVkO1xuICAgIGxldCBkaWRSZWZyZXNoID0gZmFsc2U7XG5cbiAgICBmb3IgKGxldCBhdHRlbXB0ID0gMDsgYXR0ZW1wdCA8PSBtYXhSZXRyaWVzOyBhdHRlbXB0KyspIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4gY29udHJvbGxlci5hYm9ydCgpLCB0aW1lb3V0KTtcblxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgaGVhZGVyczogeyAuLi5oZWFkZXJzLCBcIklkZW1wb3RlbmN5LUtleVwiOiBpZGVtcG90ZW5jeUtleSB9LFxuICAgICAgICAgIGJvZHksXG4gICAgICAgICAgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG5cbiAgICAgICAgdGhpcy51cGRhdGVSYXRlTGltaXRJbmZvKHJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpLmNhdGNoKCgpID0+ICh7fSkpO1xuXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwMSAmJiByZXF1aXJlQXV0aCAmJiAhZGlkUmVmcmVzaCkge1xuICAgICAgICAgIGRpZFJlZnJlc2ggPSB0cnVlO1xuICAgICAgICAgIGNvbnN0IHJlZnJlc2hlZCA9IGF3YWl0IHRoaXMucmVmcmVzaFRva2VucygpO1xuICAgICAgICAgIGlmIChyZWZyZXNoZWQpIHtcbiAgICAgICAgICAgIGhlYWRlcnNbXCJBdXRob3JpemF0aW9uXCJdID0gYEJlYXJlciAke2dldEF1dGhUb2tlbigpfWA7XG4gICAgICAgICAgICBhdHRlbXB0LS07XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihyZXNwb25zZS5zdGF0dXMsIGRhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGEgYXMgVDtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxhc3RFcnJvciA9IGVycm9yIGFzIEVycm9yO1xuXG4gICAgICAgIGlmICghaXNSZXRyeWFibGVFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhdHRlbXB0ID09PSBtYXhSZXRyaWVzKSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTYW1lIHJvdGF0aW9uIHJ1bGVzIGFzIHJlcXVlc3QoKTogcm90YXRlIHRoZSBhdXRvIGtleSBvbmx5IGFmdGVyXG4gICAgICAgIC8vIGFuIGFjdHVhbCA1eHggcmVzcG9uc2U7IGtlZXAgaXQgYWNyb3NzIG5ldHdvcmstZXJyb3IgcmV0cmllcy5cbiAgICAgICAgaWYgKGlzU2VydmVyRXJyb3JSZXNwb25zZShlcnJvcikpIHtcbiAgICAgICAgICBpZGVtcG90ZW5jeUtleSA9IGdlbmVyYXRlSWRlbXBvdGVuY3lLZXkoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJhY2tvZmZNcyA9IE1hdGgubWluKDEwMDAgKiBNYXRoLnBvdygyLCBhdHRlbXB0KSwgMTAwMDApO1xuICAgICAgICBhd2FpdCBzbGVlcChiYWNrb2ZmTXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRocm93IGxhc3RFcnJvciB8fCBuZXcgRXJyb3IoXCJVcGxvYWQgZmFpbGVkXCIpO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBhcGlDbGllbnQgPSBuZXcgQXBpQ2xpZW50KCk7XG4iXX0=
|
package/dist/lib/base-command.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Base Command class for all Sendly CLI commands
|
|
3
3
|
* Provides common functionality and flags
|
|
4
4
|
*/
|
|
5
|
-
import { Command, Flags } from "@oclif/core";
|
|
5
|
+
import { Command, Errors, Flags } from "@oclif/core";
|
|
6
6
|
import { setOutputFormat, setQuietMode, error } from "./output.js";
|
|
7
7
|
import { isAuthenticated } from "./config.js";
|
|
8
8
|
import { ApiError, AuthenticationError, ApiKeyRequiredError, RateLimitError, InsufficientCreditsError, NotFoundError, ValidationError, } from "./api-client.js";
|
|
@@ -29,6 +29,9 @@ export class BaseCommand extends Command {
|
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
31
|
async catch(err) {
|
|
32
|
+
if (err instanceof Errors.ExitError) {
|
|
33
|
+
throw err;
|
|
34
|
+
}
|
|
32
35
|
// Every typed branch includes the machine-readable `code` so scripts in
|
|
33
36
|
// JSON mode can branch on it (previously only unclassified ApiErrors did).
|
|
34
37
|
if (err instanceof ApiKeyRequiredError) {
|
|
@@ -98,4 +101,4 @@ export class AuthenticatedCommand extends BaseCommand {
|
|
|
98
101
|
this.requireAuth();
|
|
99
102
|
}
|
|
100
103
|
}
|
|
101
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
104
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1jb21tYW5kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9iYXNlLWNvbW1hbmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzlDLE9BQU8sRUFDTCxRQUFRLEVBQ1IsbUJBQW1CLEVBQ25CLG1CQUFtQixFQUNuQixjQUFjLEVBQ2Qsd0JBQXdCLEVBQ3hCLGFBQWEsRUFDYixlQUFlLEdBQ2hCLE1BQU0saUJBQWlCLENBQUM7QUFFekIsTUFBTSxPQUFnQixXQUFZLFNBQVEsT0FBTztJQUMvQyxNQUFNLENBQUMsU0FBUyxHQUFHO1FBQ2pCLElBQUksRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDO1lBQ2xCLFdBQVcsRUFBRSx1QkFBdUI7WUFDcEMsT0FBTyxFQUFFLEtBQUs7U0FDZixDQUFDO1FBQ0YsS0FBSyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDbkIsSUFBSSxFQUFFLEdBQUc7WUFDVCxXQUFXLEVBQUUsZ0JBQWdCO1lBQzdCLE9BQU8sRUFBRSxLQUFLO1NBQ2YsQ0FBQztLQUNILENBQUM7SUFFUSxLQUFLLENBQUMsSUFBSTtRQUNsQixNQUFNLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNuQixNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFpQyxDQUFDLENBQUM7UUFFM0UsSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN4QyxlQUFlLENBQUMs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QyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUM7UUFFRCxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZixDQUFDO0lBRVMsV0FBVztRQUNuQixJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQztZQUN2QixNQUFNLElBQUksbUJBQW1CLEVBQUUsQ0FBQztRQUNsQyxDQUFDO0lBQ0gsQ0FBQzs7QUFHSCxNQUFNLE9BQWdCLG9CQUFxQixTQUFRLFdBQVc7SUFDbEQsS0FBSyxDQUFDLElBQUk7UUFDbEIsTUFBTSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQmFzZSBDb21tYW5kIGNsYXNzIGZvciBhbGwgU2VuZGx5IENMSSBjb21tYW5kc1xuICogUHJvdmlkZXMgY29tbW9uIGZ1bmN0aW9uYWxpdHkgYW5kIGZsYWdzXG4gKi9cblxuaW1wb3J0IHsgQ29tbWFuZCwgRXJyb3JzLCBGbGFncyB9IGZyb20gXCJAb2NsaWYvY29yZVwiO1xuaW1wb3J0IHsgc2V0T3V0cHV0Rm9ybWF0LCBzZXRRdWlldE1vZGUsIGVycm9yIH0gZnJvbSBcIi4vb3V0cHV0LmpzXCI7XG5pbXBvcnQgeyBpc0F1dGhlbnRpY2F0ZWQgfSBmcm9tIFwiLi9jb25maWcuanNcIjtcbmltcG9ydCB7XG4gIEFwaUVycm9yLFxuICBBdXRoZW50aWNhdGlvbkVycm9yLFxuICBBcGlLZXlSZXF1aXJlZEVycm9yLFxuICBSYXRlTGltaXRFcnJvcixcbiAgSW5zdWZmaWNpZW50Q3JlZGl0c0Vycm9yLFxuICBOb3RGb3VuZEVycm9yLFxuICBWYWxpZGF0aW9uRXJyb3IsXG59IGZyb20gXCIuL2FwaS1jbGllbnQuanNcIjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VDb21tYW5kIGV4dGVuZHMgQ29tbWFuZCB7XG4gIHN0YXRpYyBiYXNlRmxhZ3MgPSB7XG4gICAganNvbjogRmxhZ3MuYm9vbGVhbih7XG4gICAgICBkZXNjcmlwdGlvbjogXCJPdXRwdXQgaW4gSlNPTiBmb3JtYXRcIixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgIH0pLFxuICAgIHF1aWV0OiBGbGFncy5ib29sZWFuKHtcbiAgICAgIGNoYXI6IFwicVwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiTWluaW1hbCBvdXRwdXRcIixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgIH0pLFxuICB9O1xuXG4gIHByb3RlY3RlZCBhc3luYyBpbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHN1cGVyLmluaXQoKTtcbiAgICBjb25zdCB7IGZsYWdzIH0gPSBhd2FpdCB0aGlzLnBhcnNlKHRoaXMuY29uc3RydWN0b3IgYXMgdHlwZW9mIEJhc2VDb21tYW5kKTtcblxuICAgIGlmIChmbGFncy5qc29uIHx8ICFwcm9jZXNzLnN0ZG91dC5pc1RUWSkge1xuICAgICAgc2V0T3V0cHV0Rm9ybWF0KFwianNvblwiKTtcbiAgICB9XG4gICAgaWYgKGZsYWdzLnF1aWV0KSB7XG4gICAgICBzZXRRdWlldE1vZGUodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGNhdGNoKGVycjogRXJyb3IpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3JzLkV4aXRFcnJvcikge1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cblxuICAgIC8vIEV2ZXJ5IHR5cGVkIGJyYW5jaCBpbmNsdWRlcyB0aGUgbWFjaGluZS1yZWFkYWJsZSBgY29kZWAgc28gc2NyaXB0cyBpblxuICAgIC8vIEpTT04gbW9kZSBjYW4gYnJhbmNoIG9uIGl0IChwcmV2aW91c2x5IG9ubHkgdW5jbGFzc2lmaWVkIEFwaUVycm9ycyBkaWQpLlxuICAgIGlmIChlcnIgaW5zdGFuY2VvZiBBcGlLZXlSZXF1aXJlZEVycm9yKSB7XG4gICAgICBlcnJvcihlcnIubWVzc2FnZSwge1xuICAgICAgICBjb2RlOiBlcnIuY29kZSxcbiAgICAgICAgaGludDogZXJyLmhpbnQsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZXhpdCgxKTtcbiAgICB9XG5cbiAgICBpZiAoZXJyIGluc3RhbmNlb2YgQXV0aGVudGljYXRpb25FcnJvcikge1xuICAgICAgZXJyb3IoZXJyLm1lc3NhZ2UsIHtcbiAgICAgICAgY29kZTogZXJyLmNvZGUsXG4gICAgICAgIGhpbnQ6IGVyci5oaW50LFxuICAgICAgfSk7XG4gICAgICB0aGlzLmV4aXQoMSk7XG4gICAgfVxuXG4gICAgaWYgKGVyciBpbnN0YW5jZW9mIFJhdGVMaW1pdEVycm9yKSB7XG4gICAgICBlcnJvcihlcnIubWVzc2FnZSwge1xuICAgICAgICBjb2RlOiBlcnIuY29kZSxcbiAgICAgICAgXCJSZXRyeSBhZnRlclwiOiBgJHtlcnIucmV0cnlBZnRlcn0gc2Vjb25kc2AsXG4gICAgICAgIGhpbnQ6IGVyci5oaW50LFxuICAgICAgfSk7XG4gICAgICB0aGlzLmV4aXQoMSk7XG4gICAgfVxuXG4gICAgaWYgKGVyciBpbnN0YW5jZW9mIEluc3VmZmljaWVudENyZWRpdHNFcnJvcikge1xuICAgICAgZXJyb3IoZXJyLm1lc3NhZ2UsIHtcbiAgICAgICAgY29kZTogZXJyLmNvZGUsXG4gICAgICAgIGhpbnQ6IGVyci5oaW50LFxuICAgICAgfSk7XG4gICAgICB0aGlzLmV4aXQoMSk7XG4gICAgfVxuXG4gICAgaWYgKGVyciBpbnN0YW5jZW9mIE5vdEZvdW5kRXJyb3IpIHtcbiAgICAgIGVycm9yKGVyci5tZXNzYWdlLCB7XG4gICAgICAgIGNvZGU6IGVyci5jb2RlLFxuICAgICAgICBoaW50OiBlcnIuaGludCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5leGl0KDEpO1xuICAgIH1cblxuICAgIGlmIChlcnIgaW5zdGFuY2VvZiBWYWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgIGVycm9yKGVyci5tZXNzYWdlLCB7XG4gICAgICAgIGNvZGU6IGVyci5jb2RlLFxuICAgICAgICBoaW50OiBlcnIuaGludCxcbiAgICAgICAgLi4uKGVyci5kZXRhaWxzIHx8IHt9KSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5leGl0KDEpO1xuICAgIH1cblxuICAgIGlmIChlcnIgaW5zdGFuY2VvZiBBcGlFcnJvcikge1xuICAgICAgZXJyb3IoZXJyLm1lc3NhZ2UsIHtcbiAgICAgICAgY29kZTogZXJyLmNvZGUsXG4gICAgICAgIC4uLihlcnIuaGludCAmJiB7IGhpbnQ6IGVyci5oaW50IH0pLFxuICAgICAgICAuLi4oZXJyLmRldGFpbHMgfHwge30pLFxuICAgICAgfSk7XG4gICAgICB0aGlzLmV4aXQoMSk7XG4gICAgfVxuXG4gICAgZXJyb3IoZXJyLm1lc3NhZ2UpO1xuICAgIHRoaXMuZXhpdCgxKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXF1aXJlQXV0aCgpOiB2b2lkIHtcbiAgICBpZiAoIWlzQXV0aGVudGljYXRlZCgpKSB7XG4gICAgICB0aHJvdyBuZXcgQXV0aGVudGljYXRpb25FcnJvcigpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQXV0aGVudGljYXRlZENvbW1hbmQgZXh0ZW5kcyBCYXNlQ29tbWFuZCB7XG4gIHByb3RlY3RlZCBhc3luYyBpbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHN1cGVyLmluaXQoKTtcbiAgICB0aGlzLnJlcXVpcmVBdXRoKCk7XG4gIH1cbn1cbiJdfQ==
|