@firestitch/list 18.0.40 → 18.0.42
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/app/classes/data-controller.d.ts +1 -1
- package/app/components/body/row/cell/cell.component.d.ts +6 -5
- package/app/components/body/row/row.component.d.ts +9 -10
- package/app/components/head/head.component.d.ts +2 -1
- package/app/models/row/_base-row.d.ts +30 -0
- package/app/models/row/child-row.d.ts +18 -7
- package/app/models/row/group-footer-row.d.ts +14 -7
- package/app/models/row/group-row.d.ts +21 -11
- package/app/models/row/simple-row.d.ts +8 -3
- package/app/models/row.d.ts +13 -33
- package/esm2022/app/classes/data-controller.mjs +25 -31
- package/esm2022/app/classes/list-controller.mjs +2 -1
- package/esm2022/app/classes/selection-controller.mjs +8 -7
- package/esm2022/app/components/body/row/actions/actions.component.mjs +1 -2
- package/esm2022/app/components/body/row/cell/cell.component.mjs +44 -38
- package/esm2022/app/components/body/row/inline-action/inline-action.component.mjs +1 -2
- package/esm2022/app/components/body/row/menu-action/menu-action.component.mjs +1 -2
- package/esm2022/app/components/body/row/row.component.mjs +54 -59
- package/esm2022/app/components/footer/footer-row/footer-row.component.mjs +3 -3
- package/esm2022/app/components/head/head.component.mjs +4 -3
- package/esm2022/app/components/list/list.component.mjs +3 -3
- package/esm2022/app/directives/draggable-list/draggable-list.directive.mjs +5 -4
- package/esm2022/app/directives/draggable-row/draggable-row.directive.mjs +4 -4
- package/esm2022/app/models/row/_base-row.mjs +43 -0
- package/esm2022/app/models/row/child-row.mjs +14 -10
- package/esm2022/app/models/row/group-footer-row.mjs +11 -7
- package/esm2022/app/models/row/group-row.mjs +16 -20
- package/esm2022/app/models/row/simple-row.mjs +5 -5
- package/esm2022/app/models/row.mjs +26 -82
- package/fesm2022/firestitch-list.mjs +523 -549
- package/fesm2022/firestitch-list.mjs.map +1 -1
- package/package.json +1 -1
- package/app/models/row/base-row.d.ts +0 -13
- package/esm2022/app/models/row/base-row.mjs +0 -25
|
@@ -54,7 +54,7 @@ export declare class DataController {
|
|
|
54
54
|
* @param targetRow
|
|
55
55
|
* @param trackBy
|
|
56
56
|
*/
|
|
57
|
-
replaceData(targetRow: FsListAbstractRow, trackBy
|
|
57
|
+
replaceData(targetRow: FsListAbstractRow, trackBy: FsListTrackByTargetRowFn): boolean;
|
|
58
58
|
/**
|
|
59
59
|
* Update data for specified row
|
|
60
60
|
* @param rows
|
|
@@ -1,22 +1,23 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { OnChanges, OnDestroy, OnInit, SimpleChanges, TemplateRef } from '@angular/core';
|
|
2
2
|
import { Column } from '../../../../models/column.model';
|
|
3
|
+
import { Row } from '../../../../models';
|
|
3
4
|
import * as i0 from "@angular/core";
|
|
4
|
-
export declare class FsCellComponent implements OnInit, OnChanges,
|
|
5
|
+
export declare class FsCellComponent implements OnInit, OnChanges, OnDestroy {
|
|
5
6
|
isColl: boolean;
|
|
6
7
|
role: string;
|
|
7
8
|
column: Column;
|
|
8
|
-
row: any;
|
|
9
9
|
rowIndex: number;
|
|
10
|
+
row: import("@angular/core").InputSignal<Row>;
|
|
10
11
|
cellContext: any;
|
|
11
12
|
cellTemplate: TemplateRef<any>;
|
|
12
13
|
private _destroy$;
|
|
14
|
+
constructor();
|
|
13
15
|
ngOnInit(): void;
|
|
14
|
-
ngDoCheck(): void;
|
|
15
16
|
ngOnChanges(changes: SimpleChanges): void;
|
|
16
17
|
ngOnDestroy(): void;
|
|
17
18
|
private _initCellContext;
|
|
18
19
|
private _initCellTemplate;
|
|
19
20
|
private _listenGroupOpen;
|
|
20
21
|
static ɵfac: i0.ɵɵFactoryDeclaration<FsCellComponent, never>;
|
|
21
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<FsCellComponent, "[fs-cell]", never, { "column": { "alias": "column"; "required": false; }; "
|
|
22
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<FsCellComponent, "[fs-cell]", never, { "column": { "alias": "column"; "required": false; }; "rowIndex": { "alias": "rowIndex"; "required": false; }; "row": { "alias": "row"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
22
23
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ChangeDetectorRef, DoCheck, ElementRef, EventEmitter, KeyValueDiffers, OnDestroy, OnInit, Renderer2 } from '@angular/core';
|
|
1
|
+
import { AfterViewInit, ChangeDetectorRef, DoCheck, ElementRef, EventEmitter, KeyValueDiffers, OnDestroy, OnInit, Renderer2 } from '@angular/core';
|
|
2
2
|
import { MatCheckboxChange } from '@angular/material/checkbox';
|
|
3
3
|
import { ReorderPosition, ReorderStrategy } from '../../../classes/reorder-controller';
|
|
4
4
|
import { SelectionController } from '../../../classes/selection-controller';
|
|
@@ -7,14 +7,14 @@ import { Column } from '../../../models/column.model';
|
|
|
7
7
|
import { Row } from '../../../models/row';
|
|
8
8
|
import { RowAction } from '../../../models/row-action.model';
|
|
9
9
|
import * as i0 from "@angular/core";
|
|
10
|
-
export declare class FsRowComponent implements OnInit, DoCheck, OnDestroy {
|
|
10
|
+
export declare class FsRowComponent implements OnInit, DoCheck, AfterViewInit, OnDestroy {
|
|
11
11
|
el: ElementRef;
|
|
12
12
|
private _cdRef;
|
|
13
13
|
private _differs;
|
|
14
14
|
private _renderer;
|
|
15
15
|
private _draggableList;
|
|
16
16
|
role: string;
|
|
17
|
-
row: Row
|
|
17
|
+
row: import("@angular/core").InputSignal<Row>;
|
|
18
18
|
rowActionsRaw: any[];
|
|
19
19
|
groupActionsRaw: any[];
|
|
20
20
|
hasRowActions: boolean;
|
|
@@ -30,7 +30,6 @@ export declare class FsRowComponent implements OnInit, DoCheck, OnDestroy {
|
|
|
30
30
|
reorderPosition: ReorderPosition | null;
|
|
31
31
|
reorderStrategy: ReorderStrategy | null;
|
|
32
32
|
reorderMultiple: boolean;
|
|
33
|
-
cellRefs: any;
|
|
34
33
|
readonly ReorderPosition: typeof ReorderPosition;
|
|
35
34
|
readonly ReorderStrategy: typeof ReorderStrategy;
|
|
36
35
|
rowActions: RowAction[];
|
|
@@ -43,17 +42,17 @@ export declare class FsRowComponent implements OnInit, DoCheck, OnDestroy {
|
|
|
43
42
|
private _eventListeners;
|
|
44
43
|
private _destroy$;
|
|
45
44
|
constructor(el: ElementRef, _cdRef: ChangeDetectorRef, _differs: KeyValueDiffers, _renderer: Renderer2, _draggableList: FsListDraggableListDirective);
|
|
46
|
-
get isGroupRow(): boolean;
|
|
47
|
-
get isGroupChildRow(): boolean;
|
|
48
|
-
get isGroupFooterRow(): boolean;
|
|
49
45
|
get isDragDisabled(): boolean;
|
|
50
46
|
get isMultipleSelection(): boolean;
|
|
51
|
-
|
|
52
|
-
get dragCellVisible(): boolean;
|
|
47
|
+
rowCustomClass: import("@angular/core").Signal<string>;
|
|
53
48
|
get leftDragDropEnabled(): boolean;
|
|
54
49
|
get rightDragDropEnabled(): boolean;
|
|
55
50
|
ngOnInit(): void;
|
|
56
51
|
ngDoCheck(): void;
|
|
52
|
+
ngAfterViewInit(): void;
|
|
53
|
+
isGroupRow: import("@angular/core").Signal<boolean>;
|
|
54
|
+
isGroupFooterRow: import("@angular/core").Signal<boolean>;
|
|
55
|
+
dragCellVisible: import("@angular/core").Signal<boolean>;
|
|
57
56
|
updateRowActions(): void;
|
|
58
57
|
ngOnDestroy(): void;
|
|
59
58
|
/**
|
|
@@ -81,5 +80,5 @@ export declare class FsRowComponent implements OnInit, DoCheck, OnDestroy {
|
|
|
81
80
|
private _initSelection;
|
|
82
81
|
private _filterActionsByCategories;
|
|
83
82
|
static ɵfac: i0.ɵɵFactoryDeclaration<FsRowComponent, never>;
|
|
84
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<FsRowComponent, "[fs-list-row]", never, { "row": { "alias": "row"; "required": false; }; "rowActionsRaw": { "alias": "rowActionsRaw"; "required": false; }; "groupActionsRaw": { "alias": "groupActionsRaw"; "required": false; }; "hasRowActions": { "alias": "hasRowActions"; "required": false; }; "rowEvents": { "alias": "rowEvents"; "required": false; }; "rowClass": { "alias": "rowClass"; "required": false; }; "restoreMode": { "alias": "restoreMode"; "required": false; }; "rowIndex": { "alias": "rowIndex"; "required": false; }; "columns": { "alias": "columns"; "required": false; }; "selection": { "alias": "selection"; "required": false; }; "rowRemoved": { "alias": "rowRemoved"; "required": false; }; "activeFiltersCount": { "alias": "activeFiltersCount"; "required": false; }; "reorderEnabled": { "alias": "reorderEnabled"; "required": false; }; "reorderPosition": { "alias": "reorderPosition"; "required": false; }; "reorderStrategy": { "alias": "reorderStrategy"; "required": false; }; "reorderMultiple": { "alias": "reorderMultiple"; "required": false; }; }, {}, never, never, true, never>;
|
|
83
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<FsRowComponent, "[fs-list-row]", never, { "row": { "alias": "row"; "required": false; "isSignal": true; }; "rowActionsRaw": { "alias": "rowActionsRaw"; "required": false; }; "groupActionsRaw": { "alias": "groupActionsRaw"; "required": false; }; "hasRowActions": { "alias": "hasRowActions"; "required": false; }; "rowEvents": { "alias": "rowEvents"; "required": false; }; "rowClass": { "alias": "rowClass"; "required": false; }; "restoreMode": { "alias": "restoreMode"; "required": false; }; "rowIndex": { "alias": "rowIndex"; "required": false; }; "columns": { "alias": "columns"; "required": false; }; "selection": { "alias": "selection"; "required": false; }; "rowRemoved": { "alias": "rowRemoved"; "required": false; }; "activeFiltersCount": { "alias": "activeFiltersCount"; "required": false; }; "reorderEnabled": { "alias": "reorderEnabled"; "required": false; }; "reorderPosition": { "alias": "reorderPosition"; "required": false; }; "reorderStrategy": { "alias": "reorderStrategy"; "required": false; }; "reorderMultiple": { "alias": "reorderMultiple"; "required": false; }; }, {}, never, never, true, never>;
|
|
85
84
|
}
|
|
@@ -34,8 +34,9 @@ export declare class FsHeadComponent implements OnInit, OnDestroy {
|
|
|
34
34
|
* Track By for improve change detection
|
|
35
35
|
*
|
|
36
36
|
* @param index
|
|
37
|
+
* @param column
|
|
37
38
|
*/
|
|
38
|
-
trackByFn(index:
|
|
39
|
+
trackByFn(index: number, column: Column): string | number;
|
|
39
40
|
/**
|
|
40
41
|
* Subscribe to sorting change
|
|
41
42
|
*/
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { Observable } from 'rxjs';
|
|
2
|
+
import { RowType } from '../../enums/row-type.enum';
|
|
3
|
+
import { FsListReorderData } from '../../interfaces';
|
|
4
|
+
export interface IBaseRow {
|
|
5
|
+
data: object;
|
|
6
|
+
index: number;
|
|
7
|
+
readyToSwap: boolean;
|
|
8
|
+
actionsUpdated$: Observable<void>;
|
|
9
|
+
updateActions(): void;
|
|
10
|
+
reorderData(): FsListReorderData;
|
|
11
|
+
destroy(): void;
|
|
12
|
+
}
|
|
13
|
+
export declare abstract class BaseRow<T = RowType> implements IBaseRow {
|
|
14
|
+
protected readonly _rowType: T;
|
|
15
|
+
private _index;
|
|
16
|
+
private _readyToSwap;
|
|
17
|
+
private _actionsUpdated$;
|
|
18
|
+
private _data;
|
|
19
|
+
constructor(data?: object);
|
|
20
|
+
get data(): object;
|
|
21
|
+
get type(): T;
|
|
22
|
+
get index(): number;
|
|
23
|
+
set index(value: number);
|
|
24
|
+
get readyToSwap(): boolean;
|
|
25
|
+
set readyToSwap(value: boolean);
|
|
26
|
+
get actionsUpdated$(): Observable<void>;
|
|
27
|
+
updateActions(): void;
|
|
28
|
+
reorderData(): FsListReorderData;
|
|
29
|
+
abstract destroy(): any;
|
|
30
|
+
}
|
|
@@ -1,12 +1,23 @@
|
|
|
1
|
-
import { BaseRow } from './
|
|
2
|
-
import {
|
|
1
|
+
import { BaseRow, IBaseRow } from './_base-row';
|
|
2
|
+
import { RowType } from '../../enums/row-type.enum';
|
|
3
|
+
import { IGroupRow } from './group-row';
|
|
3
4
|
import { FsListReorderData } from '../../interfaces';
|
|
4
|
-
export
|
|
5
|
+
export interface IBaseChildRow extends IBaseRow {
|
|
6
|
+
type: RowType.GroupChild | RowType.GroupFooter;
|
|
7
|
+
parent: IGroupRow;
|
|
5
8
|
visible: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface IChildRow extends IBaseChildRow {
|
|
11
|
+
type: RowType.GroupChild;
|
|
12
|
+
}
|
|
13
|
+
export declare class ChildRow extends BaseRow<RowType.GroupChild> implements IChildRow {
|
|
14
|
+
protected readonly _rowType: RowType.GroupChild;
|
|
15
|
+
private _visible;
|
|
6
16
|
private readonly _parent;
|
|
7
|
-
constructor(data?:
|
|
8
|
-
get
|
|
9
|
-
|
|
10
|
-
|
|
17
|
+
constructor(data?: object, parent?: IGroupRow);
|
|
18
|
+
get visible(): boolean;
|
|
19
|
+
set visible(value: boolean);
|
|
20
|
+
get parent(): IGroupRow;
|
|
21
|
+
reorderData(): FsListReorderData;
|
|
11
22
|
destroy(): void;
|
|
12
23
|
}
|
|
@@ -1,10 +1,17 @@
|
|
|
1
|
-
import { BaseRow } from './
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { BaseRow } from './_base-row';
|
|
2
|
+
import { RowType } from '../../enums/row-type.enum';
|
|
3
|
+
import { IGroupRow } from './group-row';
|
|
4
|
+
import { IBaseChildRow } from './child-row';
|
|
5
|
+
export interface IGroupFooterRow extends IBaseChildRow {
|
|
6
|
+
type: RowType.GroupFooter;
|
|
7
|
+
}
|
|
8
|
+
export declare class GroupFooterRow extends BaseRow<RowType.GroupFooter> implements IGroupFooterRow {
|
|
9
|
+
protected readonly _rowType: RowType.GroupFooter;
|
|
10
|
+
private _visible;
|
|
5
11
|
private readonly _parent;
|
|
6
|
-
constructor(data?:
|
|
7
|
-
get
|
|
8
|
-
|
|
12
|
+
constructor(data?: object, parent?: IGroupRow);
|
|
13
|
+
get visible(): boolean;
|
|
14
|
+
set visible(value: boolean);
|
|
15
|
+
get parent(): IGroupRow;
|
|
9
16
|
destroy(): void;
|
|
10
17
|
}
|
|
@@ -1,16 +1,26 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { Observable } from 'rxjs';
|
|
2
|
+
import { BaseRow, IBaseRow } from './_base-row';
|
|
3
|
+
import { RowType } from '../../enums/row-type.enum';
|
|
4
|
+
import { IGroupFooterRow } from './group-footer-row';
|
|
5
|
+
import { IChildRow } from './child-row';
|
|
6
|
+
export interface IGroupRow extends IBaseRow {
|
|
7
|
+
type: RowType.Group;
|
|
8
|
+
childrenData: unknown[];
|
|
9
|
+
expanded: boolean;
|
|
10
|
+
expanded$: Observable<boolean>;
|
|
11
|
+
toggleRowExpandStatus(): void;
|
|
12
|
+
children: (IChildRow | IGroupFooterRow)[];
|
|
13
|
+
}
|
|
14
|
+
export declare class GroupRow extends BaseRow<RowType.Group> implements IGroupRow {
|
|
15
|
+
protected readonly _rowType: RowType.Group;
|
|
16
|
+
private _children;
|
|
6
17
|
private readonly _expanded;
|
|
7
|
-
constructor(data?:
|
|
8
|
-
get
|
|
9
|
-
get
|
|
18
|
+
constructor(data?: object, initialExpand?: boolean);
|
|
19
|
+
get children(): (IChildRow | IGroupFooterRow)[];
|
|
20
|
+
get childrenData(): object[];
|
|
10
21
|
get expanded(): boolean;
|
|
11
|
-
get expanded$():
|
|
12
|
-
updateChildrenIndexes(): void;
|
|
13
|
-
updateChildrenVisibility(): void;
|
|
22
|
+
get expanded$(): Observable<boolean>;
|
|
14
23
|
toggleRowExpandStatus(): void;
|
|
15
24
|
destroy(): void;
|
|
25
|
+
private _updateChildrenVisibility;
|
|
16
26
|
}
|
|
@@ -1,5 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { RowType } from '../../enums/row-type.enum';
|
|
2
|
+
import { BaseRow, IBaseRow } from './_base-row';
|
|
3
|
+
export interface ISimpleRow extends IBaseRow {
|
|
4
|
+
type: RowType.Simple;
|
|
5
|
+
}
|
|
6
|
+
export declare class SimpleRow extends BaseRow<RowType.Simple> implements ISimpleRow {
|
|
7
|
+
protected _rowType: RowType.Simple;
|
|
8
|
+
constructor(data?: object);
|
|
4
9
|
destroy(): void;
|
|
5
10
|
}
|
package/app/models/row.d.ts
CHANGED
|
@@ -1,34 +1,14 @@
|
|
|
1
|
-
import { Observable } from 'rxjs';
|
|
2
1
|
import { RowType } from '../enums/row-type.enum';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
export
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
actionsUpdate(): void;
|
|
17
|
-
set index(value: number);
|
|
18
|
-
get readyToSwap(): boolean;
|
|
19
|
-
get visible(): boolean;
|
|
20
|
-
set readyToSwap(value: boolean);
|
|
21
|
-
get data(): any;
|
|
22
|
-
get type(): RowType;
|
|
23
|
-
get isGroup(): boolean;
|
|
24
|
-
get isGroupChild(): boolean;
|
|
25
|
-
get isGroupFooter(): boolean;
|
|
26
|
-
get parent(): GroupRow;
|
|
27
|
-
get children(): (ChildRow | GroupFooterRow)[];
|
|
28
|
-
get expanded(): boolean;
|
|
29
|
-
get expanded$(): Observable<boolean>;
|
|
30
|
-
updateChildrenIndexes(): void;
|
|
31
|
-
toggleRowExpandStatus(): void;
|
|
32
|
-
getReorderData(): FsListReorderData;
|
|
33
|
-
destroy(): void;
|
|
34
|
-
}
|
|
2
|
+
import { IChildRow } from './row/child-row';
|
|
3
|
+
import { IGroupFooterRow } from './row/group-footer-row';
|
|
4
|
+
import { IGroupRow } from './row/group-row';
|
|
5
|
+
import { ISimpleRow } from './row/simple-row';
|
|
6
|
+
export type Row = ISimpleRow | IGroupRow | IGroupFooterRow | IChildRow;
|
|
7
|
+
export declare function isGroupRow(row: Row): row is IGroupRow;
|
|
8
|
+
export declare function isChildRow(row: Row): row is IChildRow;
|
|
9
|
+
export declare function isGroupFooterRow(row: Row): row is IGroupFooterRow;
|
|
10
|
+
export declare function isChildTypeRow(row: Row): row is IChildRow | IGroupFooterRow;
|
|
11
|
+
export declare function makeRowFactory(data: object, rowType: RowType, opts?: {
|
|
12
|
+
parent?: Row;
|
|
13
|
+
initialExpand?: boolean;
|
|
14
|
+
}): Row;
|
|
@@ -3,10 +3,7 @@ import { takeUntil } from 'rxjs/operators';
|
|
|
3
3
|
import { isFunction, isObject } from 'lodash-es';
|
|
4
4
|
import { RowType } from '../enums/row-type.enum';
|
|
5
5
|
import { FsListState } from '../enums/state.enum';
|
|
6
|
-
import {
|
|
7
|
-
import { ChildRow } from '../models/row/child-row';
|
|
8
|
-
import { GroupFooterRow } from '../models/row/group-footer-row';
|
|
9
|
-
import { GroupRow } from '../models/row/group-row';
|
|
6
|
+
import { makeRowFactory, isChildTypeRow, isGroupRow } from '../models/row';
|
|
10
7
|
export class DataController {
|
|
11
8
|
_visibleRows$ = new BehaviorSubject([]);
|
|
12
9
|
_rowsRemoved$ = new Subject();
|
|
@@ -64,7 +61,7 @@ export class DataController {
|
|
|
64
61
|
}
|
|
65
62
|
get reorderData() {
|
|
66
63
|
return this._rowsStack
|
|
67
|
-
.map((row) => row.
|
|
64
|
+
.map((row) => row.reorderData());
|
|
68
65
|
}
|
|
69
66
|
setGroupConfig(group) {
|
|
70
67
|
if (group) {
|
|
@@ -118,12 +115,12 @@ export class DataController {
|
|
|
118
115
|
const rowIndex = this._rowsStack.findIndex((listRow) => {
|
|
119
116
|
return trackBy(listRow.data, targetRow);
|
|
120
117
|
});
|
|
121
|
-
if (rowIndex
|
|
122
|
-
|
|
123
|
-
this._updateVisibleRows();
|
|
124
|
-
return true;
|
|
118
|
+
if (rowIndex === -1) {
|
|
119
|
+
return false;
|
|
125
120
|
}
|
|
126
|
-
|
|
121
|
+
this._rowsStack[rowIndex] = makeRowFactory(targetRow, RowType.Simple);
|
|
122
|
+
this._updateVisibleRows();
|
|
123
|
+
return true;
|
|
127
124
|
}
|
|
128
125
|
/**
|
|
129
126
|
* Update data for specified row
|
|
@@ -207,7 +204,7 @@ export class DataController {
|
|
|
207
204
|
}
|
|
208
205
|
toggleRowGroup(rowData) {
|
|
209
206
|
const row = this.visibleRows.find((visibleRow) => visibleRow.data === rowData);
|
|
210
|
-
row
|
|
207
|
+
row?.toggleRowExpandStatus();
|
|
211
208
|
this._updateVisibleRows();
|
|
212
209
|
}
|
|
213
210
|
finishReorder() {
|
|
@@ -216,7 +213,7 @@ export class DataController {
|
|
|
216
213
|
let group;
|
|
217
214
|
this._rowsStack
|
|
218
215
|
.forEach((row, index) => {
|
|
219
|
-
if (row
|
|
216
|
+
if (isGroupRow(row) && row !== group) {
|
|
220
217
|
group = row;
|
|
221
218
|
}
|
|
222
219
|
else {
|
|
@@ -234,7 +231,7 @@ export class DataController {
|
|
|
234
231
|
}
|
|
235
232
|
else {
|
|
236
233
|
rows = rows.map((row) => {
|
|
237
|
-
return
|
|
234
|
+
return makeRowFactory(row, RowType.Simple);
|
|
238
235
|
});
|
|
239
236
|
this._rowsStack = [...rows];
|
|
240
237
|
}
|
|
@@ -245,7 +242,7 @@ export class DataController {
|
|
|
245
242
|
}
|
|
246
243
|
else {
|
|
247
244
|
rows = rows.map((row) => {
|
|
248
|
-
return
|
|
245
|
+
return makeRowFactory(row, RowType.Simple);
|
|
249
246
|
});
|
|
250
247
|
this._rowsStack = [...this._rowsStack, ...rows];
|
|
251
248
|
}
|
|
@@ -256,7 +253,7 @@ export class DataController {
|
|
|
256
253
|
_updateVisibleRows() {
|
|
257
254
|
this.visibleRows = this._rowsStack
|
|
258
255
|
.filter((row) => {
|
|
259
|
-
return (
|
|
256
|
+
return !isChildTypeRow(row) || row.visible;
|
|
260
257
|
});
|
|
261
258
|
}
|
|
262
259
|
_updateRow(targetRow, trackBy) {
|
|
@@ -269,7 +266,7 @@ export class DataController {
|
|
|
269
266
|
if (targetIndex !== -1) {
|
|
270
267
|
const updateTarget = this._rowsStack[targetIndex];
|
|
271
268
|
const updatedData = { ...updateTarget.data, ...targetRow };
|
|
272
|
-
this._rowsStack[targetIndex] =
|
|
269
|
+
this._rowsStack[targetIndex] = makeRowFactory(updatedData, updateTarget.type, {
|
|
273
270
|
parent: updateTarget.parent,
|
|
274
271
|
initialExpand: updateTarget.expanded,
|
|
275
272
|
});
|
|
@@ -302,21 +299,17 @@ export class DataController {
|
|
|
302
299
|
}
|
|
303
300
|
const groupRows = [];
|
|
304
301
|
rows.forEach((row) => {
|
|
305
|
-
const
|
|
306
|
-
const
|
|
307
|
-
|
|
308
|
-
|
|
302
|
+
const groupData = this._groupByFn(row);
|
|
303
|
+
const groupKey = this._compareByFn(groupData);
|
|
304
|
+
let group = this._store.get(groupKey);
|
|
305
|
+
if (!group) {
|
|
306
|
+
group = makeRowFactory(groupData, RowType.Group, { initialExpand: this._initialExpand });
|
|
309
307
|
group.index = groupRows.length;
|
|
310
308
|
groupRows.push(group);
|
|
311
|
-
|
|
312
|
-
this._store.set(mainGroupKey, group);
|
|
313
|
-
group.children.push(childRow);
|
|
314
|
-
}
|
|
315
|
-
else {
|
|
316
|
-
const group = this._store.get(mainGroupKey);
|
|
317
|
-
const childRow = new ChildRow(row, group);
|
|
318
|
-
group.children.push(childRow);
|
|
309
|
+
this._store.set(groupKey, group);
|
|
319
310
|
}
|
|
311
|
+
const childRow = makeRowFactory(row, RowType.GroupChild, { parent: group });
|
|
312
|
+
group.children.push(childRow);
|
|
320
313
|
});
|
|
321
314
|
groupRows.forEach((groupRow) => {
|
|
322
315
|
const footerIndex = groupRow.children
|
|
@@ -328,12 +321,13 @@ export class DataController {
|
|
|
328
321
|
});
|
|
329
322
|
if (footerIndex !== -1) {
|
|
330
323
|
const footerRow = groupRow.children.splice(footerIndex, footerIndex + 1)[0];
|
|
331
|
-
|
|
324
|
+
const newRow = makeRowFactory(footerRow.data, RowType.GroupFooter, { parent: groupRow });
|
|
325
|
+
groupRow.children.push(newRow);
|
|
332
326
|
}
|
|
333
327
|
});
|
|
334
328
|
return Array.from(this._store.values())
|
|
335
329
|
.reduce((acc, item) => {
|
|
336
|
-
if (item
|
|
330
|
+
if (isGroupRow(item)) {
|
|
337
331
|
acc.push(item, ...item.children);
|
|
338
332
|
}
|
|
339
333
|
else {
|
|
@@ -343,4 +337,4 @@ export class DataController {
|
|
|
343
337
|
}, []);
|
|
344
338
|
}
|
|
345
339
|
}
|
|
346
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1jb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwcC9jbGFzc2VzL2RhdGEtY29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFakQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQU1sRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDaEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBR25ELE1BQU0sT0FBTyxjQUFjO0lBRVIsYUFBYSxHQUFHLElBQUksZUFBZSxDQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQy9DLGFBQWEsR0FBRyxJQUFJLE9BQU8sRUFBUyxDQUFDO0lBQ3JDLGtCQUFrQixHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFFbEQsTUFBTSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7SUFDbkIsVUFBVSxHQUFVLEVBQUUsQ0FBQztJQUN2QixVQUFVLENBQWM7SUFFeEIsVUFBVSxDQUFpQjtJQUMzQixZQUFZLENBUVA7SUFDTCxZQUFZLENBQWlCO0lBQzdCLGNBQWMsR0FBRyxJQUFJLENBQUM7SUFDdEIsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUV0QixnQkFBZ0IsQ0FBVTtJQUUxQixRQUFRLEdBQUcsS0FBSyxD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QzthQUNwQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDcEIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2pCLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ25DLENBQUM7aUJBQU0sQ0FBQztnQkFDTixHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pCLENBQUM7WUFFRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNYLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBpc0Z1bmN0aW9uLCBpc09iamVjdCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5cbmltcG9ydCB7IFJvd1R5cGUgfSBmcm9tICcuLi9lbnVtcy9yb3ctdHlwZS5lbnVtJztcbmltcG9ydCB7IEZzTGlzdFN0YXRlIH0gZnJvbSAnLi4vZW51bXMvc3RhdGUuZW51bSc7XG5pbXBvcnQge1xuICBGc0xpc3RBYnN0cmFjdFJvdyxcbiAgRnNMaXN0R3JvdXBDb25maWcsXG4gIEZzTGlzdFRyYWNrQnlUYXJnZXRSb3dGbixcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9saXN0Y29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBSb3cgfSBmcm9tICcuLi9tb2RlbHMvcm93JztcbmltcG9ydCB7IENoaWxkUm93IH0gZnJvbSAnLi4vbW9kZWxzL3Jvdy9jaGlsZC1yb3cnO1xuaW1wb3J0IHsgR3JvdXBGb290ZXJSb3cgfSBmcm9tICcuLi9tb2RlbHMvcm93L2dyb3VwLWZvb3Rlci1yb3cnO1xuaW1wb3J0IHsgR3JvdXBSb3cgfSBmcm9tICcuLi9tb2RlbHMvcm93L2dyb3VwLXJvdyc7XG5cblxuZXhwb3J0IGNsYXNzIERhdGFDb250cm9sbGVyIHtcblxuICBwcml2YXRlIHJlYWRvbmx5IF92aXNpYmxlUm93cyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFJvd1tdPihbXSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Jvd3NSZW1vdmVkJCA9IG5ldyBTdWJqZWN0PFJvd1tdPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZW1vdGVSb3dzQ2hhbmdlJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcHJpdmF0ZSBfc3RvcmUgPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgX3Jvd3NTdGFjazogUm93W10gPSBbXTtcbiAgcHJpdmF0ZSBfb3BlcmF0aW9uOiBGc0xpc3RTdGF0ZTtcblxuICBwcml2YXRlIF9ncm91cEJ5Rm46IChyb3cpID0+IGFueVtdO1xuICBwcml2YXRlIF9mb290ZXJSb3dGbjogKFxuICAgIHJvdzogeyBba2V5OiBzdHJpbmddOiBhbnkgfSxcbiAgICBncm91cDoge1xuICAgICAgW2tleTogc3RyaW5nXTogYW55LFxuICAgICAgY2hpbGRyZW46IHtcbiAgICAgICAgW2tleTogc3RyaW5nXTogYW55XG4gICAgICB9W10sXG4gICAgfVxuICApID0+IGJvb2xlYW47XG4gIHByaXZhdGUgX2NvbXBhcmVCeUZuOiAoZ3JvdXApID0+IGFueTtcbiAgcHJpdmF0ZSBfaW5pdGlhbEV4cGFuZCA9IHRydWU7XG4gIHByaXZhdGUgX2dyb3VwRW5hYmxlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX2xvYWRNb3JlRW5hYmxlZDogYm9vbGVhbjtcblxuICBwcml2YXRlIF9oYXNEYXRhID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIHB1YmxpYyBnZXQgdmlzaWJsZVJvd3NEYXRhKCkge1xuICAgIHJldHVybiB0aGlzLnZpc2libGVSb3dzLm1hcCgocm93KSA9PiByb3cuZGF0YSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHJvd3NTdGFjaygpIHtcbiAgICByZXR1cm4gdGhpcy5fcm93c1N0YWNrLnNsaWNlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGdyb3VwRW5hYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZ3JvdXBFbmFibGVkO1xuICB9XG5cbiAgcHVibGljIHNldCBncm91cEVuYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9ncm91cEVuYWJsZWQgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcmVtb3RlUm93c0NoYW5nZSQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlbW90ZVJvd3NDaGFuZ2UkLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHJvd3NSZW1vdmVkJCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcm93c1JlbW92ZWQkLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGhhc0RhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2hhc0RhdGE7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG9wZXJhdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fb3BlcmF0aW9uO1xuICB9XG5cbiAgcHVibGljIGdldCB2aXNpYmxlUm93cyQoKTogT2JzZXJ2YWJsZTxSb3dbXT4ge1xuICAgIHJldHVybiB0aGlzLl92aXNpYmxlUm93cyQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0IHZpc2libGVSb3dzKHZhbHVlOiBhbnlbXSkge1xuICAgIHRoaXMuX3Zpc2libGVSb3dzJC5uZXh0KHZhbHVlKTtcbiAgICB0aGlzLl9oYXNEYXRhID0gdGhpcy52aXNpYmxlUm93cy5sZW5ndGggPiAwO1xuICB9XG5cbiAgcHVibGljIGdldCB2aXNpYmxlUm93cygpIHtcbiAgICByZXR1cm4gdGhpcy5fdmlzaWJsZVJvd3MkLmdldFZhbHVlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHZpc2libGVSb3dzQ291bnQoKSB7XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZVJvd3MubGVuZ3RoO1xuICB9XG5cbiAgcHVibGljIGdldCBoYXNHcm91cHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbXBhcmVCeUZuICYmIHRoaXMuX2dyb3VwQnlGbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcmVvcmRlckRhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Jvd3NTdGFja1xuICAgICAgLm1hcCgocm93KSA9PiByb3cuZ2V0UmVvcmRlckRhdGEoKSk7XG4gIH1cblxuICBwdWJsaWMgc2V0R3JvdXBDb25maWcoZ3JvdXA6IEZzTGlzdEdyb3VwQ29uZmlnKSB7XG4gICAgaWYgKGdyb3VwKSB7XG4gICAgICB0aGlzLl9ncm91cEJ5Rm4gPSBncm91cC5ncm91cEJ5O1xuICAgICAgdGhpcy5fY29tcGFyZUJ5Rm4gPSBncm91cC5jb21wYXJlQnk7XG4gICAgICB0aGlzLl9mb290ZXJSb3dGbiA9IGdyb3VwLmZvb3RlciB8fCAoKCkgPT4gZmFsc2UpO1xuICAgICAgdGhpcy5faW5pdGlhbEV4cGFuZCA9IGdyb3VwLmluaXRpYWxFeHBhbmQgPz8gdHJ1ZTtcblxuICAgICAgLy8gZ3JvdXAgbW9kZSBlbmFibGVkIGJ5IGRlZmF1bHRcbiAgICAgIHRoaXMuX2dyb3VwRW5hYmxlZCA9IChncm91cC5lbmFibGVkICE9PSB1bmRlZmluZWQpXG4gICAgICAgID8gZ3JvdXAuZW5hYmxlZFxuICAgICAgICA6IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldEFkZGl0aW9uYWxDb25maWdzKGNvbmZpZ3M6IHsgbG9hZE1vcmVFbmFibGVkOiBib29sZWFuIH0pIHtcbiAgICB0aGlzLl9sb2FkTW9yZUVuYWJsZWQgPSBjb25maWdzLmxvYWRNb3JlRW5hYmxlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSb3dzIHdoYXQgd2FzIHJlY2VpdmVkIGZyb20gZmV0Y2ggZnVuY3Rpb25cbiAgICogQHBhcmFtIHJvd3NcbiAgICovXG4gIHB1YmxpYyBzZXRSb3dzRnJvbVJlc3BvbnNlKHJvd3M6IGFueVtdKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5fb3BlcmF0aW9uID09PSBGc0xpc3RTdGF0ZS5Mb2FkTW9yZSB8fFxuICAgICAgICAodGhpcy5fb3BlcmF0aW9uID09PSBGc0xpc3RTdGF0ZS5QYWdlQ2hhbmdlICYmIHRoaXMuX2xvYWRNb3JlRW5hYmxlZClcbiAgICApIHtcbiAgICAgIHRoaXMuX2V4dGVuZFJvd3NTdGFjayhyb3dzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdXBkYXRlUm93c1N0YWNrKHJvd3MpO1xuICAgIH1cblxuICAgIHRoaXMuX29wZXJhdGlvbiA9IEZzTGlzdFN0YXRlLklkbGU7XG5cbiAgICB0aGlzLl91cGRhdGVWaXNpYmxlUm93cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBjdXJyZW50IG9wZXJhdGlvbiBmb3IgbGlzdCBkYXRhIGZsb3dcbiAgICogQHBhcmFtIHZhbHVlXG4gICAqL1xuICBwdWJsaWMgc2V0T3BlcmF0aW9uKHZhbHVlOiBGc0xpc3RTdGF0ZSkge1xuICAgIHRoaXMuX29wZXJhdGlvbiA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSByb3dzIGZyb20gdmlzaWJsZVxuICAgKi9cbiAgcHVibGljIGNsZWFyUm93cygpIHtcbiAgICB0aGlzLnZpc2libGVSb3dzID0gW107XG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZSBkYXRhIGZvciBzcGVjaWZpZWQgcm93XG4gICAqIEBwYXJhbSB0YXJnZXRSb3dcbiAgICogQHBhcmFtIHRyYWNrQnlcbiAgICovXG4gIHB1YmxpYyByZXBsYWNlRGF0YShcbiAgICB0YXJnZXRSb3c6IEZzTGlzdEFic3RyYWN0Um93LFxuICAgIHRyYWNrQnk/OiBGc0xpc3RUcmFja0J5VGFyZ2V0Um93Rm4sXG4gICkge1xuICAgIGNvbnN0IHJvd0luZGV4ID0gdGhpcy5fcm93c1N0YWNrLmZpbmRJbmRleCgobGlzdFJvdykgPT4ge1xuICAgICAgcmV0dXJuIHRyYWNrQnkobGlzdFJvdy5kYXRhLCB0YXJnZXRSb3cpO1xuICAgIH0pO1xuXG4gICAgaWYgKHJvd0luZGV4ID4gLTEpIHtcbiAgICAgIHRoaXMuX3Jvd3NTdGFja1tyb3dJbmRleF0gPSBuZXcgUm93KFxuICAgICAgICB0YXJnZXRSb3csXG4gICAgICAgIFJvd1R5cGUuU2ltcGxlLFxuICAgICAgICB7IGluaXRpYWxFeHBhbmQ6IHRoaXMuX2luaXRpYWxFeHBhbmQgfSxcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuX3VwZGF0ZVZpc2libGVSb3dzKCk7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiBcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGRhdGEgZm9yIHNwZWNpZmllZCByb3dcbiAgICogQHBhcmFtIHJvd3NcbiAgICogQHBhcmFtIHRyYWNrQnlcbiAgICovXG4gIHB1YmxpYyB1cGRhdGVEYXRhKFxuICAgIHJvd3M6IEZzTGlzdEFic3RyYWN0Um93IHwgRnNMaXN0QWJzdHJhY3RSb3dbXSxcbiAgICB0cmFja0J5PzogRnNMaXN0VHJhY2tCeVRhcmdldFJvd0ZuLFxuICApOiBib29sZWFuIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShyb3dzKSkge1xuICAgICAgbGV0IHVwZGF0ZVN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgcm93cy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl91cGRhdGVSb3coaXRlbSwgdHJhY2tCeSkpIHtcbiAgICAgICAgICB1cGRhdGVTdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuX3VwZGF0ZVZpc2libGVSb3dzKCk7XG5cbiAgICAgIHJldHVybiB1cGRhdGVTdWNjZXNzO1xuICAgIH0gXG4gICAgY29uc3QgdXBkYXRlZCA9IHRoaXMuX3VwZGF0ZVJvdyhyb3dzLCB0cmFja0J5KTtcblxuICAgIHRoaXMuX3VwZGF0ZVZpc2libGVSb3dzKCk7XG5cbiAgICByZXR1cm4gdXBkYXRlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgZGF0YSBmb3Igc3BlY2lmaWVkIHJvd1xuICAgKiBAcGFyYW0gZGF0YVxuICAgKi9cbiAgcHVibGljIHJlbW92ZURhdGEoXG4gICAgZGF0YTogRnNMaXN0QWJzdHJhY3RSb3cgfCBGc0xpc3RBYnN0cmFjdFJvd1tdIHwgRnNMaXN0VHJhY2tCeVRhcmdldFJvd0ZuLFxuICApOiBib29sZWFuIHtcbiAgICBjb25zdCByZW1vdmVkUm93cyA9IFtdO1xuXG4gICAgY29uc3QgZGVmYXVsdFRyYWNrQnkgPSAocm93LCB0YXJnZXQpID0+IHtcbiAgICAgIHJldHVybiByb3cgPT09IHRhcmdldDtcbiAgICB9O1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgIC8vXG4gICAgICBkYXRhLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgcmVtb3ZlZFJvd3MucHVzaCguLi50aGlzLl9yZW1vdmVSb3coaXRlbSwgZGVmYXVsdFRyYWNrQnkpKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoaXNGdW5jdGlvbihkYXRhKSkge1xuICAgICAgcmVtb3ZlZFJvd3MucHVzaCguLi50aGlzLl9yZW1vdmVSb3cobnVsbCwgKGRhdGEgYXMgRnNMaXN0VHJhY2tCeVRhcmdldFJvd0ZuKSkpO1xuICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoZGF0YSkpIHtcbiAgICAgIHJlbW92ZWRSb3dzLnB1c2goLi4udGhpcy5fcmVtb3ZlUm93KGRhdGEsIGRlZmF1bHRUcmFja0J5KSk7XG4gICAgfVxuXG4gICAgaWYgKHJlbW92ZWRSb3dzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuX3VwZGF0ZVZpc2libGVSb3dzKCk7XG5cbiAgICAgIHRoaXMuX3Jvd3NSZW1vdmVkJC5uZXh0KHJlbW92ZWRSb3dzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gISFyZW1vdmVkUm93cy5sZW5ndGg7XG4gIH1cblxuICBwdWJsaWMgc3dhcFJvd3Mocm93MSwgcm93Miwgc2VsZWN0ZWRSb3dzPzogUm93W10sIGlzTXVsdGlwbGVEcmFnID0gZmFsc2UpIHtcbiAgICBjb25zdCByb3dzU3RhY2sgPSB0aGlzLl9yb3dzU3RhY2s7XG4gICAgY29uc3Qgcm93MUdsb2JhbEluZGV4ID0gcm93c1N0YWNrLmluZGV4T2Yocm93MSk7XG4gICAgY29uc3Qgcm93Mkdsb2JhbEluZGV4ID0gcm93c1N0YWNrLmluZGV4T2Yocm93Mik7XG5cbiAgICBjb25zdCB0bXBFbCA9IHJvd3NTdGFja1tyb3cxR2xvYmFsSW5kZXhdO1xuICAgIHJvd3NTdGFja1tyb3cxR2xvYmFsSW5kZXhdID0gcm93c1N0YWNrW3JvdzJHbG9iYWxJbmRleF07XG4gICAgcm93c1N0YWNrW3JvdzJHbG9iYWxJbmRleF0gPSB0bXBFbDtcblxuICAgIGlmIChpc011bHRpcGxlRHJhZyAmJiBBcnJheS5pc0FycmF5KHNlbGVjdGVkUm93cykpIHtcbiAgICAgIGlmICghc2VsZWN0ZWRSb3dzLmluY2x1ZGVzKHJvdzEpKSB7XG4gICAgICAgIHNlbGVjdGVkUm93cyA9IFtyb3cxLCAuLi5zZWxlY3RlZFJvd3NdO1xuICAgICAgfVxuXG4gICAgICBzZWxlY3RlZFJvd3NcbiAgICAgICAgLmZpbHRlcigoc2VsZWN0ZWRSb3cpID0+IHtcbiAgICAgICAgICByZXR1cm4gc2VsZWN0ZWRSb3cgIT09IHJvdzE7XG4gICAgICAgIH0pXG4gICAgICAgIC5mb3JFYWNoKChzZWxlY3RlZFJvdykgPT4ge1xuICAgICAgICAgIGNvbnN0IGlkeCA9IHJvd3NTdGFjay5pbmRleE9mKHNlbGVjdGVkUm93KTtcbiAgICAgICAgICByb3dzU3RhY2suc3BsaWNlKGlkeCwgMSk7XG4gICAgICAgIH0pO1xuXG4gICAgICBjb25zdCBpbmRleFRvSW5zZXJ0QWZ0ZXIgPSByb3dzU3RhY2suaW5kZXhPZih0bXBFbCk7XG5cbiAgICAgIHJvd3NTdGFjay5zcGxpY2UoaW5kZXhUb0luc2VydEFmdGVyLCAxKTtcblxuICAgICAgc2VsZWN0ZWRSb3dzLmZvckVhY2goKHNlbGVjdGVkUm93LCBvZmZzZXQpID0+IHtcbiAgICAgICAgcm93c1N0YWNrLnNwbGljZShpbmRleFRvSW5zZXJ0QWZ0ZXIgKyBvZmZzZXQsIDAsIHNlbGVjdGVkUm93KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuX3Jvd3NTdGFjayA9IFsuLi5yb3dzU3RhY2tdO1xuICB9XG5cbiAgcHVibGljIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5fZGVzdHJveVJvd3NTdGFjaygpO1xuICAgIHRoaXMuX3N0b3JlLmNsZWFyKCk7XG5cbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KG51bGwpO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlUm93R3JvdXAocm93RGF0YSkge1xuICAgIGNvbnN0IHJvdyA9IHRoaXMudmlzaWJsZVJvd3MuZmluZCgodmlzaWJsZVJvdykgPT4gdmlzaWJsZVJvdy5kYXRhID09PSByb3dEYXRhICk7XG4gICAgcm93LnRvZ2dsZVJvd0V4cGFuZFN0YXR1cygpO1xuXG4gICAgdGhpcy5fdXBkYXRlVmlzaWJsZVJvd3MoKTtcbiAgfVxuXG4gIHB1YmxpYyBmaW5pc2hSZW9yZGVyKCk6IHZvaWQge1xuICAgIC8vIFRPRE8gZml4bWUgcmVtb3ZlIG9yIGltcHJvdmVcbiAgICBpZiAodGhpcy5ncm91cEVuYWJsZWQpIHtcbiAgICAgIGxldCBncm91cDtcbiAgICAgIHRoaXMuX3Jvd3NTdGFja1xuICAgICAgICAuZm9yRWFjaCgocm93LCBpbmRleCkgPT4ge1xuICAgICAgICAgIGlmIChyb3cuaXNHcm91cCAmJiByb3cgIT09IGdyb3VwKSB7XG4gICAgICAgICAgICBncm91cCA9IHJvdztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcm93LmluZGV4ID0gaW5kZXggLSB0aGlzLl9yb3dzU3RhY2suaW5kZXhPZihncm91cCkgLSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5fdXBkYXRlVmlzaWJsZVJvd3MoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZVJvd3NTdGFjayhyb3dzKSB7XG4gICAgdGhpcy5fZGVzdHJveVJvd3NTdGFjaygpO1xuXG4gICAgaWYgKHRoaXMuZ3JvdXBFbmFibGVkKSB7XG4gICAgICB0aGlzLl9zdG9yZS5jbGVhcigpO1xuICAgICAgdGhpcy5fcm93c1N0YWNrID0gWy4uLnRoaXMuX2dyb3VwUm93c0J5KHJvd3MpXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcm93cyA9IHJvd3MubWFwKChyb3cpID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBSb3coXG4gICAgICAgICAgcm93LFxuICAgICAgICAgIFJvd1R5cGUuU2ltcGxlLFxuICAgICAgICAgIHsgaW5pdGlhbEV4cGFuZDogdGhpcy5faW5pdGlhbEV4cGFuZCB9LFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICB0aGlzLl9yb3dzU3RhY2sgPSBbLi4ucm93c107XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZXh0ZW5kUm93c1N0YWNrKHJvd3MpIHtcbiAgICBpZiAodGhpcy5ncm91cEVuYWJsZWQpIHtcbiAgICAgIHRoaXMuX3Jvd3NTdGFjayA9IFsuLi50aGlzLl9ncm91cFJvd3NCeShyb3dzKV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJvd3MgPSByb3dzLm1hcCgocm93KSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgUm93KFxuICAgICAgICAgIHJvdyxcbiAgICAgICAgICBSb3dUeXBlLlNpbXBsZSxcbiAgICAgICAgICB7IGluaXRpYWxFeHBhbmQ6IHRoaXMuX2luaXRpYWxFeHBhbmQgfSxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5fcm93c1N0YWNrID0gWy4uLnRoaXMuX3Jvd3NTdGFjaywgLi4ucm93c107XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZGVzdHJveVJvd3NTdGFjaygpIHtcbiAgICB0aGlzLl9yb3dzU3RhY2suZm9yRWFjaCgocm93KSA9PiByb3cuZGVzdHJveSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZVZpc2libGVSb3dzKCkge1xuICAgIHRoaXMudmlzaWJsZVJvd3MgPSB0aGlzLl9yb3dzU3RhY2tcbiAgICAgIC5maWx0ZXIoKHJvdykgPT4ge1xuICAgICAgICByZXR1cm4gKCEocm93IGFzIGFueSkuaXNDaGlsZCAmJiAhcm93LmlzR3JvdXBGb290ZXIpIHx8IHJvdy52aXNpYmxlO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVSb3coXG4gICAgdGFyZ2V0Um93OiBGc0xpc3RBYnN0cmFjdFJvdyxcbiAgICB0cmFja0J5PzogKGxpc3RSb3c6IEZzTGlzdEFic3RyYWN0Um93LCB0YXJnZXRSb3c/OiBGc0xpc3RBYnN0cmFjdFJvdykgPT4gYm9vbGVhbikge1xuXG4gICAgaWYgKHRyYWNrQnkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdHJhY2tCeSA9IChyb3csIHRhcmdldCkgPT4ge1xuICAgICAgICByZXR1cm4gcm93ID09PSB0YXJnZXQ7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHRhcmdldEluZGV4ID0gdGhpcy5fcm93c1N0YWNrLmZpbmRJbmRleCgobGlzdFJvdykgPT4gdHJhY2tCeShsaXN0Um93LmRhdGEsIHRhcmdldFJvdykpO1xuXG4gICAgaWYgKHRhcmdldEluZGV4ICE9PSAtMSkge1xuICAgICAgY29uc3QgdXBkYXRlVGFyZ2V0ID0gdGhpcy5fcm93c1N0YWNrW3RhcmdldEluZGV4XTtcbiAgICAgIGNvbnN0IHVwZGF0ZWREYXRhID0geyAuLi51cGRhdGVUYXJnZXQuZGF0YSwgLi4udGFyZ2V0Um93IH07XG5cbiAgICAgIHRoaXMuX3Jvd3NTdGFja1t0YXJnZXRJbmRleF0gPSBuZXcgUm93KFxuICAgICAgICB1cGRhdGVkRGF0YSxcbiAgICAgICAgdXBkYXRlVGFyZ2V0LnR5cGUsXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJlbnQ6IHVwZGF0ZVRhcmdldC5wYXJlbnQsXG4gICAgICAgICAgaW5pdGlhbEV4cGFuZDogdXBkYXRlVGFyZ2V0LmV4cGFuZGVkLFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSByb3cgZnJvbVxuICAgKiBAcGFyYW0gdGFyZ2V0Um93XG4gICAqIEBwYXJhbSB0cmFja0J5XG4gICAqL1xuICBwcml2YXRlIF9yZW1vdmVSb3coXG4gICAgdGFyZ2V0Um93OiBGc0xpc3RBYnN0cmFjdFJvdyB8IG51bGwsXG4gICAgdHJhY2tCeT86IEZzTGlzdFRyYWNrQnlUYXJnZXRSb3dGbixcbiAgKSB7XG5cbiAgICBjb25zdCByb3dzID0gdGhpcy5fcm93c1N0YWNrO1xuICAgIGNvbnN0IHJlbW92ZWRSb3dzID0gW107XG5cbiAgICByb3dzLmZvckVhY2goKGxpc3RSb3csIGluZGV4KSA9PiB7XG4gICAgICBpZiAodHJhY2tCeShsaXN0Um93LmRhdGEsIHRhcmdldFJvdykpIHtcbiAgICAgICAgY29uc3QgcmVtb3ZlZFJvdyA9IHJvd3Muc3BsaWNlKGluZGV4LCAxKTtcblxuICAgICAgICByZW1vdmVkUm93cy5wdXNoKHJlbW92ZWRSb3cpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlbW92ZWRSb3dzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwbGl0IGV4aXN0aW5nIHJvd3MgYnkgZ3JvdXBzIGFuZCBzdG9yZSB0aGVtIGZvciBmdXR1cmUgdXNlXG4gICAqL1xuICBwcml2YXRlIF9ncm91cFJvd3NCeShyb3dzKSB7XG4gICAgaWYgKCF0aGlzLl9ncm91cEJ5Rm4gfHwgIXRoaXMuX2NvbXBhcmVCeUZuKSB7XG4gICAgICByZXR1cm4gcm93czsgXG4gICAgfVxuXG4gICAgY29uc3QgZ3JvdXBSb3dzOiBHcm91cFJvd1tdID0gW107XG5cbiAgICByb3dzLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgY29uc3QgbWFpbkdyb3VwID0gdGhpcy5fZ3JvdXBCeUZuKHJvdyk7XG4gICAgICBjb25zdCBtYWluR3JvdXBLZXkgPSB0aGlzLl9jb21wYXJlQnlGbihtYWluR3JvdXApO1xuXG4gICAgICBpZiAoIXRoaXMuX3N0b3JlLmhhcyhtYWluR3JvdXBLZXkpKSB7XG4gICAgICAgIGNvbnN0IGdyb3VwID0gbmV3IEdyb3VwUm93KFxuICAgICAgICAgIG1haW5Hcm91cCxcbiAgICAgICAgICB0aGlzLl9pbml0aWFsRXhwYW5kLFxuICAgICAgICApO1xuXG4gICAgICAgIGdyb3VwLmluZGV4ID0gZ3JvdXBSb3dzLmxlbmd0aDtcbiAgICAgICAgZ3JvdXBSb3dzLnB1c2goZ3JvdXApO1xuXG4gICAgICAgIGNvbnN0IGNoaWxkUm93ID0gbmV3IENoaWxkUm93KHJvdywgZ3JvdXApO1xuXG4gICAgICAgIHRoaXMuX3N0b3JlLnNldChtYWluR3JvdXBLZXksIGdyb3VwKTtcbiAgICAgICAgZ3JvdXAuY2hpbGRyZW4ucHVzaChjaGlsZFJvdyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBncm91cCA9IHRoaXMuX3N0b3JlLmdldChtYWluR3JvdXBLZXkpO1xuICAgICAgICBjb25zdCBjaGlsZFJvdyA9IG5ldyBDaGlsZFJvdyhyb3csIGdyb3VwKTtcblxuICAgICAgICBncm91cC5jaGlsZHJlbi5wdXNoKGNoaWxkUm93KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGdyb3VwUm93cy5mb3JFYWNoKChncm91cFJvdykgPT4ge1xuICAgICAgY29uc3QgZm9vdGVySW5kZXggPSBncm91cFJvdy5jaGlsZHJlblxuICAgICAgICAuZmluZEluZGV4KChyb3cpID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fZm9vdGVyUm93Rm4ocm93LmRhdGEsIHtcbiAgICAgICAgICAgIC4uLmdyb3VwUm93LmRhdGEsXG4gICAgICAgICAgICBjaGlsZHJlbjogZ3JvdXBSb3cuY2hpbGRyZW5EYXRhLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgaWYgKGZvb3RlckluZGV4ICE9PSAtMSkge1xuICAgICAgICBjb25zdCBmb290ZXJSb3cgPSBncm91cFJvdy5jaGlsZHJlbi5zcGxpY2UoZm9vdGVySW5kZXgsIGZvb3RlckluZGV4ICsgMSlbMF07XG4gICAgICAgIGdyb3VwUm93LmNoaWxkcmVuLnB1c2gobmV3IEdyb3VwRm9vdGVyUm93KGZvb3RlclJvdy5kYXRhLCBncm91cFJvdykpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5fc3RvcmUudmFsdWVzKCkpXG4gICAgICAucmVkdWNlKChhY2MsIGl0ZW0pID0+IHtcbiAgICAgICAgaWYgKGl0ZW0uaXNHcm91cCkge1xuICAgICAgICAgIGFjYy5wdXNoKGl0ZW0sIC4uLml0ZW0uY2hpbGRyZW4pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFjYy5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIFtdKTtcbiAgfVxufVxuIl19
|
|
340
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1jb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwcC9jbGFzc2VzL2RhdGEtY29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFakQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVsRCxPQUFPLEVBQUUsY0FBYyxFQUFPLGNBQWMsRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFNaEYsTUFBTSxPQUFPLGNBQWM7SUFFUixhQUFhLEdBQUcsSUFBSSxlQUFlLENBQVEsRUFBRSxDQUFDLENBQUM7SUFDL0MsYUFBYSxHQUFHLElBQUksT0FBTyxFQUFTLENBQUM7SUFDckMsa0JBQWtCLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUVsRCxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNuQixVQUFVLEdBQVUsRUFBRSxDQUFDO0lBQ3ZCLFVBQVUsQ0FBYztJQUV4QixVQUFVLENBQWlCO0lBQzNCLFlBQVksQ0FRUDtJQUNMLFlBQVksQ0FBaUI7SUFDN0IsY0FBYyxHQUFHLElBQUksQ0FBQztJQUN0QixhQUFhLEdBQUcsS0FBSyxDQUFDO0lBRXRCLGdCQUFnQixDQUFVO0lBRTFCLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFFUixTQUFTLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUVqRCxJQUFXLGVBQWU7UUFDeEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFB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dCI6WyJpbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgaXNGdW5jdGlvbiwgaXNPYmplY3QgfSBmcm9tICdsb2Rhc2gtZXMnO1xuXG5pbXBvcnQgeyBSb3dUeXBlIH0gZnJvbSAnLi4vZW51bXMvcm93LXR5cGUuZW51bSc7XG5pbXBvcnQgeyBGc0xpc3RTdGF0ZSB9IGZyb20gJy4uL2VudW1zL3N0YXRlLmVudW0nO1xuaW1wb3J0IHsgRnNMaXN0QWJzdHJhY3RSb3csIEZzTGlzdEdyb3VwQ29uZmlnLCBGc0xpc3RUcmFja0J5VGFyZ2V0Um93Rm4sIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9saXN0Y29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBtYWtlUm93RmFjdG9yeSwgUm93LCBpc0NoaWxkVHlwZVJvdywgaXNHcm91cFJvdyB9IGZyb20gJy4uL21vZGVscy9yb3cnO1xuaW1wb3J0IHsgSUNoaWxkUm93IH0gZnJvbSAnLi4vbW9kZWxzL3Jvdy9jaGlsZC1yb3cnO1xuaW1wb3J0IHsgSUdyb3VwRm9vdGVyUm93IH0gZnJvbSAnLi4vbW9kZWxzL3Jvdy9ncm91cC1mb290ZXItcm93JztcbmltcG9ydCB7IElHcm91cFJvdyB9IGZyb20gJy4uL21vZGVscy9yb3cvZ3JvdXAtcm93JztcblxuXG5leHBvcnQgY2xhc3MgRGF0YUNvbnRyb2xsZXIge1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3Zpc2libGVSb3dzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Um93W10+KFtdKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcm93c1JlbW92ZWQkID0gbmV3IFN1YmplY3Q8Um93W10+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlbW90ZVJvd3NDaGFuZ2UkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBwcml2YXRlIF9zdG9yZSA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSBfcm93c1N0YWNrOiBSb3dbXSA9IFtdO1xuICBwcml2YXRlIF9vcGVyYXRpb246IEZzTGlzdFN0YXRlO1xuXG4gIHByaXZhdGUgX2dyb3VwQnlGbjogKHJvdykgPT4gYW55W107XG4gIHByaXZhdGUgX2Zvb3RlclJvd0ZuOiAoXG4gICAgcm93OiB7IFtrZXk6IHN0cmluZ106IGFueSB9LFxuICAgIGdyb3VwOiB7XG4gICAgICBba2V5OiBzdHJpbmddOiBhbnksXG4gICAgICBjaGlsZHJlbjoge1xuICAgICAgICBba2V5OiBzdHJpbmddOiBhbnlcbiAgICAgIH1bXSxcbiAgICB9XG4gICkgPT4gYm9vbGVhbjtcbiAgcHJpdmF0ZSBfY29tcGFyZUJ5Rm46IChncm91cCkgPT4gYW55O1xuICBwcml2YXRlIF9pbml0aWFsRXhwYW5kID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfZ3JvdXBFbmFibGVkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBfbG9hZE1vcmVFbmFibGVkOiBib29sZWFuO1xuXG4gIHByaXZhdGUgX2hhc0RhdGEgPSBmYWxzZTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcHVibGljIGdldCB2aXNpYmxlUm93c0RhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZVJvd3MubWFwKChyb3cpID0+IHJvdy5kYXRhKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcm93c1N0YWNrKCkge1xuICAgIHJldHVybiB0aGlzLl9yb3dzU3RhY2suc2xpY2UoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZ3JvdXBFbmFibGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9ncm91cEVuYWJsZWQ7XG4gIH1cblxuICBwdWJsaWMgc2V0IGdyb3VwRW5hYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2dyb3VwRW5hYmxlZCA9IHZhbHVlO1xuICB9XG5cbiAgcHVibGljIGdldCByZW1vdGVSb3dzQ2hhbmdlJCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVtb3RlUm93c0NoYW5nZSQucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcm93c1JlbW92ZWQkKCkge1xuICAgIHJldHVybiB0aGlzLl9yb3dzUmVtb3ZlZCQucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaGFzRGF0YSgpIHtcbiAgICByZXR1cm4gdGhpcy5faGFzRGF0YTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgb3BlcmF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl9vcGVyYXRpb247XG4gIH1cblxuICBwdWJsaWMgZ2V0IHZpc2libGVSb3dzJCgpOiBPYnNlcnZhYmxlPFJvd1tdPiB7XG4gICAgcmV0dXJuIHRoaXMuX3Zpc2libGVSb3dzJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgdmlzaWJsZVJvd3ModmFsdWU6IGFueVtdKSB7XG4gICAgdGhpcy5fdmlzaWJsZVJvd3MkLm5leHQodmFsdWUpO1xuICAgIHRoaXMuX2hhc0RhdGEgPSB0aGlzLnZpc2libGVSb3dzLmxlbmd0aCA+IDA7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHZpc2libGVSb3dzKCkge1xuICAgIHJldHVybiB0aGlzLl92aXNpYmxlUm93cyQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdmlzaWJsZVJvd3NDb3VudCgpIHtcbiAgICByZXR1cm4gdGhpcy52aXNpYmxlUm93cy5sZW5ndGg7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGhhc0dyb3VwcygpIHtcbiAgICByZXR1cm4gdGhpcy5fY29tcGFyZUJ5Rm4gJiYgdGhpcy5fZ3JvdXBCeUZuO1xuICB9XG5cbiAgcHVibGljIGdldCByZW9yZGVyRGF0YSgpIHtcbiAgICByZXR1cm4gdGhpcy5fcm93c1N0YWNrXG4gICAgICAubWFwKChyb3cpID0+IHJvdy5yZW9yZGVyRGF0YSgpKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRHcm91cENvbmZpZyhncm91cDogRnNMaXN0R3JvdXBDb25maWcpIHtcbiAgICBpZiAoZ3JvdXApIHtcbiAgICAgIHRoaXMuX2dyb3VwQnlGbiA9IGdyb3VwLmdyb3VwQnk7XG4gICAgICB0aGlzLl9jb21wYXJlQnlGbiA9IGdyb3VwLmNvbXBhcmVCeTtcbiAgICAgIHRoaXMuX2Zvb3RlclJvd0ZuID0gZ3JvdXAuZm9vdGVyIHx8ICgoKSA9PiBmYWxzZSk7XG4gICAgICB0aGlzLl9pbml0aWFsRXhwYW5kID0gZ3JvdXAuaW5pdGlhbEV4cGFuZCA/PyB0cnVlO1xuXG4gICAgICAvLyBncm91cCBtb2RlIGVuYWJsZWQgYnkgZGVmYXVsdFxuICAgICAgdGhpcy5fZ3JvdXBFbmFibGVkID0gKGdyb3VwLmVuYWJsZWQgIT09IHVuZGVmaW5lZClcbiAgICAgICAgPyBncm91cC5lbmFibGVkXG4gICAgICAgIDogdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0QWRkaXRpb25hbENvbmZpZ3MoY29uZmlnczogeyBsb2FkTW9yZUVuYWJsZWQ6IGJvb2xlYW4gfSkge1xuICAgIHRoaXMuX2xvYWRNb3JlRW5hYmxlZCA9IGNvbmZpZ3MubG9hZE1vcmVFbmFibGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJvd3Mgd2hhdCB3YXMgcmVjZWl2ZWQgZnJvbSBmZXRjaCBmdW5jdGlvblxuICAgKiBAcGFyYW0gcm93c1xuICAgKi9cbiAgcHVibGljIHNldFJvd3NGcm9tUmVzcG9uc2Uocm93czogYW55W10pIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLl9vcGVyYXRpb24gPT09IEZzTGlzdFN0YXRlLkxvYWRNb3JlIHx8XG4gICAgICAgICh0aGlzLl9vcGVyYXRpb24gPT09IEZzTGlzdFN0YXRlLlBhZ2VDaGFuZ2UgJiYgdGhpcy5fbG9hZE1vcmVFbmFibGVkKVxuICAgICkge1xuICAgICAgdGhpcy5fZXh0ZW5kUm93c1N0YWNrKHJvd3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl91cGRhdGVSb3dzU3RhY2socm93cyk7XG4gICAgfVxuXG4gICAgdGhpcy5fb3BlcmF0aW9uID0gRnNMaXN0U3RhdGUuSWRsZTtcblxuICAgIHRoaXMuX3VwZGF0ZVZpc2libGVSb3dzKCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGN1cnJlbnQgb3BlcmF0aW9uIGZvciBsaXN0IGRhdGEgZmxvd1xuICAgKiBAcGFyYW0gdmFsdWVcbiAgICovXG4gIHB1YmxpYyBzZXRPcGVyYXRpb24odmFsdWU6IEZzTGlzdFN0YXRlKSB7XG4gICAgdGhpcy5fb3BlcmF0aW9uID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHJvd3MgZnJvbSB2aXNpYmxlXG4gICAqL1xuICBwdWJsaWMgY2xlYXJSb3dzKCkge1xuICAgIHRoaXMudmlzaWJsZVJvd3MgPSBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBsYWNlIGRhdGEgZm9yIHNwZWNpZmllZCByb3dcbiAgICogQHBhcmFtIHRhcmdldFJvd1xuICAgKiBAcGFyYW0gdHJhY2tCeVxuICAgKi9cbiAgcHVibGljIHJlcGxhY2VEYXRhKFxuICAgIHRhcmdldFJvdzogRnNMaXN0QWJzdHJhY3RSb3csXG4gICAgdHJhY2tCeTogRnNMaXN0VHJhY2tCeVRhcmdldFJvd0ZuLFxuICApOiBib29sZWFuIHtcbiAgICBjb25zdCByb3dJbmRleCA9IHRoaXMuX3Jvd3NTdGFjay5maW5kSW5kZXgoKGxpc3RSb3cpID0+IHtcbiAgICAgIHJldHVybiB0cmFja0J5KGxpc3RSb3cuZGF0YSwgdGFyZ2V0Um93KTtcbiAgICB9KTtcblxuICAgIGlmIChyb3dJbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLl9yb3dzU3RhY2tbcm93SW5kZXhdID0gbWFrZVJvd0ZhY3RvcnkodGFyZ2V0Um93LCBSb3dUeXBlLlNpbXBsZSk7XG4gICAgdGhpcy5fdXBkYXRlVmlzaWJsZVJvd3MoKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBkYXRhIGZvciBzcGVjaWZpZWQgcm93XG4gICAqIEBwYXJhbSByb3dzXG4gICAqIEBwYXJhbSB0cmFja0J5XG4gICAqL1xuICBwdWJsaWMgdXBkYXRlRGF0YShcbiAgICByb3dzOiBGc0xpc3RBYnN0cmFjdFJvdyB8IEZzTGlzdEFic3RyYWN0Um93W10sXG4gICAgdHJhY2tCeT86IEZzTGlzdFRyYWNrQnlUYXJnZXRSb3dGbixcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocm93cykpIHtcbiAgICAgIGxldCB1cGRhdGVTdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgIHJvd3MuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5fdXBkYXRlUm93KGl0ZW0sIHRyYWNrQnkpKSB7XG4gICAgICAgICAgdXBkYXRlU3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLl91cGRhdGVWaXNpYmxlUm93cygpO1xuXG4gICAgICByZXR1cm4gdXBkYXRlU3VjY2VzcztcbiAgICB9XG4gICAgY29uc3QgdXBkYXRlZCA9IHRoaXMuX3VwZGF0ZVJvdyhyb3dzLCB0cmFja0J5KTtcblxuICAgIHRoaXMuX3VwZGF0ZVZpc2libGVSb3dzKCk7XG5cbiAgICByZXR1cm4gdXBkYXRlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgZGF0YSBmb3Igc3BlY2lmaWVkIHJvd1xuICAgKiBAcGFyYW0gZGF0YVxuICAgKi9cbiAgcHVibGljIHJlbW92ZURhdGEoXG4gICAgZGF0YTogRnNMaXN0QWJzdHJhY3RSb3cgfCBGc0xpc3RBYnN0cmFjdFJvd1tdIHwgRnNMaXN0VHJhY2tCeVRhcmdldFJvd0ZuLFxuICApOiBib29sZWFuIHtcbiAgICBjb25zdCByZW1vdmVkUm93cyA9IFtdO1xuXG4gICAgY29uc3QgZGVmYXVsdFRyYWNrQnkgPSAocm93LCB0YXJnZXQpID0+IHtcbiAgICAgIHJldHVybiByb3cgPT09IHRhcmdldDtcbiAgICB9O1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgIC8vXG4gICAgICBkYXRhLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgcmVtb3ZlZFJvd3MucHVzaCguLi50aGlzLl9yZW1vdmVSb3coaXRlbSwgZGVmYXVsdFRyYWNrQnkpKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoaXNGdW5jdGlvbihkYXRhKSkge1xuICAgICAgcmVtb3ZlZFJvd3MucHVzaCguLi50aGlzLl9yZW1vdmVSb3cobnVsbCwgKGRhdGEgYXMgRnNMaXN0VHJhY2tCeVRhcmdldFJvd0ZuKSkpO1xuICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoZGF0YSkpIHtcbiAgICAgIHJlbW92ZWRSb3dzLnB1c2goLi4udGhpcy5fcmVtb3ZlUm93KGRhdGEsIGRlZmF1bHRUcmFja0J5KSk7XG4gICAgfVxuXG4gICAgaWYgKHJlbW92ZWRSb3dzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuX3VwZGF0ZVZpc2libGVSb3dzKCk7XG5cbiAgICAgIHRoaXMuX3Jvd3NSZW1vdmVkJC5uZXh0KHJlbW92ZWRSb3dzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gISFyZW1vdmVkUm93cy5sZW5ndGg7XG4gIH1cblxuICBwdWJsaWMgc3dhcFJvd3Mocm93MSwgcm93Miwgc2VsZWN0ZWRSb3dzPzogUm93W10sIGlzTXVsdGlwbGVEcmFnID0gZmFsc2UpIHtcbiAgICBjb25zdCByb3dzU3RhY2sgPSB0aGlzLl9yb3dzU3RhY2s7XG4gICAgY29uc3Qgcm93MUdsb2JhbEluZGV4ID0gcm93c1N0YWNrLmluZGV4T2Yocm93MSk7XG4gICAgY29uc3Qgcm93Mkdsb2JhbEluZGV4ID0gcm93c1N0YWNrLmluZGV4T2Yocm93Mik7XG5cbiAgICBjb25zdCB0bXBFbCA9IHJvd3NTdGFja1tyb3cxR2xvYmFsSW5kZXhdO1xuICAgIHJvd3NTdGFja1tyb3cxR2xvYmFsSW5kZXhdID0gcm93c1N0YWNrW3JvdzJHbG9iYWxJbmRleF07XG4gICAgcm93c1N0YWNrW3JvdzJHbG9iYWxJbmRleF0gPSB0bXBFbDtcblxuICAgIGlmIChpc011bHRpcGxlRHJhZyAmJiBBcnJheS5pc0FycmF5KHNlbGVjdGVkUm93cykpIHtcbiAgICAgIGlmICghc2VsZWN0ZWRSb3dzLmluY2x1ZGVzKHJvdzEpKSB7XG4gICAgICAgIHNlbGVjdGVkUm93cyA9IFtyb3cxLCAuLi5zZWxlY3RlZFJvd3NdO1xuICAgICAgfVxuXG4gICAgICBzZWxlY3RlZFJvd3NcbiAgICAgICAgLmZpbHRlcigoc2VsZWN0ZWRSb3cpID0+IHtcbiAgICAgICAgICByZXR1cm4gc2VsZWN0ZWRSb3cgIT09IHJvdzE7XG4gICAgICAgIH0pXG4gICAgICAgIC5mb3JFYWNoKChzZWxlY3RlZFJvdykgPT4ge1xuICAgICAgICAgIGNvbnN0IGlkeCA9IHJvd3NTdGFjay5pbmRleE9mKHNlbGVjdGVkUm93KTtcbiAgICAgICAgICByb3dzU3RhY2suc3BsaWNlKGlkeCwgMSk7XG4gICAgICAgIH0pO1xuXG4gICAgICBjb25zdCBpbmRleFRvSW5zZXJ0QWZ0ZXIgPSByb3dzU3RhY2suaW5kZXhPZih0bXBFbCk7XG5cbiAgICAgIHJvd3NTdGFjay5zcGxpY2UoaW5kZXhUb0luc2VydEFmdGVyLCAxKTtcblxuICAgICAgc2VsZWN0ZWRSb3dzLmZvckVhY2goKHNlbGVjdGVkUm93LCBvZmZzZXQpID0+IHtcbiAgICAgICAgcm93c1N0YWNrLnNwbGljZShpbmRleFRvSW5zZXJ0QWZ0ZXIgKyBvZmZzZXQsIDAsIHNlbGVjdGVkUm93KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuX3Jvd3NTdGFjayA9IFsuLi5yb3dzU3RhY2tdO1xuICB9XG5cbiAgcHVibGljIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5fZGVzdHJveVJvd3NTdGFjaygpO1xuICAgIHRoaXMuX3N0b3JlLmNsZWFyKCk7XG5cbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KG51bGwpO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlUm93R3JvdXAocm93RGF0YSkge1xuICAgIGNvbnN0IHJvdzogSUdyb3VwUm93ID0gdGhpcy52aXNpYmxlUm93cy5maW5kKCh2aXNpYmxlUm93KSA9PiB2aXNpYmxlUm93LmRhdGEgPT09IHJvd0RhdGEgKTtcbiAgICByb3c/LnRvZ2dsZVJvd0V4cGFuZFN0YXR1cygpO1xuXG4gICAgdGhpcy5fdXBkYXRlVmlzaWJsZVJvd3MoKTtcbiAgfVxuXG4gIHB1YmxpYyBmaW5pc2hSZW9yZGVyKCk6IHZvaWQge1xuICAgIC8vIFRPRE8gZml4bWUgcmVtb3ZlIG9yIGltcHJvdmVcbiAgICBpZiAodGhpcy5ncm91cEVuYWJsZWQpIHtcbiAgICAgIGxldCBncm91cDogSUdyb3VwUm93O1xuXG4gICAgICB0aGlzLl9yb3dzU3RhY2tcbiAgICAgICAgLmZvckVhY2goKHJvdywgaW5kZXgpID0+IHtcbiAgICAgICAgICBpZiAoaXNHcm91cFJvdyhyb3cpICYmIHJvdyAhPT0gZ3JvdXApIHtcbiAgICAgICAgICAgIGdyb3VwID0gcm93O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByb3cuaW5kZXggPSBpbmRleCAtIHRoaXMuX3Jvd3NTdGFjay5pbmRleE9mKGdyb3VwKSAtIDE7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLl91cGRhdGVWaXNpYmxlUm93cygpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlUm93c1N0YWNrKHJvd3MpIHtcbiAgICB0aGlzLl9kZXN0cm95Um93c1N0YWNrKCk7XG5cbiAgICBpZiAodGhpcy5ncm91cEVuYWJsZWQpIHtcbiAgICAgIHRoaXMuX3N0b3JlLmNsZWFyKCk7XG4gICAgICB0aGlzLl9yb3dzU3RhY2sgPSBbLi4udGhpcy5fZ3JvdXBSb3dzQnkocm93cyldO1xuICAgIH0gZWxzZSB7XG4gICAgICByb3dzID0gcm93cy5tYXAoKHJvdykgPT4ge1xuICAgICAgICByZXR1cm4gbWFrZVJvd0ZhY3Rvcnkocm93LCBSb3dUeXBlLlNpbXBsZSk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuX3Jvd3NTdGFjayA9IFsuLi5yb3dzXTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9leHRlbmRSb3dzU3RhY2socm93cykge1xuICAgIGlmICh0aGlzLmdyb3VwRW5hYmxlZCkge1xuICAgICAgdGhpcy5fcm93c1N0YWNrID0gWy4uLnRoaXMuX2dyb3VwUm93c0J5KHJvd3MpXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcm93cyA9IHJvd3MubWFwKChyb3cpID0+IHtcbiAgICAgICAgcmV0dXJuIG1ha2VSb3dGYWN0b3J5KHJvdywgUm93VHlwZS5TaW1wbGUpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLl9yb3dzU3RhY2sgPSBbLi4udGhpcy5fcm93c1N0YWNrLCAuLi5yb3dzXTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9kZXN0cm95Um93c1N0YWNrKCkge1xuICAgIHRoaXMuX3Jvd3NTdGFjay5mb3JFYWNoKChyb3cpID0+IHJvdy5kZXN0cm95KCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlVmlzaWJsZVJvd3MoKSB7XG4gICAgdGhpcy52aXNpYmxlUm93cyA9IHRoaXMuX3Jvd3NTdGFja1xuICAgICAgLmZpbHRlcigocm93OiBSb3cpID0+IHtcbiAgICAgICAgcmV0dXJuICFpc0NoaWxkVHlwZVJvdyhyb3cpIHx8IHJvdy52aXNpYmxlO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVSb3coXG4gICAgdGFyZ2V0Um93OiBGc0xpc3RBYnN0cmFjdFJvdyxcbiAgICB0cmFja0J5PzogKGxpc3RSb3c6IEZzTGlzdEFic3RyYWN0Um93LCB0YXJnZXRSb3c/OiBGc0xpc3RBYnN0cmFjdFJvdykgPT4gYm9vbGVhbikge1xuXG4gICAgaWYgKHRyYWNrQnkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdHJhY2tCeSA9IChyb3csIHRhcmdldCkgPT4ge1xuICAgICAgICByZXR1cm4gcm93ID09PSB0YXJnZXQ7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHRhcmdldEluZGV4ID0gdGhpcy5fcm93c1N0YWNrLmZpbmRJbmRleCgobGlzdFJvdykgPT4gdHJhY2tCeShsaXN0Um93LmRhdGEsIHRhcmdldFJvdykpO1xuXG4gICAgaWYgKHRhcmdldEluZGV4ICE9PSAtMSkge1xuICAgICAgY29uc3QgdXBkYXRlVGFyZ2V0ID0gdGhpcy5fcm93c1N0YWNrW3RhcmdldEluZGV4XTtcbiAgICAgIGNvbnN0IHVwZGF0ZWREYXRhID0geyAuLi51cGRhdGVUYXJnZXQuZGF0YSwgLi4udGFyZ2V0Um93IH07XG5cbiAgICAgIHRoaXMuX3Jvd3NTdGFja1t0YXJnZXRJbmRleF0gPSBtYWtlUm93RmFjdG9yeShcbiAgICAgICAgdXBkYXRlZERhdGEsXG4gICAgICAgIHVwZGF0ZVRhcmdldC50eXBlLFxuICAgICAgICB7XG4gICAgICAgICAgcGFyZW50OiAodXBkYXRlVGFyZ2V0IGFzIElDaGlsZFJvdykucGFyZW50LFxuICAgICAgICAgIGluaXRpYWxFeHBhbmQ6ICh1cGRhdGVUYXJnZXQgYXMgSUdyb3VwUm93KS5leHBhbmRlZCxcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgcm93IGZyb21cbiAgICogQHBhcmFtIHRhcmdldFJvd1xuICAgKiBAcGFyYW0gdHJhY2tCeVxuICAgKi9cbiAgcHJpdmF0ZSBfcmVtb3ZlUm93KFxuICAgIHRhcmdldFJvdzogRnNMaXN0QWJzdHJhY3RSb3cgfCBudWxsLFxuICAgIHRyYWNrQnk/OiBGc0xpc3RUcmFja0J5VGFyZ2V0Um93Rm4sXG4gICkge1xuXG4gICAgY29uc3Qgcm93cyA9IHRoaXMuX3Jvd3NTdGFjaztcbiAgICBjb25zdCByZW1vdmVkUm93cyA9IFtdO1xuXG4gICAgcm93cy5mb3JFYWNoKChsaXN0Um93LCBpbmRleCkgPT4ge1xuICAgICAgaWYgKHRyYWNrQnkobGlzdFJvdy5kYXRhLCB0YXJnZXRSb3cpKSB7XG4gICAgICAgIGNvbnN0IHJlbW92ZWRSb3cgPSByb3dzLnNwbGljZShpbmRleCwgMSk7XG5cbiAgICAgICAgcmVtb3ZlZFJvd3MucHVzaChyZW1vdmVkUm93KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiByZW1vdmVkUm93cztcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGxpdCBleGlzdGluZyByb3dzIGJ5IGdyb3VwcyBhbmQgc3RvcmUgdGhlbSBmb3IgZnV0dXJlIHVzZVxuICAgKi9cbiAgcHJpdmF0ZSBfZ3JvdXBSb3dzQnkocm93cykge1xuICAgIGlmICghdGhpcy5fZ3JvdXBCeUZuIHx8ICF0aGlzLl9jb21wYXJlQnlGbikge1xuICAgICAgcmV0dXJuIHJvd3M7XG4gICAgfVxuXG4gICAgY29uc3QgZ3JvdXBSb3dzOiBJR3JvdXBSb3dbXSA9IFtdO1xuXG4gICAgcm93cy5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgIGNvbnN0IGdyb3VwRGF0YSA9IHRoaXMuX2dyb3VwQnlGbihyb3cpO1xuICAgICAgY29uc3QgZ3JvdXBLZXkgPSB0aGlzLl9jb21wYXJlQnlGbihncm91cERhdGEpO1xuXG4gICAgICBsZXQgZ3JvdXA6IElHcm91cFJvdyA9IHRoaXMuX3N0b3JlLmdldChncm91cEtleSk7XG5cbiAgICAgIGlmICghZ3JvdXApIHtcbiAgICAgICAgZ3JvdXAgPSBtYWtlUm93RmFjdG9yeShcbiAgICAgICAgICBncm91cERhdGEsXG4gICAgICAgICAgUm93VHlwZS5Hcm91cCxcbiAgICAgICAgICB7IGluaXRpYWxFeHBhbmQ6IHRoaXMuX2luaXRpYWxFeHBhbmQgfSxcbiAgICAgICAgKSBhcyBJR3JvdXBSb3c7XG5cbiAgICAgICAgZ3JvdXAuaW5kZXggPSBncm91cFJvd3MubGVuZ3RoO1xuICAgICAgICBncm91cFJvd3MucHVzaChncm91cCk7XG5cbiAgICAgICAgdGhpcy5fc3RvcmUuc2V0KGdyb3VwS2V5LCBncm91cCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNoaWxkUm93ID0gbWFrZVJvd0ZhY3Rvcnkocm93LCBSb3dUeXBlLkdyb3VwQ2hpbGQsIHsgcGFyZW50OiBncm91cCB9KSBhcyBJQ2hpbGRSb3c7XG4gICAgICBncm91cC5jaGlsZHJlbi5wdXNoKGNoaWxkUm93KTtcbiAgICB9KTtcblxuICAgIGdyb3VwUm93cy5mb3JFYWNoKChncm91cFJvdykgPT4ge1xuICAgICAgY29uc3QgZm9vdGVySW5kZXggPSBncm91cFJvdy5jaGlsZHJlblxuICAgICAgICAuZmluZEluZGV4KChyb3cpID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fZm9vdGVyUm93Rm4ocm93LmRhdGEsIHtcbiAgICAgICAgICAgIC4uLmdyb3VwUm93LmRhdGEsXG4gICAgICAgICAgICBjaGlsZHJlbjogZ3JvdXBSb3cuY2hpbGRyZW5EYXRhLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgaWYgKGZvb3RlckluZGV4ICE9PSAtMSkge1xuICAgICAgICBjb25zdCBmb290ZXJSb3cgPSBncm91cFJvdy5jaGlsZHJlbi5zcGxpY2UoZm9vdGVySW5kZXgsIGZvb3RlckluZGV4ICsgMSlbMF07XG4gICAgICAgIGNvbnN0IG5ld1JvdyA9IG1ha2VSb3dGYWN0b3J5KGZvb3RlclJvdy5kYXRhLCBSb3dUeXBlLkdyb3VwRm9vdGVyLCB7IHBhcmVudDogZ3JvdXBSb3d9KTtcbiAgICAgICAgZ3JvdXBSb3cuY2hpbGRyZW4ucHVzaChuZXdSb3cgYXMgSUdyb3VwRm9vdGVyUm93KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuX3N0b3JlLnZhbHVlcygpKVxuICAgICAgLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiB7XG4gICAgICAgIGlmIChpc0dyb3VwUm93KGl0ZW0pKSB7XG4gICAgICAgICAgYWNjLnB1c2goaXRlbSwgLi4uaXRlbS5jaGlsZHJlbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWNjLnB1c2goaXRlbSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwgW10pO1xuICB9XG59XG4iXX0=
|