create-pylon 1.0.2 → 1.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +156 -156
- package/package.json +1 -1
- package/templates/bun/default/package.json +1 -1
- package/templates/bun/default/tsconfig.json +2 -1
- package/templates/cf-workers/default/package.json +1 -1
- package/templates/cf-workers/default/tsconfig.json +1 -1
- package/templates/node/default/package.json +1 -1
- package/templates/shared/pylon.d.ts +7 -0
- package/templates/shared/tsconfig.json +2 -1
package/dist/index.js
CHANGED
|
@@ -11,6 +11,13 @@ import * as fs from "fs";
|
|
|
11
11
|
import * as telemetry from "@getcronit/pylon-telemetry";
|
|
12
12
|
import { fileURLToPath } from "url";
|
|
13
13
|
import { dirname } from "path";
|
|
14
|
+
import { detect } from "detect-package-manager";
|
|
15
|
+
import { spawnSync } from "child_process";
|
|
16
|
+
var __filename2 = fileURLToPath(import.meta.url);
|
|
17
|
+
var __dirname2 = dirname(__filename2);
|
|
18
|
+
var version = (() => {
|
|
19
|
+
return JSON.parse(fs.readFileSync(path.join(__dirname2, "..", "package.json"), "utf-8")).version;
|
|
20
|
+
})();
|
|
14
21
|
function mkdirp(dir) {
|
|
15
22
|
try {
|
|
16
23
|
fs.mkdirSync(dir, { recursive: true });
|
|
@@ -22,160 +29,6 @@ function mkdirp(dir) {
|
|
|
22
29
|
throw e;
|
|
23
30
|
}
|
|
24
31
|
}
|
|
25
|
-
import { detect } from "detect-package-manager";
|
|
26
|
-
import { spawnSync } from "child_process";
|
|
27
|
-
async function main(targetDir, options, command) {
|
|
28
|
-
try {
|
|
29
|
-
consola.log(`${command.name()} version ${command.version()}`);
|
|
30
|
-
const {
|
|
31
|
-
install: installArg,
|
|
32
|
-
runtime: runtimeArg,
|
|
33
|
-
template: templateArg,
|
|
34
|
-
packageManager: packageManagerArg,
|
|
35
|
-
client: clientArg,
|
|
36
|
-
clientPath: clientPathArg,
|
|
37
|
-
clientPort: clientPortArg
|
|
38
|
-
} = options;
|
|
39
|
-
let target = "";
|
|
40
|
-
if (targetDir) {
|
|
41
|
-
target = targetDir;
|
|
42
|
-
consola.success(`Using target directory \u2026 ${target}`);
|
|
43
|
-
} else {
|
|
44
|
-
const answer = await input({
|
|
45
|
-
message: "Target directory",
|
|
46
|
-
default: "my-pylon"
|
|
47
|
-
});
|
|
48
|
-
target = answer;
|
|
49
|
-
}
|
|
50
|
-
let projectName = "";
|
|
51
|
-
if (target === ".") {
|
|
52
|
-
projectName = path.basename(process.cwd());
|
|
53
|
-
} else {
|
|
54
|
-
projectName = path.basename(target);
|
|
55
|
-
}
|
|
56
|
-
const runtimeName = runtimeArg || await select({
|
|
57
|
-
message: "Which runtime would you like to use?",
|
|
58
|
-
choices: runtimes.map((runtime2) => ({
|
|
59
|
-
name: `${runtime2.name} (${runtime2.website})`,
|
|
60
|
-
value: runtime2.key
|
|
61
|
-
})),
|
|
62
|
-
default: 0
|
|
63
|
-
});
|
|
64
|
-
if (!runtimeName) {
|
|
65
|
-
throw new Error("No runtime selected");
|
|
66
|
-
}
|
|
67
|
-
const runtime = runtimes.find(({ key }) => key === runtimeName);
|
|
68
|
-
if (!runtime) {
|
|
69
|
-
throw new Error(`Invalid runtime selected: ${runtimeName}`);
|
|
70
|
-
}
|
|
71
|
-
const templateName = templateArg || await select({
|
|
72
|
-
message: "Which template would you like to use?",
|
|
73
|
-
choices: templates.filter((template) => runtime.templates?.includes(template.key)).map((template) => ({
|
|
74
|
-
name: template.name,
|
|
75
|
-
value: template.key
|
|
76
|
-
})),
|
|
77
|
-
default: 0
|
|
78
|
-
});
|
|
79
|
-
if (!templateName) {
|
|
80
|
-
throw new Error("No template selected");
|
|
81
|
-
}
|
|
82
|
-
if (fs.existsSync(target)) {
|
|
83
|
-
if (fs.readdirSync(target).length > 0) {
|
|
84
|
-
const response = await confirm({
|
|
85
|
-
message: "Directory not empty. Continue?",
|
|
86
|
-
default: false
|
|
87
|
-
});
|
|
88
|
-
if (!response) {
|
|
89
|
-
process.exit(1);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
} else {
|
|
93
|
-
mkdirp(target);
|
|
94
|
-
}
|
|
95
|
-
const install = installArg || await confirm({ message: "Would you like to install dependencies?" });
|
|
96
|
-
await createTemplate({
|
|
97
|
-
name: projectName,
|
|
98
|
-
runtime: runtimeName,
|
|
99
|
-
template: templateName,
|
|
100
|
-
target
|
|
101
|
-
});
|
|
102
|
-
let packageManager = packageManagerArg;
|
|
103
|
-
if (runtimeName === "bun" && !packageManager) {
|
|
104
|
-
packageManager = "bun";
|
|
105
|
-
}
|
|
106
|
-
if (install) {
|
|
107
|
-
await installDependencies({ target, packageManager });
|
|
108
|
-
}
|
|
109
|
-
const client = clientArg || await confirm({
|
|
110
|
-
message: "Would you like to enable client generation? (https://pylon.cronit.io/docs/integrations/gqty)",
|
|
111
|
-
default: false
|
|
112
|
-
});
|
|
113
|
-
let clientRoot = "";
|
|
114
|
-
let clientPath = "";
|
|
115
|
-
let clientPort = "";
|
|
116
|
-
if (client) {
|
|
117
|
-
if (!clientPathArg) {
|
|
118
|
-
clientRoot = await input({
|
|
119
|
-
message: "Path to the root where the client should be generated",
|
|
120
|
-
default: "."
|
|
121
|
-
});
|
|
122
|
-
clientPath = await input({
|
|
123
|
-
message: "Path to generate the client to",
|
|
124
|
-
default: path.join(clientRoot, "gqty/index.ts"),
|
|
125
|
-
validate: (value) => {
|
|
126
|
-
if (!value.startsWith(clientRoot === "." ? "" : clientRoot)) {
|
|
127
|
-
return "Path must start with the client root";
|
|
128
|
-
}
|
|
129
|
-
return true;
|
|
130
|
-
}
|
|
131
|
-
});
|
|
132
|
-
}
|
|
133
|
-
clientPort = clientPortArg || await input({
|
|
134
|
-
message: "Port of the pylon server to generate the client from",
|
|
135
|
-
default: "3000"
|
|
136
|
-
});
|
|
137
|
-
consola.start(`Updating pylon dev script to generate client`);
|
|
138
|
-
const devScriptPath = path.join(target, "package.json");
|
|
139
|
-
const devScript = JSON.parse(fs.readFileSync(devScriptPath, "utf-8"));
|
|
140
|
-
devScript.scripts = {
|
|
141
|
-
...devScript.scripts,
|
|
142
|
-
dev: devScript.scripts.dev + ` --client --client-port ${clientPort} --client-path ${clientPath}`
|
|
143
|
-
};
|
|
144
|
-
fs.writeFileSync(devScriptPath, JSON.stringify(devScript, null, 2));
|
|
145
|
-
consola.success(`Pylon dev script updated`);
|
|
146
|
-
}
|
|
147
|
-
const message = `
|
|
148
|
-
\uD83C\uDF89 ${chalk.green.bold("Pylon created successfully.")}
|
|
149
|
-
|
|
150
|
-
\uD83D\uDCBB ${chalk.cyan.bold("Continue Developing")}
|
|
151
|
-
${chalk.yellow("Change directories:")} cd ${chalk.blue(target)}
|
|
152
|
-
${chalk.yellow("Start dev server:")} npm run start
|
|
153
|
-
${chalk.yellow("Deploy:")} npm run deploy
|
|
154
|
-
|
|
155
|
-
\uD83D\uDCD6 ${chalk.cyan.bold("Explore Documentation")}
|
|
156
|
-
${chalk.underline.blue("https://pylon.cronit.io/docs")}
|
|
157
|
-
|
|
158
|
-
\uD83D\uDCAC ${chalk.cyan.bold("Join our Community")}
|
|
159
|
-
${chalk.underline.blue("https://discord.gg/cbJjkVrnHe")}
|
|
160
|
-
`;
|
|
161
|
-
await telemetry.sendCreateEvent({
|
|
162
|
-
name: projectName,
|
|
163
|
-
pylonCreateVersion: version,
|
|
164
|
-
runtime: runtimeName,
|
|
165
|
-
template: templateName,
|
|
166
|
-
clientPath: clientPath || undefined,
|
|
167
|
-
clientPort: parseInt(clientPort) || undefined
|
|
168
|
-
});
|
|
169
|
-
consola.box(message);
|
|
170
|
-
} catch (e) {
|
|
171
|
-
consola.error(e);
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
var __filename2 = fileURLToPath(import.meta.url);
|
|
175
|
-
var __dirname2 = dirname(__filename2);
|
|
176
|
-
var version = (() => {
|
|
177
|
-
return JSON.parse(fs.readFileSync(path.join(__dirname2, "..", "package.json"), "utf-8")).version;
|
|
178
|
-
})();
|
|
179
32
|
var runtimes = [
|
|
180
33
|
{
|
|
181
34
|
key: "bun",
|
|
@@ -332,7 +185,154 @@ var installDependencies = async (args) => {
|
|
|
332
185
|
consola.success(`Dependencies installed`);
|
|
333
186
|
};
|
|
334
187
|
program.name("create-pylon").version(version).arguments("[target]").addOption(new Option("-i, --install", "Install dependencies")).addOption(new Option("-r, --runtime <runtime>", "Runtime").choices(runtimes.map(({ key }) => key))).addOption(new Option("-t, --template <template>", "Template")).addOption(new Option("-pm, --package-manager <packageManager>", "Package manager")).addOption(new Option("--client", "Enable client generation (https://pylon.cronit.io/docs/integrations/gqty)")).addOption(new Option("--client-path <clientPath>", "Client path")).addOption(new Option("--client-port <clientPort>", "Client port")).action(main);
|
|
188
|
+
async function main(targetDir, options, command) {
|
|
189
|
+
try {
|
|
190
|
+
consola.log(`${command.name()} version ${command.version()}`);
|
|
191
|
+
const {
|
|
192
|
+
install: installArg,
|
|
193
|
+
runtime: runtimeArg,
|
|
194
|
+
template: templateArg,
|
|
195
|
+
packageManager: packageManagerArg,
|
|
196
|
+
client: clientArg,
|
|
197
|
+
clientPath: clientPathArg,
|
|
198
|
+
clientPort: clientPortArg
|
|
199
|
+
} = options;
|
|
200
|
+
let target = "";
|
|
201
|
+
if (targetDir) {
|
|
202
|
+
target = targetDir;
|
|
203
|
+
consola.success(`Using target directory \u2026 ${target}`);
|
|
204
|
+
} else {
|
|
205
|
+
const answer = await input({
|
|
206
|
+
message: "Target directory",
|
|
207
|
+
default: "my-pylon"
|
|
208
|
+
});
|
|
209
|
+
target = answer;
|
|
210
|
+
}
|
|
211
|
+
let projectName = "";
|
|
212
|
+
if (target === ".") {
|
|
213
|
+
projectName = path.basename(process.cwd());
|
|
214
|
+
} else {
|
|
215
|
+
projectName = path.basename(target);
|
|
216
|
+
}
|
|
217
|
+
const runtimeName = runtimeArg || await select({
|
|
218
|
+
message: "Which runtime would you like to use?",
|
|
219
|
+
choices: runtimes.map((runtime2) => ({
|
|
220
|
+
name: `${runtime2.name} (${runtime2.website})`,
|
|
221
|
+
value: runtime2.key
|
|
222
|
+
})),
|
|
223
|
+
default: 0
|
|
224
|
+
});
|
|
225
|
+
if (!runtimeName) {
|
|
226
|
+
throw new Error("No runtime selected");
|
|
227
|
+
}
|
|
228
|
+
const runtime = runtimes.find(({ key }) => key === runtimeName);
|
|
229
|
+
if (!runtime) {
|
|
230
|
+
throw new Error(`Invalid runtime selected: ${runtimeName}`);
|
|
231
|
+
}
|
|
232
|
+
const templateName = templateArg || await select({
|
|
233
|
+
message: "Which template would you like to use?",
|
|
234
|
+
choices: templates.filter((template) => runtime.templates?.includes(template.key)).map((template) => ({
|
|
235
|
+
name: template.name,
|
|
236
|
+
value: template.key
|
|
237
|
+
})),
|
|
238
|
+
default: 0
|
|
239
|
+
});
|
|
240
|
+
if (!templateName) {
|
|
241
|
+
throw new Error("No template selected");
|
|
242
|
+
}
|
|
243
|
+
if (fs.existsSync(target)) {
|
|
244
|
+
if (fs.readdirSync(target).length > 0) {
|
|
245
|
+
const response = await confirm({
|
|
246
|
+
message: "Directory not empty. Continue?",
|
|
247
|
+
default: false
|
|
248
|
+
});
|
|
249
|
+
if (!response) {
|
|
250
|
+
process.exit(1);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
} else {
|
|
254
|
+
mkdirp(target);
|
|
255
|
+
}
|
|
256
|
+
const install = installArg || await confirm({ message: "Would you like to install dependencies?" });
|
|
257
|
+
await createTemplate({
|
|
258
|
+
name: projectName,
|
|
259
|
+
runtime: runtimeName,
|
|
260
|
+
template: templateName,
|
|
261
|
+
target
|
|
262
|
+
});
|
|
263
|
+
let packageManager = packageManagerArg;
|
|
264
|
+
if (runtimeName === "bun" && !packageManager) {
|
|
265
|
+
packageManager = "bun";
|
|
266
|
+
}
|
|
267
|
+
if (install) {
|
|
268
|
+
await installDependencies({ target, packageManager });
|
|
269
|
+
}
|
|
270
|
+
const client = clientArg || await confirm({
|
|
271
|
+
message: "Would you like to enable client generation? (https://pylon.cronit.io/docs/integrations/gqty)",
|
|
272
|
+
default: false
|
|
273
|
+
});
|
|
274
|
+
let clientRoot = "";
|
|
275
|
+
let clientPath = "";
|
|
276
|
+
let clientPort = "";
|
|
277
|
+
if (client) {
|
|
278
|
+
if (!clientPathArg) {
|
|
279
|
+
clientRoot = await input({
|
|
280
|
+
message: "Path to the root where the client should be generated",
|
|
281
|
+
default: "."
|
|
282
|
+
});
|
|
283
|
+
clientPath = await input({
|
|
284
|
+
message: "Path to generate the client to",
|
|
285
|
+
default: path.join(clientRoot, "gqty/index.ts"),
|
|
286
|
+
validate: (value) => {
|
|
287
|
+
if (!value.startsWith(clientRoot === "." ? "" : clientRoot)) {
|
|
288
|
+
return "Path must start with the client root";
|
|
289
|
+
}
|
|
290
|
+
return true;
|
|
291
|
+
}
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
clientPort = clientPortArg || await input({
|
|
295
|
+
message: "Port of the pylon server to generate the client from",
|
|
296
|
+
default: "3000"
|
|
297
|
+
});
|
|
298
|
+
consola.start(`Updating pylon dev script to generate client`);
|
|
299
|
+
const devScriptPath = path.join(target, "package.json");
|
|
300
|
+
const devScript = JSON.parse(fs.readFileSync(devScriptPath, "utf-8"));
|
|
301
|
+
devScript.scripts = {
|
|
302
|
+
...devScript.scripts,
|
|
303
|
+
dev: devScript.scripts.dev + ` --client --client-port ${clientPort} --client-path ${clientPath}`
|
|
304
|
+
};
|
|
305
|
+
fs.writeFileSync(devScriptPath, JSON.stringify(devScript, null, 2));
|
|
306
|
+
consola.success(`Pylon dev script updated`);
|
|
307
|
+
}
|
|
308
|
+
const message = `
|
|
309
|
+
\uD83C\uDF89 ${chalk.green.bold("Pylon created successfully.")}
|
|
310
|
+
|
|
311
|
+
\uD83D\uDCBB ${chalk.cyan.bold("Continue Developing")}
|
|
312
|
+
${chalk.yellow("Change directories:")} cd ${chalk.blue(target)}
|
|
313
|
+
${chalk.yellow("Start dev server:")} npm run start
|
|
314
|
+
${chalk.yellow("Deploy:")} npm run deploy
|
|
315
|
+
|
|
316
|
+
\uD83D\uDCD6 ${chalk.cyan.bold("Explore Documentation")}
|
|
317
|
+
${chalk.underline.blue("https://pylon.cronit.io/docs")}
|
|
318
|
+
|
|
319
|
+
\uD83D\uDCAC ${chalk.cyan.bold("Join our Community")}
|
|
320
|
+
${chalk.underline.blue("https://discord.gg/cbJjkVrnHe")}
|
|
321
|
+
`;
|
|
322
|
+
await telemetry.sendCreateEvent({
|
|
323
|
+
name: projectName,
|
|
324
|
+
pylonCreateVersion: version,
|
|
325
|
+
runtime: runtimeName,
|
|
326
|
+
template: templateName,
|
|
327
|
+
clientPath: clientPath || undefined,
|
|
328
|
+
clientPort: parseInt(clientPort) || undefined
|
|
329
|
+
});
|
|
330
|
+
consola.box(message);
|
|
331
|
+
} catch (e) {
|
|
332
|
+
consola.error(e);
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
335
|
program.parse();
|
|
336
336
|
|
|
337
|
-
//# debugId=
|
|
338
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgIiMhL3Vzci9iaW4vZW52IG5vZGVcblxuaW1wb3J0IHtPcHRpb24sIHByb2dyYW0sIHR5cGUgQ29tbWFuZH0gZnJvbSAnY29tbWFuZGVyJ1xuaW1wb3J0IGNvbnNvbGEgZnJvbSAnY29uc29sYSdcbmltcG9ydCB7aW5wdXQsIHNlbGVjdCwgY29uZmlybX0gZnJvbSAnQGlucXVpcmVyL3Byb21wdHMnXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJ1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnXG5cbmltcG9ydCAqIGFzIHRlbGVtZXRyeSBmcm9tICdAZ2V0Y3Jvbml0L3B5bG9uLXRlbGVtZXRyeSdcblxuaW1wb3J0IHtmaWxlVVJMVG9QYXRofSBmcm9tICd1cmwnXG5pbXBvcnQge2Rpcm5hbWV9IGZyb20gJ3BhdGgnXG5cbmNvbnN0IF9fZmlsZW5hbWUgPSBmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybClcbmNvbnN0IF9fZGlybmFtZSA9IGRpcm5hbWUoX19maWxlbmFtZSlcblxuY29uc3QgdmVyc2lvbiA9ICgoKSA9PiB7XG4gIHJldHVybiBKU09OLnBhcnNlKFxuICAgIGZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4nLCAncGFja2FnZS5qc29uJyksICd1dGYtOCcpXG4gICkudmVyc2lvbiBhcyBzdHJpbmdcbn0pKClcblxuZnVuY3Rpb24gbWtkaXJwKGRpcjogc3RyaW5nKSB7XG4gIHRyeSB7XG4gICAgZnMubWtkaXJTeW5jKGRpciwge3JlY3Vyc2l2ZTogdHJ1ZX0pXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICBpZiAoJ2NvZGUnIGluIGUgJiYgZS5jb2RlID09PSAnRUVYSVNUJykgcmV0dXJuXG4gICAgfVxuICAgIHRocm93IGVcbiAgfVxufVxuXG5jb25zdCBydW50aW1lczoge1xuICBrZXk6IHN0cmluZ1xuICBuYW1lOiBzdHJpbmdcbiAgd2Vic2l0ZTogc3RyaW5nXG4gIHRlbXBsYXRlcz86IHN0cmluZ1tdXG59W10gPSBbXG4gIHtcbiAgICBrZXk6ICdidW4nLFxuICAgIG5hbWU6ICdCdW4uanMnLFxuICAgIHdlYnNpdGU6ICdodHRwczovL2J1bmpzLmRldicsXG4gICAgdGVtcGxhdGVzOiBbJ2RlZmF1bHQnXVxuICB9LFxuICB7XG4gICAga2V5OiAnbm9kZScsXG4gICAgbmFtZTogJ05vZGUuanMnLFxuICAgIHdlYnNpdGU6ICdodHRwczovL25vZGVqcy5vcmcnLFxuICAgIHRlbXBsYXRlczogWydkZWZhdWx0J11cbiAgfSxcbiAge1xuICAgIGtleTogJ2NmLXdvcmtlcnMnLFxuICAgIG5hbWU6ICdDbG91ZGZsYXJlIFdvcmtlcnMnLFxuICAgIHdlYnNpdGU6ICdodHRwczovL3dvcmtlcnMuY2xvdWRmbGFyZS5jb20nLFxuICAgIHRlbXBsYXRlczogWydkZWZhdWx0J11cbiAgfVxuXVxuXG5jb25zdCB0ZW1wbGF0ZXM6IHtcbiAga2V5OiBzdHJpbmdcbiAgbmFtZTogc3RyaW5nXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmdcbn1bXSA9IFtcbiAge1xuICAgIGtleTogJ2RlZmF1bHQnLFxuICAgIG5hbWU6ICdEZWZhdWx0JyxcbiAgICBkZXNjcmlwdGlvbjogJ0RlZmF1bHQgdGVtcGxhdGUnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdkYXRhYmFzZScsXG4gICAgbmFtZTogJ0RhdGFiYXNlIChQcmlzbWEpJyxcbiAgICBkZXNjcmlwdGlvbjogJ1RlbXBsYXRlIHdpdGggUHJpc21hIE9STSdcbiAgfVxuXVxuXG5jb25zdCBpbmplY3RWYXJpYWJsZXNJbkNvbnRlbnQgPSAoXG4gIGNvbnRlbnQ6IHN0cmluZyxcbiAgdmFyaWFibGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4pID0+IHtcbiAgbGV0IHJlc3VsdCA9IGNvbnRlbnRcblxuICBPYmplY3QuZW50cmllcyh2YXJpYWJsZXMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlQWxsKGtleSwgdmFsdWUpXG4gIH0pXG5cbiAgcmV0dXJuIHJlc3VsdFxufVxuY29uc3QgcmVhZGRpckZpbGVzU3luY1JlY3Vyc2l2ZSA9IChkaXI6IHN0cmluZyk6IHN0cmluZ1tdID0+IHtcbiAgY29uc3QgcnVuID0gKGRpcjogc3RyaW5nKTogc3RyaW5nW10gPT4ge1xuICAgIGNvbnN0IHJlc3VsdDogc3RyaW5nW10gPSBbXVxuXG4gICAgY29uc3QgZmlsZXMgPSBmcy5yZWFkZGlyU3luYyhkaXIpXG5cbiAgICBmaWxlcy5mb3JFYWNoKGZpbGUgPT4ge1xuICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4oZGlyLCBmaWxlKVxuXG4gICAgICBpZiAoZnMuc3RhdFN5bmMoZmlsZVBhdGgpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goLi4ucnVuKGZpbGVQYXRoKSlcbiAgICAgIH1cblxuICAgICAgLy8gT25seSBhZGQgZmlsZXNcbiAgICAgIGlmIChmcy5zdGF0U3luYyhmaWxlUGF0aCkuaXNGaWxlKCkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goZmlsZVBhdGgpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIHJldHVybiBydW4oZGlyKS5tYXAoZmlsZSA9PiB7XG4gICAgcmV0dXJuIGZpbGUucmVwbGFjZShkaXIsICcuJylcbiAgfSlcbn1cblxuY29uc3QgY3JlYXRlVGVtcGxhdGUgPSBhc3luYyAob3B0aW9uczoge1xuICBuYW1lOiBzdHJpbmdcbiAgcnVudGltZTogc3RyaW5nXG4gIHRlbXBsYXRlOiBzdHJpbmdcbiAgdGFyZ2V0OiBzdHJpbmdcbn0pID0+IHtcbiAgY29uc3Qge3J1bnRpbWUsIHRlbXBsYXRlLCB0YXJnZXR9ID0gb3B0aW9uc1xuXG4gIGNvbnN0IHJ1bnRpbWVOYW1lID0gcnVudGltZXMuZmluZCgoe2tleX0pID0+IGtleSA9PT0gcnVudGltZSk/Lm5hbWVcbiAgY29uc3QgdGVtcGxhdGVOYW1lID0gdGVtcGxhdGVzLmZpbmQoKHtrZXl9KSA9PiBrZXkgPT09IHRlbXBsYXRlKT8ubmFtZVxuXG4gIGlmICghcnVudGltZU5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcnVudGltZTogJHtydW50aW1lfWApXG4gIH1cblxuICBpZiAoIXRlbXBsYXRlTmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0ZW1wbGF0ZTogJHt0ZW1wbGF0ZX1gKVxuICB9XG5cbiAgLy8gVGhlIHRlbXBsYXRlcyBhcmUgc3RvcmVkIGluIHRoZSBgdGVtcGxhdGVzYCBkaXJlY3RvcnlcbiAgY29uc3Qgc2hhcmVkVGVtcGxhdGVEaXIgPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4nLCAndGVtcGxhdGVzJywgJ3NoYXJlZCcpXG5cbiAgaWYgKCFmcy5leGlzdHNTeW5jKHNoYXJlZFRlbXBsYXRlRGlyKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgU2hhcmVkIHRlbXBsYXRlcyBub3QgZm91bmQ6ICR7c2hhcmVkVGVtcGxhdGVEaXJ9YClcbiAgfVxuXG4gIGNvbnN0IHRlbXBsYXRlRGlyID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJ3RlbXBsYXRlcycsIHJ1bnRpbWUsIHRlbXBsYXRlKVxuXG4gIGlmICghZnMuZXhpc3RzU3luYyh0ZW1wbGF0ZURpcikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRlbXBsYXRlIG5vdCBmb3VuZDogJHt0ZW1wbGF0ZURpcn1gKVxuICB9XG5cbiAgLy8gVGhlIHRhcmdldCBkaXJlY3RvcnkgaXMgYWxyZWFkeSBjcmVhdGVkXG4gIGNvbnN0IHRhcmdldERpcmVjdG9yeVBhdGggPSBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgdGFyZ2V0KVxuXG4gIGNvbnNvbGEuc3RhcnQoYENyZWF0aW5nIHB5bG9uIGluICR7dGFyZ2V0RGlyZWN0b3J5UGF0aH1gKVxuXG4gIGNvbnN0IGluamVjdCA9IChjb250ZW50OiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gaW5qZWN0VmFyaWFibGVzSW5Db250ZW50KGNvbnRlbnQsIHtcbiAgICAgIF9fUFlMT05fTkFNRV9fOiBvcHRpb25zLm5hbWVcbiAgICB9KVxuICB9XG5cbiAgLy8gQ29weSB0aGUgc2hhcmVkIHRlbXBsYXRlIGZpbGVzXG4gIHJlYWRkaXJGaWxlc1N5bmNSZWN1cnNpdmUoc2hhcmVkVGVtcGxhdGVEaXIpLmZvckVhY2goZmlsZSA9PiB7XG4gICAgY29uc3Qgc291cmNlID0gcGF0aC5qb2luKHNoYXJlZFRlbXBsYXRlRGlyLCBmaWxlKVxuICAgIGxldCB0YXJnZXQgPSBwYXRoLmpvaW4odGFyZ2V0RGlyZWN0b3J5UGF0aCwgZmlsZSlcblxuICAgIC8vIENyZWF0ZSBmb2xkZXIgcmVjdXJzaXZlbHkgYW5kIGNvcHkgZmlsZVxuXG4gICAgY29uc3QgdGFyZ2V0RGlyID0gcGF0aC5kaXJuYW1lKHRhcmdldClcblxuICAgIC8vIFNraXAgdGhlIC5naXRodWIvd29ya2Zsb3dzIGRpcmVjdG9yeSBmb3IgY2Ytd29ya2VycyBydW50aW1lXG4gICAgaWYgKFxuICAgICAgcnVudGltZSA9PT0gJ2NmLXdvcmtlcnMnICYmXG4gICAgICBzb3VyY2UuaW5jbHVkZXMoJy5naXRodWIvd29ya2Zsb3dzL3B1Ymxpc2gueWFtbCcpXG4gICAgKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIWZzLmV4aXN0c1N5bmModGFyZ2V0RGlyKSkge1xuICAgICAgZnMubWtkaXJTeW5jKHRhcmdldERpciwge3JlY3Vyc2l2ZTogdHJ1ZX0pXG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIHRhcmdldCBlbmRzIHdpdGggYC5leGFtcGxlYCwgcmVtb3ZlIHRoZSBzdWZmaXguXG4gICAgLy8gVGhpcyBpcyB1c2VmdWwgZm9yIGAuZ2l0aWdub3JlLmV4YW1wbGVgIGZpbGVzIGJlY2F1c2UgdGhleSBhcmUgbm90IHB1Ymxpc2hlZCBpblxuICAgIC8vIHRoZSBgY3JlYXRlLXB5bG9uYCBwYWNrYWdlIHdoZW4gbmFtZWQgYC5naXRpZ25vcmVgLlxuICAgIGlmICh0YXJnZXQuZW5kc1dpdGgoJy5leGFtcGxlJykpIHtcbiAgICAgIHRhcmdldCA9IHRhcmdldC5yZXBsYWNlKCcuZXhhbXBsZScsICcnKVxuICAgIH1cblxuICAgIGNvbnN0IGluamVjdGVkQ29udGVudCA9IGluamVjdChmcy5yZWFkRmlsZVN5bmMoc291cmNlLCAndXRmLTgnKSlcblxuICAgIGZzLndyaXRlRmlsZVN5bmModGFyZ2V0LCBpbmplY3RlZENvbnRlbnQpXG4gIH0pXG5cbiAgLy8gQ29weSB0aGUgcnVudGltZSBzcGVjaWZpYyB0ZW1wbGF0ZSBmaWxlc1xuICByZWFkZGlyRmlsZXNTeW5jUmVjdXJzaXZlKHRlbXBsYXRlRGlyKS5mb3JFYWNoKGZpbGUgPT4ge1xuICAgIGNvbnN0IHNvdXJjZSA9IHBhdGguam9pbih0ZW1wbGF0ZURpciwgZmlsZSlcbiAgICBsZXQgdGFyZ2V0ID0gcGF0aC5qb2luKHRhcmdldERpcmVjdG9yeVBhdGgsIGZpbGUpXG5cbiAgICAvLyBDcmVhdGUgZm9sZGVyIHJlY3Vyc2l2ZWx5IGFuZCBjb3B5IGZpbGVcbiAgICBjb25zdCB0YXJnZXREaXIgPSBwYXRoLmRpcm5hbWUodGFyZ2V0KVxuXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHRhcmdldERpcikpIHtcbiAgICAgIGZzLm1rZGlyU3luYyh0YXJnZXREaXIsIHtyZWN1cnNpdmU6IHRydWV9KVxuICAgIH1cblxuICAgIC8vIElmIHRoZSB0YXJnZXQgZW5kcyB3aXRoIGAuZXhhbXBsZWAsIHJlbW92ZSB0aGUgc3VmZml4LlxuICAgIC8vIFRoaXMgaXMgdXNlZnVsIGZvciBgLmdpdGlnbm9yZS5leGFtcGxlYCBmaWxlcyBiZWNhdXNlIHRoZXkgYXJlIG5vdCBwdWJsaXNoZWQgaW5cbiAgICAvLyB0aGUgYGNyZWF0ZS1weWxvbmAgcGFja2FnZSB3aGVuIG5hbWVkIGAuZ2l0aWdub3JlYC5cbiAgICBpZiAodGFyZ2V0LmVuZHNXaXRoKCcuZXhhbXBsZScpKSB7XG4gICAgICB0YXJnZXQgPSB0YXJnZXQucmVwbGFjZSgnLmV4YW1wbGUnLCAnJylcbiAgICB9XG5cbiAgICBjb25zdCBpbmplY3RlZENvbnRlbnQgPSBpbmplY3QoZnMucmVhZEZpbGVTeW5jKHNvdXJjZSwgJ3V0Zi04JykpXG5cbiAgICBmcy53cml0ZUZpbGVTeW5jKHRhcmdldCwgaW5qZWN0ZWRDb250ZW50KVxuICB9KVxuXG4gIGNvbnNvbGEuc3VjY2VzcyhgUHlsb24gY3JlYXRlZGApXG59XG5cbmltcG9ydCB7ZGV0ZWN0fSBmcm9tICdkZXRlY3QtcGFja2FnZS1tYW5hZ2VyJ1xuaW1wb3J0IHtzcGF3blN5bmN9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnXG5cbmNvbnN0IGluc3RhbGxEZXBlbmRlbmNpZXMgPSBhc3luYyAoYXJnczoge1xuICB0YXJnZXQ6IHN0cmluZ1xuICBwYWNrYWdlTWFuYWdlcj86IHN0cmluZ1xufSkgPT4ge1xuICBjb25zdCB0YXJnZXQgPSBwYXRoLnJlc29sdmUoYXJncy50YXJnZXQpXG5cbiAgY29uc29sZS5sb2coJ3RhcmdldCcsIHRhcmdldClcblxuICBpZiAoIWFyZ3MucGFja2FnZU1hbmFnZXIpIHtcbiAgICBhcmdzLnBhY2thZ2VNYW5hZ2VyID0gYXdhaXQgZGV0ZWN0KHtcbiAgICAgIGN3ZDogdGFyZ2V0LFxuICAgICAgaW5jbHVkZUdsb2JhbEJ1bjogdHJ1ZVxuICAgIH0pXG4gIH1cblxuICBpZiAoIWFyZ3MucGFja2FnZU1hbmFnZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHBhY2thZ2UgbWFuYWdlciBmb3VuZCcpXG4gIH1cblxuICAvLyB5YXJuJywgJ25wbScsIG9yICdwbnBtJywgJ2J1bidcbiAgY29uc3Qge3BhY2thZ2VNYW5hZ2VyfSA9IGFyZ3NcblxuICBsZXQgY29tbWFuZCA9ICcnXG5cbiAgc3dpdGNoIChwYWNrYWdlTWFuYWdlcikge1xuICAgIGNhc2UgJ3lhcm4nOlxuICAgICAgY29tbWFuZCA9ICd5YXJuJ1xuICAgICAgYnJlYWtcbiAgICBjYXNlICducG0nOlxuICAgICAgY29tbWFuZCA9ICducG0gaW5zdGFsbCdcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAncG5wbSc6XG4gICAgICBjb21tYW5kID0gJ3BucG0gaW5zdGFsbCdcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAnYnVuJzpcbiAgICAgIGNvbW1hbmQgPSAnYnVuIGluc3RhbGwnXG4gICAgICBicmVha1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGFja2FnZSBtYW5hZ2VyOiAke3BhY2thZ2VNYW5hZ2VyfWApXG4gIH1cblxuICBjb25zb2xhLnN0YXJ0KGBJbnN0YWxsaW5nIGRlcGVuZGVuY2llcyB1c2luZyAke3BhY2thZ2VNYW5hZ2VyfWApXG5cbiAgY29uc3QgcHJvYyA9IHNwYXduU3luYyhjb21tYW5kLCB7XG4gICAgY3dkOiB0YXJnZXQsXG4gICAgc2hlbGw6IHRydWUsXG4gICAgc3RkaW86ICdpbmhlcml0J1xuICB9KVxuXG4gIGlmIChwcm9jLnN0YXR1cyAhPT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGluc3RhbGwgZGVwZW5kZW5jaWVzYClcbiAgfVxuXG4gIGNvbnNvbGEuc3VjY2VzcyhgRGVwZW5kZW5jaWVzIGluc3RhbGxlZGApXG59XG5cbnByb2dyYW1cbiAgLm5hbWUoJ2NyZWF0ZS1weWxvbicpXG4gIC52ZXJzaW9uKHZlcnNpb24pXG4gIC5hcmd1bWVudHMoJ1t0YXJnZXRdJylcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctaSwgLS1pbnN0YWxsJywgJ0luc3RhbGwgZGVwZW5kZW5jaWVzJykpXG4gIC5hZGRPcHRpb24oXG4gICAgbmV3IE9wdGlvbignLXIsIC0tcnVudGltZSA8cnVudGltZT4nLCAnUnVudGltZScpLmNob2ljZXMoXG4gICAgICBydW50aW1lcy5tYXAoKHtrZXl9KSA9PiBrZXkpXG4gICAgKVxuICApXG4gIC5hZGRPcHRpb24obmV3IE9wdGlvbignLXQsIC0tdGVtcGxhdGUgPHRlbXBsYXRlPicsICdUZW1wbGF0ZScpKVxuICAuYWRkT3B0aW9uKFxuICAgIG5ldyBPcHRpb24oJy1wbSwgLS1wYWNrYWdlLW1hbmFnZXIgPHBhY2thZ2VNYW5hZ2VyPicsICdQYWNrYWdlIG1hbmFnZXInKVxuICApXG4gIC5hZGRPcHRpb24oXG4gICAgbmV3IE9wdGlvbihcbiAgICAgICctLWNsaWVudCcsXG4gICAgICAnRW5hYmxlIGNsaWVudCBnZW5lcmF0aW9uIChodHRwczovL3B5bG9uLmNyb25pdC5pby9kb2NzL2ludGVncmF0aW9ucy9ncXR5KSdcbiAgICApXG4gIClcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWNsaWVudC1wYXRoIDxjbGllbnRQYXRoPicsICdDbGllbnQgcGF0aCcpKVxuICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tY2xpZW50LXBvcnQgPGNsaWVudFBvcnQ+JywgJ0NsaWVudCBwb3J0JykpXG4gIC5hY3Rpb24obWFpbilcblxudHlwZSBBcmdPcHRpb25zID0ge1xuICBpbnN0YWxsOiBib29sZWFuXG4gIHJ1bnRpbWU6IHN0cmluZ1xuICB0ZW1wbGF0ZTogc3RyaW5nXG4gIHBhY2thZ2VNYW5hZ2VyPzogc3RyaW5nXG4gIGNsaWVudD86IGJvb2xlYW5cbiAgY2xpZW50UGF0aD86IHN0cmluZ1xuICBjbGllbnRQb3J0Pzogc3RyaW5nXG59XG5cbmFzeW5jIGZ1bmN0aW9uIG1haW4oXG4gIHRhcmdldERpcjogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBvcHRpb25zOiBBcmdPcHRpb25zLFxuICBjb21tYW5kOiBDb21tYW5kXG4pIHtcbiAgdHJ5IHtcbiAgICBjb25zb2xhLmxvZyhgJHtjb21tYW5kLm5hbWUoKX0gdmVyc2lvbiAke2NvbW1hbmQudmVyc2lvbigpfWApXG5cbiAgICBjb25zdCB7XG4gICAgICBpbnN0YWxsOiBpbnN0YWxsQXJnLFxuICAgICAgcnVudGltZTogcnVudGltZUFyZyxcbiAgICAgIHRlbXBsYXRlOiB0ZW1wbGF0ZUFyZyxcbiAgICAgIHBhY2thZ2VNYW5hZ2VyOiBwYWNrYWdlTWFuYWdlckFyZyxcbiAgICAgIGNsaWVudDogY2xpZW50QXJnLFxuICAgICAgY2xpZW50UGF0aDogY2xpZW50UGF0aEFyZyxcbiAgICAgIGNsaWVudFBvcnQ6IGNsaWVudFBvcnRBcmdcbiAgICB9ID0gb3B0aW9uc1xuXG4gICAgbGV0IHRhcmdldCA9ICcnXG5cbiAgICBpZiAodGFyZ2V0RGlyKSB7XG4gICAgICB0YXJnZXQgPSB0YXJnZXREaXJcblxuICAgICAgY29uc29sYS5zdWNjZXNzKGBVc2luZyB0YXJnZXQgZGlyZWN0b3J5IOKApiAke3RhcmdldH1gKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBhbnN3ZXIgPSBhd2FpdCBpbnB1dCh7XG4gICAgICAgIG1lc3NhZ2U6ICdUYXJnZXQgZGlyZWN0b3J5JyxcbiAgICAgICAgZGVmYXVsdDogJ215LXB5bG9uJ1xuICAgICAgfSlcbiAgICAgIHRhcmdldCA9IGFuc3dlclxuICAgIH1cblxuICAgIGxldCBwcm9qZWN0TmFtZSA9ICcnXG5cbiAgICBpZiAodGFyZ2V0ID09PSAnLicpIHtcbiAgICAgIHByb2plY3ROYW1lID0gcGF0aC5iYXNlbmFtZShwcm9jZXNzLmN3ZCgpKVxuICAgIH0gZWxzZSB7XG4gICAgICBwcm9qZWN0TmFtZSA9IHBhdGguYmFzZW5hbWUodGFyZ2V0KVxuICAgIH1cblxuICAgIGNvbnN0IHJ1bnRpbWVOYW1lID1cbiAgICAgIHJ1bnRpbWVBcmcgfHxcbiAgICAgIChhd2FpdCBzZWxlY3Qoe1xuICAgICAgICBtZXNzYWdlOiAnV2hpY2ggcnVudGltZSB3b3VsZCB5b3UgbGlrZSB0byB1c2U/JyxcbiAgICAgICAgY2hvaWNlczogcnVudGltZXMubWFwKHJ1bnRpbWUgPT4gKHtcbiAgICAgICAgICBuYW1lOiBgJHtydW50aW1lLm5hbWV9ICgke3J1bnRpbWUud2Vic2l0ZX0pYCxcbiAgICAgICAgICB2YWx1ZTogcnVudGltZS5rZXlcbiAgICAgICAgfSkpLFxuICAgICAgICBkZWZhdWx0OiAwXG4gICAgICB9KSlcblxuICAgIGlmICghcnVudGltZU5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gcnVudGltZSBzZWxlY3RlZCcpXG4gICAgfVxuXG4gICAgY29uc3QgcnVudGltZSA9IHJ1bnRpbWVzLmZpbmQoKHtrZXl9KSA9PiBrZXkgPT09IHJ1bnRpbWVOYW1lKVxuXG4gICAgaWYgKCFydW50aW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcnVudGltZSBzZWxlY3RlZDogJHtydW50aW1lTmFtZX1gKVxuICAgIH1cblxuICAgIGNvbnN0IHRlbXBsYXRlTmFtZSA9XG4gICAgICB0ZW1wbGF0ZUFyZyB8fFxuICAgICAgKGF3YWl0IHNlbGVjdCh7XG4gICAgICAgIG1lc3NhZ2U6ICdXaGljaCB0ZW1wbGF0ZSB3b3VsZCB5b3UgbGlrZSB0byB1c2U/JyxcbiAgICAgICAgY2hvaWNlczogdGVtcGxhdGVzXG4gICAgICAgICAgLmZpbHRlcih0ZW1wbGF0ZSA9PiBydW50aW1lLnRlbXBsYXRlcz8uaW5jbHVkZXModGVtcGxhdGUua2V5KSlcbiAgICAgICAgICAubWFwKHRlbXBsYXRlID0+ICh7XG4gICAgICAgICAgICBuYW1lOiB0ZW1wbGF0ZS5uYW1lLFxuICAgICAgICAgICAgdmFsdWU6IHRlbXBsYXRlLmtleVxuICAgICAgICAgIH0pKSxcbiAgICAgICAgZGVmYXVsdDogMFxuICAgICAgfSkpXG5cbiAgICBpZiAoIXRlbXBsYXRlTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB0ZW1wbGF0ZSBzZWxlY3RlZCcpXG4gICAgfVxuXG4gICAgaWYgKGZzLmV4aXN0c1N5bmModGFyZ2V0KSkge1xuICAgICAgaWYgKGZzLnJlYWRkaXJTeW5jKHRhcmdldCkubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNvbmZpcm0oe1xuICAgICAgICAgIG1lc3NhZ2U6ICdEaXJlY3Rvcnkgbm90IGVtcHR5LiBDb250aW51ZT8nLFxuICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgICAgIH0pXG4gICAgICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgICAgICBwcm9jZXNzLmV4aXQoMSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBta2RpcnAodGFyZ2V0KVxuICAgIH1cblxuICAgIGNvbnN0IGluc3RhbGwgPVxuICAgICAgaW5zdGFsbEFyZyB8fFxuICAgICAgKGF3YWl0IGNvbmZpcm0oe21lc3NhZ2U6ICdXb3VsZCB5b3UgbGlrZSB0byBpbnN0YWxsIGRlcGVuZGVuY2llcz8nfSkpXG5cbiAgICBhd2FpdCBjcmVhdGVUZW1wbGF0ZSh7XG4gICAgICBuYW1lOiBwcm9qZWN0TmFtZSxcbiAgICAgIHJ1bnRpbWU6IHJ1bnRpbWVOYW1lLFxuICAgICAgdGVtcGxhdGU6IHRlbXBsYXRlTmFtZSxcbiAgICAgIHRhcmdldFxuICAgIH0pXG5cbiAgICBsZXQgcGFja2FnZU1hbmFnZXIgPSBwYWNrYWdlTWFuYWdlckFyZ1xuXG4gICAgaWYgKHJ1bnRpbWVOYW1lID09PSAnYnVuJyAmJiAhcGFja2FnZU1hbmFnZXIpIHtcbiAgICAgIHBhY2thZ2VNYW5hZ2VyID0gJ2J1bidcbiAgICB9XG5cbiAgICBpZiAoaW5zdGFsbCkge1xuICAgICAgYXdhaXQgaW5zdGFsbERlcGVuZGVuY2llcyh7dGFyZ2V0LCBwYWNrYWdlTWFuYWdlcn0pXG4gICAgfVxuXG4gICAgY29uc3QgY2xpZW50ID1cbiAgICAgIGNsaWVudEFyZyB8fFxuICAgICAgKGF3YWl0IGNvbmZpcm0oe1xuICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgICdXb3VsZCB5b3UgbGlrZSB0byBlbmFibGUgY2xpZW50IGdlbmVyYXRpb24/IChodHRwczovL3B5bG9uLmNyb25pdC5pby9kb2NzL2ludGVncmF0aW9ucy9ncXR5KScsXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgICB9KSlcblxuICAgIGxldCBjbGllbnRSb290OiBzdHJpbmcgPSAnJ1xuICAgIGxldCBjbGllbnRQYXRoOiBzdHJpbmcgPSAnJ1xuICAgIGxldCBjbGllbnRQb3J0OiBzdHJpbmcgPSAnJ1xuXG4gICAgaWYgKGNsaWVudCkge1xuICAgICAgaWYgKCFjbGllbnRQYXRoQXJnKSB7XG4gICAgICAgIGNsaWVudFJvb3QgPSBhd2FpdCBpbnB1dCh7XG4gICAgICAgICAgbWVzc2FnZTogJ1BhdGggdG8gdGhlIHJvb3Qgd2hlcmUgdGhlIGNsaWVudCBzaG91bGQgYmUgZ2VuZXJhdGVkJyxcbiAgICAgICAgICBkZWZhdWx0OiAnLidcbiAgICAgICAgfSlcblxuICAgICAgICBjbGllbnRQYXRoID0gYXdhaXQgaW5wdXQoe1xuICAgICAgICAgIG1lc3NhZ2U6ICdQYXRoIHRvIGdlbmVyYXRlIHRoZSBjbGllbnQgdG8nLFxuICAgICAgICAgIGRlZmF1bHQ6IHBhdGguam9pbihjbGllbnRSb290LCAnZ3F0eS9pbmRleC50cycpLFxuICAgICAgICAgIHZhbGlkYXRlOiB2YWx1ZSA9PiB7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgcGF0aCBzdGFydHMgd2l0aCB0aGUgY2xpZW50IHJvb3QgKHRha2UgY2FyZSBvZiAuKVxuICAgICAgICAgICAgaWYgKCF2YWx1ZS5zdGFydHNXaXRoKGNsaWVudFJvb3QgPT09ICcuJyA/ICcnIDogY2xpZW50Um9vdCkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuICdQYXRoIG11c3Qgc3RhcnQgd2l0aCB0aGUgY2xpZW50IHJvb3QnXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjbGllbnRQb3J0ID1cbiAgICAgICAgY2xpZW50UG9ydEFyZyB8fFxuICAgICAgICAoYXdhaXQgaW5wdXQoe1xuICAgICAgICAgIG1lc3NhZ2U6ICdQb3J0IG9mIHRoZSBweWxvbiBzZXJ2ZXIgdG8gZ2VuZXJhdGUgdGhlIGNsaWVudCBmcm9tJyxcbiAgICAgICAgICBkZWZhdWx0OiAnMzAwMCdcbiAgICAgICAgfSkpXG5cbiAgICAgIGNvbnNvbGEuc3RhcnQoYFVwZGF0aW5nIHB5bG9uIGRldiBzY3JpcHQgdG8gZ2VuZXJhdGUgY2xpZW50YClcblxuICAgICAgY29uc3QgZGV2U2NyaXB0UGF0aCA9IHBhdGguam9pbih0YXJnZXQsICdwYWNrYWdlLmpzb24nKVxuXG4gICAgICBjb25zdCBkZXZTY3JpcHQgPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhkZXZTY3JpcHRQYXRoLCAndXRmLTgnKSlcblxuICAgICAgZGV2U2NyaXB0LnNjcmlwdHMgPSB7XG4gICAgICAgIC4uLmRldlNjcmlwdC5zY3JpcHRzLFxuICAgICAgICBkZXY6XG4gICAgICAgICAgZGV2U2NyaXB0LnNjcmlwdHMuZGV2ICtcbiAgICAgICAgICBgIC0tY2xpZW50IC0tY2xpZW50LXBvcnQgJHtjbGllbnRQb3J0fSAtLWNsaWVudC1wYXRoICR7Y2xpZW50UGF0aH1gXG4gICAgICB9XG5cbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoZGV2U2NyaXB0UGF0aCwgSlNPTi5zdHJpbmdpZnkoZGV2U2NyaXB0LCBudWxsLCAyKSlcblxuICAgICAgY29uc29sYS5zdWNjZXNzKGBQeWxvbiBkZXYgc2NyaXB0IHVwZGF0ZWRgKVxuICAgIH1cblxuICAgIGNvbnN0IG1lc3NhZ2UgPSBgXG7wn46JICR7Y2hhbGsuZ3JlZW4uYm9sZCgnUHlsb24gY3JlYXRlZCBzdWNjZXNzZnVsbHkuJyl9XG5cbvCfkrsgJHtjaGFsay5jeWFuLmJvbGQoJ0NvbnRpbnVlIERldmVsb3BpbmcnKX1cbiAgICAke2NoYWxrLnllbGxvdygnQ2hhbmdlIGRpcmVjdG9yaWVzOicpfSBjZCAke2NoYWxrLmJsdWUodGFyZ2V0KX1cbiAgICAke2NoYWxrLnllbGxvdygnU3RhcnQgZGV2IHNlcnZlcjonKX0gbnBtIHJ1biBzdGFydFxuICAgICR7Y2hhbGsueWVsbG93KCdEZXBsb3k6Jyl9IG5wbSBydW4gZGVwbG95XG5cbvCfk5YgJHtjaGFsay5jeWFuLmJvbGQoJ0V4cGxvcmUgRG9jdW1lbnRhdGlvbicpfVxuICAgICR7Y2hhbGsudW5kZXJsaW5lLmJsdWUoJ2h0dHBzOi8vcHlsb24uY3Jvbml0LmlvL2RvY3MnKX1cblxu8J+SrCAke2NoYWxrLmN5YW4uYm9sZCgnSm9pbiBvdXIgQ29tbXVuaXR5Jyl9XG4gICAgJHtjaGFsay51bmRlcmxpbmUuYmx1ZSgnaHR0cHM6Ly9kaXNjb3JkLmdnL2NiSmprVnJuSGUnKX1cbmBcblxuICAgIGF3YWl0IHRlbGVtZXRyeS5zZW5kQ3JlYXRlRXZlbnQoe1xuICAgICAgbmFtZTogcHJvamVjdE5hbWUsXG4gICAgICBweWxvbkNyZWF0ZVZlcnNpb246IHZlcnNpb24sXG4gICAgICBydW50aW1lOiBydW50aW1lTmFtZSxcbiAgICAgIHRlbXBsYXRlOiB0ZW1wbGF0ZU5hbWUsXG4gICAgICBjbGllbnRQYXRoOiBjbGllbnRQYXRoIHx8IHVuZGVmaW5lZCxcbiAgICAgIGNsaWVudFBvcnQ6IHBhcnNlSW50KGNsaWVudFBvcnQpIHx8IHVuZGVmaW5lZFxuICAgIH0pXG5cbiAgICBjb25zb2xhLmJveChtZXNzYWdlKVxuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sYS5lcnJvcihlKVxuICB9XG59XG5cbnByb2dyYW0ucGFyc2UoKVxuIgogIF0sCiAgIm1hcHBpbmdzIjogIjs7OztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQVdBLFNBQVMsTUFBTSxDQUFDLEtBQWE7QUFDM0IsTUFBSTtBQUNGLElBQUcsYUFBVSxLQUFLLEVBQUMsV0FBVyxLQUFJLENBQUM7QUFBQSxXQUM1QixHQUFQO0FBQ0EsUUFBSSxhQUFhLE9BQU87QUFDdEIsVUFBSSxVQUFVLEtBQUssRUFBRSxTQUFTO0FBQVU7QUFBQSxJQUMxQztBQUNBLFVBQU07QUFBQTtBQUFBO0FB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S0FBSyxjQUFjLEVBQ25CLFFBQVEsT0FBTyxFQUNmLFVBQVUsVUFBVSxFQUNwQixVQUFVLElBQUksT0FBTyxpQkFBaUIsc0JBQXNCLENBQUMsRUFDN0QsVUFDQyxJQUFJLE9BQU8sMkJBQTJCLFNBQVMsRUFBRSxRQUMvQyxTQUFTLElBQUksR0FBRSxVQUFTLEdBQUcsQ0FDN0IsQ0FDRixFQUNDLFVBQVUsSUFBSSxPQUFPLDZCQUE2QixVQUFVLENBQUMsRUFDN0QsVUFDQyxJQUFJLE9BQU8sMkNBQTJDLGlCQUFpQixDQUN6RSxFQUNDLFVBQ0MsSUFBSSxPQUNGLFlBQ0EsMkVBQ0YsQ0FDRixFQUNDLFVBQVUsSUFBSSxPQUFPLDhCQUE4QixhQUFhLENBQUMsRUFDakUsVUFBVSxJQUFJLE9BQU8sOEJBQThCLGFBQWEsQ0FBQyxFQUNqRSxPQUFPLElBQUk7QUFxTmQsUUFBUSxNQUFNOyIsCiAgImRlYnVnSWQiOiAiNTVBRjU0Nzk2MDgzOEJCMTY0NzU2RTIxNjQ3NTZFMjEiLAogICJuYW1lcyI6IFtdCn0=
|
|
337
|
+
//# debugId=38EA1869FEC6A23F64756E2164756E21
|
|
338
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgIiMhL3Vzci9iaW4vZW52IG5vZGVcblxuaW1wb3J0IHtPcHRpb24sIHByb2dyYW0sIHR5cGUgQ29tbWFuZH0gZnJvbSAnY29tbWFuZGVyJ1xuaW1wb3J0IGNvbnNvbGEgZnJvbSAnY29uc29sYSdcbmltcG9ydCB7aW5wdXQsIHNlbGVjdCwgY29uZmlybX0gZnJvbSAnQGlucXVpcmVyL3Byb21wdHMnXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJ1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnXG5cbmltcG9ydCAqIGFzIHRlbGVtZXRyeSBmcm9tICdAZ2V0Y3Jvbml0L3B5bG9uLXRlbGVtZXRyeSdcblxuaW1wb3J0IHtmaWxlVVJMVG9QYXRofSBmcm9tICd1cmwnXG5pbXBvcnQge2Rpcm5hbWV9IGZyb20gJ3BhdGgnXG5cbmNvbnN0IF9fZmlsZW5hbWUgPSBmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybClcbmNvbnN0IF9fZGlybmFtZSA9IGRpcm5hbWUoX19maWxlbmFtZSlcblxuY29uc3QgdmVyc2lvbiA9ICgoKSA9PiB7XG4gIHJldHVybiBKU09OLnBhcnNlKFxuICAgIGZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4nLCAncGFja2FnZS5qc29uJyksICd1dGYtOCcpXG4gICkudmVyc2lvbiBhcyBzdHJpbmdcbn0pKClcblxuZnVuY3Rpb24gbWtkaXJwKGRpcjogc3RyaW5nKSB7XG4gIHRyeSB7XG4gICAgZnMubWtkaXJTeW5jKGRpciwge3JlY3Vyc2l2ZTogdHJ1ZX0pXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICBpZiAoJ2NvZGUnIGluIGUgJiYgZS5jb2RlID09PSAnRUVYSVNUJykgcmV0dXJuXG4gICAgfVxuICAgIHRocm93IGVcbiAgfVxufVxuXG5jb25zdCBydW50aW1lczoge1xuICBrZXk6IHN0cmluZ1xuICBuYW1lOiBzdHJpbmdcbiAgd2Vic2l0ZTogc3RyaW5nXG4gIHRlbXBsYXRlcz86IHN0cmluZ1tdXG59W10gPSBbXG4gIHtcbiAgICBrZXk6ICdidW4nLFxuICAgIG5hbWU6ICdCdW4uanMnLFxuICAgIHdlYnNpdGU6ICdodHRwczovL2J1bmpzLmRldicsXG4gICAgdGVtcGxhdGVzOiBbJ2RlZmF1bHQnXVxuICB9LFxuICB7XG4gICAga2V5OiAnbm9kZScsXG4gICAgbmFtZTogJ05vZGUuanMnLFxuICAgIHdlYnNpdGU6ICdodHRwczovL25vZGVqcy5vcmcnLFxuICAgIHRlbXBsYXRlczogWydkZWZhdWx0J11cbiAgfSxcbiAge1xuICAgIGtleTogJ2NmLXdvcmtlcnMnLFxuICAgIG5hbWU6ICdDbG91ZGZsYXJlIFdvcmtlcnMnLFxuICAgIHdlYnNpdGU6ICdodHRwczovL3dvcmtlcnMuY2xvdWRmbGFyZS5jb20nLFxuICAgIHRlbXBsYXRlczogWydkZWZhdWx0J11cbiAgfVxuXVxuXG5jb25zdCB0ZW1wbGF0ZXM6IHtcbiAga2V5OiBzdHJpbmdcbiAgbmFtZTogc3RyaW5nXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmdcbn1bXSA9IFtcbiAge1xuICAgIGtleTogJ2RlZmF1bHQnLFxuICAgIG5hbWU6ICdEZWZhdWx0JyxcbiAgICBkZXNjcmlwdGlvbjogJ0RlZmF1bHQgdGVtcGxhdGUnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdkYXRhYmFzZScsXG4gICAgbmFtZTogJ0RhdGFiYXNlIChQcmlzbWEpJyxcbiAgICBkZXNjcmlwdGlvbjogJ1RlbXBsYXRlIHdpdGggUHJpc21hIE9STSdcbiAgfVxuXVxuXG5jb25zdCBpbmplY3RWYXJpYWJsZXNJbkNvbnRlbnQgPSAoXG4gIGNvbnRlbnQ6IHN0cmluZyxcbiAgdmFyaWFibGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4pID0+IHtcbiAgbGV0IHJlc3VsdCA9IGNvbnRlbnRcblxuICBPYmplY3QuZW50cmllcyh2YXJpYWJsZXMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlQWxsKGtleSwgdmFsdWUpXG4gIH0pXG5cbiAgcmV0dXJuIHJlc3VsdFxufVxuY29uc3QgcmVhZGRpckZpbGVzU3luY1JlY3Vyc2l2ZSA9IChkaXI6IHN0cmluZyk6IHN0cmluZ1tdID0+IHtcbiAgY29uc3QgcnVuID0gKGRpcjogc3RyaW5nKTogc3RyaW5nW10gPT4ge1xuICAgIGNvbnN0IHJlc3VsdDogc3RyaW5nW10gPSBbXVxuXG4gICAgY29uc3QgZmlsZXMgPSBmcy5yZWFkZGlyU3luYyhkaXIpXG5cbiAgICBmaWxlcy5mb3JFYWNoKGZpbGUgPT4ge1xuICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4oZGlyLCBmaWxlKVxuXG4gICAgICBpZiAoZnMuc3RhdFN5bmMoZmlsZVBhdGgpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goLi4ucnVuKGZpbGVQYXRoKSlcbiAgICAgIH1cblxuICAgICAgLy8gT25seSBhZGQgZmlsZXNcbiAgICAgIGlmIChmcy5zdGF0U3luYyhmaWxlUGF0aCkuaXNGaWxlKCkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goZmlsZVBhdGgpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIHJldHVybiBydW4oZGlyKS5tYXAoZmlsZSA9PiB7XG4gICAgcmV0dXJuIGZpbGUucmVwbGFjZShkaXIsICcuJylcbiAgfSlcbn1cblxuY29uc3QgY3JlYXRlVGVtcGxhdGUgPSBhc3luYyAob3B0aW9uczoge1xuICBuYW1lOiBzdHJpbmdcbiAgcnVudGltZTogc3RyaW5nXG4gIHRlbXBsYXRlOiBzdHJpbmdcbiAgdGFyZ2V0OiBzdHJpbmdcbn0pID0+IHtcbiAgY29uc3Qge3J1bnRpbWUsIHRlbXBsYXRlLCB0YXJnZXR9ID0gb3B0aW9uc1xuXG4gIGNvbnN0IHJ1bnRpbWVOYW1lID0gcnVudGltZXMuZmluZCgoe2tleX0pID0+IGtleSA9PT0gcnVudGltZSk/Lm5hbWVcbiAgY29uc3QgdGVtcGxhdGVOYW1lID0gdGVtcGxhdGVzLmZpbmQoKHtrZXl9KSA9PiBrZXkgPT09IHRlbXBsYXRlKT8ubmFtZVxuXG4gIGlmICghcnVudGltZU5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcnVudGltZTogJHtydW50aW1lfWApXG4gIH1cblxuICBpZiAoIXRlbXBsYXRlTmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0ZW1wbGF0ZTogJHt0ZW1wbGF0ZX1gKVxuICB9XG5cbiAgLy8gVGhlIHRlbXBsYXRlcyBhcmUgc3RvcmVkIGluIHRoZSBgdGVtcGxhdGVzYCBkaXJlY3RvcnlcbiAgY29uc3Qgc2hhcmVkVGVtcGxhdGVEaXIgPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4nLCAndGVtcGxhdGVzJywgJ3NoYXJlZCcpXG5cbiAgaWYgKCFmcy5leGlzdHNTeW5jKHNoYXJlZFRlbXBsYXRlRGlyKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgU2hhcmVkIHRlbXBsYXRlcyBub3QgZm91bmQ6ICR7c2hhcmVkVGVtcGxhdGVEaXJ9YClcbiAgfVxuXG4gIGNvbnN0IHRlbXBsYXRlRGlyID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJ3RlbXBsYXRlcycsIHJ1bnRpbWUsIHRlbXBsYXRlKVxuXG4gIGlmICghZnMuZXhpc3RzU3luYyh0ZW1wbGF0ZURpcikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRlbXBsYXRlIG5vdCBmb3VuZDogJHt0ZW1wbGF0ZURpcn1gKVxuICB9XG5cbiAgLy8gVGhlIHRhcmdldCBkaXJlY3RvcnkgaXMgYWxyZWFkeSBjcmVhdGVkXG4gIGNvbnN0IHRhcmdldERpcmVjdG9yeVBhdGggPSBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgdGFyZ2V0KVxuXG4gIGNvbnNvbGEuc3RhcnQoYENyZWF0aW5nIHB5bG9uIGluICR7dGFyZ2V0RGlyZWN0b3J5UGF0aH1gKVxuXG4gIGNvbnN0IGluamVjdCA9IChjb250ZW50OiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gaW5qZWN0VmFyaWFibGVzSW5Db250ZW50KGNvbnRlbnQsIHtcbiAgICAgIF9fUFlMT05fTkFNRV9fOiBvcHRpb25zLm5hbWVcbiAgICB9KVxuICB9XG5cbiAgLy8gQ29weSB0aGUgc2hhcmVkIHRlbXBsYXRlIGZpbGVzXG4gIHJlYWRkaXJGaWxlc1N5bmNSZWN1cnNpdmUoc2hhcmVkVGVtcGxhdGVEaXIpLmZvckVhY2goZmlsZSA9PiB7XG4gICAgY29uc3Qgc291cmNlID0gcGF0aC5qb2luKHNoYXJlZFRlbXBsYXRlRGlyLCBmaWxlKVxuICAgIGxldCB0YXJnZXQgPSBwYXRoLmpvaW4odGFyZ2V0RGlyZWN0b3J5UGF0aCwgZmlsZSlcblxuICAgIC8vIENyZWF0ZSBmb2xkZXIgcmVjdXJzaXZlbHkgYW5kIGNvcHkgZmlsZVxuXG4gICAgY29uc3QgdGFyZ2V0RGlyID0gcGF0aC5kaXJuYW1lKHRhcmdldClcblxuICAgIC8vIFNraXAgdGhlIC5naXRodWIvd29ya2Zsb3dzIGRpcmVjdG9yeSBmb3IgY2Ytd29ya2VycyBydW50aW1lXG4gICAgaWYgKFxuICAgICAgcnVudGltZSA9PT0gJ2NmLXdvcmtlcnMnICYmXG4gICAgICBzb3VyY2UuaW5jbHVkZXMoJy5naXRodWIvd29ya2Zsb3dzL3B1Ymxpc2gueWFtbCcpXG4gICAgKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIWZzLmV4aXN0c1N5bmModGFyZ2V0RGlyKSkge1xuICAgICAgZnMubWtkaXJTeW5jKHRhcmdldERpciwge3JlY3Vyc2l2ZTogdHJ1ZX0pXG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIHRhcmdldCBlbmRzIHdpdGggYC5leGFtcGxlYCwgcmVtb3ZlIHRoZSBzdWZmaXguXG4gICAgLy8gVGhpcyBpcyB1c2VmdWwgZm9yIGAuZ2l0aWdub3JlLmV4YW1wbGVgIGZpbGVzIGJlY2F1c2UgdGhleSBhcmUgbm90IHB1Ymxpc2hlZCBpblxuICAgIC8vIHRoZSBgY3JlYXRlLXB5bG9uYCBwYWNrYWdlIHdoZW4gbmFtZWQgYC5naXRpZ25vcmVgLlxuICAgIGlmICh0YXJnZXQuZW5kc1dpdGgoJy5leGFtcGxlJykpIHtcbiAgICAgIHRhcmdldCA9IHRhcmdldC5yZXBsYWNlKCcuZXhhbXBsZScsICcnKVxuICAgIH1cblxuICAgIGNvbnN0IGluamVjdGVkQ29udGVudCA9IGluamVjdChmcy5yZWFkRmlsZVN5bmMoc291cmNlLCAndXRmLTgnKSlcblxuICAgIGZzLndyaXRlRmlsZVN5bmModGFyZ2V0LCBpbmplY3RlZENvbnRlbnQpXG4gIH0pXG5cbiAgLy8gQ29weSB0aGUgcnVudGltZSBzcGVjaWZpYyB0ZW1wbGF0ZSBmaWxlc1xuICByZWFkZGlyRmlsZXNTeW5jUmVjdXJzaXZlKHRlbXBsYXRlRGlyKS5mb3JFYWNoKGZpbGUgPT4ge1xuICAgIGNvbnN0IHNvdXJjZSA9IHBhdGguam9pbih0ZW1wbGF0ZURpciwgZmlsZSlcbiAgICBsZXQgdGFyZ2V0ID0gcGF0aC5qb2luKHRhcmdldERpcmVjdG9yeVBhdGgsIGZpbGUpXG5cbiAgICAvLyBDcmVhdGUgZm9sZGVyIHJlY3Vyc2l2ZWx5IGFuZCBjb3B5IGZpbGVcbiAgICBjb25zdCB0YXJnZXREaXIgPSBwYXRoLmRpcm5hbWUodGFyZ2V0KVxuXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHRhcmdldERpcikpIHtcbiAgICAgIGZzLm1rZGlyU3luYyh0YXJnZXREaXIsIHtyZWN1cnNpdmU6IHRydWV9KVxuICAgIH1cblxuICAgIC8vIElmIHRoZSB0YXJnZXQgZW5kcyB3aXRoIGAuZXhhbXBsZWAsIHJlbW92ZSB0aGUgc3VmZml4LlxuICAgIC8vIFRoaXMgaXMgdXNlZnVsIGZvciBgLmdpdGlnbm9yZS5leGFtcGxlYCBmaWxlcyBiZWNhdXNlIHRoZXkgYXJlIG5vdCBwdWJsaXNoZWQgaW5cbiAgICAvLyB0aGUgYGNyZWF0ZS1weWxvbmAgcGFja2FnZSB3aGVuIG5hbWVkIGAuZ2l0aWdub3JlYC5cbiAgICBpZiAodGFyZ2V0LmVuZHNXaXRoKCcuZXhhbXBsZScpKSB7XG4gICAgICB0YXJnZXQgPSB0YXJnZXQucmVwbGFjZSgnLmV4YW1wbGUnLCAnJylcbiAgICB9XG5cbiAgICBjb25zdCBpbmplY3RlZENvbnRlbnQgPSBpbmplY3QoZnMucmVhZEZpbGVTeW5jKHNvdXJjZSwgJ3V0Zi04JykpXG5cbiAgICBmcy53cml0ZUZpbGVTeW5jKHRhcmdldCwgaW5qZWN0ZWRDb250ZW50KVxuICB9KVxuXG4gIGNvbnNvbGEuc3VjY2VzcyhgUHlsb24gY3JlYXRlZGApXG59XG5cbmltcG9ydCB7ZGV0ZWN0fSBmcm9tICdkZXRlY3QtcGFja2FnZS1tYW5hZ2VyJ1xuaW1wb3J0IHtzcGF3blN5bmN9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnXG5cbmNvbnN0IGluc3RhbGxEZXBlbmRlbmNpZXMgPSBhc3luYyAoYXJnczoge1xuICB0YXJnZXQ6IHN0cmluZ1xuICBwYWNrYWdlTWFuYWdlcj86IHN0cmluZ1xufSkgPT4ge1xuICBjb25zdCB0YXJnZXQgPSBwYXRoLnJlc29sdmUoYXJncy50YXJnZXQpXG5cbiAgY29uc29sZS5sb2coJ3RhcmdldCcsIHRhcmdldClcblxuICBpZiAoIWFyZ3MucGFja2FnZU1hbmFnZXIpIHtcbiAgICBhcmdzLnBhY2thZ2VNYW5hZ2VyID0gYXdhaXQgZGV0ZWN0KHtcbiAgICAgIGN3ZDogdGFyZ2V0LFxuICAgICAgaW5jbHVkZUdsb2JhbEJ1bjogdHJ1ZVxuICAgIH0pXG4gIH1cblxuICBpZiAoIWFyZ3MucGFja2FnZU1hbmFnZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHBhY2thZ2UgbWFuYWdlciBmb3VuZCcpXG4gIH1cblxuICAvLyB5YXJuJywgJ25wbScsIG9yICdwbnBtJywgJ2J1bidcbiAgY29uc3Qge3BhY2thZ2VNYW5hZ2VyfSA9IGFyZ3NcblxuICBsZXQgY29tbWFuZCA9ICcnXG5cbiAgc3dpdGNoIChwYWNrYWdlTWFuYWdlcikge1xuICAgIGNhc2UgJ3lhcm4nOlxuICAgICAgY29tbWFuZCA9ICd5YXJuJ1xuICAgICAgYnJlYWtcbiAgICBjYXNlICducG0nOlxuICAgICAgY29tbWFuZCA9ICducG0gaW5zdGFsbCdcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAncG5wbSc6XG4gICAgICBjb21tYW5kID0gJ3BucG0gaW5zdGFsbCdcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAnYnVuJzpcbiAgICAgIGNvbW1hbmQgPSAnYnVuIGluc3RhbGwnXG4gICAgICBicmVha1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGFja2FnZSBtYW5hZ2VyOiAke3BhY2thZ2VNYW5hZ2VyfWApXG4gIH1cblxuICBjb25zb2xhLnN0YXJ0KGBJbnN0YWxsaW5nIGRlcGVuZGVuY2llcyB1c2luZyAke3BhY2thZ2VNYW5hZ2VyfWApXG5cbiAgY29uc3QgcHJvYyA9IHNwYXduU3luYyhjb21tYW5kLCB7XG4gICAgY3dkOiB0YXJnZXQsXG4gICAgc2hlbGw6IHRydWUsXG4gICAgc3RkaW86ICdpbmhlcml0J1xuICB9KVxuXG4gIGlmIChwcm9jLnN0YXR1cyAhPT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGluc3RhbGwgZGVwZW5kZW5jaWVzYClcbiAgfVxuXG4gIGNvbnNvbGEuc3VjY2VzcyhgRGVwZW5kZW5jaWVzIGluc3RhbGxlZGApXG59XG5cbnByb2dyYW1cbiAgLm5hbWUoJ2NyZWF0ZS1weWxvbicpXG4gIC52ZXJzaW9uKHZlcnNpb24pXG4gIC5hcmd1bWVudHMoJ1t0YXJnZXRdJylcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctaSwgLS1pbnN0YWxsJywgJ0luc3RhbGwgZGVwZW5kZW5jaWVzJykpXG4gIC5hZGRPcHRpb24oXG4gICAgbmV3IE9wdGlvbignLXIsIC0tcnVudGltZSA8cnVudGltZT4nLCAnUnVudGltZScpLmNob2ljZXMoXG4gICAgICBydW50aW1lcy5tYXAoKHtrZXl9KSA9PiBrZXkpXG4gICAgKVxuICApXG4gIC5hZGRPcHRpb24obmV3IE9wdGlvbignLXQsIC0tdGVtcGxhdGUgPHRlbXBsYXRlPicsICdUZW1wbGF0ZScpKVxuICAuYWRkT3B0aW9uKFxuICAgIG5ldyBPcHRpb24oJy1wbSwgLS1wYWNrYWdlLW1hbmFnZXIgPHBhY2thZ2VNYW5hZ2VyPicsICdQYWNrYWdlIG1hbmFnZXInKVxuICApXG4gIC5hZGRPcHRpb24oXG4gICAgbmV3IE9wdGlvbihcbiAgICAgICctLWNsaWVudCcsXG4gICAgICAnRW5hYmxlIGNsaWVudCBnZW5lcmF0aW9uIChodHRwczovL3B5bG9uLmNyb25pdC5pby9kb2NzL2ludGVncmF0aW9ucy9ncXR5KSdcbiAgICApXG4gIClcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWNsaWVudC1wYXRoIDxjbGllbnRQYXRoPicsICdDbGllbnQgcGF0aCcpKVxuICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tY2xpZW50LXBvcnQgPGNsaWVudFBvcnQ+JywgJ0NsaWVudCBwb3J0JykpXG4gIC5hY3Rpb24obWFpbilcblxudHlwZSBBcmdPcHRpb25zID0ge1xuICBpbnN0YWxsOiBib29sZWFuXG4gIHJ1bnRpbWU6IHN0cmluZ1xuICB0ZW1wbGF0ZTogc3RyaW5nXG4gIHBhY2thZ2VNYW5hZ2VyPzogc3RyaW5nXG4gIGNsaWVudD86IGJvb2xlYW5cbiAgY2xpZW50UGF0aD86IHN0cmluZ1xuICBjbGllbnRQb3J0Pzogc3RyaW5nXG59XG5cbmFzeW5jIGZ1bmN0aW9uIG1haW4oXG4gIHRhcmdldERpcjogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBvcHRpb25zOiBBcmdPcHRpb25zLFxuICBjb21tYW5kOiBDb21tYW5kXG4pIHtcbiAgdHJ5IHtcbiAgICBjb25zb2xhLmxvZyhgJHtjb21tYW5kLm5hbWUoKX0gdmVyc2lvbiAke2NvbW1hbmQudmVyc2lvbigpfWApXG5cbiAgICBjb25zdCB7XG4gICAgICBpbnN0YWxsOiBpbnN0YWxsQXJnLFxuICAgICAgcnVudGltZTogcnVudGltZUFyZyxcbiAgICAgIHRlbXBsYXRlOiB0ZW1wbGF0ZUFyZyxcbiAgICAgIHBhY2thZ2VNYW5hZ2VyOiBwYWNrYWdlTWFuYWdlckFyZyxcbiAgICAgIGNsaWVudDogY2xpZW50QXJnLFxuICAgICAgY2xpZW50UGF0aDogY2xpZW50UGF0aEFyZyxcbiAgICAgIGNsaWVudFBvcnQ6IGNsaWVudFBvcnRBcmdcbiAgICB9ID0gb3B0aW9uc1xuXG4gICAgbGV0IHRhcmdldCA9ICcnXG5cbiAgICBpZiAodGFyZ2V0RGlyKSB7XG4gICAgICB0YXJnZXQgPSB0YXJnZXREaXJcblxuICAgICAgY29uc29sYS5zdWNjZXNzKGBVc2luZyB0YXJnZXQgZGlyZWN0b3J5IOKApiAke3RhcmdldH1gKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBhbnN3ZXIgPSBhd2FpdCBpbnB1dCh7XG4gICAgICAgIG1lc3NhZ2U6ICdUYXJnZXQgZGlyZWN0b3J5JyxcbiAgICAgICAgZGVmYXVsdDogJ215LXB5bG9uJ1xuICAgICAgfSlcbiAgICAgIHRhcmdldCA9IGFuc3dlclxuICAgIH1cblxuICAgIGxldCBwcm9qZWN0TmFtZSA9ICcnXG5cbiAgICBpZiAodGFyZ2V0ID09PSAnLicpIHtcbiAgICAgIHByb2plY3ROYW1lID0gcGF0aC5iYXNlbmFtZShwcm9jZXNzLmN3ZCgpKVxuICAgIH0gZWxzZSB7XG4gICAgICBwcm9qZWN0TmFtZSA9IHBhdGguYmFzZW5hbWUodGFyZ2V0KVxuICAgIH1cblxuICAgIGNvbnN0IHJ1bnRpbWVOYW1lID1cbiAgICAgIHJ1bnRpbWVBcmcgfHxcbiAgICAgIChhd2FpdCBzZWxlY3Qoe1xuICAgICAgICBtZXNzYWdlOiAnV2hpY2ggcnVudGltZSB3b3VsZCB5b3UgbGlrZSB0byB1c2U/JyxcbiAgICAgICAgY2hvaWNlczogcnVudGltZXMubWFwKHJ1bnRpbWUgPT4gKHtcbiAgICAgICAgICBuYW1lOiBgJHtydW50aW1lLm5hbWV9ICgke3J1bnRpbWUud2Vic2l0ZX0pYCxcbiAgICAgICAgICB2YWx1ZTogcnVudGltZS5rZXlcbiAgICAgICAgfSkpLFxuICAgICAgICBkZWZhdWx0OiAwXG4gICAgICB9KSlcblxuICAgIGlmICghcnVudGltZU5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gcnVudGltZSBzZWxlY3RlZCcpXG4gICAgfVxuXG4gICAgY29uc3QgcnVudGltZSA9IHJ1bnRpbWVzLmZpbmQoKHtrZXl9KSA9PiBrZXkgPT09IHJ1bnRpbWVOYW1lKVxuXG4gICAgaWYgKCFydW50aW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcnVudGltZSBzZWxlY3RlZDogJHtydW50aW1lTmFtZX1gKVxuICAgIH1cblxuICAgIGNvbnN0IHRlbXBsYXRlTmFtZSA9XG4gICAgICB0ZW1wbGF0ZUFyZyB8fFxuICAgICAgKGF3YWl0IHNlbGVjdCh7XG4gICAgICAgIG1lc3NhZ2U6ICdXaGljaCB0ZW1wbGF0ZSB3b3VsZCB5b3UgbGlrZSB0byB1c2U/JyxcbiAgICAgICAgY2hvaWNlczogdGVtcGxhdGVzXG4gICAgICAgICAgLmZpbHRlcih0ZW1wbGF0ZSA9PiBydW50aW1lLnRlbXBsYXRlcz8uaW5jbHVkZXModGVtcGxhdGUua2V5KSlcbiAgICAgICAgICAubWFwKHRlbXBsYXRlID0+ICh7XG4gICAgICAgICAgICBuYW1lOiB0ZW1wbGF0ZS5uYW1lLFxuICAgICAgICAgICAgdmFsdWU6IHRlbXBsYXRlLmtleVxuICAgICAgICAgIH0pKSxcbiAgICAgICAgZGVmYXVsdDogMFxuICAgICAgfSkpXG5cbiAgICBpZiAoIXRlbXBsYXRlTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB0ZW1wbGF0ZSBzZWxlY3RlZCcpXG4gICAgfVxuXG4gICAgaWYgKGZzLmV4aXN0c1N5bmModGFyZ2V0KSkge1xuICAgICAgaWYgKGZzLnJlYWRkaXJTeW5jKHRhcmdldCkubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNvbmZpcm0oe1xuICAgICAgICAgIG1lc3NhZ2U6ICdEaXJlY3Rvcnkgbm90IGVtcHR5LiBDb250aW51ZT8nLFxuICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgICAgIH0pXG4gICAgICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgICAgICBwcm9jZXNzLmV4aXQoMSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBta2RpcnAodGFyZ2V0KVxuICAgIH1cblxuICAgIGNvbnN0IGluc3RhbGwgPVxuICAgICAgaW5zdGFsbEFyZyB8fFxuICAgICAgKGF3YWl0IGNvbmZpcm0oe21lc3NhZ2U6ICdXb3VsZCB5b3UgbGlrZSB0byBpbnN0YWxsIGRlcGVuZGVuY2llcz8nfSkpXG5cbiAgICBhd2FpdCBjcmVhdGVUZW1wbGF0ZSh7XG4gICAgICBuYW1lOiBwcm9qZWN0TmFtZSxcbiAgICAgIHJ1bnRpbWU6IHJ1bnRpbWVOYW1lLFxuICAgICAgdGVtcGxhdGU6IHRlbXBsYXRlTmFtZSxcbiAgICAgIHRhcmdldFxuICAgIH0pXG5cbiAgICBsZXQgcGFja2FnZU1hbmFnZXIgPSBwYWNrYWdlTWFuYWdlckFyZ1xuXG4gICAgaWYgKHJ1bnRpbWVOYW1lID09PSAnYnVuJyAmJiAhcGFja2FnZU1hbmFnZXIpIHtcbiAgICAgIHBhY2thZ2VNYW5hZ2VyID0gJ2J1bidcbiAgICB9XG5cbiAgICBpZiAoaW5zdGFsbCkge1xuICAgICAgYXdhaXQgaW5zdGFsbERlcGVuZGVuY2llcyh7dGFyZ2V0LCBwYWNrYWdlTWFuYWdlcn0pXG4gICAgfVxuXG4gICAgY29uc3QgY2xpZW50ID1cbiAgICAgIGNsaWVudEFyZyB8fFxuICAgICAgKGF3YWl0IGNvbmZpcm0oe1xuICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgICdXb3VsZCB5b3UgbGlrZSB0byBlbmFibGUgY2xpZW50IGdlbmVyYXRpb24/IChodHRwczovL3B5bG9uLmNyb25pdC5pby9kb2NzL2ludGVncmF0aW9ucy9ncXR5KScsXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgICB9KSlcblxuICAgIGxldCBjbGllbnRSb290OiBzdHJpbmcgPSAnJ1xuICAgIGxldCBjbGllbnRQYXRoOiBzdHJpbmcgPSAnJ1xuICAgIGxldCBjbGllbnRQb3J0OiBzdHJpbmcgPSAnJ1xuXG4gICAgaWYgKGNsaWVudCkge1xuICAgICAgaWYgKCFjbGllbnRQYXRoQXJnKSB7XG4gICAgICAgIGNsaWVudFJvb3QgPSBhd2FpdCBpbnB1dCh7XG4gICAgICAgICAgbWVzc2FnZTogJ1BhdGggdG8gdGhlIHJvb3Qgd2hlcmUgdGhlIGNsaWVudCBzaG91bGQgYmUgZ2VuZXJhdGVkJyxcbiAgICAgICAgICBkZWZhdWx0OiAnLidcbiAgICAgICAgfSlcblxuICAgICAgICBjbGllbnRQYXRoID0gYXdhaXQgaW5wdXQoe1xuICAgICAgICAgIG1lc3NhZ2U6ICdQYXRoIHRvIGdlbmVyYXRlIHRoZSBjbGllbnQgdG8nLFxuICAgICAgICAgIGRlZmF1bHQ6IHBhdGguam9pbihjbGllbnRSb290LCAnZ3F0eS9pbmRleC50cycpLFxuICAgICAgICAgIHZhbGlkYXRlOiB2YWx1ZSA9PiB7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgcGF0aCBzdGFydHMgd2l0aCB0aGUgY2xpZW50IHJvb3QgKHRha2UgY2FyZSBvZiAuKVxuICAgICAgICAgICAgaWYgKCF2YWx1ZS5zdGFydHNXaXRoKGNsaWVudFJvb3QgPT09ICcuJyA/ICcnIDogY2xpZW50Um9vdCkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuICdQYXRoIG11c3Qgc3RhcnQgd2l0aCB0aGUgY2xpZW50IHJvb3QnXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjbGllbnRQb3J0ID1cbiAgICAgICAgY2xpZW50UG9ydEFyZyB8fFxuICAgICAgICAoYXdhaXQgaW5wdXQoe1xuICAgICAgICAgIG1lc3NhZ2U6ICdQb3J0IG9mIHRoZSBweWxvbiBzZXJ2ZXIgdG8gZ2VuZXJhdGUgdGhlIGNsaWVudCBmcm9tJyxcbiAgICAgICAgICBkZWZhdWx0OiAnMzAwMCdcbiAgICAgICAgfSkpXG5cbiAgICAgIGNvbnNvbGEuc3RhcnQoYFVwZGF0aW5nIHB5bG9uIGRldiBzY3JpcHQgdG8gZ2VuZXJhdGUgY2xpZW50YClcblxuICAgICAgY29uc3QgZGV2U2NyaXB0UGF0aCA9IHBhdGguam9pbih0YXJnZXQsICdwYWNrYWdlLmpzb24nKVxuXG4gICAgICBjb25zdCBkZXZTY3JpcHQgPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhkZXZTY3JpcHRQYXRoLCAndXRmLTgnKSlcblxuICAgICAgZGV2U2NyaXB0LnNjcmlwdHMgPSB7XG4gICAgICAgIC4uLmRldlNjcmlwdC5zY3JpcHRzLFxuICAgICAgICBkZXY6XG4gICAgICAgICAgZGV2U2NyaXB0LnNjcmlwdHMuZGV2ICtcbiAgICAgICAgICBgIC0tY2xpZW50IC0tY2xpZW50LXBvcnQgJHtjbGllbnRQb3J0fSAtLWNsaWVudC1wYXRoICR7Y2xpZW50UGF0aH1gXG4gICAgICB9XG5cbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoZGV2U2NyaXB0UGF0aCwgSlNPTi5zdHJpbmdpZnkoZGV2U2NyaXB0LCBudWxsLCAyKSlcblxuICAgICAgY29uc29sYS5zdWNjZXNzKGBQeWxvbiBkZXYgc2NyaXB0IHVwZGF0ZWRgKVxuICAgIH1cblxuICAgIGNvbnN0IG1lc3NhZ2UgPSBgXG7wn46JICR7Y2hhbGsuZ3JlZW4uYm9sZCgnUHlsb24gY3JlYXRlZCBzdWNjZXNzZnVsbHkuJyl9XG5cbvCfkrsgJHtjaGFsay5jeWFuLmJvbGQoJ0NvbnRpbnVlIERldmVsb3BpbmcnKX1cbiAgICAke2NoYWxrLnllbGxvdygnQ2hhbmdlIGRpcmVjdG9yaWVzOicpfSBjZCAke2NoYWxrLmJsdWUodGFyZ2V0KX1cbiAgICAke2NoYWxrLnllbGxvdygnU3RhcnQgZGV2IHNlcnZlcjonKX0gbnBtIHJ1biBzdGFydFxuICAgICR7Y2hhbGsueWVsbG93KCdEZXBsb3k6Jyl9IG5wbSBydW4gZGVwbG95XG5cbvCfk5YgJHtjaGFsay5jeWFuLmJvbGQoJ0V4cGxvcmUgRG9jdW1lbnRhdGlvbicpfVxuICAgICR7Y2hhbGsudW5kZXJsaW5lLmJsdWUoJ2h0dHBzOi8vcHlsb24uY3Jvbml0LmlvL2RvY3MnKX1cblxu8J+SrCAke2NoYWxrLmN5YW4uYm9sZCgnSm9pbiBvdXIgQ29tbXVuaXR5Jyl9XG4gICAgJHtjaGFsay51bmRlcmxpbmUuYmx1ZSgnaHR0cHM6Ly9kaXNjb3JkLmdnL2NiSmprVnJuSGUnKX1cbmBcblxuICAgIGF3YWl0IHRlbGVtZXRyeS5zZW5kQ3JlYXRlRXZlbnQoe1xuICAgICAgbmFtZTogcHJvamVjdE5hbWUsXG4gICAgICBweWxvbkNyZWF0ZVZlcnNpb246IHZlcnNpb24sXG4gICAgICBydW50aW1lOiBydW50aW1lTmFtZSxcbiAgICAgIHRlbXBsYXRlOiB0ZW1wbGF0ZU5hbWUsXG4gICAgICBjbGllbnRQYXRoOiBjbGllbnRQYXRoIHx8IHVuZGVmaW5lZCxcbiAgICAgIGNsaWVudFBvcnQ6IHBhcnNlSW50KGNsaWVudFBvcnQpIHx8IHVuZGVmaW5lZFxuICAgIH0pXG5cbiAgICBjb25zb2xhLmJveChtZXNzYWdlKVxuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sYS5lcnJvcihlKVxuICB9XG59XG5cbnByb2dyYW0ucGFyc2UoKVxuIgogIF0sCiAgIm1hcHBpbmdzIjogIjs7OztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQStNQTtBQUNBO0FBOU1BLElBQU0sY0FBYSxjQUFjLFlBQVksR0FBRztBQUNoRCxJQUFNLGFBQVksUUFBUSxXQUFVO0FBRXBDLElBQU0sV0FBVyxNQUFNO0FBQ3JCLFNBQU8sS0FBSyxNQUNQLGdCQUFhLEtBQUssS0FBSyxZQUFXLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FDckUsRUFBRTtBQUFBLEdBQ0Q7QUFFSCxTQUFT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SUFDWCxDQUFDO0FBRUgsUUFBSSxhQUFxQjtBQUN6QixRQUFJLGFBQXFCO0FBQ3pCLFFBQUksYUFBcUI7QUFFekIsUUFBSSxRQUFRO0FBQ1YsV0FBSyxlQUFlO0FBQ2xCLHFCQUFhLE1BQU0sTUFBTTtBQUFBLFVBQ3ZCLFNBQVM7QUFBQSxVQUNULFNBQVM7QUFBQSxRQUNYLENBQUM7QUFFRCxxQkFBYSxNQUFNLE1BQU07QUFBQSxVQUN2QixTQUFTO0FBQUEsVUFDVCxTQUFTLEtBQUssS0FBSyxZQUFZLGVBQWU7QUFBQSxVQUM5QyxVQUFVLFdBQVM7QUFFakIsaUJBQUssTUFBTSxXQUFXLGVBQWUsTUFBTSxLQUFLLFVBQVUsR0FBRztBQUMzRCxxQkFBTztBQUFBLFlBQ1Q7QUFFQSxtQkFBTztBQUFBO0FBQUEsUUFFWCxDQUFDO0FBQUEsTUFDSDtBQUVBLG1CQUNFLGlCQUNDLE1BQU0sTUFBTTtBQUFBLFFBQ1gsU0FBUztBQUFBLFFBQ1QsU0FBUztBQUFBLE1BQ1gsQ0FBQztBQUVILGNBQVEsTUFBTSw4Q0FBOEM7QUFFNUQsWUFBTSxnQkFBZ0IsS0FBSyxLQUFLLFFBQVEsY0FBYztBQUV0RCxZQUFNLFlBQVksS0FBSyxNQUFTLGdCQUFhLGVBQWUsT0FBTyxDQUFDO0FBRXBFLGdCQUFVLFVBQVU7QUFBQSxXQUNmLFVBQVU7QUFBQSxRQUNiLEtBQ0UsVUFBVSxRQUFRLE1BQ2xCLDJCQUEyQiw0QkFBNEI7QUFBQSxNQUMzRDtBQUVBLE1BQUcsaUJBQWMsZUFBZSxLQUFLLFVBQVUsV0FBVyxNQUFNLENBQUMsQ0FBQztBQUVsRSxjQUFRLFFBQVEsMEJBQTBCO0FBQUEsSUFDNUM7QUFFQSxVQUFNLFVBQVU7QUFBQSxlQUNoQixNQUFNLE1BQU0sS0FBSyw2QkFBNkI7QUFBQTtBQUFBLGVBRTlDLE1BQU0sS0FBSyxLQUFLLHFCQUFxQjtBQUFBLE1BQ25DLE1BQU0sT0FBTyxxQkFBcUIsUUFBUSxNQUFNLEtBQUssTUFBTTtBQUFBLE1BQzNELE1BQU0sT0FBTyxtQkFBbUI7QUFBQSxNQUNoQyxNQUFNLE9BQU8sU0FBUztBQUFBO0FBQUEsZUFFeEIsTUFBTSxLQUFLLEtBQUssdUJBQXVCO0FBQUEsTUFDckMsTUFBTSxVQUFVLEtBQUssOEJBQThCO0FBQUE7QUFBQSxlQUVyRCxNQUFNLEtBQUssS0FBSyxvQkFBb0I7QUFBQSxNQUNsQyxNQUFNLFVBQVUsS0FBSywrQkFBK0I7QUFBQTtBQUd0RCxVQUFnQiwwQkFBZ0I7QUFBQSxNQUM5QixNQUFNO0FBQUEsTUFDTixvQkFBb0I7QUFBQSxNQUNwQixTQUFTO0FBQUEsTUFDVCxVQUFVO0FBQUEsTUFDVixZQUFZLGNBQWM7QUFBQSxNQUMxQixZQUFZLFNBQVMsVUFBVSxLQUFLO0FBQUEsSUFDdEMsQ0FBQztBQUVELFlBQVEsSUFBSSxPQUFPO0FBQUEsV0FDWixHQUFQO0FBQ0EsWUFBUSxNQUFNLENBQUM7QUFBQTtBQUFBO0FBSW5CLFFBQVEsTUFBTTsiLAogICJkZWJ1Z0lkIjogIjM4RUExODY5RkVDNkEyM0Y2NDc1NkUyMTY0NzU2RTIxIiwKICAibmFtZXMiOiBbXQp9
|
package/package.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "Generated with `npm create pylon`",
|
|
7
7
|
"scripts": {
|
|
8
|
-
"dev": "pylon dev -c
|
|
8
|
+
"dev": "pylon dev -c \"node --enable-source-maps .pylon/index.js\"",
|
|
9
9
|
"build": "pylon build"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|