@sendly/cli 3.35.0 → 3.37.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +204 -1
- package/dist/commands/10dlc/assignments/list.d.ts +10 -0
- package/dist/commands/10dlc/assignments/list.js +67 -0
- package/dist/commands/10dlc/brands/create.d.ts +25 -0
- package/dist/commands/10dlc/brands/create.js +89 -0
- package/dist/commands/10dlc/brands/get.d.ts +13 -0
- package/dist/commands/10dlc/brands/get.js +63 -0
- package/dist/commands/10dlc/brands/list.d.ts +10 -0
- package/dist/commands/10dlc/brands/list.js +63 -0
- package/dist/commands/10dlc/campaigns/assign.d.ts +14 -0
- package/dist/commands/10dlc/campaigns/assign.js +64 -0
- package/dist/commands/10dlc/campaigns/create.d.ts +24 -0
- package/dist/commands/10dlc/campaigns/create.js +118 -0
- package/dist/commands/10dlc/campaigns/get.d.ts +13 -0
- package/dist/commands/10dlc/campaigns/get.js +84 -0
- package/dist/commands/10dlc/campaigns/list.d.ts +10 -0
- package/dist/commands/10dlc/campaigns/list.js +70 -0
- package/dist/commands/10dlc/qualify.d.ts +14 -0
- package/dist/commands/10dlc/qualify.js +56 -0
- package/dist/commands/business-upgrade/cancel.d.ts +12 -0
- package/dist/commands/business-upgrade/cancel.js +47 -0
- package/dist/commands/business-upgrade/disposition.d.ts +13 -0
- package/dist/commands/business-upgrade/disposition.js +44 -0
- package/dist/commands/business-upgrade/preflight.d.ts +16 -0
- package/dist/commands/business-upgrade/preflight.js +82 -0
- package/dist/commands/business-upgrade/resubmit.d.ts +24 -0
- package/dist/commands/business-upgrade/resubmit.js +109 -0
- package/dist/commands/business-upgrade/start.d.ts +38 -0
- package/dist/commands/business-upgrade/start.js +142 -0
- package/dist/commands/business-upgrade/status.d.ts +11 -0
- package/dist/commands/business-upgrade/status.js +38 -0
- package/dist/commands/enterprise/verification/get.d.ts +13 -0
- package/dist/commands/enterprise/verification/get.js +78 -0
- package/dist/commands/enterprise/verification/resubmit.d.ts +41 -0
- package/dist/commands/enterprise/verification/resubmit.js +87 -0
- package/dist/commands/enterprise/verification/submit.d.ts +77 -0
- package/dist/commands/enterprise/verification/submit.js +212 -0
- package/dist/commands/keys/rotate.js +7 -12
- package/dist/commands/links/create.d.ts +24 -0
- package/dist/commands/links/create.js +71 -0
- package/dist/commands/links/disable.d.ts +21 -0
- package/dist/commands/links/disable.js +55 -0
- package/dist/commands/links/list.d.ts +19 -0
- package/dist/commands/links/list.js +85 -0
- package/dist/commands/numbers/buy.d.ts +31 -0
- package/dist/commands/numbers/buy.js +266 -0
- package/dist/commands/numbers/get.d.ts +20 -0
- package/dist/commands/numbers/get.js +52 -0
- package/dist/commands/numbers/list.d.ts +10 -0
- package/dist/commands/numbers/list.js +70 -0
- package/dist/commands/numbers/release.d.ts +23 -0
- package/dist/commands/numbers/release.js +67 -0
- package/dist/commands/numbers/search.d.ts +13 -0
- package/dist/commands/numbers/search.js +78 -0
- package/dist/commands/numbers/update.d.ts +25 -0
- package/dist/commands/numbers/update.js +70 -0
- package/dist/commands/sms/group.d.ts +25 -0
- package/dist/commands/sms/group.js +164 -0
- package/dist/commands/sms/upload-media.d.ts +1 -1
- package/dist/commands/sms/upload-media.js +4 -4
- package/dist/commands/templates/enhance.js +3 -3
- package/dist/commands/upgrade.d.ts +1 -16
- package/dist/commands/upgrade.js +131 -38
- package/dist/lib/auth.js +2 -94
- package/dist/lib/config.js +31 -2
- package/dist/lib/detect-install-path.d.ts +11 -7
- package/dist/lib/detect-install-path.js +25 -9
- package/dist/lib/keypress.d.ts +26 -0
- package/dist/lib/keypress.js +103 -0
- package/oclif.manifest.json +5005 -2698
- package/package.json +22 -1
package/dist/commands/upgrade.js
CHANGED
|
@@ -1,67 +1,160 @@
|
|
|
1
1
|
import { Command, Flags } from "@oclif/core";
|
|
2
2
|
import { spawn } from "node:child_process";
|
|
3
3
|
import { detectInstallPath, upgradeCommandFor, } from "../lib/detect-install-path.js";
|
|
4
|
-
import { success, error, info } from "../lib/output.js";
|
|
4
|
+
import { colors, success, error, info, spinner, divider, } from "../lib/output.js";
|
|
5
5
|
/**
|
|
6
|
-
* `sendly upgrade` — bring the CLI up to the latest version
|
|
6
|
+
* `sendly upgrade` — bring the CLI up to the latest version with a guided,
|
|
7
|
+
* animated flow: an animated version check, a `vCURRENT → vLATEST` diff, and a
|
|
8
|
+
* success panel. The noisy package-manager output is hidden behind a spinner
|
|
9
|
+
* for Homebrew (which never needs sudo); for npm we keep inherited stdio so an
|
|
10
|
+
* auth/sudo prompt can never hang invisibly behind a spinner.
|
|
7
11
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* path is unknown we print both options for the user to pick.
|
|
12
|
+
* `--check` is a dry-run: it shows the detected install method and the command
|
|
13
|
+
* that would run, without changing anything.
|
|
11
14
|
*
|
|
12
|
-
* The
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* The unattended in-band update banner that prompts users to run this
|
|
17
|
-
* comes from the `@oclif/plugin-warn-if-update-available` plugin wired
|
|
18
|
-
* in package.json; this command is the companion action for that
|
|
19
|
-
* banner.
|
|
15
|
+
* The unattended banner that nudges users to run this comes from the
|
|
16
|
+
* `@oclif/plugin-warn-if-update-available` plugin wired in package.json; this
|
|
17
|
+
* command is the companion action for that banner.
|
|
20
18
|
*/
|
|
19
|
+
const REGISTRY_URL = "https://registry.npmjs.org/@sendly/cli";
|
|
20
|
+
const CHANGELOG_URL = "https://sendly.live/docs/changelog";
|
|
21
|
+
function bumpType(from, to) {
|
|
22
|
+
const a = from.split(".").map((n) => parseInt(n, 10));
|
|
23
|
+
const b = to.split(".").map((n) => parseInt(n, 10));
|
|
24
|
+
if (a.length < 3 || b.length < 3 || [...a, ...b].some(Number.isNaN))
|
|
25
|
+
return "";
|
|
26
|
+
if (b[0] > a[0])
|
|
27
|
+
return "major";
|
|
28
|
+
if (b[1] > a[1])
|
|
29
|
+
return "minor";
|
|
30
|
+
if (b[2] > a[2])
|
|
31
|
+
return "patch";
|
|
32
|
+
return "";
|
|
33
|
+
}
|
|
34
|
+
async function fetchLatest() {
|
|
35
|
+
try {
|
|
36
|
+
const controller = new AbortController();
|
|
37
|
+
const timer = setTimeout(() => controller.abort(), 4000);
|
|
38
|
+
const res = await fetch(REGISTRY_URL, {
|
|
39
|
+
headers: { accept: "application/vnd.npm.install-v1+json" },
|
|
40
|
+
signal: controller.signal,
|
|
41
|
+
});
|
|
42
|
+
clearTimeout(timer);
|
|
43
|
+
if (!res.ok)
|
|
44
|
+
return null;
|
|
45
|
+
const body = (await res.json());
|
|
46
|
+
return body["dist-tags"]?.latest ?? null;
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function runCaptured(command) {
|
|
53
|
+
return new Promise((resolve) => {
|
|
54
|
+
const [bin, ...args] = command.split(" ");
|
|
55
|
+
const child = spawn(bin, args, { stdio: ["ignore", "pipe", "pipe"] });
|
|
56
|
+
let output = "";
|
|
57
|
+
child.stdout?.on("data", (d) => (output += d.toString()));
|
|
58
|
+
child.stderr?.on("data", (d) => (output += d.toString()));
|
|
59
|
+
child.on("error", (err) => resolve({ code: 1, output: err.message }));
|
|
60
|
+
child.on("exit", (code) => resolve({ code: code ?? 1, output }));
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
function runInherited(command) {
|
|
64
|
+
return new Promise((resolve) => {
|
|
65
|
+
const [bin, ...args] = command.split(" ");
|
|
66
|
+
const child = spawn(bin, args, { stdio: "inherit" });
|
|
67
|
+
child.on("error", () => resolve(1));
|
|
68
|
+
child.on("exit", (code) => resolve(code ?? 1));
|
|
69
|
+
});
|
|
70
|
+
}
|
|
21
71
|
export default class Upgrade extends Command {
|
|
22
|
-
static description = "Upgrade Sendly CLI to the latest version
|
|
72
|
+
static description = "Upgrade the Sendly CLI to the latest version with a guided, animated flow.";
|
|
23
73
|
static examples = [
|
|
24
74
|
"<%= config.bin %> upgrade",
|
|
25
75
|
"<%= config.bin %> upgrade --check",
|
|
26
76
|
];
|
|
27
77
|
static flags = {
|
|
28
78
|
check: Flags.boolean({
|
|
29
|
-
description: "
|
|
79
|
+
description: "Show what would happen without changing anything",
|
|
30
80
|
default: false,
|
|
31
81
|
}),
|
|
32
82
|
};
|
|
33
83
|
async run() {
|
|
34
84
|
const { flags } = await this.parse(Upgrade);
|
|
85
|
+
const current = this.config.version;
|
|
86
|
+
divider();
|
|
87
|
+
console.log(` ${colors.highlight("⚡ Sendly CLI")} ${colors.dim("upgrade")}`);
|
|
88
|
+
divider();
|
|
89
|
+
const spin = spinner("Checking for the latest version...").start();
|
|
90
|
+
const latest = await fetchLatest();
|
|
91
|
+
if (latest && latest === current) {
|
|
92
|
+
spin.succeed(`You're on the latest version ${colors.success.bold("v" + current)}`);
|
|
93
|
+
divider();
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
if (latest) {
|
|
97
|
+
const kind = bumpType(current, latest);
|
|
98
|
+
spin.succeed(`Update available${kind ? " " + colors.dim(`(${kind})`) : ""}`);
|
|
99
|
+
console.log(` ${colors.dim("v" + current)} ${colors.primary("→")} ${colors.success.bold("v" + latest)}`);
|
|
100
|
+
divider();
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
spin.succeed("Ready to upgrade");
|
|
104
|
+
}
|
|
35
105
|
const installPath = detectInstallPath();
|
|
36
106
|
const command = upgradeCommandFor(installPath);
|
|
37
107
|
if (installPath === "unknown") {
|
|
38
|
-
info("Can't detect how
|
|
39
|
-
"
|
|
40
|
-
"
|
|
108
|
+
info("Can't detect how the CLI was installed. Run whichever matches:\n" +
|
|
109
|
+
` ${colors.code("brew upgrade sendly")} ${colors.dim("(Homebrew)")}\n` +
|
|
110
|
+
` ${colors.code("npm install -g @sendly/cli@latest")} ${colors.dim("(npm)")}`);
|
|
41
111
|
return;
|
|
42
112
|
}
|
|
43
113
|
if (flags.check) {
|
|
44
|
-
info(`
|
|
114
|
+
info(`Install method: ${colors.bold(installPath)}\n` +
|
|
115
|
+
`Would run: ${colors.code(command)}`);
|
|
45
116
|
return;
|
|
46
117
|
}
|
|
47
|
-
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
118
|
+
const via = installPath === "homebrew" ? "Homebrew" : "npm";
|
|
119
|
+
const target = latest ? ` to ${colors.success("v" + latest)}` : "";
|
|
120
|
+
if (installPath === "homebrew") {
|
|
121
|
+
// Homebrew never needs sudo, so it's safe to hide its output behind a
|
|
122
|
+
// spinner for a clean, animated upgrade.
|
|
123
|
+
const upSpin = spinner(`Upgrading via ${via}${target}...`).start();
|
|
124
|
+
const { code, output } = await runCaptured(command);
|
|
125
|
+
if (code === 0) {
|
|
126
|
+
upSpin.stop();
|
|
127
|
+
this.renderSuccess(via, latest);
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
upSpin.fail(`Upgrade failed via ${via}`);
|
|
131
|
+
const tail = output.trim().split("\n").slice(-6).join("\n");
|
|
132
|
+
if (tail)
|
|
133
|
+
console.log(colors.dim(tail));
|
|
134
|
+
error(`Try running it yourself: ${colors.code(command)}`);
|
|
135
|
+
}
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
// npm: keep inherited stdio so any auth/sudo prompt stays visible.
|
|
139
|
+
info(`Upgrading via ${via}${target}`);
|
|
140
|
+
console.log(colors.dim(` ${command}`));
|
|
141
|
+
divider();
|
|
142
|
+
const code = await runInherited(command);
|
|
143
|
+
if (code === 0) {
|
|
144
|
+
this.renderSuccess(via, latest);
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
error(`Upgrade command exited with code ${code}. Try running it yourself: ${colors.code(command)}`);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
renderSuccess(via, latest) {
|
|
151
|
+
success(latest
|
|
152
|
+
? `Upgraded to ${colors.success.bold("v" + latest)} via ${via}`
|
|
153
|
+
: `Upgrade complete via ${via}`);
|
|
154
|
+
divider();
|
|
155
|
+
info(`What's new: ${colors.code(CHANGELOG_URL)}`);
|
|
156
|
+
info("Run `sendly --version` to confirm.");
|
|
157
|
+
divider();
|
|
65
158
|
}
|
|
66
159
|
}
|
|
67
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBncmFkZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy91cGdyYWRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLGlCQUFpQixHQUNsQixNQUFNLCtCQUErQixDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXhEOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE1BQU0sQ0FBQyxPQUFPLE9BQU8sT0FBUSxTQUFRLE9BQU87SUFDMUMsTUFBTSxDQUFDLFdBQVcsR0FDaEIseUdBQXlHLENBQUM7SUFFNUcsTUFBTSxDQUFDLFFBQVEsR0FBRztRQUNoQiwyQkFBMkI7UUFDM0IsbUNBQW1DO0tBQ3BDLENBQUM7SUFFRixNQUFNLENBQUMsS0FBSyxHQUFHO1FBQ2IsS0FBSyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDbkIsV0FBVyxFQUNULHNFQUFzRTtZQUN4RSxPQUFPLEVBQUUsS0FBSztTQUNmLENBQUM7S0FDSCxDQUFDO0lBRUYsS0FBSyxDQUFDLEdBQUc7UUFDUCxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTVDLE1BQU0sV0FBVyxHQUFHLGlCQUFpQixFQUFFLENBQUM7UUFDeEMsTUFBTSxPQUFPLEdBQUcsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFL0MsSUFBSSxXQUFXLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUNGLDZFQUE2RTtnQkFDM0UscUNBQXFDO2dCQUNyQyxpREFBaUQsQ0FDcEQsQ0FBQztZQUNGLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUNGLDBCQUEwQixXQUFXLGdCQUFnQixPQUFPLEVBQUUsQ0FDL0QsQ0FBQztZQUNGLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLGlCQUFpQixXQUFXLEtBQUssT0FBTyxFQUFFLENBQUMsQ0FBQztRQUVqRCxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBRXJELE1BQU0sSUFBSSxPQUFPLENBQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNsQyxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUN4QixJQUFJLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDZixPQUFPLENBQ0wsc0VBQXNFLENBQ3ZFLENBQUM7Z0JBQ0osQ0FBQztxQkFBTSxDQUFDO29CQUNOLEtBQUssQ0FDSCxvQ0FBb0MsSUFBSSxtQkFBbUIsT0FBTyxjQUFjLENBQ2pGLENBQUM7Z0JBQ0osQ0FBQztnQkFDRCxPQUFPLEVBQUUsQ0FBQztZQUNaLENBQUMsQ0FBQyxDQUFDO1lBQ0gsS0FBSyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDeEIsS0FBSyxDQUNILHNDQUFzQyxHQUFHLENBQUMsT0FBTyxtQkFBbUIsT0FBTyxjQUFjLENBQzFGLENBQUM7Z0JBQ0YsT0FBTyxFQUFFLENBQUM7WUFDWixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1hbmQsIEZsYWdzIH0gZnJvbSBcIkBvY2xpZi9jb3JlXCI7XG5pbXBvcnQgeyBzcGF3biB9IGZyb20gXCJub2RlOmNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7XG4gIGRldGVjdEluc3RhbGxQYXRoLFxuICB1cGdyYWRlQ29tbWFuZEZvcixcbn0gZnJvbSBcIi4uL2xpYi9kZXRlY3QtaW5zdGFsbC1wYXRoLmpzXCI7XG5pbXBvcnQgeyBzdWNjZXNzLCBlcnJvciwgaW5mbyB9IGZyb20gXCIuLi9saWIvb3V0cHV0LmpzXCI7XG5cbi8qKlxuICogYHNlbmRseSB1cGdyYWRlYCDigJQgYnJpbmcgdGhlIENMSSB1cCB0byB0aGUgbGF0ZXN0IHZlcnNpb24uXG4gKlxuICogRGV0ZWN0cyB0aGUgaW5zdGFsbCBwYXRoIChIb21lYnJldyB2cyBucG0tZ2xvYmFsIHZzIHVua25vd24pIGFuZFxuICogZXhlY3V0ZXMgdGhlIG1hdGNoaW5nIHBhY2thZ2UtbWFuYWdlciB1cGdyYWRlIGNvbW1hbmQuIElmIHRoZSBpbnN0YWxsXG4gKiBwYXRoIGlzIHVua25vd24gd2UgcHJpbnQgYm90aCBvcHRpb25zIGZvciB0aGUgdXNlciB0byBwaWNrLlxuICpcbiAqIFRoZSBgLS1jaGVja2AgZmxhZyBkb2VzIGEgZHJ5LXJ1bjogcHJpbnRzIHdoYXQgd291bGQgaGFwcGVuIHdpdGhvdXRcbiAqIGV4ZWN1dGluZyBhbnl0aGluZy4gVXNlZnVsIGluIHJlc3RyaWN0ZWQgc2hlbGxzIHdoZXJlIHdlIGRvbid0IHdhbnRcbiAqIHRvIHRyaWdnZXIgYSBicmV3L25wbSBydW4gYWNjaWRlbnRhbGx5LlxuICpcbiAqIFRoZSB1bmF0dGVuZGVkIGluLWJhbmQgdXBkYXRlIGJhbm5lciB0aGF0IHByb21wdHMgdXNlcnMgdG8gcnVuIHRoaXNcbiAqIGNvbWVzIGZyb20gdGhlIGBAb2NsaWYvcGx1Z2luLXdhcm4taWYtdXBkYXRlLWF2YWlsYWJsZWAgcGx1Z2luIHdpcmVkXG4gKiBpbiBwYWNrYWdlLmpzb247IHRoaXMgY29tbWFuZCBpcyB0aGUgY29tcGFuaW9uIGFjdGlvbiBmb3IgdGhhdFxuICogYmFubmVyLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVcGdyYWRlIGV4dGVuZHMgQ29tbWFuZCB7XG4gIHN0YXRpYyBkZXNjcmlwdGlvbiA9XG4gICAgXCJVcGdyYWRlIFNlbmRseSBDTEkgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uIHVzaW5nIHRoZSBwYWNrYWdlIG1hbmFnZXIgdGhhdCBpbnN0YWxsZWQgaXQgKEhvbWVicmV3IG9yIG5wbSkuXCI7XG5cbiAgc3RhdGljIGV4YW1wbGVzID0gW1xuICAgIFwiPCU9IGNvbmZpZy5iaW4gJT4gdXBncmFkZVwiLFxuICAgIFwiPCU9IGNvbmZpZy5iaW4gJT4gdXBncmFkZSAtLWNoZWNrXCIsXG4gIF07XG5cbiAgc3RhdGljIGZsYWdzID0ge1xuICAgIGNoZWNrOiBGbGFncy5ib29sZWFuKHtcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIlByaW50IHRoZSB1cGdyYWRlIGNvbW1hbmQgZm9yIHlvdXIgaW5zdGFsbCBwYXRoIHdpdGhvdXQgZXhlY3V0aW5nIGl0XCIsXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICB9KSxcbiAgfTtcblxuICBhc3luYyBydW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBmbGFncyB9ID0gYXdhaXQgdGhpcy5wYXJzZShVcGdyYWRlKTtcblxuICAgIGNvbnN0IGluc3RhbGxQYXRoID0gZGV0ZWN0SW5zdGFsbFBhdGgoKTtcbiAgICBjb25zdCBjb21tYW5kID0gdXBncmFkZUNvbW1hbmRGb3IoaW5zdGFsbFBhdGgpO1xuXG4gICAgaWYgKGluc3RhbGxQYXRoID09PSBcInVua25vd25cIikge1xuICAgICAgaW5mbyhcbiAgICAgICAgXCJDYW4ndCBkZXRlY3QgaG93IHlvdSBpbnN0YWxsZWQgdGhlIFNlbmRseSBDTEkuIFBpY2sgdGhlIG1hdGNoaW5nIGNvbW1hbmQ6XFxuXCIgK1xuICAgICAgICAgIFwiICDigKIgSG9tZWJyZXc6IGJyZXcgdXBncmFkZSBzZW5kbHlcXG5cIiArXG4gICAgICAgICAgXCIgIOKAoiBucG06ICAgICAgbnBtIGluc3RhbGwgLWcgQHNlbmRseS9jbGlAbGF0ZXN0XCIsXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChmbGFncy5jaGVjaykge1xuICAgICAgaW5mbyhcbiAgICAgICAgYERldGVjdGVkIGluc3RhbGwgcGF0aDogJHtpbnN0YWxsUGF0aH1cXG5Xb3VsZCBydW46ICR7Y29tbWFuZH1gLFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpbmZvKGBVcGdyYWRpbmcgdmlhICR7aW5zdGFsbFBhdGh9OiAke2NvbW1hbmR9YCk7XG5cbiAgICBjb25zdCBbYmluLCAuLi5hcmdzXSA9IGNvbW1hbmQuc3BsaXQoXCIgXCIpO1xuICAgIGNvbnN0IGNoaWxkID0gc3Bhd24oYmluLCBhcmdzLCB7IHN0ZGlvOiBcImluaGVyaXRcIiB9KTtcblxuICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICBjaGlsZC5vbihcImV4aXRcIiwgKGNvZGUpID0+IHtcbiAgICAgICAgaWYgKGNvZGUgPT09IDApIHtcbiAgICAgICAgICBzdWNjZXNzKFxuICAgICAgICAgICAgXCJVcGdyYWRlIGNvbXBsZXRlLiBSdW4gYHNlbmRseSAtLXZlcnNpb25gIHRvIGNvbmZpcm0gdGhlIG5ldyB2ZXJzaW9uLlwiLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICBgVXBncmFkZSBjb21tYW5kIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfS4gVHJ5IHJ1bm5pbmcgXFxgJHtjb21tYW5kfVxcYCBtYW51YWxseS5gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSk7XG4gICAgICBjaGlsZC5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgZXJyb3IoXG4gICAgICAgICAgYEZhaWxlZCB0byBleGVjdXRlIHVwZ3JhZGUgY29tbWFuZDogJHtlcnIubWVzc2FnZX0uIFRyeSBydW5uaW5nIFxcYCR7Y29tbWFuZH1cXGAgbWFudWFsbHkuYCxcbiAgICAgICAgKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
160
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBncmFkZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy91cGdyYWRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLGlCQUFpQixHQUNsQixNQUFNLCtCQUErQixDQUFDO0FBQ3ZDLE9BQU8sRUFDTCxNQUFNLEVBQ04sT0FBTyxFQUNQLEtBQUssRUFDTCxJQUFJLEVBQ0osT0FBTyxFQUNQLE9BQU8sR0FDUixNQUFNLGtCQUFrQixDQUFDO0FBRTFCOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFFSCxNQUFNLFlBQVksR0FBRyx3Q0FBd0MsQ0FBQztBQUM5RCxNQUFNLGFBQWEsR0FBRyxvQ0FBb0MsQ0FBQztBQUUzRCxTQUFTLFFBQVEsQ0FBQyxJQUFZLEVBQUUsRUFBVTtJQUN4QyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3RELE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDcEQsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUMvRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQUUsT0FBTyxPQUFPLENBQUM7SUFDaEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUFFLE9BQU8sT0FBTyxDQUFDO0lBQ2hDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFBRSxPQUFPLE9BQU8sQ0FBQztJQUNoQyxPQUFPLEVBQUUsQ0FBQztBQUNaLENBQUM7QUFFRCxLQUFLLFVBQVUsV0FBVztJQUN4QixJQUFJLENBQUM7UUFDSCxNQUFNLFVBQVUsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQ3pDLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDekQsTUFBTSxHQUFHLEdBQUcsTUFBTSxLQUFLLENBQUMsWUFBWSxFQUFFO1lBQ3BDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxxQ0FBcUMsRUFBRTtZQUMxRCxNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU07U0FDMUIsQ0FBQyxDQUFDO1FBQ0gsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3pCLE1BQU0sSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLENBRTdCLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxNQUFNLElBQUksSUFBSSxDQUFDO0lBQzNDLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxXQUFXLENBQ2xCLE9BQWU7SUFFZixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDN0IsTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0RSxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDaEIsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFELEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMxRCxLQUFLLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN0RSxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ25FLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLE9BQWU7SUFDbkMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQzdCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDckQsS0FBSyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqRCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxNQUFNLENBQUMsT0FBTyxPQUFPLE9BQVEsU0FBUSxPQUFPO0lBQzFDLE1BQU0sQ0FBQyxXQUFXLEdBQ2hCLDRFQUE0RSxDQUFDO0lBRS9FLE1BQU0sQ0FBQyxRQUFRLEdBQUc7UUFDaEIsMkJBQTJCO1FBQzNCLG1DQUFtQztLQUNwQyxDQUFDO0lBRUYsTUFBTSxDQUFDLEtBQUssR0FBRztRQUNiLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDO1lBQ25CLFdBQVcsRUFBRSxrREFBa0Q7WUFDL0QsT0FBTyxFQUFFLEtBQUs7U0FDZixDQUFDO0tBQ0gsQ0FBQztJQUVGLEtBQUssQ0FBQyxHQUFHO1FBQ1AsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUVwQyxPQUFPLEVBQUUsQ0FBQztRQUNWLE9BQU8sQ0FBQyxHQUFHLENBQ1QsS0FBSyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FDbEUsQ0FBQztRQUNGLE9BQU8sRUFBRSxDQUFDO1FBRVYsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLG9DQUFvQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbkUsTUFBTSxNQUFNLEdBQUcsTUFBTSxXQUFXLEVBQUUsQ0FBQztRQUVuQyxJQUFJLE1BQU0sSUFBSSxNQUFNLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLE9BQU8sQ0FDVixnQ0FBZ0MsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQ3JFLENBQUM7WUFDRixPQUFPLEVBQUUsQ0FBQztZQUNWLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLE9BQU8sQ0FDVixtQkFBbUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUMvRCxDQUFDO1lBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FDVCxLQUFLLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxLQUFLLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQy9GLENBQUM7WUFDRixPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFFRCxNQUFNLFdBQVcsR0FBRyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3hDLE1BQU0sT0FBTyxHQUFHLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRS9DLElBQUksV0FBVyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FDRixrRUFBa0U7Z0JBQ2hFLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxtQkFBbUIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsSUFBSTtnQkFDdEYsS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLG1DQUFtQyxDQUFDLEtBQUssTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUNsRixDQUFDO1lBQ0YsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQ0YsbUJBQW1CLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUk7Z0JBQzdDLG1CQUFtQixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQzVDLENBQUM7WUFDRixPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sR0FBRyxHQUFHLFdBQVcsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQzVELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFbkUsSUFBSSxXQUFXLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDL0Isc0VBQXNFO1lBQ3RFLHlDQUF5QztZQUN6QyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxNQUFNLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25FLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDcEQsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ2YsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNkLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ2xDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLENBQUMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLEVBQUUsQ0FBQyxDQUFDO2dCQUN6QyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDNUQsSUFBSSxJQUFJO29CQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUN4QyxLQUFLLENBQUMsNEJBQTRCLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzVELENBQUM7WUFDRCxPQUFPO1FBQ1QsQ0FBQztRQUVELG1FQUFtRTtRQUNuRSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3RDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN4QyxPQUFPLEVBQUUsQ0FBQztRQUNWLE1BQU0sSUFBSSxHQUFHLE1BQU0sWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pDLElBQUksSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbEMsQ0FBQzthQUFNLENBQUM7WUFDTixLQUFLLENBQ0gsb0NBQW9DLElBQUksOEJBQThCLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FDN0YsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRU8sYUFBYSxDQUFDLEdBQVcsRUFBRSxNQUFxQjtRQUN0RCxPQUFPLENBQ0wsTUFBTTtZQUNKLENBQUMsQ0FBQyxlQUFlLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsUUFBUSxHQUFHLEVBQUU7WUFDL0QsQ0FBQyxDQUFDLHdCQUF3QixHQUFHLEVBQUUsQ0FDbEMsQ0FBQztRQUNGLE9BQU8sRUFBRSxDQUFDO1FBQ1YsSUFBSSxDQUFDLGVBQWUsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLG9DQUFvQyxDQUFDLENBQUM7UUFDM0MsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbWFuZCwgRmxhZ3MgfSBmcm9tIFwiQG9jbGlmL2NvcmVcIjtcbmltcG9ydCB7IHNwYXduIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHtcbiAgZGV0ZWN0SW5zdGFsbFBhdGgsXG4gIHVwZ3JhZGVDb21tYW5kRm9yLFxufSBmcm9tIFwiLi4vbGliL2RldGVjdC1pbnN0YWxsLXBhdGguanNcIjtcbmltcG9ydCB7XG4gIGNvbG9ycyxcbiAgc3VjY2VzcyxcbiAgZXJyb3IsXG4gIGluZm8sXG4gIHNwaW5uZXIsXG4gIGRpdmlkZXIsXG59IGZyb20gXCIuLi9saWIvb3V0cHV0LmpzXCI7XG5cbi8qKlxuICogYHNlbmRseSB1cGdyYWRlYCDigJQgYnJpbmcgdGhlIENMSSB1cCB0byB0aGUgbGF0ZXN0IHZlcnNpb24gd2l0aCBhIGd1aWRlZCxcbiAqIGFuaW1hdGVkIGZsb3c6IGFuIGFuaW1hdGVkIHZlcnNpb24gY2hlY2ssIGEgYHZDVVJSRU5UIOKGkiB2TEFURVNUYCBkaWZmLCBhbmQgYVxuICogc3VjY2VzcyBwYW5lbC4gVGhlIG5vaXN5IHBhY2thZ2UtbWFuYWdlciBvdXRwdXQgaXMgaGlkZGVuIGJlaGluZCBhIHNwaW5uZXJcbiAqIGZvciBIb21lYnJldyAod2hpY2ggbmV2ZXIgbmVlZHMgc3Vkbyk7IGZvciBucG0gd2Uga2VlcCBpbmhlcml0ZWQgc3RkaW8gc28gYW5cbiAqIGF1dGgvc3VkbyBwcm9tcHQgY2FuIG5ldmVyIGhhbmcgaW52aXNpYmx5IGJlaGluZCBhIHNwaW5uZXIuXG4gKlxuICogYC0tY2hlY2tgIGlzIGEgZHJ5LXJ1bjogaXQgc2hvd3MgdGhlIGRldGVjdGVkIGluc3RhbGwgbWV0aG9kIGFuZCB0aGUgY29tbWFuZFxuICogdGhhdCB3b3VsZCBydW4sIHdpdGhvdXQgY2hhbmdpbmcgYW55dGhpbmcuXG4gKlxuICogVGhlIHVuYXR0ZW5kZWQgYmFubmVyIHRoYXQgbnVkZ2VzIHVzZXJzIHRvIHJ1biB0aGlzIGNvbWVzIGZyb20gdGhlXG4gKiBgQG9jbGlmL3BsdWdpbi13YXJuLWlmLXVwZGF0ZS1hdmFpbGFibGVgIHBsdWdpbiB3aXJlZCBpbiBwYWNrYWdlLmpzb247IHRoaXNcbiAqIGNvbW1hbmQgaXMgdGhlIGNvbXBhbmlvbiBhY3Rpb24gZm9yIHRoYXQgYmFubmVyLlxuICovXG5cbmNvbnN0IFJFR0lTVFJZX1VSTCA9IFwiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHNlbmRseS9jbGlcIjtcbmNvbnN0IENIQU5HRUxPR19VUkwgPSBcImh0dHBzOi8vc2VuZGx5LmxpdmUvZG9jcy9jaGFuZ2Vsb2dcIjtcblxuZnVuY3Rpb24gYnVtcFR5cGUoZnJvbTogc3RyaW5nLCB0bzogc3RyaW5nKTogXCJtYWpvclwiIHwgXCJtaW5vclwiIHwgXCJwYXRjaFwiIHwgXCJcIiB7XG4gIGNvbnN0IGEgPSBmcm9tLnNwbGl0KFwiLlwiKS5tYXAoKG4pID0+IHBhcnNlSW50KG4sIDEwKSk7XG4gIGNvbnN0IGIgPSB0by5zcGxpdChcIi5cIikubWFwKChuKSA9PiBwYXJzZUludChuLCAxMCkpO1xuICBpZiAoYS5sZW5ndGggPCAzIHx8IGIubGVuZ3RoIDwgMyB8fCBbLi4uYSwgLi4uYl0uc29tZShOdW1iZXIuaXNOYU4pKSByZXR1cm4gXCJcIjtcbiAgaWYgKGJbMF0gPiBhWzBdKSByZXR1cm4gXCJtYWpvclwiO1xuICBpZiAoYlsxXSA+IGFbMV0pIHJldHVybiBcIm1pbm9yXCI7XG4gIGlmIChiWzJdID4gYVsyXSkgcmV0dXJuIFwicGF0Y2hcIjtcbiAgcmV0dXJuIFwiXCI7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoTGF0ZXN0KCk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xuICB0cnkge1xuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKSwgNDAwMCk7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goUkVHSVNUUllfVVJMLCB7XG4gICAgICBoZWFkZXJzOiB7IGFjY2VwdDogXCJhcHBsaWNhdGlvbi92bmQubnBtLmluc3RhbGwtdjEranNvblwiIH0sXG4gICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgaWYgKCFyZXMub2spIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGJvZHkgPSAoYXdhaXQgcmVzLmpzb24oKSkgYXMge1xuICAgICAgXCJkaXN0LXRhZ3NcIj86IHsgbGF0ZXN0Pzogc3RyaW5nIH07XG4gICAgfTtcbiAgICByZXR1cm4gYm9keVtcImRpc3QtdGFnc1wiXT8ubGF0ZXN0ID8/IG51bGw7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJ1bkNhcHR1cmVkKFxuICBjb21tYW5kOiBzdHJpbmcsXG4pOiBQcm9taXNlPHsgY29kZTogbnVtYmVyOyBvdXRwdXQ6IHN0cmluZyB9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IFtiaW4sIC4uLmFyZ3NdID0gY29tbWFuZC5zcGxpdChcIiBcIik7XG4gICAgY29uc3QgY2hpbGQgPSBzcGF3bihiaW4sIGFyZ3MsIHsgc3RkaW86IFtcImlnbm9yZVwiLCBcInBpcGVcIiwgXCJwaXBlXCJdIH0pO1xuICAgIGxldCBvdXRwdXQgPSBcIlwiO1xuICAgIGNoaWxkLnN0ZG91dD8ub24oXCJkYXRhXCIsIChkKSA9PiAob3V0cHV0ICs9IGQudG9TdHJpbmcoKSkpO1xuICAgIGNoaWxkLnN0ZGVycj8ub24oXCJkYXRhXCIsIChkKSA9PiAob3V0cHV0ICs9IGQudG9TdHJpbmcoKSkpO1xuICAgIGNoaWxkLm9uKFwiZXJyb3JcIiwgKGVycikgPT4gcmVzb2x2ZSh7IGNvZGU6IDEsIG91dHB1dDogZXJyLm1lc3NhZ2UgfSkpO1xuICAgIGNoaWxkLm9uKFwiZXhpdFwiLCAoY29kZSkgPT4gcmVzb2x2ZSh7IGNvZGU6IGNvZGUgPz8gMSwgb3V0cHV0IH0pKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJ1bkluaGVyaXRlZChjb21tYW5kOiBzdHJpbmcpOiBQcm9taXNlPG51bWJlcj4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBbYmluLCAuLi5hcmdzXSA9IGNvbW1hbmQuc3BsaXQoXCIgXCIpO1xuICAgIGNvbnN0IGNoaWxkID0gc3Bhd24oYmluLCBhcmdzLCB7IHN0ZGlvOiBcImluaGVyaXRcIiB9KTtcbiAgICBjaGlsZC5vbihcImVycm9yXCIsICgpID0+IHJlc29sdmUoMSkpO1xuICAgIGNoaWxkLm9uKFwiZXhpdFwiLCAoY29kZSkgPT4gcmVzb2x2ZShjb2RlID8/IDEpKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVwZ3JhZGUgZXh0ZW5kcyBDb21tYW5kIHtcbiAgc3RhdGljIGRlc2NyaXB0aW9uID1cbiAgICBcIlVwZ3JhZGUgdGhlIFNlbmRseSBDTEkgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uIHdpdGggYSBndWlkZWQsIGFuaW1hdGVkIGZsb3cuXCI7XG5cbiAgc3RhdGljIGV4YW1wbGVzID0gW1xuICAgIFwiPCU9IGNvbmZpZy5iaW4gJT4gdXBncmFkZVwiLFxuICAgIFwiPCU9IGNvbmZpZy5iaW4gJT4gdXBncmFkZSAtLWNoZWNrXCIsXG4gIF07XG5cbiAgc3RhdGljIGZsYWdzID0ge1xuICAgIGNoZWNrOiBGbGFncy5ib29sZWFuKHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlNob3cgd2hhdCB3b3VsZCBoYXBwZW4gd2l0aG91dCBjaGFuZ2luZyBhbnl0aGluZ1wiLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgfSksXG4gIH07XG5cbiAgYXN5bmMgcnVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgZmxhZ3MgfSA9IGF3YWl0IHRoaXMucGFyc2UoVXBncmFkZSk7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuY29uZmlnLnZlcnNpb247XG5cbiAgICBkaXZpZGVyKCk7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgICAke2NvbG9ycy5oaWdobGlnaHQoXCLimqEgU2VuZGx5IENMSVwiKX0gICR7Y29sb3JzLmRpbShcInVwZ3JhZGVcIil9YCxcbiAgICApO1xuICAgIGRpdmlkZXIoKTtcblxuICAgIGNvbnN0IHNwaW4gPSBzcGlubmVyKFwiQ2hlY2tpbmcgZm9yIHRoZSBsYXRlc3QgdmVyc2lvbi4uLlwiKS5zdGFydCgpO1xuICAgIGNvbnN0IGxhdGVzdCA9IGF3YWl0IGZldGNoTGF0ZXN0KCk7XG5cbiAgICBpZiAobGF0ZXN0ICYmIGxhdGVzdCA9PT0gY3VycmVudCkge1xuICAgICAgc3Bpbi5zdWNjZWVkKFxuICAgICAgICBgWW91J3JlIG9uIHRoZSBsYXRlc3QgdmVyc2lvbiAke2NvbG9ycy5zdWNjZXNzLmJvbGQoXCJ2XCIgKyBjdXJyZW50KX1gLFxuICAgICAgKTtcbiAgICAgIGRpdmlkZXIoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAobGF0ZXN0KSB7XG4gICAgICBjb25zdCBraW5kID0gYnVtcFR5cGUoY3VycmVudCwgbGF0ZXN0KTtcbiAgICAgIHNwaW4uc3VjY2VlZChcbiAgICAgICAgYFVwZGF0ZSBhdmFpbGFibGUke2tpbmQgPyBcIiBcIiArIGNvbG9ycy5kaW0oYCgke2tpbmR9KWApIDogXCJcIn1gLFxuICAgICAgKTtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBgICAke2NvbG9ycy5kaW0oXCJ2XCIgKyBjdXJyZW50KX0gICR7Y29sb3JzLnByaW1hcnkoXCLihpJcIil9ICAke2NvbG9ycy5zdWNjZXNzLmJvbGQoXCJ2XCIgKyBsYXRlc3QpfWAsXG4gICAgICApO1xuICAgICAgZGl2aWRlcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzcGluLnN1Y2NlZWQoXCJSZWFkeSB0byB1cGdyYWRlXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGluc3RhbGxQYXRoID0gZGV0ZWN0SW5zdGFsbFBhdGgoKTtcbiAgICBjb25zdCBjb21tYW5kID0gdXBncmFkZUNvbW1hbmRGb3IoaW5zdGFsbFBhdGgpO1xuXG4gICAgaWYgKGluc3RhbGxQYXRoID09PSBcInVua25vd25cIikge1xuICAgICAgaW5mbyhcbiAgICAgICAgXCJDYW4ndCBkZXRlY3QgaG93IHRoZSBDTEkgd2FzIGluc3RhbGxlZC4gUnVuIHdoaWNoZXZlciBtYXRjaGVzOlxcblwiICtcbiAgICAgICAgICBgICAke2NvbG9ycy5jb2RlKFwiYnJldyB1cGdyYWRlIHNlbmRseVwiKX0gICAgICAgICAgICAgICAgJHtjb2xvcnMuZGltKFwiKEhvbWVicmV3KVwiKX1cXG5gICtcbiAgICAgICAgICBgICAke2NvbG9ycy5jb2RlKFwibnBtIGluc3RhbGwgLWcgQHNlbmRseS9jbGlAbGF0ZXN0XCIpfSAgJHtjb2xvcnMuZGltKFwiKG5wbSlcIil9YCxcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGZsYWdzLmNoZWNrKSB7XG4gICAgICBpbmZvKFxuICAgICAgICBgSW5zdGFsbCBtZXRob2Q6ICR7Y29sb3JzLmJvbGQoaW5zdGFsbFBhdGgpfVxcbmAgK1xuICAgICAgICAgIGBXb3VsZCBydW46ICAgICAgJHtjb2xvcnMuY29kZShjb21tYW5kKX1gLFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB2aWEgPSBpbnN0YWxsUGF0aCA9PT0gXCJob21lYnJld1wiID8gXCJIb21lYnJld1wiIDogXCJucG1cIjtcbiAgICBjb25zdCB0YXJnZXQgPSBsYXRlc3QgPyBgIHRvICR7Y29sb3JzLnN1Y2Nlc3MoXCJ2XCIgKyBsYXRlc3QpfWAgOiBcIlwiO1xuXG4gICAgaWYgKGluc3RhbGxQYXRoID09PSBcImhvbWVicmV3XCIpIHtcbiAgICAgIC8vIEhvbWVicmV3IG5ldmVyIG5lZWRzIHN1ZG8sIHNvIGl0J3Mgc2FmZSB0byBoaWRlIGl0cyBvdXRwdXQgYmVoaW5kIGFcbiAgICAgIC8vIHNwaW5uZXIgZm9yIGEgY2xlYW4sIGFuaW1hdGVkIHVwZ3JhZGUuXG4gICAgICBjb25zdCB1cFNwaW4gPSBzcGlubmVyKGBVcGdyYWRpbmcgdmlhICR7dmlhfSR7dGFyZ2V0fS4uLmApLnN0YXJ0KCk7XG4gICAgICBjb25zdCB7IGNvZGUsIG91dHB1dCB9ID0gYXdhaXQgcnVuQ2FwdHVyZWQoY29tbWFuZCk7XG4gICAgICBpZiAoY29kZSA9PT0gMCkge1xuICAgICAgICB1cFNwaW4uc3RvcCgpO1xuICAgICAgICB0aGlzLnJlbmRlclN1Y2Nlc3ModmlhLCBsYXRlc3QpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdXBTcGluLmZhaWwoYFVwZ3JhZGUgZmFpbGVkIHZpYSAke3ZpYX1gKTtcbiAgICAgICAgY29uc3QgdGFpbCA9IG91dHB1dC50cmltKCkuc3BsaXQoXCJcXG5cIikuc2xpY2UoLTYpLmpvaW4oXCJcXG5cIik7XG4gICAgICAgIGlmICh0YWlsKSBjb25zb2xlLmxvZyhjb2xvcnMuZGltKHRhaWwpKTtcbiAgICAgICAgZXJyb3IoYFRyeSBydW5uaW5nIGl0IHlvdXJzZWxmOiAke2NvbG9ycy5jb2RlKGNvbW1hbmQpfWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIG5wbToga2VlcCBpbmhlcml0ZWQgc3RkaW8gc28gYW55IGF1dGgvc3VkbyBwcm9tcHQgc3RheXMgdmlzaWJsZS5cbiAgICBpbmZvKGBVcGdyYWRpbmcgdmlhICR7dmlhfSR7dGFyZ2V0fWApO1xuICAgIGNvbnNvbGUubG9nKGNvbG9ycy5kaW0oYCAgJHtjb21tYW5kfWApKTtcbiAgICBkaXZpZGVyKCk7XG4gICAgY29uc3QgY29kZSA9IGF3YWl0IHJ1bkluaGVyaXRlZChjb21tYW5kKTtcbiAgICBpZiAoY29kZSA9PT0gMCkge1xuICAgICAgdGhpcy5yZW5kZXJTdWNjZXNzKHZpYSwgbGF0ZXN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXJyb3IoXG4gICAgICAgIGBVcGdyYWRlIGNvbW1hbmQgZXhpdGVkIHdpdGggY29kZSAke2NvZGV9LiBUcnkgcnVubmluZyBpdCB5b3Vyc2VsZjogJHtjb2xvcnMuY29kZShjb21tYW5kKX1gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlbmRlclN1Y2Nlc3ModmlhOiBzdHJpbmcsIGxhdGVzdDogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICAgIHN1Y2Nlc3MoXG4gICAgICBsYXRlc3RcbiAgICAgICAgPyBgVXBncmFkZWQgdG8gJHtjb2xvcnMuc3VjY2Vzcy5ib2xkKFwidlwiICsgbGF0ZXN0KX0gdmlhICR7dmlhfWBcbiAgICAgICAgOiBgVXBncmFkZSBjb21wbGV0ZSB2aWEgJHt2aWF9YCxcbiAgICApO1xuICAgIGRpdmlkZXIoKTtcbiAgICBpbmZvKGBXaGF0J3MgbmV3OiAke2NvbG9ycy5jb2RlKENIQU5HRUxPR19VUkwpfWApO1xuICAgIGluZm8oXCJSdW4gYHNlbmRseSAtLXZlcnNpb25gIHRvIGNvbmZpcm0uXCIpO1xuICAgIGRpdmlkZXIoKTtcbiAgfVxufVxuIl19
|
package/dist/lib/auth.js
CHANGED
|
@@ -6,6 +6,7 @@ import open from "open";
|
|
|
6
6
|
import * as crypto from "node:crypto";
|
|
7
7
|
import { setAuthTokens, setApiKey, clearAuth, getConfigValue, isAuthenticated, getAuthToken, } from "./config.js";
|
|
8
8
|
import { colors, spinner } from "./output.js";
|
|
9
|
+
import { attachLoginKeypressHandler } from "./keypress.js";
|
|
9
10
|
const USER_CODE_LENGTH = 8;
|
|
10
11
|
const POLL_INTERVAL = 2000; // 2 seconds
|
|
11
12
|
const MAX_POLL_ATTEMPTS = 150; // 5 minutes max
|
|
@@ -135,99 +136,6 @@ export async function browserLogin() {
|
|
|
135
136
|
keypressCleanup();
|
|
136
137
|
process.exit(1);
|
|
137
138
|
}
|
|
138
|
-
/**
|
|
139
|
-
* Wire up the copy-URL / cancel keybindings during the device-code
|
|
140
|
-
* polling loop. Only active on a real interactive TTY — in CI, piped
|
|
141
|
-
* stdin, or when stdin.setRawMode is missing we no-op and return a
|
|
142
|
-
* cleanup that also no-ops.
|
|
143
|
-
*
|
|
144
|
-
* Returns a cleanup function that the caller MUST invoke on every exit
|
|
145
|
-
* path (success, timeout, error) so the terminal doesn't stay in raw
|
|
146
|
-
* mode. Calling cleanup twice is safe.
|
|
147
|
-
*/
|
|
148
|
-
function attachLoginKeypressHandler(urlToCopy) {
|
|
149
|
-
const stdin = process.stdin;
|
|
150
|
-
if (!stdin.isTTY || typeof stdin.setRawMode !== "function") {
|
|
151
|
-
return () => { };
|
|
152
|
-
}
|
|
153
|
-
let cleaned = false;
|
|
154
|
-
const previousRawMode = stdin.isRaw;
|
|
155
|
-
console.log(colors.dim("Press [c] to copy URL to clipboard · [q] or Ctrl-C to cancel"));
|
|
156
|
-
const onData = (key) => {
|
|
157
|
-
const k = typeof key === "string" ? key : key.toString("utf8");
|
|
158
|
-
if (k === "c" || k === "C") {
|
|
159
|
-
copyToClipboard(urlToCopy)
|
|
160
|
-
.then((ok) => {
|
|
161
|
-
if (ok) {
|
|
162
|
-
// Overwrite the hint line with a transient confirmation.
|
|
163
|
-
process.stdout.write("\r" + " ".repeat(70) + "\r" + colors.success(" ✓ URL copied to clipboard\n"));
|
|
164
|
-
}
|
|
165
|
-
else {
|
|
166
|
-
process.stdout.write("\r" + colors.warning(" ✗ Could not copy — copy the URL manually\n"));
|
|
167
|
-
}
|
|
168
|
-
})
|
|
169
|
-
.catch(() => { });
|
|
170
|
-
return;
|
|
171
|
-
}
|
|
172
|
-
if (k === "q" || k === "Q" || k === "\u0003") {
|
|
173
|
-
cleanup();
|
|
174
|
-
console.log(colors.warning("\n Login cancelled."));
|
|
175
|
-
process.exit(130);
|
|
176
|
-
}
|
|
177
|
-
};
|
|
178
|
-
stdin.setRawMode(true);
|
|
179
|
-
stdin.resume();
|
|
180
|
-
stdin.setEncoding("utf8");
|
|
181
|
-
stdin.on("data", onData);
|
|
182
|
-
const cleanup = () => {
|
|
183
|
-
if (cleaned)
|
|
184
|
-
return;
|
|
185
|
-
cleaned = true;
|
|
186
|
-
try {
|
|
187
|
-
stdin.removeListener("data", onData);
|
|
188
|
-
stdin.setRawMode(previousRawMode);
|
|
189
|
-
stdin.pause();
|
|
190
|
-
}
|
|
191
|
-
catch {
|
|
192
|
-
/* no-op */
|
|
193
|
-
}
|
|
194
|
-
};
|
|
195
|
-
return cleanup;
|
|
196
|
-
}
|
|
197
|
-
/**
|
|
198
|
-
* Copy text to the system clipboard via the OS's native tool. Returns
|
|
199
|
-
* true if the write succeeded. Does not throw. Shells out rather than
|
|
200
|
-
* adding a native clipboard dep — the three commands (pbcopy / clip /
|
|
201
|
-
* xclip / wl-copy) cover every platform the CLI runs on.
|
|
202
|
-
*/
|
|
203
|
-
async function copyToClipboard(text) {
|
|
204
|
-
const { spawn } = await import("node:child_process");
|
|
205
|
-
const candidates = process.platform === "darwin"
|
|
206
|
-
? [["pbcopy", []]]
|
|
207
|
-
: process.platform === "win32"
|
|
208
|
-
? [["clip", []]]
|
|
209
|
-
: [
|
|
210
|
-
["wl-copy", []],
|
|
211
|
-
["xclip", ["-selection", "clipboard"]],
|
|
212
|
-
["xsel", ["--clipboard", "--input"]],
|
|
213
|
-
];
|
|
214
|
-
for (const [cmd, args] of candidates) {
|
|
215
|
-
try {
|
|
216
|
-
const ok = await new Promise((resolve) => {
|
|
217
|
-
const child = spawn(cmd, args, { stdio: ["pipe", "ignore", "ignore"] });
|
|
218
|
-
child.on("error", () => resolve(false));
|
|
219
|
-
child.on("exit", (code) => resolve(code === 0));
|
|
220
|
-
child.stdin.end(text);
|
|
221
|
-
});
|
|
222
|
-
if (ok)
|
|
223
|
-
return true;
|
|
224
|
-
}
|
|
225
|
-
catch {
|
|
226
|
-
// try next candidate
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
return false;
|
|
230
|
-
}
|
|
231
139
|
/**
|
|
232
140
|
* Login with an API key directly
|
|
233
141
|
*/
|
|
@@ -287,4 +195,4 @@ export async function getAuthInfo() {
|
|
|
287
195
|
function sleep(ms) {
|
|
288
196
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
289
197
|
}
|
|
290
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvYXV0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFFeEIsT0FBTyxLQUFLLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFDdEMsT0FBTyxFQUNMLGFBQWEsRUFDYixTQUFTLEVBQ1QsU0FBUyxFQUNULGNBQWMsRUFDZCxlQUFlLEVBQ2YsWUFBWSxHQUNiLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTlDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxDQUFDLFlBQVk7QUFDeEMsTUFBTSxpQkFBaUIsR0FBRyxHQUFHLENBQUMsQ0FBQyxnQkFBZ0I7QUFrQi9DOzs7R0FHRztBQUNILE1BQU0sVUFBVSxrQkFBa0I7SUFDaEMsT0FBTyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLDBCQUEwQjtBQUMzRSxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxnQkFBZ0I7SUFDOUIsTUFBTSxLQUFLLEdBQUcsa0NBQWtDLENBQUMsQ0FBQywwQkFBMEI7SUFDNUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ2QsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ25ELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQzFDLElBQUksSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6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QyxDQUFDO0lBQ3hDLE1BQU0sV0FBVyxHQUFHLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUVsRCxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdEIsT0FBTyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDL0MsQ0FBQztJQUVELElBQUksT0FBMkIsQ0FBQztJQUNoQyxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ1gsT0FBTyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzVELENBQUM7SUFFRCxPQUFPO1FBQ0wsYUFBYSxFQUFFLElBQUk7UUFDbkIsS0FBSztRQUNMLE1BQU07UUFDTixXQUFXO1FBQ1gsT0FBTztLQUNSLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxLQUFLLENBQUMsRUFBVTtJQUN2QixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQXV0aGVudGljYXRpb24gdXRpbGl0aWVzIGZvciBDTElcbiAqIEhhbmRsZXMgYnJvd3Nlci1iYXNlZCBsb2dpbiBmbG93IGFuZCBBUEkga2V5IGF1dGhlbnRpY2F0aW9uXG4gKi9cblxuaW1wb3J0IG9wZW4gZnJvbSBcIm9wZW5cIjtcbmltcG9ydCAqIGFzIGh0dHAgZnJvbSBcIm5vZGU6aHR0cFwiO1xuaW1wb3J0ICogYXMgY3J5cHRvIGZyb20gXCJub2RlOmNyeXB0b1wiO1xuaW1wb3J0IHtcbiAgc2V0QXV0aFRva2VucyxcbiAgc2V0QXBpS2V5LFxuICBjbGVhckF1dGgsXG4gIGdldENvbmZpZ1ZhbHVlLFxuICBpc0F1dGhlbnRpY2F0ZWQsXG4gIGdldEF1dGhUb2tlbixcbn0gZnJvbSBcIi4vY29uZmlnLmpzXCI7XG5pbXBvcnQgeyBjb2xvcnMsIHNwaW5uZXIgfSBmcm9tIFwiLi9vdXRwdXQuanNcIjtcblxuY29uc3QgVVNFUl9DT0RFX0xFTkdUSCA9IDg7XG5jb25zdCBQT0xMX0lOVEVSVkFMID0gMjAwMDsgLy8gMiBzZWNvbmRzXG5jb25zdCBNQVhfUE9MTF9BVFRFTVBUUyA9IDE1MDsgLy8gNSBtaW51dGVzIG1heFxuXG5leHBvcnQgaW50ZXJmYWNlIERldmljZUNvZGVSZXNwb25zZSB7XG4gIGRldmljZUNvZGU6IHN0cmluZztcbiAgdXNlckNvZGU6IHN0cmluZztcbiAgdmVyaWZpY2F0aW9uVXJsOiBzdHJpbmc7XG4gIGV4cGlyZXNJbjogbnVtYmVyO1xuICBpbnRlcnZhbDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRva2VuUmVzcG9uc2Uge1xuICBhY2Nlc3NUb2tlbjogc3RyaW5nO1xuICByZWZyZXNoVG9rZW46IHN0cmluZztcbiAgZXhwaXJlc0luOiBudW1iZXI7XG4gIHVzZXJJZDogc3RyaW5nO1xuICBlbWFpbDogc3RyaW5nO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIGEgbG9uZyByYW5kb20gZGV2aWNlIGNvZGUgZm9yIFVSTCAoc2Vzc2lvbiBpZGVudGlmaWVyKVxuICogVGhpcyBnb2VzIGluIHRoZSBVUkwgYW5kIGlkZW50aWZpZXMgd2hpY2ggQ0xJIHNlc3Npb24gaXMgd2FpdGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVEZXZpY2VDb2RlKCk6IHN0cmluZyB7XG4gIHJldHVybiBjcnlwdG8ucmFuZG9tQnl0ZXMoMTYpLnRvU3RyaW5nKFwiaGV4XCIpOyAvLyAzMiBjaGFycywgbm90IGd1ZXNzYWJsZVxufVxuXG4vKipcbiAqIEdlbmVyYXRlIGEgc2hvcnQgaHVtYW4tcmVhZGFibGUgdXNlciBjb2RlIGZvciB0ZXJtaW5hbCBkaXNwbGF5XG4gKiBUaGlzIGlzIHdoYXQgdGhlIHVzZXIgdHlwZXMgdG8gcHJvdmUgdGhleSBoYXZlIHRlcm1pbmFsIGFjY2Vzc1xuICogVXNlcyBjaGFyYWN0ZXJzIHRoYXQgYXJlIGVhc3kgdG8gcmVhZCBhbmQgdHlwZSAobm8gMC9PLCAxL0kvTCBjb25mdXNpb24pXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVVzZXJDb2RlKCk6IHN0cmluZyB7XG4gIGNvbnN0IGNoYXJzID0gXCJBQkNERUZHSEpLTE1OUFFSU1RVVldYWVoyMzQ1Njc4OVwiOyAvLyBFeGNsdWRlIGNvbmZ1c2luZyBjaGFyc1xuICBsZXQgY29kZSA9IFwiXCI7XG4gIGNvbnN0IGJ5dGVzID0gY3J5cHRvLnJhbmRvbUJ5dGVzKFVTRVJfQ09ERV9MRU5HVEgpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IFVTRVJfQ09ERV9MRU5HVEg7IGkrKykge1xuICAgIGNvZGUgKz0gY2hhcnNbYnl0ZXNbaV0gJSBjaGFycy5sZW5ndGhdO1xuICB9XG4gIHJldHVybiBjb2RlO1xufVxuXG4vKipcbiAqIFN0YXJ0IHRoZSBicm93c2VyLWJhc2VkIGxvZ2luIGZsb3dcbiAqXG4gKiBTZWN1cml0eSBtb2RlbDpcbiAqIC0gZGV2aWNlQ29kZTogTG9uZyByYW5kb20gdG9rZW4gaW4gVVJMLCBpZGVudGlmaWVzIENMSSBzZXNzaW9uIChub3Qgc2VjcmV0KVxuICogLSB1c2VyQ29kZTogU2hvcnQgY29kZSBzaG93biBPTkxZIGluIHRlcm1pbmFsLCBwcm92ZXMgdXNlciBoYXMgdGVybWluYWwgYWNjZXNzXG4gKlxuICogVGhlIHVzZXJDb2RlIGlzIE5FVkVSIGluIHRoZSBVUkwgLSB0aGlzIGlzIGNyaXRpY2FsIGZvciBzZWN1cml0eS5cbiAqIEFueW9uZSB3aXRoIHRoZSBVUkwgY2FuJ3QgYXV0aG9yaXplIHdpdGhvdXQgYWxzbyBzZWVpbmcgdGhlIHRlcm1pbmFsLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnJvd3NlckxvZ2luKCk6IFByb21pc2U8VG9rZW5SZXNwb25zZT4ge1xuICBjb25zdCBiYXNlVXJsID0gZ2V0Q29uZmlnVmFsdWUoXCJiYXNlVXJsXCIpIHx8IFwiaHR0cHM6Ly9zZW5kbHkubGl2ZVwiO1xuXG4gIC8vIEdlbmVyYXRlIFRXTyBTRVBBUkFURSBjb2RlcyBmb3Igc2VjdXJpdHlcbiAgY29uc3QgZGV2aWNlQ29kZSA9IGdlbmVyYXRlRGV2aWNlQ29kZSgpOyAvLyBMb25nIHJhbmRvbSwgZ29lcyBpbiBVUkxcbiAgY29uc3QgdXNlckNvZGUgPSBnZW5lcmF0ZVVzZXJDb2RlKCk7IC8vIFNob3J0IHJlYWRhYmxlLCBzaG93biBpbiB0ZXJtaW5hbCBvbmx5XG5cbiAgLy8gUmVxdWVzdCBkZXZpY2UgY29kZSByZWdpc3RyYXRpb24gZnJvbSBzZXJ2ZXJcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHtiYXNlVXJsfS9hcGkvY2xpL2F1dGgvZGV2aWNlLWNvZGVgLCB7XG4gICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICBoZWFkZXJzOiB7IFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG4gICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBkZXZpY2VDb2RlLCB1c2VyQ29kZSB9KSwgLy8gU2VuZCBib3RoIHRvIHNlcnZlclxuICB9KTtcblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgY29uc3QgZXJyb3IgPSAoYXdhaXQgcmVzcG9uc2UuanNvbigpLmNhdGNoKCgpID0+ICh7fSkpKSBhcyB7XG4gICAgICBtZXNzYWdlPzogc3RyaW5nO1xuICAgIH07XG4gICAgdGhyb3cgbmV3IEVycm9yKGVycm9yLm1lc3NhZ2UgfHwgXCJGYWlsZWQgdG8gaW5pdGlhdGUgbG9naW5cIik7XG4gIH1cblxuICBjb25zdCBkYXRhID0gKGF3YWl0IHJlc3BvbnNlLmpzb24oKSkgYXMgRGV2aWNlQ29kZVJlc3BvbnNlO1xuXG4gIC8vIEZvcm1hdCB1c2VyIGNvZGUgd2l0aCBoeXBoZW4gZm9yIHJlYWRhYmlsaXR5IChlLmcuLCBcIkFCQ0QtRUZHSFwiKVxuICBjb25zdCBkaXNwbGF5VXNlckNvZGUgPSBgJHt1c2VyQ29kZS5zbGljZSgwLCA0KX0tJHt1c2VyQ29kZS5zbGljZSg0KX1gO1xuXG4gIC8vIERpc3BsYXkgaW5zdHJ1Y3Rpb25zIHRvIHVzZXJcbiAgY29uc29sZS5sb2coKTtcbiAgY29uc29sZS5sb2coY29sb3JzLmJvbGQoXCJMb2dpbiB0byBTZW5kbHlcIikpO1xuICBjb25zb2xlLmxvZygpO1xuICBjb25zb2xlLmxvZyhgT3BlbiB0aGlzIFVSTCBpbiB5b3VyIGJyb3dzZXI6YCk7XG4gIGNvbnNvbGUubG9nKGNvbG9ycy5wcmltYXJ5KGAgICR7ZGF0YS52ZXJpZmljYXRpb25Vcmx9YCkpO1xuICBjb25zb2xlLmxvZygpO1xuICBjb25zb2xlLmxvZyhgQW5kIGVudGVyIHRoaXMgY29kZTpgKTtcbiAgY29uc29sZS5sb2coY29sb3JzLmJvbGQoY29sb3JzLnByaW1hcnkoYCAgJHtkaXNwbGF5VXNlckNvZGV9YCkpKTtcbiAgY29uc29sZS5sb2coKTtcblxuICAvLyBUcnkgdG8gb3BlbiBicm93c2VyIGF1dG9tYXRpY2FsbHlcbiAgdHJ5IHtcbiAgICBhd2FpdCBvcGVuKGRhdGEudmVyaWZpY2F0aW9uVXJsKTtcbiAgICBjb25zb2xlLmxvZyhjb2xvcnMuZGltKFwiQnJvd3NlciBvcGVuZWQgYXV0b21hdGljYWxseVwiKSk7XG4gIH0gY2F0Y2gge1xuICAgIGNvbnNvbGUubG9nKGNvbG9ycy5kaW0oXCJQbGVhc2Ugb3BlbiB0aGUgVVJMIG1hbnVhbGx5XCIpKTtcbiAgfVxuXG4gIC8vIEVuYWJsZSBwcmVzcy10by1jb3B5IFVYIHdoaWxlIHdlIHBvbGwuIE9ubHkgd2lyZSB0aGlzIHdoZW4gd2UgaGF2ZSBhXG4gIC8vIHJlYWwgaW50ZXJhY3RpdmUgVFRZIOKAlCBpbiBDSSBvciBwaXBlZCBzdGRpbiB0aGVyZSdzIG5vdGhpbmcgdG8gcmVhZFxuICAvLyBmcm9tIGFuZCBzZXRSYXdNb2RlIHRocm93cy4gVGhlIGtleXByZXNzIGxpc3RlbmVyIGlzIGRldGFjaGVkIG9uIGFueVxuICAvLyBleGl0IHBhdGggKHN1Y2Nlc3MsIHRpbWVvdXQsIGVycm9yKSBzbyB3ZSBkb24ndCBsZWF2ZSB0aGUgdGVybWluYWwgaW5cbiAgLy8gcmF3IG1vZGUuXG4gIGNvbnN0IGtleXByZXNzQ2xlYW51cCA9IGF0dGFjaExvZ2luS2V5cHJlc3NIYW5kbGVyKGRhdGEudmVyaWZpY2F0aW9uVXJsKTtcblxuICBjb25zb2xlLmxvZygpO1xuXG4gIC8vIFBvbGwgZm9yIHRva2VuXG4gIGNvbnN0IHNwaW4gPSBzcGlubmVyKFwiV2FpdGluZyBmb3IgYXV0aG9yaXphdGlvbi4uLlwiKTtcbiAgc3Bpbi5zdGFydCgpO1xuXG4gIGxldCBhdHRlbXB0cyA9IDA7XG4gIHdoaWxlIChhdHRlbXB0cyA8IE1BWF9QT0xMX0FUVEVNUFRTKSB7XG4gICAgYXdhaXQgc2xlZXAoZGF0YS5pbnRlcnZhbCAqIDEwMDAgfHwgUE9MTF9JTlRFUlZBTCk7XG4gICAgYXR0ZW1wdHMrKztcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB0b2tlblJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7YmFzZVVybH0vYXBpL2NsaS9hdXRoL3Rva2VuYCwge1xuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICBoZWFkZXJzOiB7IFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgZGV2aWNlQ29kZSB9KSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodG9rZW5SZXNwb25zZS5vaykge1xuICAgICAgICBjb25zdCB0b2tlbnMgPSAoYXdhaXQgdG9rZW5SZXNwb25zZS5qc29uKCkpIGFzIFRva2VuUmVzcG9uc2U7XG4gICAgICAgIHNwaW4uc3VjY2VlZChcIkF1dGhvcml6ZWRcIik7XG4gICAgICAgIGtleXByZXNzQ2xlYW51cCgpO1xuXG4gICAgICAgIC8vIFN0b3JlIHRva2Vuc1xuICAgICAgICBzZXRBdXRoVG9rZW5zKFxuICAgICAgICAgIHRva2Vucy5hY2Nlc3NUb2tlbixcbiAgICAgICAgICB0b2tlbnMucmVmcmVzaFRva2VuLFxuICAgICAgICAgIHRva2Vucy5leHBpcmVzSW4sXG4gICAgICAgICAgdG9rZW5zLnVzZXJJZCxcbiAgICAgICAgICB0b2tlbnMuZW1haWwsXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgbmV3IHVzZXIgbmVlZHMgcXVpY2stc3RhcnQgKG9ubHkgZm9yIENMSSBzZXNzaW9ucylcbiAgICAgICAgaWYgKHRva2Vucy5hY2Nlc3NUb2tlbi5zdGFydHNXaXRoKFwiY2xpX1wiKSkge1xuICAgICAgICAgIGNvbnN0IHsgc2hvdWxkT2ZmZXJRdWlja1N0YXJ0LCBvZmZlclF1aWNrU3RhcnQgfSA9XG4gICAgICAgICAgICBhd2FpdCBpbXBvcnQoXCIuL29uYm9hcmRpbmcuanNcIik7XG5cbiAgICAgICAgICBpZiAoYXdhaXQgc2hvdWxkT2ZmZXJRdWlja1N0YXJ0KCkpIHtcbiAgICAgICAgICAgIGF3YWl0IG9mZmVyUXVpY2tTdGFydCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0b2tlbnM7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVycm9yRGF0YSA9IChhd2FpdCB0b2tlblJlc3BvbnNlLmpzb24oKS5jYXRjaCgoKSA9PiAoe30pKSkgYXMge1xuICAgICAgICBlcnJvcj86IHN0cmluZztcbiAgICAgIH07XG5cbiAgICAgIGlmIChlcnJvckRhdGEuZXJyb3IgPT09IFwiYXV0aG9yaXphdGlvbl9wZW5kaW5nXCIpIHtcbiAgICAgICAgLy8gU3RpbGwgd2FpdGluZywgY29udGludWUgcG9sbGluZ1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVycm9yRGF0YS5lcnJvciA9PT0gXCJleHBpcmVkX3Rva2VuXCIpIHtcbiAgICAgICAgc3Bpbi5mYWlsKFwiTG9naW4gcmVxdWVzdCBleHBpcmVkXCIpO1xuICAgICAgICBrZXlwcmVzc0NsZWFudXAoKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXJyb3JEYXRhLmVycm9yID09PSBcImFjY2Vzc19kZW5pZWRcIikge1xuICAgICAgICBzcGluLmZhaWwoXCJMb2dpbiB3YXMgZGVuaWVkXCIpO1xuICAgICAgICBrZXlwcmVzc0NsZWFudXAoKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBOZXR3b3JrIGVycm9yLCBjb250aW51ZSBwb2xsaW5nXG4gICAgfVxuICB9XG5cbiAgc3Bpbi5mYWlsKFwiTG9naW4gdGltZWQgb3V0XCIpO1xuICBrZXlwcmVzc0NsZWFudXAoKTtcbiAgcHJvY2Vzcy5leGl0KDEpO1xufVxuXG4vKipcbiAqIFdpcmUgdXAgdGhlIGNvcHktVVJMIC8gY2FuY2VsIGtleWJpbmRpbmdzIGR1cmluZyB0aGUgZGV2aWNlLWNvZGVcbiAqIHBvbGxpbmcgbG9vcC4gT25seSBhY3RpdmUgb24gYSByZWFsIGludGVyYWN0aXZlIFRUWSDigJQgaW4gQ0ksIHBpcGVkXG4gKiBzdGRpbiwgb3Igd2hlbiBzdGRpbi5zZXRSYXdNb2RlIGlzIG1pc3Npbmcgd2Ugbm8tb3AgYW5kIHJldHVybiBhXG4gKiBjbGVhbnVwIHRoYXQgYWxzbyBuby1vcHMuXG4gKlxuICogUmV0dXJucyBhIGNsZWFudXAgZnVuY3Rpb24gdGhhdCB0aGUgY2FsbGVyIE1VU1QgaW52b2tlIG9uIGV2ZXJ5IGV4aXRcbiAqIHBhdGggKHN1Y2Nlc3MsIHRpbWVvdXQsIGVycm9yKSBzbyB0aGUgdGVybWluYWwgZG9lc24ndCBzdGF5IGluIHJhd1xuICogbW9kZS4gQ2FsbGluZyBjbGVhbnVwIHR3aWNlIGlzIHNhZmUuXG4gKi9cbmZ1bmN0aW9uIGF0dGFjaExvZ2luS2V5cHJlc3NIYW5kbGVyKHVybFRvQ29weTogc3RyaW5nKTogKCkgPT4gdm9pZCB7XG4gIGNvbnN0IHN0ZGluID0gcHJvY2Vzcy5zdGRpbjtcbiAgaWYgKCFzdGRpbi5pc1RUWSB8fCB0eXBlb2Ygc3RkaW4uc2V0UmF3TW9kZSAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcmV0dXJuICgpID0+IHt9O1xuICB9XG5cbiAgbGV0IGNsZWFuZWQgPSBmYWxzZTtcbiAgY29uc3QgcHJldmlvdXNSYXdNb2RlID0gc3RkaW4uaXNSYXc7XG5cbiAgY29uc29sZS5sb2coXG4gICAgY29sb3JzLmRpbShcbiAgICAgIFwiUHJlc3MgW2NdIHRvIGNvcHkgVVJMIHRvIGNsaXBib2FyZCDCtyBbcV0gb3IgQ3RybC1DIHRvIGNhbmNlbFwiLFxuICAgICksXG4gICk7XG5cbiAgY29uc3Qgb25EYXRhID0gKGtleTogQnVmZmVyIHwgc3RyaW5nKTogdm9pZCA9PiB7XG4gICAgY29uc3QgayA9IHR5cGVvZiBrZXkgPT09IFwic3RyaW5nXCIgPyBrZXkgOiBrZXkudG9TdHJpbmcoXCJ1dGY4XCIpO1xuICAgIGlmIChrID09PSBcImNcIiB8fCBrID09PSBcIkNcIikge1xuICAgICAgY29weVRvQ2xpcGJvYXJkKHVybFRvQ29weSlcbiAgICAgICAgLnRoZW4oKG9rKSA9PiB7XG4gICAgICAgICAgaWYgKG9rKSB7XG4gICAgICAgICAgICAvLyBPdmVyd3JpdGUgdGhlIGhpbnQgbGluZSB3aXRoIGEgdHJhbnNpZW50IGNvbmZpcm1hdGlvbi5cbiAgICAgICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKFxuICAgICAgICAgICAgICBcIlxcclwiICsgXCIgXCIucmVwZWF0KDcwKSArIFwiXFxyXCIgKyBjb2xvcnMuc3VjY2VzcyhcIiAg4pyTIFVSTCBjb3BpZWQgdG8gY2xpcGJvYXJkXFxuXCIpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoXG4gICAgICAgICAgICAgIFwiXFxyXCIgKyBjb2xvcnMud2FybmluZyhcIiAg4pyXIENvdWxkIG5vdCBjb3B5IOKAlCBjb3B5IHRoZSBVUkwgbWFudWFsbHlcXG5cIiksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKCgpID0+IHt9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGsgPT09IFwicVwiIHx8IGsgPT09IFwiUVwiIHx8IGsgPT09IFwiXFx1MDAwM1wiKSB7XG4gICAgICBjbGVhbnVwKCk7XG4gICAgICBjb25zb2xlLmxvZyhjb2xvcnMud2FybmluZyhcIlxcbiAgTG9naW4gY2FuY2VsbGVkLlwiKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMTMwKTtcbiAgICB9XG4gIH07XG5cbiAgc3RkaW4uc2V0UmF3TW9kZSh0cnVlKTtcbiAgc3RkaW4ucmVzdW1lKCk7XG4gIHN0ZGluLnNldEVuY29kaW5nKFwidXRmOFwiKTtcbiAgc3RkaW4ub24oXCJkYXRhXCIsIG9uRGF0YSk7XG5cbiAgY29uc3QgY2xlYW51cCA9ICgpOiB2b2lkID0+IHtcbiAgICBpZiAoY2xlYW5lZCkgcmV0dXJuO1xuICAgIGNsZWFuZWQgPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICBzdGRpbi5yZW1vdmVMaXN0ZW5lcihcImRhdGFcIiwgb25EYXRhKTtcbiAgICAgIHN0ZGluLnNldFJhd01vZGUocHJldmlvdXNSYXdNb2RlKTtcbiAgICAgIHN0ZGluLnBhdXNlKCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvKiBuby1vcCAqL1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gY2xlYW51cDtcbn1cblxuLyoqXG4gKiBDb3B5IHRleHQgdG8gdGhlIHN5c3RlbSBjbGlwYm9hcmQgdmlhIHRoZSBPUydzIG5hdGl2ZSB0b29sLiBSZXR1cm5zXG4gKiB0cnVlIGlmIHRoZSB3cml0ZSBzdWNjZWVkZWQuIERvZXMgbm90IHRocm93LiBTaGVsbHMgb3V0IHJhdGhlciB0aGFuXG4gKiBhZGRpbmcgYSBuYXRpdmUgY2xpcGJvYXJkIGRlcCDigJQgdGhlIHRocmVlIGNvbW1hbmRzIChwYmNvcHkgLyBjbGlwIC9cbiAqIHhjbGlwIC8gd2wtY29weSkgY292ZXIgZXZlcnkgcGxhdGZvcm0gdGhlIENMSSBydW5zIG9uLlxuICovXG5hc3luYyBmdW5jdGlvbiBjb3B5VG9DbGlwYm9hcmQodGV4dDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHsgc3Bhd24gfSA9IGF3YWl0IGltcG9ydChcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiKTtcbiAgY29uc3QgY2FuZGlkYXRlczogQXJyYXk8W3N0cmluZywgc3RyaW5nW11dPiA9XG4gICAgcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gXCJkYXJ3aW5cIlxuICAgICAgPyBbW1wicGJjb3B5XCIsIFtdXV1cbiAgICAgIDogcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gXCJ3aW4zMlwiXG4gICAgICAgID8gW1tcImNsaXBcIiwgW11dXVxuICAgICAgICA6IFtcbiAgICAgICAgICAgIFtcIndsLWNvcHlcIiwgW11dLFxuICAgICAgICAgICAgW1wieGNsaXBcIiwgW1wiLXNlbGVjdGlvblwiLCBcImNsaXBib2FyZFwiXV0sXG4gICAgICAgICAgICBbXCJ4c2VsXCIsIFtcIi0tY2xpcGJvYXJkXCIsIFwiLS1pbnB1dFwiXV0sXG4gICAgICAgICAgXTtcblxuICBmb3IgKGNvbnN0IFtjbWQsIGFyZ3NdIG9mIGNhbmRpZGF0ZXMpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgb2sgPSBhd2FpdCBuZXcgUHJvbWlzZTxib29sZWFuPigocmVzb2x2ZSkgPT4ge1xuICAgICAgICBjb25zdCBjaGlsZCA9IHNwYXduKGNtZCwgYXJncywgeyBzdGRpbzogW1wicGlwZVwiLCBcImlnbm9yZVwiLCBcImlnbm9yZVwiXSB9KTtcbiAgICAgICAgY2hpbGQub24oXCJlcnJvclwiLCAoKSA9PiByZXNvbHZlKGZhbHNlKSk7XG4gICAgICAgIGNoaWxkLm9uKFwiZXhpdFwiLCAoY29kZSkgPT4gcmVzb2x2ZShjb2RlID09PSAwKSk7XG4gICAgICAgIGNoaWxkLnN0ZGluLmVuZCh0ZXh0KTtcbiAgICAgIH0pO1xuICAgICAgaWYgKG9rKSByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIHRyeSBuZXh0IGNhbmRpZGF0ZVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogTG9naW4gd2l0aCBhbiBBUEkga2V5IGRpcmVjdGx5XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhcGlLZXlMb2dpbihhcGlLZXk6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBiYXNlVXJsID0gZ2V0Q29uZmlnVmFsdWUoXCJiYXNlVXJsXCIpIHx8IFwiaHR0cHM6Ly9zZW5kbHkubGl2ZVwiO1xuXG4gIC8vIFZhbGlkYXRlIHRoZSBBUEkga2V5IHdpdGggdGhlIHNlcnZlclxuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke2Jhc2VVcmx9L2FwaS9jbGkvYXV0aC92ZXJpZnkta2V5YCwge1xuICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgaGVhZGVyczoge1xuICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7YXBpS2V5fWAsXG4gICAgfSxcbiAgfSk7XG5cbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIGNvbnN0IGVycm9yID0gKGF3YWl0IHJlc3BvbnNlLmpzb24oKS5jYXRjaCgoKSA9PiAoe30pKSkgYXMge1xuICAgICAgbWVzc2FnZT86IHN0cmluZztcbiAgICB9O1xuICAgIHRocm93IG5ldyBFcnJvcihlcnJvci5tZXNzYWdlIHx8IFwiSW52YWxpZCBBUEkga2V5XCIpO1xuICB9XG5cbiAgLy8gU3RvcmUgdGhlIEFQSSBrZXlcbiAgc2V0QXBpS2V5KGFwaUtleSk7XG59XG5cbi8qKlxuICogTG9nb3V0IC0gY2xlYXIgYWxsIHN0b3JlZCBjcmVkZW50aWFsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9nb3V0KCk6IHZvaWQge1xuICBjbGVhckF1dGgoKTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBjdXJyZW50bHkgYXV0aGVudGljYXRlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tBdXRoKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gaXNBdXRoZW50aWNhdGVkKCk7XG59XG5cbi8qKlxuICogR2V0IGN1cnJlbnQgYXV0aCBpbmZvIGZvciBkaXNwbGF5XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRBdXRoSW5mbygpOiBQcm9taXNlPHtcbiAgYXV0aGVudGljYXRlZDogYm9vbGVhbjtcbiAgZW1haWw/OiBzdHJpbmc7XG4gIHVzZXJJZD86IHN0cmluZztcbiAgZW52aXJvbm1lbnQ6IHN0cmluZztcbiAga2V5VHlwZT86IHN0cmluZztcbn0+IHtcbiAgY29uc3QgdG9rZW4gPSBnZXRBdXRoVG9rZW4oKTtcbiAgY29uc3QgZW1haWwgPSBnZXRDb25maWdWYWx1ZShcImVtYWlsXCIpO1xuICBjb25zdCB1c2VySWQgPSBnZXRDb25maWdWYWx1ZShcInVzZXJJZFwiKTtcbiAgY29uc3QgYXBpS2V5ID0gZ2V0Q29uZmlnVmFsdWUoXCJhcGlLZXlcIik7XG4gIGNvbnN0IGVudmlyb25tZW50ID0gZ2V0Q29uZmlnVmFsdWUoXCJlbnZpcm9ubWVudFwiKTtcblxuICBpZiAoIXRva2VuICYmICFhcGlLZXkpIHtcbiAgICByZXR1cm4geyBhdXRoZW50aWNhdGVkOiBmYWxzZSwgZW52aXJvbm1lbnQgfTtcbiAgfVxuXG4gIGxldCBrZXlUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGlmIChhcGlLZXkpIHtcbiAgICBrZXlUeXBlID0gYXBpS2V5LnN0YXJ0c1dpdGgoXCJza190ZXN0X1wiKSA/IFwidGVzdFwiIDogXCJsaXZlXCI7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGF1dGhlbnRpY2F0ZWQ6IHRydWUsXG4gICAgZW1haWwsXG4gICAgdXNlcklkLFxuICAgIGVudmlyb25tZW50LFxuICAgIGtleVR5cGUsXG4gIH07XG59XG5cbmZ1bmN0aW9uIHNsZWVwKG1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG59XG4iXX0=
|
|
198
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvYXV0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFFeEIsT0FBTyxLQUFLLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFDdEMsT0FBTyxFQUNMLGFBQWEsRUFDYixTQUFTLEVBQ1QsU0FBUyxFQUNULGNBQWMsRUFDZCxlQUFlLEVBQ2YsWUFBWSxHQUNiLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzlDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzRCxNQUFNLGdCQUFnQixHQUFHLENBQUMsQ0FBQztBQUMzQixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsQ0FBQyxZQUFZO0FBQ3hDLE1BQU0saUJBQWlCLEdBQUcsR0FBRyxDQUFDLENBQUMsZ0JBQWdCO0FBa0IvQzs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsa0JBQWtCO0lBQ2hDLE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQywwQkFBMEI7QUFDM0UsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCO0lBQzlCLE1BQU0sS0FBSyxHQUFHLGtDQUFrQyxDQUFDLENBQUMsMEJBQTBCO0lBQzVFLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNkLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNuRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUMxQyxJQUFJLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxD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QUVsRCxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdEIsT0FBTyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDL0MsQ0FBQztJQUVELElBQUksT0FBMkIsQ0FBQztJQUNoQyxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ1gsT0FBTyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzVELENBQUM7SUFFRCxPQUFPO1FBQ0wsYUFBYSxFQUFFLElBQUk7UUFDbkIsS0FBSztRQUNMLE1BQU07UUFDTixXQUFXO1FBQ1gsT0FBTztLQUNSLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxLQUFLLENBQUMsRUFBVTtJQUN2QixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQXV0aGVudGljYXRpb24gdXRpbGl0aWVzIGZvciBDTElcbiAqIEhhbmRsZXMgYnJvd3Nlci1iYXNlZCBsb2dpbiBmbG93IGFuZCBBUEkga2V5IGF1dGhlbnRpY2F0aW9uXG4gKi9cblxuaW1wb3J0IG9wZW4gZnJvbSBcIm9wZW5cIjtcbmltcG9ydCAqIGFzIGh0dHAgZnJvbSBcIm5vZGU6aHR0cFwiO1xuaW1wb3J0ICogYXMgY3J5cHRvIGZyb20gXCJub2RlOmNyeXB0b1wiO1xuaW1wb3J0IHtcbiAgc2V0QXV0aFRva2VucyxcbiAgc2V0QXBpS2V5LFxuICBjbGVhckF1dGgsXG4gIGdldENvbmZpZ1ZhbHVlLFxuICBpc0F1dGhlbnRpY2F0ZWQsXG4gIGdldEF1dGhUb2tlbixcbn0gZnJvbSBcIi4vY29uZmlnLmpzXCI7XG5pbXBvcnQgeyBjb2xvcnMsIHNwaW5uZXIgfSBmcm9tIFwiLi9vdXRwdXQuanNcIjtcbmltcG9ydCB7IGF0dGFjaExvZ2luS2V5cHJlc3NIYW5kbGVyIH0gZnJvbSBcIi4va2V5cHJlc3MuanNcIjtcblxuY29uc3QgVVNFUl9DT0RFX0xFTkdUSCA9IDg7XG5jb25zdCBQT0xMX0lOVEVSVkFMID0gMjAwMDsgLy8gMiBzZWNvbmRzXG5jb25zdCBNQVhfUE9MTF9BVFRFTVBUUyA9IDE1MDsgLy8gNSBtaW51dGVzIG1heFxuXG5leHBvcnQgaW50ZXJmYWNlIERldmljZUNvZGVSZXNwb25zZSB7XG4gIGRldmljZUNvZGU6IHN0cmluZztcbiAgdXNlckNvZGU6IHN0cmluZztcbiAgdmVyaWZpY2F0aW9uVXJsOiBzdHJpbmc7XG4gIGV4cGlyZXNJbjogbnVtYmVyO1xuICBpbnRlcnZhbDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRva2VuUmVzcG9uc2Uge1xuICBhY2Nlc3NUb2tlbjogc3RyaW5nO1xuICByZWZyZXNoVG9rZW46IHN0cmluZztcbiAgZXhwaXJlc0luOiBudW1iZXI7XG4gIHVzZXJJZDogc3RyaW5nO1xuICBlbWFpbDogc3RyaW5nO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIGEgbG9uZyByYW5kb20gZGV2aWNlIGNvZGUgZm9yIFVSTCAoc2Vzc2lvbiBpZGVudGlmaWVyKVxuICogVGhpcyBnb2VzIGluIHRoZSBVUkwgYW5kIGlkZW50aWZpZXMgd2hpY2ggQ0xJIHNlc3Npb24gaXMgd2FpdGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVEZXZpY2VDb2RlKCk6IHN0cmluZyB7XG4gIHJldHVybiBjcnlwdG8ucmFuZG9tQnl0ZXMoMTYpLnRvU3RyaW5nKFwiaGV4XCIpOyAvLyAzMiBjaGFycywgbm90IGd1ZXNzYWJsZVxufVxuXG4vKipcbiAqIEdlbmVyYXRlIGEgc2hvcnQgaHVtYW4tcmVhZGFibGUgdXNlciBjb2RlIGZvciB0ZXJtaW5hbCBkaXNwbGF5XG4gKiBUaGlzIGlzIHdoYXQgdGhlIHVzZXIgdHlwZXMgdG8gcHJvdmUgdGhleSBoYXZlIHRlcm1pbmFsIGFjY2Vzc1xuICogVXNlcyBjaGFyYWN0ZXJzIHRoYXQgYXJlIGVhc3kgdG8gcmVhZCBhbmQgdHlwZSAobm8gMC9PLCAxL0kvTCBjb25mdXNpb24pXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVVzZXJDb2RlKCk6IHN0cmluZyB7XG4gIGNvbnN0IGNoYXJzID0gXCJBQkNERUZHSEpLTE1OUFFSU1RVVldYWVoyMzQ1Njc4OVwiOyAvLyBFeGNsdWRlIGNvbmZ1c2luZyBjaGFyc1xuICBsZXQgY29kZSA9IFwiXCI7XG4gIGNvbnN0IGJ5dGVzID0gY3J5cHRvLnJhbmRvbUJ5dGVzKFVTRVJfQ09ERV9MRU5HVEgpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IFVTRVJfQ09ERV9MRU5HVEg7IGkrKykge1xuICAgIGNvZGUgKz0gY2hhcnNbYnl0ZXNbaV0gJSBjaGFycy5sZW5ndGhdO1xuICB9XG4gIHJldHVybiBjb2RlO1xufVxuXG4vKipcbiAqIFN0YXJ0IHRoZSBicm93c2VyLWJhc2VkIGxvZ2luIGZsb3dcbiAqXG4gKiBTZWN1cml0eSBtb2RlbDpcbiAqIC0gZGV2aWNlQ29kZTogTG9uZyByYW5kb20gdG9rZW4gaW4gVVJMLCBpZGVudGlmaWVzIENMSSBzZXNzaW9uIChub3Qgc2VjcmV0KVxuICogLSB1c2VyQ29kZTogU2hvcnQgY29kZSBzaG93biBPTkxZIGluIHRlcm1pbmFsLCBwcm92ZXMgdXNlciBoYXMgdGVybWluYWwgYWNjZXNzXG4gKlxuICogVGhlIHVzZXJDb2RlIGlzIE5FVkVSIGluIHRoZSBVUkwgLSB0aGlzIGlzIGNyaXRpY2FsIGZvciBzZWN1cml0eS5cbiAqIEFueW9uZSB3aXRoIHRoZSBVUkwgY2FuJ3QgYXV0aG9yaXplIHdpdGhvdXQgYWxzbyBzZWVpbmcgdGhlIHRlcm1pbmFsLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnJvd3NlckxvZ2luKCk6IFByb21pc2U8VG9rZW5SZXNwb25zZT4ge1xuICBjb25zdCBiYXNlVXJsID0gZ2V0Q29uZmlnVmFsdWUoXCJiYXNlVXJsXCIpIHx8IFwiaHR0cHM6Ly9zZW5kbHkubGl2ZVwiO1xuXG4gIC8vIEdlbmVyYXRlIFRXTyBTRVBBUkFURSBjb2RlcyBmb3Igc2VjdXJpdHlcbiAgY29uc3QgZGV2aWNlQ29kZSA9IGdlbmVyYXRlRGV2aWNlQ29kZSgpOyAvLyBMb25nIHJhbmRvbSwgZ29lcyBpbiBVUkxcbiAgY29uc3QgdXNlckNvZGUgPSBnZW5lcmF0ZVVzZXJDb2RlKCk7IC8vIFNob3J0IHJlYWRhYmxlLCBzaG93biBpbiB0ZXJtaW5hbCBvbmx5XG5cbiAgLy8gUmVxdWVzdCBkZXZpY2UgY29kZSByZWdpc3RyYXRpb24gZnJvbSBzZXJ2ZXJcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHtiYXNlVXJsfS9hcGkvY2xpL2F1dGgvZGV2aWNlLWNvZGVgLCB7XG4gICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICBoZWFkZXJzOiB7IFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG4gICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBkZXZpY2VDb2RlLCB1c2VyQ29kZSB9KSwgLy8gU2VuZCBib3RoIHRvIHNlcnZlclxuICB9KTtcblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgY29uc3QgZXJyb3IgPSAoYXdhaXQgcmVzcG9uc2UuanNvbigpLmNhdGNoKCgpID0+ICh7fSkpKSBhcyB7XG4gICAgICBtZXNzYWdlPzogc3RyaW5nO1xuICAgIH07XG4gICAgdGhyb3cgbmV3IEVycm9yKGVycm9yLm1lc3NhZ2UgfHwgXCJGYWlsZWQgdG8gaW5pdGlhdGUgbG9naW5cIik7XG4gIH1cblxuICBjb25zdCBkYXRhID0gKGF3YWl0IHJlc3BvbnNlLmpzb24oKSkgYXMgRGV2aWNlQ29kZVJlc3BvbnNlO1xuXG4gIC8vIEZvcm1hdCB1c2VyIGNvZGUgd2l0aCBoeXBoZW4gZm9yIHJlYWRhYmlsaXR5IChlLmcuLCBcIkFCQ0QtRUZHSFwiKVxuICBjb25zdCBkaXNwbGF5VXNlckNvZGUgPSBgJHt1c2VyQ29kZS5zbGljZSgwLCA0KX0tJHt1c2VyQ29kZS5zbGljZSg0KX1gO1xuXG4gIC8vIERpc3BsYXkgaW5zdHJ1Y3Rpb25zIHRvIHVzZXJcbiAgY29uc29sZS5sb2coKTtcbiAgY29uc29sZS5sb2coY29sb3JzLmJvbGQoXCJMb2dpbiB0byBTZW5kbHlcIikpO1xuICBjb25zb2xlLmxvZygpO1xuICBjb25zb2xlLmxvZyhgT3BlbiB0aGlzIFVSTCBpbiB5b3VyIGJyb3dzZXI6YCk7XG4gIGNvbnNvbGUubG9nKGNvbG9ycy5wcmltYXJ5KGAgICR7ZGF0YS52ZXJpZmljYXRpb25Vcmx9YCkpO1xuICBjb25zb2xlLmxvZygpO1xuICBjb25zb2xlLmxvZyhgQW5kIGVudGVyIHRoaXMgY29kZTpgKTtcbiAgY29uc29sZS5sb2coY29sb3JzLmJvbGQoY29sb3JzLnByaW1hcnkoYCAgJHtkaXNwbGF5VXNlckNvZGV9YCkpKTtcbiAgY29uc29sZS5sb2coKTtcblxuICAvLyBUcnkgdG8gb3BlbiBicm93c2VyIGF1dG9tYXRpY2FsbHlcbiAgdHJ5IHtcbiAgICBhd2FpdCBvcGVuKGRhdGEudmVyaWZpY2F0aW9uVXJsKTtcbiAgICBjb25zb2xlLmxvZyhjb2xvcnMuZGltKFwiQnJvd3NlciBvcGVuZWQgYXV0b21hdGljYWxseVwiKSk7XG4gIH0gY2F0Y2gge1xuICAgIGNvbnNvbGUubG9nKGNvbG9ycy5kaW0oXCJQbGVhc2Ugb3BlbiB0aGUgVVJMIG1hbnVhbGx5XCIpKTtcbiAgfVxuXG4gIC8vIEVuYWJsZSBwcmVzcy10by1jb3B5IFVYIHdoaWxlIHdlIHBvbGwuIE9ubHkgd2lyZSB0aGlzIHdoZW4gd2UgaGF2ZSBhXG4gIC8vIHJlYWwgaW50ZXJhY3RpdmUgVFRZIOKAlCBpbiBDSSBvciBwaXBlZCBzdGRpbiB0aGVyZSdzIG5vdGhpbmcgdG8gcmVhZFxuICAvLyBmcm9tIGFuZCBzZXRSYXdNb2RlIHRocm93cy4gVGhlIGtleXByZXNzIGxpc3RlbmVyIGlzIGRldGFjaGVkIG9uIGFueVxuICAvLyBleGl0IHBhdGggKHN1Y2Nlc3MsIHRpbWVvdXQsIGVycm9yKSBzbyB3ZSBkb24ndCBsZWF2ZSB0aGUgdGVybWluYWwgaW5cbiAgLy8gcmF3IG1vZGUuXG4gIGNvbnN0IGtleXByZXNzQ2xlYW51cCA9IGF0dGFjaExvZ2luS2V5cHJlc3NIYW5kbGVyKGRhdGEudmVyaWZpY2F0aW9uVXJsKTtcblxuICBjb25zb2xlLmxvZygpO1xuXG4gIC8vIFBvbGwgZm9yIHRva2VuXG4gIGNvbnN0IHNwaW4gPSBzcGlubmVyKFwiV2FpdGluZyBmb3IgYXV0aG9yaXphdGlvbi4uLlwiKTtcbiAgc3Bpbi5zdGFydCgpO1xuXG4gIGxldCBhdHRlbXB0cyA9IDA7XG4gIHdoaWxlIChhdHRlbXB0cyA8IE1BWF9QT0xMX0FUVEVNUFRTKSB7XG4gICAgYXdhaXQgc2xlZXAoZGF0YS5pbnRlcnZhbCAqIDEwMDAgfHwgUE9MTF9JTlRFUlZBTCk7XG4gICAgYXR0ZW1wdHMrKztcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB0b2tlblJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7YmFzZVVybH0vYXBpL2NsaS9hdXRoL3Rva2VuYCwge1xuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICBoZWFkZXJzOiB7IFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgZGV2aWNlQ29kZSB9KSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodG9rZW5SZXNwb25zZS5vaykge1xuICAgICAgICBjb25zdCB0b2tlbnMgPSAoYXdhaXQgdG9rZW5SZXNwb25zZS5qc29uKCkpIGFzIFRva2VuUmVzcG9uc2U7XG4gICAgICAgIHNwaW4uc3VjY2VlZChcIkF1dGhvcml6ZWRcIik7XG4gICAgICAgIGtleXByZXNzQ2xlYW51cCgpO1xuXG4gICAgICAgIC8vIFN0b3JlIHRva2Vuc1xuICAgICAgICBzZXRBdXRoVG9rZW5zKFxuICAgICAgICAgIHRva2Vucy5hY2Nlc3NUb2tlbixcbiAgICAgICAgICB0b2tlbnMucmVmcmVzaFRva2VuLFxuICAgICAgICAgIHRva2Vucy5leHBpcmVzSW4sXG4gICAgICAgICAgdG9rZW5zLnVzZXJJZCxcbiAgICAgICAgICB0b2tlbnMuZW1haWwsXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgbmV3IHVzZXIgbmVlZHMgcXVpY2stc3RhcnQgKG9ubHkgZm9yIENMSSBzZXNzaW9ucylcbiAgICAgICAgaWYgKHRva2Vucy5hY2Nlc3NUb2tlbi5zdGFydHNXaXRoKFwiY2xpX1wiKSkge1xuICAgICAgICAgIGNvbnN0IHsgc2hvdWxkT2ZmZXJRdWlja1N0YXJ0LCBvZmZlclF1aWNrU3RhcnQgfSA9XG4gICAgICAgICAgICBhd2FpdCBpbXBvcnQoXCIuL29uYm9hcmRpbmcuanNcIik7XG5cbiAgICAgICAgICBpZiAoYXdhaXQgc2hvdWxkT2ZmZXJRdWlja1N0YXJ0KCkpIHtcbiAgICAgICAgICAgIGF3YWl0IG9mZmVyUXVpY2tTdGFydCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0b2tlbnM7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVycm9yRGF0YSA9IChhd2FpdCB0b2tlblJlc3BvbnNlLmpzb24oKS5jYXRjaCgoKSA9PiAoe30pKSkgYXMge1xuICAgICAgICBlcnJvcj86IHN0cmluZztcbiAgICAgIH07XG5cbiAgICAgIGlmIChlcnJvckRhdGEuZXJyb3IgPT09IFwiYXV0aG9yaXphdGlvbl9wZW5kaW5nXCIpIHtcbiAgICAgICAgLy8gU3RpbGwgd2FpdGluZywgY29udGludWUgcG9sbGluZ1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVycm9yRGF0YS5lcnJvciA9PT0gXCJleHBpcmVkX3Rva2VuXCIpIHtcbiAgICAgICAgc3Bpbi5mYWlsKFwiTG9naW4gcmVxdWVzdCBleHBpcmVkXCIpO1xuICAgICAgICBrZXlwcmVzc0NsZWFudXAoKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXJyb3JEYXRhLmVycm9yID09PSBcImFjY2Vzc19kZW5pZWRcIikge1xuICAgICAgICBzcGluLmZhaWwoXCJMb2dpbiB3YXMgZGVuaWVkXCIpO1xuICAgICAgICBrZXlwcmVzc0NsZWFudXAoKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBOZXR3b3JrIGVycm9yLCBjb250aW51ZSBwb2xsaW5nXG4gICAgfVxuICB9XG5cbiAgc3Bpbi5mYWlsKFwiTG9naW4gdGltZWQgb3V0XCIpO1xuICBrZXlwcmVzc0NsZWFudXAoKTtcbiAgcHJvY2Vzcy5leGl0KDEpO1xufVxuXG4vKipcbiAqIExvZ2luIHdpdGggYW4gQVBJIGtleSBkaXJlY3RseVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXBpS2V5TG9naW4oYXBpS2V5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgYmFzZVVybCA9IGdldENvbmZpZ1ZhbHVlKFwiYmFzZVVybFwiKSB8fCBcImh0dHBzOi8vc2VuZGx5LmxpdmVcIjtcblxuICAvLyBWYWxpZGF0ZSB0aGUgQVBJIGtleSB3aXRoIHRoZSBzZXJ2ZXJcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHtiYXNlVXJsfS9hcGkvY2xpL2F1dGgvdmVyaWZ5LWtleWAsIHtcbiAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke2FwaUtleX1gLFxuICAgIH0sXG4gIH0pO1xuXG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICBjb25zdCBlcnJvciA9IChhd2FpdCByZXNwb25zZS5qc29uKCkuY2F0Y2goKCkgPT4gKHt9KSkpIGFzIHtcbiAgICAgIG1lc3NhZ2U/OiBzdHJpbmc7XG4gICAgfTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3IubWVzc2FnZSB8fCBcIkludmFsaWQgQVBJIGtleVwiKTtcbiAgfVxuXG4gIC8vIFN0b3JlIHRoZSBBUEkga2V5XG4gIHNldEFwaUtleShhcGlLZXkpO1xufVxuXG4vKipcbiAqIExvZ291dCAtIGNsZWFyIGFsbCBzdG9yZWQgY3JlZGVudGlhbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvZ291dCgpOiB2b2lkIHtcbiAgY2xlYXJBdXRoKCk7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgY3VycmVudGx5IGF1dGhlbnRpY2F0ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrQXV0aCgpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzQXV0aGVudGljYXRlZCgpO1xufVxuXG4vKipcbiAqIEdldCBjdXJyZW50IGF1dGggaW5mbyBmb3IgZGlzcGxheVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QXV0aEluZm8oKTogUHJvbWlzZTx7XG4gIGF1dGhlbnRpY2F0ZWQ6IGJvb2xlYW47XG4gIGVtYWlsPzogc3RyaW5nO1xuICB1c2VySWQ/OiBzdHJpbmc7XG4gIGVudmlyb25tZW50OiBzdHJpbmc7XG4gIGtleVR5cGU/OiBzdHJpbmc7XG59PiB7XG4gIGNvbnN0IHRva2VuID0gZ2V0QXV0aFRva2VuKCk7XG4gIGNvbnN0IGVtYWlsID0gZ2V0Q29uZmlnVmFsdWUoXCJlbWFpbFwiKTtcbiAgY29uc3QgdXNlcklkID0gZ2V0Q29uZmlnVmFsdWUoXCJ1c2VySWRcIik7XG4gIGNvbnN0IGFwaUtleSA9IGdldENvbmZpZ1ZhbHVlKFwiYXBpS2V5XCIpO1xuICBjb25zdCBlbnZpcm9ubWVudCA9IGdldENvbmZpZ1ZhbHVlKFwiZW52aXJvbm1lbnRcIik7XG5cbiAgaWYgKCF0b2tlbiAmJiAhYXBpS2V5KSB7XG4gICAgcmV0dXJuIHsgYXV0aGVudGljYXRlZDogZmFsc2UsIGVudmlyb25tZW50IH07XG4gIH1cblxuICBsZXQga2V5VHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBpZiAoYXBpS2V5KSB7XG4gICAga2V5VHlwZSA9IGFwaUtleS5zdGFydHNXaXRoKFwic2tfdGVzdF9cIikgPyBcInRlc3RcIiA6IFwibGl2ZVwiO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhdXRoZW50aWNhdGVkOiB0cnVlLFxuICAgIGVtYWlsLFxuICAgIHVzZXJJZCxcbiAgICBlbnZpcm9ubWVudCxcbiAgICBrZXlUeXBlLFxuICB9O1xufVxuXG5mdW5jdGlvbiBzbGVlcChtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xufVxuIl19
|
package/dist/lib/config.js
CHANGED
|
@@ -140,7 +140,36 @@ function initializeConfig() {
|
|
|
140
140
|
catch {
|
|
141
141
|
// Old key also didn't work - corrupted or fresh install
|
|
142
142
|
}
|
|
143
|
-
// Fresh install or corrupted
|
|
143
|
+
// Fresh install or corrupted. If a config file exists at this point,
|
|
144
|
+
// both the new key and the old key failed to decrypt it — that means
|
|
145
|
+
// the file was written by a different machine, encrypted with a
|
|
146
|
+
// SENDLY_CONFIG_KEY that no longer matches, or got corrupted.
|
|
147
|
+
// Constructing a new Conf{} here would just re-read the same file and
|
|
148
|
+
// throw the same SyntaxError. Move it aside so the user keeps a copy
|
|
149
|
+
// (in case they recover the key later) and start clean.
|
|
150
|
+
const filePath = path.join(CONFIG_DIR, CONFIG_FILE);
|
|
151
|
+
if (fs.existsSync(filePath)) {
|
|
152
|
+
try {
|
|
153
|
+
const backupPath = `${filePath}.corrupt.${Date.now()}`;
|
|
154
|
+
fs.renameSync(filePath, backupPath);
|
|
155
|
+
// Stay quiet by default — most callers run early in the process
|
|
156
|
+
// before output helpers are wired. A debug breadcrumb is enough.
|
|
157
|
+
if (process.env.DEBUG) {
|
|
158
|
+
process.stderr.write(`[sendly] Could not decrypt ${filePath}; moved to ${backupPath} and starting fresh. Run 'sendly login' to re-authenticate.\n`);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
// If we can't move the file (permissions, FS issue), our best
|
|
163
|
+
// remaining option is to delete it — losing it is strictly better
|
|
164
|
+
// than crashing every command.
|
|
165
|
+
try {
|
|
166
|
+
fs.unlinkSync(filePath);
|
|
167
|
+
}
|
|
168
|
+
catch {
|
|
169
|
+
// Give up silently and let Conf throw if it must.
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
144
173
|
return new Conf({
|
|
145
174
|
projectName: "sendly",
|
|
146
175
|
cwd: CONFIG_DIR,
|
|
@@ -299,4 +328,4 @@ export function clearCurrentOrg() {
|
|
|
299
328
|
config.delete("currentOrgSlug");
|
|
300
329
|
}
|
|
301
330
|
export { config };
|
|
302
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFFSCxPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxLQUFLLElBQUksTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxLQUFLLE1BQU0sTUFBTSxhQUFhLENBQUM7QUE2QnRDOztHQUVHO0FBQ0gsTUFBTSxVQUFVLElBQUk7SUFDbEIsT0FBTyxDQUFDLENBQUMsQ0FDUCxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDZCxPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQjtRQUNsQyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWM7UUFDMUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTO1FBQ3JCLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUTtRQUNwQixPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU07UUFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQ3RCLENBQUM7QUFDSixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsZUFBZTtJQUM3QixPQUFPLENBQUMsQ0FBQyxDQUNQLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZTtRQUMzQixPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVE7UUFDcEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUM1QixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3RELE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQztBQUVsQyw0Q0FBNEM7QUFD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Q0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNuQyxJQUFJLElBQUk7UUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDO0FBQy9DLENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYTtJQUszQixNQUFNLEVBQUUsR0FBRyxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM3QyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDMUMsSUFBSSxDQUFDLEVBQUU7UUFBRSxPQUFPLElBQUksQ0FBQztJQUNyQixPQUFPLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztBQUN0RSxDQUFDO0FBRUQsTUFBTSxVQUFVLGVBQWU7SUFDN0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM5QixNQUFNLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDaEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ2xDLENBQUM7QUFFRCxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENMSSBDb25maWd1cmF0aW9uIE1hbmFnZW1lbnRcbiAqIFN0b3JlcyB1c2VyIHByZWZlcmVuY2VzIGFuZCBjcmVkZW50aWFscyBpbiB+Ly5zZW5kbHkvXG4gKlxuICogRW52aXJvbm1lbnQgVmFyaWFibGVzICh0YWtlIHByZWNlZGVuY2Ugb3ZlciBjb25maWcgZmlsZSk6XG4gKiAtIFNFTkRMWV9BUElfS0VZOiBBUEkga2V5IGZvciBhdXRoZW50aWNhdGlvblxuICogLSBTRU5ETFlfQkFTRV9VUkw6IEN1c3RvbSBBUEkgZW5kcG9pbnRcbiAqIC0gU0VORExZX09VVFBVVF9GT1JNQVQ6IERlZmF1bHQgb3V0cHV0IGZvcm1hdCAoaHVtYW4vanNvbilcbiAqIC0gU0VORExZX05PX0NPTE9SOiBEaXNhYmxlIGNvbG9yZWQgb3V0cHV0IChhbnkgdmFsdWUpXG4gKiAtIFNFTkRMWV9USU1FT1VUOiBSZXF1ZXN0IHRpbWVvdXQgaW4gbXMgKGRlZmF1bHQ6IDMwMDAwKVxuICogLSBTRU5ETFlfTUFYX1JFVFJJRVM6IE1heCByZXRyeSBhdHRlbXB0cyAoZGVmYXVsdDogMylcbiAqIC0gU0VORExZX09SR19JRDogT3ZlcnJpZGUgYWN0aXZlIG9yZ2FuaXphdGlvbiBJRFxuICogLSBTRU5ETFlfQ09ORklHX0tFWTogQ3VzdG9tIGVuY3J5cHRpb24ga2V5IChmb3IgQ0kvQ0QpXG4gKiAtIENJOiBBdXRvLWRldGVjdCBDSSBtb2RlIChkaXNhYmxlcyBpbnRlcmFjdGl2ZSBwcm9tcHRzKVxuICovXG5cbmltcG9ydCBDb25mIGZyb20gXCJjb25mXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgKiBhcyBvcyBmcm9tIFwibm9kZTpvc1wiO1xuaW1wb3J0ICogYXMgY3J5cHRvIGZyb20gXCJub2RlOmNyeXB0b1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNlbmRseUNvbmZpZyB7XG4gIC8vIEF1dGhlbnRpY2F0aW9uXG4gIGFwaUtleT86IHN0cmluZztcbiAgYWNjZXNzVG9rZW4/OiBzdHJpbmc7XG4gIHJlZnJlc2hUb2tlbj86IHN0cmluZztcbiAgdG9rZW5FeHBpcmVzQXQ/OiBudW1iZXI7XG4gIHVzZXJJZD86IHN0cmluZztcbiAgZW1haWw/OiBzdHJpbmc7XG5cbiAgLy8gRW52aXJvbm1lbnRcbiAgZW52aXJvbm1lbnQ6IFwidGVzdFwiIHwgXCJsaXZlXCI7XG4gIGJhc2VVcmw6IHN0cmluZztcblxuICAvLyBQcmVmZXJlbmNlc1xuICBkZWZhdWx0Rm9ybWF0OiBcImh1bWFuXCIgfCBcImpzb25cIjtcbiAgY29sb3JFbmFibGVkOiBib29sZWFuO1xuXG4gIC8vIE5ldHdvcmtcbiAgdGltZW91dDogbnVtYmVyO1xuICBtYXhSZXRyaWVzOiBudW1iZXI7XG5cbiAgLy8gT3JnYW5pemF0aW9uXG4gIGN1cnJlbnRPcmdJZD86IHN0cmluZztcbiAgY3VycmVudE9yZ05hbWU/OiBzdHJpbmc7XG4gIGN1cnJlbnRPcmdTbHVnPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHJ1bm5pbmcgaW4gQ0kgZW52aXJvbm1lbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ0koKTogYm9vbGVhbiB7XG4gIHJldHVybiAhIShcbiAgICBwcm9jZXNzLmVudi5DSSB8fFxuICAgIHByb2Nlc3MuZW52LkNPTlRJTlVPVVNfSU5URUdSQVRJT04gfHxcbiAgICBwcm9jZXNzLmVudi5HSVRIVUJfQUNUSU9OUyB8fFxuICAgIHByb2Nlc3MuZW52LkdJVExBQl9DSSB8fFxuICAgIHByb2Nlc3MuZW52LkNJUkNMRUNJIHx8XG4gICAgcHJvY2Vzcy5lbnYuVFJBVklTIHx8XG4gICAgcHJvY2Vzcy5lbnYuQlVJTERLSVRFXG4gICk7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgY29sb3Igb3V0cHV0IGlzIGRpc2FibGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbG9yRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gIHJldHVybiAhIShcbiAgICBwcm9jZXNzLmVudi5TRU5ETFlfTk9fQ09MT1IgfHxcbiAgICBwcm9jZXNzLmVudi5OT19DT0xPUiB8fFxuICAgIHByb2Nlc3MuZW52LlRFUk0gPT09IFwiZHVtYlwiXG4gICk7XG59XG5cbmNvbnN0IENPTkZJR19ESVIgPSBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCBcIi5zZW5kbHlcIik7XG5jb25zdCBDT05GSUdfRklMRSA9IFwiY29uZmlnLmpzb25cIjtcblxuLy8gT2xkIGRlZmF1bHQga2V5IC0gdXNlZCBmb3IgbWlncmF0aW9uIG9ubHlcbmNvbnN0IE9MRF9ERUZBVUxUX0tFWSA9IFwic2VuZGx5LWNsaS1kZWZhdWx0LWtleS12MVwiO1xuXG4vKipcbiAqIERlcml2ZSBhIG1hY2hpbmUtc3BlY2lmaWMgZW5jcnlwdGlvbiBrZXkuXG4gKiBUaGlzIGVuc3VyZXMgZWFjaCBpbnN0YWxsYXRpb24gaGFzIGEgdW5pcXVlIGtleSB0aGF0IGNhbid0IGJlIGVhc2lseSBndWVzc2VkLlxuICpcbiAqIFRoZSBrZXkgaXMgZGVyaXZlZCBmcm9tIG1hY2hpbmUtc3BlY2lmaWMgaWRlbnRpZmllcnMgdGhhdCBhcmU6XG4gKiAtIFVuaXF1ZSBwZXIgbWFjaGluZVxuICogLSBTdGFibGUgYWNyb3NzIHNlc3Npb25zXG4gKiAtIE5vdCBwdWJsaWNseSBrbm93blxuICovXG5mdW5jdGlvbiBkZXJpdmVFbmNyeXB0aW9uS2V5KCk6IHN0cmluZyB7XG4gIGNvbnN0IG1hY2hpbmVJZCA9IFtvcy5ob3N0bmFtZSgpLCBvcy51c2VySW5mbygpLnVzZXJuYW1lLCBvcy5ob21lZGlyKCldLmpvaW4oXG4gICAgXCI6XCIsXG4gICk7XG5cbiAgcmV0dXJuIGNyeXB0b1xuICAgIC5jcmVhdGVIYXNoKFwic2hhMjU2XCIpXG4gICAgLnVwZGF0ZShgc2VuZGx5OiR7bWFjaGluZUlkfTp2MmApXG4gICAgLmRpZ2VzdChcImhleFwiKTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGVuY3J5cHRpb24ga2V5IHRvIHVzZSBmb3IgY29uZmlnLlxuICogUHJpb3JpdHk6IFNFTkRMWV9DT05GSUdfS0VZIGVudiB2YXIgPiBtYWNoaW5lLWRlcml2ZWQga2V5XG4gKi9cbmZ1bmN0aW9uIGdldEVuY3J5cHRpb25LZXkoKTogc3RyaW5nIHtcbiAgLy8gRXhwbGljaXQga2V5IHRha2VzIHByZWNlZGVuY2UgKGZvciBDSS9DRCwgdGVzdGluZywgYWR2YW5jZWQgdXNlcnMpXG4gIGlmIChwcm9jZXNzLmVudi5TRU5ETFlfQ09ORklHX0tFWSkge1xuICAgIHJldHVybiBwcm9jZXNzLmVudi5TRU5ETFlfQ09ORklHX0tFWTtcbiAgfVxuICByZXR1cm4gZGVyaXZlRW5jcnlwdGlvbktleSgpO1xufVxuXG4vLyBFbnN1cmUgY29uZmlnIGRpcmVjdG9yeSBleGlzdHMgd2l0aCBzZWN1cmUgcGVybWlzc2lvbnNcbmlmICghZnMuZXhpc3RzU3luYyhDT05GSUdfRElSKSkge1xuICBmcy5ta2RpclN5bmMoQ09ORklHX0RJUiwgeyByZWN1cnNpdmU6IHRydWUsIG1vZGU6IDBvNzAwIH0pO1xufVxuXG5jb25zdCBERUZBVUxUX0NPTkZJRzogU2VuZGx5Q29uZmlnID0ge1xuICBlbnZpcm9ubWVudDogXCJ0ZXN0XCIsXG4gIGJhc2VVcmw6IFwiaHR0cHM6Ly9zZW5kbHkubGl2ZVwiLFxuICBkZWZhdWx0Rm9ybWF0OiBcImh1bWFuXCIsXG4gIGNvbG9yRW5hYmxlZDogdHJ1ZSxcbiAgdGltZW91dDogMzAwMDAsXG4gIG1heFJldHJpZXM6IDMsXG59O1xuXG4vKipcbiAqIEluaXRpYWxpemUgY29uZmlnIHdpdGggYXV0b21hdGljIG1pZ3JhdGlvbiBmcm9tIG9sZCBlbmNyeXB0aW9uIGtleS5cbiAqIFRoaXMgZW5zdXJlcyBleGlzdGluZyB1c2VycyBkb24ndCBsb3NlIHRoZWlyIGNyZWRlbnRpYWxzLlxuICovXG5mdW5jdGlvbiBpbml0aWFsaXplQ29uZmlnKCk6IENvbmY8U2VuZGx5Q29uZmlnPiB7XG4gIGNvbnN0IG5ld0tleSA9IGdldEVuY3J5cHRpb25LZXkoKTtcblxuICAvLyBUcnkgdG8gaW5pdGlhbGl6ZSB3aXRoIG5ldyBrZXkgZmlyc3RcbiAgdHJ5IHtcbiAgICBjb25zdCBuZXdDb25maWcgPSBuZXcgQ29uZjxTZW5kbHlDb25maWc+KHtcbiAgICAgIHByb2plY3ROYW1lOiBcInNlbmRseVwiLFxuICAgICAgY3dkOiBDT05GSUdfRElSLFxuICAgICAgY29uZmlnTmFtZTogXCJjb25maWdcIixcbiAgICAgIGRlZmF1bHRzOiBERUZBVUxUX0NPTkZJRyxcbiAgICAgIGVuY3J5cHRpb25LZXk6IG5ld0tleSxcbiAgICB9KTtcblxuICAgIC8vIFRyeSB0byByZWFkIGEgdmFsdWUgdG8gdmVyaWZ5IGRlY3J5cHRpb24gd29ya3NcbiAgICBuZXdDb25maWcuZ2V0KFwiZW52aXJvbm1lbnRcIik7XG4gICAgcmV0dXJuIG5ld0NvbmZpZztcbiAgfSBjYXRjaCB7XG4gICAgLy8gTmV3IGtleSBkaWRuJ3Qgd29yayAtIHRyeSBtaWdyYXRpb24gZnJvbSBvbGQga2V5XG4gIH1cblxuICAvLyBNaWdyYXRpb246IFRyeSB0byByZWFkIHdpdGggb2xkIGRlZmF1bHQga2V5XG4gIHRyeSB7XG4gICAgY29uc3Qgb2xkQ29uZmlnID0gbmV3IENvbmY8U2VuZGx5Q29uZmlnPih7XG4gICAgICBwcm9qZWN0TmFtZTogXCJzZW5kbHlcIixcbiAgICAgIGN3ZDogQ09ORklHX0RJUixcbiAgICAgIGNvbmZpZ05hbWU6IFwiY29uZmlnXCIsXG4gICAgICBkZWZhdWx0czogREVGQVVMVF9DT05GSUcsXG4gICAgICBlbmNyeXB0aW9uS2V5OiBPTERfREVGQVVMVF9LRVksXG4gICAgfSk7XG5cbiAgICAvLyBSZWFkIGFsbCBkYXRhIHdpdGggb2xkIGtleVxuICAgIGNvbnN0IG9sZERhdGEgPSB7IC4uLm9sZENvbmZpZy5zdG9yZSB9O1xuICAgIGNvbnN0IGhhc0RhdGEgPSBPYmplY3Qua2V5cyhvbGREYXRhKS5zb21lKFxuICAgICAgKGspID0+XG4gICAgICAgICFPYmplY3Qua2V5cyhERUZBVUxUX0NPTkZJRykuaW5jbHVkZXMoaykgfHxcbiAgICAgICAgb2xkRGF0YVtrIGFzIGtleW9mIFNlbmRseUNvbmZpZ10gIT09XG4gICAgICAgICAgREVGQVVMVF9DT05GSUdbayBhcyBrZXlvZiBTZW5kbHlDb25maWddLFxuICAgICk7XG5cbiAgICBpZiAoaGFzRGF0YSkge1xuICAgICAgLy8gQ2xlYXIgb2xkIGNvbmZpZyBmaWxlXG4gICAgICBvbGRDb25maWcuY2xlYXIoKTtcblxuICAgICAgLy8gQ3JlYXRlIG5ldyBjb25maWcgd2l0aCBuZXcga2V5XG4gICAgICBjb25zdCBuZXdDb25maWcgPSBuZXcgQ29uZjxTZW5kbHlDb25maWc+KHtcbiAgICAgICAgcHJvamVjdE5hbWU6IFwic2VuZGx5XCIsXG4gICAgICAgIGN3ZDogQ09ORklHX0RJUixcbiAgICAgICAgY29uZmlnTmFtZTogXCJjb25maWdcIixcbiAgICAgICAgZGVmYXVsdHM6IERFRkFVTFRfQ09ORklHLFxuICAgICAgICBlbmNyeXB0aW9uS2V5OiBuZXdLZXksXG4gICAgICB9KTtcblxuICAgICAgLy8gUmVzdG9yZSBkYXRhIHdpdGggbmV3IGVuY3J5cHRpb25cbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG9sZERhdGEpKSB7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbmV3Q29uZmlnLnNldChrZXkgYXMga2V5b2YgU2VuZGx5Q29uZmlnLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ld0NvbmZpZztcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIE9sZCBrZXkgYWxzbyBkaWRuJ3Qgd29yayAtIGNvcnJ1cHRlZCBvciBmcmVzaCBpbnN0YWxsXG4gIH1cblxuICAvLyBGcmVzaCBpbnN0YWxsIG9yIGNvcnJ1cHRlZCAtIHN0YXJ0IHdpdGggbmV3IGtleVxuICByZXR1cm4gbmV3IENvbmY8U2VuZGx5Q29uZmlnPih7XG4gICAgcHJvamVjdE5hbWU6IFwic2VuZGx5XCIsXG4gICAgY3dkOiBDT05GSUdfRElSLFxuICAgIGNvbmZpZ05hbWU6IFwiY29uZmlnXCIsXG4gICAgZGVmYXVsdHM6IERFRkFVTFRfQ09ORklHLFxuICAgIGVuY3J5cHRpb25LZXk6IG5ld0tleSxcbiAgfSk7XG59XG5cbmNvbnN0IGNvbmZpZyA9IGluaXRpYWxpemVDb25maWcoKTtcblxuLyoqXG4gKiBHZXQgZWZmZWN0aXZlIGNvbmZpZyB2YWx1ZSB3aXRoIGVudmlyb25tZW50IHZhcmlhYmxlIG92ZXJyaWRlXG4gKiBQcmlvcml0eTogZW52IHZhciA+IGNvbmZpZyBmaWxlID4gZGVmYXVsdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWZmZWN0aXZlVmFsdWU8SyBleHRlbmRzIGtleW9mIFNlbmRseUNvbmZpZz4oXG4gIGtleTogSyxcbik6IFNlbmRseUNvbmZpZ1tLXSB7XG4gIC8vIEVudmlyb25tZW50IHZhcmlhYmxlIG92ZXJyaWRlc1xuICBzd2l0Y2ggKGtleSkge1xuICAgIGNhc2UgXCJhcGlLZXlcIjpcbiAgICAgIGlmIChwcm9jZXNzLmVudi5TRU5ETFlfQVBJX0tFWSkge1xuICAgICAgICByZXR1cm4gcHJvY2Vzcy5lbnYuU0VORExZX0FQSV9LRVkgYXMgU2VuZGx5Q29uZmlnW0tdO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImJhc2VVcmxcIjpcbiAgICAgIGlmIChwcm9jZXNzLmVudi5TRU5ETFlfQkFTRV9VUkwpIHtcbiAgICAgICAgcmV0dXJuIHByb2Nlc3MuZW52LlNFTkRMWV9CQVNFX1VSTCBhcyBTZW5kbHlDb25maWdbS107XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiZGVmYXVsdEZvcm1hdFwiOlxuICAgICAgaWYgKHByb2Nlc3MuZW52LlNFTkRMWV9PVVRQVVRfRk9STUFUKSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IHByb2Nlc3MuZW52LlNFTkRMWV9PVVRQVVRfRk9STUFULnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChmb3JtYXQgPT09IFwianNvblwiIHx8IGZvcm1hdCA9PT0gXCJodW1hblwiKSB7XG4gICAgICAgICAgcmV0dXJuIGZvcm1hdCBhcyBTZW5kbHlDb25maWdbS107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJjb2xvckVuYWJsZWRcIjpcbiAgICAgIGlmIChpc0NvbG9yRGlzYWJsZWQoKSkge1xuICAgICAgICByZXR1cm4gZmFsc2UgYXMgU2VuZGx5Q29uZmlnW0tdO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInRpbWVvdXRcIjpcbiAgICAgIGlmIChwcm9jZXNzLmVudi5TRU5ETFlfVElNRU9VVCkge1xuICAgICAgICBjb25zdCB0aW1lb3V0ID0gcGFyc2VJbnQocHJvY2Vzcy5lbnYuU0VORExZX1RJTUVPVVQsIDEwKTtcbiAgICAgICAgaWYgKCFpc05hTih0aW1lb3V0KSAmJiB0aW1lb3V0ID4gMCkge1xuICAgICAgICAgIHJldHVybiB0aW1lb3V0IGFzIFNlbmRseUNvbmZpZ1tLXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIm1heFJldHJpZXNcIjpcbiAgICAgIGlmIChwcm9jZXNzLmVudi5TRU5ETFlfTUFYX1JFVFJJRVMpIHtcbiAgICAgICAgY29uc3QgcmV0cmllcyA9IHBhcnNlSW50KHByb2Nlc3MuZW52LlNFTkRMWV9NQVhfUkVUUklFUywgMTApO1xuICAgICAgICBpZiAoIWlzTmFOKHJldHJpZXMpICYmIHJldHJpZXMgPj0gMCkge1xuICAgICAgICAgIHJldHVybiByZXRyaWVzIGFzIFNlbmRseUNvbmZpZ1tLXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImN1cnJlbnRPcmdJZFwiOlxuICAgICAgaWYgKHByb2Nlc3MuZW52LlNFTkRMWV9PUkdfSUQpIHtcbiAgICAgICAgcmV0dXJuIHByb2Nlc3MuZW52LlNFTkRMWV9PUkdfSUQgYXMgU2VuZGx5Q29uZmlnW0tdO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gIH1cblxuICAvLyBGYWxsIGJhY2sgdG8gY29uZmlnIGZpbGUgdmFsdWVcbiAgcmV0dXJuIGNvbmZpZy5nZXQoa2V5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbmZpZygpOiBTZW5kbHlDb25maWcge1xuICByZXR1cm4gY29uZmlnLnN0b3JlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0Q29uZmlnPEsgZXh0ZW5kcyBrZXlvZiBTZW5kbHlDb25maWc+KFxuICBrZXk6IEssXG4gIHZhbHVlOiBTZW5kbHlDb25maWdbS10sXG4pOiB2b2lkIHtcbiAgY29uZmlnLnNldChrZXksIHZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbmZpZ1ZhbHVlPEsgZXh0ZW5kcyBrZXlvZiBTZW5kbHlDb25maWc+KFxuICBrZXk6IEssXG4pOiBTZW5kbHlDb25maWdbS10ge1xuICByZXR1cm4gY29uZmlnLmdldChrZXkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJDb25maWcoKTogdm9pZCB7XG4gIGNvbmZpZy5jbGVhcigpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJBdXRoKCk6IHZvaWQge1xuICBjb25maWcuZGVsZXRlKFwiYXBpS2V5XCIpO1xuICBjb25maWcuZGVsZXRlKFwiYWNjZXNzVG9rZW5cIik7XG4gIGNvbmZpZy5kZWxldGUoXCJyZWZyZXNoVG9rZW5cIik7XG4gIGNvbmZpZy5kZWxldGUoXCJ0b2tlbkV4cGlyZXNBdFwiKTtcbiAgY29uZmlnLmRlbGV0ZShcInVzZXJJZFwiKTtcbiAgY29uZmlnLmRlbGV0ZShcImVtYWlsXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNBdXRoZW50aWNhdGVkKCk6IGJvb2xlYW4ge1xuICAvLyBDaGVjayBlbnYgdmFyIGZpcnN0XG4gIGlmIChwcm9jZXNzLmVudi5TRU5ETFlfQVBJX0tFWSkgcmV0dXJuIHRydWU7XG5cbiAgY29uc3QgYXBpS2V5ID0gY29uZmlnLmdldChcImFwaUtleVwiKTtcbiAgY29uc3QgYWNjZXNzVG9rZW4gPSBjb25maWcuZ2V0KFwiYWNjZXNzVG9rZW5cIik7XG4gIHJldHVybiAhIShhcGlLZXkgfHwgYWNjZXNzVG9rZW4pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXV0aFRva2VuKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIC8vIEVudmlyb25tZW50IHZhcmlhYmxlIHRha2VzIGhpZ2hlc3QgcHJlY2VkZW5jZVxuICBpZiAocHJvY2Vzcy5lbnYuU0VORExZX0FQSV9LRVkpIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnYuU0VORExZX0FQSV9LRVk7XG4gIH1cblxuICAvLyBUaGVuIHN0b3JlZCBBUEkga2V5XG4gIGNvbnN0IGFwaUtleSA9IGNvbmZpZy5nZXQoXCJhcGlLZXlcIik7XG4gIGlmIChhcGlLZXkpIHJldHVybiBhcGlLZXk7XG5cbiAgLy8gRmluYWxseSwgYWNjZXNzIHRva2VuIChpZiBub3QgZXhwaXJlZClcbiAgY29uc3QgYWNjZXNzVG9rZW4gPSBjb25maWcuZ2V0KFwiYWNjZXNzVG9rZW5cIik7XG4gIGNvbnN0IGV4cGlyZXNBdCA9IGNvbmZpZy5nZXQoXCJ0b2tlbkV4cGlyZXNBdFwiKTtcblxuICBpZiAoYWNjZXNzVG9rZW4gJiYgZXhwaXJlc0F0ICYmIERhdGUubm93KCkgPCBleHBpcmVzQXQpIHtcbiAgICByZXR1cm4gYWNjZXNzVG9rZW47XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RvcmVkQWNjZXNzVG9rZW4oKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGNvbmZpZy5nZXQoXCJhY2Nlc3NUb2tlblwiKSB8fCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRBcGlLZXkoYXBpS2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgLy8gVmFsaWRhdGUgQVBJIGtleSBmb3JtYXRcbiAgaWYgKCEvXnNrXyh0ZXN0fGxpdmUpX3YxX1thLXpBLVowLTlfLV0rJC8udGVzdChhcGlLZXkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJJbnZhbGlkIEFQSSBrZXkgZm9ybWF0LiBFeHBlY3RlZCBza190ZXN0X3YxX3h4eCBvciBza19saXZlX3YxX3h4eFwiLFxuICAgICk7XG4gIH1cblxuICBjb25maWcuc2V0KFwiYXBpS2V5XCIsIGFwaUtleSk7XG5cbiAgLy8gU2V0IGVudmlyb25tZW50IGJhc2VkIG9uIGtleSB0eXBlXG4gIGlmIChhcGlLZXkuc3RhcnRzV2l0aChcInNrX3Rlc3RfXCIpKSB7XG4gICAgY29uZmlnLnNldChcImVudmlyb25tZW50XCIsIFwidGVzdFwiKTtcbiAgfSBlbHNlIHtcbiAgICBjb25maWcuc2V0KFwiZW52aXJvbm1lbnRcIiwgXCJsaXZlXCIpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRBdXRoVG9rZW5zKFxuICBhY2Nlc3NUb2tlbjogc3RyaW5nLFxuICByZWZyZXNoVG9rZW46IHN0cmluZyxcbiAgZXhwaXJlc0luOiBudW1iZXIsXG4gIHVzZXJJZDogc3RyaW5nLFxuICBlbWFpbDogc3RyaW5nLFxuKTogdm9pZCB7XG4gIGNvbmZpZy5zZXQoXCJhY2Nlc3NUb2tlblwiLCBhY2Nlc3NUb2tlbik7XG4gIGNvbmZpZy5zZXQoXCJyZWZyZXNoVG9rZW5cIiwgcmVmcmVzaFRva2VuKTtcbiAgY29uZmlnLnNldChcInRva2VuRXhwaXJlc0F0XCIsIERhdGUubm93KCkgKyBleHBpcmVzSW4gKiAxMDAwKTtcbiAgY29uZmlnLnNldChcInVzZXJJZFwiLCB1c2VySWQpO1xuICBjb25maWcuc2V0KFwiZW1haWxcIiwgZW1haWwpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29uZmlnUGF0aCgpOiBzdHJpbmcge1xuICByZXR1cm4gcGF0aC5qb2luKENPTkZJR19ESVIsIENPTkZJR19GSUxFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbmZpZ0RpcigpOiBzdHJpbmcge1xuICByZXR1cm4gQ09ORklHX0RJUjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEN1cnJlbnRPcmcoaWQ6IHN0cmluZywgbmFtZTogc3RyaW5nLCBzbHVnPzogc3RyaW5nKTogdm9pZCB7XG4gIGNvbmZpZy5zZXQoXCJjdXJyZW50T3JnSWRcIiwgaWQpO1xuICBjb25maWcuc2V0KFwiY3VycmVudE9yZ05hbWVcIiwgbmFtZSk7XG4gIGlmIChzbHVnKSBjb25maWcuc2V0KFwiY3VycmVudE9yZ1NsdWdcIiwgc2x1Zyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXJyZW50T3JnKCk6IHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBzbHVnPzogc3RyaW5nO1xufSB8IG51bGwge1xuICBjb25zdCBpZCA9IGdldEVmZmVjdGl2ZVZhbHVlKFwiY3VycmVudE9yZ0lkXCIpO1xuICBjb25zdCBuYW1lID0gY29uZmlnLmdldChcImN1cnJlbnRPcmdOYW1lXCIpO1xuICBpZiAoIWlkKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIHsgaWQsIG5hbWU6IG5hbWUgfHwgaWQsIHNsdWc6IGNvbmZpZy5nZXQoXCJjdXJyZW50T3JnU2x1Z1wiKSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJDdXJyZW50T3JnKCk6IHZvaWQge1xuICBjb25maWcuZGVsZXRlKFwiY3VycmVudE9yZ0lkXCIpO1xuICBjb25maWcuZGVsZXRlKFwiY3VycmVudE9yZ05hbWVcIik7XG4gIGNvbmZpZy5kZWxldGUoXCJjdXJyZW50T3JnU2x1Z1wiKTtcbn1cblxuZXhwb3J0IHsgY29uZmlnIH07XG4iXX0=
|
|
331
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFFSCxPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxLQUFLLElBQUksTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxLQUFLLE1BQU0sTUFBTSxhQUFhLENBQUM7QUE2QnRDOztHQUVHO0FBQ0gsTUFBTSxVQUFVLElBQUk7SUFDbEIsT0FBTyxDQUFDLENBQUMsQ0FDUCxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDZCxPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQjtRQUNsQyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWM7UUFDMUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTO1FBQ3JCLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUTtRQUNwQixPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU07UUFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQ3RCLENBQUM7QUFDSixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsZUFBZTtJQUM3QixPQUFPLENBQUMsQ0FBQyxDQUNQLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZTtRQUMzQixPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVE7UUFDcEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUM1QixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3RELE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQztBQUVsQyw0Q0FBNEM7QUFD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Z0IsQ0FBQyxDQUFDO0lBQzFDLElBQUksQ0FBQyxFQUFFO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDckIsT0FBTyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7QUFDdEUsQ0FBQztBQUVELE1BQU0sVUFBVSxlQUFlO0lBQzdCLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDOUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2hDLE1BQU0sQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUNsQyxDQUFDO0FBRUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDTEkgQ29uZmlndXJhdGlvbiBNYW5hZ2VtZW50XG4gKiBTdG9yZXMgdXNlciBwcmVmZXJlbmNlcyBhbmQgY3JlZGVudGlhbHMgaW4gfi8uc2VuZGx5L1xuICpcbiAqIEVudmlyb25tZW50IFZhcmlhYmxlcyAodGFrZSBwcmVjZWRlbmNlIG92ZXIgY29uZmlnIGZpbGUpOlxuICogLSBTRU5ETFlfQVBJX0tFWTogQVBJIGtleSBmb3IgYXV0aGVudGljYXRpb25cbiAqIC0gU0VORExZX0JBU0VfVVJMOiBDdXN0b20gQVBJIGVuZHBvaW50XG4gKiAtIFNFTkRMWV9PVVRQVVRfRk9STUFUOiBEZWZhdWx0IG91dHB1dCBmb3JtYXQgKGh1bWFuL2pzb24pXG4gKiAtIFNFTkRMWV9OT19DT0xPUjogRGlzYWJsZSBjb2xvcmVkIG91dHB1dCAoYW55IHZhbHVlKVxuICogLSBTRU5ETFlfVElNRU9VVDogUmVxdWVzdCB0aW1lb3V0IGluIG1zIChkZWZhdWx0OiAzMDAwMClcbiAqIC0gU0VORExZX01BWF9SRVRSSUVTOiBNYXggcmV0cnkgYXR0ZW1wdHMgKGRlZmF1bHQ6IDMpXG4gKiAtIFNFTkRMWV9PUkdfSUQ6IE92ZXJyaWRlIGFjdGl2ZSBvcmdhbml6YXRpb24gSURcbiAqIC0gU0VORExZX0NPTkZJR19LRVk6IEN1c3RvbSBlbmNyeXB0aW9uIGtleSAoZm9yIENJL0NEKVxuICogLSBDSTogQXV0by1kZXRlY3QgQ0kgbW9kZSAoZGlzYWJsZXMgaW50ZXJhY3RpdmUgcHJvbXB0cylcbiAqL1xuXG5pbXBvcnQgQ29uZiBmcm9tIFwiY29uZlwiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0ICogYXMgb3MgZnJvbSBcIm5vZGU6b3NcIjtcbmltcG9ydCAqIGFzIGNyeXB0byBmcm9tIFwibm9kZTpjcnlwdG9cIjtcblxuZXhwb3J0IGludGVyZmFjZSBTZW5kbHlDb25maWcge1xuICAvLyBBdXRoZW50aWNhdGlvblxuICBhcGlLZXk/OiBzdHJpbmc7XG4gIGFjY2Vzc1Rva2VuPzogc3RyaW5nO1xuICByZWZyZXNoVG9rZW4/OiBzdHJpbmc7XG4gIHRva2VuRXhwaXJlc0F0PzogbnVtYmVyO1xuICB1c2VySWQ/OiBzdHJpbmc7XG4gIGVtYWlsPzogc3RyaW5nO1xuXG4gIC8vIEVudmlyb25tZW50XG4gIGVudmlyb25tZW50OiBcInRlc3RcIiB8IFwibGl2ZVwiO1xuICBiYXNlVXJsOiBzdHJpbmc7XG5cbiAgLy8gUHJlZmVyZW5jZXNcbiAgZGVmYXVsdEZvcm1hdDogXCJodW1hblwiIHwgXCJqc29uXCI7XG4gIGNvbG9yRW5hYmxlZDogYm9vbGVhbjtcblxuICAvLyBOZXR3b3JrXG4gIHRpbWVvdXQ6IG51bWJlcjtcbiAgbWF4UmV0cmllczogbnVtYmVyO1xuXG4gIC8vIE9yZ2FuaXphdGlvblxuICBjdXJyZW50T3JnSWQ/OiBzdHJpbmc7XG4gIGN1cnJlbnRPcmdOYW1lPzogc3RyaW5nO1xuICBjdXJyZW50T3JnU2x1Zz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBydW5uaW5nIGluIENJIGVudmlyb25tZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NJKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gISEoXG4gICAgcHJvY2Vzcy5lbnYuQ0kgfHxcbiAgICBwcm9jZXNzLmVudi5DT05USU5VT1VTX0lOVEVHUkFUSU9OIHx8XG4gICAgcHJvY2Vzcy5lbnYuR0lUSFVCX0FDVElPTlMgfHxcbiAgICBwcm9jZXNzLmVudi5HSVRMQUJfQ0kgfHxcbiAgICBwcm9jZXNzLmVudi5DSVJDTEVDSSB8fFxuICAgIHByb2Nlc3MuZW52LlRSQVZJUyB8fFxuICAgIHByb2Nlc3MuZW52LkJVSUxES0lURVxuICApO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGNvbG9yIG91dHB1dCBpcyBkaXNhYmxlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDb2xvckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gISEoXG4gICAgcHJvY2Vzcy5lbnYuU0VORExZX05PX0NPTE9SIHx8XG4gICAgcHJvY2Vzcy5lbnYuTk9fQ09MT1IgfHxcbiAgICBwcm9jZXNzLmVudi5URVJNID09PSBcImR1bWJcIlxuICApO1xufVxuXG5jb25zdCBDT05GSUdfRElSID0gcGF0aC5qb2luKG9zLmhvbWVkaXIoKSwgXCIuc2VuZGx5XCIpO1xuY29uc3QgQ09ORklHX0ZJTEUgPSBcImNvbmZpZy5qc29uXCI7XG5cbi8vIE9sZCBkZWZhdWx0IGtleSAtIHVzZWQgZm9yIG1pZ3JhdGlvbiBvbmx5XG5jb25zdCBPTERfREVGQVVMVF9LRVkgPSBcInNlbmRseS1jbGktZGVmYXVsdC1rZXktdjFcIjtcblxuLyoqXG4gKiBEZXJpdmUgYSBtYWNoaW5lLXNwZWNpZmljIGVuY3J5cHRpb24ga2V5LlxuICogVGhpcyBlbnN1cmVzIGVhY2ggaW5zdGFsbGF0aW9uIGhhcyBhIHVuaXF1ZSBrZXkgdGhhdCBjYW4ndCBiZSBlYXNpbHkgZ3Vlc3NlZC5cbiAqXG4gKiBUaGUga2V5IGlzIGRlcml2ZWQgZnJvbSBtYWNoaW5lLXNwZWNpZmljIGlkZW50aWZpZXJzIHRoYXQgYXJlOlxuICogLSBVbmlxdWUgcGVyIG1hY2hpbmVcbiAqIC0gU3RhYmxlIGFjcm9zcyBzZXNzaW9uc1xuICogLSBOb3QgcHVibGljbHkga25vd25cbiAqL1xuZnVuY3Rpb24gZGVyaXZlRW5jcnlwdGlvbktleSgpOiBzdHJpbmcge1xuICBjb25zdCBtYWNoaW5lSWQgPSBbb3MuaG9zdG5hbWUoKSwgb3MudXNlckluZm8oKS51c2VybmFtZSwgb3MuaG9tZWRpcigpXS5qb2luKFxuICAgIFwiOlwiLFxuICApO1xuXG4gIHJldHVybiBjcnlwdG9cbiAgICAuY3JlYXRlSGFzaChcInNoYTI1NlwiKVxuICAgIC51cGRhdGUoYHNlbmRseToke21hY2hpbmVJZH06djJgKVxuICAgIC5kaWdlc3QoXCJoZXhcIik7XG59XG5cbi8qKlxuICogR2V0IHRoZSBlbmNyeXB0aW9uIGtleSB0byB1c2UgZm9yIGNvbmZpZy5cbiAqIFByaW9yaXR5OiBTRU5ETFlfQ09ORklHX0tFWSBlbnYgdmFyID4gbWFjaGluZS1kZXJpdmVkIGtleVxuICovXG5mdW5jdGlvbiBnZXRFbmNyeXB0aW9uS2V5KCk6IHN0cmluZyB7XG4gIC8vIEV4cGxpY2l0IGtleSB0YWtlcyBwcmVjZWRlbmNlIChmb3IgQ0kvQ0QsIHRlc3RpbmcsIGFkdmFuY2VkIHVzZXJzKVxuICBpZiAocHJvY2Vzcy5lbnYuU0VORExZX0NPTkZJR19LRVkpIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnYuU0VORExZX0NPTkZJR19LRVk7XG4gIH1cbiAgcmV0dXJuIGRlcml2ZUVuY3J5cHRpb25LZXkoKTtcbn1cblxuLy8gRW5zdXJlIGNvbmZpZyBkaXJlY3RvcnkgZXhpc3RzIHdpdGggc2VjdXJlIHBlcm1pc3Npb25zXG5pZiAoIWZzLmV4aXN0c1N5bmMoQ09ORklHX0RJUikpIHtcbiAgZnMubWtkaXJTeW5jKENPTkZJR19ESVIsIHsgcmVjdXJzaXZlOiB0cnVlLCBtb2RlOiAwbzcwMCB9KTtcbn1cblxuY29uc3QgREVGQVVMVF9DT05GSUc6IFNlbmRseUNvbmZpZyA9IHtcbiAgZW52aXJvbm1lbnQ6IFwidGVzdFwiLFxuICBiYXNlVXJsOiBcImh0dHBzOi8vc2VuZGx5LmxpdmVcIixcbiAgZGVmYXVsdEZvcm1hdDogXCJodW1hblwiLFxuICBjb2xvckVuYWJsZWQ6IHRydWUsXG4gIHRpbWVvdXQ6IDMwMDAwLFxuICBtYXhSZXRyaWVzOiAzLFxufTtcblxuLyoqXG4gKiBJbml0aWFsaXplIGNvbmZpZyB3aXRoIGF1dG9tYXRpYyBtaWdyYXRpb24gZnJvbSBvbGQgZW5jcnlwdGlvbiBrZXkuXG4gKiBUaGlzIGVuc3VyZXMgZXhpc3RpbmcgdXNlcnMgZG9uJ3QgbG9zZSB0aGVpciBjcmVkZW50aWFscy5cbiAqL1xuZnVuY3Rpb24gaW5pdGlhbGl6ZUNvbmZpZygpOiBDb25mPFNlbmRseUNvbmZpZz4ge1xuICBjb25zdCBuZXdLZXkgPSBnZXRFbmNyeXB0aW9uS2V5KCk7XG5cbiAgLy8gVHJ5IHRvIGluaXRpYWxpemUgd2l0aCBuZXcga2V5IGZpcnN0XG4gIHRyeSB7XG4gICAgY29uc3QgbmV3Q29uZmlnID0gbmV3IENvbmY8U2VuZGx5Q29uZmlnPih7XG4gICAgICBwcm9qZWN0TmFtZTogXCJzZW5kbHlcIixcbiAgICAgIGN3ZDogQ09ORklHX0RJUixcbiAgICAgIGNvbmZpZ05hbWU6IFwiY29uZmlnXCIsXG4gICAgICBkZWZhdWx0czogREVGQVVMVF9DT05GSUcsXG4gICAgICBlbmNyeXB0aW9uS2V5OiBuZXdLZXksXG4gICAgfSk7XG5cbiAgICAvLyBUcnkgdG8gcmVhZCBhIHZhbHVlIHRvIHZlcmlmeSBkZWNyeXB0aW9uIHdvcmtzXG4gICAgbmV3Q29uZmlnLmdldChcImVudmlyb25tZW50XCIpO1xuICAgIHJldHVybiBuZXdDb25maWc7XG4gIH0gY2F0Y2gge1xuICAgIC8vIE5ldyBrZXkgZGlkbid0IHdvcmsgLSB0cnkgbWlncmF0aW9uIGZyb20gb2xkIGtleVxuICB9XG5cbiAgLy8gTWlncmF0aW9uOiBUcnkgdG8gcmVhZCB3aXRoIG9sZCBkZWZhdWx0IGtleVxuICB0cnkge1xuICAgIGNvbnN0IG9sZENvbmZpZyA9IG5ldyBDb25mPFNlbmRseUNvbmZpZz4oe1xuICAgICAgcHJvamVjdE5hbWU6IFwic2VuZGx5XCIsXG4gICAgICBjd2Q6IENPTkZJR19ESVIsXG4gICAgICBjb25maWdOYW1lOiBcImNvbmZpZ1wiLFxuICAgICAgZGVmYXVsdHM6IERFRkFVTFRfQ09ORklHLFxuICAgICAgZW5jcnlwdGlvbktleTogT0xEX0RFRkFVTFRfS0VZLFxuICAgIH0pO1xuXG4gICAgLy8gUmVhZCBhbGwgZGF0YSB3aXRoIG9sZCBrZXlcbiAgICBjb25zdCBvbGREYXRhID0geyAuLi5vbGRDb25maWcuc3RvcmUgfTtcbiAgICBjb25zdCBoYXNEYXRhID0gT2JqZWN0LmtleXMob2xkRGF0YSkuc29tZShcbiAgICAgIChrKSA9PlxuICAgICAgICAhT2JqZWN0LmtleXMoREVGQVVMVF9DT05GSUcpLmluY2x1ZGVzKGspIHx8XG4gICAgICAgIG9sZERhdGFbayBhcyBrZXlvZiBTZW5kbHlDb25maWddICE9PVxuICAgICAgICAgIERFRkFVTFRfQ09ORklHW2sgYXMga2V5b2YgU2VuZGx5Q29uZmlnXSxcbiAgICApO1xuXG4gICAgaWYgKGhhc0RhdGEpIHtcbiAgICAgIC8vIENsZWFyIG9sZCBjb25maWcgZmlsZVxuICAgICAgb2xkQ29uZmlnLmNsZWFyKCk7XG5cbiAgICAgIC8vIENyZWF0ZSBuZXcgY29uZmlnIHdpdGggbmV3IGtleVxuICAgICAgY29uc3QgbmV3Q29uZmlnID0gbmV3IENvbmY8U2VuZGx5Q29uZmlnPih7XG4gICAgICAgIHByb2plY3ROYW1lOiBcInNlbmRseVwiLFxuICAgICAgICBjd2Q6IENPTkZJR19ESVIsXG4gICAgICAgIGNvbmZpZ05hbWU6IFwiY29uZmlnXCIsXG4gICAgICAgIGRlZmF1bHRzOiBERUZBVUxUX0NPTkZJRyxcbiAgICAgICAgZW5jcnlwdGlvbktleTogbmV3S2V5LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFJlc3RvcmUgZGF0YSB3aXRoIG5ldyBlbmNyeXB0aW9uXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhvbGREYXRhKSkge1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG5ld0NvbmZpZy5zZXQoa2V5IGFzIGtleW9mIFNlbmRseUNvbmZpZywgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXdDb25maWc7XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICAvLyBPbGQga2V5IGFsc28gZGlkbid0IHdvcmsgLSBjb3JydXB0ZWQgb3IgZnJlc2ggaW5zdGFsbFxuICB9XG5cbiAgLy8gRnJlc2ggaW5zdGFsbCBvciBjb3JydXB0ZWQuIElmIGEgY29uZmlnIGZpbGUgZXhpc3RzIGF0IHRoaXMgcG9pbnQsXG4gIC8vIGJvdGggdGhlIG5ldyBrZXkgYW5kIHRoZSBvbGQga2V5IGZhaWxlZCB0byBkZWNyeXB0IGl0IOKAlCB0aGF0IG1lYW5zXG4gIC8vIHRoZSBmaWxlIHdhcyB3cml0dGVuIGJ5IGEgZGlmZmVyZW50IG1hY2hpbmUsIGVuY3J5cHRlZCB3aXRoIGFcbiAgLy8gU0VORExZX0NPTkZJR19LRVkgdGhhdCBubyBsb25nZXIgbWF0Y2hlcywgb3IgZ290IGNvcnJ1cHRlZC5cbiAgLy8gQ29uc3RydWN0aW5nIGEgbmV3IENvbmZ7fSBoZXJlIHdvdWxkIGp1c3QgcmUtcmVhZCB0aGUgc2FtZSBmaWxlIGFuZFxuICAvLyB0aHJvdyB0aGUgc2FtZSBTeW50YXhFcnJvci4gTW92ZSBpdCBhc2lkZSBzbyB0aGUgdXNlciBrZWVwcyBhIGNvcHlcbiAgLy8gKGluIGNhc2UgdGhleSByZWNvdmVyIHRoZSBrZXkgbGF0ZXIpIGFuZCBzdGFydCBjbGVhbi5cbiAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4oQ09ORklHX0RJUiwgQ09ORklHX0ZJTEUpO1xuICBpZiAoZnMuZXhpc3RzU3luYyhmaWxlUGF0aCkpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmFja3VwUGF0aCA9IGAke2ZpbGVQYXRofS5jb3JydXB0LiR7RGF0ZS5ub3coKX1gO1xuICAgICAgZnMucmVuYW1lU3luYyhmaWxlUGF0aCwgYmFja3VwUGF0aCk7XG4gICAgICAvLyBTdGF5IHF1aWV0IGJ5IGRlZmF1bHQg4oCUIG1vc3QgY2FsbGVycyBydW4gZWFybHkgaW4gdGhlIHByb2Nlc3NcbiAgICAgIC8vIGJlZm9yZSBvdXRwdXQgaGVscGVycyBhcmUgd2lyZWQuIEEgZGVidWcgYnJlYWRjcnVtYiBpcyBlbm91Z2guXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuREVCVUcpIHtcbiAgICAgICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoXG4gICAgICAgICAgYFtzZW5kbHldIENvdWxkIG5vdCBkZWNyeXB0ICR7ZmlsZVBhdGh9OyBtb3ZlZCB0byAke2JhY2t1cFBhdGh9IGFuZCBzdGFydGluZyBmcmVzaC4gUnVuICdzZW5kbHkgbG9naW4nIHRvIHJlLWF1dGhlbnRpY2F0ZS5cXG5gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gSWYgd2UgY2FuJ3QgbW92ZSB0aGUgZmlsZSAocGVybWlzc2lvbnMsIEZTIGlzc3VlKSwgb3VyIGJlc3RcbiAgICAgIC8vIHJlbWFpbmluZyBvcHRpb24gaXMgdG8gZGVsZXRlIGl0IOKAlCBsb3NpbmcgaXQgaXMgc3RyaWN0bHkgYmV0dGVyXG4gICAgICAvLyB0aGFuIGNyYXNoaW5nIGV2ZXJ5IGNvbW1hbmQuXG4gICAgICB0cnkge1xuICAgICAgICBmcy51bmxpbmtTeW5jKGZpbGVQYXRoKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBHaXZlIHVwIHNpbGVudGx5IGFuZCBsZXQgQ29uZiB0aHJvdyBpZiBpdCBtdXN0LlxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgQ29uZjxTZW5kbHlDb25maWc+KHtcbiAgICBwcm9qZWN0TmFtZTogXCJzZW5kbHlcIixcbiAgICBjd2Q6IENPTkZJR19ESVIsXG4gICAgY29uZmlnTmFtZTogXCJjb25maWdcIixcbiAgICBkZWZhdWx0czogREVGQVVMVF9DT05GSUcsXG4gICAgZW5jcnlwdGlvbktleTogbmV3S2V5LFxuICB9KTtcbn1cblxuY29uc3QgY29uZmlnID0gaW5pdGlhbGl6ZUNvbmZpZygpO1xuXG4vKipcbiAqIEdldCBlZmZlY3RpdmUgY29uZmlnIHZhbHVlIHdpdGggZW52aXJvbm1lbnQgdmFyaWFibGUgb3ZlcnJpZGVcbiAqIFByaW9yaXR5OiBlbnYgdmFyID4gY29uZmlnIGZpbGUgPiBkZWZhdWx0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFZmZlY3RpdmVWYWx1ZTxLIGV4dGVuZHMga2V5b2YgU2VuZGx5Q29uZmlnPihcbiAga2V5OiBLLFxuKTogU2VuZGx5Q29uZmlnW0tdIHtcbiAgLy8gRW52aXJvbm1lbnQgdmFyaWFibGUgb3ZlcnJpZGVzXG4gIHN3aXRjaCAoa2V5KSB7XG4gICAgY2FzZSBcImFwaUtleVwiOlxuICAgICAgaWYgKHByb2Nlc3MuZW52LlNFTkRMWV9BUElfS0VZKSB7XG4gICAgICAgIHJldHVybiBwcm9jZXNzLmVudi5TRU5ETFlfQVBJX0tFWSBhcyBTZW5kbHlDb25maWdbS107XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiYmFzZVVybFwiOlxuICAgICAgaWYgKHByb2Nlc3MuZW52LlNFTkRMWV9CQVNFX1VSTCkge1xuICAgICAgICByZXR1cm4gcHJvY2Vzcy5lbnYuU0VORExZX0JBU0VfVVJMIGFzIFNlbmRseUNvbmZpZ1tLXTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJkZWZhdWx0Rm9ybWF0XCI6XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuU0VORExZX09VVFBVVF9GT1JNQVQpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gcHJvY2Vzcy5lbnYuU0VORExZX09VVFBVVF9GT1JNQVQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gXCJqc29uXCIgfHwgZm9ybWF0ID09PSBcImh1bWFuXCIpIHtcbiAgICAgICAgICByZXR1cm4gZm9ybWF0IGFzIFNlbmRseUNvbmZpZ1tLXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImNvbG9yRW5hYmxlZFwiOlxuICAgICAgaWYgKGlzQ29sb3JEaXNhYmxlZCgpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZSBhcyBTZW5kbHlDb25maWdbS107XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwidGltZW91dFwiOlxuICAgICAgaWYgKHByb2Nlc3MuZW52LlNFTkRMWV9USU1FT1VUKSB7XG4gICAgICAgIGNvbnN0IHRpbWVvdXQgPSBwYXJzZUludChwcm9jZXNzLmVudi5TRU5ETFlfVElNRU9VVCwgMTApO1xuICAgICAgICBpZiAoIWlzTmFOKHRpbWVvdXQpICYmIHRpbWVvdXQgPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIHRpbWVvdXQgYXMgU2VuZGx5Q29uZmlnW0tdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwibWF4UmV0cmllc1wiOlxuICAgICAgaWYgKHByb2Nlc3MuZW52LlNFTkRMWV9NQVhfUkVUUklFUykge1xuICAgICAgICBjb25zdCByZXRyaWVzID0gcGFyc2VJbnQocHJvY2Vzcy5lbnYuU0VORExZX01BWF9SRVRSSUVTLCAxMCk7XG4gICAgICAgIGlmICghaXNOYU4ocmV0cmllcykgJiYgcmV0cmllcyA+PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIHJldHJpZXMgYXMgU2VuZGx5Q29uZmlnW0tdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiY3VycmVudE9yZ0lkXCI6XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuU0VORExZX09SR19JRCkge1xuICAgICAgICByZXR1cm4gcHJvY2Vzcy5lbnYuU0VORExZX09SR19JRCBhcyBTZW5kbHlDb25maWdbS107XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgfVxuXG4gIC8vIEZhbGwgYmFjayB0byBjb25maWcgZmlsZSB2YWx1ZVxuICByZXR1cm4gY29uZmlnLmdldChrZXkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29uZmlnKCk6IFNlbmRseUNvbmZpZyB7XG4gIHJldHVybiBjb25maWcuc3RvcmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRDb25maWc8SyBleHRlbmRzIGtleW9mIFNlbmRseUNvbmZpZz4oXG4gIGtleTogSyxcbiAgdmFsdWU6IFNlbmRseUNvbmZpZ1tLXSxcbik6IHZvaWQge1xuICBjb25maWcuc2V0KGtleSwgdmFsdWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29uZmlnVmFsdWU8SyBleHRlbmRzIGtleW9mIFNlbmRseUNvbmZpZz4oXG4gIGtleTogSyxcbik6IFNlbmRseUNvbmZpZ1tLXSB7XG4gIHJldHVybiBjb25maWcuZ2V0KGtleSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhckNvbmZpZygpOiB2b2lkIHtcbiAgY29uZmlnLmNsZWFyKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhckF1dGgoKTogdm9pZCB7XG4gIGNvbmZpZy5kZWxldGUoXCJhcGlLZXlcIik7XG4gIGNvbmZpZy5kZWxldGUoXCJhY2Nlc3NUb2tlblwiKTtcbiAgY29uZmlnLmRlbGV0ZShcInJlZnJlc2hUb2tlblwiKTtcbiAgY29uZmlnLmRlbGV0ZShcInRva2VuRXhwaXJlc0F0XCIpO1xuICBjb25maWcuZGVsZXRlKFwidXNlcklkXCIpO1xuICBjb25maWcuZGVsZXRlKFwiZW1haWxcIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0F1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbiB7XG4gIC8vIENoZWNrIGVudiB2YXIgZmlyc3RcbiAgaWYgKHByb2Nlc3MuZW52LlNFTkRMWV9BUElfS0VZKSByZXR1cm4gdHJ1ZTtcblxuICBjb25zdCBhcGlLZXkgPSBjb25maWcuZ2V0KFwiYXBpS2V5XCIpO1xuICBjb25zdCBhY2Nlc3NUb2tlbiA9IGNvbmZpZy5nZXQoXCJhY2Nlc3NUb2tlblwiKTtcbiAgcmV0dXJuICEhKGFwaUtleSB8fCBhY2Nlc3NUb2tlbik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBdXRoVG9rZW4oKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgLy8gRW52aXJvbm1lbnQgdmFyaWFibGUgdGFrZXMgaGlnaGVzdCBwcmVjZWRlbmNlXG4gIGlmIChwcm9jZXNzLmVudi5TRU5ETFlfQVBJX0tFWSkge1xuICAgIHJldHVybiBwcm9jZXNzLmVudi5TRU5ETFlfQVBJX0tFWTtcbiAgfVxuXG4gIC8vIFRoZW4gc3RvcmVkIEFQSSBrZXlcbiAgY29uc3QgYXBpS2V5ID0gY29uZmlnLmdldChcImFwaUtleVwiKTtcbiAgaWYgKGFwaUtleSkgcmV0dXJuIGFwaUtleTtcblxuICAvLyBGaW5hbGx5LCBhY2Nlc3MgdG9rZW4gKGlmIG5vdCBleHBpcmVkKVxuICBjb25zdCBhY2Nlc3NUb2tlbiA9IGNvbmZpZy5nZXQoXCJhY2Nlc3NUb2tlblwiKTtcbiAgY29uc3QgZXhwaXJlc0F0ID0gY29uZmlnLmdldChcInRva2VuRXhwaXJlc0F0XCIpO1xuXG4gIGlmIChhY2Nlc3NUb2tlbiAmJiBleHBpcmVzQXQgJiYgRGF0ZS5ub3coKSA8IGV4cGlyZXNBdCkge1xuICAgIHJldHVybiBhY2Nlc3NUb2tlbjtcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdG9yZWRBY2Nlc3NUb2tlbigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gY29uZmlnLmdldChcImFjY2Vzc1Rva2VuXCIpIHx8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEFwaUtleShhcGlLZXk6IHN0cmluZyk6IHZvaWQge1xuICAvLyBWYWxpZGF0ZSBBUEkga2V5IGZvcm1hdFxuICBpZiAoIS9ec2tfKHRlc3R8bGl2ZSlfdjFfW2EtekEtWjAtOV8tXSskLy50ZXN0KGFwaUtleSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIkludmFsaWQgQVBJIGtleSBmb3JtYXQuIEV4cGVjdGVkIHNrX3Rlc3RfdjFfeHh4IG9yIHNrX2xpdmVfdjFfeHh4XCIsXG4gICAgKTtcbiAgfVxuXG4gIGNvbmZpZy5zZXQoXCJhcGlLZXlcIiwgYXBpS2V5KTtcblxuICAvLyBTZXQgZW52aXJvbm1lbnQgYmFzZWQgb24ga2V5IHR5cGVcbiAgaWYgKGFwaUtleS5zdGFydHNXaXRoKFwic2tfdGVzdF9cIikpIHtcbiAgICBjb25maWcuc2V0KFwiZW52aXJvbm1lbnRcIiwgXCJ0ZXN0XCIpO1xuICB9IGVsc2Uge1xuICAgIGNvbmZpZy5zZXQoXCJlbnZpcm9ubWVudFwiLCBcImxpdmVcIik7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEF1dGhUb2tlbnMoXG4gIGFjY2Vzc1Rva2VuOiBzdHJpbmcsXG4gIHJlZnJlc2hUb2tlbjogc3RyaW5nLFxuICBleHBpcmVzSW46IG51bWJlcixcbiAgdXNlcklkOiBzdHJpbmcsXG4gIGVtYWlsOiBzdHJpbmcsXG4pOiB2b2lkIHtcbiAgY29uZmlnLnNldChcImFjY2Vzc1Rva2VuXCIsIGFjY2Vzc1Rva2VuKTtcbiAgY29uZmlnLnNldChcInJlZnJlc2hUb2tlblwiLCByZWZyZXNoVG9rZW4pO1xuICBjb25maWcuc2V0KFwidG9rZW5FeHBpcmVzQXRcIiwgRGF0ZS5ub3coKSArIGV4cGlyZXNJbiAqIDEwMDApO1xuICBjb25maWcuc2V0KFwidXNlcklkXCIsIHVzZXJJZCk7XG4gIGNvbmZpZy5zZXQoXCJlbWFpbFwiLCBlbWFpbCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25maWdQYXRoKCk6IHN0cmluZyB7XG4gIHJldHVybiBwYXRoLmpvaW4oQ09ORklHX0RJUiwgQ09ORklHX0ZJTEUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29uZmlnRGlyKCk6IHN0cmluZyB7XG4gIHJldHVybiBDT05GSUdfRElSO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0Q3VycmVudE9yZyhpZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHNsdWc/OiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uZmlnLnNldChcImN1cnJlbnRPcmdJZFwiLCBpZCk7XG4gIGNvbmZpZy5zZXQoXCJjdXJyZW50T3JnTmFtZVwiLCBuYW1lKTtcbiAgaWYgKHNsdWcpIGNvbmZpZy5zZXQoXCJjdXJyZW50T3JnU2x1Z1wiLCBzbHVnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEN1cnJlbnRPcmcoKToge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIHNsdWc/OiBzdHJpbmc7XG59IHwgbnVsbCB7XG4gIGNvbnN0IGlkID0gZ2V0RWZmZWN0aXZlVmFsdWUoXCJjdXJyZW50T3JnSWRcIik7XG4gIGNvbnN0IG5hbWUgPSBjb25maWcuZ2V0KFwiY3VycmVudE9yZ05hbWVcIik7XG4gIGlmICghaWQpIHJldHVybiBudWxsO1xuICByZXR1cm4geyBpZCwgbmFtZTogbmFtZSB8fCBpZCwgc2x1ZzogY29uZmlnLmdldChcImN1cnJlbnRPcmdTbHVnXCIpIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhckN1cnJlbnRPcmcoKTogdm9pZCB7XG4gIGNvbmZpZy5kZWxldGUoXCJjdXJyZW50T3JnSWRcIik7XG4gIGNvbmZpZy5kZWxldGUoXCJjdXJyZW50T3JnTmFtZVwiKTtcbiAgY29uZmlnLmRlbGV0ZShcImN1cnJlbnRPcmdTbHVnXCIpO1xufVxuXG5leHBvcnQgeyBjb25maWcgfTtcbiJdfQ==
|