@firestartr/cli 0.1.9 â 0.1.11
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/build/index.js +569 -193
- package/build/provisioner/cdktf.json +0 -0
- package/build/provisioner/dist-cdktf/index.js +34 -2
- package/build/provisioner/dist-cdktf/index.js.map +1 -1
- package/build/provisioner/dist-cdktf/tsconfig.cdktf.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/build/provisioner/dist-cdktf/src/entities/feature/FirestarterGithubRepositoryFeature.d.ts +0 -8
- package/build/provisioner/dist-cdktf/src/entities/feature/FirestarterGithubRepositoryFeature.js +0 -15
- package/build/provisioner/dist-cdktf/src/entities/firestartergithubgroup/FirestarterGithubGroup.d.ts +0 -8
- package/build/provisioner/dist-cdktf/src/entities/firestartergithubgroup/FirestarterGithubGroup.js +0 -17
- package/build/provisioner/dist-cdktf/src/entities/firestartergithubgroup/auxiliars/TeamConfigAux.d.ts +0 -29
- package/build/provisioner/dist-cdktf/src/entities/firestartergithubgroup/auxiliars/TeamConfigAux.js +0 -35
- package/build/provisioner/dist-cdktf/src/entities/firestartergithubgroup/helpers/TeamMembersHelper.d.ts +0 -4
- package/build/provisioner/dist-cdktf/src/entities/firestartergithubgroup/helpers/TeamMembersHelper.js +0 -28
- package/build/provisioner/dist-cdktf/src/entities/firestartergithubgroup/helpers/TeamsHelper.d.ts +0 -4
- package/build/provisioner/dist-cdktf/src/entities/firestartergithubgroup/helpers/TeamsHelper.js +0 -23
- package/build/provisioner/dist-cdktf/src/entities/firestartergithubmembership/FirestarterGithubMembership.d.ts +0 -8
- package/build/provisioner/dist-cdktf/src/entities/firestartergithubmembership/FirestarterGithubMembership.js +0 -15
- package/build/provisioner/dist-cdktf/src/entities/firestartergithubmembership/helpers/MembershipHelper.d.ts +0 -4
- package/build/provisioner/dist-cdktf/src/entities/firestartergithubmembership/helpers/MembershipHelper.js +0 -19
- package/build/provisioner/dist-cdktf/src/entities/firestartergithubrepository/FirestarterGithubRepository.d.ts +0 -9
- package/build/provisioner/dist-cdktf/src/entities/firestartergithubrepository/FirestarterGithubRepository.js +0 -30
- package/build/provisioner/dist-cdktf/src/entities/firestartergithubrepository/auxiliars/RepositoryConfigAux.d.ts +0 -52
- package/build/provisioner/dist-cdktf/src/entities/firestartergithubrepository/auxiliars/RepositoryConfigAux.js +0 -72
- package/build/provisioner/dist-cdktf/src/entities/firestartergithubrepository/helpers/ActionsHelper.d.ts +0 -5
- package/build/provisioner/dist-cdktf/src/entities/firestartergithubrepository/helpers/ActionsHelper.js +0 -19
- package/build/provisioner/dist-cdktf/src/entities/firestartergithubrepository/helpers/CodeownersHelper.d.ts +0 -5
- package/build/provisioner/dist-cdktf/src/entities/firestartergithubrepository/helpers/CodeownersHelper.js +0 -24
- package/build/provisioner/dist-cdktf/src/entities/firestartergithubrepository/helpers/DefaultBranchHelper.d.ts +0 -5
- package/build/provisioner/dist-cdktf/src/entities/firestartergithubrepository/helpers/DefaultBranchHelper.js +0 -17
- package/build/provisioner/dist-cdktf/src/entities/firestartergithubrepository/helpers/RepositoryHelper.d.ts +0 -5
- package/build/provisioner/dist-cdktf/src/entities/firestartergithubrepository/helpers/RepositoryHelper.js +0 -72
- package/build/provisioner/dist-cdktf/src/entities/firestartergithubrepository/helpers/RepositoryTeamsHelper.d.ts +0 -4
- package/build/provisioner/dist-cdktf/src/entities/firestartergithubrepository/helpers/RepositoryTeamsHelper.js +0 -49
- package/build/provisioner/dist-cdktf/src/entities/firestarterterraformmodule/FirestarterTerraformModule.d.ts +0 -10
- package/build/provisioner/dist-cdktf/src/entities/firestarterterraformmodule/FirestarterTerraformModule.js +0 -17
- package/build/provisioner/dist-cdktf/src/entities/firestarterterraformmodule/auxiliars/terraformModuleHelper.d.ts +0 -13
- package/build/provisioner/dist-cdktf/src/entities/firestarterterraformmodule/auxiliars/terraformModuleHelper.js +0 -36
package/build/index.js
CHANGED
|
@@ -232157,6 +232157,10 @@ exports["default"] = {
|
|
|
232157
232157
|
{
|
|
232158
232158
|
"type": "object",
|
|
232159
232159
|
"properties": {
|
|
232160
|
+
"policy": {
|
|
232161
|
+
"type": "string",
|
|
232162
|
+
"enum": ["apply", "create-only", "create-update-only", "full-control", "observe", "observe-only"]
|
|
232163
|
+
},
|
|
232160
232164
|
"name": {
|
|
232161
232165
|
"type": "string",
|
|
232162
232166
|
},
|
|
@@ -232211,7 +232215,7 @@ exports["default"] = {
|
|
|
232211
232215
|
}
|
|
232212
232216
|
}
|
|
232213
232217
|
};
|
|
232214
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
232218
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVycmFmb3JtLnNjaGVtYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jbGFpbXMvdGZ3b3Jrc3BhY2VzL3RlcnJhZm9ybS5zY2hlbWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQkFBZTtJQUVYLFNBQVMsRUFBRSx5Q0FBeUM7SUFFcEQsS0FBSyxFQUFFLG1CQUFtQjtJQUUxQixhQUFhLEVBQUU7UUFFYixtQkFBbUIsRUFBRTtZQUVuQixLQUFLLEVBQUUsOENBQThDO1lBRXJELE1BQU0sRUFBRSxRQUFRO1lBRWhCLGFBQWEsRUFBRSx1QkFBdUI7WUFFdEMsT0FBTyxFQUFFO2dCQUVQLEVBQUMsTUFBTSxFQUFFLCtDQUErQyxFQUFDO2dCQUV6RDtvQkFDRSxNQUFNLEVBQUUsUUFBUTtvQkFFaEIsWUFBWSxFQUFFO3dCQUVaLFFBQVEsRUFBRTs0QkFFUixNQUFNLEVBQUUsUUFBUTs0QkFFaEIsTUFBTSxFQUFFLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxvQkFBb0IsRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLGNBQWMsQ0FBQzt5QkFFbEc7d0JBRUQsTUFBTSxFQUFFOzRCQUVOLE1BQU0sRUFBRSxRQUFRO3lCQUNqQjt3QkFFRCxRQUFRLEVBQUU7NEJBRVIsTUFBTSxFQUFFLFFBQVE7NEJBRWhCLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQzt5QkFFakQ7d0JBRUQsY0FBYyxFQUFFOzRCQUVkLE1BQU0sRUFBRSxRQUFROzRCQUVoQixhQUFhLEVBQUUsZ0RBQWdEO3lCQUVoRTt3QkFFRCxRQUFRLEVBQUM7NEJBRVAsTUFBTSxFQUFFLFFBQVE7NEJBRWhCLFlBQVksRUFBRSxFQUFFOzRCQUVoQixzQkFBc0IsRUFBRSxJQUFJO3lCQUU3Qjt3QkFFRCxRQUFRLEVBQUU7NEJBRVIsTUFBTSxFQUFFLFFBQVE7eUJBRWpCO3dCQUVELFNBQVMsRUFBRTs0QkFFVCxNQUFNLEVBQUUsUUFBUTs0QkFFaEIsWUFBWSxFQUFFO2dDQUVaLFdBQVcsRUFBRTtvQ0FFWCxNQUFNLEVBQUUsT0FBTztvQ0FFZixPQUFPLEVBQUU7d0NBRVAsTUFBTSxFQUFFLFFBQVE7d0NBRWhCLFlBQVksRUFBRTs0Q0FFWixNQUFNLEVBQUU7Z0RBRU4sTUFBTSxFQUFFLFFBQVE7NkNBQ2pCO3lDQUVGO3dDQUVELHNCQUFzQixFQUFFLEtBQUs7cUNBRTlCO2lDQUVGO2dDQUVELFNBQVMsRUFBRTtvQ0FFVCxNQUFNLEVBQUUsUUFBUTtvQ0FFaEIsWUFBWSxFQUFFO3dDQUVaLE1BQU0sRUFBRTs0Q0FFTixNQUFNLEVBQUUsUUFBUTt5Q0FDakI7cUNBRUY7b0NBRUQsc0JBQXNCLEVBQUUsS0FBSztpQ0FDOUI7NkJBRUY7NEJBRUQsVUFBVSxFQUFFLENBQUMsV0FBVyxDQUFDOzRCQUV6QixzQkFBc0IsRUFBRSxLQUFLO3lCQUU5QjtxQkFFRjtvQkFFRCxVQUFVLEVBQUUsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUM7aUJBRXBEO2FBRUY7U0FFRjtLQUNGO0NBQ0osQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IHtcblxuICAgIFwiJHNjaGVtYVwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDcvc2NoZW1hI1wiLFxuXG4gICAgXCIkaWRcIjogXCJUZXJyYWZvcm1Qcm92aWRlclwiLFxuXG4gICAgXCJkZWZpbml0aW9uc1wiOiB7XG5cbiAgICAgIFwiVGVycmFmb3JtUHJvdmlkZXJcIjoge1xuXG4gICAgICAgIFwiJGlkXCI6IFwiZmlyZXN0YXJ0ci5kZXY6Ly90ZXJyYWZvcm0vVGVycmFmb3JtUHJvdmlkZXJcIixcblxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcblxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQSB0ZXJyYWZvcm0gd29ya3NwYWNlXCIsXG5cbiAgICAgICAgXCJhbGxPZlwiOiBbXG5cbiAgICAgICAgICB7XCIkcmVmXCI6IFwiZmlyZXN0YXJ0ci5kZXY6Ly9jb21tb24vQ2xhaW1Qcm92aWRlckVudmVsb3BlXCJ9LFxuXG4gICAgICAgICAge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG5cbiAgICAgICAgICAgIFwicHJvcGVydGllc1wiOiB7XG5cbiAgICAgICAgICAgICAgXCJwb2xpY3lcIjoge1xuXG4gICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG5cbiAgICAgICAgICAgICAgICBcImVudW1cIjogW1wiYXBwbHlcIiwgXCJjcmVhdGUtb25seVwiLCBcImNyZWF0ZS11cGRhdGUtb25seVwiLCBcImZ1bGwtY29udHJvbFwiLCBcIm9ic2VydmVcIiwgXCJvYnNlcnZlLW9ubHlcIl1cblxuICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgIFwic291cmNlXCI6IHtcblxuICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuXG4gICAgICAgICAgICAgICAgXCJlbnVtXCI6IFtcInJlbW90ZVwiLCBcImlubGluZVwiLCBcIlJlbW90ZVwiLCBcIklubGluZVwiXVxuXG4gICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgXCJ2YWx1ZXNTY2hlbWFcIjoge1xuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcblxuICAgICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhIGxvY2F0b3IgZm9yIGEganNvbiBzY2hlbWEgdG8gdmFsaWRhdGUgdmFsdWVzXCJcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgXCJ2YWx1ZXNcIjp7XG5cbiAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcblxuICAgICAgICAgICAgICAgIFwicHJvcGVydGllc1wiOiB7fSxcblxuICAgICAgICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZVxuXG4gICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgXCJtb2R1bGVcIjoge1xuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICBcImNvbnRleHRcIjoge1xuXG4gICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG5cbiAgICAgICAgICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgXCJwcm92aWRlcnNcIjoge1xuICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG5cbiAgICAgICAgICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuXG4gICAgICAgICAgICAgICAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICBcImJhY2tlbmRcIjoge1xuICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuXG4gICAgICAgICAgICAgICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICBcInJlcXVpcmVkXCI6IFtcInByb3ZpZGVyc1wiXSxcblxuICAgICAgICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogZmFsc2VcblxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogW1widmFsdWVzXCIsIFwiY29udGV4dFwiLCBcInNvdXJjZVwiLCBcIm5hbWVcIl1cblxuICAgICAgICAgIH1cblxuICAgICAgICBdXG5cbiAgICAgIH1cbiAgICB9XG59XG4iXX0=
|
|
232215
232219
|
|
|
232216
232220
|
/***/ }),
|
|
232217
232221
|
|
|
@@ -235333,6 +235337,7 @@ const crawler_1 = __nccwpck_require__(26675);
|
|
|
235333
235337
|
const fs_1 = __importDefault(__nccwpck_require__(57147));
|
|
235334
235338
|
const path_1 = __importDefault(__nccwpck_require__(71017));
|
|
235335
235339
|
const catalog_common_1 = __importDefault(__nccwpck_require__(74100));
|
|
235340
|
+
const github_1 = __importDefault(__nccwpck_require__(39759));
|
|
235336
235341
|
const CLAIM_REF_ANNOTATION = "firestartr.dev/claim-ref";
|
|
235337
235342
|
const log = (0, debug_1.default)("firestartr:renderer");
|
|
235338
235343
|
/*
|
|
@@ -235382,6 +235387,7 @@ async function render(catalogScope, firestartrScope) {
|
|
|
235382
235387
|
const data = await (0, loader_1.loadAll)();
|
|
235383
235388
|
const result = await fRenderClaims(catalogScope, firestartrScope, data);
|
|
235384
235389
|
(0, references_1.validateReferentialIntegrity)(result);
|
|
235390
|
+
(0, references_1.validateTfStateKeyUniqueness)(result);
|
|
235385
235391
|
return result;
|
|
235386
235392
|
}
|
|
235387
235393
|
exports.render = render;
|
|
@@ -235389,7 +235395,21 @@ exports.render = render;
|
|
|
235389
235395
|
* Function called when rendering Terraform workspaces Plans
|
|
235390
235396
|
* based on the previous renderer Terraform workspaces
|
|
235391
235397
|
*/
|
|
235392
|
-
async function renderWorkspacePlans(source, destiny, prLink, sha) {
|
|
235398
|
+
async function renderWorkspacePlans(source, destiny, prLink, sha, ghCli = github_1.default) {
|
|
235399
|
+
const [orgRepo, prNumber] = prLink.split("#");
|
|
235400
|
+
const [org, repo] = orgRepo.split("/");
|
|
235401
|
+
const { data: files } = await ghCli.pulls.getPrFiles(parseInt(prNumber), repo, org);
|
|
235402
|
+
if (files && files.length > 0 && files[0].status == "removed") {
|
|
235403
|
+
const content = await ghCli.repo.getContent(files[0].filename, repo, org);
|
|
235404
|
+
const workspace = catalog_common_1.default.io.fromYaml(content);
|
|
235405
|
+
workspace.kind = "FirestartrTerraformWorkspacePlan";
|
|
235406
|
+
workspace.metadata.annotations = Object.assign(Object.assign({}, workspace.metadata.annotations), { [catalog_common_1.default.generic.getFirestartrAnnotation("pull-request-plan")]: prLink, [catalog_common_1.default.generic.getFirestartrAnnotation("plan-sha")]: sha });
|
|
235407
|
+
workspace.metadata.annotations[catalog_common_1.default.generic.getFirestartrAnnotation("policy")] = "destroy";
|
|
235408
|
+
const workspacePlan = catalog_common_1.default.io.toYaml(Object.assign({}, workspace), { quotingType: '"', lineWidth: -1 });
|
|
235409
|
+
const fileName = path_1.default.join(destiny, path_1.default.basename(files[0].filename));
|
|
235410
|
+
fs_1.default.writeFileSync(fileName, workspacePlan);
|
|
235411
|
+
return;
|
|
235412
|
+
}
|
|
235393
235413
|
// Iterate over the source folder and get the list of Terraform workspaces
|
|
235394
235414
|
await (0, crawler_1.crawl)(source, () => true, (entry, data) => {
|
|
235395
235415
|
const fileName = path_1.default.join(destiny, path_1.default.basename(entry));
|
|
@@ -235581,7 +235601,7 @@ function getPreviousCRfromClaim(claim, previousCRs) {
|
|
|
235581
235601
|
function isExcludedFromPreviousCR(crKind) {
|
|
235582
235602
|
return ["FirestartrGithubRepositoryFeature"].includes(crKind);
|
|
235583
235603
|
}
|
|
235584
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVuZGVyZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxxQ0FBa0Q7QUFDbEQsaURBQWtDO0FBQ2xDLGtEQUEwQjtBQUUxQixpQ0FBdUQ7QUFFdkQscUVBQTBFO0FBRzFFLHlEQUF5RjtBQUN6RiwrQ0FBa0Q7QUFDbEQscUNBQW1FO0FBRW5FLHdEQUFpRTtBQUNqRSx1Q0FBa0M7QUFDbEMsNENBQW9CO0FBQ3BCLGdEQUF3QjtBQUN4QixvRUFBb0M7QUFDcEMsTUFBTSxvQkFBb0IsR0FBRywwQkFBMEIsQ0FBQTtBQUd2RCxNQUFNLEdBQUcsR0FBRyxJQUFBLGVBQUssRUFBQyxxQkFBcUIsQ0FBQyxDQUFBO0FBcUN4Qzs7Ozs7Ozs7Ozs7R0FXRztBQUNJLEtBQUssVUFBVSxpQkFBaUIsQ0FFckMsWUFBMEIsRUFFMUIsTUFBVyxFQUFFLEVBRWIsbUJBQTJCLGVBQWUsRUFFMUMsY0FBc0IsaUJBQWlCO0lBSXZDLE1BQU0sWUFBWSxHQUFHLElBQUksV0FBRyxDQUFDO1FBRTNCLE1BQU0sRUFBRSxnQkFBZ0I7UUFFeEIsbUJBQW1CLEVBQUUsT0FBTztRQUU1QixjQUFjLEVBQUUsc0JBQWMsQ0FBQyxpQkFBaUI7S0FFakQsQ0FBQyxDQUFBO0lBRUYsTUFBTSxlQUFlLEdBQUcsSUFBSSxXQUFHLENBQUM7UUFFOUIsTUFBTSxFQUFFLFdBQVc7UUFFbkIsbUJBQW1CLEVBQUUsT0FBTztRQUU1QixjQUFjLEVBQUUsc0JBQWMsQ0FBQyxpQkFBaUI7S0FFakQsQ0FBQyxDQUFBO0lBRUYsTUFBTSxNQUFNLEdBQVEsTUFBTSxhQUFhLENBRXJDLFlBQVksRUFFWixlQUFlLEVBRWY7UUFDRSxZQUFZO1FBRVosR0FBRztRQUVILE9BQU8sRUFBRSxFQUFFO0tBQ1osQ0FDRixDQUFBO0lBRUQsZUFBZSxDQUFDLEtBQUssRUFBRSxD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LFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUU3QyxJQUFHLElBQUEsNEJBQWUsRUFBQyxVQUFVLENBQUM7WUFBRSxTQUFRO1FBRXhDLElBQUcsd0JBQXdCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztZQUFFLFNBQVE7UUFFdEQsSUFBRyxVQUFVLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLEVBQUM7WUFFekYsT0FBTyxVQUFVLENBQUE7U0FFbEI7S0FFRjtJQUVELE9BQU8sS0FBSyxDQUFBO0FBRWQsQ0FBQztBQUdELFNBQVMsd0JBQXdCLENBQUMsTUFBYztJQUc5QyxPQUFPLENBQUMsbUNBQW1DLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUE7QUFHL0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBJUmVuYW1lUmVzdWx0LCBsb2FkQWxsIH0gZnJvbSBcIi4vbG9hZGVyXCI7XG5pbXBvcnQgKiBhcyBjaGFydHMgZnJvbSBcIi4vY2hhcnRzXCJcbmltcG9ydCBEZWJ1ZyBmcm9tIFwiZGVidWdcIjtcbmltcG9ydCB7IEJhc2VDaGFydCB9IGZyb20gXCIuL2NoYXJ0cy9iYXNlXCI7XG5pbXBvcnQgeyBBcGlPYmplY3QsIEFwcCwgWWFtbE91dHB1dFR5cGUgfSBmcm9tIFwiY2RrOHNcIjtcbmltcG9ydCB7IEdsb2JhbFNlY3Rpb24gfSBmcm9tIFwiLi9nbG9iYWxzL2Jhc2VcIjtcbmltcG9ydCB7IGdlbmVyYXRlRmVhdHVyZXNQYXRjaGVzIH0gZnJvbSBcIi4vY2hhcnRzL2dpdGh1Yi9mZWF0dXJlUmVuZGVyZXJcIjtcbmltcG9ydCB7IE92ZXJyaWRlclBhdGNoZXMgfSBmcm9tIFwiLi9vdmVycmlkZXJzL2Jhc2VcIjtcbmltcG9ydCB7IElDdXN0b21SZXNvdXJjZVBhdGNoIH0gZnJvbSBcIi4vcGF0Y2hlc1wiO1xuaW1wb3J0IHsgaXNDYXRhbG9nRW50aXR5LCB2YWxpZGF0ZVJlZmVyZW50aWFsSW50ZWdyaXR5IH0gZnJvbSBcIi4vdmFsaWRhdGlvbnMvcmVmZXJlbmNlc1wiO1xuaW1wb3J0IHsgIHNldFJlbmRlcmVkQ2xhaW0gfSBmcm9tIFwiLi9yZWZyZXNvbHZlclwiO1xuaW1wb3J0IHsgQWxsb3dlZFByb3ZpZGVycywgZ2V0Q29uZmlndXJlZFByb3ZpZGVyIH0gZnJvbSBcIi4vY29uZmlnXCI7XG5pbXBvcnQgeyBOb3JtYWxpemVyIH0gZnJvbSBcIi4vbm9ybWFsaXplcnMvYmFzZVwiO1xuaW1wb3J0IHsgc29ydFJlbmRlckNsYWltc0J5S2luZCB9IGZyb20gXCIuL3JlZnNTb3J0ZXIvcmVmc1NvcnRlclwiO1xuaW1wb3J0IHsgY3Jhd2wgfSBmcm9tIFwiLi9jcmF3bGVyXCI7XG5pbXBvcnQgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IGNvbW1vbiBmcm9tIFwiY2F0YWxvZ19jb21tb25cIjtcbmNvbnN0IENMQUlNX1JFRl9BTk5PVEFUSU9OID0gXCJmaXJlc3RhcnRyLmRldi9jbGFpbS1yZWZcIlxuXG5cbmNvbnN0IGxvZyA9IERlYnVnKFwiZmlyZXN0YXJ0cjpyZW5kZXJlclwiKVxuXG5leHBvcnQgdHlwZSBSZW5kZXJDbGFpbURhdGEgPSB7XG5cbiAgY2xhaW06IGFueVxuXG4gIGNsYWltUGF0aD86IHN0cmluZ1xuXG4gIGluaXRpYWxpemVyczogYW55IFtdXG5cbiAgb3ZlcnJpZGVzOiBPdmVycmlkZXJQYXRjaGVzW11cblxuICBnbG9iYWxzOiBHbG9iYWxTZWN0aW9uW10sXG5cbiAgbm9ybWFsaXplcnM6IE5vcm1hbGl6ZXJbXVxuXG59XG5cbnR5cGUgQ2xhaW1LaW5kID0gc3RyaW5nO1xudHlwZSBDbGFpbU5hbWUgPSBzdHJpbmc7XG5leHBvcnQgdHlwZSBSZW5kZXJDbGFpbUtleSA9IGAke0NsYWltS2luZH0tJHtDbGFpbU5hbWV9YFxuXG50eXBlIENSS2luZCA9IHN0cmluZztcbnR5cGUgQ1JOYW1lID0gc3RyaW5nO1xudHlwZSBSZW5kZXJDUktleSA9IGAke0NSS2luZH0tJHtDUk5hbWV9YFxuXG5leHBvcnQgdHlwZSBSZW5kZXJlZENyTWFwID0ge1xuXG4gIFtrZXk6IFJlbmRlckNSS2V5XTogQXBpT2JqZWN0XG59XG5cbmV4cG9ydCB0eXBlIFJlbmRlckNsYWltcyA9IHtcblxuICBba2V5OiBSZW5kZXJDbGFpbUtleV06IFJlbmRlckNsYWltRGF0YVxuXG59XG5cbi8qXG4gKiBGdW5jdGlvbiBjYWxsZWQgd2hlbiByZW5kZXJpbmcgZnJvbSB0aGUgaW1wb3J0ZXIgY2xhc3MuXG4gKlxuICogSW5wdXQ6XG4gKiAtIHJlbmRlckNsYWltczogYSBSZW5kZXJDbGFpbXMgb2JqZWN0LCB3aGljaCBjb250YWlucyB0aGUgbGlzdCBvZiBjbGFpbXNcbiAqICAgd2Ugd2FudCB0byByZW5kZXJcbiAqXG4gKiBSZXR1cm46XG4gKiAtIFRoZSByZXN1bHQgb2YgcmVuZGVyaW5nIHRoZSByZW5kZXJDbGFpbXMgb2JqZWN0LCBwbHVzIHRoZVxuICogICByZW5kZXJlZCBmaXJlc3RhcnRyLWFsbCBncm91cFxuICpcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlckZyb21JbXBvcnRzKFxuXG4gIHJlbmRlckNsYWltczogUmVuZGVyQ2xhaW1zLFxuXG4gIGNyczogYW55ID0ge30sXG5cbiAgY2F0YWxvZ091dHB1dERpcjogc3RyaW5nID0gXCIvdG1wLy5jYXRhbG9nXCIsXG5cbiAgY3JPdXRwdXREaXI6IHN0cmluZyA9IFwiL3RtcC8ucmVzb3VyY2VzXCIsXG5cbikge1xuXG4gIGNvbnN0IGNhdGFsb2dTY29wZSA9IG5ldyBBcHAoe1xuXG4gICAgb3V0ZGlyOiBjYXRhbG9nT3V0cHV0RGlyLFxuXG4gICAgb3V0cHV0RmlsZUV4dGVuc2lvbjogXCIueWFtbFwiLFxuXG4gICAgeWFtbE91dHB1dFR5cGU6IFlhbWxPdXRwdXRUeXBlLkZJTEVfUEVSX1JFU09VUkNFLFxuXG4gIH0pXG5cbiAgY29uc3QgZmlyZXN0YXJ0clNjb3BlID0gbmV3IEFwcCh7XG5cbiAgICBvdXRkaXI6IGNyT3V0cHV0RGlyLFxuXG4gICAgb3V0cHV0RmlsZUV4dGVuc2lvbjogXCIueWFtbFwiLFxuXG4gICAgeWFtbE91dHB1dFR5cGU6IFlhbWxPdXRwdXRUeXBlLkZJTEVfUEVSX1JFU09VUkNFLFxuXG4gIH0pXG5cbiAgY29uc3QgcmVzdWx0OiBhbnkgPSBhd2FpdCBmUmVuZGVyQ2xhaW1zKFxuXG4gICAgY2F0YWxvZ1Njb3BlLFxuXG4gICAgZmlyZXN0YXJ0clNjb3BlLFxuXG4gICAge1xuICAgICAgcmVuZGVyQ2xhaW1zLFxuXG4gICAgICBjcnMsXG5cbiAgICAgIHJlbmFtZXM6IFtdXG4gICAgfSxcbiAgKVxuXG4gIGZpcmVzdGFydHJTY29wZS5zeW50aCgpXG5cbiAgcmV0dXJuIHJlc3VsdFxuXG59XG5cblxuLypcbiAqIEZ1bmN0aW9uIGNhbGxlZCB3aGVuIHJlbmRlcmluZyBidXQgbm90IGltcG9ydGluZ1xuICpcbiAqIElucHV0OlxuICogLSBzY29wZTogYW4gb2JqZWN0LCB1c2VkIHRvIHJlcHJlc2VudCBDREtURidzIGV4ZWN1dGlvbiBzY29wZVxuICpcbiAqIFJldHVybjpcbiAqIC0gVGhlIHJlc3VsdCBvZiByZW5kZXJpbmcgdGhlIHJlbmRlckNsYWltcyBvYmplY3QsIHBsdXMgdGhlXG4gKiAgIHJlbmRlcmVkIGZpcmVzdGFydHItYWxsIGdyb3VwXG4gKlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVuZGVyKFxuXG4gIGNhdGFsb2dTY29wZTogQ29uc3RydWN0LFxuXG4gIGZpcmVzdGFydHJTY29wZTogQ29uc3RydWN0LFxuXG4gICk6IFByb21pc2U8UmVuZGVyZWRDck1hcD4ge1xuXG4gIGNvbnN0IGRhdGE6IHtcblxuICAgIHJlbmRlckNsYWltczogUmVuZGVyQ2xhaW1zLFxuXG4gICAgY3JzOiBhbnksXG5cbiAgICByZW5hbWVzPzogSVJlbmFtZVJlc3VsdFtdXG5cbiAgfSA9IGF3YWl0IGxvYWRBbGwoKVxuXG4gIGNvbnN0IHJlc3VsdDogYW55ID0gYXdhaXQgZlJlbmRlckNsYWltcyhjYXRhbG9nU2NvcGUsIGZpcmVzdGFydHJTY29wZSwgZGF0YSlcblxuICB2YWxpZGF0ZVJlZmVyZW50aWFsSW50ZWdyaXR5KHJlc3VsdClcblxuICByZXR1cm4gcmVzdWx0XG5cbn1cblxuLypcbiAqIEZ1bmN0aW9uIGNhbGxlZCB3aGVuIHJlbmRlcmluZyBUZXJyYWZvcm0gd29ya3NwYWNlcyBQbGFuc1xuICogYmFzZWQgb24gdGhlIHByZXZpb3VzIHJlbmRlcmVyIFRlcnJhZm9ybSB3b3Jrc3BhY2VzXG4qL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlcldvcmtzcGFjZVBsYW5zKHNvdXJjZTogc3RyaW5nLCBkZXN0aW55OiBzdHJpbmcsIHByTGluazogc3RyaW5nLCBzaGE6IHN0cmluZykge1xuXG4gIC8vIEl0ZXJhdGUgb3ZlciB0aGUgc291cmNlIGZvbGRlciBhbmQgZ2V0IHRoZSBsaXN0IG9mIFRlcnJhZm9ybSB3b3Jrc3BhY2VzXG5cbiAgYXdhaXQgY3Jhd2woc291cmNlLCAoKSA9PiB0cnVlLCAoZW50cnk6IHN0cmluZywgZGF0YTogYW55KSA9PiB7XG5cbiAgICBjb25zdCBmaWxlTmFtZSA9IHBhdGguam9pbihkZXN0aW55LCBwYXRoLmJhc2VuYW1lKGVudHJ5KSlcblxuICAgIGNvbnN0IHdvcmtzcGFjZTogYW55ID0gY29tbW9uLmlvLmZyb21ZYW1sKGRhdGEpXG5cbiAgICB3b3Jrc3BhY2Uua2luZCA9IFwiRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5cIlxuICAgIHdvcmtzcGFjZS5tZXRhZGF0YS5hbm5vdGF0aW9ucyA9IHtcbiAgICAgIC4uLndvcmtzcGFjZS5tZXRhZGF0YS5hbm5vdGF0aW9ucyxcbiAgICAgIFtjb21tb24uZ2VuZXJpYy5nZXRGaXJlc3RhcnRyQW5ub3RhdGlvbihcInB1bGwtcmVxdWVzdC1wbGFuXCIpXTogcHJMaW5rLFxuICAgICAgW2NvbW1vbi5nZW5lcmljLmdldEZpcmVzdGFydHJBbm5vdGF0aW9uKFwicGxhbi1zaGFcIildOiBzaGFcbiAgICB9XG5cbiAgICBjb25zdCB3b3Jrc3BhY2VQbGFuID0gY29tbW9uLmlvLnRvWWFtbCh7XG4gICAgICAuLi53b3Jrc3BhY2VcbiAgICB9LCB7IHF1b3RpbmdUeXBlOiAnXCInLCBsaW5lV2lkdGg6IC0xIH0pXG5cbiAgICBmcy53cml0ZUZpbGVTeW5jKGZpbGVOYW1lLCB3b3Jrc3BhY2VQbGFuKVxuXG4gIH0pXG5cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFkZExhc3RTdGF0ZUFuZExhc3RDbGFpbUFubm90YXRpb25zKFxuICBmaWxlUGF0aDogc3RyaW5nLCBsYXN0U3RhdGVQUkxpbms6IHN0cmluZywgbGFzdENsYWltUFJMaW5rOiBzdHJpbmdcbikge1xuXG4gIC8vIEl0ZXJhdGUgb3ZlciB0aGUgc291cmNlIGZvbGRlciBhbmQgZ2V0IHRoZSBsaXN0IG9mIFRlcnJhZm9ybSB3b3Jrc3BhY2VzXG5cbiAgY29uc3Qgd29ya3NwYWNlOiBhbnkgPSBjb21tb24uaW8uZnJvbVlhbWwoZnMucmVhZEZpbGVTeW5jKGZpbGVQYXRoLCBcInV0Zi04XCIpKTtcblxuICBjb25zdCBzdGF0ZUxpbmtBc0FycmF5OiBzdHJpbmdbXSA9IGxhc3RTdGF0ZVBSTGluay5zcGxpdChcIi9cIik7XG4gIGNvbnN0IHN0YXRlQW5ub3RhdGlvblZhbHVlOiBzdHJpbmcgPSBgJHtzdGF0ZUxpbmtBc0FycmF5WzNdfS8ke3N0YXRlTGlua0FzQXJyYXlbNF19IyR7c3RhdGVMaW5rQXNBcnJheVs2XX1gXG5cbiAgY29uc3QgY2xhaW1MaW5rQXNBcnJheTogc3RyaW5nW10gPSBsYXN0Q2xhaW1QUkxpbmsuc3BsaXQoXCIvXCIpO1xuICBjb25zdCBjbGFpbUFubm90YXRpb25WYWx1ZTogc3RyaW5nID0gYCR7Y2xhaW1MaW5rQXNBcnJheVszXX0vJHtjbGFpbUxpbmtBc0FycmF5WzRdfSMke2NsYWltTGlua0FzQXJyYXlbNl19YFxuXG4gIHdvcmtzcGFjZS5tZXRhZGF0YS5hbm5vdGF0aW9ucyA9IHtcbiAgICAuLi53b3Jrc3BhY2UubWV0YWRhdGEuYW5ub3RhdGlvbnMsXG4gICAgW2NvbW1vbi5nZW5lcmljLmdldEZpcmVzdGFydHJBbm5vdGF0aW9uKFwibGFzdC1zdGF0ZS1wclwiKV06IHN0YXRlQW5ub3RhdGlvblZhbHVlLFxuICAgIFtjb21tb24uZ2VuZXJpYy5nZXRGaXJlc3RhcnRyQW5ub3RhdGlvbihcImxhc3QtY2xhaW0tcHJcIildOiBjbGFpbUFubm90YXRpb25WYWx1ZVxuICB9XG5cbiAgZnMud3JpdGVGaWxlU3luYyhmaWxlUGF0aCwgY29tbW9uLmlvLnRvWWFtbChcbiAgICB7IC4uLndvcmtzcGFjZSB9LCB7IHF1b3RpbmdUeXBlOiAnXCInLCBsaW5lV2lkdGg6IC0xIH1cbiAgKSlcblxufVxuXG5hc3luYyBmdW5jdGlvbiBmUmVuZGVyQ2xhaW1zKFxuXG4gIGNhdGFsb2dTY29wZTogQ29uc3RydWN0LFxuXG4gIGZpcmVzdGFydHJTY29wZTogQ29uc3RydWN0LFxuXG4gIGRhdGE6IHtcblxuICAgIHJlbmRlckNsYWltczogUmVuZGVyQ2xhaW1zLFxuXG4gICAgY3JzOiBhbnksXG5cbiAgICByZW5hbWVzPzogSVJlbmFtZVJlc3VsdFtdXG5cbiAgfSxcblxuKTogUHJvbWlzZTxSZW5kZXJlZENyTWFwPiB7XG5cbiAgY29uc3QgcmVzdWx0OiBSZW5kZXJlZENyTWFwID0ge31cblxuICBjb25zdCB7IHJlbmRlckNsYWltcywgY3JzIH0gPSBkYXRhXG5cbiAgY29uc3Qgc29ydGVkS2luZHMgPSBzb3J0S2luZHMoW1wiVXNlckNsYWltXCIsIFwiR3JvdXBDbGFpbVwiLCBcIkNvbXBvbmVudENsYWltXCIsIFwiRG9tYWluQ2xhaW1cIiwgXCJTeXN0ZW1DbGFpbVwiLCBcIlRGV29ya3NwYWNlQ2xhaW1cIiwgXCJBcmdvRGVwbG95Q2xhaW1cIl0sIHJlbmRlckNsYWltcylcblxuICBmb3IgKGNvbnN0IHJlbmRlckNsYWltcyBvZiBzb3J0ZWRLaW5kcykge1xuXG4gICAgZm9yIChjb25zdCBjbGFpbUtleSBvZiBPYmplY3Qua2V5cyhyZW5kZXJDbGFpbXMpKSB7XG5cbiAgICAgIGNvbnN0IGNsYWltID0gcmVuZGVyQ2xhaW1zW2NsYWltS2V5IGFzIFJlbmRlckNsYWltS2V5XS5jbGFpbVxuXG4gICAgICBjb25zdCBjb25maWd1cmVkUHJvdmlkZXIgPSBnZXRDb25maWd1cmVkUHJvdmlkZXIoKS50b1N0cmluZygpXG5cbiAgICAgIGxldCBwcm92aWRlcnMgPSBPYmplY3Qua2V5cyhjbGFpbS5wcm92aWRlcnMpXG5cbiAgICAgIGlmKGNvbmZpZ3VyZWRQcm92aWRlciAhPSBBbGxvd2VkUHJvdmlkZXJzLmFsbC50b1N0cmluZygpKXtcblxuICAgICAgICBwcm92aWRlcnMgPSBwcm92aWRlcnMuZmlsdGVyKFxuXG4gICAgICAgICAgKHByb3ZpZGVyOiBzdHJpbmcpID0+IHByb3ZpZGVyID09PSBjb25maWd1cmVkUHJvdmlkZXJcblxuICAgICAgICApXG5cbiAgICAgIH1cblxuXG4gICAgICBjb25zdCBwcmV2aW91c0NSID0gZ2V0UHJldmlvdXNDUmZyb21DbGFpbShjbGFpbSwgY3JzKVxuXG4gICAgICBjb25zdCBwYXRjaGVzID0gYXdhaXQgZXh0cmFjdFBhdGNoZXMocmVuZGVyQ2xhaW1zW2NsYWltS2V5IGFzIFJlbmRlckNsYWltS2V5XSwgcHJldmlvdXNDUilcblxuICAgICAgaWYgKCFwcmV2aW91c0NSKSB7XG5cbiAgICAgICAgbG9nKGBObyBDUiBmb3VuZCBmb3IgY2xhaW0gJHtjbGFpbUtleX0sIGl0IHdpbGwgYmUgcmVuZGVyZWQgZnJvbSBzY3JhdGNoYClcblxuICAgICAgfVxuXG4gICAgICBjb25zdCB7ZmlyZXN0YXJ0ckVudGl0eSwgZXh0cmFDaGFydHMsIGNhdGFsb2dFbnRpdHl9ICA9IGF3YWl0IHJlbmRlckNsYWltKFxuXG4gICAgICAgIGNhdGFsb2dTY29wZSxcblxuICAgICAgICBmaXJlc3RhcnRyU2NvcGUsXG5cbiAgICAgICAgY2xhaW0sXG5cbiAgICAgICAgcGF0Y2hlcyxcblxuICAgICAgICBwcmV2aW91c0NSLFxuXG4gICAgICApXG5cbiAgICAgIGlmKGNhdGFsb2dFbnRpdHkpIHtcblxuICAgICAgICByZXN1bHRbYCR7Y2F0YWxvZ0VudGl0eS5raW5kfS0ke2NhdGFsb2dFbnRpdHkubWV0YWRhdGEubmFtZX1gXSA9IGNhdGFsb2dFbnRpdHkudG9Kc29uKClcbiAgICAgIFxuICAgICAgfVxuXG4gICAgICAvKipcblxuICAgICAgKiBJZiB0aGVyZSBpcyBubyBwcm92aWRlciBkb24ndCBzdG9yZSB0aGUgQ1IgaW4gdGhlIG1hcFxuXG4gICAgICAqL1xuXG4gICAgICBpZiAoIWZpcmVzdGFydHJFbnRpdHkpIGNvbnRpbnVlO1xuXG4gICAgICBjb25zdCBmaXJlc3RhcnRyRW50aXR5SnNvbiA9IGZpcmVzdGFydHJFbnRpdHkudG9Kc29uKClcblxuICAgICAgc2V0UmVuZGVyZWRDbGFpbShjbGFpbSwgZmlyZXN0YXJ0ckVudGl0eUpzb24pXG5cbiAgICAgIGZvcihjb25zdCBleHRyYUNoYXJ0IG9mIGV4dHJhQ2hhcnRzKXtcblxuICAgICAgICBjb25zdCB7Y2xhaW0sIGNoYXJ0fSA9IGV4dHJhQ2hhcnRcblxuICAgICAgICBzZXRSZW5kZXJlZENsYWltKGNsYWltLCBjaGFydC50b0pzb24oKSlcblxuICAgICAgICByZXN1bHRbYCR7Y2hhcnQua2luZH0tJHtjaGFydC5tZXRhZGF0YS5uYW1lfWBdID0gY2hhcnQudG9Kc29uKClcblxuICAgICAgfVxuXG4gICAgICBpZighZmlyZXN0YXJ0ckVudGl0eUpzb24ubWV0YWRhdGEuYW5ub3RhdGlvbnMgfHwgIWZpcmVzdGFydHJFbnRpdHlKc29uLm1ldGFkYXRhLm5hbWUpIHRocm93IGZpcmVzdGFydHJFbnRpdHlKc29uXG5cbiAgICAgIHJlc3VsdFtgJHtmaXJlc3RhcnRyRW50aXR5LmtpbmR9LSR7ZmlyZXN0YXJ0ckVudGl0eUpzb24ubWV0YWRhdGEubmFtZX1gXSA9IGZpcmVzdGFydHJFbnRpdHlKc29uXG5cbiAgICB9XG5cbiAgfVxuXG4gIHJldHVybiByZXN1bHRcblxufVxuXG5hc3luYyBmdW5jdGlvbiBleHRyYWN0UGF0Y2hlcyhcblxuICBjbGFpbVRvUmVuZGVyRGF0YTogUmVuZGVyQ2xhaW1EYXRhLCBwcmV2aW91c0NSOiBhbnlcblxuKTogUHJvbWlzZTxJQ3VzdG9tUmVzb3VyY2VQYXRjaFtdPiB7XG5cbiAgbGV0IHRvdGFsUGF0Y2hlczogSUN1c3RvbVJlc291cmNlUGF0Y2hbXSA9IFtdXG5cblxuICBmb3IgKGNvbnN0IG5vcm1hbGl6ZXIgb2YgY2xhaW1Ub1JlbmRlckRhdGEubm9ybWFsaXplcnMpIHtcblxuICAgIGNvbnN0IHBhdGNoZXMgPSBhd2FpdCBub3JtYWxpemVyLnBhdGNoZXMoY2xhaW1Ub1JlbmRlckRhdGFbXCJjbGFpbVwiXSwgcHJldmlvdXNDUilcblxuICAgIHRvdGFsUGF0Y2hlcyA9IHRvdGFsUGF0Y2hlcy5jb25jYXQocGF0Y2hlcykuZmxhdCgpXG5cbiAgfVxuXG4gIGZvciAoY29uc3QgaW5pdGlhbGl6ZXIgb2YgY2xhaW1Ub1JlbmRlckRhdGEuaW5pdGlhbGl6ZXJzKSB7XG5cbiAgICBjb25zdCBwYXRjaGVzID0gYXdhaXQgaW5pdGlhbGl6ZXIucGF0Y2hlcyhjbGFpbVRvUmVuZGVyRGF0YVtcImNsYWltXCJdLCBwcmV2aW91c0NSKVxuXG4gICAgdG90YWxQYXRjaGVzID0gdG90YWxQYXRjaGVzLmNvbmNhdChwYXRjaGVzKS5mbGF0KClcblxuICB9XG5cbiAgZm9yIChjb25zdCBvdmVycmlkZXIgb2YgY2xhaW1Ub1JlbmRlckRhdGEub3ZlcnJpZGVzKSB7XG5cbiAgICBjb25zdCBwYXRjaGVzID0gYXdhaXQgb3ZlcnJpZGVyLnBhdGNoZXMoY2xhaW1Ub1JlbmRlckRhdGFbXCJjbGFpbVwiXSwgcHJldmlvdXNDUilcblxuICAgIHRvdGFsUGF0Y2hlcyA9IHRvdGFsUGF0Y2hlcy5jb25jYXQocGF0Y2hlcykuZmxhdCgpXG5cbiAgfVxuXG5cbiAgaWYgKGNsYWltVG9SZW5kZXJEYXRhLmNsYWltLmtpbmQgPT09IFwiQ29tcG9uZW50Q2xhaW1cIikge1xuXG4gICAgdG90YWxQYXRjaGVzID0gdG90YWxQYXRjaGVzLmNvbmNhdCgoYXdhaXQgZ2VuZXJhdGVGZWF0dXJlc1BhdGNoZXMoY2xhaW1Ub1JlbmRlckRhdGEuY2xhaW0pKSkuZmxhdCgpXG5cbiAgfVxuXG5cbiAgZm9yIChjb25zdCBnbG9iYWwgb2YgY2xhaW1Ub1JlbmRlckRhdGEuZ2xvYmFscykge1xuXG4gICAgY29uc3QgcGF0Y2hlcyA9IGF3YWl0IGdsb2JhbC5wYXRjaGVzKGNsYWltVG9SZW5kZXJEYXRhLmNsYWltLCBwcmV2aW91c0NSKVxuXG4gICAgdG90YWxQYXRjaGVzID0gdG90YWxQYXRjaGVzLmNvbmNhdChwYXRjaGVzKS5mbGF0KClcblxuICB9XG5cbiAgcmV0dXJuIHRvdGFsUGF0Y2hlc1xuXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJlbmRlckNsYWltUmVzdWx0IHtcbiAgY2F0YWxvZ0VudGl0eT86IEFwaU9iamVjdDtcbiAgZmlyZXN0YXJ0ckVudGl0eT86IEFwaU9iamVjdDtcbiAgZXh0cmFDaGFydHM6IHsgY2xhaW06IHtraW5kOiBzdHJpbmcsIG5hbWU6IHN0cmluZ30sIGNoYXJ0OiBBcGlPYmplY3R9W107XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlbmRlckNsYWltKFxuXG4gIGNhdGFsb2dTY29wZTogQ29uc3RydWN0LFxuXG4gIGZpcmVzdGFydHJTY29wZTogQ29uc3RydWN0LFxuXG4gIGNsYWltOiBhbnksXG5cbiAgcGF0Y2hlczogSUN1c3RvbVJlc291cmNlUGF0Y2hbXSxcblxuICBwcmV2aW91c0NSOiBhbnkgfCBudWxsID0gbnVsbFxuXG4gICk6IFByb21pc2U8SVJlbmRlckNsYWltUmVzdWx0PiB7XG5cbiAgbGV0IGNhdGFsb2dFbnRpdHk6IEJhc2VDaGFydCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgbGV0IGZpcmVzdGFydHJFbnRpdHk6IEJhc2VDaGFydCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICBjb25zdCBjaGFydElkID0gYCR7Y2xhaW0ua2luZH0tJHtjbGFpbS5uYW1lfWAudG9Mb3dlckNhc2UoKTtcblxuICBsZXQgZmlyZXN0YXJ0cklkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBpZiAocHJldmlvdXNDUikge1xuXG4gICAgZmlyZXN0YXJ0cklkID0gcHJldmlvdXNDUj8uc3BlYz8uZmlyZXN0YXJ0cj8udGZTdGF0ZUtleSB8fCBudWxsO1xuXG4gIH1cblxuICBjb25zdCByZW5kZXJQYXRjaGVzID0gcGF0Y2hlcy5maWx0ZXIoKHBhdGNoOiBhbnkpID0+ICFwYXRjaC5pc1Bvc3RQYXRjaClcbiAgY29uc3QgcG9zdFBhdGNoZXMgPSBwYXRjaGVzLmZpbHRlcigocGF0Y2g6YW55KSA9PiBwYXRjaC5pc1Bvc3RQYXRjaClcblxuICBjb25zdCBwcm92aWRlciA9IGdldENvbmZpZ3VyZWRQcm92aWRlcigpXG5cbiAgc3dpdGNoIChjbGFpbS5raW5kKSB7XG5cbiAgICBjYXNlIFwiRG9tYWluQ2xhaW1cIjpcblxuICAgICAgY2F0YWxvZ0VudGl0eSA9IG5ldyBjaGFydHMuZGVmYXVsdC5DYXRhbG9nRG9tYWluQ2hhcnQoXG4gICAgICAgIGNhdGFsb2dTY29wZSwgXG4gICAgICAgIGBjYXRhbG9nLSR7Y2hhcnRJZH1gLCBcbiAgICAgICAgZmlyZXN0YXJ0cklkLCBcbiAgICAgICAgY2xhaW0sIFxuICAgICAgICByZW5kZXJQYXRjaGVzXG4gICAgICApO1xuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJTeXN0ZW1DbGFpbVwiOlxuXG4gICAgICBjYXRhbG9nRW50aXR5ID0gbmV3IGNoYXJ0cy5kZWZhdWx0LkNhdGFsb2dTeXN0ZW1DaGFydChcbiAgICAgICAgY2F0YWxvZ1Njb3BlLCBcbiAgICAgICAgYGNhdGFsb2ctJHtjaGFydElkfWAsIFxuICAgICAgICBmaXJlc3RhcnRySWQsIFxuICAgICAgICBjbGFpbSwgXG4gICAgICAgIHJlbmRlclBhdGNoZXNcbiAgICAgICk7XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcIkdyb3VwQ2xhaW1cIjpcblxuICAgICAgY2F0YWxvZ0VudGl0eSA9IG5ldyBjaGFydHMuZGVmYXVsdC5DYXRhbG9nR3JvdXBDaGFydChjYXRhbG9nU2NvcGUsIGBjYXRhbG9nLSR7Y2hhcnRJZH1gLCBmaXJlc3RhcnRySWQsIGNsYWltLCByZW5kZXJQYXRjaGVzKTtcblxuICAgICAgaWYgKGNsYWltLnByb3ZpZGVycy5naXRodWIgJiYgKHByb3ZpZGVyID09PSBBbGxvd2VkUHJvdmlkZXJzLmdpdGh1YiB8fCBwcm92aWRlciA9PT0gQWxsb3dlZFByb3ZpZGVycy5hbGwpKSB7XG5cbiAgICAgICAgZmlyZXN0YXJ0ckVudGl0eSA9IG5ldyBjaGFydHMuZGVmYXVsdC5HaXRodWJHcm91cENoYXJ0KFxuICAgICAgICAgIGZpcmVzdGFydHJTY29wZSxcbiAgICAgICAgICBgZ2l0aHViLSR7Y2hhcnRJZH1gLFxuICAgICAgICAgIGZpcmVzdGFydHJJZCxcbiAgICAgICAgICBjbGFpbSxcbiAgICAgICAgICByZW5kZXJQYXRjaGVzXG4gICAgICAgICk7XG5cbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiVXNlckNsYWltXCI6XG5cbiAgICAgIGNhdGFsb2dFbnRpdHkgPSBuZXcgY2hhcnRzLmRlZmF1bHQuQ2F0YWxvZ1VzZXJDaGFydChjYXRhbG9nU2NvcGUsIGNoYXJ0SWQsIGZpcmVzdGFydHJJZCwgY2xhaW0sIHJlbmRlclBhdGNoZXMpO1xuXG4gICAgICBpZiAoY2xhaW0ucHJvdmlkZXJzLmdpdGh1YiAmJiAocHJvdmlkZXIgPT09IEFsbG93ZWRQcm92aWRlcnMuZ2l0aHViIHx8IHByb3ZpZGVyID09PSBBbGxvd2VkUHJvdmlkZXJzLmFsbCkpIHtcblxuICAgICAgICBmaXJlc3RhcnRyRW50aXR5ID0gbmV3IGNoYXJ0cy5kZWZhdWx0LkdpdGh1Yk1lbWJlcnNoaXBDaGFydChcbiAgICAgICAgICBmaXJlc3RhcnRyU2NvcGUsXG4gICAgICAgICAgYGdpdGh1Yi0ke2NoYXJ0SWR9YCxcbiAgICAgICAgICBmaXJlc3RhcnRySWQsXG4gICAgICAgICAgY2xhaW0sXG4gICAgICAgICAgcmVuZGVyUGF0Y2hlc1xuICAgICAgICApO1xuXG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcIkNvbXBvbmVudENsYWltXCI6XG5cbiAgICAgIGlmIChjbGFpbS5wcm92aWRlcnMuZ2l0aHViICYmIChwcm92aWRlciA9PT0gQWxsb3dlZFByb3ZpZGVycy5naXRodWIgfHwgcHJvdmlkZXIgPT09IEFsbG93ZWRQcm92aWRlcnMuYWxsKSkge1xuXG4gICAgICAgIGZpcmVzdGFydHJFbnRpdHkgPSBuZXcgY2hhcnRzLmRlZmF1bHQuR2l0aHViUmVwb3NpdG9yeUNoYXJ0KFxuICAgICAgICAgIGZpcmVzdGFydHJTY29wZSxcbiAgICAgICAgICBgZ2l0aHViLSR7Y2hhcnRJZH1gLFxuICAgICAgICAgIGZpcmVzdGFydHJJZCxcbiAgICAgICAgICBjbGFpbSxcbiAgICAgICAgICByZW5kZXJQYXRjaGVzXG4gICAgICAgICk7XG5cbiAgICAgIH1cbiAgICAgIGNhdGFsb2dFbnRpdHkgPSBuZXcgY2hhcnRzLmRlZmF1bHQuQ2F0YWxvZ0NvbXBvbmVudENoYXJ0KFxuICAgICAgICBjYXRhbG9nU2NvcGUsIGNoYXJ0SWQsIGZpcmVzdGFydHJJZCwgY2xhaW0sIHJlbmRlclBhdGNoZXNcbiAgICAgICk7XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcIlRGV29ya3NwYWNlQ2xhaW1cIjpcblxuICAgICAgaWYgKGNsYWltLnByb3ZpZGVycy50ZXJyYWZvcm0gJiYgKHByb3ZpZGVyID09PSBBbGxvd2VkUHJvdmlkZXJzLnRlcnJhZm9ybSB8fCBwcm92aWRlciA9PT0gQWxsb3dlZFByb3ZpZGVycy5hbGwpKSB7XG5cbiAgICAgICAgZmlyZXN0YXJ0ckVudGl0eSA9IG5ldyBjaGFydHMuZGVmYXVsdC5URldvcmtzcGFjZUNoYXJ0KFxuICAgICAgICAgIGZpcmVzdGFydHJTY29wZSwgXG4gICAgICAgICAgYHRlcnJhZm9ybS0ke2NoYXJ0SWR9YCwgXG4gICAgICAgICAgZmlyZXN0YXJ0cklkLFxuICAgICAgICAgIGNsYWltLFxuICAgICAgICAgIHJlbmRlclBhdGNoZXNcbiAgICAgICAgKTtcblxuICAgICAgfVxuICAgICAgY2F0YWxvZ0VudGl0eSA9IG5ldyBjaGFydHMuZGVmYXVsdC5DYXRhbG9nVEZXb3Jrc3BhY2VDaGFydChcbiAgICAgICAgY2F0YWxvZ1Njb3BlLCBjaGFydElkLCBmaXJlc3RhcnRySWQsIGNsYWltLCByZW5kZXJQYXRjaGVzXG4gICAgICApO1xuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJBcmdvRGVwbG95Q2xhaW1cIjpcblxuICAgICAgaWYgKGNsYWltLnByb3ZpZGVycy5hcmdvY2QgJiYgKHByb3ZpZGVyID09PSBBbGxvd2VkUHJvdmlkZXJzLmFyZ29jZCB8fCBwcm92aWRlciA9PT0gQWxsb3dlZFByb3ZpZGVycy5hbGwpKSB7XG5cbiAgICAgICAgZmlyZXN0YXJ0ckVudGl0eSA9IG5ldyBjaGFydHMuZGVmYXVsdC5BcmdvRGVwbG95Q2hhcnQoXG4gICAgICAgICAgZmlyZXN0YXJ0clNjb3BlLCBcbiAgICAgICAgICBgYXJnb2NkLSR7Y2hhcnRJZH1gLCBcbiAgICAgICAgICBmaXJlc3RhcnRySWQsXG4gICAgICAgICAgY2xhaW0sXG4gICAgICAgICAgcmVuZGVyUGF0Y2hlc1xuICAgICAgICApO1xuXG4gICAgICB9XG4gICAgICBcbiAgICAgIGNhdGFsb2dFbnRpdHkgPSBuZXcgY2hhcnRzLmRlZmF1bHQuQ2F0YWxvZ0FyZ29EZXBsb3lDaGFydChcbiAgICAgICAgY2F0YWxvZ1Njb3BlLCBjaGFydElkLCBmaXJlc3RhcnRySWQsIGNsYWltLCByZW5kZXJQYXRjaGVzXG4gICAgICApO1xuXG4gICAgICBicmVhaztcblxuXG4gICAgZGVmYXVsdDpcblxuICAgICAgY29uc29sZS5lcnJvcihgVW5rbm93biBjbGFpbSBraW5kOiAke2NsYWltLmtpbmR9YCk7XG5cbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZXJlIGlzIHRoZSBwb3NzaWJpbGl0eSB0byBvbmx5IHJlbmRlciB0aGUgY2F0YWxvZyBlbnRpdHksIGJ1dCBub3QgdGhlIG90aGVyIHdheSBhcm91bmRcbiAgICovXG4gIGlmICghY2F0YWxvZ0VudGl0eSkge1xuXG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gcmVuZGVyIGNsYWltICR7Y2xhaW0ua2luZH0tJHtjbGFpbS5uYW1lfWApO1xuXG4gIH1cblxuICAvKlxuICAgKlxuICAgKiBSZW5kZXIgcGhhc2VcbiAgICpcbiAgICovXG4gIGNvbnN0IFtjYXRhbG9nQ2hhcnQsIGZpcmVzdGFydHJFbnRpdHlDaGFydF0gPSBhd2FpdCBQcm9taXNlLmFsbChcblxuICAgIFtcbiAgICAgIHByb3ZpZGVyID09PSBBbGxvd2VkUHJvdmlkZXJzLmFsbCA/IGNhdGFsb2dFbnRpdHkucmVuZGVyKCkgOiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKSxcblxuICAgICAgZmlyZXN0YXJ0ckVudGl0eT8ucmVuZGVyKCksXG5cbiAgICBdXG5cbiAgKVxuXG4gIC8qXG4gICAqXG4gICAqIFBvc3QgcmVuZGVyIHBoYXNlIChhbmQgcmV0dXJuKVxuICAgKlxuICAgKi9cbiAgcmV0dXJuIHtcblxuICAgIGNhdGFsb2dFbnRpdHk6IGNhdGFsb2dDaGFydCA/IGF3YWl0IGNhdGFsb2dDaGFydC5wb3N0UmVuZGVyZXIocG9zdFBhdGNoZXMpIDogdW5kZWZpbmVkLFxuXG4gICAgZmlyZXN0YXJ0ckVudGl0eTogYXdhaXQgKGZpcmVzdGFydHJFbnRpdHlDaGFydCA/IGZpcmVzdGFydHJFbnRpdHlDaGFydC5wb3N0UmVuZGVyZXIocG9zdFBhdGNoZXMpIDogdW5kZWZpbmVkKSxcblxuICAgIGV4dHJhQ2hhcnRzOiBhd2FpdCBmaXJlc3RhcnRyRW50aXR5Py5leHRyYUNoYXJ0cygpIHx8IFtdXG4gIH07XG5cbn1cblxuXG5cbmZ1bmN0aW9uIHNvcnRLaW5kcyhvcmRlcmVkS2luZHM6IHN0cmluZ1tdLCBjbGFpbXM6IFJlbmRlckNsYWltcykge1xuXG4gIGNvbnN0IHJlc3VsdDogUmVuZGVyQ2xhaW1zW10gPSBbXVxuXG4gIGZvciAoY29uc3Qga2luZCBvZiBvcmRlcmVkS2luZHMpIHtcblxuICAgIGNvbnN0IGtpbmRSZW5kZXJDbGFpbXM6IGFueSA9IHNvcnRSZW5kZXJDbGFpbXNCeUtpbmQoY2xhaW1zLCBba2luZF0pXG5cbiAgICByZXN1bHQucHVzaChraW5kUmVuZGVyQ2xhaW1zKVxuXG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG5cbn1cblxuXG5cblxuXG5mdW5jdGlvbiBnZXRQcmV2aW91c0NSZnJvbUNsYWltKGNsYWltOiBhbnksIHByZXZpb3VzQ1JzOiBhbnkpIHtcblxuICBjb25zdCBwcmV2aW91c0NSc0tleXMgPSBPYmplY3Qua2V5cyhwcmV2aW91c0NScylcblxuICBmb3IoY29uc3QgcHJldmlvdXNDUktleSBvZiBwcmV2aW91c0NSc0tleXMpe1xuXG4gICAgY29uc3QgcHJldmlvdXNDUiA9IHByZXZpb3VzQ1JzW3ByZXZpb3VzQ1JLZXldXG5cbiAgICBpZihpc0NhdGFsb2dFbnRpdHkocHJldmlvdXNDUikpIGNvbnRpbnVlXG5cbiAgICBpZihpc0V4Y2x1ZGVkRnJvbVByZXZpb3VzQ1IocHJldmlvdXNDUi5raW5kKSkgY29udGludWVcblxuICAgIGlmKHByZXZpb3VzQ1IubWV0YWRhdGEuYW5ub3RhdGlvbnNbQ0xBSU1fUkVGX0FOTk9UQVRJT05dID09PSBgJHtjbGFpbS5raW5kfS8ke2NsYWltLm5hbWV9YCl7XG5cbiAgICAgIHJldHVybiBwcmV2aW91c0NSXG5cbiAgICB9XG5cbiAgfVxuXG4gIHJldHVybiBmYWxzZVxuXG59XG5cblxuZnVuY3Rpb24gaXNFeGNsdWRlZEZyb21QcmV2aW91c0NSKGNyS2luZDogc3RyaW5nKXtcblxuXG4gIHJldHVybiBbXCJGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVcIl0uaW5jbHVkZXMoY3JLaW5kKVxuXG5cbn1cbiJdfQ==
|
|
235604
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVuZGVyZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxxQ0FBa0Q7QUFDbEQsaURBQWtDO0FBQ2xDLGtEQUEwQjtBQUUxQixpQ0FBdUQ7QUFFdkQscUVBQTBFO0FBRzFFLHlEQUF1SDtBQUN2SCwrQ0FBa0Q7QUFDbEQscUNBQW1FO0FBRW5FLHdEQUFpRTtBQUNqRSx1Q0FBa0M7QUFDbEMsNENBQW9CO0FBQ3BCLGdEQUF3QjtBQUN4QixvRUFBb0M7QUFDcEMsb0RBQTRCO0FBQzVCLE1BQU0sb0JBQW9CLEdBQUcsMEJBQTBCLENBQUE7QUFHdkQsTUFBTSxHQUFHLEdBQUcsSUFBQSxlQUFLLEVBQUMscUJBQXFCLENBQUMsQ0FBQTtBQXFDeEM7Ozs7Ozs7Ozs7O0dBV0c7QUFDSSxLQUFLLFVBQVUsaUJBQWlCLENBRXJDLFlBQTBCLEVBRTFCLE1BQVcsRUFBRSxFQUViLG1CQUEyQixlQUFlLEVBRTFDLGNBQXNCLGlCQUFpQjtJQUl2QyxNQUFNLFlBQVksR0FBRyxJQUFJLFdBQUcsQ0FBQztRQUUzQixNQUFNLEVBQUUsZ0JBQWdCO1FBRXhCLG1CQUFtQixFQUFFLE9BQU87UUFFNUIsY0FBYyxFQUFFLHNCQUFjLENBQUMsaUJBQWlCO0tBRWpELENBQUMsQ0FBQTtJQUVGLE1BQU0sZUFBZSxHQUFHLElBQUksV0FBRyxDQUFDO1FBRTlCLE1BQU0sRUFBRSxXQUFXO1FBRW5CLG1CQUFtQixFQUFFLE9BQU87UUFFNUIsY0FBYyxFQUFFLHNCQUFjLENBQUMsaUJBQWlCO0tBRWpELENBQUMsQ0FBQTtJQUVGLE1BQU0sTUFBTSxHQUFRLE1BQU0sYUFBYSxDQUVyQyxZQUFZLEVBRVosZUFBZSxFQUVmO1FBQ0UsWUFBWTtRQUVaLEdBQUc7UUFFSCxPQUFPLEVBQUUsRUFBRTtLQUNaLENBQ0YsQ0FBQTtJQUVELGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtJQUV2QixPQUFPLE1BQU0sQ0FBQTtBQUVmLENBQUM7QUFuREQsOENBbURDO0FBR0Q7Ozs7Ozs7Ozs7R0FVRztBQUNJLEtBQUssVUFBVSxNQUFNLENBRTFCLFlBQXVCLEVBRXZCLGVBQTBCO0lBSTFCLE1BQU0sSUFBSSxHQVFOLE1BQU0sSUFBQSxnQkFBTyxHQUFFLENBQUE7SUFFbkIsTUFBTSxNQUFNLEdBQVEsTUFBTSxhQUFhLENBQUMsWUFBWSxFQUFFLGVBQWUsRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUU1RSxJQUFBLHlDQUE0QixFQUFDLE1BQU0sQ0FBQyxDQUFBO0lBRXBDLElBQUEseUNBQTRCLEVBQUMsTUFBTSxDQUFDLENBQUE7SUFFcEMsT0FBTyxNQUFNLENBQUE7QUFFZixDQUFDO0FBMUJELHdCQTBCQztBQUVEOzs7RUFHRTtBQUNLLEtBQUssVUFBVSxvQkFBb0IsQ0FBQyxNQUFjLEVBQUUsT0FBZSxFQUFFLE1BQWMsRUFBRSxHQUFXLEVBQUUsUUFBYSxnQkFBTTtJQUUxSCxNQUFNLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7SUFFN0MsTUFBTSxDQUFFLEdBQUcsRUFBRSxJQUFJLENBQUUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBRXhDLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FDbEQsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUNsQixJQUFJLEVBQ0osR0FBRyxDQUNKLENBQUE7SUFFRCxJQUFHLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLFNBQVMsRUFBQztRQUUzRCxNQUFNLE9BQU8sR0FBRyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUV6QyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUVqQixJQUFJLEVBRUosR0FBRyxDQUVKLENBQUE7UUFFRCxNQUFNLFNBQVMsR0FBUSx3QkFBTSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUE7UUFFbEQsU0FBUyxDQUFDLElBQUksR0FBRyxrQ0FBa0MsQ0FBQTtRQUVuRCxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsbUNBRXpCLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxLQUVqQyxDQUFDLHdCQUFNLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLG1CQUFtQixDQUFDLENBQUMsRUFBRSxNQUFNLEVBRXJFLENBQUMsd0JBQU0sQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBRTFELENBQUE7UUFFRCxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FFNUIsd0JBQU0sQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLENBRWpELEdBQUcsU0FBUyxDQUFBO1FBRWIsTUFBTSxhQUFhLEdBQUcsd0JBQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxtQkFFaEMsU0FBUyxHQUViLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FFcEMsQ0FBQTtRQUVELE1BQU0sUUFBUSxHQUFHLGNBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGNBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUE7UUFFckUsWUFBRSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUE7UUFFekMsT0FBTTtLQUNQO0lBRUQsMEVBQTBFO0lBQzFFLE1BQU0sSUFBQSxlQUFLLEVBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEtBQWEsRUFBRSxJQUFTLEVBQUUsRUFBRTtRQUUzRCxNQUFNLFFBQVEsR0FBRyxjQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxjQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7UUFFekQsTUFBTSxTQUFTLEdBQVEsd0JBQU0sQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBRS9DLFNBQVMsQ0FBQyxJQUFJLEdBQUcsa0NBQWtDLENBQUE7UUFDbkQsU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLG1DQUN6QixTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsS0FDakMsQ0FBQyx3QkFBTSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUNyRSxDQUFDLHdCQUFNLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUMxRCxDQUFBO1FBRUQsTUFBTSxhQUFhLEdBQUcsd0JBQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxtQkFDakMsU0FBUyxHQUNYLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBRXZDLFlBQUUsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFBO0lBRTNDLENBQUMsQ0FBQyxDQUFBO0FBRUosQ0FBQztBQWpGRCxvREFpRkM7QUFFTSxLQUFLLFVBQVUsbUNBQW1DLENBQ3ZELFFBQWdCLEVBQUUsZUFBdUIsRUFBRSxlQUF1QjtJQUdsRSwwRUFBMEU7SUFFMUUsTUFBTSxTQUFTLEdBQVEsd0JBQU0sQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFlBQUUsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFFOUUsTUFBTSxnQkFBZ0IsR0FBYSxlQUFlLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzlELE1BQU0sb0JBQW9CLEdBQVcsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO0lBRTNHLE1BQU0sZ0JBQWdCLEdBQWEsZUFBZSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM5RCxNQUFNLG9CQUFvQixHQUFXLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUUzRyxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsbUNBQ3pCLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxLQUNqQyxDQUFDLHdCQUFNLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsb0JBQW9CLEVBQy9FLENBQUMsd0JBQU0sQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxvQkFBb0IsR0FDaEYsQ0FBQTtJQUVELFlBQUUsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLHdCQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sbUJBQ3BDLFNBQVMsR0FBSSxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQ3RELENBQUMsQ0FBQTtBQUVKLENBQUM7QUF4QkQsa0ZBd0JDO0FBRUQsS0FBSyxVQUFVLGFBQWEsQ0FFMUIsWUFBdUIsRUFFdkIsZUFBMEIsRUFFMUIsSUFRQztJQUlELE1BQU0sTUFBTSxHQUFrQixFQUFFLENBQUE7SUFFaEMsTUFBTSxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUE7SUFFbEMsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLENBQUMsV0FBVyxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUE7SUFFL0osS0FBSyxNQUFNLFlBQVksSUFBSSxXQUFXLEVBQUU7UUFFdEMsS0FBSyxNQUFNLFFBQVEsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFO1lBRWhELE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxRQUEwQixDQUFDLENBQUMsS0FBSyxDQUFBO1lBRTVELE1BQU0sa0JBQWtCLEdBQUcsSUFBQSw4QkFBcUIsR0FBRSxDQUFDLFFBQVEsRUFBRSxDQUFBO1lBRTdELElBQUksU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1lBRTVDLElBQUcsa0JBQWtCLElBQUkseUJBQWdCLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFDO2dCQUV2RCxTQUFTLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FFMUIsQ0FBQyxRQUFnQixFQUFFLEVBQUUsQ0FBQyxRQUFRLEtBQUssa0JBQWtCLENBRXRELENBQUE7YUFFRjtZQUdELE1BQU0sVUFBVSxHQUFHLHNCQUFzQixDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQTtZQUVyRCxNQUFNLE9BQU8sR0FBRyxNQUFNLGNBQWMsQ0FBQyxZQUFZLENBQUMsUUFBMEIsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFBO1lBRTFGLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBRWYsR0FBRyxDQUFDLHlCQUF5QixRQUFRLG9DQUFvQyxDQUFDLENBQUE7YUFFM0U7WUFFRCxNQUFNLEVBQUMsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBQyxHQUFJLE1BQU0sV0FBVyxDQUV2RSxZQUFZLEVBRVosZUFBZSxFQUVmLEtBQUssRUFFTCxPQUFPLEVBRVAsVUFBVSxDQUVYLENBQUE7WUFFRCxJQUFHLGFBQWEsRUFBRTtnQkFFaEIsTUFBTSxDQUFDLEdBQUcsYUFBYSxDQUFDLElBQUksSUFBSSxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFBO2FBRXhGO1lBRUQ7Ozs7Y0FJRTtZQUVGLElBQUksQ0FBQyxnQkFBZ0I7Z0JBQUUsU0FBUztZQUVoQyxNQUFNLG9CQUFvQixHQUFHLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxDQUFBO1lBRXRELElBQUEsOEJBQWdCLEVBQUMsS0FBSyxFQUFFLG9CQUFvQixDQUFDLENBQUE7WUFFN0MsS0FBSSxNQUFNLFVBQVUsSUFBSSxXQUFXLEVBQUM7Z0JBRWxDLE1BQU0sRUFBQyxLQUFLLEVBQUUsS0FBSyxFQUFDLEdBQUcsVUFBVSxDQUFBO2dCQUVqQyxJQUFBLDhCQUFnQixFQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQTtnQkFFdkMsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFBO2FBRWhFO1lBRUQsSUFBRyxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxXQUFXLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsSUFBSTtnQkFBRSxNQUFNLG9CQUFvQixDQUFBO1lBRWhILE1BQU0sQ0FBQyxHQUFHLGdCQUFnQixDQUFDLElBQUksSUFBSSxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxvQkFBb0IsQ0FBQTtTQUVoRztLQUVGO0lBRUQsT0FBTyxNQUFNLENBQUE7QUFFZixDQUFDO0FBRUQsS0FBSyxVQUFVLGNBQWMsQ0FFM0IsaUJBQWtDLEVBQUUsVUFBZTtJQUluRCxJQUFJLFlBQVksR0FBMkIsRUFBRSxDQUFBO0lBRzdDLEtBQUssTUFBTSxVQUFVLElBQUksaUJBQWlCLENBQUMsV0FBVyxFQUFFO1FBRXRELE1BQU0sT0FBTyxHQUFHLE1BQU0sVUFBVSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQTtRQUVoRixZQUFZLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtLQUVuRDtJQUVELEtBQUssTUFBTSxXQUFXLElBQUksaUJBQWlCLENBQUMsWUFBWSxFQUFFO1FBRXhELE1BQU0sT0FBTyxHQUFHLE1BQU0sV0FBVyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQTtRQUVqRixZQUFZLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtLQUVuRDtJQUVELEtBQUssTUFBTSxTQUFTLElBQUksaUJBQWlCLENBQUMsU0FBUyxFQUFFO1FBRW5ELE1BQU0sT0FBTyxHQUFHLE1BQU0sU0FBUyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQTtRQUUvRSxZQUFZLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtLQUVuRDtJQUdELElBQUksaUJBQWlCLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxnQkFBZ0IsRUFBRTtRQUVyRCxZQUFZLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sSUFBQSx5Q0FBdUIsRUFBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUE7S0FFcEc7SUFHRCxLQUFLLE1BQU0sTUFBTSxJQUFJLGlCQUFpQixDQUFDLE9BQU8sRUFBRTtRQUU5QyxNQUFNLE9BQU8sR0FBRyxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFBO1FBRXpFLFlBQVksR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFBO0tBRW5EO0lBRUQsT0FBTyxZQUFZLENBQUE7QUFFckIsQ0FBQztBQVFELEtBQUssVUFBVSxXQUFXLENBRXhCLFlBQXVCLEVBRXZCLGVBQTBCLEVBRTFCLEtBQVUsRUFFVixPQUErQixFQUUvQixhQUF5QixJQUFJOztJQUk3QixJQUFJLGFBQWEsR0FBMEIsU0FBUyxDQUFDO0lBQ3JELElBQUksZ0JBQWdCLEdBQTBCLFNBQVMsQ0FBQztJQUV4RCxNQUFNLE9BQU8sR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBRTVELElBQUksWUFBWSxHQUFrQixJQUFJLENBQUM7SUFFdkMsSUFBSSxVQUFVLEVBQUU7UUFFZCxZQUFZLEdBQUcsQ0FBQSxNQUFBLE1BQUEsVUFBVSxhQUFWLFVBQVUsdUJBQVYsVUFBVSxDQUFFLElBQUksMENBQUUsVUFBVSwwQ0FBRSxVQUFVLEtBQUksSUFBSSxDQUFDO0tBRWpFO0lBRUQsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUE7SUFDeEUsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQVMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBRXBFLE1BQU0sUUFBUSxHQUFHLElBQUEsOEJBQXFCLEdBQUUsQ0FBQTtJQUV4QyxRQUFRLEtBQUssQ0FBQyxJQUFJLEVBQUU7UUFFbEIsS0FBSyxhQUFhO1lBRWhCLGFBQWEsR0FBRyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQ25ELFlBQVksRUFDWixXQUFXLE9BQU8sRUFBRSxFQUNwQixZQUFZLEVBQ1osS0FBSyxFQUNMLGFBQWEsQ0FDZCxDQUFDO1lBRUYsTUFBTTtRQUVSLEtBQUssYUFBYTtZQUVoQixhQUFhLEdBQUcsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUNuRCxZQUFZLEVBQ1osV0FBVyxPQUFPLEVBQUUsRUFDcEIsWUFBWSxFQUNaLEtBQUssRUFDTCxhQUFhLENBQ2QsQ0FBQztZQUVGLE1BQU07UUFFUixLQUFLLFlBQVk7WUFFZixhQUFhLEdBQUcsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxXQUFXLE9BQU8sRUFBRSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFFN0gsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLFFBQVEsS0FBSyx5QkFBZ0IsQ0FBQyxNQUFNLElBQUksUUFBUSxLQUFLLHlCQUFnQixDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUV6RyxnQkFBZ0IsR0FBRyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQ3BELGVBQWUsRUFDZixVQUFVLE9BQU8sRUFBRSxFQUNuQixZQUFZLEVBQ1osS0FBSyxFQUNMLGFBQWEsQ0FDZCxDQUFDO2FBRUg7WUFFRCxNQUFNO1FBRVIsS0FBSyxXQUFXO1lBRWQsYUFBYSxHQUFHLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFFL0csSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLFFBQVEsS0FBSyx5QkFBZ0IsQ0FBQyxNQUFNLElBQUksUUFBUSxLQUFLLHlCQUFnQixDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUV6RyxnQkFBZ0IsR0FBRyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQ3pELGVBQWUsRUFDZixVQUFVLE9BQU8sRUFBRSxFQUNuQixZQUFZLEVBQ1osS0FBSyxFQUNMLGFBQWEsQ0FDZCxDQUFDO2FBRUg7WUFFRCxNQUFNO1FBRVIsS0FBSyxnQkFBZ0I7WUFFbkIsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLFFBQVEsS0FBSyx5QkFBZ0IsQ0FBQyxNQUFNLElBQUksUUFBUSxLQUFLLHlCQUFnQixDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUV6RyxnQkFBZ0IsR0FBRyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQ3pELGVBQWUsRUFDZixVQUFVLE9BQU8sRUFBRSxFQUNuQixZQUFZLEVBQ1osS0FBSyxFQUNMLGFBQWEsQ0FDZCxDQUFDO2FBRUg7WUFDRCxhQUFhLEdBQUcsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUN0RCxZQUFZLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsYUFBYSxDQUMxRCxDQUFDO1lBRUYsTUFBTTtRQUVSLEtBQUssa0JBQWtCO1lBRXJCLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxTQUFTLElBQUksQ0FBQyxRQUFRLEtBQUsseUJBQWdCLENBQUMsU0FBUyxJQUFJLFFBQVEsS0FBSyx5QkFBZ0IsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFFL0csZ0JBQWdCLEdBQUcsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUNwRCxlQUFlLEVBQ2YsYUFBYSxPQUFPLEVBQUUsRUFDdEIsWUFBWSxFQUNaLEtBQUssRUFDTCxhQUFhLENBQ2QsQ0FBQzthQUVIO1lBQ0QsYUFBYSxHQUFHLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FDeEQsWUFBWSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLGFBQWEsQ0FDMUQsQ0FBQztZQUVGLE1BQU07UUFFUixLQUFLLGlCQUFpQjtZQUVwQixJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxJQUFJLENBQUMsUUFBUSxLQUFLLHlCQUFnQixDQUFDLE1BQU0sSUFBSSxRQUFRLEtBQUsseUJBQWdCLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBRXpHLGdCQUFnQixHQUFHLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQ25ELGVBQWUsRUFDZixVQUFVLE9BQU8sRUFBRSxFQUNuQixZQUFZLEVBQ1osS0FBSyxFQUNMLGFBQWEsQ0FDZCxDQUFDO2FBRUg7WUFFRCxhQUFhLEdBQUcsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUN2RCxZQUFZLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsYUFBYSxDQUMxRCxDQUFDO1lBRUYsTUFBTTtRQUdSO1lBRUUsT0FBTyxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFFbkQsTUFBTTtLQUNUO0lBRUQ7O09BRUc7SUFDSCxJQUFJLENBQUMsYUFBYSxFQUFFO1FBRWxCLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7S0FFdkU7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLFlBQVksRUFBRSxxQkFBcUIsQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FFN0Q7UUFDRSxRQUFRLEtBQUsseUJBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO1FBRXZGLGdCQUFnQixhQUFoQixnQkFBZ0IsdUJBQWhCLGdCQUFnQixDQUFFLE1BQU0sRUFBRTtLQUUzQixDQUVGLENBQUE7SUFFRDs7OztPQUlHO0lBQ0gsT0FBTztRQUVMLGFBQWEsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLE1BQU0sWUFBWSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztRQUV0RixnQkFBZ0IsRUFBRSxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBRTdHLFdBQVcsRUFBRSxNQUFNLENBQUEsZ0JBQWdCLGFBQWhCLGdCQUFnQix1QkFBaEIsZ0JBQWdCLENBQUUsV0FBVyxFQUFFLENBQUEsSUFBSSxFQUFFO0tBQ3pELENBQUM7QUFFSixDQUFDO0FBSUQsU0FBUyxTQUFTLENBQUMsWUFBc0IsRUFBRSxNQUFvQjtJQUU3RCxNQUFNLE1BQU0sR0FBbUIsRUFBRSxDQUFBO0lBRWpDLEtBQUssTUFBTSxJQUFJLElBQUksWUFBWSxFQUFFO1FBRS9CLE1BQU0sZ0JBQWdCLEdBQVEsSUFBQSxtQ0FBc0IsRUFBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBRXBFLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtLQUU5QjtJQUVELE9BQU8sTUFBTSxDQUFBO0FBRWYsQ0FBQztBQU1ELFNBQVMsc0JBQXNCLENBQUMsS0FBVSxFQUFFLFdBQWdCO0lBRTFELE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUE7SUFFaEQsS0FBSSxNQUFNLGFBQWEsSUFBSSxlQUFlLEVBQUM7UUFFekMsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBRTdDLElBQUcsSUFBQSw0QkFBZSxFQUFDLFVBQVUsQ0FBQztZQUFFLFNBQVE7UUFFeEMsSUFBRyx3QkFBd0IsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1lBQUUsU0FBUTtRQUV0RCxJQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBQztZQUV6RixPQUFPLFVBQVUsQ0FBQTtTQUVsQjtLQUVGO0lBRUQsT0FBTyxLQUFLLENBQUE7QUFFZCxDQUFDO0FBR0QsU0FBUyx3QkFBd0IsQ0FBQyxNQUFjO0lBRzlDLE9BQU8sQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUcvRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IElSZW5hbWVSZXN1bHQsIGxvYWRBbGwgfSBmcm9tIFwiLi9sb2FkZXJcIjtcbmltcG9ydCAqIGFzIGNoYXJ0cyBmcm9tIFwiLi9jaGFydHNcIlxuaW1wb3J0IERlYnVnIGZyb20gXCJkZWJ1Z1wiO1xuaW1wb3J0IHsgQmFzZUNoYXJ0IH0gZnJvbSBcIi4vY2hhcnRzL2Jhc2VcIjtcbmltcG9ydCB7IEFwaU9iamVjdCwgQXBwLCBZYW1sT3V0cHV0VHlwZSB9IGZyb20gXCJjZGs4c1wiO1xuaW1wb3J0IHsgR2xvYmFsU2VjdGlvbiB9IGZyb20gXCIuL2dsb2JhbHMvYmFzZVwiO1xuaW1wb3J0IHsgZ2VuZXJhdGVGZWF0dXJlc1BhdGNoZXMgfSBmcm9tIFwiLi9jaGFydHMvZ2l0aHViL2ZlYXR1cmVSZW5kZXJlclwiO1xuaW1wb3J0IHsgT3ZlcnJpZGVyUGF0Y2hlcyB9IGZyb20gXCIuL292ZXJyaWRlcnMvYmFzZVwiO1xuaW1wb3J0IHsgSUN1c3RvbVJlc291cmNlUGF0Y2ggfSBmcm9tIFwiLi9wYXRjaGVzXCI7XG5pbXBvcnQgeyBpc0NhdGFsb2dFbnRpdHksIHZhbGlkYXRlUmVmZXJlbnRpYWxJbnRlZ3JpdHksIHZhbGlkYXRlVGZTdGF0ZUtleVVuaXF1ZW5lc3MgfSBmcm9tIFwiLi92YWxpZGF0aW9ucy9yZWZlcmVuY2VzXCI7XG5pbXBvcnQgeyAgc2V0UmVuZGVyZWRDbGFpbSB9IGZyb20gXCIuL3JlZnJlc29sdmVyXCI7XG5pbXBvcnQgeyBBbGxvd2VkUHJvdmlkZXJzLCBnZXRDb25maWd1cmVkUHJvdmlkZXIgfSBmcm9tIFwiLi9jb25maWdcIjtcbmltcG9ydCB7IE5vcm1hbGl6ZXIgfSBmcm9tIFwiLi9ub3JtYWxpemVycy9iYXNlXCI7XG5pbXBvcnQgeyBzb3J0UmVuZGVyQ2xhaW1zQnlLaW5kIH0gZnJvbSBcIi4vcmVmc1NvcnRlci9yZWZzU29ydGVyXCI7XG5pbXBvcnQgeyBjcmF3bCB9IGZyb20gXCIuL2NyYXdsZXJcIjtcbmltcG9ydCBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgY29tbW9uIGZyb20gXCJjYXRhbG9nX2NvbW1vblwiO1xuaW1wb3J0IGdpdGh1YiBmcm9tIFwiZ2l0aHViXCI7XG5jb25zdCBDTEFJTV9SRUZfQU5OT1RBVElPTiA9IFwiZmlyZXN0YXJ0ci5kZXYvY2xhaW0tcmVmXCJcblxuXG5jb25zdCBsb2cgPSBEZWJ1ZyhcImZpcmVzdGFydHI6cmVuZGVyZXJcIilcblxuZXhwb3J0IHR5cGUgUmVuZGVyQ2xhaW1EYXRhID0ge1xuXG4gIGNsYWltOiBhbnlcblxuICBjbGFpbVBhdGg/OiBzdHJpbmdcblxuICBpbml0aWFsaXplcnM6IGFueSBbXVxuXG4gIG92ZXJyaWRlczogT3ZlcnJpZGVyUGF0Y2hlc1tdXG5cbiAgZ2xvYmFsczogR2xvYmFsU2VjdGlvbltdLFxuXG4gIG5vcm1hbGl6ZXJzOiBOb3JtYWxpemVyW11cblxufVxuXG50eXBlIENsYWltS2luZCA9IHN0cmluZztcbnR5cGUgQ2xhaW1OYW1lID0gc3RyaW5nO1xuZXhwb3J0IHR5cGUgUmVuZGVyQ2xhaW1LZXkgPSBgJHtDbGFpbUtpbmR9LSR7Q2xhaW1OYW1lfWBcblxudHlwZSBDUktpbmQgPSBzdHJpbmc7XG50eXBlIENSTmFtZSA9IHN0cmluZztcbnR5cGUgUmVuZGVyQ1JLZXkgPSBgJHtDUktpbmR9LSR7Q1JOYW1lfWBcblxuZXhwb3J0IHR5cGUgUmVuZGVyZWRDck1hcCA9IHtcblxuICBba2V5OiBSZW5kZXJDUktleV06IEFwaU9iamVjdFxufVxuXG5leHBvcnQgdHlwZSBSZW5kZXJDbGFpbXMgPSB7XG5cbiAgW2tleTogUmVuZGVyQ2xhaW1LZXldOiBSZW5kZXJDbGFpbURhdGFcblxufVxuXG4vKlxuICogRnVuY3Rpb24gY2FsbGVkIHdoZW4gcmVuZGVyaW5nIGZyb20gdGhlIGltcG9ydGVyIGNsYXNzLlxuICpcbiAqIElucHV0OlxuICogLSByZW5kZXJDbGFpbXM6IGEgUmVuZGVyQ2xhaW1zIG9iamVjdCwgd2hpY2ggY29udGFpbnMgdGhlIGxpc3Qgb2YgY2xhaW1zXG4gKiAgIHdlIHdhbnQgdG8gcmVuZGVyXG4gKlxuICogUmV0dXJuOlxuICogLSBUaGUgcmVzdWx0IG9mIHJlbmRlcmluZyB0aGUgcmVuZGVyQ2xhaW1zIG9iamVjdCwgcGx1cyB0aGVcbiAqICAgcmVuZGVyZWQgZmlyZXN0YXJ0ci1hbGwgZ3JvdXBcbiAqXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZW5kZXJGcm9tSW1wb3J0cyhcblxuICByZW5kZXJDbGFpbXM6IFJlbmRlckNsYWltcyxcblxuICBjcnM6IGFueSA9IHt9LFxuXG4gIGNhdGFsb2dPdXRwdXREaXI6IHN0cmluZyA9IFwiL3RtcC8uY2F0YWxvZ1wiLFxuXG4gIGNyT3V0cHV0RGlyOiBzdHJpbmcgPSBcIi90bXAvLnJlc291cmNlc1wiLFxuXG4pIHtcblxuICBjb25zdCBjYXRhbG9nU2NvcGUgPSBuZXcgQXBwKHtcblxuICAgIG91dGRpcjogY2F0YWxvZ091dHB1dERpcixcblxuICAgIG91dHB1dEZpbGVFeHRlbnNpb246IFwiLnlhbWxcIixcblxuICAgIHlhbWxPdXRwdXRUeXBlOiBZYW1sT3V0cHV0VHlwZS5GSUxFX1BFUl9SRVNPVVJDRSxcblxuICB9KVxuXG4gIGNvbnN0IGZpcmVzdGFydHJTY29wZSA9IG5ldyBBcHAoe1xuXG4gICAgb3V0ZGlyOiBjck91dHB1dERpcixcblxuICAgIG91dHB1dEZpbGVFeHRlbnNpb246IFwiLnlhbWxcIixcblxuICAgIHlhbWxPdXRwdXRUeXBlOiBZYW1sT3V0cHV0VHlwZS5GSUxFX1BFUl9SRVNPVVJDRSxcblxuICB9KVxuXG4gIGNvbnN0IHJlc3VsdDogYW55ID0gYXdhaXQgZlJlbmRlckNsYWltcyhcblxuICAgIGNhdGFsb2dTY29wZSxcblxuICAgIGZpcmVzdGFydHJTY29wZSxcblxuICAgIHtcbiAgICAgIHJlbmRlckNsYWltcyxcblxuICAgICAgY3JzLFxuXG4gICAgICByZW5hbWVzOiBbXVxuICAgIH0sXG4gIClcblxuICBmaXJlc3RhcnRyU2NvcGUuc3ludGgoKVxuXG4gIHJldHVybiByZXN1bHRcblxufVxuXG5cbi8qXG4gKiBGdW5jdGlvbiBjYWxsZWQgd2hlbiByZW5kZXJpbmcgYnV0IG5vdCBpbXBvcnRpbmdcbiAqXG4gKiBJbnB1dDpcbiAqIC0gc2NvcGU6IGFuIG9iamVjdCwgdXNlZCB0byByZXByZXNlbnQgQ0RLVEYncyBleGVjdXRpb24gc2NvcGVcbiAqXG4gKiBSZXR1cm46XG4gKiAtIFRoZSByZXN1bHQgb2YgcmVuZGVyaW5nIHRoZSByZW5kZXJDbGFpbXMgb2JqZWN0LCBwbHVzIHRoZVxuICogICByZW5kZXJlZCBmaXJlc3RhcnRyLWFsbCBncm91cFxuICpcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlcihcblxuICBjYXRhbG9nU2NvcGU6IENvbnN0cnVjdCxcblxuICBmaXJlc3RhcnRyU2NvcGU6IENvbnN0cnVjdCxcblxuICApOiBQcm9taXNlPFJlbmRlcmVkQ3JNYXA+IHtcblxuICBjb25zdCBkYXRhOiB7XG5cbiAgICByZW5kZXJDbGFpbXM6IFJlbmRlckNsYWltcyxcblxuICAgIGNyczogYW55LFxuXG4gICAgcmVuYW1lcz86IElSZW5hbWVSZXN1bHRbXVxuXG4gIH0gPSBhd2FpdCBsb2FkQWxsKClcblxuICBjb25zdCByZXN1bHQ6IGFueSA9IGF3YWl0IGZSZW5kZXJDbGFpbXMoY2F0YWxvZ1Njb3BlLCBmaXJlc3RhcnRyU2NvcGUsIGRhdGEpXG5cbiAgdmFsaWRhdGVSZWZlcmVudGlhbEludGVncml0eShyZXN1bHQpXG5cbiAgdmFsaWRhdGVUZlN0YXRlS2V5VW5pcXVlbmVzcyhyZXN1bHQpXG5cbiAgcmV0dXJuIHJlc3VsdFxuXG59XG5cbi8qXG4gKiBGdW5jdGlvbiBjYWxsZWQgd2hlbiByZW5kZXJpbmcgVGVycmFmb3JtIHdvcmtzcGFjZXMgUGxhbnNcbiAqIGJhc2VkIG9uIHRoZSBwcmV2aW91cyByZW5kZXJlciBUZXJyYWZvcm0gd29ya3NwYWNlc1xuKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZW5kZXJXb3Jrc3BhY2VQbGFucyhzb3VyY2U6IHN0cmluZywgZGVzdGlueTogc3RyaW5nLCBwckxpbms6IHN0cmluZywgc2hhOiBzdHJpbmcsIGdoQ2xpOiBhbnkgPSBnaXRodWIpIHtcblxuICBjb25zdCBbb3JnUmVwbywgcHJOdW1iZXJdID0gcHJMaW5rLnNwbGl0KFwiI1wiKVxuXG4gIGNvbnN0IFsgb3JnLCByZXBvIF0gPSBvcmdSZXBvLnNwbGl0KFwiL1wiKVxuXG4gIGNvbnN0IHsgZGF0YTogZmlsZXMgfSA9IGF3YWl0IGdoQ2xpLnB1bGxzLmdldFByRmlsZXMoXG4gICAgcGFyc2VJbnQocHJOdW1iZXIpLFxuICAgIHJlcG8sXG4gICAgb3JnXG4gIClcblxuICBpZihmaWxlcyAmJiBmaWxlcy5sZW5ndGggPiAwICYmIGZpbGVzWzBdLnN0YXR1cyA9PSBcInJlbW92ZWRcIil7XG5cbiAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgZ2hDbGkucmVwby5nZXRDb250ZW50KFxuICAgIFxuICAgICAgZmlsZXNbMF0uZmlsZW5hbWUsXG4gICAgXG4gICAgICByZXBvLFxuICAgIFxuICAgICAgb3JnLFxuICAgIFxuICAgIClcblxuICAgIGNvbnN0IHdvcmtzcGFjZTogYW55ID0gY29tbW9uLmlvLmZyb21ZYW1sKGNvbnRlbnQpXG5cbiAgICB3b3Jrc3BhY2Uua2luZCA9IFwiRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5cIlxuICAgIFxuICAgIHdvcmtzcGFjZS5tZXRhZGF0YS5hbm5vdGF0aW9ucyA9IHtcbiAgICBcbiAgICAgIC4uLndvcmtzcGFjZS5tZXRhZGF0YS5hbm5vdGF0aW9ucyxcbiAgICAgIFxuICAgICAgW2NvbW1vbi5nZW5lcmljLmdldEZpcmVzdGFydHJBbm5vdGF0aW9uKFwicHVsbC1yZXF1ZXN0LXBsYW5cIildOiBwckxpbmssXG4gICAgICBcbiAgICAgIFtjb21tb24uZ2VuZXJpYy5nZXRGaXJlc3RhcnRyQW5ub3RhdGlvbihcInBsYW4tc2hhXCIpXTogc2hhLFxuICAgIFxuICAgIH1cbiAgICBcbiAgICB3b3Jrc3BhY2UubWV0YWRhdGEuYW5ub3RhdGlvbnNbXG4gICAgXG4gICAgICBjb21tb24uZ2VuZXJpYy5nZXRGaXJlc3RhcnRyQW5ub3RhdGlvbihcInBvbGljeVwiKVxuICAgIFxuICAgIF0gPSBcImRlc3Ryb3lcIlxuXG4gICAgY29uc3Qgd29ya3NwYWNlUGxhbiA9IGNvbW1vbi5pby50b1lhbWwoXG4gICAgXG4gICAgICB7Li4ud29ya3NwYWNlfSwgXG4gICAgXG4gICAgICB7IHF1b3RpbmdUeXBlOiAnXCInLCBsaW5lV2lkdGg6IC0xIH1cbiAgICBcbiAgICApXG4gICAgXG4gICAgY29uc3QgZmlsZU5hbWUgPSBwYXRoLmpvaW4oZGVzdGlueSwgcGF0aC5iYXNlbmFtZShmaWxlc1swXS5maWxlbmFtZSkpXG4gICAgXG4gICAgZnMud3JpdGVGaWxlU3luYyhmaWxlTmFtZSwgd29ya3NwYWNlUGxhbilcbiAgICBcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIEl0ZXJhdGUgb3ZlciB0aGUgc291cmNlIGZvbGRlciBhbmQgZ2V0IHRoZSBsaXN0IG9mIFRlcnJhZm9ybSB3b3Jrc3BhY2VzXG4gIGF3YWl0IGNyYXdsKHNvdXJjZSwgKCkgPT4gdHJ1ZSwgKGVudHJ5OiBzdHJpbmcsIGRhdGE6IGFueSkgPT4ge1xuXG4gICAgY29uc3QgZmlsZU5hbWUgPSBwYXRoLmpvaW4oZGVzdGlueSwgcGF0aC5iYXNlbmFtZShlbnRyeSkpXG5cbiAgICBjb25zdCB3b3Jrc3BhY2U6IGFueSA9IGNvbW1vbi5pby5mcm9tWWFtbChkYXRhKVxuXG4gICAgd29ya3NwYWNlLmtpbmQgPSBcIkZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuXCJcbiAgICB3b3Jrc3BhY2UubWV0YWRhdGEuYW5ub3RhdGlvbnMgPSB7XG4gICAgICAuLi53b3Jrc3BhY2UubWV0YWRhdGEuYW5ub3RhdGlvbnMsXG4gICAgICBbY29tbW9uLmdlbmVyaWMuZ2V0RmlyZXN0YXJ0ckFubm90YXRpb24oXCJwdWxsLXJlcXVlc3QtcGxhblwiKV06IHByTGluayxcbiAgICAgIFtjb21tb24uZ2VuZXJpYy5nZXRGaXJlc3RhcnRyQW5ub3RhdGlvbihcInBsYW4tc2hhXCIpXTogc2hhXG4gICAgfVxuICAgIFxuICAgIGNvbnN0IHdvcmtzcGFjZVBsYW4gPSBjb21tb24uaW8udG9ZYW1sKHtcbiAgICAgIC4uLndvcmtzcGFjZVxuICAgIH0sIHsgcXVvdGluZ1R5cGU6ICdcIicsIGxpbmVXaWR0aDogLTEgfSlcblxuICAgIGZzLndyaXRlRmlsZVN5bmMoZmlsZU5hbWUsIHdvcmtzcGFjZVBsYW4pXG5cbiAgfSlcblxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWRkTGFzdFN0YXRlQW5kTGFzdENsYWltQW5ub3RhdGlvbnMoXG4gIGZpbGVQYXRoOiBzdHJpbmcsIGxhc3RTdGF0ZVBSTGluazogc3RyaW5nLCBsYXN0Q2xhaW1QUkxpbms6IHN0cmluZ1xuKSB7XG5cbiAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBzb3VyY2UgZm9sZGVyIGFuZCBnZXQgdGhlIGxpc3Qgb2YgVGVycmFmb3JtIHdvcmtzcGFjZXNcblxuICBjb25zdCB3b3Jrc3BhY2U6IGFueSA9IGNvbW1vbi5pby5mcm9tWWFtbChmcy5yZWFkRmlsZVN5bmMoZmlsZVBhdGgsIFwidXRmLThcIikpO1xuXG4gIGNvbnN0IHN0YXRlTGlua0FzQXJyYXk6IHN0cmluZ1tdID0gbGFzdFN0YXRlUFJMaW5rLnNwbGl0KFwiL1wiKTtcbiAgY29uc3Qgc3RhdGVBbm5vdGF0aW9uVmFsdWU6IHN0cmluZyA9IGAke3N0YXRlTGlua0FzQXJyYXlbM119LyR7c3RhdGVMaW5rQXNBcnJheVs0XX0jJHtzdGF0ZUxpbmtBc0FycmF5WzZdfWBcblxuICBjb25zdCBjbGFpbUxpbmtBc0FycmF5OiBzdHJpbmdbXSA9IGxhc3RDbGFpbVBSTGluay5zcGxpdChcIi9cIik7XG4gIGNvbnN0IGNsYWltQW5ub3RhdGlvblZhbHVlOiBzdHJpbmcgPSBgJHtjbGFpbUxpbmtBc0FycmF5WzNdfS8ke2NsYWltTGlua0FzQXJyYXlbNF19IyR7Y2xhaW1MaW5rQXNBcnJheVs2XX1gXG5cbiAgd29ya3NwYWNlLm1ldGFkYXRhLmFubm90YXRpb25zID0ge1xuICAgIC4uLndvcmtzcGFjZS5tZXRhZGF0YS5hbm5vdGF0aW9ucyxcbiAgICBbY29tbW9uLmdlbmVyaWMuZ2V0RmlyZXN0YXJ0ckFubm90YXRpb24oXCJsYXN0LXN0YXRlLXByXCIpXTogc3RhdGVBbm5vdGF0aW9uVmFsdWUsXG4gICAgW2NvbW1vbi5nZW5lcmljLmdldEZpcmVzdGFydHJBbm5vdGF0aW9uKFwibGFzdC1jbGFpbS1wclwiKV06IGNsYWltQW5ub3RhdGlvblZhbHVlXG4gIH1cblxuICBmcy53cml0ZUZpbGVTeW5jKGZpbGVQYXRoLCBjb21tb24uaW8udG9ZYW1sKFxuICAgIHsgLi4ud29ya3NwYWNlIH0sIHsgcXVvdGluZ1R5cGU6ICdcIicsIGxpbmVXaWR0aDogLTEgfVxuICApKVxuXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZSZW5kZXJDbGFpbXMoXG5cbiAgY2F0YWxvZ1Njb3BlOiBDb25zdHJ1Y3QsXG5cbiAgZmlyZXN0YXJ0clNjb3BlOiBDb25zdHJ1Y3QsXG5cbiAgZGF0YToge1xuXG4gICAgcmVuZGVyQ2xhaW1zOiBSZW5kZXJDbGFpbXMsXG5cbiAgICBjcnM6IGFueSxcblxuICAgIHJlbmFtZXM/OiBJUmVuYW1lUmVzdWx0W11cblxuICB9LFxuXG4pOiBQcm9taXNlPFJlbmRlcmVkQ3JNYXA+IHtcblxuICBjb25zdCByZXN1bHQ6IFJlbmRlcmVkQ3JNYXAgPSB7fVxuXG4gIGNvbnN0IHsgcmVuZGVyQ2xhaW1zLCBjcnMgfSA9IGRhdGFcblxuICBjb25zdCBzb3J0ZWRLaW5kcyA9IHNvcnRLaW5kcyhbXCJVc2VyQ2xhaW1cIiwgXCJHcm91cENsYWltXCIsIFwiQ29tcG9uZW50Q2xhaW1cIiwgXCJEb21haW5DbGFpbVwiLCBcIlN5c3RlbUNsYWltXCIsIFwiVEZXb3Jrc3BhY2VDbGFpbVwiLCBcIkFyZ29EZXBsb3lDbGFpbVwiXSwgcmVuZGVyQ2xhaW1zKVxuXG4gIGZvciAoY29uc3QgcmVuZGVyQ2xhaW1zIG9mIHNvcnRlZEtpbmRzKSB7XG5cbiAgICBmb3IgKGNvbnN0IGNsYWltS2V5IG9mIE9iamVjdC5rZXlzKHJlbmRlckNsYWltcykpIHtcblxuICAgICAgY29uc3QgY2xhaW0gPSByZW5kZXJDbGFpbXNbY2xhaW1LZXkgYXMgUmVuZGVyQ2xhaW1LZXldLmNsYWltXG5cbiAgICAgIGNvbnN0IGNvbmZpZ3VyZWRQcm92aWRlciA9IGdldENvbmZpZ3VyZWRQcm92aWRlcigpLnRvU3RyaW5nKClcblxuICAgICAgbGV0IHByb3ZpZGVycyA9IE9iamVjdC5rZXlzKGNsYWltLnByb3ZpZGVycylcblxuICAgICAgaWYoY29uZmlndXJlZFByb3ZpZGVyICE9IEFsbG93ZWRQcm92aWRlcnMuYWxsLnRvU3RyaW5nKCkpe1xuXG4gICAgICAgIHByb3ZpZGVycyA9IHByb3ZpZGVycy5maWx0ZXIoXG5cbiAgICAgICAgICAocHJvdmlkZXI6IHN0cmluZykgPT4gcHJvdmlkZXIgPT09IGNvbmZpZ3VyZWRQcm92aWRlclxuXG4gICAgICAgIClcblxuICAgICAgfVxuXG5cbiAgICAgIGNvbnN0IHByZXZpb3VzQ1IgPSBnZXRQcmV2aW91c0NSZnJvbUNsYWltKGNsYWltLCBjcnMpXG5cbiAgICAgIGNvbnN0IHBhdGNoZXMgPSBhd2FpdCBleHRyYWN0UGF0Y2hlcyhyZW5kZXJDbGFpbXNbY2xhaW1LZXkgYXMgUmVuZGVyQ2xhaW1LZXldLCBwcmV2aW91c0NSKVxuXG4gICAgICBpZiAoIXByZXZpb3VzQ1IpIHtcblxuICAgICAgICBsb2coYE5vIENSIGZvdW5kIGZvciBjbGFpbSAke2NsYWltS2V5fSwgaXQgd2lsbCBiZSByZW5kZXJlZCBmcm9tIHNjcmF0Y2hgKVxuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHtmaXJlc3RhcnRyRW50aXR5LCBleHRyYUNoYXJ0cywgY2F0YWxvZ0VudGl0eX0gID0gYXdhaXQgcmVuZGVyQ2xhaW0oXG5cbiAgICAgICAgY2F0YWxvZ1Njb3BlLFxuXG4gICAgICAgIGZpcmVzdGFydHJTY29wZSxcblxuICAgICAgICBjbGFpbSxcblxuICAgICAgICBwYXRjaGVzLFxuXG4gICAgICAgIHByZXZpb3VzQ1IsXG5cbiAgICAgIClcblxuICAgICAgaWYoY2F0YWxvZ0VudGl0eSkge1xuXG4gICAgICAgIHJlc3VsdFtgJHtjYXRhbG9nRW50aXR5LmtpbmR9LSR7Y2F0YWxvZ0VudGl0eS5tZXRhZGF0YS5uYW1lfWBdID0gY2F0YWxvZ0VudGl0eS50b0pzb24oKVxuICAgICAgXG4gICAgICB9XG5cbiAgICAgIC8qKlxuXG4gICAgICAqIElmIHRoZXJlIGlzIG5vIHByb3ZpZGVyIGRvbid0IHN0b3JlIHRoZSBDUiBpbiB0aGUgbWFwXG5cbiAgICAgICovXG5cbiAgICAgIGlmICghZmlyZXN0YXJ0ckVudGl0eSkgY29udGludWU7XG5cbiAgICAgIGNvbnN0IGZpcmVzdGFydHJFbnRpdHlKc29uID0gZmlyZXN0YXJ0ckVudGl0eS50b0pzb24oKVxuXG4gICAgICBzZXRSZW5kZXJlZENsYWltKGNsYWltLCBmaXJlc3RhcnRyRW50aXR5SnNvbilcblxuICAgICAgZm9yKGNvbnN0IGV4dHJhQ2hhcnQgb2YgZXh0cmFDaGFydHMpe1xuXG4gICAgICAgIGNvbnN0IHtjbGFpbSwgY2hhcnR9ID0gZXh0cmFDaGFydFxuXG4gICAgICAgIHNldFJlbmRlcmVkQ2xhaW0oY2xhaW0sIGNoYXJ0LnRvSnNvbigpKVxuXG4gICAgICAgIHJlc3VsdFtgJHtjaGFydC5raW5kfS0ke2NoYXJ0Lm1ldGFkYXRhLm5hbWV9YF0gPSBjaGFydC50b0pzb24oKVxuXG4gICAgICB9XG5cbiAgICAgIGlmKCFmaXJlc3RhcnRyRW50aXR5SnNvbi5tZXRhZGF0YS5hbm5vdGF0aW9ucyB8fCAhZmlyZXN0YXJ0ckVudGl0eUpzb24ubWV0YWRhdGEubmFtZSkgdGhyb3cgZmlyZXN0YXJ0ckVudGl0eUpzb25cblxuICAgICAgcmVzdWx0W2Ake2ZpcmVzdGFydHJFbnRpdHkua2luZH0tJHtmaXJlc3RhcnRyRW50aXR5SnNvbi5tZXRhZGF0YS5uYW1lfWBdID0gZmlyZXN0YXJ0ckVudGl0eUpzb25cblxuICAgIH1cblxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdFxuXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGV4dHJhY3RQYXRjaGVzKFxuXG4gIGNsYWltVG9SZW5kZXJEYXRhOiBSZW5kZXJDbGFpbURhdGEsIHByZXZpb3VzQ1I6IGFueVxuXG4pOiBQcm9taXNlPElDdXN0b21SZXNvdXJjZVBhdGNoW10+IHtcblxuICBsZXQgdG90YWxQYXRjaGVzOiBJQ3VzdG9tUmVzb3VyY2VQYXRjaFtdID0gW11cblxuXG4gIGZvciAoY29uc3Qgbm9ybWFsaXplciBvZiBjbGFpbVRvUmVuZGVyRGF0YS5ub3JtYWxpemVycykge1xuXG4gICAgY29uc3QgcGF0Y2hlcyA9IGF3YWl0IG5vcm1hbGl6ZXIucGF0Y2hlcyhjbGFpbVRvUmVuZGVyRGF0YVtcImNsYWltXCJdLCBwcmV2aW91c0NSKVxuXG4gICAgdG90YWxQYXRjaGVzID0gdG90YWxQYXRjaGVzLmNvbmNhdChwYXRjaGVzKS5mbGF0KClcblxuICB9XG5cbiAgZm9yIChjb25zdCBpbml0aWFsaXplciBvZiBjbGFpbVRvUmVuZGVyRGF0YS5pbml0aWFsaXplcnMpIHtcblxuICAgIGNvbnN0IHBhdGNoZXMgPSBhd2FpdCBpbml0aWFsaXplci5wYXRjaGVzKGNsYWltVG9SZW5kZXJEYXRhW1wiY2xhaW1cIl0sIHByZXZpb3VzQ1IpXG5cbiAgICB0b3RhbFBhdGNoZXMgPSB0b3RhbFBhdGNoZXMuY29uY2F0KHBhdGNoZXMpLmZsYXQoKVxuXG4gIH1cblxuICBmb3IgKGNvbnN0IG92ZXJyaWRlciBvZiBjbGFpbVRvUmVuZGVyRGF0YS5vdmVycmlkZXMpIHtcblxuICAgIGNvbnN0IHBhdGNoZXMgPSBhd2FpdCBvdmVycmlkZXIucGF0Y2hlcyhjbGFpbVRvUmVuZGVyRGF0YVtcImNsYWltXCJdLCBwcmV2aW91c0NSKVxuXG4gICAgdG90YWxQYXRjaGVzID0gdG90YWxQYXRjaGVzLmNvbmNhdChwYXRjaGVzKS5mbGF0KClcblxuICB9XG5cblxuICBpZiAoY2xhaW1Ub1JlbmRlckRhdGEuY2xhaW0ua2luZCA9PT0gXCJDb21wb25lbnRDbGFpbVwiKSB7XG5cbiAgICB0b3RhbFBhdGNoZXMgPSB0b3RhbFBhdGNoZXMuY29uY2F0KChhd2FpdCBnZW5lcmF0ZUZlYXR1cmVzUGF0Y2hlcyhjbGFpbVRvUmVuZGVyRGF0YS5jbGFpbSkpKS5mbGF0KClcblxuICB9XG5cblxuICBmb3IgKGNvbnN0IGdsb2JhbCBvZiBjbGFpbVRvUmVuZGVyRGF0YS5nbG9iYWxzKSB7XG5cbiAgICBjb25zdCBwYXRjaGVzID0gYXdhaXQgZ2xvYmFsLnBhdGNoZXMoY2xhaW1Ub1JlbmRlckRhdGEuY2xhaW0sIHByZXZpb3VzQ1IpXG5cbiAgICB0b3RhbFBhdGNoZXMgPSB0b3RhbFBhdGNoZXMuY29uY2F0KHBhdGNoZXMpLmZsYXQoKVxuXG4gIH1cblxuICByZXR1cm4gdG90YWxQYXRjaGVzXG5cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUmVuZGVyQ2xhaW1SZXN1bHQge1xuICBjYXRhbG9nRW50aXR5PzogQXBpT2JqZWN0O1xuICBmaXJlc3RhcnRyRW50aXR5PzogQXBpT2JqZWN0O1xuICBleHRyYUNoYXJ0czogeyBjbGFpbToge2tpbmQ6IHN0cmluZywgbmFtZTogc3RyaW5nfSwgY2hhcnQ6IEFwaU9iamVjdH1bXTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVuZGVyQ2xhaW0oXG5cbiAgY2F0YWxvZ1Njb3BlOiBDb25zdHJ1Y3QsXG5cbiAgZmlyZXN0YXJ0clNjb3BlOiBDb25zdHJ1Y3QsXG5cbiAgY2xhaW06IGFueSxcblxuICBwYXRjaGVzOiBJQ3VzdG9tUmVzb3VyY2VQYXRjaFtdLFxuXG4gIHByZXZpb3VzQ1I6IGFueSB8IG51bGwgPSBudWxsXG5cbiAgKTogUHJvbWlzZTxJUmVuZGVyQ2xhaW1SZXN1bHQ+IHtcblxuICBsZXQgY2F0YWxvZ0VudGl0eTogQmFzZUNoYXJ0IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICBsZXQgZmlyZXN0YXJ0ckVudGl0eTogQmFzZUNoYXJ0IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IGNoYXJ0SWQgPSBgJHtjbGFpbS5raW5kfS0ke2NsYWltLm5hbWV9YC50b0xvd2VyQ2FzZSgpO1xuXG4gIGxldCBmaXJlc3RhcnRySWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIGlmIChwcmV2aW91c0NSKSB7XG5cbiAgICBmaXJlc3RhcnRySWQgPSBwcmV2aW91c0NSPy5zcGVjPy5maXJlc3RhcnRyPy50ZlN0YXRlS2V5IHx8IG51bGw7XG5cbiAgfVxuXG4gIGNvbnN0IHJlbmRlclBhdGNoZXMgPSBwYXRjaGVzLmZpbHRlcigocGF0Y2g6IGFueSkgPT4gIXBhdGNoLmlzUG9zdFBhdGNoKVxuICBjb25zdCBwb3N0UGF0Y2hlcyA9IHBhdGNoZXMuZmlsdGVyKChwYXRjaDphbnkpID0+IHBhdGNoLmlzUG9zdFBhdGNoKVxuXG4gIGNvbnN0IHByb3ZpZGVyID0gZ2V0Q29uZmlndXJlZFByb3ZpZGVyKClcblxuICBzd2l0Y2ggKGNsYWltLmtpbmQpIHtcblxuICAgIGNhc2UgXCJEb21haW5DbGFpbVwiOlxuXG4gICAgICBjYXRhbG9nRW50aXR5ID0gbmV3IGNoYXJ0cy5kZWZhdWx0LkNhdGFsb2dEb21haW5DaGFydChcbiAgICAgICAgY2F0YWxvZ1Njb3BlLCBcbiAgICAgICAgYGNhdGFsb2ctJHtjaGFydElkfWAsIFxuICAgICAgICBmaXJlc3RhcnRySWQsIFxuICAgICAgICBjbGFpbSwgXG4gICAgICAgIHJlbmRlclBhdGNoZXNcbiAgICAgICk7XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcIlN5c3RlbUNsYWltXCI6XG5cbiAgICAgIGNhdGFsb2dFbnRpdHkgPSBuZXcgY2hhcnRzLmRlZmF1bHQuQ2F0YWxvZ1N5c3RlbUNoYXJ0KFxuICAgICAgICBjYXRhbG9nU2NvcGUsIFxuICAgICAgICBgY2F0YWxvZy0ke2NoYXJ0SWR9YCwgXG4gICAgICAgIGZpcmVzdGFydHJJZCwgXG4gICAgICAgIGNsYWltLCBcbiAgICAgICAgcmVuZGVyUGF0Y2hlc1xuICAgICAgKTtcblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiR3JvdXBDbGFpbVwiOlxuXG4gICAgICBjYXRhbG9nRW50aXR5ID0gbmV3IGNoYXJ0cy5kZWZhdWx0LkNhdGFsb2dHcm91cENoYXJ0KGNhdGFsb2dTY29wZSwgYGNhdGFsb2ctJHtjaGFydElkfWAsIGZpcmVzdGFydHJJZCwgY2xhaW0sIHJlbmRlclBhdGNoZXMpO1xuXG4gICAgICBpZiAoY2xhaW0ucHJvdmlkZXJzLmdpdGh1YiAmJiAocHJvdmlkZXIgPT09IEFsbG93ZWRQcm92aWRlcnMuZ2l0aHViIHx8IHByb3ZpZGVyID09PSBBbGxvd2VkUHJvdmlkZXJzLmFsbCkpIHtcblxuICAgICAgICBmaXJlc3RhcnRyRW50aXR5ID0gbmV3IGNoYXJ0cy5kZWZhdWx0LkdpdGh1Ykdyb3VwQ2hhcnQoXG4gICAgICAgICAgZmlyZXN0YXJ0clNjb3BlLFxuICAgICAgICAgIGBnaXRodWItJHtjaGFydElkfWAsXG4gICAgICAgICAgZmlyZXN0YXJ0cklkLFxuICAgICAgICAgIGNsYWltLFxuICAgICAgICAgIHJlbmRlclBhdGNoZXNcbiAgICAgICAgKTtcblxuICAgICAgfVxuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJVc2VyQ2xhaW1cIjpcblxuICAgICAgY2F0YWxvZ0VudGl0eSA9IG5ldyBjaGFydHMuZGVmYXVsdC5DYXRhbG9nVXNlckNoYXJ0KGNhdGFsb2dTY29wZSwgY2hhcnRJZCwgZmlyZXN0YXJ0cklkLCBjbGFpbSwgcmVuZGVyUGF0Y2hlcyk7XG5cbiAgICAgIGlmIChjbGFpbS5wcm92aWRlcnMuZ2l0aHViICYmIChwcm92aWRlciA9PT0gQWxsb3dlZFByb3ZpZGVycy5naXRodWIgfHwgcHJvdmlkZXIgPT09IEFsbG93ZWRQcm92aWRlcnMuYWxsKSkge1xuXG4gICAgICAgIGZpcmVzdGFydHJFbnRpdHkgPSBuZXcgY2hhcnRzLmRlZmF1bHQuR2l0aHViTWVtYmVyc2hpcENoYXJ0KFxuICAgICAgICAgIGZpcmVzdGFydHJTY29wZSxcbiAgICAgICAgICBgZ2l0aHViLSR7Y2hhcnRJZH1gLFxuICAgICAgICAgIGZpcmVzdGFydHJJZCxcbiAgICAgICAgICBjbGFpbSxcbiAgICAgICAgICByZW5kZXJQYXRjaGVzXG4gICAgICAgICk7XG5cbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiQ29tcG9uZW50Q2xhaW1cIjpcblxuICAgICAgaWYgKGNsYWltLnByb3ZpZGVycy5naXRodWIgJiYgKHByb3ZpZGVyID09PSBBbGxvd2VkUHJvdmlkZXJzLmdpdGh1YiB8fCBwcm92aWRlciA9PT0gQWxsb3dlZFByb3ZpZGVycy5hbGwpKSB7XG5cbiAgICAgICAgZmlyZXN0YXJ0ckVudGl0eSA9IG5ldyBjaGFydHMuZGVmYXVsdC5HaXRodWJSZXBvc2l0b3J5Q2hhcnQoXG4gICAgICAgICAgZmlyZXN0YXJ0clNjb3BlLFxuICAgICAgICAgIGBnaXRodWItJHtjaGFydElkfWAsXG4gICAgICAgICAgZmlyZXN0YXJ0cklkLFxuICAgICAgICAgIGNsYWltLFxuICAgICAgICAgIHJlbmRlclBhdGNoZXNcbiAgICAgICAgKTtcblxuICAgICAgfVxuICAgICAgY2F0YWxvZ0VudGl0eSA9IG5ldyBjaGFydHMuZGVmYXVsdC5DYXRhbG9nQ29tcG9uZW50Q2hhcnQoXG4gICAgICAgIGNhdGFsb2dTY29wZSwgY2hhcnRJZCwgZmlyZXN0YXJ0cklkLCBjbGFpbSwgcmVuZGVyUGF0Y2hlc1xuICAgICAgKTtcblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiVEZXb3Jrc3BhY2VDbGFpbVwiOlxuXG4gICAgICBpZiAoY2xhaW0ucHJvdmlkZXJzLnRlcnJhZm9ybSAmJiAocHJvdmlkZXIgPT09IEFsbG93ZWRQcm92aWRlcnMudGVycmFmb3JtIHx8IHByb3ZpZGVyID09PSBBbGxvd2VkUHJvdmlkZXJzLmFsbCkpIHtcblxuICAgICAgICBmaXJlc3RhcnRyRW50aXR5ID0gbmV3IGNoYXJ0cy5kZWZhdWx0LlRGV29ya3NwYWNlQ2hhcnQoXG4gICAgICAgICAgZmlyZXN0YXJ0clNjb3BlLCBcbiAgICAgICAgICBgdGVycmFmb3JtLSR7Y2hhcnRJZH1gLCBcbiAgICAgICAgICBmaXJlc3RhcnRySWQsXG4gICAgICAgICAgY2xhaW0sXG4gICAgICAgICAgcmVuZGVyUGF0Y2hlc1xuICAgICAgICApO1xuXG4gICAgICB9XG4gICAgICBjYXRhbG9nRW50aXR5ID0gbmV3IGNoYXJ0cy5kZWZhdWx0LkNhdGFsb2dURldvcmtzcGFjZUNoYXJ0KFxuICAgICAgICBjYXRhbG9nU2NvcGUsIGNoYXJ0SWQsIGZpcmVzdGFydHJJZCwgY2xhaW0sIHJlbmRlclBhdGNoZXNcbiAgICAgICk7XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcIkFyZ29EZXBsb3lDbGFpbVwiOlxuXG4gICAgICBpZiAoY2xhaW0ucHJvdmlkZXJzLmFyZ29jZCAmJiAocHJvdmlkZXIgPT09IEFsbG93ZWRQcm92aWRlcnMuYXJnb2NkIHx8IHByb3ZpZGVyID09PSBBbGxvd2VkUHJvdmlkZXJzLmFsbCkpIHtcblxuICAgICAgICBmaXJlc3RhcnRyRW50aXR5ID0gbmV3IGNoYXJ0cy5kZWZhdWx0LkFyZ29EZXBsb3lDaGFydChcbiAgICAgICAgICBmaXJlc3RhcnRyU2NvcGUsIFxuICAgICAgICAgIGBhcmdvY2QtJHtjaGFydElkfWAsIFxuICAgICAgICAgIGZpcmVzdGFydHJJZCxcbiAgICAgICAgICBjbGFpbSxcbiAgICAgICAgICByZW5kZXJQYXRjaGVzXG4gICAgICAgICk7XG5cbiAgICAgIH1cbiAgICAgIFxuICAgICAgY2F0YWxvZ0VudGl0eSA9IG5ldyBjaGFydHMuZGVmYXVsdC5DYXRhbG9nQXJnb0RlcGxveUNoYXJ0KFxuICAgICAgICBjYXRhbG9nU2NvcGUsIGNoYXJ0SWQsIGZpcmVzdGFydHJJZCwgY2xhaW0sIHJlbmRlclBhdGNoZXNcbiAgICAgICk7XG5cbiAgICAgIGJyZWFrO1xuXG5cbiAgICBkZWZhdWx0OlxuXG4gICAgICBjb25zb2xlLmVycm9yKGBVbmtub3duIGNsYWltIGtpbmQ6ICR7Y2xhaW0ua2luZH1gKTtcblxuICAgICAgYnJlYWs7XG4gIH1cblxuICAvKipcbiAgICogVGhlcmUgaXMgdGhlIHBvc3NpYmlsaXR5IHRvIG9ubHkgcmVuZGVyIHRoZSBjYXRhbG9nIGVudGl0eSwgYnV0IG5vdCB0aGUgb3RoZXIgd2F5IGFyb3VuZFxuICAgKi9cbiAgaWYgKCFjYXRhbG9nRW50aXR5KSB7XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byByZW5kZXIgY2xhaW0gJHtjbGFpbS5raW5kfS0ke2NsYWltLm5hbWV9YCk7XG5cbiAgfVxuXG4gIC8qXG4gICAqXG4gICAqIFJlbmRlciBwaGFzZVxuICAgKlxuICAgKi9cbiAgY29uc3QgW2NhdGFsb2dDaGFydCwgZmlyZXN0YXJ0ckVudGl0eUNoYXJ0XSA9IGF3YWl0IFByb21pc2UuYWxsKFxuXG4gICAgW1xuICAgICAgcHJvdmlkZXIgPT09IEFsbG93ZWRQcm92aWRlcnMuYWxsID8gY2F0YWxvZ0VudGl0eS5yZW5kZXIoKSA6IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpLFxuXG4gICAgICBmaXJlc3RhcnRyRW50aXR5Py5yZW5kZXIoKSxcblxuICAgIF1cblxuICApXG5cbiAgLypcbiAgICpcbiAgICogUG9zdCByZW5kZXIgcGhhc2UgKGFuZCByZXR1cm4pXG4gICAqXG4gICAqL1xuICByZXR1cm4ge1xuXG4gICAgY2F0YWxvZ0VudGl0eTogY2F0YWxvZ0NoYXJ0ID8gYXdhaXQgY2F0YWxvZ0NoYXJ0LnBvc3RSZW5kZXJlcihwb3N0UGF0Y2hlcykgOiB1bmRlZmluZWQsXG5cbiAgICBmaXJlc3RhcnRyRW50aXR5OiBhd2FpdCAoZmlyZXN0YXJ0ckVudGl0eUNoYXJ0ID8gZmlyZXN0YXJ0ckVudGl0eUNoYXJ0LnBvc3RSZW5kZXJlcihwb3N0UGF0Y2hlcykgOiB1bmRlZmluZWQpLFxuXG4gICAgZXh0cmFDaGFydHM6IGF3YWl0IGZpcmVzdGFydHJFbnRpdHk/LmV4dHJhQ2hhcnRzKCkgfHwgW11cbiAgfTtcblxufVxuXG5cblxuZnVuY3Rpb24gc29ydEtpbmRzKG9yZGVyZWRLaW5kczogc3RyaW5nW10sIGNsYWltczogUmVuZGVyQ2xhaW1zKSB7XG5cbiAgY29uc3QgcmVzdWx0OiBSZW5kZXJDbGFpbXNbXSA9IFtdXG5cbiAgZm9yIChjb25zdCBraW5kIG9mIG9yZGVyZWRLaW5kcykge1xuXG4gICAgY29uc3Qga2luZFJlbmRlckNsYWltczogYW55ID0gc29ydFJlbmRlckNsYWltc0J5S2luZChjbGFpbXMsIFtraW5kXSlcblxuICAgIHJlc3VsdC5wdXNoKGtpbmRSZW5kZXJDbGFpbXMpXG5cbiAgfVxuXG4gIHJldHVybiByZXN1bHRcblxufVxuXG5cblxuXG5cbmZ1bmN0aW9uIGdldFByZXZpb3VzQ1Jmcm9tQ2xhaW0oY2xhaW06IGFueSwgcHJldmlvdXNDUnM6IGFueSkge1xuXG4gIGNvbnN0IHByZXZpb3VzQ1JzS2V5cyA9IE9iamVjdC5rZXlzKHByZXZpb3VzQ1JzKVxuXG4gIGZvcihjb25zdCBwcmV2aW91c0NSS2V5IG9mIHByZXZpb3VzQ1JzS2V5cyl7XG5cbiAgICBjb25zdCBwcmV2aW91c0NSID0gcHJldmlvdXNDUnNbcHJldmlvdXNDUktleV1cblxuICAgIGlmKGlzQ2F0YWxvZ0VudGl0eShwcmV2aW91c0NSKSkgY29udGludWVcblxuICAgIGlmKGlzRXhjbHVkZWRGcm9tUHJldmlvdXNDUihwcmV2aW91c0NSLmtpbmQpKSBjb250aW51ZVxuXG4gICAgaWYocHJldmlvdXNDUi5tZXRhZGF0YS5hbm5vdGF0aW9uc1tDTEFJTV9SRUZfQU5OT1RBVElPTl0gPT09IGAke2NsYWltLmtpbmR9LyR7Y2xhaW0ubmFtZX1gKXtcblxuICAgICAgcmV0dXJuIHByZXZpb3VzQ1JcblxuICAgIH1cblxuICB9XG5cbiAgcmV0dXJuIGZhbHNlXG5cbn1cblxuXG5mdW5jdGlvbiBpc0V4Y2x1ZGVkRnJvbVByZXZpb3VzQ1IoY3JLaW5kOiBzdHJpbmcpe1xuXG5cbiAgcmV0dXJuIFtcIkZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVwiXS5pbmNsdWRlcyhjcktpbmQpXG5cblxufVxuIl19
|
|
235585
235605
|
|
|
235586
235606
|
/***/ }),
|
|
235587
235607
|
|
|
@@ -236064,7 +236084,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
236064
236084
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
236065
236085
|
};
|
|
236066
236086
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
236067
|
-
exports.isCatalogEntity = exports.validateReferentialIntegrity = void 0;
|
|
236087
|
+
exports.isCatalogEntity = exports.validateTfStateKeyUniqueness = exports.validateReferentialIntegrity = void 0;
|
|
236068
236088
|
const config_1 = __nccwpck_require__(56600);
|
|
236069
236089
|
const lodash_1 = __importDefault(__nccwpck_require__(78018));
|
|
236070
236090
|
const wellKnownStructures_1 = __nccwpck_require__(67482);
|
|
@@ -236112,6 +236132,35 @@ function validateReferentialIntegrity(crs) {
|
|
|
236112
236132
|
}
|
|
236113
236133
|
}
|
|
236114
236134
|
exports.validateReferentialIntegrity = validateReferentialIntegrity;
|
|
236135
|
+
function validateTfStateKeyUniqueness(crs) {
|
|
236136
|
+
const tfStateKeys = {};
|
|
236137
|
+
for (const crKey of Object.keys(crs)) {
|
|
236138
|
+
const cr = crs[crKey];
|
|
236139
|
+
if (!isTerraformWorkspace(cr))
|
|
236140
|
+
continue;
|
|
236141
|
+
const tfKey = cr.spec.firestartr.tfStateKey;
|
|
236142
|
+
if (tfStateKeys[tfKey]) {
|
|
236143
|
+
throw new Error(`ââ â RENDER ERROR â ââ
|
|
236144
|
+
|
|
236145
|
+
The tfStateKey ${tfKey} is not unique,
|
|
236146
|
+
|
|
236147
|
+
It is being used by the following CRs:
|
|
236148
|
+
|
|
236149
|
+
- ${tfStateKeys[tfKey].kind} ${tfStateKeys[tfKey].metadata.name}
|
|
236150
|
+
|
|
236151
|
+
- ${cr.kind} ${cr.metadata.name}
|
|
236152
|
+
|
|
236153
|
+
Check the following Claims to ensure that the tfStateKey is unique:
|
|
236154
|
+
|
|
236155
|
+
- ${tfStateKeys[tfKey].metadata.annotations["firestartr.dev/claim-ref"]}
|
|
236156
|
+
|
|
236157
|
+
- ${cr.metadata.annotations["firestartr.dev/claim-ref"]}
|
|
236158
|
+
`);
|
|
236159
|
+
}
|
|
236160
|
+
tfStateKeys[cr.spec.firestartr.tfStateKey] = cr;
|
|
236161
|
+
}
|
|
236162
|
+
}
|
|
236163
|
+
exports.validateTfStateKeyUniqueness = validateTfStateKeyUniqueness;
|
|
236115
236164
|
/**
|
|
236116
236165
|
* @description This function validates that all references in the CR are valid,
|
|
236117
236166
|
* it uses the wellknownRelations object to know which properties to validate
|
|
@@ -236216,7 +236265,10 @@ function isCatalogEntity(cr) {
|
|
|
236216
236265
|
].includes(cr.kind);
|
|
236217
236266
|
}
|
|
236218
236267
|
exports.isCatalogEntity = isCatalogEntity;
|
|
236219
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmZXJlbmNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92YWxpZGF0aW9ucy9yZWZlcmVuY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHNDQUFvRTtBQUNwRSxvREFBdUI7QUFDdkIsK0RBQXVEO0FBRXZEOzs7O0dBSUc7QUFDSCxNQUFNLG9CQUFvQixHQUFRO0lBQ2hDLHVCQUF1QixFQUFFLENBQUUsY0FBYyxDQUFFO0lBQzNDLDRCQUE0QixFQUFFLENBQUUsa0JBQWtCLENBQUU7SUFDcEQsNEJBQTRCLEVBQUUsRUFBRTtJQUNoQyw4QkFBOEIsRUFBRSxFQUFFO0NBQ25DLENBQUM7QUFFRjs7OztHQUlHO0FBQ0gsTUFBTSw0QkFBNEIsR0FBUTtJQUN4QyxXQUFXLEVBQUUsQ0FBRSxZQUFZLEVBQUUsYUFBYSxDQUFFO0lBQzVDLFFBQVEsRUFBRSxDQUFFLFlBQVksQ0FBRTtJQUMxQixVQUFVLEVBQUUsQ0FBQyxZQUFZLEVBQUUsYUFBYSxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixDQUFDO0lBQ2hGLE9BQU8sRUFBRSxDQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsYUFBYSxDQUFFO0lBQzNELFFBQVEsRUFBRSxDQUFFLGFBQWEsRUFBRSxZQUFZLENBQUU7SUFDekMsTUFBTSxFQUFFLEVBQUU7Q0FDWCxDQUFDO0FBRUY7OztHQUdHO0FBQ0gsTUFBTSxvQkFBb0IsR0FBUTtJQUNoQyx1QkFBdUIsRUFBRSxPQUFPO0lBQ2hDLDRCQUE0QixFQUFFLFlBQVk7SUFDMUMsNEJBQTRCLEVBQUUsTUFBTTtJQUNwQyw4QkFBOEIsRUFBRSxhQUFhO0NBQzlDLENBQUM7QUFHRjs7O0dBR0c7QUFDSCxTQUFnQiw0QkFBNEIsQ0FBQyxHQUFRO0lBQ25ELEtBQUksTUFBTSxLQUFLLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBQztRQUNsQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxD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Q1IsTUFBTTtRQUNOLE9BQU87UUFDUCxVQUFVO0tBQ1gsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFBO0FBQ3JCLENBQUM7QUFURCwwQ0FTQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldENvbmZpZ3VyZWRQcm92aWRlciwgQWxsb3dlZFByb3ZpZGVycyB9IGZyb20gXCIuLi9jb25maWdcIjtcbmltcG9ydCBfIGZyb20gXCJsb2Rhc2hcIjtcbmltcG9ydCB7IGlzQ29sbGFib3JhdG9yIH0gZnJvbSBcIi4vd2VsbEtub3duU3RydWN0dXJlc1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBUaGlzIG9iamVjdCBjb250YWlucyB0aGUgd2VsbCBrbm93biByZWxhdGlvbnMgYmV0d2VlbiBDUnNcbiAqIFRoZSBrZXkgaXMgdGhlIGtpbmQgb2YgdGhlIENSIGFuZCB0aGUgdmFsdWUgaXMgYW4gYXJyYXkgb2YgcHJvcGVydGllcyB0aGF0IGFyZSByZWZlcmVuY2VzIHRvIG90aGVyIENSc1xuICogVGhlIHZhbHVlIGlzIHRoZSBwYXRoIHRvIHRoZSBwcm9wZXJ0eSBpbiB0aGUgQ1JcbiAqL1xuY29uc3QgV0VMTF9LTk9XTl9SRUxBVElPTlM6IGFueSA9IHtcbiAgXCJGaXJlc3RhcnRyR2l0aHViR3JvdXBcIjogWyBcInNwZWMubWVtYmVyc1wiIF0sXG4gIFwiRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlcIjogWyBcInNwZWMucGVybWlzc2lvbnNcIiBdLFxuICBcIkZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwXCI6IFtdLFxuICBcIkZpcmVzYXJ0ZXJUZXJyYWZvcm1Xb3Jrc3BhY2VcIjogW10sXG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBUaGlzIG9iamVjdCBjb250YWlucyB0aGUgd2VsbCBrbm93biByZWxhdGlvbnMgYmV0d2VlbiBDUnMgaW4gdGhlIGNhdGFsb2cgcmVwb1xuICogVGhlIGtleSBpcyB0aGUga2luZCBvZiB0aGUgQ1IgYW5kIHRoZSB2YWx1ZSBpcyBhbiBhcnJheSBvZiBwcm9wZXJ0aWVzIHRoYXQgYXJlIHJlZmVyZW5jZXMgdG8gb3RoZXIgQ1JzXG4gKiBUaGUgdmFsdWUgaXMgdGhlIHBhdGggdG8gdGhlIHByb3BlcnR5IGluIHRoZSBDUlxuICovXG5jb25zdCBXRUxMX0tOT1dOX1JFTEFUSU9OU19DQVRBTE9HOiBhbnkgPSB7XG4gIFwiQ29tcG9uZW50XCI6IFsgXCJzcGVjLm93bmVyXCIsIFwic3BlYy5zeXN0ZW1cIiBdLFxuICBcIkRvbWFpblwiOiBbIFwic3BlYy5vd25lclwiIF0sXG4gIFwiUmVzb3VyY2VcIjogW1wic3BlYy5vd25lclwiLCBcInNwZWMuc3lzdGVtXCIsIFwic3BlYy5kZXBlbmRlbmN5T2ZcIiwgXCJzcGVjLmRlcGVuZHNPblwiXSxcbiAgXCJHcm91cFwiOiBbIFwic3BlYy5jaGlsZHJlblwiLCBcInNwZWMubWVtYmVyc1wiLCBcInNwZWMucGFyZW50XCIgXSxcbiAgXCJTeXN0ZW1cIjogWyBcInNwZWMuZG9tYWluXCIsIFwic3BlYy5vd25lclwiIF0sXG4gIFwiVXNlclwiOiBbXSxcbn07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFRoaXMgb2JqZWN0IG1hcHMgdGhlIGtpbmQgb2YgdGhlIENSIHRvIHRoZSBraW5kIG9mIHRoZSBjbGFpbVxuICogVGhpcyB3aWxsIGJlIHVzZWQgZm9yIGZlZWRiYWNrIG1lc3NhZ2VzIHRvIGZpbmFsIHVzZXJzXG4gKi9cbmNvbnN0IE1BUF9LSU5EX0NSX1RPX0NMQUlNOiBhbnkgPSB7XG4gIFwiRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwXCI6IFwiZ3JvdXBcIixcbiAgXCJGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVwiOiBcInJlcG9zaXRvcnlcIixcbiAgXCJGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFwiOiBcInVzZXJcIixcbiAgXCJGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlXCI6IFwidGZ3b3Jrc3BhY2VcIixcbn07XG5cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gVGhpcyBmdW5jdGlvbiB2YWxpZGF0ZXMgdGhhdCBhbGwgcmVmZXJlbmNlcyBpbiB0aGUgQ1JzIGFyZSB2YWxpZFxuICogQHBhcmFtIGNycyBUaGUgY3JzIG9iamVjdCBpcyBhIG1hcCBvZiBjcnMgd2hlcmUgdGhlIGtleSBpcyB0aGUga2luZCBhbmQgbWV0YWRhLm5hbWUgb2YgdGhlIGNyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVJlZmVyZW50aWFsSW50ZWdyaXR5KGNyczogYW55KSB7XG4gIGZvcihjb25zdCBjcktleSBvZiBPYmplY3Qua2V5cyhjcnMpKXtcbiAgICB2YWxpZGF0ZVJlZmVyZW5jZXNJbkNSKGNyc1tjcktleV0sIGNycylcbiAgfVxufVxuXG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFRoaXMgZnVuY3Rpb24gdmFsaWRhdGVzIHRoYXQgYWxsIHJlZmVyZW5jZXMgaW4gdGhlIENSIGFyZSB2YWxpZCxcbiAqIGl0IHVzZXMgdGhlIHdlbGxrbm93blJlbGF0aW9ucyBvYmplY3QgdG8ga25vdyB3aGljaCBwcm9wZXJ0aWVzIHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0gY3IgVGhlIGNyIHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0gY3JzIFRoZSBjcnMgb2JqZWN0IGlzIGEgbWFwIG9mIGNycyB3aGVyZSB0aGUga2V5IGlzIHRoZSBraW5kIGFuZCBtZXRhZGEubmFtZSBvZiB0aGUgY3JcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVSZWZlcmVuY2VzSW5DUihjcjogYW55LCBjcnM6IGFueSkge1xuICBpZihpc0NhdGFsb2dFbnRpdHkoY3IpKSB7XG4gICAgaWYoZ2V0Q29uZmlndXJlZFByb3ZpZGVyKCkgPT09IEFsbG93ZWRQcm92aWRlcnMuY2F0YWxvZykge1xuICAgICAgdmFsaWRhdGVDYXRhbG9nRW50aXRpZXMoY3IsIGNycyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhbGlkYXRlTm9uQ2F0YWxvZ0VudGl0aWVzKGNyLCBjcnMpO1xuICB9XG59XG5cblxuZnVuY3Rpb24gdGhyb3dJZlJlZk5vdEZvdW5kKGNyczogYW55LCByZWZPYmo6IGFueSwgcmVmU3RyOiBzdHJpbmcsIGNyU3RyOiBzdHJpbmcpIHtcbiAgY29uc3QgcmVmS2V5ID0gYCR7cmVmT2JqLmtpbmR9LSR7cmVmT2JqLm5hbWV9YFxuXG4gIGlmKCFjcnNbcmVmS2V5XSl7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEVycm9yOiBSZWZlcmVuY2UgXCIke3JlZlN0cn1cIiBpbiBjbGFpbSBmb3IgJHtjclN0cn0gbm90IGZvdW5kYFxuICAgIClcbiAgfVxufVxuXG5cbi8qXG4gKiBAZGVzY3JpcHRpb24gVGhpcyBmdW5jdGlvbiB2YWxpZGF0ZXMgbm9uIGNhdGFsb2cgZW50aXRpZXMsIHVzaW5nIHRoZVxuICogV0VMTF9LTk9XTl9SRUxBVElPTlMgb2JqZWN0IHRvIGtub3cgd2hpY2ggZmllbGRzIHRvIHZhbGlkYXRlLlxuICogSXQgcmV0dXJucyBub3RoaW5nIGFuZCB0aHJvd3MgYW4gZXJyb3IgaWYgYSByZWZlcmVuY2UgaXMgbm90IGZvdW5kLlxuICpcbiAqIEBwYXJhbSBjciBUaGUgY3IgdG8gdmFsaWRhdGVcbiAqIEBwYXJhbSBjcnMgVGhlIGNycyBvYmplY3QgaXMgYSBtYXAgb2YgY3JzIHdoZXJlIHRoZSBrZXkgaXMgdGhlIGtpbmQgYW5kIG1ldGFkYS5uYW1lIG9mIHRoZSBjclxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZU5vbkNhdGFsb2dFbnRpdGllcyhjcjogYW55LCBjcnM6IGFueSkge1xuICBmb3IoY29uc3QgcmVsIG9mIFdFTExfS05PV05fUkVMQVRJT05TW2NyLmtpbmRdIHx8IFtdKXtcbiAgICBjb25zdCBwcm9wZXJ0eVJlZiA9IF8uZ2V0KGNyLCByZWwpO1xuXG4gICAgaWYoIXByb3BlcnR5UmVmKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDUiAke2NyLmtpbmR9ICR7Y3IubWV0YWRhdGEubmFtZX0gZG9lcyBub3QgaGF2ZSBwcm9wZXJ0eSAke3JlbH1gXG4gICAgICApXG4gICAgfVxuXG4gICAgaWYoIUFycmF5LmlzQXJyYXkocHJvcGVydHlSZWYpKSB7XG5cbiAgICAgIGlmKGlzQ29sbGFib3JhdG9yKHByb3BlcnR5UmVmKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdGhyb3dJZlJlZk5vdEZvdW5kKFxuICAgICAgICBjcnMsXG4gICAgICAgIHByb3BlcnR5UmVmLFxuICAgICAgICBgJHtNQVBfS0lORF9DUl9UT19DTEFJTVtwcm9wZXJ0eVJlZi5raW5kXX06JHtwcm9wZXJ0eVJlZi5uYW1lfWAsXG4gICAgICAgIGAke2NyLmtpbmR9LSR7Y3IubWV0YWRhdGEubmFtZX1gLFxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IoY29uc3QgcHJvcGVydHlSZWwgb2YgcHJvcGVydHlSZWYpe1xuXG4gICAgICAgIGlmKGlzQ29sbGFib3JhdG9yKHByb3BlcnR5UmVsKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3dJZlJlZk5vdEZvdW5kKFxuICAgICAgICAgIGNycyxcbiAgICAgICAgICBwcm9wZXJ0eVJlbC5yZWYsXG4gICAgICAgICAgYCR7TUFQX0tJTkRfQ1JfVE9fQ0xBSU1bcHJvcGVydHlSZWwucmVmLmtpbmRdfToke3Byb3BlcnR5UmVsLnJlZi5uYW1lfWAsXG4gICAgICAgICAgYCR7Y3Iua2luZH0tJHtjci5tZXRhZGF0YS5uYW1lfWAsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuXG4vKlxuICogQGRlc2NyaXB0aW9uIFRoaXMgZnVuY3Rpb24gdmFsaWRhdGVzIGNhdGFsb2cgZW50aXRpZXMsIHVzaW5nIHRoZVxuICogV0VMTF9LTk9XTl9SRUxBVElPTlNfQ0FUQUxPRyBvYmplY3QgdG8ga25vdyB3aGljaCBmaWVsZHMgdG8gdmFsaWRhdGUuXG4gKiBJdCByZXR1cm5zIG5vdGhpbmcgYW5kIHRocm93cyBhbiBlcnJvciBpZiBhIHJlZmVyZW5jZSBpcyBub3QgZm91bmQuXG4gKlxuICogQHBhcmFtIGNyIFRoZSBjciB0byB2YWxpZGF0ZVxuICogQHBhcmFtIGNycyBUaGUgY3JzIG9iamVjdCBpcyBhIG1hcCBvZiBjcnMgd2hlcmUgdGhlIGtleSBpcyB0aGUga2luZCBhbmQgbWV0YWRhLm5hbWUgb2YgdGhlIGNyXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQ2F0YWxvZ0VudGl0aWVzKGNyOiBhbnksIGNyczogYW55KSB7XG4gIGZvcihjb25zdCByZWwgb2YgV0VMTF9LTk9XTl9SRUxBVElPTlNfQ0FUQUxPR1tjci5raW5kXSl7XG4gICAgaWYoXy5oYXMoY3IsIHJlbCkpIHtcbiAgICAgIGNvbnN0IHJlZk9iamVjdCA9IF8uZ2V0KGNyLCByZWwpO1xuXG4gICAgICBpZighQXJyYXkuaXNBcnJheShyZWZPYmplY3QpKSB7XG4gICAgICAgIGNvbnN0IHByb3BlcnR5UmVmOiBhbnkgPSBjcmVhdGVDYXRhbG9nRW50aXR5UHJvcGVydHlSZWYocmVmT2JqZWN0KTtcbiAgICAgICAgdGhyb3dJZlJlZk5vdEZvdW5kKFxuICAgICAgICAgIGNycyxcbiAgICAgICAgICBwcm9wZXJ0eVJlZixcbiAgICAgICAgICBgJHtwcm9wZXJ0eVJlZi5raW5kLnRvTG93ZXJDYXNlKCl9OiR7cHJvcGVydHlSZWYubmFtZX1gLFxuICAgICAgICAgIGAke2NyLmtpbmR9LSR7Y3IubmFtZX1gLFxuICAgICAgICApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IoY29uc3QgcmVmRW50cnkgb2YgcmVmT2JqZWN0KXtcbiAgICAgICAgICBjb25zdCBwcm9wZXJ0eVJlZjogYW55ID0gY3JlYXRlQ2F0YWxvZ0VudGl0eVByb3BlcnR5UmVmKHJlZkVudHJ5KTtcbiAgICAgICAgICB0aHJvd0lmUmVmTm90Rm91bmQoXG4gICAgICAgICAgICBjcnMsXG4gICAgICAgICAgICBwcm9wZXJ0eVJlZixcbiAgICAgICAgICAgIGAke3Byb3BlcnR5UmVmLmtpbmQudG9Mb3dlckNhc2UoKX06JHtwcm9wZXJ0eVJlZi5uYW1lfWAsXG4gICAgICAgICAgICBgJHtjci5raW5kfS0ke2NyLm5hbWV9YCxcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLypcbiAqIEBkZXNjcmlwdGlvbiBXaGVuIGRlYWxpbmcgd2l0aCBjYXRhbG9nIGVudGl0aWVzLCB0aGVpciByZWZlcmVuY2VzIGFyZSBzdG9yZWRcbiAqIGFzIGEgc3RyaW5nIGluIHRoZSBcIltraW5kXTpbbmFtZV1cIiBmb3JtYXQuIFRoaXMgZnVuY3Rpb24gdHJhbnNmb3JtcyB0aG9zZSBzdHJpbmdzXG4gKiBpbnRvIGEgcmVmZXJlbmNlIGluIHRoZSB7IGtpbmQ6IFtraW5kXSwgbmFtZTogW25hbWVdIH0gZm9ybWF0XG4gKlxuICogQHBhcmFtIHJlZlN0cmluZyBUaGUgc3RyaW5nIHRvIHRyYW5zZm9ybS4gTXVzdCBiZSBpbiB0aGUgXCJba2luZF06W25hbWVdXCIgZm9ybWF0XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNhdGFsb2dFbnRpdHlQcm9wZXJ0eVJlZihyZWZTdHJpbmc6IHN0cmluZyk6IGFueSB7XG4gIGNvbnN0IHNwbGl0dGVkUmVmU3RyaW5nOiBzdHJpbmdbXSA9IHJlZlN0cmluZy5zcGxpdChcIjpcIik7XG4gIHJldHVybiB7XG4gICAgLy8gVGhlIGtpbmQgc3RyaW5nIG5lZWRzIHRvIGJlIGNhcGl0YWxpemVkXG4gICAga2luZDpcbiAgICAgIHNwbGl0dGVkUmVmU3RyaW5nWzBdLnN1YnN0cmluZygwLCAxKS50b1VwcGVyQ2FzZSgpICtcbiAgICAgIHNwbGl0dGVkUmVmU3RyaW5nWzBdLnN1YnN0cmluZygxKS50b0xvd2VyQ2FzZSgpLFxuICAgIG5hbWU6IHNwbGl0dGVkUmVmU3RyaW5nWzFdLFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NhdGFsb2dFbnRpdHkoY3I6IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gW1xuICAgIFwiQ29tcG9uZW50XCIsIFxuICAgIFwiRG9tYWluXCIsIFxuICAgIFwiU3lzdGVtXCIsIFxuICAgIFwiVXNlclwiLCBcbiAgICBcIkdyb3VwXCIsIFxuICAgIFwiUmVzb3VyY2VcIlxuICBdLmluY2x1ZGVzKGNyLmtpbmQpXG59XG4iXX0=
|
|
236268
|
+
function isTerraformWorkspace(cr) {
|
|
236269
|
+
return cr.kind === "FirestartrTerraformWorkspace";
|
|
236270
|
+
}
|
|
236271
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmZXJlbmNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92YWxpZGF0aW9ucy9yZWZlcmVuY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHNDQUFvRTtBQUNwRSxvREFBdUI7QUFDdkIsK0RBQXVEO0FBRXZEOzs7O0dBSUc7QUFDSCxNQUFNLG9CQUFvQixHQUFRO0lBQ2hDLHVCQUF1QixFQUFFLENBQUUsY0FBYyxDQUFFO0lBQzNDLDRCQUE0QixFQUFFLENBQUUsa0JBQWtCLENBQUU7SUFDcEQsNEJBQTRCLEVBQUUsRUFBRTtJQUNoQyw4QkFBOEIsRUFBRSxFQUFFO0NBQ25DLENBQUM7QUFFRjs7OztHQUlHO0FBQ0gsTUFBTSw0QkFBNEIsR0FBUTtJQUN4QyxXQUFXLEVBQUUsQ0FBRSxZQUFZLEVBQUUsYUFBYSxDQUFFO0lBQzVDLFFBQVEsRUFBRSxDQUFFLFlBQVksQ0FBRTtJQUMxQixVQUFVLEVBQUUsQ0FBQyxZQUFZLEVBQUUsYUFBYSxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixDQUFDO0lBQ2hGLE9BQU8sRUFBRSxDQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsYUFBYSxDQUFFO0lBQzNELFFBQVEsRUFBRSxDQUFFLGFBQWEsRUFBRSxZQUFZLENBQUU7SUFDekMsTUFBTSxFQUFFLEVBQUU7Q0FDWCxDQUFDO0FBRUY7OztHQUdHO0FBQ0gsTUFBTSxvQkFBb0IsR0FBUTtJQUNoQyx1QkFBdUIsRUFBRSxPQUFPO0lBQ2hDLDRCQUE0QixFQUFFLFlBQVk7SUFDMUMsNEJBQTRCLEVBQUUsTUFBTTtJQUNwQyw4QkFBOEIsRUFBRSxhQUFhO0NBQzlDLENBQUM7QUFHRjs7O0dBR0c7QUFDSCxTQUFnQiw0QkFBNEIsQ0FBQyxHQUFRO0lBQ25ELEtBQUksTUFBTSxLQUFLLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBQztRQUNsQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxD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InNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldENvbmZpZ3VyZWRQcm92aWRlciwgQWxsb3dlZFByb3ZpZGVycyB9IGZyb20gXCIuLi9jb25maWdcIjtcbmltcG9ydCBfIGZyb20gXCJsb2Rhc2hcIjtcbmltcG9ydCB7IGlzQ29sbGFib3JhdG9yIH0gZnJvbSBcIi4vd2VsbEtub3duU3RydWN0dXJlc1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBUaGlzIG9iamVjdCBjb250YWlucyB0aGUgd2VsbCBrbm93biByZWxhdGlvbnMgYmV0d2VlbiBDUnNcbiAqIFRoZSBrZXkgaXMgdGhlIGtpbmQgb2YgdGhlIENSIGFuZCB0aGUgdmFsdWUgaXMgYW4gYXJyYXkgb2YgcHJvcGVydGllcyB0aGF0IGFyZSByZWZlcmVuY2VzIHRvIG90aGVyIENSc1xuICogVGhlIHZhbHVlIGlzIHRoZSBwYXRoIHRvIHRoZSBwcm9wZXJ0eSBpbiB0aGUgQ1JcbiAqL1xuY29uc3QgV0VMTF9LTk9XTl9SRUxBVElPTlM6IGFueSA9IHtcbiAgXCJGaXJlc3RhcnRyR2l0aHViR3JvdXBcIjogWyBcInNwZWMubWVtYmVyc1wiIF0sXG4gIFwiRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlcIjogWyBcInNwZWMucGVybWlzc2lvbnNcIiBdLFxuICBcIkZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwXCI6IFtdLFxuICBcIkZpcmVzYXJ0ZXJUZXJyYWZvcm1Xb3Jrc3BhY2VcIjogW10sXG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBUaGlzIG9iamVjdCBjb250YWlucyB0aGUgd2VsbCBrbm93biByZWxhdGlvbnMgYmV0d2VlbiBDUnMgaW4gdGhlIGNhdGFsb2cgcmVwb1xuICogVGhlIGtleSBpcyB0aGUga2luZCBvZiB0aGUgQ1IgYW5kIHRoZSB2YWx1ZSBpcyBhbiBhcnJheSBvZiBwcm9wZXJ0aWVzIHRoYXQgYXJlIHJlZmVyZW5jZXMgdG8gb3RoZXIgQ1JzXG4gKiBUaGUgdmFsdWUgaXMgdGhlIHBhdGggdG8gdGhlIHByb3BlcnR5IGluIHRoZSBDUlxuICovXG5jb25zdCBXRUxMX0tOT1dOX1JFTEFUSU9OU19DQVRBTE9HOiBhbnkgPSB7XG4gIFwiQ29tcG9uZW50XCI6IFsgXCJzcGVjLm93bmVyXCIsIFwic3BlYy5zeXN0ZW1cIiBdLFxuICBcIkRvbWFpblwiOiBbIFwic3BlYy5vd25lclwiIF0sXG4gIFwiUmVzb3VyY2VcIjogW1wic3BlYy5vd25lclwiLCBcInNwZWMuc3lzdGVtXCIsIFwic3BlYy5kZXBlbmRlbmN5T2ZcIiwgXCJzcGVjLmRlcGVuZHNPblwiXSxcbiAgXCJHcm91cFwiOiBbIFwic3BlYy5jaGlsZHJlblwiLCBcInNwZWMubWVtYmVyc1wiLCBcInNwZWMucGFyZW50XCIgXSxcbiAgXCJTeXN0ZW1cIjogWyBcInNwZWMuZG9tYWluXCIsIFwic3BlYy5vd25lclwiIF0sXG4gIFwiVXNlclwiOiBbXSxcbn07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFRoaXMgb2JqZWN0IG1hcHMgdGhlIGtpbmQgb2YgdGhlIENSIHRvIHRoZSBraW5kIG9mIHRoZSBjbGFpbVxuICogVGhpcyB3aWxsIGJlIHVzZWQgZm9yIGZlZWRiYWNrIG1lc3NhZ2VzIHRvIGZpbmFsIHVzZXJzXG4gKi9cbmNvbnN0IE1BUF9LSU5EX0NSX1RPX0NMQUlNOiBhbnkgPSB7XG4gIFwiRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwXCI6IFwiZ3JvdXBcIixcbiAgXCJGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVwiOiBcInJlcG9zaXRvcnlcIixcbiAgXCJGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFwiOiBcInVzZXJcIixcbiAgXCJGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlXCI6IFwidGZ3b3Jrc3BhY2VcIixcbn07XG5cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gVGhpcyBmdW5jdGlvbiB2YWxpZGF0ZXMgdGhhdCBhbGwgcmVmZXJlbmNlcyBpbiB0aGUgQ1JzIGFyZSB2YWxpZFxuICogQHBhcmFtIGNycyBUaGUgY3JzIG9iamVjdCBpcyBhIG1hcCBvZiBjcnMgd2hlcmUgdGhlIGtleSBpcyB0aGUga2luZCBhbmQgbWV0YWRhLm5hbWUgb2YgdGhlIGNyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVJlZmVyZW50aWFsSW50ZWdyaXR5KGNyczogYW55KSB7XG4gIGZvcihjb25zdCBjcktleSBvZiBPYmplY3Qua2V5cyhjcnMpKXtcbiAgICB2YWxpZGF0ZVJlZmVyZW5jZXNJbkNSKGNyc1tjcktleV0sIGNycylcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVUZlN0YXRlS2V5VW5pcXVlbmVzcyhjcnM6IGFueSkge1xuICBcbiAgY29uc3QgdGZTdGF0ZUtleXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcblxuICBmb3IoY29uc3QgY3JLZXkgb2YgT2JqZWN0LmtleXMoY3JzKSl7XG4gICAgXG4gICAgY29uc3QgY3IgPSBjcnNbY3JLZXldO1xuICAgIFxuICAgIGlmKCFpc1RlcnJhZm9ybVdvcmtzcGFjZShjcikpIGNvbnRpbnVlXG4gICAgXG4gICAgY29uc3QgdGZLZXkgPSBjci5zcGVjLmZpcmVzdGFydHIudGZTdGF0ZUtleTtcbiAgICAgIFxuICAgIGlmKHRmU3RhdGVLZXlzW3RmS2V5XSkge1xuICAgIFxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgIFxuYOKdl+KdlyDinYwgUkVOREVSIEVSUk9SIOKdjCDinZfinZdcblxuVGhlIHRmU3RhdGVLZXkgJHt0ZktleX0gaXMgbm90IHVuaXF1ZSxcblxuSXQgaXMgYmVpbmcgdXNlZCBieSB0aGUgZm9sbG93aW5nIENSczpcblxuLSAke3RmU3RhdGVLZXlzW3RmS2V5XS5raW5kfSAke3RmU3RhdGVLZXlzW3RmS2V5XS5tZXRhZGF0YS5uYW1lfVxuXG4tICR7Y3Iua2luZH0gJHtjci5tZXRhZGF0YS5uYW1lfVxuXG5DaGVjayB0aGUgZm9sbG93aW5nIENsYWltcyB0byBlbnN1cmUgdGhhdCB0aGUgdGZTdGF0ZUtleSBpcyB1bmlxdWU6XG5cbi0gJHt0ZlN0YXRlS2V5c1t0ZktleV0ubWV0YWRhdGEuYW5ub3RhdGlvbnNbXCJmaXJlc3RhcnRyLmRldi9jbGFpbS1yZWZcIl19XG5cbi0gJHtjci5tZXRhZGF0YS5hbm5vdGF0aW9uc1tcImZpcmVzdGFydHIuZGV2L2NsYWltLXJlZlwiXX1cbmBcbiAgICAgIClcbiAgICBcbiAgICB9XG4gICAgICBcbiAgICB0ZlN0YXRlS2V5c1tjci5zcGVjLmZpcmVzdGFydHIudGZTdGF0ZUtleV0gPSBjclxuICB9XG59XG5cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gVGhpcyBmdW5jdGlvbiB2YWxpZGF0ZXMgdGhhdCBhbGwgcmVmZXJlbmNlcyBpbiB0aGUgQ1IgYXJlIHZhbGlkLFxuICogaXQgdXNlcyB0aGUgd2VsbGtub3duUmVsYXRpb25zIG9iamVjdCB0byBrbm93IHdoaWNoIHByb3BlcnRpZXMgdG8gdmFsaWRhdGVcbiAqIEBwYXJhbSBjciBUaGUgY3IgdG8gdmFsaWRhdGVcbiAqIEBwYXJhbSBjcnMgVGhlIGNycyBvYmplY3QgaXMgYSBtYXAgb2YgY3JzIHdoZXJlIHRoZSBrZXkgaXMgdGhlIGtpbmQgYW5kIG1ldGFkYS5uYW1lIG9mIHRoZSBjclxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVJlZmVyZW5jZXNJbkNSKGNyOiBhbnksIGNyczogYW55KSB7XG4gIGlmKGlzQ2F0YWxvZ0VudGl0eShjcikpIHtcbiAgICBpZihnZXRDb25maWd1cmVkUHJvdmlkZXIoKSA9PT0gQWxsb3dlZFByb3ZpZGVycy5jYXRhbG9nKSB7XG4gICAgICB2YWxpZGF0ZUNhdGFsb2dFbnRpdGllcyhjciwgY3JzKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFsaWRhdGVOb25DYXRhbG9nRW50aXRpZXMoY3IsIGNycyk7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiB0aHJvd0lmUmVmTm90Rm91bmQoY3JzOiBhbnksIHJlZk9iajogYW55LCByZWZTdHI6IHN0cmluZywgY3JTdHI6IHN0cmluZykge1xuICBjb25zdCByZWZLZXkgPSBgJHtyZWZPYmoua2luZH0tJHtyZWZPYmoubmFtZX1gXG5cbiAgaWYoIWNyc1tyZWZLZXldKXtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgRXJyb3I6IFJlZmVyZW5jZSBcIiR7cmVmU3RyfVwiIGluIGNsYWltIGZvciAke2NyU3RyfSBub3QgZm91bmRgXG4gICAgKVxuICB9XG59XG5cblxuLypcbiAqIEBkZXNjcmlwdGlvbiBUaGlzIGZ1bmN0aW9uIHZhbGlkYXRlcyBub24gY2F0YWxvZyBlbnRpdGllcywgdXNpbmcgdGhlXG4gKiBXRUxMX0tOT1dOX1JFTEFUSU9OUyBvYmplY3QgdG8ga25vdyB3aGljaCBmaWVsZHMgdG8gdmFsaWRhdGUuXG4gKiBJdCByZXR1cm5zIG5vdGhpbmcgYW5kIHRocm93cyBhbiBlcnJvciBpZiBhIHJlZmVyZW5jZSBpcyBub3QgZm91bmQuXG4gKlxuICogQHBhcmFtIGNyIFRoZSBjciB0byB2YWxpZGF0ZVxuICogQHBhcmFtIGNycyBUaGUgY3JzIG9iamVjdCBpcyBhIG1hcCBvZiBjcnMgd2hlcmUgdGhlIGtleSBpcyB0aGUga2luZCBhbmQgbWV0YWRhLm5hbWUgb2YgdGhlIGNyXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlTm9uQ2F0YWxvZ0VudGl0aWVzKGNyOiBhbnksIGNyczogYW55KSB7XG4gIGZvcihjb25zdCByZWwgb2YgV0VMTF9LTk9XTl9SRUxBVElPTlNbY3Iua2luZF0gfHwgW10pe1xuICAgIGNvbnN0IHByb3BlcnR5UmVmID0gXy5nZXQoY3IsIHJlbCk7XG5cbiAgICBpZighcHJvcGVydHlSZWYpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENSICR7Y3Iua2luZH0gJHtjci5tZXRhZGF0YS5uYW1lfSBkb2VzIG5vdCBoYXZlIHByb3BlcnR5ICR7cmVsfWBcbiAgICAgIClcbiAgICB9XG5cbiAgICBpZighQXJyYXkuaXNBcnJheShwcm9wZXJ0eVJlZikpIHtcblxuICAgICAgaWYoaXNDb2xsYWJvcmF0b3IocHJvcGVydHlSZWYpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB0aHJvd0lmUmVmTm90Rm91bmQoXG4gICAgICAgIGNycyxcbiAgICAgICAgcHJvcGVydHlSZWYsXG4gICAgICAgIGAke01BUF9LSU5EX0NSX1RPX0NMQUlNW3Byb3BlcnR5UmVmLmtpbmRdfToke3Byb3BlcnR5UmVmLm5hbWV9YCxcbiAgICAgICAgYCR7Y3Iua2luZH0tJHtjci5tZXRhZGF0YS5uYW1lfWAsXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIGZvcihjb25zdCBwcm9wZXJ0eVJlbCBvZiBwcm9wZXJ0eVJlZil7XG5cbiAgICAgICAgaWYoaXNDb2xsYWJvcmF0b3IocHJvcGVydHlSZWwpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvd0lmUmVmTm90Rm91bmQoXG4gICAgICAgICAgY3JzLFxuICAgICAgICAgIHByb3BlcnR5UmVsLnJlZixcbiAgICAgICAgICBgJHtNQVBfS0lORF9DUl9UT19DTEFJTVtwcm9wZXJ0eVJlbC5yZWYua2luZF19OiR7cHJvcGVydHlSZWwucmVmLm5hbWV9YCxcbiAgICAgICAgICBgJHtjci5raW5kfS0ke2NyLm1ldGFkYXRhLm5hbWV9YCxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5cbi8qXG4gKiBAZGVzY3JpcHRpb24gVGhpcyBmdW5jdGlvbiB2YWxpZGF0ZXMgY2F0YWxvZyBlbnRpdGllcywgdXNpbmcgdGhlXG4gKiBXRUxMX0tOT1dOX1JFTEFUSU9OU19DQVRBTE9HIG9iamVjdCB0byBrbm93IHdoaWNoIGZpZWxkcyB0byB2YWxpZGF0ZS5cbiAqIEl0IHJldHVybnMgbm90aGluZyBhbmQgdGhyb3dzIGFuIGVycm9yIGlmIGEgcmVmZXJlbmNlIGlzIG5vdCBmb3VuZC5cbiAqXG4gKiBAcGFyYW0gY3IgVGhlIGNyIHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0gY3JzIFRoZSBjcnMgb2JqZWN0IGlzIGEgbWFwIG9mIGNycyB3aGVyZSB0aGUga2V5IGlzIHRoZSBraW5kIGFuZCBtZXRhZGEubmFtZSBvZiB0aGUgY3JcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVDYXRhbG9nRW50aXRpZXMoY3I6IGFueSwgY3JzOiBhbnkpIHtcbiAgZm9yKGNvbnN0IHJlbCBvZiBXRUxMX0tOT1dOX1JFTEFUSU9OU19DQVRBTE9HW2NyLmtpbmRdKXtcbiAgICBpZihfLmhhcyhjciwgcmVsKSkge1xuICAgICAgY29uc3QgcmVmT2JqZWN0ID0gXy5nZXQoY3IsIHJlbCk7XG5cbiAgICAgIGlmKCFBcnJheS5pc0FycmF5KHJlZk9iamVjdCkpIHtcbiAgICAgICAgY29uc3QgcHJvcGVydHlSZWY6IGFueSA9IGNyZWF0ZUNhdGFsb2dFbnRpdHlQcm9wZXJ0eVJlZihyZWZPYmplY3QpO1xuICAgICAgICB0aHJvd0lmUmVmTm90Rm91bmQoXG4gICAgICAgICAgY3JzLFxuICAgICAgICAgIHByb3BlcnR5UmVmLFxuICAgICAgICAgIGAke3Byb3BlcnR5UmVmLmtpbmQudG9Mb3dlckNhc2UoKX06JHtwcm9wZXJ0eVJlZi5uYW1lfWAsXG4gICAgICAgICAgYCR7Y3Iua2luZH0tJHtjci5uYW1lfWAsXG4gICAgICAgIClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvcihjb25zdCByZWZFbnRyeSBvZiByZWZPYmplY3Qpe1xuICAgICAgICAgIGNvbnN0IHByb3BlcnR5UmVmOiBhbnkgPSBjcmVhdGVDYXRhbG9nRW50aXR5UHJvcGVydHlSZWYocmVmRW50cnkpO1xuICAgICAgICAgIHRocm93SWZSZWZOb3RGb3VuZChcbiAgICAgICAgICAgIGNycyxcbiAgICAgICAgICAgIHByb3BlcnR5UmVmLFxuICAgICAgICAgICAgYCR7cHJvcGVydHlSZWYua2luZC50b0xvd2VyQ2FzZSgpfToke3Byb3BlcnR5UmVmLm5hbWV9YCxcbiAgICAgICAgICAgIGAke2NyLmtpbmR9LSR7Y3IubmFtZX1gLFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKlxuICogQGRlc2NyaXB0aW9uIFdoZW4gZGVhbGluZyB3aXRoIGNhdGFsb2cgZW50aXRpZXMsIHRoZWlyIHJlZmVyZW5jZXMgYXJlIHN0b3JlZFxuICogYXMgYSBzdHJpbmcgaW4gdGhlIFwiW2tpbmRdOltuYW1lXVwiIGZvcm1hdC4gVGhpcyBmdW5jdGlvbiB0cmFuc2Zvcm1zIHRob3NlIHN0cmluZ3NcbiAqIGludG8gYSByZWZlcmVuY2UgaW4gdGhlIHsga2luZDogW2tpbmRdLCBuYW1lOiBbbmFtZV0gfSBmb3JtYXRcbiAqXG4gKiBAcGFyYW0gcmVmU3RyaW5nIFRoZSBzdHJpbmcgdG8gdHJhbnNmb3JtLiBNdXN0IGJlIGluIHRoZSBcIltraW5kXTpbbmFtZV1cIiBmb3JtYXRcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ2F0YWxvZ0VudGl0eVByb3BlcnR5UmVmKHJlZlN0cmluZzogc3RyaW5nKTogYW55IHtcbiAgY29uc3Qgc3BsaXR0ZWRSZWZTdHJpbmc6IHN0cmluZ1tdID0gcmVmU3RyaW5nLnNwbGl0KFwiOlwiKTtcbiAgcmV0dXJuIHtcbiAgICAvLyBUaGUga2luZCBzdHJpbmcgbmVlZHMgdG8gYmUgY2FwaXRhbGl6ZWRcbiAgICBraW5kOlxuICAgICAgc3BsaXR0ZWRSZWZTdHJpbmdbMF0uc3Vic3RyaW5nKDAsIDEpLnRvVXBwZXJDYXNlKCkgK1xuICAgICAgc3BsaXR0ZWRSZWZTdHJpbmdbMF0uc3Vic3RyaW5nKDEpLnRvTG93ZXJDYXNlKCksXG4gICAgbmFtZTogc3BsaXR0ZWRSZWZTdHJpbmdbMV0sXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ2F0YWxvZ0VudGl0eShjcjogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiBbXG4gICAgXCJDb21wb25lbnRcIiwgXG4gICAgXCJEb21haW5cIiwgXG4gICAgXCJTeXN0ZW1cIiwgXG4gICAgXCJVc2VyXCIsIFxuICAgIFwiR3JvdXBcIiwgXG4gICAgXCJSZXNvdXJjZVwiXG4gIF0uaW5jbHVkZXMoY3Iua2luZClcbn1cblxuXG5mdW5jdGlvbiBpc1RlcnJhZm9ybVdvcmtzcGFjZShjcjogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiBjci5raW5kID09PSBcIkZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VcIlxufVxuIl19
|
|
236220
236272
|
|
|
236221
236273
|
/***/ }),
|
|
236222
236274
|
|
|
@@ -237053,7 +237105,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
237053
237105
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
237054
237106
|
};
|
|
237055
237107
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
237056
|
-
exports.commentInPR = void 0;
|
|
237108
|
+
exports.getPrFiles = exports.commentInPR = void 0;
|
|
237057
237109
|
const auth_1 = __nccwpck_require__(7745);
|
|
237058
237110
|
const debug_1 = __importDefault(__nccwpck_require__(67984));
|
|
237059
237111
|
const messageLog = (0, debug_1.default)('firestartr:github:pull_request');
|
|
@@ -237065,7 +237117,39 @@ async function commentInPR(comment, pr_number, repo, owner = "prefapp") {
|
|
|
237065
237117
|
});
|
|
237066
237118
|
}
|
|
237067
237119
|
exports.commentInPR = commentInPR;
|
|
237068
|
-
|
|
237120
|
+
async function getPrFiles(pr_number, repo, owner = "prefapp") {
|
|
237121
|
+
messageLog(`Getting PR details of PR ${pr_number} of ${owner}/${repo}`);
|
|
237122
|
+
const octokit = await (0, auth_1.getOctokitForOrg)(owner);
|
|
237123
|
+
return await octokit.rest.pulls.listFiles({
|
|
237124
|
+
owner, repo, pull_number: pr_number
|
|
237125
|
+
});
|
|
237126
|
+
}
|
|
237127
|
+
exports.getPrFiles = getPrFiles;
|
|
237128
|
+
async function filterPrBy(filter, opts) {
|
|
237129
|
+
let foundPr = null;
|
|
237130
|
+
let retries = 0;
|
|
237131
|
+
const { title, state, repo, owner, userType } = filter;
|
|
237132
|
+
const { maxRetries } = opts;
|
|
237133
|
+
const octokit = await (0, auth_1.getOctokitForOrg)(owner);
|
|
237134
|
+
while (retries < maxRetries) {
|
|
237135
|
+
const resp = await octokit.rest.pulls.list({
|
|
237136
|
+
owner,
|
|
237137
|
+
repo,
|
|
237138
|
+
state,
|
|
237139
|
+
per_page: 100,
|
|
237140
|
+
page: retries
|
|
237141
|
+
});
|
|
237142
|
+
foundPr = resp.data.find(pr => {
|
|
237143
|
+
return pr.title
|
|
237144
|
+
.includes(title) &&
|
|
237145
|
+
pr?.user?.type === userType;
|
|
237146
|
+
});
|
|
237147
|
+
if (foundPr)
|
|
237148
|
+
return foundPr;
|
|
237149
|
+
retries++;
|
|
237150
|
+
}
|
|
237151
|
+
}
|
|
237152
|
+
exports["default"] = { commentInPR, getPrFiles, filterPrBy };
|
|
237069
237153
|
|
|
237070
237154
|
|
|
237071
237155
|
/***/ }),
|
|
@@ -239067,7 +239151,7 @@ const informer_1 = __nccwpck_require__(41151);
|
|
|
239067
239151
|
const dummy_1 = __nccwpck_require__(73490);
|
|
239068
239152
|
const processItem_1 = __nccwpck_require__(84766);
|
|
239069
239153
|
const cdktf_1 = __nccwpck_require__(10805);
|
|
239070
|
-
const
|
|
239154
|
+
const process_operation_1 = __nccwpck_require__(3937);
|
|
239071
239155
|
const leader_election_1 = __nccwpck_require__(29856);
|
|
239072
239156
|
const catalog_common_1 = __importDefault(__nccwpck_require__(74100));
|
|
239073
239157
|
const processOperationPlan_1 = __nccwpck_require__(79980);
|
|
@@ -239131,7 +239215,7 @@ function getProvisionImplementation(plural) {
|
|
|
239131
239215
|
let implementation = undefined;
|
|
239132
239216
|
switch (plural) {
|
|
239133
239217
|
case "terraformworkspaces":
|
|
239134
|
-
implementation =
|
|
239218
|
+
implementation = process_operation_1.processOperation;
|
|
239135
239219
|
break;
|
|
239136
239220
|
case "terraformworkspaceplans":
|
|
239137
239221
|
implementation = processOperationPlan_1.processOperationPlan;
|
|
@@ -240160,7 +240244,7 @@ async function inform(pluralKind, item, op, lastWorkItem = null) {
|
|
|
240160
240244
|
};
|
|
240161
240245
|
return workItem;
|
|
240162
240246
|
case "onRename":
|
|
240163
|
-
if (await (0, status_1.needsProvisioningOnCreate)(
|
|
240247
|
+
if (await (0, status_1.needsProvisioningOnCreate)(item)) {
|
|
240164
240248
|
log("onRename - needsProvisioningOnCreate true %s", item.metadata.name);
|
|
240165
240249
|
workItem = {
|
|
240166
240250
|
operation: OperationType.RENAMED,
|
|
@@ -240184,7 +240268,7 @@ async function inform(pluralKind, item, op, lastWorkItem = null) {
|
|
|
240184
240268
|
return workItem;
|
|
240185
240269
|
case "onAdd":
|
|
240186
240270
|
log("onAdd %s", item.metadata.name);
|
|
240187
|
-
if (await (0, status_1.needsProvisioningOnCreate)(
|
|
240271
|
+
if (await (0, status_1.needsProvisioningOnCreate)(item)) {
|
|
240188
240272
|
workItem = {
|
|
240189
240273
|
operation: OperationType.CREATED,
|
|
240190
240274
|
item,
|
|
@@ -240701,11 +240785,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
240701
240785
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
240702
240786
|
exports.observe = void 0;
|
|
240703
240787
|
const ctl_1 = __nccwpck_require__(46679);
|
|
240704
|
-
const fast_json_patch_1 = __importDefault(__nccwpck_require__(75177));
|
|
240705
240788
|
const debug_1 = __importDefault(__nccwpck_require__(67984));
|
|
240706
240789
|
const catalog_common_1 = __importDefault(__nccwpck_require__(74100));
|
|
240707
240790
|
const log = (0, debug_1.default)('firestartr:operator:reflector');
|
|
240708
240791
|
const k8s = __importStar(__nccwpck_require__(54851));
|
|
240792
|
+
const store_1 = __nccwpck_require__(87432);
|
|
240709
240793
|
/**
|
|
240710
240794
|
* Execute the callbacks for each item in the store
|
|
240711
240795
|
* @param {string} kind - Kind to observe
|
|
@@ -240716,7 +240800,7 @@ const k8s = __importStar(__nccwpck_require__(54851));
|
|
|
240716
240800
|
* @param {Function} onRename - Function to call when an item is renamed
|
|
240717
240801
|
*/
|
|
240718
240802
|
async function observe(kind, namespace, onAdd, onChange, onDelete, _onRename) {
|
|
240719
|
-
const store = new Store(kind);
|
|
240803
|
+
const store = new store_1.Store(kind);
|
|
240720
240804
|
const { kc } = await (0, ctl_1.getConnection)();
|
|
240721
240805
|
try {
|
|
240722
240806
|
const k8sApi = kc.makeApiClient(k8s.CustomObjectsApi);
|
|
@@ -240728,29 +240812,37 @@ async function observe(kind, namespace, onAdd, onChange, onDelete, _onRename) {
|
|
|
240728
240812
|
};
|
|
240729
240813
|
const informer = k8s.makeInformer(kc, apiPaths, listFn);
|
|
240730
240814
|
informer.on('add', (obj) => {
|
|
240731
|
-
log(`informer: ADDED ${obj.metadata.name}`);
|
|
240732
240815
|
store.add(obj);
|
|
240733
|
-
|
|
240816
|
+
if (store.hasDeletionTimestamp(obj)) {
|
|
240817
|
+
log(`informer (on add): The item ${obj.metadata.name} has a deletion timestamp, marking for deletion`);
|
|
240818
|
+
store.markToDelete(obj);
|
|
240819
|
+
onDelete(obj);
|
|
240820
|
+
}
|
|
240821
|
+
else {
|
|
240822
|
+
log(`informer (on add): The item ${obj.metadata.name} has been added`);
|
|
240823
|
+
onAdd(obj);
|
|
240824
|
+
}
|
|
240734
240825
|
});
|
|
240735
240826
|
informer.on('update', (obj) => {
|
|
240736
|
-
log(`informer:
|
|
240737
|
-
if (store.getItem(obj).markedToDelete
|
|
240738
|
-
|
|
240739
|
-
|
|
240827
|
+
log(`informer (on update): The item ${obj.kind}: ${obj.metadata.name} has been updated`);
|
|
240828
|
+
if (!store.getItem(obj).markedToDelete &&
|
|
240829
|
+
store.hasDeletionTimestamp(obj) &&
|
|
240830
|
+
(store.hasBeenMarkedToDelete(obj) || store.modified(obj))) {
|
|
240831
|
+
log(`informer (on update): The item ${obj.kind}: ${obj.metadata.name} has a deletion timestamp, marking for deletion`);
|
|
240740
240832
|
store.markToDelete(obj);
|
|
240741
240833
|
onDelete(obj);
|
|
240742
240834
|
}
|
|
240743
240835
|
else if (store.modified(obj)) {
|
|
240836
|
+
log(`informer (on update): The item ${obj.kind}: ${obj.metadata.name} has been modified`);
|
|
240744
240837
|
onChange(obj);
|
|
240745
240838
|
}
|
|
240746
240839
|
});
|
|
240747
240840
|
informer.on('delete', (obj) => {
|
|
240748
|
-
log(`informer:
|
|
240841
|
+
log(`informer (on delete): The item ${obj.metadata.name} :${obj.metadata.name} has been deleted from etcd`);
|
|
240749
240842
|
store.remove(obj);
|
|
240750
240843
|
});
|
|
240751
240844
|
informer.on('error', (err) => {
|
|
240752
|
-
|
|
240753
|
-
// Restart informer after 5sec
|
|
240845
|
+
log(`informer (on error): ERROR %O`, err);
|
|
240754
240846
|
setTimeout(() => {
|
|
240755
240847
|
informer.start();
|
|
240756
240848
|
}, 5000);
|
|
@@ -240764,52 +240856,6 @@ async function observe(kind, namespace, onAdd, onChange, onDelete, _onRename) {
|
|
|
240764
240856
|
}
|
|
240765
240857
|
}
|
|
240766
240858
|
exports.observe = observe;
|
|
240767
|
-
class Store {
|
|
240768
|
-
kind;
|
|
240769
|
-
store = {};
|
|
240770
|
-
constructor(kind) {
|
|
240771
|
-
this.kind = kind;
|
|
240772
|
-
}
|
|
240773
|
-
add(item) {
|
|
240774
|
-
this.store[itemPath(this.kind, item)] = {
|
|
240775
|
-
item
|
|
240776
|
-
};
|
|
240777
|
-
}
|
|
240778
|
-
isMarkedToDelete(item) {
|
|
240779
|
-
return "deletionTimestamp" in item.metadata;
|
|
240780
|
-
}
|
|
240781
|
-
markToDelete(item) {
|
|
240782
|
-
this.store[itemPath(this.kind, item)] = {
|
|
240783
|
-
item,
|
|
240784
|
-
markedToDelete: true
|
|
240785
|
-
};
|
|
240786
|
-
}
|
|
240787
|
-
modified(item) {
|
|
240788
|
-
const oldItem = this.getItem(item).item;
|
|
240789
|
-
const patches = fast_json_patch_1.default.compare(item, oldItem);
|
|
240790
|
-
let updated = false;
|
|
240791
|
-
for (const patch of patches) {
|
|
240792
|
-
if (patch.path.match(/^\/spec/) || patch.path.match(/\/metadata.*annotations/)) {
|
|
240793
|
-
updated = true;
|
|
240794
|
-
break;
|
|
240795
|
-
}
|
|
240796
|
-
}
|
|
240797
|
-
this.store[itemPath(this.kind, item)] = {
|
|
240798
|
-
item
|
|
240799
|
-
};
|
|
240800
|
-
console.log(Object.keys(this.store));
|
|
240801
|
-
return updated;
|
|
240802
|
-
}
|
|
240803
|
-
remove(item) {
|
|
240804
|
-
delete this.store[itemPath(this.kind, item)];
|
|
240805
|
-
}
|
|
240806
|
-
getItem(item) {
|
|
240807
|
-
return this.store[itemPath(this.kind, item)];
|
|
240808
|
-
}
|
|
240809
|
-
}
|
|
240810
|
-
function itemPath(kind, item) {
|
|
240811
|
-
return `${item.metadata.namespace}/${kind}/${item.metadata.name}`;
|
|
240812
|
-
}
|
|
240813
240859
|
|
|
240814
240860
|
|
|
240815
240861
|
/***/ }),
|
|
@@ -240958,7 +241004,7 @@ const ctl_1 = __nccwpck_require__(46679);
|
|
|
240958
241004
|
const debug_1 = __importDefault(__nccwpck_require__(67984));
|
|
240959
241005
|
const log = (0, debug_1.default)('firestartr:operator:retry');
|
|
240960
241006
|
const NEXT_RETRY_SECS = 1000 * 60;
|
|
240961
|
-
const MAXRETRY =
|
|
241007
|
+
const MAXRETRY = 5;
|
|
240962
241008
|
const retryWatchers = {};
|
|
240963
241009
|
async function initRetry(enqueue) {
|
|
240964
241010
|
loop(enqueue);
|
|
@@ -240978,6 +241024,9 @@ exports.initRetry = initRetry;
|
|
|
240978
241024
|
function retry(itemPath) {
|
|
240979
241025
|
if (retryWatchers[itemPath]) {
|
|
240980
241026
|
retryWatchers[itemPath].retryCounter++;
|
|
241027
|
+
log(`đ Retrying failed for: ${itemPath}, increasing retry counter to ${retryWatchers[itemPath].retryCounter}`);
|
|
241028
|
+
log(`đ Remaining retries for ${itemPath}: ${MAXRETRY - retryWatchers[itemPath].retryCounter}`);
|
|
241029
|
+
log(`đ Next retry for ${itemPath} in ${NEXT_RETRY_SECS * retryWatchers[itemPath].retryCounter} seconds`);
|
|
240981
241030
|
retryWatchers[itemPath].retry = false;
|
|
240982
241031
|
retryWatchers[itemPath].nextRetry = setTimeout(() => {
|
|
240983
241032
|
if (itemPath in retryWatchers)
|
|
@@ -241057,67 +241106,47 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
241057
241106
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
241058
241107
|
};
|
|
241059
241108
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
241060
|
-
exports.updateTransition = exports.
|
|
241109
|
+
exports.updateTransition = exports.needsProvisioningOnCreate = void 0;
|
|
241061
241110
|
const ctl_1 = __nccwpck_require__(46679);
|
|
241062
241111
|
const debug_1 = __importDefault(__nccwpck_require__(67984));
|
|
241063
241112
|
const log = (0, debug_1.default)('firestartr:operator:status');
|
|
241064
|
-
|
|
241065
|
-
|
|
241066
|
-
|
|
241067
|
-
if (!("status" in
|
|
241068
|
-
|
|
241069
|
-
try {
|
|
241070
|
-
const errorCondition = getConditionByType(k8sItem.status.conditions, "ERROR");
|
|
241071
|
-
if (errorCondition.status === "True" &&
|
|
241072
|
-
errorCondition.observedGeneration >= k8sItem.metadata.generation) {
|
|
241073
|
-
return true;
|
|
241074
|
-
}
|
|
241075
|
-
}
|
|
241076
|
-
catch (e) {
|
|
241077
|
-
catalog_common_1.default.io.writeFunctionLog("needsProvisioningOnCreate", `Error getting error condition: ${e}`);
|
|
241078
|
-
}
|
|
241079
|
-
try {
|
|
241080
|
-
const provisionedCondition = getConditionByType(k8sItem.status.conditions, "PROVISIONED");
|
|
241081
|
-
if (provisionedCondition.status === "True" &&
|
|
241082
|
-
provisionedCondition.observedGeneration >= k8sItem.metadata.generation) {
|
|
241083
|
-
return false;
|
|
241084
|
-
}
|
|
241113
|
+
async function needsProvisioningOnCreate(cr) {
|
|
241114
|
+
const fCrLog = (cr) => `The item ${cr.kind}: ${cr.metadata.name}`;
|
|
241115
|
+
// NO STATUS
|
|
241116
|
+
if (!("status" in cr) || !("conditions" in cr.status)) {
|
|
241117
|
+
log(`${fCrLog(cr)} has no status or conditions, provisioning...`);
|
|
241085
241118
|
return true;
|
|
241086
241119
|
}
|
|
241087
|
-
|
|
241088
|
-
|
|
241089
|
-
|
|
241120
|
+
// ERROR
|
|
241121
|
+
const errCond = getConditionByType(cr.status.conditions, "ERROR");
|
|
241122
|
+
if (errCond && errCond.status === "True") {
|
|
241123
|
+
log(`${fCrLog(cr)} has an error condition, skipping provisioning...`);
|
|
241124
|
+
return false;
|
|
241090
241125
|
}
|
|
241091
|
-
|
|
241092
|
-
|
|
241093
|
-
|
|
241094
|
-
|
|
241095
|
-
|
|
241096
|
-
return true;
|
|
241097
|
-
try {
|
|
241098
|
-
const errorCondition = getConditionByType(k8sItem.status.conditions, "ERROR");
|
|
241099
|
-
if (errorCondition.status === "True" &&
|
|
241100
|
-
errorCondition.observedGeneration >= k8sItem.metadata.generation) {
|
|
241101
|
-
return true;
|
|
241102
|
-
}
|
|
241126
|
+
// PROVISIONED
|
|
241127
|
+
const provCond = getConditionByType(cr.status.conditions, "PROVISIONED");
|
|
241128
|
+
if (provCond && provCond.status === "True" && provCond.observedGeneration >= cr.metadata.generation) {
|
|
241129
|
+
log(`${fCrLog(cr)} has already been provisioned, skipping provisioning...`);
|
|
241130
|
+
return false;
|
|
241103
241131
|
}
|
|
241104
|
-
|
|
241105
|
-
|
|
241106
|
-
|
|
241107
|
-
|
|
241108
|
-
|
|
241109
|
-
return false;
|
|
241110
|
-
}
|
|
241111
|
-
const provisioningCondition = getConditionByType(k8sItem.status.conditions, "PROVISIONING");
|
|
241112
|
-
return provisioningCondition.status !== "True";
|
|
241132
|
+
// DELETED
|
|
241133
|
+
const delCond = getConditionByType(cr.status.conditions, "DELETED");
|
|
241134
|
+
if (delCond && delCond.status === "True" && delCond.observedGeneration >= cr.metadata.generation) {
|
|
241135
|
+
log(`${fCrLog(cr)} has been deleted, skipping provisioning`);
|
|
241136
|
+
return false;
|
|
241113
241137
|
}
|
|
241114
|
-
|
|
241138
|
+
// PROVISIONING
|
|
241139
|
+
const provisioningCondition = getConditionByType(cr.status.conditions, "PROVISIONING");
|
|
241140
|
+
if (provisioningCondition && provisioningCondition.status === "True") {
|
|
241141
|
+
log(`${fCrLog(cr)} is in PROVISIONING state, it was not finished, provisioning again...`);
|
|
241115
241142
|
return true;
|
|
241116
241143
|
}
|
|
241144
|
+
log(`${fCrLog(cr)} is in a not handled state, skipping provisioning...`);
|
|
241145
|
+
return false;
|
|
241117
241146
|
}
|
|
241118
|
-
exports.
|
|
241147
|
+
exports.needsProvisioningOnCreate = needsProvisioningOnCreate;
|
|
241119
241148
|
async function updateTransition(itemPath, reason, type, statusValue, message = "", updateStatusOnly = false) {
|
|
241120
|
-
log("
|
|
241149
|
+
log("Update transition for item: %s, reason: %s, type: %s, status: %s, message: %s, updateStatusOnly: %s", itemPath, reason, type, statusValue, message, updateStatusOnly);
|
|
241121
241150
|
const k8sItem = await (0, ctl_1.getItemByItemPath)(itemPath);
|
|
241122
241151
|
if (!("status" in k8sItem))
|
|
241123
241152
|
k8sItem.status = {};
|
|
@@ -241136,20 +241165,18 @@ async function updateTransition(itemPath, reason, type, statusValue, message = "
|
|
|
241136
241165
|
}
|
|
241137
241166
|
exports.updateTransition = updateTransition;
|
|
241138
241167
|
function getRelevantCondition(conditionList, type) {
|
|
241139
|
-
|
|
241140
|
-
|
|
241141
|
-
|
|
241142
|
-
|
|
241143
|
-
|
|
241144
|
-
|
|
241145
|
-
|
|
241146
|
-
|
|
241147
|
-
|
|
241148
|
-
|
|
241149
|
-
|
|
241150
|
-
|
|
241151
|
-
};
|
|
241152
|
-
}
|
|
241168
|
+
const condition = getConditionByType(conditionList, type);
|
|
241169
|
+
if (condition)
|
|
241170
|
+
return condition;
|
|
241171
|
+
return {
|
|
241172
|
+
"lastTransitionTime": new Date().toJSON(),
|
|
241173
|
+
"lastUpdateTime": new Date().toJSON(),
|
|
241174
|
+
"message": "",
|
|
241175
|
+
"observedGeneration": -1,
|
|
241176
|
+
"reason": "",
|
|
241177
|
+
"status": "",
|
|
241178
|
+
"type": type,
|
|
241179
|
+
};
|
|
241153
241180
|
}
|
|
241154
241181
|
function updateCondition(condition, reason, status, message, generation) {
|
|
241155
241182
|
condition.lastUpdateTime = new Date().toJSON();
|
|
@@ -241164,7 +241191,7 @@ function getConditionByType(conditionList, type) {
|
|
|
241164
241191
|
if (conditionList[i].type === type)
|
|
241165
241192
|
return conditionList[i];
|
|
241166
241193
|
}
|
|
241167
|
-
|
|
241194
|
+
return false;
|
|
241168
241195
|
}
|
|
241169
241196
|
function updateConditionByType(conditionList, type, newCondition) {
|
|
241170
241197
|
let typeFound = false;
|
|
@@ -241180,6 +241207,82 @@ function updateConditionByType(conditionList, type, newCondition) {
|
|
|
241180
241207
|
}
|
|
241181
241208
|
|
|
241182
241209
|
|
|
241210
|
+
/***/ }),
|
|
241211
|
+
|
|
241212
|
+
/***/ 87432:
|
|
241213
|
+
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
|
|
241214
|
+
|
|
241215
|
+
"use strict";
|
|
241216
|
+
|
|
241217
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
241218
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
241219
|
+
};
|
|
241220
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
241221
|
+
exports.itemPath = exports.Store = void 0;
|
|
241222
|
+
const fast_json_patch_1 = __importDefault(__nccwpck_require__(75177));
|
|
241223
|
+
const debug_1 = __importDefault(__nccwpck_require__(67984));
|
|
241224
|
+
const log = (0, debug_1.default)('firestartr:operator:store');
|
|
241225
|
+
class Store {
|
|
241226
|
+
kind;
|
|
241227
|
+
store = {};
|
|
241228
|
+
constructor(kind) {
|
|
241229
|
+
this.kind = kind;
|
|
241230
|
+
}
|
|
241231
|
+
add(item) {
|
|
241232
|
+
this.store[itemPath(this.kind, item)] = {
|
|
241233
|
+
item
|
|
241234
|
+
};
|
|
241235
|
+
}
|
|
241236
|
+
hasDeletionTimestamp(item) {
|
|
241237
|
+
return "deletionTimestamp" in item.metadata;
|
|
241238
|
+
}
|
|
241239
|
+
markToDelete(item) {
|
|
241240
|
+
this.store[itemPath(this.kind, item)] = {
|
|
241241
|
+
item,
|
|
241242
|
+
markedToDelete: true
|
|
241243
|
+
};
|
|
241244
|
+
}
|
|
241245
|
+
hasBeenMarkedToDelete(item) {
|
|
241246
|
+
const oldItem = this.getItem(item).item;
|
|
241247
|
+
const patches = fast_json_patch_1.default.compare(item, oldItem);
|
|
241248
|
+
let updated = false;
|
|
241249
|
+
for (const patch of patches) {
|
|
241250
|
+
if (patch.path.match(/^\/metadata\/deletionTimestamp/)) {
|
|
241251
|
+
updated = true;
|
|
241252
|
+
break;
|
|
241253
|
+
}
|
|
241254
|
+
}
|
|
241255
|
+
return updated;
|
|
241256
|
+
}
|
|
241257
|
+
modified(item) {
|
|
241258
|
+
const oldItem = this.getItem(item).item;
|
|
241259
|
+
const patches = fast_json_patch_1.default.compare(item, oldItem);
|
|
241260
|
+
let updated = false;
|
|
241261
|
+
for (const patch of patches) {
|
|
241262
|
+
if (patch.path.match(/^\/spec/) || patch.path.match(/\/metadata.*annotations/)) {
|
|
241263
|
+
updated = true;
|
|
241264
|
+
break;
|
|
241265
|
+
}
|
|
241266
|
+
}
|
|
241267
|
+
this.store[itemPath(this.kind, item)] = {
|
|
241268
|
+
item
|
|
241269
|
+
};
|
|
241270
|
+
return updated;
|
|
241271
|
+
}
|
|
241272
|
+
remove(item) {
|
|
241273
|
+
delete this.store[itemPath(this.kind, item)];
|
|
241274
|
+
}
|
|
241275
|
+
getItem(item) {
|
|
241276
|
+
return this.store[itemPath(this.kind, item)];
|
|
241277
|
+
}
|
|
241278
|
+
}
|
|
241279
|
+
exports.Store = Store;
|
|
241280
|
+
function itemPath(kind, item) {
|
|
241281
|
+
return `${item.metadata.namespace}/${kind}/${item.metadata.name}`;
|
|
241282
|
+
}
|
|
241283
|
+
exports.itemPath = itemPath;
|
|
241284
|
+
|
|
241285
|
+
|
|
241183
241286
|
/***/ }),
|
|
241184
241287
|
|
|
241185
241288
|
/***/ 74298:
|
|
@@ -241350,7 +241453,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
241350
241453
|
};
|
|
241351
241454
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
241352
241455
|
exports.buildProvisionerContext = exports.processOperationPlan = void 0;
|
|
241353
|
-
const informer_1 = __nccwpck_require__(41151);
|
|
241354
241456
|
const debug_1 = __importDefault(__nccwpck_require__(67984));
|
|
241355
241457
|
const terraform_provisioner_1 = __nccwpck_require__(6777);
|
|
241356
241458
|
const github_1 = __importDefault(__nccwpck_require__(39759));
|
|
@@ -241361,12 +241463,15 @@ const TF_PROJECTS_PATH = "/tmp/tfworkspaces";
|
|
|
241361
241463
|
function processOperationPlan(item, op, handler) {
|
|
241362
241464
|
try {
|
|
241363
241465
|
clearLocalTfProjects();
|
|
241364
|
-
|
|
241365
|
-
|
|
241366
|
-
|
|
241367
|
-
|
|
241368
|
-
|
|
241369
|
-
|
|
241466
|
+
const policy = getPolicy(item);
|
|
241467
|
+
if (policy === "observe" || policy === "apply") {
|
|
241468
|
+
return plan(item, op, handler);
|
|
241469
|
+
}
|
|
241470
|
+
else if (policy === "destroy") {
|
|
241471
|
+
return plan(item, op, handler, "plain-text", "plan-destroy");
|
|
241472
|
+
}
|
|
241473
|
+
else {
|
|
241474
|
+
return nothing(item, op, handler);
|
|
241370
241475
|
}
|
|
241371
241476
|
}
|
|
241372
241477
|
catch (e) {
|
|
@@ -241375,7 +241480,7 @@ function processOperationPlan(item, op, handler) {
|
|
|
241375
241480
|
}
|
|
241376
241481
|
}
|
|
241377
241482
|
exports.processOperationPlan = processOperationPlan;
|
|
241378
|
-
async function* nothing(item, op,
|
|
241483
|
+
async function* nothing(item, op, _handler) {
|
|
241379
241484
|
yield {
|
|
241380
241485
|
item,
|
|
241381
241486
|
reason: op,
|
|
@@ -241384,19 +241489,19 @@ async function* nothing(item, op, handler) {
|
|
|
241384
241489
|
message: "NOTHING"
|
|
241385
241490
|
};
|
|
241386
241491
|
}
|
|
241387
|
-
async function* plan(item, op, handler, format = "plain-text") {
|
|
241492
|
+
async function* plan(item, op, handler, format = "plain-text", action = "plan") {
|
|
241388
241493
|
if (format == "plain-text") {
|
|
241389
|
-
for await (const transition of doPlanPlainTextFormat(item, op, handler)) {
|
|
241494
|
+
for await (const transition of doPlanPlainTextFormat(item, op, handler, action)) {
|
|
241390
241495
|
yield transition;
|
|
241391
241496
|
}
|
|
241392
241497
|
}
|
|
241393
241498
|
else if (format == "json") {
|
|
241394
|
-
for await (const transition of doPlanJSONFormat(item, op, handler)) {
|
|
241499
|
+
for await (const transition of doPlanJSONFormat(item, op, handler, action)) {
|
|
241395
241500
|
yield transition;
|
|
241396
241501
|
}
|
|
241397
241502
|
}
|
|
241398
241503
|
}
|
|
241399
|
-
async function* doPlanPlainTextFormat(item, op, handler) {
|
|
241504
|
+
async function* doPlanPlainTextFormat(item, op, handler, action) {
|
|
241400
241505
|
try {
|
|
241401
241506
|
yield {
|
|
241402
241507
|
item,
|
|
@@ -241422,7 +241527,7 @@ async function* doPlanPlainTextFormat(item, op, handler) {
|
|
|
241422
241527
|
const deps = await handler.resolveReferences();
|
|
241423
241528
|
log('Item %s has the following dependencies: %O', item.metadata.name, deps);
|
|
241424
241529
|
const context = buildProvisionerContext(item, deps);
|
|
241425
|
-
const tfPlanOutput = await (0, terraform_provisioner_1.runTerraformProvisioner)(context,
|
|
241530
|
+
const tfPlanOutput = await (0, terraform_provisioner_1.runTerraformProvisioner)(context, action);
|
|
241426
241531
|
await publishPlan(item, tfPlanOutput);
|
|
241427
241532
|
yield {
|
|
241428
241533
|
item,
|
|
@@ -241476,7 +241581,7 @@ async function* doPlanPlainTextFormat(item, op, handler) {
|
|
|
241476
241581
|
}
|
|
241477
241582
|
}
|
|
241478
241583
|
}
|
|
241479
|
-
async function* doPlanJSONFormat(item, op, handler) {
|
|
241584
|
+
async function* doPlanJSONFormat(item, op, handler, action) {
|
|
241480
241585
|
try {
|
|
241481
241586
|
yield {
|
|
241482
241587
|
item,
|
|
@@ -241502,7 +241607,7 @@ async function* doPlanJSONFormat(item, op, handler) {
|
|
|
241502
241607
|
const deps = await handler.resolveReferences();
|
|
241503
241608
|
log('Item %s has the following dependencies: %O', item.metadata.name, deps);
|
|
241504
241609
|
const context = buildProvisionerContext(item, deps);
|
|
241505
|
-
const tfPlan = await (0, terraform_provisioner_1.runTerraformProvisioner)(context,
|
|
241610
|
+
const tfPlan = await (0, terraform_provisioner_1.runTerraformProvisioner)(context, action);
|
|
241506
241611
|
if (tfPlan.summary.hasChanges()) {
|
|
241507
241612
|
yield {
|
|
241508
241613
|
item,
|
|
@@ -241810,6 +241915,11 @@ async function publishPlan(item, planOutput) {
|
|
|
241810
241915
|
console.error(e);
|
|
241811
241916
|
}
|
|
241812
241917
|
}
|
|
241918
|
+
function getPolicy(item) {
|
|
241919
|
+
const policy = item.metadata.annotations && item.metadata.annotations["firestartr.dev/policy"];
|
|
241920
|
+
if (policy)
|
|
241921
|
+
return policy;
|
|
241922
|
+
}
|
|
241813
241923
|
|
|
241814
241924
|
|
|
241815
241925
|
/***/ }),
|
|
@@ -241908,7 +242018,7 @@ const terraform_provisioner_1 = __nccwpck_require__(6777);
|
|
|
241908
242018
|
const ctl_1 = __nccwpck_require__(46679);
|
|
241909
242019
|
const ctx_1 = __nccwpck_require__(15284);
|
|
241910
242020
|
const resolver_1 = __nccwpck_require__(31022);
|
|
241911
|
-
const
|
|
242021
|
+
const process_operation_1 = __nccwpck_require__(3937);
|
|
241912
242022
|
const cdk8s_renderer_1 = __importDefault(__nccwpck_require__(80318));
|
|
241913
242023
|
const ctl_2 = __nccwpck_require__(59018);
|
|
241914
242024
|
const debug_1 = __importDefault(__nccwpck_require__(67984));
|
|
@@ -241955,7 +242065,7 @@ async function buildContext(claim, namespace, command) {
|
|
|
241955
242065
|
};
|
|
241956
242066
|
compute["runProvision"] = async () => {
|
|
241957
242067
|
infolog("đ Running terraform process...");
|
|
241958
|
-
const data = await (0,
|
|
242068
|
+
const data = await (0, process_operation_1.buildProvisionerContext)(cr, deps);
|
|
241959
242069
|
const result = await (0, terraform_provisioner_1.runTerraformProvisioner)(data, command);
|
|
241960
242070
|
infolog("â
Terraform process finished");
|
|
241961
242071
|
return result;
|
|
@@ -241967,7 +242077,72 @@ exports.buildContext = buildContext;
|
|
|
241967
242077
|
|
|
241968
242078
|
/***/ }),
|
|
241969
242079
|
|
|
241970
|
-
/***/
|
|
242080
|
+
/***/ 31058:
|
|
242081
|
+
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
|
|
242082
|
+
|
|
242083
|
+
"use strict";
|
|
242084
|
+
|
|
242085
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
242086
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
242087
|
+
};
|
|
242088
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
242089
|
+
exports.policyAllowsOp = exports.policies = void 0;
|
|
242090
|
+
const informer_1 = __nccwpck_require__(41151);
|
|
242091
|
+
const debug_1 = __importDefault(__nccwpck_require__(67984));
|
|
242092
|
+
const debug = (0, debug_1.default)("firestartr:operator:tfworkspaces:policies");
|
|
242093
|
+
exports.policies = {
|
|
242094
|
+
"observe": [
|
|
242095
|
+
informer_1.OperationType.NOTHING
|
|
242096
|
+
],
|
|
242097
|
+
"apply": [
|
|
242098
|
+
informer_1.OperationType.UPDATED,
|
|
242099
|
+
informer_1.OperationType.CREATED,
|
|
242100
|
+
informer_1.OperationType.RENAMED,
|
|
242101
|
+
informer_1.OperationType.SYNC,
|
|
242102
|
+
informer_1.OperationType.RETRY,
|
|
242103
|
+
informer_1.OperationType.NOTHING
|
|
242104
|
+
],
|
|
242105
|
+
"create-only": [
|
|
242106
|
+
informer_1.OperationType.CREATED,
|
|
242107
|
+
informer_1.OperationType.RETRY,
|
|
242108
|
+
],
|
|
242109
|
+
"create-update-only": [
|
|
242110
|
+
informer_1.OperationType.UPDATED,
|
|
242111
|
+
informer_1.OperationType.CREATED,
|
|
242112
|
+
informer_1.OperationType.RETRY,
|
|
242113
|
+
informer_1.OperationType.RENAMED,
|
|
242114
|
+
informer_1.OperationType.SYNC,
|
|
242115
|
+
informer_1.OperationType.NOTHING
|
|
242116
|
+
],
|
|
242117
|
+
"full-control": [
|
|
242118
|
+
informer_1.OperationType.UPDATED,
|
|
242119
|
+
informer_1.OperationType.CREATED,
|
|
242120
|
+
informer_1.OperationType.RENAMED,
|
|
242121
|
+
informer_1.OperationType.SYNC,
|
|
242122
|
+
informer_1.OperationType.MARKED_TO_DELETION,
|
|
242123
|
+
informer_1.OperationType.RETRY,
|
|
242124
|
+
informer_1.OperationType.NOTHING
|
|
242125
|
+
],
|
|
242126
|
+
};
|
|
242127
|
+
function policyAllowsOp(policy, op, item) {
|
|
242128
|
+
if (op === informer_1.OperationType.RETRY.toString() && exports.policies[policy].includes(op)) {
|
|
242129
|
+
if ("deletionTimestamp" in item.metadata && "full-control" !== policy) {
|
|
242130
|
+
return false;
|
|
242131
|
+
}
|
|
242132
|
+
else {
|
|
242133
|
+
return true;
|
|
242134
|
+
}
|
|
242135
|
+
}
|
|
242136
|
+
if (!exports.policies[policy])
|
|
242137
|
+
return false;
|
|
242138
|
+
return exports.policies[policy].includes(op);
|
|
242139
|
+
}
|
|
242140
|
+
exports.policyAllowsOp = policyAllowsOp;
|
|
242141
|
+
|
|
242142
|
+
|
|
242143
|
+
/***/ }),
|
|
242144
|
+
|
|
242145
|
+
/***/ 3937:
|
|
241971
242146
|
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
|
|
241972
242147
|
|
|
241973
242148
|
"use strict";
|
|
@@ -242003,38 +242178,39 @@ exports.buildProvisionerContext = exports.processOperation = void 0;
|
|
|
242003
242178
|
const informer_1 = __nccwpck_require__(41151);
|
|
242004
242179
|
const debug_1 = __importDefault(__nccwpck_require__(67984));
|
|
242005
242180
|
const terraform_provisioner_1 = __nccwpck_require__(6777);
|
|
242006
|
-
const log = (0, debug_1.default)('firestartr:operator:terraform');
|
|
242007
|
-
const github_1 = __importDefault(__nccwpck_require__(39759));
|
|
242008
242181
|
const fs = __importStar(__nccwpck_require__(57147));
|
|
242009
242182
|
const path = __importStar(__nccwpck_require__(71017));
|
|
242010
|
-
const
|
|
242183
|
+
const user_feedback_ops_1 = __nccwpck_require__(36322);
|
|
242184
|
+
const policies_1 = __nccwpck_require__(31058);
|
|
242185
|
+
const log = (0, debug_1.default)('firestartr:operator:terraform');
|
|
242011
242186
|
const TF_PROJECTS_PATH = "/tmp/tfworkspaces";
|
|
242012
242187
|
function processOperation(item, op, handler) {
|
|
242013
242188
|
try {
|
|
242014
242189
|
clearLocalTfProjects();
|
|
242015
242190
|
const policy = getPolicy(item);
|
|
242016
|
-
if (policy === "observe" ||
|
|
242191
|
+
if (!policy || policy === "observe" || policy === "observe-only") {
|
|
242017
242192
|
return observe(item, op, handler);
|
|
242018
242193
|
}
|
|
242019
|
-
|
|
242020
|
-
|
|
242021
|
-
|
|
242022
|
-
|
|
242023
|
-
|
|
242024
|
-
|
|
242025
|
-
|
|
242026
|
-
|
|
242027
|
-
|
|
242028
|
-
|
|
242029
|
-
|
|
242030
|
-
|
|
242031
|
-
|
|
242032
|
-
|
|
242033
|
-
|
|
242034
|
-
|
|
242035
|
-
|
|
242036
|
-
|
|
242037
|
-
|
|
242194
|
+
if (!(0, policies_1.policyAllowsOp)(policy, op, item)) {
|
|
242195
|
+
return errorPolicyNotAllowsOp(item, op, policy, handler);
|
|
242196
|
+
}
|
|
242197
|
+
switch (op) {
|
|
242198
|
+
case informer_1.OperationType.UPDATED:
|
|
242199
|
+
return updated(item, op, handler);
|
|
242200
|
+
case informer_1.OperationType.CREATED:
|
|
242201
|
+
return created(item, op, handler);
|
|
242202
|
+
case informer_1.OperationType.RENAMED:
|
|
242203
|
+
return renamed(item, op, handler);
|
|
242204
|
+
case informer_1.OperationType.SYNC:
|
|
242205
|
+
return sync(item, op, handler);
|
|
242206
|
+
case informer_1.OperationType.MARKED_TO_DELETION:
|
|
242207
|
+
return markedToDeletion(item, op, handler);
|
|
242208
|
+
case informer_1.OperationType.RETRY:
|
|
242209
|
+
return retry(item, op, handler);
|
|
242210
|
+
case informer_1.OperationType.NOTHING:
|
|
242211
|
+
return nothing(item, op, handler);
|
|
242212
|
+
default:
|
|
242213
|
+
throw new Error(`Operation ${op} not supported`);
|
|
242038
242214
|
}
|
|
242039
242215
|
}
|
|
242040
242216
|
catch (e) {
|
|
@@ -242074,7 +242250,11 @@ async function* doPlanJSONFormat(item, op, handler) {
|
|
|
242074
242250
|
const deps = await handler.resolveReferences();
|
|
242075
242251
|
log('Item %s has the following dependencies: %O', item.metadata.name, deps);
|
|
242076
242252
|
const context = buildProvisionerContext(item, deps);
|
|
242077
|
-
|
|
242253
|
+
let planType = "plan-json";
|
|
242254
|
+
if ("deletionTimestamp" in item.metadata) {
|
|
242255
|
+
planType = "plan-destroy-json";
|
|
242256
|
+
}
|
|
242257
|
+
const tfPlan = await (0, terraform_provisioner_1.runTerraformProvisioner)(context, planType);
|
|
242078
242258
|
if (tfPlan.summary.hasChanges()) {
|
|
242079
242259
|
yield {
|
|
242080
242260
|
item,
|
|
@@ -242083,6 +242263,7 @@ async function* doPlanJSONFormat(item, op, handler) {
|
|
|
242083
242263
|
status: "False",
|
|
242084
242264
|
message: "Plan has changes"
|
|
242085
242265
|
};
|
|
242266
|
+
policies_1.policyAllowsOp;
|
|
242086
242267
|
yield {
|
|
242087
242268
|
item,
|
|
242088
242269
|
reason: op,
|
|
@@ -242180,7 +242361,7 @@ async function* updated(item, op, handler) {
|
|
|
242180
242361
|
}
|
|
242181
242362
|
}
|
|
242182
242363
|
async function* retry(item, op, handler) {
|
|
242183
|
-
if (
|
|
242364
|
+
if (isDestroyRetry(item)) {
|
|
242184
242365
|
for await (const transition of markedToDeletion(item, op, handler)) {
|
|
242185
242366
|
yield transition;
|
|
242186
242367
|
}
|
|
@@ -242191,6 +242372,14 @@ async function* retry(item, op, handler) {
|
|
|
242191
242372
|
}
|
|
242192
242373
|
}
|
|
242193
242374
|
}
|
|
242375
|
+
function isDestroyRetry(item) {
|
|
242376
|
+
if ("deletionTimestamp" in item.metadata) {
|
|
242377
|
+
return true;
|
|
242378
|
+
}
|
|
242379
|
+
return false;
|
|
242380
|
+
}
|
|
242381
|
+
function canDestroyRetry(item, op, handler) {
|
|
242382
|
+
}
|
|
242194
242383
|
async function* sync(item, op, handler) {
|
|
242195
242384
|
yield {
|
|
242196
242385
|
item,
|
|
@@ -242213,6 +242402,20 @@ async function* sync(item, op, handler) {
|
|
|
242213
242402
|
async function* markedToDeletion(item, op, handler) {
|
|
242214
242403
|
try {
|
|
242215
242404
|
let type = "DELETING";
|
|
242405
|
+
yield {
|
|
242406
|
+
item,
|
|
242407
|
+
reason: op,
|
|
242408
|
+
type: "PROVISIONING",
|
|
242409
|
+
status: "False",
|
|
242410
|
+
message: "markedToDeletion"
|
|
242411
|
+
};
|
|
242412
|
+
yield {
|
|
242413
|
+
item,
|
|
242414
|
+
reason: op,
|
|
242415
|
+
type: "DELETED",
|
|
242416
|
+
status: "False",
|
|
242417
|
+
message: "markedToDeletion"
|
|
242418
|
+
};
|
|
242216
242419
|
yield {
|
|
242217
242420
|
item,
|
|
242218
242421
|
reason: op,
|
|
@@ -242251,7 +242454,7 @@ async function* markedToDeletion(item, op, handler) {
|
|
|
242251
242454
|
const deps = await handler.resolveReferences();
|
|
242252
242455
|
const context = buildProvisionerContext(item, deps);
|
|
242253
242456
|
const destroyOutput = await (0, terraform_provisioner_1.runTerraformProvisioner)(context, "destroy");
|
|
242254
|
-
await
|
|
242457
|
+
await (0, user_feedback_ops_1.tryPublishDestroy)(item, destroyOutput);
|
|
242255
242458
|
yield {
|
|
242256
242459
|
item,
|
|
242257
242460
|
reason: op,
|
|
@@ -242259,6 +242462,13 @@ async function* markedToDeletion(item, op, handler) {
|
|
|
242259
242462
|
status: "False",
|
|
242260
242463
|
message: "Destroying process finished"
|
|
242261
242464
|
};
|
|
242465
|
+
yield {
|
|
242466
|
+
item,
|
|
242467
|
+
reason: op,
|
|
242468
|
+
type: "DELETED",
|
|
242469
|
+
status: "True",
|
|
242470
|
+
message: "destroyed"
|
|
242471
|
+
};
|
|
242262
242472
|
await handler.finalize(handler.pluralKind, item.metadata.namespace, item, "firestartr.dev/finalizer");
|
|
242263
242473
|
await handler.writeTerraformOutputInTfResult(item, destroyOutput);
|
|
242264
242474
|
handler.success();
|
|
@@ -242292,6 +242502,13 @@ async function* nothing(item, op, handler) {
|
|
|
242292
242502
|
*/
|
|
242293
242503
|
async function* doApply(item, op, handler) {
|
|
242294
242504
|
try {
|
|
242505
|
+
yield {
|
|
242506
|
+
item,
|
|
242507
|
+
reason: op,
|
|
242508
|
+
type: "DELETED",
|
|
242509
|
+
status: "False",
|
|
242510
|
+
message: "markedToDeletion"
|
|
242511
|
+
};
|
|
242295
242512
|
yield {
|
|
242296
242513
|
item,
|
|
242297
242514
|
reason: op,
|
|
@@ -242333,7 +242550,7 @@ async function* doApply(item, op, handler) {
|
|
|
242333
242550
|
log('Item %s has the following dependencies: %O', item.metadata.name, deps);
|
|
242334
242551
|
const context = buildProvisionerContext(item, deps);
|
|
242335
242552
|
const applyOutput = await (0, terraform_provisioner_1.runTerraformProvisioner)(context, "apply");
|
|
242336
|
-
await tryPublishApply(item, applyOutput);
|
|
242553
|
+
await (0, user_feedback_ops_1.tryPublishApply)(item, applyOutput);
|
|
242337
242554
|
const terraformOutputJson = await (0, terraform_provisioner_1.runTerraformProvisioner)(context, "output");
|
|
242338
242555
|
if (!terraformOutputJson) {
|
|
242339
242556
|
throw new Error(`Terraform output is empty for ${item.kind}/${item.metadata.name}`);
|
|
@@ -242366,7 +242583,7 @@ async function* doApply(item, op, handler) {
|
|
|
242366
242583
|
}
|
|
242367
242584
|
catch (e) {
|
|
242368
242585
|
console.error(e);
|
|
242369
|
-
await tryPublishApply(item, e);
|
|
242586
|
+
await (0, user_feedback_ops_1.tryPublishApply)(item, e);
|
|
242370
242587
|
log("Error applying item %s: %O", item.metadata.name, e);
|
|
242371
242588
|
yield {
|
|
242372
242589
|
item,
|
|
@@ -242395,6 +242612,73 @@ async function* doApply(item, op, handler) {
|
|
|
242395
242612
|
}
|
|
242396
242613
|
}
|
|
242397
242614
|
}
|
|
242615
|
+
async function* errorPolicyNotAllowsOp(item, op, policy, handler) {
|
|
242616
|
+
const fSearchAllowedPoliciesForOp = (op) => {
|
|
242617
|
+
let allowedPolicies = [];
|
|
242618
|
+
for (const [key, value] of Object.entries(policies_1.policies)) {
|
|
242619
|
+
if (value.includes(op)) {
|
|
242620
|
+
allowedPolicies.push(key);
|
|
242621
|
+
}
|
|
242622
|
+
}
|
|
242623
|
+
if (allowedPolicies.length > 0)
|
|
242624
|
+
return allowedPolicies.join(", ");
|
|
242625
|
+
return "none";
|
|
242626
|
+
};
|
|
242627
|
+
const errorMessage = `Operation ${op} not allowed by policy \`${policy}\`, to allow this operation, switch to one of the following policies: \`${fSearchAllowedPoliciesForOp(op)}\``;
|
|
242628
|
+
const reason = "POLICY CONFLICT";
|
|
242629
|
+
await (0, user_feedback_ops_1.tryPublishError)(item, reason, errorMessage);
|
|
242630
|
+
yield {
|
|
242631
|
+
item,
|
|
242632
|
+
reason: op,
|
|
242633
|
+
type: "ERROR",
|
|
242634
|
+
status: "True",
|
|
242635
|
+
message: errorMessage
|
|
242636
|
+
};
|
|
242637
|
+
yield {
|
|
242638
|
+
item,
|
|
242639
|
+
reason: op,
|
|
242640
|
+
type: "PROVISIONED",
|
|
242641
|
+
status: "False",
|
|
242642
|
+
message: errorMessage
|
|
242643
|
+
};
|
|
242644
|
+
yield {
|
|
242645
|
+
item,
|
|
242646
|
+
reason: op,
|
|
242647
|
+
type: "PROVISIONING",
|
|
242648
|
+
status: "False",
|
|
242649
|
+
message: errorMessage
|
|
242650
|
+
};
|
|
242651
|
+
yield {
|
|
242652
|
+
item,
|
|
242653
|
+
reason: op,
|
|
242654
|
+
type: "OUT_OF_SYNC",
|
|
242655
|
+
status: "False",
|
|
242656
|
+
message: errorMessage
|
|
242657
|
+
};
|
|
242658
|
+
yield {
|
|
242659
|
+
item,
|
|
242660
|
+
reason: op,
|
|
242661
|
+
type: "DELETED",
|
|
242662
|
+
status: "False",
|
|
242663
|
+
message: errorMessage
|
|
242664
|
+
};
|
|
242665
|
+
yield {
|
|
242666
|
+
item,
|
|
242667
|
+
reason: op,
|
|
242668
|
+
type: "PLANNING",
|
|
242669
|
+
status: "False",
|
|
242670
|
+
message: errorMessage
|
|
242671
|
+
};
|
|
242672
|
+
yield {
|
|
242673
|
+
item,
|
|
242674
|
+
reason: op,
|
|
242675
|
+
type: "DELETING",
|
|
242676
|
+
status: "False",
|
|
242677
|
+
message: errorMessage
|
|
242678
|
+
};
|
|
242679
|
+
await handler.writeTerraformOutputInTfResult(item, errorMessage);
|
|
242680
|
+
handler.error();
|
|
242681
|
+
}
|
|
242398
242682
|
/**
|
|
242399
242683
|
* @description Adapts the CR to the format expected by the terraform provisioner
|
|
242400
242684
|
* @param item - CR to be applied
|
|
@@ -242586,6 +242870,23 @@ function getErrorOutputMessage(cr, key, ref) {
|
|
|
242586
242870
|
throw new Error(`â Source ${cr.spec.source} not supported`);
|
|
242587
242871
|
}
|
|
242588
242872
|
}
|
|
242873
|
+
|
|
242874
|
+
|
|
242875
|
+
/***/ }),
|
|
242876
|
+
|
|
242877
|
+
/***/ 36322:
|
|
242878
|
+
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
|
|
242879
|
+
|
|
242880
|
+
"use strict";
|
|
242881
|
+
|
|
242882
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
242883
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
242884
|
+
};
|
|
242885
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
242886
|
+
exports.publishError = exports.tryPublishError = exports.publishApply = exports.tryPublishDestroy = exports.tryPublishApply = void 0;
|
|
242887
|
+
const github_1 = __importDefault(__nccwpck_require__(39759));
|
|
242888
|
+
const debug_1 = __importDefault(__nccwpck_require__(67984));
|
|
242889
|
+
const log = (0, debug_1.default)('firestartr:operator:terraform');
|
|
242589
242890
|
async function tryPublishApply(item, planOutput) {
|
|
242590
242891
|
try {
|
|
242591
242892
|
if (!("firestartr.dev/last-state-pr" in item.metadata.annotations)) {
|
|
@@ -242598,7 +242899,63 @@ async function tryPublishApply(item, planOutput) {
|
|
|
242598
242899
|
log(`Error publishing apply: ${e}`);
|
|
242599
242900
|
}
|
|
242600
242901
|
}
|
|
242902
|
+
exports.tryPublishApply = tryPublishApply;
|
|
242903
|
+
async function tryPublishDestroy(item, destroyOutput) {
|
|
242904
|
+
try {
|
|
242905
|
+
log("Trying to publish destroy");
|
|
242906
|
+
const { repo, org } = extractPrInfo(item);
|
|
242907
|
+
const lastPr = await github_1.default.pulls.filterPrBy({
|
|
242908
|
+
title: `hydrate: ${item.metadata.name}`,
|
|
242909
|
+
state: 'closed',
|
|
242910
|
+
repo,
|
|
242911
|
+
owner: org,
|
|
242912
|
+
userType: 'Bot'
|
|
242913
|
+
}, {
|
|
242914
|
+
maxRetries: 3
|
|
242915
|
+
});
|
|
242916
|
+
if (!lastPr) {
|
|
242917
|
+
log(`CR ${item.metadata.name} has no last state PR. Skipping terraform destroy publish.`);
|
|
242918
|
+
return;
|
|
242919
|
+
}
|
|
242920
|
+
const comment = `<h1>
|
|
242921
|
+
<img width="25" src="https://static-00.iconduck.com/assets.00/file-type-terraform-icon-1821x2048-mbxeegff.png"> Terraform destroy
|
|
242922
|
+
</h1>
|
|
242923
|
+
<p><b>TFWorkspace: </b>${item.metadata.name}</p>
|
|
242924
|
+
|
|
242925
|
+
<details id=github>
|
|
242926
|
+
<summary>DESTROY LOGS</summary>
|
|
242927
|
+
|
|
242928
|
+
\`\`\`shell
|
|
242929
|
+
${destroyOutput}
|
|
242930
|
+
\`\`\`
|
|
242931
|
+
</details>`;
|
|
242932
|
+
log("Publishing comment in PR number: ", lastPr.number);
|
|
242933
|
+
await github_1.default.pulls.commentInPR(comment, lastPr.number, repo, org);
|
|
242934
|
+
log("Published destroy comment in PR number: ", lastPr.number);
|
|
242935
|
+
}
|
|
242936
|
+
catch (e) {
|
|
242937
|
+
log(`Error publishing apply: ${e}`);
|
|
242938
|
+
}
|
|
242939
|
+
}
|
|
242940
|
+
exports.tryPublishDestroy = tryPublishDestroy;
|
|
242601
242941
|
async function publishApply(item, applyOutput) {
|
|
242942
|
+
const { prNumber, repo, org } = extractPrInfo(item);
|
|
242943
|
+
const comment = `<h1>
|
|
242944
|
+
<img width="25" src="https://static-00.iconduck.com/assets.00/file-type-terraform-icon-1821x2048-mbxeegff.png"> Terraform apply
|
|
242945
|
+
</h1>
|
|
242946
|
+
<p><b>TFWorkspace: </b>${item.metadata.name}</p>
|
|
242947
|
+
|
|
242948
|
+
<details id=github>
|
|
242949
|
+
<summary>APPLY LOGS</summary>
|
|
242950
|
+
|
|
242951
|
+
\`\`\`shell
|
|
242952
|
+
${applyOutput}
|
|
242953
|
+
\`\`\`
|
|
242954
|
+
</details>`;
|
|
242955
|
+
await github_1.default.pulls.commentInPR(comment, parseInt(prNumber), repo, org);
|
|
242956
|
+
}
|
|
242957
|
+
exports.publishApply = publishApply;
|
|
242958
|
+
function extractPrInfo(item) {
|
|
242602
242959
|
const prInfo = item.metadata.annotations["firestartr.dev/last-state-pr"];
|
|
242603
242960
|
const prNumber = prInfo.split("#")[1];
|
|
242604
242961
|
if (!prNumber)
|
|
@@ -242609,20 +242966,27 @@ async function publishApply(item, applyOutput) {
|
|
|
242609
242966
|
const repo = prInfo.split("#")[0].split("/")[1];
|
|
242610
242967
|
if (!repo)
|
|
242611
242968
|
throw new Error("No repo found in CR");
|
|
242612
|
-
|
|
242613
|
-
|
|
242614
|
-
|
|
242615
|
-
|
|
242616
|
-
|
|
242617
|
-
|
|
242618
|
-
|
|
242619
|
-
|
|
242620
|
-
|
|
242621
|
-
|
|
242622
|
-
|
|
242623
|
-
|
|
242969
|
+
return { prNumber, repo, org };
|
|
242970
|
+
}
|
|
242971
|
+
async function tryPublishError(item, reason, message) {
|
|
242972
|
+
try {
|
|
242973
|
+
await publishError(item, reason, message);
|
|
242974
|
+
}
|
|
242975
|
+
catch (e) {
|
|
242976
|
+
log(`Error publishing warning: ${e}`);
|
|
242977
|
+
}
|
|
242978
|
+
}
|
|
242979
|
+
exports.tryPublishError = tryPublishError;
|
|
242980
|
+
async function publishError(item, reason, message) {
|
|
242981
|
+
const { prNumber, repo, org } = extractPrInfo(item);
|
|
242982
|
+
const comment = `# â Error on claim ${item.metadata.annotations["firestartr.dev/claim-ref"].split("/")[1]}
|
|
242983
|
+
### đ Reason: ${reason}
|
|
242984
|
+
#### âšī¸ Details:
|
|
242985
|
+
${message}
|
|
242986
|
+
`;
|
|
242624
242987
|
await github_1.default.pulls.commentInPR(comment, parseInt(prNumber), repo, org);
|
|
242625
242988
|
}
|
|
242989
|
+
exports.publishError = publishError;
|
|
242626
242990
|
|
|
242627
242991
|
|
|
242628
242992
|
/***/ }),
|
|
@@ -243831,6 +244195,12 @@ async function execCommand(command, tfProject) {
|
|
|
243831
244195
|
case "apply":
|
|
243832
244196
|
await tfProject.apply();
|
|
243833
244197
|
break;
|
|
244198
|
+
case "plan-destroy":
|
|
244199
|
+
await tfProject.planDestroy("human");
|
|
244200
|
+
break;
|
|
244201
|
+
case "plan-destroy-json":
|
|
244202
|
+
await tfProject.planDestroy("json");
|
|
244203
|
+
break;
|
|
243834
244204
|
case "destroy":
|
|
243835
244205
|
await tfProject.destroy();
|
|
243836
244206
|
break;
|
|
@@ -243932,6 +244302,12 @@ class TFProjectManager {
|
|
|
243932
244302
|
this.tfOutput = null;
|
|
243933
244303
|
this.tfOutput = await (0, utils_1.plan)(this.projectPath, this.secrets, format);
|
|
243934
244304
|
}
|
|
244305
|
+
async planDestroy(format) {
|
|
244306
|
+
await this.__init();
|
|
244307
|
+
if (format == "json")
|
|
244308
|
+
this.tfOutput = null;
|
|
244309
|
+
this.tfOutput = await (0, utils_1.plan)(this.projectPath, this.secrets, format, ["plan", "-destroy"]);
|
|
244310
|
+
}
|
|
243935
244311
|
async apply() {
|
|
243936
244312
|
await this.__init();
|
|
243937
244313
|
this.tfOutput += await (0, utils_1.apply)(this.projectPath, this.secrets);
|
|
@@ -244356,8 +244732,8 @@ async function initFromModule(path, source, secrets) {
|
|
|
244356
244732
|
], secrets, []);
|
|
244357
244733
|
}
|
|
244358
244734
|
exports.initFromModule = initFromModule;
|
|
244359
|
-
async function plan(path, secrets, format) {
|
|
244360
|
-
const plan = await tfExec(path,
|
|
244735
|
+
async function plan(path, secrets, format, args = ["plan"]) {
|
|
244736
|
+
const plan = await tfExec(path, args
|
|
244361
244737
|
.concat(format == "json" ?
|
|
244362
244738
|
["-json"]
|
|
244363
244739
|
:
|