@sendly/cli 3.17.0 → 3.18.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/credits/balance.js +2 -2
- package/dist/commands/enterprise/analytics/credits.d.ts +11 -0
- package/dist/commands/enterprise/analytics/credits.js +59 -0
- package/dist/commands/enterprise/analytics/delivery.d.ts +10 -0
- package/dist/commands/enterprise/analytics/delivery.js +60 -0
- package/dist/commands/enterprise/analytics/messages.d.ts +11 -0
- package/dist/commands/enterprise/analytics/messages.js +59 -0
- package/dist/commands/enterprise/analytics/overview.d.ts +10 -0
- package/dist/commands/enterprise/analytics/overview.js +42 -0
- package/dist/commands/enterprise/billing.d.ts +12 -0
- package/dist/commands/enterprise/billing.js +70 -0
- package/dist/commands/enterprise/credits.d.ts +13 -0
- package/dist/commands/enterprise/credits.js +37 -0
- package/dist/commands/enterprise/keys/create.d.ts +15 -0
- package/dist/commands/enterprise/keys/create.js +53 -0
- package/dist/commands/enterprise/keys/list.d.ts +13 -0
- package/dist/commands/enterprise/keys/list.js +69 -0
- package/dist/commands/enterprise/keys/revoke.d.ts +15 -0
- package/dist/commands/enterprise/keys/revoke.js +57 -0
- package/dist/commands/enterprise/provision.d.ts +17 -0
- package/dist/commands/enterprise/provision.js +143 -0
- package/dist/commands/enterprise/quota/get.d.ts +13 -0
- package/dist/commands/enterprise/quota/get.js +40 -0
- package/dist/commands/enterprise/quota/set.d.ts +15 -0
- package/dist/commands/enterprise/quota/set.js +69 -0
- package/dist/commands/enterprise/status.d.ts +10 -0
- package/dist/commands/enterprise/status.js +45 -0
- package/dist/commands/enterprise/transfer-credits.d.ts +14 -0
- package/dist/commands/enterprise/transfer-credits.js +76 -0
- package/dist/commands/enterprise/webhooks/delete.d.ts +11 -0
- package/dist/commands/enterprise/webhooks/delete.js +44 -0
- package/dist/commands/enterprise/webhooks/get.d.ts +10 -0
- package/dist/commands/enterprise/webhooks/get.js +38 -0
- package/dist/commands/enterprise/webhooks/set.d.ts +12 -0
- package/dist/commands/enterprise/webhooks/set.js +48 -0
- package/dist/commands/enterprise/webhooks/test.d.ts +10 -0
- package/dist/commands/enterprise/webhooks/test.js +42 -0
- package/dist/commands/enterprise/workspaces/create.d.ts +11 -0
- package/dist/commands/enterprise/workspaces/create.js +37 -0
- package/dist/commands/enterprise/workspaces/delete.d.ts +14 -0
- package/dist/commands/enterprise/workspaces/delete.js +58 -0
- package/dist/commands/enterprise/workspaces/get.d.ts +13 -0
- package/dist/commands/enterprise/workspaces/get.js +49 -0
- package/dist/commands/enterprise/workspaces/list.d.ts +10 -0
- package/dist/commands/enterprise/workspaces/list.js +74 -0
- package/dist/commands/enterprise/workspaces/resume.d.ts +13 -0
- package/dist/commands/enterprise/workspaces/resume.js +35 -0
- package/dist/commands/enterprise/workspaces/suspend.d.ts +15 -0
- package/dist/commands/enterprise/workspaces/suspend.js +60 -0
- package/dist/commands/sms/batch.d.ts +2 -2
- package/dist/commands/sms/batch.js +5 -5
- package/dist/commands/sms/send.d.ts +2 -1
- package/dist/commands/sms/send.js +30 -11
- package/dist/lib/api-client.d.ts +2 -1
- package/dist/lib/api-client.js +7 -4
- package/oclif.manifest.json +1231 -5
- package/package.json +19 -1
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { AuthenticatedCommand } from "../../../lib/base-command.js";
|
|
2
|
+
import { apiClient } from "../../../lib/api-client.js";
|
|
3
|
+
import { table, json, info, colors, isJsonMode, formatRelativeTime, formatCredits, } from "../../../lib/output.js";
|
|
4
|
+
export default class WorkspacesList extends AuthenticatedCommand {
|
|
5
|
+
static description = "List all enterprise workspaces";
|
|
6
|
+
static examples = [
|
|
7
|
+
"<%= config.bin %> enterprise workspaces list",
|
|
8
|
+
"<%= config.bin %> enterprise workspaces list --json",
|
|
9
|
+
];
|
|
10
|
+
static flags = {
|
|
11
|
+
...AuthenticatedCommand.baseFlags,
|
|
12
|
+
};
|
|
13
|
+
async run() {
|
|
14
|
+
const workspaces = await apiClient.get("/api/v1/enterprise/workspaces");
|
|
15
|
+
if (isJsonMode()) {
|
|
16
|
+
json(workspaces);
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
if (workspaces.length === 0) {
|
|
20
|
+
info("No workspaces found");
|
|
21
|
+
console.log();
|
|
22
|
+
console.log(` Create one with ${colors.code("sendly enterprise workspaces create")}`);
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
console.log();
|
|
26
|
+
table(workspaces, [
|
|
27
|
+
{ header: "Name", key: "name", width: 24 },
|
|
28
|
+
{
|
|
29
|
+
header: "ID",
|
|
30
|
+
key: "id",
|
|
31
|
+
width: 18,
|
|
32
|
+
formatter: (v) => colors.dim(String(v).slice(0, 16)),
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
header: "Status",
|
|
36
|
+
key: "status",
|
|
37
|
+
width: 12,
|
|
38
|
+
formatter: (v) => v === "active"
|
|
39
|
+
? colors.success("active")
|
|
40
|
+
: v === "suspended"
|
|
41
|
+
? colors.error("suspended")
|
|
42
|
+
: colors.warning(String(v)),
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
header: "Verification",
|
|
46
|
+
key: "verificationStatus",
|
|
47
|
+
width: 14,
|
|
48
|
+
formatter: (v) => v === "approved"
|
|
49
|
+
? colors.success("verified")
|
|
50
|
+
: v === "pending"
|
|
51
|
+
? colors.warning("pending")
|
|
52
|
+
: colors.dim(String(v)),
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
header: "Credits",
|
|
56
|
+
key: "creditBalance",
|
|
57
|
+
width: 12,
|
|
58
|
+
formatter: (v) => formatCredits(Number(v)),
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
header: "Members",
|
|
62
|
+
key: "memberCount",
|
|
63
|
+
width: 8,
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
header: "Created",
|
|
67
|
+
key: "createdAt",
|
|
68
|
+
width: 12,
|
|
69
|
+
formatter: (v) => formatRelativeTime(String(v)),
|
|
70
|
+
},
|
|
71
|
+
]);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21tYW5kcy9lbnRlcnByaXNlL3dvcmtzcGFjZXMvbGlzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdkQsT0FBTyxFQUNMLEtBQUssRUFDTCxJQUFJLEVBQ0osSUFBSSxFQUNKLE1BQU0sRUFDTixVQUFVLEVBQ1Ysa0JBQWtCLEVBQ2xCLGFBQWEsR0FDZCxNQUFNLHdCQUF3QixDQUFDO0FBYWhDLE1BQU0sQ0FBQyxPQUFPLE9BQU8sY0FBZSxTQUFRLG9CQUFvQjtJQUM5RCxNQUFNLENBQUMsV0FBVyxHQUFHLGdDQUFnQyxDQUFDO0lBRXRELE1BQU0sQ0FBQyxRQUFRLEdBQUc7UUFDaEIsOENBQThDO1FBQzlDLHFEQUFxRDtLQUN0RCxDQUFDO0lBRUYsTUFBTSxDQUFDLEtBQUssR0FBRztRQUNiLEdBQUcsb0JBQW9CLENBQUMsU0FBUztLQUNsQyxDQUFDO0lBRUYsS0FBSyxDQUFDLEdBQUc7UUFDUCxNQUFNLFVBQVUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxHQUFHLENBQ3BDLCtCQUErQixDQUNoQyxDQUFDO1FBRUYsSUFBSSxVQUFVLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNqQixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUM1QixPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDZCxPQUFPLENBQUMsR0FBRyxDQUNULHFCQUFxQixNQUFNLENBQUMsSUFBSSxDQUFDLHFDQUFxQyxDQUFDLEVBQUUsQ0FDMUUsQ0FBQztZQUNGLE9BQU87UUFDVCxDQUFDO1FBRUQsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2QsS0FBSyxDQUFDLFVBQVUsRUFBRTtZQUNoQixFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQzFDO2dCQUNFLE1BQU0sRUFBRSxJQUFJO2dCQUNaLEdBQUcsRUFBRSxJQUFJO2dCQUNULEtBQUssRUFBRSxFQUFFO2dCQUNULFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQzthQUNyRDtZQUNEO2dCQUNFLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixHQUFHLEVBQUUsUUFBUTtnQkFDYixLQUFLLEVBQUUsRUFBRTtnQkFDVCxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNmLENBQUMsS0FBSyxRQUFRO29CQUNaLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztvQkFDMUIsQ0FBQyxDQUFDLENBQUMsS0FBSyxXQUFXO3dCQUNqQixDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUM7d0JBQzNCLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNsQztZQUNEO2dCQUNFLE1BQU0sRUFBRSxjQUFjO2dCQUN0QixHQUFHLEVBQUUsb0JBQW9CO2dCQUN6QixLQUFLLEVBQUUsRUFBRTtnQkFDVCxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNmLENBQUMsS0FBSyxVQUFVO29CQUNkLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztvQkFDNUIsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTO3dCQUNmLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQzt3QkFDM0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzlCO1lBQ0Q7Z0JBQ0UsTUFBTSxFQUFFLFNBQVM7Z0JBQ2pCLEdBQUcsRUFBRSxlQUFlO2dCQUNwQixLQUFLLEVBQUUsRUFBRTtnQkFDVCxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDM0M7WUFDRDtnQkFDRSxNQUFNLEVBQUUsU0FBUztnQkFDakIsR0FBRyxFQUFFLGFBQWE7Z0JBQ2xCLEtBQUssRUFBRSxDQUFDO2FBQ1Q7WUFDRDtnQkFDRSxNQUFNLEVBQUUsU0FBUztnQkFDakIsR0FBRyxFQUFFLFdBQVc7Z0JBQ2hCLEtBQUssRUFBRSxFQUFFO2dCQUNULFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2hEO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF1dGhlbnRpY2F0ZWRDb21tYW5kIH0gZnJvbSBcIi4uLy4uLy4uL2xpYi9iYXNlLWNvbW1hbmQuanNcIjtcbmltcG9ydCB7IGFwaUNsaWVudCB9IGZyb20gXCIuLi8uLi8uLi9saWIvYXBpLWNsaWVudC5qc1wiO1xuaW1wb3J0IHtcbiAgdGFibGUsXG4gIGpzb24sXG4gIGluZm8sXG4gIGNvbG9ycyxcbiAgaXNKc29uTW9kZSxcbiAgZm9ybWF0UmVsYXRpdmVUaW1lLFxuICBmb3JtYXRDcmVkaXRzLFxufSBmcm9tIFwiLi4vLi4vLi4vbGliL291dHB1dC5qc1wiO1xuXG5pbnRlcmZhY2UgV29ya3NwYWNlIHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBzbHVnOiBzdHJpbmc7XG4gIHN0YXR1czogc3RyaW5nO1xuICBjcmVkaXRCYWxhbmNlOiBudW1iZXI7XG4gIHZlcmlmaWNhdGlvblN0YXR1czogc3RyaW5nO1xuICBtZW1iZXJDb3VudDogbnVtYmVyO1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV29ya3NwYWNlc0xpc3QgZXh0ZW5kcyBBdXRoZW50aWNhdGVkQ29tbWFuZCB7XG4gIHN0YXRpYyBkZXNjcmlwdGlvbiA9IFwiTGlzdCBhbGwgZW50ZXJwcmlzZSB3b3Jrc3BhY2VzXCI7XG5cbiAgc3RhdGljIGV4YW1wbGVzID0gW1xuICAgIFwiPCU9IGNvbmZpZy5iaW4gJT4gZW50ZXJwcmlzZSB3b3Jrc3BhY2VzIGxpc3RcIixcbiAgICBcIjwlPSBjb25maWcuYmluICU+IGVudGVycHJpc2Ugd29ya3NwYWNlcyBsaXN0IC0tanNvblwiLFxuICBdO1xuXG4gIHN0YXRpYyBmbGFncyA9IHtcbiAgICAuLi5BdXRoZW50aWNhdGVkQ29tbWFuZC5iYXNlRmxhZ3MsXG4gIH07XG5cbiAgYXN5bmMgcnVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHdvcmtzcGFjZXMgPSBhd2FpdCBhcGlDbGllbnQuZ2V0PFdvcmtzcGFjZVtdPihcbiAgICAgIFwiL2FwaS92MS9lbnRlcnByaXNlL3dvcmtzcGFjZXNcIixcbiAgICApO1xuXG4gICAgaWYgKGlzSnNvbk1vZGUoKSkge1xuICAgICAganNvbih3b3Jrc3BhY2VzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAod29ya3NwYWNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGluZm8oXCJObyB3b3Jrc3BhY2VzIGZvdW5kXCIpO1xuICAgICAgY29uc29sZS5sb2coKTtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBgICBDcmVhdGUgb25lIHdpdGggJHtjb2xvcnMuY29kZShcInNlbmRseSBlbnRlcnByaXNlIHdvcmtzcGFjZXMgY3JlYXRlXCIpfWAsXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKCk7XG4gICAgdGFibGUod29ya3NwYWNlcywgW1xuICAgICAgeyBoZWFkZXI6IFwiTmFtZVwiLCBrZXk6IFwibmFtZVwiLCB3aWR0aDogMjQgfSxcbiAgICAgIHtcbiAgICAgICAgaGVhZGVyOiBcIklEXCIsXG4gICAgICAgIGtleTogXCJpZFwiLFxuICAgICAgICB3aWR0aDogMTgsXG4gICAgICAgIGZvcm1hdHRlcjogKHYpID0+IGNvbG9ycy5kaW0oU3RyaW5nKHYpLnNsaWNlKDAsIDE2KSksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBoZWFkZXI6IFwiU3RhdHVzXCIsXG4gICAgICAgIGtleTogXCJzdGF0dXNcIixcbiAgICAgICAgd2lkdGg6IDEyLFxuICAgICAgICBmb3JtYXR0ZXI6ICh2KSA9PlxuICAgICAgICAgIHYgPT09IFwiYWN0aXZlXCJcbiAgICAgICAgICAgID8gY29sb3JzLnN1Y2Nlc3MoXCJhY3RpdmVcIilcbiAgICAgICAgICAgIDogdiA9PT0gXCJzdXNwZW5kZWRcIlxuICAgICAgICAgICAgICA/IGNvbG9ycy5lcnJvcihcInN1c3BlbmRlZFwiKVxuICAgICAgICAgICAgICA6IGNvbG9ycy53YXJuaW5nKFN0cmluZyh2KSksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBoZWFkZXI6IFwiVmVyaWZpY2F0aW9uXCIsXG4gICAgICAgIGtleTogXCJ2ZXJpZmljYXRpb25TdGF0dXNcIixcbiAgICAgICAgd2lkdGg6IDE0LFxuICAgICAgICBmb3JtYXR0ZXI6ICh2KSA9PlxuICAgICAgICAgIHYgPT09IFwiYXBwcm92ZWRcIlxuICAgICAgICAgICAgPyBjb2xvcnMuc3VjY2VzcyhcInZlcmlmaWVkXCIpXG4gICAgICAgICAgICA6IHYgPT09IFwicGVuZGluZ1wiXG4gICAgICAgICAgICAgID8gY29sb3JzLndhcm5pbmcoXCJwZW5kaW5nXCIpXG4gICAgICAgICAgICAgIDogY29sb3JzLmRpbShTdHJpbmcodikpLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaGVhZGVyOiBcIkNyZWRpdHNcIixcbiAgICAgICAga2V5OiBcImNyZWRpdEJhbGFuY2VcIixcbiAgICAgICAgd2lkdGg6IDEyLFxuICAgICAgICBmb3JtYXR0ZXI6ICh2KSA9PiBmb3JtYXRDcmVkaXRzKE51bWJlcih2KSksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBoZWFkZXI6IFwiTWVtYmVyc1wiLFxuICAgICAgICBrZXk6IFwibWVtYmVyQ291bnRcIixcbiAgICAgICAgd2lkdGg6IDgsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBoZWFkZXI6IFwiQ3JlYXRlZFwiLFxuICAgICAgICBrZXk6IFwiY3JlYXRlZEF0XCIsXG4gICAgICAgIHdpZHRoOiAxMixcbiAgICAgICAgZm9ybWF0dGVyOiAodikgPT4gZm9ybWF0UmVsYXRpdmVUaW1lKFN0cmluZyh2KSksXG4gICAgICB9LFxuICAgIF0pO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { AuthenticatedCommand } from "../../../lib/base-command.js";
|
|
2
|
+
export default class WorkspacesResume extends AuthenticatedCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static args: {
|
|
6
|
+
workspaceId: import("@oclif/core/lib/interfaces/parser.js").Arg<string, Record<string, unknown>>;
|
|
7
|
+
};
|
|
8
|
+
static flags: {
|
|
9
|
+
json: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
10
|
+
quiet: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
11
|
+
};
|
|
12
|
+
run(): Promise<void>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Args } from "@oclif/core";
|
|
2
|
+
import { AuthenticatedCommand } from "../../../lib/base-command.js";
|
|
3
|
+
import { apiClient } from "../../../lib/api-client.js";
|
|
4
|
+
import { success, json, isJsonMode, spinner } from "../../../lib/output.js";
|
|
5
|
+
export default class WorkspacesResume extends AuthenticatedCommand {
|
|
6
|
+
static description = "Resume a suspended enterprise workspace";
|
|
7
|
+
static examples = [
|
|
8
|
+
"<%= config.bin %> enterprise workspaces resume org_abc123",
|
|
9
|
+
];
|
|
10
|
+
static args = {
|
|
11
|
+
workspaceId: Args.string({
|
|
12
|
+
description: "Workspace ID",
|
|
13
|
+
required: true,
|
|
14
|
+
}),
|
|
15
|
+
};
|
|
16
|
+
static flags = {
|
|
17
|
+
...AuthenticatedCommand.baseFlags,
|
|
18
|
+
};
|
|
19
|
+
async run() {
|
|
20
|
+
const { args } = await this.parse(WorkspacesResume);
|
|
21
|
+
const spin = spinner("Resuming workspace...");
|
|
22
|
+
spin.start();
|
|
23
|
+
const response = await apiClient.post(`/api/v1/enterprise/workspaces/${args.workspaceId}/resume`);
|
|
24
|
+
spin.succeed("Workspace resumed");
|
|
25
|
+
if (isJsonMode()) {
|
|
26
|
+
json(response);
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
success("Workspace resumed", {
|
|
30
|
+
ID: args.workspaceId,
|
|
31
|
+
Status: "active",
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdW1lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2VudGVycHJpc2Uvd29ya3NwYWNlcy9yZXN1bWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNuQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBUTVFLE1BQU0sQ0FBQyxPQUFPLE9BQU8sZ0JBQWlCLFNBQVEsb0JBQW9CO0lBQ2hFLE1BQU0sQ0FBQyxXQUFXLEdBQUcseUNBQXlDLENBQUM7SUFFL0QsTUFBTSxDQUFDLFFBQVEsR0FBRztRQUNoQiwyREFBMkQ7S0FDNUQsQ0FBQztJQUVGLE1BQU0sQ0FBQyxJQUFJLEdBQUc7UUFDWixXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUN2QixXQUFXLEVBQUUsY0FBYztZQUMzQixRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUM7S0FDSCxDQUFDO0lBRUYsTUFBTSxDQUFDLEtBQUssR0FBRztRQUNiLEdBQUcsb0JBQW9CLENBQUMsU0FBUztLQUNsQyxDQUFDO0lBRUYsS0FBSyxDQUFDLEdBQUc7UUFDUCxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFcEQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRWIsTUFBTSxRQUFRLEdBQUcsTUFBTSxTQUFTLENBQUMsSUFBSSxDQUNuQyxpQ0FBaUMsSUFBSSxDQUFDLFdBQVcsU0FBUyxDQUMzRCxDQUFDO1FBRUYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBRWxDLElBQUksVUFBVSxFQUFFLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDZixPQUFPO1FBQ1QsQ0FBQztRQUVELE9BQU8sQ0FBQyxtQkFBbUIsRUFBRTtZQUMzQixFQUFFLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDcEIsTUFBTSxFQUFFLFFBQVE7U0FDakIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFyZ3MgfSBmcm9tIFwiQG9jbGlmL2NvcmVcIjtcbmltcG9ydCB7IEF1dGhlbnRpY2F0ZWRDb21tYW5kIH0gZnJvbSBcIi4uLy4uLy4uL2xpYi9iYXNlLWNvbW1hbmQuanNcIjtcbmltcG9ydCB7IGFwaUNsaWVudCB9IGZyb20gXCIuLi8uLi8uLi9saWIvYXBpLWNsaWVudC5qc1wiO1xuaW1wb3J0IHsgc3VjY2VzcywganNvbiwgaXNKc29uTW9kZSwgc3Bpbm5lciB9IGZyb20gXCIuLi8uLi8uLi9saWIvb3V0cHV0LmpzXCI7XG5cbmludGVyZmFjZSBSZXN1bWVSZXNwb25zZSB7XG4gIHN1Y2Nlc3M6IGJvb2xlYW47XG4gIHdvcmtzcGFjZUlkOiBzdHJpbmc7XG4gIHN0YXR1czogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXb3Jrc3BhY2VzUmVzdW1lIGV4dGVuZHMgQXV0aGVudGljYXRlZENvbW1hbmQge1xuICBzdGF0aWMgZGVzY3JpcHRpb24gPSBcIlJlc3VtZSBhIHN1c3BlbmRlZCBlbnRlcnByaXNlIHdvcmtzcGFjZVwiO1xuXG4gIHN0YXRpYyBleGFtcGxlcyA9IFtcbiAgICBcIjwlPSBjb25maWcuYmluICU+IGVudGVycHJpc2Ugd29ya3NwYWNlcyByZXN1bWUgb3JnX2FiYzEyM1wiLFxuICBdO1xuXG4gIHN0YXRpYyBhcmdzID0ge1xuICAgIHdvcmtzcGFjZUlkOiBBcmdzLnN0cmluZyh7XG4gICAgICBkZXNjcmlwdGlvbjogXCJXb3Jrc3BhY2UgSURcIixcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgIH0pLFxuICB9O1xuXG4gIHN0YXRpYyBmbGFncyA9IHtcbiAgICAuLi5BdXRoZW50aWNhdGVkQ29tbWFuZC5iYXNlRmxhZ3MsXG4gIH07XG5cbiAgYXN5bmMgcnVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgYXJncyB9ID0gYXdhaXQgdGhpcy5wYXJzZShXb3Jrc3BhY2VzUmVzdW1lKTtcblxuICAgIGNvbnN0IHNwaW4gPSBzcGlubmVyKFwiUmVzdW1pbmcgd29ya3NwYWNlLi4uXCIpO1xuICAgIHNwaW4uc3RhcnQoKTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXBpQ2xpZW50LnBvc3Q8UmVzdW1lUmVzcG9uc2U+KFxuICAgICAgYC9hcGkvdjEvZW50ZXJwcmlzZS93b3Jrc3BhY2VzLyR7YXJncy53b3Jrc3BhY2VJZH0vcmVzdW1lYCxcbiAgICApO1xuXG4gICAgc3Bpbi5zdWNjZWVkKFwiV29ya3NwYWNlIHJlc3VtZWRcIik7XG5cbiAgICBpZiAoaXNKc29uTW9kZSgpKSB7XG4gICAgICBqc29uKHJlc3BvbnNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzdWNjZXNzKFwiV29ya3NwYWNlIHJlc3VtZWRcIiwge1xuICAgICAgSUQ6IGFyZ3Mud29ya3NwYWNlSWQsXG4gICAgICBTdGF0dXM6IFwiYWN0aXZlXCIsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { AuthenticatedCommand } from "../../../lib/base-command.js";
|
|
2
|
+
export default class WorkspacesSuspend extends AuthenticatedCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static args: {
|
|
6
|
+
workspaceId: import("@oclif/core/lib/interfaces/parser.js").Arg<string, Record<string, unknown>>;
|
|
7
|
+
};
|
|
8
|
+
static flags: {
|
|
9
|
+
reason: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
10
|
+
yes: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
11
|
+
json: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
12
|
+
quiet: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
13
|
+
};
|
|
14
|
+
run(): Promise<void>;
|
|
15
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { Args, Flags } from "@oclif/core";
|
|
2
|
+
import { AuthenticatedCommand } from "../../../lib/base-command.js";
|
|
3
|
+
import { apiClient } from "../../../lib/api-client.js";
|
|
4
|
+
import { success, error, json, isJsonMode, spinner } from "../../../lib/output.js";
|
|
5
|
+
import inquirer from "inquirer";
|
|
6
|
+
export default class WorkspacesSuspend extends AuthenticatedCommand {
|
|
7
|
+
static description = "Suspend an enterprise workspace";
|
|
8
|
+
static examples = [
|
|
9
|
+
"<%= config.bin %> enterprise workspaces suspend org_abc123",
|
|
10
|
+
'<%= config.bin %> enterprise workspaces suspend org_abc123 --reason "Policy violation"',
|
|
11
|
+
];
|
|
12
|
+
static args = {
|
|
13
|
+
workspaceId: Args.string({
|
|
14
|
+
description: "Workspace ID",
|
|
15
|
+
required: true,
|
|
16
|
+
}),
|
|
17
|
+
};
|
|
18
|
+
static flags = {
|
|
19
|
+
...AuthenticatedCommand.baseFlags,
|
|
20
|
+
reason: Flags.string({
|
|
21
|
+
char: "r",
|
|
22
|
+
description: "Reason for suspension",
|
|
23
|
+
}),
|
|
24
|
+
yes: Flags.boolean({
|
|
25
|
+
char: "y",
|
|
26
|
+
description: "Skip confirmation prompt",
|
|
27
|
+
default: false,
|
|
28
|
+
}),
|
|
29
|
+
};
|
|
30
|
+
async run() {
|
|
31
|
+
const { args, flags } = await this.parse(WorkspacesSuspend);
|
|
32
|
+
if (!flags.yes && !isJsonMode()) {
|
|
33
|
+
const { confirm } = await inquirer.prompt([
|
|
34
|
+
{
|
|
35
|
+
type: "confirm",
|
|
36
|
+
name: "confirm",
|
|
37
|
+
message: `Suspend workspace ${args.workspaceId}? This will halt all messaging.`,
|
|
38
|
+
default: false,
|
|
39
|
+
},
|
|
40
|
+
]);
|
|
41
|
+
if (!confirm) {
|
|
42
|
+
error("Suspension cancelled");
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
const spin = spinner("Suspending workspace...");
|
|
47
|
+
spin.start();
|
|
48
|
+
const response = await apiClient.post(`/api/v1/enterprise/workspaces/${args.workspaceId}/suspend`, flags.reason ? { reason: flags.reason } : undefined);
|
|
49
|
+
spin.succeed("Workspace suspended");
|
|
50
|
+
if (isJsonMode()) {
|
|
51
|
+
json(response);
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
success("Workspace suspended", {
|
|
55
|
+
ID: args.workspaceId,
|
|
56
|
+
Status: "suspended",
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VzcGVuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21tYW5kcy9lbnRlcnByaXNlL3dvcmtzcGFjZXMvc3VzcGVuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMxQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRixPQUFPLFFBQVEsTUFBTSxVQUFVLENBQUM7QUFRaEMsTUFBTSxDQUFDLE9BQU8sT0FBTyxpQkFBa0IsU0FBUSxvQkFBb0I7SUFDakUsTUFBTSxDQUFDLFdBQVcsR0FBRyxpQ0FBaUMsQ0FBQztJQUV2RCxNQUFNLENBQUMsUUFBUSxHQUFHO1FBQ2hCLDREQUE0RDtRQUM1RCx3RkFBd0Y7S0FDekYsQ0FBQztJQUVGLE1BQU0sQ0FBQyxJQUFJLEdBQUc7UUFDWixXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUN2QixXQUFXLEVBQUUsY0FBYztZQUMzQixRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUM7S0FDSCxDQUFDO0lBRUYsTUFBTSxDQUFDLEtBQUssR0FBRztRQUNiLEdBQUcsb0JBQW9CLENBQUMsU0FBUztRQUNqQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNuQixJQUFJLEVBQUUsR0FBRztZQUNULFdBQVcsRUFBRSx1QkFBdUI7U0FDckMsQ0FBQztRQUNGLEdBQUcsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDO1lBQ2pCLElBQUksRUFBRSxHQUFHO1lBQ1QsV0FBVyxFQUFFLDBCQUEwQjtZQUN2QyxPQUFPLEVBQUUsS0FBSztTQUNmLENBQUM7S0FDSCxDQUFDO0lBRUYsS0FBSyxDQUFDLEdBQUc7UUFDUCxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRTVELElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztZQUNoQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsTUFBTSxRQUFRLENBQUMsTUFBTSxDQUFDO2dCQUN4QztvQkFDRSxJQUFJLEVBQUUsU0FBUztvQkFDZixJQUFJLEVBQUUsU0FBUztvQkFDZixPQUFPLEVBQUUscUJBQXFCLElBQUksQ0FBQyxXQUFXLGlDQUFpQztvQkFDL0UsT0FBTyxFQUFFLEtBQUs7aUJBQ2Y7YUFDRixDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2IsS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7Z0JBQzlCLE9BQU87WUFDVCxDQUFDO1FBQ0gsQ0FBQztRQUVELE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUViLE1BQU0sUUFBUSxHQUFHLE1BQU0sU0FBUyxDQUFDLElBQUksQ0FDbkMsaUNBQWlDLElBQUksQ0FBQyxXQUFXLFVBQVUsRUFDM0QsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQ3BELENBQUM7UUFFRixJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFFcEMsSUFBSSxVQUFVLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNmLE9BQU87UUFDVCxDQUFDO1FBRUQsT0FBTyxDQUFDLHFCQUFxQixFQUFFO1lBQzdCLEVBQUUsRUFBRSxJQUFJLENBQUMsV0FBVztZQUNwQixNQUFNLEVBQUUsV0FBVztTQUNwQixDQUFDLENBQUM7SUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXJncywgRmxhZ3MgfSBmcm9tIFwiQG9jbGlmL2NvcmVcIjtcbmltcG9ydCB7IEF1dGhlbnRpY2F0ZWRDb21tYW5kIH0gZnJvbSBcIi4uLy4uLy4uL2xpYi9iYXNlLWNvbW1hbmQuanNcIjtcbmltcG9ydCB7IGFwaUNsaWVudCB9IGZyb20gXCIuLi8uLi8uLi9saWIvYXBpLWNsaWVudC5qc1wiO1xuaW1wb3J0IHsgc3VjY2VzcywgZXJyb3IsIGpzb24sIGlzSnNvbk1vZGUsIHNwaW5uZXIgfSBmcm9tIFwiLi4vLi4vLi4vbGliL291dHB1dC5qc1wiO1xuaW1wb3J0IGlucXVpcmVyIGZyb20gXCJpbnF1aXJlclwiO1xuXG5pbnRlcmZhY2UgU3VzcGVuZFJlc3BvbnNlIHtcbiAgc3VjY2VzczogYm9vbGVhbjtcbiAgd29ya3NwYWNlSWQ6IHN0cmluZztcbiAgc3RhdHVzOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdvcmtzcGFjZXNTdXNwZW5kIGV4dGVuZHMgQXV0aGVudGljYXRlZENvbW1hbmQge1xuICBzdGF0aWMgZGVzY3JpcHRpb24gPSBcIlN1c3BlbmQgYW4gZW50ZXJwcmlzZSB3b3Jrc3BhY2VcIjtcblxuICBzdGF0aWMgZXhhbXBsZXMgPSBbXG4gICAgXCI8JT0gY29uZmlnLmJpbiAlPiBlbnRlcnByaXNlIHdvcmtzcGFjZXMgc3VzcGVuZCBvcmdfYWJjMTIzXCIsXG4gICAgJzwlPSBjb25maWcuYmluICU+IGVudGVycHJpc2Ugd29ya3NwYWNlcyBzdXNwZW5kIG9yZ19hYmMxMjMgLS1yZWFzb24gXCJQb2xpY3kgdmlvbGF0aW9uXCInLFxuICBdO1xuXG4gIHN0YXRpYyBhcmdzID0ge1xuICAgIHdvcmtzcGFjZUlkOiBBcmdzLnN0cmluZyh7XG4gICAgICBkZXNjcmlwdGlvbjogXCJXb3Jrc3BhY2UgSURcIixcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgIH0pLFxuICB9O1xuXG4gIHN0YXRpYyBmbGFncyA9IHtcbiAgICAuLi5BdXRoZW50aWNhdGVkQ29tbWFuZC5iYXNlRmxhZ3MsXG4gICAgcmVhc29uOiBGbGFncy5zdHJpbmcoe1xuICAgICAgY2hhcjogXCJyXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJSZWFzb24gZm9yIHN1c3BlbnNpb25cIixcbiAgICB9KSxcbiAgICB5ZXM6IEZsYWdzLmJvb2xlYW4oe1xuICAgICAgY2hhcjogXCJ5XCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJTa2lwIGNvbmZpcm1hdGlvbiBwcm9tcHRcIixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgIH0pLFxuICB9O1xuXG4gIGFzeW5jIHJ1bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGFyZ3MsIGZsYWdzIH0gPSBhd2FpdCB0aGlzLnBhcnNlKFdvcmtzcGFjZXNTdXNwZW5kKTtcblxuICAgIGlmICghZmxhZ3MueWVzICYmICFpc0pzb25Nb2RlKCkpIHtcbiAgICAgIGNvbnN0IHsgY29uZmlybSB9ID0gYXdhaXQgaW5xdWlyZXIucHJvbXB0KFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwiY29uZmlybVwiLFxuICAgICAgICAgIG5hbWU6IFwiY29uZmlybVwiLFxuICAgICAgICAgIG1lc3NhZ2U6IGBTdXNwZW5kIHdvcmtzcGFjZSAke2FyZ3Mud29ya3NwYWNlSWR9PyBUaGlzIHdpbGwgaGFsdCBhbGwgbWVzc2FnaW5nLmAsXG4gICAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICBdKTtcblxuICAgICAgaWYgKCFjb25maXJtKSB7XG4gICAgICAgIGVycm9yKFwiU3VzcGVuc2lvbiBjYW5jZWxsZWRcIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzcGluID0gc3Bpbm5lcihcIlN1c3BlbmRpbmcgd29ya3NwYWNlLi4uXCIpO1xuICAgIHNwaW4uc3RhcnQoKTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXBpQ2xpZW50LnBvc3Q8U3VzcGVuZFJlc3BvbnNlPihcbiAgICAgIGAvYXBpL3YxL2VudGVycHJpc2Uvd29ya3NwYWNlcy8ke2FyZ3Mud29ya3NwYWNlSWR9L3N1c3BlbmRgLFxuICAgICAgZmxhZ3MucmVhc29uID8geyByZWFzb246IGZsYWdzLnJlYXNvbiB9IDogdW5kZWZpbmVkLFxuICAgICk7XG5cbiAgICBzcGluLnN1Y2NlZWQoXCJXb3Jrc3BhY2Ugc3VzcGVuZGVkXCIpO1xuXG4gICAgaWYgKGlzSnNvbk1vZGUoKSkge1xuICAgICAganNvbihyZXNwb25zZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3VjY2VzcyhcIldvcmtzcGFjZSBzdXNwZW5kZWRcIiwge1xuICAgICAgSUQ6IGFyZ3Mud29ya3NwYWNlSWQsXG4gICAgICBTdGF0dXM6IFwic3VzcGVuZGVkXCIsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -25,11 +25,11 @@ export default class SmsBatch extends AuthenticatedCommand {
|
|
|
25
25
|
private reuseBatch;
|
|
26
26
|
/**
|
|
27
27
|
* Send to inline recipients (--to flag)
|
|
28
|
-
* This path doesn't upload to
|
|
28
|
+
* This path doesn't upload to R2 since it's just a few numbers
|
|
29
29
|
*/
|
|
30
30
|
private sendInlineRecipients;
|
|
31
31
|
/**
|
|
32
|
-
* Upload CSV to
|
|
32
|
+
* Upload CSV to R2 and send
|
|
33
33
|
*/
|
|
34
34
|
private uploadAndSend;
|
|
35
35
|
/**
|
|
@@ -69,7 +69,7 @@ export default class SmsBatch extends AuthenticatedCommand {
|
|
|
69
69
|
if (flags.to) {
|
|
70
70
|
return this.sendInlineRecipients(flags);
|
|
71
71
|
}
|
|
72
|
-
// Handle --file flag (upload to
|
|
72
|
+
// Handle --file flag (upload to R2)
|
|
73
73
|
if (flags.file) {
|
|
74
74
|
return this.uploadAndSend(flags);
|
|
75
75
|
}
|
|
@@ -144,7 +144,7 @@ export default class SmsBatch extends AuthenticatedCommand {
|
|
|
144
144
|
}
|
|
145
145
|
/**
|
|
146
146
|
* Send to inline recipients (--to flag)
|
|
147
|
-
* This path doesn't upload to
|
|
147
|
+
* This path doesn't upload to R2 since it's just a few numbers
|
|
148
148
|
*/
|
|
149
149
|
async sendInlineRecipients(flags) {
|
|
150
150
|
if (!flags.text) {
|
|
@@ -168,7 +168,7 @@ export default class SmsBatch extends AuthenticatedCommand {
|
|
|
168
168
|
await this.previewOrSend(messages, flags);
|
|
169
169
|
}
|
|
170
170
|
/**
|
|
171
|
-
* Upload CSV to
|
|
171
|
+
* Upload CSV to R2 and send
|
|
172
172
|
*/
|
|
173
173
|
async uploadAndSend(flags) {
|
|
174
174
|
const filePath = flags.file;
|
|
@@ -196,7 +196,7 @@ export default class SmsBatch extends AuthenticatedCommand {
|
|
|
196
196
|
}
|
|
197
197
|
const spin = spinner(`Uploading ${filename}...`).start();
|
|
198
198
|
try {
|
|
199
|
-
// Upload to
|
|
199
|
+
// Upload to R2 via CLI endpoint
|
|
200
200
|
const response = await apiClient.uploadFile("/api/cli/batch/upload", { buffer, filename, mimetype: "text/csv" });
|
|
201
201
|
spin.stop();
|
|
202
202
|
// Show upload summary
|
|
@@ -433,4 +433,4 @@ export default class SmsBatch extends AuthenticatedCommand {
|
|
|
433
433
|
return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
|
|
434
434
|
}
|
|
435
435
|
}
|
|
436
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbWFuZHMvc21zL2JhdGNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDcEMsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDOUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxFQUNMLE9BQU8sRUFDUCxLQUFLLEVBQ0wsT0FBTyxFQUNQLE1BQU0sRUFDTixJQUFJLEVBQ0osVUFBVSxHQUNYLE1BQU0scUJBQXFCLENBQUM7QUE2RzdCLE1BQU0sQ0FBQyxPQUFPLE9BQU8sUUFBUyxTQUFRLG9CQUFvQjtJQUN4RCxNQUFNLENBQUMsV0FBVyxHQUNoQixnRUFBZ0UsQ0FBQztJQUVuRSxNQUFNLENBQUMsUUFBUSxHQUFHO1FBQ2hCLG1EQUFtRDtRQUNuRCx3RUFBd0U7UUFDeEUsNEVBQTRFO1FBQzVFLDZEQUE2RDtRQUM3RCx1RkFBdUY7UUFDdkYsbURBQW1EO1FBQ25ELHVDQUF1QztLQUN4QyxDQUFDO0lBRUYsTUFBTSxDQUFDLEtBQUssR0FBRztRQUNiLEdBQUcsb0JBQW9CLENBQUMsU0FBUztRQUNqQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNqQixJQUFJLEVBQUUsR0FBRztZQUNULFdBQVcsRUFBRSx5REFBeUQ7WUFDdEUsU0FBUyxFQUFFLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUM7U0FDdEMsQ0FBQztRQUNGLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ2YsSUFBSSxFQUFFLEdBQUc7WUFDVCxXQUFX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RSxPQUFPLEdBQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDbEUsT0FBTyxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDcEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZsYWdzIH0gZnJvbSBcIkBvY2xpZi9jb3JlXCI7XG5pbXBvcnQgeyByZWFkRmlsZVN5bmMsIGV4aXN0c1N5bmMgfSBmcm9tIFwiZnNcIjtcbmltcG9ydCB7IGJhc2VuYW1lIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IEF1dGhlbnRpY2F0ZWRDb21tYW5kIH0gZnJvbSBcIi4uLy4uL2xpYi9iYXNlLWNvbW1hbmQuanNcIjtcbmltcG9ydCB7IGFwaUNsaWVudCB9IGZyb20gXCIuLi8uLi9saWIvYXBpLWNsaWVudC5qc1wiO1xuaW1wb3J0IHtcbiAgc3VjY2VzcyxcbiAgZXJyb3IsXG4gIHNwaW5uZXIsXG4gIGNvbG9ycyxcbiAganNvbixcbiAgaXNKc29uTW9kZSxcbn0gZnJvbSBcIi4uLy4uL2xpYi9vdXRwdXQuanNcIjtcblxuaW50ZXJmYWNlIEJhdGNoVXBsb2FkUmVzcG9uc2Uge1xuICB1cGxvYWQ6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGZpbGVuYW1lOiBzdHJpbmc7XG4gICAgc2l6ZTogbnVtYmVyO1xuICAgIGNyZWF0ZWRBdDogc3RyaW5nO1xuICB9O1xuICB2YWxpZGF0aW9uOiB7XG4gICAgdG90YWxSb3dzOiBudW1iZXI7XG4gICAgdmFsaWRDb3VudDogbnVtYmVyO1xuICAgIGludmFsaWRDb3VudDogbnVtYmVyO1xuICAgIGR1cGxpY2F0ZXNSZW1vdmVkOiBudW1iZXI7XG4gICAgaGFzSGVhZGVyOiBib29sZWFuO1xuICB9O1xuICByZWNpcGllbnRzOiBBcnJheTx7IHRvOiBzdHJpbmc7IHRleHQ/OiBzdHJpbmcgfT47XG4gIGVycm9yczogQXJyYXk8eyByb3c6IG51bWJlcjsgcGhvbmU6IHN0cmluZzsgZXJyb3I6IHN0cmluZyB9PjtcbiAgaGFzTW9yZUVycm9yczogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEJhdGNoSGlzdG9yeVJlc3BvbnNlIHtcbiAgdXBsb2FkczogQXJyYXk8e1xuICAgIGlkOiBzdHJpbmc7XG4gICAgZmlsZW5hbWU6IHN0cmluZztcbiAgICBzaXplOiBudW1iZXI7XG4gICAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gICAgbWV0YWRhdGE6IHtcbiAgICAgIHRvdGFsUm93czogbnVtYmVyO1xuICAgICAgdmFsaWRDb3VudDogbnVtYmVyO1xuICAgICAgaW52YWxpZENvdW50OiBudW1iZXI7XG4gICAgICBzb3VyY2U/OiBzdHJpbmc7XG4gICAgfTtcbiAgfT47XG59XG5cbmludGVyZmFjZSBCYXRjaFJlc3BvbnNlIHtcbiAgYmF0Y2hJZDogc3RyaW5nO1xuICB0b3RhbDogbnVtYmVyO1xuICBzZW50OiBudW1iZXI7XG4gIHF1ZXVlZDogbnVtYmVyO1xuICBmYWlsZWQ6IG51bWJlcjtcbiAgY3JlZGl0c1VzZWQ6IG51bWJlcjtcbiAgY3JlZGl0c1JlZnVuZGVkOiBudW1iZXI7XG4gIHN0YXR1czogc3RyaW5nO1xuICBtZXNzYWdlcz86IEFycmF5PHtcbiAgICBpbmRleDogbnVtYmVyO1xuICAgIGlkOiBzdHJpbmc7XG4gICAgdG86IHN0cmluZztcbiAgICBzdGF0dXM6IHN0cmluZztcbiAgICBlcnJvcj86IHN0cmluZztcbiAgfT47XG59XG5cbmludGVyZmFjZSBCYXRjaFByZXZpZXdSZXNwb25zZSB7XG4gIHRvdGFsOiBudW1iZXI7XG4gIHNlbmRhYmxlOiBudW1iZXI7XG4gIGJsb2NrZWQ6IG51bWJlcjtcbiAgZHVwbGljYXRlczogbnVtYmVyO1xuICBjcmVkaXRzTmVlZGVkOiBudW1iZXI7XG4gIGNyZWRpdEJhbGFuY2U6IG51bWJlcjtcbiAgaGFzU3VmZmljaWVudENyZWRpdHM6IGJvb2xlYW47XG4gIGtleVR5cGU6IFwidGVzdFwiIHwgXCJsaXZlXCI7XG4gIGtleVNjb3Blczogc3RyaW5nW107XG4gIGhhc1dyaXRlU2NvcGU6IGJvb2xlYW47XG4gIG1lc3NhZ2luZ1Byb2ZpbGU6IHtcbiAgICBpZDogc3RyaW5nIHwgbnVsbDtcbiAgICBjYW5TZW5kRG9tZXN0aWM6IGJvb2xlYW47XG4gICAgY2FuU2VuZEludGVybmF0aW9uYWw6IGJvb2xlYW47XG4gICAgdmVyaWZpY2F0aW9uU3RhdHVzOiBzdHJpbmcgfCBudWxsO1xuICAgIHZlcmlmaWNhdGlvblR5cGU6IHN0cmluZyB8IG51bGw7XG4gIH07XG4gIGJ5Q291bnRyeTogUmVjb3JkPFxuICAgIHN0cmluZyxcbiAgICB7XG4gICAgICBjb3VudDogbnVtYmVyO1xuICAgICAgY3JlZGl0czogbnVtYmVyO1xuICAgICAgdGllcjogc3RyaW5nO1xuICAgICAgYWxsb3dlZDogYm9vbGVhbjtcbiAgICAgIGJsb2NrZWRSZWFzb24/OiBzdHJpbmc7XG4gICAgfVxuICA+O1xuICBibG9ja2VkTWVzc2FnZXM6IEFycmF5PHtcbiAgICBpbmRleDogbnVtYmVyO1xuICAgIHRvOiBzdHJpbmc7XG4gICAgcmVhc29uOiBzdHJpbmc7XG4gIH0+O1xuICBjb21wbGlhbmNlOiB7XG4gICAgbWVzc2FnZVR5cGU6IFwibWFya2V0aW5nXCIgfCBcInRyYW5zYWN0aW9uYWxcIjtcbiAgICBzaGFmdEJsb2NrZWQ6IG51bWJlcjtcbiAgICBxdWlldEhvdXJzQmxvY2tlZDogbnVtYmVyO1xuICAgIHF1aWV0SG91cnNSZXNjaGVkdWxlZDogbnVtYmVyO1xuICAgIHNoYWZ0QmxvY2tlZE1lc3NhZ2VzOiBBcnJheTx7XG4gICAgICBpbmRleDogbnVtYmVyO1xuICAgICAgdG86IHN0cmluZztcbiAgICAgIGNhdGVnb3J5OiBzdHJpbmc7XG4gICAgICBtYXRjaGVkVGVybXM6IHN0cmluZ1tdO1xuICAgIH0+O1xuICAgIHF1aWV0SG91cnNCbG9ja2VkTWVzc2FnZXM6IEFycmF5PHtcbiAgICAgIGluZGV4OiBudW1iZXI7XG4gICAgICB0bzogc3RyaW5nO1xuICAgICAgcmVjaXBpZW50VGltZXpvbmU6IHN0cmluZztcbiAgICAgIHJlY2lwaWVudExvY2FsVGltZTogc3RyaW5nO1xuICAgICAgbmV4dEFsbG93ZWRUaW1lPzogc3RyaW5nO1xuICAgIH0+O1xuICB9O1xuICB3YXJuaW5nczogc3RyaW5nW107XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNtc0JhdGNoIGV4dGVuZHMgQXV0aGVudGljYXRlZENvbW1hbmQge1xuICBzdGF0aWMgZGVzY3JpcHRpb24gPVxuICAgIFwiU2VuZCBiYXRjaCBTTVMgbWVzc2FnZXMgKHVwbG9hZHMgQ1NWIHRvIGNsb3VkIGZvciBhdWRpdCB0cmFpbClcIjtcblxuICBzdGF0aWMgZXhhbXBsZXMgPSBbXG4gICAgXCI8JT0gY29uZmlnLmJpbiAlPiBzbXMgYmF0Y2ggLS1maWxlIHJlY2lwaWVudHMuY3N2XCIsXG4gICAgJzwlPSBjb25maWcuYmluICU+IHNtcyBiYXRjaCAtLWZpbGUgcGhvbmVzLmNzdiAtLXRleHQgXCJIZWxsbyBldmVyeW9uZSFcIicsXG4gICAgJzwlPSBjb25maWcuYmluICU+IHNtcyBiYXRjaCAtLXRvICsxNTU1MTIzNDU2NywrMTU1NTk4NzY1NDMgLS10ZXh0IFwiSGVsbG8hXCInLFxuICAgIFwiPCU9IGNvbmZpZy5iaW4gJT4gc21zIGJhdGNoIC0tZmlsZSByZWNpcGllbnRzLmNzdiAtLWRyeS1ydW5cIixcbiAgICAnPCU9IGNvbmZpZy5iaW4gJT4gc21zIGJhdGNoIC0tZmlsZSBwaG9uZXMuY3N2IC0tdGV4dCBcIkNvZGU6IDEyM1wiIC0tdHlwZSB0cmFuc2FjdGlvbmFsJyxcbiAgICBcIjwlPSBjb25maWcuYmluICU+IHNtcyBiYXRjaCAtLXJldXNlIGFiYzEyMy1kZWY0NTZcIixcbiAgICBcIjwlPSBjb25maWcuYmluICU+IHNtcyBiYXRjaCAtLWhpc3RvcnlcIixcbiAgXTtcblxuICBzdGF0aWMgZmxhZ3MgPSB7XG4gICAgLi4uQXV0aGVudGljYXRlZENvbW1hbmQuYmFzZUZsYWdzLFxuICAgIGZpbGU6IEZsYWdzLnN0cmluZyh7XG4gICAgICBjaGFyOiBcIkZcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkNTViBmaWxlIHdpdGggcGhvbmUgbnVtYmVycyAoYW5kIG9wdGlvbmFsIG1lc3NhZ2UgdGV4dClcIixcbiAgICAgIGV4Y2x1c2l2ZTogW1widG9cIiwgXCJyZXVzZVwiLCBcImhpc3RvcnlcIl0sXG4gICAgfSksXG4gICAgdG86IEZsYWdzLnN0cmluZyh7XG4gICAgICBjaGFyOiBcInRcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkNvbW1hLXNlcGFyYXRlZCByZWNpcGllbnQgcGhvbmUgbnVtYmVycyAoRS4xNjQgZm9ybWF0KVwiLFxuICAgICAgZXhjbHVzaXZlOiBbXCJmaWxlXCIsIFwicmV1c2VcIiwgXCJoaXN0b3J5XCJdLFxuICAgIH0pLFxuICAgIHRleHQ6IEZsYWdzLnN0cmluZyh7XG4gICAgICBjaGFyOiBcIm1cIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIk1lc3NhZ2UgdGV4dCAocmVxdWlyZWQgd2l0aCAtLXRvLCBvcHRpb25hbCB3aXRoIC0tZmlsZSBpZiBDU1YgaGFzIHRleHQgY29sdW1uKVwiLFxuICAgIH0pLFxuICAgIGZyb206IEZsYWdzLnN0cmluZyh7XG4gICAgICBjaGFyOiBcImZcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlNlbmRlciBJRCBvciBwaG9uZSBudW1iZXIgZm9yIGFsbCBtZXNzYWdlc1wiLFxuICAgIH0pLFxuICAgIHR5cGU6IEZsYWdzLnN0cmluZyh7XG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJNZXNzYWdlIHR5cGU6IG1hcmtldGluZyAoZGVmYXVsdCkgb3IgdHJhbnNhY3Rpb25hbC4gVHJhbnNhY3Rpb25hbCBieXBhc3NlcyBxdWlldCBob3Vycy5cIixcbiAgICAgIG9wdGlvbnM6IFtcIm1hcmtldGluZ1wiLCBcInRyYW5zYWN0aW9uYWxcIl0sXG4gICAgICBkZWZhdWx0OiBcIm1hcmtldGluZ1wiLFxuICAgIH0pLFxuICAgIFwiZHJ5LXJ1blwiOiBGbGFncy5ib29sZWFuKHtcbiAgICAgIGNoYXI6IFwiZFwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiUHJldmlldyBiYXRjaCB3aXRob3V0IHNlbmRpbmcgKHZhbGlkYXRlcyBhY2Nlc3MsIHNob3dzIGNvc3QgYW5kIGNvbXBsaWFuY2UgYnJlYWtkb3duKVwiLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgfSksXG4gICAgcmV1c2U6IEZsYWdzLnN0cmluZyh7XG4gICAgICBkZXNjcmlwdGlvbjogXCJSZS11c2UgYSBwcmV2aW91cyBiYXRjaCB1cGxvYWQgYnkgSUQgKHNlZSAtLWhpc3RvcnkpXCIsXG4gICAgICBleGNsdXNpdmU6IFtcImZpbGVcIiwgXCJ0b1wiLCBcImhpc3RvcnlcIl0sXG4gICAgfSksXG4gICAgaGlzdG9yeTogRmxhZ3MuYm9vbGVhbih7XG4gICAgICBkZXNjcmlwdGlvbjogXCJTaG93IHJlY2VudCBiYXRjaCB1cGxvYWQgaGlzdG9yeVwiLFxuICAgICAgZXhjbHVzaXZlOiBbXCJmaWxlXCIsIFwidG9cIiwgXCJyZXVzZVwiXSxcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgIH0pLFxuICB9O1xuXG4gIGFzeW5jIHJ1bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGZsYWdzIH0gPSBhd2FpdCB0aGlzLnBhcnNlKFNtc0JhdGNoKTtcblxuICAgIC8vIEhhbmRsZSBoaXN0b3J5IHN1YmNvbW1hbmRcbiAgICBpZiAoZmxhZ3MuaGlzdG9yeSkge1xuICAgICAgcmV0dXJuIHRoaXMuc2hvd0hpc3RvcnkoKTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgcmV1c2Ugc3ViY29tbWFuZFxuICAgIGlmIChmbGFncy5yZXVzZSkge1xuICAgICAgcmV0dXJuIHRoaXMucmV1c2VCYXRjaChmbGFncy5yZXVzZSwgZmxhZ3MpO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSAtLXRvIGZsYWcgKGlubGluZSByZWNpcGllbnRzLCBubyB1cGxvYWQgbmVlZGVkKVxuICAgIGlmIChmbGFncy50bykge1xuICAgICAgcmV0dXJuIHRoaXMuc2VuZElubGluZVJlY2lwaWVudHMoZmxhZ3MpO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSAtLWZpbGUgZmxhZyAodXBsb2FkIHRvIFN1cGFiYXNlKVxuICAgIGlmIChmbGFncy5maWxlKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGxvYWRBbmRTZW5kKGZsYWdzKTtcbiAgICB9XG5cbiAgICBlcnJvcihcIkVpdGhlciAtLWZpbGUsIC0tdG8sIC0tcmV1c2UsIG9yIC0taGlzdG9yeSBpcyByZXF1aXJlZFwiKTtcbiAgICB0aGlzLmV4aXQoMSk7XG4gIH1cblxuICAvKipcbiAgICogU2hvdyBiYXRjaCB1cGxvYWQgaGlzdG9yeVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBzaG93SGlzdG9yeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzcGluID0gc3Bpbm5lcihcIkZldGNoaW5nIGJhdGNoIGhpc3RvcnkuLi5cIikuc3RhcnQoKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaUNsaWVudC5nZXQ8QmF0Y2hIaXN0b3J5UmVzcG9uc2U+KFxuICAgICAgICBcIi9hcGkvY2xpL2JhdGNoL2hpc3RvcnlcIixcbiAgICAgICAgeyBsaW1pdDogMTUgfSxcbiAgICAgICk7XG5cbiAgICAgIHNwaW4uc3RvcCgpO1xuXG4gICAgICBpZiAoaXNKc29uTW9kZSgpKSB7XG4gICAgICAgIGpzb24ocmVzcG9uc2UpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXNwb25zZS51cGxvYWRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb25zb2xlLmxvZyhjb2xvcnMuZGltKFwiXFxuTm8gYmF0Y2ggdXBsb2FkcyBmb3VuZC5cXG5cIikpO1xuICAgICAgICBjb25zb2xlLmxvZyhcIlVwbG9hZCBhIENTViBmaWxlIHdpdGg6IHNlbmRseSBzbXMgYmF0Y2ggLS1maWxlIHlvdXIuY3N2XCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnNvbGUubG9nKGNvbG9ycy5ib2xkKFwiXFxu8J+TgSBSZWNlbnQgQmF0Y2ggVXBsb2Fkc1xcblwiKSk7XG4gICAgICBjb25zb2xlLmxvZyhjb2xvcnMuZGltKFwi4pSAXCIucmVwZWF0KDgwKSkpO1xuXG4gICAgICBmb3IgKGNvbnN0IHVwbG9hZCBvZiByZXNwb25zZS51cGxvYWRzKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh1cGxvYWQuY3JlYXRlZEF0KS50b0xvY2FsZVN0cmluZygpO1xuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5mb3JtYXRCeXRlcyh1cGxvYWQuc2l6ZSk7XG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IHVwbG9hZC5tZXRhZGF0YT8uc291cmNlID09PSBcImNsaVwiID8gXCJDTElcIiA6IFwiV2ViXCI7XG5cbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgYCR7Y29sb3JzLmluZm8odXBsb2FkLmlkLnNsaWNlKDAsIDgpKX0gICR7dXBsb2FkLmZpbGVuYW1lfWAsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGNvbG9ycy5kaW0oXG4gICAgICAgICAgICBgICAgJHtkYXRlfSB8ICR7c2l6ZX0gfCAke3VwbG9hZC5tZXRhZGF0YT8udmFsaWRDb3VudCB8fCAwfSB2YWxpZCByZWNpcGllbnRzIHwgJHtzb3VyY2V9YCxcbiAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zb2xlLmxvZyhjb2xvcnMuZGltKFwi4pSAXCIucmVwZWF0KDgwKSkpO1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGNvbG9ycy5kaW0oXCJcXG5SZS11c2UgYSBiYXRjaDogc2VuZGx5IHNtcyBiYXRjaCAtLXJldXNlIDxpZD5cIiksXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgc3Bpbi5zdG9wKCk7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlLXVzZSBhIHByZXZpb3VzIGJhdGNoIHVwbG9hZFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyByZXVzZUJhdGNoKFxuICAgIHVwbG9hZElkOiBzdHJpbmcsXG4gICAgZmxhZ3M6IHsgdGV4dD86IHN0cmluZzsgZnJvbT86IHN0cmluZzsgdHlwZT86IHN0cmluZzsgXCJkcnktcnVuXCI/OiBib29sZWFuIH0sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHNwaW4gPSBzcGlubmVyKFwiRmV0Y2hpbmcgYmF0Y2ggZGF0YS4uLlwiKS5zdGFydCgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXBpQ2xpZW50LmdldDxCYXRjaFVwbG9hZFJlc3BvbnNlPihcbiAgICAgICAgYC9hcGkvY2xpL2JhdGNoL3JldXNlLyR7dXBsb2FkSWR9YCxcbiAgICAgICk7XG5cbiAgICAgIHNwaW4uc3RvcCgpO1xuXG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgY29sb3JzLnN1Y2Nlc3MoYFxcbuKckyBMb2FkZWQgYmF0Y2g6ICR7cmVzcG9uc2UudXBsb2FkLmZpbGVuYW1lfWApLFxuICAgICAgKTtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBjb2xvcnMuZGltKFxuICAgICAgICAgIGAgICR7cmVzcG9uc2UudmFsaWRhdGlvbi52YWxpZENvdW50fSB2YWxpZCByZWNpcGllbnRzIGZyb20gJHtyZXNwb25zZS52YWxpZGF0aW9uLnRvdGFsUm93c30gcm93c2AsXG4gICAgICAgICksXG4gICAgICApO1xuXG4gICAgICAvLyBBcHBseSBzaGFyZWQgdGV4dCBpZiBwcm92aWRlZFxuICAgICAgbGV0IG1lc3NhZ2VzID0gcmVzcG9uc2UucmVjaXBpZW50cztcbiAgICAgIGlmIChmbGFncy50ZXh0KSB7XG4gICAgICAgIG1lc3NhZ2VzID0gbWVzc2FnZXMubWFwKChyKSA9PiAoe1xuICAgICAgICAgIHRvOiByLnRvLFxuICAgICAgICAgIHRleHQ6IHIudGV4dCB8fCBmbGFncy50ZXh0LFxuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIGFsbCBtZXNzYWdlcyBoYXZlIHRleHRcbiAgICAgIGNvbnN0IG1pc3NpbmdUZXh0ID0gbWVzc2FnZXMuZmlsdGVyKChtKSA9PiAhbS50ZXh0Py50cmltKCkpO1xuICAgICAgaWYgKG1pc3NpbmdUZXh0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgZXJyb3IoXG4gICAgICAgICAgYCR7bWlzc2luZ1RleHQubGVuZ3RofSByZWNpcGllbnRzIG1pc3NpbmcgbWVzc2FnZSB0ZXh0LiBVc2UgLS10ZXh0IHRvIHByb3ZpZGUgYSBkZWZhdWx0LmAsXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuZXhpdCgxKTtcbiAgICAgIH1cblxuICAgICAgLy8gUHJvY2VlZCB3aXRoIHByZXZpZXcgb3Igc2VuZFxuICAgICAgYXdhaXQgdGhpcy5wcmV2aWV3T3JTZW5kKFxuICAgICAgICBtZXNzYWdlcyBhcyBBcnJheTx7IHRvOiBzdHJpbmc7IHRleHQ6IHN0cmluZyB9PixcbiAgICAgICAgZmxhZ3MsXG4gICAgICAgIHJlc3BvbnNlLnVwbG9hZC5pZCxcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBzcGluLnN0b3AoKTtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2VuZCB0byBpbmxpbmUgcmVjaXBpZW50cyAoLS10byBmbGFnKVxuICAgKiBUaGlzIHBhdGggZG9lc24ndCB1cGxvYWQgdG8gU3VwYWJhc2Ugc2luY2UgaXQncyBqdXN0IGEgZmV3IG51bWJlcnNcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgc2VuZElubGluZVJlY2lwaWVudHMoZmxhZ3M6IHtcbiAgICB0bz86IHN0cmluZztcbiAgICB0ZXh0Pzogc3RyaW5nO1xuICAgIGZyb20/OiBzdHJpbmc7XG4gICAgdHlwZT86IHN0cmluZztcbiAgICBcImRyeS1ydW5cIj86IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIWZsYWdzLnRleHQpIHtcbiAgICAgIGVycm9yKFwiLS10ZXh0IGlzIHJlcXVpcmVkIHdoZW4gdXNpbmcgLS10b1wiKTtcbiAgICAgIHRoaXMuZXhpdCgxKTtcbiAgICB9XG5cbiAgICBjb25zdCBwaG9uZXMgPSBmbGFncy50byEuc3BsaXQoXCIsXCIpLm1hcCgocCkgPT4gcC50cmltKCkpO1xuICAgIGNvbnN0IG1lc3NhZ2VzID0gcGhvbmVzLm1hcCgocGhvbmUpID0+ICh7XG4gICAgICB0bzogcGhvbmUuc3RhcnRzV2l0aChcIitcIikgPyBwaG9uZSA6IGArJHtwaG9uZX1gLFxuICAgICAgdGV4dDogZmxhZ3MudGV4dCEsXG4gICAgfSkpO1xuXG4gICAgLy8gVmFsaWRhdGUgcGhvbmUgbnVtYmVyc1xuICAgIGZvciAoY29uc3QgbXNnIG9mIG1lc3NhZ2VzKSB7XG4gICAgICBpZiAoIS9eXFwrWzEtOV1cXGR7MSwxNH0kLy50ZXN0KG1zZy50bykpIHtcbiAgICAgICAgZXJyb3IoYEludmFsaWQgcGhvbmUgbnVtYmVyOiAke21zZy50b31gLCB7XG4gICAgICAgICAgaGludDogXCJVc2UgRS4xNjQgZm9ybWF0OiArMTU1NTEyMzQ1NjdcIixcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZXhpdCgxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnByZXZpZXdPclNlbmQobWVzc2FnZXMsIGZsYWdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGxvYWQgQ1NWIHRvIFN1cGFiYXNlIGFuZCBzZW5kXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHVwbG9hZEFuZFNlbmQoZmxhZ3M6IHtcbiAgICBmaWxlPzogc3RyaW5nO1xuICAgIHRleHQ/OiBzdHJpbmc7XG4gICAgZnJvbT86IHN0cmluZztcbiAgICB0eXBlPzogc3RyaW5nO1xuICAgIFwiZHJ5LXJ1blwiPzogYm9vbGVhbjtcbiAgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGZpbGVQYXRoID0gZmxhZ3MuZmlsZSE7XG5cbiAgICAvLyBDaGVjayBmaWxlIGV4aXN0c1xuICAgIGlmICghZXhpc3RzU3luYyhmaWxlUGF0aCkpIHtcbiAgICAgIGVycm9yKGBGaWxlIG5vdCBmb3VuZDogJHtmaWxlUGF0aH1gKTtcbiAgICAgIHRoaXMuZXhpdCgxKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBmaWxlIGV4dGVuc2lvblxuICAgIGlmICghZmlsZVBhdGguZW5kc1dpdGgoXCIuY3N2XCIpKSB7XG4gICAgICBlcnJvcihcIk9ubHkgQ1NWIGZpbGVzIGFyZSBzdXBwb3J0ZWRcIiwge1xuICAgICAgICBoaW50OiBcIkNvbnZlcnQgeW91ciBmaWxlIHRvIENTViBmb3JtYXQgd2l0aCBjb2x1bW5zOiBwaG9uZSxtZXNzYWdlXCIsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZXhpdCgxKTtcbiAgICB9XG5cbiAgICAvLyBSZWFkIGZpbGVcbiAgICBjb25zdCBidWZmZXIgPSByZWFkRmlsZVN5bmMoZmlsZVBhdGgpO1xuICAgIGNvbnN0IGZpbGVuYW1lID0gYmFzZW5hbWUoZmlsZVBhdGgpO1xuXG4gICAgLy8gQ2hlY2sgZmlsZSBzaXplICg1TUIgbGltaXQpXG4gICAgaWYgKGJ1ZmZlci5sZW5ndGggPiA1ICogMTAyNCAqIDEwMjQpIHtcbiAgICAgIGVycm9yKFwiRmlsZSB0b28gbGFyZ2UgKG1heCA1TUIpXCIsIHtcbiAgICAgICAgaGludDogXCJTcGxpdCB5b3VyIENTViBpbnRvIHNtYWxsZXIgZmlsZXNcIixcbiAgICAgIH0pO1xuICAgICAgdGhpcy5leGl0KDEpO1xuICAgIH1cblxuICAgIGNvbnN0IHNwaW4gPSBzcGlubmVyKGBVcGxvYWRpbmcgJHtmaWxlbmFtZX0uLi5gKS5zdGFydCgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFVwbG9hZCB0byBTdXBhYmFzZSB2aWEgQ0xJIGVuZHBvaW50XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaUNsaWVudC51cGxvYWRGaWxlPEJhdGNoVXBsb2FkUmVzcG9uc2U+KFxuICAgICAgICBcIi9hcGkvY2xpL2JhdGNoL3VwbG9hZFwiLFxuICAgICAgICB7IGJ1ZmZlciwgZmlsZW5hbWUsIG1pbWV0eXBlOiBcInRleHQvY3N2XCIgfSxcbiAgICAgICk7XG5cbiAgICAgIHNwaW4uc3RvcCgpO1xuXG4gICAgICAvLyBTaG93IHVwbG9hZCBzdW1tYXJ5XG4gICAgICBjb25zb2xlLmxvZyhjb2xvcnMuc3VjY2VzcyhgXFxu4pyTIFVwbG9hZGVkOiAke3Jlc3BvbnNlLnVwbG9hZC5maWxlbmFtZX1gKSk7XG4gICAgICBjb25zb2xlLmxvZyhjb2xvcnMuZGltKGAgIFVwbG9hZCBJRDogJHtyZXNwb25zZS51cGxvYWQuaWR9YCkpO1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGNvbG9ycy5kaW0oXG4gICAgICAgICAgYCAgJHtyZXNwb25zZS52YWxpZGF0aW9uLnZhbGlkQ291bnR9IHZhbGlkIC8gJHtyZXNwb25zZS52YWxpZGF0aW9uLmludmFsaWRDb3VudH0gaW52YWxpZCAvICR7cmVzcG9uc2UudmFsaWRhdGlvbi5kdXBsaWNhdGVzUmVtb3ZlZH0gZHVwbGljYXRlcyByZW1vdmVkYCxcbiAgICAgICAgKSxcbiAgICAgICk7XG5cbiAgICAgIC8vIFNob3cgdmFsaWRhdGlvbiBlcnJvcnMgaWYgYW55XG4gICAgICBpZiAocmVzcG9uc2UuZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc29sZS5sb2coY29sb3JzLndhcm5pbmcoYFxcbuKaoO+4jyAgVmFsaWRhdGlvbiBlcnJvcnM6YCkpO1xuICAgICAgICBmb3IgKGNvbnN0IGVyciBvZiByZXNwb25zZS5lcnJvcnMuc2xpY2UoMCwgNSkpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGNvbG9ycy5kaW0oYCAgIFJvdyAke2Vyci5yb3d9OiAke2Vyci5waG9uZX0gLSAke2Vyci5lcnJvcn1gKSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXNwb25zZS5oYXNNb3JlRXJyb3JzKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBjb2xvcnMuZGltKFxuICAgICAgICAgICAgICBgICAgLi4uIGFuZCAke3Jlc3BvbnNlLnZhbGlkYXRpb24uaW52YWxpZENvdW50IC0gNX0gbW9yZSBlcnJvcnNgLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXNwb25zZS5yZWNpcGllbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBlcnJvcihcIk5vIHZhbGlkIHJlY2lwaWVudHMgZm91bmQgaW4gQ1NWXCIpO1xuICAgICAgICB0aGlzLmV4aXQoMSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEFwcGx5IHNoYXJlZCB0ZXh0IGlmIHByb3ZpZGVkXG4gICAgICBsZXQgbWVzc2FnZXMgPSByZXNwb25zZS5yZWNpcGllbnRzO1xuICAgICAgaWYgKGZsYWdzLnRleHQpIHtcbiAgICAgICAgbWVzc2FnZXMgPSBtZXNzYWdlcy5tYXAoKHIpID0+ICh7XG4gICAgICAgICAgdG86IHIudG8sXG4gICAgICAgICAgdGV4dDogci50ZXh0IHx8IGZsYWdzLnRleHQsXG4gICAgICAgIH0pKTtcbiAgICAgIH1cblxuICAgICAgLy8gVmFsaWRhdGUgYWxsIG1lc3NhZ2VzIGhhdmUgdGV4dFxuICAgICAgY29uc3QgbWlzc2luZ1RleHQgPSBtZXNzYWdlcy5maWx0ZXIoKG0pID0+ICFtLnRleHQ/LnRyaW0oKSk7XG4gICAgICBpZiAobWlzc2luZ1RleHQubGVuZ3RoID4gMCkge1xuICAgICAgICBlcnJvcihcbiAgICAgICAgICBgJHttaXNzaW5nVGV4dC5sZW5ndGh9IHJlY2lwaWVudHMgbWlzc2luZyBtZXNzYWdlIHRleHQuIFVzZSAtLXRleHQgdG8gcHJvdmlkZSBhIGRlZmF1bHQuYCxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgY29sb3JzLmRpbShcbiAgICAgICAgICAgIFwiXFxuQ1NWIHNob3VsZCBoYXZlIGNvbHVtbnM6IHBob25lLG1lc3NhZ2UgT1IgdXNlIC0tdGV4dCBmbGFnXCIsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5leGl0KDEpO1xuICAgICAgfVxuXG4gICAgICAvLyBQcm9jZWVkIHdpdGggcHJldmlldyBvciBzZW5kXG4gICAgICBhd2FpdCB0aGlzLnByZXZpZXdPclNlbmQoXG4gICAgICAgIG1lc3NhZ2VzIGFzIEFycmF5PHsgdG86IHN0cmluZzsgdGV4dDogc3RyaW5nIH0+LFxuICAgICAgICBmbGFncyxcbiAgICAgICAgcmVzcG9uc2UudXBsb2FkLmlkLFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHNwaW4uc3RvcCgpO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQcmV2aWV3IG9yIHNlbmQgdGhlIGJhdGNoXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHByZXZpZXdPclNlbmQoXG4gICAgbWVzc2FnZXM6IEFycmF5PHsgdG86IHN0cmluZzsgdGV4dDogc3RyaW5nIH0+LFxuICAgIGZsYWdzOiB7IGZyb20/OiBzdHJpbmc7IHR5cGU/OiBzdHJpbmc7IFwiZHJ5LXJ1blwiPzogYm9vbGVhbiB9LFxuICAgIHVwbG9hZElkPzogc3RyaW5nLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBDaGVjayBiYXRjaCBzaXplXG4gICAgaWYgKG1lc3NhZ2VzLmxlbmd0aCA+IDEwMDApIHtcbiAgICAgIGVycm9yKFwiQmF0Y2ggc2l6ZSBjYW5ub3QgZXhjZWVkIDEwMDAgbWVzc2FnZXNcIiwge1xuICAgICAgICBoaW50OiBcIlNwbGl0IHlvdXIgbWVzc2FnZXMgaW50byBzbWFsbGVyIGJhdGNoZXNcIixcbiAgICAgIH0pO1xuICAgICAgdGhpcy5leGl0KDEpO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBkcnktcnVuIG1vZGVcbiAgICBpZiAoZmxhZ3NbXCJkcnktcnVuXCJdKSB7XG4gICAgICByZXR1cm4gdGhpcy5zaG93UHJldmlldyhtZXNzYWdlcywgZmxhZ3MpO1xuICAgIH1cblxuICAgIC8vIFNlbmQgdGhlIGJhdGNoXG4gICAgY29uc3Qgc3BpbiA9IHNwaW5uZXIoYFNlbmRpbmcgJHttZXNzYWdlcy5sZW5ndGh9IG1lc3NhZ2VzLi4uYCk7XG4gICAgc3Bpbi5zdGFydCgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXBpQ2xpZW50LnBvc3Q8QmF0Y2hSZXNwb25zZT4oXG4gICAgICAgIFwiL2FwaS92MS9tZXNzYWdlcy9iYXRjaFwiLFxuICAgICAgICB7XG4gICAgICAgICAgbWVzc2FnZXMsXG4gICAgICAgICAgbWVzc2FnZVR5cGU6IGZsYWdzLnR5cGUsXG4gICAgICAgICAgLi4uKGZsYWdzLmZyb20gJiYgeyBmcm9tOiBmbGFncy5mcm9tIH0pLFxuICAgICAgICAgIC4uLih1cGxvYWRJZCAmJiB7IHVwbG9hZElkIH0pLCAvLyBMaW5rIHRvIGZpbGUgdXBsb2FkIGZvciBhdWRpdCB0cmFpbFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgc3Bpbi5zdG9wKCk7XG5cbiAgICAgIGlmIChpc0pzb25Nb2RlKCkpIHtcbiAgICAgICAganNvbihyZXNwb25zZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gRGV0ZXJtaW5lIHN1Y2Nlc3MgbGV2ZWxcbiAgICAgIGNvbnN0IGFsbFN1Y2NlZWRlZCA9IHJlc3BvbnNlLmZhaWxlZCA9PT0gMDtcbiAgICAgIGNvbnN0IGFsbEZhaWxlZCA9IHJlc3BvbnNlLnNlbnQgPT09IDAgJiYgcmVzcG9uc2UuZmFpbGVkID4gMDtcbiAgICAgIGNvbnN0IHBhcnRpYWxTdWNjZXNzID0gcmVzcG9uc2Uuc2VudCA+IDAgJiYgcmVzcG9uc2UuZmFpbGVkID4gMDtcblxuICAgICAgaWYgKGFsbFN1Y2NlZWRlZCkge1xuICAgICAgICBzdWNjZXNzKFwiQmF0Y2ggc2VudCBzdWNjZXNzZnVsbHlcIiwge1xuICAgICAgICAgIFwiQmF0Y2ggSURcIjogcmVzcG9uc2UuYmF0Y2hJZCxcbiAgICAgICAgICBUb3RhbDogcmVzcG9uc2UudG90YWwsXG4gICAgICAgICAgU2VudDogY29sb3JzLnN1Y2Nlc3MoU3RyaW5nKHJlc3BvbnNlLnNlbnQpKSxcbiAgICAgICAgICBcIkNyZWRpdHMgVXNlZFwiOiByZXNwb25zZS5jcmVkaXRzVXNlZCxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGFsbEZhaWxlZCkge1xuICAgICAgICBlcnJvcihcIkJhdGNoIGZhaWxlZFwiLCB7XG4gICAgICAgICAgaGludDogYEFsbCAke3Jlc3BvbnNlLmZhaWxlZH0gbWVzc2FnZXMgZmFpbGVkIHRvIHNlbmRgLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc29sZS5sb2coY29sb3JzLmRpbShgICBCYXRjaCBJRDogJHtyZXNwb25zZS5iYXRjaElkfWApKTtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgY29sb3JzLmRpbShgICBDcmVkaXRzIFJlZnVuZGVkOiAke3Jlc3BvbnNlLmNyZWRpdHNSZWZ1bmRlZH1gKSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAocGFydGlhbFN1Y2Nlc3MpIHtcbiAgICAgICAgY29uc29sZS5sb2coY29sb3JzLndhcm5pbmcoXCJcXG7imqDvuI8gIEJhdGNoIGNvbXBsZXRlZCB3aXRoIGVycm9yc1xcblwiKSk7XG4gICAgICAgIGNvbnNvbGUubG9nKGAgIEJhdGNoIElEOiAgICAgICAgICR7cmVzcG9uc2UuYmF0Y2hJZH1gKTtcbiAgICAgICAgY29uc29sZS5sb2coYCAgVG90YWw6ICAgICAgICAgICAgJHtyZXNwb25zZS50b3RhbH1gKTtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgYCAgU2VudDogICAgICAgICAgICAgJHtjb2xvcnMuc3VjY2VzcyhTdHJpbmcocmVzcG9uc2Uuc2VudCkpfWAsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGAgIEZhaWxlZDogICAgICAgICAgICR7Y29sb3JzLmVycm9yKFN0cmluZyhyZXNwb25zZS5mYWlsZWQpKX1gLFxuICAgICAgICApO1xuICAgICAgICBjb25zb2xlLmxvZyhgICBDcmVkaXRzIFVzZWQ6ICAgICAke3Jlc3BvbnNlLmNyZWRpdHNVc2VkfWApO1xuICAgICAgICBjb25zb2xlLmxvZyhgICBDcmVkaXRzIFJlZnVuZGVkOiAke3Jlc3BvbnNlLmNyZWRpdHNSZWZ1bmRlZH1gKTtcblxuICAgICAgICAvLyBTaG93IGZhaWxlZCBtZXNzYWdlcyBpZiBhdmFpbGFibGVcbiAgICAgICAgaWYgKHJlc3BvbnNlLm1lc3NhZ2VzKSB7XG4gICAgICAgICAgY29uc3QgZmFpbGVkTXNncyA9IHJlc3BvbnNlLm1lc3NhZ2VzLmZpbHRlcihcbiAgICAgICAgICAgIChtKSA9PiBtLnN0YXR1cyA9PT0gXCJmYWlsZWRcIixcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChmYWlsZWRNc2dzLmxlbmd0aCA+IDAgJiYgZmFpbGVkTXNncy5sZW5ndGggPD0gNSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coY29sb3JzLmRpbShcIlxcbiAgRmFpbGVkIG1lc3NhZ2VzOlwiKSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG1zZyBvZiBmYWlsZWRNc2dzKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgIGNvbG9ycy5kaW0oYCAgICAke21zZy50b306ICR7bXNnLmVycm9yIHx8IFwiVW5rbm93biBlcnJvclwifWApLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoZmFpbGVkTXNncy5sZW5ndGggPiA1KSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgY29sb3JzLmRpbShcbiAgICAgICAgICAgICAgICBgXFxuICAke2ZhaWxlZE1zZ3MubGVuZ3RofSBtZXNzYWdlcyBmYWlsZWQuIFVzZSAtLWpzb24gZm9yIGRldGFpbHMuYCxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBzcGluLnN0b3AoKTtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2hvdyBiYXRjaCBwcmV2aWV3IChkcnktcnVuIG1vZGUpXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHNob3dQcmV2aWV3KFxuICAgIG1lc3NhZ2VzOiBBcnJheTx7IHRvOiBzdHJpbmc7IHRleHQ6IHN0cmluZyB9PixcbiAgICBmbGFnczogeyB0eXBlPzogc3RyaW5nIH0sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHNwaW4gPSBzcGlubmVyKFwiQW5hbHl6aW5nIGJhdGNoLi4uXCIpLnN0YXJ0KCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcHJldmlldyA9IGF3YWl0IGFwaUNsaWVudC5wb3N0PEJhdGNoUHJldmlld1Jlc3BvbnNlPihcbiAgICAgICAgXCIvYXBpL3YxL21lc3NhZ2VzL2JhdGNoL3ByZXZpZXdcIixcbiAgICAgICAgeyBtZXNzYWdlcywgbWVzc2FnZVR5cGU6IGZsYWdzLnR5cGUgfSxcbiAgICAgICk7XG5cbiAgICAgIHNwaW4uc3RvcCgpO1xuXG4gICAgICBpZiAoaXNKc29uTW9kZSgpKSB7XG4gICAgICAgIGpzb24ocHJldmlldyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gU2hvdyBjb21wcmVoZW5zaXZlIHByZXZpZXdcbiAgICAgIGNvbnNvbGUubG9nKGNvbG9ycy5ib2xkKFwiXFxu8J+TiiBCYXRjaCBQcmV2aWV3IChEcnkgUnVuKVxcblwiKSk7XG5cbiAgICAgIC8vIFN1bW1hcnkgdGFibGVcbiAgICAgIGNvbnNvbGUubG9nKGNvbG9ycy5kaW0oXCLilIBcIi5yZXBlYXQoNTApKSk7XG4gICAgICBjb25zb2xlLmxvZyhgVG90YWwgbWVzc2FnZXM6ICAgICAke3ByZXZpZXcudG90YWx9YCk7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgYFNlbmRhYmxlOiAgICAgICAgICAgJHtjb2xvcnMuc3VjY2VzcyhTdHJpbmcocHJldmlldy5zZW5kYWJsZSkpfWAsXG4gICAgICApO1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGBCbG9ja2VkOiAgICAgICAgICAgICR7cHJldmlldy5ibG9ja2VkID4gMCA/IGNvbG9ycy5lcnJvcihTdHJpbmcocHJldmlldy5ibG9ja2VkKSkgOiBcIjBcIn1gLFxuICAgICAgKTtcbiAgICAgIGNvbnNvbGUubG9nKGBEdXBsaWNhdGVzIHJlbW92ZWQ6ICR7cHJldmlldy5kdXBsaWNhdGVzfWApO1xuICAgICAgY29uc29sZS5sb2coY29sb3JzLmRpbShcIuKUgFwiLnJlcGVhdCg1MCkpKTtcblxuICAgICAgLy8gQ3JlZGl0c1xuICAgICAgY29uc29sZS5sb2coYFxcbkNyZWRpdHMgbmVlZGVkOiAgICAgJHtwcmV2aWV3LmNyZWRpdHNOZWVkZWR9YCk7XG4gICAgICBjb25zb2xlLmxvZyhgWW91ciBiYWxhbmNlOiAgICAgICAke3ByZXZpZXcuY3JlZGl0QmFsYW5jZX1gKTtcbiAgICAgIGlmICghcHJldmlldy5oYXNTdWZmaWNpZW50Q3JlZGl0cykge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBjb2xvcnMuZXJyb3IoXG4gICAgICAgICAgICBg4pqg77iPICBJbnN1ZmZpY2llbnQgY3JlZGl0cyEgTmVlZCAke3ByZXZpZXcuY3JlZGl0c05lZWRlZCAtIHByZXZpZXcuY3JlZGl0QmFsYW5jZX0gbW9yZS5gLFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIEFjY2VzcyBpbmZvXG4gICAgICBjb25zb2xlLmxvZyhgXFxuQVBJIEtleSB0eXBlOiAgICAgICAke3ByZXZpZXcua2V5VHlwZS50b1VwcGVyQ2FzZSgpfWApO1xuICAgICAgY29uc29sZS5sb2coYFdyaXRlIGFjY2VzczogICAgICAgJHtwcmV2aWV3Lmhhc1dyaXRlU2NvcGUgPyBcIuKck1wiIDogXCLinJdcIn1gKTtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBgRG9tZXN0aWMgKFVTL0NBKTogICAke3ByZXZpZXcubWVzc2FnaW5nUHJvZmlsZS5jYW5TZW5kRG9tZXN0aWMgPyBcIuKck1wiIDogXCLinJdcIn1gLFxuICAgICAgKTtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBgSW50ZXJuYXRpb25hbDogICAgICAke3ByZXZpZXcubWVzc2FnaW5nUHJvZmlsZS5jYW5TZW5kSW50ZXJuYXRpb25hbCA/IFwi4pyTXCIgOiBcIuKcl1wifWAsXG4gICAgICApO1xuXG4gICAgICAvLyBDb3VudHJ5IGJyZWFrZG93blxuICAgICAgY29uc3QgY291bnRyaWVzID0gT2JqZWN0LmVudHJpZXMocHJldmlldy5ieUNvdW50cnkpO1xuICAgICAgaWYgKGNvdW50cmllcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNvbG9ycy5ib2xkKFwiXFxu8J+TjSBCeSBDb3VudHJ5OlxcblwiKSk7XG4gICAgICAgIGZvciAoY29uc3QgW2NvdW50cnksIGRhdGFdIG9mIGNvdW50cmllcykge1xuICAgICAgICAgIGNvbnN0IHN0YXR1cyA9IGRhdGEuYWxsb3dlZCA/IGNvbG9ycy5zdWNjZXNzKFwi4pyTXCIpIDogY29sb3JzLmVycm9yKFwi4pyXXCIpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYCAgJHtzdGF0dXN9ICR7Y291bnRyeX06ICR7ZGF0YS5jb3VudH0gbXNncywgJHtkYXRhLmNyZWRpdHN9IGNyZWRpdHMgKCR7ZGF0YS50aWVyfSlgLFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKCFkYXRhLmFsbG93ZWQgJiYgZGF0YS5ibG9ja2VkUmVhc29uKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjb2xvcnMuZGltKGAgICAgIOKUlOKUgCAke2RhdGEuYmxvY2tlZFJlYXNvbn1gKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENvbXBsaWFuY2UgY2hlY2sgcmVzdWx0c1xuICAgICAgaWYgKHByZXZpZXcuY29tcGxpYW5jZSkge1xuICAgICAgICBjb25zb2xlLmxvZyhjb2xvcnMuYm9sZChcIlxcbvCfm6HvuI8gIENvbXBsaWFuY2UgQ2hlY2s6XFxuXCIpKTtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgYCAgTWVzc2FnZSBUeXBlOiAgICAgICR7cHJldmlldy5jb21wbGlhbmNlLm1lc3NhZ2VUeXBlLnRvVXBwZXJDYXNlKCl9YCxcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAocHJldmlldy5jb21wbGlhbmNlLnNoYWZ0QmxvY2tlZCA+IDApIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGNvbG9ycy5lcnJvcihcbiAgICAgICAgICAgICAgYCAgU0hBRlQgQmxvY2tlZDogICAgICR7cHJldmlldy5jb21wbGlhbmNlLnNoYWZ0QmxvY2tlZH0gbWVzc2FnZXNgLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGZvciAoY29uc3QgbXNnIG9mIHByZXZpZXcuY29tcGxpYW5jZS5zaGFmdEJsb2NrZWRNZXNzYWdlcy5zbGljZShcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAzLFxuICAgICAgICAgICkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICBjb2xvcnMuZGltKFxuICAgICAgICAgICAgICAgIGAgICAgIOKUlOKUgCAke21zZy50b306ICR7bXNnLmNhdGVnb3J5fSAoJHttc2cubWF0Y2hlZFRlcm1zLmpvaW4oXCIsIFwiKX0pYCxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwcmV2aWV3LmNvbXBsaWFuY2Uuc2hhZnRCbG9ja2VkTWVzc2FnZXMubGVuZ3RoID4gMykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgIGNvbG9ycy5kaW0oXG4gICAgICAgICAgICAgICAgYCAgICAgLi4uIGFuZCAke3ByZXZpZXcuY29tcGxpYW5jZS5zaGFmdEJsb2NrZWRNZXNzYWdlcy5sZW5ndGggLSAzfSBtb3JlYCxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgY29sb3JzLnN1Y2Nlc3MoXG4gICAgICAgICAgICAgIFwiICBTSEFGVCBDaGVjazogICAgICAg4pyTIEFsbCBtZXNzYWdlcyBwYXNzIGNvbnRlbnQgZmlsdGVyXCIsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJldmlldy5jb21wbGlhbmNlLm1lc3NhZ2VUeXBlID09PSBcIm1hcmtldGluZ1wiKSB7XG4gICAgICAgICAgaWYgKHByZXZpZXcuY29tcGxpYW5jZS5xdWlldEhvdXJzUmVzY2hlZHVsZWQgPiAwKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgY29sb3JzLndhcm5pbmcoXG4gICAgICAgICAgICAgICAgYCAgUXVpZXQgSG91cnM6ICAgICAgICR7cHJldmlldy5jb21wbGlhbmNlLnF1aWV0SG91cnNSZXNjaGVkdWxlZH0gbWVzc2FnZXMgd2lsbCBiZSByZXNjaGVkdWxlZGAsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZm9yIChjb25zdCBtc2cgb2YgcHJldmlldy5jb21wbGlhbmNlLnF1aWV0SG91cnNCbG9ja2VkTWVzc2FnZXMuc2xpY2UoXG4gICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgIDMsXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG5leHRUaW1lID0gbXNnLm5leHRBbGxvd2VkVGltZVxuICAgICAgICAgICAgICAgID8gbmV3IERhdGUobXNnLm5leHRBbGxvd2VkVGltZSkudG9Mb2NhbGVTdHJpbmcoKVxuICAgICAgICAgICAgICAgIDogXCJuZXh0IGF2YWlsYWJsZSB3aW5kb3dcIjtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgY29sb3JzLmRpbShcbiAgICAgICAgICAgICAgICAgIGAgICAgIOKUlOKUgCAke21zZy50b306ICR7bXNnLnJlY2lwaWVudFRpbWV6b25lfSDihpIgJHtuZXh0VGltZX1gLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJldmlldy5jb21wbGlhbmNlLnF1aWV0SG91cnNCbG9ja2VkTWVzc2FnZXMubGVuZ3RoID4gMykge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICBjb2xvcnMuZGltKFxuICAgICAgICAgICAgICAgICAgYCAgICAgLi4uIGFuZCAke3ByZXZpZXcuY29tcGxpYW5jZS5xdWlldEhvdXJzQmxvY2tlZE1lc3NhZ2VzLmxlbmd0aCAtIDN9IG1vcmVgLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICBjb2xvcnMuc3VjY2VzcyhcbiAgICAgICAgICAgICAgICBcIiAgUXVpZXQgSG91cnM6ICAgICAgIOKckyBBbGwgcmVjaXBpZW50cyB3aXRoaW4gYWxsb3dlZCBob3Vyc1wiLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBjb2xvcnMuZGltKFwiICBRdWlldCBIb3VyczogICAgICAgQnlwYXNzZWQgKHRyYW5zYWN0aW9uYWwgbWVzc2FnZSlcIiksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBXYXJuaW5nc1xuICAgICAgaWYgKHByZXZpZXcud2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zb2xlLmxvZyhjb2xvcnMud2FybmluZyhcIlxcbuKaoO+4jyAgV2FybmluZ3M6XCIpKTtcbiAgICAgICAgZm9yIChjb25zdCB3IG9mIHByZXZpZXcud2FybmluZ3MpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICAg4oCiICR7d31gKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBCbG9ja2VkIG1lc3NhZ2VzIChmaXJzdCA1KVxuICAgICAgaWYgKHByZXZpZXcuYmxvY2tlZE1lc3NhZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgY29sb3JzLmVycm9yKFxuICAgICAgICAgICAgYFxcbuKdjCBCbG9ja2VkIE1lc3NhZ2VzICgke3ByZXZpZXcuYmxvY2tlZE1lc3NhZ2VzLmxlbmd0aH0gdG90YWwpOmAsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgICAgZm9yIChjb25zdCBiIG9mIHByZXZpZXcuYmxvY2tlZE1lc3NhZ2VzLnNsaWNlKDAsIDUpKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgICR7Yi50b306ICR7Yi5yZWFzb259YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByZXZpZXcuYmxvY2tlZE1lc3NhZ2VzLmxlbmd0aCA+IDUpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGNvbG9ycy5kaW0oYCAgIC4uLiBhbmQgJHtwcmV2aWV3LmJsb2NrZWRNZXNzYWdlcy5sZW5ndGggLSA1fSBtb3JlYCksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJcXG5cIiArIGNvbG9ycy5kaW0oXCJObyBtZXNzYWdlcyB3ZXJlIHNlbnQuIFJlbW92ZSAtLWRyeS1ydW4gdG8gc2VuZC5cIiksXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgc3Bpbi5zdG9wKCk7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCBieXRlcyB0byBodW1hbiByZWFkYWJsZSBzdHJpbmdcbiAgICovXG4gIHByaXZhdGUgZm9ybWF0Qnl0ZXMoYnl0ZXM6IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKGJ5dGVzIDwgMTAyNCkgcmV0dXJuIGAke2J5dGVzfSBCYDtcbiAgICBpZiAoYnl0ZXMgPCAxMDI0ICogMTAyNCkgcmV0dXJuIGAkeyhieXRlcyAvIDEwMjQpLnRvRml4ZWQoMSl9IEtCYDtcbiAgICByZXR1cm4gYCR7KGJ5dGVzIC8gKDEwMjQgKiAxMDI0KSkudG9GaXhlZCgxKX0gTUJgO1xuICB9XG59XG4iXX0=
|
|
436
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbWFuZHMvc21zL2JhdGNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDcEMsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDOUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxFQUNMLE9BQU8sRUFDUCxLQUFLLEVBQ0wsT0FBTyxFQUNQLE1BQU0sRUFDTixJQUFJLEVBQ0osVUFBVSxHQUNYLE1BQU0scUJBQXFCLENBQUM7QUE2RzdCLE1BQU0sQ0FBQyxPQUFPLE9BQU8sUUFBUyxTQUFRLG9CQUFvQjtJQUN4RCxNQUFNLENBQUMsV0FBVyxHQUNoQixnRUFBZ0UsQ0FBQztJQUVuRSxNQUFNLENBQUMsUUFBUSxHQUFHO1FBQ2hCLG1EQUFtRDtRQUNuRCx3RUFBd0U7UUFDeEUsNEVBQTRFO1FBQzVFLDZEQUE2RDtRQUM3RCx1RkFBdUY7UUFDdkYsbURBQW1EO1FBQ25ELHVDQUF1QztLQUN4QyxDQUFDO0lBRUYsTUFBTSxDQUFDLEtBQUssR0FBRztRQUNiLEdBQUcsb0JBQW9CLENBQUMsU0FBUztRQUNqQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNqQixJQUFJLEVBQUUsR0FBRztZQUNULFdBQVcsRUFBRSx5REFBeUQ7WUFDdEUsU0FBUyxFQUFFLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUM7U0FDdEMsQ0FBQztRQUNGLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ2YsSUFBSSxFQUFFLEdBQUc7WUFDVCxXQUFX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RSxPQUFPLEdBQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDbEUsT0FBTyxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDcEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZsYWdzIH0gZnJvbSBcIkBvY2xpZi9jb3JlXCI7XG5pbXBvcnQgeyByZWFkRmlsZVN5bmMsIGV4aXN0c1N5bmMgfSBmcm9tIFwiZnNcIjtcbmltcG9ydCB7IGJhc2VuYW1lIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IEF1dGhlbnRpY2F0ZWRDb21tYW5kIH0gZnJvbSBcIi4uLy4uL2xpYi9iYXNlLWNvbW1hbmQuanNcIjtcbmltcG9ydCB7IGFwaUNsaWVudCB9IGZyb20gXCIuLi8uLi9saWIvYXBpLWNsaWVudC5qc1wiO1xuaW1wb3J0IHtcbiAgc3VjY2VzcyxcbiAgZXJyb3IsXG4gIHNwaW5uZXIsXG4gIGNvbG9ycyxcbiAganNvbixcbiAgaXNKc29uTW9kZSxcbn0gZnJvbSBcIi4uLy4uL2xpYi9vdXRwdXQuanNcIjtcblxuaW50ZXJmYWNlIEJhdGNoVXBsb2FkUmVzcG9uc2Uge1xuICB1cGxvYWQ6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGZpbGVuYW1lOiBzdHJpbmc7XG4gICAgc2l6ZTogbnVtYmVyO1xuICAgIGNyZWF0ZWRBdDogc3RyaW5nO1xuICB9O1xuICB2YWxpZGF0aW9uOiB7XG4gICAgdG90YWxSb3dzOiBudW1iZXI7XG4gICAgdmFsaWRDb3VudDogbnVtYmVyO1xuICAgIGludmFsaWRDb3VudDogbnVtYmVyO1xuICAgIGR1cGxpY2F0ZXNSZW1vdmVkOiBudW1iZXI7XG4gICAgaGFzSGVhZGVyOiBib29sZWFuO1xuICB9O1xuICByZWNpcGllbnRzOiBBcnJheTx7IHRvOiBzdHJpbmc7IHRleHQ/OiBzdHJpbmcgfT47XG4gIGVycm9yczogQXJyYXk8eyByb3c6IG51bWJlcjsgcGhvbmU6IHN0cmluZzsgZXJyb3I6IHN0cmluZyB9PjtcbiAgaGFzTW9yZUVycm9yczogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEJhdGNoSGlzdG9yeVJlc3BvbnNlIHtcbiAgdXBsb2FkczogQXJyYXk8e1xuICAgIGlkOiBzdHJpbmc7XG4gICAgZmlsZW5hbWU6IHN0cmluZztcbiAgICBzaXplOiBudW1iZXI7XG4gICAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gICAgbWV0YWRhdGE6IHtcbiAgICAgIHRvdGFsUm93czogbnVtYmVyO1xuICAgICAgdmFsaWRDb3VudDogbnVtYmVyO1xuICAgICAgaW52YWxpZENvdW50OiBudW1iZXI7XG4gICAgICBzb3VyY2U/OiBzdHJpbmc7XG4gICAgfTtcbiAgfT47XG59XG5cbmludGVyZmFjZSBCYXRjaFJlc3BvbnNlIHtcbiAgYmF0Y2hJZDogc3RyaW5nO1xuICB0b3RhbDogbnVtYmVyO1xuICBzZW50OiBudW1iZXI7XG4gIHF1ZXVlZDogbnVtYmVyO1xuICBmYWlsZWQ6IG51bWJlcjtcbiAgY3JlZGl0c1VzZWQ6IG51bWJlcjtcbiAgY3JlZGl0c1JlZnVuZGVkOiBudW1iZXI7XG4gIHN0YXR1czogc3RyaW5nO1xuICBtZXNzYWdlcz86IEFycmF5PHtcbiAgICBpbmRleDogbnVtYmVyO1xuICAgIGlkOiBzdHJpbmc7XG4gICAgdG86IHN0cmluZztcbiAgICBzdGF0dXM6IHN0cmluZztcbiAgICBlcnJvcj86IHN0cmluZztcbiAgfT47XG59XG5cbmludGVyZmFjZSBCYXRjaFByZXZpZXdSZXNwb25zZSB7XG4gIHRvdGFsOiBudW1iZXI7XG4gIHNlbmRhYmxlOiBudW1iZXI7XG4gIGJsb2NrZWQ6IG51bWJlcjtcbiAgZHVwbGljYXRlczogbnVtYmVyO1xuICBjcmVkaXRzTmVlZGVkOiBudW1iZXI7XG4gIGNyZWRpdEJhbGFuY2U6IG51bWJlcjtcbiAgaGFzU3VmZmljaWVudENyZWRpdHM6IGJvb2xlYW47XG4gIGtleVR5cGU6IFwidGVzdFwiIHwgXCJsaXZlXCI7XG4gIGtleVNjb3Blczogc3RyaW5nW107XG4gIGhhc1dyaXRlU2NvcGU6IGJvb2xlYW47XG4gIG1lc3NhZ2luZ1Byb2ZpbGU6IHtcbiAgICBpZDogc3RyaW5nIHwgbnVsbDtcbiAgICBjYW5TZW5kRG9tZXN0aWM6IGJvb2xlYW47XG4gICAgY2FuU2VuZEludGVybmF0aW9uYWw6IGJvb2xlYW47XG4gICAgdmVyaWZpY2F0aW9uU3RhdHVzOiBzdHJpbmcgfCBudWxsO1xuICAgIHZlcmlmaWNhdGlvblR5cGU6IHN0cmluZyB8IG51bGw7XG4gIH07XG4gIGJ5Q291bnRyeTogUmVjb3JkPFxuICAgIHN0cmluZyxcbiAgICB7XG4gICAgICBjb3VudDogbnVtYmVyO1xuICAgICAgY3JlZGl0czogbnVtYmVyO1xuICAgICAgdGllcjogc3RyaW5nO1xuICAgICAgYWxsb3dlZDogYm9vbGVhbjtcbiAgICAgIGJsb2NrZWRSZWFzb24/OiBzdHJpbmc7XG4gICAgfVxuICA+O1xuICBibG9ja2VkTWVzc2FnZXM6IEFycmF5PHtcbiAgICBpbmRleDogbnVtYmVyO1xuICAgIHRvOiBzdHJpbmc7XG4gICAgcmVhc29uOiBzdHJpbmc7XG4gIH0+O1xuICBjb21wbGlhbmNlOiB7XG4gICAgbWVzc2FnZVR5cGU6IFwibWFya2V0aW5nXCIgfCBcInRyYW5zYWN0aW9uYWxcIjtcbiAgICBzaGFmdEJsb2NrZWQ6IG51bWJlcjtcbiAgICBxdWlldEhvdXJzQmxvY2tlZDogbnVtYmVyO1xuICAgIHF1aWV0SG91cnNSZXNjaGVkdWxlZDogbnVtYmVyO1xuICAgIHNoYWZ0QmxvY2tlZE1lc3NhZ2VzOiBBcnJheTx7XG4gICAgICBpbmRleDogbnVtYmVyO1xuICAgICAgdG86IHN0cmluZztcbiAgICAgIGNhdGVnb3J5OiBzdHJpbmc7XG4gICAgICBtYXRjaGVkVGVybXM6IHN0cmluZ1tdO1xuICAgIH0+O1xuICAgIHF1aWV0SG91cnNCbG9ja2VkTWVzc2FnZXM6IEFycmF5PHtcbiAgICAgIGluZGV4OiBudW1iZXI7XG4gICAgICB0bzogc3RyaW5nO1xuICAgICAgcmVjaXBpZW50VGltZXpvbmU6IHN0cmluZztcbiAgICAgIHJlY2lwaWVudExvY2FsVGltZTogc3RyaW5nO1xuICAgICAgbmV4dEFsbG93ZWRUaW1lPzogc3RyaW5nO1xuICAgIH0+O1xuICB9O1xuICB3YXJuaW5nczogc3RyaW5nW107XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNtc0JhdGNoIGV4dGVuZHMgQXV0aGVudGljYXRlZENvbW1hbmQge1xuICBzdGF0aWMgZGVzY3JpcHRpb24gPVxuICAgIFwiU2VuZCBiYXRjaCBTTVMgbWVzc2FnZXMgKHVwbG9hZHMgQ1NWIHRvIGNsb3VkIGZvciBhdWRpdCB0cmFpbClcIjtcblxuICBzdGF0aWMgZXhhbXBsZXMgPSBbXG4gICAgXCI8JT0gY29uZmlnLmJpbiAlPiBzbXMgYmF0Y2ggLS1maWxlIHJlY2lwaWVudHMuY3N2XCIsXG4gICAgJzwlPSBjb25maWcuYmluICU+IHNtcyBiYXRjaCAtLWZpbGUgcGhvbmVzLmNzdiAtLXRleHQgXCJIZWxsbyBldmVyeW9uZSFcIicsXG4gICAgJzwlPSBjb25maWcuYmluICU+IHNtcyBiYXRjaCAtLXRvICsxNTU1MTIzNDU2NywrMTU1NTk4NzY1NDMgLS10ZXh0IFwiSGVsbG8hXCInLFxuICAgIFwiPCU9IGNvbmZpZy5iaW4gJT4gc21zIGJhdGNoIC0tZmlsZSByZWNpcGllbnRzLmNzdiAtLWRyeS1ydW5cIixcbiAgICAnPCU9IGNvbmZpZy5iaW4gJT4gc21zIGJhdGNoIC0tZmlsZSBwaG9uZXMuY3N2IC0tdGV4dCBcIkNvZGU6IDEyM1wiIC0tdHlwZSB0cmFuc2FjdGlvbmFsJyxcbiAgICBcIjwlPSBjb25maWcuYmluICU+IHNtcyBiYXRjaCAtLXJldXNlIGFiYzEyMy1kZWY0NTZcIixcbiAgICBcIjwlPSBjb25maWcuYmluICU+IHNtcyBiYXRjaCAtLWhpc3RvcnlcIixcbiAgXTtcblxuICBzdGF0aWMgZmxhZ3MgPSB7XG4gICAgLi4uQXV0aGVudGljYXRlZENvbW1hbmQuYmFzZUZsYWdzLFxuICAgIGZpbGU6IEZsYWdzLnN0cmluZyh7XG4gICAgICBjaGFyOiBcIkZcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkNTViBmaWxlIHdpdGggcGhvbmUgbnVtYmVycyAoYW5kIG9wdGlvbmFsIG1lc3NhZ2UgdGV4dClcIixcbiAgICAgIGV4Y2x1c2l2ZTogW1widG9cIiwgXCJyZXVzZVwiLCBcImhpc3RvcnlcIl0sXG4gICAgfSksXG4gICAgdG86IEZsYWdzLnN0cmluZyh7XG4gICAgICBjaGFyOiBcInRcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkNvbW1hLXNlcGFyYXRlZCByZWNpcGllbnQgcGhvbmUgbnVtYmVycyAoRS4xNjQgZm9ybWF0KVwiLFxuICAgICAgZXhjbHVzaXZlOiBbXCJmaWxlXCIsIFwicmV1c2VcIiwgXCJoaXN0b3J5XCJdLFxuICAgIH0pLFxuICAgIHRleHQ6IEZsYWdzLnN0cmluZyh7XG4gICAgICBjaGFyOiBcIm1cIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIk1lc3NhZ2UgdGV4dCAocmVxdWlyZWQgd2l0aCAtLXRvLCBvcHRpb25hbCB3aXRoIC0tZmlsZSBpZiBDU1YgaGFzIHRleHQgY29sdW1uKVwiLFxuICAgIH0pLFxuICAgIGZyb206IEZsYWdzLnN0cmluZyh7XG4gICAgICBjaGFyOiBcImZcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlNlbmRlciBJRCBvciBwaG9uZSBudW1iZXIgZm9yIGFsbCBtZXNzYWdlc1wiLFxuICAgIH0pLFxuICAgIHR5cGU6IEZsYWdzLnN0cmluZyh7XG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJNZXNzYWdlIHR5cGU6IG1hcmtldGluZyAoZGVmYXVsdCkgb3IgdHJhbnNhY3Rpb25hbC4gVHJhbnNhY3Rpb25hbCBieXBhc3NlcyBxdWlldCBob3Vycy5cIixcbiAgICAgIG9wdGlvbnM6IFtcIm1hcmtldGluZ1wiLCBcInRyYW5zYWN0aW9uYWxcIl0sXG4gICAgICBkZWZhdWx0OiBcIm1hcmtldGluZ1wiLFxuICAgIH0pLFxuICAgIFwiZHJ5LXJ1blwiOiBGbGFncy5ib29sZWFuKHtcbiAgICAgIGNoYXI6IFwiZFwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiUHJldmlldyBiYXRjaCB3aXRob3V0IHNlbmRpbmcgKHZhbGlkYXRlcyBhY2Nlc3MsIHNob3dzIGNvc3QgYW5kIGNvbXBsaWFuY2UgYnJlYWtkb3duKVwiLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgfSksXG4gICAgcmV1c2U6IEZsYWdzLnN0cmluZyh7XG4gICAgICBkZXNjcmlwdGlvbjogXCJSZS11c2UgYSBwcmV2aW91cyBiYXRjaCB1cGxvYWQgYnkgSUQgKHNlZSAtLWhpc3RvcnkpXCIsXG4gICAgICBleGNsdXNpdmU6IFtcImZpbGVcIiwgXCJ0b1wiLCBcImhpc3RvcnlcIl0sXG4gICAgfSksXG4gICAgaGlzdG9yeTogRmxhZ3MuYm9vbGVhbih7XG4gICAgICBkZXNjcmlwdGlvbjogXCJTaG93IHJlY2VudCBiYXRjaCB1cGxvYWQgaGlzdG9yeVwiLFxuICAgICAgZXhjbHVzaXZlOiBbXCJmaWxlXCIsIFwidG9cIiwgXCJyZXVzZVwiXSxcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgIH0pLFxuICB9O1xuXG4gIGFzeW5jIHJ1bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGZsYWdzIH0gPSBhd2FpdCB0aGlzLnBhcnNlKFNtc0JhdGNoKTtcblxuICAgIC8vIEhhbmRsZSBoaXN0b3J5IHN1YmNvbW1hbmRcbiAgICBpZiAoZmxhZ3MuaGlzdG9yeSkge1xuICAgICAgcmV0dXJuIHRoaXMuc2hvd0hpc3RvcnkoKTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgcmV1c2Ugc3ViY29tbWFuZFxuICAgIGlmIChmbGFncy5yZXVzZSkge1xuICAgICAgcmV0dXJuIHRoaXMucmV1c2VCYXRjaChmbGFncy5yZXVzZSwgZmxhZ3MpO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSAtLXRvIGZsYWcgKGlubGluZSByZWNpcGllbnRzLCBubyB1cGxvYWQgbmVlZGVkKVxuICAgIGlmIChmbGFncy50bykge1xuICAgICAgcmV0dXJuIHRoaXMuc2VuZElubGluZVJlY2lwaWVudHMoZmxhZ3MpO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSAtLWZpbGUgZmxhZyAodXBsb2FkIHRvIFIyKVxuICAgIGlmIChmbGFncy5maWxlKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGxvYWRBbmRTZW5kKGZsYWdzKTtcbiAgICB9XG5cbiAgICBlcnJvcihcIkVpdGhlciAtLWZpbGUsIC0tdG8sIC0tcmV1c2UsIG9yIC0taGlzdG9yeSBpcyByZXF1aXJlZFwiKTtcbiAgICB0aGlzLmV4aXQoMSk7XG4gIH1cblxuICAvKipcbiAgICogU2hvdyBiYXRjaCB1cGxvYWQgaGlzdG9yeVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBzaG93SGlzdG9yeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzcGluID0gc3Bpbm5lcihcIkZldGNoaW5nIGJhdGNoIGhpc3RvcnkuLi5cIikuc3RhcnQoKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaUNsaWVudC5nZXQ8QmF0Y2hIaXN0b3J5UmVzcG9uc2U+KFxuICAgICAgICBcIi9hcGkvY2xpL2JhdGNoL2hpc3RvcnlcIixcbiAgICAgICAgeyBsaW1pdDogMTUgfSxcbiAgICAgICk7XG5cbiAgICAgIHNwaW4uc3RvcCgpO1xuXG4gICAgICBpZiAoaXNKc29uTW9kZSgpKSB7XG4gICAgICAgIGpzb24ocmVzcG9uc2UpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXNwb25zZS51cGxvYWRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb25zb2xlLmxvZyhjb2xvcnMuZGltKFwiXFxuTm8gYmF0Y2ggdXBsb2FkcyBmb3VuZC5cXG5cIikpO1xuICAgICAgICBjb25zb2xlLmxvZyhcIlVwbG9hZCBhIENTViBmaWxlIHdpdGg6IHNlbmRseSBzbXMgYmF0Y2ggLS1maWxlIHlvdXIuY3N2XCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnNvbGUubG9nKGNvbG9ycy5ib2xkKFwiXFxu8J+TgSBSZWNlbnQgQmF0Y2ggVXBsb2Fkc1xcblwiKSk7XG4gICAgICBjb25zb2xlLmxvZyhjb2xvcnMuZGltKFwi4pSAXCIucmVwZWF0KDgwKSkpO1xuXG4gICAgICBmb3IgKGNvbnN0IHVwbG9hZCBvZiByZXNwb25zZS51cGxvYWRzKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh1cGxvYWQuY3JlYXRlZEF0KS50b0xvY2FsZVN0cmluZygpO1xuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5mb3JtYXRCeXRlcyh1cGxvYWQuc2l6ZSk7XG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IHVwbG9hZC5tZXRhZGF0YT8uc291cmNlID09PSBcImNsaVwiID8gXCJDTElcIiA6IFwiV2ViXCI7XG5cbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgYCR7Y29sb3JzLmluZm8odXBsb2FkLmlkLnNsaWNlKDAsIDgpKX0gICR7dXBsb2FkLmZpbGVuYW1lfWAsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGNvbG9ycy5kaW0oXG4gICAgICAgICAgICBgICAgJHtkYXRlfSB8ICR7c2l6ZX0gfCAke3VwbG9hZC5tZXRhZGF0YT8udmFsaWRDb3VudCB8fCAwfSB2YWxpZCByZWNpcGllbnRzIHwgJHtzb3VyY2V9YCxcbiAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zb2xlLmxvZyhjb2xvcnMuZGltKFwi4pSAXCIucmVwZWF0KDgwKSkpO1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGNvbG9ycy5kaW0oXCJcXG5SZS11c2UgYSBiYXRjaDogc2VuZGx5IHNtcyBiYXRjaCAtLXJldXNlIDxpZD5cIiksXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgc3Bpbi5zdG9wKCk7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlLXVzZSBhIHByZXZpb3VzIGJhdGNoIHVwbG9hZFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyByZXVzZUJhdGNoKFxuICAgIHVwbG9hZElkOiBzdHJpbmcsXG4gICAgZmxhZ3M6IHsgdGV4dD86IHN0cmluZzsgZnJvbT86IHN0cmluZzsgdHlwZT86IHN0cmluZzsgXCJkcnktcnVuXCI/OiBib29sZWFuIH0sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHNwaW4gPSBzcGlubmVyKFwiRmV0Y2hpbmcgYmF0Y2ggZGF0YS4uLlwiKS5zdGFydCgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXBpQ2xpZW50LmdldDxCYXRjaFVwbG9hZFJlc3BvbnNlPihcbiAgICAgICAgYC9hcGkvY2xpL2JhdGNoL3JldXNlLyR7dXBsb2FkSWR9YCxcbiAgICAgICk7XG5cbiAgICAgIHNwaW4uc3RvcCgpO1xuXG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgY29sb3JzLnN1Y2Nlc3MoYFxcbuKckyBMb2FkZWQgYmF0Y2g6ICR7cmVzcG9uc2UudXBsb2FkLmZpbGVuYW1lfWApLFxuICAgICAgKTtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBjb2xvcnMuZGltKFxuICAgICAgICAgIGAgICR7cmVzcG9uc2UudmFsaWRhdGlvbi52YWxpZENvdW50fSB2YWxpZCByZWNpcGllbnRzIGZyb20gJHtyZXNwb25zZS52YWxpZGF0aW9uLnRvdGFsUm93c30gcm93c2AsXG4gICAgICAgICksXG4gICAgICApO1xuXG4gICAgICAvLyBBcHBseSBzaGFyZWQgdGV4dCBpZiBwcm92aWRlZFxuICAgICAgbGV0IG1lc3NhZ2VzID0gcmVzcG9uc2UucmVjaXBpZW50cztcbiAgICAgIGlmIChmbGFncy50ZXh0KSB7XG4gICAgICAgIG1lc3NhZ2VzID0gbWVzc2FnZXMubWFwKChyKSA9PiAoe1xuICAgICAgICAgIHRvOiByLnRvLFxuICAgICAgICAgIHRleHQ6IHIudGV4dCB8fCBmbGFncy50ZXh0LFxuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIGFsbCBtZXNzYWdlcyBoYXZlIHRleHRcbiAgICAgIGNvbnN0IG1pc3NpbmdUZXh0ID0gbWVzc2FnZXMuZmlsdGVyKChtKSA9PiAhbS50ZXh0Py50cmltKCkpO1xuICAgICAgaWYgKG1pc3NpbmdUZXh0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgZXJyb3IoXG4gICAgICAgICAgYCR7bWlzc2luZ1RleHQubGVuZ3RofSByZWNpcGllbnRzIG1pc3NpbmcgbWVzc2FnZSB0ZXh0LiBVc2UgLS10ZXh0IHRvIHByb3ZpZGUgYSBkZWZhdWx0LmAsXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuZXhpdCgxKTtcbiAgICAgIH1cblxuICAgICAgLy8gUHJvY2VlZCB3aXRoIHByZXZpZXcgb3Igc2VuZFxuICAgICAgYXdhaXQgdGhpcy5wcmV2aWV3T3JTZW5kKFxuICAgICAgICBtZXNzYWdlcyBhcyBBcnJheTx7IHRvOiBzdHJpbmc7IHRleHQ6IHN0cmluZyB9PixcbiAgICAgICAgZmxhZ3MsXG4gICAgICAgIHJlc3BvbnNlLnVwbG9hZC5pZCxcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBzcGluLnN0b3AoKTtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2VuZCB0byBpbmxpbmUgcmVjaXBpZW50cyAoLS10byBmbGFnKVxuICAgKiBUaGlzIHBhdGggZG9lc24ndCB1cGxvYWQgdG8gUjIgc2luY2UgaXQncyBqdXN0IGEgZmV3IG51bWJlcnNcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgc2VuZElubGluZVJlY2lwaWVudHMoZmxhZ3M6IHtcbiAgICB0bz86IHN0cmluZztcbiAgICB0ZXh0Pzogc3RyaW5nO1xuICAgIGZyb20/OiBzdHJpbmc7XG4gICAgdHlwZT86IHN0cmluZztcbiAgICBcImRyeS1ydW5cIj86IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIWZsYWdzLnRleHQpIHtcbiAgICAgIGVycm9yKFwiLS10ZXh0IGlzIHJlcXVpcmVkIHdoZW4gdXNpbmcgLS10b1wiKTtcbiAgICAgIHRoaXMuZXhpdCgxKTtcbiAgICB9XG5cbiAgICBjb25zdCBwaG9uZXMgPSBmbGFncy50byEuc3BsaXQoXCIsXCIpLm1hcCgocCkgPT4gcC50cmltKCkpO1xuICAgIGNvbnN0IG1lc3NhZ2VzID0gcGhvbmVzLm1hcCgocGhvbmUpID0+ICh7XG4gICAgICB0bzogcGhvbmUuc3RhcnRzV2l0aChcIitcIikgPyBwaG9uZSA6IGArJHtwaG9uZX1gLFxuICAgICAgdGV4dDogZmxhZ3MudGV4dCEsXG4gICAgfSkpO1xuXG4gICAgLy8gVmFsaWRhdGUgcGhvbmUgbnVtYmVyc1xuICAgIGZvciAoY29uc3QgbXNnIG9mIG1lc3NhZ2VzKSB7XG4gICAgICBpZiAoIS9eXFwrWzEtOV1cXGR7MSwxNH0kLy50ZXN0KG1zZy50bykpIHtcbiAgICAgICAgZXJyb3IoYEludmFsaWQgcGhvbmUgbnVtYmVyOiAke21zZy50b31gLCB7XG4gICAgICAgICAgaGludDogXCJVc2UgRS4xNjQgZm9ybWF0OiArMTU1NTEyMzQ1NjdcIixcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZXhpdCgxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnByZXZpZXdPclNlbmQobWVzc2FnZXMsIGZsYWdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGxvYWQgQ1NWIHRvIFIyIGFuZCBzZW5kXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHVwbG9hZEFuZFNlbmQoZmxhZ3M6IHtcbiAgICBmaWxlPzogc3RyaW5nO1xuICAgIHRleHQ/OiBzdHJpbmc7XG4gICAgZnJvbT86IHN0cmluZztcbiAgICB0eXBlPzogc3RyaW5nO1xuICAgIFwiZHJ5LXJ1blwiPzogYm9vbGVhbjtcbiAgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGZpbGVQYXRoID0gZmxhZ3MuZmlsZSE7XG5cbiAgICAvLyBDaGVjayBmaWxlIGV4aXN0c1xuICAgIGlmICghZXhpc3RzU3luYyhmaWxlUGF0aCkpIHtcbiAgICAgIGVycm9yKGBGaWxlIG5vdCBmb3VuZDogJHtmaWxlUGF0aH1gKTtcbiAgICAgIHRoaXMuZXhpdCgxKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBmaWxlIGV4dGVuc2lvblxuICAgIGlmICghZmlsZVBhdGguZW5kc1dpdGgoXCIuY3N2XCIpKSB7XG4gICAgICBlcnJvcihcIk9ubHkgQ1NWIGZpbGVzIGFyZSBzdXBwb3J0ZWRcIiwge1xuICAgICAgICBoaW50OiBcIkNvbnZlcnQgeW91ciBmaWxlIHRvIENTViBmb3JtYXQgd2l0aCBjb2x1bW5zOiBwaG9uZSxtZXNzYWdlXCIsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZXhpdCgxKTtcbiAgICB9XG5cbiAgICAvLyBSZWFkIGZpbGVcbiAgICBjb25zdCBidWZmZXIgPSByZWFkRmlsZVN5bmMoZmlsZVBhdGgpO1xuICAgIGNvbnN0IGZpbGVuYW1lID0gYmFzZW5hbWUoZmlsZVBhdGgpO1xuXG4gICAgLy8gQ2hlY2sgZmlsZSBzaXplICg1TUIgbGltaXQpXG4gICAgaWYgKGJ1ZmZlci5sZW5ndGggPiA1ICogMTAyNCAqIDEwMjQpIHtcbiAgICAgIGVycm9yKFwiRmlsZSB0b28gbGFyZ2UgKG1heCA1TUIpXCIsIHtcbiAgICAgICAgaGludDogXCJTcGxpdCB5b3VyIENTViBpbnRvIHNtYWxsZXIgZmlsZXNcIixcbiAgICAgIH0pO1xuICAgICAgdGhpcy5leGl0KDEpO1xuICAgIH1cblxuICAgIGNvbnN0IHNwaW4gPSBzcGlubmVyKGBVcGxvYWRpbmcgJHtmaWxlbmFtZX0uLi5gKS5zdGFydCgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFVwbG9hZCB0byBSMiB2aWEgQ0xJIGVuZHBvaW50XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaUNsaWVudC51cGxvYWRGaWxlPEJhdGNoVXBsb2FkUmVzcG9uc2U+KFxuICAgICAgICBcIi9hcGkvY2xpL2JhdGNoL3VwbG9hZFwiLFxuICAgICAgICB7IGJ1ZmZlciwgZmlsZW5hbWUsIG1pbWV0eXBlOiBcInRleHQvY3N2XCIgfSxcbiAgICAgICk7XG5cbiAgICAgIHNwaW4uc3RvcCgpO1xuXG4gICAgICAvLyBTaG93IHVwbG9hZCBzdW1tYXJ5XG4gICAgICBjb25zb2xlLmxvZyhjb2xvcnMuc3VjY2VzcyhgXFxu4pyTIFVwbG9hZGVkOiAke3Jlc3BvbnNlLnVwbG9hZC5maWxlbmFtZX1gKSk7XG4gICAgICBjb25zb2xlLmxvZyhjb2xvcnMuZGltKGAgIFVwbG9hZCBJRDogJHtyZXNwb25zZS51cGxvYWQuaWR9YCkpO1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGNvbG9ycy5kaW0oXG4gICAgICAgICAgYCAgJHtyZXNwb25zZS52YWxpZGF0aW9uLnZhbGlkQ291bnR9IHZhbGlkIC8gJHtyZXNwb25zZS52YWxpZGF0aW9uLmludmFsaWRDb3VudH0gaW52YWxpZCAvICR7cmVzcG9uc2UudmFsaWRhdGlvbi5kdXBsaWNhdGVzUmVtb3ZlZH0gZHVwbGljYXRlcyByZW1vdmVkYCxcbiAgICAgICAgKSxcbiAgICAgICk7XG5cbiAgICAgIC8vIFNob3cgdmFsaWRhdGlvbiBlcnJvcnMgaWYgYW55XG4gICAgICBpZiAocmVzcG9uc2UuZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc29sZS5sb2coY29sb3JzLndhcm5pbmcoYFxcbuKaoO+4jyAgVmFsaWRhdGlvbiBlcnJvcnM6YCkpO1xuICAgICAgICBmb3IgKGNvbnN0IGVyciBvZiByZXNwb25zZS5lcnJvcnMuc2xpY2UoMCwgNSkpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGNvbG9ycy5kaW0oYCAgIFJvdyAke2Vyci5yb3d9OiAke2Vyci5waG9uZX0gLSAke2Vyci5lcnJvcn1gKSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXNwb25zZS5oYXNNb3JlRXJyb3JzKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBjb2xvcnMuZGltKFxuICAgICAgICAgICAgICBgICAgLi4uIGFuZCAke3Jlc3BvbnNlLnZhbGlkYXRpb24uaW52YWxpZENvdW50IC0gNX0gbW9yZSBlcnJvcnNgLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXNwb25zZS5yZWNpcGllbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBlcnJvcihcIk5vIHZhbGlkIHJlY2lwaWVudHMgZm91bmQgaW4gQ1NWXCIpO1xuICAgICAgICB0aGlzLmV4aXQoMSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEFwcGx5IHNoYXJlZCB0ZXh0IGlmIHByb3ZpZGVkXG4gICAgICBsZXQgbWVzc2FnZXMgPSByZXNwb25zZS5yZWNpcGllbnRzO1xuICAgICAgaWYgKGZsYWdzLnRleHQpIHtcbiAgICAgICAgbWVzc2FnZXMgPSBtZXNzYWdlcy5tYXAoKHIpID0+ICh7XG4gICAgICAgICAgdG86IHIudG8sXG4gICAgICAgICAgdGV4dDogci50ZXh0IHx8IGZsYWdzLnRleHQsXG4gICAgICAgIH0pKTtcbiAgICAgIH1cblxuICAgICAgLy8gVmFsaWRhdGUgYWxsIG1lc3NhZ2VzIGhhdmUgdGV4dFxuICAgICAgY29uc3QgbWlzc2luZ1RleHQgPSBtZXNzYWdlcy5maWx0ZXIoKG0pID0+ICFtLnRleHQ/LnRyaW0oKSk7XG4gICAgICBpZiAobWlzc2luZ1RleHQubGVuZ3RoID4gMCkge1xuICAgICAgICBlcnJvcihcbiAgICAgICAgICBgJHttaXNzaW5nVGV4dC5sZW5ndGh9IHJlY2lwaWVudHMgbWlzc2luZyBtZXNzYWdlIHRleHQuIFVzZSAtLXRleHQgdG8gcHJvdmlkZSBhIGRlZmF1bHQuYCxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgY29sb3JzLmRpbShcbiAgICAgICAgICAgIFwiXFxuQ1NWIHNob3VsZCBoYXZlIGNvbHVtbnM6IHBob25lLG1lc3NhZ2UgT1IgdXNlIC0tdGV4dCBmbGFnXCIsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5leGl0KDEpO1xuICAgICAgfVxuXG4gICAgICAvLyBQcm9jZWVkIHdpdGggcHJldmlldyBvciBzZW5kXG4gICAgICBhd2FpdCB0aGlzLnByZXZpZXdPclNlbmQoXG4gICAgICAgIG1lc3NhZ2VzIGFzIEFycmF5PHsgdG86IHN0cmluZzsgdGV4dDogc3RyaW5nIH0+LFxuICAgICAgICBmbGFncyxcbiAgICAgICAgcmVzcG9uc2UudXBsb2FkLmlkLFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHNwaW4uc3RvcCgpO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQcmV2aWV3IG9yIHNlbmQgdGhlIGJhdGNoXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHByZXZpZXdPclNlbmQoXG4gICAgbWVzc2FnZXM6IEFycmF5PHsgdG86IHN0cmluZzsgdGV4dDogc3RyaW5nIH0+LFxuICAgIGZsYWdzOiB7IGZyb20/OiBzdHJpbmc7IHR5cGU/OiBzdHJpbmc7IFwiZHJ5LXJ1blwiPzogYm9vbGVhbiB9LFxuICAgIHVwbG9hZElkPzogc3RyaW5nLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBDaGVjayBiYXRjaCBzaXplXG4gICAgaWYgKG1lc3NhZ2VzLmxlbmd0aCA+IDEwMDApIHtcbiAgICAgIGVycm9yKFwiQmF0Y2ggc2l6ZSBjYW5ub3QgZXhjZWVkIDEwMDAgbWVzc2FnZXNcIiwge1xuICAgICAgICBoaW50OiBcIlNwbGl0IHlvdXIgbWVzc2FnZXMgaW50byBzbWFsbGVyIGJhdGNoZXNcIixcbiAgICAgIH0pO1xuICAgICAgdGhpcy5leGl0KDEpO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBkcnktcnVuIG1vZGVcbiAgICBpZiAoZmxhZ3NbXCJkcnktcnVuXCJdKSB7XG4gICAgICByZXR1cm4gdGhpcy5zaG93UHJldmlldyhtZXNzYWdlcywgZmxhZ3MpO1xuICAgIH1cblxuICAgIC8vIFNlbmQgdGhlIGJhdGNoXG4gICAgY29uc3Qgc3BpbiA9IHNwaW5uZXIoYFNlbmRpbmcgJHttZXNzYWdlcy5sZW5ndGh9IG1lc3NhZ2VzLi4uYCk7XG4gICAgc3Bpbi5zdGFydCgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXBpQ2xpZW50LnBvc3Q8QmF0Y2hSZXNwb25zZT4oXG4gICAgICAgIFwiL2FwaS92MS9tZXNzYWdlcy9iYXRjaFwiLFxuICAgICAgICB7XG4gICAgICAgICAgbWVzc2FnZXMsXG4gICAgICAgICAgbWVzc2FnZVR5cGU6IGZsYWdzLnR5cGUsXG4gICAgICAgICAgLi4uKGZsYWdzLmZyb20gJiYgeyBmcm9tOiBmbGFncy5mcm9tIH0pLFxuICAgICAgICAgIC4uLih1cGxvYWRJZCAmJiB7IHVwbG9hZElkIH0pLCAvLyBMaW5rIHRvIGZpbGUgdXBsb2FkIGZvciBhdWRpdCB0cmFpbFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgc3Bpbi5zdG9wKCk7XG5cbiAgICAgIGlmIChpc0pzb25Nb2RlKCkpIHtcbiAgICAgICAganNvbihyZXNwb25zZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gRGV0ZXJtaW5lIHN1Y2Nlc3MgbGV2ZWxcbiAgICAgIGNvbnN0IGFsbFN1Y2NlZWRlZCA9IHJlc3BvbnNlLmZhaWxlZCA9PT0gMDtcbiAgICAgIGNvbnN0IGFsbEZhaWxlZCA9IHJlc3BvbnNlLnNlbnQgPT09IDAgJiYgcmVzcG9uc2UuZmFpbGVkID4gMDtcbiAgICAgIGNvbnN0IHBhcnRpYWxTdWNjZXNzID0gcmVzcG9uc2Uuc2VudCA+IDAgJiYgcmVzcG9uc2UuZmFpbGVkID4gMDtcblxuICAgICAgaWYgKGFsbFN1Y2NlZWRlZCkge1xuICAgICAgICBzdWNjZXNzKFwiQmF0Y2ggc2VudCBzdWNjZXNzZnVsbHlcIiwge1xuICAgICAgICAgIFwiQmF0Y2ggSURcIjogcmVzcG9uc2UuYmF0Y2hJZCxcbiAgICAgICAgICBUb3RhbDogcmVzcG9uc2UudG90YWwsXG4gICAgICAgICAgU2VudDogY29sb3JzLnN1Y2Nlc3MoU3RyaW5nKHJlc3BvbnNlLnNlbnQpKSxcbiAgICAgICAgICBcIkNyZWRpdHMgVXNlZFwiOiByZXNwb25zZS5jcmVkaXRzVXNlZCxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGFsbEZhaWxlZCkge1xuICAgICAgICBlcnJvcihcIkJhdGNoIGZhaWxlZFwiLCB7XG4gICAgICAgICAgaGludDogYEFsbCAke3Jlc3BvbnNlLmZhaWxlZH0gbWVzc2FnZXMgZmFpbGVkIHRvIHNlbmRgLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc29sZS5sb2coY29sb3JzLmRpbShgICBCYXRjaCBJRDogJHtyZXNwb25zZS5iYXRjaElkfWApKTtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgY29sb3JzLmRpbShgICBDcmVkaXRzIFJlZnVuZGVkOiAke3Jlc3BvbnNlLmNyZWRpdHNSZWZ1bmRlZH1gKSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAocGFydGlhbFN1Y2Nlc3MpIHtcbiAgICAgICAgY29uc29sZS5sb2coY29sb3JzLndhcm5pbmcoXCJcXG7imqDvuI8gIEJhdGNoIGNvbXBsZXRlZCB3aXRoIGVycm9yc1xcblwiKSk7XG4gICAgICAgIGNvbnNvbGUubG9nKGAgIEJhdGNoIElEOiAgICAgICAgICR7cmVzcG9uc2UuYmF0Y2hJZH1gKTtcbiAgICAgICAgY29uc29sZS5sb2coYCAgVG90YWw6ICAgICAgICAgICAgJHtyZXNwb25zZS50b3RhbH1gKTtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgYCAgU2VudDogICAgICAgICAgICAgJHtjb2xvcnMuc3VjY2VzcyhTdHJpbmcocmVzcG9uc2Uuc2VudCkpfWAsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGAgIEZhaWxlZDogICAgICAgICAgICR7Y29sb3JzLmVycm9yKFN0cmluZyhyZXNwb25zZS5mYWlsZWQpKX1gLFxuICAgICAgICApO1xuICAgICAgICBjb25zb2xlLmxvZyhgICBDcmVkaXRzIFVzZWQ6ICAgICAke3Jlc3BvbnNlLmNyZWRpdHNVc2VkfWApO1xuICAgICAgICBjb25zb2xlLmxvZyhgICBDcmVkaXRzIFJlZnVuZGVkOiAke3Jlc3BvbnNlLmNyZWRpdHNSZWZ1bmRlZH1gKTtcblxuICAgICAgICAvLyBTaG93IGZhaWxlZCBtZXNzYWdlcyBpZiBhdmFpbGFibGVcbiAgICAgICAgaWYgKHJlc3BvbnNlLm1lc3NhZ2VzKSB7XG4gICAgICAgICAgY29uc3QgZmFpbGVkTXNncyA9IHJlc3BvbnNlLm1lc3NhZ2VzLmZpbHRlcihcbiAgICAgICAgICAgIChtKSA9PiBtLnN0YXR1cyA9PT0gXCJmYWlsZWRcIixcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChmYWlsZWRNc2dzLmxlbmd0aCA+IDAgJiYgZmFpbGVkTXNncy5sZW5ndGggPD0gNSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coY29sb3JzLmRpbShcIlxcbiAgRmFpbGVkIG1lc3NhZ2VzOlwiKSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG1zZyBvZiBmYWlsZWRNc2dzKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgIGNvbG9ycy5kaW0oYCAgICAke21zZy50b306ICR7bXNnLmVycm9yIHx8IFwiVW5rbm93biBlcnJvclwifWApLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoZmFpbGVkTXNncy5sZW5ndGggPiA1KSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgY29sb3JzLmRpbShcbiAgICAgICAgICAgICAgICBgXFxuICAke2ZhaWxlZE1zZ3MubGVuZ3RofSBtZXNzYWdlcyBmYWlsZWQuIFVzZSAtLWpzb24gZm9yIGRldGFpbHMuYCxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBzcGluLnN0b3AoKTtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2hvdyBiYXRjaCBwcmV2aWV3IChkcnktcnVuIG1vZGUpXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHNob3dQcmV2aWV3KFxuICAgIG1lc3NhZ2VzOiBBcnJheTx7IHRvOiBzdHJpbmc7IHRleHQ6IHN0cmluZyB9PixcbiAgICBmbGFnczogeyB0eXBlPzogc3RyaW5nIH0sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHNwaW4gPSBzcGlubmVyKFwiQW5hbHl6aW5nIGJhdGNoLi4uXCIpLnN0YXJ0KCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcHJldmlldyA9IGF3YWl0IGFwaUNsaWVudC5wb3N0PEJhdGNoUHJldmlld1Jlc3BvbnNlPihcbiAgICAgICAgXCIvYXBpL3YxL21lc3NhZ2VzL2JhdGNoL3ByZXZpZXdcIixcbiAgICAgICAgeyBtZXNzYWdlcywgbWVzc2FnZVR5cGU6IGZsYWdzLnR5cGUgfSxcbiAgICAgICk7XG5cbiAgICAgIHNwaW4uc3RvcCgpO1xuXG4gICAgICBpZiAoaXNKc29uTW9kZSgpKSB7XG4gICAgICAgIGpzb24ocHJldmlldyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gU2hvdyBjb21wcmVoZW5zaXZlIHByZXZpZXdcbiAgICAgIGNvbnNvbGUubG9nKGNvbG9ycy5ib2xkKFwiXFxu8J+TiiBCYXRjaCBQcmV2aWV3IChEcnkgUnVuKVxcblwiKSk7XG5cbiAgICAgIC8vIFN1bW1hcnkgdGFibGVcbiAgICAgIGNvbnNvbGUubG9nKGNvbG9ycy5kaW0oXCLilIBcIi5yZXBlYXQoNTApKSk7XG4gICAgICBjb25zb2xlLmxvZyhgVG90YWwgbWVzc2FnZXM6ICAgICAke3ByZXZpZXcudG90YWx9YCk7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgYFNlbmRhYmxlOiAgICAgICAgICAgJHtjb2xvcnMuc3VjY2VzcyhTdHJpbmcocHJldmlldy5zZW5kYWJsZSkpfWAsXG4gICAgICApO1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGBCbG9ja2VkOiAgICAgICAgICAgICR7cHJldmlldy5ibG9ja2VkID4gMCA/IGNvbG9ycy5lcnJvcihTdHJpbmcocHJldmlldy5ibG9ja2VkKSkgOiBcIjBcIn1gLFxuICAgICAgKTtcbiAgICAgIGNvbnNvbGUubG9nKGBEdXBsaWNhdGVzIHJlbW92ZWQ6ICR7cHJldmlldy5kdXBsaWNhdGVzfWApO1xuICAgICAgY29uc29sZS5sb2coY29sb3JzLmRpbShcIuKUgFwiLnJlcGVhdCg1MCkpKTtcblxuICAgICAgLy8gQ3JlZGl0c1xuICAgICAgY29uc29sZS5sb2coYFxcbkNyZWRpdHMgbmVlZGVkOiAgICAgJHtwcmV2aWV3LmNyZWRpdHNOZWVkZWR9YCk7XG4gICAgICBjb25zb2xlLmxvZyhgWW91ciBiYWxhbmNlOiAgICAgICAke3ByZXZpZXcuY3JlZGl0QmFsYW5jZX1gKTtcbiAgICAgIGlmICghcHJldmlldy5oYXNTdWZmaWNpZW50Q3JlZGl0cykge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBjb2xvcnMuZXJyb3IoXG4gICAgICAgICAgICBg4pqg77iPICBJbnN1ZmZpY2llbnQgY3JlZGl0cyEgTmVlZCAke3ByZXZpZXcuY3JlZGl0c05lZWRlZCAtIHByZXZpZXcuY3JlZGl0QmFsYW5jZX0gbW9yZS5gLFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIEFjY2VzcyBpbmZvXG4gICAgICBjb25zb2xlLmxvZyhgXFxuQVBJIEtleSB0eXBlOiAgICAgICAke3ByZXZpZXcua2V5VHlwZS50b1VwcGVyQ2FzZSgpfWApO1xuICAgICAgY29uc29sZS5sb2coYFdyaXRlIGFjY2VzczogICAgICAgJHtwcmV2aWV3Lmhhc1dyaXRlU2NvcGUgPyBcIuKck1wiIDogXCLinJdcIn1gKTtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBgRG9tZXN0aWMgKFVTL0NBKTogICAke3ByZXZpZXcubWVzc2FnaW5nUHJvZmlsZS5jYW5TZW5kRG9tZXN0aWMgPyBcIuKck1wiIDogXCLinJdcIn1gLFxuICAgICAgKTtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBgSW50ZXJuYXRpb25hbDogICAgICAke3ByZXZpZXcubWVzc2FnaW5nUHJvZmlsZS5jYW5TZW5kSW50ZXJuYXRpb25hbCA/IFwi4pyTXCIgOiBcIuKcl1wifWAsXG4gICAgICApO1xuXG4gICAgICAvLyBDb3VudHJ5IGJyZWFrZG93blxuICAgICAgY29uc3QgY291bnRyaWVzID0gT2JqZWN0LmVudHJpZXMocHJldmlldy5ieUNvdW50cnkpO1xuICAgICAgaWYgKGNvdW50cmllcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNvbG9ycy5ib2xkKFwiXFxu8J+TjSBCeSBDb3VudHJ5OlxcblwiKSk7XG4gICAgICAgIGZvciAoY29uc3QgW2NvdW50cnksIGRhdGFdIG9mIGNvdW50cmllcykge1xuICAgICAgICAgIGNvbnN0IHN0YXR1cyA9IGRhdGEuYWxsb3dlZCA/IGNvbG9ycy5zdWNjZXNzKFwi4pyTXCIpIDogY29sb3JzLmVycm9yKFwi4pyXXCIpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYCAgJHtzdGF0dXN9ICR7Y291bnRyeX06ICR7ZGF0YS5jb3VudH0gbXNncywgJHtkYXRhLmNyZWRpdHN9IGNyZWRpdHMgKCR7ZGF0YS50aWVyfSlgLFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKCFkYXRhLmFsbG93ZWQgJiYgZGF0YS5ibG9ja2VkUmVhc29uKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjb2xvcnMuZGltKGAgICAgIOKUlOKUgCAke2RhdGEuYmxvY2tlZFJlYXNvbn1gKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENvbXBsaWFuY2UgY2hlY2sgcmVzdWx0c1xuICAgICAgaWYgKHByZXZpZXcuY29tcGxpYW5jZSkge1xuICAgICAgICBjb25zb2xlLmxvZyhjb2xvcnMuYm9sZChcIlxcbvCfm6HvuI8gIENvbXBsaWFuY2UgQ2hlY2s6XFxuXCIpKTtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgYCAgTWVzc2FnZSBUeXBlOiAgICAgICR7cHJldmlldy5jb21wbGlhbmNlLm1lc3NhZ2VUeXBlLnRvVXBwZXJDYXNlKCl9YCxcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAocHJldmlldy5jb21wbGlhbmNlLnNoYWZ0QmxvY2tlZCA+IDApIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGNvbG9ycy5lcnJvcihcbiAgICAgICAgICAgICAgYCAgU0hBRlQgQmxvY2tlZDogICAgICR7cHJldmlldy5jb21wbGlhbmNlLnNoYWZ0QmxvY2tlZH0gbWVzc2FnZXNgLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGZvciAoY29uc3QgbXNnIG9mIHByZXZpZXcuY29tcGxpYW5jZS5zaGFmdEJsb2NrZWRNZXNzYWdlcy5zbGljZShcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAzLFxuICAgICAgICAgICkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICBjb2xvcnMuZGltKFxuICAgICAgICAgICAgICAgIGAgICAgIOKUlOKUgCAke21zZy50b306ICR7bXNnLmNhdGVnb3J5fSAoJHttc2cubWF0Y2hlZFRlcm1zLmpvaW4oXCIsIFwiKX0pYCxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwcmV2aWV3LmNvbXBsaWFuY2Uuc2hhZnRCbG9ja2VkTWVzc2FnZXMubGVuZ3RoID4gMykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgIGNvbG9ycy5kaW0oXG4gICAgICAgICAgICAgICAgYCAgICAgLi4uIGFuZCAke3ByZXZpZXcuY29tcGxpYW5jZS5zaGFmdEJsb2NrZWRNZXNzYWdlcy5sZW5ndGggLSAzfSBtb3JlYCxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgY29sb3JzLnN1Y2Nlc3MoXG4gICAgICAgICAgICAgIFwiICBTSEFGVCBDaGVjazogICAgICAg4pyTIEFsbCBtZXNzYWdlcyBwYXNzIGNvbnRlbnQgZmlsdGVyXCIsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJldmlldy5jb21wbGlhbmNlLm1lc3NhZ2VUeXBlID09PSBcIm1hcmtldGluZ1wiKSB7XG4gICAgICAgICAgaWYgKHByZXZpZXcuY29tcGxpYW5jZS5xdWlldEhvdXJzUmVzY2hlZHVsZWQgPiAwKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgY29sb3JzLndhcm5pbmcoXG4gICAgICAgICAgICAgICAgYCAgUXVpZXQgSG91cnM6ICAgICAgICR7cHJldmlldy5jb21wbGlhbmNlLnF1aWV0SG91cnNSZXNjaGVkdWxlZH0gbWVzc2FnZXMgd2lsbCBiZSByZXNjaGVkdWxlZGAsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZm9yIChjb25zdCBtc2cgb2YgcHJldmlldy5jb21wbGlhbmNlLnF1aWV0SG91cnNCbG9ja2VkTWVzc2FnZXMuc2xpY2UoXG4gICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgIDMsXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG5leHRUaW1lID0gbXNnLm5leHRBbGxvd2VkVGltZVxuICAgICAgICAgICAgICAgID8gbmV3IERhdGUobXNnLm5leHRBbGxvd2VkVGltZSkudG9Mb2NhbGVTdHJpbmcoKVxuICAgICAgICAgICAgICAgIDogXCJuZXh0IGF2YWlsYWJsZSB3aW5kb3dcIjtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgY29sb3JzLmRpbShcbiAgICAgICAgICAgICAgICAgIGAgICAgIOKUlOKUgCAke21zZy50b306ICR7bXNnLnJlY2lwaWVudFRpbWV6b25lfSDihpIgJHtuZXh0VGltZX1gLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJldmlldy5jb21wbGlhbmNlLnF1aWV0SG91cnNCbG9ja2VkTWVzc2FnZXMubGVuZ3RoID4gMykge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICBjb2xvcnMuZGltKFxuICAgICAgICAgICAgICAgICAgYCAgICAgLi4uIGFuZCAke3ByZXZpZXcuY29tcGxpYW5jZS5xdWlldEhvdXJzQmxvY2tlZE1lc3NhZ2VzLmxlbmd0aCAtIDN9IG1vcmVgLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICBjb2xvcnMuc3VjY2VzcyhcbiAgICAgICAgICAgICAgICBcIiAgUXVpZXQgSG91cnM6ICAgICAgIOKckyBBbGwgcmVjaXBpZW50cyB3aXRoaW4gYWxsb3dlZCBob3Vyc1wiLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBjb2xvcnMuZGltKFwiICBRdWlldCBIb3VyczogICAgICAgQnlwYXNzZWQgKHRyYW5zYWN0aW9uYWwgbWVzc2FnZSlcIiksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBXYXJuaW5nc1xuICAgICAgaWYgKHByZXZpZXcud2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zb2xlLmxvZyhjb2xvcnMud2FybmluZyhcIlxcbuKaoO+4jyAgV2FybmluZ3M6XCIpKTtcbiAgICAgICAgZm9yIChjb25zdCB3IG9mIHByZXZpZXcud2FybmluZ3MpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICAg4oCiICR7d31gKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBCbG9ja2VkIG1lc3NhZ2VzIChmaXJzdCA1KVxuICAgICAgaWYgKHByZXZpZXcuYmxvY2tlZE1lc3NhZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgY29sb3JzLmVycm9yKFxuICAgICAgICAgICAgYFxcbuKdjCBCbG9ja2VkIE1lc3NhZ2VzICgke3ByZXZpZXcuYmxvY2tlZE1lc3NhZ2VzLmxlbmd0aH0gdG90YWwpOmAsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgICAgZm9yIChjb25zdCBiIG9mIHByZXZpZXcuYmxvY2tlZE1lc3NhZ2VzLnNsaWNlKDAsIDUpKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgICR7Yi50b306ICR7Yi5yZWFzb259YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByZXZpZXcuYmxvY2tlZE1lc3NhZ2VzLmxlbmd0aCA+IDUpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGNvbG9ycy5kaW0oYCAgIC4uLiBhbmQgJHtwcmV2aWV3LmJsb2NrZWRNZXNzYWdlcy5sZW5ndGggLSA1fSBtb3JlYCksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJcXG5cIiArIGNvbG9ycy5kaW0oXCJObyBtZXNzYWdlcyB3ZXJlIHNlbnQuIFJlbW92ZSAtLWRyeS1ydW4gdG8gc2VuZC5cIiksXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgc3Bpbi5zdG9wKCk7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCBieXRlcyB0byBodW1hbiByZWFkYWJsZSBzdHJpbmdcbiAgICovXG4gIHByaXZhdGUgZm9ybWF0Qnl0ZXMoYnl0ZXM6IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKGJ5dGVzIDwgMTAyNCkgcmV0dXJuIGAke2J5dGVzfSBCYDtcbiAgICBpZiAoYnl0ZXMgPCAxMDI0ICogMTAyNCkgcmV0dXJuIGAkeyhieXRlcyAvIDEwMjQpLnRvRml4ZWQoMSl9IEtCYDtcbiAgICByZXR1cm4gYCR7KGJ5dGVzIC8gKDEwMjQgKiAxMDI0KSkudG9GaXhlZCgxKX0gTUJgO1xuICB9XG59XG4iXX0=
|
|
@@ -4,9 +4,10 @@ export default class SmsSend extends AuthenticatedCommand {
|
|
|
4
4
|
static examples: string[];
|
|
5
5
|
static flags: {
|
|
6
6
|
to: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
7
|
-
text: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
7
|
+
text: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
8
8
|
from: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
9
9
|
type: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
10
|
+
"media-url": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string[] | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
10
11
|
json: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
11
12
|
quiet: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
12
13
|
};
|