@tricoteuses/assemblee 1.1.5 → 1.1.7
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/api.js +1 -1
- package/lib/bugs/acteur-00010/plugin.test.js +1 -1
- package/lib/bugs/acteur-00010.js +1 -1
- package/lib/bugs/acteur-00010.mjs +1 -1
- package/lib/bugs/agenda-00002/plugin.test.js +1 -1
- package/lib/bugs/agenda-00002.js +2 -2
- package/lib/bugs/agenda-00002.mjs +2 -2
- package/lib/bugs/agenda-00008/plugin.test.js +1 -1
- package/lib/bugs/agenda-00008.js +1 -1
- package/lib/bugs/agenda-00008.mjs +1 -1
- package/lib/bugs/agenda-00011/plugin.test.js +1 -1
- package/lib/bugs/agenda-00011.js +1 -1
- package/lib/bugs/agenda-00011.mjs +1 -1
- package/lib/bugs.js +1 -1
- package/lib/bugs.mjs +1 -1
- package/lib/cleaners/actes_legislatifs.js +1 -1
- package/lib/cleaners/actes_legislatifs.mjs +1 -1
- package/lib/cleaners/acteurs.js +1 -1
- package/lib/cleaners/acteurs.mjs +1 -1
- package/lib/cleaners/amendements.js +1 -1
- package/lib/cleaners/amendements.mjs +1 -1
- package/lib/cleaners/documents.js +1 -1
- package/lib/cleaners/documents.mjs +1 -1
- package/lib/cleaners/dossiers_legislatifs.js +1 -1
- package/lib/cleaners/dossiers_legislatifs.mjs +1 -1
- package/lib/cleaners/index.js +1 -1
- package/lib/cleaners/organes.js +1 -1
- package/lib/cleaners/organes.mjs +1 -1
- package/lib/cleaners/reunions.js +1 -1
- package/lib/cleaners/reunions.mjs +1 -1
- package/lib/cleaners/scrutins.js +1 -1
- package/lib/cleaners/scrutins.mjs +1 -1
- package/lib/cleaners/xml.js +1 -1
- package/lib/cleaners/xml.mjs +1 -1
- package/lib/datasets.js +1 -1
- package/lib/datasets.mjs +1 -1
- package/lib/dates.js +16 -7
- package/lib/dates.mjs +15 -6
- package/lib/dossiers_legislatifs.js +1 -1
- package/lib/dossiers_legislatifs.mjs +1 -1
- package/lib/file_systems.js +2 -2
- package/lib/file_systems.mjs +2 -2
- package/lib/git.d.ts +2 -1
- package/lib/git.js +77 -44
- package/lib/git.mjs +48 -25
- package/lib/index.js +1 -1
- package/lib/inserters.js +1 -1
- package/lib/inserters.mjs +1 -1
- package/lib/loaders.d.ts +52 -2
- package/lib/loaders.js +961 -187
- package/lib/loaders.mjs +285 -3
- package/lib/organes.js +1 -1
- package/lib/organes.mjs +1 -1
- package/lib/parsers/documents.js +1 -1
- package/lib/parsers/documents.mjs +1 -1
- package/lib/parsers/index.js +1 -1
- package/lib/parsers/recherche_amendements.js +39 -32
- package/lib/parsers/recherche_amendements.mjs +5 -1
- package/lib/raw_types/acteurs_et_organes.js +1 -1
- package/lib/raw_types/acteurs_et_organes.mjs +1 -1
- package/lib/raw_types/agendas.js +1 -1
- package/lib/raw_types/agendas.mjs +1 -1
- package/lib/raw_types/amendements.js +1 -1
- package/lib/raw_types/amendements.mjs +1 -1
- package/lib/raw_types/dossiers_legislatifs.js +1 -1
- package/lib/raw_types/dossiers_legislatifs.mjs +1 -1
- package/lib/raw_types/scrutins.js +1 -1
- package/lib/raw_types/scrutins.mjs +1 -1
- package/lib/scripts/bugs_helper.js +3 -3
- package/lib/scripts/bugs_helper.mjs +3 -3
- package/lib/scripts/clean_data.js +1 -1
- package/lib/scripts/clean_data.mjs +1 -1
- package/lib/scripts/clean_reorganized_data.js +63 -61
- package/lib/scripts/clean_reorganized_data.mjs +55 -48
- package/lib/scripts/diff_amendements.js +1 -1
- package/lib/scripts/diff_amendements.mjs +1 -1
- package/lib/scripts/document_dossiers_legislatifs.js +1 -1
- package/lib/scripts/document_dossiers_legislatifs.mjs +1 -1
- package/lib/scripts/get_today_reunions.js +1 -1
- package/lib/scripts/merge_scrutins.js +1 -1
- package/lib/scripts/merge_scrutins.mjs +1 -1
- package/lib/scripts/parse_textes_lois.js +5 -48
- package/lib/scripts/parse_textes_lois.mjs +5 -49
- package/lib/scripts/raw_types_from_amendements.js +1 -1
- package/lib/scripts/raw_types_from_amendements.mjs +1 -1
- package/lib/scripts/reorganize_data.js +231 -239
- package/lib/scripts/reorganize_data.mjs +50 -59
- package/lib/scripts/retrieve_deputes_photos.js +86 -107
- package/lib/scripts/retrieve_deputes_photos.mjs +21 -42
- package/lib/scripts/retrieve_documents.js +3 -3
- package/lib/scripts/retrieve_documents.mjs +3 -3
- package/lib/scripts/retrieve_open_data.js +29 -22
- package/lib/scripts/retrieve_open_data.mjs +9 -4
- package/lib/scripts/retrieve_pending_amendments.js +73 -81
- package/lib/scripts/retrieve_pending_amendments.mjs +19 -26
- package/lib/scripts/retrieve_senateurs_photos.js +65 -87
- package/lib/scripts/retrieve_senateurs_photos.mjs +21 -42
- package/lib/scripts/retrieve_textes_lois.js +32 -71
- package/lib/scripts/retrieve_textes_lois.mjs +6 -44
- package/lib/scripts/test_load.js +1 -1
- package/lib/scripts/test_load_big_files.js +1 -1
- package/lib/scripts/validate_json.js +3 -3
- package/lib/scripts/validate_json.mjs +3 -3
- package/lib/shared_types/codes_actes.js +1 -1
- package/lib/strings.js +1 -1
- package/lib/strings.mjs +1 -1
- package/lib/types/acteurs_et_organes.js +1 -1
- package/lib/types/acteurs_et_organes.mjs +1 -1
- package/lib/types/agendas.js +1 -1
- package/lib/types/agendas.mjs +1 -1
- package/lib/types/amendements.js +1 -1
- package/lib/types/amendements.mjs +1 -1
- package/lib/types/dossiers_legislatifs.js +1 -1
- package/lib/types/dossiers_legislatifs.mjs +1 -1
- package/lib/types/legislatures.js +1 -1
- package/lib/types/scrutins.js +1 -1
- package/lib/types/scrutins.mjs +1 -1
- package/lib/urls.js +1 -1
- package/lib/urls.mjs +1 -1
- package/package.json +6 -5
|
@@ -1,24 +1,29 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
require("core-js/modules/es.
|
|
5
|
-
require("core-js/modules/es.array.from.js");
|
|
6
|
-
require("core-js/modules/es.string.iterator.js");
|
|
3
|
+
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
4
|
+
require("core-js/modules/es.array.is-array.js");
|
|
7
5
|
require("core-js/modules/es.symbol.js");
|
|
8
6
|
require("core-js/modules/es.symbol.description.js");
|
|
9
7
|
require("core-js/modules/es.symbol.iterator.js");
|
|
10
8
|
require("core-js/modules/es.array.iterator.js");
|
|
9
|
+
require("core-js/modules/es.string.iterator.js");
|
|
11
10
|
require("core-js/modules/web.dom-collections.iterator.js");
|
|
12
|
-
require("core-js/modules/es.array.
|
|
11
|
+
require("core-js/modules/es.array.slice.js");
|
|
12
|
+
require("core-js/modules/es.function.name.js");
|
|
13
|
+
require("core-js/modules/es.array.from.js");
|
|
14
|
+
require("core-js/modules/es.weak-map.js");
|
|
15
|
+
require("core-js/modules/es.object.define-property.js");
|
|
16
|
+
require("core-js/modules/es.object.get-own-property-descriptor.js");
|
|
13
17
|
require("core-js/modules/es.number.constructor.js");
|
|
14
|
-
require("core-js/modules/es.regexp.exec.js");
|
|
15
18
|
require("core-js/modules/es.date.to-json.js");
|
|
16
19
|
require("core-js/modules/es.date.to-string.js");
|
|
20
|
+
require("core-js/modules/es.regexp.exec.js");
|
|
17
21
|
require("core-js/modules/es.string.replace.js");
|
|
18
22
|
require("core-js/modules/es.string.trim.js");
|
|
19
23
|
require("core-js/modules/es.array.map.js");
|
|
20
24
|
require("core-js/modules/es.array.reduce.js");
|
|
21
25
|
require("core-js/modules/es.object.to-string.js");
|
|
26
|
+
require("core-js/modules/es.array.some.js");
|
|
22
27
|
require("core-js/modules/es.regexp.to-string.js");
|
|
23
28
|
require("core-js/modules/es.object.entries.js");
|
|
24
29
|
require("core-js/modules/es.array.filter.js");
|
|
@@ -36,6 +41,7 @@ var _fsExtra = _interopRequireDefault(require("fs-extra"));
|
|
|
36
41
|
var _path = _interopRequireDefault(require("path"));
|
|
37
42
|
var _datasets = require("../datasets");
|
|
38
43
|
var _dates = require("../dates");
|
|
44
|
+
var git = _interopRequireWildcard(require("../git"));
|
|
39
45
|
var _file_systems = require("../file_systems");
|
|
40
46
|
var _loaders = require("../loaders");
|
|
41
47
|
var _acteurs_et_organes = require("../raw_types/acteurs_et_organes");
|
|
@@ -43,18 +49,21 @@ var _agendas = require("../raw_types/agendas");
|
|
|
43
49
|
var _amendements = require("../raw_types/amendements");
|
|
44
50
|
var _dossiers_legislatifs = require("../raw_types/dossiers_legislatifs");
|
|
45
51
|
var _scrutins = require("../raw_types/scrutins");
|
|
52
|
+
var _legislatures = require("../types/legislatures");
|
|
53
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
54
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
46
55
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
47
56
|
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
48
57
|
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
49
58
|
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
50
59
|
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
60
|
+
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
|
|
51
61
|
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
52
62
|
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
53
|
-
function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
|
|
54
|
-
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
55
|
-
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
|
|
56
63
|
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
57
64
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
65
|
+
function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
|
|
66
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
58
67
|
var optionsDefinitions = [{
|
|
59
68
|
alias: "C",
|
|
60
69
|
help: "clone repositories from given group (or organization) git URL",
|
|
@@ -78,6 +87,11 @@ var optionsDefinitions = [{
|
|
|
78
87
|
multiple: true,
|
|
79
88
|
name: "legislature",
|
|
80
89
|
type: Number
|
|
90
|
+
}, {
|
|
91
|
+
alias: "p",
|
|
92
|
+
help: "pull repositories before proceeding",
|
|
93
|
+
name: "pull",
|
|
94
|
+
type: Boolean
|
|
81
95
|
}, {
|
|
82
96
|
alias: "r",
|
|
83
97
|
help: "push commit to given remote",
|
|
@@ -105,57 +119,11 @@ var optionsDefinitions = [{
|
|
|
105
119
|
name: "dataDir",
|
|
106
120
|
type: String
|
|
107
121
|
}];
|
|
108
|
-
function commitAndPush(repositoryDir, commit, remotes) {
|
|
109
|
-
var error = false;
|
|
110
|
-
if (commit) {
|
|
111
|
-
(0, _child_process.execSync)("git add .", {
|
|
112
|
-
cwd: repositoryDir,
|
|
113
|
-
env: process.env,
|
|
114
|
-
encoding: "utf-8",
|
|
115
|
-
stdio: ["ignore", "ignore", "pipe"]
|
|
116
|
-
});
|
|
117
|
-
try {
|
|
118
|
-
(0, _child_process.execSync)('git commit -m "Nouvelle moisson" --quiet', {
|
|
119
|
-
cwd: repositoryDir,
|
|
120
|
-
env: process.env,
|
|
121
|
-
encoding: "utf-8"
|
|
122
|
-
});
|
|
123
|
-
} catch (childProcess) {
|
|
124
|
-
if (childProcess.stderr === null || !/nothing to commit/.test(childProcess.stdout)) {
|
|
125
|
-
console.error(childProcess.output);
|
|
126
|
-
throw childProcess;
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
var _iterator = _createForOfIteratorHelper(remotes || []),
|
|
130
|
-
_step;
|
|
131
|
-
try {
|
|
132
|
-
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
133
|
-
var remote = _step.value;
|
|
134
|
-
try {
|
|
135
|
-
(0, _child_process.execSync)("git push ".concat(remote, " master"), {
|
|
136
|
-
cwd: repositoryDir,
|
|
137
|
-
env: process.env,
|
|
138
|
-
encoding: "utf-8",
|
|
139
|
-
stdio: ["ignore", "ignore", "pipe"]
|
|
140
|
-
});
|
|
141
|
-
} catch (childProcess) {
|
|
142
|
-
// Don't stop when push fails.
|
|
143
|
-
console.error(childProcess.output);
|
|
144
|
-
error = true;
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
} catch (err) {
|
|
148
|
-
_iterator.e(err);
|
|
149
|
-
} finally {
|
|
150
|
-
_iterator.f();
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
return error;
|
|
154
|
-
}
|
|
155
122
|
function reorganizeData(options) {
|
|
123
|
+
var _options$legislature;
|
|
156
124
|
var dataDir = options.dataDir;
|
|
157
125
|
Date.prototype.toJSON = _dates.patchedDateToJson;
|
|
158
|
-
var
|
|
126
|
+
var exitCode = 0;
|
|
159
127
|
var gitGroupUrl = options.clone ? options.clone.trim().replace(/\/+$/, "") : undefined;
|
|
160
128
|
var validateRawData = !options["no-validate-raw"];
|
|
161
129
|
options.categories.map(function (datasetName) {
|
|
@@ -165,8 +133,13 @@ function reorganizeData(options) {
|
|
|
165
133
|
return enabledDatasets | _datasets.EnabledDatasets[datasetName];
|
|
166
134
|
}, _datasets.EnabledDatasets.None);
|
|
167
135
|
var choosenDatasets = _datasets.datasets;
|
|
168
|
-
|
|
169
|
-
|
|
136
|
+
// When a given legislature is 0, it is the same as giving no legislature:
|
|
137
|
+
// It means "every legislatures".
|
|
138
|
+
var legislatures = (_options$legislature = options.legislature) !== null && _options$legislature !== void 0 && _options$legislature.some(function (legislature) {
|
|
139
|
+
return legislature === 0;
|
|
140
|
+
}) ? undefined : options.legislature;
|
|
141
|
+
if (legislatures !== undefined) {
|
|
142
|
+
var enabledLegislatures = legislatures.map(function (legislature) {
|
|
170
143
|
return legislature.toString();
|
|
171
144
|
});
|
|
172
145
|
for (var _i = 0, _Object$entries = Object.entries(choosenDatasets); _i < _Object$entries.length; _i++) {
|
|
@@ -174,16 +147,16 @@ function reorganizeData(options) {
|
|
|
174
147
|
key = _Object$entries$_i[0],
|
|
175
148
|
value = _Object$entries$_i[1];
|
|
176
149
|
choosenDatasets[key] = value.filter(function (dataset) {
|
|
177
|
-
return enabledLegislatures.includes(dataset.legislature);
|
|
150
|
+
return dataset.legislature === _legislatures.Legislature.All || enabledLegislatures.includes(dataset.legislature);
|
|
178
151
|
});
|
|
179
152
|
}
|
|
180
153
|
}
|
|
181
154
|
if (enabledDatasets & _datasets.EnabledDatasets.ActeursEtOrganes) {
|
|
182
|
-
var
|
|
183
|
-
|
|
155
|
+
var _iterator = _createForOfIteratorHelper(choosenDatasets.acteursEtOrganes),
|
|
156
|
+
_step;
|
|
184
157
|
try {
|
|
185
|
-
for (
|
|
186
|
-
var dataset =
|
|
158
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
159
|
+
var dataset = _step.value;
|
|
187
160
|
var originalJsonDirectoryOrFilePath = _path["default"].join(dataDir, dataset.filename);
|
|
188
161
|
if (!options.silent) {
|
|
189
162
|
console.log("Reorganizing ".concat(originalJsonDirectoryOrFilePath));
|
|
@@ -198,21 +171,29 @@ function reorganizeData(options) {
|
|
|
198
171
|
});
|
|
199
172
|
}
|
|
200
173
|
var datasetReorganizedDir = _path["default"].join(dataDir, datasetName);
|
|
174
|
+
if (options.pull) {
|
|
175
|
+
(0, _child_process.execSync)("git pull --rebase", {
|
|
176
|
+
cwd: datasetReorganizedDir,
|
|
177
|
+
env: process.env,
|
|
178
|
+
encoding: "utf-8",
|
|
179
|
+
stdio: ["ignore", "ignore", "pipe"]
|
|
180
|
+
});
|
|
181
|
+
}
|
|
201
182
|
_fsExtra["default"].ensureDirSync(datasetReorganizedDir);
|
|
202
|
-
var
|
|
203
|
-
|
|
183
|
+
var _iterator2 = _createForOfIteratorHelper(_fsExtra["default"].readdirSync(datasetReorganizedDir)),
|
|
184
|
+
_step2;
|
|
204
185
|
try {
|
|
205
|
-
for (
|
|
206
|
-
var filename =
|
|
186
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
187
|
+
var filename = _step2.value;
|
|
207
188
|
if (filename[0] === ".") {
|
|
208
189
|
continue;
|
|
209
190
|
}
|
|
210
191
|
_fsExtra["default"].removeSync(_path["default"].join(datasetReorganizedDir, filename));
|
|
211
192
|
}
|
|
212
193
|
} catch (err) {
|
|
213
|
-
|
|
194
|
+
_iterator2.e(err);
|
|
214
195
|
} finally {
|
|
215
|
-
|
|
196
|
+
_iterator2.f();
|
|
216
197
|
}
|
|
217
198
|
var acteursReorganizedDir = _path["default"].join(datasetReorganizedDir, "acteurs");
|
|
218
199
|
_fsExtra["default"].mkdirSync(acteursReorganizedDir);
|
|
@@ -225,35 +206,35 @@ function reorganizeData(options) {
|
|
|
225
206
|
encoding: "utf8"
|
|
226
207
|
});
|
|
227
208
|
var originalData = validateRawData ? _acteurs_et_organes.Convert.toActeursEtOrganes(originalJson) : JSON.parse(originalJson);
|
|
228
|
-
var
|
|
229
|
-
|
|
209
|
+
var _iterator3 = _createForOfIteratorHelper(originalData["export"].acteurs.acteur),
|
|
210
|
+
_step3;
|
|
230
211
|
try {
|
|
231
|
-
for (
|
|
232
|
-
var acteur =
|
|
212
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
213
|
+
var acteur = _step3.value;
|
|
233
214
|
var reorganizedJsonFilePath = _path["default"].join(acteursReorganizedDir, acteur.uid["#text"] + ".json");
|
|
234
215
|
_fsExtra["default"].writeFileSync(reorganizedJsonFilePath, JSON.stringify(acteur, null, 2), {
|
|
235
216
|
encoding: "utf8"
|
|
236
217
|
});
|
|
237
218
|
}
|
|
238
219
|
} catch (err) {
|
|
239
|
-
|
|
220
|
+
_iterator3.e(err);
|
|
240
221
|
} finally {
|
|
241
|
-
|
|
222
|
+
_iterator3.f();
|
|
242
223
|
}
|
|
243
|
-
var
|
|
244
|
-
|
|
224
|
+
var _iterator4 = _createForOfIteratorHelper(originalData["export"].organes.organe),
|
|
225
|
+
_step4;
|
|
245
226
|
try {
|
|
246
|
-
for (
|
|
247
|
-
var organe =
|
|
227
|
+
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
228
|
+
var organe = _step4.value;
|
|
248
229
|
var _reorganizedJsonFilePath = _path["default"].join(organesReorganizedDir, organe.uid + ".json");
|
|
249
230
|
_fsExtra["default"].writeFileSync(_reorganizedJsonFilePath, JSON.stringify(organe, null, 2), {
|
|
250
231
|
encoding: "utf8"
|
|
251
232
|
});
|
|
252
233
|
}
|
|
253
234
|
} catch (err) {
|
|
254
|
-
|
|
235
|
+
_iterator4.e(err);
|
|
255
236
|
} finally {
|
|
256
|
-
|
|
237
|
+
_iterator4.f();
|
|
257
238
|
}
|
|
258
239
|
}
|
|
259
240
|
break;
|
|
@@ -261,11 +242,11 @@ function reorganizeData(options) {
|
|
|
261
242
|
{
|
|
262
243
|
var deportsByActeurUid = {};
|
|
263
244
|
if (_fsExtra["default"].existsSync(_path["default"].join(originalJsonDirectoryOrFilePath, "deport"))) {
|
|
264
|
-
var
|
|
265
|
-
|
|
245
|
+
var _iterator5 = _createForOfIteratorHelper((0, _file_systems.walkDir)(originalJsonDirectoryOrFilePath, ["deport"])),
|
|
246
|
+
_step5;
|
|
266
247
|
try {
|
|
267
|
-
for (
|
|
268
|
-
var deportSplitPath =
|
|
248
|
+
for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
|
|
249
|
+
var deportSplitPath = _step5.value;
|
|
269
250
|
var deportFilename = deportSplitPath[deportSplitPath.length - 1];
|
|
270
251
|
if (!deportFilename.endsWith(".json")) {
|
|
271
252
|
continue;
|
|
@@ -286,9 +267,9 @@ function reorganizeData(options) {
|
|
|
286
267
|
_deports.push(deport);
|
|
287
268
|
}
|
|
288
269
|
} catch (err) {
|
|
289
|
-
|
|
270
|
+
_iterator5.e(err);
|
|
290
271
|
} finally {
|
|
291
|
-
|
|
272
|
+
_iterator5.f();
|
|
292
273
|
}
|
|
293
274
|
for (var _i2 = 0, _Object$values = Object.values(deportsByActeurUid); _i2 < _Object$values.length; _i2++) {
|
|
294
275
|
var deports = _Object$values[_i2];
|
|
@@ -299,11 +280,11 @@ function reorganizeData(options) {
|
|
|
299
280
|
}
|
|
300
281
|
var mandatsByActeurUid = {};
|
|
301
282
|
if (_fsExtra["default"].existsSync(_path["default"].join(originalJsonDirectoryOrFilePath, "mandat"))) {
|
|
302
|
-
var
|
|
303
|
-
|
|
283
|
+
var _iterator6 = _createForOfIteratorHelper((0, _file_systems.walkDir)(originalJsonDirectoryOrFilePath, ["mandat"])),
|
|
284
|
+
_step6;
|
|
304
285
|
try {
|
|
305
|
-
for (
|
|
306
|
-
var mandatSplitPath =
|
|
286
|
+
for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
|
|
287
|
+
var mandatSplitPath = _step6.value;
|
|
307
288
|
var mandatFilename = mandatSplitPath[mandatSplitPath.length - 1];
|
|
308
289
|
if (!mandatFilename.endsWith(".json")) {
|
|
309
290
|
continue;
|
|
@@ -324,9 +305,9 @@ function reorganizeData(options) {
|
|
|
324
305
|
_mandats.push(mandat);
|
|
325
306
|
}
|
|
326
307
|
} catch (err) {
|
|
327
|
-
|
|
308
|
+
_iterator6.e(err);
|
|
328
309
|
} finally {
|
|
329
|
-
|
|
310
|
+
_iterator6.f();
|
|
330
311
|
}
|
|
331
312
|
for (var _i3 = 0, _Object$values2 = Object.values(mandatsByActeurUid); _i3 < _Object$values2.length; _i3++) {
|
|
332
313
|
var mandats = _Object$values2[_i3];
|
|
@@ -335,11 +316,11 @@ function reorganizeData(options) {
|
|
|
335
316
|
});
|
|
336
317
|
}
|
|
337
318
|
}
|
|
338
|
-
var
|
|
339
|
-
|
|
319
|
+
var _iterator7 = _createForOfIteratorHelper((0, _file_systems.walkDir)(originalJsonDirectoryOrFilePath, ["acteur"])),
|
|
320
|
+
_step7;
|
|
340
321
|
try {
|
|
341
|
-
for (
|
|
342
|
-
var acteurSplitPath =
|
|
322
|
+
for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
|
|
323
|
+
var acteurSplitPath = _step7.value;
|
|
343
324
|
var acteurFilename = acteurSplitPath[acteurSplitPath.length - 1];
|
|
344
325
|
if (!acteurFilename.endsWith(".json")) {
|
|
345
326
|
continue;
|
|
@@ -374,15 +355,15 @@ function reorganizeData(options) {
|
|
|
374
355
|
});
|
|
375
356
|
}
|
|
376
357
|
} catch (err) {
|
|
377
|
-
|
|
358
|
+
_iterator7.e(err);
|
|
378
359
|
} finally {
|
|
379
|
-
|
|
360
|
+
_iterator7.f();
|
|
380
361
|
}
|
|
381
|
-
var
|
|
382
|
-
|
|
362
|
+
var _iterator8 = _createForOfIteratorHelper((0, _file_systems.walkDir)(originalJsonDirectoryOrFilePath, ["organe"])),
|
|
363
|
+
_step8;
|
|
383
364
|
try {
|
|
384
|
-
for (
|
|
385
|
-
var organeSplitPath =
|
|
365
|
+
for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
|
|
366
|
+
var organeSplitPath = _step8.value;
|
|
386
367
|
var organeFilename = organeSplitPath[organeSplitPath.length - 1];
|
|
387
368
|
if (!organeFilename.endsWith(".json")) {
|
|
388
369
|
continue;
|
|
@@ -402,29 +383,32 @@ function reorganizeData(options) {
|
|
|
402
383
|
});
|
|
403
384
|
}
|
|
404
385
|
} catch (err) {
|
|
405
|
-
|
|
386
|
+
_iterator8.e(err);
|
|
406
387
|
} finally {
|
|
407
|
-
|
|
388
|
+
_iterator8.f();
|
|
408
389
|
}
|
|
409
390
|
}
|
|
410
391
|
break;
|
|
411
392
|
}
|
|
412
|
-
if (
|
|
413
|
-
|
|
393
|
+
if (options.commit) {
|
|
394
|
+
var errorCode = git.commitAndPush(datasetReorganizedDir, "Nouvelle moisson", options.remote);
|
|
395
|
+
if (errorCode !== 0 && exitCode === 0) {
|
|
396
|
+
exitCode = errorCode;
|
|
397
|
+
}
|
|
414
398
|
}
|
|
415
399
|
}
|
|
416
400
|
} catch (err) {
|
|
417
|
-
|
|
401
|
+
_iterator.e(err);
|
|
418
402
|
} finally {
|
|
419
|
-
|
|
403
|
+
_iterator.f();
|
|
420
404
|
}
|
|
421
405
|
}
|
|
422
406
|
if (enabledDatasets & _datasets.EnabledDatasets.Agendas) {
|
|
423
|
-
var
|
|
424
|
-
|
|
407
|
+
var _iterator9 = _createForOfIteratorHelper(choosenDatasets.agendas),
|
|
408
|
+
_step9;
|
|
425
409
|
try {
|
|
426
|
-
for (
|
|
427
|
-
var _dataset =
|
|
410
|
+
for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
|
|
411
|
+
var _dataset = _step9.value;
|
|
428
412
|
var _originalJsonDirectoryOrFilePath = _path["default"].join(dataDir, _dataset.filename);
|
|
429
413
|
if (!options.silent) {
|
|
430
414
|
console.log("Reorganizing ".concat(_originalJsonDirectoryOrFilePath));
|
|
@@ -440,20 +424,20 @@ function reorganizeData(options) {
|
|
|
440
424
|
}
|
|
441
425
|
var _datasetReorganizedDir = _path["default"].join(dataDir, _datasetName);
|
|
442
426
|
_fsExtra["default"].ensureDirSync(_datasetReorganizedDir);
|
|
443
|
-
var
|
|
444
|
-
|
|
427
|
+
var _iterator10 = _createForOfIteratorHelper(_fsExtra["default"].readdirSync(_datasetReorganizedDir)),
|
|
428
|
+
_step10;
|
|
445
429
|
try {
|
|
446
|
-
for (
|
|
447
|
-
var _filename =
|
|
430
|
+
for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
|
|
431
|
+
var _filename = _step10.value;
|
|
448
432
|
if (_filename[0] === ".") {
|
|
449
433
|
continue;
|
|
450
434
|
}
|
|
451
435
|
_fsExtra["default"].removeSync(_path["default"].join(_datasetReorganizedDir, _filename));
|
|
452
436
|
}
|
|
453
437
|
} catch (err) {
|
|
454
|
-
|
|
438
|
+
_iterator10.e(err);
|
|
455
439
|
} finally {
|
|
456
|
-
|
|
440
|
+
_iterator10.f();
|
|
457
441
|
}
|
|
458
442
|
switch (_dataset.structure) {
|
|
459
443
|
case _datasets.DatasetStructure.SingleFile:
|
|
@@ -462,27 +446,27 @@ function reorganizeData(options) {
|
|
|
462
446
|
encoding: "utf8"
|
|
463
447
|
});
|
|
464
448
|
var _originalData = validateRawData ? _agendas.Convert.toAgendas(_originalJson) : JSON.parse(_originalJson);
|
|
465
|
-
var
|
|
466
|
-
|
|
449
|
+
var _iterator11 = _createForOfIteratorHelper(_originalData.reunions.reunion),
|
|
450
|
+
_step11;
|
|
467
451
|
try {
|
|
468
|
-
for (
|
|
469
|
-
var reunion =
|
|
452
|
+
for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {
|
|
453
|
+
var reunion = _step11.value;
|
|
470
454
|
writeReunionReorganizedJson(_datasetReorganizedDir, reunion);
|
|
471
455
|
}
|
|
472
456
|
} catch (err) {
|
|
473
|
-
|
|
457
|
+
_iterator11.e(err);
|
|
474
458
|
} finally {
|
|
475
|
-
|
|
459
|
+
_iterator11.f();
|
|
476
460
|
}
|
|
477
461
|
}
|
|
478
462
|
break;
|
|
479
463
|
case _datasets.DatasetStructure.SegmentedFiles:
|
|
480
464
|
{
|
|
481
|
-
var
|
|
482
|
-
|
|
465
|
+
var _iterator12 = _createForOfIteratorHelper((0, _file_systems.walkDir)(_originalJsonDirectoryOrFilePath, ["reunion"])),
|
|
466
|
+
_step12;
|
|
483
467
|
try {
|
|
484
|
-
for (
|
|
485
|
-
var reunionSplitPath =
|
|
468
|
+
for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {
|
|
469
|
+
var reunionSplitPath = _step12.value;
|
|
486
470
|
var reunionFilename = reunionSplitPath[reunionSplitPath.length - 1];
|
|
487
471
|
if (!reunionFilename.endsWith(".json")) {
|
|
488
472
|
continue;
|
|
@@ -499,29 +483,32 @@ function reorganizeData(options) {
|
|
|
499
483
|
writeReunionReorganizedJson(_datasetReorganizedDir, _reunion);
|
|
500
484
|
}
|
|
501
485
|
} catch (err) {
|
|
502
|
-
|
|
486
|
+
_iterator12.e(err);
|
|
503
487
|
} finally {
|
|
504
|
-
|
|
488
|
+
_iterator12.f();
|
|
505
489
|
}
|
|
506
490
|
}
|
|
507
491
|
break;
|
|
508
492
|
}
|
|
509
|
-
if (
|
|
510
|
-
|
|
493
|
+
if (options.commit) {
|
|
494
|
+
var _errorCode = git.commitAndPush(_datasetReorganizedDir, "Nouvelle moisson", options.remote);
|
|
495
|
+
if (_errorCode !== 0 && exitCode === 0) {
|
|
496
|
+
exitCode = _errorCode;
|
|
497
|
+
}
|
|
511
498
|
}
|
|
512
499
|
}
|
|
513
500
|
} catch (err) {
|
|
514
|
-
|
|
501
|
+
_iterator9.e(err);
|
|
515
502
|
} finally {
|
|
516
|
-
|
|
503
|
+
_iterator9.f();
|
|
517
504
|
}
|
|
518
505
|
}
|
|
519
506
|
if (enabledDatasets & _datasets.EnabledDatasets.Amendements) {
|
|
520
|
-
var
|
|
521
|
-
|
|
507
|
+
var _iterator13 = _createForOfIteratorHelper(choosenDatasets.amendements),
|
|
508
|
+
_step13;
|
|
522
509
|
try {
|
|
523
|
-
for (
|
|
524
|
-
var _dataset2 =
|
|
510
|
+
for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {
|
|
511
|
+
var _dataset2 = _step13.value;
|
|
525
512
|
var _originalJsonDirectoryOrFilePath2 = _path["default"].join(dataDir, _dataset2.filename);
|
|
526
513
|
if (!options.silent) {
|
|
527
514
|
console.log("Reorganizing ".concat(_originalJsonDirectoryOrFilePath2));
|
|
@@ -537,20 +524,20 @@ function reorganizeData(options) {
|
|
|
537
524
|
}
|
|
538
525
|
var _datasetReorganizedDir2 = _path["default"].join(dataDir, _datasetName2);
|
|
539
526
|
_fsExtra["default"].ensureDirSync(_datasetReorganizedDir2);
|
|
540
|
-
var
|
|
541
|
-
|
|
527
|
+
var _iterator14 = _createForOfIteratorHelper(_fsExtra["default"].readdirSync(_datasetReorganizedDir2)),
|
|
528
|
+
_step14;
|
|
542
529
|
try {
|
|
543
|
-
for (
|
|
544
|
-
var _filename2 =
|
|
530
|
+
for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {
|
|
531
|
+
var _filename2 = _step14.value;
|
|
545
532
|
if (_filename2[0] === ".") {
|
|
546
533
|
continue;
|
|
547
534
|
}
|
|
548
535
|
_fsExtra["default"].removeSync(_path["default"].join(_datasetReorganizedDir2, _filename2));
|
|
549
536
|
}
|
|
550
537
|
} catch (err) {
|
|
551
|
-
|
|
538
|
+
_iterator14.e(err);
|
|
552
539
|
} finally {
|
|
553
|
-
|
|
540
|
+
_iterator14.f();
|
|
554
541
|
}
|
|
555
542
|
switch (_dataset2.structure) {
|
|
556
543
|
case _datasets.DatasetStructure.SingleFile:
|
|
@@ -559,38 +546,38 @@ function reorganizeData(options) {
|
|
|
559
546
|
encoding: "utf8"
|
|
560
547
|
});
|
|
561
548
|
var _originalData2 = validateRawData ? _amendements.Convert.toAmendements(_originalJson2) : JSON.parse(_originalJson2);
|
|
562
|
-
var
|
|
563
|
-
|
|
549
|
+
var _iterator15 = _createForOfIteratorHelper(_originalData2.textesEtAmendements.texteleg),
|
|
550
|
+
_step15;
|
|
564
551
|
try {
|
|
565
|
-
for (
|
|
566
|
-
var texteLegislatif =
|
|
567
|
-
var
|
|
568
|
-
|
|
552
|
+
for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {
|
|
553
|
+
var texteLegislatif = _step15.value;
|
|
554
|
+
var _iterator16 = _createForOfIteratorHelper(texteLegislatif.amendements),
|
|
555
|
+
_step16;
|
|
569
556
|
try {
|
|
570
|
-
for (
|
|
571
|
-
var amendement =
|
|
557
|
+
for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {
|
|
558
|
+
var amendement = _step16.value;
|
|
572
559
|
writeAmendementReorganizedJson(_datasetReorganizedDir2, amendement);
|
|
573
560
|
}
|
|
574
561
|
} catch (err) {
|
|
575
|
-
|
|
562
|
+
_iterator16.e(err);
|
|
576
563
|
} finally {
|
|
577
|
-
|
|
564
|
+
_iterator16.f();
|
|
578
565
|
}
|
|
579
566
|
}
|
|
580
567
|
} catch (err) {
|
|
581
|
-
|
|
568
|
+
_iterator15.e(err);
|
|
582
569
|
} finally {
|
|
583
|
-
|
|
570
|
+
_iterator15.f();
|
|
584
571
|
}
|
|
585
572
|
}
|
|
586
573
|
break;
|
|
587
574
|
case _datasets.DatasetStructure.SegmentedFiles:
|
|
588
575
|
{
|
|
589
|
-
var
|
|
590
|
-
|
|
576
|
+
var _iterator17 = _createForOfIteratorHelper((0, _file_systems.walkDir)(_originalJsonDirectoryOrFilePath2)),
|
|
577
|
+
_step17;
|
|
591
578
|
try {
|
|
592
|
-
for (
|
|
593
|
-
var amendementSplitPath =
|
|
579
|
+
for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {
|
|
580
|
+
var amendementSplitPath = _step17.value;
|
|
594
581
|
var amendementFilename = amendementSplitPath[amendementSplitPath.length - 1];
|
|
595
582
|
if (!amendementFilename.endsWith(".json")) {
|
|
596
583
|
continue;
|
|
@@ -607,29 +594,32 @@ function reorganizeData(options) {
|
|
|
607
594
|
writeAmendementReorganizedJson(_datasetReorganizedDir2, _amendement);
|
|
608
595
|
}
|
|
609
596
|
} catch (err) {
|
|
610
|
-
|
|
597
|
+
_iterator17.e(err);
|
|
611
598
|
} finally {
|
|
612
|
-
|
|
599
|
+
_iterator17.f();
|
|
613
600
|
}
|
|
614
601
|
}
|
|
615
602
|
break;
|
|
616
603
|
}
|
|
617
|
-
if (
|
|
618
|
-
|
|
604
|
+
if (options.commit) {
|
|
605
|
+
var _errorCode2 = git.commitAndPush(_datasetReorganizedDir2, "Nouvelle moisson", options.remote);
|
|
606
|
+
if (_errorCode2 !== 0 && exitCode === 0) {
|
|
607
|
+
exitCode = _errorCode2;
|
|
608
|
+
}
|
|
619
609
|
}
|
|
620
610
|
}
|
|
621
611
|
} catch (err) {
|
|
622
|
-
|
|
612
|
+
_iterator13.e(err);
|
|
623
613
|
} finally {
|
|
624
|
-
|
|
614
|
+
_iterator13.f();
|
|
625
615
|
}
|
|
626
616
|
}
|
|
627
617
|
if (enabledDatasets & _datasets.EnabledDatasets.DossiersLegislatifs) {
|
|
628
|
-
var
|
|
629
|
-
|
|
618
|
+
var _iterator18 = _createForOfIteratorHelper(choosenDatasets.dossiersLegislatifs),
|
|
619
|
+
_step18;
|
|
630
620
|
try {
|
|
631
|
-
for (
|
|
632
|
-
var _dataset3 =
|
|
621
|
+
for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {
|
|
622
|
+
var _dataset3 = _step18.value;
|
|
633
623
|
var _originalJsonDirectoryOrFilePath3 = _path["default"].join(dataDir, _dataset3.filename);
|
|
634
624
|
if (!options.silent) {
|
|
635
625
|
console.log("Reorganizing ".concat(_originalJsonDirectoryOrFilePath3));
|
|
@@ -645,20 +635,20 @@ function reorganizeData(options) {
|
|
|
645
635
|
}
|
|
646
636
|
var _datasetReorganizedDir3 = _path["default"].join(dataDir, _datasetName3);
|
|
647
637
|
_fsExtra["default"].ensureDirSync(_datasetReorganizedDir3);
|
|
648
|
-
var
|
|
649
|
-
|
|
638
|
+
var _iterator19 = _createForOfIteratorHelper(_fsExtra["default"].readdirSync(_datasetReorganizedDir3)),
|
|
639
|
+
_step19;
|
|
650
640
|
try {
|
|
651
|
-
for (
|
|
652
|
-
var _filename3 =
|
|
641
|
+
for (_iterator19.s(); !(_step19 = _iterator19.n()).done;) {
|
|
642
|
+
var _filename3 = _step19.value;
|
|
653
643
|
if (_filename3[0] === ".") {
|
|
654
644
|
continue;
|
|
655
645
|
}
|
|
656
646
|
_fsExtra["default"].removeSync(_path["default"].join(_datasetReorganizedDir3, _filename3));
|
|
657
647
|
}
|
|
658
648
|
} catch (err) {
|
|
659
|
-
|
|
649
|
+
_iterator19.e(err);
|
|
660
650
|
} finally {
|
|
661
|
-
|
|
651
|
+
_iterator19.f();
|
|
662
652
|
}
|
|
663
653
|
var documentsDir = _path["default"].join(_datasetReorganizedDir3, "documents");
|
|
664
654
|
_fsExtra["default"].mkdirSync(documentsDir);
|
|
@@ -671,39 +661,39 @@ function reorganizeData(options) {
|
|
|
671
661
|
encoding: "utf8"
|
|
672
662
|
});
|
|
673
663
|
var _originalData3 = validateRawData ? _dossiers_legislatifs.Convert.toDossiersLegislatifs(_originalJson3) : JSON.parse(_originalJson3);
|
|
674
|
-
var
|
|
675
|
-
|
|
664
|
+
var _iterator20 = _createForOfIteratorHelper(_originalData3["export"].textesLegislatifs.document),
|
|
665
|
+
_step20;
|
|
676
666
|
try {
|
|
677
|
-
for (
|
|
678
|
-
var document =
|
|
667
|
+
for (_iterator20.s(); !(_step20 = _iterator20.n()).done;) {
|
|
668
|
+
var document = _step20.value;
|
|
679
669
|
writeDocumentReorganizedJson(documentsDir, document);
|
|
680
670
|
}
|
|
681
671
|
} catch (err) {
|
|
682
|
-
|
|
672
|
+
_iterator20.e(err);
|
|
683
673
|
} finally {
|
|
684
|
-
|
|
674
|
+
_iterator20.f();
|
|
685
675
|
}
|
|
686
|
-
var
|
|
687
|
-
|
|
676
|
+
var _iterator21 = _createForOfIteratorHelper(_originalData3["export"].dossiersLegislatifs.dossier),
|
|
677
|
+
_step21;
|
|
688
678
|
try {
|
|
689
|
-
for (
|
|
690
|
-
var dossierParlementaire =
|
|
679
|
+
for (_iterator21.s(); !(_step21 = _iterator21.n()).done;) {
|
|
680
|
+
var dossierParlementaire = _step21.value.dossierParlementaire;
|
|
691
681
|
writeDossierParlementaireReorganizedJson(dossiersDir, dossierParlementaire);
|
|
692
682
|
}
|
|
693
683
|
} catch (err) {
|
|
694
|
-
|
|
684
|
+
_iterator21.e(err);
|
|
695
685
|
} finally {
|
|
696
|
-
|
|
686
|
+
_iterator21.f();
|
|
697
687
|
}
|
|
698
688
|
}
|
|
699
689
|
break;
|
|
700
690
|
case _datasets.DatasetStructure.SegmentedFiles:
|
|
701
691
|
{
|
|
702
|
-
var
|
|
703
|
-
|
|
692
|
+
var _iterator22 = _createForOfIteratorHelper((0, _file_systems.walkDir)(_originalJsonDirectoryOrFilePath3, ["document"])),
|
|
693
|
+
_step22;
|
|
704
694
|
try {
|
|
705
|
-
for (
|
|
706
|
-
var documentSplitPath =
|
|
695
|
+
for (_iterator22.s(); !(_step22 = _iterator22.n()).done;) {
|
|
696
|
+
var documentSplitPath = _step22.value;
|
|
707
697
|
var documentFilename = documentSplitPath[documentSplitPath.length - 1];
|
|
708
698
|
if (!documentFilename.endsWith(".json")) {
|
|
709
699
|
continue;
|
|
@@ -720,15 +710,15 @@ function reorganizeData(options) {
|
|
|
720
710
|
writeDocumentReorganizedJson(documentsDir, _document);
|
|
721
711
|
}
|
|
722
712
|
} catch (err) {
|
|
723
|
-
|
|
713
|
+
_iterator22.e(err);
|
|
724
714
|
} finally {
|
|
725
|
-
|
|
715
|
+
_iterator22.f();
|
|
726
716
|
}
|
|
727
|
-
var
|
|
728
|
-
|
|
717
|
+
var _iterator23 = _createForOfIteratorHelper((0, _file_systems.walkDir)(_originalJsonDirectoryOrFilePath3, ["dossierParlementaire"])),
|
|
718
|
+
_step23;
|
|
729
719
|
try {
|
|
730
|
-
for (
|
|
731
|
-
var dossierParlementaireSplitPath =
|
|
720
|
+
for (_iterator23.s(); !(_step23 = _iterator23.n()).done;) {
|
|
721
|
+
var dossierParlementaireSplitPath = _step23.value;
|
|
732
722
|
var dossierParlementaireFilename = dossierParlementaireSplitPath[dossierParlementaireSplitPath.length - 1];
|
|
733
723
|
if (!dossierParlementaireFilename.endsWith(".json")) {
|
|
734
724
|
continue;
|
|
@@ -745,29 +735,32 @@ function reorganizeData(options) {
|
|
|
745
735
|
writeDossierParlementaireReorganizedJson(dossiersDir, _dossierParlementaire);
|
|
746
736
|
}
|
|
747
737
|
} catch (err) {
|
|
748
|
-
|
|
738
|
+
_iterator23.e(err);
|
|
749
739
|
} finally {
|
|
750
|
-
|
|
740
|
+
_iterator23.f();
|
|
751
741
|
}
|
|
752
742
|
}
|
|
753
743
|
break;
|
|
754
744
|
}
|
|
755
|
-
if (
|
|
756
|
-
|
|
745
|
+
if (options.commit) {
|
|
746
|
+
var _errorCode3 = git.commitAndPush(_datasetReorganizedDir3, "Nouvelle moisson", options.remote);
|
|
747
|
+
if (_errorCode3 !== 0 && exitCode === 0) {
|
|
748
|
+
exitCode = _errorCode3;
|
|
749
|
+
}
|
|
757
750
|
}
|
|
758
751
|
}
|
|
759
752
|
} catch (err) {
|
|
760
|
-
|
|
753
|
+
_iterator18.e(err);
|
|
761
754
|
} finally {
|
|
762
|
-
|
|
755
|
+
_iterator18.f();
|
|
763
756
|
}
|
|
764
757
|
}
|
|
765
758
|
if (enabledDatasets & _datasets.EnabledDatasets.Scrutins) {
|
|
766
|
-
var
|
|
767
|
-
|
|
759
|
+
var _iterator24 = _createForOfIteratorHelper(choosenDatasets.scrutins),
|
|
760
|
+
_step24;
|
|
768
761
|
try {
|
|
769
|
-
for (
|
|
770
|
-
var _dataset4 =
|
|
762
|
+
for (_iterator24.s(); !(_step24 = _iterator24.n()).done;) {
|
|
763
|
+
var _dataset4 = _step24.value;
|
|
771
764
|
var _originalJsonDirectoryOrFilePath4 = _path["default"].join(dataDir, _dataset4.filename);
|
|
772
765
|
if (!options.silent) {
|
|
773
766
|
console.log("Reorganizing ".concat(_originalJsonDirectoryOrFilePath4));
|
|
@@ -783,20 +776,20 @@ function reorganizeData(options) {
|
|
|
783
776
|
}
|
|
784
777
|
var _datasetReorganizedDir4 = _path["default"].join(dataDir, _datasetName4);
|
|
785
778
|
_fsExtra["default"].ensureDirSync(_datasetReorganizedDir4);
|
|
786
|
-
var
|
|
787
|
-
|
|
779
|
+
var _iterator25 = _createForOfIteratorHelper(_fsExtra["default"].readdirSync(_datasetReorganizedDir4)),
|
|
780
|
+
_step25;
|
|
788
781
|
try {
|
|
789
|
-
for (
|
|
790
|
-
var _filename4 =
|
|
782
|
+
for (_iterator25.s(); !(_step25 = _iterator25.n()).done;) {
|
|
783
|
+
var _filename4 = _step25.value;
|
|
791
784
|
if (_filename4[0] === ".") {
|
|
792
785
|
continue;
|
|
793
786
|
}
|
|
794
787
|
_fsExtra["default"].removeSync(_path["default"].join(_datasetReorganizedDir4, _filename4));
|
|
795
788
|
}
|
|
796
789
|
} catch (err) {
|
|
797
|
-
|
|
790
|
+
_iterator25.e(err);
|
|
798
791
|
} finally {
|
|
799
|
-
|
|
792
|
+
_iterator25.f();
|
|
800
793
|
}
|
|
801
794
|
switch (_dataset4.structure) {
|
|
802
795
|
case _datasets.DatasetStructure.SingleFile:
|
|
@@ -805,27 +798,27 @@ function reorganizeData(options) {
|
|
|
805
798
|
encoding: "utf8"
|
|
806
799
|
});
|
|
807
800
|
var _originalData4 = validateRawData ? _scrutins.Convert.toScrutins(_originalJson4) : JSON.parse(_originalJson4);
|
|
808
|
-
var
|
|
809
|
-
|
|
801
|
+
var _iterator26 = _createForOfIteratorHelper(_originalData4.scrutins.scrutin),
|
|
802
|
+
_step26;
|
|
810
803
|
try {
|
|
811
|
-
for (
|
|
812
|
-
var scrutin =
|
|
804
|
+
for (_iterator26.s(); !(_step26 = _iterator26.n()).done;) {
|
|
805
|
+
var scrutin = _step26.value;
|
|
813
806
|
writeScrutinReorganizedJson(_datasetReorganizedDir4, scrutin);
|
|
814
807
|
}
|
|
815
808
|
} catch (err) {
|
|
816
|
-
|
|
809
|
+
_iterator26.e(err);
|
|
817
810
|
} finally {
|
|
818
|
-
|
|
811
|
+
_iterator26.f();
|
|
819
812
|
}
|
|
820
813
|
}
|
|
821
814
|
break;
|
|
822
815
|
case _datasets.DatasetStructure.SegmentedFiles:
|
|
823
816
|
{
|
|
824
|
-
var
|
|
825
|
-
|
|
817
|
+
var _iterator27 = _createForOfIteratorHelper((0, _file_systems.walkDir)(_originalJsonDirectoryOrFilePath4)),
|
|
818
|
+
_step27;
|
|
826
819
|
try {
|
|
827
|
-
for (
|
|
828
|
-
var scrutinSplitPath =
|
|
820
|
+
for (_iterator27.s(); !(_step27 = _iterator27.n()).done;) {
|
|
821
|
+
var scrutinSplitPath = _step27.value;
|
|
829
822
|
var scrutinFilename = scrutinSplitPath[scrutinSplitPath.length - 1];
|
|
830
823
|
if (!scrutinFilename.endsWith(".json")) {
|
|
831
824
|
continue;
|
|
@@ -842,27 +835,30 @@ function reorganizeData(options) {
|
|
|
842
835
|
writeScrutinReorganizedJson(_datasetReorganizedDir4, _scrutin);
|
|
843
836
|
}
|
|
844
837
|
} catch (err) {
|
|
845
|
-
|
|
838
|
+
_iterator27.e(err);
|
|
846
839
|
} finally {
|
|
847
|
-
|
|
840
|
+
_iterator27.f();
|
|
848
841
|
}
|
|
849
842
|
}
|
|
850
843
|
break;
|
|
851
844
|
}
|
|
852
|
-
if (
|
|
853
|
-
|
|
845
|
+
if (options.commit) {
|
|
846
|
+
var _errorCode4 = git.commitAndPush(_datasetReorganizedDir4, "Nouvelle moisson", options.remote);
|
|
847
|
+
if (_errorCode4 !== 0 && exitCode === 0) {
|
|
848
|
+
exitCode = _errorCode4;
|
|
849
|
+
}
|
|
854
850
|
}
|
|
855
851
|
}
|
|
856
852
|
} catch (err) {
|
|
857
|
-
|
|
853
|
+
_iterator24.e(err);
|
|
858
854
|
} finally {
|
|
859
|
-
|
|
855
|
+
_iterator24.f();
|
|
860
856
|
}
|
|
861
857
|
}
|
|
862
858
|
|
|
863
859
|
// Restore standard conversion of dates to JSON.
|
|
864
860
|
Date.prototype.toJSON = _dates.existingDateToJson;
|
|
865
|
-
return
|
|
861
|
+
return exitCode;
|
|
866
862
|
}
|
|
867
863
|
function writeAmendementReorganizedJson(datasetReorganizedDir, amendement) {
|
|
868
864
|
var uidTexteLegislatif = amendement.texteLegislatifRef;
|
|
@@ -902,10 +898,6 @@ function writeScrutinReorganizedJson(scrutinsDir, scrutin) {
|
|
|
902
898
|
/* istanbul ignore if */
|
|
903
899
|
if (process.argv[1].endsWith("reorganize_data.ts")) {
|
|
904
900
|
var options = (0, _commandLineArgs["default"])(optionsDefinitions);
|
|
905
|
-
|
|
906
|
-
process.exit(1);
|
|
907
|
-
} else {
|
|
908
|
-
process.exit(0);
|
|
909
|
-
}
|
|
901
|
+
process.exit(reorganizeData(options));
|
|
910
902
|
}
|
|
911
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJvcHRpb25zRGVmaW5pdGlvbnMiLCJhbGlhcyIsImhlbHAiLCJuYW1lIiwidHlwZSIsIlN0cmluZyIsIkJvb2xlYW4iLCJkZWZhdWx0VmFsdWUiLCJtdWx0aXBsZSIsIk51bWJlciIsImRlZmF1bHRPcHRpb24iLCJjb21taXRBbmRQdXNoIiwicmVwb3NpdG9yeURpciIsImNvbW1pdCIsInJlbW90ZXMiLCJlcnJvciIsImV4ZWNTeW5jIiwiY3dkIiwiZW52IiwicHJvY2VzcyIsImVuY29kaW5nIiwic3RkaW8iLCJjaGlsZFByb2Nlc3MiLCJzdGRlcnIiLCJ0ZXN0Iiwic3Rkb3V0IiwiY29uc29sZSIsIm91dHB1dCIsInJlbW90ZSIsInJlb3JnYW5pemVEYXRhIiwib3B0aW9ucyIsImRhdGFEaXIiLCJEYXRlIiwicHJvdG90eXBlIiwidG9KU09OIiwicGF0Y2hlZERhdGVUb0pzb24iLCJnaXRHcm91cFVybCIsImNsb25lIiwidHJpbSIsInJlcGxhY2UiLCJ1bmRlZmluZWQiLCJ2YWxpZGF0ZVJhd0RhdGEiLCJjYXRlZ29yaWVzIiwibWFwIiwiZGF0YXNldE5hbWUiLCJhc3NlcnQiLCJub3RTdHJpY3RFcXVhbCIsIkVuYWJsZWREYXRhc2V0cyIsImVuYWJsZWREYXRhc2V0cyIsInJlZHVjZSIsIk5vbmUiLCJjaG9vc2VuRGF0YXNldHMiLCJkYXRhc2V0cyIsImxlZ2lzbGF0dXJlIiwiZW5hYmxlZExlZ2lzbGF0dXJlcyIsInRvU3RyaW5nIiwiT2JqZWN0IiwiZW50cmllcyIsImtleSIsInZhbHVlIiwiZmlsdGVyIiwiZGF0YXNldCIsImluY2x1ZGVzIiwiQWN0ZXVyc0V0T3JnYW5lcyIsImFjdGV1cnNFdE9yZ2FuZXMiLCJvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoIiwicGF0aCIsImpvaW4iLCJmaWxlbmFtZSIsInNpbGVudCIsImxvZyIsImJhc2VuYW1lIiwiZGF0YXNldFJlb3JnYW5pemVkRGlyIiwiZnMiLCJlbnN1cmVEaXJTeW5jIiwicmVhZGRpclN5bmMiLCJyZW1vdmVTeW5jIiwiYWN0ZXVyc1Jlb3JnYW5pemVkRGlyIiwibWtkaXJTeW5jIiwib3JnYW5lc1Jlb3JnYW5pemVkRGlyIiwic3RydWN0dXJlIiwiRGF0YXNldFN0cnVjdHVyZSIsIlNpbmdsZUZpbGUiLCJvcmlnaW5hbEpzb24iLCJyZWFkRmlsZVN5bmMiLCJvcmlnaW5hbERhdGEiLCJBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydCIsInRvQWN0ZXVyc0V0T3JnYW5lcyIsIkpTT04iLCJwYXJzZSIsImFjdGV1cnMiLCJhY3RldXIiLCJyZW9yZ2FuaXplZEpzb25GaWxlUGF0aCIsInVpZCIsIndyaXRlRmlsZVN5bmMiLCJzdHJpbmdpZnkiLCJvcmdhbmVzIiwib3JnYW5lIiwiU2VnbWVudGVkRmlsZXMiLCJkZXBvcnRzQnlBY3RldXJVaWQiLCJleGlzdHNTeW5jIiwid2Fsa0RpciIsImRlcG9ydFNwbGl0UGF0aCIsImRlcG9ydEZpbGVuYW1lIiwibGVuZ3RoIiwiZW5kc1dpdGgiLCJkZXBvcnRPcmlnaW5hbEZpbGVQYXRoIiwidmVyYm9zZSIsImRlcG9ydE9yaWdpbmFsSnNvbiIsImRlcG9ydE9yaWdpbmFsIiwidG9EZXBvcnQiLCJkZXBvcnQiLCJkZXBvcnRzIiwiYWN0ZXVyUmVmIiwicHVzaCIsInZhbHVlcyIsInNvcnQiLCJhIiwiYiIsImxvY2FsZUNvbXBhcmUiLCJtYW5kYXRzQnlBY3RldXJVaWQiLCJtYW5kYXRTcGxpdFBhdGgiLCJtYW5kYXRGaWxlbmFtZSIsIm1hbmRhdE9yaWdpbmFsRmlsZVBhdGgiLCJtYW5kYXRPcmlnaW5hbEpzb24iLCJtYW5kYXRPcmlnaW5hbCIsInRvTWFuZGF0V3JhcHBlciIsIm1hbmRhdCIsIm1hbmRhdHMiLCJhY3RldXJTcGxpdFBhdGgiLCJhY3RldXJGaWxlbmFtZSIsImFjdGV1ck9yaWdpbmFsRmlsZVBhdGgiLCJhY3RldXJPcmlnaW5hbEpzb24iLCJhY3RldXJPcmlnaW5hbCIsInRvQWN0ZXVyIiwiYWN0ZXVyVWlkIiwic3RyaWN0RXF1YWwiLCJhY3RldXJSZW9yZ2FuaXplZEpzb25GaWxlUGF0aCIsIm9yZ2FuZVNwbGl0UGF0aCIsIm9yZ2FuZUZpbGVuYW1lIiwib3JnYW5lT3JpZ2luYWxGaWxlUGF0aCIsIm9yZ2FuZU9yaWdpbmFsSnNvbiIsIm9yZ2FuZU9yaWdpbmFsIiwidG9PcmdhbmUiLCJvcmdhbmVSZW9yZ2FuaXplZEpzb25GaWxlUGF0aCIsIkFnZW5kYXMiLCJhZ2VuZGFzIiwiQWdlbmRhc1Jhd0NvbnZlcnQiLCJ0b0FnZW5kYXMiLCJyZXVuaW9ucyIsInJldW5pb24iLCJ3cml0ZVJldW5pb25SZW9yZ2FuaXplZEpzb24iLCJyZXVuaW9uU3BsaXRQYXRoIiwicmV1bmlvbkZpbGVuYW1lIiwicmV1bmlvbk9yaWdpbmFsRmlsZVBhdGgiLCJyZXVuaW9uT3JpZ2luYWxKc29uIiwicmV1bmlvbk9yaWdpbmFsIiwidG9SZXVuaW9uIiwiQW1lbmRlbWVudHMiLCJhbWVuZGVtZW50cyIsIkFtZW5kZW1lbnRzUmF3Q29udmVydCIsInRvQW1lbmRlbWVudHMiLCJ0ZXh0ZXNFdEFtZW5kZW1lbnRzIiwidGV4dGVsZWciLCJ0ZXh0ZUxlZ2lzbGF0aWYiLCJhbWVuZGVtZW50Iiwid3JpdGVBbWVuZGVtZW50UmVvcmdhbml6ZWRKc29uIiwiYW1lbmRlbWVudFNwbGl0UGF0aCIsImFtZW5kZW1lbnRGaWxlbmFtZSIsImFtZW5kZW1lbnRPcmlnaW5hbEZpbGVQYXRoIiwiYW1lbmRlbWVudE9yaWdpbmFsSnNvbiIsImFtZW5kZW1lbnRPcmlnaW5hbCIsInRvQW1lbmRlbWVudFdyYXBwZXIiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9zc2llcnNMZWdpc2xhdGlmcyIsImRvY3VtZW50c0RpciIsImRvc3NpZXJzRGlyIiwiRG9zc2llcnNMZWdpc2xhdGlmc1Jhd0NvbnZlcnQiLCJ0b0Rvc3NpZXJzTGVnaXNsYXRpZnMiLCJ0ZXh0ZXNMZWdpc2xhdGlmcyIsImRvY3VtZW50Iiwid3JpdGVEb2N1bWVudFJlb3JnYW5pemVkSnNvbiIsImRvc3NpZXIiLCJkb3NzaWVyUGFybGVtZW50YWlyZSIsIndyaXRlRG9zc2llclBhcmxlbWVudGFpcmVSZW9yZ2FuaXplZEpzb24iLCJkb2N1bWVudFNwbGl0UGF0aCIsImRvY3VtZW50RmlsZW5hbWUiLCJkb2N1bWVudE9yaWdpbmFsRmlsZVBhdGgiLCJkb2N1bWVudE9yaWdpbmFsSnNvbiIsImRvY3VtZW50T3JpZ2luYWwiLCJ0b0RvY3VtZW50IiwiZG9zc2llclBhcmxlbWVudGFpcmVTcGxpdFBhdGgiLCJkb3NzaWVyUGFybGVtZW50YWlyZUZpbGVuYW1lIiwiZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEZpbGVQYXRoIiwiZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEpzb24iLCJkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsIiwidG9Eb3NzaWVyUGFybGVtZW50YWlyZSIsIlNjcnV0aW5zIiwic2NydXRpbnMiLCJTY3J1dGluc1Jhd0NvbnZlcnQiLCJ0b1NjcnV0aW5zIiwic2NydXRpbiIsIndyaXRlU2NydXRpblJlb3JnYW5pemVkSnNvbiIsInNjcnV0aW5TcGxpdFBhdGgiLCJzY3J1dGluRmlsZW5hbWUiLCJzY3J1dGluT3JpZ2luYWxGaWxlUGF0aCIsInNjcnV0aW5PcmlnaW5hbEpzb24iLCJzY3J1dGluT3JpZ2luYWwiLCJ0b1NjcnV0aW5XcmFwcGVyIiwiZXhpc3RpbmdEYXRlVG9Kc29uIiwidWlkVGV4dGVMZWdpc2xhdGlmIiwidGV4dGVMZWdpc2xhdGlmUmVmIiwidGV4dGVMZWdpc2xhdGlmRGlyIiwicGF0aEZyb21Eb2N1bWVudFVpZCIsInBhdGhGcm9tRG9zc2llclBhcmxlbWVudGFpcmVVaWQiLCJyZXVuaW9uc0RpciIsInBhdGhGcm9tUmV1bmlvblVpZCIsInNjcnV0aW5zRGlyIiwicGF0aEZyb21TY3J1dGluVWlkIiwiYXJndiIsImNvbW1hbmRMaW5lQXJncyIsImV4aXQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyaXB0cy9yZW9yZ2FuaXplX2RhdGEudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCJcbmltcG9ydCB7IENoaWxkUHJvY2VzcywgZXhlY1N5bmMgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiXG5pbXBvcnQgY29tbWFuZExpbmVBcmdzIGZyb20gXCJjb21tYW5kLWxpbmUtYXJnc1wiXG5pbXBvcnQgZnMgZnJvbSBcImZzLWV4dHJhXCJcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcblxuaW1wb3J0IHsgZGF0YXNldHMsIERhdGFzZXRTdHJ1Y3R1cmUsIEVuYWJsZWREYXRhc2V0cyB9IGZyb20gXCIuLi9kYXRhc2V0c1wiXG5pbXBvcnQgeyBleGlzdGluZ0RhdGVUb0pzb24sIHBhdGNoZWREYXRlVG9Kc29uIH0gZnJvbSBcIi4uL2RhdGVzXCJcbmltcG9ydCB7IHdhbGtEaXIgfSBmcm9tIFwiLi4vZmlsZV9zeXN0ZW1zXCJcbmltcG9ydCB7XG4gIHBhdGhGcm9tRG9jdW1lbnRVaWQsXG4gIHBhdGhGcm9tRG9zc2llclBhcmxlbWVudGFpcmVVaWQsXG4gIHBhdGhGcm9tUmV1bmlvblVpZCxcbiAgcGF0aEZyb21TY3J1dGluVWlkLFxufSBmcm9tIFwiLi4vbG9hZGVyc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIEFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9hY3RldXJzX2V0X29yZ2FuZXNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBBZ2VuZGFzUmF3Q29udmVydCB9IGZyb20gXCIuLi9yYXdfdHlwZXMvYWdlbmRhc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIEFtZW5kZW1lbnRzUmF3Q29udmVydCB9IGZyb20gXCIuLi9yYXdfdHlwZXMvYW1lbmRlbWVudHNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBEb3NzaWVyc0xlZ2lzbGF0aWZzUmF3Q29udmVydCB9IGZyb20gXCIuLi9yYXdfdHlwZXMvZG9zc2llcnNfbGVnaXNsYXRpZnNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBTY3J1dGluc1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL3NjcnV0aW5zXCJcblxuY29uc3Qgb3B0aW9uc0RlZmluaXRpb25zID0gW1xuICB7XG4gICAgYWxpYXM6IFwiQ1wiLFxuICAgIGhlbHA6IFwiY2xvbmUgcmVwb3NpdG9yaWVzIGZyb20gZ2l2ZW4gZ3JvdXAgKG9yIG9yZ2FuaXphdGlvbikgZ2l0IFVSTFwiLFxuICAgIG5hbWU6IFwiY2xvbmVcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJjXCIsXG4gICAgaGVscDogXCJjb21taXQgc3BsaXQgZmlsZXNcIixcbiAgICBuYW1lOiBcImNvbW1pdFwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJrXCIsXG4gICAgZGVmYXVsdFZhbHVlOiBbXCJBbGxcIl0sXG4gICAgaGVscDogXCJjYXRlZ29yaWVzIG9mIGRhdGFzZXRzIHRvIHJlb3JnYW5pemVcIixcbiAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICBuYW1lOiBcImNhdGVnb3JpZXNcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJsXCIsXG4gICAgaGVscDogXCJsZWdpc2xhdHVyZXMgb2YgY2F0ZWdvcmllcyBvZiBkYXRhc2V0cyB0byByZXRyaWV2ZVwiLFxuICAgIG11bHRpcGxlOiB0cnVlLFxuICAgIG5hbWU6IFwibGVnaXNsYXR1cmVcIixcbiAgICB0eXBlOiBOdW1iZXIsXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJyXCIsXG4gICAgaGVscDogXCJwdXNoIGNvbW1pdCB0byBnaXZlbiByZW1vdGVcIixcbiAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICBuYW1lOiBcInJlbW90ZVwiLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcInNcIixcbiAgICBoZWxwOiBcImRvbid0IGxvZyBhbnl0aGluZ1wiLFxuICAgIG5hbWU6IFwic2lsZW50XCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcIlZcIixcbiAgICBoZWxwOiBcImRvbid0IHZhbGlkYXRlIHJhdyBkYXRhXCIsXG4gICAgbmFtZTogXCJuby12YWxpZGF0ZS1yYXdcIixcbiAgICB0eXBlOiBCb29sZWFuLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwidlwiLFxuICAgIGhlbHA6IFwidmVyYm9zZSBsb2dzXCIsXG4gICAgbmFtZTogXCJ2ZXJib3NlXCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGRlZmF1bHRPcHRpb246IHRydWUsXG4gICAgaGVscDogXCJkaXJlY3RvcnkgY29udGFpbmluZyBBc3NlbWJsw6llIG9wZW4gZGF0YSBmaWxlc1wiLFxuICAgIG5hbWU6IFwiZGF0YURpclwiLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgfSxcbl1cblxuZnVuY3Rpb24gY29tbWl0QW5kUHVzaChcbiAgcmVwb3NpdG9yeURpcjogc3RyaW5nLFxuICBjb21taXQ6IGJvb2xlYW4sXG4gIHJlbW90ZXM/OiBzdHJpbmdbXSxcbik6IGJvb2xlYW4ge1xuICBsZXQgZXJyb3IgPSBmYWxzZVxuICBpZiAoY29tbWl0KSB7XG4gICAgZXhlY1N5bmMoYGdpdCBhZGQgLmAsIHtcbiAgICAgIGN3ZDogcmVwb3NpdG9yeURpcixcbiAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgfSlcbiAgICB0cnkge1xuICAgICAgZXhlY1N5bmMoJ2dpdCBjb21taXQgLW0gXCJOb3V2ZWxsZSBtb2lzc29uXCIgLS1xdWlldCcsIHtcbiAgICAgICAgY3dkOiByZXBvc2l0b3J5RGlyLFxuICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgfSlcbiAgICB9IGNhdGNoIChjaGlsZFByb2Nlc3MpIHtcbiAgICAgIGlmIChcbiAgICAgICAgKGNoaWxkUHJvY2VzcyBhcyBDaGlsZFByb2Nlc3MpLnN0ZGVyciA9PT0gbnVsbCB8fFxuICAgICAgICAhL25vdGhpbmcgdG8gY29tbWl0Ly50ZXN0KChjaGlsZFByb2Nlc3MgYXMgYW55KS5zdGRvdXQpXG4gICAgICApIHtcbiAgICAgICAgY29uc29sZS5lcnJvcigoY2hpbGRQcm9jZXNzIGFzIGFueSkub3V0cHV0KVxuICAgICAgICB0aHJvdyBjaGlsZFByb2Nlc3NcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCByZW1vdGUgb2YgcmVtb3RlcyB8fCBbXSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBwdXNoICR7cmVtb3RlfSBtYXN0ZXJgLCB7XG4gICAgICAgICAgY3dkOiByZXBvc2l0b3J5RGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH0gY2F0Y2ggKGNoaWxkUHJvY2Vzcykge1xuICAgICAgICAvLyBEb24ndCBzdG9wIHdoZW4gcHVzaCBmYWlscy5cbiAgICAgICAgY29uc29sZS5lcnJvcigoY2hpbGRQcm9jZXNzIGFzIGFueSkub3V0cHV0KVxuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGVycm9yXG59XG5cbmZ1bmN0aW9uIHJlb3JnYW5pemVEYXRhKG9wdGlvbnM6IGFueSk6IGJvb2xlYW4ge1xuICBjb25zdCBkYXRhRGlyID0gb3B0aW9ucy5kYXRhRGlyXG4gIERhdGUucHJvdG90eXBlLnRvSlNPTiA9IHBhdGNoZWREYXRlVG9Kc29uXG5cbiAgbGV0IGVycm9yID0gZmFsc2VcbiAgY29uc3QgZ2l0R3JvdXBVcmwgPSBvcHRpb25zLmNsb25lXG4gICAgPyBvcHRpb25zLmNsb25lLnRyaW0oKS5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpXG4gICAgOiB1bmRlZmluZWRcbiAgY29uc3QgdmFsaWRhdGVSYXdEYXRhID0gIW9wdGlvbnNbXCJuby12YWxpZGF0ZS1yYXdcIl1cblxuICBvcHRpb25zLmNhdGVnb3JpZXMubWFwKChkYXRhc2V0TmFtZTogc3RyaW5nKSA9PlxuICAgIGFzc2VydC5ub3RTdHJpY3RFcXVhbChcbiAgICAgIChFbmFibGVkRGF0YXNldHMgYXMgYW55IGFzIHsgW25hbWU6IHN0cmluZ106IEVuYWJsZWREYXRhc2V0cyB9KVtcbiAgICAgICAgZGF0YXNldE5hbWVcbiAgICAgIF0sXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBgVW5rbm93biBuYW1lIG9mIGRhdGFzZXQ6ICR7ZGF0YXNldE5hbWV9YCxcbiAgICApLFxuICApXG4gIGNvbnN0IGVuYWJsZWREYXRhc2V0cyA9IG9wdGlvbnMuY2F0ZWdvcmllcy5yZWR1Y2UoXG4gICAgKGVuYWJsZWREYXRhc2V0czogRW5hYmxlZERhdGFzZXRzLCBkYXRhc2V0TmFtZTogc3RyaW5nKTogRW5hYmxlZERhdGFzZXRzID0+XG4gICAgICBlbmFibGVkRGF0YXNldHMgfFxuICAgICAgKEVuYWJsZWREYXRhc2V0cyBhcyBhbnkgYXMgeyBbbmFtZTogc3RyaW5nXTogRW5hYmxlZERhdGFzZXRzIH0pW1xuICAgICAgICBkYXRhc2V0TmFtZVxuICAgICAgXSxcbiAgICBFbmFibGVkRGF0YXNldHMuTm9uZSxcbiAgKVxuXG4gIGxldCBjaG9vc2VuRGF0YXNldHMgPSBkYXRhc2V0c1xuICBpZiAob3B0aW9ucy5sZWdpc2xhdHVyZSkge1xuICAgIGNvbnN0IGVuYWJsZWRMZWdpc2xhdHVyZXMgPSBvcHRpb25zLmxlZ2lzbGF0dXJlLm1hcCgobGVnaXNsYXR1cmU6IG51bWJlcikgPT5cbiAgICAgIGxlZ2lzbGF0dXJlLnRvU3RyaW5nKCksXG4gICAgKVxuICAgIGZvciAobGV0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhjaG9vc2VuRGF0YXNldHMpKSB7XG4gICAgICBjaG9vc2VuRGF0YXNldHNba2V5IGFzIGtleW9mIHR5cGVvZiBjaG9vc2VuRGF0YXNldHNdID0gdmFsdWUuZmlsdGVyKFxuICAgICAgICAoZGF0YXNldDogeyBsZWdpc2xhdHVyZTogYW55IH0pID0+XG4gICAgICAgICAgZW5hYmxlZExlZ2lzbGF0dXJlcy5pbmNsdWRlcyhkYXRhc2V0LmxlZ2lzbGF0dXJlKSxcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgY2hvb3NlbkRhdGFzZXRzLmFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZSxcbiAgICAgIClcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFJlb3JnYW5pemluZyAke29yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGh9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKFxuICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICBcIi5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9LmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBmcy5lbnN1cmVEaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcilcbiAgICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKSkge1xuICAgICAgICBpZiAoZmlsZW5hbWVbMF0gPT09IFwiLlwiKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBmcy5yZW1vdmVTeW5jKHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGZpbGVuYW1lKSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFjdGV1cnNSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIFwiYWN0ZXVyc1wiKVxuICAgICAgZnMubWtkaXJTeW5jKGFjdGV1cnNSZW9yZ2FuaXplZERpcilcbiAgICAgIGNvbnN0IG9yZ2FuZXNSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIFwib3JnYW5lc1wiKVxuICAgICAgZnMubWtkaXJTeW5jKG9yZ2FuZXNSZW9yZ2FuaXplZERpcilcblxuICAgICAgc3dpdGNoIChkYXRhc2V0LnN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2luZ2xlRmlsZTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRGF0YTogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgID8gQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9BY3RldXJzRXRPcmdhbmVzKG9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgZm9yIChjb25zdCBhY3RldXIgb2Ygb3JpZ2luYWxEYXRhLmV4cG9ydC5hY3RldXJzLmFjdGV1cikge1xuICAgICAgICAgICAgICBjb25zdCByZW9yZ2FuaXplZEpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIGFjdGV1cnNSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICAgICAgICBhY3RldXIudWlkW1wiI3RleHRcIl0gKyBcIi5qc29uXCIsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgICAgICAgICAgICByZW9yZ2FuaXplZEpzb25GaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShhY3RldXIsIG51bGwsIDIpLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3Qgb3JnYW5lIG9mIG9yaWdpbmFsRGF0YS5leHBvcnQub3JnYW5lcy5vcmdhbmUpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmVvcmdhbml6ZWRKc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmdhbmVzUmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgb3JnYW5lLnVpZCArIFwiLmpzb25cIixcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIHJlb3JnYW5pemVkSnNvbkZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG9yZ2FuZSwgbnVsbCwgMiksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IGRlcG9ydHNCeUFjdGV1clVpZDoge1xuICAgICAgICAgICAgICBbYWN0ZXVyVWlkOiBzdHJpbmddOiB7IHVpZDogc3RyaW5nIH1bXVxuICAgICAgICAgICAgfSA9IHt9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZzLmV4aXN0c1N5bmMoXG4gICAgICAgICAgICAgICAgcGF0aC5qb2luKG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsIFwiZGVwb3J0XCIpLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBkZXBvcnRTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIFtcImRlcG9ydFwiXSxcbiAgICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlcG9ydEZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICAgIGRlcG9ydFNwbGl0UGF0aFtkZXBvcnRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgICBpZiAoIWRlcG9ydEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGRlcG9ydE9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAgLi4uZGVwb3J0U3BsaXRQYXRoLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgICAgYCAgTG9hZGluZyBcImRlcG9ydFwiIGZpbGU6ICR7ZGVwb3J0T3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBkZXBvcnRPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICAgIGRlcG9ydE9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGNvbnN0IGRlcG9ydE9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICAgID8gQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9EZXBvcnQoZGVwb3J0T3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGRlcG9ydE9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICBjb25zdCBkZXBvcnQgPSBkZXBvcnRPcmlnaW5hbC5kZXBvcnRcbiAgICAgICAgICAgICAgICBsZXQgZGVwb3J0cyA9IGRlcG9ydHNCeUFjdGV1clVpZFtkZXBvcnQuYWN0ZXVyUmVmXVxuICAgICAgICAgICAgICAgIGlmIChkZXBvcnRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgIGRlcG9ydHMgPSBkZXBvcnRzQnlBY3RldXJVaWRbZGVwb3J0LmFjdGV1clJlZl0gPSBbXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZXBvcnRzLnB1c2goZGVwb3J0KVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZm9yIChjb25zdCBkZXBvcnRzIG9mIE9iamVjdC52YWx1ZXMoZGVwb3J0c0J5QWN0ZXVyVWlkKSkge1xuICAgICAgICAgICAgICAgIGRlcG9ydHMuc29ydCgoYSwgYikgPT5cbiAgICAgICAgICAgICAgICAgIGEudWlkLmxlbmd0aCA9PT0gYi51aWQubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgID8gYS51aWQubG9jYWxlQ29tcGFyZShiLnVpZClcbiAgICAgICAgICAgICAgICAgICAgOiBhLnVpZC5sZW5ndGggLSBiLnVpZC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG1hbmRhdHNCeUFjdGV1clVpZDoge1xuICAgICAgICAgICAgICBbYWN0ZXVyVWlkOiBzdHJpbmddOiB7IHVpZDogc3RyaW5nIH1bXVxuICAgICAgICAgICAgfSA9IHt9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZzLmV4aXN0c1N5bmMoXG4gICAgICAgICAgICAgICAgcGF0aC5qb2luKG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsIFwibWFuZGF0XCIpLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBtYW5kYXRTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIFtcIm1hbmRhdFwiXSxcbiAgICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmRhdEZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICAgIG1hbmRhdFNwbGl0UGF0aFttYW5kYXRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgICBpZiAoIW1hbmRhdEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmRhdE9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAgLi4ubWFuZGF0U3BsaXRQYXRoLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgICAgYCAgTG9hZGluZyBcIm1hbmRhdFwiIGZpbGU6ICR7bWFuZGF0T3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBtYW5kYXRPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICAgIG1hbmRhdE9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmRhdE9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICAgID8gQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9NYW5kYXRXcmFwcGVyKFxuICAgICAgICAgICAgICAgICAgICAgIG1hbmRhdE9yaWdpbmFsSnNvbixcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG1hbmRhdE9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICBjb25zdCBtYW5kYXQgPSBtYW5kYXRPcmlnaW5hbC5tYW5kYXRcbiAgICAgICAgICAgICAgICBsZXQgbWFuZGF0cyA9IG1hbmRhdHNCeUFjdGV1clVpZFttYW5kYXQuYWN0ZXVyUmVmXVxuICAgICAgICAgICAgICAgIGlmIChtYW5kYXRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgIG1hbmRhdHMgPSBtYW5kYXRzQnlBY3RldXJVaWRbbWFuZGF0LmFjdGV1clJlZl0gPSBbXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBtYW5kYXRzLnB1c2gobWFuZGF0KVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZm9yIChjb25zdCBtYW5kYXRzIG9mIE9iamVjdC52YWx1ZXMobWFuZGF0c0J5QWN0ZXVyVWlkKSkge1xuICAgICAgICAgICAgICAgIG1hbmRhdHMuc29ydCgoYSwgYikgPT5cbiAgICAgICAgICAgICAgICAgIGEudWlkLmxlbmd0aCA9PT0gYi51aWQubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgID8gYS51aWQubG9jYWxlQ29tcGFyZShiLnVpZClcbiAgICAgICAgICAgICAgICAgICAgOiBhLnVpZC5sZW5ndGggLSBiLnVpZC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgYWN0ZXVyU3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIFtcImFjdGV1clwiXSxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyRmlsZW5hbWUgPSBhY3RldXJTcGxpdFBhdGhbYWN0ZXVyU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgIGlmICghYWN0ZXVyRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyT3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLmFjdGV1clNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJhY3RldXJcIiBmaWxlOiAke2FjdGV1ck9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyT3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgYWN0ZXVyT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBhY3RldXJPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydC50b0FjdGV1cihhY3RldXJPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGFjdGV1ck9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyID0gYWN0ZXVyT3JpZ2luYWwuYWN0ZXVyXG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1clVpZCA9IGFjdGV1ci51aWRbXCIjdGV4dFwiXVxuICAgICAgICAgICAgICBjb25zdCBkZXBvcnRzID0gZGVwb3J0c0J5QWN0ZXVyVWlkW2FjdGV1clVpZF1cbiAgICAgICAgICAgICAgaWYgKGRlcG9ydHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhY3RldXIuZGVwb3J0cywgdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIGFjdGV1ci5kZXBvcnRzID0geyBkZXBvcnQ6IGRlcG9ydHMgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IG1hbmRhdHMgPSBtYW5kYXRzQnlBY3RldXJVaWRbYWN0ZXVyVWlkXVxuICAgICAgICAgICAgICBpZiAobWFuZGF0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFjdGV1ci5tYW5kYXRzLCB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgYWN0ZXVyLm1hbmRhdHMgPSB7IG1hbmRhdDogbWFuZGF0cyB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyUmVvcmdhbml6ZWRKc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBhY3RldXJzUmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgYWN0ZXVyVWlkICsgXCIuanNvblwiLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgYWN0ZXVyUmVvcmdhbml6ZWRKc29uRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoYWN0ZXVyLCBudWxsLCAyKSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG9yZ2FuZVNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICBbXCJvcmdhbmVcIl0sXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZUZpbGVuYW1lID0gb3JnYW5lU3BsaXRQYXRoW29yZ2FuZVNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIW9yZ2FuZUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZU9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5vcmdhbmVTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwib3JnYW5lXCIgZmlsZTogJHtvcmdhbmVPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZU9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIG9yZ2FuZU9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3Qgb3JnYW5lT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9PcmdhbmUob3JnYW5lT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShvcmdhbmVPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZSA9IG9yZ2FuZU9yaWdpbmFsLm9yZ2FuZVxuICAgICAgICAgICAgICBjb25zdCBvcmdhbmVSZW9yZ2FuaXplZEpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yZ2FuZXNSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICAgICAgICBvcmdhbmUudWlkICsgXCIuanNvblwiLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgb3JnYW5lUmVvcmdhbml6ZWRKc29uRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkob3JnYW5lLCBudWxsLCAyKSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGNvbW1pdEFuZFB1c2goZGF0YXNldFJlb3JnYW5pemVkRGlyLCBvcHRpb25zLmNvbW1pdCwgb3B0aW9ucy5yZW1vdGUpXG4gICAgICApIHtcbiAgICAgICAgZXJyb3IgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BZ2VuZGFzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGNob29zZW5EYXRhc2V0cy5hZ2VuZGFzKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUsXG4gICAgICApXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZW9yZ2FuaXppbmcgJHtvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRofWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShcbiAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgXCIuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldFJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgZnMuZW5zdXJlRGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpXG4gICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZzLnJlYWRkaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcikpIHtcbiAgICAgICAgaWYgKGZpbGVuYW1lWzBdID09PSBcIi5cIikge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgZnMucmVtb3ZlU3luYyhwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBmaWxlbmFtZSkpXG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNpbmdsZUZpbGU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbERhdGE6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICA/IEFnZW5kYXNSYXdDb252ZXJ0LnRvQWdlbmRhcyhvcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIDogSlNPTi5wYXJzZShvcmlnaW5hbEpzb24pXG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgcmV1bmlvbiBvZiBvcmlnaW5hbERhdGEucmV1bmlvbnMucmV1bmlvbikge1xuICAgICAgICAgICAgICB3cml0ZVJldW5pb25SZW9yZ2FuaXplZEpzb24oZGF0YXNldFJlb3JnYW5pemVkRGlyLCByZXVuaW9uKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXM6XG4gICAgICAgICAge1xuICAgICAgICAgICAgZm9yIChjb25zdCByZXVuaW9uU3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIFtcInJldW5pb25cIl0sXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJldW5pb25GaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgcmV1bmlvblNwbGl0UGF0aFtyZXVuaW9uU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgIGlmICghcmV1bmlvbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHJldW5pb25PcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4ucmV1bmlvblNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJyZXVuaW9uXCIgZmlsZTogJHtyZXVuaW9uT3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCByZXVuaW9uT3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgcmV1bmlvbk9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3QgcmV1bmlvbk9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IEFnZW5kYXNSYXdDb252ZXJ0LnRvUmV1bmlvbihyZXVuaW9uT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShyZXVuaW9uT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCByZXVuaW9uID0gcmV1bmlvbk9yaWdpbmFsLnJldW5pb25cbiAgICAgICAgICAgICAgd3JpdGVSZXVuaW9uUmVvcmdhbml6ZWRKc29uKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgcmV1bmlvbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBjb21taXRBbmRQdXNoKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgb3B0aW9ucy5jb21taXQsIG9wdGlvbnMucmVtb3RlKVxuICAgICAgKSB7XG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQW1lbmRlbWVudHMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgY2hvb3NlbkRhdGFzZXRzLmFtZW5kZW1lbnRzKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUsXG4gICAgICApXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZW9yZ2FuaXppbmcgJHtvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRofWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShcbiAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgXCIuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldFJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgZnMuZW5zdXJlRGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpXG4gICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZzLnJlYWRkaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcikpIHtcbiAgICAgICAgaWYgKGZpbGVuYW1lWzBdID09PSBcIi5cIikge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgZnMucmVtb3ZlU3luYyhwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBmaWxlbmFtZSkpXG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNpbmdsZUZpbGU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbERhdGE6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICA/IEFtZW5kZW1lbnRzUmF3Q29udmVydC50b0FtZW5kZW1lbnRzKG9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgZm9yIChjb25zdCB0ZXh0ZUxlZ2lzbGF0aWYgb2Ygb3JpZ2luYWxEYXRhLnRleHRlc0V0QW1lbmRlbWVudHNcbiAgICAgICAgICAgICAgLnRleHRlbGVnKSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgYW1lbmRlbWVudCBvZiB0ZXh0ZUxlZ2lzbGF0aWYuYW1lbmRlbWVudHMpIHtcbiAgICAgICAgICAgICAgICB3cml0ZUFtZW5kZW1lbnRSZW9yZ2FuaXplZEpzb24oXG4gICAgICAgICAgICAgICAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgICBhbWVuZGVtZW50LFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXM6XG4gICAgICAgICAge1xuICAgICAgICAgICAgZm9yIChjb25zdCBhbWVuZGVtZW50U3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGFtZW5kZW1lbnRGaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgYW1lbmRlbWVudFNwbGl0UGF0aFthbWVuZGVtZW50U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgIGlmICghYW1lbmRlbWVudEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGFtZW5kZW1lbnRPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uYW1lbmRlbWVudFNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJhbWVuZGVtZW50XCIgZmlsZTogJHthbWVuZGVtZW50T3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBhbWVuZGVtZW50T3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgYW1lbmRlbWVudE9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3QgYW1lbmRlbWVudE9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IEFtZW5kZW1lbnRzUmF3Q29udmVydC50b0FtZW5kZW1lbnRXcmFwcGVyKFxuICAgICAgICAgICAgICAgICAgICBhbWVuZGVtZW50T3JpZ2luYWxKc29uLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShhbWVuZGVtZW50T3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBhbWVuZGVtZW50ID0gYW1lbmRlbWVudE9yaWdpbmFsLmFtZW5kZW1lbnRcbiAgICAgICAgICAgICAgd3JpdGVBbWVuZGVtZW50UmVvcmdhbml6ZWRKc29uKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgYW1lbmRlbWVudClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBjb21taXRBbmRQdXNoKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgb3B0aW9ucy5jb21taXQsIG9wdGlvbnMucmVtb3RlKVxuICAgICAgKSB7XG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuRG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBjaG9vc2VuRGF0YXNldHMuZG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgIFwiLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX0uZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXRSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGZzLmVuc3VyZURpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpKSB7XG4gICAgICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGZzLnJlbW92ZVN5bmMocGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgZmlsZW5hbWUpKVxuICAgICAgfVxuICAgICAgY29uc3QgZG9jdW1lbnRzRGlyID0gcGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgXCJkb2N1bWVudHNcIilcbiAgICAgIGZzLm1rZGlyU3luYyhkb2N1bWVudHNEaXIpXG4gICAgICBjb25zdCBkb3NzaWVyc0RpciA9IHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIFwiZG9zc2llcnNcIilcbiAgICAgIGZzLm1rZGlyU3luYyhkb3NzaWVyc0RpcilcblxuICAgICAgc3dpdGNoIChkYXRhc2V0LnN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2luZ2xlRmlsZTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRGF0YTogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgID8gRG9zc2llcnNMZWdpc2xhdGlmc1Jhd0NvbnZlcnQudG9Eb3NzaWVyc0xlZ2lzbGF0aWZzKFxuICAgICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgZm9yIChjb25zdCBkb2N1bWVudCBvZiBvcmlnaW5hbERhdGEuZXhwb3J0LnRleHRlc0xlZ2lzbGF0aWZzXG4gICAgICAgICAgICAgIC5kb2N1bWVudCkge1xuICAgICAgICAgICAgICB3cml0ZURvY3VtZW50UmVvcmdhbml6ZWRKc29uKGRvY3VtZW50c0RpciwgZG9jdW1lbnQpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgeyBkb3NzaWVyUGFybGVtZW50YWlyZSB9IG9mIG9yaWdpbmFsRGF0YS5leHBvcnRcbiAgICAgICAgICAgICAgLmRvc3NpZXJzTGVnaXNsYXRpZnMuZG9zc2llcikge1xuICAgICAgICAgICAgICB3cml0ZURvc3NpZXJQYXJsZW1lbnRhaXJlUmVvcmdhbml6ZWRKc29uKFxuICAgICAgICAgICAgICAgIGRvc3NpZXJzRGlyLFxuICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRvY3VtZW50U3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIFtcImRvY3VtZW50XCJdLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudEZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICBkb2N1bWVudFNwbGl0UGF0aFtkb2N1bWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIWRvY3VtZW50RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgZG9jdW1lbnRPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uZG9jdW1lbnRTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwiZG9jdW1lbnRcIiBmaWxlOiAke2RvY3VtZW50T3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudE9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGRvY3VtZW50T3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudE9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IERvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0LnRvRG9jdW1lbnQoZG9jdW1lbnRPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGRvY3VtZW50T3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudCA9IGRvY3VtZW50T3JpZ2luYWwuZG9jdW1lbnRcbiAgICAgICAgICAgICAgd3JpdGVEb2N1bWVudFJlb3JnYW5pemVkSnNvbihkb2N1bWVudHNEaXIsIGRvY3VtZW50KVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIFtcImRvc3NpZXJQYXJsZW1lbnRhaXJlXCJdLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aFtcbiAgICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIGlmICghZG9zc2llclBhcmxlbWVudGFpcmVGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5kb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJkb3NzaWVyUGFybGVtZW50YWlyZVwiIGZpbGU6ICR7ZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gRG9zc2llcnNMZWdpc2xhdGlmc1Jhd0NvbnZlcnQudG9Eb3NzaWVyUGFybGVtZW50YWlyZShcbiAgICAgICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEpzb24sXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZSA9XG4gICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbC5kb3NzaWVyUGFybGVtZW50YWlyZVxuICAgICAgICAgICAgICB3cml0ZURvc3NpZXJQYXJsZW1lbnRhaXJlUmVvcmdhbml6ZWRKc29uKFxuICAgICAgICAgICAgICAgIGRvc3NpZXJzRGlyLFxuICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgY29tbWl0QW5kUHVzaChkYXRhc2V0UmVvcmdhbml6ZWREaXIsIG9wdGlvbnMuY29tbWl0LCBvcHRpb25zLnJlbW90ZSlcbiAgICAgICkge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlNjcnV0aW5zKSB7XG4gICAgZm9yIChsZXQgZGF0YXNldCBvZiBjaG9vc2VuRGF0YXNldHMuc2NydXRpbnMpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZSxcbiAgICAgIClcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFJlb3JnYW5pemluZyAke29yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGh9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKFxuICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICBcIi5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9LmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBmcy5lbnN1cmVEaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcilcbiAgICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKSkge1xuICAgICAgICBpZiAoZmlsZW5hbWVbMF0gPT09IFwiLlwiKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBmcy5yZW1vdmVTeW5jKHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGZpbGVuYW1lKSlcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChkYXRhc2V0LnN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2luZ2xlRmlsZTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRGF0YTogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgID8gU2NydXRpbnNSYXdDb252ZXJ0LnRvU2NydXRpbnMob3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICA6IEpTT04ucGFyc2Uob3JpZ2luYWxKc29uKVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHNjcnV0aW4gb2Ygb3JpZ2luYWxEYXRhLnNjcnV0aW5zLnNjcnV0aW4pIHtcbiAgICAgICAgICAgICAgd3JpdGVTY3J1dGluUmVvcmdhbml6ZWRKc29uKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgc2NydXRpbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc2NydXRpblNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBzY3J1dGluRmlsZW5hbWUgPVxuICAgICAgICAgICAgICAgIHNjcnV0aW5TcGxpdFBhdGhbc2NydXRpblNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIXNjcnV0aW5GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBzY3J1dGluT3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLnNjcnV0aW5TcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwic2NydXRpblwiIGZpbGU6ICR7c2NydXRpbk9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3Qgc2NydXRpbk9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIHNjcnV0aW5PcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IHNjcnV0aW5PcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBTY3J1dGluc1Jhd0NvbnZlcnQudG9TY3J1dGluV3JhcHBlcihzY3J1dGluT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShzY3J1dGluT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBzY3J1dGluID0gc2NydXRpbk9yaWdpbmFsLnNjcnV0aW5cbiAgICAgICAgICAgICAgd3JpdGVTY3J1dGluUmVvcmdhbml6ZWRKc29uKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgc2NydXRpbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBjb21taXRBbmRQdXNoKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgb3B0aW9ucy5jb21taXQsIG9wdGlvbnMucmVtb3RlKVxuICAgICAgKSB7XG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFJlc3RvcmUgc3RhbmRhcmQgY29udmVyc2lvbiBvZiBkYXRlcyB0byBKU09OLlxuICBEYXRlLnByb3RvdHlwZS50b0pTT04gPSBleGlzdGluZ0RhdGVUb0pzb25cblxuICByZXR1cm4gZXJyb3Jcbn1cblxuZnVuY3Rpb24gd3JpdGVBbWVuZGVtZW50UmVvcmdhbml6ZWRKc29uKFxuICBkYXRhc2V0UmVvcmdhbml6ZWREaXI6IHN0cmluZyxcbiAgYW1lbmRlbWVudDoge1xuICAgIHVpZDogc3RyaW5nXG4gICAgdGV4dGVMZWdpc2xhdGlmUmVmOiBzdHJpbmdcbiAgfSxcbik6IHZvaWQge1xuICBjb25zdCB1aWRUZXh0ZUxlZ2lzbGF0aWYgPSBhbWVuZGVtZW50LnRleHRlTGVnaXNsYXRpZlJlZlxuICBhc3NlcnQubm90U3RyaWN0RXF1YWwodWlkVGV4dGVMZWdpc2xhdGlmLCB1bmRlZmluZWQpXG4gIGNvbnN0IHRleHRlTGVnaXNsYXRpZkRpciA9IHBhdGguam9pbihcbiAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgdWlkVGV4dGVMZWdpc2xhdGlmLFxuICApXG4gIGZzLmVuc3VyZURpclN5bmModGV4dGVMZWdpc2xhdGlmRGlyKVxuICBjb25zdCByZW9yZ2FuaXplZEpzb25GaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICB0ZXh0ZUxlZ2lzbGF0aWZEaXIsXG4gICAgYW1lbmRlbWVudC51aWQgKyBcIi5qc29uXCIsXG4gIClcbiAgZnMud3JpdGVGaWxlU3luYyhcbiAgICByZW9yZ2FuaXplZEpzb25GaWxlUGF0aCxcbiAgICBKU09OLnN0cmluZ2lmeShhbWVuZGVtZW50LCBudWxsLCAyKSxcbiAgICB7XG4gICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgfSxcbiAgKVxufVxuXG5mdW5jdGlvbiB3cml0ZURvY3VtZW50UmVvcmdhbml6ZWRKc29uKFxuICBkb2N1bWVudHNEaXI6IHN0cmluZyxcbiAgZG9jdW1lbnQ6IHsgdWlkOiBzdHJpbmcgfSxcbik6IHZvaWQge1xuICBjb25zdCBiYXNlbmFtZSA9IHBhdGhGcm9tRG9jdW1lbnRVaWQoZG9jdW1lbnRzRGlyLCBkb2N1bWVudC51aWQpXG4gIGZzLndyaXRlRmlsZVN5bmMoYCR7YmFzZW5hbWV9Lmpzb25gLCBKU09OLnN0cmluZ2lmeShkb2N1bWVudCwgbnVsbCwgMiksIHtcbiAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHdyaXRlRG9zc2llclBhcmxlbWVudGFpcmVSZW9yZ2FuaXplZEpzb24oXG4gIGRvc3NpZXJzRGlyOiBzdHJpbmcsXG4gIGRvc3NpZXJQYXJsZW1lbnRhaXJlOiB7IHVpZDogc3RyaW5nIH0sXG4pOiB2b2lkIHtcbiAgY29uc3QgYmFzZW5hbWUgPSBwYXRoRnJvbURvc3NpZXJQYXJsZW1lbnRhaXJlVWlkKFxuICAgIGRvc3NpZXJzRGlyLFxuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlLnVpZCxcbiAgKVxuICBmcy53cml0ZUZpbGVTeW5jKFxuICAgIGAke2Jhc2VuYW1lfS5qc29uYCxcbiAgICBKU09OLnN0cmluZ2lmeShkb3NzaWVyUGFybGVtZW50YWlyZSwgbnVsbCwgMiksXG4gICAge1xuICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgIH0sXG4gIClcbn1cblxuZnVuY3Rpb24gd3JpdGVSZXVuaW9uUmVvcmdhbml6ZWRKc29uKFxuICByZXVuaW9uc0Rpcjogc3RyaW5nLFxuICByZXVuaW9uOiB7IHVpZDogc3RyaW5nIH0sXG4pOiB2b2lkIHtcbiAgY29uc3QgYmFzZW5hbWUgPSBwYXRoRnJvbVJldW5pb25VaWQocmV1bmlvbnNEaXIsIHJldW5pb24udWlkKVxuICBmcy53cml0ZUZpbGVTeW5jKGAke2Jhc2VuYW1lfS5qc29uYCwgSlNPTi5zdHJpbmdpZnkocmV1bmlvbiwgbnVsbCwgMiksIHtcbiAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHdyaXRlU2NydXRpblJlb3JnYW5pemVkSnNvbihcbiAgc2NydXRpbnNEaXI6IHN0cmluZyxcbiAgc2NydXRpbjogeyB1aWQ6IHN0cmluZyB9LFxuKTogdm9pZCB7XG4gIGNvbnN0IGJhc2VuYW1lID0gcGF0aEZyb21TY3J1dGluVWlkKHNjcnV0aW5zRGlyLCBzY3J1dGluLnVpZClcbiAgZnMud3JpdGVGaWxlU3luYyhgJHtiYXNlbmFtZX0uanNvbmAsIEpTT04uc3RyaW5naWZ5KHNjcnV0aW4sIG51bGwsIDIpLCB7XG4gICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICB9KVxufVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbmlmIChwcm9jZXNzLmFyZ3ZbMV0uZW5kc1dpdGgoXCJyZW9yZ2FuaXplX2RhdGEudHNcIikpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGNvbW1hbmRMaW5lQXJncyhvcHRpb25zRGVmaW5pdGlvbnMpXG5cbiAgaWYgKHJlb3JnYW5pemVEYXRhKG9wdGlvbnMpKSB7XG4gICAgcHJvY2Vzcy5leGl0KDEpXG4gIH0gZWxzZSB7XG4gICAgcHJvY2Vzcy5leGl0KDApXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBcUU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRXJFLElBQU1BLGtCQUFrQixHQUFHLENBQ3pCO0VBQ0VDLEtBQUssRUFBRSxHQUFHO0VBQ1ZDLElBQUksRUFBRSwrREFBK0Q7RUFDckVDLElBQUksRUFBRSxPQUFPO0VBQ2JDLElBQUksRUFBRUM7QUFDUixDQUFDLEVBQ0Q7RUFDRUosS0FBSyxFQUFFLEdBQUc7RUFD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
|
|
903
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXNzZXJ0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfY2hpbGRfcHJvY2VzcyIsIl9jb21tYW5kTGluZUFyZ3MiLCJfZnNFeHRyYSIsIl9wYXRoIiwiX2RhdGFzZXRzIiwiX2RhdGVzIiwiZ2l0IiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfZmlsZV9zeXN0ZW1zIiwiX2xvYWRlcnMiLCJfYWN0ZXVyc19ldF9vcmdhbmVzIiwiX2FnZW5kYXMiLCJfYW1lbmRlbWVudHMiLCJfZG9zc2llcnNfbGVnaXNsYXRpZnMiLCJfc2NydXRpbnMiLCJfbGVnaXNsYXR1cmVzIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwibm9kZUludGVyb3AiLCJXZWFrTWFwIiwiY2FjaGVCYWJlbEludGVyb3AiLCJjYWNoZU5vZGVJbnRlcm9wIiwib2JqIiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJjYWNoZSIsImhhcyIsImdldCIsIm5ld09iaiIsImhhc1Byb3BlcnR5RGVzY3JpcHRvciIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwia2V5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZGVzYyIsInNldCIsIl90b0NvbnN1bWFibGVBcnJheSIsImFyciIsIl9hcnJheVdpdGhvdXRIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVTcHJlYWQiLCJUeXBlRXJyb3IiLCJpdGVyIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJBcnJheSIsImZyb20iLCJpc0FycmF5IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIm8iLCJhbGxvd0FycmF5TGlrZSIsIml0IiwibGVuZ3RoIiwiaSIsIkYiLCJzIiwibiIsImRvbmUiLCJ2YWx1ZSIsImUiLCJfZTIiLCJmIiwibm9ybWFsQ29tcGxldGlvbiIsImRpZEVyciIsImVyciIsInN0ZXAiLCJuZXh0IiwiX2UzIiwiX3NsaWNlZFRvQXJyYXkiLCJfYXJyYXlXaXRoSG9sZXMiLCJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJfbm9uSXRlcmFibGVSZXN0IiwibWluTGVuIiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsInRlc3QiLCJsZW4iLCJhcnIyIiwiX2kiLCJfcyIsIl9lIiwiX3giLCJfciIsIl9hcnIiLCJfbiIsIl9kIiwicHVzaCIsIm9wdGlvbnNEZWZpbml0aW9ucyIsImFsaWFzIiwiaGVscCIsInR5cGUiLCJTdHJpbmciLCJCb29sZWFuIiwiZGVmYXVsdFZhbHVlIiwibXVsdGlwbGUiLCJOdW1iZXIiLCJkZWZhdWx0T3B0aW9uIiwicmVvcmdhbml6ZURhdGEiLCJvcHRpb25zIiwiX29wdGlvbnMkbGVnaXNsYXR1cmUiLCJkYXRhRGlyIiwiRGF0ZSIsInRvSlNPTiIsInBhdGNoZWREYXRlVG9Kc29uIiwiZXhpdENvZGUiLCJnaXRHcm91cFVybCIsImNsb25lIiwidHJpbSIsInJlcGxhY2UiLCJ1bmRlZmluZWQiLCJ2YWxpZGF0ZVJhd0RhdGEiLCJjYXRlZ29yaWVzIiwibWFwIiwiZGF0YXNldE5hbWUiLCJhc3NlcnQiLCJub3RTdHJpY3RFcXVhbCIsIkVuYWJsZWREYXRhc2V0cyIsImNvbmNhdCIsImVuYWJsZWREYXRhc2V0cyIsInJlZHVjZSIsIk5vbmUiLCJjaG9vc2VuRGF0YXNldHMiLCJkYXRhc2V0cyIsImxlZ2lzbGF0dXJlcyIsImxlZ2lzbGF0dXJlIiwic29tZSIsImVuYWJsZWRMZWdpc2xhdHVyZXMiLCJfT2JqZWN0JGVudHJpZXMiLCJlbnRyaWVzIiwiX09iamVjdCRlbnRyaWVzJF9pIiwiZmlsdGVyIiwiZGF0YXNldCIsIkxlZ2lzbGF0dXJlIiwiQWxsIiwiaW5jbHVkZXMiLCJBY3RldXJzRXRPcmdhbmVzIiwiX2l0ZXJhdG9yIiwiYWN0ZXVyc0V0T3JnYW5lcyIsIl9zdGVwIiwib3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCIsInBhdGgiLCJqb2luIiwiZmlsZW5hbWUiLCJzaWxlbnQiLCJjb25zb2xlIiwibG9nIiwiYmFzZW5hbWUiLCJleGVjU3luYyIsImN3ZCIsImVudiIsInByb2Nlc3MiLCJlbmNvZGluZyIsInN0ZGlvIiwiZGF0YXNldFJlb3JnYW5pemVkRGlyIiwicHVsbCIsImZzIiwiZW5zdXJlRGlyU3luYyIsIl9pdGVyYXRvcjIiLCJyZWFkZGlyU3luYyIsIl9zdGVwMiIsInJlbW92ZVN5bmMiLCJhY3RldXJzUmVvcmdhbml6ZWREaXIiLCJta2RpclN5bmMiLCJvcmdhbmVzUmVvcmdhbml6ZWREaXIiLCJzdHJ1Y3R1cmUiLCJEYXRhc2V0U3RydWN0dXJlIiwiU2luZ2xlRmlsZSIsIm9yaWdpbmFsSnNvbiIsInJlYWRGaWxlU3luYyIsIm9yaWdpbmFsRGF0YSIsIkFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0IiwidG9BY3RldXJzRXRPcmdhbmVzIiwiSlNPTiIsInBhcnNlIiwiX2l0ZXJhdG9yMyIsImFjdGV1cnMiLCJhY3RldXIiLCJfc3RlcDMiLCJyZW9yZ2FuaXplZEpzb25GaWxlUGF0aCIsInVpZCIsIndyaXRlRmlsZVN5bmMiLCJzdHJpbmdpZnkiLCJfaXRlcmF0b3I0Iiwib3JnYW5lcyIsIm9yZ2FuZSIsIl9zdGVwNCIsIlNlZ21lbnRlZEZpbGVzIiwiZGVwb3J0c0J5QWN0ZXVyVWlkIiwiZXhpc3RzU3luYyIsIl9pdGVyYXRvcjUiLCJ3YWxrRGlyIiwiX3N0ZXA1IiwiZGVwb3J0U3BsaXRQYXRoIiwiZGVwb3J0RmlsZW5hbWUiLCJlbmRzV2l0aCIsImRlcG9ydE9yaWdpbmFsRmlsZVBhdGgiLCJhcHBseSIsInZlcmJvc2UiLCJkZXBvcnRPcmlnaW5hbEpzb24iLCJkZXBvcnRPcmlnaW5hbCIsInRvRGVwb3J0IiwiZGVwb3J0IiwiZGVwb3J0cyIsImFjdGV1clJlZiIsIl9pMiIsIl9PYmplY3QkdmFsdWVzIiwidmFsdWVzIiwic29ydCIsImEiLCJiIiwibG9jYWxlQ29tcGFyZSIsIm1hbmRhdHNCeUFjdGV1clVpZCIsIl9pdGVyYXRvcjYiLCJfc3RlcDYiLCJtYW5kYXRTcGxpdFBhdGgiLCJtYW5kYXRGaWxlbmFtZSIsIm1hbmRhdE9yaWdpbmFsRmlsZVBhdGgiLCJtYW5kYXRPcmlnaW5hbEpzb24iLCJtYW5kYXRPcmlnaW5hbCIsInRvTWFuZGF0V3JhcHBlciIsIm1hbmRhdCIsIm1hbmRhdHMiLCJfaTMiLCJfT2JqZWN0JHZhbHVlczIiLCJfaXRlcmF0b3I3IiwiX3N0ZXA3IiwiYWN0ZXVyU3BsaXRQYXRoIiwiYWN0ZXVyRmlsZW5hbWUiLCJhY3RldXJPcmlnaW5hbEZpbGVQYXRoIiwiYWN0ZXVyT3JpZ2luYWxKc29uIiwiYWN0ZXVyT3JpZ2luYWwiLCJ0b0FjdGV1ciIsImFjdGV1clVpZCIsInN0cmljdEVxdWFsIiwiYWN0ZXVyUmVvcmdhbml6ZWRKc29uRmlsZVBhdGgiLCJfaXRlcmF0b3I4IiwiX3N0ZXA4Iiwib3JnYW5lU3BsaXRQYXRoIiwib3JnYW5lRmlsZW5hbWUiLCJvcmdhbmVPcmlnaW5hbEZpbGVQYXRoIiwib3JnYW5lT3JpZ2luYWxKc29uIiwib3JnYW5lT3JpZ2luYWwiLCJ0b09yZ2FuZSIsIm9yZ2FuZVJlb3JnYW5pemVkSnNvbkZpbGVQYXRoIiwiY29tbWl0IiwiZXJyb3JDb2RlIiwiY29tbWl0QW5kUHVzaCIsInJlbW90ZSIsIkFnZW5kYXMiLCJfaXRlcmF0b3I5IiwiYWdlbmRhcyIsIl9zdGVwOSIsIl9pdGVyYXRvcjEwIiwiX3N0ZXAxMCIsIkFnZW5kYXNSYXdDb252ZXJ0IiwidG9BZ2VuZGFzIiwiX2l0ZXJhdG9yMTEiLCJyZXVuaW9ucyIsInJldW5pb24iLCJfc3RlcDExIiwid3JpdGVSZXVuaW9uUmVvcmdhbml6ZWRKc29uIiwiX2l0ZXJhdG9yMTIiLCJfc3RlcDEyIiwicmV1bmlvblNwbGl0UGF0aCIsInJldW5pb25GaWxlbmFtZSIsInJldW5pb25PcmlnaW5hbEZpbGVQYXRoIiwicmV1bmlvbk9yaWdpbmFsSnNvbiIsInJldW5pb25PcmlnaW5hbCIsInRvUmV1bmlvbiIsIkFtZW5kZW1lbnRzIiwiX2l0ZXJhdG9yMTMiLCJhbWVuZGVtZW50cyIsIl9zdGVwMTMiLCJfaXRlcmF0b3IxNCIsIl9zdGVwMTQiLCJBbWVuZGVtZW50c1Jhd0NvbnZlcnQiLCJ0b0FtZW5kZW1lbnRzIiwiX2l0ZXJhdG9yMTUiLCJ0ZXh0ZXNFdEFtZW5kZW1lbnRzIiwidGV4dGVsZWciLCJfc3RlcDE1IiwidGV4dGVMZWdpc2xhdGlmIiwiX2l0ZXJhdG9yMTYiLCJfc3RlcDE2IiwiYW1lbmRlbWVudCIsIndyaXRlQW1lbmRlbWVudFJlb3JnYW5pemVkSnNvbiIsIl9pdGVyYXRvcjE3IiwiX3N0ZXAxNyIsImFtZW5kZW1lbnRTcGxpdFBhdGgiLCJhbWVuZGVtZW50RmlsZW5hbWUiLCJhbWVuZGVtZW50T3JpZ2luYWxGaWxlUGF0aCIsImFtZW5kZW1lbnRPcmlnaW5hbEpzb24iLCJhbWVuZGVtZW50T3JpZ2luYWwiLCJ0b0FtZW5kZW1lbnRXcmFwcGVyIiwiRG9zc2llcnNMZWdpc2xhdGlmcyIsIl9pdGVyYXRvcjE4IiwiZG9zc2llcnNMZWdpc2xhdGlmcyIsIl9zdGVwMTgiLCJfaXRlcmF0b3IxOSIsIl9zdGVwMTkiLCJkb2N1bWVudHNEaXIiLCJkb3NzaWVyc0RpciIsIkRvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0IiwidG9Eb3NzaWVyc0xlZ2lzbGF0aWZzIiwiX2l0ZXJhdG9yMjAiLCJ0ZXh0ZXNMZWdpc2xhdGlmcyIsImRvY3VtZW50IiwiX3N0ZXAyMCIsIndyaXRlRG9jdW1lbnRSZW9yZ2FuaXplZEpzb24iLCJfaXRlcmF0b3IyMSIsImRvc3NpZXIiLCJfc3RlcDIxIiwiZG9zc2llclBhcmxlbWVudGFpcmUiLCJ3cml0ZURvc3NpZXJQYXJsZW1lbnRhaXJlUmVvcmdhbml6ZWRKc29uIiwiX2l0ZXJhdG9yMjIiLCJfc3RlcDIyIiwiZG9jdW1lbnRTcGxpdFBhdGgiLCJkb2N1bWVudEZpbGVuYW1lIiwiZG9jdW1lbnRPcmlnaW5hbEZpbGVQYXRoIiwiZG9jdW1lbnRPcmlnaW5hbEpzb24iLCJkb2N1bWVudE9yaWdpbmFsIiwidG9Eb2N1bWVudCIsIl9pdGVyYXRvcjIzIiwiX3N0ZXAyMyIsImRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoIiwiZG9zc2llclBhcmxlbWVudGFpcmVGaWxlbmFtZSIsImRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxGaWxlUGF0aCIsImRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxKc29uIiwiZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbCIsInRvRG9zc2llclBhcmxlbWVudGFpcmUiLCJTY3J1dGlucyIsIl9pdGVyYXRvcjI0Iiwic2NydXRpbnMiLCJfc3RlcDI0IiwiX2l0ZXJhdG9yMjUiLCJfc3RlcDI1IiwiU2NydXRpbnNSYXdDb252ZXJ0IiwidG9TY3J1dGlucyIsIl9pdGVyYXRvcjI2Iiwic2NydXRpbiIsIl9zdGVwMjYiLCJ3cml0ZVNjcnV0aW5SZW9yZ2FuaXplZEpzb24iLCJfaXRlcmF0b3IyNyIsIl9zdGVwMjciLCJzY3J1dGluU3BsaXRQYXRoIiwic2NydXRpbkZpbGVuYW1lIiwic2NydXRpbk9yaWdpbmFsRmlsZVBhdGgiLCJzY3J1dGluT3JpZ2luYWxKc29uIiwic2NydXRpbk9yaWdpbmFsIiwidG9TY3J1dGluV3JhcHBlciIsImV4aXN0aW5nRGF0ZVRvSnNvbiIsInVpZFRleHRlTGVnaXNsYXRpZiIsInRleHRlTGVnaXNsYXRpZlJlZiIsInRleHRlTGVnaXNsYXRpZkRpciIsInBhdGhGcm9tRG9jdW1lbnRVaWQiLCJwYXRoRnJvbURvc3NpZXJQYXJsZW1lbnRhaXJlVWlkIiwicmV1bmlvbnNEaXIiLCJwYXRoRnJvbVJldW5pb25VaWQiLCJzY3J1dGluc0RpciIsInBhdGhGcm9tU2NydXRpblVpZCIsImFyZ3YiLCJjb21tYW5kTGluZUFyZ3MiLCJleGl0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmlwdHMvcmVvcmdhbml6ZV9kYXRhLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiXG5pbXBvcnQgeyBleGVjU3luYyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCJcbmltcG9ydCBjb21tYW5kTGluZUFyZ3MgZnJvbSBcImNvbW1hbmQtbGluZS1hcmdzXCJcbmltcG9ydCBmcyBmcm9tIFwiZnMtZXh0cmFcIlxuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIlxuXG5pbXBvcnQgeyBkYXRhc2V0cywgRGF0YXNldFN0cnVjdHVyZSwgRW5hYmxlZERhdGFzZXRzIH0gZnJvbSBcIi4uL2RhdGFzZXRzXCJcbmltcG9ydCB7IGV4aXN0aW5nRGF0ZVRvSnNvbiwgcGF0Y2hlZERhdGVUb0pzb24gfSBmcm9tIFwiLi4vZGF0ZXNcIlxuaW1wb3J0ICogYXMgZ2l0IGZyb20gXCIuLi9naXRcIlxuaW1wb3J0IHsgd2Fsa0RpciB9IGZyb20gXCIuLi9maWxlX3N5c3RlbXNcIlxuaW1wb3J0IHtcbiAgcGF0aEZyb21Eb2N1bWVudFVpZCxcbiAgcGF0aEZyb21Eb3NzaWVyUGFybGVtZW50YWlyZVVpZCxcbiAgcGF0aEZyb21SZXVuaW9uVWlkLFxuICBwYXRoRnJvbVNjcnV0aW5VaWQsXG59IGZyb20gXCIuLi9sb2FkZXJzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2FjdGV1cnNfZXRfb3JnYW5lc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIEFnZW5kYXNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9hZ2VuZGFzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQW1lbmRlbWVudHNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9hbWVuZGVtZW50c1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIERvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9kb3NzaWVyc19sZWdpc2xhdGlmc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIFNjcnV0aW5zUmF3Q29udmVydCB9IGZyb20gXCIuLi9yYXdfdHlwZXMvc2NydXRpbnNcIlxuaW1wb3J0IHsgTGVnaXNsYXR1cmUgfSBmcm9tIFwiLi4vdHlwZXMvbGVnaXNsYXR1cmVzXCJcblxuY29uc3Qgb3B0aW9uc0RlZmluaXRpb25zID0gW1xuICB7XG4gICAgYWxpYXM6IFwiQ1wiLFxuICAgIGhlbHA6IFwiY2xvbmUgcmVwb3NpdG9yaWVzIGZyb20gZ2l2ZW4gZ3JvdXAgKG9yIG9yZ2FuaXphdGlvbikgZ2l0IFVSTFwiLFxuICAgIG5hbWU6IFwiY2xvbmVcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJjXCIsXG4gICAgaGVscDogXCJjb21taXQgc3BsaXQgZmlsZXNcIixcbiAgICBuYW1lOiBcImNvbW1pdFwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJrXCIsXG4gICAgZGVmYXVsdFZhbHVlOiBbXCJBbGxcIl0sXG4gICAgaGVscDogXCJjYXRlZ29yaWVzIG9mIGRhdGFzZXRzIHRvIHJlb3JnYW5pemVcIixcbiAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICBuYW1lOiBcImNhdGVnb3JpZXNcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJsXCIsXG4gICAgaGVscDogXCJsZWdpc2xhdHVyZXMgb2YgY2F0ZWdvcmllcyBvZiBkYXRhc2V0cyB0byByZXRyaWV2ZVwiLFxuICAgIG11bHRpcGxlOiB0cnVlLFxuICAgIG5hbWU6IFwibGVnaXNsYXR1cmVcIixcbiAgICB0eXBlOiBOdW1iZXIsXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJwXCIsXG4gICAgaGVscDogXCJwdWxsIHJlcG9zaXRvcmllcyBiZWZvcmUgcHJvY2VlZGluZ1wiLFxuICAgIG5hbWU6IFwicHVsbFwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJyXCIsXG4gICAgaGVscDogXCJwdXNoIGNvbW1pdCB0byBnaXZlbiByZW1vdGVcIixcbiAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICBuYW1lOiBcInJlbW90ZVwiLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcInNcIixcbiAgICBoZWxwOiBcImRvbid0IGxvZyBhbnl0aGluZ1wiLFxuICAgIG5hbWU6IFwic2lsZW50XCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcIlZcIixcbiAgICBoZWxwOiBcImRvbid0IHZhbGlkYXRlIHJhdyBkYXRhXCIsXG4gICAgbmFtZTogXCJuby12YWxpZGF0ZS1yYXdcIixcbiAgICB0eXBlOiBCb29sZWFuLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwidlwiLFxuICAgIGhlbHA6IFwidmVyYm9zZSBsb2dzXCIsXG4gICAgbmFtZTogXCJ2ZXJib3NlXCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGRlZmF1bHRPcHRpb246IHRydWUsXG4gICAgaGVscDogXCJkaXJlY3RvcnkgY29udGFpbmluZyBBc3NlbWJsw6llIG9wZW4gZGF0YSBmaWxlc1wiLFxuICAgIG5hbWU6IFwiZGF0YURpclwiLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgfSxcbl1cblxuZnVuY3Rpb24gcmVvcmdhbml6ZURhdGEob3B0aW9uczogYW55KTogbnVtYmVyIHtcbiAgY29uc3QgZGF0YURpciA9IG9wdGlvbnMuZGF0YURpclxuICBEYXRlLnByb3RvdHlwZS50b0pTT04gPSBwYXRjaGVkRGF0ZVRvSnNvblxuXG4gIGxldCBleGl0Q29kZSA9IDBcbiAgY29uc3QgZ2l0R3JvdXBVcmwgPSBvcHRpb25zLmNsb25lXG4gICAgPyBvcHRpb25zLmNsb25lLnRyaW0oKS5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpXG4gICAgOiB1bmRlZmluZWRcbiAgY29uc3QgdmFsaWRhdGVSYXdEYXRhID0gIW9wdGlvbnNbXCJuby12YWxpZGF0ZS1yYXdcIl1cblxuICBvcHRpb25zLmNhdGVnb3JpZXMubWFwKChkYXRhc2V0TmFtZTogc3RyaW5nKSA9PlxuICAgIGFzc2VydC5ub3RTdHJpY3RFcXVhbChcbiAgICAgIChFbmFibGVkRGF0YXNldHMgYXMgYW55IGFzIHsgW25hbWU6IHN0cmluZ106IEVuYWJsZWREYXRhc2V0cyB9KVtcbiAgICAgICAgZGF0YXNldE5hbWVcbiAgICAgIF0sXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBgVW5rbm93biBuYW1lIG9mIGRhdGFzZXQ6ICR7ZGF0YXNldE5hbWV9YCxcbiAgICApLFxuICApXG4gIGNvbnN0IGVuYWJsZWREYXRhc2V0cyA9IG9wdGlvbnMuY2F0ZWdvcmllcy5yZWR1Y2UoXG4gICAgKGVuYWJsZWREYXRhc2V0czogRW5hYmxlZERhdGFzZXRzLCBkYXRhc2V0TmFtZTogc3RyaW5nKTogRW5hYmxlZERhdGFzZXRzID0+XG4gICAgICBlbmFibGVkRGF0YXNldHMgfFxuICAgICAgKEVuYWJsZWREYXRhc2V0cyBhcyBhbnkgYXMgeyBbbmFtZTogc3RyaW5nXTogRW5hYmxlZERhdGFzZXRzIH0pW1xuICAgICAgICBkYXRhc2V0TmFtZVxuICAgICAgXSxcbiAgICBFbmFibGVkRGF0YXNldHMuTm9uZSxcbiAgKVxuXG4gIGxldCBjaG9vc2VuRGF0YXNldHMgPSBkYXRhc2V0c1xuICAvLyBXaGVuIGEgZ2l2ZW4gbGVnaXNsYXR1cmUgaXMgMCwgaXQgaXMgdGhlIHNhbWUgYXMgZ2l2aW5nIG5vIGxlZ2lzbGF0dXJlOlxuICAvLyBJdCBtZWFucyBcImV2ZXJ5IGxlZ2lzbGF0dXJlc1wiLlxuICBjb25zdCBsZWdpc2xhdHVyZXMgPSBvcHRpb25zLmxlZ2lzbGF0dXJlPy5zb21lKFxuICAgIChsZWdpc2xhdHVyZTogbnVtYmVyKSA9PiBsZWdpc2xhdHVyZSA9PT0gMCxcbiAgKVxuICAgID8gdW5kZWZpbmVkXG4gICAgOiBvcHRpb25zLmxlZ2lzbGF0dXJlXG4gIGlmIChsZWdpc2xhdHVyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IGVuYWJsZWRMZWdpc2xhdHVyZXMgPSBsZWdpc2xhdHVyZXMubWFwKChsZWdpc2xhdHVyZTogbnVtYmVyKSA9PlxuICAgICAgbGVnaXNsYXR1cmUudG9TdHJpbmcoKSxcbiAgICApXG4gICAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGNob29zZW5EYXRhc2V0cykpIHtcbiAgICAgIGNob29zZW5EYXRhc2V0c1trZXkgYXMga2V5b2YgdHlwZW9mIGNob29zZW5EYXRhc2V0c10gPSB2YWx1ZS5maWx0ZXIoXG4gICAgICAgIChkYXRhc2V0OiB7IGxlZ2lzbGF0dXJlOiBhbnkgfSkgPT5cbiAgICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlID09PSBMZWdpc2xhdHVyZS5BbGwgfHxcbiAgICAgICAgICBlbmFibGVkTGVnaXNsYXR1cmVzLmluY2x1ZGVzKGRhdGFzZXQubGVnaXNsYXR1cmUpLFxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQWN0ZXVyc0V0T3JnYW5lcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBjaG9vc2VuRGF0YXNldHMuYWN0ZXVyc0V0T3JnYW5lcykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgIFwiLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX0uZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBpZiAob3B0aW9ucy5wdWxsKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgcHVsbCAtLXJlYmFzZWAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGZzLmVuc3VyZURpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpKSB7XG4gICAgICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGZzLnJlbW92ZVN5bmMocGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgZmlsZW5hbWUpKVxuICAgICAgfVxuICAgICAgY29uc3QgYWN0ZXVyc1Jlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgXCJhY3RldXJzXCIpXG4gICAgICBmcy5ta2RpclN5bmMoYWN0ZXVyc1Jlb3JnYW5pemVkRGlyKVxuICAgICAgY29uc3Qgb3JnYW5lc1Jlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgXCJvcmdhbmVzXCIpXG4gICAgICBmcy5ta2RpclN5bmMob3JnYW5lc1Jlb3JnYW5pemVkRGlyKVxuXG4gICAgICBzd2l0Y2ggKGRhdGFzZXQuc3RydWN0dXJlKSB7XG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TaW5nbGVGaWxlOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxEYXRhOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgPyBBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydC50b0FjdGV1cnNFdE9yZ2FuZXMob3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICA6IEpTT04ucGFyc2Uob3JpZ2luYWxKc29uKVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGFjdGV1ciBvZiBvcmlnaW5hbERhdGEuZXhwb3J0LmFjdGV1cnMuYWN0ZXVyKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlb3JnYW5pemVkSnNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgYWN0ZXVyc1Jlb3JnYW5pemVkRGlyLFxuICAgICAgICAgICAgICAgIGFjdGV1ci51aWRbXCIjdGV4dFwiXSArIFwiLmpzb25cIixcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIHJlb3JnYW5pemVkSnNvbkZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGFjdGV1ciwgbnVsbCwgMiksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBvcmdhbmUgb2Ygb3JpZ2luYWxEYXRhLmV4cG9ydC5vcmdhbmVzLm9yZ2FuZSkge1xuICAgICAgICAgICAgICBjb25zdCByZW9yZ2FuaXplZEpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yZ2FuZXNSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICAgICAgICBvcmdhbmUudWlkICsgXCIuanNvblwiLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgcmVvcmdhbml6ZWRKc29uRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkob3JnYW5lLCBudWxsLCAyKSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXM6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3QgZGVwb3J0c0J5QWN0ZXVyVWlkOiB7XG4gICAgICAgICAgICAgIFthY3RldXJVaWQ6IHN0cmluZ106IHsgdWlkOiBzdHJpbmcgfVtdXG4gICAgICAgICAgICB9ID0ge31cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZnMuZXhpc3RzU3luYyhcbiAgICAgICAgICAgICAgICBwYXRoLmpvaW4ob3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCwgXCJkZXBvcnRcIiksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGRlcG9ydFNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgW1wiZGVwb3J0XCJdLFxuICAgICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVwb3J0RmlsZW5hbWUgPVxuICAgICAgICAgICAgICAgICAgZGVwb3J0U3BsaXRQYXRoW2RlcG9ydFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICAgIGlmICghZGVwb3J0RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZGVwb3J0T3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgICAuLi5kZXBvcnRTcGxpdFBhdGgsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgICBgICBMb2FkaW5nIFwiZGVwb3J0XCIgZmlsZTogJHtkZXBvcnRPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGRlcG9ydE9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgICAgZGVwb3J0T3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgY29uc3QgZGVwb3J0T3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgICAgPyBBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydC50b0RlcG9ydChkZXBvcnRPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UoZGVwb3J0T3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgIGNvbnN0IGRlcG9ydCA9IGRlcG9ydE9yaWdpbmFsLmRlcG9ydFxuICAgICAgICAgICAgICAgIGxldCBkZXBvcnRzID0gZGVwb3J0c0J5QWN0ZXVyVWlkW2RlcG9ydC5hY3RldXJSZWZdXG4gICAgICAgICAgICAgICAgaWYgKGRlcG9ydHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgZGVwb3J0cyA9IGRlcG9ydHNCeUFjdGV1clVpZFtkZXBvcnQuYWN0ZXVyUmVmXSA9IFtdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlcG9ydHMucHVzaChkZXBvcnQpXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGRlcG9ydHMgb2YgT2JqZWN0LnZhbHVlcyhkZXBvcnRzQnlBY3RldXJVaWQpKSB7XG4gICAgICAgICAgICAgICAgZGVwb3J0cy5zb3J0KChhLCBiKSA9PlxuICAgICAgICAgICAgICAgICAgYS51aWQubGVuZ3RoID09PSBiLnVpZC5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgPyBhLnVpZC5sb2NhbGVDb21wYXJlKGIudWlkKVxuICAgICAgICAgICAgICAgICAgICA6IGEudWlkLmxlbmd0aCAtIGIudWlkLmxlbmd0aCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbWFuZGF0c0J5QWN0ZXVyVWlkOiB7XG4gICAgICAgICAgICAgIFthY3RldXJVaWQ6IHN0cmluZ106IHsgdWlkOiBzdHJpbmcgfVtdXG4gICAgICAgICAgICB9ID0ge31cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZnMuZXhpc3RzU3luYyhcbiAgICAgICAgICAgICAgICBwYXRoLmpvaW4ob3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCwgXCJtYW5kYXRcIiksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IG1hbmRhdFNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgW1wibWFuZGF0XCJdLFxuICAgICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWFuZGF0RmlsZW5hbWUgPVxuICAgICAgICAgICAgICAgICAgbWFuZGF0U3BsaXRQYXRoW21hbmRhdFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICAgIGlmICghbWFuZGF0RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgbWFuZGF0T3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgICAuLi5tYW5kYXRTcGxpdFBhdGgsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgICBgICBMb2FkaW5nIFwibWFuZGF0XCIgZmlsZTogJHttYW5kYXRPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmRhdE9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgICAgbWFuZGF0T3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgY29uc3QgbWFuZGF0T3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgICAgPyBBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydC50b01hbmRhdFdyYXBwZXIoXG4gICAgICAgICAgICAgICAgICAgICAgbWFuZGF0T3JpZ2luYWxKc29uLFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UobWFuZGF0T3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmRhdCA9IG1hbmRhdE9yaWdpbmFsLm1hbmRhdFxuICAgICAgICAgICAgICAgIGxldCBtYW5kYXRzID0gbWFuZGF0c0J5QWN0ZXVyVWlkW21hbmRhdC5hY3RldXJSZWZdXG4gICAgICAgICAgICAgICAgaWYgKG1hbmRhdHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgbWFuZGF0cyA9IG1hbmRhdHNCeUFjdGV1clVpZFttYW5kYXQuYWN0ZXVyUmVmXSA9IFtdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG1hbmRhdHMucHVzaChtYW5kYXQpXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBmb3IgKGNvbnN0IG1hbmRhdHMgb2YgT2JqZWN0LnZhbHVlcyhtYW5kYXRzQnlBY3RldXJVaWQpKSB7XG4gICAgICAgICAgICAgICAgbWFuZGF0cy5zb3J0KChhLCBiKSA9PlxuICAgICAgICAgICAgICAgICAgYS51aWQubGVuZ3RoID09PSBiLnVpZC5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgPyBhLnVpZC5sb2NhbGVDb21wYXJlKGIudWlkKVxuICAgICAgICAgICAgICAgICAgICA6IGEudWlkLmxlbmd0aCAtIGIudWlkLmxlbmd0aCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBhY3RldXJTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgW1wiYWN0ZXVyXCJdLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBhY3RldXJGaWxlbmFtZSA9IGFjdGV1clNwbGl0UGF0aFthY3RldXJTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFhY3RldXJGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBhY3RldXJPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uYWN0ZXVyU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcImFjdGV1clwiIGZpbGU6ICR7YWN0ZXVyT3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBhY3RldXJPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBhY3RldXJPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1ck9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IEFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0LnRvQWN0ZXVyKGFjdGV1ck9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UoYWN0ZXVyT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBhY3RldXIgPSBhY3RldXJPcmlnaW5hbC5hY3RldXJcbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyVWlkID0gYWN0ZXVyLnVpZFtcIiN0ZXh0XCJdXG4gICAgICAgICAgICAgIGNvbnN0IGRlcG9ydHMgPSBkZXBvcnRzQnlBY3RldXJVaWRbYWN0ZXVyVWlkXVxuICAgICAgICAgICAgICBpZiAoZGVwb3J0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFjdGV1ci5kZXBvcnRzLCB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgYWN0ZXVyLmRlcG9ydHMgPSB7IGRlcG9ydDogZGVwb3J0cyB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgbWFuZGF0cyA9IG1hbmRhdHNCeUFjdGV1clVpZFthY3RldXJVaWRdXG4gICAgICAgICAgICAgIGlmIChtYW5kYXRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYWN0ZXVyLm1hbmRhdHMsIHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBhY3RldXIubWFuZGF0cyA9IHsgbWFuZGF0OiBtYW5kYXRzIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBhY3RldXJSZW9yZ2FuaXplZEpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIGFjdGV1cnNSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICAgICAgICBhY3RldXJVaWQgKyBcIi5qc29uXCIsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBhY3RldXJSZW9yZ2FuaXplZEpzb25GaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShhY3RldXIsIG51bGwsIDIpLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3Qgb3JnYW5lU3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIFtcIm9yZ2FuZVwiXSxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3Qgb3JnYW5lRmlsZW5hbWUgPSBvcmdhbmVTcGxpdFBhdGhbb3JnYW5lU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgIGlmICghb3JnYW5lRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3Qgb3JnYW5lT3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLm9yZ2FuZVNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJvcmdhbmVcIiBmaWxlOiAke29yZ2FuZU9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3Qgb3JnYW5lT3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgb3JnYW5lT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBvcmdhbmVPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydC50b09yZ2FuZShvcmdhbmVPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yZ2FuZU9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3Qgb3JnYW5lID0gb3JnYW5lT3JpZ2luYWwub3JnYW5lXG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZVJlb3JnYW5pemVkSnNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JnYW5lc1Jlb3JnYW5pemVkRGlyLFxuICAgICAgICAgICAgICAgIG9yZ2FuZS51aWQgKyBcIi5qc29uXCIsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBvcmdhbmVSZW9yZ2FuaXplZEpzb25GaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShvcmdhbmUsIG51bGwsIDIpLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmNvbW1pdCkge1xuICAgICAgICBjb25zdCBlcnJvckNvZGUgPSBnaXQuY29tbWl0QW5kUHVzaChcbiAgICAgICAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgXCJOb3V2ZWxsZSBtb2lzc29uXCIsXG4gICAgICAgICAgb3B0aW9ucy5yZW1vdGUsXG4gICAgICAgIClcbiAgICAgICAgaWYgKGVycm9yQ29kZSAhPT0gMCAmJiBleGl0Q29kZSA9PT0gMCkge1xuICAgICAgICAgIGV4aXRDb2RlID0gZXJyb3JDb2RlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFnZW5kYXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgY2hvb3NlbkRhdGFzZXRzLmFnZW5kYXMpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZSxcbiAgICAgIClcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFJlb3JnYW5pemluZyAke29yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGh9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKFxuICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICBcIi5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9LmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBmcy5lbnN1cmVEaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcilcbiAgICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKSkge1xuICAgICAgICBpZiAoZmlsZW5hbWVbMF0gPT09IFwiLlwiKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBmcy5yZW1vdmVTeW5jKHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGZpbGVuYW1lKSlcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChkYXRhc2V0LnN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2luZ2xlRmlsZTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRGF0YTogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgID8gQWdlbmRhc1Jhd0NvbnZlcnQudG9BZ2VuZGFzKG9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgZm9yIChjb25zdCByZXVuaW9uIG9mIG9yaWdpbmFsRGF0YS5yZXVuaW9ucy5yZXVuaW9uKSB7XG4gICAgICAgICAgICAgIHdyaXRlUmV1bmlvblJlb3JnYW5pemVkSnNvbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIHJldW5pb24pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJldW5pb25TcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgW1wicmV1bmlvblwiXSxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmV1bmlvbkZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICByZXVuaW9uU3BsaXRQYXRoW3JldW5pb25TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFyZXVuaW9uRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgcmV1bmlvbk9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5yZXVuaW9uU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcInJldW5pb25cIiBmaWxlOiAke3JldW5pb25PcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHJldW5pb25PcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICByZXVuaW9uT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCByZXVuaW9uT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gQWdlbmRhc1Jhd0NvbnZlcnQudG9SZXVuaW9uKHJldW5pb25PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKHJldW5pb25PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IHJldW5pb24gPSByZXVuaW9uT3JpZ2luYWwucmV1bmlvblxuICAgICAgICAgICAgICB3cml0ZVJldW5pb25SZW9yZ2FuaXplZEpzb24oZGF0YXNldFJlb3JnYW5pemVkRGlyLCByZXVuaW9uKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb21taXQpIHtcbiAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gZ2l0LmNvbW1pdEFuZFB1c2goXG4gICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgIFwiTm91dmVsbGUgbW9pc3NvblwiLFxuICAgICAgICAgIG9wdGlvbnMucmVtb3RlLFxuICAgICAgICApXG4gICAgICAgIGlmIChlcnJvckNvZGUgIT09IDAgJiYgZXhpdENvZGUgPT09IDApIHtcbiAgICAgICAgICBleGl0Q29kZSA9IGVycm9yQ29kZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BbWVuZGVtZW50cykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBjaG9vc2VuRGF0YXNldHMuYW1lbmRlbWVudHMpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZSxcbiAgICAgIClcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFJlb3JnYW5pemluZyAke29yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGh9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKFxuICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICBcIi5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9LmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBmcy5lbnN1cmVEaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcilcbiAgICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKSkge1xuICAgICAgICBpZiAoZmlsZW5hbWVbMF0gPT09IFwiLlwiKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBmcy5yZW1vdmVTeW5jKHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGZpbGVuYW1lKSlcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChkYXRhc2V0LnN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2luZ2xlRmlsZTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRGF0YTogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgID8gQW1lbmRlbWVudHNSYXdDb252ZXJ0LnRvQW1lbmRlbWVudHMob3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICA6IEpTT04ucGFyc2Uob3JpZ2luYWxKc29uKVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHRleHRlTGVnaXNsYXRpZiBvZiBvcmlnaW5hbERhdGEudGV4dGVzRXRBbWVuZGVtZW50c1xuICAgICAgICAgICAgICAudGV4dGVsZWcpIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBhbWVuZGVtZW50IG9mIHRleHRlTGVnaXNsYXRpZi5hbWVuZGVtZW50cykge1xuICAgICAgICAgICAgICAgIHdyaXRlQW1lbmRlbWVudFJlb3JnYW5pemVkSnNvbihcbiAgICAgICAgICAgICAgICAgIGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICAgICAgICAgIGFtZW5kZW1lbnQsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGFtZW5kZW1lbnRTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgYW1lbmRlbWVudEZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICBhbWVuZGVtZW50U3BsaXRQYXRoW2FtZW5kZW1lbnRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFhbWVuZGVtZW50RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYW1lbmRlbWVudE9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5hbWVuZGVtZW50U3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcImFtZW5kZW1lbnRcIiBmaWxlOiAke2FtZW5kZW1lbnRPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGFtZW5kZW1lbnRPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBhbWVuZGVtZW50T3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBhbWVuZGVtZW50T3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gQW1lbmRlbWVudHNSYXdDb252ZXJ0LnRvQW1lbmRlbWVudFdyYXBwZXIoXG4gICAgICAgICAgICAgICAgICAgIGFtZW5kZW1lbnRPcmlnaW5hbEpzb24sXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGFtZW5kZW1lbnRPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IGFtZW5kZW1lbnQgPSBhbWVuZGVtZW50T3JpZ2luYWwuYW1lbmRlbWVudFxuICAgICAgICAgICAgICB3cml0ZUFtZW5kZW1lbnRSZW9yZ2FuaXplZEpzb24oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBhbWVuZGVtZW50KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb21taXQpIHtcbiAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gZ2l0LmNvbW1pdEFuZFB1c2goXG4gICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgIFwiTm91dmVsbGUgbW9pc3NvblwiLFxuICAgICAgICAgIG9wdGlvbnMucmVtb3RlLFxuICAgICAgICApXG4gICAgICAgIGlmIChlcnJvckNvZGUgIT09IDAgJiYgZXhpdENvZGUgPT09IDApIHtcbiAgICAgICAgICBleGl0Q29kZSA9IGVycm9yQ29kZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5Eb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGNob29zZW5EYXRhc2V0cy5kb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUsXG4gICAgICApXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZW9yZ2FuaXppbmcgJHtvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRofWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShcbiAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgXCIuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldFJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgZnMuZW5zdXJlRGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpXG4gICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZzLnJlYWRkaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcikpIHtcbiAgICAgICAgaWYgKGZpbGVuYW1lWzBdID09PSBcIi5cIikge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgZnMucmVtb3ZlU3luYyhwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBmaWxlbmFtZSkpXG4gICAgICB9XG4gICAgICBjb25zdCBkb2N1bWVudHNEaXIgPSBwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBcImRvY3VtZW50c1wiKVxuICAgICAgZnMubWtkaXJTeW5jKGRvY3VtZW50c0RpcilcbiAgICAgIGNvbnN0IGRvc3NpZXJzRGlyID0gcGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgXCJkb3NzaWVyc1wiKVxuICAgICAgZnMubWtkaXJTeW5jKGRvc3NpZXJzRGlyKVxuXG4gICAgICBzd2l0Y2ggKGRhdGFzZXQuc3RydWN0dXJlKSB7XG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TaW5nbGVGaWxlOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxEYXRhOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgPyBEb3NzaWVyc0xlZ2lzbGF0aWZzUmF3Q29udmVydC50b0Rvc3NpZXJzTGVnaXNsYXRpZnMoXG4gICAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb24sXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IEpTT04ucGFyc2Uob3JpZ2luYWxKc29uKVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRvY3VtZW50IG9mIG9yaWdpbmFsRGF0YS5leHBvcnQudGV4dGVzTGVnaXNsYXRpZnNcbiAgICAgICAgICAgICAgLmRvY3VtZW50KSB7XG4gICAgICAgICAgICAgIHdyaXRlRG9jdW1lbnRSZW9yZ2FuaXplZEpzb24oZG9jdW1lbnRzRGlyLCBkb2N1bWVudClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCB7IGRvc3NpZXJQYXJsZW1lbnRhaXJlIH0gb2Ygb3JpZ2luYWxEYXRhLmV4cG9ydFxuICAgICAgICAgICAgICAuZG9zc2llcnNMZWdpc2xhdGlmcy5kb3NzaWVyKSB7XG4gICAgICAgICAgICAgIHdyaXRlRG9zc2llclBhcmxlbWVudGFpcmVSZW9yZ2FuaXplZEpzb24oXG4gICAgICAgICAgICAgICAgZG9zc2llcnNEaXIsXG4gICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmUsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZG9jdW1lbnRTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgW1wiZG9jdW1lbnRcIl0sXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50RmlsZW5hbWUgPVxuICAgICAgICAgICAgICAgIGRvY3VtZW50U3BsaXRQYXRoW2RvY3VtZW50U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgIGlmICghZG9jdW1lbnRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudE9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5kb2N1bWVudFNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJkb2N1bWVudFwiIGZpbGU6ICR7ZG9jdW1lbnRPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50T3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgZG9jdW1lbnRPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50T3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gRG9zc2llcnNMZWdpc2xhdGlmc1Jhd0NvbnZlcnQudG9Eb2N1bWVudChkb2N1bWVudE9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UoZG9jdW1lbnRPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50ID0gZG9jdW1lbnRPcmlnaW5hbC5kb2N1bWVudFxuICAgICAgICAgICAgICB3cml0ZURvY3VtZW50UmVvcmdhbml6ZWRKc29uKGRvY3VtZW50c0RpciwgZG9jdW1lbnQpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgW1wiZG9zc2llclBhcmxlbWVudGFpcmVcIl0sXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlRmlsZW5hbWUgPVxuICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoW1xuICAgICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVTcGxpdFBhdGgubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgaWYgKCFkb3NzaWVyUGFybGVtZW50YWlyZUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLmRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcImRvc3NpZXJQYXJsZW1lbnRhaXJlXCIgZmlsZTogJHtkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBEb3NzaWVyc0xlZ2lzbGF0aWZzUmF3Q29udmVydC50b0Rvc3NpZXJQYXJsZW1lbnRhaXJlKFxuICAgICAgICAgICAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsSnNvbixcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UoZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlID1cbiAgICAgICAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsLmRvc3NpZXJQYXJsZW1lbnRhaXJlXG4gICAgICAgICAgICAgIHdyaXRlRG9zc2llclBhcmxlbWVudGFpcmVSZW9yZ2FuaXplZEpzb24oXG4gICAgICAgICAgICAgICAgZG9zc2llcnNEaXIsXG4gICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmUsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuY29tbWl0KSB7XG4gICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IGdpdC5jb21taXRBbmRQdXNoKFxuICAgICAgICAgIGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICBcIk5vdXZlbGxlIG1vaXNzb25cIixcbiAgICAgICAgICBvcHRpb25zLnJlbW90ZSxcbiAgICAgICAgKVxuICAgICAgICBpZiAoZXJyb3JDb2RlICE9PSAwICYmIGV4aXRDb2RlID09PSAwKSB7XG4gICAgICAgICAgZXhpdENvZGUgPSBlcnJvckNvZGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuU2NydXRpbnMpIHtcbiAgICBmb3IgKGxldCBkYXRhc2V0IG9mIGNob29zZW5EYXRhc2V0cy5zY3J1dGlucykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgIFwiLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX0uZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXRSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGZzLmVuc3VyZURpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpKSB7XG4gICAgICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGZzLnJlbW92ZVN5bmMocGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgZmlsZW5hbWUpKVxuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGRhdGFzZXQuc3RydWN0dXJlKSB7XG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TaW5nbGVGaWxlOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxEYXRhOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgPyBTY3J1dGluc1Jhd0NvbnZlcnQudG9TY3J1dGlucyhvcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIDogSlNPTi5wYXJzZShvcmlnaW5hbEpzb24pXG5cbiAgICAgICAgICAgIGZvciAoY29uc3Qgc2NydXRpbiBvZiBvcmlnaW5hbERhdGEuc2NydXRpbnMuc2NydXRpbikge1xuICAgICAgICAgICAgICB3cml0ZVNjcnV0aW5SZW9yZ2FuaXplZEpzb24oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBzY3J1dGluKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXM6XG4gICAgICAgICAge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzY3J1dGluU3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHNjcnV0aW5GaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgc2NydXRpblNwbGl0UGF0aFtzY3J1dGluU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgIGlmICghc2NydXRpbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHNjcnV0aW5PcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uc2NydXRpblNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJzY3J1dGluXCIgZmlsZTogJHtzY3J1dGluT3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBzY3J1dGluT3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgc2NydXRpbk9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3Qgc2NydXRpbk9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IFNjcnV0aW5zUmF3Q29udmVydC50b1NjcnV0aW5XcmFwcGVyKHNjcnV0aW5PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKHNjcnV0aW5PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IHNjcnV0aW4gPSBzY3J1dGluT3JpZ2luYWwuc2NydXRpblxuICAgICAgICAgICAgICB3cml0ZVNjcnV0aW5SZW9yZ2FuaXplZEpzb24oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBzY3J1dGluKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb21taXQpIHtcbiAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gZ2l0LmNvbW1pdEFuZFB1c2goXG4gICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgIFwiTm91dmVsbGUgbW9pc3NvblwiLFxuICAgICAgICAgIG9wdGlvbnMucmVtb3RlLFxuICAgICAgICApXG4gICAgICAgIGlmIChlcnJvckNvZGUgIT09IDAgJiYgZXhpdENvZGUgPT09IDApIHtcbiAgICAgICAgICBleGl0Q29kZSA9IGVycm9yQ29kZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gUmVzdG9yZSBzdGFuZGFyZCBjb252ZXJzaW9uIG9mIGRhdGVzIHRvIEpTT04uXG4gIERhdGUucHJvdG90eXBlLnRvSlNPTiA9IGV4aXN0aW5nRGF0ZVRvSnNvblxuXG4gIHJldHVybiBleGl0Q29kZVxufVxuXG5mdW5jdGlvbiB3cml0ZUFtZW5kZW1lbnRSZW9yZ2FuaXplZEpzb24oXG4gIGRhdGFzZXRSZW9yZ2FuaXplZERpcjogc3RyaW5nLFxuICBhbWVuZGVtZW50OiB7XG4gICAgdWlkOiBzdHJpbmdcbiAgICB0ZXh0ZUxlZ2lzbGF0aWZSZWY6IHN0cmluZ1xuICB9LFxuKTogdm9pZCB7XG4gIGNvbnN0IHVpZFRleHRlTGVnaXNsYXRpZiA9IGFtZW5kZW1lbnQudGV4dGVMZWdpc2xhdGlmUmVmXG4gIGFzc2VydC5ub3RTdHJpY3RFcXVhbCh1aWRUZXh0ZUxlZ2lzbGF0aWYsIHVuZGVmaW5lZClcbiAgY29uc3QgdGV4dGVMZWdpc2xhdGlmRGlyID0gcGF0aC5qb2luKFxuICAgIGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICB1aWRUZXh0ZUxlZ2lzbGF0aWYsXG4gIClcbiAgZnMuZW5zdXJlRGlyU3luYyh0ZXh0ZUxlZ2lzbGF0aWZEaXIpXG4gIGNvbnN0IHJlb3JnYW5pemVkSnNvbkZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgIHRleHRlTGVnaXNsYXRpZkRpcixcbiAgICBhbWVuZGVtZW50LnVpZCArIFwiLmpzb25cIixcbiAgKVxuICBmcy53cml0ZUZpbGVTeW5jKFxuICAgIHJlb3JnYW5pemVkSnNvbkZpbGVQYXRoLFxuICAgIEpTT04uc3RyaW5naWZ5KGFtZW5kZW1lbnQsIG51bGwsIDIpLFxuICAgIHtcbiAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICB9LFxuICApXG59XG5cbmZ1bmN0aW9uIHdyaXRlRG9jdW1lbnRSZW9yZ2FuaXplZEpzb24oXG4gIGRvY3VtZW50c0Rpcjogc3RyaW5nLFxuICBkb2N1bWVudDogeyB1aWQ6IHN0cmluZyB9LFxuKTogdm9pZCB7XG4gIGNvbnN0IGJhc2VuYW1lID0gcGF0aEZyb21Eb2N1bWVudFVpZChkb2N1bWVudHNEaXIsIGRvY3VtZW50LnVpZClcbiAgZnMud3JpdGVGaWxlU3luYyhgJHtiYXNlbmFtZX0uanNvbmAsIEpTT04uc3RyaW5naWZ5KGRvY3VtZW50LCBudWxsLCAyKSwge1xuICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgfSlcbn1cblxuZnVuY3Rpb24gd3JpdGVEb3NzaWVyUGFybGVtZW50YWlyZVJlb3JnYW5pemVkSnNvbihcbiAgZG9zc2llcnNEaXI6IHN0cmluZyxcbiAgZG9zc2llclBhcmxlbWVudGFpcmU6IHsgdWlkOiBzdHJpbmcgfSxcbik6IHZvaWQge1xuICBjb25zdCBiYXNlbmFtZSA9IHBhdGhGcm9tRG9zc2llclBhcmxlbWVudGFpcmVVaWQoXG4gICAgZG9zc2llcnNEaXIsXG4gICAgZG9zc2llclBhcmxlbWVudGFpcmUudWlkLFxuICApXG4gIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgYCR7YmFzZW5hbWV9Lmpzb25gLFxuICAgIEpTT04uc3RyaW5naWZ5KGRvc3NpZXJQYXJsZW1lbnRhaXJlLCBudWxsLCAyKSxcbiAgICB7XG4gICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgfSxcbiAgKVxufVxuXG5mdW5jdGlvbiB3cml0ZVJldW5pb25SZW9yZ2FuaXplZEpzb24oXG4gIHJldW5pb25zRGlyOiBzdHJpbmcsXG4gIHJldW5pb246IHsgdWlkOiBzdHJpbmcgfSxcbik6IHZvaWQge1xuICBjb25zdCBiYXNlbmFtZSA9IHBhdGhGcm9tUmV1bmlvblVpZChyZXVuaW9uc0RpciwgcmV1bmlvbi51aWQpXG4gIGZzLndyaXRlRmlsZVN5bmMoYCR7YmFzZW5hbWV9Lmpzb25gLCBKU09OLnN0cmluZ2lmeShyZXVuaW9uLCBudWxsLCAyKSwge1xuICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgfSlcbn1cblxuZnVuY3Rpb24gd3JpdGVTY3J1dGluUmVvcmdhbml6ZWRKc29uKFxuICBzY3J1dGluc0Rpcjogc3RyaW5nLFxuICBzY3J1dGluOiB7IHVpZDogc3RyaW5nIH0sXG4pOiB2b2lkIHtcbiAgY29uc3QgYmFzZW5hbWUgPSBwYXRoRnJvbVNjcnV0aW5VaWQoc2NydXRpbnNEaXIsIHNjcnV0aW4udWlkKVxuICBmcy53cml0ZUZpbGVTeW5jKGAke2Jhc2VuYW1lfS5qc29uYCwgSlNPTi5zdHJpbmdpZnkoc2NydXRpbiwgbnVsbCwgMiksIHtcbiAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gIH0pXG59XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuaWYgKHByb2Nlc3MuYXJndlsxXS5lbmRzV2l0aChcInJlb3JnYW5pemVfZGF0YS50c1wiKSkge1xuICBjb25zdCBvcHRpb25zID0gY29tbWFuZExpbmVBcmdzKG9wdGlvbnNEZWZpbml0aW9ucylcblxuICBwcm9jZXNzLmV4aXQocmVvcmdhbml6ZURhdGEob3B0aW9ucykpXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMs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
|