@decohere/create 0.0.1-dev.43 → 0.0.1-dev.44
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/commonjs/src/models/config-yaml.model.js +58 -4
- package/commonjs/src/models/env-file.model.js +14 -1
- package/commonjs/src/models/launch-json.model.js +49 -27
- package/commonjs/src/models/package-json.model.js +64 -7
- package/commonjs/src/models/project.model.js +4 -1
- package/commonjs/src/program.js +52 -21
- package/commonjs/src/runner.js +13 -2
- package/commonjs/src/webapi/api-name.js +95 -0
- package/commonjs/src/webapi/const.js +32 -4
- package/commonjs/src/webapi/create-api.js +62 -18
- package/commonjs/src/webapi/features/auth.feature.js +56 -51
- package/commonjs/src/webapi/features/biome-format.js +6 -4
- package/commonjs/src/webapi/features/database.feature.js +125 -98
- package/commonjs/src/webapi/features/finalize.feature.js +19 -7
- package/commonjs/src/webapi/models/api-package-json.model.js +7 -5
- package/commonjs/src/webapi/models/main-source-file.model.js +12 -3
- package/commonjs/src/webapi/models/production-dockerfile.model.js +76 -36
- package/es6/src/models/config-yaml.model.js +47 -1
- package/es6/src/models/env-file.model.js +14 -1
- package/es6/src/models/launch-json.model.js +49 -27
- package/es6/src/models/package-json.model.js +62 -5
- package/es6/src/models/project.model.js +4 -1
- package/es6/src/program.js +52 -21
- package/es6/src/runner.js +13 -2
- package/es6/src/webapi/api-name.js +59 -0
- package/es6/src/webapi/const.js +18 -5
- package/es6/src/webapi/create-api.js +64 -20
- package/es6/src/webapi/features/auth.feature.js +56 -51
- package/es6/src/webapi/features/biome-format.js +6 -4
- package/es6/src/webapi/features/database.feature.js +125 -98
- package/es6/src/webapi/features/finalize.feature.js +19 -7
- package/es6/src/webapi/models/api-package-json.model.js +8 -6
- package/es6/src/webapi/models/main-source-file.model.js +12 -3
- package/es6/src/webapi/models/production-dockerfile.model.js +71 -36
- package/package.json +2 -2
- package/types/src/models/config-yaml.model.d.ts +11 -0
- package/types/src/models/env-file.model.d.ts +1 -0
- package/types/src/models/launch-json.model.d.ts +2 -0
- package/types/src/models/package-json.model.d.ts +16 -6
- package/types/src/models/project.model.d.ts +3 -0
- package/types/src/webapi/api-name.d.ts +14 -0
- package/types/src/webapi/const.d.ts +15 -5
- package/types/src/webapi/create-api.d.ts +4 -0
- package/types/src/webapi/features/biome-format.d.ts +1 -1
- package/types/src/webapi/models/api-package-json.model.d.ts +4 -3
- package/types/src/webapi/models/main-source-file.model.d.ts +6 -0
- package/types/src/webapi/models/production-dockerfile.model.d.ts +13 -2
|
@@ -10,7 +10,6 @@ Object.defineProperty(exports, "AuthFeature", {
|
|
|
10
10
|
});
|
|
11
11
|
const _prompt = require("../../domain/prompt.js");
|
|
12
12
|
const _const = require("../../models/const.js");
|
|
13
|
-
const _const1 = require("../const.js");
|
|
14
13
|
const _authconfigmodel = require("../models/auth-config.model.js");
|
|
15
14
|
const _controllersourcefilemodel = require("../models/controller-source-file.model.js");
|
|
16
15
|
const _auth0cli = /*#__PURE__*/ _interop_require_wildcard(require("./auth0-cli.js"));
|
|
@@ -347,51 +346,52 @@ function createAuth0AdminUser(workspace, options, authConfig) {
|
|
|
347
346
|
}
|
|
348
347
|
function scaffoldLocalUserProfile(workspace) {
|
|
349
348
|
workspace.getModel(_const.WELL_KNOWN_FILES.PACKAGE_JSON)?.addDependency("@casl/ability", "^6.8.1");
|
|
350
|
-
workspace.
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
349
|
+
for (const project of workspace.getProjects()){
|
|
350
|
+
project.getModel(_const.WELL_KNOWN_FILES.API_PACKAGE_JSON)?.addDependency("@casl/ability", "^6.8.1");
|
|
351
|
+
project.getModel(_const.WELL_KNOWN_FILES.MAIN_TS)?.addEntity({
|
|
352
|
+
className: "UserEntity",
|
|
353
|
+
importPath: "./entities/user.entity.js"
|
|
354
|
+
}).addRepository({
|
|
355
|
+
className: "UserEntityRepository",
|
|
356
|
+
importPath: "./repositories/user.repository.js"
|
|
357
|
+
}).addService({
|
|
358
|
+
className: "UserService",
|
|
359
|
+
importPath: "./services/user.service.js",
|
|
360
|
+
scope: "request"
|
|
361
|
+
}).addImport("createAbilityFactory", "./auth/ability.factory.js").addImport("mapPrincipal", "./auth/ability.factory.js").setTypeOrmSeed([
|
|
362
|
+
"const sub = process.env.AUTH0_ADMIN_USER_SUB;",
|
|
363
|
+
"if (!sub) return;",
|
|
364
|
+
"const repo = dataSource.getRepository(UserEntity);",
|
|
365
|
+
"const existing = await repo.findOne({ where: { sub } });",
|
|
366
|
+
"if (existing) return;",
|
|
367
|
+
"await repo.save(repo.create({",
|
|
368
|
+
" sub,",
|
|
369
|
+
" email: process.env.AUTH0_ADMIN_USER_EMAIL ?? null,",
|
|
370
|
+
' displayName: process.env.AUTH0_ADMIN_USERNAME ?? "admin",',
|
|
371
|
+
' roles: ["admin"],',
|
|
372
|
+
"}));"
|
|
373
|
+
].join(" "));
|
|
374
|
+
project.addFile({
|
|
375
|
+
files: ()=>[
|
|
376
|
+
{
|
|
377
|
+
filePath: "src/entities/user.entity.ts",
|
|
378
|
+
content: USER_ENTITY_TS
|
|
379
|
+
},
|
|
380
|
+
{
|
|
381
|
+
filePath: "src/repositories/user.repository.ts",
|
|
382
|
+
content: USER_REPOSITORY_TS
|
|
383
|
+
},
|
|
384
|
+
{
|
|
385
|
+
filePath: "src/services/user.service.ts",
|
|
386
|
+
content: USER_SERVICE_TS
|
|
387
|
+
},
|
|
388
|
+
{
|
|
389
|
+
filePath: "src/auth/ability.factory.ts",
|
|
390
|
+
content: ABILITY_FACTORY_TS
|
|
391
|
+
}
|
|
392
|
+
]
|
|
393
|
+
});
|
|
394
|
+
}
|
|
395
395
|
for (const controller of workspace.getModels(_controllersourcefilemodel.ControllerSourceFile)){
|
|
396
396
|
controller.addImport("UserService", "../services/user.service.js").addConstructorParam("private readonly users: UserService");
|
|
397
397
|
controller.getMethod("getOne").setAsync(true).setBody([
|
|
@@ -426,13 +426,18 @@ function scaffold(workspace, options) {
|
|
|
426
426
|
controller.getMethod("update").addDecorator(`@Authorize("update", "${resource}")`);
|
|
427
427
|
controller.getMethod("remove").addDecorator(`@Authorize("delete", "${resource}")`);
|
|
428
428
|
}
|
|
429
|
-
const
|
|
430
|
-
|
|
429
|
+
for (const project of workspace.getProjects()){
|
|
430
|
+
project.getModel(_const.WELL_KNOWN_FILES.MAIN_TS)?.addSideEffectImport("@decohere/cortex/auth");
|
|
431
|
+
}
|
|
431
432
|
if (withLocalUsers) {
|
|
432
433
|
scaffoldLocalUserProfile(workspace);
|
|
433
|
-
|
|
434
|
+
for (const project of workspace.getProjects()){
|
|
435
|
+
project.getModel(_const.WELL_KNOWN_FILES.MAIN_TS)?.addBuilderCall(".withAuth(createAbilityFactory, { principalMapper: mapPrincipal })");
|
|
436
|
+
}
|
|
434
437
|
} else {
|
|
435
|
-
|
|
438
|
+
for (const project of workspace.getProjects()){
|
|
439
|
+
project.getModel(_const.WELL_KNOWN_FILES.MAIN_TS)?.addBuilderCall(".withAuth()");
|
|
440
|
+
}
|
|
436
441
|
}
|
|
437
442
|
// biome-ignore lint/suspicious/noTemplateCurlyInString: intentional YAML env-var placeholders
|
|
438
443
|
const issuerPlaceholder = "${AUTH0_ISSUER_BASE_URL}";
|
|
@@ -455,4 +460,4 @@ const AuthFeature = {
|
|
|
455
460
|
scaffold
|
|
456
461
|
};
|
|
457
462
|
|
|
458
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL2ZlYXR1cmVzL2F1dGguZmVhdHVyZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhc2ssIHBpY2sgfSBmcm9tIFwiLi4vLi4vZG9tYWluL3Byb21wdC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBDb25maWdZYW1sIH0gZnJvbSBcIi4uLy4uL21vZGVscy9jb25maWcteWFtbC5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgV0VMTF9LTk9XTl9GSUxFUyB9IGZyb20gXCIuLi8uLi9tb2RlbHMvY29uc3QuanNcIjtcbmltcG9ydCB0eXBlIHsgRW52RmlsZSB9IGZyb20gXCIuLi8uLi9tb2RlbHMvZW52LWZpbGUubW9kZWwuanNcIjtcbmltcG9ydCB0eXBlIHsgUGFja2FnZUpzb24gfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3BhY2thZ2UtanNvbi5tb2RlbC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBXb3Jrc3BhY2VTY2FmZm9sZCB9IGZyb20gXCIuLi8uLi9tb2RlbHMvcHJvamVjdC5tb2RlbC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBGZWF0dXJlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3NjYWZmb2xkLnNlcnZpY2UuanNcIjtcbmltcG9ydCB7IFdFQkFQSV9QUk9KRUNUX0RJUiB9IGZyb20gXCIuLi9jb25zdC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBBcGlQYWNrYWdlSnNvbiB9IGZyb20gXCIuLi9tb2RlbHMvYXBpLXBhY2thZ2UtanNvbi5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgQXV0aENvbmZpZ01vZGVsIH0gZnJvbSBcIi4uL21vZGVscy9hdXRoLWNvbmZpZy5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgQ29udHJvbGxlclNvdXJjZUZpbGUgfSBmcm9tIFwiLi4vbW9kZWxzL2NvbnRyb2xsZXItc291cmNlLWZpbGUubW9kZWwuanNcIjtcbmltcG9ydCB0eXBlIHsgTWFpblNvdXJjZUZpbGUgfSBmcm9tIFwiLi4vbW9kZWxzL21haW4tc291cmNlLWZpbGUubW9kZWwuanNcIjtcbmltcG9ydCAqIGFzIGF1dGgwQ2xpIGZyb20gXCIuL2F1dGgwLWNsaS5qc1wiO1xuXG5leHBvcnQgdHlwZSBBdXRoT3B0aW9ucyA9IHtcblx0YXV0aFByb3ZpZGVyPzogXCJhdXRoMFwiIHwgXCJub25lXCI7XG5cdGlzc3VlckJhc2VVcmw/OiBzdHJpbmc7XG5cdGF1ZGllbmNlPzogc3RyaW5nO1xuXHRkYXRhYmFzZVByb3ZpZGVyPzogXCJub25lXCIgfCBcInBvc3RncmVzL3R5cGVvcm1cIjtcblx0YWRtaW5Vc2VybmFtZT86IHN0cmluZztcblx0YWRtaW5QYXNzd29yZD86IHN0cmluZztcbn07XG5cbmNvbnN0IEFETUlOX1JPTEUgPSBcImFkbWluXCI7XG5cbmNvbnN0IFVTRVJfRU5USVRZX1RTID0gYGltcG9ydCB7IENvbHVtbiwgRW50aXR5LCBQcmltYXJ5R2VuZXJhdGVkQ29sdW1uIH0gZnJvbSBcInR5cGVvcm1cIjtcbmltcG9ydCB0eXBlIHsgRW50aXR5IGFzIElFbnRpdHkgfSBmcm9tIFwiQGRlY29oZXJlL2NvZGV4XCI7XG5cbkBFbnRpdHkoKVxuZXhwb3J0IGNsYXNzIFVzZXJFbnRpdHkgaW1wbGVtZW50cyBJRW50aXR5IHtcblxcdEBQcmltYXJ5R2VuZXJhdGVkQ29sdW1uKClcblxcdHB1YmxpYyBpZCE6IG51bWJlcjtcblxuXFx0QENvbHVtbih7IHVuaXF1ZTogdHJ1ZSB9KVxuXFx0cHVibGljIHN1YiE6IHN0cmluZztcblxuXFx0QENvbHVtbih7IHR5cGU6IFwidmFyY2hhclwiLCBudWxsYWJsZTogdHJ1ZSB9KVxuXFx0cHVibGljIGVtYWlsITogc3RyaW5nIHwgbnVsbDtcblxuXFx0QENvbHVtbigpXG5cXHRwdWJsaWMgZGlzcGxheU5hbWUhOiBzdHJpbmc7XG5cblxcdC8qKiBBcHAtb3duZWQgcm9sZXMuIFRoZSBcXGBhZG1pblxcYCByb2xlIGdyYW50cyBDQVNMIFxcYG1hbmFnZVxcYC9cXGBhbGxcXGAgKHdpbGRjYXJkKS4gKi9cblxcdEBDb2x1bW4oeyB0eXBlOiBcInNpbXBsZS1qc29uXCIsIGRlZmF1bHQ6IFwiW11cIiB9KVxuXFx0cHVibGljIHJvbGVzITogc3RyaW5nW107XG59XG5gO1xuXG5jb25zdCBVU0VSX1JFUE9TSVRPUllfVFMgPSBgaW1wb3J0IHsgaW5qZWN0YWJsZSB9IGZyb20gXCJAZGVjb2hlcmUvY3J1Y2libGUvZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgaW5qZWN0VW5pdE9mV29yayB9IGZyb20gXCJAZGVjb2hlcmUvY29kZXhcIjtcbmltcG9ydCB7IFR5cGVPcm1SZXBvc2l0b3J5LCBUeXBlT3JtVW5pdE9mV29yayB9IGZyb20gXCJAZGVjb2hlcmUvY29kZXgtdHlwZW9ybVwiO1xuaW1wb3J0IHsgVXNlckVudGl0eSB9IGZyb20gXCIuLi9lbnRpdGllcy91c2VyLmVudGl0eS5qc1wiO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVXNlckVudGl0eVJlcG9zaXRvcnkgZXh0ZW5kcyBUeXBlT3JtUmVwb3NpdG9yeTxVc2VyRW50aXR5PiB7XG5cXHRwdWJsaWMgY29uc3RydWN0b3IoQGluamVjdFVuaXRPZldvcmsoKSB1bml0T2ZXb3JrOiBUeXBlT3JtVW5pdE9mV29yaykge1xuXFx0XFx0c3VwZXIodW5pdE9mV29yaywgVXNlckVudGl0eSk7XG5cXHR9XG5cblxcdHB1YmxpYyBmaW5kQnlTdWIoc3ViOiBzdHJpbmcpOiBQcm9taXNlPFVzZXJFbnRpdHkgfCBudWxsPiB7XG5cXHRcXHRyZXR1cm4gdGhpcy5maXJzdE9yRGVmYXVsdCh7IHdoZXJlOiB7IHN1YiB9IH0pO1xuXFx0fVxufVxuYDtcblxuY29uc3QgVVNFUl9TRVJWSUNFX1RTID0gYGltcG9ydCB7IGluamVjdGFibGUgfSBmcm9tIFwiQGRlY29oZXJlL2NydWNpYmxlL2RlY29yYXRvcnNcIjtcbmltcG9ydCB0eXBlIHsgUHJpbmNpcGFsIH0gZnJvbSBcIkBkZWNvaGVyZS9jb3J0ZXhcIjtcbmltcG9ydCB7IFVzZXJFbnRpdHkgfSBmcm9tIFwiLi4vZW50aXRpZXMvdXNlci5lbnRpdHkuanNcIjtcbmltcG9ydCB7IFVzZXJFbnRpdHlSZXBvc2l0b3J5IH0gZnJvbSBcIi4uL3JlcG9zaXRvcmllcy91c2VyLnJlcG9zaXRvcnkuanNcIjtcblxuZnVuY3Rpb24gY2xhaW1TdHJpbmcocHJpbmNpcGFsOiBQcmluY2lwYWwgfCB1bmRlZmluZWQsIGtleTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblxcdGNvbnN0IHZhbHVlID0gcHJpbmNpcGFsPy5ba2V5XTtcblxcdHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgdmFsdWUubGVuZ3RoID4gMCA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVXNlclNlcnZpY2Uge1xuXFx0cHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgdXNlcnM6IFVzZXJFbnRpdHlSZXBvc2l0b3J5KSB7fVxuXG5cXHQvKipcblxcdCAqIFVwc2VydCBhIGxvY2FsIHByb2ZpbGUga2V5ZWQgYnkgSldUIFxcYHN1YlxcYC5cblxcdCAqIFByb2ZpbGUgZmllbGRzIGZyb20gdGhlIHRva2VuIGZpbGwgZ2Fwczsgc2VlZGVkIHJvd3Mga2VlcCBkaXNwbGF5TmFtZS9lbWFpbC9yb2xlcy5cblxcdCAqL1xuXFx0cHVibGljIGFzeW5jIGVuc3VyZUZyb21QcmluY2lwYWwocHJpbmNpcGFsOiBQcmluY2lwYWwgfCB1bmRlZmluZWQpOiBQcm9taXNlPFVzZXJFbnRpdHk+IHtcblxcdFxcdGNvbnN0IHN1YiA9IHByaW5jaXBhbD8uc3ViO1xuXFx0XFx0aWYgKCFzdWIpIHtcblxcdFxcdFxcdHRocm93IG5ldyBFcnJvcihcIkF1dGhlbnRpY2F0ZWQgcmVxdWVzdCBpcyBtaXNzaW5nIHByaW5jaXBhbC5zdWJcIik7XG5cXHRcXHR9XG5cblxcdFxcdGNvbnN0IGVtYWlsID1cblxcdFxcdFxcdGNsYWltU3RyaW5nKHByaW5jaXBhbCwgXCJlbWFpbFwiKSA/PyBjbGFpbVN0cmluZyhwcmluY2lwYWwsIFwicHJlZmVycmVkX3VzZXJuYW1lXCIpO1xuXFx0XFx0Y29uc3QgZGlzcGxheUZyb21Ub2tlbiA9XG5cXHRcXHRcXHRjbGFpbVN0cmluZyhwcmluY2lwYWwsIFwibmFtZVwiKSA/P1xuXFx0XFx0XFx0Y2xhaW1TdHJpbmcocHJpbmNpcGFsLCBcIm5pY2tuYW1lXCIpID8/XG5cXHRcXHRcXHRlbWFpbDtcblxuXFx0XFx0Y29uc3QgZXhpc3RpbmcgPSBhd2FpdCB0aGlzLnVzZXJzLmZpbmRCeVN1YihzdWIpO1xuXFx0XFx0aWYgKGV4aXN0aW5nKSB7XG5cXHRcXHRcXHRsZXQgZGlydHkgPSBmYWxzZTtcblxcdFxcdFxcdGlmICghZXhpc3RpbmcuZW1haWwgJiYgZW1haWwpIHtcblxcdFxcdFxcdFxcdGV4aXN0aW5nLmVtYWlsID0gZW1haWw7XG5cXHRcXHRcXHRcXHRkaXJ0eSA9IHRydWU7XG5cXHRcXHRcXHR9XG5cXHRcXHRcXHRpZiAoZXhpc3RpbmcuZGlzcGxheU5hbWUgPT09IGV4aXN0aW5nLnN1YiAmJiBkaXNwbGF5RnJvbVRva2VuKSB7XG5cXHRcXHRcXHRcXHRleGlzdGluZy5kaXNwbGF5TmFtZSA9IGRpc3BsYXlGcm9tVG9rZW47XG5cXHRcXHRcXHRcXHRkaXJ0eSA9IHRydWU7XG5cXHRcXHRcXHR9XG5cXHRcXHRcXHRyZXR1cm4gZGlydHkgPyB0aGlzLnVzZXJzLnNhdmUoZXhpc3RpbmcpIDogZXhpc3Rpbmc7XG5cXHRcXHR9XG5cblxcdFxcdGNvbnN0IGNyZWF0ZWQgPSBuZXcgVXNlckVudGl0eSgpO1xuXFx0XFx0Y3JlYXRlZC5zdWIgPSBzdWI7XG5cXHRcXHRjcmVhdGVkLmVtYWlsID0gZW1haWwgPz8gbnVsbDtcblxcdFxcdGNyZWF0ZWQuZGlzcGxheU5hbWUgPSBkaXNwbGF5RnJvbVRva2VuID8/IHN1YjtcblxcdFxcdGNyZWF0ZWQucm9sZXMgPSBBcnJheS5pc0FycmF5KHByaW5jaXBhbC5yb2xlcylcblxcdFxcdFxcdD8gcHJpbmNpcGFsLnJvbGVzLmZpbHRlcigocik6IHIgaXMgc3RyaW5nID0+IHR5cGVvZiByID09PSBcInN0cmluZ1wiKVxuXFx0XFx0XFx0OiBbXTtcblxcdFxcdHJldHVybiB0aGlzLnVzZXJzLnNhdmUoY3JlYXRlZCk7XG5cXHR9XG59XG5gO1xuXG5jb25zdCBBQklMSVRZX0ZBQ1RPUllfVFMgPSBgaW1wb3J0IHsgQWJpbGl0eUJ1aWxkZXIsIGNyZWF0ZU1vbmdvQWJpbGl0eSB9IGZyb20gXCJAY2FzbC9hYmlsaXR5XCI7XG5pbXBvcnQgdHlwZSB7IFByaW5jaXBhbCB9IGZyb20gXCJAZGVjb2hlcmUvY29ydGV4XCI7XG5cbi8qKiBSb290IHJvbGUg4oCUIGV4cGFuZHMgdG8gQ0FTTCBcXGBtYW5hZ2VcXGAvXFxgYWxsXFxgIChjb3ZlcnMgZXZlcnkgZnV0dXJlIGFiaWxpdHkpLiAqL1xuZXhwb3J0IGNvbnN0IEFETUlOX1JPTEUgPSBcImFkbWluXCI7XG5cbi8qKlxuICogUm9sZXMgYXJlIGNvbGxlY3Rpb25zIG9mIGFiaWxpdGllcy4gQWRtaW4gaXMgYSB3aWxkY2FyZCwgbm90IGFuIGVudW1lcmF0ZWQgbGlzdC5cbiAqIE5vbi1hZG1pbiBwcmluY2lwYWxzIGtlZXAgQXV0aDAgc2NvcGUgLyBwZXJtaXNzaW9uIOKGkiBhYmlsaXR5IG1hcHBpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBYmlsaXR5RmFjdG9yeShwcmluY2lwYWw6IFByaW5jaXBhbCkge1xuXFx0Y29uc3QgeyBjYW4sIGJ1aWxkIH0gPSBuZXcgQWJpbGl0eUJ1aWxkZXIoY3JlYXRlTW9uZ29BYmlsaXR5KTtcblxcdGlmIChwcmluY2lwYWwucm9sZXM/LmluY2x1ZGVzKEFETUlOX1JPTEUpKSB7XG5cXHRcXHRjYW4oXCJtYW5hZ2VcIiwgXCJhbGxcIik7XG5cXHRcXHRyZXR1cm4gYnVpbGQoKTtcblxcdH1cblxcdGZvciAoY29uc3Qgc2NvcGUgb2YgcHJpbmNpcGFsLnNjb3BlcyA/PyBbXSkge1xuXFx0XFx0Y29uc3QgW2FjdGlvbiwgc3ViamVjdF0gPSBzY29wZS5zcGxpdChcIjpcIik7XG5cXHRcXHRpZiAoYWN0aW9uICYmIHN1YmplY3QpIGNhbihhY3Rpb24sIHN1YmplY3QpO1xuXFx0fVxuXFx0cmV0dXJuIGJ1aWxkKCk7XG59XG5cbi8qKlxuICogTWFwIEpXVCBwYXlsb2FkIOKGkiBQcmluY2lwYWwuXG4gKlxuICogLSBcXGByb2xlc1xcYCBjb21lIGZyb20gdGhlIElkUCAoQXV0aDAgUkJBQyAvIEFjdGlvbiBmcm9tIGFwcF9tZXRhZGF0YSkuIEFkbWlucyBhcmVcbiAqICAgYXNzaWduZWQgaW4gQXV0aDAg4oCUIG5vIHNlcnZlciBlbnYgY2hhbmdlIHJlcXVpcmVkIGZvciBhZGRpdGlvbmFsIGFkbWlucy5cbiAqIC0gXFxgQVVUSDBfQURNSU5fVVNFUl9TVUJcXGAgaXMgYW4gb3B0aW9uYWwgYm9vdHN0cmFwIHNvIHRoZSBzZWVkZWQgYWRtaW4gd29ya3NcbiAqICAgYmVmb3JlL3dpdGhvdXQgcm9sZXMgb24gdGhlIGFjY2VzcyB0b2tlbi5cbiAqIC0gQVBJIHBlcm1pc3Npb25zIGFyZSB0YWtlbiBmcm9tIFxcYHNjb3BlXFxgIGFuZCBmcm9tIEF1dGgwJ3MgXFxgcGVybWlzc2lvbnNcXGAgY2xhaW0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXBQcmluY2lwYWwocGF5bG9hZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBQcmluY2lwYWwge1xuXFx0Y29uc3Qgc3ViID0gdHlwZW9mIHBheWxvYWQuc3ViID09PSBcInN0cmluZ1wiID8gcGF5bG9hZC5zdWIgOiBcIlwiO1xuXFx0Y29uc3QgZnJvbVNjb3BlQ2xhaW0gPVxuXFx0XFx0dHlwZW9mIHBheWxvYWQuc2NvcGUgPT09IFwic3RyaW5nXCJcblxcdFxcdFxcdD8gcGF5bG9hZC5zY29wZS5zcGxpdChcIiBcIikuZmlsdGVyKEJvb2xlYW4pXG5cXHRcXHRcXHQ6IEFycmF5LmlzQXJyYXkocGF5bG9hZC5zY29wZXMpXG5cXHRcXHRcXHRcXHQ/IChwYXlsb2FkLnNjb3BlcyBhcyB1bmtub3duW10pLmZpbHRlcigocyk6IHMgaXMgc3RyaW5nID0+IHR5cGVvZiBzID09PSBcInN0cmluZ1wiKVxuXFx0XFx0XFx0XFx0OiBbXTtcblxcdGNvbnN0IGZyb21QZXJtaXNzaW9ucyA9IEFycmF5LmlzQXJyYXkocGF5bG9hZC5wZXJtaXNzaW9ucylcblxcdFxcdD8gKHBheWxvYWQucGVybWlzc2lvbnMgYXMgdW5rbm93bltdKS5maWx0ZXIoKHMpOiBzIGlzIHN0cmluZyA9PiB0eXBlb2YgcyA9PT0gXCJzdHJpbmdcIilcblxcdFxcdDogW107XG5cXHRjb25zdCBtZXJnZWQgPSBbLi4ubmV3IFNldChbLi4uZnJvbVNjb3BlQ2xhaW0sIC4uLmZyb21QZXJtaXNzaW9uc10pXTtcblxcdGNvbnN0IHNjb3BlcyA9IG1lcmdlZC5sZW5ndGggPiAwID8gbWVyZ2VkIDogdW5kZWZpbmVkO1xuXFx0Y29uc3QgZnJvbVRva2VuID0gQXJyYXkuaXNBcnJheShwYXlsb2FkLnJvbGVzKVxuXFx0XFx0PyAocGF5bG9hZC5yb2xlcyBhcyB1bmtub3duW10pLmZpbHRlcigocik6IHIgaXMgc3RyaW5nID0+IHR5cGVvZiByID09PSBcInN0cmluZ1wiKVxuXFx0XFx0OiBbXTtcblxcdGNvbnN0IHJvbGVzID1cblxcdFxcdHN1YiAmJiBzdWIgPT09IHByb2Nlc3MuZW52LkFVVEgwX0FETUlOX1VTRVJfU1VCXG5cXHRcXHRcXHQ/IFsuLi5uZXcgU2V0KFtBRE1JTl9ST0xFLCAuLi5mcm9tVG9rZW5dKV1cblxcdFxcdFxcdDogZnJvbVRva2VuLmxlbmd0aCA+IDBcblxcdFxcdFxcdFxcdD8gZnJvbVRva2VuXG5cXHRcXHRcXHRcXHQ6IHVuZGVmaW5lZDtcblxcdHJldHVybiB7IC4uLnBheWxvYWQsIHN1Yiwgcm9sZXMsIHNjb3BlcyB9O1xufVxuYDtcblxuYXN5bmMgZnVuY3Rpb24gZ2V0T3B0aW9ucyhcblx0d29ya3NwYWNlOiBXb3Jrc3BhY2VTY2FmZm9sZCxcblx0Y2xpT3B0aW9uczogUGFydGlhbDxBdXRoT3B0aW9ucz4sXG4pOiBQcm9taXNlPFBhcnRpYWw8QXV0aE9wdGlvbnM+PiB7XG5cdGlmIChjbGlPcHRpb25zLmF1dGhQcm92aWRlciA9PT0gXCJhdXRoMFwiICYmICFjbGlPcHRpb25zLmlzc3VlckJhc2VVcmwpIHtcblx0XHRyZXR1cm4gZ2V0QXV0aDBPcHRpb25zKHdvcmtzcGFjZSwgY2xpT3B0aW9ucyk7XG5cdH1cblx0aWYgKGNsaU9wdGlvbnMuYXV0aFByb3ZpZGVyICE9IG51bGwpIHJldHVybiB7fTtcblxuXHRjb25zdCBjaG9pY2VzID0gW3sgbGFiZWw6IFwibm9uZVwiIGFzIGNvbnN0IH0sIHsgbGFiZWw6IFwiYXV0aDBcIiBhcyBjb25zdCB9XTtcblx0Y29uc3Qgc2VsZWN0ZWQgPSBhd2FpdCBwaWNrKFwiXFxuICBBdXRoIHByb3ZpZGVyOiBcIiwgY2hvaWNlcywgKGMpID0+IGMubGFiZWwpO1xuXHRjb25zdCBwcm92aWRlciA9IHNlbGVjdGVkPy5sYWJlbCA/PyBcIm5vbmVcIjtcblxuXHRpZiAocHJvdmlkZXIgIT09IFwiYXV0aDBcIikgcmV0dXJuIHsgYXV0aFByb3ZpZGVyOiBcIm5vbmVcIiB9O1xuXG5cdHJldHVybiBnZXRBdXRoME9wdGlvbnMod29ya3NwYWNlLCBjbGlPcHRpb25zKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0QXV0aDBPcHRpb25zKFxuXHR3b3Jrc3BhY2U6IFdvcmtzcGFjZVNjYWZmb2xkLFxuXHRjbGlPcHRpb25zOiBQYXJ0aWFsPEF1dGhPcHRpb25zPixcbik6IFByb21pc2U8UGFydGlhbDxBdXRoT3B0aW9ucz4+IHtcblx0aWYgKCFhdXRoMENsaS5pc0luc3RhbGxlZCgpKSB7XG5cdFx0Y29uc29sZS5lcnJvcihcblx0XHRcdFwiXFxuICBUaGUgQXV0aDAgQ0xJIGlzIHJlcXVpcmVkIGZvciBhdXRvbWF0ZWQgc2V0dXAuXFxuXCIgK1xuXHRcdFx0XHRcIiAgSW5zdGFsbDogYnJldyBpbnN0YWxsIGF1dGgwL2F1dGgwLWNsaS9hdXRoMFxcblwiICtcblx0XHRcdFx0XCIgIE9yIHZpc2l0OiBodHRwczovL2dpdGh1Yi5jb20vYXV0aDAvYXV0aDAtY2xpXFxuXCIsXG5cdFx0KTtcblx0XHRwcm9jZXNzLmV4aXQoMSk7XG5cdH1cblxuXHRwcm9jZXNzLnN0ZG91dC53cml0ZShcIlxcbiAgQ2hlY2tpbmcgQXV0aDAgY3JlZGVudGlhbHMuLi5cIik7XG5cdGxldCB0ZW5hbnRzID0gYXV0aDBDbGkubGlzdFRlbmFudHMoKTtcblx0aWYgKHRlbmFudHMubGVuZ3RoID09PSAwKSB7XG5cdFx0cHJvY2Vzcy5zdGRvdXQud3JpdGUoXCIgbm90IGxvZ2dlZCBpbi5cXG5cIik7XG5cdFx0Y29uc29sZS5sb2coXCIgIExvZ2dpbmcgaW4gdG8gQXV0aDAgKHlvdXIgYnJvd3NlciB3aWxsIG9wZW4pLi4uXCIpO1xuXHRcdGlmICghYXV0aDBDbGkubG9naW4oKSkge1xuXHRcdFx0Y29uc29sZS5lcnJvcihcIlxcbiAgQXV0aDAgbG9naW4gZmFpbGVkLlwiKTtcblx0XHRcdHByb2Nlc3MuZXhpdCgxKTtcblx0XHR9XG5cdFx0dGVuYW50cyA9IGF1dGgwQ2xpLmxpc3RUZW5hbnRzKCk7XG5cdH1cblxuXHR0cnkge1xuXHRcdGF1dGgwQ2xpLmxpc3RBcGlzKCk7XG5cdFx0cHJvY2Vzcy5zdGRvdXQud3JpdGUoXCIgb2suXFxuXCIpO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHRpZiAoZXJyIGluc3RhbmNlb2YgYXV0aDBDbGkuQXV0aDBBdXRoRXJyb3IpIHtcblx0XHRcdHByb2Nlc3Muc3Rkb3V0LndyaXRlKFwiIHRva2VuIGV4cGlyZWQuXFxuXCIpO1xuXHRcdFx0Y29uc29sZS5sb2coXCIgIFJlLWF1dGhlbnRpY2F0aW5nICh5b3VyIGJyb3dzZXIgd2lsbCBvcGVuKS4uLlwiKTtcblx0XHRcdGlmICghYXV0aDBDbGkubG9naW4oKSkge1xuXHRcdFx0XHRjb25zb2xlLmVycm9yKFwiXFxuICBBdXRoMCBsb2dpbiBmYWlsZWQuXCIpO1xuXHRcdFx0XHRwcm9jZXNzLmV4aXQoMSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgYWN0aXZlID0gdGVuYW50cy5maW5kKCh0KSA9PiB0LmFjdGl2ZSkgPz8gdGVuYW50c1swXTtcblx0Y29uc3QgaXNzdWVyQmFzZVVybCA9IGBodHRwczovLyR7YWN0aXZlLm5hbWV9YDtcblx0Y29uc29sZS5sb2coYFxcbiAg4pyTIEF1dGgwIHRlbmFudDogJHtpc3N1ZXJCYXNlVXJsfWApO1xuXG5cdHByb2Nlc3Muc3Rkb3V0LndyaXRlKFwiXFxuICBGZXRjaGluZyBBdXRoMCBBUElzLi4uXCIpO1xuXHRjb25zdCB1c2VyQXBpcyA9IGF1dGgwQ2xpLmxpc3RBcGlzKCkuZmlsdGVyKChhKSA9PiAhYS5uYW1lLmluY2x1ZGVzKFwiTWFuYWdlbWVudCBBUElcIikpO1xuXHRwcm9jZXNzLnN0ZG91dC53cml0ZShgIGZvdW5kICR7dXNlckFwaXMubGVuZ3RofS5cXG5gKTtcblxuXHR0eXBlIEFwaUNob2ljZSA9IHsgbGFiZWw6IHN0cmluZzsgZXhpc3Rpbmc6IHN0cmluZyB8IG51bGwgfTtcblx0Y29uc3QgcHJvamVjdE5hbWUgPSB3b3Jrc3BhY2UubmFtZTtcblx0Y29uc3QgYXBpQ2hvaWNlczogQXBpQ2hvaWNlW10gPSBbXG5cdFx0eyBsYWJlbDogYDxuZXc+IGh0dHBzOi8vYXBpLiR7cHJvamVjdE5hbWV9YCwgZXhpc3Rpbmc6IG51bGwgfSxcblx0XHQuLi51c2VyQXBpcy5tYXAoKGEpID0+ICh7IGxhYmVsOiBgJHthLm5hbWV9IOKAlCAke2EuaWRlbnRpZmllcn1gLCBleGlzdGluZzogYS5pZGVudGlmaWVyIH0pKSxcblx0XTtcblxuXHRjb25zdCBhcGlTZWxlY3RlZCA9IGF3YWl0IHBpY2soXCJcXG4gIFNlbGVjdCBBdXRoMCBBUEk6IFwiLCBhcGlDaG9pY2VzLCAoYykgPT4gYy5sYWJlbCk7XG5cblx0bGV0IGF1ZGllbmNlOiBzdHJpbmc7XG5cdGlmICghYXBpU2VsZWN0ZWQgfHwgYXBpU2VsZWN0ZWQuZXhpc3RpbmcgPT09IG51bGwpIHtcblx0XHRjb25zdCBkZWZhdWx0SWQgPSBgaHR0cHM6Ly9hcGkuJHtwcm9qZWN0TmFtZX1gO1xuXHRcdGF1ZGllbmNlID0gYXdhaXQgYXNrKGAgIEFQSSBJZGVudGlmaWVyIFske2RlZmF1bHRJZH1dOiBgLCBkZWZhdWx0SWQpO1xuXHRcdGNvbnNvbGUubG9nKFwiXFxuICBDcmVhdGluZyBBdXRoMCBBUEkuLi5cIik7XG5cdFx0YXVkaWVuY2UgPSBhdXRoMENsaS5jcmVhdGVBcGkoYCR7cHJvamVjdE5hbWV9IEFQSWAsIGF1ZGllbmNlKS5pZGVudGlmaWVyO1xuXHRcdGNvbnNvbGUubG9nKGAgIFxcdTI3MTMgQVBJIGNyZWF0ZWQ6ICR7YXVkaWVuY2V9YCk7XG5cdH0gZWxzZSB7XG5cdFx0YXVkaWVuY2UgPSBhcGlTZWxlY3RlZC5leGlzdGluZztcblx0XHRjb25zb2xlLmxvZyhgICBcXHUyNzEzIFNlbGVjdGVkOiAke2F1ZGllbmNlfWApO1xuXHRcdHRyeSB7XG5cdFx0XHRhdXRoMENsaS51cGRhdGVBcGlTY29wZXMoYXVkaWVuY2UpO1xuXHRcdFx0Y29uc29sZS5sb2coYCAgXFx1MjcxMyBBUEkgc2NvcGVzIGVuc3VyZWQgKCR7YXV0aDBDbGkuSEVMTE9fQVBJX1NDT1BFUy5qb2luKFwiLCBcIil9KWApO1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0Y29uc29sZS5lcnJvcihcblx0XHRcdFx0XCIgIOKclyBGYWlsZWQgdG8gdXBkYXRlIEFQSSBzY29wZXMg4oCUIGFkZCBIZWxsbyBzY29wZXMgaW4gdGhlIEF1dGgwIGRhc2hib2FyZC5cIixcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3Qgd2l0aExvY2FsVXNlcnMgPSBjbGlPcHRpb25zLmRhdGFiYXNlUHJvdmlkZXIgPT09IFwicG9zdGdyZXMvdHlwZW9ybVwiO1xuXHRsZXQgYWRtaW5Vc2VybmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRsZXQgYWRtaW5QYXNzd29yZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRpZiAod2l0aExvY2FsVXNlcnMpIHtcblx0XHRhZG1pblVzZXJuYW1lID1cblx0XHRcdGNsaU9wdGlvbnMuYWRtaW5Vc2VybmFtZSA/PyAoYXdhaXQgYXNrKFwiXFxuICBBZG1pbiB1c2VybmFtZSBbYWRtaW5dOiBcIiwgXCJhZG1pblwiKSk7XG5cdFx0YWRtaW5QYXNzd29yZCA9IGNsaU9wdGlvbnMuYWRtaW5QYXNzd29yZDtcblx0XHRpZiAoYWRtaW5QYXNzd29yZCA9PSBudWxsKSB7XG5cdFx0XHRhZG1pblBhc3N3b3JkID0gYXdhaXQgYXNrKFwiICBBZG1pbiBwYXNzd29yZCAobGVhdmUgYmxhbmsgdG8gZ2VuZXJhdGUpOiBcIik7XG5cdFx0XHRpZiAoIWFkbWluUGFzc3dvcmQpIHtcblx0XHRcdFx0YWRtaW5QYXNzd29yZCA9IGF1dGgwQ2xpLmdlbmVyYXRlQWRtaW5QYXNzd29yZCgpO1xuXHRcdFx0XHRjb25zb2xlLmxvZyhgICDinJMgR2VuZXJhdGVkIGFkbWluIHBhc3N3b3JkICh3cml0dGVuIHRvIC5lbnYpOiAke2FkbWluUGFzc3dvcmR9YCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRhdXRoUHJvdmlkZXI6IFwiYXV0aDBcIixcblx0XHRpc3N1ZXJCYXNlVXJsLFxuXHRcdGF1ZGllbmNlLFxuXHRcdC4uLih3aXRoTG9jYWxVc2VycyA/IHsgYWRtaW5Vc2VybmFtZSwgYWRtaW5QYXNzd29yZCB9IDoge30pLFxuXHR9O1xufVxuXG5mdW5jdGlvbiBhZG1pbkVtYWlsKHdvcmtzcGFjZU5hbWU6IHN0cmluZywgdXNlcm5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdGlmICh1c2VybmFtZS5pbmNsdWRlcyhcIkBcIikpIHJldHVybiB1c2VybmFtZTtcblx0Y29uc3Qgc2x1ZyA9IHdvcmtzcGFjZU5hbWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXmEtejAtOS1dL2csIFwiLVwiKTtcblx0cmV0dXJuIGAke3VzZXJuYW1lfUAke3NsdWd9LmV4YW1wbGUuY29tYDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQXV0aDBBZG1pblVzZXIoXG5cdHdvcmtzcGFjZTogV29ya3NwYWNlU2NhZmZvbGQsXG5cdG9wdGlvbnM6IEF1dGhPcHRpb25zLFxuXHRhdXRoQ29uZmlnOiBBdXRoQ29uZmlnTW9kZWwsXG4pOiB2b2lkIHtcblx0Y29uc3QgdXNlcm5hbWUgPSBvcHRpb25zLmFkbWluVXNlcm5hbWUgPz8gXCJhZG1pblwiO1xuXHRjb25zdCBwYXNzd29yZCA9IG9wdGlvbnMuYWRtaW5QYXNzd29yZDtcblx0aWYgKCFwYXNzd29yZCkgcmV0dXJuO1xuXG5cdGNvbnN0IGVtYWlsID0gYWRtaW5FbWFpbCh3b3Jrc3BhY2UubmFtZSwgdXNlcm5hbWUpO1xuXHR0cnkge1xuXHRcdGNvbnN0IGFkbWluID0gYXV0aDBDbGkuY3JlYXRlQWRtaW5EYXRhYmFzZVVzZXIoeyBlbWFpbCwgcGFzc3dvcmQsIHVzZXJuYW1lIH0pO1xuXHRcdGF1dGhDb25maWcuc2V0QWRtaW5Vc2VyKHtcblx0XHRcdHN1YjogYWRtaW4udXNlcl9pZCxcblx0XHRcdGVtYWlsOiBhZG1pbi5lbWFpbCxcblx0XHRcdHBhc3N3b3JkOiBhZG1pbi5wYXNzd29yZCxcblx0XHRcdHVzZXJuYW1lOiBhZG1pbi51c2VybmFtZSxcblx0XHR9KTtcblx0XHR3b3Jrc3BhY2Vcblx0XHRcdC5nZXRNb2RlbDxFbnZGaWxlPihXRUxMX0tOT1dOX0ZJTEVTLkVOVl9GSUxFKVxuXHRcdFx0Py5hZGRFbnRyeShcIkFVVEgwX0FETUlOX1VTRVJfU1VCXCIsIGFkbWluLnVzZXJfaWQpXG5cdFx0XHQuYWRkRW50cnkoXCJBVVRIMF9BRE1JTl9VU0VSX0VNQUlMXCIsIGFkbWluLmVtYWlsKVxuXHRcdFx0LmFkZEVudHJ5KFwiQVVUSDBfQURNSU5fVVNFUl9QQVNTV09SRFwiLCBhZG1pbi5wYXNzd29yZClcblx0XHRcdC5hZGRFbnRyeShcIkFVVEgwX0FETUlOX1VTRVJOQU1FXCIsIGFkbWluLnVzZXJuYW1lKTtcblx0XHRjb25zb2xlLmxvZyhgICDinJMgQXV0aDAgYWRtaW4gdXNlciByZWFkeTogJHthZG1pbi5lbWFpbH0gKHJvbGU6ICR7QURNSU5fUk9MRX0pYCk7XG5cdFx0Y29uc29sZS5sb2coYCAgICBMb2dpbiB3aXRoIEVNQUlMIChub3QgdXNlcm5hbWUpOiAke2FkbWluLmVtYWlsfWApO1xuXHRcdGNvbnNvbGUubG9nKGAgICAgUGFzc3dvcmQ6IHNlZSBBVVRIMF9BRE1JTl9VU0VSX1BBU1NXT1JEIGluIC5lbnZgKTtcblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0Y29uc29sZS5lcnJvcihcblx0XHRcdGAgIOKclyBGYWlsZWQgdG8gZW5zdXJlIEF1dGgwIGFkbWluIHVzZXIgKCR7ZW1haWx9KTogJHtlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogZXJyfWAsXG5cdFx0KTtcblx0fVxufVxuXG5mdW5jdGlvbiBzY2FmZm9sZExvY2FsVXNlclByb2ZpbGUod29ya3NwYWNlOiBXb3Jrc3BhY2VTY2FmZm9sZCk6IHZvaWQge1xuXHR3b3Jrc3BhY2Vcblx0XHQuZ2V0TW9kZWw8UGFja2FnZUpzb24+KFdFTExfS05PV05fRklMRVMuUEFDS0FHRV9KU09OKVxuXHRcdD8uYWRkRGVwZW5kZW5jeShcIkBjYXNsL2FiaWxpdHlcIiwgXCJeNi44LjFcIik7XG5cdHdvcmtzcGFjZVxuXHRcdC5nZXRNb2RlbDxBcGlQYWNrYWdlSnNvbj4oV0VMTF9LTk9XTl9GSUxFUy5BUElfUEFDS0FHRV9KU09OKVxuXHRcdD8uYWRkRGVwZW5kZW5jeShcIkBjYXNsL2FiaWxpdHlcIiwgXCJeNi44LjFcIik7XG5cblx0Y29uc3QgbWFpbiA9IHdvcmtzcGFjZS5nZXRNb2RlbDxNYWluU291cmNlRmlsZT4oV0VMTF9LTk9XTl9GSUxFUy5NQUlOX1RTKTtcblx0bWFpblxuXHRcdD8uYWRkRW50aXR5KHsgY2xhc3NOYW1lOiBcIlVzZXJFbnRpdHlcIiwgaW1wb3J0UGF0aDogXCIuL2VudGl0aWVzL3VzZXIuZW50aXR5LmpzXCIgfSlcblx0XHQuYWRkUmVwb3NpdG9yeSh7XG5cdFx0XHRjbGFzc05hbWU6IFwiVXNlckVudGl0eVJlcG9zaXRvcnlcIixcblx0XHRcdGltcG9ydFBhdGg6IFwiLi9yZXBvc2l0b3JpZXMvdXNlci5yZXBvc2l0b3J5LmpzXCIsXG5cdFx0fSlcblx0XHQuYWRkU2VydmljZSh7XG5cdFx0XHRjbGFzc05hbWU6IFwiVXNlclNlcnZpY2VcIixcblx0XHRcdGltcG9ydFBhdGg6IFwiLi9zZXJ2aWNlcy91c2VyLnNlcnZpY2UuanNcIixcblx0XHRcdHNjb3BlOiBcInJlcXVlc3RcIixcblx0XHR9KVxuXHRcdC5hZGRJbXBvcnQoXCJjcmVhdGVBYmlsaXR5RmFjdG9yeVwiLCBcIi4vYXV0aC9hYmlsaXR5LmZhY3RvcnkuanNcIilcblx0XHQuYWRkSW1wb3J0KFwibWFwUHJpbmNpcGFsXCIsIFwiLi9hdXRoL2FiaWxpdHkuZmFjdG9yeS5qc1wiKVxuXHRcdC5zZXRUeXBlT3JtU2VlZChcblx0XHRcdFtcblx0XHRcdFx0XCJjb25zdCBzdWIgPSBwcm9jZXNzLmVudi5BVVRIMF9BRE1JTl9VU0VSX1NVQjtcIixcblx0XHRcdFx0XCJpZiAoIXN1YikgcmV0dXJuO1wiLFxuXHRcdFx0XHRcImNvbnN0IHJlcG8gPSBkYXRhU291cmNlLmdldFJlcG9zaXRvcnkoVXNlckVudGl0eSk7XCIsXG5cdFx0XHRcdFwiY29uc3QgZXhpc3RpbmcgPSBhd2FpdCByZXBvLmZpbmRPbmUoeyB3aGVyZTogeyBzdWIgfSB9KTtcIixcblx0XHRcdFx0XCJpZiAoZXhpc3RpbmcpIHJldHVybjtcIixcblx0XHRcdFx0XCJhd2FpdCByZXBvLnNhdmUocmVwby5jcmVhdGUoe1wiLFxuXHRcdFx0XHRcIiAgc3ViLFwiLFxuXHRcdFx0XHRcIiAgZW1haWw6IHByb2Nlc3MuZW52LkFVVEgwX0FETUlOX1VTRVJfRU1BSUwgPz8gbnVsbCxcIixcblx0XHRcdFx0JyAgZGlzcGxheU5hbWU6IHByb2Nlc3MuZW52LkFVVEgwX0FETUlOX1VTRVJOQU1FID8/IFwiYWRtaW5cIiwnLFxuXHRcdFx0XHQnICByb2xlczogW1wiYWRtaW5cIl0sJyxcblx0XHRcdFx0XCJ9KSk7XCIsXG5cdFx0XHRdLmpvaW4oXCIgXCIpLFxuXHRcdCk7XG5cblx0d29ya3NwYWNlLmdldFByb2plY3QoV0VCQVBJX1BST0pFQ1RfRElSKT8uYWRkRmlsZSh7XG5cdFx0ZmlsZXM6ICgpID0+IFtcblx0XHRcdHsgZmlsZVBhdGg6IFwic3JjL2VudGl0aWVzL3VzZXIuZW50aXR5LnRzXCIsIGNvbnRlbnQ6IFVTRVJfRU5USVRZX1RTIH0sXG5cdFx0XHR7IGZpbGVQYXRoOiBcInNyYy9yZXBvc2l0b3JpZXMvdXNlci5yZXBvc2l0b3J5LnRzXCIsIGNvbnRlbnQ6IFVTRVJfUkVQT1NJVE9SWV9UUyB9LFxuXHRcdFx0eyBmaWxlUGF0aDogXCJzcmMvc2VydmljZXMvdXNlci5zZXJ2aWNlLnRzXCIsIGNvbnRlbnQ6IFVTRVJfU0VSVklDRV9UUyB9LFxuXHRcdFx0eyBmaWxlUGF0aDogXCJzcmMvYXV0aC9hYmlsaXR5LmZhY3RvcnkudHNcIiwgY29udGVudDogQUJJTElUWV9GQUNUT1JZX1RTIH0sXG5cdFx0XSxcblx0fSk7XG5cblx0Zm9yIChjb25zdCBjb250cm9sbGVyIG9mIHdvcmtzcGFjZS5nZXRNb2RlbHMoQ29udHJvbGxlclNvdXJjZUZpbGUpKSB7XG5cdFx0Y29udHJvbGxlclxuXHRcdFx0LmFkZEltcG9ydChcIlVzZXJTZXJ2aWNlXCIsIFwiLi4vc2VydmljZXMvdXNlci5zZXJ2aWNlLmpzXCIpXG5cdFx0XHQuYWRkQ29uc3RydWN0b3JQYXJhbShcInByaXZhdGUgcmVhZG9ubHkgdXNlcnM6IFVzZXJTZXJ2aWNlXCIpO1xuXHRcdGNvbnRyb2xsZXIuZ2V0TWV0aG9kKFwiZ2V0T25lXCIpLnNldEFzeW5jKHRydWUpLnNldEJvZHkoW1xuXHRcdFx0XCJjb25zdCB1c2VyID0gYXdhaXQgdGhpcy51c2Vycy5lbnN1cmVGcm9tUHJpbmNpcGFsKHRoaXMucHJpbmNpcGFsUHJvdmlkZXIuY3VycmVudFByaW5jaXBhbCk7XCIsXG5cdFx0XHQvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vVGVtcGxhdGVDdXJseUluU3RyaW5nOiB0ZW1wbGF0ZSBsaXRlcmFsIGluIGdlbmVyYXRlZCBjb2RlXG5cdFx0XHRcInJldHVybiB7IGlkLCBtZXNzYWdlOiBgSGVsbG8gJHt1c2VyLmRpc3BsYXlOYW1lfSFgLCB1c2VybmFtZTogdXNlci5kaXNwbGF5TmFtZSB9O1wiLFxuXHRcdF0pO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHNjYWZmb2xkKHdvcmtzcGFjZTogV29ya3NwYWNlU2NhZmZvbGQsIG9wdGlvbnM6IEF1dGhPcHRpb25zKTogdm9pZCB7XG5cdGlmIChvcHRpb25zLmF1dGhQcm92aWRlciAhPT0gXCJhdXRoMFwiKSByZXR1cm47XG5cblx0Y29uc3QgcmVzb3VyY2UgPSBcIkhlbGxvXCI7XG5cdGNvbnN0IHdpdGhMb2NhbFVzZXJzID0gb3B0aW9ucy5kYXRhYmFzZVByb3ZpZGVyID09PSBcInBvc3RncmVzL3R5cGVvcm1cIjtcblxuXHRmb3IgKGNvbnN0IGNvbnRyb2xsZXIgb2Ygd29ya3NwYWNlLmdldE1vZGVscyhDb250cm9sbGVyU291cmNlRmlsZSkpIHtcblx0XHRjb250cm9sbGVyXG5cdFx0XHQuYWRkRGVjb3JhdG9yKGBAQXV0aG9yaXplKFwicmVhZFwiLCBcIiR7cmVzb3VyY2V9XCIpYClcblx0XHRcdC5hZGRDb3J0ZXhJbXBvcnQoXCJBbGxvd0Fub255bW91c1wiKVxuXHRcdFx0LmFkZENvcnRleEltcG9ydChcIkF1dGhvcml6ZVwiKVxuXHRcdFx0LmFkZENvcnRleEltcG9ydChcIklQcmluY2lwYWxQcm92aWRlclRva2VuXCIpXG5cdFx0XHQuYWRkQ29ydGV4SW1wb3J0KFwiSVByaW5jaXBhbFByb3ZpZGVyXCIsIHRydWUpXG5cdFx0XHQuYWRkSW1wb3J0KFwiaW5qZWN0XCIsIFwiQGRlY29oZXJlL2NydWNpYmxlL2RlY29yYXRvcnNcIilcblx0XHRcdC5hZGRDb25zdHJ1Y3RvclBhcmFtKFxuXHRcdFx0XHRgQGluamVjdChJUHJpbmNpcGFsUHJvdmlkZXJUb2tlbikgcHJpdmF0ZSByZWFkb25seSBwcmluY2lwYWxQcm92aWRlcjogSVByaW5jaXBhbFByb3ZpZGVyYCxcblx0XHRcdCk7XG5cdFx0Y29udHJvbGxlci5nZXRNZXRob2QoXCJnZXRBbGxcIikuYWRkRGVjb3JhdG9yKFwiQEFsbG93QW5vbnltb3VzKClcIik7XG5cdFx0aWYgKCF3aXRoTG9jYWxVc2Vycykge1xuXHRcdFx0Y29udHJvbGxlci5nZXRNZXRob2QoXCJnZXRPbmVcIikuc2V0Qm9keShbXG5cdFx0XHRcdFwiY29uc3QgcHJpbmNpcGFsID0gdGhpcy5wcmluY2lwYWxQcm92aWRlci5jdXJyZW50UHJpbmNpcGFsO1wiLFxuXHRcdFx0XHRcImNvbnN0IHVzZXJuYW1lID1cIixcblx0XHRcdFx0J1xcdCh0eXBlb2YgcHJpbmNpcGFsPy5uYW1lID09PSBcInN0cmluZ1wiICYmIHByaW5jaXBhbC5uYW1lKSB8fCcsXG5cdFx0XHRcdCdcXHQodHlwZW9mIHByaW5jaXBhbD8ubmlja25hbWUgPT09IFwic3RyaW5nXCIgJiYgcHJpbmNpcGFsLm5pY2tuYW1lKSB8fCcsXG5cdFx0XHRcdCdcXHQodHlwZW9mIHByaW5jaXBhbD8uZW1haWwgPT09IFwic3RyaW5nXCIgJiYgcHJpbmNpcGFsLmVtYWlsKSB8fCcsXG5cdFx0XHRcdCdcXHQodHlwZW9mIHByaW5jaXBhbD8ucHJlZmVycmVkX3VzZXJuYW1lID09PSBcInN0cmluZ1wiICYmIHByaW5jaXBhbC5wcmVmZXJyZWRfdXNlcm5hbWUpIHx8Jyxcblx0XHRcdFx0XCJcXHRwcmluY2lwYWw/LnN1YiB8fFwiLFxuXHRcdFx0XHQnXFx0XCJ1bmtub3duXCI7Jyxcblx0XHRcdFx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub1RlbXBsYXRlQ3VybHlJblN0cmluZzogdGVtcGxhdGUgbGl0ZXJhbCBpbiBnZW5lcmF0ZWQgY29kZVxuXHRcdFx0XHRcInJldHVybiB7IGlkLCBtZXNzYWdlOiBgSGVsbG8gJHt1c2VybmFtZX0hYCwgdXNlcm5hbWUgfTtcIixcblx0XHRcdF0pO1xuXHRcdH1cblx0XHRjb250cm9sbGVyLmdldE1ldGhvZChcImNyZWF0ZVwiKS5hZGREZWNvcmF0b3IoYEBBdXRob3JpemUoXCJjcmVhdGVcIiwgXCIke3Jlc291cmNlfVwiKWApO1xuXHRcdGNvbnRyb2xsZXIuZ2V0TWV0aG9kKFwidXBkYXRlXCIpLmFkZERlY29yYXRvcihgQEF1dGhvcml6ZShcInVwZGF0ZVwiLCBcIiR7cmVzb3VyY2V9XCIpYCk7XG5cdFx0Y29udHJvbGxlci5nZXRNZXRob2QoXCJyZW1vdmVcIikuYWRkRGVjb3JhdG9yKGBAQXV0aG9yaXplKFwiZGVsZXRlXCIsIFwiJHtyZXNvdXJjZX1cIilgKTtcblx0fVxuXG5cdGNvbnN0IG1haW4gPSB3b3Jrc3BhY2UuZ2V0TW9kZWw8TWFpblNvdXJjZUZpbGU+KFdFTExfS05PV05fRklMRVMuTUFJTl9UUyk7XG5cdG1haW4/LmFkZFNpZGVFZmZlY3RJbXBvcnQoXCJAZGVjb2hlcmUvY29ydGV4L2F1dGhcIik7XG5cblx0aWYgKHdpdGhMb2NhbFVzZXJzKSB7XG5cdFx0c2NhZmZvbGRMb2NhbFVzZXJQcm9maWxlKHdvcmtzcGFjZSk7XG5cdFx0bWFpbj8uYWRkQnVpbGRlckNhbGwoXCIud2l0aEF1dGgoY3JlYXRlQWJpbGl0eUZhY3RvcnksIHsgcHJpbmNpcGFsTWFwcGVyOiBtYXBQcmluY2lwYWwgfSlcIik7XG5cdH0gZWxzZSB7XG5cdFx0bWFpbj8uYWRkQnVpbGRlckNhbGwoXCIud2l0aEF1dGgoKVwiKTtcblx0fVxuXG5cdC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9UZW1wbGF0ZUN1cmx5SW5TdHJpbmc6IGludGVudGlvbmFsIFlBTUwgZW52LXZhciBwbGFjZWhvbGRlcnNcblx0Y29uc3QgaXNzdWVyUGxhY2Vob2xkZXIgPSBcIiR7QVVUSDBfSVNTVUVSX0JBU0VfVVJMfVwiO1xuXHQvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vVGVtcGxhdGVDdXJseUluU3RyaW5nOiBpbnRlbnRpb25hbCBZQU1MIGVudi12YXIgcGxhY2Vob2xkZXJzXG5cdGNvbnN0IGF1ZFBsYWNlaG9sZGVyID0gXCIke0FVVEgwX0FVRElFTkNFfVwiO1xuXG5cdGNvbnN0IGNvbmZpZ1NlY3Rpb24gPSBgYXV0aDpcXG4gIGRpc2NvdmVyeVVybDogJHtpc3N1ZXJQbGFjZWhvbGRlcn1cXG4gIGF1ZGllbmNlOiAke2F1ZFBsYWNlaG9sZGVyfVxcbmA7XG5cblx0d29ya3NwYWNlLmdldE1vZGVsPENvbmZpZ1lhbWw+KFdFTExfS05PV05fRklMRVMuQ09ORklHX1lBTUwpPy5hZGRTZWN0aW9uKGNvbmZpZ1NlY3Rpb24pO1xuXG5cdHdvcmtzcGFjZVxuXHRcdC5nZXRNb2RlbDxFbnZGaWxlPihXRUxMX0tOT1dOX0ZJTEVTLkVOVl9GSUxFKVxuXHRcdD8uYWRkRW50cnkoXCJBVVRIMF9JU1NVRVJfQkFTRV9VUkxcIiwgb3B0aW9ucy5pc3N1ZXJCYXNlVXJsID8/IFwiXCIpXG5cdFx0LmFkZEVudHJ5KFwiQVVUSDBfQVVESUVOQ0VcIiwgb3B0aW9ucy5hdWRpZW5jZSA/PyBcIlwiKTtcblxuXHRjb25zdCBhdXRoQ29uZmlnID0gbmV3IEF1dGhDb25maWdNb2RlbCh7XG5cdFx0aXNzdWVyQmFzZVVybDogb3B0aW9ucy5pc3N1ZXJCYXNlVXJsID8/IFwiXCIsXG5cdFx0YXVkaWVuY2U6IG9wdGlvbnMuYXVkaWVuY2UgPz8gXCJcIixcblx0fSk7XG5cdHdvcmtzcGFjZS5hZGRNb2RlbChhdXRoQ29uZmlnKTtcblxuXHRpZiAod2l0aExvY2FsVXNlcnMgJiYgb3B0aW9ucy5hZG1pblBhc3N3b3JkKSB7XG5cdFx0Y3JlYXRlQXV0aDBBZG1pblVzZXIod29ya3NwYWNlLCBvcHRpb25zLCBhdXRoQ29uZmlnKTtcblx0fVxufVxuXG5leHBvcnQgY29uc3QgQXV0aEZlYXR1cmU6IEZlYXR1cmU8QXV0aE9wdGlvbnM+ID0geyBnZXRPcHRpb25zLCBzY2FmZm9sZCB9O1xuIl0sIm5hbWVzIjpbIkF1dGhGZWF0dXJlIiwiQURNSU5fUk9MRSIsIlVTRVJfRU5USVRZX1RTIiwiVVNFUl9SRVBPU0lUT1JZX1RTIiwiVVNFUl9TRVJWSUNFX1RTIiwiQUJJTElUWV9GQUNUT1JZX1RTIiwiZ2V0T3B0aW9ucyIsIndvcmtzcGFjZSIsImNsaU9wdGlvbnMiLCJhdXRoUHJvdmlkZXIiLCJpc3N1ZXJCYXNlVXJsIiwiZ2V0QXV0aDBPcHRpb25zIiwiY2hvaWNlcyIsImxhYmVsIiwic2VsZWN0ZWQiLCJwaWNrIiwiYyIsInByb3ZpZGVyIiwiYXV0aDBDbGkiLCJpc0luc3RhbGxlZCIsImNvbnNvbGUiLCJlcnJvciIsInByb2Nlc3MiLCJleGl0Iiwic3Rkb3V0Iiwid3JpdGUiLCJ0ZW5hbnRzIiwibGlzdFRlbmFudHMiLCJsZW5ndGgiLCJsb2ciLCJsb2dpbiIsImxpc3RBcGlzIiwiZXJyIiwiQXV0aDBBdXRoRXJyb3IiLCJhY3RpdmUiLCJmaW5kIiwidCIsIm5hbWUiLCJ1c2VyQXBpcyIsImZpbHRlciIsImEiLCJpbmNsdWRlcyIsInByb2plY3ROYW1lIiwiYXBpQ2hvaWNlcyIsImV4aXN0aW5nIiwibWFwIiwiaWRlbnRpZmllciIsImFwaVNlbGVjdGVkIiwiYXVkaWVuY2UiLCJkZWZhdWx0SWQiLCJhc2siLCJjcmVhdGVBcGkiLCJ1cGRhdGVBcGlTY29wZXMiLCJIRUxMT19BUElfU0NPUEVTIiwiam9pbiIsIndpdGhMb2NhbFVzZXJzIiwiZGF0YWJhc2VQcm92aWRlciIsImFkbWluVXNlcm5hbWUiLCJhZG1pblBhc3N3b3JkIiwiZ2VuZXJhdGVBZG1pblBhc3N3b3JkIiwiYWRtaW5FbWFpbCIsIndvcmtzcGFjZU5hbWUiLCJ1c2VybmFtZSIsInNsdWciLCJ0b0xvd2VyQ2FzZSIsInJlcGxhY2UiLCJjcmVhdGVBdXRoMEFkbWluVXNlciIsIm9wdGlvbnMiLCJhdXRoQ29uZmlnIiwicGFzc3dvcmQiLCJlbWFpbCIsImFkbWluIiwiY3JlYXRlQWRtaW5EYXRhYmFzZVVzZXIiLCJzZXRBZG1pblVzZXIiLCJzdWIiLCJ1c2VyX2lkIiwiZ2V0TW9kZWwiLCJXRUxMX0tOT1dOX0ZJTEVTIiwiRU5WX0ZJTEUiLCJhZGRFbnRyeSIsIkVycm9yIiwibWVzc2FnZSIsInNjYWZmb2xkTG9jYWxVc2VyUHJvZmlsZSIsIlBBQ0tBR0VfSlNPTiIsImFkZERlcGVuZGVuY3kiLCJBUElfUEFDS0FHRV9KU09OIiwibWFpbiIsIk1BSU5fVFMiLCJhZGRFbnRpdHkiLCJjbGFzc05hbWUiLCJpbXBvcnRQYXRoIiwiYWRkUmVwb3NpdG9yeSIsImFkZFNlcnZpY2UiLCJzY29wZSIsImFkZEltcG9ydCIsInNldFR5cGVPcm1TZWVkIiwiZ2V0UHJvamVjdCIsIldFQkFQSV9QUk9KRUNUX0RJUiIsImFkZEZpbGUiLCJmaWxlcyIsImZpbGVQYXRoIiwiY29udGVudCIsImNvbnRyb2xsZXIiLCJnZXRNb2RlbHMiLCJDb250cm9sbGVyU291cmNlRmlsZSIsImFkZENvbnN0cnVjdG9yUGFyYW0iLCJnZXRNZXRob2QiLCJzZXRBc3luYyIsInNldEJvZHkiLCJzY2FmZm9sZCIsInJlc291cmNlIiwiYWRkRGVjb3JhdG9yIiwiYWRkQ29ydGV4SW1wb3J0IiwiYWRkU2lkZUVmZmVjdEltcG9ydCIsImFkZEJ1aWxkZXJDYWxsIiwiaXNzdWVyUGxhY2Vob2xkZXIiLCJhdWRQbGFjZWhvbGRlciIsImNvbmZpZ1NlY3Rpb24iLCJDT05GSUdfWUFNTCIsImFkZFNlY3Rpb24iLCJBdXRoQ29uZmlnTW9kZWwiLCJhZGRNb2RlbCJdLCJtYXBwaW5ncyI6Ijs7OzsrQkFxZGFBOzs7ZUFBQUE7Ozt3QkFyZGE7dUJBRU87d0JBS0U7aUNBRUg7MkNBQ0s7a0VBRVg7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVcxQixNQUFNQyxhQUFhO0FBRW5CLE1BQU1DLGlCQUFpQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFxQnhCLENBQUM7QUFFRCxNQUFNQyxxQkFBcUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FBZTVCLENBQUM7QUFFRCxNQUFNQyxrQkFBa0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXVEekIsQ0FBQztBQUVELE1BQU1DLHFCQUFxQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXdENUIsQ0FBQztBQUVELGVBQWVDLFdBQ2RDLFNBQTRCLEVBQzVCQyxVQUFnQztJQUVoQyxJQUFJQSxXQUFXQyxZQUFZLEtBQUssV0FBVyxDQUFDRCxXQUFXRSxhQUFhLEVBQUU7UUFDckUsT0FBT0MsZ0JBQWdCSixXQUFXQztJQUNuQztJQUNBLElBQUlBLFdBQVdDLFlBQVksSUFBSSxNQUFNLE9BQU8sQ0FBQztJQUU3QyxNQUFNRyxVQUFVO1FBQUM7WUFBRUMsT0FBTztRQUFnQjtRQUFHO1lBQUVBLE9BQU87UUFBaUI7S0FBRTtJQUN6RSxNQUFNQyxXQUFXLE1BQU1DLElBQUFBLFlBQUksRUFBQyx1QkFBdUJILFNBQVMsQ0FBQ0ksSUFBTUEsRUFBRUgsS0FBSztJQUMxRSxNQUFNSSxXQUFXSCxVQUFVRCxTQUFTO0lBRXBDLElBQUlJLGFBQWEsU0FBUyxPQUFPO1FBQUVSLGNBQWM7SUFBTztJQUV4RCxPQUFPRSxnQkFBZ0JKLFdBQVdDO0FBQ25DO0FBRUEsZUFBZUcsZ0JBQ2RKLFNBQTRCLEVBQzVCQyxVQUFnQztJQUVoQyxJQUFJLENBQUNVLFVBQVNDLFdBQVcsSUFBSTtRQUM1QkMsUUFBUUMsS0FBSyxDQUNaLHlEQUNDLG9EQUNBO1FBRUZDLFFBQVFDLElBQUksQ0FBQztJQUNkO0lBRUFELFFBQVFFLE1BQU0sQ0FBQ0MsS0FBSyxDQUFDO0lBQ3JCLElBQUlDLFVBQVVSLFVBQVNTLFdBQVc7SUFDbEMsSUFBSUQsUUFBUUUsTUFBTSxLQUFLLEdBQUc7UUFDekJOLFFBQVFFLE1BQU0sQ0FBQ0MsS0FBSyxDQUFDO1FBQ3JCTCxRQUFRUyxHQUFHLENBQUM7UUFDWixJQUFJLENBQUNYLFVBQVNZLEtBQUssSUFBSTtZQUN0QlYsUUFBUUMsS0FBSyxDQUFDO1lBQ2RDLFFBQVFDLElBQUksQ0FBQztRQUNkO1FBQ0FHLFVBQVVSLFVBQVNTLFdBQVc7SUFDL0I7SUFFQSxJQUFJO1FBQ0hULFVBQVNhLFFBQVE7UUFDakJULFFBQVFFLE1BQU0sQ0FBQ0MsS0FBSyxDQUFDO0lBQ3RCLEVBQUUsT0FBT08sS0FBSztRQUNiLElBQUlBLGVBQWVkLFVBQVNlLGNBQWMsRUFBRTtZQUMzQ1gsUUFBUUUsTUFBTSxDQUFDQyxLQUFLLENBQUM7WUFDckJMLFFBQVFTLEdBQUcsQ0FBQztZQUNaLElBQUksQ0FBQ1gsVUFBU1ksS0FBSyxJQUFJO2dCQUN0QlYsUUFBUUMsS0FBSyxDQUFDO2dCQUNkQyxRQUFRQyxJQUFJLENBQUM7WUFDZDtRQUNEO0lBQ0Q7SUFFQSxNQUFNVyxTQUFTUixRQUFRUyxJQUFJLENBQUMsQ0FBQ0MsSUFBTUEsRUFBRUYsTUFBTSxLQUFLUixPQUFPLENBQUMsRUFBRTtJQUMxRCxNQUFNaEIsZ0JBQWdCLENBQUMsUUFBUSxFQUFFd0IsT0FBT0csSUFBSSxFQUFFO0lBQzlDakIsUUFBUVMsR0FBRyxDQUFDLENBQUMsb0JBQW9CLEVBQUVuQixlQUFlO0lBRWxEWSxRQUFRRSxNQUFNLENBQUNDLEtBQUssQ0FBQztJQUNyQixNQUFNYSxXQUFXcEIsVUFBU2EsUUFBUSxHQUFHUSxNQUFNLENBQUMsQ0FBQ0MsSUFBTSxDQUFDQSxFQUFFSCxJQUFJLENBQUNJLFFBQVEsQ0FBQztJQUNwRW5CLFFBQVFFLE1BQU0sQ0FBQ0MsS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFYSxTQUFTVixNQUFNLENBQUMsR0FBRyxDQUFDO0lBR25ELE1BQU1jLGNBQWNuQyxVQUFVOEIsSUFBSTtJQUNsQyxNQUFNTSxhQUEwQjtRQUMvQjtZQUFFOUIsT0FBTyxDQUFDLGtCQUFrQixFQUFFNkIsYUFBYTtZQUFFRSxVQUFVO1FBQUs7V0FDekROLFNBQVNPLEdBQUcsQ0FBQyxDQUFDTCxJQUFPLENBQUE7Z0JBQUUzQixPQUFPLEdBQUcyQixFQUFFSCxJQUFJLENBQUMsR0FBRyxFQUFFRyxFQUFFTSxVQUFVLEVBQUU7Z0JBQUVGLFVBQVVKLEVBQUVNLFVBQVU7WUFBQyxDQUFBO0tBQ3ZGO0lBRUQsTUFBTUMsY0FBYyxNQUFNaEMsSUFBQUEsWUFBSSxFQUFDLDBCQUEwQjRCLFlBQVksQ0FBQzNCLElBQU1BLEVBQUVILEtBQUs7SUFFbkYsSUFBSW1DO0lBQ0osSUFBSSxDQUFDRCxlQUFlQSxZQUFZSCxRQUFRLEtBQUssTUFBTTtRQUNsRCxNQUFNSyxZQUFZLENBQUMsWUFBWSxFQUFFUCxhQUFhO1FBQzlDTSxXQUFXLE1BQU1FLElBQUFBLFdBQUcsRUFBQyxDQUFDLGtCQUFrQixFQUFFRCxVQUFVLEdBQUcsQ0FBQyxFQUFFQTtRQUMxRDdCLFFBQVFTLEdBQUcsQ0FBQztRQUNabUIsV0FBVzlCLFVBQVNpQyxTQUFTLENBQUMsR0FBR1QsWUFBWSxJQUFJLENBQUMsRUFBRU0sVUFBVUYsVUFBVTtRQUN4RTFCLFFBQVFTLEdBQUcsQ0FBQyxDQUFDLHNCQUFzQixFQUFFbUIsVUFBVTtJQUNoRCxPQUFPO1FBQ05BLFdBQVdELFlBQVlILFFBQVE7UUFDL0J4QixRQUFRUyxHQUFHLENBQUMsQ0FBQyxtQkFBbUIsRUFBRW1CLFVBQVU7UUFDNUMsSUFBSTtZQUNIOUIsVUFBU2tDLGVBQWUsQ0FBQ0o7WUFDekI1QixRQUFRUyxHQUFHLENBQUMsQ0FBQyw2QkFBNkIsRUFBRVgsVUFBU21DLGdCQUFnQixDQUFDQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEYsRUFBRSxPQUFNO1lBQ1BsQyxRQUFRQyxLQUFLLENBQ1o7UUFFRjtJQUNEO0lBRUEsTUFBTWtDLGlCQUFpQi9DLFdBQVdnRCxnQkFBZ0IsS0FBSztJQUN2RCxJQUFJQztJQUNKLElBQUlDO0lBQ0osSUFBSUgsZ0JBQWdCO1FBQ25CRSxnQkFDQ2pELFdBQVdpRCxhQUFhLElBQUssTUFBTVAsSUFBQUEsV0FBRyxFQUFDLGdDQUFnQztRQUN4RVEsZ0JBQWdCbEQsV0FBV2tELGFBQWE7UUFDeEMsSUFBSUEsaUJBQWlCLE1BQU07WUFDMUJBLGdCQUFnQixNQUFNUixJQUFBQSxXQUFHLEVBQUM7WUFDMUIsSUFBSSxDQUFDUSxlQUFlO2dCQUNuQkEsZ0JBQWdCeEMsVUFBU3lDLHFCQUFxQjtnQkFDOUN2QyxRQUFRUyxHQUFHLENBQUMsQ0FBQyxnREFBZ0QsRUFBRTZCLGVBQWU7WUFDL0U7UUFDRDtJQUNEO0lBRUEsT0FBTztRQUNOakQsY0FBYztRQUNkQztRQUNBc0M7UUFDQSxHQUFJTyxpQkFBaUI7WUFBRUU7WUFBZUM7UUFBYyxJQUFJLENBQUMsQ0FBQztJQUMzRDtBQUNEO0FBRUEsU0FBU0UsV0FBV0MsYUFBcUIsRUFBRUMsUUFBZ0I7SUFDMUQsSUFBSUEsU0FBU3JCLFFBQVEsQ0FBQyxNQUFNLE9BQU9xQjtJQUNuQyxNQUFNQyxPQUFPRixjQUFjRyxXQUFXLEdBQUdDLE9BQU8sQ0FBQyxlQUFlO0lBQ2hFLE9BQU8sR0FBR0gsU0FBUyxDQUFDLEVBQUVDLEtBQUssWUFBWSxDQUFDO0FBQ3pDO0FBRUEsU0FBU0cscUJBQ1IzRCxTQUE0QixFQUM1QjRELE9BQW9CLEVBQ3BCQyxVQUEyQjtJQUUzQixNQUFNTixXQUFXSyxRQUFRVixhQUFhLElBQUk7SUFDMUMsTUFBTVksV0FBV0YsUUFBUVQsYUFBYTtJQUN0QyxJQUFJLENBQUNXLFVBQVU7SUFFZixNQUFNQyxRQUFRVixXQUFXckQsVUFBVThCLElBQUksRUFBRXlCO0lBQ3pDLElBQUk7UUFDSCxNQUFNUyxRQUFRckQsVUFBU3NELHVCQUF1QixDQUFDO1lBQUVGO1lBQU9EO1lBQVVQO1FBQVM7UUFDM0VNLFdBQVdLLFlBQVksQ0FBQztZQUN2QkMsS0FBS0gsTUFBTUksT0FBTztZQUNsQkwsT0FBT0MsTUFBTUQsS0FBSztZQUNsQkQsVUFBVUUsTUFBTUYsUUFBUTtZQUN4QlAsVUFBVVMsTUFBTVQsUUFBUTtRQUN6QjtRQUNBdkQsVUFDRXFFLFFBQVEsQ0FBVUMsdUJBQWdCLENBQUNDLFFBQVEsR0FDMUNDLFNBQVMsd0JBQXdCUixNQUFNSSxPQUFPLEVBQy9DSSxTQUFTLDBCQUEwQlIsTUFBTUQsS0FBSyxFQUM5Q1MsU0FBUyw2QkFBNkJSLE1BQU1GLFFBQVEsRUFDcERVLFNBQVMsd0JBQXdCUixNQUFNVCxRQUFRO1FBQ2pEMUMsUUFBUVMsR0FBRyxDQUFDLENBQUMsNEJBQTRCLEVBQUUwQyxNQUFNRCxLQUFLLENBQUMsUUFBUSxFQUFFckUsV0FBVyxDQUFDLENBQUM7UUFDOUVtQixRQUFRUyxHQUFHLENBQUMsQ0FBQyxxQ0FBcUMsRUFBRTBDLE1BQU1ELEtBQUssRUFBRTtRQUNqRWxELFFBQVFTLEdBQUcsQ0FBQyxDQUFDLG1EQUFtRCxDQUFDO0lBQ2xFLEVBQUUsT0FBT0csS0FBSztRQUNiWixRQUFRQyxLQUFLLENBQ1osQ0FBQyx1Q0FBdUMsRUFBRWlELE1BQU0sR0FBRyxFQUFFdEMsZUFBZWdELFFBQVFoRCxJQUFJaUQsT0FBTyxHQUFHakQsS0FBSztJQUVqRztBQUNEO0FBRUEsU0FBU2tELHlCQUF5QjNFLFNBQTRCO0lBQzdEQSxVQUNFcUUsUUFBUSxDQUFjQyx1QkFBZ0IsQ0FBQ00sWUFBWSxHQUNsREMsY0FBYyxpQkFBaUI7SUFDbEM3RSxVQUNFcUUsUUFBUSxDQUFpQkMsdUJBQWdCLENBQUNRLGdCQUFnQixHQUN6REQsY0FBYyxpQkFBaUI7SUFFbEMsTUFBTUUsT0FBTy9FLFVBQVVxRSxRQUFRLENBQWlCQyx1QkFBZ0IsQ0FBQ1UsT0FBTztJQUN4RUQsTUFDR0UsVUFBVTtRQUFFQyxXQUFXO1FBQWNDLFlBQVk7SUFBNEIsR0FDOUVDLGNBQWM7UUFDZEYsV0FBVztRQUNYQyxZQUFZO0lBQ2IsR0FDQ0UsV0FBVztRQUNYSCxXQUFXO1FBQ1hDLFlBQVk7UUFDWkcsT0FBTztJQUNSLEdBQ0NDLFVBQVUsd0JBQXdCLDZCQUNsQ0EsVUFBVSxnQkFBZ0IsNkJBQzFCQyxlQUNBO1FBQ0M7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtLQUNBLENBQUN6QyxJQUFJLENBQUM7SUFHVC9DLFVBQVV5RixVQUFVLENBQUNDLDBCQUFrQixHQUFHQyxRQUFRO1FBQ2pEQyxPQUFPLElBQU07Z0JBQ1o7b0JBQUVDLFVBQVU7b0JBQStCQyxTQUFTbkc7Z0JBQWU7Z0JBQ25FO29CQUFFa0csVUFBVTtvQkFBdUNDLFNBQVNsRztnQkFBbUI7Z0JBQy9FO29CQUFFaUcsVUFBVTtvQkFBZ0NDLFNBQVNqRztnQkFBZ0I7Z0JBQ3JFO29CQUFFZ0csVUFBVTtvQkFBK0JDLFNBQVNoRztnQkFBbUI7YUFDdkU7SUFDRjtJQUVBLEtBQUssTUFBTWlHLGNBQWMvRixVQUFVZ0csU0FBUyxDQUFDQywrQ0FBb0IsRUFBRztRQUNuRUYsV0FDRVIsU0FBUyxDQUFDLGVBQWUsK0JBQ3pCVyxtQkFBbUIsQ0FBQztRQUN0QkgsV0FBV0ksU0FBUyxDQUFDLFVBQVVDLFFBQVEsQ0FBQyxNQUFNQyxPQUFPLENBQUM7WUFDckQ7WUFDQSwyRkFBMkY7WUFDM0Y7U0FDQTtJQUNGO0FBQ0Q7QUFFQSxTQUFTQyxTQUFTdEcsU0FBNEIsRUFBRTRELE9BQW9CO0lBQ25FLElBQUlBLFFBQVExRCxZQUFZLEtBQUssU0FBUztJQUV0QyxNQUFNcUcsV0FBVztJQUNqQixNQUFNdkQsaUJBQWlCWSxRQUFRWCxnQkFBZ0IsS0FBSztJQUVwRCxLQUFLLE1BQU04QyxjQUFjL0YsVUFBVWdHLFNBQVMsQ0FBQ0MsK0NBQW9CLEVBQUc7UUFDbkVGLFdBQ0VTLFlBQVksQ0FBQyxDQUFDLG9CQUFvQixFQUFFRCxTQUFTLEVBQUUsQ0FBQyxFQUNoREUsZUFBZSxDQUFDLGtCQUNoQkEsZUFBZSxDQUFDLGFBQ2hCQSxlQUFlLENBQUMsMkJBQ2hCQSxlQUFlLENBQUMsc0JBQXNCLE1BQ3RDbEIsU0FBUyxDQUFDLFVBQVUsaUNBQ3BCVyxtQkFBbUIsQ0FDbkIsQ0FBQyx1RkFBdUYsQ0FBQztRQUUzRkgsV0FBV0ksU0FBUyxDQUFDLFVBQVVLLFlBQVksQ0FBQztRQUM1QyxJQUFJLENBQUN4RCxnQkFBZ0I7WUFDcEIrQyxXQUFXSSxTQUFTLENBQUMsVUFBVUUsT0FBTyxDQUFDO2dCQUN0QztnQkFDQTtnQkFDQTtnQkFDQTtnQkFDQTtnQkFDQTtnQkFDQTtnQkFDQTtnQkFDQSwyRkFBMkY7Z0JBQzNGO2FBQ0E7UUFDRjtRQUNBTixXQUFXSSxTQUFTLENBQUMsVUFBVUssWUFBWSxDQUFDLENBQUMsc0JBQXNCLEVBQUVELFNBQVMsRUFBRSxDQUFDO1FBQ2pGUixXQUFXSSxTQUFTLENBQUMsVUFBVUssWUFBWSxDQUFDLENBQUMsc0JBQXNCLEVBQUVELFNBQVMsRUFBRSxDQUFDO1FBQ2pGUixXQUFXSSxTQUFTLENBQUMsVUFBVUssWUFBWSxDQUFDLENBQUMsc0JBQXNCLEVBQUVELFNBQVMsRUFBRSxDQUFDO0lBQ2xGO0lBRUEsTUFBTXhCLE9BQU8vRSxVQUFVcUUsUUFBUSxDQUFpQkMsdUJBQWdCLENBQUNVLE9BQU87SUFDeEVELE1BQU0yQixvQkFBb0I7SUFFMUIsSUFBSTFELGdCQUFnQjtRQUNuQjJCLHlCQUF5QjNFO1FBQ3pCK0UsTUFBTTRCLGVBQWU7SUFDdEIsT0FBTztRQUNONUIsTUFBTTRCLGVBQWU7SUFDdEI7SUFFQSw4RkFBOEY7SUFDOUYsTUFBTUMsb0JBQW9CO0lBQzFCLDhGQUE4RjtJQUM5RixNQUFNQyxpQkFBaUI7SUFFdkIsTUFBTUMsZ0JBQWdCLENBQUMsdUJBQXVCLEVBQUVGLGtCQUFrQixjQUFjLEVBQUVDLGVBQWUsRUFBRSxDQUFDO0lBRXBHN0csVUFBVXFFLFFBQVEsQ0FBYUMsdUJBQWdCLENBQUN5QyxXQUFXLEdBQUdDLFdBQVdGO0lBRXpFOUcsVUFDRXFFLFFBQVEsQ0FBVUMsdUJBQWdCLENBQUNDLFFBQVEsR0FDMUNDLFNBQVMseUJBQXlCWixRQUFRekQsYUFBYSxJQUFJLElBQzVEcUUsU0FBUyxrQkFBa0JaLFFBQVFuQixRQUFRLElBQUk7SUFFakQsTUFBTW9CLGFBQWEsSUFBSW9ELGdDQUFlLENBQUM7UUFDdEM5RyxlQUFleUQsUUFBUXpELGFBQWEsSUFBSTtRQUN4Q3NDLFVBQVVtQixRQUFRbkIsUUFBUSxJQUFJO0lBQy9CO0lBQ0F6QyxVQUFVa0gsUUFBUSxDQUFDckQ7SUFFbkIsSUFBSWIsa0JBQWtCWSxRQUFRVCxhQUFhLEVBQUU7UUFDNUNRLHFCQUFxQjNELFdBQVc0RCxTQUFTQztJQUMxQztBQUNEO0FBRU8sTUFBTXBFLGNBQW9DO0lBQUVNO0lBQVl1RztBQUFTIn0=
|
|
463
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL2ZlYXR1cmVzL2F1dGguZmVhdHVyZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhc2ssIHBpY2sgfSBmcm9tIFwiLi4vLi4vZG9tYWluL3Byb21wdC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBDb25maWdZYW1sIH0gZnJvbSBcIi4uLy4uL21vZGVscy9jb25maWcteWFtbC5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgV0VMTF9LTk9XTl9GSUxFUyB9IGZyb20gXCIuLi8uLi9tb2RlbHMvY29uc3QuanNcIjtcbmltcG9ydCB0eXBlIHsgRW52RmlsZSB9IGZyb20gXCIuLi8uLi9tb2RlbHMvZW52LWZpbGUubW9kZWwuanNcIjtcbmltcG9ydCB0eXBlIHsgUGFja2FnZUpzb24gfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3BhY2thZ2UtanNvbi5tb2RlbC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBXb3Jrc3BhY2VTY2FmZm9sZCB9IGZyb20gXCIuLi8uLi9tb2RlbHMvcHJvamVjdC5tb2RlbC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBGZWF0dXJlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3NjYWZmb2xkLnNlcnZpY2UuanNcIjtcbmltcG9ydCB0eXBlIHsgQXBpUGFja2FnZUpzb24gfSBmcm9tIFwiLi4vbW9kZWxzL2FwaS1wYWNrYWdlLWpzb24ubW9kZWwuanNcIjtcbmltcG9ydCB7IEF1dGhDb25maWdNb2RlbCB9IGZyb20gXCIuLi9tb2RlbHMvYXV0aC1jb25maWcubW9kZWwuanNcIjtcbmltcG9ydCB7IENvbnRyb2xsZXJTb3VyY2VGaWxlIH0gZnJvbSBcIi4uL21vZGVscy9jb250cm9sbGVyLXNvdXJjZS1maWxlLm1vZGVsLmpzXCI7XG5pbXBvcnQgdHlwZSB7IE1haW5Tb3VyY2VGaWxlIH0gZnJvbSBcIi4uL21vZGVscy9tYWluLXNvdXJjZS1maWxlLm1vZGVsLmpzXCI7XG5pbXBvcnQgKiBhcyBhdXRoMENsaSBmcm9tIFwiLi9hdXRoMC1jbGkuanNcIjtcblxuZXhwb3J0IHR5cGUgQXV0aE9wdGlvbnMgPSB7XG5cdGF1dGhQcm92aWRlcj86IFwiYXV0aDBcIiB8IFwibm9uZVwiO1xuXHRpc3N1ZXJCYXNlVXJsPzogc3RyaW5nO1xuXHRhdWRpZW5jZT86IHN0cmluZztcblx0ZGF0YWJhc2VQcm92aWRlcj86IFwibm9uZVwiIHwgXCJwb3N0Z3Jlcy90eXBlb3JtXCI7XG5cdGFkbWluVXNlcm5hbWU/OiBzdHJpbmc7XG5cdGFkbWluUGFzc3dvcmQ/OiBzdHJpbmc7XG59O1xuXG5jb25zdCBBRE1JTl9ST0xFID0gXCJhZG1pblwiO1xuXG5jb25zdCBVU0VSX0VOVElUWV9UUyA9IGBpbXBvcnQgeyBDb2x1bW4sIEVudGl0eSwgUHJpbWFyeUdlbmVyYXRlZENvbHVtbiB9IGZyb20gXCJ0eXBlb3JtXCI7XG5pbXBvcnQgdHlwZSB7IEVudGl0eSBhcyBJRW50aXR5IH0gZnJvbSBcIkBkZWNvaGVyZS9jb2RleFwiO1xuXG5ARW50aXR5KClcbmV4cG9ydCBjbGFzcyBVc2VyRW50aXR5IGltcGxlbWVudHMgSUVudGl0eSB7XG5cXHRAUHJpbWFyeUdlbmVyYXRlZENvbHVtbigpXG5cXHRwdWJsaWMgaWQhOiBudW1iZXI7XG5cblxcdEBDb2x1bW4oeyB1bmlxdWU6IHRydWUgfSlcblxcdHB1YmxpYyBzdWIhOiBzdHJpbmc7XG5cblxcdEBDb2x1bW4oeyB0eXBlOiBcInZhcmNoYXJcIiwgbnVsbGFibGU6IHRydWUgfSlcblxcdHB1YmxpYyBlbWFpbCE6IHN0cmluZyB8IG51bGw7XG5cblxcdEBDb2x1bW4oKVxuXFx0cHVibGljIGRpc3BsYXlOYW1lITogc3RyaW5nO1xuXG5cXHQvKiogQXBwLW93bmVkIHJvbGVzLiBUaGUgXFxgYWRtaW5cXGAgcm9sZSBncmFudHMgQ0FTTCBcXGBtYW5hZ2VcXGAvXFxgYWxsXFxgICh3aWxkY2FyZCkuICovXG5cXHRAQ29sdW1uKHsgdHlwZTogXCJzaW1wbGUtanNvblwiLCBkZWZhdWx0OiBcIltdXCIgfSlcblxcdHB1YmxpYyByb2xlcyE6IHN0cmluZ1tdO1xufVxuYDtcblxuY29uc3QgVVNFUl9SRVBPU0lUT1JZX1RTID0gYGltcG9ydCB7IGluamVjdGFibGUgfSBmcm9tIFwiQGRlY29oZXJlL2NydWNpYmxlL2RlY29yYXRvcnNcIjtcbmltcG9ydCB7IGluamVjdFVuaXRPZldvcmsgfSBmcm9tIFwiQGRlY29oZXJlL2NvZGV4XCI7XG5pbXBvcnQgeyBUeXBlT3JtUmVwb3NpdG9yeSwgVHlwZU9ybVVuaXRPZldvcmsgfSBmcm9tIFwiQGRlY29oZXJlL2NvZGV4LXR5cGVvcm1cIjtcbmltcG9ydCB7IFVzZXJFbnRpdHkgfSBmcm9tIFwiLi4vZW50aXRpZXMvdXNlci5lbnRpdHkuanNcIjtcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFVzZXJFbnRpdHlSZXBvc2l0b3J5IGV4dGVuZHMgVHlwZU9ybVJlcG9zaXRvcnk8VXNlckVudGl0eT4ge1xuXFx0cHVibGljIGNvbnN0cnVjdG9yKEBpbmplY3RVbml0T2ZXb3JrKCkgdW5pdE9mV29yazogVHlwZU9ybVVuaXRPZldvcmspIHtcblxcdFxcdHN1cGVyKHVuaXRPZldvcmssIFVzZXJFbnRpdHkpO1xuXFx0fVxuXG5cXHRwdWJsaWMgZmluZEJ5U3ViKHN1Yjogc3RyaW5nKTogUHJvbWlzZTxVc2VyRW50aXR5IHwgbnVsbD4ge1xuXFx0XFx0cmV0dXJuIHRoaXMuZmlyc3RPckRlZmF1bHQoeyB3aGVyZTogeyBzdWIgfSB9KTtcblxcdH1cbn1cbmA7XG5cbmNvbnN0IFVTRVJfU0VSVklDRV9UUyA9IGBpbXBvcnQgeyBpbmplY3RhYmxlIH0gZnJvbSBcIkBkZWNvaGVyZS9jcnVjaWJsZS9kZWNvcmF0b3JzXCI7XG5pbXBvcnQgdHlwZSB7IFByaW5jaXBhbCB9IGZyb20gXCJAZGVjb2hlcmUvY29ydGV4XCI7XG5pbXBvcnQgeyBVc2VyRW50aXR5IH0gZnJvbSBcIi4uL2VudGl0aWVzL3VzZXIuZW50aXR5LmpzXCI7XG5pbXBvcnQgeyBVc2VyRW50aXR5UmVwb3NpdG9yeSB9IGZyb20gXCIuLi9yZXBvc2l0b3JpZXMvdXNlci5yZXBvc2l0b3J5LmpzXCI7XG5cbmZ1bmN0aW9uIGNsYWltU3RyaW5nKHByaW5jaXBhbDogUHJpbmNpcGFsIHwgdW5kZWZpbmVkLCBrZXk6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cXHRjb25zdCB2YWx1ZSA9IHByaW5jaXBhbD8uW2tleV07XG5cXHRyZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmIHZhbHVlLmxlbmd0aCA+IDAgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFVzZXJTZXJ2aWNlIHtcblxcdHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHVzZXJzOiBVc2VyRW50aXR5UmVwb3NpdG9yeSkge31cblxuXFx0LyoqXG5cXHQgKiBVcHNlcnQgYSBsb2NhbCBwcm9maWxlIGtleWVkIGJ5IEpXVCBcXGBzdWJcXGAuXG5cXHQgKiBQcm9maWxlIGZpZWxkcyBmcm9tIHRoZSB0b2tlbiBmaWxsIGdhcHM7IHNlZWRlZCByb3dzIGtlZXAgZGlzcGxheU5hbWUvZW1haWwvcm9sZXMuXG5cXHQgKi9cblxcdHB1YmxpYyBhc3luYyBlbnN1cmVGcm9tUHJpbmNpcGFsKHByaW5jaXBhbDogUHJpbmNpcGFsIHwgdW5kZWZpbmVkKTogUHJvbWlzZTxVc2VyRW50aXR5PiB7XG5cXHRcXHRjb25zdCBzdWIgPSBwcmluY2lwYWw/LnN1YjtcblxcdFxcdGlmICghc3ViKSB7XG5cXHRcXHRcXHR0aHJvdyBuZXcgRXJyb3IoXCJBdXRoZW50aWNhdGVkIHJlcXVlc3QgaXMgbWlzc2luZyBwcmluY2lwYWwuc3ViXCIpO1xuXFx0XFx0fVxuXG5cXHRcXHRjb25zdCBlbWFpbCA9XG5cXHRcXHRcXHRjbGFpbVN0cmluZyhwcmluY2lwYWwsIFwiZW1haWxcIikgPz8gY2xhaW1TdHJpbmcocHJpbmNpcGFsLCBcInByZWZlcnJlZF91c2VybmFtZVwiKTtcblxcdFxcdGNvbnN0IGRpc3BsYXlGcm9tVG9rZW4gPVxuXFx0XFx0XFx0Y2xhaW1TdHJpbmcocHJpbmNpcGFsLCBcIm5hbWVcIikgPz9cblxcdFxcdFxcdGNsYWltU3RyaW5nKHByaW5jaXBhbCwgXCJuaWNrbmFtZVwiKSA/P1xuXFx0XFx0XFx0ZW1haWw7XG5cblxcdFxcdGNvbnN0IGV4aXN0aW5nID0gYXdhaXQgdGhpcy51c2Vycy5maW5kQnlTdWIoc3ViKTtcblxcdFxcdGlmIChleGlzdGluZykge1xuXFx0XFx0XFx0bGV0IGRpcnR5ID0gZmFsc2U7XG5cXHRcXHRcXHRpZiAoIWV4aXN0aW5nLmVtYWlsICYmIGVtYWlsKSB7XG5cXHRcXHRcXHRcXHRleGlzdGluZy5lbWFpbCA9IGVtYWlsO1xuXFx0XFx0XFx0XFx0ZGlydHkgPSB0cnVlO1xuXFx0XFx0XFx0fVxuXFx0XFx0XFx0aWYgKGV4aXN0aW5nLmRpc3BsYXlOYW1lID09PSBleGlzdGluZy5zdWIgJiYgZGlzcGxheUZyb21Ub2tlbikge1xuXFx0XFx0XFx0XFx0ZXhpc3RpbmcuZGlzcGxheU5hbWUgPSBkaXNwbGF5RnJvbVRva2VuO1xuXFx0XFx0XFx0XFx0ZGlydHkgPSB0cnVlO1xuXFx0XFx0XFx0fVxuXFx0XFx0XFx0cmV0dXJuIGRpcnR5ID8gdGhpcy51c2Vycy5zYXZlKGV4aXN0aW5nKSA6IGV4aXN0aW5nO1xuXFx0XFx0fVxuXG5cXHRcXHRjb25zdCBjcmVhdGVkID0gbmV3IFVzZXJFbnRpdHkoKTtcblxcdFxcdGNyZWF0ZWQuc3ViID0gc3ViO1xuXFx0XFx0Y3JlYXRlZC5lbWFpbCA9IGVtYWlsID8/IG51bGw7XG5cXHRcXHRjcmVhdGVkLmRpc3BsYXlOYW1lID0gZGlzcGxheUZyb21Ub2tlbiA/PyBzdWI7XG5cXHRcXHRjcmVhdGVkLnJvbGVzID0gQXJyYXkuaXNBcnJheShwcmluY2lwYWwucm9sZXMpXG5cXHRcXHRcXHQ/IHByaW5jaXBhbC5yb2xlcy5maWx0ZXIoKHIpOiByIGlzIHN0cmluZyA9PiB0eXBlb2YgciA9PT0gXCJzdHJpbmdcIilcblxcdFxcdFxcdDogW107XG5cXHRcXHRyZXR1cm4gdGhpcy51c2Vycy5zYXZlKGNyZWF0ZWQpO1xuXFx0fVxufVxuYDtcblxuY29uc3QgQUJJTElUWV9GQUNUT1JZX1RTID0gYGltcG9ydCB7IEFiaWxpdHlCdWlsZGVyLCBjcmVhdGVNb25nb0FiaWxpdHkgfSBmcm9tIFwiQGNhc2wvYWJpbGl0eVwiO1xuaW1wb3J0IHR5cGUgeyBQcmluY2lwYWwgfSBmcm9tIFwiQGRlY29oZXJlL2NvcnRleFwiO1xuXG4vKiogUm9vdCByb2xlIOKAlCBleHBhbmRzIHRvIENBU0wgXFxgbWFuYWdlXFxgL1xcYGFsbFxcYCAoY292ZXJzIGV2ZXJ5IGZ1dHVyZSBhYmlsaXR5KS4gKi9cbmV4cG9ydCBjb25zdCBBRE1JTl9ST0xFID0gXCJhZG1pblwiO1xuXG4vKipcbiAqIFJvbGVzIGFyZSBjb2xsZWN0aW9ucyBvZiBhYmlsaXRpZXMuIEFkbWluIGlzIGEgd2lsZGNhcmQsIG5vdCBhbiBlbnVtZXJhdGVkIGxpc3QuXG4gKiBOb24tYWRtaW4gcHJpbmNpcGFscyBrZWVwIEF1dGgwIHNjb3BlIC8gcGVybWlzc2lvbiDihpIgYWJpbGl0eSBtYXBwaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQWJpbGl0eUZhY3RvcnkocHJpbmNpcGFsOiBQcmluY2lwYWwpIHtcblxcdGNvbnN0IHsgY2FuLCBidWlsZCB9ID0gbmV3IEFiaWxpdHlCdWlsZGVyKGNyZWF0ZU1vbmdvQWJpbGl0eSk7XG5cXHRpZiAocHJpbmNpcGFsLnJvbGVzPy5pbmNsdWRlcyhBRE1JTl9ST0xFKSkge1xuXFx0XFx0Y2FuKFwibWFuYWdlXCIsIFwiYWxsXCIpO1xuXFx0XFx0cmV0dXJuIGJ1aWxkKCk7XG5cXHR9XG5cXHRmb3IgKGNvbnN0IHNjb3BlIG9mIHByaW5jaXBhbC5zY29wZXMgPz8gW10pIHtcblxcdFxcdGNvbnN0IFthY3Rpb24sIHN1YmplY3RdID0gc2NvcGUuc3BsaXQoXCI6XCIpO1xuXFx0XFx0aWYgKGFjdGlvbiAmJiBzdWJqZWN0KSBjYW4oYWN0aW9uLCBzdWJqZWN0KTtcblxcdH1cblxcdHJldHVybiBidWlsZCgpO1xufVxuXG4vKipcbiAqIE1hcCBKV1QgcGF5bG9hZCDihpIgUHJpbmNpcGFsLlxuICpcbiAqIC0gXFxgcm9sZXNcXGAgY29tZSBmcm9tIHRoZSBJZFAgKEF1dGgwIFJCQUMgLyBBY3Rpb24gZnJvbSBhcHBfbWV0YWRhdGEpLiBBZG1pbnMgYXJlXG4gKiAgIGFzc2lnbmVkIGluIEF1dGgwIOKAlCBubyBzZXJ2ZXIgZW52IGNoYW5nZSByZXF1aXJlZCBmb3IgYWRkaXRpb25hbCBhZG1pbnMuXG4gKiAtIFxcYEFVVEgwX0FETUlOX1VTRVJfU1VCXFxgIGlzIGFuIG9wdGlvbmFsIGJvb3RzdHJhcCBzbyB0aGUgc2VlZGVkIGFkbWluIHdvcmtzXG4gKiAgIGJlZm9yZS93aXRob3V0IHJvbGVzIG9uIHRoZSBhY2Nlc3MgdG9rZW4uXG4gKiAtIEFQSSBwZXJtaXNzaW9ucyBhcmUgdGFrZW4gZnJvbSBcXGBzY29wZVxcYCBhbmQgZnJvbSBBdXRoMCdzIFxcYHBlcm1pc3Npb25zXFxgIGNsYWltLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFwUHJpbmNpcGFsKHBheWxvYWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUHJpbmNpcGFsIHtcblxcdGNvbnN0IHN1YiA9IHR5cGVvZiBwYXlsb2FkLnN1YiA9PT0gXCJzdHJpbmdcIiA/IHBheWxvYWQuc3ViIDogXCJcIjtcblxcdGNvbnN0IGZyb21TY29wZUNsYWltID1cblxcdFxcdHR5cGVvZiBwYXlsb2FkLnNjb3BlID09PSBcInN0cmluZ1wiXG5cXHRcXHRcXHQ/IHBheWxvYWQuc2NvcGUuc3BsaXQoXCIgXCIpLmZpbHRlcihCb29sZWFuKVxuXFx0XFx0XFx0OiBBcnJheS5pc0FycmF5KHBheWxvYWQuc2NvcGVzKVxuXFx0XFx0XFx0XFx0PyAocGF5bG9hZC5zY29wZXMgYXMgdW5rbm93bltdKS5maWx0ZXIoKHMpOiBzIGlzIHN0cmluZyA9PiB0eXBlb2YgcyA9PT0gXCJzdHJpbmdcIilcblxcdFxcdFxcdFxcdDogW107XG5cXHRjb25zdCBmcm9tUGVybWlzc2lvbnMgPSBBcnJheS5pc0FycmF5KHBheWxvYWQucGVybWlzc2lvbnMpXG5cXHRcXHQ/IChwYXlsb2FkLnBlcm1pc3Npb25zIGFzIHVua25vd25bXSkuZmlsdGVyKChzKTogcyBpcyBzdHJpbmcgPT4gdHlwZW9mIHMgPT09IFwic3RyaW5nXCIpXG5cXHRcXHQ6IFtdO1xuXFx0Y29uc3QgbWVyZ2VkID0gWy4uLm5ldyBTZXQoWy4uLmZyb21TY29wZUNsYWltLCAuLi5mcm9tUGVybWlzc2lvbnNdKV07XG5cXHRjb25zdCBzY29wZXMgPSBtZXJnZWQubGVuZ3RoID4gMCA/IG1lcmdlZCA6IHVuZGVmaW5lZDtcblxcdGNvbnN0IGZyb21Ub2tlbiA9IEFycmF5LmlzQXJyYXkocGF5bG9hZC5yb2xlcylcblxcdFxcdD8gKHBheWxvYWQucm9sZXMgYXMgdW5rbm93bltdKS5maWx0ZXIoKHIpOiByIGlzIHN0cmluZyA9PiB0eXBlb2YgciA9PT0gXCJzdHJpbmdcIilcblxcdFxcdDogW107XG5cXHRjb25zdCByb2xlcyA9XG5cXHRcXHRzdWIgJiYgc3ViID09PSBwcm9jZXNzLmVudi5BVVRIMF9BRE1JTl9VU0VSX1NVQlxuXFx0XFx0XFx0PyBbLi4ubmV3IFNldChbQURNSU5fUk9MRSwgLi4uZnJvbVRva2VuXSldXG5cXHRcXHRcXHQ6IGZyb21Ub2tlbi5sZW5ndGggPiAwXG5cXHRcXHRcXHRcXHQ/IGZyb21Ub2tlblxuXFx0XFx0XFx0XFx0OiB1bmRlZmluZWQ7XG5cXHRyZXR1cm4geyAuLi5wYXlsb2FkLCBzdWIsIHJvbGVzLCBzY29wZXMgfTtcbn1cbmA7XG5cbmFzeW5jIGZ1bmN0aW9uIGdldE9wdGlvbnMoXG5cdHdvcmtzcGFjZTogV29ya3NwYWNlU2NhZmZvbGQsXG5cdGNsaU9wdGlvbnM6IFBhcnRpYWw8QXV0aE9wdGlvbnM+LFxuKTogUHJvbWlzZTxQYXJ0aWFsPEF1dGhPcHRpb25zPj4ge1xuXHRpZiAoY2xpT3B0aW9ucy5hdXRoUHJvdmlkZXIgPT09IFwiYXV0aDBcIiAmJiAhY2xpT3B0aW9ucy5pc3N1ZXJCYXNlVXJsKSB7XG5cdFx0cmV0dXJuIGdldEF1dGgwT3B0aW9ucyh3b3Jrc3BhY2UsIGNsaU9wdGlvbnMpO1xuXHR9XG5cdGlmIChjbGlPcHRpb25zLmF1dGhQcm92aWRlciAhPSBudWxsKSByZXR1cm4ge307XG5cblx0Y29uc3QgY2hvaWNlcyA9IFt7IGxhYmVsOiBcIm5vbmVcIiBhcyBjb25zdCB9LCB7IGxhYmVsOiBcImF1dGgwXCIgYXMgY29uc3QgfV07XG5cdGNvbnN0IHNlbGVjdGVkID0gYXdhaXQgcGljayhcIlxcbiAgQXV0aCBwcm92aWRlcjogXCIsIGNob2ljZXMsIChjKSA9PiBjLmxhYmVsKTtcblx0Y29uc3QgcHJvdmlkZXIgPSBzZWxlY3RlZD8ubGFiZWwgPz8gXCJub25lXCI7XG5cblx0aWYgKHByb3ZpZGVyICE9PSBcImF1dGgwXCIpIHJldHVybiB7IGF1dGhQcm92aWRlcjogXCJub25lXCIgfTtcblxuXHRyZXR1cm4gZ2V0QXV0aDBPcHRpb25zKHdvcmtzcGFjZSwgY2xpT3B0aW9ucyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEF1dGgwT3B0aW9ucyhcblx0d29ya3NwYWNlOiBXb3Jrc3BhY2VTY2FmZm9sZCxcblx0Y2xpT3B0aW9uczogUGFydGlhbDxBdXRoT3B0aW9ucz4sXG4pOiBQcm9taXNlPFBhcnRpYWw8QXV0aE9wdGlvbnM+PiB7XG5cdGlmICghYXV0aDBDbGkuaXNJbnN0YWxsZWQoKSkge1xuXHRcdGNvbnNvbGUuZXJyb3IoXG5cdFx0XHRcIlxcbiAgVGhlIEF1dGgwIENMSSBpcyByZXF1aXJlZCBmb3IgYXV0b21hdGVkIHNldHVwLlxcblwiICtcblx0XHRcdFx0XCIgIEluc3RhbGw6IGJyZXcgaW5zdGFsbCBhdXRoMC9hdXRoMC1jbGkvYXV0aDBcXG5cIiArXG5cdFx0XHRcdFwiICBPciB2aXNpdDogaHR0cHM6Ly9naXRodWIuY29tL2F1dGgwL2F1dGgwLWNsaVxcblwiLFxuXHRcdCk7XG5cdFx0cHJvY2Vzcy5leGl0KDEpO1xuXHR9XG5cblx0cHJvY2Vzcy5zdGRvdXQud3JpdGUoXCJcXG4gIENoZWNraW5nIEF1dGgwIGNyZWRlbnRpYWxzLi4uXCIpO1xuXHRsZXQgdGVuYW50cyA9IGF1dGgwQ2xpLmxpc3RUZW5hbnRzKCk7XG5cdGlmICh0ZW5hbnRzLmxlbmd0aCA9PT0gMCkge1xuXHRcdHByb2Nlc3Muc3Rkb3V0LndyaXRlKFwiIG5vdCBsb2dnZWQgaW4uXFxuXCIpO1xuXHRcdGNvbnNvbGUubG9nKFwiICBMb2dnaW5nIGluIHRvIEF1dGgwICh5b3VyIGJyb3dzZXIgd2lsbCBvcGVuKS4uLlwiKTtcblx0XHRpZiAoIWF1dGgwQ2xpLmxvZ2luKCkpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXCJcXG4gIEF1dGgwIGxvZ2luIGZhaWxlZC5cIik7XG5cdFx0XHRwcm9jZXNzLmV4aXQoMSk7XG5cdFx0fVxuXHRcdHRlbmFudHMgPSBhdXRoMENsaS5saXN0VGVuYW50cygpO1xuXHR9XG5cblx0dHJ5IHtcblx0XHRhdXRoMENsaS5saXN0QXBpcygpO1xuXHRcdHByb2Nlc3Muc3Rkb3V0LndyaXRlKFwiIG9rLlxcblwiKTtcblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0aWYgKGVyciBpbnN0YW5jZW9mIGF1dGgwQ2xpLkF1dGgwQXV0aEVycm9yKSB7XG5cdFx0XHRwcm9jZXNzLnN0ZG91dC53cml0ZShcIiB0b2tlbiBleHBpcmVkLlxcblwiKTtcblx0XHRcdGNvbnNvbGUubG9nKFwiICBSZS1hdXRoZW50aWNhdGluZyAoeW91ciBicm93c2VyIHdpbGwgb3BlbikuLi5cIik7XG5cdFx0XHRpZiAoIWF1dGgwQ2xpLmxvZ2luKCkpIHtcblx0XHRcdFx0Y29uc29sZS5lcnJvcihcIlxcbiAgQXV0aDAgbG9naW4gZmFpbGVkLlwiKTtcblx0XHRcdFx0cHJvY2Vzcy5leGl0KDEpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGNvbnN0IGFjdGl2ZSA9IHRlbmFudHMuZmluZCgodCkgPT4gdC5hY3RpdmUpID8/IHRlbmFudHNbMF07XG5cdGNvbnN0IGlzc3VlckJhc2VVcmwgPSBgaHR0cHM6Ly8ke2FjdGl2ZS5uYW1lfWA7XG5cdGNvbnNvbGUubG9nKGBcXG4gIOKckyBBdXRoMCB0ZW5hbnQ6ICR7aXNzdWVyQmFzZVVybH1gKTtcblxuXHRwcm9jZXNzLnN0ZG91dC53cml0ZShcIlxcbiAgRmV0Y2hpbmcgQXV0aDAgQVBJcy4uLlwiKTtcblx0Y29uc3QgdXNlckFwaXMgPSBhdXRoMENsaS5saXN0QXBpcygpLmZpbHRlcigoYSkgPT4gIWEubmFtZS5pbmNsdWRlcyhcIk1hbmFnZW1lbnQgQVBJXCIpKTtcblx0cHJvY2Vzcy5zdGRvdXQud3JpdGUoYCBmb3VuZCAke3VzZXJBcGlzLmxlbmd0aH0uXFxuYCk7XG5cblx0dHlwZSBBcGlDaG9pY2UgPSB7IGxhYmVsOiBzdHJpbmc7IGV4aXN0aW5nOiBzdHJpbmcgfCBudWxsIH07XG5cdGNvbnN0IHByb2plY3ROYW1lID0gd29ya3NwYWNlLm5hbWU7XG5cdGNvbnN0IGFwaUNob2ljZXM6IEFwaUNob2ljZVtdID0gW1xuXHRcdHsgbGFiZWw6IGA8bmV3PiBodHRwczovL2FwaS4ke3Byb2plY3ROYW1lfWAsIGV4aXN0aW5nOiBudWxsIH0sXG5cdFx0Li4udXNlckFwaXMubWFwKChhKSA9PiAoeyBsYWJlbDogYCR7YS5uYW1lfSDigJQgJHthLmlkZW50aWZpZXJ9YCwgZXhpc3Rpbmc6IGEuaWRlbnRpZmllciB9KSksXG5cdF07XG5cblx0Y29uc3QgYXBpU2VsZWN0ZWQgPSBhd2FpdCBwaWNrKFwiXFxuICBTZWxlY3QgQXV0aDAgQVBJOiBcIiwgYXBpQ2hvaWNlcywgKGMpID0+IGMubGFiZWwpO1xuXG5cdGxldCBhdWRpZW5jZTogc3RyaW5nO1xuXHRpZiAoIWFwaVNlbGVjdGVkIHx8IGFwaVNlbGVjdGVkLmV4aXN0aW5nID09PSBudWxsKSB7XG5cdFx0Y29uc3QgZGVmYXVsdElkID0gYGh0dHBzOi8vYXBpLiR7cHJvamVjdE5hbWV9YDtcblx0XHRhdWRpZW5jZSA9IGF3YWl0IGFzayhgICBBUEkgSWRlbnRpZmllciBbJHtkZWZhdWx0SWR9XTogYCwgZGVmYXVsdElkKTtcblx0XHRjb25zb2xlLmxvZyhcIlxcbiAgQ3JlYXRpbmcgQXV0aDAgQVBJLi4uXCIpO1xuXHRcdGF1ZGllbmNlID0gYXV0aDBDbGkuY3JlYXRlQXBpKGAke3Byb2plY3ROYW1lfSBBUElgLCBhdWRpZW5jZSkuaWRlbnRpZmllcjtcblx0XHRjb25zb2xlLmxvZyhgICBcXHUyNzEzIEFQSSBjcmVhdGVkOiAke2F1ZGllbmNlfWApO1xuXHR9IGVsc2Uge1xuXHRcdGF1ZGllbmNlID0gYXBpU2VsZWN0ZWQuZXhpc3Rpbmc7XG5cdFx0Y29uc29sZS5sb2coYCAgXFx1MjcxMyBTZWxlY3RlZDogJHthdWRpZW5jZX1gKTtcblx0XHR0cnkge1xuXHRcdFx0YXV0aDBDbGkudXBkYXRlQXBpU2NvcGVzKGF1ZGllbmNlKTtcblx0XHRcdGNvbnNvbGUubG9nKGAgIFxcdTI3MTMgQVBJIHNjb3BlcyBlbnN1cmVkICgke2F1dGgwQ2xpLkhFTExPX0FQSV9TQ09QRVMuam9pbihcIiwgXCIpfSlgKTtcblx0XHR9IGNhdGNoIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXG5cdFx0XHRcdFwiICDinJcgRmFpbGVkIHRvIHVwZGF0ZSBBUEkgc2NvcGVzIOKAlCBhZGQgSGVsbG8gc2NvcGVzIGluIHRoZSBBdXRoMCBkYXNoYm9hcmQuXCIsXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IHdpdGhMb2NhbFVzZXJzID0gY2xpT3B0aW9ucy5kYXRhYmFzZVByb3ZpZGVyID09PSBcInBvc3RncmVzL3R5cGVvcm1cIjtcblx0bGV0IGFkbWluVXNlcm5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0bGV0IGFkbWluUGFzc3dvcmQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0aWYgKHdpdGhMb2NhbFVzZXJzKSB7XG5cdFx0YWRtaW5Vc2VybmFtZSA9XG5cdFx0XHRjbGlPcHRpb25zLmFkbWluVXNlcm5hbWUgPz8gKGF3YWl0IGFzayhcIlxcbiAgQWRtaW4gdXNlcm5hbWUgW2FkbWluXTogXCIsIFwiYWRtaW5cIikpO1xuXHRcdGFkbWluUGFzc3dvcmQgPSBjbGlPcHRpb25zLmFkbWluUGFzc3dvcmQ7XG5cdFx0aWYgKGFkbWluUGFzc3dvcmQgPT0gbnVsbCkge1xuXHRcdFx0YWRtaW5QYXNzd29yZCA9IGF3YWl0IGFzayhcIiAgQWRtaW4gcGFzc3dvcmQgKGxlYXZlIGJsYW5rIHRvIGdlbmVyYXRlKTogXCIpO1xuXHRcdFx0aWYgKCFhZG1pblBhc3N3b3JkKSB7XG5cdFx0XHRcdGFkbWluUGFzc3dvcmQgPSBhdXRoMENsaS5nZW5lcmF0ZUFkbWluUGFzc3dvcmQoKTtcblx0XHRcdFx0Y29uc29sZS5sb2coYCAg4pyTIEdlbmVyYXRlZCBhZG1pbiBwYXNzd29yZCAod3JpdHRlbiB0byAuZW52KTogJHthZG1pblBhc3N3b3JkfWApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7XG5cdFx0YXV0aFByb3ZpZGVyOiBcImF1dGgwXCIsXG5cdFx0aXNzdWVyQmFzZVVybCxcblx0XHRhdWRpZW5jZSxcblx0XHQuLi4od2l0aExvY2FsVXNlcnMgPyB7IGFkbWluVXNlcm5hbWUsIGFkbWluUGFzc3dvcmQgfSA6IHt9KSxcblx0fTtcbn1cblxuZnVuY3Rpb24gYWRtaW5FbWFpbCh3b3Jrc3BhY2VOYW1lOiBzdHJpbmcsIHVzZXJuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRpZiAodXNlcm5hbWUuaW5jbHVkZXMoXCJAXCIpKSByZXR1cm4gdXNlcm5hbWU7XG5cdGNvbnN0IHNsdWcgPSB3b3Jrc3BhY2VOYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15hLXowLTktXS9nLCBcIi1cIik7XG5cdHJldHVybiBgJHt1c2VybmFtZX1AJHtzbHVnfS5leGFtcGxlLmNvbWA7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUF1dGgwQWRtaW5Vc2VyKFxuXHR3b3Jrc3BhY2U6IFdvcmtzcGFjZVNjYWZmb2xkLFxuXHRvcHRpb25zOiBBdXRoT3B0aW9ucyxcblx0YXV0aENvbmZpZzogQXV0aENvbmZpZ01vZGVsLFxuKTogdm9pZCB7XG5cdGNvbnN0IHVzZXJuYW1lID0gb3B0aW9ucy5hZG1pblVzZXJuYW1lID8/IFwiYWRtaW5cIjtcblx0Y29uc3QgcGFzc3dvcmQgPSBvcHRpb25zLmFkbWluUGFzc3dvcmQ7XG5cdGlmICghcGFzc3dvcmQpIHJldHVybjtcblxuXHRjb25zdCBlbWFpbCA9IGFkbWluRW1haWwod29ya3NwYWNlLm5hbWUsIHVzZXJuYW1lKTtcblx0dHJ5IHtcblx0XHRjb25zdCBhZG1pbiA9IGF1dGgwQ2xpLmNyZWF0ZUFkbWluRGF0YWJhc2VVc2VyKHsgZW1haWwsIHBhc3N3b3JkLCB1c2VybmFtZSB9KTtcblx0XHRhdXRoQ29uZmlnLnNldEFkbWluVXNlcih7XG5cdFx0XHRzdWI6IGFkbWluLnVzZXJfaWQsXG5cdFx0XHRlbWFpbDogYWRtaW4uZW1haWwsXG5cdFx0XHRwYXNzd29yZDogYWRtaW4ucGFzc3dvcmQsXG5cdFx0XHR1c2VybmFtZTogYWRtaW4udXNlcm5hbWUsXG5cdFx0fSk7XG5cdFx0d29ya3NwYWNlXG5cdFx0XHQuZ2V0TW9kZWw8RW52RmlsZT4oV0VMTF9LTk9XTl9GSUxFUy5FTlZfRklMRSlcblx0XHRcdD8uYWRkRW50cnkoXCJBVVRIMF9BRE1JTl9VU0VSX1NVQlwiLCBhZG1pbi51c2VyX2lkKVxuXHRcdFx0LmFkZEVudHJ5KFwiQVVUSDBfQURNSU5fVVNFUl9FTUFJTFwiLCBhZG1pbi5lbWFpbClcblx0XHRcdC5hZGRFbnRyeShcIkFVVEgwX0FETUlOX1VTRVJfUEFTU1dPUkRcIiwgYWRtaW4ucGFzc3dvcmQpXG5cdFx0XHQuYWRkRW50cnkoXCJBVVRIMF9BRE1JTl9VU0VSTkFNRVwiLCBhZG1pbi51c2VybmFtZSk7XG5cdFx0Y29uc29sZS5sb2coYCAg4pyTIEF1dGgwIGFkbWluIHVzZXIgcmVhZHk6ICR7YWRtaW4uZW1haWx9IChyb2xlOiAke0FETUlOX1JPTEV9KWApO1xuXHRcdGNvbnNvbGUubG9nKGAgICAgTG9naW4gd2l0aCBFTUFJTCAobm90IHVzZXJuYW1lKTogJHthZG1pbi5lbWFpbH1gKTtcblx0XHRjb25zb2xlLmxvZyhgICAgIFBhc3N3b3JkOiBzZWUgQVVUSDBfQURNSU5fVVNFUl9QQVNTV09SRCBpbiAuZW52YCk7XG5cdH0gY2F0Y2ggKGVycikge1xuXHRcdGNvbnNvbGUuZXJyb3IoXG5cdFx0XHRgICDinJcgRmFpbGVkIHRvIGVuc3VyZSBBdXRoMCBhZG1pbiB1c2VyICgke2VtYWlsfSk6ICR7ZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IGVycn1gLFxuXHRcdCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gc2NhZmZvbGRMb2NhbFVzZXJQcm9maWxlKHdvcmtzcGFjZTogV29ya3NwYWNlU2NhZmZvbGQpOiB2b2lkIHtcblx0d29ya3NwYWNlXG5cdFx0LmdldE1vZGVsPFBhY2thZ2VKc29uPihXRUxMX0tOT1dOX0ZJTEVTLlBBQ0tBR0VfSlNPTilcblx0XHQ/LmFkZERlcGVuZGVuY3koXCJAY2FzbC9hYmlsaXR5XCIsIFwiXjYuOC4xXCIpO1xuXG5cdGZvciAoY29uc3QgcHJvamVjdCBvZiB3b3Jrc3BhY2UuZ2V0UHJvamVjdHMoKSkge1xuXHRcdHByb2plY3Rcblx0XHRcdC5nZXRNb2RlbDxBcGlQYWNrYWdlSnNvbj4oV0VMTF9LTk9XTl9GSUxFUy5BUElfUEFDS0FHRV9KU09OKVxuXHRcdFx0Py5hZGREZXBlbmRlbmN5KFwiQGNhc2wvYWJpbGl0eVwiLCBcIl42LjguMVwiKTtcblxuXHRcdHByb2plY3Rcblx0XHRcdC5nZXRNb2RlbDxNYWluU291cmNlRmlsZT4oV0VMTF9LTk9XTl9GSUxFUy5NQUlOX1RTKVxuXHRcdFx0Py5hZGRFbnRpdHkoeyBjbGFzc05hbWU6IFwiVXNlckVudGl0eVwiLCBpbXBvcnRQYXRoOiBcIi4vZW50aXRpZXMvdXNlci5lbnRpdHkuanNcIiB9KVxuXHRcdFx0LmFkZFJlcG9zaXRvcnkoe1xuXHRcdFx0XHRjbGFzc05hbWU6IFwiVXNlckVudGl0eVJlcG9zaXRvcnlcIixcblx0XHRcdFx0aW1wb3J0UGF0aDogXCIuL3JlcG9zaXRvcmllcy91c2VyLnJlcG9zaXRvcnkuanNcIixcblx0XHRcdH0pXG5cdFx0XHQuYWRkU2VydmljZSh7XG5cdFx0XHRcdGNsYXNzTmFtZTogXCJVc2VyU2VydmljZVwiLFxuXHRcdFx0XHRpbXBvcnRQYXRoOiBcIi4vc2VydmljZXMvdXNlci5zZXJ2aWNlLmpzXCIsXG5cdFx0XHRcdHNjb3BlOiBcInJlcXVlc3RcIixcblx0XHRcdH0pXG5cdFx0XHQuYWRkSW1wb3J0KFwiY3JlYXRlQWJpbGl0eUZhY3RvcnlcIiwgXCIuL2F1dGgvYWJpbGl0eS5mYWN0b3J5LmpzXCIpXG5cdFx0XHQuYWRkSW1wb3J0KFwibWFwUHJpbmNpcGFsXCIsIFwiLi9hdXRoL2FiaWxpdHkuZmFjdG9yeS5qc1wiKVxuXHRcdFx0LnNldFR5cGVPcm1TZWVkKFxuXHRcdFx0XHRbXG5cdFx0XHRcdFx0XCJjb25zdCBzdWIgPSBwcm9jZXNzLmVudi5BVVRIMF9BRE1JTl9VU0VSX1NVQjtcIixcblx0XHRcdFx0XHRcImlmICghc3ViKSByZXR1cm47XCIsXG5cdFx0XHRcdFx0XCJjb25zdCByZXBvID0gZGF0YVNvdXJjZS5nZXRSZXBvc2l0b3J5KFVzZXJFbnRpdHkpO1wiLFxuXHRcdFx0XHRcdFwiY29uc3QgZXhpc3RpbmcgPSBhd2FpdCByZXBvLmZpbmRPbmUoeyB3aGVyZTogeyBzdWIgfSB9KTtcIixcblx0XHRcdFx0XHRcImlmIChleGlzdGluZykgcmV0dXJuO1wiLFxuXHRcdFx0XHRcdFwiYXdhaXQgcmVwby5zYXZlKHJlcG8uY3JlYXRlKHtcIixcblx0XHRcdFx0XHRcIiAgc3ViLFwiLFxuXHRcdFx0XHRcdFwiICBlbWFpbDogcHJvY2Vzcy5lbnYuQVVUSDBfQURNSU5fVVNFUl9FTUFJTCA/PyBudWxsLFwiLFxuXHRcdFx0XHRcdCcgIGRpc3BsYXlOYW1lOiBwcm9jZXNzLmVudi5BVVRIMF9BRE1JTl9VU0VSTkFNRSA/PyBcImFkbWluXCIsJyxcblx0XHRcdFx0XHQnICByb2xlczogW1wiYWRtaW5cIl0sJyxcblx0XHRcdFx0XHRcIn0pKTtcIixcblx0XHRcdFx0XS5qb2luKFwiIFwiKSxcblx0XHRcdCk7XG5cblx0XHRwcm9qZWN0LmFkZEZpbGUoe1xuXHRcdFx0ZmlsZXM6ICgpID0+IFtcblx0XHRcdFx0eyBmaWxlUGF0aDogXCJzcmMvZW50aXRpZXMvdXNlci5lbnRpdHkudHNcIiwgY29udGVudDogVVNFUl9FTlRJVFlfVFMgfSxcblx0XHRcdFx0eyBmaWxlUGF0aDogXCJzcmMvcmVwb3NpdG9yaWVzL3VzZXIucmVwb3NpdG9yeS50c1wiLCBjb250ZW50OiBVU0VSX1JFUE9TSVRPUllfVFMgfSxcblx0XHRcdFx0eyBmaWxlUGF0aDogXCJzcmMvc2VydmljZXMvdXNlci5zZXJ2aWNlLnRzXCIsIGNvbnRlbnQ6IFVTRVJfU0VSVklDRV9UUyB9LFxuXHRcdFx0XHR7IGZpbGVQYXRoOiBcInNyYy9hdXRoL2FiaWxpdHkuZmFjdG9yeS50c1wiLCBjb250ZW50OiBBQklMSVRZX0ZBQ1RPUllfVFMgfSxcblx0XHRcdF0sXG5cdFx0fSk7XG5cdH1cblxuXHRmb3IgKGNvbnN0IGNvbnRyb2xsZXIgb2Ygd29ya3NwYWNlLmdldE1vZGVscyhDb250cm9sbGVyU291cmNlRmlsZSkpIHtcblx0XHRjb250cm9sbGVyXG5cdFx0XHQuYWRkSW1wb3J0KFwiVXNlclNlcnZpY2VcIiwgXCIuLi9zZXJ2aWNlcy91c2VyLnNlcnZpY2UuanNcIilcblx0XHRcdC5hZGRDb25zdHJ1Y3RvclBhcmFtKFwicHJpdmF0ZSByZWFkb25seSB1c2VyczogVXNlclNlcnZpY2VcIik7XG5cdFx0Y29udHJvbGxlci5nZXRNZXRob2QoXCJnZXRPbmVcIikuc2V0QXN5bmModHJ1ZSkuc2V0Qm9keShbXG5cdFx0XHRcImNvbnN0IHVzZXIgPSBhd2FpdCB0aGlzLnVzZXJzLmVuc3VyZUZyb21QcmluY2lwYWwodGhpcy5wcmluY2lwYWxQcm92aWRlci5jdXJyZW50UHJpbmNpcGFsKTtcIixcblx0XHRcdC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9UZW1wbGF0ZUN1cmx5SW5TdHJpbmc6IHRlbXBsYXRlIGxpdGVyYWwgaW4gZ2VuZXJhdGVkIGNvZGVcblx0XHRcdFwicmV0dXJuIHsgaWQsIG1lc3NhZ2U6IGBIZWxsbyAke3VzZXIuZGlzcGxheU5hbWV9IWAsIHVzZXJuYW1lOiB1c2VyLmRpc3BsYXlOYW1lIH07XCIsXG5cdFx0XSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gc2NhZmZvbGQod29ya3NwYWNlOiBXb3Jrc3BhY2VTY2FmZm9sZCwgb3B0aW9uczogQXV0aE9wdGlvbnMpOiB2b2lkIHtcblx0aWYgKG9wdGlvbnMuYXV0aFByb3ZpZGVyICE9PSBcImF1dGgwXCIpIHJldHVybjtcblxuXHRjb25zdCByZXNvdXJjZSA9IFwiSGVsbG9cIjtcblx0Y29uc3Qgd2l0aExvY2FsVXNlcnMgPSBvcHRpb25zLmRhdGFiYXNlUHJvdmlkZXIgPT09IFwicG9zdGdyZXMvdHlwZW9ybVwiO1xuXG5cdGZvciAoY29uc3QgY29udHJvbGxlciBvZiB3b3Jrc3BhY2UuZ2V0TW9kZWxzKENvbnRyb2xsZXJTb3VyY2VGaWxlKSkge1xuXHRcdGNvbnRyb2xsZXJcblx0XHRcdC5hZGREZWNvcmF0b3IoYEBBdXRob3JpemUoXCJyZWFkXCIsIFwiJHtyZXNvdXJjZX1cIilgKVxuXHRcdFx0LmFkZENvcnRleEltcG9ydChcIkFsbG93QW5vbnltb3VzXCIpXG5cdFx0XHQuYWRkQ29ydGV4SW1wb3J0KFwiQXV0aG9yaXplXCIpXG5cdFx0XHQuYWRkQ29ydGV4SW1wb3J0KFwiSVByaW5jaXBhbFByb3ZpZGVyVG9rZW5cIilcblx0XHRcdC5hZGRDb3J0ZXhJbXBvcnQoXCJJUHJpbmNpcGFsUHJvdmlkZXJcIiwgdHJ1ZSlcblx0XHRcdC5hZGRJbXBvcnQoXCJpbmplY3RcIiwgXCJAZGVjb2hlcmUvY3J1Y2libGUvZGVjb3JhdG9yc1wiKVxuXHRcdFx0LmFkZENvbnN0cnVjdG9yUGFyYW0oXG5cdFx0XHRcdGBAaW5qZWN0KElQcmluY2lwYWxQcm92aWRlclRva2VuKSBwcml2YXRlIHJlYWRvbmx5IHByaW5jaXBhbFByb3ZpZGVyOiBJUHJpbmNpcGFsUHJvdmlkZXJgLFxuXHRcdFx0KTtcblx0XHRjb250cm9sbGVyLmdldE1ldGhvZChcImdldEFsbFwiKS5hZGREZWNvcmF0b3IoXCJAQWxsb3dBbm9ueW1vdXMoKVwiKTtcblx0XHRpZiAoIXdpdGhMb2NhbFVzZXJzKSB7XG5cdFx0XHRjb250cm9sbGVyLmdldE1ldGhvZChcImdldE9uZVwiKS5zZXRCb2R5KFtcblx0XHRcdFx0XCJjb25zdCBwcmluY2lwYWwgPSB0aGlzLnByaW5jaXBhbFByb3ZpZGVyLmN1cnJlbnRQcmluY2lwYWw7XCIsXG5cdFx0XHRcdFwiY29uc3QgdXNlcm5hbWUgPVwiLFxuXHRcdFx0XHQnXFx0KHR5cGVvZiBwcmluY2lwYWw/Lm5hbWUgPT09IFwic3RyaW5nXCIgJiYgcHJpbmNpcGFsLm5hbWUpIHx8Jyxcblx0XHRcdFx0J1xcdCh0eXBlb2YgcHJpbmNpcGFsPy5uaWNrbmFtZSA9PT0gXCJzdHJpbmdcIiAmJiBwcmluY2lwYWwubmlja25hbWUpIHx8Jyxcblx0XHRcdFx0J1xcdCh0eXBlb2YgcHJpbmNpcGFsPy5lbWFpbCA9PT0gXCJzdHJpbmdcIiAmJiBwcmluY2lwYWwuZW1haWwpIHx8Jyxcblx0XHRcdFx0J1xcdCh0eXBlb2YgcHJpbmNpcGFsPy5wcmVmZXJyZWRfdXNlcm5hbWUgPT09IFwic3RyaW5nXCIgJiYgcHJpbmNpcGFsLnByZWZlcnJlZF91c2VybmFtZSkgfHwnLFxuXHRcdFx0XHRcIlxcdHByaW5jaXBhbD8uc3ViIHx8XCIsXG5cdFx0XHRcdCdcXHRcInVua25vd25cIjsnLFxuXHRcdFx0XHQvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vVGVtcGxhdGVDdXJseUluU3RyaW5nOiB0ZW1wbGF0ZSBsaXRlcmFsIGluIGdlbmVyYXRlZCBjb2RlXG5cdFx0XHRcdFwicmV0dXJuIHsgaWQsIG1lc3NhZ2U6IGBIZWxsbyAke3VzZXJuYW1lfSFgLCB1c2VybmFtZSB9O1wiLFxuXHRcdFx0XSk7XG5cdFx0fVxuXHRcdGNvbnRyb2xsZXIuZ2V0TWV0aG9kKFwiY3JlYXRlXCIpLmFkZERlY29yYXRvcihgQEF1dGhvcml6ZShcImNyZWF0ZVwiLCBcIiR7cmVzb3VyY2V9XCIpYCk7XG5cdFx0Y29udHJvbGxlci5nZXRNZXRob2QoXCJ1cGRhdGVcIikuYWRkRGVjb3JhdG9yKGBAQXV0aG9yaXplKFwidXBkYXRlXCIsIFwiJHtyZXNvdXJjZX1cIilgKTtcblx0XHRjb250cm9sbGVyLmdldE1ldGhvZChcInJlbW92ZVwiKS5hZGREZWNvcmF0b3IoYEBBdXRob3JpemUoXCJkZWxldGVcIiwgXCIke3Jlc291cmNlfVwiKWApO1xuXHR9XG5cblx0Zm9yIChjb25zdCBwcm9qZWN0IG9mIHdvcmtzcGFjZS5nZXRQcm9qZWN0cygpKSB7XG5cdFx0cHJvamVjdFxuXHRcdFx0LmdldE1vZGVsPE1haW5Tb3VyY2VGaWxlPihXRUxMX0tOT1dOX0ZJTEVTLk1BSU5fVFMpXG5cdFx0XHQ/LmFkZFNpZGVFZmZlY3RJbXBvcnQoXCJAZGVjb2hlcmUvY29ydGV4L2F1dGhcIik7XG5cdH1cblxuXHRpZiAod2l0aExvY2FsVXNlcnMpIHtcblx0XHRzY2FmZm9sZExvY2FsVXNlclByb2ZpbGUod29ya3NwYWNlKTtcblx0XHRmb3IgKGNvbnN0IHByb2plY3Qgb2Ygd29ya3NwYWNlLmdldFByb2plY3RzKCkpIHtcblx0XHRcdHByb2plY3Rcblx0XHRcdFx0LmdldE1vZGVsPE1haW5Tb3VyY2VGaWxlPihXRUxMX0tOT1dOX0ZJTEVTLk1BSU5fVFMpXG5cdFx0XHRcdD8uYWRkQnVpbGRlckNhbGwoXCIud2l0aEF1dGgoY3JlYXRlQWJpbGl0eUZhY3RvcnksIHsgcHJpbmNpcGFsTWFwcGVyOiBtYXBQcmluY2lwYWwgfSlcIik7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGZvciAoY29uc3QgcHJvamVjdCBvZiB3b3Jrc3BhY2UuZ2V0UHJvamVjdHMoKSkge1xuXHRcdFx0cHJvamVjdFxuXHRcdFx0XHQuZ2V0TW9kZWw8TWFpblNvdXJjZUZpbGU+KFdFTExfS05PV05fRklMRVMuTUFJTl9UUylcblx0XHRcdFx0Py5hZGRCdWlsZGVyQ2FsbChcIi53aXRoQXV0aCgpXCIpO1xuXHRcdH1cblx0fVxuXG5cdC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9UZW1wbGF0ZUN1cmx5SW5TdHJpbmc6IGludGVudGlvbmFsIFlBTUwgZW52LXZhciBwbGFjZWhvbGRlcnNcblx0Y29uc3QgaXNzdWVyUGxhY2Vob2xkZXIgPSBcIiR7QVVUSDBfSVNTVUVSX0JBU0VfVVJMfVwiO1xuXHQvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vVGVtcGxhdGVDdXJseUluU3RyaW5nOiBpbnRlbnRpb25hbCBZQU1MIGVudi12YXIgcGxhY2Vob2xkZXJzXG5cdGNvbnN0IGF1ZFBsYWNlaG9sZGVyID0gXCIke0FVVEgwX0FVRElFTkNFfVwiO1xuXG5cdGNvbnN0IGNvbmZpZ1NlY3Rpb24gPSBgYXV0aDpcXG4gIGRpc2NvdmVyeVVybDogJHtpc3N1ZXJQbGFjZWhvbGRlcn1cXG4gIGF1ZGllbmNlOiAke2F1ZFBsYWNlaG9sZGVyfVxcbmA7XG5cblx0d29ya3NwYWNlLmdldE1vZGVsPENvbmZpZ1lhbWw+KFdFTExfS05PV05fRklMRVMuQ09ORklHX1lBTUwpPy5hZGRTZWN0aW9uKGNvbmZpZ1NlY3Rpb24pO1xuXG5cdHdvcmtzcGFjZVxuXHRcdC5nZXRNb2RlbDxFbnZGaWxlPihXRUxMX0tOT1dOX0ZJTEVTLkVOVl9GSUxFKVxuXHRcdD8uYWRkRW50cnkoXCJBVVRIMF9JU1NVRVJfQkFTRV9VUkxcIiwgb3B0aW9ucy5pc3N1ZXJCYXNlVXJsID8/IFwiXCIpXG5cdFx0LmFkZEVudHJ5KFwiQVVUSDBfQVVESUVOQ0VcIiwgb3B0aW9ucy5hdWRpZW5jZSA/PyBcIlwiKTtcblxuXHRjb25zdCBhdXRoQ29uZmlnID0gbmV3IEF1dGhDb25maWdNb2RlbCh7XG5cdFx0aXNzdWVyQmFzZVVybDogb3B0aW9ucy5pc3N1ZXJCYXNlVXJsID8/IFwiXCIsXG5cdFx0YXVkaWVuY2U6IG9wdGlvbnMuYXVkaWVuY2UgPz8gXCJcIixcblx0fSk7XG5cdHdvcmtzcGFjZS5hZGRNb2RlbChhdXRoQ29uZmlnKTtcblxuXHRpZiAod2l0aExvY2FsVXNlcnMgJiYgb3B0aW9ucy5hZG1pblBhc3N3b3JkKSB7XG5cdFx0Y3JlYXRlQXV0aDBBZG1pblVzZXIod29ya3NwYWNlLCBvcHRpb25zLCBhdXRoQ29uZmlnKTtcblx0fVxufVxuXG5leHBvcnQgY29uc3QgQXV0aEZlYXR1cmU6IEZlYXR1cmU8QXV0aE9wdGlvbnM+ID0geyBnZXRPcHRpb25zLCBzY2FmZm9sZCB9O1xuIl0sIm5hbWVzIjpbIkF1dGhGZWF0dXJlIiwiQURNSU5fUk9MRSIsIlVTRVJfRU5USVRZX1RTIiwiVVNFUl9SRVBPU0lUT1JZX1RTIiwiVVNFUl9TRVJWSUNFX1RTIiwiQUJJTElUWV9GQUNUT1JZX1RTIiwiZ2V0T3B0aW9ucyIsIndvcmtzcGFjZSIsImNsaU9wdGlvbnMiLCJhdXRoUHJvdmlkZXIiLCJpc3N1ZXJCYXNlVXJsIiwiZ2V0QXV0aDBPcHRpb25zIiwiY2hvaWNlcyIsImxhYmVsIiwic2VsZWN0ZWQiLCJwaWNrIiwiYyIsInByb3ZpZGVyIiwiYXV0aDBDbGkiLCJpc0luc3RhbGxlZCIsImNvbnNvbGUiLCJlcnJvciIsInByb2Nlc3MiLCJleGl0Iiwic3Rkb3V0Iiwid3JpdGUiLCJ0ZW5hbnRzIiwibGlzdFRlbmFudHMiLCJsZW5ndGgiLCJsb2ciLCJsb2dpbiIsImxpc3RBcGlzIiwiZXJyIiwiQXV0aDBBdXRoRXJyb3IiLCJhY3RpdmUiLCJmaW5kIiwidCIsIm5hbWUiLCJ1c2VyQXBpcyIsImZpbHRlciIsImEiLCJpbmNsdWRlcyIsInByb2plY3ROYW1lIiwiYXBpQ2hvaWNlcyIsImV4aXN0aW5nIiwibWFwIiwiaWRlbnRpZmllciIsImFwaVNlbGVjdGVkIiwiYXVkaWVuY2UiLCJkZWZhdWx0SWQiLCJhc2siLCJjcmVhdGVBcGkiLCJ1cGRhdGVBcGlTY29wZXMiLCJIRUxMT19BUElfU0NPUEVTIiwiam9pbiIsIndpdGhMb2NhbFVzZXJzIiwiZGF0YWJhc2VQcm92aWRlciIsImFkbWluVXNlcm5hbWUiLCJhZG1pblBhc3N3b3JkIiwiZ2VuZXJhdGVBZG1pblBhc3N3b3JkIiwiYWRtaW5FbWFpbCIsIndvcmtzcGFjZU5hbWUiLCJ1c2VybmFtZSIsInNsdWciLCJ0b0xvd2VyQ2FzZSIsInJlcGxhY2UiLCJjcmVhdGVBdXRoMEFkbWluVXNlciIsIm9wdGlvbnMiLCJhdXRoQ29uZmlnIiwicGFzc3dvcmQiLCJlbWFpbCIsImFkbWluIiwiY3JlYXRlQWRtaW5EYXRhYmFzZVVzZXIiLCJzZXRBZG1pblVzZXIiLCJzdWIiLCJ1c2VyX2lkIiwiZ2V0TW9kZWwiLCJXRUxMX0tOT1dOX0ZJTEVTIiwiRU5WX0ZJTEUiLCJhZGRFbnRyeSIsIkVycm9yIiwibWVzc2FnZSIsInNjYWZmb2xkTG9jYWxVc2VyUHJvZmlsZSIsIlBBQ0tBR0VfSlNPTiIsImFkZERlcGVuZGVuY3kiLCJwcm9qZWN0IiwiZ2V0UHJvamVjdHMiLCJBUElfUEFDS0FHRV9KU09OIiwiTUFJTl9UUyIsImFkZEVudGl0eSIsImNsYXNzTmFtZSIsImltcG9ydFBhdGgiLCJhZGRSZXBvc2l0b3J5IiwiYWRkU2VydmljZSIsInNjb3BlIiwiYWRkSW1wb3J0Iiwic2V0VHlwZU9ybVNlZWQiLCJhZGRGaWxlIiwiZmlsZXMiLCJmaWxlUGF0aCIsImNvbnRlbnQiLCJjb250cm9sbGVyIiwiZ2V0TW9kZWxzIiwiQ29udHJvbGxlclNvdXJjZUZpbGUiLCJhZGRDb25zdHJ1Y3RvclBhcmFtIiwiZ2V0TWV0aG9kIiwic2V0QXN5bmMiLCJzZXRCb2R5Iiwic2NhZmZvbGQiLCJyZXNvdXJjZSIsImFkZERlY29yYXRvciIsImFkZENvcnRleEltcG9ydCIsImFkZFNpZGVFZmZlY3RJbXBvcnQiLCJhZGRCdWlsZGVyQ2FsbCIsImlzc3VlclBsYWNlaG9sZGVyIiwiYXVkUGxhY2Vob2xkZXIiLCJjb25maWdTZWN0aW9uIiwiQ09ORklHX1lBTUwiLCJhZGRTZWN0aW9uIiwiQXV0aENvbmZpZ01vZGVsIiwiYWRkTW9kZWwiXSwibWFwcGluZ3MiOiI7Ozs7K0JBa2VhQTs7O2VBQUFBOzs7d0JBbGVhO3VCQUVPO2lDQU1EOzJDQUNLO2tFQUVYOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFXMUIsTUFBTUMsYUFBYTtBQUVuQixNQUFNQyxpQkFBaUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBcUJ4QixDQUFDO0FBRUQsTUFBTUMscUJBQXFCLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQWU1QixDQUFDO0FBRUQsTUFBTUMsa0JBQWtCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF1RHpCLENBQUM7QUFFRCxNQUFNQyxxQkFBcUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF3RDVCLENBQUM7QUFFRCxlQUFlQyxXQUNkQyxTQUE0QixFQUM1QkMsVUFBZ0M7SUFFaEMsSUFBSUEsV0FBV0MsWUFBWSxLQUFLLFdBQVcsQ0FBQ0QsV0FBV0UsYUFBYSxFQUFFO1FBQ3JFLE9BQU9DLGdCQUFnQkosV0FBV0M7SUFDbkM7SUFDQSxJQUFJQSxXQUFXQyxZQUFZLElBQUksTUFBTSxPQUFPLENBQUM7SUFFN0MsTUFBTUcsVUFBVTtRQUFDO1lBQUVDLE9BQU87UUFBZ0I7UUFBRztZQUFFQSxPQUFPO1FBQWlCO0tBQUU7SUFDekUsTUFBTUMsV0FBVyxNQUFNQyxJQUFBQSxZQUFJLEVBQUMsdUJBQXVCSCxTQUFTLENBQUNJLElBQU1BLEVBQUVILEtBQUs7SUFDMUUsTUFBTUksV0FBV0gsVUFBVUQsU0FBUztJQUVwQyxJQUFJSSxh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
|
|
@@ -9,12 +9,14 @@ Object.defineProperty(exports, "formatScaffoldedFiles", {
|
|
|
9
9
|
}
|
|
10
10
|
});
|
|
11
11
|
const _nodechild_process = require("node:child_process");
|
|
12
|
-
function formatScaffoldedFiles(targetDir
|
|
12
|
+
function formatScaffoldedFiles(targetDir, paths = [
|
|
13
|
+
"."
|
|
14
|
+
]) {
|
|
13
15
|
process.stdout.write("\n Formatting scaffolded files with Biome...");
|
|
14
16
|
let result = (0, _nodechild_process.spawnSync)("biome", [
|
|
15
17
|
"check",
|
|
16
18
|
"--write",
|
|
17
|
-
|
|
19
|
+
...paths
|
|
18
20
|
], {
|
|
19
21
|
cwd: targetDir,
|
|
20
22
|
encoding: "utf8",
|
|
@@ -26,7 +28,7 @@ function formatScaffoldedFiles(targetDir) {
|
|
|
26
28
|
"@biomejs/biome",
|
|
27
29
|
"check",
|
|
28
30
|
"--write",
|
|
29
|
-
|
|
31
|
+
...paths
|
|
30
32
|
], {
|
|
31
33
|
cwd: targetDir,
|
|
32
34
|
encoding: "utf8",
|
|
@@ -44,4 +46,4 @@ function formatScaffoldedFiles(targetDir) {
|
|
|
44
46
|
}
|
|
45
47
|
}
|
|
46
48
|
|
|
47
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL2ZlYXR1cmVzL2Jpb21lLWZvcm1hdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzcGF3blN5bmMgfSBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCI7XG5cbi8qKlxuICogRm9ybWF0L2xpbnQtZml4IGFsbCBmaWxlcyBpbiB0aGUgc2NhZmZvbGRlZCB3b3Jrc3BhY2Ugd2l0aCBCaW9tZS5cbiAqIFByZWZlciBhIGdsb2JhbCBgYmlvbWVgIGJpbmFyeSAoYnVpbGRlciBpbWFnZSk7IGZhbGwgYmFjayB0byBgbnB4YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFNjYWZmb2xkZWRGaWxlcyh0YXJnZXREaXI6IHN0cmluZywgcGF0aHM6IHN0cmluZ1tdID0gW1wiLlwiXSk6IHZvaWQge1xuXHRwcm9jZXNzLnN0ZG91dC53cml0ZShcIlxcbiAgRm9ybWF0dGluZyBzY2FmZm9sZGVkIGZpbGVzIHdpdGggQmlvbWUuLi5cIik7XG5cblx0bGV0IHJlc3VsdCA9IHNwYXduU3luYyhcImJpb21lXCIsIFtcImNoZWNrXCIsIFwiLS13cml0ZVwiLCAuLi5wYXRoc10sIHtcblx0XHRjd2Q6IHRhcmdldERpcixcblx0XHRlbmNvZGluZzogXCJ1dGY4XCIsXG5cdFx0c3RkaW86IFwicGlwZVwiLFxuXHR9KTtcblxuXHRpZiAocmVzdWx0LmVycm9yICYmIChyZXN1bHQuZXJyb3IgYXMgTm9kZUpTLkVycm5vRXhjZXB0aW9uKS5jb2RlID09PSBcIkVOT0VOVFwiKSB7XG5cdFx0cmVzdWx0ID0gc3Bhd25TeW5jKFwibnB4XCIsIFtcIi0teWVzXCIsIFwiQGJpb21lanMvYmlvbWVcIiwgXCJjaGVja1wiLCBcIi0td3JpdGVcIiwgLi4ucGF0aHNdLCB7XG5cdFx0XHRjd2Q6IHRhcmdldERpcixcblx0XHRcdGVuY29kaW5nOiBcInV0ZjhcIixcblx0XHRcdHN0ZGlvOiBcInBpcGVcIixcblx0XHR9KTtcblx0fVxuXG5cdGlmIChyZXN1bHQuc3RhdHVzID09PSAwKSB7XG5cdFx0cHJvY2Vzcy5zdGRvdXQud3JpdGUoXCIgZG9uZS5cXG5cIik7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3QgZGV0YWlsID0gKHJlc3VsdC5zdGRlcnIgfHwgcmVzdWx0LnN0ZG91dCB8fCByZXN1bHQuZXJyb3I/Lm1lc3NhZ2UgfHwgXCJcIikudHJpbSgpO1xuXHRwcm9jZXNzLnN0ZG91dC53cml0ZShcIiBmYWlsZWQuXFxuXCIpO1xuXHRpZiAoZGV0YWlsKSB7XG5cdFx0Y29uc29sZS5lcnJvcihgICDinJcgQmlvbWU6ICR7ZGV0YWlsLnNsaWNlKDAsIDQwMCl9YCk7XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJmb3JtYXRTY2FmZm9sZGVkRmlsZXMiLCJ0YXJnZXREaXIiLCJwYXRocyIsInByb2Nlc3MiLCJzdGRvdXQiLCJ3cml0ZSIsInJlc3VsdCIsInNwYXduU3luYyIsImN3ZCIsImVuY29kaW5nIiwic3RkaW8iLCJlcnJvciIsImNvZGUiLCJzdGF0dXMiLCJkZXRhaWwiLCJzdGRlcnIiLCJtZXNzYWdlIiwidHJpbSIsImNvbnNvbGUiLCJzbGljZSJdLCJtYXBwaW5ncyI6Ijs7OzsrQkFNZ0JBOzs7ZUFBQUE7OzttQ0FOVTtBQU1uQixTQUFTQSxzQkFBc0JDLFNBQWlCLEVBQUVDLFFBQWtCO0lBQUM7Q0FBSTtJQUMvRUMsUUFBUUMsTUFBTSxDQUFDQyxLQUFLLENBQUM7SUFFckIsSUFBSUMsU0FBU0MsSUFBQUEsNEJBQVMsRUFBQyxTQUFTO1FBQUM7UUFBUztXQUFjTDtLQUFNLEVBQUU7UUFDL0RNLEtBQUtQO1FBQ0xRLFVBQVU7UUFDVkMsT0FBTztJQUNSO0lBRUEsSUFBSUosT0FBT0ssS0FBSyxJQUFJLEFBQUNMLE9BQU9LLEtBQUssQ0FBMkJDLElBQUksS0FBSyxVQUFVO1FBQzlFTixTQUFTQyxJQUFBQSw0QkFBUyxFQUFDLE9BQU87WUFBQztZQUFTO1lBQWtCO1lBQVM7ZUFBY0w7U0FBTSxFQUFFO1lBQ3BGTSxLQUFLUDtZQUNMUSxVQUFVO1lBQ1ZDLE9BQU87UUFDUjtJQUNEO0lBRUEsSUFBSUosT0FBT08sTUFBTSxLQUFLLEdBQUc7UUFDeEJWLFFBQVFDLE1BQU0sQ0FBQ0MsS0FBSyxDQUFDO1FBQ3JCO0lBQ0Q7SUFFQSxNQUFNUyxTQUFTLEFBQUNSLENBQUFBLE9BQU9TLE1BQU0sSUFBSVQsT0FBT0YsTUFBTSxJQUFJRSxPQUFPSyxLQUFLLEVBQUVLLFdBQVcsRUFBQyxFQUFHQyxJQUFJO0lBQ25GZCxRQUFRQyxNQUFNLENBQUNDLEtBQUssQ0FBQztJQUNyQixJQUFJUyxRQUFRO1FBQ1hJLFFBQVFQLEtBQUssQ0FBQyxDQUFDLFdBQVcsRUFBRUcsT0FBT0ssS0FBSyxDQUFDLEdBQUcsTUFBTTtJQUNuRDtBQUNEIn0=
|