dgeoutils 2.2.23 → 2.3.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.
Files changed (50) hide show
  1. package/README.md +7 -0
  2. package/dist/{DCircle.d.ts → cjs/DCircle.d.ts} +0 -0
  3. package/dist/cjs/DCircle.js +102 -0
  4. package/dist/{DLine.d.ts → cjs/DLine.d.ts} +0 -0
  5. package/dist/cjs/DLine.js +300 -0
  6. package/dist/{DNumbers.d.ts → cjs/DNumbers.d.ts} +0 -0
  7. package/dist/cjs/DNumbers.js +30 -0
  8. package/dist/{DPlane.d.ts → cjs/DPlane.d.ts} +0 -0
  9. package/dist/cjs/DPlane.js +132 -0
  10. package/dist/{DPoint.d.ts → cjs/DPoint.d.ts} +0 -0
  11. package/dist/cjs/DPoint.js +574 -0
  12. package/dist/{DPolygon.d.ts → cjs/DPolygon.d.ts} +7 -1
  13. package/dist/cjs/DPolygon.js +1555 -0
  14. package/dist/{DPolygonLoop.d.ts → cjs/DPolygonLoop.d.ts} +0 -0
  15. package/dist/cjs/DPolygonLoop.js +401 -0
  16. package/dist/{FastSearch.d.ts → cjs/FastSearch.d.ts} +0 -0
  17. package/dist/cjs/FastSearch.js +53 -0
  18. package/dist/{TraceMatrix.d.ts → cjs/TraceMatrix.d.ts} +0 -0
  19. package/dist/cjs/TraceMatrix.js +256 -0
  20. package/dist/{index.d.ts → cjs/index.d.ts} +0 -0
  21. package/dist/{index.js → cjs/index.js} +0 -0
  22. package/dist/{utils.d.ts → cjs/utils.d.ts} +0 -0
  23. package/dist/cjs/utils.js +191 -0
  24. package/dist/{DCircle.js → es2015/DCircle.js} +14 -18
  25. package/dist/{DLine.js → es2015/DLine.js} +24 -28
  26. package/dist/es2015/DNumbers.js +22 -0
  27. package/dist/{DPlane.js → es2015/DPlane.js} +22 -26
  28. package/dist/{DPoint.js → es2015/DPoint.js} +52 -56
  29. package/dist/{DPolygon.js → es2015/DPolygon.js} +90 -86
  30. package/dist/{DPolygonLoop.js → es2015/DPolygonLoop.js} +1 -5
  31. package/dist/{FastSearch.js → es2015/FastSearch.js} +1 -5
  32. package/dist/{TraceMatrix.js → es2015/TraceMatrix.js} +35 -39
  33. package/dist/es2015/index.js +13 -0
  34. package/dist/{utils.js → es2015/utils.js} +26 -36
  35. package/dist/esm/DCircle.js +99 -0
  36. package/dist/esm/DLine.js +297 -0
  37. package/dist/esm/DNumbers.js +27 -0
  38. package/dist/esm/DPlane.js +129 -0
  39. package/dist/esm/DPoint.js +571 -0
  40. package/dist/esm/DPolygon.js +1552 -0
  41. package/dist/esm/DPolygonLoop.js +398 -0
  42. package/dist/esm/FastSearch.js +50 -0
  43. package/dist/esm/TraceMatrix.js +253 -0
  44. package/dist/esm/index.js +13 -0
  45. package/dist/esm/utils.js +181 -0
  46. package/dist/umd/dgeoutils.js +3569 -0
  47. package/dist/umd/dgeoutils.min.js +1 -0
  48. package/dist/umd/dgeoutils.min.js.map +1 -0
  49. package/package.json +17 -10
  50. package/dist/DNumbers.js +0 -26
@@ -0,0 +1,3569 @@
1
+ (function (global, factory) {
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('jsts')) :
3
+ typeof define === 'function' && define.amd ? define(['exports', 'jsts'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.DGeoUtils = {}, global.jsts));
5
+ })(this, (function (exports, jsts) { 'use strict';
6
+
7
+ var __read$4 = (undefined && undefined.__read) || function (o, n) {
8
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
9
+ if (!m) return o;
10
+ var i = m.call(o), r, ar = [], e;
11
+ try {
12
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
13
+ }
14
+ catch (error) { e = { error: error }; }
15
+ finally {
16
+ try {
17
+ if (r && !r.done && (m = i["return"])) m.call(i);
18
+ }
19
+ finally { if (e) throw e.error; }
20
+ }
21
+ return ar;
22
+ };
23
+ var __spreadArray$2 = (undefined && undefined.__spreadArray) || function (to, from, pack) {
24
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
25
+ if (ar || !(i in from)) {
26
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
27
+ ar[i] = from[i];
28
+ }
29
+ }
30
+ return to.concat(ar || Array.prototype.slice.call(from));
31
+ };
32
+ var warn = function () {
33
+ var args = [];
34
+ for (var _i = 0; _i < arguments.length; _i++) {
35
+ args[_i] = arguments[_i];
36
+ }
37
+ if (DGeo.DEBUG) {
38
+ console.warn.apply(console, __spreadArray$2([], __read$4(args), false));
39
+ }
40
+ };
41
+ var isDefAndNotNull = function (a) { return a != undefined; };
42
+ var hook = function (scope) { return function () { return scope; }; };
43
+ var shouldBeInt = function (scope, funcName, argName) { return function (p) {
44
+ if (!p.clone().round()
45
+ .equal(p)) {
46
+ warn("\"" + funcName + "\" -> \"" + argName + "\" should be Int!");
47
+ }
48
+ return scope;
49
+ }; };
50
+ var shouldBeUInt = function (scope, funcName, argName) { return function (p) {
51
+ if (!p.clone().round()
52
+ .equal(p) || !p.gtOrEqual(DPoint.zero())) {
53
+ warn("\"" + funcName + "\" -> \"" + argName + "\" should be UInt!");
54
+ }
55
+ return scope;
56
+ }; };
57
+ var shouldBeDegree = function (scope, funcName, argName) { return function (p) {
58
+ if (!p.likeWorldGeodeticSystem) {
59
+ warn("\"" + funcName + "\" -> \"" + argName + "\" should be degree!");
60
+ }
61
+ return scope;
62
+ }; };
63
+ var shouldBeRadians = function (scope, funcName, argName) { return function (p) {
64
+ if (!p.likeRadians) {
65
+ warn("\"" + funcName + "\" -> \"" + argName + "\" should be radians!");
66
+ }
67
+ return scope;
68
+ }; };
69
+ var shouldExist = function (scope, funcName, argName) { return function (p) {
70
+ if (!isDefAndNotNull(p)) {
71
+ warn("\"" + funcName + "\" -> \"" + argName + "\" should exist!");
72
+ }
73
+ return scope;
74
+ }; };
75
+ var shouldBeMeters = function (scope, funcName, argName) { return function (p) {
76
+ if (!p.likePseudoMercator) {
77
+ warn("\"" + funcName + "\" -> \"" + argName + "\" should be meters!");
78
+ }
79
+ return scope;
80
+ }; };
81
+ var checkFunction = function (funcName) { return ({
82
+ checkArgument: function (argName) {
83
+ if (!DGeo.DEBUG) {
84
+ return {
85
+ shouldBeDegree: hook(this),
86
+ shouldBeMeters: hook(this),
87
+ shouldBeInt: hook(this),
88
+ shouldBeUInt: hook(this),
89
+ shouldBeRadians: hook(this),
90
+ shouldExist: hook(this)
91
+ };
92
+ }
93
+ return {
94
+ shouldBeDegree: shouldBeDegree(this, funcName, argName),
95
+ shouldBeMeters: shouldBeMeters(this, funcName, argName),
96
+ shouldBeInt: shouldBeInt(this, funcName, argName),
97
+ shouldBeUInt: shouldBeUInt(this, funcName, argName),
98
+ shouldBeRadians: shouldBeRadians(this, funcName, argName),
99
+ shouldExist: shouldExist(this, funcName, argName)
100
+ };
101
+ }
102
+ }); };
103
+ var createArray = function (v, fillSymbol) {
104
+ if (fillSymbol === void 0) { fillSymbol = 0; }
105
+ return new Array(v).fill(fillSymbol);
106
+ };
107
+ var createMatrix = function (_a, fillSymbol) {
108
+ var h = _a.h, w = _a.w;
109
+ if (fillSymbol === void 0) { fillSymbol = 0; }
110
+ return createArray(h)
111
+ .map(function () { return createArray(w, fillSymbol); });
112
+ };
113
+ var gaussianElimination = function (matrix) {
114
+ var n = matrix.length;
115
+ var matrixClone = createMatrix(new DPoint(n + 1, n));
116
+ for (var i = 0; i < n; i++) {
117
+ for (var j = 0; j < n + 1; j++) {
118
+ matrix[i][j] = matrix[i][j] === 0 ? gaussianElimination.MIN : matrix[i][j];
119
+ matrixClone[i][j] = matrix[i][j];
120
+ }
121
+ }
122
+ for (var k = 0; k < n; k++) {
123
+ for (var i = 0; i < n + 1; i++) {
124
+ matrixClone[k][i] /= matrix[k][k];
125
+ }
126
+ for (var i = k + 1; i < n; i++) {
127
+ var K = matrixClone[i][k] / matrixClone[k][k];
128
+ for (var j = 0; j < n + 1; j++) {
129
+ matrixClone[i][j] -= matrixClone[k][j] * K;
130
+ }
131
+ }
132
+ for (var i = 0; i < n; i++) {
133
+ for (var j = 0; j < n + 1; j++) {
134
+ matrix[i][j] = matrixClone[i][j];
135
+ }
136
+ }
137
+ }
138
+ for (var k = n - 1; k > -1; k--) {
139
+ for (var i = n; i > -1; i--) {
140
+ matrixClone[k][i] /= matrix[k][k];
141
+ }
142
+ for (var i = k - 1; i > -1; i--) {
143
+ var K = matrixClone[i][k] / matrixClone[k][k];
144
+ for (var j = n; j > -1; j--) {
145
+ matrixClone[i][j] -= matrixClone[k][j] * K;
146
+ }
147
+ }
148
+ }
149
+ var answer = createArray(n);
150
+ for (var i = 0; i < n; i++) {
151
+ answer[i] = matrixClone[i][n];
152
+ }
153
+ return answer;
154
+ };
155
+ gaussianElimination.MIN = 1e-10;
156
+ var createCanvas = function (a, b, c) {
157
+ var _a;
158
+ var w = 0;
159
+ var h = 0;
160
+ var offscreen = false;
161
+ if (a instanceof DPoint) {
162
+ var x = a.x, y = a.y;
163
+ w = x;
164
+ h = y;
165
+ }
166
+ else {
167
+ w = a;
168
+ h = a;
169
+ }
170
+ if (typeof b === 'boolean') {
171
+ offscreen = b;
172
+ }
173
+ else if (typeof b === 'number') {
174
+ h = b;
175
+ }
176
+ if (typeof c === 'boolean') {
177
+ offscreen = c;
178
+ }
179
+ var canvas = offscreen ? new OffscreenCanvas(w, h) : ((_a = createCanvas.document) !== null && _a !== void 0 ? _a : document).createElement('canvas');
180
+ if (!offscreen) {
181
+ canvas.width = w;
182
+ canvas.height = h;
183
+ }
184
+ return [canvas, canvas.getContext('2d')];
185
+ };
186
+
187
+ var delta = 0.001;
188
+ var DNumbers = (function () {
189
+ function DNumbers() {
190
+ }
191
+ DNumbers.like = function (v, s, d) {
192
+ if (d === void 0) { d = delta; }
193
+ return Math.abs(v - s) < d;
194
+ };
195
+ DNumbers.likeZero = function (v) {
196
+ return DNumbers.like(v, 0);
197
+ };
198
+ DNumbers.like2PI = function (v) {
199
+ return DNumbers.like(DNumbers.rad2Deg(v), DOUBLE_PI_IN_DEGREE);
200
+ };
201
+ DNumbers.likePI = function (v) {
202
+ return DNumbers.like(DNumbers.rad2Deg(v), PI_IN_DEGREE);
203
+ };
204
+ DNumbers.rad2Deg = function (v) {
205
+ return v * DEGREE_TO_PI;
206
+ };
207
+ DNumbers.deg2Rad = function (v) {
208
+ return v * PI_TO_DEGREE;
209
+ };
210
+ return DNumbers;
211
+ }());
212
+
213
+ var DLine = (function () {
214
+ function DLine(a, b, c, begin, end) {
215
+ if (begin === void 0) { begin = DPoint.zero(); }
216
+ if (end === void 0) { end = DPoint.zero(); }
217
+ this.a = a;
218
+ this.b = b;
219
+ this.c = c;
220
+ this.begin = begin;
221
+ this.end = end;
222
+ }
223
+ DLine.prototype.clone = function () {
224
+ return new DLine(this.a, this.b, this.c, this.begin.clone(), this.end.clone());
225
+ };
226
+ DLine.prototype.findPerpendicular = function (p) {
227
+ checkFunction('findPerpendicular')
228
+ .checkArgument('this.begin')
229
+ .shouldBeMeters(this.begin)
230
+ .checkArgument('this.end')
231
+ .shouldBeMeters(this.end)
232
+ .checkArgument('p')
233
+ .shouldBeMeters(p);
234
+ return new DLine(-this.b, this.a, this.b * p.x - this.a * p.y);
235
+ };
236
+ DLine.prototype.perpendicularDistance = function (p) {
237
+ checkFunction('perpendicularDistance')
238
+ .checkArgument('this.begin')
239
+ .shouldBeMeters(this.begin)
240
+ .checkArgument('this.end')
241
+ .shouldBeMeters(this.end)
242
+ .checkArgument('p')
243
+ .shouldBeMeters(p);
244
+ var perpendicularLine = this.findPerpendicular(p);
245
+ var targetPoint = perpendicularLine.findPoint(this);
246
+ return targetPoint.distance(p);
247
+ };
248
+ DLine.prototype.intersection = function (l, d, includeOnly) {
249
+ if (d === void 0) { d = 0; }
250
+ if (includeOnly === void 0) { includeOnly = false; }
251
+ var p = this.findPoint(l);
252
+ if (p) {
253
+ if (includeOnly) {
254
+ return this.insideRange(p, d) && l.insideRange(p, d) ? p : null;
255
+ }
256
+ return this.inRange(p, d) && l.inRange(p, d) ? p : null;
257
+ }
258
+ return null;
259
+ };
260
+ DLine.prototype.intersectionWithCircle = function (circle) {
261
+ var center = circle.center, r = circle.r;
262
+ var per = this.findPerpendicular(center);
263
+ var t = this.findPoint(per);
264
+ var distance = t.distance(center);
265
+ if (this.begin.equal(center)) {
266
+ distance = 0;
267
+ }
268
+ if (this.end.equal(center)) {
269
+ distance = 0;
270
+ }
271
+ if (distance < r) {
272
+ var _a = this, a = _a.a, b = _a.b, c = _a.c;
273
+ if (this.isParallel) {
274
+ var ct = center.distance(t);
275
+ var move = Math.sqrt(r * r - ct * ct);
276
+ if (this.isParallelY) {
277
+ t.x = this.begin.x;
278
+ var r1_1 = t.clone().move(0, -move);
279
+ var r2_1 = t.clone().move(0, move);
280
+ return [r1_1, r2_1];
281
+ }
282
+ if (this.isParallelX) {
283
+ t.y = this.begin.y;
284
+ var r1_2 = t.clone().move(move, 0);
285
+ var r2_2 = t.clone().move(-move, 0);
286
+ return [r1_2, r2_2];
287
+ }
288
+ }
289
+ if (this.begin.like(center)) {
290
+ var p = this.begin.clone();
291
+ return [this.movePoint(p, r), this.movePoint(p, -r)];
292
+ }
293
+ if (this.end.like(center)) {
294
+ var p = this.end.clone();
295
+ return [this.movePoint(p, r), this.movePoint(p, -r)];
296
+ }
297
+ var s = a * a + b * b;
298
+ var d = r * r - c * c / s;
299
+ var mult = Math.sqrt(d / s);
300
+ var r1 = t.clone().move(b * mult, -a * mult);
301
+ var r2 = t.clone().move(-b * mult, a * mult);
302
+ return [r1, r2];
303
+ }
304
+ if (distance === r) {
305
+ return t;
306
+ }
307
+ return null;
308
+ };
309
+ DLine.prototype.inRange = function (p, d) {
310
+ if (d === void 0) { d = 0; }
311
+ var _a = this, minX = _a.minX, minY = _a.minY, maxX = _a.maxX, maxY = _a.maxY;
312
+ var x = p.x, y = p.y;
313
+ var isInX = x >= minX - d && x <= maxX + d;
314
+ var isInY = y >= minY - d && y <= maxY + d;
315
+ return isInX && isInY;
316
+ };
317
+ DLine.prototype.insideRange = function (p, d) {
318
+ if (d === void 0) { d = 0; }
319
+ var _a = this, begin = _a.begin, end = _a.end;
320
+ return this.inRange(p, d) && !begin.like(p, 0.00001) && !end.like(p, 0.00001);
321
+ };
322
+ Object.defineProperty(DLine.prototype, "center", {
323
+ get: function () {
324
+ return this.begin
325
+ .clone()
326
+ .setIfLessThan(this.end)
327
+ .move(this.end
328
+ .clone()
329
+ .move(this.begin
330
+ .clone()
331
+ .minus())
332
+ .abs()
333
+ .minus()
334
+ .divide(2));
335
+ },
336
+ enumerable: false,
337
+ configurable: true
338
+ });
339
+ Object.defineProperty(DLine.prototype, "minX", {
340
+ get: function () {
341
+ return Math.min(this.begin.x, this.end.x);
342
+ },
343
+ enumerable: false,
344
+ configurable: true
345
+ });
346
+ Object.defineProperty(DLine.prototype, "minY", {
347
+ get: function () {
348
+ return Math.min(this.begin.y, this.end.y);
349
+ },
350
+ enumerable: false,
351
+ configurable: true
352
+ });
353
+ Object.defineProperty(DLine.prototype, "maxX", {
354
+ get: function () {
355
+ return Math.max(this.begin.x, this.end.x);
356
+ },
357
+ enumerable: false,
358
+ configurable: true
359
+ });
360
+ Object.defineProperty(DLine.prototype, "maxY", {
361
+ get: function () {
362
+ return Math.max(this.begin.y, this.end.y);
363
+ },
364
+ enumerable: false,
365
+ configurable: true
366
+ });
367
+ DLine.prototype.toString = function () {
368
+ return "(" + this.a + ", " + this.b + ", " + this.c + ")";
369
+ };
370
+ DLine.prototype.getValue = function () {
371
+ return [this.a, this.b, this.c];
372
+ };
373
+ DLine.prototype.x = function (p) {
374
+ if (this.isParallelY) {
375
+ return new DPoint(-this.c / this.a, p.y);
376
+ }
377
+ if (this.isParallelX) {
378
+ return new DPoint(p.x, -this.c / this.b);
379
+ }
380
+ return new DPoint(-this.b / this.a * p.y - this.c / this.a, p.y);
381
+ };
382
+ DLine.prototype.y = function (p) {
383
+ if (this.isParallelY) {
384
+ return new DPoint(-this.c / this.a, p.y);
385
+ }
386
+ if (this.isParallelX) {
387
+ return new DPoint(p.x, -this.c / this.b);
388
+ }
389
+ return new DPoint(p.x, -this.a / this.b * p.x - this.c / this.b);
390
+ };
391
+ DLine.prototype.findPoint = function (l) {
392
+ if (this.isParallelY && l.isParallelY) {
393
+ return null;
394
+ }
395
+ if (this.isParallelX && l.isParallelX) {
396
+ return null;
397
+ }
398
+ if (this.isParallelX && l.isParallelY) {
399
+ return new DPoint(-l.c / l.a, -this.c / this.b);
400
+ }
401
+ if (this.isParallelY && l.isParallelX) {
402
+ return new DPoint(-this.c / this.a, -l.c / l.b);
403
+ }
404
+ if (this.isParallelY) {
405
+ var x = -this.c / this.a;
406
+ return l.y(new DPoint(x));
407
+ }
408
+ if (this.isParallelX) {
409
+ var y = -this.c / this.b;
410
+ return l.x(new DPoint(0, y));
411
+ }
412
+ if (l.isParallelY) {
413
+ var x = -l.c / l.a;
414
+ return this.y(new DPoint(x));
415
+ }
416
+ if (l.isParallelX) {
417
+ var y = -l.c / l.b;
418
+ return this.x(new DPoint(0, y));
419
+ }
420
+ var res = this.y(new DPoint((l.c / l.b - this.c / this.b) / (this.a / this.b - l.a / l.b)));
421
+ if (!isFinite(res.x) && !isFinite(res.y)) {
422
+ return null;
423
+ }
424
+ return res;
425
+ };
426
+ Object.defineProperty(DLine.prototype, "isParallel", {
427
+ get: function () {
428
+ return this.isParallelX || this.isParallelY;
429
+ },
430
+ enumerable: false,
431
+ configurable: true
432
+ });
433
+ Object.defineProperty(DLine.prototype, "isParallelY", {
434
+ get: function () {
435
+ return Math.abs(this.b) < 0.001;
436
+ },
437
+ enumerable: false,
438
+ configurable: true
439
+ });
440
+ Object.defineProperty(DLine.prototype, "isParallelX", {
441
+ get: function () {
442
+ return Math.abs(this.a) < 0.001;
443
+ },
444
+ enumerable: false,
445
+ configurable: true
446
+ });
447
+ Object.defineProperty(DLine.prototype, "points", {
448
+ get: function () {
449
+ return [this.begin, this.end];
450
+ },
451
+ enumerable: false,
452
+ configurable: true
453
+ });
454
+ DLine.prototype.getFi = function () {
455
+ checkFunction('getFi')
456
+ .checkArgument('this.begin')
457
+ .shouldBeMeters(this.begin)
458
+ .checkArgument('this.end')
459
+ .shouldBeMeters(this.end);
460
+ var _a = this.end.clone().move(this.begin.clone().minus()), x = _a.x, y = _a.y;
461
+ var v = Math.atan2(y, x) - Math.PI;
462
+ if (v > 0) {
463
+ v = Math.PI - v;
464
+ }
465
+ return (Math.PI - v) % (Math.PI * 2);
466
+ };
467
+ DLine.prototype.toWKT = function () {
468
+ var _a = this, _b = _a.begin, x1 = _b.x, y1 = _b.y, _c = _a.end, x2 = _c.x, y2 = _c.y;
469
+ return "LINESTRING (" + x1 + " " + y1 + ", " + x2 + " " + y2 + ")";
470
+ };
471
+ DLine.prototype.movePoint = function (p, d) {
472
+ var fi = this.findFi(new DLine(1, 0, 0));
473
+ var td = this.x(new DPoint(1, 1)).distance(this.x(new DPoint(2, 2))) / 2;
474
+ var sinCos = new DPoint(Math.sin(fi), Math.cos(fi));
475
+ var dt = sinCos.clone().scale(td);
476
+ var p1T = p.clone().move(dt.clone().minus());
477
+ var p2T = p.clone().move(dt);
478
+ if (DNumbers.like(this.y(p1T).y, p1T.y) || DNumbers.like(this.y(p2T).y, p2T.y)) {
479
+ return p.clone().move(sinCos.scale(d));
480
+ }
481
+ return p.clone().move(sinCos.scale(d).setX(function (_a) {
482
+ var x = _a.x;
483
+ return -x;
484
+ }));
485
+ };
486
+ DLine.prototype.findFi = function (_a, delta) {
487
+ var a = _a.a, b = _a.b;
488
+ if (delta === void 0) { delta = 1.0001; }
489
+ var _b = this, q = _b.a, w = _b.b;
490
+ var val = (q * a + w * b) / (Math.sqrt(q * q + w * w) * Math.sqrt(a * a + b * b));
491
+ if (val > 1 && val < delta) {
492
+ val = 1;
493
+ }
494
+ else if (val < -1 && val > -delta) {
495
+ val = -1;
496
+ }
497
+ return Math.acos(val);
498
+ };
499
+ DLine.prototype.vectorProduct = function (_a) {
500
+ var a = _a.a, b = _a.b, c = _a.c;
501
+ var _b = this, q = _b.a, w = _b.b, e = _b.c;
502
+ return new DLine(w * c - e * b, e * a - q * c, q * b - w * a);
503
+ };
504
+ return DLine;
505
+ }());
506
+
507
+ var LoopFunctions;
508
+ (function (LoopFunctions) {
509
+ LoopFunctions[LoopFunctions["getTileFromCoords"] = 0] = "getTileFromCoords";
510
+ LoopFunctions[LoopFunctions["getCoordsFromTile"] = 1] = "getCoordsFromTile";
511
+ LoopFunctions[LoopFunctions["height"] = 2] = "height";
512
+ LoopFunctions[LoopFunctions["setX"] = 3] = "setX";
513
+ LoopFunctions[LoopFunctions["setY"] = 4] = "setY";
514
+ LoopFunctions[LoopFunctions["setZ"] = 5] = "setZ";
515
+ LoopFunctions[LoopFunctions["rotate"] = 6] = "rotate";
516
+ LoopFunctions[LoopFunctions["rotate3dX"] = 7] = "rotate3dX";
517
+ LoopFunctions[LoopFunctions["rotate3dY"] = 8] = "rotate3dY";
518
+ LoopFunctions[LoopFunctions["rotate3dZ"] = 9] = "rotate3dZ";
519
+ LoopFunctions[LoopFunctions["move"] = 10] = "move";
520
+ LoopFunctions[LoopFunctions["round"] = 11] = "round";
521
+ LoopFunctions[LoopFunctions["ceil"] = 12] = "ceil";
522
+ LoopFunctions[LoopFunctions["floor"] = 13] = "floor";
523
+ LoopFunctions[LoopFunctions["toFixed"] = 14] = "toFixed";
524
+ LoopFunctions[LoopFunctions["abs"] = 15] = "abs";
525
+ LoopFunctions[LoopFunctions["scale"] = 16] = "scale";
526
+ LoopFunctions[LoopFunctions["divide"] = 17] = "divide";
527
+ LoopFunctions[LoopFunctions["degreeToRadians"] = 18] = "degreeToRadians";
528
+ LoopFunctions[LoopFunctions["radiansToDegrees"] = 19] = "radiansToDegrees";
529
+ LoopFunctions[LoopFunctions["radiansToMeters"] = 20] = "radiansToMeters";
530
+ LoopFunctions[LoopFunctions["metersToRadians"] = 21] = "metersToRadians";
531
+ LoopFunctions[LoopFunctions["hipPoint"] = 22] = "hipPoint";
532
+ LoopFunctions[LoopFunctions["xPoint"] = 23] = "xPoint";
533
+ LoopFunctions[LoopFunctions["yPoint"] = 24] = "yPoint";
534
+ LoopFunctions[LoopFunctions["wPoint"] = 25] = "wPoint";
535
+ LoopFunctions[LoopFunctions["hPoint"] = 26] = "hPoint";
536
+ LoopFunctions[LoopFunctions["setIfLessThan"] = 27] = "setIfLessThan";
537
+ LoopFunctions[LoopFunctions["minus"] = 28] = "minus";
538
+ LoopFunctions[LoopFunctions["degreeToMeters"] = 29] = "degreeToMeters";
539
+ LoopFunctions[LoopFunctions["metersToDegree"] = 30] = "metersToDegree";
540
+ LoopFunctions[LoopFunctions["flipVertically"] = 31] = "flipVertically";
541
+ })(LoopFunctions || (LoopFunctions = {}));
542
+ var decodePoolRecord = function (a, _a) {
543
+ var functionName = _a.functionName, pointArg = _a.pointArg, numberPointArg = _a.numberPointArg, numberArg = _a.numberArg, setterArg = _a.setterArg;
544
+ var res = a;
545
+ switch (functionName) {
546
+ case LoopFunctions.getTileFromCoords:
547
+ res = function (k) { return a(k)
548
+ .getTileFromCoords(numberArg); };
549
+ break;
550
+ case LoopFunctions.getCoordsFromTile:
551
+ res = function (k) { return a(k)
552
+ .getCoordsFromTile(numberArg); };
553
+ break;
554
+ case LoopFunctions.height:
555
+ res = function (k) { return a(k)
556
+ .height(numberArg); };
557
+ break;
558
+ case LoopFunctions.setX:
559
+ res = function (k) { return a(k)
560
+ .setX(setterArg); };
561
+ break;
562
+ case LoopFunctions.setY:
563
+ res = function (k) { return a(k)
564
+ .setY(setterArg); };
565
+ break;
566
+ case LoopFunctions.setZ:
567
+ res = function (k) { return a(k)
568
+ .setZ(setterArg); };
569
+ break;
570
+ case LoopFunctions.rotate:
571
+ res = function (k) { return a(k)
572
+ .rotate(numberArg); };
573
+ break;
574
+ case LoopFunctions.rotate3dX:
575
+ res = function (k) { return a(k)
576
+ .rotate3dX(numberArg); };
577
+ break;
578
+ case LoopFunctions.rotate3dY:
579
+ res = function (k) { return a(k)
580
+ .rotate3dY(numberArg); };
581
+ break;
582
+ case LoopFunctions.rotate3dZ:
583
+ res = function (k) { return a(k)
584
+ .rotate3dZ(numberArg); };
585
+ break;
586
+ case LoopFunctions.move:
587
+ res = function (k) { return a(k)
588
+ .move(numberPointArg, numberArg); };
589
+ break;
590
+ case LoopFunctions.round:
591
+ res = function (k) { return a(k)
592
+ .round(); };
593
+ break;
594
+ case LoopFunctions.ceil:
595
+ res = function (k) { return a(k)
596
+ .ceil(); };
597
+ break;
598
+ case LoopFunctions.floor:
599
+ res = function (k) { return a(k)
600
+ .floor(); };
601
+ break;
602
+ case LoopFunctions.toFixed:
603
+ res = function (k) { return a(k)
604
+ .toFixed(numberArg); };
605
+ break;
606
+ case LoopFunctions.abs:
607
+ res = function (k) { return a(k)
608
+ .abs(); };
609
+ break;
610
+ case LoopFunctions.scale:
611
+ res = function (k) { return a(k)
612
+ .scale(numberPointArg, numberArg); };
613
+ break;
614
+ case LoopFunctions.divide:
615
+ res = function (k) { return a(k)
616
+ .divide(numberPointArg, numberArg); };
617
+ break;
618
+ case LoopFunctions.degreeToRadians:
619
+ res = function (k) { return a(k)
620
+ .degreeToRadians(); };
621
+ break;
622
+ case LoopFunctions.radiansToDegrees:
623
+ res = function (k) { return a(k)
624
+ .radiansToDegrees(); };
625
+ break;
626
+ case LoopFunctions.radiansToMeters:
627
+ res = function (k) { return a(k)
628
+ .radiansToMeters(); };
629
+ break;
630
+ case LoopFunctions.metersToRadians:
631
+ res = function (k) { return a(k)
632
+ .metersToRadians(); };
633
+ break;
634
+ case LoopFunctions.hipPoint:
635
+ res = function (k) { return a(k)
636
+ .hipPoint; };
637
+ break;
638
+ case LoopFunctions.xPoint:
639
+ res = function (k) { return a(k)
640
+ .xPoint; };
641
+ break;
642
+ case LoopFunctions.yPoint:
643
+ res = function (k) { return a(k)
644
+ .yPoint; };
645
+ break;
646
+ case LoopFunctions.wPoint:
647
+ res = function (k) { return a(k)
648
+ .wPoint; };
649
+ break;
650
+ case LoopFunctions.hPoint:
651
+ res = function (k) { return a(k)
652
+ .hPoint; };
653
+ break;
654
+ case LoopFunctions.setIfLessThan:
655
+ res = function (k) { return a(k)
656
+ .setIfLessThan(pointArg); };
657
+ break;
658
+ case LoopFunctions.minus:
659
+ res = function (k) { return a(k)
660
+ .minus(); };
661
+ break;
662
+ case LoopFunctions.degreeToMeters:
663
+ res = function (k) { return a(k)
664
+ .degreeToMeters(); };
665
+ break;
666
+ case LoopFunctions.metersToDegree:
667
+ res = function (k) { return a(k)
668
+ .metersToDegree(); };
669
+ break;
670
+ case LoopFunctions.flipVertically:
671
+ res = function (k) { return a(k)
672
+ .flipVertically(numberPointArg); };
673
+ break;
674
+ }
675
+ return res;
676
+ };
677
+ var DPolygonLoop = (function () {
678
+ function DPolygonLoop(parent) {
679
+ this.parent = parent;
680
+ this.pool = [];
681
+ }
682
+ DPolygonLoop.prototype.getLoopFunction = function () {
683
+ return this.pool.reduce(decodePoolRecord, function (k) { return k; });
684
+ };
685
+ DPolygonLoop.prototype.run = function () {
686
+ return this.parent.map(this.getLoopFunction());
687
+ };
688
+ DPolygonLoop.prototype.getTileFromCoords = function (zoom) {
689
+ this.pool.push({
690
+ functionName: LoopFunctions.getTileFromCoords,
691
+ numberArg: zoom
692
+ });
693
+ return this;
694
+ };
695
+ DPolygonLoop.prototype.getCoordsFromTile = function (zoom) {
696
+ this.pool.push({
697
+ functionName: LoopFunctions.getCoordsFromTile,
698
+ numberArg: zoom
699
+ });
700
+ return this;
701
+ };
702
+ DPolygonLoop.prototype.height = function (z) {
703
+ this.pool.push({
704
+ functionName: LoopFunctions.height,
705
+ numberArg: z
706
+ });
707
+ return this;
708
+ };
709
+ DPolygonLoop.prototype.setX = function (x) {
710
+ this.pool.push({
711
+ functionName: LoopFunctions.setX,
712
+ setterArg: x
713
+ });
714
+ return this;
715
+ };
716
+ DPolygonLoop.prototype.setY = function (y) {
717
+ this.pool.push({
718
+ functionName: LoopFunctions.setY,
719
+ setterArg: y
720
+ });
721
+ return this;
722
+ };
723
+ DPolygonLoop.prototype.setZ = function (z) {
724
+ this.pool.push({
725
+ functionName: LoopFunctions.setZ,
726
+ setterArg: z
727
+ });
728
+ return this;
729
+ };
730
+ DPolygonLoop.prototype.rotate = function (a) {
731
+ this.pool.push({
732
+ functionName: LoopFunctions.rotate,
733
+ numberArg: a
734
+ });
735
+ return this;
736
+ };
737
+ DPolygonLoop.prototype.rotate3dX = function (a) {
738
+ this.pool.push({
739
+ functionName: LoopFunctions.rotate3dX,
740
+ numberArg: a
741
+ });
742
+ return this;
743
+ };
744
+ DPolygonLoop.prototype.rotate3dY = function (a) {
745
+ this.pool.push({
746
+ functionName: LoopFunctions.rotate3dY,
747
+ numberArg: a
748
+ });
749
+ return this;
750
+ };
751
+ DPolygonLoop.prototype.rotate3dZ = function (a) {
752
+ this.pool.push({
753
+ functionName: LoopFunctions.rotate3dZ,
754
+ numberArg: a
755
+ });
756
+ return this;
757
+ };
758
+ DPolygonLoop.prototype.move = function (x, y) {
759
+ if (y === void 0) { y = x; }
760
+ this.pool.push({
761
+ functionName: LoopFunctions.move,
762
+ numberPointArg: x,
763
+ numberArg: y
764
+ });
765
+ return this;
766
+ };
767
+ DPolygonLoop.prototype.round = function () {
768
+ this.pool.push({
769
+ functionName: LoopFunctions.round
770
+ });
771
+ return this;
772
+ };
773
+ DPolygonLoop.prototype.ceil = function () {
774
+ this.pool.push({
775
+ functionName: LoopFunctions.ceil
776
+ });
777
+ return this;
778
+ };
779
+ DPolygonLoop.prototype.floor = function () {
780
+ this.pool.push({
781
+ functionName: LoopFunctions.floor
782
+ });
783
+ return this;
784
+ };
785
+ DPolygonLoop.prototype.toFixed = function (n) {
786
+ if (n === void 0) { n = 2; }
787
+ this.pool.push({
788
+ functionName: LoopFunctions.toFixed,
789
+ numberArg: n
790
+ });
791
+ return this;
792
+ };
793
+ DPolygonLoop.prototype.abs = function () {
794
+ this.pool.push({
795
+ functionName: LoopFunctions.abs
796
+ });
797
+ return this;
798
+ };
799
+ DPolygonLoop.prototype.scale = function (x, y) {
800
+ if (y === void 0) { y = x; }
801
+ this.pool.push({
802
+ functionName: LoopFunctions.scale,
803
+ numberPointArg: x,
804
+ numberArg: y
805
+ });
806
+ return this;
807
+ };
808
+ DPolygonLoop.prototype.divide = function (x, y) {
809
+ this.pool.push({
810
+ functionName: LoopFunctions.divide,
811
+ numberPointArg: x,
812
+ numberArg: y
813
+ });
814
+ return this;
815
+ };
816
+ DPolygonLoop.prototype.degreeToRadians = function () {
817
+ this.pool.push({
818
+ functionName: LoopFunctions.degreeToRadians
819
+ });
820
+ return this;
821
+ };
822
+ DPolygonLoop.prototype.radiansToDegrees = function () {
823
+ this.pool.push({
824
+ functionName: LoopFunctions.radiansToDegrees
825
+ });
826
+ return this;
827
+ };
828
+ DPolygonLoop.prototype.radiansToMeters = function () {
829
+ this.pool.push({
830
+ functionName: LoopFunctions.radiansToMeters
831
+ });
832
+ return this;
833
+ };
834
+ DPolygonLoop.prototype.metersToRadians = function () {
835
+ this.pool.push({
836
+ functionName: LoopFunctions.metersToRadians
837
+ });
838
+ return this;
839
+ };
840
+ DPolygonLoop.prototype.getHipPoint = function () {
841
+ this.pool.push({
842
+ functionName: LoopFunctions.hipPoint
843
+ });
844
+ return this;
845
+ };
846
+ DPolygonLoop.prototype.getXPoint = function () {
847
+ this.pool.push({
848
+ functionName: LoopFunctions.xPoint
849
+ });
850
+ return this;
851
+ };
852
+ DPolygonLoop.prototype.getYPoint = function () {
853
+ this.pool.push({
854
+ functionName: LoopFunctions.yPoint
855
+ });
856
+ return this;
857
+ };
858
+ DPolygonLoop.prototype.getWPoint = function () {
859
+ this.pool.push({
860
+ functionName: LoopFunctions.wPoint
861
+ });
862
+ return this;
863
+ };
864
+ DPolygonLoop.prototype.getHPoint = function () {
865
+ this.pool.push({
866
+ functionName: LoopFunctions.hPoint
867
+ });
868
+ return this;
869
+ };
870
+ DPolygonLoop.prototype.setIfLessThan = function (p) {
871
+ this.pool.push({
872
+ functionName: LoopFunctions.setIfLessThan,
873
+ pointArg: p
874
+ });
875
+ return this;
876
+ };
877
+ DPolygonLoop.prototype.minus = function () {
878
+ this.pool.push({
879
+ functionName: LoopFunctions.minus
880
+ });
881
+ return this;
882
+ };
883
+ DPolygonLoop.prototype.degreeToMeters = function () {
884
+ this.pool.push({
885
+ functionName: LoopFunctions.degreeToMeters
886
+ });
887
+ return this;
888
+ };
889
+ DPolygonLoop.prototype.metersToDegree = function () {
890
+ this.pool.push({
891
+ functionName: LoopFunctions.metersToDegree
892
+ });
893
+ return this;
894
+ };
895
+ DPolygonLoop.prototype.flipVertically = function (size) {
896
+ this.pool.push({
897
+ functionName: LoopFunctions.flipVertically,
898
+ numberPointArg: size
899
+ });
900
+ return this;
901
+ };
902
+ return DPolygonLoop;
903
+ }());
904
+
905
+ var __generator = (undefined && undefined.__generator) || function (thisArg, body) {
906
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
907
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
908
+ function verb(n) { return function (v) { return step([n, v]); }; }
909
+ function step(op) {
910
+ if (f) throw new TypeError("Generator is already executing.");
911
+ while (_) try {
912
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
913
+ if (y = 0, t) op = [op[0] & 2, t.value];
914
+ switch (op[0]) {
915
+ case 0: case 1: t = op; break;
916
+ case 4: _.label++; return { value: op[1], done: false };
917
+ case 5: _.label++; y = op[1]; op = [0]; continue;
918
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
919
+ default:
920
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
921
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
922
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
923
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
924
+ if (t[2]) _.ops.pop();
925
+ _.trys.pop(); continue;
926
+ }
927
+ op = body.call(thisArg, _);
928
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
929
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
930
+ }
931
+ };
932
+ var __values$2 = (undefined && undefined.__values) || function(o) {
933
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
934
+ if (m) return m.call(o);
935
+ if (o && typeof o.length === "number") return {
936
+ next: function () {
937
+ if (o && i >= o.length) o = void 0;
938
+ return { value: o && o[i++], done: !o };
939
+ }
940
+ };
941
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
942
+ };
943
+ var __read$3 = (undefined && undefined.__read) || function (o, n) {
944
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
945
+ if (!m) return o;
946
+ var i = m.call(o), r, ar = [], e;
947
+ try {
948
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
949
+ }
950
+ catch (error) { e = { error: error }; }
951
+ finally {
952
+ try {
953
+ if (r && !r.done && (m = i["return"])) m.call(i);
954
+ }
955
+ finally { if (e) throw e.error; }
956
+ }
957
+ return ar;
958
+ };
959
+ var __spreadArray$1 = (undefined && undefined.__spreadArray) || function (to, from, pack) {
960
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
961
+ if (ar || !(i in from)) {
962
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
963
+ ar[i] = from[i];
964
+ }
965
+ }
966
+ return to.concat(ar || Array.prototype.slice.call(from));
967
+ };
968
+ var _a = jsts.operation.buffer.BufferParameters, CAP_ROUND = _a.CAP_ROUND, CAP_FLAT = _a.CAP_FLAT, CAP_SQUARE = _a.CAP_SQUARE;
969
+ var MIN_POINTS_IN_VALID_POLYGON = 3;
970
+ var APPROXIMATION_VALUE = 0.1;
971
+ var MAX_CONVEX_ITERATIONS = 100;
972
+ var CLOSE_TO_INTERSECTION_DISTANCE = 0.001;
973
+ var containCalculator = function (poly, p) {
974
+ var e_1, _a, e_2, _b;
975
+ var hasSamePoint = poly.points.some(function (point) { return point.equal(p); });
976
+ if (hasSamePoint) {
977
+ return true;
978
+ }
979
+ try {
980
+ for (var _c = __values$2(poly.loopPointsGenerator(true)()), _d = _c.next(); !_d.done; _d = _c.next()) {
981
+ var _e = __read$3(_d.value, 3), polygonLine = _e[2];
982
+ var onBorder = polygonLine.x(p).equal(p) && polygonLine.inRange(p);
983
+ if (onBorder) {
984
+ return true;
985
+ }
986
+ }
987
+ }
988
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
989
+ finally {
990
+ try {
991
+ if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
992
+ }
993
+ finally { if (e_1) throw e_1.error; }
994
+ }
995
+ var totalFi = 0;
996
+ try {
997
+ for (var _f = __values$2(poly.loopPointsGenerator()()), _g = _f.next(); !_g.done; _g = _f.next()) {
998
+ var _h = __read$3(_g.value, 2), _j = _h[0], x = _j.x, y = _j.y, _k = _h[1], a = _k.x, b = _k.y;
999
+ var line1 = new DLine(x - p.x, y - p.y, 0);
1000
+ var line2 = new DLine(a - p.x, b - p.y, 0);
1001
+ var fiDif = line1.findFi(line2);
1002
+ if (line1.vectorProduct(line2).c > 0) {
1003
+ totalFi += fiDif;
1004
+ }
1005
+ else {
1006
+ totalFi -= fiDif;
1007
+ }
1008
+ }
1009
+ }
1010
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
1011
+ finally {
1012
+ try {
1013
+ if (_g && !_g.done && (_b = _f.return)) _b.call(_f);
1014
+ }
1015
+ finally { if (e_2) throw e_2.error; }
1016
+ }
1017
+ var eps = Math.PI / 10000;
1018
+ var result = false;
1019
+ var absTotalFi = Math.abs(totalFi);
1020
+ if (absTotalFi < eps) {
1021
+ result = false;
1022
+ }
1023
+ else if (Math.abs(2 * Math.PI - absTotalFi) < eps) {
1024
+ result = true;
1025
+ }
1026
+ else {
1027
+ throw new Error('contains2 faild');
1028
+ }
1029
+ return result;
1030
+ };
1031
+ var DPolygon = (function () {
1032
+ function DPolygon(pPoints) {
1033
+ if (pPoints === void 0) { pPoints = []; }
1034
+ this.pPoints = pPoints;
1035
+ this.properties = {};
1036
+ this.holes = [];
1037
+ this.searchStore = {};
1038
+ }
1039
+ DPolygon.arrayOfTrianglesToVertices = function (triangles, height) {
1040
+ return triangles.map(function (v) { return (isDefAndNotNull(height) ? v
1041
+ .loop()
1042
+ .height(height)
1043
+ .run() : v)
1044
+ .toArrayOfCoords(); })
1045
+ .flat(2);
1046
+ };
1047
+ DPolygon.minAreaRectangleSize = function (poly) {
1048
+ var _a = poly.clone().open(), first = _a.first, second = _a.second, last = _a.last;
1049
+ return new DPoint(first.distance(second), first.distance(last));
1050
+ };
1051
+ DPolygon.toDash = function (poly) {
1052
+ var e_3, _a;
1053
+ var p = new DPolygon();
1054
+ var result = [p];
1055
+ var trigger = true;
1056
+ try {
1057
+ for (var _b = __values$2(poly.points), _c = _b.next(); !_c.done; _c = _b.next()) {
1058
+ var point = _c.value;
1059
+ if (trigger) {
1060
+ p.push(point.clone());
1061
+ }
1062
+ if (point.properties.pieceBorder) {
1063
+ trigger = !trigger;
1064
+ if (trigger) {
1065
+ p = new DPolygon();
1066
+ result.push(p);
1067
+ p.push(point.clone());
1068
+ }
1069
+ }
1070
+ }
1071
+ }
1072
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
1073
+ finally {
1074
+ try {
1075
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
1076
+ }
1077
+ finally { if (e_3) throw e_3.error; }
1078
+ }
1079
+ return result;
1080
+ };
1081
+ DPolygon.minAreaRectangleDirection = function (poly) {
1082
+ var _a = poly.clone().open(), first = _a.first, second = _a.second, last = _a.last;
1083
+ if (!first || !second || !last) {
1084
+ return 0;
1085
+ }
1086
+ if (first.distance(second) > first.distance(last)) {
1087
+ return first.findLine(second).getFi();
1088
+ }
1089
+ return first.findLine(last).getFi();
1090
+ };
1091
+ DPolygon.parseFromWKT = function (wkt) {
1092
+ var data = wkt.trim().toUpperCase();
1093
+ var res = new DPolygon();
1094
+ if (data.indexOf('POLYGON') === 0) {
1095
+ var regexp = /POLYGON \(\((?<data>(?:(?!\)\)$).)*?)\)\)$/miu;
1096
+ var reg = regexp.exec(data);
1097
+ var _a = __read$3(reg.groups.data
1098
+ .split('), (')
1099
+ .map(function (p) { return new DPolygon(p.split(', ')
1100
+ .map(function (pares) { return DPoint.parse(pares.split(' ').map(Number)); })); })), path = _a[0], holes = _a.slice(1);
1101
+ if (holes && holes.length) {
1102
+ path.holes = holes;
1103
+ }
1104
+ res = path;
1105
+ }
1106
+ if (data.indexOf('LINESTRING') === 0) {
1107
+ var regexp = /LINESTRING \((?<data>(?:(?!\)$).)*?)\)$/miu;
1108
+ var reg = regexp.exec(data);
1109
+ res = new DPolygon(reg.groups.data
1110
+ .split(', ').map(function (t) { return DPoint.parse(t.split(' ').map(Number)); }));
1111
+ }
1112
+ if (data.indexOf('POINT') === 0) {
1113
+ res = new DPolygon([DPoint.parseFromWKT(data)]);
1114
+ }
1115
+ return res;
1116
+ };
1117
+ DPolygon.createSquareBySize = function (size) {
1118
+ return new DPolygon([DPoint.zero(), size.clone().setX(0), size.clone(), size.clone().setY(0)]).close();
1119
+ };
1120
+ DPolygon.prototype.loop = function () {
1121
+ return new DPolygonLoop(this);
1122
+ };
1123
+ Object.defineProperty(DPolygon.prototype, "points", {
1124
+ get: function () {
1125
+ return this.pPoints;
1126
+ },
1127
+ set: function (p) {
1128
+ this.pPoints = p;
1129
+ },
1130
+ enumerable: false,
1131
+ configurable: true
1132
+ });
1133
+ Object.defineProperty(DPolygon.prototype, "maxX", {
1134
+ get: function () {
1135
+ return this.reduce(function (a, r) { return Math.max(a, r.x); }, -Infinity);
1136
+ },
1137
+ enumerable: false,
1138
+ configurable: true
1139
+ });
1140
+ Object.defineProperty(DPolygon.prototype, "minX", {
1141
+ get: function () {
1142
+ return this.reduce(function (a, r) { return Math.min(a, r.x); }, Infinity);
1143
+ },
1144
+ enumerable: false,
1145
+ configurable: true
1146
+ });
1147
+ Object.defineProperty(DPolygon.prototype, "maxY", {
1148
+ get: function () {
1149
+ return this.reduce(function (a, r) { return Math.max(a, r.y); }, -Infinity);
1150
+ },
1151
+ enumerable: false,
1152
+ configurable: true
1153
+ });
1154
+ Object.defineProperty(DPolygon.prototype, "minY", {
1155
+ get: function () {
1156
+ return this.reduce(function (a, r) { return Math.min(a, r.y); }, Infinity);
1157
+ },
1158
+ enumerable: false,
1159
+ configurable: true
1160
+ });
1161
+ Object.defineProperty(DPolygon.prototype, "center", {
1162
+ get: function () {
1163
+ return this.leftTop.move(this.size.divide(2));
1164
+ },
1165
+ enumerable: false,
1166
+ configurable: true
1167
+ });
1168
+ Object.defineProperty(DPolygon.prototype, "h", {
1169
+ get: function () {
1170
+ return this.maxY - this.minY;
1171
+ },
1172
+ enumerable: false,
1173
+ configurable: true
1174
+ });
1175
+ Object.defineProperty(DPolygon.prototype, "w", {
1176
+ get: function () {
1177
+ return this.maxX - this.minX;
1178
+ },
1179
+ enumerable: false,
1180
+ configurable: true
1181
+ });
1182
+ Object.defineProperty(DPolygon.prototype, "dY", {
1183
+ get: function () {
1184
+ return this.h;
1185
+ },
1186
+ enumerable: false,
1187
+ configurable: true
1188
+ });
1189
+ Object.defineProperty(DPolygon.prototype, "dX", {
1190
+ get: function () {
1191
+ return this.w;
1192
+ },
1193
+ enumerable: false,
1194
+ configurable: true
1195
+ });
1196
+ Object.defineProperty(DPolygon.prototype, "extend", {
1197
+ get: function () {
1198
+ var _a = this, minX = _a.minX, minY = _a.minY, maxX = _a.maxX, maxY = _a.maxY;
1199
+ return new DPolygon([
1200
+ new DPoint(minX, minY),
1201
+ new DPoint(maxX, minY),
1202
+ new DPoint(maxX, maxY),
1203
+ new DPoint(minX, maxY),
1204
+ new DPoint(minX, minY)
1205
+ ]);
1206
+ },
1207
+ enumerable: false,
1208
+ configurable: true
1209
+ });
1210
+ Object.defineProperty(DPolygon.prototype, "size", {
1211
+ get: function () {
1212
+ var _a = this, w = _a.w, h = _a.h;
1213
+ return new DPoint(w, h);
1214
+ },
1215
+ enumerable: false,
1216
+ configurable: true
1217
+ });
1218
+ Object.defineProperty(DPolygon.prototype, "leftTop", {
1219
+ get: function () {
1220
+ var _a = this, minX = _a.minX, minY = _a.minY;
1221
+ return new DPoint(minX, minY);
1222
+ },
1223
+ enumerable: false,
1224
+ configurable: true
1225
+ });
1226
+ Object.defineProperty(DPolygon.prototype, "rightBottom", {
1227
+ get: function () {
1228
+ var _a = this, maxX = _a.maxX, maxY = _a.maxY;
1229
+ return new DPoint(maxX, maxY);
1230
+ },
1231
+ enumerable: false,
1232
+ configurable: true
1233
+ });
1234
+ Object.defineProperty(DPolygon.prototype, "length", {
1235
+ get: function () {
1236
+ return this.pPoints.length;
1237
+ },
1238
+ enumerable: false,
1239
+ configurable: true
1240
+ });
1241
+ Object.defineProperty(DPolygon.prototype, "fullLength", {
1242
+ get: function () {
1243
+ return this.clone().open().perimeter;
1244
+ },
1245
+ enumerable: false,
1246
+ configurable: true
1247
+ });
1248
+ Object.defineProperty(DPolygon.prototype, "perimeter", {
1249
+ get: function () {
1250
+ var e_4, _a;
1251
+ var p = 0;
1252
+ try {
1253
+ for (var _b = __values$2(this.loopPointsGenerator()()), _c = _b.next(); !_c.done; _c = _b.next()) {
1254
+ var _d = __read$3(_c.value, 2), p1 = _d[0], p2 = _d[1];
1255
+ p += p1.distance(p2);
1256
+ }
1257
+ }
1258
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
1259
+ finally {
1260
+ try {
1261
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
1262
+ }
1263
+ finally { if (e_4) throw e_4.error; }
1264
+ }
1265
+ return p;
1266
+ },
1267
+ enumerable: false,
1268
+ configurable: true
1269
+ });
1270
+ Object.defineProperty(DPolygon.prototype, "area", {
1271
+ get: function () {
1272
+ var e_5, _a;
1273
+ var sum = 0;
1274
+ try {
1275
+ for (var _b = __values$2(this.deintersection.loopPointsGenerator()()), _c = _b.next(); !_c.done; _c = _b.next()) {
1276
+ var _d = __read$3(_c.value, 2), _e = _d[0], x = _e.x, y = _e.y, _f = _d[1], a = _f.x, b = _f.y;
1277
+ sum += x * b - y * a;
1278
+ }
1279
+ }
1280
+ catch (e_5_1) { e_5 = { error: e_5_1 }; }
1281
+ finally {
1282
+ try {
1283
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
1284
+ }
1285
+ finally { if (e_5) throw e_5.error; }
1286
+ }
1287
+ return Math.abs(sum / 2) - this.holes.reduce(function (a, hole) { return a + hole.area; }, 0);
1288
+ },
1289
+ enumerable: false,
1290
+ configurable: true
1291
+ });
1292
+ Object.defineProperty(DPolygon.prototype, "deintersection", {
1293
+ get: function () {
1294
+ var e_6, _a;
1295
+ var p = this.clone().close();
1296
+ var store = {};
1297
+ for (var i = 0; i < p.length - 1; i++) {
1298
+ var k = p.at(i).toString();
1299
+ store[k] = store[k] || [];
1300
+ store[k].push(i);
1301
+ var _loop_1 = function (j) {
1302
+ var firstLine = p.at(i).findLine(p.at(i + 1));
1303
+ var secondLine = p.at(j).findLine(p.at(j + 1));
1304
+ var intersectionPoint = firstLine.intersection(secondLine);
1305
+ if (intersectionPoint &&
1306
+ !__spreadArray$1(__spreadArray$1([], __read$3(firstLine.points), false), __read$3(secondLine.points), false).some(function (t) { return t.like(intersectionPoint); })) {
1307
+ var part = p.removePart(i, j - i).reverse();
1308
+ p.insertAfter.apply(p, __spreadArray$1([i], __read$3(part), false));
1309
+ p.insertAfter(j, intersectionPoint);
1310
+ p.insertAfter(i, intersectionPoint);
1311
+ }
1312
+ };
1313
+ for (var j = i + 2; j < p.length - 1; j++) {
1314
+ _loop_1(j);
1315
+ }
1316
+ }
1317
+ try {
1318
+ for (var _b = __values$2(Object.keys(store)), _c = _b.next(); !_c.done; _c = _b.next()) {
1319
+ var key = _c.value;
1320
+ var record = store[key];
1321
+ if (record.length > 1) {
1322
+ var _loop_2 = function (j) {
1323
+ var origin_1 = p.clone();
1324
+ var d = record[j] - record[j - 1];
1325
+ if (d > 1) {
1326
+ var part = new DPolygon(origin_1.removePart(record[j - 1], d));
1327
+ var allInside = part.reduce(function (a, e) { return a && containCalculator(origin_1, e); }, true);
1328
+ if (allInside && origin_1.isClockwise === part.isClockwise) {
1329
+ origin_1.insertAfter.apply(origin_1, __spreadArray$1([record[j - 1] - 1], __read$3(part.reverse().points), false));
1330
+ p = origin_1;
1331
+ }
1332
+ }
1333
+ };
1334
+ for (var j = record.length - 1; j > 0; j--) {
1335
+ _loop_2(j);
1336
+ }
1337
+ }
1338
+ }
1339
+ }
1340
+ catch (e_6_1) { e_6 = { error: e_6_1 }; }
1341
+ finally {
1342
+ try {
1343
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
1344
+ }
1345
+ finally { if (e_6) throw e_6.error; }
1346
+ }
1347
+ return p;
1348
+ },
1349
+ enumerable: false,
1350
+ configurable: true
1351
+ });
1352
+ Object.defineProperty(DPolygon.prototype, "valid", {
1353
+ get: function () {
1354
+ return this.length > MIN_POINTS_IN_VALID_POLYGON;
1355
+ },
1356
+ enumerable: false,
1357
+ configurable: true
1358
+ });
1359
+ Object.defineProperty(DPolygon.prototype, "first", {
1360
+ get: function () {
1361
+ return this.at(0);
1362
+ },
1363
+ enumerable: false,
1364
+ configurable: true
1365
+ });
1366
+ Object.defineProperty(DPolygon.prototype, "second", {
1367
+ get: function () {
1368
+ return this.at(1);
1369
+ },
1370
+ enumerable: false,
1371
+ configurable: true
1372
+ });
1373
+ Object.defineProperty(DPolygon.prototype, "last", {
1374
+ get: function () {
1375
+ return this.at(this.length - 1);
1376
+ },
1377
+ enumerable: false,
1378
+ configurable: true
1379
+ });
1380
+ Object.defineProperty(DPolygon.prototype, "minAreaRectangle", {
1381
+ get: function () {
1382
+ var e_7, _a, e_8, _b;
1383
+ var p = this.convex;
1384
+ var resultPolygon = new DPolygon();
1385
+ var resultArea = Infinity;
1386
+ try {
1387
+ for (var _c = __values$2(p.loopPointsGenerator(true)()), _d = _c.next(); !_d.done; _d = _c.next()) {
1388
+ var _e = __read$3(_d.value, 3), l = _e[2];
1389
+ var maxWidth = 0;
1390
+ var maxWidthPoint1 = null;
1391
+ var maxWidthPoint2 = null;
1392
+ var maxHeight = 0;
1393
+ var maxHeightPoint = null;
1394
+ try {
1395
+ for (var _f = (e_8 = void 0, __values$2(p.loopPointsGenerator()())), _g = _f.next(); !_g.done; _g = _f.next()) {
1396
+ var _h = __read$3(_g.value, 4), z = _h[0], i = _h[3];
1397
+ var p1 = l.findPoint(l.findPerpendicular(z));
1398
+ var h = p1.distance(z);
1399
+ if (h >= maxHeight) {
1400
+ maxHeight = h;
1401
+ maxHeightPoint = z;
1402
+ }
1403
+ for (var j = i; j < p.length - 1; j++) {
1404
+ var p2 = l.findPoint(l.findPerpendicular(p.at(j)));
1405
+ var w = p1.distance(p2);
1406
+ if (w >= maxWidth) {
1407
+ maxWidth = w;
1408
+ maxWidthPoint1 = p1;
1409
+ maxWidthPoint2 = p2;
1410
+ }
1411
+ }
1412
+ }
1413
+ }
1414
+ catch (e_8_1) { e_8 = { error: e_8_1 }; }
1415
+ finally {
1416
+ try {
1417
+ if (_g && !_g.done && (_b = _f.return)) _b.call(_f);
1418
+ }
1419
+ finally { if (e_8) throw e_8.error; }
1420
+ }
1421
+ if (!maxWidthPoint1 || !maxWidthPoint2 || !maxHeightPoint) {
1422
+ continue;
1423
+ }
1424
+ var widthLine = maxWidthPoint1.findLine(maxWidthPoint2);
1425
+ var perpendicular1 = widthLine.findPerpendicular(maxWidthPoint1);
1426
+ var perpendicular2 = widthLine.findPerpendicular(maxWidthPoint2);
1427
+ var tempPolygon = new DPolygon([
1428
+ maxWidthPoint1,
1429
+ maxWidthPoint2,
1430
+ perpendicular2.findPoint(perpendicular2.findPerpendicular(maxHeightPoint)),
1431
+ perpendicular1.findPoint(perpendicular1.findPerpendicular(maxHeightPoint))
1432
+ ]).close();
1433
+ if (tempPolygon.area < resultArea) {
1434
+ resultPolygon = tempPolygon;
1435
+ resultArea = tempPolygon.area;
1436
+ }
1437
+ }
1438
+ }
1439
+ catch (e_7_1) { e_7 = { error: e_7_1 }; }
1440
+ finally {
1441
+ try {
1442
+ if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
1443
+ }
1444
+ finally { if (e_7) throw e_7.error; }
1445
+ }
1446
+ return resultPolygon;
1447
+ },
1448
+ enumerable: false,
1449
+ configurable: true
1450
+ });
1451
+ Object.defineProperty(DPolygon.prototype, "convex", {
1452
+ get: function () {
1453
+ var p = this.clone().open();
1454
+ var isClockwise = p.isClockwise;
1455
+ if (!isClockwise) {
1456
+ p.reverse();
1457
+ }
1458
+ var l = 0;
1459
+ do {
1460
+ var p1 = p.last;
1461
+ var p2 = p.first;
1462
+ var p3 = p.second;
1463
+ var d = p2.findInnerAngle(p1, p3);
1464
+ if (d > Math.PI || DNumbers.likeZero(DNumbers.rad2Deg(d)) || DNumbers.likePI(d) || DNumbers.like2PI(d)) {
1465
+ p.removePart(-1, 1);
1466
+ }
1467
+ else {
1468
+ break;
1469
+ }
1470
+ } while (p.length);
1471
+ p.close();
1472
+ var iteration = 0;
1473
+ do {
1474
+ p = p.deintersection;
1475
+ l = p.length;
1476
+ for (var i = 1; i < p.length - 1; i++) {
1477
+ var p1 = p.at(i - 1);
1478
+ var p2 = p.at(i);
1479
+ var p3 = p.at(i + 1);
1480
+ var d = p2.findInnerAngle(p1, p3);
1481
+ if (d > Math.PI || DNumbers.likeZero(DNumbers.rad2Deg(d)) || DNumbers.likePI(d) || DNumbers.like2PI(d)) {
1482
+ p.removePart(--i, 1);
1483
+ }
1484
+ }
1485
+ iteration++;
1486
+ } while (p.length !== l && iteration < MAX_CONVEX_ITERATIONS);
1487
+ if (!isClockwise) {
1488
+ p.reverse();
1489
+ }
1490
+ return p;
1491
+ },
1492
+ enumerable: false,
1493
+ configurable: true
1494
+ });
1495
+ Object.defineProperty(DPolygon.prototype, "isClockwise", {
1496
+ get: function () {
1497
+ var e_9, _a;
1498
+ var sum = 0;
1499
+ try {
1500
+ for (var _b = __values$2(this.clone().close()
1501
+ .loopPointsGenerator()()), _c = _b.next(); !_c.done; _c = _b.next()) {
1502
+ var _d = __read$3(_c.value, 2), _e = _d[0], x = _e.x, y = _e.y, _f = _d[1], a = _f.x, b = _f.y;
1503
+ sum += (a - x) * (b + y);
1504
+ }
1505
+ }
1506
+ catch (e_9_1) { e_9 = { error: e_9_1 }; }
1507
+ finally {
1508
+ try {
1509
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
1510
+ }
1511
+ finally { if (e_9) throw e_9.error; }
1512
+ }
1513
+ return sum < 0;
1514
+ },
1515
+ enumerable: false,
1516
+ configurable: true
1517
+ });
1518
+ Object.defineProperty(DPolygon.prototype, "clockWise", {
1519
+ get: function () {
1520
+ if (this.isClockwise) {
1521
+ return this.clone();
1522
+ }
1523
+ return this.clone().reverse();
1524
+ },
1525
+ enumerable: false,
1526
+ configurable: true
1527
+ });
1528
+ Object.defineProperty(DPolygon.prototype, "noHoles", {
1529
+ get: function () {
1530
+ var res = this.clone();
1531
+ res.holes = [];
1532
+ return res;
1533
+ },
1534
+ enumerable: false,
1535
+ configurable: true
1536
+ });
1537
+ DPolygon.prototype.reduce = function (f, v) {
1538
+ return this.pPoints.reduce(f, v);
1539
+ };
1540
+ DPolygon.prototype.intersection = function (l, includeOnly) {
1541
+ var e_10, _a;
1542
+ if (includeOnly === void 0) { includeOnly = false; }
1543
+ var res = [];
1544
+ try {
1545
+ for (var _b = __values$2(this.loopPointsGenerator(true)()), _c = _b.next(); !_c.done; _c = _b.next()) {
1546
+ var _d = __read$3(_c.value, 3), line = _d[2];
1547
+ var intersect = line.intersection(l, 0, includeOnly);
1548
+ if (intersect) {
1549
+ res.push(intersect);
1550
+ }
1551
+ }
1552
+ }
1553
+ catch (e_10_1) { e_10 = { error: e_10_1 }; }
1554
+ finally {
1555
+ try {
1556
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
1557
+ }
1558
+ finally { if (e_10) throw e_10.error; }
1559
+ }
1560
+ return res;
1561
+ };
1562
+ DPolygon.prototype.setCenter = function (newCenter) {
1563
+ return this.loop()
1564
+ .move(newCenter.clone().move(this.center.minus()))
1565
+ .run();
1566
+ };
1567
+ DPolygon.prototype.toWKT = function (type, withZ) {
1568
+ if (type === void 0) { type = DPolygon.WKT_POLYGON; }
1569
+ if (withZ === void 0) { withZ = false; }
1570
+ if (type === DPolygon.WKT_POLYGON) {
1571
+ var h = '';
1572
+ if (this.holes && this.holes.length) {
1573
+ h = ", " + this.holes.map(function (hole) { return hole.toString(); })
1574
+ .join(', ');
1575
+ }
1576
+ return "POLYGON ((" + this.deintersection.mapArray(function (r) { return r.x + " " + r.y + (withZ ? " " + r.z : ''); })
1577
+ .join(', ') + ")" + h + ")";
1578
+ }
1579
+ return "LINESTRING (" + this.mapArray(function (r) { return r.x + " " + r.y + (withZ ? " " + r.z : ''); })
1580
+ .join(', ') + ")";
1581
+ };
1582
+ DPolygon.prototype.filter = function (f) {
1583
+ this.pPoints = this.pPoints.filter(f);
1584
+ return this;
1585
+ };
1586
+ DPolygon.prototype.map = function (f) {
1587
+ this.pPoints = this.mapArray(f);
1588
+ this.holes = this.holes.map(function (h) { return h.map(f); });
1589
+ return this;
1590
+ };
1591
+ DPolygon.prototype.mapArray = function (f) {
1592
+ return this.pPoints.map(f);
1593
+ };
1594
+ DPolygon.prototype.sort = function (f) {
1595
+ this.points.sort(f);
1596
+ return this;
1597
+ };
1598
+ DPolygon.prototype.at = function (index) {
1599
+ var length = this.length;
1600
+ return this.points[(index % length + length) % length];
1601
+ };
1602
+ DPolygon.prototype.pop = function () {
1603
+ return this.pPoints.pop();
1604
+ };
1605
+ DPolygon.prototype.push = function () {
1606
+ var _a;
1607
+ var args = [];
1608
+ for (var _i = 0; _i < arguments.length; _i++) {
1609
+ args[_i] = arguments[_i];
1610
+ }
1611
+ return (_a = this.pPoints).push.apply(_a, __spreadArray$1([], __read$3(args), false));
1612
+ };
1613
+ DPolygon.prototype.shift = function () {
1614
+ return this.pPoints.shift();
1615
+ };
1616
+ DPolygon.prototype.unshift = function () {
1617
+ var _a;
1618
+ var args = [];
1619
+ for (var _i = 0; _i < arguments.length; _i++) {
1620
+ args[_i] = arguments[_i];
1621
+ }
1622
+ return (_a = this.pPoints).unshift.apply(_a, __spreadArray$1([], __read$3(args), false));
1623
+ };
1624
+ DPolygon.prototype.reverse = function () {
1625
+ this.pPoints = this.pPoints.reverse();
1626
+ this.holes = this.holes.map(function (h) { return h.reverse(); });
1627
+ return this;
1628
+ };
1629
+ DPolygon.prototype.getValue = function () {
1630
+ return (this.pPoints.map(function (r) { return r.getValue(); }) + this.holes
1631
+ .reduce(function (a, h) { return a + h.getValue(); }, ''));
1632
+ };
1633
+ DPolygon.prototype.toString = function () {
1634
+ return "(" + this.mapArray(function (r) { return r.toString(); }).join(', ') + ")";
1635
+ };
1636
+ DPolygon.prototype.close = function () {
1637
+ var p0 = this.first;
1638
+ if (p0 && !this.closed) {
1639
+ this.push(p0.clone());
1640
+ }
1641
+ return this;
1642
+ };
1643
+ DPolygon.prototype.open = function () {
1644
+ var p = this.first;
1645
+ if (this.length > 2 && p && this.closed) {
1646
+ this.pop();
1647
+ }
1648
+ return this;
1649
+ };
1650
+ DPolygon.prototype.add = function (poly) {
1651
+ var res = new DPolygon(__spreadArray$1(__spreadArray$1([], __read$3(this.points), false), __read$3(poly.points), false)).close();
1652
+ res.holes = __spreadArray$1(__spreadArray$1([], __read$3(this.holes), false), __read$3(poly.holes), false).map(function (h) { return h.clone(); });
1653
+ return res;
1654
+ };
1655
+ DPolygon.prototype.has = function (p) {
1656
+ return this.pPoints.some(function (q) { return q.equal(p); });
1657
+ };
1658
+ DPolygon.prototype.clone = function () {
1659
+ var res = new DPolygon(this.points.map(function (r) { return r.clone(); }));
1660
+ res.holes = this.holes.map(function (h) { return h.clone(); });
1661
+ res.properties = this.properties;
1662
+ return res;
1663
+ };
1664
+ DPolygon.prototype.equal = function (p) {
1665
+ if (!(p instanceof DPolygon)) {
1666
+ return false;
1667
+ }
1668
+ if (this.length !== p.length || this.holes.length !== p.holes.length) {
1669
+ return false;
1670
+ }
1671
+ return (this.same(p) &&
1672
+ this.holes.reduce(function (a, hole) { return a && p.holes.some(function (pHoles) { return pHoles.same(hole); }); }, true));
1673
+ };
1674
+ DPolygon.prototype.same = function (p) {
1675
+ var pClone = p.clone().close();
1676
+ var thisAsString = this.clone()
1677
+ .close()
1678
+ .toString();
1679
+ for (var i = 0; i < pClone.length; i++) {
1680
+ if (thisAsString === pClone.toString() || thisAsString === pClone.clone().reverse()
1681
+ .toString()) {
1682
+ return true;
1683
+ }
1684
+ pClone.nextStart();
1685
+ }
1686
+ return false;
1687
+ };
1688
+ DPolygon.prototype.findIndex = function (a) {
1689
+ if (a instanceof DPoint) {
1690
+ return this.points.findIndex(function (t) { return t.equal(a); });
1691
+ }
1692
+ return this.points.findIndex(a);
1693
+ };
1694
+ DPolygon.prototype.approximation = function (e) {
1695
+ if (e === void 0) { e = Math.sqrt(this.perimeter) * APPROXIMATION_VALUE; }
1696
+ return new DPolygon(this.clone().douglasPeucker(this.pPoints, e));
1697
+ };
1698
+ DPolygon.prototype.insertAfter = function (index) {
1699
+ var _a;
1700
+ var points = [];
1701
+ for (var _i = 1; _i < arguments.length; _i++) {
1702
+ points[_i - 1] = arguments[_i];
1703
+ }
1704
+ (_a = this.pPoints).splice.apply(_a, __spreadArray$1([index + 1, 0], __read$3(points), false));
1705
+ };
1706
+ DPolygon.prototype.removePart = function (index, count) {
1707
+ return this.pPoints.splice(index + 1, count);
1708
+ };
1709
+ DPolygon.prototype.hasSimpleIntersection = function (p) {
1710
+ var extend1 = this.extend;
1711
+ var extend2 = p.extend;
1712
+ var extend1points = extend1.points;
1713
+ var extend2points = extend2.points;
1714
+ var in1 = extend1points.some(function (t) { return extend2.simpleInclude(t); });
1715
+ var in2 = extend2points.some(function (t) { return extend1.simpleInclude(t); });
1716
+ return in1 || in2;
1717
+ };
1718
+ DPolygon.prototype.simpleInclude = function (p) {
1719
+ return this.simpleIncludeX(p) && this.simpleIncludeY(p);
1720
+ };
1721
+ DPolygon.prototype.drawPolygonOnCanvas = function (canvas, fillColor, strokeColor, shadowColor, lineWidth, steps) {
1722
+ if (lineWidth === void 0) { lineWidth = 1; }
1723
+ if (steps === void 0) { steps = this.length - 1; }
1724
+ if (this.length > 1) {
1725
+ var ctx = canvas.getContext('2d');
1726
+ if (fillColor) {
1727
+ ctx.fillStyle = fillColor;
1728
+ }
1729
+ if (strokeColor) {
1730
+ ctx.strokeStyle = strokeColor;
1731
+ }
1732
+ if (lineWidth) {
1733
+ ctx.lineWidth = lineWidth;
1734
+ }
1735
+ if (fillColor || strokeColor) {
1736
+ ctx.beginPath();
1737
+ }
1738
+ this.goByPath(ctx, steps % this.length);
1739
+ if (shadowColor) {
1740
+ ctx.shadowColor = shadowColor;
1741
+ ctx.shadowBlur = 0;
1742
+ ctx.shadowOffsetX = 1;
1743
+ ctx.shadowOffsetY = 1;
1744
+ }
1745
+ if (fillColor) {
1746
+ ctx.closePath();
1747
+ ctx.fill();
1748
+ }
1749
+ if (strokeColor) {
1750
+ ctx.stroke();
1751
+ }
1752
+ }
1753
+ return this;
1754
+ };
1755
+ DPolygon.prototype.clearPolygonOnCanvas = function (canvas) {
1756
+ var ctx = canvas.getContext('2d');
1757
+ var old = ctx.globalCompositeOperation;
1758
+ ctx.globalCompositeOperation = 'destination-out';
1759
+ this.goByPath(ctx);
1760
+ ctx.fill();
1761
+ ctx.globalCompositeOperation = old;
1762
+ };
1763
+ DPolygon.prototype.contain = function (p, isBorderInside) {
1764
+ var e_11, _a;
1765
+ if (isBorderInside === void 0) { isBorderInside = false; }
1766
+ var simpleInclude = this.simpleInclude(p);
1767
+ if (!simpleInclude) {
1768
+ return false;
1769
+ }
1770
+ var onBorder = this.onBorder(p);
1771
+ if (onBorder) {
1772
+ return isBorderInside;
1773
+ }
1774
+ var poly = this.deintersection;
1775
+ var totalFi = 0;
1776
+ try {
1777
+ for (var _b = __values$2(poly.loopPointsGenerator()()), _c = _b.next(); !_c.done; _c = _b.next()) {
1778
+ var _d = __read$3(_c.value, 2), _e = _d[0], x = _e.x, y = _e.y, _f = _d[1], a = _f.x, b = _f.y;
1779
+ var line1 = new DLine(x - p.x, y - p.y, 0);
1780
+ var line2 = new DLine(a - p.x, b - p.y, 0);
1781
+ var fiDif = line1.findFi(line2);
1782
+ if (line1.vectorProduct(line2).c > 0) {
1783
+ totalFi += fiDif;
1784
+ }
1785
+ else {
1786
+ totalFi -= fiDif;
1787
+ }
1788
+ }
1789
+ }
1790
+ catch (e_11_1) { e_11 = { error: e_11_1 }; }
1791
+ finally {
1792
+ try {
1793
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
1794
+ }
1795
+ finally { if (e_11) throw e_11.error; }
1796
+ }
1797
+ var eps = Math.PI / 10000;
1798
+ var absTotalFi = Math.abs(totalFi);
1799
+ if (absTotalFi < eps) {
1800
+ return false;
1801
+ }
1802
+ else if (Math.abs(2 * Math.PI - absTotalFi) < eps) {
1803
+ return true;
1804
+ }
1805
+ throw new Error('contains2 faild');
1806
+ };
1807
+ DPolygon.prototype.onBorder = function (p) {
1808
+ var e_12, _a;
1809
+ var simpleInclude = this.simpleInclude(p);
1810
+ if (simpleInclude) {
1811
+ var poly = this.deintersection;
1812
+ var hasSamePoint = this.points.some(function (point) { return point.equal(p); });
1813
+ if (hasSamePoint) {
1814
+ return true;
1815
+ }
1816
+ try {
1817
+ for (var _b = __values$2(poly.loopPointsGenerator(true)()), _c = _b.next(); !_c.done; _c = _b.next()) {
1818
+ var _d = __read$3(_c.value, 3), polygonLine = _d[2];
1819
+ var onBorder = polygonLine.x(p).equal(p) && polygonLine.inRange(p);
1820
+ if (onBorder) {
1821
+ return true;
1822
+ }
1823
+ }
1824
+ }
1825
+ catch (e_12_1) { e_12 = { error: e_12_1 }; }
1826
+ finally {
1827
+ try {
1828
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
1829
+ }
1830
+ finally { if (e_12) throw e_12.error; }
1831
+ }
1832
+ }
1833
+ return false;
1834
+ };
1835
+ DPolygon.prototype.nextStart = function () {
1836
+ this.open();
1837
+ this.push(this.shift());
1838
+ this.close();
1839
+ return this;
1840
+ };
1841
+ DPolygon.prototype.removeDuplicates = function () {
1842
+ for (var i = 0; i < this.length - 1; i++) {
1843
+ var p1 = this.at(i);
1844
+ var p2 = this.at(i + 1);
1845
+ if (p1.equal(p2)) {
1846
+ this.removePart(i, 1);
1847
+ i--;
1848
+ }
1849
+ }
1850
+ return this;
1851
+ };
1852
+ DPolygon.parse = function (a) {
1853
+ return new DPolygon(a.map(function (r) { return DPoint.parse(r); }));
1854
+ };
1855
+ DPolygon.prototype.toArrayOfCoords = function () {
1856
+ return this.mapArray(function (r) { return r.toCoords(); });
1857
+ };
1858
+ DPolygon.prototype.divideToPieces = function (piecesCount) {
1859
+ var e_13, _a;
1860
+ var fullLength = this.fullLength;
1861
+ var pieceLength = fullLength / piecesCount;
1862
+ var currentPieceLength = pieceLength;
1863
+ var _loop_3 = function (p1, p2, i) {
1864
+ var d = p1.distance(p2);
1865
+ if (d === currentPieceLength) {
1866
+ p2.properties.pieceBorder = true;
1867
+ currentPieceLength = pieceLength;
1868
+ }
1869
+ else if (d - currentPieceLength > 0) {
1870
+ var circle = new DCircle(p1, currentPieceLength);
1871
+ var line_1 = p1.findLine(p2);
1872
+ var intersectionPoint = line_1.intersectionWithCircle(circle)
1873
+ .filter(function (p) { return line_1.inRange(p, CLOSE_TO_INTERSECTION_DISTANCE); })[0];
1874
+ intersectionPoint.properties.pieceBorder = true;
1875
+ this_1.insertAfter(i, intersectionPoint);
1876
+ currentPieceLength = pieceLength;
1877
+ }
1878
+ else {
1879
+ currentPieceLength -= d;
1880
+ }
1881
+ };
1882
+ var this_1 = this;
1883
+ try {
1884
+ for (var _b = __values$2(this.loopPointsGenerator()()), _c = _b.next(); !_c.done; _c = _b.next()) {
1885
+ var _d = __read$3(_c.value, 4), p1 = _d[0], p2 = _d[1], i = _d[3];
1886
+ _loop_3(p1, p2, i);
1887
+ }
1888
+ }
1889
+ catch (e_13_1) { e_13 = { error: e_13_1 }; }
1890
+ finally {
1891
+ try {
1892
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
1893
+ }
1894
+ finally { if (e_13) throw e_13.error; }
1895
+ }
1896
+ return this;
1897
+ };
1898
+ DPolygon.prototype.prepareToFastSearch = function () {
1899
+ var e_14, _a;
1900
+ this.searchStore = {};
1901
+ try {
1902
+ for (var _b = __values$2(this.points), _c = _b.next(); !_c.done; _c = _b.next()) {
1903
+ var _d = _c.value, x = _d.x, y = _d.y, z = _d.z;
1904
+ if (!this.searchStore[x]) {
1905
+ this.searchStore[x] = {};
1906
+ }
1907
+ if (!this.searchStore[x][y]) {
1908
+ this.searchStore[x][y] = {};
1909
+ }
1910
+ this.searchStore[x][y][z || 'undefined'] = true;
1911
+ }
1912
+ }
1913
+ catch (e_14_1) { e_14 = { error: e_14_1 }; }
1914
+ finally {
1915
+ try {
1916
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
1917
+ }
1918
+ finally { if (e_14) throw e_14.error; }
1919
+ }
1920
+ };
1921
+ DPolygon.prototype.fastHas = function (_a) {
1922
+ var x = _a.x, y = _a.y, z = _a.z;
1923
+ if (!this.searchStore[x]) {
1924
+ return false;
1925
+ }
1926
+ if (!this.searchStore[x][y]) {
1927
+ return false;
1928
+ }
1929
+ if (!this.searchStore[x][y][z || 'undefined']) {
1930
+ return false;
1931
+ }
1932
+ return this.searchStore[x][y][z || 'undefined'];
1933
+ };
1934
+ Object.defineProperty(DPolygon.prototype, "growingPiecesGenerator", {
1935
+ get: function () {
1936
+ var polygon = this;
1937
+ return function () {
1938
+ var r, _a, _b, p, e_15_1;
1939
+ var e_15, _c;
1940
+ return __generator(this, function (_d) {
1941
+ switch (_d.label) {
1942
+ case 0:
1943
+ r = new DPolygon();
1944
+ _d.label = 1;
1945
+ case 1:
1946
+ _d.trys.push([1, 6, 7, 8]);
1947
+ _a = __values$2(polygon.pPoints), _b = _a.next();
1948
+ _d.label = 2;
1949
+ case 2:
1950
+ if (!!_b.done) return [3, 5];
1951
+ p = _b.value;
1952
+ r.push(p);
1953
+ if (!p.properties.pieceBorder) return [3, 4];
1954
+ return [4, r.clone()];
1955
+ case 3:
1956
+ _d.sent();
1957
+ _d.label = 4;
1958
+ case 4:
1959
+ _b = _a.next();
1960
+ return [3, 2];
1961
+ case 5: return [3, 8];
1962
+ case 6:
1963
+ e_15_1 = _d.sent();
1964
+ e_15 = { error: e_15_1 };
1965
+ return [3, 8];
1966
+ case 7:
1967
+ try {
1968
+ if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
1969
+ }
1970
+ finally { if (e_15) throw e_15.error; }
1971
+ return [7];
1972
+ case 8: return [2, r.clone()];
1973
+ }
1974
+ });
1975
+ };
1976
+ },
1977
+ enumerable: false,
1978
+ configurable: true
1979
+ });
1980
+ DPolygon.prototype.simpleUnion = function (p) {
1981
+ try {
1982
+ var res = this.simpleLogicFunction(p, true, true);
1983
+ if (res === null) {
1984
+ return null;
1985
+ }
1986
+ if (res instanceof DPolygon) {
1987
+ return res;
1988
+ }
1989
+ return null;
1990
+ }
1991
+ catch (ex) {
1992
+ return null;
1993
+ }
1994
+ };
1995
+ DPolygon.prototype.simpleIntersection = function (p) {
1996
+ return this.simpleLogicFunction(p, false, false);
1997
+ };
1998
+ DPolygon.prototype.simpleDifference = function (p) {
1999
+ return this.simpleLogicFunction(p, true, false);
2000
+ };
2001
+ DPolygon.prototype.smartUnion = function (p) {
2002
+ var e_16, _a;
2003
+ var res = this.clone().simpleUnion(p);
2004
+ if (res) {
2005
+ var allHoles = __spreadArray$1(__spreadArray$1(__spreadArray$1([], __read$3(this.holes), false), __read$3(p.holes), false), __read$3(res.holes), false).map(function (h) { return h.clone(); });
2006
+ var _loop_4 = function (a) {
2007
+ var e_17, _b;
2008
+ var _loop_5 = function (b) {
2009
+ if (a.equal(b)) {
2010
+ return "continue";
2011
+ }
2012
+ var r = a.simpleUnion(b);
2013
+ if (r) {
2014
+ allHoles = allHoles.filter(function (v) { return !v.equal(a) && !v.equal(b); });
2015
+ allHoles.push(r);
2016
+ }
2017
+ };
2018
+ try {
2019
+ for (var allHoles_2 = (e_17 = void 0, __values$2(allHoles)), allHoles_2_1 = allHoles_2.next(); !allHoles_2_1.done; allHoles_2_1 = allHoles_2.next()) {
2020
+ var b = allHoles_2_1.value;
2021
+ _loop_5(b);
2022
+ }
2023
+ }
2024
+ catch (e_17_1) { e_17 = { error: e_17_1 }; }
2025
+ finally {
2026
+ try {
2027
+ if (allHoles_2_1 && !allHoles_2_1.done && (_b = allHoles_2.return)) _b.call(allHoles_2);
2028
+ }
2029
+ finally { if (e_17) throw e_17.error; }
2030
+ }
2031
+ };
2032
+ try {
2033
+ for (var allHoles_1 = __values$2(allHoles), allHoles_1_1 = allHoles_1.next(); !allHoles_1_1.done; allHoles_1_1 = allHoles_1.next()) {
2034
+ var a = allHoles_1_1.value;
2035
+ _loop_4(a);
2036
+ }
2037
+ }
2038
+ catch (e_16_1) { e_16 = { error: e_16_1 }; }
2039
+ finally {
2040
+ try {
2041
+ if (allHoles_1_1 && !allHoles_1_1.done && (_a = allHoles_1.return)) _a.call(allHoles_1);
2042
+ }
2043
+ finally { if (e_16) throw e_16.error; }
2044
+ }
2045
+ res.holes = allHoles;
2046
+ }
2047
+ return res;
2048
+ };
2049
+ DPolygon.prototype.toTriangles = function () {
2050
+ var innerAndNotIntersect = function (poly, p1, p2) {
2051
+ var l = p1.findLine(p2);
2052
+ var center = l.center;
2053
+ var intersections = poly.holes.reduce(function (a, hole) { return a && Boolean(hole.clone().close()
2054
+ .intersection(l, true).length); }, Boolean(poly.clone().close()
2055
+ .intersection(l, true).length));
2056
+ var contain = poly.holes.reduce(function (a, hole) { return a && !hole
2057
+ .contain(center); }, poly.contain(center));
2058
+ return !intersections && contain;
2059
+ };
2060
+ var getTriangle = function (poly) {
2061
+ for (var i = 0; i < poly.length; i++) {
2062
+ var p0 = poly.at(0);
2063
+ var p1 = poly.at(1);
2064
+ var p2 = poly.at(2);
2065
+ if (innerAndNotIntersect(poly, p0, p2)) {
2066
+ poly.removePart(0, 1);
2067
+ return new DPolygon([
2068
+ p0.clone(),
2069
+ p1.clone(),
2070
+ p2.clone()
2071
+ ]);
2072
+ }
2073
+ poly.push(poly.shift());
2074
+ }
2075
+ return undefined;
2076
+ };
2077
+ var p = this.clone().clockWise.open();
2078
+ while (p.holes.length) {
2079
+ var h = p.holes.shift()
2080
+ .clone()
2081
+ .clockWise
2082
+ .reverse()
2083
+ .close();
2084
+ for (var i = 0; i < p.length; i++) {
2085
+ if (innerAndNotIntersect(p, p.first, h.first)) {
2086
+ p.insertAfter.apply(p, __spreadArray$1(__spreadArray$1([0], __read$3(h.points), false), [p.first], false));
2087
+ break;
2088
+ }
2089
+ p.push(p.shift());
2090
+ }
2091
+ }
2092
+ var res = [];
2093
+ while (p.length > 3) {
2094
+ var triangle = getTriangle(p);
2095
+ if (triangle) {
2096
+ res.push(triangle);
2097
+ }
2098
+ }
2099
+ res.push(p);
2100
+ return res;
2101
+ };
2102
+ DPolygon.prototype.getTrianglesPointIndexes = function () {
2103
+ var innerAndNotIntersect = function (poly, p1, p2) {
2104
+ var l = p1.findLine(p2);
2105
+ var center = l.center;
2106
+ var intersections = poly.holes.reduce(function (a, hole) { return a && Boolean(hole.clone().close()
2107
+ .intersection(l, true).length); }, Boolean(poly.clone().close()
2108
+ .intersection(l, true).length));
2109
+ var contain = poly.holes.reduce(function (a, hole) { return a && !hole
2110
+ .contain(center); }, poly.contain(center));
2111
+ return !intersections && contain;
2112
+ };
2113
+ var getTriangle = function (poly) {
2114
+ for (var i = 0; i < poly.length; i++) {
2115
+ var p0 = poly.at(0);
2116
+ var p1 = poly.at(1);
2117
+ var p2 = poly.at(2);
2118
+ if (innerAndNotIntersect(poly, p0, p2)) {
2119
+ poly.removePart(0, 1);
2120
+ return [
2121
+ p0.properties.index,
2122
+ p1.properties.index,
2123
+ p2.properties.index
2124
+ ];
2125
+ }
2126
+ poly.push(poly.shift());
2127
+ }
2128
+ return undefined;
2129
+ };
2130
+ var p = this.clone();
2131
+ var index = 0;
2132
+ p.points.forEach(function (f) {
2133
+ f.properties.index = index++;
2134
+ });
2135
+ p.holes.forEach(function (h) {
2136
+ h.pPoints.forEach(function (f) {
2137
+ f.properties.index = index++;
2138
+ });
2139
+ });
2140
+ p = p.clockWise.open();
2141
+ while (p.holes.length) {
2142
+ var h = p.holes.shift()
2143
+ .clone()
2144
+ .clockWise
2145
+ .reverse()
2146
+ .close();
2147
+ for (var i = 0; i < p.length; i++) {
2148
+ if (innerAndNotIntersect(p, p.first, h.first)) {
2149
+ p.insertAfter.apply(p, __spreadArray$1(__spreadArray$1([0], __read$3(h.points), false), [p.first], false));
2150
+ break;
2151
+ }
2152
+ p.push(p.shift());
2153
+ }
2154
+ }
2155
+ var res = [];
2156
+ while (p.length > 3) {
2157
+ var triangle = getTriangle(p);
2158
+ if (triangle) {
2159
+ res.push.apply(res, __spreadArray$1([], __read$3(triangle), false));
2160
+ }
2161
+ }
2162
+ res.push.apply(res, __spreadArray$1([], __read$3(p.points.map(function (f) { return f.properties.index; })), false));
2163
+ return res;
2164
+ };
2165
+ Object.defineProperty(DPolygon.prototype, "closed", {
2166
+ get: function () {
2167
+ return this.first.equal(this.last);
2168
+ },
2169
+ enumerable: false,
2170
+ configurable: true
2171
+ });
2172
+ DPolygon.prototype.buffer = function (v, quadrantSegments, type) {
2173
+ if (quadrantSegments === void 0) { quadrantSegments = 64; }
2174
+ if (type === void 0) { type = DPolygon.CAP_ROUND; }
2175
+ var reader = new jsts.io.WKTReader();
2176
+ var _a = this, noHoles = _a.noHoles, closed = _a.closed;
2177
+ var points = reader
2178
+ .read(noHoles.toWKT(closed ? DPolygon.WKT_POLYGON : DPolygon.WKT_LINESTRING))
2179
+ .buffer(v, quadrantSegments, type)
2180
+ .getCoordinates();
2181
+ return new DPolygon(points.map(function (_a) {
2182
+ var x = _a.x, y = _a.y;
2183
+ return new DPoint(x, y);
2184
+ }));
2185
+ };
2186
+ DPolygon.prototype.sideBuffers = function (v, quadrantSegments) {
2187
+ if (quadrantSegments === void 0) { quadrantSegments = 64; }
2188
+ var _a = this, first = _a.first, last = _a.last;
2189
+ var buffer = this.buffer(v, quadrantSegments, DPolygon.CAP_FLAT).open();
2190
+ var _b = __read$3(first.sortByDistance(buffer).points.map(function (r) { return r.properties.index; }), 2), start0 = _b[0], start1 = _b[1];
2191
+ var _c = __read$3(last.sortByDistance(buffer).points.map(function (r) { return r.properties.index; }), 2), end0 = _c[0], end1 = _c[1];
2192
+ var fromPoint = Math.min(Math.max(start0, start1), Math.max(end0, end1));
2193
+ var toPoint = Math.max(Math.min(start0, start1), Math.min(end0, end1));
2194
+ var linePart = new DPolygon(buffer.removePart(fromPoint - 1, toPoint - fromPoint + 1));
2195
+ buffer.unshift(buffer.pop());
2196
+ return [linePart, buffer];
2197
+ };
2198
+ DPolygon.prototype.bezier = function (step) {
2199
+ if (step === void 0) { step = 0.1; }
2200
+ var res = new DPolygon();
2201
+ for (var i = 0; i < 1; i += step) {
2202
+ res.push(this.clone().getBezierPoint(i));
2203
+ }
2204
+ return res;
2205
+ };
2206
+ DPolygon.prototype.setGrowingHeight = function (from, to) {
2207
+ var fullLength = this.fullLength;
2208
+ var prevPoint = this.first;
2209
+ var d = to - from;
2210
+ var currentDistance = 0;
2211
+ this.loop()
2212
+ .setZ(function (p) {
2213
+ currentDistance += prevPoint.distance(p);
2214
+ prevPoint = p;
2215
+ return from + currentDistance / fullLength * d;
2216
+ })
2217
+ .run();
2218
+ return this;
2219
+ };
2220
+ DPolygon.prototype.loopPointsGenerator = function (withLine) {
2221
+ if (withLine === void 0) { withLine = false; }
2222
+ var that = this;
2223
+ return function () {
2224
+ var i, p1, p2;
2225
+ return __generator(this, function (_a) {
2226
+ switch (_a.label) {
2227
+ case 0:
2228
+ i = 0;
2229
+ _a.label = 1;
2230
+ case 1:
2231
+ if (!(i < that.length - 1)) return [3, 4];
2232
+ p1 = that.at(i);
2233
+ p2 = that.at(i + 1);
2234
+ return [4, [p1, p2, withLine ? p1.findLine(p2) : undefined, i]];
2235
+ case 2:
2236
+ _a.sent();
2237
+ _a.label = 3;
2238
+ case 3:
2239
+ i++;
2240
+ return [3, 1];
2241
+ case 4: return [2];
2242
+ }
2243
+ });
2244
+ };
2245
+ };
2246
+ DPolygon.prototype.getBezierPoint = function (v) {
2247
+ var e_18, _a;
2248
+ if (this.length === 1) {
2249
+ return this.first;
2250
+ }
2251
+ try {
2252
+ for (var _b = __values$2(this.loopPointsGenerator()()), _c = _b.next(); !_c.done; _c = _b.next()) {
2253
+ var _d = __read$3(_c.value, 2), p1 = _d[0], p2 = _d[1];
2254
+ p1.move(p2.clone().move(p1.clone().minus())
2255
+ .scale(v));
2256
+ }
2257
+ }
2258
+ catch (e_18_1) { e_18 = { error: e_18_1 }; }
2259
+ finally {
2260
+ try {
2261
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
2262
+ }
2263
+ finally { if (e_18) throw e_18.error; }
2264
+ }
2265
+ this.pop();
2266
+ return this.getBezierPoint(v);
2267
+ };
2268
+ DPolygon.prototype.simpleIncludeX = function (p) {
2269
+ var x = p.x;
2270
+ return this.minX <= x && this.maxX >= x;
2271
+ };
2272
+ DPolygon.prototype.simpleIncludeY = function (p) {
2273
+ var y = p.y;
2274
+ return this.minY <= y && this.maxY >= y;
2275
+ };
2276
+ DPolygon.prototype.douglasPeucker = function (points, e) {
2277
+ var dMax = 0;
2278
+ var index = 0;
2279
+ var end = points.length - 1;
2280
+ var line = points[0].findLine(points[end]);
2281
+ for (var i = 1; i < end; i++) {
2282
+ var d = line.perpendicularDistance(points[i]);
2283
+ if (d > dMax) {
2284
+ index = i;
2285
+ dMax = d;
2286
+ }
2287
+ }
2288
+ if (dMax >= e) {
2289
+ var recResult1 = this.douglasPeucker(points.slice(0, index + 1), e);
2290
+ var recResult2 = this.douglasPeucker(points.slice(index), e);
2291
+ recResult1.pop();
2292
+ return __spreadArray$1(__spreadArray$1([], __read$3(recResult1), false), __read$3(recResult2), false);
2293
+ }
2294
+ return [points[0], points[end]];
2295
+ };
2296
+ DPolygon.prototype.goByPath = function (ctx, steps) {
2297
+ if (steps === void 0) { steps = this.length - 1; }
2298
+ var start = this.first;
2299
+ ctx.moveTo(start.x, start.y);
2300
+ for (var i = 1; i <= (steps % this.length); i++) {
2301
+ var _a = this.at(i), x = _a.x, y = _a.y;
2302
+ ctx.lineTo(x, y);
2303
+ }
2304
+ };
2305
+ DPolygon.prototype.getJSTSGeometry = function (p, unionThis, unionThat) {
2306
+ var unionOrIntersection = unionThat === unionThis;
2307
+ var reader = new jsts.io.WKTReader();
2308
+ var a = reader.read(this.noHoles.toWKT());
2309
+ var b = reader.read(p.noHoles.toWKT());
2310
+ if (!unionOrIntersection) {
2311
+ return a.difference(b);
2312
+ }
2313
+ else if (unionThis) {
2314
+ return a.union(b);
2315
+ }
2316
+ else if (!unionThis) {
2317
+ return a.intersection(b);
2318
+ }
2319
+ return undefined;
2320
+ };
2321
+ DPolygon.prototype.simpleLogicFunction = function (p, unionThis, unionThat) {
2322
+ var e_19, _a, e_20, _b, e_21, _c, e_22, _d;
2323
+ var c = this.getJSTSGeometry(p, unionThis, unionThat);
2324
+ if (c) {
2325
+ var coordinates_1 = c.getCoordinates();
2326
+ if (coordinates_1.length) {
2327
+ var result = coordinates_1.reduce(function (ak, _a, index) {
2328
+ var x = _a.x, y = _a.y;
2329
+ var lastIndex = ak.length - 1;
2330
+ var t = new DPoint(x, y);
2331
+ var first = ak[lastIndex].first;
2332
+ if (t.equal(first)) {
2333
+ if (coordinates_1[index + 1]) {
2334
+ var nextPoint = new DPoint(coordinates_1[index + 1].x, coordinates_1[index + 1].y);
2335
+ if (ak[lastIndex].length > 1) {
2336
+ ak.push(new DPolygon([nextPoint]));
2337
+ }
2338
+ }
2339
+ }
2340
+ else {
2341
+ ak[lastIndex].push(t);
2342
+ }
2343
+ return ak;
2344
+ }, [new DPolygon([new DPoint(coordinates_1[0].x, coordinates_1[0].y)])]);
2345
+ if (unionThat && unionThis && result.length > 1) {
2346
+ try {
2347
+ for (var result_1 = __values$2(result), result_1_1 = result_1.next(); !result_1_1.done; result_1_1 = result_1.next()) {
2348
+ var q = result_1_1.value;
2349
+ var _loop_6 = function (r) {
2350
+ var _e;
2351
+ if (q.has(r.first) && !q.equal(r)) {
2352
+ var index = q.findIndex(r.first);
2353
+ (_e = q.points).splice.apply(_e, __spreadArray$1([index, 0], __read$3(r.points), false));
2354
+ result = result.filter(function (h) { return !h.equal(r); });
2355
+ return "continue";
2356
+ }
2357
+ if (result.length < 2) {
2358
+ return "break";
2359
+ }
2360
+ };
2361
+ try {
2362
+ for (var result_2 = (e_20 = void 0, __values$2(result)), result_2_1 = result_2.next(); !result_2_1.done; result_2_1 = result_2.next()) {
2363
+ var r = result_2_1.value;
2364
+ var state_1 = _loop_6(r);
2365
+ if (state_1 === "break")
2366
+ break;
2367
+ }
2368
+ }
2369
+ catch (e_20_1) { e_20 = { error: e_20_1 }; }
2370
+ finally {
2371
+ try {
2372
+ if (result_2_1 && !result_2_1.done && (_b = result_2.return)) _b.call(result_2);
2373
+ }
2374
+ finally { if (e_20) throw e_20.error; }
2375
+ }
2376
+ if (result.length < 2) {
2377
+ break;
2378
+ }
2379
+ }
2380
+ }
2381
+ catch (e_19_1) { e_19 = { error: e_19_1 }; }
2382
+ finally {
2383
+ try {
2384
+ if (result_1_1 && !result_1_1.done && (_a = result_1.return)) _a.call(result_1);
2385
+ }
2386
+ finally { if (e_19) throw e_19.error; }
2387
+ }
2388
+ }
2389
+ result = result.filter(function (h) { return h.length > 2; }).map(function (h) { return h.close(); });
2390
+ try {
2391
+ for (var result_3 = __values$2(result), result_3_1 = result_3.next(); !result_3_1.done; result_3_1 = result_3.next()) {
2392
+ var q = result_3_1.value;
2393
+ var _loop_7 = function (r) {
2394
+ if (result.length < 2) {
2395
+ return "break";
2396
+ }
2397
+ if (!q.equal(r)) {
2398
+ if (q.contain(r.first, true)) {
2399
+ q.holes.push(r);
2400
+ result = result.filter(function (h) { return !h.equal(r); });
2401
+ }
2402
+ }
2403
+ };
2404
+ try {
2405
+ for (var result_4 = (e_22 = void 0, __values$2(result)), result_4_1 = result_4.next(); !result_4_1.done; result_4_1 = result_4.next()) {
2406
+ var r = result_4_1.value;
2407
+ var state_2 = _loop_7(r);
2408
+ if (state_2 === "break")
2409
+ break;
2410
+ }
2411
+ }
2412
+ catch (e_22_1) { e_22 = { error: e_22_1 }; }
2413
+ finally {
2414
+ try {
2415
+ if (result_4_1 && !result_4_1.done && (_d = result_4.return)) _d.call(result_4);
2416
+ }
2417
+ finally { if (e_22) throw e_22.error; }
2418
+ }
2419
+ if (result.length < 2) {
2420
+ break;
2421
+ }
2422
+ }
2423
+ }
2424
+ catch (e_21_1) { e_21 = { error: e_21_1 }; }
2425
+ finally {
2426
+ try {
2427
+ if (result_3_1 && !result_3_1.done && (_c = result_3.return)) _c.call(result_3);
2428
+ }
2429
+ finally { if (e_21) throw e_21.error; }
2430
+ }
2431
+ if (result.length === 0) {
2432
+ return null;
2433
+ }
2434
+ if (result.length === 1) {
2435
+ return result[0].close();
2436
+ }
2437
+ return result.map(function (g) { return g.close(); });
2438
+ }
2439
+ }
2440
+ return null;
2441
+ };
2442
+ DPolygon.CAP_ROUND = CAP_ROUND;
2443
+ DPolygon.CAP_FLAT = CAP_FLAT;
2444
+ DPolygon.CAP_SQUARE = CAP_SQUARE;
2445
+ DPolygon.WKT_LINESTRING = 'LINESTRING';
2446
+ DPolygon.WKT_POLYGON = 'POLYGON';
2447
+ return DPolygon;
2448
+ }());
2449
+
2450
+ var __assign = (undefined && undefined.__assign) || function () {
2451
+ __assign = Object.assign || function(t) {
2452
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
2453
+ s = arguments[i];
2454
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
2455
+ t[p] = s[p];
2456
+ }
2457
+ return t;
2458
+ };
2459
+ return __assign.apply(this, arguments);
2460
+ };
2461
+ var __read$2 = (undefined && undefined.__read) || function (o, n) {
2462
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
2463
+ if (!m) return o;
2464
+ var i = m.call(o), r, ar = [], e;
2465
+ try {
2466
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
2467
+ }
2468
+ catch (error) { e = { error: error }; }
2469
+ finally {
2470
+ try {
2471
+ if (r && !r.done && (m = i["return"])) m.call(i);
2472
+ }
2473
+ finally { if (e) throw e.error; }
2474
+ }
2475
+ return ar;
2476
+ };
2477
+ var diff = 0;
2478
+ var radiansPolygon = new DPolygon();
2479
+ var pseudoMercatorPolygon = new DPolygon();
2480
+ var worldGeodeticPolygon = new DPolygon();
2481
+ var EARTH_RADIUS_IN_METERS = 6371008.8;
2482
+ var EARTH_IN_MITERS = 20037508.34;
2483
+ var DEGREES_IN_EARTH = 180;
2484
+ var MITERS_IN_ONE_DEGREE = EARTH_IN_MITERS / DEGREES_IN_EARTH;
2485
+ var DEGREES_IN_ONE_MITER = DEGREES_IN_EARTH / EARTH_IN_MITERS;
2486
+ var HALF_PI_IN_DEGREE = 90;
2487
+ var PI_IN_DEGREE = 180;
2488
+ var DOUBLE_PI_IN_DEGREE = 360;
2489
+ var PI_TO_DEGREE = Math.PI / PI_IN_DEGREE;
2490
+ var DEGREE_TO_PI = PI_IN_DEGREE / Math.PI;
2491
+ var DPoint = (function () {
2492
+ function DPoint(x, y, z) {
2493
+ if (x === void 0) { x = 0; }
2494
+ if (y === void 0) { y = x; }
2495
+ this.x = x;
2496
+ this.y = y;
2497
+ this.z = z;
2498
+ this.properties = {};
2499
+ }
2500
+ DPoint.zero = function () {
2501
+ return new DPoint();
2502
+ };
2503
+ DPoint.parse = function (c) {
2504
+ var _a = c, lat = _a.lat, lng = _a.lng;
2505
+ if (lat && lng) {
2506
+ return new DPoint(lat, lng, 0);
2507
+ }
2508
+ var _b = __read$2(c, 3), x = _b[0], y = _b[1], z = _b[2];
2509
+ return new DPoint(x, y, z);
2510
+ };
2511
+ DPoint.parseFromWKT = function (wkt) {
2512
+ var regexp = /POINT \((?<data>(?:(?!\)).)*?)\)$/miu;
2513
+ var data = wkt.trim().toUpperCase();
2514
+ var res = regexp.exec(data);
2515
+ var _a = __read$2(res.groups.data.split(' ').map(Number), 3), x = _a[0], y = _a[1], z = _a[2];
2516
+ return new DPoint(x, y, z);
2517
+ };
2518
+ DPoint.random = function () {
2519
+ return new DPoint(Math.random(), Math.random());
2520
+ };
2521
+ DPoint.prototype.getTileFromCoords = function (zoom) {
2522
+ if (zoom === void 0) { zoom = this.z; }
2523
+ checkFunction('getTileFromCoords')
2524
+ .checkArgument('this')
2525
+ .shouldBeDegree(this);
2526
+ var x = Math.floor((this.x + PI_IN_DEGREE) / DOUBLE_PI_IN_DEGREE * (Math.pow(2, zoom)));
2527
+ var y = Math.floor((1 - Math.log(Math.tan(this.y * PI_TO_DEGREE) + 1 / Math.cos(this.y * PI_TO_DEGREE)) / Math.PI) / 2 * (Math.pow(2, zoom)));
2528
+ return new DPoint(x, y, zoom);
2529
+ };
2530
+ DPoint.prototype.getCoordsFromTile = function (zoom) {
2531
+ if (zoom === void 0) { zoom = this.z; }
2532
+ checkFunction('getCoordsFromTile')
2533
+ .checkArgument('this')
2534
+ .shouldBeUInt(this);
2535
+ var n = Math.PI - 2 * Math.PI * this.y / (Math.pow(2, zoom));
2536
+ var x = this.x / (Math.pow(2, zoom)) * DOUBLE_PI_IN_DEGREE - PI_IN_DEGREE;
2537
+ var y = PI_IN_DEGREE / Math.PI * Math.atan((Math.exp(n) - Math.exp(-n)) / 2);
2538
+ return new DPoint(x, y, zoom);
2539
+ };
2540
+ DPoint.prototype.toCoords = function () {
2541
+ if (this.z === undefined) {
2542
+ return [this.x, this.y];
2543
+ }
2544
+ return [this.x, this.y, this.z];
2545
+ };
2546
+ DPoint.prototype.findLine = function (p) {
2547
+ checkFunction('findLine')
2548
+ .checkArgument('this')
2549
+ .shouldBeMeters(this)
2550
+ .checkArgument('p')
2551
+ .shouldBeMeters(p);
2552
+ if (this.equal(p)) {
2553
+ return this.findLine(p.clone().move(0, 1));
2554
+ }
2555
+ var a = this.y - p.y - diff;
2556
+ var b = p.x - this.x - diff;
2557
+ var c = this.x * p.y - p.x * this.y - diff;
2558
+ if (a === 0) {
2559
+ return new DLine(0, 1, c / b, this, p);
2560
+ }
2561
+ if (b === 0) {
2562
+ return new DLine(1, 0, c / a, this, p);
2563
+ }
2564
+ return new DLine(a, b, c, this, p);
2565
+ };
2566
+ DPoint.prototype.findInnerAngle = function (p1, p3) {
2567
+ checkFunction('findInnerAngle')
2568
+ .checkArgument('this')
2569
+ .shouldBeMeters(this)
2570
+ .checkArgument('p1')
2571
+ .shouldBeMeters(p1)
2572
+ .checkArgument('p3')
2573
+ .shouldBeMeters(p3);
2574
+ var a1 = this.findLine(p1).getFi();
2575
+ var a2 = this.findLine(p3).getFi();
2576
+ if (a2 >= a1) {
2577
+ return a2 - a1;
2578
+ }
2579
+ return a2 + Math.PI * 2 - a1;
2580
+ };
2581
+ DPoint.prototype.toString = function () {
2582
+ return this.x + " " + this.y;
2583
+ };
2584
+ DPoint.prototype.getValue = function () {
2585
+ return [this.x, this.y];
2586
+ };
2587
+ DPoint.prototype.height = function (z) {
2588
+ this.z = z;
2589
+ return this;
2590
+ };
2591
+ DPoint.prototype.toWKT = function () {
2592
+ var _a = this, x = _a.x, y = _a.y;
2593
+ return "POINT (" + x + " " + y + ")";
2594
+ };
2595
+ DPoint.prototype.distance = function (p) {
2596
+ checkFunction('distance')
2597
+ .checkArgument('this')
2598
+ .shouldBeMeters(this)
2599
+ .checkArgument('p')
2600
+ .shouldBeMeters(p);
2601
+ var dx = p.x - this.x;
2602
+ var dy = p.y - this.y;
2603
+ return Math.sqrt(dx * dx + dy * dy);
2604
+ };
2605
+ DPoint.prototype.distance3d = function (p) {
2606
+ checkFunction('distance3d')
2607
+ .checkArgument('this')
2608
+ .shouldBeMeters(this)
2609
+ .checkArgument('p')
2610
+ .shouldBeMeters(p)
2611
+ .checkArgument('this.z')
2612
+ .shouldExist(this.z)
2613
+ .checkArgument('p.z')
2614
+ .shouldExist(p.z);
2615
+ var dx = p.x - this.x;
2616
+ var dy = p.y - this.y;
2617
+ var dz = p.z - this.z;
2618
+ return Math.sqrt(dx * dx + dy * dy + dz * dz);
2619
+ };
2620
+ DPoint.prototype.setX = function (x) {
2621
+ this.x = typeof x === 'number' ? x : x(this);
2622
+ return this;
2623
+ };
2624
+ DPoint.prototype.setZ = function (z) {
2625
+ this.z = typeof z === 'number' ? z : z(this);
2626
+ return this;
2627
+ };
2628
+ DPoint.prototype.setY = function (y) {
2629
+ this.y = typeof y === 'number' ? y : y(this);
2630
+ return this;
2631
+ };
2632
+ DPoint.prototype.clone = function () {
2633
+ var p = new DPoint(this.x, this.y, this.z);
2634
+ p.properties = __assign({}, this.properties);
2635
+ return p;
2636
+ };
2637
+ DPoint.prototype.gt = function (p) {
2638
+ return this.x > p.x && this.y > p.y;
2639
+ };
2640
+ DPoint.prototype.lt = function (p) {
2641
+ return this.x < p.x && this.y < p.y;
2642
+ };
2643
+ DPoint.prototype.gtOrEqual = function (p) {
2644
+ return this.gt(p) || this.equal(p);
2645
+ };
2646
+ DPoint.prototype.ltOrEqual = function (p) {
2647
+ return this.lt(p) || this.equal(p);
2648
+ };
2649
+ DPoint.prototype.rotate = function (a) {
2650
+ var x = this.x * Math.cos(a) - this.y * Math.sin(a);
2651
+ var y = this.x * Math.sin(a) + this.y * Math.cos(a);
2652
+ this.x = x;
2653
+ this.y = y;
2654
+ return this;
2655
+ };
2656
+ DPoint.prototype.rotate3dX = function (a) {
2657
+ var _a = this, y = _a.y, z = _a.z;
2658
+ this.y = y * Math.cos(a) + z * Math.sin(a);
2659
+ this.z = -y * Math.sin(a) + z * Math.cos(a);
2660
+ return this;
2661
+ };
2662
+ DPoint.prototype.rotate3dY = function (a) {
2663
+ var _a = this, x = _a.x, z = _a.z;
2664
+ this.x = x * Math.cos(a) + z * Math.sin(a);
2665
+ this.z = -x * Math.sin(a) + z * Math.cos(a);
2666
+ return this;
2667
+ };
2668
+ DPoint.prototype.rotate3dZ = function (a) {
2669
+ var _a = this, x = _a.x, y = _a.y;
2670
+ this.x = x * Math.cos(a) - y * Math.sin(a);
2671
+ this.y = -x * Math.sin(a) + y * Math.cos(a);
2672
+ return this;
2673
+ };
2674
+ DPoint.prototype.move = function (x, y, z) {
2675
+ if (y === void 0) { y = x; }
2676
+ var xV = 0;
2677
+ var yV = 0;
2678
+ var zV = undefined;
2679
+ if (x instanceof DPoint) {
2680
+ xV = this.x + x.x;
2681
+ yV = this.y + x.y;
2682
+ if (isDefAndNotNull(this.z) && isDefAndNotNull(x.z)) {
2683
+ zV = this.z + x.z;
2684
+ }
2685
+ }
2686
+ else {
2687
+ xV = this.x + x;
2688
+ yV = this.y + y;
2689
+ if (isDefAndNotNull(this.z) && isDefAndNotNull(z)) {
2690
+ zV = this.z + z;
2691
+ }
2692
+ }
2693
+ this.x = xV;
2694
+ this.y = yV;
2695
+ if (isDefAndNotNull(zV)) {
2696
+ this.z = zV;
2697
+ }
2698
+ return this;
2699
+ };
2700
+ DPoint.prototype.degreeToMeters = function () {
2701
+ checkFunction('degreeToMeters')
2702
+ .checkArgument('this')
2703
+ .shouldBeDegree(this);
2704
+ var x = ((this.x + PI_IN_DEGREE) % DOUBLE_PI_IN_DEGREE - PI_IN_DEGREE) * MITERS_IN_ONE_DEGREE;
2705
+ var y = (Math.log(Math.tan(((this.y + HALF_PI_IN_DEGREE) % PI_IN_DEGREE) *
2706
+ (Math.PI / DOUBLE_PI_IN_DEGREE))) / PI_TO_DEGREE) * MITERS_IN_ONE_DEGREE;
2707
+ this.x = x;
2708
+ this.y = y;
2709
+ return this;
2710
+ };
2711
+ DPoint.prototype.metersToDegree = function () {
2712
+ checkFunction('metersToDegree')
2713
+ .checkArgument('this')
2714
+ .shouldBeMeters(this);
2715
+ var lon = this.x * DEGREES_IN_ONE_MITER;
2716
+ var lat = Math.atan(Math.pow(Math.E, ((this.y / MITERS_IN_ONE_DEGREE) * PI_TO_DEGREE))) *
2717
+ (DOUBLE_PI_IN_DEGREE / Math.PI) - HALF_PI_IN_DEGREE;
2718
+ this.x = lon;
2719
+ this.y = lat;
2720
+ return this;
2721
+ };
2722
+ DPoint.prototype.degreeToRadians = function () {
2723
+ checkFunction('degreeToRadians')
2724
+ .checkArgument('this')
2725
+ .shouldBeDegree(this);
2726
+ return this.scale(PI_TO_DEGREE);
2727
+ };
2728
+ DPoint.prototype.radiansToDegrees = function () {
2729
+ checkFunction('radiansToDegrees')
2730
+ .checkArgument('this')
2731
+ .shouldBeRadians(this);
2732
+ return this.scale(DEGREE_TO_PI);
2733
+ };
2734
+ DPoint.prototype.radiansToMeters = function () {
2735
+ checkFunction('radiansToMeters')
2736
+ .checkArgument('this')
2737
+ .shouldBeRadians(this);
2738
+ return this.radiansToDegrees().degreeToMeters();
2739
+ };
2740
+ DPoint.prototype.metersToRadians = function () {
2741
+ checkFunction('metersToRadians')
2742
+ .checkArgument('this')
2743
+ .shouldBeMeters(this);
2744
+ return this.metersToDegree().degreeToRadians();
2745
+ };
2746
+ DPoint.prototype.round = function () {
2747
+ this.x = Math.round(this.x);
2748
+ this.y = Math.round(this.y);
2749
+ return this;
2750
+ };
2751
+ DPoint.prototype.ceil = function () {
2752
+ this.x = Math.ceil(this.x);
2753
+ this.y = Math.ceil(this.y);
2754
+ return this;
2755
+ };
2756
+ DPoint.prototype.floor = function () {
2757
+ this.x = Math.floor(this.x);
2758
+ this.y = Math.floor(this.y);
2759
+ return this;
2760
+ };
2761
+ DPoint.prototype.toFixed = function (n) {
2762
+ if (n === void 0) { n = 2; }
2763
+ this.x = parseFloat(this.x.toFixed(n));
2764
+ this.y = parseFloat(this.y.toFixed(n));
2765
+ return this;
2766
+ };
2767
+ DPoint.prototype.abs = function () {
2768
+ this.x = Math.abs(this.x);
2769
+ this.y = Math.abs(this.y);
2770
+ return this;
2771
+ };
2772
+ DPoint.prototype.scale = function (x, y, z) {
2773
+ if (y === void 0) { y = x; }
2774
+ var xV = 0;
2775
+ var yV = 0;
2776
+ var zV = undefined;
2777
+ if (x instanceof DPoint) {
2778
+ xV = this.x * x.x;
2779
+ yV = this.y * x.y;
2780
+ if (isDefAndNotNull(this.z) && isDefAndNotNull(x.z)) {
2781
+ zV = this.z * x.z;
2782
+ }
2783
+ }
2784
+ else {
2785
+ xV = this.x * x;
2786
+ yV = this.y * y;
2787
+ if (isDefAndNotNull(this.z) && isDefAndNotNull(z)) {
2788
+ zV = this.z * z;
2789
+ }
2790
+ }
2791
+ this.x = xV;
2792
+ this.y = yV;
2793
+ if (isDefAndNotNull(zV)) {
2794
+ this.z = zV;
2795
+ }
2796
+ return this;
2797
+ };
2798
+ DPoint.prototype.divide = function (x, y, z) {
2799
+ if (y === void 0) { y = x; }
2800
+ var xV = 0;
2801
+ var yV = 0;
2802
+ var zV = undefined;
2803
+ if (x instanceof DPoint) {
2804
+ xV = this.x / x.x;
2805
+ yV = this.y / x.y;
2806
+ if (isDefAndNotNull(this.z) && isDefAndNotNull(x.z)) {
2807
+ zV = this.z / x.z;
2808
+ }
2809
+ }
2810
+ else {
2811
+ xV = this.x / x;
2812
+ yV = this.y / y;
2813
+ if (isDefAndNotNull(this.z) && isDefAndNotNull(z)) {
2814
+ zV = this.z / z;
2815
+ }
2816
+ }
2817
+ this.x = xV;
2818
+ this.y = yV;
2819
+ if (isDefAndNotNull(zV)) {
2820
+ this.z = zV;
2821
+ }
2822
+ return this;
2823
+ };
2824
+ DPoint.prototype.equal = function (p) {
2825
+ return this.x === p.x && this.y === p.y && this.z === p.z;
2826
+ };
2827
+ DPoint.prototype.like = function (p, d) {
2828
+ var _a, _b, _c, _d;
2829
+ if (d === void 0) { d = 0.001; }
2830
+ if (this.equal(p)) {
2831
+ return true;
2832
+ }
2833
+ var likeX = Math.abs(this.x - p.x) < d;
2834
+ var likeY = Math.abs(this.y - p.y) < d;
2835
+ var likeZ = Math.abs(((_b = (_a = this.z) !== null && _a !== void 0 ? _a : p.z) !== null && _b !== void 0 ? _b : 0) - ((_d = (_c = p.z) !== null && _c !== void 0 ? _c : this.z) !== null && _d !== void 0 ? _d : 0)) < d;
2836
+ return likeX && likeY && likeZ;
2837
+ };
2838
+ DPoint.prototype.flipVertically = function (size) {
2839
+ var v = size;
2840
+ if (size instanceof DPoint) {
2841
+ v = size.y;
2842
+ }
2843
+ this.y = v - this.y;
2844
+ return this;
2845
+ };
2846
+ Object.defineProperty(DPoint.prototype, "likeRadians", {
2847
+ get: function () {
2848
+ if (radiansPolygon.length === 0) {
2849
+ radiansPolygon.push(new DPoint(-Math.PI, -Math.PI / 2), new DPoint(Math.PI, Math.PI / 2));
2850
+ }
2851
+ return radiansPolygon.simpleInclude(this);
2852
+ },
2853
+ enumerable: false,
2854
+ configurable: true
2855
+ });
2856
+ Object.defineProperty(DPoint.prototype, "likeWorldGeodeticSystem", {
2857
+ get: function () {
2858
+ if (worldGeodeticPolygon.length === 0) {
2859
+ worldGeodeticPolygon.push(new DPoint(-180, -90), new DPoint(180, 90));
2860
+ }
2861
+ return !this.likeRadians && worldGeodeticPolygon.simpleInclude(this);
2862
+ },
2863
+ enumerable: false,
2864
+ configurable: true
2865
+ });
2866
+ Object.defineProperty(DPoint.prototype, "likePseudoMercator", {
2867
+ get: function () {
2868
+ if (pseudoMercatorPolygon.length === 0) {
2869
+ pseudoMercatorPolygon.push(new DPoint(-20026376.39, -20048966.10), new DPoint(20026376.39, 20048966.10));
2870
+ }
2871
+ return !this.likeRadians && !this.likeWorldGeodeticSystem && pseudoMercatorPolygon.simpleInclude(this);
2872
+ },
2873
+ enumerable: false,
2874
+ configurable: true
2875
+ });
2876
+ Object.defineProperty(DPoint.prototype, "w", {
2877
+ get: function () {
2878
+ return this.x;
2879
+ },
2880
+ set: function (x) {
2881
+ this.x = x;
2882
+ },
2883
+ enumerable: false,
2884
+ configurable: true
2885
+ });
2886
+ Object.defineProperty(DPoint.prototype, "h", {
2887
+ get: function () {
2888
+ return this.y;
2889
+ },
2890
+ set: function (y) {
2891
+ this.y = y;
2892
+ },
2893
+ enumerable: false,
2894
+ configurable: true
2895
+ });
2896
+ Object.defineProperty(DPoint.prototype, "area", {
2897
+ get: function () {
2898
+ checkFunction('area')
2899
+ .checkArgument('this')
2900
+ .shouldBeMeters(this);
2901
+ return this.w * this.h;
2902
+ },
2903
+ enumerable: false,
2904
+ configurable: true
2905
+ });
2906
+ Object.defineProperty(DPoint.prototype, "hip", {
2907
+ get: function () {
2908
+ checkFunction('hip')
2909
+ .checkArgument('this')
2910
+ .shouldBeMeters(this);
2911
+ return Math.sqrt(this.w * this.w + this.h * this.h);
2912
+ },
2913
+ enumerable: false,
2914
+ configurable: true
2915
+ });
2916
+ Object.defineProperty(DPoint.prototype, "min", {
2917
+ get: function () {
2918
+ return Math.min(this.x, this.y);
2919
+ },
2920
+ enumerable: false,
2921
+ configurable: true
2922
+ });
2923
+ Object.defineProperty(DPoint.prototype, "max", {
2924
+ get: function () {
2925
+ return Math.max(this.x, this.y);
2926
+ },
2927
+ enumerable: false,
2928
+ configurable: true
2929
+ });
2930
+ Object.defineProperty(DPoint.prototype, "hipPoint", {
2931
+ get: function () {
2932
+ var hip = this.hip;
2933
+ return new DPoint(hip, hip);
2934
+ },
2935
+ enumerable: false,
2936
+ configurable: true
2937
+ });
2938
+ Object.defineProperty(DPoint.prototype, "xPoint", {
2939
+ get: function () {
2940
+ var x = this.x;
2941
+ return new DPoint(x, x);
2942
+ },
2943
+ enumerable: false,
2944
+ configurable: true
2945
+ });
2946
+ Object.defineProperty(DPoint.prototype, "yPoint", {
2947
+ get: function () {
2948
+ var y = this.y;
2949
+ return new DPoint(y, y);
2950
+ },
2951
+ enumerable: false,
2952
+ configurable: true
2953
+ });
2954
+ Object.defineProperty(DPoint.prototype, "wPoint", {
2955
+ get: function () {
2956
+ return this.xPoint;
2957
+ },
2958
+ enumerable: false,
2959
+ configurable: true
2960
+ });
2961
+ Object.defineProperty(DPoint.prototype, "hPoint", {
2962
+ get: function () {
2963
+ return this.yPoint;
2964
+ },
2965
+ enumerable: false,
2966
+ configurable: true
2967
+ });
2968
+ DPoint.prototype.simple = function (xKey, yKey) {
2969
+ var _a;
2970
+ if (xKey === void 0) { xKey = 'x'; }
2971
+ if (yKey === void 0) { yKey = 'y'; }
2972
+ return _a = {},
2973
+ _a[xKey] = this.x,
2974
+ _a[yKey] = this.y,
2975
+ _a;
2976
+ };
2977
+ DPoint.prototype.setIfLessThan = function (p) {
2978
+ this.x = Math.max(this.x, p.x);
2979
+ this.y = Math.max(this.y, p.y);
2980
+ return this;
2981
+ };
2982
+ DPoint.prototype.minus = function () {
2983
+ return this.scale(-1);
2984
+ };
2985
+ DPoint.prototype.orthodromicPath = function (point, pointsCount) {
2986
+ if (pointsCount === void 0) { pointsCount = 360; }
2987
+ checkFunction('orthodromicPath')
2988
+ .checkArgument('this')
2989
+ .shouldBeDegree(this)
2990
+ .checkArgument('point')
2991
+ .shouldBeDegree(point);
2992
+ var t = this.clone().degreeToRadians();
2993
+ var p = point.clone().degreeToRadians();
2994
+ var d = Math.sin(p.x - t.x);
2995
+ var step = (p.x - t.x) / (pointsCount - 1);
2996
+ return new DPolygon(createArray(pointsCount)
2997
+ .map(function (v, i) {
2998
+ var x = t.x + step * i;
2999
+ var y = Math.atan((Math.tan(t.y) * Math.sin(p.x - x)) / d +
3000
+ (Math.tan(p.y) * Math.sin(x - t.x)) / d);
3001
+ return new DPoint(x, y).radiansToDegrees();
3002
+ }));
3003
+ };
3004
+ DPoint.prototype.sortByDistance = function (p) {
3005
+ var _this = this;
3006
+ return p
3007
+ .clone()
3008
+ .map(function (d, index) {
3009
+ d.properties.distance = d.distance(_this);
3010
+ d.properties.index = index;
3011
+ return d;
3012
+ })
3013
+ .sort(function (a, b) { return a.properties.distance - b.properties.distance; });
3014
+ };
3015
+ return DPoint;
3016
+ }());
3017
+
3018
+ var DCircle = (function () {
3019
+ function DCircle(center, r) {
3020
+ if (center === void 0) { center = DPoint.zero(); }
3021
+ if (r === void 0) { r = 0; }
3022
+ this.center = center;
3023
+ this.r = r;
3024
+ }
3025
+ DCircle.prototype.toString = function () {
3026
+ return "(" + this.center.toString() + ", " + this.r + ")";
3027
+ };
3028
+ DCircle.prototype.getValue = function () {
3029
+ return { center: this.center, r: this.r };
3030
+ };
3031
+ DCircle.prototype.clone = function () {
3032
+ return new DCircle(this.center, this.r);
3033
+ };
3034
+ DCircle.prototype.findPoints = function (c) {
3035
+ if (this.equal(c)) {
3036
+ return Infinity;
3037
+ }
3038
+ var _a = this, _b = _a.center, x0 = _b.x, y0 = _b.y, r0 = _a.r;
3039
+ var _c = c.center, x1 = _c.x, y1 = _c.y, r1 = c.r;
3040
+ var r02 = r0 * r0;
3041
+ var d = this.center.distance(c.center);
3042
+ var a = (r02 - r1 * r1 + d * d) / (2 * d);
3043
+ var h = Math.sqrt(r02 - a * a);
3044
+ var ad = a / d;
3045
+ var dy = y1 - y0;
3046
+ var dx = x1 - x0;
3047
+ var hd = h / d;
3048
+ var x2 = x0 + ad * (x1 - x0);
3049
+ var y2 = y0 + ad * (y1 - y0);
3050
+ var x31 = x2 + hd * dy;
3051
+ var y31 = y2 - hd * dx;
3052
+ var x32 = x2 - hd * dy;
3053
+ var y32 = y2 + hd * dx;
3054
+ var res = [];
3055
+ if (!isNaN(x31) && !isNaN(y31)) {
3056
+ res.push(new DPoint(x31, y31));
3057
+ }
3058
+ if (!isNaN(x32) && !isNaN(y32) && !(x31 === x32 && y31 === y32)) {
3059
+ res.push(new DPoint(x32, y32));
3060
+ }
3061
+ return res;
3062
+ };
3063
+ DCircle.prototype.equal = function (_a) {
3064
+ var center = _a.center, r = _a.r;
3065
+ return this.center.equal(center) && this.r === r;
3066
+ };
3067
+ DCircle.prototype.findPolygonInside = function (pointCount, startAngle, stopAngle) {
3068
+ if (pointCount === void 0) { pointCount = 64; }
3069
+ if (startAngle === void 0) { startAngle = 0; }
3070
+ if (stopAngle === void 0) { stopAngle = 2 * Math.PI; }
3071
+ var step = 2 * Math.PI / pointCount;
3072
+ var points = [];
3073
+ var angle = startAngle;
3074
+ while (angle < stopAngle - step) {
3075
+ points.push(new DPoint(this.r).scale(Math.cos(angle), Math.sin(angle))
3076
+ .move(this.center));
3077
+ angle += step;
3078
+ }
3079
+ var x = this.r * Math.cos(stopAngle) + this.center.x;
3080
+ var y = this.r * Math.sin(stopAngle) + this.center.y;
3081
+ points.push(new DPoint(x, y));
3082
+ return new DPolygon(points);
3083
+ };
3084
+ DCircle.prototype.findPolygonInsideOnSphere = function (pointCount, startAngle, stopAngle) {
3085
+ if (pointCount === void 0) { pointCount = 64; }
3086
+ if (startAngle === void 0) { startAngle = 0; }
3087
+ if (stopAngle === void 0) { stopAngle = 2 * Math.PI; }
3088
+ checkFunction('findPolygonInsideOnSphere')
3089
+ .checkArgument('center')
3090
+ .shouldBeDegree(this.center);
3091
+ var step = 2 * Math.PI / pointCount;
3092
+ var points = [];
3093
+ var angle = startAngle;
3094
+ while (angle < stopAngle - step) {
3095
+ points.push(this.sphereOffset(angle));
3096
+ angle += step;
3097
+ }
3098
+ points.push(this.sphereOffset(stopAngle));
3099
+ return new DPolygon(points);
3100
+ };
3101
+ DCircle.prototype.sphereOffset = function (bearing, earthRadius) {
3102
+ if (earthRadius === void 0) { earthRadius = EARTH_RADIUS_IN_METERS; }
3103
+ var _a = this.center.clone().degreeToRadians(), lon1 = _a.x, lat1 = _a.y;
3104
+ var dByR = this.r / earthRadius;
3105
+ var lat = Math.asin(Math.sin(lat1) * Math.cos(dByR) +
3106
+ Math.cos(lat1) * Math.sin(dByR) * Math.cos(bearing));
3107
+ var lon = lon1 +
3108
+ Math.atan2(Math.sin(bearing) * Math.sin(dByR) * Math.cos(lat1), Math.cos(dByR) - Math.sin(lat1) * Math.sin(lat));
3109
+ return new DPoint(lon, lat).radiansToDegrees();
3110
+ };
3111
+ return DCircle;
3112
+ }());
3113
+
3114
+ var __values$1 = (undefined && undefined.__values) || function(o) {
3115
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
3116
+ if (m) return m.call(o);
3117
+ if (o && typeof o.length === "number") return {
3118
+ next: function () {
3119
+ if (o && i >= o.length) o = void 0;
3120
+ return { value: o && o[i++], done: !o };
3121
+ }
3122
+ };
3123
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
3124
+ };
3125
+ var FastSearch = (function () {
3126
+ function FastSearch() {
3127
+ this.searchStore = {};
3128
+ }
3129
+ FastSearch.prototype.add = function (points) {
3130
+ var e_1, _a;
3131
+ try {
3132
+ for (var points_1 = __values$1(points), points_1_1 = points_1.next(); !points_1_1.done; points_1_1 = points_1.next()) {
3133
+ var _b = points_1_1.value, x = _b.x, y = _b.y, z = _b.z;
3134
+ if (!this.searchStore[x]) {
3135
+ this.searchStore[x] = {};
3136
+ }
3137
+ if (!this.searchStore[x][y]) {
3138
+ this.searchStore[x][y] = {};
3139
+ }
3140
+ this.searchStore[x][y][z || 'undefined'] = true;
3141
+ }
3142
+ }
3143
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
3144
+ finally {
3145
+ try {
3146
+ if (points_1_1 && !points_1_1.done && (_a = points_1.return)) _a.call(points_1);
3147
+ }
3148
+ finally { if (e_1) throw e_1.error; }
3149
+ }
3150
+ };
3151
+ FastSearch.prototype.find = function (_a) {
3152
+ var x = _a.x, y = _a.y, z = _a.z;
3153
+ if (!this.searchStore[x]) {
3154
+ return false;
3155
+ }
3156
+ if (!this.searchStore[x][y]) {
3157
+ return false;
3158
+ }
3159
+ return this.searchStore[x][y][z || 'undefined'];
3160
+ };
3161
+ return FastSearch;
3162
+ }());
3163
+
3164
+ var __read$1 = (undefined && undefined.__read) || function (o, n) {
3165
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
3166
+ if (!m) return o;
3167
+ var i = m.call(o), r, ar = [], e;
3168
+ try {
3169
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
3170
+ }
3171
+ catch (error) { e = { error: error }; }
3172
+ finally {
3173
+ try {
3174
+ if (r && !r.done && (m = i["return"])) m.call(i);
3175
+ }
3176
+ finally { if (e) throw e.error; }
3177
+ }
3178
+ return ar;
3179
+ };
3180
+ var __spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {
3181
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
3182
+ if (ar || !(i in from)) {
3183
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
3184
+ ar[i] = from[i];
3185
+ }
3186
+ }
3187
+ return to.concat(ar || Array.prototype.slice.call(from));
3188
+ };
3189
+ var __values = (undefined && undefined.__values) || function(o) {
3190
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
3191
+ if (m) return m.call(o);
3192
+ if (o && typeof o.length === "number") return {
3193
+ next: function () {
3194
+ if (o && i >= o.length) o = void 0;
3195
+ return { value: o && o[i++], done: !o };
3196
+ }
3197
+ };
3198
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
3199
+ };
3200
+ exports.TraceMatrixValues = void 0;
3201
+ (function (TraceMatrixValues) {
3202
+ TraceMatrixValues[TraceMatrixValues["f"] = 0] = "f";
3203
+ TraceMatrixValues[TraceMatrixValues["t"] = 1] = "t";
3204
+ })(exports.TraceMatrixValues || (exports.TraceMatrixValues = {}));
3205
+ var getByPosition = function (m, p, defaultValue) {
3206
+ if (defaultValue === void 0) { defaultValue = exports.TraceMatrixValues.f; }
3207
+ if (m[p.y] === undefined || m[p.y][p.x] === undefined) {
3208
+ return defaultValue;
3209
+ }
3210
+ return m[p.y][p.x];
3211
+ };
3212
+ var setByPosition = function (m, p, value) {
3213
+ if (m[p.y] === undefined || m[p.y][p.x] === undefined) {
3214
+ return value;
3215
+ }
3216
+ m[p.y][p.x] = value;
3217
+ return m[p.y][p.x];
3218
+ };
3219
+ var TraceMatrix = (function () {
3220
+ function TraceMatrix(size, f) {
3221
+ var _this = this;
3222
+ this.size = size;
3223
+ this.findGroupByIndex = function (m, s) {
3224
+ var res = new DPolygon();
3225
+ if (s && getByPosition(m, s) === exports.TraceMatrixValues.t) {
3226
+ res.push(s);
3227
+ var startIndex = 0;
3228
+ var marked = TraceMatrix.createMatrix(_this.size, function () { return exports.TraceMatrixValues.f; });
3229
+ setByPosition(marked, s, exports.TraceMatrixValues.t);
3230
+ while (startIndex < res.length) {
3231
+ var r = res.at(startIndex);
3232
+ for (var i = -1; i < 2; i++) {
3233
+ for (var j = -1; j < 2; j++) {
3234
+ var t = new DPoint(r.x + i, r.y + j);
3235
+ if (getByPosition(marked, t, exports.TraceMatrixValues.t) === exports.TraceMatrixValues.f &&
3236
+ getByPosition(m, t, exports.TraceMatrixValues.f) === exports.TraceMatrixValues.t) {
3237
+ res.push(t);
3238
+ setByPosition(marked, t, exports.TraceMatrixValues.t);
3239
+ }
3240
+ }
3241
+ }
3242
+ startIndex++;
3243
+ }
3244
+ }
3245
+ return res;
3246
+ };
3247
+ this.findAllGroupsInMatrix = function (m) {
3248
+ var firstMark = _this.findMarked(m);
3249
+ if (!firstMark) {
3250
+ return [];
3251
+ }
3252
+ var group = _this.findGroupByIndex(m, firstMark);
3253
+ var groups = [group];
3254
+ var groupSum = group.length;
3255
+ var allGroups = __spreadArray([], __read$1(group.points), false);
3256
+ var fs = new FastSearch();
3257
+ fs.add(allGroups);
3258
+ while (groupSum < _this.totalCountInMatrix(m)) {
3259
+ var mark = _this.findMarked(m);
3260
+ while (mark && fs.find(mark)) {
3261
+ mark = _this.findMarked(m, mark);
3262
+ }
3263
+ var nextGroup = _this.findGroupByIndex(m, mark);
3264
+ groupSum += nextGroup.length;
3265
+ allGroups = __spreadArray(__spreadArray([], __read$1(allGroups), false), __read$1(nextGroup.points), false);
3266
+ fs.add(nextGroup.points);
3267
+ groups.push(nextGroup);
3268
+ }
3269
+ return groups.filter(function (g) { return g.length > 2; });
3270
+ };
3271
+ this.traceGroup = function (m, group) {
3272
+ var traceDirections = [
3273
+ new DPoint(-1, -1),
3274
+ new DPoint(-1, 0),
3275
+ new DPoint(-1, 1),
3276
+ new DPoint(0, 1),
3277
+ new DPoint(1, 1),
3278
+ new DPoint(1, 0),
3279
+ new DPoint(1, -1),
3280
+ new DPoint(0, -1)
3281
+ ];
3282
+ var left = function (d) { return (d + traceDirections.length + 1) % traceDirections.length; };
3283
+ var right = function (d) { return (d + traceDirections.length - 1) % traceDirections.length; };
3284
+ if (group.length < 2) {
3285
+ var t = group.at(0).clone();
3286
+ return new DPolygon([t, t, t]);
3287
+ }
3288
+ var points = new DPolygon();
3289
+ var direction = 0;
3290
+ var prevDirection = Infinity;
3291
+ var p = group.at(0);
3292
+ while (!p.equal(group.at(0)) || points.length < 2) {
3293
+ while (true) {
3294
+ var nextValue = getByPosition(m, p.clone().move(traceDirections[direction]));
3295
+ var nextNeighbourValue = getByPosition(m, p.clone().move(traceDirections[left(direction)]));
3296
+ if (nextValue === exports.TraceMatrixValues.t && nextNeighbourValue === exports.TraceMatrixValues.f) {
3297
+ break;
3298
+ }
3299
+ direction = right(direction);
3300
+ }
3301
+ if (prevDirection !== direction) {
3302
+ points.push(p);
3303
+ prevDirection = direction;
3304
+ }
3305
+ p = p.clone().move(traceDirections[direction]);
3306
+ direction = left(left(direction));
3307
+ }
3308
+ return points.approximation().close();
3309
+ };
3310
+ this.createHoleMatrix = function (group) {
3311
+ var e_1, _a;
3312
+ var fullTraceDirections = [
3313
+ new DPoint(-1, 0),
3314
+ new DPoint(0, 1),
3315
+ new DPoint(1, 0),
3316
+ new DPoint(0, -1)
3317
+ ];
3318
+ group.prepareToFastSearch();
3319
+ var tmpMatrix = TraceMatrix
3320
+ .createMatrix(_this.size, function (p) { return group.fastHas(p) ? exports.TraceMatrixValues.t : exports.TraceMatrixValues.f; });
3321
+ var startCoords = new DPolygon();
3322
+ for (var i = 0; i < _this.size.w; i++) {
3323
+ startCoords.push(new DPoint(i, -1));
3324
+ startCoords.push(new DPoint(i, _this.size.h));
3325
+ }
3326
+ for (var i = 0; i < _this.size.h; i++) {
3327
+ startCoords.push(new DPoint(-1, i));
3328
+ startCoords.push(new DPoint(_this.size.w, i));
3329
+ }
3330
+ while (startCoords.length) {
3331
+ var point = startCoords.pop();
3332
+ try {
3333
+ for (var fullTraceDirections_1 = (e_1 = void 0, __values(fullTraceDirections)), fullTraceDirections_1_1 = fullTraceDirections_1.next(); !fullTraceDirections_1_1.done; fullTraceDirections_1_1 = fullTraceDirections_1.next()) {
3334
+ var direction = fullTraceDirections_1_1.value;
3335
+ var tmpPoint = point.clone().move(direction);
3336
+ var value = getByPosition(tmpMatrix, tmpPoint, exports.TraceMatrixValues.t);
3337
+ if (value === exports.TraceMatrixValues.f) {
3338
+ setByPosition(tmpMatrix, tmpPoint, exports.TraceMatrixValues.t);
3339
+ startCoords.push(tmpPoint);
3340
+ }
3341
+ }
3342
+ }
3343
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
3344
+ finally {
3345
+ try {
3346
+ if (fullTraceDirections_1_1 && !fullTraceDirections_1_1.done && (_a = fullTraceDirections_1.return)) _a.call(fullTraceDirections_1);
3347
+ }
3348
+ finally { if (e_1) throw e_1.error; }
3349
+ }
3350
+ }
3351
+ var t = _this.reverseMatrix(tmpMatrix);
3352
+ return _this.totalCountInMatrix(t) ? t : null;
3353
+ };
3354
+ this.m = TraceMatrix.createMatrix(this.size, f);
3355
+ }
3356
+ TraceMatrix.prototype.fullMatrixTrace = function () {
3357
+ var _this = this;
3358
+ var groups = this.findAllGroupsInMatrix(this.m);
3359
+ var paths = groups.map(function (g) { return _this.traceGroup(_this.m, g); });
3360
+ var holeMatrixs = groups.map(this.createHoleMatrix);
3361
+ var holesGroups = holeMatrixs.map(function (m) { return m && _this.findAllGroupsInMatrix(m); });
3362
+ var holesPaths = holesGroups.map(function (hg, index) { return hg && hg.map(function (g) { return _this
3363
+ .traceGroup(holeMatrixs[index], g); }).filter(function (r) { return r.length > MIN_POINTS_IN_VALID_POLYGON; }); });
3364
+ return groups.map(function (g, index) {
3365
+ var res = paths[index];
3366
+ if (holesGroups[index] && holesGroups[index].length) {
3367
+ res.holes = holesPaths[index];
3368
+ }
3369
+ return res;
3370
+ });
3371
+ };
3372
+ TraceMatrix.prototype.reverseMatrix = function (m) {
3373
+ return TraceMatrix.createMatrix(this.size, function (p) { return getByPosition(m, p) === exports.TraceMatrixValues.f ? exports.TraceMatrixValues.t : exports.TraceMatrixValues.f; });
3374
+ };
3375
+ TraceMatrix.prototype.findMarked = function (m, init) {
3376
+ var s = this.size;
3377
+ var ini = false;
3378
+ for (var i = 0; i < s.w; i++) {
3379
+ for (var j = 0; j < s.h; j++) {
3380
+ if (!ini && init) {
3381
+ i = init.x;
3382
+ j = init.y;
3383
+ ini = true;
3384
+ continue;
3385
+ }
3386
+ if (getByPosition(m, new DPoint(i, j)) === exports.TraceMatrixValues.t) {
3387
+ return new DPoint(i, j);
3388
+ }
3389
+ }
3390
+ }
3391
+ return null;
3392
+ };
3393
+ TraceMatrix.prototype.totalCountInMatrix = function (m) {
3394
+ var res = 0;
3395
+ var s = this.size;
3396
+ for (var i = 0; i < s.w; i++) {
3397
+ for (var j = 0; j < s.h; j++) {
3398
+ if (getByPosition(m, new DPoint(i, j))) {
3399
+ res++;
3400
+ }
3401
+ }
3402
+ }
3403
+ return res;
3404
+ };
3405
+ TraceMatrix.createMatrix = function (size, f) {
3406
+ if (f === void 0) { f = function () { return exports.TraceMatrixValues.f; }; }
3407
+ return createArray(size.h)
3408
+ .map(function (v, i) { return createArray(size.w).map(function (v2, j) { return f(new DPoint(j, i)); }); });
3409
+ };
3410
+ return TraceMatrix;
3411
+ }());
3412
+
3413
+ var __read = (undefined && undefined.__read) || function (o, n) {
3414
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
3415
+ if (!m) return o;
3416
+ var i = m.call(o), r, ar = [], e;
3417
+ try {
3418
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
3419
+ }
3420
+ catch (error) { e = { error: error }; }
3421
+ finally {
3422
+ try {
3423
+ if (r && !r.done && (m = i["return"])) m.call(i);
3424
+ }
3425
+ finally { if (e) throw e.error; }
3426
+ }
3427
+ return ar;
3428
+ };
3429
+ var DPlane = (function () {
3430
+ function DPlane(a, b, c, d, p1, p2, p3) {
3431
+ if (p1 === void 0) { p1 = DPoint.zero(); }
3432
+ if (p2 === void 0) { p2 = DPoint.zero(); }
3433
+ if (p3 === void 0) { p3 = DPoint.zero(); }
3434
+ this.a = a;
3435
+ this.b = b;
3436
+ this.c = c;
3437
+ this.d = d;
3438
+ this.p1 = p1;
3439
+ this.p2 = p2;
3440
+ this.p3 = p3;
3441
+ }
3442
+ DPlane.find = function (p1, p2, p3) {
3443
+ if (p1.x === p2.x && p2.x === p3.x) {
3444
+ return new DPlane(1, 0, 0, -p1.x, p1, p2, p3);
3445
+ }
3446
+ if (p1.y === p2.y && p2.y === p3.y) {
3447
+ return new DPlane(0, 1, 0, -p1.y, p1, p2, p3);
3448
+ }
3449
+ if (p1.z === p2.z && p2.z === p3.z) {
3450
+ return new DPlane(0, 0, 1, -p1.z, p1, p2, p3);
3451
+ }
3452
+ var d = 1;
3453
+ var _a = __read(gaussianElimination([
3454
+ [p1.x, p1.y, p1.z, -d],
3455
+ [p2.x, p2.y, p2.z, -d],
3456
+ [p3.x, p3.y, p3.z, -d]
3457
+ ]), 3), a = _a[0], b = _a[1], c = _a[2];
3458
+ return new DPlane(a, b, c, d, p1, p2, p3);
3459
+ };
3460
+ DPlane.prototype.x = function (p) {
3461
+ var _this = this;
3462
+ if (p instanceof DPoint) {
3463
+ var _a = this, a = _a.a, b = _a.b, c = _a.c, d = _a.d;
3464
+ var y = p.y, z = p.z;
3465
+ p.x = -(b * y + c * z + d) / a;
3466
+ return p;
3467
+ }
3468
+ return p.map(function (t) { return _this.x(t); });
3469
+ };
3470
+ DPlane.prototype.y = function (p) {
3471
+ var _this = this;
3472
+ if (p instanceof DPoint) {
3473
+ var _a = this, a = _a.a, b = _a.b, c = _a.c, d = _a.d;
3474
+ var x = p.x, z = p.z;
3475
+ p.y = -(a * x + c * z + d) / b;
3476
+ return p;
3477
+ }
3478
+ return p.map(function (t) { return _this.y(t); });
3479
+ };
3480
+ DPlane.prototype.z = function (p) {
3481
+ var _this = this;
3482
+ if (p instanceof DPoint) {
3483
+ var _a = this, a = _a.a, b = _a.b, c = _a.c, d = _a.d;
3484
+ var x = p.x, y = p.y;
3485
+ p.z = -(a * x + b * y + d) / c;
3486
+ return p;
3487
+ }
3488
+ return p.map(function (t) { return _this.z(t); });
3489
+ };
3490
+ DPlane.prototype.clone = function () {
3491
+ var _a = this, a = _a.a, b = _a.b, c = _a.c, d = _a.d, p1 = _a.p1, p2 = _a.p2, p3 = _a.p3;
3492
+ return new DPlane(a, b, c, d, p1, p2, p3);
3493
+ };
3494
+ DPlane.prototype.distance = function (p) {
3495
+ if (p instanceof DPoint) {
3496
+ var x = p.x, y = p.y, z = p.z;
3497
+ var _a = this, a_1 = _a.a, b_1 = _a.b, c_1 = _a.c, d_1 = _a.d;
3498
+ return Math.abs(a_1 * x + b_1 * y + c_1 * z + d_1) / Math.sqrt(a_1 * a_1 + b_1 * b_1 + c_1 * c_1);
3499
+ }
3500
+ var _b = p, a = _b.a, b = _b.b, c = _b.c, d = _b.d;
3501
+ var r = this.d;
3502
+ return Math.abs(d - r) / Math.sqrt(a * a + b * b + c * c);
3503
+ };
3504
+ DPlane.prototype.equal = function (p) {
3505
+ var a = p.a, b = p.b, c = p.c, d = p.d;
3506
+ var _a = this, q = _a.a, w = _a.b, e = _a.c, r = _a.d;
3507
+ return DNumbers.like(a, q) &&
3508
+ DNumbers.like(b, w) &&
3509
+ DNumbers.like(c, e) &&
3510
+ DNumbers.like(d, r);
3511
+ };
3512
+ DPlane.prototype.same = function (p) {
3513
+ var a = p.a, b = p.b, c = p.c, d = p.d;
3514
+ var _a = this, q = _a.a, w = _a.b, e = _a.c, r = _a.d;
3515
+ var t = a / q;
3516
+ var y = b / w;
3517
+ var u = c / e;
3518
+ var i = d / r;
3519
+ return DNumbers.like(t, y) &&
3520
+ DNumbers.like(t, u) &&
3521
+ DNumbers.like(t, c) &&
3522
+ DNumbers.like(t, i);
3523
+ };
3524
+ DPlane.prototype.parallel = function (p) {
3525
+ var a = p.a, b = p.b, c = p.c, d = p.d;
3526
+ var _a = this, q = _a.a, w = _a.b, e = _a.c, r = _a.d;
3527
+ var t = a / q;
3528
+ var y = b / w;
3529
+ var u = c / e;
3530
+ var i = d / r;
3531
+ return DNumbers.like(t, y) &&
3532
+ DNumbers.like(t, u) &&
3533
+ DNumbers.like(t, c) &&
3534
+ !DNumbers.like(t, i);
3535
+ };
3536
+ return DPlane;
3537
+ }());
3538
+
3539
+ var DGeo = {
3540
+ DEBUG: false
3541
+ };
3542
+
3543
+ exports.DCircle = DCircle;
3544
+ exports.DEGREE_TO_PI = DEGREE_TO_PI;
3545
+ exports.DGeo = DGeo;
3546
+ exports.DLine = DLine;
3547
+ exports.DNumbers = DNumbers;
3548
+ exports.DOUBLE_PI_IN_DEGREE = DOUBLE_PI_IN_DEGREE;
3549
+ exports.DPlane = DPlane;
3550
+ exports.DPoint = DPoint;
3551
+ exports.DPolygon = DPolygon;
3552
+ exports.DPolygonLoop = DPolygonLoop;
3553
+ exports.EARTH_RADIUS_IN_METERS = EARTH_RADIUS_IN_METERS;
3554
+ exports.FastSearch = FastSearch;
3555
+ exports.HALF_PI_IN_DEGREE = HALF_PI_IN_DEGREE;
3556
+ exports.MIN_POINTS_IN_VALID_POLYGON = MIN_POINTS_IN_VALID_POLYGON;
3557
+ exports.PI_IN_DEGREE = PI_IN_DEGREE;
3558
+ exports.PI_TO_DEGREE = PI_TO_DEGREE;
3559
+ exports.TraceMatrix = TraceMatrix;
3560
+ exports.createArray = createArray;
3561
+ exports.createCanvas = createCanvas;
3562
+ exports.createMatrix = createMatrix;
3563
+ exports.gaussianElimination = gaussianElimination;
3564
+ exports.isDefAndNotNull = isDefAndNotNull;
3565
+
3566
+ Object.defineProperty(exports, '__esModule', { value: true });
3567
+
3568
+ }));
3569
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGdlb3V0aWxzLmpzIiwic291cmNlcyI6WyIuLi9lc20vdXRpbHMuanMiLCIuLi9lc20vRE51bWJlcnMuanMiLCIuLi9lc20vRExpbmUuanMiLCIuLi9lc20vRFBvbHlnb25Mb29wLmpzIiwiLi4vZXNtL0RQb2x5Z29uLmpzIiwiLi4vZXNtL0RQb2ludC5qcyIsIi4uL2VzbS9EQ2lyY2xlLmpzIiwiLi4vZXNtL0Zhc3RTZWFyY2guanMiLCIuLi9lc20vVHJhY2VNYXRyaXguanMiLCIuLi9lc20vRFBsYW5lLmpzIiwiLi4vZXNtL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBfX3JlYWQgPSAodGhpcyAmJiB0aGlzLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gICAgaWYgKCFtKSByZXR1cm4gbztcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIGFyO1xufTtcbnZhciBfX3NwcmVhZEFycmF5ID0gKHRoaXMgJiYgdGhpcy5fX3NwcmVhZEFycmF5KSB8fCBmdW5jdGlvbiAodG8sIGZyb20sIHBhY2spIHtcbiAgICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XG4gICAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xuICAgICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufTtcbmltcG9ydCB7IERHZW8gfSBmcm9tICcuL2luZGV4JztcbmltcG9ydCB7IERQb2ludCB9IGZyb20gJy4vRFBvaW50JztcbmV4cG9ydCB2YXIgd2FybiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgaWYgKERHZW8uREVCVUcpIHtcbiAgICAgICAgY29uc29sZS53YXJuLmFwcGx5KGNvbnNvbGUsIF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChhcmdzKSwgZmFsc2UpKTtcbiAgICB9XG59O1xuZXhwb3J0IHZhciBpc0RlZkFuZE5vdE51bGwgPSBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYSAhPSB1bmRlZmluZWQ7IH07XG52YXIgaG9vayA9IGZ1bmN0aW9uIChzY29wZSkgeyByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gc2NvcGU7IH07IH07XG52YXIgc2hvdWxkQmVJbnQgPSBmdW5jdGlvbiAoc2NvcGUsIGZ1bmNOYW1lLCBhcmdOYW1lKSB7IHJldHVybiBmdW5jdGlvbiAocCkge1xuICAgIGlmICghcC5jbG9uZSgpLnJvdW5kKClcbiAgICAgICAgLmVxdWFsKHApKSB7XG4gICAgICAgIHdhcm4oXCJcXFwiXCIgKyBmdW5jTmFtZSArIFwiXFxcIiAtPiBcXFwiXCIgKyBhcmdOYW1lICsgXCJcXFwiIHNob3VsZCBiZSBJbnQhXCIpO1xuICAgIH1cbiAgICByZXR1cm4gc2NvcGU7XG59OyB9O1xudmFyIHNob3VsZEJlVUludCA9IGZ1bmN0aW9uIChzY29wZSwgZnVuY05hbWUsIGFyZ05hbWUpIHsgcmV0dXJuIGZ1bmN0aW9uIChwKSB7XG4gICAgaWYgKCFwLmNsb25lKCkucm91bmQoKVxuICAgICAgICAuZXF1YWwocCkgfHwgIXAuZ3RPckVxdWFsKERQb2ludC56ZXJvKCkpKSB7XG4gICAgICAgIHdhcm4oXCJcXFwiXCIgKyBmdW5jTmFtZSArIFwiXFxcIiAtPiBcXFwiXCIgKyBhcmdOYW1lICsgXCJcXFwiIHNob3VsZCBiZSBVSW50IVwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHNjb3BlO1xufTsgfTtcbnZhciBzaG91bGRCZURlZ3JlZSA9IGZ1bmN0aW9uIChzY29wZSwgZnVuY05hbWUsIGFyZ05hbWUpIHsgcmV0dXJuIGZ1bmN0aW9uIChwKSB7XG4gICAgaWYgKCFwLmxpa2VXb3JsZEdlb2RldGljU3lzdGVtKSB7XG4gICAgICAgIHdhcm4oXCJcXFwiXCIgKyBmdW5jTmFtZSArIFwiXFxcIiAtPiBcXFwiXCIgKyBhcmdOYW1lICsgXCJcXFwiIHNob3VsZCBiZSBkZWdyZWUhXCIpO1xuICAgIH1cbiAgICByZXR1cm4gc2NvcGU7XG59OyB9O1xudmFyIHNob3VsZEJlUmFkaWFucyA9IGZ1bmN0aW9uIChzY29wZSwgZnVuY05hbWUsIGFyZ05hbWUpIHsgcmV0dXJuIGZ1bmN0aW9uIChwKSB7XG4gICAgaWYgKCFwLmxpa2VSYWRpYW5zKSB7XG4gICAgICAgIHdhcm4oXCJcXFwiXCIgKyBmdW5jTmFtZSArIFwiXFxcIiAtPiBcXFwiXCIgKyBhcmdOYW1lICsgXCJcXFwiIHNob3VsZCBiZSByYWRpYW5zIVwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHNjb3BlO1xufTsgfTtcbnZhciBzaG91bGRFeGlzdCA9IGZ1bmN0aW9uIChzY29wZSwgZnVuY05hbWUsIGFyZ05hbWUpIHsgcmV0dXJuIGZ1bmN0aW9uIChwKSB7XG4gICAgaWYgKCFpc0RlZkFuZE5vdE51bGwocCkpIHtcbiAgICAgICAgd2FybihcIlxcXCJcIiArIGZ1bmNOYW1lICsgXCJcXFwiIC0+IFxcXCJcIiArIGFyZ05hbWUgKyBcIlxcXCIgc2hvdWxkIGV4aXN0IVwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHNjb3BlO1xufTsgfTtcbnZhciBzaG91bGRCZU1ldGVycyA9IGZ1bmN0aW9uIChzY29wZSwgZnVuY05hbWUsIGFyZ05hbWUpIHsgcmV0dXJuIGZ1bmN0aW9uIChwKSB7XG4gICAgaWYgKCFwLmxpa2VQc2V1ZG9NZXJjYXRvcikge1xuICAgICAgICB3YXJuKFwiXFxcIlwiICsgZnVuY05hbWUgKyBcIlxcXCIgLT4gXFxcIlwiICsgYXJnTmFtZSArIFwiXFxcIiBzaG91bGQgYmUgbWV0ZXJzIVwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHNjb3BlO1xufTsgfTtcbmV4cG9ydCB2YXIgY2hlY2tGdW5jdGlvbiA9IGZ1bmN0aW9uIChmdW5jTmFtZSkgeyByZXR1cm4gKHtcbiAgICBjaGVja0FyZ3VtZW50OiBmdW5jdGlvbiAoYXJnTmFtZSkge1xuICAgICAgICBpZiAoIURHZW8uREVCVUcpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgc2hvdWxkQmVEZWdyZWU6IGhvb2sodGhpcyksXG4gICAgICAgICAgICAgICAgc2hvdWxkQmVNZXRlcnM6IGhvb2sodGhpcyksXG4gICAgICAgICAgICAgICAgc2hvdWxkQmVJbnQ6IGhvb2sodGhpcyksXG4gICAgICAgICAgICAgICAgc2hvdWxkQmVVSW50OiBob29rKHRoaXMpLFxuICAgICAgICAgICAgICAgIHNob3VsZEJlUmFkaWFuczogaG9vayh0aGlzKSxcbiAgICAgICAgICAgICAgICBzaG91bGRFeGlzdDogaG9vayh0aGlzKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2hvdWxkQmVEZWdyZWU6IHNob3VsZEJlRGVncmVlKHRoaXMsIGZ1bmNOYW1lLCBhcmdOYW1lKSxcbiAgICAgICAgICAgIHNob3VsZEJlTWV0ZXJzOiBzaG91bGRCZU1ldGVycyh0aGlzLCBmdW5jTmFtZSwgYXJnTmFtZSksXG4gICAgICAgICAgICBzaG91bGRCZUludDogc2hvdWxkQmVJbnQodGhpcywgZnVuY05hbWUsIGFyZ05hbWUpLFxuICAgICAgICAgICAgc2hvdWxkQmVVSW50OiBzaG91bGRCZVVJbnQodGhpcywgZnVuY05hbWUsIGFyZ05hbWUpLFxuICAgICAgICAgICAgc2hvdWxkQmVSYWRpYW5zOiBzaG91bGRCZVJhZGlhbnModGhpcywgZnVuY05hbWUsIGFyZ05hbWUpLFxuICAgICAgICAgICAgc2hvdWxkRXhpc3Q6IHNob3VsZEV4aXN0KHRoaXMsIGZ1bmNOYW1lLCBhcmdOYW1lKVxuICAgICAgICB9O1xuICAgIH1cbn0pOyB9O1xuZXhwb3J0IHZhciBjcmVhdGVBcnJheSA9IGZ1bmN0aW9uICh2LCBmaWxsU3ltYm9sKSB7XG4gICAgaWYgKGZpbGxTeW1ib2wgPT09IHZvaWQgMCkgeyBmaWxsU3ltYm9sID0gMDsgfVxuICAgIHJldHVybiBuZXcgQXJyYXkodikuZmlsbChmaWxsU3ltYm9sKTtcbn07XG5leHBvcnQgdmFyIGNyZWF0ZU1hdHJpeCA9IGZ1bmN0aW9uIChfYSwgZmlsbFN5bWJvbCkge1xuICAgIHZhciBoID0gX2EuaCwgdyA9IF9hLnc7XG4gICAgaWYgKGZpbGxTeW1ib2wgPT09IHZvaWQgMCkgeyBmaWxsU3ltYm9sID0gMDsgfVxuICAgIHJldHVybiBjcmVhdGVBcnJheShoKVxuICAgICAgICAubWFwKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNyZWF0ZUFycmF5KHcsIGZpbGxTeW1ib2wpOyB9KTtcbn07XG5leHBvcnQgdmFyIGdhdXNzaWFuRWxpbWluYXRpb24gPSBmdW5jdGlvbiAobWF0cml4KSB7XG4gICAgdmFyIG4gPSBtYXRyaXgubGVuZ3RoO1xuICAgIHZhciBtYXRyaXhDbG9uZSA9IGNyZWF0ZU1hdHJpeChuZXcgRFBvaW50KG4gKyAxLCBuKSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBuICsgMTsgaisrKSB7XG4gICAgICAgICAgICBtYXRyaXhbaV1bal0gPSBtYXRyaXhbaV1bal0gPT09IDAgPyBnYXVzc2lhbkVsaW1pbmF0aW9uLk1JTiA6IG1hdHJpeFtpXVtqXTtcbiAgICAgICAgICAgIG1hdHJpeENsb25lW2ldW2pdID0gbWF0cml4W2ldW2pdO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvciAodmFyIGsgPSAwOyBrIDwgbjsgaysrKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbiArIDE7IGkrKykge1xuICAgICAgICAgICAgbWF0cml4Q2xvbmVba11baV0gLz0gbWF0cml4W2tdW2tdO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGkgPSBrICsgMTsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgdmFyIEsgPSBtYXRyaXhDbG9uZVtpXVtrXSAvIG1hdHJpeENsb25lW2tdW2tdO1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBuICsgMTsgaisrKSB7XG4gICAgICAgICAgICAgICAgbWF0cml4Q2xvbmVbaV1bal0gLT0gbWF0cml4Q2xvbmVba11bal0gKiBLO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG4gKyAxOyBqKyspIHtcbiAgICAgICAgICAgICAgICBtYXRyaXhbaV1bal0gPSBtYXRyaXhDbG9uZVtpXVtqXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBmb3IgKHZhciBrID0gbiAtIDE7IGsgPiAtMTsgay0tKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSBuOyBpID4gLTE7IGktLSkge1xuICAgICAgICAgICAgbWF0cml4Q2xvbmVba11baV0gLz0gbWF0cml4W2tdW2tdO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGkgPSBrIC0gMTsgaSA+IC0xOyBpLS0pIHtcbiAgICAgICAgICAgIHZhciBLID0gbWF0cml4Q2xvbmVbaV1ba10gLyBtYXRyaXhDbG9uZVtrXVtrXTtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSBuOyBqID4gLTE7IGotLSkge1xuICAgICAgICAgICAgICAgIG1hdHJpeENsb25lW2ldW2pdIC09IG1hdHJpeENsb25lW2tdW2pdICogSztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgYW5zd2VyID0gY3JlYXRlQXJyYXkobik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgYW5zd2VyW2ldID0gbWF0cml4Q2xvbmVbaV1bbl07XG4gICAgfVxuICAgIHJldHVybiBhbnN3ZXI7XG59O1xuZ2F1c3NpYW5FbGltaW5hdGlvbi5NSU4gPSAxZS0xMDtcbmV4cG9ydCB2YXIgY3JlYXRlQ2FudmFzID0gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICB2YXIgX2E7XG4gICAgdmFyIHcgPSAwO1xuICAgIHZhciBoID0gMDtcbiAgICB2YXIgb2Zmc2NyZWVuID0gZmFsc2U7XG4gICAgaWYgKGEgaW5zdGFuY2VvZiBEUG9pbnQpIHtcbiAgICAgICAgdmFyIHggPSBhLngsIHkgPSBhLnk7XG4gICAgICAgIHcgPSB4O1xuICAgICAgICBoID0geTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHcgPSBhO1xuICAgICAgICBoID0gYTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBiID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgb2Zmc2NyZWVuID0gYjtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGIgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGggPSBiO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGMgPT09ICdib29sZWFuJykge1xuICAgICAgICBvZmZzY3JlZW4gPSBjO1xuICAgIH1cbiAgICB2YXIgY2FudmFzID0gb2Zmc2NyZWVuID8gbmV3IE9mZnNjcmVlbkNhbnZhcyh3LCBoKSA6ICgoX2EgPSBjcmVhdGVDYW52YXMuZG9jdW1lbnQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGRvY3VtZW50KS5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICBpZiAoIW9mZnNjcmVlbikge1xuICAgICAgICBjYW52YXMud2lkdGggPSB3O1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaDtcbiAgICB9XG4gICAgcmV0dXJuIFtjYW52YXMsIGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpXTtcbn07XG4iLCJpbXBvcnQgeyBERUdSRUVfVE9fUEksIERPVUJMRV9QSV9JTl9ERUdSRUUsIFBJX0lOX0RFR1JFRSwgUElfVE9fREVHUkVFIH0gZnJvbSAnLi9EUG9pbnQnO1xudmFyIGRlbHRhID0gMC4wMDE7XG52YXIgRE51bWJlcnMgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEROdW1iZXJzKCkge1xuICAgIH1cbiAgICBETnVtYmVycy5saWtlID0gZnVuY3Rpb24gKHYsIHMsIGQpIHtcbiAgICAgICAgaWYgKGQgPT09IHZvaWQgMCkgeyBkID0gZGVsdGE7IH1cbiAgICAgICAgcmV0dXJuIE1hdGguYWJzKHYgLSBzKSA8IGQ7XG4gICAgfTtcbiAgICBETnVtYmVycy5saWtlWmVybyA9IGZ1bmN0aW9uICh2KSB7XG4gICAgICAgIHJldHVybiBETnVtYmVycy5saWtlKHYsIDApO1xuICAgIH07XG4gICAgRE51bWJlcnMubGlrZTJQSSA9IGZ1bmN0aW9uICh2KSB7XG4gICAgICAgIHJldHVybiBETnVtYmVycy5saWtlKEROdW1iZXJzLnJhZDJEZWcodiksIERPVUJMRV9QSV9JTl9ERUdSRUUpO1xuICAgIH07XG4gICAgRE51bWJlcnMubGlrZVBJID0gZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgcmV0dXJuIEROdW1iZXJzLmxpa2UoRE51bWJlcnMucmFkMkRlZyh2KSwgUElfSU5fREVHUkVFKTtcbiAgICB9O1xuICAgIEROdW1iZXJzLnJhZDJEZWcgPSBmdW5jdGlvbiAodikge1xuICAgICAgICByZXR1cm4gdiAqIERFR1JFRV9UT19QSTtcbiAgICB9O1xuICAgIEROdW1iZXJzLmRlZzJSYWQgPSBmdW5jdGlvbiAodikge1xuICAgICAgICByZXR1cm4gdiAqIFBJX1RPX0RFR1JFRTtcbiAgICB9O1xuICAgIHJldHVybiBETnVtYmVycztcbn0oKSk7XG5leHBvcnQgeyBETnVtYmVycyB9O1xuIiwiaW1wb3J0IHsgRFBvaW50IH0gZnJvbSAnLi9EUG9pbnQnO1xuaW1wb3J0IHsgY2hlY2tGdW5jdGlvbiB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgRE51bWJlcnMgfSBmcm9tICcuL0ROdW1iZXJzJztcbnZhciBETGluZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRExpbmUoYSwgYiwgYywgYmVnaW4sIGVuZCkge1xuICAgICAgICBpZiAoYmVnaW4gPT09IHZvaWQgMCkgeyBiZWdpbiA9IERQb2ludC56ZXJvKCk7IH1cbiAgICAgICAgaWYgKGVuZCA9PT0gdm9pZCAwKSB7IGVuZCA9IERQb2ludC56ZXJvKCk7IH1cbiAgICAgICAgdGhpcy5hID0gYTtcbiAgICAgICAgdGhpcy5iID0gYjtcbiAgICAgICAgdGhpcy5jID0gYztcbiAgICAgICAgdGhpcy5iZWdpbiA9IGJlZ2luO1xuICAgICAgICB0aGlzLmVuZCA9IGVuZDtcbiAgICB9XG4gICAgRExpbmUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbmV3IERMaW5lKHRoaXMuYSwgdGhpcy5iLCB0aGlzLmMsIHRoaXMuYmVnaW4uY2xvbmUoKSwgdGhpcy5lbmQuY2xvbmUoKSk7XG4gICAgfTtcbiAgICBETGluZS5wcm90b3R5cGUuZmluZFBlcnBlbmRpY3VsYXIgPSBmdW5jdGlvbiAocCkge1xuICAgICAgICBjaGVja0Z1bmN0aW9uKCdmaW5kUGVycGVuZGljdWxhcicpXG4gICAgICAgICAgICAuY2hlY2tBcmd1bWVudCgndGhpcy5iZWdpbicpXG4gICAgICAgICAgICAuc2hvdWxkQmVNZXRlcnModGhpcy5iZWdpbilcbiAgICAgICAgICAgIC5jaGVja0FyZ3VtZW50KCd0aGlzLmVuZCcpXG4gICAgICAgICAgICAuc2hvdWxkQmVNZXRlcnModGhpcy5lbmQpXG4gICAgICAgICAgICAuY2hlY2tBcmd1bWVudCgncCcpXG4gICAgICAgICAgICAuc2hvdWxkQmVNZXRlcnMocCk7XG4gICAgICAgIHJldHVybiBuZXcgRExpbmUoLXRoaXMuYiwgdGhpcy5hLCB0aGlzLmIgKiBwLnggLSB0aGlzLmEgKiBwLnkpO1xuICAgIH07XG4gICAgRExpbmUucHJvdG90eXBlLnBlcnBlbmRpY3VsYXJEaXN0YW5jZSA9IGZ1bmN0aW9uIChwKSB7XG4gICAgICAgIGNoZWNrRnVuY3Rpb24oJ3BlcnBlbmRpY3VsYXJEaXN0YW5jZScpXG4gICAgICAgICAgICAuY2hlY2tBcmd1bWVudCgndGhpcy5iZWdpbicpXG4gICAgICAgICAgICAuc2hvdWxkQmVNZXRlcnModGhpcy5iZWdpbilcbiAgICAgICAgICAgIC5jaGVja0FyZ3VtZW50KCd0aGlzLmVuZCcpXG4gICAgICAgICAgICAuc2hvdWxkQmVNZXRlcnModGhpcy5lbmQpXG4gICAgICAgICAgICAuY2hlY2tBcmd1bWVudCgncCcpXG4gICAgICAgICAgICAuc2hvdWxkQmVNZXRlcnMocCk7XG4gICAgICAgIHZhciBwZXJwZW5kaWN1bGFyTGluZSA9IHRoaXMuZmluZFBlcnBlbmRpY3VsYXIocCk7XG4gICAgICAgIHZhciB0YXJnZXRQb2ludCA9IHBlcnBlbmRpY3VsYXJMaW5lLmZpbmRQb2ludCh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHRhcmdldFBvaW50LmRpc3RhbmNlKHApO1xuICAgIH07XG4gICAgRExpbmUucHJvdG90eXBlLmludGVyc2VjdGlvbiA9IGZ1bmN0aW9uIChsLCBkLCBpbmNsdWRlT25seSkge1xuICAgICAgICBpZiAoZCA9PT0gdm9pZCAwKSB7IGQgPSAwOyB9XG4gICAgICAgIGlmIChpbmNsdWRlT25seSA9PT0gdm9pZCAwKSB7IGluY2x1ZGVPbmx5ID0gZmFsc2U7IH1cbiAgICAgICAgdmFyIHAgPSB0aGlzLmZpbmRQb2ludChsKTtcbiAgICAgICAgaWYgKHApIHtcbiAgICAgICAgICAgIGlmIChpbmNsdWRlT25seSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmluc2lkZVJhbmdlKHAsIGQpICYmIGwuaW5zaWRlUmFuZ2UocCwgZCkgPyBwIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmluUmFuZ2UocCwgZCkgJiYgbC5pblJhbmdlKHAsIGQpID8gcCA6IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgICBETGluZS5wcm90b3R5cGUuaW50ZXJzZWN0aW9uV2l0aENpcmNsZSA9IGZ1bmN0aW9uIChjaXJjbGUpIHtcbiAgICAgICAgdmFyIGNlbnRlciA9IGNpcmNsZS5jZW50ZXIsIHIgPSBjaXJjbGUucjtcbiAgICAgICAgdmFyIHBlciA9IHRoaXMuZmluZFBlcnBlbmRpY3VsYXIoY2VudGVyKTtcbiAgICAgICAgdmFyIHQgPSB0aGlzLmZpbmRQb2ludChwZXIpO1xuICAgICAgICB2YXIgZGlzdGFuY2UgPSB0LmRpc3RhbmNlKGNlbnRlcik7XG4gICAgICAgIGlmICh0aGlzLmJlZ2luLmVxdWFsKGNlbnRlcikpIHtcbiAgICAgICAgICAgIGRpc3RhbmNlID0gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5lbmQuZXF1YWwoY2VudGVyKSkge1xuICAgICAgICAgICAgZGlzdGFuY2UgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkaXN0YW5jZSA8IHIpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IHRoaXMsIGEgPSBfYS5hLCBiID0gX2EuYiwgYyA9IF9hLmM7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1BhcmFsbGVsKSB7XG4gICAgICAgICAgICAgICAgdmFyIGN0ID0gY2VudGVyLmRpc3RhbmNlKHQpO1xuICAgICAgICAgICAgICAgIHZhciBtb3ZlID0gTWF0aC5zcXJ0KHIgKiByIC0gY3QgKiBjdCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNQYXJhbGxlbFkpIHtcbiAgICAgICAgICAgICAgICAgICAgdC54ID0gdGhpcy5iZWdpbi54O1xuICAgICAgICAgICAgICAgICAgICB2YXIgcjFfMSA9IHQuY2xvbmUoKS5tb3ZlKDAsIC1tb3ZlKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHIyXzEgPSB0LmNsb25lKCkubW92ZSgwLCBtb3ZlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtyMV8xLCByMl8xXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNQYXJhbGxlbFgpIHtcbiAgICAgICAgICAgICAgICAgICAgdC55ID0gdGhpcy5iZWdpbi55O1xuICAgICAgICAgICAgICAgICAgICB2YXIgcjFfMiA9IHQuY2xvbmUoKS5tb3ZlKG1vdmUsIDApO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcjJfMiA9IHQuY2xvbmUoKS5tb3ZlKC1tb3ZlLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtyMV8yLCByMl8yXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5iZWdpbi5saWtlKGNlbnRlcikpIHtcbiAgICAgICAgICAgICAgICB2YXIgcCA9IHRoaXMuYmVnaW4uY2xvbmUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gW3RoaXMubW92ZVBvaW50KHAsIHIpLCB0aGlzLm1vdmVQb2ludChwLCAtcildO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuZW5kLmxpa2UoY2VudGVyKSkge1xuICAgICAgICAgICAgICAgIHZhciBwID0gdGhpcy5lbmQuY2xvbmUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gW3RoaXMubW92ZVBvaW50KHAsIHIpLCB0aGlzLm1vdmVQb2ludChwLCAtcildO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHMgPSBhICogYSArIGIgKiBiO1xuICAgICAgICAgICAgdmFyIGQgPSByICogciAtIGMgKiBjIC8gcztcbiAgICAgICAgICAgIHZhciBtdWx0ID0gTWF0aC5zcXJ0KGQgLyBzKTtcbiAgICAgICAgICAgIHZhciByMSA9IHQuY2xvbmUoKS5tb3ZlKGIgKiBtdWx0LCAtYSAqIG11bHQpO1xuICAgICAgICAgICAgdmFyIHIyID0gdC5jbG9uZSgpLm1vdmUoLWIgKiBtdWx0LCBhICogbXVsdCk7XG4gICAgICAgICAgICByZXR1cm4gW3IxLCByMl07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRpc3RhbmNlID09PSByKSB7XG4gICAgICAgICAgICByZXR1cm4gdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICAgIERMaW5lLnByb3RvdHlwZS5pblJhbmdlID0gZnVuY3Rpb24gKHAsIGQpIHtcbiAgICAgICAgaWYgKGQgPT09IHZvaWQgMCkgeyBkID0gMDsgfVxuICAgICAgICB2YXIgX2EgPSB0aGlzLCBtaW5YID0gX2EubWluWCwgbWluWSA9IF9hLm1pblksIG1heFggPSBfYS5tYXhYLCBtYXhZID0gX2EubWF4WTtcbiAgICAgICAgdmFyIHggPSBwLngsIHkgPSBwLnk7XG4gICAgICAgIHZhciBpc0luWCA9IHggPj0gbWluWCAtIGQgJiYgeCA8PSBtYXhYICsgZDtcbiAgICAgICAgdmFyIGlzSW5ZID0geSA+PSBtaW5ZIC0gZCAmJiB5IDw9IG1heFkgKyBkO1xuICAgICAgICByZXR1cm4gaXNJblggJiYgaXNJblk7XG4gICAgfTtcbiAgICBETGluZS5wcm90b3R5cGUuaW5zaWRlUmFuZ2UgPSBmdW5jdGlvbiAocCwgZCkge1xuICAgICAgICBpZiAoZCA9PT0gdm9pZCAwKSB7IGQgPSAwOyB9XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIGJlZ2luID0gX2EuYmVnaW4sIGVuZCA9IF9hLmVuZDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5SYW5nZShwLCBkKSAmJiAhYmVnaW4ubGlrZShwLCAwLjAwMDAxKSAmJiAhZW5kLmxpa2UocCwgMC4wMDAwMSk7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRExpbmUucHJvdG90eXBlLCBcImNlbnRlclwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmVnaW5cbiAgICAgICAgICAgICAgICAuY2xvbmUoKVxuICAgICAgICAgICAgICAgIC5zZXRJZkxlc3NUaGFuKHRoaXMuZW5kKVxuICAgICAgICAgICAgICAgIC5tb3ZlKHRoaXMuZW5kXG4gICAgICAgICAgICAgICAgLmNsb25lKClcbiAgICAgICAgICAgICAgICAubW92ZSh0aGlzLmJlZ2luXG4gICAgICAgICAgICAgICAgLmNsb25lKClcbiAgICAgICAgICAgICAgICAubWludXMoKSlcbiAgICAgICAgICAgICAgICAuYWJzKClcbiAgICAgICAgICAgICAgICAubWludXMoKVxuICAgICAgICAgICAgICAgIC5kaXZpZGUoMikpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KERMaW5lLnByb3RvdHlwZSwgXCJtaW5YXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5taW4odGhpcy5iZWdpbi54LCB0aGlzLmVuZC54KTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShETGluZS5wcm90b3R5cGUsIFwibWluWVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgubWluKHRoaXMuYmVnaW4ueSwgdGhpcy5lbmQueSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRExpbmUucHJvdG90eXBlLCBcIm1heFhcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLm1heCh0aGlzLmJlZ2luLngsIHRoaXMuZW5kLngpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KERMaW5lLnByb3RvdHlwZSwgXCJtYXhZXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgodGhpcy5iZWdpbi55LCB0aGlzLmVuZC55KTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIERMaW5lLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFwiKFwiICsgdGhpcy5hICsgXCIsIFwiICsgdGhpcy5iICsgXCIsIFwiICsgdGhpcy5jICsgXCIpXCI7XG4gICAgfTtcbiAgICBETGluZS5wcm90b3R5cGUuZ2V0VmFsdWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBbdGhpcy5hLCB0aGlzLmIsIHRoaXMuY107XG4gICAgfTtcbiAgICBETGluZS5wcm90b3R5cGUueCA9IGZ1bmN0aW9uIChwKSB7XG4gICAgICAgIGlmICh0aGlzLmlzUGFyYWxsZWxZKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IERQb2ludCgtdGhpcy5jIC8gdGhpcy5hLCBwLnkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzUGFyYWxsZWxYKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IERQb2ludChwLngsIC10aGlzLmMgLyB0aGlzLmIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgRFBvaW50KC10aGlzLmIgLyB0aGlzLmEgKiBwLnkgLSB0aGlzLmMgLyB0aGlzLmEsIHAueSk7XG4gICAgfTtcbiAgICBETGluZS5wcm90b3R5cGUueSA9IGZ1bmN0aW9uIChwKSB7XG4gICAgICAgIGlmICh0aGlzLmlzUGFyYWxsZWxZKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IERQb2ludCgtdGhpcy5jIC8gdGhpcy5hLCBwLnkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzUGFyYWxsZWxYKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IERQb2ludChwLngsIC10aGlzLmMgLyB0aGlzLmIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgRFBvaW50KHAueCwgLXRoaXMuYSAvIHRoaXMuYiAqIHAueCAtIHRoaXMuYyAvIHRoaXMuYik7XG4gICAgfTtcbiAgICBETGluZS5wcm90b3R5cGUuZmluZFBvaW50ID0gZnVuY3Rpb24gKGwpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNQYXJhbGxlbFkgJiYgbC5pc1BhcmFsbGVsWSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNQYXJhbGxlbFggJiYgbC5pc1BhcmFsbGVsWCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNQYXJhbGxlbFggJiYgbC5pc1BhcmFsbGVsWSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBEUG9pbnQoLWwuYyAvIGwuYSwgLXRoaXMuYyAvIHRoaXMuYik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNQYXJhbGxlbFkgJiYgbC5pc1BhcmFsbGVsWCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBEUG9pbnQoLXRoaXMuYyAvIHRoaXMuYSwgLWwuYyAvIGwuYik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNQYXJhbGxlbFkpIHtcbiAgICAgICAgICAgIHZhciB4ID0gLXRoaXMuYyAvIHRoaXMuYTtcbiAgICAgICAgICAgIHJldHVybiBsLnkobmV3IERQb2ludCh4KSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNQYXJhbGxlbFgpIHtcbiAgICAgICAgICAgIHZhciB5ID0gLXRoaXMuYyAvIHRoaXMuYjtcbiAgICAgICAgICAgIHJldHVybiBsLngobmV3IERQb2ludCgwLCB5KSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGwuaXNQYXJhbGxlbFkpIHtcbiAgICAgICAgICAgIHZhciB4ID0gLWwuYyAvIGwuYTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnkobmV3IERQb2ludCh4KSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGwuaXNQYXJhbGxlbFgpIHtcbiAgICAgICAgICAgIHZhciB5ID0gLWwuYyAvIGwuYjtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLngobmV3IERQb2ludCgwLCB5KSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJlcyA9IHRoaXMueShuZXcgRFBvaW50KChsLmMgLyBsLmIgLSB0aGlzLmMgLyB0aGlzLmIpIC8gKHRoaXMuYSAvIHRoaXMuYiAtIGwuYSAvIGwuYikpKTtcbiAgICAgICAgaWYgKCFpc0Zpbml0ZShyZXMueCkgJiYgIWlzRmluaXRlKHJlcy55KSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShETGluZS5wcm90b3R5cGUsIFwiaXNQYXJhbGxlbFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNQYXJhbGxlbFggfHwgdGhpcy5pc1BhcmFsbGVsWTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShETGluZS5wcm90b3R5cGUsIFwiaXNQYXJhbGxlbFlcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyh0aGlzLmIpIDwgMC4wMDE7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRExpbmUucHJvdG90eXBlLCBcImlzUGFyYWxsZWxYXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5hYnModGhpcy5hKSA8IDAuMDAxO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KERMaW5lLnByb3RvdHlwZSwgXCJwb2ludHNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBbdGhpcy5iZWdpbiwgdGhpcy5lbmRdO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgRExpbmUucHJvdG90eXBlLmdldEZpID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBjaGVja0Z1bmN0aW9uKCdnZXRGaScpXG4gICAgICAgICAgICAuY2hlY2tBcmd1bWVudCgndGhpcy5iZWdpbicpXG4gICAgICAgICAgICAuc2hvdWxkQmVNZXRlcnModGhpcy5iZWdpbilcbiAgICAgICAgICAgIC5jaGVja0FyZ3VtZW50KCd0aGlzLmVuZCcpXG4gICAgICAgICAgICAuc2hvdWxkQmVNZXRlcnModGhpcy5lbmQpO1xuICAgICAgICB2YXIgX2EgPSB0aGlzLmVuZC5jbG9uZSgpLm1vdmUodGhpcy5iZWdpbi5jbG9uZSgpLm1pbnVzKCkpLCB4ID0gX2EueCwgeSA9IF9hLnk7XG4gICAgICAgIHZhciB2ID0gTWF0aC5hdGFuMih5LCB4KSAtIE1hdGguUEk7XG4gICAgICAgIGlmICh2ID4gMCkge1xuICAgICAgICAgICAgdiA9IE1hdGguUEkgLSB2O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoTWF0aC5QSSAtIHYpICUgKE1hdGguUEkgKiAyKTtcbiAgICB9O1xuICAgIERMaW5lLnByb3RvdHlwZS50b1dLVCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hID0gdGhpcywgX2IgPSBfYS5iZWdpbiwgeDEgPSBfYi54LCB5MSA9IF9iLnksIF9jID0gX2EuZW5kLCB4MiA9IF9jLngsIHkyID0gX2MueTtcbiAgICAgICAgcmV0dXJuIFwiTElORVNUUklORyAoXCIgKyB4MSArIFwiIFwiICsgeTEgKyBcIiwgXCIgKyB4MiArIFwiIFwiICsgeTIgKyBcIilcIjtcbiAgICB9O1xuICAgIERMaW5lLnByb3RvdHlwZS5tb3ZlUG9pbnQgPSBmdW5jdGlvbiAocCwgZCkge1xuICAgICAgICB2YXIgZmkgPSB0aGlzLmZpbmRGaShuZXcgRExpbmUoMSwgMCwgMCkpO1xuICAgICAgICB2YXIgdGQgPSB0aGlzLngobmV3IERQb2ludCgxLCAxKSkuZGlzdGFuY2UodGhpcy54KG5ldyBEUG9pbnQoMiwgMikpKSAvIDI7XG4gICAgICAgIHZhciBzaW5Db3MgPSBuZXcgRFBvaW50KE1hdGguc2luKGZpKSwgTWF0aC5jb3MoZmkpKTtcbiAgICAgICAgdmFyIGR0ID0gc2luQ29zLmNsb25lKCkuc2NhbGUodGQpO1xuICAgICAgICB2YXIgcDFUID0gcC5jbG9uZSgpLm1vdmUoZHQuY2xvbmUoKS5taW51cygpKTtcbiAgICAgICAgdmFyIHAyVCA9IHAuY2xvbmUoKS5tb3ZlKGR0KTtcbiAgICAgICAgaWYgKEROdW1iZXJzLmxpa2UodGhpcy55KHAxVCkueSwgcDFULnkpIHx8IEROdW1iZXJzLmxpa2UodGhpcy55KHAyVCkueSwgcDJULnkpKSB7XG4gICAgICAgICAgICByZXR1cm4gcC5jbG9uZSgpLm1vdmUoc2luQ29zLnNjYWxlKGQpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcC5jbG9uZSgpLm1vdmUoc2luQ29zLnNjYWxlKGQpLnNldFgoZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICB2YXIgeCA9IF9hLng7XG4gICAgICAgICAgICByZXR1cm4gLXg7XG4gICAgICAgIH0pKTtcbiAgICB9O1xuICAgIERMaW5lLnByb3RvdHlwZS5maW5kRmkgPSBmdW5jdGlvbiAoX2EsIGRlbHRhKSB7XG4gICAgICAgIHZhciBhID0gX2EuYSwgYiA9IF9hLmI7XG4gICAgICAgIGlmIChkZWx0YSA9PT0gdm9pZCAwKSB7IGRlbHRhID0gMS4wMDAxOyB9XG4gICAgICAgIHZhciBfYiA9IHRoaXMsIHEgPSBfYi5hLCB3ID0gX2IuYjtcbiAgICAgICAgdmFyIHZhbCA9IChxICogYSArIHcgKiBiKSAvIChNYXRoLnNxcnQocSAqIHEgKyB3ICogdykgKiBNYXRoLnNxcnQoYSAqIGEgKyBiICogYikpO1xuICAgICAgICBpZiAodmFsID4gMSAmJiB2YWwgPCBkZWx0YSkge1xuICAgICAgICAgICAgdmFsID0gMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2YWwgPCAtMSAmJiB2YWwgPiAtZGVsdGEpIHtcbiAgICAgICAgICAgIHZhbCA9IC0xO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBNYXRoLmFjb3ModmFsKTtcbiAgICB9O1xuICAgIERMaW5lLnByb3RvdHlwZS52ZWN0b3JQcm9kdWN0ID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgIHZhciBhID0gX2EuYSwgYiA9IF9hLmIsIGMgPSBfYS5jO1xuICAgICAgICB2YXIgX2IgPSB0aGlzLCBxID0gX2IuYSwgdyA9IF9iLmIsIGUgPSBfYi5jO1xuICAgICAgICByZXR1cm4gbmV3IERMaW5lKHcgKiBjIC0gZSAqIGIsIGUgKiBhIC0gcSAqIGMsIHEgKiBiIC0gdyAqIGEpO1xuICAgIH07XG4gICAgcmV0dXJuIERMaW5lO1xufSgpKTtcbmV4cG9ydCB7IERMaW5lIH07XG4iLCJ2YXIgTG9vcEZ1bmN0aW9ucztcbihmdW5jdGlvbiAoTG9vcEZ1bmN0aW9ucykge1xuICAgIExvb3BGdW5jdGlvbnNbTG9vcEZ1bmN0aW9uc1tcImdldFRpbGVGcm9tQ29vcmRzXCJdID0gMF0gPSBcImdldFRpbGVGcm9tQ29vcmRzXCI7XG4gICAgTG9vcEZ1bmN0aW9uc1tMb29wRnVuY3Rpb25zW1wiZ2V0Q29vcmRzRnJvbVRpbGVcIl0gPSAxXSA9IFwiZ2V0Q29vcmRzRnJvbVRpbGVcIjtcbiAgICBMb29wRnVuY3Rpb25zW0xvb3BGdW5jdGlvbnNbXCJoZWlnaHRcIl0gPSAyXSA9IFwiaGVpZ2h0XCI7XG4gICAgTG9vcEZ1bmN0aW9uc1tMb29wRnVuY3Rpb25zW1wic2V0WFwiXSA9IDNdID0gXCJzZXRYXCI7XG4gICAgTG9vcEZ1bmN0aW9uc1tMb29wRnVuY3Rpb25zW1wic2V0WVwiXSA9IDRdID0gXCJzZXRZXCI7XG4gICAgTG9vcEZ1bmN0aW9uc1tMb29wRnVuY3Rpb25zW1wic2V0WlwiXSA9IDVdID0gXCJzZXRaXCI7XG4gICAgTG9vcEZ1bmN0aW9uc1tMb29wRnVuY3Rpb25zW1wicm90YXRlXCJdID0gNl0gPSBcInJvdGF0ZVwiO1xuICAgIExvb3BGdW5jdGlvbnNbTG9vcEZ1bmN0aW9uc1tcInJvdGF0ZTNkWFwiXSA9IDddID0gXCJyb3RhdGUzZFhcIjtcbiAgICBMb29wRnVuY3Rpb25zW0xvb3BGdW5jdGlvbnNbXCJyb3RhdGUzZFlcIl0gPSA4XSA9IFwicm90YXRlM2RZXCI7XG4gICAgTG9vcEZ1bmN0aW9uc1tMb29wRnVuY3Rpb25zW1wicm90YXRlM2RaXCJdID0gOV0gPSBcInJvdGF0ZTNkWlwiO1xuICAgIExvb3BGdW5jdGlvbnNbTG9vcEZ1bmN0aW9uc1tcIm1vdmVcIl0gPSAxMF0gPSBcIm1vdmVcIjtcbiAgICBMb29wRnVuY3Rpb25zW0xvb3BGdW5jdGlvbnNbXCJyb3VuZFwiXSA9IDExXSA9IFwicm91bmRcIjtcbiAgICBMb29wRnVuY3Rpb25zW0xvb3BGdW5jdGlvbnNbXCJjZWlsXCJdID0gMTJdID0gXCJjZWlsXCI7XG4gICAgTG9vcEZ1bmN0aW9uc1tMb29wRnVuY3Rpb25zW1wiZmxvb3JcIl0gPSAxM10gPSBcImZsb29yXCI7XG4gICAgTG9vcEZ1bmN0aW9uc1tMb29wRnVuY3Rpb25zW1widG9GaXhlZFwiXSA9IDE0XSA9IFwidG9GaXhlZFwiO1xuICAgIExvb3BGdW5jdGlvbnNbTG9vcEZ1bmN0aW9uc1tcImFic1wiXSA9IDE1XSA9IFwiYWJzXCI7XG4gICAgTG9vcEZ1bmN0aW9uc1tMb29wRnVuY3Rpb25zW1wic2NhbGVcIl0gPSAxNl0gPSBcInNjYWxlXCI7XG4gICAgTG9vcEZ1bmN0aW9uc1tMb29wRnVuY3Rpb25zW1wiZGl2aWRlXCJdID0gMTddID0gXCJkaXZpZGVcIjtcbiAgICBMb29wRnVuY3Rpb25zW0xvb3BGdW5jdGlvbnNbXCJkZWdyZWVUb1JhZGlhbnNcIl0gPSAxOF0gPSBcImRlZ3JlZVRvUmFkaWFuc1wiO1xuICAgIExvb3BGdW5jdGlvbnNbTG9vcEZ1bmN0aW9uc1tcInJhZGlhbnNUb0RlZ3JlZXNcIl0gPSAxOV0gPSBcInJhZGlhbnNUb0RlZ3JlZXNcIjtcbiAgICBMb29wRnVuY3Rpb25zW0xvb3BGdW5jdGlvbnNbXCJyYWRpYW5zVG9NZXRlcnNcIl0gPSAyMF0gPSBcInJhZGlhbnNUb01ldGVyc1wiO1xuICAgIExvb3BGdW5jdGlvbnNbTG9vcEZ1bmN0aW9uc1tcIm1ldGVyc1RvUmFkaWFuc1wiXSA9IDIxXSA9IFwibWV0ZXJzVG9SYWRpYW5zXCI7XG4gICAgTG9vcEZ1bmN0aW9uc1tMb29wRnVuY3Rpb25zW1wiaGlwUG9pbnRcIl0gPSAyMl0gPSBcImhpcFBvaW50XCI7XG4gICAgTG9vcEZ1bmN0aW9uc1tMb29wRnVuY3Rpb25zW1wieFBvaW50XCJdID0gMjNdID0gXCJ4UG9pbnRcIjtcbiAgICBMb29wRnVuY3Rpb25zW0xvb3BGdW5jdGlvbnNbXCJ5UG9pbnRcIl0gPSAyNF0gPSBcInlQb2ludFwiO1xuICAgIExvb3BGdW5jdGlvbnNbTG9vcEZ1bmN0aW9uc1tcIndQb2ludFwiXSA9IDI1XSA9IFwid1BvaW50XCI7XG4gICAgTG9vcEZ1bmN0aW9uc1tMb29wRnVuY3Rpb25zW1wiaFBvaW50XCJdID0gMjZdID0gXCJoUG9pbnRcIjtcbiAgICBMb29wRnVuY3Rpb25zW0xvb3BGdW5jdGlvbnNbXCJzZXRJZkxlc3NUaGFuXCJdID0gMjddID0gXCJzZXRJZkxlc3NUaGFuXCI7XG4gICAgTG9vcEZ1bmN0aW9uc1tMb29wRnVuY3Rpb25zW1wibWludXNcIl0gPSAyOF0gPSBcIm1pbnVzXCI7XG4gICAgTG9vcEZ1bmN0aW9uc1tMb29wRnVuY3Rpb25zW1wiZGVncmVlVG9NZXRlcnNcIl0gPSAyOV0gPSBcImRlZ3JlZVRvTWV0ZXJzXCI7XG4gICAgTG9vcEZ1bmN0aW9uc1tMb29wRnVuY3Rpb25zW1wibWV0ZXJzVG9EZWdyZWVcIl0gPSAzMF0gPSBcIm1ldGVyc1RvRGVncmVlXCI7XG4gICAgTG9vcEZ1bmN0aW9uc1tMb29wRnVuY3Rpb25zW1wiZmxpcFZlcnRpY2FsbHlcIl0gPSAzMV0gPSBcImZsaXBWZXJ0aWNhbGx5XCI7XG59KShMb29wRnVuY3Rpb25zIHx8IChMb29wRnVuY3Rpb25zID0ge30pKTtcbnZhciBkZWNvZGVQb29sUmVjb3JkID0gZnVuY3Rpb24gKGEsIF9hKSB7XG4gICAgdmFyIGZ1bmN0aW9uTmFtZSA9IF9hLmZ1bmN0aW9uTmFtZSwgcG9pbnRBcmcgPSBfYS5wb2ludEFyZywgbnVtYmVyUG9pbnRBcmcgPSBfYS5udW1iZXJQb2ludEFyZywgbnVtYmVyQXJnID0gX2EubnVtYmVyQXJnLCBzZXR0ZXJBcmcgPSBfYS5zZXR0ZXJBcmc7XG4gICAgdmFyIHJlcyA9IGE7XG4gICAgc3dpdGNoIChmdW5jdGlvbk5hbWUpIHtcbiAgICAgICAgY2FzZSBMb29wRnVuY3Rpb25zLmdldFRpbGVGcm9tQ29vcmRzOlxuICAgICAgICAgICAgcmVzID0gZnVuY3Rpb24gKGspIHsgcmV0dXJuIGEoaylcbiAgICAgICAgICAgICAgICAuZ2V0VGlsZUZyb21Db29yZHMobnVtYmVyQXJnKTsgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIExvb3BGdW5jdGlvbnMuZ2V0Q29vcmRzRnJvbVRpbGU6XG4gICAgICAgICAgICByZXMgPSBmdW5jdGlvbiAoaykgeyByZXR1cm4gYShrKVxuICAgICAgICAgICAgICAgIC5nZXRDb29yZHNGcm9tVGlsZShudW1iZXJBcmcpOyB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgTG9vcEZ1bmN0aW9ucy5oZWlnaHQ6XG4gICAgICAgICAgICByZXMgPSBmdW5jdGlvbiAoaykgeyByZXR1cm4gYShrKVxuICAgICAgICAgICAgICAgIC5oZWlnaHQobnVtYmVyQXJnKTsgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIExvb3BGdW5jdGlvbnMuc2V0WDpcbiAgICAgICAgICAgIHJlcyA9IGZ1bmN0aW9uIChrKSB7IHJldHVybiBhKGspXG4gICAgICAgICAgICAgICAgLnNldFgoc2V0dGVyQXJnKTsgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIExvb3BGdW5jdGlvbnMuc2V0WTpcbiAgICAgICAgICAgIHJlcyA9IGZ1bmN0aW9uIChrKSB7IHJldHVybiBhKGspXG4gICAgICAgICAgICAgICAgLnNldFkoc2V0dGVyQXJnKTsgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIExvb3BGdW5jdGlvbnMuc2V0WjpcbiAgICAgICAgICAgIHJlcyA9IGZ1bmN0aW9uIChrKSB7IHJldHVybiBhKGspXG4gICAgICAgICAgICAgICAgLnNldFooc2V0dGVyQXJnKTsgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIExvb3BGdW5jdGlvbnMucm90YXRlOlxuICAgICAgICAgICAgcmVzID0gZnVuY3Rpb24gKGspIHsgcmV0dXJuIGEoaylcbiAgICAgICAgICAgICAgICAucm90YXRlKG51bWJlckFyZyk7IH07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBMb29wRnVuY3Rpb25zLnJvdGF0ZTNkWDpcbiAgICAgICAgICAgIHJlcyA9IGZ1bmN0aW9uIChrKSB7IHJldHVybiBhKGspXG4gICAgICAgICAgICAgICAgLnJvdGF0ZTNkWChudW1iZXJBcmcpOyB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgTG9vcEZ1bmN0aW9ucy5yb3RhdGUzZFk6XG4gICAgICAgICAgICByZXMgPSBmdW5jdGlvbiAoaykgeyByZXR1cm4gYShrKVxuICAgICAgICAgICAgICAgIC5yb3RhdGUzZFkobnVtYmVyQXJnKTsgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIExvb3BGdW5jdGlvbnMucm90YXRlM2RaOlxuICAgICAgICAgICAgcmVzID0gZnVuY3Rpb24gKGspIHsgcmV0dXJuIGEoaylcbiAgICAgICAgICAgICAgICAucm90YXRlM2RaKG51bWJlckFyZyk7IH07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBMb29wRnVuY3Rpb25zLm1vdmU6XG4gICAgICAgICAgICByZXMgPSBmdW5jdGlvbiAoaykgeyByZXR1cm4gYShrKVxuICAgICAgICAgICAgICAgIC5tb3ZlKG51bWJlclBvaW50QXJnLCBudW1iZXJBcmcpOyB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgTG9vcEZ1bmN0aW9ucy5yb3VuZDpcbiAgICAgICAgICAgIHJlcyA9IGZ1bmN0aW9uIChrKSB7IHJldHVybiBhKGspXG4gICAgICAgICAgICAgICAgLnJvdW5kKCk7IH07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBMb29wRnVuY3Rpb25zLmNlaWw6XG4gICAgICAgICAgICByZXMgPSBmdW5jdGlvbiAoaykgeyByZXR1cm4gYShrKVxuICAgICAgICAgICAgICAgIC5jZWlsKCk7IH07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBMb29wRnVuY3Rpb25zLmZsb29yOlxuICAgICAgICAgICAgcmVzID0gZnVuY3Rpb24gKGspIHsgcmV0dXJuIGEoaylcbiAgICAgICAgICAgICAgICAuZmxvb3IoKTsgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIExvb3BGdW5jdGlvbnMudG9GaXhlZDpcbiAgICAgICAgICAgIHJlcyA9IGZ1bmN0aW9uIChrKSB7IHJldHVybiBhKGspXG4gICAgICAgICAgICAgICAgLnRvRml4ZWQobnVtYmVyQXJnKTsgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIExvb3BGdW5jdGlvbnMuYWJzOlxuICAgICAgICAgICAgcmVzID0gZnVuY3Rpb24gKGspIHsgcmV0dXJuIGEoaylcbiAgICAgICAgICAgICAgICAuYWJzKCk7IH07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBMb29wRnVuY3Rpb25zLnNjYWxlOlxuICAgICAgICAgICAgcmVzID0gZnVuY3Rpb24gKGspIHsgcmV0dXJuIGEoaylcbiAgICAgICAgICAgICAgICAuc2NhbGUobnVtYmVyUG9pbnRBcmcsIG51bWJlckFyZyk7IH07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBMb29wRnVuY3Rpb25zLmRpdmlkZTpcbiAgICAgICAgICAgIHJlcyA9IGZ1bmN0aW9uIChrKSB7IHJldHVybiBhKGspXG4gICAgICAgICAgICAgICAgLmRpdmlkZShudW1iZXJQb2ludEFyZywgbnVtYmVyQXJnKTsgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIExvb3BGdW5jdGlvbnMuZGVncmVlVG9SYWRpYW5zOlxuICAgICAgICAgICAgcmVzID0gZnVuY3Rpb24gKGspIHsgcmV0dXJuIGEoaylcbiAgICAgICAgICAgICAgICAuZGVncmVlVG9SYWRpYW5zKCk7IH07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBMb29wRnVuY3Rpb25zLnJhZGlhbnNUb0RlZ3JlZXM6XG4gICAgICAgICAgICByZXMgPSBmdW5jdGlvbiAoaykgeyByZXR1cm4gYShrKVxuICAgICAgICAgICAgICAgIC5yYWRpYW5zVG9EZWdyZWVzKCk7IH07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBMb29wRnVuY3Rpb25zLnJhZGlhbnNUb01ldGVyczpcbiAgICAgICAgICAgIHJlcyA9IGZ1bmN0aW9uIChrKSB7IHJldHVybiBhKGspXG4gICAgICAgICAgICAgICAgLnJhZGlhbnNUb01ldGVycygpOyB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgTG9vcEZ1bmN0aW9ucy5tZXRlcnNUb1JhZGlhbnM6XG4gICAgICAgICAgICByZXMgPSBmdW5jdGlvbiAoaykgeyByZXR1cm4gYShrKVxuICAgICAgICAgICAgICAgIC5tZXRlcnNUb1JhZGlhbnMoKTsgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIExvb3BGdW5jdGlvbnMuaGlwUG9pbnQ6XG4gICAgICAgICAgICByZXMgPSBmdW5jdGlvbiAoaykgeyByZXR1cm4gYShrKVxuICAgICAgICAgICAgICAgIC5oaXBQb2ludDsgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIExvb3BGdW5jdGlvbnMueFBvaW50OlxuICAgICAgICAgICAgcmVzID0gZnVuY3Rpb24gKGspIHsgcmV0dXJuIGEoaylcbiAgICAgICAgICAgICAgICAueFBvaW50OyB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgTG9vcEZ1bmN0aW9ucy55UG9pbnQ6XG4gICAgICAgICAgICByZXMgPSBmdW5jdGlvbiAoaykgeyByZXR1cm4gYShrKVxuICAgICAgICAgICAgICAgIC55UG9pbnQ7IH07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBMb29wRnVuY3Rpb25zLndQb2ludDpcbiAgICAgICAgICAgIHJlcyA9IGZ1bmN0aW9uIChrKSB7IHJldHVybiBhKGspXG4gICAgICAgICAgICAgICAgLndQb2ludDsgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIExvb3BGdW5jdGlvbnMuaFBvaW50OlxuICAgICAgICAgICAgcmVzID0gZnVuY3Rpb24gKGspIHsgcmV0dXJuIGEoaylcbiAgICAgICAgICAgICAgICAuaFBvaW50OyB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgTG9vcEZ1bmN0aW9ucy5zZXRJZkxlc3NUaGFuOlxuICAgICAgICAgICAgcmVzID0gZnVuY3Rpb24gKGspIHsgcmV0dXJuIGEoaylcbiAgICAgICAgICAgICAgICAuc2V0SWZMZXNzVGhhbihwb2ludEFyZyk7IH07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBMb29wRnVuY3Rpb25zLm1pbnVzOlxuICAgICAgICAgICAgcmVzID0gZnVuY3Rpb24gKGspIHsgcmV0dXJuIGEoaylcbiAgICAgICAgICAgICAgICAubWludXMoKTsgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIExvb3BGdW5jdGlvbnMuZGVncmVlVG9NZXRlcnM6XG4gICAgICAgICAgICByZXMgPSBmdW5jdGlvbiAoaykgeyByZXR1cm4gYShrKVxuICAgICAgICAgICAgICAgIC5kZWdyZWVUb01ldGVycygpOyB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgTG9vcEZ1bmN0aW9ucy5tZXRlcnNUb0RlZ3JlZTpcbiAgICAgICAgICAgIHJlcyA9IGZ1bmN0aW9uIChrKSB7IHJldHVybiBhKGspXG4gICAgICAgICAgICAgICAgLm1ldGVyc1RvRGVncmVlKCk7IH07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBMb29wRnVuY3Rpb25zLmZsaXBWZXJ0aWNhbGx5OlxuICAgICAgICAgICAgcmVzID0gZnVuY3Rpb24gKGspIHsgcmV0dXJuIGEoaylcbiAgICAgICAgICAgICAgICAuZmxpcFZlcnRpY2FsbHkobnVtYmVyUG9pbnRBcmcpOyB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59O1xudmFyIERQb2x5Z29uTG9vcCA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRFBvbHlnb25Mb29wKHBhcmVudCkge1xuICAgICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgdGhpcy5wb29sID0gW107XG4gICAgfVxuICAgIERQb2x5Z29uTG9vcC5wcm90b3R5cGUuZ2V0TG9vcEZ1bmN0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wb29sLnJlZHVjZShkZWNvZGVQb29sUmVjb3JkLCBmdW5jdGlvbiAoaykgeyByZXR1cm4gazsgfSk7XG4gICAgfTtcbiAgICBEUG9seWdvbkxvb3AucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50Lm1hcCh0aGlzLmdldExvb3BGdW5jdGlvbigpKTtcbiAgICB9O1xuICAgIERQb2x5Z29uTG9vcC5wcm90b3R5cGUuZ2V0VGlsZUZyb21Db29yZHMgPSBmdW5jdGlvbiAoem9vbSkge1xuICAgICAgICB0aGlzLnBvb2wucHVzaCh7XG4gICAgICAgICAgICBmdW5jdGlvbk5hbWU6IExvb3BGdW5jdGlvbnMuZ2V0VGlsZUZyb21Db29yZHMsXG4gICAgICAgICAgICBudW1iZXJBcmc6IHpvb21cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgRFBvbHlnb25Mb29wLnByb3RvdHlwZS5nZXRDb29yZHNGcm9tVGlsZSA9IGZ1bmN0aW9uICh6b29tKSB7XG4gICAgICAgIHRoaXMucG9vbC5wdXNoKHtcbiAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogTG9vcEZ1bmN0aW9ucy5nZXRDb29yZHNGcm9tVGlsZSxcbiAgICAgICAgICAgIG51bWJlckFyZzogem9vbVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBEUG9seWdvbkxvb3AucHJvdG90eXBlLmhlaWdodCA9IGZ1bmN0aW9uICh6KSB7XG4gICAgICAgIHRoaXMucG9vbC5wdXNoKHtcbiAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogTG9vcEZ1bmN0aW9ucy5oZWlnaHQsXG4gICAgICAgICAgICBudW1iZXJBcmc6IHpcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgRFBvbHlnb25Mb29wLnByb3RvdHlwZS5zZXRYID0gZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgdGhpcy5wb29sLnB1c2goe1xuICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBMb29wRnVuY3Rpb25zLnNldFgsXG4gICAgICAgICAgICBzZXR0ZXJBcmc6IHhcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgRFBvbHlnb25Mb29wLnByb3RvdHlwZS5zZXRZID0gZnVuY3Rpb24gKHkpIHtcbiAgICAgICAgdGhpcy5wb29sLnB1c2goe1xuICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBMb29wRnVuY3Rpb25zLnNldFksXG4gICAgICAgICAgICBzZXR0ZXJBcmc6IHlcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgRFBvbHlnb25Mb29wLnByb3RvdHlwZS5zZXRaID0gZnVuY3Rpb24gKHopIHtcbiAgICAgICAgdGhpcy5wb29sLnB1c2goe1xuICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBMb29wRnVuY3Rpb25zLnNldFosXG4gICAgICAgICAgICBzZXR0ZXJBcmc6IHpcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgRFBvbHlnb25Mb29wLnByb3RvdHlwZS5yb3RhdGUgPSBmdW5jdGlvbiAoYSkge1xuICAgICAgICB0aGlzLnBvb2wucHVzaCh7XG4gICAgICAgICAgICBmdW5jdGlvbk5hbWU6IExvb3BGdW5jdGlvbnMucm90YXRlLFxuICAgICAgICAgICAgbnVtYmVyQXJnOiBhXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIERQb2x5Z29uTG9vcC5wcm90b3R5cGUucm90YXRlM2RYID0gZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgdGhpcy5wb29sLnB1c2goe1xuICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBMb29wRnVuY3Rpb25zLnJvdGF0ZTNkWCxcbiAgICAgICAgICAgIG51bWJlckFyZzogYVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBEUG9seWdvbkxvb3AucHJvdG90eXBlLnJvdGF0ZTNkWSA9IGZ1bmN0aW9uIChhKSB7XG4gICAgICAgIHRoaXMucG9vbC5wdXNoKHtcbiAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogTG9vcEZ1bmN0aW9ucy5yb3RhdGUzZFksXG4gICAgICAgICAgICBudW1iZXJBcmc6IGFcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgRFBvbHlnb25Mb29wLnByb3RvdHlwZS5yb3RhdGUzZFogPSBmdW5jdGlvbiAoYSkge1xuICAgICAgICB0aGlzLnBvb2wucHVzaCh7XG4gICAgICAgICAgICBmdW5jdGlvbk5hbWU6IExvb3BGdW5jdGlvbnMucm90YXRlM2RaLFxuICAgICAgICAgICAgbnVtYmVyQXJnOiBhXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIERQb2x5Z29uTG9vcC5wcm90b3R5cGUubW92ZSA9IGZ1bmN0aW9uICh4LCB5KSB7XG4gICAgICAgIGlmICh5ID09PSB2b2lkIDApIHsgeSA9IHg7IH1cbiAgICAgICAgdGhpcy5wb29sLnB1c2goe1xuICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBMb29wRnVuY3Rpb25zLm1vdmUsXG4gICAgICAgICAgICBudW1iZXJQb2ludEFyZzogeCxcbiAgICAgICAgICAgIG51bWJlckFyZzogeVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBEUG9seWdvbkxvb3AucHJvdG90eXBlLnJvdW5kID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnBvb2wucHVzaCh7XG4gICAgICAgICAgICBmdW5jdGlvbk5hbWU6IExvb3BGdW5jdGlvbnMucm91bmRcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgRFBvbHlnb25Mb29wLnByb3RvdHlwZS5jZWlsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnBvb2wucHVzaCh7XG4gICAgICAgICAgICBmdW5jdGlvbk5hbWU6IExvb3BGdW5jdGlvbnMuY2VpbFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBEUG9seWdvbkxvb3AucHJvdG90eXBlLmZsb29yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnBvb2wucHVzaCh7XG4gICAgICAgICAgICBmdW5jdGlvbk5hbWU6IExvb3BGdW5jdGlvbnMuZmxvb3JcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgRFBvbHlnb25Mb29wLnByb3RvdHlwZS50b0ZpeGVkID0gZnVuY3Rpb24gKG4pIHtcbiAgICAgICAgaWYgKG4gPT09IHZvaWQgMCkgeyBuID0gMjsgfVxuICAgICAgICB0aGlzLnBvb2wucHVzaCh7XG4gICAgICAgICAgICBmdW5jdGlvbk5hbWU6IExvb3BGdW5jdGlvbnMudG9GaXhlZCxcbiAgICAgICAgICAgIG51bWJlckFyZzogblxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBEUG9seWdvbkxvb3AucHJvdG90eXBlLmFicyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5wb29sLnB1c2goe1xuICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBMb29wRnVuY3Rpb25zLmFic1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBEUG9seWdvbkxvb3AucHJvdG90eXBlLnNjYWxlID0gZnVuY3Rpb24gKHgsIHkpIHtcbiAgICAgICAgaWYgKHkgPT09IHZvaWQgMCkgeyB5ID0geDsgfVxuICAgICAgICB0aGlzLnBvb2wucHVzaCh7XG4gICAgICAgICAgICBmdW5jdGlvbk5hbWU6IExvb3BGdW5jdGlvbnMuc2NhbGUsXG4gICAgICAgICAgICBudW1iZXJQb2ludEFyZzogeCxcbiAgICAgICAgICAgIG51bWJlckFyZzogeVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBEUG9seWdvbkxvb3AucHJvdG90eXBlLmRpdmlkZSA9IGZ1bmN0aW9uICh4LCB5KSB7XG4gICAgICAgIHRoaXMucG9vbC5wdXNoKHtcbiAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogTG9vcEZ1bmN0aW9ucy5kaXZpZGUsXG4gICAgICAgICAgICBudW1iZXJQb2ludEFyZzogeCxcbiAgICAgICAgICAgIG51bWJlckFyZzogeVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBEUG9seWdvbkxvb3AucHJvdG90eXBlLmRlZ3JlZVRvUmFkaWFucyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5wb29sLnB1c2goe1xuICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBMb29wRnVuY3Rpb25zLmRlZ3JlZVRvUmFkaWFuc1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBEUG9seWdvbkxvb3AucHJvdG90eXBlLnJhZGlhbnNUb0RlZ3JlZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucG9vbC5wdXNoKHtcbiAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogTG9vcEZ1bmN0aW9ucy5yYWRpYW5zVG9EZWdyZWVzXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIERQb2x5Z29uTG9vcC5wcm90b3R5cGUucmFkaWFuc1RvTWV0ZXJzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnBvb2wucHVzaCh7XG4gICAgICAgICAgICBmdW5jdGlvbk5hbWU6IExvb3BGdW5jdGlvbnMucmFkaWFuc1RvTWV0ZXJzXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIERQb2x5Z29uTG9vcC5wcm90b3R5cGUubWV0ZXJzVG9SYWRpYW5zID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnBvb2wucHVzaCh7XG4gICAgICAgICAgICBmdW5jdGlvbk5hbWU6IExvb3BGdW5jdGlvbnMubWV0ZXJzVG9SYWRpYW5zXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIERQb2x5Z29uTG9vcC5wcm90b3R5cGUuZ2V0SGlwUG9pbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucG9vbC5wdXNoKHtcbiAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogTG9vcEZ1bmN0aW9ucy5oaXBQb2ludFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBEUG9seWdvbkxvb3AucHJvdG90eXBlLmdldFhQb2ludCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5wb29sLnB1c2goe1xuICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBMb29wRnVuY3Rpb25zLnhQb2ludFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBEUG9seWdvbkxvb3AucHJvdG90eXBlLmdldFlQb2ludCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5wb29sLnB1c2goe1xuICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBMb29wRnVuY3Rpb25zLnlQb2ludFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBEUG9seWdvbkxvb3AucHJvdG90eXBlLmdldFdQb2ludCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5wb29sLnB1c2goe1xuICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBMb29wRnVuY3Rpb25zLndQb2ludFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBEUG9seWdvbkxvb3AucHJvdG90eXBlLmdldEhQb2ludCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5wb29sLnB1c2goe1xuICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBMb29wRnVuY3Rpb25zLmhQb2ludFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBEUG9seWdvbkxvb3AucHJvdG90eXBlLnNldElmTGVzc1RoYW4gPSBmdW5jdGlvbiAocCkge1xuICAgICAgICB0aGlzLnBvb2wucHVzaCh7XG4gICAgICAgICAgICBmdW5jdGlvbk5hbWU6IExvb3BGdW5jdGlvbnMuc2V0SWZMZXNzVGhhbixcbiAgICAgICAgICAgIHBvaW50QXJnOiBwXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIERQb2x5Z29uTG9vcC5wcm90b3R5cGUubWludXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucG9vbC5wdXNoKHtcbiAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogTG9vcEZ1bmN0aW9ucy5taW51c1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBEUG9seWdvbkxvb3AucHJvdG90eXBlLmRlZ3JlZVRvTWV0ZXJzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnBvb2wucHVzaCh7XG4gICAgICAgICAgICBmdW5jdGlvbk5hbWU6IExvb3BGdW5jdGlvbnMuZGVncmVlVG9NZXRlcnNcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgRFBvbHlnb25Mb29wLnByb3RvdHlwZS5tZXRlcnNUb0RlZ3JlZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5wb29sLnB1c2goe1xuICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBMb29wRnVuY3Rpb25zLm1ldGVyc1RvRGVncmVlXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIERQb2x5Z29uTG9vcC5wcm90b3R5cGUuZmxpcFZlcnRpY2FsbHkgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICAgICAgICB0aGlzLnBvb2wucHVzaCh7XG4gICAgICAgICAgICBmdW5jdGlvbk5hbWU6IExvb3BGdW5jdGlvbnMuZmxpcFZlcnRpY2FsbHksXG4gICAgICAgICAgICBudW1iZXJQb2ludEFyZzogc2l6ZVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICByZXR1cm4gRFBvbHlnb25Mb29wO1xufSgpKTtcbmV4cG9ydCB7IERQb2x5Z29uTG9vcCB9O1xuIiwidmFyIF9fZ2VuZXJhdG9yID0gKHRoaXMgJiYgdGhpcy5fX2dlbmVyYXRvcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICAgIH1cbn07XG52YXIgX192YWx1ZXMgPSAodGhpcyAmJiB0aGlzLl9fdmFsdWVzKSB8fCBmdW5jdGlvbihvKSB7XG4gICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcbiAgICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn07XG52YXIgX19yZWFkID0gKHRoaXMgJiYgdGhpcy5fX3JlYWQpIHx8IGZ1bmN0aW9uIChvLCBuKSB7XG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICAgIGlmICghbSkgcmV0dXJuIG87XG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gICAgdHJ5IHtcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gICAgfVxuICAgIHJldHVybiBhcjtcbn07XG52YXIgX19zcHJlYWRBcnJheSA9ICh0aGlzICYmIHRoaXMuX19zcHJlYWRBcnJheSkgfHwgZnVuY3Rpb24gKHRvLCBmcm9tLCBwYWNrKSB7XG4gICAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcbiAgICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcbn07XG5pbXBvcnQgeyBEUG9pbnQgfSBmcm9tICcuL0RQb2ludCc7XG5pbXBvcnQgeyBETGluZSB9IGZyb20gJy4vRExpbmUnO1xuaW1wb3J0IHsgRENpcmNsZSB9IGZyb20gJy4vRENpcmNsZSc7XG5pbXBvcnQgeyBETnVtYmVycyB9IGZyb20gJy4vRE51bWJlcnMnO1xuaW1wb3J0IHsgaW8gYXMganN0c0lvLCBvcGVyYXRpb24gfSBmcm9tICdqc3RzJztcbmltcG9ydCB7IERQb2x5Z29uTG9vcCB9IGZyb20gJy4vRFBvbHlnb25Mb29wJztcbmltcG9ydCB7IGlzRGVmQW5kTm90TnVsbCB9IGZyb20gJy4vdXRpbHMnO1xudmFyIF9hID0gb3BlcmF0aW9uLmJ1ZmZlci5CdWZmZXJQYXJhbWV0ZXJzLCBDQVBfUk9VTkQgPSBfYS5DQVBfUk9VTkQsIENBUF9GTEFUID0gX2EuQ0FQX0ZMQVQsIENBUF9TUVVBUkUgPSBfYS5DQVBfU1FVQVJFO1xuZXhwb3J0IHZhciBNSU5fUE9JTlRTX0lOX1ZBTElEX1BPTFlHT04gPSAzO1xudmFyIEFQUFJPWElNQVRJT05fVkFMVUUgPSAwLjE7XG52YXIgTUFYX0NPTlZFWF9JVEVSQVRJT05TID0gMTAwO1xudmFyIENMT1NFX1RPX0lOVEVSU0VDVElPTl9ESVNUQU5DRSA9IDAuMDAxO1xudmFyIGNvbnRhaW5DYWxjdWxhdG9yID0gZnVuY3Rpb24gKHBvbHksIHApIHtcbiAgICB2YXIgZV8xLCBfYSwgZV8yLCBfYjtcbiAgICB2YXIgaGFzU2FtZVBvaW50ID0gcG9seS5wb2ludHMuc29tZShmdW5jdGlvbiAocG9pbnQpIHsgcmV0dXJuIHBvaW50LmVxdWFsKHApOyB9KTtcbiAgICBpZiAoaGFzU2FtZVBvaW50KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBmb3IgKHZhciBfYyA9IF9fdmFsdWVzKHBvbHkubG9vcFBvaW50c0dlbmVyYXRvcih0cnVlKSgpKSwgX2QgPSBfYy5uZXh0KCk7ICFfZC5kb25lOyBfZCA9IF9jLm5leHQoKSkge1xuICAgICAgICAgICAgdmFyIF9lID0gX19yZWFkKF9kLnZhbHVlLCAzKSwgcG9seWdvbkxpbmUgPSBfZVsyXTtcbiAgICAgICAgICAgIHZhciBvbkJvcmRlciA9IHBvbHlnb25MaW5lLngocCkuZXF1YWwocCkgJiYgcG9seWdvbkxpbmUuaW5SYW5nZShwKTtcbiAgICAgICAgICAgIGlmIChvbkJvcmRlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoX2QgJiYgIV9kLmRvbmUgJiYgKF9hID0gX2MucmV0dXJuKSkgX2EuY2FsbChfYyk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgIH1cbiAgICB2YXIgdG90YWxGaSA9IDA7XG4gICAgdHJ5IHtcbiAgICAgICAgZm9yICh2YXIgX2YgPSBfX3ZhbHVlcyhwb2x5Lmxvb3BQb2ludHNHZW5lcmF0b3IoKSgpKSwgX2cgPSBfZi5uZXh0KCk7ICFfZy5kb25lOyBfZyA9IF9mLm5leHQoKSkge1xuICAgICAgICAgICAgdmFyIF9oID0gX19yZWFkKF9nLnZhbHVlLCAyKSwgX2ogPSBfaFswXSwgeCA9IF9qLngsIHkgPSBfai55LCBfayA9IF9oWzFdLCBhID0gX2sueCwgYiA9IF9rLnk7XG4gICAgICAgICAgICB2YXIgbGluZTEgPSBuZXcgRExpbmUoeCAtIHAueCwgeSAtIHAueSwgMCk7XG4gICAgICAgICAgICB2YXIgbGluZTIgPSBuZXcgRExpbmUoYSAtIHAueCwgYiAtIHAueSwgMCk7XG4gICAgICAgICAgICB2YXIgZmlEaWYgPSBsaW5lMS5maW5kRmkobGluZTIpO1xuICAgICAgICAgICAgaWYgKGxpbmUxLnZlY3RvclByb2R1Y3QobGluZTIpLmMgPiAwKSB7XG4gICAgICAgICAgICAgICAgdG90YWxGaSArPSBmaURpZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRvdGFsRmkgLT0gZmlEaWY7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2ggKGVfMl8xKSB7IGVfMiA9IHsgZXJyb3I6IGVfMl8xIH07IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChfZyAmJiAhX2cuZG9uZSAmJiAoX2IgPSBfZi5yZXR1cm4pKSBfYi5jYWxsKF9mKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMikgdGhyb3cgZV8yLmVycm9yOyB9XG4gICAgfVxuICAgIHZhciBlcHMgPSBNYXRoLlBJIC8gMTAwMDA7XG4gICAgdmFyIHJlc3VsdCA9IGZhbHNlO1xuICAgIHZhciBhYnNUb3RhbEZpID0gTWF0aC5hYnModG90YWxGaSk7XG4gICAgaWYgKGFic1RvdGFsRmkgPCBlcHMpIHtcbiAgICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgfVxuICAgIGVsc2UgaWYgKE1hdGguYWJzKDIgKiBNYXRoLlBJIC0gYWJzVG90YWxGaSkgPCBlcHMpIHtcbiAgICAgICAgcmVzdWx0ID0gdHJ1ZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY29udGFpbnMyIGZhaWxkJyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIERQb2x5Z29uID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBEUG9seWdvbihwUG9pbnRzKSB7XG4gICAgICAgIGlmIChwUG9pbnRzID09PSB2b2lkIDApIHsgcFBvaW50cyA9IFtdOyB9XG4gICAgICAgIHRoaXMucFBvaW50cyA9IHBQb2ludHM7XG4gICAgICAgIHRoaXMucHJvcGVydGllcyA9IHt9O1xuICAgICAgICB0aGlzLmhvbGVzID0gW107XG4gICAgICAgIHRoaXMuc2VhcmNoU3RvcmUgPSB7fTtcbiAgICB9XG4gICAgRFBvbHlnb24uYXJyYXlPZlRyaWFuZ2xlc1RvVmVydGljZXMgPSBmdW5jdGlvbiAodHJpYW5nbGVzLCBoZWlnaHQpIHtcbiAgICAgICAgcmV0dXJuIHRyaWFuZ2xlcy5tYXAoZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChpc0RlZkFuZE5vdE51bGwoaGVpZ2h0KSA/IHZcbiAgICAgICAgICAgIC5sb29wKClcbiAgICAgICAgICAgIC5oZWlnaHQoaGVpZ2h0KVxuICAgICAgICAgICAgLnJ1bigpIDogdilcbiAgICAgICAgICAgIC50b0FycmF5T2ZDb29yZHMoKTsgfSlcbiAgICAgICAgICAgIC5mbGF0KDIpO1xuICAgIH07XG4gICAgRFBvbHlnb24ubWluQXJlYVJlY3RhbmdsZVNpemUgPSBmdW5jdGlvbiAocG9seSkge1xuICAgICAgICB2YXIgX2EgPSBwb2x5LmNsb25lKCkub3BlbigpLCBmaXJzdCA9IF9hLmZpcnN0LCBzZWNvbmQgPSBfYS5zZWNvbmQsIGxhc3QgPSBfYS5sYXN0O1xuICAgICAgICByZXR1cm4gbmV3IERQb2ludChmaXJzdC5kaXN0YW5jZShzZWNvbmQpLCBmaXJzdC5kaXN0YW5jZShsYXN0KSk7XG4gICAgfTtcbiAgICBEUG9seWdvbi50b0Rhc2ggPSBmdW5jdGlvbiAocG9seSkge1xuICAgICAgICB2YXIgZV8zLCBfYTtcbiAgICAgICAgdmFyIHAgPSBuZXcgRFBvbHlnb24oKTtcbiAgICAgICAgdmFyIHJlc3VsdCA9IFtwXTtcbiAgICAgICAgdmFyIHRyaWdnZXIgPSB0cnVlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yICh2YXIgX2IgPSBfX3ZhbHVlcyhwb2x5LnBvaW50cyksIF9jID0gX2IubmV4dCgpOyAhX2MuZG9uZTsgX2MgPSBfYi5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICB2YXIgcG9pbnQgPSBfYy52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAodHJpZ2dlcikge1xuICAgICAgICAgICAgICAgICAgICBwLnB1c2gocG9pbnQuY2xvbmUoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwb2ludC5wcm9wZXJ0aWVzLnBpZWNlQm9yZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXIgPSAhdHJpZ2dlcjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRyaWdnZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHAgPSBuZXcgRFBvbHlnb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcC5wdXNoKHBvaW50LmNsb25lKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlXzNfMSkgeyBlXzMgPSB7IGVycm9yOiBlXzNfMSB9OyB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAoX2MgJiYgIV9jLmRvbmUgJiYgKF9hID0gX2IucmV0dXJuKSkgX2EuY2FsbChfYik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMykgdGhyb3cgZV8zLmVycm9yOyB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIERQb2x5Z29uLm1pbkFyZWFSZWN0YW5nbGVEaXJlY3Rpb24gPSBmdW5jdGlvbiAocG9seSkge1xuICAgICAgICB2YXIgX2EgPSBwb2x5LmNsb25lKCkub3BlbigpLCBmaXJzdCA9IF9hLmZpcnN0LCBzZWNvbmQgPSBfYS5zZWNvbmQsIGxhc3QgPSBfYS5sYXN0O1xuICAgICAgICBpZiAoIWZpcnN0IHx8ICFzZWNvbmQgfHwgIWxhc3QpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaXJzdC5kaXN0YW5jZShzZWNvbmQpID4gZmlyc3QuZGlzdGFuY2UobGFzdCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmaXJzdC5maW5kTGluZShzZWNvbmQpLmdldEZpKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpcnN0LmZpbmRMaW5lKGxhc3QpLmdldEZpKCk7XG4gICAgfTtcbiAgICBEUG9seWdvbi5wYXJzZUZyb21XS1QgPSBmdW5jdGlvbiAod2t0KSB7XG4gICAgICAgIHZhciBkYXRhID0gd2t0LnRyaW0oKS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICB2YXIgcmVzID0gbmV3IERQb2x5Z29uKCk7XG4gICAgICAgIGlmIChkYXRhLmluZGV4T2YoJ1BPTFlHT04nKSA9PT0gMCkge1xuICAgICAgICAgICAgdmFyIHJlZ2V4cCA9IC9QT0xZR09OIFxcKFxcKCg/PGRhdGE+KD86KD8hXFwpXFwpJCkuKSo/KVxcKVxcKSQvbWl1O1xuICAgICAgICAgICAgdmFyIHJlZyA9IHJlZ2V4cC5leGVjKGRhdGEpO1xuICAgICAgICAgICAgdmFyIF9hID0gX19yZWFkKHJlZy5ncm91cHMuZGF0YVxuICAgICAgICAgICAgICAgIC5zcGxpdCgnKSwgKCcpXG4gICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAocCkgeyByZXR1cm4gbmV3IERQb2x5Z29uKHAuc3BsaXQoJywgJylcbiAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChwYXJlcykgeyByZXR1cm4gRFBvaW50LnBhcnNlKHBhcmVzLnNwbGl0KCcgJykubWFwKE51bWJlcikpOyB9KSk7IH0pKSwgcGF0aCA9IF9hWzBdLCBob2xlcyA9IF9hLnNsaWNlKDEpO1xuICAgICAgICAgICAgaWYgKGhvbGVzICYmIGhvbGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHBhdGguaG9sZXMgPSBob2xlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcyA9IHBhdGg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGEuaW5kZXhPZignTElORVNUUklORycpID09PSAwKSB7XG4gICAgICAgICAgICB2YXIgcmVnZXhwID0gL0xJTkVTVFJJTkcgXFwoKD88ZGF0YT4oPzooPyFcXCkkKS4pKj8pXFwpJC9taXU7XG4gICAgICAgICAgICB2YXIgcmVnID0gcmVnZXhwLmV4ZWMoZGF0YSk7XG4gICAgICAgICAgICByZXMgPSBuZXcgRFBvbHlnb24ocmVnLmdyb3Vwcy5kYXRhXG4gICAgICAgICAgICAgICAgLnNwbGl0KCcsICcpLm1hcChmdW5jdGlvbiAodCkgeyByZXR1cm4gRFBvaW50LnBhcnNlKHQuc3BsaXQoJyAnKS5tYXAoTnVtYmVyKSk7IH0pKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0YS5pbmRleE9mKCdQT0lOVCcpID09PSAwKSB7XG4gICAgICAgICAgICByZXMgPSBuZXcgRFBvbHlnb24oW0RQb2ludC5wYXJzZUZyb21XS1QoZGF0YSldKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG4gICAgRFBvbHlnb24uY3JlYXRlU3F1YXJlQnlTaXplID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEUG9seWdvbihbRFBvaW50Lnplcm8oKSwgc2l6ZS5jbG9uZSgpLnNldFgoMCksIHNpemUuY2xvbmUoKSwgc2l6ZS5jbG9uZSgpLnNldFkoMCldKS5jbG9zZSgpO1xuICAgIH07XG4gICAgRFBvbHlnb24ucHJvdG90eXBlLmxvb3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgRFBvbHlnb25Mb29wKHRoaXMpO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KERQb2x5Z29uLnByb3RvdHlwZSwgXCJwb2ludHNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBQb2ludHM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHApIHtcbiAgICAgICAgICAgIHRoaXMucFBvaW50cyA9IHA7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRFBvbHlnb24ucHJvdG90eXBlLCBcIm1heFhcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlZHVjZShmdW5jdGlvbiAoYSwgcikgeyByZXR1cm4gTWF0aC5tYXgoYSwgci54KTsgfSwgLUluZmluaXR5KTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEUG9seWdvbi5wcm90b3R5cGUsIFwibWluWFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVkdWNlKGZ1bmN0aW9uIChhLCByKSB7IHJldHVybiBNYXRoLm1pbihhLCByLngpOyB9LCBJbmZpbml0eSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRFBvbHlnb24ucHJvdG90eXBlLCBcIm1heFlcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlZHVjZShmdW5jdGlvbiAoYSwgcikgeyByZXR1cm4gTWF0aC5tYXgoYSwgci55KTsgfSwgLUluZmluaXR5KTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEUG9seWdvbi5wcm90b3R5cGUsIFwibWluWVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVkdWNlKGZ1bmN0aW9uIChhLCByKSB7IHJldHVybiBNYXRoLm1pbihhLCByLnkpOyB9LCBJbmZpbml0eSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRFBvbHlnb24ucHJvdG90eXBlLCBcImNlbnRlclwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubGVmdFRvcC5tb3ZlKHRoaXMuc2l6ZS5kaXZpZGUoMikpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KERQb2x5Z29uLnByb3RvdHlwZSwgXCJoXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYXhZIC0gdGhpcy5taW5ZO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KERQb2x5Z29uLnByb3RvdHlwZSwgXCJ3XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYXhYIC0gdGhpcy5taW5YO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KERQb2x5Z29uLnByb3RvdHlwZSwgXCJkWVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEUG9seWdvbi5wcm90b3R5cGUsIFwiZFhcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnc7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRFBvbHlnb24ucHJvdG90eXBlLCBcImV4dGVuZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hID0gdGhpcywgbWluWCA9IF9hLm1pblgsIG1pblkgPSBfYS5taW5ZLCBtYXhYID0gX2EubWF4WCwgbWF4WSA9IF9hLm1heFk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IERQb2x5Z29uKFtcbiAgICAgICAgICAgICAgICBuZXcgRFBvaW50KG1pblgsIG1pblkpLFxuICAgICAgICAgICAgICAgIG5ldyBEUG9pbnQobWF4WCwgbWluWSksXG4gICAgICAgICAgICAgICAgbmV3IERQb2ludChtYXhYLCBtYXhZKSxcbiAgICAgICAgICAgICAgICBuZXcgRFBvaW50KG1pblgsIG1heFkpLFxuICAgICAgICAgICAgICAgIG5ldyBEUG9pbnQobWluWCwgbWluWSlcbiAgICAgICAgICAgIF0pO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KERQb2x5Z29uLnByb3RvdHlwZSwgXCJzaXplXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2EgPSB0aGlzLCB3ID0gX2EudywgaCA9IF9hLmg7XG4gICAgICAgICAgICByZXR1cm4gbmV3IERQb2ludCh3LCBoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEUG9seWdvbi5wcm90b3R5cGUsIFwibGVmdFRvcFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hID0gdGhpcywgbWluWCA9IF9hLm1pblgsIG1pblkgPSBfYS5taW5ZO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBEUG9pbnQobWluWCwgbWluWSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRFBvbHlnb24ucHJvdG90eXBlLCBcInJpZ2h0Qm90dG9tXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2EgPSB0aGlzLCBtYXhYID0gX2EubWF4WCwgbWF4WSA9IF9hLm1heFk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IERQb2ludChtYXhYLCBtYXhZKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEUG9seWdvbi5wcm90b3R5cGUsIFwibGVuZ3RoXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wUG9pbnRzLmxlbmd0aDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEUG9seWdvbi5wcm90b3R5cGUsIFwiZnVsbExlbmd0aFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5vcGVuKCkucGVyaW1ldGVyO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KERQb2x5Z29uLnByb3RvdHlwZSwgXCJwZXJpbWV0ZXJcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBlXzQsIF9hO1xuICAgICAgICAgICAgdmFyIHAgPSAwO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBfYiA9IF9fdmFsdWVzKHRoaXMubG9vcFBvaW50c0dlbmVyYXRvcigpKCkpLCBfYyA9IF9iLm5leHQoKTsgIV9jLmRvbmU7IF9jID0gX2IubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfZCA9IF9fcmVhZChfYy52YWx1ZSwgMiksIHAxID0gX2RbMF0sIHAyID0gX2RbMV07XG4gICAgICAgICAgICAgICAgICAgIHAgKz0gcDEuZGlzdGFuY2UocDIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlXzRfMSkgeyBlXzQgPSB7IGVycm9yOiBlXzRfMSB9OyB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2MgJiYgIV9jLmRvbmUgJiYgKF9hID0gX2IucmV0dXJuKSkgX2EuY2FsbChfYik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV80KSB0aHJvdyBlXzQuZXJyb3I7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KERQb2x5Z29uLnByb3RvdHlwZSwgXCJhcmVhXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZV81LCBfYTtcbiAgICAgICAgICAgIHZhciBzdW0gPSAwO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBfYiA9IF9fdmFsdWVzKHRoaXMuZGVpbnRlcnNlY3Rpb24ubG9vcFBvaW50c0dlbmVyYXRvcigpKCkpLCBfYyA9IF9iLm5leHQoKTsgIV9jLmRvbmU7IF9jID0gX2IubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfZCA9IF9fcmVhZChfYy52YWx1ZSwgMiksIF9lID0gX2RbMF0sIHggPSBfZS54LCB5ID0gX2UueSwgX2YgPSBfZFsxXSwgYSA9IF9mLngsIGIgPSBfZi55O1xuICAgICAgICAgICAgICAgICAgICBzdW0gKz0geCAqIGIgLSB5ICogYTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZV81XzEpIHsgZV81ID0geyBlcnJvcjogZV81XzEgfTsgfVxuICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9jICYmICFfYy5kb25lICYmIChfYSA9IF9iLnJldHVybikpIF9hLmNhbGwoX2IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfNSkgdGhyb3cgZV81LmVycm9yOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5hYnMoc3VtIC8gMikgLSB0aGlzLmhvbGVzLnJlZHVjZShmdW5jdGlvbiAoYSwgaG9sZSkgeyByZXR1cm4gYSArIGhvbGUuYXJlYTsgfSwgMCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRFBvbHlnb24ucHJvdG90eXBlLCBcImRlaW50ZXJzZWN0aW9uXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZV82LCBfYTtcbiAgICAgICAgICAgIHZhciBwID0gdGhpcy5jbG9uZSgpLmNsb3NlKCk7XG4gICAgICAgICAgICB2YXIgc3RvcmUgPSB7fTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcC5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgayA9IHAuYXQoaSkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICBzdG9yZVtrXSA9IHN0b3JlW2tdIHx8IFtdO1xuICAgICAgICAgICAgICAgIHN0b3JlW2tdLnB1c2goaSk7XG4gICAgICAgICAgICAgICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiAoaikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZmlyc3RMaW5lID0gcC5hdChpKS5maW5kTGluZShwLmF0KGkgKyAxKSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzZWNvbmRMaW5lID0gcC5hdChqKS5maW5kTGluZShwLmF0KGogKyAxKSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpbnRlcnNlY3Rpb25Qb2ludCA9IGZpcnN0TGluZS5pbnRlcnNlY3Rpb24oc2Vjb25kTGluZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnRlcnNlY3Rpb25Qb2ludCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIV9fc3ByZWFkQXJyYXkoX19zcHJlYWRBcnJheShbXSwgX19yZWFkKGZpcnN0TGluZS5wb2ludHMpLCBmYWxzZSksIF9fcmVhZChzZWNvbmRMaW5lLnBvaW50cyksIGZhbHNlKS5zb21lKGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Lmxpa2UoaW50ZXJzZWN0aW9uUG9pbnQpOyB9KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnQgPSBwLnJlbW92ZVBhcnQoaSwgaiAtIGkpLnJldmVyc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHAuaW5zZXJ0QWZ0ZXIuYXBwbHkocCwgX19zcHJlYWRBcnJheShbaV0sIF9fcmVhZChwYXJ0KSwgZmFsc2UpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHAuaW5zZXJ0QWZ0ZXIoaiwgaW50ZXJzZWN0aW9uUG9pbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcC5pbnNlcnRBZnRlcihpLCBpbnRlcnNlY3Rpb25Qb2ludCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSBpICsgMjsgaiA8IHAubGVuZ3RoIC0gMTsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIF9sb29wXzEoaik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBfYiA9IF9fdmFsdWVzKE9iamVjdC5rZXlzKHN0b3JlKSksIF9jID0gX2IubmV4dCgpOyAhX2MuZG9uZTsgX2MgPSBfYi5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGtleSA9IF9jLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVjb3JkID0gc3RvcmVba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlY29yZC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2xvb3BfMiA9IGZ1bmN0aW9uIChqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9yaWdpbl8xID0gcC5jbG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkID0gcmVjb3JkW2pdIC0gcmVjb3JkW2ogLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnQgPSBuZXcgRFBvbHlnb24ob3JpZ2luXzEucmVtb3ZlUGFydChyZWNvcmRbaiAtIDFdLCBkKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhbGxJbnNpZGUgPSBwYXJ0LnJlZHVjZShmdW5jdGlvbiAoYSwgZSkgeyByZXR1cm4gYSAmJiBjb250YWluQ2FsY3VsYXRvcihvcmlnaW5fMSwgZSk7IH0sIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWxsSW5zaWRlICYmIG9yaWdpbl8xLmlzQ2xvY2t3aXNlID09PSBwYXJ0LmlzQ2xvY2t3aXNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5fMS5pbnNlcnRBZnRlci5hcHBseShvcmlnaW5fMSwgX19zcHJlYWRBcnJheShbcmVjb3JkW2ogLSAxXSAtIDFdLCBfX3JlYWQocGFydC5yZXZlcnNlKCkucG9pbnRzKSwgZmFsc2UpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSBvcmlnaW5fMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gcmVjb3JkLmxlbmd0aCAtIDE7IGogPiAwOyBqLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbG9vcF8yKGopO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVfNl8xKSB7IGVfNiA9IHsgZXJyb3I6IGVfNl8xIH07IH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfYyAmJiAhX2MuZG9uZSAmJiAoX2EgPSBfYi5yZXR1cm4pKSBfYS5jYWxsKF9iKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzYpIHRocm93IGVfNi5lcnJvcjsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHA7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRFBvbHlnb24ucHJvdG90eXBlLCBcInZhbGlkXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sZW5ndGggPiBNSU5fUE9JTlRTX0lOX1ZBTElEX1BPTFlHT047XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRFBvbHlnb24ucHJvdG90eXBlLCBcImZpcnN0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hdCgwKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEUG9seWdvbi5wcm90b3R5cGUsIFwic2Vjb25kXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hdCgxKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEUG9seWdvbi5wcm90b3R5cGUsIFwibGFzdFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXQodGhpcy5sZW5ndGggLSAxKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEUG9seWdvbi5wcm90b3R5cGUsIFwibWluQXJlYVJlY3RhbmdsZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGVfNywgX2EsIGVfOCwgX2I7XG4gICAgICAgICAgICB2YXIgcCA9IHRoaXMuY29udmV4O1xuICAgICAgICAgICAgdmFyIHJlc3VsdFBvbHlnb24gPSBuZXcgRFBvbHlnb24oKTtcbiAgICAgICAgICAgIHZhciByZXN1bHRBcmVhID0gSW5maW5pdHk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIF9jID0gX192YWx1ZXMocC5sb29wUG9pbnRzR2VuZXJhdG9yKHRydWUpKCkpLCBfZCA9IF9jLm5leHQoKTsgIV9kLmRvbmU7IF9kID0gX2MubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfZSA9IF9fcmVhZChfZC52YWx1ZSwgMyksIGwgPSBfZVsyXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1heFdpZHRoID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1heFdpZHRoUG9pbnQxID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1heFdpZHRoUG9pbnQyID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1heEhlaWdodCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtYXhIZWlnaHRQb2ludCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfZiA9IChlXzggPSB2b2lkIDAsIF9fdmFsdWVzKHAubG9vcFBvaW50c0dlbmVyYXRvcigpKCkpKSwgX2cgPSBfZi5uZXh0KCk7ICFfZy5kb25lOyBfZyA9IF9mLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfaCA9IF9fcmVhZChfZy52YWx1ZSwgNCksIHogPSBfaFswXSwgaSA9IF9oWzNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwMSA9IGwuZmluZFBvaW50KGwuZmluZFBlcnBlbmRpY3VsYXIoeikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoID0gcDEuZGlzdGFuY2Uoeik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGggPj0gbWF4SGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEhlaWdodCA9IGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEhlaWdodFBvaW50ID0gejtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IGk7IGogPCBwLmxlbmd0aCAtIDE7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcDIgPSBsLmZpbmRQb2ludChsLmZpbmRQZXJwZW5kaWN1bGFyKHAuYXQoaikpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHcgPSBwMS5kaXN0YW5jZShwMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3ID49IG1heFdpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aCA9IHc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aFBvaW50MSA9IHAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGhQb2ludDIgPSBwMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZV84XzEpIHsgZV84ID0geyBlcnJvcjogZV84XzEgfTsgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9nICYmICFfZy5kb25lICYmIChfYiA9IF9mLnJldHVybikpIF9iLmNhbGwoX2YpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzgpIHRocm93IGVfOC5lcnJvcjsgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghbWF4V2lkdGhQb2ludDEgfHwgIW1heFdpZHRoUG9pbnQyIHx8ICFtYXhIZWlnaHRQb2ludCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdmFyIHdpZHRoTGluZSA9IG1heFdpZHRoUG9pbnQxLmZpbmRMaW5lKG1heFdpZHRoUG9pbnQyKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBlcnBlbmRpY3VsYXIxID0gd2lkdGhMaW5lLmZpbmRQZXJwZW5kaWN1bGFyKG1heFdpZHRoUG9pbnQxKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBlcnBlbmRpY3VsYXIyID0gd2lkdGhMaW5lLmZpbmRQZXJwZW5kaWN1bGFyKG1heFdpZHRoUG9pbnQyKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXBQb2x5Z29uID0gbmV3IERQb2x5Z29uKFtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heFdpZHRoUG9pbnQxLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGhQb2ludDIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwZXJwZW5kaWN1bGFyMi5maW5kUG9pbnQocGVycGVuZGljdWxhcjIuZmluZFBlcnBlbmRpY3VsYXIobWF4SGVpZ2h0UG9pbnQpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlcnBlbmRpY3VsYXIxLmZpbmRQb2ludChwZXJwZW5kaWN1bGFyMS5maW5kUGVycGVuZGljdWxhcihtYXhIZWlnaHRQb2ludCkpXG4gICAgICAgICAgICAgICAgICAgIF0pLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ZW1wUG9seWdvbi5hcmVhIDwgcmVzdWx0QXJlYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0UG9seWdvbiA9IHRlbXBQb2x5Z29uO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0QXJlYSA9IHRlbXBQb2x5Z29uLmFyZWE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZV83XzEpIHsgZV83ID0geyBlcnJvcjogZV83XzEgfTsgfVxuICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9kICYmICFfZC5kb25lICYmIChfYSA9IF9jLnJldHVybikpIF9hLmNhbGwoX2MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfNykgdGhyb3cgZV83LmVycm9yOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0UG9seWdvbjtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEUG9seWdvbi5wcm90b3R5cGUsIFwiY29udmV4XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgcCA9IHRoaXMuY2xvbmUoKS5vcGVuKCk7XG4gICAgICAgICAgICB2YXIgaXNDbG9ja3dpc2UgPSBwLmlzQ2xvY2t3aXNlO1xuICAgICAgICAgICAgaWYgKCFpc0Nsb2Nrd2lzZSkge1xuICAgICAgICAgICAgICAgIHAucmV2ZXJzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGwgPSAwO1xuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIHZhciBwMSA9IHAubGFzdDtcbiAgICAgICAgICAgICAgICB2YXIgcDIgPSBwLmZpcnN0O1xuICAgICAgICAgICAgICAgIHZhciBwMyA9IHAuc2Vjb25kO1xuICAgICAgICAgICAgICAgIHZhciBkID0gcDIuZmluZElubmVyQW5nbGUocDEsIHAzKTtcbiAgICAgICAgICAgICAgICBpZiAoZCA+IE1hdGguUEkgfHwgRE51bWJlcnMubGlrZVplcm8oRE51bWJlcnMucmFkMkRlZyhkKSkgfHwgRE51bWJlcnMubGlrZVBJKGQpIHx8IEROdW1iZXJzLmxpa2UyUEkoZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcC5yZW1vdmVQYXJ0KC0xLCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gd2hpbGUgKHAubGVuZ3RoKTtcbiAgICAgICAgICAgIHAuY2xvc2UoKTtcbiAgICAgICAgICAgIHZhciBpdGVyYXRpb24gPSAwO1xuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIHAgPSBwLmRlaW50ZXJzZWN0aW9uO1xuICAgICAgICAgICAgICAgIGwgPSBwLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IHAubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBwMSA9IHAuYXQoaSAtIDEpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcDIgPSBwLmF0KGkpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcDMgPSBwLmF0KGkgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSBwMi5maW5kSW5uZXJBbmdsZShwMSwgcDMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZCA+IE1hdGguUEkgfHwgRE51bWJlcnMubGlrZVplcm8oRE51bWJlcnMucmFkMkRlZyhkKSkgfHwgRE51bWJlcnMubGlrZVBJKGQpIHx8IEROdW1iZXJzLmxpa2UyUEkoZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHAucmVtb3ZlUGFydCgtLWksIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGl0ZXJhdGlvbisrO1xuICAgICAgICAgICAgfSB3aGlsZSAocC5sZW5ndGggIT09IGwgJiYgaXRlcmF0aW9uIDwgTUFYX0NPTlZFWF9JVEVSQVRJT05TKTtcbiAgICAgICAgICAgIGlmICghaXNDbG9ja3dpc2UpIHtcbiAgICAgICAgICAgICAgICBwLnJldmVyc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KERQb2x5Z29uLnByb3RvdHlwZSwgXCJpc0Nsb2Nrd2lzZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGVfOSwgX2E7XG4gICAgICAgICAgICB2YXIgc3VtID0gMDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgX2IgPSBfX3ZhbHVlcyh0aGlzLmNsb25lKCkuY2xvc2UoKVxuICAgICAgICAgICAgICAgICAgICAubG9vcFBvaW50c0dlbmVyYXRvcigpKCkpLCBfYyA9IF9iLm5leHQoKTsgIV9jLmRvbmU7IF9jID0gX2IubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfZCA9IF9fcmVhZChfYy52YWx1ZSwgMiksIF9lID0gX2RbMF0sIHggPSBfZS54LCB5ID0gX2UueSwgX2YgPSBfZFsxXSwgYSA9IF9mLngsIGIgPSBfZi55O1xuICAgICAgICAgICAgICAgICAgICBzdW0gKz0gKGEgLSB4KSAqIChiICsgeSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVfOV8xKSB7IGVfOSA9IHsgZXJyb3I6IGVfOV8xIH07IH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfYyAmJiAhX2MuZG9uZSAmJiAoX2EgPSBfYi5yZXR1cm4pKSBfYS5jYWxsKF9iKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzkpIHRocm93IGVfOS5lcnJvcjsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHN1bSA8IDA7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRFBvbHlnb24ucHJvdG90eXBlLCBcImNsb2NrV2lzZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNDbG9ja3dpc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbG9uZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5yZXZlcnNlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRFBvbHlnb24ucHJvdG90eXBlLCBcIm5vSG9sZXNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciByZXMgPSB0aGlzLmNsb25lKCk7XG4gICAgICAgICAgICByZXMuaG9sZXMgPSBbXTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBEUG9seWdvbi5wcm90b3R5cGUucmVkdWNlID0gZnVuY3Rpb24gKGYsIHYpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucFBvaW50cy5yZWR1Y2UoZiwgdik7XG4gICAgfTtcbiAgICBEUG9seWdvbi5wcm90b3R5cGUuaW50ZXJzZWN0aW9uID0gZnVuY3Rpb24gKGwsIGluY2x1ZGVPbmx5KSB7XG4gICAgICAgIHZhciBlXzEwLCBfYTtcbiAgICAgICAgaWYgKGluY2x1ZGVPbmx5ID09PSB2b2lkIDApIHsgaW5jbHVkZU9ubHkgPSBmYWxzZTsgfVxuICAgICAgICB2YXIgcmVzID0gW107XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKHZhciBfYiA9IF9fdmFsdWVzKHRoaXMubG9vcFBvaW50c0dlbmVyYXRvcih0cnVlKSgpKSwgX2MgPSBfYi5uZXh0KCk7ICFfYy5kb25lOyBfYyA9IF9iLm5leHQoKSkge1xuICAgICAgICAgICAgICAgIHZhciBfZCA9IF9fcmVhZChfYy52YWx1ZSwgMyksIGxpbmUgPSBfZFsyXTtcbiAgICAgICAgICAgICAgICB2YXIgaW50ZXJzZWN0ID0gbGluZS5pbnRlcnNlY3Rpb24obCwgMCwgaW5jbHVkZU9ubHkpO1xuICAgICAgICAgICAgICAgIGlmIChpbnRlcnNlY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzLnB1c2goaW50ZXJzZWN0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVfMTBfMSkgeyBlXzEwID0geyBlcnJvcjogZV8xMF8xIH07IH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChfYyAmJiAhX2MuZG9uZSAmJiAoX2EgPSBfYi5yZXR1cm4pKSBfYS5jYWxsKF9iKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xMCkgdGhyb3cgZV8xMC5lcnJvcjsgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbiAgICBEUG9seWdvbi5wcm90b3R5cGUuc2V0Q2VudGVyID0gZnVuY3Rpb24gKG5ld0NlbnRlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5sb29wKClcbiAgICAgICAgICAgIC5tb3ZlKG5ld0NlbnRlci5jbG9uZSgpLm1vdmUodGhpcy5jZW50ZXIubWludXMoKSkpXG4gICAgICAgICAgICAucnVuKCk7XG4gICAgfTtcbiAgICBEUG9seWdvbi5wcm90b3R5cGUudG9XS1QgPSBmdW5jdGlvbiAodHlwZSwgd2l0aFopIHtcbiAgICAgICAgaWYgKHR5cGUgPT09IHZvaWQgMCkgeyB0eXBlID0gRFBvbHlnb24uV0tUX1BPTFlHT047IH1cbiAgICAgICAgaWYgKHdpdGhaID09PSB2b2lkIDApIHsgd2l0aFogPSBmYWxzZTsgfVxuICAgICAgICBpZiAodHlwZSA9PT0gRFBvbHlnb24uV0tUX1BPTFlHT04pIHtcbiAgICAgICAgICAgIHZhciBoID0gJyc7XG4gICAgICAgICAgICBpZiAodGhpcy5ob2xlcyAmJiB0aGlzLmhvbGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGggPSBcIiwgXCIgKyB0aGlzLmhvbGVzLm1hcChmdW5jdGlvbiAoaG9sZSkgeyByZXR1cm4gaG9sZS50b1N0cmluZygpOyB9KVxuICAgICAgICAgICAgICAgICAgICAuam9pbignLCAnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBcIlBPTFlHT04gKChcIiArIHRoaXMuZGVpbnRlcnNlY3Rpb24ubWFwQXJyYXkoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIHIueCArIFwiIFwiICsgci55ICsgKHdpdGhaID8gXCIgXCIgKyByLnogOiAnJyk7IH0pXG4gICAgICAgICAgICAgICAgLmpvaW4oJywgJykgKyBcIilcIiArIGggKyBcIilcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gXCJMSU5FU1RSSU5HIChcIiArIHRoaXMubWFwQXJyYXkoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIHIueCArIFwiIFwiICsgci55ICsgKHdpdGhaID8gXCIgXCIgKyByLnogOiAnJyk7IH0pXG4gICAgICAgICAgICAuam9pbignLCAnKSArIFwiKVwiO1xuICAgIH07XG4gICAgRFBvbHlnb24ucHJvdG90eXBlLmZpbHRlciA9IGZ1bmN0aW9uIChmKSB7XG4gICAgICAgIHRoaXMucFBvaW50cyA9IHRoaXMucFBvaW50cy5maWx0ZXIoZik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgRFBvbHlnb24ucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIChmKSB7XG4gICAgICAgIHRoaXMucFBvaW50cyA9IHRoaXMubWFwQXJyYXkoZik7XG4gICAgICAgIHRoaXMuaG9sZXMgPSB0aGlzLmhvbGVzLm1hcChmdW5jdGlvbiAoaCkgeyByZXR1cm4gaC5tYXAoZik7IH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIERQb2x5Z29uLnByb3RvdHlwZS5tYXBBcnJheSA9IGZ1bmN0aW9uIChmKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBQb2ludHMubWFwKGYpO1xuICAgIH07XG4gICAgRFBvbHlnb24ucHJvdG90eXBlLnNvcnQgPSBmdW5jdGlvbiAoZikge1xuICAgICAgICB0aGlzLnBvaW50cy5zb3J0KGYpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIERQb2x5Z29uLnByb3RvdHlwZS5hdCA9IGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7XG4gICAgICAgIHJldHVybiB0aGlzLnBvaW50c1soaW5kZXggJSBsZW5ndGggKyBsZW5ndGgpICUgbGVuZ3RoXTtcbiAgICB9O1xuICAgIERQb2x5Z29uLnByb3RvdHlwZS5wb3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBQb2ludHMucG9wKCk7XG4gICAgfTtcbiAgICBEUG9seWdvbi5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoX2EgPSB0aGlzLnBQb2ludHMpLnB1c2guYXBwbHkoX2EsIF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChhcmdzKSwgZmFsc2UpKTtcbiAgICB9O1xuICAgIERQb2x5Z29uLnByb3RvdHlwZS5zaGlmdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucFBvaW50cy5zaGlmdCgpO1xuICAgIH07XG4gICAgRFBvbHlnb24ucHJvdG90eXBlLnVuc2hpZnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKF9hID0gdGhpcy5wUG9pbnRzKS51bnNoaWZ0LmFwcGx5KF9hLCBfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQoYXJncyksIGZhbHNlKSk7XG4gICAgfTtcbiAgICBEUG9seWdvbi5wcm90b3R5cGUucmV2ZXJzZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5wUG9pbnRzID0gdGhpcy5wUG9pbnRzLnJldmVyc2UoKTtcbiAgICAgICAgdGhpcy5ob2xlcyA9IHRoaXMuaG9sZXMubWFwKGZ1bmN0aW9uIChoKSB7IHJldHVybiBoLnJldmVyc2UoKTsgfSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgRFBvbHlnb24ucHJvdG90eXBlLmdldFZhbHVlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMucFBvaW50cy5tYXAoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIHIuZ2V0VmFsdWUoKTsgfSkgKyB0aGlzLmhvbGVzXG4gICAgICAgICAgICAucmVkdWNlKGZ1bmN0aW9uIChhLCBoKSB7IHJldHVybiBhICsgaC5nZXRWYWx1ZSgpOyB9LCAnJykpO1xuICAgIH07XG4gICAgRFBvbHlnb24ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gXCIoXCIgKyB0aGlzLm1hcEFycmF5KGZ1bmN0aW9uIChyKSB7IHJldHVybiByLnRvU3RyaW5nKCk7IH0pLmpvaW4oJywgJykgKyBcIilcIjtcbiAgICB9O1xuICAgIERQb2x5Z29uLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHAwID0gdGhpcy5maXJzdDtcbiAgICAgICAgaWYgKHAwICYmICF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhpcy5wdXNoKHAwLmNsb25lKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgRFBvbHlnb24ucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBwID0gdGhpcy5maXJzdDtcbiAgICAgICAgaWYgKHRoaXMubGVuZ3RoID4gMiAmJiBwICYmIHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aGlzLnBvcCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgRFBvbHlnb24ucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChwb2x5KSB7XG4gICAgICAgIHZhciByZXMgPSBuZXcgRFBvbHlnb24oX19zcHJlYWRBcnJheShfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQodGhpcy5wb2ludHMpLCBmYWxzZSksIF9fcmVhZChwb2x5LnBvaW50cyksIGZhbHNlKSkuY2xvc2UoKTtcbiAgICAgICAgcmVzLmhvbGVzID0gX19zcHJlYWRBcnJheShfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQodGhpcy5ob2xlcyksIGZhbHNlKSwgX19yZWFkKHBvbHkuaG9sZXMpLCBmYWxzZSkubWFwKGZ1bmN0aW9uIChoKSB7IHJldHVybiBoLmNsb25lKCk7IH0pO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG4gICAgRFBvbHlnb24ucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uIChwKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBQb2ludHMuc29tZShmdW5jdGlvbiAocSkgeyByZXR1cm4gcS5lcXVhbChwKTsgfSk7XG4gICAgfTtcbiAgICBEUG9seWdvbi5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciByZXMgPSBuZXcgRFBvbHlnb24odGhpcy5wb2ludHMubWFwKGZ1bmN0aW9uIChyKSB7IHJldHVybiByLmNsb25lKCk7IH0pKTtcbiAgICAgICAgcmVzLmhvbGVzID0gdGhpcy5ob2xlcy5tYXAoZnVuY3Rpb24gKGgpIHsgcmV0dXJuIGguY2xvbmUoKTsgfSk7XG4gICAgICAgIHJlcy5wcm9wZXJ0aWVzID0gdGhpcy5wcm9wZXJ0aWVzO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG4gICAgRFBvbHlnb24ucHJvdG90eXBlLmVxdWFsID0gZnVuY3Rpb24gKHApIHtcbiAgICAgICAgaWYgKCEocCBpbnN0YW5jZW9mIERQb2x5Z29uKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmxlbmd0aCAhPT0gcC5sZW5ndGggfHwgdGhpcy5ob2xlcy5sZW5ndGggIT09IHAuaG9sZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICh0aGlzLnNhbWUocCkgJiZcbiAgICAgICAgICAgIHRoaXMuaG9sZXMucmVkdWNlKGZ1bmN0aW9uIChhLCBob2xlKSB7IHJldHVybiBhICYmIHAuaG9sZXMuc29tZShmdW5jdGlvbiAocEhvbGVzKSB7IHJldHVybiBwSG9sZXMuc2FtZShob2xlKTsgfSk7IH0sIHRydWUpKTtcbiAgICB9O1xuICAgIERQb2x5Z29uLnByb3RvdHlwZS5zYW1lID0gZnVuY3Rpb24gKHApIHtcbiAgICAgICAgdmFyIHBDbG9uZSA9IHAuY2xvbmUoKS5jbG9zZSgpO1xuICAgICAgICB2YXIgdGhpc0FzU3RyaW5nID0gdGhpcy5jbG9uZSgpXG4gICAgICAgICAgICAuY2xvc2UoKVxuICAgICAgICAgICAgLnRvU3RyaW5nKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcENsb25lLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodGhpc0FzU3RyaW5nID09PSBwQ2xvbmUudG9TdHJpbmcoKSB8fCB0aGlzQXNTdHJpbmcgPT09IHBDbG9uZS5jbG9uZSgpLnJldmVyc2UoKVxuICAgICAgICAgICAgICAgIC50b1N0cmluZygpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwQ2xvbmUubmV4dFN0YXJ0KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgRFBvbHlnb24ucHJvdG90eXBlLmZpbmRJbmRleCA9IGZ1bmN0aW9uIChhKSB7XG4gICAgICAgIGlmIChhIGluc3RhbmNlb2YgRFBvaW50KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wb2ludHMuZmluZEluZGV4KGZ1bmN0aW9uICh0KSB7IHJldHVybiB0LmVxdWFsKGEpOyB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5wb2ludHMuZmluZEluZGV4KGEpO1xuICAgIH07XG4gICAgRFBvbHlnb24ucHJvdG90eXBlLmFwcHJveGltYXRpb24gPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICBpZiAoZSA9PT0gdm9pZCAwKSB7IGUgPSBNYXRoLnNxcnQodGhpcy5wZXJpbWV0ZXIpICogQVBQUk9YSU1BVElPTl9WQUxVRTsgfVxuICAgICAgICByZXR1cm4gbmV3IERQb2x5Z29uKHRoaXMuY2xvbmUoKS5kb3VnbGFzUGV1Y2tlcih0aGlzLnBQb2ludHMsIGUpKTtcbiAgICB9O1xuICAgIERQb2x5Z29uLnByb3RvdHlwZS5pbnNlcnRBZnRlciA9IGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHZhciBwb2ludHMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIHBvaW50c1tfaSAtIDFdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICAoX2EgPSB0aGlzLnBQb2ludHMpLnNwbGljZS5hcHBseShfYSwgX19zcHJlYWRBcnJheShbaW5kZXggKyAxLCAwXSwgX19yZWFkKHBvaW50cyksIGZhbHNlKSk7XG4gICAgfTtcbiAgICBEUG9seWdvbi5wcm90b3R5cGUucmVtb3ZlUGFydCA9IGZ1bmN0aW9uIChpbmRleCwgY291bnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucFBvaW50cy5zcGxpY2UoaW5kZXggKyAxLCBjb3VudCk7XG4gICAgfTtcbiAgICBEUG9seWdvbi5wcm90b3R5cGUuaGFzU2ltcGxlSW50ZXJzZWN0aW9uID0gZnVuY3Rpb24gKHApIHtcbiAgICAgICAgdmFyIGV4dGVuZDEgPSB0aGlzLmV4dGVuZDtcbiAgICAgICAgdmFyIGV4dGVuZDIgPSBwLmV4dGVuZDtcbiAgICAgICAgdmFyIGV4dGVuZDFwb2ludHMgPSBleHRlbmQxLnBvaW50cztcbiAgICAgICAgdmFyIGV4dGVuZDJwb2ludHMgPSBleHRlbmQyLnBvaW50cztcbiAgICAgICAgdmFyIGluMSA9IGV4dGVuZDFwb2ludHMuc29tZShmdW5jdGlvbiAodCkgeyByZXR1cm4gZXh0ZW5kMi5zaW1wbGVJbmNsdWRlKHQpOyB9KTtcbiAgICAgICAgdmFyIGluMiA9IGV4dGVuZDJwb2ludHMuc29tZShmdW5jdGlvbiAodCkgeyByZXR1cm4gZXh0ZW5kMS5zaW1wbGVJbmNsdWRlKHQpOyB9KTtcbiAgICAgICAgcmV0dXJuIGluMSB8fCBpbjI7XG4gICAgfTtcbiAgICBEUG9seWdvbi5wcm90b3R5cGUuc2ltcGxlSW5jbHVkZSA9IGZ1bmN0aW9uIChwKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNpbXBsZUluY2x1ZGVYKHApICYmIHRoaXMuc2ltcGxlSW5jbHVkZVkocCk7XG4gICAgfTtcbiAgICBEUG9seWdvbi5wcm90b3R5cGUuZHJhd1BvbHlnb25PbkNhbnZhcyA9IGZ1bmN0aW9uIChjYW52YXMsIGZpbGxDb2xvciwgc3Ryb2tlQ29sb3IsIHNoYWRvd0NvbG9yLCBsaW5lV2lkdGgsIHN0ZXBzKSB7XG4gICAgICAgIGlmIChsaW5lV2lkdGggPT09IHZvaWQgMCkgeyBsaW5lV2lkdGggPSAxOyB9XG4gICAgICAgIGlmIChzdGVwcyA9PT0gdm9pZCAwKSB7IHN0ZXBzID0gdGhpcy5sZW5ndGggLSAxOyB9XG4gICAgICAgIGlmICh0aGlzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHZhciBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgICAgICAgIGlmIChmaWxsQ29sb3IpIHtcbiAgICAgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gZmlsbENvbG9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN0cm9rZUNvbG9yKSB7XG4gICAgICAgICAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gc3Ryb2tlQ29sb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobGluZVdpZHRoKSB7XG4gICAgICAgICAgICAgICAgY3R4LmxpbmVXaWR0aCA9IGxpbmVXaWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmaWxsQ29sb3IgfHwgc3Ryb2tlQ29sb3IpIHtcbiAgICAgICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmdvQnlQYXRoKGN0eCwgc3RlcHMgJSB0aGlzLmxlbmd0aCk7XG4gICAgICAgICAgICBpZiAoc2hhZG93Q29sb3IpIHtcbiAgICAgICAgICAgICAgICBjdHguc2hhZG93Q29sb3IgPSBzaGFkb3dDb2xvcjtcbiAgICAgICAgICAgICAgICBjdHguc2hhZG93Qmx1ciA9IDA7XG4gICAgICAgICAgICAgICAgY3R4LnNoYWRvd09mZnNldFggPSAxO1xuICAgICAgICAgICAgICAgIGN0eC5zaGFkb3dPZmZzZXRZID0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmaWxsQ29sb3IpIHtcbiAgICAgICAgICAgICAgICBjdHguY2xvc2VQYXRoKCk7XG4gICAgICAgICAgICAgICAgY3R4LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdHJva2VDb2xvcikge1xuICAgICAgICAgICAgICAgIGN0eC5zdHJva2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIERQb2x5Z29uLnByb3RvdHlwZS5jbGVhclBvbHlnb25PbkNhbnZhcyA9IGZ1bmN0aW9uIChjYW52YXMpIHtcbiAgICAgICAgdmFyIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICB2YXIgb2xkID0gY3R4Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICAgICAgY3R4Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdkZXN0aW5hdGlvbi1vdXQnO1xuICAgICAgICB0aGlzLmdvQnlQYXRoKGN0eCk7XG4gICAgICAgIGN0eC5maWxsKCk7XG4gICAgICAgIGN0eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBvbGQ7XG4gICAgfTtcbiAgICBEUG9seWdvbi5wcm90b3R5cGUuY29udGFpbiA9IGZ1bmN0aW9uIChwLCBpc0JvcmRlckluc2lkZSkge1xuICAgICAgICB2YXIgZV8xMSwgX2E7XG4gICAgICAgIGlmIChpc0JvcmRlckluc2lkZSA9PT0gdm9pZCAwKSB7IGlzQm9yZGVySW5zaWRlID0gZmFsc2U7IH1cbiAgICAgICAgdmFyIHNpbXBsZUluY2x1ZGUgPSB0aGlzLnNpbXBsZUluY2x1ZGUocCk7XG4gICAgICAgIGlmICghc2ltcGxlSW5jbHVkZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBvbkJvcmRlciA9IHRoaXMub25Cb3JkZXIocCk7XG4gICAgICAgIGlmIChvbkJvcmRlcikge1xuICAgICAgICAgICAgcmV0dXJuIGlzQm9yZGVySW5zaWRlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwb2x5ID0gdGhpcy5kZWludGVyc2VjdGlvbjtcbiAgICAgICAgdmFyIHRvdGFsRmkgPSAwO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yICh2YXIgX2IgPSBfX3ZhbHVlcyhwb2x5Lmxvb3BQb2ludHNHZW5lcmF0b3IoKSgpKSwgX2MgPSBfYi5uZXh0KCk7ICFfYy5kb25lOyBfYyA9IF9iLm5leHQoKSkge1xuICAgICAgICAgICAgICAgIHZhciBfZCA9IF9fcmVhZChfYy52YWx1ZSwgMiksIF9lID0gX2RbMF0sIHggPSBfZS54LCB5ID0gX2UueSwgX2YgPSBfZFsxXSwgYSA9IF9mLngsIGIgPSBfZi55O1xuICAgICAgICAgICAgICAgIHZhciBsaW5lMSA9IG5ldyBETGluZSh4IC0gcC54LCB5IC0gcC55LCAwKTtcbiAgICAgICAgICAgICAgICB2YXIgbGluZTIgPSBuZXcgRExpbmUoYSAtIHAueCwgYiAtIHAueSwgMCk7XG4gICAgICAgICAgICAgICAgdmFyIGZpRGlmID0gbGluZTEuZmluZEZpKGxpbmUyKTtcbiAgICAgICAgICAgICAgICBpZiAobGluZTEudmVjdG9yUHJvZHVjdChsaW5lMikuYyA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdG90YWxGaSArPSBmaURpZjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRvdGFsRmkgLT0gZmlEaWY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlXzExXzEpIHsgZV8xMSA9IHsgZXJyb3I6IGVfMTFfMSB9OyB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAoX2MgJiYgIV9jLmRvbmUgJiYgKF9hID0gX2IucmV0dXJuKSkgX2EuY2FsbChfYik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMTEpIHRocm93IGVfMTEuZXJyb3I7IH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgZXBzID0gTWF0aC5QSSAvIDEwMDAwO1xuICAgICAgICB2YXIgYWJzVG90YWxGaSA9IE1hdGguYWJzKHRvdGFsRmkpO1xuICAgICAgICBpZiAoYWJzVG90YWxGaSA8IGVwcykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKE1hdGguYWJzKDIgKiBNYXRoLlBJIC0gYWJzVG90YWxGaSkgPCBlcHMpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY29udGFpbnMyIGZhaWxkJyk7XG4gICAgfTtcbiAgICBEUG9seWdvbi5wcm90b3R5cGUub25Cb3JkZXIgPSBmdW5jdGlvbiAocCkge1xuICAgICAgICB2YXIgZV8xMiwgX2E7XG4gICAgICAgIHZhciBzaW1wbGVJbmNsdWRlID0gdGhpcy5zaW1wbGVJbmNsdWRlKHApO1xuICAgICAgICBpZiAoc2ltcGxlSW5jbHVkZSkge1xuICAgICAgICAgICAgdmFyIHBvbHkgPSB0aGlzLmRlaW50ZXJzZWN0aW9uO1xuICAgICAgICAgICAgdmFyIGhhc1NhbWVQb2ludCA9IHRoaXMucG9pbnRzLnNvbWUoZnVuY3Rpb24gKHBvaW50KSB7IHJldHVybiBwb2ludC5lcXVhbChwKTsgfSk7XG4gICAgICAgICAgICBpZiAoaGFzU2FtZVBvaW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIF9iID0gX192YWx1ZXMocG9seS5sb29wUG9pbnRzR2VuZXJhdG9yKHRydWUpKCkpLCBfYyA9IF9iLm5leHQoKTsgIV9jLmRvbmU7IF9jID0gX2IubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfZCA9IF9fcmVhZChfYy52YWx1ZSwgMyksIHBvbHlnb25MaW5lID0gX2RbMl07XG4gICAgICAgICAgICAgICAgICAgIHZhciBvbkJvcmRlciA9IHBvbHlnb25MaW5lLngocCkuZXF1YWwocCkgJiYgcG9seWdvbkxpbmUuaW5SYW5nZShwKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uQm9yZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlXzEyXzEpIHsgZV8xMiA9IHsgZXJyb3I6IGVfMTJfMSB9OyB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2MgJiYgIV9jLmRvbmUgJiYgKF9hID0gX2IucmV0dXJuKSkgX2EuY2FsbChfYik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xMikgdGhyb3cgZV8xMi5lcnJvcjsgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIERQb2x5Z29uLnByb3RvdHlwZS5uZXh0U3RhcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgICB0aGlzLnB1c2godGhpcy5zaGlmdCgpKTtcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIERQb2x5Z29uLnByb3RvdHlwZS5yZW1vdmVEdXBsaWNhdGVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgcDEgPSB0aGlzLmF0KGkpO1xuICAgICAgICAgICAgdmFyIHAyID0gdGhpcy5hdChpICsgMSk7XG4gICAgICAgICAgICBpZiAocDEuZXF1YWwocDIpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVQYXJ0KGksIDEpO1xuICAgICAgICAgICAgICAgIGktLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIERQb2x5Z29uLnBhcnNlID0gZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEUG9seWdvbihhLm1hcChmdW5jdGlvbiAocikgeyByZXR1cm4gRFBvaW50LnBhcnNlKHIpOyB9KSk7XG4gICAgfTtcbiAgICBEUG9seWdvbi5wcm90b3R5cGUudG9BcnJheU9mQ29vcmRzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBBcnJheShmdW5jdGlvbiAocikgeyByZXR1cm4gci50b0Nvb3JkcygpOyB9KTtcbiAgICB9O1xuICAgIERQb2x5Z29uLnByb3RvdHlwZS5kaXZpZGVUb1BpZWNlcyA9IGZ1bmN0aW9uIChwaWVjZXNDb3VudCkge1xuICAgICAgICB2YXIgZV8xMywgX2E7XG4gICAgICAgIHZhciBmdWxsTGVuZ3RoID0gdGhpcy5mdWxsTGVuZ3RoO1xuICAgICAgICB2YXIgcGllY2VMZW5ndGggPSBmdWxsTGVuZ3RoIC8gcGllY2VzQ291bnQ7XG4gICAgICAgIHZhciBjdXJyZW50UGllY2VMZW5ndGggPSBwaWVjZUxlbmd0aDtcbiAgICAgICAgdmFyIF9sb29wXzMgPSBmdW5jdGlvbiAocDEsIHAyLCBpKSB7XG4gICAgICAgICAgICB2YXIgZCA9IHAxLmRpc3RhbmNlKHAyKTtcbiAgICAgICAgICAgIGlmIChkID09PSBjdXJyZW50UGllY2VMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBwMi5wcm9wZXJ0aWVzLnBpZWNlQm9yZGVyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjdXJyZW50UGllY2VMZW5ndGggPSBwaWVjZUxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGQgLSBjdXJyZW50UGllY2VMZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNpcmNsZSA9IG5ldyBEQ2lyY2xlKHAxLCBjdXJyZW50UGllY2VMZW5ndGgpO1xuICAgICAgICAgICAgICAgIHZhciBsaW5lXzEgPSBwMS5maW5kTGluZShwMik7XG4gICAgICAgICAgICAgICAgdmFyIGludGVyc2VjdGlvblBvaW50ID0gbGluZV8xLmludGVyc2VjdGlvbldpdGhDaXJjbGUoY2lyY2xlKVxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChwKSB7IHJldHVybiBsaW5lXzEuaW5SYW5nZShwLCBDTE9TRV9UT19JTlRFUlNFQ1RJT05fRElTVEFOQ0UpOyB9KVswXTtcbiAgICAgICAgICAgICAgICBpbnRlcnNlY3Rpb25Qb2ludC5wcm9wZXJ0aWVzLnBpZWNlQm9yZGVyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzXzEuaW5zZXJ0QWZ0ZXIoaSwgaW50ZXJzZWN0aW9uUG9pbnQpO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRQaWVjZUxlbmd0aCA9IHBpZWNlTGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFBpZWNlTGVuZ3RoIC09IGQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHZhciB0aGlzXzEgPSB0aGlzO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yICh2YXIgX2IgPSBfX3ZhbHVlcyh0aGlzLmxvb3BQb2ludHNHZW5lcmF0b3IoKSgpKSwgX2MgPSBfYi5uZXh0KCk7ICFfYy5kb25lOyBfYyA9IF9iLm5leHQoKSkge1xuICAgICAgICAgICAgICAgIHZhciBfZCA9IF9fcmVhZChfYy52YWx1ZSwgNCksIHAxID0gX2RbMF0sIHAyID0gX2RbMV0sIGkgPSBfZFszXTtcbiAgICAgICAgICAgICAgICBfbG9vcF8zKHAxLCBwMiwgaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVfMTNfMSkgeyBlXzEzID0geyBlcnJvcjogZV8xM18xIH07IH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChfYyAmJiAhX2MuZG9uZSAmJiAoX2EgPSBfYi5yZXR1cm4pKSBfYS5jYWxsKF9iKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xMykgdGhyb3cgZV8xMy5lcnJvcjsgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgRFBvbHlnb24ucHJvdG90eXBlLnByZXBhcmVUb0Zhc3RTZWFyY2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBlXzE0LCBfYTtcbiAgICAgICAgdGhpcy5zZWFyY2hTdG9yZSA9IHt9O1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yICh2YXIgX2IgPSBfX3ZhbHVlcyh0aGlzLnBvaW50cyksIF9jID0gX2IubmV4dCgpOyAhX2MuZG9uZTsgX2MgPSBfYi5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2QgPSBfYy52YWx1ZSwgeCA9IF9kLngsIHkgPSBfZC55LCB6ID0gX2QuejtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2VhcmNoU3RvcmVbeF0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hTdG9yZVt4XSA9IHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2VhcmNoU3RvcmVbeF1beV0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hTdG9yZVt4XVt5XSA9IHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFN0b3JlW3hdW3ldW3ogfHwgJ3VuZGVmaW5lZCddID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZV8xNF8xKSB7IGVfMTQgPSB7IGVycm9yOiBlXzE0XzEgfTsgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKF9jICYmICFfYy5kb25lICYmIChfYSA9IF9iLnJldHVybikpIF9hLmNhbGwoX2IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzE0KSB0aHJvdyBlXzE0LmVycm9yOyB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIERQb2x5Z29uLnByb3RvdHlwZS5mYXN0SGFzID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgIHZhciB4ID0gX2EueCwgeSA9IF9hLnksIHogPSBfYS56O1xuICAgICAgICBpZiAoIXRoaXMuc2VhcmNoU3RvcmVbeF0pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuc2VhcmNoU3RvcmVbeF1beV0pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuc2VhcmNoU3RvcmVbeF1beV1beiB8fCAndW5kZWZpbmVkJ10pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5zZWFyY2hTdG9yZVt4XVt5XVt6IHx8ICd1bmRlZmluZWQnXTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEUG9seWdvbi5wcm90b3R5cGUsIFwiZ3Jvd2luZ1BpZWNlc0dlbmVyYXRvclwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHBvbHlnb24gPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgciwgX2EsIF9iLCBwLCBlXzE1XzE7XG4gICAgICAgICAgICAgICAgdmFyIGVfMTUsIF9jO1xuICAgICAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2QpIHtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfZC5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBuZXcgRFBvbHlnb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZC5sYWJlbCA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2QudHJ5cy5wdXNoKFsxLCA2LCA3LCA4XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2EgPSBfX3ZhbHVlcyhwb2x5Z29uLnBQb2ludHMpLCBfYiA9IF9hLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZC5sYWJlbCA9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhX2IuZG9uZSkgcmV0dXJuIFszLCA1XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwID0gX2IudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgci5wdXNoKHApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcC5wcm9wZXJ0aWVzLnBpZWNlQm9yZGVyKSByZXR1cm4gWzMsIDRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCwgci5jbG9uZSgpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZC5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2QubGFiZWwgPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9iID0gX2EubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMywgMl07XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6IHJldHVybiBbMywgOF07XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZV8xNV8xID0gX2Quc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVfMTUgPSB7IGVycm9yOiBlXzE1XzEgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMsIDhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfYiAmJiAhX2IuZG9uZSAmJiAoX2MgPSBfYS5yZXR1cm4pKSBfYy5jYWxsKF9hKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzE1KSB0aHJvdyBlXzE1LmVycm9yOyB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgODogcmV0dXJuIFsyLCByLmNsb25lKCldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgRFBvbHlnb24ucHJvdG90eXBlLnNpbXBsZVVuaW9uID0gZnVuY3Rpb24gKHApIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhciByZXMgPSB0aGlzLnNpbXBsZUxvZ2ljRnVuY3Rpb24ocCwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgICAgICBpZiAocmVzID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVzIGluc3RhbmNlb2YgRFBvbHlnb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgRFBvbHlnb24ucHJvdG90eXBlLnNpbXBsZUludGVyc2VjdGlvbiA9IGZ1bmN0aW9uIChwKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNpbXBsZUxvZ2ljRnVuY3Rpb24ocCwgZmFsc2UsIGZhbHNlKTtcbiAgICB9O1xuICAgIERQb2x5Z29uLnByb3RvdHlwZS5zaW1wbGVEaWZmZXJlbmNlID0gZnVuY3Rpb24gKHApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2ltcGxlTG9naWNGdW5jdGlvbihwLCB0cnVlLCBmYWxzZSk7XG4gICAgfTtcbiAgICBEUG9seWdvbi5wcm90b3R5cGUuc21hcnRVbmlvbiA9IGZ1bmN0aW9uIChwKSB7XG4gICAgICAgIHZhciBlXzE2LCBfYTtcbiAgICAgICAgdmFyIHJlcyA9IHRoaXMuY2xvbmUoKS5zaW1wbGVVbmlvbihwKTtcbiAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgdmFyIGFsbEhvbGVzID0gX19zcHJlYWRBcnJheShfX3NwcmVhZEFycmF5KF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZCh0aGlzLmhvbGVzKSwgZmFsc2UpLCBfX3JlYWQocC5ob2xlcyksIGZhbHNlKSwgX19yZWFkKHJlcy5ob2xlcyksIGZhbHNlKS5tYXAoZnVuY3Rpb24gKGgpIHsgcmV0dXJuIGguY2xvbmUoKTsgfSk7XG4gICAgICAgICAgICB2YXIgX2xvb3BfNCA9IGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICAgICAgdmFyIGVfMTcsIF9iO1xuICAgICAgICAgICAgICAgIHZhciBfbG9vcF81ID0gZnVuY3Rpb24gKGIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGEuZXF1YWwoYikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImNvbnRpbnVlXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdmFyIHIgPSBhLnNpbXBsZVVuaW9uKGIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWxsSG9sZXMgPSBhbGxIb2xlcy5maWx0ZXIoZnVuY3Rpb24gKHYpIHsgcmV0dXJuICF2LmVxdWFsKGEpICYmICF2LmVxdWFsKGIpOyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbEhvbGVzLnB1c2gocik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGFsbEhvbGVzXzIgPSAoZV8xNyA9IHZvaWQgMCwgX192YWx1ZXMoYWxsSG9sZXMpKSwgYWxsSG9sZXNfMl8xID0gYWxsSG9sZXNfMi5uZXh0KCk7ICFhbGxIb2xlc18yXzEuZG9uZTsgYWxsSG9sZXNfMl8xID0gYWxsSG9sZXNfMi5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiID0gYWxsSG9sZXNfMl8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgX2xvb3BfNShiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZV8xN18xKSB7IGVfMTcgPSB7IGVycm9yOiBlXzE3XzEgfTsgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFsbEhvbGVzXzJfMSAmJiAhYWxsSG9sZXNfMl8xLmRvbmUgJiYgKF9iID0gYWxsSG9sZXNfMi5yZXR1cm4pKSBfYi5jYWxsKGFsbEhvbGVzXzIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xNykgdGhyb3cgZV8xNy5lcnJvcjsgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGFsbEhvbGVzXzEgPSBfX3ZhbHVlcyhhbGxIb2xlcyksIGFsbEhvbGVzXzFfMSA9IGFsbEhvbGVzXzEubmV4dCgpOyAhYWxsSG9sZXNfMV8xLmRvbmU7IGFsbEhvbGVzXzFfMSA9IGFsbEhvbGVzXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhID0gYWxsSG9sZXNfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBfbG9vcF80KGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlXzE2XzEpIHsgZV8xNiA9IHsgZXJyb3I6IGVfMTZfMSB9OyB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYWxsSG9sZXNfMV8xICYmICFhbGxIb2xlc18xXzEuZG9uZSAmJiAoX2EgPSBhbGxIb2xlc18xLnJldHVybikpIF9hLmNhbGwoYWxsSG9sZXNfMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xNikgdGhyb3cgZV8xNi5lcnJvcjsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzLmhvbGVzID0gYWxsSG9sZXM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIERQb2x5Z29uLnByb3RvdHlwZS50b1RyaWFuZ2xlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGlubmVyQW5kTm90SW50ZXJzZWN0ID0gZnVuY3Rpb24gKHBvbHksIHAxLCBwMikge1xuICAgICAgICAgICAgdmFyIGwgPSBwMS5maW5kTGluZShwMik7XG4gICAgICAgICAgICB2YXIgY2VudGVyID0gbC5jZW50ZXI7XG4gICAgICAgICAgICB2YXIgaW50ZXJzZWN0aW9ucyA9IHBvbHkuaG9sZXMucmVkdWNlKGZ1bmN0aW9uIChhLCBob2xlKSB7IHJldHVybiBhICYmIEJvb2xlYW4oaG9sZS5jbG9uZSgpLmNsb3NlKClcbiAgICAgICAgICAgICAgICAuaW50ZXJzZWN0aW9uKGwsIHRydWUpLmxlbmd0aCk7IH0sIEJvb2xlYW4ocG9seS5jbG9uZSgpLmNsb3NlKClcbiAgICAgICAgICAgICAgICAuaW50ZXJzZWN0aW9uKGwsIHRydWUpLmxlbmd0aCkpO1xuICAgICAgICAgICAgdmFyIGNvbnRhaW4gPSBwb2x5LmhvbGVzLnJlZHVjZShmdW5jdGlvbiAoYSwgaG9sZSkgeyByZXR1cm4gYSAmJiAhaG9sZVxuICAgICAgICAgICAgICAgIC5jb250YWluKGNlbnRlcik7IH0sIHBvbHkuY29udGFpbihjZW50ZXIpKTtcbiAgICAgICAgICAgIHJldHVybiAhaW50ZXJzZWN0aW9ucyAmJiBjb250YWluO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgZ2V0VHJpYW5nbGUgPSBmdW5jdGlvbiAocG9seSkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2x5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHAwID0gcG9seS5hdCgwKTtcbiAgICAgICAgICAgICAgICB2YXIgcDEgPSBwb2x5LmF0KDEpO1xuICAgICAgICAgICAgICAgIHZhciBwMiA9IHBvbHkuYXQoMik7XG4gICAgICAgICAgICAgICAgaWYgKGlubmVyQW5kTm90SW50ZXJzZWN0KHBvbHksIHAwLCBwMikpIHtcbiAgICAgICAgICAgICAgICAgICAgcG9seS5yZW1vdmVQYXJ0KDAsIDEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERQb2x5Z29uKFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHAwLmNsb25lKCksXG4gICAgICAgICAgICAgICAgICAgICAgICBwMS5jbG9uZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgcDIuY2xvbmUoKVxuICAgICAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcG9seS5wdXNoKHBvbHkuc2hpZnQoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgcCA9IHRoaXMuY2xvbmUoKS5jbG9ja1dpc2Uub3BlbigpO1xuICAgICAgICB3aGlsZSAocC5ob2xlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHZhciBoID0gcC5ob2xlcy5zaGlmdCgpXG4gICAgICAgICAgICAgICAgLmNsb25lKClcbiAgICAgICAgICAgICAgICAuY2xvY2tXaXNlXG4gICAgICAgICAgICAgICAgLnJldmVyc2UoKVxuICAgICAgICAgICAgICAgIC5jbG9zZSgpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlubmVyQW5kTm90SW50ZXJzZWN0KHAsIHAuZmlyc3QsIGguZmlyc3QpKSB7XG4gICAgICAgICAgICAgICAgICAgIHAuaW5zZXJ0QWZ0ZXIuYXBwbHkocCwgX19zcHJlYWRBcnJheShfX3NwcmVhZEFycmF5KFswXSwgX19yZWFkKGgucG9pbnRzKSwgZmFsc2UpLCBbcC5maXJzdF0sIGZhbHNlKSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwLnB1c2gocC5zaGlmdCgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVzID0gW107XG4gICAgICAgIHdoaWxlIChwLmxlbmd0aCA+IDMpIHtcbiAgICAgICAgICAgIHZhciB0cmlhbmdsZSA9IGdldFRyaWFuZ2xlKHApO1xuICAgICAgICAgICAgaWYgKHRyaWFuZ2xlKSB7XG4gICAgICAgICAgICAgICAgcmVzLnB1c2godHJpYW5nbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlcy5wdXNoKHApO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG4gICAgRFBvbHlnb24ucHJvdG90eXBlLmdldFRyaWFuZ2xlc1BvaW50SW5kZXhlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGlubmVyQW5kTm90SW50ZXJzZWN0ID0gZnVuY3Rpb24gKHBvbHksIHAxLCBwMikge1xuICAgICAgICAgICAgdmFyIGwgPSBwMS5maW5kTGluZShwMik7XG4gICAgICAgICAgICB2YXIgY2VudGVyID0gbC5jZW50ZXI7XG4gICAgICAgICAgICB2YXIgaW50ZXJzZWN0aW9ucyA9IHBvbHkuaG9sZXMucmVkdWNlKGZ1bmN0aW9uIChhLCBob2xlKSB7IHJldHVybiBhICYmIEJvb2xlYW4oaG9sZS5jbG9uZSgpLmNsb3NlKClcbiAgICAgICAgICAgICAgICAuaW50ZXJzZWN0aW9uKGwsIHRydWUpLmxlbmd0aCk7IH0sIEJvb2xlYW4ocG9seS5jbG9uZSgpLmNsb3NlKClcbiAgICAgICAgICAgICAgICAuaW50ZXJzZWN0aW9uKGwsIHRydWUpLmxlbmd0aCkpO1xuICAgICAgICAgICAgdmFyIGNvbnRhaW4gPSBwb2x5LmhvbGVzLnJlZHVjZShmdW5jdGlvbiAoYSwgaG9sZSkgeyByZXR1cm4gYSAmJiAhaG9sZVxuICAgICAgICAgICAgICAgIC5jb250YWluKGNlbnRlcik7IH0sIHBvbHkuY29udGFpbihjZW50ZXIpKTtcbiAgICAgICAgICAgIHJldHVybiAhaW50ZXJzZWN0aW9ucyAmJiBjb250YWluO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgZ2V0VHJpYW5nbGUgPSBmdW5jdGlvbiAocG9seSkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2x5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHAwID0gcG9seS5hdCgwKTtcbiAgICAgICAgICAgICAgICB2YXIgcDEgPSBwb2x5LmF0KDEpO1xuICAgICAgICAgICAgICAgIHZhciBwMiA9IHBvbHkuYXQoMik7XG4gICAgICAgICAgICAgICAgaWYgKGlubmVyQW5kTm90SW50ZXJzZWN0KHBvbHksIHAwLCBwMikpIHtcbiAgICAgICAgICAgICAgICAgICAgcG9seS5yZW1vdmVQYXJ0KDAsIDEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgcDAucHJvcGVydGllcy5pbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHAxLnByb3BlcnRpZXMuaW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICBwMi5wcm9wZXJ0aWVzLmluZGV4XG4gICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBvbHkucHVzaChwb2x5LnNoaWZ0KCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHAgPSB0aGlzLmNsb25lKCk7XG4gICAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICAgIHAucG9pbnRzLmZvckVhY2goZnVuY3Rpb24gKGYpIHtcbiAgICAgICAgICAgIGYucHJvcGVydGllcy5pbmRleCA9IGluZGV4Kys7XG4gICAgICAgIH0pO1xuICAgICAgICBwLmhvbGVzLmZvckVhY2goZnVuY3Rpb24gKGgpIHtcbiAgICAgICAgICAgIGgucFBvaW50cy5mb3JFYWNoKGZ1bmN0aW9uIChmKSB7XG4gICAgICAgICAgICAgICAgZi5wcm9wZXJ0aWVzLmluZGV4ID0gaW5kZXgrKztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcCA9IHAuY2xvY2tXaXNlLm9wZW4oKTtcbiAgICAgICAgd2hpbGUgKHAuaG9sZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB2YXIgaCA9IHAuaG9sZXMuc2hpZnQoKVxuICAgICAgICAgICAgICAgIC5jbG9uZSgpXG4gICAgICAgICAgICAgICAgLmNsb2NrV2lzZVxuICAgICAgICAgICAgICAgIC5yZXZlcnNlKClcbiAgICAgICAgICAgICAgICAuY2xvc2UoKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChpbm5lckFuZE5vdEludGVyc2VjdChwLCBwLmZpcnN0LCBoLmZpcnN0KSkge1xuICAgICAgICAgICAgICAgICAgICBwLmluc2VydEFmdGVyLmFwcGx5KHAsIF9fc3ByZWFkQXJyYXkoX19zcHJlYWRBcnJheShbMF0sIF9fcmVhZChoLnBvaW50cyksIGZhbHNlKSwgW3AuZmlyc3RdLCBmYWxzZSkpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcC5wdXNoKHAuc2hpZnQoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJlcyA9IFtdO1xuICAgICAgICB3aGlsZSAocC5sZW5ndGggPiAzKSB7XG4gICAgICAgICAgICB2YXIgdHJpYW5nbGUgPSBnZXRUcmlhbmdsZShwKTtcbiAgICAgICAgICAgIGlmICh0cmlhbmdsZSkge1xuICAgICAgICAgICAgICAgIHJlcy5wdXNoLmFwcGx5KHJlcywgX19zcHJlYWRBcnJheShbXSwgX19yZWFkKHRyaWFuZ2xlKSwgZmFsc2UpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXMucHVzaC5hcHBseShyZXMsIF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChwLnBvaW50cy5tYXAoZnVuY3Rpb24gKGYpIHsgcmV0dXJuIGYucHJvcGVydGllcy5pbmRleDsgfSkpLCBmYWxzZSkpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KERQb2x5Z29uLnByb3RvdHlwZSwgXCJjbG9zZWRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZpcnN0LmVxdWFsKHRoaXMubGFzdCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBEUG9seWdvbi5wcm90b3R5cGUuYnVmZmVyID0gZnVuY3Rpb24gKHYsIHF1YWRyYW50U2VnbWVudHMsIHR5cGUpIHtcbiAgICAgICAgaWYgKHF1YWRyYW50U2VnbWVudHMgPT09IHZvaWQgMCkgeyBxdWFkcmFudFNlZ21lbnRzID0gNjQ7IH1cbiAgICAgICAgaWYgKHR5cGUgPT09IHZvaWQgMCkgeyB0eXBlID0gRFBvbHlnb24uQ0FQX1JPVU5EOyB9XG4gICAgICAgIHZhciByZWFkZXIgPSBuZXcganN0c0lvLldLVFJlYWRlcigpO1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBub0hvbGVzID0gX2Eubm9Ib2xlcywgY2xvc2VkID0gX2EuY2xvc2VkO1xuICAgICAgICB2YXIgcG9pbnRzID0gcmVhZGVyXG4gICAgICAgICAgICAucmVhZChub0hvbGVzLnRvV0tUKGNsb3NlZCA/IERQb2x5Z29uLldLVF9QT0xZR09OIDogRFBvbHlnb24uV0tUX0xJTkVTVFJJTkcpKVxuICAgICAgICAgICAgLmJ1ZmZlcih2LCBxdWFkcmFudFNlZ21lbnRzLCB0eXBlKVxuICAgICAgICAgICAgLmdldENvb3JkaW5hdGVzKCk7XG4gICAgICAgIHJldHVybiBuZXcgRFBvbHlnb24ocG9pbnRzLm1hcChmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgIHZhciB4ID0gX2EueCwgeSA9IF9hLnk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IERQb2ludCh4LCB5KTtcbiAgICAgICAgfSkpO1xuICAgIH07XG4gICAgRFBvbHlnb24ucHJvdG90eXBlLnNpZGVCdWZmZXJzID0gZnVuY3Rpb24gKHYsIHF1YWRyYW50U2VnbWVudHMpIHtcbiAgICAgICAgaWYgKHF1YWRyYW50U2VnbWVudHMgPT09IHZvaWQgMCkgeyBxdWFkcmFudFNlZ21lbnRzID0gNjQ7IH1cbiAgICAgICAgdmFyIF9hID0gdGhpcywgZmlyc3QgPSBfYS5maXJzdCwgbGFzdCA9IF9hLmxhc3Q7XG4gICAgICAgIHZhciBidWZmZXIgPSB0aGlzLmJ1ZmZlcih2LCBxdWFkcmFudFNlZ21lbnRzLCBEUG9seWdvbi5DQVBfRkxBVCkub3BlbigpO1xuICAgICAgICB2YXIgX2IgPSBfX3JlYWQoZmlyc3Quc29ydEJ5RGlzdGFuY2UoYnVmZmVyKS5wb2ludHMubWFwKGZ1bmN0aW9uIChyKSB7IHJldHVybiByLnByb3BlcnRpZXMuaW5kZXg7IH0pLCAyKSwgc3RhcnQwID0gX2JbMF0sIHN0YXJ0MSA9IF9iWzFdO1xuICAgICAgICB2YXIgX2MgPSBfX3JlYWQobGFzdC5zb3J0QnlEaXN0YW5jZShidWZmZXIpLnBvaW50cy5tYXAoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIHIucHJvcGVydGllcy5pbmRleDsgfSksIDIpLCBlbmQwID0gX2NbMF0sIGVuZDEgPSBfY1sxXTtcbiAgICAgICAgdmFyIGZyb21Qb2ludCA9IE1hdGgubWluKE1hdGgubWF4KHN0YXJ0MCwgc3RhcnQxKSwgTWF0aC5tYXgoZW5kMCwgZW5kMSkpO1xuICAgICAgICB2YXIgdG9Qb2ludCA9IE1hdGgubWF4KE1hdGgubWluKHN0YXJ0MCwgc3RhcnQxKSwgTWF0aC5taW4oZW5kMCwgZW5kMSkpO1xuICAgICAgICB2YXIgbGluZVBhcnQgPSBuZXcgRFBvbHlnb24oYnVmZmVyLnJlbW92ZVBhcnQoZnJvbVBvaW50IC0gMSwgdG9Qb2ludCAtIGZyb21Qb2ludCArIDEpKTtcbiAgICAgICAgYnVmZmVyLnVuc2hpZnQoYnVmZmVyLnBvcCgpKTtcbiAgICAgICAgcmV0dXJuIFtsaW5lUGFydCwgYnVmZmVyXTtcbiAgICB9O1xuICAgIERQb2x5Z29uLnByb3RvdHlwZS5iZXppZXIgPSBmdW5jdGlvbiAoc3RlcCkge1xuICAgICAgICBpZiAoc3RlcCA9PT0gdm9pZCAwKSB7IHN0ZXAgPSAwLjE7IH1cbiAgICAgICAgdmFyIHJlcyA9IG5ldyBEUG9seWdvbigpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDE7IGkgKz0gc3RlcCkge1xuICAgICAgICAgICAgcmVzLnB1c2godGhpcy5jbG9uZSgpLmdldEJlemllclBvaW50KGkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG4gICAgRFBvbHlnb24ucHJvdG90eXBlLnNldEdyb3dpbmdIZWlnaHQgPSBmdW5jdGlvbiAoZnJvbSwgdG8pIHtcbiAgICAgICAgdmFyIGZ1bGxMZW5ndGggPSB0aGlzLmZ1bGxMZW5ndGg7XG4gICAgICAgIHZhciBwcmV2UG9pbnQgPSB0aGlzLmZpcnN0O1xuICAgICAgICB2YXIgZCA9IHRvIC0gZnJvbTtcbiAgICAgICAgdmFyIGN1cnJlbnREaXN0YW5jZSA9IDA7XG4gICAgICAgIHRoaXMubG9vcCgpXG4gICAgICAgICAgICAuc2V0WihmdW5jdGlvbiAocCkge1xuICAgICAgICAgICAgY3VycmVudERpc3RhbmNlICs9IHByZXZQb2ludC5kaXN0YW5jZShwKTtcbiAgICAgICAgICAgIHByZXZQb2ludCA9IHA7XG4gICAgICAgICAgICByZXR1cm4gZnJvbSArIGN1cnJlbnREaXN0YW5jZSAvIGZ1bGxMZW5ndGggKiBkO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLnJ1bigpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIERQb2x5Z29uLnByb3RvdHlwZS5sb29wUG9pbnRzR2VuZXJhdG9yID0gZnVuY3Rpb24gKHdpdGhMaW5lKSB7XG4gICAgICAgIGlmICh3aXRoTGluZSA9PT0gdm9pZCAwKSB7IHdpdGhMaW5lID0gZmFsc2U7IH1cbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGksIHAxLCBwMjtcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgX2EubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShpIDwgdGhhdC5sZW5ndGggLSAxKSkgcmV0dXJuIFszLCA0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHAxID0gdGhhdC5hdChpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHAyID0gdGhhdC5hdChpICsgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQsIFtwMSwgcDIsIHdpdGhMaW5lID8gcDEuZmluZExpbmUocDIpIDogdW5kZWZpbmVkLCBpXV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hLmxhYmVsID0gMztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszLCAxXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gWzJdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgRFBvbHlnb24ucHJvdG90eXBlLmdldEJlemllclBvaW50ID0gZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgdmFyIGVfMTgsIF9hO1xuICAgICAgICBpZiAodGhpcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZpcnN0O1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKHZhciBfYiA9IF9fdmFsdWVzKHRoaXMubG9vcFBvaW50c0dlbmVyYXRvcigpKCkpLCBfYyA9IF9iLm5leHQoKTsgIV9jLmRvbmU7IF9jID0gX2IubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9kID0gX19yZWFkKF9jLnZhbHVlLCAyKSwgcDEgPSBfZFswXSwgcDIgPSBfZFsxXTtcbiAgICAgICAgICAgICAgICBwMS5tb3ZlKHAyLmNsb25lKCkubW92ZShwMS5jbG9uZSgpLm1pbnVzKCkpXG4gICAgICAgICAgICAgICAgICAgIC5zY2FsZSh2KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVfMThfMSkgeyBlXzE4ID0geyBlcnJvcjogZV8xOF8xIH07IH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChfYyAmJiAhX2MuZG9uZSAmJiAoX2EgPSBfYi5yZXR1cm4pKSBfYS5jYWxsKF9iKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xOCkgdGhyb3cgZV8xOC5lcnJvcjsgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucG9wKCk7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEJlemllclBvaW50KHYpO1xuICAgIH07XG4gICAgRFBvbHlnb24ucHJvdG90eXBlLnNpbXBsZUluY2x1ZGVYID0gZnVuY3Rpb24gKHApIHtcbiAgICAgICAgdmFyIHggPSBwLng7XG4gICAgICAgIHJldHVybiB0aGlzLm1pblggPD0geCAmJiB0aGlzLm1heFggPj0geDtcbiAgICB9O1xuICAgIERQb2x5Z29uLnByb3RvdHlwZS5zaW1wbGVJbmNsdWRlWSA9IGZ1bmN0aW9uIChwKSB7XG4gICAgICAgIHZhciB5ID0gcC55O1xuICAgICAgICByZXR1cm4gdGhpcy5taW5ZIDw9IHkgJiYgdGhpcy5tYXhZID49IHk7XG4gICAgfTtcbiAgICBEUG9seWdvbi5wcm90b3R5cGUuZG91Z2xhc1BldWNrZXIgPSBmdW5jdGlvbiAocG9pbnRzLCBlKSB7XG4gICAgICAgIHZhciBkTWF4ID0gMDtcbiAgICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgICAgdmFyIGVuZCA9IHBvaW50cy5sZW5ndGggLSAxO1xuICAgICAgICB2YXIgbGluZSA9IHBvaW50c1swXS5maW5kTGluZShwb2ludHNbZW5kXSk7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgZW5kOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBkID0gbGluZS5wZXJwZW5kaWN1bGFyRGlzdGFuY2UocG9pbnRzW2ldKTtcbiAgICAgICAgICAgIGlmIChkID4gZE1heCkge1xuICAgICAgICAgICAgICAgIGluZGV4ID0gaTtcbiAgICAgICAgICAgICAgICBkTWF4ID0gZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZE1heCA+PSBlKSB7XG4gICAgICAgICAgICB2YXIgcmVjUmVzdWx0MSA9IHRoaXMuZG91Z2xhc1BldWNrZXIocG9pbnRzLnNsaWNlKDAsIGluZGV4ICsgMSksIGUpO1xuICAgICAgICAgICAgdmFyIHJlY1Jlc3VsdDIgPSB0aGlzLmRvdWdsYXNQZXVja2VyKHBvaW50cy5zbGljZShpbmRleCksIGUpO1xuICAgICAgICAgICAgcmVjUmVzdWx0MS5wb3AoKTtcbiAgICAgICAgICAgIHJldHVybiBfX3NwcmVhZEFycmF5KF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChyZWNSZXN1bHQxKSwgZmFsc2UpLCBfX3JlYWQocmVjUmVzdWx0MiksIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW3BvaW50c1swXSwgcG9pbnRzW2VuZF1dO1xuICAgIH07XG4gICAgRFBvbHlnb24ucHJvdG90eXBlLmdvQnlQYXRoID0gZnVuY3Rpb24gKGN0eCwgc3RlcHMpIHtcbiAgICAgICAgaWYgKHN0ZXBzID09PSB2b2lkIDApIHsgc3RlcHMgPSB0aGlzLmxlbmd0aCAtIDE7IH1cbiAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5maXJzdDtcbiAgICAgICAgY3R4Lm1vdmVUbyhzdGFydC54LCBzdGFydC55KTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gKHN0ZXBzICUgdGhpcy5sZW5ndGgpOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBfYSA9IHRoaXMuYXQoaSksIHggPSBfYS54LCB5ID0gX2EueTtcbiAgICAgICAgICAgIGN0eC5saW5lVG8oeCwgeSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIERQb2x5Z29uLnByb3RvdHlwZS5nZXRKU1RTR2VvbWV0cnkgPSBmdW5jdGlvbiAocCwgdW5pb25UaGlzLCB1bmlvblRoYXQpIHtcbiAgICAgICAgdmFyIHVuaW9uT3JJbnRlcnNlY3Rpb24gPSB1bmlvblRoYXQgPT09IHVuaW9uVGhpcztcbiAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBqc3RzSW8uV0tUUmVhZGVyKCk7XG4gICAgICAgIHZhciBhID0gcmVhZGVyLnJlYWQodGhpcy5ub0hvbGVzLnRvV0tUKCkpO1xuICAgICAgICB2YXIgYiA9IHJlYWRlci5yZWFkKHAubm9Ib2xlcy50b1dLVCgpKTtcbiAgICAgICAgaWYgKCF1bmlvbk9ySW50ZXJzZWN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gYS5kaWZmZXJlbmNlKGIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHVuaW9uVGhpcykge1xuICAgICAgICAgICAgcmV0dXJuIGEudW5pb24oYik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIXVuaW9uVGhpcykge1xuICAgICAgICAgICAgcmV0dXJuIGEuaW50ZXJzZWN0aW9uKGIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICBEUG9seWdvbi5wcm90b3R5cGUuc2ltcGxlTG9naWNGdW5jdGlvbiA9IGZ1bmN0aW9uIChwLCB1bmlvblRoaXMsIHVuaW9uVGhhdCkge1xuICAgICAgICB2YXIgZV8xOSwgX2EsIGVfMjAsIF9iLCBlXzIxLCBfYywgZV8yMiwgX2Q7XG4gICAgICAgIHZhciBjID0gdGhpcy5nZXRKU1RTR2VvbWV0cnkocCwgdW5pb25UaGlzLCB1bmlvblRoYXQpO1xuICAgICAgICBpZiAoYykge1xuICAgICAgICAgICAgdmFyIGNvb3JkaW5hdGVzXzEgPSBjLmdldENvb3JkaW5hdGVzKCk7XG4gICAgICAgICAgICBpZiAoY29vcmRpbmF0ZXNfMS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gY29vcmRpbmF0ZXNfMS5yZWR1Y2UoZnVuY3Rpb24gKGFrLCBfYSwgaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHggPSBfYS54LCB5ID0gX2EueTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxhc3RJbmRleCA9IGFrLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0ID0gbmV3IERQb2ludCh4LCB5KTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0ID0gYWtbbGFzdEluZGV4XS5maXJzdDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQuZXF1YWwoZmlyc3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29vcmRpbmF0ZXNfMVtpbmRleCArIDFdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRQb2ludCA9IG5ldyBEUG9pbnQoY29vcmRpbmF0ZXNfMVtpbmRleCArIDFdLngsIGNvb3JkaW5hdGVzXzFbaW5kZXggKyAxXS55KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWtbbGFzdEluZGV4XS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFrLnB1c2gobmV3IERQb2x5Z29uKFtuZXh0UG9pbnRdKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWtbbGFzdEluZGV4XS5wdXNoKHQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhaztcbiAgICAgICAgICAgICAgICB9LCBbbmV3IERQb2x5Z29uKFtuZXcgRFBvaW50KGNvb3JkaW5hdGVzXzFbMF0ueCwgY29vcmRpbmF0ZXNfMVswXS55KV0pXSk7XG4gICAgICAgICAgICAgICAgaWYgKHVuaW9uVGhhdCAmJiB1bmlvblRoaXMgJiYgcmVzdWx0Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHJlc3VsdF8xID0gX192YWx1ZXMocmVzdWx0KSwgcmVzdWx0XzFfMSA9IHJlc3VsdF8xLm5leHQoKTsgIXJlc3VsdF8xXzEuZG9uZTsgcmVzdWx0XzFfMSA9IHJlc3VsdF8xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBxID0gcmVzdWx0XzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2xvb3BfNiA9IGZ1bmN0aW9uIChyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEuaGFzKHIuZmlyc3QpICYmICFxLmVxdWFsKHIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBxLmZpbmRJbmRleChyLmZpcnN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfZSA9IHEucG9pbnRzKS5zcGxpY2UuYXBwbHkoX2UsIF9fc3ByZWFkQXJyYXkoW2luZGV4LCAwXSwgX19yZWFkKHIucG9pbnRzKSwgZmFsc2UpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5maWx0ZXIoZnVuY3Rpb24gKGgpIHsgcmV0dXJuICFoLmVxdWFsKHIpOyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImNvbnRpbnVlXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJicmVha1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciByZXN1bHRfMiA9IChlXzIwID0gdm9pZCAwLCBfX3ZhbHVlcyhyZXN1bHQpKSwgcmVzdWx0XzJfMSA9IHJlc3VsdF8yLm5leHQoKTsgIXJlc3VsdF8yXzEuZG9uZTsgcmVzdWx0XzJfMSA9IHJlc3VsdF8yLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHIgPSByZXN1bHRfMl8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRlXzEgPSBfbG9vcF82KHIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlXzEgPT09IFwiYnJlYWtcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZV8yMF8xKSB7IGVfMjAgPSB7IGVycm9yOiBlXzIwXzEgfTsgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdF8yXzEgJiYgIXJlc3VsdF8yXzEuZG9uZSAmJiAoX2IgPSByZXN1bHRfMi5yZXR1cm4pKSBfYi5jYWxsKHJlc3VsdF8yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMjApIHRocm93IGVfMjAuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZV8xOV8xKSB7IGVfMTkgPSB7IGVycm9yOiBlXzE5XzEgfTsgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdF8xXzEgJiYgIXJlc3VsdF8xXzEuZG9uZSAmJiAoX2EgPSByZXN1bHRfMS5yZXR1cm4pKSBfYS5jYWxsKHJlc3VsdF8xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xOSkgdGhyb3cgZV8xOS5lcnJvcjsgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5maWx0ZXIoZnVuY3Rpb24gKGgpIHsgcmV0dXJuIGgubGVuZ3RoID4gMjsgfSkubWFwKGZ1bmN0aW9uIChoKSB7IHJldHVybiBoLmNsb3NlKCk7IH0pO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHJlc3VsdF8zID0gX192YWx1ZXMocmVzdWx0KSwgcmVzdWx0XzNfMSA9IHJlc3VsdF8zLm5leHQoKTsgIXJlc3VsdF8zXzEuZG9uZTsgcmVzdWx0XzNfMSA9IHJlc3VsdF8zLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHEgPSByZXN1bHRfM18xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9sb29wXzcgPSBmdW5jdGlvbiAocikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJicmVha1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXEuZXF1YWwocikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEuY29udGFpbihyLmZpcnN0LCB0cnVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5ob2xlcy5wdXNoKHIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmZpbHRlcihmdW5jdGlvbiAoaCkgeyByZXR1cm4gIWguZXF1YWwocik7IH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgcmVzdWx0XzQgPSAoZV8yMiA9IHZvaWQgMCwgX192YWx1ZXMocmVzdWx0KSksIHJlc3VsdF80XzEgPSByZXN1bHRfNC5uZXh0KCk7ICFyZXN1bHRfNF8xLmRvbmU7IHJlc3VsdF80XzEgPSByZXN1bHRfNC5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHIgPSByZXN1bHRfNF8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdGVfMiA9IF9sb29wXzcocik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZV8yID09PSBcImJyZWFrXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZV8yMl8xKSB7IGVfMjIgPSB7IGVycm9yOiBlXzIyXzEgfTsgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdF80XzEgJiYgIXJlc3VsdF80XzEuZG9uZSAmJiAoX2QgPSByZXN1bHRfNC5yZXR1cm4pKSBfZC5jYWxsKHJlc3VsdF80KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzIyKSB0aHJvdyBlXzIyLmVycm9yOyB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZV8yMV8xKSB7IGVfMjEgPSB7IGVycm9yOiBlXzIxXzEgfTsgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdF8zXzEgJiYgIXJlc3VsdF8zXzEuZG9uZSAmJiAoX2MgPSByZXN1bHRfMy5yZXR1cm4pKSBfYy5jYWxsKHJlc3VsdF8zKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMjEpIHRocm93IGVfMjEuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRbMF0uY2xvc2UoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5tYXAoZnVuY3Rpb24gKGcpIHsgcmV0dXJuIGcuY2xvc2UoKTsgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgICBEUG9seWdvbi5DQVBfUk9VTkQgPSBDQVBfUk9VTkQ7XG4gICAgRFBvbHlnb24uQ0FQX0ZMQVQgPSBDQVBfRkxBVDtcbiAgICBEUG9seWdvbi5DQVBfU1FVQVJFID0gQ0FQX1NRVUFSRTtcbiAgICBEUG9seWdvbi5XS1RfTElORVNUUklORyA9ICdMSU5FU1RSSU5HJztcbiAgICBEUG9seWdvbi5XS1RfUE9MWUdPTiA9ICdQT0xZR09OJztcbiAgICByZXR1cm4gRFBvbHlnb247XG59KCkpO1xuZXhwb3J0IHsgRFBvbHlnb24gfTtcbiIsInZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG52YXIgX19yZWFkID0gKHRoaXMgJiYgdGhpcy5fX3JlYWQpIHx8IGZ1bmN0aW9uIChvLCBuKSB7XG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICAgIGlmICghbSkgcmV0dXJuIG87XG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gICAgdHJ5IHtcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gICAgfVxuICAgIHJldHVybiBhcjtcbn07XG5pbXBvcnQgeyBETGluZSB9IGZyb20gJy4vRExpbmUnO1xuaW1wb3J0IHsgRFBvbHlnb24gfSBmcm9tICcuL0RQb2x5Z29uJztcbmltcG9ydCB7IGNoZWNrRnVuY3Rpb24sIGNyZWF0ZUFycmF5LCBpc0RlZkFuZE5vdE51bGwgfSBmcm9tICcuL3V0aWxzJztcbnZhciBkaWZmID0gMDtcbnZhciByYWRpYW5zUG9seWdvbiA9IG5ldyBEUG9seWdvbigpO1xudmFyIHBzZXVkb01lcmNhdG9yUG9seWdvbiA9IG5ldyBEUG9seWdvbigpO1xudmFyIHdvcmxkR2VvZGV0aWNQb2x5Z29uID0gbmV3IERQb2x5Z29uKCk7XG5leHBvcnQgdmFyIEVBUlRIX1JBRElVU19JTl9NRVRFUlMgPSA2MzcxMDA4Ljg7XG52YXIgRUFSVEhfSU5fTUlURVJTID0gMjAwMzc1MDguMzQ7XG52YXIgREVHUkVFU19JTl9FQVJUSCA9IDE4MDtcbnZhciBNSVRFUlNfSU5fT05FX0RFR1JFRSA9IEVBUlRIX0lOX01JVEVSUyAvIERFR1JFRVNfSU5fRUFSVEg7XG52YXIgREVHUkVFU19JTl9PTkVfTUlURVIgPSBERUdSRUVTX0lOX0VBUlRIIC8gRUFSVEhfSU5fTUlURVJTO1xuZXhwb3J0IHZhciBIQUxGX1BJX0lOX0RFR1JFRSA9IDkwO1xuZXhwb3J0IHZhciBQSV9JTl9ERUdSRUUgPSAxODA7XG5leHBvcnQgdmFyIERPVUJMRV9QSV9JTl9ERUdSRUUgPSAzNjA7XG5leHBvcnQgdmFyIFBJX1RPX0RFR1JFRSA9IE1hdGguUEkgLyBQSV9JTl9ERUdSRUU7XG5leHBvcnQgdmFyIERFR1JFRV9UT19QSSA9IFBJX0lOX0RFR1JFRSAvIE1hdGguUEk7XG52YXIgRFBvaW50ID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBEUG9pbnQoeCwgeSwgeikge1xuICAgICAgICBpZiAoeCA9PT0gdm9pZCAwKSB7IHggPSAwOyB9XG4gICAgICAgIGlmICh5ID09PSB2b2lkIDApIHsgeSA9IHg7IH1cbiAgICAgICAgdGhpcy54ID0geDtcbiAgICAgICAgdGhpcy55ID0geTtcbiAgICAgICAgdGhpcy56ID0gejtcbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzID0ge307XG4gICAgfVxuICAgIERQb2ludC56ZXJvID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbmV3IERQb2ludCgpO1xuICAgIH07XG4gICAgRFBvaW50LnBhcnNlID0gZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgdmFyIF9hID0gYywgbGF0ID0gX2EubGF0LCBsbmcgPSBfYS5sbmc7XG4gICAgICAgIGlmIChsYXQgJiYgbG5nKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IERQb2ludChsYXQsIGxuZywgMCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIF9iID0gX19yZWFkKGMsIDMpLCB4ID0gX2JbMF0sIHkgPSBfYlsxXSwgeiA9IF9iWzJdO1xuICAgICAgICByZXR1cm4gbmV3IERQb2ludCh4LCB5LCB6KTtcbiAgICB9O1xuICAgIERQb2ludC5wYXJzZUZyb21XS1QgPSBmdW5jdGlvbiAod2t0KSB7XG4gICAgICAgIHZhciByZWdleHAgPSAvUE9JTlQgXFwoKD88ZGF0YT4oPzooPyFcXCkpLikqPylcXCkkL21pdTtcbiAgICAgICAgdmFyIGRhdGEgPSB3a3QudHJpbSgpLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIHZhciByZXMgPSByZWdleHAuZXhlYyhkYXRhKTtcbiAgICAgICAgdmFyIF9hID0gX19yZWFkKHJlcy5ncm91cHMuZGF0YS5zcGxpdCgnICcpLm1hcChOdW1iZXIpLCAzKSwgeCA9IF9hWzBdLCB5ID0gX2FbMV0sIHogPSBfYVsyXTtcbiAgICAgICAgcmV0dXJuIG5ldyBEUG9pbnQoeCwgeSwgeik7XG4gICAgfTtcbiAgICBEUG9pbnQucmFuZG9tID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbmV3IERQb2ludChNYXRoLnJhbmRvbSgpLCBNYXRoLnJhbmRvbSgpKTtcbiAgICB9O1xuICAgIERQb2ludC5wcm90b3R5cGUuZ2V0VGlsZUZyb21Db29yZHMgPSBmdW5jdGlvbiAoem9vbSkge1xuICAgICAgICBpZiAoem9vbSA9PT0gdm9pZCAwKSB7IHpvb20gPSB0aGlzLno7IH1cbiAgICAgICAgY2hlY2tGdW5jdGlvbignZ2V0VGlsZUZyb21Db29yZHMnKVxuICAgICAgICAgICAgLmNoZWNrQXJndW1lbnQoJ3RoaXMnKVxuICAgICAgICAgICAgLnNob3VsZEJlRGVncmVlKHRoaXMpO1xuICAgICAgICB2YXIgeCA9IE1hdGguZmxvb3IoKHRoaXMueCArIFBJX0lOX0RFR1JFRSkgLyBET1VCTEVfUElfSU5fREVHUkVFICogKE1hdGgucG93KDIsIHpvb20pKSk7XG4gICAgICAgIHZhciB5ID0gTWF0aC5mbG9vcigoMSAtIE1hdGgubG9nKE1hdGgudGFuKHRoaXMueSAqIFBJX1RPX0RFR1JFRSkgKyAxIC8gTWF0aC5jb3ModGhpcy55ICogUElfVE9fREVHUkVFKSkgLyBNYXRoLlBJKSAvIDIgKiAoTWF0aC5wb3coMiwgem9vbSkpKTtcbiAgICAgICAgcmV0dXJuIG5ldyBEUG9pbnQoeCwgeSwgem9vbSk7XG4gICAgfTtcbiAgICBEUG9pbnQucHJvdG90eXBlLmdldENvb3Jkc0Zyb21UaWxlID0gZnVuY3Rpb24gKHpvb20pIHtcbiAgICAgICAgaWYgKHpvb20gPT09IHZvaWQgMCkgeyB6b29tID0gdGhpcy56OyB9XG4gICAgICAgIGNoZWNrRnVuY3Rpb24oJ2dldENvb3Jkc0Zyb21UaWxlJylcbiAgICAgICAgICAgIC5jaGVja0FyZ3VtZW50KCd0aGlzJylcbiAgICAgICAgICAgIC5zaG91bGRCZVVJbnQodGhpcyk7XG4gICAgICAgIHZhciBuID0gTWF0aC5QSSAtIDIgKiBNYXRoLlBJICogdGhpcy55IC8gKE1hdGgucG93KDIsIHpvb20pKTtcbiAgICAgICAgdmFyIHggPSB0aGlzLnggLyAoTWF0aC5wb3coMiwgem9vbSkpICogRE9VQkxFX1BJX0lOX0RFR1JFRSAtIFBJX0lOX0RFR1JFRTtcbiAgICAgICAgdmFyIHkgPSBQSV9JTl9ERUdSRUUgLyBNYXRoLlBJICogTWF0aC5hdGFuKChNYXRoLmV4cChuKSAtIE1hdGguZXhwKC1uKSkgLyAyKTtcbiAgICAgICAgcmV0dXJuIG5ldyBEUG9pbnQoeCwgeSwgem9vbSk7XG4gICAgfTtcbiAgICBEUG9pbnQucHJvdG90eXBlLnRvQ29vcmRzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy56ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBbdGhpcy54LCB0aGlzLnldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbdGhpcy54LCB0aGlzLnksIHRoaXMuel07XG4gICAgfTtcbiAgICBEUG9pbnQucHJvdG90eXBlLmZpbmRMaW5lID0gZnVuY3Rpb24gKHApIHtcbiAgICAgICAgY2hlY2tGdW5jdGlvbignZmluZExpbmUnKVxuICAgICAgICAgICAgLmNoZWNrQXJndW1lbnQoJ3RoaXMnKVxuICAgICAgICAgICAgLnNob3VsZEJlTWV0ZXJzKHRoaXMpXG4gICAgICAgICAgICAuY2hlY2tBcmd1bWVudCgncCcpXG4gICAgICAgICAgICAuc2hvdWxkQmVNZXRlcnMocCk7XG4gICAgICAgIGlmICh0aGlzLmVxdWFsKHApKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5maW5kTGluZShwLmNsb25lKCkubW92ZSgwLCAxKSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGEgPSB0aGlzLnkgLSBwLnkgLSBkaWZmO1xuICAgICAgICB2YXIgYiA9IHAueCAtIHRoaXMueCAtIGRpZmY7XG4gICAgICAgIHZhciBjID0gdGhpcy54ICogcC55IC0gcC54ICogdGhpcy55IC0gZGlmZjtcbiAgICAgICAgaWYgKGEgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRExpbmUoMCwgMSwgYyAvIGIsIHRoaXMsIHApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChiID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IERMaW5lKDEsIDAsIGMgLyBhLCB0aGlzLCBwKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IERMaW5lKGEsIGIsIGMsIHRoaXMsIHApO1xuICAgIH07XG4gICAgRFBvaW50LnByb3RvdHlwZS5maW5kSW5uZXJBbmdsZSA9IGZ1bmN0aW9uIChwMSwgcDMpIHtcbiAgICAgICAgY2hlY2tGdW5jdGlvbignZmluZElubmVyQW5nbGUnKVxuICAgICAgICAgICAgLmNoZWNrQXJndW1lbnQoJ3RoaXMnKVxuICAgICAgICAgICAgLnNob3VsZEJlTWV0ZXJzKHRoaXMpXG4gICAgICAgICAgICAuY2hlY2tBcmd1bWVudCgncDEnKVxuICAgICAgICAgICAgLnNob3VsZEJlTWV0ZXJzKHAxKVxuICAgICAgICAgICAgLmNoZWNrQXJndW1lbnQoJ3AzJylcbiAgICAgICAgICAgIC5zaG91bGRCZU1ldGVycyhwMyk7XG4gICAgICAgIHZhciBhMSA9IHRoaXMuZmluZExpbmUocDEpLmdldEZpKCk7XG4gICAgICAgIHZhciBhMiA9IHRoaXMuZmluZExpbmUocDMpLmdldEZpKCk7XG4gICAgICAgIGlmIChhMiA+PSBhMSkge1xuICAgICAgICAgICAgcmV0dXJuIGEyIC0gYTE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGEyICsgTWF0aC5QSSAqIDIgLSBhMTtcbiAgICB9O1xuICAgIERQb2ludC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnggKyBcIiBcIiArIHRoaXMueTtcbiAgICB9O1xuICAgIERQb2ludC5wcm90b3R5cGUuZ2V0VmFsdWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBbdGhpcy54LCB0aGlzLnldO1xuICAgIH07XG4gICAgRFBvaW50LnByb3RvdHlwZS5oZWlnaHQgPSBmdW5jdGlvbiAoeikge1xuICAgICAgICB0aGlzLnogPSB6O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIERQb2ludC5wcm90b3R5cGUudG9XS1QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIHggPSBfYS54LCB5ID0gX2EueTtcbiAgICAgICAgcmV0dXJuIFwiUE9JTlQgKFwiICsgeCArIFwiIFwiICsgeSArIFwiKVwiO1xuICAgIH07XG4gICAgRFBvaW50LnByb3RvdHlwZS5kaXN0YW5jZSA9IGZ1bmN0aW9uIChwKSB7XG4gICAgICAgIGNoZWNrRnVuY3Rpb24oJ2Rpc3RhbmNlJylcbiAgICAgICAgICAgIC5jaGVja0FyZ3VtZW50KCd0aGlzJylcbiAgICAgICAgICAgIC5zaG91bGRCZU1ldGVycyh0aGlzKVxuICAgICAgICAgICAgLmNoZWNrQXJndW1lbnQoJ3AnKVxuICAgICAgICAgICAgLnNob3VsZEJlTWV0ZXJzKHApO1xuICAgICAgICB2YXIgZHggPSBwLnggLSB0aGlzLng7XG4gICAgICAgIHZhciBkeSA9IHAueSAtIHRoaXMueTtcbiAgICAgICAgcmV0dXJuIE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG4gICAgfTtcbiAgICBEUG9pbnQucHJvdG90eXBlLmRpc3RhbmNlM2QgPSBmdW5jdGlvbiAocCkge1xuICAgICAgICBjaGVja0Z1bmN0aW9uKCdkaXN0YW5jZTNkJylcbiAgICAgICAgICAgIC5jaGVja0FyZ3VtZW50KCd0aGlzJylcbiAgICAgICAgICAgIC5zaG91bGRCZU1ldGVycyh0aGlzKVxuICAgICAgICAgICAgLmNoZWNrQXJndW1lbnQoJ3AnKVxuICAgICAgICAgICAgLnNob3VsZEJlTWV0ZXJzKHApXG4gICAgICAgICAgICAuY2hlY2tBcmd1bWVudCgndGhpcy56JylcbiAgICAgICAgICAgIC5zaG91bGRFeGlzdCh0aGlzLnopXG4gICAgICAgICAgICAuY2hlY2tBcmd1bWVudCgncC56JylcbiAgICAgICAgICAgIC5zaG91bGRFeGlzdChwLnopO1xuICAgICAgICB2YXIgZHggPSBwLnggLSB0aGlzLng7XG4gICAgICAgIHZhciBkeSA9IHAueSAtIHRoaXMueTtcbiAgICAgICAgdmFyIGR6ID0gcC56IC0gdGhpcy56O1xuICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5ICsgZHogKiBkeik7XG4gICAgfTtcbiAgICBEUG9pbnQucHJvdG90eXBlLnNldFggPSBmdW5jdGlvbiAoeCkge1xuICAgICAgICB0aGlzLnggPSB0eXBlb2YgeCA9PT0gJ251bWJlcicgPyB4IDogeCh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBEUG9pbnQucHJvdG90eXBlLnNldFogPSBmdW5jdGlvbiAoeikge1xuICAgICAgICB0aGlzLnogPSB0eXBlb2YgeiA9PT0gJ251bWJlcicgPyB6IDogeih0aGlzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBEUG9pbnQucHJvdG90eXBlLnNldFkgPSBmdW5jdGlvbiAoeSkge1xuICAgICAgICB0aGlzLnkgPSB0eXBlb2YgeSA9PT0gJ251bWJlcicgPyB5IDogeSh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBEUG9pbnQucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcCA9IG5ldyBEUG9pbnQodGhpcy54LCB0aGlzLnksIHRoaXMueik7XG4gICAgICAgIHAucHJvcGVydGllcyA9IF9fYXNzaWduKHt9LCB0aGlzLnByb3BlcnRpZXMpO1xuICAgICAgICByZXR1cm4gcDtcbiAgICB9O1xuICAgIERQb2ludC5wcm90b3R5cGUuZ3QgPSBmdW5jdGlvbiAocCkge1xuICAgICAgICByZXR1cm4gdGhpcy54ID4gcC54ICYmIHRoaXMueSA+IHAueTtcbiAgICB9O1xuICAgIERQb2ludC5wcm90b3R5cGUubHQgPSBmdW5jdGlvbiAocCkge1xuICAgICAgICByZXR1cm4gdGhpcy54IDwgcC54ICYmIHRoaXMueSA8IHAueTtcbiAgICB9O1xuICAgIERQb2ludC5wcm90b3R5cGUuZ3RPckVxdWFsID0gZnVuY3Rpb24gKHApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3QocCkgfHwgdGhpcy5lcXVhbChwKTtcbiAgICB9O1xuICAgIERQb2ludC5wcm90b3R5cGUubHRPckVxdWFsID0gZnVuY3Rpb24gKHApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubHQocCkgfHwgdGhpcy5lcXVhbChwKTtcbiAgICB9O1xuICAgIERQb2ludC5wcm90b3R5cGUucm90YXRlID0gZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgdmFyIHggPSB0aGlzLnggKiBNYXRoLmNvcyhhKSAtIHRoaXMueSAqIE1hdGguc2luKGEpO1xuICAgICAgICB2YXIgeSA9IHRoaXMueCAqIE1hdGguc2luKGEpICsgdGhpcy55ICogTWF0aC5jb3MoYSk7XG4gICAgICAgIHRoaXMueCA9IHg7XG4gICAgICAgIHRoaXMueSA9IHk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgRFBvaW50LnByb3RvdHlwZS5yb3RhdGUzZFggPSBmdW5jdGlvbiAoYSkge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCB5ID0gX2EueSwgeiA9IF9hLno7XG4gICAgICAgIHRoaXMueSA9IHkgKiBNYXRoLmNvcyhhKSArIHogKiBNYXRoLnNpbihhKTtcbiAgICAgICAgdGhpcy56ID0gLXkgKiBNYXRoLnNpbihhKSArIHogKiBNYXRoLmNvcyhhKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBEUG9pbnQucHJvdG90eXBlLnJvdGF0ZTNkWSA9IGZ1bmN0aW9uIChhKSB7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIHggPSBfYS54LCB6ID0gX2EuejtcbiAgICAgICAgdGhpcy54ID0geCAqIE1hdGguY29zKGEpICsgeiAqIE1hdGguc2luKGEpO1xuICAgICAgICB0aGlzLnogPSAteCAqIE1hdGguc2luKGEpICsgeiAqIE1hdGguY29zKGEpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIERQb2ludC5wcm90b3R5cGUucm90YXRlM2RaID0gZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgdmFyIF9hID0gdGhpcywgeCA9IF9hLngsIHkgPSBfYS55O1xuICAgICAgICB0aGlzLnggPSB4ICogTWF0aC5jb3MoYSkgLSB5ICogTWF0aC5zaW4oYSk7XG4gICAgICAgIHRoaXMueSA9IC14ICogTWF0aC5zaW4oYSkgKyB5ICogTWF0aC5jb3MoYSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgRFBvaW50LnByb3RvdHlwZS5tb3ZlID0gZnVuY3Rpb24gKHgsIHksIHopIHtcbiAgICAgICAgaWYgKHkgPT09IHZvaWQgMCkgeyB5ID0geDsgfVxuICAgICAgICB2YXIgeFYgPSAwO1xuICAgICAgICB2YXIgeVYgPSAwO1xuICAgICAgICB2YXIgelYgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh4IGluc3RhbmNlb2YgRFBvaW50KSB7XG4gICAgICAgICAgICB4ViA9IHRoaXMueCArIHgueDtcbiAgICAgICAgICAgIHlWID0gdGhpcy55ICsgeC55O1xuICAgICAgICAgICAgaWYgKGlzRGVmQW5kTm90TnVsbCh0aGlzLnopICYmIGlzRGVmQW5kTm90TnVsbCh4LnopKSB7XG4gICAgICAgICAgICAgICAgelYgPSB0aGlzLnogKyB4Lno7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB4ViA9IHRoaXMueCArIHg7XG4gICAgICAgICAgICB5ViA9IHRoaXMueSArIHk7XG4gICAgICAgICAgICBpZiAoaXNEZWZBbmROb3ROdWxsKHRoaXMueikgJiYgaXNEZWZBbmROb3ROdWxsKHopKSB7XG4gICAgICAgICAgICAgICAgelYgPSB0aGlzLnogKyB6O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMueCA9IHhWO1xuICAgICAgICB0aGlzLnkgPSB5VjtcbiAgICAgICAgaWYgKGlzRGVmQW5kTm90TnVsbCh6VikpIHtcbiAgICAgICAgICAgIHRoaXMueiA9IHpWO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgRFBvaW50LnByb3RvdHlwZS5kZWdyZWVUb01ldGVycyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2hlY2tGdW5jdGlvbignZGVncmVlVG9NZXRlcnMnKVxuICAgICAgICAgICAgLmNoZWNrQXJndW1lbnQoJ3RoaXMnKVxuICAgICAgICAgICAgLnNob3VsZEJlRGVncmVlKHRoaXMpO1xuICAgICAgICB2YXIgeCA9ICgodGhpcy54ICsgUElfSU5fREVHUkVFKSAlIERPVUJMRV9QSV9JTl9ERUdSRUUgLSBQSV9JTl9ERUdSRUUpICogTUlURVJTX0lOX09ORV9ERUdSRUU7XG4gICAgICAgIHZhciB5ID0gKE1hdGgubG9nKE1hdGgudGFuKCgodGhpcy55ICsgSEFMRl9QSV9JTl9ERUdSRUUpICUgUElfSU5fREVHUkVFKSAqXG4gICAgICAgICAgICAoTWF0aC5QSSAvIERPVUJMRV9QSV9JTl9ERUdSRUUpKSkgLyBQSV9UT19ERUdSRUUpICogTUlURVJTX0lOX09ORV9ERUdSRUU7XG4gICAgICAgIHRoaXMueCA9IHg7XG4gICAgICAgIHRoaXMueSA9IHk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgRFBvaW50LnByb3RvdHlwZS5tZXRlcnNUb0RlZ3JlZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2hlY2tGdW5jdGlvbignbWV0ZXJzVG9EZWdyZWUnKVxuICAgICAgICAgICAgLmNoZWNrQXJndW1lbnQoJ3RoaXMnKVxuICAgICAgICAgICAgLnNob3VsZEJlTWV0ZXJzKHRoaXMpO1xuICAgICAgICB2YXIgbG9uID0gdGhpcy54ICogREVHUkVFU19JTl9PTkVfTUlURVI7XG4gICAgICAgIHZhciBsYXQgPSBNYXRoLmF0YW4oTWF0aC5wb3coTWF0aC5FLCAoKHRoaXMueSAvIE1JVEVSU19JTl9PTkVfREVHUkVFKSAqIFBJX1RPX0RFR1JFRSkpKSAqXG4gICAgICAgICAgICAoRE9VQkxFX1BJX0lOX0RFR1JFRSAvIE1hdGguUEkpIC0gSEFMRl9QSV9JTl9ERUdSRUU7XG4gICAgICAgIHRoaXMueCA9IGxvbjtcbiAgICAgICAgdGhpcy55ID0gbGF0O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIERQb2ludC5wcm90b3R5cGUuZGVncmVlVG9SYWRpYW5zID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBjaGVja0Z1bmN0aW9uKCdkZWdyZWVUb1JhZGlhbnMnKVxuICAgICAgICAgICAgLmNoZWNrQXJndW1lbnQoJ3RoaXMnKVxuICAgICAgICAgICAgLnNob3VsZEJlRGVncmVlKHRoaXMpO1xuICAgICAgICByZXR1cm4gdGhpcy5zY2FsZShQSV9UT19ERUdSRUUpO1xuICAgIH07XG4gICAgRFBvaW50LnByb3RvdHlwZS5yYWRpYW5zVG9EZWdyZWVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBjaGVja0Z1bmN0aW9uKCdyYWRpYW5zVG9EZWdyZWVzJylcbiAgICAgICAgICAgIC5jaGVja0FyZ3VtZW50KCd0aGlzJylcbiAgICAgICAgICAgIC5zaG91bGRCZVJhZGlhbnModGhpcyk7XG4gICAgICAgIHJldHVybiB0aGlzLnNjYWxlKERFR1JFRV9UT19QSSk7XG4gICAgfTtcbiAgICBEUG9pbnQucHJvdG90eXBlLnJhZGlhbnNUb01ldGVycyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2hlY2tGdW5jdGlvbigncmFkaWFuc1RvTWV0ZXJzJylcbiAgICAgICAgICAgIC5jaGVja0FyZ3VtZW50KCd0aGlzJylcbiAgICAgICAgICAgIC5zaG91bGRCZVJhZGlhbnModGhpcyk7XG4gICAgICAgIHJldHVybiB0aGlzLnJhZGlhbnNUb0RlZ3JlZXMoKS5kZWdyZWVUb01ldGVycygpO1xuICAgIH07XG4gICAgRFBvaW50LnByb3RvdHlwZS5tZXRlcnNUb1JhZGlhbnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNoZWNrRnVuY3Rpb24oJ21ldGVyc1RvUmFkaWFucycpXG4gICAgICAgICAgICAuY2hlY2tBcmd1bWVudCgndGhpcycpXG4gICAgICAgICAgICAuc2hvdWxkQmVNZXRlcnModGhpcyk7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldGVyc1RvRGVncmVlKCkuZGVncmVlVG9SYWRpYW5zKCk7XG4gICAgfTtcbiAgICBEUG9pbnQucHJvdG90eXBlLnJvdW5kID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnggPSBNYXRoLnJvdW5kKHRoaXMueCk7XG4gICAgICAgIHRoaXMueSA9IE1hdGgucm91bmQodGhpcy55KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBEUG9pbnQucHJvdG90eXBlLmNlaWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMueCA9IE1hdGguY2VpbCh0aGlzLngpO1xuICAgICAgICB0aGlzLnkgPSBNYXRoLmNlaWwodGhpcy55KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBEUG9pbnQucHJvdG90eXBlLmZsb29yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnggPSBNYXRoLmZsb29yKHRoaXMueCk7XG4gICAgICAgIHRoaXMueSA9IE1hdGguZmxvb3IodGhpcy55KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBEUG9pbnQucHJvdG90eXBlLnRvRml4ZWQgPSBmdW5jdGlvbiAobikge1xuICAgICAgICBpZiAobiA9PT0gdm9pZCAwKSB7IG4gPSAyOyB9XG4gICAgICAgIHRoaXMueCA9IHBhcnNlRmxvYXQodGhpcy54LnRvRml4ZWQobikpO1xuICAgICAgICB0aGlzLnkgPSBwYXJzZUZsb2F0KHRoaXMueS50b0ZpeGVkKG4pKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBEUG9pbnQucHJvdG90eXBlLmFicyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy54ID0gTWF0aC5hYnModGhpcy54KTtcbiAgICAgICAgdGhpcy55ID0gTWF0aC5hYnModGhpcy55KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBEUG9pbnQucHJvdG90eXBlLnNjYWxlID0gZnVuY3Rpb24gKHgsIHksIHopIHtcbiAgICAgICAgaWYgKHkgPT09IHZvaWQgMCkgeyB5ID0geDsgfVxuICAgICAgICB2YXIgeFYgPSAwO1xuICAgICAgICB2YXIgeVYgPSAwO1xuICAgICAgICB2YXIgelYgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh4IGluc3RhbmNlb2YgRFBvaW50KSB7XG4gICAgICAgICAgICB4ViA9IHRoaXMueCAqIHgueDtcbiAgICAgICAgICAgIHlWID0gdGhpcy55ICogeC55O1xuICAgICAgICAgICAgaWYgKGlzRGVmQW5kTm90TnVsbCh0aGlzLnopICYmIGlzRGVmQW5kTm90TnVsbCh4LnopKSB7XG4gICAgICAgICAgICAgICAgelYgPSB0aGlzLnogKiB4Lno7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB4ViA9IHRoaXMueCAqIHg7XG4gICAgICAgICAgICB5ViA9IHRoaXMueSAqIHk7XG4gICAgICAgICAgICBpZiAoaXNEZWZBbmROb3ROdWxsKHRoaXMueikgJiYgaXNEZWZBbmROb3ROdWxsKHopKSB7XG4gICAgICAgICAgICAgICAgelYgPSB0aGlzLnogKiB6O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMueCA9IHhWO1xuICAgICAgICB0aGlzLnkgPSB5VjtcbiAgICAgICAgaWYgKGlzRGVmQW5kTm90TnVsbCh6VikpIHtcbiAgICAgICAgICAgIHRoaXMueiA9IHpWO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgRFBvaW50LnByb3RvdHlwZS5kaXZpZGUgPSBmdW5jdGlvbiAoeCwgeSwgeikge1xuICAgICAgICBpZiAoeSA9PT0gdm9pZCAwKSB7IHkgPSB4OyB9XG4gICAgICAgIHZhciB4ViA9IDA7XG4gICAgICAgIHZhciB5ViA9IDA7XG4gICAgICAgIHZhciB6ViA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHggaW5zdGFuY2VvZiBEUG9pbnQpIHtcbiAgICAgICAgICAgIHhWID0gdGhpcy54IC8geC54O1xuICAgICAgICAgICAgeVYgPSB0aGlzLnkgLyB4Lnk7XG4gICAgICAgICAgICBpZiAoaXNEZWZBbmROb3ROdWxsKHRoaXMueikgJiYgaXNEZWZBbmROb3ROdWxsKHgueikpIHtcbiAgICAgICAgICAgICAgICB6ViA9IHRoaXMueiAvIHguejtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHhWID0gdGhpcy54IC8geDtcbiAgICAgICAgICAgIHlWID0gdGhpcy55IC8geTtcbiAgICAgICAgICAgIGlmIChpc0RlZkFuZE5vdE51bGwodGhpcy56KSAmJiBpc0RlZkFuZE5vdE51bGwoeikpIHtcbiAgICAgICAgICAgICAgICB6ViA9IHRoaXMueiAvIHo7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy54ID0geFY7XG4gICAgICAgIHRoaXMueSA9IHlWO1xuICAgICAgICBpZiAoaXNEZWZBbmROb3ROdWxsKHpWKSkge1xuICAgICAgICAgICAgdGhpcy56ID0gelY7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBEUG9pbnQucHJvdG90eXBlLmVxdWFsID0gZnVuY3Rpb24gKHApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMueCA9PT0gcC54ICYmIHRoaXMueSA9PT0gcC55ICYmIHRoaXMueiA9PT0gcC56O1xuICAgIH07XG4gICAgRFBvaW50LnByb3RvdHlwZS5saWtlID0gZnVuY3Rpb24gKHAsIGQpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kO1xuICAgICAgICBpZiAoZCA9PT0gdm9pZCAwKSB7IGQgPSAwLjAwMTsgfVxuICAgICAgICBpZiAodGhpcy5lcXVhbChwKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGxpa2VYID0gTWF0aC5hYnModGhpcy54IC0gcC54KSA8IGQ7XG4gICAgICAgIHZhciBsaWtlWSA9IE1hdGguYWJzKHRoaXMueSAtIHAueSkgPCBkO1xuICAgICAgICB2YXIgbGlrZVogPSBNYXRoLmFicygoKF9iID0gKF9hID0gdGhpcy56KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBwLnopICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IDApIC0gKChfZCA9IChfYyA9IHAueikgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogdGhpcy56KSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiAwKSkgPCBkO1xuICAgICAgICByZXR1cm4gbGlrZVggJiYgbGlrZVkgJiYgbGlrZVo7XG4gICAgfTtcbiAgICBEUG9pbnQucHJvdG90eXBlLmZsaXBWZXJ0aWNhbGx5ID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgICAgICAgdmFyIHYgPSBzaXplO1xuICAgICAgICBpZiAoc2l6ZSBpbnN0YW5jZW9mIERQb2ludCkge1xuICAgICAgICAgICAgdiA9IHNpemUueTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnkgPSB2IC0gdGhpcy55O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEUG9pbnQucHJvdG90eXBlLCBcImxpa2VSYWRpYW5zXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAocmFkaWFuc1BvbHlnb24ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmFkaWFuc1BvbHlnb24ucHVzaChuZXcgRFBvaW50KC1NYXRoLlBJLCAtTWF0aC5QSSAvIDIpLCBuZXcgRFBvaW50KE1hdGguUEksIE1hdGguUEkgLyAyKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmFkaWFuc1BvbHlnb24uc2ltcGxlSW5jbHVkZSh0aGlzKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEUG9pbnQucHJvdG90eXBlLCBcImxpa2VXb3JsZEdlb2RldGljU3lzdGVtXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAod29ybGRHZW9kZXRpY1BvbHlnb24ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgd29ybGRHZW9kZXRpY1BvbHlnb24ucHVzaChuZXcgRFBvaW50KC0xODAsIC05MCksIG5ldyBEUG9pbnQoMTgwLCA5MCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmxpa2VSYWRpYW5zICYmIHdvcmxkR2VvZGV0aWNQb2x5Z29uLnNpbXBsZUluY2x1ZGUodGhpcyk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRFBvaW50LnByb3RvdHlwZSwgXCJsaWtlUHNldWRvTWVyY2F0b3JcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChwc2V1ZG9NZXJjYXRvclBvbHlnb24ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcHNldWRvTWVyY2F0b3JQb2x5Z29uLnB1c2gobmV3IERQb2ludCgtMjAwMjYzNzYuMzksIC0yMDA0ODk2Ni4xMCksIG5ldyBEUG9pbnQoMjAwMjYzNzYuMzksIDIwMDQ4OTY2LjEwKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gIXRoaXMubGlrZVJhZGlhbnMgJiYgIXRoaXMubGlrZVdvcmxkR2VvZGV0aWNTeXN0ZW0gJiYgcHNldWRvTWVyY2F0b3JQb2x5Z29uLnNpbXBsZUluY2x1ZGUodGhpcyk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRFBvaW50LnByb3RvdHlwZSwgXCJ3XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy54O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICB0aGlzLnggPSB4O1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KERQb2ludC5wcm90b3R5cGUsIFwiaFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoeSkge1xuICAgICAgICAgICAgdGhpcy55ID0geTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEUG9pbnQucHJvdG90eXBlLCBcImFyZWFcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNoZWNrRnVuY3Rpb24oJ2FyZWEnKVxuICAgICAgICAgICAgICAgIC5jaGVja0FyZ3VtZW50KCd0aGlzJylcbiAgICAgICAgICAgICAgICAuc2hvdWxkQmVNZXRlcnModGhpcyk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy53ICogdGhpcy5oO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KERQb2ludC5wcm90b3R5cGUsIFwiaGlwXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjaGVja0Z1bmN0aW9uKCdoaXAnKVxuICAgICAgICAgICAgICAgIC5jaGVja0FyZ3VtZW50KCd0aGlzJylcbiAgICAgICAgICAgICAgICAuc2hvdWxkQmVNZXRlcnModGhpcyk7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KHRoaXMudyAqIHRoaXMudyArIHRoaXMuaCAqIHRoaXMuaCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRFBvaW50LnByb3RvdHlwZSwgXCJtaW5cIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLm1pbih0aGlzLngsIHRoaXMueSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRFBvaW50LnByb3RvdHlwZSwgXCJtYXhcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLm1heCh0aGlzLngsIHRoaXMueSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRFBvaW50LnByb3RvdHlwZSwgXCJoaXBQb2ludFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGhpcCA9IHRoaXMuaGlwO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBEUG9pbnQoaGlwLCBoaXApO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KERQb2ludC5wcm90b3R5cGUsIFwieFBvaW50XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgeCA9IHRoaXMueDtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRFBvaW50KHgsIHgpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KERQb2ludC5wcm90b3R5cGUsIFwieVBvaW50XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgeSA9IHRoaXMueTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRFBvaW50KHksIHkpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KERQb2ludC5wcm90b3R5cGUsIFwid1BvaW50XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy54UG9pbnQ7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRFBvaW50LnByb3RvdHlwZSwgXCJoUG9pbnRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnlQb2ludDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIERQb2ludC5wcm90b3R5cGUuc2ltcGxlID0gZnVuY3Rpb24gKHhLZXksIHlLZXkpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoeEtleSA9PT0gdm9pZCAwKSB7IHhLZXkgPSAneCc7IH1cbiAgICAgICAgaWYgKHlLZXkgPT09IHZvaWQgMCkgeyB5S2V5ID0gJ3knOyB9XG4gICAgICAgIHJldHVybiBfYSA9IHt9LFxuICAgICAgICAgICAgX2FbeEtleV0gPSB0aGlzLngsXG4gICAgICAgICAgICBfYVt5S2V5XSA9IHRoaXMueSxcbiAgICAgICAgICAgIF9hO1xuICAgIH07XG4gICAgRFBvaW50LnByb3RvdHlwZS5zZXRJZkxlc3NUaGFuID0gZnVuY3Rpb24gKHApIHtcbiAgICAgICAgdGhpcy54ID0gTWF0aC5tYXgodGhpcy54LCBwLngpO1xuICAgICAgICB0aGlzLnkgPSBNYXRoLm1heCh0aGlzLnksIHAueSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgRFBvaW50LnByb3RvdHlwZS5taW51cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUoLTEpO1xuICAgIH07XG4gICAgRFBvaW50LnByb3RvdHlwZS5vcnRob2Ryb21pY1BhdGggPSBmdW5jdGlvbiAocG9pbnQsIHBvaW50c0NvdW50KSB7XG4gICAgICAgIGlmIChwb2ludHNDb3VudCA9PT0gdm9pZCAwKSB7IHBvaW50c0NvdW50ID0gMzYwOyB9XG4gICAgICAgIGNoZWNrRnVuY3Rpb24oJ29ydGhvZHJvbWljUGF0aCcpXG4gICAgICAgICAgICAuY2hlY2tBcmd1bWVudCgndGhpcycpXG4gICAgICAgICAgICAuc2hvdWxkQmVEZWdyZWUodGhpcylcbiAgICAgICAgICAgIC5jaGVja0FyZ3VtZW50KCdwb2ludCcpXG4gICAgICAgICAgICAuc2hvdWxkQmVEZWdyZWUocG9pbnQpO1xuICAgICAgICB2YXIgdCA9IHRoaXMuY2xvbmUoKS5kZWdyZWVUb1JhZGlhbnMoKTtcbiAgICAgICAgdmFyIHAgPSBwb2ludC5jbG9uZSgpLmRlZ3JlZVRvUmFkaWFucygpO1xuICAgICAgICB2YXIgZCA9IE1hdGguc2luKHAueCAtIHQueCk7XG4gICAgICAgIHZhciBzdGVwID0gKHAueCAtIHQueCkgLyAocG9pbnRzQ291bnQgLSAxKTtcbiAgICAgICAgcmV0dXJuIG5ldyBEUG9seWdvbihjcmVhdGVBcnJheShwb2ludHNDb3VudClcbiAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKHYsIGkpIHtcbiAgICAgICAgICAgIHZhciB4ID0gdC54ICsgc3RlcCAqIGk7XG4gICAgICAgICAgICB2YXIgeSA9IE1hdGguYXRhbigoTWF0aC50YW4odC55KSAqIE1hdGguc2luKHAueCAtIHgpKSAvIGQgK1xuICAgICAgICAgICAgICAgIChNYXRoLnRhbihwLnkpICogTWF0aC5zaW4oeCAtIHQueCkpIC8gZCk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IERQb2ludCh4LCB5KS5yYWRpYW5zVG9EZWdyZWVzKCk7XG4gICAgICAgIH0pKTtcbiAgICB9O1xuICAgIERQb2ludC5wcm90b3R5cGUuc29ydEJ5RGlzdGFuY2UgPSBmdW5jdGlvbiAocCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICByZXR1cm4gcFxuICAgICAgICAgICAgLmNsb25lKClcbiAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKGQsIGluZGV4KSB7XG4gICAgICAgICAgICBkLnByb3BlcnRpZXMuZGlzdGFuY2UgPSBkLmRpc3RhbmNlKF90aGlzKTtcbiAgICAgICAgICAgIGQucHJvcGVydGllcy5pbmRleCA9IGluZGV4O1xuICAgICAgICAgICAgcmV0dXJuIGQ7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYS5wcm9wZXJ0aWVzLmRpc3RhbmNlIC0gYi5wcm9wZXJ0aWVzLmRpc3RhbmNlOyB9KTtcbiAgICB9O1xuICAgIHJldHVybiBEUG9pbnQ7XG59KCkpO1xuZXhwb3J0IHsgRFBvaW50IH07XG4iLCJpbXBvcnQgeyBEUG9pbnQsIEVBUlRIX1JBRElVU19JTl9NRVRFUlMgfSBmcm9tICcuL0RQb2ludCc7XG5pbXBvcnQgeyBEUG9seWdvbiB9IGZyb20gJy4vRFBvbHlnb24nO1xuaW1wb3J0IHsgY2hlY2tGdW5jdGlvbiB9IGZyb20gJy4vdXRpbHMnO1xudmFyIERDaXJjbGUgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIERDaXJjbGUoY2VudGVyLCByKSB7XG4gICAgICAgIGlmIChjZW50ZXIgPT09IHZvaWQgMCkgeyBjZW50ZXIgPSBEUG9pbnQuemVybygpOyB9XG4gICAgICAgIGlmIChyID09PSB2b2lkIDApIHsgciA9IDA7IH1cbiAgICAgICAgdGhpcy5jZW50ZXIgPSBjZW50ZXI7XG4gICAgICAgIHRoaXMuciA9IHI7XG4gICAgfVxuICAgIERDaXJjbGUucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gXCIoXCIgKyB0aGlzLmNlbnRlci50b1N0cmluZygpICsgXCIsIFwiICsgdGhpcy5yICsgXCIpXCI7XG4gICAgfTtcbiAgICBEQ2lyY2xlLnByb3RvdHlwZS5nZXRWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHsgY2VudGVyOiB0aGlzLmNlbnRlciwgcjogdGhpcy5yIH07XG4gICAgfTtcbiAgICBEQ2lyY2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEQ2lyY2xlKHRoaXMuY2VudGVyLCB0aGlzLnIpO1xuICAgIH07XG4gICAgRENpcmNsZS5wcm90b3R5cGUuZmluZFBvaW50cyA9IGZ1bmN0aW9uIChjKSB7XG4gICAgICAgIGlmICh0aGlzLmVxdWFsKGMpKSB7XG4gICAgICAgICAgICByZXR1cm4gSW5maW5pdHk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIF9hID0gdGhpcywgX2IgPSBfYS5jZW50ZXIsIHgwID0gX2IueCwgeTAgPSBfYi55LCByMCA9IF9hLnI7XG4gICAgICAgIHZhciBfYyA9IGMuY2VudGVyLCB4MSA9IF9jLngsIHkxID0gX2MueSwgcjEgPSBjLnI7XG4gICAgICAgIHZhciByMDIgPSByMCAqIHIwO1xuICAgICAgICB2YXIgZCA9IHRoaXMuY2VudGVyLmRpc3RhbmNlKGMuY2VudGVyKTtcbiAgICAgICAgdmFyIGEgPSAocjAyIC0gcjEgKiByMSArIGQgKiBkKSAvICgyICogZCk7XG4gICAgICAgIHZhciBoID0gTWF0aC5zcXJ0KHIwMiAtIGEgKiBhKTtcbiAgICAgICAgdmFyIGFkID0gYSAvIGQ7XG4gICAgICAgIHZhciBkeSA9IHkxIC0geTA7XG4gICAgICAgIHZhciBkeCA9IHgxIC0geDA7XG4gICAgICAgIHZhciBoZCA9IGggLyBkO1xuICAgICAgICB2YXIgeDIgPSB4MCArIGFkICogKHgxIC0geDApO1xuICAgICAgICB2YXIgeTIgPSB5MCArIGFkICogKHkxIC0geTApO1xuICAgICAgICB2YXIgeDMxID0geDIgKyBoZCAqIGR5O1xuICAgICAgICB2YXIgeTMxID0geTIgLSBoZCAqIGR4O1xuICAgICAgICB2YXIgeDMyID0geDIgLSBoZCAqIGR5O1xuICAgICAgICB2YXIgeTMyID0geTIgKyBoZCAqIGR4O1xuICAgICAgICB2YXIgcmVzID0gW107XG4gICAgICAgIGlmICghaXNOYU4oeDMxKSAmJiAhaXNOYU4oeTMxKSkge1xuICAgICAgICAgICAgcmVzLnB1c2gobmV3IERQb2ludCh4MzEsIHkzMSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNOYU4oeDMyKSAmJiAhaXNOYU4oeTMyKSAmJiAhKHgzMSA9PT0geDMyICYmIHkzMSA9PT0geTMyKSkge1xuICAgICAgICAgICAgcmVzLnB1c2gobmV3IERQb2ludCh4MzIsIHkzMikpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbiAgICBEQ2lyY2xlLnByb3RvdHlwZS5lcXVhbCA9IGZ1bmN0aW9uIChfYSkge1xuICAgICAgICB2YXIgY2VudGVyID0gX2EuY2VudGVyLCByID0gX2EucjtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2VudGVyLmVxdWFsKGNlbnRlcikgJiYgdGhpcy5yID09PSByO1xuICAgIH07XG4gICAgRENpcmNsZS5wcm90b3R5cGUuZmluZFBvbHlnb25JbnNpZGUgPSBmdW5jdGlvbiAocG9pbnRDb3VudCwgc3RhcnRBbmdsZSwgc3RvcEFuZ2xlKSB7XG4gICAgICAgIGlmIChwb2ludENvdW50ID09PSB2b2lkIDApIHsgcG9pbnRDb3VudCA9IDY0OyB9XG4gICAgICAgIGlmIChzdGFydEFuZ2xlID09PSB2b2lkIDApIHsgc3RhcnRBbmdsZSA9IDA7IH1cbiAgICAgICAgaWYgKHN0b3BBbmdsZSA9PT0gdm9pZCAwKSB7IHN0b3BBbmdsZSA9IDIgKiBNYXRoLlBJOyB9XG4gICAgICAgIHZhciBzdGVwID0gMiAqIE1hdGguUEkgLyBwb2ludENvdW50O1xuICAgICAgICB2YXIgcG9pbnRzID0gW107XG4gICAgICAgIHZhciBhbmdsZSA9IHN0YXJ0QW5nbGU7XG4gICAgICAgIHdoaWxlIChhbmdsZSA8IHN0b3BBbmdsZSAtIHN0ZXApIHtcbiAgICAgICAgICAgIHBvaW50cy5wdXNoKG5ldyBEUG9pbnQodGhpcy5yKS5zY2FsZShNYXRoLmNvcyhhbmdsZSksIE1hdGguc2luKGFuZ2xlKSlcbiAgICAgICAgICAgICAgICAubW92ZSh0aGlzLmNlbnRlcikpO1xuICAgICAgICAgICAgYW5nbGUgKz0gc3RlcDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgeCA9IHRoaXMuciAqIE1hdGguY29zKHN0b3BBbmdsZSkgKyB0aGlzLmNlbnRlci54O1xuICAgICAgICB2YXIgeSA9IHRoaXMuciAqIE1hdGguc2luKHN0b3BBbmdsZSkgKyB0aGlzLmNlbnRlci55O1xuICAgICAgICBwb2ludHMucHVzaChuZXcgRFBvaW50KHgsIHkpKTtcbiAgICAgICAgcmV0dXJuIG5ldyBEUG9seWdvbihwb2ludHMpO1xuICAgIH07XG4gICAgRENpcmNsZS5wcm90b3R5cGUuZmluZFBvbHlnb25JbnNpZGVPblNwaGVyZSA9IGZ1bmN0aW9uIChwb2ludENvdW50LCBzdGFydEFuZ2xlLCBzdG9wQW5nbGUpIHtcbiAgICAgICAgaWYgKHBvaW50Q291bnQgPT09IHZvaWQgMCkgeyBwb2ludENvdW50ID0gNjQ7IH1cbiAgICAgICAgaWYgKHN0YXJ0QW5nbGUgPT09IHZvaWQgMCkgeyBzdGFydEFuZ2xlID0gMDsgfVxuICAgICAgICBpZiAoc3RvcEFuZ2xlID09PSB2b2lkIDApIHsgc3RvcEFuZ2xlID0gMiAqIE1hdGguUEk7IH1cbiAgICAgICAgY2hlY2tGdW5jdGlvbignZmluZFBvbHlnb25JbnNpZGVPblNwaGVyZScpXG4gICAgICAgICAgICAuY2hlY2tBcmd1bWVudCgnY2VudGVyJylcbiAgICAgICAgICAgIC5zaG91bGRCZURlZ3JlZSh0aGlzLmNlbnRlcik7XG4gICAgICAgIHZhciBzdGVwID0gMiAqIE1hdGguUEkgLyBwb2ludENvdW50O1xuICAgICAgICB2YXIgcG9pbnRzID0gW107XG4gICAgICAgIHZhciBhbmdsZSA9IHN0YXJ0QW5nbGU7XG4gICAgICAgIHdoaWxlIChhbmdsZSA8IHN0b3BBbmdsZSAtIHN0ZXApIHtcbiAgICAgICAgICAgIHBvaW50cy5wdXNoKHRoaXMuc3BoZXJlT2Zmc2V0KGFuZ2xlKSk7XG4gICAgICAgICAgICBhbmdsZSArPSBzdGVwO1xuICAgICAgICB9XG4gICAgICAgIHBvaW50cy5wdXNoKHRoaXMuc3BoZXJlT2Zmc2V0KHN0b3BBbmdsZSkpO1xuICAgICAgICByZXR1cm4gbmV3IERQb2x5Z29uKHBvaW50cyk7XG4gICAgfTtcbiAgICBEQ2lyY2xlLnByb3RvdHlwZS5zcGhlcmVPZmZzZXQgPSBmdW5jdGlvbiAoYmVhcmluZywgZWFydGhSYWRpdXMpIHtcbiAgICAgICAgaWYgKGVhcnRoUmFkaXVzID09PSB2b2lkIDApIHsgZWFydGhSYWRpdXMgPSBFQVJUSF9SQURJVVNfSU5fTUVURVJTOyB9XG4gICAgICAgIHZhciBfYSA9IHRoaXMuY2VudGVyLmNsb25lKCkuZGVncmVlVG9SYWRpYW5zKCksIGxvbjEgPSBfYS54LCBsYXQxID0gX2EueTtcbiAgICAgICAgdmFyIGRCeVIgPSB0aGlzLnIgLyBlYXJ0aFJhZGl1cztcbiAgICAgICAgdmFyIGxhdCA9IE1hdGguYXNpbihNYXRoLnNpbihsYXQxKSAqIE1hdGguY29zKGRCeVIpICtcbiAgICAgICAgICAgIE1hdGguY29zKGxhdDEpICogTWF0aC5zaW4oZEJ5UikgKiBNYXRoLmNvcyhiZWFyaW5nKSk7XG4gICAgICAgIHZhciBsb24gPSBsb24xICtcbiAgICAgICAgICAgIE1hdGguYXRhbjIoTWF0aC5zaW4oYmVhcmluZykgKiBNYXRoLnNpbihkQnlSKSAqIE1hdGguY29zKGxhdDEpLCBNYXRoLmNvcyhkQnlSKSAtIE1hdGguc2luKGxhdDEpICogTWF0aC5zaW4obGF0KSk7XG4gICAgICAgIHJldHVybiBuZXcgRFBvaW50KGxvbiwgbGF0KS5yYWRpYW5zVG9EZWdyZWVzKCk7XG4gICAgfTtcbiAgICByZXR1cm4gRENpcmNsZTtcbn0oKSk7XG5leHBvcnQgeyBEQ2lyY2xlIH07XG4iLCJ2YXIgX192YWx1ZXMgPSAodGhpcyAmJiB0aGlzLl9fdmFsdWVzKSB8fCBmdW5jdGlvbihvKSB7XG4gICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcbiAgICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn07XG52YXIgRmFzdFNlYXJjaCA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRmFzdFNlYXJjaCgpIHtcbiAgICAgICAgdGhpcy5zZWFyY2hTdG9yZSA9IHt9O1xuICAgIH1cbiAgICBGYXN0U2VhcmNoLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAocG9pbnRzKSB7XG4gICAgICAgIHZhciBlXzEsIF9hO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yICh2YXIgcG9pbnRzXzEgPSBfX3ZhbHVlcyhwb2ludHMpLCBwb2ludHNfMV8xID0gcG9pbnRzXzEubmV4dCgpOyAhcG9pbnRzXzFfMS5kb25lOyBwb2ludHNfMV8xID0gcG9pbnRzXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9iID0gcG9pbnRzXzFfMS52YWx1ZSwgeCA9IF9iLngsIHkgPSBfYi55LCB6ID0gX2IuejtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2VhcmNoU3RvcmVbeF0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hTdG9yZVt4XSA9IHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2VhcmNoU3RvcmVbeF1beV0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hTdG9yZVt4XVt5XSA9IHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFN0b3JlW3hdW3ldW3ogfHwgJ3VuZGVmaW5lZCddID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKHBvaW50c18xXzEgJiYgIXBvaW50c18xXzEuZG9uZSAmJiAoX2EgPSBwb2ludHNfMS5yZXR1cm4pKSBfYS5jYWxsKHBvaW50c18xKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgRmFzdFNlYXJjaC5wcm90b3R5cGUuZmluZCA9IGZ1bmN0aW9uIChfYSkge1xuICAgICAgICB2YXIgeCA9IF9hLngsIHkgPSBfYS55LCB6ID0gX2EuejtcbiAgICAgICAgaWYgKCF0aGlzLnNlYXJjaFN0b3JlW3hdKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLnNlYXJjaFN0b3JlW3hdW3ldKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoU3RvcmVbeF1beV1beiB8fCAndW5kZWZpbmVkJ107XG4gICAgfTtcbiAgICByZXR1cm4gRmFzdFNlYXJjaDtcbn0oKSk7XG5leHBvcnQgeyBGYXN0U2VhcmNoIH07XG4iLCJ2YXIgX19yZWFkID0gKHRoaXMgJiYgdGhpcy5fX3JlYWQpIHx8IGZ1bmN0aW9uIChvLCBuKSB7XG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICAgIGlmICghbSkgcmV0dXJuIG87XG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gICAgdHJ5IHtcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gICAgfVxuICAgIHJldHVybiBhcjtcbn07XG52YXIgX19zcHJlYWRBcnJheSA9ICh0aGlzICYmIHRoaXMuX19zcHJlYWRBcnJheSkgfHwgZnVuY3Rpb24gKHRvLCBmcm9tLCBwYWNrKSB7XG4gICAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcbiAgICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcbn07XG52YXIgX192YWx1ZXMgPSAodGhpcyAmJiB0aGlzLl9fdmFsdWVzKSB8fCBmdW5jdGlvbihvKSB7XG4gICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcbiAgICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn07XG5pbXBvcnQgeyBEUG9pbnQgfSBmcm9tICcuL0RQb2ludCc7XG5pbXBvcnQgeyBEUG9seWdvbiwgTUlOX1BPSU5UU19JTl9WQUxJRF9QT0xZR09OIH0gZnJvbSAnLi9EUG9seWdvbic7XG5pbXBvcnQgeyBGYXN0U2VhcmNoIH0gZnJvbSAnLi9GYXN0U2VhcmNoJztcbmltcG9ydCB7IGNyZWF0ZUFycmF5IH0gZnJvbSAnLi91dGlscyc7XG5leHBvcnQgdmFyIFRyYWNlTWF0cml4VmFsdWVzO1xuKGZ1bmN0aW9uIChUcmFjZU1hdHJpeFZhbHVlcykge1xuICAgIFRyYWNlTWF0cml4VmFsdWVzW1RyYWNlTWF0cml4VmFsdWVzW1wiZlwiXSA9IDBdID0gXCJmXCI7XG4gICAgVHJhY2VNYXRyaXhWYWx1ZXNbVHJhY2VNYXRyaXhWYWx1ZXNbXCJ0XCJdID0gMV0gPSBcInRcIjtcbn0pKFRyYWNlTWF0cml4VmFsdWVzIHx8IChUcmFjZU1hdHJpeFZhbHVlcyA9IHt9KSk7XG52YXIgZ2V0QnlQb3NpdGlvbiA9IGZ1bmN0aW9uIChtLCBwLCBkZWZhdWx0VmFsdWUpIHtcbiAgICBpZiAoZGVmYXVsdFZhbHVlID09PSB2b2lkIDApIHsgZGVmYXVsdFZhbHVlID0gVHJhY2VNYXRyaXhWYWx1ZXMuZjsgfVxuICAgIGlmIChtW3AueV0gPT09IHVuZGVmaW5lZCB8fCBtW3AueV1bcC54XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBtW3AueV1bcC54XTtcbn07XG52YXIgc2V0QnlQb3NpdGlvbiA9IGZ1bmN0aW9uIChtLCBwLCB2YWx1ZSkge1xuICAgIGlmIChtW3AueV0gPT09IHVuZGVmaW5lZCB8fCBtW3AueV1bcC54XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgbVtwLnldW3AueF0gPSB2YWx1ZTtcbiAgICByZXR1cm4gbVtwLnldW3AueF07XG59O1xudmFyIFRyYWNlTWF0cml4ID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBUcmFjZU1hdHJpeChzaXplLCBmKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHRoaXMuc2l6ZSA9IHNpemU7XG4gICAgICAgIHRoaXMuZmluZEdyb3VwQnlJbmRleCA9IGZ1bmN0aW9uIChtLCBzKSB7XG4gICAgICAgICAgICB2YXIgcmVzID0gbmV3IERQb2x5Z29uKCk7XG4gICAgICAgICAgICBpZiAocyAmJiBnZXRCeVBvc2l0aW9uKG0sIHMpID09PSBUcmFjZU1hdHJpeFZhbHVlcy50KSB7XG4gICAgICAgICAgICAgICAgcmVzLnB1c2gocyk7XG4gICAgICAgICAgICAgICAgdmFyIHN0YXJ0SW5kZXggPSAwO1xuICAgICAgICAgICAgICAgIHZhciBtYXJrZWQgPSBUcmFjZU1hdHJpeC5jcmVhdGVNYXRyaXgoX3RoaXMuc2l6ZSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gVHJhY2VNYXRyaXhWYWx1ZXMuZjsgfSk7XG4gICAgICAgICAgICAgICAgc2V0QnlQb3NpdGlvbihtYXJrZWQsIHMsIFRyYWNlTWF0cml4VmFsdWVzLnQpO1xuICAgICAgICAgICAgICAgIHdoaWxlIChzdGFydEluZGV4IDwgcmVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgciA9IHJlcy5hdChzdGFydEluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IC0xOyBpIDwgMjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gLTE7IGogPCAyOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IG5ldyBEUG9pbnQoci54ICsgaSwgci55ICsgaik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdldEJ5UG9zaXRpb24obWFya2VkLCB0LCBUcmFjZU1hdHJpeFZhbHVlcy50KSA9PT0gVHJhY2VNYXRyaXhWYWx1ZXMuZiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRCeVBvc2l0aW9uKG0sIHQsIFRyYWNlTWF0cml4VmFsdWVzLmYpID09PSBUcmFjZU1hdHJpeFZhbHVlcy50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5wdXNoKHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRCeVBvc2l0aW9uKG1hcmtlZCwgdCwgVHJhY2VNYXRyaXhWYWx1ZXMudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXgrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmZpbmRBbGxHcm91cHNJbk1hdHJpeCA9IGZ1bmN0aW9uIChtKSB7XG4gICAgICAgICAgICB2YXIgZmlyc3RNYXJrID0gX3RoaXMuZmluZE1hcmtlZChtKTtcbiAgICAgICAgICAgIGlmICghZmlyc3RNYXJrKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGdyb3VwID0gX3RoaXMuZmluZEdyb3VwQnlJbmRleChtLCBmaXJzdE1hcmspO1xuICAgICAgICAgICAgdmFyIGdyb3VwcyA9IFtncm91cF07XG4gICAgICAgICAgICB2YXIgZ3JvdXBTdW0gPSBncm91cC5sZW5ndGg7XG4gICAgICAgICAgICB2YXIgYWxsR3JvdXBzID0gX19zcHJlYWRBcnJheShbXSwgX19yZWFkKGdyb3VwLnBvaW50cyksIGZhbHNlKTtcbiAgICAgICAgICAgIHZhciBmcyA9IG5ldyBGYXN0U2VhcmNoKCk7XG4gICAgICAgICAgICBmcy5hZGQoYWxsR3JvdXBzKTtcbiAgICAgICAgICAgIHdoaWxlIChncm91cFN1bSA8IF90aGlzLnRvdGFsQ291bnRJbk1hdHJpeChtKSkge1xuICAgICAgICAgICAgICAgIHZhciBtYXJrID0gX3RoaXMuZmluZE1hcmtlZChtKTtcbiAgICAgICAgICAgICAgICB3aGlsZSAobWFyayAmJiBmcy5maW5kKG1hcmspKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hcmsgPSBfdGhpcy5maW5kTWFya2VkKG0sIG1hcmspO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgbmV4dEdyb3VwID0gX3RoaXMuZmluZEdyb3VwQnlJbmRleChtLCBtYXJrKTtcbiAgICAgICAgICAgICAgICBncm91cFN1bSArPSBuZXh0R3JvdXAubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGFsbEdyb3VwcyA9IF9fc3ByZWFkQXJyYXkoX19zcHJlYWRBcnJheShbXSwgX19yZWFkKGFsbEdyb3VwcyksIGZhbHNlKSwgX19yZWFkKG5leHRHcm91cC5wb2ludHMpLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgZnMuYWRkKG5leHRHcm91cC5wb2ludHMpO1xuICAgICAgICAgICAgICAgIGdyb3Vwcy5wdXNoKG5leHRHcm91cCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZ3JvdXBzLmZpbHRlcihmdW5jdGlvbiAoZykgeyByZXR1cm4gZy5sZW5ndGggPiAyOyB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy50cmFjZUdyb3VwID0gZnVuY3Rpb24gKG0sIGdyb3VwKSB7XG4gICAgICAgICAgICB2YXIgdHJhY2VEaXJlY3Rpb25zID0gW1xuICAgICAgICAgICAgICAgIG5ldyBEUG9pbnQoLTEsIC0xKSxcbiAgICAgICAgICAgICAgICBuZXcgRFBvaW50KC0xLCAwKSxcbiAgICAgICAgICAgICAgICBuZXcgRFBvaW50KC0xLCAxKSxcbiAgICAgICAgICAgICAgICBuZXcgRFBvaW50KDAsIDEpLFxuICAgICAgICAgICAgICAgIG5ldyBEUG9pbnQoMSwgMSksXG4gICAgICAgICAgICAgICAgbmV3IERQb2ludCgxLCAwKSxcbiAgICAgICAgICAgICAgICBuZXcgRFBvaW50KDEsIC0xKSxcbiAgICAgICAgICAgICAgICBuZXcgRFBvaW50KDAsIC0xKVxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIHZhciBsZWZ0ID0gZnVuY3Rpb24gKGQpIHsgcmV0dXJuIChkICsgdHJhY2VEaXJlY3Rpb25zLmxlbmd0aCArIDEpICUgdHJhY2VEaXJlY3Rpb25zLmxlbmd0aDsgfTtcbiAgICAgICAgICAgIHZhciByaWdodCA9IGZ1bmN0aW9uIChkKSB7IHJldHVybiAoZCArIHRyYWNlRGlyZWN0aW9ucy5sZW5ndGggLSAxKSAlIHRyYWNlRGlyZWN0aW9ucy5sZW5ndGg7IH07XG4gICAgICAgICAgICBpZiAoZ3JvdXAubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgICAgIHZhciB0ID0gZ3JvdXAuYXQoMCkuY2xvbmUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERQb2x5Z29uKFt0LCB0LCB0XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgcG9pbnRzID0gbmV3IERQb2x5Z29uKCk7XG4gICAgICAgICAgICB2YXIgZGlyZWN0aW9uID0gMDtcbiAgICAgICAgICAgIHZhciBwcmV2RGlyZWN0aW9uID0gSW5maW5pdHk7XG4gICAgICAgICAgICB2YXIgcCA9IGdyb3VwLmF0KDApO1xuICAgICAgICAgICAgd2hpbGUgKCFwLmVxdWFsKGdyb3VwLmF0KDApKSB8fCBwb2ludHMubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0VmFsdWUgPSBnZXRCeVBvc2l0aW9uKG0sIHAuY2xvbmUoKS5tb3ZlKHRyYWNlRGlyZWN0aW9uc1tkaXJlY3Rpb25dKSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0TmVpZ2hib3VyVmFsdWUgPSBnZXRCeVBvc2l0aW9uKG0sIHAuY2xvbmUoKS5tb3ZlKHRyYWNlRGlyZWN0aW9uc1tsZWZ0KGRpcmVjdGlvbildKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0VmFsdWUgPT09IFRyYWNlTWF0cml4VmFsdWVzLnQgJiYgbmV4dE5laWdoYm91clZhbHVlID09PSBUcmFjZU1hdHJpeFZhbHVlcy5mKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSByaWdodChkaXJlY3Rpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocHJldkRpcmVjdGlvbiAhPT0gZGlyZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHApO1xuICAgICAgICAgICAgICAgICAgICBwcmV2RGlyZWN0aW9uID0gZGlyZWN0aW9uO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwID0gcC5jbG9uZSgpLm1vdmUodHJhY2VEaXJlY3Rpb25zW2RpcmVjdGlvbl0pO1xuICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IGxlZnQobGVmdChkaXJlY3Rpb24pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwb2ludHMuYXBwcm94aW1hdGlvbigpLmNsb3NlKCk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuY3JlYXRlSG9sZU1hdHJpeCA9IGZ1bmN0aW9uIChncm91cCkge1xuICAgICAgICAgICAgdmFyIGVfMSwgX2E7XG4gICAgICAgICAgICB2YXIgZnVsbFRyYWNlRGlyZWN0aW9ucyA9IFtcbiAgICAgICAgICAgICAgICBuZXcgRFBvaW50KC0xLCAwKSxcbiAgICAgICAgICAgICAgICBuZXcgRFBvaW50KDAsIDEpLFxuICAgICAgICAgICAgICAgIG5ldyBEUG9pbnQoMSwgMCksXG4gICAgICAgICAgICAgICAgbmV3IERQb2ludCgwLCAtMSlcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBncm91cC5wcmVwYXJlVG9GYXN0U2VhcmNoKCk7XG4gICAgICAgICAgICB2YXIgdG1wTWF0cml4ID0gVHJhY2VNYXRyaXhcbiAgICAgICAgICAgICAgICAuY3JlYXRlTWF0cml4KF90aGlzLnNpemUsIGZ1bmN0aW9uIChwKSB7IHJldHVybiBncm91cC5mYXN0SGFzKHApID8gVHJhY2VNYXRyaXhWYWx1ZXMudCA6IFRyYWNlTWF0cml4VmFsdWVzLmY7IH0pO1xuICAgICAgICAgICAgdmFyIHN0YXJ0Q29vcmRzID0gbmV3IERQb2x5Z29uKCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IF90aGlzLnNpemUudzsgaSsrKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRDb29yZHMucHVzaChuZXcgRFBvaW50KGksIC0xKSk7XG4gICAgICAgICAgICAgICAgc3RhcnRDb29yZHMucHVzaChuZXcgRFBvaW50KGksIF90aGlzLnNpemUuaCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBfdGhpcy5zaXplLmg7IGkrKykge1xuICAgICAgICAgICAgICAgIHN0YXJ0Q29vcmRzLnB1c2gobmV3IERQb2ludCgtMSwgaSkpO1xuICAgICAgICAgICAgICAgIHN0YXJ0Q29vcmRzLnB1c2gobmV3IERQb2ludChfdGhpcy5zaXplLncsIGkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdoaWxlIChzdGFydENvb3Jkcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB2YXIgcG9pbnQgPSBzdGFydENvb3Jkcy5wb3AoKTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBmdWxsVHJhY2VEaXJlY3Rpb25zXzEgPSAoZV8xID0gdm9pZCAwLCBfX3ZhbHVlcyhmdWxsVHJhY2VEaXJlY3Rpb25zKSksIGZ1bGxUcmFjZURpcmVjdGlvbnNfMV8xID0gZnVsbFRyYWNlRGlyZWN0aW9uc18xLm5leHQoKTsgIWZ1bGxUcmFjZURpcmVjdGlvbnNfMV8xLmRvbmU7IGZ1bGxUcmFjZURpcmVjdGlvbnNfMV8xID0gZnVsbFRyYWNlRGlyZWN0aW9uc18xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpcmVjdGlvbiA9IGZ1bGxUcmFjZURpcmVjdGlvbnNfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRtcFBvaW50ID0gcG9pbnQuY2xvbmUoKS5tb3ZlKGRpcmVjdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBnZXRCeVBvc2l0aW9uKHRtcE1hdHJpeCwgdG1wUG9pbnQsIFRyYWNlTWF0cml4VmFsdWVzLnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSBUcmFjZU1hdHJpeFZhbHVlcy5mKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QnlQb3NpdGlvbih0bXBNYXRyaXgsIHRtcFBvaW50LCBUcmFjZU1hdHJpeFZhbHVlcy50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydENvb3Jkcy5wdXNoKHRtcFBvaW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZ1bGxUcmFjZURpcmVjdGlvbnNfMV8xICYmICFmdWxsVHJhY2VEaXJlY3Rpb25zXzFfMS5kb25lICYmIChfYSA9IGZ1bGxUcmFjZURpcmVjdGlvbnNfMS5yZXR1cm4pKSBfYS5jYWxsKGZ1bGxUcmFjZURpcmVjdGlvbnNfMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciB0ID0gX3RoaXMucmV2ZXJzZU1hdHJpeCh0bXBNYXRyaXgpO1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzLnRvdGFsQ291bnRJbk1hdHJpeCh0KSA/IHQgOiBudWxsO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLm0gPSBUcmFjZU1hdHJpeC5jcmVhdGVNYXRyaXgodGhpcy5zaXplLCBmKTtcbiAgICB9XG4gICAgVHJhY2VNYXRyaXgucHJvdG90eXBlLmZ1bGxNYXRyaXhUcmFjZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIGdyb3VwcyA9IHRoaXMuZmluZEFsbEdyb3Vwc0luTWF0cml4KHRoaXMubSk7XG4gICAgICAgIHZhciBwYXRocyA9IGdyb3Vwcy5tYXAoZnVuY3Rpb24gKGcpIHsgcmV0dXJuIF90aGlzLnRyYWNlR3JvdXAoX3RoaXMubSwgZyk7IH0pO1xuICAgICAgICB2YXIgaG9sZU1hdHJpeHMgPSBncm91cHMubWFwKHRoaXMuY3JlYXRlSG9sZU1hdHJpeCk7XG4gICAgICAgIHZhciBob2xlc0dyb3VwcyA9IGhvbGVNYXRyaXhzLm1hcChmdW5jdGlvbiAobSkgeyByZXR1cm4gbSAmJiBfdGhpcy5maW5kQWxsR3JvdXBzSW5NYXRyaXgobSk7IH0pO1xuICAgICAgICB2YXIgaG9sZXNQYXRocyA9IGhvbGVzR3JvdXBzLm1hcChmdW5jdGlvbiAoaGcsIGluZGV4KSB7IHJldHVybiBoZyAmJiBoZy5tYXAoZnVuY3Rpb24gKGcpIHsgcmV0dXJuIF90aGlzXG4gICAgICAgICAgICAudHJhY2VHcm91cChob2xlTWF0cml4c1tpbmRleF0sIGcpOyB9KS5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIHIubGVuZ3RoID4gTUlOX1BPSU5UU19JTl9WQUxJRF9QT0xZR09OOyB9KTsgfSk7XG4gICAgICAgIHJldHVybiBncm91cHMubWFwKGZ1bmN0aW9uIChnLCBpbmRleCkge1xuICAgICAgICAgICAgdmFyIHJlcyA9IHBhdGhzW2luZGV4XTtcbiAgICAgICAgICAgIGlmIChob2xlc0dyb3Vwc1tpbmRleF0gJiYgaG9sZXNHcm91cHNbaW5kZXhdLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJlcy5ob2xlcyA9IGhvbGVzUGF0aHNbaW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBUcmFjZU1hdHJpeC5wcm90b3R5cGUucmV2ZXJzZU1hdHJpeCA9IGZ1bmN0aW9uIChtKSB7XG4gICAgICAgIHJldHVybiBUcmFjZU1hdHJpeC5jcmVhdGVNYXRyaXgodGhpcy5zaXplLCBmdW5jdGlvbiAocCkgeyByZXR1cm4gZ2V0QnlQb3NpdGlvbihtLCBwKSA9PT0gVHJhY2VNYXRyaXhWYWx1ZXMuZiA/IFRyYWNlTWF0cml4VmFsdWVzLnQgOiBUcmFjZU1hdHJpeFZhbHVlcy5mOyB9KTtcbiAgICB9O1xuICAgIFRyYWNlTWF0cml4LnByb3RvdHlwZS5maW5kTWFya2VkID0gZnVuY3Rpb24gKG0sIGluaXQpIHtcbiAgICAgICAgdmFyIHMgPSB0aGlzLnNpemU7XG4gICAgICAgIHZhciBpbmkgPSBmYWxzZTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzLnc7IGkrKykge1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzLmg7IGorKykge1xuICAgICAgICAgICAgICAgIGlmICghaW5pICYmIGluaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgaSA9IGluaXQueDtcbiAgICAgICAgICAgICAgICAgICAgaiA9IGluaXQueTtcbiAgICAgICAgICAgICAgICAgICAgaW5pID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChnZXRCeVBvc2l0aW9uKG0sIG5ldyBEUG9pbnQoaSwgaikpID09PSBUcmFjZU1hdHJpeFZhbHVlcy50KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRFBvaW50KGksIGopO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICAgIFRyYWNlTWF0cml4LnByb3RvdHlwZS50b3RhbENvdW50SW5NYXRyaXggPSBmdW5jdGlvbiAobSkge1xuICAgICAgICB2YXIgcmVzID0gMDtcbiAgICAgICAgdmFyIHMgPSB0aGlzLnNpemU7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcy53OyBpKyspIHtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcy5oOyBqKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoZ2V0QnlQb3NpdGlvbihtLCBuZXcgRFBvaW50KGksIGopKSkge1xuICAgICAgICAgICAgICAgICAgICByZXMrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIFRyYWNlTWF0cml4LmNyZWF0ZU1hdHJpeCA9IGZ1bmN0aW9uIChzaXplLCBmKSB7XG4gICAgICAgIGlmIChmID09PSB2b2lkIDApIHsgZiA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFRyYWNlTWF0cml4VmFsdWVzLmY7IH07IH1cbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFycmF5KHNpemUuaClcbiAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKHYsIGkpIHsgcmV0dXJuIGNyZWF0ZUFycmF5KHNpemUudykubWFwKGZ1bmN0aW9uICh2MiwgaikgeyByZXR1cm4gZihuZXcgRFBvaW50KGosIGkpKTsgfSk7IH0pO1xuICAgIH07XG4gICAgcmV0dXJuIFRyYWNlTWF0cml4O1xufSgpKTtcbmV4cG9ydCB7IFRyYWNlTWF0cml4IH07XG4iLCJ2YXIgX19yZWFkID0gKHRoaXMgJiYgdGhpcy5fX3JlYWQpIHx8IGZ1bmN0aW9uIChvLCBuKSB7XG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICAgIGlmICghbSkgcmV0dXJuIG87XG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gICAgdHJ5IHtcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gICAgfVxuICAgIHJldHVybiBhcjtcbn07XG5pbXBvcnQgeyBEUG9pbnQgfSBmcm9tICcuL0RQb2ludCc7XG5pbXBvcnQgeyBnYXVzc2lhbkVsaW1pbmF0aW9uIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBETnVtYmVycyB9IGZyb20gJy4vRE51bWJlcnMnO1xudmFyIERQbGFuZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRFBsYW5lKGEsIGIsIGMsIGQsIHAxLCBwMiwgcDMpIHtcbiAgICAgICAgaWYgKHAxID09PSB2b2lkIDApIHsgcDEgPSBEUG9pbnQuemVybygpOyB9XG4gICAgICAgIGlmIChwMiA9PT0gdm9pZCAwKSB7IHAyID0gRFBvaW50Lnplcm8oKTsgfVxuICAgICAgICBpZiAocDMgPT09IHZvaWQgMCkgeyBwMyA9IERQb2ludC56ZXJvKCk7IH1cbiAgICAgICAgdGhpcy5hID0gYTtcbiAgICAgICAgdGhpcy5iID0gYjtcbiAgICAgICAgdGhpcy5jID0gYztcbiAgICAgICAgdGhpcy5kID0gZDtcbiAgICAgICAgdGhpcy5wMSA9IHAxO1xuICAgICAgICB0aGlzLnAyID0gcDI7XG4gICAgICAgIHRoaXMucDMgPSBwMztcbiAgICB9XG4gICAgRFBsYW5lLmZpbmQgPSBmdW5jdGlvbiAocDEsIHAyLCBwMykge1xuICAgICAgICBpZiAocDEueCA9PT0gcDIueCAmJiBwMi54ID09PSBwMy54KSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IERQbGFuZSgxLCAwLCAwLCAtcDEueCwgcDEsIHAyLCBwMyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHAxLnkgPT09IHAyLnkgJiYgcDIueSA9PT0gcDMueSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBEUGxhbmUoMCwgMSwgMCwgLXAxLnksIHAxLCBwMiwgcDMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwMS56ID09PSBwMi56ICYmIHAyLnogPT09IHAzLnopIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRFBsYW5lKDAsIDAsIDEsIC1wMS56LCBwMSwgcDIsIHAzKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZCA9IDE7XG4gICAgICAgIHZhciBfYSA9IF9fcmVhZChnYXVzc2lhbkVsaW1pbmF0aW9uKFtcbiAgICAgICAgICAgIFtwMS54LCBwMS55LCBwMS56LCAtZF0sXG4gICAgICAgICAgICBbcDIueCwgcDIueSwgcDIueiwgLWRdLFxuICAgICAgICAgICAgW3AzLngsIHAzLnksIHAzLnosIC1kXVxuICAgICAgICBdKSwgMyksIGEgPSBfYVswXSwgYiA9IF9hWzFdLCBjID0gX2FbMl07XG4gICAgICAgIHJldHVybiBuZXcgRFBsYW5lKGEsIGIsIGMsIGQsIHAxLCBwMiwgcDMpO1xuICAgIH07XG4gICAgRFBsYW5lLnByb3RvdHlwZS54ID0gZnVuY3Rpb24gKHApIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKHAgaW5zdGFuY2VvZiBEUG9pbnQpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IHRoaXMsIGEgPSBfYS5hLCBiID0gX2EuYiwgYyA9IF9hLmMsIGQgPSBfYS5kO1xuICAgICAgICAgICAgdmFyIHkgPSBwLnksIHogPSBwLno7XG4gICAgICAgICAgICBwLnggPSAtKGIgKiB5ICsgYyAqIHogKyBkKSAvIGE7XG4gICAgICAgICAgICByZXR1cm4gcDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcC5tYXAoZnVuY3Rpb24gKHQpIHsgcmV0dXJuIF90aGlzLngodCk7IH0pO1xuICAgIH07XG4gICAgRFBsYW5lLnByb3RvdHlwZS55ID0gZnVuY3Rpb24gKHApIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKHAgaW5zdGFuY2VvZiBEUG9pbnQpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IHRoaXMsIGEgPSBfYS5hLCBiID0gX2EuYiwgYyA9IF9hLmMsIGQgPSBfYS5kO1xuICAgICAgICAgICAgdmFyIHggPSBwLngsIHogPSBwLno7XG4gICAgICAgICAgICBwLnkgPSAtKGEgKiB4ICsgYyAqIHogKyBkKSAvIGI7XG4gICAgICAgICAgICByZXR1cm4gcDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcC5tYXAoZnVuY3Rpb24gKHQpIHsgcmV0dXJuIF90aGlzLnkodCk7IH0pO1xuICAgIH07XG4gICAgRFBsYW5lLnByb3RvdHlwZS56ID0gZnVuY3Rpb24gKHApIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKHAgaW5zdGFuY2VvZiBEUG9pbnQpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IHRoaXMsIGEgPSBfYS5hLCBiID0gX2EuYiwgYyA9IF9hLmMsIGQgPSBfYS5kO1xuICAgICAgICAgICAgdmFyIHggPSBwLngsIHkgPSBwLnk7XG4gICAgICAgICAgICBwLnogPSAtKGEgKiB4ICsgYiAqIHkgKyBkKSAvIGM7XG4gICAgICAgICAgICByZXR1cm4gcDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcC5tYXAoZnVuY3Rpb24gKHQpIHsgcmV0dXJuIF90aGlzLnoodCk7IH0pO1xuICAgIH07XG4gICAgRFBsYW5lLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hID0gdGhpcywgYSA9IF9hLmEsIGIgPSBfYS5iLCBjID0gX2EuYywgZCA9IF9hLmQsIHAxID0gX2EucDEsIHAyID0gX2EucDIsIHAzID0gX2EucDM7XG4gICAgICAgIHJldHVybiBuZXcgRFBsYW5lKGEsIGIsIGMsIGQsIHAxLCBwMiwgcDMpO1xuICAgIH07XG4gICAgRFBsYW5lLnByb3RvdHlwZS5kaXN0YW5jZSA9IGZ1bmN0aW9uIChwKSB7XG4gICAgICAgIGlmIChwIGluc3RhbmNlb2YgRFBvaW50KSB7XG4gICAgICAgICAgICB2YXIgeCA9IHAueCwgeSA9IHAueSwgeiA9IHAuejtcbiAgICAgICAgICAgIHZhciBfYSA9IHRoaXMsIGFfMSA9IF9hLmEsIGJfMSA9IF9hLmIsIGNfMSA9IF9hLmMsIGRfMSA9IF9hLmQ7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5hYnMoYV8xICogeCArIGJfMSAqIHkgKyBjXzEgKiB6ICsgZF8xKSAvIE1hdGguc3FydChhXzEgKiBhXzEgKyBiXzEgKiBiXzEgKyBjXzEgKiBjXzEpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBfYiA9IHAsIGEgPSBfYi5hLCBiID0gX2IuYiwgYyA9IF9iLmMsIGQgPSBfYi5kO1xuICAgICAgICB2YXIgciA9IHRoaXMuZDtcbiAgICAgICAgcmV0dXJuIE1hdGguYWJzKGQgLSByKSAvIE1hdGguc3FydChhICogYSArIGIgKiBiICsgYyAqIGMpO1xuICAgIH07XG4gICAgRFBsYW5lLnByb3RvdHlwZS5lcXVhbCA9IGZ1bmN0aW9uIChwKSB7XG4gICAgICAgIHZhciBhID0gcC5hLCBiID0gcC5iLCBjID0gcC5jLCBkID0gcC5kO1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBxID0gX2EuYSwgdyA9IF9hLmIsIGUgPSBfYS5jLCByID0gX2EuZDtcbiAgICAgICAgcmV0dXJuIEROdW1iZXJzLmxpa2UoYSwgcSkgJiZcbiAgICAgICAgICAgIEROdW1iZXJzLmxpa2UoYiwgdykgJiZcbiAgICAgICAgICAgIEROdW1iZXJzLmxpa2UoYywgZSkgJiZcbiAgICAgICAgICAgIEROdW1iZXJzLmxpa2UoZCwgcik7XG4gICAgfTtcbiAgICBEUGxhbmUucHJvdG90eXBlLnNhbWUgPSBmdW5jdGlvbiAocCkge1xuICAgICAgICB2YXIgYSA9IHAuYSwgYiA9IHAuYiwgYyA9IHAuYywgZCA9IHAuZDtcbiAgICAgICAgdmFyIF9hID0gdGhpcywgcSA9IF9hLmEsIHcgPSBfYS5iLCBlID0gX2EuYywgciA9IF9hLmQ7XG4gICAgICAgIHZhciB0ID0gYSAvIHE7XG4gICAgICAgIHZhciB5ID0gYiAvIHc7XG4gICAgICAgIHZhciB1ID0gYyAvIGU7XG4gICAgICAgIHZhciBpID0gZCAvIHI7XG4gICAgICAgIHJldHVybiBETnVtYmVycy5saWtlKHQsIHkpICYmXG4gICAgICAgICAgICBETnVtYmVycy5saWtlKHQsIHUpICYmXG4gICAgICAgICAgICBETnVtYmVycy5saWtlKHQsIGMpICYmXG4gICAgICAgICAgICBETnVtYmVycy5saWtlKHQsIGkpO1xuICAgIH07XG4gICAgRFBsYW5lLnByb3RvdHlwZS5wYXJhbGxlbCA9IGZ1bmN0aW9uIChwKSB7XG4gICAgICAgIHZhciBhID0gcC5hLCBiID0gcC5iLCBjID0gcC5jLCBkID0gcC5kO1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBxID0gX2EuYSwgdyA9IF9hLmIsIGUgPSBfYS5jLCByID0gX2EuZDtcbiAgICAgICAgdmFyIHQgPSBhIC8gcTtcbiAgICAgICAgdmFyIHkgPSBiIC8gdztcbiAgICAgICAgdmFyIHUgPSBjIC8gZTtcbiAgICAgICAgdmFyIGkgPSBkIC8gcjtcbiAgICAgICAgcmV0dXJuIEROdW1iZXJzLmxpa2UodCwgeSkgJiZcbiAgICAgICAgICAgIEROdW1iZXJzLmxpa2UodCwgdSkgJiZcbiAgICAgICAgICAgIEROdW1iZXJzLmxpa2UodCwgYykgJiZcbiAgICAgICAgICAgICFETnVtYmVycy5saWtlKHQsIGkpO1xuICAgIH07XG4gICAgcmV0dXJuIERQbGFuZTtcbn0oKSk7XG5leHBvcnQgeyBEUGxhbmUgfTtcbiIsImV4cG9ydCAqIGZyb20gJy4vRENpcmNsZSc7XG5leHBvcnQgKiBmcm9tICcuL0RMaW5lJztcbmV4cG9ydCAqIGZyb20gJy4vRE51bWJlcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9EUG9pbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9EUG9seWdvbic7XG5leHBvcnQgKiBmcm9tICcuL0Zhc3RTZWFyY2gnO1xuZXhwb3J0ICogZnJvbSAnLi9UcmFjZU1hdHJpeCc7XG5leHBvcnQgKiBmcm9tICcuL0RQb2x5Z29uTG9vcCc7XG5leHBvcnQgKiBmcm9tICcuL0RQbGFuZSc7XG5leHBvcnQgeyBnYXVzc2lhbkVsaW1pbmF0aW9uLCBjcmVhdGVDYW52YXMsIGNyZWF0ZUFycmF5LCBjcmVhdGVNYXRyaXgsIGlzRGVmQW5kTm90TnVsbCB9IGZyb20gJy4vdXRpbHMnO1xuZXhwb3J0IHZhciBER2VvID0ge1xuICAgIERFQlVHOiBmYWxzZVxufTtcbiJdLCJuYW1lcyI6WyJfX3JlYWQiLCJ0aGlzIiwiX19zcHJlYWRBcnJheSIsIl9fdmFsdWVzIiwib3BlcmF0aW9uIiwianN0c0lvIiwiVHJhY2VNYXRyaXhWYWx1ZXMiXSwibWFwcGluZ3MiOiI7Ozs7OztJQUFBLElBQUlBLFFBQU0sR0FBRyxDQUFDQyxTQUFJLElBQUlBLFNBQUksQ0FBQyxNQUFNLEtBQUssVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3RELElBQUksSUFBSSxDQUFDLEdBQUcsT0FBTyxNQUFNLEtBQUssVUFBVSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDL0QsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxD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Q0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEQsU0FBUztJQUNULFFBQVEsVUFBVSxFQUFFLEtBQUs7SUFDekIsUUFBUSxZQUFZLEVBQUUsSUFBSTtJQUMxQixLQUFLLENBQUMsQ0FBQztJQUNQLElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRTtJQUNuRCxRQUFRLEdBQUcsRUFBRSxZQUFZO0lBQ3pCLFlBQVksT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEQsU0FBUztJQUNULFFBQVEsVUFBVSxFQUFFLEtBQUs7SUFDekIsUUFBUSxZQUFZLEVBQUUsSUFBSTtJQUMxQixLQUFLLENBQUMsQ0FBQztJQUNQLElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRTtJQUNuRCxRQUFRLEdBQUcsRUFBRSxZQUFZO0lBQ3pCLFlBQVksT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEQsU0FBUztJQUNULFFBQVEsVUFBVSxFQUFFLEtBQUs7SUFDekIsUUFBUSxZQUFZLEVBQUUsSUFBSTtJQUMxQixLQUFLLENBQUMsQ0FBQztJQUNQLElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRTtJQUNuRCxRQUFRLEdBQUcsRUFBRSxZQUFZO0lBQ3pCLFlBQVksT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEQsU0FBUztJQUNULFFBQVEsVUFBVSxFQUFF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LENBQUMsR0FBRyxLQUFLLENBQUM7SUFDNUMsU0FBUztJQUNULFFBQVEsVUFBVSxFQUFFLEtBQUs7SUFDekIsUUFBUSxZQUFZLEVBQUUsSUFBSTtJQUMxQixLQUFLLENBQUMsQ0FBQztJQUNQLElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRTtJQUMxRCxRQUFRLEdBQUcsRUFBRSxZQUFZO0lBQ3pCLFlBQVksT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDNUMsU0FBUztJQUNULFFBQVEsVUFBVSxFQUFFLEtBQUs7SUFDekIsUUFBUSxZQUFZLEVBQUUsSUFBSTtJQUMxQixLQUFLLENBQUMsQ0FBQztJQUNQLElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRTtJQUNyRCxRQUFRLEdBQUcsRUFBRSxZQUFZO0lBQ3pCLFlBQVksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFDLFNBQVM7SUFDVCxRQUFRLFVBQVUsRUFBRSxLQUFLO0lBQ3pCLFFBQVEsWUFBWSxFQUFFLElBQUk7SUFDMUIsS0FBSyxDQUFDLENBQUM7SUFDUCxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLFlBQVk7SUFDeEMsUUFBUSxhQUFhLENBQUMsT0FBTyxDQUFDO0lBQzlCLGFBQWEsYUFBYSxDQUFDLFlBQVksQ0FBQztJQUN4QyxhQUFhLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3ZDLGFBQWEsYUFBYSxDQUFDLFVBQVUsQ0FBQztJQUN0QyxhQUFhLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEMsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkYsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQzNDLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO0lBQ25CLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLFNBQVM7SUFDVCxRQUFRLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzdDLEtBQUssQ0FBQztJQUNOLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsWUFBWTtJQUN4QyxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM5RixRQUFRLE9BQU8sY0FBYyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7SUFDM0UsS0FBSyxDQUFDO0lBQ04sSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDaEQsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqRCxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDakYsUUFBUSxJQUFJLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM1RCxRQUFRLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDMUMsUUFBUSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELFFBQVEsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNyQyxRQUFRLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDeEYsWUFBWSxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25ELFNBQVM7SUFDVCxRQUFRLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRTtJQUNqRSxZQUFZLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDekIsWUFBWSxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3RCLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDWixLQUFLLENBQUM7SUFDTixJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRTtJQUNsRCxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDL0IsUUFBUSxJQUFJLEtBQUssS0FBSyxLQUFLLENBQUMsRUFBRSxFQUFFLEtBQUssR0FBRyxNQUFNLENBQUMsRUFBRTtJQUNqRCxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxQyxRQUFRLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFGLFFBQVEsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxLQUFLLEVBQUU7SUFDcEMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ3BCLFNBQVM7SUFDVCxhQUFhLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRTtJQUMzQyxZQUFZLEdB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VyxFQUFFLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM3SixJQUFJLFNBQVMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLE9BQU8sVUFBVSxDQUFDLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3RFLElBQUksU0FBUyxJQUFJLENBQUMsRUFBRSxFQUFFO0lBQ3RCLFFBQVEsSUFBSSxDQUFDLEVBQUUsTUFBTSxJQUFJLFNBQVMsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0lBQ3RFLFFBQVEsT0FBTyxDQUFDLEVBQUUsSUFBSTtJQUN0QixZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3pLLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRCxZQUFZLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN6QixnQkFBZ0IsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxD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QUMsS0FBSyxDQUFDLEVBQUU7SUFDN0MsS0FBSztJQUNMLElBQUksSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ3BCLElBQUksSUFBSTtJQUNSLFFBQVEsS0FBSyxJQUFJLEVBQUUsR0FBR0csVUFBUSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO0lBQ3hHLFlBQVksSUFBSSxFQUFFLEdBQUdILFFBQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN6RyxZQUFZLElBQUksS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELFlBQVksSUFBSSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkQsWUFBWSxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVDLFlBQVksSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUU7SUFDbEQsZ0JBQWdCLE9BQU8sSUFB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LE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxFQUFFO0lBQzlDLFFBQVEsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0MsS0FBSyxDQUFDO0lBQ04sSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsRUFBRTtJQUMzQyxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUQsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVELFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkIsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQixRQUFRLE9BQU8sSUFBSSxDQUFDO0lBQ3BCLEtBQUssQ0FBQztJQUNOLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDLEVBQUU7SUFDOUMsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDMUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25ELFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFFBQVEsT0FBTyxJQUFJLENBQUM7SUFDcEIsS0FBSyxDQUFDO0lBQ04sSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsRUFBRTtJQUM5QyxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxQyxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkQsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEQsUUFBUSxPQUFPLElBQUksQ0FBQztJQUNwQixLQUFLLENBQUM7SUFDTixJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxFQUFFO0lBQzlDLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzFDLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuRCxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFB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TSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0MsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2xELFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3ZDLFFBQVEsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN2QixRQUFRLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDekIsUUFBUSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ3pCLFFBQVEsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN2QixRQUFRLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3JDLFFBQVEsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDckMsUUFBUSxJQUFJLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUMvQixRQUFRLElBQUksR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQy9CLFFBQVEsSUFBSSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDL0IsUUFBUSxJQUFJLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUMvQixRQUFRLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUNyQixRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7SUFDeEMsWUFB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SUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNyQyxJQUFJLElBQUk7SUFDUixRQUFRLE9BQU8sQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuRixLQUFLO0lBQ0wsSUFBSSxPQUFPLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO0lBQzNDLFlBQVk7SUFDWixRQUFRLElBQUk7SUFDWixZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3RCxTQUFTO0lBQ1QsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7SUFDekMsS0FBSztJQUNMLElBQUksT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDLENBQUM7QUFJQyxRQUFDLE1BQU0sSUFBSSxZQUFZO0lBQzFCLElBQUksU0FBUyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0lBQzVDLFFBQVEsSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUU7SUFDbEQsUUFBUSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRTtJQUNsRCxRQUFRLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFO0lBQ2xELFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkIsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQixRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkIsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNyQixRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDckIsS0FBSztJQUNMLElBQUksTUFBTSxDQUFDLElBQUksR0FBRyxVQUFVLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0lBQ3hDLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFO0lBQzVDLFlBQVksT0FBTyxJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMxRCxTQUFTO0lBQ1QsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUU7SUFDNUMsWUFBWSxPQUFPLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzFELFNBQVM7SUFDVCxRQUFRLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRTtJQUM1QyxZQUFZLE9BQU8sSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDMUQsU0FBUztJQUNULFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLFFBQVEsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDO0lBQzVDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNsQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbEMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hELFFBQVEsT0FBTyxJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNsRCxLQUFLLENBQUM7SUFDTixJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxFQUFFO0lBQ3RDLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDO0lBQ3pCLFFBQVEsSUFBSSxDQUFDLFlBQVksTUFBTSxFQUFFO0lBQ2pDLFlBQVksSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNDLFlBQVksT0FBTyxDQUFDLENBQUM7SUFDckIsU0FBUztJQUNULFFBQVEsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzFELEtBQUssQ0FBQztJQUNOLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLEVBQUU7SUFDdEMsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUM7SUFDekIsUUFBUSxJQUFJLENBQUMsWUFBWSxNQUFNLEVBQUU7SUFDakMsWUFBWSxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbEUsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0MsWUFBWSxPQUFPLENBQUMsQ0FBQztJQUNyQixTQUFTO0lBQ1QsUUFBUSxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDMUQsS0FBSyxDQUFDO0lBQ04sSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsRUFBRTtJQUN0QyxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQztJQUN6QixRQUFRLElBQUksQ0FBQyxZQUFZLE1BQU0sRUFBRTtJQUNqQyxZQUFZLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNsRSxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakMsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzQyxZQUFZLE9BQU8sQ0FBQyxDQUFDO0lBQ3JCLFNBQVM7SUFDVCxRQUFRLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMxRCxLQUFLLENBQUM7SUFDTixJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLFlBQVk7SUFDekMsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDbEcsUUFBUSxPQUFPLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELEtBQUssQ0FBQztJQUNOLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLEVBQUU7SUFDN0MsUUFBUSxJQUFJLENBQUMsWUFBWSxNQUFNLEVBQUU7SUFDakMsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFDLFlBQVksSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzFFLFlBQVksT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUM5RyxTQUFTO0lBQ1QsUUFBUSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDM0QsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3ZCLFFBQVEsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbEUsS0FBSyxDQUFDO0lBQ04sSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsRUFBRTtJQUMxQyxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0MsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDOUQsUUFBUSxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNsQyxZQUFZLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQixZQUFZLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQixZQUFZLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLEtBQUssQ0FBQztJQUNOLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLEVBQUU7SUFDekMsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9DLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzlELFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN0QixRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEIsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RCLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN0QixRQUFRLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLFlBQVksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQy9CLFlBQVksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQy9CLFlBQVksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEMsS0FBSyxDQUFDO0lBQ04sSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsRUFBRTtJQUM3QyxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0MsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDOUQsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RCLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN0QixRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEIsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RCLFFBQVEsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbEMsWUFBWSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0IsWUFBWSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0IsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLEtBQUssQ0FBQztJQUNOLElBQUksT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQyxFQUFFOztBQ3JITyxRQUFDLElBQUksR0FBRztJQUNsQixJQUFJLEtBQUssRUFBRSxLQUFLO0lBQ2hCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OyJ9