igniteui-angular 16.1.29 → 16.1.30
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/esm2022/lib/directives/for-of/for_of.directive.mjs +12 -1
- package/esm2022/lib/directives/tooltip/tooltip-target.directive.mjs +3 -2
- package/esm2022/lib/grids/grid-base.directive.mjs +5 -8
- package/esm2022/lib/grids/selection/selection.service.mjs +12 -16
- package/esm2022/lib/simple-combo/simple-combo.component.mjs +7 -6
- package/esm2022/lib/slider/slider.component.mjs +10 -8
- package/esm2022/lib/slider/thumb/thumb-slider.component.mjs +6 -2
- package/fesm2022/igniteui-angular.mjs +47 -35
- package/fesm2022/igniteui-angular.mjs.map +1 -1
- package/lib/directives/for-of/for_of.directive.d.ts +5 -0
- package/lib/slider/slider.component.d.ts +1 -1
- package/lib/slider/thumb/thumb-slider.component.d.ts +2 -1
- package/package.json +1 -1
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core';
|
|
2
2
|
import { Subject } from 'rxjs';
|
|
3
3
|
import { FilteringExpressionsTree } from '../../data-operations/filtering-expressions-tree';
|
|
4
|
-
import { GridPagingMode } from '../common/enums';
|
|
5
4
|
import { PivotUtil } from '../pivot-grid/pivot-util';
|
|
6
5
|
import * as i0 from "@angular/core";
|
|
7
6
|
import * as i1 from "../../core/utils";
|
|
@@ -342,20 +341,17 @@ export class IgxGridSelectionService {
|
|
|
342
341
|
return keys.some(k => this.isPivotRowSelected(k));
|
|
343
342
|
});
|
|
344
343
|
}
|
|
345
|
-
if (this.
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
this.
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
return selection;
|
|
357
|
-
}
|
|
358
|
-
return this.rowSelection.size ? this.grid.gridAPI.get_all_data(true).filter(row => this.rowSelection.has(this.getRecordKey(row))) : [];
|
|
344
|
+
if (!this.grid.primaryKey) {
|
|
345
|
+
return Array.from(this.rowSelection);
|
|
346
|
+
}
|
|
347
|
+
const selection = [];
|
|
348
|
+
this.rowSelection.forEach(rID => {
|
|
349
|
+
const rData = this.grid.gridAPI.get_all_data(true).find(row => this.getRecordKey(row) === rID);
|
|
350
|
+
const partialRowData = {};
|
|
351
|
+
partialRowData[this.grid.primaryKey] = rID;
|
|
352
|
+
selection.push(rData ? rData : partialRowData);
|
|
353
|
+
});
|
|
354
|
+
return selection;
|
|
359
355
|
}
|
|
360
356
|
/** Returns array of the selected row id's. */
|
|
361
357
|
getSelectedRows() {
|
|
@@ -749,4 +745,4 @@ export class IgxGridSelectionService {
|
|
|
749
745
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.8", ngImport: i0, type: IgxGridSelectionService, decorators: [{
|
|
750
746
|
type: Injectable
|
|
751
747
|
}], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i1.PlatformUtil }]; } });
|
|
752
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvc2VsZWN0aW9uL3NlbGVjdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsVUFBVSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDNUYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBWWpELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7O0FBSXJELE1BQU0sT0FBTyx1QkFBdUI7SUE2QmhDOzs7T0FHRztJQUNILElBQVcsTUFBTTtRQUViLDJEQUEyRDtRQUMzRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUV4QixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFFeEUsaURBQWlEO1FBQ2pELElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUNwRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7U0FDdkQ7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRUQsSUFBVyxhQUFhO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENB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QUFJLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUNqRyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLG9CQUFvQixDQUFDLElBQVU7UUFDbkMsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3hDLFNBQVMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUM1QixNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQzFCLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQixTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFTyxrQkFBa0I7UUFDdEIsT0FBTyxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDO1lBQ3RFLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBRU8sWUFBWSxDQUFDLEtBQUs7UUFDdEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1RCxDQUFDOzhHQTF6QlEsdUJBQXVCO2tIQUF2Qix1QkFBdUI7OzJGQUF2Qix1QkFBdUI7a0JBRG5DLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIsIEluamVjdGFibGUsIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUGxhdGZvcm1VdGlsIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLWV4cHJlc3Npb25zLXRyZWUnO1xuaW1wb3J0IHsgR3JpZFBhZ2luZ01vZGUgfSBmcm9tICcuLi9jb21tb24vZW51bXMnO1xuaW1wb3J0IHsgSVJvd1NlbGVjdGlvbkV2ZW50QXJncyB9IGZyb20gJy4uL2NvbW1vbi9ldmVudHMnO1xuaW1wb3J0IHsgR3JpZFR5cGUgfSBmcm9tICcuLi9jb21tb24vZ3JpZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgICBHcmlkU2VsZWN0aW9uUmFuZ2UsXG4gICAgSUNvbHVtblNlbGVjdGlvblN0YXRlLFxuICAgIElNdWx0aVJvd0xheW91dE5vZGUsXG4gICAgSVNlbGVjdGlvbktleWJvYXJkU3RhdGUsXG4gICAgSVNlbGVjdGlvbk5vZGUsXG4gICAgSVNlbGVjdGlvblBvaW50ZXJTdGF0ZSxcbiAgICBTZWxlY3Rpb25TdGF0ZVxufSBmcm9tICcuLi9jb21tb24vdHlwZXMnO1xuaW1wb3J0IHsgUGl2b3RVdGlsIH0gZnJvbSAnLi4vcGl2b3QtZ3JpZC9waXZvdC11dGlsJztcblxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSWd4R3JpZFNlbGVjdGlvblNlcnZpY2Uge1xuICAgIHB1YmxpYyBncmlkOiBHcmlkVHlwZTtcbiAgICBwdWJsaWMgZHJhZ01vZGUgPSBmYWxzZTtcbiAgICBwdWJsaWMgYWN0aXZlRWxlbWVudDogSVNlbGVjdGlvbk5vZGUgfCBudWxsO1xuICAgIHB1YmxpYyBrZXlib2FyZFN0YXRlID0ge30gYXMgSVNlbGVjdGlvbktleWJvYXJkU3RhdGU7XG4gICAgcHVibGljIHBvaW50ZXJTdGF0ZSA9IHt9IGFzIElTZWxlY3Rpb25Qb2ludGVyU3RhdGU7XG4gICAgcHVibGljIGNvbHVtbnNTdGF0ZSA9IHt9IGFzIElDb2x1bW5TZWxlY3Rpb25TdGF0ZTtcblxuICAgIHB1YmxpYyBzZWxlY3Rpb24gPSBuZXcgTWFwPG51bWJlciwgU2V0PG51bWJlcj4+KCk7XG4gICAgcHVibGljIHRlbXAgPSBuZXcgTWFwPG51bWJlciwgU2V0PG51bWJlcj4+KCk7XG4gICAgcHVibGljIHJvd1NlbGVjdGlvbjogU2V0PGFueT4gPSBuZXcgU2V0PGFueT4oKTtcbiAgICBwdWJsaWMgaW5kZXRlcm1pbmF0ZVJvd3M6IFNldDxhbnk+ID0gbmV3IFNldDxhbnk+KCk7XG4gICAgcHVibGljIGNvbHVtblNlbGVjdGlvbjogU2V0PHN0cmluZz4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBzZWxlY3RlZFJvd3NDaGFuZ2UgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgLyoqXG4gICAgICogVG9nZ2xlZCB3aGVuIGEgcG9pbnRlcmRvd24gZXZlbnQgaXMgdHJpZ2dlcmVkIGluc2lkZSB0aGUgZ3JpZCBib2R5IChjZWxscykuXG4gICAgICogV2hlbiBgZmFsc2VgIHRoZSBkcmFnIHNlbGVjdCBiZWhhdmlvciBpcyBkaXNhYmxlZC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHBvaW50ZXJFdmVudEluR3JpZEJvZHkgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgYWxsUm93c1NlbGVjdGVkOiBib29sZWFuO1xuICAgIHByaXZhdGUgX2xhc3RTZWxlY3RlZE5vZGU6IElTZWxlY3Rpb25Ob2RlO1xuICAgIHByaXZhdGUgX3JhbmdlczogU2V0PHN0cmluZz4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBwcml2YXRlIF9zZWxlY3Rpb25SYW5nZTogUmFuZ2U7XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHNlbGVjdGVkIHJhbmdlcyBpbiB0aGUgZ3JpZCBmcm9tIGJvdGhcbiAgICAgKiBrZXlib2FyZCBhbmQgcG9pbnRlciBpbnRlcmFjdGlvbnNcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHJhbmdlcygpOiBHcmlkU2VsZWN0aW9uUmFuZ2VbXSB7XG5cbiAgICAgICAgLy8gVGhlIGxhc3QgYWN0aW9uIHdhcyBrZXlib2FyZCArIHNoaWZ0IHNlbGVjdGlvbiAtPiBhZGQgaXRcbiAgICAgICAgdGhpcy5hZGRLZXlib2FyZFJhbmdlKCk7XG5cbiAgICAgICAgY29uc3QgcmFuZ2VzID0gQXJyYXkuZnJvbSh0aGlzLl9yYW5nZXMpLm1hcChyYW5nZSA9PiBKU09OLnBhcnNlKHJhbmdlKSk7XG5cbiAgICAgICAgLy8gTm8gcmFuZ2VzIGJ1dCB3ZSBoYXZlIGEgZm9jdXNlZCBjZWxsIC0+IGFkZCBpdFxuICAgICAgICBpZiAoIXJhbmdlcy5sZW5ndGggJiYgdGhpcy5hY3RpdmVFbGVtZW50ICYmIHRoaXMuZ3JpZC5pc0NlbGxTZWxlY3RhYmxlKSB7XG4gICAgICAgICAgICByYW5nZXMucHVzaCh0aGlzLmdlbmVyYXRlUmFuZ2UodGhpcy5hY3RpdmVFbGVtZW50KSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmFuZ2VzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcHJpbWFyeUJ1dHRvbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucG9pbnRlclN0YXRlLnByaW1hcnlCdXR0b247XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBwcmltYXJ5QnV0dG9uKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMucG9pbnRlclN0YXRlLnByaW1hcnlCdXR0b24gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHpvbmU6IE5nWm9uZSwgcHJvdGVjdGVkIHBsYXRmb3JtOiBQbGF0Zm9ybVV0aWwpIHtcbiAgICAgICAgdGhpcy5pbml0UG9pbnRlclN0YXRlKCk7XG4gICAgICAgIHRoaXMuaW5pdEtleWJvYXJkU3RhdGUoKTtcbiAgICAgICAgdGhpcy5pbml0Q29sdW1uc1N0YXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVzZXRzIHRoZSBrZXlib2FyZCBzdGF0ZVxuICAgICAqL1xuICAgIHB1YmxpYyBpbml0S2V5Ym9hcmRTdGF0ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5rZXlib2FyZFN0YXRlLm5vZGUgPSBudWxsO1xuICAgICAgICB0aGlzLmtleWJvYXJkU3RhdGUuc2hpZnQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5rZXlib2FyZFN0YXRlLnJhbmdlID0gbnVsbDtcbiAgICAgICAgdGhpcy5rZXlib2FyZFN0YXRlLmFjdGl2ZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlc2V0cyB0aGUgcG9pbnRlciBzdGF0ZVxuICAgICAqL1xuICAgIHB1YmxpYyBpbml0UG9pbnRlclN0YXRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnBvaW50ZXJTdGF0ZS5ub2RlID0gbnVsbDtcbiAgICAgICAgdGhpcy5wb2ludGVyU3RhdGUuY3RybCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnBvaW50ZXJTdGF0ZS5zaGlmdCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnBvaW50ZXJTdGF0ZS5yYW5nZSA9IG51bGw7XG4gICAgICAgIHRoaXMucG9pbnRlclN0YXRlLnByaW1hcnlCdXR0b24gPSB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlc2V0cyB0aGUgY29sdW1ucyBzdGF0ZVxuICAgICAqL1xuICAgIHB1YmxpYyBpbml0Q29sdW1uc1N0YXRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbHVtbnNTdGF0ZS5maWVsZCA9IG51bGw7XG4gICAgICAgIHRoaXMuY29sdW1uc1N0YXRlLnJhbmdlID0gW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIHNpbmdsZSBub2RlLlxuICAgICAqIFNpbmdsZSBjbGlja3MgfCBDdHJsICsgc2luZ2xlIGNsaWNrcyBvbiBjZWxscyBpcyB0aGUgdXN1YWwgY2FzZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkKG5vZGU6IElTZWxlY3Rpb25Ob2RlLCBhZGRUb1JhbmdlID0gdHJ1ZSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24uaGFzKG5vZGUucm93KSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uZ2V0KG5vZGUucm93KS5hZGQobm9kZS5jb2x1bW4pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0KG5vZGUucm93LCBuZXcgU2V0PG51bWJlcj4oKSkuZ2V0KG5vZGUucm93KS5hZGQobm9kZS5jb2x1bW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFkZFRvUmFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3Jhbmdlcy5hZGQoSlNPTi5zdHJpbmdpZnkodGhpcy5nZW5lcmF0ZVJhbmdlKG5vZGUpKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIHRoZSBhY3RpdmUga2V5Ym9hcmQgcmFuZ2Ugc2VsZWN0aW9uIChpZiBhbnkpIHRvIHRoZSBgcmFuZ2VzYCBtZXRhLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRLZXlib2FyZFJhbmdlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5rZXlib2FyZFN0YXRlLnJhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLl9yYW5nZXMuYWRkKEpTT04uc3RyaW5naWZ5KHRoaXMua2V5Ym9hcmRTdGF0ZS5yYW5nZSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZShub2RlOiBJU2VsZWN0aW9uTm9kZSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24uaGFzKG5vZGUucm93KSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uZ2V0KG5vZGUucm93KS5kZWxldGUobm9kZS5jb2x1bW4pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzQWN0aXZlTm9kZShub2RlKSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9yYW5nZXMuZGVsZXRlKEpTT04uc3RyaW5naWZ5KHRoaXMuZ2VuZXJhdGVSYW5nZShub2RlKSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0luTWFwKG5vZGU6IElTZWxlY3Rpb25Ob2RlKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAodGhpcy5zZWxlY3Rpb24uaGFzKG5vZGUucm93KSAmJiB0aGlzLnNlbGVjdGlvbi5nZXQobm9kZS5yb3cpLmhhcyhub2RlLmNvbHVtbikpIHx8XG4gICAgICAgICAgICAodGhpcy50ZW1wLmhhcyhub2RlLnJvdykgJiYgdGhpcy50ZW1wLmdldChub2RlLnJvdykuaGFzKG5vZGUuY29sdW1uKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNlbGVjdGVkKG5vZGU6IElTZWxlY3Rpb25Ob2RlKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAodGhpcy5pc0FjdGl2ZU5vZGUobm9kZSkgJiYgdGhpcy5ncmlkLmlzQ2VsbFNlbGVjdGFibGUpIHx8IHRoaXMuaXNJbk1hcChub2RlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNBY3RpdmVOb2RlKG5vZGU6IElTZWxlY3Rpb25Ob2RlKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGlzQWN0aXZlID0gdGhpcy5hY3RpdmVFbGVtZW50LmNvbHVtbiA9PT0gbm9kZS5jb2x1bW4gJiYgdGhpcy5hY3RpdmVFbGVtZW50LnJvdyA9PT0gbm9kZS5yb3c7XG4gICAgICAgICAgICBpZiAodGhpcy5ncmlkLmhhc0NvbHVtbkxheW91dHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsYXlvdXQgPSB0aGlzLmFjdGl2ZUVsZW1lbnQubGF5b3V0O1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0FjdGl2ZSAmJiB0aGlzLmlzQWN0aXZlTGF5b3V0KGxheW91dCwgbm9kZS5sYXlvdXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGlzQWN0aXZlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNBY3RpdmVMYXlvdXQoY3VycmVudDogSU11bHRpUm93TGF5b3V0Tm9kZSwgdGFyZ2V0OiBJTXVsdGlSb3dMYXlvdXROb2RlKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBjdXJyZW50LmNvbHVtblZpc2libGVJbmRleCA9PT0gdGFyZ2V0LmNvbHVtblZpc2libGVJbmRleDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkUmFuZ2VNZXRhKG5vZGU6IElTZWxlY3Rpb25Ob2RlLCBzdGF0ZT86IFNlbGVjdGlvblN0YXRlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Jhbmdlcy5hZGQoSlNPTi5zdHJpbmdpZnkodGhpcy5nZW5lcmF0ZVJhbmdlKG5vZGUsIHN0YXRlKSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVSYW5nZU1ldGEobm9kZTogSVNlbGVjdGlvbk5vZGUsIHN0YXRlPzogU2VsZWN0aW9uU3RhdGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcmFuZ2VzLmRlbGV0ZShKU09OLnN0cmluZ2lmeSh0aGlzLmdlbmVyYXRlUmFuZ2Uobm9kZSwgc3RhdGUpKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2VuZXJhdGVzIGEgbmV3IHNlbGVjdGlvbiByYW5nZSBmcm9tIHRoZSBnaXZlbiBgbm9kZWAuXG4gICAgICogSWYgYHN0YXRlYCBpcyBwYXNzZWQgaW5zdGVhZCBpdCB3aWxsIGdlbmVyYXRlIHRoZSByYW5nZSBiYXNlZCBvbiB0aGUgcGFzc2VkIGBub2RlYFxuICAgICAqIGFuZCB0aGUgc3RhcnQgbm9kZSBvZiB0aGUgYHN0YXRlYC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2VuZXJhdGVSYW5nZShub2RlOiBJU2VsZWN0aW9uTm9kZSwgc3RhdGU/OiBTZWxlY3Rpb25TdGF0ZSk6IEdyaWRTZWxlY3Rpb25SYW5nZSB7XG4gICAgICAgIHRoaXMuX2xhc3RTZWxlY3RlZE5vZGUgPSBub2RlO1xuXG4gICAgICAgIGlmICghc3RhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcm93U3RhcnQ6IG5vZGUucm93LFxuICAgICAgICAgICAgICAgIHJvd0VuZDogbm9kZS5yb3csXG4gICAgICAgICAgICAgICAgY29sdW1uU3RhcnQ6IG5vZGUuY29sdW1uLFxuICAgICAgICAgICAgICAgIGNvbHVtbkVuZDogbm9kZS5jb2x1bW5cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IHJvdywgY29sdW1uIH0gPSBzdGF0ZS5ub2RlO1xuICAgICAgICBjb25zdCByb3dTdGFydCA9IE1hdGgubWluKG5vZGUucm93LCByb3cpO1xuICAgICAgICBjb25zdCByb3dFbmQgPSBNYXRoLm1heChub2RlLnJvdywgcm93KTtcbiAgICAgICAgY29uc3QgY29sdW1uU3RhcnQgPSBNYXRoLm1pbihub2RlLmNvbHVtbiwgY29sdW1uKTtcbiAgICAgICAgY29uc3QgY29sdW1uRW5kID0gTWF0aC5tYXgobm9kZS5jb2x1bW4sIGNvbHVtbik7XG5cbiAgICAgICAgcmV0dXJuIHsgcm93U3RhcnQsIHJvd0VuZCwgY29sdW1uU3RhcnQsIGNvbHVtbkVuZCB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqXG4gICAgICovXG4gICAgcHVibGljIGtleWJvYXJkU3RhdGVPbktleWRvd24obm9kZTogSVNlbGVjdGlvbk5vZGUsIHNoaWZ0OiBib29sZWFuLCBzaGlmdFRhYjogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmtleWJvYXJkU3RhdGUuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pbml0UG9pbnRlclN0YXRlKCk7XG4gICAgICAgIHRoaXMua2V5Ym9hcmRTdGF0ZS5zaGlmdCA9IHNoaWZ0ICYmICFzaGlmdFRhYjtcbiAgICAgICAgaWYgKCF0aGlzLmdyaWQubmF2aWdhdGlvbi5pc0RhdGFSb3cobm9kZS5yb3cpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gS2IgbmF2aWdhdGlvbiB3aXRoIHNoaWZ0IGFuZCBubyBwcmV2aW91cyBub2RlLlxuICAgICAgICAvLyBDbGVhciB0aGUgY3VycmVudCBzZWxlY3Rpb24gaW5pdCB0aGUgc3RhcnQgbm9kZS5cbiAgICAgICAgaWYgKHRoaXMua2V5Ym9hcmRTdGF0ZS5zaGlmdCAmJiAhdGhpcy5rZXlib2FyZFN0YXRlLm5vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMua2V5Ym9hcmRTdGF0ZS5ub2RlID0gT2JqZWN0LmFzc2lnbih7fSwgbm9kZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMga2V5Ym9hcmRTdGF0ZU9uRm9jdXMobm9kZTogSVNlbGVjdGlvbk5vZGUsIGVtaXR0ZXI6IEV2ZW50RW1pdHRlcjxHcmlkU2VsZWN0aW9uUmFuZ2U+LCBkb20pOiB2b2lkIHtcbiAgICAgICAgY29uc3Qga2JTdGF0ZSA9IHRoaXMua2V5Ym9hcmRTdGF0ZTtcblxuICAgICAgICAvLyBGb2N1cyB0cmlnZ2VyZWQgYnkga2V5Ym9hcmQgbmF2aWdhdGlvblxuICAgICAgICBpZiAoa2JTdGF0ZS5hY3RpdmUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBsYXRmb3JtLmlzQ2hyb21pdW0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlU2VsZWN0aW9uQ2hyb21lKGRvbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTdGFydCBnZW5lcmF0aW5nIGEgcmFuZ2UgaWYgc2hpZnQgaXMgaG9sZFxuICAgICAgICAgICAgaWYgKGtiU3RhdGUuc2hpZnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYWdTZWxlY3Qobm9kZSwga2JTdGF0ZSk7XG4gICAgICAgICAgICAgICAga2JTdGF0ZS5yYW5nZSA9IHRoaXMuZ2VuZXJhdGVSYW5nZShub2RlLCBrYlN0YXRlKTtcbiAgICAgICAgICAgICAgICBlbWl0dGVyLmVtaXQodGhpcy5nZW5lcmF0ZVJhbmdlKG5vZGUsIGtiU3RhdGUpKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuaW5pdEtleWJvYXJkU3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMuYWRkKG5vZGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHBvaW50ZXJEb3duKG5vZGU6IElTZWxlY3Rpb25Ob2RlLCBzaGlmdDogYm9vbGVhbiwgY3RybDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmFkZEtleWJvYXJkUmFuZ2UoKTtcbiAgICAgICAgdGhpcy5pbml0S2V5Ym9hcmRTdGF0ZSgpO1xuICAgICAgICB0aGlzLnBvaW50ZXJTdGF0ZS5jdHJsID0gY3RybDtcbiAgICAgICAgdGhpcy5wb2ludGVyU3RhdGUuc2hpZnQgPSBzaGlmdDtcbiAgICAgICAgdGhpcy5wb2ludGVyRXZlbnRJbkdyaWRCb2R5ID0gdHJ1ZTtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVydXAnLCB0aGlzLnBvaW50ZXJPcmlnaW5IYW5kbGVyKTtcblxuICAgICAgICAvLyBObyBjdHJsIGtleSBwcmVzc2VkIC0gbm8gbXVsdGlwbGUgc2VsZWN0aW9uXG4gICAgICAgIGlmICghY3RybCkge1xuICAgICAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNoaWZ0KSB7XG4gICAgICAgICAgICAvLyBObyBwcmV2aW91c2x5ICdjbGlja2VkJyBub2RlLiBVc2UgdGhlIGxhc3QgYWN0aXZlIG5vZGUuXG4gICAgICAgICAgICBpZiAoIXRoaXMucG9pbnRlclN0YXRlLm5vZGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvaW50ZXJTdGF0ZS5ub2RlID0gdGhpcy5hY3RpdmVFbGVtZW50IHx8IG5vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBvaW50ZXJEb3duU2hpZnRLZXkobm9kZSk7XG4gICAgICAgICAgICB0aGlzLmNsZWFyVGV4dFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZW1vdmVSYW5nZU1ldGEobm9kZSk7XG4gICAgICAgIHRoaXMucG9pbnRlclN0YXRlLm5vZGUgPSBub2RlO1xuICAgIH1cblxuICAgIHB1YmxpYyBwb2ludGVyRG93blNoaWZ0S2V5KG5vZGU6IElTZWxlY3Rpb25Ob2RlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5zZWxlY3RSYW5nZShub2RlLCB0aGlzLnBvaW50ZXJTdGF0ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIG1lcmdlTWFwKHRhcmdldDogTWFwPG51bWJlciwgU2V0PG51bWJlcj4+LCBzb3VyY2U6IE1hcDxudW1iZXIsIFNldDxudW1iZXI+Pik6IHZvaWQge1xuICAgICAgICBjb25zdCBpdGVyYXRvciA9IHNvdXJjZS5lbnRyaWVzKCk7XG4gICAgICAgIGxldCBwYWlyID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICBsZXQga2V5OiBudW1iZXI7XG4gICAgICAgIGxldCB2YWx1ZTogU2V0PG51bWJlcj47XG5cbiAgICAgICAgd2hpbGUgKCFwYWlyLmRvbmUpIHtcbiAgICAgICAgICAgIFtrZXksIHZhbHVlXSA9IHBhaXIudmFsdWU7XG4gICAgICAgICAgICBpZiAodGFyZ2V0LmhhcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0YXJnZXQuZ2V0KGtleSk7XG4gICAgICAgICAgICAgICAgdmFsdWUuZm9yRWFjaChyZWNvcmQgPT4gbmV3VmFsdWUuYWRkKHJlY29yZCkpO1xuICAgICAgICAgICAgICAgIHRhcmdldC5zZXQoa2V5LCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRhcmdldC5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYWlyID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHBvaW50ZXJFbnRlcihub2RlOiBJU2VsZWN0aW9uTm9kZSwgZXZlbnQ6IFBvaW50ZXJFdmVudCk6IGJvb2xlYW4ge1xuICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvcG9pbnRlcmV2ZW50cy8jdGhlLWJ1dHRvbi1wcm9wZXJ0eVxuICAgICAgICB0aGlzLmRyYWdNb2RlID0gKGV2ZW50LmJ1dHRvbnMgPT09IDEgJiYgKGV2ZW50LmJ1dHRvbiA9PT0gLTEgfHwgZXZlbnQuYnV0dG9uID09PSAwKSkgJiYgdGhpcy5wb2ludGVyRXZlbnRJbkdyaWRCb2R5O1xuICAgICAgICBpZiAoIXRoaXMuZHJhZ01vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNsZWFyVGV4dFNlbGVjdGlvbigpO1xuXG4gICAgICAgIC8vIElmIHRoZSB1c2VycyB0cmlnZ2VycyBhIGRyYWctbGlrZSBldmVudCBieSBmaXJzdCBjbGlja2luZyBvdXRzaWRlIHRoZSBncmlkIGNlbGxzXG4gICAgICAgIC8vIGFuZCB0aGVuIGVudGVycyBpbiB0aGUgZ3JpZCBib2R5IHdlIG1heSBub3QgaGF2ZSBhIGluaXRpYWwgcG9pbnRlciBzdGFydGluZyBub2RlLlxuICAgICAgICAvLyBBc3N1bWUgdGhlIGZpcnN0IHBvaW50ZXJlbnRlciBub2RlIGlzIHdoZXJlIHdlIHN0YXJ0LlxuICAgICAgICBpZiAoIXRoaXMucG9pbnRlclN0YXRlLm5vZGUpIHtcbiAgICAgICAgICAgIHRoaXMucG9pbnRlclN0YXRlLm5vZGUgPSBub2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucG9pbnRlclN0YXRlLmN0cmwpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0UmFuZ2Uobm9kZSwgdGhpcy5wb2ludGVyU3RhdGUsIHRoaXMudGVtcCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRyYWdTZWxlY3Qobm9kZSwgdGhpcy5wb2ludGVyU3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBwb2ludGVyVXAobm9kZTogSVNlbGVjdGlvbk5vZGUsIGVtaXR0ZXI6IEV2ZW50RW1pdHRlcjxHcmlkU2VsZWN0aW9uUmFuZ2U+LCBmaXJlZE91dHNpZGVHcmlkPzogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5kcmFnTW9kZSB8fCBmaXJlZE91dHNpZGVHcmlkKSB7XG4gICAgICAgICAgICB0aGlzLnJlc3RvcmVUZXh0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLmFkZFJhbmdlTWV0YShub2RlLCB0aGlzLnBvaW50ZXJTdGF0ZSk7XG4gICAgICAgICAgICB0aGlzLm1lcmdlTWFwKHRoaXMuc2VsZWN0aW9uLCB0aGlzLnRlbXApO1xuICAgICAgICAgICAgdGhpcy56b25lLnJ1blRhc2soKCkgPT4gZW1pdHRlci5lbWl0KHRoaXMuZ2VuZXJhdGVSYW5nZShub2RlLCB0aGlzLnBvaW50ZXJTdGF0ZSkpKTtcbiAgICAgICAgICAgIHRoaXMudGVtcC5jbGVhcigpO1xuICAgICAgICAgICAgdGhpcy5kcmFnTW9kZSA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5wb2ludGVyU3RhdGUuc2hpZnQpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJUZXh0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLnJlc3RvcmVUZXh0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLmFkZFJhbmdlTWV0YShub2RlLCB0aGlzLnBvaW50ZXJTdGF0ZSk7XG4gICAgICAgICAgICBlbWl0dGVyLmVtaXQodGhpcy5nZW5lcmF0ZVJhbmdlKG5vZGUsIHRoaXMucG9pbnRlclN0YXRlKSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnBvaW50ZXJFdmVudEluR3JpZEJvZHkgJiYgdGhpcy5pc0FjdGl2ZU5vZGUobm9kZSkpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkKG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VsZWN0UmFuZ2Uobm9kZTogSVNlbGVjdGlvbk5vZGUsIHN0YXRlOiBTZWxlY3Rpb25TdGF0ZSwgY29sbGVjdGlvbjogTWFwPG51bWJlciwgU2V0PG51bWJlcj4+ID0gdGhpcy5zZWxlY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgaWYgKGNvbGxlY3Rpb24gPT09IHRoaXMudGVtcCkge1xuICAgICAgICAgICAgY29sbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgcm93U3RhcnQsIHJvd0VuZCwgY29sdW1uU3RhcnQsIGNvbHVtbkVuZCB9ID0gdGhpcy5nZW5lcmF0ZVJhbmdlKG5vZGUsIHN0YXRlKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IHJvd1N0YXJ0OyBpIDw9IHJvd0VuZDsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gY29sdW1uU3RhcnQgYXMgbnVtYmVyOyBqIDw9IChjb2x1bW5FbmQgYXMgbnVtYmVyKTsgaisrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbGxlY3Rpb24uaGFzKGkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb24uZ2V0KGkpLmFkZChqKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uLnNldChpLCBuZXcgU2V0PG51bWJlcj4oKSkuZ2V0KGkpLmFkZChqKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZHJhZ1NlbGVjdChub2RlOiBJU2VsZWN0aW9uTm9kZSwgc3RhdGU6IFNlbGVjdGlvblN0YXRlKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5wb2ludGVyU3RhdGUuY3RybCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdFJhbmdlKG5vZGUsIHN0YXRlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXIoY2xlYXJBY3JpdmVFbCA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIGlmIChjbGVhckFjcml2ZUVsKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUVsZW1lbnQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgIHRoaXMudGVtcC5jbGVhcigpO1xuICAgICAgICB0aGlzLl9yYW5nZXMuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXJUZXh0U2VsZWN0aW9uKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgIGlmIChzZWxlY3Rpb24ucmFuZ2VDb3VudCkge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uUmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvblJhbmdlLmNvbGxhcHNlKHRydWUpO1xuICAgICAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJlc3RvcmVUZXh0U2VsZWN0aW9uKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgIGlmICghc2VsZWN0aW9uLnJhbmdlQ291bnQpIHtcbiAgICAgICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZSh0aGlzLl9zZWxlY3Rpb25SYW5nZSB8fCBkb2N1bWVudC5jcmVhdGVSYW5nZSgpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXRTZWxlY3RlZFJvd3NEYXRhKCkge1xuICAgICAgICBpZiAodGhpcy5ncmlkLmlzUGl2b3QpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdyaWQuZGF0YVZpZXcuZmlsdGVyKHIgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleXMgPSByLmRpbWVuc2lvbnMubWFwKGQgPT4gUGl2b3RVdGlsLmdldFJlY29yZEtleShyLCBkKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGtleXMuc29tZShrID0+IHRoaXMuaXNQaXZvdFJvd1NlbGVjdGVkKGspKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmKHRoaXMucm93U2VsZWN0aW9uLnNpemUgJiYgKHRoaXMuZ3JpZCBhcyBhbnkpLnRvdGFsSXRlbUNvdW50IHx8IHRoaXMuZ3JpZC5wYWdpbmdNb2RlID09PSBHcmlkUGFnaW5nTW9kZS5SZW1vdGUpIHtcbiAgICAgICAgICAgIGlmKCF0aGlzLmdyaWQucHJpbWFyeUtleSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMucm93U2VsZWN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IFtdO1xuICAgICAgICAgICAgdGhpcy5yb3dTZWxlY3Rpb24uZm9yRWFjaChySUQgPT4gIHtcbiAgICAgICAgICAgICAgICBjb25zdCByRGF0YSA9IHRoaXMuZ3JpZC5ncmlkQVBJLmdldF9hbGxfZGF0YSh0cnVlKS5maW5kKHJvdyA9PiB0aGlzLmdldFJlY29yZEtleShyb3cpID09PSBySUQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnRpYWxSb3dEYXRhID0ge307XG4gICAgICAgICAgICAgICAgcGFydGlhbFJvd0RhdGFbdGhpcy5ncmlkLnByaW1hcnlLZXldID0gcklEO1xuICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5wdXNoKHJEYXRhID8gckRhdGEgOiBwYXJ0aWFsUm93RGF0YSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBzZWxlY3Rpb247XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucm93U2VsZWN0aW9uLnNpemUgPyB0aGlzLmdyaWQuZ3JpZEFQSS5nZXRfYWxsX2RhdGEodHJ1ZSkuZmlsdGVyKHJvdyA9PiB0aGlzLnJvd1NlbGVjdGlvbi5oYXModGhpcy5nZXRSZWNvcmRLZXkocm93KSkpIDogW107XG4gICAgfVxuXG4gICAgLyoqIFJldHVybnMgYXJyYXkgb2YgdGhlIHNlbGVjdGVkIHJvdyBpZCdzLiAqL1xuICAgIHB1YmxpYyBnZXRTZWxlY3RlZFJvd3MoKTogQXJyYXk8YW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvd1NlbGVjdGlvbi5zaXplID8gQXJyYXkuZnJvbSh0aGlzLnJvd1NlbGVjdGlvbi5rZXlzKCkpIDogW107XG4gICAgfVxuXG4gICAgLyoqIFJldHVybnMgYXJyYXkgb2YgdGhlIHJvd3MgaW4gaW5kZXRlcm1pbmF0ZSBzdGF0ZS4gKi9cbiAgICBwdWJsaWMgZ2V0SW5kZXRlcm1pbmF0ZVJvd3MoKTogQXJyYXk8YW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmluZGV0ZXJtaW5hdGVSb3dzLnNpemUgPyBBcnJheS5mcm9tKHRoaXMuaW5kZXRlcm1pbmF0ZVJvd3Mua2V5cygpKSA6IFtdO1xuICAgIH1cblxuICAgIC8qKiBDbGVhcnMgcm93IHNlbGVjdGlvbiwgaWYgZmlsdGVyaW5nIGlzIGFwcGxpZWQgY2xlYXJzIG9ubHkgc2VsZWN0ZWQgcm93cyBmcm9tIGZpbHRlcmVkIGRhdGEuICovXG4gICAgcHVibGljIGNsZWFyUm93U2VsZWN0aW9uKGV2ZW50Pyk6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWxlY3RlZFJvd3MgPSB0aGlzLmdldFNlbGVjdGVkUm93c0RhdGEoKTtcbiAgICAgICAgY29uc3QgcmVtb3ZlZFJlYyA9IHRoaXMuaXNGaWx0ZXJpbmdBcHBsaWVkKCkgP1xuICAgICAgICAgICAgdGhpcy5hbGxEYXRhLmZpbHRlcihyb3cgPT4gdGhpcy5pc1Jvd1NlbGVjdGVkKHRoaXMuZ2V0UmVjb3JkS2V5KHJvdykpKSA6IHNlbGVjdGVkUm93cztcbiAgICAgICAgY29uc3QgbmV3U2VsZWN0aW9uID0gdGhpcy5pc0ZpbHRlcmluZ0FwcGxpZWQoKSA/IHNlbGVjdGVkUm93cy5maWx0ZXIoeCA9PiAhcmVtb3ZlZFJlYy5pbmNsdWRlcyh4KSkgOiBbXTtcbiAgICAgICAgdGhpcy5lbWl0Um93U2VsZWN0aW9uRXZlbnQobmV3U2VsZWN0aW9uLCBbXSwgcmVtb3ZlZFJlYywgZXZlbnQsIHNlbGVjdGVkUm93cyk7XG4gICAgfVxuXG4gICAgLyoqIFNlbGVjdCBhbGwgcm93cywgaWYgZmlsdGVyaW5nIGlzIGFwcGxpZWQgc2VsZWN0IG9ubHkgZnJvbSBmaWx0ZXJlZCBkYXRhLiAqL1xuICAgIHB1YmxpYyBzZWxlY3RBbGxSb3dzKGV2ZW50Pykge1xuICAgICAgICBjb25zdCBhZGRlZFJvd3MgPSB0aGlzLmFsbERhdGEuZmlsdGVyKChyb3cpID0+ICF0aGlzLmlzUm93U2VsZWN0ZWQodGhpcy5nZXRSZWNvcmRLZXkocm93KSkpO1xuICAgICAgICBjb25zdCBzZWxlY3RlZFJvd3MgPSB0aGlzLmdldFNlbGVjdGVkUm93c0RhdGEoKTtcbiAgICAgICAgY29uc3QgbmV3U2VsZWN0aW9uID0gdGhpcy5yb3dTZWxlY3Rpb24uc2l6ZSA/IHNlbGVjdGVkUm93cy5jb25jYXQoYWRkZWRSb3dzKSA6IGFkZGVkUm93cztcbiAgICAgICAgdGhpcy5pbmRldGVybWluYXRlUm93cy5jbGVhcigpO1xuICAgICAgICB0aGlzLmVtaXRSb3dTZWxlY3Rpb25FdmVudChuZXdTZWxlY3Rpb24sIGFkZGVkUm93cywgW10sIGV2ZW50LCBzZWxlY3RlZFJvd3MpO1xuICAgIH1cblxuICAgIC8qKiBTZWxlY3QgdGhlIHNwZWNpZmllZCByb3cgYW5kIGVtaXQgZXZlbnQuICovXG4gICAgcHVibGljIHNlbGVjdFJvd0J5SWQocm93SUQsIGNsZWFyUHJldlNlbGVjdGlvbj8sIGV2ZW50Pyk6IHZvaWQge1xuICAgICAgICBpZiAoISh0aGlzLmdyaWQuaXNSb3dTZWxlY3RhYmxlIHx8IHRoaXMuZ3JpZC5pc1Bpdm90KSB8fCB0aGlzLmlzUm93RGVsZXRlZChyb3dJRCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjbGVhclByZXZTZWxlY3Rpb24gPSAhdGhpcy5ncmlkLmlzTXVsdGlSb3dTZWxlY3Rpb25FbmFibGVkIHx8IGNsZWFyUHJldlNlbGVjdGlvbjtcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5pc1Bpdm90KSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFBpdm90Um93QnlJZChyb3dJRCwgY2xlYXJQcmV2U2VsZWN0aW9uLCBldmVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRSb3dzID0gdGhpcy5nZXRTZWxlY3RlZFJvd3NEYXRhKCk7XG4gICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IGNsZWFyUHJldlNlbGVjdGlvbiA/IFt0aGlzLmdldFJvd0RhdGFCeUlkKHJvd0lEKV0gOiB0aGlzLnJvd1NlbGVjdGlvbi5oYXMocm93SUQpID9cbiAgICAgICAgICAgIHNlbGVjdGVkUm93cyA6IFsuLi5zZWxlY3RlZFJvd3MsIHRoaXMuZ2V0Um93RGF0YUJ5SWQocm93SUQpXTtcbiAgICAgICAgY29uc3QgcmVtb3ZlZCA9IGNsZWFyUHJldlNlbGVjdGlvbiA/IHNlbGVjdGVkUm93cyA6IFtdO1xuICAgICAgICB0aGlzLmVtaXRSb3dTZWxlY3Rpb25FdmVudChuZXdTZWxlY3Rpb24sIFt0aGlzLmdldFJvd0RhdGFCeUlkKHJvd0lEKV0sIHJlbW92ZWQsIGV2ZW50LCBzZWxlY3RlZFJvd3MpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZWxlY3RQaXZvdFJvd0J5SWQocm93SUQsIGNsZWFyUHJldlNlbGVjdGlvbjogYm9vbGVhbiwgZXZlbnQ/KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkUm93cyA9IHRoaXMuZ2V0U2VsZWN0ZWRSb3dzKCk7XG4gICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IGNsZWFyUHJldlNlbGVjdGlvbiA/IFtyb3dJRF0gOiB0aGlzLnJvd1NlbGVjdGlvbi5oYXMocm93SUQpID8gc2VsZWN0ZWRSb3dzIDogWy4uLnNlbGVjdGVkUm93cywgcm93SURdO1xuICAgICAgICBjb25zdCBhZGRlZCA9IHRoaXMuZ2V0UGl2b3RSb3dzQnlJZHMoW3Jvd0lEXSk7XG4gICAgICAgIGNvbnN0IHJlbW92ZWQgPSB0aGlzLmdldFBpdm90Um93c0J5SWRzKGNsZWFyUHJldlNlbGVjdGlvbiA/IHNlbGVjdGVkUm93cyA6IFtdKTtcbiAgICAgICAgdGhpcy5lbWl0Um93U2VsZWN0aW9uRXZlbnRQaXZvdEdyaWQoc2VsZWN0ZWRSb3dzLCBuZXdTZWxlY3Rpb24sIGFkZGVkLCByZW1vdmVkLCBldmVudCk7XG4gICAgfVxuXG4gICAgLyoqIERlc2VsZWN0IHRoZSBzcGVjaWZpZWQgcm93IGFuZCBlbWl0IGV2ZW50LiAqL1xuICAgIHB1YmxpYyBkZXNlbGVjdFJvdyhyb3dJRCwgZXZlbnQ/KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5pc1Jvd1NlbGVjdGVkKHJvd0lEKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmKHRoaXMuZ3JpZC5pc1Bpdm90KSB7XG4gICAgICAgICAgICB0aGlzLmRlc2VsZWN0UGl2b3RSb3dCeUlEKHJvd0lELCBldmVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRSb3dzID0gdGhpcy5nZXRTZWxlY3RlZFJvd3NEYXRhKCk7XG4gICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IHNlbGVjdGVkUm93cy5maWx0ZXIociA9PiAgdGhpcy5nZXRSZWNvcmRLZXkocikgIT09IHJvd0lEKTtcbiAgICAgICAgaWYgKHRoaXMucm93U2VsZWN0aW9uLnNpemUgJiYgdGhpcy5yb3dTZWxlY3Rpb24uaGFzKHJvd0lEKSkge1xuICAgICAgICAgICAgdGhpcy5lbWl0Um93U2VsZWN0aW9uRXZlbnQobmV3U2VsZWN0aW9uLCBbXSwgW3RoaXMuZ2V0Um93RGF0YUJ5SWQocm93SUQpXSwgZXZlbnQsIHNlbGVjdGVkUm93cyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZGVzZWxlY3RQaXZvdFJvd0J5SUQocm93SUQsIGV2ZW50Pykge1xuICAgICAgICBpZiAodGhpcy5yb3dTZWxlY3Rpb24uc2l6ZSAmJiB0aGlzLnJvd1NlbGVjdGlvbi5oYXMocm93SUQpKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyU2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3RlZFJvd3MoKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IGN1cnJTZWxlY3Rpb24uZmlsdGVyKHIgPT4gciAhPT0gcm93SUQpO1xuICAgICAgICAgICAgY29uc3QgcmVtb3ZlZCAgPSB0aGlzLmdldFBpdm90Um93c0J5SWRzKFtyb3dJRF0pO1xuICAgICAgICAgICAgdGhpcy5lbWl0Um93U2VsZWN0aW9uRXZlbnRQaXZvdEdyaWQoY3VyclNlbGVjdGlvbiwgbmV3U2VsZWN0aW9uLCBbXSwgcmVtb3ZlZCwgZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbWl0Um93U2VsZWN0aW9uRXZlbnRQaXZvdEdyaWQoY3VyclNlbGVjdGlvbiwgbmV3U2VsZWN0aW9uLCBhZGRlZCwgcmVtb3ZlZCwgZXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuYXJlRXF1YWxDb2xsZWN0aW9ucyhjdXJyU2VsZWN0aW9uLCBuZXdTZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VyclNlbGVjdGVkUm93cyA9IHRoaXMuZ2V0U2VsZWN0ZWRSb3dzRGF0YSgpO1xuICAgICAgICBjb25zdCBhcmdzOiBJUm93U2VsZWN0aW9uRXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgb3duZXI6IHRoaXMuZ3JpZCxcbiAgICAgICAgICAgIG9sZFNlbGVjdGlvbjogY3VyclNlbGVjdGVkUm93cyxcbiAgICAgICAgICAgIG5ld1NlbGVjdGlvbjogdGhpcy5nZXRQaXZvdFJvd3NCeUlkcyhuZXdTZWxlY3Rpb24pLFxuICAgICAgICAgICAgYWRkZWQsXG4gICAgICAgICAgICByZW1vdmVkLFxuICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICBjYW5jZWw6IGZhbHNlLFxuICAgICAgICAgICAgYWxsUm93c1NlbGVjdGVkOiB0aGlzLmFyZUFsbFJvd1NlbGVjdGVkKG5ld1NlbGVjdGlvbilcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5ncmlkLnJvd1NlbGVjdGlvbkNoYW5naW5nLmVtaXQoYXJncyk7XG4gICAgICAgIGlmIChhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgdGhpcy5jbGVhckhlYWRlckNCU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdFJvd3NXaXRoTm9FdmVudChuZXdTZWxlY3Rpb24sIHRydWUpO1xuICAgIH1cblxuICAgIC8qKiBTZWxlY3QgdGhlIHNwZWNpZmllZCByb3dzIGFuZCBlbWl0IGV2ZW50LiAqL1xuICAgIHB1YmxpYyBzZWxlY3RSb3dzKGtleXM6IGFueVtdLCBjbGVhclByZXZTZWxlY3Rpb24/OiBib29sZWFuLCBldmVudD8pOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmdyaWQuaXNNdWx0aVJvd1NlbGVjdGlvbkVuYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByb3dzVG9TZWxlY3QgPSBrZXlzLmZpbHRlcih4ID0+ICF0aGlzLmlzUm93RGVsZXRlZCh4KSAmJiAhdGhpcy5yb3dTZWxlY3Rpb24uaGFzKHgpKTtcbiAgICAgICAgaWYgKCFyb3dzVG9TZWxlY3QubGVuZ3RoICYmICFjbGVhclByZXZTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIC8vIG5vIHZhbGlkL2FkZGl0aW9uYWwgcm93cyB0byBzZWxlY3QgYW5kIG5vIGNsZWFyXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZWxlY3RlZFJvd3MgPSB0aGlzLmdldFNlbGVjdGVkUm93c0RhdGEoKTtcbiAgICAgICAgcm93c1RvU2VsZWN0ID0gdGhpcy5ncmlkLnByaW1hcnlLZXkgPyByb3dzVG9TZWxlY3QubWFwKHIgPT4gdGhpcy5nZXRSb3dEYXRhQnlJZChyKSkgOiByb3dzVG9TZWxlY3Q7XG4gICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IGNsZWFyUHJldlNlbGVjdGlvbiA/IHJvd3NUb1NlbGVjdCA6IFsuLi5zZWxlY3RlZFJvd3MsIC4uLnJvd3NUb1NlbGVjdF07XG4gICAgICAgIGNvbnN0IGtleXNBc1NldCA9IG5ldyBTZXQocm93c1RvU2VsZWN0KTtcbiAgICAgICAgY29uc3QgcmVtb3ZlZCA9IGNsZWFyUHJldlNlbGVjdGlvbiA/IHNlbGVjdGVkUm93cy5maWx0ZXIoeCA9PiAha2V5c0FzU2V0Lmhhcyh4KSkgOiBbXTtcbiAgICAgICAgdGhpcy5lbWl0Um93U2VsZWN0aW9uRXZlbnQobmV3U2VsZWN0aW9uLCByb3dzVG9TZWxlY3QsIHJlbW92ZWQsIGV2ZW50LCBzZWxlY3RlZFJvd3MpO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZXNlbGVjdFJvd3Moa2V5czogYW55W10sIGV2ZW50Pyk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMucm93U2VsZWN0aW9uLnNpemUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcm93c1RvRGVzZWxlY3QgPSBrZXlzLmZpbHRlcih4ID0+IHRoaXMucm93U2VsZWN0aW9uLmhhcyh4KSk7XG4gICAgICAgIGlmICghcm93c1RvRGVzZWxlY3QubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRSb3dzID0gdGhpcy5nZXRTZWxlY3RlZFJvd3NEYXRhKCk7XG4gICAgICAgIHJvd3NUb0Rlc2VsZWN0ID0gdGhpcy5ncmlkLnByaW1hcnlLZXkgPyByb3dzVG9EZXNlbGVjdC5tYXAociA9PiB0aGlzLmdldFJvd0RhdGFCeUlkKHIpKSA6IHJvd3NUb0Rlc2VsZWN0O1xuICAgICAgICBjb25zdCBrZXlzQXNTZXQgPSBuZXcgU2V0KHJvd3NUb0Rlc2VsZWN0KTtcbiAgICAgICAgY29uc3QgbmV3U2VsZWN0aW9uID0gc2VsZWN0ZWRSb3dzLmZpbHRlcihyID0+ICFrZXlzQXNTZXQuaGFzKHIpKTtcbiAgICAgICAgdGhpcy5lbWl0Um93U2VsZWN0aW9uRXZlbnQobmV3U2VsZWN0aW9uLCBbXSwgcm93c1RvRGVzZWxlY3QsIGV2ZW50LCBzZWxlY3RlZFJvd3MpO1xuICAgIH1cblxuICAgIC8qKiBTZWxlY3Qgc3BlY2lmaWVkIHJvd3MuIE5vIGV2ZW50IGlzIGVtaXR0ZWQuICovXG4gICAgcHVibGljIHNlbGVjdFJvd3NXaXRoTm9FdmVudChyb3dJRHM6IGFueVtdLCBjbGVhclByZXZTZWxlY3Rpb24/KTogdm9pZCB7XG4gICAgICAgIGlmIChjbGVhclByZXZTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMucm93U2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgIH1cbiAgICAgICAgcm93SURzLmZvckVhY2gocm93SUQgPT4gdGhpcy5yb3dTZWxlY3Rpb24uYWRkKHJvd0lEKSk7XG4gICAgICAgIHRoaXMuY2xlYXJIZWFkZXJDQlN0YXRlKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzQ2hhbmdlLm5leHQoKTtcbiAgICB9XG5cbiAgICAvKiogRGVzZWxlY3Qgc3BlY2lmaWVkIHJvd3MuIE5vIGV2ZW50IGlzIGVtaXR0ZWQuICovXG4gICAgcHVibGljIGRlc2VsZWN0Um93c1dpdGhOb0V2ZW50KHJvd0lEczogYW55W10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbGVhckhlYWRlckNCU3RhdGUoKTtcbiAgICAgICAgcm93SURzLmZvckVhY2gocm93SUQgPT4gdGhpcy5yb3dTZWxlY3Rpb24uZGVsZXRlKHJvd0lEKSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzQ2hhbmdlLm5leHQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNSb3dTZWxlY3RlZChyb3dJRCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yb3dTZWxlY3Rpb24uc2l6ZSA+IDAgJiYgdGhpcy5yb3dTZWxlY3Rpb24uaGFzKHJvd0lEKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNQaXZvdFJvd1NlbGVjdGVkKHJvd0lEKTogYm9vbGVhbiB7XG4gICAgICAgIGxldCBjb250YWlucyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJvd1NlbGVjdGlvbi5mb3JFYWNoKHggPT4ge1xuICAgICAgICAgICAgY29uc3QgY29ycmVjdFJvd0lkID0gcm93SUQucmVwbGFjZSh4LCcnKTtcbiAgICAgICAgICAgIGlmIChyb3dJRC5pbmNsdWRlcyh4KSAmJiAoY29ycmVjdFJvd0lkID09PSAnJyB8fCBjb3JyZWN0Um93SWQuc3RhcnRzV2l0aCgnXycpKSApIHtcbiAgICAgICAgICAgICAgICBjb250YWlucyA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMucm93U2VsZWN0aW9uLnNpemUgPiAwICYmIGNvbnRhaW5zO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc1Jvd0luSW5kZXRlcm1pbmF0ZVN0YXRlKHJvd0lEKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmluZGV0ZXJtaW5hdGVSb3dzLnNpemUgPiAwICYmIHRoaXMuaW5kZXRlcm1pbmF0ZVJvd3MuaGFzKHJvd0lEKTtcbiAgICB9XG5cbiAgICAvKiogU2VsZWN0IHJhbmdlIGZyb20gbGFzdCBzZWxlY3RlZCByb3cgdG8gdGhlIGN1cnJlbnQgc3BlY2lmaWVkIHJvdy4gKi9cbiAgICBwdWJsaWMgc2VsZWN0TXVsdGlwbGVSb3dzKHJvd0lELCByb3dEYXRhLCBldmVudD8pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbGVhckhlYWRlckNCU3RhdGUoKTtcbiAgICAgICAgaWYgKCF0aGlzLnJvd1NlbGVjdGlvbi5zaXplIHx8IHRoaXMuaXNSb3dEZWxldGVkKHJvd0lEKSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RSb3dCeUlkKHJvd0lEKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBncmlkRGF0YSA9IHRoaXMuYWxsRGF0YTtcbiAgICAgICAgY29uc3QgbGFzdFJvd0lEID0gdGhpcy5nZXRTZWxlY3RlZFJvd3MoKVt0aGlzLnJvd1NlbGVjdGlvbi5zaXplIC0gMV07XG4gICAgICAgIGNvbnN0IGN1cnJJbmRleCA9IGdyaWREYXRhLmluZGV4T2YodGhpcy5nZXRSb3dEYXRhQnlJZChsYXN0Um93SUQpKTtcbiAgICAgICAgY29uc3QgbmV3SW5kZXggPSBncmlkRGF0YS5pbmRleE9mKHJvd0RhdGEpO1xuICAgICAgICBjb25zdCByb3dzID0gZ3JpZERhdGEuc2xpY2UoTWF0aC5taW4oY3VyckluZGV4LCBuZXdJbmRleCksIE1hdGgubWF4KGN1cnJJbmRleCwgbmV3SW5kZXgpICsgMSk7XG4gICAgICAgIGNvbnN0IGN1cnJTZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGVkUm93c0RhdGEoKTtcbiAgICAgICAgY29uc3QgYWRkZWQgPSByb3dzLmZpbHRlcihyID0+ICF0aGlzLmlzUm93U2VsZWN0ZWQodGhpcy5nZXRSZWNvcmRLZXkocikpKTtcbiAgICAgICAgY29uc3QgbmV3U2VsZWN0aW9uID0gY3VyclNlbGVjdGlvbi5jb25jYXQoYWRkZWQpO1xuICAgICAgICB0aGlzLmVtaXRSb3dTZWxlY3Rpb25FdmVudChuZXdTZWxlY3Rpb24sIGFkZGVkLCBbXSwgZXZlbnQsIGN1cnJTZWxlY3Rpb24pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhcmVBbGxSb3dTZWxlY3RlZChuZXdTZWxlY3Rpb24/KTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghdGhpcy5ncmlkLmRhdGEgJiYgIW5ld1NlbGVjdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmFsbFJvd3NTZWxlY3RlZCAhPT0gdW5kZWZpbmVkICYmICFuZXdTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFsbFJvd3NTZWxlY3RlZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZWxlY3RlZERhdGEgPSBuZXdTZWxlY3Rpb24gPyBuZXdTZWxlY3Rpb24gOiBbLi4udGhpcy5yb3dTZWxlY3Rpb25dXG4gICAgICAgIGNvbnN0IGFsbERhdGEgPSB0aGlzLmdldFJvd0lEcyh0aGlzLmFsbERhdGEpO1xuICAgICAgICBjb25zdCB1blNlbGVjdGVkUm93cyA9IGFsbERhdGEuZmlsdGVyKHJvdyA9PiAhc2VsZWN0ZWREYXRhLmluY2x1ZGVzKHJvdykpO1xuICAgICAgICByZXR1cm4gdGhpcy5hbGxSb3dzU2VsZWN0ZWQgPSB0aGlzLmFsbERhdGEubGVuZ3RoID4gMCAmJiB1blNlbGVjdGVkUm93cy5sZW5ndGggPT09IDA7XG4gICAgfVxuXG4gICAgcHVibGljIGhhc1NvbWVSb3dTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZmlsdGVyZWREYXRhID0gdGhpcy5pc0ZpbHRlcmluZ0FwcGxpZWQoKSA/XG4gICAgICAgICAgICB0aGlzLmdldFJvd0lEcyh0aGlzLmdyaWQuZmlsdGVyZWREYXRhKS5zb21lKHJJRCA9PiB0aGlzLmlzUm93U2VsZWN0ZWQocklEKSkgOiB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcy5yb3dTZWxlY3Rpb24uc2l6ZSA+IDAgJiYgZmlsdGVyZWREYXRhICYmICF0aGlzLmFyZUFsbFJvd1NlbGVjdGVkKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBmaWx0ZXJlZFNlbGVjdGVkUm93SWRzKCk6IGFueVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNGaWx0ZXJpbmdBcHBsaWVkKCkgP1xuICAgICAgICAgICAgdGhpcy5nZXRSb3dJRHModGhpcy5hbGxEYXRhKS5maWx0ZXIocm93SUQgPT4gdGhpcy5pc1Jvd1NlbGVjdGVkKHJvd0lEKSkgOlxuICAgICAgICAgICAgdGhpcy5nZXRTZWxlY3RlZFJvd3MoKS5maWx0ZXIocm93SUQgPT4gIXRoaXMuaXNSb3dEZWxldGVkKHJvd0lEKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGVtaXRSb3dTZWxlY3Rpb25FdmVudChuZXdTZWxlY3Rpb24sIGFkZGVkLCByZW1vdmVkLCBldmVudD8sIGN1cnJTZWxlY3Rpb24/KTogYm9vbGVhbiB7XG4gICAgICAgIGN1cnJTZWxlY3Rpb24gPSBjdXJyU2VsZWN0aW9uID8/IHRoaXMuZ2V0U2VsZWN0ZWRSb3dzRGF0YSgpO1xuICAgICAgICBpZiAodGhpcy5hcmVFcXVhbENvbGxlY3Rpb25zKGN1cnJTZWxlY3Rpb24sIG5ld1NlbGVjdGlvbikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhcmdzOiBJUm93U2VsZWN0aW9uRXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgb3duZXI6IHRoaXMuZ3JpZCxcbiAgICAgICAgICAgIG9sZFNlbGVjdGlvbjogY3VyclNlbGVjdGlvbixcbiAgICAgICAgICAgIG5ld1NlbGVjdGlvbixcbiAgICAgICAgICAgIGFkZGVkLCByZW1vdmVkLFxuICAgICAgICAgICAgZXZlbnQsIGNhbmNlbDogZmFsc2UsXG4gICAgICAgICAgICBhbGxSb3dzU2VsZWN0ZWQ6IHRoaXMuYXJlQWxsUm93U2VsZWN0ZWQobmV3U2VsZWN0aW9uLm1hcChyID0+ICB0aGlzLmdldFJlY29yZEtleShyKSkpXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5ncmlkLnJvd1NlbGVjdGlvbkNoYW5naW5nLmVtaXQoYXJncyk7XG4gICAgICAgIGlmIChhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgdGhpcy5jbGVhckhlYWRlckNCU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdFJvd3NXaXRoTm9FdmVudChhcmdzLm5ld1NlbGVjdGlvbi5tYXAociA9PiB0aGlzLmdldFJlY29yZEtleShyKSksIHRydWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRQaXZvdFJvd3NCeUlkcyhpZHM6IGFueVtdKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQuZGF0YVZpZXcuZmlsdGVyKHIgPT4ge1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IHIuZGltZW5zaW9ucy5tYXAoZCA9PiBQaXZvdFV0aWwuZ2V0UmVjb3JkS2V5KHIsIGQpKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgU2V0KGlkcy5jb25jYXQoa2V5cykpLnNpemUgPCBpZHMubGVuZ3RoICsga2V5cy5sZW5ndGg7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRSb3dEYXRhQnlJZChyb3dJRCk6IGFueSB7XG4gICAgICAgIGlmICghdGhpcy5ncmlkLnByaW1hcnlLZXkpIHtcbiAgICAgICAgICAgIHJldHVybiByb3dJRDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb3dJbmRleCA9IHRoaXMuZ2V0Um93SURzKHRoaXMuZ3JpZC5ncmlkQVBJLmdldF9hbGxfZGF0YSh0cnVlKSkuaW5kZXhPZihyb3dJRCk7XG4gICAgICAgIHJldHVybiByb3dJbmRleCA8IDAgPyByb3dJRCA6IHRoaXMuZ3JpZC5ncmlkQVBJLmdldF9hbGxfZGF0YSh0cnVlKVtyb3dJbmRleF07XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFySGVhZGVyQ0JTdGF0ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hbGxSb3dzU2VsZWN0ZWQgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFJvd0lEcyhkYXRhKTogQXJyYXk8YW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQucHJpbWFyeUtleSAmJiBkYXRhLmxlbmd0aCA/IGRhdGEubWFwKHJlYyA9PiByZWNbdGhpcy5ncmlkLnByaW1hcnlLZXldKSA6IGRhdGE7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFJlY29yZEtleShyZWNvcmQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5wcmltYXJ5S2V5ID8gcmVjb3JkW3RoaXMuZ3JpZC5wcmltYXJ5S2V5XSA6IHJlY29yZDtcbiAgICB9XG5cbiAgICAvKiogQ2xlYXIgcm93U2VsZWN0aW9uIGFuZCB1cGRhdGUgY2hlY2tib3ggc3RhdGUgKi9cbiAgICBwdWJsaWMgY2xlYXJBbGxTZWxlY3RlZFJvd3MoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucm93U2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuaW5kZXRlcm1pbmF0ZVJvd3MuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5jbGVhckhlYWRlckNCU3RhdGUoKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3NDaGFuZ2UubmV4dCgpO1xuICAgIH1cblxuICAgIC8qKiBSZXR1cm5zIGFsbCBkYXRhIGluIHRoZSBncmlkLCB3aXRoIGFwcGxpZWQgZmlsdGVyaW5nIGFuZCBzb3J0aW5nIGFuZCB3aXRob3V0IGRlbGV0ZWQgcm93cy4gKi9cbiAgICBwdWJsaWMgZ2V0IGFsbERhdGEoKTogQXJyYXk8YW55PiB7XG4gICAgICAgIGxldCBhbGxEYXRhO1xuICAgICAgICBpZiAodGhpcy5pc0ZpbHRlcmluZ0FwcGxpZWQoKSB8fCB0aGlzLmdyaWQuc29ydGluZ0V4cHJlc3Npb25zLmxlbmd0aCB8fCB0aGlzLmdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBhbGxEYXRhID0gdGhpcy5ncmlkLnBpbm5lZFJlY29yZHNDb3VudCA/IHRoaXMuZ3JpZC5fZmlsdGVyZWRTb3J0ZWRVbnBpbm5lZERhdGEgOiB0aGlzLmdyaWQuZmlsdGVyZWRTb3J0ZWREYXRhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYWxsRGF0YSA9IHRoaXMuZ3JpZC5ncmlkQVBJLmdldF9hbGxfZGF0YSh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWxsRGF0YS5maWx0ZXIockRhdGEgPT4gIXRoaXMuaXNSb3dEZWxldGVkKHRoaXMuZ3JpZC5ncmlkQVBJLmdldF9yb3dfaWQockRhdGEpKSk7XG4gICAgfVxuXG4gICAgLyoqIFJldHVybnMgYXJyYXkgb2YgdGhlIHNlbGVjdGVkIGNvbHVtbnMgZmllbGRzLiAqL1xuICAgIHB1YmxpYyBnZXRTZWxlY3RlZENvbHVtbnMoKTogQXJyYXk8YW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtblNlbGVjdGlvbi5zaXplID8gQXJyYXkuZnJvbSh0aGlzLmNvbHVtblNlbGVjdGlvbi5rZXlzKCkpIDogW107XG4gICAgfVxuXG4gICAgcHVibGljIGlzQ29sdW1uU2VsZWN0ZWQoZmllbGQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW5TZWxlY3Rpb24uc2l6ZSA+IDAgJiYgdGhpcy5jb2x1bW5TZWxlY3Rpb24uaGFzKGZpZWxkKTtcbiAgICB9XG5cbiAgICAvKiogU2VsZWN0IHRoZSBzcGVjaWZpZWQgY29sdW1uIGFuZCBlbWl0IGV2ZW50LiAqL1xuICAgIHB1YmxpYyBzZWxlY3RDb2x1bW4oZmllbGQ6IHN0cmluZywgY2xlYXJQcmV2U2VsZWN0aW9uPywgc2VsZWN0Q29sdW1uc1JhbmdlPywgZXZlbnQ/KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN0YXRlQ29sdW1uID0gdGhpcy5jb2x1bW5zU3RhdGUuZmllbGQgPyB0aGlzLmdyaWQuZ2V0Q29sdW1uQnlOYW1lKHRoaXMuY29sdW1uc1N0YXRlLmZpZWxkKSA6IG51bGw7XG4gICAgICAgIGlmICghZXZlbnQgfHwgIXN0YXRlQ29sdW1uIHx8IHN0YXRlQ29sdW1uLnZpc2libGVJbmRleCA8IDAgfHwgIXNlbGVjdENvbHVtbnNSYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5zU3RhdGUuZmllbGQgPSBmaWVsZDtcbiAgICAgICAgICAgIHRoaXMuY29sdW1uc1N0YXRlLnJhbmdlID0gW107XG5cbiAgICAgICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IGNsZWFyUHJldlNlbGVjdGlvbiA/IFtmaWVsZF0gOiB0aGlzLmdldFNlbGVjdGVkQ29sdW1ucygpLmluZGV4T2YoZmllbGQpICE9PSAtMSA/XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRTZWxlY3RlZENvbHVtbnMoKSA6IFsuLi50aGlzLmdldFNlbGVjdGVkQ29sdW1ucygpLCBmaWVsZF07XG4gICAgICAgICAgICBjb25zdCByZW1vdmVkID0gY2xlYXJQcmV2U2VsZWN0aW9uID8gdGhpcy5nZXRTZWxlY3RlZENvbHVtbnMoKS5maWx0ZXIoY29sRmllbGQgPT4gY29sRmllbGQgIT09IGZpZWxkKSA6IFtdO1xuICAgICAgICAgICAgY29uc3QgYWRkZWQgPSB0aGlzLmlzQ29sdW1uU2VsZWN0ZWQoZmllbGQpID8gW10gOiBbZmllbGRdO1xuICAgICAgICAgICAgdGhpcy5lbWl0Q29sdW1uU2VsZWN0aW9uRXZlbnQobmV3U2VsZWN0aW9uLCBhZGRlZCwgcmVtb3ZlZCwgZXZlbnQpO1xuICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdENvbHVtbnNSYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RDb2x1bW5zUmFuZ2UoZmllbGQsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBTZWxlY3Qgc3BlY2lmaWVkIGNvbHVtbnMuIEFuZCBlbWl0IGV2ZW50LiAqL1xuICAgIHB1YmxpYyBzZWxlY3RDb2x1bW5zKGZpZWxkczogc3RyaW5nW10sIGNsZWFyUHJldlNlbGVjdGlvbj8sIHNlbGVjdENvbHVtbnNSYW5nZT8sIGV2ZW50Pyk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb2x1bW5zID0gZmllbGRzLm1hcChmID0+IHRoaXMuZ3JpZC5nZXRDb2x1bW5CeU5hbWUoZikpLnNvcnQoKGEsIGIpID0+IGEudmlzaWJsZUluZGV4IC0gYi52aXNpYmxlSW5kZXgpO1xuICAgICAgICBjb25zdCBzdGF0ZUNvbHVtbiA9IHRoaXMuY29sdW1uc1N0YXRlLmZpZWxkID8gdGhpcy5ncmlkLmdldENvbHVtbkJ5TmFtZSh0aGlzLmNvbHVtbnNTdGF0ZS5maWVsZCkgOiBudWxsO1xuICAgICAgICBpZiAoIXN0YXRlQ29sdW1uIHx8IHN0YXRlQ29sdW1uLnZpc2libGVJbmRleCA8IDAgfHwgIXNlbGVjdENvbHVtbnNSYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5zU3RhdGUuZmllbGQgPSBjb2x1bW5zWzBdID8gY29sdW1uc1swXS5maWVsZCA6IG51bGw7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbnNTdGF0ZS5yYW5nZSA9IFtdO1xuXG4gICAgICAgICAgICBjb25zdCBhZGRlZCA9IGZpZWxkcy5maWx0ZXIoY29sRmllbGQgPT4gIXRoaXMuaXNDb2x1bW5TZWxlY3RlZChjb2xGaWVsZCkpO1xuICAgICAgICAgICAgY29uc3QgcmVtb3ZlZCA9IGNsZWFyUHJldlNlbGVjdGlvbiA/IHRoaXMuZ2V0U2VsZWN0ZWRDb2x1bW5zKCkuZmlsdGVyKGNvbEZpZWxkID0+IGZpZWxkcy5pbmRleE9mKGNvbEZpZWxkKSA9PT0gLTEpIDogW107XG4gICAgICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSBjbGVhclByZXZTZWxlY3Rpb24gPyBmaWVsZHMgOiB0aGlzLmdldFNlbGVjdGVkQ29sdW1ucygpLmNvbmNhdChhZGRlZCk7XG5cbiAgICAgICAgICAgIHRoaXMuZW1pdENvbHVtblNlbGVjdGlvbkV2ZW50KG5ld1NlbGVjdGlvbiwgYWRkZWQsIHJlbW92ZWQsIGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVkU3RhcnQgPSBzdGF0ZUNvbHVtbi52aXNpYmxlSW5kZXggPlxuICAgICAgICAgICAgICAgIGNvbHVtbnNbY29sdW1ucy5sZW5ndGggLSAxXS52aXNpYmxlSW5kZXggPyBjb2x1bW5zWzBdLmZpZWxkIDogY29sdW1uc1tjb2x1bW5zLmxlbmd0aCAtIDFdLmZpZWxkO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RDb2x1bW5zUmFuZ2UoZmlsZWRTdGFydCwgZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFNlbGVjdCByYW5nZSBmcm9tIGxhc3QgY2xpY2tlZCBjb2x1bW4gdG8gdGhlIGN1cnJlbnQgc3BlY2lmaWVkIGNvbHVtbi4gKi9cbiAgICBwdWJsaWMgc2VsZWN0Q29sdW1uc1JhbmdlKGZpZWxkOiBzdHJpbmcsIGV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGN1cnJJbmRleCA9IHRoaXMuZ3JpZC5nZXRDb2x1bW5CeU5hbWUodGhpcy5jb2x1bW5zU3RhdGUuZmllbGQpLnZpc2libGVJbmRleDtcbiAgICAgICAgY29uc3QgbmV3SW5kZXggPSB0aGlzLmdyaWQuY29sdW1uVG9WaXNpYmxlSW5kZXgoZmllbGQpO1xuICAgICAgICBjb25zdCBjb2x1bW5zRmllbGRzID0gdGhpcy5ncmlkLnZpc2libGVDb2x1bW5zXG4gICAgICAgICAgICAuZmlsdGVyKGMgPT4gIWMuY29sdW1uR3JvdXApXG4gICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS52aXNpYmxlSW5kZXggLSBiLnZpc2libGVJbmRleClcbiAgICAgICAgICAgIC5zbGljZShNYXRoLm1pbihjdXJySW5kZXgsIG5ld0luZGV4KSwgTWF0aC5tYXgoY3VyckluZGV4LCBuZXdJbmRleCkgKyAxKVxuICAgICAgICAgICAgLmZpbHRlcihjb2wgPT4gY29sLnNlbGVjdGFibGUpLm1hcChjb2wgPT4gY29sLmZpZWxkKTtcbiAgICAgICAgY29uc3QgcmVtb3ZlZCA9IFtdO1xuICAgICAgICBjb25zdCBvbGRBZGRlZCA9IFtdO1xuICAgICAgICBjb25zdCBhZGRlZCA9IGNvbHVtbnNGaWVsZHMuZmlsdGVyKGNvbEZpZWxkID0+ICF0aGlzLmlzQ29sdW1uU2VsZWN0ZWQoY29sRmllbGQpKTtcbiAgICAgICAgdGhpcy5jb2x1bW5zU3RhdGUucmFuZ2UuZm9yRWFjaChmID0+IHtcbiAgICAgICAgICAgIGlmIChjb2x1bW5zRmllbGRzLmluZGV4T2YoZikgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlZC5wdXNoKGYpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvbGRBZGRlZC5wdXNoKGYpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jb2x1bW5zU3RhdGUucmFuZ2UgPSBjb2x1bW5zRmllbGRzLmZpbHRlcihjb2xGaWVsZCA9PiAhdGhpcy5pc0NvbHVtblNlbGVjdGVkKGNvbEZpZWxkKSB8fCBvbGRBZGRlZC5pbmRleE9mKGNvbEZpZWxkKSA+IC0xKTtcbiAgICAgICAgY29uc3QgbmV3U2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3RlZENvbHVtbnMoKS5jb25jYXQoYWRkZWQpLmZpbHRlcihjID0+IHJlbW92ZWQuaW5kZXhPZihjKSA9PT0gLTEpO1xuICAgICAgICB0aGlzLmVtaXRDb2x1bW5TZWxlY3Rpb25FdmVudChuZXdTZWxlY3Rpb24sIGFkZGVkLCByZW1vdmVkLCBldmVudCk7XG4gICAgfVxuXG4gICAgLyoqIFNlbGVjdCBzcGVjaWZpZWQgY29sdW1ucy4gTm8gZXZlbnQgaXMgZW1pdHRlZC4gKi9cbiAgICBwdWJsaWMgc2VsZWN0Q29sdW1uc1dpdGhOb0V2ZW50KGZpZWxkczogc3RyaW5nW10sIGNsZWFyUHJldlNlbGVjdGlvbj8pOiB2b2lkIHtcbiAgICAgICAgaWYgKGNsZWFyUHJldlNlbGVjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5TZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgICBmaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtblNlbGVjdGlvbi5hZGQoZmllbGQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogRGVzZWxlY3QgdGhlIHNwZWNpZmllZCBjb2x1bW4gYW5kIGVtaXQgZXZlbnQuICovXG4gICAgcHVibGljIGRlc2VsZWN0Q29sdW1uKGZpZWxkOiBzdHJpbmcsIGV2ZW50Pyk6IHZvaWQge1xuICAgICAgICB0aGlzLmluaXRDb2x1bW5zU3RhdGUoKTtcbiAgICAgICAgY29uc3QgbmV3U2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3RlZENvbHVtbnMoKS5maWx0ZXIoYyA9PiBjICE9PSBmaWVsZCk7XG4gICAgICAgIHRoaXMuZW1pdENvbHVtblNlbGVjdGlvbkV2ZW50KG5ld1NlbGVjdGlvbiwgW10sIFtmaWVsZF0sIGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKiogRGVzZWxlY3Qgc3BlY2lmaWVkIGNvbHVtbnMuIE5vIGV2ZW50IGlzIGVtaXR0ZWQuICovXG4gICAgcHVibGljIGRlc2VsZWN0Q29sdW1uc1dpdGhOb0V2ZW50KGZpZWxkczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICAgICAgZmllbGRzLmZvckVhY2goZmllbGQgPT4gdGhpcy5jb2x1bW5TZWxlY3Rpb24uZGVsZXRlKGZpZWxkKSk7XG4gICAgfVxuXG4gICAgLyoqIERlc2VsZWN0IHNwZWNpZmllZCBjb2x1bW5zLiBBbmQgZW1pdCBldmVudC4gKi9cbiAgICBwdWJsaWMgZGVzZWxlY3RDb2x1bW5zKGZpZWxkczogc3RyaW5nW10sIGV2ZW50Pyk6IHZvaWQge1xuICAgICAgICBjb25zdCByZW1vdmVkID0gdGhpcy5nZXRTZWxlY3RlZENvbHVtbnMoKS5maWx0ZXIoY29sRmllbGQgPT4gZmllbGRzLmluZGV4T2YoY29sRmllbGQpID4gLTEpO1xuICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGVkQ29sdW1ucygpLmZpbHRlcihjb2xGaWVsZCA9PiBmaWVsZHMuaW5kZXhPZihjb2xGaWVsZCkgPT09IC0xKTtcblxuICAgICAgICB0aGlzLmVtaXRDb2x1bW5TZWxlY3Rpb25FdmVudChuZXdTZWxlY3Rpb24sIFtdLCByZW1vdmVkLCBldmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIGVtaXRDb2x1bW5TZWxlY3Rpb25FdmVudChuZXdTZWxlY3Rpb24sIGFkZGVkLCByZW1vdmVkLCBldmVudD8pOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgY3VyclNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0ZWRDb2x1bW5zKCk7XG4gICAgICAgIGlmICh0aGlzLmFyZUVxdWFsQ29sbGVjdGlvbnMoY3VyclNlbGVjdGlvbiwgbmV3U2VsZWN0aW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXJncyA9IHtcbiAgICAgICAgICAgIG9sZFNlbGVjdGlvbjogY3VyclNlbGVjdGlvbiwgbmV3U2VsZWN0aW9uLFxuICAgICAgICAgICAgYWRkZWQsIHJlbW92ZWQsIGV2ZW50LCBjYW5jZWw6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZ3JpZC5jb2x1bW5TZWxlY3Rpb25DaGFuZ2luZy5lbWl0KGFyZ3MpO1xuICAgICAgICBpZiAoYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdENvbHVtbnNXaXRoTm9FdmVudChhcmdzLm5ld1NlbGVjdGlvbiwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqIENsZWFyIGNvbHVtblNlbGVjdGlvbiAqL1xuICAgIHB1YmxpYyBjbGVhckFsbFNlbGVjdGVkQ29sdW1ucygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb2x1bW5TZWxlY3Rpb24uY2xlYXIoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXJlRXF1YWxDb2xsZWN0aW9ucyhmaXJzdCwgc2Vjb25kKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBmaXJzdC5sZW5ndGggPT09IHNlY29uZC5sZW5ndGggJiYgbmV3IFNldChmaXJzdC5jb25jYXQoc2Vjb25kKSkuc2l6ZSA9PT0gZmlyc3QubGVuZ3RoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICjila/CsOKWocKw77yJ4pWv77i1IOKUu+KUgeKUu1xuICAgICAqIENocm9tZSBhbmQgQ2hyb21pdW0gZG9uJ3QgY2FyZSBhYm91dCB0aGUgYWN0aXZlXG4gICAgICogcmFuZ2UgYWZ0ZXIga2V5Ym9hcmQgbmF2aWdhdGlvbiwgdGh1cyB0aGlzLlxuICAgICAqL1xuICAgIHByaXZhdGUgX21vdmVTZWxlY3Rpb25DaHJvbWUobm9kZTogTm9kZSkge1xuICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSBuZXcgUmFuZ2UoKTtcbiAgICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZShub2RlKTtcbiAgICAgICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSk7XG4gICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0ZpbHRlcmluZ0FwcGxpZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLmVtcHR5KHRoaXMuZ3JpZC5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUpIHx8XG4gICAgICAgICAgICAhRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLmVtcHR5KHRoaXMuZ3JpZC5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1Jvd0RlbGV0ZWQocm93SUQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5ncmlkQVBJLnJvd19kZWxldGVkX3RyYW5zYWN0aW9uKHJvd0lEKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBvaW50ZXJPcmlnaW5IYW5kbGVyID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMucG9pbnRlckV2ZW50SW5HcmlkQm9keSA9IGZhbHNlO1xuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsIHRoaXMucG9pbnRlck9yaWdpbkhhbmRsZXIpO1xuXG4gICAgICAgIGNvbnN0IHRhcmdldFRhZ05hbWUgPSBldmVudC50YXJnZXQudGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAodGFyZ2V0VGFnTmFtZSAhPT0gJ2lneC1ncmlkLWNlbGwnICYmIHRhcmdldFRhZ05hbWUgIT09ICdpZ3gtdHJlZS1ncmlkLWNlbGwnKSB7XG4gICAgICAgICAgICB0aGlzLnBvaW50ZXJVcCh0aGlzLl9sYXN0U2VsZWN0ZWROb2RlLCB0aGlzLmdyaWQucmFuZ2VTZWxlY3RlZCwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuIl19
|
|
748
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvc2VsZWN0aW9uL3NlbGVjdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsVUFBVSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFZNUYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7QUFJckQsTUFBTSxPQUFPLHVCQUF1QjtJQTZCaEM7OztPQUdHO0lBQ0gsSUFBVyxNQUFNO1FBRWIsMkRBQTJEO1FBQzNELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBRXhCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUV4RSxpREFBaUQ7UUFDakQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ3BFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztTQUN2RDtRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxJQUFXLGFBQWE7UUFDcEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQztJQUMzQyxDQUFDO0lBRUQsSUFBVyxhQUFhLENBQUMsS0FBYztRQUNu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T0FBTyxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDO1lBQ3RFLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBRU8sWUFBWSxDQUFDLEtBQUs7UUFDdEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1RCxDQUFDOzhHQXZ6QlEsdUJBQXVCO2tIQUF2Qix1QkFBdUI7OzJGQUF2Qix1QkFBdUI7a0JBRG5DLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIsIEluamVjdGFibGUsIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUGxhdGZvcm1VdGlsIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLWV4cHJlc3Npb25zLXRyZWUnO1xuaW1wb3J0IHsgSVJvd1NlbGVjdGlvbkV2ZW50QXJncyB9IGZyb20gJy4uL2NvbW1vbi9ldmVudHMnO1xuaW1wb3J0IHsgR3JpZFR5cGUgfSBmcm9tICcuLi9jb21tb24vZ3JpZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgICBHcmlkU2VsZWN0aW9uUmFuZ2UsXG4gICAgSUNvbHVtblNlbGVjdGlvblN0YXRlLFxuICAgIElNdWx0aVJvd0xheW91dE5vZGUsXG4gICAgSVNlbGVjdGlvbktleWJvYXJkU3RhdGUsXG4gICAgSVNlbGVjdGlvbk5vZGUsXG4gICAgSVNlbGVjdGlvblBvaW50ZXJTdGF0ZSxcbiAgICBTZWxlY3Rpb25TdGF0ZVxufSBmcm9tICcuLi9jb21tb24vdHlwZXMnO1xuaW1wb3J0IHsgUGl2b3RVdGlsIH0gZnJvbSAnLi4vcGl2b3QtZ3JpZC9waXZvdC11dGlsJztcblxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSWd4R3JpZFNlbGVjdGlvblNlcnZpY2Uge1xuICAgIHB1YmxpYyBncmlkOiBHcmlkVHlwZTtcbiAgICBwdWJsaWMgZHJhZ01vZGUgPSBmYWxzZTtcbiAgICBwdWJsaWMgYWN0aXZlRWxlbWVudDogSVNlbGVjdGlvbk5vZGUgfCBudWxsO1xuICAgIHB1YmxpYyBrZXlib2FyZFN0YXRlID0ge30gYXMgSVNlbGVjdGlvbktleWJvYXJkU3RhdGU7XG4gICAgcHVibGljIHBvaW50ZXJTdGF0ZSA9IHt9IGFzIElTZWxlY3Rpb25Qb2ludGVyU3RhdGU7XG4gICAgcHVibGljIGNvbHVtbnNTdGF0ZSA9IHt9IGFzIElDb2x1bW5TZWxlY3Rpb25TdGF0ZTtcblxuICAgIHB1YmxpYyBzZWxlY3Rpb24gPSBuZXcgTWFwPG51bWJlciwgU2V0PG51bWJlcj4+KCk7XG4gICAgcHVibGljIHRlbXAgPSBuZXcgTWFwPG51bWJlciwgU2V0PG51bWJlcj4+KCk7XG4gICAgcHVibGljIHJvd1NlbGVjdGlvbjogU2V0PGFueT4gPSBuZXcgU2V0PGFueT4oKTtcbiAgICBwdWJsaWMgaW5kZXRlcm1pbmF0ZVJvd3M6IFNldDxhbnk+ID0gbmV3IFNldDxhbnk+KCk7XG4gICAgcHVibGljIGNvbHVtblNlbGVjdGlvbjogU2V0PHN0cmluZz4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBzZWxlY3RlZFJvd3NDaGFuZ2UgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgLyoqXG4gICAgICogVG9nZ2xlZCB3aGVuIGEgcG9pbnRlcmRvd24gZXZlbnQgaXMgdHJpZ2dlcmVkIGluc2lkZSB0aGUgZ3JpZCBib2R5IChjZWxscykuXG4gICAgICogV2hlbiBgZmFsc2VgIHRoZSBkcmFnIHNlbGVjdCBiZWhhdmlvciBpcyBkaXNhYmxlZC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHBvaW50ZXJFdmVudEluR3JpZEJvZHkgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgYWxsUm93c1NlbGVjdGVkOiBib29sZWFuO1xuICAgIHByaXZhdGUgX2xhc3RTZWxlY3RlZE5vZGU6IElTZWxlY3Rpb25Ob2RlO1xuICAgIHByaXZhdGUgX3JhbmdlczogU2V0PHN0cmluZz4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBwcml2YXRlIF9zZWxlY3Rpb25SYW5nZTogUmFuZ2U7XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHNlbGVjdGVkIHJhbmdlcyBpbiB0aGUgZ3JpZCBmcm9tIGJvdGhcbiAgICAgKiBrZXlib2FyZCBhbmQgcG9pbnRlciBpbnRlcmFjdGlvbnNcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHJhbmdlcygpOiBHcmlkU2VsZWN0aW9uUmFuZ2VbXSB7XG5cbiAgICAgICAgLy8gVGhlIGxhc3QgYWN0aW9uIHdhcyBrZXlib2FyZCArIHNoaWZ0IHNlbGVjdGlvbiAtPiBhZGQgaXRcbiAgICAgICAgdGhpcy5hZGRLZXlib2FyZFJhbmdlKCk7XG5cbiAgICAgICAgY29uc3QgcmFuZ2VzID0gQXJyYXkuZnJvbSh0aGlzLl9yYW5nZXMpLm1hcChyYW5nZSA9PiBKU09OLnBhcnNlKHJhbmdlKSk7XG5cbiAgICAgICAgLy8gTm8gcmFuZ2VzIGJ1dCB3ZSBoYXZlIGEgZm9jdXNlZCBjZWxsIC0+IGFkZCBpdFxuICAgICAgICBpZiAoIXJhbmdlcy5sZW5ndGggJiYgdGhpcy5hY3RpdmVFbGVtZW50ICYmIHRoaXMuZ3JpZC5pc0NlbGxTZWxlY3RhYmxlKSB7XG4gICAgICAgICAgICByYW5nZXMucHVzaCh0aGlzLmdlbmVyYXRlUmFuZ2UodGhpcy5hY3RpdmVFbGVtZW50KSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmFuZ2VzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcHJpbWFyeUJ1dHRvbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucG9pbnRlclN0YXRlLnByaW1hcnlCdXR0b247XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBwcmltYXJ5QnV0dG9uKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMucG9pbnRlclN0YXRlLnByaW1hcnlCdXR0b24gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHpvbmU6IE5nWm9uZSwgcHJvdGVjdGVkIHBsYXRmb3JtOiBQbGF0Zm9ybVV0aWwpIHtcbiAgICAgICAgdGhpcy5pbml0UG9pbnRlclN0YXRlKCk7XG4gICAgICAgIHRoaXMuaW5pdEtleWJvYXJkU3RhdGUoKTtcbiAgICAgICAgdGhpcy5pbml0Q29sdW1uc1N0YXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVzZXRzIHRoZSBrZXlib2FyZCBzdGF0ZVxuICAgICAqL1xuICAgIHB1YmxpYyBpbml0S2V5Ym9hcmRTdGF0ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5rZXlib2FyZFN0YXRlLm5vZGUgPSBudWxsO1xuICAgICAgICB0aGlzLmtleWJvYXJkU3RhdGUuc2hpZnQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5rZXlib2FyZFN0YXRlLnJhbmdlID0gbnVsbDtcbiAgICAgICAgdGhpcy5rZXlib2FyZFN0YXRlLmFjdGl2ZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlc2V0cyB0aGUgcG9pbnRlciBzdGF0ZVxuICAgICAqL1xuICAgIHB1YmxpYyBpbml0UG9pbnRlclN0YXRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnBvaW50ZXJTdGF0ZS5ub2RlID0gbnVsbDtcbiAgICAgICAgdGhpcy5wb2ludGVyU3RhdGUuY3RybCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnBvaW50ZXJTdGF0ZS5zaGlmdCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnBvaW50ZXJTdGF0ZS5yYW5nZSA9IG51bGw7XG4gICAgICAgIHRoaXMucG9pbnRlclN0YXRlLnByaW1hcnlCdXR0b24gPSB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlc2V0cyB0aGUgY29sdW1ucyBzdGF0ZVxuICAgICAqL1xuICAgIHB1YmxpYyBpbml0Q29sdW1uc1N0YXRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbHVtbnNTdGF0ZS5maWVsZCA9IG51bGw7XG4gICAgICAgIHRoaXMuY29sdW1uc1N0YXRlLnJhbmdlID0gW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIHNpbmdsZSBub2RlLlxuICAgICAqIFNpbmdsZSBjbGlja3MgfCBDdHJsICsgc2luZ2xlIGNsaWNrcyBvbiBjZWxscyBpcyB0aGUgdXN1YWwgY2FzZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkKG5vZGU6IElTZWxlY3Rpb25Ob2RlLCBhZGRUb1JhbmdlID0gdHJ1ZSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24uaGFzKG5vZGUucm93KSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uZ2V0KG5vZGUucm93KS5hZGQobm9kZS5jb2x1bW4pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0KG5vZGUucm93LCBuZXcgU2V0PG51bWJlcj4oKSkuZ2V0KG5vZGUucm93KS5hZGQobm9kZS5jb2x1bW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFkZFRvUmFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3Jhbmdlcy5hZGQoSlNPTi5zdHJpbmdpZnkodGhpcy5nZW5lcmF0ZVJhbmdlKG5vZGUpKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIHRoZSBhY3RpdmUga2V5Ym9hcmQgcmFuZ2Ugc2VsZWN0aW9uIChpZiBhbnkpIHRvIHRoZSBgcmFuZ2VzYCBtZXRhLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRLZXlib2FyZFJhbmdlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5rZXlib2FyZFN0YXRlLnJhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLl9yYW5nZXMuYWRkKEpTT04uc3RyaW5naWZ5KHRoaXMua2V5Ym9hcmRTdGF0ZS5yYW5nZSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZShub2RlOiBJU2VsZWN0aW9uTm9kZSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24uaGFzKG5vZGUucm93KSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uZ2V0KG5vZGUucm93KS5kZWxldGUobm9kZS5jb2x1bW4pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzQWN0aXZlTm9kZShub2RlKSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9yYW5nZXMuZGVsZXRlKEpTT04uc3RyaW5naWZ5KHRoaXMuZ2VuZXJhdGVSYW5nZShub2RlKSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0luTWFwKG5vZGU6IElTZWxlY3Rpb25Ob2RlKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAodGhpcy5zZWxlY3Rpb24uaGFzKG5vZGUucm93KSAmJiB0aGlzLnNlbGVjdGlvbi5nZXQobm9kZS5yb3cpLmhhcyhub2RlLmNvbHVtbikpIHx8XG4gICAgICAgICAgICAodGhpcy50ZW1wLmhhcyhub2RlLnJvdykgJiYgdGhpcy50ZW1wLmdldChub2RlLnJvdykuaGFzKG5vZGUuY29sdW1uKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNlbGVjdGVkKG5vZGU6IElTZWxlY3Rpb25Ob2RlKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAodGhpcy5pc0FjdGl2ZU5vZGUobm9kZSkgJiYgdGhpcy5ncmlkLmlzQ2VsbFNlbGVjdGFibGUpIHx8IHRoaXMuaXNJbk1hcChub2RlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNBY3RpdmVOb2RlKG5vZGU6IElTZWxlY3Rpb25Ob2RlKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGlzQWN0aXZlID0gdGhpcy5hY3RpdmVFbGVtZW50LmNvbHVtbiA9PT0gbm9kZS5jb2x1bW4gJiYgdGhpcy5hY3RpdmVFbGVtZW50LnJvdyA9PT0gbm9kZS5yb3c7XG4gICAgICAgICAgICBpZiAodGhpcy5ncmlkLmhhc0NvbHVtbkxheW91dHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsYXlvdXQgPSB0aGlzLmFjdGl2ZUVsZW1lbnQubGF5b3V0O1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0FjdGl2ZSAmJiB0aGlzLmlzQWN0aXZlTGF5b3V0KGxheW91dCwgbm9kZS5sYXlvdXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGlzQWN0aXZlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNBY3RpdmVMYXlvdXQoY3VycmVudDogSU11bHRpUm93TGF5b3V0Tm9kZSwgdGFyZ2V0OiBJTXVsdGlSb3dMYXlvdXROb2RlKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBjdXJyZW50LmNvbHVtblZpc2libGVJbmRleCA9PT0gdGFyZ2V0LmNvbHVtblZpc2libGVJbmRleDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkUmFuZ2VNZXRhKG5vZGU6IElTZWxlY3Rpb25Ob2RlLCBzdGF0ZT86IFNlbGVjdGlvblN0YXRlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Jhbmdlcy5hZGQoSlNPTi5zdHJpbmdpZnkodGhpcy5nZW5lcmF0ZVJhbmdlKG5vZGUsIHN0YXRlKSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVSYW5nZU1ldGEobm9kZTogSVNlbGVjdGlvbk5vZGUsIHN0YXRlPzogU2VsZWN0aW9uU3RhdGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcmFuZ2VzLmRlbGV0ZShKU09OLnN0cmluZ2lmeSh0aGlzLmdlbmVyYXRlUmFuZ2Uobm9kZSwgc3RhdGUpKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2VuZXJhdGVzIGEgbmV3IHNlbGVjdGlvbiByYW5nZSBmcm9tIHRoZSBnaXZlbiBgbm9kZWAuXG4gICAgICogSWYgYHN0YXRlYCBpcyBwYXNzZWQgaW5zdGVhZCBpdCB3aWxsIGdlbmVyYXRlIHRoZSByYW5nZSBiYXNlZCBvbiB0aGUgcGFzc2VkIGBub2RlYFxuICAgICAqIGFuZCB0aGUgc3RhcnQgbm9kZSBvZiB0aGUgYHN0YXRlYC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2VuZXJhdGVSYW5nZShub2RlOiBJU2VsZWN0aW9uTm9kZSwgc3RhdGU/OiBTZWxlY3Rpb25TdGF0ZSk6IEdyaWRTZWxlY3Rpb25SYW5nZSB7XG4gICAgICAgIHRoaXMuX2xhc3RTZWxlY3RlZE5vZGUgPSBub2RlO1xuXG4gICAgICAgIGlmICghc3RhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcm93U3RhcnQ6IG5vZGUucm93LFxuICAgICAgICAgICAgICAgIHJvd0VuZDogbm9kZS5yb3csXG4gICAgICAgICAgICAgICAgY29sdW1uU3RhcnQ6IG5vZGUuY29sdW1uLFxuICAgICAgICAgICAgICAgIGNvbHVtbkVuZDogbm9kZS5jb2x1bW5cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IHJvdywgY29sdW1uIH0gPSBzdGF0ZS5ub2RlO1xuICAgICAgICBjb25zdCByb3dTdGFydCA9IE1hdGgubWluKG5vZGUucm93LCByb3cpO1xuICAgICAgICBjb25zdCByb3dFbmQgPSBNYXRoLm1heChub2RlLnJvdywgcm93KTtcbiAgICAgICAgY29uc3QgY29sdW1uU3RhcnQgPSBNYXRoLm1pbihub2RlLmNvbHVtbiwgY29sdW1uKTtcbiAgICAgICAgY29uc3QgY29sdW1uRW5kID0gTWF0aC5tYXgobm9kZS5jb2x1bW4sIGNvbHVtbik7XG5cbiAgICAgICAgcmV0dXJuIHsgcm93U3RhcnQsIHJvd0VuZCwgY29sdW1uU3RhcnQsIGNvbHVtbkVuZCB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqXG4gICAgICovXG4gICAgcHVibGljIGtleWJvYXJkU3RhdGVPbktleWRvd24obm9kZTogSVNlbGVjdGlvbk5vZGUsIHNoaWZ0OiBib29sZWFuLCBzaGlmdFRhYjogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmtleWJvYXJkU3RhdGUuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pbml0UG9pbnRlclN0YXRlKCk7XG4gICAgICAgIHRoaXMua2V5Ym9hcmRTdGF0ZS5zaGlmdCA9IHNoaWZ0ICYmICFzaGlmdFRhYjtcbiAgICAgICAgaWYgKCF0aGlzLmdyaWQubmF2aWdhdGlvbi5pc0RhdGFSb3cobm9kZS5yb3cpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gS2IgbmF2aWdhdGlvbiB3aXRoIHNoaWZ0IGFuZCBubyBwcmV2aW91cyBub2RlLlxuICAgICAgICAvLyBDbGVhciB0aGUgY3VycmVudCBzZWxlY3Rpb24gaW5pdCB0aGUgc3RhcnQgbm9kZS5cbiAgICAgICAgaWYgKHRoaXMua2V5Ym9hcmRTdGF0ZS5zaGlmdCAmJiAhdGhpcy5rZXlib2FyZFN0YXRlLm5vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMua2V5Ym9hcmRTdGF0ZS5ub2RlID0gT2JqZWN0LmFzc2lnbih7fSwgbm9kZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMga2V5Ym9hcmRTdGF0ZU9uRm9jdXMobm9kZTogSVNlbGVjdGlvbk5vZGUsIGVtaXR0ZXI6IEV2ZW50RW1pdHRlcjxHcmlkU2VsZWN0aW9uUmFuZ2U+LCBkb20pOiB2b2lkIHtcbiAgICAgICAgY29uc3Qga2JTdGF0ZSA9IHRoaXMua2V5Ym9hcmRTdGF0ZTtcblxuICAgICAgICAvLyBGb2N1cyB0cmlnZ2VyZWQgYnkga2V5Ym9hcmQgbmF2aWdhdGlvblxuICAgICAgICBpZiAoa2JTdGF0ZS5hY3RpdmUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBsYXRmb3JtLmlzQ2hyb21pdW0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlU2VsZWN0aW9uQ2hyb21lKGRvbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTdGFydCBnZW5lcmF0aW5nIGEgcmFuZ2UgaWYgc2hpZnQgaXMgaG9sZFxuICAgICAgICAgICAgaWYgKGtiU3RhdGUuc2hpZnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYWdTZWxlY3Qobm9kZSwga2JTdGF0ZSk7XG4gICAgICAgICAgICAgICAga2JTdGF0ZS5yYW5nZSA9IHRoaXMuZ2VuZXJhdGVSYW5nZShub2RlLCBrYlN0YXRlKTtcbiAgICAgICAgICAgICAgICBlbWl0dGVyLmVtaXQodGhpcy5nZW5lcmF0ZVJhbmdlKG5vZGUsIGtiU3RhdGUpKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuaW5pdEtleWJvYXJkU3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMuYWRkKG5vZGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHBvaW50ZXJEb3duKG5vZGU6IElTZWxlY3Rpb25Ob2RlLCBzaGlmdDogYm9vbGVhbiwgY3RybDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmFkZEtleWJvYXJkUmFuZ2UoKTtcbiAgICAgICAgdGhpcy5pbml0S2V5Ym9hcmRTdGF0ZSgpO1xuICAgICAgICB0aGlzLnBvaW50ZXJTdGF0ZS5jdHJsID0gY3RybDtcbiAgICAgICAgdGhpcy5wb2ludGVyU3RhdGUuc2hpZnQgPSBzaGlmdDtcbiAgICAgICAgdGhpcy5wb2ludGVyRXZlbnRJbkdyaWRCb2R5ID0gdHJ1ZTtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVydXAnLCB0aGlzLnBvaW50ZXJPcmlnaW5IYW5kbGVyKTtcblxuICAgICAgICAvLyBObyBjdHJsIGtleSBwcmVzc2VkIC0gbm8gbXVsdGlwbGUgc2VsZWN0aW9uXG4gICAgICAgIGlmICghY3RybCkge1xuICAgICAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNoaWZ0KSB7XG4gICAgICAgICAgICAvLyBObyBwcmV2aW91c2x5ICdjbGlja2VkJyBub2RlLiBVc2UgdGhlIGxhc3QgYWN0aXZlIG5vZGUuXG4gICAgICAgICAgICBpZiAoIXRoaXMucG9pbnRlclN0YXRlLm5vZGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvaW50ZXJTdGF0ZS5ub2RlID0gdGhpcy5hY3RpdmVFbGVtZW50IHx8IG5vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBvaW50ZXJEb3duU2hpZnRLZXkobm9kZSk7XG4gICAgICAgICAgICB0aGlzLmNsZWFyVGV4dFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZW1vdmVSYW5nZU1ldGEobm9kZSk7XG4gICAgICAgIHRoaXMucG9pbnRlclN0YXRlLm5vZGUgPSBub2RlO1xuICAgIH1cblxuICAgIHB1YmxpYyBwb2ludGVyRG93blNoaWZ0S2V5KG5vZGU6IElTZWxlY3Rpb25Ob2RlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5zZWxlY3RSYW5nZShub2RlLCB0aGlzLnBvaW50ZXJTdGF0ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIG1lcmdlTWFwKHRhcmdldDogTWFwPG51bWJlciwgU2V0PG51bWJlcj4+LCBzb3VyY2U6IE1hcDxudW1iZXIsIFNldDxudW1iZXI+Pik6IHZvaWQge1xuICAgICAgICBjb25zdCBpdGVyYXRvciA9IHNvdXJjZS5lbnRyaWVzKCk7XG4gICAgICAgIGxldCBwYWlyID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICBsZXQga2V5OiBudW1iZXI7XG4gICAgICAgIGxldCB2YWx1ZTogU2V0PG51bWJlcj47XG5cbiAgICAgICAgd2hpbGUgKCFwYWlyLmRvbmUpIHtcbiAgICAgICAgICAgIFtrZXksIHZhbHVlXSA9IHBhaXIudmFsdWU7XG4gICAgICAgICAgICBpZiAodGFyZ2V0LmhhcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0YXJnZXQuZ2V0KGtleSk7XG4gICAgICAgICAgICAgICAgdmFsdWUuZm9yRWFjaChyZWNvcmQgPT4gbmV3VmFsdWUuYWRkKHJlY29yZCkpO1xuICAgICAgICAgICAgICAgIHRhcmdldC5zZXQoa2V5LCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRhcmdldC5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYWlyID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHBvaW50ZXJFbnRlcihub2RlOiBJU2VsZWN0aW9uTm9kZSwgZXZlbnQ6IFBvaW50ZXJFdmVudCk6IGJvb2xlYW4ge1xuICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvcG9pbnRlcmV2ZW50cy8jdGhlLWJ1dHRvbi1wcm9wZXJ0eVxuICAgICAgICB0aGlzLmRyYWdNb2RlID0gKGV2ZW50LmJ1dHRvbnMgPT09IDEgJiYgKGV2ZW50LmJ1dHRvbiA9PT0gLTEgfHwgZXZlbnQuYnV0dG9uID09PSAwKSkgJiYgdGhpcy5wb2ludGVyRXZlbnRJbkdyaWRCb2R5O1xuICAgICAgICBpZiAoIXRoaXMuZHJhZ01vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNsZWFyVGV4dFNlbGVjdGlvbigpO1xuXG4gICAgICAgIC8vIElmIHRoZSB1c2VycyB0cmlnZ2VycyBhIGRyYWctbGlrZSBldmVudCBieSBmaXJzdCBjbGlja2luZyBvdXRzaWRlIHRoZSBncmlkIGNlbGxzXG4gICAgICAgIC8vIGFuZCB0aGVuIGVudGVycyBpbiB0aGUgZ3JpZCBib2R5IHdlIG1heSBub3QgaGF2ZSBhIGluaXRpYWwgcG9pbnRlciBzdGFydGluZyBub2RlLlxuICAgICAgICAvLyBBc3N1bWUgdGhlIGZpcnN0IHBvaW50ZXJlbnRlciBub2RlIGlzIHdoZXJlIHdlIHN0YXJ0LlxuICAgICAgICBpZiAoIXRoaXMucG9pbnRlclN0YXRlLm5vZGUpIHtcbiAgICAgICAgICAgIHRoaXMucG9pbnRlclN0YXRlLm5vZGUgPSBub2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucG9pbnRlclN0YXRlLmN0cmwpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0UmFuZ2Uobm9kZSwgdGhpcy5wb2ludGVyU3RhdGUsIHRoaXMudGVtcCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRyYWdTZWxlY3Qobm9kZSwgdGhpcy5wb2ludGVyU3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBwb2ludGVyVXAobm9kZTogSVNlbGVjdGlvbk5vZGUsIGVtaXR0ZXI6IEV2ZW50RW1pdHRlcjxHcmlkU2VsZWN0aW9uUmFuZ2U+LCBmaXJlZE91dHNpZGVHcmlkPzogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5kcmFnTW9kZSB8fCBmaXJlZE91dHNpZGVHcmlkKSB7XG4gICAgICAgICAgICB0aGlzLnJlc3RvcmVUZXh0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLmFkZFJhbmdlTWV0YShub2RlLCB0aGlzLnBvaW50ZXJTdGF0ZSk7XG4gICAgICAgICAgICB0aGlzLm1lcmdlTWFwKHRoaXMuc2VsZWN0aW9uLCB0aGlzLnRlbXApO1xuICAgICAgICAgICAgdGhpcy56b25lLnJ1blRhc2soKCkgPT4gZW1pdHRlci5lbWl0KHRoaXMuZ2VuZXJhdGVSYW5nZShub2RlLCB0aGlzLnBvaW50ZXJTdGF0ZSkpKTtcbiAgICAgICAgICAgIHRoaXMudGVtcC5jbGVhcigpO1xuICAgICAgICAgICAgdGhpcy5kcmFnTW9kZSA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5wb2ludGVyU3RhdGUuc2hpZnQpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJUZXh0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLnJlc3RvcmVUZXh0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLmFkZFJhbmdlTWV0YShub2RlLCB0aGlzLnBvaW50ZXJTdGF0ZSk7XG4gICAgICAgICAgICBlbWl0dGVyLmVtaXQodGhpcy5nZW5lcmF0ZVJhbmdlKG5vZGUsIHRoaXMucG9pbnRlclN0YXRlKSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnBvaW50ZXJFdmVudEluR3JpZEJvZHkgJiYgdGhpcy5pc0FjdGl2ZU5vZGUobm9kZSkpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkKG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VsZWN0UmFuZ2Uobm9kZTogSVNlbGVjdGlvbk5vZGUsIHN0YXRlOiBTZWxlY3Rpb25TdGF0ZSwgY29sbGVjdGlvbjogTWFwPG51bWJlciwgU2V0PG51bWJlcj4+ID0gdGhpcy5zZWxlY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgaWYgKGNvbGxlY3Rpb24gPT09IHRoaXMudGVtcCkge1xuICAgICAgICAgICAgY29sbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgcm93U3RhcnQsIHJvd0VuZCwgY29sdW1uU3RhcnQsIGNvbHVtbkVuZCB9ID0gdGhpcy5nZW5lcmF0ZVJhbmdlKG5vZGUsIHN0YXRlKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IHJvd1N0YXJ0OyBpIDw9IHJvd0VuZDsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gY29sdW1uU3RhcnQgYXMgbnVtYmVyOyBqIDw9IChjb2x1bW5FbmQgYXMgbnVtYmVyKTsgaisrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbGxlY3Rpb24uaGFzKGkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb24uZ2V0KGkpLmFkZChqKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uLnNldChpLCBuZXcgU2V0PG51bWJlcj4oKSkuZ2V0KGkpLmFkZChqKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZHJhZ1NlbGVjdChub2RlOiBJU2VsZWN0aW9uTm9kZSwgc3RhdGU6IFNlbGVjdGlvblN0YXRlKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5wb2ludGVyU3RhdGUuY3RybCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdFJhbmdlKG5vZGUsIHN0YXRlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXIoY2xlYXJBY3JpdmVFbCA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIGlmIChjbGVhckFjcml2ZUVsKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUVsZW1lbnQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgIHRoaXMudGVtcC5jbGVhcigpO1xuICAgICAgICB0aGlzLl9yYW5nZXMuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXJUZXh0U2VsZWN0aW9uKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgIGlmIChzZWxlY3Rpb24ucmFuZ2VDb3VudCkge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uUmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvblJhbmdlLmNvbGxhcHNlKHRydWUpO1xuICAgICAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJlc3RvcmVUZXh0U2VsZWN0aW9uKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgIGlmICghc2VsZWN0aW9uLnJhbmdlQ291bnQpIHtcbiAgICAgICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZSh0aGlzLl9zZWxlY3Rpb25SYW5nZSB8fCBkb2N1bWVudC5jcmVhdGVSYW5nZSgpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXRTZWxlY3RlZFJvd3NEYXRhKCkge1xuICAgICAgICBpZiAodGhpcy5ncmlkLmlzUGl2b3QpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdyaWQuZGF0YVZpZXcuZmlsdGVyKHIgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleXMgPSByLmRpbWVuc2lvbnMubWFwKGQgPT4gUGl2b3RVdGlsLmdldFJlY29yZEtleShyLCBkKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGtleXMuc29tZShrID0+IHRoaXMuaXNQaXZvdFJvd1NlbGVjdGVkKGspKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5ncmlkLnByaW1hcnlLZXkpIHtcbiAgICAgICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMucm93U2VsZWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSBbXTtcbiAgICAgICAgdGhpcy5yb3dTZWxlY3Rpb24uZm9yRWFjaChySUQgPT4ge1xuICAgICAgICAgICAgY29uc3QgckRhdGEgPSB0aGlzLmdyaWQuZ3JpZEFQSS5nZXRfYWxsX2RhdGEodHJ1ZSkuZmluZChyb3cgPT4gdGhpcy5nZXRSZWNvcmRLZXkocm93KSA9PT0gcklEKTtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRpYWxSb3dEYXRhID0ge307XG4gICAgICAgICAgICBwYXJ0aWFsUm93RGF0YVt0aGlzLmdyaWQucHJpbWFyeUtleV0gPSBySUQ7XG4gICAgICAgICAgICBzZWxlY3Rpb24ucHVzaChyRGF0YSA/IHJEYXRhIDogcGFydGlhbFJvd0RhdGEpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHNlbGVjdGlvbjtcbiAgICB9XG5cbiAgICAvKiogUmV0dXJucyBhcnJheSBvZiB0aGUgc2VsZWN0ZWQgcm93IGlkJ3MuICovXG4gICAgcHVibGljIGdldFNlbGVjdGVkUm93cygpOiBBcnJheTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm93U2VsZWN0aW9uLnNpemUgPyBBcnJheS5mcm9tKHRoaXMucm93U2VsZWN0aW9uLmtleXMoKSkgOiBbXTtcbiAgICB9XG5cbiAgICAvKiogUmV0dXJucyBhcnJheSBvZiB0aGUgcm93cyBpbiBpbmRldGVybWluYXRlIHN0YXRlLiAqL1xuICAgIHB1YmxpYyBnZXRJbmRldGVybWluYXRlUm93cygpOiBBcnJheTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXRlcm1pbmF0ZVJvd3Muc2l6ZSA/IEFycmF5LmZyb20odGhpcy5pbmRldGVybWluYXRlUm93cy5rZXlzKCkpIDogW107XG4gICAgfVxuXG4gICAgLyoqIENsZWFycyByb3cgc2VsZWN0aW9uLCBpZiBmaWx0ZXJpbmcgaXMgYXBwbGllZCBjbGVhcnMgb25seSBzZWxlY3RlZCByb3dzIGZyb20gZmlsdGVyZWQgZGF0YS4gKi9cbiAgICBwdWJsaWMgY2xlYXJSb3dTZWxlY3Rpb24oZXZlbnQ/KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkUm93cyA9IHRoaXMuZ2V0U2VsZWN0ZWRSb3dzRGF0YSgpO1xuICAgICAgICBjb25zdCByZW1vdmVkUmVjID0gdGhpcy5pc0ZpbHRlcmluZ0FwcGxpZWQoKSA/XG4gICAgICAgICAgICB0aGlzLmFsbERhdGEuZmlsdGVyKHJvdyA9PiB0aGlzLmlzUm93U2VsZWN0ZWQodGhpcy5nZXRSZWNvcmRLZXkocm93KSkpIDogc2VsZWN0ZWRSb3dzO1xuICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSB0aGlzLmlzRmlsdGVyaW5nQXBwbGllZCgpID8gc2VsZWN0ZWRSb3dzLmZpbHRlcih4ID0+ICFyZW1vdmVkUmVjLmluY2x1ZGVzKHgpKSA6IFtdO1xuICAgICAgICB0aGlzLmVtaXRSb3dTZWxlY3Rpb25FdmVudChuZXdTZWxlY3Rpb24sIFtdLCByZW1vdmVkUmVjLCBldmVudCwgc2VsZWN0ZWRSb3dzKTtcbiAgICB9XG5cbiAgICAvKiogU2VsZWN0IGFsbCByb3dzLCBpZiBmaWx0ZXJpbmcgaXMgYXBwbGllZCBzZWxlY3Qgb25seSBmcm9tIGZpbHRlcmVkIGRhdGEuICovXG4gICAgcHVibGljIHNlbGVjdEFsbFJvd3MoZXZlbnQ/KSB7XG4gICAgICAgIGNvbnN0IGFkZGVkUm93cyA9IHRoaXMuYWxsRGF0YS5maWx0ZXIoKHJvdykgPT4gIXRoaXMuaXNSb3dTZWxlY3RlZCh0aGlzLmdldFJlY29yZEtleShyb3cpKSk7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkUm93cyA9IHRoaXMuZ2V0U2VsZWN0ZWRSb3dzRGF0YSgpO1xuICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSB0aGlzLnJvd1NlbGVjdGlvbi5zaXplID8gc2VsZWN0ZWRSb3dzLmNvbmNhdChhZGRlZFJvd3MpIDogYWRkZWRSb3dzO1xuICAgICAgICB0aGlzLmluZGV0ZXJtaW5hdGVSb3dzLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuZW1pdFJvd1NlbGVjdGlvbkV2ZW50KG5ld1NlbGVjdGlvbiwgYWRkZWRSb3dzLCBbXSwgZXZlbnQsIHNlbGVjdGVkUm93cyk7XG4gICAgfVxuXG4gICAgLyoqIFNlbGVjdCB0aGUgc3BlY2lmaWVkIHJvdyBhbmQgZW1pdCBldmVudC4gKi9cbiAgICBwdWJsaWMgc2VsZWN0Um93QnlJZChyb3dJRCwgY2xlYXJQcmV2U2VsZWN0aW9uPywgZXZlbnQ/KTogdm9pZCB7XG4gICAgICAgIGlmICghKHRoaXMuZ3JpZC5pc1Jvd1NlbGVjdGFibGUgfHwgdGhpcy5ncmlkLmlzUGl2b3QpIHx8IHRoaXMuaXNSb3dEZWxldGVkKHJvd0lEKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNsZWFyUHJldlNlbGVjdGlvbiA9ICF0aGlzLmdyaWQuaXNNdWx0aVJvd1NlbGVjdGlvbkVuYWJsZWQgfHwgY2xlYXJQcmV2U2VsZWN0aW9uO1xuICAgICAgICBpZiAodGhpcy5ncmlkLmlzUGl2b3QpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0UGl2b3RSb3dCeUlkKHJvd0lELCBjbGVhclByZXZTZWxlY3Rpb24sIGV2ZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZWxlY3RlZFJvd3MgPSB0aGlzLmdldFNlbGVjdGVkUm93c0RhdGEoKTtcbiAgICAgICAgY29uc3QgbmV3U2VsZWN0aW9uID0gY2xlYXJQcmV2U2VsZWN0aW9uID8gW3RoaXMuZ2V0Um93RGF0YUJ5SWQocm93SUQpXSA6IHRoaXMucm93U2VsZWN0aW9uLmhhcyhyb3dJRCkgP1xuICAgICAgICAgICAgc2VsZWN0ZWRSb3dzIDogWy4uLnNlbGVjdGVkUm93cywgdGhpcy5nZXRSb3dEYXRhQnlJZChyb3dJRCldO1xuICAgICAgICBjb25zdCByZW1vdmVkID0gY2xlYXJQcmV2U2VsZWN0aW9uID8gc2VsZWN0ZWRSb3dzIDogW107XG4gICAgICAgIHRoaXMuZW1pdFJvd1NlbGVjdGlvbkV2ZW50KG5ld1NlbGVjdGlvbiwgW3RoaXMuZ2V0Um93RGF0YUJ5SWQocm93SUQpXSwgcmVtb3ZlZCwgZXZlbnQsIHNlbGVjdGVkUm93cyk7XG4gICAgfVxuXG4gICAgcHVibGljIHNlbGVjdFBpdm90Um93QnlJZChyb3dJRCwgY2xlYXJQcmV2U2VsZWN0aW9uOiBib29sZWFuLCBldmVudD8pOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRSb3dzID0gdGhpcy5nZXRTZWxlY3RlZFJvd3MoKTtcbiAgICAgICAgY29uc3QgbmV3U2VsZWN0aW9uID0gY2xlYXJQcmV2U2VsZWN0aW9uID8gW3Jvd0lEXSA6IHRoaXMucm93U2VsZWN0aW9uLmhhcyhyb3dJRCkgPyBzZWxlY3RlZFJvd3MgOiBbLi4uc2VsZWN0ZWRSb3dzLCByb3dJRF07XG4gICAgICAgIGNvbnN0IGFkZGVkID0gdGhpcy5nZXRQaXZvdFJvd3NCeUlkcyhbcm93SURdKTtcbiAgICAgICAgY29uc3QgcmVtb3ZlZCA9IHRoaXMuZ2V0UGl2b3RSb3dzQnlJZHMoY2xlYXJQcmV2U2VsZWN0aW9uID8gc2VsZWN0ZWRSb3dzIDogW10pO1xuICAgICAgICB0aGlzLmVtaXRSb3dTZWxlY3Rpb25FdmVudFBpdm90R3JpZChzZWxlY3RlZFJvd3MsIG5ld1NlbGVjdGlvbiwgYWRkZWQsIHJlbW92ZWQsIGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKiogRGVzZWxlY3QgdGhlIHNwZWNpZmllZCByb3cgYW5kIGVtaXQgZXZlbnQuICovXG4gICAgcHVibGljIGRlc2VsZWN0Um93KHJvd0lELCBldmVudD8pOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzUm93U2VsZWN0ZWQocm93SUQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYodGhpcy5ncmlkLmlzUGl2b3QpIHtcbiAgICAgICAgICAgIHRoaXMuZGVzZWxlY3RQaXZvdFJvd0J5SUQocm93SUQsIGV2ZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZWxlY3RlZFJvd3MgPSB0aGlzLmdldFNlbGVjdGVkUm93c0RhdGEoKTtcbiAgICAgICAgY29uc3QgbmV3U2VsZWN0aW9uID0gc2VsZWN0ZWRSb3dzLmZpbHRlcihyID0+ICB0aGlzLmdldFJlY29yZEtleShyKSAhPT0gcm93SUQpO1xuICAgICAgICBpZiAodGhpcy5yb3dTZWxlY3Rpb24uc2l6ZSAmJiB0aGlzLnJvd1NlbGVjdGlvbi5oYXMocm93SUQpKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXRSb3dTZWxlY3Rpb25FdmVudChuZXdTZWxlY3Rpb24sIFtdLCBbdGhpcy5nZXRSb3dEYXRhQnlJZChyb3dJRCldLCBldmVudCwgc2VsZWN0ZWRSb3dzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBkZXNlbGVjdFBpdm90Um93QnlJRChyb3dJRCwgZXZlbnQ/KSB7XG4gICAgICAgIGlmICh0aGlzLnJvd1NlbGVjdGlvbi5zaXplICYmIHRoaXMucm93U2VsZWN0aW9uLmhhcyhyb3dJRCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJTZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGVkUm93cygpO1xuICAgICAgICAgICAgY29uc3QgbmV3U2VsZWN0aW9uID0gY3VyclNlbGVjdGlvbi5maWx0ZXIociA9PiByICE9PSByb3dJRCk7XG4gICAgICAgICAgICBjb25zdCByZW1vdmVkICA9IHRoaXMuZ2V0UGl2b3RSb3dzQnlJZHMoW3Jvd0lEXSk7XG4gICAgICAgICAgICB0aGlzLmVtaXRSb3dTZWxlY3Rpb25FdmVudFBpdm90R3JpZChjdXJyU2VsZWN0aW9uLCBuZXdTZWxlY3Rpb24sIFtdLCByZW1vdmVkLCBldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGVtaXRSb3dTZWxlY3Rpb25FdmVudFBpdm90R3JpZChjdXJyU2VsZWN0aW9uLCBuZXdTZWxlY3Rpb24sIGFkZGVkLCByZW1vdmVkLCBldmVudCkge1xuICAgICAgICBpZiAodGhpcy5hcmVFcXVhbENvbGxlY3Rpb25zKGN1cnJTZWxlY3Rpb24sIG5ld1NlbGVjdGlvbikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdXJyU2VsZWN0ZWRSb3dzID0gdGhpcy5nZXRTZWxlY3RlZFJvd3NEYXRhKCk7XG4gICAgICAgIGNvbnN0IGFyZ3M6IElSb3dTZWxlY3Rpb25FdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICBvd25lcjogdGhpcy5ncmlkLFxuICAgICAgICAgICAgb2xkU2VsZWN0aW9uOiBjdXJyU2VsZWN0ZWRSb3dzLFxuICAgICAgICAgICAgbmV3U2VsZWN0aW9uOiB0aGlzLmdldFBpdm90Um93c0J5SWRzKG5ld1NlbGVjdGlvbiksXG4gICAgICAgICAgICBhZGRlZCxcbiAgICAgICAgICAgIHJlbW92ZWQsXG4gICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgIGNhbmNlbDogZmFsc2UsXG4gICAgICAgICAgICBhbGxSb3dzU2VsZWN0ZWQ6IHRoaXMuYXJlQWxsUm93U2VsZWN0ZWQobmV3U2VsZWN0aW9uKVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmdyaWQucm93U2VsZWN0aW9uQ2hhbmdpbmcuZW1pdChhcmdzKTtcbiAgICAgICAgaWYgKGFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFySGVhZGVyQ0JTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0Um93c1dpdGhOb0V2ZW50KG5ld1NlbGVjdGlvbiwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqIFNlbGVjdCB0aGUgc3BlY2lmaWVkIHJvd3MgYW5kIGVtaXQgZXZlbnQuICovXG4gICAgcHVibGljIHNlbGVjdFJvd3Moa2V5czogYW55W10sIGNsZWFyUHJldlNlbGVjdGlvbj86IGJvb2xlYW4sIGV2ZW50Pyk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZ3JpZC5pc011bHRpUm93U2VsZWN0aW9uRW5hYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJvd3NUb1NlbGVjdCA9IGtleXMuZmlsdGVyKHggPT4gIXRoaXMuaXNSb3dEZWxldGVkKHgpICYmICF0aGlzLnJvd1NlbGVjdGlvbi5oYXMoeCkpO1xuICAgICAgICBpZiAoIXJvd3NUb1NlbGVjdC5sZW5ndGggJiYgIWNsZWFyUHJldlNlbGVjdGlvbikge1xuICAgICAgICAgICAgLy8gbm8gdmFsaWQvYWRkaXRpb25hbCByb3dzIHRvIHNlbGVjdCBhbmQgbm8gY2xlYXJcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkUm93cyA9IHRoaXMuZ2V0U2VsZWN0ZWRSb3dzRGF0YSgpO1xuICAgICAgICByb3dzVG9TZWxlY3QgPSB0aGlzLmdyaWQucHJpbWFyeUtleSA/IHJvd3NUb1NlbGVjdC5tYXAociA9PiB0aGlzLmdldFJvd0RhdGFCeUlkKHIpKSA6IHJvd3NUb1NlbGVjdDtcbiAgICAgICAgY29uc3QgbmV3U2VsZWN0aW9uID0gY2xlYXJQcmV2U2VsZWN0aW9uID8gcm93c1RvU2VsZWN0IDogWy4uLnNlbGVjdGVkUm93cywgLi4ucm93c1RvU2VsZWN0XTtcbiAgICAgICAgY29uc3Qga2V5c0FzU2V0ID0gbmV3IFNldChyb3dzVG9TZWxlY3QpO1xuICAgICAgICBjb25zdCByZW1vdmVkID0gY2xlYXJQcmV2U2VsZWN0aW9uID8gc2VsZWN0ZWRSb3dzLmZpbHRlcih4ID0+ICFrZXlzQXNTZXQuaGFzKHgpKSA6IFtdO1xuICAgICAgICB0aGlzLmVtaXRSb3dTZWxlY3Rpb25FdmVudChuZXdTZWxlY3Rpb24sIHJvd3NUb1NlbGVjdCwgcmVtb3ZlZCwgZXZlbnQsIHNlbGVjdGVkUm93cyk7XG4gICAgfVxuXG4gICAgcHVibGljIGRlc2VsZWN0Um93cyhrZXlzOiBhbnlbXSwgZXZlbnQ/KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5yb3dTZWxlY3Rpb24uc2l6ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCByb3dzVG9EZXNlbGVjdCA9IGtleXMuZmlsdGVyKHggPT4gdGhpcy5yb3dTZWxlY3Rpb24uaGFzKHgpKTtcbiAgICAgICAgaWYgKCFyb3dzVG9EZXNlbGVjdC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZWxlY3RlZFJvd3MgPSB0aGlzLmdldFNlbGVjdGVkUm93c0RhdGEoKTtcbiAgICAgICAgcm93c1RvRGVzZWxlY3QgPSB0aGlzLmdyaWQucHJpbWFyeUtleSA/IHJvd3NUb0Rlc2VsZWN0Lm1hcChyID0+IHRoaXMuZ2V0Um93RGF0YUJ5SWQocikpIDogcm93c1RvRGVzZWxlY3Q7XG4gICAgICAgIGNvbnN0IGtleXNBc1NldCA9IG5ldyBTZXQocm93c1RvRGVzZWxlY3QpO1xuICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSBzZWxlY3RlZFJvd3MuZmlsdGVyKHIgPT4gIWtleXNBc1NldC5oYXMocikpO1xuICAgICAgICB0aGlzLmVtaXRSb3dTZWxlY3Rpb25FdmVudChuZXdTZWxlY3Rpb24sIFtdLCByb3dzVG9EZXNlbGVjdCwgZXZlbnQsIHNlbGVjdGVkUm93cyk7XG4gICAgfVxuXG4gICAgLyoqIFNlbGVjdCBzcGVjaWZpZWQgcm93cy4gTm8gZXZlbnQgaXMgZW1pdHRlZC4gKi9cbiAgICBwdWJsaWMgc2VsZWN0Um93c1dpdGhOb0V2ZW50KHJvd0lEczogYW55W10sIGNsZWFyUHJldlNlbGVjdGlvbj8pOiB2b2lkIHtcbiAgICAgICAgaWYgKGNsZWFyUHJldlNlbGVjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5yb3dTZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgICByb3dJRHMuZm9yRWFjaChyb3dJRCA9PiB0aGlzLnJvd1NlbGVjdGlvbi5hZGQocm93SUQpKTtcbiAgICAgICAgdGhpcy5jbGVhckhlYWRlckNCU3RhdGUoKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3NDaGFuZ2UubmV4dCgpO1xuICAgIH1cblxuICAgIC8qKiBEZXNlbGVjdCBzcGVjaWZpZWQgcm93cy4gTm8gZXZlbnQgaXMgZW1pdHRlZC4gKi9cbiAgICBwdWJsaWMgZGVzZWxlY3RSb3dzV2l0aE5vRXZlbnQocm93SURzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsZWFySGVhZGVyQ0JTdGF0ZSgpO1xuICAgICAgICByb3dJRHMuZm9yRWFjaChyb3dJRCA9PiB0aGlzLnJvd1NlbGVjdGlvbi5kZWxldGUocm93SUQpKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3NDaGFuZ2UubmV4dCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc1Jvd1NlbGVjdGVkKHJvd0lEKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvd1NlbGVjdGlvbi5zaXplID4gMCAmJiB0aGlzLnJvd1NlbGVjdGlvbi5oYXMocm93SUQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc1Bpdm90Um93U2VsZWN0ZWQocm93SUQpOiBib29sZWFuIHtcbiAgICAgICAgbGV0IGNvbnRhaW5zID0gZmFsc2U7XG4gICAgICAgIHRoaXMucm93U2VsZWN0aW9uLmZvckVhY2goeCA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb3JyZWN0Um93SWQgPSByb3dJRC5yZXBsYWNlKHgsJycpO1xuICAgICAgICAgICAgaWYgKHJvd0lELmluY2x1ZGVzKHgpICYmIChjb3JyZWN0Um93SWQgPT09ICcnIHx8IGNvcnJlY3RSb3dJZC5zdGFydHNXaXRoKCdfJykpICkge1xuICAgICAgICAgICAgICAgIGNvbnRhaW5zID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5yb3dTZWxlY3Rpb24uc2l6ZSA+IDAgJiYgY29udGFpbnM7XG4gICAgfVxuXG4gICAgcHVibGljIGlzUm93SW5JbmRldGVybWluYXRlU3RhdGUocm93SUQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXRlcm1pbmF0ZVJvd3Muc2l6ZSA+IDAgJiYgdGhpcy5pbmRldGVybWluYXRlUm93cy5oYXMocm93SUQpO1xuICAgIH1cblxuICAgIC8qKiBTZWxlY3QgcmFuZ2UgZnJvbSBsYXN0IHNlbGVjdGVkIHJvdyB0byB0aGUgY3VycmVudCBzcGVjaWZpZWQgcm93LiAqL1xuICAgIHB1YmxpYyBzZWxlY3RNdWx0aXBsZVJvd3Mocm93SUQsIHJvd0RhdGEsIGV2ZW50Pyk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsZWFySGVhZGVyQ0JTdGF0ZSgpO1xuICAgICAgICBpZiAoIXRoaXMucm93U2VsZWN0aW9uLnNpemUgfHwgdGhpcy5pc1Jvd0RlbGV0ZWQocm93SUQpKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFJvd0J5SWQocm93SUQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGdyaWREYXRhID0gdGhpcy5hbGxEYXRhO1xuICAgICAgICBjb25zdCBsYXN0Um93SUQgPSB0aGlzLmdldFNlbGVjdGVkUm93cygpW3RoaXMucm93U2VsZWN0aW9uLnNpemUgLSAxXTtcbiAgICAgICAgY29uc3QgY3VyckluZGV4ID0gZ3JpZERhdGEuaW5kZXhPZih0aGlzLmdldFJvd0RhdGFCeUlkKGxhc3RSb3dJRCkpO1xuICAgICAgICBjb25zdCBuZXdJbmRleCA9IGdyaWREYXRhLmluZGV4T2Yocm93RGF0YSk7XG4gICAgICAgIGNvbnN0IHJvd3MgPSBncmlkRGF0YS5zbGljZShNYXRoLm1pbihjdXJySW5kZXgsIG5ld0luZGV4KSwgTWF0aC5tYXgoY3VyckluZGV4LCBuZXdJbmRleCkgKyAxKTtcbiAgICAgICAgY29uc3QgY3VyclNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0ZWRSb3dzRGF0YSgpO1xuICAgICAgICBjb25zdCBhZGRlZCA9IHJvd3MuZmlsdGVyKHIgPT4gIXRoaXMuaXNSb3dTZWxlY3RlZCh0aGlzLmdldFJlY29yZEtleShyKSkpO1xuICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSBjdXJyU2VsZWN0aW9uLmNvbmNhdChhZGRlZCk7XG4gICAgICAgIHRoaXMuZW1pdFJvd1NlbGVjdGlvbkV2ZW50KG5ld1NlbGVjdGlvbiwgYWRkZWQsIFtdLCBldmVudCwgY3VyclNlbGVjdGlvbik7XG4gICAgfVxuXG4gICAgcHVibGljIGFyZUFsbFJvd1NlbGVjdGVkKG5ld1NlbGVjdGlvbj8pOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCF0aGlzLmdyaWQuZGF0YSAmJiAhbmV3U2VsZWN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYWxsUm93c1NlbGVjdGVkICE9PSB1bmRlZmluZWQgJiYgIW5ld1NlbGVjdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWxsUm93c1NlbGVjdGVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkRGF0YSA9IG5ld1NlbGVjdGlvbiA/IG5ld1NlbGVjdGlvbiA6IFsuLi50aGlzLnJvd1NlbGVjdGlvbl1cbiAgICAgICAgY29uc3QgYWxsRGF0YSA9IHRoaXMuZ2V0Um93SURzKHRoaXMuYWxsRGF0YSk7XG4gICAgICAgIGNvbnN0IHVuU2VsZWN0ZWRSb3dzID0gYWxsRGF0YS5maWx0ZXIocm93ID0+ICFzZWxlY3RlZERhdGEuaW5jbHVkZXMocm93KSk7XG4gICAgICAgIHJldHVybiB0aGlzLmFsbFJvd3NTZWxlY3RlZCA9IHRoaXMuYWxsRGF0YS5sZW5ndGggPiAwICYmIHVuU2VsZWN0ZWRSb3dzLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFzU29tZVJvd1NlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBmaWx0ZXJlZERhdGEgPSB0aGlzLmlzRmlsdGVyaW5nQXBwbGllZCgpID9cbiAgICAgICAgICAgIHRoaXMuZ2V0Um93SURzKHRoaXMuZ3JpZC5maWx0ZXJlZERhdGEpLnNvbWUocklEID0+IHRoaXMuaXNSb3dTZWxlY3RlZChySUQpKSA6IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzLnJvd1NlbGVjdGlvbi5zaXplID4gMCAmJiBmaWx0ZXJlZERhdGEgJiYgIXRoaXMuYXJlQWxsUm93U2VsZWN0ZWQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGZpbHRlcmVkU2VsZWN0ZWRSb3dJZHMoKTogYW55W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0ZpbHRlcmluZ0FwcGxpZWQoKSA/XG4gICAgICAgICAgICB0aGlzLmdldFJvd0lEcyh0aGlzLmFsbERhdGEpLmZpbHRlcihyb3dJRCA9PiB0aGlzLmlzUm93U2VsZWN0ZWQocm93SUQpKSA6XG4gICAgICAgICAgICB0aGlzLmdldFNlbGVjdGVkUm93cygpLmZpbHRlcihyb3dJRCA9PiAhdGhpcy5pc1Jvd0RlbGV0ZWQocm93SUQpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZW1pdFJvd1NlbGVjdGlvbkV2ZW50KG5ld1NlbGVjdGlvbiwgYWRkZWQsIHJlbW92ZWQsIGV2ZW50PywgY3VyclNlbGVjdGlvbj8pOiBib29sZWFuIHtcbiAgICAgICAgY3VyclNlbGVjdGlvbiA9IGN1cnJTZWxlY3Rpb24gPz8gdGhpcy5nZXRTZWxlY3RlZFJvd3NEYXRhKCk7XG4gICAgICAgIGlmICh0aGlzLmFyZUVxdWFsQ29sbGVjdGlvbnMoY3VyclNlbGVjdGlvbiwgbmV3U2VsZWN0aW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFyZ3M6IElSb3dTZWxlY3Rpb25FdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICBvd25lcjogdGhpcy5ncmlkLFxuICAgICAgICAgICAgb2xkU2VsZWN0aW9uOiBjdXJyU2VsZWN0aW9uLFxuICAgICAgICAgICAgbmV3U2VsZWN0aW9uLFxuICAgICAgICAgICAgYWRkZWQsIHJlbW92ZWQsXG4gICAgICAgICAgICBldmVudCwgY2FuY2VsOiBmYWxzZSxcbiAgICAgICAgICAgIGFsbFJvd3NTZWxlY3RlZDogdGhpcy5hcmVBbGxSb3dTZWxlY3RlZChuZXdTZWxlY3Rpb24ubWFwKHIgPT4gIHRoaXMuZ2V0UmVjb3JkS2V5KHIpKSlcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmdyaWQucm93U2VsZWN0aW9uQ2hhbmdpbmcuZW1pdChhcmdzKTtcbiAgICAgICAgaWYgKGFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFySGVhZGVyQ0JTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0Um93c1dpdGhOb0V2ZW50KGFyZ3MubmV3U2VsZWN0aW9uLm1hcChyID0+IHRoaXMuZ2V0UmVjb3JkS2V5KHIpKSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFBpdm90Um93c0J5SWRzKGlkczogYW55W10pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5kYXRhVmlldy5maWx0ZXIociA9PiB7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gci5kaW1lbnNpb25zLm1hcChkID0+IFBpdm90VXRpbC5nZXRSZWNvcmRLZXkociwgZCkpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBTZXQoaWRzLmNvbmNhdChrZXlzKSkuc2l6ZSA8IGlkcy5sZW5ndGggKyBrZXlzLmxlbmd0aDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFJvd0RhdGFCeUlkKHJvd0lEKTogYW55IHtcbiAgICAgICAgaWYgKCF0aGlzLmdyaWQucHJpbWFyeUtleSkge1xuICAgICAgICAgICAgcmV0dXJuIHJvd0lEO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvd0luZGV4ID0gdGhpcy5nZXRSb3dJRHModGhpcy5ncmlkLmdyaWRBUEkuZ2V0X2FsbF9kYXRhKHRydWUpKS5pbmRleE9mKHJvd0lEKTtcbiAgICAgICAgcmV0dXJuIHJvd0luZGV4IDwgMCA/IHJvd0lEIDogdGhpcy5ncmlkLmdyaWRBUEkuZ2V0X2FsbF9kYXRhKHRydWUpW3Jvd0luZGV4XTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXJIZWFkZXJDQlN0YXRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmFsbFJvd3NTZWxlY3RlZCA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Um93SURzKGRhdGEpOiBBcnJheTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5wcmltYXJ5S2V5ICYmIGRhdGEubGVuZ3RoID8gZGF0YS5tYXAocmVjID0+IHJlY1t0aGlzLmdyaWQucHJpbWFyeUtleV0pIDogZGF0YTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UmVjb3JkS2V5KHJlY29yZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnByaW1hcnlLZXkgPyByZWNvcmRbdGhpcy5ncmlkLnByaW1hcnlLZXldIDogcmVjb3JkO1xuICAgIH1cblxuICAgIC8qKiBDbGVhciByb3dTZWxlY3Rpb24gYW5kIHVwZGF0ZSBjaGVja2JveCBzdGF0ZSAqL1xuICAgIHB1YmxpYyBjbGVhckFsbFNlbGVjdGVkUm93cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yb3dTZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgdGhpcy5pbmRldGVybWluYXRlUm93cy5jbGVhcigpO1xuICAgICAgICB0aGlzLmNsZWFySGVhZGVyQ0JTdGF0ZSgpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkUm93c0NoYW5nZS5uZXh0KCk7XG4gICAgfVxuXG4gICAgLyoqIFJldHVybnMgYWxsIGRhdGEgaW4gdGhlIGdyaWQsIHdpdGggYXBwbGllZCBmaWx0ZXJpbmcgYW5kIHNvcnRpbmcgYW5kIHdpdGhvdXQgZGVsZXRlZCByb3dzLiAqL1xuICAgIHB1YmxpYyBnZXQgYWxsRGF0YSgpOiBBcnJheTxhbnk+IHtcbiAgICAgICAgbGV0IGFsbERhdGE7XG4gICAgICAgIGlmICh0aGlzLmlzRmlsdGVyaW5nQXBwbGllZCgpIHx8IHRoaXMuZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnMubGVuZ3RoIHx8IHRoaXMuZ3JpZC5ncm91cGluZ0V4cHJlc3Npb25zPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGFsbERhdGEgPSB0aGlzLmdyaWQucGlubmVkUmVjb3Jkc0NvdW50ID8gdGhpcy5ncmlkLl9maWx0ZXJlZFNvcnRlZFVucGlubmVkRGF0YSA6IHRoaXMuZ3JpZC5maWx0ZXJlZFNvcnRlZERhdGE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhbGxEYXRhID0gdGhpcy5ncmlkLmdyaWRBUEkuZ2V0X2FsbF9kYXRhKHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhbGxEYXRhLmZpbHRlcihyRGF0YSA9PiAhdGhpcy5pc1Jvd0RlbGV0ZWQodGhpcy5ncmlkLmdyaWRBUEkuZ2V0X3Jvd19pZChyRGF0YSkpKTtcbiAgICB9XG5cbiAgICAvKiogUmV0dXJucyBhcnJheSBvZiB0aGUgc2VsZWN0ZWQgY29sdW1ucyBmaWVsZHMuICovXG4gICAgcHVibGljIGdldFNlbGVjdGVkQ29sdW1ucygpOiBBcnJheTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uU2VsZWN0aW9uLnNpemUgPyBBcnJheS5mcm9tKHRoaXMuY29sdW1uU2VsZWN0aW9uLmtleXMoKSkgOiBbXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNDb2x1bW5TZWxlY3RlZChmaWVsZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtblNlbGVjdGlvbi5zaXplID4gMCAmJiB0aGlzLmNvbHVtblNlbGVjdGlvbi5oYXMoZmllbGQpO1xuICAgIH1cblxuICAgIC8qKiBTZWxlY3QgdGhlIHNwZWNpZmllZCBjb2x1bW4gYW5kIGVtaXQgZXZlbnQuICovXG4gICAgcHVibGljIHNlbGVjdENvbHVtbihmaWVsZDogc3RyaW5nLCBjbGVhclByZXZTZWxlY3Rpb24/LCBzZWxlY3RDb2x1bW5zUmFuZ2U/LCBldmVudD8pOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3RhdGVDb2x1bW4gPSB0aGlzLmNvbHVtbnNTdGF0ZS5maWVsZCA/IHRoaXMuZ3JpZC5nZXRDb2x1bW5CeU5hbWUodGhpcy5jb2x1bW5zU3RhdGUuZmllbGQpIDogbnVsbDtcbiAgICAgICAgaWYgKCFldmVudCB8fCAhc3RhdGVDb2x1bW4gfHwgc3RhdGVDb2x1bW4udmlzaWJsZUluZGV4IDwgMCB8fCAhc2VsZWN0Q29sdW1uc1JhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbnNTdGF0ZS5maWVsZCA9IGZpZWxkO1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5zU3RhdGUucmFuZ2UgPSBbXTtcblxuICAgICAgICAgICAgY29uc3QgbmV3U2VsZWN0aW9uID0gY2xlYXJQcmV2U2VsZWN0aW9uID8gW2ZpZWxkXSA6IHRoaXMuZ2V0U2VsZWN0ZWRDb2x1bW5zKCkuaW5kZXhPZihmaWVsZCkgIT09IC0xID9cbiAgICAgICAgICAgICAgICB0aGlzLmdldFNlbGVjdGVkQ29sdW1ucygpIDogWy4uLnRoaXMuZ2V0U2VsZWN0ZWRDb2x1bW5zKCksIGZpZWxkXTtcbiAgICAgICAgICAgIGNvbnN0IHJlbW92ZWQgPSBjbGVhclByZXZTZWxlY3Rpb24gPyB0aGlzLmdldFNlbGVjdGVkQ29sdW1ucygpLmZpbHRlcihjb2xGaWVsZCA9PiBjb2xGaWVsZCAhPT0gZmllbGQpIDogW107XG4gICAgICAgICAgICBjb25zdCBhZGRlZCA9IHRoaXMuaXNDb2x1bW5TZWxlY3RlZChmaWVsZCkgPyBbXSA6IFtmaWVsZF07XG4gICAgICAgICAgICB0aGlzLmVtaXRDb2x1bW5TZWxlY3Rpb25FdmVudChuZXdTZWxlY3Rpb24sIGFkZGVkLCByZW1vdmVkLCBldmVudCk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0Q29sdW1uc1JhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdENvbHVtbnNSYW5nZShmaWVsZCwgZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFNlbGVjdCBzcGVjaWZpZWQgY29sdW1ucy4gQW5kIGVtaXQgZXZlbnQuICovXG4gICAgcHVibGljIHNlbGVjdENvbHVtbnMoZmllbGRzOiBzdHJpbmdbXSwgY2xlYXJQcmV2U2VsZWN0aW9uPywgc2VsZWN0Q29sdW1uc1JhbmdlPywgZXZlbnQ/KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSBmaWVsZHMubWFwKGYgPT4gdGhpcy5ncmlkLmdldENvbHVtbkJ5TmFtZShmKSkuc29ydCgoYSwgYikgPT4gYS52aXNpYmxlSW5kZXggLSBiLnZpc2libGVJbmRleCk7XG4gICAgICAgIGNvbnN0IHN0YXRlQ29sdW1uID0gdGhpcy5jb2x1bW5zU3RhdGUuZmllbGQgPyB0aGlzLmdyaWQuZ2V0Q29sdW1uQnlOYW1lKHRoaXMuY29sdW1uc1N0YXRlLmZpZWxkKSA6IG51bGw7XG4gICAgICAgIGlmICghc3RhdGVDb2x1bW4gfHwgc3RhdGVDb2x1bW4udmlzaWJsZUluZGV4IDwgMCB8fCAhc2VsZWN0Q29sdW1uc1JhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbnNTdGF0ZS5maWVsZCA9IGNvbHVtbnNbMF0gPyBjb2x1bW5zWzBdLmZpZWxkIDogbnVsbDtcbiAgICAgICAgICAgIHRoaXMuY29sdW1uc1N0YXRlLnJhbmdlID0gW107XG5cbiAgICAgICAgICAgIGNvbnN0IGFkZGVkID0gZmllbGRzLmZpbHRlcihjb2xGaWVsZCA9PiAhdGhpcy5pc0NvbHVtblNlbGVjdGVkKGNvbEZpZWxkKSk7XG4gICAgICAgICAgICBjb25zdCByZW1vdmVkID0gY2xlYXJQcmV2U2VsZWN0aW9uID8gdGhpcy5nZXRTZWxlY3RlZENvbHVtbnMoKS5maWx0ZXIoY29sRmllbGQgPT4gZmllbGRzLmluZGV4T2YoY29sRmllbGQpID09PSAtMSkgOiBbXTtcbiAgICAgICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IGNsZWFyUHJldlNlbGVjdGlvbiA/IGZpZWxkcyA6IHRoaXMuZ2V0U2VsZWN0ZWRDb2x1bW5zKCkuY29uY2F0KGFkZGVkKTtcblxuICAgICAgICAgICAgdGhpcy5lbWl0Q29sdW1uU2VsZWN0aW9uRXZlbnQobmV3U2VsZWN0aW9uLCBhZGRlZCwgcmVtb3ZlZCwgZXZlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZmlsZWRTdGFydCA9IHN0YXRlQ29sdW1uLnZpc2libGVJbmRleCA+XG4gICAgICAgICAgICAgICAgY29sdW1uc1tjb2x1bW5zLmxlbmd0aCAtIDFdLnZpc2libGVJbmRleCA/IGNvbHVtbnNbMF0uZmllbGQgOiBjb2x1bW5zW2NvbHVtbnMubGVuZ3RoIC0gMV0uZmllbGQ7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdENvbHVtbnNSYW5nZShmaWxlZFN0YXJ0LCBldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogU2VsZWN0IHJhbmdlIGZyb20gbGFzdCBjbGlja2VkIGNvbHVtbiB0byB0aGUgY3VycmVudCBzcGVjaWZpZWQgY29sdW1uLiAqL1xuICAgIHB1YmxpYyBzZWxlY3RDb2x1bW5zUmFuZ2UoZmllbGQ6IHN0cmluZywgZXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY3VyckluZGV4ID0gdGhpcy5ncmlkLmdldENvbHVtbkJ5TmFtZSh0aGlzLmNvbHVtbnNTdGF0ZS5maWVsZCkudmlzaWJsZUluZGV4O1xuICAgICAgICBjb25zdCBuZXdJbmRleCA9IHRoaXMuZ3JpZC5jb2x1bW5Ub1Zpc2libGVJbmRleChmaWVsZCk7XG4gICAgICAgIGNvbnN0IGNvbHVtbnNGaWVsZHMgPSB0aGlzLmdyaWQudmlzaWJsZUNvbHVtbnNcbiAgICAgICAgICAgIC5maWx0ZXIoYyA9PiAhYy5jb2x1bW5Hcm91cClcbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnZpc2libGVJbmRleCAtIGIudmlzaWJsZUluZGV4KVxuICAgICAgICAgICAgLnNsaWNlKE1hdGgubWluKGN1cnJJbmRleCwgbmV3SW5kZXgpLCBNYXRoLm1heChjdXJySW5kZXgsIG5ld0luZGV4KSArIDEpXG4gICAgICAgICAgICAuZmlsdGVyKGNvbCA9PiBjb2wuc2VsZWN0YWJsZSkubWFwKGNvbCA9PiBjb2wuZmllbGQpO1xuICAgICAgICBjb25zdCByZW1vdmVkID0gW107XG4gICAgICAgIGNvbnN0IG9sZEFkZGVkID0gW107XG4gICAgICAgIGNvbnN0IGFkZGVkID0gY29sdW1uc0ZpZWxkcy5maWx0ZXIoY29sRmllbGQgPT4gIXRoaXMuaXNDb2x1bW5TZWxlY3RlZChjb2xGaWVsZCkpO1xuICAgICAgICB0aGlzLmNvbHVtbnNTdGF0ZS5yYW5nZS5mb3JFYWNoKGYgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbHVtbnNGaWVsZHMuaW5kZXhPZihmKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICByZW1vdmVkLnB1c2goZik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG9sZEFkZGVkLnB1c2goZik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNvbHVtbnNTdGF0ZS5yYW5nZSA9IGNvbHVtbnNGaWVsZHMuZmlsdGVyKGNvbEZpZWxkID0+ICF0aGlzLmlzQ29sdW1uU2VsZWN0ZWQoY29sRmllbGQpIHx8IG9sZEFkZGVkLmluZGV4T2YoY29sRmllbGQpID4gLTEpO1xuICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGVkQ29sdW1ucygpLmNvbmNhdChhZGRlZCkuZmlsdGVyKGMgPT4gcmVtb3ZlZC5pbmRleE9mKGMpID09PSAtMSk7XG4gICAgICAgIHRoaXMuZW1pdENvbHVtblNlbGVjdGlvbkV2ZW50KG5ld1NlbGVjdGlvbiwgYWRkZWQsIHJlbW92ZWQsIGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKiogU2VsZWN0IHNwZWNpZmllZCBjb2x1bW5zLiBObyBldmVudCBpcyBlbWl0dGVkLiAqL1xuICAgIHB1YmxpYyBzZWxlY3RDb2x1bW5zV2l0aE5vRXZlbnQoZmllbGRzOiBzdHJpbmdbXSwgY2xlYXJQcmV2U2VsZWN0aW9uPyk6IHZvaWQge1xuICAgICAgICBpZiAoY2xlYXJQcmV2U2VsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtblNlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICB9XG4gICAgICAgIGZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29sdW1uU2VsZWN0aW9uLmFkZChmaWVsZCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBEZXNlbGVjdCB0aGUgc3BlY2lmaWVkIGNvbHVtbiBhbmQgZW1pdCBldmVudC4gKi9cbiAgICBwdWJsaWMgZGVzZWxlY3RDb2x1bW4oZmllbGQ6IHN0cmluZywgZXZlbnQ/KTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5pdENvbHVtbnNTdGF0ZSgpO1xuICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGVkQ29sdW1ucygpLmZpbHRlcihjID0+IGMgIT09IGZpZWxkKTtcbiAgICAgICAgdGhpcy5lbWl0Q29sdW1uU2VsZWN0aW9uRXZlbnQobmV3U2VsZWN0aW9uLCBbXSwgW2ZpZWxkXSwgZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKiBEZXNlbGVjdCBzcGVjaWZpZWQgY29sdW1ucy4gTm8gZXZlbnQgaXMgZW1pdHRlZC4gKi9cbiAgICBwdWJsaWMgZGVzZWxlY3RDb2x1bW5zV2l0aE5vRXZlbnQoZmllbGRzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgICAgICBmaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB0aGlzLmNvbHVtblNlbGVjdGlvbi5kZWxldGUoZmllbGQpKTtcbiAgICB9XG5cbiAgICAvKiogRGVzZWxlY3Qgc3BlY2lmaWVkIGNvbHVtbnMuIEFuZCBlbWl0IGV2ZW50LiAqL1xuICAgIHB1YmxpYyBkZXNlbGVjdENvbHVtbnMoZmllbGRzOiBzdHJpbmdbXSwgZXZlbnQ/KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlbW92ZWQgPSB0aGlzLmdldFNlbGVjdGVkQ29sdW1ucygpLmZpbHRlcihjb2xGaWVsZCA9PiBmaWVsZHMuaW5kZXhPZihjb2xGaWVsZCkgPiAtMSk7XG4gICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0ZWRDb2x1bW5zKCkuZmlsdGVyKGNvbEZpZWxkID0+IGZpZWxkcy5pbmRleE9mKGNvbEZpZWxkKSA9PT0gLTEpO1xuXG4gICAgICAgIHRoaXMuZW1pdENvbHVtblNlbGVjdGlvbkV2ZW50KG5ld1NlbGVjdGlvbiwgW10sIHJlbW92ZWQsIGV2ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZW1pdENvbHVtblNlbGVjdGlvbkV2ZW50KG5ld1NlbGVjdGlvbiwgYWRkZWQsIHJlbW92ZWQsIGV2ZW50Pyk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBjdXJyU2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3RlZENvbHVtbnMoKTtcbiAgICAgICAgaWYgKHRoaXMuYXJlRXF1YWxDb2xsZWN0aW9ucyhjdXJyU2VsZWN0aW9uLCBuZXdTZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhcmdzID0ge1xuICAgICAgICAgICAgb2xkU2VsZWN0aW9uOiBjdXJyU2VsZWN0aW9uLCBuZXdTZWxlY3Rpb24sXG4gICAgICAgICAgICBhZGRlZCwgcmVtb3ZlZCwgZXZlbnQsIGNhbmNlbDogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5ncmlkLmNvbHVtblNlbGVjdGlvbkNoYW5naW5nLmVtaXQoYXJncyk7XG4gICAgICAgIGlmIChhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0Q29sdW1uc1dpdGhOb0V2ZW50KGFyZ3MubmV3U2VsZWN0aW9uLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvKiogQ2xlYXIgY29sdW1uU2VsZWN0aW9uICovXG4gICAgcHVibGljIGNsZWFyQWxsU2VsZWN0ZWRDb2x1bW5zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbHVtblNlbGVjdGlvbi5jbGVhcigpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhcmVFcXVhbENvbGxlY3Rpb25zKGZpcnN0LCBzZWNvbmQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGZpcnN0Lmxlbmd0aCA9PT0gc2Vjb25kLmxlbmd0aCAmJiBuZXcgU2V0KGZpcnN0LmNvbmNhdChzZWNvbmQpKS5zaXplID09PSBmaXJzdC5sZW5ndGg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogKOKVr8Kw4pahwrDvvInila/vuLUg4pS74pSB4pS7XG4gICAgICogQ2hyb21lIGFuZCBDaHJvbWl1bSBkb24ndCBjYXJlIGFib3V0IHRoZSBhY3RpdmVcbiAgICAgKiByYW5nZSBhZnRlciBrZXlib2FyZCBuYXZpZ2F0aW9uLCB0aHVzIHRoaXMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfbW92ZVNlbGVjdGlvbkNocm9tZShub2RlOiBOb2RlKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgICBjb25zdCByYW5nZSA9IG5ldyBSYW5nZSgpO1xuICAgICAgICByYW5nZS5zZWxlY3ROb2RlKG5vZGUpO1xuICAgICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKTtcbiAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzRmlsdGVyaW5nQXBwbGllZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICFGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUuZW1wdHkodGhpcy5ncmlkLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSkgfHxcbiAgICAgICAgICAgICFGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUuZW1wdHkodGhpcy5ncmlkLmFkdmFuY2VkRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzUm93RGVsZXRlZChyb3dJRCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmdyaWRBUEkucm93X2RlbGV0ZWRfdHJhbnNhY3Rpb24ocm93SUQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcG9pbnRlck9yaWdpbkhhbmRsZXIgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy5wb2ludGVyRXZlbnRJbkdyaWRCb2R5ID0gZmFsc2U7XG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgdGhpcy5wb2ludGVyT3JpZ2luSGFuZGxlcik7XG5cbiAgICAgICAgY29uc3QgdGFyZ2V0VGFnTmFtZSA9IGV2ZW50LnRhcmdldC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICh0YXJnZXRUYWdOYW1lICE9PSAnaWd4LWdyaWQtY2VsbCcgJiYgdGFyZ2V0VGFnTmFtZSAhPT0gJ2lneC10cmVlLWdyaWQtY2VsbCcpIHtcbiAgICAgICAgICAgIHRoaXMucG9pbnRlclVwKHRoaXMuX2xhc3RTZWxlY3RlZE5vZGUsIHRoaXMuZ3JpZC5yYW5nZVNlbGVjdGVkLCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH07XG59XG4iXX0=
|