@tricoteuses/assemblee 1.0.7 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/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
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { execSync } from "child_process";
|
|
2
2
|
import commandLineArgs from "command-line-args";
|
|
3
|
-
import fs from "fs-extra";
|
|
4
|
-
|
|
5
|
-
import path from "path";
|
|
3
|
+
import fs from "fs-extra";
|
|
4
|
+
// import fetch from "node-fetch"
|
|
5
|
+
import path from "path";
|
|
6
|
+
// import stream from "stream"
|
|
6
7
|
// import util from "util"
|
|
7
|
-
|
|
8
8
|
import { EnabledDatasets } from "../datasets.mjs";
|
|
9
9
|
import { loadAssembleeData } from "../loaders.mjs";
|
|
10
10
|
import { CodeTypeOrgane, TypeMandat } from "../types/acteurs_et_organes.mjs";
|
|
@@ -40,11 +40,11 @@ const optionsDefinitions = [{
|
|
|
40
40
|
name: "dataDir",
|
|
41
41
|
type: String
|
|
42
42
|
}];
|
|
43
|
-
const options = commandLineArgs(optionsDefinitions);
|
|
43
|
+
const options = commandLineArgs(optionsDefinitions);
|
|
44
|
+
// const pipeline = util.promisify(stream.pipeline)
|
|
44
45
|
|
|
45
46
|
function commitAndPush(repositoryDir, commit, remotes) {
|
|
46
47
|
let error = false;
|
|
47
|
-
|
|
48
48
|
if (commit) {
|
|
49
49
|
execSync("git add .", {
|
|
50
50
|
cwd: repositoryDir,
|
|
@@ -52,7 +52,6 @@ function commitAndPush(repositoryDir, commit, remotes) {
|
|
|
52
52
|
encoding: "utf-8",
|
|
53
53
|
stdio: ["ignore", "ignore", "pipe"]
|
|
54
54
|
});
|
|
55
|
-
|
|
56
55
|
try {
|
|
57
56
|
execSync('git commit -m "Nouvelle moisson"', {
|
|
58
57
|
cwd: repositoryDir,
|
|
@@ -65,7 +64,6 @@ function commitAndPush(repositoryDir, commit, remotes) {
|
|
|
65
64
|
throw childProcess;
|
|
66
65
|
}
|
|
67
66
|
}
|
|
68
|
-
|
|
69
67
|
for (const remote of remotes || []) {
|
|
70
68
|
try {
|
|
71
69
|
execSync(`git push ${remote} master`, {
|
|
@@ -81,10 +79,8 @@ function commitAndPush(repositoryDir, commit, remotes) {
|
|
|
81
79
|
}
|
|
82
80
|
}
|
|
83
81
|
}
|
|
84
|
-
|
|
85
82
|
return error;
|
|
86
83
|
}
|
|
87
|
-
|
|
88
84
|
async function retrievePhotosSenateurs() {
|
|
89
85
|
const dataDir = options.dataDir;
|
|
90
86
|
const {
|
|
@@ -94,39 +90,31 @@ async function retrievePhotosSenateurs() {
|
|
|
94
90
|
const {
|
|
95
91
|
mandats
|
|
96
92
|
} = acteur;
|
|
97
|
-
|
|
98
93
|
if (!mandats) {
|
|
99
94
|
return false;
|
|
100
95
|
}
|
|
101
|
-
|
|
102
|
-
|
|
96
|
+
const mandatSenateur = mandats.filter(mandat => mandat.xsiType === TypeMandat.MandatParlementaireType &&
|
|
97
|
+
// mandat.legislature === options.legislature &&
|
|
103
98
|
mandat.typeOrgane === CodeTypeOrgane.Senat)[0];
|
|
104
|
-
|
|
105
99
|
if (mandatSenateur === undefined) {
|
|
106
100
|
return false;
|
|
107
101
|
}
|
|
108
|
-
|
|
109
102
|
const {
|
|
110
103
|
adresses
|
|
111
104
|
} = acteur;
|
|
112
|
-
|
|
113
105
|
if (adresses === undefined) {
|
|
114
106
|
return false;
|
|
115
107
|
}
|
|
116
|
-
|
|
117
108
|
let url = null;
|
|
118
|
-
|
|
119
109
|
for (const adresse of adresses) {
|
|
120
110
|
if (adresse.xsiType === "AdresseSiteWeb_Type" && adresse.typeLibelle === "Url sénateur") {
|
|
121
111
|
url = adresse.valElec;
|
|
122
112
|
}
|
|
123
113
|
}
|
|
124
|
-
|
|
125
114
|
return Boolean(url);
|
|
126
115
|
}).sort((a, b) => a.uid.length === b.uid.length ? a.uid.localeCompare(b.uid) : a.uid.length - b.uid.length);
|
|
127
116
|
const gitGroupUrl = options.clone ? options.clone.trim().replace(/\/+$/, "") : undefined;
|
|
128
117
|
const photosDirName = "photos_senateurs";
|
|
129
|
-
|
|
130
118
|
if (gitGroupUrl !== undefined) {
|
|
131
119
|
execSync(`git clone ${gitGroupUrl}/${photosDirName}.git`, {
|
|
132
120
|
cwd: dataDir,
|
|
@@ -135,14 +123,12 @@ async function retrievePhotosSenateurs() {
|
|
|
135
123
|
stdio: ["ignore", "ignore", "pipe"]
|
|
136
124
|
});
|
|
137
125
|
}
|
|
126
|
+
const photosDir = path.join(dataDir, photosDirName);
|
|
138
127
|
|
|
139
|
-
|
|
140
|
-
|
|
128
|
+
// Download photos.
|
|
141
129
|
fs.ensureDirSync(photosDir);
|
|
142
|
-
|
|
143
130
|
if (options.fetch) {
|
|
144
131
|
const missingPhotoFilePath = "images/transparent_155x225.jpg";
|
|
145
|
-
|
|
146
132
|
for (const senateur of senateurs) {
|
|
147
133
|
const ident = senateur.etatCivil.ident;
|
|
148
134
|
const senateurStem = stemFromSenateur(senateur);
|
|
@@ -151,10 +137,10 @@ async function retrievePhotosSenateurs() {
|
|
|
151
137
|
const photoTempFilename = `${senateurStem}_temp.jpg`;
|
|
152
138
|
const photoTempFilePath = path.join(photosDir, photoTempFilename);
|
|
153
139
|
const urlPhoto = `https://www.senat.fr/senimg/${photoFilename}`;
|
|
154
|
-
|
|
155
140
|
if (!options.silent) {
|
|
156
141
|
console.log(`Loading photo ${urlPhoto} for ${ident.prenom} ${ident.nom}…`);
|
|
157
|
-
}
|
|
142
|
+
}
|
|
143
|
+
// for (let retries = 0; retries < 3; retries++) {
|
|
158
144
|
// const response = await fetch(urlPhoto)
|
|
159
145
|
// if (response.ok) {
|
|
160
146
|
// await pipeline(response.body, fs.createWriteStream(photoTempFilePath))
|
|
@@ -174,19 +160,17 @@ async function retrievePhotosSenateurs() {
|
|
|
174
160
|
// break
|
|
175
161
|
// }
|
|
176
162
|
// }
|
|
177
|
-
|
|
178
|
-
|
|
179
163
|
try {
|
|
180
164
|
execSync(`wget --quiet -O ${photoTempFilename} ${urlPhoto}`, {
|
|
181
165
|
cwd: photosDir,
|
|
182
166
|
env: process.env,
|
|
183
|
-
encoding: "utf-8"
|
|
184
|
-
|
|
167
|
+
encoding: "utf-8"
|
|
168
|
+
// stdio: ["ignore", "ignore", "pipe"],
|
|
185
169
|
});
|
|
170
|
+
|
|
186
171
|
fs.renameSync(photoTempFilePath, photoFilePath);
|
|
187
172
|
} catch (error) {
|
|
188
173
|
console.error(error);
|
|
189
|
-
|
|
190
174
|
if (fs.existsSync(photoFilePath)) {
|
|
191
175
|
console.warn(" => Reusing existing image");
|
|
192
176
|
} else {
|
|
@@ -195,30 +179,26 @@ async function retrievePhotosSenateurs() {
|
|
|
195
179
|
}
|
|
196
180
|
}
|
|
197
181
|
}
|
|
198
|
-
}
|
|
199
|
-
|
|
182
|
+
}
|
|
200
183
|
|
|
184
|
+
// Resize photos to 155x225, because some haven't exactly this size.
|
|
201
185
|
for (const senateur of senateurs) {
|
|
202
186
|
const ident = senateur.etatCivil.ident;
|
|
203
187
|
const senateurStem = stemFromSenateur(senateur);
|
|
204
|
-
|
|
205
188
|
if (!options.silent) {
|
|
206
189
|
console.log(`Resizing photo ${senateurStem} for ${ident.prenom} ${ident.nom}…`);
|
|
207
190
|
}
|
|
208
|
-
|
|
209
191
|
execSync(`gm convert -resize 155x225! ${senateurStem}.jpg ${senateurStem}_155x225.jpg`, {
|
|
210
192
|
cwd: photosDir
|
|
211
193
|
});
|
|
212
|
-
}
|
|
213
|
-
|
|
194
|
+
}
|
|
214
195
|
|
|
196
|
+
// Create a mosaic of photos.
|
|
215
197
|
const photoByIdSenateur = {};
|
|
216
198
|
const rowsFilenames = [];
|
|
217
|
-
|
|
218
199
|
for (let senateurIndex = 0, rowIndex = 0; senateurIndex < senateurs.length; senateurIndex += 25, rowIndex++) {
|
|
219
200
|
const row = senateurs.slice(senateurIndex, senateurIndex + 25);
|
|
220
201
|
const photosFilenames = [];
|
|
221
|
-
|
|
222
202
|
for (const [columnIndex, senateur] of row.entries()) {
|
|
223
203
|
const senateurStem = stemFromSenateur(senateur);
|
|
224
204
|
const photoFilename = `${senateurStem}_155x225.jpg`;
|
|
@@ -232,46 +212,38 @@ async function retrievePhotosSenateurs() {
|
|
|
232
212
|
yMosaique: rowIndex * 225
|
|
233
213
|
};
|
|
234
214
|
}
|
|
235
|
-
|
|
236
215
|
const rowFilename = `row-${rowIndex}.jpg`;
|
|
237
216
|
execSync(`gm convert ${photosFilenames.join(" ")} +append ${rowFilename}`, {
|
|
238
217
|
cwd: photosDir
|
|
239
218
|
});
|
|
240
219
|
rowsFilenames.push(rowFilename);
|
|
241
220
|
}
|
|
242
|
-
|
|
243
221
|
execSync(`gm convert ${rowsFilenames.join(" ")} -append senateurs.jpg`, {
|
|
244
222
|
cwd: photosDir
|
|
245
223
|
});
|
|
246
|
-
|
|
247
224
|
for (const rowFilename of rowsFilenames) {
|
|
248
225
|
fs.unlinkSync(path.join(photosDir, rowFilename));
|
|
249
226
|
}
|
|
250
|
-
|
|
251
227
|
const jsonFilePath = path.join(photosDir, "senateurs.json");
|
|
252
228
|
fs.writeFileSync(jsonFilePath, JSON.stringify(photoByIdSenateur, null, 2));
|
|
253
229
|
return commitAndPush(photosDir, options.commit, options.remote);
|
|
254
230
|
}
|
|
255
|
-
|
|
256
231
|
function stemFromSenateur(senateur) {
|
|
257
232
|
const {
|
|
258
233
|
adresses
|
|
259
234
|
} = senateur;
|
|
260
235
|
let url = null;
|
|
261
|
-
|
|
262
236
|
for (const adresse of adresses) {
|
|
263
237
|
if (adresse.xsiType === "AdresseSiteWeb_Type" && adresse.typeLibelle === "Url sénateur") {
|
|
264
238
|
url = adresse.valElec;
|
|
265
239
|
}
|
|
266
240
|
}
|
|
267
|
-
|
|
268
241
|
const match = url.match(/^https:\/\/www\.senat\.fr\/senateur\/(.*)\.html$/);
|
|
269
242
|
const senateurStem = match[1];
|
|
270
243
|
return senateurStem;
|
|
271
244
|
}
|
|
272
|
-
|
|
273
245
|
retrievePhotosSenateurs().then(error => process.exit(error ? 1 : 0)).catch(error => {
|
|
274
246
|
console.log(error);
|
|
275
247
|
process.exit(2);
|
|
276
248
|
});
|
|
277
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleGVjU3luYyIsImNvbW1hbmRMaW5lQXJncyIsImZzIiwicGF0aCIsIkVuYWJsZWREYXRhc2V0cyIsImxvYWRBc3NlbWJsZWVEYXRhIiwiQ29kZVR5cGVPcmdhbmUiLCJUeXBlTWFuZGF0Iiwib3B0aW9uc0RlZmluaXRpb25zIiwiYWxpYXMiLCJoZWxwIiwibmFtZSIsInR5cGUiLCJTdHJpbmciLCJCb29sZWFuIiwibXVsdGlwbGUiLCJkZWZhdWx0T3B0aW9uIiwib3B0aW9ucyIsImNvbW1pdEFuZFB1c2giLCJyZXBvc2l0b3J5RGlyIiwiY29tbWl0IiwicmVtb3RlcyIsImVycm9yIiwiY3dkIiwiZW52IiwicHJvY2VzcyIsImVuY29kaW5nIiwic3RkaW8iLCJjaGlsZFByb2Nlc3MiLCJzdGRlcnIiLCJ0ZXN0Iiwic3Rkb3V0IiwiY29uc29sZSIsIm91dHB1dCIsInJlbW90ZSIsInJldHJpZXZlUGhvdG9zU2VuYXRldXJzIiwiZGF0YURpciIsImFjdGV1ckJ5VWlkIiwiQWN0ZXVyc0V0T3JnYW5lcyIsImxlZ2lzbGF0dXJlIiwic2VuYXRldXJzIiwiT2JqZWN0IiwidmFsdWVzIiwiZmlsdGVyIiwiYWN0ZXVyIiwibWFuZGF0cyIsIm1hbmRhdFNlbmF0ZXVyIiwibWFuZGF0IiwieHNpVHlwZSIsIk1hbmRhdFBhcmxlbWVudGFpcmVUeXBlIiwidHlwZU9yZ2FuZSIsIlNlbmF0IiwidW5kZWZpbmVkIiwiYWRyZXNzZXMiLCJ1cmwiLCJhZHJlc3NlIiwidHlwZUxpYmVsbGUiLCJ2YWxFbGVjIiwic29ydCIsImEiLCJiIiwidWlkIiwibGVuZ3RoIiwibG9jYWxlQ29tcGFyZSIsImdpdEdyb3VwVXJsIiwiY2xvbmUiLCJ0cmltIiwicmVwbGFjZSIsInBob3Rvc0Rpck5hbWUiLCJwaG90b3NEaXIiLCJqb2luIiwiZW5zdXJlRGlyU3luYyIsImZldGNoIiwibWlzc2luZ1Bob3RvRmlsZVBhdGgiLCJzZW5hdGV1ciIsImlkZW50IiwiZXRhdENpdmlsIiwic2VuYXRldXJTdGVtIiwic3RlbUZyb21TZW5hdGV1ciIsInBob3RvRmlsZW5hbWUiLCJwaG90b0ZpbGVQYXRoIiwicGhvdG9UZW1wRmlsZW5hbWUiLCJwaG90b1RlbXBGaWxlUGF0aCIsInVybFBob3RvIiwic2lsZW50IiwibG9nIiwicHJlbm9tIiwibm9tIiwicmVuYW1lU3luYyIsImV4aXN0c1N5bmMiLCJ3YXJuIiwiY29weUZpbGVTeW5jIiwicGhvdG9CeUlkU2VuYXRldXIiLCJyb3dzRmlsZW5hbWVzIiwic2VuYXRldXJJbmRleCIsInJvd0luZGV4Iiwicm93Iiwic2xpY2UiLCJwaG90b3NGaWxlbmFtZXMiLCJjb2x1bW5JbmRleCIsImVudHJpZXMiLCJwdXNoIiwiY2hlbWluIiwiY2hlbWluTW9zYWlxdWUiLCJoYXV0ZXVyIiwibGFyZ2V1ciIsInhNb3NhaXF1ZSIsInlNb3NhaXF1ZSIsInJvd0ZpbGVuYW1lIiwidW5saW5rU3luYyIsImpzb25GaWxlUGF0aCIsIndyaXRlRmlsZVN5bmMiLCJKU09OIiwic3RyaW5naWZ5IiwibWF0Y2giLCJ0aGVuIiwiZXhpdCIsImNhdGNoIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmlwdHMvcmV0cmlldmVfc2VuYXRldXJzX3Bob3Rvcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGlsZFByb2Nlc3MsIGV4ZWNTeW5jIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIlxuaW1wb3J0IGNvbW1hbmRMaW5lQXJncyBmcm9tIFwiY29tbWFuZC1saW5lLWFyZ3NcIlxuaW1wb3J0IGZzIGZyb20gXCJmcy1leHRyYVwiXG4vLyBpbXBvcnQgZmV0Y2ggZnJvbSBcIm5vZGUtZmV0Y2hcIlxuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIlxuLy8gaW1wb3J0IHN0cmVhbSBmcm9tIFwic3RyZWFtXCJcbi8vIGltcG9ydCB1dGlsIGZyb20gXCJ1dGlsXCJcblxuaW1wb3J0IHsgRW5hYmxlZERhdGFzZXRzIH0gZnJvbSBcIi4uL2RhdGFzZXRzXCJcbmltcG9ydCB7IGxvYWRBc3NlbWJsZWVEYXRhIH0gZnJvbSBcIi4uL2xvYWRlcnNcIlxuaW1wb3J0IHtcbiAgQWN0ZXVyLFxuICBDb2RlVHlwZU9yZ2FuZSxcbiAgTWFuZGF0LFxuICBQaG90byxcbiAgVHlwZU1hbmRhdCxcbn0gZnJvbSBcIi4uL3R5cGVzL2FjdGV1cnNfZXRfb3JnYW5lc1wiXG5cbmNvbnN0IG9wdGlvbnNEZWZpbml0aW9ucyA9IFtcbiAge1xuICAgIGFsaWFzOiBcIkNcIixcbiAgICBoZWxwOiBcImNsb25lIHJlcG9zaXRvcmllcyBmcm9tIGdpdmVuIGdyb3VwIChvciBvcmdhbml6YXRpb24pIGdpdCBVUkxcIixcbiAgICBuYW1lOiBcImNsb25lXCIsXG4gICAgdHlwZTogU3RyaW5nLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwiY1wiLFxuICAgIGhlbHA6IFwiY29tbWl0IHBob3Rvc1wiLFxuICAgIG5hbWU6IFwiY29tbWl0XCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcImZcIixcbiAgICBoZWxwOiBcImZldGNoIHPDqW5hdGV1cnMnIHBpY3R1cmVzIGluc3RlYWQgb2YgcmV0cmlldmluZyB0aGVtIGZyb20gZmlsZXNcIixcbiAgICBuYW1lOiBcImZldGNoXCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcInJcIixcbiAgICBoZWxwOiBcInB1c2ggY29tbWl0IHRvIGdpdmVuIHJlbW90ZVwiLFxuICAgIG11bHRpcGxlOiB0cnVlLFxuICAgIG5hbWU6IFwicmVtb3RlXCIsXG4gICAgdHlwZTogU3RyaW5nLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwic1wiLFxuICAgIGhlbHA6IFwiZG9uJ3QgbG9nIGFueXRoaW5nXCIsXG4gICAgbmFtZTogXCJzaWxlbnRcIixcbiAgICB0eXBlOiBCb29sZWFuLFxuICB9LFxuICB7XG4gICAgZGVmYXVsdE9wdGlvbjogdHJ1ZSxcbiAgICBoZWxwOiBcImRpcmVjdG9yeSBjb250YWluaW5nIEFzc2VtYmzDqWUgb3BlbiBkYXRhIGZpbGVzXCIsXG4gICAgbmFtZTogXCJkYXRhRGlyXCIsXG4gICAgdHlwZTogU3RyaW5nLFxuICB9LFxuXVxuY29uc3Qgb3B0aW9ucyA9IGNvbW1hbmRMaW5lQXJncyhvcHRpb25zRGVmaW5pdGlvbnMpXG4vLyBjb25zdCBwaXBlbGluZSA9IHV0aWwucHJvbWlzaWZ5KHN0cmVhbS5waXBlbGluZSlcblxuZnVuY3Rpb24gY29tbWl0QW5kUHVzaChcbiAgcmVwb3NpdG9yeURpcjogc3RyaW5nLFxuICBjb21taXQ6IGJvb2xlYW4sXG4gIHJlbW90ZXM/OiBzdHJpbmdbXSxcbik6IGJvb2xlYW4ge1xuICBsZXQgZXJyb3IgPSBmYWxzZVxuICBpZiAoY29tbWl0KSB7XG4gICAgZXhlY1N5bmMoXCJnaXQgYWRkIC5cIiwge1xuICAgICAgY3dkOiByZXBvc2l0b3J5RGlyLFxuICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICB9KVxuICAgIHRyeSB7XG4gICAgICBleGVjU3luYygnZ2l0IGNvbW1pdCAtbSBcIk5vdXZlbGxlIG1vaXNzb25cIicsIHtcbiAgICAgICAgY3dkOiByZXBvc2l0b3J5RGlyLFxuICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgfSlcbiAgICB9IGNhdGNoIChjaGlsZFByb2Nlc3MpIHtcbiAgICAgIGlmIChcbiAgICAgICAgKGNoaWxkUHJvY2VzcyBhcyBDaGlsZFByb2Nlc3MpLnN0ZGVyciA9PT0gbnVsbCB8fFxuICAgICAgICAhL25vdGhpbmcgdG8gY29tbWl0Ly50ZXN0KChjaGlsZFByb2Nlc3MgYXMgYW55KS5zdGRvdXQpXG4gICAgICApIHtcbiAgICAgICAgY29uc29sZS5lcnJvcigoY2hpbGRQcm9jZXNzIGFzIGFueSkub3V0cHV0KVxuICAgICAgICB0aHJvdyBjaGlsZFByb2Nlc3NcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCByZW1vdGUgb2YgcmVtb3RlcyB8fCBbXSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBwdXNoICR7cmVtb3RlfSBtYXN0ZXJgLCB7XG4gICAgICAgICAgY3dkOiByZXBvc2l0b3J5RGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH0gY2F0Y2ggKGNoaWxkUHJvY2Vzcykge1xuICAgICAgICAvLyBEb24ndCBzdG9wIHdoZW4gcHVzaCBmYWlscy5cbiAgICAgICAgY29uc29sZS5lcnJvcigoY2hpbGRQcm9jZXNzIGFzIGFueSkub3V0cHV0KVxuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGVycm9yXG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJldHJpZXZlUGhvdG9zU2VuYXRldXJzKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBkYXRhRGlyID0gb3B0aW9ucy5kYXRhRGlyXG4gIGNvbnN0IHsgYWN0ZXVyQnlVaWQgfSA9IGxvYWRBc3NlbWJsZWVEYXRhKFxuICAgIGRhdGFEaXIsXG4gICAgRW5hYmxlZERhdGFzZXRzLkFjdGV1cnNFdE9yZ2FuZXMsXG4gICAgb3B0aW9ucy5sZWdpc2xhdHVyZSxcbiAgKVxuICBjb25zdCBzZW5hdGV1cnMgPSBPYmplY3QudmFsdWVzKGFjdGV1ckJ5VWlkKVxuICAgIC5maWx0ZXIoKGFjdGV1cikgPT4ge1xuICAgICAgY29uc3QgeyBtYW5kYXRzIH0gPSBhY3RldXJcbiAgICAgIGlmICghbWFuZGF0cykge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1hbmRhdFNlbmF0ZXVyID0gbWFuZGF0cy5maWx0ZXIoXG4gICAgICAgIChtYW5kYXQ6IE1hbmRhdCkgPT5cbiAgICAgICAgICBtYW5kYXQueHNpVHlwZSA9PT0gVHlwZU1hbmRhdC5NYW5kYXRQYXJsZW1lbnRhaXJlVHlwZSAmJlxuICAgICAgICAgIC8vIG1hbmRhdC5sZWdpc2xhdHVyZSA9PT0gb3B0aW9ucy5sZWdpc2xhdHVyZSAmJlxuICAgICAgICAgIG1hbmRhdC50eXBlT3JnYW5lID09PSBDb2RlVHlwZU9yZ2FuZS5TZW5hdCxcbiAgICAgIClbMF1cbiAgICAgIGlmIChtYW5kYXRTZW5hdGV1ciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgICAgY29uc3QgeyBhZHJlc3NlcyB9ID0gYWN0ZXVyXG4gICAgICBpZiAoYWRyZXNzZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICAgIGxldCB1cmwgPSBudWxsXG4gICAgICBmb3IgKGNvbnN0IGFkcmVzc2Ugb2YgYWRyZXNzZXMpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGFkcmVzc2UueHNpVHlwZSA9PT0gXCJBZHJlc3NlU2l0ZVdlYl9UeXBlXCIgJiZcbiAgICAgICAgICBhZHJlc3NlLnR5cGVMaWJlbGxlID09PSBcIlVybCBzw6luYXRldXJcIlxuICAgICAgICApIHtcbiAgICAgICAgICB1cmwgPSBhZHJlc3NlLnZhbEVsZWNcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIEJvb2xlYW4odXJsKVxuICAgIH0pXG4gICAgLnNvcnQoKGEsIGIpID0+XG4gICAgICBhLnVpZC5sZW5ndGggPT09IGIudWlkLmxlbmd0aFxuICAgICAgICA/IGEudWlkLmxvY2FsZUNvbXBhcmUoYi51aWQpXG4gICAgICAgIDogYS51aWQubGVuZ3RoIC0gYi51aWQubGVuZ3RoLFxuICAgIClcblxuICBjb25zdCBnaXRHcm91cFVybCA9IG9wdGlvbnMuY2xvbmVcbiAgICA/IG9wdGlvbnMuY2xvbmUudHJpbSgpLnJlcGxhY2UoL1xcLyskLywgXCJcIilcbiAgICA6IHVuZGVmaW5lZFxuICBjb25zdCBwaG90b3NEaXJOYW1lID0gXCJwaG90b3Nfc2VuYXRldXJzXCJcbiAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7cGhvdG9zRGlyTmFtZX0uZ2l0YCwge1xuICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICB9KVxuICB9XG4gIGNvbnN0IHBob3Rvc0RpciA9IHBhdGguam9pbihkYXRhRGlyLCBwaG90b3NEaXJOYW1lKVxuXG4gIC8vIERvd25sb2FkIHBob3Rvcy5cbiAgZnMuZW5zdXJlRGlyU3luYyhwaG90b3NEaXIpXG4gIGlmIChvcHRpb25zLmZldGNoKSB7XG4gICAgY29uc3QgbWlzc2luZ1Bob3RvRmlsZVBhdGggPSBcImltYWdlcy90cmFuc3BhcmVudF8xNTV4MjI1LmpwZ1wiXG4gICAgZm9yIChjb25zdCBzZW5hdGV1ciBvZiBzZW5hdGV1cnMpIHtcbiAgICAgIGNvbnN0IGlkZW50ID0gc2VuYXRldXIuZXRhdENpdmlsLmlkZW50XG4gICAgICBjb25zdCBzZW5hdGV1clN0ZW0gPSBzdGVtRnJvbVNlbmF0ZXVyKHNlbmF0ZXVyKVxuICAgICAgY29uc3QgcGhvdG9GaWxlbmFtZSA9IGAke3NlbmF0ZXVyU3RlbX0uanBnYFxuICAgICAgY29uc3QgcGhvdG9GaWxlUGF0aCA9IHBhdGguam9pbihwaG90b3NEaXIsIHBob3RvRmlsZW5hbWUpXG4gICAgICBjb25zdCBwaG90b1RlbXBGaWxlbmFtZSA9IGAke3NlbmF0ZXVyU3RlbX1fdGVtcC5qcGdgXG4gICAgICBjb25zdCBwaG90b1RlbXBGaWxlUGF0aCA9IHBhdGguam9pbihwaG90b3NEaXIsIHBob3RvVGVtcEZpbGVuYW1lKVxuICAgICAgY29uc3QgdXJsUGhvdG8gPSBgaHR0cHM6Ly93d3cuc2VuYXQuZnIvc2VuaW1nLyR7cGhvdG9GaWxlbmFtZX1gXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGBMb2FkaW5nIHBob3RvICR7dXJsUGhvdG99IGZvciAke2lkZW50LnByZW5vbX0gJHtpZGVudC5ub2194oCmYCxcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgLy8gZm9yIChsZXQgcmV0cmllcyA9IDA7IHJldHJpZXMgPCAzOyByZXRyaWVzKyspIHtcbiAgICAgIC8vICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmxQaG90bylcbiAgICAgIC8vICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICAvLyAgICAgYXdhaXQgcGlwZWxpbmUocmVzcG9uc2UuYm9keSwgZnMuY3JlYXRlV3JpdGVTdHJlYW0ocGhvdG9UZW1wRmlsZVBhdGgpKVxuICAgICAgLy8gICAgIGZzLnJlbmFtZVN5bmMocGhvdG9UZW1wRmlsZVBhdGgsIHBob3RvRmlsZVBhdGgpXG4gICAgICAvLyAgICAgYnJlYWtcbiAgICAgIC8vICAgfVxuICAgICAgLy8gICBpZiAocmV0cmllcyA+PSAyKSB7XG4gICAgICAvLyAgICAgY29uc29sZS53YXJuKGBGZXRjaCBmYWlsZWQ6ICR7dXJsUGhvdG99ICgke2lkZW50LnByZW5vbX0gJHtpZGVudC5ub219KWApXG4gICAgICAvLyAgICAgY29uc29sZS53YXJuKHJlc3BvbnNlLnN0YXR1cywgcmVzcG9uc2Uuc3RhdHVzVGV4dClcbiAgICAgIC8vICAgICBjb25zb2xlLndhcm4oYXdhaXQgcmVzcG9uc2UudGV4dCgpKVxuICAgICAgLy8gICAgIGlmIChmcy5leGlzdHNTeW5jKHBob3RvRmlsZVBhdGgpKSB7XG4gICAgICAvLyAgICAgICBjb25zb2xlLndhcm4oXCIgID0+IFJldXNpbmcgZXhpc3RpbmcgaW1hZ2VcIilcbiAgICAgIC8vICAgICB9IGVsc2Uge1xuICAgICAgLy8gICAgICAgY29uc29sZS53YXJuKFwiICA9PiBVc2luZyBibGFuayBpbWFnZVwiKVxuICAgICAgLy8gICAgICAgZnMuY29weUZpbGVTeW5jKG1pc3NpbmdQaG90b0ZpbGVQYXRoLCBwaG90b0ZpbGVQYXRoKVxuICAgICAgLy8gICAgIH1cbiAgICAgIC8vICAgICBicmVha1xuICAgICAgLy8gICB9XG4gICAgICAvLyB9XG4gICAgICB0cnkge1xuICAgICAgICBleGVjU3luYyhgd2dldCAtLXF1aWV0IC1PICR7cGhvdG9UZW1wRmlsZW5hbWV9ICR7dXJsUGhvdG99YCwge1xuICAgICAgICAgIGN3ZDogcGhvdG9zRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICAvLyBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgICAgZnMucmVuYW1lU3luYyhwaG90b1RlbXBGaWxlUGF0aCwgcGhvdG9GaWxlUGF0aClcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgIGlmIChmcy5leGlzdHNTeW5jKHBob3RvRmlsZVBhdGgpKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFwiICA9PiBSZXVzaW5nIGV4aXN0aW5nIGltYWdlXCIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFwiICA9PiBVc2luZyBibGFuayBpbWFnZVwiKVxuICAgICAgICAgIGZzLmNvcHlGaWxlU3luYyhtaXNzaW5nUGhvdG9GaWxlUGF0aCwgcGhvdG9GaWxlUGF0aClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFJlc2l6ZSBwaG90b3MgdG8gMTU1eDIyNSwgYmVjYXVzZSBzb21lIGhhdmVuJ3QgZXhhY3RseSB0aGlzIHNpemUuXG4gIGZvciAoY29uc3Qgc2VuYXRldXIgb2Ygc2VuYXRldXJzKSB7XG4gICAgY29uc3QgaWRlbnQgPSBzZW5hdGV1ci5ldGF0Q2l2aWwuaWRlbnRcbiAgICBjb25zdCBzZW5hdGV1clN0ZW0gPSBzdGVtRnJvbVNlbmF0ZXVyKHNlbmF0ZXVyKVxuICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBgUmVzaXppbmcgcGhvdG8gJHtzZW5hdGV1clN0ZW19IGZvciAke2lkZW50LnByZW5vbX0gJHtpZGVudC5ub2194oCmYCxcbiAgICAgIClcbiAgICB9XG4gICAgZXhlY1N5bmMoXG4gICAgICBgZ20gY29udmVydCAtcmVzaXplIDE1NXgyMjUhICR7c2VuYXRldXJTdGVtfS5qcGcgJHtzZW5hdGV1clN0ZW19XzE1NXgyMjUuanBnYCxcbiAgICAgIHtcbiAgICAgICAgY3dkOiBwaG90b3NEaXIsXG4gICAgICB9LFxuICAgIClcbiAgfVxuXG4gIC8vIENyZWF0ZSBhIG1vc2FpYyBvZiBwaG90b3MuXG4gIGNvbnN0IHBob3RvQnlJZFNlbmF0ZXVyOiB7IFt1aWQ6IHN0cmluZ106IFBob3RvIH0gPSB7fVxuICBjb25zdCByb3dzRmlsZW5hbWVzOiBzdHJpbmdbXSA9IFtdXG4gIGZvciAoXG4gICAgbGV0IHNlbmF0ZXVySW5kZXggPSAwLCByb3dJbmRleCA9IDA7XG4gICAgc2VuYXRldXJJbmRleCA8IHNlbmF0ZXVycy5sZW5ndGg7XG4gICAgc2VuYXRldXJJbmRleCArPSAyNSwgcm93SW5kZXgrK1xuICApIHtcbiAgICBjb25zdCByb3cgPSBzZW5hdGV1cnMuc2xpY2Uoc2VuYXRldXJJbmRleCwgc2VuYXRldXJJbmRleCArIDI1KVxuICAgIGNvbnN0IHBob3Rvc0ZpbGVuYW1lczogc3RyaW5nW10gPSBbXVxuICAgIGZvciAoY29uc3QgW2NvbHVtbkluZGV4LCBzZW5hdGV1cl0gb2Ygcm93LmVudHJpZXMoKSkge1xuICAgICAgY29uc3Qgc2VuYXRldXJTdGVtID0gc3RlbUZyb21TZW5hdGV1cihzZW5hdGV1cilcbiAgICAgIGNvbnN0IHBob3RvRmlsZW5hbWUgPSBgJHtzZW5hdGV1clN0ZW19XzE1NXgyMjUuanBnYFxuICAgICAgcGhvdG9zRmlsZW5hbWVzLnB1c2gocGhvdG9GaWxlbmFtZSlcbiAgICAgIHBob3RvQnlJZFNlbmF0ZXVyW3NlbmF0ZXVyLnVpZF0gPSB7XG4gICAgICAgIGNoZW1pbjogYHBob3Rvc19zZW5hdGV1cnMvJHtwaG90b0ZpbGVuYW1lfWAsXG4gICAgICAgIGNoZW1pbk1vc2FpcXVlOiBgcGhvdG9zX3NlbmF0ZXVycy9zZW5hdGV1cnMuanBnYCxcbiAgICAgICAgaGF1dGV1cjogMjI1LFxuICAgICAgICBsYXJnZXVyOiAxNTUsXG4gICAgICAgIHhNb3NhaXF1ZTogY29sdW1uSW5kZXggKiAxNTUsXG4gICAgICAgIHlNb3NhaXF1ZTogcm93SW5kZXggKiAyMjUsXG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHJvd0ZpbGVuYW1lID0gYHJvdy0ke3Jvd0luZGV4fS5qcGdgXG4gICAgZXhlY1N5bmMoYGdtIGNvbnZlcnQgJHtwaG90b3NGaWxlbmFtZXMuam9pbihcIiBcIil9ICthcHBlbmQgJHtyb3dGaWxlbmFtZX1gLCB7XG4gICAgICBjd2Q6IHBob3Rvc0RpcixcbiAgICB9KVxuICAgIHJvd3NGaWxlbmFtZXMucHVzaChyb3dGaWxlbmFtZSlcbiAgfVxuICBleGVjU3luYyhgZ20gY29udmVydCAke3Jvd3NGaWxlbmFtZXMuam9pbihcIiBcIil9IC1hcHBlbmQgc2VuYXRldXJzLmpwZ2AsIHtcbiAgICBjd2Q6IHBob3Rvc0RpcixcbiAgfSlcbiAgZm9yIChjb25zdCByb3dGaWxlbmFtZSBvZiByb3dzRmlsZW5hbWVzKSB7XG4gICAgZnMudW5saW5rU3luYyhwYXRoLmpvaW4ocGhvdG9zRGlyLCByb3dGaWxlbmFtZSkpXG4gIH1cblxuICBjb25zdCBqc29uRmlsZVBhdGggPSBwYXRoLmpvaW4ocGhvdG9zRGlyLCBcInNlbmF0ZXVycy5qc29uXCIpXG4gIGZzLndyaXRlRmlsZVN5bmMoanNvbkZpbGVQYXRoLCBKU09OLnN0cmluZ2lmeShwaG90b0J5SWRTZW5hdGV1ciwgbnVsbCwgMikpXG5cbiAgcmV0dXJuIGNvbW1pdEFuZFB1c2gocGhvdG9zRGlyLCBvcHRpb25zLmNvbW1pdCwgb3B0aW9ucy5yZW1vdGUpXG59XG5cbmZ1bmN0aW9uIHN0ZW1Gcm9tU2VuYXRldXIoc2VuYXRldXI6IEFjdGV1cikge1xuICBjb25zdCB7IGFkcmVzc2VzIH0gPSBzZW5hdGV1clxuICBsZXQgdXJsID0gbnVsbFxuICBmb3IgKGNvbnN0IGFkcmVzc2Ugb2YgYWRyZXNzZXMhKSB7XG4gICAgaWYgKFxuICAgICAgYWRyZXNzZS54c2lUeXBlID09PSBcIkFkcmVzc2VTaXRlV2ViX1R5cGVcIiAmJlxuICAgICAgYWRyZXNzZS50eXBlTGliZWxsZSA9PT0gXCJVcmwgc8OpbmF0ZXVyXCJcbiAgICApIHtcbiAgICAgIHVybCA9IGFkcmVzc2UudmFsRWxlY1xuICAgIH1cbiAgfVxuICBjb25zdCBtYXRjaCA9IHVybCEubWF0Y2goL15odHRwczpcXC9cXC93d3dcXC5zZW5hdFxcLmZyXFwvc2VuYXRldXJcXC8oLiopXFwuaHRtbCQvKVxuICBjb25zdCBzZW5hdGV1clN0ZW0gPSBtYXRjaCFbMV1cbiAgcmV0dXJuIHNlbmF0ZXVyU3RlbVxufVxuXG5yZXRyaWV2ZVBob3Rvc1NlbmF0ZXVycygpXG4gIC50aGVuKChlcnJvcikgPT4gcHJvY2Vzcy5leGl0KGVycm9yID8gMSA6IDApKVxuICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgY29uc29sZS5sb2coZXJyb3IpXG4gICAgcHJvY2Vzcy5leGl0KDIpXG4gIH0pXG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQXVCQSxRQUF2QixRQUF1QyxlQUF2QztBQUNBLE9BQU9DLGVBQVAsTUFBNEIsbUJBQTVCO0FBQ0EsT0FBT0MsRUFBUCxNQUFlLFVBQWYsQyxDQUNB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
|
|
249
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleGVjU3luYyIsImNvbW1hbmRMaW5lQXJncyIsImZzIiwicGF0aCIsIkVuYWJsZWREYXRhc2V0cyIsImxvYWRBc3NlbWJsZWVEYXRhIiwiQ29kZVR5cGVPcmdhbmUiLCJUeXBlTWFuZGF0Iiwib3B0aW9uc0RlZmluaXRpb25zIiwiYWxpYXMiLCJoZWxwIiwibmFtZSIsInR5cGUiLCJTdHJpbmciLCJCb29sZWFuIiwibXVsdGlwbGUiLCJkZWZhdWx0T3B0aW9uIiwib3B0aW9ucyIsImNvbW1pdEFuZFB1c2giLCJyZXBvc2l0b3J5RGlyIiwiY29tbWl0IiwicmVtb3RlcyIsImVycm9yIiwiY3dkIiwiZW52IiwicHJvY2VzcyIsImVuY29kaW5nIiwic3RkaW8iLCJjaGlsZFByb2Nlc3MiLCJzdGRlcnIiLCJ0ZXN0Iiwic3Rkb3V0IiwiY29uc29sZSIsIm91dHB1dCIsInJlbW90ZSIsInJldHJpZXZlUGhvdG9zU2VuYXRldXJzIiwiZGF0YURpciIsImFjdGV1ckJ5VWlkIiwiQWN0ZXVyc0V0T3JnYW5lcyIsImxlZ2lzbGF0dXJlIiwic2VuYXRldXJzIiwiT2JqZWN0IiwidmFsdWVzIiwiZmlsdGVyIiwiYWN0ZXVyIiwibWFuZGF0cyIsIm1hbmRhdFNlbmF0ZXVyIiwibWFuZGF0IiwieHNpVHlwZSIsIk1hbmRhdFBhcmxlbWVudGFpcmVUeXBlIiwidHlwZU9yZ2FuZSIsIlNlbmF0IiwidW5kZWZpbmVkIiwiYWRyZXNzZXMiLCJ1cmwiLCJhZHJlc3NlIiwidHlwZUxpYmVsbGUiLCJ2YWxFbGVjIiwic29ydCIsImEiLCJiIiwidWlkIiwibGVuZ3RoIiwibG9jYWxlQ29tcGFyZSIsImdpdEdyb3VwVXJsIiwiY2xvbmUiLCJ0cmltIiwicmVwbGFjZSIsInBob3Rvc0Rpck5hbWUiLCJwaG90b3NEaXIiLCJqb2luIiwiZW5zdXJlRGlyU3luYyIsImZldGNoIiwibWlzc2luZ1Bob3RvRmlsZVBhdGgiLCJzZW5hdGV1ciIsImlkZW50IiwiZXRhdENpdmlsIiwic2VuYXRldXJTdGVtIiwic3RlbUZyb21TZW5hdGV1ciIsInBob3RvRmlsZW5hbWUiLCJwaG90b0ZpbGVQYXRoIiwicGhvdG9UZW1wRmlsZW5hbWUiLCJwaG90b1RlbXBGaWxlUGF0aCIsInVybFBob3RvIiwic2lsZW50IiwibG9nIiwicHJlbm9tIiwibm9tIiwicmVuYW1lU3luYyIsImV4aXN0c1N5bmMiLCJ3YXJuIiwiY29weUZpbGVTeW5jIiwicGhvdG9CeUlkU2VuYXRldXIiLCJyb3dzRmlsZW5hbWVzIiwic2VuYXRldXJJbmRleCIsInJvd0luZGV4Iiwicm93Iiwic2xpY2UiLCJwaG90b3NGaWxlbmFtZXMiLCJjb2x1bW5JbmRleCIsImVudHJpZXMiLCJwdXNoIiwiY2hlbWluIiwiY2hlbWluTW9zYWlxdWUiLCJoYXV0ZXVyIiwibGFyZ2V1ciIsInhNb3NhaXF1ZSIsInlNb3NhaXF1ZSIsInJvd0ZpbGVuYW1lIiwidW5saW5rU3luYyIsImpzb25GaWxlUGF0aCIsIndyaXRlRmlsZVN5bmMiLCJKU09OIiwic3RyaW5naWZ5IiwibWF0Y2giLCJ0aGVuIiwiZXhpdCIsImNhdGNoIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmlwdHMvcmV0cmlldmVfc2VuYXRldXJzX3Bob3Rvcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGlsZFByb2Nlc3MsIGV4ZWNTeW5jIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIlxuaW1wb3J0IGNvbW1hbmRMaW5lQXJncyBmcm9tIFwiY29tbWFuZC1saW5lLWFyZ3NcIlxuaW1wb3J0IGZzIGZyb20gXCJmcy1leHRyYVwiXG4vLyBpbXBvcnQgZmV0Y2ggZnJvbSBcIm5vZGUtZmV0Y2hcIlxuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIlxuLy8gaW1wb3J0IHN0cmVhbSBmcm9tIFwic3RyZWFtXCJcbi8vIGltcG9ydCB1dGlsIGZyb20gXCJ1dGlsXCJcblxuaW1wb3J0IHsgRW5hYmxlZERhdGFzZXRzIH0gZnJvbSBcIi4uL2RhdGFzZXRzXCJcbmltcG9ydCB7IGxvYWRBc3NlbWJsZWVEYXRhIH0gZnJvbSBcIi4uL2xvYWRlcnNcIlxuaW1wb3J0IHtcbiAgQWN0ZXVyLFxuICBDb2RlVHlwZU9yZ2FuZSxcbiAgTWFuZGF0LFxuICBQaG90byxcbiAgVHlwZU1hbmRhdCxcbn0gZnJvbSBcIi4uL3R5cGVzL2FjdGV1cnNfZXRfb3JnYW5lc1wiXG5cbmNvbnN0IG9wdGlvbnNEZWZpbml0aW9ucyA9IFtcbiAge1xuICAgIGFsaWFzOiBcIkNcIixcbiAgICBoZWxwOiBcImNsb25lIHJlcG9zaXRvcmllcyBmcm9tIGdpdmVuIGdyb3VwIChvciBvcmdhbml6YXRpb24pIGdpdCBVUkxcIixcbiAgICBuYW1lOiBcImNsb25lXCIsXG4gICAgdHlwZTogU3RyaW5nLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwiY1wiLFxuICAgIGhlbHA6IFwiY29tbWl0IHBob3Rvc1wiLFxuICAgIG5hbWU6IFwiY29tbWl0XCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcImZcIixcbiAgICBoZWxwOiBcImZldGNoIHPDqW5hdGV1cnMnIHBpY3R1cmVzIGluc3RlYWQgb2YgcmV0cmlldmluZyB0aGVtIGZyb20gZmlsZXNcIixcbiAgICBuYW1lOiBcImZldGNoXCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcInJcIixcbiAgICBoZWxwOiBcInB1c2ggY29tbWl0IHRvIGdpdmVuIHJlbW90ZVwiLFxuICAgIG11bHRpcGxlOiB0cnVlLFxuICAgIG5hbWU6IFwicmVtb3RlXCIsXG4gICAgdHlwZTogU3RyaW5nLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwic1wiLFxuICAgIGhlbHA6IFwiZG9uJ3QgbG9nIGFueXRoaW5nXCIsXG4gICAgbmFtZTogXCJzaWxlbnRcIixcbiAgICB0eXBlOiBCb29sZWFuLFxuICB9LFxuICB7XG4gICAgZGVmYXVsdE9wdGlvbjogdHJ1ZSxcbiAgICBoZWxwOiBcImRpcmVjdG9yeSBjb250YWluaW5nIEFzc2VtYmzDqWUgb3BlbiBkYXRhIGZpbGVzXCIsXG4gICAgbmFtZTogXCJkYXRhRGlyXCIsXG4gICAgdHlwZTogU3RyaW5nLFxuICB9LFxuXVxuY29uc3Qgb3B0aW9ucyA9IGNvbW1hbmRMaW5lQXJncyhvcHRpb25zRGVmaW5pdGlvbnMpXG4vLyBjb25zdCBwaXBlbGluZSA9IHV0aWwucHJvbWlzaWZ5KHN0cmVhbS5waXBlbGluZSlcblxuZnVuY3Rpb24gY29tbWl0QW5kUHVzaChcbiAgcmVwb3NpdG9yeURpcjogc3RyaW5nLFxuICBjb21taXQ6IGJvb2xlYW4sXG4gIHJlbW90ZXM/OiBzdHJpbmdbXSxcbik6IGJvb2xlYW4ge1xuICBsZXQgZXJyb3IgPSBmYWxzZVxuICBpZiAoY29tbWl0KSB7XG4gICAgZXhlY1N5bmMoXCJnaXQgYWRkIC5cIiwge1xuICAgICAgY3dkOiByZXBvc2l0b3J5RGlyLFxuICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICB9KVxuICAgIHRyeSB7XG4gICAgICBleGVjU3luYygnZ2l0IGNvbW1pdCAtbSBcIk5vdXZlbGxlIG1vaXNzb25cIicsIHtcbiAgICAgICAgY3dkOiByZXBvc2l0b3J5RGlyLFxuICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgfSlcbiAgICB9IGNhdGNoIChjaGlsZFByb2Nlc3MpIHtcbiAgICAgIGlmIChcbiAgICAgICAgKGNoaWxkUHJvY2VzcyBhcyBDaGlsZFByb2Nlc3MpLnN0ZGVyciA9PT0gbnVsbCB8fFxuICAgICAgICAhL25vdGhpbmcgdG8gY29tbWl0Ly50ZXN0KChjaGlsZFByb2Nlc3MgYXMgYW55KS5zdGRvdXQpXG4gICAgICApIHtcbiAgICAgICAgY29uc29sZS5lcnJvcigoY2hpbGRQcm9jZXNzIGFzIGFueSkub3V0cHV0KVxuICAgICAgICB0aHJvdyBjaGlsZFByb2Nlc3NcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCByZW1vdGUgb2YgcmVtb3RlcyB8fCBbXSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBwdXNoICR7cmVtb3RlfSBtYXN0ZXJgLCB7XG4gICAgICAgICAgY3dkOiByZXBvc2l0b3J5RGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH0gY2F0Y2ggKGNoaWxkUHJvY2Vzcykge1xuICAgICAgICAvLyBEb24ndCBzdG9wIHdoZW4gcHVzaCBmYWlscy5cbiAgICAgICAgY29uc29sZS5lcnJvcigoY2hpbGRQcm9jZXNzIGFzIGFueSkub3V0cHV0KVxuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGVycm9yXG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJldHJpZXZlUGhvdG9zU2VuYXRldXJzKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBkYXRhRGlyID0gb3B0aW9ucy5kYXRhRGlyXG4gIGNvbnN0IHsgYWN0ZXVyQnlVaWQgfSA9IGxvYWRBc3NlbWJsZWVEYXRhKFxuICAgIGRhdGFEaXIsXG4gICAgRW5hYmxlZERhdGFzZXRzLkFjdGV1cnNFdE9yZ2FuZXMsXG4gICAgb3B0aW9ucy5sZWdpc2xhdHVyZSxcbiAgKVxuICBjb25zdCBzZW5hdGV1cnMgPSBPYmplY3QudmFsdWVzKGFjdGV1ckJ5VWlkKVxuICAgIC5maWx0ZXIoKGFjdGV1cikgPT4ge1xuICAgICAgY29uc3QgeyBtYW5kYXRzIH0gPSBhY3RldXJcbiAgICAgIGlmICghbWFuZGF0cykge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1hbmRhdFNlbmF0ZXVyID0gbWFuZGF0cy5maWx0ZXIoXG4gICAgICAgIChtYW5kYXQ6IE1hbmRhdCkgPT5cbiAgICAgICAgICBtYW5kYXQueHNpVHlwZSA9PT0gVHlwZU1hbmRhdC5NYW5kYXRQYXJsZW1lbnRhaXJlVHlwZSAmJlxuICAgICAgICAgIC8vIG1hbmRhdC5sZWdpc2xhdHVyZSA9PT0gb3B0aW9ucy5sZWdpc2xhdHVyZSAmJlxuICAgICAgICAgIG1hbmRhdC50eXBlT3JnYW5lID09PSBDb2RlVHlwZU9yZ2FuZS5TZW5hdCxcbiAgICAgIClbMF1cbiAgICAgIGlmIChtYW5kYXRTZW5hdGV1ciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgICAgY29uc3QgeyBhZHJlc3NlcyB9ID0gYWN0ZXVyXG4gICAgICBpZiAoYWRyZXNzZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICAgIGxldCB1cmwgPSBudWxsXG4gICAgICBmb3IgKGNvbnN0IGFkcmVzc2Ugb2YgYWRyZXNzZXMpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGFkcmVzc2UueHNpVHlwZSA9PT0gXCJBZHJlc3NlU2l0ZVdlYl9UeXBlXCIgJiZcbiAgICAgICAgICBhZHJlc3NlLnR5cGVMaWJlbGxlID09PSBcIlVybCBzw6luYXRldXJcIlxuICAgICAgICApIHtcbiAgICAgICAgICB1cmwgPSBhZHJlc3NlLnZhbEVsZWNcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIEJvb2xlYW4odXJsKVxuICAgIH0pXG4gICAgLnNvcnQoKGEsIGIpID0+XG4gICAgICBhLnVpZC5sZW5ndGggPT09IGIudWlkLmxlbmd0aFxuICAgICAgICA/IGEudWlkLmxvY2FsZUNvbXBhcmUoYi51aWQpXG4gICAgICAgIDogYS51aWQubGVuZ3RoIC0gYi51aWQubGVuZ3RoLFxuICAgIClcblxuICBjb25zdCBnaXRHcm91cFVybCA9IG9wdGlvbnMuY2xvbmVcbiAgICA/IG9wdGlvbnMuY2xvbmUudHJpbSgpLnJlcGxhY2UoL1xcLyskLywgXCJcIilcbiAgICA6IHVuZGVmaW5lZFxuICBjb25zdCBwaG90b3NEaXJOYW1lID0gXCJwaG90b3Nfc2VuYXRldXJzXCJcbiAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7cGhvdG9zRGlyTmFtZX0uZ2l0YCwge1xuICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICB9KVxuICB9XG4gIGNvbnN0IHBob3Rvc0RpciA9IHBhdGguam9pbihkYXRhRGlyLCBwaG90b3NEaXJOYW1lKVxuXG4gIC8vIERvd25sb2FkIHBob3Rvcy5cbiAgZnMuZW5zdXJlRGlyU3luYyhwaG90b3NEaXIpXG4gIGlmIChvcHRpb25zLmZldGNoKSB7XG4gICAgY29uc3QgbWlzc2luZ1Bob3RvRmlsZVBhdGggPSBcImltYWdlcy90cmFuc3BhcmVudF8xNTV4MjI1LmpwZ1wiXG4gICAgZm9yIChjb25zdCBzZW5hdGV1ciBvZiBzZW5hdGV1cnMpIHtcbiAgICAgIGNvbnN0IGlkZW50ID0gc2VuYXRldXIuZXRhdENpdmlsLmlkZW50XG4gICAgICBjb25zdCBzZW5hdGV1clN0ZW0gPSBzdGVtRnJvbVNlbmF0ZXVyKHNlbmF0ZXVyKVxuICAgICAgY29uc3QgcGhvdG9GaWxlbmFtZSA9IGAke3NlbmF0ZXVyU3RlbX0uanBnYFxuICAgICAgY29uc3QgcGhvdG9GaWxlUGF0aCA9IHBhdGguam9pbihwaG90b3NEaXIsIHBob3RvRmlsZW5hbWUpXG4gICAgICBjb25zdCBwaG90b1RlbXBGaWxlbmFtZSA9IGAke3NlbmF0ZXVyU3RlbX1fdGVtcC5qcGdgXG4gICAgICBjb25zdCBwaG90b1RlbXBGaWxlUGF0aCA9IHBhdGguam9pbihwaG90b3NEaXIsIHBob3RvVGVtcEZpbGVuYW1lKVxuICAgICAgY29uc3QgdXJsUGhvdG8gPSBgaHR0cHM6Ly93d3cuc2VuYXQuZnIvc2VuaW1nLyR7cGhvdG9GaWxlbmFtZX1gXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGBMb2FkaW5nIHBob3RvICR7dXJsUGhvdG99IGZvciAke2lkZW50LnByZW5vbX0gJHtpZGVudC5ub2194oCmYCxcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgLy8gZm9yIChsZXQgcmV0cmllcyA9IDA7IHJldHJpZXMgPCAzOyByZXRyaWVzKyspIHtcbiAgICAgIC8vICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmxQaG90bylcbiAgICAgIC8vICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICAvLyAgICAgYXdhaXQgcGlwZWxpbmUocmVzcG9uc2UuYm9keSwgZnMuY3JlYXRlV3JpdGVTdHJlYW0ocGhvdG9UZW1wRmlsZVBhdGgpKVxuICAgICAgLy8gICAgIGZzLnJlbmFtZVN5bmMocGhvdG9UZW1wRmlsZVBhdGgsIHBob3RvRmlsZVBhdGgpXG4gICAgICAvLyAgICAgYnJlYWtcbiAgICAgIC8vICAgfVxuICAgICAgLy8gICBpZiAocmV0cmllcyA+PSAyKSB7XG4gICAgICAvLyAgICAgY29uc29sZS53YXJuKGBGZXRjaCBmYWlsZWQ6ICR7dXJsUGhvdG99ICgke2lkZW50LnByZW5vbX0gJHtpZGVudC5ub219KWApXG4gICAgICAvLyAgICAgY29uc29sZS53YXJuKHJlc3BvbnNlLnN0YXR1cywgcmVzcG9uc2Uuc3RhdHVzVGV4dClcbiAgICAgIC8vICAgICBjb25zb2xlLndhcm4oYXdhaXQgcmVzcG9uc2UudGV4dCgpKVxuICAgICAgLy8gICAgIGlmIChmcy5leGlzdHNTeW5jKHBob3RvRmlsZVBhdGgpKSB7XG4gICAgICAvLyAgICAgICBjb25zb2xlLndhcm4oXCIgID0+IFJldXNpbmcgZXhpc3RpbmcgaW1hZ2VcIilcbiAgICAgIC8vICAgICB9IGVsc2Uge1xuICAgICAgLy8gICAgICAgY29uc29sZS53YXJuKFwiICA9PiBVc2luZyBibGFuayBpbWFnZVwiKVxuICAgICAgLy8gICAgICAgZnMuY29weUZpbGVTeW5jKG1pc3NpbmdQaG90b0ZpbGVQYXRoLCBwaG90b0ZpbGVQYXRoKVxuICAgICAgLy8gICAgIH1cbiAgICAgIC8vICAgICBicmVha1xuICAgICAgLy8gICB9XG4gICAgICAvLyB9XG4gICAgICB0cnkge1xuICAgICAgICBleGVjU3luYyhgd2dldCAtLXF1aWV0IC1PICR7cGhvdG9UZW1wRmlsZW5hbWV9ICR7dXJsUGhvdG99YCwge1xuICAgICAgICAgIGN3ZDogcGhvdG9zRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICAvLyBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgICAgZnMucmVuYW1lU3luYyhwaG90b1RlbXBGaWxlUGF0aCwgcGhvdG9GaWxlUGF0aClcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgIGlmIChmcy5leGlzdHNTeW5jKHBob3RvRmlsZVBhdGgpKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFwiICA9PiBSZXVzaW5nIGV4aXN0aW5nIGltYWdlXCIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFwiICA9PiBVc2luZyBibGFuayBpbWFnZVwiKVxuICAgICAgICAgIGZzLmNvcHlGaWxlU3luYyhtaXNzaW5nUGhvdG9GaWxlUGF0aCwgcGhvdG9GaWxlUGF0aClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFJlc2l6ZSBwaG90b3MgdG8gMTU1eDIyNSwgYmVjYXVzZSBzb21lIGhhdmVuJ3QgZXhhY3RseSB0aGlzIHNpemUuXG4gIGZvciAoY29uc3Qgc2VuYXRldXIgb2Ygc2VuYXRldXJzKSB7XG4gICAgY29uc3QgaWRlbnQgPSBzZW5hdGV1ci5ldGF0Q2l2aWwuaWRlbnRcbiAgICBjb25zdCBzZW5hdGV1clN0ZW0gPSBzdGVtRnJvbVNlbmF0ZXVyKHNlbmF0ZXVyKVxuICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBgUmVzaXppbmcgcGhvdG8gJHtzZW5hdGV1clN0ZW19IGZvciAke2lkZW50LnByZW5vbX0gJHtpZGVudC5ub2194oCmYCxcbiAgICAgIClcbiAgICB9XG4gICAgZXhlY1N5bmMoXG4gICAgICBgZ20gY29udmVydCAtcmVzaXplIDE1NXgyMjUhICR7c2VuYXRldXJTdGVtfS5qcGcgJHtzZW5hdGV1clN0ZW19XzE1NXgyMjUuanBnYCxcbiAgICAgIHtcbiAgICAgICAgY3dkOiBwaG90b3NEaXIsXG4gICAgICB9LFxuICAgIClcbiAgfVxuXG4gIC8vIENyZWF0ZSBhIG1vc2FpYyBvZiBwaG90b3MuXG4gIGNvbnN0IHBob3RvQnlJZFNlbmF0ZXVyOiB7IFt1aWQ6IHN0cmluZ106IFBob3RvIH0gPSB7fVxuICBjb25zdCByb3dzRmlsZW5hbWVzOiBzdHJpbmdbXSA9IFtdXG4gIGZvciAoXG4gICAgbGV0IHNlbmF0ZXVySW5kZXggPSAwLCByb3dJbmRleCA9IDA7XG4gICAgc2VuYXRldXJJbmRleCA8IHNlbmF0ZXVycy5sZW5ndGg7XG4gICAgc2VuYXRldXJJbmRleCArPSAyNSwgcm93SW5kZXgrK1xuICApIHtcbiAgICBjb25zdCByb3cgPSBzZW5hdGV1cnMuc2xpY2Uoc2VuYXRldXJJbmRleCwgc2VuYXRldXJJbmRleCArIDI1KVxuICAgIGNvbnN0IHBob3Rvc0ZpbGVuYW1lczogc3RyaW5nW10gPSBbXVxuICAgIGZvciAoY29uc3QgW2NvbHVtbkluZGV4LCBzZW5hdGV1cl0gb2Ygcm93LmVudHJpZXMoKSkge1xuICAgICAgY29uc3Qgc2VuYXRldXJTdGVtID0gc3RlbUZyb21TZW5hdGV1cihzZW5hdGV1cilcbiAgICAgIGNvbnN0IHBob3RvRmlsZW5hbWUgPSBgJHtzZW5hdGV1clN0ZW19XzE1NXgyMjUuanBnYFxuICAgICAgcGhvdG9zRmlsZW5hbWVzLnB1c2gocGhvdG9GaWxlbmFtZSlcbiAgICAgIHBob3RvQnlJZFNlbmF0ZXVyW3NlbmF0ZXVyLnVpZF0gPSB7XG4gICAgICAgIGNoZW1pbjogYHBob3Rvc19zZW5hdGV1cnMvJHtwaG90b0ZpbGVuYW1lfWAsXG4gICAgICAgIGNoZW1pbk1vc2FpcXVlOiBgcGhvdG9zX3NlbmF0ZXVycy9zZW5hdGV1cnMuanBnYCxcbiAgICAgICAgaGF1dGV1cjogMjI1LFxuICAgICAgICBsYXJnZXVyOiAxNTUsXG4gICAgICAgIHhNb3NhaXF1ZTogY29sdW1uSW5kZXggKiAxNTUsXG4gICAgICAgIHlNb3NhaXF1ZTogcm93SW5kZXggKiAyMjUsXG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHJvd0ZpbGVuYW1lID0gYHJvdy0ke3Jvd0luZGV4fS5qcGdgXG4gICAgZXhlY1N5bmMoYGdtIGNvbnZlcnQgJHtwaG90b3NGaWxlbmFtZXMuam9pbihcIiBcIil9ICthcHBlbmQgJHtyb3dGaWxlbmFtZX1gLCB7XG4gICAgICBjd2Q6IHBob3Rvc0RpcixcbiAgICB9KVxuICAgIHJvd3NGaWxlbmFtZXMucHVzaChyb3dGaWxlbmFtZSlcbiAgfVxuICBleGVjU3luYyhgZ20gY29udmVydCAke3Jvd3NGaWxlbmFtZXMuam9pbihcIiBcIil9IC1hcHBlbmQgc2VuYXRldXJzLmpwZ2AsIHtcbiAgICBjd2Q6IHBob3Rvc0RpcixcbiAgfSlcbiAgZm9yIChjb25zdCByb3dGaWxlbmFtZSBvZiByb3dzRmlsZW5hbWVzKSB7XG4gICAgZnMudW5saW5rU3luYyhwYXRoLmpvaW4ocGhvdG9zRGlyLCByb3dGaWxlbmFtZSkpXG4gIH1cblxuICBjb25zdCBqc29uRmlsZVBhdGggPSBwYXRoLmpvaW4ocGhvdG9zRGlyLCBcInNlbmF0ZXVycy5qc29uXCIpXG4gIGZzLndyaXRlRmlsZVN5bmMoanNvbkZpbGVQYXRoLCBKU09OLnN0cmluZ2lmeShwaG90b0J5SWRTZW5hdGV1ciwgbnVsbCwgMikpXG5cbiAgcmV0dXJuIGNvbW1pdEFuZFB1c2gocGhvdG9zRGlyLCBvcHRpb25zLmNvbW1pdCwgb3B0aW9ucy5yZW1vdGUpXG59XG5cbmZ1bmN0aW9uIHN0ZW1Gcm9tU2VuYXRldXIoc2VuYXRldXI6IEFjdGV1cikge1xuICBjb25zdCB7IGFkcmVzc2VzIH0gPSBzZW5hdGV1clxuICBsZXQgdXJsID0gbnVsbFxuICBmb3IgKGNvbnN0IGFkcmVzc2Ugb2YgYWRyZXNzZXMhKSB7XG4gICAgaWYgKFxuICAgICAgYWRyZXNzZS54c2lUeXBlID09PSBcIkFkcmVzc2VTaXRlV2ViX1R5cGVcIiAmJlxuICAgICAgYWRyZXNzZS50eXBlTGliZWxsZSA9PT0gXCJVcmwgc8OpbmF0ZXVyXCJcbiAgICApIHtcbiAgICAgIHVybCA9IGFkcmVzc2UudmFsRWxlY1xuICAgIH1cbiAgfVxuICBjb25zdCBtYXRjaCA9IHVybCEubWF0Y2goL15odHRwczpcXC9cXC93d3dcXC5zZW5hdFxcLmZyXFwvc2VuYXRldXJcXC8oLiopXFwuaHRtbCQvKVxuICBjb25zdCBzZW5hdGV1clN0ZW0gPSBtYXRjaCFbMV1cbiAgcmV0dXJuIHNlbmF0ZXVyU3RlbVxufVxuXG5yZXRyaWV2ZVBob3Rvc1NlbmF0ZXVycygpXG4gIC50aGVuKChlcnJvcikgPT4gcHJvY2Vzcy5leGl0KGVycm9yID8gMSA6IDApKVxuICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgY29uc29sZS5sb2coZXJyb3IpXG4gICAgcHJvY2Vzcy5leGl0KDIpXG4gIH0pXG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQXVCQSxRQUFRLFFBQVEsZUFBZTtBQUN0RCxPQUFPQyxlQUFlLE1BQU0sbUJBQW1CO0FBQy9DLE9BQU9DLEVBQUUsTUFBTSxVQUFVO0FBQ3pCO0FB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
|