@tricoteuses/assemblee 1.0.7 → 1.1.1
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 +3 -9
- package/lib/api.mjs +4 -5
- package/lib/bugs/acteur-00010/plugin.test.js +3 -50
- package/lib/bugs/acteur-00010/plugin.test.mjs +1 -1
- package/lib/bugs/acteur-00010.js +2 -57
- package/lib/bugs/acteur-00010.mjs +1 -6
- package/lib/bugs/agenda-00002/plugin.test.js +3 -53
- package/lib/bugs/agenda-00002/plugin.test.mjs +1 -3
- package/lib/bugs/agenda-00002.js +3 -148
- package/lib/bugs/agenda-00002.mjs +1 -28
- package/lib/bugs/agenda-00008/plugin.test.js +3 -52
- package/lib/bugs/agenda-00008/plugin.test.mjs +1 -1
- package/lib/bugs/agenda-00008.js +2 -61
- package/lib/bugs/agenda-00008.mjs +1 -5
- package/lib/bugs/agenda-00011/plugin.test.js +5 -99
- package/lib/bugs/agenda-00011/plugin.test.mjs +3 -3
- package/lib/bugs/agenda-00011.js +4 -105
- package/lib/bugs/agenda-00011.mjs +3 -29
- package/lib/bugs.js +3 -164
- package/lib/bugs.mjs +1 -26
- package/lib/cleaners/actes_legislatifs.js +11 -115
- package/lib/cleaners/actes_legislatifs.mjs +7 -82
- package/lib/cleaners/acteurs.js +12 -92
- package/lib/cleaners/acteurs.mjs +7 -38
- package/lib/cleaners/amendements.js +10 -103
- package/lib/cleaners/amendements.mjs +4 -58
- package/lib/cleaners/documents.js +5 -67
- package/lib/cleaners/documents.mjs +1 -37
- package/lib/cleaners/dossiers_legislatifs.js +5 -61
- package/lib/cleaners/dossiers_legislatifs.mjs +1 -29
- package/lib/cleaners/index.js +1 -9
- package/lib/cleaners/index.mjs +1 -1
- package/lib/cleaners/organes.js +1 -33
- package/lib/cleaners/organes.mjs +1 -17
- package/lib/cleaners/reunions.js +4 -119
- package/lib/cleaners/reunions.mjs +1 -64
- package/lib/cleaners/scrutins.js +10 -102
- package/lib/cleaners/scrutins.mjs +1 -48
- package/lib/cleaners/xml.js +8 -42
- package/lib/cleaners/xml.mjs +6 -8
- package/lib/datasets.js +14 -113
- package/lib/datasets.mjs +6 -46
- package/lib/dates.js +7 -37
- package/lib/dates.mjs +9 -14
- package/lib/dossiers_legislatifs.js +6 -68
- package/lib/dossiers_legislatifs.mjs +5 -36
- package/lib/file_systems.js +56 -139
- package/lib/file_systems.mjs +1 -9
- package/lib/git.js +4 -53
- package/lib/git.mjs +1 -12
- package/lib/index.js +1 -15
- package/lib/index.mjs +1 -1
- package/lib/inserters.js +23 -146
- package/lib/inserters.mjs +6 -87
- package/lib/loaders.js +44 -316
- package/lib/loaders.mjs +12 -135
- package/lib/organes.js +1 -7
- package/lib/organes.mjs +1 -4
- package/lib/parsers/documents.js +22 -151
- package/lib/parsers/documents.mjs +19 -81
- package/lib/parsers/index.js +1 -4
- package/lib/parsers/index.mjs +1 -1
- package/lib/parsers/recherche_amendements.js +302 -527
- package/lib/parsers/recherche_amendements.mjs +8 -31
- package/lib/raw_types/acteurs_et_organes.d.ts +1 -30
- package/lib/raw_types/acteurs_et_organes.js +5 -124
- package/lib/raw_types/acteurs_et_organes.mjs +5 -105
- package/lib/raw_types/agendas.js +6 -89
- package/lib/raw_types/agendas.mjs +9 -65
- package/lib/raw_types/amendements.d.ts +2 -0
- package/lib/raw_types/amendements.js +10 -90
- package/lib/raw_types/amendements.mjs +11 -69
- package/lib/raw_types/dossiers_legislatifs.js +6 -96
- package/lib/raw_types/dossiers_legislatifs.mjs +6 -73
- package/lib/raw_types/scrutins.js +6 -81
- package/lib/raw_types/scrutins.mjs +9 -57
- package/lib/scripts/bugs_helper.js +2 -181
- package/lib/scripts/bugs_helper.mjs +2 -39
- package/lib/scripts/clean_data.js +27 -143
- package/lib/scripts/clean_data.mjs +15 -34
- package/lib/scripts/clean_reorganized_data.js +76 -240
- package/lib/scripts/clean_reorganized_data.mjs +36 -99
- package/lib/scripts/diff_amendements.js +19 -79
- package/lib/scripts/diff_amendements.mjs +17 -35
- package/lib/scripts/document_dossiers_legislatifs.js +17 -142
- package/lib/scripts/document_dossiers_legislatifs.mjs +6 -90
- package/lib/scripts/get_today_reunions.js +4 -22
- package/lib/scripts/get_today_reunions.mjs +1 -7
- package/lib/scripts/merge_scrutins.js +3 -47
- package/lib/scripts/merge_scrutins.mjs +1 -9
- package/lib/scripts/parse_textes_lois.js +15 -44
- package/lib/scripts/parse_textes_lois.mjs +18 -19
- package/lib/scripts/raw_types_from_amendements.js +3 -95
- package/lib/scripts/raw_types_from_amendements.mjs +1 -16
- package/lib/scripts/reorganize_data.js +74 -294
- package/lib/scripts/reorganize_data.mjs +22 -133
- package/lib/scripts/retrieve_deputes_photos.js +6 -119
- package/lib/scripts/retrieve_deputes_photos.mjs +7 -33
- package/lib/scripts/retrieve_documents.js +4 -192
- package/lib/scripts/retrieve_documents.mjs +2 -50
- package/lib/scripts/retrieve_open_data.js +44 -116
- package/lib/scripts/retrieve_open_data.mjs +14 -19
- package/lib/scripts/retrieve_pending_amendments.js +4 -98
- package/lib/scripts/retrieve_pending_amendments.mjs +1 -14
- package/lib/scripts/retrieve_senateurs_photos.js +18 -114
- package/lib/scripts/retrieve_senateurs_photos.mjs +20 -48
- package/lib/scripts/retrieve_textes_lois.js +3 -122
- package/lib/scripts/retrieve_textes_lois.mjs +3 -21
- package/lib/scripts/test_load.js +2 -10
- package/lib/scripts/test_load.mjs +2 -1
- package/lib/scripts/test_load_big_files.js +2 -10
- package/lib/scripts/test_load_big_files.mjs +2 -1
- package/lib/scripts/validate_json.js +4 -119
- package/lib/scripts/validate_json.mjs +2 -36
- package/lib/shared_types/codes_actes.js +1 -24
- package/lib/shared_types/codes_actes.mjs +3 -10
- package/lib/strings.js +1 -5
- package/lib/strings.mjs +1 -1
- package/lib/types/acteurs_et_organes.js +9 -84
- package/lib/types/acteurs_et_organes.mjs +10 -63
- package/lib/types/agendas.js +8 -90
- package/lib/types/agendas.mjs +11 -66
- package/lib/types/amendements.d.ts +2 -0
- package/lib/types/amendements.js +12 -92
- package/lib/types/amendements.mjs +15 -70
- package/lib/types/dossiers_legislatifs.js +8 -96
- package/lib/types/dossiers_legislatifs.mjs +10 -72
- package/lib/types/legislatures.js +1 -3
- package/lib/types/legislatures.mjs +1 -2
- package/lib/types/scrutins.js +8 -82
- package/lib/types/scrutins.mjs +11 -58
- package/lib/urls.js +3 -27
- package/lib/urls.mjs +3 -21
- package/package.json +1 -1
package/lib/loaders.js
CHANGED
|
@@ -1,29 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
require("core-js/modules/es.array.slice.js");
|
|
4
|
-
|
|
5
4
|
require("core-js/modules/es.object.to-string.js");
|
|
6
|
-
|
|
7
5
|
require("core-js/modules/es.function.name.js");
|
|
8
|
-
|
|
9
6
|
require("core-js/modules/es.array.from.js");
|
|
10
|
-
|
|
11
7
|
require("core-js/modules/es.string.iterator.js");
|
|
12
|
-
|
|
13
8
|
require("core-js/modules/es.symbol.js");
|
|
14
|
-
|
|
15
9
|
require("core-js/modules/es.symbol.description.js");
|
|
16
|
-
|
|
17
10
|
require("core-js/modules/es.symbol.iterator.js");
|
|
18
|
-
|
|
19
11
|
require("core-js/modules/es.array.iterator.js");
|
|
20
|
-
|
|
21
12
|
require("core-js/modules/web.dom-collections.iterator.js");
|
|
22
|
-
|
|
23
13
|
require("core-js/modules/es.array.is-array.js");
|
|
24
|
-
|
|
25
14
|
require("core-js/modules/es.object.define-property.js");
|
|
26
|
-
|
|
27
15
|
Object.defineProperty(exports, "__esModule", {
|
|
28
16
|
value: true
|
|
29
17
|
});
|
|
@@ -45,116 +33,75 @@ Object.defineProperty(exports, "walkDir", {
|
|
|
45
33
|
return _file_systems.walkDir;
|
|
46
34
|
}
|
|
47
35
|
});
|
|
48
|
-
|
|
49
36
|
require("core-js/modules/es.array.join.js");
|
|
50
|
-
|
|
51
37
|
require("core-js/modules/es.regexp.exec.js");
|
|
52
|
-
|
|
53
38
|
require("core-js/modules/es.string.replace.js");
|
|
54
|
-
|
|
55
39
|
require("core-js/modules/es.string.ends-with.js");
|
|
56
|
-
|
|
57
40
|
require("core-js/modules/es.array.concat.js");
|
|
58
|
-
|
|
59
41
|
require("core-js/modules/es.date.to-iso-string.js");
|
|
60
|
-
|
|
61
42
|
require("core-js/modules/es.object.assign.js");
|
|
62
|
-
|
|
63
43
|
var _assert = _interopRequireDefault(require("assert"));
|
|
64
|
-
|
|
65
44
|
var _fsExtra = _interopRequireDefault(require("fs-extra"));
|
|
66
|
-
|
|
67
45
|
var _path = _interopRequireDefault(require("path"));
|
|
68
|
-
|
|
69
46
|
var _datasets = require("./datasets");
|
|
70
|
-
|
|
71
47
|
var _file_systems = require("./file_systems");
|
|
72
|
-
|
|
73
48
|
var _acteurs_et_organes = require("./types/acteurs_et_organes");
|
|
74
|
-
|
|
75
49
|
var _agendas = require("./types/agendas");
|
|
76
|
-
|
|
77
50
|
var _amendements = require("./types/amendements");
|
|
78
|
-
|
|
79
51
|
var _dossiers_legislatifs = require("./types/dossiers_legislatifs");
|
|
80
|
-
|
|
81
52
|
var _legislatures = require("./types/legislatures");
|
|
82
|
-
|
|
83
53
|
var _scrutins = require("./types/scrutins");
|
|
84
|
-
|
|
85
54
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
86
|
-
|
|
87
55
|
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
88
|
-
|
|
89
56
|
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."); }
|
|
90
|
-
|
|
91
57
|
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
92
|
-
|
|
93
58
|
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
94
|
-
|
|
95
59
|
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(_e) { throw _e; }, 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(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
|
|
96
|
-
|
|
97
60
|
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); }
|
|
98
|
-
|
|
99
61
|
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; }
|
|
100
|
-
|
|
101
62
|
var documentUidRegex = /^(ACIN|ALCN|AVCE|AVIS|DECL|ETDI|LETT|MESS|PION|PNRE|PRJL|RAPP|RINF|RION)(AN|SN)(R\d+)[LS](\d+)(B|BTA|BTC|TAP)(\d+)(-.*)?$/;
|
|
102
63
|
var dossierUidRegex = /^DL(R\d+)(L\d+)N(\d+)$/;
|
|
103
64
|
var reunionUidRegex = /^RU(AN|CG|SN)(R\d+)(L\d+)([AS]\d{4})(IDC|IDFL?|IDS)(\d+)$/;
|
|
104
65
|
var scrutinUidRegex = /^VTAN(R\d+)(L\d+)V(\d+)$/;
|
|
105
|
-
/** Load data from split files. */
|
|
106
66
|
|
|
67
|
+
/** Load data from split files. */
|
|
107
68
|
function loadAssembleeData(dataDir, enabledDatasets, legislature) {
|
|
108
69
|
var _ref = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {},
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
70
|
+
_ref$log = _ref.log,
|
|
71
|
+
log = _ref$log === void 0 ? false : _ref$log;
|
|
112
72
|
var acteurByUid = {};
|
|
113
73
|
var organeByUid = {};
|
|
114
|
-
|
|
115
74
|
if (enabledDatasets & _datasets.EnabledDatasets.ActeursEtOrganes) {
|
|
116
75
|
var _iterator = _createForOfIteratorHelper(_datasets.datasets.acteursEtOrganes),
|
|
117
|
-
|
|
118
|
-
|
|
76
|
+
_step;
|
|
119
77
|
try {
|
|
120
78
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
121
79
|
var dataset = _step.value;
|
|
122
|
-
|
|
123
80
|
if (dataset.ignoreForWeb) {
|
|
124
81
|
continue;
|
|
125
82
|
}
|
|
126
|
-
|
|
127
83
|
if (legislature !== _legislatures.Legislature.All && dataset.legislature !== _legislatures.Legislature.All && legislature !== dataset.legislature) {
|
|
128
84
|
continue;
|
|
129
85
|
}
|
|
130
|
-
|
|
131
86
|
var datasetDir = _path["default"].join(dataDir, dataset.filename.replace(/\.json$/, "_nettoye"));
|
|
132
|
-
|
|
133
87
|
var _iterator2 = _createForOfIteratorHelper((0, _file_systems.walkDir)(datasetDir, ["acteurs"])),
|
|
134
|
-
|
|
135
|
-
|
|
88
|
+
_step2;
|
|
136
89
|
try {
|
|
137
90
|
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
138
91
|
var acteurSplitPath = _step2.value;
|
|
139
92
|
var acteurFilename = acteurSplitPath[acteurSplitPath.length - 1];
|
|
140
|
-
|
|
141
93
|
if (!acteurFilename.endsWith(".json")) {
|
|
142
94
|
continue;
|
|
143
95
|
}
|
|
144
|
-
|
|
145
96
|
var acteurFilePath = _path["default"].join.apply(_path["default"], [datasetDir].concat(_toConsumableArray(acteurSplitPath)));
|
|
146
|
-
|
|
147
97
|
if (log) {
|
|
148
98
|
console.log("Loading file: ".concat(acteurFilePath, "\u2026"));
|
|
149
99
|
}
|
|
150
|
-
|
|
151
100
|
var acteurJson = _fsExtra["default"].readFileSync(acteurFilePath, {
|
|
152
101
|
encoding: "utf8"
|
|
153
102
|
});
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
103
|
+
var acteur = _acteurs_et_organes.Convert.toActeur(acteurJson);
|
|
104
|
+
// Keep the first existing "acteur", because the first wrapper is the most complete.
|
|
158
105
|
if (acteurByUid[acteur.uid] === undefined) {
|
|
159
106
|
acteurByUid[acteur.uid] = acteur;
|
|
160
107
|
}
|
|
@@ -164,32 +111,24 @@ function loadAssembleeData(dataDir, enabledDatasets, legislature) {
|
|
|
164
111
|
} finally {
|
|
165
112
|
_iterator2.f();
|
|
166
113
|
}
|
|
167
|
-
|
|
168
114
|
var _iterator3 = _createForOfIteratorHelper((0, _file_systems.walkDir)(datasetDir, ["organes"])),
|
|
169
|
-
|
|
170
|
-
|
|
115
|
+
_step3;
|
|
171
116
|
try {
|
|
172
117
|
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
173
118
|
var organeSplitPath = _step3.value;
|
|
174
119
|
var organeFilename = organeSplitPath[organeSplitPath.length - 1];
|
|
175
|
-
|
|
176
120
|
if (!organeFilename.endsWith(".json")) {
|
|
177
121
|
continue;
|
|
178
122
|
}
|
|
179
|
-
|
|
180
123
|
var organeFilePath = _path["default"].join.apply(_path["default"], [datasetDir].concat(_toConsumableArray(organeSplitPath)));
|
|
181
|
-
|
|
182
124
|
if (log) {
|
|
183
125
|
console.log("Loading file: ".concat(organeFilePath, "\u2026"));
|
|
184
126
|
}
|
|
185
|
-
|
|
186
127
|
var organeJson = _fsExtra["default"].readFileSync(organeFilePath, {
|
|
187
128
|
encoding: "utf8"
|
|
188
129
|
});
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
130
|
+
var organe = _acteurs_et_organes.Convert.toOrgane(organeJson);
|
|
131
|
+
// Keep the first existing "organe", because the first wrapper is the most complete.
|
|
193
132
|
if (organeByUid[organe.uid] === undefined) {
|
|
194
133
|
organeByUid[organe.uid] = organe;
|
|
195
134
|
}
|
|
@@ -206,87 +145,64 @@ function loadAssembleeData(dataDir, enabledDatasets, legislature) {
|
|
|
206
145
|
_iterator.f();
|
|
207
146
|
}
|
|
208
147
|
}
|
|
209
|
-
|
|
210
148
|
var reunionByUid = {};
|
|
211
149
|
var reunionsByDay = {};
|
|
212
150
|
var reunionsByDossierUid = {};
|
|
213
|
-
|
|
214
151
|
if (enabledDatasets & _datasets.EnabledDatasets.Agendas) {
|
|
215
152
|
var _iterator4 = _createForOfIteratorHelper(_datasets.datasets.agendas),
|
|
216
|
-
|
|
217
|
-
|
|
153
|
+
_step4;
|
|
218
154
|
try {
|
|
219
155
|
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
220
156
|
var _dataset = _step4.value;
|
|
221
|
-
|
|
222
157
|
if (_dataset.ignoreForWeb) {
|
|
223
158
|
continue;
|
|
224
159
|
}
|
|
225
|
-
|
|
226
160
|
if (legislature !== _legislatures.Legislature.All && _dataset.legislature !== _legislatures.Legislature.All && legislature !== _dataset.legislature) {
|
|
227
161
|
continue;
|
|
228
162
|
}
|
|
229
|
-
|
|
230
163
|
var _datasetDir = _path["default"].join(dataDir, _dataset.filename.replace(/\.json$/, "_nettoye"));
|
|
231
|
-
|
|
232
164
|
var _iterator5 = _createForOfIteratorHelper((0, _file_systems.walkDir)(_datasetDir)),
|
|
233
|
-
|
|
234
|
-
|
|
165
|
+
_step5;
|
|
235
166
|
try {
|
|
236
167
|
for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
|
|
237
168
|
var reunionSplitPath = _step5.value;
|
|
238
169
|
var reunionFilename = reunionSplitPath[reunionSplitPath.length - 1];
|
|
239
|
-
|
|
240
170
|
if (!reunionFilename.endsWith(".json")) {
|
|
241
171
|
continue;
|
|
242
172
|
}
|
|
243
|
-
|
|
244
173
|
var reunionFilePath = _path["default"].join.apply(_path["default"], [_datasetDir].concat(_toConsumableArray(reunionSplitPath)));
|
|
245
|
-
|
|
246
174
|
if (log) {
|
|
247
175
|
console.log("Loading file: ".concat(reunionFilePath, "\u2026"));
|
|
248
176
|
}
|
|
249
|
-
|
|
250
177
|
var reunionJson = _fsExtra["default"].readFileSync(reunionFilePath, {
|
|
251
178
|
encoding: "utf8"
|
|
252
179
|
});
|
|
253
|
-
|
|
254
180
|
var reunion = _agendas.Convert.toReunion(reunionJson);
|
|
255
|
-
|
|
256
181
|
if (reunionByUid[reunion.uid] === undefined) {
|
|
257
182
|
reunionByUid[reunion.uid] = reunion;
|
|
258
183
|
}
|
|
259
|
-
|
|
260
184
|
var _day = reunion.timestampDebut.toISOString().split("T")[0];
|
|
261
185
|
var reunionsAtDay = reunionsByDay[_day];
|
|
262
|
-
|
|
263
186
|
if (reunionsAtDay === undefined) {
|
|
264
187
|
reunionsAtDay = reunionsByDay[_day] = [];
|
|
265
188
|
}
|
|
266
|
-
|
|
267
189
|
reunionsAtDay.push(reunion);
|
|
268
190
|
var odj = reunion.odj;
|
|
269
|
-
|
|
270
191
|
if (odj !== undefined) {
|
|
271
192
|
var _iterator6 = _createForOfIteratorHelper(odj.pointsOdj || []),
|
|
272
|
-
|
|
273
|
-
|
|
193
|
+
_step6;
|
|
274
194
|
try {
|
|
275
195
|
for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
|
|
276
196
|
var pointOdj = _step6.value;
|
|
277
|
-
|
|
278
197
|
var _iterator7 = _createForOfIteratorHelper(pointOdj.dossiersLegislatifsRefs || []),
|
|
279
|
-
|
|
280
|
-
|
|
198
|
+
_step7;
|
|
281
199
|
try {
|
|
282
200
|
for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
|
|
283
201
|
var dossierLegislatifRef = _step7.value;
|
|
284
202
|
var reunionsAtDossierUid = reunionsByDossierUid[dossierLegislatifRef];
|
|
285
|
-
|
|
286
203
|
if (reunionsAtDossierUid === undefined) {
|
|
287
204
|
reunionsAtDossierUid = reunionsByDossierUid[dossierLegislatifRef] = [];
|
|
288
205
|
}
|
|
289
|
-
|
|
290
206
|
reunionsAtDossierUid.push(reunion);
|
|
291
207
|
}
|
|
292
208
|
} catch (err) {
|
|
@@ -314,51 +230,37 @@ function loadAssembleeData(dataDir, enabledDatasets, legislature) {
|
|
|
314
230
|
_iterator4.f();
|
|
315
231
|
}
|
|
316
232
|
}
|
|
317
|
-
|
|
318
233
|
var amendementByUid = {};
|
|
319
|
-
|
|
320
234
|
if (enabledDatasets & _datasets.EnabledDatasets.Amendements) {
|
|
321
235
|
var _iterator8 = _createForOfIteratorHelper(_datasets.datasets.amendements),
|
|
322
|
-
|
|
323
|
-
|
|
236
|
+
_step8;
|
|
324
237
|
try {
|
|
325
238
|
for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
|
|
326
239
|
var _dataset2 = _step8.value;
|
|
327
|
-
|
|
328
240
|
if (_dataset2.ignoreForWeb) {
|
|
329
241
|
continue;
|
|
330
242
|
}
|
|
331
|
-
|
|
332
243
|
if (legislature !== _legislatures.Legislature.All && _dataset2.legislature !== _legislatures.Legislature.All && legislature !== _dataset2.legislature) {
|
|
333
244
|
continue;
|
|
334
245
|
}
|
|
335
|
-
|
|
336
246
|
var _datasetDir2 = _path["default"].join(dataDir, _dataset2.filename.replace(/\.json$/, "_nettoye"));
|
|
337
|
-
|
|
338
247
|
var _iterator9 = _createForOfIteratorHelper((0, _file_systems.walkDir)(_datasetDir2)),
|
|
339
|
-
|
|
340
|
-
|
|
248
|
+
_step9;
|
|
341
249
|
try {
|
|
342
250
|
for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
|
|
343
251
|
var amendementSplitPath = _step9.value;
|
|
344
252
|
var amendementFilename = amendementSplitPath[amendementSplitPath.length - 1];
|
|
345
|
-
|
|
346
253
|
if (!amendementFilename.endsWith(".json")) {
|
|
347
254
|
continue;
|
|
348
255
|
}
|
|
349
|
-
|
|
350
256
|
var amendementFilePath = _path["default"].join.apply(_path["default"], [_datasetDir2].concat(_toConsumableArray(amendementSplitPath)));
|
|
351
|
-
|
|
352
257
|
if (log) {
|
|
353
258
|
console.log("Loading file: ".concat(amendementFilePath, "\u2026"));
|
|
354
259
|
}
|
|
355
|
-
|
|
356
260
|
var amendementJson = _fsExtra["default"].readFileSync(amendementFilePath, {
|
|
357
261
|
encoding: "utf8"
|
|
358
262
|
});
|
|
359
|
-
|
|
360
263
|
var amendement = _amendements.Convert.toAmendement(amendementJson);
|
|
361
|
-
|
|
362
264
|
if (amendementByUid[amendement.uid] === undefined) {
|
|
363
265
|
amendementByUid[amendement.uid] = amendement;
|
|
364
266
|
}
|
|
@@ -375,54 +277,40 @@ function loadAssembleeData(dataDir, enabledDatasets, legislature) {
|
|
|
375
277
|
_iterator8.f();
|
|
376
278
|
}
|
|
377
279
|
}
|
|
378
|
-
|
|
379
280
|
var documentByUid = {};
|
|
380
281
|
var dossierParlementaireBySenatChemin = {};
|
|
381
282
|
var dossierParlementaireByTitreChemin = {};
|
|
382
283
|
var dossierParlementaireByUid = {};
|
|
383
|
-
|
|
384
284
|
if (enabledDatasets & _datasets.EnabledDatasets.DossiersLegislatifs) {
|
|
385
285
|
var _iterator10 = _createForOfIteratorHelper(_datasets.datasets.dossiersLegislatifs),
|
|
386
|
-
|
|
387
|
-
|
|
286
|
+
_step10;
|
|
388
287
|
try {
|
|
389
288
|
for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
|
|
390
289
|
var _dataset3 = _step10.value;
|
|
391
|
-
|
|
392
290
|
if (_dataset3.ignoreForWeb) {
|
|
393
291
|
continue;
|
|
394
292
|
}
|
|
395
|
-
|
|
396
293
|
if (legislature !== _legislatures.Legislature.All && _dataset3.legislature !== _legislatures.Legislature.All && legislature !== _dataset3.legislature) {
|
|
397
294
|
continue;
|
|
398
295
|
}
|
|
399
|
-
|
|
400
296
|
var _datasetDir3 = _path["default"].join(dataDir, _dataset3.filename.replace(/\.json$/, "_nettoye"));
|
|
401
|
-
|
|
402
297
|
var _iterator11 = _createForOfIteratorHelper((0, _file_systems.walkDir)(_datasetDir3, ["documents"])),
|
|
403
|
-
|
|
404
|
-
|
|
298
|
+
_step11;
|
|
405
299
|
try {
|
|
406
300
|
for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {
|
|
407
301
|
var documentSplitPath = _step11.value;
|
|
408
302
|
var documentFilename = documentSplitPath[documentSplitPath.length - 1];
|
|
409
|
-
|
|
410
303
|
if (!documentFilename.endsWith(".json")) {
|
|
411
304
|
continue;
|
|
412
305
|
}
|
|
413
|
-
|
|
414
306
|
var documentFilePath = _path["default"].join.apply(_path["default"], [_datasetDir3].concat(_toConsumableArray(documentSplitPath)));
|
|
415
|
-
|
|
416
307
|
if (log) {
|
|
417
308
|
console.log("Loading file: ".concat(documentFilePath, "\u2026"));
|
|
418
309
|
}
|
|
419
|
-
|
|
420
310
|
var documentJson = _fsExtra["default"].readFileSync(documentFilePath, {
|
|
421
311
|
encoding: "utf8"
|
|
422
312
|
});
|
|
423
|
-
|
|
424
313
|
var document = _dossiers_legislatifs.Convert.toDocument(documentJson);
|
|
425
|
-
|
|
426
314
|
if (documentByUid[document.uid] === undefined) {
|
|
427
315
|
documentByUid[document.uid] = document;
|
|
428
316
|
}
|
|
@@ -432,41 +320,30 @@ function loadAssembleeData(dataDir, enabledDatasets, legislature) {
|
|
|
432
320
|
} finally {
|
|
433
321
|
_iterator11.f();
|
|
434
322
|
}
|
|
435
|
-
|
|
436
323
|
var _iterator12 = _createForOfIteratorHelper((0, _file_systems.walkDir)(_datasetDir3, ["dossiers"])),
|
|
437
|
-
|
|
438
|
-
|
|
324
|
+
_step12;
|
|
439
325
|
try {
|
|
440
326
|
for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {
|
|
441
327
|
var dossierSplitPath = _step12.value;
|
|
442
328
|
var dossierFilename = dossierSplitPath[dossierSplitPath.length - 1];
|
|
443
|
-
|
|
444
329
|
if (!dossierFilename.endsWith(".json")) {
|
|
445
330
|
continue;
|
|
446
331
|
}
|
|
447
|
-
|
|
448
332
|
var dossierFilePath = _path["default"].join.apply(_path["default"], [_datasetDir3].concat(_toConsumableArray(dossierSplitPath)));
|
|
449
|
-
|
|
450
333
|
if (log) {
|
|
451
334
|
console.log("Loading file: ".concat(dossierFilePath, "\u2026"));
|
|
452
335
|
}
|
|
453
|
-
|
|
454
336
|
var dossierJson = _fsExtra["default"].readFileSync(dossierFilePath, {
|
|
455
337
|
encoding: "utf8"
|
|
456
338
|
});
|
|
457
|
-
|
|
458
339
|
var dossier = _dossiers_legislatifs.Convert.toDossierParlementaire(dossierJson);
|
|
459
|
-
|
|
460
340
|
var titreDossier = dossier.titreDossier;
|
|
461
|
-
|
|
462
341
|
if (titreDossier.senatChemin && dossierParlementaireBySenatChemin[titreDossier.senatChemin] === undefined) {
|
|
463
342
|
dossierParlementaireBySenatChemin[titreDossier.senatChemin] = dossier;
|
|
464
343
|
}
|
|
465
|
-
|
|
466
344
|
if (titreDossier.titreChemin && dossierParlementaireByTitreChemin[titreDossier.titreChemin] === undefined) {
|
|
467
345
|
dossierParlementaireByTitreChemin[titreDossier.titreChemin] = dossier;
|
|
468
346
|
}
|
|
469
|
-
|
|
470
347
|
if (dossierParlementaireByUid[dossier.uid] === undefined) {
|
|
471
348
|
dossierParlementaireByUid[dossier.uid] = dossier;
|
|
472
349
|
}
|
|
@@ -483,23 +360,19 @@ function loadAssembleeData(dataDir, enabledDatasets, legislature) {
|
|
|
483
360
|
_iterator10.f();
|
|
484
361
|
}
|
|
485
362
|
}
|
|
486
|
-
|
|
487
363
|
var photoByUid = {};
|
|
488
|
-
|
|
489
364
|
if (enabledDatasets & _datasets.EnabledDatasets.Photos) {
|
|
490
365
|
{
|
|
491
|
-
var jsonFilePath = _path["default"].join(dataDir, "photos_deputes_".concat(
|
|
366
|
+
var jsonFilePath = _path["default"].join(dataDir, "photos_deputes_".concat(
|
|
367
|
+
// TODO: Handle Legislature.All.
|
|
492
368
|
legislature === _legislatures.Legislature.All ? _legislatures.Legislature.Seize : legislature), "deputes.json");
|
|
493
|
-
|
|
494
369
|
if (_fsExtra["default"].existsSync(jsonFilePath)) {
|
|
495
370
|
if (log) {
|
|
496
371
|
console.log("Loading file: ".concat(jsonFilePath));
|
|
497
372
|
}
|
|
498
|
-
|
|
499
373
|
var json = _fsExtra["default"].readFileSync(jsonFilePath, {
|
|
500
374
|
encoding: "utf8"
|
|
501
375
|
});
|
|
502
|
-
|
|
503
376
|
Object.assign(photoByUid, JSON.parse(json));
|
|
504
377
|
} else if (log) {
|
|
505
378
|
console.log("Ignoring missing file: ".concat(jsonFilePath));
|
|
@@ -507,67 +380,50 @@ function loadAssembleeData(dataDir, enabledDatasets, legislature) {
|
|
|
507
380
|
}
|
|
508
381
|
{
|
|
509
382
|
var _jsonFilePath = _path["default"].join(dataDir, "photos_senateurs", "senateurs.json");
|
|
510
|
-
|
|
511
383
|
if (_fsExtra["default"].existsSync(_jsonFilePath)) {
|
|
512
384
|
if (log) {
|
|
513
385
|
console.log("Loading file: ".concat(_jsonFilePath));
|
|
514
386
|
}
|
|
515
|
-
|
|
516
387
|
var _json = _fsExtra["default"].readFileSync(_jsonFilePath, {
|
|
517
388
|
encoding: "utf8"
|
|
518
389
|
});
|
|
519
|
-
|
|
520
390
|
Object.assign(photoByUid, JSON.parse(_json));
|
|
521
391
|
} else if (log) {
|
|
522
392
|
console.log("Ignoring missing file: ".concat(_jsonFilePath));
|
|
523
393
|
}
|
|
524
394
|
}
|
|
525
395
|
}
|
|
526
|
-
|
|
527
396
|
var scrutinByUid = {};
|
|
528
|
-
|
|
529
397
|
if (enabledDatasets & _datasets.EnabledDatasets.Scrutins) {
|
|
530
398
|
var _iterator13 = _createForOfIteratorHelper(_datasets.datasets.scrutins),
|
|
531
|
-
|
|
532
|
-
|
|
399
|
+
_step13;
|
|
533
400
|
try {
|
|
534
401
|
for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {
|
|
535
402
|
var _dataset4 = _step13.value;
|
|
536
|
-
|
|
537
403
|
if (_dataset4.ignoreForWeb) {
|
|
538
404
|
continue;
|
|
539
405
|
}
|
|
540
|
-
|
|
541
406
|
if (legislature !== _legislatures.Legislature.All && _dataset4.legislature !== _legislatures.Legislature.All && legislature !== _dataset4.legislature) {
|
|
542
407
|
continue;
|
|
543
408
|
}
|
|
544
|
-
|
|
545
409
|
var _datasetDir4 = _path["default"].join(dataDir, _dataset4.filename.replace(/\.json$/, "_nettoye"));
|
|
546
|
-
|
|
547
410
|
var _iterator14 = _createForOfIteratorHelper((0, _file_systems.walkDir)(_datasetDir4)),
|
|
548
|
-
|
|
549
|
-
|
|
411
|
+
_step14;
|
|
550
412
|
try {
|
|
551
413
|
for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {
|
|
552
414
|
var scrutinSplitPath = _step14.value;
|
|
553
415
|
var scrutinFilename = scrutinSplitPath[scrutinSplitPath.length - 1];
|
|
554
|
-
|
|
555
416
|
if (!scrutinFilename.endsWith(".json")) {
|
|
556
417
|
continue;
|
|
557
418
|
}
|
|
558
|
-
|
|
559
419
|
var scrutinFilePath = _path["default"].join.apply(_path["default"], [_datasetDir4].concat(_toConsumableArray(scrutinSplitPath)));
|
|
560
|
-
|
|
561
420
|
if (log) {
|
|
562
421
|
console.log("Loading file: ".concat(scrutinFilePath, "\u2026"));
|
|
563
422
|
}
|
|
564
|
-
|
|
565
423
|
var scrutinJson = _fsExtra["default"].readFileSync(scrutinFilePath, {
|
|
566
424
|
encoding: "utf8"
|
|
567
425
|
});
|
|
568
|
-
|
|
569
426
|
var scrutin = _scrutins.Convert.toScrutin(scrutinJson);
|
|
570
|
-
|
|
571
427
|
if (scrutinByUid[scrutin.uid] === undefined) {
|
|
572
428
|
scrutinByUid[scrutin.uid] = scrutin;
|
|
573
429
|
}
|
|
@@ -584,7 +440,6 @@ function loadAssembleeData(dataDir, enabledDatasets, legislature) {
|
|
|
584
440
|
_iterator13.f();
|
|
585
441
|
}
|
|
586
442
|
}
|
|
587
|
-
|
|
588
443
|
return {
|
|
589
444
|
acteurByUid: acteurByUid,
|
|
590
445
|
amendementByUid: amendementByUid,
|
|
@@ -600,52 +455,39 @@ function loadAssembleeData(dataDir, enabledDatasets, legislature) {
|
|
|
600
455
|
scrutinByUid: scrutinByUid
|
|
601
456
|
};
|
|
602
457
|
}
|
|
603
|
-
/** Load data from big monolytic files. */
|
|
604
|
-
|
|
605
458
|
|
|
459
|
+
/** Load data from big monolytic files. */
|
|
606
460
|
function loadAssembleeDataFromBigFiles(dataDir, enabledDatasets, legislature) {
|
|
607
461
|
var _ref2 = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {},
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
462
|
+
_ref2$log = _ref2.log,
|
|
463
|
+
log = _ref2$log === void 0 ? false : _ref2$log;
|
|
611
464
|
var acteurByUid = {};
|
|
612
465
|
var organeByUid = {};
|
|
613
|
-
|
|
614
466
|
if (enabledDatasets & _datasets.EnabledDatasets.ActeursEtOrganes) {
|
|
615
467
|
var _iterator15 = _createForOfIteratorHelper(_datasets.datasets.acteursEtOrganes),
|
|
616
|
-
|
|
617
|
-
|
|
468
|
+
_step15;
|
|
618
469
|
try {
|
|
619
470
|
for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {
|
|
620
471
|
var dataset = _step15.value;
|
|
621
|
-
|
|
622
472
|
if (dataset.ignoreForWeb) {
|
|
623
473
|
continue;
|
|
624
474
|
}
|
|
625
|
-
|
|
626
475
|
if (legislature !== _legislatures.Legislature.All && dataset.legislature !== _legislatures.Legislature.All && legislature !== dataset.legislature) {
|
|
627
476
|
continue;
|
|
628
477
|
}
|
|
629
|
-
|
|
630
478
|
var jsonFilePath = _path["default"].join(dataDir, dataset.filename.replace(/\.json$/, "_nettoye.json"));
|
|
631
|
-
|
|
632
479
|
if (log) {
|
|
633
480
|
console.log("Loading file: ".concat(jsonFilePath));
|
|
634
481
|
}
|
|
635
|
-
|
|
636
482
|
var json = _fsExtra["default"].readFileSync(jsonFilePath, {
|
|
637
483
|
encoding: "utf8"
|
|
638
484
|
});
|
|
639
|
-
|
|
640
485
|
var acteursEtOrganes = _acteurs_et_organes.Convert.toActeursEtOrganes(json);
|
|
641
|
-
|
|
642
486
|
var _iterator16 = _createForOfIteratorHelper(acteursEtOrganes.acteurs),
|
|
643
|
-
|
|
644
|
-
|
|
487
|
+
_step16;
|
|
645
488
|
try {
|
|
646
489
|
for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {
|
|
647
490
|
var acteur = _step16.value;
|
|
648
|
-
|
|
649
491
|
// Keep the first existing "acteur", because the first wrapper is the most complete.
|
|
650
492
|
if (acteurByUid[acteur.uid] === undefined) {
|
|
651
493
|
acteurByUid[acteur.uid] = acteur;
|
|
@@ -656,14 +498,11 @@ function loadAssembleeDataFromBigFiles(dataDir, enabledDatasets, legislature) {
|
|
|
656
498
|
} finally {
|
|
657
499
|
_iterator16.f();
|
|
658
500
|
}
|
|
659
|
-
|
|
660
501
|
var _iterator17 = _createForOfIteratorHelper(acteursEtOrganes.organes),
|
|
661
|
-
|
|
662
|
-
|
|
502
|
+
_step17;
|
|
663
503
|
try {
|
|
664
504
|
for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {
|
|
665
505
|
var organe = _step17.value;
|
|
666
|
-
|
|
667
506
|
// Keep the first existing "organe", because the first wrapper is the most complete.
|
|
668
507
|
if (organeByUid[organe.uid] === undefined) {
|
|
669
508
|
organeByUid[organe.uid] = organe;
|
|
@@ -681,80 +520,59 @@ function loadAssembleeDataFromBigFiles(dataDir, enabledDatasets, legislature) {
|
|
|
681
520
|
_iterator15.f();
|
|
682
521
|
}
|
|
683
522
|
}
|
|
684
|
-
|
|
685
523
|
var reunionByUid = {};
|
|
686
524
|
var reunionsByDay = {};
|
|
687
525
|
var reunionsByDossierUid = {};
|
|
688
|
-
|
|
689
526
|
if (enabledDatasets & _datasets.EnabledDatasets.Agendas) {
|
|
690
527
|
var _iterator18 = _createForOfIteratorHelper(_datasets.datasets.agendas),
|
|
691
|
-
|
|
692
|
-
|
|
528
|
+
_step18;
|
|
693
529
|
try {
|
|
694
530
|
for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {
|
|
695
531
|
var _dataset5 = _step18.value;
|
|
696
|
-
|
|
697
532
|
if (_dataset5.ignoreForWeb) {
|
|
698
533
|
continue;
|
|
699
534
|
}
|
|
700
|
-
|
|
701
535
|
if (legislature !== _legislatures.Legislature.All && _dataset5.legislature !== _legislatures.Legislature.All && legislature !== _dataset5.legislature) {
|
|
702
536
|
continue;
|
|
703
537
|
}
|
|
704
|
-
|
|
705
538
|
var _jsonFilePath2 = _path["default"].join(dataDir, _dataset5.filename.replace(/\.json$/, "_nettoye.json"));
|
|
706
|
-
|
|
707
539
|
if (log) {
|
|
708
540
|
console.log("Loading file: ".concat(_jsonFilePath2));
|
|
709
541
|
}
|
|
710
|
-
|
|
711
542
|
var _json2 = _fsExtra["default"].readFileSync(_jsonFilePath2, {
|
|
712
543
|
encoding: "utf8"
|
|
713
544
|
});
|
|
714
|
-
|
|
715
545
|
var agendas = _agendas.Convert.toAgendas(_json2);
|
|
716
|
-
|
|
717
546
|
var _iterator19 = _createForOfIteratorHelper(agendas.reunions),
|
|
718
|
-
|
|
719
|
-
|
|
547
|
+
_step19;
|
|
720
548
|
try {
|
|
721
549
|
for (_iterator19.s(); !(_step19 = _iterator19.n()).done;) {
|
|
722
550
|
var reunion = _step19.value;
|
|
723
|
-
|
|
724
551
|
if (reunionByUid[reunion.uid] === undefined) {
|
|
725
552
|
reunionByUid[reunion.uid] = reunion;
|
|
726
553
|
}
|
|
727
|
-
|
|
728
554
|
var _day2 = reunion.timestampDebut.toISOString().split("T")[0];
|
|
729
555
|
var reunionsAtDay = reunionsByDay[_day2];
|
|
730
|
-
|
|
731
556
|
if (reunionsAtDay === undefined) {
|
|
732
557
|
reunionsAtDay = reunionsByDay[_day2] = [];
|
|
733
558
|
}
|
|
734
|
-
|
|
735
559
|
reunionsAtDay.push(reunion);
|
|
736
560
|
var odj = reunion.odj;
|
|
737
|
-
|
|
738
561
|
if (odj !== undefined) {
|
|
739
562
|
var _iterator20 = _createForOfIteratorHelper(odj.pointsOdj || []),
|
|
740
|
-
|
|
741
|
-
|
|
563
|
+
_step20;
|
|
742
564
|
try {
|
|
743
565
|
for (_iterator20.s(); !(_step20 = _iterator20.n()).done;) {
|
|
744
566
|
var pointOdj = _step20.value;
|
|
745
|
-
|
|
746
567
|
var _iterator21 = _createForOfIteratorHelper(pointOdj.dossiersLegislatifsRefs || []),
|
|
747
|
-
|
|
748
|
-
|
|
568
|
+
_step21;
|
|
749
569
|
try {
|
|
750
570
|
for (_iterator21.s(); !(_step21 = _iterator21.n()).done;) {
|
|
751
571
|
var dossierLegislatifRef = _step21.value;
|
|
752
572
|
var reunionsAtDossierUid = reunionsByDossierUid[dossierLegislatifRef];
|
|
753
|
-
|
|
754
573
|
if (reunionsAtDossierUid === undefined) {
|
|
755
574
|
reunionsAtDossierUid = reunionsByDossierUid[dossierLegislatifRef] = [];
|
|
756
575
|
}
|
|
757
|
-
|
|
758
576
|
reunionsAtDossierUid.push(reunion);
|
|
759
577
|
}
|
|
760
578
|
} catch (err) {
|
|
@@ -782,51 +600,37 @@ function loadAssembleeDataFromBigFiles(dataDir, enabledDatasets, legislature) {
|
|
|
782
600
|
_iterator18.f();
|
|
783
601
|
}
|
|
784
602
|
}
|
|
785
|
-
|
|
786
603
|
var amendementByUid = {};
|
|
787
|
-
|
|
788
604
|
if (enabledDatasets & _datasets.EnabledDatasets.Amendements) {
|
|
789
605
|
var _iterator22 = _createForOfIteratorHelper(_datasets.datasets.amendements),
|
|
790
|
-
|
|
791
|
-
|
|
606
|
+
_step22;
|
|
792
607
|
try {
|
|
793
608
|
for (_iterator22.s(); !(_step22 = _iterator22.n()).done;) {
|
|
794
609
|
var _dataset6 = _step22.value;
|
|
795
|
-
|
|
796
610
|
if (_dataset6.ignoreForWeb) {
|
|
797
611
|
continue;
|
|
798
612
|
}
|
|
799
|
-
|
|
800
613
|
if (legislature !== _legislatures.Legislature.All && _dataset6.legislature !== _legislatures.Legislature.All && legislature !== _dataset6.legislature) {
|
|
801
614
|
continue;
|
|
802
615
|
}
|
|
803
|
-
|
|
804
616
|
var _jsonFilePath3 = _path["default"].join(dataDir, _dataset6.filename.replace(/\.json$/, "_nettoye.json"));
|
|
805
|
-
|
|
806
617
|
if (log) {
|
|
807
618
|
console.log("Loading file: ".concat(_jsonFilePath3));
|
|
808
619
|
}
|
|
809
|
-
|
|
810
620
|
var _json3 = _fsExtra["default"].readFileSync(_jsonFilePath3, {
|
|
811
621
|
encoding: "utf8"
|
|
812
622
|
});
|
|
813
|
-
|
|
814
623
|
var amendements = _amendements.Convert.toAmendements(_json3);
|
|
815
|
-
|
|
816
624
|
var _iterator23 = _createForOfIteratorHelper(amendements.textesLegislatifs),
|
|
817
|
-
|
|
818
|
-
|
|
625
|
+
_step23;
|
|
819
626
|
try {
|
|
820
627
|
for (_iterator23.s(); !(_step23 = _iterator23.n()).done;) {
|
|
821
628
|
var texteLegislatif = _step23.value;
|
|
822
|
-
|
|
823
629
|
var _iterator24 = _createForOfIteratorHelper(texteLegislatif.amendements),
|
|
824
|
-
|
|
825
|
-
|
|
630
|
+
_step24;
|
|
826
631
|
try {
|
|
827
632
|
for (_iterator24.s(); !(_step24 = _iterator24.n()).done;) {
|
|
828
633
|
var amendement = _step24.value;
|
|
829
|
-
|
|
830
634
|
if (amendementByUid[amendement.uid] === undefined) {
|
|
831
635
|
amendementByUid[amendement.uid] = amendement;
|
|
832
636
|
}
|
|
@@ -849,47 +653,35 @@ function loadAssembleeDataFromBigFiles(dataDir, enabledDatasets, legislature) {
|
|
|
849
653
|
_iterator22.f();
|
|
850
654
|
}
|
|
851
655
|
}
|
|
852
|
-
|
|
853
656
|
var documentByUid = {};
|
|
854
657
|
var dossierParlementaireBySenatChemin = {};
|
|
855
658
|
var dossierParlementaireByTitreChemin = {};
|
|
856
659
|
var dossierParlementaireByUid = {};
|
|
857
|
-
|
|
858
660
|
if (enabledDatasets & _datasets.EnabledDatasets.DossiersLegislatifs) {
|
|
859
661
|
var _iterator25 = _createForOfIteratorHelper(_datasets.datasets.dossiersLegislatifs),
|
|
860
|
-
|
|
861
|
-
|
|
662
|
+
_step25;
|
|
862
663
|
try {
|
|
863
664
|
for (_iterator25.s(); !(_step25 = _iterator25.n()).done;) {
|
|
864
665
|
var _dataset7 = _step25.value;
|
|
865
|
-
|
|
866
666
|
if (_dataset7.ignoreForWeb) {
|
|
867
667
|
continue;
|
|
868
668
|
}
|
|
869
|
-
|
|
870
669
|
if (legislature !== _legislatures.Legislature.All && _dataset7.legislature !== _legislatures.Legislature.All && legislature !== _dataset7.legislature) {
|
|
871
670
|
continue;
|
|
872
671
|
}
|
|
873
|
-
|
|
874
672
|
var _jsonFilePath4 = _path["default"].join(dataDir, _dataset7.filename.replace(/\.json$/, "_nettoye.json"));
|
|
875
|
-
|
|
876
673
|
if (log) {
|
|
877
674
|
console.log("Loading file: ".concat(_jsonFilePath4));
|
|
878
675
|
}
|
|
879
|
-
|
|
880
676
|
var _json4 = _fsExtra["default"].readFileSync(_jsonFilePath4, {
|
|
881
677
|
encoding: "utf8"
|
|
882
678
|
});
|
|
883
|
-
|
|
884
679
|
var dossiersLegislatifs = _dossiers_legislatifs.Convert.toDossiersLegislatifs(_json4);
|
|
885
|
-
|
|
886
680
|
var _iterator26 = _createForOfIteratorHelper(dossiersLegislatifs.textesLegislatifs),
|
|
887
|
-
|
|
888
|
-
|
|
681
|
+
_step26;
|
|
889
682
|
try {
|
|
890
683
|
for (_iterator26.s(); !(_step26 = _iterator26.n()).done;) {
|
|
891
684
|
var document = _step26.value;
|
|
892
|
-
|
|
893
685
|
if (documentByUid[document.uid] === undefined) {
|
|
894
686
|
documentByUid[document.uid] = document;
|
|
895
687
|
}
|
|
@@ -899,23 +691,18 @@ function loadAssembleeDataFromBigFiles(dataDir, enabledDatasets, legislature) {
|
|
|
899
691
|
} finally {
|
|
900
692
|
_iterator26.f();
|
|
901
693
|
}
|
|
902
|
-
|
|
903
694
|
var _iterator27 = _createForOfIteratorHelper(dossiersLegislatifs.dossiersParlementaires),
|
|
904
|
-
|
|
905
|
-
|
|
695
|
+
_step27;
|
|
906
696
|
try {
|
|
907
697
|
for (_iterator27.s(); !(_step27 = _iterator27.n()).done;) {
|
|
908
698
|
var dossier = _step27.value;
|
|
909
699
|
var titreDossier = dossier.titreDossier;
|
|
910
|
-
|
|
911
700
|
if (titreDossier.senatChemin && dossierParlementaireBySenatChemin[titreDossier.senatChemin] === undefined) {
|
|
912
701
|
dossierParlementaireBySenatChemin[titreDossier.senatChemin] = dossier;
|
|
913
702
|
}
|
|
914
|
-
|
|
915
703
|
if (titreDossier.titreChemin && dossierParlementaireByTitreChemin[titreDossier.titreChemin] === undefined) {
|
|
916
704
|
dossierParlementaireByTitreChemin[titreDossier.titreChemin] = dossier;
|
|
917
705
|
}
|
|
918
|
-
|
|
919
706
|
if (dossierParlementaireByUid[dossier.uid] === undefined) {
|
|
920
707
|
dossierParlementaireByUid[dossier.uid] = dossier;
|
|
921
708
|
}
|
|
@@ -932,24 +719,20 @@ function loadAssembleeDataFromBigFiles(dataDir, enabledDatasets, legislature) {
|
|
|
932
719
|
_iterator25.f();
|
|
933
720
|
}
|
|
934
721
|
}
|
|
935
|
-
|
|
936
722
|
var photoByUid = {};
|
|
937
|
-
|
|
938
723
|
if (enabledDatasets & _datasets.EnabledDatasets.Photos) {
|
|
939
724
|
var _photoByUid = {};
|
|
940
725
|
{
|
|
941
|
-
var _jsonFilePath5 = _path["default"].join(dataDir, "photos_deputes_".concat(
|
|
726
|
+
var _jsonFilePath5 = _path["default"].join(dataDir, "photos_deputes_".concat(
|
|
727
|
+
// TODO: Handle Legislature.All.
|
|
942
728
|
legislature === _legislatures.Legislature.All ? _legislatures.Legislature.Seize : legislature), "deputes.json");
|
|
943
|
-
|
|
944
729
|
if (_fsExtra["default"].existsSync(_jsonFilePath5)) {
|
|
945
730
|
if (log) {
|
|
946
731
|
console.log("Loading file: ".concat(_jsonFilePath5));
|
|
947
732
|
}
|
|
948
|
-
|
|
949
733
|
var _json5 = _fsExtra["default"].readFileSync(_jsonFilePath5, {
|
|
950
734
|
encoding: "utf8"
|
|
951
735
|
});
|
|
952
|
-
|
|
953
736
|
Object.assign(_photoByUid, JSON.parse(_json5));
|
|
954
737
|
} else if (log) {
|
|
955
738
|
console.log("Ignoring missing file: ".concat(_jsonFilePath5));
|
|
@@ -957,60 +740,45 @@ function loadAssembleeDataFromBigFiles(dataDir, enabledDatasets, legislature) {
|
|
|
957
740
|
}
|
|
958
741
|
{
|
|
959
742
|
var _jsonFilePath6 = _path["default"].join(dataDir, "photos_senateurs", "senateurs.json");
|
|
960
|
-
|
|
961
743
|
if (_fsExtra["default"].existsSync(_jsonFilePath6)) {
|
|
962
744
|
if (log) {
|
|
963
745
|
console.log("Loading file: ".concat(_jsonFilePath6));
|
|
964
746
|
}
|
|
965
|
-
|
|
966
747
|
var _json6 = _fsExtra["default"].readFileSync(_jsonFilePath6, {
|
|
967
748
|
encoding: "utf8"
|
|
968
749
|
});
|
|
969
|
-
|
|
970
750
|
Object.assign(_photoByUid, JSON.parse(_json6));
|
|
971
751
|
} else if (log) {
|
|
972
752
|
console.log("Ignoring missing file: ".concat(_jsonFilePath6));
|
|
973
753
|
}
|
|
974
754
|
}
|
|
975
755
|
}
|
|
976
|
-
|
|
977
756
|
var scrutinByUid = {};
|
|
978
|
-
|
|
979
757
|
if (enabledDatasets & _datasets.EnabledDatasets.Scrutins) {
|
|
980
758
|
var _iterator28 = _createForOfIteratorHelper(_datasets.datasets.scrutins),
|
|
981
|
-
|
|
982
|
-
|
|
759
|
+
_step28;
|
|
983
760
|
try {
|
|
984
761
|
for (_iterator28.s(); !(_step28 = _iterator28.n()).done;) {
|
|
985
762
|
var _dataset8 = _step28.value;
|
|
986
|
-
|
|
987
763
|
if (_dataset8.ignoreForWeb) {
|
|
988
764
|
continue;
|
|
989
765
|
}
|
|
990
|
-
|
|
991
766
|
if (legislature !== _legislatures.Legislature.All && _dataset8.legislature !== _legislatures.Legislature.All && legislature !== _dataset8.legislature) {
|
|
992
767
|
continue;
|
|
993
768
|
}
|
|
994
|
-
|
|
995
769
|
var _jsonFilePath7 = _path["default"].join(dataDir, _dataset8.filename.replace(/\.json$/, "_nettoye.json"));
|
|
996
|
-
|
|
997
770
|
if (log) {
|
|
998
771
|
console.log("Loading file: ".concat(_jsonFilePath7));
|
|
999
772
|
}
|
|
1000
|
-
|
|
1001
773
|
var _json7 = _fsExtra["default"].readFileSync(_jsonFilePath7, {
|
|
1002
774
|
encoding: "utf8"
|
|
1003
775
|
});
|
|
1004
|
-
|
|
1005
776
|
var scrutins = _scrutins.Convert.toScrutins(_json7);
|
|
1006
|
-
|
|
1007
777
|
var _iterator29 = _createForOfIteratorHelper(scrutins.scrutins),
|
|
1008
|
-
|
|
1009
|
-
|
|
778
|
+
_step29;
|
|
1010
779
|
try {
|
|
1011
780
|
for (_iterator29.s(); !(_step29 = _iterator29.n()).done;) {
|
|
1012
781
|
var scrutin = _step29.value;
|
|
1013
|
-
|
|
1014
782
|
if (scrutinByUid[scrutin.uid] === undefined) {
|
|
1015
783
|
scrutinByUid[scrutin.uid] = scrutin;
|
|
1016
784
|
}
|
|
@@ -1027,7 +795,6 @@ function loadAssembleeDataFromBigFiles(dataDir, enabledDatasets, legislature) {
|
|
|
1027
795
|
_iterator28.f();
|
|
1028
796
|
}
|
|
1029
797
|
}
|
|
1030
|
-
|
|
1031
798
|
return {
|
|
1032
799
|
acteurByUid: acteurByUid,
|
|
1033
800
|
amendementByUid: amendementByUid,
|
|
@@ -1043,94 +810,55 @@ function loadAssembleeDataFromBigFiles(dataDir, enabledDatasets, legislature) {
|
|
|
1043
810
|
scrutinByUid: scrutinByUid
|
|
1044
811
|
};
|
|
1045
812
|
}
|
|
1046
|
-
|
|
1047
813
|
function pathFromDocumentUid(documentsDir, uid) {
|
|
1048
814
|
var match = documentUidRegex.exec(uid);
|
|
1049
|
-
|
|
1050
815
|
_assert["default"].notStrictEqual(match, null, "Unexpected structure for document UID: ".concat(uid));
|
|
1051
|
-
|
|
1052
816
|
var documentType = _path["default"].join(documentsDir, match[1]);
|
|
1053
|
-
|
|
1054
817
|
var chambreDir = _path["default"].join(documentType, match[2]);
|
|
1055
|
-
|
|
1056
818
|
var republiqueDir = _path["default"].join(chambreDir, match[3]);
|
|
1057
|
-
|
|
1058
819
|
var legislatureDir = _path["default"].join(republiqueDir, match[4]);
|
|
1059
|
-
|
|
1060
820
|
var etatDir = _path["default"].join(legislatureDir, match[5]);
|
|
1061
|
-
|
|
1062
821
|
var numero = "000000" + match[6];
|
|
1063
822
|
numero = numero.substr(numero.length - 6);
|
|
1064
|
-
|
|
1065
823
|
var numeroMilliersDir = _path["default"].join(etatDir, numero.substr(0, 3));
|
|
1066
|
-
|
|
1067
824
|
_fsExtra["default"].ensureDirSync(numeroMilliersDir);
|
|
1068
|
-
|
|
1069
825
|
return _path["default"].join(numeroMilliersDir, uid);
|
|
1070
826
|
}
|
|
1071
|
-
|
|
1072
827
|
function pathFromDossierParlementaireUid(dossiersDir, uid) {
|
|
1073
828
|
var match = dossierUidRegex.exec(uid);
|
|
1074
|
-
|
|
1075
829
|
_assert["default"].notStrictEqual(match, null, "Unexpected structure for dossier parlementaire UID: ".concat(uid));
|
|
1076
|
-
|
|
1077
830
|
var republiqueDir = _path["default"].join(dossiersDir, match[1]);
|
|
1078
|
-
|
|
1079
831
|
var legislatureDir = _path["default"].join(republiqueDir, match[2]);
|
|
1080
|
-
|
|
1081
832
|
var numero = "000000" + match[3];
|
|
1082
833
|
numero = numero.substr(numero.length - 6);
|
|
1083
|
-
|
|
1084
834
|
var numeroMilliersDir = _path["default"].join(legislatureDir, numero.substr(0, 3));
|
|
1085
|
-
|
|
1086
835
|
_fsExtra["default"].ensureDirSync(numeroMilliersDir);
|
|
1087
|
-
|
|
1088
836
|
return _path["default"].join(numeroMilliersDir, uid);
|
|
1089
837
|
}
|
|
1090
|
-
|
|
1091
838
|
function pathFromReunionUid(reunionsDir, uid) {
|
|
1092
839
|
var match = reunionUidRegex.exec(uid);
|
|
1093
|
-
|
|
1094
840
|
_assert["default"].notStrictEqual(match, null, "Unexpected structure for reunion UID: ".concat(uid));
|
|
1095
|
-
|
|
1096
841
|
var chambreDir = _path["default"].join(reunionsDir, match[1]);
|
|
1097
|
-
|
|
1098
842
|
var republiqueDir = _path["default"].join(chambreDir, match[2]);
|
|
1099
|
-
|
|
1100
843
|
var legislatureDir = _path["default"].join(republiqueDir, match[3]);
|
|
1101
|
-
|
|
1102
844
|
var sessionDir = _path["default"].join(legislatureDir, match[4]);
|
|
1103
|
-
|
|
1104
845
|
var idDir = _path["default"].join(sessionDir, match[5]);
|
|
1105
|
-
|
|
1106
846
|
var numero = "000000000" + match[6];
|
|
1107
847
|
numero = numero.substr(numero.length - 9);
|
|
1108
|
-
|
|
1109
848
|
var numeroMillionsDir = _path["default"].join(idDir, numero.substr(0, 3));
|
|
1110
|
-
|
|
1111
849
|
var numeroMilliersDir = _path["default"].join(numeroMillionsDir, numero.substr(3, 3));
|
|
1112
|
-
|
|
1113
850
|
_fsExtra["default"].ensureDirSync(numeroMilliersDir);
|
|
1114
|
-
|
|
1115
851
|
return _path["default"].join(numeroMilliersDir, uid);
|
|
1116
852
|
}
|
|
1117
|
-
|
|
1118
853
|
function pathFromScrutinUid(scrutinsDir, uid) {
|
|
1119
854
|
var match = scrutinUidRegex.exec(uid);
|
|
1120
|
-
|
|
1121
855
|
_assert["default"].notStrictEqual(match, null, "Unexpected structure for scrutin UID: ".concat(uid));
|
|
1122
|
-
|
|
1123
856
|
var republiqueDir = _path["default"].join(scrutinsDir, match[1]);
|
|
1124
|
-
|
|
1125
857
|
var legislatureDir = _path["default"].join(republiqueDir, match[2]);
|
|
1126
|
-
|
|
1127
858
|
var numero = "000000" + match[3];
|
|
1128
859
|
numero = numero.substr(numero.length - 6);
|
|
1129
|
-
|
|
1130
860
|
var numeroMilliersDir = _path["default"].join(legislatureDir, numero.substr(0, 3));
|
|
1131
|
-
|
|
1132
861
|
_fsExtra["default"].ensureDirSync(numeroMilliersDir);
|
|
1133
|
-
|
|
1134
862
|
return _path["default"].join(numeroMilliersDir, uid);
|
|
1135
863
|
}
|
|
1136
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkb2N1bWVudFVpZFJlZ2V4IiwiZG9zc2llclVpZFJlZ2V4IiwicmV1bmlvblVpZFJlZ2V4Iiwic2NydXRpblVpZFJlZ2V4IiwibG9hZEFzc2VtYmxlZURhdGEiLCJkYXRhRGlyIiwiZW5hYmxlZERhdGFzZXRzIiwibGVnaXNsYXR1cmUiLCJsb2ciLCJhY3RldXJCeVVpZCIsIm9yZ2FuZUJ5VWlkIiwiRW5hYmxlZERhdGFzZXRzIiwiQWN0ZXVyc0V0T3JnYW5lcyIsImRhdGFzZXRzIiwiYWN0ZXVyc0V0T3JnYW5lcyIsImRhdGFzZXQiLCJpZ25vcmVGb3JXZWIiLCJMZWdpc2xhdHVyZSIsIkFsbCIsImRhdGFzZXREaXIiLCJwYXRoIiwiam9pbiIsImZpbGVuYW1lIiwicmVwbGFjZSIsIndhbGtEaXIiLCJhY3RldXJTcGxpdFBhdGgiLCJhY3RldXJGaWxlbmFtZSIsImxlbmd0aCIsImVuZHNXaXRoIiwiYWN0ZXVyRmlsZVBhdGgiLCJjb25zb2xlIiwiYWN0ZXVySnNvbiIsImZzIiwicmVhZEZpbGVTeW5jIiwiZW5jb2RpbmciLCJhY3RldXIiLCJBY3RldXJzRXRPcmdhbmVzQ29udmVydCIsInRvQWN0ZXVyIiwidWlkIiwidW5kZWZpbmVkIiwib3JnYW5lU3BsaXRQYXRoIiwib3JnYW5lRmlsZW5hbWUiLCJvcmdhbmVGaWxlUGF0aCIsIm9yZ2FuZUpzb24iLCJvcmdhbmUiLCJ0b09yZ2FuZSIsInJldW5pb25CeVVpZCIsInJldW5pb25zQnlEYXkiLCJyZXVuaW9uc0J5RG9zc2llclVpZCIsIkFnZW5kYXMiLCJhZ2VuZGFzIiwicmV1bmlvblNwbGl0UGF0aCIsInJldW5pb25GaWxlbmFtZSIsInJldW5pb25GaWxlUGF0aCIsInJldW5pb25Kc29uIiwicmV1bmlvbiIsIkFnZW5kYXNDb252ZXJ0IiwidG9SZXVuaW9uIiwiZGF5IiwidGltZXN0YW1wRGVidXQiLCJ0b0lTT1N0cmluZyIsInNwbGl0IiwicmV1bmlvbnNBdERheSIsInB1c2giLCJvZGoiLCJwb2ludHNPZGoiLCJwb2ludE9kaiIsImRvc3NpZXJzTGVnaXNsYXRpZnNSZWZzIiwiZG9zc2llckxlZ2lzbGF0aWZSZWYiLCJyZXVuaW9uc0F0RG9zc2llclVpZCIsImFtZW5kZW1lbnRCeVVpZCIsIkFtZW5kZW1lbnRzIiwiYW1lbmRlbWVudHMiLCJhbWVuZGVtZW50U3BsaXRQYXRoIiwiYW1lbmRlbWVudEZpbGVuYW1lIiwiYW1lbmRlbWVudEZpbGVQYXRoIiwiYW1lbmRlbWVudEpzb24iLCJhbWVuZGVtZW50IiwiQW1lbmRlbWVudHNDb252ZXJ0IiwidG9BbWVuZGVtZW50IiwiZG9jdW1lbnRCeVVpZCIsImRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pbiIsImRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pbiIsImRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWQiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9zc2llcnNMZWdpc2xhdGlmcyIsImRvY3VtZW50U3BsaXRQYXRoIiwiZG9jdW1lbnRGaWxlbmFtZSIsImRvY3VtZW50RmlsZVBhdGgiLCJkb2N1bWVudEpzb24iLCJkb2N1bWVudCIsIkRvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0IiwidG9Eb2N1bWVudCIsImRvc3NpZXJTcGxpdFBhdGgiLCJkb3NzaWVyRmlsZW5hbWUiLCJkb3NzaWVyRmlsZVBhdGgiLCJkb3NzaWVySnNvbiIsImRvc3NpZXIiLCJ0b0Rvc3NpZXJQYXJsZW1lbnRhaXJlIiwidGl0cmVEb3NzaWVyIiwic2VuYXRDaGVtaW4iLCJ0aXRyZUNoZW1pbiIsInBob3RvQnlVaWQiLCJQaG90b3MiLCJqc29uRmlsZVBhdGgiLCJTZWl6ZSIsImV4aXN0c1N5bmMiLCJqc29uIiwiT2JqZWN0IiwiYXNzaWduIiwiSlNPTiIsInBhcnNlIiwic2NydXRpbkJ5VWlkIiwiU2NydXRpbnMiLCJzY3J1dGlucyIsInNjcnV0aW5TcGxpdFBhdGgiLCJzY3J1dGluRmlsZW5hbWUiLCJzY3J1dGluRmlsZVBhdGgiLCJzY3J1dGluSnNvbiIsInNjcnV0aW4iLCJTY3J1dGluc0NvbnZlcnQiLCJ0b1NjcnV0aW4iLCJsb2FkQXNzZW1ibGVlRGF0YUZyb21CaWdGaWxlcyIsInRvQWN0ZXVyc0V0T3JnYW5lcyIsImFjdGV1cnMiLCJvcmdhbmVzIiwidG9BZ2VuZGFzIiwicmV1bmlvbnMiLCJ0b0FtZW5kZW1lbnRzIiwidGV4dGVzTGVnaXNsYXRpZnMiLCJ0ZXh0ZUxlZ2lzbGF0aWYiLCJ0b0Rvc3NpZXJzTGVnaXNsYXRpZnMiLCJkb3NzaWVyc1BhcmxlbWVudGFpcmVzIiwidG9TY3J1dGlucyIsInBhdGhGcm9tRG9jdW1lbnRVaWQiLCJkb2N1bWVudHNEaXIiLCJtYXRjaCIsImV4ZWMiLCJhc3NlcnQiLCJub3RTdHJpY3RFcXVhbCIsImRvY3VtZW50VHlwZSIsImNoYW1icmVEaXIiLCJyZXB1YmxpcXVlRGlyIiwibGVnaXNsYXR1cmVEaXIiLCJldGF0RGlyIiwibnVtZXJvIiwic3Vic3RyIiwibnVtZXJvTWlsbGllcnNEaXIiLCJlbnN1cmVEaXJTeW5jIiwicGF0aEZyb21Eb3NzaWVyUGFybGVtZW50YWlyZVVpZCIsImRvc3NpZXJzRGlyIiwicGF0aEZyb21SZXVuaW9uVWlkIiwicmV1bmlvbnNEaXIiLCJzZXNzaW9uRGlyIiwiaWREaXIiLCJudW1lcm9NaWxsaW9uc0RpciIsInBhdGhGcm9tU2NydXRpblVpZCIsInNjcnV0aW5zRGlyIl0sInNvdXJjZXMiOlsiLi4vc3JjL2xvYWRlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8vIExvYWQgZGF0YSBmcm9tIGZpbGVzXG5cbmltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiXG5pbXBvcnQgZnMgZnJvbSBcImZzLWV4dHJhXCJcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcblxuZXhwb3J0IHsgRW5hYmxlZERhdGFzZXRzIH0gZnJvbSBcIi4vZGF0YXNldHNcIlxuaW1wb3J0IHsgZGF0YXNldHMsIEVuYWJsZWREYXRhc2V0cyB9IGZyb20gXCIuL2RhdGFzZXRzXCJcbmV4cG9ydCB7IHdhbGtEaXIgfSBmcm9tIFwiLi9maWxlX3N5c3RlbXNcIlxuaW1wb3J0IHsgd2Fsa0RpciB9IGZyb20gXCIuL2ZpbGVfc3lzdGVtc1wiXG5pbXBvcnQge1xuICBBY3RldXIsXG4gIENvbnZlcnQgYXMgQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQsXG4gIE9yZ2FuZSxcbiAgUGhvdG8sXG59IGZyb20gXCIuL3R5cGVzL2FjdGV1cnNfZXRfb3JnYW5lc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIEFnZW5kYXNDb252ZXJ0LCBSZXVuaW9uIH0gZnJvbSBcIi4vdHlwZXMvYWdlbmRhc1wiXG5pbXBvcnQgeyBBbWVuZGVtZW50LCBDb252ZXJ0IGFzIEFtZW5kZW1lbnRzQ29udmVydCB9IGZyb20gXCIuL3R5cGVzL2FtZW5kZW1lbnRzXCJcbmltcG9ydCB7XG4gIENvbnZlcnQgYXMgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQsXG4gIERvY3VtZW50LFxuICBEb3NzaWVyUGFybGVtZW50YWlyZSxcbn0gZnJvbSBcIi4vdHlwZXMvZG9zc2llcnNfbGVnaXNsYXRpZnNcIlxuaW1wb3J0IHsgTGVnaXNsYXR1cmUgfSBmcm9tIFwiLi90eXBlcy9sZWdpc2xhdHVyZXNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBTY3J1dGluc0NvbnZlcnQsIFNjcnV0aW4gfSBmcm9tIFwiLi90eXBlcy9zY3J1dGluc1wiXG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YSB7XG4gIHJlYWRvbmx5IGFjdGV1ckJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IEFjdGV1ciB9XG4gIHJlYWRvbmx5IGFtZW5kZW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBBbWVuZGVtZW50IH1cbiAgcmVhZG9ubHkgZG9jdW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb2N1bWVudCB9XG4gIHJlYWRvbmx5IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH1cbiAgcmVhZG9ubHkgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluOiB7XG4gICAgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmVcbiAgfVxuICByZWFkb25seSBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlIH1cbiAgcmVhZG9ubHkgb3JnYW5lQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogT3JnYW5lIH1cbiAgcmVhZG9ubHkgcGhvdG9CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBQaG90byB9XG4gIHJlYWRvbmx5IHJldW5pb25CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBSZXVuaW9uIH1cbiAgcmVhZG9ubHkgcmV1bmlvbnNCeURheTogeyBbZGF5OiBzdHJpbmddOiBSZXVuaW9uW10gfVxuICByZWFkb25seSByZXVuaW9uc0J5RG9zc2llclVpZDogeyBbZG9zc2llclVpZDogc3RyaW5nXTogUmV1bmlvbltdIH1cbiAgcmVhZG9ubHkgc2NydXRpbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFNjcnV0aW4gfVxufVxuXG5jb25zdCBkb2N1bWVudFVpZFJlZ2V4ID1cbiAgL14oQUNJTnxBTENOfEFWQ0V8QVZJU3xERUNMfEVUREl8TEVUVHxNRVNTfFBJT058UE5SRXxQUkpMfFJBUFB8UklORnxSSU9OKShBTnxTTikoUlxcZCspW0xTXShcXGQrKShCfEJUQXxCVEN8VEFQKShcXGQrKSgtLiopPyQvXG5jb25zdCBkb3NzaWVyVWlkUmVnZXggPSAvXkRMKFJcXGQrKShMXFxkKylOKFxcZCspJC9cbmNvbnN0IHJldW5pb25VaWRSZWdleCA9XG4gIC9eUlUoQU58Q0d8U04pKFJcXGQrKShMXFxkKykoW0FTXVxcZHs0fSkoSURDfElERkw/fElEUykoXFxkKykkL1xuY29uc3Qgc2NydXRpblVpZFJlZ2V4ID0gL15WVEFOKFJcXGQrKShMXFxkKylWKFxcZCspJC9cblxuLyoqIExvYWQgZGF0YSBmcm9tIHNwbGl0IGZpbGVzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRBc3NlbWJsZWVEYXRhKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGVuYWJsZWREYXRhc2V0czogRW5hYmxlZERhdGFzZXRzLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIHsgbG9nID0gZmFsc2UgfSA9IHt9LFxuKTogRGF0YSB7XG4gIGNvbnN0IGFjdGV1ckJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IEFjdGV1ciB9ID0ge31cbiAgY29uc3Qgb3JnYW5lQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogT3JnYW5lIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYWN0ZXVyc0V0T3JnYW5lcykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgICAgKVxuXG4gICAgICBmb3IgKGNvbnN0IGFjdGV1clNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIFtcImFjdGV1cnNcIl0pKSB7XG4gICAgICAgIGNvbnN0IGFjdGV1ckZpbGVuYW1lID0gYWN0ZXVyU3BsaXRQYXRoW2FjdGV1clNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIWFjdGV1ckZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFjdGV1ckZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLmFjdGV1clNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7YWN0ZXVyRmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhY3RldXJKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoYWN0ZXVyRmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGFjdGV1ciA9IEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LnRvQWN0ZXVyKGFjdGV1ckpzb24pXG4gICAgICAgIC8vIEtlZXAgdGhlIGZpcnN0IGV4aXN0aW5nIFwiYWN0ZXVyXCIsIGJlY2F1c2UgdGhlIGZpcnN0IHdyYXBwZXIgaXMgdGhlIG1vc3QgY29tcGxldGUuXG4gICAgICAgIGlmIChhY3RldXJCeVVpZFthY3RldXIudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYWN0ZXVyQnlVaWRbYWN0ZXVyLnVpZF0gPSBhY3RldXJcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IG9yZ2FuZVNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIFtcIm9yZ2FuZXNcIl0pKSB7XG4gICAgICAgIGNvbnN0IG9yZ2FuZUZpbGVuYW1lID0gb3JnYW5lU3BsaXRQYXRoW29yZ2FuZVNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIW9yZ2FuZUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9yZ2FuZUZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLm9yZ2FuZVNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7b3JnYW5lRmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcmdhbmVKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMob3JnYW5lRmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IG9yZ2FuZSA9IEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LnRvT3JnYW5lKG9yZ2FuZUpzb24pXG4gICAgICAgIC8vIEtlZXAgdGhlIGZpcnN0IGV4aXN0aW5nIFwib3JnYW5lXCIsIGJlY2F1c2UgdGhlIGZpcnN0IHdyYXBwZXIgaXMgdGhlIG1vc3QgY29tcGxldGUuXG4gICAgICAgIGlmIChvcmdhbmVCeVVpZFtvcmdhbmUudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgb3JnYW5lQnlVaWRbb3JnYW5lLnVpZF0gPSBvcmdhbmVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJldW5pb25CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBSZXVuaW9uIH0gPSB7fVxuICBjb25zdCByZXVuaW9uc0J5RGF5OiB7IFtkYXk6IHN0cmluZ106IFJldW5pb25bXSB9ID0ge31cbiAgY29uc3QgcmV1bmlvbnNCeURvc3NpZXJVaWQ6IHsgW2Rvc3NpZXJVaWQ6IHN0cmluZ106IFJldW5pb25bXSB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BZ2VuZGFzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFnZW5kYXMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICAgIClcbiAgICAgIGZvciAoY29uc3QgcmV1bmlvblNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIpKSB7XG4gICAgICAgIGNvbnN0IHJldW5pb25GaWxlbmFtZSA9IHJldW5pb25TcGxpdFBhdGhbcmV1bmlvblNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIXJldW5pb25GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXVuaW9uRmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4ucmV1bmlvblNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7cmV1bmlvbkZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmV1bmlvbkpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhyZXVuaW9uRmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IHJldW5pb24gPSBBZ2VuZGFzQ29udmVydC50b1JldW5pb24ocmV1bmlvbkpzb24pXG4gICAgICAgIGlmIChyZXVuaW9uQnlVaWRbcmV1bmlvbi51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXVuaW9uQnlVaWRbcmV1bmlvbi51aWRdID0gcmV1bmlvblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF5ID0gcmV1bmlvbi50aW1lc3RhbXBEZWJ1dC50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXVxuICAgICAgICBsZXQgcmV1bmlvbnNBdERheSA9IHJldW5pb25zQnlEYXlbZGF5XVxuICAgICAgICBpZiAocmV1bmlvbnNBdERheSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV1bmlvbnNBdERheSA9IHJldW5pb25zQnlEYXlbZGF5XSA9IFtdXG4gICAgICAgIH1cbiAgICAgICAgcmV1bmlvbnNBdERheS5wdXNoKHJldW5pb24pXG5cbiAgICAgICAgY29uc3Qgb2RqID0gcmV1bmlvbi5vZGpcbiAgICAgICAgaWYgKG9kaiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBwb2ludE9kaiBvZiBvZGoucG9pbnRzT2RqIHx8IFtdKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRvc3NpZXJMZWdpc2xhdGlmUmVmIG9mIHBvaW50T2RqLmRvc3NpZXJzTGVnaXNsYXRpZnNSZWZzIHx8XG4gICAgICAgICAgICAgIFtdKSB7XG4gICAgICAgICAgICAgIGxldCByZXVuaW9uc0F0RG9zc2llclVpZCA9XG4gICAgICAgICAgICAgICAgcmV1bmlvbnNCeURvc3NpZXJVaWRbZG9zc2llckxlZ2lzbGF0aWZSZWZdXG4gICAgICAgICAgICAgIGlmIChyZXVuaW9uc0F0RG9zc2llclVpZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV1bmlvbnNBdERvc3NpZXJVaWQgPSByZXVuaW9uc0J5RG9zc2llclVpZFtcbiAgICAgICAgICAgICAgICAgIGRvc3NpZXJMZWdpc2xhdGlmUmVmXG4gICAgICAgICAgICAgICAgXSA9IFtdXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV1bmlvbnNBdERvc3NpZXJVaWQucHVzaChyZXVuaW9uKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGFtZW5kZW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBBbWVuZGVtZW50IH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFtZW5kZW1lbnRzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFtZW5kZW1lbnRzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgICApXG5cbiAgICAgIGZvciAoY29uc3QgYW1lbmRlbWVudFNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIpKSB7XG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRGaWxlbmFtZSA9XG4gICAgICAgICAgYW1lbmRlbWVudFNwbGl0UGF0aFthbWVuZGVtZW50U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghYW1lbmRlbWVudEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5hbWVuZGVtZW50U3BsaXRQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHthbWVuZGVtZW50RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbWVuZGVtZW50SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGFtZW5kZW1lbnRGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgYW1lbmRlbWVudCA9IEFtZW5kZW1lbnRzQ29udmVydC50b0FtZW5kZW1lbnQoYW1lbmRlbWVudEpzb24pXG4gICAgICAgIGlmIChhbWVuZGVtZW50QnlVaWRbYW1lbmRlbWVudC51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhbWVuZGVtZW50QnlVaWRbYW1lbmRlbWVudC51aWRdID0gYW1lbmRlbWVudFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZG9jdW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb2N1bWVudCB9ID0ge31cbiAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluOiB7XG4gICAgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmVcbiAgfSA9IHt9XG4gIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH0gPSB7fVxuICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuZG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgICAgKVxuXG4gICAgICBmb3IgKGNvbnN0IGRvY3VtZW50U3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpciwgW1wiZG9jdW1lbnRzXCJdKSkge1xuICAgICAgICBjb25zdCBkb2N1bWVudEZpbGVuYW1lID0gZG9jdW1lbnRTcGxpdFBhdGhbZG9jdW1lbnRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFkb2N1bWVudEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvY3VtZW50RmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uZG9jdW1lbnRTcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2RvY3VtZW50RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb2N1bWVudEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhkb2N1bWVudEZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBkb2N1bWVudCA9IERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LnRvRG9jdW1lbnQoZG9jdW1lbnRKc29uKVxuICAgICAgICBpZiAoZG9jdW1lbnRCeVVpZFtkb2N1bWVudC51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkb2N1bWVudEJ5VWlkW2RvY3VtZW50LnVpZF0gPSBkb2N1bWVudFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgZG9zc2llclNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIFtcImRvc3NpZXJzXCJdKSkge1xuICAgICAgICBjb25zdCBkb3NzaWVyRmlsZW5hbWUgPSBkb3NzaWVyU3BsaXRQYXRoW2Rvc3NpZXJTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFkb3NzaWVyRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9zc2llckZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLmRvc3NpZXJTcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2Rvc3NpZXJGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvc3NpZXJKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoZG9zc2llckZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBkb3NzaWVyID1cbiAgICAgICAgICBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC50b0Rvc3NpZXJQYXJsZW1lbnRhaXJlKGRvc3NpZXJKc29uKVxuICAgICAgICBjb25zdCB0aXRyZURvc3NpZXIgPSBkb3NzaWVyLnRpdHJlRG9zc2llclxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGl0cmVEb3NzaWVyLnNlbmF0Q2hlbWluICYmXG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluW3RpdHJlRG9zc2llci5zZW5hdENoZW1pbl0gPT09XG4gICAgICAgICAgICB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluW3RpdHJlRG9zc2llci5zZW5hdENoZW1pbl0gPSBkb3NzaWVyXG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRpdHJlRG9zc2llci50aXRyZUNoZW1pbiAmJlxuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pblt0aXRyZURvc3NpZXIudGl0cmVDaGVtaW5dID09PVxuICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pblt0aXRyZURvc3NpZXIudGl0cmVDaGVtaW5dID0gZG9zc2llclxuICAgICAgICB9XG4gICAgICAgIGlmIChkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkW2Rvc3NpZXIudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZFtkb3NzaWVyLnVpZF0gPSBkb3NzaWVyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsZXQgcGhvdG9CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBQaG90byB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5QaG90b3MpIHtcbiAgICB7XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgYHBob3Rvc19kZXB1dGVzXyR7XG4gICAgICAgICAgLy8gVE9ETzogSGFuZGxlIExlZ2lzbGF0dXJlLkFsbC5cbiAgICAgICAgICBsZWdpc2xhdHVyZSA9PT0gTGVnaXNsYXR1cmUuQWxsID8gTGVnaXNsYXR1cmUuU2VpemUgOiBsZWdpc2xhdHVyZVxuICAgICAgICB9YCxcbiAgICAgICAgXCJkZXB1dGVzLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKGpzb25GaWxlUGF0aCkpIHtcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgICAgT2JqZWN0LmFzc2lnbihwaG90b0J5VWlkLCBKU09OLnBhcnNlKGpzb24pKVxuICAgICAgfSBlbHNlIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYElnbm9yaW5nIG1pc3NpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB7XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgXCJwaG90b3Nfc2VuYXRldXJzXCIsXG4gICAgICAgIFwic2VuYXRldXJzLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKGpzb25GaWxlUGF0aCkpIHtcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgICAgT2JqZWN0LmFzc2lnbihwaG90b0J5VWlkLCBKU09OLnBhcnNlKGpzb24pKVxuICAgICAgfSBlbHNlIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYElnbm9yaW5nIG1pc3NpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBzY3J1dGluQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogU2NydXRpbiB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5TY3J1dGlucykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5zY3J1dGlucykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgICAgKVxuXG4gICAgICBmb3IgKGNvbnN0IHNjcnV0aW5TcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyKSkge1xuICAgICAgICBjb25zdCBzY3J1dGluRmlsZW5hbWUgPSBzY3J1dGluU3BsaXRQYXRoW3NjcnV0aW5TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFzY3J1dGluRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2NydXRpbkZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLnNjcnV0aW5TcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke3NjcnV0aW5GaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNjcnV0aW5Kc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoc2NydXRpbkZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBzY3J1dGluID0gU2NydXRpbnNDb252ZXJ0LnRvU2NydXRpbihzY3J1dGluSnNvbilcbiAgICAgICAgaWYgKHNjcnV0aW5CeVVpZFtzY3J1dGluLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHNjcnV0aW5CeVVpZFtzY3J1dGluLnVpZF0gPSBzY3J1dGluXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGFjdGV1ckJ5VWlkLFxuICAgIGFtZW5kZW1lbnRCeVVpZCxcbiAgICBkb2N1bWVudEJ5VWlkLFxuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pbixcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW4sXG4gICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZCxcbiAgICBvcmdhbmVCeVVpZCxcbiAgICBwaG90b0J5VWlkLFxuICAgIHJldW5pb25CeVVpZCxcbiAgICByZXVuaW9uc0J5RGF5LFxuICAgIHJldW5pb25zQnlEb3NzaWVyVWlkLFxuICAgIHNjcnV0aW5CeVVpZCxcbiAgfVxufVxuXG4vKiogTG9hZCBkYXRhIGZyb20gYmlnIG1vbm9seXRpYyBmaWxlcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQXNzZW1ibGVlRGF0YUZyb21CaWdGaWxlcyhcbiAgZGF0YURpcjogc3RyaW5nLFxuICBlbmFibGVkRGF0YXNldHM6IEVuYWJsZWREYXRhc2V0cyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IERhdGEge1xuICBjb25zdCBhY3RldXJCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBBY3RldXIgfSA9IHt9XG4gIGNvbnN0IG9yZ2FuZUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IE9yZ2FuZSB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICBjb25zdCBhY3RldXJzRXRPcmdhbmVzID0gQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQudG9BY3RldXJzRXRPcmdhbmVzKGpzb24pXG4gICAgICBmb3IgKGNvbnN0IGFjdGV1ciBvZiBhY3RldXJzRXRPcmdhbmVzLmFjdGV1cnMpIHtcbiAgICAgICAgLy8gS2VlcCB0aGUgZmlyc3QgZXhpc3RpbmcgXCJhY3RldXJcIiwgYmVjYXVzZSB0aGUgZmlyc3Qgd3JhcHBlciBpcyB0aGUgbW9zdCBjb21wbGV0ZS5cbiAgICAgICAgaWYgKGFjdGV1ckJ5VWlkW2FjdGV1ci51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhY3RldXJCeVVpZFthY3RldXIudWlkXSA9IGFjdGV1clxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IG9yZ2FuZSBvZiBhY3RldXJzRXRPcmdhbmVzLm9yZ2FuZXMpIHtcbiAgICAgICAgLy8gS2VlcCB0aGUgZmlyc3QgZXhpc3RpbmcgXCJvcmdhbmVcIiwgYmVjYXVzZSB0aGUgZmlyc3Qgd3JhcHBlciBpcyB0aGUgbW9zdCBjb21wbGV0ZS5cbiAgICAgICAgaWYgKG9yZ2FuZUJ5VWlkW29yZ2FuZS51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBvcmdhbmVCeVVpZFtvcmdhbmUudWlkXSA9IG9yZ2FuZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcmV1bmlvbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFJldW5pb24gfSA9IHt9XG4gIGNvbnN0IHJldW5pb25zQnlEYXk6IHsgW2RheTogc3RyaW5nXTogUmV1bmlvbltdIH0gPSB7fVxuICBjb25zdCByZXVuaW9uc0J5RG9zc2llclVpZDogeyBbZG9zc2llclVpZDogc3RyaW5nXTogUmV1bmlvbltdIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFnZW5kYXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYWdlbmRhcykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZS5qc29uXCIpLFxuICAgICAgKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgIGNvbnN0IGFnZW5kYXMgPSBBZ2VuZGFzQ29udmVydC50b0FnZW5kYXMoanNvbilcbiAgICAgIGZvciAoY29uc3QgcmV1bmlvbiBvZiBhZ2VuZGFzLnJldW5pb25zKSB7XG4gICAgICAgIGlmIChyZXVuaW9uQnlVaWRbcmV1bmlvbi51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXVuaW9uQnlVaWRbcmV1bmlvbi51aWRdID0gcmV1bmlvblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF5ID0gcmV1bmlvbi50aW1lc3RhbXBEZWJ1dC50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXVxuICAgICAgICBsZXQgcmV1bmlvbnNBdERheSA9IHJldW5pb25zQnlEYXlbZGF5XVxuICAgICAgICBpZiAocmV1bmlvbnNBdERheSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV1bmlvbnNBdERheSA9IHJldW5pb25zQnlEYXlbZGF5XSA9IFtdXG4gICAgICAgIH1cbiAgICAgICAgcmV1bmlvbnNBdERheS5wdXNoKHJldW5pb24pXG5cbiAgICAgICAgY29uc3Qgb2RqID0gcmV1bmlvbi5vZGpcbiAgICAgICAgaWYgKG9kaiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBwb2ludE9kaiBvZiBvZGoucG9pbnRzT2RqIHx8IFtdKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRvc3NpZXJMZWdpc2xhdGlmUmVmIG9mIHBvaW50T2RqLmRvc3NpZXJzTGVnaXNsYXRpZnNSZWZzIHx8XG4gICAgICAgICAgICAgIFtdKSB7XG4gICAgICAgICAgICAgIGxldCByZXVuaW9uc0F0RG9zc2llclVpZCA9XG4gICAgICAgICAgICAgICAgcmV1bmlvbnNCeURvc3NpZXJVaWRbZG9zc2llckxlZ2lzbGF0aWZSZWZdXG4gICAgICAgICAgICAgIGlmIChyZXVuaW9uc0F0RG9zc2llclVpZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV1bmlvbnNBdERvc3NpZXJVaWQgPSByZXVuaW9uc0J5RG9zc2llclVpZFtcbiAgICAgICAgICAgICAgICAgIGRvc3NpZXJMZWdpc2xhdGlmUmVmXG4gICAgICAgICAgICAgICAgXSA9IFtdXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV1bmlvbnNBdERvc3NpZXJVaWQucHVzaChyZXVuaW9uKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGFtZW5kZW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBBbWVuZGVtZW50IH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFtZW5kZW1lbnRzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFtZW5kZW1lbnRzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgY29uc3QgYW1lbmRlbWVudHMgPSBBbWVuZGVtZW50c0NvbnZlcnQudG9BbWVuZGVtZW50cyhqc29uKVxuICAgICAgZm9yIChjb25zdCB0ZXh0ZUxlZ2lzbGF0aWYgb2YgYW1lbmRlbWVudHMudGV4dGVzTGVnaXNsYXRpZnMpIHtcbiAgICAgICAgZm9yIChjb25zdCBhbWVuZGVtZW50IG9mIHRleHRlTGVnaXNsYXRpZi5hbWVuZGVtZW50cykge1xuICAgICAgICAgIGlmIChhbWVuZGVtZW50QnlVaWRbYW1lbmRlbWVudC51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFtZW5kZW1lbnRCeVVpZFthbWVuZGVtZW50LnVpZF0gPSBhbWVuZGVtZW50XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZG9jdW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb2N1bWVudCB9ID0ge31cbiAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluOiB7XG4gICAgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmVcbiAgfSA9IHt9XG4gIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH0gPSB7fVxuICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuZG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZS5qc29uXCIpLFxuICAgICAgKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgIGNvbnN0IGRvc3NpZXJzTGVnaXNsYXRpZnMgPVxuICAgICAgICBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC50b0Rvc3NpZXJzTGVnaXNsYXRpZnMoanNvbilcbiAgICAgIGZvciAoY29uc3QgZG9jdW1lbnQgb2YgZG9zc2llcnNMZWdpc2xhdGlmcy50ZXh0ZXNMZWdpc2xhdGlmcykge1xuICAgICAgICBpZiAoZG9jdW1lbnRCeVVpZFtkb2N1bWVudC51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkb2N1bWVudEJ5VWlkW2RvY3VtZW50LnVpZF0gPSBkb2N1bWVudFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IGRvc3NpZXIgb2YgZG9zc2llcnNMZWdpc2xhdGlmcy5kb3NzaWVyc1BhcmxlbWVudGFpcmVzKSB7XG4gICAgICAgIGNvbnN0IHRpdHJlRG9zc2llciA9IGRvc3NpZXIudGl0cmVEb3NzaWVyXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aXRyZURvc3NpZXIuc2VuYXRDaGVtaW4gJiZcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW5bdGl0cmVEb3NzaWVyLnNlbmF0Q2hlbWluXSA9PT1cbiAgICAgICAgICAgIHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW5bdGl0cmVEb3NzaWVyLnNlbmF0Q2hlbWluXSA9IGRvc3NpZXJcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGl0cmVEb3NzaWVyLnRpdHJlQ2hlbWluICYmXG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluW3RpdHJlRG9zc2llci50aXRyZUNoZW1pbl0gPT09XG4gICAgICAgICAgICB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluW3RpdHJlRG9zc2llci50aXRyZUNoZW1pbl0gPSBkb3NzaWVyXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWRbZG9zc2llci51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkW2Rvc3NpZXIudWlkXSA9IGRvc3NpZXJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHBob3RvQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUGhvdG8gfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuUGhvdG9zKSB7XG4gICAgY29uc3QgcGhvdG9CeVVpZCA9IHt9XG5cbiAgICB7XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgYHBob3Rvc19kZXB1dGVzXyR7XG4gICAgICAgICAgLy8gVE9ETzogSGFuZGxlIExlZ2lzbGF0dXJlLkFsbC5cbiAgICAgICAgICBsZWdpc2xhdHVyZSA9PT0gTGVnaXNsYXR1cmUuQWxsID8gTGVnaXNsYXR1cmUuU2VpemUgOiBsZWdpc2xhdHVyZVxuICAgICAgICB9YCxcbiAgICAgICAgXCJkZXB1dGVzLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKGpzb25GaWxlUGF0aCkpIHtcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgICAgT2JqZWN0LmFzc2lnbihwaG90b0J5VWlkLCBKU09OLnBhcnNlKGpzb24pKVxuICAgICAgfSBlbHNlIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYElnbm9yaW5nIG1pc3NpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB7XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgXCJwaG90b3Nfc2VuYXRldXJzXCIsXG4gICAgICAgIFwic2VuYXRldXJzLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKGpzb25GaWxlUGF0aCkpIHtcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgICAgT2JqZWN0LmFzc2lnbihwaG90b0J5VWlkLCBKU09OLnBhcnNlKGpzb24pKVxuICAgICAgfSBlbHNlIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYElnbm9yaW5nIG1pc3NpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBzY3J1dGluQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogU2NydXRpbiB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5TY3J1dGlucykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5zY3J1dGlucykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZS5qc29uXCIpLFxuICAgICAgKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgIGNvbnN0IHNjcnV0aW5zID0gU2NydXRpbnNDb252ZXJ0LnRvU2NydXRpbnMoanNvbilcbiAgICAgIGZvciAoY29uc3Qgc2NydXRpbiBvZiBzY3J1dGlucy5zY3J1dGlucykge1xuICAgICAgICBpZiAoc2NydXRpbkJ5VWlkW3NjcnV0aW4udWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2NydXRpbkJ5VWlkW3NjcnV0aW4udWlkXSA9IHNjcnV0aW5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYWN0ZXVyQnlVaWQsXG4gICAgYW1lbmRlbWVudEJ5VWlkLFxuICAgIGRvY3VtZW50QnlVaWQsXG4gICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluLFxuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pbixcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkLFxuICAgIG9yZ2FuZUJ5VWlkLFxuICAgIHBob3RvQnlVaWQsXG4gICAgcmV1bmlvbkJ5VWlkLFxuICAgIHJldW5pb25zQnlEYXksXG4gICAgcmV1bmlvbnNCeURvc3NpZXJVaWQsXG4gICAgc2NydXRpbkJ5VWlkLFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoRnJvbURvY3VtZW50VWlkKGRvY3VtZW50c0Rpcjogc3RyaW5nLCB1aWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG1hdGNoID0gZG9jdW1lbnRVaWRSZWdleC5leGVjKHVpZClcbiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKFxuICAgIG1hdGNoLFxuICAgIG51bGwsXG4gICAgYFVuZXhwZWN0ZWQgc3RydWN0dXJlIGZvciBkb2N1bWVudCBVSUQ6ICR7dWlkfWAsXG4gIClcbiAgY29uc3QgZG9jdW1lbnRUeXBlID0gcGF0aC5qb2luKGRvY3VtZW50c0RpciwgbWF0Y2ghWzFdKVxuICBjb25zdCBjaGFtYnJlRGlyID0gcGF0aC5qb2luKGRvY3VtZW50VHlwZSwgbWF0Y2ghWzJdKVxuICBjb25zdCByZXB1YmxpcXVlRGlyID0gcGF0aC5qb2luKGNoYW1icmVEaXIsIG1hdGNoIVszXSlcbiAgY29uc3QgbGVnaXNsYXR1cmVEaXIgPSBwYXRoLmpvaW4ocmVwdWJsaXF1ZURpciwgbWF0Y2ghWzRdKVxuICBjb25zdCBldGF0RGlyID0gcGF0aC5qb2luKGxlZ2lzbGF0dXJlRGlyLCBtYXRjaCFbNV0pXG4gIGxldCBudW1lcm8gPSBcIjAwMDAwMFwiICsgbWF0Y2ghWzZdXG4gIG51bWVybyA9IG51bWVyby5zdWJzdHIobnVtZXJvLmxlbmd0aCAtIDYpXG4gIGNvbnN0IG51bWVyb01pbGxpZXJzRGlyID0gcGF0aC5qb2luKGV0YXREaXIsIG51bWVyby5zdWJzdHIoMCwgMykpXG4gIGZzLmVuc3VyZURpclN5bmMobnVtZXJvTWlsbGllcnNEaXIpXG4gIHJldHVybiBwYXRoLmpvaW4obnVtZXJvTWlsbGllcnNEaXIsIHVpZClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhGcm9tRG9zc2llclBhcmxlbWVudGFpcmVVaWQoXG4gIGRvc3NpZXJzRGlyOiBzdHJpbmcsXG4gIHVpZDogc3RyaW5nLFxuKTogc3RyaW5nIHtcbiAgY29uc3QgbWF0Y2ggPSBkb3NzaWVyVWlkUmVnZXguZXhlYyh1aWQpXG4gIGFzc2VydC5ub3RTdHJpY3RFcXVhbChcbiAgICBtYXRjaCxcbiAgICBudWxsLFxuICAgIGBVbmV4cGVjdGVkIHN0cnVjdHVyZSBmb3IgZG9zc2llciBwYXJsZW1lbnRhaXJlIFVJRDogJHt1aWR9YCxcbiAgKVxuICBjb25zdCByZXB1YmxpcXVlRGlyID0gcGF0aC5qb2luKGRvc3NpZXJzRGlyLCBtYXRjaCFbMV0pXG4gIGNvbnN0IGxlZ2lzbGF0dXJlRGlyID0gcGF0aC5qb2luKHJlcHVibGlxdWVEaXIsIG1hdGNoIVsyXSlcbiAgbGV0IG51bWVybyA9IFwiMDAwMDAwXCIgKyBtYXRjaCFbM11cbiAgbnVtZXJvID0gbnVtZXJvLnN1YnN0cihudW1lcm8ubGVuZ3RoIC0gNilcbiAgY29uc3QgbnVtZXJvTWlsbGllcnNEaXIgPSBwYXRoLmpvaW4obGVnaXNsYXR1cmVEaXIsIG51bWVyby5zdWJzdHIoMCwgMykpXG4gIGZzLmVuc3VyZURpclN5bmMobnVtZXJvTWlsbGllcnNEaXIpXG4gIHJldHVybiBwYXRoLmpvaW4obnVtZXJvTWlsbGllcnNEaXIsIHVpZClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhGcm9tUmV1bmlvblVpZChyZXVuaW9uc0Rpcjogc3RyaW5nLCB1aWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG1hdGNoID0gcmV1bmlvblVpZFJlZ2V4LmV4ZWModWlkKVxuICBhc3NlcnQubm90U3RyaWN0RXF1YWwoXG4gICAgbWF0Y2gsXG4gICAgbnVsbCxcbiAgICBgVW5leHBlY3RlZCBzdHJ1Y3R1cmUgZm9yIHJldW5pb24gVUlEOiAke3VpZH1gLFxuICApXG4gIGNvbnN0IGNoYW1icmVEaXIgPSBwYXRoLmpvaW4ocmV1bmlvbnNEaXIsIG1hdGNoIVsxXSlcbiAgY29uc3QgcmVwdWJsaXF1ZURpciA9IHBhdGguam9pbihjaGFtYnJlRGlyLCBtYXRjaCFbMl0pXG4gIGNvbnN0IGxlZ2lzbGF0dXJlRGlyID0gcGF0aC5qb2luKHJlcHVibGlxdWVEaXIsIG1hdGNoIVszXSlcbiAgY29uc3Qgc2Vzc2lvbkRpciA9IHBhdGguam9pbihsZWdpc2xhdHVyZURpciwgbWF0Y2ghWzRdKVxuICBjb25zdCBpZERpciA9IHBhdGguam9pbihzZXNzaW9uRGlyLCBtYXRjaCFbNV0pXG4gIGxldCBudW1lcm8gPSBcIjAwMDAwMDAwMFwiICsgbWF0Y2ghWzZdXG4gIG51bWVybyA9IG51bWVyby5zdWJzdHIobnVtZXJvLmxlbmd0aCAtIDkpXG4gIGNvbnN0IG51bWVyb01pbGxpb25zRGlyID0gcGF0aC5qb2luKGlkRGlyLCBudW1lcm8uc3Vic3RyKDAsIDMpKVxuICBjb25zdCBudW1lcm9NaWxsaWVyc0RpciA9IHBhdGguam9pbihudW1lcm9NaWxsaW9uc0RpciwgbnVtZXJvLnN1YnN0cigzLCAzKSlcbiAgZnMuZW5zdXJlRGlyU3luYyhudW1lcm9NaWxsaWVyc0RpcilcbiAgcmV0dXJuIHBhdGguam9pbihudW1lcm9NaWxsaWVyc0RpciwgdWlkKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aEZyb21TY3J1dGluVWlkKHNjcnV0aW5zRGlyOiBzdHJpbmcsIHVpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgbWF0Y2ggPSBzY3J1dGluVWlkUmVnZXguZXhlYyh1aWQpXG4gIGFzc2VydC5ub3RTdHJpY3RFcXVhbChcbiAgICBtYXRjaCxcbiAgICBudWxsLFxuICAgIGBVbmV4cGVjdGVkIHN0cnVjdHVyZSBmb3Igc2NydXRpbiBVSUQ6ICR7dWlkfWAsXG4gIClcbiAgY29uc3QgcmVwdWJsaXF1ZURpciA9IHBhdGguam9pbihzY3J1dGluc0RpciwgbWF0Y2ghWzFdKVxuICBjb25zdCBsZWdpc2xhdHVyZURpciA9IHBhdGguam9pbihyZXB1YmxpcXVlRGlyLCBtYXRjaCFbMl0pXG4gIGxldCBudW1lcm8gPSBcIjAwMDAwMFwiICsgbWF0Y2ghWzNdXG4gIG51bWVybyA9IG51bWVyby5zdWJzdHIobnVtZXJvLmxlbmd0aCAtIDYpXG4gIGNvbnN0IG51bWVyb01pbGxpZXJzRGlyID0gcGF0aC5qb2luKGxlZ2lzbGF0dXJlRGlyLCBudW1lcm8uc3Vic3RyKDAsIDMpKVxuICBmcy5lbnN1cmVEaXJTeW5jKG51bWVyb01pbGxpZXJzRGlyKVxuICByZXR1cm4gcGF0aC5qb2luKG51bWVyb01pbGxpZXJzRGlyLCB1aWQpXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBTUE7O0FBQ0E7O0FBQ0E7O0FBS0E7O0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXFCQSxJQUFNQSxnQkFBZ0IsR0FDcEIsMkhBREY7QUFFQSxJQUFNQyxlQUFlLEdBQUcsd0JBQXhCO0FBQ0EsSUFBTUMsZUFBZSxHQUNuQiwyREFERjtBQUVBLElBQU1DLGVBQWUsR0FBRywwQkFBeEI7QUFFQTs7QUFDTyxTQUFTQyxpQkFBVCxDQUNMQyxPQURLLEVBRUxDLGVBRkssRUFHTEMsV0FISyxFQUtDO0VBQUEsK0VBRFksRUFDWjtFQUFBLG9CQURKQyxHQUNJO0VBQUEsSUFESkEsR0FDSSx5QkFERSxLQUNGOztFQUNO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
|
|
864
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkb2N1bWVudFVpZFJlZ2V4IiwiZG9zc2llclVpZFJlZ2V4IiwicmV1bmlvblVpZFJlZ2V4Iiwic2NydXRpblVpZFJlZ2V4IiwibG9hZEFzc2VtYmxlZURhdGEiLCJkYXRhRGlyIiwiZW5hYmxlZERhdGFzZXRzIiwibGVnaXNsYXR1cmUiLCJsb2ciLCJhY3RldXJCeVVpZCIsIm9yZ2FuZUJ5VWlkIiwiRW5hYmxlZERhdGFzZXRzIiwiQWN0ZXVyc0V0T3JnYW5lcyIsImRhdGFzZXRzIiwiYWN0ZXVyc0V0T3JnYW5lcyIsImRhdGFzZXQiLCJpZ25vcmVGb3JXZWIiLCJMZWdpc2xhdHVyZSIsIkFsbCIsImRhdGFzZXREaXIiLCJwYXRoIiwiam9pbiIsImZpbGVuYW1lIiwicmVwbGFjZSIsIndhbGtEaXIiLCJhY3RldXJTcGxpdFBhdGgiLCJhY3RldXJGaWxlbmFtZSIsImxlbmd0aCIsImVuZHNXaXRoIiwiYWN0ZXVyRmlsZVBhdGgiLCJjb25zb2xlIiwiYWN0ZXVySnNvbiIsImZzIiwicmVhZEZpbGVTeW5jIiwiZW5jb2RpbmciLCJhY3RldXIiLCJBY3RldXJzRXRPcmdhbmVzQ29udmVydCIsInRvQWN0ZXVyIiwidWlkIiwidW5kZWZpbmVkIiwib3JnYW5lU3BsaXRQYXRoIiwib3JnYW5lRmlsZW5hbWUiLCJvcmdhbmVGaWxlUGF0aCIsIm9yZ2FuZUpzb24iLCJvcmdhbmUiLCJ0b09yZ2FuZSIsInJldW5pb25CeVVpZCIsInJldW5pb25zQnlEYXkiLCJyZXVuaW9uc0J5RG9zc2llclVpZCIsIkFnZW5kYXMiLCJhZ2VuZGFzIiwicmV1bmlvblNwbGl0UGF0aCIsInJldW5pb25GaWxlbmFtZSIsInJldW5pb25GaWxlUGF0aCIsInJldW5pb25Kc29uIiwicmV1bmlvbiIsIkFnZW5kYXNDb252ZXJ0IiwidG9SZXVuaW9uIiwiZGF5IiwidGltZXN0YW1wRGVidXQiLCJ0b0lTT1N0cmluZyIsInNwbGl0IiwicmV1bmlvbnNBdERheSIsInB1c2giLCJvZGoiLCJwb2ludHNPZGoiLCJwb2ludE9kaiIsImRvc3NpZXJzTGVnaXNsYXRpZnNSZWZzIiwiZG9zc2llckxlZ2lzbGF0aWZSZWYiLCJyZXVuaW9uc0F0RG9zc2llclVpZCIsImFtZW5kZW1lbnRCeVVpZCIsIkFtZW5kZW1lbnRzIiwiYW1lbmRlbWVudHMiLCJhbWVuZGVtZW50U3BsaXRQYXRoIiwiYW1lbmRlbWVudEZpbGVuYW1lIiwiYW1lbmRlbWVudEZpbGVQYXRoIiwiYW1lbmRlbWVudEpzb24iLCJhbWVuZGVtZW50IiwiQW1lbmRlbWVudHNDb252ZXJ0IiwidG9BbWVuZGVtZW50IiwiZG9jdW1lbnRCeVVpZCIsImRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pbiIsImRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pbiIsImRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWQiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9zc2llcnNMZWdpc2xhdGlmcyIsImRvY3VtZW50U3BsaXRQYXRoIiwiZG9jdW1lbnRGaWxlbmFtZSIsImRvY3VtZW50RmlsZVBhdGgiLCJkb2N1bWVudEpzb24iLCJkb2N1bWVudCIsIkRvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0IiwidG9Eb2N1bWVudCIsImRvc3NpZXJTcGxpdFBhdGgiLCJkb3NzaWVyRmlsZW5hbWUiLCJkb3NzaWVyRmlsZVBhdGgiLCJkb3NzaWVySnNvbiIsImRvc3NpZXIiLCJ0b0Rvc3NpZXJQYXJsZW1lbnRhaXJlIiwidGl0cmVEb3NzaWVyIiwic2VuYXRDaGVtaW4iLCJ0aXRyZUNoZW1pbiIsInBob3RvQnlVaWQiLCJQaG90b3MiLCJqc29uRmlsZVBhdGgiLCJTZWl6ZSIsImV4aXN0c1N5bmMiLCJqc29uIiwiT2JqZWN0IiwiYXNzaWduIiwiSlNPTiIsInBhcnNlIiwic2NydXRpbkJ5VWlkIiwiU2NydXRpbnMiLCJzY3J1dGlucyIsInNjcnV0aW5TcGxpdFBhdGgiLCJzY3J1dGluRmlsZW5hbWUiLCJzY3J1dGluRmlsZVBhdGgiLCJzY3J1dGluSnNvbiIsInNjcnV0aW4iLCJTY3J1dGluc0NvbnZlcnQiLCJ0b1NjcnV0aW4iLCJsb2FkQXNzZW1ibGVlRGF0YUZyb21CaWdGaWxlcyIsInRvQWN0ZXVyc0V0T3JnYW5lcyIsImFjdGV1cnMiLCJvcmdhbmVzIiwidG9BZ2VuZGFzIiwicmV1bmlvbnMiLCJ0b0FtZW5kZW1lbnRzIiwidGV4dGVzTGVnaXNsYXRpZnMiLCJ0ZXh0ZUxlZ2lzbGF0aWYiLCJ0b0Rvc3NpZXJzTGVnaXNsYXRpZnMiLCJkb3NzaWVyc1BhcmxlbWVudGFpcmVzIiwidG9TY3J1dGlucyIsInBhdGhGcm9tRG9jdW1lbnRVaWQiLCJkb2N1bWVudHNEaXIiLCJtYXRjaCIsImV4ZWMiLCJhc3NlcnQiLCJub3RTdHJpY3RFcXVhbCIsImRvY3VtZW50VHlwZSIsImNoYW1icmVEaXIiLCJyZXB1YmxpcXVlRGlyIiwibGVnaXNsYXR1cmVEaXIiLCJldGF0RGlyIiwibnVtZXJvIiwic3Vic3RyIiwibnVtZXJvTWlsbGllcnNEaXIiLCJlbnN1cmVEaXJTeW5jIiwicGF0aEZyb21Eb3NzaWVyUGFybGVtZW50YWlyZVVpZCIsImRvc3NpZXJzRGlyIiwicGF0aEZyb21SZXVuaW9uVWlkIiwicmV1bmlvbnNEaXIiLCJzZXNzaW9uRGlyIiwiaWREaXIiLCJudW1lcm9NaWxsaW9uc0RpciIsInBhdGhGcm9tU2NydXRpblVpZCIsInNjcnV0aW5zRGlyIl0sInNvdXJjZXMiOlsiLi4vc3JjL2xvYWRlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8vIExvYWQgZGF0YSBmcm9tIGZpbGVzXG5cbmltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiXG5pbXBvcnQgZnMgZnJvbSBcImZzLWV4dHJhXCJcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcblxuZXhwb3J0IHsgRW5hYmxlZERhdGFzZXRzIH0gZnJvbSBcIi4vZGF0YXNldHNcIlxuaW1wb3J0IHsgZGF0YXNldHMsIEVuYWJsZWREYXRhc2V0cyB9IGZyb20gXCIuL2RhdGFzZXRzXCJcbmV4cG9ydCB7IHdhbGtEaXIgfSBmcm9tIFwiLi9maWxlX3N5c3RlbXNcIlxuaW1wb3J0IHsgd2Fsa0RpciB9IGZyb20gXCIuL2ZpbGVfc3lzdGVtc1wiXG5pbXBvcnQge1xuICBBY3RldXIsXG4gIENvbnZlcnQgYXMgQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQsXG4gIE9yZ2FuZSxcbiAgUGhvdG8sXG59IGZyb20gXCIuL3R5cGVzL2FjdGV1cnNfZXRfb3JnYW5lc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIEFnZW5kYXNDb252ZXJ0LCBSZXVuaW9uIH0gZnJvbSBcIi4vdHlwZXMvYWdlbmRhc1wiXG5pbXBvcnQgeyBBbWVuZGVtZW50LCBDb252ZXJ0IGFzIEFtZW5kZW1lbnRzQ29udmVydCB9IGZyb20gXCIuL3R5cGVzL2FtZW5kZW1lbnRzXCJcbmltcG9ydCB7XG4gIENvbnZlcnQgYXMgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQsXG4gIERvY3VtZW50LFxuICBEb3NzaWVyUGFybGVtZW50YWlyZSxcbn0gZnJvbSBcIi4vdHlwZXMvZG9zc2llcnNfbGVnaXNsYXRpZnNcIlxuaW1wb3J0IHsgTGVnaXNsYXR1cmUgfSBmcm9tIFwiLi90eXBlcy9sZWdpc2xhdHVyZXNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBTY3J1dGluc0NvbnZlcnQsIFNjcnV0aW4gfSBmcm9tIFwiLi90eXBlcy9zY3J1dGluc1wiXG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YSB7XG4gIHJlYWRvbmx5IGFjdGV1ckJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IEFjdGV1ciB9XG4gIHJlYWRvbmx5IGFtZW5kZW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBBbWVuZGVtZW50IH1cbiAgcmVhZG9ubHkgZG9jdW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb2N1bWVudCB9XG4gIHJlYWRvbmx5IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH1cbiAgcmVhZG9ubHkgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluOiB7XG4gICAgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmVcbiAgfVxuICByZWFkb25seSBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlIH1cbiAgcmVhZG9ubHkgb3JnYW5lQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogT3JnYW5lIH1cbiAgcmVhZG9ubHkgcGhvdG9CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBQaG90byB9XG4gIHJlYWRvbmx5IHJldW5pb25CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBSZXVuaW9uIH1cbiAgcmVhZG9ubHkgcmV1bmlvbnNCeURheTogeyBbZGF5OiBzdHJpbmddOiBSZXVuaW9uW10gfVxuICByZWFkb25seSByZXVuaW9uc0J5RG9zc2llclVpZDogeyBbZG9zc2llclVpZDogc3RyaW5nXTogUmV1bmlvbltdIH1cbiAgcmVhZG9ubHkgc2NydXRpbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFNjcnV0aW4gfVxufVxuXG5jb25zdCBkb2N1bWVudFVpZFJlZ2V4ID1cbiAgL14oQUNJTnxBTENOfEFWQ0V8QVZJU3xERUNMfEVUREl8TEVUVHxNRVNTfFBJT058UE5SRXxQUkpMfFJBUFB8UklORnxSSU9OKShBTnxTTikoUlxcZCspW0xTXShcXGQrKShCfEJUQXxCVEN8VEFQKShcXGQrKSgtLiopPyQvXG5jb25zdCBkb3NzaWVyVWlkUmVnZXggPSAvXkRMKFJcXGQrKShMXFxkKylOKFxcZCspJC9cbmNvbnN0IHJldW5pb25VaWRSZWdleCA9XG4gIC9eUlUoQU58Q0d8U04pKFJcXGQrKShMXFxkKykoW0FTXVxcZHs0fSkoSURDfElERkw/fElEUykoXFxkKykkL1xuY29uc3Qgc2NydXRpblVpZFJlZ2V4ID0gL15WVEFOKFJcXGQrKShMXFxkKylWKFxcZCspJC9cblxuLyoqIExvYWQgZGF0YSBmcm9tIHNwbGl0IGZpbGVzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRBc3NlbWJsZWVEYXRhKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGVuYWJsZWREYXRhc2V0czogRW5hYmxlZERhdGFzZXRzLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIHsgbG9nID0gZmFsc2UgfSA9IHt9LFxuKTogRGF0YSB7XG4gIGNvbnN0IGFjdGV1ckJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IEFjdGV1ciB9ID0ge31cbiAgY29uc3Qgb3JnYW5lQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogT3JnYW5lIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYWN0ZXVyc0V0T3JnYW5lcykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgICAgKVxuXG4gICAgICBmb3IgKGNvbnN0IGFjdGV1clNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIFtcImFjdGV1cnNcIl0pKSB7XG4gICAgICAgIGNvbnN0IGFjdGV1ckZpbGVuYW1lID0gYWN0ZXVyU3BsaXRQYXRoW2FjdGV1clNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIWFjdGV1ckZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFjdGV1ckZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLmFjdGV1clNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7YWN0ZXVyRmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhY3RldXJKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoYWN0ZXVyRmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGFjdGV1ciA9IEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LnRvQWN0ZXVyKGFjdGV1ckpzb24pXG4gICAgICAgIC8vIEtlZXAgdGhlIGZpcnN0IGV4aXN0aW5nIFwiYWN0ZXVyXCIsIGJlY2F1c2UgdGhlIGZpcnN0IHdyYXBwZXIgaXMgdGhlIG1vc3QgY29tcGxldGUuXG4gICAgICAgIGlmIChhY3RldXJCeVVpZFthY3RldXIudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYWN0ZXVyQnlVaWRbYWN0ZXVyLnVpZF0gPSBhY3RldXJcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IG9yZ2FuZVNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIFtcIm9yZ2FuZXNcIl0pKSB7XG4gICAgICAgIGNvbnN0IG9yZ2FuZUZpbGVuYW1lID0gb3JnYW5lU3BsaXRQYXRoW29yZ2FuZVNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIW9yZ2FuZUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9yZ2FuZUZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLm9yZ2FuZVNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7b3JnYW5lRmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcmdhbmVKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMob3JnYW5lRmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IG9yZ2FuZSA9IEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LnRvT3JnYW5lKG9yZ2FuZUpzb24pXG4gICAgICAgIC8vIEtlZXAgdGhlIGZpcnN0IGV4aXN0aW5nIFwib3JnYW5lXCIsIGJlY2F1c2UgdGhlIGZpcnN0IHdyYXBwZXIgaXMgdGhlIG1vc3QgY29tcGxldGUuXG4gICAgICAgIGlmIChvcmdhbmVCeVVpZFtvcmdhbmUudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgb3JnYW5lQnlVaWRbb3JnYW5lLnVpZF0gPSBvcmdhbmVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJldW5pb25CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBSZXVuaW9uIH0gPSB7fVxuICBjb25zdCByZXVuaW9uc0J5RGF5OiB7IFtkYXk6IHN0cmluZ106IFJldW5pb25bXSB9ID0ge31cbiAgY29uc3QgcmV1bmlvbnNCeURvc3NpZXJVaWQ6IHsgW2Rvc3NpZXJVaWQ6IHN0cmluZ106IFJldW5pb25bXSB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BZ2VuZGFzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFnZW5kYXMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICAgIClcbiAgICAgIGZvciAoY29uc3QgcmV1bmlvblNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIpKSB7XG4gICAgICAgIGNvbnN0IHJldW5pb25GaWxlbmFtZSA9IHJldW5pb25TcGxpdFBhdGhbcmV1bmlvblNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIXJldW5pb25GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXVuaW9uRmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4ucmV1bmlvblNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7cmV1bmlvbkZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmV1bmlvbkpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhyZXVuaW9uRmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IHJldW5pb24gPSBBZ2VuZGFzQ29udmVydC50b1JldW5pb24ocmV1bmlvbkpzb24pXG4gICAgICAgIGlmIChyZXVuaW9uQnlVaWRbcmV1bmlvbi51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXVuaW9uQnlVaWRbcmV1bmlvbi51aWRdID0gcmV1bmlvblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF5ID0gcmV1bmlvbi50aW1lc3RhbXBEZWJ1dC50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXVxuICAgICAgICBsZXQgcmV1bmlvbnNBdERheSA9IHJldW5pb25zQnlEYXlbZGF5XVxuICAgICAgICBpZiAocmV1bmlvbnNBdERheSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV1bmlvbnNBdERheSA9IHJldW5pb25zQnlEYXlbZGF5XSA9IFtdXG4gICAgICAgIH1cbiAgICAgICAgcmV1bmlvbnNBdERheS5wdXNoKHJldW5pb24pXG5cbiAgICAgICAgY29uc3Qgb2RqID0gcmV1bmlvbi5vZGpcbiAgICAgICAgaWYgKG9kaiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBwb2ludE9kaiBvZiBvZGoucG9pbnRzT2RqIHx8IFtdKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRvc3NpZXJMZWdpc2xhdGlmUmVmIG9mIHBvaW50T2RqLmRvc3NpZXJzTGVnaXNsYXRpZnNSZWZzIHx8XG4gICAgICAgICAgICAgIFtdKSB7XG4gICAgICAgICAgICAgIGxldCByZXVuaW9uc0F0RG9zc2llclVpZCA9XG4gICAgICAgICAgICAgICAgcmV1bmlvbnNCeURvc3NpZXJVaWRbZG9zc2llckxlZ2lzbGF0aWZSZWZdXG4gICAgICAgICAgICAgIGlmIChyZXVuaW9uc0F0RG9zc2llclVpZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV1bmlvbnNBdERvc3NpZXJVaWQgPSByZXVuaW9uc0J5RG9zc2llclVpZFtcbiAgICAgICAgICAgICAgICAgIGRvc3NpZXJMZWdpc2xhdGlmUmVmXG4gICAgICAgICAgICAgICAgXSA9IFtdXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV1bmlvbnNBdERvc3NpZXJVaWQucHVzaChyZXVuaW9uKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGFtZW5kZW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBBbWVuZGVtZW50IH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFtZW5kZW1lbnRzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFtZW5kZW1lbnRzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgICApXG5cbiAgICAgIGZvciAoY29uc3QgYW1lbmRlbWVudFNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIpKSB7XG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRGaWxlbmFtZSA9XG4gICAgICAgICAgYW1lbmRlbWVudFNwbGl0UGF0aFthbWVuZGVtZW50U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghYW1lbmRlbWVudEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5hbWVuZGVtZW50U3BsaXRQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHthbWVuZGVtZW50RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbWVuZGVtZW50SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGFtZW5kZW1lbnRGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgYW1lbmRlbWVudCA9IEFtZW5kZW1lbnRzQ29udmVydC50b0FtZW5kZW1lbnQoYW1lbmRlbWVudEpzb24pXG4gICAgICAgIGlmIChhbWVuZGVtZW50QnlVaWRbYW1lbmRlbWVudC51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhbWVuZGVtZW50QnlVaWRbYW1lbmRlbWVudC51aWRdID0gYW1lbmRlbWVudFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZG9jdW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb2N1bWVudCB9ID0ge31cbiAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluOiB7XG4gICAgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmVcbiAgfSA9IHt9XG4gIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH0gPSB7fVxuICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuZG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgICAgKVxuXG4gICAgICBmb3IgKGNvbnN0IGRvY3VtZW50U3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpciwgW1wiZG9jdW1lbnRzXCJdKSkge1xuICAgICAgICBjb25zdCBkb2N1bWVudEZpbGVuYW1lID0gZG9jdW1lbnRTcGxpdFBhdGhbZG9jdW1lbnRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFkb2N1bWVudEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvY3VtZW50RmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uZG9jdW1lbnRTcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2RvY3VtZW50RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb2N1bWVudEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhkb2N1bWVudEZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBkb2N1bWVudCA9IERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LnRvRG9jdW1lbnQoZG9jdW1lbnRKc29uKVxuICAgICAgICBpZiAoZG9jdW1lbnRCeVVpZFtkb2N1bWVudC51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkb2N1bWVudEJ5VWlkW2RvY3VtZW50LnVpZF0gPSBkb2N1bWVudFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgZG9zc2llclNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIFtcImRvc3NpZXJzXCJdKSkge1xuICAgICAgICBjb25zdCBkb3NzaWVyRmlsZW5hbWUgPSBkb3NzaWVyU3BsaXRQYXRoW2Rvc3NpZXJTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFkb3NzaWVyRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9zc2llckZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLmRvc3NpZXJTcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2Rvc3NpZXJGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvc3NpZXJKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoZG9zc2llckZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBkb3NzaWVyID1cbiAgICAgICAgICBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC50b0Rvc3NpZXJQYXJsZW1lbnRhaXJlKGRvc3NpZXJKc29uKVxuICAgICAgICBjb25zdCB0aXRyZURvc3NpZXIgPSBkb3NzaWVyLnRpdHJlRG9zc2llclxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGl0cmVEb3NzaWVyLnNlbmF0Q2hlbWluICYmXG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluW3RpdHJlRG9zc2llci5zZW5hdENoZW1pbl0gPT09XG4gICAgICAgICAgICB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluW3RpdHJlRG9zc2llci5zZW5hdENoZW1pbl0gPSBkb3NzaWVyXG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRpdHJlRG9zc2llci50aXRyZUNoZW1pbiAmJlxuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pblt0aXRyZURvc3NpZXIudGl0cmVDaGVtaW5dID09PVxuICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pblt0aXRyZURvc3NpZXIudGl0cmVDaGVtaW5dID0gZG9zc2llclxuICAgICAgICB9XG4gICAgICAgIGlmIChkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkW2Rvc3NpZXIudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZFtkb3NzaWVyLnVpZF0gPSBkb3NzaWVyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsZXQgcGhvdG9CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBQaG90byB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5QaG90b3MpIHtcbiAgICB7XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgYHBob3Rvc19kZXB1dGVzXyR7XG4gICAgICAgICAgLy8gVE9ETzogSGFuZGxlIExlZ2lzbGF0dXJlLkFsbC5cbiAgICAgICAgICBsZWdpc2xhdHVyZSA9PT0gTGVnaXNsYXR1cmUuQWxsID8gTGVnaXNsYXR1cmUuU2VpemUgOiBsZWdpc2xhdHVyZVxuICAgICAgICB9YCxcbiAgICAgICAgXCJkZXB1dGVzLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKGpzb25GaWxlUGF0aCkpIHtcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgICAgT2JqZWN0LmFzc2lnbihwaG90b0J5VWlkLCBKU09OLnBhcnNlKGpzb24pKVxuICAgICAgfSBlbHNlIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYElnbm9yaW5nIG1pc3NpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB7XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgXCJwaG90b3Nfc2VuYXRldXJzXCIsXG4gICAgICAgIFwic2VuYXRldXJzLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKGpzb25GaWxlUGF0aCkpIHtcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgICAgT2JqZWN0LmFzc2lnbihwaG90b0J5VWlkLCBKU09OLnBhcnNlKGpzb24pKVxuICAgICAgfSBlbHNlIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYElnbm9yaW5nIG1pc3NpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBzY3J1dGluQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogU2NydXRpbiB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5TY3J1dGlucykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5zY3J1dGlucykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgICAgKVxuXG4gICAgICBmb3IgKGNvbnN0IHNjcnV0aW5TcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyKSkge1xuICAgICAgICBjb25zdCBzY3J1dGluRmlsZW5hbWUgPSBzY3J1dGluU3BsaXRQYXRoW3NjcnV0aW5TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFzY3J1dGluRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2NydXRpbkZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLnNjcnV0aW5TcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke3NjcnV0aW5GaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNjcnV0aW5Kc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoc2NydXRpbkZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBzY3J1dGluID0gU2NydXRpbnNDb252ZXJ0LnRvU2NydXRpbihzY3J1dGluSnNvbilcbiAgICAgICAgaWYgKHNjcnV0aW5CeVVpZFtzY3J1dGluLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHNjcnV0aW5CeVVpZFtzY3J1dGluLnVpZF0gPSBzY3J1dGluXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGFjdGV1ckJ5VWlkLFxuICAgIGFtZW5kZW1lbnRCeVVpZCxcbiAgICBkb2N1bWVudEJ5VWlkLFxuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pbixcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW4sXG4gICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZCxcbiAgICBvcmdhbmVCeVVpZCxcbiAgICBwaG90b0J5VWlkLFxuICAgIHJldW5pb25CeVVpZCxcbiAgICByZXVuaW9uc0J5RGF5LFxuICAgIHJldW5pb25zQnlEb3NzaWVyVWlkLFxuICAgIHNjcnV0aW5CeVVpZCxcbiAgfVxufVxuXG4vKiogTG9hZCBkYXRhIGZyb20gYmlnIG1vbm9seXRpYyBmaWxlcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQXNzZW1ibGVlRGF0YUZyb21CaWdGaWxlcyhcbiAgZGF0YURpcjogc3RyaW5nLFxuICBlbmFibGVkRGF0YXNldHM6IEVuYWJsZWREYXRhc2V0cyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IERhdGEge1xuICBjb25zdCBhY3RldXJCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBBY3RldXIgfSA9IHt9XG4gIGNvbnN0IG9yZ2FuZUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IE9yZ2FuZSB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICBjb25zdCBhY3RldXJzRXRPcmdhbmVzID0gQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQudG9BY3RldXJzRXRPcmdhbmVzKGpzb24pXG4gICAgICBmb3IgKGNvbnN0IGFjdGV1ciBvZiBhY3RldXJzRXRPcmdhbmVzLmFjdGV1cnMpIHtcbiAgICAgICAgLy8gS2VlcCB0aGUgZmlyc3QgZXhpc3RpbmcgXCJhY3RldXJcIiwgYmVjYXVzZSB0aGUgZmlyc3Qgd3JhcHBlciBpcyB0aGUgbW9zdCBjb21wbGV0ZS5cbiAgICAgICAgaWYgKGFjdGV1ckJ5VWlkW2FjdGV1ci51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhY3RldXJCeVVpZFthY3RldXIudWlkXSA9IGFjdGV1clxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IG9yZ2FuZSBvZiBhY3RldXJzRXRPcmdhbmVzLm9yZ2FuZXMpIHtcbiAgICAgICAgLy8gS2VlcCB0aGUgZmlyc3QgZXhpc3RpbmcgXCJvcmdhbmVcIiwgYmVjYXVzZSB0aGUgZmlyc3Qgd3JhcHBlciBpcyB0aGUgbW9zdCBjb21wbGV0ZS5cbiAgICAgICAgaWYgKG9yZ2FuZUJ5VWlkW29yZ2FuZS51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBvcmdhbmVCeVVpZFtvcmdhbmUudWlkXSA9IG9yZ2FuZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcmV1bmlvbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFJldW5pb24gfSA9IHt9XG4gIGNvbnN0IHJldW5pb25zQnlEYXk6IHsgW2RheTogc3RyaW5nXTogUmV1bmlvbltdIH0gPSB7fVxuICBjb25zdCByZXVuaW9uc0J5RG9zc2llclVpZDogeyBbZG9zc2llclVpZDogc3RyaW5nXTogUmV1bmlvbltdIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFnZW5kYXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYWdlbmRhcykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZS5qc29uXCIpLFxuICAgICAgKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgIGNvbnN0IGFnZW5kYXMgPSBBZ2VuZGFzQ29udmVydC50b0FnZW5kYXMoanNvbilcbiAgICAgIGZvciAoY29uc3QgcmV1bmlvbiBvZiBhZ2VuZGFzLnJldW5pb25zKSB7XG4gICAgICAgIGlmIChyZXVuaW9uQnlVaWRbcmV1bmlvbi51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXVuaW9uQnlVaWRbcmV1bmlvbi51aWRdID0gcmV1bmlvblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF5ID0gcmV1bmlvbi50aW1lc3RhbXBEZWJ1dC50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXVxuICAgICAgICBsZXQgcmV1bmlvbnNBdERheSA9IHJldW5pb25zQnlEYXlbZGF5XVxuICAgICAgICBpZiAocmV1bmlvbnNBdERheSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV1bmlvbnNBdERheSA9IHJldW5pb25zQnlEYXlbZGF5XSA9IFtdXG4gICAgICAgIH1cbiAgICAgICAgcmV1bmlvbnNBdERheS5wdXNoKHJldW5pb24pXG5cbiAgICAgICAgY29uc3Qgb2RqID0gcmV1bmlvbi5vZGpcbiAgICAgICAgaWYgKG9kaiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBwb2ludE9kaiBvZiBvZGoucG9pbnRzT2RqIHx8IFtdKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRvc3NpZXJMZWdpc2xhdGlmUmVmIG9mIHBvaW50T2RqLmRvc3NpZXJzTGVnaXNsYXRpZnNSZWZzIHx8XG4gICAgICAgICAgICAgIFtdKSB7XG4gICAgICAgICAgICAgIGxldCByZXVuaW9uc0F0RG9zc2llclVpZCA9XG4gICAgICAgICAgICAgICAgcmV1bmlvbnNCeURvc3NpZXJVaWRbZG9zc2llckxlZ2lzbGF0aWZSZWZdXG4gICAgICAgICAgICAgIGlmIChyZXVuaW9uc0F0RG9zc2llclVpZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV1bmlvbnNBdERvc3NpZXJVaWQgPSByZXVuaW9uc0J5RG9zc2llclVpZFtcbiAgICAgICAgICAgICAgICAgIGRvc3NpZXJMZWdpc2xhdGlmUmVmXG4gICAgICAgICAgICAgICAgXSA9IFtdXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV1bmlvbnNBdERvc3NpZXJVaWQucHVzaChyZXVuaW9uKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGFtZW5kZW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBBbWVuZGVtZW50IH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFtZW5kZW1lbnRzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFtZW5kZW1lbnRzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgY29uc3QgYW1lbmRlbWVudHMgPSBBbWVuZGVtZW50c0NvbnZlcnQudG9BbWVuZGVtZW50cyhqc29uKVxuICAgICAgZm9yIChjb25zdCB0ZXh0ZUxlZ2lzbGF0aWYgb2YgYW1lbmRlbWVudHMudGV4dGVzTGVnaXNsYXRpZnMpIHtcbiAgICAgICAgZm9yIChjb25zdCBhbWVuZGVtZW50IG9mIHRleHRlTGVnaXNsYXRpZi5hbWVuZGVtZW50cykge1xuICAgICAgICAgIGlmIChhbWVuZGVtZW50QnlVaWRbYW1lbmRlbWVudC51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFtZW5kZW1lbnRCeVVpZFthbWVuZGVtZW50LnVpZF0gPSBhbWVuZGVtZW50XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZG9jdW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb2N1bWVudCB9ID0ge31cbiAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluOiB7XG4gICAgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmVcbiAgfSA9IHt9XG4gIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH0gPSB7fVxuICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuZG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZS5qc29uXCIpLFxuICAgICAgKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgIGNvbnN0IGRvc3NpZXJzTGVnaXNsYXRpZnMgPVxuICAgICAgICBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC50b0Rvc3NpZXJzTGVnaXNsYXRpZnMoanNvbilcbiAgICAgIGZvciAoY29uc3QgZG9jdW1lbnQgb2YgZG9zc2llcnNMZWdpc2xhdGlmcy50ZXh0ZXNMZWdpc2xhdGlmcykge1xuICAgICAgICBpZiAoZG9jdW1lbnRCeVVpZFtkb2N1bWVudC51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkb2N1bWVudEJ5VWlkW2RvY3VtZW50LnVpZF0gPSBkb2N1bWVudFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IGRvc3NpZXIgb2YgZG9zc2llcnNMZWdpc2xhdGlmcy5kb3NzaWVyc1BhcmxlbWVudGFpcmVzKSB7XG4gICAgICAgIGNvbnN0IHRpdHJlRG9zc2llciA9IGRvc3NpZXIudGl0cmVEb3NzaWVyXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aXRyZURvc3NpZXIuc2VuYXRDaGVtaW4gJiZcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW5bdGl0cmVEb3NzaWVyLnNlbmF0Q2hlbWluXSA9PT1cbiAgICAgICAgICAgIHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW5bdGl0cmVEb3NzaWVyLnNlbmF0Q2hlbWluXSA9IGRvc3NpZXJcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGl0cmVEb3NzaWVyLnRpdHJlQ2hlbWluICYmXG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluW3RpdHJlRG9zc2llci50aXRyZUNoZW1pbl0gPT09XG4gICAgICAgICAgICB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluW3RpdHJlRG9zc2llci50aXRyZUNoZW1pbl0gPSBkb3NzaWVyXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWRbZG9zc2llci51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkW2Rvc3NpZXIudWlkXSA9IGRvc3NpZXJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHBob3RvQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUGhvdG8gfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuUGhvdG9zKSB7XG4gICAgY29uc3QgcGhvdG9CeVVpZCA9IHt9XG5cbiAgICB7XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgYHBob3Rvc19kZXB1dGVzXyR7XG4gICAgICAgICAgLy8gVE9ETzogSGFuZGxlIExlZ2lzbGF0dXJlLkFsbC5cbiAgICAgICAgICBsZWdpc2xhdHVyZSA9PT0gTGVnaXNsYXR1cmUuQWxsID8gTGVnaXNsYXR1cmUuU2VpemUgOiBsZWdpc2xhdHVyZVxuICAgICAgICB9YCxcbiAgICAgICAgXCJkZXB1dGVzLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKGpzb25GaWxlUGF0aCkpIHtcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgICAgT2JqZWN0LmFzc2lnbihwaG90b0J5VWlkLCBKU09OLnBhcnNlKGpzb24pKVxuICAgICAgfSBlbHNlIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYElnbm9yaW5nIG1pc3NpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB7XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgXCJwaG90b3Nfc2VuYXRldXJzXCIsXG4gICAgICAgIFwic2VuYXRldXJzLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKGpzb25GaWxlUGF0aCkpIHtcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgICAgT2JqZWN0LmFzc2lnbihwaG90b0J5VWlkLCBKU09OLnBhcnNlKGpzb24pKVxuICAgICAgfSBlbHNlIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYElnbm9yaW5nIG1pc3NpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBzY3J1dGluQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogU2NydXRpbiB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5TY3J1dGlucykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5zY3J1dGlucykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZS5qc29uXCIpLFxuICAgICAgKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgIGNvbnN0IHNjcnV0aW5zID0gU2NydXRpbnNDb252ZXJ0LnRvU2NydXRpbnMoanNvbilcbiAgICAgIGZvciAoY29uc3Qgc2NydXRpbiBvZiBzY3J1dGlucy5zY3J1dGlucykge1xuICAgICAgICBpZiAoc2NydXRpbkJ5VWlkW3NjcnV0aW4udWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2NydXRpbkJ5VWlkW3NjcnV0aW4udWlkXSA9IHNjcnV0aW5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYWN0ZXVyQnlVaWQsXG4gICAgYW1lbmRlbWVudEJ5VWlkLFxuICAgIGRvY3VtZW50QnlVaWQsXG4gICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluLFxuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pbixcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkLFxuICAgIG9yZ2FuZUJ5VWlkLFxuICAgIHBob3RvQnlVaWQsXG4gICAgcmV1bmlvbkJ5VWlkLFxuICAgIHJldW5pb25zQnlEYXksXG4gICAgcmV1bmlvbnNCeURvc3NpZXJVaWQsXG4gICAgc2NydXRpbkJ5VWlkLFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoRnJvbURvY3VtZW50VWlkKGRvY3VtZW50c0Rpcjogc3RyaW5nLCB1aWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG1hdGNoID0gZG9jdW1lbnRVaWRSZWdleC5leGVjKHVpZClcbiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKFxuICAgIG1hdGNoLFxuICAgIG51bGwsXG4gICAgYFVuZXhwZWN0ZWQgc3RydWN0dXJlIGZvciBkb2N1bWVudCBVSUQ6ICR7dWlkfWAsXG4gIClcbiAgY29uc3QgZG9jdW1lbnRUeXBlID0gcGF0aC5qb2luKGRvY3VtZW50c0RpciwgbWF0Y2ghWzFdKVxuICBjb25zdCBjaGFtYnJlRGlyID0gcGF0aC5qb2luKGRvY3VtZW50VHlwZSwgbWF0Y2ghWzJdKVxuICBjb25zdCByZXB1YmxpcXVlRGlyID0gcGF0aC5qb2luKGNoYW1icmVEaXIsIG1hdGNoIVszXSlcbiAgY29uc3QgbGVnaXNsYXR1cmVEaXIgPSBwYXRoLmpvaW4ocmVwdWJsaXF1ZURpciwgbWF0Y2ghWzRdKVxuICBjb25zdCBldGF0RGlyID0gcGF0aC5qb2luKGxlZ2lzbGF0dXJlRGlyLCBtYXRjaCFbNV0pXG4gIGxldCBudW1lcm8gPSBcIjAwMDAwMFwiICsgbWF0Y2ghWzZdXG4gIG51bWVybyA9IG51bWVyby5zdWJzdHIobnVtZXJvLmxlbmd0aCAtIDYpXG4gIGNvbnN0IG51bWVyb01pbGxpZXJzRGlyID0gcGF0aC5qb2luKGV0YXREaXIsIG51bWVyby5zdWJzdHIoMCwgMykpXG4gIGZzLmVuc3VyZURpclN5bmMobnVtZXJvTWlsbGllcnNEaXIpXG4gIHJldHVybiBwYXRoLmpvaW4obnVtZXJvTWlsbGllcnNEaXIsIHVpZClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhGcm9tRG9zc2llclBhcmxlbWVudGFpcmVVaWQoXG4gIGRvc3NpZXJzRGlyOiBzdHJpbmcsXG4gIHVpZDogc3RyaW5nLFxuKTogc3RyaW5nIHtcbiAgY29uc3QgbWF0Y2ggPSBkb3NzaWVyVWlkUmVnZXguZXhlYyh1aWQpXG4gIGFzc2VydC5ub3RTdHJpY3RFcXVhbChcbiAgICBtYXRjaCxcbiAgICBudWxsLFxuICAgIGBVbmV4cGVjdGVkIHN0cnVjdHVyZSBmb3IgZG9zc2llciBwYXJsZW1lbnRhaXJlIFVJRDogJHt1aWR9YCxcbiAgKVxuICBjb25zdCByZXB1YmxpcXVlRGlyID0gcGF0aC5qb2luKGRvc3NpZXJzRGlyLCBtYXRjaCFbMV0pXG4gIGNvbnN0IGxlZ2lzbGF0dXJlRGlyID0gcGF0aC5qb2luKHJlcHVibGlxdWVEaXIsIG1hdGNoIVsyXSlcbiAgbGV0IG51bWVybyA9IFwiMDAwMDAwXCIgKyBtYXRjaCFbM11cbiAgbnVtZXJvID0gbnVtZXJvLnN1YnN0cihudW1lcm8ubGVuZ3RoIC0gNilcbiAgY29uc3QgbnVtZXJvTWlsbGllcnNEaXIgPSBwYXRoLmpvaW4obGVnaXNsYXR1cmVEaXIsIG51bWVyby5zdWJzdHIoMCwgMykpXG4gIGZzLmVuc3VyZURpclN5bmMobnVtZXJvTWlsbGllcnNEaXIpXG4gIHJldHVybiBwYXRoLmpvaW4obnVtZXJvTWlsbGllcnNEaXIsIHVpZClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhGcm9tUmV1bmlvblVpZChyZXVuaW9uc0Rpcjogc3RyaW5nLCB1aWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG1hdGNoID0gcmV1bmlvblVpZFJlZ2V4LmV4ZWModWlkKVxuICBhc3NlcnQubm90U3RyaWN0RXF1YWwoXG4gICAgbWF0Y2gsXG4gICAgbnVsbCxcbiAgICBgVW5leHBlY3RlZCBzdHJ1Y3R1cmUgZm9yIHJldW5pb24gVUlEOiAke3VpZH1gLFxuICApXG4gIGNvbnN0IGNoYW1icmVEaXIgPSBwYXRoLmpvaW4ocmV1bmlvbnNEaXIsIG1hdGNoIVsxXSlcbiAgY29uc3QgcmVwdWJsaXF1ZURpciA9IHBhdGguam9pbihjaGFtYnJlRGlyLCBtYXRjaCFbMl0pXG4gIGNvbnN0IGxlZ2lzbGF0dXJlRGlyID0gcGF0aC5qb2luKHJlcHVibGlxdWVEaXIsIG1hdGNoIVszXSlcbiAgY29uc3Qgc2Vzc2lvbkRpciA9IHBhdGguam9pbihsZWdpc2xhdHVyZURpciwgbWF0Y2ghWzRdKVxuICBjb25zdCBpZERpciA9IHBhdGguam9pbihzZXNzaW9uRGlyLCBtYXRjaCFbNV0pXG4gIGxldCBudW1lcm8gPSBcIjAwMDAwMDAwMFwiICsgbWF0Y2ghWzZdXG4gIG51bWVybyA9IG51bWVyby5zdWJzdHIobnVtZXJvLmxlbmd0aCAtIDkpXG4gIGNvbnN0IG51bWVyb01pbGxpb25zRGlyID0gcGF0aC5qb2luKGlkRGlyLCBudW1lcm8uc3Vic3RyKDAsIDMpKVxuICBjb25zdCBudW1lcm9NaWxsaWVyc0RpciA9IHBhdGguam9pbihudW1lcm9NaWxsaW9uc0RpciwgbnVtZXJvLnN1YnN0cigzLCAzKSlcbiAgZnMuZW5zdXJlRGlyU3luYyhudW1lcm9NaWxsaWVyc0RpcilcbiAgcmV0dXJuIHBhdGguam9pbihudW1lcm9NaWxsaWVyc0RpciwgdWlkKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aEZyb21TY3J1dGluVWlkKHNjcnV0aW5zRGlyOiBzdHJpbmcsIHVpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgbWF0Y2ggPSBzY3J1dGluVWlkUmVnZXguZXhlYyh1aWQpXG4gIGFzc2VydC5ub3RTdHJpY3RFcXVhbChcbiAgICBtYXRjaCxcbiAgICBudWxsLFxuICAgIGBVbmV4cGVjdGVkIHN0cnVjdHVyZSBmb3Igc2NydXRpbiBVSUQ6ICR7dWlkfWAsXG4gIClcbiAgY29uc3QgcmVwdWJsaXF1ZURpciA9IHBhdGguam9pbihzY3J1dGluc0RpciwgbWF0Y2ghWzFdKVxuICBjb25zdCBsZWdpc2xhdHVyZURpciA9IHBhdGguam9pbihyZXB1YmxpcXVlRGlyLCBtYXRjaCFbMl0pXG4gIGxldCBudW1lcm8gPSBcIjAwMDAwMFwiICsgbWF0Y2ghWzNdXG4gIG51bWVybyA9IG51bWVyby5zdWJzdHIobnVtZXJvLmxlbmd0aCAtIDYpXG4gIGNvbnN0IG51bWVyb01pbGxpZXJzRGlyID0gcGF0aC5qb2luKGxlZ2lzbGF0dXJlRGlyLCBudW1lcm8uc3Vic3RyKDAsIDMpKVxuICBmcy5lbnN1cmVEaXJTeW5jKG51bWVyb01pbGxpZXJzRGlyKVxuICByZXR1cm4gcGF0aC5qb2luKG51bWVyb01pbGxpZXJzRGlyLCB1aWQpXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQU1BO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFBc0U7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXFCdEUsSUFBTUEsZ0JBQWdCLEdBQ3BCLDJIQUEySDtBQUM3SCxJQUFNQyxlQUFlLEdBQUcsd0JBQXdCO0FBQ2hELElBQU1DLGVBQWUsR0FDbkIsMkRBQTJEO0FBQzdELElBQU1DLGVBQWUsR0FBRywwQkFBMEI7O0FBRWxEO0FBQ08sU0FBU0MsaUJBQWlCLENBQy9CQyxPQUFlLEVBQ2ZDLGVBQWdDLEVBQ2hDQyxXQUF3QixFQUVsQjtFQUFBLCtFQURZLENBQUMsQ0FBQztJQUFBLGdCQUFsQkMsR0FBRztJQUFIQSxHQUFHLHlCQUFHLEtB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
|