ng-virtual-list 14.2.0 → 14.3.1
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 +4 -4
- package/esm2020/lib/components/ng-virtual-list-item.component.mjs +5 -3
- package/esm2020/lib/enums/direction.mjs +1 -1
- package/esm2020/lib/models/base-virtual-list-item-component.mjs +9 -0
- package/esm2020/lib/models/collection.model.mjs +1 -1
- package/esm2020/lib/models/component.model.mjs +2 -0
- package/esm2020/lib/models/index.mjs +3 -2
- package/esm2020/lib/models/item.model.mjs +1 -2
- package/esm2020/lib/ng-virtual-list.component.mjs +30 -8
- package/esm2020/lib/utils/index.mjs +4 -3
- package/esm2020/lib/utils/trackBox.mjs +6 -3
- package/esm2020/lib/utils/tracker.mjs +1 -1
- package/esm2020/public-api.mjs +2 -1
- package/fesm2015/ng-virtual-list.mjs +45 -10
- package/fesm2015/ng-virtual-list.mjs.map +1 -1
- package/fesm2020/ng-virtual-list.mjs +45 -10
- package/fesm2020/ng-virtual-list.mjs.map +1 -1
- package/lib/components/ng-virtual-list-item.component.d.ts +7 -6
- package/lib/enums/direction.d.ts +1 -1
- package/lib/models/base-virtual-list-item-component.d.ts +25 -0
- package/lib/models/collection.model.d.ts +1 -1
- package/lib/models/component.model.d.ts +3 -0
- package/lib/models/index.d.ts +4 -1
- package/lib/models/item.model.d.ts +2 -2
- package/lib/ng-virtual-list.component.d.ts +58 -44
- package/lib/utils/index.d.ts +4 -2
- package/lib/utils/trackBox.d.ts +30 -22
- package/lib/utils/tracker.d.ts +7 -5
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Input, Output, ViewChild, ViewContainerRef, ViewEncapsulation, } from '@angular/core';
|
|
2
2
|
import { BehaviorSubject, combineLatest, distinctUntilChanged, filter, map, of, switchMap, takeUntil, tap } from 'rxjs';
|
|
3
|
-
import { NgVirtualListItemComponent } from './components/ng-virtual-list-item.component';
|
|
4
3
|
import { BEHAVIOR_AUTO, BEHAVIOR_INSTANT, CLASS_LIST_HORIZONTAL, CLASS_LIST_VERTICAL, DEFAULT_DIRECTION, DEFAULT_DYNAMIC_SIZE, DEFAULT_ENABLED_BUFFER_OPTIMIZATION, DEFAULT_ITEM_SIZE, DEFAULT_ITEMS_OFFSET, DEFAULT_LIST_SIZE, DEFAULT_SNAP, DEFAULT_SNAPPING_METHOD, HEIGHT_PROP_NAME, LEFT_PROP_NAME, MAX_SCROLL_TO_ITERATIONS, PX, SCROLL, SCROLL_END, TOP_PROP_NAME, TRACK_BY_PROPERTY_NAME, WIDTH_PROP_NAME, } from './const';
|
|
5
4
|
import { Directions } from './enums';
|
|
6
5
|
import { ScrollEvent, TrackBox, isDirection, toggleClassName } from './utils';
|
|
@@ -8,6 +7,7 @@ import { TRACK_BOX_CHANGE_EVENT_NAME } from './utils/trackBox';
|
|
|
8
7
|
import { DisposableComponent } from './utils/disposableComponent';
|
|
9
8
|
import { isSnappingMethodAdvenced } from './utils/snapping-method';
|
|
10
9
|
import { FIREFOX_SCROLLBAR_OVERLAP_SIZE, IS_FIREFOX } from './utils/browser';
|
|
10
|
+
import { NgVirtualListItemComponent } from './components/ng-virtual-list-item.component';
|
|
11
11
|
import * as i0 from "@angular/core";
|
|
12
12
|
import * as i1 from "@angular/common";
|
|
13
13
|
/**
|
|
@@ -44,6 +44,7 @@ export class NgVirtualListComponent extends DisposableComponent {
|
|
|
44
44
|
this.$enabledBufferOptimization = this._$enabledBufferOptimization.asObservable();
|
|
45
45
|
this._$itemRenderer = new BehaviorSubject(undefined);
|
|
46
46
|
this.$itemRenderer = this._$itemRenderer.asObservable();
|
|
47
|
+
this._$renderer = new BehaviorSubject(undefined);
|
|
47
48
|
this._$stickyMap = new BehaviorSubject({});
|
|
48
49
|
this.$stickyMap = this._$stickyMap.asObservable();
|
|
49
50
|
this._itemSizeOptions = (v) => {
|
|
@@ -125,10 +126,18 @@ export class NgVirtualListComponent extends DisposableComponent {
|
|
|
125
126
|
}
|
|
126
127
|
};
|
|
127
128
|
this._$initialized = new BehaviorSubject(false);
|
|
129
|
+
/**
|
|
130
|
+
* Base class of the element component
|
|
131
|
+
*/
|
|
132
|
+
this._itemComponentClass = NgVirtualListItemComponent;
|
|
133
|
+
/**
|
|
134
|
+
* Base class trackBox
|
|
135
|
+
*/
|
|
136
|
+
this._trackBoxClass = TrackBox;
|
|
128
137
|
/**
|
|
129
138
|
* Dictionary of element sizes by their id
|
|
130
139
|
*/
|
|
131
|
-
this._trackBox = new
|
|
140
|
+
this._trackBox = new this._trackBoxClass(this.trackBy);
|
|
132
141
|
this._onTrackBoxChangeHandler = (v) => {
|
|
133
142
|
this._$cacheVersion.next(v);
|
|
134
143
|
};
|
|
@@ -213,9 +222,7 @@ export class NgVirtualListComponent extends DisposableComponent {
|
|
|
213
222
|
}
|
|
214
223
|
return of(displayItems);
|
|
215
224
|
})).subscribe();
|
|
216
|
-
|
|
217
|
-
this.resetRenderers(itemRenderer);
|
|
218
|
-
}));
|
|
225
|
+
this.setupRenderer();
|
|
219
226
|
}
|
|
220
227
|
/**
|
|
221
228
|
* Readonly. Returns the unique identifier of the component.
|
|
@@ -361,8 +368,17 @@ export class NgVirtualListComponent extends DisposableComponent {
|
|
|
361
368
|
get snappingMethod() { return this._$snappingMethod.getValue(); }
|
|
362
369
|
get isSnappingMethodAdvanced() { return this._isSnappingMethodAdvanced; }
|
|
363
370
|
get $cacheVersion() { return this._$cacheVersion.asObservable(); }
|
|
371
|
+
setupRenderer() {
|
|
372
|
+
const $itemRenderer = this.$itemRenderer;
|
|
373
|
+
$itemRenderer.pipe(takeUntil(this._$unsubscribe), distinctUntilChanged(), filter(v => !!v), tap(v => {
|
|
374
|
+
this._$renderer.next(v);
|
|
375
|
+
})).subscribe();
|
|
376
|
+
}
|
|
364
377
|
/** @internal */
|
|
365
378
|
ngOnInit() {
|
|
379
|
+
this.onInit();
|
|
380
|
+
}
|
|
381
|
+
onInit() {
|
|
366
382
|
this._$initialized.next(true);
|
|
367
383
|
}
|
|
368
384
|
listenCacheChangesIfNeed(value) {
|
|
@@ -392,7 +408,7 @@ export class NgVirtualListComponent extends DisposableComponent {
|
|
|
392
408
|
}
|
|
393
409
|
if (this._isSnappingMethodAdvanced && this.snap) {
|
|
394
410
|
if (!this._snapedDisplayComponent && this._snapContainerRef) {
|
|
395
|
-
const comp = this._snapContainerRef.createComponent(
|
|
411
|
+
const comp = this._snapContainerRef.createComponent(this._itemComponentClass);
|
|
396
412
|
comp.instance.regular = true;
|
|
397
413
|
this._snapedDisplayComponent = comp;
|
|
398
414
|
this._trackBox.snapedDisplayComponent = this._snapedDisplayComponent;
|
|
@@ -405,7 +421,7 @@ export class NgVirtualListComponent extends DisposableComponent {
|
|
|
405
421
|
const maxLength = displayItems.length, components = this._displayComponents;
|
|
406
422
|
while (components.length < maxLength) {
|
|
407
423
|
if (_listContainerRef) {
|
|
408
|
-
const comp = _listContainerRef.createComponent(
|
|
424
|
+
const comp = _listContainerRef.createComponent(this._itemComponentClass);
|
|
409
425
|
components.push(comp);
|
|
410
426
|
this._componentsResizeObserver.observe(comp.instance.element);
|
|
411
427
|
}
|
|
@@ -515,6 +531,9 @@ export class NgVirtualListComponent extends DisposableComponent {
|
|
|
515
531
|
}
|
|
516
532
|
/** @internal */
|
|
517
533
|
ngAfterViewInit() {
|
|
534
|
+
this.afterViewInit();
|
|
535
|
+
}
|
|
536
|
+
afterViewInit() {
|
|
518
537
|
const containerEl = this._container;
|
|
519
538
|
if (containerEl) {
|
|
520
539
|
// for direction calculation
|
|
@@ -529,6 +548,9 @@ export class NgVirtualListComponent extends DisposableComponent {
|
|
|
529
548
|
/** @internal */
|
|
530
549
|
ngOnDestroy() {
|
|
531
550
|
super.ngOnDestroy();
|
|
551
|
+
this.dispose();
|
|
552
|
+
}
|
|
553
|
+
dispose() {
|
|
532
554
|
this.clearScrollToRepeatExecutionTimeout();
|
|
533
555
|
if (this._trackBox) {
|
|
534
556
|
this._trackBox.dispose();
|
|
@@ -607,4 +629,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
607
629
|
}], snappingMethod: [{
|
|
608
630
|
type: Input
|
|
609
631
|
}] } });
|
|
610
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctdmlydHVhbC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL25nLXZpcnR1YWwtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9uZy12aXJ0dWFsLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNVLHVCQUF1QixFQUFxQixTQUFTLEVBQWdCLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUNoRyxNQUFNLEVBQWUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixHQUN2RixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFjLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwSSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUN6RixPQUFPLEVBQ0wsYUFBYSxFQUFFLGdCQUFnQixFQUFFLHFCQUFxQixFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLG9CQUFvQixFQUFFLG1DQUFtQyxFQUFFLGlCQUFpQixFQUM1SyxvQkFBb0IsRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsdUJBQXVCLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLHdCQUF3QixFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFDakwsc0JBQXNCLEVBQUUsZUFBZSxHQUN4QyxNQUFNLFNBQVMsQ0FBQztBQUlqQixPQUFPLEVBQWEsVUFBVSxFQUFrQixNQUFNLFNBQVMsQ0FBQztBQUNoRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFB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Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgQ29tcG9uZW50UmVmLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LFxyXG4gIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYsIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgT2JzZXJ2YWJsZSwgb2YsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgTmdWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvbmctdmlydHVhbC1saXN0LWl0ZW0uY29tcG9uZW50JztcclxuaW1wb3J0IHtcclxuICBCRUhBVklPUl9BVVRPLCBCRUhBVklPUl9JTlNUQU5ULCBDTEFTU19MSVNUX0hPUklaT05UQUwsIENMQVNTX0xJU1RfVkVSVElDQUwsIERFRkFVTFRfRElSRUNUSU9OLCBERUZBVUxUX0RZTkFNSUNfU0laRSwgREVGQVVMVF9FTkFCTEVEX0JVRkZFUl9PUFRJTUlaQVRJT04sIERFRkFVTFRfSVRFTV9TSVpFLFxyXG4gIERFRkFVTFRfSVRFTVNfT0ZGU0VULCBERUZBVUxUX0xJU1RfU0laRSwgREVGQVVMVF9TTkFQLCBERUZBVUxUX1NOQVBQSU5HX01FVEhPRCwgSEVJR0hUX1BST1BfTkFNRSwgTEVGVF9QUk9QX05BTUUsIE1BWF9TQ1JPTExfVE9fSVRFUkFUSU9OUywgUFgsIFNDUk9MTCwgU0NST0xMX0VORCwgVE9QX1BST1BfTkFNRSxcclxuICBUUkFDS19CWV9QUk9QRVJUWV9OQU1FLCBXSURUSF9QUk9QX05BTUUsXHJcbn0gZnJvbSAnLi9jb25zdCc7XHJcbmltcG9ydCB7IElTY3JvbGxFdmVudCwgSVZpcnR1YWxMaXN0Q29sbGVjdGlvbiwgSVZpcnR1YWxMaXN0SXRlbSwgSVZpcnR1YWxMaXN0U3RpY2t5TWFwIH0gZnJvbSAnLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBJZCwgSVNpemUgfSBmcm9tICcuL3R5cGVzJztcclxuaW1wb3J0IHsgSVJlbmRlclZpcnR1YWxMaXN0Q29sbGVjdGlvbiB9IGZyb20gJy4vbW9kZWxzL3JlbmRlci1jb2xsZWN0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgRGlyZWN0aW9uLCBEaXJlY3Rpb25zLCBTbmFwcGluZ01ldGhvZCB9IGZyb20gJy4vZW51bXMnO1xyXG5pbXBvcnQgeyBTY3JvbGxFdmVudCwgVHJhY2tCb3gsIGlzRGlyZWN0aW9uLCB0b2dnbGVDbGFzc05hbWUgfSBmcm9tICcuL3V0aWxzJztcclxuaW1wb3J0IHsgSUdldEl0ZW1Qb3NpdGlvbk9wdGlvbnMsIElVcGRhdGVDb2xsZWN0aW9uT3B0aW9ucywgVFJBQ0tfQk9YX0NIQU5HRV9FVkVOVF9OQU1FIH0gZnJvbSAnLi91dGlscy90cmFja0JveCc7XHJcbmltcG9ydCB7IERpc3Bvc2FibGVDb21wb25lbnQgfSBmcm9tICcuL3V0aWxzL2Rpc3Bvc2FibGVDb21wb25lbnQnO1xyXG5pbXBvcnQgeyBpc1NuYXBwaW5nTWV0aG9kQWR2ZW5jZWQgfSBmcm9tICcuL3V0aWxzL3NuYXBwaW5nLW1ldGhvZCc7XHJcbmltcG9ydCB7IEZJUkVGT1hfU0NST0xMQkFSX09WRVJMQVBfU0laRSwgSVNfRklSRUZPWCB9IGZyb20gJy4vdXRpbHMvYnJvd3Nlcic7XHJcblxyXG4vKipcclxuICogVmlydHVhbCBsaXN0IGNvbXBvbmVudC5cclxuICogTWF4aW11bSBwZXJmb3JtYW5jZSBmb3IgZXh0cmVtZWx5IGxhcmdlIGxpc3RzLlxyXG4gKiBJdCBpcyBiYXNlZCBvbiBhbGdvcml0aG1zIGZvciB2aXJ0dWFsaXphdGlvbiBvZiBzY3JlZW4gb2JqZWN0cy5cclxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0Rqb25ueVgvbmctdmlydHVhbC1saXN0L2Jsb2IvMTQueC9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9uZy12aXJ0dWFsLWxpc3QuY29tcG9uZW50LnRzXHJcbiAqIEBhdXRob3IgRXZnZW5paSBHcmViZW5uaWtvdlxyXG4gKiBAZW1haWwgZGpvbm55eEBnbWFpbC5jb21cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbmctdmlydHVhbC1saXN0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbmctdmlydHVhbC1saXN0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9uZy12aXJ0dWFsLWxpc3QuY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5TaGFkb3dEb20sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ1ZpcnR1YWxMaXN0Q29tcG9uZW50IGV4dGVuZHMgRGlzcG9zYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBwcml2YXRlIHN0YXRpYyBfX25leHRJZDogbnVtYmVyID0gMDtcclxuXHJcbiAgcHJpdmF0ZSBfaWQ6IG51bWJlciA9IE5nVmlydHVhbExpc3RDb21wb25lbnQuX19uZXh0SWQ7XHJcbiAgLyoqXHJcbiAgICogUmVhZG9ubHkuIFJldHVybnMgdGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBjb21wb25lbnQuXHJcbiAgICovXHJcbiAgZ2V0IGlkKCkgeyByZXR1cm4gdGhpcy5faWQ7IH1cclxuXHJcbiAgQFZpZXdDaGlsZCgncmVuZGVyZXJzQ29udGFpbmVyJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXHJcbiAgcHJvdGVjdGVkIF9saXN0Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmIHwgdW5kZWZpbmVkO1xyXG5cclxuICBAVmlld0NoaWxkKCdjb250YWluZXInLCB7IHJlYWQ6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+IH0pXHJcbiAgcHJvdGVjdGVkIF9jb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+IHwgdW5kZWZpbmVkO1xyXG5cclxuICBAVmlld0NoaWxkKCdsaXN0JywgeyByZWFkOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PiB9KVxyXG4gIHByb3RlY3RlZCBfbGlzdDogRWxlbWVudFJlZjxIVE1MVUxpc3RFbGVtZW50PiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQFZpZXdDaGlsZCgnc25hcFJlbmRlcmVyQ29udGFpbmVyJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXHJcbiAgcHJvdGVjdGVkIF9zbmFwQ29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmIHwgdW5kZWZpbmVkO1xyXG5cclxuICBAVmlld0NoaWxkKCdzbmFwcGVkJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXHJcbiAgcHJvdGVjdGVkIF9zbmFwcGVkQ29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmIHwgdW5kZWZpbmVkO1xyXG5cclxuICAvKipcclxuICAgKiBGaXJlcyB3aGVuIHRoZSBsaXN0IGhhcyBiZWVuIHNjcm9sbGVkLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIG9uU2Nyb2xsID0gbmV3IEV2ZW50RW1pdHRlcjxJU2Nyb2xsRXZlbnQ+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpcmVzIHdoZW4gdGhlIGxpc3QgaGFzIGNvbXBsZXRlZCBzY3JvbGxpbmcuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpXHJcbiAgb25TY3JvbGxFbmQgPSBuZXcgRXZlbnRFbWl0dGVyPElTY3JvbGxFdmVudD4oKTtcclxuXHJcblxyXG4gIHByaXZhdGUgXyRpdGVtcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVZpcnR1YWxMaXN0Q29sbGVjdGlvbiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcclxuICByZWFkb25seSAkaXRlbXMgPSB0aGlzLl8kaXRlbXMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX2l0ZW1zVHJhbnNmb3JtID0gKHY6IElWaXJ0dWFsTGlzdENvbGxlY3Rpb24gfCB1bmRlZmluZWQpID0+IHtcclxuICAgIHRoaXMuX3RyYWNrQm94LnJlc2V0Q29sbGVjdGlvbih2LCB0aGlzLl8kaXRlbVNpemUuZ2V0VmFsdWUoKSk7XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBDb2xsZWN0aW9uIG9mIGxpc3QgaXRlbXMuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgaXRlbXModjogSVZpcnR1YWxMaXN0Q29sbGVjdGlvbikge1xyXG4gICAgaWYgKHRoaXMuXyRpdGVtcy5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5faXRlbXNUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJGl0ZW1zLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcblxyXG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH07XHJcbiAgZ2V0IGl0ZW1zKCkgeyByZXR1cm4gdGhpcy5fJGl0ZW1zLmdldFZhbHVlKCkgYXMgSVZpcnR1YWxMaXN0Q29sbGVjdGlvbjsgfVxyXG5cclxuICBwcml2YXRlIF8kc25hcCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oREVGQVVMVF9TTkFQKTtcclxuICByZWFkb25seSAkc25hcCA9IHRoaXMuXyRzbmFwLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICAvKipcclxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgZWxlbWVudHMgd2lsbCBzbmFwLiBEZWZhdWx0IHZhbHVlIGlzIFwidHJ1ZVwiLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNuYXAodjogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuXyRzbmFwLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuXyRzbmFwLm5leHQodik7XHJcblxyXG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH07XHJcbiAgZ2V0IHNuYXAoKSB7IHJldHVybiB0aGlzLl8kc25hcC5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihERUZBVUxUX0VOQUJMRURfQlVGRkVSX09QVElNSVpBVElPTik7XHJcbiAgcmVhZG9ubHkgJGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24gPSB0aGlzLl8kZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbi5hc09ic2VydmFibGUoKTtcclxuICAvKipcclxuICAgKiBFeHBlcmltZW50YWwhXHJcbiAgICogRW5hYmxlcyBidWZmZXIgb3B0aW1pemF0aW9uLlxyXG4gICAqIENhbiBvbmx5IGJlIHVzZWQgaWYgaXRlbXMgaW4gdGhlIGNvbGxlY3Rpb24gYXJlIG5vdCBhZGRlZCBvciB1cGRhdGVkLiBPdGhlcndpc2UsIGFydGlmYWN0cyBpbiB0aGUgZm9ybSBvZiB0d2l0Y2hpbmcgb2YgdGhlIHNjcm9sbCBhcmVhIGFyZSBwb3NzaWJsZS5cclxuICAgKiBXb3JrcyBvbmx5IGlmIHRoZSBwcm9wZXJ0eSBkeW5hbWljID0gdHJ1ZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24odjogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuXyRlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuXyRlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uLm5leHQodik7XHJcblxyXG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH07XHJcbiAgZ2V0IGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24oKSB7IHJldHVybiB0aGlzLl8kZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbi5nZXRWYWx1ZSgpOyB9XHJcblxyXG5cclxuICBwcml2YXRlIF8kaXRlbVJlbmRlcmVyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG4gIHJlYWRvbmx5ICRpdGVtUmVuZGVyZXIgPSB0aGlzLl8kaXRlbVJlbmRlcmVyLmFzT2JzZXJ2YWJsZSgpO1xyXG4gIC8qKlxyXG4gICogUmVuZGVyaW5nIGVsZW1lbnQgdGVtcGxhdGUuXHJcbiAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBpdGVtUmVuZGVyZXIodjogVGVtcGxhdGVSZWY8YW55Pikge1xyXG4gICAgaWYgKHRoaXMuXyRpdGVtUmVuZGVyZXIuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fJGl0ZW1SZW5kZXJlci5uZXh0KHYpO1xyXG5cclxuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9O1xyXG4gIGdldCBpdGVtUmVuZGVyZXIoKSB7IHJldHVybiB0aGlzLl8kaXRlbVJlbmRlcmVyLmdldFZhbHVlKCkgYXMgVGVtcGxhdGVSZWY8YW55PjsgfVxyXG5cclxuICBwcml2YXRlIF8kc3RpY2t5TWFwID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJVmlydHVhbExpc3RTdGlja3lNYXA+KHt9KTtcclxuICByZWFkb25seSAkc3RpY2t5TWFwID0gdGhpcy5fJHN0aWNreU1hcC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGljdGlvbmFyeSB6SW5kZXggYnkgaWQgb2YgdGhlIGxpc3QgZWxlbWVudC4gSWYgdGhlIHZhbHVlIGlzIG5vdCBzZXQgb3IgZXF1YWwgdG8gMCxcclxuICAgKiB0aGVuIGEgc2ltcGxlIGVsZW1lbnQgaXMgZGlzcGxheWVkLCBpZiB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIDAsIHRoZW4gdGhlIHN0aWNreSBwb3NpdGlvbiBtb2RlIGlzIGVuYWJsZWQgZm9yIHRoZSBlbGVtZW50LlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHN0aWNreU1hcCh2OiBJVmlydHVhbExpc3RTdGlja3lNYXApIHtcclxuICAgIGlmICh0aGlzLl8kc3RpY2t5TWFwLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuXyRzdGlja3lNYXAubmV4dCh2KTtcclxuXHJcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfTtcclxuICBnZXQgc3RpY2t5TWFwKCkgeyByZXR1cm4gdGhpcy5fJHN0aWNreU1hcC5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgX2l0ZW1TaXplT3B0aW9ucyA9ICh2OiBudW1iZXIgfCB1bmRlZmluZWQpID0+IHtcclxuICAgIGlmICh2ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfSVRFTV9TSVpFO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdmFsID0gTnVtYmVyKHYpO1xyXG4gICAgcmV0dXJuIE51bWJlci5pc05hTih2YWwpIHx8IHZhbCA8PSAwID8gREVGQVVMVF9JVEVNX1NJWkUgOiB2YWw7XHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBfJGl0ZW1TaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KERFRkFVTFRfSVRFTV9TSVpFKTtcclxuICByZWFkb25seSAkaXRlbVNpemUgPSB0aGlzLl8kaXRlbVNpemUuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIGRpcmVjdGlvbiA9ICd2ZXJ0aWNhbCcsIHRoZW4gdGhlIGhlaWdodCBvZiBhIHR5cGljYWwgZWxlbWVudC4gSWYgZGlyZWN0aW9uID0gJ2hvcml6b250YWwnLCB0aGVuIHRoZSB3aWR0aCBvZiBhIHR5cGljYWwgZWxlbWVudC5cclxuICAgKiBJZ25vcmVkIGlmIHRoZSBkeW5hbWljU2l6ZSBwcm9wZXJ0eSBpcyB0cnVlLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGl0ZW1TaXplKHY6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuXyRpdGVtU2l6ZS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl8kaXRlbVNpemUubmV4dCh0aGlzLl9pdGVtU2l6ZU9wdGlvbnModikpO1xyXG5cclxuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9O1xyXG4gIGdldCBpdGVtU2l6ZSgpIHsgcmV0dXJuIHRoaXMuXyRpdGVtU2l6ZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRkeW5hbWljU2l6ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oREVGQVVMVF9EWU5BTUlDX1NJWkUpO1xyXG4gIHJlYWRvbmx5ICRkeW5hbWljU2l6ZSA9IHRoaXMuXyRkeW5hbWljU2l6ZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgLyoqXHJcbiAgICogSWYgdHJ1ZSB0aGVuIHRoZSBpdGVtcyBpbiB0aGUgbGlzdCBjYW4gaGF2ZSBkaWZmZXJlbnQgc2l6ZXMgYW5kIHRoZSBpdGVtU2l6ZSBwcm9wZXJ0eSBpcyBpZ25vcmVkLlxyXG4gICAqIElmIGZhbHNlIHRoZW4gdGhlIGl0ZW1zIGluIHRoZSBsaXN0IGhhdmUgYSBmaXhlZCBzaXplIHNwZWNpZmllZCBieSB0aGUgaXRlbVNpemUgcHJvcGVydHkuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGZhbHNlLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGR5bmFtaWNTaXplKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kZHluYW1pY1NpemUuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fJGR5bmFtaWNTaXplLm5leHQodik7XHJcblxyXG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH07XHJcbiAgZ2V0IGR5bmFtaWNTaXplKCkgeyByZXR1cm4gdGhpcy5fJGR5bmFtaWNTaXplLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGRpcmVjdGlvbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGlyZWN0aW9uPihERUZBVUxUX0RJUkVDVElPTik7XHJcbiAgcmVhZG9ubHkgJGRpcmVjdGlvbiA9IHRoaXMuXyRkaXJlY3Rpb24uYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIERldGVybWluZXMgdGhlIGRpcmVjdGlvbiBpbiB3aGljaCBlbGVtZW50cyBhcmUgcGxhY2VkLiBEZWZhdWx0IHZhbHVlIGlzIFwidmVydGljYWxcIi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBkaXJlY3Rpb24odjogRGlyZWN0aW9uKSB7XHJcbiAgICBpZiAodGhpcy5fJGRpcmVjdGlvbi5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl8kZGlyZWN0aW9uLm5leHQodik7XHJcblxyXG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH07XHJcbiAgZ2V0IGRpcmVjdGlvbigpIHsgcmV0dXJuIHRoaXMuXyRkaXJlY3Rpb24uZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kaXRlbXNPZmZzZXQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oREVGQVVMVF9JVEVNU19PRkZTRVQpO1xyXG4gIHJlYWRvbmx5ICRpdGVtc09mZnNldCA9IHRoaXMuXyRpdGVtc09mZnNldC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgLyoqXHJcbiAgICogTnVtYmVyIG9mIGVsZW1lbnRzIG91dHNpZGUgdGhlIHNjb3BlIG9mIHZpc2liaWxpdHkuIERlZmF1bHQgdmFsdWUgaXMgMi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBpdGVtc09mZnNldCh2OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLl8kaXRlbXNPZmZzZXQuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fJGl0ZW1zT2Zmc2V0Lm5leHQodik7XHJcbiAgfTtcclxuICBnZXQgaXRlbXNPZmZzZXQoKSB7IHJldHVybiB0aGlzLl8kaXRlbXNPZmZzZXQuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kdHJhY2tCeSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPihUUkFDS19CWV9QUk9QRVJUWV9OQU1FKTtcclxuICByZWFkb25seSAkdHJhY2tCeSA9IHRoaXMuXyR0cmFja0J5LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgYnkgd2hpY2ggdHJhY2tpbmcgaXMgcGVyZm9ybWVkXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgdHJhY2tCeSh2OiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLl8kdHJhY2tCeS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl8kdHJhY2tCeS5uZXh0KHYpO1xyXG4gIH07XHJcbiAgZ2V0IHRyYWNrQnkoKSB7IHJldHVybiB0aGlzLl8kdHJhY2tCeS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgX2lzVmVydGljYWwgPSB0aGlzLmdldElzVmVydGljYWwoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHNuYXBwaW5nTWV0aG9kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTbmFwcGluZ01ldGhvZD4oREVGQVVMVF9TTkFQUElOR19NRVRIT0QpO1xyXG4gIHJlYWRvbmx5ICRzbmFwcGluZ01ldGhvZCA9IHRoaXMuXyRzbmFwcGluZ01ldGhvZC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgLyoqXHJcbiAgICogU25hcHBpbmcgbWV0aG9kLlxyXG4gICAqICdkZWZhdWx0JyAtIE5vcm1hbCBncm91cCByZW5kZXJpbmcuXHJcbiAgICogJ2FkdmFuY2VkJyAtIFRoZSBncm91cCBpcyByZW5kZXJlZCBvbiBhIHRyYW5zcGFyZW50IGJhY2tncm91bmQuIExpc3QgaXRlbXMgYmVsb3cgdGhlIGdyb3VwIGFyZSBub3QgcmVuZGVyZWQuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc25hcHBpbmdNZXRob2QodjogU25hcHBpbmdNZXRob2QpIHtcclxuICAgIGlmICh0aGlzLl8kc25hcHBpbmdNZXRob2QuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fJHNuYXBwaW5nTWV0aG9kLm5leHQodik7XHJcbiAgfTtcclxuICBnZXQgc25hcHBpbmdNZXRob2QoKSB7IHJldHVybiB0aGlzLl8kc25hcHBpbmdNZXRob2QuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcm90ZWN0ZWQgX2lzU25hcHBpbmdNZXRob2RBZHZhbmNlZDogYm9vbGVhbiA9IHRoaXMuZ2V0SXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkKCk7XHJcbiAgZ2V0IGlzU25hcHBpbmdNZXRob2RBZHZhbmNlZCgpIHsgcmV0dXJuIHRoaXMuX2lzU25hcHBpbmdNZXRob2RBZHZhbmNlZDsgfVxyXG5cclxuICBwcm90ZWN0ZWQgX2Rpc3BsYXlDb21wb25lbnRzOiBBcnJheTxDb21wb25lbnRSZWY8TmdWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQ+PiA9IFtdO1xyXG5cclxuICBwcm90ZWN0ZWQgX3NuYXBlZERpc3BsYXlDb21wb25lbnQ6IENvbXBvbmVudFJlZjxOZ1ZpcnR1YWxMaXN0SXRlbUNvbXBvbmVudD4gfCB1bmRlZmluZWQ7XHJcblxyXG4gIHByb3RlY3RlZCBfJGJvdW5kcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVNpemUgfCBudWxsPihudWxsKTtcclxuXHJcbiAgcHJvdGVjdGVkIF8kc2Nyb2xsU2l6ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuXHJcbiAgcHJpdmF0ZSBfcmVzaXplT2JzZXJ2ZXI6IFJlc2l6ZU9ic2VydmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIHByaXZhdGUgX3Jlc2l6ZVNuYXBwZWRDb21wb25lbnRIYW5kbGVyID0gKCkgPT4ge1xyXG4gICAgY29uc3QgbGlzdCA9IHRoaXMuX2xpc3QsIGNvbnRhaW5lciA9IHRoaXMuX2NvbnRhaW5lciwgc25hcHBlZENvbXBvbmVudCA9IHRoaXMuX3NuYXBlZERpc3BsYXlDb21wb25lbnQ/Lmluc3RhbmNlO1xyXG4gICAgaWYgKGxpc3QgJiYgY29udGFpbmVyICYmIHNuYXBwZWRDb21wb25lbnQpIHtcclxuICAgICAgY29uc3QgaXNWZXJ0aWNhbCA9IHRoaXMuX2lzVmVydGljYWwsIGxpc3RCb3VuZHMgPSBsaXN0Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIGxpc3RFbGVtZW50ID0gbGlzdD8ubmF0aXZlRWxlbWVudCxcclxuICAgICAgICB7IHdpZHRoOiBsV2lkdGgsIGhlaWdodDogbEhlaWdodCB9ID0gbGlzdEVsZW1lbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpID8/IHsgd2lkdGg6IDAsIGhlaWdodDogMCB9LFxyXG4gICAgICAgIHsgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy5fJGJvdW5kcy5nZXRWYWx1ZSgpID8/IHsgd2lkdGg6IDAsIGhlaWdodDogMCB9LFxyXG4gICAgICAgIGlzU2Nyb2xsYWJsZSA9IGlzVmVydGljYWwgPyBjb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQgPiAwIDogY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsV2lkdGggPiAwO1xyXG5cclxuICAgICAgbGV0IHNjcm9sbEJhclNpemUgPSBpc1ZlcnRpY2FsID8gd2lkdGggLSBsV2lkdGggOiBoZWlnaHQgLSBsSGVpZ2h0LCBpc1Njcm9sbEJhck92ZXJsYXAgPSB0cnVlLCBvdmVybGFwU2Nyb2xsQmFyU2l6ZSA9IDA7XHJcbiAgICAgIGlmIChzY3JvbGxCYXJTaXplID09PSAwICYmIGlzU2Nyb2xsYWJsZSkge1xyXG4gICAgICAgIGlzU2Nyb2xsQmFyT3ZlcmxhcCA9IHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChpc1Njcm9sbEJhck92ZXJsYXAgJiYgSVNfRklSRUZPWCkge1xyXG4gICAgICAgIHNjcm9sbEJhclNpemUgPSBvdmVybGFwU2Nyb2xsQmFyU2l6ZSA9IEZJUkVGT1hfU0NST0xMQkFSX09WRVJMQVBfU0laRTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgeyB3aWR0aDogc1dpZHRoLCBoZWlnaHQ6IHNIZWlnaHQgfSA9IHNuYXBwZWRDb21wb25lbnQuZ2V0Qm91bmRzKCkgPz8geyB3aWR0aDogMCwgaGVpZ2h0OiAwIH07XHJcbiAgICAgIHNuYXBwZWRDb21wb25lbnQuZWxlbWVudC5zdHlsZS5jbGlwUGF0aCA9IGBwYXRoKFwiTSAwIDAgTCAwICR7c0hlaWdodH0gTCAke3NXaWR0aCAtIG92ZXJsYXBTY3JvbGxCYXJTaXplfSAke3NIZWlnaHR9IEwgJHtzV2lkdGggLSBvdmVybGFwU2Nyb2xsQmFyU2l6ZX0gMCBaXCIpYDtcclxuXHJcbiAgICAgIHNuYXBwZWRDb21wb25lbnQucmVndWxhckxlbmd0aCA9IGAke2lzVmVydGljYWwgPyBsaXN0Qm91bmRzLndpZHRoIDogbGlzdEJvdW5kcy5oZWlnaHR9JHtQWH1gO1xyXG4gICAgICBjb25zdCBjb250YWluZXJFbGVtZW50ID0gY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsIGRlbHRhID0gc25hcHBlZENvbXBvbmVudC5pdGVtPy5tZWFzdXJlcy5kZWx0YSA/PyAwO1xyXG5cclxuICAgICAgbGV0IGxlZnQ6IG51bWJlciwgcmlnaHQ6IG51bWJlciwgdG9wOiBudW1iZXIsIGJvdHRvbTogbnVtYmVyO1xyXG4gICAgICBpZiAoaXNWZXJ0aWNhbCkge1xyXG4gICAgICAgIGxlZnQgPSAwO1xyXG4gICAgICAgIHJpZ2h0ID0gd2lkdGggLSBzY3JvbGxCYXJTaXplO1xyXG4gICAgICAgIHRvcCA9IHNIZWlnaHQ7XHJcbiAgICAgICAgYm90dG9tID0gaGVpZ2h0O1xyXG4gICAgICAgIGNvbnRhaW5lckVsZW1lbnQuc3R5bGUuY2xpcFBhdGggPSBgcGF0aChcIk0gMCAke3RvcCArIGRlbHRhfSBMIDAgJHtoZWlnaHR9IEwgJHt3aWR0aH0gJHtoZWlnaHR9IEwgJHt3aWR0aH0gMCBMICR7cmlnaHR9IDAgTCAke3JpZ2h0fSAke3RvcCArIGRlbHRhfSBaXCIpYDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZWZ0ID0gc1dpZHRoO1xyXG4gICAgICAgIHJpZ2h0ID0gd2lkdGg7XHJcbiAgICAgICAgdG9wID0gMDtcclxuICAgICAgICBib3R0b20gPSBoZWlnaHQgLSBzY3JvbGxCYXJTaXplO1xyXG4gICAgICAgIGNvbnRhaW5lckVsZW1lbnQuc3R5bGUuY2xpcFBhdGggPSBgcGF0aChcIk0gJHtsZWZ0ICsgZGVsdGF9IDAgTCAke2xlZnQgKyBkZWx0YX0gJHtib3R0b219IEwgMCAke2JvdHRvbX0gTCAwICR7aGVpZ2h0fSBMICR7d2lkdGh9ICR7aGVpZ2h0fSBMICR7d2lkdGh9IDAgWlwiKWA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG5cclxuICBwcml2YXRlIF9yZXNpemVTbmFwcGVkT2JzZXJ2ZXI6IFJlc2l6ZU9ic2VydmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIHByaXZhdGUgX29uUmVzaXplSGFuZGxlciA9ICgpID0+IHtcclxuICAgIGNvbnN0IGJvdW5kcyA9IHRoaXMuX2NvbnRhaW5lcj8ubmF0aXZlRWxlbWVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICBpZiAoYm91bmRzKSB7XHJcbiAgICAgIHRoaXMuXyRib3VuZHMubmV4dCh7IHdpZHRoOiBib3VuZHMud2lkdGgsIGhlaWdodDogYm91bmRzLmhlaWdodCB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuXyRib3VuZHMubmV4dCh7IHdpZHRoOiBERUZBVUxUX0xJU1RfU0laRSwgaGVpZ2h0OiBERUZBVUxUX0xJU1RfU0laRSB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5faXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlUmVndWxhclJlbmRlcmVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9vblNjcm9sbEhhbmRsZXIgPSAoZT86IEV2ZW50KSA9PiB7XHJcbiAgICB0aGlzLmNsZWFyU2Nyb2xsVG9SZXBlYXRFeGVjdXRpb25UaW1lb3V0KCk7XHJcblxyXG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5fY29udGFpbmVyPy5uYXRpdmVFbGVtZW50O1xyXG4gICAgaWYgKGNvbnRhaW5lcikge1xyXG4gICAgICBjb25zdCBzY3JvbGxTaXplID0gKHRoaXMuX2lzVmVydGljYWwgPyBjb250YWluZXIuc2Nyb2xsVG9wIDogY29udGFpbmVyLnNjcm9sbExlZnQpO1xyXG5cclxuICAgICAgdGhpcy5fJHNjcm9sbFNpemUubmV4dChzY3JvbGxTaXplKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgXyRpbml0aWFsaXplZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICByZWFkb25seSAkaW5pdGlhbGl6ZWQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XHJcblxyXG4gIC8qKlxyXG4gICAqIERpY3Rpb25hcnkgb2YgZWxlbWVudCBzaXplcyBieSB0aGVpciBpZFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3RyYWNrQm94ID0gbmV3IFRyYWNrQm94KHRoaXMudHJhY2tCeSk7XHJcblxyXG4gIHByaXZhdGUgX29uVHJhY2tCb3hDaGFuZ2VIYW5kbGVyID0gKHY6IG51bWJlcikgPT4ge1xyXG4gICAgdGhpcy5fJGNhY2hlVmVyc2lvbi5uZXh0KHYpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfJGNhY2hlVmVyc2lvbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigtMSk7XHJcbiAgZ2V0ICRjYWNoZVZlcnNpb24oKSB7IHJldHVybiB0aGlzLl8kY2FjaGVWZXJzaW9uLmFzT2JzZXJ2YWJsZSgpOyB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+XHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgTmdWaXJ0dWFsTGlzdENvbXBvbmVudC5fX25leHRJZCA9IE5nVmlydHVhbExpc3RDb21wb25lbnQuX19uZXh0SWQgKyAxID09PSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUlxyXG4gICAgICA/IDAgOiBOZ1ZpcnR1YWxMaXN0Q29tcG9uZW50Ll9fbmV4dElkICsgMTtcclxuICAgIHRoaXMuX2lkID0gTmdWaXJ0dWFsTGlzdENvbXBvbmVudC5fX25leHRJZDtcclxuXHJcbiAgICB0aGlzLl8kaW5pdGlhbGl6ZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICAgIHRoaXMuJGluaXRpYWxpemVkID0gdGhpcy5fJGluaXRpYWxpemVkLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICAgIHRoaXMuX3RyYWNrQm94LmRpc3BsYXlDb21wb25lbnRzID0gdGhpcy5fZGlzcGxheUNvbXBvbmVudHM7XHJcblxyXG4gICAgY29uc3QgJHRyYWNrQnkgPSB0aGlzLiR0cmFja0J5O1xyXG5cclxuICAgICR0cmFja0J5LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tCb3gudHJhY2tpbmdQcm9wZXJ0eU5hbWUgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJGJvdW5kcyA9IHRoaXMuXyRib3VuZHMuYXNPYnNlcnZhYmxlKCkucGlwZShcclxuICAgICAgZmlsdGVyKGIgPT4gISFiKSxcclxuICAgICksICRpdGVtcyA9IHRoaXMuJGl0ZW1zLnBpcGUoXHJcbiAgICAgIG1hcChpID0+ICFpID8gW10gOiBpKSxcclxuICAgICksICRzY3JvbGxTaXplID0gdGhpcy5fJHNjcm9sbFNpemUuYXNPYnNlcnZhYmxlKCksXHJcbiAgICAgICRpdGVtU2l6ZSA9IHRoaXMuJGl0ZW1TaXplLnBpcGUoXHJcbiAgICAgICAgbWFwKHYgPT4gdiA8PSAwID8gREVGQVVMVF9JVEVNX1NJWkUgOiB2KSxcclxuICAgICAgKSxcclxuICAgICAgJGl0ZW1zT2Zmc2V0ID0gdGhpcy4kaXRlbXNPZmZzZXQucGlwZShcclxuICAgICAgICBtYXAodiA9PiB2IDwgMCA/IERFRkFVTFRfSVRFTVNfT0ZGU0VUIDogdiksXHJcbiAgICAgICksXHJcbiAgICAgICRzdGlja3lNYXAgPSB0aGlzLiRzdGlja3lNYXAucGlwZShcclxuICAgICAgICBtYXAodiA9PiAhdiA/IHt9IDogdiksXHJcbiAgICAgICksXHJcbiAgICAgICRzbmFwID0gdGhpcy4kc25hcCxcclxuICAgICAgJGlzVmVydGljYWwgPSB0aGlzLiRkaXJlY3Rpb24ucGlwZShcclxuICAgICAgICBtYXAodiA9PiB0aGlzLmdldElzVmVydGljYWwodiB8fCBERUZBVUxUX0RJUkVDVElPTikpLFxyXG4gICAgICApLFxyXG4gICAgICAkZHluYW1pY1NpemUgPSB0aGlzLiRkeW5hbWljU2l6ZSxcclxuICAgICAgJGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24gPSB0aGlzLiRlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uLFxyXG4gICAgICAkc25hcHBpbmdNZXRob2QgPSB0aGlzLiRzbmFwcGluZ01ldGhvZC5waXBlKFxyXG4gICAgICAgIG1hcCh2ID0+IHRoaXMuZ2V0SXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkKHYgfHwgREVGQVVMVF9TTkFQUElOR19NRVRIT0QpKSxcclxuICAgICAgKSxcclxuICAgICAgJGNhY2hlVmVyc2lvbiA9IHRoaXMuJGNhY2hlVmVyc2lvbjtcclxuXHJcbiAgICAkaXNWZXJ0aWNhbC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX2lzVmVydGljYWwgPSB2O1xyXG4gICAgICAgIGNvbnN0IGVsOiBIVE1MRWxlbWVudCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcclxuICAgICAgICB0b2dnbGVDbGFzc05hbWUoZWwsIHYgPyBDTEFTU19MSVNUX1ZFUlRJQ0FMIDogQ0xBU1NfTElTVF9IT1JJWk9OVEFMLCB2ID8gQ0xBU1NfTElTVF9IT1JJWk9OVEFMIDogQ0xBU1NfTElTVF9WRVJUSUNBTCk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkc25hcHBpbmdNZXRob2QucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQgPSB0aGlzLl90cmFja0JveC5pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGR5bmFtaWNTaXplLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAoZHluYW1pY1NpemUgPT4ge1xyXG4gICAgICAgIHRoaXMubGlzdGVuQ2FjaGVDaGFuZ2VzSWZOZWVkKGR5bmFtaWNTaXplKTtcclxuICAgICAgfSlcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29tYmluZUxhdGVzdChbdGhpcy4kaW5pdGlhbGl6ZWQsICRib3VuZHMsICRpdGVtcywgJHN0aWNreU1hcCwgJHNjcm9sbFNpemUsICRpdGVtU2l6ZSxcclxuICAgICAgJGl0ZW1zT2Zmc2V0LCAkc25hcCwgJGlzVmVydGljYWwsICRkeW5hbWljU2l6ZSwgJGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24sICRjYWNoZVZlcnNpb24sXHJcbiAgICBdKS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgZmlsdGVyKChbaW5pdGlhbGl6ZWRdKSA9PiAhIWluaXRpYWxpemVkKSxcclxuICAgICAgc3dpdGNoTWFwKChbLFxyXG4gICAgICAgIGJvdW5kcywgaXRlbXMsIHN0aWNreU1hcCwgc2Nyb2xsU2l6ZSwgaXRlbVNpemUsXHJcbiAgICAgICAgaXRlbXNPZmZzZXQsIHNuYXAsIGlzVmVydGljYWwsIGR5bmFtaWNTaXplLCBlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uLCBjYWNoZVZlcnNpb24sXHJcbiAgICAgIF0pID0+IHtcclxuICAgICAgICBsZXQgYWN0dWFsU2Nyb2xsU2l6ZSA9ICh0aGlzLl9pc1ZlcnRpY2FsID8gdGhpcy5fY29udGFpbmVyPy5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA/PyAwIDogdGhpcy5fY29udGFpbmVyPy5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQpID8/IDA7XHJcbiAgICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBib3VuZHMhLFxyXG4gICAgICAgICAgb3B0czogSVVwZGF0ZUNvbGxlY3Rpb25PcHRpb25zPElWaXJ0dWFsTGlzdEl0ZW0sIElWaXJ0dWFsTGlzdENvbGxlY3Rpb24+ID0ge1xyXG4gICAgICAgICAgICBib3VuZHM6IHsgd2lkdGgsIGhlaWdodCB9LCBkeW5hbWljU2l6ZSwgaXNWZXJ0aWNhbCwgaXRlbVNpemUsXHJcbiAgICAgICAgICAgIGl0ZW1zT2Zmc2V0LCBzY3JvbGxTaXplOiBhY3R1YWxTY3JvbGxTaXplLCBzbmFwLCBlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHsgZGlzcGxheUl0ZW1zLCB0b3RhbFNpemUgfSA9IHRoaXMuX3RyYWNrQm94LnVwZGF0ZUNvbGxlY3Rpb24oaXRlbXMsIHN0aWNreU1hcCwgb3B0cyk7XHJcblxyXG4gICAgICAgIHRoaXMucmVzZXRCb3VuZHNTaXplKGlzVmVydGljYWwsIHRvdGFsU2l6ZSk7XHJcblxyXG4gICAgICAgIHRoaXMuY3JlYXRlRGlzcGxheUNvbXBvbmVudHNJZk5lZWQoZGlzcGxheUl0ZW1zKTtcclxuXHJcbiAgICAgICAgdGhpcy50cmFja2luZygpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5faXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkKSB7XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZVJlZ3VsYXJSZW5kZXJlcigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5fY29udGFpbmVyO1xyXG5cclxuICAgICAgICBpZiAoY29udGFpbmVyKSB7XHJcbiAgICAgICAgICBjb25zdCBkZWx0YSA9IHRoaXMuX3RyYWNrQm94LmRlbHRhO1xyXG4gICAgICAgICAgYWN0dWFsU2Nyb2xsU2l6ZSA9IGFjdHVhbFNjcm9sbFNpemUgKyBkZWx0YTtcclxuXHJcbiAgICAgICAgICB0aGlzLl90cmFja0JveC5jbGVhckRlbHRhKCk7XHJcblxyXG4gICAgICAgICAgaWYgKHNjcm9sbFNpemUgIT09IGFjdHVhbFNjcm9sbFNpemUpIHtcclxuICAgICAgICAgICAgY29uc3QgcGFyYW1zOiBTY3JvbGxUb09wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgW3RoaXMuX2lzVmVydGljYWwgPyBUT1BfUFJPUF9OQU1FIDogTEVGVF9QUk9QX05BTUVdOiBhY3R1YWxTY3JvbGxTaXplLFxyXG4gICAgICAgICAgICAgIGJlaGF2aW9yOiBCRUhBVklPUl9JTlNUQU5UIGFzIFNjcm9sbEJlaGF2aW9yXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBjb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUbyhwYXJhbXMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG9mKGRpc3BsYXlJdGVtcyk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLiRpbml0aWFsaXplZCwgdGhpcy4kaXRlbVJlbmRlcmVyXSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIGZpbHRlcigoW2luaXRpYWxpemVkXSkgPT4gISFpbml0aWFsaXplZCksXHJcbiAgICAgIHRhcCgoWywgaXRlbVJlbmRlcmVyXSkgPT4ge1xyXG4gICAgICAgIHRoaXMucmVzZXRSZW5kZXJlcnMoaXRlbVJlbmRlcmVyKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKiogQGludGVybmFsICovXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLl8kaW5pdGlhbGl6ZWQubmV4dCh0cnVlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbGlzdGVuQ2FjaGVDaGFuZ2VzSWZOZWVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgaWYgKCF0aGlzLl90cmFja0JveC5oYXNFdmVudExpc3RlbmVyKFRSQUNLX0JPWF9DSEFOR0VfRVZFTlRfTkFNRSwgdGhpcy5fb25UcmFja0JveENoYW5nZUhhbmRsZXIpKSB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tCb3guYWRkRXZlbnRMaXN0ZW5lcihUUkFDS19CT1hfQ0hBTkdFX0VWRU5UX05BTUUsIHRoaXMuX29uVHJhY2tCb3hDaGFuZ2VIYW5kbGVyKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuX3RyYWNrQm94Lmhhc0V2ZW50TGlzdGVuZXIoVFJBQ0tfQk9YX0NIQU5HRV9FVkVOVF9OQU1FLCB0aGlzLl9vblRyYWNrQm94Q2hhbmdlSGFuZGxlcikpIHtcclxuICAgICAgICB0aGlzLl90cmFja0JveC5yZW1vdmVFdmVudExpc3RlbmVyKFRSQUNLX0JPWF9DSEFOR0VfRVZFTlRfTkFNRSwgdGhpcy5fb25UcmFja0JveENoYW5nZUhhbmRsZXIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldElzU25hcHBpbmdNZXRob2RBZHZhbmNlZChtPzogU25hcHBpbmdNZXRob2QpIHtcclxuICAgIGNvbnN0IG1ldGhvZCA9IG0gfHwgdGhpcy5fJHNuYXBwaW5nTWV0aG9kLmdldFZhbHVlKCk7XHJcbiAgICByZXR1cm4gaXNTbmFwcGluZ01ldGhvZEFkdmVuY2VkKG1ldGhvZCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldElzVmVydGljYWwoZD86IERpcmVjdGlvbikge1xyXG4gICAgY29uc3QgZGlyID0gZCB8fCB0aGlzLmRpcmVjdGlvbjtcclxuICAgIHJldHVybiBpc0RpcmVjdGlvbihkaXIsIERpcmVjdGlvbnMuVkVSVElDQUwpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY29tcG9uZW50c1Jlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcclxuICAgIHRoaXMuX3RyYWNrQm94LmNoYW5nZXMoKTtcclxuICB9KTtcclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVEaXNwbGF5Q29tcG9uZW50c0lmTmVlZChkaXNwbGF5SXRlbXM6IElSZW5kZXJWaXJ0dWFsTGlzdENvbGxlY3Rpb24gfCBudWxsKSB7XHJcbiAgICBpZiAoIWRpc3BsYXlJdGVtcyB8fCAhdGhpcy5fbGlzdENvbnRhaW5lclJlZikge1xyXG4gICAgICB0aGlzLl90cmFja0JveC5zZXREaXNwbGF5T2JqZWN0SW5kZXhNYXBCeUlkKHt9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQgJiYgdGhpcy5zbmFwKSB7XHJcbiAgICAgIGlmICghdGhpcy5fc25hcGVkRGlzcGxheUNvbXBvbmVudCAmJiB0aGlzLl9zbmFwQ29udGFpbmVyUmVmKSB7XHJcbiAgICAgICAgY29uc3QgY29tcCA9IHRoaXMuX3NuYXBDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KE5nVmlydHVhbExpc3RJdGVtQ29tcG9uZW50KTtcclxuICAgICAgICBjb21wLmluc3RhbmNlLnJlZ3VsYXIgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX3NuYXBlZERpc3BsYXlDb21wb25lbnQgPSBjb21wO1xyXG4gICAgICAgIHRoaXMuX3RyYWNrQm94LnNuYXBlZERpc3BsYXlDb21wb25lbnQgPSB0aGlzLl9zbmFwZWREaXNwbGF5Q29tcG9uZW50O1xyXG5cclxuICAgICAgICB0aGlzLl9yZXNpemVTbmFwcGVkT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIodGhpcy5fcmVzaXplU25hcHBlZENvbXBvbmVudEhhbmRsZXIpO1xyXG4gICAgICAgIHRoaXMuX3Jlc2l6ZVNuYXBwZWRPYnNlcnZlci5vYnNlcnZlKGNvbXAuaW5zdGFuY2UuZWxlbWVudCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl90cmFja0JveC5pdGVtcyA9IGRpc3BsYXlJdGVtcztcclxuXHJcbiAgICBjb25zdCBfbGlzdENvbnRhaW5lclJlZiA9IHRoaXMuX2xpc3RDb250YWluZXJSZWY7XHJcblxyXG4gICAgY29uc3QgbWF4TGVuZ3RoID0gZGlzcGxheUl0ZW1zLmxlbmd0aCwgY29tcG9uZW50cyA9IHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzO1xyXG5cclxuICAgIHdoaWxlIChjb21wb25lbnRzLmxlbmd0aCA8IG1heExlbmd0aCkge1xyXG4gICAgICBpZiAoX2xpc3RDb250YWluZXJSZWYpIHtcclxuICAgICAgICBjb25zdCBjb21wID0gX2xpc3RDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KE5nVmlydHVhbExpc3RJdGVtQ29tcG9uZW50KTtcclxuICAgICAgICBjb21wb25lbnRzLnB1c2goY29tcCk7XHJcblxyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudHNSZXNpemVPYnNlcnZlci5vYnNlcnZlKGNvbXAuaW5zdGFuY2UuZWxlbWVudCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlc2V0UmVuZGVyZXJzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVJlZ3VsYXJSZW5kZXJlcigpIHtcclxuICAgIHRoaXMuX3Jlc2l6ZVNuYXBwZWRDb21wb25lbnRIYW5kbGVyKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc2V0UmVuZGVyZXJzKGl0ZW1SZW5kZXJlcj86IFRlbXBsYXRlUmVmPEhUTUxFbGVtZW50Pikge1xyXG4gICAgY29uc3QgZG9NYXA6IHsgW2lkOiBudW1iZXJdOiBudW1iZXIgfSA9IHt9O1xyXG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSB0aGlzLl9kaXNwbGF5Q29tcG9uZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzW2ldO1xyXG4gICAgICBpdGVtLmluc3RhbmNlLnJlbmRlcmVyID0gaXRlbVJlbmRlcmVyIHx8IHRoaXMuaXRlbVJlbmRlcmVyO1xyXG4gICAgICBkb01hcFtpdGVtLmluc3RhbmNlLmlkXSA9IGk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2lzU25hcHBpbmdNZXRob2RBZHZhbmNlZCAmJiB0aGlzLnNuYXAgJiYgdGhpcy5fc25hcGVkRGlzcGxheUNvbXBvbmVudCAmJiB0aGlzLl9zbmFwQ29udGFpbmVyUmVmKSB7XHJcbiAgICAgIGNvbnN0IGNvbXAgPSB0aGlzLl9zbmFwZWREaXNwbGF5Q29tcG9uZW50O1xyXG4gICAgICBjb21wLmluc3RhbmNlLnJlbmRlcmVyID0gaXRlbVJlbmRlcmVyIHx8IHRoaXMuaXRlbVJlbmRlcmVyO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3RyYWNrQm94LnNldERpc3BsYXlPYmplY3RJbmRleE1hcEJ5SWQoZG9NYXApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVHJhY2tpbmcgYnkgaWRcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgdHJhY2tpbmcoKSB7XHJcbiAgICB0aGlzLl90cmFja0JveC50cmFjaygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNldEJvdW5kc1NpemUoaXNWZXJ0aWNhbDogYm9vbGVhbiwgdG90YWxTaXplOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGwgPSB0aGlzLl9saXN0O1xyXG4gICAgaWYgKGwpIHtcclxuICAgICAgbC5uYXRpdmVFbGVtZW50LnN0eWxlW2lzVmVydGljYWwgPyBIRUlHSFRfUFJPUF9OQU1FIDogV0lEVEhfUFJPUF9OQU1FXSA9IGAke3RvdGFsU2l6ZX0ke1BYfWA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgYW4gZWxlbWVudCB3aXRoIGEgZ2l2ZW4gaWRcclxuICAgKi9cclxuICBnZXRJdGVtQm91bmRzKGlkOiBJZCk6IElTaXplIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl90cmFja0JveC5nZXRJdGVtQm91bmRzKGlkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBtZXRob2Qgc2Nyb2xscyB0aGUgbGlzdCB0byB0aGUgZWxlbWVudCB3aXRoIHRoZSBnaXZlbiBpZCBhbmQgcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHNjcm9sbGVkIGFyZWEuXHJcbiAgICogQmVoYXZpb3IgYWNjZXB0cyB0aGUgdmFsdWVzIOKAi+KAi1wiYXV0b1wiLCBcImluc3RhbnRcIiBhbmQgXCJzbW9vdGhcIi5cclxuICAgKi9cclxuICBzY3JvbGxUbyhpZDogSWQsIGJlaGF2aW9yOiBTY3JvbGxCZWhhdmlvciA9IEJFSEFWSU9SX0FVVE8gYXMgU2Nyb2xsQmVoYXZpb3IpIHtcclxuICAgIHRoaXMuc2Nyb2xsVG9FeGVjdXRvcihpZCwgYmVoYXZpb3IpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2Nyb2xsVG9SZXBlYXRFeGVjdXRpb25UaW1lb3V0OiBhbnk7XHJcblxyXG4gIHByaXZhdGUgY2xlYXJTY3JvbGxUb1JlcGVhdEV4ZWN1dGlvblRpbWVvdXQoKSB7XHJcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fc2Nyb2xsVG9SZXBlYXRFeGVjdXRpb25UaW1lb3V0KTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBzY3JvbGxUb0V4ZWN1dG9yKGlkOiBJZCwgYmVoYXZpb3I6IFNjcm9sbEJlaGF2aW9yLCBpdGVyYXRpb246IG51bWJlciA9IDAsIGlzTGFzdEl0ZXJhdGlvbiA9IGZhbHNlKSB7XHJcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuaXRlbXM7XHJcbiAgICBpZiAoIWl0ZW1zIHx8ICFpdGVtcy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGR5bmFtaWNTaXplID0gdGhpcy5keW5hbWljU2l6ZSwgY29udGFpbmVyID0gdGhpcy5fY29udGFpbmVyLCBpdGVtU2l6ZSA9IHRoaXMuaXRlbVNpemU7XHJcbiAgICBpZiAoY29udGFpbmVyKSB7XHJcbiAgICAgIHRoaXMuY2xlYXJTY3JvbGxUb1JlcGVhdEV4ZWN1dGlvblRpbWVvdXQoKTtcclxuXHJcbiAgICAgIGlmIChkeW5hbWljU2l6ZSkge1xyXG4gICAgICAgIGlmIChjb250YWluZXIpIHtcclxuICAgICAgICAgIGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoU0NST0xMLCB0aGlzLl9vblNjcm9sbEhhbmRsZXIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSB0aGlzLl8kYm91bmRzLmdldFZhbHVlKCkgfHwgeyB3aWR0aDogMCwgaGVpZ2h0OiAwIH0sXHJcbiAgICAgICAgICBzdGlja3lNYXAgPSB0aGlzLnN0aWNreU1hcCwgaXRlbXMgPSB0aGlzLml0ZW1zLCBpc1ZlcnRpY2FsID0gdGhpcy5faXNWZXJ0aWNhbCwgZGVsdGEgPSB0aGlzLl90cmFja0JveC5kZWx0YSxcclxuICAgICAgICAgIG9wdHM6IElHZXRJdGVtUG9zaXRpb25PcHRpb25zPElWaXJ0dWFsTGlzdEl0ZW0sIElWaXJ0dWFsTGlzdENvbGxlY3Rpb24+ID0ge1xyXG4gICAgICAgICAgICBib3VuZHM6IHsgd2lkdGgsIGhlaWdodCB9LCBjb2xsZWN0aW9uOiBpdGVtcywgZHluYW1pY1NpemUsIGlzVmVydGljYWw6IHRoaXMuX2lzVmVydGljYWwsIGl0ZW1TaXplLFxyXG4gICAgICAgICAgICBpdGVtc09mZnNldDogdGhpcy5pdGVtc09mZnNldCwgc2Nyb2xsU2l6ZTogKGlzVmVydGljYWwgPyBjb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgOiBjb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0KSArIGRlbHRhLFxyXG4gICAgICAgICAgICBzbmFwOiB0aGlzLnNuYXAsIGZyb21JdGVtSWQ6IGlkLCBlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uOiB0aGlzLmVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgc2Nyb2xsU2l6ZSA9IHRoaXMuX3RyYWNrQm94LmdldEl0ZW1Qb3NpdGlvbihpZCwgc3RpY2t5TWFwLCBvcHRzKSxcclxuICAgICAgICAgIHBhcmFtczogU2Nyb2xsVG9PcHRpb25zID0geyBbaXNWZXJ0aWNhbCA/IFRPUF9QUk9QX05BTUUgOiBMRUZUX1BST1BfTkFNRV06IHNjcm9sbFNpemUsIGJlaGF2aW9yIH07XHJcbiAgICAgICAgdGhpcy5fdHJhY2tCb3guY2xlYXJEZWx0YSgpO1xyXG5cclxuICAgICAgICBpZiAoY29udGFpbmVyKSB7XHJcbiAgICAgICAgICBjb25zdCB7IGRpc3BsYXlJdGVtcywgdG90YWxTaXplIH0gPSB0aGlzLl90cmFja0JveC51cGRhdGVDb2xsZWN0aW9uKGl0ZW1zLCBzdGlja3lNYXAsIHtcclxuICAgICAgICAgICAgLi4ub3B0cywgc2Nyb2xsU2l6ZSwgZnJvbUl0ZW1JZDogaXNMYXN0SXRlcmF0aW9uID8gdW5kZWZpbmVkIDogaWQsXHJcbiAgICAgICAgICB9KSwgZGVsdGEgPSB0aGlzLl90cmFja0JveC5kZWx0YTtcclxuXHJcbiAgICAgICAgICB0aGlzLl90cmFja0JveC5jbGVhckRlbHRhKCk7XHJcblxyXG4gICAgICAgICAgbGV0IGFjdHVhbFNjcm9sbFNpemUgPSBzY3JvbGxTaXplICsgZGVsdGE7XHJcblxyXG4gICAgICAgICAgdGhpcy5yZXNldEJvdW5kc1NpemUoaXNWZXJ0aWNhbCwgdG90YWxTaXplKTtcclxuXHJcbiAgICAgICAgICB0aGlzLmNyZWF0ZURpc3BsYXlDb21wb25lbnRzSWZOZWVkKGRpc3BsYXlJdGVtcyk7XHJcblxyXG4gICAgICAgICAgdGhpcy50cmFja2luZygpO1xyXG5cclxuICAgICAgICAgIGNvbnN0IF9zY3JvbGxTaXplID0gdGhpcy5fdHJhY2tCb3guZ2V0SXRlbVBvc2l0aW9uKGlkLCBzdGlja3lNYXAsIHsgLi4ub3B0cywgc2Nyb2xsU2l6ZTogYWN0dWFsU2Nyb2xsU2l6ZSwgZnJvbUl0ZW1JZDogaWQgfSk7XHJcblxyXG4gICAgICAgICAgY29uc3Qgbm90Q2hhbmdlZCA9IGFjdHVhbFNjcm9sbFNpemUgPT09IF9zY3JvbGxTaXplXHJcblxyXG4gICAgICAgICAgaWYgKCFub3RDaGFuZ2VkIHx8IGl0ZXJhdGlvbiA8IE1BWF9TQ1JPTExfVE9fSVRFUkFUSU9OUykge1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyU2Nyb2xsVG9SZXBlYXRFeGVjdXRpb25UaW1lb3V0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3Njcm9sbFRvUmVwZWF0RXhlY3V0aW9uVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9FeGVjdXRvcihpZCwgQkVIQVZJT1JfSU5TVEFOVCBhcyBTY3JvbGxCZWhhdmlvciwgaXRlcmF0aW9uICsgMSwgbm90Q2hhbmdlZCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fJHNjcm9sbFNpemUubmV4dChhY3R1YWxTY3JvbGxTaXplKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoU0NST0xMLCB0aGlzLl9vblNjcm9sbEhhbmRsZXIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG8ocGFyYW1zKTtcclxuXHJcbiAgICAgICAgdGhpcy5fJHNjcm9sbFNpemUubmV4dChzY3JvbGxTaXplKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBpbmRleCA9IGl0ZW1zLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uaWQgPT09IGlkKSwgc2Nyb2xsU2l6ZSA9IGluZGV4ICogdGhpcy5pdGVtU2l6ZTtcclxuICAgICAgICBjb25zdCBwYXJhbXM6IFNjcm9sbFRvT3B0aW9ucyA9IHsgW3RoaXMuX2lzVmVydGljYWwgPyBUT1BfUFJPUF9OQU1FIDogTEVGVF9QUk9QX05BTUVdOiBzY3JvbGxTaXplLCBiZWhhdmlvciB9O1xyXG4gICAgICAgIGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvKHBhcmFtcyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNjcm9sbHMgdGhlIHNjcm9sbCBhcmVhIHRvIHRoZSBkZXNpcmVkIGVsZW1lbnQgd2l0aCB0aGUgc3BlY2lmaWVkIElELlxyXG4gICAqL1xyXG4gIHNjcm9sbFRvRW5kKGJlaGF2aW9yOiBTY3JvbGxCZWhhdmlvciA9IEJFSEFWSU9SX0lOU1RBTlQgYXMgU2Nyb2xsQmVoYXZpb3IpIHtcclxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5pdGVtcywgbGF0SXRlbSA9IGl0ZW1zW2l0ZW1zLmxlbmd0aCA+IDAgPyBpdGVtcy5sZW5ndGggLSAxIDogMF07XHJcbiAgICB0aGlzLnNjcm9sbFRvKGxhdEl0ZW0uaWQsIGJlaGF2aW9yKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX29uQ29udGFpbmVyU2Nyb2xsSGFuZGxlciA9IChlOiBFdmVudCkgPT4ge1xyXG4gICAgY29uc3QgY29udGFpbmVyRWwgPSB0aGlzLl9jb250YWluZXI7XHJcbiAgICBpZiAoY29udGFpbmVyRWwpIHtcclxuICAgICAgY29uc3Qgc2Nyb2xsU2l6ZSA9ICh0aGlzLl9pc1ZlcnRpY2FsID8gY29udGFpbmVyRWwubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgOiBjb250YWluZXJFbC5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQpO1xyXG4gICAgICB0aGlzLl90cmFja0JveC5kZWx0YURpcmVjdGlvbiA9IHRoaXMuXyRzY3JvbGxTaXplLmdldFZhbHVlKCkgPiBzY3JvbGxTaXplID8gLTEgOiB0aGlzLl8kc2Nyb2xsU2l6ZS5nZXRWYWx1ZSgpIDwgc2Nyb2xsU2l6ZSA/IDEgOiAwO1xyXG5cclxuICAgICAgY29uc3QgZXZlbnQgPSBuZXcgU2Nyb2xsRXZlbnQoe1xyXG4gICAgICAgIGRpcmVjdGlvbjogdGhpcy5fdHJhY2tCb3guc2Nyb2xsRGlyZWN0aW9uLCBjb250YWluZXI6IGNvbnRhaW5lckVsLm5hdGl2ZUVsZW1lbnQsXHJcbiAgICAgICAgbGlzdDogdGhpcy5fbGlzdCEubmF0aXZlRWxlbWVudCwgZGVsdGE6IHRoaXMuX3RyYWNrQm94LmRlbHRhLFxyXG4gICAgICAgIHNjcm9sbERlbHRhOiB0aGlzLl90cmFja0JveC5zY3JvbGxEZWx0YSwgaXNWZXJ0aWNhbDogdGhpcy5faXNWZXJ0aWNhbCxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLm9uU2Nyb2xsLmVtaXQoZXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfb25Db250YWluZXJTY3JvbGxFbmRIYW5kbGVyID0gKGU6IEV2ZW50KSA9PiB7XHJcbiAgICBjb25zdCBjb250YWluZXJFbCA9IHRoaXMuX2NvbnRhaW5lcjtcclxuICAgIGlmIChjb250YWluZXJFbCkge1xyXG4gICAgICBjb25zdCBzY3JvbGxTaXplID0gKHRoaXMuX2lzVmVydGljYWwgPyBjb250YWluZXJFbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA6IGNvbnRhaW5lckVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCk7XHJcbiAgICAgIHRoaXMuX3RyYWNrQm94LmRlbHRhRGlyZWN0aW9uID0gdGhpcy5fJHNjcm9sbFNpemUuZ2V0VmFsdWUoKSA+IHNjcm9sbFNpemUgPyAtMSA6IDA7XHJcblxyXG4gICAgICBjb25zdCBldmVudCA9IG5ldyBTY3JvbGxFdmVudCh7XHJcbiAgICAgICAgZGlyZWN0aW9uOiB0aGlzLl90cmFja0JveC5zY3JvbGxEaXJlY3Rpb24sIGNvbnRhaW5lcjogY29udGFpbmVyRWwubmF0aXZlRWxlbWVudCxcclxuICAgICAgICBsaXN0OiB0aGlzLl9saXN0IS5uYXRpdmVFbGVtZW50LCBkZWx0YTogdGhpcy5fdHJhY2tCb3guZGVsdGEsXHJcbiAgICAgICAgc2Nyb2xsRGVsdGE6IHRoaXMuX3RyYWNrQm94LnNjcm9sbERlbHRhLCBpc1ZlcnRpY2FsOiB0aGlzLl9pc1ZlcnRpY2FsLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMub25TY3JvbGxFbmQuZW1pdChldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogQGludGVybmFsICovXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgY29udGFpbmVyRWwgPSB0aGlzLl9jb250YWluZXI7XHJcbiAgICBpZiAoY29udGFpbmVyRWwpIHtcclxuICAgICAgLy8gZm9yIGRpcmVjdGlvbiBjYWxjdWxhdGlvblxyXG4gICAgICBjb250YWluZXJFbC5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoU0NST0xMLCB0aGlzLl9vbkNvbnRhaW5lclNjcm9sbEhhbmRsZXIpO1xyXG4gICAgICBjb250YWluZXJFbC5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoU0NST0xMX0VORCwgdGhpcy5fb25Db250YWluZXJTY3JvbGxFbmRIYW5kbGVyKTtcclxuXHJcbiAgICAgIGNvbnRhaW5lckVsLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihTQ1JPTEwsIHRoaXMuX29uU2Nyb2xsSGFuZGxlcik7XHJcblxyXG4gICAgICB0aGlzLl9yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcih0aGlzLl9vblJlc2l6ZUhhbmRsZXIpO1xyXG4gICAgICB0aGlzLl9yZXNpemVPYnNlcnZlci5vYnNlcnZlKGNvbnRhaW5lckVsLm5hdGl2ZUVsZW1lbnQpO1xyXG5cclxuICAgICAgdGhpcy5fb25SZXNpemVIYW5kbGVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogQGludGVybmFsICovXHJcbiAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xyXG4gICAgdGhpcy5jbGVhclNjcm9sbFRvUmVwZWF0RXhlY3V0aW9uVGltZW91dCgpO1xyXG5cclxuICAgIGlmICh0aGlzLl90cmFja0JveCkge1xyXG4gICAgICB0aGlzLl90cmFja0JveC5kaXNwb3NlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2NvbXBvbmVudHNSZXNpemVPYnNlcnZlcikge1xyXG4gICAgICB0aGlzLl9jb21wb25lbnRzUmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9yZXNpemVPYnNlcnZlcikge1xyXG4gICAgICB0aGlzLl9yZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX3Jlc2l6ZVNuYXBwZWRPYnNlcnZlcikge1xyXG4gICAgICB0aGlzLl9yZXNpemVTbmFwcGVkT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNvbnRhaW5lckVsID0gdGhpcy5fY29udGFpbmVyO1xyXG4gICAgaWYgKGNvbnRhaW5lckVsKSB7XHJcbiAgICAgIGNvbnRhaW5lckVsLm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihTQ1JPTEwsIHRoaXMuX29uU2Nyb2xsSGFuZGxlcik7XHJcbiAgICAgIGNvbnRhaW5lckVsLm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihTQ1JPTEwsIHRoaXMuX29uQ29udGFpbmVyU2Nyb2xsSGFuZGxlcik7XHJcbiAgICAgIGNvbnRhaW5lckVsLm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihTQ1JPTExfRU5ELCB0aGlzLl9vbkNvbnRhaW5lclNjcm9sbEVuZEhhbmRsZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9zbmFwZWREaXNwbGF5Q29tcG9uZW50KSB7XHJcbiAgICAgIHRoaXMuX3NuYXBlZERpc3BsYXlDb21wb25lbnQuZGVzdHJveSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9kaXNwbGF5Q29tcG9uZW50cykge1xyXG4gICAgICB3aGlsZSAodGhpcy5fZGlzcGxheUNvbXBvbmVudHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnN0IGNvbXAgPSB0aGlzLl9kaXNwbGF5Q29tcG9uZW50cy5wb3AoKTtcclxuICAgICAgICBjb21wPy5kZXN0cm95KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiAqbmdJZj1cInNuYXBcIiAjc25hcHBlZCBwYXJ0PVwic25hcHBlZC1pdGVtXCIgY2xhc3M9XCJuZ3ZsX19saXN0LXNuYXBwZXJcIj5cclxuICA8bmctY29udGFpbmVyICNzbmFwUmVuZGVyZXJDb250YWluZXI+PC9uZy1jb250YWluZXI+XHJcbjwvZGl2PlxyXG48ZGl2ICNjb250YWluZXIgcGFydD1cInNjcm9sbGVyXCIgY2xhc3M9XCJuZ3ZsX19zY3JvbGxlclwiPlxyXG4gIDx1bCAjbGlzdCBwYXJ0PVwibGlzdFwiIGNsYXNzPVwibmd2bF9fbGlzdFwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAjcmVuZGVyZXJzQ29udGFpbmVyPjwvbmctY29udGFpbmVyPlxyXG4gIDwvdWw+XHJcbjwvZGl2PiJdfQ==
|
|
632
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctdmlydHVhbC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL25nLXZpcnR1YWwtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9uZy12aXJ0dWFsLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNVLHVCQUF1QixFQUFxQixTQUFTLEVBQWdCLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUNoRyxNQUFNLEVBQWUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixHQUN2RixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFjLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwSSxPQUFPLEVBQ0wsYUFBYSxFQUFFLGdCQUFnQixFQUFFLHFCQUFxQixFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLG9CQUFvQixFQUFFLG1DQUFtQyxFQUFFLGlCQUFpQixFQUM1SyxvQkFBb0IsRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsdUJBQXVCLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLHdCQUF3QixFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFDakwsc0JBQXNCLEVBQUUsZUFBZSxHQUN4QyxNQUFNLFNBQVMsQ0FBQztBQUlqQixPQUFPLEVBQWEsVUFBVSxFQUFrQixNQUFNLFNBQVMsQ0FBQztBQUNoRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzlFLE9B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QUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO2dCQU9oRCxRQUFRO3NCQURQLE1BQU07Z0JBT1AsV0FBVztzQkFEVixNQUFNO2dCQWdCSCxLQUFLO3NCQURSLEtBQUs7Z0JBcUJGLElBQUk7c0JBRFAsS0FBSztnQkFxQkYseUJBQXlCO3NCQUQ1QixLQUFLO2dCQXFCRixZQUFZO3NCQURmLEtBQUs7Z0JBb0JGLFNBQVM7c0JBRFosS0FBSztnQkE0QkYsUUFBUTtzQkFEWCxLQUFLO2dCQW9CRixXQUFXO3NCQURkLEtBQUs7Z0JBbUJGLFNBQVM7c0JBRFosS0FBSztnQkFtQkYsV0FBVztzQkFEZCxLQUFLO2dCQWlCRixPQUFPO3NCQURWLEtBQUs7Z0JBcUJGLGNBQWM7c0JBRGpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBDb21wb25lbnRSZWYsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsXHJcbiAgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCwgVmlld0NvbnRhaW5lclJlZiwgVmlld0VuY2Fwc3VsYXRpb24sXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCBPYnNlcnZhYmxlLCBvZiwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1xyXG4gIEJFSEFWSU9SX0FVVE8sIEJFSEFWSU9SX0lOU1RBTlQsIENMQVNTX0xJU1RfSE9SSVpPTlRBTCwgQ0xBU1NfTElTVF9WRVJUSUNBTCwgREVGQVVMVF9ESVJFQ1RJT04sIERFRkFVTFRfRFlOQU1JQ19TSVpFLCBERUZBVUxUX0VOQUJMRURfQlVGRkVSX09QVElNSVpBVElPTiwgREVGQVVMVF9JVEVNX1NJWkUsXHJcbiAgREVGQVVMVF9JVEVNU19PRkZTRVQsIERFRkFVTFRfTElTVF9TSVpFLCBERUZBVUxUX1NOQVAsIERFRkFVTFRfU05BUFBJTkdfTUVUSE9ELCBIRUlHSFRfUFJPUF9OQU1FLCBMRUZUX1BST1BfTkFNRSwgTUFYX1NDUk9MTF9UT19JVEVSQVRJT05TLCBQWCwgU0NST0xMLCBTQ1JPTExfRU5ELCBUT1BfUFJPUF9OQU1FLFxyXG4gIFRSQUNLX0JZX1BST1BFUlRZX05BTUUsIFdJRFRIX1BST1BfTkFNRSxcclxufSBmcm9tICcuL2NvbnN0JztcclxuaW1wb3J0IHsgQmFzZVZpcnR1YWxMaXN0SXRlbUNvbXBvbmVudCwgQ29tcG9uZW50JDEsIElTY3JvbGxFdmVudCwgSVZpcnR1YWxMaXN0Q29sbGVjdGlvbiwgSVZpcnR1YWxMaXN0SXRlbSwgSVZpcnR1YWxMaXN0U3RpY2t5TWFwIH0gZnJvbSAnLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBJZCwgSVNpemUgfSBmcm9tICcuL3R5cGVzJztcclxuaW1wb3J0IHsgSVJlbmRlclZpcnR1YWxMaXN0Q29sbGVjdGlvbiB9IGZyb20gJy4vbW9kZWxzL3JlbmRlci1jb2xsZWN0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgRGlyZWN0aW9uLCBEaXJlY3Rpb25zLCBTbmFwcGluZ01ldGhvZCB9IGZyb20gJy4vZW51bXMnO1xyXG5pbXBvcnQgeyBTY3JvbGxFdmVudCwgVHJhY2tCb3gsIGlzRGlyZWN0aW9uLCB0b2dnbGVDbGFzc05hbWUgfSBmcm9tICcuL3V0aWxzJztcclxuaW1wb3J0IHsgSUdldEl0ZW1Qb3NpdGlvbk9wdGlvbnMsIElVcGRhdGVDb2xsZWN0aW9uT3B0aW9ucywgVFJBQ0tfQk9YX0NIQU5HRV9FVkVOVF9OQU1FIH0gZnJvbSAnLi91dGlscy90cmFja0JveCc7XHJcbmltcG9ydCB7IERpc3Bvc2FibGVDb21wb25lbnQgfSBmcm9tICcuL3V0aWxzL2Rpc3Bvc2FibGVDb21wb25lbnQnO1xyXG5pbXBvcnQgeyBpc1NuYXBwaW5nTWV0aG9kQWR2ZW5jZWQgfSBmcm9tICcuL3V0aWxzL3NuYXBwaW5nLW1ldGhvZCc7XHJcbmltcG9ydCB7IEZJUkVGT1hfU0NST0xMQkFSX09WRVJMQVBfU0laRSwgSVNfRklSRUZPWCB9IGZyb20gJy4vdXRpbHMvYnJvd3Nlcic7XHJcbmltcG9ydCB7IE5nVmlydHVhbExpc3RJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL25nLXZpcnR1YWwtbGlzdC1pdGVtLmNvbXBvbmVudCc7XHJcblxyXG4vKipcclxuICogVmlydHVhbCBsaXN0IGNvbXBvbmVudC5cclxuICogTWF4aW11bSBwZXJmb3JtYW5jZSBmb3IgZXh0cmVtZWx5IGxhcmdlIGxpc3RzLlxyXG4gKiBJdCBpcyBiYXNlZCBvbiBhbGdvcml0aG1zIGZvciB2aXJ0dWFsaXphdGlvbiBvZiBzY3JlZW4gb2JqZWN0cy5cclxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0Rqb25ueVgvbmctdmlydHVhbC1saXN0L2Jsb2IvMTQueC9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9uZy12aXJ0dWFsLWxpc3QuY29tcG9uZW50LnRzXHJcbiAqIEBhdXRob3IgRXZnZW5paSBHcmViZW5uaWtvdlxyXG4gKiBAZW1haWwgZGpvbm55eEBnbWFpbC5jb21cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbmctdmlydHVhbC1saXN0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbmctdmlydHVhbC1saXN0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9uZy12aXJ0dWFsLWxpc3QuY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5TaGFkb3dEb20sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ1ZpcnR1YWxMaXN0Q29tcG9uZW50IGV4dGVuZHMgRGlzcG9zYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBwcm90ZWN0ZWQgc3RhdGljIF9fbmV4dElkOiBudW1iZXIgPSAwO1xyXG5cclxuICBwcm90ZWN0ZWQgX2lkOiBudW1iZXIgPSBOZ1ZpcnR1YWxMaXN0Q29tcG9uZW50Ll9fbmV4dElkO1xyXG4gIC8qKlxyXG4gICAqIFJlYWRvbmx5LiBSZXR1cm5zIHRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgY29tcG9uZW50LlxyXG4gICAqL1xyXG4gIGdldCBpZCgpIHsgcmV0dXJuIHRoaXMuX2lkOyB9XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3JlbmRlcmVyc0NvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxyXG4gIHByb3RlY3RlZCBfbGlzdENvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJywgeyByZWFkOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PiB9KVxyXG4gIHByb3RlY3RlZCBfY29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQFZpZXdDaGlsZCgnbGlzdCcsIHsgcmVhZDogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4gfSlcclxuICBwcm90ZWN0ZWQgX2xpc3Q6IEVsZW1lbnRSZWY8SFRNTFVMaXN0RWxlbWVudD4gfCB1bmRlZmluZWQ7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3NuYXBSZW5kZXJlckNvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxyXG4gIHByb3RlY3RlZCBfc25hcENvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQFZpZXdDaGlsZCgnc25hcHBlZCcsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxyXG4gIHByb3RlY3RlZCBfc25hcHBlZENvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgLyoqXHJcbiAgICogRmlyZXMgd2hlbiB0aGUgbGlzdCBoYXMgYmVlbiBzY3JvbGxlZC5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBvblNjcm9sbCA9IG5ldyBFdmVudEVtaXR0ZXI8SVNjcm9sbEV2ZW50PigpO1xyXG5cclxuICAvKipcclxuICAgKiBGaXJlcyB3aGVuIHRoZSBsaXN0IGhhcyBjb21wbGV0ZWQgc2Nyb2xsaW5nLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIG9uU2Nyb2xsRW5kID0gbmV3IEV2ZW50RW1pdHRlcjxJU2Nyb2xsRXZlbnQ+KCk7XHJcblxyXG5cclxuICBwcm90ZWN0ZWQgXyRpdGVtcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVZpcnR1YWxMaXN0Q29sbGVjdGlvbiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcclxuICByZWFkb25seSAkaXRlbXMgPSB0aGlzLl8kaXRlbXMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByb3RlY3RlZCBfaXRlbXNUcmFuc2Zvcm0gPSAodjogSVZpcnR1YWxMaXN0Q29sbGVjdGlvbiB8IHVuZGVmaW5lZCkgPT4ge1xyXG4gICAgdGhpcy5fdHJhY2tCb3gucmVzZXRDb2xsZWN0aW9uKHYsIHRoaXMuXyRpdGVtU2l6ZS5nZXRWYWx1ZSgpKTtcclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbGxlY3Rpb24gb2YgbGlzdCBpdGVtcy5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBpdGVtcyh2OiBJVmlydHVhbExpc3RDb2xsZWN0aW9uKSB7XHJcbiAgICBpZiAodGhpcy5fJGl0ZW1zLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9pdGVtc1RyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kaXRlbXMubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuXHJcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfTtcclxuICBnZXQgaXRlbXMoKSB7IHJldHVybiB0aGlzLl8kaXRlbXMuZ2V0VmFsdWUoKSBhcyBJVmlydHVhbExpc3RDb2xsZWN0aW9uOyB9XHJcblxyXG4gIHByb3RlY3RlZCBfJHNuYXAgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KERFRkFVTFRfU05BUCk7XHJcbiAgcmVhZG9ubHkgJHNuYXAgPSB0aGlzLl8kc25hcC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGVsZW1lbnRzIHdpbGwgc25hcC4gRGVmYXVsdCB2YWx1ZSBpcyBcInRydWVcIi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzbmFwKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kc25hcC5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl8kc25hcC5uZXh0KHYpO1xyXG5cclxuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9O1xyXG4gIGdldCBzbmFwKCkgeyByZXR1cm4gdGhpcy5fJHNuYXAuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcm90ZWN0ZWQgXyRlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihERUZBVUxUX0VOQUJMRURfQlVGRkVSX09QVElNSVpBVElPTik7XHJcbiAgcmVhZG9ubHkgJGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24gPSB0aGlzLl8kZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbi5hc09ic2VydmFibGUoKTtcclxuICAvKipcclxuICAgKiBFeHBlcmltZW50YWwhXHJcbiAgICogRW5hYmxlcyBidWZmZXIgb3B0aW1pemF0aW9uLlxyXG4gICAqIENhbiBvbmx5IGJlIHVzZWQgaWYgaXRlbXMgaW4gdGhlIGNvbGxlY3Rpb24gYXJlIG5vdCBhZGRlZCBvciB1cGRhdGVkLiBPdGhlcndpc2UsIGFydGlmYWN0cyBpbiB0aGUgZm9ybSBvZiB0d2l0Y2hpbmcgb2YgdGhlIHNjcm9sbCBhcmVhIGFyZSBwb3NzaWJsZS5cclxuICAgKiBXb3JrcyBvbmx5IGlmIHRoZSBwcm9wZXJ0eSBkeW5hbWljID0gdHJ1ZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24odjogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuXyRlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuXyRlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uLm5leHQodik7XHJcblxyXG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH07XHJcbiAgZ2V0IGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24oKSB7IHJldHVybiB0aGlzLl8kZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbi5nZXRWYWx1ZSgpOyB9XHJcblxyXG5cclxuICBwcm90ZWN0ZWQgXyRpdGVtUmVuZGVyZXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XHJcbiAgcmVhZG9ubHkgJGl0ZW1SZW5kZXJlciA9IHRoaXMuXyRpdGVtUmVuZGVyZXIuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByb3RlY3RlZCBfJHJlbmRlcmVyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG4gIC8qKlxyXG4gICogUmVuZGVyaW5nIGVsZW1lbnQgdGVtcGxhdGUuXHJcbiAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBpdGVtUmVuZGVyZXIodjogVGVtcGxhdGVSZWY8YW55Pikge1xyXG4gICAgaWYgKHRoaXMuXyRpdGVtUmVuZGVyZXIuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fJGl0ZW1SZW5kZXJlci5uZXh0KHYpO1xyXG5cclxuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9O1xyXG4gIGdldCBpdGVtUmVuZGVyZXIoKSB7IHJldHVybiB0aGlzLl8kaXRlbVJlbmRlcmVyLmdldFZhbHVlKCkgYXMgVGVtcGxhdGVSZWY8YW55PjsgfVxyXG5cclxuICBwcm90ZWN0ZWQgXyRzdGlja3lNYXAgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElWaXJ0dWFsTGlzdFN0aWNreU1hcD4oe30pO1xyXG4gIHJlYWRvbmx5ICRzdGlja3lNYXAgPSB0aGlzLl8kc3RpY2t5TWFwLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICAvKipcclxuICAgKiBEaWN0aW9uYXJ5IHpJbmRleCBieSBpZCBvZiB0aGUgbGlzdCBlbGVtZW50LiBJZiB0aGUgdmFsdWUgaXMgbm90IHNldCBvciBlcXVhbCB0byAwLFxyXG4gICAqIHRoZW4gYSBzaW1wbGUgZWxlbWVudCBpcyBkaXNwbGF5ZWQsIGlmIHRoZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gMCwgdGhlbiB0aGUgc3RpY2t5IHBvc2l0aW9uIG1vZGUgaXMgZW5hYmxlZCBmb3IgdGhlIGVsZW1lbnQuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc3RpY2t5TWFwKHY6IElWaXJ0dWFsTGlzdFN0aWNreU1hcCkge1xyXG4gICAgaWYgKHRoaXMuXyRzdGlja3lNYXAuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fJHN0aWNreU1hcC5uZXh0KHYpO1xyXG5cclxuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9O1xyXG4gIGdldCBzdGlja3lNYXAoKSB7IHJldHVybiB0aGlzLl8kc3RpY2t5TWFwLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJvdGVjdGVkIF9pdGVtU2l6ZU9wdGlvbnMgPSAodjogbnVtYmVyIHwgdW5kZWZpbmVkKSA9PiB7XHJcbiAgICBpZiAodiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX0lURU1fU0laRTtcclxuICAgIH1cclxuICAgIGNvbnN0IHZhbCA9IE51bWJlcih2KTtcclxuICAgIHJldHVybiBOdW1iZXIuaXNOYU4odmFsKSB8fCB2YWwgPD0gMCA/IERFRkFVTFRfSVRFTV9TSVpFIDogdmFsO1xyXG4gIH07XHJcblxyXG4gIHByb3RlY3RlZCBfJGl0ZW1TaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KERFRkFVTFRfSVRFTV9TSVpFKTtcclxuICByZWFkb25seSAkaXRlbVNpemUgPSB0aGlzLl8kaXRlbVNpemUuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIGRpcmVjdGlvbiA9ICd2ZXJ0aWNhbCcsIHRoZW4gdGhlIGhlaWdodCBvZiBhIHR5cGljYWwgZWxlbWVudC4gSWYgZGlyZWN0aW9uID0gJ2hvcml6b250YWwnLCB0aGVuIHRoZSB3aWR0aCBvZiBhIHR5cGljYWwgZWxlbWVudC5cclxuICAgKiBJZ25vcmVkIGlmIHRoZSBkeW5hbWljU2l6ZSBwcm9wZXJ0eSBpcyB0cnVlLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGl0ZW1TaXplKHY6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuXyRpdGVtU2l6ZS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl8kaXRlbVNpemUubmV4dCh0aGlzLl9pdGVtU2l6ZU9wdGlvbnModikpO1xyXG5cclxuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9O1xyXG4gIGdldCBpdGVtU2l6ZSgpIHsgcmV0dXJuIHRoaXMuXyRpdGVtU2l6ZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByb3RlY3RlZCBfJGR5bmFtaWNTaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihERUZBVUxUX0RZTkFNSUNfU0laRSk7XHJcbiAgcmVhZG9ubHkgJGR5bmFtaWNTaXplID0gdGhpcy5fJGR5bmFtaWNTaXplLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICAvKipcclxuICAgKiBJZiB0cnVlIHRoZW4gdGhlIGl0ZW1zIGluIHRoZSBsaXN0IGNhbiBoYXZlIGRpZmZlcmVudCBzaXplcyBhbmQgdGhlIGl0ZW1TaXplIHByb3BlcnR5IGlzIGlnbm9yZWQuXHJcbiAgICogSWYgZmFsc2UgdGhlbiB0aGUgaXRlbXMgaW4gdGhlIGxpc3QgaGF2ZSBhIGZpeGVkIHNpemUgc3BlY2lmaWVkIGJ5IHRoZSBpdGVtU2l6ZSBwcm9wZXJ0eS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgZmFsc2UuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgZHluYW1pY1NpemUodjogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuXyRkeW5hbWljU2l6ZS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl8kZHluYW1pY1NpemUubmV4dCh2KTtcclxuXHJcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfTtcclxuICBnZXQgZHluYW1pY1NpemUoKSB7IHJldHVybiB0aGlzLl8kZHluYW1pY1NpemUuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcm90ZWN0ZWQgXyRkaXJlY3Rpb24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERpcmVjdGlvbj4oREVGQVVMVF9ESVJFQ1RJT04pO1xyXG4gIHJlYWRvbmx5ICRkaXJlY3Rpb24gPSB0aGlzLl8kZGlyZWN0aW9uLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICAvKipcclxuICAgKiBEZXRlcm1pbmVzIHRoZSBkaXJlY3Rpb24gaW4gd2hpY2ggZWxlbWVudHMgYXJlIHBsYWNlZC4gRGVmYXVsdCB2YWx1ZSBpcyBcInZlcnRpY2FsXCIuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgZGlyZWN0aW9uKHY6IERpcmVjdGlvbikge1xyXG4gICAgaWYgKHRoaXMuXyRkaXJlY3Rpb24uZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fJGRpcmVjdGlvbi5uZXh0KHYpO1xyXG5cclxuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9O1xyXG4gIGdldCBkaXJlY3Rpb24oKSB7IHJldHVybiB0aGlzLl8kZGlyZWN0aW9uLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJvdGVjdGVkIF8kaXRlbXNPZmZzZXQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oREVGQVVMVF9JVEVNU19PRkZTRVQpO1xyXG4gIHJlYWRvbmx5ICRpdGVtc09mZnNldCA9IHRoaXMuXyRpdGVtc09mZnNldC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgLyoqXHJcbiAgICogTnVtYmVyIG9mIGVsZW1lbnRzIG91dHNpZGUgdGhlIHNjb3BlIG9mIHZpc2liaWxpdHkuIERlZmF1bHQgdmFsdWUgaXMgMi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBpdGVtc09mZnNldCh2OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLl8kaXRlbXNPZmZzZXQuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fJGl0ZW1zT2Zmc2V0Lm5leHQodik7XHJcbiAgfTtcclxuICBnZXQgaXRlbXNPZmZzZXQoKSB7IHJldHVybiB0aGlzLl8kaXRlbXNPZmZzZXQuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcm90ZWN0ZWQgXyR0cmFja0J5ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KFRSQUNLX0JZX1BST1BFUlRZX05BTUUpO1xyXG4gIHJlYWRvbmx5ICR0cmFja0J5ID0gdGhpcy5fJHRyYWNrQnkuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSBieSB3aGljaCB0cmFja2luZyBpcyBwZXJmb3JtZWRcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCB0cmFja0J5KHY6IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMuXyR0cmFja0J5LmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuXyR0cmFja0J5Lm5leHQodik7XHJcbiAgfTtcclxuICBnZXQgdHJhY2tCeSgpIHsgcmV0dXJuIHRoaXMuXyR0cmFja0J5LmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJvdGVjdGVkIF9pc1ZlcnRpY2FsID0gdGhpcy5nZXRJc1ZlcnRpY2FsKCk7XHJcblxyXG4gIHByb3RlY3RlZCBfJHNuYXBwaW5nTWV0aG9kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTbmFwcGluZ01ldGhvZD4oREVGQVVMVF9TTkFQUElOR19NRVRIT0QpO1xyXG4gIHJlYWRvbmx5ICRzbmFwcGluZ01ldGhvZCA9IHRoaXMuXyRzbmFwcGluZ01ldGhvZC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgLyoqXHJcbiAgICogU25hcHBpbmcgbWV0aG9kLlxyXG4gICAqICdkZWZhdWx0JyAtIE5vcm1hbCBncm91cCByZW5kZXJpbmcuXHJcbiAgICogJ2FkdmFuY2VkJyAtIFRoZSBncm91cCBpcyByZW5kZXJlZCBvbiBhIHRyYW5zcGFyZW50IGJhY2tncm91bmQuIExpc3QgaXRlbXMgYmVsb3cgdGhlIGdyb3VwIGFyZSBub3QgcmVuZGVyZWQuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc25hcHBpbmdNZXRob2QodjogU25hcHBpbmdNZXRob2QpIHtcclxuICAgIGlmICh0aGlzLl8kc25hcHBpbmdNZXRob2QuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fJHNuYXBwaW5nTWV0aG9kLm5leHQodik7XHJcbiAgfTtcclxuICBnZXQgc25hcHBpbmdNZXRob2QoKSB7IHJldHVybiB0aGlzLl8kc25hcHBpbmdNZXRob2QuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcm90ZWN0ZWQgX2lzU25hcHBpbmdNZXRob2RBZHZhbmNlZDogYm9vbGVhbiA9IHRoaXMuZ2V0SXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkKCk7XHJcbiAgZ2V0IGlzU25hcHBpbmdNZXRob2RBZHZhbmNlZCgpIHsgcmV0dXJuIHRoaXMuX2lzU25hcHBpbmdNZXRob2RBZHZhbmNlZDsgfVxyXG5cclxuICBwcm90ZWN0ZWQgX2Rpc3BsYXlDb21wb25lbnRzOiBBcnJheTxDb21wb25lbnRSZWY8QmFzZVZpcnR1YWxMaXN0SXRlbUNvbXBvbmVudD4+ID0gW107XHJcblxyXG4gIHByb3RlY3RlZCBfc25hcGVkRGlzcGxheUNvbXBvbmVudDogQ29tcG9uZW50UmVmPEJhc2VWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQ+IHwgdW5kZWZpbmVkO1xyXG5cclxuICBwcm90ZWN0ZWQgXyRib3VuZHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElTaXplIHwgbnVsbD4obnVsbCk7XHJcblxyXG4gIHByb3RlY3RlZCBfJHNjcm9sbFNpemUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XHJcblxyXG4gIHByb3RlY3RlZCBfcmVzaXplT2JzZXJ2ZXI6IFJlc2l6ZU9ic2VydmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIHByb3RlY3RlZCBfcmVzaXplU25hcHBlZENvbXBvbmVudEhhbmRsZXIgPSAoKSA9PiB7XHJcbiAgICBjb25zdCBsaXN0ID0gdGhpcy5fbGlzdCwgY29udGFpbmVyID0gdGhpcy5fY29udGFpbmVyLCBzbmFwcGVkQ29tcG9uZW50ID0gdGhpcy5fc25hcGVkRGlzcGxheUNvbXBvbmVudD8uaW5zdGFuY2U7XHJcbiAgICBpZiAobGlzdCAmJiBjb250YWluZXIgJiYgc25hcHBlZENvbXBvbmVudCkge1xyXG4gICAgICBjb25zdCBpc1ZlcnRpY2FsID0gdGhpcy5faXNWZXJ0aWNhbCwgbGlzdEJvdW5kcyA9IGxpc3QubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgbGlzdEVsZW1lbnQgPSBsaXN0Py5uYXRpdmVFbGVtZW50LFxyXG4gICAgICAgIHsgd2lkdGg6IGxXaWR0aCwgaGVpZ2h0OiBsSGVpZ2h0IH0gPSBsaXN0RWxlbWVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkgPz8geyB3aWR0aDogMCwgaGVpZ2h0OiAwIH0sXHJcbiAgICAgICAgeyB3aWR0aCwgaGVpZ2h0IH0gPSB0aGlzLl8kYm91bmRzLmdldFZhbHVlKCkgPz8geyB3aWR0aDogMCwgaGVpZ2h0OiAwIH0sXHJcbiAgICAgICAgaXNTY3JvbGxhYmxlID0gaXNWZXJ0aWNhbCA/IGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodCA+IDAgOiBjb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aCA+IDA7XHJcblxyXG4gICAgICBsZXQgc2Nyb2xsQmFyU2l6ZSA9IGlzVmVydGljYWwgPyB3aWR0aCAtIGxXaWR0aCA6IGhlaWdodCAtIGxIZWlnaHQsIGlzU2Nyb2xsQmFyT3ZlcmxhcCA9IHRydWUsIG92ZXJsYXBTY3JvbGxCYXJTaXplID0gMDtcclxuICAgICAgaWYgKHNjcm9sbEJhclNpemUgPT09IDAgJiYgaXNTY3JvbGxhYmxlKSB7XHJcbiAgICAgICAgaXNTY3JvbGxCYXJPdmVybGFwID0gdHJ1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGlzU2Nyb2xsQmFyT3ZlcmxhcCAmJiBJU19GSVJFRk9YKSB7XHJcbiAgICAgICAgc2Nyb2xsQmFyU2l6ZSA9IG92ZXJsYXBTY3JvbGxCYXJTaXplID0gRklSRUZPWF9TQ1JPTExCQVJfT1ZFUkxBUF9TSVpFO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCB7IHdpZHRoOiBzV2lkdGgsIGhlaWdodDogc0hlaWdodCB9ID0gc25hcHBlZENvbXBvbmVudC5nZXRCb3VuZHMoKSA/PyB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfTtcclxuICAgICAgc25hcHBlZENvbXBvbmVudC5lbGVtZW50LnN0eWxlLmNsaXBQYXRoID0gYHBhdGgoXCJNIDAgMCBMIDAgJHtzSGVpZ2h0fSBMICR7c1dpZHRoIC0gb3ZlcmxhcFNjcm9sbEJhclNpemV9ICR7c0hlaWdodH0gTCAke3NXaWR0aCAtIG92ZXJsYXBTY3JvbGxCYXJTaXplfSAwIFpcIilgO1xyXG5cclxuICAgICAgc25hcHBlZENvbXBvbmVudC5yZWd1bGFyTGVuZ3RoID0gYCR7aXNWZXJ0aWNhbCA/IGxpc3RCb3VuZHMud2lkdGggOiBsaXN0Qm91bmRzLmhlaWdodH0ke1BYfWA7XHJcbiAgICAgIGNvbnN0IGNvbnRhaW5lckVsZW1lbnQgPSBjb250YWluZXIubmF0aXZlRWxlbWVudCwgZGVsdGEgPSBzbmFwcGVkQ29tcG9uZW50Lml0ZW0/Lm1lYXN1cmVzLmRlbHRhID8/IDA7XHJcblxyXG4gICAgICBsZXQgbGVmdDogbnVtYmVyLCByaWdodDogbnVtYmVyLCB0b3A6IG51bWJlciwgYm90dG9tOiBudW1iZXI7XHJcbiAgICAgIGlmIChpc1ZlcnRpY2FsKSB7XHJcbiAgICAgICAgbGVmdCA9IDA7XHJcbiAgICAgICAgcmlnaHQgPSB3aWR0aCAtIHNjcm9sbEJhclNpemU7XHJcbiAgICAgICAgdG9wID0gc0hlaWdodDtcclxuICAgICAgICBib3R0b20gPSBoZWlnaHQ7XHJcbiAgICAgICAgY29udGFpbmVyRWxlbWVudC5zdHlsZS5jbGlwUGF0aCA9IGBwYXRoKFwiTSAwICR7dG9wICsgZGVsdGF9IEwgMCAke2hlaWdodH0gTCAke3dpZHRofSAke2hlaWdodH0gTCAke3dpZHRofSAwIEwgJHtyaWdodH0gMCBMICR7cmlnaHR9ICR7dG9wICsgZGVsdGF9IFpcIilgO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxlZnQgPSBzV2lkdGg7XHJcbiAgICAgICAgcmlnaHQgPSB3aWR0aDtcclxuICAgICAgICB0b3AgPSAwO1xyXG4gICAgICAgIGJvdHRvbSA9IGhlaWdodCAtIHNjcm9sbEJhclNpemU7XHJcbiAgICAgICAgY29udGFpbmVyRWxlbWVudC5zdHlsZS5jbGlwUGF0aCA9IGBwYXRoKFwiTSAke2xlZnQgKyBkZWx0YX0gMCBMICR7bGVmdCArIGRlbHRhfSAke2JvdHRvbX0gTCAwICR7Ym90dG9tfSBMIDAgJHtoZWlnaHR9IEwgJHt3aWR0aH0gJHtoZWlnaHR9IEwgJHt3aWR0aH0gMCBaXCIpYDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIHByb3RlY3RlZCBfcmVzaXplU25hcHBlZE9ic2VydmVyOiBSZXNpemVPYnNlcnZlciB8IG51bGwgPSBudWxsO1xyXG5cclxuICBwcm90ZWN0ZWQgX29uUmVzaXplSGFuZGxlciA9ICgpID0+IHtcclxuICAgIGNvbnN0IGJvdW5kcyA9IHRoaXMuX2NvbnRhaW5lcj8ubmF0aXZlRWxlbWVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICBpZiAoYm91bmRzKSB7XHJcbiAgICAgIHRoaXMuXyRib3VuZHMubmV4dCh7IHdpZHRoOiBib3VuZHMud2lkdGgsIGhlaWdodDogYm91bmRzLmhlaWdodCB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuXyRib3VuZHMubmV4dCh7IHdpZHRoOiBERUZBVUxUX0xJU1RfU0laRSwgaGVpZ2h0OiBERUZBVUxUX0xJU1RfU0laRSB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5faXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlUmVndWxhclJlbmRlcmVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgX29uU2Nyb2xsSGFuZGxlciA9IChlPzogRXZlbnQpID0+IHtcclxuICAgIHRoaXMuY2xlYXJTY3JvbGxUb1JlcGVhdEV4ZWN1dGlvblRpbWVvdXQoKTtcclxuXHJcbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLl9jb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBpZiAoY29udGFpbmVyKSB7XHJcbiAgICAgIGNvbnN0IHNjcm9sbFNpemUgPSAodGhpcy5faXNWZXJ0aWNhbCA/IGNvbnRhaW5lci5zY3JvbGxUb3AgOiBjb250YWluZXIuc2Nyb2xsTGVmdCk7XHJcblxyXG4gICAgICB0aGlzLl8kc2Nyb2xsU2l6ZS5uZXh0KHNjcm9sbFNpemUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIF8kaW5pdGlhbGl6ZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgcmVhZG9ubHkgJGluaXRpYWxpemVkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xyXG5cclxuICAvKipcclxuICAgKiBCYXNlIGNsYXNzIG9mIHRoZSBlbGVtZW50IGNvbXBvbmVudFxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBfaXRlbUNvbXBvbmVudENsYXNzOiBDb21wb25lbnQkMTxCYXNlVmlydHVhbExpc3RJdGVtQ29tcG9uZW50PiA9IE5nVmlydHVhbExpc3RJdGVtQ29tcG9uZW50O1xyXG5cclxuICAvKipcclxuICAgKiBCYXNlIGNsYXNzIHRyYWNrQm94XHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIF90cmFja0JveENsYXNzOiBDb21wb25lbnQkMTxUcmFja0JveD4gPSBUcmFja0JveDtcclxuXHJcbiAgLyoqXHJcbiAgICogRGljdGlvbmFyeSBvZiBlbGVtZW50IHNpemVzIGJ5IHRoZWlyIGlkXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIF90cmFja0JveDogVHJhY2tCb3ggPSBuZXcgdGhpcy5fdHJhY2tCb3hDbGFzcyh0aGlzLnRyYWNrQnkpO1xyXG5cclxuICBwcm90ZWN0ZWQgX29uVHJhY2tCb3hDaGFuZ2VIYW5kbGVyID0gKHY6IG51bWJlcikgPT4ge1xyXG4gICAgdGhpcy5fJGNhY2hlVmVyc2lvbi5uZXh0KHYpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIF8kY2FjaGVWZXJzaW9uID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KC0xKTtcclxuICBnZXQgJGNhY2hlVmVyc2lvbigpIHsgcmV0dXJuIHRoaXMuXyRjYWNoZVZlcnNpb24uYXNPYnNlcnZhYmxlKCk7IH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcm90ZWN0ZWQgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcm90ZWN0ZWQgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+XHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgTmdWaXJ0dWFsTGlzdENvbXBvbmVudC5fX25leHRJZCA9IE5nVmlydHVhbExpc3RDb21wb25lbnQuX19uZXh0SWQgKyAxID09PSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUlxyXG4gICAgICA/IDAgOiBOZ1ZpcnR1YWxMaXN0Q29tcG9uZW50Ll9fbmV4dElkICsgMTtcclxuICAgIHRoaXMuX2lkID0gTmdWaXJ0dWFsTGlzdENvbXBvbmVudC5fX25leHRJZDtcclxuXHJcbiAgICB0aGlzLl8kaW5pdGlhbGl6ZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICAgIHRoaXMuJGluaXRpYWxpemVkID0gdGhpcy5fJGluaXRpYWxpemVkLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICAgIHRoaXMuX3RyYWNrQm94LmRpc3BsYXlDb21wb25lbnRzID0gdGhpcy5fZGlzcGxheUNvbXBvbmVudHM7XHJcblxyXG4gICAgY29uc3QgJHRyYWNrQnkgPSB0aGlzLiR0cmFja0J5O1xyXG5cclxuICAgICR0cmFja0J5LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tCb3gudHJhY2tpbmdQcm9wZXJ0eU5hbWUgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJGJvdW5kcyA9IHRoaXMuXyRib3VuZHMuYXNPYnNlcnZhYmxlKCkucGlwZShcclxuICAgICAgZmlsdGVyKGIgPT4gISFiKSxcclxuICAgICksICRpdGVtcyA9IHRoaXMuJGl0ZW1zLnBpcGUoXHJcbiAgICAgIG1hcChpID0+ICFpID8gW10gOiBpKSxcclxuICAgICksICRzY3JvbGxTaXplID0gdGhpcy5fJHNjcm9sbFNpemUuYXNPYnNlcnZhYmxlKCksXHJcbiAgICAgICRpdGVtU2l6ZSA9IHRoaXMuJGl0ZW1TaXplLnBpcGUoXHJcbiAgICAgICAgbWFwKHYgPT4gdiA8PSAwID8gREVGQVVMVF9JVEVNX1NJWkUgOiB2KSxcclxuICAgICAgKSxcclxuICAgICAgJGl0ZW1zT2Zmc2V0ID0gdGhpcy4kaXRlbXNPZmZzZXQucGlwZShcclxuICAgICAgICBtYXAodiA9PiB2IDwgMCA/IERFRkFVTFRfSVRFTVNfT0ZGU0VUIDogdiksXHJcbiAgICAgICksXHJcbiAgICAgICRzdGlja3lNYXAgPSB0aGlzLiRzdGlja3lNYXAucGlwZShcclxuICAgICAgICBtYXAodiA9PiAhdiA/IHt9IDogdiksXHJcbiAgICAgICksXHJcbiAgICAgICRzbmFwID0gdGhpcy4kc25hcCxcclxuICAgICAgJGlzVmVydGljYWwgPSB0aGlzLiRkaXJlY3Rpb24ucGlwZShcclxuICAgICAgICBtYXAodiA9PiB0aGlzLmdldElzVmVydGljYWwodiB8fCBERUZBVUxUX0RJUkVDVElPTikpLFxyXG4gICAgICApLFxyXG4gICAgICAkZHluYW1pY1NpemUgPSB0aGlzLiRkeW5hbWljU2l6ZSxcclxuICAgICAgJGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24gPSB0aGlzLiRlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uLFxyXG4gICAgICAkc25hcHBpbmdNZXRob2QgPSB0aGlzLiRzbmFwcGluZ01ldGhvZC5waXBlKFxyXG4gICAgICAgIG1hcCh2ID0+IHRoaXMuZ2V0SXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkKHYgfHwgREVGQVVMVF9TTkFQUElOR19NRVRIT0QpKSxcclxuICAgICAgKSxcclxuICAgICAgJGNhY2hlVmVyc2lvbiA9IHRoaXMuJGNhY2hlVmVyc2lvbjtcclxuXHJcbiAgICAkaXNWZXJ0aWNhbC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX2lzVmVydGljYWwgPSB2O1xyXG4gICAgICAgIGNvbnN0IGVsOiBIVE1MRWxlbWVudCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcclxuICAgICAgICB0b2dnbGVDbGFzc05hbWUoZWwsIHYgPyBDTEFTU19MSVNUX1ZFUlRJQ0FMIDogQ0xBU1NfTElTVF9IT1JJWk9OVEFMLCB2ID8gQ0xBU1NfTElTVF9IT1JJWk9OVEFMIDogQ0xBU1NfTElTVF9WRVJUSUNBTCk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkc25hcHBpbmdNZXRob2QucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQgPSB0aGlzLl90cmFja0JveC5pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGR5bmFtaWNTaXplLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAoZHluYW1pY1NpemUgPT4ge1xyXG4gICAgICAgIHRoaXMubGlzdGVuQ2FjaGVDaGFuZ2VzSWZOZWVkKGR5bmFtaWNTaXplKTtcclxuICAgICAgfSlcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29tYmluZUxhdGVzdChbdGhpcy4kaW5pdGlhbGl6ZWQsICRib3VuZHMsICRpdGVtcywgJHN0aWNreU1hcCwgJHNjcm9sbFNpemUsICRpdGVtU2l6ZSxcclxuICAgICAgJGl0ZW1zT2Zmc2V0LCAkc25hcCwgJGlzVmVydGljYWwsICRkeW5hbWljU2l6ZSwgJGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24sICRjYWNoZVZlcnNpb24sXHJcbiAgICBdKS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgZmlsdGVyKChbaW5pdGlhbGl6ZWRdKSA9PiAhIWluaXRpYWxpemVkKSxcclxuICAgICAgc3dpdGNoTWFwKChbLFxyXG4gICAgICAgIGJvdW5kcywgaXRlbXMsIHN0aWNreU1hcCwgc2Nyb2xsU2l6ZSwgaXRlbVNpemUsXHJcbiAgICAgICAgaXRlbXNPZmZzZXQsIHNuYXAsIGlzVmVydGljYWwsIGR5bmFtaWNTaXplLCBlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uLCBjYWNoZVZlcnNpb24sXHJcbiAgICAgIF0pID0+IHtcclxuICAgICAgICBsZXQgYWN0dWFsU2Nyb2xsU2l6ZSA9ICh0aGlzLl9pc1ZlcnRpY2FsID8gdGhpcy5fY29udGFpbmVyPy5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA/PyAwIDogdGhpcy5fY29udGFpbmVyPy5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQpID8/IDA7XHJcbiAgICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBib3VuZHMhLFxyXG4gICAgICAgICAgb3B0czogSVVwZGF0ZUNvbGxlY3Rpb25PcHRpb25zPElWaXJ0dWFsTGlzdEl0ZW0sIElWaXJ0dWFsTGlzdENvbGxlY3Rpb24+ID0ge1xyXG4gICAgICAgICAgICBib3VuZHM6IHsgd2lkdGgsIGhlaWdodCB9LCBkeW5hbWljU2l6ZSwgaXNWZXJ0aWNhbCwgaXRlbVNpemUsXHJcbiAgICAgICAgICAgIGl0ZW1zT2Zmc2V0LCBzY3JvbGxTaXplOiBhY3R1YWxTY3JvbGxTaXplLCBzbmFwLCBlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHsgZGlzcGxheUl0ZW1zLCB0b3RhbFNpemUgfSA9IHRoaXMuX3RyYWNrQm94LnVwZGF0ZUNvbGxlY3Rpb24oaXRlbXMsIHN0aWNreU1hcCwgb3B0cyk7XHJcblxyXG4gICAgICAgIHRoaXMucmVzZXRCb3VuZHNTaXplKGlzVmVydGljYWwsIHRvdGFsU2l6ZSk7XHJcblxyXG4gICAgICAgIHRoaXMuY3JlYXRlRGlzcGxheUNvbXBvbmVudHNJZk5lZWQoZGlzcGxheUl0ZW1zKTtcclxuXHJcbiAgICAgICAgdGhpcy50cmFja2luZygpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5faXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkKSB7XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZVJlZ3VsYXJSZW5kZXJlcigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5fY29udGFpbmVyO1xyXG5cclxuICAgICAgICBpZiAoY29udGFpbmVyKSB7XHJcbiAgICAgICAgICBjb25zdCBkZWx0YSA9IHRoaXMuX3RyYWNrQm94LmRlbHRhO1xyXG4gICAgICAgICAgYWN0dWFsU2Nyb2xsU2l6ZSA9IGFjdHVhbFNjcm9sbFNpemUgKyBkZWx0YTtcclxuXHJcbiAgICAgICAgICB0aGlzLl90cmFja0JveC5jbGVhckRlbHRhKCk7XHJcblxyXG4gICAgICAgICAgaWYgKHNjcm9sbFNpemUgIT09IGFjdHVhbFNjcm9sbFNpemUpIHtcclxuICAgICAgICAgICAgY29uc3QgcGFyYW1zOiBTY3JvbGxUb09wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgW3RoaXMuX2lzVmVydGljYWwgPyBUT1BfUFJPUF9OQU1FIDogTEVGVF9QUk9QX05BTUVdOiBhY3R1YWxTY3JvbGxTaXplLFxyXG4gICAgICAgICAgICAgIGJlaGF2aW9yOiBCRUhBVklPUl9JTlNUQU5UIGFzIFNjcm9sbEJlaGF2aW9yXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBjb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUbyhwYXJhbXMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG9mKGRpc3BsYXlJdGVtcyk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLnNldHVwUmVuZGVyZXIoKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBzZXR1cFJlbmRlcmVyKCkge1xyXG4gICAgY29uc3QgJGl0ZW1SZW5kZXJlciA9IHRoaXMuJGl0ZW1SZW5kZXJlcjtcclxuXHJcbiAgICAkaXRlbVJlbmRlcmVyLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fJHJlbmRlcmVyLm5leHQodik7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIC8qKiBAaW50ZXJuYWwgKi9cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMub25Jbml0KCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgb25Jbml0KCkge1xyXG4gICAgdGhpcy5fJGluaXRpYWxpemVkLm5leHQodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgbGlzdGVuQ2FjaGVDaGFuZ2VzSWZOZWVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgaWYgKCF0aGlzLl90cmFja0JveC5oYXNFdmVudExpc3RlbmVyKFRSQUNLX0JPWF9DSEFOR0VfRVZFTlRfTkFNRSwgdGhpcy5fb25UcmFja0JveENoYW5nZUhhbmRsZXIpKSB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tCb3guYWRkRXZlbnRMaXN0ZW5lcihUUkFDS19CT1hfQ0hBTkdFX0VWRU5UX05BTUUsIHRoaXMuX29uVHJhY2tCb3hDaGFuZ2VIYW5kbGVyKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuX3RyYWNrQm94Lmhhc0V2ZW50TGlzdGVuZXIoVFJBQ0tfQk9YX0NIQU5HRV9FVkVOVF9OQU1FLCB0aGlzLl9vblRyYWNrQm94Q2hhbmdlSGFuZGxlcikpIHtcclxuICAgICAgICB0aGlzLl90cmFja0JveC5yZW1vdmVFdmVudExpc3RlbmVyKFRSQUNLX0JPWF9DSEFOR0VfRVZFTlRfTkFNRSwgdGhpcy5fb25UcmFja0JveENoYW5nZUhhbmRsZXIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0SXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkKG0/OiBTbmFwcGluZ01ldGhvZCkge1xyXG4gICAgY29uc3QgbWV0aG9kID0gbSB8fCB0aGlzLl8kc25hcHBpbmdNZXRob2QuZ2V0VmFsdWUoKTtcclxuICAgIHJldHVybiBpc1NuYXBwaW5nTWV0aG9kQWR2ZW5jZWQobWV0aG9kKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXRJc1ZlcnRpY2FsKGQ/OiBEaXJlY3Rpb24pIHtcclxuICAgIGNvbnN0IGRpciA9IGQgfHwgdGhpcy5kaXJlY3Rpb247XHJcbiAgICByZXR1cm4gaXNEaXJlY3Rpb24oZGlyLCBEaXJlY3Rpb25zLlZFUlRJQ0FMKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBfY29tcG9uZW50c1Jlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcclxuICAgIHRoaXMuX3RyYWNrQm94LmNoYW5nZXMoKTtcclxuICB9KTtcclxuXHJcbiAgcHJvdGVjdGVkIGNyZWF0ZURpc3BsYXlDb21wb25lbnRzSWZOZWVkKGRpc3BsYXlJdGVtczogSVJlbmRlclZpcnR1YWxMaXN0Q29sbGVjdGlvbiB8IG51bGwpIHtcclxuICAgIGlmICghZGlzcGxheUl0ZW1zIHx8ICF0aGlzLl9saXN0Q29udGFpbmVyUmVmKSB7XHJcbiAgICAgIHRoaXMuX3RyYWNrQm94LnNldERpc3BsYXlPYmplY3RJbmRleE1hcEJ5SWQoe30pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2lzU25hcHBpbmdNZXRob2RBZHZhbmNlZCAmJiB0aGlzLnNuYXApIHtcclxuICAgICAgaWYgKCF0aGlzLl9zbmFwZWREaXNwbGF5Q29tcG9uZW50ICYmIHRoaXMuX3NuYXBDb250YWluZXJSZWYpIHtcclxuICAgICAgICBjb25zdCBjb21wID0gdGhpcy5fc25hcENvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQodGhpcy5faXRlbUNvbXBvbmVudENsYXNzKTtcclxuICAgICAgICBjb21wLmluc3RhbmNlLnJlZ3VsYXIgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX3NuYXBlZERpc3BsYXlDb21wb25lbnQgPSBjb21wO1xyXG4gICAgICAgIHRoaXMuX3RyYWNrQm94LnNuYXBlZERpc3BsYXlDb21wb25lbnQgPSB0aGlzLl9zbmFwZWREaXNwbGF5Q29tcG9uZW50O1xyXG5cclxuICAgICAgICB0aGlzLl9yZXNpemVTbmFwcGVkT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIodGhpcy5fcmVzaXplU25hcHBlZENvbXBvbmVudEhhbmRsZXIpO1xyXG4gICAgICAgIHRoaXMuX3Jlc2l6ZVNuYXBwZWRPYnNlcnZlci5vYnNlcnZlKGNvbXAuaW5zdGFuY2UuZWxlbWVudCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl90cmFja0JveC5pdGVtcyA9IGRpc3BsYXlJdGVtcztcclxuXHJcbiAgICBjb25zdCBfbGlzdENvbnRhaW5lclJlZiA9IHRoaXMuX2xpc3RDb250YWluZXJSZWY7XHJcblxyXG4gICAgY29uc3QgbWF4TGVuZ3RoID0gZGlzcGxheUl0ZW1zLmxlbmd0aCwgY29tcG9uZW50cyA9IHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzO1xyXG5cclxuICAgIHdoaWxlIChjb21wb25lbnRzLmxlbmd0aCA8IG1heExlbmd0aCkge1xyXG4gICAgICBpZiAoX2xpc3RDb250YWluZXJSZWYpIHtcclxuICAgICAgICBjb25zdCBjb21wID0gX2xpc3RDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KHRoaXMuX2l0ZW1Db21wb25lbnRDbGFzcyk7XHJcbiAgICAgICAgY29tcG9uZW50cy5wdXNoKGNvbXApO1xyXG5cclxuICAgICAgICB0aGlzLl9jb21wb25lbnRzUmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShjb21wLmluc3RhbmNlLmVsZW1lbnQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZXNldFJlbmRlcmVycygpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHVwZGF0ZVJlZ3VsYXJSZW5kZXJlcigpIHtcclxuICAgIHRoaXMuX3Jlc2l6ZVNuYXBwZWRDb21wb25lbnRIYW5kbGVyKCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgcmVzZXRSZW5kZXJlcnMoaXRlbVJlbmRlcmVyPzogVGVtcGxhdGVSZWY8SFRNTEVsZW1lbnQ+KSB7XHJcbiAgICBjb25zdCBkb01hcDogeyBbaWQ6IG51bWJlcl06IG51bWJlciB9ID0ge307XHJcbiAgICBmb3IgKGxldCBpID0gMCwgbCA9IHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5fZGlzcGxheUNvbXBvbmVudHNbaV07XHJcbiAgICAgIGl0ZW0uaW5zdGFuY2UucmVuZGVyZXIgPSBpdGVtUmVuZGVyZXIgfHwgdGhpcy5pdGVtUmVuZGVyZXI7XHJcbiAgICAgIGRvTWFwW2l0ZW0uaW5zdGFuY2UuaWRdID0gaTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5faXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkICYmIHRoaXMuc25hcCAmJiB0aGlzLl9zbmFwZWREaXNwbGF5Q29tcG9uZW50ICYmIHRoaXMuX3NuYXBDb250YWluZXJSZWYpIHtcclxuICAgICAgY29uc3QgY29tcCA9IHRoaXMuX3NuYXBlZERpc3BsYXlDb21wb25lbnQ7XHJcbiAgICAgIGNvbXAuaW5zdGFuY2UucmVuZGVyZXIgPSBpdGVtUmVuZGVyZXIgfHwgdGhpcy5pdGVtUmVuZGVyZXI7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fdHJhY2tCb3guc2V0RGlzcGxheU9iamVjdEluZGV4TWFwQnlJZChkb01hcCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUcmFja2luZyBieSBpZFxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCB0cmFja2luZygpIHtcclxuICAgIHRoaXMuX3RyYWNrQm94LnRyYWNrKCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgcmVzZXRCb3VuZHNTaXplKGlzVmVydGljYWw6IGJvb2xlYW4sIHRvdGFsU2l6ZTogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBsID0gdGhpcy5fbGlzdDtcclxuICAgIGlmIChsKSB7XHJcbiAgICAgIGwubmF0aXZlRWxlbWVudC5zdHlsZVtpc1ZlcnRpY2FsID8gSEVJR0hUX1BST1BfTkFNRSA6IFdJRFRIX1BST1BfTkFNRV0gPSBgJHt0b3RhbFNpemV9JHtQWH1gO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgYm91bmRzIG9mIGFuIGVsZW1lbnQgd2l0aCBhIGdpdmVuIGlkXHJcbiAgICovXHJcbiAgZ2V0SXRlbUJvdW5kcyhpZDogSWQpOiBJU2l6ZSB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fdHJhY2tCb3guZ2V0SXRlbUJvdW5kcyhpZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGUgbWV0aG9kIHNjcm9sbHMgdGhlIGxpc3QgdG8gdGhlIGVsZW1lbnQgd2l0aCB0aGUgZ2l2ZW4gaWQgYW5kIHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBzY3JvbGxlZCBhcmVhLlxyXG4gICAqIEJlaGF2aW9yIGFjY2VwdHMgdGhlIHZhbHVlcyDigIvigItcImF1dG9cIiwgXCJpbnN0YW50XCIgYW5kIFwic21vb3RoXCIuXHJcbiAgICovXHJcbiAgc2Nyb2xsVG8oaWQ6IElkLCBiZWhhdmlvcjogU2Nyb2xsQmVoYXZpb3IgPSBCRUhBVklPUl9BVVRPIGFzIFNjcm9sbEJlaGF2aW9yKSB7XHJcbiAgICB0aGlzLnNjcm9sbFRvRXhlY3V0b3IoaWQsIGJlaGF2aW9yKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBfc2Nyb2xsVG9SZXBlYXRFeGVjdXRpb25UaW1lb3V0OiBhbnk7XHJcblxyXG4gIHByb3RlY3RlZCBjbGVhclNjcm9sbFRvUmVwZWF0RXhlY3V0aW9uVGltZW91dCgpIHtcclxuICAgIGNsZWFyVGltZW91dCh0aGlzLl9zY3JvbGxUb1JlcGVhdEV4ZWN1dGlvblRpbWVvdXQpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHNjcm9sbFRvRXhlY3V0b3IoaWQ6IElkLCBiZWhhdmlvcjogU2Nyb2xsQmVoYXZpb3IsIGl0ZXJhdGlvbjogbnVtYmVyID0gMCwgaXNMYXN0SXRlcmF0aW9uID0gZmFsc2UpIHtcclxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5pdGVtcztcclxuICAgIGlmICghaXRlbXMgfHwgIWl0ZW1zLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZHluYW1pY1NpemUgPSB0aGlzLmR5bmFtaWNTaXplLCBjb250YWluZXIgPSB0aGlzLl9jb250YWluZXIsIGl0ZW1TaXplID0gdGhpcy5pdGVtU2l6ZTtcclxuICAgIGlmIChjb250YWluZXIpIHtcclxuICAgICAgdGhpcy5jbGVhclNjcm9sbFRvUmVwZWF0RXhlY3V0aW9uVGltZW91dCgpO1xyXG5cclxuICAgICAgaWYgKGR5bmFtaWNTaXplKSB7XHJcbiAgICAgICAgaWYgKGNvbnRhaW5lcikge1xyXG4gICAgICAgICAgY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihTQ1JPTEwsIHRoaXMuX29uU2Nyb2xsSGFuZGxlcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHRoaXMuXyRib3VuZHMuZ2V0VmFsdWUoKSB8fCB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfSxcclxuICAgICAgICAgIHN0aWNreU1hcCA9IHRoaXMuc3RpY2t5TWFwLCBpdGVtcyA9IHRoaXMuaXRlbXMsIGlzVmVydGljYWwgPSB0aGlzLl9pc1ZlcnRpY2FsLCBkZWx0YSA9IHRoaXMuX3RyYWNrQm94LmRlbHRhLFxyXG4gICAgICAgICAgb3B0czogSUdldEl0ZW1Qb3NpdGlvbk9wdGlvbnM8SVZpcnR1YWxMaXN0SXRlbSwgSVZpcnR1YWxMaXN0Q29sbGVjdGlvbj4gPSB7XHJcbiAgICAgICAgICAgIGJvdW5kczogeyB3aWR0aCwgaGVpZ2h0IH0sIGNvbGxlY3Rpb246IGl0ZW1zLCBkeW5hbWljU2l6ZSwgaXNWZXJ0aWNhbDogdGhpcy5faXNWZXJ0aWNhbCwgaXRlbVNpemUsXHJcbiAgICAgICAgICAgIGl0ZW1zT2Zmc2V0OiB0aGlzLml0ZW1zT2Zmc2V0LCBzY3JvbGxTaXplOiAoaXNWZXJ0aWNhbCA/IGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA6IGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQpICsgZGVsdGEsXHJcbiAgICAgICAgICAgIHNuYXA6IHRoaXMuc25hcCwgZnJvbUl0ZW1JZDogaWQsIGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb246IHRoaXMuZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbixcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBzY3JvbGxTaXplID0gdGhpcy5fdHJhY2tCb3guZ2V0SXRlbVBvc2l0aW9uKGlkLCBzdGlja3lNYXAsIG9wdHMpLFxyXG4gICAgICAgICAgcGFyYW1zOiBTY3JvbGxUb09wdGlvbnMgPSB7IFtpc1ZlcnRpY2FsID8gVE9QX1BST1BfTkFNRSA6IExFRlRfUFJPUF9OQU1FXTogc2Nyb2xsU2l6ZSwgYmVoYXZpb3IgfTtcclxuICAgICAgICB0aGlzLl90cmFja0JveC5jbGVhckRlbHRhKCk7XHJcblxyXG4gICAgICAgIGlmIChjb250YWluZXIpIHtcclxuICAgICAgICAgIGNvbnN0IHsgZGlzcGxheUl0ZW1zLCB0b3RhbFNpemUgfSA9IHRoaXMuX3RyYWNrQm94LnVwZGF0ZUNvbGxlY3Rpb24oaXRlbXMsIHN0aWNreU1hcCwge1xyXG4gICAgICAgICAgICAuLi5vcHRzLCBzY3JvbGxTaXplLCBmcm9tSXRlbUlkOiBpc0xhc3RJdGVyYXRpb24gPyB1bmRlZmluZWQgOiBpZCxcclxuICAgICAgICAgIH0pLCBkZWx0YSA9IHRoaXMuX3RyYWNrQm94LmRlbHRhO1xyXG5cclxuICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmNsZWFyRGVsdGEoKTtcclxuXHJcbiAgICAgICAgICBsZXQgYWN0dWFsU2Nyb2xsU2l6ZSA9IHNjcm9sbFNpemUgKyBkZWx0YTtcclxuXHJcbiAgICAgICAgICB0aGlzLnJlc2V0Qm91bmRzU2l6ZShpc1ZlcnRpY2FsLCB0b3RhbFNpemUpO1xyXG5cclxuICAgICAgICAgIHRoaXMuY3JlYXRlRGlzcGxheUNvbXBvbmVudHNJZk5lZWQoZGlzcGxheUl0ZW1zKTtcclxuXHJcbiAgICAgICAgICB0aGlzLnRyYWNraW5nKCk7XHJcblxyXG4gICAgICAgICAgY29uc3QgX3Njcm9sbFNpemUgPSB0aGlzLl90cmFja0JveC5nZXRJdGVtUG9zaXRpb24oaWQsIHN0aWNreU1hcCwgeyAuLi5vcHRzLCBzY3JvbGxTaXplOiBhY3R1YWxTY3JvbGxTaXplLCBmcm9tSXRlbUlkOiBpZCB9KTtcclxuXHJcbiAgICAgICAgICBjb25zdCBub3RDaGFuZ2VkID0gYWN0dWFsU2Nyb2xsU2l6ZSA9PT0gX3Njcm9sbFNpemVcclxuXHJcbiAgICAgICAgICBpZiAoIW5vdENoYW5nZWQgfHwgaXRlcmF0aW9uIDwgTUFYX1NDUk9MTF9UT19JVEVSQVRJT05TKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJTY3JvbGxUb1JlcGVhdEV4ZWN1dGlvblRpbWVvdXQoKTtcclxuICAgICAgICAgICAgdGhpcy5fc2Nyb2xsVG9SZXBlYXRFeGVjdXRpb25UaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0V4ZWN1dG9yKGlkLCBCRUhBVklPUl9JTlNUQU5UIGFzIFNjcm9sbEJlaGF2aW9yLCBpdGVyYXRpb24gKyAxLCBub3RDaGFuZ2VkKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl8kc2Nyb2xsU2l6ZS5uZXh0KGFjdHVhbFNjcm9sbFNpemUpO1xyXG5cclxuICAgICAgICAgICAgY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihTQ1JPTEwsIHRoaXMuX29uU2Nyb2xsSGFuZGxlcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUbyhwYXJhbXMpO1xyXG5cclxuICAgICAgICB0aGlzLl8kc2Nyb2xsU2l6ZS5uZXh0KHNjcm9sbFNpemUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gaXRlbXMuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5pZCA9PT0gaWQpLCBzY3JvbGxTaXplID0gaW5kZXggKiB0aGlzLml0ZW1TaXplO1xyXG4gICAgICAgIGNvbnN0IHBhcmFtczogU2Nyb2xsVG9PcHRpb25zID0geyBbdGhpcy5faXNWZXJ0aWNhbCA/IFRPUF9QUk9QX05BTUUgOiBMRUZUX1BST1BfTkFNRV06IHNjcm9sbFNpemUsIGJlaGF2aW9yIH07XHJcbiAgICAgICAgY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG8ocGFyYW1zKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2Nyb2xscyB0aGUgc2Nyb2xsIGFyZWEgdG8gdGhlIGRlc2lyZWQgZWxlbWVudCB3aXRoIHRoZSBzcGVjaWZpZWQgSUQuXHJcbiAgICovXHJcbiAgc2Nyb2xsVG9FbmQoYmVoYXZpb3I6IFNjcm9sbEJlaGF2aW9yID0gQkVIQVZJT1JfSU5TVEFOVCBhcyBTY3JvbGxCZWhhdmlvcikge1xyXG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLml0ZW1zLCBsYXRJdGVtID0gaXRlbXNbaXRlbXMubGVuZ3RoID4gMCA/IGl0ZW1zLmxlbmd0aCAtIDEgOiAwXTtcclxuICAgIHRoaXMuc2Nyb2xsVG8obGF0SXRlbS5pZCwgYmVoYXZpb3IpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIF9vbkNvbnRhaW5lclNjcm9sbEhhbmRsZXIgPSAoZTogRXZlbnQpID0+IHtcclxuICAgIGNvbnN0IGNvbnRhaW5lckVsID0gdGhpcy5fY29udGFpbmVyO1xyXG4gICAgaWYgKGNvbnRhaW5lckVsKSB7XHJcbiAgICAgIGNvbnN0IHNjcm9sbFNpemUgPSAodGhpcy5faXNWZXJ0aWNhbCA/IGNvbnRhaW5lckVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wIDogY29udGFpbmVyRWwubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0KTtcclxuICAgICAgdGhpcy5fdHJhY2tCb3guZGVsdGFEaXJlY3Rpb24gPSB0aGlzLl8kc2Nyb2xsU2l6ZS5nZXRWYWx1ZSgpID4gc2Nyb2xsU2l6ZSA/IC0xIDogdGhpcy5fJHNjcm9sbFNpemUuZ2V0VmFsdWUoKSA8IHNjcm9sbFNpemUgPyAxIDogMDtcclxuXHJcbiAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IFNjcm9sbEV2ZW50KHtcclxuICAgICAgICBkaXJlY3Rpb246IHRoaXMuX3RyYWNrQm94LnNjcm9sbERpcmVjdGlvbiwgY29udGFpbmVyOiBjb250YWluZXJFbC5uYXRpdmVFbGVtZW50LFxyXG4gICAgICAgIGxpc3Q6IHRoaXMuX2xpc3QhLm5hdGl2ZUVsZW1lbnQsIGRlbHRhOiB0aGlzLl90cmFja0JveC5kZWx0YSxcclxuICAgICAgICBzY3JvbGxEZWx0YTogdGhpcy5fdHJhY2tCb3guc2Nyb2xsRGVsdGEsIGlzVmVydGljYWw6IHRoaXMuX2lzVmVydGljYWwsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5vblNjcm9sbC5lbWl0KGV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBfb25Db250YWluZXJTY3JvbGxFbmRIYW5kbGVyID0gKGU6IEV2ZW50KSA9PiB7XHJcbiAgICBjb25zdCBjb250YWluZXJFbCA9IHRoaXMuX2NvbnRhaW5lcjtcclxuICAgIGlmIChjb250YWluZXJFbCkge1xyXG4gICAgICBjb25zdCBzY3JvbGxTaXplID0gKHRoaXMuX2lzVmVydGljYWwgPyBjb250YWluZXJFbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA6IGNvbnRhaW5lckVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCk7XHJcbiAgICAgIHRoaXMuX3RyYWNrQm94LmRlbHRhRGlyZWN0aW9uID0gdGhpcy5fJHNjcm9sbFNpemUuZ2V0VmFsdWUoKSA+IHNjcm9sbFNpemUgPyAtMSA6IDA7XHJcblxyXG4gICAgICBjb25zdCBldmVudCA9IG5ldyBTY3JvbGxFdmVudCh7XHJcbiAgICAgICAgZGlyZWN0aW9uOiB0aGlzLl90cmFja0JveC5zY3JvbGxEaXJlY3Rpb24sIGNvbnRhaW5lcjogY29udGFpbmVyRWwubmF0aXZlRWxlbWVudCxcclxuICAgICAgICBsaXN0OiB0aGlzLl9saXN0IS5uYXRpdmVFbGVtZW50LCBkZWx0YTogdGhpcy5fdHJhY2tCb3guZGVsdGEsXHJcbiAgICAgICAgc2Nyb2xsRGVsdGE6IHRoaXMuX3RyYWNrQm94LnNjcm9sbERlbHRhLCBpc1ZlcnRpY2FsOiB0aGlzLl9pc1ZlcnRpY2FsLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMub25TY3JvbGxFbmQuZW1pdChldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogQGludGVybmFsICovXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5hZnRlclZpZXdJbml0KCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgYWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIGNvbnN0IGNvbnRhaW5lckVsID0gdGhpcy5fY29udGFpbmVyO1xyXG4gICAgaWYgKGNvbnRhaW5lckVsKSB7XHJcbiAgICAgIC8vIGZvciBkaXJlY3Rpb24gY2FsY3VsYXRpb25cclxuICAgICAgY29udGFpbmVyRWwubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFNDUk9MTCwgdGhpcy5fb25Db250YWluZXJTY3JvbGxIYW5kbGVyKTtcclxuICAgICAgY29udGFpbmVyRWwubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFNDUk9MTF9FTkQsIHRoaXMuX29uQ29udGFpbmVyU2Nyb2xsRW5kSGFuZGxlcik7XHJcblxyXG4gICAgICBjb250YWluZXJFbC5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoU0NST0xMLCB0aGlzLl9vblNjcm9sbEhhbmRsZXIpO1xyXG5cclxuICAgICAgdGhpcy5fcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIodGhpcy5fb25SZXNpemVIYW5kbGVyKTtcclxuICAgICAgdGhpcy5fcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShjb250YWluZXJFbC5uYXRpdmVFbGVtZW50KTtcclxuXHJcbiAgICAgIHRoaXMuX29uUmVzaXplSGFuZGxlcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gIG92ZXJyaWRlIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcclxuICAgIHRoaXMuZGlzcG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGRpc3Bvc2UoKSB7XHJcbiAgICB0aGlzLmNsZWFyU2Nyb2xsVG9SZXBlYXRFeGVjdXRpb25UaW1lb3V0KCk7XHJcblxyXG4gICAgaWYgKHRoaXMuX3RyYWNrQm94KSB7XHJcbiAgICAgIHRoaXMuX3RyYWNrQm94LmRpc3Bvc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fY29tcG9uZW50c1Jlc2l6ZU9ic2VydmVyKSB7XHJcbiAgICAgIHRoaXMuX2NvbXBvbmVudHNSZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX3Jlc2l6ZU9ic2VydmVyKSB7XHJcbiAgICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fcmVzaXplU25hcHBlZE9ic2VydmVyKSB7XHJcbiAgICAgIHRoaXMuX3Jlc2l6ZVNuYXBwZWRPYnNlcnZlci5kaXNjb25uZWN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY29udGFpbmVyRWwgPSB0aGlzLl9jb250YWluZXI7XHJcbiAgICBpZiAoY29udGFpbmVyRWwpIHtcclxuICAgICAgY29udGFpbmVyRWwubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFNDUk9MTCwgdGhpcy5fb25TY3JvbGxIYW5kbGVyKTtcclxuICAgICAgY29udGFpbmVyRWwubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFNDUk9MTCwgdGhpcy5fb25Db250YWluZXJTY3JvbGxIYW5kbGVyKTtcclxuICAgICAgY29udGFpbmVyRWwubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFNDUk9MTF9FTkQsIHRoaXMuX29uQ29udGFpbmVyU2Nyb2xsRW5kSGFuZGxlcik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX3NuYXBlZERpc3BsYXlDb21wb25lbnQpIHtcclxuICAgICAgdGhpcy5fc25hcGVkRGlzcGxheUNvbXBvbmVudC5kZXN0cm95KCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzKSB7XHJcbiAgICAgIHdoaWxlICh0aGlzLl9kaXNwbGF5Q29tcG9uZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgY29uc3QgY29tcCA9IHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzLnBvcCgpO1xyXG4gICAgICAgIGNvbXA/LmRlc3Ryb3koKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2ICpuZ0lmPVwic25hcFwiICNzbmFwcGVkIHBhcnQ9XCJzbmFwcGVkLWl0ZW1cIiBjbGFzcz1cIm5ndmxfX2xpc3Qtc25hcHBlclwiPlxyXG4gIDxuZy1jb250YWluZXIgI3NuYXBSZW5kZXJlckNvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cclxuPC9kaXY+XHJcbjxkaXYgI2NvbnRhaW5lciBwYXJ0PVwic2Nyb2xsZXJcIiBjbGFzcz1cIm5ndmxfX3Njcm9sbGVyXCI+XHJcbiAgPHVsICNsaXN0IHBhcnQ9XCJsaXN0XCIgY2xhc3M9XCJuZ3ZsX19saXN0XCI+XHJcbiAgICA8bmctY29udGFpbmVyICNyZW5kZXJlcnNDb250YWluZXI+PC9uZy1jb250YWluZXI+XHJcbiAgPC91bD5cclxuPC9kaXY+Il19
|
|
@@ -2,7 +2,8 @@ import { isDirection } from "./isDirection";
|
|
|
2
2
|
import { debounce } from "./debounce";
|
|
3
3
|
import { toggleClassName } from './toggleClassName';
|
|
4
4
|
import { Tracker } from "./tracker";
|
|
5
|
-
import { TrackBox } from "./trackBox";
|
|
5
|
+
import { TrackBox, TRACK_BOX_CHANGE_EVENT_NAME, ItemDisplayMethods, } from "./trackBox";
|
|
6
|
+
import { CMap, CACHE_BOX_CHANGE_EVENT_NAME, } from './cacheMap';
|
|
6
7
|
import { ScrollEvent } from "./scrollEvent";
|
|
7
|
-
export { isDirection, debounce, toggleClassName, ScrollEvent, TrackBox, Tracker, };
|
|
8
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
8
|
+
export { isDirection, debounce, toggleClassName, ScrollEvent, TrackBox, Tracker, TRACK_BOX_CHANGE_EVENT_NAME, CMap, CACHE_BOX_CHANGE_EVENT_NAME, };
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi91dGlscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDdEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUNILFFBQVEsRUFBNEIsMkJBQTJCLEVBQ3FCLGtCQUFrQixHQUN6RyxNQUFNLFlBQVksQ0FBQztBQUNwQixPQUFPLEVBQ0gsSUFBSSxFQUVKLDJCQUEyQixHQUM5QixNQUFNLFlBQVksQ0FBQztBQUNwQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTVDLE9BQU8sRUFDSCxXQUFXLEVBQ1gsUUFBUSxFQUNSLGVBQWUsRUFDZixXQUFXLEVBQ1gsUUFBUSxFQUNSLE9BQU8sRUFDUCwyQkFBMkIsRUFDM0IsSUFBSSxFQUNKLDJCQUEyQixHQUM5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNEaXJlY3Rpb24gfSBmcm9tIFwiLi9pc0RpcmVjdGlvblwiO1xyXG5pbXBvcnQgeyBkZWJvdW5jZSB9IGZyb20gXCIuL2RlYm91bmNlXCI7XHJcbmltcG9ydCB7IHRvZ2dsZUNsYXNzTmFtZSB9IGZyb20gJy4vdG9nZ2xlQ2xhc3NOYW1lJztcclxuaW1wb3J0IHsgVHJhY2tlciB9IGZyb20gXCIuL3RyYWNrZXJcIjtcclxuaW1wb3J0IHtcclxuICAgIFRyYWNrQm94LCBJVXBkYXRlQ29sbGVjdGlvblJldHVybnMsIFRSQUNLX0JPWF9DSEFOR0VfRVZFTlRfTkFNRSwgSU1ldHJpY3MsIElSZWNhbGN1bGF0ZU1ldHJpY3NPcHRpb25zLCBJR2V0SXRlbVBvc2l0aW9uT3B0aW9ucyxcclxuICAgIElVcGRhdGVDb2xsZWN0aW9uT3B0aW9ucywgQ2FjaGVNYXBFdmVudHMsIE9uQ2hhbmdlRXZlbnRMaXN0ZW5lciwgQ2FjaGVNYXBMaXN0ZW5lcnMsIEl0ZW1EaXNwbGF5TWV0aG9kcyxcclxufSBmcm9tIFwiLi90cmFja0JveFwiO1xyXG5pbXBvcnQge1xyXG4gICAgQ01hcCxcclxuICAgIElDYWNoZU1hcCxcclxuICAgIENBQ0hFX0JPWF9DSEFOR0VfRVZFTlRfTkFNRSxcclxufSBmcm9tICcuL2NhY2hlTWFwJztcclxuaW1wb3J0IHsgU2Nyb2xsRXZlbnQgfSBmcm9tIFwiLi9zY3JvbGxFdmVudFwiO1xyXG5cclxuZXhwb3J0IHtcclxuICAgIGlzRGlyZWN0aW9uLFxyXG4gICAgZGVib3VuY2UsXHJcbiAgICB0b2dnbGVDbGFzc05hbWUsXHJcbiAgICBTY3JvbGxFdmVudCxcclxuICAgIFRyYWNrQm94LFxyXG4gICAgVHJhY2tlcixcclxuICAgIFRSQUNLX0JPWF9DSEFOR0VfRVZFTlRfTkFNRSxcclxuICAgIENNYXAsXHJcbiAgICBDQUNIRV9CT1hfQ0hBTkdFX0VWRU5UX05BTUUsXHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSB7XHJcbiAgICBJQ2FjaGVNYXAsXHJcbiAgICBJVXBkYXRlQ29sbGVjdGlvblJldHVybnMsXHJcbiAgICBJTWV0cmljcyxcclxuICAgIElSZWNhbGN1bGF0ZU1ldHJpY3NPcHRpb25zLFxyXG4gICAgSUdldEl0ZW1Qb3NpdGlvbk9wdGlvbnMsXHJcbiAgICBJVXBkYXRlQ29sbGVjdGlvbk9wdGlvbnMsXHJcbiAgICBDYWNoZU1hcEV2ZW50cyxcclxuICAgIE9uQ2hhbmdlRXZlbnRMaXN0ZW5lcixcclxuICAgIENhY2hlTWFwTGlzdGVuZXJzLFxyXG4gICAgSXRlbURpc3BsYXlNZXRob2RzLFxyXG59O1xyXG5cclxuIl19
|