@01/launcher 1.0.14 → 1.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -7,798 +7,122 @@
7
7
  exports["index"] = factory();
8
8
  else
9
9
  root["index"] = factory();
10
- })(global, function() {
11
- return /******/ (function(modules) { // webpackBootstrap
12
- /******/ // eslint-disable-next-line no-unused-vars
13
- /******/ function hotDownloadUpdateChunk(chunkId) {
14
- /******/ var chunk = require("./" + "" + chunkId + "." + hotCurrentHash + ".hot-update.js");
15
- /******/ hotAddUpdateChunk(chunk.id, chunk.modules);
16
- /******/ }
17
- /******/
18
- /******/ // eslint-disable-next-line no-unused-vars
19
- /******/ function hotDownloadManifest() {
20
- /******/ try {
21
- /******/ var update = require("./" + "" + hotCurrentHash + ".hot-update.json");
22
- /******/ } catch (e) {
23
- /******/ return Promise.resolve();
24
- /******/ }
25
- /******/ return Promise.resolve(update);
26
- /******/ }
27
- /******/
28
- /******/ //eslint-disable-next-line no-unused-vars
29
- /******/ function hotDisposeChunk(chunkId) {
30
- /******/ delete installedChunks[chunkId];
31
- /******/ }
32
- /******/
33
- /******/ var hotApplyOnUpdate = true;
34
- /******/ // eslint-disable-next-line no-unused-vars
35
- /******/ var hotCurrentHash = "76055d480bc48a8f4c1f";
36
- /******/ var hotRequestTimeout = 10000;
37
- /******/ var hotCurrentModuleData = {};
38
- /******/ var hotCurrentChildModule;
39
- /******/ // eslint-disable-next-line no-unused-vars
40
- /******/ var hotCurrentParents = [];
41
- /******/ // eslint-disable-next-line no-unused-vars
42
- /******/ var hotCurrentParentsTemp = [];
43
- /******/
44
- /******/ // eslint-disable-next-line no-unused-vars
45
- /******/ function hotCreateRequire(moduleId) {
46
- /******/ var me = installedModules[moduleId];
47
- /******/ if (!me) return __webpack_require__;
48
- /******/ var fn = function(request) {
49
- /******/ if (me.hot.active) {
50
- /******/ if (installedModules[request]) {
51
- /******/ if (installedModules[request].parents.indexOf(moduleId) === -1) {
52
- /******/ installedModules[request].parents.push(moduleId);
53
- /******/ }
54
- /******/ } else {
55
- /******/ hotCurrentParents = [moduleId];
56
- /******/ hotCurrentChildModule = request;
57
- /******/ }
58
- /******/ if (me.children.indexOf(request) === -1) {
59
- /******/ me.children.push(request);
60
- /******/ }
61
- /******/ } else {
62
- /******/ console.warn(
63
- /******/ "[HMR] unexpected require(" +
64
- /******/ request +
65
- /******/ ") from disposed module " +
66
- /******/ moduleId
67
- /******/ );
68
- /******/ hotCurrentParents = [];
69
- /******/ }
70
- /******/ return __webpack_require__(request);
71
- /******/ };
72
- /******/ var ObjectFactory = function ObjectFactory(name) {
73
- /******/ return {
74
- /******/ configurable: true,
75
- /******/ enumerable: true,
76
- /******/ get: function() {
77
- /******/ return __webpack_require__[name];
78
- /******/ },
79
- /******/ set: function(value) {
80
- /******/ __webpack_require__[name] = value;
81
- /******/ }
82
- /******/ };
83
- /******/ };
84
- /******/ for (var name in __webpack_require__) {
85
- /******/ if (
86
- /******/ Object.prototype.hasOwnProperty.call(__webpack_require__, name) &&
87
- /******/ name !== "e" &&
88
- /******/ name !== "t"
89
- /******/ ) {
90
- /******/ Object.defineProperty(fn, name, ObjectFactory(name));
91
- /******/ }
92
- /******/ }
93
- /******/ fn.e = function(chunkId) {
94
- /******/ if (hotStatus === "ready") hotSetStatus("prepare");
95
- /******/ hotChunksLoading++;
96
- /******/ return __webpack_require__.e(chunkId).then(finishChunkLoading, function(err) {
97
- /******/ finishChunkLoading();
98
- /******/ throw err;
99
- /******/ });
100
- /******/
101
- /******/ function finishChunkLoading() {
102
- /******/ hotChunksLoading--;
103
- /******/ if (hotStatus === "prepare") {
104
- /******/ if (!hotWaitingFilesMap[chunkId]) {
105
- /******/ hotEnsureUpdateChunk(chunkId);
106
- /******/ }
107
- /******/ if (hotChunksLoading === 0 && hotWaitingFiles === 0) {
108
- /******/ hotUpdateDownloaded();
109
- /******/ }
110
- /******/ }
111
- /******/ }
112
- /******/ };
113
- /******/ fn.t = function(value, mode) {
114
- /******/ if (mode & 1) value = fn(value);
115
- /******/ return __webpack_require__.t(value, mode & ~1);
116
- /******/ };
117
- /******/ return fn;
118
- /******/ }
119
- /******/
120
- /******/ // eslint-disable-next-line no-unused-vars
121
- /******/ function hotCreateModule(moduleId) {
122
- /******/ var hot = {
123
- /******/ // private stuff
124
- /******/ _acceptedDependencies: {},
125
- /******/ _declinedDependencies: {},
126
- /******/ _selfAccepted: false,
127
- /******/ _selfDeclined: false,
128
- /******/ _disposeHandlers: [],
129
- /******/ _main: hotCurrentChildModule !== moduleId,
130
- /******/
131
- /******/ // Module API
132
- /******/ active: true,
133
- /******/ accept: function(dep, callback) {
134
- /******/ if (dep === undefined) hot._selfAccepted = true;
135
- /******/ else if (typeof dep === "function") hot._selfAccepted = dep;
136
- /******/ else if (typeof dep === "object")
137
- /******/ for (var i = 0; i < dep.length; i++)
138
- /******/ hot._acceptedDependencies[dep[i]] = callback || function() {};
139
- /******/ else hot._acceptedDependencies[dep] = callback || function() {};
140
- /******/ },
141
- /******/ decline: function(dep) {
142
- /******/ if (dep === undefined) hot._selfDeclined = true;
143
- /******/ else if (typeof dep === "object")
144
- /******/ for (var i = 0; i < dep.length; i++)
145
- /******/ hot._declinedDependencies[dep[i]] = true;
146
- /******/ else hot._declinedDependencies[dep] = true;
147
- /******/ },
148
- /******/ dispose: function(callback) {
149
- /******/ hot._disposeHandlers.push(callback);
150
- /******/ },
151
- /******/ addDisposeHandler: function(callback) {
152
- /******/ hot._disposeHandlers.push(callback);
153
- /******/ },
154
- /******/ removeDisposeHandler: function(callback) {
155
- /******/ var idx = hot._disposeHandlers.indexOf(callback);
156
- /******/ if (idx >= 0) hot._disposeHandlers.splice(idx, 1);
157
- /******/ },
158
- /******/
159
- /******/ // Management API
160
- /******/ check: hotCheck,
161
- /******/ apply: hotApply,
162
- /******/ status: function(l) {
163
- /******/ if (!l) return hotStatus;
164
- /******/ hotStatusHandlers.push(l);
165
- /******/ },
166
- /******/ addStatusHandler: function(l) {
167
- /******/ hotStatusHandlers.push(l);
168
- /******/ },
169
- /******/ removeStatusHandler: function(l) {
170
- /******/ var idx = hotStatusHandlers.indexOf(l);
171
- /******/ if (idx >= 0) hotStatusHandlers.splice(idx, 1);
172
- /******/ },
173
- /******/
174
- /******/ //inherit from previous dispose call
175
- /******/ data: hotCurrentModuleData[moduleId]
176
- /******/ };
177
- /******/ hotCurrentChildModule = undefined;
178
- /******/ return hot;
179
- /******/ }
180
- /******/
181
- /******/ var hotStatusHandlers = [];
182
- /******/ var hotStatus = "idle";
183
- /******/
184
- /******/ function hotSetStatus(newStatus) {
185
- /******/ hotStatus = newStatus;
186
- /******/ for (var i = 0; i < hotStatusHandlers.length; i++)
187
- /******/ hotStatusHandlers[i].call(null, newStatus);
188
- /******/ }
189
- /******/
190
- /******/ // while downloading
191
- /******/ var hotWaitingFiles = 0;
192
- /******/ var hotChunksLoading = 0;
193
- /******/ var hotWaitingFilesMap = {};
194
- /******/ var hotRequestedFilesMap = {};
195
- /******/ var hotAvailableFilesMap = {};
196
- /******/ var hotDeferred;
197
- /******/
198
- /******/ // The update info
199
- /******/ var hotUpdate, hotUpdateNewHash;
200
- /******/
201
- /******/ function toModuleId(id) {
202
- /******/ var isNumber = +id + "" === id;
203
- /******/ return isNumber ? +id : id;
204
- /******/ }
205
- /******/
206
- /******/ function hotCheck(apply) {
207
- /******/ if (hotStatus !== "idle") {
208
- /******/ throw new Error("check() is only allowed in idle status");
209
- /******/ }
210
- /******/ hotApplyOnUpdate = apply;
211
- /******/ hotSetStatus("check");
212
- /******/ return hotDownloadManifest(hotRequestTimeout).then(function(update) {
213
- /******/ if (!update) {
214
- /******/ hotSetStatus("idle");
215
- /******/ return null;
216
- /******/ }
217
- /******/ hotRequestedFilesMap = {};
218
- /******/ hotWaitingFilesMap = {};
219
- /******/ hotAvailableFilesMap = update.c;
220
- /******/ hotUpdateNewHash = update.h;
221
- /******/
222
- /******/ hotSetStatus("prepare");
223
- /******/ var promise = new Promise(function(resolve, reject) {
224
- /******/ hotDeferred = {
225
- /******/ resolve: resolve,
226
- /******/ reject: reject
227
- /******/ };
228
- /******/ });
229
- /******/ hotUpdate = {};
230
- /******/ var chunkId = 0;
231
- /******/ // eslint-disable-next-line no-lone-blocks
232
- /******/ {
233
- /******/ /*globals chunkId */
234
- /******/ hotEnsureUpdateChunk(chunkId);
235
- /******/ }
236
- /******/ if (
237
- /******/ hotStatus === "prepare" &&
238
- /******/ hotChunksLoading === 0 &&
239
- /******/ hotWaitingFiles === 0
240
- /******/ ) {
241
- /******/ hotUpdateDownloaded();
242
- /******/ }
243
- /******/ return promise;
244
- /******/ });
245
- /******/ }
246
- /******/
247
- /******/ // eslint-disable-next-line no-unused-vars
248
- /******/ function hotAddUpdateChunk(chunkId, moreModules) {
249
- /******/ if (!hotAvailableFilesMap[chunkId] || !hotRequestedFilesMap[chunkId])
250
- /******/ return;
251
- /******/ hotRequestedFilesMap[chunkId] = false;
252
- /******/ for (var moduleId in moreModules) {
253
- /******/ if (Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {
254
- /******/ hotUpdate[moduleId] = moreModules[moduleId];
255
- /******/ }
256
- /******/ }
257
- /******/ if (--hotWaitingFiles === 0 && hotChunksLoading === 0) {
258
- /******/ hotUpdateDownloaded();
259
- /******/ }
260
- /******/ }
261
- /******/
262
- /******/ function hotEnsureUpdateChunk(chunkId) {
263
- /******/ if (!hotAvailableFilesMap[chunkId]) {
264
- /******/ hotWaitingFilesMap[chunkId] = true;
265
- /******/ } else {
266
- /******/ hotRequestedFilesMap[chunkId] = true;
267
- /******/ hotWaitingFiles++;
268
- /******/ hotDownloadUpdateChunk(chunkId);
269
- /******/ }
270
- /******/ }
271
- /******/
272
- /******/ function hotUpdateDownloaded() {
273
- /******/ hotSetStatus("ready");
274
- /******/ var deferred = hotDeferred;
275
- /******/ hotDeferred = null;
276
- /******/ if (!deferred) return;
277
- /******/ if (hotApplyOnUpdate) {
278
- /******/ // Wrap deferred object in Promise to mark it as a well-handled Promise to
279
- /******/ // avoid triggering uncaught exception warning in Chrome.
280
- /******/ // See https://bugs.chromium.org/p/chromium/issues/detail?id=465666
281
- /******/ Promise.resolve()
282
- /******/ .then(function() {
283
- /******/ return hotApply(hotApplyOnUpdate);
284
- /******/ })
285
- /******/ .then(
286
- /******/ function(result) {
287
- /******/ deferred.resolve(result);
288
- /******/ },
289
- /******/ function(err) {
290
- /******/ deferred.reject(err);
291
- /******/ }
292
- /******/ );
293
- /******/ } else {
294
- /******/ var outdatedModules = [];
295
- /******/ for (var id in hotUpdate) {
296
- /******/ if (Object.prototype.hasOwnProperty.call(hotUpdate, id)) {
297
- /******/ outdatedModules.push(toModuleId(id));
298
- /******/ }
299
- /******/ }
300
- /******/ deferred.resolve(outdatedModules);
301
- /******/ }
302
- /******/ }
303
- /******/
304
- /******/ function hotApply(options) {
305
- /******/ if (hotStatus !== "ready")
306
- /******/ throw new Error("apply() is only allowed in ready status");
307
- /******/ options = options || {};
308
- /******/
309
- /******/ var cb;
310
- /******/ var i;
311
- /******/ var j;
312
- /******/ var module;
313
- /******/ var moduleId;
314
- /******/
315
- /******/ function getAffectedStuff(updateModuleId) {
316
- /******/ var outdatedModules = [updateModuleId];
317
- /******/ var outdatedDependencies = {};
318
- /******/
319
- /******/ var queue = outdatedModules.map(function(id) {
320
- /******/ return {
321
- /******/ chain: [id],
322
- /******/ id: id
323
- /******/ };
324
- /******/ });
325
- /******/ while (queue.length > 0) {
326
- /******/ var queueItem = queue.pop();
327
- /******/ var moduleId = queueItem.id;
328
- /******/ var chain = queueItem.chain;
329
- /******/ module = installedModules[moduleId];
330
- /******/ if (!module || module.hot._selfAccepted) continue;
331
- /******/ if (module.hot._selfDeclined) {
332
- /******/ return {
333
- /******/ type: "self-declined",
334
- /******/ chain: chain,
335
- /******/ moduleId: moduleId
336
- /******/ };
337
- /******/ }
338
- /******/ if (module.hot._main) {
339
- /******/ return {
340
- /******/ type: "unaccepted",
341
- /******/ chain: chain,
342
- /******/ moduleId: moduleId
343
- /******/ };
344
- /******/ }
345
- /******/ for (var i = 0; i < module.parents.length; i++) {
346
- /******/ var parentId = module.parents[i];
347
- /******/ var parent = installedModules[parentId];
348
- /******/ if (!parent) continue;
349
- /******/ if (parent.hot._declinedDependencies[moduleId]) {
350
- /******/ return {
351
- /******/ type: "declined",
352
- /******/ chain: chain.concat([parentId]),
353
- /******/ moduleId: moduleId,
354
- /******/ parentId: parentId
355
- /******/ };
356
- /******/ }
357
- /******/ if (outdatedModules.indexOf(parentId) !== -1) continue;
358
- /******/ if (parent.hot._acceptedDependencies[moduleId]) {
359
- /******/ if (!outdatedDependencies[parentId])
360
- /******/ outdatedDependencies[parentId] = [];
361
- /******/ addAllToSet(outdatedDependencies[parentId], [moduleId]);
362
- /******/ continue;
363
- /******/ }
364
- /******/ delete outdatedDependencies[parentId];
365
- /******/ outdatedModules.push(parentId);
366
- /******/ queue.push({
367
- /******/ chain: chain.concat([parentId]),
368
- /******/ id: parentId
369
- /******/ });
370
- /******/ }
371
- /******/ }
372
- /******/
373
- /******/ return {
374
- /******/ type: "accepted",
375
- /******/ moduleId: updateModuleId,
376
- /******/ outdatedModules: outdatedModules,
377
- /******/ outdatedDependencies: outdatedDependencies
378
- /******/ };
379
- /******/ }
380
- /******/
381
- /******/ function addAllToSet(a, b) {
382
- /******/ for (var i = 0; i < b.length; i++) {
383
- /******/ var item = b[i];
384
- /******/ if (a.indexOf(item) === -1) a.push(item);
385
- /******/ }
386
- /******/ }
387
- /******/
388
- /******/ // at begin all updates modules are outdated
389
- /******/ // the "outdated" status can propagate to parents if they don't accept the children
390
- /******/ var outdatedDependencies = {};
391
- /******/ var outdatedModules = [];
392
- /******/ var appliedUpdate = {};
393
- /******/
394
- /******/ var warnUnexpectedRequire = function warnUnexpectedRequire() {
395
- /******/ console.warn(
396
- /******/ "[HMR] unexpected require(" + result.moduleId + ") to disposed module"
397
- /******/ );
398
- /******/ };
399
- /******/
400
- /******/ for (var id in hotUpdate) {
401
- /******/ if (Object.prototype.hasOwnProperty.call(hotUpdate, id)) {
402
- /******/ moduleId = toModuleId(id);
403
- /******/ /** @type {TODO} */
404
- /******/ var result;
405
- /******/ if (hotUpdate[id]) {
406
- /******/ result = getAffectedStuff(moduleId);
407
- /******/ } else {
408
- /******/ result = {
409
- /******/ type: "disposed",
410
- /******/ moduleId: id
411
- /******/ };
412
- /******/ }
413
- /******/ /** @type {Error|false} */
414
- /******/ var abortError = false;
415
- /******/ var doApply = false;
416
- /******/ var doDispose = false;
417
- /******/ var chainInfo = "";
418
- /******/ if (result.chain) {
419
- /******/ chainInfo = "\nUpdate propagation: " + result.chain.join(" -> ");
420
- /******/ }
421
- /******/ switch (result.type) {
422
- /******/ case "self-declined":
423
- /******/ if (options.onDeclined) options.onDeclined(result);
424
- /******/ if (!options.ignoreDeclined)
425
- /******/ abortError = new Error(
426
- /******/ "Aborted because of self decline: " +
427
- /******/ result.moduleId +
428
- /******/ chainInfo
429
- /******/ );
430
- /******/ break;
431
- /******/ case "declined":
432
- /******/ if (options.onDeclined) options.onDeclined(result);
433
- /******/ if (!options.ignoreDeclined)
434
- /******/ abortError = new Error(
435
- /******/ "Aborted because of declined dependency: " +
436
- /******/ result.moduleId +
437
- /******/ " in " +
438
- /******/ result.parentId +
439
- /******/ chainInfo
440
- /******/ );
441
- /******/ break;
442
- /******/ case "unaccepted":
443
- /******/ if (options.onUnaccepted) options.onUnaccepted(result);
444
- /******/ if (!options.ignoreUnaccepted)
445
- /******/ abortError = new Error(
446
- /******/ "Aborted because " + moduleId + " is not accepted" + chainInfo
447
- /******/ );
448
- /******/ break;
449
- /******/ case "accepted":
450
- /******/ if (options.onAccepted) options.onAccepted(result);
451
- /******/ doApply = true;
452
- /******/ break;
453
- /******/ case "disposed":
454
- /******/ if (options.onDisposed) options.onDisposed(result);
455
- /******/ doDispose = true;
456
- /******/ break;
457
- /******/ default:
458
- /******/ throw new Error("Unexception type " + result.type);
459
- /******/ }
460
- /******/ if (abortError) {
461
- /******/ hotSetStatus("abort");
462
- /******/ return Promise.reject(abortError);
463
- /******/ }
464
- /******/ if (doApply) {
465
- /******/ appliedUpdate[moduleId] = hotUpdate[moduleId];
466
- /******/ addAllToSet(outdatedModules, result.outdatedModules);
467
- /******/ for (moduleId in result.outdatedDependencies) {
468
- /******/ if (
469
- /******/ Object.prototype.hasOwnProperty.call(
470
- /******/ result.outdatedDependencies,
471
- /******/ moduleId
472
- /******/ )
473
- /******/ ) {
474
- /******/ if (!outdatedDependencies[moduleId])
475
- /******/ outdatedDependencies[moduleId] = [];
476
- /******/ addAllToSet(
477
- /******/ outdatedDependencies[moduleId],
478
- /******/ result.outdatedDependencies[moduleId]
479
- /******/ );
480
- /******/ }
481
- /******/ }
482
- /******/ }
483
- /******/ if (doDispose) {
484
- /******/ addAllToSet(outdatedModules, [result.moduleId]);
485
- /******/ appliedUpdate[moduleId] = warnUnexpectedRequire;
486
- /******/ }
487
- /******/ }
488
- /******/ }
489
- /******/
490
- /******/ // Store self accepted outdated modules to require them later by the module system
491
- /******/ var outdatedSelfAcceptedModules = [];
492
- /******/ for (i = 0; i < outdatedModules.length; i++) {
493
- /******/ moduleId = outdatedModules[i];
494
- /******/ if (
495
- /******/ installedModules[moduleId] &&
496
- /******/ installedModules[moduleId].hot._selfAccepted &&
497
- /******/ // removed self-accepted modules should not be required
498
- /******/ appliedUpdate[moduleId] !== warnUnexpectedRequire
499
- /******/ ) {
500
- /******/ outdatedSelfAcceptedModules.push({
501
- /******/ module: moduleId,
502
- /******/ errorHandler: installedModules[moduleId].hot._selfAccepted
503
- /******/ });
504
- /******/ }
505
- /******/ }
506
- /******/
507
- /******/ // Now in "dispose" phase
508
- /******/ hotSetStatus("dispose");
509
- /******/ Object.keys(hotAvailableFilesMap).forEach(function(chunkId) {
510
- /******/ if (hotAvailableFilesMap[chunkId] === false) {
511
- /******/ hotDisposeChunk(chunkId);
512
- /******/ }
513
- /******/ });
514
- /******/
515
- /******/ var idx;
516
- /******/ var queue = outdatedModules.slice();
517
- /******/ while (queue.length > 0) {
518
- /******/ moduleId = queue.pop();
519
- /******/ module = installedModules[moduleId];
520
- /******/ if (!module) continue;
521
- /******/
522
- /******/ var data = {};
523
- /******/
524
- /******/ // Call dispose handlers
525
- /******/ var disposeHandlers = module.hot._disposeHandlers;
526
- /******/ for (j = 0; j < disposeHandlers.length; j++) {
527
- /******/ cb = disposeHandlers[j];
528
- /******/ cb(data);
529
- /******/ }
530
- /******/ hotCurrentModuleData[moduleId] = data;
531
- /******/
532
- /******/ // disable module (this disables requires from this module)
533
- /******/ module.hot.active = false;
534
- /******/
535
- /******/ // remove module from cache
536
- /******/ delete installedModules[moduleId];
537
- /******/
538
- /******/ // when disposing there is no need to call dispose handler
539
- /******/ delete outdatedDependencies[moduleId];
540
- /******/
541
- /******/ // remove "parents" references from all children
542
- /******/ for (j = 0; j < module.children.length; j++) {
543
- /******/ var child = installedModules[module.children[j]];
544
- /******/ if (!child) continue;
545
- /******/ idx = child.parents.indexOf(moduleId);
546
- /******/ if (idx >= 0) {
547
- /******/ child.parents.splice(idx, 1);
548
- /******/ }
549
- /******/ }
550
- /******/ }
551
- /******/
552
- /******/ // remove outdated dependency from module children
553
- /******/ var dependency;
554
- /******/ var moduleOutdatedDependencies;
555
- /******/ for (moduleId in outdatedDependencies) {
556
- /******/ if (
557
- /******/ Object.prototype.hasOwnProperty.call(outdatedDependencies, moduleId)
558
- /******/ ) {
559
- /******/ module = installedModules[moduleId];
560
- /******/ if (module) {
561
- /******/ moduleOutdatedDependencies = outdatedDependencies[moduleId];
562
- /******/ for (j = 0; j < moduleOutdatedDependencies.length; j++) {
563
- /******/ dependency = moduleOutdatedDependencies[j];
564
- /******/ idx = module.children.indexOf(dependency);
565
- /******/ if (idx >= 0) module.children.splice(idx, 1);
566
- /******/ }
567
- /******/ }
568
- /******/ }
569
- /******/ }
570
- /******/
571
- /******/ // Now in "apply" phase
572
- /******/ hotSetStatus("apply");
573
- /******/
574
- /******/ hotCurrentHash = hotUpdateNewHash;
575
- /******/
576
- /******/ // insert new code
577
- /******/ for (moduleId in appliedUpdate) {
578
- /******/ if (Object.prototype.hasOwnProperty.call(appliedUpdate, moduleId)) {
579
- /******/ modules[moduleId] = appliedUpdate[moduleId];
580
- /******/ }
581
- /******/ }
582
- /******/
583
- /******/ // call accept handlers
584
- /******/ var error = null;
585
- /******/ for (moduleId in outdatedDependencies) {
586
- /******/ if (
587
- /******/ Object.prototype.hasOwnProperty.call(outdatedDependencies, moduleId)
588
- /******/ ) {
589
- /******/ module = installedModules[moduleId];
590
- /******/ if (module) {
591
- /******/ moduleOutdatedDependencies = outdatedDependencies[moduleId];
592
- /******/ var callbacks = [];
593
- /******/ for (i = 0; i < moduleOutdatedDependencies.length; i++) {
594
- /******/ dependency = moduleOutdatedDependencies[i];
595
- /******/ cb = module.hot._acceptedDependencies[dependency];
596
- /******/ if (cb) {
597
- /******/ if (callbacks.indexOf(cb) !== -1) continue;
598
- /******/ callbacks.push(cb);
599
- /******/ }
600
- /******/ }
601
- /******/ for (i = 0; i < callbacks.length; i++) {
602
- /******/ cb = callbacks[i];
603
- /******/ try {
604
- /******/ cb(moduleOutdatedDependencies);
605
- /******/ } catch (err) {
606
- /******/ if (options.onErrored) {
607
- /******/ options.onErrored({
608
- /******/ type: "accept-errored",
609
- /******/ moduleId: moduleId,
610
- /******/ dependencyId: moduleOutdatedDependencies[i],
611
- /******/ error: err
612
- /******/ });
613
- /******/ }
614
- /******/ if (!options.ignoreErrored) {
615
- /******/ if (!error) error = err;
616
- /******/ }
617
- /******/ }
618
- /******/ }
619
- /******/ }
620
- /******/ }
621
- /******/ }
622
- /******/
623
- /******/ // Load self accepted modules
624
- /******/ for (i = 0; i < outdatedSelfAcceptedModules.length; i++) {
625
- /******/ var item = outdatedSelfAcceptedModules[i];
626
- /******/ moduleId = item.module;
627
- /******/ hotCurrentParents = [moduleId];
628
- /******/ try {
629
- /******/ __webpack_require__(moduleId);
630
- /******/ } catch (err) {
631
- /******/ if (typeof item.errorHandler === "function") {
632
- /******/ try {
633
- /******/ item.errorHandler(err);
634
- /******/ } catch (err2) {
635
- /******/ if (options.onErrored) {
636
- /******/ options.onErrored({
637
- /******/ type: "self-accept-error-handler-errored",
638
- /******/ moduleId: moduleId,
639
- /******/ error: err2,
640
- /******/ originalError: err
641
- /******/ });
642
- /******/ }
643
- /******/ if (!options.ignoreErrored) {
644
- /******/ if (!error) error = err2;
645
- /******/ }
646
- /******/ if (!error) error = err;
647
- /******/ }
648
- /******/ } else {
649
- /******/ if (options.onErrored) {
650
- /******/ options.onErrored({
651
- /******/ type: "self-accept-errored",
652
- /******/ moduleId: moduleId,
653
- /******/ error: err
654
- /******/ });
655
- /******/ }
656
- /******/ if (!options.ignoreErrored) {
657
- /******/ if (!error) error = err;
658
- /******/ }
659
- /******/ }
660
- /******/ }
661
- /******/ }
662
- /******/
663
- /******/ // handle errors in accept handlers and self accepted module load
664
- /******/ if (error) {
665
- /******/ hotSetStatus("fail");
666
- /******/ return Promise.reject(error);
667
- /******/ }
668
- /******/
669
- /******/ hotSetStatus("idle");
670
- /******/ return new Promise(function(resolve) {
671
- /******/ resolve(outdatedModules);
672
- /******/ });
673
- /******/ }
674
- /******/
10
+ })(global, () => {
11
+ return /******/ (() => { // webpackBootstrap
12
+ /******/ "use strict";
13
+ /******/ var __webpack_modules__ = ({
14
+
15
+ /***/ "chalk":
16
+ /***/ ((module) => {
17
+
18
+ module.exports = require("chalk");
19
+
20
+ /***/ }),
21
+
22
+ /***/ "dotenv":
23
+ /***/ ((module) => {
24
+
25
+ module.exports = require("dotenv");
26
+
27
+ /***/ }),
28
+
29
+ /***/ "minimist":
30
+ /***/ ((module) => {
31
+
32
+ module.exports = require("minimist");
33
+
34
+ /***/ })
35
+
36
+ /******/ });
37
+ /************************************************************************/
675
38
  /******/ // The module cache
676
- /******/ var installedModules = {};
677
- /******/
39
+ /******/ var __webpack_module_cache__ = {};
40
+ /******/
678
41
  /******/ // The require function
679
42
  /******/ function __webpack_require__(moduleId) {
680
- /******/
681
43
  /******/ // Check if module is in cache
682
- /******/ if(installedModules[moduleId]) {
683
- /******/ return installedModules[moduleId].exports;
44
+ /******/ var cachedModule = __webpack_module_cache__[moduleId];
45
+ /******/ if (cachedModule !== undefined) {
46
+ /******/ return cachedModule.exports;
684
47
  /******/ }
685
48
  /******/ // Create a new module (and put it into the cache)
686
- /******/ var module = installedModules[moduleId] = {
687
- /******/ i: moduleId,
688
- /******/ l: false,
689
- /******/ exports: {},
690
- /******/ hot: hotCreateModule(moduleId),
691
- /******/ parents: (hotCurrentParentsTemp = hotCurrentParents, hotCurrentParents = [], hotCurrentParentsTemp),
692
- /******/ children: []
49
+ /******/ var module = __webpack_module_cache__[moduleId] = {
50
+ /******/ // no module.id needed
51
+ /******/ // no module.loaded needed
52
+ /******/ exports: {}
693
53
  /******/ };
694
- /******/
54
+ /******/
695
55
  /******/ // Execute the module function
696
- /******/ modules[moduleId].call(module.exports, module, module.exports, hotCreateRequire(moduleId));
697
- /******/
698
- /******/ // Flag the module as loaded
699
- /******/ module.l = true;
700
- /******/
56
+ /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
57
+ /******/
701
58
  /******/ // Return the exports of the module
702
59
  /******/ return module.exports;
703
60
  /******/ }
704
- /******/
705
- /******/
706
- /******/ // expose the modules object (__webpack_modules__)
707
- /******/ __webpack_require__.m = modules;
708
- /******/
709
- /******/ // expose the module cache
710
- /******/ __webpack_require__.c = installedModules;
711
- /******/
712
- /******/ // define getter function for harmony exports
713
- /******/ __webpack_require__.d = function(exports, name, getter) {
714
- /******/ if(!__webpack_require__.o(exports, name)) {
715
- /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
716
- /******/ }
717
- /******/ };
718
- /******/
719
- /******/ // define __esModule on exports
720
- /******/ __webpack_require__.r = function(exports) {
721
- /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
722
- /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
723
- /******/ }
724
- /******/ Object.defineProperty(exports, '__esModule', { value: true });
725
- /******/ };
726
- /******/
727
- /******/ // create a fake namespace object
728
- /******/ // mode & 1: value is a module id, require it
729
- /******/ // mode & 2: merge all properties of value into the ns
730
- /******/ // mode & 4: return value when already ns object
731
- /******/ // mode & 8|1: behave like require
732
- /******/ __webpack_require__.t = function(value, mode) {
733
- /******/ if(mode & 1) value = __webpack_require__(value);
734
- /******/ if(mode & 8) return value;
735
- /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
736
- /******/ var ns = Object.create(null);
737
- /******/ __webpack_require__.r(ns);
738
- /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
739
- /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
740
- /******/ return ns;
741
- /******/ };
742
- /******/
743
- /******/ // getDefaultExport function for compatibility with non-harmony modules
744
- /******/ __webpack_require__.n = function(module) {
745
- /******/ var getter = module && module.__esModule ?
746
- /******/ function getDefault() { return module['default']; } :
747
- /******/ function getModuleExports() { return module; };
748
- /******/ __webpack_require__.d(getter, 'a', getter);
749
- /******/ return getter;
750
- /******/ };
751
- /******/
752
- /******/ // Object.prototype.hasOwnProperty.call
753
- /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
754
- /******/
755
- /******/ // __webpack_public_path__
756
- /******/ __webpack_require__.p = "";
757
- /******/
758
- /******/ // __webpack_hash__
759
- /******/ __webpack_require__.h = function() { return hotCurrentHash; };
760
- /******/
761
- /******/
762
- /******/ // Load entry module and return exports
763
- /******/ return hotCreateRequire(0)(__webpack_require__.s = 0);
764
- /******/ })
61
+ /******/
765
62
  /************************************************************************/
766
- /******/ ({
767
-
768
- /***/ "./src/index.ts":
769
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
770
-
771
- "use strict";
63
+ /******/ /* webpack/runtime/define property getters */
64
+ /******/ (() => {
65
+ /******/ // define getter functions for harmony exports
66
+ /******/ __webpack_require__.d = (exports, definition) => {
67
+ /******/ for(var key in definition) {
68
+ /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
69
+ /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
70
+ /******/ }
71
+ /******/ }
72
+ /******/ };
73
+ /******/ })();
74
+ /******/
75
+ /******/ /* webpack/runtime/hasOwnProperty shorthand */
76
+ /******/ (() => {
77
+ /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
78
+ /******/ })();
79
+ /******/
80
+ /******/ /* webpack/runtime/make namespace object */
81
+ /******/ (() => {
82
+ /******/ // define __esModule on exports
83
+ /******/ __webpack_require__.r = (exports) => {
84
+ /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
85
+ /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
86
+ /******/ }
87
+ /******/ Object.defineProperty(exports, '__esModule', { value: true });
88
+ /******/ };
89
+ /******/ })();
90
+ /******/
91
+ /************************************************************************/
92
+ var __webpack_exports__ = {};
93
+ // This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
94
+ (() => {
95
+ // ESM COMPAT FLAG
772
96
  __webpack_require__.r(__webpack_exports__);
773
97
 
774
- // EXTERNAL MODULE: external "tslib"
775
- var external_tslib_ = __webpack_require__("tslib");
776
-
777
- // EXTERNAL MODULE: external "child_process"
778
- var external_child_process_ = __webpack_require__("child_process");
779
-
780
- // EXTERNAL MODULE: external "readline"
781
- var external_readline_ = __webpack_require__("readline");
782
-
783
- // EXTERNAL MODULE: external "fs"
784
- var external_fs_ = __webpack_require__("fs");
785
-
786
- // EXTERNAL MODULE: external "path"
787
- var external_path_ = __webpack_require__("path");
98
+ // EXPORTS
99
+ __webpack_require__.d(__webpack_exports__, {
100
+ launch: () => (/* reexport */ launch)
101
+ });
788
102
 
789
- // CONCATENATED MODULE: ./src/terminal.ts
103
+ ;// CONCATENATED MODULE: external "tslib"
104
+ const external_tslib_namespaceObject = require("tslib");
105
+ ;// CONCATENATED MODULE: external "child_process"
106
+ const external_child_process_namespaceObject = require("child_process");
107
+ ;// CONCATENATED MODULE: external "readline"
108
+ const external_readline_namespaceObject = require("readline");
109
+ ;// CONCATENATED MODULE: external "fs"
110
+ const external_fs_namespaceObject = require("fs");
111
+ ;// CONCATENATED MODULE: external "path"
112
+ const external_path_namespaceObject = require("path");
113
+ ;// CONCATENATED MODULE: ./src/terminal.ts
790
114
  var terminal = {
791
115
  log: function () {
792
116
  var args = [];
793
117
  for (var _i = 0; _i < arguments.length; _i++) {
794
118
  args[_i] = arguments[_i];
795
119
  }
796
- process.stdout.write(args.reduce(function (acc, item) { return acc + " " + item; }) + "\n", "utf-8");
120
+ process.stdout.write(args.reduce(function (acc, item) { return "".concat(acc, " ").concat(item); }) + "\n", "utf-8");
797
121
  }
798
122
  };
799
- /* harmony default export */ var src_terminal = (terminal);
123
+ /* harmony default export */ const src_terminal = (terminal);
800
124
 
801
- // CONCATENATED MODULE: ./src/launch-base.ts
125
+ ;// CONCATENATED MODULE: ./src/launch-base.ts
802
126
 
803
127
  /**
804
128
  * Author : Nidin Vinayakan <01@01alchemist.com>
@@ -810,31 +134,31 @@ var chalk = __webpack_require__("chalk");
810
134
 
811
135
 
812
136
 
813
- var cursorTo = external_readline_["cursorTo"];
814
- var spawn = external_child_process_["spawn"];
137
+ var cursorTo = external_readline_namespaceObject.cursorTo;
138
+ var spawn = external_child_process_namespaceObject.spawn;
815
139
  var w = chalk.white, r = chalk.red, bgR = chalk.bgRed;
816
140
  var defaultOptions = {
817
141
  mode: "program",
818
142
  stdio: "inherit",
819
- exitProcessOnClose: false
143
+ exitProcessOnClose: false,
820
144
  };
821
145
  var baseDir = process.cwd();
822
- var envPath = baseDir + "/env/" + process.env.USER + ".env";
823
- if (!external_fs_["existsSync"](envPath)) {
824
- envPath = baseDir + "/.env";
146
+ var envPath = "".concat(baseDir, "/env/").concat(process.env.USER, ".env");
147
+ if (!external_fs_namespaceObject.existsSync(envPath)) {
148
+ envPath = "".concat(baseDir, "/.env");
825
149
  }
826
- if (external_fs_["existsSync"](envPath)) {
827
- src_terminal.log("Loading env vars from: " + envPath);
828
- __webpack_require__("dotenv").config({
829
- path: envPath
150
+ if (external_fs_namespaceObject.existsSync(envPath)) {
151
+ src_terminal.log("Loading env vars from: ".concat(envPath));
152
+ (__webpack_require__("dotenv").config)({
153
+ path: envPath,
830
154
  });
831
155
  }
832
156
  function mergeValue(value1, value2) {
833
157
  if (Array.isArray(value1) && Array.isArray(value2)) {
834
- return value1.concat(value2);
158
+ return (0,external_tslib_namespaceObject.__spreadArray)((0,external_tslib_namespaceObject.__spreadArray)([], value1, true), value2, true);
835
159
  }
836
160
  else if (typeof value1 === "object" && typeof value2 === "object") {
837
- return external_tslib_["__assign"]({}, value1, value2);
161
+ return (0,external_tslib_namespaceObject.__assign)((0,external_tslib_namespaceObject.__assign)({}, value1), value2);
838
162
  }
839
163
  return value2;
840
164
  }
@@ -851,7 +175,7 @@ function mergeOptions(name, defaultOption, option, cliOption) {
851
175
  }
852
176
  return {
853
177
  name: name,
854
- value: value
178
+ value: value,
855
179
  };
856
180
  }
857
181
  function getOptions(_options, args) {
@@ -870,27 +194,27 @@ function getOptions(_options, args) {
870
194
  }, {});
871
195
  return flattenOptions;
872
196
  }
873
- global.launcher = global.launcher || {
197
+ var launcher = {
874
198
  instances: [],
875
199
  terminateAll: function (signal) {
876
- global.launcher.instances.forEach(function (_instance) {
877
- src_terminal.log("Terminating [" + _instance.name + "] instance.pid: " + _instance.pid);
200
+ launcher.instances.forEach(function (_instance) {
201
+ src_terminal.log("Terminating [".concat(_instance.name, "] instance.pid: ").concat(_instance.pid));
878
202
  _instance.kill(signal || "SIGTERM");
879
203
  });
880
- }
204
+ },
881
205
  };
882
206
  function launch(_options) {
883
207
  if (_options === void 0) { _options = {}; }
884
- return external_tslib_["__awaiter"](this, void 0, void 0, function () {
208
+ return (0,external_tslib_namespaceObject.__awaiter)(this, void 0, void 0, function () {
885
209
  function exit(signal) {
886
210
  if (instance) {
887
211
  cursorTo(process.stdout, 0);
888
- src_terminal.log("Killing [" + instance.name + "] instance.pid: " + instance.pid);
212
+ src_terminal.log("Killing [".concat(instance.name, "] instance.pid: ").concat(instance.pid));
889
213
  instance.kill(signal || "SIGTERM");
890
214
  }
891
215
  }
892
216
  var args, options, env, cmds, cwd, isCli, title, message, message, stdio, shell, instance;
893
- return external_tslib_["__generator"](this, function (_a) {
217
+ return (0,external_tslib_namespaceObject.__generator)(this, function (_a) {
894
218
  args = _options.mode === "cli" ? process.argv.slice(2) : [];
895
219
  options = getOptions(_options, args);
896
220
  if (options.env) {
@@ -906,18 +230,18 @@ function launch(_options) {
906
230
  cwd = baseDir;
907
231
  if (options.cwd) {
908
232
  cwd =
909
- options.cwd[0] === "/" ? options.cwd : external_path_["resolve"](baseDir, options.cwd);
233
+ options.cwd[0] === "/" ? options.cwd : external_path_namespaceObject.resolve(baseDir, options.cwd);
910
234
  }
911
235
  if (!cmds || cmds.length === 0) {
912
236
  isCli = options.mode === "cli";
913
237
  title = "Oops 😬, Did you forgot to pass";
914
238
  if (isCli) {
915
- message = r("\n " + title + " " + bgR(w(" program ")) + "?. Please tell me, which program you want to launch!\n") + "\n Example: launch echo \"Hello World\"\n";
239
+ message = r("\n ".concat(title, " ").concat(bgR(w(" program ")), "?. Please tell me, which program you want to launch!\n")) + "\n Example: launch echo \"Hello World\"\n";
916
240
  src_terminal.log(message);
917
241
  process.exit(1);
918
242
  }
919
243
  else {
920
- message = r(title + " option " + bgR(w(" cmds ")) + "?. Please tell me, which program you want to launch!\n") + "\n Example: launch({cmds:[\"echo\", \"Hello World\"]});\n";
244
+ message = r("".concat(title, " option ").concat(bgR(w(" cmds ")), "?. Please tell me, which program you want to launch!\n")) + "\n Example: launch({cmds:[\"echo\", \"Hello World\"]});\n";
921
245
  throw new Error(message);
922
246
  }
923
247
  }
@@ -931,10 +255,10 @@ function launch(_options) {
931
255
  instance = spawn(cmds[0], cmds.slice(1), {
932
256
  stdio: stdio,
933
257
  cwd: cwd,
934
- shell: shell
258
+ shell: shell,
935
259
  });
936
260
  instance.name = cmds[0];
937
- global.launcher.instances.push(instance);
261
+ launcher.instances.push(instance);
938
262
  process.on("SIGINT", exit);
939
263
  return [2 /*return*/, new Promise(function (resolve, reject) {
940
264
  var _this = this;
@@ -955,14 +279,14 @@ function launch(_options) {
955
279
  });
956
280
  }
957
281
  }
958
- instance.on("close", function (code) { return external_tslib_["__awaiter"](_this, void 0, void 0, function () {
959
- return external_tslib_["__generator"](this, function (_a) {
282
+ instance.on("close", function (code) { return (0,external_tslib_namespaceObject.__awaiter)(_this, void 0, void 0, function () {
283
+ return (0,external_tslib_namespaceObject.__generator)(this, function (_a) {
960
284
  if (options.exitProcessOnClose) {
961
- src_terminal.log("[" + instance.name + "] exit code:" + code);
962
- process.exit(code);
285
+ src_terminal.log("[".concat(instance.name, "] exit code:").concat(code));
286
+ process.exit(code ? code : undefined);
963
287
  }
964
288
  else {
965
- src_terminal.log("[" + instance.name + "] exit code:" + code);
289
+ src_terminal.log("[".concat(instance.name, "] exit code:").concat(code));
966
290
  code === 0 ? resolve(output) : reject(lastErrorData);
967
291
  }
968
292
  return [2 /*return*/];
@@ -972,79 +296,15 @@ function launch(_options) {
972
296
  });
973
297
  });
974
298
  }
975
- /* harmony default export */ var launch_base = (launch);
976
-
977
- // CONCATENATED MODULE: ./src/index.ts
978
- /* concated harmony reexport launch */__webpack_require__.d(__webpack_exports__, "launch", function() { return launch; });
979
-
980
-
981
-
982
- /***/ }),
983
-
984
- /***/ 0:
985
- /***/ (function(module, exports, __webpack_require__) {
986
-
987
- module.exports = __webpack_require__("./src/index.ts");
299
+ /* harmony default export */ const launch_base = ((/* unused pure expression or super */ null && (launch)));
988
300
 
301
+ ;// CONCATENATED MODULE: ./src/index.ts
989
302
 
990
- /***/ }),
991
-
992
- /***/ "chalk":
993
- /***/ (function(module, exports) {
994
-
995
- module.exports = require("chalk");
996
-
997
- /***/ }),
998
-
999
- /***/ "child_process":
1000
- /***/ (function(module, exports) {
1001
-
1002
- module.exports = require("child_process");
1003
-
1004
- /***/ }),
1005
-
1006
- /***/ "dotenv":
1007
- /***/ (function(module, exports) {
1008
-
1009
- module.exports = require("dotenv");
1010
-
1011
- /***/ }),
1012
-
1013
- /***/ "fs":
1014
- /***/ (function(module, exports) {
1015
-
1016
- module.exports = require("fs");
1017
303
 
1018
- /***/ }),
1019
-
1020
- /***/ "minimist":
1021
- /***/ (function(module, exports) {
1022
-
1023
- module.exports = require("minimist");
1024
-
1025
- /***/ }),
1026
-
1027
- /***/ "path":
1028
- /***/ (function(module, exports) {
1029
-
1030
- module.exports = require("path");
1031
-
1032
- /***/ }),
1033
-
1034
- /***/ "readline":
1035
- /***/ (function(module, exports) {
1036
-
1037
- module.exports = require("readline");
1038
-
1039
- /***/ }),
1040
-
1041
- /***/ "tslib":
1042
- /***/ (function(module, exports) {
1043
-
1044
- module.exports = require("tslib");
1045
-
1046
- /***/ })
304
+ })();
1047
305
 
1048
- /******/ });
306
+ /******/ return __webpack_exports__;
307
+ /******/ })()
308
+ ;
1049
309
  });
1050
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL2NpcmNsZWNpL3JlcG8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwiL2hvbWUvY2lyY2xlY2kvcmVwby93ZWJwYWNrL2Jvb3RzdHJhcCIsIi9ob21lL2NpcmNsZWNpL3JlcG8vc3JjL3Rlcm1pbmFsLnRzIiwiL2hvbWUvY2lyY2xlY2kvcmVwby9zcmMvbGF1bmNoLWJhc2UudHMiLCIvaG9tZS9jaXJjbGVjaS9yZXBvL3NyYy9pbmRleC50cyIsIi9ob21lL2NpcmNsZWNpL3JlcG8vZXh0ZXJuYWwlMjAlMjJjaGFsayUyMiIsIi9ob21lL2NpcmNsZWNpL3JlcG8vZXh0ZXJuYWwlMjAlMjJjaGlsZF9wcm9jZXNzJTIyIiwiL2hvbWUvY2lyY2xlY2kvcmVwby9leHRlcm5hbCUyMCUyMmRvdGVudiUyMiIsIi9ob21lL2NpcmNsZWNpL3JlcG8vZXh0ZXJuYWwlMjAlMjJmcyUyMiIsIi9ob21lL2NpcmNsZWNpL3JlcG8vZXh0ZXJuYWwlMjAlMjJtaW5pbWlzdCUyMiIsIi9ob21lL2NpcmNsZWNpL3JlcG8vZXh0ZXJuYWwlMjAlMjJwYXRoJTIyIiwiL2hvbWUvY2lyY2xlY2kvcmVwby9leHRlcm5hbCUyMCUyMnJlYWRsaW5lJTIyIiwiL2hvbWUvY2lyY2xlY2kvcmVwby9leHRlcm5hbCUyMCUyMnRzbGliJTIyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxPO1FDVkE7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLElBQUk7UUFDSjtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLE1BQU07UUFDTjtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSxLQUFLO1FBQ0w7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSxNQUFNO1FBQ047UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLEtBQUs7O1FBRUw7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EsNkJBQTZCO1FBQzdCLDZCQUE2QjtRQUM3QjtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSxxQkFBcUIsZ0JBQWdCO1FBQ3JDO1FBQ0E7UUFDQSxLQUFLO1FBQ0w7UUFDQTtRQUNBO1FBQ0EscUJBQXFCLGdCQUFnQjtRQUNyQztRQUNBO1FBQ0EsS0FBSztRQUNMO1FBQ0E7UUFDQSxLQUFLO1FBQ0w7UUFDQTtRQUNBLEtBQUs7UUFDTDtRQUNBO1FBQ0E7UUFDQSxLQUFLOztRQUVMO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLEtBQUs7UUFDTDtRQUNBO1FBQ0EsS0FBSztRQUNMO1FBQ0E7UUFDQTtRQUNBLEtBQUs7O1FBRUw7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBLGtCQUFrQiw4QkFBOEI7UUFDaEQ7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSxLQUFLO1FBQ0w7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EsSUFBSTtRQUNKOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsSUFBSTtRQUNKO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EsTUFBTTtRQUNOO1FBQ0E7UUFDQTtRQUNBLE9BQU87UUFDUDtRQUNBO1FBQ0E7UUFDQTtRQUNBLElBQUk7UUFDSjtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLEtBQUs7UUFDTDtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0Esb0JBQW9CLDJCQUEyQjtRQUMvQztRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EsT0FBTztRQUNQO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQSxtQkFBbUIsY0FBYztRQUNqQztRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsZ0JBQWdCLEtBQUs7UUFDckI7UUFDQTtRQUNBO1FBQ0EsTUFBTTtRQUNOO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSxnQkFBZ0IsWUFBWTtRQUM1QjtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBLGNBQWMsNEJBQTRCO1FBQzFDO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EsTUFBTTtRQUNOO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EsSUFBSTs7UUFFSjtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7O1FBRUE7UUFDQTtRQUNBLGVBQWUsNEJBQTRCO1FBQzNDO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0EsZUFBZSw0QkFBNEI7UUFDM0M7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLGlCQUFpQix1Q0FBdUM7UUFDeEQ7UUFDQTtRQUNBO1FB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Ozs7QUNBQSxpQzs7Ozs7OztBQ0FBLHFDOzs7Ozs7O0FDQUEsa0MiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJpbmRleFwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJpbmRleFwiXSA9IGZhY3RvcnkoKTtcbn0pKGdsb2JhbCwgZnVuY3Rpb24oKSB7XG5yZXR1cm4gIiwiIFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gXHRmdW5jdGlvbiBob3REb3dubG9hZFVwZGF0ZUNodW5rKGNodW5rSWQpIHtcbiBcdFx0dmFyIGNodW5rID0gcmVxdWlyZShcIi4vXCIgKyBcIlwiICsgY2h1bmtJZCArIFwiLlwiICsgaG90Q3VycmVudEhhc2ggKyBcIi5ob3QtdXBkYXRlLmpzXCIpO1xuIFx0XHRob3RBZGRVcGRhdGVDaHVuayhjaHVuay5pZCwgY2h1bmsubW9kdWxlcyk7XG4gXHR9XG5cbiBcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuIFx0ZnVuY3Rpb24gaG90RG93bmxvYWRNYW5pZmVzdCgpIHtcbiBcdFx0dHJ5IHtcbiBcdFx0XHR2YXIgdXBkYXRlID0gcmVxdWlyZShcIi4vXCIgKyBcIlwiICsgaG90Q3VycmVudEhhc2ggKyBcIi5ob3QtdXBkYXRlLmpzb25cIik7XG4gXHRcdH0gY2F0Y2ggKGUpIHtcbiBcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gXHRcdH1cbiBcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh1cGRhdGUpO1xuIFx0fVxuXG4gXHQvL2VzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuIFx0ZnVuY3Rpb24gaG90RGlzcG9zZUNodW5rKGNodW5rSWQpIHtcbiBcdFx0ZGVsZXRlIGluc3RhbGxlZENodW5rc1tjaHVua0lkXTtcbiBcdH1cblxuIFx0dmFyIGhvdEFwcGx5T25VcGRhdGUgPSB0cnVlO1xuIFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gXHR2YXIgaG90Q3VycmVudEhhc2ggPSBcIjc2MDU1ZDQ4MGJjNDhhOGY0YzFmXCI7XG4gXHR2YXIgaG90UmVxdWVzdFRpbWVvdXQgPSAxMDAwMDtcbiBcdHZhciBob3RDdXJyZW50TW9kdWxlRGF0YSA9IHt9O1xuIFx0dmFyIGhvdEN1cnJlbnRDaGlsZE1vZHVsZTtcbiBcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuIFx0dmFyIGhvdEN1cnJlbnRQYXJlbnRzID0gW107XG4gXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiBcdHZhciBob3RDdXJyZW50UGFyZW50c1RlbXAgPSBbXTtcblxuIFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gXHRmdW5jdGlvbiBob3RDcmVhdGVSZXF1aXJlKG1vZHVsZUlkKSB7XG4gXHRcdHZhciBtZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdO1xuIFx0XHRpZiAoIW1lKSByZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXztcbiBcdFx0dmFyIGZuID0gZnVuY3Rpb24ocmVxdWVzdCkge1xuIFx0XHRcdGlmIChtZS5ob3QuYWN0aXZlKSB7XG4gXHRcdFx0XHRpZiAoaW5zdGFsbGVkTW9kdWxlc1tyZXF1ZXN0XSkge1xuIFx0XHRcdFx0XHRpZiAoaW5zdGFsbGVkTW9kdWxlc1tyZXF1ZXN0XS5wYXJlbnRzLmluZGV4T2YobW9kdWxlSWQpID09PSAtMSkge1xuIFx0XHRcdFx0XHRcdGluc3RhbGxlZE1vZHVsZXNbcmVxdWVzdF0ucGFyZW50cy5wdXNoKG1vZHVsZUlkKTtcbiBcdFx0XHRcdFx0fVxuIFx0XHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdFx0aG90Q3VycmVudFBhcmVudHMgPSBbbW9kdWxlSWRdO1xuIFx0XHRcdFx0XHRob3RDdXJyZW50Q2hpbGRNb2R1bGUgPSByZXF1ZXN0O1xuIFx0XHRcdFx0fVxuIFx0XHRcdFx0aWYgKG1lLmNoaWxkcmVuLmluZGV4T2YocmVxdWVzdCkgPT09IC0xKSB7XG4gXHRcdFx0XHRcdG1lLmNoaWxkcmVuLnB1c2gocmVxdWVzdCk7XG4gXHRcdFx0XHR9XG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdGNvbnNvbGUud2FybihcbiBcdFx0XHRcdFx0XCJbSE1SXSB1bmV4cGVjdGVkIHJlcXVpcmUoXCIgK1xuIFx0XHRcdFx0XHRcdHJlcXVlc3QgK1xuIFx0XHRcdFx0XHRcdFwiKSBmcm9tIGRpc3Bvc2VkIG1vZHVsZSBcIiArXG4gXHRcdFx0XHRcdFx0bW9kdWxlSWRcbiBcdFx0XHRcdCk7XG4gXHRcdFx0XHRob3RDdXJyZW50UGFyZW50cyA9IFtdO1xuIFx0XHRcdH1cbiBcdFx0XHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhyZXF1ZXN0KTtcbiBcdFx0fTtcbiBcdFx0dmFyIE9iamVjdEZhY3RvcnkgPSBmdW5jdGlvbiBPYmplY3RGYWN0b3J5KG5hbWUpIHtcbiBcdFx0XHRyZXR1cm4ge1xuIFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbiBcdFx0XHRcdGdldDogZnVuY3Rpb24oKSB7XG4gXHRcdFx0XHRcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fW25hbWVdO1xuIFx0XHRcdFx0fSxcbiBcdFx0XHRcdHNldDogZnVuY3Rpb24odmFsdWUpIHtcbiBcdFx0XHRcdFx0X193ZWJwYWNrX3JlcXVpcmVfX1tuYW1lXSA9IHZhbHVlO1xuIFx0XHRcdFx0fVxuIFx0XHRcdH07XG4gXHRcdH07XG4gXHRcdGZvciAodmFyIG5hbWUgaW4gX193ZWJwYWNrX3JlcXVpcmVfXykge1xuIFx0XHRcdGlmIChcbiBcdFx0XHRcdE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfX3dlYnBhY2tfcmVxdWlyZV9fLCBuYW1lKSAmJlxuIFx0XHRcdFx0bmFtZSAhPT0gXCJlXCIgJiZcbiBcdFx0XHRcdG5hbWUgIT09IFwidFwiXG4gXHRcdFx0KSB7XG4gXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sIG5hbWUsIE9iamVjdEZhY3RvcnkobmFtZSkpO1xuIFx0XHRcdH1cbiBcdFx0fVxuIFx0XHRmbi5lID0gZnVuY3Rpb24oY2h1bmtJZCkge1xuIFx0XHRcdGlmIChob3RTdGF0dXMgPT09IFwicmVhZHlcIikgaG90U2V0U3RhdHVzKFwicHJlcGFyZVwiKTtcbiBcdFx0XHRob3RDaHVua3NMb2FkaW5nKys7XG4gXHRcdFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18uZShjaHVua0lkKS50aGVuKGZpbmlzaENodW5rTG9hZGluZywgZnVuY3Rpb24oZXJyKSB7XG4gXHRcdFx0XHRmaW5pc2hDaHVua0xvYWRpbmcoKTtcbiBcdFx0XHRcdHRocm93IGVycjtcbiBcdFx0XHR9KTtcblxuIFx0XHRcdGZ1bmN0aW9uIGZpbmlzaENodW5rTG9hZGluZygpIHtcbiBcdFx0XHRcdGhvdENodW5rc0xvYWRpbmctLTtcbiBcdFx0XHRcdGlmIChob3RTdGF0dXMgPT09IFwicHJlcGFyZVwiKSB7XG4gXHRcdFx0XHRcdGlmICghaG90V2FpdGluZ0ZpbGVzTWFwW2NodW5rSWRdKSB7XG4gXHRcdFx0XHRcdFx0aG90RW5zdXJlVXBkYXRlQ2h1bmsoY2h1bmtJZCk7XG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdFx0aWYgKGhvdENodW5rc0xvYWRpbmcgPT09IDAgJiYgaG90V2FpdGluZ0ZpbGVzID09PSAwKSB7XG4gXHRcdFx0XHRcdFx0aG90VXBkYXRlRG93bmxvYWRlZCgpO1xuIFx0XHRcdFx0XHR9XG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuIFx0XHR9O1xuIFx0XHRmbi50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0XHRpZiAobW9kZSAmIDEpIHZhbHVlID0gZm4odmFsdWUpO1xuIFx0XHRcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fLnQodmFsdWUsIG1vZGUgJiB+MSk7XG4gXHRcdH07XG4gXHRcdHJldHVybiBmbjtcbiBcdH1cblxuIFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gXHRmdW5jdGlvbiBob3RDcmVhdGVNb2R1bGUobW9kdWxlSWQpIHtcbiBcdFx0dmFyIGhvdCA9IHtcbiBcdFx0XHQvLyBwcml2YXRlIHN0dWZmXG4gXHRcdFx0X2FjY2VwdGVkRGVwZW5kZW5jaWVzOiB7fSxcbiBcdFx0XHRfZGVjbGluZWREZXBlbmRlbmNpZXM6IHt9LFxuIFx0XHRcdF9zZWxmQWNjZXB0ZWQ6IGZhbHNlLFxuIFx0XHRcdF9zZWxmRGVjbGluZWQ6IGZhbHNlLFxuIFx0XHRcdF9kaXNwb3NlSGFuZGxlcnM6IFtdLFxuIFx0XHRcdF9tYWluOiBob3RDdXJyZW50Q2hpbGRNb2R1bGUgIT09IG1vZHVsZUlkLFxuXG4gXHRcdFx0Ly8gTW9kdWxlIEFQSVxuIFx0XHRcdGFjdGl2ZTogdHJ1ZSxcbiBcdFx0XHRhY2NlcHQ6IGZ1bmN0aW9uKGRlcCwgY2FsbGJhY2spIHtcbiBcdFx0XHRcdGlmIChkZXAgPT09IHVuZGVmaW5lZCkgaG90Ll9zZWxmQWNjZXB0ZWQgPSB0cnVlO1xuIFx0XHRcdFx0ZWxzZSBpZiAodHlwZW9mIGRlcCA9PT0gXCJmdW5jdGlvblwiKSBob3QuX3NlbGZBY2NlcHRlZCA9IGRlcDtcbiBcdFx0XHRcdGVsc2UgaWYgKHR5cGVvZiBkZXAgPT09IFwib2JqZWN0XCIpXG4gXHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgZGVwLmxlbmd0aDsgaSsrKVxuIFx0XHRcdFx0XHRcdGhvdC5fYWNjZXB0ZWREZXBlbmRlbmNpZXNbZGVwW2ldXSA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gXHRcdFx0XHRlbHNlIGhvdC5fYWNjZXB0ZWREZXBlbmRlbmNpZXNbZGVwXSA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gXHRcdFx0fSxcbiBcdFx0XHRkZWNsaW5lOiBmdW5jdGlvbihkZXApIHtcbiBcdFx0XHRcdGlmIChkZXAgPT09IHVuZGVmaW5lZCkgaG90Ll9zZWxmRGVjbGluZWQgPSB0cnVlO1xuIFx0XHRcdFx0ZWxzZSBpZiAodHlwZW9mIGRlcCA9PT0gXCJvYmplY3RcIilcbiBcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBkZXAubGVuZ3RoOyBpKyspXG4gXHRcdFx0XHRcdFx0aG90Ll9kZWNsaW5lZERlcGVuZGVuY2llc1tkZXBbaV1dID0gdHJ1ZTtcbiBcdFx0XHRcdGVsc2UgaG90Ll9kZWNsaW5lZERlcGVuZGVuY2llc1tkZXBdID0gdHJ1ZTtcbiBcdFx0XHR9LFxuIFx0XHRcdGRpc3Bvc2U6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gXHRcdFx0XHRob3QuX2Rpc3Bvc2VIYW5kbGVycy5wdXNoKGNhbGxiYWNrKTtcbiBcdFx0XHR9LFxuIFx0XHRcdGFkZERpc3Bvc2VIYW5kbGVyOiBmdW5jdGlvbihjYWxsYmFjaykge1xuIFx0XHRcdFx0aG90Ll9kaXNwb3NlSGFuZGxlcnMucHVzaChjYWxsYmFjayk7XG4gXHRcdFx0fSxcbiBcdFx0XHRyZW1vdmVEaXNwb3NlSGFuZGxlcjogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiBcdFx0XHRcdHZhciBpZHggPSBob3QuX2Rpc3Bvc2VIYW5kbGVycy5pbmRleE9mKGNhbGxiYWNrKTtcbiBcdFx0XHRcdGlmIChpZHggPj0gMCkgaG90Ll9kaXNwb3NlSGFuZGxlcnMuc3BsaWNlKGlkeCwgMSk7XG4gXHRcdFx0fSxcblxuIFx0XHRcdC8vIE1hbmFnZW1lbnQgQVBJXG4gXHRcdFx0Y2hlY2s6IGhvdENoZWNrLFxuIFx0XHRcdGFwcGx5OiBob3RBcHBseSxcbiBcdFx0XHRzdGF0dXM6IGZ1bmN0aW9uKGwpIHtcbiBcdFx0XHRcdGlmICghbCkgcmV0dXJuIGhvdFN0YXR1cztcbiBcdFx0XHRcdGhvdFN0YXR1c0hhbmRsZXJzLnB1c2gobCk7XG4gXHRcdFx0fSxcbiBcdFx0XHRhZGRTdGF0dXNIYW5kbGVyOiBmdW5jdGlvbihsKSB7XG4gXHRcdFx0XHRob3RTdGF0dXNIYW5kbGVycy5wdXNoKGwpO1xuIFx0XHRcdH0sXG4gXHRcdFx0cmVtb3ZlU3RhdHVzSGFuZGxlcjogZnVuY3Rpb24obCkge1xuIFx0XHRcdFx0dmFyIGlkeCA9IGhvdFN0YXR1c0hhbmRsZXJzLmluZGV4T2YobCk7XG4gXHRcdFx0XHRpZiAoaWR4ID49IDApIGhvdFN0YXR1c0hhbmRsZXJzLnNwbGljZShpZHgsIDEpO1xuIFx0XHRcdH0sXG5cbiBcdFx0XHQvL2luaGVyaXQgZnJvbSBwcmV2aW91cyBkaXNwb3NlIGNhbGxcbiBcdFx0XHRkYXRhOiBob3RDdXJyZW50TW9kdWxlRGF0YVttb2R1bGVJZF1cbiBcdFx0fTtcbiBcdFx0aG90Q3VycmVudENoaWxkTW9kdWxlID0gdW5kZWZpbmVkO1xuIFx0XHRyZXR1cm4gaG90O1xuIFx0fVxuXG4gXHR2YXIgaG90U3RhdHVzSGFuZGxlcnMgPSBbXTtcbiBcdHZhciBob3RTdGF0dXMgPSBcImlkbGVcIjtcblxuIFx0ZnVuY3Rpb24gaG90U2V0U3RhdHVzKG5ld1N0YXR1cykge1xuIFx0XHRob3RTdGF0dXMgPSBuZXdTdGF0dXM7XG4gXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgaG90U3RhdHVzSGFuZGxlcnMubGVuZ3RoOyBpKyspXG4gXHRcdFx0aG90U3RhdHVzSGFuZGxlcnNbaV0uY2FsbChudWxsLCBuZXdTdGF0dXMpO1xuIFx0fVxuXG4gXHQvLyB3aGlsZSBkb3dubG9hZGluZ1xuIFx0dmFyIGhvdFdhaXRpbmdGaWxlcyA9IDA7XG4gXHR2YXIgaG90Q2h1bmtzTG9hZGluZyA9IDA7XG4gXHR2YXIgaG90V2FpdGluZ0ZpbGVzTWFwID0ge307XG4gXHR2YXIgaG90UmVxdWVzdGVkRmlsZXNNYXAgPSB7fTtcbiBcdHZhciBob3RBdmFpbGFibGVGaWxlc01hcCA9IHt9O1xuIFx0dmFyIGhvdERlZmVycmVkO1xuXG4gXHQvLyBUaGUgdXBkYXRlIGluZm9cbiBcdHZhciBob3RVcGRhdGUsIGhvdFVwZGF0ZU5ld0hhc2g7XG5cbiBcdGZ1bmN0aW9uIHRvTW9kdWxlSWQoaWQpIHtcbiBcdFx0dmFyIGlzTnVtYmVyID0gK2lkICsgXCJcIiA9PT0gaWQ7XG4gXHRcdHJldHVybiBpc051bWJlciA/ICtpZCA6IGlkO1xuIFx0fVxuXG4gXHRmdW5jdGlvbiBob3RDaGVjayhhcHBseSkge1xuIFx0XHRpZiAoaG90U3RhdHVzICE9PSBcImlkbGVcIikge1xuIFx0XHRcdHRocm93IG5ldyBFcnJvcihcImNoZWNrKCkgaXMgb25seSBhbGxvd2VkIGluIGlkbGUgc3RhdHVzXCIpO1xuIFx0XHR9XG4gXHRcdGhvdEFwcGx5T25VcGRhdGUgPSBhcHBseTtcbiBcdFx0aG90U2V0U3RhdHVzKFwiY2hlY2tcIik7XG4gXHRcdHJldHVybiBob3REb3dubG9hZE1hbmlmZXN0KGhvdFJlcXVlc3RUaW1lb3V0KS50aGVuKGZ1bmN0aW9uKHVwZGF0ZSkge1xuIFx0XHRcdGlmICghdXBkYXRlKSB7XG4gXHRcdFx0XHRob3RTZXRTdGF0dXMoXCJpZGxlXCIpO1xuIFx0XHRcdFx0cmV0dXJuIG51bGw7XG4gXHRcdFx0fVxuIFx0XHRcdGhvdFJlcXVlc3RlZEZpbGVzTWFwID0ge307XG4gXHRcdFx0aG90V2FpdGluZ0ZpbGVzTWFwID0ge307XG4gXHRcdFx0aG90QXZhaWxhYmxlRmlsZXNNYXAgPSB1cGRhdGUuYztcbiBcdFx0XHRob3RVcGRhdGVOZXdIYXNoID0gdXBkYXRlLmg7XG5cbiBcdFx0XHRob3RTZXRTdGF0dXMoXCJwcmVwYXJlXCIpO1xuIFx0XHRcdHZhciBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gXHRcdFx0XHRob3REZWZlcnJlZCA9IHtcbiBcdFx0XHRcdFx0cmVzb2x2ZTogcmVzb2x2ZSxcbiBcdFx0XHRcdFx0cmVqZWN0OiByZWplY3RcbiBcdFx0XHRcdH07XG4gXHRcdFx0fSk7XG4gXHRcdFx0aG90VXBkYXRlID0ge307XG4gXHRcdFx0dmFyIGNodW5rSWQgPSAwO1xuIFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb25lLWJsb2Nrc1xuIFx0XHRcdHtcbiBcdFx0XHRcdC8qZ2xvYmFscyBjaHVua0lkICovXG4gXHRcdFx0XHRob3RFbnN1cmVVcGRhdGVDaHVuayhjaHVua0lkKTtcbiBcdFx0XHR9XG4gXHRcdFx0aWYgKFxuIFx0XHRcdFx0aG90U3RhdHVzID09PSBcInByZXBhcmVcIiAmJlxuIFx0XHRcdFx0aG90Q2h1bmtzTG9hZGluZyA9PT0gMCAmJlxuIFx0XHRcdFx0aG90V2FpdGluZ0ZpbGVzID09PSAwXG4gXHRcdFx0KSB7XG4gXHRcdFx0XHRob3RVcGRhdGVEb3dubG9hZGVkKCk7XG4gXHRcdFx0fVxuIFx0XHRcdHJldHVybiBwcm9taXNlO1xuIFx0XHR9KTtcbiBcdH1cblxuIFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gXHRmdW5jdGlvbiBob3RBZGRVcGRhdGVDaHVuayhjaHVua0lkLCBtb3JlTW9kdWxlcykge1xuIFx0XHRpZiAoIWhvdEF2YWlsYWJsZUZpbGVzTWFwW2NodW5rSWRdIHx8ICFob3RSZXF1ZXN0ZWRGaWxlc01hcFtjaHVua0lkXSlcbiBcdFx0XHRyZXR1cm47XG4gXHRcdGhvdFJlcXVlc3RlZEZpbGVzTWFwW2NodW5rSWRdID0gZmFsc2U7XG4gXHRcdGZvciAodmFyIG1vZHVsZUlkIGluIG1vcmVNb2R1bGVzKSB7XG4gXHRcdFx0aWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb3JlTW9kdWxlcywgbW9kdWxlSWQpKSB7XG4gXHRcdFx0XHRob3RVcGRhdGVbbW9kdWxlSWRdID0gbW9yZU1vZHVsZXNbbW9kdWxlSWRdO1xuIFx0XHRcdH1cbiBcdFx0fVxuIFx0XHRpZiAoLS1ob3RXYWl0aW5nRmlsZXMgPT09IDAgJiYgaG90Q2h1bmtzTG9hZGluZyA9PT0gMCkge1xuIFx0XHRcdGhvdFVwZGF0ZURvd25sb2FkZWQoKTtcbiBcdFx0fVxuIFx0fVxuXG4gXHRmdW5jdGlvbiBob3RFbnN1cmVVcGRhdGVDaHVuayhjaHVua0lkKSB7XG4gXHRcdGlmICghaG90QXZhaWxhYmxlRmlsZXNNYXBbY2h1bmtJZF0pIHtcbiBcdFx0XHRob3RXYWl0aW5nRmlsZXNNYXBbY2h1bmtJZF0gPSB0cnVlO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdGhvdFJlcXVlc3RlZEZpbGVzTWFwW2NodW5rSWRdID0gdHJ1ZTtcbiBcdFx0XHRob3RXYWl0aW5nRmlsZXMrKztcbiBcdFx0XHRob3REb3dubG9hZFVwZGF0ZUNodW5rKGNodW5rSWQpO1xuIFx0XHR9XG4gXHR9XG5cbiBcdGZ1bmN0aW9uIGhvdFVwZGF0ZURvd25sb2FkZWQoKSB7XG4gXHRcdGhvdFNldFN0YXR1cyhcInJlYWR5XCIpO1xuIFx0XHR2YXIgZGVmZXJyZWQgPSBob3REZWZlcnJlZDtcbiBcdFx0aG90RGVmZXJyZWQgPSBudWxsO1xuIFx0XHRpZiAoIWRlZmVycmVkKSByZXR1cm47XG4gXHRcdGlmIChob3RBcHBseU9uVXBkYXRlKSB7XG4gXHRcdFx0Ly8gV3JhcCBkZWZlcnJlZCBvYmplY3QgaW4gUHJvbWlzZSB0byBtYXJrIGl0IGFzIGEgd2VsbC1oYW5kbGVkIFByb21pc2UgdG9cbiBcdFx0XHQvLyBhdm9pZCB0cmlnZ2VyaW5nIHVuY2F1Z2h0IGV4Y2VwdGlvbiB3YXJuaW5nIGluIENocm9tZS5cbiBcdFx0XHQvLyBTZWUgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NDY1NjY2XG4gXHRcdFx0UHJvbWlzZS5yZXNvbHZlKClcbiBcdFx0XHRcdC50aGVuKGZ1bmN0aW9uKCkge1xuIFx0XHRcdFx0XHRyZXR1cm4gaG90QXBwbHkoaG90QXBwbHlPblVwZGF0ZSk7XG4gXHRcdFx0XHR9KVxuIFx0XHRcdFx0LnRoZW4oXG4gXHRcdFx0XHRcdGZ1bmN0aW9uKHJlc3VsdCkge1xuIFx0XHRcdFx0XHRcdGRlZmVycmVkLnJlc29sdmUocmVzdWx0KTtcbiBcdFx0XHRcdFx0fSxcbiBcdFx0XHRcdFx0ZnVuY3Rpb24oZXJyKSB7XG4gXHRcdFx0XHRcdFx0ZGVmZXJyZWQucmVqZWN0KGVycik7XG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdCk7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0dmFyIG91dGRhdGVkTW9kdWxlcyA9IFtdO1xuIFx0XHRcdGZvciAodmFyIGlkIGluIGhvdFVwZGF0ZSkge1xuIFx0XHRcdFx0aWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChob3RVcGRhdGUsIGlkKSkge1xuIFx0XHRcdFx0XHRvdXRkYXRlZE1vZHVsZXMucHVzaCh0b01vZHVsZUlkKGlkKSk7XG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuIFx0XHRcdGRlZmVycmVkLnJlc29sdmUob3V0ZGF0ZWRNb2R1bGVzKTtcbiBcdFx0fVxuIFx0fVxuXG4gXHRmdW5jdGlvbiBob3RBcHBseShvcHRpb25zKSB7XG4gXHRcdGlmIChob3RTdGF0dXMgIT09IFwicmVhZHlcIilcbiBcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJhcHBseSgpIGlzIG9ubHkgYWxsb3dlZCBpbiByZWFkeSBzdGF0dXNcIik7XG4gXHRcdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gXHRcdHZhciBjYjtcbiBcdFx0dmFyIGk7XG4gXHRcdHZhciBqO1xuIFx0XHR2YXIgbW9kdWxlO1xuIFx0XHR2YXIgbW9kdWxlSWQ7XG5cbiBcdFx0ZnVuY3Rpb24gZ2V0QWZmZWN0ZWRTdHVmZih1cGRhdGVNb2R1bGVJZCkge1xuIFx0XHRcdHZhciBvdXRkYXRlZE1vZHVsZXMgPSBbdXBkYXRlTW9kdWxlSWRdO1xuIFx0XHRcdHZhciBvdXRkYXRlZERlcGVuZGVuY2llcyA9IHt9O1xuXG4gXHRcdFx0dmFyIHF1ZXVlID0gb3V0ZGF0ZWRNb2R1bGVzLm1hcChmdW5jdGlvbihpZCkge1xuIFx0XHRcdFx0cmV0dXJuIHtcbiBcdFx0XHRcdFx0Y2hhaW46IFtpZF0sXG4gXHRcdFx0XHRcdGlkOiBpZFxuIFx0XHRcdFx0fTtcbiBcdFx0XHR9KTtcbiBcdFx0XHR3aGlsZSAocXVldWUubGVuZ3RoID4gMCkge1xuIFx0XHRcdFx0dmFyIHF1ZXVlSXRlbSA9IHF1ZXVlLnBvcCgpO1xuIFx0XHRcdFx0dmFyIG1vZHVsZUlkID0gcXVldWVJdGVtLmlkO1xuIFx0XHRcdFx0dmFyIGNoYWluID0gcXVldWVJdGVtLmNoYWluO1xuIFx0XHRcdFx0bW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF07XG4gXHRcdFx0XHRpZiAoIW1vZHVsZSB8fCBtb2R1bGUuaG90Ll9zZWxmQWNjZXB0ZWQpIGNvbnRpbnVlO1xuIFx0XHRcdFx0aWYgKG1vZHVsZS5ob3QuX3NlbGZEZWNsaW5lZCkge1xuIFx0XHRcdFx0XHRyZXR1cm4ge1xuIFx0XHRcdFx0XHRcdHR5cGU6IFwic2VsZi1kZWNsaW5lZFwiLFxuIFx0XHRcdFx0XHRcdGNoYWluOiBjaGFpbixcbiBcdFx0XHRcdFx0XHRtb2R1bGVJZDogbW9kdWxlSWRcbiBcdFx0XHRcdFx0fTtcbiBcdFx0XHRcdH1cbiBcdFx0XHRcdGlmIChtb2R1bGUuaG90Ll9tYWluKSB7XG4gXHRcdFx0XHRcdHJldHVybiB7XG4gXHRcdFx0XHRcdFx0dHlwZTogXCJ1bmFjY2VwdGVkXCIsXG4gXHRcdFx0XHRcdFx0Y2hhaW46IGNoYWluLFxuIFx0XHRcdFx0XHRcdG1vZHVsZUlkOiBtb2R1bGVJZFxuIFx0XHRcdFx0XHR9O1xuIFx0XHRcdFx0fVxuIFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBtb2R1bGUucGFyZW50cy5sZW5ndGg7IGkrKykge1xuIFx0XHRcdFx0XHR2YXIgcGFyZW50SWQgPSBtb2R1bGUucGFyZW50c1tpXTtcbiBcdFx0XHRcdFx0dmFyIHBhcmVudCA9IGluc3RhbGxlZE1vZHVsZXNbcGFyZW50SWRdO1xuIFx0XHRcdFx0XHRpZiAoIXBhcmVudCkgY29udGludWU7XG4gXHRcdFx0XHRcdGlmIChwYXJlbnQuaG90Ll9kZWNsaW5lZERlcGVuZGVuY2llc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRcdFx0XHRyZXR1cm4ge1xuIFx0XHRcdFx0XHRcdFx0dHlwZTogXCJkZWNsaW5lZFwiLFxuIFx0XHRcdFx0XHRcdFx0Y2hhaW46IGNoYWluLmNvbmNhdChbcGFyZW50SWRdKSxcbiBcdFx0XHRcdFx0XHRcdG1vZHVsZUlkOiBtb2R1bGVJZCxcbiBcdFx0XHRcdFx0XHRcdHBhcmVudElkOiBwYXJlbnRJZFxuIFx0XHRcdFx0XHRcdH07XG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdFx0aWYgKG91dGRhdGVkTW9kdWxlcy5pbmRleE9mKHBhcmVudElkKSAhPT0gLTEpIGNvbnRpbnVlO1xuIFx0XHRcdFx0XHRpZiAocGFyZW50LmhvdC5fYWNjZXB0ZWREZXBlbmRlbmNpZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0XHRcdFx0aWYgKCFvdXRkYXRlZERlcGVuZGVuY2llc1twYXJlbnRJZF0pXG4gXHRcdFx0XHRcdFx0XHRvdXRkYXRlZERlcGVuZGVuY2llc1twYXJlbnRJZF0gPSBbXTtcbiBcdFx0XHRcdFx0XHRhZGRBbGxUb1NldChvdXRkYXRlZERlcGVuZGVuY2llc1twYXJlbnRJZF0sIFttb2R1bGVJZF0pO1xuIFx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdFx0XHR9XG4gXHRcdFx0XHRcdGRlbGV0ZSBvdXRkYXRlZERlcGVuZGVuY2llc1twYXJlbnRJZF07XG4gXHRcdFx0XHRcdG91dGRhdGVkTW9kdWxlcy5wdXNoKHBhcmVudElkKTtcbiBcdFx0XHRcdFx0cXVldWUucHVzaCh7XG4gXHRcdFx0XHRcdFx0Y2hhaW46IGNoYWluLmNvbmNhdChbcGFyZW50SWRdKSxcbiBcdFx0XHRcdFx0XHRpZDogcGFyZW50SWRcbiBcdFx0XHRcdFx0fSk7XG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuXG4gXHRcdFx0cmV0dXJuIHtcbiBcdFx0XHRcdHR5cGU6IFwiYWNjZXB0ZWRcIixcbiBcdFx0XHRcdG1vZHVsZUlkOiB1cGRhdGVNb2R1bGVJZCxcbiBcdFx0XHRcdG91dGRhdGVkTW9kdWxlczogb3V0ZGF0ZWRNb2R1bGVzLFxuIFx0XHRcdFx0b3V0ZGF0ZWREZXBlbmRlbmNpZXM6IG91dGRhdGVkRGVwZW5kZW5jaWVzXG4gXHRcdFx0fTtcbiBcdFx0fVxuXG4gXHRcdGZ1bmN0aW9uIGFkZEFsbFRvU2V0KGEsIGIpIHtcbiBcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGIubGVuZ3RoOyBpKyspIHtcbiBcdFx0XHRcdHZhciBpdGVtID0gYltpXTtcbiBcdFx0XHRcdGlmIChhLmluZGV4T2YoaXRlbSkgPT09IC0xKSBhLnB1c2goaXRlbSk7XG4gXHRcdFx0fVxuIFx0XHR9XG5cbiBcdFx0Ly8gYXQgYmVnaW4gYWxsIHVwZGF0ZXMgbW9kdWxlcyBhcmUgb3V0ZGF0ZWRcbiBcdFx0Ly8gdGhlIFwib3V0ZGF0ZWRcIiBzdGF0dXMgY2FuIHByb3BhZ2F0ZSB0byBwYXJlbnRzIGlmIHRoZXkgZG9uJ3QgYWNjZXB0IHRoZSBjaGlsZHJlblxuIFx0XHR2YXIgb3V0ZGF0ZWREZXBlbmRlbmNpZXMgPSB7fTtcbiBcdFx0dmFyIG91dGRhdGVkTW9kdWxlcyA9IFtdO1xuIFx0XHR2YXIgYXBwbGllZFVwZGF0ZSA9IHt9O1xuXG4gXHRcdHZhciB3YXJuVW5leHBlY3RlZFJlcXVpcmUgPSBmdW5jdGlvbiB3YXJuVW5leHBlY3RlZFJlcXVpcmUoKSB7XG4gXHRcdFx0Y29uc29sZS53YXJuKFxuIFx0XHRcdFx0XCJbSE1SXSB1bmV4cGVjdGVkIHJlcXVpcmUoXCIgKyByZXN1bHQubW9kdWxlSWQgKyBcIikgdG8gZGlzcG9zZWQgbW9kdWxlXCJcbiBcdFx0XHQpO1xuIFx0XHR9O1xuXG4gXHRcdGZvciAodmFyIGlkIGluIGhvdFVwZGF0ZSkge1xuIFx0XHRcdGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaG90VXBkYXRlLCBpZCkpIHtcbiBcdFx0XHRcdG1vZHVsZUlkID0gdG9Nb2R1bGVJZChpZCk7XG4gXHRcdFx0XHQvKiogQHR5cGUge1RPRE99ICovXG4gXHRcdFx0XHR2YXIgcmVzdWx0O1xuIFx0XHRcdFx0aWYgKGhvdFVwZGF0ZVtpZF0pIHtcbiBcdFx0XHRcdFx0cmVzdWx0ID0gZ2V0QWZmZWN0ZWRTdHVmZihtb2R1bGVJZCk7XG4gXHRcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0XHRyZXN1bHQgPSB7XG4gXHRcdFx0XHRcdFx0dHlwZTogXCJkaXNwb3NlZFwiLFxuIFx0XHRcdFx0XHRcdG1vZHVsZUlkOiBpZFxuIFx0XHRcdFx0XHR9O1xuIFx0XHRcdFx0fVxuIFx0XHRcdFx0LyoqIEB0eXBlIHtFcnJvcnxmYWxzZX0gKi9cbiBcdFx0XHRcdHZhciBhYm9ydEVycm9yID0gZmFsc2U7XG4gXHRcdFx0XHR2YXIgZG9BcHBseSA9IGZhbHNlO1xuIFx0XHRcdFx0dmFyIGRvRGlzcG9zZSA9IGZhbHNlO1xuIFx0XHRcdFx0dmFyIGNoYWluSW5mbyA9IFwiXCI7XG4gXHRcdFx0XHRpZiAocmVzdWx0LmNoYWluKSB7XG4gXHRcdFx0XHRcdGNoYWluSW5mbyA9IFwiXFxuVXBkYXRlIHByb3BhZ2F0aW9uOiBcIiArIHJlc3VsdC5jaGFpbi5qb2luKFwiIC0+IFwiKTtcbiBcdFx0XHRcdH1cbiBcdFx0XHRcdHN3aXRjaCAocmVzdWx0LnR5cGUpIHtcbiBcdFx0XHRcdFx0Y2FzZSBcInNlbGYtZGVjbGluZWRcIjpcbiBcdFx0XHRcdFx0XHRpZiAob3B0aW9ucy5vbkRlY2xpbmVkKSBvcHRpb25zLm9uRGVjbGluZWQocmVzdWx0KTtcbiBcdFx0XHRcdFx0XHRpZiAoIW9wdGlvbnMuaWdub3JlRGVjbGluZWQpXG4gXHRcdFx0XHRcdFx0XHRhYm9ydEVycm9yID0gbmV3IEVycm9yKFxuIFx0XHRcdFx0XHRcdFx0XHRcIkFib3J0ZWQgYmVjYXVzZSBvZiBzZWxmIGRlY2xpbmU6IFwiICtcbiBcdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQubW9kdWxlSWQgK1xuIFx0XHRcdFx0XHRcdFx0XHRcdGNoYWluSW5mb1xuIFx0XHRcdFx0XHRcdFx0KTtcbiBcdFx0XHRcdFx0XHRicmVhaztcbiBcdFx0XHRcdFx0Y2FzZSBcImRlY2xpbmVkXCI6XG4gXHRcdFx0XHRcdFx0aWYgKG9wdGlvbnMub25EZWNsaW5lZCkgb3B0aW9ucy5vbkRlY2xpbmVkKHJlc3VsdCk7XG4gXHRcdFx0XHRcdFx0aWYgKCFvcHRpb25zLmlnbm9yZURlY2xpbmVkKVxuIFx0XHRcdFx0XHRcdFx0YWJvcnRFcnJvciA9IG5ldyBFcnJvcihcbiBcdFx0XHRcdFx0XHRcdFx0XCJBYm9ydGVkIGJlY2F1c2Ugb2YgZGVjbGluZWQgZGVwZW5kZW5jeTogXCIgK1xuIFx0XHRcdFx0XHRcdFx0XHRcdHJlc3VsdC5tb2R1bGVJZCArXG4gXHRcdFx0XHRcdFx0XHRcdFx0XCIgaW4gXCIgK1xuIFx0XHRcdFx0XHRcdFx0XHRcdHJlc3VsdC5wYXJlbnRJZCArXG4gXHRcdFx0XHRcdFx0XHRcdFx0Y2hhaW5JbmZvXG4gXHRcdFx0XHRcdFx0XHQpO1xuIFx0XHRcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdFx0XHRjYXNlIFwidW5hY2NlcHRlZFwiOlxuIFx0XHRcdFx0XHRcdGlmIChvcHRpb25zLm9uVW5hY2NlcHRlZCkgb3B0aW9ucy5vblVuYWNjZXB0ZWQocmVzdWx0KTtcbiBcdFx0XHRcdFx0XHRpZiAoIW9wdGlvbnMuaWdub3JlVW5hY2NlcHRlZClcbiBcdFx0XHRcdFx0XHRcdGFib3J0RXJyb3IgPSBuZXcgRXJyb3IoXG4gXHRcdFx0XHRcdFx0XHRcdFwiQWJvcnRlZCBiZWNhdXNlIFwiICsgbW9kdWxlSWQgKyBcIiBpcyBub3QgYWNjZXB0ZWRcIiArIGNoYWluSW5mb1xuIFx0XHRcdFx0XHRcdFx0KTtcbiBcdFx0XHRcdFx0XHRicmVhaztcbiBcdFx0XHRcdFx0Y2FzZSBcImFjY2VwdGVkXCI6XG4gXHRcdFx0XHRcdFx0aWYgKG9wdGlvbnMub25BY2NlcHRlZCkgb3B0aW9ucy5vbkFjY2VwdGVkKHJlc3VsdCk7XG4gXHRcdFx0XHRcdFx0ZG9BcHBseSA9IHRydWU7XG4gXHRcdFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0XHRcdGNhc2UgXCJkaXNwb3NlZFwiOlxuIFx0XHRcdFx0XHRcdGlmIChvcHRpb25zLm9uRGlzcG9zZWQpIG9wdGlvbnMub25EaXNwb3NlZChyZXN1bHQpO1xuIFx0XHRcdFx0XHRcdGRvRGlzcG9zZSA9IHRydWU7XG4gXHRcdFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0XHRcdGRlZmF1bHQ6XG4gXHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVW5leGNlcHRpb24gdHlwZSBcIiArIHJlc3VsdC50eXBlKTtcbiBcdFx0XHRcdH1cbiBcdFx0XHRcdGlmIChhYm9ydEVycm9yKSB7XG4gXHRcdFx0XHRcdGhvdFNldFN0YXR1cyhcImFib3J0XCIpO1xuIFx0XHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoYWJvcnRFcnJvcik7XG4gXHRcdFx0XHR9XG4gXHRcdFx0XHRpZiAoZG9BcHBseSkge1xuIFx0XHRcdFx0XHRhcHBsaWVkVXBkYXRlW21vZHVsZUlkXSA9IGhvdFVwZGF0ZVttb2R1bGVJZF07XG4gXHRcdFx0XHRcdGFkZEFsbFRvU2V0KG91dGRhdGVkTW9kdWxlcywgcmVzdWx0Lm91dGRhdGVkTW9kdWxlcyk7XG4gXHRcdFx0XHRcdGZvciAobW9kdWxlSWQgaW4gcmVzdWx0Lm91dGRhdGVkRGVwZW5kZW5jaWVzKSB7XG4gXHRcdFx0XHRcdFx0aWYgKFxuIFx0XHRcdFx0XHRcdFx0T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFxuIFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQub3V0ZGF0ZWREZXBlbmRlbmNpZXMsXG4gXHRcdFx0XHRcdFx0XHRcdG1vZHVsZUlkXG4gXHRcdFx0XHRcdFx0XHQpXG4gXHRcdFx0XHRcdFx0KSB7XG4gXHRcdFx0XHRcdFx0XHRpZiAoIW91dGRhdGVkRGVwZW5kZW5jaWVzW21vZHVsZUlkXSlcbiBcdFx0XHRcdFx0XHRcdFx0b3V0ZGF0ZWREZXBlbmRlbmNpZXNbbW9kdWxlSWRdID0gW107XG4gXHRcdFx0XHRcdFx0XHRhZGRBbGxUb1NldChcbiBcdFx0XHRcdFx0XHRcdFx0b3V0ZGF0ZWREZXBlbmRlbmNpZXNbbW9kdWxlSWRdLFxuIFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQub3V0ZGF0ZWREZXBlbmRlbmNpZXNbbW9kdWxlSWRdXG4gXHRcdFx0XHRcdFx0XHQpO1xuIFx0XHRcdFx0XHRcdH1cbiBcdFx0XHRcdFx0fVxuIFx0XHRcdFx0fVxuIFx0XHRcdFx0aWYgKGRvRGlzcG9zZSkge1xuIFx0XHRcdFx0XHRhZGRBbGxUb1NldChvdXRkYXRlZE1vZHVsZXMsIFtyZXN1bHQubW9kdWxlSWRdKTtcbiBcdFx0XHRcdFx0YXBwbGllZFVwZGF0ZVttb2R1bGVJZF0gPSB3YXJuVW5leHBlY3RlZFJlcXVpcmU7XG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuIFx0XHR9XG5cbiBcdFx0Ly8gU3RvcmUgc2VsZiBhY2NlcHRlZCBvdXRkYXRlZCBtb2R1bGVzIHRvIHJlcXVpcmUgdGhlbSBsYXRlciBieSB0aGUgbW9kdWxlIHN5c3RlbVxuIFx0XHR2YXIgb3V0ZGF0ZWRTZWxmQWNjZXB0ZWRNb2R1bGVzID0gW107XG4gXHRcdGZvciAoaSA9IDA7IGkgPCBvdXRkYXRlZE1vZHVsZXMubGVuZ3RoOyBpKyspIHtcbiBcdFx0XHRtb2R1bGVJZCA9IG91dGRhdGVkTW9kdWxlc1tpXTtcbiBcdFx0XHRpZiAoXG4gXHRcdFx0XHRpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSAmJlxuIFx0XHRcdFx0aW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uaG90Ll9zZWxmQWNjZXB0ZWQgJiZcbiBcdFx0XHRcdC8vIHJlbW92ZWQgc2VsZi1hY2NlcHRlZCBtb2R1bGVzIHNob3VsZCBub3QgYmUgcmVxdWlyZWRcbiBcdFx0XHRcdGFwcGxpZWRVcGRhdGVbbW9kdWxlSWRdICE9PSB3YXJuVW5leHBlY3RlZFJlcXVpcmVcbiBcdFx0XHQpIHtcbiBcdFx0XHRcdG91dGRhdGVkU2VsZkFjY2VwdGVkTW9kdWxlcy5wdXNoKHtcbiBcdFx0XHRcdFx0bW9kdWxlOiBtb2R1bGVJZCxcbiBcdFx0XHRcdFx0ZXJyb3JIYW5kbGVyOiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5ob3QuX3NlbGZBY2NlcHRlZFxuIFx0XHRcdFx0fSk7XG4gXHRcdFx0fVxuIFx0XHR9XG5cbiBcdFx0Ly8gTm93IGluIFwiZGlzcG9zZVwiIHBoYXNlXG4gXHRcdGhvdFNldFN0YXR1cyhcImRpc3Bvc2VcIik7XG4gXHRcdE9iamVjdC5rZXlzKGhvdEF2YWlsYWJsZUZpbGVzTWFwKS5mb3JFYWNoKGZ1bmN0aW9uKGNodW5rSWQpIHtcbiBcdFx0XHRpZiAoaG90QXZhaWxhYmxlRmlsZXNNYXBbY2h1bmtJZF0gPT09IGZhbHNlKSB7XG4gXHRcdFx0XHRob3REaXNwb3NlQ2h1bmsoY2h1bmtJZCk7XG4gXHRcdFx0fVxuIFx0XHR9KTtcblxuIFx0XHR2YXIgaWR4O1xuIFx0XHR2YXIgcXVldWUgPSBvdXRkYXRlZE1vZHVsZXMuc2xpY2UoKTtcbiBcdFx0d2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDApIHtcbiBcdFx0XHRtb2R1bGVJZCA9IHF1ZXVlLnBvcCgpO1xuIFx0XHRcdG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdO1xuIFx0XHRcdGlmICghbW9kdWxlKSBjb250aW51ZTtcblxuIFx0XHRcdHZhciBkYXRhID0ge307XG5cbiBcdFx0XHQvLyBDYWxsIGRpc3Bvc2UgaGFuZGxlcnNcbiBcdFx0XHR2YXIgZGlzcG9zZUhhbmRsZXJzID0gbW9kdWxlLmhvdC5fZGlzcG9zZUhhbmRsZXJzO1xuIFx0XHRcdGZvciAoaiA9IDA7IGogPCBkaXNwb3NlSGFuZGxlcnMubGVuZ3RoOyBqKyspIHtcbiBcdFx0XHRcdGNiID0gZGlzcG9zZUhhbmRsZXJzW2pdO1xuIFx0XHRcdFx0Y2IoZGF0YSk7XG4gXHRcdFx0fVxuIFx0XHRcdGhvdEN1cnJlbnRNb2R1bGVEYXRhW21vZHVsZUlkXSA9IGRhdGE7XG5cbiBcdFx0XHQvLyBkaXNhYmxlIG1vZHVsZSAodGhpcyBkaXNhYmxlcyByZXF1aXJlcyBmcm9tIHRoaXMgbW9kdWxlKVxuIFx0XHRcdG1vZHVsZS5ob3QuYWN0aXZlID0gZmFsc2U7XG5cbiBcdFx0XHQvLyByZW1vdmUgbW9kdWxlIGZyb20gY2FjaGVcbiBcdFx0XHRkZWxldGUgaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF07XG5cbiBcdFx0XHQvLyB3aGVuIGRpc3Bvc2luZyB0aGVyZSBpcyBubyBuZWVkIHRvIGNhbGwgZGlzcG9zZSBoYW5kbGVyXG4gXHRcdFx0ZGVsZXRlIG91dGRhdGVkRGVwZW5kZW5jaWVzW21vZHVsZUlkXTtcblxuIFx0XHRcdC8vIHJlbW92ZSBcInBhcmVudHNcIiByZWZlcmVuY2VzIGZyb20gYWxsIGNoaWxkcmVuXG4gXHRcdFx0Zm9yIChqID0gMDsgaiA8IG1vZHVsZS5jaGlsZHJlbi5sZW5ndGg7IGorKykge1xuIFx0XHRcdFx0dmFyIGNoaWxkID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGUuY2hpbGRyZW5bal1dO1xuIFx0XHRcdFx0aWYgKCFjaGlsZCkgY29udGludWU7XG4gXHRcdFx0XHRpZHggPSBjaGlsZC5wYXJlbnRzLmluZGV4T2YobW9kdWxlSWQpO1xuIFx0XHRcdFx0aWYgKGlkeCA+PSAwKSB7XG4gXHRcdFx0XHRcdGNoaWxkLnBhcmVudHMuc3BsaWNlKGlkeCwgMSk7XG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuIFx0XHR9XG5cbiBcdFx0Ly8gcmVtb3ZlIG91dGRhdGVkIGRlcGVuZGVuY3kgZnJvbSBtb2R1bGUgY2hpbGRyZW5cbiBcdFx0dmFyIGRlcGVuZGVuY3k7XG4gXHRcdHZhciBtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llcztcbiBcdFx0Zm9yIChtb2R1bGVJZCBpbiBvdXRkYXRlZERlcGVuZGVuY2llcykge1xuIFx0XHRcdGlmIChcbiBcdFx0XHRcdE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvdXRkYXRlZERlcGVuZGVuY2llcywgbW9kdWxlSWQpXG4gXHRcdFx0KSB7XG4gXHRcdFx0XHRtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXTtcbiBcdFx0XHRcdGlmIChtb2R1bGUpIHtcbiBcdFx0XHRcdFx0bW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXMgPSBvdXRkYXRlZERlcGVuZGVuY2llc1ttb2R1bGVJZF07XG4gXHRcdFx0XHRcdGZvciAoaiA9IDA7IGogPCBtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llcy5sZW5ndGg7IGorKykge1xuIFx0XHRcdFx0XHRcdGRlcGVuZGVuY3kgPSBtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llc1tqXTtcbiBcdFx0XHRcdFx0XHRpZHggPSBtb2R1bGUuY2hpbGRyZW4uaW5kZXhPZihkZXBlbmRlbmN5KTtcbiBcdFx0XHRcdFx0XHRpZiAoaWR4ID49IDApIG1vZHVsZS5jaGlsZHJlbi5zcGxpY2UoaWR4LCAxKTtcbiBcdFx0XHRcdFx0fVxuIFx0XHRcdFx0fVxuIFx0XHRcdH1cbiBcdFx0fVxuXG4gXHRcdC8vIE5vdyBpbiBcImFwcGx5XCIgcGhhc2VcbiBcdFx0aG90U2V0U3RhdHVzKFwiYXBwbHlcIik7XG5cbiBcdFx0aG90Q3VycmVudEhhc2ggPSBob3RVcGRhdGVOZXdIYXNoO1xuXG4gXHRcdC8vIGluc2VydCBuZXcgY29kZVxuIFx0XHRmb3IgKG1vZHVsZUlkIGluIGFwcGxpZWRVcGRhdGUpIHtcbiBcdFx0XHRpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGFwcGxpZWRVcGRhdGUsIG1vZHVsZUlkKSkge1xuIFx0XHRcdFx0bW9kdWxlc1ttb2R1bGVJZF0gPSBhcHBsaWVkVXBkYXRlW21vZHVsZUlkXTtcbiBcdFx0XHR9XG4gXHRcdH1cblxuIFx0XHQvLyBjYWxsIGFjY2VwdCBoYW5kbGVyc1xuIFx0XHR2YXIgZXJyb3IgPSBudWxsO1xuIFx0XHRmb3IgKG1vZHVsZUlkIGluIG91dGRhdGVkRGVwZW5kZW5jaWVzKSB7XG4gXHRcdFx0aWYgKFxuIFx0XHRcdFx0T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG91dGRhdGVkRGVwZW5kZW5jaWVzLCBtb2R1bGVJZClcbiBcdFx0XHQpIHtcbiBcdFx0XHRcdG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdO1xuIFx0XHRcdFx0aWYgKG1vZHVsZSkge1xuIFx0XHRcdFx0XHRtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llcyA9IG91dGRhdGVkRGVwZW5kZW5jaWVzW21vZHVsZUlkXTtcbiBcdFx0XHRcdFx0dmFyIGNhbGxiYWNrcyA9IFtdO1xuIFx0XHRcdFx0XHRmb3IgKGkgPSAwOyBpIDwgbW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXMubGVuZ3RoOyBpKyspIHtcbiBcdFx0XHRcdFx0XHRkZXBlbmRlbmN5ID0gbW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXNbaV07XG4gXHRcdFx0XHRcdFx0Y2IgPSBtb2R1bGUuaG90Ll9hY2NlcHRlZERlcGVuZGVuY2llc1tkZXBlbmRlbmN5XTtcbiBcdFx0XHRcdFx0XHRpZiAoY2IpIHtcbiBcdFx0XHRcdFx0XHRcdGlmIChjYWxsYmFja3MuaW5kZXhPZihjYikgIT09IC0xKSBjb250aW51ZTtcbiBcdFx0XHRcdFx0XHRcdGNhbGxiYWNrcy5wdXNoKGNiKTtcbiBcdFx0XHRcdFx0XHR9XG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdFx0Zm9yIChpID0gMDsgaSA8IGNhbGxiYWNrcy5sZW5ndGg7IGkrKykge1xuIFx0XHRcdFx0XHRcdGNiID0gY2FsbGJhY2tzW2ldO1xuIFx0XHRcdFx0XHRcdHRyeSB7XG4gXHRcdFx0XHRcdFx0XHRjYihtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llcyk7XG4gXHRcdFx0XHRcdFx0fSBjYXRjaCAoZXJyKSB7XG4gXHRcdFx0XHRcdFx0XHRpZiAob3B0aW9ucy5vbkVycm9yZWQpIHtcbiBcdFx0XHRcdFx0XHRcdFx0b3B0aW9ucy5vbkVycm9yZWQoe1xuIFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiYWNjZXB0LWVycm9yZWRcIixcbiBcdFx0XHRcdFx0XHRcdFx0XHRtb2R1bGVJZDogbW9kdWxlSWQsXG4gXHRcdFx0XHRcdFx0XHRcdFx0ZGVwZW5kZW5jeUlkOiBtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llc1tpXSxcbiBcdFx0XHRcdFx0XHRcdFx0XHRlcnJvcjogZXJyXG4gXHRcdFx0XHRcdFx0XHRcdH0pO1xuIFx0XHRcdFx0XHRcdFx0fVxuIFx0XHRcdFx0XHRcdFx0aWYgKCFvcHRpb25zLmlnbm9yZUVycm9yZWQpIHtcbiBcdFx0XHRcdFx0XHRcdFx0aWYgKCFlcnJvcikgZXJyb3IgPSBlcnI7XG4gXHRcdFx0XHRcdFx0XHR9XG4gXHRcdFx0XHRcdFx0fVxuIFx0XHRcdFx0XHR9XG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuIFx0XHR9XG5cbiBcdFx0Ly8gTG9hZCBzZWxmIGFjY2VwdGVkIG1vZHVsZXNcbiBcdFx0Zm9yIChpID0gMDsgaSA8IG91dGRhdGVkU2VsZkFjY2VwdGVkTW9kdWxlcy5sZW5ndGg7IGkrKykge1xuIFx0XHRcdHZhciBpdGVtID0gb3V0ZGF0ZWRTZWxmQWNjZXB0ZWRNb2R1bGVzW2ldO1xuIFx0XHRcdG1vZHVsZUlkID0gaXRlbS5tb2R1bGU7XG4gXHRcdFx0aG90Q3VycmVudFBhcmVudHMgPSBbbW9kdWxlSWRdO1xuIFx0XHRcdHRyeSB7XG4gXHRcdFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKTtcbiBcdFx0XHR9IGNhdGNoIChlcnIpIHtcbiBcdFx0XHRcdGlmICh0eXBlb2YgaXRlbS5lcnJvckhhbmRsZXIgPT09IFwiZnVuY3Rpb25cIikge1xuIFx0XHRcdFx0XHR0cnkge1xuIFx0XHRcdFx0XHRcdGl0ZW0uZXJyb3JIYW5kbGVyKGVycik7XG4gXHRcdFx0XHRcdH0gY2F0Y2ggKGVycjIpIHtcbiBcdFx0XHRcdFx0XHRpZiAob3B0aW9ucy5vbkVycm9yZWQpIHtcbiBcdFx0XHRcdFx0XHRcdG9wdGlvbnMub25FcnJvcmVkKHtcbiBcdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJzZWxmLWFjY2VwdC1lcnJvci1oYW5kbGVyLWVycm9yZWRcIixcbiBcdFx0XHRcdFx0XHRcdFx0bW9kdWxlSWQ6IG1vZHVsZUlkLFxuIFx0XHRcdFx0XHRcdFx0XHRlcnJvcjogZXJyMixcbiBcdFx0XHRcdFx0XHRcdFx0b3JpZ2luYWxFcnJvcjogZXJyXG4gXHRcdFx0XHRcdFx0XHR9KTtcbiBcdFx0XHRcdFx0XHR9XG4gXHRcdFx0XHRcdFx0aWYgKCFvcHRpb25zLmlnbm9yZUVycm9yZWQpIHtcbiBcdFx0XHRcdFx0XHRcdGlmICghZXJyb3IpIGVycm9yID0gZXJyMjtcbiBcdFx0XHRcdFx0XHR9XG4gXHRcdFx0XHRcdFx0aWYgKCFlcnJvcikgZXJyb3IgPSBlcnI7XG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRcdGlmIChvcHRpb25zLm9uRXJyb3JlZCkge1xuIFx0XHRcdFx0XHRcdG9wdGlvbnMub25FcnJvcmVkKHtcbiBcdFx0XHRcdFx0XHRcdHR5cGU6IFwic2VsZi1hY2NlcHQtZXJyb3JlZFwiLFxuIFx0XHRcdFx0XHRcdFx0bW9kdWxlSWQ6IG1vZHVsZUlkLFxuIFx0XHRcdFx0XHRcdFx0ZXJyb3I6IGVyclxuIFx0XHRcdFx0XHRcdH0pO1xuIFx0XHRcdFx0XHR9XG4gXHRcdFx0XHRcdGlmICghb3B0aW9ucy5pZ25vcmVFcnJvcmVkKSB7XG4gXHRcdFx0XHRcdFx0aWYgKCFlcnJvcikgZXJyb3IgPSBlcnI7XG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdH1cbiBcdFx0XHR9XG4gXHRcdH1cblxuIFx0XHQvLyBoYW5kbGUgZXJyb3JzIGluIGFjY2VwdCBoYW5kbGVycyBhbmQgc2VsZiBhY2NlcHRlZCBtb2R1bGUgbG9hZFxuIFx0XHRpZiAoZXJyb3IpIHtcbiBcdFx0XHRob3RTZXRTdGF0dXMoXCJmYWlsXCIpO1xuIFx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gXHRcdH1cblxuIFx0XHRob3RTZXRTdGF0dXMoXCJpZGxlXCIpO1xuIFx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSkge1xuIFx0XHRcdHJlc29sdmUob3V0ZGF0ZWRNb2R1bGVzKTtcbiBcdFx0fSk7XG4gXHR9XG5cbiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9LFxuIFx0XHRcdGhvdDogaG90Q3JlYXRlTW9kdWxlKG1vZHVsZUlkKSxcbiBcdFx0XHRwYXJlbnRzOiAoaG90Q3VycmVudFBhcmVudHNUZW1wID0gaG90Q3VycmVudFBhcmVudHMsIGhvdEN1cnJlbnRQYXJlbnRzID0gW10sIGhvdEN1cnJlbnRQYXJlbnRzVGVtcCksXG4gXHRcdFx0Y2hpbGRyZW46IFtdXG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIGhvdENyZWF0ZVJlcXVpcmUobW9kdWxlSWQpKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG4gXHQvLyBfX3dlYnBhY2tfaGFzaF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmggPSBmdW5jdGlvbigpIHsgcmV0dXJuIGhvdEN1cnJlbnRIYXNoOyB9O1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIGhvdENyZWF0ZVJlcXVpcmUoMCkoX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMCk7XG4iLCJleHBvcnQgY29uc3QgdGVybWluYWwgPSB7XG4gIGxvZzogKC4uLmFyZ3M6IGFueSkgPT4ge1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKFxuICAgICAgYXJncy5yZWR1Y2UoKGFjYzogc3RyaW5nLCBpdGVtOiBhbnkpID0+IGAke2FjY30gJHtpdGVtfWApICsgXCJcXG5cIixcbiAgICAgIFwidXRmLThcIlxuICAgICk7XG4gIH1cbn07XG5leHBvcnQgZGVmYXVsdCB0ZXJtaW5hbDtcbiIsIi8qKlxuICogQXV0aG9yIDogTmlkaW4gVmluYXlha2FuIDwwMUAwMWFsY2hlbWlzdC5jb20+XG4gKi9cbmNvbnN0IG1pbmltaXN0ID0gcmVxdWlyZShcIm1pbmltaXN0XCIpO1xuY29uc3QgY2hhbGsgPSByZXF1aXJlKFwiY2hhbGtcIik7XG5pbXBvcnQgKiBhcyBjaGlsZF9wcm9jZXNzIGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgKiBhcyByZWFkbGluZSBmcm9tIFwicmVhZGxpbmVcIjtcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHRlcm1pbmFsIGZyb20gXCIuL3Rlcm1pbmFsXCI7XG5cbmNvbnN0IHsgY3Vyc29yVG8gfSA9IHJlYWRsaW5lO1xuY29uc3QgeyBzcGF3biB9ID0gY2hpbGRfcHJvY2VzcztcbmNvbnN0IHsgd2hpdGU6IHcsIHJlZDogciwgYmdSZWQ6IGJnUiB9ID0gY2hhbGs7XG5cbnR5cGUgU3Bhd25PcHRpb25zID0gY2hpbGRfcHJvY2Vzcy5TcGF3bk9wdGlvbnM7XG5cbmludGVyZmFjZSBJbnN0YW5jZSBleHRlbmRzIGNoaWxkX3Byb2Nlc3MuQ2hpbGRQcm9jZXNzIHtcbiAgbmFtZTogc3RyaW5nO1xufVxuXG50eXBlIE9iamVjdE1hcCA9IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgYW55IH07XG5cbnR5cGUgTGF1bmNoTW9kZSA9IFwicHJvZ3JhbVwiIHwgXCJjbGlcIjtcblxudHlwZSBPcHRpb25zID0ge1xuICBlbnY/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgY21kcz86IHN0cmluZ1tdO1xuICBjd2Q/OiBzdHJpbmc7XG4gIG1vZGU/OiBMYXVuY2hNb2RlO1xuICBleGl0UHJvY2Vzc09uQ2xvc2U/OiBib29sZWFuO1xuICBzaWxlbnQ/OiBib29sZWFuO1xufSAmIFNwYXduT3B0aW9ucztcblxuY29uc3QgZGVmYXVsdE9wdGlvbnM6IE9iamVjdE1hcCA9IHtcbiAgbW9kZTogXCJwcm9ncmFtXCIsXG4gIHN0ZGlvOiBcImluaGVyaXRcIixcbiAgZXhpdFByb2Nlc3NPbkNsb3NlOiBmYWxzZVxufTtcblxuY29uc3QgYmFzZURpciA9IHByb2Nlc3MuY3dkKCk7XG5sZXQgZW52UGF0aCA9IGAke2Jhc2VEaXJ9L2Vudi8ke3Byb2Nlc3MuZW52LlVTRVJ9LmVudmA7XG5pZiAoIWZzLmV4aXN0c1N5bmMoZW52UGF0aCkpIHtcbiAgZW52UGF0aCA9IGAke2Jhc2VEaXJ9Ly5lbnZgO1xufVxuaWYgKGZzLmV4aXN0c1N5bmMoZW52UGF0aCkpIHtcbiAgdGVybWluYWwubG9nKGBMb2FkaW5nIGVudiB2YXJzIGZyb206ICR7ZW52UGF0aH1gKTtcblxuICByZXF1aXJlKFwiZG90ZW52XCIpLmNvbmZpZyh7XG4gICAgcGF0aDogZW52UGF0aFxuICB9KTtcbn1cblxudHlwZSBNZXJnZWRPcHRpb24gPSB7IG5hbWU6IHN0cmluZzsgdmFsdWU6IGFueSB9O1xudHlwZSBNZXJnZWRPcHRpb25zID0gTWVyZ2VkT3B0aW9uW107XG5cbmZ1bmN0aW9uIG1lcmdlVmFsdWUodmFsdWUxOiBhbnksIHZhbHVlMjogYW55KSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlMSkgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZTIpKSB7XG4gICAgcmV0dXJuIFsuLi52YWx1ZTEsIC4uLnZhbHVlMl07XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlMSA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgdmFsdWUyID09PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZhbHVlMSxcbiAgICAgIC4uLnZhbHVlMlxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHZhbHVlMjtcbn1cbmZ1bmN0aW9uIG1lcmdlT3B0aW9ucyhcbiAgbmFtZTogc3RyaW5nLFxuICBkZWZhdWx0T3B0aW9uOiBPYmplY3RNYXAsXG4gIG9wdGlvbjogT2JqZWN0TWFwLFxuICBjbGlPcHRpb246IE9iamVjdE1hcFxuKTogTWVyZ2VkT3B0aW9uIHtcbiAgbGV0IHZhbHVlO1xuXG4gIGlmIChkZWZhdWx0T3B0aW9uKSB7XG4gICAgdmFsdWUgPSBkZWZhdWx0T3B0aW9uO1xuICB9XG5cbiAgaWYgKG9wdGlvbikge1xuICAgIHZhbHVlID0gbWVyZ2VWYWx1ZSh2YWx1ZSwgb3B0aW9uKTtcbiAgfVxuXG4gIGlmIChjbGlPcHRpb24pIHtcbiAgICB2YWx1ZSA9IG1lcmdlVmFsdWUodmFsdWUsIGNsaU9wdGlvbik7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG5hbWUsXG4gICAgdmFsdWVcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0T3B0aW9ucyhfb3B0aW9uczogT2JqZWN0TWFwID0ge30sIGFyZ3M6IHN0cmluZ1tdID0gW10pIHtcbiAgY29uc3QgY2xpQXJncyA9IG1pbmltaXN0KGFyZ3MpO1xuICBjb25zdCBvcHRpb25OYW1lcyA9IE9iamVjdC5rZXlzKGRlZmF1bHRPcHRpb25zKVxuICAgIC5jb25jYXQoT2JqZWN0LmtleXMoX29wdGlvbnMpKVxuICAgIC5jb25jYXQoT2JqZWN0LmtleXMoY2xpQXJncykpO1xuXG4gIGNvbnN0IG1lcmdlZE9wdGlvbnM6IE1lcmdlZE9wdGlvbnMgPSBvcHRpb25OYW1lcy5tYXAob3B0aW9uTmFtZSA9PiB7XG4gICAgcmV0dXJuIG1lcmdlT3B0aW9ucyhcbiAgICAgIG9wdGlvbk5hbWUsXG4gICAgICBkZWZhdWx0T3B0aW9uc1tvcHRpb25OYW1lXSxcbiAgICAgIF9vcHRpb25zW29wdGlvbk5hbWVdLFxuICAgICAgY2xpQXJnc1tvcHRpb25OYW1lXVxuICAgICk7XG4gIH0pO1xuICBjb25zdCBmbGF0dGVuT3B0aW9uczogT3B0aW9ucyA9IG1lcmdlZE9wdGlvbnMucmVkdWNlKFxuICAgIChhY2M6IE9iamVjdE1hcCwgb3B0aW9uKSA9PiB7XG4gICAgICBhY2Nbb3B0aW9uLm5hbWVdID0gb3B0aW9uLnZhbHVlO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LFxuICAgIHt9XG4gICk7XG4gIHJldHVybiBmbGF0dGVuT3B0aW9ucztcbn1cbmdsb2JhbC5sYXVuY2hlciA9IGdsb2JhbC5sYXVuY2hlciB8fCB7XG4gIGluc3RhbmNlczogW10sXG4gIHRlcm1pbmF0ZUFsbDogKHNpZ25hbDogc3RyaW5nKSA9PiB7XG4gICAgZ2xvYmFsLmxhdW5jaGVyLmluc3RhbmNlcy5mb3JFYWNoKChfaW5zdGFuY2U6IEluc3RhbmNlKSA9PiB7XG4gICAgICB0ZXJtaW5hbC5sb2coXG4gICAgICAgIGBUZXJtaW5hdGluZyBbJHtfaW5zdGFuY2UubmFtZX1dIGluc3RhbmNlLnBpZDogJHtfaW5zdGFuY2UucGlkfWBcbiAgICAgICk7XG4gICAgICBfaW5zdGFuY2Uua2lsbChzaWduYWwgfHwgXCJTSUdURVJNXCIpO1xuICAgIH0pO1xuICB9XG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGF1bmNoKF9vcHRpb25zOiBPcHRpb25zID0ge30pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBhcmdzID0gX29wdGlvbnMubW9kZSA9PT0gXCJjbGlcIiA/IHByb2Nlc3MuYXJndi5zbGljZSgyKSA6IFtdO1xuICBjb25zdCBvcHRpb25zID0gZ2V0T3B0aW9ucyhfb3B0aW9ucywgYXJncyk7XG4gIGlmIChvcHRpb25zLmVudikge1xuICAgIGNvbnN0IGVudiA9XG4gICAgICBvcHRpb25zLmVudiBpbnN0YW5jZW9mIEFycmF5ID8gb3B0aW9ucy5lbnYgOiBvcHRpb25zLmVudi5zcGxpdChcIixcIik7XG4gICAgZW52LmZvckVhY2goKGVsZW1lbnQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gZWxlbWVudC5zcGxpdChcIj1cIik7XG4gICAgICBjb25zdCBpc1JlZmVyZW5jZSA9IHZhbHVlLmluZGV4T2YoXCJwcm9jZXNzLmVudi5cIikgPiAtMTtcbiAgICAgIHByb2Nlc3MuZW52W2tleV0gPSBpc1JlZmVyZW5jZSA/IHByb2Nlc3MuZW52W3ZhbHVlLnNsaWNlKDEyKV0gOiB2YWx1ZTtcbiAgICB9KTtcbiAgfVxuICBjb25zdCBjbWRzID1cbiAgICBvcHRpb25zLmNtZHMgfHxcbiAgICBwcm9jZXNzLmFyZ3Yuc2xpY2UoMikuZmlsdGVyKGFyZyA9PiBhcmcuaW5kZXhPZihcIi0tY3dkXCIpID09PSAtMSk7XG4gIGxldCBjd2QgPSBiYXNlRGlyO1xuICBpZiAob3B0aW9ucy5jd2QpIHtcbiAgICBjd2QgPVxuICAgICAgb3B0aW9ucy5jd2RbMF0gPT09IFwiL1wiID8gb3B0aW9ucy5jd2QgOiBwYXRoLnJlc29sdmUoYmFzZURpciwgb3B0aW9ucy5jd2QpO1xuICB9XG5cbiAgaWYgKCFjbWRzIHx8IGNtZHMubGVuZ3RoID09PSAwKSB7XG4gICAgY29uc3QgaXNDbGkgPSBvcHRpb25zLm1vZGUgPT09IFwiY2xpXCI7XG4gICAgY29uc3QgdGl0bGUgPSBcIk9vcHMg8J+YrCwgRGlkIHlvdSBmb3Jnb3QgdG8gcGFzc1wiO1xuICAgIGlmIChpc0NsaSkge1xuICAgICAgY29uc3QgbWVzc2FnZSA9XG4gICAgICAgIHIoXG4gICAgICAgICAgYFxcbiAke3RpdGxlfSAke2JnUihcbiAgICAgICAgICAgIHcoXCIgcHJvZ3JhbSBcIilcbiAgICAgICAgICApfT8uIFBsZWFzZSB0ZWxsIG1lLCB3aGljaCBwcm9ncmFtIHlvdSB3YW50IHRvIGxhdW5jaCFcXG5gXG4gICAgICAgICkgKyBgXFxuICAgRXhhbXBsZTogbGF1bmNoIGVjaG8gXCJIZWxsbyBXb3JsZFwiXFxuYDtcbiAgICAgIHRlcm1pbmFsLmxvZyhtZXNzYWdlKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbWVzc2FnZSA9XG4gICAgICAgIHIoXG4gICAgICAgICAgYCR7dGl0bGV9IG9wdGlvbiAke2JnUihcbiAgICAgICAgICAgIHcoXCIgY21kcyBcIilcbiAgICAgICAgICApfT8uIFBsZWFzZSB0ZWxsIG1lLCB3aGljaCBwcm9ncmFtIHlvdSB3YW50IHRvIGxhdW5jaCFcXG5gXG4gICAgICAgICkgKyBgXFxuICAgRXhhbXBsZTogbGF1bmNoKHtjbWRzOltcImVjaG9cIiwgXCJIZWxsbyBXb3JsZFwiXX0pO1xcbmA7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgIHRlcm1pbmFsLmxvZyhcbiAgICAgIFwiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXCJcbiAgICApO1xuICAgIHRlcm1pbmFsLmxvZyhcIiMgIPCfmoAgIExhdW5jaGluZyAgIDogXCIgKyBjbWRzLmpvaW4oXCIgXCIpKTtcbiAgICB0ZXJtaW5hbC5sb2coXCIjICDwn5OCICBDV0QgICAgICAgICA6IFwiICsgY3dkKTtcbiAgICB0ZXJtaW5hbC5sb2coXG4gICAgICBcIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1wiXG4gICAgKTtcbiAgfVxuICBjb25zdCB7IHN0ZGlvLCBzaGVsbCB9ID0gb3B0aW9ucztcblxuICBjb25zdCBpbnN0YW5jZSA9IDxJbnN0YW5jZT5zcGF3bihjbWRzWzBdLCBjbWRzLnNsaWNlKDEpLCB7XG4gICAgc3RkaW8sXG4gICAgY3dkLFxuICAgIHNoZWxsXG4gIH0pO1xuICBpbnN0YW5jZS5uYW1lID0gY21kc1swXTtcblxuICBnbG9iYWwubGF1bmNoZXIuaW5zdGFuY2VzLnB1c2goaW5zdGFuY2UpO1xuXG4gIGZ1bmN0aW9uIGV4aXQoc2lnbmFsOiBzdHJpbmcpIHtcbiAgICBpZiAoaW5zdGFuY2UpIHtcbiAgICAgIGN1cnNvclRvKHByb2Nlc3Muc3Rkb3V0LCAwKTtcbiAgICAgIHRlcm1pbmFsLmxvZyhgS2lsbGluZyBbJHtpbnN0YW5jZS5uYW1lfV0gaW5zdGFuY2UucGlkOiAke2luc3RhbmNlLnBpZH1gKTtcbiAgICAgIGluc3RhbmNlLmtpbGwoc2lnbmFsIHx8IFwiU0lHVEVSTVwiKTtcbiAgICB9XG4gIH1cblxuICBwcm9jZXNzLm9uKFwiU0lHSU5UXCIsIDxhbnk+ZXhpdCk7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgIGxldCBvdXRwdXQgPSBcIlwiO1xuICAgIGxldCBsYXN0RXJyb3JEYXRhID0gXCJcIjtcbiAgICBpZiAoc3RkaW8gIT09IFwiaW5oZXJpdFwiKSB7XG4gICAgICBpZiAoaW5zdGFuY2Uuc3Rkb3V0KSB7XG4gICAgICAgIGluc3RhbmNlLnN0ZG91dC5vbihcImRhdGFcIiwgZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgIGNvbnN0IGRhdGFTdHIgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICAgICAgaWYgKGRhdGFTdHIpIHtcbiAgICAgICAgICAgIG91dHB1dCArPSBkYXRhU3RyO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoaW5zdGFuY2Uuc3RkZXJyKSB7XG4gICAgICAgIGluc3RhbmNlLnN0ZGVyci5vbihcImRhdGFcIiwgZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgIGxhc3RFcnJvckRhdGEgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpbnN0YW5jZS5vbihcImNsb3NlXCIsIGFzeW5jIGNvZGUgPT4ge1xuICAgICAgaWYgKG9wdGlvbnMuZXhpdFByb2Nlc3NPbkNsb3NlKSB7XG4gICAgICAgIHRlcm1pbmFsLmxvZyhgWyR7aW5zdGFuY2UubmFtZX1dIGV4aXQgY29kZToke2NvZGV9YCk7XG4gICAgICAgIHByb2Nlc3MuZXhpdChjb2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRlcm1pbmFsLmxvZyhgWyR7aW5zdGFuY2UubmFtZX1dIGV4aXQgY29kZToke2NvZGV9YCk7XG4gICAgICAgIGNvZGUgPT09IDAgPyByZXNvbHZlKG91dHB1dCkgOiByZWplY3QobGFzdEVycm9yRGF0YSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBsYXVuY2g7XG4iLCJleHBvcnQgKiBmcm9tIFwiLi9sYXVuY2gtYmFzZVwiO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY2hhbGtcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY2hpbGRfcHJvY2Vzc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJkb3RlbnZcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZnNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibWluaW1pc3RcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicGF0aFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFkbGluZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ0c2xpYlwiKTsiXSwic291cmNlUm9vdCI6IiJ9
310
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFRLENBQUMsSUFBSSx5QkFBZSxJQUFJLENBQUUsQ0FBQyxDQUFDO2dDQUNyRCxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQzs2QkFDdEQ7Ozt5QkFDRixDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLEVBQUM7OztDQUNKO0FBRUQsa0RBQWUsc0RBQU0sSUFBQzs7O0FDMU9RIiwic291cmNlcyI6WyIvVXNlcnMvbmlkaW4vd29ya3NwYWNlL3ByaXZhdGUvbGF1bmNoZXIvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwiL1VzZXJzL25pZGluL3dvcmtzcGFjZS9wcml2YXRlL2xhdW5jaGVyL2V4dGVybmFsJTIwY29tbW9uanMlMjAlMjJjaGFsayUyMiIsIi9Vc2Vycy9uaWRpbi93b3Jrc3BhY2UvcHJpdmF0ZS9sYXVuY2hlci9leHRlcm5hbCUyMGNvbW1vbmpzJTIwJTIyZG90ZW52JTIyIiwiL1VzZXJzL25pZGluL3dvcmtzcGFjZS9wcml2YXRlL2xhdW5jaGVyL2V4dGVybmFsJTIwY29tbW9uanMlMjAlMjJtaW5pbWlzdCUyMiIsIi9Vc2Vycy9uaWRpbi93b3Jrc3BhY2UvcHJpdmF0ZS9sYXVuY2hlci93ZWJwYWNrL2Jvb3RzdHJhcCIsIi9Vc2Vycy9uaWRpbi93b3Jrc3BhY2UvcHJpdmF0ZS9sYXVuY2hlci93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lJTIwcHJvcGVydHklMjBnZXR0ZXJzIiwiL1VzZXJzL25pZGluL3dvcmtzcGFjZS9wcml2YXRlL2xhdW5jaGVyL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSUyMHNob3J0aGFuZCIsIi9Vc2Vycy9uaWRpbi93b3Jrc3BhY2UvcHJpdmF0ZS9sYXVuY2hlci93ZWJwYWNrL3J1bnRpbWUvbWFrZSUyMG5hbWVzcGFjZSUyMG9iamVjdCIsIi9Vc2Vycy9uaWRpbi93b3Jrc3BhY2UvcHJpdmF0ZS9sYXVuY2hlci9leHRlcm5hbCUyMGNvbW1vbmpzJTIwJTIydHNsaWIlMjIiLCIvVXNlcnMvbmlkaW4vd29ya3NwYWNlL3ByaXZhdGUvbGF1bmNoZXIvZXh0ZXJuYWwlMjBub2RlLWNvbW1vbmpzJTIwJTIyY2hpbGRfcHJvY2VzcyUyMiIsIi9Vc2Vycy9uaWRpbi93b3Jrc3BhY2UvcHJpdmF0ZS9sYXVuY2hlci9leHRlcm5hbCUyMG5vZGUtY29tbW9uanMlMjAlMjJyZWFkbGluZSUyMiIsIi9Vc2Vycy9uaWRpbi93b3Jrc3BhY2UvcHJpdmF0ZS9sYXVuY2hlci9leHRlcm5hbCUyMG5vZGUtY29tbW9uanMlMjAlMjJmcyUyMiIsIi9Vc2Vycy9uaWRpbi93b3Jrc3BhY2UvcHJpdmF0ZS9sYXVuY2hlci9leHRlcm5hbCUyMG5vZGUtY29tbW9uanMlMjAlMjJwYXRoJTIyIiwiL1VzZXJzL25pZGluL3dvcmtzcGFjZS9wcml2YXRlL2xhdW5jaGVyL3NyYy90ZXJtaW5hbC50cyIsIi9Vc2Vycy9uaWRpbi93b3Jrc3BhY2UvcHJpdmF0ZS9sYXVuY2hlci9zcmMvbGF1bmNoLWJhc2UudHMiLCIvVXNlcnMvbmlkaW4vd29ya3NwYWNlL3ByaXZhdGUvbGF1bmNoZXIvc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcImluZGV4XCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcImluZGV4XCJdID0gZmFjdG9yeSgpO1xufSkoZ2xvYmFsLCAoKSA9PiB7XG5yZXR1cm4gIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY2hhbGtcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZG90ZW52XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIm1pbmltaXN0XCIpOyIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHJlcXVpcmUoXCJ0c2xpYlwiKTsiLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gcmVxdWlyZShcImNoaWxkX3Byb2Nlc3NcIik7IiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHJlcXVpcmUoXCJyZWFkbGluZVwiKTsiLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gcmVxdWlyZShcImZzXCIpOyIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwicGF0aFwiKTsiLCJleHBvcnQgY29uc3QgdGVybWluYWwgPSB7XG4gIGxvZzogKC4uLmFyZ3M6IGFueSkgPT4ge1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKFxuICAgICAgYXJncy5yZWR1Y2UoKGFjYzogc3RyaW5nLCBpdGVtOiBhbnkpID0+IGAke2FjY30gJHtpdGVtfWApICsgXCJcXG5cIixcbiAgICAgIFwidXRmLThcIlxuICAgICk7XG4gIH1cbn07XG5leHBvcnQgZGVmYXVsdCB0ZXJtaW5hbDtcbiIsIi8qKlxuICogQXV0aG9yIDogTmlkaW4gVmluYXlha2FuIDwwMUAwMWFsY2hlbWlzdC5jb20+XG4gKi9cbmNvbnN0IG1pbmltaXN0ID0gcmVxdWlyZShcIm1pbmltaXN0XCIpO1xuY29uc3QgY2hhbGsgPSByZXF1aXJlKFwiY2hhbGtcIik7XG5pbXBvcnQgKiBhcyBjaGlsZF9wcm9jZXNzIGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgKiBhcyByZWFkbGluZSBmcm9tIFwicmVhZGxpbmVcIjtcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHRlcm1pbmFsIGZyb20gXCIuL3Rlcm1pbmFsXCI7XG5cbmNvbnN0IHsgY3Vyc29yVG8gfSA9IHJlYWRsaW5lO1xuY29uc3QgeyBzcGF3biB9ID0gY2hpbGRfcHJvY2VzcztcbmNvbnN0IHsgd2hpdGU6IHcsIHJlZDogciwgYmdSZWQ6IGJnUiB9ID0gY2hhbGs7XG5cbnR5cGUgU3Bhd25PcHRpb25zID0gY2hpbGRfcHJvY2Vzcy5TcGF3bk9wdGlvbnM7XG5cbmludGVyZmFjZSBJbnN0YW5jZSBleHRlbmRzIGNoaWxkX3Byb2Nlc3MuQ2hpbGRQcm9jZXNzIHtcbiAgbmFtZTogc3RyaW5nO1xufVxuXG50eXBlIE9iamVjdE1hcCA9IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgYW55IH07XG5cbnR5cGUgTGF1bmNoTW9kZSA9IFwicHJvZ3JhbVwiIHwgXCJjbGlcIjtcblxudHlwZSBPcHRpb25zID0ge1xuICBlbnY/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgY21kcz86IHN0cmluZ1tdO1xuICBjd2Q/OiBzdHJpbmc7XG4gIG1vZGU/OiBMYXVuY2hNb2RlO1xuICBleGl0UHJvY2Vzc09uQ2xvc2U/OiBib29sZWFuO1xuICBzaWxlbnQ/OiBib29sZWFuO1xufSAmIFNwYXduT3B0aW9ucztcblxuY29uc3QgZGVmYXVsdE9wdGlvbnM6IE9iamVjdE1hcCA9IHtcbiAgbW9kZTogXCJwcm9ncmFtXCIsXG4gIHN0ZGlvOiBcImluaGVyaXRcIixcbiAgZXhpdFByb2Nlc3NPbkNsb3NlOiBmYWxzZSxcbn07XG5cbmNvbnN0IGJhc2VEaXIgPSBwcm9jZXNzLmN3ZCgpO1xubGV0IGVudlBhdGggPSBgJHtiYXNlRGlyfS9lbnYvJHtwcm9jZXNzLmVudi5VU0VSfS5lbnZgO1xuaWYgKCFmcy5leGlzdHNTeW5jKGVudlBhdGgpKSB7XG4gIGVudlBhdGggPSBgJHtiYXNlRGlyfS8uZW52YDtcbn1cbmlmIChmcy5leGlzdHNTeW5jKGVudlBhdGgpKSB7XG4gIHRlcm1pbmFsLmxvZyhgTG9hZGluZyBlbnYgdmFycyBmcm9tOiAke2VudlBhdGh9YCk7XG5cbiAgcmVxdWlyZShcImRvdGVudlwiKS5jb25maWcoe1xuICAgIHBhdGg6IGVudlBhdGgsXG4gIH0pO1xufVxuXG50eXBlIE1lcmdlZE9wdGlvbiA9IHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogYW55IH07XG50eXBlIE1lcmdlZE9wdGlvbnMgPSBNZXJnZWRPcHRpb25bXTtcblxuZnVuY3Rpb24gbWVyZ2VWYWx1ZSh2YWx1ZTE6IGFueSwgdmFsdWUyOiBhbnkpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUxKSAmJiBBcnJheS5pc0FycmF5KHZhbHVlMikpIHtcbiAgICByZXR1cm4gWy4uLnZhbHVlMSwgLi4udmFsdWUyXTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUxID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiB2YWx1ZTIgPT09IFwib2JqZWN0XCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4udmFsdWUxLFxuICAgICAgLi4udmFsdWUyLFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHZhbHVlMjtcbn1cbmZ1bmN0aW9uIG1lcmdlT3B0aW9ucyhcbiAgbmFtZTogc3RyaW5nLFxuICBkZWZhdWx0T3B0aW9uOiBPYmplY3RNYXAsXG4gIG9wdGlvbjogT2JqZWN0TWFwLFxuICBjbGlPcHRpb246IE9iamVjdE1hcFxuKTogTWVyZ2VkT3B0aW9uIHtcbiAgbGV0IHZhbHVlO1xuXG4gIGlmIChkZWZhdWx0T3B0aW9uKSB7XG4gICAgdmFsdWUgPSBkZWZhdWx0T3B0aW9uO1xuICB9XG5cbiAgaWYgKG9wdGlvbikge1xuICAgIHZhbHVlID0gbWVyZ2VWYWx1ZSh2YWx1ZSwgb3B0aW9uKTtcbiAgfVxuXG4gIGlmIChjbGlPcHRpb24pIHtcbiAgICB2YWx1ZSA9IG1lcmdlVmFsdWUodmFsdWUsIGNsaU9wdGlvbik7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG5hbWUsXG4gICAgdmFsdWUsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldE9wdGlvbnMoX29wdGlvbnM6IE9iamVjdE1hcCA9IHt9LCBhcmdzOiBzdHJpbmdbXSA9IFtdKSB7XG4gIGNvbnN0IGNsaUFyZ3MgPSBtaW5pbWlzdChhcmdzKTtcbiAgY29uc3Qgb3B0aW9uTmFtZXMgPSBPYmplY3Qua2V5cyhkZWZhdWx0T3B0aW9ucylcbiAgICAuY29uY2F0KE9iamVjdC5rZXlzKF9vcHRpb25zKSlcbiAgICAuY29uY2F0KE9iamVjdC5rZXlzKGNsaUFyZ3MpKTtcblxuICBjb25zdCBtZXJnZWRPcHRpb25zOiBNZXJnZWRPcHRpb25zID0gb3B0aW9uTmFtZXMubWFwKChvcHRpb25OYW1lKSA9PiB7XG4gICAgcmV0dXJuIG1lcmdlT3B0aW9ucyhcbiAgICAgIG9wdGlvbk5hbWUsXG4gICAgICBkZWZhdWx0T3B0aW9uc1tvcHRpb25OYW1lXSxcbiAgICAgIF9vcHRpb25zW29wdGlvbk5hbWVdLFxuICAgICAgY2xpQXJnc1tvcHRpb25OYW1lXVxuICAgICk7XG4gIH0pO1xuICBjb25zdCBmbGF0dGVuT3B0aW9uczogT3B0aW9ucyA9IG1lcmdlZE9wdGlvbnMucmVkdWNlKFxuICAgIChhY2M6IE9iamVjdE1hcCwgb3B0aW9uKSA9PiB7XG4gICAgICBhY2Nbb3B0aW9uLm5hbWVdID0gb3B0aW9uLnZhbHVlO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LFxuICAgIHt9XG4gICk7XG4gIHJldHVybiBmbGF0dGVuT3B0aW9ucztcbn1cblxuY29uc3QgbGF1bmNoZXIgPSB7XG4gIGluc3RhbmNlczogW10gYXMgSW5zdGFuY2VbXSxcbiAgdGVybWluYXRlQWxsOiAoc2lnbmFsOiBOb2RlSlMuU2lnbmFscykgPT4ge1xuICAgIGxhdW5jaGVyLmluc3RhbmNlcy5mb3JFYWNoKChfaW5zdGFuY2U6IEluc3RhbmNlKSA9PiB7XG4gICAgICB0ZXJtaW5hbC5sb2coXG4gICAgICAgIGBUZXJtaW5hdGluZyBbJHtfaW5zdGFuY2UubmFtZX1dIGluc3RhbmNlLnBpZDogJHtfaW5zdGFuY2UucGlkfWBcbiAgICAgICk7XG4gICAgICBfaW5zdGFuY2Uua2lsbChzaWduYWwgfHwgXCJTSUdURVJNXCIpO1xuICAgIH0pO1xuICB9LFxufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxhdW5jaChfb3B0aW9uczogT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgYXJncyA9IF9vcHRpb25zLm1vZGUgPT09IFwiY2xpXCIgPyBwcm9jZXNzLmFyZ3Yuc2xpY2UoMikgOiBbXTtcbiAgY29uc3Qgb3B0aW9ucyA9IGdldE9wdGlvbnMoX29wdGlvbnMsIGFyZ3MpO1xuICBpZiAob3B0aW9ucy5lbnYpIHtcbiAgICBjb25zdCBlbnYgPVxuICAgICAgb3B0aW9ucy5lbnYgaW5zdGFuY2VvZiBBcnJheSA/IG9wdGlvbnMuZW52IDogb3B0aW9ucy5lbnYuc3BsaXQoXCIsXCIpO1xuICAgIGVudi5mb3JFYWNoKChlbGVtZW50OiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IGVsZW1lbnQuc3BsaXQoXCI9XCIpO1xuICAgICAgY29uc3QgaXNSZWZlcmVuY2UgPSB2YWx1ZS5pbmRleE9mKFwicHJvY2Vzcy5lbnYuXCIpID4gLTE7XG4gICAgICBwcm9jZXNzLmVudltrZXldID0gaXNSZWZlcmVuY2UgPyBwcm9jZXNzLmVudlt2YWx1ZS5zbGljZSgxMildIDogdmFsdWU7XG4gICAgfSk7XG4gIH1cbiAgY29uc3QgY21kcyA9XG4gICAgb3B0aW9ucy5jbWRzIHx8XG4gICAgcHJvY2Vzcy5hcmd2LnNsaWNlKDIpLmZpbHRlcigoYXJnKSA9PiBhcmcuaW5kZXhPZihcIi0tY3dkXCIpID09PSAtMSk7XG4gIGxldCBjd2QgPSBiYXNlRGlyO1xuICBpZiAob3B0aW9ucy5jd2QpIHtcbiAgICBjd2QgPVxuICAgICAgb3B0aW9ucy5jd2RbMF0gPT09IFwiL1wiID8gb3B0aW9ucy5jd2QgOiBwYXRoLnJlc29sdmUoYmFzZURpciwgb3B0aW9ucy5jd2QpO1xuICB9XG5cbiAgaWYgKCFjbWRzIHx8IGNtZHMubGVuZ3RoID09PSAwKSB7XG4gICAgY29uc3QgaXNDbGkgPSBvcHRpb25zLm1vZGUgPT09IFwiY2xpXCI7XG4gICAgY29uc3QgdGl0bGUgPSBcIk9vcHMg8J+YrCwgRGlkIHlvdSBmb3Jnb3QgdG8gcGFzc1wiO1xuICAgIGlmIChpc0NsaSkge1xuICAgICAgY29uc3QgbWVzc2FnZSA9XG4gICAgICAgIHIoXG4gICAgICAgICAgYFxcbiAke3RpdGxlfSAke2JnUihcbiAgICAgICAgICAgIHcoXCIgcHJvZ3JhbSBcIilcbiAgICAgICAgICApfT8uIFBsZWFzZSB0ZWxsIG1lLCB3aGljaCBwcm9ncmFtIHlvdSB3YW50IHRvIGxhdW5jaCFcXG5gXG4gICAgICAgICkgKyBgXFxuICAgRXhhbXBsZTogbGF1bmNoIGVjaG8gXCJIZWxsbyBXb3JsZFwiXFxuYDtcbiAgICAgIHRlcm1pbmFsLmxvZyhtZXNzYWdlKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbWVzc2FnZSA9XG4gICAgICAgIHIoXG4gICAgICAgICAgYCR7dGl0bGV9IG9wdGlvbiAke2JnUihcbiAgICAgICAgICAgIHcoXCIgY21kcyBcIilcbiAgICAgICAgICApfT8uIFBsZWFzZSB0ZWxsIG1lLCB3aGljaCBwcm9ncmFtIHlvdSB3YW50IHRvIGxhdW5jaCFcXG5gXG4gICAgICAgICkgKyBgXFxuICAgRXhhbXBsZTogbGF1bmNoKHtjbWRzOltcImVjaG9cIiwgXCJIZWxsbyBXb3JsZFwiXX0pO1xcbmA7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgIHRlcm1pbmFsLmxvZyhcbiAgICAgIFwiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXCJcbiAgICApO1xuICAgIHRlcm1pbmFsLmxvZyhcIiMgIPCfmoAgIExhdW5jaGluZyAgIDogXCIgKyBjbWRzLmpvaW4oXCIgXCIpKTtcbiAgICB0ZXJtaW5hbC5sb2coXCIjICDwn5OCICBDV0QgICAgICAgICA6IFwiICsgY3dkKTtcbiAgICB0ZXJtaW5hbC5sb2coXG4gICAgICBcIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1wiXG4gICAgKTtcbiAgfVxuICBjb25zdCB7IHN0ZGlvLCBzaGVsbCB9ID0gb3B0aW9ucztcblxuICBjb25zdCBpbnN0YW5jZSA9IDxJbnN0YW5jZT5zcGF3bihjbWRzWzBdLCBjbWRzLnNsaWNlKDEpLCB7XG4gICAgc3RkaW8sXG4gICAgY3dkLFxuICAgIHNoZWxsLFxuICB9KTtcbiAgaW5zdGFuY2UubmFtZSA9IGNtZHNbMF07XG5cbiAgbGF1bmNoZXIuaW5zdGFuY2VzLnB1c2goaW5zdGFuY2UpO1xuXG4gIGZ1bmN0aW9uIGV4aXQoc2lnbmFsOiBOb2RlSlMuU2lnbmFscykge1xuICAgIGlmIChpbnN0YW5jZSkge1xuICAgICAgY3Vyc29yVG8ocHJvY2Vzcy5zdGRvdXQsIDApO1xuICAgICAgdGVybWluYWwubG9nKGBLaWxsaW5nIFske2luc3RhbmNlLm5hbWV9XSBpbnN0YW5jZS5waWQ6ICR7aW5zdGFuY2UucGlkfWApO1xuICAgICAgaW5zdGFuY2Uua2lsbChzaWduYWwgfHwgXCJTSUdURVJNXCIpO1xuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3Mub24oXCJTSUdJTlRcIiwgPGFueT5leGl0KTtcblxuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgIGxldCBvdXRwdXQgPSBcIlwiO1xuICAgIGxldCBsYXN0RXJyb3JEYXRhID0gXCJcIjtcbiAgICBpZiAoc3RkaW8gIT09IFwiaW5oZXJpdFwiKSB7XG4gICAgICBpZiAoaW5zdGFuY2Uuc3Rkb3V0KSB7XG4gICAgICAgIGluc3RhbmNlLnN0ZG91dC5vbihcImRhdGFcIiwgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICBjb25zdCBkYXRhU3RyID0gZGF0YS50b1N0cmluZygpO1xuICAgICAgICAgIGlmIChkYXRhU3RyKSB7XG4gICAgICAgICAgICBvdXRwdXQgKz0gZGF0YVN0cjtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGluc3RhbmNlLnN0ZGVycikge1xuICAgICAgICBpbnN0YW5jZS5zdGRlcnIub24oXCJkYXRhXCIsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgbGFzdEVycm9yRGF0YSA9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGluc3RhbmNlLm9uKFwiY2xvc2VcIiwgYXN5bmMgKGNvZGUpID0+IHtcbiAgICAgIGlmIChvcHRpb25zLmV4aXRQcm9jZXNzT25DbG9zZSkge1xuICAgICAgICB0ZXJtaW5hbC5sb2coYFske2luc3RhbmNlLm5hbWV9XSBleGl0IGNvZGU6JHtjb2RlfWApO1xuICAgICAgICBwcm9jZXNzLmV4aXQoY29kZSA/IGNvZGUgOiB1bmRlZmluZWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGVybWluYWwubG9nKGBbJHtpbnN0YW5jZS5uYW1lfV0gZXhpdCBjb2RlOiR7Y29kZX1gKTtcbiAgICAgICAgY29kZSA9PT0gMCA/IHJlc29sdmUob3V0cHV0KSA6IHJlamVjdChsYXN0RXJyb3JEYXRhKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGxhdW5jaDtcbiIsImV4cG9ydCAqIGZyb20gXCIuL2xhdW5jaC1iYXNlXCI7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=