@speleotica/frcsdata 4.0.0 → 4.0.2
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/FrcsPlotFile.js +5 -1
- package/FrcsPlotShot.js +5 -1
- package/FrcsShot.js +4 -5
- package/FrcsSurveyFile.js +5 -1
- package/FrcsTrip.js +5 -1
- package/FrcsTripSummary.js +5 -1
- package/FrcsTripSummaryFile.js +5 -1
- package/es/FrcsPlotFile.js +5 -1
- package/es/FrcsPlotShot.js +5 -1
- package/es/FrcsShot.js +5 -6
- package/es/FrcsSurveyFile.js +5 -1
- package/es/FrcsTrip.js +5 -1
- package/es/FrcsTripSummary.js +5 -1
- package/es/FrcsTripSummaryFile.js +5 -1
- package/es/formatFrcsShot.js +5 -19
- package/es/formatFrcsShot.spec.js +8 -17
- package/es/index.js +21 -33
- package/es/node/index.js +2 -10
- package/es/node/parseFrcsPlotFile.spec.js +1 -5
- package/es/node/parseFrcsSurveyFile.spec.js +2 -6
- package/es/node/parseFrcsTripSummaryFile.spec.js +1 -5
- package/es/parseFrcsPlotFile.js +1 -26
- package/es/parseFrcsSurveyFile.js +73 -96
- package/es/parseFrcsTripSummaryFile.js +1 -12
- package/es/string/index.js +2 -9
- package/es/string/parseFrcsPlotFile.spec.js +1 -5
- package/es/string/parseFrcsSurveyFile.spec.js +18 -16
- package/formatFrcsShot.js +5 -19
- package/formatFrcsShot.spec.js +4 -15
- package/index.js +20 -32
- package/node/index.js +1 -9
- package/node/parseFrcsPlotFile.spec.js +165 -180
- package/node/parseFrcsSurveyFile.spec.js +306 -321
- package/node/parseFrcsTripSummaryFile.spec.js +83 -106
- package/package.json +15 -15
- package/parseFrcsPlotFile.js +224 -318
- package/parseFrcsSurveyFile.js +437 -452
- package/parseFrcsTripSummaryFile.js +102 -142
- package/string/index.js +10 -27
- package/string/parseFrcsPlotFile.spec.js +165 -180
- package/string/parseFrcsSurveyFile.spec.js +604 -689
- package/yarn.lock +1285 -702
|
@@ -4,106 +4,86 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = parseFrcsSurveyFile;
|
|
7
|
-
|
|
8
7
|
var _parseSegment = require("parse-segment");
|
|
9
|
-
|
|
10
8
|
var _unitized = require("@speleotica/unitized");
|
|
11
|
-
|
|
12
9
|
var _FrcsShot = require("./FrcsShot");
|
|
13
|
-
|
|
14
10
|
function parseNumber(s, unit) {
|
|
15
11
|
const value = parseFloat(s);
|
|
16
12
|
if (isNaN(value)) return null;
|
|
17
13
|
return new _unitized.UnitizedNumber(value, unit);
|
|
18
14
|
}
|
|
19
|
-
|
|
20
15
|
function parseAzimuth(s, unit) {
|
|
21
16
|
const parsed = parseNumber(s, unit);
|
|
22
17
|
return (parsed === null || parsed === void 0 ? void 0 : parsed.get(_unitized.Angle.degrees)) === 360 ? _unitized.Unitize.degrees(0) : parsed;
|
|
23
18
|
}
|
|
24
|
-
|
|
25
19
|
function parseKind(kind) {
|
|
26
20
|
switch (kind) {
|
|
27
21
|
case 'H':
|
|
28
22
|
return _FrcsShot.FrcsShotKind.Horizontal;
|
|
29
|
-
|
|
30
23
|
case 'D':
|
|
31
24
|
return _FrcsShot.FrcsShotKind.Diagonal;
|
|
32
|
-
|
|
33
25
|
default:
|
|
34
26
|
return _FrcsShot.FrcsShotKind.Normal;
|
|
35
27
|
}
|
|
36
28
|
}
|
|
37
|
-
|
|
38
29
|
function parseLengthUnit(unit) {
|
|
39
30
|
switch (unit) {
|
|
40
31
|
case 'FI':
|
|
41
32
|
return _unitized.Length.inches;
|
|
42
|
-
|
|
33
|
+
case 'FF':
|
|
43
34
|
case 'FT':
|
|
44
35
|
return _unitized.Length.feet;
|
|
45
|
-
|
|
36
|
+
case 'MT':
|
|
46
37
|
case 'M ':
|
|
47
38
|
return _unitized.Length.meters;
|
|
48
39
|
}
|
|
49
|
-
|
|
50
40
|
return null;
|
|
51
41
|
}
|
|
52
|
-
|
|
53
42
|
function parseAngleUnit(unit) {
|
|
54
43
|
switch (unit) {
|
|
55
44
|
case 'D':
|
|
56
45
|
return _unitized.Angle.degrees;
|
|
57
|
-
|
|
58
46
|
case 'G':
|
|
59
47
|
return _unitized.Angle.gradians;
|
|
60
|
-
|
|
61
48
|
case 'M':
|
|
62
49
|
return _unitized.Angle.milsNATO;
|
|
63
50
|
}
|
|
64
|
-
|
|
65
51
|
return null;
|
|
66
|
-
}
|
|
67
|
-
|
|
52
|
+
}
|
|
68
53
|
|
|
54
|
+
// determines if a cell contains a valid station name.
|
|
69
55
|
function isValidStation(s) {
|
|
70
56
|
return /^\s*\S+\s*$/.test(s);
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
|
|
57
|
+
}
|
|
58
|
+
// determines if a cell contains a valid unsigned integer.
|
|
74
59
|
function isValidUInt(s) {
|
|
75
60
|
return /^\s*[0-9]+\s*$/.test(s);
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
|
|
61
|
+
}
|
|
62
|
+
// determines if a cell contains a valid float.
|
|
79
63
|
function isValidFloat(s) {
|
|
80
64
|
return /^\s*[-+]?([0-9]+(\.[0-9]*)?|\.[0-9]+)\s*$/.test(s);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
|
|
65
|
+
}
|
|
66
|
+
// determines if a cell contains a valid unsigned float or whitespace.
|
|
84
67
|
function isValidOptFloat(s) {
|
|
85
68
|
return /^\s*[-+]?[0-9]*(\.[0-9]*)?\s*$/.test(s);
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
|
|
69
|
+
}
|
|
70
|
+
// determines if a cell contains a valid unsigned float or whitespace.
|
|
89
71
|
function isValidOptUFloat(s) {
|
|
90
72
|
return /^\s*[0-9]*(\.[0-9]*)?\s*$/.test(s);
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
|
|
73
|
+
}
|
|
74
|
+
// determines if a cell contains a valid unsigned float.
|
|
94
75
|
function isValidUFloat(s) {
|
|
95
76
|
return /^\s*([0-9]+(\.[0-9]*)?|\.[0-9]+)\s*$/.test(s);
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
|
|
77
|
+
}
|
|
78
|
+
// determines if a cell contains a valid inclination or whitespace.
|
|
99
79
|
function isValidOptInclination(s) {
|
|
100
80
|
return /^\s*[-+]?[0-9]*(\.[0-9]*)?\s*$/.test(s);
|
|
101
81
|
}
|
|
102
|
-
|
|
103
82
|
function parseLrud(s, unit) {
|
|
104
83
|
const value = parseFloat(s);
|
|
105
84
|
return !Number.isFinite(value) || value < 0 ? null : new _unitized.UnitizedNumber(value, unit);
|
|
106
85
|
}
|
|
86
|
+
|
|
107
87
|
/**
|
|
108
88
|
* Parses a raw cdata.fr survey file. These look like so:
|
|
109
89
|
*
|
|
@@ -149,9 +129,8 @@ FI B DD
|
|
|
149
129
|
...</pre>
|
|
150
130
|
*
|
|
151
131
|
*/
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
async function parseFrcsSurveyFile(file, // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
132
|
+
async function parseFrcsSurveyFile(file,
|
|
133
|
+
// eslint-disable-line @typescript-eslint/no-explicit-any
|
|
155
134
|
lines) {
|
|
156
135
|
let cave = null;
|
|
157
136
|
let location = null;
|
|
@@ -168,20 +147,16 @@ lines) {
|
|
|
168
147
|
let trip = null;
|
|
169
148
|
let inBlockComment = false;
|
|
170
149
|
let section;
|
|
171
|
-
|
|
172
150
|
function getComment() {
|
|
173
151
|
if (!commentLines) return null;
|
|
174
152
|
const comment = commentLines.join('\n').trim();
|
|
175
153
|
commentLines = null;
|
|
176
154
|
return comment || null;
|
|
177
155
|
}
|
|
178
|
-
|
|
179
156
|
let lineNumber = 0;
|
|
180
|
-
|
|
181
157
|
for await (const line of lines) {
|
|
182
158
|
let errored = false;
|
|
183
159
|
const thisLineNumber = lineNumber;
|
|
184
|
-
|
|
185
160
|
const error = (message, startColumn, endColumn) => {
|
|
186
161
|
errored = true;
|
|
187
162
|
errors.push(new _parseSegment.SegmentParseError(message, new _parseSegment.Segment({
|
|
@@ -191,34 +166,25 @@ lines) {
|
|
|
191
166
|
startCol: 0
|
|
192
167
|
}).substring(startColumn, endColumn)));
|
|
193
168
|
};
|
|
194
|
-
|
|
195
169
|
const validate = (startColumn, endColumn, fieldName, validator) => {
|
|
196
170
|
const field = line.substring(startColumn, endColumn);
|
|
197
|
-
|
|
198
171
|
if (!validator(field)) {
|
|
199
172
|
error((field.trim() ? 'Invalid ' : 'Missing ') + fieldName, startColumn, endColumn);
|
|
200
173
|
}
|
|
201
|
-
|
|
202
174
|
return field;
|
|
203
175
|
};
|
|
204
|
-
|
|
205
176
|
lineNumber++;
|
|
206
|
-
|
|
207
177
|
if (lineNumber === 1) {
|
|
208
178
|
const match = /^\s*([^,]+)(,(.*))?/.exec(line);
|
|
209
|
-
|
|
210
179
|
if (match) {
|
|
211
180
|
cave = match[1].trim();
|
|
212
|
-
|
|
213
181
|
if (match[3]) {
|
|
214
182
|
location = match[3].trim();
|
|
215
183
|
}
|
|
216
184
|
}
|
|
217
185
|
}
|
|
218
|
-
|
|
219
186
|
if (line.charAt(0) === ' ' && line.charAt(1) === '*') {
|
|
220
187
|
inTripComment = !inTripComment;
|
|
221
|
-
|
|
222
188
|
if (inTripComment) {
|
|
223
189
|
section = undefined;
|
|
224
190
|
tripComment = [];
|
|
@@ -231,7 +197,6 @@ lines) {
|
|
|
231
197
|
tripName = line && line.trim();
|
|
232
198
|
} else if (lineNumber === tripCommentStartLine + 2) {
|
|
233
199
|
const match = /^(.+?)\s*[-.]\s*(\d+)\/(\d+)\/(\d+)$/.exec(line && line.trim());
|
|
234
|
-
|
|
235
200
|
if (match) {
|
|
236
201
|
let k = 1;
|
|
237
202
|
const team = match[k++];
|
|
@@ -244,9 +209,7 @@ lines) {
|
|
|
244
209
|
} else if (lineNumber > 1) {
|
|
245
210
|
tripComment.push(line);
|
|
246
211
|
}
|
|
247
|
-
|
|
248
212
|
const match = /^\*\*\*([^*])\*\*\*/.exec(line);
|
|
249
|
-
|
|
250
213
|
if (match) {
|
|
251
214
|
section = match[1].trim();
|
|
252
215
|
}
|
|
@@ -262,39 +225,30 @@ lines) {
|
|
|
262
225
|
// FT CC DD
|
|
263
226
|
// 01234567
|
|
264
227
|
let distanceUnit = parseLengthUnit(line.slice(0, 2));
|
|
265
|
-
|
|
266
228
|
if (!distanceUnit) {
|
|
267
229
|
distanceUnit = _unitized.Length.feet;
|
|
268
230
|
error('Invalid distance unit', 0, 2);
|
|
269
231
|
}
|
|
270
|
-
|
|
271
232
|
let azimuthUnit = parseAngleUnit(line[6]);
|
|
272
|
-
|
|
273
233
|
if (!azimuthUnit) {
|
|
274
234
|
azimuthUnit = _unitized.Angle.degrees;
|
|
275
235
|
error('Invalid azimuth unit', 6, 7);
|
|
276
236
|
}
|
|
277
|
-
|
|
278
237
|
let inclinationUnit = parseAngleUnit(line[7]);
|
|
279
|
-
|
|
280
238
|
if (!inclinationUnit) {
|
|
281
239
|
inclinationUnit = _unitized.Angle.degrees;
|
|
282
240
|
error('Invalid inclination unit', 7, 8);
|
|
283
241
|
}
|
|
284
|
-
|
|
285
242
|
const backsightAzimuthCorrected = line[3] === 'C';
|
|
286
243
|
const backsightInclinationCorrected = line[4] === 'C';
|
|
287
244
|
const hasBacksightAzimuth = line[3] !== ' ' && line[3] !== '-';
|
|
288
245
|
const hasBacksightInclination = line[4] !== ' ' && line[4] !== '-';
|
|
289
|
-
|
|
290
246
|
if (!/[-CB ]/.test(line[3])) {
|
|
291
247
|
error('Invalid backsight azimuth type', 3, 4);
|
|
292
248
|
}
|
|
293
|
-
|
|
294
249
|
if (!/[-CB ]/.test(line[4])) {
|
|
295
250
|
error('Invalid backsight inclination type', 4, 5);
|
|
296
251
|
}
|
|
297
|
-
|
|
298
252
|
trip = {
|
|
299
253
|
header: {
|
|
300
254
|
name: tripName || '',
|
|
@@ -314,6 +268,7 @@ lines) {
|
|
|
314
268
|
};
|
|
315
269
|
trips.push(trip);
|
|
316
270
|
} else if (trip) {
|
|
271
|
+
var _exec;
|
|
317
272
|
const {
|
|
318
273
|
shots,
|
|
319
274
|
header: {
|
|
@@ -325,16 +280,19 @@ lines) {
|
|
|
325
280
|
distanceUnit
|
|
326
281
|
} = trip.header;
|
|
327
282
|
const inches = distanceUnit === _unitized.Length.inches;
|
|
328
|
-
if (inches) distanceUnit = _unitized.Length.feet;
|
|
283
|
+
if (inches) distanceUnit = _unitized.Length.feet;
|
|
284
|
+
|
|
285
|
+
// rigorously check the values in all the columns to make sure this
|
|
329
286
|
// is really a survey shot line, just in case any stray comments are
|
|
330
287
|
// not properly delimited.
|
|
331
|
-
// from station name
|
|
332
288
|
|
|
289
|
+
// from station name
|
|
333
290
|
if (!/\S/.test(line.substring(5, 10))) continue;
|
|
334
|
-
const fromStr = validate(5, 10, 'from station', isValidStation);
|
|
291
|
+
const fromStr = validate(5, 10, 'from station', isValidStation);
|
|
292
|
+
|
|
293
|
+
// Sadly I have found negative LRUD values in Chip's format and apparently
|
|
335
294
|
// his program doesn't fail on them, so I have to accept them here
|
|
336
295
|
// isValidOptFloat instead of isValidOptUFloat
|
|
337
|
-
|
|
338
296
|
const lStr = validate(40, 43, 'left', isValidOptFloat);
|
|
339
297
|
const rStr = validate(43, 46, 'right', isValidOptFloat);
|
|
340
298
|
const uStr = validate(46, 49, 'up', isValidOptFloat);
|
|
@@ -343,10 +301,10 @@ lines) {
|
|
|
343
301
|
const up = parseLrud(uStr, distanceUnit);
|
|
344
302
|
const down = parseLrud(dStr, distanceUnit);
|
|
345
303
|
const left = parseLrud(lStr, distanceUnit);
|
|
346
|
-
const right = parseLrud(rStr, distanceUnit);
|
|
304
|
+
const right = parseLrud(rStr, distanceUnit);
|
|
347
305
|
|
|
306
|
+
// to station name
|
|
348
307
|
const toStr = line.substring(0, 5);
|
|
349
|
-
|
|
350
308
|
if (!toStr.trim()) {
|
|
351
309
|
const shot = {
|
|
352
310
|
from: fromStr.trim(),
|
|
@@ -369,14 +327,11 @@ lines) {
|
|
|
369
327
|
shots.push(shot);
|
|
370
328
|
continue;
|
|
371
329
|
}
|
|
372
|
-
|
|
373
330
|
if (!isValidStation(toStr)) {
|
|
374
331
|
error('Invalid station name', 0, 5);
|
|
375
332
|
}
|
|
376
|
-
|
|
377
333
|
const fromLrudMatch = new RegExp(`^\\s+${fromStr.trim().replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}((\\s+(\\d+(\\.\\d*)?|\\.\\d+)){4})`).exec(line.substring(52));
|
|
378
334
|
let fromLruds;
|
|
379
|
-
|
|
380
335
|
if (fromLrudMatch) {
|
|
381
336
|
const [left, right, up, down] = fromLrudMatch[1].trim().split(/\s+/g).map(s => parseLrud(s, distanceUnit));
|
|
382
337
|
fromLruds = {
|
|
@@ -385,9 +340,35 @@ lines) {
|
|
|
385
340
|
up,
|
|
386
341
|
down
|
|
387
342
|
};
|
|
388
|
-
}
|
|
389
|
-
|
|
343
|
+
}
|
|
344
|
+
let comment = getComment();
|
|
345
|
+
let fromLrudComment = comment;
|
|
346
|
+
const commentFromStr = comment ? (_exec = /^\S{1,5}/.exec(comment)) === null || _exec === void 0 ? void 0 : _exec[0] : null;
|
|
347
|
+
if (commentFromStr) {
|
|
348
|
+
const fromStr = commentFromStr;
|
|
349
|
+
fromLrudComment = ' '.repeat(5 - fromStr.length) + fromLrudComment;
|
|
350
|
+
const gap = fromLrudComment.substring(5, 40);
|
|
351
|
+
const lrudStr = fromLrudComment.substring(40, 52);
|
|
352
|
+
const lStr = fromLrudComment.substring(40, 43);
|
|
353
|
+
const rStr = fromLrudComment.substring(43, 46);
|
|
354
|
+
const uStr = fromLrudComment.substring(46, 49);
|
|
355
|
+
const dStr = fromLrudComment.substring(49, 52);
|
|
356
|
+
if (/^\s*\S+$/.test(fromStr) && !gap.trim() && isValidOptFloat(lStr) && isValidOptFloat(rStr) && isValidOptFloat(uStr) && isValidOptFloat(dStr) && /\d/.test(lrudStr)) {
|
|
357
|
+
const up = parseLrud(uStr, distanceUnit);
|
|
358
|
+
const down = parseLrud(dStr, distanceUnit);
|
|
359
|
+
const left = parseLrud(lStr, distanceUnit);
|
|
360
|
+
const right = parseLrud(rStr, distanceUnit);
|
|
361
|
+
fromLruds = {
|
|
362
|
+
left,
|
|
363
|
+
right,
|
|
364
|
+
up,
|
|
365
|
+
down
|
|
366
|
+
};
|
|
367
|
+
comment = null;
|
|
368
|
+
}
|
|
369
|
+
}
|
|
390
370
|
|
|
371
|
+
// azimuth and inclination
|
|
391
372
|
const azmFsStr = validate(19, 25, 'azimuth', isValidOptUFloat);
|
|
392
373
|
const azmBsStr = validate(25, 30, 'azimuth', isValidOptUFloat);
|
|
393
374
|
const incFsStr = line.substring(30, 35);
|
|
@@ -400,26 +381,27 @@ lines) {
|
|
|
400
381
|
let frontsightInclination;
|
|
401
382
|
let backsightInclination;
|
|
402
383
|
let excludeDistance;
|
|
403
|
-
let isSplay;
|
|
384
|
+
let isSplay;
|
|
404
385
|
|
|
386
|
+
// parse distance
|
|
405
387
|
if (inches) {
|
|
406
388
|
const feetStr = line.substring(10, 14);
|
|
407
|
-
const inchesStr = line.substring(14, 17);
|
|
408
|
-
|
|
389
|
+
const inchesStr = line.substring(14, 17);
|
|
390
|
+
// feet and inches are not both optional
|
|
409
391
|
if (!isValidUInt(feetStr) && !isValidUInt(inchesStr)) {
|
|
410
392
|
const invalid = feetStr.trim() || inchesStr.trim();
|
|
411
393
|
error(invalid ? 'Invalid distance' : 'Missing distance', 10, 17);
|
|
412
394
|
continue;
|
|
413
|
-
}
|
|
414
|
-
// for feet to be omitted as well
|
|
415
|
-
|
|
395
|
+
}
|
|
416
396
|
|
|
397
|
+
// sometimes inches are omitted, hence the || 0...I'm assuming it's possible
|
|
398
|
+
// for feet to be omitted as well
|
|
417
399
|
distance = _unitized.Unitize.inches(parseFloat(inchesStr) || 0).add(_unitized.Unitize.feet(parseFloat(feetStr) || 0));
|
|
418
|
-
kind = parseKind(line[17]);
|
|
400
|
+
kind = parseKind(line[17]);
|
|
401
|
+
// NOTE there are two columns around here that can contain a *.
|
|
419
402
|
// I think they might represent different values, but thisis confused by
|
|
420
403
|
// the fact that for ft/in shots, if there is a D or H flag it occupies the
|
|
421
404
|
// first column that can contain a * for decimal feet shots
|
|
422
|
-
|
|
423
405
|
excludeDistance = line[18] === '*' || line[18] === 's';
|
|
424
406
|
isSplay = line[18] === 's';
|
|
425
407
|
} else {
|
|
@@ -430,15 +412,14 @@ lines) {
|
|
|
430
412
|
excludeDistance = line[17] === '*' || line[17] === 's';
|
|
431
413
|
isSplay = line[17] === 's';
|
|
432
414
|
}
|
|
433
|
-
|
|
434
415
|
if (kind !== _FrcsShot.FrcsShotKind.Normal) {
|
|
435
416
|
validate(30, 35, 'vertical-distance', isValidFloat);
|
|
436
|
-
}
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
// convert horizontal and diagonal shots to standard
|
|
437
420
|
// in this case incFs is the vertical offset between stations
|
|
438
421
|
// fortunately it appears we can always count on incFs being specified
|
|
439
422
|
// and incBs not being specified for these types of shots
|
|
440
|
-
|
|
441
|
-
|
|
442
423
|
if (kind === _FrcsShot.FrcsShotKind.Horizontal) {
|
|
443
424
|
// distance is horizontal offset and incFsStr is vertical offset
|
|
444
425
|
horizontalDistance = distance;
|
|
@@ -457,21 +438,18 @@ lines) {
|
|
|
457
438
|
backsightInclination = null;
|
|
458
439
|
} else {
|
|
459
440
|
// frontsight inclination
|
|
460
|
-
validate(30, 35, 'inclination', isValidOptInclination);
|
|
461
|
-
|
|
441
|
+
validate(30, 35, 'inclination', isValidOptInclination);
|
|
442
|
+
// frontsight inclination
|
|
462
443
|
validate(35, 40, 'inclination', isValidOptInclination);
|
|
463
444
|
frontsightInclination = parseNumber(incFsStr, inclinationUnit);
|
|
464
445
|
backsightInclination = parseNumber(incBsStr, inclinationUnit);
|
|
465
446
|
}
|
|
466
|
-
|
|
467
447
|
if (errored) continue;
|
|
468
448
|
const frontsightAzimuth = parseAzimuth(azmFsStr, azimuthUnit);
|
|
469
449
|
const backsightAzimuth = parseAzimuth(azmBsStr, azimuthUnit);
|
|
470
|
-
|
|
471
450
|
if (!frontsightInclination && !backsightInclination) {
|
|
472
451
|
frontsightInclination = _unitized.Unitize.degrees(0);
|
|
473
452
|
}
|
|
474
|
-
|
|
475
453
|
const shot = {
|
|
476
454
|
from: fromStr.trim(),
|
|
477
455
|
to: toStr.trim(),
|
|
@@ -488,7 +466,7 @@ lines) {
|
|
|
488
466
|
down
|
|
489
467
|
},
|
|
490
468
|
excludeDistance,
|
|
491
|
-
comment
|
|
469
|
+
comment
|
|
492
470
|
};
|
|
493
471
|
if (isSplay) shot.isSplay = true;
|
|
494
472
|
if (fromLruds) shot.fromLruds = fromLruds;
|
|
@@ -497,7 +475,6 @@ lines) {
|
|
|
497
475
|
shots.push(shot);
|
|
498
476
|
}
|
|
499
477
|
}
|
|
500
|
-
|
|
501
478
|
return {
|
|
502
479
|
cave,
|
|
503
480
|
location,
|
|
@@ -505,4 +482,4 @@ lines) {
|
|
|
505
482
|
errors
|
|
506
483
|
};
|
|
507
484
|
}
|
|
508
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9wYXJzZUZyY3NTdXJ2ZXlGaWxlLnRzIl0sIm5hbWVzIjpbInBhcnNlTnVtYmVyIiwicyIsInVuaXQiLCJ2YWx1ZSIsInBhcnNlRmxvYXQiLCJpc05hTiIsIlVuaXRpemVkTnVtYmVyIiwicGFyc2VBemltdXRoIiwicGFyc2VkIiwiZ2V0IiwiQW5nbGUiLCJkZWdyZWVzIiwiVW5pdGl6ZSIsInBhcnNlS2luZCIsImtpbmQiLCJGcmNzU2hvdEtpbmQiLCJIb3Jpem9udGFsIiwiRGlhZ29uYWwiLCJOb3JtYWwiLCJwYXJzZUxlbmd0aFVuaXQiLCJMZW5ndGgiLCJpbmNoZXMiLCJmZWV0IiwibWV0ZXJzIiwicGFyc2VBbmdsZVVuaXQiLCJncmFkaWFucyIsIm1pbHNOQVRPIiwiaXNWYWxpZFN0YXRpb24iLCJ0ZXN0IiwiaXNWYWxpZFVJbnQiLCJpc1ZhbGlkRmxvYXQiLCJpc1ZhbGlkT3B0RmxvYXQiLCJpc1ZhbGlkT3B0VUZsb2F0IiwiaXNWYWxpZFVGbG9hdCIsImlzVmFsaWRPcHRJbmNsaW5hdGlvbiIsInBhcnNlTHJ1ZCIsIk51bWJlciIsImlzRmluaXRlIiwicGFyc2VGcmNzU3VydmV5RmlsZSIsImZpbGUiLCJsaW5lcyIsImNhdmUiLCJsb2NhdGlvbiIsInRyaXBzIiwiZXJyb3JzIiwidHJpcE5hbWUiLCJ0cmlwVGVhbSIsInRyaXBEYXRlIiwiaW5UcmlwQ29tbWVudCIsInRyaXBDb21tZW50U3RhcnRMaW5lIiwidHJpcENvbW1lbnRFbmRMaW5lIiwidHJpcENvbW1lbnQiLCJjb21tZW50TGluZXMiLCJ0cmlwIiwiaW5CbG9ja0NvbW1lbnQiLCJzZWN0aW9uIiwiZ2V0Q29tbWVudCIsImNvbW1lbnQiLCJqb2luIiwidHJpbSIsImxpbmVOdW1iZXIiLCJsaW5lIiwiZXJyb3JlZCIsInRoaXNMaW5lTnVtYmVyIiwiZXJyb3IiLCJtZXNzYWdlIiwic3RhcnRDb2x1bW4iLCJlbmRDb2x1bW4iLCJwdXNoIiwiU2VnbWVudFBhcnNlRXJyb3IiLCJTZWdtZW50Iiwic291cmNlIiwic3RhcnRMaW5lIiwic3RhcnRDb2wiLCJzdWJzdHJpbmciLCJ2YWxpZGF0ZSIsImZpZWxkTmFtZSIsInZhbGlkYXRvciIsImZpZWxkIiwibWF0Y2giLCJleGVjIiwiY2hhckF0IiwidW5kZWZpbmVkIiwiayIsInRlYW0iLCJtb250aCIsInBhcnNlSW50IiwiZGF5IiwieWVhciIsIkRhdGUiLCJzcGxpdCIsImluZGV4T2YiLCJwYXJ0IiwiZGlzdGFuY2VVbml0Iiwic2xpY2UiLCJhemltdXRoVW5pdCIsImluY2xpbmF0aW9uVW5pdCIsImJhY2tzaWdodEF6aW11dGhDb3JyZWN0ZWQiLCJiYWNrc2lnaHRJbmNsaW5hdGlvbkNvcnJlY3RlZCIsImhhc0JhY2tzaWdodEF6aW11dGgiLCJoYXNCYWNrc2lnaHRJbmNsaW5hdGlvbiIsImhlYWRlciIsIm5hbWUiLCJkYXRlIiwic2hvdHMiLCJmcm9tU3RyIiwibFN0ciIsInJTdHIiLCJ1U3RyIiwiZFN0ciIsInVwIiwiZG93biIsImxlZnQiLCJyaWdodCIsInRvU3RyIiwic2hvdCIsImZyb20iLCJ0byIsImRpc3RhbmNlIiwiZnJvbnRzaWdodEF6aW11dGgiLCJiYWNrc2lnaHRBemltdXRoIiwiZnJvbnRzaWdodEluY2xpbmF0aW9uIiwiYmFja3NpZ2h0SW5jbGluYXRpb24iLCJmcm9tTHJ1ZHMiLCJleGNsdWRlRGlzdGFuY2UiLCJmcm9tTHJ1ZE1hdGNoIiwiUmVnRXhwIiwicmVwbGFjZSIsIm1hcCIsImF6bUZzU3RyIiwiYXptQnNTdHIiLCJpbmNGc1N0ciIsImluY0JzU3RyIiwiaG9yaXpvbnRhbERpc3RhbmNlIiwidmVydGljYWxEaXN0YW5jZSIsImlzU3BsYXkiLCJmZWV0U3RyIiwiaW5jaGVzU3RyIiwiaW52YWxpZCIsImFkZCIsImgiLCJ2IiwiTWF0aCIsInNxcnQiLCJhdGFuMiIsImQiLCJhc2luIiwidG9McnVkcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUVBOztBQUNBOztBQVFBOztBQUVBLFNBQVNBLFdBQVQsQ0FD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bGUgfSBmcm9tICcuL0ZyY3NTdXJ2ZXlGaWxlJ1xuaW1wb3J0IHsgRnJjc1RyaXAgfSBmcm9tICcuL0ZyY3NUcmlwJ1xuaW1wb3J0IHsgU2VnbWVudCwgU2VnbWVudFBhcnNlRXJyb3IgfSBmcm9tICdwYXJzZS1zZWdtZW50J1xuaW1wb3J0IHtcbiAgQW5nbGUsXG4gIExlbmd0aCxcbiAgVW5pdCxcbiAgVW5pdGl6ZWROdW1iZXIsXG4gIFVuaXRUeXBlLFxuICBVbml0aXplLFxufSBmcm9tICdAc3BlbGVvdGljYS91bml0aXplZCdcbmltcG9ydCB7IEZyY3NTaG90LCBGcmNzU2hvdEtpbmQgfSBmcm9tICcuL0ZyY3NTaG90J1xuXG5mdW5jdGlvbiBwYXJzZU51bWJlcjxUIGV4dGVuZHMgVW5pdFR5cGU8VD4+KFxuICBzOiBzdHJpbmcsXG4gIHVuaXQ6IFVuaXQ8VD5cbik6IFVuaXRpemVkTnVtYmVyPFQ+IHwgbnVsbCB7XG4gIGNvbnN0IHZhbHVlID0gcGFyc2VGbG9hdChzKVxuICBpZiAoaXNOYU4odmFsdWUpKSByZXR1cm4gbnVsbFxuICByZXR1cm4gbmV3IFVuaXRpemVkTnVtYmVyKHZhbHVlLCB1bml0KVxufVxuXG5mdW5jdGlvbiBwYXJzZUF6aW11dGgoXG4gIHM6IHN0cmluZyxcbiAgdW5pdDogVW5pdDxBbmdsZT5cbik6IFVuaXRpemVkTnVtYmVyPEFuZ2xlPiB8IG51bGwge1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZU51bWJlcihzLCB1bml0KVxuICByZXR1cm4gcGFyc2VkPy5nZXQoQW5nbGUuZGVncmVlcykgPT09IDM2MCA/IFVuaXRpemUuZGVncmVlcygwKSA6IHBhcnNlZFxufVxuXG5mdW5jdGlvbiBwYXJzZUtpbmQoa2luZDogc3RyaW5nKTogRnJjc1Nob3RLaW5kIHtcbiAgc3dpdGNoIChraW5kKSB7XG4gICAgY2FzZSAnSCc6XG4gICAgICByZXR1cm4gRnJjc1Nob3RLaW5kLkhvcml6b250YWxcbiAgICBjYXNlICdEJzpcbiAgICAgIHJldHVybiBGcmNzU2hvdEtpbmQuRGlhZ29uYWxcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIEZyY3NTaG90S2luZC5Ob3JtYWxcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZUxlbmd0aFVuaXQodW5pdDogc3RyaW5nKTogVW5pdDxMZW5ndGg+IHwgbnVsbCB7XG4gIHN3aXRjaCAodW5pdCkge1xuICAgIGNhc2UgJ0ZJJzpcbiAgICAgIHJldHVybiBMZW5ndGguaW5jaGVzXG4gICAgY2FzZSAnRlQnOlxuICAgICAgcmV0dXJuIExlbmd0aC5mZWV0XG4gICAgY2FzZSAnTSAnOlxuICAgICAgcmV0dXJuIExlbmd0aC5tZXRlcnNcbiAgfVxuICByZXR1cm4gbnVsbFxufVxuZnVuY3Rpb24gcGFyc2VBbmdsZVVuaXQodW5pdDogc3RyaW5nKTogVW5pdDxBbmdsZT4gfCBudWxsIHtcbiAgc3dpdGNoICh1bml0KSB7XG4gICAgY2FzZSAnRCc6XG4gICAgICByZXR1cm4gQW5nbGUuZGVncmVlc1xuICAgIGNhc2UgJ0cnOlxuICAgICAgcmV0dXJuIEFuZ2xlLmdyYWRpYW5zXG4gICAgY2FzZSAnTSc6XG4gICAgICByZXR1cm4gQW5nbGUubWlsc05BVE9cbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG4vLyBkZXRlcm1pbmVzIGlmIGEgY2VsbCBjb250YWlucyBhIHZhbGlkIHN0YXRpb24gbmFtZS5cbmZ1bmN0aW9uIGlzVmFsaWRTdGF0aW9uKHM6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gL15cXHMqXFxTK1xccyokLy50ZXN0KHMpXG59XG4vLyBkZXRlcm1pbmVzIGlmIGEgY2VsbCBjb250YWlucyBhIHZhbGlkIHVuc2lnbmVkIGludGVnZXIuXG5mdW5jdGlvbiBpc1ZhbGlkVUludChzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIC9eXFxzKlswLTldK1xccyokLy50ZXN0KHMpXG59XG4vLyBkZXRlcm1pbmVzIGlmIGEgY2VsbCBjb250YWlucyBhIHZhbGlkIGZsb2F0LlxuZnVuY3Rpb24gaXNWYWxpZEZsb2F0KHM6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gL15cXHMqWy0rXT8oWzAtOV0rKFxcLlswLTldKik/fFxcLlswLTldKylcXHMqJC8udGVzdChzKVxufVxuLy8gZGV0ZXJtaW5lcyBpZiBhIGNlbGwgY29udGFpbnMgYSB2YWxpZCB1bnNpZ25lZCBmbG9hdCBvciB3aGl0ZXNwYWNlLlxuZnVuY3Rpb24gaXNWYWxpZE9wdEZsb2F0KHM6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gL15cXHMqWy0rXT9bMC05XSooXFwuWzAtOV0qKT9cXHMqJC8udGVzdChzKVxufVxuLy8gZGV0ZXJtaW5lcyBpZiBhIGNlbGwgY29udGFpbnMgYSB2YWxpZCB1bnNpZ25lZCBmbG9hdCBvciB3aGl0ZXNwYWNlLlxuZnVuY3Rpb24gaXNWYWxpZE9wdFVGbG9hdChzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIC9eXFxzKlswLTldKihcXC5bMC05XSopP1xccyokLy50ZXN0KHMpXG59XG4vLyBkZXRlcm1pbmVzIGlmIGEgY2VsbCBjb250YWlucyBhIHZhbGlkIHVuc2lnbmVkIGZsb2F0LlxuZnVuY3Rpb24gaXNWYWxpZFVGbG9hdChzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIC9eXFxzKihbMC05XSsoXFwuWzAtOV0qKT98XFwuWzAtOV0rKVxccyokLy50ZXN0KHMpXG59XG4vLyBkZXRlcm1pbmVzIGlmIGEgY2VsbCBjb250YWlucyBhIHZhbGlkIGluY2xpbmF0aW9uIG9yIHdoaXRlc3BhY2UuXG5mdW5jdGlvbiBpc1ZhbGlkT3B0SW5jbGluYXRpb24oczogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiAvXlxccypbLStdP1swLTldKihcXC5bMC05XSopP1xccyokLy50ZXN0KHMpXG59XG5mdW5jdGlvbiBwYXJzZUxydWQ8VCBleHRlbmRzIFVuaXRUeXBlPFQ+PihcbiAgczogc3RyaW5nLFxuICB1bml0OiBVbml0PExlbmd0aD5cbik6IFVuaXRpemVkTnVtYmVyPExlbmd0aD4gfCBudWxsIHtcbiAgY29uc3QgdmFsdWUgPSBwYXJzZUZsb2F0KHMpXG4gIHJldHVybiAhTnVtYmVyLmlzRmluaXRlKHZhbHVlKSB8fCB2YWx1ZSA8IDBcbiAgICA/IG51bGxcbiAgICA6IG5ldyBVbml0aXplZE51bWJlcih2YWx1ZSwgdW5pdClcbn1cblxuLyoqXG4gKiBQYXJzZXMgYSByYXcgY2RhdGEuZnIgc3VydmV5IGZpbGUuICBUaGVzZSBsb29rIGxpa2Ugc286XG4gKlxuPHByZT4gICAgICBGaXNoZXIgUmlkZ2UgQ2F2ZSBTeXN0ZW0sIEhhcnQgQ28uLCBLWVxuRU5UUkFOQ0UgRFJPUFMsIEpPRSdTIFwiSSBMT1ZFIE1ZIFdJRkUgVFJBVkVSU0VcIiwgVFJJQ0tZIFRSQVZFUlNFXG5QRVRFUiBRVUlDSywgS0VJVEggT1JUSVogICAtICAyLTE1LTgxXG5UaGlzIEZpbGUgaGFzIENydW1wcyB0ZXN0IGNvbm5lY3RlZC4gIDExLzIwLzEyXG4gKlxuRlQgQyAgREQgICAgQVxuICAgICAgQUUyMCAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgMyAgMCAgMlxuKiAgICAgICVGU1xuKiAgICAgQUUyMCAgICAgMCAgICAgICAgMCAgICAgICAgMCAgICAgICAgQnVnLWNhbid0IHB1dCBiZWZvcmUgc28gcHV0IGFmdGVyLXNvIGNhbid0IG1ha2UgMiBmaXhlZCAxMC8yOC8xMlxuIEFFMTkgQUUyMCAgIDkuMyAgICA2MC4wICA2MC4wLTM2LjAgICAgICAgMiAxMiAgMCAyMFxuIEFFMTggQUUxOSAgMjQuNSAgICAgMC4wICAgMC4wLTkwLjAgICAgICAgNiAxMCAyNSAgMFxuIEFFMTcgQUUxOCAgIDguMCAgIDM1MC41IDM1MC41IDE3LjAgICAgICAgMyAgNSAgMCAgMFxuIEFFMTYgQUUxNyAgIDYuNyAgICAgMC4wICAgMC4wLTkwLjAgICAgICAgMyAgNSAgNiAgMVxuIEFFMTUgQUUxNiAgMTIuNiAgICA3MC41ICA3MS4wLTE4LjAgICAgICAgNCAgMCAgMiAgMVxuIEFFMTQgQUUxNSAgMTAuMCAgICAyMS41ICAyMC4wICA2LjAgICAgICAgNSAgNSAgMCAgM1xuIEFFMTMgQUUxNCAgMjYuOCAgIDI4OC4wIDI4Ni4wLTUwLjAgICAgICAgMCAgNyAyMCAgNVxuKlxuKlNIT1JUIENBTllPTiBBVCBUSEUgQkFTRSBPRiBUSEUgU0VDT05EIERST1BcbiBBRTEyIEFFMTMgIDIwLjcgICAyMzYuMCAyMzYuMCAzNC4wICAgICAgIDMgIDUgIDQgIDRcbiBBRTExIEFFMTIgIDEyLjQgICAyMTAuMCAyMTAuMCAzNS4wICAgICAgIDcgIDQgIDUgIDFcbiBBRTEwIEFFMTMgIDI1LjcgICAgNDAuMCAgNDAuMCAtOS4wICAgICAgIDIgIDIgIDMgIDZcbipcbipBRTEwIEFUIEpPRSdTIFwiIEkgTE9WRSBNWSBXSUZFIFRSQVZFUlNFIFwiXG4gIEFFOSBBRTEwICAxNy44ICAgIDMyLjUgIDMxLjAgMjMuMCAgICAgICA0ICA1IDIwIDE1XG4gIEFFMSAgQUU5ICAxMy43ICAgIDgyLjAgIDgyLjAtMTMuMFxuICAgQTEgIEFFMSAgMzQuMyAgICA0Ni4wICA0OC4wLTE3LjVcbipcbipTVVJWRVkgVE8gRE9NRSBORUFSIFRIRSBFTlRSQU5DRSBET01FIChBQk9WRSBUSEUgU0VDT05EIERST1ApXG4gIEFEMSBBRTE1ICAgOC4wICAgMjAwLjAgMjAwLjAgIDAuMCAgICAgICAzICAxICAxICAxXG4gIEFEMiAgQUQxICAxNy43ICAgMTYxLjAgMTYxLjAgIDcuMCAgICAgICAxICA0IDI1ICAxXG4gIEFEMyAgQUQyICAxMC40ICAgMTgwLjAgMTgwLjAgNTAuMCAgICAgICA0ICAxIDE1ICA1XG4gKlxuVFJJQ0tZIFRSQVZFUlNFIEFORCBUSEVOIEZJUlNUIFNVUlZFWSBJTiBVUFBFUiBDUk9XTFdBWVxuREFOIENST1dMLCBLRUlUSCBPUlRJWiwgQ0hJUCBIT1BQRVIsIFBFVEVSIFFVSUNLLCBMQVJSWSBCRUFOICAgIDE0IEZFQiAxOTgxXG4gKlxuRkkgQiAgRERcbiAgIEEyICAgQTEgIDQ4IDEwICAyOTIuMCAxMTAuMC00Mi4wICAgICAgIDUgMTAgMzUgIDVcbiAgIEEzICAgQTIgIDEyICA1ICAzMzMuNSAxNTMuNSAzNS4wICAgICAgIDMgIDEgMTUgIDVcbiAgIEE0ICAgQTMgICA0ICAyICAgIDAuMCAgIDAuMCA5MC4wICAgICAgIDMgIDEgMTAgMTBcbi4uLjwvcHJlPlxuICpcbiAqL1xuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gcGFyc2VGcmNzU3VydmV5RmlsZShcbiAgZmlsZTogYW55LCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgbGluZXM6IEFzeW5jSXRlcmFibGU8c3RyaW5nPlxuKTogUHJvbWlzZTxGcmNzU3VydmV5RmlsZT4ge1xuICBsZXQgY2F2ZTogc3RyaW5nIHwgbnVsbCA9IG51bGxcbiAgbGV0IGxvY2F0aW9uOiBzdHJpbmcgfCBudWxsID0gbnVsbFxuICBjb25zdCB0cmlwczogQXJyYXk8RnJjc1RyaXA+ID0gW11cbiAgY29uc3QgZXJyb3JzOiBBcnJheTxTZWdtZW50UGFyc2VFcnJvcj4gPSBbXVxuXG4gIGxldCB0cmlwTmFtZVxuICBsZXQgdHJpcFRlYW1cbiAgbGV0IHRyaXBEYXRlXG4gIGxldCBpblRyaXBDb21tZW50ID0gdHJ1ZVxuICBsZXQgdHJpcENvbW1lbnRTdGFydExpbmUgPSAxXG4gIGxldCB0cmlwQ29tbWVudEVuZExpbmUgPSAtMVxuICBsZXQgdHJpcENvbW1lbnQ6IEFycmF5PHN0cmluZz4gPSBbXVxuICBsZXQgY29tbWVudExpbmVzOiBBcnJheTxzdHJpbmc+IHwgbnVsbCA9IG51bGxcbiAgbGV0IHRyaXA6IEZyY3NUcmlwIHwgbnVsbCA9IG51bGxcbiAgbGV0IGluQmxvY2tDb21tZW50ID0gZmFsc2VcbiAgbGV0IHNlY3Rpb25cblxuICBmdW5jdGlvbiBnZXRDb21tZW50KCk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICghY29tbWVudExpbmVzKSByZXR1cm4gbnVsbFxuICAgIGNvbnN0IGNvbW1lbnQgPSBjb21tZW50TGluZXMuam9pbignXFxuJykudHJpbSgpXG4gICAgY29tbWVudExpbmVzID0gbnVsbFxuICAgIHJldHVybiBjb21tZW50IHx8IG51bGxcbiAgfVxuXG4gIGxldCBsaW5lTnVtYmVyID0gMFxuXG4gIGZvciBhd2FpdCAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgIGxldCBlcnJvcmVkID0gZmFsc2VcblxuICAgIGNvbnN0IHRoaXNMaW5lTnVtYmVyID0gbGluZU51bWJlclxuXG4gICAgY29uc3QgZXJyb3IgPSAoXG4gICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICBzdGFydENvbHVtbjogbnVtYmVyLFxuICAgICAgZW5kQ29sdW1uOiBudW1iZXJcbiAgICApOiB2b2lkID0+IHtcbiAgICAgIGVycm9yZWQgPSB0cnVlXG4gICAgICBlcnJvcnMucHVzaChcbiAgICAgICAgbmV3IFNlZ21lbnRQYXJzZUVycm9yKFxuICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgbmV3IFNlZ21lbnQoe1xuICAgICAgICAgICAgdmFsdWU6IGxpbmUsXG4gICAgICAgICAgICBzb3VyY2U6IGZpbGUsXG4gICAgICAgICAgICBzdGFydExpbmU6IHRoaXNMaW5lTnVtYmVyLFxuICAgICAgICAgICAgc3RhcnRDb2w6IDAsXG4gICAgICAgICAgfSkuc3Vic3RyaW5nKHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4pXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9XG5cbiAgICBjb25zdCB2YWxpZGF0ZSA9IChcbiAgICAgIHN0YXJ0Q29sdW1uOiBudW1iZXIsXG4gICAgICBlbmRDb2x1bW46IG51bWJlcixcbiAgICAgIGZpZWxkTmFtZTogc3RyaW5nLFxuICAgICAgdmFsaWRhdG9yOiAodmFsdWU6IHN0cmluZykgPT4gYm9vbGVhblxuICAgICk6IHN0cmluZyA9PiB7XG4gICAgICBjb25zdCBmaWVsZCA9IGxpbmUuc3Vic3RyaW5nKHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4pXG4gICAgICBpZiAoIXZhbGlkYXRvcihmaWVsZCkpIHtcbiAgICAgICAgZXJyb3IoXG4gICAgICAgICAgKGZpZWxkLnRyaW0oKSA/ICdJbnZhbGlkICcgOiAnTWlzc2luZyAnKSArIGZpZWxkTmFtZSxcbiAgICAgICAgICBzdGFydENvbHVtbixcbiAgICAgICAgICBlbmRDb2x1bW5cbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZpZWxkXG4gICAgfVxuXG4gICAgbGluZU51bWJlcisrXG5cbiAgICBpZiAobGluZU51bWJlciA9PT0gMSkge1xuICAgICAgY29uc3QgbWF0Y2ggPSAvXlxccyooW14sXSspKCwoLiopKT8vLmV4ZWMobGluZSlcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBjYXZlID0gbWF0Y2hbMV0udHJpbSgpXG4gICAgICAgIGlmIChtYXRjaFszXSkge1xuICAgICAgICAgIGxvY2F0aW9uID0gbWF0Y2hbM10udHJpbSgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobGluZS5jaGFyQXQoMCkgPT09ICcgJyAmJiBsaW5lLmNoYXJBdCgxKSA9PT0gJyonKSB7XG4gICAgICBpblRyaXBDb21tZW50ID0gIWluVHJpcENvbW1lbnRcbiAgICAgIGlmIChpblRyaXBDb21tZW50KSB7XG4gICAgICAgIHNlY3Rpb24gPSB1bmRlZmluZWRcbiAgICAgICAgdHJpcENvbW1lbnQgPSBbXVxuICAgICAgICB0cmlwQ29tbWVudFN0YXJ0TGluZSA9IGxpbmVOdW1iZXJcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyaXBDb21tZW50RW5kTGluZSA9IGxpbmVOdW1iZXJcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGluVHJpcENvbW1lbnQpIHtcbiAgICAgIGlmIChsaW5lTnVtYmVyID09PSB0cmlwQ29tbWVudFN0YXJ0TGluZSArIDEpIHtcbiAgICAgICAgdHJpcE5hbWUgPSBsaW5lICYmIGxpbmUudHJpbSgpXG4gICAgICB9IGVsc2UgaWYgKGxpbmVOdW1iZXIgPT09IHRyaXBDb21tZW50U3RhcnRMaW5lICsgMikge1xuICAgICAgICBjb25zdCBtYXRjaCA9IC9eKC4rPylcXHMqWy0uXVxccyooXFxkKylcXC8oXFxkKylcXC8oXFxkKykkLy5leGVjKFxuICAgICAgICAgIGxpbmUgJiYgbGluZS50cmltKClcbiAgICAgICAgKVxuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICBsZXQgayA9IDFcbiAgICAgICAgICBjb25zdCB0ZWFtID0gbWF0Y2hbaysrXVxuICAgICAgICAgIGNvbnN0IG1vbnRoID0gcGFyc2VJbnQobWF0Y2hbaysrXSlcbiAgICAgICAgICBjb25zdCBkYXkgPSBwYXJzZUludChtYXRjaFtrKytdKVxuICAgICAgICAgIGNvbnN0IHllYXIgPSBwYXJzZUludChtYXRjaFtrKytdKVxuICAgICAgICAgIHRyaXBEYXRlID0gbmV3IERhdGUoeWVhciA8IDcwID8geWVhciArIDIwMDAgOiB5ZWFyLCBtb250aCAtIDEsIGRheSlcbiAgICAgICAgICB0cmlwVGVhbSA9IHRlYW0uc3BsaXQoXG4gICAgICAgICAgICB0ZWFtLmluZGV4T2YoJzsnKSA+PSAwID8gL1xccyo7XFxzKi9nIDogL1xccyosXFxzKi9nXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGxpbmVOdW1iZXIgPiAxKSB7XG4gICAgICAgIHRyaXBDb21tZW50LnB1c2gobGluZSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1hdGNoID0gL15cXCpcXCpcXCooW14qXSlcXCpcXCpcXCovLmV4ZWMobGluZSlcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBzZWN0aW9uID0gbWF0Y2hbMV0udHJpbSgpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChsaW5lLmNoYXJBdCgwKSA9PT0gJyonKSB7XG4gICAgICBpbkJsb2NrQ29tbWVudCA9ICFpbkJsb2NrQ29tbWVudFxuICAgICAgaWYgKGluQmxvY2tDb21tZW50KSBjb21tZW50TGluZXMgPSBbXVxuICAgICAgZWxzZSBpZiAoY29tbWVudExpbmVzKSB7XG4gICAgICAgIGNvbnN0IHBhcnQgPSBsaW5lLnN1YnN0cmluZygxKS50cmltKClcbiAgICAgICAgaWYgKHBhcnQgJiYgY29tbWVudExpbmVzKSBjb21tZW50TGluZXMucHVzaChwYXJ0KVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaW5CbG9ja0NvbW1lbnQpIHtcbiAgICAgIGlmIChjb21tZW50TGluZXMpIGNvbW1lbnRMaW5lcy5wdXNoKGxpbmUpXG4gICAgfSBlbHNlIGlmIChsaW5lTnVtYmVyID09PSB0cmlwQ29tbWVudEVuZExpbmUgKyAxKSB7XG4gICAgICAvLyBGVCBDQyBERFxuICAgICAgLy8gMDEyMzQ1NjdcbiAgICAgIGxldCBkaXN0YW5jZVVuaXQgPSBwYXJzZUxlbmd0aFVuaXQobGluZS5zbGljZSgwLCAyKSlcbiAgICAgIGlmICghZGlzdGFuY2VVbml0KSB7XG4gICAgICAgIGRpc3RhbmNlVW5pdCA9IExlbmd0aC5mZWV0XG4gICAgICAgIGVycm9yKCdJbnZhbGlkIGRpc3RhbmNlIHVuaXQnLCAwLCAyKVxuICAgICAgfVxuICAgICAgbGV0IGF6aW11dGhVbml0ID0gcGFyc2VBbmdsZVVuaXQobGluZVs2XSlcbiAgICAgIGlmICghYXppbXV0aFVuaXQpIHtcbiAgICAgICAgYXppbXV0aFVuaXQgPSBBbmdsZS5kZWdyZWVzXG4gICAgICAgIGVycm9yKCdJbnZhbGlkIGF6aW11dGggdW5pdCcsIDYsIDcpXG4gICAgICB9XG4gICAgICBsZXQgaW5jbGluYXRpb25Vbml0ID0gcGFyc2VBbmdsZVVuaXQobGluZVs3XSlcbiAgICAgIGlmICghaW5jbGluYXRpb25Vbml0KSB7XG4gICAgICAgIGluY2xpbmF0aW9uVW5pdCA9IEFuZ2xlLmRlZ3JlZXNcbiAgICAgICAgZXJyb3IoJ0ludmFsaWQgaW5jbGluYXRpb24gdW5pdCcsIDcsIDgpXG4gICAgICB9XG4gICAgICBjb25zdCBiYWNrc2lnaHRBemltdXRoQ29ycmVjdGVkID0gbGluZVszXSA9PT0gJ0MnXG4gICAgICBjb25zdCBiYWNrc2lnaHRJbmNsaW5hdGlvbkNvcnJlY3RlZCA9IGxpbmVbNF0gPT09ICdDJ1xuICAgICAgY29uc3QgaGFzQmFja3NpZ2h0QXppbXV0aCA9IGxpbmVbM10gIT09ICcgJyAmJiBsaW5lWzNdICE9PSAnLSdcbiAgICAgIGNvbnN0IGhhc0JhY2tzaWdodEluY2xpbmF0aW9uID0gbGluZVs0XSAhPT0gJyAnICYmIGxpbmVbNF0gIT09ICctJ1xuXG4gICAgICBpZiAoIS9bLUNCIF0vLnRlc3QobGluZVszXSkpIHtcbiAgICAgICAgZXJyb3IoJ0ludmFsaWQgYmFja3NpZ2h0IGF6aW11dGggdHlwZScsIDMsIDQpXG4gICAgICB9XG4gICAgICBpZiAoIS9bLUNCIF0vLnRlc3QobGluZVs0XSkpIHtcbiAgICAgICAgZXJyb3IoJ0ludmFsaWQgYmFja3NpZ2h0IGluY2xpbmF0aW9uIHR5cGUnLCA0LCA1KVxuICAgICAgfVxuXG4gICAgICB0cmlwID0ge1xuICAgICAgICBoZWFkZXI6IHtcbiAgICAgICAgICBuYW1lOiB0cmlwTmFtZSB8fCAnJyxcbiAgICAgICAgICBjb21tZW50OiAodHJpcENvbW1lbnQgJiYgdHJpcENvbW1lbnQuam9pbignXFxuJykpIHx8IG51bGwsXG4gICAgICAgICAgc2VjdGlvbixcbiAgICAgICAgICBkYXRlOiB0cmlwRGF0ZSxcbiAgICAgICAgICB0ZWFtOiB0cmlwVGVhbSxcbiAgICAgICAgICBkaXN0YW5jZVVuaXQsXG4gICAgICAgICAgYXppbXV0aFVuaXQsXG4gICAgICAgICAgaW5jbGluYXRpb25Vbml0LFxuICAgICAgICAgIGJhY2tzaWdodEF6aW11dGhDb3JyZWN0ZWQsXG4gICAgICAgICAgYmFja3NpZ2h0SW5jbGluYXRpb25Db3JyZWN0ZWQsXG4gICAgICAgICAgaGFzQmFja3NpZ2h0QXppbXV0aCxcbiAgICAgICAgICBoYXNCYWNrc2lnaHRJbmNsaW5hdGlvbixcbiAgICAgICAgfSxcbiAgICAgICAgc2hvdHM6IFtdLFxuICAgICAgfVxuICAgICAgdHJpcHMucHVzaCh0cmlwKVxuICAgIH0gZWxzZSBpZiAodHJpcCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBzaG90cyxcbiAgICAgICAgaGVhZGVyOiB7IGF6aW11dGhVbml0LCBpbmNsaW5hdGlvblVuaXQgfSxcbiAgICAgIH0gPSB0cmlwXG4gICAgICBsZXQgeyBkaXN0YW5jZVVuaXQgfSA9IHRyaXAuaGVhZGVyXG5cbiAgICAgIGNvbnN0IGluY2hlcyA9IGRpc3RhbmNlVW5pdCA9PT0gTGVuZ3RoLmluY2hlc1xuICAgICAgaWYgKGluY2hlcykgZGlzdGFuY2VVbml0ID0gTGVuZ3RoLmZlZXRcblxuICAgICAgLy8gcmlnb3JvdXNseSBjaGVjayB0aGUgdmFsdWVzIGluIGFsbCB0aGUgY29sdW1ucyB0byBtYWtlIHN1cmUgdGhpc1xuICAgICAgLy8gaXMgcmVhbGx5IGEgc3VydmV5IHNob3QgbGluZSwganVzdCBpbiBjYXNlIGFueSBzdHJheSBjb21tZW50cyBhcmVcbiAgICAgIC8vIG5vdCBwcm9wZXJseSBkZWxpbWl0ZWQuXG5cbiAgICAgIC8vIGZyb20gc3RhdGlvbiBuYW1lXG4gICAgICBpZiAoIS9cXFMvLnRlc3QobGluZS5zdWJzdHJpbmcoNSwgMTApKSkgY29udGludWVcbiAgICAgIGNvbnN0IGZyb21TdHIgPSB2YWxpZGF0ZSg1LCAxMCwgJ2Zyb20gc3RhdGlvbicsIGlzVmFsaWRTdGF0aW9uKVxuXG4gICAgICAvLyBTYWRseSBJIGhhdmUgZm91bmQgbmVnYXRpdmUgTFJVRCB2YWx1ZXMgaW4gQ2hpcCdzIGZvcm1hdCBhbmQgYXBwYXJlbnRseVxuICAgICAgLy8gaGlzIHByb2dyYW0gZG9lc24ndCBmYWlsIG9uIHRoZW0sIHNvIEkgaGF2ZSB0byBhY2NlcHQgdGhlbSBoZXJlXG4gICAgICAvLyBpc1ZhbGlkT3B0RmxvYXQgaW5zdGVhZCBvZiBpc1ZhbGlkT3B0VUZsb2F0XG4gICAgICBjb25zdCBsU3RyID0gdmFsaWRhdGUoNDAsIDQzLCAnbGVmdCcsIGlzVmFsaWRPcHRGbG9hdClcbiAgICAgIGNvbnN0IHJTdHIgPSB2YWxpZGF0ZSg0MywgNDYsICdyaWdodCcsIGlzVmFsaWRPcHRGbG9hdClcbiAgICAgIGNvbnN0IHVTdHIgPSB2YWxpZGF0ZSg0NiwgNDksICd1cCcsIGlzVmFsaWRPcHRGbG9hdClcbiAgICAgIGNvbnN0IGRTdHIgPSB2YWxpZGF0ZSg0OSwgNTIsICdkb3duJywgaXNWYWxpZE9wdEZsb2F0KVxuXG4gICAgICBpZiAoZXJyb3JlZCkgY29udGludWVcblxuICAgICAgY29uc3QgdXAgPSBwYXJzZUxydWQodVN0ciwgZGlzdGFuY2VVbml0KVxuICAgICAgY29uc3QgZG93biA9IHBhcnNlTHJ1ZChkU3RyLCBkaXN0YW5jZVVuaXQpXG4gICAgICBjb25zdCBsZWZ0ID0gcGFyc2VMcnVkKGxTdHIsIGRpc3RhbmNlVW5pdClcbiAgICAgIGNvbnN0IHJpZ2h0ID0gcGFyc2VMcnVkKHJTdHIsIGRpc3RhbmNlVW5pdClcblxuICAgICAgLy8gdG8gc3RhdGlvbiBuYW1lXG4gICAgICBjb25zdCB0b1N0ciA9IGxpbmUuc3Vic3RyaW5nKDAsIDUpXG4gICAgICBpZiAoIXRvU3RyLnRyaW0oKSkge1xuICAgICAgICBjb25zdCBzaG90OiBGcmNzU2hvdCA9IHtcbiAgICAgICAgICBmcm9tOiBmcm9tU3RyLnRyaW0oKSxcbiAgICAgICAgICB0bzogbnVsbCxcbiAgICAgICAgICBraW5kOiBGcmNzU2hvdEtpbmQuTm9ybWFsLFxuICAgICAgICAgIGRpc3RhbmNlOiBuZXcgVW5pdGl6ZWROdW1iZXIoMCwgZGlzdGFuY2VVbml0KSxcbiAgICAgICAgICBmcm9udHNpZ2h0QXppbXV0aDogbnVsbCxcbiAgICAgICAgICBiYWNrc2lnaHRBemltdXRoOiBudWxsLFxuICAgICAgICAgIGZyb250c2lnaHRJbmNsaW5hdGlvbjogbnVsbCxcbiAgICAgICAgICBiYWNrc2lnaHRJbmNsaW5hdGlvbjogbnVsbCxcbiAgICAgICAgICBmcm9tTHJ1ZHM6IHtcbiAgICAgICAgICAgIGxlZnQsXG4gICAgICAgICAgICByaWdodCxcbiAgICAgICAgICAgIHVwLFxuICAgICAgICAgICAgZG93bixcbiAgICAgICAgICB9LFxuICAgICAgICAgIGV4Y2x1ZGVEaXN0YW5jZTogdHJ1ZSxcbiAgICAgICAgICBjb21tZW50OiBnZXRDb21tZW50KCksXG4gICAgICAgIH1cbiAgICAgICAgc2hvdHMucHVzaChzaG90KVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKCFpc1ZhbGlkU3RhdGlvbih0b1N0cikpIHtcbiAgICAgICAgZXJyb3IoJ0ludmFsaWQgc3RhdGlvbiBuYW1lJywgMCwgNSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgZnJvbUxydWRNYXRjaCA9IG5ldyBSZWdFeHAoXG4gICAgICAgIGBeXFxcXHMrJHtmcm9tU3RyXG4gICAgICAgICAgLnRyaW0oKVxuICAgICAgICAgIC5yZXBsYWNlKFxuICAgICAgICAgICAgL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLFxuICAgICAgICAgICAgJ1xcXFwkJidcbiAgICAgICAgICApfSgoXFxcXHMrKFxcXFxkKyhcXFxcLlxcXFxkKik/fFxcXFwuXFxcXGQrKSl7NH0pYFxuICAgICAgKS5leGVjKGxpbmUuc3Vic3RyaW5nKDUyKSlcbiAgICAgIGxldCBmcm9tTHJ1ZHNcbiAgICAgIGlmIChmcm9tTHJ1ZE1hdGNoKSB7XG4gICAgICAgIGNvbnN0IFtsZWZ0LCByaWdodCwgdXAsIGRvd25dID0gZnJvbUxydWRNYXRjaFsxXVxuICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAuc3BsaXQoL1xccysvZylcbiAgICAgICAgICAubWFwKHMgPT4gcGFyc2VMcnVkKHMsIGRpc3RhbmNlVW5pdCkpXG4gICAgICAgIGZyb21McnVkcyA9IHsgbGVmdCwgcmlnaHQsIHVwLCBkb3duIH1cbiAgICAgIH1cblxuICAgICAgLy8gYXppbXV0aCBhbmQgaW5jbGluYXRpb25cbiAgICAgIGNvbnN0IGF6bUZzU3RyID0gdmFsaWRhdGUoMTksIDI1LCAnYXppbXV0aCcsIGlzVmFsaWRPcHRVRmxvYXQpXG4gICAgICBjb25zdCBhem1Cc1N0ciA9IHZhbGlkYXRlKDI1LCAzMCwgJ2F6aW11dGgnLCBpc1ZhbGlkT3B0VUZsb2F0KVxuICAgICAgY29uc3QgaW5jRnNTdHIgPSBsaW5lLnN1YnN0cmluZygzMCwgMzUpXG4gICAgICBjb25zdCBpbmNCc1N0ciA9IGxpbmUuc3Vic3RyaW5nKDM1LCA0MClcblxuICAgICAgaWYgKGVycm9yZWQpIGNvbnRpbnVlXG5cbiAgICAgIGxldCBraW5kOiBGcmNzU2hvdEtpbmRcbiAgICAgIGxldCBkaXN0YW5jZTogVW5pdGl6ZWROdW1iZXI8TGVuZ3RoPlxuICAgICAgbGV0IGhvcml6b250YWxEaXN0YW5jZTogVW5pdGl6ZWROdW1iZXI8TGVuZ3RoPiB8IHVuZGVmaW5lZFxuICAgICAgbGV0IHZlcnRpY2FsRGlzdGFuY2U6IFVuaXRpemVkTnVtYmVyPExlbmd0aD4gfCB1bmRlZmluZWRcbiAgICAgIGxldCBmcm9udHNpZ2h0SW5jbGluYXRpb246IFVuaXRpemVkTnVtYmVyPEFuZ2xlPiB8IG51bGxcbiAgICAgIGxldCBiYWNrc2lnaHRJbmNsaW5hdGlvbjogVW5pdGl6ZWROdW1iZXI8QW5nbGU+IHwgbnVsbFxuICAgICAgbGV0IGV4Y2x1ZGVEaXN0YW5jZTogYm9vbGVhblxuICAgICAgbGV0IGlzU3BsYXk6IGJvb2xlYW5cblxuICAgICAgLy8gcGFyc2UgZGlzdGFuY2VcbiAgICAgIGlmIChpbmNoZXMpIHtcbiAgICAgICAgY29uc3QgZmVldFN0ciA9IGxpbmUuc3Vic3RyaW5nKDEwLCAxNClcbiAgICAgICAgY29uc3QgaW5jaGVzU3RyID0gbGluZS5zdWJzdHJpbmcoMTQsIDE3KVxuICAgICAgICAvLyBmZWV0IGFuZCBpbmNoZXMgYXJlIG5vdCBib3RoIG9wdGlvbmFsXG4gICAgICAgIGlmICghaXNWYWxpZFVJbnQoZmVldFN0cikgJiYgIWlzVmFsaWRVSW50KGluY2hlc1N0cikpIHtcbiAgICAgICAgICBjb25zdCBpbnZhbGlkID0gZmVldFN0ci50cmltKCkgfHwgaW5jaGVzU3RyLnRyaW0oKVxuICAgICAgICAgIGVycm9yKGludmFsaWQgPyAnSW52YWxpZCBkaXN0YW5jZScgOiAnTWlzc2luZyBkaXN0YW5jZScsIDEwLCAxNylcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gc29tZXRpbWVzIGluY2hlcyBhcmUgb21pdHRlZCwgaGVuY2UgdGhlIHx8IDAuLi5JJ20gYXNzdW1pbmcgaXQncyBwb3NzaWJsZVxuICAgICAgICAvLyBmb3IgZmVldCB0byBiZSBvbWl0dGVkIGFzIHdlbGxcbiAgICAgICAgZGlzdGFuY2UgPSBVbml0aXplLmluY2hlcyhwYXJzZUZsb2F0KGluY2hlc1N0cikgfHwgMCkuYWRkKFxuICAgICAgICAgIFVuaXRpemUuZmVldChwYXJzZUZsb2F0KGZlZXRTdHIpIHx8IDApXG4gICAgICAgIClcblxuICAgICAgICBraW5kID0gcGFyc2VLaW5kKGxpbmVbMTddKVxuICAgICAgICAvLyBOT1RFIHRoZXJlIGFyZSB0d28gY29sdW1ucyBhcm91bmQgaGVyZSB0aGF0IGNhbiBjb250YWluIGEgKi5cbiAgICAgICAgLy8gSSB0aGluayB0aGV5IG1pZ2h0IHJlcHJlc2VudCBkaWZmZXJlbnQgdmFsdWVzLCBidXQgdGhpc2lzIGNvbmZ1c2VkIGJ5XG4gICAgICAgIC8vIHRoZSBmYWN0IHRoYXQgZm9yIGZ0L2luIHNob3RzLCBpZiB0aGVyZSBpcyBhIEQgb3IgSCBmbGFnIGl0IG9jY3VwaWVzIHRoZVxuICAgICAgICAvLyBmaXJzdCBjb2x1bW4gdGhhdCBjYW4gY29udGFpbiBhICogZm9yIGRlY2ltYWwgZmVldCBzaG90c1xuICAgICAgICBleGNsdWRlRGlzdGFuY2UgPSBsaW5lWzE4XSA9PT0gJyonIHx8IGxpbmVbMThdID09PSAncydcbiAgICAgICAgaXNTcGxheSA9IGxpbmVbMThdID09PSAncydcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGRlY2ltYWwgZmVldCBhcmUgbm90IG9wdGlvbmFsXG4gICAgICAgIGNvbnN0IGZlZXRTdHIgPSB2YWxpZGF0ZSgxMCwgMTYsICdkaXN0YW5jZScsIGlzVmFsaWRVRmxvYXQpXG4gICAgICAgIGRpc3RhbmNlID0gbmV3IFVuaXRpemVkTnVtYmVyKHBhcnNlRmxvYXQoZmVldFN0ciksIGRpc3RhbmNlVW5pdClcbiAgICAgICAga2luZCA9IHBhcnNlS2luZChsaW5lWzE2XSlcbiAgICAgICAgZXhjbHVkZURpc3RhbmNlID0gbGluZVsxN10gPT09ICcqJyB8fCBsaW5lWzE3XSA9PT0gJ3MnXG4gICAgICAgIGlzU3BsYXkgPSBsaW5lWzE3XSA9PT0gJ3MnXG4gICAgICB9XG5cbiAgICAgIGlmIChraW5kICE9PSBGcmNzU2hvdEtpbmQuTm9ybWFsKSB7XG4gICAgICAgIHZhbGlkYXRlKDMwLCAzNSwgJ3ZlcnRpY2FsLWRpc3RhbmNlJywgaXNWYWxpZEZsb2F0KVxuICAgICAgfVxuXG4gICAgICAvLyBjb252ZXJ0IGhvcml6b250YWwgYW5kIGRpYWdvbmFsIHNob3RzIHRvIHN0YW5kYXJkXG4gICAgICAvLyBpbiB0aGlzIGNhc2UgaW5jRnMgaXMgdGhlIHZlcnRpY2FsIG9mZnNldCBiZXR3ZWVuIHN0YXRpb25zXG4gICAgICAvLyBmb3J0dW5hdGVseSBpdCBhcHBlYXJzIHdlIGNhbiBhbHdheXMgY291bnQgb24gaW5jRnMgYmVpbmcgc3BlY2lmaWVkXG4gICAgICAvLyBhbmQgaW5jQnMgbm90IGJlaW5nIHNwZWNpZmllZCBmb3IgdGhlc2UgdHlwZXMgb2Ygc2hvdHNcbiAgICAgIGlmIChraW5kID09PSBGcmNzU2hvdEtpbmQuSG9yaXpvbnRhbCkge1xuICAgICAgICAvLyBkaXN0YW5jZSBpcyBob3Jpem9udGFsIG9mZnNldCBhbmQgaW5jRnNTdHIgaXMgdmVydGljYWwgb2Zmc2V0XG4gICAgICAgIGhvcml6b250YWxEaXN0YW5jZSA9IGRpc3RhbmNlXG4gICAgICAgIGNvbnN0IGggPSBob3Jpem9udGFsRGlzdGFuY2UuZ2V0KGRpc3RhbmNlVW5pdClcbiAgICAgICAgY29uc3QgdiA9IHBhcnNlRmxvYXQoaW5jRnNTdHIpXG4gICAgICAgIHZlcnRpY2FsRGlzdGFuY2UgPSBuZXcgVW5pdGl6ZWROdW1iZXIodiwgZGlzdGFuY2VVbml0KVxuICAgICAgICBkaXN0YW5jZSA9IG5ldyBVbml0aXplZE51bWJlcihNYXRoLnNxcnQoaCAqIGggKyB2ICogdiksIGRpc3RhbmNlVW5pdClcbiAgICAgICAgZnJvbnRzaWdodEluY2xpbmF0aW9uID0gQW5nbGUuYXRhbjIoXG4gICAgICAgICAgdmVydGljYWxEaXN0YW5jZSxcbiAgICAgICAgICBob3Jpem9udGFsRGlzdGFuY2VcbiAgICAgICAgKVxuICAgICAgICBiYWNrc2lnaHRJbmNsaW5hdGlvbiA9IG51bGxcbiAgICAgIH0gZWxzZSBpZiAoa2luZCA9PT0gRnJjc1Nob3RLaW5kLkRpYWdvbmFsKSB7XG4gICAgICAgIC8vIGRpc3RhbmNlIGlzIGFzIHVzdWFsLCBidXQgaW5jRnNTdHIgaXMgdmVydGljYWwgb2Zmc2V0XG4gICAgICAgIGNvbnN0IGQgPSBkaXN0YW5jZS5nZXQoZGlzdGFuY2VVbml0KVxuICAgICAgICBjb25zdCB2ID0gcGFyc2VGbG9hdChpbmNGc1N0cilcbiAgICAgICAgdmVydGljYWxEaXN0YW5jZSA9IG5ldyBVbml0aXplZE51bWJlcih2LCBkaXN0YW5jZVVuaXQpXG4gICAgICAgIGZyb250c2lnaHRJbmNsaW5hdGlvbiA9IEFuZ2xlLmFzaW4odiAvIGQpXG4gICAgICAgIGJhY2tzaWdodEluY2xpbmF0aW9uID0gbnVsbFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZnJvbnRzaWdodCBpbmNsaW5hdGlvblxuICAgICAgICB2YWxpZGF0ZSgzMCwgMzUsICdpbmNsaW5hdGlvbicsIGlzVmFsaWRPcHRJbmNsaW5hdGlvbilcbiAgICAgICAgLy8gZnJvbnRzaWdodCBpbmNsaW5hdGlvblxuICAgICAgICB2YWxpZGF0ZSgzNSwgNDAsICdpbmNsaW5hdGlvbicsIGlzVmFsaWRPcHRJbmNsaW5hdGlvbilcbiAgICAgICAgZnJvbnRzaWdodEluY2xpbmF0aW9uID0gcGFyc2VOdW1iZXIoaW5jRnNTdHIsIGluY2xpbmF0aW9uVW5pdClcbiAgICAgICAgYmFja3NpZ2h0SW5jbGluYXRpb24gPSBwYXJzZU51bWJlcihpbmNCc1N0ciwgaW5jbGluYXRpb25Vbml0KVxuICAgICAgfVxuICAgICAgaWYgKGVycm9yZWQpIGNvbnRpbnVlXG5cbiAgICAgIGNvbnN0IGZyb250c2lnaHRBemltdXRoID0gcGFyc2VBemltdXRoKGF6bUZzU3RyLCBhemltdXRoVW5pdClcbiAgICAgIGNvbnN0IGJhY2tzaWdodEF6aW11dGggPSBwYXJzZUF6aW11dGgoYXptQnNTdHIsIGF6aW11dGhVbml0KVxuXG4gICAgICBpZiAoIWZyb250c2lnaHRJbmNsaW5hdGlvbiAmJiAhYmFja3NpZ2h0SW5jbGluYXRpb24pIHtcbiAgICAgICAgZnJvbnRzaWdodEluY2xpbmF0aW9uID0gVW5pdGl6ZS5kZWdyZWVzKDApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNob3Q6IEZyY3NTaG90ID0ge1xuICAgICAgICBmcm9tOiBmcm9tU3RyLnRyaW0oKSxcbiAgICAgICAgdG86IHRvU3RyLnRyaW0oKSxcbiAgICAgICAga2luZCxcbiAgICAgICAgZGlzdGFuY2UsXG4gICAgICAgIGZyb250c2lnaHRBemltdXRoLFxuICAgICAgICBiYWNrc2lnaHRBemltdXRoLFxuICAgICAgICBmcm9udHNpZ2h0SW5jbGluYXRpb24sXG4gICAgICAgIGJhY2tzaWdodEluY2xpbmF0aW9uLFxuICAgICAgICB0b0xydWRzOiB7XG4gICAgICAgICAgbGVmdCxcbiAgICAgICAgICByaWdodCxcbiAgICAgICAgICB1cCxcbiAgICAgICAgICBkb3duLFxuICAgICAgICB9LFxuICAgICAgICBleGNsdWRlRGlzdGFuY2UsXG4gICAgICAgIGNvbW1lbnQ6IGdldENvbW1lbnQoKSxcbiAgICAgIH1cbiAgICAgIGlmIChpc1NwbGF5KSBzaG90LmlzU3BsYXkgPSB0cnVlXG4gICAgICBpZiAoZnJvbUxydWRzKSBzaG90LmZyb21McnVkcyA9IGZyb21McnVkc1xuICAgICAgaWYgKGhvcml6b250YWxEaXN0YW5jZSkgc2hvdC5ob3Jpem9udGFsRGlzdGFuY2UgPSBob3Jpem9udGFsRGlzdGFuY2VcbiAgICAgIGlmICh2ZXJ0aWNhbERpc3RhbmNlKSBzaG90LnZlcnRpY2FsRGlzdGFuY2UgPSB2ZXJ0aWNhbERpc3RhbmNlXG4gICAgICBzaG90cy5wdXNoKHNob3QpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBjYXZlLFxuICAgIGxvY2F0aW9uLFxuICAgIHRyaXBzLFxuICAgIGVycm9ycyxcbiAgfVxufVxuIl19
|
|
485
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcGFyc2VTZWdtZW50IiwicmVxdWlyZSIsIl91bml0aXplZCIsIl9GcmNzU2hvdCIsInBhcnNlTnVtYmVyIiwicyIsInVuaXQiLCJ2YWx1ZSIsInBhcnNlRmxvYXQiLCJpc05hTiIsIlVuaXRpemVkTnVtYmVyIiwicGFyc2VBemltdXRoIiwicGFyc2VkIiwiZ2V0IiwiQW5nbGUiLCJkZWdyZWVzIiwiVW5pdGl6ZSIsInBhcnNlS2luZCIsImtpbmQiLCJGcmNzU2hvdEtpbmQiLCJIb3Jpem9udGFsIiwiRGlhZ29uYWwiLCJOb3JtYWwiLCJwYXJzZUxlbmd0aFVuaXQiLCJMZW5ndGgiLCJpbmNoZXMiLCJmZWV0IiwibWV0ZXJzIiwicGFyc2VBbmdsZVVuaXQiLCJncmFkaWFucyIsIm1pbHNOQVRPIiwiaXNWYWxpZFN0YXRpb24iLCJ0ZXN0IiwiaXNWYWxpZFVJbnQiLCJpc1ZhbGlkRmxvYXQiLCJpc1ZhbGlkT3B0RmxvYXQiLCJpc1ZhbGlkT3B0VUZsb2F0IiwiaXNWYWxpZFVGbG9hdCIsImlzVmFsaWRPcHRJbmNsaW5hdGlvbiIsInBhcnNlTHJ1ZCIsIk51bWJlciIsImlzRmluaXRlIiwicGFyc2VGcmNzU3VydmV5RmlsZSIsImZpbGUiLCJsaW5lcyIsImNhdmUiLCJsb2NhdGlvbiIsInRyaXBzIiwiZXJyb3JzIiwidHJpcE5hbWUiLCJ0cmlwVGVhbSIsInRyaXBEYXRlIiwiaW5UcmlwQ29tbWVudCIsInRyaXBDb21tZW50U3RhcnRMaW5lIiwidHJpcENvbW1lbnRFbmRMaW5lIiwidHJpcENvbW1lbnQiLCJjb21tZW50TGluZXMiLCJ0cmlwIiwiaW5CbG9ja0NvbW1lbnQiLCJzZWN0aW9uIiwiZ2V0Q29tbWVudCIsImNvbW1lbnQiLCJqb2luIiwidHJpbSIsImxpbmVOdW1iZXIiLCJsaW5lIiwiZXJyb3JlZCIsInRoaXNMaW5lTnVtYmVyIiwiZXJyb3IiLCJtZXNzYWdlIiwic3RhcnRDb2x1bW4iLCJlbmRDb2x1bW4iLCJwdXNoIiwiU2VnbWVudFBhcnNlRXJyb3IiLCJTZWdtZW50Iiwic291cmNlIiwic3RhcnRMaW5lIiwic3RhcnRDb2wiLCJzdWJzdHJpbmciLCJ2YWxpZGF0ZSIsImZpZWxkTmFtZSIsInZhbGlkYXRvciIsImZpZWxkIiwibWF0Y2giLCJleGVjIiwiY2hhckF0IiwidW5kZWZpbmVkIiwiayIsInRlYW0iLCJtb250aCIsInBhcnNlSW50IiwiZGF5IiwieWVhciIsIkRhdGUiLCJzcGxpdCIsImluZGV4T2YiLCJwYXJ0IiwiZGlzdGFuY2VVbml0Iiwic2xpY2UiLCJhemltdXRoVW5pdCIsImluY2xpbmF0aW9uVW5pdCIsImJhY2tzaWdodEF6aW11dGhDb3JyZWN0ZWQiLCJiYWNrc2lnaHRJbmNsaW5hdGlvbkNvcnJlY3RlZCIsImhhc0JhY2tzaWdodEF6aW11dGgiLCJoYXNCYWNrc2lnaHRJbmNsaW5hdGlvbiIsImhlYWRlciIsIm5hbWUiLCJkYXRlIiwic2hvdHMiLCJfZXhlYyIsImZyb21TdHIiLCJsU3RyIiwiclN0ciIsInVTdHIiLCJkU3RyIiwidXAiLCJkb3duIiwibGVmdCIsInJpZ2h0IiwidG9TdHIiLCJzaG90IiwiZnJvbSIsInRvIiwiZGlzdGFuY2UiLCJmcm9udHNpZ2h0QXppbXV0aCIsImJhY2tzaWdodEF6aW11dGgiLCJmcm9udHNpZ2h0SW5jbGluYXRpb24iLCJiYWNrc2lnaHRJbmNsaW5hdGlvbiIsImZyb21McnVkcyIsImV4Y2x1ZGVEaXN0YW5jZSIsImZyb21McnVkTWF0Y2giLCJSZWdFeHAiLCJyZXBsYWNlIiwibWFwIiwiZnJvbUxydWRDb21tZW50IiwiY29tbWVudEZyb21TdHIiLCJyZXBlYXQiLCJsZW5ndGgiLCJnYXAiLCJscnVkU3RyIiwiYXptRnNTdHIiLCJhem1Cc1N0ciIsImluY0ZzU3RyIiwiaW5jQnNTdHIiLCJob3Jpem9udGFsRGlzdGFuY2UiLCJ2ZXJ0aWNhbERpc3RhbmNlIiwiaXNTcGxheSIsImZlZXRTdHIiLCJpbmNoZXNTdHIiLCJpbnZhbGlkIiwiYWRkIiwiaCIsInYiLCJNYXRoIiwic3FydCIsImF0YW4yIiwiZCIsImFzaW4iLCJ0b0xydWRzIl0sInNvdXJjZXMiOlsiLi4vc3JjL3BhcnNlRnJjc1N1cnZleUZpbGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRnJjc1N1cnZleUZpbGUgfSBmcm9tICcuL0ZyY3NTdXJ2ZXlGaWxlJ1xuaW1wb3J0IHsgRnJjc1RyaXAgfSBmcm9tICcuL0ZyY3NUcmlwJ1xuaW1wb3J0IHsgU2VnbWVudCwgU2VnbWVudFBhcnNlRXJyb3IgfSBmcm9tICdwYXJzZS1zZWdtZW50J1xuaW1wb3J0IHtcbiAgQW5nbGUsXG4gIExlbmd0aCxcbiAgVW5pdCxcbiAgVW5pdGl6ZWROdW1iZXIsXG4gIFVuaXRUeXBlLFxuICBVbml0aXplLFxufSBmcm9tICdAc3BlbGVvdGljYS91bml0aXplZCdcbmltcG9ydCB7IEZyY3NTaG90LCBGcmNzU2hvdEtpbmQgfSBmcm9tICcuL0ZyY3NTaG90J1xuXG5mdW5jdGlvbiBwYXJzZU51bWJlcjxUIGV4dGVuZHMgVW5pdFR5cGU8VD4+KFxuICBzOiBzdHJpbmcsXG4gIHVuaXQ6IFVuaXQ8VD5cbik6IFVuaXRpemVkTnVtYmVyPFQ+IHwgbnVsbCB7XG4gIGNvbnN0IHZhbHVlID0gcGFyc2VGbG9hdChzKVxuICBpZiAoaXNOYU4odmFsdWUpKSByZXR1cm4gbnVsbFxuICByZXR1cm4gbmV3IFVuaXRpemVkTnVtYmVyKHZhbHVlLCB1bml0KVxufVxuXG5mdW5jdGlvbiBwYXJzZUF6aW11dGgoXG4gIHM6IHN0cmluZyxcbiAgdW5pdDogVW5pdDxBbmdsZT5cbik6IFVuaXRpemVkTnVtYmVyPEFuZ2xlPiB8IG51bGwge1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZU51bWJlcihzLCB1bml0KVxuICByZXR1cm4gcGFyc2VkPy5nZXQoQW5nbGUuZGVncmVlcykgPT09IDM2MCA/IFVuaXRpemUuZGVncmVlcygwKSA6IHBhcnNlZFxufVxuXG5mdW5jdGlvbiBwYXJzZUtpbmQoa2luZDogc3RyaW5nKTogRnJjc1Nob3RLaW5kIHtcbiAgc3dpdGNoIChraW5kKSB7XG4gICAgY2FzZSAnSCc6XG4gICAgICByZXR1cm4gRnJjc1Nob3RLaW5kLkhvcml6b250YWxcbiAgICBjYXNlICdEJzpcbiAgICAgIHJldHVybiBGcmNzU2hvdEtpbmQuRGlhZ29uYWxcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIEZyY3NTaG90S2luZC5Ob3JtYWxcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZUxlbmd0aFVuaXQodW5pdDogc3RyaW5nKTogVW5pdDxMZW5ndGg+IHwgbnVsbCB7XG4gIHN3aXRjaCAodW5pdCkge1xuICAgIGNhc2UgJ0ZJJzpcbiAgICAgIHJldHVybiBMZW5ndGguaW5jaGVzXG4gICAgY2FzZSAnRkYnOlxuICAgIGNhc2UgJ0ZUJzpcbiAgICAgIHJldHVybiBMZW5ndGguZmVldFxuICAgIGNhc2UgJ01UJzpcbiAgICBjYXNlICdNICc6XG4gICAgICByZXR1cm4gTGVuZ3RoLm1ldGVyc1xuICB9XG4gIHJldHVybiBudWxsXG59XG5mdW5jdGlvbiBwYXJzZUFuZ2xlVW5pdCh1bml0OiBzdHJpbmcpOiBVbml0PEFuZ2xlPiB8IG51bGwge1xuICBzd2l0Y2ggKHVuaXQpIHtcbiAgICBjYXNlICdEJzpcbiAgICAgIHJldHVybiBBbmdsZS5kZWdyZWVzXG4gICAgY2FzZSAnRyc6XG4gICAgICByZXR1cm4gQW5nbGUuZ3JhZGlhbnNcbiAgICBjYXNlICdNJzpcbiAgICAgIHJldHVybiBBbmdsZS5taWxzTkFUT1xuICB9XG4gIHJldHVybiBudWxsXG59XG5cbi8vIGRldGVybWluZXMgaWYgYSBjZWxsIGNvbnRhaW5zIGEgdmFsaWQgc3RhdGlvbiBuYW1lLlxuZnVuY3Rpb24gaXNWYWxpZFN0YXRpb24oczogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiAvXlxccypcXFMrXFxzKiQvLnRlc3Qocylcbn1cbi8vIGRldGVybWluZXMgaWYgYSBjZWxsIGNvbnRhaW5zIGEgdmFsaWQgdW5zaWduZWQgaW50ZWdlci5cbmZ1bmN0aW9uIGlzVmFsaWRVSW50KHM6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gL15cXHMqWzAtOV0rXFxzKiQvLnRlc3Qocylcbn1cbi8vIGRldGVybWluZXMgaWYgYSBjZWxsIGNvbnRhaW5zIGEgdmFsaWQgZmxvYXQuXG5mdW5jdGlvbiBpc1ZhbGlkRmxvYXQoczogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiAvXlxccypbLStdPyhbMC05XSsoXFwuWzAtOV0qKT98XFwuWzAtOV0rKVxccyokLy50ZXN0KHMpXG59XG4vLyBkZXRlcm1pbmVzIGlmIGEgY2VsbCBjb250YWlucyBhIHZhbGlkIHVuc2lnbmVkIGZsb2F0IG9yIHdoaXRlc3BhY2UuXG5mdW5jdGlvbiBpc1ZhbGlkT3B0RmxvYXQoczogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiAvXlxccypbLStdP1swLTldKihcXC5bMC05XSopP1xccyokLy50ZXN0KHMpXG59XG4vLyBkZXRlcm1pbmVzIGlmIGEgY2VsbCBjb250YWlucyBhIHZhbGlkIHVuc2lnbmVkIGZsb2F0IG9yIHdoaXRlc3BhY2UuXG5mdW5jdGlvbiBpc1ZhbGlkT3B0VUZsb2F0KHM6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gL15cXHMqWzAtOV0qKFxcLlswLTldKik/XFxzKiQvLnRlc3Qocylcbn1cbi8vIGRldGVybWluZXMgaWYgYSBjZWxsIGNvbnRhaW5zIGEgdmFsaWQgdW5zaWduZWQgZmxvYXQuXG5mdW5jdGlvbiBpc1ZhbGlkVUZsb2F0KHM6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gL15cXHMqKFswLTldKyhcXC5bMC05XSopP3xcXC5bMC05XSspXFxzKiQvLnRlc3Qocylcbn1cbi8vIGRldGVybWluZXMgaWYgYSBjZWxsIGNvbnRhaW5zIGEgdmFsaWQgaW5jbGluYXRpb24gb3Igd2hpdGVzcGFjZS5cbmZ1bmN0aW9uIGlzVmFsaWRPcHRJbmNsaW5hdGlvbihzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIC9eXFxzKlstK10/WzAtOV0qKFxcLlswLTldKik/XFxzKiQvLnRlc3Qocylcbn1cbmZ1bmN0aW9uIHBhcnNlTHJ1ZDxUIGV4dGVuZHMgVW5pdFR5cGU8VD4+KFxuICBzOiBzdHJpbmcsXG4gIHVuaXQ6IFVuaXQ8TGVuZ3RoPlxuKTogVW5pdGl6ZWROdW1iZXI8TGVuZ3RoPiB8IG51bGwge1xuICBjb25zdCB2YWx1ZSA9IHBhcnNlRmxvYXQocylcbiAgcmV0dXJuICFOdW1iZXIuaXNGaW5pdGUodmFsdWUpIHx8IHZhbHVlIDwgMFxuICAgID8gbnVsbFxuICAgIDogbmV3IFVuaXRpemVkTnVtYmVyKHZhbHVlLCB1bml0KVxufVxuXG4vKipcbiAqIFBhcnNlcyBhIHJhdyBjZGF0YS5mciBzdXJ2ZXkgZmlsZS4gIFRoZXNlIGxvb2sgbGlrZSBzbzpcbiAqXG48cHJlPiAgICAgIEZpc2hlciBSaWRnZSBDYXZlIFN5c3RlbSwgSGFydCBDby4sIEtZXG5FTlRSQU5DRSBEUk9QUywgSk9FJ1MgXCJJIExPVkUgTVkgV0lGRSBUUkFWRVJTRVwiLCBUUklDS1kgVFJBVkVSU0VcblBFVEVSIFFVSUNLLCBLRUlUSCBPUlRJWiAgIC0gIDItMTUtODFcblRoaXMgRmlsZSBoYXMgQ3J1bXBzIHRlc3QgY29ubmVjdGVkLiAgMTEvMjAvMTJcbiAqXG5GVCBDICBERCAgICBBXG4gICAgICBBRTIwICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAxICAzICAwICAyXG4qICAgICAgJUZTXG4qICAgICBBRTIwICAgICAwICAgICAgICAwICAgICAgICAwICAgICAgICBCdWctY2FuJ3QgcHV0IGJlZm9yZSBzbyBwdXQgYWZ0ZXItc28gY2FuJ3QgbWFrZSAyIGZpeGVkIDEwLzI4LzEyXG4gQUUxOSBBRTIwICAgOS4zICAgIDYwLjAgIDYwLjAtMzYuMCAgICAgICAyIDEyICAwIDIwXG4gQUUxOCBBRTE5ICAyNC41ICAgICAwLjAgICAwLjAtOTAuMCAgICAgICA2IDEwIDI1ICAwXG4gQUUxNyBBRTE4ICAgOC4wICAgMzUwLjUgMzUwLjUgMTcuMCAgICAgICAzICA1ICAwICAwXG4gQUUxNiBBRTE3ICAgNi43ICAgICAwLjAgICAwLjAtOTAuMCAgICAgICAzICA1ICA2ICAxXG4gQUUxNSBBRTE2ICAxMi42ICAgIDcwLjUgIDcxLjAtMTguMCAgICAgICA0ICAwICAyICAxXG4gQUUxNCBBRTE1ICAxMC4wICAgIDIxLjUgIDIwLjAgIDYuMCAgICAgICA1ICA1ICAwICAzXG4gQUUxMyBBRTE0ICAyNi44ICAgMjg4LjAgMjg2LjAtNTAuMCAgICAgICAwICA3IDIwICA1XG4qXG4qU0hPUlQgQ0FOWU9OIEFUIFRIRSBCQVNFIE9GIFRIRSBTRUNPTkQgRFJPUFxuIEFFMTIgQUUxMyAgMjAuNyAgIDIzNi4wIDIzNi4wIDM0LjAgICAgICAgMyAgNSAgNCAgNFxuIEFFMTEgQUUxMiAgMTIuNCAgIDIxMC4wIDIxMC4wIDM1LjAgICAgICAgNyAgNCAgNSAgMVxuIEFFMTAgQUUxMyAgMjUuNyAgICA0MC4wICA0MC4wIC05LjAgICAgICAgMiAgMiAgMyAgNlxuKlxuKkFFMTAgQVQgSk9FJ1MgXCIgSSBMT1ZFIE1ZIFdJRkUgVFJBVkVSU0UgXCJcbiAgQUU5IEFFMTAgIDE3LjggICAgMzIuNSAgMzEuMCAyMy4wICAgICAgIDQgIDUgMjAgMTVcbiAgQUUxICBBRTkgIDEzLjcgICAgODIuMCAgODIuMC0xMy4wXG4gICBBMSAgQUUxICAzNC4zICAgIDQ2LjAgIDQ4LjAtMTcuNVxuKlxuKlNVUlZFWSBUTyBET01FIE5FQVIgVEhFIEVOVFJBTkNFIERPTUUgKEFCT1ZFIFRIRSBTRUNPTkQgRFJPUClcbiAgQUQxIEFFMTUgICA4LjAgICAyMDAuMCAyMDAuMCAgMC4wICAgICAgIDMgIDEgIDEgIDFcbiAgQUQyICBBRDEgIDE3LjcgICAxNjEuMCAxNjEuMCAgNy4wICAgICAgIDEgIDQgMjUgIDFcbiAgQUQzICBBRDIgIDEwLjQgICAxODAuMCAxODAuMCA1MC4wICAgICAgIDQgIDEgMTUgIDVcbiAqXG5UUklDS1kgVFJBVkVSU0UgQU5EIFRIRU4gRklSU1QgU1VSVkVZIElOIFVQUEVSIENST1dMV0FZXG5EQU4gQ1JPV0wsIEtFSVRIIE9SVElaLCBDSElQIEhPUFBFUiwgUEVURVIgUVVJQ0ssIExBUlJZIEJFQU4gICAgMTQgRkVCIDE5ODFcbiAqXG5GSSBCICBERFxuICAgQTIgICBBMSAgNDggMTAgIDI5Mi4wIDExMC4wLTQyLjAgICAgICAgNSAxMCAzNSAgNVxuICAgQTMgICBBMiAgMTIgIDUgIDMzMy41IDE1My41IDM1LjAgICAgICAgMyAgMSAxNSAgNVxuICAgQTQgICBBMyAgIDQgIDIgICAgMC4wICAgMC4wIDkwLjAgICAgICAgMyAgMSAxMCAxMFxuLi4uPC9wcmU+XG4gKlxuICovXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiBwYXJzZUZyY3NTdXJ2ZXlGaWxlKFxuICBmaWxlOiBhbnksIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBsaW5lczogQXN5bmNJdGVyYWJsZTxzdHJpbmc+XG4pOiBQcm9taXNlPEZyY3NTdXJ2ZXlGaWxlPiB7XG4gIGxldCBjYXZlOiBzdHJpbmcgfCBudWxsID0gbnVsbFxuICBsZXQgbG9jYXRpb246IHN0cmluZyB8IG51bGwgPSBudWxsXG4gIGNvbnN0IHRyaXBzOiBBcnJheTxGcmNzVHJpcD4gPSBbXVxuICBjb25zdCBlcnJvcnM6IEFycmF5PFNlZ21lbnRQYXJzZUVycm9yPiA9IFtdXG5cbiAgbGV0IHRyaXBOYW1lXG4gIGxldCB0cmlwVGVhbVxuICBsZXQgdHJpcERhdGVcbiAgbGV0IGluVHJpcENvbW1lbnQgPSB0cnVlXG4gIGxldCB0cmlwQ29tbWVudFN0YXJ0TGluZSA9IDFcbiAgbGV0IHRyaXBDb21tZW50RW5kTGluZSA9IC0xXG4gIGxldCB0cmlwQ29tbWVudDogQXJyYXk8c3RyaW5nPiA9IFtdXG4gIGxldCBjb21tZW50TGluZXM6IEFycmF5PHN0cmluZz4gfCBudWxsID0gbnVsbFxuICBsZXQgdHJpcDogRnJjc1RyaXAgfCBudWxsID0gbnVsbFxuICBsZXQgaW5CbG9ja0NvbW1lbnQgPSBmYWxzZVxuICBsZXQgc2VjdGlvblxuXG4gIGZ1bmN0aW9uIGdldENvbW1lbnQoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKCFjb21tZW50TGluZXMpIHJldHVybiBudWxsXG4gICAgY29uc3QgY29tbWVudCA9IGNvbW1lbnRMaW5lcy5qb2luKCdcXG4nKS50cmltKClcbiAgICBjb21tZW50TGluZXMgPSBudWxsXG4gICAgcmV0dXJuIGNvbW1lbnQgfHwgbnVsbFxuICB9XG5cbiAgbGV0IGxpbmVOdW1iZXIgPSAwXG5cbiAgZm9yIGF3YWl0IChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgbGV0IGVycm9yZWQgPSBmYWxzZVxuXG4gICAgY29uc3QgdGhpc0xpbmVOdW1iZXIgPSBsaW5lTnVtYmVyXG5cbiAgICBjb25zdCBlcnJvciA9IChcbiAgICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICAgIHN0YXJ0Q29sdW1uOiBudW1iZXIsXG4gICAgICBlbmRDb2x1bW46IG51bWJlclxuICAgICk6IHZvaWQgPT4ge1xuICAgICAgZXJyb3JlZCA9IHRydWVcbiAgICAgIGVycm9ycy5wdXNoKFxuICAgICAgICBuZXcgU2VnbWVudFBhcnNlRXJyb3IoXG4gICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICBuZXcgU2VnbWVudCh7XG4gICAgICAgICAgICB2YWx1ZTogbGluZSxcbiAgICAgICAgICAgIHNvdXJjZTogZmlsZSxcbiAgICAgICAgICAgIHN0YXJ0TGluZTogdGhpc0xpbmVOdW1iZXIsXG4gICAgICAgICAgICBzdGFydENvbDogMCxcbiAgICAgICAgICB9KS5zdWJzdHJpbmcoc3RhcnRDb2x1bW4sIGVuZENvbHVtbilcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH1cblxuICAgIGNvbnN0IHZhbGlkYXRlID0gKFxuICAgICAgc3RhcnRDb2x1bW46IG51bWJlcixcbiAgICAgIGVuZENvbHVtbjogbnVtYmVyLFxuICAgICAgZmllbGROYW1lOiBzdHJpbmcsXG4gICAgICB2YWxpZGF0b3I6ICh2YWx1ZTogc3RyaW5nKSA9PiBib29sZWFuXG4gICAgKTogc3RyaW5nID0+IHtcbiAgICAgIGNvbnN0IGZpZWxkID0gbGluZS5zdWJzdHJpbmcoc3RhcnRDb2x1bW4sIGVuZENvbHVtbilcbiAgICAgIGlmICghdmFsaWRhdG9yKGZpZWxkKSkge1xuICAgICAgICBlcnJvcihcbiAgICAgICAgICAoZmllbGQudHJpbSgpID8gJ0ludmFsaWQgJyA6ICdNaXNzaW5nICcpICsgZmllbGROYW1lLFxuICAgICAgICAgIHN0YXJ0Q29sdW1uLFxuICAgICAgICAgIGVuZENvbHVtblxuICAgICAgICApXG4gICAgICB9XG4gICAgICByZXR1cm4gZmllbGRcbiAgICB9XG5cbiAgICBsaW5lTnVtYmVyKytcblxuICAgIGlmIChsaW5lTnVtYmVyID09PSAxKSB7XG4gICAgICBjb25zdCBtYXRjaCA9IC9eXFxzKihbXixdKykoLCguKikpPy8uZXhlYyhsaW5lKVxuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIGNhdmUgPSBtYXRjaFsxXS50cmltKClcbiAgICAgICAgaWYgKG1hdGNoWzNdKSB7XG4gICAgICAgICAgbG9jYXRpb24gPSBtYXRjaFszXS50cmltKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChsaW5lLmNoYXJBdCgwKSA9PT0gJyAnICYmIGxpbmUuY2hhckF0KDEpID09PSAnKicpIHtcbiAgICAgIGluVHJpcENvbW1lbnQgPSAhaW5UcmlwQ29tbWVudFxuICAgICAgaWYgKGluVHJpcENvbW1lbnQpIHtcbiAgICAgICAgc2VjdGlvbiA9IHVuZGVmaW5lZFxuICAgICAgICB0cmlwQ29tbWVudCA9IFtdXG4gICAgICAgIHRyaXBDb21tZW50U3RhcnRMaW5lID0gbGluZU51bWJlclxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJpcENvbW1lbnRFbmRMaW5lID0gbGluZU51bWJlclxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaW5UcmlwQ29tbWVudCkge1xuICAgICAgaWYgKGxpbmVOdW1iZXIgPT09IHRyaXBDb21tZW50U3RhcnRMaW5lICsgMSkge1xuICAgICAgICB0cmlwTmFtZSA9IGxpbmUgJiYgbGluZS50cmltKClcbiAgICAgIH0gZWxzZSBpZiAobGluZU51bWJlciA9PT0gdHJpcENvbW1lbnRTdGFydExpbmUgKyAyKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gL14oLis/KVxccypbLS5dXFxzKihcXGQrKVxcLyhcXGQrKVxcLyhcXGQrKSQvLmV4ZWMoXG4gICAgICAgICAgbGluZSAmJiBsaW5lLnRyaW0oKVxuICAgICAgICApXG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIGxldCBrID0gMVxuICAgICAgICAgIGNvbnN0IHRlYW0gPSBtYXRjaFtrKytdXG4gICAgICAgICAgY29uc3QgbW9udGggPSBwYXJzZUludChtYXRjaFtrKytdKVxuICAgICAgICAgIGNvbnN0IGRheSA9IHBhcnNlSW50KG1hdGNoW2srK10pXG4gICAgICAgICAgY29uc3QgeWVhciA9IHBhcnNlSW50KG1hdGNoW2srK10pXG4gICAgICAgICAgdHJpcERhdGUgPSBuZXcgRGF0ZSh5ZWFyIDwgNzAgPyB5ZWFyICsgMjAwMCA6IHllYXIsIG1vbnRoIC0gMSwgZGF5KVxuICAgICAgICAgIHRyaXBUZWFtID0gdGVhbS5zcGxpdChcbiAgICAgICAgICAgIHRlYW0uaW5kZXhPZignOycpID49IDAgPyAvXFxzKjtcXHMqL2cgOiAvXFxzKixcXHMqL2dcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobGluZU51bWJlciA+IDEpIHtcbiAgICAgICAgdHJpcENvbW1lbnQucHVzaChsaW5lKVxuICAgICAgfVxuICAgICAgY29uc3QgbWF0Y2ggPSAvXlxcKlxcKlxcKihbXipdKVxcKlxcKlxcKi8uZXhlYyhsaW5lKVxuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIHNlY3Rpb24gPSBtYXRjaFsxXS50cmltKClcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGxpbmUuY2hhckF0KDApID09PSAnKicpIHtcbiAgICAgIGluQmxvY2tDb21tZW50ID0gIWluQmxvY2tDb21tZW50XG4gICAgICBpZiAoaW5CbG9ja0NvbW1lbnQpIGNvbW1lbnRMaW5lcyA9IFtdXG4gICAgICBlbHNlIGlmIChjb21tZW50TGluZXMpIHtcbiAgICAgICAgY29uc3QgcGFydCA9IGxpbmUuc3Vic3RyaW5nKDEpLnRyaW0oKVxuICAgICAgICBpZiAocGFydCAmJiBjb21tZW50TGluZXMpIGNvbW1lbnRMaW5lcy5wdXNoKHBhcnQpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpbkJsb2NrQ29tbWVudCkge1xuICAgICAgaWYgKGNvbW1lbnRMaW5lcykgY29tbWVudExpbmVzLnB1c2gobGluZSlcbiAgICB9IGVsc2UgaWYgKGxpbmVOdW1iZXIgPT09IHRyaXBDb21tZW50RW5kTGluZSArIDEpIHtcbiAgICAgIC8vIEZUIENDIEREXG4gICAgICAvLyAwMTIzNDU2N1xuICAgICAgbGV0IGRpc3RhbmNlVW5pdCA9IHBhcnNlTGVuZ3RoVW5pdChsaW5lLnNsaWNlKDAsIDIpKVxuICAgICAgaWYgKCFkaXN0YW5jZVVuaXQpIHtcbiAgICAgICAgZGlzdGFuY2VVbml0ID0gTGVuZ3RoLmZlZXRcbiAgICAgICAgZXJyb3IoJ0ludmFsaWQgZGlzdGFuY2UgdW5pdCcsIDAsIDIpXG4gICAgICB9XG4gICAgICBsZXQgYXppbXV0aFVuaXQgPSBwYXJzZUFuZ2xlVW5pdChsaW5lWzZdKVxuICAgICAgaWYgKCFhemltdXRoVW5pdCkge1xuICAgICAgICBhemltdXRoVW5pdCA9IEFuZ2xlLmRlZ3JlZXNcbiAgICAgICAgZXJyb3IoJ0ludmFsaWQgYXppbXV0aCB1bml0JywgNiwgNylcbiAgICAgIH1cbiAgICAgIGxldCBpbmNsaW5hdGlvblVuaXQgPSBwYXJzZUFuZ2xlVW5pdChsaW5lWzddKVxuICAgICAgaWYgKCFpbmNsaW5hdGlvblVuaXQpIHtcbiAgICAgICAgaW5jbGluYXRpb25Vbml0ID0gQW5nbGUuZGVncmVlc1xuICAgICAgICBlcnJvcignSW52YWxpZCBpbmNsaW5hdGlvbiB1bml0JywgNywgOClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJhY2tzaWdodEF6aW11dGhDb3JyZWN0ZWQgPSBsaW5lWzNdID09PSAnQydcbiAgICAgIGNvbnN0IGJhY2tzaWdodEluY2xpbmF0aW9uQ29ycmVjdGVkID0gbGluZVs0XSA9PT0gJ0MnXG4gICAgICBjb25zdCBoYXNCYWNrc2lnaHRBemltdXRoID0gbGluZVszXSAhPT0gJyAnICYmIGxpbmVbM10gIT09ICctJ1xuICAgICAgY29uc3QgaGFzQmFja3NpZ2h0SW5jbGluYXRpb24gPSBsaW5lWzRdICE9PSAnICcgJiYgbGluZVs0XSAhPT0gJy0nXG5cbiAgICAgIGlmICghL1stQ0IgXS8udGVzdChsaW5lWzNdKSkge1xuICAgICAgICBlcnJvcignSW52YWxpZCBiYWNrc2lnaHQgYXppbXV0aCB0eXBlJywgMywgNClcbiAgICAgIH1cbiAgICAgIGlmICghL1stQ0IgXS8udGVzdChsaW5lWzRdKSkge1xuICAgICAgICBlcnJvcignSW52YWxpZCBiYWNrc2lnaHQgaW5jbGluYXRpb24gdHlwZScsIDQsIDUpXG4gICAgICB9XG5cbiAgICAgIHRyaXAgPSB7XG4gICAgICAgIGhlYWRlcjoge1xuICAgICAgICAgIG5hbWU6IHRyaXBOYW1lIHx8ICcnLFxuICAgICAgICAgIGNvbW1lbnQ6ICh0cmlwQ29tbWVudCAmJiB0cmlwQ29tbWVudC5qb2luKCdcXG4nKSkgfHwgbnVsbCxcbiAgICAgICAgICBzZWN0aW9uLFxuICAgICAgICAgIGRhdGU6IHRyaXBEYXRlLFxuICAgICAgICAgIHRlYW06IHRyaXBUZWFtLFxuICAgICAgICAgIGRpc3RhbmNlVW5pdCxcbiAgICAgICAgICBhemltdXRoVW5pdCxcbiAgICAgICAgICBpbmNsaW5hdGlvblVuaXQsXG4gICAgICAgICAgYmFja3NpZ2h0QXppbXV0aENvcnJlY3RlZCxcbiAgICAgICAgICBiYWNrc2lnaHRJbmNsaW5hdGlvbkNvcnJlY3RlZCxcbiAgICAgICAgICBoYXNCYWNrc2lnaHRBemltdXRoLFxuICAgICAgICAgIGhhc0JhY2tzaWdodEluY2xpbmF0aW9uLFxuICAgICAgICB9LFxuICAgICAgICBzaG90czogW10sXG4gICAgICB9XG4gICAgICB0cmlwcy5wdXNoKHRyaXApXG4gICAgfSBlbHNlIGlmICh0cmlwKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHNob3RzLFxuICAgICAgICBoZWFkZXI6IHsgYXppbXV0aFVuaXQsIGluY2xpbmF0aW9uVW5pdCB9LFxuICAgICAgfSA9IHRyaXBcbiAgICAgIGxldCB7IGRpc3RhbmNlVW5pdCB9ID0gdHJpcC5oZWFkZXJcblxuICAgICAgY29uc3QgaW5jaGVzID0gZGlzdGFuY2VVbml0ID09PSBMZW5ndGguaW5jaGVzXG4gICAgICBpZiAoaW5jaGVzKSBkaXN0YW5jZVVuaXQgPSBMZW5ndGguZmVldFxuXG4gICAgICAvLyByaWdvcm91c2x5IGNoZWNrIHRoZSB2YWx1ZXMgaW4gYWxsIHRoZSBjb2x1bW5zIHRvIG1ha2Ugc3VyZSB0aGlzXG4gICAgICAvLyBpcyByZWFsbHkgYSBzdXJ2ZXkgc2hvdCBsaW5lLCBqdXN0IGluIGNhc2UgYW55IHN0cmF5IGNvbW1lbnRzIGFyZVxuICAgICAgLy8gbm90IHByb3Blcmx5IGRlbGltaXRlZC5cblxuICAgICAgLy8gZnJvbSBzdGF0aW9uIG5hbWVcbiAgICAgIGlmICghL1xcUy8udGVzdChsaW5lLnN1YnN0cmluZyg1LCAxMCkpKSBjb250aW51ZVxuICAgICAgY29uc3QgZnJvbVN0ciA9IHZhbGlkYXRlKDUsIDEwLCAnZnJvbSBzdGF0aW9uJywgaXNWYWxpZFN0YXRpb24pXG5cbiAgICAgIC8vIFNhZGx5IEkgaGF2ZSBmb3VuZCBuZWdhdGl2ZSBMUlVEIHZhbHVlcyBpbiBDaGlwJ3MgZm9ybWF0IGFuZCBhcHBhcmVudGx5XG4gICAgICAvLyBoaXMgcHJvZ3JhbSBkb2Vzbid0IGZhaWwgb24gdGhlbSwgc28gSSBoYXZlIHRvIGFjY2VwdCB0aGVtIGhlcmVcbiAgICAgIC8vIGlzVmFsaWRPcHRGbG9hdCBpbnN0ZWFkIG9mIGlzVmFsaWRPcHRVRmxvYXRcbiAgICAgIGNvbnN0IGxTdHIgPSB2YWxpZGF0ZSg0MCwgNDMsICdsZWZ0JywgaXNWYWxpZE9wdEZsb2F0KVxuICAgICAgY29uc3QgclN0ciA9IHZhbGlkYXRlKDQzLCA0NiwgJ3JpZ2h0JywgaXNWYWxpZE9wdEZsb2F0KVxuICAgICAgY29uc3QgdVN0ciA9IHZhbGlkYXRlKDQ2LCA0OSwgJ3VwJywgaXNWYWxpZE9wdEZsb2F0KVxuICAgICAgY29uc3QgZFN0ciA9IHZhbGlkYXRlKDQ5LCA1MiwgJ2Rvd24nLCBpc1ZhbGlkT3B0RmxvYXQpXG5cbiAgICAgIGlmIChlcnJvcmVkKSBjb250aW51ZVxuXG4gICAgICBjb25zdCB1cCA9IHBhcnNlTHJ1ZCh1U3RyLCBkaXN0YW5jZVVuaXQpXG4gICAgICBjb25zdCBkb3duID0gcGFyc2VMcnVkKGRTdHIsIGRpc3RhbmNlVW5pdClcbiAgICAgIGNvbnN0IGxlZnQgPSBwYXJzZUxydWQobFN0ciwgZGlzdGFuY2VVbml0KVxuICAgICAgY29uc3QgcmlnaHQgPSBwYXJzZUxydWQoclN0ciwgZGlzdGFuY2VVbml0KVxuXG4gICAgICAvLyB0byBzdGF0aW9uIG5hbWVcbiAgICAgIGNvbnN0IHRvU3RyID0gbGluZS5zdWJzdHJpbmcoMCwgNSlcbiAgICAgIGlmICghdG9TdHIudHJpbSgpKSB7XG4gICAgICAgIGNvbnN0IHNob3Q6IEZyY3NTaG90ID0ge1xuICAgICAgICAgIGZyb206IGZyb21TdHIudHJpbSgpLFxuICAgICAgICAgIHRvOiBudWxsLFxuICAgICAgICAgIGtpbmQ6IEZyY3NTaG90S2luZC5Ob3JtYWwsXG4gICAgICAgICAgZGlzdGFuY2U6IG5ldyBVbml0aXplZE51bWJlcigwLCBkaXN0YW5jZVVuaXQpLFxuICAgICAgICAgIGZyb250c2lnaHRBemltdXRoOiBudWxsLFxuICAgICAgICAgIGJhY2tzaWdodEF6aW11dGg6IG51bGwsXG4gICAgICAgICAgZnJvbnRzaWdodEluY2xpbmF0aW9uOiBudWxsLFxuICAgICAgICAgIGJhY2tzaWdodEluY2xpbmF0aW9uOiBudWxsLFxuICAgICAgICAgIGZyb21McnVkczoge1xuICAgICAgICAgICAgbGVmdCxcbiAgICAgICAgICAgIHJpZ2h0LFxuICAgICAgICAgICAgdXAsXG4gICAgICAgICAgICBkb3duLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZXhjbHVkZURpc3RhbmNlOiB0cnVlLFxuICAgICAgICAgIGNvbW1lbnQ6IGdldENvbW1lbnQoKSxcbiAgICAgICAgfVxuICAgICAgICBzaG90cy5wdXNoKHNob3QpXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoIWlzVmFsaWRTdGF0aW9uKHRvU3RyKSkge1xuICAgICAgICBlcnJvcignSW52YWxpZCBzdGF0aW9uIG5hbWUnLCAwLCA1KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBmcm9tTHJ1ZE1hdGNoID0gbmV3IFJlZ0V4cChcbiAgICAgICAgYF5cXFxccyske2Zyb21TdHJcbiAgICAgICAgICAudHJpbSgpXG4gICAgICAgICAgLnJlcGxhY2UoXG4gICAgICAgICAgICAvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csXG4gICAgICAgICAgICAnXFxcXCQmJ1xuICAgICAgICAgICl9KChcXFxccysoXFxcXGQrKFxcXFwuXFxcXGQqKT98XFxcXC5cXFxcZCspKXs0fSlgXG4gICAgICApLmV4ZWMobGluZS5zdWJzdHJpbmcoNTIpKVxuICAgICAgbGV0IGZyb21McnVkc1xuICAgICAgaWYgKGZyb21McnVkTWF0Y2gpIHtcbiAgICAgICAgY29uc3QgW2xlZnQsIHJpZ2h0LCB1cCwgZG93bl0gPSBmcm9tTHJ1ZE1hdGNoWzFdXG4gICAgICAgICAgLnRyaW0oKVxuICAgICAgICAgIC5zcGxpdCgvXFxzKy9nKVxuICAgICAgICAgIC5tYXAocyA9PiBwYXJzZUxydWQocywgZGlzdGFuY2VVbml0KSlcbiAgICAgICAgZnJvbUxydWRzID0geyBsZWZ0LCByaWdodCwgdXAsIGRvd24gfVxuICAgICAgfVxuXG4gICAgICBsZXQgY29tbWVudCA9IGdldENvbW1lbnQoKVxuICAgICAgbGV0IGZyb21McnVkQ29tbWVudCA9IGNvbW1lbnRcbiAgICAgIGNvbnN0IGNvbW1lbnRGcm9tU3RyID0gY29tbWVudCA/IC9eXFxTezEsNX0vLmV4ZWMoY29tbWVudCk/LlswXSA6IG51bGxcbiAgICAgIGlmIChjb21tZW50RnJvbVN0cikge1xuICAgICAgICBjb25zdCBmcm9tU3RyID0gY29tbWVudEZyb21TdHJcbiAgICAgICAgZnJvbUxydWRDb21tZW50ID0gJyAnLnJlcGVhdCg1IC0gZnJvbVN0ci5sZW5ndGgpICsgZnJvbUxydWRDb21tZW50XG4gICAgICAgIGNvbnN0IGdhcCA9IGZyb21McnVkQ29tbWVudC5zdWJzdHJpbmcoNSwgNDApXG4gICAgICAgIGNvbnN0IGxydWRTdHIgPSBmcm9tTHJ1ZENvbW1lbnQuc3Vic3RyaW5nKDQwLCA1MilcbiAgICAgICAgY29uc3QgbFN0ciA9IGZyb21McnVkQ29tbWVudC5zdWJzdHJpbmcoNDAsIDQzKVxuICAgICAgICBjb25zdCByU3RyID0gZnJvbUxydWRDb21tZW50LnN1YnN0cmluZyg0MywgNDYpXG4gICAgICAgIGNvbnN0IHVTdHIgPSBmcm9tTHJ1ZENvbW1lbnQuc3Vic3RyaW5nKDQ2LCA0OSlcbiAgICAgICAgY29uc3QgZFN0ciA9IGZyb21McnVkQ29tbWVudC5zdWJzdHJpbmcoNDksIDUyKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgL15cXHMqXFxTKyQvLnRlc3QoZnJvbVN0cikgJiZcbiAgICAgICAgICAhZ2FwLnRyaW0oKSAmJlxuICAgICAgICAgIGlzVmFsaWRPcHRGbG9hdChsU3RyKSAmJlxuICAgICAgICAgIGlzVmFsaWRPcHRGbG9hdChyU3RyKSAmJlxuICAgICAgICAgIGlzVmFsaWRPcHRGbG9hdCh1U3RyKSAmJlxuICAgICAgICAgIGlzVmFsaWRPcHRGbG9hdChkU3RyKSAmJlxuICAgICAgICAgIC9cXGQvLnRlc3QobHJ1ZFN0cilcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgdXAgPSBwYXJzZUxydWQodVN0ciwgZGlzdGFuY2VVbml0KVxuICAgICAgICAgIGNvbnN0IGRvd24gPSBwYXJzZUxydWQoZFN0ciwgZGlzdGFuY2VVbml0KVxuICAgICAgICAgIGNvbnN0IGxlZnQgPSBwYXJzZUxydWQobFN0ciwgZGlzdGFuY2VVbml0KVxuICAgICAgICAgIGNvbnN0IHJpZ2h0ID0gcGFyc2VMcnVkKHJTdHIsIGRpc3RhbmNlVW5pdClcbiAgICAgICAgICBmcm9tTHJ1ZHMgPSB7IGxlZnQsIHJpZ2h0LCB1cCwgZG93biB9XG4gICAgICAgICAgY29tbWVudCA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBhemltdXRoIGFuZCBpbmNsaW5hdGlvblxuICAgICAgY29uc3QgYXptRnNTdHIgPSB2YWxpZGF0ZSgxOSwgMjUsICdhemltdXRoJywgaXNWYWxpZE9wdFVGbG9hdClcbiAgICAgIGNvbnN0IGF6bUJzU3RyID0gdmFsaWRhdGUoMjUsIDMwLCAnYXppbXV0aCcsIGlzVmFsaWRPcHRVRmxvYXQpXG4gICAgICBjb25zdCBpbmNGc1N0ciA9IGxpbmUuc3Vic3RyaW5nKDMwLCAzNSlcbiAgICAgIGNvbnN0IGluY0JzU3RyID0gbGluZS5zdWJzdHJpbmcoMzUsIDQwKVxuXG4gICAgICBpZiAoZXJyb3JlZCkgY29udGludWVcblxuICAgICAgbGV0IGtpbmQ6IEZyY3NTaG90S2luZFxuICAgICAgbGV0IGRpc3RhbmNlOiBVbml0aXplZE51bWJlcjxMZW5ndGg+XG4gICAgICBsZXQgaG9yaXpvbnRhbERpc3RhbmNlOiBVbml0aXplZE51bWJlcjxMZW5ndGg+IHwgdW5kZWZpbmVkXG4gICAgICBsZXQgdmVydGljYWxEaXN0YW5jZTogVW5pdGl6ZWROdW1iZXI8TGVuZ3RoPiB8IHVuZGVmaW5lZFxuICAgICAgbGV0IGZyb250c2lnaHRJbmNsaW5hdGlvbjogVW5pdGl6ZWROdW1iZXI8QW5nbGU+IHwgbnVsbFxuICAgICAgbGV0IGJhY2tzaWdodEluY2xpbmF0aW9uOiBVbml0aXplZE51bWJlcjxBbmdsZT4gfCBudWxsXG4gICAgICBsZXQgZXhjbHVkZURpc3RhbmNlOiBib29sZWFuXG4gICAgICBsZXQgaXNTcGxheTogYm9vbGVhblxuXG4gICAgICAvLyBwYXJzZSBkaXN0YW5jZVxuICAgICAgaWYgKGluY2hlcykge1xuICAgICAgICBjb25zdCBmZWV0U3RyID0gbGluZS5zdWJzdHJpbmcoMTAsIDE0KVxuICAgICAgICBjb25zdCBpbmNoZXNTdHIgPSBsaW5lLnN1YnN0cmluZygxNCwgMTcpXG4gICAgICAgIC8vIGZlZXQgYW5kIGluY2hlcyBhcmUgbm90IGJvdGggb3B0aW9uYWxcbiAgICAgICAgaWYgKCFpc1ZhbGlkVUludChmZWV0U3RyKSAmJiAhaXNWYWxpZFVJbnQoaW5jaGVzU3RyKSkge1xuICAgICAgICAgIGNvbnN0IGludmFsaWQgPSBmZWV0U3RyLnRyaW0oKSB8fCBpbmNoZXNTdHIudHJpbSgpXG4gICAgICAgICAgZXJyb3IoaW52YWxpZCA/ICdJbnZhbGlkIGRpc3RhbmNlJyA6ICdNaXNzaW5nIGRpc3RhbmNlJywgMTAsIDE3KVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICAvLyBzb21ldGltZXMgaW5jaGVzIGFyZSBvbWl0dGVkLCBoZW5jZSB0aGUgfHwgMC4uLkknbSBhc3N1bWluZyBpdCdzIHBvc3NpYmxlXG4gICAgICAgIC8vIGZvciBmZWV0IHRvIGJlIG9taXR0ZWQgYXMgd2VsbFxuICAgICAgICBkaXN0YW5jZSA9IFVuaXRpemUuaW5jaGVzKHBhcnNlRmxvYXQoaW5jaGVzU3RyKSB8fCAwKS5hZGQoXG4gICAgICAgICAgVW5pdGl6ZS5mZWV0KHBhcnNlRmxvYXQoZmVldFN0cikgfHwgMClcbiAgICAgICAgKVxuXG4gICAgICAgIGtpbmQgPSBwYXJzZUtpbmQobGluZVsxN10pXG4gICAgICAgIC8vIE5PVEUgdGhlcmUgYXJlIHR3byBjb2x1bW5zIGFyb3VuZCBoZXJlIHRoYXQgY2FuIGNvbnRhaW4gYSAqLlxuICAgICAgICAvLyBJIHRoaW5rIHRoZXkgbWlnaHQgcmVwcmVzZW50IGRpZmZlcmVudCB2YWx1ZXMsIGJ1dCB0aGlzaXMgY29uZnVzZWQgYnlcbiAgICAgICAgLy8gdGhlIGZhY3QgdGhhdCBmb3IgZnQvaW4gc2hvdHMsIGlmIHRoZXJlIGlzIGEgRCBvciBIIGZsYWcgaXQgb2NjdXBpZXMgdGhlXG4gICAgICAgIC8vIGZpcnN0IGNvbHVtbiB0aGF0IGNhbiBjb250YWluIGEgKiBmb3IgZGVjaW1hbCBmZWV0IHNob3RzXG4gICAgICAgIGV4Y2x1ZGVEaXN0YW5jZSA9IGxpbmVbMThdID09PSAnKicgfHwgbGluZVsxOF0gPT09ICdzJ1xuICAgICAgICBpc1NwbGF5ID0gbGluZVsxOF0gPT09ICdzJ1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZGVjaW1hbCBmZWV0IGFyZSBub3Qgb3B0aW9uYWxcbiAgICAgICAgY29uc3QgZmVldFN0ciA9IHZhbGlkYXRlKDEwLCAxNiwgJ2Rpc3RhbmNlJywgaXNWYWxpZFVGbG9hdClcbiAgICAgICAgZGlzdGFuY2UgPSBuZXcgVW5pdGl6ZWROdW1iZXIocGFyc2VGbG9hdChmZWV0U3RyKSwgZGlzdGFuY2VVbml0KVxuICAgICAgICBraW5kID0gcGFyc2VLaW5kKGxpbmVbMTZdKVxuICAgICAgICBleGNsdWRlRGlzdGFuY2UgPSBsaW5lWzE3XSA9PT0gJyonIHx8IGxpbmVbMTddID09PSAncydcbiAgICAgICAgaXNTcGxheSA9IGxpbmVbMTddID09PSAncydcbiAgICAgIH1cblxuICAgICAgaWYgKGtpbmQgIT09IEZyY3NTaG90S2luZC5Ob3JtYWwpIHtcbiAgICAgICAgdmFsaWRhdGUoMzAsIDM1LCAndmVydGljYWwtZGlzdGFuY2UnLCBpc1ZhbGlkRmxvYXQpXG4gICAgICB9XG5cbiAgICAgIC8vIGNvbnZlcnQgaG9yaXpvbnRhbCBhbmQgZGlhZ29uYWwgc2hvdHMgdG8gc3RhbmRhcmRcbiAgICAgIC8vIGluIHRoaXMgY2FzZSBpbmNGcyBpcyB0aGUgdmVydGljYWwgb2Zmc2V0IGJldHdlZW4gc3RhdGlvbnNcbiAgICAgIC8vIGZvcnR1bmF0ZWx5IGl0IGFwcGVhcnMgd2UgY2FuIGFsd2F5cyBjb3VudCBvbiBpbmNGcyBiZWluZyBzcGVjaWZpZWRcbiAgICAgIC8vIGFuZCBpbmNCcyBub3QgYmVpbmcgc3BlY2lmaWVkIGZvciB0aGVzZSB0eXBlcyBvZiBzaG90c1xuICAgICAgaWYgKGtpbmQgPT09IEZyY3NTaG90S2luZC5Ib3Jpem9udGFsKSB7XG4gICAgICAgIC8vIGRpc3RhbmNlIGlzIGhvcml6b250YWwgb2Zmc2V0IGFuZCBpbmNGc1N0ciBpcyB2ZXJ0aWNhbCBvZmZzZXRcbiAgICAgICAgaG9yaXpvbnRhbERpc3RhbmNlID0gZGlzdGFuY2VcbiAgICAgICAgY29uc3QgaCA9IGhvcml6b250YWxEaXN0YW5jZS5nZXQoZGlzdGFuY2VVbml0KVxuICAgICAgICBjb25zdCB2ID0gcGFyc2VGbG9hdChpbmNGc1N0cilcbiAgICAgICAgdmVydGljYWxEaXN0YW5jZSA9IG5ldyBVbml0aXplZE51bWJlcih2LCBkaXN0YW5jZVVuaXQpXG4gICAgICAgIGRpc3RhbmNlID0gbmV3IFVuaXRpemVkTnVtYmVyKE1hdGguc3FydChoICogaCArIHYgKiB2KSwgZGlzdGFuY2VVbml0KVxuICAgICAgICBmcm9udHNpZ2h0SW5jbGluYXRpb24gPSBBbmdsZS5hdGFuMihcbiAgICAgICAgICB2ZXJ0aWNhbERpc3RhbmNlLFxuICAgICAgICAgIGhvcml6b250YWxEaXN0YW5jZVxuICAgICAgICApXG4gICAgICAgIGJhY2tzaWdodEluY2xpbmF0aW9uID0gbnVsbFxuICAgICAgfSBlbHNlIGlmIChraW5kID09PSBGcmNzU2hvdEtpbmQuRGlhZ29uYWwpIHtcbiAgICAgICAgLy8gZGlzdGFuY2UgaXMgYXMgdXN1YWwsIGJ1dCBpbmNGc1N0ciBpcyB2ZXJ0aWNhbCBvZmZzZXRcbiAgICAgICAgY29uc3QgZCA9IGRpc3RhbmNlLmdldChkaXN0YW5jZVVuaXQpXG4gICAgICAgIGNvbnN0IHYgPSBwYXJzZUZsb2F0KGluY0ZzU3RyKVxuICAgICAgICB2ZXJ0aWNhbERpc3RhbmNlID0gbmV3IFVuaXRpemVkTnVtYmVyKHYsIGRpc3RhbmNlVW5pdClcbiAgICAgICAgZnJvbnRzaWdodEluY2xpbmF0aW9uID0gQW5nbGUuYXNpbih2IC8gZClcbiAgICAgICAgYmFja3NpZ2h0SW5jbGluYXRpb24gPSBudWxsXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBmcm9udHNpZ2h0IGluY2xpbmF0aW9uXG4gICAgICAgIHZhbGlkYXRlKDMwLCAzNSwgJ2luY2xpbmF0aW9uJywgaXNWYWxpZE9wdEluY2xpbmF0aW9uKVxuICAgICAgICAvLyBmcm9udHNpZ2h0IGluY2xpbmF0aW9uXG4gICAgICAgIHZhbGlkYXRlKDM1LCA0MCwgJ2luY2xpbmF0aW9uJywgaXNWYWxpZE9wdEluY2xpbmF0aW9uKVxuICAgICAgICBmcm9udHNpZ2h0SW5jbGluYXRpb24gPSBwYXJzZU51bWJlcihpbmNGc1N0ciwgaW5jbGluYXRpb25Vbml0KVxuICAgICAgICBiYWNrc2lnaHRJbmNsaW5hdGlvbiA9IHBhcnNlTnVtYmVyKGluY0JzU3RyLCBpbmNsaW5hdGlvblVuaXQpXG4gICAgICB9XG4gICAgICBpZiAoZXJyb3JlZCkgY29udGludWVcblxuICAgICAgY29uc3QgZnJvbnRzaWdodEF6aW11dGggPSBwYXJzZUF6aW11dGgoYXptRnNTdHIsIGF6aW11dGhVbml0KVxuICAgICAgY29uc3QgYmFja3NpZ2h0QXppbXV0aCA9IHBhcnNlQXppbXV0aChhem1Cc1N0ciwgYXppbXV0aFVuaXQpXG5cbiAgICAgIGlmICghZnJvbnRzaWdodEluY2xpbmF0aW9uICYmICFiYWNrc2lnaHRJbmNsaW5hdGlvbikge1xuICAgICAgICBmcm9udHNpZ2h0SW5jbGluYXRpb24gPSBVbml0aXplLmRlZ3JlZXMoMClcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2hvdDogRnJjc1Nob3QgPSB7XG4gICAgICAgIGZyb206IGZyb21TdHIudHJpbSgpLFxuICAgICAgICB0bzogdG9TdHIudHJpbSgpLFxuICAgICAgICBraW5kLFxuICAgICAgICBkaXN0YW5jZSxcbiAgICAgICAgZnJvbnRzaWdodEF6aW11dGgsXG4gICAgICAgIGJhY2tzaWdodEF6aW11dGgsXG4gICAgICAgIGZyb250c2lnaHRJbmNsaW5hdGlvbixcbiAgICAgICAgYmFja3NpZ2h0SW5jbGluYXRpb24sXG4gICAgICAgIHRvTHJ1ZHM6IHtcbiAgICAgICAgICBsZWZ0LFxuICAgICAgICAgIHJpZ2h0LFxuICAgICAgICAgIHVwLFxuICAgICAgICAgIGRvd24sXG4gICAgICAgIH0sXG4gICAgICAgIGV4Y2x1ZGVEaXN0YW5jZSxcbiAgICAgICAgY29tbWVudCxcbiAgICAgIH1cbiAgICAgIGlmIChpc1NwbGF5KSBzaG90LmlzU3BsYXkgPSB0cnVlXG4gICAgICBpZiAoZnJvbUxydWRzKSBzaG90LmZyb21McnVkcyA9IGZyb21McnVkc1xuICAgICAgaWYgKGhvcml6b250YWxEaXN0YW5jZSkgc2hvdC5ob3Jpem9udGFsRGlzdGFuY2UgPSBob3Jpem9udGFsRGlzdGFuY2VcbiAgICAgIGlmICh2ZXJ0aWNhbERpc3RhbmNlKSBzaG90LnZlcnRpY2FsRGlzdGFuY2UgPSB2ZXJ0aWNhbERpc3RhbmNlXG4gICAgICBzaG90cy5wdXNoKHNob3QpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBjYXZlLFxuICAgIGxvY2F0aW9uLFxuICAgIHRyaXBzLFxuICAgIGVycm9ycyxcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFFQSxJQUFBQSxhQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxTQUFBLEdBQUFELE9BQUE7QUFRQSxJQUFBRSxTQUFBLEdBQUFGLE9BQUE7QUFFQSxTQUFTRyxXQUFXQSxDQUNsQkMsQ0FBUyxFQUNUQyxJQUFhLEVBQ2E7RUFDMUIsTUFBTUMsS0FBSyxHQUFHQyxVQUFVLENBQUNILENBQUMsQ0FBQztF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
|