ng-virtual-list 16.12.2 → 16.12.4

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.
Files changed (27) hide show
  1. package/README.md +2 -2
  2. package/esm2022/lib/components/ng-list-item/base/base-virtual-list-item-component.mjs +9 -5
  3. package/esm2022/lib/components/ng-list-item/const/index.mjs +2 -1
  4. package/esm2022/lib/components/ng-list-item/ng-virtual-list-item.component.mjs +14 -8
  5. package/esm2022/lib/components/ng-prerender-container/components/ng-prerender-list-item/ng-prerender-list-item.component.mjs +3 -3
  6. package/esm2022/lib/components/ng-scroll-view/ng-scroll-view.component.mjs +20 -14
  7. package/esm2022/lib/components/ng-scroller/ng-scroller.component.mjs +6 -2
  8. package/esm2022/lib/const/index.mjs +6 -3
  9. package/esm2022/lib/core/track-box.mjs +31 -9
  10. package/esm2022/lib/directives/virtual-click/virtual-click.directive.mjs +35 -16
  11. package/esm2022/lib/models/display-object-config.model.mjs +1 -1
  12. package/esm2022/lib/ng-virtual-list.component.mjs +43 -11
  13. package/esm2022/lib/ng-virtual-list.service.mjs +31 -2
  14. package/esm2022/lib/utils/animator/animator.mjs +39 -14
  15. package/fesm2022/ng-virtual-list.mjs +222 -73
  16. package/fesm2022/ng-virtual-list.mjs.map +1 -1
  17. package/lib/components/ng-list-item/base/base-virtual-list-item-component.d.ts +1 -1
  18. package/lib/components/ng-list-item/ng-virtual-list-item.component.d.ts +3 -1
  19. package/lib/components/ng-scroll-view/ng-scroll-view.component.d.ts +5 -2
  20. package/lib/components/ng-scroller/ng-scroller.component.d.ts +1 -1
  21. package/lib/const/index.d.ts +3 -1
  22. package/lib/directives/virtual-click/virtual-click.directive.d.ts +11 -6
  23. package/lib/models/display-object-config.model.d.ts +4 -0
  24. package/lib/ng-virtual-list.component.d.ts +2 -1
  25. package/lib/ng-virtual-list.service.d.ts +13 -0
  26. package/lib/utils/animator/animator.d.ts +11 -2
  27. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  import { Injectable } from '@angular/core';
2
2
  import { BehaviorSubject } from 'rxjs/internal/BehaviorSubject';
3
- import { Subject, takeUntil, tap } from 'rxjs';
3
+ import { combineLatest, distinctUntilChanged, Subject, takeUntil, tap } from 'rxjs';
4
4
  import { TrackBoxEvents } from './core/events';
5
5
  import { FocusAlignments, TextDirections } from './enums';
6
6
  import { SelectingModesTypes } from './enums/selecting-modes-types';
@@ -99,6 +99,31 @@ export class NgVirtualListService {
99
99
  this._langTextDir = v;
100
100
  this._$langTextDir.next(v);
101
101
  }
102
+ _$grabbing = new BehaviorSubject(false);
103
+ $grabbing = this._$grabbing.asObservable();
104
+ get grabbing() { return this._$grabbing.getValue(); }
105
+ _grabbing = false;
106
+ set grabbing(v) {
107
+ if (this._grabbing === v) {
108
+ return;
109
+ }
110
+ this._grabbing = v;
111
+ this._$grabbing.next(v);
112
+ }
113
+ _$clickPressed = new BehaviorSubject(false);
114
+ $clickPressed = this._$clickPressed.asObservable();
115
+ get clickPressed() { return this._$clickPressed.getValue(); }
116
+ _clickPressed = false;
117
+ set clickPressed(v) {
118
+ if (this._clickPressed === v) {
119
+ return;
120
+ }
121
+ this._clickPressed = v;
122
+ this._$clickPressed.next(v);
123
+ }
124
+ _$isGrabbing = new BehaviorSubject(false);
125
+ $isGrabbing = this._$isGrabbing.asObservable();
126
+ get isGrabbing() { return this._$isGrabbing.getValue(); }
102
127
  get scrollBarSize() { return this._$scrollBarSize.getValue(); }
103
128
  _scrollBarSize = 0;
104
129
  set scrollBarSize(v) {
@@ -142,6 +167,10 @@ export class NgVirtualListService {
142
167
  }
143
168
  get collapsedIds() { return this._$collapsedIds.getValue(); }
144
169
  constructor() {
170
+ const $grabbing = this.$grabbing.pipe(takeUntil(this._$unsubscribe), distinctUntilChanged()), $clickPressed = this.$clickPressed.pipe(takeUntil(this._$unsubscribe), distinctUntilChanged());
171
+ combineLatest([$grabbing, $clickPressed]).pipe(takeUntil(this._$unsubscribe), tap(([grabbing, clickPressed]) => {
172
+ this._$isGrabbing.next(grabbing && !clickPressed);
173
+ })).subscribe();
145
174
  this._$selectingMode.pipe(takeUntil(this._$unsubscribe), tap(v => {
146
175
  switch (v) {
147
176
  case SelectingModesTypes.SELECT: {
@@ -428,4 +457,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
428
457
  providedIn: 'root'
429
458
  }]
430
459
  }], ctorParameters: function () { return []; } });
431
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctdmlydHVhbC1saXN0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9uZy12aXJ0dWFsLWxpc3Quc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUkvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUUxRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNwRSxPQUFPLEVBQ0wsYUFBYSxFQUFFLGdCQUFnQixFQUFFLHdCQUF3QixFQUFFLHNCQUFzQixFQUFFLHlCQUF5QixFQUM1RyxpQkFBaUIsRUFBRSx1QkFBdUIsRUFBRSxvQkFBb0IsRUFBRSw2QkFBNkIsRUFBRSxjQUFjLEVBQy9HLHNCQUFzQixHQUN2QixNQUFNLFNBQVMsQ0FBQztBQUVqQixPQUFPLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRTlFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxVQUFVLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7QUFHdEU7Ozs7Ozs7R0FPRztBQUlILE1BQU0sT0FBTyxvQkFBb0I7SUFDckIsYUFBYSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFFdEMsR0FBRyxHQUFXLENBQUMsQ0FBQztJQUN4QixJQUFJLEVBQUUsS0FBSyxPQUFPLElB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QUM7SUFFRDs7UUFFSTtJQUNKLFFBQVEsQ0FBQyxFQUFNLEVBQUUsS0FBMEIsSUFBSSxFQUFFLFVBQWlDLElBQUk7UUFDcEYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsYUFBYSxDQUFDLE9BQXdCO1FBQ3BDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7T0FFRztJQUNILFdBQVcsQ0FBQyxPQUF3QjtRQUNsQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDL0I7SUFDSCxDQUFDO3dHQTVkVSxvQkFBb0I7NEdBQXBCLG9CQUFvQixjQUZuQixNQUFNOzs0RkFFUCxvQkFBb0I7a0JBSGhDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzL2ludGVybmFsL0JlaGF2aW9yU3ViamVjdCc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFRyYWNrQm94IH0gZnJvbSAnLi9jb3JlL3RyYWNrLWJveCc7XHJcbmltcG9ydCB7IFRyYWNrQm94RXZlbnRzIH0gZnJvbSAnLi9jb3JlL2V2ZW50cyc7XHJcbmltcG9ydCB7IElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW0sIElWaXJ0dWFsTGlzdENvbGxlY3Rpb24sIElWaXJ0dWFsTGlzdEl0ZW0sIElWaXJ0dWFsTGlzdEl0ZW1Db25maWdNYXAgfSBmcm9tICcuL21vZGVscyc7XHJcbmltcG9ydCB7IElBbmltYXRpb25QYXJhbXMsIElSZWN0LCBJU2Nyb2xsT3B0aW9ucywgSVNpemUgfSBmcm9tICcuL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBJUmVuZGVyVmlydHVhbExpc3RDb2xsZWN0aW9uIH0gZnJvbSAnLi9tb2RlbHMvcmVuZGVyLWNvbGxlY3Rpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBGb2N1c0FsaWdubWVudHMsIFRleHREaXJlY3Rpb25zIH0gZnJvbSAnLi9lbnVtcyc7XHJcbmltcG9ydCB7IFRleHREaXJlY3Rpb24gfSBmcm9tICcuL3R5cGVzJztcclxuaW1wb3J0IHsgU2VsZWN0aW5nTW9kZXNUeXBlcyB9IGZyb20gJy4vZW51bXMvc2VsZWN0aW5nLW1vZGVzLXR5cGVzJztcclxuaW1wb3J0IHtcclxuICBCRUhBVklPUl9BVVRPLCBCRUhBVklPUl9JTlNUQU5ULCBERUZBVUxUX0FOSU1BVElPTl9QQVJBTVMsIERFRkFVTFRfQ0xJQ0tfRElTVEFOQ0UsIERFRkFVTFRfQ09MTEFQU0VfQllfQ0xJQ0ssXHJcbiAgREVGQVVMVF9JVEVNX1NJWkUsIERFRkFVTFRfU0VMRUNUX0JZX0NMSUNLLCBERUZBVUxUX1NOQVBfVE9fSVRFTSwgREVGQVVMVF9aSU5ERVhfV0hFTl9TRUxFQ1RJTkcsIElURU1fQ09OVEFJTkVSLFxyXG4gIFRSQUNLX0JZX1BST1BFUlRZX05BTUUsXHJcbn0gZnJvbSAnLi9jb25zdCc7XHJcbmltcG9ydCB7IEZvY3VzQWxpZ25tZW50LCBJZCB9IGZyb20gJy4vdHlwZXMnO1xyXG5pbXBvcnQgeyBnZXRMaXN0RWxlbWVudHMsIE5HVkxfSU5ERVggfSBmcm9tICcuL2NvbXBvbmVudHMvbmctbGlzdC1pdGVtL3V0aWxzJztcclxuaW1wb3J0IHsgRm9jdXNJdGVtUGFyYW1zIH0gZnJvbSAnLi90eXBlcy9mb2N1cy1pdGVtLXBhcmFtcyc7XHJcbmltcG9ydCB7IHZhbGlkYXRlRm9jdXNBbGlnbm1lbnQsIHZhbGlkYXRlSWQgfSBmcm9tICcuL3V0aWxzL2xpc3QtdmFsaWRhdG9ycyc7XHJcbmltcG9ydCB7IGdldFNlbGVjdG9yQnlJdGVtSWQgfSBmcm9tICcuL3V0aWxzL2dldC1zZWxlY3Rvci1ieS1pdGVtLWlkJztcclxuaW1wb3J0IHsgSVNjcm9sbFRvUGFyYW1zIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3Njcm9sbC10by1wYXJhbXMnO1xyXG5cclxuLyoqXHJcbiAqIE5nVmlydHVhbExpc3RTZXJ2aWNlXHJcbiAqIE1heGltdW0gcGVyZm9ybWFuY2UgZm9yIGV4dHJlbWVseSBsYXJnZSBsaXN0cy5cclxuICogSXQgaXMgYmFzZWQgb24gYWxnb3JpdGhtcyBmb3IgdmlydHVhbGl6YXRpb24gb2Ygc2NyZWVuIG9iamVjdHMuXHJcbiAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9Eam9ubnlYL25nLXZpcnR1YWwtbGlzdC9ibG9iLzE2LngvcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvbmctdmlydHVhbC1saXN0LnNlcnZpY2UudHNcclxuICogQGF1dGhvciBFdmdlbmlpIEFsZXhhbmRyb3ZpY2ggR3JlYmVubmlrb3ZcclxuICogQGVtYWlsIGRqb25ueXhAZ21haWwuY29tXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ1ZpcnR1YWxMaXN0U2VydmljZSB7XHJcbiAgcHJvdGVjdGVkIF8kdW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICBwcml2YXRlIF9pZDogbnVtYmVyID0gMDtcclxuICBnZXQgaWQoKSB7IHJldHVybiB0aGlzLl9pZDsgfVxyXG5cclxuICBwcml2YXRlIF9uZXh0Q29tcG9uZW50SWQ6IG51bWJlciA9IDA7XHJcblxyXG4gIHByaXZhdGUgXyR2aXJ0dWFsQ2xpY2sgPSBuZXcgU3ViamVjdDxJUmVuZGVyVmlydHVhbExpc3RJdGVtPGFueT4gfCBudWxsPigpO1xyXG4gICR2aXJ0dWFsQ2xpY2sgPSB0aGlzLl8kdmlydHVhbENsaWNrLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kc2VsZWN0ZWRJZHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFycmF5PElkPiB8IElkIHwgbnVsbD4obnVsbCk7XHJcbiAgJHNlbGVjdGVkSWRzID0gdGhpcy5fJHNlbGVjdGVkSWRzLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kY29sbGFwc2VkSWRzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBcnJheTxJZD4+KFtdKTtcclxuICAkY29sbGFwc2VkSWRzID0gdGhpcy5fJGNvbGxhcHNlZElkcy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHNlbGVjdGluZ01vZGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNlbGVjdGluZ01vZGVzVHlwZXM+KDApO1xyXG4gICRzZWxlY3RpbmdNb2RlID0gdGhpcy5fJHNlbGVjdGluZ01vZGUuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHNldCBzZWxlY3RpbmdNb2RlKHY6IFNlbGVjdGluZ01vZGVzVHlwZXMpIHtcclxuICAgIHRoaXMuXyRzZWxlY3RpbmdNb2RlLm5leHQodik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF8kZm9jdXNlZElkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJZCB8IG51bGw+KG51bGwpO1xyXG4gICRmb2N1c2VkSWQgPSB0aGlzLl8kZm9jdXNlZElkLmFzT2JzZXJ2YWJsZSgpO1xyXG4gIHNldCBmb2N1c2VkSWQodjogSWQgfCBudWxsKSB7XHJcbiAgICBpZiAodGhpcy5fJGZvY3VzZWRJZC5nZXRWYWx1ZSgpICE9PSB2KSB7XHJcbiAgICAgIHRoaXMuXyRmb2N1c2VkSWQubmV4dCh2KTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IGZvY3VzZWRJZCgpIHsgcmV0dXJuIHRoaXMuXyRmb2N1c2VkSWQuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kZm9jdXNJdGVtID0gbmV3IFN1YmplY3Q8Rm9jdXNJdGVtUGFyYW1zPigpO1xyXG4gIHJlYWRvbmx5ICRmb2N1c0l0ZW0gPSB0aGlzLl8kZm9jdXNJdGVtLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsVG8gPSBuZXcgU3ViamVjdDxJU2Nyb2xsVG9QYXJhbXMgfCB1bmRlZmluZWQ+KCk7XHJcbiAgcmVhZG9ubHkgJHNjcm9sbFRvID0gdGhpcy5fJHNjcm9sbFRvLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsVG9TdGFydCA9IG5ldyBTdWJqZWN0PElTY3JvbGxPcHRpb25zIHwgdW5kZWZpbmVkPigpO1xyXG4gIHJlYWRvbmx5ICRzY3JvbGxUb1N0YXJ0ID0gdGhpcy5fJHNjcm9sbFRvU3RhcnQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxUb0VuZCA9IG5ldyBTdWJqZWN0PElTY3JvbGxPcHRpb25zIHwgdW5kZWZpbmVkPigpO1xyXG4gIHJlYWRvbmx5ICRzY3JvbGxUb0VuZCA9IHRoaXMuXyRzY3JvbGxUb0VuZC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHRpY2sgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIHJlYWRvbmx5ICR0aWNrID0gdGhpcy5fJHRpY2suYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRjYWNoZVZlcnNpb24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oLTEpO1xyXG4gIHJlYWRvbmx5ICRjYWNoZVZlcnNpb24gPSB0aGlzLl8kY2FjaGVWZXJzaW9uLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICB0cmFja0J5OiBzdHJpbmcgPSBUUkFDS19CWV9QUk9QRVJUWV9OQU1FO1xyXG5cclxuICBsYXN0Rm9jdXNlZEl0ZW1JZDogbnVtYmVyID0gLTE7XHJcblxyXG4gIHNjcm9sbFN0YXJ0T2Zmc2V0OiBudW1iZXIgPSAwO1xyXG5cclxuICBzY3JvbGxFbmRPZmZzZXQ6IG51bWJlciA9IDA7XHJcblxyXG4gIHpJbmRleFdoZW5TZWxlY3Rpbmc6IHN0cmluZyB8IG51bGwgPSBERUZBVUxUX1pJTkRFWF9XSEVOX1NFTEVDVElORztcclxuXHJcbiAgc2VsZWN0QnlDbGljazogYm9vbGVhbiA9IERFRkFVTFRfU0VMRUNUX0JZX0NMSUNLO1xyXG5cclxuICBjb2xsYXBzZUJ5Q2xpY2s6IGJvb2xlYW4gPSBERUZBVUxUX0NPTExBUFNFX0JZX0NMSUNLO1xyXG5cclxuICBkZWZhdWx0SXRlbVZhbHVlOiBJVmlydHVhbExpc3RJdGVtIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIHNuYXBUb0l0ZW06IGJvb2xlYW4gPSBERUZBVUxUX1NOQVBfVE9fSVRFTTtcclxuXHJcbiAgaXNJbmZpbml0eTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBpc1ZlcnRpY2FsOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgZHluYW1pYzogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIGl0ZW1TaXplOiBudW1iZXIgPSBERUZBVUxUX0lURU1fU0laRTtcclxuXHJcbiAgc25hcFNjcm9sbFRvU3RhcnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgc25hcFNjcm9sbFRvRW5kOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGFuaW1hdGlvblBhcmFtczogSUFuaW1hdGlvblBhcmFtcyA9IERFRkFVTFRfQU5JTUFUSU9OX1BBUkFNUztcclxuXHJcbiAgaXNOb25lQ29sbGFwc2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgaXNNdWx0aXBsZUNvbGxhcHNlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGlzQWNjb3JkaW9uQ29sbGFwc2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfdHJhY2tCb3g6IFRyYWNrQm94IHwgdW5kZWZpbmVkO1xyXG5cclxuICBsaXN0RWxlbWVudDogSFRNTERpdkVsZW1lbnQgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgaXRlbXM6IElWaXJ0dWFsTGlzdENvbGxlY3Rpb24gPSBbXTtcclxuXHJcbiAgaXRlbUNvbmZpZ01hcDogSVZpcnR1YWxMaXN0SXRlbUNvbmZpZ01hcCA9IHt9O1xyXG5cclxuICBwcml2YXRlIF8kZGlzcGxheUl0ZW1zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJUmVuZGVyVmlydHVhbExpc3RDb2xsZWN0aW9uPihbXSk7XHJcbiAgcmVhZG9ubHkgJGRpc3BsYXlJdGVtcyA9IHRoaXMuXyRkaXNwbGF5SXRlbXMuYXNPYnNlcnZhYmxlKCk7XHJcbiAgZ2V0IGRpc3BsYXlJdGVtcygpIHsgcmV0dXJuIHRoaXMuXyRkaXNwbGF5SXRlbXMuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF9jb2xsZWN0aW9uOiBJUmVuZGVyVmlydHVhbExpc3RDb2xsZWN0aW9uID0gW107XHJcbiAgc2V0IGNvbGxlY3Rpb24odjogSVJlbmRlclZpcnR1YWxMaXN0Q29sbGVjdGlvbikge1xyXG4gICAgaWYgKHRoaXMuX2NvbGxlY3Rpb24gPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2NvbGxlY3Rpb24gPSB2O1xyXG5cclxuICAgIHRoaXMuXyRkaXNwbGF5SXRlbXMubmV4dCh2KTtcclxuICB9XHJcbiAgZ2V0IGNvbGxlY3Rpb24oKSB7IHJldHVybiB0aGlzLl9jb2xsZWN0aW9uOyB9XHJcblxyXG4gIHByaXZhdGUgXyRsYW5nVGV4dERpciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGV4dERpcmVjdGlvbj4oVGV4dERpcmVjdGlvbnMuTFRSKTtcclxuICByZWFkb25seSAkbGFuZ1RleHREaXIgPSB0aGlzLl8kbGFuZ1RleHREaXIuYXNPYnNlcnZhYmxlKCk7XHJcbiAgZ2V0IGxhbmdUZXh0RGlyKCkgeyByZXR1cm4gdGhpcy5fJGxhbmdUZXh0RGlyLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfbGFuZ1RleHREaXI6IFRleHREaXJlY3Rpb24gPSBUZXh0RGlyZWN0aW9ucy5MVFI7XHJcbiAgc2V0IGxhbmdUZXh0RGlyKHY6IFRleHREaXJlY3Rpb24pIHtcclxuICAgIGlmICh0aGlzLl9sYW5nVGV4dERpciA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fbGFuZ1RleHREaXIgPSB2O1xyXG5cclxuICAgIHRoaXMuXyRsYW5nVGV4dERpci5uZXh0KHYpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNjcm9sbEJhclNpemUoKSB7IHJldHVybiB0aGlzLl8kc2Nyb2xsQmFyU2l6ZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgX3Njcm9sbEJhclNpemU6IG51bWJlciA9IDA7XHJcbiAgc2V0IHNjcm9sbEJhclNpemUodjogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5fc2Nyb2xsQmFyU2l6ZSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fc2Nyb2xsQmFyU2l6ZSA9IHY7XHJcblxyXG4gICAgdGhpcy5fJHNjcm9sbEJhclNpemUubmV4dCh2KTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfJHNjcm9sbEJhclNpemUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4odGhpcy5fc2Nyb2xsQmFyU2l6ZSk7XHJcbiAgcmVhZG9ubHkgJHNjcm9sbEJhclNpemUgPSB0aGlzLl8kc2Nyb2xsQmFyU2l6ZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGludGVyc2VjdGlvbkVsZW1lbnRCeVNuYXBUb0l0ZW1BbGlnbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SWQgfCBudWxsPihudWxsKTtcclxuICByZWFkb25seSAkaW50ZXJzZWN0aW9uRWxlbWVudEJ5U25hcFRvSXRlbUFsaWduID0gdGhpcy5fJGludGVyc2VjdGlvbkVsZW1lbnRCeVNuYXBUb0l0ZW1BbGlnbi5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGNsaWNrRGlzdGFuY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oREVGQVVMVF9DTElDS19ESVNUQU5DRSk7XHJcbiAgcmVhZG9ubHkgJGNsaWNrRGlzdGFuY2UgPSB0aGlzLl8kY2xpY2tEaXN0YW5jZS5hc09ic2VydmFibGUoKTtcclxuICBnZXQgY2xpY2tEaXN0YW5jZSgpIHsgcmV0dXJuIHRoaXMuXyRjbGlja0Rpc3RhbmNlLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfY2xpY2tEaXN0YW5jZTogbnVtYmVyID0gREVGQVVMVF9DTElDS19ESVNUQU5DRTtcclxuICBzZXQgY2xpY2tEaXN0YW5jZSh2OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLl9jbGlja0Rpc3RhbmNlID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9jbGlja0Rpc3RhbmNlID0gdjtcclxuXHJcbiAgICB0aGlzLl8kY2xpY2tEaXN0YW5jZS5uZXh0KHYpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfb25UaWNrSGFuZGxlciA9ICgpID0+IHtcclxuICAgIHRoaXMuXyR0aWNrLm5leHQoKTtcclxuICB9O1xyXG5cclxuICBwcml2YXRlIF9vblRyYWNrQm94Q2hhbmdlSGFuZGxlciA9ICh2OiBudW1iZXIpID0+IHtcclxuICAgIHRoaXMuXyRjYWNoZVZlcnNpb24ubmV4dCh2KTtcclxuICB9O1xyXG5cclxuICBzZXQgc2VsZWN0ZWRJZHMoaWRzOiBBcnJheTxJZD4gfCBJZCB8IG51bGwpIHtcclxuICAgIGlmIChKU09OLnN0cmluZ2lmeSh0aGlzLl8kc2VsZWN0ZWRJZHMuZ2V0VmFsdWUoKSkgIT09IEpTT04uc3RyaW5naWZ5KGlkcykpIHtcclxuICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQoaWRzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBzZWxlY3RlZElkcygpIHsgcmV0dXJuIHRoaXMuXyRzZWxlY3RlZElkcy5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHNldCBjb2xsYXBzZWRJZHMoaWRzOiBBcnJheTxJZD4pIHtcclxuICAgIGlmIChKU09OLnN0cmluZ2lmeSh0aGlzLl8kY29sbGFwc2VkSWRzLmdldFZhbHVlKCkpICE9PSBKU09OLnN0cmluZ2lmeShpZHMpKSB7XHJcbiAgICAgIHRoaXMuXyRjb2xsYXBzZWRJZHMubmV4dChpZHMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGNvbGxhcHNlZElkcygpIHsgcmV0dXJuIHRoaXMuXyRjb2xsYXBzZWRJZHMuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMuXyRzZWxlY3RpbmdNb2RlLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgc3dpdGNoICh2KSB7XHJcbiAgICAgICAgICBjYXNlIFNlbGVjdGluZ01vZGVzVHlwZXMuU0VMRUNUOiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnIgPSB0aGlzLl8kc2VsZWN0ZWRJZHMuZ2V0VmFsdWUoKTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjdXJyICE9PSAnbnVtYmVyJyAmJiB0eXBlb2YgY3VyciAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICB0aGlzLl8kc2VsZWN0ZWRJZHMubmV4dChudWxsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNhc2UgU2VsZWN0aW5nTW9kZXNUeXBlcy5NVUxUSV9TRUxFQ1Q6IHtcclxuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMuXyRzZWxlY3RlZElkcy5nZXRWYWx1ZSgpKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KFtdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNhc2UgU2VsZWN0aW5nTW9kZXNUeXBlcy5OT05FOlxyXG4gICAgICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgICAgICB0aGlzLl8kc2VsZWN0ZWRJZHMubmV4dChudWxsKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICB2aXJ0dWFsQ2xpY2soZGF0YTogSVJlbmRlclZpcnR1YWxMaXN0SXRlbSB8IG51bGwpIHtcclxuICAgIHRoaXMuXyR2aXJ0dWFsQ2xpY2submV4dChkYXRhKTtcclxuICAgIGlmICh0aGlzLmNvbGxhcHNlQnlDbGljaykge1xyXG4gICAgICBjb25zdCB0cmFja0J5ID0gdGhpcy50cmFja0J5LCBpZCA9IChkYXRhIGFzIGFueSk/Llt0cmFja0J5XSA/PyBudWxsO1xyXG4gICAgICB0aGlzLmNvbGxhcHNlKGlkKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNlbGVjdEJ5Q2xpY2spIHtcclxuICAgICAgY29uc3QgdHJhY2tCeSA9IHRoaXMudHJhY2tCeSwgaWQgPSAoZGF0YSBhcyBhbnkpPy5bdHJhY2tCeV0gPz8gbnVsbDtcclxuICAgICAgdGhpcy5zZWxlY3QoaWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlKGltbWVkaWF0ZWx5OiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIHRoaXMuX3RyYWNrQm94Py5jaGFuZ2VzKGltbWVkaWF0ZWx5LCBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEl0ZW1Db25maWcoaWQ6IElkKSB7XHJcbiAgICBjb25zdCBkaXNwbGF5SXRlbXMgPSB0aGlzLmRpc3BsYXlJdGVtcztcclxuICAgIGlmICghIWRpc3BsYXlJdGVtcykge1xyXG4gICAgICBjb25zdCB0cmFja0J5ID0gdGhpcy50cmFja0J5O1xyXG4gICAgICByZXR1cm4gZGlzcGxheUl0ZW1zLmZpbmQoZGF0YSA9PiB7XHJcbiAgICAgICAgY29uc3QgX2lkID0gKGRhdGEgYXMgYW55KT8uW3RyYWNrQnldID8/IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIF9pZCA9PT0gaWQ7XHJcbiAgICAgIH0pPy5jb25maWcgPz8gbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VsZWN0cyBhIGxpc3QgaXRlbVxyXG4gICAqIEBwYXJhbSBpZCBcclxuICAgKiBAcGFyYW0gc2VsZWN0ZWQgLSBJZiB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLCB0aGVuIHRoZSB0b2dnbGUgbWV0aG9kIGlzIGV4ZWN1dGVkLCBpZiBmYWxzZSBvciB0cnVlLCB0aGVuIHRoZSBzZWxlY3Rpb24vZGVzZWxlY3Rpb24gaXMgcGVyZm9ybWVkLlxyXG4gICAqL1xyXG4gIHNlbGVjdChpZDogSWQsIHNlbGVjdGVkPzogYm9vbGVhbikge1xyXG4gICAgdmFsaWRhdGVJZChpZCk7XHJcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmdldEl0ZW1Db25maWcoaWQpO1xyXG4gICAgaWYgKCghIWNvbmZpZyAmJiBjb25maWcuc2VsZWN0YWJsZSkpIHtcclxuICAgICAgc3dpdGNoICh0aGlzLl8kc2VsZWN0aW5nTW9kZS5nZXRWYWx1ZSgpKSB7XHJcbiAgICAgICAgY2FzZSBTZWxlY3RpbmdNb2Rlc1R5cGVzLlNFTEVDVDoge1xyXG4gICAgICAgICAgY29uc3QgY3VyciA9IHRoaXMuXyRzZWxlY3RlZElkcy5nZXRWYWx1ZSgpIGFzIChJZCB8IHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICBpZiAoc2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLl8kc2VsZWN0ZWRJZHMubmV4dChjdXJyICE9PSBpZCA/IGlkIDogbnVsbCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl8kc2VsZWN0ZWRJZHMubmV4dChzZWxlY3RlZCA/IGlkIDogbnVsbCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FzZSBTZWxlY3RpbmdNb2Rlc1R5cGVzLk1VTFRJX1NFTEVDVDoge1xyXG4gICAgICAgICAgY29uc3QgY3VyciA9IFsuLi4odGhpcy5fJHNlbGVjdGVkSWRzLmdldFZhbHVlKCkgfHwgW10pIGFzIEFycmF5PElkPl0sXHJcbiAgICAgICAgICAgIGluZGV4ID0gY3Vyci5pbmRleE9mKGlkKTtcclxuICAgICAgICAgIGlmIChzZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgY3Vyci5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KGN1cnIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KFsuLi5jdXJyLCBpZF0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkKSB7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQoY3Vycik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQoWy4uLmN1cnIsIGlkXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgY3Vyci5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KGN1cnIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KGN1cnIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FzZSBTZWxlY3RpbmdNb2Rlc1R5cGVzLk5PTkU6XHJcbiAgICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQobnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgICogQ29sbGFwc2UgbGlzdCBpdGVtc1xyXG4gICAgKiBAcGFyYW0gZGF0YSBcclxuICAgICogQHBhcmFtIGNvbGxhcHNlZCAtIElmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQsIHRoZW4gdGhlIHRvZ2dsZSBtZXRob2QgaXMgZXhlY3V0ZWQsIGlmIGZhbHNlIG9yIHRydWUsIHRoZW4gdGhlIGNvbGxhcHNlL2V4cGFuZCBpcyBwZXJmb3JtZWQuXHJcbiAgICAqL1xyXG4gIGNvbGxhcHNlKGlkOiBJZCwgY29sbGFwc2VkPzogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuaXNOb25lQ29sbGFwc2UpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlSWQoaWQpO1xyXG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5nZXRJdGVtQ29uZmlnKGlkKTtcclxuICAgIGlmICgoISFjb25maWcgJiYgY29uZmlnLmNvbGxhcHNhYmxlKSkge1xyXG4gICAgICBjb25zdCBhbGxHcm91cHM6IEFycmF5PElkPiA9IFtdO1xyXG4gICAgICBpZiAodGhpcy5pc0FjY29yZGlvbkNvbGxhcHNlKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLml0ZW1zLCBpdGVtQ29uZmlnTWFwID0gdGhpcy5pdGVtQ29uZmlnTWFwLCB0cmFja0J5ID0gdGhpcy50cmFja0J5O1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gaXRlbXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpdGVtID0gaXRlbXNbaV0sIGlkID0gaXRlbVt0cmFja0J5XSwgY29sbGFwc2FibGUgPSBpdGVtQ29uZmlnTWFwPy5baWRdPy5jb2xsYXBzYWJsZSA9PT0gdHJ1ZTtcclxuICAgICAgICAgIGlmICghY29sbGFwc2FibGUpIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBhbGxHcm91cHMucHVzaChpZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBjdXJyID0gdGhpcy5pc0FjY29yZGlvbkNvbGxhcHNlID8gYWxsR3JvdXBzIDogWy4uLih0aGlzLl8kY29sbGFwc2VkSWRzLmdldFZhbHVlKCkgfHwgW10pIGFzIEFycmF5PElkPl0sXHJcbiAgICAgICAgaW5kZXggPSBjdXJyLmluZGV4T2YoaWQpO1xyXG4gICAgICBpZiAoIWNvbGxhcHNlZCkge1xyXG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICBjdXJyLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICB0aGlzLl8kY29sbGFwc2VkSWRzLm5leHQoY3Vycik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuXyRjb2xsYXBzZWRJZHMubmV4dChbLi4uY3VyciwgaWRdKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoY29sbGFwc2VkKSB7XHJcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgIHRoaXMuXyRjb2xsYXBzZWRJZHMubmV4dChjdXJyKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5fJGNvbGxhcHNlZElkcy5uZXh0KFsuLi5jdXJyLCBpZF0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgY3Vyci5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgdGhpcy5fJGNvbGxhcHNlZElkcy5uZXh0KGN1cnIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl8kY29sbGFwc2VkSWRzLm5leHQoY3Vycik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5pc0FjY29yZGlvbkNvbGxhcHNlKSB7XHJcbiAgICAgICAgdGhpcy5fJHNjcm9sbFRvLm5leHQoe1xyXG4gICAgICAgICAgaWQsIGNiOiBudWxsLCBvcHRpb25zOiB7XHJcbiAgICAgICAgICAgIGRlbGF5OiAxMDAsIGZvY3VzZWQ6IHRydWUsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuXyRzY3JvbGxUby5uZXh0KHtcclxuICAgICAgICAgIGlkLCBjYjogbnVsbCwgb3B0aW9uczoge1xyXG4gICAgICAgICAgICBkZWxheTogMTAwLCBmb2N1c2VkOiB0cnVlLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0Rm9jdXNlZEVsZW1lbnRCeUlkKGlkOiBJZCkge1xyXG4gICAgY29uc3QgZWwgPSB0aGlzLmxpc3RFbGVtZW50Py5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PihnZXRTZWxlY3RvckJ5SXRlbUlkKGlkKSk7XHJcbiAgICBpZiAoISFlbCkge1xyXG4gICAgICBjb25zdCBmb2N1c2VkRWwgPSBlbC5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PihgLiR7SVRFTV9DT05UQUlORVJ9YCk7XHJcbiAgICAgIGlmICghIWZvY3VzZWRFbCkge1xyXG4gICAgICAgIHJldHVybiBmb2N1c2VkRWw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgYm91bmRzIG9mIGFuIGVsZW1lbnQgd2l0aCBhIGdpdmVuIGlkXHJcbiAgICovXHJcbiAgZ2V0SXRlbUJvdW5kcyhpZDogSWQpOiBJU2l6ZSB8IG51bGwge1xyXG4gICAgdmFsaWRhdGVJZChpZCk7XHJcbiAgICByZXR1cm4gdGhpcy5fdHJhY2tCb3g/LmdldEl0ZW1Cb3VuZHMoaWQpID8/IG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGb2N1cyBhbiBsaXN0IGl0ZW0gYnkgYSBnaXZlbiBpZC5cclxuICAgKi9cclxuICBmb2N1c0J5SWQoaWQ6IElkLCBhbGlnbjogRm9jdXNBbGlnbm1lbnQgPSBGb2N1c0FsaWdubWVudHMuTk9ORSwgc2Nyb2xsQmVoYXZpb3I6IFNjcm9sbEJlaGF2aW9yID0gXCJhdXRvXCIpIHtcclxuICAgIHZhbGlkYXRlSWQoaWQpO1xyXG4gICAgdmFsaWRhdGVGb2N1c0FsaWdubWVudChhbGlnbik7XHJcbiAgICBjb25zdCBlbCA9IHRoaXMuZ2V0Rm9jdXNlZEVsZW1lbnRCeUlkKGlkKTtcclxuICAgIGlmICghIWVsKSB7XHJcbiAgICAgIHRoaXMuZm9jdXMoZWwsIGFsaWduLCBzY3JvbGxCZWhhdmlvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmb2N1cyhlbGVtZW50OiBIVE1MRWxlbWVudCwgYWxpZ246IEZvY3VzQWxpZ25tZW50ID0gRm9jdXNBbGlnbm1lbnRzLkNFTlRFUiwgYmVoYXZpb3I6IFNjcm9sbEJlaGF2aW9yID0gQkVIQVZJT1JfQVVUTyk6IGJvb2xlYW4ge1xyXG4gICAgZWxlbWVudC5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XHJcbiAgICBpZiAoISFlbGVtZW50LnBhcmVudEVsZW1lbnQpIHtcclxuICAgICAgY29uc3QgcG9zaXRpb24gPSBwYXJzZUZsb2F0KGVsZW1lbnQucGFyZW50RWxlbWVudD8uZ2V0QXR0cmlidXRlKCdwb3NpdGlvbicpID8/ICcwJyk7XHJcbiAgICAgIHRoaXMuXyRmb2N1c0l0ZW0ubmV4dCh7IGVsZW1lbnQsIHBvc2l0aW9uLCBhbGlnbiwgYmVoYXZpb3IgfSk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZm9jdXNMaXN0KCkge1xyXG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMubGlzdEVsZW1lbnQ7XHJcbiAgICBpZiAoISFlbGVtZW50KSB7XHJcbiAgICAgIGVsZW1lbnQuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZm9jdXNGaXJzdEVsZW1lbnQoKSB7XHJcbiAgICBjb25zdCBlbGVtZW50cyA9IHRoaXMubGlzdEVsZW1lbnQ/LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTERpdkVsZW1lbnQ+KGdldExpc3RFbGVtZW50cygpKSxcclxuICAgICAgZWxMaXN0ID0gKGVsZW1lbnRzID8gQXJyYXkuZnJvbShlbGVtZW50cykgOiBbXSkuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGluZGV4QSA9IE51bWJlcihhLmdldEF0dHJpYnV0ZShOR1ZMX0lOREVYKSksIGluZGV4QiA9IE51bWJlcihiLmdldEF0dHJpYnV0ZShOR1ZMX0lOREVYKSk7XHJcbiAgICAgICAgaWYgKGluZGV4QSA+IGluZGV4QikgcmV0dXJuIDE7XHJcbiAgICAgICAgaWYgKGluZGV4QSA8IGluZGV4QikgcmV0dXJuIC0xO1xyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgICB9KTtcclxuICAgIGxldCBlbGVtZW50OiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuICAgIGZvciAobGV0IGkgPSAwLCBsID0gZWxMaXN0Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICBjb25zdCBlbCA9IGVsTGlzdFtpXSwgaW5kZXggPSBOdW1iZXIoZWwuZ2V0QXR0cmlidXRlKE5HVkxfSU5ERVgpKTtcclxuICAgICAgaWYgKCEhZWwgJiYgaW5kZXggPiAwKSB7XHJcbiAgICAgICAgZWxlbWVudCA9IGVsO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoISFlbGVtZW50KSB7XHJcbiAgICAgIHRoaXMuZm9jdXMoZWxlbWVudCwgRm9jdXNBbGlnbm1lbnRzLkNFTlRFUiwgQkVIQVZJT1JfSU5TVEFOVCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplKGlkOiBudW1iZXIsIHRyYWNrQm94OiBUcmFja0JveCkge1xyXG4gICAgdGhpcy5faWQgPSBpZDtcclxuICAgIHRoaXMuX3RyYWNrQm94ID0gdHJhY2tCb3g7XHJcbiAgICB0aGlzLl90cmFja0JveC5hZGRFdmVudExpc3RlbmVyKFRyYWNrQm94RXZlbnRzLlRJQ0ssIHRoaXMuX29uVGlja0hhbmRsZXIpO1xyXG4gICAgdGhpcy5fdHJhY2tCb3guYWRkRXZlbnRMaXN0ZW5lcihUcmFja0JveEV2ZW50cy5DSEFOR0UsIHRoaXMuX29uVHJhY2tCb3hDaGFuZ2VIYW5kbGVyKTtcclxuICB9XHJcblxyXG4gIGdlbmVyYXRlQ29tcG9uZW50SWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbmV4dENvbXBvbmVudElkID0gdGhpcy5fbmV4dENvbXBvbmVudElkID09PSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUlxyXG4gICAgICA/IDAgOiB0aGlzLl9uZXh0Q29tcG9uZW50SWQgKyAxO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29tcG9uZW50Qm91bmRzQnlJbnRlcnNlY3Rpb25Qb3NpdGlvbihwb3NpdGlvbjogbnVtYmVyLCBtYXhQb3NpdGlvbjogbnVtYmVyIHwgbnVsbCA9IG51bGwpOiAoSVJlY3QgJiB7IGlkOiBJZCB8IG51bGw7IGlzRmlyc3Q6IGJvb2xlYW47IGlzTGFzdDogYm9vbGVhbjsgfSkgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLl90cmFja0JveD8uZ2V0Q29tcG9uZW50Qm91bmRzQnlJbnRlcnNlY3Rpb25Qb3NpdGlvbihwb3NpdGlvbiwgbWF4UG9zaXRpb24pID8/IG51bGw7XHJcbiAgfVxyXG5cclxuICBzZXRJbnRlcnNlY3Rpb25FbGVtZW50QnlTbmFwVG9JdGVtQWxpZ24oaWQ6IElkIHwgbnVsbCkge1xyXG4gICAgaWYgKHRoaXMuXyRpbnRlcnNlY3Rpb25FbGVtZW50QnlTbmFwVG9JdGVtQWxpZ24uZ2V0VmFsdWUoKSAhPT0gaWQpIHtcclxuICAgICAgdGhpcy5fJGludGVyc2VjdGlvbkVsZW1lbnRCeVNuYXBUb0l0ZW1BbGlnbi5uZXh0KGlkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAgKiBUaGUgbWV0aG9kIHNjcm9sbHMgdGhlIGxpc3QgdG8gdGhlIGVsZW1lbnQgd2l0aCB0aGUgZ2l2ZW4gYGlkYCBhbmQgcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHNjcm9sbGVkIGFyZWEuXHJcbiAgICAqL1xyXG4gIHNjcm9sbFRvKGlkOiBJZCwgY2I6ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsLCBvcHRpb25zOiBJU2Nyb2xsT3B0aW9ucyB8IG51bGwgPSBudWxsKSB7XHJcbiAgICB0aGlzLl8kc2Nyb2xsVG8ubmV4dCh7IGlkLCBjYiwgb3B0aW9ucyB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNjcm9sbHMgdGhlIHNjcm9sbCBhcmVhIHRvIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBjb2xsZWN0aW9uLlxyXG4gICAqL1xyXG4gIHNjcm9sbFRvU3RhcnQob3B0aW9ucz86IElTY3JvbGxPcHRpb25zKSB7XHJcbiAgICB0aGlzLl8kc2Nyb2xsVG9TdGFydC5uZXh0KG9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2Nyb2xscyB0aGUgbGlzdCB0byB0aGUgZW5kIG9mIHRoZSBjb250ZW50IHNpemUuXHJcbiAgICovXHJcbiAgc2Nyb2xsVG9FbmQob3B0aW9ucz86IElTY3JvbGxPcHRpb25zKSB7XHJcbiAgICB0aGlzLl8kc2Nyb2xsVG9FbmQubmV4dChvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fJHVuc3Vic2NyaWJlKSB7XHJcbiAgICAgIHRoaXMuXyR1bnN1YnNjcmliZS5uZXh0KCk7XHJcbiAgICAgIHRoaXMuXyR1bnN1YnNjcmliZS5jb21wbGV0ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
460
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctdmlydHVhbC1saXN0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9uZy12aXJ0dWFsLWxpc3Quc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsYUFBYSxFQUFFLG9CQUFvQixFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXBGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFMUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDcEUsT0FBTyxFQUNMLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSx3QkFBd0IsRUFBRSxzQkFBc0IsRUFBRSx5QkFBeUIsRUFDNUcsaUJBQWlCLEVBQUUsdUJBQXVCLEVBQUUsb0JBQW9CLEVBQUUsNkJBQTZCLEVBQUUsY0FBYyxFQUMvRyxzQkFBc0IsR0FDdkIsTUFBTSxTQUFTLENBQUM7QUFFakIsT0FBTyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUU5RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUNBQWlDLENBQUM7O0FBR3RFOzs7Ozs7O0dBT0c7QUFJSCxNQUFNLE9BQU8sb0JBQW9CO0lBQ3JCLGFBQWEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBRXRDLEdBQUcsR0FBVyxDQUFDLENBQUM7SUFDeEIs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QyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUMvQjtJQUNILENBQUM7d0dBNWdCVSxvQkFBb0I7NEdBQXBCLG9CQUFvQixjQUZuQixNQUFNOzs0RkFFUCxvQkFBb0I7a0JBSGhDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzL2ludGVybmFsL0JlaGF2aW9yU3ViamVjdCc7XHJcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBTdWJqZWN0LCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBUcmFja0JveCB9IGZyb20gJy4vY29yZS90cmFjay1ib3gnO1xyXG5pbXBvcnQgeyBUcmFja0JveEV2ZW50cyB9IGZyb20gJy4vY29yZS9ldmVudHMnO1xyXG5pbXBvcnQgeyBJUmVuZGVyVmlydHVhbExpc3RJdGVtLCBJVmlydHVhbExpc3RDb2xsZWN0aW9uLCBJVmlydHVhbExpc3RJdGVtLCBJVmlydHVhbExpc3RJdGVtQ29uZmlnTWFwIH0gZnJvbSAnLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBJQW5pbWF0aW9uUGFyYW1zLCBJUmVjdCwgSVNjcm9sbE9wdGlvbnMsIElTaXplIH0gZnJvbSAnLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgSVJlbmRlclZpcnR1YWxMaXN0Q29sbGVjdGlvbiB9IGZyb20gJy4vbW9kZWxzL3JlbmRlci1jb2xsZWN0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgRm9jdXNBbGlnbm1lbnRzLCBUZXh0RGlyZWN0aW9ucyB9IGZyb20gJy4vZW51bXMnO1xyXG5pbXBvcnQgeyBUZXh0RGlyZWN0aW9uIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IFNlbGVjdGluZ01vZGVzVHlwZXMgfSBmcm9tICcuL2VudW1zL3NlbGVjdGluZy1tb2Rlcy10eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgQkVIQVZJT1JfQVVUTywgQkVIQVZJT1JfSU5TVEFOVCwgREVGQVVMVF9BTklNQVRJT05fUEFSQU1TLCBERUZBVUxUX0NMSUNLX0RJU1RBTkNFLCBERUZBVUxUX0NPTExBUFNFX0JZX0NMSUNLLFxyXG4gIERFRkFVTFRfSVRFTV9TSVpFLCBERUZBVUxUX1NFTEVDVF9CWV9DTElDSywgREVGQVVMVF9TTkFQX1RPX0lURU0sIERFRkFVTFRfWklOREVYX1dIRU5fU0VMRUNUSU5HLCBJVEVNX0NPTlRBSU5FUixcclxuICBUUkFDS19CWV9QUk9QRVJUWV9OQU1FLFxyXG59IGZyb20gJy4vY29uc3QnO1xyXG5pbXBvcnQgeyBGb2N1c0FsaWdubWVudCwgSWQgfSBmcm9tICcuL3R5cGVzJztcclxuaW1wb3J0IHsgZ2V0TGlzdEVsZW1lbnRzLCBOR1ZMX0lOREVYIH0gZnJvbSAnLi9jb21wb25lbnRzL25nLWxpc3QtaXRlbS91dGlscyc7XHJcbmltcG9ydCB7IEZvY3VzSXRlbVBhcmFtcyB9IGZyb20gJy4vdHlwZXMvZm9jdXMtaXRlbS1wYXJhbXMnO1xyXG5pbXBvcnQgeyB2YWxpZGF0ZUZvY3VzQWxpZ25tZW50LCB2YWxpZGF0ZUlkIH0gZnJvbSAnLi91dGlscy9saXN0LXZhbGlkYXRvcnMnO1xyXG5pbXBvcnQgeyBnZXRTZWxlY3RvckJ5SXRlbUlkIH0gZnJvbSAnLi91dGlscy9nZXQtc2VsZWN0b3ItYnktaXRlbS1pZCc7XHJcbmltcG9ydCB7IElTY3JvbGxUb1BhcmFtcyB9IGZyb20gJy4vaW50ZXJmYWNlcy9zY3JvbGwtdG8tcGFyYW1zJztcclxuXHJcbi8qKlxyXG4gKiBOZ1ZpcnR1YWxMaXN0U2VydmljZVxyXG4gKiBNYXhpbXVtIHBlcmZvcm1hbmNlIGZvciBleHRyZW1lbHkgbGFyZ2UgbGlzdHMuXHJcbiAqIEl0IGlzIGJhc2VkIG9uIGFsZ29yaXRobXMgZm9yIHZpcnR1YWxpemF0aW9uIG9mIHNjcmVlbiBvYmplY3RzLlxyXG4gKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vRGpvbm55WC9uZy12aXJ0dWFsLWxpc3QvYmxvYi8xNi54L3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL25nLXZpcnR1YWwtbGlzdC5zZXJ2aWNlLnRzXHJcbiAqIEBhdXRob3IgRXZnZW5paSBBbGV4YW5kcm92aWNoIEdyZWJlbm5pa292XHJcbiAqIEBlbWFpbCBkam9ubnl4QGdtYWlsLmNvbVxyXG4gKi9cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgTmdWaXJ0dWFsTGlzdFNlcnZpY2Uge1xyXG4gIHByb3RlY3RlZCBfJHVuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgcHJpdmF0ZSBfaWQ6IG51bWJlciA9IDA7XHJcbiAgZ2V0IGlkKCkgeyByZXR1cm4gdGhpcy5faWQ7IH1cclxuXHJcbiAgcHJpdmF0ZSBfbmV4dENvbXBvbmVudElkOiBudW1iZXIgPSAwO1xyXG5cclxuICBwcml2YXRlIF8kdmlydHVhbENsaWNrID0gbmV3IFN1YmplY3Q8SVJlbmRlclZpcnR1YWxMaXN0SXRlbTxhbnk+IHwgbnVsbD4oKTtcclxuICAkdmlydHVhbENsaWNrID0gdGhpcy5fJHZpcnR1YWxDbGljay5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHNlbGVjdGVkSWRzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBcnJheTxJZD4gfCBJZCB8IG51bGw+KG51bGwpO1xyXG4gICRzZWxlY3RlZElkcyA9IHRoaXMuXyRzZWxlY3RlZElkcy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGNvbGxhcHNlZElkcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8SWQ+PihbXSk7XHJcbiAgJGNvbGxhcHNlZElkcyA9IHRoaXMuXyRjb2xsYXBzZWRJZHMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRzZWxlY3RpbmdNb2RlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTZWxlY3RpbmdNb2Rlc1R5cGVzPigwKTtcclxuICAkc2VsZWN0aW5nTW9kZSA9IHRoaXMuXyRzZWxlY3RpbmdNb2RlLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBzZXQgc2VsZWN0aW5nTW9kZSh2OiBTZWxlY3RpbmdNb2Rlc1R5cGVzKSB7XHJcbiAgICB0aGlzLl8kc2VsZWN0aW5nTW9kZS5uZXh0KHYpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfJGZvY3VzZWRJZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SWQgfCBudWxsPihudWxsKTtcclxuICAkZm9jdXNlZElkID0gdGhpcy5fJGZvY3VzZWRJZC5hc09ic2VydmFibGUoKTtcclxuICBzZXQgZm9jdXNlZElkKHY6IElkIHwgbnVsbCkge1xyXG4gICAgaWYgKHRoaXMuXyRmb2N1c2VkSWQuZ2V0VmFsdWUoKSAhPT0gdikge1xyXG4gICAgICB0aGlzLl8kZm9jdXNlZElkLm5leHQodik7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCBmb2N1c2VkSWQoKSB7IHJldHVybiB0aGlzLl8kZm9jdXNlZElkLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGZvY3VzSXRlbSA9IG5ldyBTdWJqZWN0PEZvY3VzSXRlbVBhcmFtcz4oKTtcclxuICByZWFkb25seSAkZm9jdXNJdGVtID0gdGhpcy5fJGZvY3VzSXRlbS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbFRvID0gbmV3IFN1YmplY3Q8SVNjcm9sbFRvUGFyYW1zIHwgdW5kZWZpbmVkPigpO1xyXG4gIHJlYWRvbmx5ICRzY3JvbGxUbyA9IHRoaXMuXyRzY3JvbGxUby5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbFRvU3RhcnQgPSBuZXcgU3ViamVjdDxJU2Nyb2xsT3B0aW9ucyB8IHVuZGVmaW5lZD4oKTtcclxuICByZWFkb25seSAkc2Nyb2xsVG9TdGFydCA9IHRoaXMuXyRzY3JvbGxUb1N0YXJ0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsVG9FbmQgPSBuZXcgU3ViamVjdDxJU2Nyb2xsT3B0aW9ucyB8IHVuZGVmaW5lZD4oKTtcclxuICByZWFkb25seSAkc2Nyb2xsVG9FbmQgPSB0aGlzLl8kc2Nyb2xsVG9FbmQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyR0aWNrID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICByZWFkb25seSAkdGljayA9IHRoaXMuXyR0aWNrLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kY2FjaGVWZXJzaW9uID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KC0xKTtcclxuICByZWFkb25seSAkY2FjaGVWZXJzaW9uID0gdGhpcy5fJGNhY2hlVmVyc2lvbi5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgdHJhY2tCeTogc3RyaW5nID0gVFJBQ0tfQllfUFJPUEVSVFlfTkFNRTtcclxuXHJcbiAgbGFzdEZvY3VzZWRJdGVtSWQ6IG51bWJlciA9IC0xO1xyXG5cclxuICBzY3JvbGxTdGFydE9mZnNldDogbnVtYmVyID0gMDtcclxuXHJcbiAgc2Nyb2xsRW5kT2Zmc2V0OiBudW1iZXIgPSAwO1xyXG5cclxuICB6SW5kZXhXaGVuU2VsZWN0aW5nOiBzdHJpbmcgfCBudWxsID0gREVGQVVMVF9aSU5ERVhfV0hFTl9TRUxFQ1RJTkc7XHJcblxyXG4gIHNlbGVjdEJ5Q2xpY2s6IGJvb2xlYW4gPSBERUZBVUxUX1NFTEVDVF9CWV9DTElDSztcclxuXHJcbiAgY29sbGFwc2VCeUNsaWNrOiBib29sZWFuID0gREVGQVVMVF9DT0xMQVBTRV9CWV9DTElDSztcclxuXHJcbiAgZGVmYXVsdEl0ZW1WYWx1ZTogSVZpcnR1YWxMaXN0SXRlbSB8IG51bGwgPSBudWxsO1xyXG5cclxuICBzbmFwVG9JdGVtOiBib29sZWFuID0gREVGQVVMVF9TTkFQX1RPX0lURU07XHJcblxyXG4gIGlzSW5maW5pdHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgaXNWZXJ0aWNhbDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIGR5bmFtaWM6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBpdGVtU2l6ZTogbnVtYmVyID0gREVGQVVMVF9JVEVNX1NJWkU7XHJcblxyXG4gIHNuYXBTY3JvbGxUb1N0YXJ0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHNuYXBTY3JvbGxUb0VuZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBhbmltYXRpb25QYXJhbXM6IElBbmltYXRpb25QYXJhbXMgPSBERUZBVUxUX0FOSU1BVElPTl9QQVJBTVM7XHJcblxyXG4gIGlzTm9uZUNvbGxhcHNlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGlzTXVsdGlwbGVDb2xsYXBzZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBpc0FjY29yZGlvbkNvbGxhcHNlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgX3RyYWNrQm94OiBUcmFja0JveCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgbGlzdEVsZW1lbnQ6IEhUTUxEaXZFbGVtZW50IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIGl0ZW1zOiBJVmlydHVhbExpc3RDb2xsZWN0aW9uID0gW107XHJcblxyXG4gIGl0ZW1Db25maWdNYXA6IElWaXJ0dWFsTGlzdEl0ZW1Db25maWdNYXAgPSB7fTtcclxuXHJcbiAgcHJpdmF0ZSBfJGRpc3BsYXlJdGVtcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVJlbmRlclZpcnR1YWxMaXN0Q29sbGVjdGlvbj4oW10pO1xyXG4gIHJlYWRvbmx5ICRkaXNwbGF5SXRlbXMgPSB0aGlzLl8kZGlzcGxheUl0ZW1zLmFzT2JzZXJ2YWJsZSgpO1xyXG4gIGdldCBkaXNwbGF5SXRlbXMoKSB7IHJldHVybiB0aGlzLl8kZGlzcGxheUl0ZW1zLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfY29sbGVjdGlvbjogSVJlbmRlclZpcnR1YWxMaXN0Q29sbGVjdGlvbiA9IFtdO1xyXG4gIHNldCBjb2xsZWN0aW9uKHY6IElSZW5kZXJWaXJ0dWFsTGlzdENvbGxlY3Rpb24pIHtcclxuICAgIGlmICh0aGlzLl9jb2xsZWN0aW9uID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9jb2xsZWN0aW9uID0gdjtcclxuXHJcbiAgICB0aGlzLl8kZGlzcGxheUl0ZW1zLm5leHQodik7XHJcbiAgfVxyXG4gIGdldCBjb2xsZWN0aW9uKCkgeyByZXR1cm4gdGhpcy5fY29sbGVjdGlvbjsgfVxyXG5cclxuICBwcml2YXRlIF8kbGFuZ1RleHREaXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRleHREaXJlY3Rpb24+KFRleHREaXJlY3Rpb25zLkxUUik7XHJcbiAgcmVhZG9ubHkgJGxhbmdUZXh0RGlyID0gdGhpcy5fJGxhbmdUZXh0RGlyLmFzT2JzZXJ2YWJsZSgpO1xyXG4gIGdldCBsYW5nVGV4dERpcigpIHsgcmV0dXJuIHRoaXMuXyRsYW5nVGV4dERpci5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgX2xhbmdUZXh0RGlyOiBUZXh0RGlyZWN0aW9uID0gVGV4dERpcmVjdGlvbnMuTFRSO1xyXG4gIHNldCBsYW5nVGV4dERpcih2OiBUZXh0RGlyZWN0aW9uKSB7XHJcbiAgICBpZiAodGhpcy5fbGFuZ1RleHREaXIgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2xhbmdUZXh0RGlyID0gdjtcclxuXHJcbiAgICB0aGlzLl8kbGFuZ1RleHREaXIubmV4dCh2KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgXyRncmFiYmluZyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHJlYWRvbmx5ICRncmFiYmluZyA9IHRoaXMuXyRncmFiYmluZy5hc09ic2VydmFibGUoKTtcclxuICBnZXQgZ3JhYmJpbmcoKSB7IHJldHVybiB0aGlzLl8kZ3JhYmJpbmcuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF9ncmFiYmluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNldCBncmFiYmluZyh2OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fZ3JhYmJpbmcgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2dyYWJiaW5nID0gdjtcclxuXHJcbiAgICB0aGlzLl8kZ3JhYmJpbmcubmV4dCh2KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgXyRjbGlja1ByZXNzZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICByZWFkb25seSAkY2xpY2tQcmVzc2VkID0gdGhpcy5fJGNsaWNrUHJlc3NlZC5hc09ic2VydmFibGUoKTtcclxuICBnZXQgY2xpY2tQcmVzc2VkKCkgeyByZXR1cm4gdGhpcy5fJGNsaWNrUHJlc3NlZC5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgX2NsaWNrUHJlc3NlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNldCBjbGlja1ByZXNzZWQodjogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuX2NsaWNrUHJlc3NlZCA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fY2xpY2tQcmVzc2VkID0gdjtcclxuXHJcbiAgICB0aGlzLl8kY2xpY2tQcmVzc2VkLm5leHQodik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF8kaXNHcmFiYmluZyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHJlYWRvbmx5ICRpc0dyYWJiaW5nID0gdGhpcy5fJGlzR3JhYmJpbmcuYXNPYnNlcnZhYmxlKCk7XHJcbiAgZ2V0IGlzR3JhYmJpbmcoKSB7IHJldHVybiB0aGlzLl8kaXNHcmFiYmluZy5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIGdldCBzY3JvbGxCYXJTaXplKCkgeyByZXR1cm4gdGhpcy5fJHNjcm9sbEJhclNpemUuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF9zY3JvbGxCYXJTaXplOiBudW1iZXIgPSAwO1xyXG4gIHNldCBzY3JvbGxCYXJTaXplKHY6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuX3Njcm9sbEJhclNpemUgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3Njcm9sbEJhclNpemUgPSB2O1xyXG5cclxuICAgIHRoaXMuXyRzY3JvbGxCYXJTaXplLm5leHQodik7XHJcbiAgfVxyXG4gIHByaXZhdGUgXyRzY3JvbGxCYXJTaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KHRoaXMuX3Njcm9sbEJhclNpemUpO1xyXG4gIHJlYWRvbmx5ICRzY3JvbGxCYXJTaXplID0gdGhpcy5fJHNjcm9sbEJhclNpemUuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRpbnRlcnNlY3Rpb25FbGVtZW50QnlTbmFwVG9JdGVtQWxpZ24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElkIHwgbnVsbD4obnVsbCk7XHJcbiAgcmVhZG9ubHkgJGludGVyc2VjdGlvbkVsZW1lbnRCeVNuYXBUb0l0ZW1BbGlnbiA9IHRoaXMuXyRpbnRlcnNlY3Rpb25FbGVtZW50QnlTbmFwVG9JdGVtQWxpZ24uYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRjbGlja0Rpc3RhbmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KERFRkFVTFRfQ0xJQ0tfRElTVEFOQ0UpO1xyXG4gIHJlYWRvbmx5ICRjbGlja0Rpc3RhbmNlID0gdGhpcy5fJGNsaWNrRGlzdGFuY2UuYXNPYnNlcnZhYmxlKCk7XHJcbiAgZ2V0IGNsaWNrRGlzdGFuY2UoKSB7IHJldHVybiB0aGlzLl8kY2xpY2tEaXN0YW5jZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgX2NsaWNrRGlzdGFuY2U6IG51bWJlciA9IERFRkFVTFRfQ0xJQ0tfRElTVEFOQ0U7XHJcbiAgc2V0IGNsaWNrRGlzdGFuY2UodjogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5fY2xpY2tEaXN0YW5jZSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fY2xpY2tEaXN0YW5jZSA9IHY7XHJcblxyXG4gICAgdGhpcy5fJGNsaWNrRGlzdGFuY2UubmV4dCh2KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX29uVGlja0hhbmRsZXIgPSAoKSA9PiB7XHJcbiAgICB0aGlzLl8kdGljay5uZXh0KCk7XHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBfb25UcmFja0JveENoYW5nZUhhbmRsZXIgPSAodjogbnVtYmVyKSA9PiB7XHJcbiAgICB0aGlzLl8kY2FjaGVWZXJzaW9uLm5leHQodik7XHJcbiAgfTtcclxuXHJcbiAgc2V0IHNlbGVjdGVkSWRzKGlkczogQXJyYXk8SWQ+IHwgSWQgfCBudWxsKSB7XHJcbiAgICBpZiAoSlNPTi5zdHJpbmdpZnkodGhpcy5fJHNlbGVjdGVkSWRzLmdldFZhbHVlKCkpICE9PSBKU09OLnN0cmluZ2lmeShpZHMpKSB7XHJcbiAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KGlkcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgc2VsZWN0ZWRJZHMoKSB7IHJldHVybiB0aGlzLl8kc2VsZWN0ZWRJZHMuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBzZXQgY29sbGFwc2VkSWRzKGlkczogQXJyYXk8SWQ+KSB7XHJcbiAgICBpZiAoSlNPTi5zdHJpbmdpZnkodGhpcy5fJGNvbGxhcHNlZElkcy5nZXRWYWx1ZSgpKSAhPT0gSlNPTi5zdHJpbmdpZnkoaWRzKSkge1xyXG4gICAgICB0aGlzLl8kY29sbGFwc2VkSWRzLm5leHQoaWRzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBjb2xsYXBzZWRJZHMoKSB7IHJldHVybiB0aGlzLl8kY29sbGFwc2VkSWRzLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICBjb25zdCAkZ3JhYmJpbmcgPSB0aGlzLiRncmFiYmluZy5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICksICRjbGlja1ByZXNzZWQgPSB0aGlzLiRjbGlja1ByZXNzZWQucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICApO1xyXG4gICAgY29tYmluZUxhdGVzdChbJGdyYWJiaW5nLCAkY2xpY2tQcmVzc2VkXSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCgoW2dyYWJiaW5nLCBjbGlja1ByZXNzZWRdKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fJGlzR3JhYmJpbmcubmV4dChncmFiYmluZyAmJiAhY2xpY2tQcmVzc2VkKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuXyRzZWxlY3RpbmdNb2RlLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgc3dpdGNoICh2KSB7XHJcbiAgICAgICAgICBjYXNlIFNlbGVjdGluZ01vZGVzVHlwZXMuU0VMRUNUOiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnIgPSB0aGlzLl8kc2VsZWN0ZWRJZHMuZ2V0VmFsdWUoKTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjdXJyICE9PSAnbnVtYmVyJyAmJiB0eXBlb2YgY3VyciAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICB0aGlzLl8kc2VsZWN0ZWRJZHMubmV4dChudWxsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNhc2UgU2VsZWN0aW5nTW9kZXNUeXBlcy5NVUxUSV9TRUxFQ1Q6IHtcclxuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMuXyRzZWxlY3RlZElkcy5nZXRWYWx1ZSgpKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KFtdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNhc2UgU2VsZWN0aW5nTW9kZXNUeXBlcy5OT05FOlxyXG4gICAgICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgICAgICB0aGlzLl8kc2VsZWN0ZWRJZHMubmV4dChudWxsKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICB2aXJ0dWFsQ2xpY2soZGF0YTogSVJlbmRlclZpcnR1YWxMaXN0SXRlbSB8IG51bGwpIHtcclxuICAgIHRoaXMuXyR2aXJ0dWFsQ2xpY2submV4dChkYXRhKTtcclxuICAgIGlmICh0aGlzLmNvbGxhcHNlQnlDbGljaykge1xyXG4gICAgICBjb25zdCB0cmFja0J5ID0gdGhpcy50cmFja0J5LCBpZCA9IChkYXRhIGFzIGFueSk/Llt0cmFja0J5XSA/PyBudWxsO1xyXG4gICAgICB0aGlzLmNvbGxhcHNlKGlkKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNlbGVjdEJ5Q2xpY2spIHtcclxuICAgICAgY29uc3QgdHJhY2tCeSA9IHRoaXMudHJhY2tCeSwgaWQgPSAoZGF0YSBhcyBhbnkpPy5bdHJhY2tCeV0gPz8gbnVsbDtcclxuICAgICAgdGhpcy5zZWxlY3QoaWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlKGltbWVkaWF0ZWx5OiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIHRoaXMuX3RyYWNrQm94Py5jaGFuZ2VzKGltbWVkaWF0ZWx5LCBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEl0ZW1Db25maWcoaWQ6IElkKSB7XHJcbiAgICBjb25zdCBkaXNwbGF5SXRlbXMgPSB0aGlzLmRpc3BsYXlJdGVtcztcclxuICAgIGlmICghIWRpc3BsYXlJdGVtcykge1xyXG4gICAgICBjb25zdCB0cmFja0J5ID0gdGhpcy50cmFja0J5O1xyXG4gICAgICByZXR1cm4gZGlzcGxheUl0ZW1zLmZpbmQoZGF0YSA9PiB7XHJcbiAgICAgICAgY29uc3QgX2lkID0gKGRhdGEgYXMgYW55KT8uW3RyYWNrQnldID8/IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIF9pZCA9PT0gaWQ7XHJcbiAgICAgIH0pPy5jb25maWcgPz8gbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VsZWN0cyBhIGxpc3QgaXRlbVxyXG4gICAqIEBwYXJhbSBpZCBcclxuICAgKiBAcGFyYW0gc2VsZWN0ZWQgLSBJZiB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLCB0aGVuIHRoZSB0b2dnbGUgbWV0aG9kIGlzIGV4ZWN1dGVkLCBpZiBmYWxzZSBvciB0cnVlLCB0aGVuIHRoZSBzZWxlY3Rpb24vZGVzZWxlY3Rpb24gaXMgcGVyZm9ybWVkLlxyXG4gICAqL1xyXG4gIHNlbGVjdChpZDogSWQsIHNlbGVjdGVkPzogYm9vbGVhbikge1xyXG4gICAgdmFsaWRhdGVJZChpZCk7XHJcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmdldEl0ZW1Db25maWcoaWQpO1xyXG4gICAgaWYgKCghIWNvbmZpZyAmJiBjb25maWcuc2VsZWN0YWJsZSkpIHtcclxuICAgICAgc3dpdGNoICh0aGlzLl8kc2VsZWN0aW5nTW9kZS5nZXRWYWx1ZSgpKSB7XHJcbiAgICAgICAgY2FzZSBTZWxlY3RpbmdNb2Rlc1R5cGVzLlNFTEVDVDoge1xyXG4gICAgICAgICAgY29uc3QgY3VyciA9IHRoaXMuXyRzZWxlY3RlZElkcy5nZXRWYWx1ZSgpIGFzIChJZCB8IHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICBpZiAoc2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLl8kc2VsZWN0ZWRJZHMubmV4dChjdXJyICE9PSBpZCA/IGlkIDogbnVsbCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl8kc2VsZWN0ZWRJZHMubmV4dChzZWxlY3RlZCA/IGlkIDogbnVsbCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FzZSBTZWxlY3RpbmdNb2Rlc1R5cGVzLk1VTFRJX1NFTEVDVDoge1xyXG4gICAgICAgICAgY29uc3QgY3VyciA9IFsuLi4odGhpcy5fJHNlbGVjdGVkSWRzLmdldFZhbHVlKCkgfHwgW10pIGFzIEFycmF5PElkPl0sXHJcbiAgICAgICAgICAgIGluZGV4ID0gY3Vyci5pbmRleE9mKGlkKTtcclxuICAgICAgICAgIGlmIChzZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgY3Vyci5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KGN1cnIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KFsuLi5jdXJyLCBpZF0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkKSB7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQoY3Vycik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQoWy4uLmN1cnIsIGlkXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgY3Vyci5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KGN1cnIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KGN1cnIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FzZSBTZWxlY3RpbmdNb2Rlc1R5cGVzLk5PTkU6XHJcbiAgICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQobnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgICogQ29sbGFwc2UgbGlzdCBpdGVtc1xyXG4gICAgKiBAcGFyYW0gZGF0YSBcclxuICAgICogQHBhcmFtIGNvbGxhcHNlZCAtIElmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQsIHRoZW4gdGhlIHRvZ2dsZSBtZXRob2QgaXMgZXhlY3V0ZWQsIGlmIGZhbHNlIG9yIHRydWUsIHRoZW4gdGhlIGNvbGxhcHNlL2V4cGFuZCBpcyBwZXJmb3JtZWQuXHJcbiAgICAqL1xyXG4gIGNvbGxhcHNlKGlkOiBJZCwgY29sbGFwc2VkPzogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuaXNOb25lQ29sbGFwc2UpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlSWQoaWQpO1xyXG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5nZXRJdGVtQ29uZmlnKGlkKTtcclxuICAgIGlmICgoISFjb25maWcgJiYgY29uZmlnLmNvbGxhcHNhYmxlKSkge1xyXG4gICAgICBjb25zdCBhbGxHcm91cHM6IEFycmF5PElkPiA9IFtdO1xyXG4gICAgICBpZiAodGhpcy5pc0FjY29yZGlvbkNvbGxhcHNlKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLml0ZW1zLCBpdGVtQ29uZmlnTWFwID0gdGhpcy5pdGVtQ29uZmlnTWFwLCB0cmFja0J5ID0gdGhpcy50cmFja0J5O1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gaXRlbXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpdGVtID0gaXRlbXNbaV0sIGlkID0gaXRlbVt0cmFja0J5XSwgY29sbGFwc2FibGUgPSBpdGVtQ29uZmlnTWFwPy5baWRdPy5jb2xsYXBzYWJsZSA9PT0gdHJ1ZTtcclxuICAgICAgICAgIGlmICghY29sbGFwc2FibGUpIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBhbGxHcm91cHMucHVzaChpZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBjdXJyID0gdGhpcy5pc0FjY29yZGlvbkNvbGxhcHNlID8gYWxsR3JvdXBzIDogWy4uLih0aGlzLl8kY29sbGFwc2VkSWRzLmdldFZhbHVlKCkgfHwgW10pIGFzIEFycmF5PElkPl0sXHJcbiAgICAgICAgaW5kZXggPSBjdXJyLmluZGV4T2YoaWQpO1xyXG4gICAgICBpZiAoIWNvbGxhcHNlZCkge1xyXG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICBjdXJyLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICB0aGlzLl8kY29sbGFwc2VkSWRzLm5leHQoY3Vycik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuXyRjb2xsYXBzZWRJZHMubmV4dChbLi4uY3VyciwgaWRdKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoY29sbGFwc2VkKSB7XHJcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgIHRoaXMuXyRjb2xsYXBzZWRJZHMubmV4dChjdXJyKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5fJGNvbGxhcHNlZElkcy5uZXh0KFsuLi5jdXJyLCBpZF0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgY3Vyci5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgdGhpcy5fJGNvbGxhcHNlZElkcy5uZXh0KGN1cnIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl8kY29sbGFwc2VkSWRzLm5leHQoY3Vycik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5pc0FjY29yZGlvbkNvbGxhcHNlKSB7XHJcbiAgICAgICAgdGhpcy5fJHNjcm9sbFRvLm5leHQoe1xyXG4gICAgICAgICAgaWQsIGNiOiBudWxsLCBvcHRpb25zOiB7XHJcbiAgICAgICAgICAgIGRlbGF5OiAxMDAsIGZvY3VzZWQ6IHRydWUsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuXyRzY3JvbGxUby5uZXh0KHtcclxuICAgICAgICAgIGlkLCBjYjogbnVsbCwgb3B0aW9uczoge1xyXG4gICAgICAgICAgICBkZWxheTogMTAwLCBmb2N1c2VkOiB0cnVlLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0Rm9jdXNlZEVsZW1lbnRCeUlkKGlkOiBJZCkge1xyXG4gICAgY29uc3QgZWwgPSB0aGlzLmxpc3RFbGVtZW50Py5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PihnZXRTZWxlY3RvckJ5SXRlbUlkKGlkKSk7XHJcbiAgICBpZiAoISFlbCkge1xyXG4gICAgICBjb25zdCBmb2N1c2VkRWwgPSBlbC5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PihgLiR7SVRFTV9DT05UQUlORVJ9YCk7XHJcbiAgICAgIGlmICghIWZvY3VzZWRFbCkge1xyXG4gICAgICAgIHJldHVybiBmb2N1c2VkRWw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgYm91bmRzIG9mIGFuIGVsZW1lbnQgd2l0aCBhIGdpdmVuIGlkXHJcbiAgICovXHJcbiAgZ2V0SXRlbUJvdW5kcyhpZDogSWQpOiBJU2l6ZSB8IG51bGwge1xyXG4gICAgdmFsaWRhdGVJZChpZCk7XHJcbiAgICByZXR1cm4gdGhpcy5fdHJhY2tCb3g/LmdldEl0ZW1Cb3VuZHMoaWQpID8/IG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGb2N1cyBhbiBsaXN0IGl0ZW0gYnkgYSBnaXZlbiBpZC5cclxuICAgKi9cclxuICBmb2N1c0J5SWQoaWQ6IElkLCBhbGlnbjogRm9jdXNBbGlnbm1lbnQgPSBGb2N1c0FsaWdubWVudHMuTk9ORSwgc2Nyb2xsQmVoYXZpb3I6IFNjcm9sbEJlaGF2aW9yID0gXCJhdXRvXCIpIHtcclxuICAgIHZhbGlkYXRlSWQoaWQpO1xyXG4gICAgdmFsaWRhdGVGb2N1c0FsaWdubWVudChhbGlnbik7XHJcbiAgICBjb25zdCBlbCA9IHRoaXMuZ2V0Rm9jdXNlZEVsZW1lbnRCeUlkKGlkKTtcclxuICAgIGlmICghIWVsKSB7XHJcbiAgICAgIHRoaXMuZm9jdXMoZWwsIGFsaWduLCBzY3JvbGxCZWhhdmlvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmb2N1cyhlbGVtZW50OiBIVE1MRWxlbWVudCwgYWxpZ246IEZvY3VzQWxpZ25tZW50ID0gRm9jdXNBbGlnbm1lbnRzLkNFTlRFUiwgYmVoYXZpb3I6IFNjcm9sbEJlaGF2aW9yID0gQkVIQVZJT1JfQVVUTyk6IGJvb2xlYW4ge1xyXG4gICAgZWxlbWVudC5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XHJcbiAgICBpZiAoISFlbGVtZW50LnBhcmVudEVsZW1lbnQpIHtcclxuICAgICAgY29uc3QgcG9zaXRpb24gPSBwYXJzZUZsb2F0KGVsZW1lbnQucGFyZW50RWxlbWVudD8uZ2V0QXR0cmlidXRlKCdwb3NpdGlvbicpID8/ICcwJyk7XHJcbiAgICAgIHRoaXMuXyRmb2N1c0l0ZW0ubmV4dCh7IGVsZW1lbnQsIHBvc2l0aW9uLCBhbGlnbiwgYmVoYXZpb3IgfSk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZm9jdXNMaXN0KCkge1xyXG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMubGlzdEVsZW1lbnQ7XHJcbiAgICBpZiAoISFlbGVtZW50KSB7XHJcbiAgICAgIGVsZW1lbnQuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZm9jdXNGaXJzdEVsZW1lbnQoKSB7XHJcbiAgICBjb25zdCBlbGVtZW50cyA9IHRoaXMubGlzdEVsZW1lbnQ/LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTERpdkVsZW1lbnQ+KGdldExpc3RFbGVtZW50cygpKSxcclxuICAgICAgZWxMaXN0ID0gKGVsZW1lbnRzID8gQXJyYXkuZnJvbShlbGVtZW50cykgOiBbXSkuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGluZGV4QSA9IE51bWJlcihhLmdldEF0dHJpYnV0ZShOR1ZMX0lOREVYKSksIGluZGV4QiA9IE51bWJlcihiLmdldEF0dHJpYnV0ZShOR1ZMX0lOREVYKSk7XHJcbiAgICAgICAgaWYgKGluZGV4QSA+IGluZGV4QikgcmV0dXJuIDE7XHJcbiAgICAgICAgaWYgKGluZGV4QSA8IGluZGV4QikgcmV0dXJuIC0xO1xyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgICB9KTtcclxuICAgIGxldCBlbGVtZW50OiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuICAgIGZvciAobGV0IGkgPSAwLCBsID0gZWxMaXN0Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICBjb25zdCBlbCA9IGVsTGlzdFtpXSwgaW5kZXggPSBOdW1iZXIoZWwuZ2V0QXR0cmlidXRlKE5HVkxfSU5ERVgpKTtcclxuICAgICAgaWYgKCEhZWwgJiYgaW5kZXggPiAwKSB7XHJcbiAgICAgICAgZWxlbWVudCA9IGVsO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoISFlbGVtZW50KSB7XHJcbiAgICAgIHRoaXMuZm9jdXMoZWxlbWVudCwgRm9jdXNBbGlnbm1lbnRzLkNFTlRFUiwgQkVIQVZJT1JfSU5TVEFOVCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplKGlkOiBudW1iZXIsIHRyYWNrQm94OiBUcmFja0JveCkge1xyXG4gICAgdGhpcy5faWQgPSBpZDtcclxuICAgIHRoaXMuX3RyYWNrQm94ID0gdHJhY2tCb3g7XHJcbiAgICB0aGlzLl90cmFja0JveC5hZGRFdmVudExpc3RlbmVyKFRyYWNrQm94RXZlbnRzLlRJQ0ssIHRoaXMuX29uVGlja0hhbmRsZXIpO1xyXG4gICAgdGhpcy5fdHJhY2tCb3guYWRkRXZlbnRMaXN0ZW5lcihUcmFja0JveEV2ZW50cy5DSEFOR0UsIHRoaXMuX29uVHJhY2tCb3hDaGFuZ2VIYW5kbGVyKTtcclxuICB9XHJcblxyXG4gIGdlbmVyYXRlQ29tcG9uZW50SWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbmV4dENvbXBvbmVudElkID0gdGhpcy5fbmV4dENvbXBvbmVudElkID09PSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUlxyXG4gICAgICA/IDAgOiB0aGlzLl9uZXh0Q29tcG9uZW50SWQgKyAxO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29tcG9uZW50Qm91bmRzQnlJbnRlcnNlY3Rpb25Qb3NpdGlvbihwb3NpdGlvbjogbnVtYmVyLCBtYXhQb3NpdGlvbjogbnVtYmVyIHwgbnVsbCA9IG51bGwpOiAoSVJlY3QgJiB7IGlkOiBJZCB8IG51bGw7IGlzRmlyc3Q6IGJvb2xlYW47IGlzTGFzdDogYm9vbGVhbjsgfSkgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLl90cmFja0JveD8uZ2V0Q29tcG9uZW50Qm91bmRzQnlJbnRlcnNlY3Rpb25Qb3NpdGlvbihwb3NpdGlvbiwgbWF4UG9zaXRpb24pID8/IG51bGw7XHJcbiAgfVxyXG5cclxuICBzZXRJbnRlcnNlY3Rpb25FbGVtZW50QnlTbmFwVG9JdGVtQWxpZ24oaWQ6IElkIHwgbnVsbCkge1xyXG4gICAgaWYgKHRoaXMuXyRpbnRlcnNlY3Rpb25FbGVtZW50QnlTbmFwVG9JdGVtQWxpZ24uZ2V0VmFsdWUoKSAhPT0gaWQpIHtcclxuICAgICAgdGhpcy5fJGludGVyc2VjdGlvbkVsZW1lbnRCeVNuYXBUb0l0ZW1BbGlnbi5uZXh0KGlkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAgKiBUaGUgbWV0aG9kIHNjcm9sbHMgdGhlIGxpc3QgdG8gdGhlIGVsZW1lbnQgd2l0aCB0aGUgZ2l2ZW4gYGlkYCBhbmQgcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHNjcm9sbGVkIGFyZWEuXHJcbiAgICAqL1xyXG4gIHNjcm9sbFRvKGlkOiBJZCwgY2I6ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsLCBvcHRpb25zOiBJU2Nyb2xsT3B0aW9ucyB8IG51bGwgPSBudWxsKSB7XHJcbiAgICB0aGlzLl8kc2Nyb2xsVG8ubmV4dCh7IGlkLCBjYiwgb3B0aW9ucyB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNjcm9sbHMgdGhlIHNjcm9sbCBhcmVhIHRvIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBjb2xsZWN0aW9uLlxyXG4gICAqL1xyXG4gIHNjcm9sbFRvU3RhcnQob3B0aW9ucz86IElTY3JvbGxPcHRpb25zKSB7XHJcbiAgICB0aGlzLl8kc2Nyb2xsVG9TdGFydC5uZXh0KG9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2Nyb2xscyB0aGUgbGlzdCB0byB0aGUgZW5kIG9mIHRoZSBjb250ZW50IHNpemUuXHJcbiAgICovXHJcbiAgc2Nyb2xsVG9FbmQob3B0aW9ucz86IElTY3JvbGxPcHRpb25zKSB7XHJcbiAgICB0aGlzLl8kc2Nyb2xsVG9FbmQubmV4dChvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fJHVuc3Vic2NyaWJlKSB7XHJcbiAgICAgIHRoaXMuXyR1bnN1YnNjcmliZS5uZXh0KCk7XHJcbiAgICAgIHRoaXMuXyR1bnN1YnNjcmliZS5jb21wbGV0ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
@@ -9,18 +9,34 @@ import { easeLinear } from './ease';
9
9
  export class Animator {
10
10
  static _nextId = 0;
11
11
  _animationId = 0;
12
+ get animated() { return this._animationId > -1; }
13
+ get isAnimated() { return this.hasAnimation(this._currentId); }
12
14
  _currentId = Animator._nextId;
15
+ get id() { return this._currentId; }
13
16
  generateId() {
14
17
  return Animator._nextId = Animator._nextId === Number.MAX_SAFE_INTEGER
15
18
  ? 0 : Animator._nextId + 1;
16
19
  }
20
+ _diff = 0;
21
+ _startValue = 0;
22
+ _endValue = 0;
23
+ _prevPos = 0;
24
+ updateTo(end) {
25
+ this._endValue = end;
26
+ this._diff = this._endValue - this._startValue;
27
+ return this.hasAnimation();
28
+ }
17
29
  animate(params) {
18
30
  this.stop();
19
31
  const id = this.generateId();
20
32
  this._currentId = id;
21
33
  const { withDelta = DEFAULT_WITH_DELTA, startValue, endValue, duration = DEFAULT_ANIMATION_DURATION, getPropValue, easingFunction = easeLinear, onUpdate, onComplete, } = params;
34
+ this._startValue = startValue;
35
+ this._endValue = endValue;
22
36
  const startTime = performance.now();
23
- let isCanceled = false, prevPos = startValue, start = startValue, startPosDelta = 0, delta = 0, prevTime = startTime, diff = endValue - start, isFinished = false;
37
+ let isCanceled = false, startPosDelta = 0, delta = 0, prevTime = startTime, isFinished = false;
38
+ this._prevPos = startValue;
39
+ this._diff = this._endValue - this._startValue;
24
40
  const step = (currentTime) => {
25
41
  if (id !== this._currentId) {
26
42
  isCanceled = true;
@@ -30,34 +46,35 @@ export class Animator {
30
46
  }
31
47
  const cPos = getPropValue?.() || 0;
32
48
  let startDelta = 0;
33
- if (cPos !== prevPos) {
34
- startDelta = cPos - prevPos;
49
+ if (cPos !== this._prevPos) {
50
+ startDelta = cPos - this._prevPos;
35
51
  startPosDelta += startDelta;
36
52
  }
37
- const elapsed = currentTime - startTime, progress = start === endValue ? 1 : Math.min(duration > 0 ? elapsed / duration : 0, 1), easedProgress = easingFunction(progress), val = (withDelta ? startPosDelta : 0) + start + diff * easedProgress, currentValue = val, t = performance.now();
53
+ const elapsed = currentTime - startTime, progress = this._startValue === this._endValue ? 1 : Math.min(duration > 0 ? elapsed / duration : 0, 1), easedProgress = easingFunction(progress), val = (withDelta ? startPosDelta : 0) + this._startValue + this._diff * easedProgress, currentValue = val, t = performance.now();
38
54
  isFinished = progress === 1;
39
- delta = currentValue - startDelta - prevPos;
40
- const ts = t - prevTime, timestamp = ts < ANIMATOR_MIN_TIMESTAMP ? ANIMATOR_MIN_TIMESTAMP : ts;
55
+ delta = currentValue - startDelta - this._prevPos;
56
+ const frameTimestamp = t - prevTime, actualFrameTimestamp = frameTimestamp < ANIMATOR_MIN_TIMESTAMP ? ANIMATOR_MIN_TIMESTAMP : frameTimestamp;
41
57
  prevTime = t;
42
- prevPos = currentValue;
58
+ this._prevPos = currentValue;
43
59
  if (onUpdate !== undefined) {
44
60
  const data = {
45
61
  id,
46
62
  delta,
47
63
  elapsed,
48
- value: !withDelta && isFinished ? endValue : currentValue,
49
- timestamp,
64
+ value: currentValue,
65
+ timestamp: actualFrameTimestamp,
50
66
  };
51
67
  onUpdate(data);
52
68
  }
53
69
  if (isFinished) {
70
+ this._animationId = -1;
54
71
  if (onComplete !== undefined) {
55
72
  const data = {
56
73
  id,
57
74
  delta,
58
75
  elapsed,
59
- value: withDelta ? currentValue : endValue,
60
- timestamp,
76
+ value: currentValue,
77
+ timestamp: actualFrameTimestamp,
61
78
  };
62
79
  onComplete(data);
63
80
  }
@@ -67,12 +84,20 @@ export class Animator {
67
84
  }
68
85
  };
69
86
  this._animationId = requestAnimationFrame(step);
87
+ return this._currentId;
88
+ }
89
+ hasAnimation(id = -1) {
90
+ if ((this._currentId === id || id === -1) && this.animated) {
91
+ return true;
92
+ }
93
+ return false;
70
94
  }
71
- stop() {
72
- cancelAnimationFrame(this._animationId);
95
+ stop(id = -1) {
96
+ cancelAnimationFrame(id === -1 ? this._animationId : id);
97
+ this._animationId = -1;
73
98
  }
74
99
  dispose() {
75
100
  this.stop();
76
101
  }
77
102
  }
78
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5pbWF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi91dGlscy9hbmltYXRvci9hbmltYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsMEJBQTBCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDakcsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUdwQzs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxRQUFRO0lBQ1gsTUFBTSxDQUFDLE9BQU8sR0FBVyxDQUFDLENBQUM7SUFFM0IsWUFBWSxHQUFXLENBQUMsQ0FBQztJQUV6QixVQUFVLEdBQVcsUUFBUSxDQUFDLE9BQU8sQ0FBQztJQUV0QyxVQUFVO1FBQ2hCLE9BQU8sUUFBUSxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsT0FBTyxLQUFLLE1BQU0sQ0FBQyxnQkFBZ0I7WUFDcEUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELE9BQU8sQ0FBQyxNQUF1QjtRQUM3QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFWixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFFckIsTUFBTSxFQUNKLFNBQVMsR0FBRyxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsR0FBRywwQkFBMEIsRUFDM0YsWUFBWSxFQUFFLGNBQWMsR0FBRyxVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVUsR0FDaEUsR0FBRyxNQUFNLENBQUM7UUFFWCxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDcEMsSUFBSSxVQUFV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QUFZLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBTklNQVRPUl9NSU5fVElNRVNUQU1QLCBERUZBVUxUX0FOSU1BVElPTl9EVVJBVElPTiwgREVGQVVMVF9XSVRIX0RFTFRBIH0gZnJvbSAnLi9jb25zdCc7XHJcbmltcG9ydCB7IGVhc2VMaW5lYXIgfSBmcm9tICcuL2Vhc2UnO1xyXG5pbXBvcnQgeyBJQW5pbWF0b3JQYXJhbXMsIElBbmltYXRvclVwZGF0ZURhdGEgfSBmcm9tICcuL2ludGVyZmFjZXMnO1xyXG5cclxuLyoqXHJcbiAqIEFuaW1hdG9yXHJcbiAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9Eam9ubnlYL25nLXZpcnR1YWwtbGlzdC9ibG9iL21haW4vbGlicmFyeS9zcmMvdXRpbHMvYW5pbWF0b3IvYW5pbWF0b3IudHNcclxuICogQGF1dGhvciBFdmdlbmlpIEFsZXhhbmRyb3ZpY2ggR3JlYmVubmlrb3ZcclxuICogQGVtYWlsIGRqb25ueXhAZ21haWwuY29tXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQW5pbWF0b3Ige1xyXG4gIHByaXZhdGUgc3RhdGljIF9uZXh0SWQ6IG51bWJlciA9IDA7XHJcblxyXG4gIHByaXZhdGUgX2FuaW1hdGlvbklkOiBudW1iZXIgPSAwO1xyXG5cclxuICBwcml2YXRlIF9jdXJyZW50SWQ6IG51bWJlciA9IEFuaW1hdG9yLl9uZXh0SWQ7XHJcblxyXG4gIHByaXZhdGUgZ2VuZXJhdGVJZCgpIHtcclxuICAgIHJldHVybiBBbmltYXRvci5fbmV4dElkID0gQW5pbWF0b3IuX25leHRJZCA9PT0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcclxuICAgICAgPyAwIDogQW5pbWF0b3IuX25leHRJZCArIDE7XHJcbiAgfVxyXG5cclxuICBhbmltYXRlKHBhcmFtczogSUFuaW1hdG9yUGFyYW1zKSB7XHJcbiAgICB0aGlzLnN0b3AoKTtcclxuXHJcbiAgICBjb25zdCBpZCA9IHRoaXMuZ2VuZXJhdGVJZCgpO1xyXG4gICAgdGhpcy5fY3VycmVudElkID0gaWQ7XHJcblxyXG4gICAgY29uc3Qge1xyXG4gICAgICB3aXRoRGVsdGEgPSBERUZBVUxUX1dJVEhfREVMVEEsIHN0YXJ0VmFsdWUsIGVuZFZhbHVlLCBkdXJhdGlvbiA9IERFRkFVTFRfQU5JTUFUSU9OX0RVUkFUSU9OLFxyXG4gICAgICBnZXRQcm9wVmFsdWUsIGVhc2luZ0Z1bmN0aW9uID0gZWFzZUxpbmVhciwgb25VcGRhdGUsIG9uQ29tcGxldGUsXHJcbiAgICB9ID0gcGFyYW1zO1xyXG5cclxuICAgIGNvbnN0IHN0YXJ0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xyXG4gICAgbGV0IGlzQ2FuY2VsZWQgPSBmYWxzZSwgcHJldlBvcyA9IHN0YXJ0VmFsdWUsIHN0YXJ0ID0gc3RhcnRWYWx1ZSwgc3RhcnRQb3NEZWx0YSA9IDAsIGRlbHRhID0gMCwgcHJldlRpbWUgPSBzdGFydFRpbWUsXHJcbiAgICAgIGRpZmYgPSBlbmRWYWx1ZSAtIHN0YXJ0LCBpc0ZpbmlzaGVkID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3Qgc3RlcCA9IChjdXJyZW50VGltZTogbnVtYmVyKSA9PiB7XHJcbiAgICAgIGlmIChpZCAhPT0gdGhpcy5fY3VycmVudElkKSB7XHJcbiAgICAgICAgaXNDYW5jZWxlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghIWlzQ2FuY2VsZWQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGNQb3MgPSBnZXRQcm9wVmFsdWU/LigpIHx8IDA7XHJcbiAgICAgIGxldCBzdGFydERlbHRhID0gMDtcclxuICAgICAgaWYgKGNQb3MgIT09IHByZXZQb3MpIHtcclxuICAgICAgICBzdGFydERlbHRhID0gY1BvcyAtIHByZXZQb3M7XHJcbiAgICAgICAgc3RhcnRQb3NEZWx0YSArPSBzdGFydERlbHRhO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBlbGFwc2VkID0gY3VycmVudFRpbWUgLSBzdGFydFRpbWUsXHJcbiAgICAgICAgcHJvZ3Jlc3MgPSBzdGFydCA9PT0gZW5kVmFsdWUgPyAxIDogTWF0aC5taW4oZHVyYXRpb24gPiAwID8gZWxhcHNlZCAvIGR1cmF0aW9uIDogMCwgMSksXHJcbiAgICAgICAgZWFzZWRQcm9ncmVzcyA9IGVhc2luZ0Z1bmN0aW9uKHByb2dyZXNzKSxcclxuICAgICAgICB2YWwgPSAod2l0aERlbHRhID8gc3RhcnRQb3NEZWx0YSA6IDApICsgc3RhcnQgKyBkaWZmICogZWFzZWRQcm9ncmVzcyxcclxuICAgICAgICBjdXJyZW50VmFsdWUgPSB2YWwsXHJcbiAgICAgICAgdCA9IHBlcmZvcm1hbmNlLm5vdygpO1xyXG5cclxuICAgICAgaXNGaW5pc2hlZCA9IHByb2dyZXNzID09PSAxO1xyXG5cclxuICAgICAgZGVsdGEgPSBjdXJyZW50VmFsdWUgLSBzdGFydERlbHRhIC0gcHJldlBvcztcclxuXHJcbiAgICAgIGNvbnN0IHRzID0gdCAtIHByZXZUaW1lLCB0aW1lc3RhbXAgPSB0cyA8IEFOSU1BVE9SX01JTl9USU1FU1RBTVAgPyBBTklNQVRPUl9NSU5fVElNRVNUQU1QIDogdHM7XHJcblxyXG4gICAgICBwcmV2VGltZSA9IHQ7XHJcbiAgICAgIHByZXZQb3MgPSBjdXJyZW50VmFsdWU7XHJcblxyXG4gICAgICBpZiAob25VcGRhdGUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGNvbnN0IGRhdGE6IElBbmltYXRvclVwZGF0ZURhdGEgPSB7XHJcbiAgICAgICAgICBpZCxcclxuICAgICAgICAgIGRlbHRhLFxyXG4gICAgICAgICAgZWxhcHNlZCxcclxuICAgICAgICAgIHZhbHVlOiAhd2l0aERlbHRhICYmIGlzRmluaXNoZWQgPyBlbmRWYWx1ZSA6IGN1cnJlbnRWYWx1ZSxcclxuICAgICAgICAgIHRpbWVzdGFtcCxcclxuICAgICAgICB9O1xyXG4gICAgICAgIG9uVXBkYXRlKGRhdGEpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaXNGaW5pc2hlZCkge1xyXG4gICAgICAgIGlmIChvbkNvbXBsZXRlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGNvbnN0IGRhdGE6IElBbmltYXRvclVwZGF0ZURhdGEgPSB7XHJcbiAgICAgICAgICAgIGlkLFxyXG4gICAgICAgICAgICBkZWx0YSxcclxuICAgICAgICAgICAgZWxhcHNlZCxcclxuICAgICAgICAgICAgdmFsdWU6IHdpdGhEZWx0YSA/IGN1cnJlbnRWYWx1ZSA6IGVuZFZhbHVlLFxyXG4gICAgICAgICAgICB0aW1lc3RhbXAsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgb25Db21wbGV0ZShkYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fYW5pbWF0aW9uSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc3RlcCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9hbmltYXRpb25JZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShzdGVwKTtcclxuICB9XHJcblxyXG4gIHN0b3AoKSB7XHJcbiAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9hbmltYXRpb25JZCk7XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgdGhpcy5zdG9wKCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5pbWF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi91dGlscy9hbmltYXRvci9hbmltYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsMEJBQTBCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDakcsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUdwQzs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxRQUFRO0lBQ1gsTUFBTSxDQUFDLE9BQU8sR0FBVyxDQUFDLENBQUM7SUFFM0IsWUFBWSxHQUFXLENBQUMsQ0FBQztJQUVqQyxJQUFJLFFBQVEsS0FBSyxPQUFPLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRWpELElBQUksVUFBVSxLQUFLLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXZELFVBQVUsR0FBVyxRQUFRLENBQUMsT0FBTyxDQUFDO0lBRTlDLElBQUksRUFBRSxLQUFLLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFFNUIsVUFBVTtRQUNoQixPQUFPLFFBQVEsQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLE9BQU8sS0FBSyxNQUFNLENBQUMsZ0JBQWdCO1lBQ3BFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFTyxLQUFLLEdBQVcsQ0FBQyxDQUFDO0lBRWxCLFdBQVcsR0FBVyxDQUFDLENBQUM7SUFFeEIsU0FBUyxHQUFXLENBQUMsQ0FBQztJQUV0QixRQUFRLEdBQVcsQ0FBQyxDQUFDO0lBRTdCLFFBQVEsQ0FBQyxHQUFXO1FBQ2xCLElB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QUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQU5JTUFUT1JfTUlOX1RJTUVTVEFNUCwgREVGQVVMVF9BTklNQVRJT05fRFVSQVRJT04sIERFRkFVTFRfV0lUSF9ERUxUQSB9IGZyb20gJy4vY29uc3QnO1xyXG5pbXBvcnQgeyBlYXNlTGluZWFyIH0gZnJvbSAnLi9lYXNlJztcclxuaW1wb3J0IHsgSUFuaW1hdG9yUGFyYW1zLCBJQW5pbWF0b3JVcGRhdGVEYXRhIH0gZnJvbSAnLi9pbnRlcmZhY2VzJztcclxuXHJcbi8qKlxyXG4gKiBBbmltYXRvclxyXG4gKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vRGpvbm55WC9uZy12aXJ0dWFsLWxpc3QvYmxvYi9tYWluL2xpYnJhcnkvc3JjL3V0aWxzL2FuaW1hdG9yL2FuaW1hdG9yLnRzXHJcbiAqIEBhdXRob3IgRXZnZW5paSBBbGV4YW5kcm92aWNoIEdyZWJlbm5pa292XHJcbiAqIEBlbWFpbCBkam9ubnl4QGdtYWlsLmNvbVxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEFuaW1hdG9yIHtcclxuICBwcml2YXRlIHN0YXRpYyBfbmV4dElkOiBudW1iZXIgPSAwO1xyXG5cclxuICBwcml2YXRlIF9hbmltYXRpb25JZDogbnVtYmVyID0gMDtcclxuXHJcbiAgZ2V0IGFuaW1hdGVkKCkgeyByZXR1cm4gdGhpcy5fYW5pbWF0aW9uSWQgPiAtMTsgfVxyXG5cclxuICBnZXQgaXNBbmltYXRlZCgpIHsgcmV0dXJuIHRoaXMuaGFzQW5pbWF0aW9uKHRoaXMuX2N1cnJlbnRJZCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfY3VycmVudElkOiBudW1iZXIgPSBBbmltYXRvci5fbmV4dElkO1xyXG5cclxuICBnZXQgaWQoKSB7IHJldHVybiB0aGlzLl9jdXJyZW50SWQ7IH1cclxuXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZUlkKCkge1xyXG4gICAgcmV0dXJuIEFuaW1hdG9yLl9uZXh0SWQgPSBBbmltYXRvci5fbmV4dElkID09PSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUlxyXG4gICAgICA/IDAgOiBBbmltYXRvci5fbmV4dElkICsgMTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2RpZmY6IG51bWJlciA9IDA7XHJcblxyXG4gIHByaXZhdGUgX3N0YXJ0VmFsdWU6IG51bWJlciA9IDA7XHJcblxyXG4gIHByaXZhdGUgX2VuZFZhbHVlOiBudW1iZXIgPSAwO1xyXG5cclxuICBwcml2YXRlIF9wcmV2UG9zOiBudW1iZXIgPSAwO1xyXG5cclxuICB1cGRhdGVUbyhlbmQ6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgdGhpcy5fZW5kVmFsdWUgPSBlbmQ7XHJcbiAgICB0aGlzLl9kaWZmID0gdGhpcy5fZW5kVmFsdWUgLSB0aGlzLl9zdGFydFZhbHVlO1xyXG4gICAgcmV0dXJuIHRoaXMuaGFzQW5pbWF0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBhbmltYXRlKHBhcmFtczogSUFuaW1hdG9yUGFyYW1zKSB7XHJcbiAgICB0aGlzLnN0b3AoKTtcclxuXHJcbiAgICBjb25zdCBpZCA9IHRoaXMuZ2VuZXJhdGVJZCgpO1xyXG4gICAgdGhpcy5fY3VycmVudElkID0gaWQ7XHJcblxyXG4gICAgY29uc3Qge1xyXG4gICAgICB3aXRoRGVsdGEgPSBERUZBVUxUX1dJVEhfREVMVEEsIHN0YXJ0VmFsdWUsIGVuZFZhbHVlLCBkdXJhdGlvbiA9IERFRkFVTFRfQU5JTUFUSU9OX0RVUkFUSU9OLFxyXG4gICAgICBnZXRQcm9wVmFsdWUsIGVhc2luZ0Z1bmN0aW9uID0gZWFzZUxpbmVhciwgb25VcGRhdGUsIG9uQ29tcGxldGUsXHJcbiAgICB9ID0gcGFyYW1zO1xyXG5cclxuICAgIHRoaXMuX3N0YXJ0VmFsdWUgPSBzdGFydFZhbHVlO1xyXG4gICAgdGhpcy5fZW5kVmFsdWUgPSBlbmRWYWx1ZTtcclxuXHJcbiAgICBjb25zdCBzdGFydFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcclxuICAgIGxldCBpc0NhbmNlbGVkID0gZmFsc2UsIHN0YXJ0UG9zRGVsdGEgPSAwLCBkZWx0YSA9IDAsIHByZXZUaW1lID0gc3RhcnRUaW1lLCBpc0ZpbmlzaGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLl9wcmV2UG9zID0gc3RhcnRWYWx1ZTtcclxuICAgIHRoaXMuX2RpZmYgPSB0aGlzLl9lbmRWYWx1ZSAtIHRoaXMuX3N0YXJ0VmFsdWU7XHJcblxyXG4gICAgY29uc3Qgc3RlcCA9IChjdXJyZW50VGltZTogbnVtYmVyKSA9PiB7XHJcbiAgICAgIGlmIChpZCAhPT0gdGhpcy5fY3VycmVudElkKSB7XHJcbiAgICAgICAgaXNDYW5jZWxlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghIWlzQ2FuY2VsZWQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGNQb3MgPSBnZXRQcm9wVmFsdWU/LigpIHx8IDA7XHJcbiAgICAgIGxldCBzdGFydERlbHRhID0gMDtcclxuICAgICAgaWYgKGNQb3MgIT09IHRoaXMuX3ByZXZQb3MpIHtcclxuICAgICAgICBzdGFydERlbHRhID0gY1BvcyAtIHRoaXMuX3ByZXZQb3M7XHJcbiAgICAgICAgc3RhcnRQb3NEZWx0YSArPSBzdGFydERlbHRhO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBlbGFwc2VkID0gY3VycmVudFRpbWUgLSBzdGFydFRpbWUsXHJcbiAgICAgICAgcHJvZ3Jlc3MgPSB0aGlzLl9zdGFydFZhbHVlID09PSB0aGlzLl9lbmRWYWx1ZSA/IDEgOiBNYXRoLm1pbihkdXJhdGlvbiA+IDAgPyBlbGFwc2VkIC8gZHVyYXRpb24gOiAwLCAxKSxcclxuICAgICAgICBlYXNlZFByb2dyZXNzID0gZWFzaW5nRnVuY3Rpb24ocHJvZ3Jlc3MpLFxyXG4gICAgICAgIHZhbCA9ICh3aXRoRGVsdGEgPyBzdGFydFBvc0RlbHRhIDogMCkgKyB0aGlzLl9zdGFydFZhbHVlICsgdGhpcy5fZGlmZiAqIGVhc2VkUHJvZ3Jlc3MsXHJcbiAgICAgICAgY3VycmVudFZhbHVlID0gdmFsLFxyXG4gICAgICAgIHQgPSBwZXJmb3JtYW5jZS5ub3coKTtcclxuXHJcbiAgICAgIGlzRmluaXNoZWQgPSBwcm9ncmVzcyA9PT0gMTtcclxuXHJcbiAgICAgIGRlbHRhID0gY3VycmVudFZhbHVlIC0gc3RhcnREZWx0YSAtIHRoaXMuX3ByZXZQb3M7XHJcblxyXG4gICAgICBjb25zdCBmcmFtZVRpbWVzdGFtcCA9IHQgLSBwcmV2VGltZSxcclxuICAgICAgICBhY3R1YWxGcmFtZVRpbWVzdGFtcCA9IGZyYW1lVGltZXN0YW1wIDwgQU5JTUFUT1JfTUlOX1RJTUVTVEFNUCA/IEFOSU1BVE9SX01JTl9USU1FU1RBTVAgOiBmcmFtZVRpbWVzdGFtcDtcclxuXHJcbiAgICAgIHByZXZUaW1lID0gdDtcclxuICAgICAgdGhpcy5fcHJldlBvcyA9IGN1cnJlbnRWYWx1ZTtcclxuXHJcbiAgICAgIGlmIChvblVwZGF0ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgY29uc3QgZGF0YTogSUFuaW1hdG9yVXBkYXRlRGF0YSA9IHtcclxuICAgICAgICAgIGlkLFxyXG4gICAgICAgICAgZGVsdGEsXHJcbiAgICAgICAgICBlbGFwc2VkLFxyXG4gICAgICAgICAgdmFsdWU6IGN1cnJlbnRWYWx1ZSxcclxuICAgICAgICAgIHRpbWVzdGFtcDogYWN0dWFsRnJhbWVUaW1lc3RhbXAsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBvblVwZGF0ZShkYXRhKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGlzRmluaXNoZWQpIHtcclxuICAgICAgICB0aGlzLl9hbmltYXRpb25JZCA9IC0xO1xyXG4gICAgICAgIGlmIChvbkNvbXBsZXRlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGNvbnN0IGRhdGE6IElBbmltYXRvclVwZGF0ZURhdGEgPSB7XHJcbiAgICAgICAgICAgIGlkLFxyXG4gICAgICAgICAgICBkZWx0YSxcclxuICAgICAgICAgICAgZWxhcHNlZCxcclxuICAgICAgICAgICAgdmFsdWU6IGN1cnJlbnRWYWx1ZSxcclxuICAgICAgICAgICAgdGltZXN0YW1wOiBhY3R1YWxGcmFtZVRpbWVzdGFtcCxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICBvbkNvbXBsZXRlKGRhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl9hbmltYXRpb25JZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShzdGVwKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2FuaW1hdGlvbklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0ZXApO1xyXG5cclxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50SWQ7XHJcbiAgfVxyXG5cclxuICBoYXNBbmltYXRpb24oaWQ6IG51bWJlciA9IC0xKSB7XHJcbiAgICBpZiAoKHRoaXMuX2N1cnJlbnRJZCA9PT0gaWQgfHwgaWQgPT09IC0xKSAmJiB0aGlzLmFuaW1hdGVkKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc3RvcChpZDogbnVtYmVyID0gLTEpIHtcclxuICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGlkID09PSAtMSA/IHRoaXMuX2FuaW1hdGlvbklkIDogaWQpO1xyXG4gICAgdGhpcy5fYW5pbWF0aW9uSWQgPSAtMTtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICB0aGlzLnN0b3AoKTtcclxuICB9XHJcbn1cclxuIl19