ng-virtual-list 18.11.2 → 18.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +115 -111
- package/esm2022/lib/components/ng-list-item/base/base-virtual-list-item-component.mjs +170 -61
- package/esm2022/lib/components/ng-list-item/const/index.mjs +41 -2
- package/esm2022/lib/components/ng-list-item/interfaces/template-context.mjs +1 -1
- package/esm2022/lib/components/ng-list-item/ng-virtual-list-item.component.mjs +55 -51
- package/esm2022/lib/components/ng-list-item/ng-virtual-list-item.module.mjs +5 -5
- package/esm2022/lib/components/ng-list-item/utils/create-display-id.mjs +7 -1
- package/esm2022/lib/components/ng-list-item/utils/get-element-by-index.mjs +17 -3
- package/esm2022/lib/components/ng-list-item/utils/index.mjs +3 -2
- package/esm2022/lib/components/ng-list-item/utils/matrix-3d.mjs +18 -0
- package/esm2022/lib/components/ng-prerender-container/components/ng-prerender-list/ng-prerender-list.component.mjs +172 -47
- package/esm2022/lib/components/ng-prerender-container/components/ng-prerender-list-item/ng-prerender-list-item.component.mjs +32 -16
- package/esm2022/lib/components/ng-prerender-container/components/ng-prerender-list-item/ng-prerender-list-item.module.mjs +5 -5
- package/esm2022/lib/components/ng-prerender-container/components/ng-prerender-scroller/ng-prerender-scroller.component.mjs +58 -34
- package/esm2022/lib/components/ng-prerender-container/core/prerender-track-box.mjs +37 -7
- package/esm2022/lib/components/ng-prerender-container/interfaces/refresh-params.mjs +1 -1
- package/esm2022/lib/components/ng-prerender-container/ng-prerender-container.component.mjs +58 -28
- package/esm2022/lib/components/ng-scroll-bar/const/index.mjs +8 -1
- package/esm2022/lib/components/ng-scroll-bar/interfaces/scroll-bar-template-context.mjs +1 -1
- package/esm2022/lib/components/ng-scroll-bar/ng-scroll-bar.component.mjs +236 -88
- package/esm2022/lib/components/ng-scroll-view/base/base-scroll-view.component.mjs +170 -44
- package/esm2022/lib/components/ng-scroll-view/const/index.mjs +4 -2
- package/esm2022/lib/components/ng-scroll-view/interfaces/scroll-to-params.mjs +1 -1
- package/esm2022/lib/components/ng-scroll-view/ng-scroll-view.component.mjs +610 -99
- package/esm2022/lib/components/ng-scroll-view/utils/calculate-direction.mjs +7 -1
- package/esm2022/lib/components/ng-scroll-view/utils/calculate-velocity.mjs +12 -0
- package/esm2022/lib/components/ng-scroll-view/utils/get-dir.mjs +10 -0
- package/esm2022/lib/components/ng-scroll-view/utils/index.mjs +4 -2
- package/esm2022/lib/components/ng-scroll-view/utils/matrix-3d.mjs +15 -0
- package/esm2022/lib/components/ng-scroller/enums/scroller-directions.mjs +1 -1
- package/esm2022/lib/components/ng-scroller/ng-scroller.component.mjs +342 -160
- package/esm2022/lib/const/index.mjs +50 -10
- package/esm2022/lib/core/cache-map.mjs +1 -54
- package/esm2022/lib/core/const/index.mjs +3 -0
- package/esm2022/lib/core/enums/index.mjs +3 -0
- package/esm2022/lib/core/enums/item-display-methods.mjs +14 -0
- package/esm2022/lib/core/events/index.mjs +3 -0
- package/esm2022/lib/core/events/track-box-events.mjs +12 -0
- package/esm2022/lib/core/interfaces/get-item-position-options.mjs +2 -0
- package/esm2022/lib/core/interfaces/get-metrics-returns.mjs +2 -0
- package/esm2022/lib/core/interfaces/index.mjs +2 -0
- package/esm2022/lib/core/interfaces/item.mjs +2 -0
- package/esm2022/lib/core/interfaces/metrics.mjs +2 -0
- package/esm2022/lib/core/interfaces/recalculate-metrics-options.mjs +2 -0
- package/esm2022/lib/core/interfaces/update-collection-options.mjs +2 -0
- package/esm2022/lib/core/interfaces/update-collection-returns.mjs +2 -0
- package/esm2022/lib/core/track-box.mjs +601 -191
- package/esm2022/lib/core/tracker.mjs +14 -8
- package/esm2022/lib/core/types/cache-map-events.mjs +2 -0
- package/esm2022/lib/core/types/cache-map-listeners.mjs +2 -0
- package/esm2022/lib/core/types/cache.mjs +2 -0
- package/esm2022/lib/core/types/index.mjs +2 -0
- package/esm2022/lib/core/types/on-change-event-listener.mjs +2 -0
- package/esm2022/lib/core/types/on-tick-event-listener.mjs +2 -0
- package/esm2022/lib/core/utils/get-service-id-prop.mjs +10 -0
- package/esm2022/lib/core/utils/index.mjs +3 -0
- package/esm2022/lib/directives/index.mjs +3 -3
- package/esm2022/lib/directives/locale-sensitive/locale-sensitive.directive.mjs +34 -13
- package/esm2022/lib/directives/virtual-click/virtual-click.directive.mjs +67 -0
- package/esm2022/lib/directives/virtual-click/virtual-click.module.mjs +19 -0
- package/esm2022/lib/enums/alignments.mjs +12 -0
- package/esm2022/lib/enums/collapsing-modes.mjs +22 -0
- package/esm2022/lib/enums/index.mjs +8 -4
- package/esm2022/lib/enums/selecting-modes-types.mjs +22 -0
- package/esm2022/lib/enums/selecting-modes.mjs +22 -0
- package/esm2022/lib/enums/snap-to-item-aligns.mjs +22 -0
- package/esm2022/lib/enums/spreading-modes.mjs +18 -0
- package/esm2022/lib/interfaces/animation-params.mjs +1 -1
- package/esm2022/lib/interfaces/base-virtual-list-item-component.mjs +2 -9
- package/esm2022/lib/interfaces/index.mjs +1 -1
- package/esm2022/lib/interfaces/item-transformation.mjs +2 -0
- package/esm2022/lib/interfaces/point.mjs +2 -0
- package/esm2022/lib/interfaces/scroll-options.mjs +1 -1
- package/esm2022/lib/interfaces/scroll-params.mjs +1 -1
- package/esm2022/lib/models/item-config-map.model.mjs +1 -1
- package/esm2022/lib/models/item.model.mjs +1 -1
- package/esm2022/lib/models/render-item-config.model.mjs +1 -1
- package/esm2022/lib/models/render-item-measures.model.mjs +1 -1
- package/esm2022/lib/ng-virtual-list-public.service.mjs +6 -7
- package/esm2022/lib/ng-virtual-list.component.mjs +2033 -903
- package/esm2022/lib/ng-virtual-list.service.mjs +91 -30
- package/esm2022/lib/transformations/deck-of-cards-3d.mjs +57 -0
- package/esm2022/lib/transformations/deck-of-cards.mjs +54 -0
- package/esm2022/lib/transformations/event-horizon.mjs +47 -0
- package/esm2022/lib/transformations/index.mjs +13 -0
- package/esm2022/lib/transformations/linear.mjs +47 -0
- package/esm2022/lib/transformations/swipe-3d.mjs +51 -0
- package/esm2022/lib/types/alignment.mjs +2 -0
- package/esm2022/lib/types/arithmetic-expression.mjs +2 -0
- package/esm2022/lib/types/collapsing-mode.mjs +2 -0
- package/esm2022/lib/types/collection-mode.mjs +2 -0
- package/esm2022/lib/types/color.mjs +2 -0
- package/esm2022/lib/types/direction.mjs +2 -0
- package/esm2022/lib/types/float-or-persentage-value.mjs +2 -0
- package/esm2022/lib/types/focus-item-params.mjs +1 -1
- package/esm2022/lib/types/gradient-color-position.mjs +1 -1
- package/esm2022/lib/types/index.mjs +1 -1
- package/esm2022/lib/types/item-transform.mjs +2 -0
- package/esm2022/lib/types/scroll-direction.mjs +1 -1
- package/esm2022/lib/types/selecting-mode.mjs +2 -0
- package/esm2022/lib/types/snap-to-item-align.mjs +2 -0
- package/esm2022/lib/types/snapping-distance.mjs +2 -0
- package/esm2022/lib/types/snapping-method.mjs +2 -0
- package/esm2022/lib/types/spreading-mode.mjs +2 -0
- package/esm2022/lib/types/text-direction.mjs +2 -0
- package/esm2022/lib/utils/animator/animator.mjs +28 -8
- package/esm2022/lib/utils/animator/const/index.mjs +2 -0
- package/esm2022/lib/utils/animator/index.mjs +3 -2
- package/esm2022/lib/utils/animator/interfaces/animator-params.mjs +2 -0
- package/esm2022/lib/utils/animator/interfaces/animator-update-data.mjs +2 -0
- package/esm2022/lib/utils/animator/interfaces/index.mjs +2 -0
- package/esm2022/lib/utils/animator/types/easing.mjs +1 -1
- package/esm2022/lib/utils/disposable-component.mjs +27 -0
- package/esm2022/lib/utils/event-emitter/event-emitter.mjs +1 -1
- package/esm2022/lib/utils/get-scroll-state-version.mjs +12 -0
- package/esm2022/lib/utils/is-collapse-mode.mjs +18 -0
- package/esm2022/lib/utils/is-collection-mode.mjs +1 -1
- package/esm2022/lib/utils/is-direction.mjs +1 -1
- package/esm2022/lib/utils/is-persentage-value.mjs +14 -0
- package/esm2022/lib/utils/is-select-mode.mjs +18 -0
- package/esm2022/lib/utils/is-spreading-mode.mjs +15 -0
- package/esm2022/lib/utils/list-validators.mjs +1 -1
- package/esm2022/lib/utils/normalize-collection.mjs +42 -0
- package/esm2022/lib/utils/object.mjs +1 -1
- package/esm2022/lib/utils/parse-arithmetic-expression.mjs +53 -0
- package/esm2022/lib/utils/parse-float-or-persentage-value.mjs +17 -0
- package/esm2022/lib/utils/scrolling-direction.mjs +29 -0
- package/esm2022/lib/utils/snapping-method.mjs +1 -1
- package/esm2022/public-api.mjs +4 -1
- package/fesm2022/ng-virtual-list.mjs +7545 -3904
- package/fesm2022/ng-virtual-list.mjs.map +1 -1
- package/lib/components/ng-list-item/base/base-virtual-list-item-component.d.ts +40 -16
- package/lib/components/ng-list-item/const/index.d.ts +3 -1
- package/lib/components/ng-list-item/interfaces/template-context.d.ts +1 -1
- package/lib/components/ng-list-item/ng-virtual-list-item.component.d.ts +5 -2
- package/lib/components/ng-list-item/ng-virtual-list-item.module.d.ts +2 -2
- package/lib/components/ng-list-item/utils/create-display-id.d.ts +6 -0
- package/lib/components/ng-list-item/utils/get-element-by-index.d.ts +15 -1
- package/lib/components/ng-list-item/utils/index.d.ts +2 -1
- package/lib/components/ng-list-item/utils/matrix-3d.d.ts +7 -0
- package/lib/components/ng-prerender-container/components/ng-prerender-list/ng-prerender-list.component.d.ts +69 -26
- package/lib/components/ng-prerender-container/components/ng-prerender-list-item/ng-prerender-list-item.component.d.ts +2 -2
- package/lib/components/ng-prerender-container/components/ng-prerender-list-item/ng-prerender-list-item.module.d.ts +2 -2
- package/lib/components/ng-prerender-container/components/ng-prerender-scroller/ng-prerender-scroller.component.d.ts +33 -12
- package/lib/components/ng-prerender-container/interfaces/refresh-params.d.ts +1 -0
- package/lib/components/ng-prerender-container/ng-prerender-container.component.d.ts +20 -17
- package/lib/components/ng-scroll-bar/const/index.d.ts +2 -0
- package/lib/components/ng-scroll-bar/interfaces/scroll-bar-template-context.d.ts +2 -2
- package/lib/components/ng-scroll-bar/ng-scroll-bar.component.d.ts +75 -24
- package/lib/components/ng-scroll-view/base/base-scroll-view.component.d.ts +49 -16
- package/lib/components/ng-scroll-view/const/index.d.ts +3 -1
- package/lib/components/ng-scroll-view/interfaces/scroll-to-params.d.ts +4 -1
- package/lib/components/ng-scroll-view/ng-scroll-view.component.d.ts +79 -11
- package/lib/components/ng-scroll-view/utils/calculate-direction.d.ts +6 -0
- package/lib/components/ng-scroll-view/utils/calculate-velocity.d.ts +7 -0
- package/lib/components/ng-scroll-view/utils/get-dir.d.ts +7 -0
- package/lib/components/ng-scroll-view/utils/index.d.ts +3 -1
- package/lib/components/ng-scroll-view/utils/matrix-3d.d.ts +7 -0
- package/lib/components/ng-scroller/enums/scroller-directions.d.ts +2 -1
- package/lib/components/ng-scroller/ng-scroller.component.d.ts +111 -47
- package/lib/const/index.d.ts +46 -5
- package/lib/core/cache-map.d.ts +0 -10
- package/lib/core/const/index.d.ts +1 -0
- package/lib/core/enums/index.d.ts +2 -0
- package/lib/core/enums/item-display-methods.d.ts +12 -0
- package/lib/core/events/index.d.ts +2 -0
- package/lib/core/events/track-box-events.d.ts +10 -0
- package/lib/core/interfaces/get-item-position-options.d.ts +10 -0
- package/lib/core/interfaces/get-metrics-returns.d.ts +11 -0
- package/lib/core/interfaces/index.d.ts +8 -0
- package/lib/core/interfaces/item.d.ts +9 -0
- package/lib/core/interfaces/metrics.d.ts +51 -0
- package/lib/core/interfaces/recalculate-metrics-options.d.ts +32 -0
- package/lib/core/interfaces/update-collection-options.d.ts +10 -0
- package/lib/core/interfaces/update-collection-returns.d.ts +14 -0
- package/lib/core/track-box.d.ts +25 -95
- package/lib/core/tracker.d.ts +1 -1
- package/lib/core/types/cache-map-events.d.ts +8 -0
- package/lib/core/types/cache-map-listeners.d.ts +9 -0
- package/lib/core/types/cache.d.ts +12 -0
- package/lib/core/types/index.d.ts +6 -0
- package/lib/core/types/on-change-event-listener.d.ts +7 -0
- package/lib/core/types/on-tick-event-listener.d.ts +7 -0
- package/lib/core/utils/get-service-id-prop.d.ts +7 -0
- package/lib/core/utils/index.d.ts +2 -0
- package/lib/directives/index.d.ts +2 -2
- package/lib/directives/locale-sensitive/locale-sensitive.directive.d.ts +16 -6
- package/lib/directives/virtual-click/virtual-click.directive.d.ts +22 -0
- package/lib/directives/virtual-click/virtual-click.module.d.ts +8 -0
- package/lib/enums/alignments.d.ts +10 -0
- package/lib/enums/collapsing-modes.d.ts +20 -0
- package/lib/enums/index.d.ts +7 -9
- package/lib/enums/{method-for-selecting-types.d.ts → selecting-modes-types.d.ts} +3 -3
- package/lib/enums/{methods-for-selecting.d.ts → selecting-modes.d.ts} +3 -3
- package/lib/enums/snap-to-item-aligns.d.ts +20 -0
- package/lib/enums/spreading-modes.d.ts +16 -0
- package/lib/interfaces/animation-params.d.ts +1 -0
- package/lib/interfaces/base-virtual-list-item-component.d.ts +13 -13
- package/lib/interfaces/index.d.ts +3 -2
- package/lib/interfaces/item-transformation.d.ts +22 -0
- package/lib/interfaces/point.d.ts +16 -0
- package/lib/interfaces/scroll-options.d.ts +4 -0
- package/lib/interfaces/scroll-params.d.ts +3 -2
- package/lib/models/item-config-map.model.d.ts +5 -0
- package/lib/models/item.model.d.ts +7 -0
- package/lib/models/render-item-config.model.d.ts +50 -0
- package/lib/models/render-item-measures.model.d.ts +71 -0
- package/lib/ng-virtual-list-public.service.d.ts +4 -5
- package/lib/ng-virtual-list.component.d.ts +462 -135
- package/lib/ng-virtual-list.service.d.ts +33 -12
- package/lib/transformations/deck-of-cards-3d.d.ts +54 -0
- package/lib/transformations/deck-of-cards.d.ts +50 -0
- package/lib/transformations/event-horizon.d.ts +26 -0
- package/lib/transformations/index.d.ts +7 -0
- package/lib/transformations/linear.d.ts +26 -0
- package/lib/transformations/swipe-3d.d.ts +38 -0
- package/lib/types/alignment.d.ts +8 -0
- package/lib/types/arithmetic-expression.d.ts +10 -0
- package/lib/types/collapsing-mode.d.ts +8 -0
- package/lib/{enums → types}/collection-mode.d.ts +1 -1
- package/lib/types/color.d.ts +4 -0
- package/lib/{enums → types}/direction.d.ts +1 -1
- package/lib/types/float-or-persentage-value.d.ts +7 -0
- package/lib/types/focus-item-params.d.ts +6 -0
- package/lib/types/gradient-color-position.d.ts +1 -1
- package/lib/types/index.d.ts +15 -1
- package/lib/types/item-transform.d.ts +9 -0
- package/lib/types/scroll-direction.d.ts +2 -0
- package/lib/types/selecting-mode.d.ts +8 -0
- package/lib/types/snap-to-item-align.d.ts +8 -0
- package/lib/types/snapping-distance.d.ts +8 -0
- package/lib/{enums → types}/snapping-method.d.ts +1 -1
- package/lib/types/spreading-mode.d.ts +8 -0
- package/lib/{enums → types}/text-direction.d.ts +1 -1
- package/lib/utils/animator/animator.d.ts +10 -17
- package/lib/utils/animator/const/index.d.ts +1 -0
- package/lib/utils/animator/index.d.ts +2 -1
- package/lib/utils/animator/interfaces/animator-params.d.ts +18 -0
- package/lib/utils/animator/interfaces/animator-update-data.d.ts +13 -0
- package/lib/utils/animator/interfaces/index.d.ts +3 -0
- package/lib/utils/animator/types/easing.d.ts +6 -0
- package/lib/utils/disposable-component.d.ts +15 -0
- package/lib/utils/get-scroll-state-version.d.ts +1 -0
- package/lib/utils/is-collapse-mode.d.ts +8 -0
- package/lib/utils/is-collection-mode.d.ts +1 -1
- package/lib/utils/is-direction.d.ts +1 -1
- package/lib/utils/is-persentage-value.d.ts +7 -0
- package/lib/utils/is-select-mode.d.ts +8 -0
- package/lib/utils/is-spreading-mode.d.ts +8 -0
- package/lib/utils/list-validators.d.ts +1 -1
- package/lib/utils/normalize-collection.d.ts +8 -0
- package/lib/utils/object.d.ts +1 -1
- package/lib/utils/parse-arithmetic-expression.d.ts +8 -0
- package/lib/utils/parse-float-or-persentage-value.d.ts +7 -0
- package/lib/utils/scrolling-direction.d.ts +17 -0
- package/lib/utils/snapping-method.d.ts +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +3 -0
- package/esm2022/lib/components/ng-scroller/const/index.mjs +0 -2
- package/esm2022/lib/directives/item-click/item-click.directive.mjs +0 -59
- package/esm2022/lib/directives/item-click/item-click.module.mjs +0 -19
- package/esm2022/lib/enums/collection-mode.mjs +0 -2
- package/esm2022/lib/enums/direction.mjs +0 -2
- package/esm2022/lib/enums/method-for-selecting-types.mjs +0 -22
- package/esm2022/lib/enums/method-for-selecting.mjs +0 -2
- package/esm2022/lib/enums/methods-for-selecting.mjs +0 -22
- package/esm2022/lib/enums/snapping-method.mjs +0 -2
- package/esm2022/lib/enums/text-direction.mjs +0 -2
- package/esm2022/lib/utils/is-method-for-selecting.mjs +0 -18
- package/lib/components/ng-scroller/const/index.d.ts +0 -1
- package/lib/directives/item-click/item-click.directive.d.ts +0 -19
- package/lib/directives/item-click/item-click.module.d.ts +0 -8
- package/lib/enums/method-for-selecting.d.ts +0 -8
- package/lib/utils/is-method-for-selecting.d.ts +0 -8
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core';
|
|
2
|
-
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
3
2
|
import { BehaviorSubject } from 'rxjs/internal/BehaviorSubject';
|
|
4
|
-
import { Subject, tap } from 'rxjs';
|
|
5
|
-
import { TrackBoxEvents } from './core/
|
|
3
|
+
import { Subject, takeUntil, tap } from 'rxjs';
|
|
4
|
+
import { TrackBoxEvents } from './core/events';
|
|
6
5
|
import { FocusAlignments, TextDirections } from './enums';
|
|
7
|
-
import {
|
|
8
|
-
import { BEHAVIOR_AUTO, BEHAVIOR_INSTANT, DEFAULT_ANIMATION_PARAMS, DEFAULT_CLICK_DISTANCE, DEFAULT_COLLAPSE_BY_CLICK, DEFAULT_SELECT_BY_CLICK, ITEM_CONTAINER, TRACK_BY_PROPERTY_NAME, } from './const';
|
|
6
|
+
import { SelectingModesTypes } from './enums/selecting-modes-types';
|
|
7
|
+
import { BEHAVIOR_AUTO, BEHAVIOR_INSTANT, DEFAULT_ANIMATION_PARAMS, DEFAULT_CLICK_DISTANCE, DEFAULT_COLLAPSE_BY_CLICK, DEFAULT_ITEM_SIZE, DEFAULT_SELECT_BY_CLICK, DEFAULT_SNAP_TO_ITEM, DEFAULT_ZINDEX_WHEN_SELECTING, ITEM_CONTAINER, TRACK_BY_PROPERTY_NAME, } from './const';
|
|
9
8
|
import { getListElements, NGVL_INDEX } from './components/ng-list-item/utils';
|
|
10
9
|
import { validateFocusAlignment, validateId } from './utils/list-validators';
|
|
11
10
|
import { getSelectorByItemId } from './utils/get-selector-by-item-id';
|
|
@@ -19,22 +18,28 @@ import * as i0 from "@angular/core";
|
|
|
19
18
|
* @email djonnyx@gmail.com
|
|
20
19
|
*/
|
|
21
20
|
export class NgVirtualListService {
|
|
21
|
+
_$unsubscribe = new Subject();
|
|
22
22
|
_id = 0;
|
|
23
23
|
get id() { return this._id; }
|
|
24
24
|
_nextComponentId = 0;
|
|
25
|
-
_$
|
|
26
|
-
$
|
|
25
|
+
_$virtualClick = new Subject();
|
|
26
|
+
$virtualClick = this._$virtualClick.asObservable();
|
|
27
27
|
_$selectedIds = new BehaviorSubject(null);
|
|
28
28
|
$selectedIds = this._$selectedIds.asObservable();
|
|
29
29
|
_$collapsedIds = new BehaviorSubject([]);
|
|
30
30
|
$collapsedIds = this._$collapsedIds.asObservable();
|
|
31
|
-
_$
|
|
32
|
-
$
|
|
33
|
-
set
|
|
34
|
-
this._$
|
|
31
|
+
_$selectingMode = new BehaviorSubject(0);
|
|
32
|
+
$selectingMode = this._$selectingMode.asObservable();
|
|
33
|
+
set selectingMode(v) {
|
|
34
|
+
this._$selectingMode.next(v);
|
|
35
35
|
}
|
|
36
36
|
_$focusedId = new BehaviorSubject(null);
|
|
37
37
|
$focusedId = this._$focusedId.asObservable();
|
|
38
|
+
set focusedId(v) {
|
|
39
|
+
if (this._$focusedId.getValue() !== v) {
|
|
40
|
+
this._$focusedId.next(v);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
38
43
|
get focusedId() { return this._$focusedId.getValue(); }
|
|
39
44
|
_$focusItem = new Subject();
|
|
40
45
|
$focusItem = this._$focusItem.asObservable();
|
|
@@ -52,16 +57,25 @@ export class NgVirtualListService {
|
|
|
52
57
|
lastFocusedItemId = -1;
|
|
53
58
|
scrollStartOffset = 0;
|
|
54
59
|
scrollEndOffset = 0;
|
|
60
|
+
zIndexWhenSelecting = DEFAULT_ZINDEX_WHEN_SELECTING;
|
|
55
61
|
selectByClick = DEFAULT_SELECT_BY_CLICK;
|
|
56
62
|
collapseByClick = DEFAULT_COLLAPSE_BY_CLICK;
|
|
57
63
|
defaultItemValue = null;
|
|
64
|
+
snapToItem = DEFAULT_SNAP_TO_ITEM;
|
|
65
|
+
isInfinity = false;
|
|
58
66
|
isVertical = true;
|
|
59
67
|
dynamic = true;
|
|
68
|
+
itemSize = DEFAULT_ITEM_SIZE;
|
|
60
69
|
snapScrollToStart = false;
|
|
61
70
|
snapScrollToEnd = false;
|
|
62
71
|
animationParams = DEFAULT_ANIMATION_PARAMS;
|
|
72
|
+
isNoneCollapse = false;
|
|
73
|
+
isMultipleCollapse = false;
|
|
74
|
+
isAccordionCollapse = false;
|
|
63
75
|
_trackBox;
|
|
64
76
|
listElement = null;
|
|
77
|
+
items = [];
|
|
78
|
+
itemConfigMap = {};
|
|
65
79
|
_$displayItems = new BehaviorSubject([]);
|
|
66
80
|
$displayItems = this._$displayItems.asObservable();
|
|
67
81
|
get displayItems() { return this._$displayItems.getValue(); }
|
|
@@ -96,6 +110,8 @@ export class NgVirtualListService {
|
|
|
96
110
|
}
|
|
97
111
|
_$scrollBarSize = new BehaviorSubject(this._scrollBarSize);
|
|
98
112
|
$scrollBarSize = this._$scrollBarSize.asObservable();
|
|
113
|
+
_$intersectionElementBySnapToItemAlign = new BehaviorSubject(null);
|
|
114
|
+
$intersectionElementBySnapToItemAlign = this._$intersectionElementBySnapToItemAlign.asObservable();
|
|
99
115
|
_$clickDistance = new BehaviorSubject(DEFAULT_CLICK_DISTANCE);
|
|
100
116
|
$clickDistance = this._$clickDistance.asObservable();
|
|
101
117
|
get clickDistance() { return this._$clickDistance.getValue(); }
|
|
@@ -126,22 +142,22 @@ export class NgVirtualListService {
|
|
|
126
142
|
}
|
|
127
143
|
get collapsedIds() { return this._$collapsedIds.getValue(); }
|
|
128
144
|
constructor() {
|
|
129
|
-
this._$
|
|
145
|
+
this._$selectingMode.pipe(takeUntil(this._$unsubscribe), tap(v => {
|
|
130
146
|
switch (v) {
|
|
131
|
-
case
|
|
147
|
+
case SelectingModesTypes.SELECT: {
|
|
132
148
|
const curr = this._$selectedIds.getValue();
|
|
133
149
|
if (typeof curr !== 'number' && typeof curr !== 'string') {
|
|
134
150
|
this._$selectedIds.next(null);
|
|
135
151
|
}
|
|
136
152
|
break;
|
|
137
153
|
}
|
|
138
|
-
case
|
|
154
|
+
case SelectingModesTypes.MULTI_SELECT: {
|
|
139
155
|
if (!Array.isArray(this._$selectedIds.getValue())) {
|
|
140
156
|
this._$selectedIds.next([]);
|
|
141
157
|
}
|
|
142
158
|
break;
|
|
143
159
|
}
|
|
144
|
-
case
|
|
160
|
+
case SelectingModesTypes.NONE:
|
|
145
161
|
default: {
|
|
146
162
|
this._$selectedIds.next(null);
|
|
147
163
|
break;
|
|
@@ -149,8 +165,8 @@ export class NgVirtualListService {
|
|
|
149
165
|
}
|
|
150
166
|
})).subscribe();
|
|
151
167
|
}
|
|
152
|
-
|
|
153
|
-
this._$
|
|
168
|
+
virtualClick(data) {
|
|
169
|
+
this._$virtualClick.next(data);
|
|
154
170
|
if (this.collapseByClick) {
|
|
155
171
|
const trackBy = this.trackBy, id = data?.[trackBy] ?? null;
|
|
156
172
|
this.collapse(id);
|
|
@@ -160,8 +176,8 @@ export class NgVirtualListService {
|
|
|
160
176
|
this.select(id);
|
|
161
177
|
}
|
|
162
178
|
}
|
|
163
|
-
update(immediately = false
|
|
164
|
-
this._trackBox?.changes(immediately,
|
|
179
|
+
update(immediately = false) {
|
|
180
|
+
this._trackBox?.changes(immediately, false);
|
|
165
181
|
}
|
|
166
182
|
getItemConfig(id) {
|
|
167
183
|
const displayItems = this.displayItems;
|
|
@@ -183,8 +199,8 @@ export class NgVirtualListService {
|
|
|
183
199
|
validateId(id);
|
|
184
200
|
const config = this.getItemConfig(id);
|
|
185
201
|
if ((!!config && config.selectable)) {
|
|
186
|
-
switch (this._$
|
|
187
|
-
case
|
|
202
|
+
switch (this._$selectingMode.getValue()) {
|
|
203
|
+
case SelectingModesTypes.SELECT: {
|
|
188
204
|
const curr = this._$selectedIds.getValue();
|
|
189
205
|
if (selected === undefined) {
|
|
190
206
|
this._$selectedIds.next(curr !== id ? id : null);
|
|
@@ -194,7 +210,7 @@ export class NgVirtualListService {
|
|
|
194
210
|
}
|
|
195
211
|
break;
|
|
196
212
|
}
|
|
197
|
-
case
|
|
213
|
+
case SelectingModesTypes.MULTI_SELECT: {
|
|
198
214
|
const curr = [...(this._$selectedIds.getValue() || [])], index = curr.indexOf(id);
|
|
199
215
|
if (selected === undefined) {
|
|
200
216
|
if (index > -1) {
|
|
@@ -224,7 +240,7 @@ export class NgVirtualListService {
|
|
|
224
240
|
}
|
|
225
241
|
break;
|
|
226
242
|
}
|
|
227
|
-
case
|
|
243
|
+
case SelectingModesTypes.NONE:
|
|
228
244
|
default: {
|
|
229
245
|
this._$selectedIds.next(null);
|
|
230
246
|
}
|
|
@@ -237,11 +253,25 @@ export class NgVirtualListService {
|
|
|
237
253
|
* @param collapsed - If the value is undefined, then the toggle method is executed, if false or true, then the collapse/expand is performed.
|
|
238
254
|
*/
|
|
239
255
|
collapse(id, collapsed) {
|
|
256
|
+
if (this.isNoneCollapse) {
|
|
257
|
+
return;
|
|
258
|
+
}
|
|
240
259
|
validateId(id);
|
|
241
260
|
const config = this.getItemConfig(id);
|
|
242
|
-
if ((!!config && config.
|
|
243
|
-
const
|
|
244
|
-
if (
|
|
261
|
+
if ((!!config && config.collapsable)) {
|
|
262
|
+
const allGroups = [];
|
|
263
|
+
if (this.isAccordionCollapse) {
|
|
264
|
+
const items = this.items, itemConfigMap = this.itemConfigMap, trackBy = this.trackBy;
|
|
265
|
+
for (let i = 0, l = items.length; i < l; i++) {
|
|
266
|
+
const item = items[i], id = item[trackBy], collapsable = itemConfigMap?.[id]?.collapsable === true;
|
|
267
|
+
if (!collapsable) {
|
|
268
|
+
continue;
|
|
269
|
+
}
|
|
270
|
+
allGroups.push(id);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
const curr = this.isAccordionCollapse ? allGroups : [...(this._$collapsedIds.getValue() || [])], index = curr.indexOf(id);
|
|
274
|
+
if (!collapsed) {
|
|
245
275
|
if (index > -1) {
|
|
246
276
|
curr.splice(index, 1);
|
|
247
277
|
this._$collapsedIds.next(curr);
|
|
@@ -267,6 +297,20 @@ export class NgVirtualListService {
|
|
|
267
297
|
this._$collapsedIds.next(curr);
|
|
268
298
|
}
|
|
269
299
|
}
|
|
300
|
+
if (this.isAccordionCollapse) {
|
|
301
|
+
this._$scrollTo.next({
|
|
302
|
+
id, cb: null, options: {
|
|
303
|
+
delay: 100, focused: true,
|
|
304
|
+
},
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
else {
|
|
308
|
+
this._$scrollTo.next({
|
|
309
|
+
id, cb: null, options: {
|
|
310
|
+
delay: 100, focused: true,
|
|
311
|
+
},
|
|
312
|
+
});
|
|
313
|
+
}
|
|
270
314
|
}
|
|
271
315
|
}
|
|
272
316
|
getFocusedElementById(id) {
|
|
@@ -306,6 +350,12 @@ export class NgVirtualListService {
|
|
|
306
350
|
}
|
|
307
351
|
return false;
|
|
308
352
|
}
|
|
353
|
+
focusList() {
|
|
354
|
+
const element = this.listElement;
|
|
355
|
+
if (!!element) {
|
|
356
|
+
element.focus({ preventScroll: true });
|
|
357
|
+
}
|
|
358
|
+
}
|
|
309
359
|
focusFirstElement() {
|
|
310
360
|
const elements = this.listElement?.querySelectorAll(getListElements()), elList = (elements ? Array.from(elements) : []).sort((a, b) => {
|
|
311
361
|
const indexA = Number(a.getAttribute(NGVL_INDEX)), indexB = Number(b.getAttribute(NGVL_INDEX));
|
|
@@ -327,9 +377,6 @@ export class NgVirtualListService {
|
|
|
327
377
|
this.focus(element, FocusAlignments.CENTER, BEHAVIOR_INSTANT);
|
|
328
378
|
}
|
|
329
379
|
}
|
|
330
|
-
areaFocus(id) {
|
|
331
|
-
this._$focusedId.next(id);
|
|
332
|
-
}
|
|
333
380
|
initialize(id, trackBox) {
|
|
334
381
|
this._id = id;
|
|
335
382
|
this._trackBox = trackBox;
|
|
@@ -340,6 +387,14 @@ export class NgVirtualListService {
|
|
|
340
387
|
return this._nextComponentId = this._nextComponentId === Number.MAX_SAFE_INTEGER
|
|
341
388
|
? 0 : this._nextComponentId + 1;
|
|
342
389
|
}
|
|
390
|
+
getComponentBoundsByIntersectionPosition(position, maxPosition = null) {
|
|
391
|
+
return this._trackBox?.getComponentBoundsByIntersectionPosition(position, maxPosition) ?? null;
|
|
392
|
+
}
|
|
393
|
+
setIntersectionElementBySnapToItemAlign(id) {
|
|
394
|
+
if (this._$intersectionElementBySnapToItemAlign.getValue() !== id) {
|
|
395
|
+
this._$intersectionElementBySnapToItemAlign.next(id);
|
|
396
|
+
}
|
|
397
|
+
}
|
|
343
398
|
/**
|
|
344
399
|
* The method scrolls the list to the element with the given `id` and returns the value of the scrolled area.
|
|
345
400
|
*/
|
|
@@ -358,6 +413,12 @@ export class NgVirtualListService {
|
|
|
358
413
|
scrollToEnd(options) {
|
|
359
414
|
this._$scrollToEnd.next(options);
|
|
360
415
|
}
|
|
416
|
+
dispose() {
|
|
417
|
+
if (this._$unsubscribe) {
|
|
418
|
+
this._$unsubscribe.next();
|
|
419
|
+
this._$unsubscribe.complete();
|
|
420
|
+
}
|
|
421
|
+
}
|
|
361
422
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: NgVirtualListService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
362
423
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: NgVirtualListService, providedIn: 'root' });
|
|
363
424
|
}
|
|
@@ -367,4 +428,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
367
428
|
providedIn: 'root'
|
|
368
429
|
}]
|
|
369
430
|
}], ctorParameters: () => [] });
|
|
370
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctdmlydHVhbC1saXN0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9uZy12aXJ0dWFsLWxpc3Quc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQVksY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFJNUQsT0FBTyxFQUFFLGVBQWUsRUFBaUIsY0FBYyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzlFLE9BQU8sRUFDTCxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsd0JBQXdCLEVBQUUsc0JBQXNCLEVBQUUseUJBQXlCLEVBQUUsdUJBQXVCLEVBQ3JJLGNBQWMsRUFDZCxzQkFBc0IsR0FDdkIsTUFBTSxTQUFTLENBQUM7QUFFakIsT0FBTyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUU5RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUNBQWlDLENBQUM7O0FBR3RFOzs7Ozs7O0dBT0c7QUFJSCxNQUFNLE9BQU8sb0JBQW9CO0lBQ3ZCLEdBQUcsR0FBVyxDQUFDLENBQUM7SUFDeEIsSUFBSSxFQUFFLEtBQUssT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUVyQixn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QVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMvaW50ZXJuYWwvQmVoYXZpb3JTdWJqZWN0JztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFwIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFRyYWNrQm94LCBUcmFja0JveEV2ZW50cyB9IGZyb20gJy4vY29yZS90cmFjay1ib3gnO1xyXG5pbXBvcnQgeyBJUmVuZGVyVmlydHVhbExpc3RJdGVtLCBJVmlydHVhbExpc3RJdGVtIH0gZnJvbSAnLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBJQW5pbWF0aW9uUGFyYW1zLCBJU2Nyb2xsT3B0aW9ucywgSVNpemUgfSBmcm9tICcuL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBJUmVuZGVyVmlydHVhbExpc3RDb2xsZWN0aW9uIH0gZnJvbSAnLi9tb2RlbHMvcmVuZGVyLWNvbGxlY3Rpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBGb2N1c0FsaWdubWVudHMsIFRleHREaXJlY3Rpb24sIFRleHREaXJlY3Rpb25zIH0gZnJvbSAnLi9lbnVtcyc7XHJcbmltcG9ydCB7IE1ldGhvZHNGb3JTZWxlY3RpbmdUeXBlcyB9IGZyb20gJy4vZW51bXMvbWV0aG9kLWZvci1zZWxlY3RpbmctdHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIEJFSEFWSU9SX0FVVE8sIEJFSEFWSU9SX0lOU1RBTlQsIERFRkFVTFRfQU5JTUFUSU9OX1BBUkFNUywgREVGQVVMVF9DTElDS19ESVNUQU5DRSwgREVGQVVMVF9DT0xMQVBTRV9CWV9DTElDSywgREVGQVVMVF9TRUxFQ1RfQllfQ0xJQ0ssXHJcbiAgSVRFTV9DT05UQUlORVIsXHJcbiAgVFJBQ0tfQllfUFJPUEVSVFlfTkFNRSxcclxufSBmcm9tICcuL2NvbnN0JztcclxuaW1wb3J0IHsgRm9jdXNBbGlnbm1lbnQsIElkIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IGdldExpc3RFbGVtZW50cywgTkdWTF9JTkRFWCB9IGZyb20gJy4vY29tcG9uZW50cy9uZy1saXN0LWl0ZW0vdXRpbHMnO1xyXG5pbXBvcnQgeyBGb2N1c0l0ZW1QYXJhbXMgfSBmcm9tICcuL3R5cGVzL2ZvY3VzLWl0ZW0tcGFyYW1zJztcclxuaW1wb3J0IHsgdmFsaWRhdGVGb2N1c0FsaWdubWVudCwgdmFsaWRhdGVJZCB9IGZyb20gJy4vdXRpbHMvbGlzdC12YWxpZGF0b3JzJztcclxuaW1wb3J0IHsgZ2V0U2VsZWN0b3JCeUl0ZW1JZCB9IGZyb20gJy4vdXRpbHMvZ2V0LXNlbGVjdG9yLWJ5LWl0ZW0taWQnO1xyXG5pbXBvcnQgeyBJU2Nyb2xsVG9QYXJhbXMgfSBmcm9tICcuL2ludGVyZmFjZXMvc2Nyb2xsLXRvLXBhcmFtcyc7XHJcblxyXG4vKipcclxuICogTmdWaXJ0dWFsTGlzdFNlcnZpY2VcclxuICogTWF4aW11bSBwZXJmb3JtYW5jZSBmb3IgZXh0cmVtZWx5IGxhcmdlIGxpc3RzLlxyXG4gKiBJdCBpcyBiYXNlZCBvbiBhbGdvcml0aG1zIGZvciB2aXJ0dWFsaXphdGlvbiBvZiBzY3JlZW4gb2JqZWN0cy5cclxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0Rqb25ueVgvbmctdmlydHVhbC1saXN0L2Jsb2IvMTgueC9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9uZy12aXJ0dWFsLWxpc3Quc2VydmljZS50c1xyXG4gKiBAYXV0aG9yIEV2Z2VuaWkgQWxleGFuZHJvdmljaCBHcmViZW5uaWtvdlxyXG4gKiBAZW1haWwgZGpvbm55eEBnbWFpbC5jb21cclxuICovXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIE5nVmlydHVhbExpc3RTZXJ2aWNlIHtcclxuICBwcml2YXRlIF9pZDogbnVtYmVyID0gMDtcclxuICBnZXQgaWQoKSB7IHJldHVybiB0aGlzLl9pZDsgfVxyXG5cclxuICBwcml2YXRlIF9uZXh0Q29tcG9uZW50SWQ6IG51bWJlciA9IDA7XHJcblxyXG4gIHByaXZhdGUgXyRpdGVtQ2xpY2sgPSBuZXcgU3ViamVjdDxJUmVuZGVyVmlydHVhbExpc3RJdGVtPGFueT4gfCBudWxsPigpO1xyXG4gICRpdGVtQ2xpY2sgPSB0aGlzLl8kaXRlbUNsaWNrLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kc2VsZWN0ZWRJZHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFycmF5PElkPiB8IElkIHwgbnVsbD4obnVsbCk7XHJcbiAgJHNlbGVjdGVkSWRzID0gdGhpcy5fJHNlbGVjdGVkSWRzLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kY29sbGFwc2VkSWRzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBcnJheTxJZD4+KFtdKTtcclxuICAkY29sbGFwc2VkSWRzID0gdGhpcy5fJGNvbGxhcHNlZElkcy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJG1ldGhvZE9mU2VsZWN0aW5nID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNZXRob2RzRm9yU2VsZWN0aW5nVHlwZXM+KDApO1xyXG4gICRtZXRob2RPZlNlbGVjdGluZyA9IHRoaXMuXyRtZXRob2RPZlNlbGVjdGluZy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgc2V0IG1ldGhvZE9mU2VsZWN0aW5nKHY6IE1ldGhvZHNGb3JTZWxlY3RpbmdUeXBlcykge1xyXG4gICAgdGhpcy5fJG1ldGhvZE9mU2VsZWN0aW5nLm5leHQodik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF8kZm9jdXNlZElkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJZCB8IG51bGw+KG51bGwpO1xyXG4gICRmb2N1c2VkSWQgPSB0aGlzLl8kZm9jdXNlZElkLmFzT2JzZXJ2YWJsZSgpO1xyXG4gIGdldCBmb2N1c2VkSWQoKSB7IHJldHVybiB0aGlzLl8kZm9jdXNlZElkLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGZvY3VzSXRlbSA9IG5ldyBTdWJqZWN0PEZvY3VzSXRlbVBhcmFtcz4oKTtcclxuICByZWFkb25seSAkZm9jdXNJdGVtID0gdGhpcy5fJGZvY3VzSXRlbS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbFRvID0gbmV3IFN1YmplY3Q8SVNjcm9sbFRvUGFyYW1zIHwgdW5kZWZpbmVkPigpO1xyXG4gIHJlYWRvbmx5ICRzY3JvbGxUbyA9IHRoaXMuXyRzY3JvbGxUby5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbFRvU3RhcnQgPSBuZXcgU3ViamVjdDxJU2Nyb2xsT3B0aW9ucyB8IHVuZGVmaW5lZD4oKTtcclxuICByZWFkb25seSAkc2Nyb2xsVG9TdGFydCA9IHRoaXMuXyRzY3JvbGxUb1N0YXJ0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsVG9FbmQgPSBuZXcgU3ViamVjdDxJU2Nyb2xsT3B0aW9ucyB8IHVuZGVmaW5lZD4oKTtcclxuICByZWFkb25seSAkc2Nyb2xsVG9FbmQgPSB0aGlzLl8kc2Nyb2xsVG9FbmQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyR0aWNrID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICByZWFkb25seSAkdGljayA9IHRoaXMuXyR0aWNrLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kY2FjaGVWZXJzaW9uID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KC0xKTtcclxuICByZWFkb25seSAkY2FjaGVWZXJzaW9uID0gdGhpcy5fJGNhY2hlVmVyc2lvbi5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgdHJhY2tCeTogc3RyaW5nID0gVFJBQ0tfQllfUFJPUEVSVFlfTkFNRTtcclxuXHJcbiAgbGFzdEZvY3VzZWRJdGVtSWQ6IG51bWJlciA9IC0xO1xyXG5cclxuICBzY3JvbGxTdGFydE9mZnNldDogbnVtYmVyID0gMDtcclxuXHJcbiAgc2Nyb2xsRW5kT2Zmc2V0OiBudW1iZXIgPSAwO1xyXG5cclxuICBzZWxlY3RCeUNsaWNrOiBib29sZWFuID0gREVGQVVMVF9TRUxFQ1RfQllfQ0xJQ0s7XHJcblxyXG4gIGNvbGxhcHNlQnlDbGljazogYm9vbGVhbiA9IERFRkFVTFRfQ09MTEFQU0VfQllfQ0xJQ0s7XHJcblxyXG4gIGRlZmF1bHRJdGVtVmFsdWU6IElWaXJ0dWFsTGlzdEl0ZW0gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgaXNWZXJ0aWNhbDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIGR5bmFtaWM6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBzbmFwU2Nyb2xsVG9TdGFydDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBzbmFwU2Nyb2xsVG9FbmQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgYW5pbWF0aW9uUGFyYW1zOiBJQW5pbWF0aW9uUGFyYW1zID0gREVGQVVMVF9BTklNQVRJT05fUEFSQU1TO1xyXG5cclxuICBwcml2YXRlIF90cmFja0JveDogVHJhY2tCb3ggfCB1bmRlZmluZWQ7XHJcblxyXG4gIGxpc3RFbGVtZW50OiBIVE1MRGl2RWxlbWVudCB8IG51bGwgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIF8kZGlzcGxheUl0ZW1zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJUmVuZGVyVmlydHVhbExpc3RDb2xsZWN0aW9uPihbXSk7XHJcbiAgcmVhZG9ubHkgJGRpc3BsYXlJdGVtcyA9IHRoaXMuXyRkaXNwbGF5SXRlbXMuYXNPYnNlcnZhYmxlKCk7XHJcbiAgZ2V0IGRpc3BsYXlJdGVtcygpIHsgcmV0dXJuIHRoaXMuXyRkaXNwbGF5SXRlbXMuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF9jb2xsZWN0aW9uOiBJUmVuZGVyVmlydHVhbExpc3RDb2xsZWN0aW9uID0gW107XHJcbiAgc2V0IGNvbGxlY3Rpb24odjogSVJlbmRlclZpcnR1YWxMaXN0Q29sbGVjdGlvbikge1xyXG4gICAgaWYgKHRoaXMuX2NvbGxlY3Rpb24gPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2NvbGxlY3Rpb24gPSB2O1xyXG5cclxuICAgIHRoaXMuXyRkaXNwbGF5SXRlbXMubmV4dCh2KTtcclxuICB9XHJcbiAgZ2V0IGNvbGxlY3Rpb24oKSB7IHJldHVybiB0aGlzLl9jb2xsZWN0aW9uOyB9XHJcblxyXG4gIHByaXZhdGUgXyRsYW5nVGV4dERpciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGV4dERpcmVjdGlvbj4oVGV4dERpcmVjdGlvbnMuTFRSKTtcclxuICByZWFkb25seSAkbGFuZ1RleHREaXIgPSB0aGlzLl8kbGFuZ1RleHREaXIuYXNPYnNlcnZhYmxlKCk7XHJcbiAgZ2V0IGxhbmdUZXh0RGlyKCkgeyByZXR1cm4gdGhpcy5fJGxhbmdUZXh0RGlyLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfbGFuZ1RleHREaXI6IFRleHREaXJlY3Rpb24gPSBUZXh0RGlyZWN0aW9ucy5MVFI7XHJcbiAgc2V0IGxhbmdUZXh0RGlyKHY6IFRleHREaXJlY3Rpb24pIHtcclxuICAgIGlmICh0aGlzLl9sYW5nVGV4dERpciA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fbGFuZ1RleHREaXIgPSB2O1xyXG5cclxuICAgIHRoaXMuXyRsYW5nVGV4dERpci5uZXh0KHYpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNjcm9sbEJhclNpemUoKSB7IHJldHVybiB0aGlzLl8kc2Nyb2xsQmFyU2l6ZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgX3Njcm9sbEJhclNpemU6IG51bWJlciA9IDA7XHJcbiAgc2V0IHNjcm9sbEJhclNpemUodjogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5fc2Nyb2xsQmFyU2l6ZSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fc2Nyb2xsQmFyU2l6ZSA9IHY7XHJcblxyXG4gICAgdGhpcy5fJHNjcm9sbEJhclNpemUubmV4dCh2KTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfJHNjcm9sbEJhclNpemUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4odGhpcy5fc2Nyb2xsQmFyU2l6ZSk7XHJcbiAgcmVhZG9ubHkgJHNjcm9sbEJhclNpemUgPSB0aGlzLl8kc2Nyb2xsQmFyU2l6ZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGNsaWNrRGlzdGFuY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oREVGQVVMVF9DTElDS19ESVNUQU5DRSk7XHJcbiAgcmVhZG9ubHkgJGNsaWNrRGlzdGFuY2UgPSB0aGlzLl8kY2xpY2tEaXN0YW5jZS5hc09ic2VydmFibGUoKTtcclxuICBnZXQgY2xpY2tEaXN0YW5jZSgpIHsgcmV0dXJuIHRoaXMuXyRjbGlja0Rpc3RhbmNlLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfY2xpY2tEaXN0YW5jZTogbnVtYmVyID0gREVGQVVMVF9DTElDS19ESVNUQU5DRTtcclxuICBzZXQgY2xpY2tEaXN0YW5jZSh2OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLl9jbGlja0Rpc3RhbmNlID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9jbGlja0Rpc3RhbmNlID0gdjtcclxuXHJcbiAgICB0aGlzLl8kY2xpY2tEaXN0YW5jZS5uZXh0KHYpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfb25UaWNrSGFuZGxlciA9ICgpID0+IHtcclxuICAgIHRoaXMuXyR0aWNrLm5leHQoKTtcclxuICB9O1xyXG5cclxuICBwcml2YXRlIF9vblRyYWNrQm94Q2hhbmdlSGFuZGxlciA9ICh2OiBudW1iZXIpID0+IHtcclxuICAgIHRoaXMuXyRjYWNoZVZlcnNpb24ubmV4dCh2KTtcclxuICB9O1xyXG5cclxuICBzZXQgc2VsZWN0ZWRJZHMoaWRzOiBBcnJheTxJZD4gfCBJZCB8IG51bGwpIHtcclxuICAgIGlmIChKU09OLnN0cmluZ2lmeSh0aGlzLl8kc2VsZWN0ZWRJZHMuZ2V0VmFsdWUoKSkgIT09IEpTT04uc3RyaW5naWZ5KGlkcykpIHtcclxuICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQoaWRzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBzZWxlY3RlZElkcygpIHsgcmV0dXJuIHRoaXMuXyRzZWxlY3RlZElkcy5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHNldCBjb2xsYXBzZWRJZHMoaWRzOiBBcnJheTxJZD4pIHtcclxuICAgIGlmIChKU09OLnN0cmluZ2lmeSh0aGlzLl8kY29sbGFwc2VkSWRzLmdldFZhbHVlKCkpICE9PSBKU09OLnN0cmluZ2lmeShpZHMpKSB7XHJcbiAgICAgIHRoaXMuXyRjb2xsYXBzZWRJZHMubmV4dChpZHMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGNvbGxhcHNlZElkcygpIHsgcmV0dXJuIHRoaXMuXyRjb2xsYXBzZWRJZHMuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMuXyRtZXRob2RPZlNlbGVjdGluZy5waXBlKFxyXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHN3aXRjaCAodikge1xyXG4gICAgICAgICAgY2FzZSBNZXRob2RzRm9yU2VsZWN0aW5nVHlwZXMuU0VMRUNUOiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnIgPSB0aGlzLl8kc2VsZWN0ZWRJZHMuZ2V0VmFsdWUoKTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjdXJyICE9PSAnbnVtYmVyJyAmJiB0eXBlb2YgY3VyciAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICB0aGlzLl8kc2VsZWN0ZWRJZHMubmV4dChudWxsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNhc2UgTWV0aG9kc0ZvclNlbGVjdGluZ1R5cGVzLk1VTFRJX1NFTEVDVDoge1xyXG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5fJHNlbGVjdGVkSWRzLmdldFZhbHVlKCkpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQoW10pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY2FzZSBNZXRob2RzRm9yU2VsZWN0aW5nVHlwZXMuTk9ORTpcclxuICAgICAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQobnVsbCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgaXRlbUNsaWNrKGRhdGE6IElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW0gfCBudWxsKSB7XHJcbiAgICB0aGlzLl8kaXRlbUNsaWNrLm5leHQoZGF0YSk7XHJcbiAgICBpZiAodGhpcy5jb2xsYXBzZUJ5Q2xpY2spIHtcclxuICAgICAgY29uc3QgdHJhY2tCeSA9IHRoaXMudHJhY2tCeSwgaWQgPSAoZGF0YSBhcyBhbnkpPy5bdHJhY2tCeV0gPz8gbnVsbDtcclxuICAgICAgdGhpcy5jb2xsYXBzZShpZCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zZWxlY3RCeUNsaWNrKSB7XHJcbiAgICAgIGNvbnN0IHRyYWNrQnkgPSB0aGlzLnRyYWNrQnksIGlkID0gKGRhdGEgYXMgYW55KT8uW3RyYWNrQnldID8/IG51bGw7XHJcbiAgICAgIHRoaXMuc2VsZWN0KGlkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZShpbW1lZGlhdGVseTogYm9vbGVhbiA9IGZhbHNlLCBmb3JjZTogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLl90cmFja0JveD8uY2hhbmdlcyhpbW1lZGlhdGVseSwgZm9yY2UpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRJdGVtQ29uZmlnKGlkOiBJZCkge1xyXG4gICAgY29uc3QgZGlzcGxheUl0ZW1zID0gdGhpcy5kaXNwbGF5SXRlbXM7XHJcbiAgICBpZiAoISFkaXNwbGF5SXRlbXMpIHtcclxuICAgICAgY29uc3QgdHJhY2tCeSA9IHRoaXMudHJhY2tCeTtcclxuICAgICAgcmV0dXJuIGRpc3BsYXlJdGVtcy5maW5kKGRhdGEgPT4ge1xyXG4gICAgICAgIGNvbnN0IF9pZCA9IChkYXRhIGFzIGFueSk/Llt0cmFja0J5XSA/PyBudWxsO1xyXG4gICAgICAgIHJldHVybiBfaWQgPT09IGlkO1xyXG4gICAgICB9KT8uY29uZmlnID8/IG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbGVjdHMgYSBsaXN0IGl0ZW1cclxuICAgKiBAcGFyYW0gaWQgXHJcbiAgICogQHBhcmFtIHNlbGVjdGVkIC0gSWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgdGhlbiB0aGUgdG9nZ2xlIG1ldGhvZCBpcyBleGVjdXRlZCwgaWYgZmFsc2Ugb3IgdHJ1ZSwgdGhlbiB0aGUgc2VsZWN0aW9uL2Rlc2VsZWN0aW9uIGlzIHBlcmZvcm1lZC5cclxuICAgKi9cclxuICBzZWxlY3QoaWQ6IElkLCBzZWxlY3RlZD86IGJvb2xlYW4pIHtcclxuICAgIHZhbGlkYXRlSWQoaWQpO1xyXG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5nZXRJdGVtQ29uZmlnKGlkKTtcclxuICAgIGlmICgoISFjb25maWcgJiYgY29uZmlnLnNlbGVjdGFibGUpKSB7XHJcbiAgICAgIHN3aXRjaCAodGhpcy5fJG1ldGhvZE9mU2VsZWN0aW5nLmdldFZhbHVlKCkpIHtcclxuICAgICAgICBjYXNlIE1ldGhvZHNGb3JTZWxlY3RpbmdUeXBlcy5TRUxFQ1Q6IHtcclxuICAgICAgICAgIGNvbnN0IGN1cnIgPSB0aGlzLl8kc2VsZWN0ZWRJZHMuZ2V0VmFsdWUoKSBhcyAoSWQgfCB1bmRlZmluZWQpO1xyXG4gICAgICAgICAgaWYgKHNlbGVjdGVkID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQoY3VyciAhPT0gaWQgPyBpZCA6IG51bGwpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQoc2VsZWN0ZWQgPyBpZCA6IG51bGwpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhc2UgTWV0aG9kc0ZvclNlbGVjdGluZ1R5cGVzLk1VTFRJX1NFTEVDVDoge1xyXG4gICAgICAgICAgY29uc3QgY3VyciA9IFsuLi4odGhpcy5fJHNlbGVjdGVkSWRzLmdldFZhbHVlKCkgfHwgW10pIGFzIEFycmF5PElkPl0sXHJcbiAgICAgICAgICAgIGluZGV4ID0gY3Vyci5pbmRleE9mKGlkKTtcclxuICAgICAgICAgIGlmIChzZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgY3Vyci5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KGN1cnIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KFsuLi5jdXJyLCBpZF0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkKSB7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQoY3Vycik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQoWy4uLmN1cnIsIGlkXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgY3Vyci5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KGN1cnIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KGN1cnIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FzZSBNZXRob2RzRm9yU2VsZWN0aW5nVHlwZXMuTk9ORTpcclxuICAgICAgICBkZWZhdWx0OiB7XHJcbiAgICAgICAgICB0aGlzLl8kc2VsZWN0ZWRJZHMubmV4dChudWxsKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAgKiBDb2xsYXBzZSBsaXN0IGl0ZW1zXHJcbiAgICAqIEBwYXJhbSBkYXRhIFxyXG4gICAgKiBAcGFyYW0gY29sbGFwc2VkIC0gSWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgdGhlbiB0aGUgdG9nZ2xlIG1ldGhvZCBpcyBleGVjdXRlZCwgaWYgZmFsc2Ugb3IgdHJ1ZSwgdGhlbiB0aGUgY29sbGFwc2UvZXhwYW5kIGlzIHBlcmZvcm1lZC5cclxuICAgICovXHJcbiAgY29sbGFwc2UoaWQ6IElkLCBjb2xsYXBzZWQ/OiBib29sZWFuKSB7XHJcbiAgICB2YWxpZGF0ZUlkKGlkKTtcclxuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuZ2V0SXRlbUNvbmZpZyhpZCk7XHJcbiAgICBpZiAoKCEhY29uZmlnICYmIGNvbmZpZy5zdGlja3kgPiAwICYmIGNvbmZpZy5jb2xsYXBzYWJsZSkpIHtcclxuICAgICAgY29uc3QgY3VyciA9IFsuLi4odGhpcy5fJGNvbGxhcHNlZElkcy5nZXRWYWx1ZSgpIHx8IFtdKSBhcyBBcnJheTxJZD5dLFxyXG4gICAgICAgIGluZGV4ID0gY3Vyci5pbmRleE9mKGlkKTtcclxuICAgICAgaWYgKGNvbGxhcHNlZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgIGN1cnIuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgIHRoaXMuXyRjb2xsYXBzZWRJZHMubmV4dChjdXJyKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5fJGNvbGxhcHNlZElkcy5uZXh0KFsuLi5jdXJyLCBpZF0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChjb2xsYXBzZWQpIHtcclxuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgdGhpcy5fJGNvbGxhcHNlZElkcy5uZXh0KGN1cnIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl8kY29sbGFwc2VkSWRzLm5leHQoWy4uLmN1cnIsIGlkXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICBjdXJyLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICB0aGlzLl8kY29sbGFwc2VkSWRzLm5leHQoY3Vycik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuXyRjb2xsYXBzZWRJZHMubmV4dChjdXJyKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEZvY3VzZWRFbGVtZW50QnlJZChpZDogSWQpIHtcclxuICAgIGNvbnN0IGVsID0gdGhpcy5saXN0RWxlbWVudD8ucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oZ2V0U2VsZWN0b3JCeUl0ZW1JZChpZCkpO1xyXG4gICAgaWYgKCEhZWwpIHtcclxuICAgICAgY29uc3QgZm9jdXNlZEVsID0gZWwucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oYC4ke0lURU1fQ09OVEFJTkVSfWApO1xyXG4gICAgICBpZiAoISFmb2N1c2VkRWwpIHtcclxuICAgICAgICByZXR1cm4gZm9jdXNlZEVsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIGJvdW5kcyBvZiBhbiBlbGVtZW50IHdpdGggYSBnaXZlbiBpZFxyXG4gICAqL1xyXG4gIGdldEl0ZW1Cb3VuZHMoaWQ6IElkKTogSVNpemUgfCBudWxsIHtcclxuICAgIHZhbGlkYXRlSWQoaWQpO1xyXG4gICAgcmV0dXJuIHRoaXMuX3RyYWNrQm94Py5nZXRJdGVtQm91bmRzKGlkKSA/PyBudWxsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRm9jdXMgYW4gbGlzdCBpdGVtIGJ5IGEgZ2l2ZW4gaWQuXHJcbiAgICovXHJcbiAgZm9jdXNCeUlkKGlkOiBJZCwgYWxpZ246IEZvY3VzQWxpZ25tZW50ID0gRm9jdXNBbGlnbm1lbnRzLk5PTkUsIHNjcm9sbEJlaGF2aW9yOiBTY3JvbGxCZWhhdmlvciA9IFwiYXV0b1wiKSB7XHJcbiAgICB2YWxpZGF0ZUlkKGlkKTtcclxuICAgIHZhbGlkYXRlRm9jdXNBbGlnbm1lbnQoYWxpZ24pO1xyXG4gICAgY29uc3QgZWwgPSB0aGlzLmdldEZvY3VzZWRFbGVtZW50QnlJZChpZCk7XHJcbiAgICBpZiAoISFlbCkge1xyXG4gICAgICB0aGlzLmZvY3VzKGVsLCBhbGlnbiwgc2Nyb2xsQmVoYXZpb3IpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZm9jdXMoZWxlbWVudDogSFRNTEVsZW1lbnQsIGFsaWduOiBGb2N1c0FsaWdubWVudCA9IEZvY3VzQWxpZ25tZW50cy5DRU5URVIsIGJlaGF2aW9yOiBTY3JvbGxCZWhhdmlvciA9IEJFSEFWSU9SX0FVVE8pOiBib29sZWFuIHtcclxuICAgIGVsZW1lbnQuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xyXG4gICAgaWYgKCEhZWxlbWVudC5wYXJlbnRFbGVtZW50KSB7XHJcbiAgICAgIGNvbnN0IHBvc2l0aW9uID0gcGFyc2VGbG9hdChlbGVtZW50LnBhcmVudEVsZW1lbnQ/LmdldEF0dHJpYnV0ZSgncG9zaXRpb24nKSA/PyAnMCcpO1xyXG4gICAgICB0aGlzLl8kZm9jdXNJdGVtLm5leHQoeyBlbGVtZW50LCBwb3NpdGlvbiwgYWxpZ24sIGJlaGF2aW9yIH0pO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGZvY3VzRmlyc3RFbGVtZW50KCkge1xyXG4gICAgY29uc3QgZWxlbWVudHMgPSB0aGlzLmxpc3RFbGVtZW50Py5xdWVyeVNlbGVjdG9yQWxsPEhUTUxEaXZFbGVtZW50PihnZXRMaXN0RWxlbWVudHMoKSksXHJcbiAgICAgIGVsTGlzdCA9IChlbGVtZW50cyA/IEFycmF5LmZyb20oZWxlbWVudHMpIDogW10pLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICBjb25zdCBpbmRleEEgPSBOdW1iZXIoYS5nZXRBdHRyaWJ1dGUoTkdWTF9JTkRFWCkpLCBpbmRleEIgPSBOdW1iZXIoYi5nZXRBdHRyaWJ1dGUoTkdWTF9JTkRFWCkpO1xyXG4gICAgICAgIGlmIChpbmRleEEgPiBpbmRleEIpIHJldHVybiAxO1xyXG4gICAgICAgIGlmIChpbmRleEEgPCBpbmRleEIpIHJldHVybiAtMTtcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgICAgfSk7XHJcbiAgICBsZXQgZWxlbWVudDogSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XHJcbiAgICBmb3IgKGxldCBpID0gMCwgbCA9IGVsTGlzdC5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgY29uc3QgZWwgPSBlbExpc3RbaV0sIGluZGV4ID0gTnVtYmVyKGVsLmdldEF0dHJpYnV0ZShOR1ZMX0lOREVYKSk7XHJcbiAgICAgIGlmICghIWVsICYmIGluZGV4ID4gMCkge1xyXG4gICAgICAgIGVsZW1lbnQgPSBlbDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCEhZWxlbWVudCkge1xyXG4gICAgICB0aGlzLmZvY3VzKGVsZW1lbnQsIEZvY3VzQWxpZ25tZW50cy5DRU5URVIsIEJFSEFWSU9SX0lOU1RBTlQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXJlYUZvY3VzKGlkOiBJZCB8IG51bGwpIHtcclxuICAgIHRoaXMuXyRmb2N1c2VkSWQubmV4dChpZCk7XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplKGlkOiBudW1iZXIsIHRyYWNrQm94OiBUcmFja0JveCkge1xyXG4gICAgdGhpcy5faWQgPSBpZDtcclxuICAgIHRoaXMuX3RyYWNrQm94ID0gdHJhY2tCb3g7XHJcbiAgICB0aGlzLl90cmFja0JveC5hZGRFdmVudExpc3RlbmVyKFRyYWNrQm94RXZlbnRzLlRJQ0ssIHRoaXMuX29uVGlja0hhbmRsZXIpO1xyXG4gICAgdGhpcy5fdHJhY2tCb3guYWRkRXZlbnRMaXN0ZW5lcihUcmFja0JveEV2ZW50cy5DSEFOR0UsIHRoaXMuX29uVHJhY2tCb3hDaGFuZ2VIYW5kbGVyKTtcclxuICB9XHJcblxyXG4gIGdlbmVyYXRlQ29tcG9uZW50SWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbmV4dENvbXBvbmVudElkID0gdGhpcy5fbmV4dENvbXBvbmVudElkID09PSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUlxyXG4gICAgICA/IDAgOiB0aGlzLl9uZXh0Q29tcG9uZW50SWQgKyAxO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICAqIFRoZSBtZXRob2Qgc2Nyb2xscyB0aGUgbGlzdCB0byB0aGUgZWxlbWVudCB3aXRoIHRoZSBnaXZlbiBgaWRgIGFuZCByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgc2Nyb2xsZWQgYXJlYS5cclxuICAgICovXHJcbiAgc2Nyb2xsVG8oaWQ6IElkLCBjYjogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGwsIG9wdGlvbnM6IElTY3JvbGxPcHRpb25zIHwgbnVsbCA9IG51bGwpIHtcclxuICAgIHRoaXMuXyRzY3JvbGxUby5uZXh0KHsgaWQsIGNiLCBvcHRpb25zIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2Nyb2xscyB0aGUgc2Nyb2xsIGFyZWEgdG8gdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGNvbGxlY3Rpb24uXHJcbiAgICovXHJcbiAgc2Nyb2xsVG9TdGFydChvcHRpb25zPzogSVNjcm9sbE9wdGlvbnMpIHtcclxuICAgIHRoaXMuXyRzY3JvbGxUb1N0YXJ0Lm5leHQob3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTY3JvbGxzIHRoZSBsaXN0IHRvIHRoZSBlbmQgb2YgdGhlIGNvbnRlbnQgc2l6ZS5cclxuICAgKi9cclxuICBzY3JvbGxUb0VuZChvcHRpb25zPzogSVNjcm9sbE9wdGlvbnMpIHtcclxuICAgIHRoaXMuXyRzY3JvbGxUb0VuZC5uZXh0KG9wdGlvbnMpO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
431
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctdmlydHVhbC1saXN0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9uZy12aXJ0dWFsLWxpc3Quc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUkvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUUxRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNwRSxPQUFPLEVBQ0wsYUFBYSxFQUFFLGdCQUFnQixFQUFFLHdCQUF3QixFQUFFLHNCQUFzQixFQUFFLHlCQUF5QixFQUM1RyxpQkFBaUIsRUFBRSx1QkFBdUIsRUFBRSxvQkFBb0IsRUFBRSw2QkFBNkIsRUFBRSxjQUFjLEVBQy9HLHNCQUFzQixHQUN2QixNQUFNLFNBQVMsQ0FBQztBQUVqQixPQUFPLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRTlFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxVQUFVLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7QUFHdEU7Ozs7Ozs7R0FPRztBQUlILE1BQU0sT0FBTyxvQkFBb0I7SUFDckIsYUFBYSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFFdEMsR0FBRyxHQUFXLENBQUMsQ0FBQztJQUN4QixJQUFJLEVBQUUsS0FBSyxPQUFPLElB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LENBQUM7SUFDbkMsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEMsQ0FBQztJQUNILENBQUM7d0dBNWRVLG9CQUFvQjs0R0FBcEIsb0JBQW9CLGNBRm5CLE1BQU07OzRGQUVQLG9CQUFvQjtrQkFIaEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMvaW50ZXJuYWwvQmVoYXZpb3JTdWJqZWN0JztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgVHJhY2tCb3ggfSBmcm9tICcuL2NvcmUvdHJhY2stYm94JztcclxuaW1wb3J0IHsgVHJhY2tCb3hFdmVudHMgfSBmcm9tICcuL2NvcmUvZXZlbnRzJztcclxuaW1wb3J0IHsgSVJlbmRlclZpcnR1YWxMaXN0SXRlbSwgSVZpcnR1YWxMaXN0Q29sbGVjdGlvbiwgSVZpcnR1YWxMaXN0SXRlbSwgSVZpcnR1YWxMaXN0SXRlbUNvbmZpZ01hcCB9IGZyb20gJy4vbW9kZWxzJztcclxuaW1wb3J0IHsgSUFuaW1hdGlvblBhcmFtcywgSVJlY3QsIElTY3JvbGxPcHRpb25zLCBJU2l6ZSB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IElSZW5kZXJWaXJ0dWFsTGlzdENvbGxlY3Rpb24gfSBmcm9tICcuL21vZGVscy9yZW5kZXItY29sbGVjdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IEZvY3VzQWxpZ25tZW50cywgVGV4dERpcmVjdGlvbnMgfSBmcm9tICcuL2VudW1zJztcclxuaW1wb3J0IHsgVGV4dERpcmVjdGlvbiB9IGZyb20gJy4vdHlwZXMnO1xyXG5pbXBvcnQgeyBTZWxlY3RpbmdNb2Rlc1R5cGVzIH0gZnJvbSAnLi9lbnVtcy9zZWxlY3RpbmctbW9kZXMtdHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIEJFSEFWSU9SX0FVVE8sIEJFSEFWSU9SX0lOU1RBTlQsIERFRkFVTFRfQU5JTUFUSU9OX1BBUkFNUywgREVGQVVMVF9DTElDS19ESVNUQU5DRSwgREVGQVVMVF9DT0xMQVBTRV9CWV9DTElDSyxcclxuICBERUZBVUxUX0lURU1fU0laRSwgREVGQVVMVF9TRUxFQ1RfQllfQ0xJQ0ssIERFRkFVTFRfU05BUF9UT19JVEVNLCBERUZBVUxUX1pJTkRFWF9XSEVOX1NFTEVDVElORywgSVRFTV9DT05UQUlORVIsXHJcbiAgVFJBQ0tfQllfUFJPUEVSVFlfTkFNRSxcclxufSBmcm9tICcuL2NvbnN0JztcclxuaW1wb3J0IHsgRm9jdXNBbGlnbm1lbnQsIElkIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IGdldExpc3RFbGVtZW50cywgTkdWTF9JTkRFWCB9IGZyb20gJy4vY29tcG9uZW50cy9uZy1saXN0LWl0ZW0vdXRpbHMnO1xyXG5pbXBvcnQgeyBGb2N1c0l0ZW1QYXJhbXMgfSBmcm9tICcuL3R5cGVzL2ZvY3VzLWl0ZW0tcGFyYW1zJztcclxuaW1wb3J0IHsgdmFsaWRhdGVGb2N1c0FsaWdubWVudCwgdmFsaWRhdGVJZCB9IGZyb20gJy4vdXRpbHMvbGlzdC12YWxpZGF0b3JzJztcclxuaW1wb3J0IHsgZ2V0U2VsZWN0b3JCeUl0ZW1JZCB9IGZyb20gJy4vdXRpbHMvZ2V0LXNlbGVjdG9yLWJ5LWl0ZW0taWQnO1xyXG5pbXBvcnQgeyBJU2Nyb2xsVG9QYXJhbXMgfSBmcm9tICcuL2ludGVyZmFjZXMvc2Nyb2xsLXRvLXBhcmFtcyc7XHJcblxyXG4vKipcclxuICogTmdWaXJ0dWFsTGlzdFNlcnZpY2VcclxuICogTWF4aW11bSBwZXJmb3JtYW5jZSBmb3IgZXh0cmVtZWx5IGxhcmdlIGxpc3RzLlxyXG4gKiBJdCBpcyBiYXNlZCBvbiBhbGdvcml0aG1zIGZvciB2aXJ0dWFsaXphdGlvbiBvZiBzY3JlZW4gb2JqZWN0cy5cclxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0Rqb25ueVgvbmctdmlydHVhbC1saXN0L2Jsb2IvMTgueC9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9uZy12aXJ0dWFsLWxpc3Quc2VydmljZS50c1xyXG4gKiBAYXV0aG9yIEV2Z2VuaWkgQWxleGFuZHJvdmljaCBHcmViZW5uaWtvdlxyXG4gKiBAZW1haWwgZGpvbm55eEBnbWFpbC5jb21cclxuICovXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIE5nVmlydHVhbExpc3RTZXJ2aWNlIHtcclxuICBwcm90ZWN0ZWQgXyR1bnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIHByaXZhdGUgX2lkOiBudW1iZXIgPSAwO1xyXG4gIGdldCBpZCgpIHsgcmV0dXJuIHRoaXMuX2lkOyB9XHJcblxyXG4gIHByaXZhdGUgX25leHRDb21wb25lbnRJZDogbnVtYmVyID0gMDtcclxuXHJcbiAgcHJpdmF0ZSBfJHZpcnR1YWxDbGljayA9IG5ldyBTdWJqZWN0PElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW08YW55PiB8IG51bGw+KCk7XHJcbiAgJHZpcnR1YWxDbGljayA9IHRoaXMuXyR2aXJ0dWFsQ2xpY2suYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRzZWxlY3RlZElkcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8SWQ+IHwgSWQgfCBudWxsPihudWxsKTtcclxuICAkc2VsZWN0ZWRJZHMgPSB0aGlzLl8kc2VsZWN0ZWRJZHMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRjb2xsYXBzZWRJZHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFycmF5PElkPj4oW10pO1xyXG4gICRjb2xsYXBzZWRJZHMgPSB0aGlzLl8kY29sbGFwc2VkSWRzLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kc2VsZWN0aW5nTW9kZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2VsZWN0aW5nTW9kZXNUeXBlcz4oMCk7XHJcbiAgJHNlbGVjdGluZ01vZGUgPSB0aGlzLl8kc2VsZWN0aW5nTW9kZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgc2V0IHNlbGVjdGluZ01vZGUodjogU2VsZWN0aW5nTW9kZXNUeXBlcykge1xyXG4gICAgdGhpcy5fJHNlbGVjdGluZ01vZGUubmV4dCh2KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgXyRmb2N1c2VkSWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElkIHwgbnVsbD4obnVsbCk7XHJcbiAgJGZvY3VzZWRJZCA9IHRoaXMuXyRmb2N1c2VkSWQuYXNPYnNlcnZhYmxlKCk7XHJcbiAgc2V0IGZvY3VzZWRJZCh2OiBJZCB8IG51bGwpIHtcclxuICAgIGlmICh0aGlzLl8kZm9jdXNlZElkLmdldFZhbHVlKCkgIT09IHYpIHtcclxuICAgICAgdGhpcy5fJGZvY3VzZWRJZC5uZXh0KHYpO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgZm9jdXNlZElkKCkgeyByZXR1cm4gdGhpcy5fJGZvY3VzZWRJZC5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRmb2N1c0l0ZW0gPSBuZXcgU3ViamVjdDxGb2N1c0l0ZW1QYXJhbXM+KCk7XHJcbiAgcmVhZG9ubHkgJGZvY3VzSXRlbSA9IHRoaXMuXyRmb2N1c0l0ZW0uYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxUbyA9IG5ldyBTdWJqZWN0PElTY3JvbGxUb1BhcmFtcyB8IHVuZGVmaW5lZD4oKTtcclxuICByZWFkb25seSAkc2Nyb2xsVG8gPSB0aGlzLl8kc2Nyb2xsVG8uYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxUb1N0YXJ0ID0gbmV3IFN1YmplY3Q8SVNjcm9sbE9wdGlvbnMgfCB1bmRlZmluZWQ+KCk7XHJcbiAgcmVhZG9ubHkgJHNjcm9sbFRvU3RhcnQgPSB0aGlzLl8kc2Nyb2xsVG9TdGFydC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbFRvRW5kID0gbmV3IFN1YmplY3Q8SVNjcm9sbE9wdGlvbnMgfCB1bmRlZmluZWQ+KCk7XHJcbiAgcmVhZG9ubHkgJHNjcm9sbFRvRW5kID0gdGhpcy5fJHNjcm9sbFRvRW5kLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kdGljayA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgcmVhZG9ubHkgJHRpY2sgPSB0aGlzLl8kdGljay5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGNhY2hlVmVyc2lvbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigtMSk7XHJcbiAgcmVhZG9ubHkgJGNhY2hlVmVyc2lvbiA9IHRoaXMuXyRjYWNoZVZlcnNpb24uYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHRyYWNrQnk6IHN0cmluZyA9IFRSQUNLX0JZX1BST1BFUlRZX05BTUU7XHJcblxyXG4gIGxhc3RGb2N1c2VkSXRlbUlkOiBudW1iZXIgPSAtMTtcclxuXHJcbiAgc2Nyb2xsU3RhcnRPZmZzZXQ6IG51bWJlciA9IDA7XHJcblxyXG4gIHNjcm9sbEVuZE9mZnNldDogbnVtYmVyID0gMDtcclxuXHJcbiAgekluZGV4V2hlblNlbGVjdGluZzogc3RyaW5nIHwgbnVsbCA9IERFRkFVTFRfWklOREVYX1dIRU5fU0VMRUNUSU5HO1xyXG5cclxuICBzZWxlY3RCeUNsaWNrOiBib29sZWFuID0gREVGQVVMVF9TRUxFQ1RfQllfQ0xJQ0s7XHJcblxyXG4gIGNvbGxhcHNlQnlDbGljazogYm9vbGVhbiA9IERFRkFVTFRfQ09MTEFQU0VfQllfQ0xJQ0s7XHJcblxyXG4gIGRlZmF1bHRJdGVtVmFsdWU6IElWaXJ0dWFsTGlzdEl0ZW0gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgc25hcFRvSXRlbTogYm9vbGVhbiA9IERFRkFVTFRfU05BUF9UT19JVEVNO1xyXG5cclxuICBpc0luZmluaXR5OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGlzVmVydGljYWw6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBkeW5hbWljOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgaXRlbVNpemU6IG51bWJlciA9IERFRkFVTFRfSVRFTV9TSVpFO1xyXG5cclxuICBzbmFwU2Nyb2xsVG9TdGFydDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBzbmFwU2Nyb2xsVG9FbmQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgYW5pbWF0aW9uUGFyYW1zOiBJQW5pbWF0aW9uUGFyYW1zID0gREVGQVVMVF9BTklNQVRJT05fUEFSQU1TO1xyXG5cclxuICBpc05vbmVDb2xsYXBzZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBpc011bHRpcGxlQ29sbGFwc2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgaXNBY2NvcmRpb25Db2xsYXBzZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIF90cmFja0JveDogVHJhY2tCb3ggfCB1bmRlZmluZWQ7XHJcblxyXG4gIGxpc3RFbGVtZW50OiBIVE1MRGl2RWxlbWVudCB8IG51bGwgPSBudWxsO1xyXG5cclxuICBpdGVtczogSVZpcnR1YWxMaXN0Q29sbGVjdGlvbiA9IFtdO1xyXG5cclxuICBpdGVtQ29uZmlnTWFwOiBJVmlydHVhbExpc3RJdGVtQ29uZmlnTWFwID0ge307XHJcblxyXG4gIHByaXZhdGUgXyRkaXNwbGF5SXRlbXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElSZW5kZXJWaXJ0dWFsTGlzdENvbGxlY3Rpb24+KFtdKTtcclxuICByZWFkb25seSAkZGlzcGxheUl0ZW1zID0gdGhpcy5fJGRpc3BsYXlJdGVtcy5hc09ic2VydmFibGUoKTtcclxuICBnZXQgZGlzcGxheUl0ZW1zKCkgeyByZXR1cm4gdGhpcy5fJGRpc3BsYXlJdGVtcy5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgX2NvbGxlY3Rpb246IElSZW5kZXJWaXJ0dWFsTGlzdENvbGxlY3Rpb24gPSBbXTtcclxuICBzZXQgY29sbGVjdGlvbih2OiBJUmVuZGVyVmlydHVhbExpc3RDb2xsZWN0aW9uKSB7XHJcbiAgICBpZiAodGhpcy5fY29sbGVjdGlvbiA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fY29sbGVjdGlvbiA9IHY7XHJcblxyXG4gICAgdGhpcy5fJGRpc3BsYXlJdGVtcy5uZXh0KHYpO1xyXG4gIH1cclxuICBnZXQgY29sbGVjdGlvbigpIHsgcmV0dXJuIHRoaXMuX2NvbGxlY3Rpb247IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGxhbmdUZXh0RGlyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUZXh0RGlyZWN0aW9uPihUZXh0RGlyZWN0aW9ucy5MVFIpO1xyXG4gIHJlYWRvbmx5ICRsYW5nVGV4dERpciA9IHRoaXMuXyRsYW5nVGV4dERpci5hc09ic2VydmFibGUoKTtcclxuICBnZXQgbGFuZ1RleHREaXIoKSB7IHJldHVybiB0aGlzLl8kbGFuZ1RleHREaXIuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF9sYW5nVGV4dERpcjogVGV4dERpcmVjdGlvbiA9IFRleHREaXJlY3Rpb25zLkxUUjtcclxuICBzZXQgbGFuZ1RleHREaXIodjogVGV4dERpcmVjdGlvbikge1xyXG4gICAgaWYgKHRoaXMuX2xhbmdUZXh0RGlyID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9sYW5nVGV4dERpciA9IHY7XHJcblxyXG4gICAgdGhpcy5fJGxhbmdUZXh0RGlyLm5leHQodik7XHJcbiAgfVxyXG5cclxuICBnZXQgc2Nyb2xsQmFyU2l6ZSgpIHsgcmV0dXJuIHRoaXMuXyRzY3JvbGxCYXJTaXplLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfc2Nyb2xsQmFyU2l6ZTogbnVtYmVyID0gMDtcclxuICBzZXQgc2Nyb2xsQmFyU2l6ZSh2OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLl9zY3JvbGxCYXJTaXplID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9zY3JvbGxCYXJTaXplID0gdjtcclxuXHJcbiAgICB0aGlzLl8kc2Nyb2xsQmFyU2l6ZS5uZXh0KHYpO1xyXG4gIH1cclxuICBwcml2YXRlIF8kc2Nyb2xsQmFyU2l6ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPih0aGlzLl9zY3JvbGxCYXJTaXplKTtcclxuICByZWFkb25seSAkc2Nyb2xsQmFyU2l6ZSA9IHRoaXMuXyRzY3JvbGxCYXJTaXplLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kaW50ZXJzZWN0aW9uRWxlbWVudEJ5U25hcFRvSXRlbUFsaWduID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJZCB8IG51bGw+KG51bGwpO1xyXG4gIHJlYWRvbmx5ICRpbnRlcnNlY3Rpb25FbGVtZW50QnlTbmFwVG9JdGVtQWxpZ24gPSB0aGlzLl8kaW50ZXJzZWN0aW9uRWxlbWVudEJ5U25hcFRvSXRlbUFsaWduLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kY2xpY2tEaXN0YW5jZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPihERUZBVUxUX0NMSUNLX0RJU1RBTkNFKTtcclxuICByZWFkb25seSAkY2xpY2tEaXN0YW5jZSA9IHRoaXMuXyRjbGlja0Rpc3RhbmNlLmFzT2JzZXJ2YWJsZSgpO1xyXG4gIGdldCBjbGlja0Rpc3RhbmNlKCkgeyByZXR1cm4gdGhpcy5fJGNsaWNrRGlzdGFuY2UuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF9jbGlja0Rpc3RhbmNlOiBudW1iZXIgPSBERUZBVUxUX0NMSUNLX0RJU1RBTkNFO1xyXG4gIHNldCBjbGlja0Rpc3RhbmNlKHY6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuX2NsaWNrRGlzdGFuY2UgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2NsaWNrRGlzdGFuY2UgPSB2O1xyXG5cclxuICAgIHRoaXMuXyRjbGlja0Rpc3RhbmNlLm5leHQodik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9vblRpY2tIYW5kbGVyID0gKCkgPT4ge1xyXG4gICAgdGhpcy5fJHRpY2submV4dCgpO1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgX29uVHJhY2tCb3hDaGFuZ2VIYW5kbGVyID0gKHY6IG51bWJlcikgPT4ge1xyXG4gICAgdGhpcy5fJGNhY2hlVmVyc2lvbi5uZXh0KHYpO1xyXG4gIH07XHJcblxyXG4gIHNldCBzZWxlY3RlZElkcyhpZHM6IEFycmF5PElkPiB8IElkIHwgbnVsbCkge1xyXG4gICAgaWYgKEpTT04uc3RyaW5naWZ5KHRoaXMuXyRzZWxlY3RlZElkcy5nZXRWYWx1ZSgpKSAhPT0gSlNPTi5zdHJpbmdpZnkoaWRzKSkge1xyXG4gICAgICB0aGlzLl8kc2VsZWN0ZWRJZHMubmV4dChpZHMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IHNlbGVjdGVkSWRzKCkgeyByZXR1cm4gdGhpcy5fJHNlbGVjdGVkSWRzLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgc2V0IGNvbGxhcHNlZElkcyhpZHM6IEFycmF5PElkPikge1xyXG4gICAgaWYgKEpTT04uc3RyaW5naWZ5KHRoaXMuXyRjb2xsYXBzZWRJZHMuZ2V0VmFsdWUoKSkgIT09IEpTT04uc3RyaW5naWZ5KGlkcykpIHtcclxuICAgICAgdGhpcy5fJGNvbGxhcHNlZElkcy5uZXh0KGlkcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgY29sbGFwc2VkSWRzKCkgeyByZXR1cm4gdGhpcy5fJGNvbGxhcHNlZElkcy5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5fJHNlbGVjdGluZ01vZGUucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICBzd2l0Y2ggKHYpIHtcclxuICAgICAgICAgIGNhc2UgU2VsZWN0aW5nTW9kZXNUeXBlcy5TRUxFQ1Q6IHtcclxuICAgICAgICAgICAgY29uc3QgY3VyciA9IHRoaXMuXyRzZWxlY3RlZElkcy5nZXRWYWx1ZSgpO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGN1cnIgIT09ICdudW1iZXInICYmIHR5cGVvZiBjdXJyICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KG51bGwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY2FzZSBTZWxlY3RpbmdNb2Rlc1R5cGVzLk1VTFRJX1NFTEVDVDoge1xyXG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5fJHNlbGVjdGVkSWRzLmdldFZhbHVlKCkpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQoW10pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY2FzZSBTZWxlY3RpbmdNb2Rlc1R5cGVzLk5PTkU6XHJcbiAgICAgICAgICBkZWZhdWx0OiB7XHJcbiAgICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KG51bGwpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHZpcnR1YWxDbGljayhkYXRhOiBJUmVuZGVyVmlydHVhbExpc3RJdGVtIHwgbnVsbCkge1xyXG4gICAgdGhpcy5fJHZpcnR1YWxDbGljay5uZXh0KGRhdGEpO1xyXG4gICAgaWYgKHRoaXMuY29sbGFwc2VCeUNsaWNrKSB7XHJcbiAgICAgIGNvbnN0IHRyYWNrQnkgPSB0aGlzLnRyYWNrQnksIGlkID0gKGRhdGEgYXMgYW55KT8uW3RyYWNrQnldID8/IG51bGw7XHJcbiAgICAgIHRoaXMuY29sbGFwc2UoaWQpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2VsZWN0QnlDbGljaykge1xyXG4gICAgICBjb25zdCB0cmFja0J5ID0gdGhpcy50cmFja0J5LCBpZCA9IChkYXRhIGFzIGFueSk/Llt0cmFja0J5XSA/PyBudWxsO1xyXG4gICAgICB0aGlzLnNlbGVjdChpZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGUoaW1tZWRpYXRlbHk6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgdGhpcy5fdHJhY2tCb3g/LmNoYW5nZXMoaW1tZWRpYXRlbHksIGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SXRlbUNvbmZpZyhpZDogSWQpIHtcclxuICAgIGNvbnN0IGRpc3BsYXlJdGVtcyA9IHRoaXMuZGlzcGxheUl0ZW1zO1xyXG4gICAgaWYgKCEhZGlzcGxheUl0ZW1zKSB7XHJcbiAgICAgIGNvbnN0IHRyYWNrQnkgPSB0aGlzLnRyYWNrQnk7XHJcbiAgICAgIHJldHVybiBkaXNwbGF5SXRlbXMuZmluZChkYXRhID0+IHtcclxuICAgICAgICBjb25zdCBfaWQgPSAoZGF0YSBhcyBhbnkpPy5bdHJhY2tCeV0gPz8gbnVsbDtcclxuICAgICAgICByZXR1cm4gX2lkID09PSBpZDtcclxuICAgICAgfSk/LmNvbmZpZyA/PyBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZWxlY3RzIGEgbGlzdCBpdGVtXHJcbiAgICogQHBhcmFtIGlkIFxyXG4gICAqIEBwYXJhbSBzZWxlY3RlZCAtIElmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQsIHRoZW4gdGhlIHRvZ2dsZSBtZXRob2QgaXMgZXhlY3V0ZWQsIGlmIGZhbHNlIG9yIHRydWUsIHRoZW4gdGhlIHNlbGVjdGlvbi9kZXNlbGVjdGlvbiBpcyBwZXJmb3JtZWQuXHJcbiAgICovXHJcbiAgc2VsZWN0KGlkOiBJZCwgc2VsZWN0ZWQ/OiBib29sZWFuKSB7XHJcbiAgICB2YWxpZGF0ZUlkKGlkKTtcclxuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuZ2V0SXRlbUNvbmZpZyhpZCk7XHJcbiAgICBpZiAoKCEhY29uZmlnICYmIGNvbmZpZy5zZWxlY3RhYmxlKSkge1xyXG4gICAgICBzd2l0Y2ggKHRoaXMuXyRzZWxlY3RpbmdNb2RlLmdldFZhbHVlKCkpIHtcclxuICAgICAgICBjYXNlIFNlbGVjdGluZ01vZGVzVHlwZXMuU0VMRUNUOiB7XHJcbiAgICAgICAgICBjb25zdCBjdXJyID0gdGhpcy5fJHNlbGVjdGVkSWRzLmdldFZhbHVlKCkgYXMgKElkIHwgdW5kZWZpbmVkKTtcclxuICAgICAgICAgIGlmIChzZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KGN1cnIgIT09IGlkID8gaWQgOiBudWxsKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KHNlbGVjdGVkID8gaWQgOiBudWxsKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXNlIFNlbGVjdGluZ01vZGVzVHlwZXMuTVVMVElfU0VMRUNUOiB7XHJcbiAgICAgICAgICBjb25zdCBjdXJyID0gWy4uLih0aGlzLl8kc2VsZWN0ZWRJZHMuZ2V0VmFsdWUoKSB8fCBbXSkgYXMgQXJyYXk8SWQ+XSxcclxuICAgICAgICAgICAgaW5kZXggPSBjdXJyLmluZGV4T2YoaWQpO1xyXG4gICAgICAgICAgaWYgKHNlbGVjdGVkID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICBjdXJyLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQoY3Vycik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQoWy4uLmN1cnIsIGlkXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICB0aGlzLl8kc2VsZWN0ZWRJZHMubmV4dChjdXJyKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLl8kc2VsZWN0ZWRJZHMubmV4dChbLi4uY3VyciwgaWRdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICBjdXJyLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQoY3Vycik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQoY3Vycik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXNlIFNlbGVjdGluZ01vZGVzVHlwZXMuTk9ORTpcclxuICAgICAgICBkZWZhdWx0OiB7XHJcbiAgICAgICAgICB0aGlzLl8kc2VsZWN0ZWRJZHMubmV4dChudWxsKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAgKiBDb2xsYXBzZSBsaXN0IGl0ZW1zXHJcbiAgICAqIEBwYXJhbSBkYXRhIFxyXG4gICAgKiBAcGFyYW0gY29sbGFwc2VkIC0gSWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgdGhlbiB0aGUgdG9nZ2xlIG1ldGhvZCBpcyBleGVjdXRlZCwgaWYgZmFsc2Ugb3IgdHJ1ZSwgdGhlbiB0aGUgY29sbGFwc2UvZXhwYW5kIGlzIHBlcmZvcm1lZC5cclxuICAgICovXHJcbiAgY29sbGFwc2UoaWQ6IElkLCBjb2xsYXBzZWQ/OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5pc05vbmVDb2xsYXBzZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdmFsaWRhdGVJZChpZCk7XHJcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmdldEl0ZW1Db25maWcoaWQpO1xyXG4gICAgaWYgKCghIWNvbmZpZyAmJiBjb25maWcuY29sbGFwc2FibGUpKSB7XHJcbiAgICAgIGNvbnN0IGFsbEdyb3VwczogQXJyYXk8SWQ+ID0gW107XHJcbiAgICAgIGlmICh0aGlzLmlzQWNjb3JkaW9uQ29sbGFwc2UpIHtcclxuICAgICAgICBjb25zdCBpdGVtcyA9IHRoaXMuaXRlbXMsIGl0ZW1Db25maWdNYXAgPSB0aGlzLml0ZW1Db25maWdNYXAsIHRyYWNrQnkgPSB0aGlzLnRyYWNrQnk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBpdGVtcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1tpXSwgaWQgPSBpdGVtW3RyYWNrQnldLCBjb2xsYXBzYWJsZSA9IGl0ZW1Db25maWdNYXA/LltpZF0/LmNvbGxhcHNhYmxlID09PSB0cnVlO1xyXG4gICAgICAgICAgaWYgKCFjb2xsYXBzYWJsZSkge1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGFsbEdyb3Vwcy5wdXNoKGlkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGN1cnIgPSB0aGlzLmlzQWNjb3JkaW9uQ29sbGFwc2UgPyBhbGxHcm91cHMgOiBbLi4uKHRoaXMuXyRjb2xsYXBzZWRJZHMuZ2V0VmFsdWUoKSB8fCBbXSkgYXMgQXJyYXk8SWQ+XSxcclxuICAgICAgICBpbmRleCA9IGN1cnIuaW5kZXhPZihpZCk7XHJcbiAgICAgIGlmICghY29sbGFwc2VkKSB7XHJcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgIGN1cnIuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgIHRoaXMuXyRjb2xsYXBzZWRJZHMubmV4dChjdXJyKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5fJGNvbGxhcHNlZElkcy5uZXh0KFsuLi5jdXJyLCBpZF0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChjb2xsYXBzZWQpIHtcclxuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgdGhpcy5fJGNvbGxhcHNlZElkcy5uZXh0KGN1cnIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl8kY29sbGFwc2VkSWRzLm5leHQoWy4uLmN1cnIsIGlkXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICBjdXJyLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICB0aGlzLl8kY29sbGFwc2VkSWRzLm5leHQoY3Vycik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuXyRjb2xsYXBzZWRJZHMubmV4dChjdXJyKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmlzQWNjb3JkaW9uQ29sbGFwc2UpIHtcclxuICAgICAgICB0aGlzLl8kc2Nyb2xsVG8ubmV4dCh7XHJcbiAgICAgICAgICBpZCwgY2I6IG51bGwsIG9wdGlvbnM6IHtcclxuICAgICAgICAgICAgZGVsYXk6IDEwMCwgZm9jdXNlZDogdHJ1ZSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fJHNjcm9sbFRvLm5leHQoe1xyXG4gICAgICAgICAgaWQsIGNiOiBudWxsLCBvcHRpb25zOiB7XHJcbiAgICAgICAgICAgIGRlbGF5OiAxMDAsIGZvY3VzZWQ6IHRydWUsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRGb2N1c2VkRWxlbWVudEJ5SWQoaWQ6IElkKSB7XHJcbiAgICBjb25zdCBlbCA9IHRoaXMubGlzdEVsZW1lbnQ/LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KGdldFNlbGVjdG9yQnlJdGVtSWQoaWQpKTtcclxuICAgIGlmICghIWVsKSB7XHJcbiAgICAgIGNvbnN0IGZvY3VzZWRFbCA9IGVsLnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KGAuJHtJVEVNX0NPTlRBSU5FUn1gKTtcclxuICAgICAgaWYgKCEhZm9jdXNlZEVsKSB7XHJcbiAgICAgICAgcmV0dXJuIGZvY3VzZWRFbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgYW4gZWxlbWVudCB3aXRoIGEgZ2l2ZW4gaWRcclxuICAgKi9cclxuICBnZXRJdGVtQm91bmRzKGlkOiBJZCk6IElTaXplIHwgbnVsbCB7XHJcbiAgICB2YWxpZGF0ZUlkKGlkKTtcclxuICAgIHJldHVybiB0aGlzLl90cmFja0JveD8uZ2V0SXRlbUJvdW5kcyhpZCkgPz8gbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZvY3VzIGFuIGxpc3QgaXRlbSBieSBhIGdpdmVuIGlkLlxyXG4gICAqL1xyXG4gIGZvY3VzQnlJZChpZDogSWQsIGFsaWduOiBGb2N1c0FsaWdubWVudCA9IEZvY3VzQWxpZ25tZW50cy5OT05FLCBzY3JvbGxCZWhhdmlvcjogU2Nyb2xsQmVoYXZpb3IgPSBcImF1dG9cIikge1xyXG4gICAgdmFsaWRhdGVJZChpZCk7XHJcbiAgICB2YWxpZGF0ZUZvY3VzQWxpZ25tZW50KGFsaWduKTtcclxuICAgIGNvbnN0IGVsID0gdGhpcy5nZXRGb2N1c2VkRWxlbWVudEJ5SWQoaWQpO1xyXG4gICAgaWYgKCEhZWwpIHtcclxuICAgICAgdGhpcy5mb2N1cyhlbCwgYWxpZ24sIHNjcm9sbEJlaGF2aW9yKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZvY3VzKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBhbGlnbjogRm9jdXNBbGlnbm1lbnQgPSBGb2N1c0FsaWdubWVudHMuQ0VOVEVSLCBiZWhhdmlvcjogU2Nyb2xsQmVoYXZpb3IgPSBCRUhBVklPUl9BVVRPKTogYm9vbGVhbiB7XHJcbiAgICBlbGVtZW50LmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTtcclxuICAgIGlmICghIWVsZW1lbnQucGFyZW50RWxlbWVudCkge1xyXG4gICAgICBjb25zdCBwb3NpdGlvbiA9IHBhcnNlRmxvYXQoZWxlbWVudC5wYXJlbnRFbGVtZW50Py5nZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJykgPz8gJzAnKTtcclxuICAgICAgdGhpcy5fJGZvY3VzSXRlbS5uZXh0KHsgZWxlbWVudCwgcG9zaXRpb24sIGFsaWduLCBiZWhhdmlvciB9KTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBmb2N1c0xpc3QoKSB7XHJcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5saXN0RWxlbWVudDtcclxuICAgIGlmICghIWVsZW1lbnQpIHtcclxuICAgICAgZWxlbWVudC5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmb2N1c0ZpcnN0RWxlbWVudCgpIHtcclxuICAgIGNvbnN0IGVsZW1lbnRzID0gdGhpcy5saXN0RWxlbWVudD8ucXVlcnlTZWxlY3RvckFsbDxIVE1MRGl2RWxlbWVudD4oZ2V0TGlzdEVsZW1lbnRzKCkpLFxyXG4gICAgICBlbExpc3QgPSAoZWxlbWVudHMgPyBBcnJheS5mcm9tKGVsZW1lbnRzKSA6IFtdKS5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaW5kZXhBID0gTnVtYmVyKGEuZ2V0QXR0cmlidXRlKE5HVkxfSU5ERVgpKSwgaW5kZXhCID0gTnVtYmVyKGIuZ2V0QXR0cmlidXRlKE5HVkxfSU5ERVgpKTtcclxuICAgICAgICBpZiAoaW5kZXhBID4gaW5kZXhCKSByZXR1cm4gMTtcclxuICAgICAgICBpZiAoaW5kZXhBIDwgaW5kZXhCKSByZXR1cm4gLTE7XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgIH0pO1xyXG4gICAgbGV0IGVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSBlbExpc3QubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGVsID0gZWxMaXN0W2ldLCBpbmRleCA9IE51bWJlcihlbC5nZXRBdHRyaWJ1dGUoTkdWTF9JTkRFWCkpO1xyXG4gICAgICBpZiAoISFlbCAmJiBpbmRleCA+IDApIHtcclxuICAgICAgICBlbGVtZW50ID0gZWw7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghIWVsZW1lbnQpIHtcclxuICAgICAgdGhpcy5mb2N1cyhlbGVtZW50LCBGb2N1c0FsaWdubWVudHMuQ0VOVEVSLCBCRUhBVklPUl9JTlNUQU5UKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGluaXRpYWxpemUoaWQ6IG51bWJlciwgdHJhY2tCb3g6IFRyYWNrQm94KSB7XHJcbiAgICB0aGlzLl9pZCA9IGlkO1xyXG4gICAgdGhpcy5fdHJhY2tCb3ggPSB0cmFja0JveDtcclxuICAgIHRoaXMuX3RyYWNrQm94LmFkZEV2ZW50TGlzdGVuZXIoVHJhY2tCb3hFdmVudHMuVElDSywgdGhpcy5fb25UaWNrSGFuZGxlcik7XHJcbiAgICB0aGlzLl90cmFja0JveC5hZGRFdmVudExpc3RlbmVyKFRyYWNrQm94RXZlbnRzLkNIQU5HRSwgdGhpcy5fb25UcmFja0JveENoYW5nZUhhbmRsZXIpO1xyXG4gIH1cclxuXHJcbiAgZ2VuZXJhdGVDb21wb25lbnRJZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9uZXh0Q29tcG9uZW50SWQgPSB0aGlzLl9uZXh0Q29tcG9uZW50SWQgPT09IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSXHJcbiAgICAgID8gMCA6IHRoaXMuX25leHRDb21wb25lbnRJZCArIDE7XHJcbiAgfVxyXG5cclxuICBnZXRDb21wb25lbnRCb3VuZHNCeUludGVyc2VjdGlvblBvc2l0aW9uKHBvc2l0aW9uOiBudW1iZXIsIG1heFBvc2l0aW9uOiBudW1iZXIgfCBudWxsID0gbnVsbCk6IChJUmVjdCAmIHsgaWQ6IElkIHwgbnVsbDsgaXNGaXJzdDogYm9vbGVhbjsgaXNMYXN0OiBib29sZWFuOyB9KSB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RyYWNrQm94Py5nZXRDb21wb25lbnRCb3VuZHNCeUludGVyc2VjdGlvblBvc2l0aW9uKHBvc2l0aW9uLCBtYXhQb3NpdGlvbikgPz8gbnVsbDtcclxuICB9XHJcblxyXG4gIHNldEludGVyc2VjdGlvbkVsZW1lbnRCeVNuYXBUb0l0ZW1BbGlnbihpZDogSWQgfCBudWxsKSB7XHJcbiAgICBpZiAodGhpcy5fJGludGVyc2VjdGlvbkVsZW1lbnRCeVNuYXBUb0l0ZW1BbGlnbi5nZXRWYWx1ZSgpICE9PSBpZCkge1xyXG4gICAgICB0aGlzLl8kaW50ZXJzZWN0aW9uRWxlbWVudEJ5U25hcFRvSXRlbUFsaWduLm5leHQoaWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICAqIFRoZSBtZXRob2Qgc2Nyb2xscyB0aGUgbGlzdCB0byB0aGUgZWxlbWVudCB3aXRoIHRoZSBnaXZlbiBgaWRgIGFuZCByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgc2Nyb2xsZWQgYXJlYS5cclxuICAgICovXHJcbiAgc2Nyb2xsVG8oaWQ6IElkLCBjYjogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGwsIG9wdGlvbnM6IElTY3JvbGxPcHRpb25zIHwgbnVsbCA9IG51bGwpIHtcclxuICAgIHRoaXMuXyRzY3JvbGxUby5uZXh0KHsgaWQsIGNiLCBvcHRpb25zIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2Nyb2xscyB0aGUgc2Nyb2xsIGFyZWEgdG8gdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGNvbGxlY3Rpb24uXHJcbiAgICovXHJcbiAgc2Nyb2xsVG9TdGFydChvcHRpb25zPzogSVNjcm9sbE9wdGlvbnMpIHtcclxuICAgIHRoaXMuXyRzY3JvbGxUb1N0YXJ0Lm5leHQob3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTY3JvbGxzIHRoZSBsaXN0IHRvIHRoZSBlbmQgb2YgdGhlIGNvbnRlbnQgc2l6ZS5cclxuICAgKi9cclxuICBzY3JvbGxUb0VuZChvcHRpb25zPzogSVNjcm9sbE9wdGlvbnMpIHtcclxuICAgIHRoaXMuXyRzY3JvbGxUb0VuZC5uZXh0KG9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl8kdW5zdWJzY3JpYmUpIHtcclxuICAgICAgdGhpcy5fJHVuc3Vic2NyaWJlLm5leHQoKTtcclxuICAgICAgdGhpcy5fJHVuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { PX } from '../const';
|
|
2
|
+
const UNSET = 'unset', B_LIMIT = 0.5;
|
|
3
|
+
/**
|
|
4
|
+
* deckOfCards3D
|
|
5
|
+
* @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/transformations/deck-of-cards-3d.ts
|
|
6
|
+
* @author Evgenii Alexandrovich Grebennikov
|
|
7
|
+
* @email djonnyx@gmail.com
|
|
8
|
+
*/
|
|
9
|
+
export const deckOfCards3D = (options) => {
|
|
10
|
+
const dof = options?.dof ?? null, fogColor = options?.fogColor ?? null, fogWeight = options?.fogWeight ?? null, spacingBetweenItems = options?.spacingBetweenItems ?? .5, angle = options?.angle ?? 1, depth = options?.depth ?? .15, scaleValue = options?.scale ?? .15, scaleXValue = options?.scaleX ?? null, scaleYValue = options?.scaleY ?? null, depthPow = options?.depthPow ?? 4, sineWave = options?.sineWave ?? false;
|
|
11
|
+
return (index, measures, config) => {
|
|
12
|
+
const result = {
|
|
13
|
+
x: 0,
|
|
14
|
+
y: 0,
|
|
15
|
+
z: 0,
|
|
16
|
+
rotationX: 0,
|
|
17
|
+
rotationY: 0,
|
|
18
|
+
rotationZ: 0,
|
|
19
|
+
scaleX: 1,
|
|
20
|
+
scaleY: 1,
|
|
21
|
+
scaleZ: 1,
|
|
22
|
+
opacity: 1,
|
|
23
|
+
zIndex: 1,
|
|
24
|
+
}, isVertical = config.isVertical, boundsSize = measures.boundsSize, scrollSize = measures.scrollSize, itemSize = isVertical ? measures.height : measures.width, itemSizeHalf = itemSize * .5, boundsSizeHalf = boundsSize * .5, xx = isVertical ? measures.x : (measures.x + config.layoutOffset + itemSizeHalf - boundsSizeHalf - scrollSize), yy = isVertical ? (measures.y + config.layoutOffset + itemSizeHalf - boundsSizeHalf - scrollSize) : measures.y, pxOffset = isVertical ? boundsSizeHalf : xx, px = isVertical ? 1 : (pxOffset / boundsSizeHalf), pyOffset = isVertical ? yy : boundsSizeHalf, py = isVertical ? (pyOffset / boundsSizeHalf) : 1;
|
|
25
|
+
if (config.snapped || config.snappedOut) {
|
|
26
|
+
result.x = measures.x;
|
|
27
|
+
result.y = measures.y;
|
|
28
|
+
result.zIndex = config.zIndex;
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
result.x = isVertical ? xx : (scrollSize - config.layoutOffset + boundsSizeHalf - itemSizeHalf + (xx * spacingBetweenItems * (sineWave ? Math.abs(Math.sin(px)) : 1)));
|
|
32
|
+
result.y = isVertical ? (scrollSize - config.layoutOffset + boundsSizeHalf - itemSizeHalf + (yy * spacingBetweenItems * (sineWave ? Math.abs(Math.sin(py)) : 1))) : yy;
|
|
33
|
+
const s = (isVertical ? Math.abs(yy) : Math.abs(xx)) / boundsSize, scale = Math.pow(1 - s * scaleValue, depthPow), scaleX = scaleXValue !== null ? Math.pow(1 - s * scaleXValue, depthPow) : null, scaleY = scaleYValue !== null ? Math.pow(1 - s * scaleYValue, depthPow) : null, dofScale = Math.pow(1 - s * depth, depthPow);
|
|
34
|
+
if (scaleXValue === null && scaleYValue === null) {
|
|
35
|
+
const z = scale + .1;
|
|
36
|
+
result.z = z > 1 ? 1 : z;
|
|
37
|
+
result.scaleX = result.scaleY = scale;
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
result.scaleX = scaleX !== null ? scaleX : 1;
|
|
41
|
+
result.scaleY = scaleY !== null ? scaleY : 1;
|
|
42
|
+
}
|
|
43
|
+
result.rotationX = (isVertical ? py : px) * 200 * angle;
|
|
44
|
+
result.zIndex = 100 - Math.floor(Math.abs(isVertical ? py : px) * 100);
|
|
45
|
+
if (!!dof) {
|
|
46
|
+
const blur = (s * dof) - B_LIMIT, actualBlur = blur > 0 ? blur : 0;
|
|
47
|
+
result.filter = actualBlur ? `blur(${actualBlur}${PX})` : UNSET;
|
|
48
|
+
}
|
|
49
|
+
if (!!fogColor) {
|
|
50
|
+
result.opacity = fogWeight ? Math.pow(dofScale, fogWeight) : scale;
|
|
51
|
+
result.blendColor = fogColor;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return result;
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjay1vZi1jYXJkcy0zZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL3RyYW5zZm9ybWF0aW9ucy9kZWNrLW9mLWNhcmRzLTNkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFLOUIsTUFBTSxLQUFLLEdBQUcsT0FBTyxFQUNqQixPQUFPLEdBQUcsR0FBRyxDQUFDO0FBaURsQjs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFDLE9BQStCLEVBQWlCLEVBQUU7SUFDNUUsTUFBTSxHQUFHLEdBQUcsT0FBTyxFQUFFLEdBQUcsSUFBSSxJQUFJLEVBQzVCLFFBQVEsR0FBRyxPQUFPLEVBQUUsUUFBUSxJQUFJLElBQUksRUFDcEMsU0FBUyxHQUFHLE9BQU8sRUFBRSxTQUFTLElBQUksSUFBSSxFQUN0QyxtQkFBbUIsR0FBRyxPQUFPLEVBQUUsbUJBQW1CLElBQUksRUFBRSxFQUN4RCxLQUFLLEdBQUcsT0FBTyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQzNCLEtBQUssR0FBRyxPQUFPLEVBQUUsS0FBSyxJQUFJLEdBQUcsRUFDN0IsVUFBVSxHQUFHLE9BQU8sRUFBRSxLQUFLLElBQUksR0FBRyxFQUNsQyxXQUFXLEdBQUcsT0FBTyxFQUFFLE1BQU0sSUFBSSxJQUFJLEVBQ3JDLFdBQVcsR0FBRyxPQUFPLEVBQUUsTUFBTSxJQUFJLElBQUksRUFDckMsUUFBUSxHQUFHLE9BQU8sRUFBRSxRQUFRLElBQUksQ0FBQyxFQUNqQyxRQUFRLEdBQUcsT0FBTyxFQUFFLFFBQVEsSUFBSSxLQUFLLENBQUM7SUFDMUMsT0FBTyxDQUFDLEtBQWEsRUFBRSxRQUF3QyxFQUMzRCxNQUFvQyxFQUF1QixFQUFFO1FBQzdELE1BQU0sTUFBTSxHQUF3QjtZQUNoQyxDQUFDLEVBQUUsQ0FB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QyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxVQUFVLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQzdHLE1BQU0sR0FBRyxXQUFXLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQzlFLE1BQU0sR0FBRyxXQUFXLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQzlFLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ2pELElBQUksV0FBVyxLQUFLLElBQUksSUFBSSxXQUFXLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQy9DLE1BQU0sQ0FBQyxHQUFHLEtBQUssR0FBRyxFQUFFLENBQUM7Z0JBQ3JCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDMUMsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzdDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakQsQ0FBQztZQUNELE1BQU0sQ0FBQyxTQUFTLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQztZQUN4RCxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZFLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNSLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE9BQU8sRUFDNUIsVUFBVSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNyQyxNQUFNLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUSxVQUFVLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUNwRSxDQUFDO1lBQ0QsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2IsTUFBTSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7Z0JBQ25FLE1BQU0sQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDO1lBQ2pDLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQyxDQUFBO0FBQ0wsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUFggfSBmcm9tICcuLi9jb25zdCc7XHJcbmltcG9ydCB7IElJdGVtVHJhbnNmb3JtYXRpb24gfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgSVJlbmRlclZpcnR1YWxMaXN0SXRlbUNvbmZpZywgSVJlbmRlclZpcnR1YWxMaXN0SXRlbU1lYXN1cmVzIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgQ29sb3IsIEl0ZW1UcmFuc2Zvcm0gfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5jb25zdCBVTlNFVCA9ICd1bnNldCcsXHJcbiAgICBCX0xJTUlUID0gMC41O1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJRGVja09mQ2FyZHMzRE9wdGlvbnMge1xyXG4gICAgLyoqXHJcbiAgICAgKiBEZXB0aCBPZiBGaWVsZC4gRGVmYXVsdCB2YWx1ZSBpcyBgbnVsbGAuXHJcbiAgICAgKi9cclxuICAgIGRvZj86IG51bWJlcjtcclxuICAgIC8qKlxyXG4gICAgICogRm9nIGNvbG9yLiBEZWZhdWx0IHZhbHVlIGlzIGBudWxsYC5cclxuICAgICAqL1xyXG4gICAgZm9nQ29sb3I/OiBDb2xvcjtcclxuICAgIC8qKlxyXG4gICAgICogRm9nIHdlaWdodC4gRGVmYXVsdCB2YWx1ZSBpcyBgbnVsbGAuXHJcbiAgICAgKi9cclxuICAgIGZvZ1dlaWdodD86IG51bWJlcjtcclxuICAgIC8qKlxyXG4gICAgICogU3BhY2luZyBiZXR3ZWVuIGl0ZW1zLiBEZWZhdWx0IHZhbHVlIGlzIGAwLjVgLlxyXG4gICAgICovXHJcbiAgICBzcGFjaW5nQmV0d2Vlbkl0ZW1zPzogbnVtYmVyO1xyXG4gICAgLyoqXHJcbiAgICAgKiBBbmdsZSBvZiBpbmNsaW5hdGlvbi4gRGVmYXVsdCB2YWx1ZSBpcyBgMWAuXHJcbiAgICAgKi9cclxuICAgIGFuZ2xlPzogbnVtYmVyO1xyXG4gICAgLyoqXHJcbiAgICAgKiBEZXB0aC4gRGVmYXVsdCB2YWx1ZSBpcyBgMC4xNWAuXHJcbiAgICAgKi9cclxuICAgIGRlcHRoPzogbnVtYmVyO1xyXG4gICAgLyoqXHJcbiAgICAgKiBTY2FsZS4gRGVmYXVsdCB2YWx1ZSBpcyBgMC4xNWAuXHJcbiAgICAgKi9cclxuICAgIHNjYWxlPzogbnVtYmVyO1xyXG4gICAgLyoqXHJcbiAgICAgKiBTY2FsZSBYLiBEZWZhdWx0IHZhbHVlIGlzIGBudWxsYC5cclxuICAgICAqL1xyXG4gICAgc2NhbGVYPzogbnVtYmVyIHwgbnVsbDtcclxuICAgIC8qKlxyXG4gICAgICogU2NhbGUgWS4gRGVmYXVsdCB2YWx1ZSBpcyBgbnVsbGAuXHJcbiAgICAgKi9cclxuICAgIHNjYWxlWT86IG51bWJlciB8IG51bGw7XHJcbiAgICAvKipcclxuICAgICAqIERlcHRoIGV4cG9uZW50LiBEZWZhdWx0IHZhbHVlIGlzIGA0YC5cclxuICAgICAqL1xyXG4gICAgZGVwdGhQb3c/OiBudW1iZXI7XHJcbiAgICAvKipcclxuICAgICAqIFNpbnVzb2lkYWwgZGlzdHJpYnV0aW9uLiBEZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuXHJcbiAgICAgKi9cclxuICAgIHNpbmVXYXZlPzogYm9vbGVhbjtcclxufVxyXG5cclxuLyoqXHJcbiAqIGRlY2tPZkNhcmRzM0RcclxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0Rqb25ueVgvbmctdmlydHVhbC1saXN0L2Jsb2IvMTgueC9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi90cmFuc2Zvcm1hdGlvbnMvZGVjay1vZi1jYXJkcy0zZC50c1xyXG4gKiBAYXV0aG9yIEV2Z2VuaWkgQWxleGFuZHJvdmljaCBHcmViZW5uaWtvdlxyXG4gKiBAZW1haWwgZGpvbm55eEBnbWFpbC5jb21cclxuICovXHJcbmV4cG9ydCBjb25zdCBkZWNrT2ZDYXJkczNEID0gKG9wdGlvbnM/OiBJRGVja09mQ2FyZHMzRE9wdGlvbnMpOiBJdGVtVHJhbnNmb3JtID0+IHtcclxuICAgIGNvbnN0IGRvZiA9IG9wdGlvbnM/LmRvZiA/PyBudWxsLFxyXG4gICAgICAgIGZvZ0NvbG9yID0gb3B0aW9ucz8uZm9nQ29sb3IgPz8gbnVsbCxcclxuICAgICAgICBmb2dXZWlnaHQgPSBvcHRpb25zPy5mb2dXZWlnaHQgPz8gbnVsbCxcclxuICAgICAgICBzcGFjaW5nQmV0d2Vlbkl0ZW1zID0gb3B0aW9ucz8uc3BhY2luZ0JldHdlZW5JdGVtcyA/PyAuNSxcclxuICAgICAgICBhbmdsZSA9IG9wdGlvbnM/LmFuZ2xlID8/IDEsXHJcbiAgICAgICAgZGVwdGggPSBvcHRpb25zPy5kZXB0aCA/PyAuMTUsXHJcbiAgICAgICAgc2NhbGVWYWx1ZSA9IG9wdGlvbnM/LnNjYWxlID8/IC4xNSxcclxuICAgICAgICBzY2FsZVhWYWx1ZSA9IG9wdGlvbnM/LnNjYWxlWCA/PyBudWxsLFxyXG4gICAgICAgIHNjYWxlWVZhbHVlID0gb3B0aW9ucz8uc2NhbGVZID8/IG51bGwsXHJcbiAgICAgICAgZGVwdGhQb3cgPSBvcHRpb25zPy5kZXB0aFBvdyA/PyA0LFxyXG4gICAgICAgIHNpbmVXYXZlID0gb3B0aW9ucz8uc2luZVdhdmUgPz8gZmFsc2U7XHJcbiAgICByZXR1cm4gKGluZGV4OiBudW1iZXIsIG1lYXN1cmVzOiBJUmVuZGVyVmlydHVhbExpc3RJdGVtTWVhc3VyZXMsXHJcbiAgICAgICAgY29uZmlnOiBJUmVuZGVyVmlydHVhbExpc3RJdGVtQ29uZmlnKTogSUl0ZW1UcmFuc2Zvcm1hdGlvbiA9PiB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0OiBJSXRlbVRyYW5zZm9ybWF0aW9uID0ge1xyXG4gICAgICAgICAgICB4OiAwLFxyXG4gICAgICAgICAgICB5OiAwLFxyXG4gICAgICAgICAgICB6OiAwLFxyXG4gICAgICAgICAgICByb3RhdGlvblg6IDAsXHJcbiAgICAgICAgICAgIHJvdGF0aW9uWTogMCxcclxuICAgICAgICAgICAgcm90YXRpb25aOiAwLFxyXG4gICAgICAgICAgICBzY2FsZVg6IDEsXHJcbiAgICAgICAgICAgIHNjYWxlWTogMSxcclxuICAgICAgICAgICAgc2NhbGVaOiAxLFxyXG4gICAgICAgICAgICBvcGFjaXR5OiAxLFxyXG4gICAgICAgICAgICB6SW5kZXg6IDEsXHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgaXNWZXJ0aWNhbCA9IGNvbmZpZy5pc1ZlcnRpY2FsLFxyXG4gICAgICAgICAgICBib3VuZHNTaXplID0gbWVhc3VyZXMuYm91bmRzU2l6ZSxcclxuICAgICAgICAgICAgc2Nyb2xsU2l6ZSA9IG1lYXN1cmVzLnNjcm9sbFNpemUsXHJcbiAgICAgICAgICAgIGl0ZW1TaXplID0gaXNWZXJ0aWNhbCA/IG1lYXN1cmVzLmhlaWdodCA6IG1lYXN1cmVzLndpZHRoLFxyXG4gICAgICAgICAgICBpdGVtU2l6ZUhhbGYgPSBpdGVtU2l6ZSAqIC41LFxyXG4gICAgICAgICAgICBib3VuZHNTaXplSGFsZiA9IGJvdW5kc1NpemUgKiAuNSxcclxuICAgICAgICAgICAgeHggPSBpc1ZlcnRpY2FsID8gbWVhc3VyZXMueCA6IChtZWFzdXJlcy54ICsgY29uZmlnLmxheW91dE9mZnNldCArIGl0ZW1TaXplSGFsZiAtIGJvdW5kc1NpemVIYWxmIC0gc2Nyb2xsU2l6ZSksXHJcbiAgICAgICAgICAgIHl5ID0gaXNWZXJ0aWNhbCA/IChtZWFzdXJlcy55ICsgY29uZmlnLmxheW91dE9mZnNldCArIGl0ZW1TaXplSGFsZiAtIGJvdW5kc1NpemVIYWxmIC0gc2Nyb2xsU2l6ZSkgOiBtZWFzdXJlcy55LFxyXG4gICAgICAgICAgICBweE9mZnNldCA9IGlzVmVydGljYWwgPyBib3VuZHNTaXplSGFsZiA6IHh4LCBweCA9IGlzVmVydGljYWwgPyAxIDogKHB4T2Zmc2V0IC8gYm91bmRzU2l6ZUhhbGYpLFxyXG4gICAgICAgICAgICBweU9mZnNldCA9IGlzVmVydGljYWwgPyB5eSA6IGJvdW5kc1NpemVIYWxmLCBweSA9IGlzVmVydGljYWwgPyAocHlPZmZzZXQgLyBib3VuZHNTaXplSGFsZikgOiAxO1xyXG4gICAgICAgIGlmIChjb25maWcuc25hcHBlZCB8fCBjb25maWcuc25hcHBlZE91dCkge1xyXG4gICAgICAgICAgICByZXN1bHQueCA9IG1lYXN1cmVzLng7XHJcbiAgICAgICAgICAgIHJlc3VsdC55ID0gbWVhc3VyZXMueTtcclxuICAgICAgICAgICAgcmVzdWx0LnpJbmRleCA9IGNvbmZpZy56SW5kZXg7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmVzdWx0LnggPSBpc1ZlcnRpY2FsID8geHggOiAoc2Nyb2xsU2l6ZSAtIGNvbmZpZy5sYXlvdXRPZmZzZXQgKyBib3VuZHNTaXplSGFsZiAtIGl0ZW1TaXplSGFsZiArICh4eCAqIHNwYWNpbmdCZXR3ZWVuSXRlbXMgKiAoc2luZVdhdmUgPyBNYXRoLmFicyhNYXRoLnNpbihweCkpIDogMSkpKTtcclxuICAgICAgICAgICAgcmVzdWx0LnkgPSBpc1ZlcnRpY2FsID8gKHNjcm9sbFNpemUgLSBjb25maWcubGF5b3V0T2Zmc2V0ICsgYm91bmRzU2l6ZUhhbGYgLSBpdGVtU2l6ZUhhbGYgKyAoeXkgKiBzcGFjaW5nQmV0d2Vlbkl0ZW1zICogKHNpbmVXYXZlID8gTWF0aC5hYnMoTWF0aC5zaW4ocHkpKSA6IDEpKSkgOiB5eTtcclxuICAgICAgICAgICAgY29uc3QgcyA9IChpc1ZlcnRpY2FsID8gTWF0aC5hYnMoeXkpIDogTWF0aC5hYnMoeHgpKSAvIGJvdW5kc1NpemUsIHNjYWxlID0gTWF0aC5wb3coMSAtIHMgKiBzY2FsZVZhbHVlLCBkZXB0aFBvdyksXHJcbiAgICAgICAgICAgICAgICBzY2FsZVggPSBzY2FsZVhWYWx1ZSAhPT0gbnVsbCA/IE1hdGgucG93KDEgLSBzICogc2NhbGVYVmFsdWUsIGRlcHRoUG93KSA6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBzY2FsZVkgPSBzY2FsZVlWYWx1ZSAhPT0gbnVsbCA/IE1hdGgucG93KDEgLSBzICogc2NhbGVZVmFsdWUsIGRlcHRoUG93KSA6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBkb2ZTY2FsZSA9IE1hdGgucG93KDEgLSBzICogZGVwdGgsIGRlcHRoUG93KTtcclxuICAgICAgICAgICAgaWYgKHNjYWxlWFZhbHVlID09PSBudWxsICYmIHNjYWxlWVZhbHVlID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB6ID0gc2NhbGUgKyAuMTtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC56ID0geiA+IDEgPyAxIDogejtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5zY2FsZVggPSByZXN1bHQuc2NhbGVZID0gc2NhbGU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQuc2NhbGVYID0gc2NhbGVYICE9PSBudWxsID8gc2NhbGVYIDogMTtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5zY2FsZVkgPSBzY2FsZVkgIT09IG51bGwgPyBzY2FsZVkgOiAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc3VsdC5yb3RhdGlvblggPSAoaXNWZXJ0aWNhbCA/IHB5IDogcHgpICogMjAwICogYW5nbGU7XHJcbiAgICAgICAgICAgIHJlc3VsdC56SW5kZXggPSAxMDAgLSBNYXRoLmZsb29yKE1hdGguYWJzKGlzVmVydGljYWwgPyBweSA6IHB4KSAqIDEwMCk7XHJcbiAgICAgICAgICAgIGlmICghIWRvZikge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYmx1ciA9IChzICogZG9mKSAtIEJfTElNSVQsXHJcbiAgICAgICAgICAgICAgICAgICAgYWN0dWFsQmx1ciA9IGJsdXIgPiAwID8gYmx1ciA6IDA7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQuZmlsdGVyID0gYWN0dWFsQmx1ciA/IGBibHVyKCR7YWN0dWFsQmx1cn0ke1BYfSlgIDogVU5TRVQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCEhZm9nQ29sb3IpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5vcGFjaXR5ID0gZm9nV2VpZ2h0ID8gTWF0aC5wb3coZG9mU2NhbGUsIGZvZ1dlaWdodCkgOiBzY2FsZTtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5ibGVuZENvbG9yID0gZm9nQ29sb3I7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxufSJdfQ==
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { PX } from '../const';
|
|
2
|
+
const UNSET = 'unset', B_LIMIT = 0.5;
|
|
3
|
+
/**
|
|
4
|
+
* deckOfCards
|
|
5
|
+
* @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/transformations/deck-of-cards.ts
|
|
6
|
+
* @author Evgenii Alexandrovich Grebennikov
|
|
7
|
+
* @email djonnyx@gmail.com
|
|
8
|
+
*/
|
|
9
|
+
export const deckOfCards = (options) => {
|
|
10
|
+
const dof = options?.dof ?? null, fogColor = options?.fogColor ?? null, fogWeight = options?.fogWeight ?? null, spacingBetweenItems = options?.spacingBetweenItems ?? .5, depth = options?.depth ?? .15, scaleValue = options?.scale ?? .15, scaleXValue = options?.scaleX ?? null, scaleYValue = options?.scaleY ?? null, depthPow = options?.depthPow ?? 4, sineWave = options?.sineWave ?? false;
|
|
11
|
+
return (index, measures, config) => {
|
|
12
|
+
const result = {
|
|
13
|
+
x: 0,
|
|
14
|
+
y: 0,
|
|
15
|
+
z: 0,
|
|
16
|
+
rotationX: 0,
|
|
17
|
+
rotationY: 0,
|
|
18
|
+
rotationZ: 0,
|
|
19
|
+
scaleX: 1,
|
|
20
|
+
scaleY: 1,
|
|
21
|
+
scaleZ: 1,
|
|
22
|
+
opacity: 1,
|
|
23
|
+
zIndex: 1,
|
|
24
|
+
}, isVertical = config.isVertical, boundsSize = measures.boundsSize, scrollSize = measures.scrollSize, itemSize = isVertical ? measures.height : measures.width, itemSizeHalf = itemSize * .5, boundsSizeHalf = boundsSize * .5, xx = isVertical ? measures.x : (measures.x + config.layoutOffset + itemSizeHalf - boundsSizeHalf - scrollSize), yy = isVertical ? (measures.y + config.layoutOffset + itemSizeHalf - boundsSizeHalf - scrollSize) : measures.y, pxOffset = isVertical ? boundsSizeHalf : xx, px = isVertical ? 1 : (pxOffset / boundsSizeHalf), pyOffset = isVertical ? yy : boundsSizeHalf, py = isVertical ? (pyOffset / boundsSizeHalf) : 1;
|
|
25
|
+
if (config.snapped || config.snappedOut) {
|
|
26
|
+
result.x = measures.x;
|
|
27
|
+
result.y = measures.y;
|
|
28
|
+
result.zIndex = config.zIndex;
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
result.x = isVertical ? xx : (scrollSize - config.layoutOffset + boundsSizeHalf - itemSizeHalf + (xx * spacingBetweenItems * (sineWave ? Math.abs(Math.sin(px)) : 1)));
|
|
32
|
+
result.y = isVertical ? (scrollSize - config.layoutOffset + boundsSizeHalf - itemSizeHalf + (yy * spacingBetweenItems * (sineWave ? Math.abs(Math.sin(py)) : 1))) : yy;
|
|
33
|
+
const s = (isVertical ? Math.abs(yy) : Math.abs(xx)) / boundsSize, scale = Math.pow(1 - s * scaleValue, depthPow), scaleX = scaleXValue !== null ? Math.pow(1 - s * scaleXValue, depthPow) : null, scaleY = scaleYValue !== null ? Math.pow(1 - s * scaleYValue, depthPow) : null, dofScale = Math.pow(1 - s * depth, depthPow);
|
|
34
|
+
if (scaleXValue === null && scaleYValue === null) {
|
|
35
|
+
result.scaleX = result.scaleY = scale;
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
result.scaleX = scaleX !== null ? scaleX : 1;
|
|
39
|
+
result.scaleY = scaleY !== null ? scaleY : 1;
|
|
40
|
+
}
|
|
41
|
+
result.zIndex = 100 - Math.floor(Math.abs(isVertical ? py : px) * 100);
|
|
42
|
+
if (!!dof) {
|
|
43
|
+
const blur = (s * dof) - B_LIMIT, actualBlur = blur > 0 ? blur : 0;
|
|
44
|
+
result.filter = actualBlur ? `blur(${actualBlur}${PX})` : UNSET;
|
|
45
|
+
}
|
|
46
|
+
if (!!fogColor) {
|
|
47
|
+
result.opacity = fogWeight ? Math.pow(dofScale, fogWeight) : scale;
|
|
48
|
+
result.blendColor = fogColor;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return result;
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjay1vZi1jYXJkcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL3RyYW5zZm9ybWF0aW9ucy9kZWNrLW9mLWNhcmRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFLOUIsTUFBTSxLQUFLLEdBQUcsT0FBTyxFQUNqQixPQUFPLEdBQUcsR0FBRyxDQUFDO0FBNkNsQjs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFDLE9BQTZCLEVBQWlCLEVBQUU7SUFDeEUsTUFBTSxHQUFHLEdBQUcsT0FBTyxFQUFFLEdBQUcsSUFBSSxJQUFJLEVBQzVCLFFBQVEsR0FBRyxPQUFPLEVBQUUsUUFBUSxJQUFJLElBQUksRUFDcEMsU0FBUyxHQUFHLE9BQU8sRUFBRSxTQUFTLElBQUksSUFBSSxFQUN0QyxtQkFBbUIsR0FBRyxPQUFPLEVBQUUsbUJBQW1CLElBQUksRUFBRSxFQUN4RCxLQUFLLEdBQUcsT0FBTyxFQUFFLEtBQUssSUFBSSxHQUFHLEVBQzdCLFVBQVUsR0FBRyxPQUFPLEVBQUUsS0FBSyxJQUFJLEdBQUcsRUFDbEMsV0FBVyxHQUFHLE9BQU8sRUFBRSxNQUFNLElBQUksSUFBSSxFQUNyQyxXQUFXLEdBQUcsT0FBTyxFQUFFLE1BQU0sSUFBSSxJQUFJLEVBQ3JDLFFBQVEsR0FBRyxPQUFPLEVBQUUsUUFBUSxJQUFJLENBQUMsRUFDakMsUUFBUSxHQUFHLE9BQU8sRUFBRSxRQUFRLElBQUksS0FBSyxDQUFDO0lBQzFDLE9BQU8sQ0FBQyxLQUFhLEVBQUUsUUFBd0MsRUFDM0QsTUFBb0MsRUFBdUIsRUFBRTtRQUM3RCxNQUFNLE1BQU0sR0FBd0I7WUFDaEMsQ0FBQyxFQUFFLENBQUM7WUFDSixDQUFDLEVBQUUsQ0FBQztZQUNKLENBQUMsRUFBRSxDQUFDO1lBQ0osU0FBUyxFQUFFLENBQUM7WUFDWixTQUFTLEVBQUUsQ0FBQztZQUNaLFNBQVMsRUFBRSxDQUFDO1lBQ1osTUFBTSxFQUFFLENBQUM7WUFDVCxNQUFNLEVBQUUsQ0FBQztZQUNULE1BQU0sRUFBRSxDQUFDO1lBQ1QsT0FBTyxFQUFFLENBQUM7WUFDVixNQUFNLEVBQUUsQ0FBQztTQUNaLEVBQ0csVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLEVBQzlCLFVBQVUsR0FBRyxRQUFRLENBQUMsVUFBVSxFQUNoQyxVQUFVLEdBQUcsUUFBUSxDQUFDLFVBQVUsRUFDaEMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssRUFDeEQsWUFBWSxHQUFHLFFBQVEsR0FBRyxFQUFFLEVBQzVCLGNBQWMsR0FBRyxVQUFVLEdBQUcsRUFBRSxFQUNoQyxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLFlBQVksR0FBRyxZQUFZLEdBQUcsY0FBYyxHQUFHLFVBQVUsQ0FBQyxFQUM5RyxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLFlBQVksR0FBRyxZQUFZLEdBQUcsY0FBYyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUM5RyxRQUFRLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLGNBQWMsQ0FBQyxFQUM5RixRQUFRLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxFQUFFLEdBQUcsVUFBVSxD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QyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZFLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNSLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE9BQU8sRUFDNUIsVUFBVSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNyQyxNQUFNLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUSxVQUFVLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUNwRSxDQUFDO1lBQ0QsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2IsTUFBTSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7Z0JBQ25FLE1BQU0sQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDO1lBQ2pDLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQyxDQUFBO0FBQ0wsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUFggfSBmcm9tICcuLi9jb25zdCc7XHJcbmltcG9ydCB7IElJdGVtVHJhbnNmb3JtYXRpb24gfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgSVJlbmRlclZpcnR1YWxMaXN0SXRlbUNvbmZpZywgSVJlbmRlclZpcnR1YWxMaXN0SXRlbU1lYXN1cmVzIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgQ29sb3IsIEl0ZW1UcmFuc2Zvcm0gfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5jb25zdCBVTlNFVCA9ICd1bnNldCcsXHJcbiAgICBCX0xJTUlUID0gMC41O1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJRGVja09mQ2FyZHNPcHRpb25zIHtcclxuICAgIC8qKlxyXG4gICAgICogRGVwdGggT2YgRmllbGQuIERlZmF1bHQgdmFsdWUgaXMgYG51bGxgLlxyXG4gICAgICovXHJcbiAgICBkb2Y/OiBudW1iZXI7XHJcbiAgICAvKipcclxuICAgICAqIEZvZyBjb2xvci4gRGVmYXVsdCB2YWx1ZSBpcyBgbnVsbGAuXHJcbiAgICAgKi9cclxuICAgIGZvZ0NvbG9yPzogQ29sb3I7XHJcbiAgICAvKipcclxuICAgICAqIEZvZyB3ZWlnaHQuIERlZmF1bHQgdmFsdWUgaXMgYG51bGxgLlxyXG4gICAgICovXHJcbiAgICBmb2dXZWlnaHQ/OiBudW1iZXI7XHJcbiAgICAvKipcclxuICAgICAqIFNwYWNpbmcgYmV0d2VlbiBpdGVtcy4gRGVmYXVsdCB2YWx1ZSBpcyBgMC41YC5cclxuICAgICAqL1xyXG4gICAgc3BhY2luZ0JldHdlZW5JdGVtcz86IG51bWJlcjtcclxuICAgIC8qKlxyXG4gICAgICogRGVwdGguIERlZmF1bHQgdmFsdWUgaXMgYDAuMTVgLlxyXG4gICAgICovXHJcbiAgICBkZXB0aD86IG51bWJlcjtcclxuICAgIC8qKlxyXG4gICAgICogU2NhbGUuIERlZmF1bHQgdmFsdWUgaXMgYDAuMTVgLlxyXG4gICAgICovXHJcbiAgICBzY2FsZT86IG51bWJlcjtcclxuICAgIC8qKlxyXG4gICAgICogU2NhbGUgWC4gRGVmYXVsdCB2YWx1ZSBpcyBgbnVsbGAuXHJcbiAgICAgKi9cclxuICAgIHNjYWxlWD86IG51bWJlciB8IG51bGw7XHJcbiAgICAvKipcclxuICAgICAqIFNjYWxlIFkuIERlZmF1bHQgdmFsdWUgaXMgYG51bGxgLlxyXG4gICAgICovXHJcbiAgICBzY2FsZVk/OiBudW1iZXIgfCBudWxsO1xyXG4gICAgLyoqXHJcbiAgICAgKiBEZXB0aCBleHBvbmVudC4gRGVmYXVsdCB2YWx1ZSBpcyBgNGAuXHJcbiAgICAgKi9cclxuICAgIGRlcHRoUG93PzogbnVtYmVyO1xyXG4gICAgLyoqXHJcbiAgICAgKiBTaW51c29pZGFsIGRpc3RyaWJ1dGlvbi4gRGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLlxyXG4gICAgICovXHJcbiAgICBzaW5lV2F2ZT86IGJvb2xlYW47XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBkZWNrT2ZDYXJkc1xyXG4gKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vRGpvbm55WC9uZy12aXJ0dWFsLWxpc3QvYmxvYi8xOC54L3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL3RyYW5zZm9ybWF0aW9ucy9kZWNrLW9mLWNhcmRzLnRzXHJcbiAqIEBhdXRob3IgRXZnZW5paSBBbGV4YW5kcm92aWNoIEdyZWJlbm5pa292XHJcbiAqIEBlbWFpbCBkam9ubnl4QGdtYWlsLmNvbVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGRlY2tPZkNhcmRzID0gKG9wdGlvbnM/OiBJRGVja09mQ2FyZHNPcHRpb25zKTogSXRlbVRyYW5zZm9ybSA9PiB7XHJcbiAgICBjb25zdCBkb2YgPSBvcHRpb25zPy5kb2YgPz8gbnVsbCxcclxuICAgICAgICBmb2dDb2xvciA9IG9wdGlvbnM/LmZvZ0NvbG9yID8/IG51bGwsXHJcbiAgICAgICAgZm9nV2VpZ2h0ID0gb3B0aW9ucz8uZm9nV2VpZ2h0ID8/IG51bGwsXHJcbiAgICAgICAgc3BhY2luZ0JldHdlZW5JdGVtcyA9IG9wdGlvbnM/LnNwYWNpbmdCZXR3ZWVuSXRlbXMgPz8gLjUsXHJcbiAgICAgICAgZGVwdGggPSBvcHRpb25zPy5kZXB0aCA/PyAuMTUsXHJcbiAgICAgICAgc2NhbGVWYWx1ZSA9IG9wdGlvbnM/LnNjYWxlID8/IC4xNSxcclxuICAgICAgICBzY2FsZVhWYWx1ZSA9IG9wdGlvbnM/LnNjYWxlWCA/PyBudWxsLFxyXG4gICAgICAgIHNjYWxlWVZhbHVlID0gb3B0aW9ucz8uc2NhbGVZID8/IG51bGwsXHJcbiAgICAgICAgZGVwdGhQb3cgPSBvcHRpb25zPy5kZXB0aFBvdyA/PyA0LFxyXG4gICAgICAgIHNpbmVXYXZlID0gb3B0aW9ucz8uc2luZVdhdmUgPz8gZmFsc2U7XHJcbiAgICByZXR1cm4gKGluZGV4OiBudW1iZXIsIG1lYXN1cmVzOiBJUmVuZGVyVmlydHVhbExpc3RJdGVtTWVhc3VyZXMsXHJcbiAgICAgICAgY29uZmlnOiBJUmVuZGVyVmlydHVhbExpc3RJdGVtQ29uZmlnKTogSUl0ZW1UcmFuc2Zvcm1hdGlvbiA9PiB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0OiBJSXRlbVRyYW5zZm9ybWF0aW9uID0ge1xyXG4gICAgICAgICAgICB4OiAwLFxyXG4gICAgICAgICAgICB5OiAwLFxyXG4gICAgICAgICAgICB6OiAwLFxyXG4gICAgICAgICAgICByb3RhdGlvblg6IDAsXHJcbiAgICAgICAgICAgIHJvdGF0aW9uWTogMCxcclxuICAgICAgICAgICAgcm90YXRpb25aOiAwLFxyXG4gICAgICAgICAgICBzY2FsZVg6IDEsXHJcbiAgICAgICAgICAgIHNjYWxlWTogMSxcclxuICAgICAgICAgICAgc2NhbGVaOiAxLFxyXG4gICAgICAgICAgICBvcGFjaXR5OiAxLFxyXG4gICAgICAgICAgICB6SW5kZXg6IDEsXHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgaXNWZXJ0aWNhbCA9IGNvbmZpZy5pc1ZlcnRpY2FsLFxyXG4gICAgICAgICAgICBib3VuZHNTaXplID0gbWVhc3VyZXMuYm91bmRzU2l6ZSxcclxuICAgICAgICAgICAgc2Nyb2xsU2l6ZSA9IG1lYXN1cmVzLnNjcm9sbFNpemUsXHJcbiAgICAgICAgICAgIGl0ZW1TaXplID0gaXNWZXJ0aWNhbCA/IG1lYXN1cmVzLmhlaWdodCA6IG1lYXN1cmVzLndpZHRoLFxyXG4gICAgICAgICAgICBpdGVtU2l6ZUhhbGYgPSBpdGVtU2l6ZSAqIC41LFxyXG4gICAgICAgICAgICBib3VuZHNTaXplSGFsZiA9IGJvdW5kc1NpemUgKiAuNSxcclxuICAgICAgICAgICAgeHggPSBpc1ZlcnRpY2FsID8gbWVhc3VyZXMueCA6IChtZWFzdXJlcy54ICsgY29uZmlnLmxheW91dE9mZnNldCArIGl0ZW1TaXplSGFsZiAtIGJvdW5kc1NpemVIYWxmIC0gc2Nyb2xsU2l6ZSksXHJcbiAgICAgICAgICAgIHl5ID0gaXNWZXJ0aWNhbCA/IChtZWFzdXJlcy55ICsgY29uZmlnLmxheW91dE9mZnNldCArIGl0ZW1TaXplSGFsZiAtIGJvdW5kc1NpemVIYWxmIC0gc2Nyb2xsU2l6ZSkgOiBtZWFzdXJlcy55LFxyXG4gICAgICAgICAgICBweE9mZnNldCA9IGlzVmVydGljYWwgPyBib3VuZHNTaXplSGFsZiA6IHh4LCBweCA9IGlzVmVydGljYWwgPyAxIDogKHB4T2Zmc2V0IC8gYm91bmRzU2l6ZUhhbGYpLFxyXG4gICAgICAgICAgICBweU9mZnNldCA9IGlzVmVydGljYWwgPyB5eSA6IGJvdW5kc1NpemVIYWxmLCBweSA9IGlzVmVydGljYWwgPyAocHlPZmZzZXQgLyBib3VuZHNTaXplSGFsZikgOiAxO1xyXG5cclxuICAgICAgICBpZiAoY29uZmlnLnNuYXBwZWQgfHwgY29uZmlnLnNuYXBwZWRPdXQpIHtcclxuICAgICAgICAgICAgcmVzdWx0LnggPSBtZWFzdXJlcy54O1xyXG4gICAgICAgICAgICByZXN1bHQueSA9IG1lYXN1cmVzLnk7XHJcbiAgICAgICAgICAgIHJlc3VsdC56SW5kZXggPSBjb25maWcuekluZGV4O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC54ID0gaXNWZXJ0aWNhbCA/IHh4IDogKHNjcm9sbFNpemUgLSBjb25maWcubGF5b3V0T2Zmc2V0ICsgYm91bmRzU2l6ZUhhbGYgLSBpdGVtU2l6ZUhhbGYgKyAoeHggKiBzcGFjaW5nQmV0d2Vlbkl0ZW1zICogKHNpbmVXYXZlID8gTWF0aC5hYnMoTWF0aC5zaW4ocHgpKSA6IDEpKSk7XHJcbiAgICAgICAgICAgIHJlc3VsdC55ID0gaXNWZXJ0aWNhbCA/IChzY3JvbGxTaXplIC0gY29uZmlnLmxheW91dE9mZnNldCArIGJvdW5kc1NpemVIYWxmIC0gaXRlbVNpemVIYWxmICsgKHl5ICogc3BhY2luZ0JldHdlZW5JdGVtcyAqIChzaW5lV2F2ZSA/IE1hdGguYWJzKE1hdGguc2luKHB5KSkgOiAxKSkpIDogeXk7XHJcbiAgICAgICAgICAgIGNvbnN0IHMgPSAoaXNWZXJ0aWNhbCA/IE1hdGguYWJzKHl5KSA6IE1hdGguYWJzKHh4KSkgLyBib3VuZHNTaXplLCBzY2FsZSA9IE1hdGgucG93KDEgLSBzICogc2NhbGVWYWx1ZSwgZGVwdGhQb3cpLFxyXG4gICAgICAgICAgICAgICAgc2NhbGVYID0gc2NhbGVYVmFsdWUgIT09IG51bGwgPyBNYXRoLnBvdygxIC0gcyAqIHNjYWxlWFZhbHVlLCBkZXB0aFBvdykgOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgc2NhbGVZID0gc2NhbGVZVmFsdWUgIT09IG51bGwgPyBNYXRoLnBvdygxIC0gcyAqIHNjYWxlWVZhbHVlLCBkZXB0aFBvdykgOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgZG9mU2NhbGUgPSBNYXRoLnBvdygxIC0gcyAqIGRlcHRoLCBkZXB0aFBvdyk7XHJcbiAgICAgICAgICAgIGlmIChzY2FsZVhWYWx1ZSA9PT0gbnVsbCAmJiBzY2FsZVlWYWx1ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnNjYWxlWCA9IHJlc3VsdC5zY2FsZVkgPSBzY2FsZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5zY2FsZVggPSBzY2FsZVggIT09IG51bGwgPyBzY2FsZVggOiAxO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnNjYWxlWSA9IHNjYWxlWSAhPT0gbnVsbCA/IHNjYWxlWSA6IDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVzdWx0LnpJbmRleCA9IDEwMCAtIE1hdGguZmxvb3IoTWF0aC5hYnMoaXNWZXJ0aWNhbCA/IHB5IDogcHgpICogMTAwKTtcclxuICAgICAgICAgICAgaWYgKCEhZG9mKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBibHVyID0gKHMgKiBkb2YpIC0gQl9MSU1JVCxcclxuICAgICAgICAgICAgICAgICAgICBhY3R1YWxCbHVyID0gYmx1ciA+IDAgPyBibHVyIDogMDtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5maWx0ZXIgPSBhY3R1YWxCbHVyID8gYGJsdXIoJHthY3R1YWxCbHVyfSR7UFh9KWAgOiBVTlNFVDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoISFmb2dDb2xvcikge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0Lm9wYWNpdHkgPSBmb2dXZWlnaHQgPyBNYXRoLnBvdyhkb2ZTY2FsZSwgZm9nV2VpZ2h0KSA6IHNjYWxlO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LmJsZW5kQ29sb3IgPSBmb2dDb2xvcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG59Il19
|