carbon-components-angular 5.12.3 → 5.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/accordion/accordion.component.d.ts +3 -0
- package/button/button.directive.d.ts +8 -0
- package/docs/documentation/classes/NumberChange.html +1 -1
- package/docs/documentation/classes/TableHeaderItem.html +124 -124
- package/docs/documentation/classes/TableModel.html +253 -86
- package/docs/documentation/components/Accordion.html +23 -20
- package/docs/documentation/components/NumberComponent.html +3 -3
- package/docs/documentation/components/Table.html +21 -24
- package/docs/documentation/components/Tag.html +1 -1
- package/docs/documentation/components/TagFilter.html +1 -1
- package/docs/documentation/components/TextareaLabelComponent.html +5 -5
- package/docs/documentation/coverage.html +17 -17
- package/docs/documentation/directives/Button.html +309 -10
- package/docs/documentation/directives/TextInput.html +195 -11
- package/docs/documentation/js/search/search_index.js +2 -2
- package/docs/documentation/miscellaneous/typealiases.html +21 -0
- package/docs/documentation/modules/CodeSnippetModule/dependencies.svg +4 -4
- package/docs/documentation/modules/CodeSnippetModule.html +4 -4
- package/docs/documentation/modules/DatePickerInputModule/dependencies.svg +42 -38
- package/docs/documentation/modules/DatePickerInputModule.html +42 -38
- package/docs/documentation/modules/FileUploaderModule/dependencies.svg +4 -4
- package/docs/documentation/modules/FileUploaderModule.html +4 -4
- package/docs/documentation/modules/NumberModule/dependencies.svg +4 -4
- package/docs/documentation/modules/NumberModule.html +4 -4
- package/docs/documentation/modules/PanelModule/dependencies.svg +36 -36
- package/docs/documentation/modules/PanelModule.html +36 -36
- package/docs/documentation/modules/RadioModule/dependencies.svg +49 -49
- package/docs/documentation/modules/RadioModule.html +49 -49
- package/docs/documentation/modules/SelectModule/dependencies.svg +43 -43
- package/docs/documentation/modules/SelectModule.html +43 -43
- package/docs/documentation/modules/SliderModule/dependencies.svg +4 -4
- package/docs/documentation/modules/SliderModule.html +4 -4
- package/docs/documentation/modules/TableModule/dependencies.svg +216 -216
- package/docs/documentation/modules/TableModule.html +216 -216
- package/docs/documentation/modules/TabsModule/dependencies.svg +4 -4
- package/docs/documentation/modules/TabsModule.html +4 -4
- package/docs/documentation/modules/TagModule/dependencies.svg +28 -28
- package/docs/documentation/modules/TagModule.html +28 -28
- package/docs/documentation/modules/TilesModule/dependencies.svg +8 -8
- package/docs/documentation/modules/TilesModule.html +8 -8
- package/docs/documentation/modules/TimePickerModule/dependencies.svg +38 -42
- package/docs/documentation/modules/TimePickerModule.html +38 -42
- package/docs/documentation/modules/TimePickerSelectModule/dependencies.svg +4 -4
- package/docs/documentation/modules/TimePickerSelectModule.html +4 -4
- package/docs/documentation/modules/ToggleModule/dependencies.svg +18 -18
- package/docs/documentation/modules/ToggleModule.html +18 -18
- package/docs/documentation/modules/ToggletipModule/dependencies.svg +4 -4
- package/docs/documentation/modules/ToggletipModule.html +4 -4
- package/docs/documentation/modules/TooltipModule/dependencies.svg +28 -28
- package/docs/documentation/modules/TooltipModule.html +28 -28
- package/docs/documentation/modules/UIShellModule/dependencies.svg +4 -4
- package/docs/documentation/modules/UIShellModule.html +4 -4
- package/docs/documentation.json +635 -281
- package/docs/storybook/4578.86305077.iframe.bundle.js +1 -0
- package/docs/storybook/5868.9c8a5d5f.iframe.bundle.js +1 -0
- package/docs/storybook/{7153.22bf775d.iframe.bundle.js → 7153.81ca3a2c.iframe.bundle.js} +1 -1
- package/docs/storybook/accordion-accordion-stories.4a6c54ee.iframe.bundle.js +1 -0
- package/docs/storybook/iframe.html +2 -2
- package/docs/storybook/main.1e0c9932.iframe.bundle.js +1 -0
- package/docs/storybook/number-input-number-stories.8828b5f1.iframe.bundle.js +1 -0
- package/docs/storybook/{patterns-filtering-multiple-categories-stories.6703c130.iframe.bundle.js → patterns-filtering-multiple-categories-stories.558f489b.iframe.bundle.js} +1 -1
- package/docs/storybook/project.json +1 -1
- package/docs/storybook/{runtime~main.584e1b10.iframe.bundle.js → runtime~main.41c8e8cb.iframe.bundle.js} +1 -1
- package/docs/storybook/{tag-tag-stories.5e95b96d.iframe.bundle.js → tag-tag-stories.e525e112.iframe.bundle.js} +1 -1
- package/esm2020/accordion/accordion.component.mjs +12 -3
- package/esm2020/button/button.directive.mjs +36 -2
- package/esm2020/input/input.directive.mjs +24 -2
- package/esm2020/input/textarea-label.component.mjs +5 -5
- package/esm2020/number-input/number.component.mjs +3 -3
- package/esm2020/table/table-header-item.class.mjs +6 -11
- package/esm2020/table/table-model.class.mjs +55 -4
- package/esm2020/table/table.component.mjs +2 -5
- package/esm2020/tag/tag-filter.component.mjs +2 -2
- package/esm2020/tag/tag.component.mjs +2 -2
- package/fesm2015/carbon-components-angular-accordion.mjs +11 -2
- package/fesm2015/carbon-components-angular-accordion.mjs.map +1 -1
- package/fesm2015/carbon-components-angular-button.mjs +35 -1
- package/fesm2015/carbon-components-angular-button.mjs.map +1 -1
- package/fesm2015/carbon-components-angular-input.mjs +27 -5
- package/fesm2015/carbon-components-angular-input.mjs.map +1 -1
- package/fesm2015/carbon-components-angular-number-input.mjs +2 -2
- package/fesm2015/carbon-components-angular-number-input.mjs.map +1 -1
- package/fesm2015/carbon-components-angular-table.mjs +60 -17
- package/fesm2015/carbon-components-angular-table.mjs.map +1 -1
- package/fesm2015/carbon-components-angular-tag.mjs +2 -2
- package/fesm2015/carbon-components-angular-tag.mjs.map +1 -1
- package/fesm2020/carbon-components-angular-accordion.mjs +11 -2
- package/fesm2020/carbon-components-angular-accordion.mjs.map +1 -1
- package/fesm2020/carbon-components-angular-button.mjs +35 -1
- package/fesm2020/carbon-components-angular-button.mjs.map +1 -1
- package/fesm2020/carbon-components-angular-input.mjs +27 -5
- package/fesm2020/carbon-components-angular-input.mjs.map +1 -1
- package/fesm2020/carbon-components-angular-number-input.mjs +2 -2
- package/fesm2020/carbon-components-angular-number-input.mjs.map +1 -1
- package/fesm2020/carbon-components-angular-table.mjs +60 -17
- package/fesm2020/carbon-components-angular-table.mjs.map +1 -1
- package/fesm2020/carbon-components-angular-tag.mjs +2 -2
- package/fesm2020/carbon-components-angular-tag.mjs.map +1 -1
- package/input/input.directive.d.ts +6 -0
- package/package.json +1 -1
- package/table/table-header-item.class.d.ts +16 -20
- package/table/table-model.class.d.ts +9 -0
- package/docs/storybook/4578.d79a1b3e.iframe.bundle.js +0 -1
- package/docs/storybook/5868.140403a3.iframe.bundle.js +0 -1
- package/docs/storybook/accordion-accordion-stories.87b53382.iframe.bundle.js +0 -1
- package/docs/storybook/main.4241d66b.iframe.bundle.js +0 -1
- package/docs/storybook/number-input-number-stories.0bc36a19.iframe.bundle.js +0 -1
|
@@ -37,6 +37,10 @@ export class TableModel {
|
|
|
37
37
|
* Contains information about expanded state of rows in the table.
|
|
38
38
|
*/
|
|
39
39
|
this.rowsExpanded = [];
|
|
40
|
+
/**
|
|
41
|
+
* Contains information about initial index of rows in the table
|
|
42
|
+
*/
|
|
43
|
+
this.rowsIndices = [];
|
|
40
44
|
/**
|
|
41
45
|
* Contains information about the context of the row.
|
|
42
46
|
*
|
|
@@ -98,6 +102,8 @@ export class TableModel {
|
|
|
98
102
|
// init rowsSelected
|
|
99
103
|
this.rowsSelected = new Array(this._data.length).fill(false);
|
|
100
104
|
this.rowsExpanded = new Array(this._data.length).fill(false);
|
|
105
|
+
// init rows indices
|
|
106
|
+
this.rowsIndices = [...Array(this._data.length).keys()];
|
|
101
107
|
// init rowsContext
|
|
102
108
|
this.rowsContext = new Array(this._data.length);
|
|
103
109
|
// init rowsClass
|
|
@@ -296,6 +302,8 @@ export class TableModel {
|
|
|
296
302
|
this.rowsContext.push(undefined);
|
|
297
303
|
// update rowsClass property for length
|
|
298
304
|
this.rowsClass.push(undefined);
|
|
305
|
+
// update rowsIndices property for length
|
|
306
|
+
this.rowsIndices.push(this.data.length - 1);
|
|
299
307
|
}
|
|
300
308
|
else {
|
|
301
309
|
const ri = this.realRowIndex(index);
|
|
@@ -308,6 +316,8 @@ export class TableModel {
|
|
|
308
316
|
this.rowsContext.splice(ri, 0, undefined);
|
|
309
317
|
// update rowsClass property for length
|
|
310
318
|
this.rowsClass.splice(ri, 0, undefined);
|
|
319
|
+
// update rowsIndices property for length
|
|
320
|
+
this.rowsIndices.splice(ri, 0, this.data.length - 1);
|
|
311
321
|
}
|
|
312
322
|
this.dataChange.emit();
|
|
313
323
|
}
|
|
@@ -325,6 +335,9 @@ export class TableModel {
|
|
|
325
335
|
this.rowsExpanded.splice(rri, 1);
|
|
326
336
|
this.rowsContext.splice(rri, 1);
|
|
327
337
|
this.rowsClass.splice(rri, 1);
|
|
338
|
+
const rowIndex = this.rowsIndices[rri];
|
|
339
|
+
this.rowsIndices.splice(rri, 1);
|
|
340
|
+
this.rowsIndices = this.rowsIndices.map((value) => (value > rowIndex) ? --value : value);
|
|
328
341
|
this.dataChange.emit();
|
|
329
342
|
}
|
|
330
343
|
hasExpandableRows() {
|
|
@@ -447,6 +460,24 @@ export class TableModel {
|
|
|
447
460
|
this.deleteColumn(indexFrom + (indexTo < indexFrom ? 1 : 0));
|
|
448
461
|
this.header[indexTo + (indexTo > indexFrom ? -1 : 0)] = headerFrom;
|
|
449
462
|
}
|
|
463
|
+
/**
|
|
464
|
+
* cycle through the three sort states
|
|
465
|
+
* @param index
|
|
466
|
+
*/
|
|
467
|
+
cycleSortState(index) {
|
|
468
|
+
// no sort provided so do the simple sort
|
|
469
|
+
switch (this.header[index].sortDirection) {
|
|
470
|
+
case "ASCENDING":
|
|
471
|
+
this.header[index].sortDirection = "DESCENDING";
|
|
472
|
+
break;
|
|
473
|
+
case "DESCENDING":
|
|
474
|
+
this.header[index].sortDirection = "NONE";
|
|
475
|
+
break;
|
|
476
|
+
default:
|
|
477
|
+
this.header[index].sortDirection = "ASCENDING";
|
|
478
|
+
break;
|
|
479
|
+
}
|
|
480
|
+
}
|
|
450
481
|
/**
|
|
451
482
|
* Sorts the data currently present in the model based on `compare()`
|
|
452
483
|
*
|
|
@@ -457,10 +488,26 @@ export class TableModel {
|
|
|
457
488
|
*/
|
|
458
489
|
sort(index) {
|
|
459
490
|
this.pushRowStateToModelData();
|
|
460
|
-
|
|
461
|
-
|
|
491
|
+
const headerSorted = this.header[index].sorted;
|
|
492
|
+
// We only allow sorting by a single column, so reset sort state for all columns before specifying new sort state
|
|
462
493
|
this.header.forEach(column => column.sorted = false);
|
|
463
|
-
this.header[index].
|
|
494
|
+
if (this.header[index].sortDirection === "NONE" && headerSorted) {
|
|
495
|
+
// Restore initial order of rows
|
|
496
|
+
const oldData = this._data;
|
|
497
|
+
this._data = [];
|
|
498
|
+
for (let i = 0; i < this.rowsIndices.length; i++) {
|
|
499
|
+
const ri = this.rowsIndices[i];
|
|
500
|
+
this._data[ri] = oldData[i];
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
else {
|
|
504
|
+
const descending = this.header[index].sortDirection === "DESCENDING" ? -1 : 1;
|
|
505
|
+
this.data.sort((a, b) => {
|
|
506
|
+
return descending * this.header[index].compare(a[index], b[index]);
|
|
507
|
+
});
|
|
508
|
+
this.header[index].sorted = true;
|
|
509
|
+
}
|
|
510
|
+
this.popRowStateFromModelData();
|
|
464
511
|
}
|
|
465
512
|
/**
|
|
466
513
|
* Appends `rowsSelected` and `rowsExpanded` info to model data.
|
|
@@ -485,6 +532,9 @@ export class TableModel {
|
|
|
485
532
|
const rowClass = new TableItem();
|
|
486
533
|
rowClass.data = this.rowsClass[i];
|
|
487
534
|
this.data[i].push(rowClass);
|
|
535
|
+
const rowIndex = new TableItem();
|
|
536
|
+
rowIndex.data = this.rowsIndices[i];
|
|
537
|
+
this.data[i].push(rowIndex);
|
|
488
538
|
}
|
|
489
539
|
}
|
|
490
540
|
/**
|
|
@@ -495,6 +545,7 @@ export class TableModel {
|
|
|
495
545
|
*/
|
|
496
546
|
popRowStateFromModelData() {
|
|
497
547
|
for (let i = 0; i < this.data.length; i++) {
|
|
548
|
+
this.rowsIndices[i] = this.data[i].pop().data;
|
|
498
549
|
this.rowsClass[i] = this.data[i].pop().data;
|
|
499
550
|
this.rowsContext[i] = this.data[i].pop().data;
|
|
500
551
|
this.rowsExpanded[i] = !!this.data[i].pop().data;
|
|
@@ -600,4 +651,4 @@ export class TableModel {
|
|
|
600
651
|
* The number of models instantiated, used for (among other things) unique id generation
|
|
601
652
|
*/
|
|
602
653
|
TableModel.COUNT = 0;
|
|
603
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtbW9kZWwuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGFibGUvdGFibGUtbW9kZWwuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLFlBQVksRUFDWixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJL0I7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSCxNQUFNLE9BQU8sVUFBVTtJQWdLdEI7UUF4SEEsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDaEMsdUJBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUNoRCx1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ2hEOzs7V0FHRztRQUNILG9CQUFlLEdBQUcsSUFBSSxPQUFPLEVBQVcsQ0FBQztRQVl6Qzs7V0FFRztRQUNILGlCQUFZLEdBQWMsRUFBRSxDQUFDO1FBRTdCOztXQUVHO1FBQ0gsaUJBQVksR0FBYyxFQUFFLENBQUM7UUFFN0I7Ozs7Ozs7V0FPRztRQUNILGdCQUFXLEdBQWEsRUFBRSxDQUFDO1FBRTNCOzs7Ozs7V0FNRztRQUNILGNBQVMsR0FBYSxFQUFFLENBQUM7UUFFekI7O1dBRUc7UUFDSCxXQUFNLEdBQXNCLEVBQUUsQ0FBQztRQUUvQjs7V0FFRztRQUNILGdCQUFXLEdBQUcsQ0FBQyxDQUFDO1FBRWhCOztXQUVHO1FBQ0gsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUVoQjs7V0FFRztRQUNILFVBQUssR0FBRyxLQUFLLENBQUM7UUFFZDs7V0FFRztRQUNILGNBQVMsR0FBRyxLQUFLLENBQUM7UUFzQ2xCOztXQUVHO1FBQ08sVUFBSyxHQUFrQixDQUFDLEVB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QyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ08sU0FBUyxDQUFDLEtBQWEsRUFBRSxNQUFjO1FBQ2hELElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtZQUNsQixPQUFPLE1BQU0sR0FBRyxDQUFDLENBQUM7U0FDbEI7YUFBTSxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUU7WUFDdEIsT0FBTyxLQUFLLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7U0FDNUM7YUFBTTtZQUNOLE9BQU8sQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7U0FDN0M7SUFDRixDQUFDOztBQXJwQkQ7O0dBRUc7QUFDYyxnQkFBSyxHQUFHLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdEV2ZW50RW1pdHRlclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG5pbXBvcnQgeyBQYWdpbmF0aW9uTW9kZWwgfSBmcm9tIFwiY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhci9wYWdpbmF0aW9uXCI7XG5pbXBvcnQgeyBUYWJsZUhlYWRlckl0ZW0gfSBmcm9tIFwiLi90YWJsZS1oZWFkZXItaXRlbS5jbGFzc1wiO1xuaW1wb3J0IHsgVGFibGVJdGVtIH0gZnJvbSBcIi4vdGFibGUtaXRlbS5jbGFzc1wiO1xuaW1wb3J0IHsgVGFibGVSb3cgfSBmcm9tIFwiLi90YWJsZS1yb3cuY2xhc3NcIjtcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xuXG5leHBvcnQgdHlwZSBIZWFkZXJUeXBlID0gbnVtYmVyIHwgXCJzZWxlY3RcIiB8IFwiZXhwYW5kXCI7XG5cbi8qKlxuICogVGFibGVNb2RlbCByZXByZXNlbnRzIGEgZGF0YSBtb2RlbCBmb3IgdHdvLWRpbWVuc2lvbmFsIGRhdGEuIEl0J3MgdXNlZCBmb3IgYWxsIHRoaW5ncyB0YWJsZVxuICogKHRhYmxlIGNvbXBvbmVudCwgdGFibGUgdG9vbGJhciwgcGFnaW5hdGlvbiwgZXRjKVxuICpcbiAqIFRhYmxlTW9kZWwgbWFuYWdlcyBpdHMgaW50ZXJuYWwgZGF0YSBpbnRlZ3JpdHkgdmVyeSB3ZWxsIGlmIHlvdSB1c2UgdGhlIHByb3ZpZGVkIGhlbHBlclxuICogZnVuY3Rpb25zIGZvciBtb2RpZnlpbmcgcm93cyBhbmQgY29sdW1ucyBhbmQgYXNzaWduaW5nIGhlYWRlciBhbmQgZGF0YSBpbiB0aGF0IG9yZGVyLlxuICpcbiAqIEl0IGFsc28gcHJvdmlkZXMgZGlyZWN0IGFjY2VzcyB0byB0aGUgZGF0YSBzbyB5b3UgY2FuIHJlYWQgYW5kIG1vZGlmeSBpdC5cbiAqIElmIHlvdSBjaGFuZ2UgdGhlIHN0cnVjdHVyZSBvZiB0aGUgZGF0YSAoYnkgZGlyZWN0bHkgcHVzaGluZyBpbnRvIHRoZSBhcnJheXMgb3Igb3RoZXJ3aXNlKSxcbiAqIGtlZXAgaW4gbWluZCB0byBrZWVwIHRoZSBkYXRhIHN0cnVjdHVyZSBpbnRhY3QuXG4gKlxuICogSGVhZGVyIGxlbmd0aCBhbmQgbGVuZ3RoIG9mIGV2ZXJ5IGxpbmUgaW4gdGhlIGRhdGEgc2hvdWxkIGJlIGVxdWFsLlxuICpcbiAqIElmIHRoZXkgYXJlIG5vdCBjb25zaXN0ZW50LCB1bmV4cGVjdGVkIHRoaW5ncyB3aWxsIGhhcHBlbi5cbiAqXG4gKiBVc2UgdGhlIHByb3ZpZGVkIGZ1bmN0aW9ucyB3aGVuIGluIGRvdWJ0LlxuICovXG5leHBvcnQgY2xhc3MgVGFibGVNb2RlbCBpbXBsZW1lbnRzIFBhZ2luYXRpb25Nb2RlbCB7XG5cdC8qKlxuXHQgKiBUaGUgbnVtYmVyIG9mIG1vZGVscyBpbnN0YW50aWF0ZWQsIHVzZWQgZm9yIChhbW9uZyBvdGhlciB0aGluZ3MpIHVuaXF1ZSBpZCBnZW5lcmF0aW9uXG5cdCAqL1xuXHRwcm90ZWN0ZWQgc3RhdGljIENPVU5UID0gMDtcblxuXHQvKipcblx0ICogU2V0cyBkYXRhIG9mIHRoZSB0YWJsZS5cblx0ICpcblx0ICogTWFrZSBzdXJlIGFsbCByb3dzIGFyZSB0aGUgc2FtZSBsZW5ndGggdG8ga2VlcCB0aGUgY29sdW1uIGNvdW50IGFjY3VyYXRlLlxuXHQgKi9cblx0c2V0IGRhdGEobmV3RGF0YTogVGFibGVJdGVtW11bXSkge1xuXHRcdGlmICghbmV3RGF0YSB8fCAoQXJyYXkuaXNBcnJheShuZXdEYXRhKSAmJiBuZXdEYXRhLmxlbmd0aCA9PT0gMCkgKSB7XG5cdFx0XHRuZXdEYXRhID0gW1tdXTtcblx0XHR9XG5cblx0XHR0aGlzLl9kYXRhID0gbmV3RGF0YTtcblxuXHRcdC8vIGluaXQgcm93c1NlbGVjdGVkXG5cdFx0dGhpcy5yb3dzU2VsZWN0ZWQgPSBuZXcgQXJyYXk8Ym9vbGVhbj4odGhpcy5fZGF0YS5sZW5ndGgpLmZpbGwoZmFsc2UpO1xuXHRcdHRoaXMucm93c0V4cGFuZGVkID0gbmV3IEFycmF5PGJvb2xlYW4+KHRoaXMuX2RhdGEubGVuZ3RoKS5maWxsKGZhbHNlKTtcblxuXHRcdC8vIGluaXQgcm93c0NvbnRleHRcblx0XHR0aGlzLnJvd3NDb250ZXh0ID0gbmV3IEFycmF5PHN0cmluZz4odGhpcy5fZGF0YS5sZW5ndGgpO1xuXG5cdFx0Ly8gaW5pdCByb3dzQ2xhc3Ncblx0XHR0aGlzLnJvd3NDbGFzcyA9IG5ldyBBcnJheTxzdHJpbmc+KHRoaXMuX2RhdGEubGVuZ3RoKTtcblxuXHRcdC8vIG9ubHkgY3JlYXRlIGEgZnJlc2ggaGVhZGVyIGlmIG5lY2Vzc2FyeSAoaGVhZGVyIGRvZXNuJ3QgZXhpc3Qgb3IgZGlmZmVycyBpbiBsZW5ndGgpXG5cdFx0aWYgKHRoaXMuaGVhZGVyID09IG51bGwgfHwgKHRoaXMuaGVhZGVyLmxlbmd0aCAhPT0gdGhpcy5fZGF0YVswXS5sZW5ndGggJiYgdGhpcy5fZGF0YVswXS5sZW5ndGggPiAwKSkge1xuXHRcdFx0bGV0IGhlYWRlciA9IG5ldyBBcnJheTxUYWJsZUhlYWRlckl0ZW0+KCk7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX2RhdGFbMF0ubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aGVhZGVyLnB1c2gobmV3IFRhYmxlSGVhZGVySXRlbSgpKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuaGVhZGVyID0gaGVhZGVyO1xuXHRcdH1cblxuXHRcdHRoaXMuZGF0YUNoYW5nZS5lbWl0KCk7XG5cdH1cblxuXHRkYXRhQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXHRyb3dzU2VsZWN0ZWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblx0cm93c0V4cGFuZGVkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cdC8qKlxuXHQgKiBHZXRzIGVtaXR0ZWQgd2hlbiBgc2VsZWN0QWxsYCBpcyBjYWxsZWQuIEVtaXRzIGZhbHNlIGlmIGFsbCByb3dzIGFyZSBkZXNlbGVjdGVkIGFuZCB0cnVlIGlmXG5cdCAqIGFsbCByb3dzIGFyZSBzZWxlY3RlZC5cblx0ICovXG5cdHNlbGVjdEFsbENoYW5nZSA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGZ1bGwgZGF0YS5cblx0ICpcblx0ICogWW91IGNhbiB1c2UgaXQgdG8gYWx0ZXIgaW5kaXZpZHVhbCBgVGFibGVJdGVtYHMgYnV0IGlmIHlvdSBuZWVkIHRvIGNoYW5nZVxuXHQgKiB0YWJsZSBzdHJ1Y3R1cmUsIHVzZSBgYWRkUm93KClgIGFuZC9vciBgYWRkQ29sdW1uKClgXG5cdCAqL1xuXHRnZXQgZGF0YSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fZGF0YTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBzZWxlY3Rpb24gc3RhdGUgb2Ygcm93cyBpbiB0aGUgdGFibGUuXG5cdCAqL1xuXHRyb3dzU2VsZWN0ZWQ6IGJvb2xlYW5bXSA9IFtdO1xuXG5cdC8qKlxuXHQgKiBDb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBleHBhbmRlZCBzdGF0ZSBvZiByb3dzIGluIHRoZSB0YWJsZS5cblx0ICovXG5cdHJvd3NFeHBhbmRlZDogYm9vbGVhbltdID0gW107XG5cblx0LyoqXG5cdCAqIENvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb250ZXh0IG9mIHRoZSByb3cuXG5cdCAqXG5cdCAqIEl0IGFmZmVjdHMgc3R5bGluZyBvZiB0aGUgcm93IHRvIHJlZmxlY3QgdGhlIGNvbnRleHQuXG5cdCAqXG5cdCAqIHN0cmluZyBjYW4gYmUgb25lIG9mIGBcInN1Y2Nlc3NcIiB8IFwid2FybmluZ1wiIHwgXCJpbmZvXCIgfCBcImVycm9yXCIgfCBcIlwiYCBhbmQgaXQnc1xuXHQgKiBlbXB0eSBvciB1bmRlZmluZWQgYnkgZGVmYXVsdFxuXHQgKi9cblx0cm93c0NvbnRleHQ6IHN0cmluZ1tdID0gW107XG5cblx0LyoqXG5cdCAqIENvbnRhaW5zIGNsYXNzIG5hbWUocykgb2YgdGhlIHJvdy5cblx0ICpcblx0ICogSXQgYWZmZWN0cyBzdHlsaW5nIG9mIHRoZSByb3cgdG8gcmVmbGVjdCB0aGUgYXBwZW5kZWQgY2xhc3MgbmFtZShzKS5cblx0ICpcblx0ICogSXQncyBlbXB0eSBvciB1bmRlZmluZWQgYnkgZGVmYXVsdFxuXHQgKi9cblx0cm93c0NsYXNzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdC8qKlxuXHQgKiBDb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaGVhZGVyIGNlbGxzIG9mIHRoZSB0YWJsZS5cblx0ICovXG5cdGhlYWRlcjogVGFibGVIZWFkZXJJdGVtW10gPSBbXTtcblxuXHQvKipcblx0ICogVHJhY2tzIHRoZSBjdXJyZW50IHBhZ2UuXG5cdCAqL1xuXHRjdXJyZW50UGFnZSA9IDE7XG5cblx0LyoqXG5cdCAqIExlbmd0aCBvZiBwYWdlLlxuXHQgKi9cblx0cGFnZUxlbmd0aCA9IDEwO1xuXG5cdC8qKlxuXHQgKiBTZXQgdG8gdHJ1ZSB3aGVuIHRoZXJlIGlzIG5vIG1vcmUgZGF0YSB0byBsb2FkIGluIHRoZSB0YWJsZVxuXHQgKi9cblx0aXNFbmQgPSBmYWxzZTtcblxuXHQvKipcblx0ICogU2V0IHRvIHRydWUgd2hlbiBsYXp5IGxvYWRpbmcgdG8gc2hvdyBsb2FkaW5nIGluZGljYXRvclxuXHQgKi9cblx0aXNMb2FkaW5nID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIEFic29sdXRlIHRvdGFsIG51bWJlciBvZiByb3dzIG9mIHRoZSB0YWJsZS5cblx0ICovXG5cdHByb3RlY3RlZCBfdG90YWxEYXRhTGVuZ3RoOiBudW1iZXI7XG5cblx0LyoqXG5cdCAqIE1hbnVhbGx5IHNldCBkYXRhIGxlbmd0aCBpbiBjYXNlIHRoZSBkYXRhIGluIHRoZSB0YWJsZSBkb2Vzbid0XG5cdCAqIGNvcnJlY3RseSByZWZsZWN0IGFsbCB0aGUgZGF0YSB0aGF0IHRhYmxlIGlzIHRvIGRpc3BsYXkuXG5cdCAqXG5cdCAqIEV4YW1wbGU6IGlmIHlvdSBoYXZlIG11bHRpcGxlIHBhZ2VzIG9mIGRhdGEgdGhhdCB0YWJsZSB3aWxsIGRpc3BsYXlcblx0ICogYnV0IHlvdSdyZSBsb2FkaW5nIG9uZSBhdCBhIHRpbWUuXG5cdCAqXG5cdCAqIFNldCB0byBgbnVsbGAgdG8gcmVzZXQgdG8gZGVmYXVsdCBiZWhhdmlvci5cblx0ICovXG5cdHNldCB0b3RhbERhdGFMZW5ndGgobGVuZ3RoOiBudW1iZXIpIHtcblx0XHQvLyBpZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRob3V0IGEgcGFyYW1ldGVyIHdlIG5lZWQgdG8gc2V0IHRvIG51bGwgdG8gYXZvaWQgaGF2aW5nIHVuZGVmaW5lZCAhPSBudWxsXG5cdFx0dGhpcy5fdG90YWxEYXRhTGVuZ3RoID0gaXNOYU4obGVuZ3RoKSA/IG51bGwgOiBsZW5ndGg7XG5cdH1cblxuXHQvKipcblx0ICogVG90YWwgbGVuZ3RoIG9mIGRhdGEgdGhhdCB0YWJsZSBoYXMgYWNjZXNzIHRvLCBvciB0aGUgYW1vdW50IG1hbnVhbGx5IHNldFxuXHQgKi9cblx0Z2V0IHRvdGFsRGF0YUxlbmd0aCgpIHtcblx0XHQvLyBpZiBtYW51YWxseSBzZXQgZGF0YSBsZW5ndGhcblx0XHRpZiAodGhpcy5fdG90YWxEYXRhTGVuZ3RoICE9PSBudWxsICYmIHRoaXMuX3RvdGFsRGF0YUxlbmd0aCA+PSAwKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fdG90YWxEYXRhTGVuZ3RoO1xuXHRcdH1cblxuXHRcdC8vIGlmIGVtcHR5IGRhdGFzZXRcblx0XHRpZiAodGhpcy5kYXRhICYmIHRoaXMuZGF0YS5sZW5ndGggPT09IDEgJiYgdGhpcy5kYXRhWzBdLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZGF0YS5sZW5ndGg7XG5cdH1cblxuXHQvKipcblx0ICogVXNlZCBpbiBgZGF0YWBcblx0ICovXG5cdHByb3RlY3RlZCBfZGF0YTogVGFibGVJdGVtW11bXSA9IFtbXV07XG5cblx0LyoqXG5cdCAqIFRoZSBudW1iZXIgb2YgbW9kZWxzIGluc3RhbnRpYXRlZCwgdGhpcyBpcyB0byBtYWtlIHN1cmUgZWFjaCB0YWJsZSBoYXMgYSBkaWZmZXJlbnRcblx0ICogbW9kZWwgY291bnQgZm9yIHVuaXF1ZSBpZCBnZW5lcmF0aW9uLlxuXHQgKi9cblx0cHJvdGVjdGVkIHRhYmxlTW9kZWxDb3VudCA9IDA7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy50YWJsZU1vZGVsQ291bnQgPSBUYWJsZU1vZGVsLkNPVU5UKys7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBhbiBpZCBmb3IgdGhlIGdpdmVuIGNvbHVtblxuXHQgKlxuXHQgKiBAcGFyYW0gY29sdW1uIHRoZSBjb2x1bW4gdG8gZ2VuZXJhdGUgYW4gaWQgZm9yXG5cdCAqIEBwYXJhbSByb3cgdGhlIHJvdyBvZiB0aGUgaGVhZGVyIHRvIGdlbmVyYXRlIGFuIGlkIGZvclxuXHQgKi9cblx0Z2V0SWQoY29sdW1uOiBIZWFkZXJUeXBlLCByb3cgPSAwKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gYHRhYmxlLWhlYWRlci0ke3Jvd30tJHtjb2x1bW59LSR7dGhpcy50YWJsZU1vZGVsQ291bnR9YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBpZCBvZiB0aGUgaGVhZGVyLiBVc2VkIHRvIGxpbmsgdGhlIGNlbGxzIHdpdGggaGVhZGVycyAob3IgaGVhZGVycyB3aXRoIGhlYWRlcnMpXG5cdCAqXG5cdCAqIEBwYXJhbSBjb2x1bW4gdGhlIGNvbHVtbiB0byBzdGFydCBnZXR0aW5nIGhlYWRlcnMgZm9yXG5cdCAqIEBwYXJhbSBjb2xTcGFuIHRoZSBudW1iZXIgb2YgY29sdW1ucyB0byBnZXQgaGVhZGVycyBmb3IgKGRlZmF1bHRzIHRvIDEpXG5cdCAqL1xuXHRnZXRIZWFkZXJJZChjb2x1bW46IEhlYWRlclR5cGUsIGNvbFNwYW4gPSAxKTogc3RyaW5nIHtcblx0XHRpZiAoY29sdW1uID09PSBcInNlbGVjdFwiIHx8IGNvbHVtbiA9PT0gXCJleHBhbmRcIikge1xuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0SWQoY29sdW1uKTtcblx0XHR9XG5cblx0XHRsZXQgaWRzID0gW107XG5cdFx0Zm9yIChsZXQgaSA9IGNvbHVtbjsgaSA+PSAwOyBpLS0pIHtcblx0XHRcdGlmICh0aGlzLmhlYWRlcltpXSkge1xuXHRcdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8IGNvbFNwYW47IGorKykge1xuXHRcdFx0XHRcdGlkcy5wdXNoKHRoaXMuZ2V0SWQoaSArIGopKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gaWRzLmpvaW4oXCIgXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZpbmRzIGNsb3Nlc3QgaGVhZGVyIGJ5IHRyeWluZyB0aGUgYGNvbHVtbmAgYW5kIHRoZW4gd29ya2luZyBpdHMgd2F5IHRvIHRoZSBsZWZ0XG5cdCAqXG5cdCAqIEBwYXJhbSBjb2x1bW4gdGhlIHRhcmdldCBjb2x1bW5cblx0ICovXG5cdGdldEhlYWRlcihjb2x1bW46IG51bWJlcik6IFRhYmxlSGVhZGVySXRlbSB7XG5cdFx0aWYgKCF0aGlzLmhlYWRlcikge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0Zm9yIChsZXQgaSA9IGNvbHVtbjsgaSA+PSAwOyBpLS0pIHtcblx0XHRcdGNvbnN0IGhlYWRlckNlbGwgPSB0aGlzLmhlYWRlcltpXTtcblx0XHRcdGlmIChoZWFkZXJDZWxsKSB7XG5cdFx0XHRcdHJldHVybiBoZWFkZXJDZWxsO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgaG93IG1hbnkgcm93cyBpcyBjdXJyZW50bHkgc2VsZWN0ZWRcblx0ICovXG5cdHNlbGVjdGVkUm93c0NvdW50KCk6IG51bWJlciB7XG5cdFx0bGV0IGNvdW50ID0gMDtcblx0XHRpZiAodGhpcy5yb3dzU2VsZWN0ZWQpIHtcblx0XHRcdHRoaXMucm93c1NlbGVjdGVkLmZvckVhY2gocm93U2VsZWN0ZWQgPT4ge1xuXHRcdFx0XHRpZiAocm93U2VsZWN0ZWQpIHtcblx0XHRcdFx0XHRjb3VudCsrO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIGNvdW50O1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgaG93IG1hbnkgcm93cyBpcyBjdXJyZW50bHkgZXhwYW5kZWRcblx0ICovXG5cdGV4cGFuZGVkUm93c0NvdW50KCk6IG51bWJlciB7XG5cdFx0bGV0IGNvdW50ID0gMDtcblx0XHRpZiAodGhpcy5yb3dzRXhwYW5kZWQpIHtcblx0XHRcdHRoaXMucm93c0V4cGFuZGVkLmZvckVhY2gocm93RXhwYW5kZWQgPT4ge1xuXHRcdFx0XHRpZiAocm93RXhwYW5kZWQpIHtcblx0XHRcdFx0XHRjb3VudCsrO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIGNvdW50O1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYGluZGV4YHRoIHJvdyBvZiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIE5lZ2F0aXZlIGluZGV4IHN0YXJ0cyBmcm9tIHRoZSBlbmQuIC0xIGJlaW5nIHRoZSBsYXN0IGVsZW1lbnQuXG5cdCAqXG5cdCAqIEBwYXJhbSBpbmRleFxuXHQgKi9cblx0cm93KGluZGV4OiBudW1iZXIpOiBUYWJsZUl0ZW1bXSB7XG5cdFx0cmV0dXJuIHRoaXMuZGF0YVt0aGlzLnJlYWxSb3dJbmRleChpbmRleCldO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZHMgYSByb3cgdG8gdGhlIGBpbmRleGB0aCByb3cgb3IgYXBwZW5kcyB0byB0YWJsZSBpZiBpbmRleCBub3QgcHJvdmlkZWQuXG5cdCAqXG5cdCAqIElmIHJvdyBpcyBzaG9ydGVyIHRoYW4gb3RoZXIgcm93cyBvciBub3QgcHJvdmlkZWQsIGl0IHdpbGwgYmUgcGFkZGVkIHdpdGhcblx0ICogZW1wdHkgYFRhYmxlSXRlbWAgZWxlbWVudHMuXG5cdCAqXG5cdCAqIElmIHJvdyBpcyBsb25nZXIgdGhhbiBvdGhlciByb3dzLCBvdGhlcnMgd2lsbCBiZSBleHRlbmRlZCB0byBtYXRjaCBzbyBubyBkYXRhIGlzIGxvc3QuXG5cdCAqXG5cdCAqIElmIGNhbGxlZCBvbiBhbiBlbXB0eSB0YWJsZSB3aXRoIG5vIHBhcmFtZXRlcnMsIGl0IGNyZWF0ZXMgYSAxeDEgdGFibGUuXG5cdCAqXG5cdCAqIE5lZ2F0aXZlIGluZGV4IHN0YXJ0cyBmcm9tIHRoZSBlbmQuIC0xIGJlaW5nIHRoZSBsYXN0IGVsZW1lbnQuXG5cdCAqXG5cdCAqIEBwYXJhbSBbcm93XVxuXHQgKiBAcGFyYW0gW2luZGV4XVxuXHQgKi9cblx0YWRkUm93KHJvdz86IFRhYmxlSXRlbVtdLCBpbmRleD86IG51bWJlcikge1xuXHRcdC8vIGlmIHRhYmxlIGVtcHR5IGNyZWF0ZSB0YWJsZSB3aXRoIHJvd1xuXHRcdGlmICghdGhpcy5kYXRhIHx8IHRoaXMuZGF0YS5sZW5ndGggPT09IDAgfHwgdGhpcy5kYXRhWzBdLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0bGV0IG5ld0RhdGEgPSBuZXcgQXJyYXk8QXJyYXk8VGFibGVJdGVtPj4oKTtcblx0XHRcdG5ld0RhdGEucHVzaChyb3cgPyByb3cgOiBbbmV3IFRhYmxlSXRlbSgpXSk7ICAvLyByb3cgb3Igb25lIGVtcHR5IG9uZSBjb2x1bW4gcm93XG5cdFx0XHR0aGlzLmRhdGEgPSBuZXdEYXRhO1xuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0bGV0IHJlYWxSb3cgPSByb3c7XG5cdFx0Y29uc3QgY29sdW1uQ291bnQgPSB0aGlzLmRhdGFbMF0ubGVuZ3RoO1xuXG5cdFx0aWYgKHJvdyA9PSBudWxsKSB7XG5cdFx0XHRyZWFsUm93ID0gbmV3IEFycmF5PFRhYmxlSXRlbT4oKTtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY29sdW1uQ291bnQ7IGkrKykge1xuXHRcdFx0XHRyZWFsUm93LnB1c2gobmV3IFRhYmxlSXRlbSgpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAocmVhbFJvdy5sZW5ndGggPCBjb2x1bW5Db3VudCkge1xuXHRcdFx0Ly8gZXh0ZW5kIHRoZSBsZW5ndGggb2YgcmVhbFJvd1xuXHRcdFx0Y29uc3QgZGlmZmVyZW5jZSA9IGNvbHVtbkNvdW50IC0gcmVhbFJvdy5sZW5ndGg7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGRpZmZlcmVuY2U7IGkrKykge1xuXHRcdFx0XHRyZWFsUm93LnB1c2gobmV3IFRhYmxlSXRlbSgpKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHJlYWxSb3cubGVuZ3RoID4gY29sdW1uQ291bnQpIHtcblx0XHRcdC8vIGV4dGVuZCB0aGUgbGVuZ3RoIG9mIGhlYWRlclxuXHRcdFx0bGV0IGRpZmZlcmVuY2UgPSByZWFsUm93Lmxlbmd0aCAtIHRoaXMuaGVhZGVyLmxlbmd0aDtcblx0XHRcdGZvciAobGV0IGogPSAwOyBqIDwgZGlmZmVyZW5jZTsgaisrKSB7XG5cdFx0XHRcdHRoaXMuaGVhZGVyLnB1c2gobmV3IFRhYmxlSGVhZGVySXRlbSgpKTtcblx0XHRcdH1cblx0XHRcdC8vIGV4dGVuZCB0aGUgbGVuZ3RoIG9mIGV2ZXJ5IG90aGVyIHJvd1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0bGV0IGN1cnJlbnRSb3cgPSB0aGlzLmRhdGFbaV07XG5cdFx0XHRcdGRpZmZlcmVuY2UgPSByZWFsUm93Lmxlbmd0aCAtIGN1cnJlbnRSb3cubGVuZ3RoO1xuXHRcdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8IGRpZmZlcmVuY2U7IGorKykge1xuXHRcdFx0XHRcdGN1cnJlbnRSb3cucHVzaChuZXcgVGFibGVJdGVtKCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGluZGV4ID09IG51bGwpIHtcblx0XHRcdHRoaXMuZGF0YS5wdXNoKHJlYWxSb3cpO1xuXG5cdFx0XHQvLyB1cGRhdGUgcm93c1NlbGVjdGVkIHByb3BlcnR5IGZvciBsZW5ndGhcblx0XHRcdHRoaXMucm93c1NlbGVjdGVkLnB1c2goZmFsc2UpO1xuXG5cdFx0XHQvLyB1cGRhdGUgcm93c0V4cGFuZGVkIHByb3BlcnR5IGZvciBsZW5ndGhcblx0XHRcdHRoaXMucm93c0V4cGFuZGVkLnB1c2goZmFsc2UpO1xuXG5cdFx0XHQvLyB1cGRhdGUgcm93c0NvbnRleHQgcHJvcGVydHkgZm9yIGxlbmd0aFxuXHRcdFx0dGhpcy5yb3dzQ29udGV4dC5wdXNoKHVuZGVmaW5lZCk7XG5cblx0XHRcdC8vIHVwZGF0ZSByb3dzQ2xhc3MgcHJvcGVydHkgZm9yIGxlbmd0aFxuXHRcdFx0dGhpcy5yb3dzQ2xhc3MucHVzaCh1bmRlZmluZWQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCByaSA9IHRoaXMucmVhbFJvd0luZGV4KGluZGV4KTtcblx0XHRcdHRoaXMuZGF0YS5zcGxpY2UocmksIDAsIHJlYWxSb3cpO1xuXG5cdFx0XHQvLyB1cGRhdGUgcm93c1NlbGVjdGVkIHByb3BlcnR5IGZvciBsZW5ndGhcblx0XHRcdHRoaXMucm93c1NlbGVjdGVkLnNwbGljZShyaSwgMCwgZmFsc2UpO1xuXG5cdFx0XHQvLyB1cGRhdGUgcm93c0V4cGFuZGVkIHByb3BlcnR5IGZvciBsZW5ndGhcblx0XHRcdHRoaXMucm93c0V4cGFuZGVkLnNwbGljZShyaSwgMCwgZmFsc2UpO1xuXG5cdFx0XHQvLyB1cGRhdGUgcm93c0NvbnRleHQgcHJvcGVydHkgZm9yIGxlbmd0aFxuXHRcdFx0dGhpcy5yb3dzQ29udGV4dC5zcGxpY2UocmksIDAsIHVuZGVmaW5lZCk7XG5cblx0XHRcdC8vIHVwZGF0ZSByb3dzQ2xhc3MgcHJvcGVydHkgZm9yIGxlbmd0aFxuXHRcdFx0dGhpcy5yb3dzQ2xhc3Muc3BsaWNlKHJpLCAwLCB1bmRlZmluZWQpO1xuXHRcdH1cblxuXHRcdHRoaXMuZGF0YUNoYW5nZS5lbWl0KCk7XG5cdH1cblxuXHQvKipcblx0ICogRGVsZXRlcyBgaW5kZXhgdGggcm93LlxuXHQgKlxuXHQgKiBOZWdhdGl2ZSBpbmRleCBzdGFydHMgZnJvbSB0aGUgZW5kLiAtMSBiZWluZyB0aGUgbGFzdCBlbGVtZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0gaW5kZXhcblx0ICovXG5cdGRlbGV0ZVJvdyhpbmRleDogbnVtYmVyKSB7XG5cdFx0Y29uc3QgcnJpID0gdGhpcy5yZWFsUm93SW5kZXgoaW5kZXgpO1xuXHRcdHRoaXMuZGF0YS5zcGxpY2UocnJpLCAxKTtcblx0XHR0aGlzLnJvd3NTZWxlY3RlZC5zcGxpY2UocnJpLCAxKTtcblx0XHR0aGlzLnJvd3NFeHBhbmRlZC5zcGxpY2UocnJpLCAxKTtcblx0XHR0aGlzLnJvd3NDb250ZXh0LnNwbGljZShycmksIDEpO1xuXHRcdHRoaXMucm93c0NsYXNzLnNwbGljZShycmksIDEpO1xuXG5cdFx0dGhpcy5kYXRhQ2hhbmdlLmVtaXQoKTtcblx0fVxuXG5cdGhhc0V4cGFuZGFibGVSb3dzKCkge1xuXHRcdHJldHVybiB0aGlzLmRhdGEuc29tZShkYXRhID0+IGRhdGEuc29tZShkID0+IGQgJiYgZC5leHBhbmRlZERhdGEpKTsgLy8gY2hlY2tpbmcgZm9yIHNvbWUgaW4gMkQgYXJyYXlcblx0fVxuXG5cdGlzUm93RXhwYW5kYWJsZShpbmRleDogbnVtYmVyKSB7XG5cdFx0cmV0dXJuIHRoaXMuZGF0YVtpbmRleF0uc29tZShkID0+IGQgJiYgZC5leHBhbmRlZERhdGEpO1xuXHR9XG5cblx0aXNSb3dFeHBhbmRlZChpbmRleDogbnVtYmVyKSB7XG5cdFx0cmV0dXJuIHRoaXMucm93c0V4cGFuZGVkW2luZGV4XTtcblx0fVxuXG5cdGdldFJvd0NvbnRleHQoaW5kZXg6IG51bWJlcikge1xuXHRcdHJldHVybiB0aGlzLnJvd3NDb250ZXh0W2luZGV4XTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGBpbmRleGB0aCBjb2x1bW4gb2YgdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBOZWdhdGl2ZSBpbmRleCBzdGFydHMgZnJvbSB0aGUgZW5kLiAtMSBiZWluZyB0aGUgbGFzdCBlbGVtZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0gaW5kZXhcblx0ICovXG5cdGNvbHVtbihpbmRleDogbnVtYmVyKTogVGFibGVJdGVtW10ge1xuXHRcdGxldCBjb2x1bW4gPSBuZXcgQXJyYXk8VGFibGVJdGVtPigpO1xuXHRcdGNvbnN0IHJpID0gdGhpcy5yZWFsQ29sdW1uSW5kZXgoaW5kZXgpO1xuXHRcdGNvbnN0IHJjID0gdGhpcy5kYXRhLmxlbmd0aDtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcmM7IGkrKykge1xuXHRcdFx0Y29uc3Qgcm93ID0gdGhpcy5kYXRhW2ldO1xuXHRcdFx0Y29sdW1uLnB1c2gocm93W3JpXSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbHVtbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIGEgY29sdW1uIHRvIHRoZSBgaW5kZXhgdGggY29sdW1uIG9yIGFwcGVuZHMgdG8gdGFibGUgaWYgaW5kZXggbm90IHByb3ZpZGVkLlxuXHQgKlxuXHQgKiBJZiBjb2x1bW4gaXMgc2hvcnRlciB0aGFuIG90aGVyIGNvbHVtbnMgb3Igbm90IHByb3ZpZGVkLCBpdCB3aWxsIGJlIHBhZGRlZCB3aXRoXG5cdCAqIGVtcHR5IGBUYWJsZUl0ZW1gIGVsZW1lbnRzLlxuXHQgKlxuXHQgKiBJZiBjb2x1bW4gaXMgbG9uZ2VyIHRoYW4gb3RoZXIgY29sdW1ucywgb3RoZXJzIHdpbGwgYmUgZXh0ZW5kZWQgdG8gbWF0Y2ggc28gbm8gZGF0YSBpcyBsb3N0LlxuXHQgKlxuXHQgKiBJZiBjYWxsZWQgb24gYW4gZW1wdHkgdGFibGUgd2l0aCBubyBwYXJhbWV0ZXJzLCBpdCBjcmVhdGVzIGEgMXgxIHRhYmxlLlxuXHQgKlxuXHQgKiBOZWdhdGl2ZSBpbmRleCBzdGFydHMgZnJvbSB0aGUgZW5kLiAtMSBiZWluZyB0aGUgbGFzdCBlbGVtZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0gW2NvbHVtbl1cblx0ICogQHBhcmFtIFtpbmRleF1cblx0ICovXG5cdGFkZENvbHVtbihjb2x1bW4/OiBUYWJsZUl0ZW1bXSwgaW5kZXg/OiBudW1iZXIpIHtcblx0XHQvLyBpZiB0YWJsZSBlbXB0eSBjcmVhdGUgdGFibGUgd2l0aCByb3dcblx0XHRpZiAoIXRoaXMuZGF0YSB8fCB0aGlzLmRhdGEubGVuZ3RoID09PSAwIHx8IHRoaXMuZGF0YVswXS5sZW5ndGggPT09IDApIHtcblx0XHRcdGxldCBuZXdEYXRhID0gbmV3IEFycmF5PEFycmF5PFRhYmxlSXRlbT4+KCk7XG5cdFx0XHRpZiAoY29sdW1uID09IG51bGwpIHtcblx0XHRcdFx0bmV3RGF0YS5wdXNoKFtuZXcgVGFibGVJdGVtKCldKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY29sdW1uLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0bGV0IGl0ZW0gPSBjb2x1bW5baV07XG5cdFx0XHRcdFx0bmV3RGF0YS5wdXNoKFtpdGVtXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRoaXMuZGF0YSA9IG5ld0RhdGE7XG5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRsZXQgcmMgPSB0aGlzLmRhdGEubGVuZ3RoOyAgLy8gcm93IGNvdW50XG5cdFx0bGV0IGNpID0gdGhpcy5yZWFsQ29sdW1uSW5kZXgoaW5kZXgpO1xuXG5cdFx0Ly8gYXBwZW5kIG1pc3Npbmcgcm93c1xuXHRcdGZvciAobGV0IGkgPSAwOyBjb2x1bW4gIT0gbnVsbCAmJiBpIDwgY29sdW1uLmxlbmd0aCAtIHJjOyBpKyspIHtcblx0XHRcdHRoaXMuYWRkUm93KCk7XG5cdFx0fVxuXHRcdHJjID0gdGhpcy5kYXRhLmxlbmd0aDtcblx0XHRpZiAoaW5kZXggPT0gbnVsbCkge1xuXHRcdFx0Ly8gYXBwZW5kIHRvIGVuZFxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCByYzsgaSsrKSB7XG5cdFx0XHRcdGxldCByb3cgPSB0aGlzLmRhdGFbaV07XG5cdFx0XHRcdHJvdy5wdXNoKGNvbHVtbiA9PSBudWxsIHx8IGNvbHVtbltpXSA9PSBudWxsID8gbmV3IFRhYmxlSXRlbSgpIDogY29sdW1uW2ldKTtcblx0XHRcdH1cblx0XHRcdC8vIHVwZGF0ZSBoZWFkZXIgaWYgbm90IGFscmVhZHkgc2V0IGJ5IHVzZXJcblx0XHRcdGlmICh0aGlzLmhlYWRlci5sZW5ndGggPCB0aGlzLmRhdGFbMF0ubGVuZ3RoKSB7XG5cdFx0XHRcdHRoaXMuaGVhZGVyLnB1c2gobmV3IFRhYmxlSGVhZGVySXRlbSgpKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKGluZGV4ID49IHRoaXMuZGF0YVswXS5sZW5ndGgpIHtcblx0XHRcdFx0Ly8gaWYgdHJ5aW5nIHRvIGFwcGVuZFxuXHRcdFx0XHRjaSsrO1xuXHRcdFx0fVxuXHRcdFx0Ly8gaW5zZXJ0XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHJjOyBpKyspIHtcblx0XHRcdFx0bGV0IHJvdyA9IHRoaXMuZGF0YVtpXTtcblx0XHRcdFx0cm93LnNwbGljZShjaSwgMCwgY29sdW1uID09IG51bGwgfHwgY29sdW1uW2ldID09IG51bGwgPyBuZXcgVGFibGVJdGVtKCkgOiBjb2x1bW5baV0pO1xuXHRcdFx0fVxuXHRcdFx0Ly8gdXBkYXRlIGhlYWRlciBpZiBub3QgYWxyZWFkeSBzZXQgYnkgdXNlclxuXHRcdFx0aWYgKHRoaXMuaGVhZGVyLmxlbmd0aCA8IHRoaXMuZGF0YVswXS5sZW5ndGgpIHtcblx0XHRcdFx0dGhpcy5oZWFkZXIuc3BsaWNlKGNpLCAwLCBuZXcgVGFibGVIZWFkZXJJdGVtKCkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMuZGF0YUNoYW5nZS5lbWl0KCk7XG5cdH1cblxuXHQvKipcblx0ICogRGVsZXRlcyBgaW5kZXhgdGggY29sdW1uLlxuXHQgKlxuXHQgKiBOZWdhdGl2ZSBpbmRleCBzdGFydHMgZnJvbSB0aGUgZW5kLiAtMSBiZWluZyB0aGUgbGFzdCBlbGVtZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0gaW5kZXhcblx0ICovXG5cdGRlbGV0ZUNvbHVtbihpbmRleDogbnVtYmVyKSB7XG5cdFx0Y29uc3QgcmNpID0gdGhpcy5yZWFsQ29sdW1uSW5kZXgoaW5kZXgpO1xuXHRcdGNvbnN0IHJvd0NvdW50ID0gdGhpcy5kYXRhLmxlbmd0aDtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHJvd0NvdW50OyBpKyspIHtcblx0XHRcdHRoaXMuZGF0YVtpXS5zcGxpY2UocmNpLCAxKTtcblx0XHR9XG5cdFx0Ly8gdXBkYXRlIGhlYWRlciBpZiBub3QgYWxyZWFkeSBzZXQgYnkgdXNlclxuXHRcdGlmICh0aGlzLmhlYWRlci5sZW5ndGggPiB0aGlzLmRhdGFbMF0ubGVuZ3RoKSB7XG5cdFx0XHR0aGlzLmhlYWRlci5zcGxpY2UocmNpLCAxKTtcblx0XHR9XG5cblx0XHR0aGlzLmRhdGFDaGFuZ2UuZW1pdCgpO1xuXHR9XG5cblx0bW92ZUNvbHVtbihpbmRleEZyb206IG51bWJlciwgaW5kZXhUbzogbnVtYmVyKSB7XG5cdFx0Y29uc3QgaGVhZGVyRnJvbSA9IHRoaXMuaGVhZGVyW2luZGV4RnJvbV07XG5cblx0XHR0aGlzLmFkZENvbHVtbih0aGlzLmNvbHVtbihpbmRleEZyb20pLCBpbmRleFRvKTtcblx0XHR0aGlzLmRlbGV0ZUNvbHVtbihpbmRleEZyb20gKyAoaW5kZXhUbyA8IGluZGV4RnJvbSA/IDEgOiAwKSk7XG5cblx0XHR0aGlzLmhlYWRlcltpbmRleFRvICsgKGluZGV4VG8gPiBpbmRleEZyb20gPyAtMSA6IDApXSA9IGhlYWRlckZyb207XG5cdH1cblxuXHQvKipcblx0ICogU29ydHMgdGhlIGRhdGEgY3VycmVudGx5IHByZXNlbnQgaW4gdGhlIG1vZGVsIGJhc2VkIG9uIGBjb21wYXJlKClgXG5cdCAqXG5cdCAqIERpcmVjdGlvbiBpcyBzZXQgYnkgYGFzY2VuZGluZ2AgYW5kIGBkZXNjZW5kaW5nYCBwcm9wZXJ0aWVzIG9mIGBUYWJsZUhlYWRlckl0ZW1gXG5cdCAqIGluIGBpbmRleGB0aCBjb2x1bW4uXG5cdCAqXG5cdCAqIEBwYXJhbSBpbmRleCBUaGUgY29sdW1uIGJhc2VkIG9uIHdoaWNoIGl0J3Mgc29ydGluZ1xuXHQgKi9cblx0c29ydChpbmRleDogbnVtYmVyKSB7XG5cdFx0dGhpcy5wdXNoUm93U3RhdGVUb01vZGVsRGF0YSgpO1xuXHRcdHRoaXMuZGF0YS5zb3J0KChhLCBiKSA9PiAodGhpcy5oZWFkZXJbaW5kZXhdLmRlc2NlbmRpbmcgPyAtMSA6IDEpICogdGhpcy5oZWFkZXJbaW5kZXhdLmNvbXBhcmUoYVtpbmRleF0sIGJbaW5kZXhdKSk7XG5cdFx0dGhpcy5wb3BSb3dTdGF0ZUZyb21Nb2RlbERhdGEoKTtcblx0XHR0aGlzLmhlYWRlci5mb3JFYWNoKGNvbHVtbiA9PiBjb2x1bW4uc29ydGVkID0gZmFsc2UpO1xuXHRcdHRoaXMuaGVhZGVyW2luZGV4XS5zb3J0ZWQgPSB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFwcGVuZHMgYHJvd3NTZWxlY3RlZGAgYW5kIGByb3dzRXhwYW5kZWRgIGluZm8gdG8gbW9kZWwgZGF0YS5cblx0ICpcblx0ICogV2hlbiBzb3J0aW5nIHJvd3MsIGRvIHRoaXMgZmlyc3Qgc28gaW5mb3JtYXRpb24gYWJvdXQgcm93IHNlbGVjdGlvblxuXHQgKiBnZXRzIHNvcnRlZCB3aXRoIHRoZSBvdGhlciByb3cgaW5mby5cblx0ICpcblx0ICogQ2FsbCBgcG9wUm93U2VsZWN0aW9uRnJvbU1vZGVsRGF0YSgpYCBhZnRlciBzb3J0aW5nIHRvIG1ha2UgZXZlcnl0aGluZ1xuXHQgKiByaWdodCB3aXRoIHRoZSB3b3JsZCBhZ2Fpbi5cblx0ICovXG5cdHB1c2hSb3dTdGF0ZVRvTW9kZWxEYXRhKCkge1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5kYXRhLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCByb3dTZWxlY3RlZE1hcmsgPSBuZXcgVGFibGVJdGVtKCk7XG5cdFx0XHRyb3dTZWxlY3RlZE1hcmsuZGF0YSA9IHRoaXMucm93c1NlbGVjdGVkW2ldO1xuXHRcdFx0dGhpcy5kYXRhW2ldLnB1c2gocm93U2VsZWN0ZWRNYXJrKTtcblxuXHRcdFx0Y29uc3Qgcm93RXhwYW5kZWRNYXJrID0gbmV3IFRhYmxlSXRlbSgpO1xuXHRcdFx0cm93RXhwYW5kZWRNYXJrLmRhdGEgPSB0aGlzLnJvd3NFeHBhbmRlZFtpXTtcblx0XHRcdHRoaXMuZGF0YVtpXS5wdXNoKHJvd0V4cGFuZGVkTWFyayk7XG5cblx0XHRcdGNvbnN0IHJvd0NvbnRleHQgPSBuZXcgVGFibGVJdGVtKCk7XG5cdFx0XHRyb3dDb250ZXh0LmRhdGEgPSB0aGlzLnJvd3NDb250ZXh0W2ldO1xuXHRcdFx0dGhpcy5kYXRhW2ldLnB1c2gocm93Q29udGV4dCk7XG5cblx0XHRcdGNvbnN0IHJvd0NsYXNzID0gbmV3IFRhYmxlSXRlbSgpO1xuXHRcdFx0cm93Q2xhc3MuZGF0YSA9IHRoaXMucm93c0NsYXNzW2ldO1xuXHRcdFx0dGhpcy5kYXRhW2ldLnB1c2gocm93Q2xhc3MpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXN0b3JlcyBgcm93c1NlbGVjdGVkYCBmcm9tIGRhdGEgcHVzaGVkIGJ5IGBwdXNoUm93U2VsZWN0aW9uVG9Nb2RlbERhdGEoKWBcblx0ICpcblx0ICogQ2FsbCBhZnRlciBzb3J0aW5nIGRhdGEgKGlmIHlvdSBwcmV2aW91c2x5IHB1c2hlZCB0byBtYWludGFpbiBzZWxlY3Rpb24gb3JkZXIpXG5cdCAqIHRvIG1ha2UgZXZlcnl0aGluZyByaWdodCB3aXRoIHRoZSB3b3JsZCBhZ2Fpbi5cblx0ICovXG5cdHBvcFJvd1N0YXRlRnJvbU1vZGVsRGF0YSgpIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZGF0YS5sZW5ndGg7IGkrKykge1xuXHRcdFx0dGhpcy5yb3dzQ2xhc3NbaV0gPSB0aGlzLmRhdGFbaV0ucG9wKCkuZGF0YTtcblx0XHRcdHRoaXMucm93c0NvbnRleHRbaV0gPSB0aGlzLmRhdGFbaV0ucG9wKCkuZGF0YTtcblx0XHRcdHRoaXMucm93c0V4cGFuZGVkW2ldID0gISF0aGlzLmRhdGFbaV0ucG9wKCkuZGF0YTtcblx0XHRcdHRoaXMucm93c1NlbGVjdGVkW2ldID0gISF0aGlzLmRhdGFbaV0ucG9wKCkuZGF0YTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHJvdyBpcyBmaWx0ZXJlZCBvdXQuXG5cdCAqXG5cdCAqIEBwYXJhbSBpbmRleFxuXHQgKiBAcmV0dXJucyB0cnVlIGlmIGFueSBvZiB0aGUgZmlsdGVycyBpbiBoZWFkZXIgZmlsdGVycyBvdXQgdGhlIGBpbmRleGB0aCByb3dcblx0ICovXG5cdGlzUm93RmlsdGVyZWQoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHJlYWxJbmRleCA9IHRoaXMucmVhbFJvd0luZGV4KGluZGV4KTtcblx0XHRyZXR1cm4gdGhpcy5oZWFkZXIuc29tZSgoaXRlbSwgaSkgPT4gaXRlbSAmJiBpdGVtLmZpbHRlcih0aGlzLnJvdyhyZWFsSW5kZXgpW2ldKSk7XG5cdH1cblxuXHQvKipcblx0ICogU2VsZWN0L2Rlc2VsZWN0IGBpbmRleGB0aCByb3cgYmFzZWQgb24gdmFsdWVcblx0ICpcblx0ICogQHBhcmFtIGluZGV4IGluZGV4IG9mIHRoZSByb3cgdG8gc2VsZWN0XG5cdCAqIEBwYXJhbSB2YWx1ZSBzdGF0ZSB0byBzZXQgdGhlIHJvdyB0by4gRGVmYXVsdHMgdG8gYHRydWVgXG5cdCAqL1xuXHRzZWxlY3RSb3coaW5kZXg6IG51bWJlciwgdmFsdWUgPSB0cnVlKSB7XG5cdFx0aWYgKHRoaXMuaXNSb3dEaXNhYmxlZChpbmRleCkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5yb3dzU2VsZWN0ZWRbaW5kZXhdID0gdmFsdWU7XG5cdFx0dGhpcy5yb3dzU2VsZWN0ZWRDaGFuZ2UuZW1pdChpbmRleCk7XG5cdH1cblxuXHQvKipcblx0ICogU2VsZWN0cyBvciBkZXNlbGVjdHMgYWxsIHJvd3MgaW4gdGhlIG1vZGVsXG5cdCAqXG5cdCAqIEBwYXJhbSB2YWx1ZSBzdGF0ZSB0byBzZXQgYWxsIHJvd3MgdG8uIERlZmF1bHRzIHRvIGB0cnVlYFxuXHQgKi9cblx0c2VsZWN0QWxsKHZhbHVlID0gdHJ1ZSkge1xuXHRcdGlmICh0aGlzLmRhdGEubGVuZ3RoID49IDEgJiYgdGhpcy5kYXRhWzBdLmxlbmd0aCA+PSAxKSB7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93c1NlbGVjdGVkLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdHRoaXMuc2VsZWN0Um93KGksIHZhbHVlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5zZWxlY3RBbGxDaGFuZ2UubmV4dCh2YWx1ZSk7XG5cdH1cblxuXHRpc1Jvd1NlbGVjdGVkKGluZGV4OiBudW1iZXIpIHtcblx0XHRyZXR1cm4gdGhpcy5yb3dzU2VsZWN0ZWRbaW5kZXhdO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiByb3cgaXMgZGlzYWJsZWQgb3Igbm90LlxuXHQgKi9cblx0aXNSb3dEaXNhYmxlZChpbmRleDogbnVtYmVyKSB7XG5cdFx0Y29uc3Qgcm93ID0gdGhpcy5kYXRhW2luZGV4XSBhcyBUYWJsZVJvdztcblx0XHRyZXR1cm4gISFyb3cuZGlzYWJsZWQ7XG5cdH1cblxuXHQvKipcblx0ICogRXhwYW5kcy9Db2xsYXBzZXMgYGluZGV4YHRoIHJvdyBiYXNlZCBvbiB2YWx1ZVxuXHQgKlxuXHQgKiBAcGFyYW0gaW5kZXggaW5kZXggb2YgdGhlIHJvdyB0byBleHBhbmQgb3IgY29sbGFwc2Vcblx0ICogQHBhcmFtIHZhbHVlIGV4cGFuZGVkIHN0YXRlIG9mIHRoZSByb3cuIGB0cnVlYCBpcyBleHBhbmRlZCBhbmQgYGZhbHNlYCBpcyBjb2xsYXBzZWRcblx0ICovXG5cdGV4cGFuZFJvdyhpbmRleDogbnVtYmVyLCB2YWx1ZSA9IHRydWUpIHtcblx0XHR0aGlzLnJvd3NFeHBhbmRlZFtpbmRleF0gPSB2YWx1ZTtcblx0XHR0aGlzLnJvd3NFeHBhbmRlZENoYW5nZS5lbWl0KGluZGV4KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSB0cnVlIGluZGV4IG9mIGEgcm93IGJhc2VkIG9uIGl0J3MgcmVsYXRpdmUgcG9zaXRpb24uXG5cdCAqIExpa2UgaW4gUHl0aG9uLCBwb3NpdGl2ZSBudW1iZXJzIHN0YXJ0IGZyb20gdGhlIHRvcCBhbmRcblx0ICogbmVnYXRpdmUgbnVtYmVycyBzdGFydCBmcm9tIHRoZSBib3R0b20uXG5cdCAqXG5cdCAqIEBwYXJhbSBpbmRleFxuXHQgKi9cblx0cHJvdGVjdGVkIHJlYWxSb3dJbmRleChpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5yZWFsSW5kZXgoaW5kZXgsIHRoaXMuZGF0YS5sZW5ndGgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHRydWUgaW5kZXggb2YgYSBjb2x1bW4gYmFzZWQgb24gaXQncyByZWxhdGl2ZSBwb3NpdGlvbi5cblx0ICogTGlrZSBpbiBQeXRob24sIHBvc2l0aXZlIG51bWJlcnMgc3RhcnQgZnJvbSB0aGUgdG9wIGFuZFxuXHQgKiBuZWdhdGl2ZSBudW1iZXJzIHN0YXJ0IGZyb20gdGhlIGJvdHRvbS5cblx0ICpcblx0ICogQHBhcmFtIGluZGV4XG5cdCAqL1xuXHRwcm90ZWN0ZWQgcmVhbENvbHVtbkluZGV4KGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLnJlYWxJbmRleChpbmRleCwgdGhpcy5kYXRhWzBdLmxlbmd0aCk7XG5cdH1cblxuXHQvKipcblx0ICogR2VuZXJpYyBmdW5jdGlvbiB0byBjYWxjdWxhdGUgdGhlIHJlYWwgaW5kZXggb2Ygc29tZXRoaW5nLlxuXHQgKiBVc2VkIGJ5IGByZWFsUm93SW5kZXgoKWAgYW5kIGByZWFsQ29sdW1uSW5kZXgoKWBcblx0ICpcblx0ICogQHBhcmFtIGluZGV4XG5cdCAqIEBwYXJhbSBsZW5ndGhcblx0ICovXG5cdHByb3RlY3RlZCByZWFsSW5kZXgoaW5kZXg6IG51bWJlciwgbGVuZ3RoOiBudW1iZXIpOiBudW1iZXIge1xuXHRcdGlmIChpbmRleCA9PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gbGVuZ3RoIC0gMTtcblx0XHR9IGVsc2UgaWYgKGluZGV4ID49IDApIHtcblx0XHRcdHJldHVybiBpbmRleCA+PSBsZW5ndGggPyBsZW5ndGggLSAxIDogaW5kZXg7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiAtaW5kZXggPj0gbGVuZ3RoID8gMCA6IGxlbmd0aCArIGluZGV4O1xuXHRcdH1cblx0fVxufVxuIl19
|
|
654
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtbW9kZWwuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGFibGUvdGFibGUtbW9kZWwuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUc3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJL0I7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSCxNQUFNLE9BQU8sVUFBVTtJQXNLdEI7UUE3SEEsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDaEMsdUJBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUNoRCx1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ2hEOzs7V0FHRztRQUNILG9CQUFlLEdBQUcsSUFBSSxPQUFPLEVBQVcsQ0FBQztRQVl6Qzs7V0FFRztRQUNILGlCQUFZLEdBQWMsRUFBRSxDQUFDO1FBRTdCOztXQUVHO1FBQ0gsaUJBQVksR0FBYyxFQUFFLENBQUM7UUFFN0I7O1dBRUc7UUFDSCxnQkFBVyxHQUFhLEVBQUUsQ0FBQztRQUUzQjs7Ozs7OztXQU9HO1FBQ0gsZ0JBQVcsR0FBYSxFQUFFLENBQUM7UUFFM0I7Ozs7OztXQU1HO1FBQ0gsY0FBUyxHQUFhLEVBQUUsQ0FBQztRQUV6Qjs7V0FFRztRQUNILFdBQU0sR0FBc0IsRUFBRSxDQUFDO1FBRS9COztXQUVHO1FBQ0gsZ0JBQVcsR0FBRyxDQUFDLENBQUM7UUFFaEI7O1dBRUc7UUFDSCxlQUFVLEdBQUcsRUFBRSxDQUFDO1FBRWhCOztXQUVHO1FBQ0gsVUFBSyxHQUFHLEtBQUssQ0FBQztRQUVkOztXQUVHO1FBQ0gsY0FBUyxHQUFHLEtBQUssQ0FB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LENBQUM7WUFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFFbkMsTUFBTSxVQUFVLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNuQyxVQUFVLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFOUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNqQyxRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFNUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNqQyxRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDNUI7SUFDRixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCx3QkFBd0I7UUFDdkIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7WUFDOUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFD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QUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ08sU0FBUyxDQUFDLEtBQWEsRUFBRSxNQUFjO1FBQ2hELElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtZQUNsQixPQUFPLE1BQU0sR0FBRyxDQUFDLENBQUM7U0FDbEI7YUFBTSxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUU7WUFDdEIsT0FBTyxLQUFLLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7U0FDNUM7YUFBTTtZQUNOLE9BQU8sQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7U0FDN0M7SUFDRixDQUFDOztBQTVzQkQ7O0dBRUc7QUFDYyxnQkFBSyxHQUFHLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5cbmltcG9ydCB7IFBhZ2luYXRpb25Nb2RlbCB9IGZyb20gXCJjYXJib24tY29tcG9uZW50cy1hbmd1bGFyL3BhZ2luYXRpb25cIjtcbmltcG9ydCB7IFRhYmxlSGVhZGVySXRlbSB9IGZyb20gXCIuL3RhYmxlLWhlYWRlci1pdGVtLmNsYXNzXCI7XG5pbXBvcnQgeyBUYWJsZUl0ZW0gfSBmcm9tIFwiLi90YWJsZS1pdGVtLmNsYXNzXCI7XG5pbXBvcnQgeyBUYWJsZVJvdyB9IGZyb20gXCIuL3RhYmxlLXJvdy5jbGFzc1wiO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XG5cbmV4cG9ydCB0eXBlIEhlYWRlclR5cGUgPSBudW1iZXIgfCBcInNlbGVjdFwiIHwgXCJleHBhbmRcIjtcblxuLyoqXG4gKiBUYWJsZU1vZGVsIHJlcHJlc2VudHMgYSBkYXRhIG1vZGVsIGZvciB0d28tZGltZW5zaW9uYWwgZGF0YS4gSXQncyB1c2VkIGZvciBhbGwgdGhpbmdzIHRhYmxlXG4gKiAodGFibGUgY29tcG9uZW50LCB0YWJsZSB0b29sYmFyLCBwYWdpbmF0aW9uLCBldGMpXG4gKlxuICogVGFibGVNb2RlbCBtYW5hZ2VzIGl0cyBpbnRlcm5hbCBkYXRhIGludGVncml0eSB2ZXJ5IHdlbGwgaWYgeW91IHVzZSB0aGUgcHJvdmlkZWQgaGVscGVyXG4gKiBmdW5jdGlvbnMgZm9yIG1vZGlmeWluZyByb3dzIGFuZCBjb2x1bW5zIGFuZCBhc3NpZ25pbmcgaGVhZGVyIGFuZCBkYXRhIGluIHRoYXQgb3JkZXIuXG4gKlxuICogSXQgYWxzbyBwcm92aWRlcyBkaXJlY3QgYWNjZXNzIHRvIHRoZSBkYXRhIHNvIHlvdSBjYW4gcmVhZCBhbmQgbW9kaWZ5IGl0LlxuICogSWYgeW91IGNoYW5nZSB0aGUgc3RydWN0dXJlIG9mIHRoZSBkYXRhIChieSBkaXJlY3RseSBwdXNoaW5nIGludG8gdGhlIGFycmF5cyBvciBvdGhlcndpc2UpLFxuICoga2VlcCBpbiBtaW5kIHRvIGtlZXAgdGhlIGRhdGEgc3RydWN0dXJlIGludGFjdC5cbiAqXG4gKiBIZWFkZXIgbGVuZ3RoIGFuZCBsZW5ndGggb2YgZXZlcnkgbGluZSBpbiB0aGUgZGF0YSBzaG91bGQgYmUgZXF1YWwuXG4gKlxuICogSWYgdGhleSBhcmUgbm90IGNvbnNpc3RlbnQsIHVuZXhwZWN0ZWQgdGhpbmdzIHdpbGwgaGFwcGVuLlxuICpcbiAqIFVzZSB0aGUgcHJvdmlkZWQgZnVuY3Rpb25zIHdoZW4gaW4gZG91YnQuXG4gKi9cbmV4cG9ydCBjbGFzcyBUYWJsZU1vZGVsIGltcGxlbWVudHMgUGFnaW5hdGlvbk1vZGVsIHtcblx0LyoqXG5cdCAqIFRoZSBudW1iZXIgb2YgbW9kZWxzIGluc3RhbnRpYXRlZCwgdXNlZCBmb3IgKGFtb25nIG90aGVyIHRoaW5ncykgdW5pcXVlIGlkIGdlbmVyYXRpb25cblx0ICovXG5cdHByb3RlY3RlZCBzdGF0aWMgQ09VTlQgPSAwO1xuXG5cdC8qKlxuXHQgKiBTZXRzIGRhdGEgb2YgdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBNYWtlIHN1cmUgYWxsIHJvd3MgYXJlIHRoZSBzYW1lIGxlbmd0aCB0byBrZWVwIHRoZSBjb2x1bW4gY291bnQgYWNjdXJhdGUuXG5cdCAqL1xuXHRzZXQgZGF0YShuZXdEYXRhOiBUYWJsZUl0ZW1bXVtdKSB7XG5cdFx0aWYgKCFuZXdEYXRhIHx8IChBcnJheS5pc0FycmF5KG5ld0RhdGEpICYmIG5ld0RhdGEubGVuZ3RoID09PSAwKSkge1xuXHRcdFx0bmV3RGF0YSA9IFtbXV07XG5cdFx0fVxuXG5cdFx0dGhpcy5fZGF0YSA9IG5ld0RhdGE7XG5cblx0XHQvLyBpbml0IHJvd3NTZWxlY3RlZFxuXHRcdHRoaXMucm93c1NlbGVjdGVkID0gbmV3IEFycmF5PGJvb2xlYW4+KHRoaXMuX2RhdGEubGVuZ3RoKS5maWxsKGZhbHNlKTtcblx0XHR0aGlzLnJvd3NFeHBhbmRlZCA9IG5ldyBBcnJheTxib29sZWFuPih0aGlzLl9kYXRhLmxlbmd0aCkuZmlsbChmYWxzZSk7XG5cdFx0Ly8gaW5pdCByb3dzIGluZGljZXNcblx0XHR0aGlzLnJvd3NJbmRpY2VzID0gWy4uLkFycmF5KHRoaXMuX2RhdGEubGVuZ3RoKS5rZXlzKCldO1xuXHRcdC8vIGluaXQgcm93c0NvbnRleHRcblx0XHR0aGlzLnJvd3NDb250ZXh0ID0gbmV3IEFycmF5PHN0cmluZz4odGhpcy5fZGF0YS5sZW5ndGgpO1xuXG5cdFx0Ly8gaW5pdCByb3dzQ2xhc3Ncblx0XHR0aGlzLnJvd3NDbGFzcyA9IG5ldyBBcnJheTxzdHJpbmc+KHRoaXMuX2RhdGEubGVuZ3RoKTtcblxuXHRcdC8vIG9ubHkgY3JlYXRlIGEgZnJlc2ggaGVhZGVyIGlmIG5lY2Vzc2FyeSAoaGVhZGVyIGRvZXNuJ3QgZXhpc3Qgb3IgZGlmZmVycyBpbiBsZW5ndGgpXG5cdFx0aWYgKHRoaXMuaGVhZGVyID09IG51bGwgfHwgKHRoaXMuaGVhZGVyLmxlbmd0aCAhPT0gdGhpcy5fZGF0YVswXS5sZW5ndGggJiYgdGhpcy5fZGF0YVswXS5sZW5ndGggPiAwKSkge1xuXHRcdFx0bGV0IGhlYWRlciA9IG5ldyBBcnJheTxUYWJsZUhlYWRlckl0ZW0+KCk7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX2RhdGFbMF0ubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aGVhZGVyLnB1c2gobmV3IFRhYmxlSGVhZGVySXRlbSgpKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuaGVhZGVyID0gaGVhZGVyO1xuXHRcdH1cblxuXHRcdHRoaXMuZGF0YUNoYW5nZS5lbWl0KCk7XG5cdH1cblxuXHRkYXRhQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXHRyb3dzU2VsZWN0ZWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblx0cm93c0V4cGFuZGVkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cdC8qKlxuXHQgKiBHZXRzIGVtaXR0ZWQgd2hlbiBgc2VsZWN0QWxsYCBpcyBjYWxsZWQuIEVtaXRzIGZhbHNlIGlmIGFsbCByb3dzIGFyZSBkZXNlbGVjdGVkIGFuZCB0cnVlIGlmXG5cdCAqIGFsbCByb3dzIGFyZSBzZWxlY3RlZC5cblx0ICovXG5cdHNlbGVjdEFsbENoYW5nZSA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGZ1bGwgZGF0YS5cblx0ICpcblx0ICogWW91IGNhbiB1c2UgaXQgdG8gYWx0ZXIgaW5kaXZpZHVhbCBgVGFibGVJdGVtYHMgYnV0IGlmIHlvdSBuZWVkIHRvIGNoYW5nZVxuXHQgKiB0YWJsZSBzdHJ1Y3R1cmUsIHVzZSBgYWRkUm93KClgIGFuZC9vciBgYWRkQ29sdW1uKClgXG5cdCAqL1xuXHRnZXQgZGF0YSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fZGF0YTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBzZWxlY3Rpb24gc3RhdGUgb2Ygcm93cyBpbiB0aGUgdGFibGUuXG5cdCAqL1xuXHRyb3dzU2VsZWN0ZWQ6IGJvb2xlYW5bXSA9IFtdO1xuXG5cdC8qKlxuXHQgKiBDb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBleHBhbmRlZCBzdGF0ZSBvZiByb3dzIGluIHRoZSB0YWJsZS5cblx0ICovXG5cdHJvd3NFeHBhbmRlZDogYm9vbGVhbltdID0gW107XG5cblx0LyoqXG5cdCAqIENvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IGluaXRpYWwgaW5kZXggb2Ygcm93cyBpbiB0aGUgdGFibGVcblx0ICovXG5cdHJvd3NJbmRpY2VzOiBudW1iZXJbXSA9IFtdO1xuXG5cdC8qKlxuXHQgKiBDb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29udGV4dCBvZiB0aGUgcm93LlxuXHQgKlxuXHQgKiBJdCBhZmZlY3RzIHN0eWxpbmcgb2YgdGhlIHJvdyB0byByZWZsZWN0IHRoZSBjb250ZXh0LlxuXHQgKlxuXHQgKiBzdHJpbmcgY2FuIGJlIG9uZSBvZiBgXCJzdWNjZXNzXCIgfCBcIndhcm5pbmdcIiB8IFwiaW5mb1wiIHwgXCJlcnJvclwiIHwgXCJcImAgYW5kIGl0J3Ncblx0ICogZW1wdHkgb3IgdW5kZWZpbmVkIGJ5IGRlZmF1bHRcblx0ICovXG5cdHJvd3NDb250ZXh0OiBzdHJpbmdbXSA9IFtdO1xuXG5cdC8qKlxuXHQgKiBDb250YWlucyBjbGFzcyBuYW1lKHMpIG9mIHRoZSByb3cuXG5cdCAqXG5cdCAqIEl0IGFmZmVjdHMgc3R5bGluZyBvZiB0aGUgcm93IHRvIHJlZmxlY3QgdGhlIGFwcGVuZGVkIGNsYXNzIG5hbWUocykuXG5cdCAqXG5cdCAqIEl0J3MgZW1wdHkgb3IgdW5kZWZpbmVkIGJ5IGRlZmF1bHRcblx0ICovXG5cdHJvd3NDbGFzczogc3RyaW5nW10gPSBbXTtcblxuXHQvKipcblx0ICogQ29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGhlYWRlciBjZWxscyBvZiB0aGUgdGFibGUuXG5cdCAqL1xuXHRoZWFkZXI6IFRhYmxlSGVhZGVySXRlbVtdID0gW107XG5cblx0LyoqXG5cdCAqIFRyYWNrcyB0aGUgY3VycmVudCBwYWdlLlxuXHQgKi9cblx0Y3VycmVudFBhZ2UgPSAxO1xuXG5cdC8qKlxuXHQgKiBMZW5ndGggb2YgcGFnZS5cblx0ICovXG5cdHBhZ2VMZW5ndGggPSAxMDtcblxuXHQvKipcblx0ICogU2V0IHRvIHRydWUgd2hlbiB0aGVyZSBpcyBubyBtb3JlIGRhdGEgdG8gbG9hZCBpbiB0aGUgdGFibGVcblx0ICovXG5cdGlzRW5kID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIFNldCB0byB0cnVlIHdoZW4gbGF6eSBsb2FkaW5nIHRvIHNob3cgbG9hZGluZyBpbmRpY2F0b3Jcblx0ICovXG5cdGlzTG9hZGluZyA9IGZhbHNlO1xuXG5cdC8qKlxuXHQgKiBBYnNvbHV0ZSB0b3RhbCBudW1iZXIgb2Ygcm93cyBvZiB0aGUgdGFibGUuXG5cdCAqL1xuXHRwcm90ZWN0ZWQgX3RvdGFsRGF0YUxlbmd0aDogbnVtYmVyO1xuXG5cdC8qKlxuXHQgKiBNYW51YWxseSBzZXQgZGF0YSBsZW5ndGggaW4gY2FzZSB0aGUgZGF0YSBpbiB0aGUgdGFibGUgZG9lc24ndFxuXHQgKiBjb3JyZWN0bHkgcmVmbGVjdCBhbGwgdGhlIGRhdGEgdGhhdCB0YWJsZSBpcyB0byBkaXNwbGF5LlxuXHQgKlxuXHQgKiBFeGFtcGxlOiBpZiB5b3UgaGF2ZSBtdWx0aXBsZSBwYWdlcyBvZiBkYXRhIHRoYXQgdGFibGUgd2lsbCBkaXNwbGF5XG5cdCAqIGJ1dCB5b3UncmUgbG9hZGluZyBvbmUgYXQgYSB0aW1lLlxuXHQgKlxuXHQgKiBTZXQgdG8gYG51bGxgIHRvIHJlc2V0IHRvIGRlZmF1bHQgYmVoYXZpb3IuXG5cdCAqL1xuXHRzZXQgdG90YWxEYXRhTGVuZ3RoKGxlbmd0aDogbnVtYmVyKSB7XG5cdFx0Ly8gaWYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aG91dCBhIHBhcmFtZXRlciB3ZSBuZWVkIHRvIHNldCB0byBudWxsIHRvIGF2b2lkIGhhdmluZyB1bmRlZmluZWQgIT0gbnVsbFxuXHRcdHRoaXMuX3RvdGFsRGF0YUxlbmd0aCA9IGlzTmFOKGxlbmd0aCkgPyBudWxsIDogbGVuZ3RoO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvdGFsIGxlbmd0aCBvZiBkYXRhIHRoYXQgdGFibGUgaGFzIGFjY2VzcyB0bywgb3IgdGhlIGFtb3VudCBtYW51YWxseSBzZXRcblx0ICovXG5cdGdldCB0b3RhbERhdGFMZW5ndGgoKSB7XG5cdFx0Ly8gaWYgbWFudWFsbHkgc2V0IGRhdGEgbGVuZ3RoXG5cdFx0aWYgKHRoaXMuX3RvdGFsRGF0YUxlbmd0aCAhPT0gbnVsbCAmJiB0aGlzLl90b3RhbERhdGFMZW5ndGggPj0gMCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuX3RvdGFsRGF0YUxlbmd0aDtcblx0XHR9XG5cblx0XHQvLyBpZiBlbXB0eSBkYXRhc2V0XG5cdFx0aWYgKHRoaXMuZGF0YSAmJiB0aGlzLmRhdGEubGVuZ3RoID09PSAxICYmIHRoaXMuZGF0YVswXS5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybiAwO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmRhdGEubGVuZ3RoO1xuXHR9XG5cblx0LyoqXG5cdCAqIFVzZWQgaW4gYGRhdGFgXG5cdCAqL1xuXHRwcm90ZWN0ZWQgX2RhdGE6IFRhYmxlSXRlbVtdW10gPSBbW11dO1xuXG5cdC8qKlxuXHQgKiBUaGUgbnVtYmVyIG9mIG1vZGVscyBpbnN0YW50aWF0ZWQsIHRoaXMgaXMgdG8gbWFrZSBzdXJlIGVhY2ggdGFibGUgaGFzIGEgZGlmZmVyZW50XG5cdCAqIG1vZGVsIGNvdW50IGZvciB1bmlxdWUgaWQgZ2VuZXJhdGlvbi5cblx0ICovXG5cdHByb3RlY3RlZCB0YWJsZU1vZGVsQ291bnQgPSAwO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMudGFibGVNb2RlbENvdW50ID0gVGFibGVNb2RlbC5DT1VOVCsrO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYW4gaWQgZm9yIHRoZSBnaXZlbiBjb2x1bW5cblx0ICpcblx0ICogQHBhcmFtIGNvbHVtbiB0aGUgY29sdW1uIHRvIGdlbmVyYXRlIGFuIGlkIGZvclxuXHQgKiBAcGFyYW0gcm93IHRoZSByb3cgb2YgdGhlIGhlYWRlciB0byBnZW5lcmF0ZSBhbiBpZCBmb3Jcblx0ICovXG5cdGdldElkKGNvbHVtbjogSGVhZGVyVHlwZSwgcm93ID0gMCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGB0YWJsZS1oZWFkZXItJHtyb3d9LSR7Y29sdW1ufS0ke3RoaXMudGFibGVNb2RlbENvdW50fWA7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgaWQgb2YgdGhlIGhlYWRlci4gVXNlZCB0byBsaW5rIHRoZSBjZWxscyB3aXRoIGhlYWRlcnMgKG9yIGhlYWRlcnMgd2l0aCBoZWFkZXJzKVxuXHQgKlxuXHQgKiBAcGFyYW0gY29sdW1uIHRoZSBjb2x1bW4gdG8gc3RhcnQgZ2V0dGluZyBoZWFkZXJzIGZvclxuXHQgKiBAcGFyYW0gY29sU3BhbiB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgdG8gZ2V0IGhlYWRlcnMgZm9yIChkZWZhdWx0cyB0byAxKVxuXHQgKi9cblx0Z2V0SGVhZGVySWQoY29sdW1uOiBIZWFkZXJUeXBlLCBjb2xTcGFuID0gMSk6IHN0cmluZyB7XG5cdFx0aWYgKGNvbHVtbiA9PT0gXCJzZWxlY3RcIiB8fCBjb2x1bW4gPT09IFwiZXhwYW5kXCIpIHtcblx0XHRcdHJldHVybiB0aGlzLmdldElkKGNvbHVtbik7XG5cdFx0fVxuXG5cdFx0bGV0IGlkcyA9IFtdO1xuXHRcdGZvciAobGV0IGkgPSBjb2x1bW47IGkgPj0gMDsgaS0tKSB7XG5cdFx0XHRpZiAodGhpcy5oZWFkZXJbaV0pIHtcblx0XHRcdFx0Zm9yIChsZXQgaiA9IDA7IGogPCBjb2xTcGFuOyBqKyspIHtcblx0XHRcdFx0XHRpZHMucHVzaCh0aGlzLmdldElkKGkgKyBqKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGlkcy5qb2luKFwiIFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGaW5kcyBjbG9zZXN0IGhlYWRlciBieSB0cnlpbmcgdGhlIGBjb2x1bW5gIGFuZCB0aGVuIHdvcmtpbmcgaXRzIHdheSB0byB0aGUgbGVmdFxuXHQgKlxuXHQgKiBAcGFyYW0gY29sdW1uIHRoZSB0YXJnZXQgY29sdW1uXG5cdCAqL1xuXHRnZXRIZWFkZXIoY29sdW1uOiBudW1iZXIpOiBUYWJsZUhlYWRlckl0ZW0ge1xuXHRcdGlmICghdGhpcy5oZWFkZXIpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdGZvciAobGV0IGkgPSBjb2x1bW47IGkgPj0gMDsgaS0tKSB7XG5cdFx0XHRjb25zdCBoZWFkZXJDZWxsID0gdGhpcy5oZWFkZXJbaV07XG5cdFx0XHRpZiAoaGVhZGVyQ2VsbCkge1xuXHRcdFx0XHRyZXR1cm4gaGVhZGVyQ2VsbDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGhvdyBtYW55IHJvd3MgaXMgY3VycmVudGx5IHNlbGVjdGVkXG5cdCAqL1xuXHRzZWxlY3RlZFJvd3NDb3VudCgpOiBudW1iZXIge1xuXHRcdGxldCBjb3VudCA9IDA7XG5cdFx0aWYgKHRoaXMucm93c1NlbGVjdGVkKSB7XG5cdFx0XHR0aGlzLnJvd3NTZWxlY3RlZC5mb3JFYWNoKHJvd1NlbGVjdGVkID0+IHtcblx0XHRcdFx0aWYgKHJvd1NlbGVjdGVkKSB7XG5cdFx0XHRcdFx0Y291bnQrKztcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBjb3VudDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGhvdyBtYW55IHJvd3MgaXMgY3VycmVudGx5IGV4cGFuZGVkXG5cdCAqL1xuXHRleHBhbmRlZFJvd3NDb3VudCgpOiBudW1iZXIge1xuXHRcdGxldCBjb3VudCA9IDA7XG5cdFx0aWYgKHRoaXMucm93c0V4cGFuZGVkKSB7XG5cdFx0XHR0aGlzLnJvd3NFeHBhbmRlZC5mb3JFYWNoKHJvd0V4cGFuZGVkID0+IHtcblx0XHRcdFx0aWYgKHJvd0V4cGFuZGVkKSB7XG5cdFx0XHRcdFx0Y291bnQrKztcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBjb3VudDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGBpbmRleGB0aCByb3cgb2YgdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBOZWdhdGl2ZSBpbmRleCBzdGFydHMgZnJvbSB0aGUgZW5kLiAtMSBiZWluZyB0aGUgbGFzdCBlbGVtZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0gaW5kZXhcblx0ICovXG5cdHJvdyhpbmRleDogbnVtYmVyKTogVGFibGVJdGVtW10ge1xuXHRcdHJldHVybiB0aGlzLmRhdGFbdGhpcy5yZWFsUm93SW5kZXgoaW5kZXgpXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIGEgcm93IHRvIHRoZSBgaW5kZXhgdGggcm93IG9yIGFwcGVuZHMgdG8gdGFibGUgaWYgaW5kZXggbm90IHByb3ZpZGVkLlxuXHQgKlxuXHQgKiBJZiByb3cgaXMgc2hvcnRlciB0aGFuIG90aGVyIHJvd3Mgb3Igbm90IHByb3ZpZGVkLCBpdCB3aWxsIGJlIHBhZGRlZCB3aXRoXG5cdCAqIGVtcHR5IGBUYWJsZUl0ZW1gIGVsZW1lbnRzLlxuXHQgKlxuXHQgKiBJZiByb3cgaXMgbG9uZ2VyIHRoYW4gb3RoZXIgcm93cywgb3RoZXJzIHdpbGwgYmUgZXh0ZW5kZWQgdG8gbWF0Y2ggc28gbm8gZGF0YSBpcyBsb3N0LlxuXHQgKlxuXHQgKiBJZiBjYWxsZWQgb24gYW4gZW1wdHkgdGFibGUgd2l0aCBubyBwYXJhbWV0ZXJzLCBpdCBjcmVhdGVzIGEgMXgxIHRhYmxlLlxuXHQgKlxuXHQgKiBOZWdhdGl2ZSBpbmRleCBzdGFydHMgZnJvbSB0aGUgZW5kLiAtMSBiZWluZyB0aGUgbGFzdCBlbGVtZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0gW3Jvd11cblx0ICogQHBhcmFtIFtpbmRleF1cblx0ICovXG5cdGFkZFJvdyhyb3c/OiBUYWJsZUl0ZW1bXSwgaW5kZXg/OiBudW1iZXIpIHtcblx0XHQvLyBpZiB0YWJsZSBlbXB0eSBjcmVhdGUgdGFibGUgd2l0aCByb3dcblx0XHRpZiAoIXRoaXMuZGF0YSB8fCB0aGlzLmRhdGEubGVuZ3RoID09PSAwIHx8IHRoaXMuZGF0YVswXS5sZW5ndGggPT09IDApIHtcblx0XHRcdGxldCBuZXdEYXRhID0gbmV3IEFycmF5PEFycmF5PFRhYmxlSXRlbT4+KCk7XG5cdFx0XHRuZXdEYXRhLnB1c2gocm93ID8gcm93IDogW25ldyBUYWJsZUl0ZW0oKV0pOyAgLy8gcm93IG9yIG9uZSBlbXB0eSBvbmUgY29sdW1uIHJvd1xuXHRcdFx0dGhpcy5kYXRhID0gbmV3RGF0YTtcblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGxldCByZWFsUm93ID0gcm93O1xuXHRcdGNvbnN0IGNvbHVtbkNvdW50ID0gdGhpcy5kYXRhWzBdLmxlbmd0aDtcblxuXHRcdGlmIChyb3cgPT0gbnVsbCkge1xuXHRcdFx0cmVhbFJvdyA9IG5ldyBBcnJheTxUYWJsZUl0ZW0+KCk7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGNvbHVtbkNvdW50OyBpKyspIHtcblx0XHRcdFx0cmVhbFJvdy5wdXNoKG5ldyBUYWJsZUl0ZW0oKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHJlYWxSb3cubGVuZ3RoIDwgY29sdW1uQ291bnQpIHtcblx0XHRcdC8vIGV4dGVuZCB0aGUgbGVuZ3RoIG9mIHJlYWxSb3dcblx0XHRcdGNvbnN0IGRpZmZlcmVuY2UgPSBjb2x1bW5Db3VudCAtIHJlYWxSb3cubGVuZ3RoO1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBkaWZmZXJlbmNlOyBpKyspIHtcblx0XHRcdFx0cmVhbFJvdy5wdXNoKG5ldyBUYWJsZUl0ZW0oKSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChyZWFsUm93Lmxlbmd0aCA+IGNvbHVtbkNvdW50KSB7XG5cdFx0XHQvLyBleHRlbmQgdGhlIGxlbmd0aCBvZiBoZWFkZXJcblx0XHRcdGxldCBkaWZmZXJlbmNlID0gcmVhbFJvdy5sZW5ndGggLSB0aGlzLmhlYWRlci5sZW5ndGg7XG5cdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8IGRpZmZlcmVuY2U7IGorKykge1xuXHRcdFx0XHR0aGlzLmhlYWRlci5wdXNoKG5ldyBUYWJsZUhlYWRlckl0ZW0oKSk7XG5cdFx0XHR9XG5cdFx0XHQvLyBleHRlbmQgdGhlIGxlbmd0aCBvZiBldmVyeSBvdGhlciByb3dcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5kYXRhLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGxldCBjdXJyZW50Um93ID0gdGhpcy5kYXRhW2ldO1xuXHRcdFx0XHRkaWZmZXJlbmNlID0gcmVhbFJvdy5sZW5ndGggLSBjdXJyZW50Um93Lmxlbmd0aDtcblx0XHRcdFx0Zm9yIChsZXQgaiA9IDA7IGogPCBkaWZmZXJlbmNlOyBqKyspIHtcblx0XHRcdFx0XHRjdXJyZW50Um93LnB1c2gobmV3IFRhYmxlSXRlbSgpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChpbmRleCA9PSBudWxsKSB7XG5cdFx0XHR0aGlzLmRhdGEucHVzaChyZWFsUm93KTtcblxuXHRcdFx0Ly8gdXBkYXRlIHJvd3NTZWxlY3RlZCBwcm9wZXJ0eSBmb3IgbGVuZ3RoXG5cdFx0XHR0aGlzLnJvd3NTZWxlY3RlZC5wdXNoKGZhbHNlKTtcblxuXHRcdFx0Ly8gdXBkYXRlIHJvd3NFeHBhbmRlZCBwcm9wZXJ0eSBmb3IgbGVuZ3RoXG5cdFx0XHR0aGlzLnJvd3NFeHBhbmRlZC5wdXNoKGZhbHNlKTtcblxuXHRcdFx0Ly8gdXBkYXRlIHJvd3NDb250ZXh0IHByb3BlcnR5IGZvciBsZW5ndGhcblx0XHRcdHRoaXMucm93c0NvbnRleHQucHVzaCh1bmRlZmluZWQpO1xuXG5cdFx0XHQvLyB1cGRhdGUgcm93c0NsYXNzIHByb3BlcnR5IGZvciBsZW5ndGhcblx0XHRcdHRoaXMucm93c0NsYXNzLnB1c2godW5kZWZpbmVkKTtcblxuXHRcdFx0Ly8gdXBkYXRlIHJvd3NJbmRpY2VzIHByb3BlcnR5IGZvciBsZW5ndGhcblx0XHRcdHRoaXMucm93c0luZGljZXMucHVzaCh0aGlzLmRhdGEubGVuZ3RoIC0gMSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IHJpID0gdGhpcy5yZWFsUm93SW5kZXgoaW5kZXgpO1xuXHRcdFx0dGhpcy5kYXRhLnNwbGljZShyaSwgMCwgcmVhbFJvdyk7XG5cblx0XHRcdC8vIHVwZGF0ZSByb3dzU2VsZWN0ZWQgcHJvcGVydHkgZm9yIGxlbmd0aFxuXHRcdFx0dGhpcy5yb3dzU2VsZWN0ZWQuc3BsaWNlKHJpLCAwLCBmYWxzZSk7XG5cblx0XHRcdC8vIHVwZGF0ZSByb3dzRXhwYW5kZWQgcHJvcGVydHkgZm9yIGxlbmd0aFxuXHRcdFx0dGhpcy5yb3dzRXhwYW5kZWQuc3BsaWNlKHJpLCAwLCBmYWxzZSk7XG5cblx0XHRcdC8vIHVwZGF0ZSByb3dzQ29udGV4dCBwcm9wZXJ0eSBmb3IgbGVuZ3RoXG5cdFx0XHR0aGlzLnJvd3NDb250ZXh0LnNwbGljZShyaSwgMCwgdW5kZWZpbmVkKTtcblxuXHRcdFx0Ly8gdXBkYXRlIHJvd3NDbGFzcyBwcm9wZXJ0eSBmb3IgbGVuZ3RoXG5cdFx0XHR0aGlzLnJvd3NDbGFzcy5zcGxpY2UocmksIDAsIHVuZGVmaW5lZCk7XG5cblx0XHRcdC8vIHVwZGF0ZSByb3dzSW5kaWNlcyBwcm9wZXJ0eSBmb3IgbGVuZ3RoXG5cdFx0XHR0aGlzLnJvd3NJbmRpY2VzLnNwbGljZShyaSwgMCwgdGhpcy5kYXRhLmxlbmd0aCAtIDEpO1xuXHRcdH1cblxuXHRcdHRoaXMuZGF0YUNoYW5nZS5lbWl0KCk7XG5cdH1cblxuXHQvKipcblx0ICogRGVsZXRlcyBgaW5kZXhgdGggcm93LlxuXHQgKlxuXHQgKiBOZWdhdGl2ZSBpbmRleCBzdGFydHMgZnJvbSB0aGUgZW5kLiAtMSBiZWluZyB0aGUgbGFzdCBlbGVtZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0gaW5kZXhcblx0ICovXG5cdGRlbGV0ZVJvdyhpbmRleDogbnVtYmVyKSB7XG5cdFx0Y29uc3QgcnJpID0gdGhpcy5yZWFsUm93SW5kZXgoaW5kZXgpO1xuXHRcdHRoaXMuZGF0YS5zcGxpY2UocnJpLCAxKTtcblx0XHR0aGlzLnJvd3NTZWxlY3RlZC5zcGxpY2UocnJpLCAxKTtcblx0XHR0aGlzLnJvd3NFeHBhbmRlZC5zcGxpY2UocnJpLCAxKTtcblx0XHR0aGlzLnJvd3NDb250ZXh0LnNwbGljZShycmksIDEpO1xuXHRcdHRoaXMucm93c0NsYXNzLnNwbGljZShycmksIDEpO1xuXG5cdFx0Y29uc3Qgcm93SW5kZXggPSB0aGlzLnJvd3NJbmRpY2VzW3JyaV07XG5cdFx0dGhpcy5yb3dzSW5kaWNlcy5zcGxpY2UocnJpLCAxKTtcblx0XHR0aGlzLnJvd3NJbmRpY2VzID0gdGhpcy5yb3dzSW5kaWNlcy5tYXAoKHZhbHVlKSA9PiAodmFsdWUgPiByb3dJbmRleCkgPyAtLXZhbHVlIDogdmFsdWUpO1xuXG5cdFx0dGhpcy5kYXRhQ2hhbmdlLmVtaXQoKTtcblx0fVxuXG5cdGhhc0V4cGFuZGFibGVSb3dzKCkge1xuXHRcdHJldHVybiB0aGlzLmRhdGEuc29tZShkYXRhID0+IGRhdGEuc29tZShkID0+IGQgJiYgZC5leHBhbmRlZERhdGEpKTsgLy8gY2hlY2tpbmcgZm9yIHNvbWUgaW4gMkQgYXJyYXlcblx0fVxuXG5cdGlzUm93RXhwYW5kYWJsZShpbmRleDogbnVtYmVyKSB7XG5cdFx0cmV0dXJuIHRoaXMuZGF0YVtpbmRleF0uc29tZShkID0+IGQgJiYgZC5leHBhbmRlZERhdGEpO1xuXHR9XG5cblx0aXNSb3dFeHBhbmRlZChpbmRleDogbnVtYmVyKSB7XG5cdFx0cmV0dXJuIHRoaXMucm93c0V4cGFuZGVkW2luZGV4XTtcblx0fVxuXG5cdGdldFJvd0NvbnRleHQoaW5kZXg6IG51bWJlcikge1xuXHRcdHJldHVybiB0aGlzLnJvd3NDb250ZXh0W2luZGV4XTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGBpbmRleGB0aCBjb2x1bW4gb2YgdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBOZWdhdGl2ZSBpbmRleCBzdGFydHMgZnJvbSB0aGUgZW5kLiAtMSBiZWluZyB0aGUgbGFzdCBlbGVtZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0gaW5kZXhcblx0ICovXG5cdGNvbHVtbihpbmRleDogbnVtYmVyKTogVGFibGVJdGVtW10ge1xuXHRcdGxldCBjb2x1bW4gPSBuZXcgQXJyYXk8VGFibGVJdGVtPigpO1xuXHRcdGNvbnN0IHJpID0gdGhpcy5yZWFsQ29sdW1uSW5kZXgoaW5kZXgpO1xuXHRcdGNvbnN0IHJjID0gdGhpcy5kYXRhLmxlbmd0aDtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcmM7IGkrKykge1xuXHRcdFx0Y29uc3Qgcm93ID0gdGhpcy5kYXRhW2ldO1xuXHRcdFx0Y29sdW1uLnB1c2gocm93W3JpXSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbHVtbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIGEgY29sdW1uIHRvIHRoZSBgaW5kZXhgdGggY29sdW1uIG9yIGFwcGVuZHMgdG8gdGFibGUgaWYgaW5kZXggbm90IHByb3ZpZGVkLlxuXHQgKlxuXHQgKiBJZiBjb2x1bW4gaXMgc2hvcnRlciB0aGFuIG90aGVyIGNvbHVtbnMgb3Igbm90IHByb3ZpZGVkLCBpdCB3aWxsIGJlIHBhZGRlZCB3aXRoXG5cdCAqIGVtcHR5IGBUYWJsZUl0ZW1gIGVsZW1lbnRzLlxuXHQgKlxuXHQgKiBJZiBjb2x1bW4gaXMgbG9uZ2VyIHRoYW4gb3RoZXIgY29sdW1ucywgb3RoZXJzIHdpbGwgYmUgZXh0ZW5kZWQgdG8gbWF0Y2ggc28gbm8gZGF0YSBpcyBsb3N0LlxuXHQgKlxuXHQgKiBJZiBjYWxsZWQgb24gYW4gZW1wdHkgdGFibGUgd2l0aCBubyBwYXJhbWV0ZXJzLCBpdCBjcmVhdGVzIGEgMXgxIHRhYmxlLlxuXHQgKlxuXHQgKiBOZWdhdGl2ZSBpbmRleCBzdGFydHMgZnJvbSB0aGUgZW5kLiAtMSBiZWluZyB0aGUgbGFzdCBlbGVtZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0gW2NvbHVtbl1cblx0ICogQHBhcmFtIFtpbmRleF1cblx0ICovXG5cdGFkZENvbHVtbihjb2x1bW4/OiBUYWJsZUl0ZW1bXSwgaW5kZXg/OiBudW1iZXIpIHtcblx0XHQvLyBpZiB0YWJsZSBlbXB0eSBjcmVhdGUgdGFibGUgd2l0aCByb3dcblx0XHRpZiAoIXRoaXMuZGF0YSB8fCB0aGlzLmRhdGEubGVuZ3RoID09PSAwIHx8IHRoaXMuZGF0YVswXS5sZW5ndGggPT09IDApIHtcblx0XHRcdGxldCBuZXdEYXRhID0gbmV3IEFycmF5PEFycmF5PFRhYmxlSXRlbT4+KCk7XG5cdFx0XHRpZiAoY29sdW1uID09IG51bGwpIHtcblx0XHRcdFx0bmV3RGF0YS5wdXNoKFtuZXcgVGFibGVJdGVtKCldKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY29sdW1uLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0bGV0IGl0ZW0gPSBjb2x1bW5baV07XG5cdFx0XHRcdFx0bmV3RGF0YS5wdXNoKFtpdGVtXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRoaXMuZGF0YSA9IG5ld0RhdGE7XG5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRsZXQgcmMgPSB0aGlzLmRhdGEubGVuZ3RoOyAgLy8gcm93IGNvdW50XG5cdFx0bGV0IGNpID0gdGhpcy5yZWFsQ29sdW1uSW5kZXgoaW5kZXgpO1xuXG5cdFx0Ly8gYXBwZW5kIG1pc3Npbmcgcm93c1xuXHRcdGZvciAobGV0IGkgPSAwOyBjb2x1bW4gIT0gbnVsbCAmJiBpIDwgY29sdW1uLmxlbmd0aCAtIHJjOyBpKyspIHtcblx0XHRcdHRoaXMuYWRkUm93KCk7XG5cdFx0fVxuXHRcdHJjID0gdGhpcy5kYXRhLmxlbmd0aDtcblx0XHRpZiAoaW5kZXggPT0gbnVsbCkge1xuXHRcdFx0Ly8gYXBwZW5kIHRvIGVuZFxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCByYzsgaSsrKSB7XG5cdFx0XHRcdGxldCByb3cgPSB0aGlzLmRhdGFbaV07XG5cdFx0XHRcdHJvdy5wdXNoKGNvbHVtbiA9PSBudWxsIHx8IGNvbHVtbltpXSA9PSBudWxsID8gbmV3IFRhYmxlSXRlbSgpIDogY29sdW1uW2ldKTtcblx0XHRcdH1cblx0XHRcdC8vIHVwZGF0ZSBoZWFkZXIgaWYgbm90IGFscmVhZHkgc2V0IGJ5IHVzZXJcblx0XHRcdGlmICh0aGlzLmhlYWRlci5sZW5ndGggPCB0aGlzLmRhdGFbMF0ubGVuZ3RoKSB7XG5cdFx0XHRcdHRoaXMuaGVhZGVyLnB1c2gobmV3IFRhYmxlSGVhZGVySXRlbSgpKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKGluZGV4ID49IHRoaXMuZGF0YVswXS5sZW5ndGgpIHtcblx0XHRcdFx0Ly8gaWYgdHJ5aW5nIHRvIGFwcGVuZFxuXHRcdFx0XHRjaSsrO1xuXHRcdFx0fVxuXHRcdFx0Ly8gaW5zZXJ0XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHJjOyBpKyspIHtcblx0XHRcdFx0bGV0IHJvdyA9IHRoaXMuZGF0YVtpXTtcblx0XHRcdFx0cm93LnNwbGljZShjaSwgMCwgY29sdW1uID09IG51bGwgfHwgY29sdW1uW2ldID09IG51bGwgPyBuZXcgVGFibGVJdGVtKCkgOiBjb2x1bW5baV0pO1xuXHRcdFx0fVxuXHRcdFx0Ly8gdXBkYXRlIGhlYWRlciBpZiBub3QgYWxyZWFkeSBzZXQgYnkgdXNlclxuXHRcdFx0aWYgKHRoaXMuaGVhZGVyLmxlbmd0aCA8IHRoaXMuZGF0YVswXS5sZW5ndGgpIHtcblx0XHRcdFx0dGhpcy5oZWFkZXIuc3BsaWNlKGNpLCAwLCBuZXcgVGFibGVIZWFkZXJJdGVtKCkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMuZGF0YUNoYW5nZS5lbWl0KCk7XG5cdH1cblxuXHQvKipcblx0ICogRGVsZXRlcyBgaW5kZXhgdGggY29sdW1uLlxuXHQgKlxuXHQgKiBOZWdhdGl2ZSBpbmRleCBzdGFydHMgZnJvbSB0aGUgZW5kLiAtMSBiZWluZyB0aGUgbGFzdCBlbGVtZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0gaW5kZXhcblx0ICovXG5cdGRlbGV0ZUNvbHVtbihpbmRleDogbnVtYmVyKSB7XG5cdFx0Y29uc3QgcmNpID0gdGhpcy5yZWFsQ29sdW1uSW5kZXgoaW5kZXgpO1xuXHRcdGNvbnN0IHJvd0NvdW50ID0gdGhpcy5kYXRhLmxlbmd0aDtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHJvd0NvdW50OyBpKyspIHtcblx0XHRcdHRoaXMuZGF0YVtpXS5zcGxpY2UocmNpLCAxKTtcblx0XHR9XG5cdFx0Ly8gdXBkYXRlIGhlYWRlciBpZiBub3QgYWxyZWFkeSBzZXQgYnkgdXNlclxuXHRcdGlmICh0aGlzLmhlYWRlci5sZW5ndGggPiB0aGlzLmRhdGFbMF0ubGVuZ3RoKSB7XG5cdFx0XHR0aGlzLmhlYWRlci5zcGxpY2UocmNpLCAxKTtcblx0XHR9XG5cblx0XHR0aGlzLmRhdGFDaGFuZ2UuZW1pdCgpO1xuXHR9XG5cblx0bW92ZUNvbHVtbihpbmRleEZyb206IG51bWJlciwgaW5kZXhUbzogbnVtYmVyKSB7XG5cdFx0Y29uc3QgaGVhZGVyRnJvbSA9IHRoaXMuaGVhZGVyW2luZGV4RnJvbV07XG5cblx0XHR0aGlzLmFkZENvbHVtbih0aGlzLmNvbHVtbihpbmRleEZyb20pLCBpbmRleFRvKTtcblx0XHR0aGlzLmRlbGV0ZUNvbHVtbihpbmRleEZyb20gKyAoaW5kZXhUbyA8IGluZGV4RnJvbSA/IDEgOiAwKSk7XG5cblx0XHR0aGlzLmhlYWRlcltpbmRleFRvICsgKGluZGV4VG8gPiBpbmRleEZyb20gPyAtMSA6IDApXSA9IGhlYWRlckZyb207XG5cdH1cblxuXHQvKipcblx0ICogY3ljbGUgdGhyb3VnaCB0aGUgdGhyZWUgc29ydCBzdGF0ZXNcblx0ICogQHBhcmFtIGluZGV4XG5cdCAqL1xuXHRjeWNsZVNvcnRTdGF0ZShpbmRleDogbnVtYmVyKSB7XG5cdFx0Ly8gbm8gc29ydCBwcm92aWRlZCBzbyBkbyB0aGUgc2ltcGxlIHNvcnRcblx0XHRzd2l0Y2ggKHRoaXMuaGVhZGVyW2luZGV4XS5zb3J0RGlyZWN0aW9uKSB7XG5cdFx0XHRjYXNlIFwiQVNDRU5ESU5HXCI6XG5cdFx0XHRcdHRoaXMuaGVhZGVyW2luZGV4XS5zb3J0RGlyZWN0aW9uID0gXCJERVNDRU5ESU5HXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkRFU0NFTkRJTkdcIjpcblx0XHRcdFx0dGhpcy5oZWFkZXJbaW5kZXhdLnNvcnREaXJlY3Rpb24gPSBcIk5PTkVcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR0aGlzLmhlYWRlcltpbmRleF0uc29ydERpcmVjdGlvbiA9IFwiQVNDRU5ESU5HXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTb3J0cyB0aGUgZGF0YSBjdXJyZW50bHkgcHJlc2VudCBpbiB0aGUgbW9kZWwgYmFzZWQgb24gYGNvbXBhcmUoKWBcblx0ICpcblx0ICogRGlyZWN0aW9uIGlzIHNldCBieSBgYXNjZW5kaW5nYCBhbmQgYGRlc2NlbmRpbmdgIHByb3BlcnRpZXMgb2YgYFRhYmxlSGVhZGVySXRlbWBcblx0ICogaW4gYGluZGV4YHRoIGNvbHVtbi5cblx0ICpcblx0ICogQHBhcmFtIGluZGV4IFRoZSBjb2x1bW4gYmFzZWQgb24gd2hpY2ggaXQncyBzb3J0aW5nXG5cdCAqL1xuXHRzb3J0KGluZGV4OiBudW1iZXIpIHtcblx0XHR0aGlzLnB1c2hSb3dTdGF0ZVRvTW9kZWxEYXRhKCk7XG5cdFx0Y29uc3QgaGVhZGVyU29ydGVkID0gdGhpcy5oZWFkZXJbaW5kZXhdLnNvcnRlZDtcblx0XHQvLyBXZSBvbmx5IGFsbG93IHNvcnRpbmcgYnkgYSBzaW5nbGUgY29sdW1uLCBzbyByZXNldCBzb3J0IHN0YXRlIGZvciBhbGwgY29sdW1ucyBiZWZvcmUgc3BlY2lmeWluZyBuZXcgc29ydCBzdGF0ZVxuXHRcdHRoaXMuaGVhZGVyLmZvckVhY2goY29sdW1uID0+IGNvbHVtbi5zb3J0ZWQgPSBmYWxzZSk7XG5cdFx0aWYgKHRoaXMuaGVhZGVyW2luZGV4XS5zb3J0RGlyZWN0aW9uID09PSBcIk5PTkVcIiAmJiBoZWFkZXJTb3J0ZWQpIHtcblx0XHRcdC8vIFJlc3RvcmUgaW5pdGlhbCBvcmRlciBvZiByb3dzXG5cdFx0XHRjb25zdCBvbGREYXRhID0gdGhpcy5fZGF0YTtcblx0XHRcdHRoaXMuX2RhdGEgPSBbXTtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRjb25zdCByaSA9IHRoaXMucm93c0luZGljZXNbaV07XG5cdFx0XHRcdHRoaXMuX2RhdGFbcmldID0gb2xkRGF0YVtpXTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgZGVzY2VuZGluZyA9IHRoaXMuaGVhZGVyW2luZGV4XS5zb3J0RGlyZWN0aW9uID09PSBcIkRFU0NFTkRJTkdcIiA/IC0xIDogMTtcblx0XHRcdHRoaXMuZGF0YS5zb3J0KChhLCBiKSA9PiB7XG5cdFx0XHRcdHJldHVybiBkZXNjZW5kaW5nICogdGhpcy5oZWFkZXJbaW5kZXhdLmNvbXBhcmUoYVtpbmRleF0sIGJbaW5kZXhdKTtcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5oZWFkZXJbaW5kZXhdLnNvcnRlZCA9IHRydWU7XG5cdFx0fVxuXHRcdHRoaXMucG9wUm93U3RhdGVGcm9tTW9kZWxEYXRhKCk7XG5cdH1cblxuXHQvKipcblx0ICogQXBwZW5kcyBgcm93c1NlbGVjdGVkYCBhbmQgYHJvd3NFeHBhbmRlZGAgaW5mbyB0byBtb2RlbCBkYXRhLlxuXHQgKlxuXHQgKiBXaGVuIHNvcnRpbmcgcm93cywgZG8gdGhpcyBmaXJzdCBzbyBpbmZvcm1hdGlvbiBhYm91dCByb3cgc2VsZWN0aW9uXG5cdCAqIGdldHMgc29ydGVkIHdpdGggdGhlIG90aGVyIHJvdyBpbmZvLlxuXHQgKlxuXHQgKiBDYWxsIGBwb3BSb3dTZWxlY3Rpb25Gcm9tTW9kZWxEYXRhKClgIGFmdGVyIHNvcnRpbmcgdG8gbWFrZSBldmVyeXRoaW5nXG5cdCAqIHJpZ2h0IHdpdGggdGhlIHdvcmxkIGFnYWluLlxuXHQgKi9cblx0cHVzaFJvd1N0YXRlVG9Nb2RlbERhdGEoKSB7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IHJvd1NlbGVjdGVkTWFyayA9IG5ldyBUYWJsZUl0ZW0oKTtcblx0XHRcdHJvd1NlbGVjdGVkTWFyay5kYXRhID0gdGhpcy5yb3dzU2VsZWN0ZWRbaV07XG5cdFx0XHR0aGlzLmRhdGFbaV0ucHVzaChyb3dTZWxlY3RlZE1hcmspO1xuXG5cdFx0XHRjb25zdCByb3dFeHBhbmRlZE1hcmsgPSBuZXcgVGFibGVJdGVtKCk7XG5cdFx0XHRyb3dFeHBhbmRlZE1hcmsuZGF0YSA9IHRoaXMucm93c0V4cGFuZGVkW2ldO1xuXHRcdFx0dGhpcy5kYXRhW2ldLnB1c2gocm93RXhwYW5kZWRNYXJrKTtcblxuXHRcdFx0Y29uc3Qgcm93Q29udGV4dCA9IG5ldyBUYWJsZUl0ZW0oKTtcblx0XHRcdHJvd0NvbnRleHQuZGF0YSA9IHRoaXMucm93c0NvbnRleHRbaV07XG5cdFx0XHR0aGlzLmRhdGFbaV0ucHVzaChyb3dDb250ZXh0KTtcblxuXHRcdFx0Y29uc3Qgcm93Q2xhc3MgPSBuZXcgVGFibGVJdGVtKCk7XG5cdFx0XHRyb3dDbGFzcy5kYXRhID0gdGhpcy5yb3dzQ2xhc3NbaV07XG5cdFx0XHR0aGlzLmRhdGFbaV0ucHVzaChyb3dDbGFzcyk7XG5cblx0XHRcdGNvbnN0IHJvd0luZGV4ID0gbmV3IFRhYmxlSXRlbSgpO1xuXHRcdFx0cm93SW5kZXguZGF0YSA9IHRoaXMucm93c0luZGljZXNbaV07XG5cdFx0XHR0aGlzLmRhdGFbaV0ucHVzaChyb3dJbmRleCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJlc3RvcmVzIGByb3dzU2VsZWN0ZWRgIGZyb20gZGF0YSBwdXNoZWQgYnkgYHB1c2hSb3dTZWxlY3Rpb25Ub01vZGVsRGF0YSgpYFxuXHQgKlxuXHQgKiBDYWxsIGFmdGVyIHNvcnRpbmcgZGF0YSAoaWYgeW91IHByZXZpb3VzbHkgcHVzaGVkIHRvIG1haW50YWluIHNlbGVjdGlvbiBvcmRlcilcblx0ICogdG8gbWFrZSBldmVyeXRoaW5nIHJpZ2h0IHdpdGggdGhlIHdvcmxkIGFnYWluLlxuXHQgKi9cblx0cG9wUm93U3RhdGVGcm9tTW9kZWxEYXRhKCkge1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5kYXRhLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR0aGlzLnJvd3NJbmRpY2VzW2ldID0gdGhpcy5kYXRhW2ldLnBvcCgpLmRhdGE7XG5cdFx0XHR0aGlzLnJvd3NDbGFzc1tpXSA9IHRoaXMuZGF0YVtpXS5wb3AoKS5kYXRhO1xuXHRcdFx0dGhpcy5yb3dzQ29udGV4dFtpXSA9IHRoaXMuZGF0YVtpXS5wb3AoKS5kYXRhO1xuXHRcdFx0dGhpcy5yb3dzRXhwYW5kZWRbaV0gPSAhIXRoaXMuZGF0YVtpXS5wb3AoKS5kYXRhO1xuXHRcdFx0dGhpcy5yb3dzU2VsZWN0ZWRbaV0gPSAhIXRoaXMuZGF0YVtpXS5wb3AoKS5kYXRhO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgcm93IGlzIGZpbHRlcmVkIG91dC5cblx0ICpcblx0ICogQHBhcmFtIGluZGV4XG5cdCAqIEByZXR1cm5zIHRydWUgaWYgYW55IG9mIHRoZSBmaWx0ZXJzIGluIGhlYWRlciBmaWx0ZXJzIG91dCB0aGUgYGluZGV4YHRoIHJvd1xuXHQgKi9cblx0aXNSb3dGaWx0ZXJlZChpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgcmVhbEluZGV4ID0gdGhpcy5yZWFsUm93SW5kZXgoaW5kZXgpO1xuXHRcdHJldHVybiB0aGlzLmhlYWRlci5zb21lKChpdGVtLCBpKSA9PiBpdGVtICYmIGl0ZW0uZmlsdGVyKHRoaXMucm93KHJlYWxJbmRleClbaV0pKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZWxlY3QvZGVzZWxlY3QgYGluZGV4YHRoIHJvdyBiYXNlZCBvbiB2YWx1ZVxuXHQgKlxuXHQgKiBAcGFyYW0gaW5kZXggaW5kZXggb2YgdGhlIHJvdyB0byBzZWxlY3Rcblx0ICogQHBhcmFtIHZhbHVlIHN0YXRlIHRvIHNldCB0aGUgcm93IHRvLiBEZWZhdWx0cyB0byBgdHJ1ZWBcblx0ICovXG5cdHNlbGVjdFJvdyhpbmRleDogbnVtYmVyLCB2YWx1ZSA9IHRydWUpIHtcblx0XHRpZiAodGhpcy5pc1Jvd0Rpc2FibGVkKGluZGV4KSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLnJvd3NTZWxlY3RlZFtpbmRleF0gPSB2YWx1ZTtcblx0XHR0aGlzLnJvd3NTZWxlY3RlZENoYW5nZS5lbWl0KGluZGV4KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZWxlY3RzIG9yIGRlc2VsZWN0cyBhbGwgcm93cyBpbiB0aGUgbW9kZWxcblx0ICpcblx0ICogQHBhcmFtIHZhbHVlIHN0YXRlIHRvIHNldCBhbGwgcm93cyB0by4gRGVmYXVsdHMgdG8gYHRydWVgXG5cdCAqL1xuXHRzZWxlY3RBbGwodmFsdWUgPSB0cnVlKSB7XG5cdFx0aWYgKHRoaXMuZGF0YS5sZW5ndGggPj0gMSAmJiB0aGlzLmRhdGFbMF0ubGVuZ3RoID49IDEpIHtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzU2VsZWN0ZWQubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0dGhpcy5zZWxlY3RSb3coaSwgdmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLnNlbGVjdEFsbENoYW5nZS5uZXh0KHZhbHVlKTtcblx0fVxuXG5cdGlzUm93U2VsZWN0ZWQoaW5kZXg6IG51bWJlcikge1xuXHRcdHJldHVybiB0aGlzLnJvd3NTZWxlY3RlZFtpbmRleF07XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHJvdyBpcyBkaXNhYmxlZCBvciBub3QuXG5cdCAqL1xuXHRpc1Jvd0Rpc2FibGVkKGluZGV4OiBudW1iZXIpIHtcblx0XHRjb25zdCByb3cgPSB0aGlzLmRhdGFbaW5kZXhdIGFzIFRhYmxlUm93O1xuXHRcdHJldHVybiAhIXJvdy5kaXNhYmxlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeHBhbmRzL0NvbGxhcHNlcyBgaW5kZXhgdGggcm93IGJhc2VkIG9uIHZhbHVlXG5cdCAqXG5cdCAqIEBwYXJhbSBpbmRleCBpbmRleCBvZiB0aGUgcm93IHRvIGV4cGFuZCBvciBjb2xsYXBzZVxuXHQgKiBAcGFyYW0gdmFsdWUgZXhwYW5kZWQgc3RhdGUgb2YgdGhlIHJvdy4gYHRydWVgIGlzIGV4cGFuZGVkIGFuZCBgZmFsc2VgIGlzIGNvbGxhcHNlZFxuXHQgKi9cblx0ZXhwYW5kUm93KGluZGV4OiBudW1iZXIsIHZhbHVlID0gdHJ1ZSkge1xuXHRcdHRoaXMucm93c0V4cGFuZGVkW2luZGV4XSA9IHZhbHVlO1xuXHRcdHRoaXMucm93c0V4cGFuZGVkQ2hhbmdlLmVtaXQoaW5kZXgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHRydWUgaW5kZXggb2YgYSByb3cgYmFzZWQgb24gaXQncyByZWxhdGl2ZSBwb3NpdGlvbi5cblx0ICogTGlrZSBpbiBQeXRob24sIHBvc2l0aXZlIG51bWJlcnMgc3RhcnQgZnJvbSB0aGUgdG9wIGFuZFxuXHQgKiBuZWdhdGl2ZSBudW1iZXJzIHN0YXJ0IGZyb20gdGhlIGJvdHRvbS5cblx0ICpcblx0ICogQHBhcmFtIGluZGV4XG5cdCAqL1xuXHRwcm90ZWN0ZWQgcmVhbFJvd0luZGV4KGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLnJlYWxJbmRleChpbmRleCwgdGhpcy5kYXRhLmxlbmd0aCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgdHJ1ZSBpbmRleCBvZiBhIGNvbHVtbiBiYXNlZCBvbiBpdCdzIHJlbGF0aXZlIHBvc2l0aW9uLlxuXHQgKiBMaWtlIGluIFB5dGhvbiwgcG9zaXRpdmUgbnVtYmVycyBzdGFydCBmcm9tIHRoZSB0b3AgYW5kXG5cdCAqIG5lZ2F0aXZlIG51bWJlcnMgc3RhcnQgZnJvbSB0aGUgYm90dG9tLlxuXHQgKlxuXHQgKiBAcGFyYW0gaW5kZXhcblx0ICovXG5cdHByb3RlY3RlZCByZWFsQ29sdW1uSW5kZXgoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG5cdFx0cmV0dXJuIHRoaXMucmVhbEluZGV4KGluZGV4LCB0aGlzLmRhdGFbMF0ubGVuZ3RoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZW5lcmljIGZ1bmN0aW9uIHRvIGNhbGN1bGF0ZSB0aGUgcmVhbCBpbmRleCBvZiBzb21ldGhpbmcuXG5cdCAqIFVzZWQgYnkgYHJlYWxSb3dJbmRleCgpYCBhbmQgYHJlYWxDb2x1bW5JbmRleCgpYFxuXHQgKlxuXHQgKiBAcGFyYW0gaW5kZXhcblx0ICogQHBhcmFtIGxlbmd0aFxuXHQgKi9cblx0cHJvdGVjdGVkIHJlYWxJbmRleChpbmRleDogbnVtYmVyLCBsZW5ndGg6IG51bWJlcik6IG51bWJlciB7XG5cdFx0aWYgKGluZGV4ID09IG51bGwpIHtcblx0XHRcdHJldHVybiBsZW5ndGggLSAxO1xuXHRcdH0gZWxzZSBpZiAoaW5kZXggPj0gMCkge1xuXHRcdFx0cmV0dXJuIGluZGV4ID49IGxlbmd0aCA/IGxlbmd0aCAtIDEgOiBpbmRleDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIC1pbmRleCA+PSBsZW5ndGggPyAwIDogbGVuZ3RoICsgaW5kZXg7XG5cdFx0fVxuXHR9XG59XG4iXX0=
|