@tetacom/ng-components 1.0.131 → 1.0.132
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/component/table/table/table.component.d.ts +2 -1
- package/component/table/table-body/table-body.component.d.ts +3 -3
- package/esm2020/component/table/table/table.component.mjs +8 -3
- package/esm2020/component/table/table-body/table-body.component.mjs +16 -11
- package/fesm2015/tetacom-ng-components.mjs +22 -12
- package/fesm2015/tetacom-ng-components.mjs.map +1 -1
- package/fesm2020/tetacom-ng-components.mjs +22 -12
- package/fesm2020/tetacom-ng-components.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -28,6 +28,7 @@ export declare class TableComponent<T> implements OnInit, OnDestroy, AfterViewIn
|
|
|
28
28
|
selectType: SelectType;
|
|
29
29
|
aggregate: boolean;
|
|
30
30
|
trackRow: (index: number, row: T) => any;
|
|
31
|
+
trackColumns: (index: number, column: TableColumn) => any;
|
|
31
32
|
editType: EditType;
|
|
32
33
|
editEvent: EditEvent;
|
|
33
34
|
rowEditable: boolean | ((row: T) => boolean);
|
|
@@ -81,5 +82,5 @@ export declare class TableComponent<T> implements OnInit, OnDestroy, AfterViewIn
|
|
|
81
82
|
private getRow;
|
|
82
83
|
private onScroll;
|
|
83
84
|
static ɵfac: i0.ɵɵFactoryDeclaration<TableComponent<any>, never>;
|
|
84
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<TableComponent<any>, "teta-table", never, { "data": "data"; "columns": "columns"; "dict": "dict"; "filterOptions": "filterOptions"; "state": "state"; "cookieName": "cookieName"; "virtual": "virtual"; "detailComponent": "detailComponent"; "activeRow": "activeRow"; "selectedRows": "selectedRows"; "selectType": "selectType"; "aggregate": "aggregate"; "trackRow": "trackRow"; "editType": "editType"; "editEvent": "editEvent"; "rowEditable": "rowEditable"; "rowClass": "rowClass"; "scrollToIndex": "scrollToIndex"; "showHeadCellMenu": "showHeadCellMenu"; "contextMenu": "contextMenu"; "contextMenuOpen": "contextMenuOpen"; }, { "contextMenuOpenChange": "contextMenuOpenChange"; "stateChange": "stateChange"; "bodyLeft": "bodyLeft"; "activeRowChange": "activeRowChange"; "selectedRowsChange": "selectedRowsChange"; "cellClick": "cellClick"; "cellDoubleClick": "cellDoubleClick"; "cellFocus": "cellFocus"; "cellKeyDown": "cellKeyDown"; "rowLeft": "rowLeft"; "rowEditStart": "rowEditStart"; "rowEditEnd": "rowEditEnd"; "cellEditStart": "cellEditStart"; "cellEditEnd": "cellEditEnd"; "valueChange": "valueChange"; "tableService": "tableService"; }, never, ["*"], false>;
|
|
85
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<TableComponent<any>, "teta-table", never, { "data": "data"; "columns": "columns"; "dict": "dict"; "filterOptions": "filterOptions"; "state": "state"; "cookieName": "cookieName"; "virtual": "virtual"; "detailComponent": "detailComponent"; "activeRow": "activeRow"; "selectedRows": "selectedRows"; "selectType": "selectType"; "aggregate": "aggregate"; "trackRow": "trackRow"; "trackColumns": "trackColumns"; "editType": "editType"; "editEvent": "editEvent"; "rowEditable": "rowEditable"; "rowClass": "rowClass"; "scrollToIndex": "scrollToIndex"; "showHeadCellMenu": "showHeadCellMenu"; "contextMenu": "contextMenu"; "contextMenuOpen": "contextMenuOpen"; }, { "contextMenuOpenChange": "contextMenuOpenChange"; "stateChange": "stateChange"; "bodyLeft": "bodyLeft"; "activeRowChange": "activeRowChange"; "selectedRowsChange": "selectedRowsChange"; "cellClick": "cellClick"; "cellDoubleClick": "cellDoubleClick"; "cellFocus": "cellFocus"; "cellKeyDown": "cellKeyDown"; "rowLeft": "rowLeft"; "rowEditStart": "rowEditStart"; "rowEditEnd": "rowEditEnd"; "cellEditStart": "cellEditStart"; "cellEditEnd": "cellEditEnd"; "valueChange": "valueChange"; "tableService": "tableService"; }, never, ["*"], false>;
|
|
85
86
|
}
|
|
@@ -22,6 +22,8 @@ export declare class TableBodyComponent<T> implements OnInit, OnDestroy {
|
|
|
22
22
|
aggregate: boolean;
|
|
23
23
|
selectType: SelectType;
|
|
24
24
|
rowClass: (row: T, index?: number) => string;
|
|
25
|
+
trackRow: (index: number, row: T) => any;
|
|
26
|
+
trackColumns: (index: number, column: TableColumn) => any;
|
|
25
27
|
viewport: CdkVirtualScrollViewport;
|
|
26
28
|
private readonly tableBodyClass;
|
|
27
29
|
set data(data: T[]);
|
|
@@ -48,13 +50,11 @@ export declare class TableBodyComponent<T> implements OnInit, OnDestroy {
|
|
|
48
50
|
ngOnDestroy(): void;
|
|
49
51
|
getAggregateValue(column: TableColumn): number;
|
|
50
52
|
getAggregateText(column: TableColumn): string;
|
|
51
|
-
trackRow(index: number, row: T): any;
|
|
52
|
-
trackColumns(index: number, column: TableColumn): any;
|
|
53
53
|
private addResizeObserver;
|
|
54
54
|
private removeResizeObserver;
|
|
55
55
|
private getSum;
|
|
56
56
|
private getMin;
|
|
57
57
|
private getMax;
|
|
58
58
|
static ɵfac: i0.ɵɵFactoryDeclaration<TableBodyComponent<any>, never>;
|
|
59
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<TableBodyComponent<any>, "teta-table-body", never, { "virtual": "virtual"; "activeRow": "activeRow"; "selectedRows": "selectedRows"; "additionalComponent": "additionalComponent"; "aggregate": "aggregate"; "selectType": "selectType"; "rowClass": "rowClass"; }, {}, never, never, false>;
|
|
59
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<TableBodyComponent<any>, "teta-table-body", never, { "virtual": "virtual"; "activeRow": "activeRow"; "selectedRows": "selectedRows"; "additionalComponent": "additionalComponent"; "aggregate": "aggregate"; "selectType": "selectType"; "rowClass": "rowClass"; "trackRow": "trackRow"; "trackColumns": "trackColumns"; }, {}, never, never, false>;
|
|
60
60
|
}
|
|
@@ -26,6 +26,9 @@ export class TableComponent {
|
|
|
26
26
|
}
|
|
27
27
|
return index;
|
|
28
28
|
};
|
|
29
|
+
this.trackColumns = (index, column) => {
|
|
30
|
+
return column.name;
|
|
31
|
+
};
|
|
29
32
|
this.editType = EditType.cell;
|
|
30
33
|
this.editEvent = EditEvent.doubleClick;
|
|
31
34
|
this.showHeadCellMenu = true;
|
|
@@ -365,10 +368,10 @@ export class TableComponent {
|
|
|
365
368
|
}
|
|
366
369
|
}
|
|
367
370
|
TableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: TableComponent, deps: [{ token: i1.TableService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
368
|
-
TableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: TableComponent, selector: "teta-table", inputs: { data: "data", columns: "columns", dict: "dict", filterOptions: "filterOptions", state: "state", cookieName: "cookieName", virtual: "virtual", detailComponent: "detailComponent", activeRow: "activeRow", selectedRows: "selectedRows", selectType: "selectType", aggregate: "aggregate", trackRow: "trackRow", editType: "editType", editEvent: "editEvent", rowEditable: "rowEditable", rowClass: "rowClass", scrollToIndex: "scrollToIndex", showHeadCellMenu: "showHeadCellMenu", contextMenu: "contextMenu", contextMenuOpen: "contextMenuOpen" }, outputs: { contextMenuOpenChange: "contextMenuOpenChange", stateChange: "stateChange", bodyLeft: "bodyLeft", activeRowChange: "activeRowChange", selectedRowsChange: "selectedRowsChange", cellClick: "cellClick", cellDoubleClick: "cellDoubleClick", cellFocus: "cellFocus", cellKeyDown: "cellKeyDown", rowLeft: "rowLeft", rowEditStart: "rowEditStart", rowEditEnd: "rowEditEnd", cellEditStart: "cellEditStart", cellEditEnd: "cellEditEnd", valueChange: "valueChange", tableService: "tableService" }, host: { listeners: { "document:click": "handleClickOutsideAnyRow($event)", "focusin": "focusIn($event)", "dblclick": "dblclick($event)", "keydown": "keydown($event)", "mousedown": "mousedown($event)" }, properties: { "class.table": "this.tableClass" } }, providers: [TableService], viewQueries: [{ propertyName: "menu", first: true, predicate: ["contextMenu"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"column column_auto\">\n <teta-table-head\n style=\"z-index: 1\"\n [selectType]=\"selectType\"\n [showHeadCellMenu]=\"showHeadCellMenu\"></teta-table-head>\n <div class=\"column column_auto position-relative\"\n style=\"z-index: 0\"\n [tetaContextMenu]=\"contextMenu\"\n [verticalAlign]=\"verticalAlign.auto\"\n [align]=\"align.auto\"\n [appendToBody]=\"true\"\n [data]=\"contextMenuRow\"\n [open]=\"contextMenuOpen\"\n (openChange)=\"setContextMenuOpen($event)\">\n <teta-table-body\n (contextmenu)=\"setContextMenuRow($event)\"\n [aggregate]=\"aggregate\"\n [virtual]=\"virtual\"\n [activeRow]=\"activeRow\"\n [selectedRows]=\"selectedRowsList\"\n [additionalComponent]=\"detailComponent\"\n [selectType]=\"selectType\"\n [rowClass]=\"rowClass\"></teta-table-body>\n <div class=\"column column_auto\"\n style=\"position: absolute; top:0; bottom:0;left:0;right:0;\"\n *ngIf=\"!data?.length\">\n <ng-content></ng-content>\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ContextMenuDirective, selector: "[tetaContextMenu]", inputs: ["tetaContextMenu", "autoCloseIgnore"] }, { kind: "component", type: i4.TableHeadComponent, selector: "teta-table-head", inputs: ["selectType", "showHeadCellMenu"] }, { kind: "component", type: i5.TableBodyComponent, selector: "teta-table-body", inputs: ["virtual", "activeRow", "selectedRows", "additionalComponent", "aggregate", "selectType", "rowClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
371
|
+
TableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: TableComponent, selector: "teta-table", inputs: { data: "data", columns: "columns", dict: "dict", filterOptions: "filterOptions", state: "state", cookieName: "cookieName", virtual: "virtual", detailComponent: "detailComponent", activeRow: "activeRow", selectedRows: "selectedRows", selectType: "selectType", aggregate: "aggregate", trackRow: "trackRow", trackColumns: "trackColumns", editType: "editType", editEvent: "editEvent", rowEditable: "rowEditable", rowClass: "rowClass", scrollToIndex: "scrollToIndex", showHeadCellMenu: "showHeadCellMenu", contextMenu: "contextMenu", contextMenuOpen: "contextMenuOpen" }, outputs: { contextMenuOpenChange: "contextMenuOpenChange", stateChange: "stateChange", bodyLeft: "bodyLeft", activeRowChange: "activeRowChange", selectedRowsChange: "selectedRowsChange", cellClick: "cellClick", cellDoubleClick: "cellDoubleClick", cellFocus: "cellFocus", cellKeyDown: "cellKeyDown", rowLeft: "rowLeft", rowEditStart: "rowEditStart", rowEditEnd: "rowEditEnd", cellEditStart: "cellEditStart", cellEditEnd: "cellEditEnd", valueChange: "valueChange", tableService: "tableService" }, host: { listeners: { "document:click": "handleClickOutsideAnyRow($event)", "focusin": "focusIn($event)", "dblclick": "dblclick($event)", "keydown": "keydown($event)", "mousedown": "mousedown($event)" }, properties: { "class.table": "this.tableClass" } }, providers: [TableService], viewQueries: [{ propertyName: "menu", first: true, predicate: ["contextMenu"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"column column_auto\">\n <teta-table-head\n style=\"z-index: 1\"\n [selectType]=\"selectType\"\n [showHeadCellMenu]=\"showHeadCellMenu\"></teta-table-head>\n <div class=\"column column_auto position-relative\"\n style=\"z-index: 0\"\n [tetaContextMenu]=\"contextMenu\"\n [verticalAlign]=\"verticalAlign.auto\"\n [align]=\"align.auto\"\n [appendToBody]=\"true\"\n [data]=\"contextMenuRow\"\n [open]=\"contextMenuOpen\"\n (openChange)=\"setContextMenuOpen($event)\">\n <teta-table-body\n (contextmenu)=\"setContextMenuRow($event)\"\n [aggregate]=\"aggregate\"\n [virtual]=\"virtual\"\n [activeRow]=\"activeRow\"\n [trackRow]=\"trackRow\"\n [trackColumns]=\"trackColumns\"\n [selectedRows]=\"selectedRowsList\"\n [additionalComponent]=\"detailComponent\"\n [selectType]=\"selectType\"\n [rowClass]=\"rowClass\"></teta-table-body>\n <div class=\"column column_auto\"\n style=\"position: absolute; top:0; bottom:0;left:0;right:0;\"\n *ngIf=\"!data?.length\">\n <ng-content></ng-content>\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ContextMenuDirective, selector: "[tetaContextMenu]", inputs: ["tetaContextMenu", "autoCloseIgnore"] }, { kind: "component", type: i4.TableHeadComponent, selector: "teta-table-head", inputs: ["selectType", "showHeadCellMenu"] }, { kind: "component", type: i5.TableBodyComponent, selector: "teta-table-body", inputs: ["virtual", "activeRow", "selectedRows", "additionalComponent", "aggregate", "selectType", "rowClass", "trackRow", "trackColumns"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
369
372
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: TableComponent, decorators: [{
|
|
370
373
|
type: Component,
|
|
371
|
-
args: [{ selector: 'teta-table', changeDetection: ChangeDetectionStrategy.OnPush, providers: [TableService], template: "<div class=\"column column_auto\">\n <teta-table-head\n style=\"z-index: 1\"\n [selectType]=\"selectType\"\n [showHeadCellMenu]=\"showHeadCellMenu\"></teta-table-head>\n <div class=\"column column_auto position-relative\"\n style=\"z-index: 0\"\n [tetaContextMenu]=\"contextMenu\"\n [verticalAlign]=\"verticalAlign.auto\"\n [align]=\"align.auto\"\n [appendToBody]=\"true\"\n [data]=\"contextMenuRow\"\n [open]=\"contextMenuOpen\"\n (openChange)=\"setContextMenuOpen($event)\">\n <teta-table-body\n (contextmenu)=\"setContextMenuRow($event)\"\n [aggregate]=\"aggregate\"\n [virtual]=\"virtual\"\n [activeRow]=\"activeRow\"\n [selectedRows]=\"selectedRowsList\"\n [additionalComponent]=\"detailComponent\"\n [selectType]=\"selectType\"\n [rowClass]=\"rowClass\"></teta-table-body>\n <div class=\"column column_auto\"\n style=\"position: absolute; top:0; bottom:0;left:0;right:0;\"\n *ngIf=\"!data?.length\">\n <ng-content></ng-content>\n </div>\n </div>\n</div>\n" }]
|
|
374
|
+
args: [{ selector: 'teta-table', changeDetection: ChangeDetectionStrategy.OnPush, providers: [TableService], template: "<div class=\"column column_auto\">\n <teta-table-head\n style=\"z-index: 1\"\n [selectType]=\"selectType\"\n [showHeadCellMenu]=\"showHeadCellMenu\"></teta-table-head>\n <div class=\"column column_auto position-relative\"\n style=\"z-index: 0\"\n [tetaContextMenu]=\"contextMenu\"\n [verticalAlign]=\"verticalAlign.auto\"\n [align]=\"align.auto\"\n [appendToBody]=\"true\"\n [data]=\"contextMenuRow\"\n [open]=\"contextMenuOpen\"\n (openChange)=\"setContextMenuOpen($event)\">\n <teta-table-body\n (contextmenu)=\"setContextMenuRow($event)\"\n [aggregate]=\"aggregate\"\n [virtual]=\"virtual\"\n [activeRow]=\"activeRow\"\n [trackRow]=\"trackRow\"\n [trackColumns]=\"trackColumns\"\n [selectedRows]=\"selectedRowsList\"\n [additionalComponent]=\"detailComponent\"\n [selectType]=\"selectType\"\n [rowClass]=\"rowClass\"></teta-table-body>\n <div class=\"column column_auto\"\n style=\"position: absolute; top:0; bottom:0;left:0;right:0;\"\n *ngIf=\"!data?.length\">\n <ng-content></ng-content>\n </div>\n </div>\n</div>\n" }]
|
|
372
375
|
}], ctorParameters: function () { return [{ type: i1.TableService }, { type: i0.ElementRef }]; }, propDecorators: { data: [{
|
|
373
376
|
type: Input
|
|
374
377
|
}], columns: [{
|
|
@@ -395,6 +398,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
|
|
|
395
398
|
type: Input
|
|
396
399
|
}], trackRow: [{
|
|
397
400
|
type: Input
|
|
401
|
+
}], trackColumns: [{
|
|
402
|
+
type: Input
|
|
398
403
|
}], editType: [{
|
|
399
404
|
type: Input
|
|
400
405
|
}], editEvent: [{
|
|
@@ -465,4 +470,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
|
|
|
465
470
|
type: HostListener,
|
|
466
471
|
args: ['mousedown', ['$event']]
|
|
467
472
|
}] } });
|
|
468
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudC90YWJsZS90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3RhYmxlL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULFlBQVksRUFDWixXQUFXLEVBQ1gsWUFBWSxFQUNaLEtBQUssRUFJTCxNQUFNLEVBSU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQU10RCxPQUFPLEVBQUMsTUFBTSxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDbEQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBSXBELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUM5RCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sMENBQTBDLENBQUM7QUFDdkUsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLGlDQUFpQyxDQUFDOzs7Ozs7O0FBU3RELE1BQU0sT0FBTyxjQUFjO0lBb0V6QixZQUFvQixJQUFxQixFQUFVLFdBQXVCO1FBQXRELFNBQUksR0FBSixJQUFJLENBQWlCO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFsRWpFLFNBQUksR0FBUSxFQUFFLENBQUM7UUFDZixZQUFPLEdBQWtCLEVBQUUsQ0FBQztRQWM1QixlQUFVLEdBQWUsVUFBVSxDQUFDLEtBQUssQ0FBQztRQUUxQyxhQUFRLEdBQW1DLENBQUMsS0FBYSxFQUFFLEdBQU0sRUFBRSxFQUFFO1lBQzVFLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNiLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2xCO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUM7UUFDTyxhQUFRLEdBQWEsUUFBUSxDQUFDLElBQUksQ0FBQztRQUNuQyxjQUFTLEdBQWMsU0FBUyxDQUFDLFdBQVcsQ0FBQztRQVE3QyxxQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFHdkIsMEJBQXFCLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUc5RCxnQkFBVyxHQUE4QixJQUFJLFlBQVksRUFBZSxDQUFDO1FBQy9ELGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBSyxDQUFDO1FBQ2pDLG9CQUFlLEdBQW9CLElBQUksWUFBWSxFQUFFLENBQUM7UUFDdEQsdUJBQWtCLEdBQzFCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDWCxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQXlCLENBQUM7UUFDdEQsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBeUIsQ0FBQztRQUM1RCxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQXlCLENBQUM7UUFDdEQsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBeUIsQ0FBQztRQUN4RCxZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQUssQ0FBQztRQUNoQyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFvQixDQUFDO1FBQ3BELGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBSyxDQUFDO1FBQ25DLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQW9CLENBQUM7UUFDckQsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBb0IsQ0FBQztRQUNuRCxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFvQixDQUFDO1FBQ25ELGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUM7UUFFaEIsZUFBVSxHQUFHLElBQUksQ0FBQztRQUkvRCxrQkFBYSxHQUFHLGFBQWEsQ0FBQztRQUM5QixVQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ04sV0FBTSxHQUFHLElBQUksQ0FBQztRQXdWZCxhQUFRLEdBQUcsR0FBRyxFQUFFO1lBQ3RCLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDO1FBQzlELENBQUMsQ0FBQztRQXBWQSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUs7YUFDWixJQUFJLENBQ0gsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQzdCLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FDekM7YUFDQSxTQUFTLENBQUMsQ0FBQyxLQUFrQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBRW5FLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYTthQUNwQixJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDbkMsU0FBUyxDQUFDLENBQUMsSUFBZ0IsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTdGLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWTthQUNuQixJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDbkMsU0FBUyxDQUFDLENBQUMsSUFBc0IsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWpHLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWTthQUNuQixJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDbkMsU0FBUyxDQUFDLENBQUMsSUFBZ0IsRUFBRSxFQUFFLENBQzlCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQ3hELENBQUM7UUFFSixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVc7YUFDbEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ25DLFNBQVMsQ0FBQyxDQUFDLElBQXNCLEVBQUUsRUFBRSxDQUNwQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FDekQsQ0FBQztRQUVKLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWTthQUNuQixJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDbkMsU0FBUyxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7WUFDeEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztZQUM5QixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTO2FBQ2hCLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUNuQyxTQUFTLENBQUMsQ0FBQyxJQUFPLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFM0QsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZO2FBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUNuQyxTQUFTLENBQUMsQ0FBQyxXQUE2QixFQUFFLEVBQUU7WUFDM0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUNoRSxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUF6R0QsSUFDSSxLQUFLLENBQUMsS0FBa0I7UUFDMUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQW9CRCxJQUFhLGFBQWEsQ0FBQyxLQUFhO1FBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFrRjJDLHdCQUF3QixDQUNsRSxLQUFpQjtRQUVqQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9DLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxXQUFXLEVBQUU7Z0JBQ2YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7b0JBQ2xCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDO29CQUN6QyxLQUFLO2lCQUNOLENBQUMsQ0FBQztnQkFDSCxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssU0FBUyxDQUFDLEtBQUssRUFBRTtvQkFDdEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUFDO2lCQUN0QztxQkFBTTtvQkFDTCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLElBQUksV0FBVyxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRTt3QkFDL0ksSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO3FCQUMvQjtpQkFDRjthQUNGO1lBQ0QsSUFBSSxHQUFHLEVBQUU7Z0JBQ1AsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFO29CQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUNwQztxQkFBTSxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUU7b0JBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUM1QjtxQkFBTTtvQkFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7aUJBQzdCO2FBQ0Y7WUFDRCxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFO2dCQUM1QyxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLEdBQUcsRUFBRTtvQkFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQzlCO3FCQUFNO29CQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUMvQjthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRW9DLE9BQU8sQ0FBQyxLQUFVO1FBQ3JELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0MsSUFBSSxXQUFXLEVBQUU7WUFDZixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztnQkFDbEIsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUM7Z0JBQ3pDLEtBQUs7YUFDTixDQUFDLENBQUM7WUFDSCxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssU0FBUyxDQUFDLEtBQUssRUFBRTtnQkFDdEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQ3RDO1NBQ0Y7SUFDSCxDQUFDO0lBR0QsUUFBUSxDQUFDLEtBQWlCO1FBQ3hCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0MsSUFBSSxXQUFXLEVBQUU7WUFDZixVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDO29CQUN4QixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQztvQkFDekMsS0FBSztpQkFDTixDQUFDLENBQUM7Z0JBQ0gsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxXQUFXLEVBQUU7b0JBQzVDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztpQkFDdEM7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUdELE9BQU8sQ0FBQyxLQUFvQjtRQUMxQixJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUU7WUFDakIsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtnQkFDekIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2FBQ3ZCO1lBQ0QsT0FBTztTQUNSO1FBQ0QsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLFFBQVEsRUFBRTtZQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3hCLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsR0FBRyxFQUFFO2dCQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUM5QjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUMvQjtTQUNGO1FBQ0QsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQyxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssT0FBTyxFQUFFO1lBQ3pCLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsR0FBRyxFQUFFO2dCQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUM5QjtpQkFBTTtnQkFDTCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFO29CQUM3QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQztvQkFDckQsSUFBSSxNQUFNLEVBQUU7d0JBQ1YsSUFBSSxDQUFDLGtCQUFrQixDQUFDOzRCQUN0QixHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUc7NEJBQ2YsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNOzRCQUNyQixLQUFLLEVBQUUsU0FBUzt5QkFDakIsQ0FBQyxDQUFDO3FCQUNKO3lCQUFNO3dCQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO3FCQUMvQjtpQkFDRjthQUNGO1NBQ0Y7UUFDRCxJQUFJLFdBQVcsRUFBRTtZQUNmLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO2dCQUNwQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQztnQkFDekMsS0FBSzthQUNOLENBQUMsQ0FBQztZQUNILElBQUksS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLFFBQVEsQ0FBQyxFQUFFO2dCQUNuRSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzdELElBQUksTUFBTSxDQUFDLFVBQVUsS0FBSyxVQUFVLENBQUMsTUFBTSxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBVSxDQUFDLEVBQUU7b0JBQ3pFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQzt3QkFDdEIsR0FBRyxFQUFFLFdBQVcsQ0FBQyxHQUFHO3dCQUNwQixNQUFNLEVBQUUsV0FBVyxDQUFDLE1BQU07d0JBQzFCLEtBQUssRUFBRSxLQUFLO3FCQUNiLENBQUMsQ0FBQztpQkFDSjthQUNGO1lBQ0QsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRTtnQkFDcEQsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN2QixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUN4RCxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUU7b0JBQ2xCLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFdBQVcsQ0FBQyxDQUFDO2lCQUN6RDtnQkFDRCxJQUFJLE1BQU0sRUFBRTtvQkFDVixJQUFJLENBQUMsa0JBQWtCLENBQUM7d0JBQ3RCLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRzt3QkFDZixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07d0JBQ3JCLEtBQUssRUFBRSxTQUFTO3FCQUNqQixDQUFDLENBQUM7aUJBQ0o7YUFDRjtZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRTtnQkFDOUIsSUFBSSxNQUFNLENBQUM7Z0JBQ1gsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLFlBQVksRUFBRTtvQkFDOUIsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2lCQUM3QztnQkFDRCxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssV0FBVyxFQUFFO29CQUM3QixNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUM7aUJBQ2pEO2dCQUNELElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxTQUFTLEVBQUU7b0JBQzNCLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUFDO2lCQUNwRDtnQkFDRCxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssV0FBVyxFQUFFO29CQUM3QixNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUM7aUJBQ2hEO2dCQUNELElBQUksTUFBTSxFQUFFO29CQUNWLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDdkIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDNUMsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO2lCQUNsQjthQUNGO1NBQ0Y7SUFDSCxDQUFDO0lBRXNDLFNBQVMsQ0FBQyxLQUFpQjtRQUNoRSxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3RCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN4QjtJQUNILENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLFlBQVk7WUFDZixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQzlELHVCQUF1QixDQUN4QixDQUFDO1FBQ0YsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7U0FDcEM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztTQUN4QztRQUNELElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsRUFBRTtZQUMxQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDekM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDekMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztTQUMxQztRQUNELElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUN4QyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDMUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDckMsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRTtnQkFDdkQsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ3BDO1NBQ0Y7UUFDRCxJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQzdDLE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUM3QyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN2SCxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ0w7UUFDRCxJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3ZDO1FBQ0QsSUFBSSxPQUFPLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxFQUFFO1lBQzNDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQ2hEO1FBQ0QsSUFBSSxPQUFPLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7U0FDcEM7SUFDSCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsS0FBYztRQUMvQixJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztRQUM3QixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsS0FBaUI7UUFDakMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFDM0IsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEQsSUFBSSxVQUFVLEVBQUU7WUFDZCxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNuRSxJQUFJLFFBQVEsSUFBSSxDQUFDLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDekQ7U0FDRjtJQUNILENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxXQUF1QjtRQUNoRCxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUNyQztRQUNELElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsSUFBSSxFQUFFO1lBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ3RDO0lBQ0gsQ0FBQztJQUVPLGNBQWMsQ0FBQyxXQUE2QjtRQUNsRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FDakQsdUJBQXVCLFdBQVcsQ0FBQyxHQUFHLG1CQUFtQixXQUFXLENBQUMsTUFBTSxJQUFJLENBQ2hGLENBQUM7SUFDSixDQUFDO0lBRU8sWUFBWSxDQUFDLEtBQVk7UUFDL0IsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQW1CLEVBQUUsRUFBRTtZQUM1RCxPQUFPLE1BQU0sRUFBRSxZQUFZLElBQUksTUFBTSxFQUFFLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNsRSxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sR0FBRyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRU8sY0FBYyxDQUFDLEtBQVk7UUFDakMsSUFBSSxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3BFLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQyxJQUFJLElBQUksRUFBRTtZQUNSLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzdELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDcEQsSUFBSSxRQUFRLElBQUksQ0FBQyxJQUFJLFVBQVUsRUFBRTtnQkFDL0IsT0FBTztvQkFDTCxHQUFHLEVBQUUsUUFBUTtvQkFDYixNQUFNLEVBQUUsVUFBVTtvQkFDbEIsS0FBSztpQkFDTixDQUFDO2FBQ0g7U0FDRjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVPLE1BQU0sQ0FBQyxLQUFZO1FBQ3pCLElBQUksS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNwRSxPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEQsSUFBSSxVQUFVLEVBQUU7WUFDZCxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNuRSxJQUFJLFFBQVEsSUFBSSxDQUFDLEVBQUU7Z0JBQ2pCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDMUM7U0FDRjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzs7MkdBclpVLGNBQWM7K0ZBQWQsY0FBYyxxekNBRmQsQ0FBQyxZQUFZLENBQUMsa0tDeEMzQixxa0NBOEJBOzJGRFlhLGNBQWM7a0JBUDFCLFNBQVM7K0JBQ0UsWUFBWSxtQkFHTCx1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDLENBQUMsWUFBWSxDQUFDOzRIQUloQixJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUdGLEtBQUs7c0JBRFIsS0FBSztnQkFLRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFNRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVPLGFBQWE7c0JBQXpCLEtBQUs7Z0JBSUcsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDSSxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBR1AsV0FBVztzQkFEVixNQUFNO2dCQUVHLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBRUcsU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNtQyxJQUFJO3NCQUE3QyxTQUFTO3VCQUFDLGFBQWEsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBQ0ssVUFBVTtzQkFBdEQsV0FBVzt1QkFBQyxhQUFhO2dCQXlEa0Isd0JBQXdCO3NCQUFuRSxZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQXVDTCxPQUFPO3NCQUEzQyxZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFjbkMsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFpQnBDLE9BQU87c0JBRE4sWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBd0ZJLFNBQVM7c0JBQS9DLFlBQVk7dUJBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVHlwZSxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7VGFibGVTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlL3RhYmxlLnNlcnZpY2UnO1xuaW1wb3J0IHtUYWJsZUNvbHVtbn0gZnJvbSAnLi4vY29udHJhY3QvdGFibGUtY29sdW1uJztcbmltcG9ydCB7RmlsdGVyU3RhdGV9IGZyb20gJy4uLy4uL2ZpbHRlci9jb250YXJjdC9maWx0ZXItc3RhdGUnO1xuaW1wb3J0IHtEZXRhaWxDb21wb25lbnRCYXNlfSBmcm9tICcuLi9iYXNlL2RldGFpbC1jb21wb25lbnQtYmFzZSc7XG5pbXBvcnQge0lDZWxsRXZlbnR9IGZyb20gJy4uL2NvbnRyYWN0L2ktY2VsbC1ldmVudCc7XG5pbXBvcnQge0lDZWxsQ29vcmRpbmF0ZXN9IGZyb20gJy4uL2NvbnRyYWN0L2ktY2VsbC1jb29yZGluYXRlcyc7XG5pbXBvcnQge2ZpbHRlciwgdGFrZVdoaWxlfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0VkaXRUeXBlfSBmcm9tICcuLi9lbnVtL2VkaXQtdHlwZS5lbnVtJztcbmltcG9ydCB7RWRpdEV2ZW50fSBmcm9tICcuLi9lbnVtL2VkaXQtZXZlbnQuZW51bSc7XG5pbXBvcnQge1NlbGVjdFR5cGV9IGZyb20gJy4uL2VudW0vc2VsZWN0LXR5cGUuZW51bSc7XG5pbXBvcnQge0lJZE5hbWV9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9jb250cmFjdC9pLWlkLW5hbWUnO1xuaW1wb3J0IHtJRGljdGlvbmFyeX0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL2NvbnRyYWN0L2ktZGljdGlvbmFyeSc7XG5pbXBvcnQge0lDZWxsSW5zdGFuY2UsIElDZWxsSW5zdGFuY2VFdmVudH0gZnJvbSAnLi4vY29udHJhY3QvaS1jZWxsLWluc3RhbmNlJztcbmltcG9ydCB7RmlsdGVyVHlwZX0gZnJvbSAnLi4vLi4vZmlsdGVyL2VudW0vZmlsdGVyLXR5cGUuZW51bSc7XG5pbXBvcnQge1ZlcnRpY2FsQWxpZ259IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9lbnVtL3ZlcnRpY2FsLWFsaWduLmVudW0nO1xuaW1wb3J0IHtBbGlnbn0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL2VudW0vYWxpZ24uZW51bSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RldGEtdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90YWJsZS5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbVGFibGVTZXJ2aWNlXSxcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVDb21wb25lbnQ8VD5cbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgZGF0YTogVFtdID0gW107XG4gIEBJbnB1dCgpIGNvbHVtbnM6IFRhYmxlQ29sdW1uW10gPSBbXTtcbiAgQElucHV0KCkgZGljdDogSURpY3Rpb25hcnk8SUlkTmFtZTxhbnk+W10+O1xuICBASW5wdXQoKSBmaWx0ZXJPcHRpb25zOiBJRGljdGlvbmFyeTxJSWROYW1lPGFueT5bXT47XG5cbiAgQElucHV0KClcbiAgc2V0IHN0YXRlKHN0YXRlOiBGaWx0ZXJTdGF0ZSkge1xuICAgIHRoaXMuX3N0YXRlID0gc3RhdGU7XG4gIH1cblxuICBASW5wdXQoKSBjb29raWVOYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHZpcnR1YWw6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGRldGFpbENvbXBvbmVudDogVHlwZTxEZXRhaWxDb21wb25lbnRCYXNlPFQ+PjtcbiAgQElucHV0KCkgYWN0aXZlUm93OiBUO1xuICBASW5wdXQoKSBzZWxlY3RlZFJvd3M6IFRbXTtcbiAgQElucHV0KCkgc2VsZWN0VHlwZTogU2VsZWN0VHlwZSA9IFNlbGVjdFR5cGUubW91c2U7XG4gIEBJbnB1dCgpIGFnZ3JlZ2F0ZTogYm9vbGVhbjtcbiAgQElucHV0KCkgdHJhY2tSb3c6IChpbmRleDogbnVtYmVyLCByb3c6IFQpID0+IGFueSA9IChpbmRleDogbnVtYmVyLCByb3c6IFQpID0+IHtcbiAgICBpZiAocm93WydpZCddKSB7XG4gICAgICByZXR1cm4gcm93WydpZCddO1xuICAgIH1cbiAgICByZXR1cm4gaW5kZXg7XG4gIH07XG4gIEBJbnB1dCgpIGVkaXRUeXBlOiBFZGl0VHlwZSA9IEVkaXRUeXBlLmNlbGw7XG4gIEBJbnB1dCgpIGVkaXRFdmVudDogRWRpdEV2ZW50ID0gRWRpdEV2ZW50LmRvdWJsZUNsaWNrO1xuICBASW5wdXQoKSByb3dFZGl0YWJsZTogYm9vbGVhbiB8ICgocm93OiBUKSA9PiBib29sZWFuKTtcbiAgQElucHV0KCkgcm93Q2xhc3M6IChyb3c6IFQsIGluZGV4PzogbnVtYmVyKSA9PiBzdHJpbmc7XG5cbiAgQElucHV0KCkgc2V0IHNjcm9sbFRvSW5kZXgoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuX3N2Yy5zY3JvbGxUb0luZGV4KGluZGV4KTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNob3dIZWFkQ2VsbE1lbnUgPSB0cnVlO1xuICBASW5wdXQoKSBjb250ZXh0TWVudTogVGVtcGxhdGVSZWY8YW55PjtcbiAgQElucHV0KCkgY29udGV4dE1lbnVPcGVuOiBib29sZWFuO1xuICBAT3V0cHV0KCkgY29udGV4dE1lbnVPcGVuQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIEBPdXRwdXQoKVxuICBzdGF0ZUNoYW5nZTogRXZlbnRFbWl0dGVyPEZpbHRlclN0YXRlPiA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsdGVyU3RhdGU+KCk7XG4gIEBPdXRwdXQoKSBib2R5TGVmdCA9IG5ldyBFdmVudEVtaXR0ZXI8VD4oKTtcbiAgQE91dHB1dCgpIGFjdGl2ZVJvd0NoYW5nZTogRXZlbnRFbWl0dGVyPFQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgc2VsZWN0ZWRSb3dzQ2hhbmdlOiBFdmVudEVtaXR0ZXI8VFtdPiA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgY2VsbENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2VsbEluc3RhbmNlRXZlbnQ8VD4+KCk7XG4gIEBPdXRwdXQoKSBjZWxsRG91YmxlQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPElDZWxsSW5zdGFuY2VFdmVudDxUPj4oKTtcbiAgQE91dHB1dCgpIGNlbGxGb2N1cyA9IG5ldyBFdmVudEVtaXR0ZXI8SUNlbGxJbnN0YW5jZUV2ZW50PFQ+PigpO1xuICBAT3V0cHV0KCkgY2VsbEtleURvd24gPSBuZXcgRXZlbnRFbWl0dGVyPElDZWxsSW5zdGFuY2VFdmVudDxUPj4oKTtcbiAgQE91dHB1dCgpIHJvd0xlZnQgPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XG4gIEBPdXRwdXQoKSByb3dFZGl0U3RhcnQgPSBuZXcgRXZlbnRFbWl0dGVyPElDZWxsSW5zdGFuY2U8VD4+KCk7XG4gIEBPdXRwdXQoKSByb3dFZGl0RW5kID0gbmV3IEV2ZW50RW1pdHRlcjxUPigpO1xuICBAT3V0cHV0KCkgY2VsbEVkaXRTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXI8SUNlbGxJbnN0YW5jZTxUPj4oKTtcbiAgQE91dHB1dCgpIGNlbGxFZGl0RW5kID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2VsbEluc3RhbmNlPFQ+PigpO1xuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPElDZWxsSW5zdGFuY2U8VD4+KCk7XG4gIEBPdXRwdXQoKSB0YWJsZVNlcnZpY2UgPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlU2VydmljZTxUPj4oKTtcbiAgQFZpZXdDaGlsZCgnY29udGV4dE1lbnUnLCB7c3RhdGljOiB0cnVlfSkgbWVudTogRWxlbWVudFJlZjtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy50YWJsZScpIHByaXZhdGUgcmVhZG9ubHkgdGFibGVDbGFzcyA9IHRydWU7XG5cbiAgc2VsZWN0ZWRSb3dzTGlzdDogVFtdO1xuICBjb250ZXh0TWVudVJvdzogVDtcbiAgdmVydGljYWxBbGlnbiA9IFZlcnRpY2FsQWxpZ247XG4gIGFsaWduID0gQWxpZ247XG4gIHByaXZhdGUgX2FsaXZlID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfYm9keUVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuICBwcml2YXRlIF9oZWFkRWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgX3N0YXRlOiBGaWx0ZXJTdGF0ZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9zdmM6IFRhYmxlU2VydmljZTxUPiwgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZikge1xuICAgIHRoaXMuX3N2Yy5zdGF0ZVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VXaGlsZSgoXykgPT4gdGhpcy5fYWxpdmUpLFxuICAgICAgICBmaWx0ZXIoKHN0YXRlKSA9PiBzdGF0ZSAhPT0gdGhpcy5fc3RhdGUpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChzdGF0ZTogRmlsdGVyU3RhdGUpID0+IHRoaXMuc3RhdGVDaGFuZ2UubmV4dChzdGF0ZSkpO1xuXG4gICAgdGhpcy5fc3ZjLmVkaXRDZWxsU3RhcnRcbiAgICAgIC5waXBlKHRha2VXaGlsZSgoXykgPT4gdGhpcy5fYWxpdmUpKVxuICAgICAgLnN1YnNjcmliZSgoaXRlbTogSUNlbGxFdmVudCkgPT4gdGhpcy5jZWxsRWRpdFN0YXJ0LmVtaXQodGhpcy5fc3ZjLmdldENlbGxJbnN0YW5jZShpdGVtKSkpO1xuXG4gICAgdGhpcy5fc3ZjLmVkaXRDZWxsU3RvcFxuICAgICAgLnBpcGUodGFrZVdoaWxlKChfKSA9PiB0aGlzLl9hbGl2ZSkpXG4gICAgICAuc3Vic2NyaWJlKChpdGVtOiBJQ2VsbENvb3JkaW5hdGVzKSA9PiB0aGlzLmNlbGxFZGl0RW5kLmVtaXQodGhpcy5fc3ZjLmdldENlbGxJbnN0YW5jZShpdGVtKSkpO1xuXG4gICAgdGhpcy5fc3ZjLmVkaXRSb3dTdGFydFxuICAgICAgLnBpcGUodGFrZVdoaWxlKChfKSA9PiB0aGlzLl9hbGl2ZSkpXG4gICAgICAuc3Vic2NyaWJlKChpdGVtOiBJQ2VsbEV2ZW50KSA9PlxuICAgICAgICB0aGlzLnJvd0VkaXRTdGFydC5lbWl0KHRoaXMuX3N2Yy5nZXRDZWxsSW5zdGFuY2UoaXRlbSkpXG4gICAgICApO1xuXG4gICAgdGhpcy5fc3ZjLmVkaXRSb3dTdG9wXG4gICAgICAucGlwZSh0YWtlV2hpbGUoKF8pID0+IHRoaXMuX2FsaXZlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGl0ZW06IElDZWxsQ29vcmRpbmF0ZXMpID0+XG4gICAgICAgIHRoaXMucm93RWRpdEVuZC5lbWl0KHRoaXMuX3N2Yy5nZXRSb3dCeUluZGV4KGl0ZW0/LnJvdykpXG4gICAgICApO1xuXG4gICAgdGhpcy5fc3ZjLnNlbGVjdGVkUm93c1xuICAgICAgLnBpcGUodGFrZVdoaWxlKChfKSA9PiB0aGlzLl9hbGl2ZSkpXG4gICAgICAuc3Vic2NyaWJlKChpdGVtczogVFtdKSA9PiB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzTGlzdCA9IGl0ZW1zO1xuICAgICAgICB0aGlzLnNlbGVjdGVkUm93c0NoYW5nZS5lbWl0KGl0ZW1zKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5fc3ZjLmFjdGl2ZVJvd1xuICAgICAgLnBpcGUodGFrZVdoaWxlKChfKSA9PiB0aGlzLl9hbGl2ZSkpXG4gICAgICAuc3Vic2NyaWJlKChpdGVtOiBUKSA9PiB0aGlzLmFjdGl2ZVJvd0NoYW5nZS5lbWl0KGl0ZW0pKTtcblxuICAgIHRoaXMuX3N2Yy52YWx1ZUNoYW5nZWRcbiAgICAgIC5waXBlKHRha2VXaGlsZSgoXykgPT4gdGhpcy5fYWxpdmUpKVxuICAgICAgLnN1YnNjcmliZSgoY29vcmRpbmF0ZXM6IElDZWxsQ29vcmRpbmF0ZXMpID0+IHtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMuX3N2Yy5nZXRDZWxsSW5zdGFuY2UoY29vcmRpbmF0ZXMpKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKSBoYW5kbGVDbGlja091dHNpZGVBbnlSb3coXG4gICAgZXZlbnQ6IE1vdXNlRXZlbnRcbiAgKSB7XG4gICAgY29uc3QgY29vcmRpbmF0ZXMgPSB0aGlzLmdldENvb3JkaW5hdGVzKGV2ZW50KTtcbiAgICBjb25zdCByb3cgPSB0aGlzLmdldFJvdyhldmVudCk7XG4gICAgY29uc3QgZXZlbnRJc09uUm93ID0gdGhpcy5ldmVudElzT25Sb3coZXZlbnQpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKGNvb3JkaW5hdGVzKSB7XG4gICAgICAgIHRoaXMuY2VsbENsaWNrLmVtaXQoe1xuICAgICAgICAgIC4uLnRoaXMuX3N2Yy5nZXRDZWxsSW5zdGFuY2UoY29vcmRpbmF0ZXMpLFxuICAgICAgICAgIGV2ZW50XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy5lZGl0RXZlbnQgPT09IEVkaXRFdmVudC5jbGljaykge1xuICAgICAgICAgIHRoaXMuc3RhcnRFZGl0Um93T3JDZWxsKGNvb3JkaW5hdGVzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy5fc3ZjLmN1cnJlbnRFZGl0Q2VsbCAmJiAoY29vcmRpbmF0ZXMucm93ICE9PSB0aGlzLl9zdmMuY3VycmVudEVkaXRDZWxsLnJvdyB8fCBjb29yZGluYXRlcy5jb2x1bW4gIT09IHRoaXMuX3N2Yy5jdXJyZW50RWRpdENlbGwuY29sdW1uKSkge1xuICAgICAgICAgICAgdGhpcy5zdGFydEVkaXRSb3dPckNlbGwobnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocm93KSB7XG4gICAgICAgIGlmIChldmVudC5jdHJsS2V5KSB7XG4gICAgICAgICAgdGhpcy5fc3ZjLnNlbGVjdE9yRGVzZWxlY3RSb3cocm93KTtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgIHRoaXMuX3N2Yy5zZWxlY3RSYW5nZShyb3cpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX3N2Yy5zZWxlY3RSb3dzKFtyb3ddKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFldmVudElzT25Sb3cgJiYgIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgaWYgKHRoaXMuZWRpdFR5cGUgPT09IEVkaXRUeXBlLnJvdykge1xuICAgICAgICAgIHRoaXMuX3N2Yy5zdGFydEVkaXRSb3cobnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fc3ZjLnN0YXJ0RWRpdENlbGwobnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2ZvY3VzaW4nLCBbJyRldmVudCddKSBmb2N1c0luKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBjb29yZGluYXRlcyA9IHRoaXMuZ2V0Q29vcmRpbmF0ZXMoZXZlbnQpO1xuICAgIGlmIChjb29yZGluYXRlcykge1xuICAgICAgdGhpcy5jZWxsRm9jdXMuZW1pdCh7XG4gICAgICAgIC4uLnRoaXMuX3N2Yy5nZXRDZWxsSW5zdGFuY2UoY29vcmRpbmF0ZXMpLFxuICAgICAgICBldmVudFxuICAgICAgfSk7XG4gICAgICBpZiAodGhpcy5lZGl0RXZlbnQgPT09IEVkaXRFdmVudC5mb2N1cykge1xuICAgICAgICB0aGlzLnN0YXJ0RWRpdFJvd09yQ2VsbChjb29yZGluYXRlcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZGJsY2xpY2snLCBbJyRldmVudCddKVxuICBkYmxjbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gdGhpcy5nZXRDb29yZGluYXRlcyhldmVudCk7XG4gICAgaWYgKGNvb3JkaW5hdGVzKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5jZWxsRG91YmxlQ2xpY2suZW1pdCh7XG4gICAgICAgICAgLi4udGhpcy5fc3ZjLmdldENlbGxJbnN0YW5jZShjb29yZGluYXRlcyksXG4gICAgICAgICAgZXZlbnRcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0aGlzLmVkaXRFdmVudCA9PT0gRWRpdEV2ZW50LmRvdWJsZUNsaWNrKSB7XG4gICAgICAgICAgdGhpcy5zdGFydEVkaXRSb3dPckNlbGwoY29vcmRpbmF0ZXMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAga2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmIChldmVudC5jdHJsS2V5KSB7XG4gICAgICBpZiAoZXZlbnQuY29kZSA9PT0gJ0tleUEnKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuX3N2Yy5zZWxlY3RBbGwoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgIHRoaXMuX3N2Yy5kZXNlbGVjdEFsbCgpO1xuICAgICAgaWYgKHRoaXMuZWRpdFR5cGUgPT09IEVkaXRUeXBlLnJvdykge1xuICAgICAgICB0aGlzLl9zdmMuc3RhcnRFZGl0Um93KG51bGwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fc3ZjLnN0YXJ0RWRpdENlbGwobnVsbCk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gdGhpcy5nZXRDb29yZGluYXRlcyhldmVudCk7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgaWYgKHRoaXMuZWRpdFR5cGUgPT09IEVkaXRUeXBlLnJvdykge1xuICAgICAgICB0aGlzLl9zdmMuc3RhcnRFZGl0Um93KG51bGwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuX3N2Yy5jdXJyZW50RWRpdENlbGwpIHtcbiAgICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLl9zdmMuZ2V0TmV4dFJvd0NlbGwoY29vcmRpbmF0ZXMpO1xuICAgICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRFZGl0Um93T3JDZWxsKHtcbiAgICAgICAgICAgICAgcm93OiB0YXJnZXQucm93LFxuICAgICAgICAgICAgICBjb2x1bW46IHRhcmdldC5jb2x1bW4sXG4gICAgICAgICAgICAgIGV2ZW50OiB1bmRlZmluZWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9zdmMuc3RhcnRFZGl0Q2VsbChudWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNvb3JkaW5hdGVzKSB7XG4gICAgICB0aGlzLmNlbGxLZXlEb3duLmVtaXQoe1xuICAgICAgICAuLi50aGlzLl9zdmMuZ2V0Q2VsbEluc3RhbmNlKGNvb3JkaW5hdGVzKSxcbiAgICAgICAgZXZlbnRcbiAgICAgIH0pO1xuICAgICAgaWYgKGV2ZW50LmtleSAmJiAoZXZlbnQua2V5Lmxlbmd0aCA9PT0gMSB8fCBldmVudC5rZXkgPT09ICdEZWxldGUnKSkge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLl9zdmMuZ2V0Q29sdW1uQnlOYW1lKGNvb3JkaW5hdGVzLmNvbHVtbik7XG4gICAgICAgIGlmIChjb2x1bW4uZmlsdGVyVHlwZSAhPT0gRmlsdGVyVHlwZS5udW1iZXIgfHwgaXNGaW5pdGUoZXZlbnQua2V5IGFzIGFueSkpIHtcbiAgICAgICAgICB0aGlzLnN0YXJ0RWRpdFJvd09yQ2VsbCh7XG4gICAgICAgICAgICByb3c6IGNvb3JkaW5hdGVzLnJvdyxcbiAgICAgICAgICAgIGNvbHVtbjogY29vcmRpbmF0ZXMuY29sdW1uLFxuICAgICAgICAgICAgZXZlbnQ6IGV2ZW50XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdUYWInICYmIHRoaXMuX3N2Yy5jdXJyZW50RWRpdENlbGwpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgbGV0IHRhcmdldCA9IHRoaXMuX3N2Yy5nZXROZXh0RWRpdGFibGVDZWxsKGNvb3JkaW5hdGVzKTtcbiAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgdGFyZ2V0ID0gdGhpcy5fc3ZjLmdldFByZXZpb3VzRWRpdGFibGVDZWxsKGNvb3JkaW5hdGVzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgICAgdGhpcy5zdGFydEVkaXRSb3dPckNlbGwoe1xuICAgICAgICAgICAgcm93OiB0YXJnZXQucm93LFxuICAgICAgICAgICAgY29sdW1uOiB0YXJnZXQuY29sdW1uLFxuICAgICAgICAgICAgZXZlbnQ6IHVuZGVmaW5lZFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuX3N2Yy5jdXJyZW50RWRpdENlbGwpIHtcbiAgICAgICAgbGV0IHRhcmdldDtcbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnKSB7XG4gICAgICAgICAgdGFyZ2V0ID0gdGhpcy5fc3ZjLmdldE5leHRDZWxsKGNvb3JkaW5hdGVzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0Jykge1xuICAgICAgICAgIHRhcmdldCA9IHRoaXMuX3N2Yy5nZXRQcmV2aW91c0NlbGwoY29vcmRpbmF0ZXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgICAgIHRhcmdldCA9IHRoaXMuX3N2Yy5nZXRQcmV2aW91c1Jvd0NlbGwoY29vcmRpbmF0ZXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICAgICAgdGFyZ2V0ID0gdGhpcy5fc3ZjLmdldE5leHRSb3dDZWxsKGNvb3JkaW5hdGVzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5nZXRDZWxsRWxlbWVudCh0YXJnZXQpO1xuICAgICAgICAgIGVsZW1lbnQ/LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdtb3VzZWRvd24nLCBbJyRldmVudCddKSBtb3VzZWRvd24oZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQuYnV0dG9uID09PSAyKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX3N2Yy5yZXN0b3JlU3RhdGUoKTtcbiAgICB0aGlzLl9zdmMucmVzdG9yZUhpZGRlbkNvbHVtbnMoKTtcbiAgICB0aGlzLnRhYmxlU2VydmljZS5lbWl0KHRoaXMuX3N2Yyk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5faGVhZEVsZW1lbnQgPVxuICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy50YWJsZS1oZWFkJyk7XG4gICAgdGhpcy5fYm9keUVsZW1lbnQgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICcudGFibGUtYm9keS1jb250YWluZXInXG4gICAgKTtcbiAgICB0aGlzLl9ib2R5RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLm9uU2Nyb2xsKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2FsaXZlID0gZmFsc2U7XG4gICAgdGhpcy5fYm9keUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5vblNjcm9sbCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ2VkaXRUeXBlJykpIHtcbiAgICAgIHRoaXMuX3N2Yy5lZGl0VHlwZSA9IHRoaXMuZWRpdFR5cGU7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdzZWxlY3RUeXBlJykpIHtcbiAgICAgIHRoaXMuX3N2Yy5zZWxlY3RUeXBlID0gdGhpcy5zZWxlY3RUeXBlO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnc2VsZWN0ZWRSb3dzJykpIHtcbiAgICAgIHRoaXMuX3N2Yy5zZWxlY3RSb3dzKHRoaXMuc2VsZWN0ZWRSb3dzKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3Jvd0VkaXRhYmxlJykpIHtcbiAgICAgIHRoaXMuX3N2Yy5yb3dFZGl0YWJsZSA9IHRoaXMucm93RWRpdGFibGU7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdjb29raWVOYW1lJykpIHtcbiAgICAgIHRoaXMuX3N2Yy5zZXRDb29raWVOYW1lKHRoaXMuY29va2llTmFtZSk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdjb2x1bW5zJykpIHtcbiAgICAgIGlmICh0aGlzLmNvbHVtbnMgIT09IG51bGwgJiYgdGhpcy5jb2x1bW5zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fc3ZjLnNldENvbHVtbnModGhpcy5jb2x1bW5zKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ2RhdGEnKSkge1xuICAgICAgdGhpcy5fc3ZjLnNldERhdGEodGhpcy5kYXRhKTtcbiAgICAgIHRoaXMuX3N2Yy5zZWxlY3RSb3dzKHRoaXMuZGF0YT8uZmlsdGVyKChyb3cpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRSb3dzPy5zb21lKChzZWxlY3RlZFJvdykgPT5cbiAgICAgICAgICB0aGlzLnRyYWNrUm93KHRoaXMuX3N2Yy5nZXRSb3dJbmRleChzZWxlY3RlZFJvdyksIHNlbGVjdGVkUm93KSA9PT0gdGhpcy50cmFja1Jvdyh0aGlzLl9zdmMuZ2V0Um93SW5kZXgocm93KSwgcm93KSk7XG4gICAgICB9KSk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdkaWN0JykpIHtcbiAgICAgIHRoaXMuX3N2Yy5zZXREaWN0KHRoaXMuZGljdCk7XG4gICAgICB0aGlzLl9zdmMuc2V0RmlsdGVyT3B0aW9ucyh0aGlzLmRpY3QpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnZmlsdGVyT3B0aW9ucycpKSB7XG4gICAgICB0aGlzLl9zdmMuc2V0RmlsdGVyT3B0aW9ucyh0aGlzLmZpbHRlck9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgndHJhY2tSb3cnKSkge1xuICAgICAgdGhpcy5fc3ZjLnRyYWNrUm93ID0gdGhpcy50cmFja1JvdztcbiAgICB9XG4gIH1cblxuICBzZXRDb250ZXh0TWVudU9wZW4odmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmNvbnRleHRNZW51T3BlbiA9IHZhbHVlO1xuICAgIHRoaXMuY29udGV4dE1lbnVPcGVuQ2hhbmdlLmVtaXQodGhpcy5jb250ZXh0TWVudU9wZW4pO1xuICB9XG5cbiAgc2V0Q29udGV4dE1lbnVSb3coZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLmNvbnRleHRNZW51Um93ID0gbnVsbDtcbiAgICBjb25zdCByb3dFbGVtZW50ID0gdGhpcy5fc3ZjLmdldEV2ZW50Um93KGV2ZW50KTtcbiAgICBpZiAocm93RWxlbWVudCkge1xuICAgICAgY29uc3Qgcm93SW5kZXggPSBwYXJzZUludChyb3dFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1yb3cnKSwgMTApO1xuICAgICAgaWYgKHJvd0luZGV4ID49IDApIHtcbiAgICAgICAgdGhpcy5jb250ZXh0TWVudVJvdyA9IHRoaXMuX3N2Yy5nZXRSb3dCeUluZGV4KHJvd0luZGV4KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0RWRpdFJvd09yQ2VsbChjb29yZGluYXRlczogSUNlbGxFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmVkaXRUeXBlID09PSBFZGl0VHlwZS5yb3cpIHtcbiAgICAgIHRoaXMuX3N2Yy5zdGFydEVkaXRSb3coY29vcmRpbmF0ZXMpO1xuICAgIH1cbiAgICBpZiAodGhpcy5lZGl0VHlwZSA9PT0gRWRpdFR5cGUuY2VsbCkge1xuICAgICAgdGhpcy5fc3ZjLnN0YXJ0RWRpdENlbGwoY29vcmRpbmF0ZXMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2VsbEVsZW1lbnQoY29vcmRpbmF0ZXM6IElDZWxsQ29vcmRpbmF0ZXMpOiBIVE1MRWxlbWVudCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgIGB0ZXRhLWNlbGxbZGF0YS1yb3c9XCIke2Nvb3JkaW5hdGVzLnJvd31cIl1bZGF0YS1jb2x1bW49XCIke2Nvb3JkaW5hdGVzLmNvbHVtbn1cIl1gXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZXZlbnRJc09uUm93KGV2ZW50OiBFdmVudCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHJvdyA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpLmZpbmQoKHRhcmdldDogSFRNTEVsZW1lbnQpID0+IHtcbiAgICAgIHJldHVybiB0YXJnZXQ/LmdldEF0dHJpYnV0ZSAmJiB0YXJnZXQ/LmdldEF0dHJpYnV0ZSgnZGF0YS1yb3cnKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcm93ICYmIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhyb3cpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb29yZGluYXRlcyhldmVudDogRXZlbnQpOiBJQ2VsbEV2ZW50IHwgbnVsbCB7XG4gICAgaWYgKGV2ZW50LmNvbXBvc2VkUGF0aCgpLmluZGV4T2YodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KSA8IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBjZWxsID0gdGhpcy5fc3ZjLmdldEV2ZW50Q2VsbChldmVudCk7XG4gICAgaWYgKGNlbGwpIHtcbiAgICAgIGNvbnN0IHJvd0luZGV4ID0gcGFyc2VJbnQoY2VsbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcm93JyksIDEwKTtcbiAgICAgIGNvbnN0IGNvbHVtbk5hbWUgPSBjZWxsLmdldEF0dHJpYnV0ZSgnZGF0YS1jb2x1bW4nKTtcbiAgICAgIGlmIChyb3dJbmRleCA+PSAwICYmIGNvbHVtbk5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByb3c6IHJvd0luZGV4LFxuICAgICAgICAgIGNvbHVtbjogY29sdW1uTmFtZSxcbiAgICAgICAgICBldmVudCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIGdldFJvdyhldmVudDogRXZlbnQpOiBUIHwgbnVsbCB7XG4gICAgaWYgKGV2ZW50LmNvbXBvc2VkUGF0aCgpLmluZGV4T2YodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KSA8IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCByb3dFbGVtZW50ID0gdGhpcy5fc3ZjLmdldEV2ZW50Um93KGV2ZW50KTtcbiAgICBpZiAocm93RWxlbWVudCkge1xuICAgICAgY29uc3Qgcm93SW5kZXggPSBwYXJzZUludChyb3dFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1yb3cnKSwgMTApO1xuICAgICAgaWYgKHJvd0luZGV4ID49IDApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N2Yy5nZXRSb3dCeUluZGV4KHJvd0luZGV4KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIG9uU2Nyb2xsID0gKCkgPT4ge1xuICAgIHRoaXMuX2hlYWRFbGVtZW50LnNjcm9sbExlZnQgPSB0aGlzLl9ib2R5RWxlbWVudC5zY3JvbGxMZWZ0O1xuICB9O1xuXG4gIC8vIHByaXZhdGUgZ2V0U2VsZWN0ZWRUZXh0KCkge1xuICAvLyAgIGxldCB0ZXh0ID0gJyc7XG4gIC8vICAgaWYgKHR5cGVvZiB3aW5kb3cuZ2V0U2VsZWN0aW9uICE9ICd1bmRlZmluZWQnKSB7XG4gIC8vICAgICB0ZXh0ID0gd2luZG93LmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCk7XG4gIC8vICAgfVxuICAvLyAgIHJldHVybiB0ZXh0O1xuICAvLyB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY29sdW1uIGNvbHVtbl9hdXRvXCI+XG4gIDx0ZXRhLXRhYmxlLWhlYWRcbiAgICBzdHlsZT1cInotaW5kZXg6IDFcIlxuICAgIFtzZWxlY3RUeXBlXT1cInNlbGVjdFR5cGVcIlxuICAgIFtzaG93SGVhZENlbGxNZW51XT1cInNob3dIZWFkQ2VsbE1lbnVcIj48L3RldGEtdGFibGUtaGVhZD5cbiAgPGRpdiBjbGFzcz1cImNvbHVtbiBjb2x1bW5fYXV0byBwb3NpdGlvbi1yZWxhdGl2ZVwiXG4gICAgICAgc3R5bGU9XCJ6LWluZGV4OiAwXCJcbiAgICAgICBbdGV0YUNvbnRleHRNZW51XT1cImNvbnRleHRNZW51XCJcbiAgICAgICBbdmVydGljYWxBbGlnbl09XCJ2ZXJ0aWNhbEFsaWduLmF1dG9cIlxuICAgICAgIFthbGlnbl09XCJhbGlnbi5hdXRvXCJcbiAgICAgICBbYXBwZW5kVG9Cb2R5XT1cInRydWVcIlxuICAgICAgIFtkYXRhXT1cImNvbnRleHRNZW51Um93XCJcbiAgICAgICBbb3Blbl09XCJjb250ZXh0TWVudU9wZW5cIlxuICAgICAgIChvcGVuQ2hhbmdlKT1cInNldENvbnRleHRNZW51T3BlbigkZXZlbnQpXCI+XG4gICAgPHRldGEtdGFibGUtYm9keVxuICAgICAgKGNvbnRleHRtZW51KT1cInNldENvbnRleHRNZW51Um93KCRldmVudClcIlxuICAgICAgW2FnZ3JlZ2F0ZV09XCJhZ2dyZWdhdGVcIlxuICAgICAgW3ZpcnR1YWxdPVwidmlydHVhbFwiXG4gICAgICBbYWN0aXZlUm93XT1cImFjdGl2ZVJvd1wiXG4gICAgICBbc2VsZWN0ZWRSb3dzXT1cInNlbGVjdGVkUm93c0xpc3RcIlxuICAgICAgW2FkZGl0aW9uYWxDb21wb25lbnRdPVwiZGV0YWlsQ29tcG9uZW50XCJcbiAgICAgIFtzZWxlY3RUeXBlXT1cInNlbGVjdFR5cGVcIlxuICAgICAgW3Jvd0NsYXNzXT1cInJvd0NsYXNzXCI+PC90ZXRhLXRhYmxlLWJvZHk+XG4gICAgPGRpdiBjbGFzcz1cImNvbHVtbiBjb2x1bW5fYXV0b1wiXG4gICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOjA7IGJvdHRvbTowO2xlZnQ6MDtyaWdodDowO1wiXG4gICAgICAgICAqbmdJZj1cIiFkYXRhPy5sZW5ndGhcIj5cbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
473
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudC90YWJsZS90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3RhYmxlL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULFlBQVksRUFDWixXQUFXLEVBQ1gsWUFBWSxFQUNaLEtBQUssRUFJTCxNQUFNLEVBSU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQU10RCxPQUFPLEVBQUMsTUFBTSxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDbEQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBSXBELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUM5RCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sMENBQTBDLENBQUM7QUFDdkUsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLGlDQUFpQyxDQUFDOzs7Ozs7O0FBU3RELE1BQU0sT0FBTyxjQUFjO0lBdUV6QixZQUFvQixJQUFxQixFQUFVLFdBQXVCO1FBQXRELFNBQUksR0FBSixJQUFJLENBQWlCO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFyRWpFLFNBQUksR0FBUSxFQUFFLENBQUM7UUFDZixZQUFPLEdBQWtCLEVBQUUsQ0FBQztRQWM1QixlQUFVLEdBQWUsVUFBVSxDQUFDLEtBQUssQ0FBQztRQUUxQyxhQUFRLEdBQW1D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LENBQUM7Z0JBaUJwQyxPQUFPO3NCQUROLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQXdGSSxTQUFTO3NCQUEvQyxZQUFZO3VCQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG4gIFR5cGUsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1RhYmxlU2VydmljZX0gZnJvbSAnLi4vc2VydmljZS90YWJsZS5zZXJ2aWNlJztcbmltcG9ydCB7VGFibGVDb2x1bW59IGZyb20gJy4uL2NvbnRyYWN0L3RhYmxlLWNvbHVtbic7XG5pbXBvcnQge0ZpbHRlclN0YXRlfSBmcm9tICcuLi8uLi9maWx0ZXIvY29udGFyY3QvZmlsdGVyLXN0YXRlJztcbmltcG9ydCB7RGV0YWlsQ29tcG9uZW50QmFzZX0gZnJvbSAnLi4vYmFzZS9kZXRhaWwtY29tcG9uZW50LWJhc2UnO1xuaW1wb3J0IHtJQ2VsbEV2ZW50fSBmcm9tICcuLi9jb250cmFjdC9pLWNlbGwtZXZlbnQnO1xuaW1wb3J0IHtJQ2VsbENvb3JkaW5hdGVzfSBmcm9tICcuLi9jb250cmFjdC9pLWNlbGwtY29vcmRpbmF0ZXMnO1xuaW1wb3J0IHtmaWx0ZXIsIHRha2VXaGlsZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtFZGl0VHlwZX0gZnJvbSAnLi4vZW51bS9lZGl0LXR5cGUuZW51bSc7XG5pbXBvcnQge0VkaXRFdmVudH0gZnJvbSAnLi4vZW51bS9lZGl0LWV2ZW50LmVudW0nO1xuaW1wb3J0IHtTZWxlY3RUeXBlfSBmcm9tICcuLi9lbnVtL3NlbGVjdC10eXBlLmVudW0nO1xuaW1wb3J0IHtJSWROYW1lfSBmcm9tICcuLi8uLi8uLi9jb21tb24vY29udHJhY3QvaS1pZC1uYW1lJztcbmltcG9ydCB7SURpY3Rpb25hcnl9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9jb250cmFjdC9pLWRpY3Rpb25hcnknO1xuaW1wb3J0IHtJQ2VsbEluc3RhbmNlLCBJQ2VsbEluc3RhbmNlRXZlbnR9IGZyb20gJy4uL2NvbnRyYWN0L2ktY2VsbC1pbnN0YW5jZSc7XG5pbXBvcnQge0ZpbHRlclR5cGV9IGZyb20gJy4uLy4uL2ZpbHRlci9lbnVtL2ZpbHRlci10eXBlLmVudW0nO1xuaW1wb3J0IHtWZXJ0aWNhbEFsaWdufSBmcm9tICcuLi8uLi8uLi9jb21tb24vZW51bS92ZXJ0aWNhbC1hbGlnbi5lbnVtJztcbmltcG9ydCB7QWxpZ259IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9lbnVtL2FsaWduLmVudW0nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0ZXRhLXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW1RhYmxlU2VydmljZV0sXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlQ29tcG9uZW50PFQ+XG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIGRhdGE6IFRbXSA9IFtdO1xuICBASW5wdXQoKSBjb2x1bW5zOiBUYWJsZUNvbHVtbltdID0gW107XG4gIEBJbnB1dCgpIGRpY3Q6IElEaWN0aW9uYXJ5PElJZE5hbWU8YW55PltdPjtcbiAgQElucHV0KCkgZmlsdGVyT3B0aW9uczogSURpY3Rpb25hcnk8SUlkTmFtZTxhbnk+W10+O1xuXG4gIEBJbnB1dCgpXG4gIHNldCBzdGF0ZShzdGF0ZTogRmlsdGVyU3RhdGUpIHtcbiAgICB0aGlzLl9zdGF0ZSA9IHN0YXRlO1xuICB9XG5cbiAgQElucHV0KCkgY29va2llTmFtZTogc3RyaW5nO1xuICBASW5wdXQoKSB2aXJ0dWFsOiBib29sZWFuO1xuICBASW5wdXQoKSBkZXRhaWxDb21wb25lbnQ6IFR5cGU8RGV0YWlsQ29tcG9uZW50QmFzZTxUPj47XG4gIEBJbnB1dCgpIGFjdGl2ZVJvdzogVDtcbiAgQElucHV0KCkgc2VsZWN0ZWRSb3dzOiBUW107XG4gIEBJbnB1dCgpIHNlbGVjdFR5cGU6IFNlbGVjdFR5cGUgPSBTZWxlY3RUeXBlLm1vdXNlO1xuICBASW5wdXQoKSBhZ2dyZWdhdGU6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHRyYWNrUm93OiAoaW5kZXg6IG51bWJlciwgcm93OiBUKSA9PiBhbnkgPSAoaW5kZXg6IG51bWJlciwgcm93OiBUKSA9PiB7XG4gICAgaWYgKHJvd1snaWQnXSkge1xuICAgICAgcmV0dXJuIHJvd1snaWQnXTtcbiAgICB9XG4gICAgcmV0dXJuIGluZGV4O1xuICB9O1xuICBASW5wdXQoKSB0cmFja0NvbHVtbnM6IChpbmRleDogbnVtYmVyLCBjb2x1bW46IFRhYmxlQ29sdW1uKSA9PiBhbnkgPSAoaW5kZXg6IG51bWJlciwgY29sdW1uOiBUYWJsZUNvbHVtbikgPT4ge1xuICAgIHJldHVybiBjb2x1bW4ubmFtZTtcbiAgfTtcbiAgQElucHV0KCkgZWRpdFR5cGU6IEVkaXRUeXBlID0gRWRpdFR5cGUuY2VsbDtcbiAgQElucHV0KCkgZWRpdEV2ZW50OiBFZGl0RXZlbnQgPSBFZGl0RXZlbnQuZG91YmxlQ2xpY2s7XG4gIEBJbnB1dCgpIHJvd0VkaXRhYmxlOiBib29sZWFuIHwgKChyb3c6IFQpID0+IGJvb2xlYW4pO1xuICBASW5wdXQoKSByb3dDbGFzczogKHJvdzogVCwgaW5kZXg/OiBudW1iZXIpID0+IHN0cmluZztcblxuICBASW5wdXQoKSBzZXQgc2Nyb2xsVG9JbmRleChpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5fc3ZjLnNjcm9sbFRvSW5kZXgoaW5kZXgpO1xuICB9XG5cbiAgQElucHV0KCkgc2hvd0hlYWRDZWxsTWVudSA9IHRydWU7XG4gIEBJbnB1dCgpIGNvbnRleHRNZW51OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBASW5wdXQoKSBjb250ZXh0TWVudU9wZW46IGJvb2xlYW47XG4gIEBPdXRwdXQoKSBjb250ZXh0TWVudU9wZW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgQE91dHB1dCgpXG4gIHN0YXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RmlsdGVyU3RhdGU+ID0gbmV3IEV2ZW50RW1pdHRlcjxGaWx0ZXJTdGF0ZT4oKTtcbiAgQE91dHB1dCgpIGJvZHlMZWZ0ID0gbmV3IEV2ZW50RW1pdHRlcjxUPigpO1xuICBAT3V0cHV0KCkgYWN0aXZlUm93Q2hhbmdlOiBFdmVudEVtaXR0ZXI8VD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBzZWxlY3RlZFJvd3NDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUW10+ID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBjZWxsQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPElDZWxsSW5zdGFuY2VFdmVudDxUPj4oKTtcbiAgQE91dHB1dCgpIGNlbGxEb3VibGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8SUNlbGxJbnN0YW5jZUV2ZW50PFQ+PigpO1xuICBAT3V0cHV0KCkgY2VsbEZvY3VzID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2VsbEluc3RhbmNlRXZlbnQ8VD4+KCk7XG4gIEBPdXRwdXQoKSBjZWxsS2V5RG93biA9IG5ldyBFdmVudEVtaXR0ZXI8SUNlbGxJbnN0YW5jZUV2ZW50PFQ+PigpO1xuICBAT3V0cHV0KCkgcm93TGVmdCA9IG5ldyBFdmVudEVtaXR0ZXI8VD4oKTtcbiAgQE91dHB1dCgpIHJvd0VkaXRTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXI8SUNlbGxJbnN0YW5jZTxUPj4oKTtcbiAgQE91dHB1dCgpIHJvd0VkaXRFbmQgPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XG4gIEBPdXRwdXQoKSBjZWxsRWRpdFN0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2VsbEluc3RhbmNlPFQ+PigpO1xuICBAT3V0cHV0KCkgY2VsbEVkaXRFbmQgPSBuZXcgRXZlbnRFbWl0dGVyPElDZWxsSW5zdGFuY2U8VD4+KCk7XG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8SUNlbGxJbnN0YW5jZTxUPj4oKTtcbiAgQE91dHB1dCgpIHRhYmxlU2VydmljZSA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVTZXJ2aWNlPFQ+PigpO1xuICBAVmlld0NoaWxkKCdjb250ZXh0TWVudScsIHtzdGF0aWM6IHRydWV9KSBtZW51OiBFbGVtZW50UmVmO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRhYmxlJykgcHJpdmF0ZSByZWFkb25seSB0YWJsZUNsYXNzID0gdHJ1ZTtcblxuICBzZWxlY3RlZFJvd3NMaXN0OiBUW107XG4gIGNvbnRleHRNZW51Um93OiBUO1xuICB2ZXJ0aWNhbEFsaWduID0gVmVydGljYWxBbGlnbjtcbiAgYWxpZ24gPSBBbGlnbjtcbiAgcHJpdmF0ZSBfYWxpdmUgPSB0cnVlO1xuICBwcml2YXRlIF9ib2R5RWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgX2hlYWRFbGVtZW50OiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBfc3RhdGU6IEZpbHRlclN0YXRlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX3N2YzogVGFibGVTZXJ2aWNlPFQ+LCBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7XG4gICAgdGhpcy5fc3ZjLnN0YXRlXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVdoaWxlKChfKSA9PiB0aGlzLl9hbGl2ZSksXG4gICAgICAgIGZpbHRlcigoc3RhdGUpID0+IHN0YXRlICE9PSB0aGlzLl9zdGF0ZSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHN0YXRlOiBGaWx0ZXJTdGF0ZSkgPT4gdGhpcy5zdGF0ZUNoYW5nZS5uZXh0KHN0YXRlKSk7XG5cbiAgICB0aGlzLl9zdmMuZWRpdENlbGxTdGFydFxuICAgICAgLnBpcGUodGFrZVdoaWxlKChfKSA9PiB0aGlzLl9hbGl2ZSkpXG4gICAgICAuc3Vic2NyaWJlKChpdGVtOiBJQ2VsbEV2ZW50KSA9PiB0aGlzLmNlbGxFZGl0U3RhcnQuZW1pdCh0aGlzLl9zdmMuZ2V0Q2VsbEluc3RhbmNlKGl0ZW0pKSk7XG5cbiAgICB0aGlzLl9zdmMuZWRpdENlbGxTdG9wXG4gICAgICAucGlwZSh0YWtlV2hpbGUoKF8pID0+IHRoaXMuX2FsaXZlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGl0ZW06IElDZWxsQ29vcmRpbmF0ZXMpID0+IHRoaXMuY2VsbEVkaXRFbmQuZW1pdCh0aGlzLl9zdmMuZ2V0Q2VsbEluc3RhbmNlKGl0ZW0pKSk7XG5cbiAgICB0aGlzLl9zdmMuZWRpdFJvd1N0YXJ0XG4gICAgICAucGlwZSh0YWtlV2hpbGUoKF8pID0+IHRoaXMuX2FsaXZlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGl0ZW06IElDZWxsRXZlbnQpID0+XG4gICAgICAgIHRoaXMucm93RWRpdFN0YXJ0LmVtaXQodGhpcy5fc3ZjLmdldENlbGxJbnN0YW5jZShpdGVtKSlcbiAgICAgICk7XG5cbiAgICB0aGlzLl9zdmMuZWRpdFJvd1N0b3BcbiAgICAgIC5waXBlKHRha2VXaGlsZSgoXykgPT4gdGhpcy5fYWxpdmUpKVxuICAgICAgLnN1YnNjcmliZSgoaXRlbTogSUNlbGxDb29yZGluYXRlcykgPT5cbiAgICAgICAgdGhpcy5yb3dFZGl0RW5kLmVtaXQodGhpcy5fc3ZjLmdldFJvd0J5SW5kZXgoaXRlbT8ucm93KSlcbiAgICAgICk7XG5cbiAgICB0aGlzLl9zdmMuc2VsZWN0ZWRSb3dzXG4gICAgICAucGlwZSh0YWtlV2hpbGUoKF8pID0+IHRoaXMuX2FsaXZlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGl0ZW1zOiBUW10pID0+IHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3NMaXN0ID0gaXRlbXM7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzQ2hhbmdlLmVtaXQoaXRlbXMpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLl9zdmMuYWN0aXZlUm93XG4gICAgICAucGlwZSh0YWtlV2hpbGUoKF8pID0+IHRoaXMuX2FsaXZlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGl0ZW06IFQpID0+IHRoaXMuYWN0aXZlUm93Q2hhbmdlLmVtaXQoaXRlbSkpO1xuXG4gICAgdGhpcy5fc3ZjLnZhbHVlQ2hhbmdlZFxuICAgICAgLnBpcGUodGFrZVdoaWxlKChfKSA9PiB0aGlzLl9hbGl2ZSkpXG4gICAgICAuc3Vic2NyaWJlKChjb29yZGluYXRlczogSUNlbGxDb29yZGluYXRlcykgPT4ge1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy5fc3ZjLmdldENlbGxJbnN0YW5jZShjb29yZGluYXRlcykpO1xuICAgICAgfSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pIGhhbmRsZUNsaWNrT3V0c2lkZUFueVJvdyhcbiAgICBldmVudDogTW91c2VFdmVudFxuICApIHtcbiAgICBjb25zdCBjb29yZGluYXRlcyA9IHRoaXMuZ2V0Q29vcmRpbmF0ZXMoZXZlbnQpO1xuICAgIGNvbnN0IHJvdyA9IHRoaXMuZ2V0Um93KGV2ZW50KTtcbiAgICBjb25zdCBldmVudElzT25Sb3cgPSB0aGlzLmV2ZW50SXNPblJvdyhldmVudCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoY29vcmRpbmF0ZXMpIHtcbiAgICAgICAgdGhpcy5jZWxsQ2xpY2suZW1pdCh7XG4gICAgICAgICAgLi4udGhpcy5fc3ZjLmdldENlbGxJbnN0YW5jZShjb29yZGluYXRlcyksXG4gICAgICAgICAgZXZlbnRcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0aGlzLmVkaXRFdmVudCA9PT0gRWRpdEV2ZW50LmNsaWNrKSB7XG4gICAgICAgICAgdGhpcy5zdGFydEVkaXRSb3dPckNlbGwoY29vcmRpbmF0ZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLl9zdmMuY3VycmVudEVkaXRDZWxsICYmIChjb29yZGluYXRlcy5yb3cgIT09IHRoaXMuX3N2Yy5jdXJyZW50RWRpdENlbGwucm93IHx8IGNvb3JkaW5hdGVzLmNvbHVtbiAhPT0gdGhpcy5fc3ZjLmN1cnJlbnRFZGl0Q2VsbC5jb2x1bW4pKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0RWRpdFJvd09yQ2VsbChudWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyb3cpIHtcbiAgICAgICAgaWYgKGV2ZW50LmN0cmxLZXkpIHtcbiAgICAgICAgICB0aGlzLl9zdmMuc2VsZWN0T3JEZXNlbGVjdFJvdyhyb3cpO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgdGhpcy5fc3ZjLnNlbGVjdFJhbmdlKHJvdyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fc3ZjLnNlbGVjdFJvd3MoW3Jvd10pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWV2ZW50SXNPblJvdyAmJiAhZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICBpZiAodGhpcy5lZGl0VHlwZSA9PT0gRWRpdFR5cGUucm93KSB7XG4gICAgICAgICAgdGhpcy5fc3ZjLnN0YXJ0RWRpdFJvdyhudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9zdmMuc3RhcnRFZGl0Q2VsbChudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZm9jdXNpbicsIFsnJGV2ZW50J10pIGZvY3VzSW4oZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gdGhpcy5nZXRDb29yZGluYXRlcyhldmVudCk7XG4gICAgaWYgKGNvb3JkaW5hdGVzKSB7XG4gICAgICB0aGlzLmNlbGxGb2N1cy5lbWl0KHtcbiAgICAgICAgLi4udGhpcy5fc3ZjLmdldENlbGxJbnN0YW5jZShjb29yZGluYXRlcyksXG4gICAgICAgIGV2ZW50XG4gICAgICB9KTtcbiAgICAgIGlmICh0aGlzLmVkaXRFdmVudCA9PT0gRWRpdEV2ZW50LmZvY3VzKSB7XG4gICAgICAgIHRoaXMuc3RhcnRFZGl0Um93T3JDZWxsKGNvb3JkaW5hdGVzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkYmxjbGljaycsIFsnJGV2ZW50J10pXG4gIGRibGNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgY29uc3QgY29vcmRpbmF0ZXMgPSB0aGlzLmdldENvb3JkaW5hdGVzKGV2ZW50KTtcbiAgICBpZiAoY29vcmRpbmF0ZXMpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmNlbGxEb3VibGVDbGljay5lbWl0KHtcbiAgICAgICAgICAuLi50aGlzLl9zdmMuZ2V0Q2VsbEluc3RhbmNlKGNvb3JkaW5hdGVzKSxcbiAgICAgICAgICBldmVudFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMuZWRpdEV2ZW50ID09PSBFZGl0RXZlbnQuZG91YmxlQ2xpY2spIHtcbiAgICAgICAgICB0aGlzLnN0YXJ0RWRpdFJvd09yQ2VsbChjb29yZGluYXRlcyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICBrZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmN0cmxLZXkpIHtcbiAgICAgIGlmIChldmVudC5jb2RlID09PSAnS2V5QScpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5fc3ZjLnNlbGVjdEFsbCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgdGhpcy5fc3ZjLmRlc2VsZWN0QWxsKCk7XG4gICAgICBpZiAodGhpcy5lZGl0VHlwZSA9PT0gRWRpdFR5cGUucm93KSB7XG4gICAgICAgIHRoaXMuX3N2Yy5zdGFydEVkaXRSb3cobnVsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9zdmMuc3RhcnRFZGl0Q2VsbChudWxsKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgY29vcmRpbmF0ZXMgPSB0aGlzLmdldENvb3JkaW5hdGVzKGV2ZW50KTtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICBpZiAodGhpcy5lZGl0VHlwZSA9PT0gRWRpdFR5cGUucm93KSB7XG4gICAgICAgIHRoaXMuX3N2Yy5zdGFydEVkaXRSb3cobnVsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5fc3ZjLmN1cnJlbnRFZGl0Q2VsbCkge1xuICAgICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuX3N2Yy5nZXROZXh0Um93Q2VsbChjb29yZGluYXRlcyk7XG4gICAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgICAgdGhpcy5zdGFydEVkaXRSb3dPckNlbGwoe1xuICAgICAgICAgICAgICByb3c6IHRhcmdldC5yb3csXG4gICAgICAgICAgICAgIGNvbHVtbjogdGFyZ2V0LmNvbHVtbixcbiAgICAgICAgICAgICAgZXZlbnQ6IHVuZGVmaW5lZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3N2Yy5zdGFydEVkaXRDZWxsKG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY29vcmRpbmF0ZXMpIHtcbiAgICAgIHRoaXMuY2VsbEtleURvd24uZW1pdCh7XG4gICAgICAgIC4uLnRoaXMuX3N2Yy5nZXRDZWxsSW5zdGFuY2UoY29vcmRpbmF0ZXMpLFxuICAgICAgICBldmVudFxuICAgICAgfSk7XG4gICAgICBpZiAoZXZlbnQua2V5ICYmIChldmVudC5rZXkubGVuZ3RoID09PSAxIHx8IGV2ZW50LmtleSA9PT0gJ0RlbGV0ZScpKSB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuX3N2Yy5nZXRDb2x1bW5CeU5hbWUoY29vcmRpbmF0ZXMuY29sdW1uKTtcbiAgICAgICAgaWYgKGNvbHVtbi5maWx0ZXJUeXBlICE9PSBGaWx0ZXJUeXBlLm51bWJlciB8fCBpc0Zpbml0ZShldmVudC5rZXkgYXMgYW55KSkge1xuICAgICAgICAgIHRoaXMuc3RhcnRFZGl0Um93T3JDZWxsKHtcbiAgICAgICAgICAgIHJvdzogY29vcmRpbmF0ZXMucm93LFxuICAgICAgICAgICAgY29sdW1uOiBjb29yZGluYXRlcy5jb2x1bW4sXG4gICAgICAgICAgICBldmVudDogZXZlbnRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ1RhYicgJiYgdGhpcy5fc3ZjLmN1cnJlbnRFZGl0Q2VsbCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBsZXQgdGFyZ2V0ID0gdGhpcy5fc3ZjLmdldE5leHRFZGl0YWJsZUNlbGwoY29vcmRpbmF0ZXMpO1xuICAgICAgICBpZiAoZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICB0YXJnZXQgPSB0aGlzLl9zdmMuZ2V0UHJldmlvdXNFZGl0YWJsZUNlbGwoY29vcmRpbmF0ZXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICB0aGlzLnN0YXJ0RWRpdFJvd09yQ2VsbCh7XG4gICAgICAgICAgICByb3c6IHRhcmdldC5yb3csXG4gICAgICAgICAgICBjb2x1bW46IHRhcmdldC5jb2x1bW4sXG4gICAgICAgICAgICBldmVudDogdW5kZWZpbmVkXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5fc3ZjLmN1cnJlbnRFZGl0Q2VsbCkge1xuICAgICAgICBsZXQgdGFyZ2V0O1xuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcpIHtcbiAgICAgICAgICB0YXJnZXQgPSB0aGlzLl9zdmMuZ2V0TmV4dENlbGwoY29vcmRpbmF0ZXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnKSB7XG4gICAgICAgICAgdGFyZ2V0ID0gdGhpcy5fc3ZjLmdldFByZXZpb3VzQ2VsbChjb29yZGluYXRlcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICAgICAgdGFyZ2V0ID0gdGhpcy5fc3ZjLmdldFByZXZpb3VzUm93Q2VsbChjb29yZGluYXRlcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgICAgICB0YXJnZXQgPSB0aGlzLl9zdmMuZ2V0TmV4dFJvd0NlbGwoY29vcmRpbmF0ZXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmdldENlbGxFbGVtZW50KHRhcmdldCk7XG4gICAgICAgICAgZWxlbWVudD8uZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlZG93bicsIFsnJGV2ZW50J10pIG1vdXNlZG93bihldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmIChldmVudC5idXR0b24gPT09IDIpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fc3ZjLnJlc3RvcmVTdGF0ZSgpO1xuICAgIHRoaXMuX3N2Yy5yZXN0b3JlSGlkZGVuQ29sdW1ucygpO1xuICAgIHRoaXMudGFibGVTZXJ2aWNlLmVtaXQodGhpcy5fc3ZjKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9oZWFkRWxlbWVudCA9XG4gICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLnRhYmxlLWhlYWQnKTtcbiAgICB0aGlzLl9ib2R5RWxlbWVudCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgJy50YWJsZS1ib2R5LWNvbnRhaW5lcidcbiAgICApO1xuICAgIHRoaXMuX2JvZHlFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25TY3JvbGwpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fYWxpdmUgPSBmYWxzZTtcbiAgICB0aGlzLl9ib2R5RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLm9uU2Nyb2xsKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnZWRpdFR5cGUnKSkge1xuICAgICAgdGhpcy5fc3ZjLmVkaXRUeXBlID0gdGhpcy5lZGl0VHlwZTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3NlbGVjdFR5cGUnKSkge1xuICAgICAgdGhpcy5fc3ZjLnNlbGVjdFR5cGUgPSB0aGlzLnNlbGVjdFR5cGU7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdzZWxlY3RlZFJvd3MnKSkge1xuICAgICAgdGhpcy5fc3ZjLnNlbGVjdFJvd3ModGhpcy5zZWxlY3RlZFJvd3MpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgncm93RWRpdGFibGUnKSkge1xuICAgICAgdGhpcy5fc3ZjLnJvd0VkaXRhYmxlID0gdGhpcy5yb3dFZGl0YWJsZTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ2Nvb2tpZU5hbWUnKSkge1xuICAgICAgdGhpcy5fc3ZjLnNldENvb2tpZU5hbWUodGhpcy5jb29raWVOYW1lKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ2NvbHVtbnMnKSkge1xuICAgICAgaWYgKHRoaXMuY29sdW1ucyAhPT0gbnVsbCAmJiB0aGlzLmNvbHVtbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl9zdmMuc2V0Q29sdW1ucyh0aGlzLmNvbHVtbnMpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnZGF0YScpKSB7XG4gICAgICB0aGlzLl9zdmMuc2V0RGF0YSh0aGlzLmRhdGEpO1xuICAgICAgdGhpcy5fc3ZjLnNlbGVjdFJvd3ModGhpcy5kYXRhPy5maWx0ZXIoKHJvdykgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFJvd3M/LnNvbWUoKHNlbGVjdGVkUm93KSA9PlxuICAgICAgICAgIHRoaXMudHJhY2tSb3codGhpcy5fc3ZjLmdldFJvd0luZGV4KHNlbGVjdGVkUm93KSwgc2VsZWN0ZWRSb3cpID09PSB0aGlzLnRyYWNrUm93KHRoaXMuX3N2Yy5nZXRSb3dJbmRleChyb3cpLCByb3cpKTtcbiAgICAgIH0pKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ2RpY3QnKSkge1xuICAgICAgdGhpcy5fc3ZjLnNldERpY3QodGhpcy5kaWN0KTtcbiAgICAgIHRoaXMuX3N2Yy5zZXRGaWx0ZXJPcHRpb25zKHRoaXMuZGljdCk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdmaWx0ZXJPcHRpb25zJykpIHtcbiAgICAgIHRoaXMuX3N2Yy5zZXRGaWx0ZXJPcHRpb25zKHRoaXMuZmlsdGVyT3B0aW9ucyk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCd0cmFja1JvdycpKSB7XG4gICAgICB0aGlzLl9zdmMudHJhY2tSb3cgPSB0aGlzLnRyYWNrUm93O1xuICAgIH1cbiAgfVxuXG4gIHNldENvbnRleHRNZW51T3Blbih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuY29udGV4dE1lbnVPcGVuID0gdmFsdWU7XG4gICAgdGhpcy5jb250ZXh0TWVudU9wZW5DaGFuZ2UuZW1pdCh0aGlzLmNvbnRleHRNZW51T3Blbik7XG4gIH1cblxuICBzZXRDb250ZXh0TWVudVJvdyhldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMuY29udGV4dE1lbnVSb3cgPSBudWxsO1xuICAgIGNvbnN0IHJvd0VsZW1lbnQgPSB0aGlzLl9zdmMuZ2V0RXZlbnRSb3coZXZlbnQpO1xuICAgIGlmIChyb3dFbGVtZW50KSB7XG4gICAgICBjb25zdCByb3dJbmRleCA9IHBhcnNlSW50KHJvd0VsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXJvdycpLCAxMCk7XG4gICAgICBpZiAocm93SW5kZXggPj0gMCkge1xuICAgICAgICB0aGlzLmNvbnRleHRNZW51Um93ID0gdGhpcy5fc3ZjLmdldFJvd0J5SW5kZXgocm93SW5kZXgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRFZGl0Um93T3JDZWxsKGNvb3JkaW5hdGVzOiBJQ2VsbEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZWRpdFR5cGUgPT09IEVkaXRUeXBlLnJvdykge1xuICAgICAgdGhpcy5fc3ZjLnN0YXJ0RWRpdFJvdyhjb29yZGluYXRlcyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmVkaXRUeXBlID09PSBFZGl0VHlwZS5jZWxsKSB7XG4gICAgICB0aGlzLl9zdmMuc3RhcnRFZGl0Q2VsbChjb29yZGluYXRlcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRDZWxsRWxlbWVudChjb29yZGluYXRlczogSUNlbGxDb29yZGluYXRlcyk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgYHRldGEtY2VsbFtkYXRhLXJvdz1cIiR7Y29vcmRpbmF0ZXMucm93fVwiXVtkYXRhLWNvbHVtbj1cIiR7Y29vcmRpbmF0ZXMuY29sdW1ufVwiXWBcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBldmVudElzT25Sb3coZXZlbnQ6IEV2ZW50KTogYm9vbGVhbiB7XG4gICAgY29uc3Qgcm93ID0gZXZlbnQuY29tcG9zZWRQYXRoKCkuZmluZCgodGFyZ2V0OiBIVE1MRWxlbWVudCkgPT4ge1xuICAgICAgcmV0dXJuIHRhcmdldD8uZ2V0QXR0cmlidXRlICYmIHRhcmdldD8uZ2V0QXR0cmlidXRlKCdkYXRhLXJvdycpO1xuICAgIH0pO1xuICAgIHJldHVybiByb3cgJiYgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKHJvdyk7XG4gIH1cblxuICBwcml2YXRlIGdldENvb3JkaW5hdGVzKGV2ZW50OiBFdmVudCk6IElDZWxsRXZlbnQgfCBudWxsIHtcbiAgICBpZiAoZXZlbnQuY29tcG9zZWRQYXRoKCkuaW5kZXhPZih0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpIDwgMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGNlbGwgPSB0aGlzLl9zdmMuZ2V0RXZlbnRDZWxsKGV2ZW50KTtcbiAgICBpZiAoY2VsbCkge1xuICAgICAgY29uc3Qgcm93SW5kZXggPSBwYXJzZUludChjZWxsLmdldEF0dHJpYnV0ZSgnZGF0YS1yb3cnKSwgMTApO1xuICAgICAgY29uc3QgY29sdW1uTmFtZSA9IGNlbGwuZ2V0QXR0cmlidXRlKCdkYXRhLWNvbHVtbicpO1xuICAgICAgaWYgKHJvd0luZGV4ID49IDAgJiYgY29sdW1uTmFtZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJvdzogcm93SW5kZXgsXG4gICAgICAgICAgY29sdW1uOiBjb2x1bW5OYW1lLFxuICAgICAgICAgIGV2ZW50LFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Um93KGV2ZW50OiBFdmVudCk6IFQgfCBudWxsIHtcbiAgICBpZiAoZXZlbnQuY29tcG9zZWRQYXRoKCkuaW5kZXhPZih0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpIDwgMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHJvd0VsZW1lbnQgPSB0aGlzLl9zdmMuZ2V0RXZlbnRSb3coZXZlbnQpO1xuICAgIGlmIChyb3dFbGVtZW50KSB7XG4gICAgICBjb25zdCByb3dJbmRleCA9IHBhcnNlSW50KHJvd0VsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXJvdycpLCAxMCk7XG4gICAgICBpZiAocm93SW5kZXggPj0gMCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3ZjLmdldFJvd0J5SW5kZXgocm93SW5kZXgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgb25TY3JvbGwgPSAoKSA9PiB7XG4gICAgdGhpcy5faGVhZEVsZW1lbnQuc2Nyb2xsTGVmdCA9IHRoaXMuX2JvZHlFbGVtZW50LnNjcm9sbExlZnQ7XG4gIH07XG5cbiAgLy8gcHJpdmF0ZSBnZXRTZWxlY3RlZFRleHQoKSB7XG4gIC8vICAgbGV0IHRleHQgPSAnJztcbiAgLy8gICBpZiAodHlwZW9mIHdpbmRvdy5nZXRTZWxlY3Rpb24gIT0gJ3VuZGVmaW5lZCcpIHtcbiAgLy8gICAgIHRleHQgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKTtcbiAgLy8gICB9XG4gIC8vICAgcmV0dXJuIHRleHQ7XG4gIC8vIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjb2x1bW4gY29sdW1uX2F1dG9cIj5cbiAgPHRldGEtdGFibGUtaGVhZFxuICAgIHN0eWxlPVwiei1pbmRleDogMVwiXG4gICAgW3NlbGVjdFR5cGVdPVwic2VsZWN0VHlwZVwiXG4gICAgW3Nob3dIZWFkQ2VsbE1lbnVdPVwic2hvd0hlYWRDZWxsTWVudVwiPjwvdGV0YS10YWJsZS1oZWFkPlxuICA8ZGl2IGNsYXNzPVwiY29sdW1uIGNvbHVtbl9hdXRvIHBvc2l0aW9uLXJlbGF0aXZlXCJcbiAgICAgICBzdHlsZT1cInotaW5kZXg6IDBcIlxuICAgICAgIFt0ZXRhQ29udGV4dE1lbnVdPVwiY29udGV4dE1lbnVcIlxuICAgICAgIFt2ZXJ0aWNhbEFsaWduXT1cInZlcnRpY2FsQWxpZ24uYXV0b1wiXG4gICAgICAgW2FsaWduXT1cImFsaWduLmF1dG9cIlxuICAgICAgIFthcHBlbmRUb0JvZHldPVwidHJ1ZVwiXG4gICAgICAgW2RhdGFdPVwiY29udGV4dE1lbnVSb3dcIlxuICAgICAgIFtvcGVuXT1cImNvbnRleHRNZW51T3BlblwiXG4gICAgICAgKG9wZW5DaGFuZ2UpPVwic2V0Q29udGV4dE1lbnVPcGVuKCRldmVudClcIj5cbiAgICA8dGV0YS10YWJsZS1ib2R5XG4gICAgICAoY29udGV4dG1lbnUpPVwic2V0Q29udGV4dE1lbnVSb3coJGV2ZW50KVwiXG4gICAgICBbYWdncmVnYXRlXT1cImFnZ3JlZ2F0ZVwiXG4gICAgICBbdmlydHVhbF09XCJ2aXJ0dWFsXCJcbiAgICAgIFthY3RpdmVSb3ddPVwiYWN0aXZlUm93XCJcbiAgICAgIFt0cmFja1Jvd109XCJ0cmFja1Jvd1wiXG4gICAgICBbdHJhY2tDb2x1bW5zXT1cInRyYWNrQ29sdW1uc1wiXG4gICAgICBbc2VsZWN0ZWRSb3dzXT1cInNlbGVjdGVkUm93c0xpc3RcIlxuICAgICAgW2FkZGl0aW9uYWxDb21wb25lbnRdPVwiZGV0YWlsQ29tcG9uZW50XCJcbiAgICAgIFtzZWxlY3RUeXBlXT1cInNlbGVjdFR5cGVcIlxuICAgICAgW3Jvd0NsYXNzXT1cInJvd0NsYXNzXCI+PC90ZXRhLXRhYmxlLWJvZHk+XG4gICAgPGRpdiBjbGFzcz1cImNvbHVtbiBjb2x1bW5fYXV0b1wiXG4gICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOjA7IGJvdHRvbTowO2xlZnQ6MDtyaWdodDowO1wiXG4gICAgICAgICAqbmdJZj1cIiFkYXRhPy5sZW5ndGhcIj5cbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -125,15 +125,16 @@ export class TableBodyComponent {
|
|
|
125
125
|
}
|
|
126
126
|
return '';
|
|
127
127
|
}
|
|
128
|
-
trackRow(index, row) {
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
128
|
+
// trackRow(index: number, row: T): any {
|
|
129
|
+
// if (row['id']) {
|
|
130
|
+
// return row['id'];
|
|
131
|
+
// }
|
|
132
|
+
// return index;
|
|
133
|
+
// }
|
|
134
|
+
//
|
|
135
|
+
// trackColumns(index: number, column: TableColumn): any {
|
|
136
|
+
// return column.name;
|
|
137
|
+
// }
|
|
137
138
|
addResizeObserver() {
|
|
138
139
|
this._obs = new ResizeObserver((_) => {
|
|
139
140
|
this.viewport?.checkViewportSize();
|
|
@@ -162,7 +163,7 @@ export class TableBodyComponent {
|
|
|
162
163
|
}
|
|
163
164
|
}
|
|
164
165
|
TableBodyComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: TableBodyComponent, deps: [{ token: i1.TableService }, { token: i0.ElementRef }, { token: i2.TetaConfigService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
165
|
-
TableBodyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: TableBodyComponent, selector: "teta-table-body", inputs: { virtual: "virtual", activeRow: "activeRow", selectedRows: "selectedRows", additionalComponent: "additionalComponent", aggregate: "aggregate", selectType: "selectType", rowClass: "rowClass" }, host: { properties: { "class.table-body": "this.tableBodyClass" } }, viewQueries: [{ propertyName: "viewport", first: true, predicate: CdkVirtualScrollViewport, descendants: true }], ngImport: i0, template: "<cdk-virtual-scroll-viewport *ngIf=\"virtual\"\n class=\"table-body-container\"\n [itemSize]=\"28\">\n <ng-container *cdkVirtualFor=\"let row of data;templateCacheSize: 0; let rowIndex = index; trackBy: trackRow;\">\n <ng-container *ngTemplateOutlet=\"bodyTemplate; context: {row: row, rowIndex: rowIndex}\"></ng-container>\n </ng-container>\n</cdk-virtual-scroll-viewport>\n<div *ngIf=\"!virtual\"\n class=\"table-body-container\">\n <ng-container *ngFor=\"let row of data; let rowIndex = index; trackBy: trackRow;\">\n <ng-container *ngTemplateOutlet=\"bodyTemplate; context: {row: row, rowIndex: rowIndex}\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"aggregate\">\n <ng-container *ngTemplateOutlet=\"aggTemplate;\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #bodyTemplate let-row=\"row\" let-rowIndex=\"rowIndex\">\n <div class=\"table-row\"\n (click)=\"setActiveRow(row, $event)\"\n [attr.data-row]=\"rowIndex\"\n [class.table-row_odd]=\"rowIndex % 2 === 1\"\n [ngClass]=\"rowClass ? rowClass(row, rowIndex) : ''\"\n [class.table-row_selected]=\"selectedRows && selectedRows.indexOf(row) >= 0\"\n [style.flex-grow]=\"totalFlex\"\n [style.flex-basis.px]=\"totalWidth\"\n [style.min-width.px]=\"totalWidth\">\n <div class=\"table-row_locked\"\n *ngIf=\"locked.length > 0\"\n [style.flex-grow]=\"lockedFlex\"\n [style.flex-basis.px]=\"lockedWidth\"\n [style.min-width.px]=\"lockedWidth\"\n [style.zIndex]=\"row === activeRow ? 2 : 1\">\n <teta-selection-cell *ngIf=\"selectType === selectTypeEnum.checkBox && locked.length\"\n [row]=\"row\"\n style=\"width: 28px;\"></teta-selection-cell>\n <teta-cell\n *ngFor=\"let column of locked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-row]=\"rowIndex\"\n [attr.data-column]=\"column.name\"\n [column]=\"column\"\n [filterOptions]=\"dict?dict[column.name]:[]\"\n [dict]=\"dict\"\n [row]=\"row\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\"\n ></teta-cell>\n </div>\n <teta-selection-cell *ngIf=\"selectType === selectTypeEnum.checkBox && locked.length < 1\"\n [row]=\"row\"\n style=\"width: 28px;\"></teta-selection-cell>\n <teta-cell\n *ngFor=\"let column of unlocked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-row]=\"rowIndex\"\n [attr.data-column]=\"column.name\"\n [column]=\"column\"\n [filterOptions]=\"dict?dict[column.name]:[]\"\n [dict]=\"dict\"\n [row]=\"row\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\"\n ></teta-cell>\n </div>\n</ng-template>\n\n<ng-template #aggTemplate>\n <ng-container *ngIf=\"locale | async as loc\">\n <div class=\"table-row\"\n *ngIf=\"aggregate\"\n [class.table-row_virtual]=\"virtual\"\n [style.flex-grow]=\"totalFlex\"\n [style.flex-basis.px]=\"totalWidth\"\n [style.min-width.px]=\"totalWidth\">\n <div class=\"table-row_locked\"\n *ngIf=\"locked.length > 0\"\n [style.flex-grow]=\"lockedFlex\"\n [style.flex-basis.px]=\"lockedWidth\"\n [style.min-width.px]=\"lockedWidth\">\n <div class=\"cell align-center justify-content-center\"\n style=\"width: 28px;\"\n *ngIf=\"selectType === selectTypeEnum.checkBox && locked.length < 1\">\n <teta-icon [name]=\"'sumColor'\"></teta-icon>\n </div>\n <div class=\"cell cell-component\"\n *ngFor=\"let column of locked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-column]=\"column.name\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\">\n <span class=\"cell-text cell-text_numeric font-title-3\">\n {{loc[getAggregateText(column)]}}:\n {{getAggregateValue(column) | tetaNumber : 2}}\n </span>\n </div>\n </div>\n <div class=\"cell align-center justify-content-center\"\n style=\"width: 28px;\"\n *ngIf=\"selectType === selectTypeEnum.checkBox && locked.length < 1\">\n <teta-icon [name]=\"'sumColor'\"></teta-icon>\n </div>\n <div class=\"cell cell-component\"\n *ngFor=\"let column of unlocked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-column]=\"column.name\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\">\n <span class=\"cell-text cell-text_numeric font-title-3\">\n {{loc[getAggregateText(column)]}}:\n {{getAggregateValue(column) | tetaNumber : 2}}\n </span>\n </div>\n </div>\n </ng-container>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.IconComponent, selector: "teta-icon", inputs: ["name", "size", "palette", "class"] }, { kind: "directive", type: i5.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i5.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i5.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "component", type: i6.CellComponent, selector: "teta-cell", inputs: ["column", "filterOptions", "dict", "row"] }, { kind: "component", type: i7.SelectionCellComponent, selector: "teta-selection-cell", inputs: ["row"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i8.NumberPipe, name: "tetaNumber" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
166
|
+
TableBodyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: TableBodyComponent, selector: "teta-table-body", inputs: { virtual: "virtual", activeRow: "activeRow", selectedRows: "selectedRows", additionalComponent: "additionalComponent", aggregate: "aggregate", selectType: "selectType", rowClass: "rowClass", trackRow: "trackRow", trackColumns: "trackColumns" }, host: { properties: { "class.table-body": "this.tableBodyClass" } }, viewQueries: [{ propertyName: "viewport", first: true, predicate: CdkVirtualScrollViewport, descendants: true }], ngImport: i0, template: "<cdk-virtual-scroll-viewport *ngIf=\"virtual\"\n class=\"table-body-container\"\n [itemSize]=\"28\">\n <ng-container *cdkVirtualFor=\"let row of data;templateCacheSize: 0; let rowIndex = index; trackBy: trackRow;\">\n <ng-container *ngTemplateOutlet=\"bodyTemplate; context: {row: row, rowIndex: rowIndex}\"></ng-container>\n </ng-container>\n</cdk-virtual-scroll-viewport>\n<div *ngIf=\"!virtual\"\n class=\"table-body-container\">\n <ng-container *ngFor=\"let row of data; let rowIndex = index; trackBy: trackRow;\">\n <ng-container *ngTemplateOutlet=\"bodyTemplate; context: {row: row, rowIndex: rowIndex}\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"aggregate\">\n <ng-container *ngTemplateOutlet=\"aggTemplate;\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #bodyTemplate let-row=\"row\" let-rowIndex=\"rowIndex\">\n <div class=\"table-row\"\n (click)=\"setActiveRow(row, $event)\"\n [attr.data-row]=\"rowIndex\"\n [class.table-row_odd]=\"rowIndex % 2 === 1\"\n [ngClass]=\"rowClass ? rowClass(row, rowIndex) : ''\"\n [class.table-row_selected]=\"selectedRows && selectedRows.indexOf(row) >= 0\"\n [style.flex-grow]=\"totalFlex\"\n [style.flex-basis.px]=\"totalWidth\"\n [style.min-width.px]=\"totalWidth\">\n <div class=\"table-row_locked\"\n *ngIf=\"locked.length > 0\"\n [style.flex-grow]=\"lockedFlex\"\n [style.flex-basis.px]=\"lockedWidth\"\n [style.min-width.px]=\"lockedWidth\"\n [style.zIndex]=\"row === activeRow ? 2 : 1\">\n <teta-selection-cell *ngIf=\"selectType === selectTypeEnum.checkBox && locked.length\"\n [row]=\"row\"\n style=\"width: 28px;\"></teta-selection-cell>\n <teta-cell\n *ngFor=\"let column of locked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-row]=\"rowIndex\"\n [attr.data-column]=\"column.name\"\n [column]=\"column\"\n [filterOptions]=\"dict?dict[column.name]:[]\"\n [dict]=\"dict\"\n [row]=\"row\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\"\n ></teta-cell>\n </div>\n <teta-selection-cell *ngIf=\"selectType === selectTypeEnum.checkBox && locked.length < 1\"\n [row]=\"row\"\n style=\"width: 28px;\"></teta-selection-cell>\n <teta-cell\n *ngFor=\"let column of unlocked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-row]=\"rowIndex\"\n [attr.data-column]=\"column.name\"\n [column]=\"column\"\n [filterOptions]=\"dict?dict[column.name]:[]\"\n [dict]=\"dict\"\n [row]=\"row\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\"\n ></teta-cell>\n </div>\n</ng-template>\n\n<ng-template #aggTemplate>\n <ng-container *ngIf=\"locale | async as loc\">\n <div class=\"table-row\"\n *ngIf=\"aggregate\"\n [class.table-row_virtual]=\"virtual\"\n [style.flex-grow]=\"totalFlex\"\n [style.flex-basis.px]=\"totalWidth\"\n [style.min-width.px]=\"totalWidth\">\n <div class=\"table-row_locked\"\n *ngIf=\"locked.length > 0\"\n [style.flex-grow]=\"lockedFlex\"\n [style.flex-basis.px]=\"lockedWidth\"\n [style.min-width.px]=\"lockedWidth\">\n <div class=\"cell align-center justify-content-center\"\n style=\"width: 28px;\"\n *ngIf=\"selectType === selectTypeEnum.checkBox && locked.length < 1\">\n <teta-icon [name]=\"'sumColor'\"></teta-icon>\n </div>\n <div class=\"cell cell-component\"\n *ngFor=\"let column of locked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-column]=\"column.name\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\">\n <span class=\"cell-text cell-text_numeric font-title-3\">\n {{loc[getAggregateText(column)]}}:\n {{getAggregateValue(column) | tetaNumber : 2}}\n </span>\n </div>\n </div>\n <div class=\"cell align-center justify-content-center\"\n style=\"width: 28px;\"\n *ngIf=\"selectType === selectTypeEnum.checkBox && locked.length < 1\">\n <teta-icon [name]=\"'sumColor'\"></teta-icon>\n </div>\n <div class=\"cell cell-component\"\n *ngFor=\"let column of unlocked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-column]=\"column.name\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\">\n <span class=\"cell-text cell-text_numeric font-title-3\">\n {{loc[getAggregateText(column)]}}:\n {{getAggregateValue(column) | tetaNumber : 2}}\n </span>\n </div>\n </div>\n </ng-container>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.IconComponent, selector: "teta-icon", inputs: ["name", "size", "palette", "class"] }, { kind: "directive", type: i5.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i5.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i5.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "component", type: i6.CellComponent, selector: "teta-cell", inputs: ["column", "filterOptions", "dict", "row"] }, { kind: "component", type: i7.SelectionCellComponent, selector: "teta-selection-cell", inputs: ["row"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i8.NumberPipe, name: "tetaNumber" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
166
167
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: TableBodyComponent, decorators: [{
|
|
167
168
|
type: Component,
|
|
168
169
|
args: [{ selector: 'teta-table-body', changeDetection: ChangeDetectionStrategy.OnPush, template: "<cdk-virtual-scroll-viewport *ngIf=\"virtual\"\n class=\"table-body-container\"\n [itemSize]=\"28\">\n <ng-container *cdkVirtualFor=\"let row of data;templateCacheSize: 0; let rowIndex = index; trackBy: trackRow;\">\n <ng-container *ngTemplateOutlet=\"bodyTemplate; context: {row: row, rowIndex: rowIndex}\"></ng-container>\n </ng-container>\n</cdk-virtual-scroll-viewport>\n<div *ngIf=\"!virtual\"\n class=\"table-body-container\">\n <ng-container *ngFor=\"let row of data; let rowIndex = index; trackBy: trackRow;\">\n <ng-container *ngTemplateOutlet=\"bodyTemplate; context: {row: row, rowIndex: rowIndex}\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"aggregate\">\n <ng-container *ngTemplateOutlet=\"aggTemplate;\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #bodyTemplate let-row=\"row\" let-rowIndex=\"rowIndex\">\n <div class=\"table-row\"\n (click)=\"setActiveRow(row, $event)\"\n [attr.data-row]=\"rowIndex\"\n [class.table-row_odd]=\"rowIndex % 2 === 1\"\n [ngClass]=\"rowClass ? rowClass(row, rowIndex) : ''\"\n [class.table-row_selected]=\"selectedRows && selectedRows.indexOf(row) >= 0\"\n [style.flex-grow]=\"totalFlex\"\n [style.flex-basis.px]=\"totalWidth\"\n [style.min-width.px]=\"totalWidth\">\n <div class=\"table-row_locked\"\n *ngIf=\"locked.length > 0\"\n [style.flex-grow]=\"lockedFlex\"\n [style.flex-basis.px]=\"lockedWidth\"\n [style.min-width.px]=\"lockedWidth\"\n [style.zIndex]=\"row === activeRow ? 2 : 1\">\n <teta-selection-cell *ngIf=\"selectType === selectTypeEnum.checkBox && locked.length\"\n [row]=\"row\"\n style=\"width: 28px;\"></teta-selection-cell>\n <teta-cell\n *ngFor=\"let column of locked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-row]=\"rowIndex\"\n [attr.data-column]=\"column.name\"\n [column]=\"column\"\n [filterOptions]=\"dict?dict[column.name]:[]\"\n [dict]=\"dict\"\n [row]=\"row\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\"\n ></teta-cell>\n </div>\n <teta-selection-cell *ngIf=\"selectType === selectTypeEnum.checkBox && locked.length < 1\"\n [row]=\"row\"\n style=\"width: 28px;\"></teta-selection-cell>\n <teta-cell\n *ngFor=\"let column of unlocked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-row]=\"rowIndex\"\n [attr.data-column]=\"column.name\"\n [column]=\"column\"\n [filterOptions]=\"dict?dict[column.name]:[]\"\n [dict]=\"dict\"\n [row]=\"row\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\"\n ></teta-cell>\n </div>\n</ng-template>\n\n<ng-template #aggTemplate>\n <ng-container *ngIf=\"locale | async as loc\">\n <div class=\"table-row\"\n *ngIf=\"aggregate\"\n [class.table-row_virtual]=\"virtual\"\n [style.flex-grow]=\"totalFlex\"\n [style.flex-basis.px]=\"totalWidth\"\n [style.min-width.px]=\"totalWidth\">\n <div class=\"table-row_locked\"\n *ngIf=\"locked.length > 0\"\n [style.flex-grow]=\"lockedFlex\"\n [style.flex-basis.px]=\"lockedWidth\"\n [style.min-width.px]=\"lockedWidth\">\n <div class=\"cell align-center justify-content-center\"\n style=\"width: 28px;\"\n *ngIf=\"selectType === selectTypeEnum.checkBox && locked.length < 1\">\n <teta-icon [name]=\"'sumColor'\"></teta-icon>\n </div>\n <div class=\"cell cell-component\"\n *ngFor=\"let column of locked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-column]=\"column.name\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\">\n <span class=\"cell-text cell-text_numeric font-title-3\">\n {{loc[getAggregateText(column)]}}:\n {{getAggregateValue(column) | tetaNumber : 2}}\n </span>\n </div>\n </div>\n <div class=\"cell align-center justify-content-center\"\n style=\"width: 28px;\"\n *ngIf=\"selectType === selectTypeEnum.checkBox && locked.length < 1\">\n <teta-icon [name]=\"'sumColor'\"></teta-icon>\n </div>\n <div class=\"cell cell-component\"\n *ngFor=\"let column of unlocked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-column]=\"column.name\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\">\n <span class=\"cell-text cell-text_numeric font-title-3\">\n {{loc[getAggregateText(column)]}}:\n {{getAggregateValue(column) | tetaNumber : 2}}\n </span>\n </div>\n </div>\n </ng-container>\n</ng-template>\n" }]
|
|
@@ -180,6 +181,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
|
|
|
180
181
|
type: Input
|
|
181
182
|
}], rowClass: [{
|
|
182
183
|
type: Input
|
|
184
|
+
}], trackRow: [{
|
|
185
|
+
type: Input
|
|
186
|
+
}], trackColumns: [{
|
|
187
|
+
type: Input
|
|
183
188
|
}], viewport: [{
|
|
184
189
|
type: ViewChild,
|
|
185
190
|
args: [CdkVirtualScrollViewport, { static: false }]
|
|
@@ -187,4 +192,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
|
|
|
187
192
|
type: HostBinding,
|
|
188
193
|
args: ['class.table-body']
|
|
189
194
|
}] } });
|
|
190
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtYm9keS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3RhYmxlL3RhYmxlLWJvZHkvdGFibGUtYm9keS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3RhYmxlL3RhYmxlLWJvZHkvdGFibGUtYm9keS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxXQUFXLEVBQ1gsS0FBSyxFQUlMLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUl2QixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDekMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxhQUFhLEVBQWEsTUFBTSxNQUFNLENBQUM7QUFDL0MsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBRzFELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7OztBQVVoRSxNQUFNLE9BQU8sa0JBQWtCO0lBcUQ3QixZQUFvQixJQUFxQixFQUNyQixXQUF1QixFQUN2QixPQUEwQixFQUMxQixJQUF1QjtRQUh2QixTQUFJLEdBQUosSUFBSSxDQUFpQjtRQUNyQixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUN2QixZQUFPLEdBQVAsT0FBTyxDQUFtQjtRQUMxQixTQUFJLEdBQUosSUFBSSxDQUFtQjtRQXJEbEMsaUJBQVksR0FBUSxFQUFFLENBQUM7UUFRa0IsbUJBQWMsR0FBRyxJQUFJLENBQUM7UUFXeEUsV0FBTSxHQUFrQixFQUFFLENBQUM7UUFDM0IsYUFBUSxHQUFrQixFQUFFLENBQUM7UUFDN0IsbUJBQWMs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LElBQUksS0FBSyxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUM7WUFDM0MsQ0FBQyxDQUFDLEtBQUs7WUFDUCxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUN6QixJQUFJLENBQ0wsQ0FBQztJQUNKLENBQUM7OytHQXRNVSxrQkFBa0I7bUdBQWxCLGtCQUFrQixnWEFTbEIsd0JBQXdCLGdEQ3hDckMsa3NLQXdIQTsyRkR6RmEsa0JBQWtCO2tCQU45QixTQUFTOytCQUNFLGlCQUFpQixtQkFHVix1QkFBdUIsQ0FBQyxNQUFNOzRMQUd0QyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFFZ0QsUUFBUTtzQkFBN0QsU0FBUzt1QkFBQyx3QkFBd0IsRUFBRSxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUM7Z0JBRUYsY0FBYztzQkFBL0QsV0FBVzt1QkFBQyxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCwgRWxlbWVudFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgVHlwZSxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7VGFibGVDb2x1bW59IGZyb20gJy4uL2NvbnRyYWN0L3RhYmxlLWNvbHVtbic7XG5pbXBvcnQge1RhYmxlU2VydmljZX0gZnJvbSAnLi4vc2VydmljZS90YWJsZS5zZXJ2aWNlJztcbmltcG9ydCB7RGV0YWlsQ29tcG9uZW50QmFzZX0gZnJvbSAnLi4vYmFzZS9kZXRhaWwtY29tcG9uZW50LWJhc2UnO1xuaW1wb3J0IHt0YWtlV2hpbGV9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7U2VsZWN0VHlwZX0gZnJvbSAnLi4vZW51bS9zZWxlY3QtdHlwZS5lbnVtJztcbmltcG9ydCB7Y29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0FycmF5VXRpbH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL3V0aWwvYXJyYXktdXRpbCc7XG5pbXBvcnQge0lEaWN0aW9uYXJ5fSBmcm9tICcuLi8uLi8uLi9jb21tb24vY29udHJhY3QvaS1kaWN0aW9uYXJ5JztcbmltcG9ydCB7SUlkTmFtZX0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL2NvbnRyYWN0L2ktaWQtbmFtZSc7XG5pbXBvcnQge0FnZ3JlZ2F0aW9uVHlwZX0gZnJvbSAnLi4vZW51bS9hZ2dyZWdhdGlvbi10eXBlLmVudW0nO1xuaW1wb3J0IHtDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnR9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHtUZXRhTG9jYWxpc2F0aW9ufSBmcm9tICcuLi8uLi8uLi9sb2NhbGUvdGV0YS1sb2NhbGlzYXRpb24nO1xuaW1wb3J0IHtUZXRhQ29uZmlnU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vbG9jYWxlL3RldGEtY29uZmlnLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0ZXRhLXRhYmxlLWJvZHknLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUtYm9keS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLWJvZHkuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlQm9keUNvbXBvbmVudDxUPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgdmlydHVhbDogYm9vbGVhbjtcbiAgQElucHV0KCkgYWN0aXZlUm93OiBUO1xuICBASW5wdXQoKSBzZWxlY3RlZFJvd3M6IFRbXSA9IFtdO1xuICBASW5wdXQoKSBhZGRpdGlvbmFsQ29tcG9uZW50OiBUeXBlPERldGFpbENvbXBvbmVudEJhc2U8VD4+O1xuICBASW5wdXQoKSBhZ2dyZWdhdGU6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHNlbGVjdFR5cGU6IFNlbGVjdFR5cGU7XG4gIEBJbnB1dCgpIHJvd0NsYXNzOiAocm93OiBULCBpbmRleD86IG51bWJlcikgPT4gc3RyaW5nO1xuXG4gIEBWaWV3Q2hpbGQoQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0LCB7c3RhdGljOiBmYWxzZX0pIHZpZXdwb3J0OiBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQ7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy50YWJsZS1ib2R5JykgcHJpdmF0ZSByZWFkb25seSB0YWJsZUJvZHlDbGFzcyA9IHRydWU7XG5cbiAgc2V0IGRhdGEoZGF0YTogVFtdKSB7XG4gICAgdGhpcy5fZGF0YSA9IGRhdGE7XG4gIH1cblxuICBnZXQgZGF0YSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgfVxuXG4gIGRpY3Q6IElEaWN0aW9uYXJ5PElJZE5hbWU8YW55PltdPjtcbiAgbG9ja2VkOiBUYWJsZUNvbHVtbltdID0gW107XG4gIHVubG9ja2VkOiBUYWJsZUNvbHVtbltdID0gW107XG4gIHNlbGVjdFR5cGVFbnVtID0gU2VsZWN0VHlwZTtcbiAgbG9ja2VkRmxleDogbnVtYmVyO1xuICBsb2NrZWRXaWR0aDogbnVtYmVyO1xuICB0b3RhbEZsZXg6IG51bWJlcjtcbiAgdG90YWxXaWR0aDogbnVtYmVyO1xuXG4gIHByaXZhdGUgX2NvbHVtbnM6IFRhYmxlQ29sdW1uW10gPSBbXTtcbiAgcHJpdmF0ZSBfYWxpdmUgPSB0cnVlO1xuICBwcml2YXRlIF9kYXRhOiBUW107XG4gIHByaXZhdGUgX2hpZGRlbkNvbHVtbnM6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgX29iczogUmVzaXplT2JzZXJ2ZXI7XG5cbiAgc2V0IGNvbHVtbnMoY29sdW1uczogVGFibGVDb2x1bW5bXSkge1xuICAgIHRoaXMuX2NvbHVtbnMgPSBjb2x1bW5zO1xuICAgIHRoaXMubG9ja2VkID0gdGhpcy5fY29sdW1ucz8uZmlsdGVyKChfKSA9PiBfLmxvY2tlZCA9PT0gdHJ1ZSk7XG4gICAgdGhpcy51bmxvY2tlZCA9IHRoaXMuX2NvbHVtbnM/LmZpbHRlcigoXykgPT4gXy5sb2NrZWQgPT09IGZhbHNlKTtcbiAgICBjb25zdCBzdGFydFdpZHRoID0gdGhpcy5zZWxlY3RUeXBlID09PSBTZWxlY3RUeXBlLmNoZWNrQm94ID8gMjggOiAwO1xuICAgIHRoaXMubG9ja2VkRmxleCA9IHRoaXMubG9ja2VkLnJlZHVjZSgocHJldjogbnVtYmVyLCBjdXJyOiBUYWJsZUNvbHVtbikgPT4gcHJldiArIGN1cnIuZmxleCwgMCk7XG4gICAgdGhpcy5sb2NrZWRXaWR0aCA9IHRoaXMubG9ja2VkLnJlZHVjZSgocHJldjogbnVtYmVyLCBjdXJyOiBUYWJsZUNvbHVtbikgPT4gcHJldiArIGN1cnIud2lkdGgsIHN0YXJ0V2lkdGgpO1xuICAgIHRoaXMudG90YWxGbGV4ID0gdGhpcy5fY29sdW1ucy5yZWR1Y2UoKHByZXY6IG51bWJlciwgY3VycjogVGFibGVDb2x1bW4pID0+IHByZXYgKyBjdXJyLmZsZXgsIDApO1xuICAgIHRoaXMudG90YWxXaWR0aCA9IHRoaXMuX2NvbHVtbnMucmVkdWNlKChwcmV2OiBudW1iZXIsIGN1cnI6IFRhYmxlQ29sdW1uKSA9PiBwcmV2ICsgY3Vyci53aWR0aCwgc3RhcnRXaWR0aCk7XG4gIH1cblxuICBnZXQgY29sdW1ucygpOiBUYWJsZUNvbHVtbltdIHtcbiAgICByZXR1cm4gdGhpcy5fY29sdW1ucztcbiAgfVxuXG4gIGxvY2FsZTogT2JzZXJ2YWJsZTxUZXRhTG9jYWxpc2F0aW9uPjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9zdmM6IFRhYmxlU2VydmljZTxUPixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfY29uZmlnOiBUZXRhQ29uZmlnU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuXG4gIH1cblxuICBzZXRBY3RpdmVSb3cocm93OiBULCBldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICghZXZlbnQuc2hpZnRLZXkgJiYgIWV2ZW50LmN0cmxLZXkpIHtcbiAgICAgIHRoaXMuX3N2Yy5zZXRBY3RpdmVSb3cocm93KTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmxvY2FsZSA9IHRoaXMuX2NvbmZpZy5sb2NhbGU7XG4gICAgY29tYmluZUxhdGVzdChbdGhpcy5fc3ZjLmNvbHVtbnMsIHRoaXMuX3N2Yy5oaWRkZW5Db2x1bW5zXSlcbiAgICAgIC5waXBlKHRha2VXaGlsZSgoXykgPT4gdGhpcy5fYWxpdmUpKVxuICAgICAgLnN1YnNjcmliZSgodmFsdWVzOiBbVGFibGVDb2x1bW5bXSwgc3RyaW5nW11dKSA9PiB7XG4gICAgICAgIGNvbnN0IFtjb2x1bW5zLCBoaWRkZW5Db2x1bW5zXSA9IHZhbHVlcztcbiAgICAgICAgdGhpcy5faGlkZGVuQ29sdW1ucyA9IGhpZGRlbkNvbHVtbnM7XG4gICAgICAgIHRoaXMuY29sdW1ucyA9IEFycmF5VXRpbC5mbGF0dGVuKGNvbHVtbnMsICdjb2x1bW5zJywgdHJ1ZSkuZmlsdGVyKFxuICAgICAgICAgIChfKSA9PiB0aGlzLl9oaWRkZW5Db2x1bW5zLmluZGV4T2YoXy5uYW1lKSA8IDBcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLl9zdmMuZGlzcGxheURhdGEucGlwZShcbiAgICAgIHRha2VXaGlsZSgoXykgPT4gdGhpcy5fYWxpdmUpXG4gICAgKS5zdWJzY3JpYmUoKF8pID0+IHtcbiAgICAgIHRoaXMuZGF0YSA9IF87XG4gICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB0aGlzLnZpZXdwb3J0Py5jaGVja1ZpZXdwb3J0U2l6ZSgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fc3ZjLmRpY3QucGlwZSh0YWtlV2hpbGUoKF8pID0+IHRoaXMuX2FsaXZlKSkuc3Vic2NyaWJlKChfKSA9PiB7XG4gICAgICB0aGlzLmRpY3QgPSBfO1xuICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fc3ZjLnNjcm9sbEluZGV4XG4gICAgICAucGlwZSh0YWtlV2hpbGUoKCkgPT4gdGhpcy5fYWxpdmUpKVxuICAgICAgLnN1YnNjcmliZShhc3luYyAoaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMudmlld3BvcnQpIHtcbiAgICAgICAgICB0aGlzLnZpZXdwb3J0LnNjcm9sbFRvSW5kZXgoaW5kZXgsICdhdXRvJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYC50YWJsZS1yb3dbZGF0YS1yb3c9XCIke2luZGV4fVwiXWApIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgIHJvdz8uc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuX3N2Yy5hY3RpdmVSb3dcbiAgICAgIC5waXBlKHRha2VXaGlsZSgoXykgPT4gdGhpcy5fYWxpdmUpKVxuICAgICAgLnN1YnNjcmliZShhc3luYyAoXykgPT4ge1xuICAgICAgICB0aGlzLmFjdGl2ZVJvdyA9IF87XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICAgIHRoaXMuYWRkUmVzaXplT2JzZXJ2ZXIoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2FsaXZlID0gZmFsc2U7XG4gICAgdGhpcy5yZW1vdmVSZXNpemVPYnNlcnZlcigpXG4gIH1cblxuICBnZXRBZ2dyZWdhdGVWYWx1ZShjb2x1bW46IFRhYmxlQ29sdW1uKTogbnVtYmVyIHtcbiAgICBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSA9PT0gQWdncmVnYXRpb25UeXBlLnN1bSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0U3VtKGNvbHVtbi5uYW1lKTtcbiAgICB9XG4gICAgaWYgKGNvbHVtbi5hZ2dyZWdhdGUgPT09IEFnZ3JlZ2F0aW9uVHlwZS5hdmcpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFN1bShjb2x1bW4ubmFtZSkgLyB0aGlzLmRhdGEubGVuZ3RoO1xuICAgIH1cbiAgICBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSA9PT0gQWdncmVnYXRpb25UeXBlLm1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TWluKGNvbHVtbi5uYW1lKTtcbiAgICB9XG4gICAgaWYgKGNvbHVtbi5hZ2dyZWdhdGUgPT09IEFnZ3JlZ2F0aW9uVHlwZS5tYXgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldE1heChjb2x1bW4ubmFtZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0QWdncmVnYXRlVGV4dChjb2x1bW46IFRhYmxlQ29sdW1uKTogc3RyaW5nIHtcbiAgICBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSA9PT0gQWdncmVnYXRpb25UeXBlLnN1bSkge1xuICAgICAgcmV0dXJuICdzdW0nO1xuICAgIH1cbiAgICBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSA9PT0gQWdncmVnYXRpb25UeXBlLmF2Zykge1xuICAgICAgcmV0dXJuICdhdmcnO1xuICAgIH1cbiAgICBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSA9PT0gQWdncmVnYXRpb25UeXBlLm1pbikge1xuICAgICAgcmV0dXJuICdtaW4nO1xuICAgIH1cbiAgICBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSA9PT0gQWdncmVnYXRpb25UeXBlLm1heCkge1xuICAgICAgcmV0dXJuICdtYXgnO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICB0cmFja1JvdyhpbmRleDogbnVtYmVyLCByb3c6IFQpOiBhbnkge1xuICAgIGlmIChyb3dbJ2lkJ10pIHtcbiAgICAgIHJldHVybiByb3dbJ2lkJ107XG4gICAgfVxuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIHRyYWNrQ29sdW1ucyhpbmRleDogbnVtYmVyLCBjb2x1bW46IFRhYmxlQ29sdW1uKTogYW55IHtcbiAgICByZXR1cm4gY29sdW1uLm5hbWU7XG4gIH1cblxuICBwcml2YXRlIGFkZFJlc2l6ZU9ic2VydmVyKCkge1xuICAgIHRoaXMuX29icyA9IG5ldyBSZXNpemVPYnNlcnZlcigoXykgPT4ge1xuICAgICAgdGhpcy52aWV3cG9ydD8uY2hlY2tWaWV3cG9ydFNpemUoKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX29icy5vYnNlcnZlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZVJlc2l6ZU9ic2VydmVyKCkge1xuICAgIHRoaXMuX29icy51bm9ic2VydmUodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICB0aGlzLl9vYnMuZGlzY29ubmVjdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTdW0oY29sdW1uTmFtZSkge1xuICAgIHJldHVybiB0aGlzLmRhdGE/LnJlZHVjZSgoYWNjdW0sIGN1cnJlbnQpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9IHBhcnNlRmxvYXQoY3VycmVudFtjb2x1bW5OYW1lXSk7XG4gICAgICByZXR1cm4gYWNjdW0gKyAoaXNOYU4odmFsKSA/IDAgOiB2YWwpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNaW4oY29sdW1uTmFtZSkge1xuICAgIHJldHVybiB0aGlzLmRhdGE/LnJlZHVjZShcbiAgICAgIChhY2N1bSwgY3VycmVudCkgPT5cbiAgICAgICAgYWNjdW0gIT0gbnVsbCAmJiBhY2N1bSA8PSBjdXJyZW50W2NvbHVtbk5hbWVdXG4gICAgICAgICAgPyBhY2N1bVxuICAgICAgICAgIDogY3VycmVudFtjb2x1bW5OYW1lXSxcbiAgICAgIG51bGxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNYXgoY29sdW1uTmFtZSkge1xuICAgIHJldHVybiB0aGlzLmRhdGE/LnJlZHVjZShcbiAgICAgIChhY2N1bSwgY3VycmVudCkgPT5cbiAgICAgICAgYWNjdW0gIT0gbnVsbCAmJiBhY2N1bSA+PSBjdXJyZW50W2NvbHVtbk5hbWVdXG4gICAgICAgICAgPyBhY2N1bVxuICAgICAgICAgIDogY3VycmVudFtjb2x1bW5OYW1lXSxcbiAgICAgIG51bGxcbiAgICApO1xuICB9XG59XG4iLCI8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0ICpuZ0lmPVwidmlydHVhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGFibGUtYm9keS1jb250YWluZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbVNpemVdPVwiMjhcIj5cbiAgPG5nLWNvbnRhaW5lciAqY2RrVmlydHVhbEZvcj1cImxldCByb3cgb2YgZGF0YTt0ZW1wbGF0ZUNhY2hlU2l6ZTogMDsgbGV0IHJvd0luZGV4ID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrUm93O1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJib2R5VGVtcGxhdGU7IGNvbnRleHQ6IHtyb3c6IHJvdywgcm93SW5kZXg6IHJvd0luZGV4fVwiPjwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuPGRpdiAqbmdJZj1cIiF2aXJ0dWFsXCJcbiAgICAgY2xhc3M9XCJ0YWJsZS1ib2R5LWNvbnRhaW5lclwiPlxuICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByb3cgb2YgZGF0YTsgbGV0IHJvd0luZGV4ID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrUm93O1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJib2R5VGVtcGxhdGU7IGNvbnRleHQ6IHtyb3c6IHJvdywgcm93SW5kZXg6IHJvd0luZGV4fVwiPjwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFnZ3JlZ2F0ZVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhZ2dUZW1wbGF0ZTtcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNib2R5VGVtcGxhdGUgbGV0LXJvdz1cInJvd1wiIGxldC1yb3dJbmRleD1cInJvd0luZGV4XCI+XG4gIDxkaXYgY2xhc3M9XCJ0YWJsZS1yb3dcIlxuICAgICAgIChjbGljayk9XCJzZXRBY3RpdmVSb3cocm93LCAkZXZlbnQpXCJcbiAgICAgICBbYXR0ci5kYXRhLXJvd109XCJyb3dJbmRleFwiXG4gICAgICAgW2NsYXNzLnRhYmxlLXJvd19vZGRdPVwicm93SW5kZXggJSAyID09PSAxXCJcbiAgICAgICBbbmdDbGFzc109XCJyb3dDbGFzcyA/IHJvd0NsYXNzKHJvdywgcm93SW5kZXgpIDogJydcIlxuICAgICAgIFtjbGFzcy50YWJsZS1yb3dfc2VsZWN0ZWRdPVwic2VsZWN0ZWRSb3dzICYmIHNlbGVjdGVkUm93cy5pbmRleE9mKHJvdykgPj0gMFwiXG4gICAgICAgW3N0eWxlLmZsZXgtZ3Jvd109XCJ0b3RhbEZsZXhcIlxuICAgICAgIFtzdHlsZS5mbGV4LWJhc2lzLnB4XT1cInRvdGFsV2lkdGhcIlxuICAgICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwidG90YWxXaWR0aFwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yb3dfbG9ja2VkXCJcbiAgICAgICAgICpuZ0lmPVwibG9ja2VkLmxlbmd0aCA+IDBcIlxuICAgICAgICAgW3N0eWxlLmZsZXgtZ3Jvd109XCJsb2NrZWRGbGV4XCJcbiAgICAgICAgIFtzdHlsZS5mbGV4LWJhc2lzLnB4XT1cImxvY2tlZFdpZHRoXCJcbiAgICAgICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwibG9ja2VkV2lkdGhcIlxuICAgICAgICAgW3N0eWxlLnpJbmRleF09XCJyb3cgPT09IGFjdGl2ZVJvdyA/IDIgOiAxXCI+XG4gICAgICA8dGV0YS1zZWxlY3Rpb24tY2VsbCAqbmdJZj1cInNlbGVjdFR5cGUgPT09IHNlbGVjdFR5cGVFbnVtLmNoZWNrQm94ICYmIGxvY2tlZC5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMjhweDtcIj48L3RldGEtc2VsZWN0aW9uLWNlbGw+XG4gICAgICA8dGV0YS1jZWxsXG4gICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgbG9ja2VkOyBsZXQgY29sSW5kZXggPSBpbmRleDsgdHJhY2tCeTogdHJhY2tDb2x1bW5zO1wiXG4gICAgICAgIFthdHRyLmRhdGEtcm93XT1cInJvd0luZGV4XCJcbiAgICAgICAgW2F0dHIuZGF0YS1jb2x1bW5dPVwiY29sdW1uLm5hbWVcIlxuICAgICAgICBbY29sdW1uXT1cImNvbHVtblwiXG4gICAgICAgIFtmaWx0ZXJPcHRpb25zXT1cImRpY3Q/ZGljdFtjb2x1bW4ubmFtZV06W11cIlxuICAgICAgICBbZGljdF09XCJkaWN0XCJcbiAgICAgICAgW3Jvd109XCJyb3dcIlxuICAgICAgICBbbmdDbGFzc109XCJjb2x1bW4uY2VsbENsYXNzXCJcbiAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiMFwiXG4gICAgICAgIFtzdHlsZS5mbGV4LWdyb3ddPVwiY29sdW1uLmZsZXhcIlxuICAgICAgICBbc3R5bGUuZmxleC1iYXNpcy5weF09XCJjb2x1bW4ud2lkdGhcIlxuICAgICAgPjwvdGV0YS1jZWxsPlxuICAgIDwvZGl2PlxuICAgIDx0ZXRhLXNlbGVjdGlvbi1jZWxsICpuZ0lmPVwic2VsZWN0VHlwZSA9PT0gc2VsZWN0VHlwZUVudW0uY2hlY2tCb3ggJiYgbG9ja2VkLmxlbmd0aCA8IDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3ddPVwicm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAyOHB4O1wiPjwvdGV0YS1zZWxlY3Rpb24tY2VsbD5cbiAgICA8dGV0YS1jZWxsXG4gICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIHVubG9ja2VkOyBsZXQgY29sSW5kZXggPSBpbmRleDsgdHJhY2tCeTogdHJhY2tDb2x1bW5zO1wiXG4gICAgICBbYXR0ci5kYXRhLXJvd109XCJyb3dJbmRleFwiXG4gICAgICBbYXR0ci5kYXRhLWNvbHVtbl09XCJjb2x1bW4ubmFtZVwiXG4gICAgICBbY29sdW1uXT1cImNvbHVtblwiXG4gICAgICBbZmlsdGVyT3B0aW9uc109XCJkaWN0P2RpY3RbY29sdW1uLm5hbWVdOltdXCJcbiAgICAgIFtkaWN0XT1cImRpY3RcIlxuICAgICAgW3Jvd109XCJyb3dcIlxuICAgICAgW25nQ2xhc3NdPVwiY29sdW1uLmNlbGxDbGFzc1wiXG4gICAgICBbYXR0ci50YWJpbmRleF09XCIwXCJcbiAgICAgIFtzdHlsZS5mbGV4LWdyb3ddPVwiY29sdW1uLmZsZXhcIlxuICAgICAgW3N0eWxlLmZsZXgtYmFzaXMucHhdPVwiY29sdW1uLndpZHRoXCJcbiAgICA+PC90ZXRhLWNlbGw+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNhZ2dUZW1wbGF0ZT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvY2FsZSB8IGFzeW5jIGFzIGxvY1wiPlxuICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yb3dcIlxuICAgICAgICAgKm5nSWY9XCJhZ2dyZWdhdGVcIlxuICAgICAgICAgW2NsYXNzLnRhYmxlLXJvd192aXJ0dWFsXT1cInZpcnR1YWxcIlxuICAgICAgICAgW3N0eWxlLmZsZXgtZ3Jvd109XCJ0b3RhbEZsZXhcIlxuICAgICAgICAgW3N0eWxlLmZsZXgtYmFzaXMucHhdPVwidG90YWxXaWR0aFwiXG4gICAgICAgICBbc3R5bGUubWluLXdpZHRoLnB4XT1cInRvdGFsV2lkdGhcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yb3dfbG9ja2VkXCJcbiAgICAgICAgICAgKm5nSWY9XCJsb2NrZWQubGVuZ3RoID4gMFwiXG4gICAgICAgICAgIFtzdHlsZS5mbGV4LWdyb3ddPVwibG9ja2VkRmxleFwiXG4gICAgICAgICAgIFtzdHlsZS5mbGV4LWJhc2lzLnB4XT1cImxvY2tlZFdpZHRoXCJcbiAgICAgICAgICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJsb2NrZWRXaWR0aFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2VsbCBhbGlnbi1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiXG4gICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMjhweDtcIlxuICAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0VHlwZSA9PT0gc2VsZWN0VHlwZUVudW0uY2hlY2tCb3ggJiYgbG9ja2VkLmxlbmd0aCA8IDFcIj5cbiAgICAgICAgICA8dGV0YS1pY29uIFtuYW1lXT1cIidzdW1Db2xvcidcIj48L3RldGEtaWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjZWxsIGNlbGwtY29tcG9uZW50XCJcbiAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGxvY2tlZDsgbGV0IGNvbEluZGV4ID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQ29sdW1ucztcIlxuICAgICAgICAgICAgIFthdHRyLmRhdGEtY29sdW1uXT1cImNvbHVtbi5uYW1lXCJcbiAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW4uY2VsbENsYXNzXCJcbiAgICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCIwXCJcbiAgICAgICAgICAgICBbc3R5bGUuZmxleC1ncm93XT1cImNvbHVtbi5mbGV4XCJcbiAgICAgICAgICAgICBbc3R5bGUuZmxleC1iYXNpcy5weF09XCJjb2x1bW4ud2lkdGhcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjZWxsLXRleHQgY2VsbC10ZXh0X251bWVyaWMgZm9udC10aXRsZS0zXCI+XG4gICAgICAgICAge3tsb2NbZ2V0QWdncmVnYXRlVGV4dChjb2x1bW4pXX19OlxuICAgICAgICAgIHt7Z2V0QWdncmVnYXRlVmFsdWUoY29sdW1uKSB8IHRldGFOdW1iZXIgOiAyfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNlbGwgYWxpZ24tY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIlxuICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAyOHB4O1wiXG4gICAgICAgICAgICpuZ0lmPVwic2VsZWN0VHlwZSA9PT0gc2VsZWN0VHlwZUVudW0uY2hlY2tCb3ggJiYgbG9ja2VkLmxlbmd0aCA8IDFcIj5cbiAgICAgICAgPHRldGEtaWNvbiBbbmFtZV09XCInc3VtQ29sb3InXCI+PC90ZXRhLWljb24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjZWxsIGNlbGwtY29tcG9uZW50XCJcbiAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiB1bmxvY2tlZDsgbGV0IGNvbEluZGV4ID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQ29sdW1ucztcIlxuICAgICAgICAgICBbYXR0ci5kYXRhLWNvbHVtbl09XCJjb2x1bW4ubmFtZVwiXG4gICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbi5jZWxsQ2xhc3NcIlxuICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCIwXCJcbiAgICAgICAgICAgW3N0eWxlLmZsZXgtZ3Jvd109XCJjb2x1bW4uZmxleFwiXG4gICAgICAgICAgIFtzdHlsZS5mbGV4LWJhc2lzLnB4XT1cImNvbHVtbi53aWR0aFwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjZWxsLXRleHQgY2VsbC10ZXh0X251bWVyaWMgZm9udC10aXRsZS0zXCI+XG4gICAgICAgIHt7bG9jW2dldEFnZ3JlZ2F0ZVRleHQoY29sdW1uKV19fTpcbiAgICAgICAge3tnZXRBZ2dyZWdhdGVWYWx1ZShjb2x1bW4pIHwgdGV0YU51bWJlciA6IDJ9fVxuICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
195
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtYm9keS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3RhYmxlL3RhYmxlLWJvZHkvdGFibGUtYm9keS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3RhYmxlL3RhYmxlLWJvZHkvdGFibGUtYm9keS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxXQUFXLEVBQ1gsS0FBSyxFQUlMLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUl2QixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDekMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxhQUFhLEVBQWEsTUFBTSxNQUFNLENBQUM7QUFDL0MsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBRzFELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7OztBQVVoRSxNQUFNLE9BQU8sa0JBQWtCO0lBc0Q3QixZQUFvQixJQUFxQixFQUNyQixXQUF1QixFQUN2QixPQUEwQixFQUMxQixJQUF1QjtRQUh2QixTQUFJLEdBQUosSUFBSSxDQUFpQjtRQUNyQixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUN2QixZQUFPLEdBQVAsT0FBTyxDQUFtQjtRQUMxQixTQUFJLEdBQUosSUFBSSxDQUFtQjtRQXREbEMsaUJBQVksR0FBUSxFQUFFLENBQUM7UUFTa0IsbUJBQWMsR0FBRyxJQUFJLENBQUM7UUFXeEUsV0FBTSxHQUFrQixFQUFFLENBQUM7UUFDM0IsYUFBUSxHQUFrQixFQUFFLENBQUM7UUFDN0IsbUJBQWMs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RUFDekIsSUFBSSxDQUNMLENBQUM7SUFDSixDQUFDOzsrR0F2TVUsa0JBQWtCO21HQUFsQixrQkFBa0Isb2FBVWxCLHdCQUF3QixnREN6Q3JDLGtzS0F3SEE7MkZEekZhLGtCQUFrQjtrQkFOOUIsU0FBUzsrQkFDRSxpQkFBaUIsbUJBR1YsdUJBQXVCLENBQUMsTUFBTTs0TEFHdEMsT0FBTztzQkFBZixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNnRCxRQUFRO3NCQUE3RCxTQUFTO3VCQUFDLHdCQUF3QixFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQztnQkFFRixjQUFjO3NCQUEvRCxXQUFXO3VCQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LCBFbGVtZW50UmVmLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBUeXBlLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtUYWJsZUNvbHVtbn0gZnJvbSAnLi4vY29udHJhY3QvdGFibGUtY29sdW1uJztcbmltcG9ydCB7VGFibGVTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlL3RhYmxlLnNlcnZpY2UnO1xuaW1wb3J0IHtEZXRhaWxDb21wb25lbnRCYXNlfSBmcm9tICcuLi9iYXNlL2RldGFpbC1jb21wb25lbnQtYmFzZSc7XG5pbXBvcnQge3Rha2VXaGlsZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtTZWxlY3RUeXBlfSBmcm9tICcuLi9lbnVtL3NlbGVjdC10eXBlLmVudW0nO1xuaW1wb3J0IHtjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7QXJyYXlVdGlsfSBmcm9tICcuLi8uLi8uLi9jb21tb24vdXRpbC9hcnJheS11dGlsJztcbmltcG9ydCB7SURpY3Rpb25hcnl9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9jb250cmFjdC9pLWRpY3Rpb25hcnknO1xuaW1wb3J0IHtJSWROYW1lfSBmcm9tICcuLi8uLi8uLi9jb21tb24vY29udHJhY3QvaS1pZC1uYW1lJztcbmltcG9ydCB7QWdncmVnYXRpb25UeXBlfSBmcm9tICcuLi9lbnVtL2FnZ3JlZ2F0aW9uLXR5cGUuZW51bSc7XG5pbXBvcnQge0Nka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5pbXBvcnQge1RldGFMb2NhbGlzYXRpb259IGZyb20gJy4uLy4uLy4uL2xvY2FsZS90ZXRhLWxvY2FsaXNhdGlvbic7XG5pbXBvcnQge1RldGFDb25maWdTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9sb2NhbGUvdGV0YS1jb25maWcuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RldGEtdGFibGUtYm9keScsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS1ib2R5LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUtYm9keS5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVCb2R5Q29tcG9uZW50PFQ+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSB2aXJ0dWFsOiBib29sZWFuO1xuICBASW5wdXQoKSBhY3RpdmVSb3c6IFQ7XG4gIEBJbnB1dCgpIHNlbGVjdGVkUm93czogVFtdID0gW107XG4gIEBJbnB1dCgpIGFkZGl0aW9uYWxDb21wb25lbnQ6IFR5cGU8RGV0YWlsQ29tcG9uZW50QmFzZTxUPj47XG4gIEBJbnB1dCgpIGFnZ3JlZ2F0ZTogYm9vbGVhbjtcbiAgQElucHV0KCkgc2VsZWN0VHlwZTogU2VsZWN0VHlwZTtcbiAgQElucHV0KCkgcm93Q2xhc3M6IChyb3c6IFQsIGluZGV4PzogbnVtYmVyKSA9PiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRyYWNrUm93OiAoaW5kZXg6IG51bWJlciwgcm93OiBUKSA9PiBhbnk7XG4gIEBJbnB1dCgpIHRyYWNrQ29sdW1uczogKGluZGV4OiBudW1iZXIsIGNvbHVtbjogVGFibGVDb2x1bW4pID0+IGFueTtcbiAgQFZpZXdDaGlsZChDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQsIHtzdGF0aWM6IGZhbHNlfSkgdmlld3BvcnQ6IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydDtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRhYmxlLWJvZHknKSBwcml2YXRlIHJlYWRvbmx5IHRhYmxlQm9keUNsYXNzID0gdHJ1ZTtcblxuICBzZXQgZGF0YShkYXRhOiBUW10pIHtcbiAgICB0aGlzLl9kYXRhID0gZGF0YTtcbiAgfVxuXG4gIGdldCBkYXRhKCkge1xuICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICB9XG5cbiAgZGljdDogSURpY3Rpb25hcnk8SUlkTmFtZTxhbnk+W10+O1xuICBsb2NrZWQ6IFRhYmxlQ29sdW1uW10gPSBbXTtcbiAgdW5sb2NrZWQ6IFRhYmxlQ29sdW1uW10gPSBbXTtcbiAgc2VsZWN0VHlwZUVudW0gPSBTZWxlY3RUeXBlO1xuICBsb2NrZWRGbGV4OiBudW1iZXI7XG4gIGxvY2tlZFdpZHRoOiBudW1iZXI7XG4gIHRvdGFsRmxleDogbnVtYmVyO1xuICB0b3RhbFdpZHRoOiBudW1iZXI7XG5cbiAgcHJpdmF0ZSBfY29sdW1uczogVGFibGVDb2x1bW5bXSA9IFtdO1xuICBwcml2YXRlIF9hbGl2ZSA9IHRydWU7XG4gIHByaXZhdGUgX2RhdGE6IFRbXTtcbiAgcHJpdmF0ZSBfaGlkZGVuQ29sdW1uczogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSBfb2JzOiBSZXNpemVPYnNlcnZlcjtcblxuICBzZXQgY29sdW1ucyhjb2x1bW5zOiBUYWJsZUNvbHVtbltdKSB7XG4gICAgdGhpcy5fY29sdW1ucyA9IGNvbHVtbnM7XG4gICAgdGhpcy5sb2NrZWQgPSB0aGlzLl9jb2x1bW5zPy5maWx0ZXIoKF8pID0+IF8ubG9ja2VkID09PSB0cnVlKTtcbiAgICB0aGlzLnVubG9ja2VkID0gdGhpcy5fY29sdW1ucz8uZmlsdGVyKChfKSA9PiBfLmxvY2tlZCA9PT0gZmFsc2UpO1xuICAgIGNvbnN0IHN0YXJ0V2lkdGggPSB0aGlzLnNlbGVjdFR5cGUgPT09IFNlbGVjdFR5cGUuY2hlY2tCb3ggPyAyOCA6IDA7XG4gICAgdGhpcy5sb2NrZWRGbGV4ID0gdGhpcy5sb2NrZWQucmVkdWNlKChwcmV2OiBudW1iZXIsIGN1cnI6IFRhYmxlQ29sdW1uKSA9PiBwcmV2ICsgY3Vyci5mbGV4LCAwKTtcbiAgICB0aGlzLmxvY2tlZFdpZHRoID0gdGhpcy5sb2NrZWQucmVkdWNlKChwcmV2OiBudW1iZXIsIGN1cnI6IFRhYmxlQ29sdW1uKSA9PiBwcmV2ICsgY3Vyci53aWR0aCwgc3RhcnRXaWR0aCk7XG4gICAgdGhpcy50b3RhbEZsZXggPSB0aGlzLl9jb2x1bW5zLnJlZHVjZSgocHJldjogbnVtYmVyLCBjdXJyOiBUYWJsZUNvbHVtbikgPT4gcHJldiArIGN1cnIuZmxleCwgMCk7XG4gICAgdGhpcy50b3RhbFdpZHRoID0gdGhpcy5fY29sdW1ucy5yZWR1Y2UoKHByZXY6IG51bWJlciwgY3VycjogVGFibGVDb2x1bW4pID0+IHByZXYgKyBjdXJyLndpZHRoLCBzdGFydFdpZHRoKTtcbiAgfVxuXG4gIGdldCBjb2x1bW5zKCk6IFRhYmxlQ29sdW1uW10ge1xuICAgIHJldHVybiB0aGlzLl9jb2x1bW5zO1xuICB9XG5cbiAgbG9jYWxlOiBPYnNlcnZhYmxlPFRldGFMb2NhbGlzYXRpb24+O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX3N2YzogVGFibGVTZXJ2aWNlPFQ+LFxuICAgICAgICAgICAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICAgICAgICBwcml2YXRlIF9jb25maWc6IFRldGFDb25maWdTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9jZHI6IENoYW5nZURldGVjdG9yUmVmKSB7XG5cbiAgfVxuXG4gIHNldEFjdGl2ZVJvdyhyb3c6IFQsIGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKCFldmVudC5zaGlmdEtleSAmJiAhZXZlbnQuY3RybEtleSkge1xuICAgICAgdGhpcy5fc3ZjLnNldEFjdGl2ZVJvdyhyb3cpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMubG9jYWxlID0gdGhpcy5fY29uZmlnLmxvY2FsZTtcbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLl9zdmMuY29sdW1ucywgdGhpcy5fc3ZjLmhpZGRlbkNvbHVtbnNdKVxuICAgICAgLnBpcGUodGFrZVdoaWxlKChfKSA9PiB0aGlzLl9hbGl2ZSkpXG4gICAgICAuc3Vic2NyaWJlKCh2YWx1ZXM6IFtUYWJsZUNvbHVtbltdLCBzdHJpbmdbXV0pID0+IHtcbiAgICAgICAgY29uc3QgW2NvbHVtbnMsIGhpZGRlbkNvbHVtbnNdID0gdmFsdWVzO1xuICAgICAgICB0aGlzLl9oaWRkZW5Db2x1bW5zID0gaGlkZGVuQ29sdW1ucztcbiAgICAgICAgdGhpcy5jb2x1bW5zID0gQXJyYXlVdGlsLmZsYXR0ZW4oY29sdW1ucywgJ2NvbHVtbnMnLCB0cnVlKS5maWx0ZXIoXG4gICAgICAgICAgKF8pID0+IHRoaXMuX2hpZGRlbkNvbHVtbnMuaW5kZXhPZihfLm5hbWUpIDwgMFxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuX3N2Yy5kaXNwbGF5RGF0YS5waXBlKFxuICAgICAgdGFrZVdoaWxlKChfKSA9PiB0aGlzLl9hbGl2ZSlcbiAgICApLnN1YnNjcmliZSgoXykgPT4ge1xuICAgICAgdGhpcy5kYXRhID0gXztcbiAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHRoaXMudmlld3BvcnQ/LmNoZWNrVmlld3BvcnRTaXplKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9zdmMuZGljdC5waXBlKHRha2VXaGlsZSgoXykgPT4gdGhpcy5fYWxpdmUpKS5zdWJzY3JpYmUoKF8pID0+IHtcbiAgICAgIHRoaXMuZGljdCA9IF87XG4gICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9zdmMuc2Nyb2xsSW5kZXhcbiAgICAgIC5waXBlKHRha2VXaGlsZSgoKSA9PiB0aGlzLl9hbGl2ZSkpXG4gICAgICAuc3Vic2NyaWJlKGFzeW5jIChpbmRleCkgPT4ge1xuICAgICAgICBpZiAodGhpcy52aWV3cG9ydCkge1xuICAgICAgICAgIHRoaXMudmlld3BvcnQuc2Nyb2xsVG9JbmRleChpbmRleCwgJ2F1dG8nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCByb3cgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihgLnRhYmxlLXJvd1tkYXRhLXJvdz1cIiR7aW5kZXh9XCJdYCkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgcm93Py5zY3JvbGxJbnRvVmlldygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5fc3ZjLmFjdGl2ZVJvd1xuICAgICAgLnBpcGUodGFrZVdoaWxlKChfKSA9PiB0aGlzLl9hbGl2ZSkpXG4gICAgICAuc3Vic2NyaWJlKGFzeW5jIChfKSA9PiB7XG4gICAgICAgIHRoaXMuYWN0aXZlUm93ID0gXztcbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gICAgdGhpcy5hZGRSZXNpemVPYnNlcnZlcigpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fYWxpdmUgPSBmYWxzZTtcbiAgICB0aGlzLnJlbW92ZVJlc2l6ZU9ic2VydmVyKClcbiAgfVxuXG4gIGdldEFnZ3JlZ2F0ZVZhbHVlKGNvbHVtbjogVGFibGVDb2x1bW4pOiBudW1iZXIge1xuICAgIGlmIChjb2x1bW4uYWdncmVnYXRlID09PSBBZ2dyZWdhdGlvblR5cGUuc3VtKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRTdW0oY29sdW1uLm5hbWUpO1xuICAgIH1cbiAgICBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSA9PT0gQWdncmVnYXRpb25UeXBlLmF2Zykge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0U3VtKGNvbHVtbi5uYW1lKSAvIHRoaXMuZGF0YS5sZW5ndGg7XG4gICAgfVxuICAgIGlmIChjb2x1bW4uYWdncmVnYXRlID09PSBBZ2dyZWdhdGlvblR5cGUubWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRNaW4oY29sdW1uLm5hbWUpO1xuICAgIH1cbiAgICBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSA9PT0gQWdncmVnYXRpb25UeXBlLm1heCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TWF4KGNvbHVtbi5uYW1lKTtcbiAgICB9XG4gIH1cblxuICBnZXRBZ2dyZWdhdGVUZXh0KGNvbHVtbjogVGFibGVDb2x1bW4pOiBzdHJpbmcge1xuICAgIGlmIChjb2x1bW4uYWdncmVnYXRlID09PSBBZ2dyZWdhdGlvblR5cGUuc3VtKSB7XG4gICAgICByZXR1cm4gJ3N1bSc7XG4gICAgfVxuICAgIGlmIChjb2x1bW4uYWdncmVnYXRlID09PSBBZ2dyZWdhdGlvblR5cGUuYXZnKSB7XG4gICAgICByZXR1cm4gJ2F2Zyc7XG4gICAgfVxuICAgIGlmIChjb2x1bW4uYWdncmVnYXRlID09PSBBZ2dyZWdhdGlvblR5cGUubWluKSB7XG4gICAgICByZXR1cm4gJ21pbic7XG4gICAgfVxuICAgIGlmIChjb2x1bW4uYWdncmVnYXRlID09PSBBZ2dyZWdhdGlvblR5cGUubWF4KSB7XG4gICAgICByZXR1cm4gJ21heCc7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIC8vIHRyYWNrUm93KGluZGV4OiBudW1iZXIsIHJvdzogVCk6IGFueSB7XG4gIC8vICAgaWYgKHJvd1snaWQnXSkge1xuICAvLyAgICAgcmV0dXJuIHJvd1snaWQnXTtcbiAgLy8gICB9XG4gIC8vICAgcmV0dXJuIGluZGV4O1xuICAvLyB9XG4gIC8vXG4gIC8vIHRyYWNrQ29sdW1ucyhpbmRleDogbnVtYmVyLCBjb2x1bW46IFRhYmxlQ29sdW1uKTogYW55IHtcbiAgLy8gICByZXR1cm4gY29sdW1uLm5hbWU7XG4gIC8vIH1cblxuICBwcml2YXRlIGFkZFJlc2l6ZU9ic2VydmVyKCkge1xuICAgIHRoaXMuX29icyA9IG5ldyBSZXNpemVPYnNlcnZlcigoXykgPT4ge1xuICAgICAgdGhpcy52aWV3cG9ydD8uY2hlY2tWaWV3cG9ydFNpemUoKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX29icy5vYnNlcnZlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZVJlc2l6ZU9ic2VydmVyKCkge1xuICAgIHRoaXMuX29icy51bm9ic2VydmUodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICB0aGlzLl9vYnMuZGlzY29ubmVjdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTdW0oY29sdW1uTmFtZSkge1xuICAgIHJldHVybiB0aGlzLmRhdGE/LnJlZHVjZSgoYWNjdW0sIGN1cnJlbnQpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9IHBhcnNlRmxvYXQoY3VycmVudFtjb2x1bW5OYW1lXSk7XG4gICAgICByZXR1cm4gYWNjdW0gKyAoaXNOYU4odmFsKSA/IDAgOiB2YWwpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNaW4oY29sdW1uTmFtZSkge1xuICAgIHJldHVybiB0aGlzLmRhdGE/LnJlZHVjZShcbiAgICAgIChhY2N1bSwgY3VycmVudCkgPT5cbiAgICAgICAgYWNjdW0gIT0gbnVsbCAmJiBhY2N1bSA8PSBjdXJyZW50W2NvbHVtbk5hbWVdXG4gICAgICAgICAgPyBhY2N1bVxuICAgICAgICAgIDogY3VycmVudFtjb2x1bW5OYW1lXSxcbiAgICAgIG51bGxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNYXgoY29sdW1uTmFtZSkge1xuICAgIHJldHVybiB0aGlzLmRhdGE/LnJlZHVjZShcbiAgICAgIChhY2N1bSwgY3VycmVudCkgPT5cbiAgICAgICAgYWNjdW0gIT0gbnVsbCAmJiBhY2N1bSA+PSBjdXJyZW50W2NvbHVtbk5hbWVdXG4gICAgICAgICAgPyBhY2N1bVxuICAgICAgICAgIDogY3VycmVudFtjb2x1bW5OYW1lXSxcbiAgICAgIG51bGxcbiAgICApO1xuICB9XG59XG4iLCI8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0ICpuZ0lmPVwidmlydHVhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGFibGUtYm9keS1jb250YWluZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbVNpemVdPVwiMjhcIj5cbiAgPG5nLWNvbnRhaW5lciAqY2RrVmlydHVhbEZvcj1cImxldCByb3cgb2YgZGF0YTt0ZW1wbGF0ZUNhY2hlU2l6ZTogMDsgbGV0IHJvd0luZGV4ID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrUm93O1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJib2R5VGVtcGxhdGU7IGNvbnRleHQ6IHtyb3c6IHJvdywgcm93SW5kZXg6IHJvd0luZGV4fVwiPjwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuPGRpdiAqbmdJZj1cIiF2aXJ0dWFsXCJcbiAgICAgY2xhc3M9XCJ0YWJsZS1ib2R5LWNvbnRhaW5lclwiPlxuICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByb3cgb2YgZGF0YTsgbGV0IHJvd0luZGV4ID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrUm93O1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJib2R5VGVtcGxhdGU7IGNvbnRleHQ6IHtyb3c6IHJvdywgcm93SW5kZXg6IHJvd0luZGV4fVwiPjwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFnZ3JlZ2F0ZVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhZ2dUZW1wbGF0ZTtcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNib2R5VGVtcGxhdGUgbGV0LXJvdz1cInJvd1wiIGxldC1yb3dJbmRleD1cInJvd0luZGV4XCI+XG4gIDxkaXYgY2xhc3M9XCJ0YWJsZS1yb3dcIlxuICAgICAgIChjbGljayk9XCJzZXRBY3RpdmVSb3cocm93LCAkZXZlbnQpXCJcbiAgICAgICBbYXR0ci5kYXRhLXJvd109XCJyb3dJbmRleFwiXG4gICAgICAgW2NsYXNzLnRhYmxlLXJvd19vZGRdPVwicm93SW5kZXggJSAyID09PSAxXCJcbiAgICAgICBbbmdDbGFzc109XCJyb3dDbGFzcyA/IHJvd0NsYXNzKHJvdywgcm93SW5kZXgpIDogJydcIlxuICAgICAgIFtjbGFzcy50YWJsZS1yb3dfc2VsZWN0ZWRdPVwic2VsZWN0ZWRSb3dzICYmIHNlbGVjdGVkUm93cy5pbmRleE9mKHJvdykgPj0gMFwiXG4gICAgICAgW3N0eWxlLmZsZXgtZ3Jvd109XCJ0b3RhbEZsZXhcIlxuICAgICAgIFtzdHlsZS5mbGV4LWJhc2lzLnB4XT1cInRvdGFsV2lkdGhcIlxuICAgICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwidG90YWxXaWR0aFwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yb3dfbG9ja2VkXCJcbiAgICAgICAgICpuZ0lmPVwibG9ja2VkLmxlbmd0aCA+IDBcIlxuICAgICAgICAgW3N0eWxlLmZsZXgtZ3Jvd109XCJsb2NrZWRGbGV4XCJcbiAgICAgICAgIFtzdHlsZS5mbGV4LWJhc2lzLnB4XT1cImxvY2tlZFdpZHRoXCJcbiAgICAgICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwibG9ja2VkV2lkdGhcIlxuICAgICAgICAgW3N0eWxlLnpJbmRleF09XCJyb3cgPT09IGFjdGl2ZVJvdyA/IDIgOiAxXCI+XG4gICAgICA8dGV0YS1zZWxlY3Rpb24tY2VsbCAqbmdJZj1cInNlbGVjdFR5cGUgPT09IHNlbGVjdFR5cGVFbnVtLmNoZWNrQm94ICYmIGxvY2tlZC5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMjhweDtcIj48L3RldGEtc2VsZWN0aW9uLWNlbGw+XG4gICAgICA8dGV0YS1jZWxsXG4gICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgbG9ja2VkOyBsZXQgY29sSW5kZXggPSBpbmRleDsgdHJhY2tCeTogdHJhY2tDb2x1bW5zO1wiXG4gICAgICAgIFthdHRyLmRhdGEtcm93XT1cInJvd0luZGV4XCJcbiAgICAgICAgW2F0dHIuZGF0YS1jb2x1bW5dPVwiY29sdW1uLm5hbWVcIlxuICAgICAgICBbY29sdW1uXT1cImNvbHVtblwiXG4gICAgICAgIFtmaWx0ZXJPcHRpb25zXT1cImRpY3Q/ZGljdFtjb2x1bW4ubmFtZV06W11cIlxuICAgICAgICBbZGljdF09XCJkaWN0XCJcbiAgICAgICAgW3Jvd109XCJyb3dcIlxuICAgICAgICBbbmdDbGFzc109XCJjb2x1bW4uY2VsbENsYXNzXCJcbiAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiMFwiXG4gICAgICAgIFtzdHlsZS5mbGV4LWdyb3ddPVwiY29sdW1uLmZsZXhcIlxuICAgICAgICBbc3R5bGUuZmxleC1iYXNpcy5weF09XCJjb2x1bW4ud2lkdGhcIlxuICAgICAgPjwvdGV0YS1jZWxsPlxuICAgIDwvZGl2PlxuICAgIDx0ZXRhLXNlbGVjdGlvbi1jZWxsICpuZ0lmPVwic2VsZWN0VHlwZSA9PT0gc2VsZWN0VHlwZUVudW0uY2hlY2tCb3ggJiYgbG9ja2VkLmxlbmd0aCA8IDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3ddPVwicm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAyOHB4O1wiPjwvdGV0YS1zZWxlY3Rpb24tY2VsbD5cbiAgICA8dGV0YS1jZWxsXG4gICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIHVubG9ja2VkOyBsZXQgY29sSW5kZXggPSBpbmRleDsgdHJhY2tCeTogdHJhY2tDb2x1bW5zO1wiXG4gICAgICBbYXR0ci5kYXRhLXJvd109XCJyb3dJbmRleFwiXG4gICAgICBbYXR0ci5kYXRhLWNvbHVtbl09XCJjb2x1bW4ubmFtZVwiXG4gICAgICBbY29sdW1uXT1cImNvbHVtblwiXG4gICAgICBbZmlsdGVyT3B0aW9uc109XCJkaWN0P2RpY3RbY29sdW1uLm5hbWVdOltdXCJcbiAgICAgIFtkaWN0XT1cImRpY3RcIlxuICAgICAgW3Jvd109XCJyb3dcIlxuICAgICAgW25nQ2xhc3NdPVwiY29sdW1uLmNlbGxDbGFzc1wiXG4gICAgICBbYXR0ci50YWJpbmRleF09XCIwXCJcbiAgICAgIFtzdHlsZS5mbGV4LWdyb3ddPVwiY29sdW1uLmZsZXhcIlxuICAgICAgW3N0eWxlLmZsZXgtYmFzaXMucHhdPVwiY29sdW1uLndpZHRoXCJcbiAgICA+PC90ZXRhLWNlbGw+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNhZ2dUZW1wbGF0ZT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvY2FsZSB8IGFzeW5jIGFzIGxvY1wiPlxuICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yb3dcIlxuICAgICAgICAgKm5nSWY9XCJhZ2dyZWdhdGVcIlxuICAgICAgICAgW2NsYXNzLnRhYmxlLXJvd192aXJ0dWFsXT1cInZpcnR1YWxcIlxuICAgICAgICAgW3N0eWxlLmZsZXgtZ3Jvd109XCJ0b3RhbEZsZXhcIlxuICAgICAgICAgW3N0eWxlLmZsZXgtYmFzaXMucHhdPVwidG90YWxXaWR0aFwiXG4gICAgICAgICBbc3R5bGUubWluLXdpZHRoLnB4XT1cInRvdGFsV2lkdGhcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yb3dfbG9ja2VkXCJcbiAgICAgICAgICAgKm5nSWY9XCJsb2NrZWQubGVuZ3RoID4gMFwiXG4gICAgICAgICAgIFtzdHlsZS5mbGV4LWdyb3ddPVwibG9ja2VkRmxleFwiXG4gICAgICAgICAgIFtzdHlsZS5mbGV4LWJhc2lzLnB4XT1cImxvY2tlZFdpZHRoXCJcbiAgICAgICAgICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJsb2NrZWRXaWR0aFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2VsbCBhbGlnbi1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiXG4gICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMjhweDtcIlxuICAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0VHlwZSA9PT0gc2VsZWN0VHlwZUVudW0uY2hlY2tCb3ggJiYgbG9ja2VkLmxlbmd0aCA8IDFcIj5cbiAgICAgICAgICA8dGV0YS1pY29uIFtuYW1lXT1cIidzdW1Db2xvcidcIj48L3RldGEtaWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjZWxsIGNlbGwtY29tcG9uZW50XCJcbiAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGxvY2tlZDsgbGV0IGNvbEluZGV4ID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQ29sdW1ucztcIlxuICAgICAgICAgICAgIFthdHRyLmRhdGEtY29sdW1uXT1cImNvbHVtbi5uYW1lXCJcbiAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW4uY2VsbENsYXNzXCJcbiAgICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCIwXCJcbiAgICAgICAgICAgICBbc3R5bGUuZmxleC1ncm93XT1cImNvbHVtbi5mbGV4XCJcbiAgICAgICAgICAgICBbc3R5bGUuZmxleC1iYXNpcy5weF09XCJjb2x1bW4ud2lkdGhcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjZWxsLXRleHQgY2VsbC10ZXh0X251bWVyaWMgZm9udC10aXRsZS0zXCI+XG4gICAgICAgICAge3tsb2NbZ2V0QWdncmVnYXRlVGV4dChjb2x1bW4pXX19OlxuICAgICAgICAgIHt7Z2V0QWdncmVnYXRlVmFsdWUoY29sdW1uKSB8IHRldGFOdW1iZXIgOiAyfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNlbGwgYWxpZ24tY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIlxuICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAyOHB4O1wiXG4gICAgICAgICAgICpuZ0lmPVwic2VsZWN0VHlwZSA9PT0gc2VsZWN0VHlwZUVudW0uY2hlY2tCb3ggJiYgbG9ja2VkLmxlbmd0aCA8IDFcIj5cbiAgICAgICAgPHRldGEtaWNvbiBbbmFtZV09XCInc3VtQ29sb3InXCI+PC90ZXRhLWljb24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjZWxsIGNlbGwtY29tcG9uZW50XCJcbiAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiB1bmxvY2tlZDsgbGV0IGNvbEluZGV4ID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQ29sdW1ucztcIlxuICAgICAgICAgICBbYXR0ci5kYXRhLWNvbHVtbl09XCJjb2x1bW4ubmFtZVwiXG4gICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbi5jZWxsQ2xhc3NcIlxuICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCIwXCJcbiAgICAgICAgICAgW3N0eWxlLmZsZXgtZ3Jvd109XCJjb2x1bW4uZmxleFwiXG4gICAgICAgICAgIFtzdHlsZS5mbGV4LWJhc2lzLnB4XT1cImNvbHVtbi53aWR0aFwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjZWxsLXRleHQgY2VsbC10ZXh0X251bWVyaWMgZm9udC10aXRsZS0zXCI+XG4gICAgICAgIHt7bG9jW2dldEFnZ3JlZ2F0ZVRleHQoY29sdW1uKV19fTpcbiAgICAgICAge3tnZXRBZ2dyZWdhdGVWYWx1ZShjb2x1bW4pIHwgdGV0YU51bWJlciA6IDJ9fVxuICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|