@fundamental-ngx/cdk 0.46.0-rc.24 → 0.46.0-rc.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/utils/drag-and-drop/dnd-list/dnd-list.directive.mjs +21 -19
- package/esm2022/utils/pipes/is-compact.pipe.mjs +2 -2
- package/fesm2022/fundamental-ngx-cdk-utils.mjs +19 -17
- package/fesm2022/fundamental-ngx-cdk-utils.mjs.map +1 -1
- package/fundamental-ngx-cdk-v0.46.0-rc.26.tgz +0 -0
- package/package.json +2 -2
- package/utils/drag-and-drop/dnd-list/dnd-list.directive.d.ts +7 -7
- package/fundamental-ngx-cdk-v0.46.0-rc.24.tgz +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ContentChildren, Directive, EventEmitter, forwardRef, HostBinding, Input, Output, QueryList } from '@angular/core';
|
|
2
2
|
import { merge, Subject } from 'rxjs';
|
|
3
|
-
import { startWith,
|
|
3
|
+
import { startWith, take, takeUntil } from 'rxjs/operators';
|
|
4
4
|
import { selectStrategy } from '../../async-strategy';
|
|
5
5
|
import { DND_ITEM, DND_LIST } from '../tokens';
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
@@ -26,8 +26,6 @@ export class DndListDirective {
|
|
|
26
26
|
* Threshold of dragged item over another item to define which type of `dropMode` should be used.
|
|
27
27
|
*/
|
|
28
28
|
this.threshold = 0.3;
|
|
29
|
-
/** @hidden */
|
|
30
|
-
this._replaceMode = false;
|
|
31
29
|
/** Array of items, that will be sorted */
|
|
32
30
|
this.items = [];
|
|
33
31
|
/**
|
|
@@ -42,6 +40,8 @@ export class DndListDirective {
|
|
|
42
40
|
/** Event that is thrown when predicate function returned false. */
|
|
43
41
|
this.dropCancelled = new EventEmitter();
|
|
44
42
|
/** @hidden */
|
|
43
|
+
this._initialClass = 'fd-dnd-list';
|
|
44
|
+
/** @hidden */
|
|
45
45
|
this._closestItemIndex = null;
|
|
46
46
|
/** @hidden */
|
|
47
47
|
this._closestItemPosition = null;
|
|
@@ -52,8 +52,6 @@ export class DndListDirective {
|
|
|
52
52
|
/** @hidden */
|
|
53
53
|
this._draggable = true;
|
|
54
54
|
/** @hidden */
|
|
55
|
-
this._initialClass = 'fd-dnd-list';
|
|
56
|
-
/** @hidden */
|
|
57
55
|
this._linesRemoved = true;
|
|
58
56
|
/** @hidden */
|
|
59
57
|
this._indicatorsRemoved = true;
|
|
@@ -68,13 +66,29 @@ export class DndListDirective {
|
|
|
68
66
|
/** @hidden */
|
|
69
67
|
ngAfterContentInit() {
|
|
70
68
|
this._changeDraggableState(this._draggable);
|
|
71
|
-
this.dndItems.changes
|
|
69
|
+
this.dndItems.changes
|
|
70
|
+
.pipe(startWith(null), takeUntil(this._onDestroy$))
|
|
71
|
+
.subscribe(() => this.refreshQueryList());
|
|
72
72
|
}
|
|
73
73
|
/** @hidden */
|
|
74
74
|
ngOnDestroy() {
|
|
75
75
|
this._onDestroy$.next();
|
|
76
76
|
this._onDestroy$.complete();
|
|
77
77
|
}
|
|
78
|
+
/**
|
|
79
|
+
* Refreshes the indexes of the items.
|
|
80
|
+
*/
|
|
81
|
+
refreshQueryList() {
|
|
82
|
+
const refresh$ = merge(this._refresh$, this._onDestroy$);
|
|
83
|
+
this._refresh$.next();
|
|
84
|
+
this._dndItemReference = this.dndItems.toArray();
|
|
85
|
+
this._changeDraggableState(this._draggable);
|
|
86
|
+
this.dndItems.forEach((item, index) => {
|
|
87
|
+
item.moved.pipe(takeUntil(refresh$)).subscribe((position) => this.onMove(position, index));
|
|
88
|
+
item.started.pipe(takeUntil(refresh$)).subscribe(() => this.dragStart(index));
|
|
89
|
+
item.released.pipe(takeUntil(refresh$)).subscribe(async () => await this.dragEnd(index));
|
|
90
|
+
});
|
|
91
|
+
}
|
|
78
92
|
/** Method called when the item is being moved by 1 px */
|
|
79
93
|
onMove(mousePosition, draggedItemIndex) {
|
|
80
94
|
/** Temporary object, to store lowest distance values */
|
|
@@ -255,18 +269,6 @@ export class DndListDirective {
|
|
|
255
269
|
this._indicatorsRemoved = false;
|
|
256
270
|
this._dndItemReference[closestItemIndex].createReplaceIndicator();
|
|
257
271
|
}
|
|
258
|
-
/** @hidden */
|
|
259
|
-
_refreshQueryList() {
|
|
260
|
-
const refresh$ = merge(this._refresh$, this._onDestroy$);
|
|
261
|
-
this._refresh$.next();
|
|
262
|
-
this._dndItemReference = this.dndItems.toArray();
|
|
263
|
-
this._changeDraggableState(this._draggable);
|
|
264
|
-
this.dndItems.forEach((item, index) => {
|
|
265
|
-
item.moved.pipe(takeUntil(refresh$)).subscribe((position) => this.onMove(position, index));
|
|
266
|
-
item.started.pipe(takeUntil(refresh$)).subscribe(() => this.dragStart(index));
|
|
267
|
-
item.released.pipe(takeUntil(refresh$)).subscribe(async () => await this.dragEnd(index));
|
|
268
|
-
});
|
|
269
|
-
}
|
|
270
272
|
/**
|
|
271
273
|
* @hidden
|
|
272
274
|
* Return information if an element is placed before the dragged element
|
|
@@ -371,4 +373,4 @@ function getElementBoundaries(coordinates, threshold) {
|
|
|
371
373
|
}
|
|
372
374
|
};
|
|
373
375
|
}
|
|
374
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5kLWxpc3QuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jZGsvc3JjL2xpYi91dGlscy9kcmFnLWFuZC1kcm9wL2RuZC1saXN0L2RuZC1saXN0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsZUFBZSxFQUNmLFNBQVMsRUFFVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFdBQVcsRUFDWCxLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsS0FBSyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFdEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7O0FBa0IvQyxNQUFNLE9BQU8sZ0JBQWdCO0lBSjdCO1FBS0k7OztXQUdHO1FBRUgsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVqQjs7Ozs7Ozs7O1dBU0c7UUFFSCxhQUFRLEdBQWtCLE9BQU8sQ0FBQztRQUVsQzs7V0FFRztRQUVILGNBQVMsR0FBRyxHQUFHLENBQUM7UUFFaEIsY0FBYztRQUNOLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBRTdCLDBDQUEwQztRQUUxQyxVQUFLLEdBQWEsRUFBRSxDQUFDO1FBb0JyQjs7O1dBR0c7UUFFSCw2QkFBd0IsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBRXZELG9EQUFvRDtRQUUzQyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFZLENBQUM7UUFFcEQsb0RBQW9EO1FBRTNDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQWtCLENBQUM7UUFFMUQsbUVBQW1FO1FBRTFE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LENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztJQUNwRSxPQUFPO1FBQ0gsQ0FBQyxFQUFFO1lBQ0MsS0FBSyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTTtZQUNwQyxHQUFHLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJO1NBQ3JDO1FBQ0QsQ0FBQyxFQUFFO1lBQ0MsS0FBSyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTTtZQUNwQyxHQUFHLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJO1NBQ3JDO0tBQ0osQ0FBQztBQUNOLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgbWVyZ2UsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHN0YXJ0V2l0aCwgdGFrZVVudGlsLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgc2VsZWN0U3RyYXRlZ3kgfSBmcm9tICcuLi8uLi9hc3luYy1zdHJhdGVneSc7XG5pbXBvcnQgeyBFbGVtZW50Q2hvcmQsIEZkRHJvcEV2ZW50LCBMaW5rUG9zaXRpb24sIEVsZW1lbnRQb3NpdGlvbiwgRG5kSXRlbSwgRmREbmREcm9wVHlwZSB9IGZyb20gJy4uL2RuZC5pbnRlcmZhY2VzJztcbmltcG9ydCB7IERORF9JVEVNLCBETkRfTElTVCB9IGZyb20gJy4uL3Rva2Vucyc7XG5cbmV4cG9ydCB0eXBlIERyb3BQcmVkaWNhdGU8VD4gPSAoXG4gICAgZHJhZ0l0ZW06IFQsXG4gICAgZHJvcEl0ZW06IFQsXG4gICAgZXZlbnQ6IEZkRHJvcEV2ZW50PFQ+XG4pID0+IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+IHwgT2JzZXJ2YWJsZTxib29sZWFuPjtcbmV4cG9ydCB0eXBlIERyYWdvdmVyUHJlZGljYXRlPFQ+ID0gKFxuICAgIGRyYWdJdGVtOiBULFxuICAgIGRyYWdPdmVySXRlbTogVCxcbiAgICBkcmFnSXRlbUluZGV4OiBudW1iZXIsXG4gICAgZHJhZ092ZXJJdGVtSW5kZXg6IG51bWJlclxuKSA9PiBib29sZWFuO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tmZGtEbmRMaXN0XSwgW2ZkLWRuZC1saXN0XScsXG4gICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBETkRfTElTVCwgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRG5kTGlzdERpcmVjdGl2ZSkgfV1cbn0pXG5leHBvcnQgY2xhc3MgRG5kTGlzdERpcmVjdGl2ZTxUPiBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XG4gICAgLyoqXG4gICAgICogRGVmaW5lcyBpZiB0aGUgZWxlbWVudCBpcyBhbGxvd2VkIHRvIGJlIGRyYWdnZWQgaW4gMiBkaW1lbnNpb25zLFxuICAgICAqIFdoZW4gdHJ1ZSAtIHJlcGxhY2UgaW5kaWNhdG9yIHdpbGwgYmUgZGlzcGxheWVkIHZlcnRpY2FsbHlcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGdyaWRNb2RlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIGRyb3Agc3RyYXRlZ3k6XG4gICAgICogKiBgc2hpZnRgIG1vZGUgd2lsbCBjcmVhdGUgbGluZSBhZnRlciB0aGUgY2xvc2VzdCBkcm9wIGVsZW1lbnQuXG4gICAgICogKiBgZ3JvdXBgIG1vZGUgd2lsbCBjcmVhdGUgcmVwbGFjZSBpbmRpY2F0b3Igb24gYSB3aG9sZSBjbG9zZXN0IGRyb3AgZWxlbWVudC5cbiAgICAgKiAqIGBhdXRvYCBtb2RlIHdpbGwgY3JlYXRlIGEgbGluZSBhZnRlciB0aGUgY2xvc2VzdCBkcm9wIGVsZW1lbnRcbiAgICAgKiBpZiBkcmFnZ2VkIGVsZW1lbnQgY29vcmRpbmF0ZXMgYXJlIHNoaWZ0ZWQgZm9yIDMwJSBmcm9tIHRoZSBjZW50ZXIgb2YgdGhlIGNsb3Nlc3QgZHJvcCBlbGVtZW50LlxuICAgICAqIE90aGVyd2lzZSwgaXQgd2lsbCBjcmVhdGUgcmVwbGFjZSBpbmRpY2F0b3Igb24gYSB3aG9sZSBjbG9zZXN0IGRyb3AgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIGBzaGlmdGAgbW9kZSBpcyB0aGUgZGVmYXVsdC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGRyb3BNb2RlOiBGZERuZERyb3BUeXBlID0gJ3NoaWZ0JztcblxuICAgIC8qKlxuICAgICAqIFRocmVzaG9sZCBvZiBkcmFnZ2VkIGl0ZW0gb3ZlciBhbm90aGVyIGl0ZW0gdG8gZGVmaW5lIHdoaWNoIHR5cGUgb2YgYGRyb3BNb2RlYCBzaG91bGQgYmUgdXNlZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHRocmVzaG9sZCA9IDAuMztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmVwbGFjZU1vZGUgPSBmYWxzZTtcblxuICAgIC8qKiBBcnJheSBvZiBpdGVtcywgdGhhdCB3aWxsIGJlIHNvcnRlZCAqL1xuICAgIEBJbnB1dCgpXG4gICAgaXRlbXM6IEFycmF5PFQ+ID0gW107XG5cbiAgICAvKiogRGVmaW5lcyBpZiBkcmFnIGFuZCBkcm9wIGZlYXR1cmUgc2hvdWxkIGJlIGVuYWJsZWQgZm9yIGxpc3QgaXRlbXMgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBkcmFnZ2FibGUoZHJhZ2dhYmxlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2RyYWdnYWJsZSA9IGRyYWdnYWJsZTtcbiAgICAgICAgdGhpcy5fY2hhbmdlRHJhZ2dhYmxlU3RhdGUoZHJhZ2dhYmxlKTtcbiAgICB9XG5cbiAgICAvKiogUHJlZGljYXRlIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIHdoZXRoZXIgdGhlIGl0ZW0gY2FuIGJlIGRyb3BwZWQgb3ZlciBhbm90aGVyIGl0ZW0uICovXG4gICAgQElucHV0KClcbiAgICBkcm9wUHJlZGljYXRlOiBEcm9wUHJlZGljYXRlPFQ+IHwgdW5kZWZpbmVkO1xuXG4gICAgLyoqXG4gICAgICogUHJlZGljYXRlIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIHdoZXRoZXIgdGhlIGl0ZW0gY2FuIGJlIGRyYWdnZWQgb3ZlciBhbm90aGVyIGl0ZW0uXG4gICAgICogSWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgYGZhbHNlYCwgZHJhZ2dlZCBvdmVyIGl0ZW0gd2lsbCBub3QgYmUgaGlnaGxpZ2h0ZWQsIGFuZCBkcm9wIGV2ZW50IHdpbGwgYmUgY2FuY2VsZWQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBkcmFnb3ZlclByZWRpY2F0ZTogRHJhZ292ZXJQcmVkaWNhdGU8VD4gfCB1bmRlZmluZWQ7XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gYGRyb3BQcmVkaWNhdGVgIGZ1bmN0aW9uIGV2YWx1YXRpb24gY2hhbmdlcy5cbiAgICAgKiBFbWl0cyBgdHJ1ZWAgd2hlbiBldmFsdWF0aW9uIHN0YXJ0ZWQsIGFuZCBgZmFsc2VgIHdoZW4gY29tcGxldGVkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGRyb3BQcmVkaWNhdGVDYWxjdWxhdGluZyA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKiBFdmVudCB0aGF0IGlzIHRocm93biB3aGVuIGl0ZW1zIGFyZSByZW9yZGVyZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBpdGVtc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8QXJyYXk8VD4+KCk7XG5cbiAgICAvKiogRXZlbnQgdGhhdCBpcyB0aHJvd24gd2hlbiB0aGUgaXRlbSBpcyBkcm9wcGVkICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgaXRlbURyb3BwZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZkRHJvcEV2ZW50PFQ+PigpO1xuXG4gICAgLyoqIEV2ZW50IHRoYXQgaXMgdGhyb3duIHdoZW4gcHJlZGljYXRlIGZ1bmN0aW9uIHJldHVybmVkIGZhbHNlLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IGRyb3BDYW5jZWxsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oRE5EX0lURU0pXG4gICAgZG5kSXRlbXM6IFF1ZXJ5TGlzdDxEbmRJdGVtPFQ+PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZWxlbWVudHNDb29yZGluYXRlczogRWxlbWVudENob3JkW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2Nsb3Nlc3RJdGVtSW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jbG9zZXN0SXRlbVBvc2l0aW9uOiAnYmVmb3JlJyB8ICdhZnRlcicgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBBbiBSeEpTIFN1YmplY3QgdGhhdCB3aWxsIGtpbGwgdGhlIGN1cnJlbnQgZGF0YSBzdHJlYW0gKGZvciB1bnN1YnNjcmliaW5nKSAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9yZWZyZXNoJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX29uRGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gICovXG4gICAgcHJpdmF0ZSBfZG5kSXRlbVJlZmVyZW5jZTogRG5kSXRlbVtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kcmFnZ2FibGUgPSB0cnVlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9pbml0aWFsQ2xhc3MgPSAnZmQtZG5kLWxpc3QnO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kZXRlY3RlZERyb3BNb2RlOiAnc2hpZnQnIHwgJ2dyb3VwJztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGluZXNSZW1vdmVkID0gdHJ1ZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW5kaWNhdG9yc1JlbW92ZWQgPSB0cnVlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kcmFnZ2VkSXRlbTogVCB8IHVuZGVmaW5lZDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaWdub3JlRHJvcCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NoYW5nZURyYWdnYWJsZVN0YXRlKHRoaXMuX2RyYWdnYWJsZSk7XG4gICAgICAgIHRoaXMuZG5kSXRlbXMuY2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSwgc3RhcnRXaXRoKDApKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fcmVmcmVzaFF1ZXJ5TGlzdCgpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5fb25EZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgY2FsbGVkIHdoZW4gdGhlIGl0ZW0gaXMgYmVpbmcgbW92ZWQgYnkgMSBweCAqL1xuICAgIG9uTW92ZShtb3VzZVBvc2l0aW9uOiBFbGVtZW50UG9zaXRpb24sIGRyYWdnZWRJdGVtSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICAvKiogVGVtcG9yYXJ5IG9iamVjdCwgdG8gc3RvcmUgbG93ZXN0IGRpc3RhbmNlIHZhbHVlcyAqL1xuICAgICAgICBsZXQgY2xvc2VzdEl0ZW1JbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICAgICAgY29uc3QgY2xvc2VzdERuZEl0ZW0gPSB0aGlzLl9lbGVtZW50c0Nvb3JkaW5hdGVzLmZpbmQoKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAvKiogQ2hlY2sgaWYgYW4gZWxlbWVudCBjYW4gYmUgcmVwbGFjZWQgKi9cbiAgICAgICAgICAgIGlmICghZWxlbWVudC5zdGlja1RvUG9zaXRpb24gJiYgY2xvc2VzdEl0ZW1JbmRleCAhPT0gaW5kZXgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc01vdXNlT25FbGVtZW50ID0gX2lzTW91c2VPbkVsZW1lbnQoZWxlbWVudCwgbW91c2VQb3NpdGlvbik7XG4gICAgICAgICAgICAgICAgaWYgKGlzTW91c2VPbkVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VzdEl0ZW1JbmRleCA9IGluZGV4O1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKCFjbG9zZXN0RG5kSXRlbSkge1xuICAgICAgICAgICAgY2xvc2VzdEl0ZW1JbmRleCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvKiogSWYgdGhlIGNsb3Nlc3QgZWxlbWVudCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgb2xkIG9uZSwgdGhlIG5ldyBvbmUgaXMgcGlja2VkLiBJdCBwcmV2ZW50cyBmcm9tIHBlcmZvcm1hbmNlIGlzc3VlcyAqL1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAoY2xvc2VzdEl0ZW1JbmRleCB8fCBjbG9zZXN0SXRlbUluZGV4ID09PSAwKSAmJlxuICAgICAgICAgICAgKGNsb3Nlc3RJdGVtSW5kZXggIT09IHRoaXMuX2Nsb3Nlc3RJdGVtSW5kZXggfHwgdGhpcy5kcm9wTW9kZSA9PT0gJ2F1dG8nKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuX3JlbW92ZUFsbExpbmVzKCk7XG4gICAgICAgICAgICB0aGlzLl9yZW1vdmVBbGxSZXBsYWNlSW5kaWNhdG9ycygpO1xuICAgICAgICAgICAgdGhpcy5fY2xvc2VzdEl0ZW1JbmRleCA9IGNsb3Nlc3RJdGVtSW5kZXg7XG4gICAgICAgICAgICB0aGlzLl9jbG9zZXN0SXRlbVBvc2l0aW9uID0gdGhpcy5fZWxlbWVudHNDb29yZGluYXRlc1tjbG9zZXN0SXRlbUluZGV4XS5wb3NpdGlvbjtcbiAgICAgICAgICAgIGNvbnN0IGNsb3Nlc3RJdGVtID0gdGhpcy5pdGVtc1t0aGlzLl9jbG9zZXN0SXRlbUluZGV4XTtcbiAgICAgICAgICAgIC8vIElmIGNsb3Nlc3QgaXRlbSBpbmRleCBpcyBzYW1lIGFzIGRyYWdnZWQgaXRlbSwganVzdCByZW1vdmUgaW5kaWNhdG9yc1xuICAgICAgICAgICAgaWYgKGNsb3Nlc3RJdGVtSW5kZXggPT09IGRyYWdnZWRJdGVtSW5kZXgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZW1vdmVBbGxMaW5lcygpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZUFsbFJlcGxhY2VJbmRpY2F0b3JzKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMuZHJhZ292ZXJQcmVkaWNhdGUgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9kcmFnZ2VkSXRlbSAmJlxuICAgICAgICAgICAgICAgICF0aGlzLmRyYWdvdmVyUHJlZGljYXRlKHRoaXMuX2RyYWdnZWRJdGVtLCBjbG9zZXN0SXRlbSwgZHJhZ2dlZEl0ZW1JbmRleCwgdGhpcy5fY2xvc2VzdEl0ZW1JbmRleClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2lnbm9yZURyb3AgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NldERpc2FibGVkSXRlbSh0aGlzLl9jbG9zZXN0SXRlbUluZGV4KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9zZXREaXNhYmxlZEl0ZW0oLTEpO1xuICAgICAgICAgICAgLyoqIEdlbmVyYXRpbmcgbGluZSwgdGhhdCBzaG93cyB3aGVyZSB0aGUgZWxlbWVudCB3aWxsIGJlIHBsYWNlZCwgb24gYSBkcm9wICovXG4gICAgICAgICAgICBpZiAodGhpcy5kcm9wTW9kZSA9PT0gJ2dyb3VwJykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZVJlcGxhY2VJbmRpY2F0b3IodGhpcy5fY2xvc2VzdEl0ZW1JbmRleCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZHJvcE1vZGUgPT09ICdzaGlmdCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVMaW5lKHRoaXMuX2Nsb3Nlc3RJdGVtSW5kZXgsIHRoaXMuX2Nsb3Nlc3RJdGVtUG9zaXRpb24pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3REcm9wTW9kZUluZGljYXRvcihkcmFnZ2VkSXRlbUluZGV4LCBjbG9zZXN0RG5kSXRlbSwgY2xvc2VzdEl0ZW1JbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIGNhbGxlZCB3aGVuIGFuIGVsZW1lbnQgaXMgc3RhcnRlZCB0byBiZSBkcmFnZ2VkICovXG4gICAgZHJhZ1N0YXJ0KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZHJhZ2dlZEl0ZW1FbGVtZW50ID0gdGhpcy5fZG5kSXRlbVJlZmVyZW5jZVtpbmRleF0uZWxlbWVudFJlZjtcbiAgICAgICAgdGhpcy5fZHJhZ2dlZEl0ZW0gPSB0aGlzLml0ZW1zW2luZGV4XTtcbiAgICAgICAgLyoqIENvdW50aW5nIGFsbCB0aGUgZWxlbWVudCdzIGNob3JkcyAqL1xuICAgICAgICB0aGlzLl9lbGVtZW50c0Nvb3JkaW5hdGVzID0gdGhpcy5fZG5kSXRlbVJlZmVyZW5jZS5tYXAoKGl0ZW06IERuZEl0ZW0pID0+XG4gICAgICAgICAgICBpdGVtLmdldEVsZW1lbnRDb29yZGluYXRlcyh0aGlzLl9pc0JlZm9yZShkcmFnZ2VkSXRlbUVsZW1lbnQsIGl0ZW0uZWxlbWVudFJlZiksIHRoaXMuZ3JpZE1vZGUpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCBjYWxsZWQgd2hlbiBhbiBlbGVtZW50IGlzIHJlbGVhc2VkICovXG4gICAgYXN5bmMgZHJhZ0VuZChkcmFnZ2VkSXRlbUluZGV4OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5fZHJhZ2dlZEl0ZW0gPSB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5pdGVtcy5zbGljZSgpO1xuICAgICAgICBjb25zdCByZXBsYWNlZEl0ZW1JbmRleCA9IHRoaXMuX2Nsb3Nlc3RJdGVtSW5kZXg7XG4gICAgICAgIHRoaXMuX3NldERpc2FibGVkSXRlbSgtMSk7XG5cbiAgICAgICAgaWYgKHRoaXMuX2lnbm9yZURyb3ApIHtcbiAgICAgICAgICAgIHRoaXMuX2lnbm9yZURyb3AgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXBsYWNlZEl0ZW1JbmRleCA9PT0gbnVsbCB8fCByZXBsYWNlZEl0ZW1JbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRyYWdnZWREbmRJdGVtID0gdGhpcy5kbmRJdGVtcy5nZXQoZHJhZ2dlZEl0ZW1JbmRleCk/Lml0ZW0gPz8gaXRlbXNbZHJhZ2dlZEl0ZW1JbmRleF07XG4gICAgICAgIGNvbnN0IHJlcGxhY2VkRG5kSXRlbSA9IHRoaXMuZG5kSXRlbXMuZ2V0KHJlcGxhY2VkSXRlbUluZGV4KT8uaXRlbSA/PyBpdGVtc1tyZXBsYWNlZEl0ZW1JbmRleF07XG5cbiAgICAgICAgY29uc3QgcHJlZGljYXRlU3ViaiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cbiAgICAgICAgY29uc3QgZXZ0OiBGZERyb3BFdmVudDxUPiA9IHtcbiAgICAgICAgICAgIHJlcGxhY2VkSXRlbUluZGV4LFxuICAgICAgICAgICAgZHJhZ2dlZEl0ZW1JbmRleCxcbiAgICAgICAgICAgIGl0ZW1zLFxuICAgICAgICAgICAgaW5zZXJ0QXQ6IHRoaXMuX2Nsb3Nlc3RJdGVtUG9zaXRpb24sXG4gICAgICAgICAgICBtb2RlOiB0aGlzLmRyb3BNb2RlICE9PSAnYXV0bycgPyB0aGlzLmRyb3BNb2RlIDogdGhpcy5fZGV0ZWN0ZWREcm9wTW9kZVxuICAgICAgICB9O1xuXG4gICAgICAgIHByZWRpY2F0ZVN1YmoucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQWxsTGluZXMoKTtcbiAgICAgICAgICAgIHRoaXMuX3JlbW92ZUFsbFJlcGxhY2VJbmRpY2F0b3JzKCk7XG5cbiAgICAgICAgICAgIC8qKiBSZXNldCAqL1xuICAgICAgICAgICAgdGhpcy5fZWxlbWVudHNDb29yZGluYXRlcyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fY2xvc2VzdEl0ZW1JbmRleCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLl9jbG9zZXN0SXRlbVBvc2l0aW9uID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRyb3BDYW5jZWxsZWQuZW1pdCgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRyYWdnZWRJdGVtSW5kZXggIT09IHJlcGxhY2VkSXRlbUluZGV4KSB7XG4gICAgICAgICAgICAgICAgaWYgKGRyYWdnZWRJdGVtSW5kZXggPCByZXBsYWNlZEl0ZW1JbmRleCkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gZHJhZ2dlZEl0ZW1JbmRleDsgaSA8IHJlcGxhY2VkSXRlbUluZGV4OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zW2ldID0gaXRlbXNbaSArIDFdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IGRyYWdnZWRJdGVtSW5kZXg7IGkgPiByZXBsYWNlZEl0ZW1JbmRleDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtc1tpXSA9IGl0ZW1zW2kgLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8qKiBSZXBsYWNpbmcgaXRlbXMgKi9cbiAgICAgICAgICAgICAgICBpdGVtc1tyZXBsYWNlZEl0ZW1JbmRleF0gPSBkcmFnZ2VkRG5kSXRlbTtcblxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNDaGFuZ2UuZW1pdChpdGVtcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuaXRlbURyb3BwZWQuZW1pdChldnQpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5kcm9wUHJlZGljYXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZHJvcFByZWRpY2F0ZUNhbGN1bGF0aW5nLmVtaXQodHJ1ZSk7XG4gICAgICAgICAgICBjb25zdCBvYmogPSB0aGlzLmRyb3BQcmVkaWNhdGUoZHJhZ2dlZERuZEl0ZW0sIHJlcGxhY2VkRG5kSXRlbSwgZXZ0KTtcbiAgICAgICAgICAgIGNvbnN0IHN0cmF0ZWd5ID0gc2VsZWN0U3RyYXRlZ3kob2JqKTtcblxuICAgICAgICAgICAgYXdhaXQgc3RyYXRlZ3kuY3JlYXRlU3Vic2NyaXB0aW9uKG9iaiwgKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIHByZWRpY2F0ZVN1YmoubmV4dChyZXN1bHQpO1xuICAgICAgICAgICAgICAgIHRoaXMuZHJvcFByZWRpY2F0ZUNhbGN1bGF0aW5nLmVtaXQoZmFsc2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcmVkaWNhdGVTdWJqLm5leHQodHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldERpc2FibGVkSXRlbShpdGVtSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLmRuZEl0ZW1zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpdGVtLnNldERpc2FibGVkU3RhdGUoaW5kZXggPT09IGl0ZW1JbmRleCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2VsZWN0RHJvcE1vZGVJbmRpY2F0b3IoXG4gICAgICAgIGRyYWdnZWRJdGVtSW5kZXg6IG51bWJlcixcbiAgICAgICAgY2xvc2VzdEl0ZW06IEVsZW1lbnRDaG9yZCB8IHVuZGVmaW5lZCxcbiAgICAgICAgY2xvc2VzdEl0ZW1JbmRleDogbnVtYmVyXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGlmICghY2xvc2VzdEl0ZW0gfHwgIXRoaXMuX2RuZEl0ZW1SZWZlcmVuY2VbZHJhZ2dlZEl0ZW1JbmRleF0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBuZXdEZXRlY3RlZERyb3BNb2RlOiAnc2hpZnQnIHwgJ2dyb3VwJztcbiAgICAgICAgY29uc3QgZHJhZ2dlZEVsbUNvb3JkcyA9XG4gICAgICAgICAgICB0aGlzLl9kbmRJdGVtUmVmZXJlbmNlW2RyYWdnZWRJdGVtSW5kZXhdLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICBjb25zdCBjbG9zZXN0SXRlbUJvdW5kYXJpZXMgPSBnZXRFbGVtZW50Qm91bmRhcmllcyhjbG9zZXN0SXRlbSwgdGhpcy50aHJlc2hvbGQpO1xuICAgICAgICBjb25zdCBkcmFnZ2VkSXRlbVN0YXJ0Q29vcmRzID0gZ2V0RWxlbWVudFN0YXJ0Q29vcmRzKGRyYWdnZWRFbG1Db29yZHMsIGNsb3Nlc3RJdGVtLnBvc2l0aW9uKTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBfYmV0d2VlbihkcmFnZ2VkSXRlbVN0YXJ0Q29vcmRzLngsIGNsb3Nlc3RJdGVtQm91bmRhcmllcy54LnN0YXJ0LCBjbG9zZXN0SXRlbUJvdW5kYXJpZXMueC5lbmQpICYmXG4gICAgICAgICAgICBfYmV0d2VlbihkcmFnZ2VkSXRlbVN0YXJ0Q29vcmRzLnksIGNsb3Nlc3RJdGVtQm91bmRhcmllcy55LnN0YXJ0LCBjbG9zZXN0SXRlbUJvdW5kYXJpZXMueS5lbmQpXG4gICAgICAgICkge1xuICAgICAgICAgICAgbmV3RGV0ZWN0ZWREcm9wTW9kZSA9ICdncm91cCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdEZXRlY3RlZERyb3BNb2RlID0gJ3NoaWZ0JztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXdEZXRlY3RlZERyb3BNb2RlID09PSB0aGlzLl9kZXRlY3RlZERyb3BNb2RlICYmICghdGhpcy5fbGluZXNSZW1vdmVkIHx8ICF0aGlzLl9pbmRpY2F0b3JzUmVtb3ZlZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2RldGVjdGVkRHJvcE1vZGUgPSBuZXdEZXRlY3RlZERyb3BNb2RlO1xuXG4gICAgICAgIGlmICh0aGlzLl9kZXRlY3RlZERyb3BNb2RlID09PSAnc2hpZnQnKSB7XG4gICAgICAgICAgICB0aGlzLl9jcmVhdGVMaW5lKGNsb3Nlc3RJdGVtSW5kZXgsIHRoaXMuX2VsZW1lbnRzQ29vcmRpbmF0ZXNbY2xvc2VzdEl0ZW1JbmRleF0ucG9zaXRpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fY3JlYXRlUmVwbGFjZUluZGljYXRvcihjbG9zZXN0SXRlbUluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmVtb3ZlQWxsTGluZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2xpbmVzUmVtb3ZlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuZG5kSXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4gaXRlbS5yZW1vdmVMaW5lKCkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmVtb3ZlQWxsUmVwbGFjZUluZGljYXRvcnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2luZGljYXRvcnNSZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kbmRJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiBpdGVtLnJlbW92ZVJlcGxhY2VJbmRpY2F0b3IoKSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jcmVhdGVMaW5lKGNsb3Nlc3RJdGVtSW5kZXg6IG51bWJlciwgbGlua1Bvc2l0aW9uOiBMaW5rUG9zaXRpb24pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcmVtb3ZlQWxsTGluZXMoKTtcbiAgICAgICAgdGhpcy5fcmVtb3ZlQWxsUmVwbGFjZUluZGljYXRvcnMoKTtcbiAgICAgICAgdGhpcy5fbGluZXNSZW1vdmVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2RuZEl0ZW1SZWZlcmVuY2VbY2xvc2VzdEl0ZW1JbmRleF0uY3JlYXRlTGluZShsaW5rUG9zaXRpb24sIHRoaXMuZ3JpZE1vZGUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY3JlYXRlUmVwbGFjZUluZGljYXRvcihjbG9zZXN0SXRlbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcmVtb3ZlQWxsTGluZXMoKTtcbiAgICAgICAgdGhpcy5fcmVtb3ZlQWxsUmVwbGFjZUluZGljYXRvcnMoKTtcbiAgICAgICAgdGhpcy5faW5kaWNhdG9yc1JlbW92ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fZG5kSXRlbVJlZmVyZW5jZVtjbG9zZXN0SXRlbUluZGV4XS5jcmVhdGVSZXBsYWNlSW5kaWNhdG9yKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZWZyZXNoUXVlcnlMaXN0KCk6IHZvaWQge1xuICAgICAgICBjb25zdCByZWZyZXNoJCA9IG1lcmdlKHRoaXMuX3JlZnJlc2gkLCB0aGlzLl9vbkRlc3Ryb3kkKTtcbiAgICAgICAgdGhpcy5fcmVmcmVzaCQubmV4dCgpO1xuXG4gICAgICAgIHRoaXMuX2RuZEl0ZW1SZWZlcmVuY2UgPSB0aGlzLmRuZEl0ZW1zLnRvQXJyYXkoKTtcblxuICAgICAgICB0aGlzLl9jaGFuZ2VEcmFnZ2FibGVTdGF0ZSh0aGlzLl9kcmFnZ2FibGUpO1xuXG4gICAgICAgIHRoaXMuZG5kSXRlbXMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGl0ZW0ubW92ZWQucGlwZSh0YWtlVW50aWwocmVmcmVzaCQpKS5zdWJzY3JpYmUoKHBvc2l0aW9uOiBFbGVtZW50UG9zaXRpb24pID0+IHRoaXMub25Nb3ZlKHBvc2l0aW9uLCBpbmRleCkpO1xuICAgICAgICAgICAgaXRlbS5zdGFydGVkLnBpcGUodGFrZVVudGlsKHJlZnJlc2gkKSkuc3Vic2NyaWJlKCgpID0+IHRoaXMuZHJhZ1N0YXJ0KGluZGV4KSk7XG4gICAgICAgICAgICBpdGVtLnJlbGVhc2VkLnBpcGUodGFrZVVudGlsKHJlZnJlc2gkKSkuc3Vic2NyaWJlKGFzeW5jICgpID0+IGF3YWl0IHRoaXMuZHJhZ0VuZChpbmRleCkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAgQGhpZGRlblxuICAgICAqIFJldHVybiBpbmZvcm1hdGlvbiBpZiBhbiBlbGVtZW50IGlzIHBsYWNlZCBiZWZvcmUgdGhlIGRyYWdnZWQgZWxlbWVudFxuICAgICAqL1xuICAgIHByaXZhdGUgX2lzQmVmb3JlKGRyYWdnZWRFbGVtZW50OiBFbGVtZW50UmVmLCB0YXJnZXRFbGVtZW50OiBFbGVtZW50UmVmKTogYm9vbGVhbiB7XG4gICAgICAgIC8qKiBTb21ldGltZXMgdGhlIGVsZW1lbnRzIGFyZSBub3Qgc3RyYWlnaHQgaW4gb25lIGNvbHVtbiwgdGhhdCdzIHdoeSBvZmZzZXQgaXMgbmVlZGVkICovXG4gICAgICAgIGNvbnN0IFZFUlRJQ0FMX09GRlNFVCA9IDIwO1xuXG4gICAgICAgIC8qKiBEaXN0YW5jZXMgZnJvbSB0aGUgdG9wIG9mIHRoZSBzY3JlZW4gKi9cbiAgICAgICAgY29uc3QgZHJhZ2dlZEVsZW1lbnRCb3VuZCA9IGRyYWdnZWRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IHRhcmdldEVsZW1lbnRCb3VuZCA9IHRhcmdldEVsZW1lbnQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICBpZiAoZHJhZ2dlZEVsZW1lbnRCb3VuZC50b3AgLSB0YXJnZXRFbGVtZW50Qm91bmQudG9wID4gVkVSVElDQUxfT0ZGU0VUKSB7XG4gICAgICAgICAgICAvKiogSWYgYW4gZWxlbWVudCBpcyBoaWdoZXIgdGhhbiB0aGUgZHJhZ2dlZCBlbGVtZW50LCBpdCdzIGZvciBzdXJlIGJlZm9yZSAqL1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0RWxlbWVudEJvdW5kLnRvcCAtIGRyYWdnZWRFbGVtZW50Qm91bmQudG9wID4gVkVSVElDQUxfT0ZGU0VUKSB7XG4gICAgICAgICAgICAvKiogSWYgYW4gZWxlbWVudCBpcyBsb3dlciB0aGFuIHRoZSBkcmFnZ2VkIGVsZW1lbnQsIGl0J3MgZm9yIHN1cmUgYWZ0ZXIgKi9cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8qKiBJZiBlbGVtZW50cyBhcmUgaW4gc2FtZSBsZXZlbCwgdGhlIGhvcml6b250YWwgcG9zaXRpb24gZGVjaWRlcyBpZiBpdCdzIGJlZm9yZS9hZnRlciAqL1xuICAgICAgICAgICAgcmV0dXJuIGRyYWdnZWRFbGVtZW50Qm91bmQubGVmdCAtIHRhcmdldEVsZW1lbnRCb3VuZC5sZWZ0ID4gMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2hhbmdlRHJhZ2dhYmxlU3RhdGUoZHJhZ2dhYmxlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRuZEl0ZW1zKSB7XG4gICAgICAgICAgICB0aGlzLmRuZEl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICBpdGVtLmxpc3REcmFnZ2FibGUgPSBkcmFnZ2FibGU7XG4gICAgICAgICAgICAgICAgaXRlbS5jaGFuZ2VDREtEcmFnU3RhdGUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBfaXNNb3VzZU9uRWxlbWVudChlbGVtZW50OiBFbGVtZW50Q2hvcmQsIG1vdXNlUG9zaXRpb246IEVsZW1lbnRQb3NpdGlvbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHN0YXJ0WCA9IGVsZW1lbnQueDtcbiAgICBjb25zdCBlbmRYID0gZWxlbWVudC54ICsgZWxlbWVudC53aWR0aDtcblxuICAgIGNvbnN0IHN0YXJ0WSA9IGVsZW1lbnQueTtcbiAgICBjb25zdCBlbmRZID0gZWxlbWVudC55ICsgZWxlbWVudC5oZWlnaHQ7XG5cbiAgICByZXR1cm4gX2JldHdlZW4obW91c2VQb3NpdGlvbi54LCBzdGFydFgsIGVuZFgpICYmIF9iZXR3ZWVuKG1vdXNlUG9zaXRpb24ueSwgc3RhcnRZLCBlbmRZKTtcbn1cblxuZnVuY3Rpb24gX2JldHdlZW4oeDogbnVtYmVyLCBtaW46IG51bWJlciwgbWF4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4geCA+PSBtaW4gJiYgeCA8PSBtYXg7XG59XG5cbmludGVyZmFjZSBFbGVtZW50Qm91bmRhcmllcyB7XG4gICAgeDoge1xuICAgICAgICBzdGFydDogbnVtYmVyO1xuICAgICAgICBlbmQ6IG51bWJlcjtcbiAgICB9O1xuICAgIHk6IHtcbiAgICAgICAgc3RhcnQ6IG51bWJlcjtcbiAgICAgICAgZW5kOiBudW1iZXI7XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0RWxlbWVudFN0YXJ0Q29vcmRzKHJlY3Q6IERPTVJlY3QsIHBvc2l0aW9uOiBFbGVtZW50Q2hvcmRbJ3Bvc2l0aW9uJ10pOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0ge1xuICAgIHJldHVybiB7XG4gICAgICAgIHg6IHBvc2l0aW9uID09PSAnYWZ0ZXInID8gcmVjdC54ICsgcmVjdC53aWR0aCA6IHJlY3QueCxcbiAgICAgICAgeTogcG9zaXRpb24gPT09ICdhZnRlcicgPyByZWN0LnkgKyByZWN0LmhlaWdodCA6IHJlY3QueVxuICAgIH07XG59XG5cbmZ1bmN0aW9uIGdldEVsZW1lbnRCb3VuZGFyaWVzKGNvb3JkaW5hdGVzOiBFbGVtZW50Q2hvcmQsIHRocmVzaG9sZDogbnVtYmVyKTogRWxlbWVudEJvdW5kYXJpZXMge1xuICAgIGNvbnN0IHdpZHRoT2Zmc2V0ID0gY29vcmRpbmF0ZXMud2lkdGggKiAoY29vcmRpbmF0ZXMucG9zaXRpb24gPT09ICdhZnRlcicgPyAxIDogLTEpO1xuICAgIGNvbnN0IGhlaWdodE9mZnNldCA9IGNvb3JkaW5hdGVzLmhlaWdodCAqIChjb29yZGluYXRlcy5wb3NpdGlvbiA9PT0gJ2FmdGVyJyA/IDEgOiAtMSk7XG4gICAgY29uc3QgeFN0YXJ0ID0gY29vcmRpbmF0ZXMucG9zaXRpb24gPT09ICdhZnRlcicgPyBjb29yZGluYXRlcy54IDogY29vcmRpbmF0ZXMueCArIGNvb3JkaW5hdGVzLndpZHRoO1xuICAgIGNvbnN0IHhFbmQgPSB4U3RhcnQgKyB3aWR0aE9mZnNldCArICh3aWR0aE9mZnNldCAvIDIpICogdGhyZXNob2xkO1xuICAgIGNvbnN0IHlTdGFydCA9IGNvb3JkaW5hdGVzLnBvc2l0aW9uID09PSAnYWZ0ZXInID8gY29vcmRpbmF0ZXMueSA6IGNvb3JkaW5hdGVzLnkgKyBjb29yZGluYXRlcy5oZWlnaHQ7XG4gICAgY29uc3QgeUVuZCA9IHlTdGFydCArIGhlaWdodE9mZnNldCArIChoZWlnaHRPZmZzZXQgLyAyKSAqIHRocmVzaG9sZDtcbiAgICByZXR1cm4ge1xuICAgICAgICB4OiB7XG4gICAgICAgICAgICBzdGFydDogeFN0YXJ0ID4geEVuZCA/IHhFbmQgOiB4U3RhcnQsXG4gICAgICAgICAgICBlbmQ6IHhTdGFydCA+IHhFbmQgPyB4U3RhcnQgOiB4RW5kXG4gICAgICAgIH0sXG4gICAgICAgIHk6IHtcbiAgICAgICAgICAgIHN0YXJ0OiB5U3RhcnQgPiB5RW5kID8geUVuZCA6IHlTdGFydCxcbiAgICAgICAgICAgIGVuZDogeVN0YXJ0ID4geUVuZCA/IHlTdGFydCA6IHlFbmRcbiAgICAgICAgfVxuICAgIH07XG59XG4iXX0=
|
|
376
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5kLWxpc3QuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jZGsvc3JjL2xpYi91dGlscy9kcmFnLWFuZC1kcm9wL2RuZC1saXN0L2RuZC1saXN0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsZUFBZSxFQUNmLFNBQVMsRUFFVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFdBQVcsRUFDWCxLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsS0FBSyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFdEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7O0FBa0IvQyxNQUFNLE9BQU8sZ0JBQWdCO0lBSjdCO1FBS0k7OztXQUdHO1FBRUgsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVqQjs7Ozs7Ozs7O1dBU0c7UUFFSCxhQUFRLEdBQWtCLE9BQU8sQ0FBQztRQUVsQzs7V0FFRztRQUVILGNBQVMsR0FBRyxHQUFHLENBQUM7UUFFaEIsMENBQTBDO1FBRTFDLFVBQUssR0FBYSxFQUFFLENBQUM7UUFvQnJCOzs7V0FHRztRQUVILDZCQUF3QixHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFFdkQsb0RBQW9EO1FBRTNDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVksQ0FBQztRQUVwRCxvREFBb0Q7UUFFM0MsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBa0IsQ0FBQztRQUUxRCxtRUFBbUU7UUFFMUQsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBTWxE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O1FBQ0gsQ0FBQyxFQUFFO1lBQ0MsS0FBSyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTTtZQUNwQyxHQUFHLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJO1NBQ3JDO1FBQ0QsQ0FBQyxFQUFFO1lBQ0MsS0FBSyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTTtZQUNwQyxHQUFHLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJO1NBQ3JDO0tBQ0osQ0FBQztBQUNOLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgbWVyZ2UsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHN0YXJ0V2l0aCwgdGFrZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgc2VsZWN0U3RyYXRlZ3kgfSBmcm9tICcuLi8uLi9hc3luYy1zdHJhdGVneSc7XG5pbXBvcnQgeyBEbmRJdGVtLCBFbGVtZW50Q2hvcmQsIEVsZW1lbnRQb3NpdGlvbiwgRmREbmREcm9wVHlwZSwgRmREcm9wRXZlbnQsIExpbmtQb3NpdGlvbiB9IGZyb20gJy4uL2RuZC5pbnRlcmZhY2VzJztcbmltcG9ydCB7IERORF9JVEVNLCBETkRfTElTVCB9IGZyb20gJy4uL3Rva2Vucyc7XG5cbmV4cG9ydCB0eXBlIERyb3BQcmVkaWNhdGU8VD4gPSAoXG4gICAgZHJhZ0l0ZW06IFQsXG4gICAgZHJvcEl0ZW06IFQsXG4gICAgZXZlbnQ6IEZkRHJvcEV2ZW50PFQ+XG4pID0+IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+IHwgT2JzZXJ2YWJsZTxib29sZWFuPjtcbmV4cG9ydCB0eXBlIERyYWdvdmVyUHJlZGljYXRlPFQ+ID0gKFxuICAgIGRyYWdJdGVtOiBULFxuICAgIGRyYWdPdmVySXRlbTogVCxcbiAgICBkcmFnSXRlbUluZGV4OiBudW1iZXIsXG4gICAgZHJhZ092ZXJJdGVtSW5kZXg6IG51bWJlclxuKSA9PiBib29sZWFuO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tmZGtEbmRMaXN0XSwgW2ZkLWRuZC1saXN0XScsXG4gICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBETkRfTElTVCwgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRG5kTGlzdERpcmVjdGl2ZSkgfV1cbn0pXG5leHBvcnQgY2xhc3MgRG5kTGlzdERpcmVjdGl2ZTxUPiBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XG4gICAgLyoqXG4gICAgICogRGVmaW5lcyBpZiB0aGUgZWxlbWVudCBpcyBhbGxvd2VkIHRvIGJlIGRyYWdnZWQgaW4gMiBkaW1lbnNpb25zLFxuICAgICAqIFdoZW4gdHJ1ZSAtIHJlcGxhY2UgaW5kaWNhdG9yIHdpbGwgYmUgZGlzcGxheWVkIHZlcnRpY2FsbHlcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGdyaWRNb2RlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIGRyb3Agc3RyYXRlZ3k6XG4gICAgICogKiBgc2hpZnRgIG1vZGUgd2lsbCBjcmVhdGUgbGluZSBhZnRlciB0aGUgY2xvc2VzdCBkcm9wIGVsZW1lbnQuXG4gICAgICogKiBgZ3JvdXBgIG1vZGUgd2lsbCBjcmVhdGUgcmVwbGFjZSBpbmRpY2F0b3Igb24gYSB3aG9sZSBjbG9zZXN0IGRyb3AgZWxlbWVudC5cbiAgICAgKiAqIGBhdXRvYCBtb2RlIHdpbGwgY3JlYXRlIGEgbGluZSBhZnRlciB0aGUgY2xvc2VzdCBkcm9wIGVsZW1lbnRcbiAgICAgKiBpZiBkcmFnZ2VkIGVsZW1lbnQgY29vcmRpbmF0ZXMgYXJlIHNoaWZ0ZWQgZm9yIDMwJSBmcm9tIHRoZSBjZW50ZXIgb2YgdGhlIGNsb3Nlc3QgZHJvcCBlbGVtZW50LlxuICAgICAqIE90aGVyd2lzZSwgaXQgd2lsbCBjcmVhdGUgcmVwbGFjZSBpbmRpY2F0b3Igb24gYSB3aG9sZSBjbG9zZXN0IGRyb3AgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIGBzaGlmdGAgbW9kZSBpcyB0aGUgZGVmYXVsdC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGRyb3BNb2RlOiBGZERuZERyb3BUeXBlID0gJ3NoaWZ0JztcblxuICAgIC8qKlxuICAgICAqIFRocmVzaG9sZCBvZiBkcmFnZ2VkIGl0ZW0gb3ZlciBhbm90aGVyIGl0ZW0gdG8gZGVmaW5lIHdoaWNoIHR5cGUgb2YgYGRyb3BNb2RlYCBzaG91bGQgYmUgdXNlZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHRocmVzaG9sZCA9IDAuMztcblxuICAgIC8qKiBBcnJheSBvZiBpdGVtcywgdGhhdCB3aWxsIGJlIHNvcnRlZCAqL1xuICAgIEBJbnB1dCgpXG4gICAgaXRlbXM6IEFycmF5PFQ+ID0gW107XG5cbiAgICAvKiogRGVmaW5lcyBpZiBkcmFnIGFuZCBkcm9wIGZlYXR1cmUgc2hvdWxkIGJlIGVuYWJsZWQgZm9yIGxpc3QgaXRlbXMgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBkcmFnZ2FibGUoZHJhZ2dhYmxlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2RyYWdnYWJsZSA9IGRyYWdnYWJsZTtcbiAgICAgICAgdGhpcy5fY2hhbmdlRHJhZ2dhYmxlU3RhdGUoZHJhZ2dhYmxlKTtcbiAgICB9XG5cbiAgICAvKiogUHJlZGljYXRlIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIHdoZXRoZXIgdGhlIGl0ZW0gY2FuIGJlIGRyb3BwZWQgb3ZlciBhbm90aGVyIGl0ZW0uICovXG4gICAgQElucHV0KClcbiAgICBkcm9wUHJlZGljYXRlOiBEcm9wUHJlZGljYXRlPFQ+IHwgdW5kZWZpbmVkO1xuXG4gICAgLyoqXG4gICAgICogUHJlZGljYXRlIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIHdoZXRoZXIgdGhlIGl0ZW0gY2FuIGJlIGRyYWdnZWQgb3ZlciBhbm90aGVyIGl0ZW0uXG4gICAgICogSWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgYGZhbHNlYCwgZHJhZ2dlZCBvdmVyIGl0ZW0gd2lsbCBub3QgYmUgaGlnaGxpZ2h0ZWQsIGFuZCBkcm9wIGV2ZW50IHdpbGwgYmUgY2FuY2VsZWQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBkcmFnb3ZlclByZWRpY2F0ZTogRHJhZ292ZXJQcmVkaWNhdGU8VD4gfCB1bmRlZmluZWQ7XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gYGRyb3BQcmVkaWNhdGVgIGZ1bmN0aW9uIGV2YWx1YXRpb24gY2hhbmdlcy5cbiAgICAgKiBFbWl0cyBgdHJ1ZWAgd2hlbiBldmFsdWF0aW9uIHN0YXJ0ZWQsIGFuZCBgZmFsc2VgIHdoZW4gY29tcGxldGVkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGRyb3BQcmVkaWNhdGVDYWxjdWxhdGluZyA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKiBFdmVudCB0aGF0IGlzIHRocm93biB3aGVuIGl0ZW1zIGFyZSByZW9yZGVyZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBpdGVtc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8QXJyYXk8VD4+KCk7XG5cbiAgICAvKiogRXZlbnQgdGhhdCBpcyB0aHJvd24gd2hlbiB0aGUgaXRlbSBpcyBkcm9wcGVkICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgaXRlbURyb3BwZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZkRHJvcEV2ZW50PFQ+PigpO1xuXG4gICAgLyoqIEV2ZW50IHRoYXQgaXMgdGhyb3duIHdoZW4gcHJlZGljYXRlIGZ1bmN0aW9uIHJldHVybmVkIGZhbHNlLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IGRyb3BDYW5jZWxsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oRE5EX0lURU0pXG4gICAgZG5kSXRlbXM6IFF1ZXJ5TGlzdDxEbmRJdGVtPFQ+PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gICAgcHJpdmF0ZSByZWFkb25seSBfaW5pdGlhbENsYXNzID0gJ2ZkLWRuZC1saXN0JztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZWxlbWVudHNDb29yZGluYXRlczogRWxlbWVudENob3JkW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2Nsb3Nlc3RJdGVtSW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jbG9zZXN0SXRlbVBvc2l0aW9uOiAnYmVmb3JlJyB8ICdhZnRlcicgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBBbiBSeEpTIFN1YmplY3QgdGhhdCB3aWxsIGtpbGwgdGhlIGN1cnJlbnQgZGF0YSBzdHJlYW0gKGZvciB1bnN1YnNjcmliaW5nKSAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9yZWZyZXNoJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX29uRGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gICovXG4gICAgcHJpdmF0ZSBfZG5kSXRlbVJlZmVyZW5jZTogRG5kSXRlbVtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kcmFnZ2FibGUgPSB0cnVlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kZXRlY3RlZERyb3BNb2RlOiAnc2hpZnQnIHwgJ2dyb3VwJztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGluZXNSZW1vdmVkID0gdHJ1ZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW5kaWNhdG9yc1JlbW92ZWQgPSB0cnVlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kcmFnZ2VkSXRlbTogVCB8IHVuZGVmaW5lZDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaWdub3JlRHJvcCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NoYW5nZURyYWdnYWJsZVN0YXRlKHRoaXMuX2RyYWdnYWJsZSk7XG4gICAgICAgIHRoaXMuZG5kSXRlbXMuY2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoc3RhcnRXaXRoKG51bGwpLCB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMucmVmcmVzaFF1ZXJ5TGlzdCgpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5fb25EZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlZnJlc2hlcyB0aGUgaW5kZXhlcyBvZiB0aGUgaXRlbXMuXG4gICAgICovXG4gICAgcmVmcmVzaFF1ZXJ5TGlzdCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVmcmVzaCQgPSBtZXJnZSh0aGlzLl9yZWZyZXNoJCwgdGhpcy5fb25EZXN0cm95JCk7XG4gICAgICAgIHRoaXMuX3JlZnJlc2gkLm5leHQoKTtcblxuICAgICAgICB0aGlzLl9kbmRJdGVtUmVmZXJlbmNlID0gdGhpcy5kbmRJdGVtcy50b0FycmF5KCk7XG5cbiAgICAgICAgdGhpcy5fY2hhbmdlRHJhZ2dhYmxlU3RhdGUodGhpcy5fZHJhZ2dhYmxlKTtcblxuICAgICAgICB0aGlzLmRuZEl0ZW1zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpdGVtLm1vdmVkLnBpcGUodGFrZVVudGlsKHJlZnJlc2gkKSkuc3Vic2NyaWJlKChwb3NpdGlvbjogRWxlbWVudFBvc2l0aW9uKSA9PiB0aGlzLm9uTW92ZShwb3NpdGlvbiwgaW5kZXgpKTtcbiAgICAgICAgICAgIGl0ZW0uc3RhcnRlZC5waXBlKHRha2VVbnRpbChyZWZyZXNoJCkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLmRyYWdTdGFydChpbmRleCkpO1xuICAgICAgICAgICAgaXRlbS5yZWxlYXNlZC5waXBlKHRha2VVbnRpbChyZWZyZXNoJCkpLnN1YnNjcmliZShhc3luYyAoKSA9PiBhd2FpdCB0aGlzLmRyYWdFbmQoaW5kZXgpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCBjYWxsZWQgd2hlbiB0aGUgaXRlbSBpcyBiZWluZyBtb3ZlZCBieSAxIHB4ICovXG4gICAgb25Nb3ZlKG1vdXNlUG9zaXRpb246IEVsZW1lbnRQb3NpdGlvbiwgZHJhZ2dlZEl0ZW1JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIC8qKiBUZW1wb3Jhcnkgb2JqZWN0LCB0byBzdG9yZSBsb3dlc3QgZGlzdGFuY2UgdmFsdWVzICovXG4gICAgICAgIGxldCBjbG9zZXN0SXRlbUluZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgICAgICBjb25zdCBjbG9zZXN0RG5kSXRlbSA9IHRoaXMuX2VsZW1lbnRzQ29vcmRpbmF0ZXMuZmluZCgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIC8qKiBDaGVjayBpZiBhbiBlbGVtZW50IGNhbiBiZSByZXBsYWNlZCAqL1xuICAgICAgICAgICAgaWYgKCFlbGVtZW50LnN0aWNrVG9Qb3NpdGlvbiAmJiBjbG9zZXN0SXRlbUluZGV4ICE9PSBpbmRleCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzTW91c2VPbkVsZW1lbnQgPSBfaXNNb3VzZU9uRWxlbWVudChlbGVtZW50LCBtb3VzZVBvc2l0aW9uKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNNb3VzZU9uRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICBjbG9zZXN0SXRlbUluZGV4ID0gaW5kZXg7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIWNsb3Nlc3REbmRJdGVtKSB7XG4gICAgICAgICAgICBjbG9zZXN0SXRlbUluZGV4ID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKiBJZiB0aGUgY2xvc2VzdCBlbGVtZW50IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBvbGQgb25lLCB0aGUgbmV3IG9uZSBpcyBwaWNrZWQuIEl0IHByZXZlbnRzIGZyb20gcGVyZm9ybWFuY2UgaXNzdWVzICovXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIChjbG9zZXN0SXRlbUluZGV4IHx8IGNsb3Nlc3RJdGVtSW5kZXggPT09IDApICYmXG4gICAgICAgICAgICAoY2xvc2VzdEl0ZW1JbmRleCAhPT0gdGhpcy5fY2xvc2VzdEl0ZW1JbmRleCB8fCB0aGlzLmRyb3BNb2RlID09PSAnYXV0bycpXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQWxsTGluZXMoKTtcbiAgICAgICAgICAgIHRoaXMuX3JlbW92ZUFsbFJlcGxhY2VJbmRpY2F0b3JzKCk7XG4gICAgICAgICAgICB0aGlzLl9jbG9zZXN0SXRlbUluZGV4ID0gY2xvc2VzdEl0ZW1JbmRleDtcbiAgICAgICAgICAgIHRoaXMuX2Nsb3Nlc3RJdGVtUG9zaXRpb24gPSB0aGlzLl9lbGVtZW50c0Nvb3JkaW5hdGVzW2Nsb3Nlc3RJdGVtSW5kZXhdLnBvc2l0aW9uO1xuICAgICAgICAgICAgY29uc3QgY2xvc2VzdEl0ZW0gPSB0aGlzLml0ZW1zW3RoaXMuX2Nsb3Nlc3RJdGVtSW5kZXhdO1xuICAgICAgICAgICAgLy8gSWYgY2xvc2VzdCBpdGVtIGluZGV4IGlzIHNhbWUgYXMgZHJhZ2dlZCBpdGVtLCBqdXN0IHJlbW92ZSBpbmRpY2F0b3JzXG4gICAgICAgICAgICBpZiAoY2xvc2VzdEl0ZW1JbmRleCA9PT0gZHJhZ2dlZEl0ZW1JbmRleCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZUFsbExpbmVzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQWxsUmVwbGFjZUluZGljYXRvcnMoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5kcmFnb3ZlclByZWRpY2F0ZSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX2RyYWdnZWRJdGVtICYmXG4gICAgICAgICAgICAgICAgIXRoaXMuZHJhZ292ZXJQcmVkaWNhdGUodGhpcy5fZHJhZ2dlZEl0ZW0sIGNsb3Nlc3RJdGVtLCBkcmFnZ2VkSXRlbUluZGV4LCB0aGlzLl9jbG9zZXN0SXRlbUluZGV4KVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faWdub3JlRHJvcCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0RGlzYWJsZWRJdGVtKHRoaXMuX2Nsb3Nlc3RJdGVtSW5kZXgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3NldERpc2FibGVkSXRlbSgtMSk7XG4gICAgICAgICAgICAvKiogR2VuZXJhdGluZyBsaW5lLCB0aGF0IHNob3dzIHdoZXJlIHRoZSBlbGVtZW50IHdpbGwgYmUgcGxhY2VkLCBvbiBhIGRyb3AgKi9cbiAgICAgICAgICAgIGlmICh0aGlzLmRyb3BNb2RlID09PSAnZ3JvdXAnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlUmVwbGFjZUluZGljYXRvcih0aGlzLl9jbG9zZXN0SXRlbUluZGV4KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kcm9wTW9kZSA9PT0gJ3NoaWZ0Jykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZUxpbmUodGhpcy5fY2xvc2VzdEl0ZW1JbmRleCwgdGhpcy5fY2xvc2VzdEl0ZW1Qb3NpdGlvbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdERyb3BNb2RlSW5kaWNhdG9yKGRyYWdnZWRJdGVtSW5kZXgsIGNsb3Nlc3REbmRJdGVtLCBjbG9zZXN0SXRlbUluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBNZXRob2QgY2FsbGVkIHdoZW4gYW4gZWxlbWVudCBpcyBzdGFydGVkIHRvIGJlIGRyYWdnZWQgKi9cbiAgICBkcmFnU3RhcnQoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBkcmFnZ2VkSXRlbUVsZW1lbnQgPSB0aGlzLl9kbmRJdGVtUmVmZXJlbmNlW2luZGV4XS5lbGVtZW50UmVmO1xuICAgICAgICB0aGlzLl9kcmFnZ2VkSXRlbSA9IHRoaXMuaXRlbXNbaW5kZXhdO1xuICAgICAgICAvKiogQ291bnRpbmcgYWxsIHRoZSBlbGVtZW50J3MgY2hvcmRzICovXG4gICAgICAgIHRoaXMuX2VsZW1lbnRzQ29vcmRpbmF0ZXMgPSB0aGlzLl9kbmRJdGVtUmVmZXJlbmNlLm1hcCgoaXRlbTogRG5kSXRlbSkgPT5cbiAgICAgICAgICAgIGl0ZW0uZ2V0RWxlbWVudENvb3JkaW5hdGVzKHRoaXMuX2lzQmVmb3JlKGRyYWdnZWRJdGVtRWxlbWVudCwgaXRlbS5lbGVtZW50UmVmKSwgdGhpcy5ncmlkTW9kZSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIGNhbGxlZCB3aGVuIGFuIGVsZW1lbnQgaXMgcmVsZWFzZWQgKi9cbiAgICBhc3luYyBkcmFnRW5kKGRyYWdnZWRJdGVtSW5kZXg6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLl9kcmFnZ2VkSXRlbSA9IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLml0ZW1zLnNsaWNlKCk7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VkSXRlbUluZGV4ID0gdGhpcy5fY2xvc2VzdEl0ZW1JbmRleDtcbiAgICAgICAgdGhpcy5fc2V0RGlzYWJsZWRJdGVtKC0xKTtcblxuICAgICAgICBpZiAodGhpcy5faWdub3JlRHJvcCkge1xuICAgICAgICAgICAgdGhpcy5faWdub3JlRHJvcCA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlcGxhY2VkSXRlbUluZGV4ID09PSBudWxsIHx8IHJlcGxhY2VkSXRlbUluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZHJhZ2dlZERuZEl0ZW0gPSB0aGlzLmRuZEl0ZW1zLmdldChkcmFnZ2VkSXRlbUluZGV4KT8uaXRlbSA/PyBpdGVtc1tkcmFnZ2VkSXRlbUluZGV4XTtcbiAgICAgICAgY29uc3QgcmVwbGFjZWREbmRJdGVtID0gdGhpcy5kbmRJdGVtcy5nZXQocmVwbGFjZWRJdGVtSW5kZXgpPy5pdGVtID8/IGl0ZW1zW3JlcGxhY2VkSXRlbUluZGV4XTtcblxuICAgICAgICBjb25zdCBwcmVkaWNhdGVTdWJqID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcblxuICAgICAgICBjb25zdCBldnQ6IEZkRHJvcEV2ZW50PFQ+ID0ge1xuICAgICAgICAgICAgcmVwbGFjZWRJdGVtSW5kZXgsXG4gICAgICAgICAgICBkcmFnZ2VkSXRlbUluZGV4LFxuICAgICAgICAgICAgaXRlbXMsXG4gICAgICAgICAgICBpbnNlcnRBdDogdGhpcy5fY2xvc2VzdEl0ZW1Qb3NpdGlvbixcbiAgICAgICAgICAgIG1vZGU6IHRoaXMuZHJvcE1vZGUgIT09ICdhdXRvJyA/IHRoaXMuZHJvcE1vZGUgOiB0aGlzLl9kZXRlY3RlZERyb3BNb2RlXG4gICAgICAgIH07XG5cbiAgICAgICAgcHJlZGljYXRlU3Viai5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9yZW1vdmVBbGxMaW5lcygpO1xuICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQWxsUmVwbGFjZUluZGljYXRvcnMoKTtcblxuICAgICAgICAgICAgLyoqIFJlc2V0ICovXG4gICAgICAgICAgICB0aGlzLl9lbGVtZW50c0Nvb3JkaW5hdGVzID0gW107XG4gICAgICAgICAgICB0aGlzLl9jbG9zZXN0SXRlbUluZGV4ID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX2Nsb3Nlc3RJdGVtUG9zaXRpb24gPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZHJvcENhbmNlbGxlZC5lbWl0KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZHJhZ2dlZEl0ZW1JbmRleCAhPT0gcmVwbGFjZWRJdGVtSW5kZXgpIHtcbiAgICAgICAgICAgICAgICBpZiAoZHJhZ2dlZEl0ZW1JbmRleCA8IHJlcGxhY2VkSXRlbUluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBkcmFnZ2VkSXRlbUluZGV4OyBpIDwgcmVwbGFjZWRJdGVtSW5kZXg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXNbaV0gPSBpdGVtc1tpICsgMV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gZHJhZ2dlZEl0ZW1JbmRleDsgaSA+IHJlcGxhY2VkSXRlbUluZGV4OyBpLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zW2ldID0gaXRlbXNbaSAtIDFdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLyoqIFJlcGxhY2luZyBpdGVtcyAqL1xuICAgICAgICAgICAgICAgIGl0ZW1zW3JlcGxhY2VkSXRlbUluZGV4XSA9IGRyYWdnZWREbmRJdGVtO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc0NoYW5nZS5lbWl0KGl0ZW1zKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5pdGVtRHJvcHBlZC5lbWl0KGV2dCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLmRyb3BQcmVkaWNhdGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5kcm9wUHJlZGljYXRlQ2FsY3VsYXRpbmcuZW1pdCh0cnVlKTtcbiAgICAgICAgICAgIGNvbnN0IG9iaiA9IHRoaXMuZHJvcFByZWRpY2F0ZShkcmFnZ2VkRG5kSXRlbSwgcmVwbGFjZWREbmRJdGVtLCBldnQpO1xuICAgICAgICAgICAgY29uc3Qgc3RyYXRlZ3kgPSBzZWxlY3RTdHJhdGVneShvYmopO1xuXG4gICAgICAgICAgICBhd2FpdCBzdHJhdGVneS5jcmVhdGVTdWJzY3JpcHRpb24ob2JqLCAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgcHJlZGljYXRlU3Viai5uZXh0KHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgdGhpcy5kcm9wUHJlZGljYXRlQ2FsY3VsYXRpbmcuZW1pdChmYWxzZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByZWRpY2F0ZVN1YmoubmV4dCh0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0RGlzYWJsZWRJdGVtKGl0ZW1JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZG5kSXRlbXMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGl0ZW0uc2V0RGlzYWJsZWRTdGF0ZShpbmRleCA9PT0gaXRlbUluZGV4KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZWxlY3REcm9wTW9kZUluZGljYXRvcihcbiAgICAgICAgZHJhZ2dlZEl0ZW1JbmRleDogbnVtYmVyLFxuICAgICAgICBjbG9zZXN0SXRlbTogRWxlbWVudENob3JkIHwgdW5kZWZpbmVkLFxuICAgICAgICBjbG9zZXN0SXRlbUluZGV4OiBudW1iZXJcbiAgICApOiB2b2lkIHtcbiAgICAgICAgaWYgKCFjbG9zZXN0SXRlbSB8fCAhdGhpcy5fZG5kSXRlbVJlZmVyZW5jZVtkcmFnZ2VkSXRlbUluZGV4XSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG5ld0RldGVjdGVkRHJvcE1vZGU6ICdzaGlmdCcgfCAnZ3JvdXAnO1xuICAgICAgICBjb25zdCBkcmFnZ2VkRWxtQ29vcmRzID1cbiAgICAgICAgICAgIHRoaXMuX2RuZEl0ZW1SZWZlcmVuY2VbZHJhZ2dlZEl0ZW1JbmRleF0uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgIGNvbnN0IGNsb3Nlc3RJdGVtQm91bmRhcmllcyA9IGdldEVsZW1lbnRCb3VuZGFyaWVzKGNsb3Nlc3RJdGVtLCB0aGlzLnRocmVzaG9sZCk7XG4gICAgICAgIGNvbnN0IGRyYWdnZWRJdGVtU3RhcnRDb29yZHMgPSBnZXRFbGVtZW50U3RhcnRDb29yZHMoZHJhZ2dlZEVsbUNvb3JkcywgY2xvc2VzdEl0ZW0ucG9zaXRpb24pO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIF9iZXR3ZWVuKGRyYWdnZWRJdGVtU3RhcnRDb29yZHMueCwgY2xvc2VzdEl0ZW1Cb3VuZGFyaWVzLnguc3RhcnQsIGNsb3Nlc3RJdGVtQm91bmRhcmllcy54LmVuZCkgJiZcbiAgICAgICAgICAgIF9iZXR3ZWVuKGRyYWdnZWRJdGVtU3RhcnRDb29yZHMueSwgY2xvc2VzdEl0ZW1Cb3VuZGFyaWVzLnkuc3RhcnQsIGNsb3Nlc3RJdGVtQm91bmRhcmllcy55LmVuZClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBuZXdEZXRlY3RlZERyb3BNb2RlID0gJ2dyb3VwJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld0RldGVjdGVkRHJvcE1vZGUgPSAnc2hpZnQnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5ld0RldGVjdGVkRHJvcE1vZGUgPT09IHRoaXMuX2RldGVjdGVkRHJvcE1vZGUgJiYgKCF0aGlzLl9saW5lc1JlbW92ZWQgfHwgIXRoaXMuX2luZGljYXRvcnNSZW1vdmVkKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZGV0ZWN0ZWREcm9wTW9kZSA9IG5ld0RldGVjdGVkRHJvcE1vZGU7XG5cbiAgICAgICAgaWYgKHRoaXMuX2RldGVjdGVkRHJvcE1vZGUgPT09ICdzaGlmdCcpIHtcbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZUxpbmUoY2xvc2VzdEl0ZW1JbmRleCwgdGhpcy5fZWxlbWVudHNDb29yZGluYXRlc1tjbG9zZXN0SXRlbUluZGV4XS5wb3NpdGlvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9jcmVhdGVSZXBsYWNlSW5kaWNhdG9yKGNsb3Nlc3RJdGVtSW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZW1vdmVBbGxMaW5lcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbGluZXNSZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kbmRJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiBpdGVtLnJlbW92ZUxpbmUoKSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZW1vdmVBbGxSZXBsYWNlSW5kaWNhdG9ycygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faW5kaWNhdG9yc1JlbW92ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmRuZEl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IGl0ZW0ucmVtb3ZlUmVwbGFjZUluZGljYXRvcigpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NyZWF0ZUxpbmUoY2xvc2VzdEl0ZW1JbmRleDogbnVtYmVyLCBsaW5rUG9zaXRpb246IExpbmtQb3NpdGlvbik6IHZvaWQge1xuICAgICAgICB0aGlzLl9yZW1vdmVBbGxMaW5lcygpO1xuICAgICAgICB0aGlzLl9yZW1vdmVBbGxSZXBsYWNlSW5kaWNhdG9ycygpO1xuICAgICAgICB0aGlzLl9saW5lc1JlbW92ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fZG5kSXRlbVJlZmVyZW5jZVtjbG9zZXN0SXRlbUluZGV4XS5jcmVhdGVMaW5lKGxpbmtQb3NpdGlvbiwgdGhpcy5ncmlkTW9kZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jcmVhdGVSZXBsYWNlSW5kaWNhdG9yKGNsb3Nlc3RJdGVtSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9yZW1vdmVBbGxMaW5lcygpO1xuICAgICAgICB0aGlzLl9yZW1vdmVBbGxSZXBsYWNlSW5kaWNhdG9ycygpO1xuICAgICAgICB0aGlzLl9pbmRpY2F0b3JzUmVtb3ZlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9kbmRJdGVtUmVmZXJlbmNlW2Nsb3Nlc3RJdGVtSW5kZXhdLmNyZWF0ZVJlcGxhY2VJbmRpY2F0b3IoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAgQGhpZGRlblxuICAgICAqIFJldHVybiBpbmZvcm1hdGlvbiBpZiBhbiBlbGVtZW50IGlzIHBsYWNlZCBiZWZvcmUgdGhlIGRyYWdnZWQgZWxlbWVudFxuICAgICAqL1xuICAgIHByaXZhdGUgX2lzQmVmb3JlKGRyYWdnZWRFbGVtZW50OiBFbGVtZW50UmVmLCB0YXJnZXRFbGVtZW50OiBFbGVtZW50UmVmKTogYm9vbGVhbiB7XG4gICAgICAgIC8qKiBTb21ldGltZXMgdGhlIGVsZW1lbnRzIGFyZSBub3Qgc3RyYWlnaHQgaW4gb25lIGNvbHVtbiwgdGhhdCdzIHdoeSBvZmZzZXQgaXMgbmVlZGVkICovXG4gICAgICAgIGNvbnN0IFZFUlRJQ0FMX09GRlNFVCA9IDIwO1xuXG4gICAgICAgIC8qKiBEaXN0YW5jZXMgZnJvbSB0aGUgdG9wIG9mIHRoZSBzY3JlZW4gKi9cbiAgICAgICAgY29uc3QgZHJhZ2dlZEVsZW1lbnRCb3VuZCA9IGRyYWdnZWRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IHRhcmdldEVsZW1lbnRCb3VuZCA9IHRhcmdldEVsZW1lbnQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICBpZiAoZHJhZ2dlZEVsZW1lbnRCb3VuZC50b3AgLSB0YXJnZXRFbGVtZW50Qm91bmQudG9wID4gVkVSVElDQUxfT0ZGU0VUKSB7XG4gICAgICAgICAgICAvKiogSWYgYW4gZWxlbWVudCBpcyBoaWdoZXIgdGhhbiB0aGUgZHJhZ2dlZCBlbGVtZW50LCBpdCdzIGZvciBzdXJlIGJlZm9yZSAqL1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0RWxlbWVudEJvdW5kLnRvcCAtIGRyYWdnZWRFbGVtZW50Qm91bmQudG9wID4gVkVSVElDQUxfT0ZGU0VUKSB7XG4gICAgICAgICAgICAvKiogSWYgYW4gZWxlbWVudCBpcyBsb3dlciB0aGFuIHRoZSBkcmFnZ2VkIGVsZW1lbnQsIGl0J3MgZm9yIHN1cmUgYWZ0ZXIgKi9cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8qKiBJZiBlbGVtZW50cyBhcmUgaW4gc2FtZSBsZXZlbCwgdGhlIGhvcml6b250YWwgcG9zaXRpb24gZGVjaWRlcyBpZiBpdCdzIGJlZm9yZS9hZnRlciAqL1xuICAgICAgICAgICAgcmV0dXJuIGRyYWdnZWRFbGVtZW50Qm91bmQubGVmdCAtIHRhcmdldEVsZW1lbnRCb3VuZC5sZWZ0ID4gMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2hhbmdlRHJhZ2dhYmxlU3RhdGUoZHJhZ2dhYmxlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRuZEl0ZW1zKSB7XG4gICAgICAgICAgICB0aGlzLmRuZEl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICBpdGVtLmxpc3REcmFnZ2FibGUgPSBkcmFnZ2FibGU7XG4gICAgICAgICAgICAgICAgaXRlbS5jaGFuZ2VDREtEcmFnU3RhdGUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBfaXNNb3VzZU9uRWxlbWVudChlbGVtZW50OiBFbGVtZW50Q2hvcmQsIG1vdXNlUG9zaXRpb246IEVsZW1lbnRQb3NpdGlvbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHN0YXJ0WCA9IGVsZW1lbnQueDtcbiAgICBjb25zdCBlbmRYID0gZWxlbWVudC54ICsgZWxlbWVudC53aWR0aDtcblxuICAgIGNvbnN0IHN0YXJ0WSA9IGVsZW1lbnQueTtcbiAgICBjb25zdCBlbmRZID0gZWxlbWVudC55ICsgZWxlbWVudC5oZWlnaHQ7XG5cbiAgICByZXR1cm4gX2JldHdlZW4obW91c2VQb3NpdGlvbi54LCBzdGFydFgsIGVuZFgpICYmIF9iZXR3ZWVuKG1vdXNlUG9zaXRpb24ueSwgc3RhcnRZLCBlbmRZKTtcbn1cblxuZnVuY3Rpb24gX2JldHdlZW4oeDogbnVtYmVyLCBtaW46IG51bWJlciwgbWF4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4geCA+PSBtaW4gJiYgeCA8PSBtYXg7XG59XG5cbmludGVyZmFjZSBFbGVtZW50Qm91bmRhcmllcyB7XG4gICAgeDoge1xuICAgICAgICBzdGFydDogbnVtYmVyO1xuICAgICAgICBlbmQ6IG51bWJlcjtcbiAgICB9O1xuICAgIHk6IHtcbiAgICAgICAgc3RhcnQ6IG51bWJlcjtcbiAgICAgICAgZW5kOiBudW1iZXI7XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0RWxlbWVudFN0YXJ0Q29vcmRzKHJlY3Q6IERPTVJlY3QsIHBvc2l0aW9uOiBFbGVtZW50Q2hvcmRbJ3Bvc2l0aW9uJ10pOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0ge1xuICAgIHJldHVybiB7XG4gICAgICAgIHg6IHBvc2l0aW9uID09PSAnYWZ0ZXInID8gcmVjdC54ICsgcmVjdC53aWR0aCA6IHJlY3QueCxcbiAgICAgICAgeTogcG9zaXRpb24gPT09ICdhZnRlcicgPyByZWN0LnkgKyByZWN0LmhlaWdodCA6IHJlY3QueVxuICAgIH07XG59XG5cbmZ1bmN0aW9uIGdldEVsZW1lbnRCb3VuZGFyaWVzKGNvb3JkaW5hdGVzOiBFbGVtZW50Q2hvcmQsIHRocmVzaG9sZDogbnVtYmVyKTogRWxlbWVudEJvdW5kYXJpZXMge1xuICAgIGNvbnN0IHdpZHRoT2Zmc2V0ID0gY29vcmRpbmF0ZXMud2lkdGggKiAoY29vcmRpbmF0ZXMucG9zaXRpb24gPT09ICdhZnRlcicgPyAxIDogLTEpO1xuICAgIGNvbnN0IGhlaWdodE9mZnNldCA9IGNvb3JkaW5hdGVzLmhlaWdodCAqIChjb29yZGluYXRlcy5wb3NpdGlvbiA9PT0gJ2FmdGVyJyA/IDEgOiAtMSk7XG4gICAgY29uc3QgeFN0YXJ0ID0gY29vcmRpbmF0ZXMucG9zaXRpb24gPT09ICdhZnRlcicgPyBjb29yZGluYXRlcy54IDogY29vcmRpbmF0ZXMueCArIGNvb3JkaW5hdGVzLndpZHRoO1xuICAgIGNvbnN0IHhFbmQgPSB4U3RhcnQgKyB3aWR0aE9mZnNldCArICh3aWR0aE9mZnNldCAvIDIpICogdGhyZXNob2xkO1xuICAgIGNvbnN0IHlTdGFydCA9IGNvb3JkaW5hdGVzLnBvc2l0aW9uID09PSAnYWZ0ZXInID8gY29vcmRpbmF0ZXMueSA6IGNvb3JkaW5hdGVzLnkgKyBjb29yZGluYXRlcy5oZWlnaHQ7XG4gICAgY29uc3QgeUVuZCA9IHlTdGFydCArIGhlaWdodE9mZnNldCArIChoZWlnaHRPZmZzZXQgLyAyKSAqIHRocmVzaG9sZDtcbiAgICByZXR1cm4ge1xuICAgICAgICB4OiB7XG4gICAgICAgICAgICBzdGFydDogeFN0YXJ0ID4geEVuZCA/IHhFbmQgOiB4U3RhcnQsXG4gICAgICAgICAgICBlbmQ6IHhTdGFydCA+IHhFbmQgPyB4U3RhcnQgOiB4RW5kXG4gICAgICAgIH0sXG4gICAgICAgIHk6IHtcbiAgICAgICAgICAgIHN0YXJ0OiB5U3RhcnQgPiB5RW5kID8geUVuZCA6IHlTdGFydCxcbiAgICAgICAgICAgIGVuZDogeVN0YXJ0ID4geUVuZCA/IHlTdGFydCA6IHlFbmRcbiAgICAgICAgfVxuICAgIH07XG59XG4iXX0=
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Pipe } from '@angular/core';
|
|
2
|
-
import { isCompactDensity } from '
|
|
2
|
+
import { isCompactDensity } from '../functions/is-compact-density';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
export class IsCompactDensityPipe {
|
|
5
5
|
/** Check if the content density is compact. */
|
|
@@ -13,4 +13,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImpor
|
|
|
13
13
|
type: Pipe,
|
|
14
14
|
args: [{ name: 'isCompactDensity', standalone: true }]
|
|
15
15
|
}] });
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXMtY29tcGFjdC5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jZGsvc3JjL2xpYi91dGlscy9waXBlcy9pcy1jb21wYWN0LnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7O0FBSW5FLE1BQU0sT0FBTyxvQkFBb0I7SUFDN0IsK0NBQStDO0lBQy9DLFNBQVMsQ0FBQyxJQUFvQjtRQUMxQixPQUFPLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7OEdBSlEsb0JBQW9COzRHQUFwQixvQkFBb0I7OzJGQUFwQixvQkFBb0I7a0JBRGhDLElBQUk7bUJBQUMsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzQ29tcGFjdERlbnNpdHkgfSBmcm9tICcuLi9mdW5jdGlvbnMvaXMtY29tcGFjdC1kZW5zaXR5JztcbmltcG9ydCB7IENvbnRlbnREZW5zaXR5IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jb250ZW50LWRlbnNpdHknO1xuXG5AUGlwZSh7IG5hbWU6ICdpc0NvbXBhY3REZW5zaXR5Jywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIElzQ29tcGFjdERlbnNpdHlQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgLyoqIENoZWNrIGlmIHRoZSBjb250ZW50IGRlbnNpdHkgaXMgY29tcGFjdC4gKi9cbiAgICB0cmFuc2Zvcm0oc2l6ZTogQ29udGVudERlbnNpdHkpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGlzQ29tcGFjdERlbnNpdHkoc2l6ZSk7XG4gICAgfVxufVxuIl19
|
|
@@ -4592,8 +4592,6 @@ class DndListDirective {
|
|
|
4592
4592
|
* Threshold of dragged item over another item to define which type of `dropMode` should be used.
|
|
4593
4593
|
*/
|
|
4594
4594
|
this.threshold = 0.3;
|
|
4595
|
-
/** @hidden */
|
|
4596
|
-
this._replaceMode = false;
|
|
4597
4595
|
/** Array of items, that will be sorted */
|
|
4598
4596
|
this.items = [];
|
|
4599
4597
|
/**
|
|
@@ -4608,6 +4606,8 @@ class DndListDirective {
|
|
|
4608
4606
|
/** Event that is thrown when predicate function returned false. */
|
|
4609
4607
|
this.dropCancelled = new EventEmitter();
|
|
4610
4608
|
/** @hidden */
|
|
4609
|
+
this._initialClass = 'fd-dnd-list';
|
|
4610
|
+
/** @hidden */
|
|
4611
4611
|
this._closestItemIndex = null;
|
|
4612
4612
|
/** @hidden */
|
|
4613
4613
|
this._closestItemPosition = null;
|
|
@@ -4618,8 +4618,6 @@ class DndListDirective {
|
|
|
4618
4618
|
/** @hidden */
|
|
4619
4619
|
this._draggable = true;
|
|
4620
4620
|
/** @hidden */
|
|
4621
|
-
this._initialClass = 'fd-dnd-list';
|
|
4622
|
-
/** @hidden */
|
|
4623
4621
|
this._linesRemoved = true;
|
|
4624
4622
|
/** @hidden */
|
|
4625
4623
|
this._indicatorsRemoved = true;
|
|
@@ -4634,13 +4632,29 @@ class DndListDirective {
|
|
|
4634
4632
|
/** @hidden */
|
|
4635
4633
|
ngAfterContentInit() {
|
|
4636
4634
|
this._changeDraggableState(this._draggable);
|
|
4637
|
-
this.dndItems.changes
|
|
4635
|
+
this.dndItems.changes
|
|
4636
|
+
.pipe(startWith(null), takeUntil(this._onDestroy$))
|
|
4637
|
+
.subscribe(() => this.refreshQueryList());
|
|
4638
4638
|
}
|
|
4639
4639
|
/** @hidden */
|
|
4640
4640
|
ngOnDestroy() {
|
|
4641
4641
|
this._onDestroy$.next();
|
|
4642
4642
|
this._onDestroy$.complete();
|
|
4643
4643
|
}
|
|
4644
|
+
/**
|
|
4645
|
+
* Refreshes the indexes of the items.
|
|
4646
|
+
*/
|
|
4647
|
+
refreshQueryList() {
|
|
4648
|
+
const refresh$ = merge(this._refresh$, this._onDestroy$);
|
|
4649
|
+
this._refresh$.next();
|
|
4650
|
+
this._dndItemReference = this.dndItems.toArray();
|
|
4651
|
+
this._changeDraggableState(this._draggable);
|
|
4652
|
+
this.dndItems.forEach((item, index) => {
|
|
4653
|
+
item.moved.pipe(takeUntil(refresh$)).subscribe((position) => this.onMove(position, index));
|
|
4654
|
+
item.started.pipe(takeUntil(refresh$)).subscribe(() => this.dragStart(index));
|
|
4655
|
+
item.released.pipe(takeUntil(refresh$)).subscribe(async () => await this.dragEnd(index));
|
|
4656
|
+
});
|
|
4657
|
+
}
|
|
4644
4658
|
/** Method called when the item is being moved by 1 px */
|
|
4645
4659
|
onMove(mousePosition, draggedItemIndex) {
|
|
4646
4660
|
/** Temporary object, to store lowest distance values */
|
|
@@ -4821,18 +4835,6 @@ class DndListDirective {
|
|
|
4821
4835
|
this._indicatorsRemoved = false;
|
|
4822
4836
|
this._dndItemReference[closestItemIndex].createReplaceIndicator();
|
|
4823
4837
|
}
|
|
4824
|
-
/** @hidden */
|
|
4825
|
-
_refreshQueryList() {
|
|
4826
|
-
const refresh$ = merge(this._refresh$, this._onDestroy$);
|
|
4827
|
-
this._refresh$.next();
|
|
4828
|
-
this._dndItemReference = this.dndItems.toArray();
|
|
4829
|
-
this._changeDraggableState(this._draggable);
|
|
4830
|
-
this.dndItems.forEach((item, index) => {
|
|
4831
|
-
item.moved.pipe(takeUntil(refresh$)).subscribe((position) => this.onMove(position, index));
|
|
4832
|
-
item.started.pipe(takeUntil(refresh$)).subscribe(() => this.dragStart(index));
|
|
4833
|
-
item.released.pipe(takeUntil(refresh$)).subscribe(async () => await this.dragEnd(index));
|
|
4834
|
-
});
|
|
4835
|
-
}
|
|
4836
4838
|
/**
|
|
4837
4839
|
* @hidden
|
|
4838
4840
|
* Return information if an element is placed before the dragged element
|