@tricoteuses/assemblee 1.4.0 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/datasets.d.ts +1 -0
- package/lib/datasets.js +28 -2
- package/lib/datasets.mjs +14 -2
- package/lib/dossiers_legislatifs.js +1 -1
- package/lib/dossiers_legislatifs.mjs +1 -1
- package/lib/file_systems.js +30 -24
- package/lib/file_systems.mjs +4 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/index.mjs +1 -1
- package/lib/loaders.js +2 -2
- package/lib/loaders.mjs +2 -2
- package/lib/raw_types/debats.d.ts +5 -4
- package/lib/raw_types/debats.js +9 -5
- package/lib/raw_types/debats.mjs +9 -5
- package/lib/raw_types/dossiers_legislatifs.d.ts +2 -0
- package/lib/raw_types/dossiers_legislatifs.js +5 -3
- package/lib/raw_types/dossiers_legislatifs.mjs +5 -3
- package/lib/raw_types/questions.d.ts +1 -1
- package/lib/raw_types/questions.js +2 -2
- package/lib/raw_types/questions.mjs +2 -2
- package/lib/scripts/clean_reorganized_data.js +13 -42
- package/lib/scripts/clean_reorganized_data.mjs +8 -18
- package/lib/scripts/reorganize_data.js +17 -46
- package/lib/scripts/reorganize_data.mjs +8 -18
- package/lib/scripts/retrieve_open_data.js +5 -5
- package/lib/scripts/retrieve_open_data.mjs +4 -4
- package/lib/shared_types/codes_actes.d.ts +129 -342
- package/lib/shared_types/codes_actes.js +212 -243
- package/lib/shared_types/codes_actes.mjs +211 -224
- package/lib/types/debats.d.ts +5 -4
- package/lib/types/debats.js +9 -5
- package/lib/types/debats.mjs +9 -5
- package/lib/types/dossiers_legislatifs.d.ts +2 -0
- package/lib/types/dossiers_legislatifs.js +7 -8
- package/lib/types/dossiers_legislatifs.mjs +8 -9
- package/lib/types/questions.d.ts +1 -1
- package/lib/types/questions.js +2 -2
- package/lib/types/questions.mjs +2 -2
- package/package.json +1 -1
|
@@ -4,7 +4,7 @@ import commandLineArgs from "command-line-args";
|
|
|
4
4
|
import fs from "fs-extra";
|
|
5
5
|
import path from "path";
|
|
6
6
|
import { cleanActeur, cleanAmendement, cleanDocumentOrDivision, cleanDossierParlementaire, cleanOrgane, cleanReunion, cleanScrutin, cleanQuestion, cleanCompteRendu } from "../cleaners/index.mjs";
|
|
7
|
-
import { datasets, EnabledDatasets } from "../datasets.mjs";
|
|
7
|
+
import { datasets, EnabledDatasets, filterByLegislature } from "../datasets.mjs";
|
|
8
8
|
import { existingDateToJson, patchedDateToJson } from "../dates.mjs";
|
|
9
9
|
import { walkDir } from "../file_systems.mjs";
|
|
10
10
|
import * as git from "../git.mjs";
|
|
@@ -12,7 +12,6 @@ import { Convert as ActeursEtOrganesConvert } from "../types/acteurs_et_organes.
|
|
|
12
12
|
import { Convert as AgendasConvert } from "../types/agendas.mjs";
|
|
13
13
|
import { Convert as AmendementsConvert } from "../types/amendements.mjs";
|
|
14
14
|
import { Convert as DossiersLegislatifsConvert } from "../types/dossiers_legislatifs.mjs";
|
|
15
|
-
import { Legislature } from "../types/legislatures.mjs";
|
|
16
15
|
import { Convert as ScrutinsConvert } from "../types/scrutins.mjs";
|
|
17
16
|
import { Convert as QuestionsConvert } from "../types/questions.mjs";
|
|
18
17
|
import { Convert as ComptesRendusConvert } from "../types/debats.mjs";
|
|
@@ -88,18 +87,9 @@ function cleanReorganizedData(options) {
|
|
|
88
87
|
const gitGroupUrl = options.clone ? options.clone.trim().replace(/\/+$/, "") : undefined;
|
|
89
88
|
options.categories.map(datasetName => assert.notStrictEqual(EnabledDatasets[datasetName], undefined, `Unknown name of dataset: ${datasetName}`));
|
|
90
89
|
const enabledDatasets = options.categories.reduce((enabledDatasets, datasetName) => enabledDatasets | EnabledDatasets[datasetName], EnabledDatasets.None);
|
|
91
|
-
let
|
|
92
|
-
// When a given legislature is 0, it is the same as giving no legislature:
|
|
93
|
-
// It means "every legislatures".
|
|
94
|
-
const legislatures = options.legislature?.some(legislature => legislature === 0) ? undefined : options.legislature;
|
|
95
|
-
if (legislatures !== undefined) {
|
|
96
|
-
const enabledLegislatures = legislatures.map(legislature => legislature.toString());
|
|
97
|
-
for (let [key, value] of Object.entries(choosenDatasets)) {
|
|
98
|
-
choosenDatasets[key] = value.filter(dataset => dataset.legislature === Legislature.All || enabledLegislatures.includes(dataset.legislature));
|
|
99
|
-
}
|
|
100
|
-
}
|
|
90
|
+
let chosenDatasets = filterByLegislature(datasets, options.legislature);
|
|
101
91
|
if (enabledDatasets & EnabledDatasets.ActeursEtOrganes) {
|
|
102
|
-
for (const dataset of
|
|
92
|
+
for (const dataset of chosenDatasets.acteursEtOrganes) {
|
|
103
93
|
const datasetName = path.basename(dataset.filename, ".json");
|
|
104
94
|
if (options.dataset && datasetName !== options.dataset) {
|
|
105
95
|
continue;
|
|
@@ -191,7 +181,7 @@ function cleanReorganizedData(options) {
|
|
|
191
181
|
}
|
|
192
182
|
}
|
|
193
183
|
if (enabledDatasets & EnabledDatasets.Agendas) {
|
|
194
|
-
for (const dataset of
|
|
184
|
+
for (const dataset of chosenDatasets.agendas) {
|
|
195
185
|
const datasetName = path.basename(dataset.filename, ".json");
|
|
196
186
|
if (options.dataset && datasetName !== options.dataset) {
|
|
197
187
|
continue;
|
|
@@ -244,7 +234,7 @@ function cleanReorganizedData(options) {
|
|
|
244
234
|
}
|
|
245
235
|
}
|
|
246
236
|
if (enabledDatasets & EnabledDatasets.Amendements) {
|
|
247
|
-
for (const dataset of
|
|
237
|
+
for (const dataset of chosenDatasets.amendements) {
|
|
248
238
|
const datasetName = path.basename(dataset.filename, ".json");
|
|
249
239
|
if (options.dataset && datasetName !== options.dataset) {
|
|
250
240
|
continue;
|
|
@@ -297,7 +287,7 @@ function cleanReorganizedData(options) {
|
|
|
297
287
|
}
|
|
298
288
|
}
|
|
299
289
|
if (enabledDatasets & EnabledDatasets.DossiersLegislatifs) {
|
|
300
|
-
for (const dataset of
|
|
290
|
+
for (const dataset of chosenDatasets.dossiersLegislatifs) {
|
|
301
291
|
const datasetName = path.basename(dataset.filename, ".json");
|
|
302
292
|
if (options.dataset && datasetName !== options.dataset) {
|
|
303
293
|
continue;
|
|
@@ -375,7 +365,7 @@ function cleanReorganizedData(options) {
|
|
|
375
365
|
}
|
|
376
366
|
}
|
|
377
367
|
if (enabledDatasets & EnabledDatasets.Scrutins) {
|
|
378
|
-
for (const dataset of
|
|
368
|
+
for (const dataset of chosenDatasets.scrutins) {
|
|
379
369
|
const datasetName = path.basename(dataset.filename, ".json");
|
|
380
370
|
if (options.dataset && datasetName !== options.dataset) {
|
|
381
371
|
continue;
|
|
@@ -575,4 +565,4 @@ function main(argv) {
|
|
|
575
565
|
|
|
576
566
|
/* istanbul ignore if */
|
|
577
567
|
if (process.argv[1].endsWith("clean_reorganized_data.ts")) process.exit(main(process.argv));
|
|
578
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhc3NlcnQiLCJleGVjU3luYyIsImNvbW1hbmRMaW5lQXJncyIsImZzIiwicGF0aCIsImNsZWFuQWN0ZXVyIiwiY2xlYW5BbWVuZGVtZW50IiwiY2xlYW5Eb2N1bWVudE9yRGl2aXNpb24iLCJjbGVhbkRvc3NpZXJQYXJsZW1lbnRhaXJlIiwiY2xlYW5PcmdhbmUiLCJjbGVhblJldW5pb24iLCJjbGVhblNjcnV0aW4iLCJjbGVhblF1ZXN0aW9uIiwiY2xlYW5Db21wdGVSZW5kdSIsImRhdGFzZXRzIiwiRW5hYmxlZERhdGFzZXRzIiwiZXhpc3RpbmdEYXRlVG9Kc29uIiwicGF0Y2hlZERhdGVUb0pzb24iLCJ3YWxrRGlyIiwiZ2l0IiwiQ29udmVydCIsIkFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0IiwiQWdlbmRhc0NvbnZlcnQiLCJBbWVuZGVtZW50c0NvbnZlcnQiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydCIsIkxlZ2lzbGF0dXJlIiwiU2NydXRpbnNDb252ZXJ0IiwiUXVlc3Rpb25zQ29udmVydCIsIkNvbXB0ZXNSZW5kdXNDb252ZXJ0IiwicGFyc2VBcmdzIiwiYXJndiIsIm9wdGlvbnNEZWZpbml0aW9ucyIsImFsaWFzIiwiaGVscCIsIm5hbWUiLCJ0eXBlIiwiU3RyaW5nIiwiQm9vbGVhbiIsImRlZmF1bHRWYWx1ZSIsIm11bHRpcGxlIiwiTnVtYmVyIiwiZGVmYXVsdE9wdGlvbiIsIm9wdGlvbnMiLCJjbGVhblJlb3JnYW5pemVkRGF0YSIsImRhdGFEaXIiLCJEYXRlIiwicHJvdG90eXBlIiwidG9KU09OIiwiZXhpdENvZGUiLCJnaXRHcm91cFVybCIsImNsb25lIiwidHJpbSIsInJlcGxhY2UiLCJ1bmRlZmluZWQiLCJjYXRlZ29yaWVzIiwibWFwIiwiZGF0YXNldE5hbWUiLCJub3RTdHJpY3RFcXVhbCIsImVuYWJsZWREYXRhc2V0cyIsInJlZHVjZSIsIk5vbmUiLCJjaG9vc2VuRGF0YXNldHMiLCJsZWdpc2xhdHVyZXMiLCJsZWdpc2xhdHVyZSIsInNvbWUiLCJlbmFibGVkTGVnaXNsYXR1cmVzIiwidG9TdHJpbmciLCJrZXkiLCJ2YWx1ZSIsIk9iamVjdCIsImVudHJpZXMiLCJmaWx0ZXIiLCJkYXRhc2V0IiwiQWxsIiwiaW5jbHVkZXMiLCJBY3RldXJzRXRPcmdhbmVzIiwiYWN0ZXVyc0V0T3JnYW5lcyIsImJhc2VuYW1lIiwiZmlsZW5hbWUiLCJjd2QiLCJlbnYiLCJwcm9jZXNzIiwiZW5jb2RpbmciLCJzdGRpbyIsImRhdGFzZXRSYXdEaXIiLCJqb2luIiwiZGF0YXNldENsZWFuRGlyIiwicHVsbCIsImFuYWx5emVBbmRSZW1vdmUiLCJhY3RldXJTcGxpdFBhdGgiLCJhY3RldXJGaWxlbmFtZSIsImxlbmd0aCIsImVuZHNXaXRoIiwiYWN0ZXVyUmF3RmlsZVBhdGgiLCJ2ZXJib3NlIiwiY29uc29sZSIsImxvZyIsImFjdGV1clJhd0pzb24iLCJyZWFkRmlsZVN5bmMiLCJhY3RldXIiLCJKU09OIiwicGFyc2UiLCJhY3RldXJKc29uIiwic3RyaW5naWZ5IiwiYWN0ZXVyQ2xlYW4iLCJ0b0FjdGV1ciIsImFjdGV1ckNsZWFuSnNvbiIsImFjdGV1clRvSnNvbiIsImFjdGV1ckNsZWFuRmlsZVBhdGgiLCJlbnN1cmVEaXJTeW5jIiwiZGlybmFtZSIsIndyaXRlRmlsZVN5bmMiLCJvcmdhbmVTcGxpdFBhdGgiLCJvcmdhbmVGaWxlbmFtZSIsIm9yZ2FuZVJhd0ZpbGVQYXRoIiwib3JnYW5lUmF3SnNvbiIsIm9yZ2FuZSIsIm9yZ2FuZUpzb24iLCJvcmdhbmVDbGVhbiIsInRvT3JnYW5lIiwib3JnYW5lQ2xlYW5Kc29uIiwib3JnYW5lVG9Kc29uIiwib3JnYW5lQ2xlYW5GaWxlUGF0aCIsImNvbW1pdCIsImVycm9yQ29kZSIsImNvbW1pdEFuZFB1c2giLCJyZW1vdGUiLCJjb21taXRBbmRQdXNoVWlkIiwiQWdlbmRhcyIsImFnZW5kYXMiLCJyZXVuaW9uU3BsaXRQYXRoIiwicmV1bmlvbkZpbGVuYW1lIiwicmV1bmlvblJhd0ZpbGVQYXRoIiwicmV1bmlvblJhd0pzb24iLCJyZXVuaW9uIiwicmV1bmlvbkpzb24iLCJyZXVuaW9uQ2xlYW4iLCJ0b1JldW5pb24iLCJyZXVuaW9uQ2xlYW5Kc29uIiwicmV1bmlvblRvSnNvbiIsInJldW5pb25DbGVhbkZpbGVQYXRoIiwiQW1lbmRlbWVudHMiLCJhbWVuZGVtZW50cyIsImFtZW5kZW1lbnRTcGxpdFBhdGgiLCJhbWVuZGVtZW50RmlsZW5hbWUiLCJhbWVuZGVtZW50UmF3RmlsZVBhdGgiLCJhbWVuZGVtZW50UmF3SnNvbiIsImFtZW5kZW1lbnQiLCJhbWVuZGVtZW50SnNvbiIsImFtZW5kZW1lbnRDbGVhbiIsInRvQW1lbmRlbWVudCIsImFtZW5kZW1lbnRDbGVhbkpzb24iLCJhbWVuZGVtZW50VG9Kc29uIiwiYW1lbmRlbWVudENsZWFuRmlsZVBhdGgiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9zc2llcnNMZWdpc2xhdGlmcyIsImRvY3VtZW50U3BsaXRQYXRoIiwiZG9jdW1lbnRGaWxlbmFtZSIsImRvY3VtZW50UmF3RmlsZVBhdGgiLCJkb2N1bWVudFJhd0pzb24iLCJkb2N1bWVudCIsImRvY3VtZW50SnNvbiIsImRvY3VtZW50Q2xlYW4iLCJ0b0RvY3VtZW50IiwiZG9jdW1lbnRDbGVhbkpzb24iLCJkb2N1bWVudFRvSnNvbiIsImRvY3VtZW50Q2xlYW5GaWxlUGF0aCIsImRvc3NpZXJTcGxpdFBhdGgiLCJkb3NzaWVyRmlsZW5hbWUiLCJkb3NzaWVyUmF3RmlsZVBhdGgiLCJkb3NzaWVyUmF3SnNvbiIsImRvc3NpZXIiLCJkb3NzaWVySnNvbiIsImRvc3NpZXJDbGVhbiIsInRvRG9zc2llclBhcmxlbWVudGFpcmUiLCJkb3NzaWVyQ2xlYW5Kc29uIiwiZG9zc2llclBhcmxlbWVudGFpcmVUb0pzb24iLCJkb3NzaWVyQ2xlYW5GaWxlUGF0aCIsIlNjcnV0aW5zIiwic2NydXRpbnMiLCJzY3J1dGluU3BsaXRQYXRoIiwic2NydXRpbkZpbGVuYW1lIiwic2NydXRpblJhd0ZpbGVQYXRoIiwic2NydXRpblJhd0pzb24iLCJzY3J1dGluIiwic2NydXRpbkpzb24iLCJzY3J1dGluQ2xlYW4iLCJ0b1NjcnV0aW4iLCJzY3J1dGluQ2xlYW5Kc29uIiwic2NydXRpblRvSnNvbiIsInNjcnV0aW5DbGVhbkZpbGVQYXRoIiwiUXVlc3Rpb25zIiwicXVlc3Rpb25zIiwicXVlc3Rpb25zU3BsaXRQYXRoIiwicXVlc3Rpb25GaWxlbmFtZSIsInF1ZXN0aW9uUmF3RmlsZVBhdGgiLCJxdWVzdGlvblJhd0pzb24iLCJxdWVzdGlvbiIsInF1ZXN0aW9uSnNvbiIsInF1ZXN0aW9uQ2xlYW4iLCJ0b1F1ZXN0aW9uIiwicXVlc3Rpb25DbGVhbkpzb24iLCJxdWVzdGlvblRvSnNvbiIsInF1ZXN0aW9uQ2xlYW5GaWxlUGF0aCIsIkNvbXB0ZXNSZW5kdXNTZWFuY2VzIiwiY29tcHRlc1JlbmR1c1NlYW5jZXMiLCJjb21wdGVzUmVuZHVzU3BsaXRQYXRoIiwiY29tcHRlUmVuZHVGaWxlbmFtZSIsImNvbXB0ZVJlbmR1UmF3RmlsZVBhdGgiLCJjb21wdGVSZW5kdVJhd0pzb24iLCJjb21wdGVSZW5kdSIsImNvbXB0ZVJlbmR1SnNvbiIsImNvbXB0ZVJlbmR1Q2xlYW4iLCJ0b0NvbXB0ZVJlbmR1IiwiY29tcHRlUmVuZHVDbGVhbkpzb24iLCJjb21wdGVSZW5kdVRvSnNvbiIsImNvbXB0ZVJlbmR1Q2xlYW5GaWxlUGF0aCIsInNpbGVudCIsInJlYWRkaXJTeW5jIiwicGF0aG5hbWUiLCJyZW1vdmVTeW5jIiwicmVwb3NpdG9yeURpciIsInN1YmRpcmVjdG9yaWVzIiwiZXJyb3IiLCJ1aWRCcmFuY2hVcGRhdGUiLCJydW4iLCJjaGlsZFByb2Nlc3MiLCJtYWluIiwiZXhpdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JpcHRzL2NsZWFuX3Jlb3JnYW5pemVkX2RhdGEudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCJcbmltcG9ydCB7IGV4ZWNTeW5jIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIlxuaW1wb3J0IGNvbW1hbmRMaW5lQXJncyBmcm9tIFwiY29tbWFuZC1saW5lLWFyZ3NcIlxuaW1wb3J0IGZzIGZyb20gXCJmcy1leHRyYVwiXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5cbmltcG9ydCB7XG4gIGNsZWFuQWN0ZXVyLFxuICBjbGVhbkFtZW5kZW1lbnQsXG4gIGNsZWFuRG9jdW1lbnRPckRpdmlzaW9uLFxuICBjbGVhbkRvc3NpZXJQYXJsZW1lbnRhaXJlLFxuICBjbGVhbk9yZ2FuZSxcbiAgY2xlYW5SZXVuaW9uLFxuICBjbGVhblNjcnV0aW4sXG4gIGNsZWFuUXVlc3Rpb24sXG4gIGNsZWFuQ29tcHRlUmVuZHUsXG59IGZyb20gXCIuLi9jbGVhbmVyc1wiXG5pbXBvcnQgeyBkYXRhc2V0cywgRW5hYmxlZERhdGFzZXRzIH0gZnJvbSBcIi4uL2RhdGFzZXRzXCJcbmltcG9ydCB7IGV4aXN0aW5nRGF0ZVRvSnNvbiwgcGF0Y2hlZERhdGVUb0pzb24gfSBmcm9tIFwiLi4vZGF0ZXNcIlxuaW1wb3J0IHsgd2Fsa0RpciB9IGZyb20gXCIuLi9maWxlX3N5c3RlbXNcIlxuaW1wb3J0ICogYXMgZ2l0IGZyb20gXCIuLi9naXRcIlxuaW1wb3J0IHtcbiAgQWN0ZXVyLFxuICBDb252ZXJ0IGFzIEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LFxuICBPcmdhbmUsXG59IGZyb20gXCIuLi90eXBlcy9hY3RldXJzX2V0X29yZ2FuZXNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBBZ2VuZGFzQ29udmVydCwgUmV1bmlvbiB9IGZyb20gXCIuLi90eXBlcy9hZ2VuZGFzXCJcbmltcG9ydCB7IEFtZW5kZW1lbnQsIENvbnZlcnQgYXMgQW1lbmRlbWVudHNDb252ZXJ0IH0gZnJvbSBcIi4uL3R5cGVzL2FtZW5kZW1lbnRzXCJcbmltcG9ydCB7XG4gIENvbnZlcnQgYXMgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQsXG4gIERvY3VtZW50LFxuICBEb3NzaWVyUGFybGVtZW50YWlyZSxcbn0gZnJvbSBcIi4uL3R5cGVzL2Rvc3NpZXJzX2xlZ2lzbGF0aWZzXCJcbmltcG9ydCB7IExlZ2lzbGF0dXJlIH0gZnJvbSBcIi4uL3R5cGVzL2xlZ2lzbGF0dXJlc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIFNjcnV0aW5zQ29udmVydCwgU2NydXRpbiB9IGZyb20gXCIuLi90eXBlcy9zY3J1dGluc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIFF1ZXN0aW9uc0NvbnZlcnQsIFF1ZXN0aW9uIH0gZnJvbSBcIi4uL3R5cGVzL3F1ZXN0aW9uc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIENvbXB0ZXNSZW5kdXNDb252ZXJ0LCBDb21wdGVSZW5kdSB9IGZyb20gXCIuLi90eXBlcy9kZWJhdHNcIlxuXG5mdW5jdGlvbiBwYXJzZUFyZ3MoYXJndjogc3RyaW5nW10pOiBhbnkge1xuICBjb25zdCBvcHRpb25zRGVmaW5pdGlvbnMgPSBbXG4gICAge1xuICAgICAgYWxpYXM6IFwiQ1wiLFxuICAgICAgaGVscDogXCJjbG9uZSByZXBvc2l0b3JpZXMgZnJvbSBnaXZlbiBncm91cCAob3Igb3JnYW5pemF0aW9uKSBnaXQgVVJMXCIsXG4gICAgICBuYW1lOiBcImNsb25lXCIsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgICB7XG4gICAgICBhbGlhczogXCJjXCIsXG4gICAgICBoZWxwOiBcImNvbW1pdCBjbGVhbiBmaWxlc1wiLFxuICAgICAgbmFtZTogXCJjb21taXRcIixcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgfSxcbiAgICB7XG4gICAgICBhbGlhczogXCJkXCIsXG4gICAgICBoZWxwOiBcInNpbmdsZSBkYXRhc2V0IHRvIHJlb3JnYW5pemVcIixcbiAgICAgIG5hbWU6IFwiZGF0YXNldFwiLFxuICAgICAgdHlwZTogU3RyaW5nLFxuICAgIH0sXG4gICAge1xuICAgICAgYWxpYXM6IFwia1wiLFxuICAgICAgZGVmYXVsdFZhbHVlOiBbXCJBbGxcIl0sXG4gICAgICBoZWxwOiBcImNhdGVnb3JpZXMgb2YgZGF0YXNldHMgdG8gcmVvcmdhbml6ZVwiLFxuICAgICAgbXVsdGlwbGU6IHRydWUsXG4gICAgICBuYW1lOiBcImNhdGVnb3JpZXNcIixcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGFsaWFzOiBcImxcIixcbiAgICAgIGhlbHA6IFwibGVnaXNsYXR1cmVzIG9mIGNhdGVnb3JpZXMgb2YgZGF0YXNldHMgdG8gcmV0cmlldmU7IGxlYXZlIGVtcHR5IG9yIHVzZSAwIGZvciBhbGxcIixcbiAgICAgIG11bHRpcGxlOiB0cnVlLFxuICAgICAgbmFtZTogXCJsZWdpc2xhdHVyZVwiLFxuICAgICAgdHlwZTogTnVtYmVyLFxuICAgIH0sXG4gICAge1xuICAgICAgYWxpYXM6IFwicFwiLFxuICAgICAgaGVscDogXCJwdWxsIHJlcG9zaXRvcmllcyBiZWZvcmUgcHJvY2VlZGluZ1wiLFxuICAgICAgbmFtZTogXCJwdWxsXCIsXG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgIH0sXG4gICAge1xuICAgICAgYWxpYXM6IFwiclwiLFxuICAgICAgaGVscDogXCJwdXNoIGNvbW1pdCB0byBnaXZlbiByZW1vdGVcIixcbiAgICAgIG11bHRpcGxlOiB0cnVlLFxuICAgICAgbmFtZTogXCJyZW1vdGVcIixcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGFsaWFzOiBcInNcIixcbiAgICAgIGhlbHA6IFwiZG9uJ3QgbG9nIGFueXRoaW5nXCIsXG4gICAgICBuYW1lOiBcInNpbGVudFwiLFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICB9LFxuICAgIHtcbiAgICAgIGhlbHA6IFwiZG8gbm90IHJlc2V0IC0taGFyZCBhZnRlciBjb21taXQgdG8gc2F2ZSBJL08gaWYgdGhlIHdvcmtpbmcgdHJlZSBpcyB0byBiZSBkaXNjYXJkZWRcIixcbiAgICAgIG5hbWU6IFwibm8tcmVzZXQtYWZ0ZXItY29tbWl0XCIsXG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgIH0sXG4gICAge1xuICAgICAgYWxpYXM6IFwidlwiLFxuICAgICAgaGVscDogXCJ2ZXJib3NlIGxvZ3NcIixcbiAgICAgIG5hbWU6IFwidmVyYm9zZVwiLFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlZmF1bHRPcHRpb246IHRydWUsXG4gICAgICBoZWxwOiBcImRpcmVjdG9yeSBjb250YWluaW5nIEFzc2VtYmzDqWUgb3BlbiBkYXRhIGZpbGVzXCIsXG4gICAgICBuYW1lOiBcImRhdGFEaXJcIixcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICB9LFxuICBdXG4gIGNvbnN0IG9wdGlvbnMgPSBjb21tYW5kTGluZUFyZ3Mob3B0aW9uc0RlZmluaXRpb25zLCB7XG4gICAgYXJndjogYXJndixcbiAgfSlcbiAgcmV0dXJuIG9wdGlvbnNcbn1cblxuZnVuY3Rpb24gY2xlYW5SZW9yZ2FuaXplZERhdGEob3B0aW9uczogYW55KTogbnVtYmVyIHtcbiAgY29uc3QgZGF0YURpcjogc3RyaW5nID0gb3B0aW9ucy5kYXRhRGlyXG5cbiAgRGF0ZS5wcm90b3R5cGUudG9KU09OID0gcGF0Y2hlZERhdGVUb0pzb25cblxuICBsZXQgZXhpdENvZGUgPSAxMCAvLyBOb3RoaW5nIHRvIGNvbW1pdFxuICBjb25zdCBnaXRHcm91cFVybCA9IG9wdGlvbnMuY2xvbmVcbiAgICA/IG9wdGlvbnMuY2xvbmUudHJpbSgpLnJlcGxhY2UoL1xcLyskLywgXCJcIilcbiAgICA6IHVuZGVmaW5lZFxuXG4gIG9wdGlvbnMuY2F0ZWdvcmllcy5tYXAoKGRhdGFzZXROYW1lOiBzdHJpbmcpID0+XG4gICAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKFxuICAgICAgKEVuYWJsZWREYXRhc2V0cyBhcyBhbnkgYXMgeyBbbmFtZTogc3RyaW5nXTogRW5hYmxlZERhdGFzZXRzIH0pW1xuICAgICAgICBkYXRhc2V0TmFtZVxuICAgICAgXSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIGBVbmtub3duIG5hbWUgb2YgZGF0YXNldDogJHtkYXRhc2V0TmFtZX1gLFxuICAgICksXG4gIClcbiAgY29uc3QgZW5hYmxlZERhdGFzZXRzID0gb3B0aW9ucy5jYXRlZ29yaWVzLnJlZHVjZShcbiAgICAoZW5hYmxlZERhdGFzZXRzOiBFbmFibGVkRGF0YXNldHMsIGRhdGFzZXROYW1lOiBzdHJpbmcpOiBFbmFibGVkRGF0YXNldHMgPT5cbiAgICAgIGVuYWJsZWREYXRhc2V0cyB8XG4gICAgICAoRW5hYmxlZERhdGFzZXRzIGFzIGFueSBhcyB7IFtuYW1lOiBzdHJpbmddOiBFbmFibGVkRGF0YXNldHMgfSlbXG4gICAgICAgIGRhdGFzZXROYW1lXG4gICAgICBdLFxuICAgIEVuYWJsZWREYXRhc2V0cy5Ob25lLFxuICApXG5cbiAgbGV0IGNob29zZW5EYXRhc2V0cyA9IGRhdGFzZXRzXG4gIC8vIFdoZW4gYSBnaXZlbiBsZWdpc2xhdHVyZSBpcyAwLCBpdCBpcyB0aGUgc2FtZSBhcyBnaXZpbmcgbm8gbGVnaXNsYXR1cmU6XG4gIC8vIEl0IG1lYW5zIFwiZXZlcnkgbGVnaXNsYXR1cmVzXCIuXG4gIGNvbnN0IGxlZ2lzbGF0dXJlcyA9IG9wdGlvbnMubGVnaXNsYXR1cmU/LnNvbWUoXG4gICAgKGxlZ2lzbGF0dXJlOiBudW1iZXIpID0+IGxlZ2lzbGF0dXJlID09PSAwLFxuICApXG4gICAgPyB1bmRlZmluZWRcbiAgICA6IG9wdGlvbnMubGVnaXNsYXR1cmVcbiAgaWYgKGxlZ2lzbGF0dXJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgZW5hYmxlZExlZ2lzbGF0dXJlcyA9IGxlZ2lzbGF0dXJlcy5tYXAoKGxlZ2lzbGF0dXJlOiBudW1iZXIpID0+XG4gICAgICBsZWdpc2xhdHVyZS50b1N0cmluZygpLFxuICAgIClcbiAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoY2hvb3NlbkRhdGFzZXRzKSkge1xuICAgICAgY2hvb3NlbkRhdGFzZXRzW2tleSBhcyBrZXlvZiB0eXBlb2YgY2hvb3NlbkRhdGFzZXRzXSA9IHZhbHVlLmZpbHRlcihcbiAgICAgICAgKGRhdGFzZXQ6IHsgbGVnaXNsYXR1cmU6IGFueSB9KSA9PlxuICAgICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgPT09IExlZ2lzbGF0dXJlLkFsbCB8fFxuICAgICAgICAgIGVuYWJsZWRMZWdpc2xhdHVyZXMuaW5jbHVkZXMoZGF0YXNldC5sZWdpc2xhdHVyZSksXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGNob29zZW5EYXRhc2V0cy5hY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoZGF0YXNldC5maWxlbmFtZSwgXCIuanNvblwiKVxuICAgICAgaWYgKG9wdGlvbnMuZGF0YXNldCAmJiBkYXRhc2V0TmFtZSAhPT0gb3B0aW9ucy5kYXRhc2V0KSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX1fbmV0dG95ZS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGFzZXRSYXdEaXI6IHN0cmluZyA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGNvbnN0IGRhdGFzZXRDbGVhbkRpcjogc3RyaW5nID0gZGF0YXNldFJhd0RpciArIFwiX25ldHRveWVcIlxuICAgICAgaWYgKG9wdGlvbnMucHVsbCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IHJlc2V0IC0taGFyZCBvcmlnaW4vbWFzdGVyYCwge1xuICAgICAgICAgIGN3ZDogZGF0YXNldENsZWFuRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBwdWxsIC0tcmViYXNlYCwge1xuICAgICAgICAgIGN3ZDogZGF0YXNldENsZWFuRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgYW5hbHl6ZUFuZFJlbW92ZShkYXRhc2V0TmFtZSwgb3B0aW9ucylcbiAgICAgIGZvciAoY29uc3QgYWN0ZXVyU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldFJhd0RpciwgW1wiYWN0ZXVyc1wiXSkpIHtcbiAgICAgICAgY29uc3QgYWN0ZXVyRmlsZW5hbWUgPSBhY3RldXJTcGxpdFBhdGhbYWN0ZXVyU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghYWN0ZXVyRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWN0ZXVyUmF3RmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldFJhd0RpciwgLi4uYWN0ZXVyU3BsaXRQYXRoKVxuICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgQ2xlYW5pbmcgZmlsZTogJHthY3RldXJSYXdGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFjdGV1clJhd0pzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhhY3RldXJSYXdGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgYWN0ZXVyID0gSlNPTi5wYXJzZShhY3RldXJSYXdKc29uKVxuICAgICAgICBjbGVhbkFjdGV1cihhY3RldXIpXG4gICAgICAgIGNvbnN0IGFjdGV1ckpzb246IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGFjdGV1ciwgbnVsbCwgMilcblxuICAgICAgICAvLyBWYWxpZGF0ZSBnZW5lcmF0ZWQgSlNPTi5cbiAgICAgICAgY29uc3QgYWN0ZXVyQ2xlYW46IEFjdGV1ciA9IEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LnRvQWN0ZXVyKGFjdGV1ckpzb24pXG4gICAgICAgIGNvbnN0IGFjdGV1ckNsZWFuSnNvbjogc3RyaW5nID1cbiAgICAgICAgICBBY3RldXJzRXRPcmdhbmVzQ29udmVydC5hY3RldXJUb0pzb24oYWN0ZXVyQ2xlYW4pXG5cbiAgICAgICAgY29uc3QgYWN0ZXVyQ2xlYW5GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgIGRhdGFzZXRDbGVhbkRpcixcbiAgICAgICAgICAuLi5hY3RldXJTcGxpdFBhdGgsXG4gICAgICAgIClcbiAgICAgICAgZnMuZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUoYWN0ZXVyQ2xlYW5GaWxlUGF0aCkpXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmMoYWN0ZXVyQ2xlYW5GaWxlUGF0aCwgYWN0ZXVyQ2xlYW5Kc29uLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IG9yZ2FuZVNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXRSYXdEaXIsIFtcIm9yZ2FuZXNcIl0pKSB7XG4gICAgICAgIGNvbnN0IG9yZ2FuZUZpbGVuYW1lID0gb3JnYW5lU3BsaXRQYXRoW29yZ2FuZVNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIW9yZ2FuZUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9yZ2FuZVJhd0ZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXRSYXdEaXIsIC4uLm9yZ2FuZVNwbGl0UGF0aClcbiAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAgIENsZWFuaW5nIGZpbGU6ICR7b3JnYW5lUmF3RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcmdhbmVSYXdKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMob3JnYW5lUmF3RmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IG9yZ2FuZSA9IEpTT04ucGFyc2Uob3JnYW5lUmF3SnNvbilcbiAgICAgICAgY2xlYW5PcmdhbmUob3JnYW5lKVxuICAgICAgICBjb25zdCBvcmdhbmVKc29uOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShvcmdhbmUsIG51bGwsIDIpXG5cbiAgICAgICAgLy8gVmFsaWRhdGUgZ2VuZXJhdGVkIEpTT04uXG4gICAgICAgIGNvbnN0IG9yZ2FuZUNsZWFuOiBPcmdhbmUgPSBBY3RldXJzRXRPcmdhbmVzQ29udmVydC50b09yZ2FuZShvcmdhbmVKc29uKVxuICAgICAgICBjb25zdCBvcmdhbmVDbGVhbkpzb246IHN0cmluZyA9XG4gICAgICAgICAgQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQub3JnYW5lVG9Kc29uKG9yZ2FuZUNsZWFuKVxuXG4gICAgICAgIGNvbnN0IG9yZ2FuZUNsZWFuRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICBkYXRhc2V0Q2xlYW5EaXIsXG4gICAgICAgICAgLi4ub3JnYW5lU3BsaXRQYXRoLFxuICAgICAgICApXG4gICAgICAgIGZzLmVuc3VyZURpclN5bmMocGF0aC5kaXJuYW1lKG9yZ2FuZUNsZWFuRmlsZVBhdGgpKVxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKG9yZ2FuZUNsZWFuRmlsZVBhdGgsIG9yZ2FuZUNsZWFuSnNvbiwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuY29tbWl0KSB7XG4gICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IGdpdC5jb21taXRBbmRQdXNoKFxuICAgICAgICAgIGRhdGFzZXRDbGVhbkRpcixcbiAgICAgICAgICBcIk5vdXZlbGxlIG1vaXNzb25cIixcbiAgICAgICAgICBvcHRpb25zLnJlbW90ZSxcbiAgICAgICAgKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgKGV4aXRDb2RlID09PSAxMCAmJiBlcnJvckNvZGUgIT09IDEwKSB8fFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMCAmJiBlcnJvckNvZGUgIT09IDAgJiYgZXJyb3JDb2RlICE9PSAxMClcbiAgICAgICAgKSB7XG4gICAgICAgICAgZXhpdENvZGUgPSBlcnJvckNvZGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBjb21taXRBbmRQdXNoVWlkKGRhdGFzZXRDbGVhbkRpciwgb3B0aW9ucywgW1wiYWN0ZXVyc1wiLCBcIm9yZ2FuZXNcIl0pICYmXG4gICAgICAgIChleGl0Q29kZSA9PT0gMCB8fCBleGl0Q29kZSA9PT0gMTApXG4gICAgICApIHtcbiAgICAgICAgZXhpdENvZGUgPSAxXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BZ2VuZGFzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGNob29zZW5EYXRhc2V0cy5hZ2VuZGFzKSB7XG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoZGF0YXNldC5maWxlbmFtZSwgXCIuanNvblwiKVxuICAgICAgaWYgKG9wdGlvbnMuZGF0YXNldCAmJiBkYXRhc2V0TmFtZSAhPT0gb3B0aW9ucy5kYXRhc2V0KSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX1fbmV0dG95ZS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGFuYWx5emVBbmRSZW1vdmUoZGF0YXNldE5hbWUsIG9wdGlvbnMpXG4gICAgICBjb25zdCBkYXRhc2V0UmF3RGlyOiBzdHJpbmcgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBjb25zdCBkYXRhc2V0Q2xlYW5EaXI6IHN0cmluZyA9IGRhdGFzZXRSYXdEaXIgKyBcIl9uZXR0b3llXCJcbiAgICAgIGZvciAoY29uc3QgcmV1bmlvblNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXRSYXdEaXIpKSB7XG4gICAgICAgIGNvbnN0IHJldW5pb25GaWxlbmFtZSA9IHJldW5pb25TcGxpdFBhdGhbcmV1bmlvblNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIXJldW5pb25GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXVuaW9uUmF3RmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldFJhd0RpciwgLi4ucmV1bmlvblNwbGl0UGF0aClcbiAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAgIENsZWFuaW5nIGZpbGU6ICR7cmV1bmlvblJhd0ZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmV1bmlvblJhd0pzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhyZXVuaW9uUmF3RmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IHJldW5pb24gPSBKU09OLnBhcnNlKHJldW5pb25SYXdKc29uKVxuICAgICAgICBjbGVhblJldW5pb24ocmV1bmlvbilcbiAgICAgICAgY29uc3QgcmV1bmlvbkpzb246IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KHJldW5pb24sIG51bGwsIDIpXG5cbiAgICAgICAgLy8gVmFsaWRhdGUgZ2VuZXJhdGVkIEpTT04uXG4gICAgICAgIGNvbnN0IHJldW5pb25DbGVhbjogUmV1bmlvbiA9IEFnZW5kYXNDb252ZXJ0LnRvUmV1bmlvbihyZXVuaW9uSnNvbilcbiAgICAgICAgY29uc3QgcmV1bmlvbkNsZWFuSnNvbjogc3RyaW5nID1cbiAgICAgICAgICBBZ2VuZGFzQ29udmVydC5yZXVuaW9uVG9Kc29uKHJldW5pb25DbGVhbilcblxuICAgICAgICBjb25zdCByZXVuaW9uQ2xlYW5GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgIGRhdGFzZXRDbGVhbkRpcixcbiAgICAgICAgICAuLi5yZXVuaW9uU3BsaXRQYXRoLFxuICAgICAgICApXG4gICAgICAgIGZzLmVuc3VyZURpclN5bmMocGF0aC5kaXJuYW1lKHJldW5pb25DbGVhbkZpbGVQYXRoKSlcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyhyZXVuaW9uQ2xlYW5GaWxlUGF0aCwgcmV1bmlvbkNsZWFuSnNvbiwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuY29tbWl0KSB7XG4gICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IGdpdC5jb21taXRBbmRQdXNoKFxuICAgICAgICAgIGRhdGFzZXRDbGVhbkRpcixcbiAgICAgICAgICBcIk5vdXZlbGxlIG1vaXNzb25cIixcbiAgICAgICAgICBvcHRpb25zLnJlbW90ZSxcbiAgICAgICAgKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgKGV4aXRDb2RlID09PSAxMCAmJiBlcnJvckNvZGUgIT09IDEwKSB8fFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMCAmJiBlcnJvckNvZGUgIT09IDAgJiYgZXJyb3JDb2RlICE9PSAxMClcbiAgICAgICAgKSB7XG4gICAgICAgICAgZXhpdENvZGUgPSBlcnJvckNvZGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBjb21taXRBbmRQdXNoVWlkKGRhdGFzZXRDbGVhbkRpciwgb3B0aW9ucywgW1wiLlwiXSkgJiZcbiAgICAgICAgKGV4aXRDb2RlID09PSAwIHx8IGV4aXRDb2RlID09PSAxMClcbiAgICAgICkge1xuICAgICAgICBleGl0Q29kZSA9IDFcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFtZW5kZW1lbnRzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGNob29zZW5EYXRhc2V0cy5hbWVuZGVtZW50cykge1xuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKGRhdGFzZXQuZmlsZW5hbWUsIFwiLmpzb25cIilcbiAgICAgIGlmIChvcHRpb25zLmRhdGFzZXQgJiYgZGF0YXNldE5hbWUgIT09IG9wdGlvbnMuZGF0YXNldCkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9X25ldHRveWUuZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBhbmFseXplQW5kUmVtb3ZlKGRhdGFzZXROYW1lLCBvcHRpb25zKVxuICAgICAgY29uc3QgZGF0YXNldFJhd0Rpcjogc3RyaW5nID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgY29uc3QgZGF0YXNldENsZWFuRGlyOiBzdHJpbmcgPSBkYXRhc2V0UmF3RGlyICsgXCJfbmV0dG95ZVwiXG4gICAgICBmb3IgKGNvbnN0IGFtZW5kZW1lbnRTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0UmF3RGlyKSkge1xuICAgICAgICBjb25zdCBhbWVuZGVtZW50RmlsZW5hbWUgPVxuICAgICAgICAgIGFtZW5kZW1lbnRTcGxpdFBhdGhbYW1lbmRlbWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIWFtZW5kZW1lbnRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbWVuZGVtZW50UmF3RmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgZGF0YXNldFJhd0RpcixcbiAgICAgICAgICAuLi5hbWVuZGVtZW50U3BsaXRQYXRoLFxuICAgICAgICApXG4gICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICBDbGVhbmluZyBmaWxlOiAke2FtZW5kZW1lbnRSYXdGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRSYXdKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgYW1lbmRlbWVudFJhd0ZpbGVQYXRoLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICB9LFxuICAgICAgICApXG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnQgPSBKU09OLnBhcnNlKGFtZW5kZW1lbnRSYXdKc29uKVxuICAgICAgICBjbGVhbkFtZW5kZW1lbnQoYW1lbmRlbWVudClcbiAgICAgICAgY29uc3QgYW1lbmRlbWVudEpzb246IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGFtZW5kZW1lbnQsIG51bGwsIDIpXG5cbiAgICAgICAgLy8gVmFsaWRhdGUgZ2VuZXJhdGVkIEpTT04uXG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRDbGVhbjogQW1lbmRlbWVudCA9XG4gICAgICAgICAgQW1lbmRlbWVudHNDb252ZXJ0LnRvQW1lbmRlbWVudChhbWVuZGVtZW50SnNvbilcbiAgICAgICAgY29uc3QgYW1lbmRlbWVudENsZWFuSnNvbjogc3RyaW5nID1cbiAgICAgICAgICBBbWVuZGVtZW50c0NvbnZlcnQuYW1lbmRlbWVudFRvSnNvbihhbWVuZGVtZW50Q2xlYW4pXG5cbiAgICAgICAgY29uc3QgYW1lbmRlbWVudENsZWFuRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICBkYXRhc2V0Q2xlYW5EaXIsXG4gICAgICAgICAgLi4uYW1lbmRlbWVudFNwbGl0UGF0aCxcbiAgICAgICAgKVxuICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZShhbWVuZGVtZW50Q2xlYW5GaWxlUGF0aCkpXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmMoYW1lbmRlbWVudENsZWFuRmlsZVBhdGgsIGFtZW5kZW1lbnRDbGVhbkpzb24sIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmNvbW1pdCkge1xuICAgICAgICBjb25zdCBlcnJvckNvZGUgPSBnaXQuY29tbWl0QW5kUHVzaChcbiAgICAgICAgICBkYXRhc2V0Q2xlYW5EaXIsXG4gICAgICAgICAgXCJOb3V2ZWxsZSBtb2lzc29uXCIsXG4gICAgICAgICAgb3B0aW9ucy5yZW1vdGUsXG4gICAgICAgIClcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMTAgJiYgZXJyb3JDb2RlICE9PSAxMCkgfHxcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDAgJiYgZXJyb3JDb2RlICE9PSAwICYmIGVycm9yQ29kZSAhPT0gMTApXG4gICAgICAgICkge1xuICAgICAgICAgIGV4aXRDb2RlID0gZXJyb3JDb2RlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgY29tbWl0QW5kUHVzaFVpZChkYXRhc2V0Q2xlYW5EaXIsIG9wdGlvbnMsIFtcIi5cIl0pICYmXG4gICAgICAgIChleGl0Q29kZSA9PT0gMCB8fCBleGl0Q29kZSA9PT0gMTApXG4gICAgICApIHtcbiAgICAgICAgZXhpdENvZGUgPSAxXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5Eb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGNob29zZW5EYXRhc2V0cy5kb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoZGF0YXNldC5maWxlbmFtZSwgXCIuanNvblwiKVxuICAgICAgaWYgKG9wdGlvbnMuZGF0YXNldCAmJiBkYXRhc2V0TmFtZSAhPT0gb3B0aW9ucy5kYXRhc2V0KSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX1fbmV0dG95ZS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGFuYWx5emVBbmRSZW1vdmUoZGF0YXNldE5hbWUsIG9wdGlvbnMpXG4gICAgICBjb25zdCBkYXRhc2V0UmF3RGlyOiBzdHJpbmcgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBjb25zdCBkYXRhc2V0Q2xlYW5EaXI6IHN0cmluZyA9IGRhdGFzZXRSYXdEaXIgKyBcIl9uZXR0b3llXCJcbiAgICAgIGZvciAoY29uc3QgZG9jdW1lbnRTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0UmF3RGlyLCBbXCJkb2N1bWVudHNcIl0pKSB7XG4gICAgICAgIGNvbnN0IGRvY3VtZW50RmlsZW5hbWUgPSBkb2N1bWVudFNwbGl0UGF0aFtkb2N1bWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIWRvY3VtZW50RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9jdW1lbnRSYXdGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICBkYXRhc2V0UmF3RGlyLFxuICAgICAgICAgIC4uLmRvY3VtZW50U3BsaXRQYXRoLFxuICAgICAgICApXG4gICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICBDbGVhbmluZyBmaWxlOiAke2RvY3VtZW50UmF3RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb2N1bWVudFJhd0pzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhkb2N1bWVudFJhd0ZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBkb2N1bWVudCA9IEpTT04ucGFyc2UoZG9jdW1lbnRSYXdKc29uKVxuICAgICAgICBjbGVhbkRvY3VtZW50T3JEaXZpc2lvbihkb2N1bWVudClcbiAgICAgICAgY29uc3QgZG9jdW1lbnRKc29uOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShkb2N1bWVudCwgbnVsbCwgMilcblxuICAgICAgICAvLyBWYWxpZGF0ZSBnZW5lcmF0ZWQgSlNPTi5cbiAgICAgICAgY29uc3QgZG9jdW1lbnRDbGVhbjogRG9jdW1lbnQgPVxuICAgICAgICAgIERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LnRvRG9jdW1lbnQoZG9jdW1lbnRKc29uKVxuICAgICAgICBjb25zdCBkb2N1bWVudENsZWFuSnNvbjogc3RyaW5nID1cbiAgICAgICAgICBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC5kb2N1bWVudFRvSnNvbihkb2N1bWVudENsZWFuKVxuXG4gICAgICAgIGNvbnN0IGRvY3VtZW50Q2xlYW5GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgIGRhdGFzZXRDbGVhbkRpcixcbiAgICAgICAgICAuLi5kb2N1bWVudFNwbGl0UGF0aCxcbiAgICAgICAgKVxuICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZShkb2N1bWVudENsZWFuRmlsZVBhdGgpKVxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKGRvY3VtZW50Q2xlYW5GaWxlUGF0aCwgZG9jdW1lbnRDbGVhbkpzb24sIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgZG9zc2llclNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXRSYXdEaXIsIFtcImRvc3NpZXJzXCJdKSkge1xuICAgICAgICBjb25zdCBkb3NzaWVyRmlsZW5hbWUgPSBkb3NzaWVyU3BsaXRQYXRoW2Rvc3NpZXJTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFkb3NzaWVyRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9zc2llclJhd0ZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXRSYXdEaXIsIC4uLmRvc3NpZXJTcGxpdFBhdGgpXG4gICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICBDbGVhbmluZyBmaWxlOiAke2Rvc3NpZXJSYXdGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvc3NpZXJSYXdKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoZG9zc2llclJhd0ZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBkb3NzaWVyID0gSlNPTi5wYXJzZShkb3NzaWVyUmF3SnNvbilcbiAgICAgICAgY2xlYW5Eb3NzaWVyUGFybGVtZW50YWlyZShkb3NzaWVyKVxuICAgICAgICBjb25zdCBkb3NzaWVySnNvbjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoZG9zc2llciwgbnVsbCwgMilcblxuICAgICAgICAvLyBWYWxpZGF0ZSBnZW5lcmF0ZWQgSlNPTi5cbiAgICAgICAgY29uc3QgZG9zc2llckNsZWFuOiBEb3NzaWVyUGFybGVtZW50YWlyZSA9XG4gICAgICAgICAgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQudG9Eb3NzaWVyUGFybGVtZW50YWlyZShkb3NzaWVySnNvbilcbiAgICAgICAgY29uc3QgZG9zc2llckNsZWFuSnNvbjogc3RyaW5nID1cbiAgICAgICAgICBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC5kb3NzaWVyUGFybGVtZW50YWlyZVRvSnNvbihkb3NzaWVyQ2xlYW4pXG5cbiAgICAgICAgY29uc3QgZG9zc2llckNsZWFuRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICBkYXRhc2V0Q2xlYW5EaXIsXG4gICAgICAgICAgLi4uZG9zc2llclNwbGl0UGF0aCxcbiAgICAgICAgKVxuICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZShkb3NzaWVyQ2xlYW5GaWxlUGF0aCkpXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmMoZG9zc2llckNsZWFuRmlsZVBhdGgsIGRvc3NpZXJDbGVhbkpzb24sIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmNvbW1pdCkge1xuICAgICAgICBjb25zdCBlcnJvckNvZGUgPSBnaXQuY29tbWl0QW5kUHVzaChcbiAgICAgICAgICBkYXRhc2V0Q2xlYW5EaXIsXG4gICAgICAgICAgXCJOb3V2ZWxsZSBtb2lzc29uXCIsXG4gICAgICAgICAgb3B0aW9ucy5yZW1vdGUsXG4gICAgICAgIClcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMTAgJiYgZXJyb3JDb2RlICE9PSAxMCkgfHxcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDAgJiYgZXJyb3JDb2RlICE9PSAwICYmIGVycm9yQ29kZSAhPT0gMTApXG4gICAgICAgICkge1xuICAgICAgICAgIGV4aXRDb2RlID0gZXJyb3JDb2RlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgY29tbWl0QW5kUHVzaFVpZChkYXRhc2V0Q2xlYW5EaXIsIG9wdGlvbnMsIFtcImRvY3VtZW50c1wiLCBcImRvc3NpZXJzXCJdKSAmJlxuICAgICAgICAoZXhpdENvZGUgPT09IDAgfHwgZXhpdENvZGUgPT09IDEwKVxuICAgICAgKSB7XG4gICAgICAgIGV4aXRDb2RlID0gMVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuU2NydXRpbnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgY2hvb3NlbkRhdGFzZXRzLnNjcnV0aW5zKSB7XG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoZGF0YXNldC5maWxlbmFtZSwgXCIuanNvblwiKVxuICAgICAgaWYgKG9wdGlvbnMuZGF0YXNldCAmJiBkYXRhc2V0TmFtZSAhPT0gb3B0aW9ucy5kYXRhc2V0KSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX1fbmV0dG95ZS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGFuYWx5emVBbmRSZW1vdmUoZGF0YXNldE5hbWUsIG9wdGlvbnMpXG4gICAgICBjb25zdCBkYXRhc2V0UmF3RGlyOiBzdHJpbmcgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBjb25zdCBkYXRhc2V0Q2xlYW5EaXI6IHN0cmluZyA9IGRhdGFzZXRSYXdEaXIgKyBcIl9uZXR0b3llXCJcbiAgICAgIGZvciAoY29uc3Qgc2NydXRpblNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXRSYXdEaXIpKSB7XG4gICAgICAgIGNvbnN0IHNjcnV0aW5GaWxlbmFtZSA9IHNjcnV0aW5TcGxpdFBhdGhbc2NydXRpblNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIXNjcnV0aW5GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzY3J1dGluUmF3RmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldFJhd0RpciwgLi4uc2NydXRpblNwbGl0UGF0aClcbiAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAgIENsZWFuaW5nIGZpbGU6ICR7c2NydXRpblJhd0ZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2NydXRpblJhd0pzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhzY3J1dGluUmF3RmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IHNjcnV0aW4gPSBKU09OLnBhcnNlKHNjcnV0aW5SYXdKc29uKVxuICAgICAgICBjbGVhblNjcnV0aW4oc2NydXRpbilcbiAgICAgICAgY29uc3Qgc2NydXRpbkpzb246IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KHNjcnV0aW4sIG51bGwsIDIpXG5cbiAgICAgICAgLy8gVmFsaWRhdGUgZ2VuZXJhdGVkIEpTT04uXG4gICAgICAgIGNvbnN0IHNjcnV0aW5DbGVhbjogU2NydXRpbiA9IFNjcnV0aW5zQ29udmVydC50b1NjcnV0aW4oc2NydXRpbkpzb24pXG4gICAgICAgIGNvbnN0IHNjcnV0aW5DbGVhbkpzb246IHN0cmluZyA9XG4gICAgICAgICAgU2NydXRpbnNDb252ZXJ0LnNjcnV0aW5Ub0pzb24oc2NydXRpbkNsZWFuKVxuXG4gICAgICAgIGNvbnN0IHNjcnV0aW5DbGVhbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgZGF0YXNldENsZWFuRGlyLFxuICAgICAgICAgIC4uLnNjcnV0aW5TcGxpdFBhdGgsXG4gICAgICAgIClcbiAgICAgICAgZnMuZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUoc2NydXRpbkNsZWFuRmlsZVBhdGgpKVxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHNjcnV0aW5DbGVhbkZpbGVQYXRoLCBzY3J1dGluQ2xlYW5Kc29uLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb21taXQpIHtcbiAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gZ2l0LmNvbW1pdEFuZFB1c2goXG4gICAgICAgICAgZGF0YXNldENsZWFuRGlyLFxuICAgICAgICAgIFwiTm91dmVsbGUgbW9pc3NvblwiLFxuICAgICAgICAgIG9wdGlvbnMucmVtb3RlLFxuICAgICAgICApXG4gICAgICAgIGlmIChcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDEwICYmIGVycm9yQ29kZSAhPT0gMTApIHx8XG4gICAgICAgICAgKGV4aXRDb2RlID09PSAwICYmIGVycm9yQ29kZSAhPT0gMCAmJiBlcnJvckNvZGUgIT09IDEwKVxuICAgICAgICApIHtcbiAgICAgICAgICBleGl0Q29kZSA9IGVycm9yQ29kZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGNvbW1pdEFuZFB1c2hVaWQoZGF0YXNldENsZWFuRGlyLCBvcHRpb25zLCBbXCIuXCJdKSAmJlxuICAgICAgICAoZXhpdENvZGUgPT09IDAgfHwgZXhpdENvZGUgPT09IDEwKVxuICAgICAgKSB7XG4gICAgICAgIGV4aXRDb2RlID0gMVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuUXVlc3Rpb25zKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLnF1ZXN0aW9ucykge1xuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKGRhdGFzZXQuZmlsZW5hbWUsIFwiLmpzb25cIilcbiAgICAgIGlmIChvcHRpb25zLmRhdGFzZXQgJiYgZGF0YXNldE5hbWUgIT09IG9wdGlvbnMuZGF0YXNldCkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9X25ldHRveWUuZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBhbmFseXplQW5kUmVtb3ZlKGRhdGFzZXROYW1lLCBvcHRpb25zKVxuICAgICAgY29uc3QgZGF0YXNldFJhd0Rpcjogc3RyaW5nID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgY29uc3QgZGF0YXNldENsZWFuRGlyOiBzdHJpbmcgPSBkYXRhc2V0UmF3RGlyICsgXCJfbmV0dG95ZVwiXG4gICAgICBmb3IgKGNvbnN0IHF1ZXN0aW9uc1NwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXRSYXdEaXIpKSB7XG4gICAgICAgIGNvbnN0IHF1ZXN0aW9uRmlsZW5hbWUgPVxuICAgICAgICAgIHF1ZXN0aW9uc1NwbGl0UGF0aFtxdWVzdGlvbnNTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFxdWVzdGlvbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHF1ZXN0aW9uUmF3RmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgZGF0YXNldFJhd0RpcixcbiAgICAgICAgICAuLi5xdWVzdGlvbnNTcGxpdFBhdGgsXG4gICAgICAgIClcbiAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAgIENsZWFuaW5nIGZpbGU6ICR7cXVlc3Rpb25SYXdGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHF1ZXN0aW9uUmF3SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHF1ZXN0aW9uUmF3RmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IHF1ZXN0aW9uID0gSlNPTi5wYXJzZShxdWVzdGlvblJhd0pzb24pXG4gICAgICAgIGNsZWFuUXVlc3Rpb24ocXVlc3Rpb24pXG4gICAgICAgIGNvbnN0IHF1ZXN0aW9uSnNvbjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkocXVlc3Rpb24sIG51bGwsIDIpXG5cbiAgICAgICAgLy8gVmFsaWRhdGUgZ2VuZXJhdGVkIEpTT04uXG4gICAgICAgIGNvbnN0IHF1ZXN0aW9uQ2xlYW46IFF1ZXN0aW9uID1cbiAgICAgICAgICBRdWVzdGlvbnNDb252ZXJ0LnRvUXVlc3Rpb24ocXVlc3Rpb25Kc29uKVxuICAgICAgICBjb25zdCBxdWVzdGlvbkNsZWFuSnNvbjogc3RyaW5nID1cbiAgICAgICAgICBRdWVzdGlvbnNDb252ZXJ0LnF1ZXN0aW9uVG9Kc29uKHF1ZXN0aW9uQ2xlYW4pXG5cbiAgICAgICAgY29uc3QgcXVlc3Rpb25DbGVhbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgZGF0YXNldENsZWFuRGlyLFxuICAgICAgICAgIC4uLnF1ZXN0aW9uc1NwbGl0UGF0aCxcbiAgICAgICAgKVxuICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZShxdWVzdGlvbkNsZWFuRmlsZVBhdGgpKVxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHF1ZXN0aW9uQ2xlYW5GaWxlUGF0aCwgcXVlc3Rpb25DbGVhbkpzb24sIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmNvbW1pdCkge1xuICAgICAgICBjb25zdCBlcnJvckNvZGUgPSBnaXQuY29tbWl0QW5kUHVzaChcbiAgICAgICAgICBkYXRhc2V0Q2xlYW5EaXIsXG4gICAgICAgICAgXCJOb3V2ZWxsZSBtb2lzc29uXCIsXG4gICAgICAgICAgb3B0aW9ucy5yZW1vdGUsXG4gICAgICAgIClcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMTAgJiYgZXJyb3JDb2RlICE9PSAxMCkgfHxcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDAgJiYgZXJyb3JDb2RlICE9PSAwICYmIGVycm9yQ29kZSAhPT0gMTApXG4gICAgICAgICkge1xuICAgICAgICAgIGV4aXRDb2RlID0gZXJyb3JDb2RlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgY29tbWl0QW5kUHVzaFVpZChkYXRhc2V0Q2xlYW5EaXIsIG9wdGlvbnMsIFtcIi5cIl0pICYmXG4gICAgICAgIChleGl0Q29kZSA9PT0gMCB8fCBleGl0Q29kZSA9PT0gMTApXG4gICAgICApIHtcbiAgICAgICAgZXhpdENvZGUgPSAxXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5Db21wdGVzUmVuZHVzU2VhbmNlcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5jb21wdGVzUmVuZHVzU2VhbmNlcykge1xuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKGRhdGFzZXQuZmlsZW5hbWUsIFwiLnhtbFwiKVxuICAgICAgaWYgKG9wdGlvbnMuZGF0YXNldCAmJiBkYXRhc2V0TmFtZSAhPT0gb3B0aW9ucy5kYXRhc2V0KSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX1fbmV0dG95ZS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGFuYWx5emVBbmRSZW1vdmUoZGF0YXNldE5hbWUsIG9wdGlvbnMpXG4gICAgICBjb25zdCBkYXRhc2V0UmF3RGlyOiBzdHJpbmcgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBjb25zdCBkYXRhc2V0Q2xlYW5EaXI6IHN0cmluZyA9IGRhdGFzZXRSYXdEaXIgKyBcIl9uZXR0b3llXCJcbiAgICAgIGZvciAoY29uc3QgY29tcHRlc1JlbmR1c1NwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXRSYXdEaXIpKSB7XG4gICAgICAgIGNvbnN0IGNvbXB0ZVJlbmR1RmlsZW5hbWUgPVxuICAgICAgICAgIGNvbXB0ZXNSZW5kdXNTcGxpdFBhdGhbY29tcHRlc1JlbmR1c1NwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIWNvbXB0ZVJlbmR1RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcHRlUmVuZHVSYXdGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICBkYXRhc2V0UmF3RGlyLFxuICAgICAgICAgIC4uLmNvbXB0ZXNSZW5kdXNTcGxpdFBhdGgsXG4gICAgICAgIClcbiAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAgIENsZWFuaW5nIGZpbGU6ICR7Y29tcHRlUmVuZHVSYXdGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbXB0ZVJlbmR1UmF3SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgIGNvbXB0ZVJlbmR1UmF3RmlsZVBhdGgsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIClcbiAgICAgICAgY29uc3QgY29tcHRlUmVuZHUgPSBKU09OLnBhcnNlKGNvbXB0ZVJlbmR1UmF3SnNvbilcbiAgICAgICAgY2xlYW5Db21wdGVSZW5kdShjb21wdGVSZW5kdSlcbiAgICAgICAgY29uc3QgY29tcHRlUmVuZHVKc29uOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShjb21wdGVSZW5kdSwgbnVsbCwgMilcblxuICAgICAgICAvLyBWYWxpZGF0ZSBnZW5lcmF0ZWQgSlNPTi5cbiAgICAgICAgY29uc3QgY29tcHRlUmVuZHVDbGVhbjogQ29tcHRlUmVuZHUgPVxuICAgICAgICAgIENvbXB0ZXNSZW5kdXNDb252ZXJ0LnRvQ29tcHRlUmVuZHUoY29tcHRlUmVuZHVKc29uKVxuICAgICAgICBjb25zdCBjb21wdGVSZW5kdUNsZWFuSnNvbjogc3RyaW5nID1cbiAgICAgICAgICBDb21wdGVzUmVuZHVzQ29udmVydC5jb21wdGVSZW5kdVRvSnNvbihjb21wdGVSZW5kdUNsZWFuKVxuXG4gICAgICAgIGNvbnN0IGNvbXB0ZVJlbmR1Q2xlYW5GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgIGRhdGFzZXRDbGVhbkRpcixcbiAgICAgICAgICAuLi5jb21wdGVzUmVuZHVzU3BsaXRQYXRoLFxuICAgICAgICApXG4gICAgICAgIGZzLmVuc3VyZURpclN5bmMocGF0aC5kaXJuYW1lKGNvbXB0ZVJlbmR1Q2xlYW5GaWxlUGF0aCkpXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmMoY29tcHRlUmVuZHVDbGVhbkZpbGVQYXRoLCBjb21wdGVSZW5kdUNsZWFuSnNvbiwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuY29tbWl0KSB7XG4gICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IGdpdC5jb21taXRBbmRQdXNoKFxuICAgICAgICAgIGRhdGFzZXRDbGVhbkRpcixcbiAgICAgICAgICBcIk5vdXZlbGxlIG1vaXNzb25cIixcbiAgICAgICAgICBvcHRpb25zLnJlbW90ZSxcbiAgICAgICAgKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgKGV4aXRDb2RlID09PSAxMCAmJiBlcnJvckNvZGUgIT09IDEwKSB8fFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMCAmJiBlcnJvckNvZGUgIT09IDAgJiYgZXJyb3JDb2RlICE9PSAxMClcbiAgICAgICAgKSB7XG4gICAgICAgICAgZXhpdENvZGUgPSBlcnJvckNvZGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBjb21taXRBbmRQdXNoVWlkKGRhdGFzZXRDbGVhbkRpciwgb3B0aW9ucywgW1wiLlwiXSkgJiZcbiAgICAgICAgKGV4aXRDb2RlID09PSAwIHx8IGV4aXRDb2RlID09PSAxMClcbiAgICAgICkge1xuICAgICAgICBleGl0Q29kZSA9IDFcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBSZXN0b3JlIHN0YW5kYXJkIGNvbnZlcnNpb24gb2YgZGF0ZXMgdG8gSlNPTi5cbiAgRGF0ZS5wcm90b3R5cGUudG9KU09OID0gZXhpc3RpbmdEYXRlVG9Kc29uXG5cbiAgcmV0dXJuIGV4aXRDb2RlXG59XG5cbmZ1bmN0aW9uIGFuYWx5emVBbmRSZW1vdmUoZGF0YXNldE5hbWU6IHN0cmluZywgb3B0aW9uczogYW55KTogYW55IHtcbiAgY29uc3QgZGF0YURpciA9IG9wdGlvbnMuZGF0YURpclxuICBjb25zdCBkYXRhc2V0UmF3RGlyOiBzdHJpbmcgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gIGNvbnN0IGRhdGFzZXRDbGVhbkRpcjogc3RyaW5nID0gZGF0YXNldFJhd0RpciArIFwiX25ldHRveWVcIlxuICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgY29uc29sZS5sb2coYENsZWFuaW5nIGRpcmVjdG9yeTogJHtkYXRhc2V0Q2xlYW5EaXJ94oCmYClcbiAgfVxuICBmcy5lbnN1cmVEaXJTeW5jKGRhdGFzZXRDbGVhbkRpcilcbiAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkYXRhc2V0Q2xlYW5EaXIpKSB7XG4gICAgaWYgKGZpbGVuYW1lWzBdID09PSBcIi5cIikge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3QgcGF0aG5hbWUgPSBwYXRoLmpvaW4oZGF0YXNldENsZWFuRGlyLCBmaWxlbmFtZSlcbiAgICBmcy5yZW1vdmVTeW5jKHBhdGhuYW1lKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdEFuZFB1c2hVaWQoXG4gIHJlcG9zaXRvcnlEaXI6IHN0cmluZyxcbiAgb3B0aW9uczogYW55LFxuICBzdWJkaXJlY3RvcmllczogYW55LFxuKTogYm9vbGVhbiB7XG4gIGxldCBlcnJvciA9IGZhbHNlXG4gIGlmIChvcHRpb25zLmNvbW1pdCkge1xuICAgIGdpdC51aWRCcmFuY2hVcGRhdGUoXG4gICAgICByZXBvc2l0b3J5RGlyLFxuICAgICAgc3ViZGlyZWN0b3JpZXMsXG4gICAgICBvcHRpb25zW1wibm8tcmVzZXQtYWZ0ZXItY29tbWl0XCJdLFxuICAgIClcbiAgICBmb3IgKGNvbnN0IHJlbW90ZSBvZiBvcHRpb25zLnJlbW90ZSB8fCBbXSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZ2l0LnJ1bihyZXBvc2l0b3J5RGlyLCBgcHVzaCAtLXF1aWV0ICR7cmVtb3RlfSB1aWQ6dWlkYClcbiAgICAgIH0gY2F0Y2ggKGNoaWxkUHJvY2Vzcykge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGVycm9yXG59XG5cbmZ1bmN0aW9uIG1haW4oYXJndjogYW55KTogbnVtYmVyIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHBhcnNlQXJncyhhcmd2KVxuICByZXR1cm4gY2xlYW5SZW9yZ2FuaXplZERhdGEob3B0aW9ucylcbn1cblxuLyogaXN0YW5idWwgaWdub3JlIGlmICovXG5pZiAocHJvY2Vzcy5hcmd2WzFdLmVuZHNXaXRoKFwiY2xlYW5fcmVvcmdhbml6ZWRfZGF0YS50c1wiKSlcbiAgcHJvY2Vzcy5leGl0KG1haW4ocHJvY2Vzcy5hcmd2KSlcbiJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsTUFBTSxNQUFNLFFBQVE7QUFDM0IsU0FBU0MsUUFBUSxRQUFRLGVBQWU7QUFDeEMsT0FBT0MsZUFBZSxNQUFNLG1CQUFtQjtBQUMvQyxPQUFPQyxFQUFFLE1BQU0sVUFBVTtBQUN6QixPQUFPQyxJQUFJLE1BQU0sTUFBTTtBQUFBLFNBR3JCQyxXQUFXLEVBQ1hDLGVBQWUsRUFDZkMsdUJBQXVCLEVBQ3ZCQyx5QkFBeUIsRUFDekJDLFdBQVcsRUFDWEMsWUFBWSxFQUNaQyxZQUFZLEVBQ1pDLGFBQWEsRUFDYkMsZ0JBQWdCO0FBQUEsU0FFVEMsUUFBUSxFQUFFQyxlQUFlO0FBQUEsU0FDekJDLGtCQUFrQixFQUFFQyxpQkFBaUI7QUFBQSxTQUNyQ0MsT0FBTztBQUFBLE9BQ1QsS0FBS0MsR0FBRztBQUFBLFNBR2JDLE9BQU8sSUFBSUMsdUJBQXVCO0FBQUEsU0FHM0JELE9BQU8sSUFBSUUsY0FBYztBQUFBLFNBQ2JGLE9BQU8sSUFBSUcsa0JBQWtCO0FBQUEsU0FFaERILE9BQU8sSUFBSUksMEJBQTBCO0FBQUEsU0FJOUJDLFdBQVc7QUFBQSxT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
|
|
568
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhc3NlcnQiLCJleGVjU3luYyIsImNvbW1hbmRMaW5lQXJncyIsImZzIiwicGF0aCIsImNsZWFuQWN0ZXVyIiwiY2xlYW5BbWVuZGVtZW50IiwiY2xlYW5Eb2N1bWVudE9yRGl2aXNpb24iLCJjbGVhbkRvc3NpZXJQYXJsZW1lbnRhaXJlIiwiY2xlYW5PcmdhbmUiLCJjbGVhblJldW5pb24iLCJjbGVhblNjcnV0aW4iLCJjbGVhblF1ZXN0aW9uIiwiY2xlYW5Db21wdGVSZW5kdSIsImRhdGFzZXRzIiwiRW5hYmxlZERhdGFzZXRzIiwiZmlsdGVyQnlMZWdpc2xhdHVyZSIsImV4aXN0aW5nRGF0ZVRvSnNvbiIsInBhdGNoZWREYXRlVG9Kc29uIiwid2Fsa0RpciIsImdpdCIsIkNvbnZlcnQiLCJBY3RldXJzRXRPcmdhbmVzQ29udmVydCIsIkFnZW5kYXNDb252ZXJ0IiwiQW1lbmRlbWVudHNDb252ZXJ0IiwiRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQiLCJTY3J1dGluc0NvbnZlcnQiLCJRdWVzdGlvbnNDb252ZXJ0IiwiQ29tcHRlc1JlbmR1c0NvbnZlcnQiLCJwYXJzZUFyZ3MiLCJhcmd2Iiwib3B0aW9uc0RlZmluaXRpb25zIiwiYWxpYXMiLCJoZWxwIiwibmFtZSIsInR5cGUiLCJTdHJpbmciLCJCb29sZWFuIiwiZGVmYXVsdFZhbHVlIiwibXVsdGlwbGUiLCJOdW1iZXIiLCJkZWZhdWx0T3B0aW9uIiwib3B0aW9ucyIsImNsZWFuUmVvcmdhbml6ZWREYXRhIiwiZGF0YURpciIsIkRhdGUiLCJwcm90b3R5cGUiLCJ0b0pTT04iLCJleGl0Q29kZSIsImdpdEdyb3VwVXJsIiwiY2xvbmUiLCJ0cmltIiwicmVwbGFjZSIsInVuZGVmaW5lZCIsImNhdGVnb3JpZXMiLCJtYXAiLCJkYXRhc2V0TmFtZSIsIm5vdFN0cmljdEVxdWFsIiwiZW5hYmxlZERhdGFzZXRzIiwicmVkdWNlIiwiTm9uZSIsImNob3NlbkRhdGFzZXRzIiwibGVnaXNsYXR1cmUiLCJBY3RldXJzRXRPcmdhbmVzIiwiZGF0YXNldCIsImFjdGV1cnNFdE9yZ2FuZXMiLCJiYXNlbmFtZSIsImZpbGVuYW1lIiwiY3dkIiwiZW52IiwicHJvY2VzcyIsImVuY29kaW5nIiwic3RkaW8iLCJkYXRhc2V0UmF3RGlyIiwiam9pbiIsImRhdGFzZXRDbGVhbkRpciIsInB1bGwiLCJhbmFseXplQW5kUmVtb3ZlIiwiYWN0ZXVyU3BsaXRQYXRoIiwiYWN0ZXVyRmlsZW5hbWUiLCJsZW5ndGgiLCJlbmRzV2l0aCIsImFjdGV1clJhd0ZpbGVQYXRoIiwidmVyYm9zZSIsImNvbnNvbGUiLCJsb2ciLCJhY3RldXJSYXdKc29uIiwicmVhZEZpbGVTeW5jIiwiYWN0ZXVyIiwiSlNPTiIsInBhcnNlIiwiYWN0ZXVySnNvbiIsInN0cmluZ2lmeSIsImFjdGV1ckNsZWFuIiwidG9BY3RldXIiLCJhY3RldXJDbGVhbkpzb24iLCJhY3RldXJUb0pzb24iLCJhY3RldXJDbGVhbkZpbGVQYXRoIiwiZW5zdXJlRGlyU3luYyIsImRpcm5hbWUiLCJ3cml0ZUZpbGVTeW5jIiwib3JnYW5lU3BsaXRQYXRoIiwib3JnYW5lRmlsZW5hbWUiLCJvcmdhbmVSYXdGaWxlUGF0aCIsIm9yZ2FuZVJhd0pzb24iLCJvcmdhbmUiLCJvcmdhbmVKc29uIiwib3JnYW5lQ2xlYW4iLCJ0b09yZ2FuZSIsIm9yZ2FuZUNsZWFuSnNvbiIsIm9yZ2FuZVRvSnNvbiIsIm9yZ2FuZUNsZWFuRmlsZVBhdGgiLCJjb21taXQiLCJlcnJvckNvZGUiLCJjb21taXRBbmRQdXNoIiwicmVtb3RlIiwiY29tbWl0QW5kUHVzaFVpZCIsIkFnZW5kYXMiLCJhZ2VuZGFzIiwicmV1bmlvblNwbGl0UGF0aCIsInJldW5pb25GaWxlbmFtZSIsInJldW5pb25SYXdGaWxlUGF0aCIsInJldW5pb25SYXdKc29uIiwicmV1bmlvbiIsInJldW5pb25Kc29uIiwicmV1bmlvbkNsZWFuIiwidG9SZXVuaW9uIiwicmV1bmlvbkNsZWFuSnNvbiIsInJldW5pb25Ub0pzb24iLCJyZXVuaW9uQ2xlYW5GaWxlUGF0aCIsIkFtZW5kZW1lbnRzIiwiYW1lbmRlbWVudHMiLCJhbWVuZGVtZW50U3BsaXRQYXRoIiwiYW1lbmRlbWVudEZpbGVuYW1lIiwiYW1lbmRlbWVudFJhd0ZpbGVQYXRoIiwiYW1lbmRlbWVudFJhd0pzb24iLCJhbWVuZGVtZW50IiwiYW1lbmRlbWVudEpzb24iLCJhbWVuZGVtZW50Q2xlYW4iLCJ0b0FtZW5kZW1lbnQiLCJhbWVuZGVtZW50Q2xlYW5Kc29uIiwiYW1lbmRlbWVudFRvSnNvbiIsImFtZW5kZW1lbnRDbGVhbkZpbGVQYXRoIiwiRG9zc2llcnNMZWdpc2xhdGlmcyIsImRvc3NpZXJzTGVnaXNsYXRpZnMiLCJkb2N1bWVudFNwbGl0UGF0aCIsImRvY3VtZW50RmlsZW5hbWUiLCJkb2N1bWVudFJhd0ZpbGVQYXRoIiwiZG9jdW1lbnRSYXdKc29uIiwiZG9jdW1lbnQiLCJkb2N1bWVudEpzb24iLCJkb2N1bWVudENsZWFuIiwidG9Eb2N1bWVudCIsImRvY3VtZW50Q2xlYW5Kc29uIiwiZG9jdW1lbnRUb0pzb24iLCJkb2N1bWVudENsZWFuRmlsZVBhdGgiLCJkb3NzaWVyU3BsaXRQYXRoIiwiZG9zc2llckZpbGVuYW1lIiwiZG9zc2llclJhd0ZpbGVQYXRoIiwiZG9zc2llclJhd0pzb24iLCJkb3NzaWVyIiwiZG9zc2llckpzb24iLCJkb3NzaWVyQ2xlYW4iLCJ0b0Rvc3NpZXJQYXJsZW1lbnRhaXJlIiwiZG9zc2llckNsZWFuSnNvbiIsImRvc3NpZXJQYXJsZW1lbnRhaXJlVG9Kc29uIiwiZG9zc2llckNsZWFuRmlsZVBhdGgiLCJTY3J1dGlucyIsInNjcnV0aW5zIiwic2NydXRpblNwbGl0UGF0aCIsInNjcnV0aW5GaWxlbmFtZSIsInNjcnV0aW5SYXdGaWxlUGF0aCIsInNjcnV0aW5SYXdKc29uIiwic2NydXRpbiIsInNjcnV0aW5Kc29uIiwic2NydXRpbkNsZWFuIiwidG9TY3J1dGluIiwic2NydXRpbkNsZWFuSnNvbiIsInNjcnV0aW5Ub0pzb24iLCJzY3J1dGluQ2xlYW5GaWxlUGF0aCIsIlF1ZXN0aW9ucyIsInF1ZXN0aW9ucyIsInF1ZXN0aW9uc1NwbGl0UGF0aCIsInF1ZXN0aW9uRmlsZW5hbWUiLCJxdWVzdGlvblJhd0ZpbGVQYXRoIiwicXVlc3Rpb25SYXdKc29uIiwicXVlc3Rpb24iLCJxdWVzdGlvbkpzb24iLCJxdWVzdGlvbkNsZWFuIiwidG9RdWVzdGlvbiIsInF1ZXN0aW9uQ2xlYW5Kc29uIiwicXVlc3Rpb25Ub0pzb24iLCJxdWVzdGlvbkNsZWFuRmlsZVBhdGgiLCJDb21wdGVzUmVuZHVzU2VhbmNlcyIsImNvbXB0ZXNSZW5kdXNTZWFuY2VzIiwiY29tcHRlc1JlbmR1c1NwbGl0UGF0aCIsImNvbXB0ZVJlbmR1RmlsZW5hbWUiLCJjb21wdGVSZW5kdVJhd0ZpbGVQYXRoIiwiY29tcHRlUmVuZHVSYXdKc29uIiwiY29tcHRlUmVuZHUiLCJjb21wdGVSZW5kdUpzb24iLCJjb21wdGVSZW5kdUNsZWFuIiwidG9Db21wdGVSZW5kdSIsImNvbXB0ZVJlbmR1Q2xlYW5Kc29uIiwiY29tcHRlUmVuZHVUb0pzb24iLCJjb21wdGVSZW5kdUNsZWFuRmlsZVBhdGgiLCJzaWxlbnQiLCJyZWFkZGlyU3luYyIsInBhdGhuYW1lIiwicmVtb3ZlU3luYyIsInJlcG9zaXRvcnlEaXIiLCJzdWJkaXJlY3RvcmllcyIsImVycm9yIiwidWlkQnJhbmNoVXBkYXRlIiwicnVuIiwiY2hpbGRQcm9jZXNzIiwibWFpbiIsImV4aXQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyaXB0cy9jbGVhbl9yZW9yZ2FuaXplZF9kYXRhLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiXG5pbXBvcnQgeyBleGVjU3luYyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCJcbmltcG9ydCBjb21tYW5kTGluZUFyZ3MgZnJvbSBcImNvbW1hbmQtbGluZS1hcmdzXCJcbmltcG9ydCBmcyBmcm9tIFwiZnMtZXh0cmFcIlxuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIlxuXG5pbXBvcnQge1xuICBjbGVhbkFjdGV1cixcbiAgY2xlYW5BbWVuZGVtZW50LFxuICBjbGVhbkRvY3VtZW50T3JEaXZpc2lvbixcbiAgY2xlYW5Eb3NzaWVyUGFybGVtZW50YWlyZSxcbiAgY2xlYW5PcmdhbmUsXG4gIGNsZWFuUmV1bmlvbixcbiAgY2xlYW5TY3J1dGluLFxuICBjbGVhblF1ZXN0aW9uLFxuICBjbGVhbkNvbXB0ZVJlbmR1LFxufSBmcm9tIFwiLi4vY2xlYW5lcnNcIlxuaW1wb3J0IHsgZGF0YXNldHMsIEVuYWJsZWREYXRhc2V0cywgZmlsdGVyQnlMZWdpc2xhdHVyZSB9IGZyb20gXCIuLi9kYXRhc2V0c1wiXG5pbXBvcnQgeyBleGlzdGluZ0RhdGVUb0pzb24sIHBhdGNoZWREYXRlVG9Kc29uIH0gZnJvbSBcIi4uL2RhdGVzXCJcbmltcG9ydCB7IHdhbGtEaXIgfSBmcm9tIFwiLi4vZmlsZV9zeXN0ZW1zXCJcbmltcG9ydCAqIGFzIGdpdCBmcm9tIFwiLi4vZ2l0XCJcbmltcG9ydCB7XG4gIEFjdGV1cixcbiAgQ29udmVydCBhcyBBY3RldXJzRXRPcmdhbmVzQ29udmVydCxcbiAgT3JnYW5lLFxufSBmcm9tIFwiLi4vdHlwZXMvYWN0ZXVyc19ldF9vcmdhbmVzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQWdlbmRhc0NvbnZlcnQsIFJldW5pb24gfSBmcm9tIFwiLi4vdHlwZXMvYWdlbmRhc1wiXG5pbXBvcnQgeyBBbWVuZGVtZW50LCBDb252ZXJ0IGFzIEFtZW5kZW1lbnRzQ29udmVydCB9IGZyb20gXCIuLi90eXBlcy9hbWVuZGVtZW50c1wiXG5pbXBvcnQge1xuICBDb252ZXJ0IGFzIERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LFxuICBEb2N1bWVudCxcbiAgRG9zc2llclBhcmxlbWVudGFpcmUsXG59IGZyb20gXCIuLi90eXBlcy9kb3NzaWVyc19sZWdpc2xhdGlmc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIFNjcnV0aW5zQ29udmVydCwgU2NydXRpbiB9IGZyb20gXCIuLi90eXBlcy9zY3J1dGluc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIFF1ZXN0aW9uc0NvbnZlcnQsIFF1ZXN0aW9uIH0gZnJvbSBcIi4uL3R5cGVzL3F1ZXN0aW9uc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIENvbXB0ZXNSZW5kdXNDb252ZXJ0LCBDb21wdGVSZW5kdSB9IGZyb20gXCIuLi90eXBlcy9kZWJhdHNcIlxuXG5mdW5jdGlvbiBwYXJzZUFyZ3MoYXJndjogc3RyaW5nW10pOiBhbnkge1xuICBjb25zdCBvcHRpb25zRGVmaW5pdGlvbnMgPSBbXG4gICAge1xuICAgICAgYWxpYXM6IFwiQ1wiLFxuICAgICAgaGVscDogXCJjbG9uZSByZXBvc2l0b3JpZXMgZnJvbSBnaXZlbiBncm91cCAob3Igb3JnYW5pemF0aW9uKSBnaXQgVVJMXCIsXG4gICAgICBuYW1lOiBcImNsb25lXCIsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgICB7XG4gICAgICBhbGlhczogXCJjXCIsXG4gICAgICBoZWxwOiBcImNvbW1pdCBjbGVhbiBmaWxlc1wiLFxuICAgICAgbmFtZTogXCJjb21taXRcIixcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgfSxcbiAgICB7XG4gICAgICBhbGlhczogXCJkXCIsXG4gICAgICBoZWxwOiBcInNpbmdsZSBkYXRhc2V0IHRvIHJlb3JnYW5pemVcIixcbiAgICAgIG5hbWU6IFwiZGF0YXNldFwiLFxuICAgICAgdHlwZTogU3RyaW5nLFxuICAgIH0sXG4gICAge1xuICAgICAgYWxpYXM6IFwia1wiLFxuICAgICAgZGVmYXVsdFZhbHVlOiBbXCJBbGxcIl0sXG4gICAgICBoZWxwOiBcImNhdGVnb3JpZXMgb2YgZGF0YXNldHMgdG8gcmVvcmdhbml6ZVwiLFxuICAgICAgbXVsdGlwbGU6IHRydWUsXG4gICAgICBuYW1lOiBcImNhdGVnb3JpZXNcIixcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGFsaWFzOiBcImxcIixcbiAgICAgIGhlbHA6IFwibGVnaXNsYXR1cmVzIG9mIGNhdGVnb3JpZXMgb2YgZGF0YXNldHMgdG8gcmV0cmlldmU7IGxlYXZlIGVtcHR5IG9yIHVzZSAwIGZvciBhbGxcIixcbiAgICAgIG11bHRpcGxlOiB0cnVlLFxuICAgICAgbmFtZTogXCJsZWdpc2xhdHVyZVwiLFxuICAgICAgdHlwZTogTnVtYmVyLFxuICAgIH0sXG4gICAge1xuICAgICAgYWxpYXM6IFwicFwiLFxuICAgICAgaGVscDogXCJwdWxsIHJlcG9zaXRvcmllcyBiZWZvcmUgcHJvY2VlZGluZ1wiLFxuICAgICAgbmFtZTogXCJwdWxsXCIsXG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgIH0sXG4gICAge1xuICAgICAgYWxpYXM6IFwiclwiLFxuICAgICAgaGVscDogXCJwdXNoIGNvbW1pdCB0byBnaXZlbiByZW1vdGVcIixcbiAgICAgIG11bHRpcGxlOiB0cnVlLFxuICAgICAgbmFtZTogXCJyZW1vdGVcIixcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGFsaWFzOiBcInNcIixcbiAgICAgIGhlbHA6IFwiZG9uJ3QgbG9nIGFueXRoaW5nXCIsXG4gICAgICBuYW1lOiBcInNpbGVudFwiLFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICB9LFxuICAgIHtcbiAgICAgIGhlbHA6IFwiZG8gbm90IHJlc2V0IC0taGFyZCBhZnRlciBjb21taXQgdG8gc2F2ZSBJL08gaWYgdGhlIHdvcmtpbmcgdHJlZSBpcyB0byBiZSBkaXNjYXJkZWRcIixcbiAgICAgIG5hbWU6IFwibm8tcmVzZXQtYWZ0ZXItY29tbWl0XCIsXG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgIH0sXG4gICAge1xuICAgICAgYWxpYXM6IFwidlwiLFxuICAgICAgaGVscDogXCJ2ZXJib3NlIGxvZ3NcIixcbiAgICAgIG5hbWU6IFwidmVyYm9zZVwiLFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlZmF1bHRPcHRpb246IHRydWUsXG4gICAgICBoZWxwOiBcImRpcmVjdG9yeSBjb250YWluaW5nIEFzc2VtYmzDqWUgb3BlbiBkYXRhIGZpbGVzXCIsXG4gICAgICBuYW1lOiBcImRhdGFEaXJcIixcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICB9LFxuICBdXG4gIGNvbnN0IG9wdGlvbnMgPSBjb21tYW5kTGluZUFyZ3Mob3B0aW9uc0RlZmluaXRpb25zLCB7XG4gICAgYXJndjogYXJndixcbiAgfSlcbiAgcmV0dXJuIG9wdGlvbnNcbn1cblxuZnVuY3Rpb24gY2xlYW5SZW9yZ2FuaXplZERhdGEob3B0aW9uczogYW55KTogbnVtYmVyIHtcbiAgY29uc3QgZGF0YURpcjogc3RyaW5nID0gb3B0aW9ucy5kYXRhRGlyXG5cbiAgRGF0ZS5wcm90b3R5cGUudG9KU09OID0gcGF0Y2hlZERhdGVUb0pzb25cblxuICBsZXQgZXhpdENvZGUgPSAxMCAvLyBOb3RoaW5nIHRvIGNvbW1pdFxuICBjb25zdCBnaXRHcm91cFVybCA9IG9wdGlvbnMuY2xvbmVcbiAgICA/IG9wdGlvbnMuY2xvbmUudHJpbSgpLnJlcGxhY2UoL1xcLyskLywgXCJcIilcbiAgICA6IHVuZGVmaW5lZFxuXG4gIG9wdGlvbnMuY2F0ZWdvcmllcy5tYXAoKGRhdGFzZXROYW1lOiBzdHJpbmcpID0+XG4gICAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKFxuICAgICAgKEVuYWJsZWREYXRhc2V0cyBhcyBhbnkgYXMgeyBbbmFtZTogc3RyaW5nXTogRW5hYmxlZERhdGFzZXRzIH0pW1xuICAgICAgICBkYXRhc2V0TmFtZVxuICAgICAgXSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIGBVbmtub3duIG5hbWUgb2YgZGF0YXNldDogJHtkYXRhc2V0TmFtZX1gLFxuICAgICksXG4gIClcbiAgY29uc3QgZW5hYmxlZERhdGFzZXRzID0gb3B0aW9ucy5jYXRlZ29yaWVzLnJlZHVjZShcbiAgICAoZW5hYmxlZERhdGFzZXRzOiBFbmFibGVkRGF0YXNldHMsIGRhdGFzZXROYW1lOiBzdHJpbmcpOiBFbmFibGVkRGF0YXNldHMgPT5cbiAgICAgIGVuYWJsZWREYXRhc2V0cyB8XG4gICAgICAoRW5hYmxlZERhdGFzZXRzIGFzIGFueSBhcyB7IFtuYW1lOiBzdHJpbmddOiBFbmFibGVkRGF0YXNldHMgfSlbXG4gICAgICAgIGRhdGFzZXROYW1lXG4gICAgICBdLFxuICAgIEVuYWJsZWREYXRhc2V0cy5Ob25lLFxuICApXG5cbiAgbGV0IGNob3NlbkRhdGFzZXRzID0gZmlsdGVyQnlMZWdpc2xhdHVyZShkYXRhc2V0cywgb3B0aW9ucy5sZWdpc2xhdHVyZSk7XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGNob3NlbkRhdGFzZXRzLmFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShkYXRhc2V0LmZpbGVuYW1lLCBcIi5qc29uXCIpXG4gICAgICBpZiAob3B0aW9ucy5kYXRhc2V0ICYmIGRhdGFzZXROYW1lICE9PSBvcHRpb25zLmRhdGFzZXQpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfV9uZXR0b3llLmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgY29uc3QgZGF0YXNldFJhd0Rpcjogc3RyaW5nID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgY29uc3QgZGF0YXNldENsZWFuRGlyOiBzdHJpbmcgPSBkYXRhc2V0UmF3RGlyICsgXCJfbmV0dG95ZVwiXG4gICAgICBpZiAob3B0aW9ucy5wdWxsKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgcmVzZXQgLS1oYXJkIG9yaWdpbi9tYXN0ZXJgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhc2V0Q2xlYW5EaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgICBleGVjU3luYyhgZ2l0IHB1bGwgLS1yZWJhc2VgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhc2V0Q2xlYW5EaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBhbmFseXplQW5kUmVtb3ZlKGRhdGFzZXROYW1lLCBvcHRpb25zKVxuICAgICAgZm9yIChjb25zdCBhY3RldXJTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0UmF3RGlyLCBbXCJhY3RldXJzXCJdKSkge1xuICAgICAgICBjb25zdCBhY3RldXJGaWxlbmFtZSA9IGFjdGV1clNwbGl0UGF0aFthY3RldXJTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFhY3RldXJGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhY3RldXJSYXdGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0UmF3RGlyLCAuLi5hY3RldXJTcGxpdFBhdGgpXG4gICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICBDbGVhbmluZyBmaWxlOiAke2FjdGV1clJhd0ZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWN0ZXVyUmF3SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGFjdGV1clJhd0ZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBhY3RldXIgPSBKU09OLnBhcnNlKGFjdGV1clJhd0pzb24pXG4gICAgICAgIGNsZWFuQWN0ZXVyKGFjdGV1cilcbiAgICAgICAgY29uc3QgYWN0ZXVySnNvbjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoYWN0ZXVyLCBudWxsLCAyKVxuXG4gICAgICAgIC8vIFZhbGlkYXRlIGdlbmVyYXRlZCBKU09OLlxuICAgICAgICBjb25zdCBhY3RldXJDbGVhbjogQWN0ZXVyID0gQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQudG9BY3RldXIoYWN0ZXVySnNvbilcbiAgICAgICAgY29uc3QgYWN0ZXVyQ2xlYW5Kc29uOiBzdHJpbmcgPVxuICAgICAgICAgIEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LmFjdGV1clRvSnNvbihhY3RldXJDbGVhbilcblxuICAgICAgICBjb25zdCBhY3RldXJDbGVhbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgZGF0YXNldENsZWFuRGlyLFxuICAgICAgICAgIC4uLmFjdGV1clNwbGl0UGF0aCxcbiAgICAgICAgKVxuICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZShhY3RldXJDbGVhbkZpbGVQYXRoKSlcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyhhY3RldXJDbGVhbkZpbGVQYXRoLCBhY3RldXJDbGVhbkpzb24sIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3Qgb3JnYW5lU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldFJhd0RpciwgW1wib3JnYW5lc1wiXSkpIHtcbiAgICAgICAgY29uc3Qgb3JnYW5lRmlsZW5hbWUgPSBvcmdhbmVTcGxpdFBhdGhbb3JnYW5lU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghb3JnYW5lRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3JnYW5lUmF3RmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldFJhd0RpciwgLi4ub3JnYW5lU3BsaXRQYXRoKVxuICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgQ2xlYW5pbmcgZmlsZTogJHtvcmdhbmVSYXdGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9yZ2FuZVJhd0pzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhvcmdhbmVSYXdGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3Qgb3JnYW5lID0gSlNPTi5wYXJzZShvcmdhbmVSYXdKc29uKVxuICAgICAgICBjbGVhbk9yZ2FuZShvcmdhbmUpXG4gICAgICAgIGNvbnN0IG9yZ2FuZUpzb246IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KG9yZ2FuZSwgbnVsbCwgMilcblxuICAgICAgICAvLyBWYWxpZGF0ZSBnZW5lcmF0ZWQgSlNPTi5cbiAgICAgICAgY29uc3Qgb3JnYW5lQ2xlYW46IE9yZ2FuZSA9IEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LnRvT3JnYW5lKG9yZ2FuZUpzb24pXG4gICAgICAgIGNvbnN0IG9yZ2FuZUNsZWFuSnNvbjogc3RyaW5nID1cbiAgICAgICAgICBBY3RldXJzRXRPcmdhbmVzQ29udmVydC5vcmdhbmVUb0pzb24ob3JnYW5lQ2xlYW4pXG5cbiAgICAgICAgY29uc3Qgb3JnYW5lQ2xlYW5GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgIGRhdGFzZXRDbGVhbkRpcixcbiAgICAgICAgICAuLi5vcmdhbmVTcGxpdFBhdGgsXG4gICAgICAgIClcbiAgICAgICAgZnMuZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUob3JnYW5lQ2xlYW5GaWxlUGF0aCkpXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmMob3JnYW5lQ2xlYW5GaWxlUGF0aCwgb3JnYW5lQ2xlYW5Kc29uLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb21taXQpIHtcbiAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gZ2l0LmNvbW1pdEFuZFB1c2goXG4gICAgICAgICAgZGF0YXNldENsZWFuRGlyLFxuICAgICAgICAgIFwiTm91dmVsbGUgbW9pc3NvblwiLFxuICAgICAgICAgIG9wdGlvbnMucmVtb3RlLFxuICAgICAgICApXG4gICAgICAgIGlmIChcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDEwICYmIGVycm9yQ29kZSAhPT0gMTApIHx8XG4gICAgICAgICAgKGV4aXRDb2RlID09PSAwICYmIGVycm9yQ29kZSAhPT0gMCAmJiBlcnJvckNvZGUgIT09IDEwKVxuICAgICAgICApIHtcbiAgICAgICAgICBleGl0Q29kZSA9IGVycm9yQ29kZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGNvbW1pdEFuZFB1c2hVaWQoZGF0YXNldENsZWFuRGlyLCBvcHRpb25zLCBbXCJhY3RldXJzXCIsIFwib3JnYW5lc1wiXSkgJiZcbiAgICAgICAgKGV4aXRDb2RlID09PSAwIHx8IGV4aXRDb2RlID09PSAxMClcbiAgICAgICkge1xuICAgICAgICBleGl0Q29kZSA9IDFcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFnZW5kYXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgY2hvc2VuRGF0YXNldHMuYWdlbmRhcykge1xuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKGRhdGFzZXQuZmlsZW5hbWUsIFwiLmpzb25cIilcbiAgICAgIGlmIChvcHRpb25zLmRhdGFzZXQgJiYgZGF0YXNldE5hbWUgIT09IG9wdGlvbnMuZGF0YXNldCkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9X25ldHRveWUuZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBhbmFseXplQW5kUmVtb3ZlKGRhdGFzZXROYW1lLCBvcHRpb25zKVxuICAgICAgY29uc3QgZGF0YXNldFJhd0Rpcjogc3RyaW5nID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgY29uc3QgZGF0YXNldENsZWFuRGlyOiBzdHJpbmcgPSBkYXRhc2V0UmF3RGlyICsgXCJfbmV0dG95ZVwiXG4gICAgICBmb3IgKGNvbnN0IHJldW5pb25TcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0UmF3RGlyKSkge1xuICAgICAgICBjb25zdCByZXVuaW9uRmlsZW5hbWUgPSByZXVuaW9uU3BsaXRQYXRoW3JldW5pb25TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFyZXVuaW9uRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmV1bmlvblJhd0ZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXRSYXdEaXIsIC4uLnJldW5pb25TcGxpdFBhdGgpXG4gICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICBDbGVhbmluZyBmaWxlOiAke3JldW5pb25SYXdGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJldW5pb25SYXdKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMocmV1bmlvblJhd0ZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCByZXVuaW9uID0gSlNPTi5wYXJzZShyZXVuaW9uUmF3SnNvbilcbiAgICAgICAgY2xlYW5SZXVuaW9uKHJldW5pb24pXG4gICAgICAgIGNvbnN0IHJldW5pb25Kc29uOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShyZXVuaW9uLCBudWxsLCAyKVxuXG4gICAgICAgIC8vIFZhbGlkYXRlIGdlbmVyYXRlZCBKU09OLlxuICAgICAgICBjb25zdCByZXVuaW9uQ2xlYW46IFJldW5pb24gPSBBZ2VuZGFzQ29udmVydC50b1JldW5pb24ocmV1bmlvbkpzb24pXG4gICAgICAgIGNvbnN0IHJldW5pb25DbGVhbkpzb246IHN0cmluZyA9XG4gICAgICAgICAgQWdlbmRhc0NvbnZlcnQucmV1bmlvblRvSnNvbihyZXVuaW9uQ2xlYW4pXG5cbiAgICAgICAgY29uc3QgcmV1bmlvbkNsZWFuRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICBkYXRhc2V0Q2xlYW5EaXIsXG4gICAgICAgICAgLi4ucmV1bmlvblNwbGl0UGF0aCxcbiAgICAgICAgKVxuICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZShyZXVuaW9uQ2xlYW5GaWxlUGF0aCkpXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmMocmV1bmlvbkNsZWFuRmlsZVBhdGgsIHJldW5pb25DbGVhbkpzb24sIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmNvbW1pdCkge1xuICAgICAgICBjb25zdCBlcnJvckNvZGUgPSBnaXQuY29tbWl0QW5kUHVzaChcbiAgICAgICAgICBkYXRhc2V0Q2xlYW5EaXIsXG4gICAgICAgICAgXCJOb3V2ZWxsZSBtb2lzc29uXCIsXG4gICAgICAgICAgb3B0aW9ucy5yZW1vdGUsXG4gICAgICAgIClcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMTAgJiYgZXJyb3JDb2RlICE9PSAxMCkgfHxcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDAgJiYgZXJyb3JDb2RlICE9PSAwICYmIGVycm9yQ29kZSAhPT0gMTApXG4gICAgICAgICkge1xuICAgICAgICAgIGV4aXRDb2RlID0gZXJyb3JDb2RlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgY29tbWl0QW5kUHVzaFVpZChkYXRhc2V0Q2xlYW5EaXIsIG9wdGlvbnMsIFtcIi5cIl0pICYmXG4gICAgICAgIChleGl0Q29kZSA9PT0gMCB8fCBleGl0Q29kZSA9PT0gMTApXG4gICAgICApIHtcbiAgICAgICAgZXhpdENvZGUgPSAxXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BbWVuZGVtZW50cykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBjaG9zZW5EYXRhc2V0cy5hbWVuZGVtZW50cykge1xuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKGRhdGFzZXQuZmlsZW5hbWUsIFwiLmpzb25cIilcbiAgICAgIGlmIChvcHRpb25zLmRhdGFzZXQgJiYgZGF0YXNldE5hbWUgIT09IG9wdGlvbnMuZGF0YXNldCkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9X25ldHRveWUuZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBhbmFseXplQW5kUmVtb3ZlKGRhdGFzZXROYW1lLCBvcHRpb25zKVxuICAgICAgY29uc3QgZGF0YXNldFJhd0Rpcjogc3RyaW5nID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgY29uc3QgZGF0YXNldENsZWFuRGlyOiBzdHJpbmcgPSBkYXRhc2V0UmF3RGlyICsgXCJfbmV0dG95ZVwiXG4gICAgICBmb3IgKGNvbnN0IGFtZW5kZW1lbnRTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0UmF3RGlyKSkge1xuICAgICAgICBjb25zdCBhbWVuZGVtZW50RmlsZW5hbWUgPVxuICAgICAgICAgIGFtZW5kZW1lbnRTcGxpdFBhdGhbYW1lbmRlbWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIWFtZW5kZW1lbnRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbWVuZGVtZW50UmF3RmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgZGF0YXNldFJhd0RpcixcbiAgICAgICAgICAuLi5hbWVuZGVtZW50U3BsaXRQYXRoLFxuICAgICAgICApXG4gICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICBDbGVhbmluZyBmaWxlOiAke2FtZW5kZW1lbnRSYXdGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRSYXdKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgYW1lbmRlbWVudFJhd0ZpbGVQYXRoLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICB9LFxuICAgICAgICApXG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnQgPSBKU09OLnBhcnNlKGFtZW5kZW1lbnRSYXdKc29uKVxuICAgICAgICBjbGVhbkFtZW5kZW1lbnQoYW1lbmRlbWVudClcbiAgICAgICAgY29uc3QgYW1lbmRlbWVudEpzb246IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGFtZW5kZW1lbnQsIG51bGwsIDIpXG5cbiAgICAgICAgLy8gVmFsaWRhdGUgZ2VuZXJhdGVkIEpTT04uXG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRDbGVhbjogQW1lbmRlbWVudCA9XG4gICAgICAgICAgQW1lbmRlbWVudHNDb252ZXJ0LnRvQW1lbmRlbWVudChhbWVuZGVtZW50SnNvbilcbiAgICAgICAgY29uc3QgYW1lbmRlbWVudENsZWFuSnNvbjogc3RyaW5nID1cbiAgICAgICAgICBBbWVuZGVtZW50c0NvbnZlcnQuYW1lbmRlbWVudFRvSnNvbihhbWVuZGVtZW50Q2xlYW4pXG5cbiAgICAgICAgY29uc3QgYW1lbmRlbWVudENsZWFuRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICBkYXRhc2V0Q2xlYW5EaXIsXG4gICAgICAgICAgLi4uYW1lbmRlbWVudFNwbGl0UGF0aCxcbiAgICAgICAgKVxuICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZShhbWVuZGVtZW50Q2xlYW5GaWxlUGF0aCkpXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmMoYW1lbmRlbWVudENsZWFuRmlsZVBhdGgsIGFtZW5kZW1lbnRDbGVhbkpzb24sIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmNvbW1pdCkge1xuICAgICAgICBjb25zdCBlcnJvckNvZGUgPSBnaXQuY29tbWl0QW5kUHVzaChcbiAgICAgICAgICBkYXRhc2V0Q2xlYW5EaXIsXG4gICAgICAgICAgXCJOb3V2ZWxsZSBtb2lzc29uXCIsXG4gICAgICAgICAgb3B0aW9ucy5yZW1vdGUsXG4gICAgICAgIClcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMTAgJiYgZXJyb3JDb2RlICE9PSAxMCkgfHxcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDAgJiYgZXJyb3JDb2RlICE9PSAwICYmIGVycm9yQ29kZSAhPT0gMTApXG4gICAgICAgICkge1xuICAgICAgICAgIGV4aXRDb2RlID0gZXJyb3JDb2RlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgY29tbWl0QW5kUHVzaFVpZChkYXRhc2V0Q2xlYW5EaXIsIG9wdGlvbnMsIFtcIi5cIl0pICYmXG4gICAgICAgIChleGl0Q29kZSA9PT0gMCB8fCBleGl0Q29kZSA9PT0gMTApXG4gICAgICApIHtcbiAgICAgICAgZXhpdENvZGUgPSAxXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5Eb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGNob3NlbkRhdGFzZXRzLmRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShkYXRhc2V0LmZpbGVuYW1lLCBcIi5qc29uXCIpXG4gICAgICBpZiAob3B0aW9ucy5kYXRhc2V0ICYmIGRhdGFzZXROYW1lICE9PSBvcHRpb25zLmRhdGFzZXQpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfV9uZXR0b3llLmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgYW5hbHl6ZUFuZFJlbW92ZShkYXRhc2V0TmFtZSwgb3B0aW9ucylcbiAgICAgIGNvbnN0IGRhdGFzZXRSYXdEaXI6IHN0cmluZyA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGNvbnN0IGRhdGFzZXRDbGVhbkRpcjogc3RyaW5nID0gZGF0YXNldFJhd0RpciArIFwiX25ldHRveWVcIlxuICAgICAgZm9yIChjb25zdCBkb2N1bWVudFNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXRSYXdEaXIsIFtcImRvY3VtZW50c1wiXSkpIHtcbiAgICAgICAgY29uc3QgZG9jdW1lbnRGaWxlbmFtZSA9IGRvY3VtZW50U3BsaXRQYXRoW2RvY3VtZW50U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghZG9jdW1lbnRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb2N1bWVudFJhd0ZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgIGRhdGFzZXRSYXdEaXIsXG4gICAgICAgICAgLi4uZG9jdW1lbnRTcGxpdFBhdGgsXG4gICAgICAgIClcbiAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAgIENsZWFuaW5nIGZpbGU6ICR7ZG9jdW1lbnRSYXdGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvY3VtZW50UmF3SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGRvY3VtZW50UmF3RmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGRvY3VtZW50ID0gSlNPTi5wYXJzZShkb2N1bWVudFJhd0pzb24pXG4gICAgICAgIGNsZWFuRG9jdW1lbnRPckRpdmlzaW9uKGRvY3VtZW50KVxuICAgICAgICBjb25zdCBkb2N1bWVudEpzb246IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGRvY3VtZW50LCBudWxsLCAyKVxuXG4gICAgICAgIC8vIFZhbGlkYXRlIGdlbmVyYXRlZCBKU09OLlxuICAgICAgICBjb25zdCBkb2N1bWVudENsZWFuOiBEb2N1bWVudCA9XG4gICAgICAgICAgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQudG9Eb2N1bWVudChkb2N1bWVudEpzb24pXG4gICAgICAgIGNvbnN0IGRvY3VtZW50Q2xlYW5Kc29uOiBzdHJpbmcgPVxuICAgICAgICAgIERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LmRvY3VtZW50VG9Kc29uKGRvY3VtZW50Q2xlYW4pXG5cbiAgICAgICAgY29uc3QgZG9jdW1lbnRDbGVhbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgZGF0YXNldENsZWFuRGlyLFxuICAgICAgICAgIC4uLmRvY3VtZW50U3BsaXRQYXRoLFxuICAgICAgICApXG4gICAgICAgIGZzLmVuc3VyZURpclN5bmMocGF0aC5kaXJuYW1lKGRvY3VtZW50Q2xlYW5GaWxlUGF0aCkpXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmMoZG9jdW1lbnRDbGVhbkZpbGVQYXRoLCBkb2N1bWVudENsZWFuSnNvbiwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBkb3NzaWVyU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldFJhd0RpciwgW1wiZG9zc2llcnNcIl0pKSB7XG4gICAgICAgIGNvbnN0IGRvc3NpZXJGaWxlbmFtZSA9IGRvc3NpZXJTcGxpdFBhdGhbZG9zc2llclNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIWRvc3NpZXJGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb3NzaWVyUmF3RmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldFJhd0RpciwgLi4uZG9zc2llclNwbGl0UGF0aClcbiAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAgIENsZWFuaW5nIGZpbGU6ICR7ZG9zc2llclJhd0ZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9zc2llclJhd0pzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhkb3NzaWVyUmF3RmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGRvc3NpZXIgPSBKU09OLnBhcnNlKGRvc3NpZXJSYXdKc29uKVxuICAgICAgICBjbGVhbkRvc3NpZXJQYXJsZW1lbnRhaXJlKGRvc3NpZXIpXG4gICAgICAgIGNvbnN0IGRvc3NpZXJKc29uOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShkb3NzaWVyLCBudWxsLCAyKVxuXG4gICAgICAgIC8vIFZhbGlkYXRlIGdlbmVyYXRlZCBKU09OLlxuICAgICAgICBjb25zdCBkb3NzaWVyQ2xlYW46IERvc3NpZXJQYXJsZW1lbnRhaXJlID1cbiAgICAgICAgICBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC50b0Rvc3NpZXJQYXJsZW1lbnRhaXJlKGRvc3NpZXJKc29uKVxuICAgICAgICBjb25zdCBkb3NzaWVyQ2xlYW5Kc29uOiBzdHJpbmcgPVxuICAgICAgICAgIERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LmRvc3NpZXJQYXJsZW1lbnRhaXJlVG9Kc29uKGRvc3NpZXJDbGVhbilcblxuICAgICAgICBjb25zdCBkb3NzaWVyQ2xlYW5GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgIGRhdGFzZXRDbGVhbkRpcixcbiAgICAgICAgICAuLi5kb3NzaWVyU3BsaXRQYXRoLFxuICAgICAgICApXG4gICAgICAgIGZzLmVuc3VyZURpclN5bmMocGF0aC5kaXJuYW1lKGRvc3NpZXJDbGVhbkZpbGVQYXRoKSlcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyhkb3NzaWVyQ2xlYW5GaWxlUGF0aCwgZG9zc2llckNsZWFuSnNvbiwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuY29tbWl0KSB7XG4gICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IGdpdC5jb21taXRBbmRQdXNoKFxuICAgICAgICAgIGRhdGFzZXRDbGVhbkRpcixcbiAgICAgICAgICBcIk5vdXZlbGxlIG1vaXNzb25cIixcbiAgICAgICAgICBvcHRpb25zLnJlbW90ZSxcbiAgICAgICAgKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgKGV4aXRDb2RlID09PSAxMCAmJiBlcnJvckNvZGUgIT09IDEwKSB8fFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMCAmJiBlcnJvckNvZGUgIT09IDAgJiYgZXJyb3JDb2RlICE9PSAxMClcbiAgICAgICAgKSB7XG4gICAgICAgICAgZXhpdENvZGUgPSBlcnJvckNvZGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBjb21taXRBbmRQdXNoVWlkKGRhdGFzZXRDbGVhbkRpciwgb3B0aW9ucywgW1wiZG9jdW1lbnRzXCIsIFwiZG9zc2llcnNcIl0pICYmXG4gICAgICAgIChleGl0Q29kZSA9PT0gMCB8fCBleGl0Q29kZSA9PT0gMTApXG4gICAgICApIHtcbiAgICAgICAgZXhpdENvZGUgPSAxXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5TY3J1dGlucykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBjaG9zZW5EYXRhc2V0cy5zY3J1dGlucykge1xuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKGRhdGFzZXQuZmlsZW5hbWUsIFwiLmpzb25cIilcbiAgICAgIGlmIChvcHRpb25zLmRhdGFzZXQgJiYgZGF0YXNldE5hbWUgIT09IG9wdGlvbnMuZGF0YXNldCkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9X25ldHRveWUuZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBhbmFseXplQW5kUmVtb3ZlKGRhdGFzZXROYW1lLCBvcHRpb25zKVxuICAgICAgY29uc3QgZGF0YXNldFJhd0Rpcjogc3RyaW5nID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgY29uc3QgZGF0YXNldENsZWFuRGlyOiBzdHJpbmcgPSBkYXRhc2V0UmF3RGlyICsgXCJfbmV0dG95ZVwiXG4gICAgICBmb3IgKGNvbnN0IHNjcnV0aW5TcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0UmF3RGlyKSkge1xuICAgICAgICBjb25zdCBzY3J1dGluRmlsZW5hbWUgPSBzY3J1dGluU3BsaXRQYXRoW3NjcnV0aW5TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFzY3J1dGluRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2NydXRpblJhd0ZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXRSYXdEaXIsIC4uLnNjcnV0aW5TcGxpdFBhdGgpXG4gICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICBDbGVhbmluZyBmaWxlOiAke3NjcnV0aW5SYXdGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNjcnV0aW5SYXdKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoc2NydXRpblJhd0ZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBzY3J1dGluID0gSlNPTi5wYXJzZShzY3J1dGluUmF3SnNvbilcbiAgICAgICAgY2xlYW5TY3J1dGluKHNjcnV0aW4pXG4gICAgICAgIGNvbnN0IHNjcnV0aW5Kc29uOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShzY3J1dGluLCBudWxsLCAyKVxuXG4gICAgICAgIC8vIFZhbGlkYXRlIGdlbmVyYXRlZCBKU09OLlxuICAgICAgICBjb25zdCBzY3J1dGluQ2xlYW46IFNjcnV0aW4gPSBTY3J1dGluc0NvbnZlcnQudG9TY3J1dGluKHNjcnV0aW5Kc29uKVxuICAgICAgICBjb25zdCBzY3J1dGluQ2xlYW5Kc29uOiBzdHJpbmcgPVxuICAgICAgICAgIFNjcnV0aW5zQ29udmVydC5zY3J1dGluVG9Kc29uKHNjcnV0aW5DbGVhbilcblxuICAgICAgICBjb25zdCBzY3J1dGluQ2xlYW5GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgIGRhdGFzZXRDbGVhbkRpcixcbiAgICAgICAgICAuLi5zY3J1dGluU3BsaXRQYXRoLFxuICAgICAgICApXG4gICAgICAgIGZzLmVuc3VyZURpclN5bmMocGF0aC5kaXJuYW1lKHNjcnV0aW5DbGVhbkZpbGVQYXRoKSlcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyhzY3J1dGluQ2xlYW5GaWxlUGF0aCwgc2NydXRpbkNsZWFuSnNvbiwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuY29tbWl0KSB7XG4gICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IGdpdC5jb21taXRBbmRQdXNoKFxuICAgICAgICAgIGRhdGFzZXRDbGVhbkRpcixcbiAgICAgICAgICBcIk5vdXZlbGxlIG1vaXNzb25cIixcbiAgICAgICAgICBvcHRpb25zLnJlbW90ZSxcbiAgICAgICAgKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgKGV4aXRDb2RlID09PSAxMCAmJiBlcnJvckNvZGUgIT09IDEwKSB8fFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMCAmJiBlcnJvckNvZGUgIT09IDAgJiYgZXJyb3JDb2RlICE9PSAxMClcbiAgICAgICAgKSB7XG4gICAgICAgICAgZXhpdENvZGUgPSBlcnJvckNvZGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBjb21taXRBbmRQdXNoVWlkKGRhdGFzZXRDbGVhbkRpciwgb3B0aW9ucywgW1wiLlwiXSkgJiZcbiAgICAgICAgKGV4aXRDb2RlID09PSAwIHx8IGV4aXRDb2RlID09PSAxMClcbiAgICAgICkge1xuICAgICAgICBleGl0Q29kZSA9IDFcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlF1ZXN0aW9ucykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5xdWVzdGlvbnMpIHtcbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShkYXRhc2V0LmZpbGVuYW1lLCBcIi5qc29uXCIpXG4gICAgICBpZiAob3B0aW9ucy5kYXRhc2V0ICYmIGRhdGFzZXROYW1lICE9PSBvcHRpb25zLmRhdGFzZXQpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfV9uZXR0b3llLmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgYW5hbHl6ZUFuZFJlbW92ZShkYXRhc2V0TmFtZSwgb3B0aW9ucylcbiAgICAgIGNvbnN0IGRhdGFzZXRSYXdEaXI6IHN0cmluZyA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGNvbnN0IGRhdGFzZXRDbGVhbkRpcjogc3RyaW5nID0gZGF0YXNldFJhd0RpciArIFwiX25ldHRveWVcIlxuICAgICAgZm9yIChjb25zdCBxdWVzdGlvbnNTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0UmF3RGlyKSkge1xuICAgICAgICBjb25zdCBxdWVzdGlvbkZpbGVuYW1lID1cbiAgICAgICAgICBxdWVzdGlvbnNTcGxpdFBhdGhbcXVlc3Rpb25zU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghcXVlc3Rpb25GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBxdWVzdGlvblJhd0ZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgIGRhdGFzZXRSYXdEaXIsXG4gICAgICAgICAgLi4ucXVlc3Rpb25zU3BsaXRQYXRoLFxuICAgICAgICApXG4gICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICBDbGVhbmluZyBmaWxlOiAke3F1ZXN0aW9uUmF3RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBxdWVzdGlvblJhd0pzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhxdWVzdGlvblJhd0ZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBxdWVzdGlvbiA9IEpTT04ucGFyc2UocXVlc3Rpb25SYXdKc29uKVxuICAgICAgICBjbGVhblF1ZXN0aW9uKHF1ZXN0aW9uKVxuICAgICAgICBjb25zdCBxdWVzdGlvbkpzb246IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KHF1ZXN0aW9uLCBudWxsLCAyKVxuXG4gICAgICAgIC8vIFZhbGlkYXRlIGdlbmVyYXRlZCBKU09OLlxuICAgICAgICBjb25zdCBxdWVzdGlvbkNsZWFuOiBRdWVzdGlvbiA9XG4gICAgICAgICAgUXVlc3Rpb25zQ29udmVydC50b1F1ZXN0aW9uKHF1ZXN0aW9uSnNvbilcbiAgICAgICAgY29uc3QgcXVlc3Rpb25DbGVhbkpzb246IHN0cmluZyA9XG4gICAgICAgICAgUXVlc3Rpb25zQ29udmVydC5xdWVzdGlvblRvSnNvbihxdWVzdGlvbkNsZWFuKVxuXG4gICAgICAgIGNvbnN0IHF1ZXN0aW9uQ2xlYW5GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgIGRhdGFzZXRDbGVhbkRpcixcbiAgICAgICAgICAuLi5xdWVzdGlvbnNTcGxpdFBhdGgsXG4gICAgICAgIClcbiAgICAgICAgZnMuZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUocXVlc3Rpb25DbGVhbkZpbGVQYXRoKSlcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyhxdWVzdGlvbkNsZWFuRmlsZVBhdGgsIHF1ZXN0aW9uQ2xlYW5Kc29uLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb21taXQpIHtcbiAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gZ2l0LmNvbW1pdEFuZFB1c2goXG4gICAgICAgICAgZGF0YXNldENsZWFuRGlyLFxuICAgICAgICAgIFwiTm91dmVsbGUgbW9pc3NvblwiLFxuICAgICAgICAgIG9wdGlvbnMucmVtb3RlLFxuICAgICAgICApXG4gICAgICAgIGlmIChcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDEwICYmIGVycm9yQ29kZSAhPT0gMTApIHx8XG4gICAgICAgICAgKGV4aXRDb2RlID09PSAwICYmIGVycm9yQ29kZSAhPT0gMCAmJiBlcnJvckNvZGUgIT09IDEwKVxuICAgICAgICApIHtcbiAgICAgICAgICBleGl0Q29kZSA9IGVycm9yQ29kZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGNvbW1pdEFuZFB1c2hVaWQoZGF0YXNldENsZWFuRGlyLCBvcHRpb25zLCBbXCIuXCJdKSAmJlxuICAgICAgICAoZXhpdENvZGUgPT09IDAgfHwgZXhpdENvZGUgPT09IDEwKVxuICAgICAgKSB7XG4gICAgICAgIGV4aXRDb2RlID0gMVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQ29tcHRlc1JlbmR1c1NlYW5jZXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuY29tcHRlc1JlbmR1c1NlYW5jZXMpIHtcbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShkYXRhc2V0LmZpbGVuYW1lLCBcIi54bWxcIilcbiAgICAgIGlmIChvcHRpb25zLmRhdGFzZXQgJiYgZGF0YXNldE5hbWUgIT09IG9wdGlvbnMuZGF0YXNldCkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9X25ldHRveWUuZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBhbmFseXplQW5kUmVtb3ZlKGRhdGFzZXROYW1lLCBvcHRpb25zKVxuICAgICAgY29uc3QgZGF0YXNldFJhd0Rpcjogc3RyaW5nID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgY29uc3QgZGF0YXNldENsZWFuRGlyOiBzdHJpbmcgPSBkYXRhc2V0UmF3RGlyICsgXCJfbmV0dG95ZVwiXG4gICAgICBmb3IgKGNvbnN0IGNvbXB0ZXNSZW5kdXNTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0UmF3RGlyKSkge1xuICAgICAgICBjb25zdCBjb21wdGVSZW5kdUZpbGVuYW1lID1cbiAgICAgICAgICBjb21wdGVzUmVuZHVzU3BsaXRQYXRoW2NvbXB0ZXNSZW5kdXNTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFjb21wdGVSZW5kdUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbXB0ZVJlbmR1UmF3RmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgZGF0YXNldFJhd0RpcixcbiAgICAgICAgICAuLi5jb21wdGVzUmVuZHVzU3BsaXRQYXRoLFxuICAgICAgICApXG4gICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICBDbGVhbmluZyBmaWxlOiAke2NvbXB0ZVJlbmR1UmF3RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb21wdGVSZW5kdVJhd0pzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICBjb21wdGVSZW5kdVJhd0ZpbGVQYXRoLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICB9LFxuICAgICAgICApXG4gICAgICAgIGNvbnN0IGNvbXB0ZVJlbmR1ID0gSlNPTi5wYXJzZShjb21wdGVSZW5kdVJhd0pzb24pXG4gICAgICAgIGNsZWFuQ29tcHRlUmVuZHUoY29tcHRlUmVuZHUpXG4gICAgICAgIGNvbnN0IGNvbXB0ZVJlbmR1SnNvbjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoY29tcHRlUmVuZHUsIG51bGwsIDIpXG5cbiAgICAgICAgLy8gVmFsaWRhdGUgZ2VuZXJhdGVkIEpTT04uXG4gICAgICAgIGNvbnN0IGNvbXB0ZVJlbmR1Q2xlYW46IENvbXB0ZVJlbmR1ID1cbiAgICAgICAgICBDb21wdGVzUmVuZHVzQ29udmVydC50b0NvbXB0ZVJlbmR1KGNvbXB0ZVJlbmR1SnNvbilcbiAgICAgICAgY29uc3QgY29tcHRlUmVuZHVDbGVhbkpzb246IHN0cmluZyA9XG4gICAgICAgICAgQ29tcHRlc1JlbmR1c0NvbnZlcnQuY29tcHRlUmVuZHVUb0pzb24oY29tcHRlUmVuZHVDbGVhbilcblxuICAgICAgICBjb25zdCBjb21wdGVSZW5kdUNsZWFuRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICBkYXRhc2V0Q2xlYW5EaXIsXG4gICAgICAgICAgLi4uY29tcHRlc1JlbmR1c1NwbGl0UGF0aCxcbiAgICAgICAgKVxuICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZShjb21wdGVSZW5kdUNsZWFuRmlsZVBhdGgpKVxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKGNvbXB0ZVJlbmR1Q2xlYW5GaWxlUGF0aCwgY29tcHRlUmVuZHVDbGVhbkpzb24sIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmNvbW1pdCkge1xuICAgICAgICBjb25zdCBlcnJvckNvZGUgPSBnaXQuY29tbWl0QW5kUHVzaChcbiAgICAgICAgICBkYXRhc2V0Q2xlYW5EaXIsXG4gICAgICAgICAgXCJOb3V2ZWxsZSBtb2lzc29uXCIsXG4gICAgICAgICAgb3B0aW9ucy5yZW1vdGUsXG4gICAgICAgIClcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMTAgJiYgZXJyb3JDb2RlICE9PSAxMCkgfHxcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDAgJiYgZXJyb3JDb2RlICE9PSAwICYmIGVycm9yQ29kZSAhPT0gMTApXG4gICAgICAgICkge1xuICAgICAgICAgIGV4aXRDb2RlID0gZXJyb3JDb2RlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgY29tbWl0QW5kUHVzaFVpZChkYXRhc2V0Q2xlYW5EaXIsIG9wdGlvbnMsIFtcIi5cIl0pICYmXG4gICAgICAgIChleGl0Q29kZSA9PT0gMCB8fCBleGl0Q29kZSA9PT0gMTApXG4gICAgICApIHtcbiAgICAgICAgZXhpdENvZGUgPSAxXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gUmVzdG9yZSBzdGFuZGFyZCBjb252ZXJzaW9uIG9mIGRhdGVzIHRvIEpTT04uXG4gIERhdGUucHJvdG90eXBlLnRvSlNPTiA9IGV4aXN0aW5nRGF0ZVRvSnNvblxuXG4gIHJldHVybiBleGl0Q29kZVxufVxuXG5mdW5jdGlvbiBhbmFseXplQW5kUmVtb3ZlKGRhdGFzZXROYW1lOiBzdHJpbmcsIG9wdGlvbnM6IGFueSk6IGFueSB7XG4gIGNvbnN0IGRhdGFEaXIgPSBvcHRpb25zLmRhdGFEaXJcbiAgY29uc3QgZGF0YXNldFJhd0Rpcjogc3RyaW5nID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICBjb25zdCBkYXRhc2V0Q2xlYW5EaXI6IHN0cmluZyA9IGRhdGFzZXRSYXdEaXIgKyBcIl9uZXR0b3llXCJcbiAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgIGNvbnNvbGUubG9nKGBDbGVhbmluZyBkaXJlY3Rvcnk6ICR7ZGF0YXNldENsZWFuRGlyfeKApmApXG4gIH1cbiAgZnMuZW5zdXJlRGlyU3luYyhkYXRhc2V0Q2xlYW5EaXIpXG4gIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmMoZGF0YXNldENsZWFuRGlyKSkge1xuICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGNvbnN0IHBhdGhuYW1lID0gcGF0aC5qb2luKGRhdGFzZXRDbGVhbkRpciwgZmlsZW5hbWUpXG4gICAgZnMucmVtb3ZlU3luYyhwYXRobmFtZSlcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRBbmRQdXNoVWlkKFxuICByZXBvc2l0b3J5RGlyOiBzdHJpbmcsXG4gIG9wdGlvbnM6IGFueSxcbiAgc3ViZGlyZWN0b3JpZXM6IGFueSxcbik6IGJvb2xlYW4ge1xuICBsZXQgZXJyb3IgPSBmYWxzZVxuICBpZiAob3B0aW9ucy5jb21taXQpIHtcbiAgICBnaXQudWlkQnJhbmNoVXBkYXRlKFxuICAgICAgcmVwb3NpdG9yeURpcixcbiAgICAgIHN1YmRpcmVjdG9yaWVzLFxuICAgICAgb3B0aW9uc1tcIm5vLXJlc2V0LWFmdGVyLWNvbW1pdFwiXSxcbiAgICApXG4gICAgZm9yIChjb25zdCByZW1vdGUgb2Ygb3B0aW9ucy5yZW1vdGUgfHwgW10pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGdpdC5ydW4ocmVwb3NpdG9yeURpciwgYHB1c2ggLS1xdWlldCAke3JlbW90ZX0gdWlkOnVpZGApXG4gICAgICB9IGNhdGNoIChjaGlsZFByb2Nlc3MpIHtcbiAgICAgICAgZXJyb3IgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBlcnJvclxufVxuXG5mdW5jdGlvbiBtYWluKGFyZ3Y6IGFueSk6IG51bWJlciB7XG4gIGNvbnN0IG9wdGlvbnMgPSBwYXJzZUFyZ3MoYXJndilcbiAgcmV0dXJuIGNsZWFuUmVvcmdhbml6ZWREYXRhKG9wdGlvbnMpXG59XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuaWYgKHByb2Nlc3MuYXJndlsxXS5lbmRzV2l0aChcImNsZWFuX3Jlb3JnYW5pemVkX2RhdGEudHNcIikpXG4gIHByb2Nlc3MuZXhpdChtYWluKHByb2Nlc3MuYXJndikpXG4iXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLE1BQU0sTUFBTSxRQUFRO0FBQzNCLFNBQVNDLFFBQVEsUUFBUSxlQUFlO0FBQ3hDLE9BQU9DLGVBQWUsTUFBTSxtQkFBbUI7QUFDL0MsT0FBT0MsRUFBRSxNQUFNLFVBQVU7QUFDekIsT0FBT0MsSUFBSSxNQUFNLE1BQU07QUFBQSxTQUdyQkMsV0FBVyxFQUNYQyxlQUFlLEVBQ2ZDLHVCQUF1QixFQUN2QkMseUJBQXlCLEVBQ3pCQyxXQUFXLEVBQ1hDLFlBQVksRUFDWkMsWUFBWSxFQUNaQyxhQUFhLEVBQ2JDLGdCQUFnQjtBQUFBLFNBRVRDLFFBQVEsRUFBRUMsZUFBZSxFQUFFQyxtQkFBbUI7QUFBQSxTQUM5Q0Msa0JBQWtCLEVBQUVDLGlCQUFpQjtBQUFBLFNBQ3JDQyxPQUFPO0FBQUEsT0FDVCxLQUFLQyxHQUFHO0FBQUEsU0FHYkMsT0FBTyxJQUFJQyx1QkFBdUI7QUFBQSxTQUczQkQsT0FBTyxJQUFJRSxjQUFjO0FBQUEsU0FDYkYs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
|