ng-virtual-list 16.7.2 → 16.7.3
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 -0
- package/esm2022/lib/components/ng-virtual-list-item.component.mjs +83 -17
- package/esm2022/lib/const/index.mjs +6 -5
- package/esm2022/lib/models/render-item-config.model.mjs +1 -1
- package/esm2022/lib/ng-virtual-list.component.mjs +8 -4
- package/esm2022/lib/ng-virtual-list.service.mjs +3 -2
- package/esm2022/lib/utils/trackBox.mjs +8 -2
- package/fesm2022/ng-virtual-list.mjs +102 -25
- package/fesm2022/ng-virtual-list.mjs.map +1 -1
- package/lib/components/ng-virtual-list-item.component.d.ts +11 -4
- package/lib/const/index.d.ts +5 -4
- package/lib/models/render-item-config.model.d.ts +4 -0
- package/lib/ng-virtual-list.component.d.ts +2 -0
- package/lib/ng-virtual-list.service.d.ts +2 -1
- package/package.json +1 -1
|
@@ -386,7 +386,9 @@ export class NgVirtualListComponent {
|
|
|
386
386
|
}
|
|
387
387
|
};
|
|
388
388
|
_$initialized = new BehaviorSubject(false);
|
|
389
|
-
$initialized;
|
|
389
|
+
$initialized = this._$initialized.asObservable();
|
|
390
|
+
_$viewInitialized = new BehaviorSubject(false);
|
|
391
|
+
$viewInitialized = this._$viewInitialized.asObservable();
|
|
390
392
|
/**
|
|
391
393
|
* Base class of the element component
|
|
392
394
|
*/
|
|
@@ -412,8 +414,9 @@ export class NgVirtualListComponent {
|
|
|
412
414
|
? 0 : NgVirtualListComponent.__nextId + 1;
|
|
413
415
|
this._id = NgVirtualListComponent.__nextId;
|
|
414
416
|
this._service.initialize(this._trackBox);
|
|
415
|
-
this.
|
|
416
|
-
|
|
417
|
+
this.$viewInitialized.pipe(takeUntilDestroyed(), filter(v => !!v), tap(v => {
|
|
418
|
+
this._service.listElement = this._list?.nativeElement ?? null;
|
|
419
|
+
})).subscribe();
|
|
417
420
|
this._trackBox.displayComponents = this._displayComponents;
|
|
418
421
|
const $trackBy = this.$trackBy, $selectByClick = this.$selectByClick;
|
|
419
422
|
$selectByClick.pipe(takeUntilDestroyed(), tap(v => {
|
|
@@ -739,6 +742,7 @@ export class NgVirtualListComponent {
|
|
|
739
742
|
this._resizeObserver.observe(containerEl.nativeElement);
|
|
740
743
|
this._onResizeHandler();
|
|
741
744
|
}
|
|
745
|
+
this._$viewInitialized.next(true);
|
|
742
746
|
}
|
|
743
747
|
/** @internal */
|
|
744
748
|
ngOnDestroy() {
|
|
@@ -840,4 +844,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
840
844
|
}], methodForSelecting: [{
|
|
841
845
|
type: Input
|
|
842
846
|
}] } });
|
|
843
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctdmlydHVhbC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL25nLXZpcnR1YWwtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9uZy12aXJ0dWFsLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNVLHVCQUF1QixFQUFxQixTQUFTLEVBQWdCLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUNoRyxNQUFNLEVBQWUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixHQUN2RixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsU0FBUyxFQUFhLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsSixPQUFPLEVBQ0wsYUFBYSxFQUFFLGdCQUFnQixFQUFFLHFCQUFxQixFQUFFLG1CQUFtQixFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLG9CQUFvQixFQUFFLG1DQUFtQyxFQUFFLGlCQUFpQixFQUNqTSxpQkFBaUIsRUFBRSx1QkFBdUIsRUFBRSx1QkFBdUIsRUFBRSxxQkFBcUIsRUFBRSxZQUFZLEVBQUUsdUJBQXVCLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLHdCQUF3QixFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFDcE8sc0JBQXNCLEVBQUUsZUFBZSxHQUN4QyxNQUFNLFNBQVMsQ0FBQztBQUlqQixPQUFPLEVBQWEsVUFBVSxFQUFzQixtQkFBbUIsRUFBa0IsTUFBTSxTQUFTLENBQUM7QUFDekcsT0FBTyxFQUFFLFdBQVcsRUFBRSxlQUFl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LEVBQUUsQ0FBQSxVQUEwQixDQUFBLEVBQUU7Z0JBSXBELEtBQUs7c0JBRFosU0FBUzt1QkFBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQSxVQUEwQixDQUFBLEVBQUU7Z0JBSS9DLGlCQUFpQjtzQkFEeEIsU0FBUzt1QkFBQyx1QkFBdUIsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFJdEQsaUJBQWlCO3NCQUR4QixTQUFTO3VCQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFPaEQsUUFBUTtzQkFEUCxNQUFNO2dCQU9QLFdBQVc7c0JBRFYsTUFBTTtnQkFPUCxnQkFBZ0I7c0JBRGYsTUFBTTtnQkFPUCxXQUFXO3NCQURWLE1BQU07Z0JBT1AsUUFBUTtzQkFEUCxNQUFNO2dCQWVILEtBQUs7c0JBRFIsS0FBSztnQkFxQkYsV0FBVztzQkFEZCxLQUFLO2dCQW9CRixhQUFhO3NCQURoQixLQUFLO2dCQW1CRixJQUFJO3NCQURQLEtBQUs7Z0JBcUJGLHlCQUF5QjtzQkFENUIsS0FBSztnQkFxQkYsWUFBWTtzQkFEZixLQUFLO2dCQWtCTixTQUFTO3NCQURSLEtBQUs7Z0JBZUYsYUFBYTtzQkFEaEIsS0FBSztnQkE0QkYsUUFBUTtzQkFEWCxLQUFLO2dCQW9CRixXQUFXO3NCQURkLEtBQUs7Z0JBbUJGLFNBQVM7c0JBRFosS0FBSztnQkFnQkYsV0FBVztzQkFEZCxLQUFLO2dCQVlGLFVBQVU7c0JBRGIsS0FBSztnQkEyQkYsYUFBYTtzQkFEaEIsS0FBSztnQkFrQkYsT0FBTztzQkFEVixLQUFLO2dCQXlCRixjQUFjO3NCQURqQixLQUFLO2dCQXVCRixrQkFBa0I7c0JBRHJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBDb21wb25lbnRSZWYsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsXHJcbiAgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCwgVmlld0NvbnRhaW5lclJlZiwgVmlld0VuY2Fwc3VsYXRpb24sXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIE9ic2VydmFibGUsIG9mLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7XHJcbiAgQkVIQVZJT1JfQVVUTywgQkVIQVZJT1JfSU5TVEFOVCwgQ0xBU1NfTElTVF9IT1JJWk9OVEFMLCBDTEFTU19MSVNUX1ZFUlRJQ0FMLCBERUZBVUxUX0JVRkZFUl9TSVpFLCBERUZBVUxUX0RJUkVDVElPTiwgREVGQVVMVF9EWU5BTUlDX1NJWkUsIERFRkFVTFRfRU5BQkxFRF9CVUZGRVJfT1BUSU1JWkFUSU9OLCBERUZBVUxUX0lURU1fU0laRSxcclxuICBERUZBVUxUX0xJU1RfU0laRSwgREVGQVVMVF9NQVhfQlVGRkVSX1NJWkUsIERFRkFVTFRfU0VMRUNUX0JZX0NMSUNLLCBERUZBVUxUX1NFTEVDVF9NRVRIT0QsIERFRkFVTFRfU05BUCwgREVGQVVMVF9TTkFQUElOR19NRVRIT0QsIEhFSUdIVF9QUk9QX05BTUUsIExFRlRfUFJPUF9OQU1FLCBNQVhfU0NST0xMX1RPX0lURVJBVElPTlMsIFBYLCBTQ1JPTEwsIFNDUk9MTF9FTkQsIFRPUF9QUk9QX05BTUUsXHJcbiAgVFJBQ0tfQllfUFJPUEVSVFlfTkFNRSwgV0lEVEhfUFJPUF9OQU1FLFxyXG59IGZyb20gJy4vY29uc3QnO1xyXG5pbXBvcnQgeyBJUmVuZGVyVmlydHVhbExpc3RJdGVtLCBJU2Nyb2xsRXZlbnQsIElWaXJ0dWFsTGlzdENvbGxlY3Rpb24sIElWaXJ0dWFsTGlzdEl0ZW0sIElWaXJ0dWFsTGlzdEl0ZW1Db25maWdNYXAgfSBmcm9tICcuL21vZGVscyc7XHJcbmltcG9ydCB7IElkLCBJU2l6ZSB9IGZyb20gJy4vdHlwZXMnO1xyXG5pbXBvcnQgeyBJUmVuZGVyVmlydHVhbExpc3RDb2xsZWN0aW9uIH0gZnJvbSAnLi9tb2RlbHMvcmVuZGVyLWNvbGxlY3Rpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBEaXJlY3Rpb24sIERpcmVjdGlvbnMsIE1ldGhvZEZvclNlbGVjdGluZywgTWV0aG9kc0ZvclNlbGVjdGluZywgU25hcHBpbmdNZXRob2QgfSBmcm9tICcuL2VudW1zJztcclxuaW1wb3J0IHsgU2Nyb2xsRXZlbnQsIHRvZ2dsZUNsYXNzTmFtZSB9IGZyb20gJy4vdXRpbHMnO1xyXG5pbXBvcnQgeyBJR2V0SXRlbVBvc2l0aW9uT3B0aW9ucywgSVVwZGF0ZUNvbGxlY3Rpb25PcHRpb25zLCBUUkFDS19CT1hfQ0hBTkdFX0VWRU5UX05BTUUsIFRyYWNrQm94IH0gZnJvbSAnLi91dGlscy90cmFja0JveCc7XHJcbmltcG9ydCB7IGlzU25hcHBpbmdNZXRob2RBZHZlbmNlZCB9IGZyb20gJy4vdXRpbHMvc25hcHBpbmctbWV0aG9kJztcclxuaW1wb3J0IHsgRklSRUZPWF9TQ1JPTExCQVJfT1ZFUkxBUF9TSVpFLCBJU19GSVJFRk9YIH0gZnJvbSAnLi91dGlscy9icm93c2VyJztcclxuaW1wb3J0IHsgTmdWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvbmctdmlydHVhbC1saXN0LWl0ZW0uY29tcG9uZW50JztcclxuaW1wb3J0IHsgQmFzZVZpcnR1YWxMaXN0SXRlbUNvbXBvbmVudCB9IGZyb20gJy4vbW9kZWxzL2Jhc2UtdmlydHVhbC1saXN0LWl0ZW0tY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29tcG9uZW50JDEgfSBmcm9tICcuL21vZGVscy9jb21wb25lbnQubW9kZWwnO1xyXG5pbXBvcnQgeyBpc0RpcmVjdGlvbiB9IGZyb20gJy4vdXRpbHMvaXNEaXJlY3Rpb24nO1xyXG5pbXBvcnQgeyBOZ1ZpcnR1YWxMaXN0U2VydmljZSB9IGZyb20gJy4vbmctdmlydHVhbC1saXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBpc01ldGhvZEZvclNlbGVjdGluZyB9IGZyb20gJy4vdXRpbHMvaXNNZXRob2RGb3JTZWxlY3RpbmcnO1xyXG5pbXBvcnQgeyBNZXRob2RzRm9yU2VsZWN0aW5nVHlwZXMgfSBmcm9tICcuL2VudW1zL21ldGhvZC1mb3Itc2VsZWN0aW5nLXR5cGVzJztcclxuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xyXG5cclxuY29uc3QgUk9MRV9MSVNUID0gJ2xpc3QnLFxyXG4gIFJPTEVfTElTVF9CT1ggPSAnbGlzdGJveCc7XHJcblxyXG4vKipcclxuICogVmlydHVhbCBsaXN0IGNvbXBvbmVudC5cclxuICogTWF4aW11bSBwZXJmb3JtYW5jZSBmb3IgZXh0cmVtZWx5IGxhcmdlIGxpc3RzLlxyXG4gKiBJdCBpcyBiYXNlZCBvbiBhbGdvcml0aG1zIGZvciB2aXJ0dWFsaXphdGlvbiBvZiBzY3JlZW4gb2JqZWN0cy5cclxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0Rqb25ueVgvbmctdmlydHVhbC1saXN0L2Jsb2IvMTYueC9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9uZy12aXJ0dWFsLWxpc3QuY29tcG9uZW50LnRzXHJcbiAqIEBhdXRob3IgRXZnZW5paSBHcmViZW5uaWtvdlxyXG4gKiBAZW1haWwgZGpvbm55eEBnbWFpbC5jb21cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbmctdmlydHVhbC1saXN0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbmctdmlydHVhbC1saXN0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9uZy12aXJ0dWFsLWxpc3QuY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5TaGFkb3dEb20sXHJcbiAgcHJvdmlkZXJzOiBbTmdWaXJ0dWFsTGlzdFNlcnZpY2VdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmdWaXJ0dWFsTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBwcml2YXRlIHN0YXRpYyBfX25leHRJZDogbnVtYmVyID0gMDtcclxuXHJcbiAgcHJpdmF0ZSBfaWQ6IG51bWJlciA9IE5nVmlydHVhbExpc3RDb21wb25lbnQuX19uZXh0SWQ7XHJcbiAgLyoqXHJcbiAgICogUmVhZG9ubHkuIFJldHVybnMgdGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBjb21wb25lbnQuXHJcbiAgICovXHJcbiAgZ2V0IGlkKCkgeyByZXR1cm4gdGhpcy5faWQ7IH1cclxuXHJcbiAgQFZpZXdDaGlsZCgncmVuZGVyZXJzQ29udGFpbmVyJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXHJcbiAgcHJpdmF0ZSBfbGlzdENvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJywgeyByZWFkOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PiB9KVxyXG4gIHByaXZhdGUgX2NvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4gfCB1bmRlZmluZWQ7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2xpc3QnLCB7IHJlYWQ6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+IH0pXHJcbiAgcHJpdmF0ZSBfbGlzdDogRWxlbWVudFJlZjxIVE1MVUxpc3RFbGVtZW50PiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQFZpZXdDaGlsZCgnc25hcFJlbmRlcmVyQ29udGFpbmVyJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXHJcbiAgcHJpdmF0ZSBfc25hcENvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQFZpZXdDaGlsZCgnc25hcHBlZCcsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxyXG4gIHByaXZhdGUgX3NuYXBwZWRDb250YWluZXI6IFZpZXdDb250YWluZXJSZWYgfCB1bmRlZmluZWQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpcmVzIHdoZW4gdGhlIGxpc3QgaGFzIGJlZW4gc2Nyb2xsZWQuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpXHJcbiAgb25TY3JvbGwgPSBuZXcgRXZlbnRFbWl0dGVyPElTY3JvbGxFdmVudD4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRmlyZXMgd2hlbiB0aGUgbGlzdCBoYXMgY29tcGxldGVkIHNjcm9sbGluZy5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBvblNjcm9sbEVuZCA9IG5ldyBFdmVudEVtaXR0ZXI8SVNjcm9sbEV2ZW50PigpO1xyXG5cclxuICAvKipcclxuICAgKiBGaXJlcyB3aGVuIHRoZSB2aWV3cG9ydCBzaXplIGlzIGNoYW5nZWQuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpXHJcbiAgb25WaWV3cG9ydENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8SVNpemU+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpcmVzIHdoZW4gYW4gZWxlbWVudCBpcyBjbGlja2VkLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIG9uSXRlbUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxJUmVuZGVyVmlydHVhbExpc3RJdGVtPGFueT4gfCB1bmRlZmluZWQ+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpcmVzIHdoZW4gYW4gZWxlbWVudHMgYXJlIHNlbGVjdGVkLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIG9uU2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxBcnJheTxJZD4gfCBJZCB8IHVuZGVmaW5lZD4oKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGl0ZW1zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJVmlydHVhbExpc3RDb2xsZWN0aW9uIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG4gIHJlYWRvbmx5ICRpdGVtcyA9IHRoaXMuXyRpdGVtcy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfaXRlbXNUcmFuc2Zvcm0gPSAodjogSVZpcnR1YWxMaXN0Q29sbGVjdGlvbiB8IHVuZGVmaW5lZCkgPT4ge1xyXG4gICAgdGhpcy5fdHJhY2tCb3gucmVzZXRDb2xsZWN0aW9uKHYsIHRoaXMuXyRpdGVtU2l6ZS5nZXRWYWx1ZSgpKTtcclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbGxlY3Rpb24gb2YgbGlzdCBpdGVtcy5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBpdGVtcyh2OiBJVmlydHVhbExpc3RDb2xsZWN0aW9uKSB7XHJcbiAgICBpZiAodGhpcy5fJGl0ZW1zLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9pdGVtc1RyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kaXRlbXMubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuXHJcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfTtcclxuICBnZXQgaXRlbXMoKSB7IHJldHVybiB0aGlzLl8kaXRlbXMuZ2V0VmFsdWUoKSBhcyBJVmlydHVhbExpc3RDb2xsZWN0aW9uOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzZWxlY3RlZElkcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8SWQ+IHwgSWQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XHJcbiAgcmVhZG9ubHkgJHNlbGVjdGVkSWRzID0gdGhpcy5fJHNlbGVjdGVkSWRzLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBzZWxlY3RlZCBpdGVtcy5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzZWxlY3RlZElkcyh2OiBBcnJheTxJZD4gfCBJZCB8IHVuZGVmaW5lZCkge1xyXG4gICAgaWYgKHRoaXMuXyRzZWxlY3RlZElkcy5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl8kc2VsZWN0ZWRJZHMubmV4dCh2KTtcclxuXHJcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfTtcclxuICBnZXQgc2VsZWN0ZWRJZHMoKSB7IHJldHVybiB0aGlzLl8kc2VsZWN0ZWRJZHMuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kc2VsZWN0QnlDbGljayA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oREVGQVVMVF9TRUxFQ1RfQllfQ0xJQ0spO1xyXG4gIHJlYWRvbmx5ICRzZWxlY3RCeUNsaWNrID0gdGhpcy5fJHNlbGVjdEJ5Q2xpY2suYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIGZhbHNlLCB0aGUgZWxlbWVudCBpcyBzZWxlY3RlZCB1c2luZyB0aGUgY29uZmlnLnNlbGVjdCBtZXRob2QgcGFzc2VkIHRvIHRoZSB0ZW1wbGF0ZTsgXHJcbiAgICogaWYgdHJ1ZSwgdGhlIGVsZW1lbnQgaXMgc2VsZWN0ZWQgYnkgY2xpY2tpbmcgb24gaXQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHRydWUuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc2VsZWN0QnlDbGljayh2OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fJHNlbGVjdEJ5Q2xpY2suZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fJHNlbGVjdEJ5Q2xpY2submV4dCh2KTtcclxuXHJcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfTtcclxuICBnZXQgc2VsZWN0QnlDbGljaygpIHsgcmV0dXJuIHRoaXMuXyRzZWxlY3RCeUNsaWNrLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNuYXAgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KERFRkFVTFRfU05BUCk7XHJcbiAgcmVhZG9ubHkgJHNuYXAgPSB0aGlzLl8kc25hcC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGVsZW1lbnRzIHdpbGwgc25hcC4gRGVmYXVsdCB2YWx1ZSBpcyBcInRydWVcIi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzbmFwKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kc25hcC5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl8kc25hcC5uZXh0KHYpO1xyXG5cclxuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9O1xyXG4gIGdldCBzbmFwKCkgeyByZXR1cm4gdGhpcy5fJHNuYXAuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oREVGQVVMVF9FTkFCTEVEX0JVRkZFUl9PUFRJTUlaQVRJT04pO1xyXG4gIHJlYWRvbmx5ICRlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uID0gdGhpcy5fJGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24uYXNPYnNlcnZhYmxlKCk7XHJcbiAgLyoqXHJcbiAgICogRXhwZXJpbWVudGFsIVxyXG4gICAqIEVuYWJsZXMgYnVmZmVyIG9wdGltaXphdGlvbi5cclxuICAgKiBDYW4gb25seSBiZSB1c2VkIGlmIGl0ZW1zIGluIHRoZSBjb2xsZWN0aW9uIGFyZSBub3QgYWRkZWQgb3IgdXBkYXRlZC4gT3RoZXJ3aXNlLCBhcnRpZmFjdHMgaW4gdGhlIGZvcm0gb2YgdHdpdGNoaW5nIG9mIHRoZSBzY3JvbGwgYXJlYSBhcmUgcG9zc2libGUuXHJcbiAgICogV29ya3Mgb25seSBpZiB0aGUgcHJvcGVydHkgZHluYW1pYyA9IHRydWVcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbi5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl8kZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbi5uZXh0KHYpO1xyXG5cclxuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9O1xyXG4gIGdldCBlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uKCkgeyByZXR1cm4gdGhpcy5fJGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24uZ2V0VmFsdWUoKTsgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBfJGl0ZW1SZW5kZXJlciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcclxuICByZWFkb25seSAkaXRlbVJlbmRlcmVyID0gdGhpcy5fJGl0ZW1SZW5kZXJlci5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHJlbmRlcmVyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG4gIC8qKlxyXG4gICogUmVuZGVyaW5nIGVsZW1lbnQgdGVtcGxhdGUuXHJcbiAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBpdGVtUmVuZGVyZXIodjogVGVtcGxhdGVSZWY8YW55Pikge1xyXG4gICAgaWYgKHRoaXMuXyRpdGVtUmVuZGVyZXIuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fJGl0ZW1SZW5kZXJlci5uZXh0KHYpO1xyXG5cclxuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9O1xyXG4gIGdldCBpdGVtUmVuZGVyZXIoKSB7IHJldHVybiB0aGlzLl8kaXRlbVJlbmRlcmVyLmdldFZhbHVlKCkgYXMgVGVtcGxhdGVSZWY8YW55PjsgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlcHJlY2F0ZWRcclxuICAgKiBVc2UgYGl0ZW1Db25maWdNYXBgIGluc3RlYWQuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzdGlja3lNYXA6IGFueTtcclxuXHJcbiAgcHJpdmF0ZSBfJGl0ZW1Db25maWdNYXAgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElWaXJ0dWFsTGlzdEl0ZW1Db25maWdNYXA+KHt9KTtcclxuICByZWFkb25seSAkaXRlbUNvbmZpZ01hcCA9IHRoaXMuXyRpdGVtQ29uZmlnTWFwLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHN0aWNreSBwb3NpdGlvbiBhbmQgc2VsZWN0YWJsZSBmb3IgdGhlIGxpc3QgaXRlbSBlbGVtZW50LiBJZiBzdGlja3kgcG9zaXRpb24gaXMgZ3JlYXRlciB0aGFuIDAsIHRoZW4gc3RpY2t5IHBvc2l0aW9uIGlzIGFwcGxpZWQuIFxyXG4gICAqIElmIHRoZSBzdGlja3kgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIGAwYCwgdGhlbiB0aGUgc3RpY2t5IHBvc2l0aW9uIG1vZGUgaXMgZW5hYmxlZCBmb3IgdGhlIGVsZW1lbnQuIGAxYCAtIHBvc2l0aW9uIHN0YXJ0LCBgMmAgLSBwb3NpdGlvbiBlbmQuIERlZmF1bHQgdmFsdWUgaXMgYDBgLlxyXG4gICAqIHNlbGVjdGFibGUgZGV0ZXJtaW5lcyB3aGV0aGVyIGFuIGVsZW1lbnQgY2FuIGJlIHNlbGVjdGVkIG9yIG5vdC4gRGVmYXVsdCB2YWx1ZSBpcyBgdHJ1ZWAuXHJcbiAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0Rqb25ueVgvbmctdmlydHVhbC1saXN0L2Jsb2IvMTYueC9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9tb2RlbHMvaXRlbS1jb25maWctbWFwLm1vZGVsLnRzXHJcbiAgICogQGF1dGhvciBFdmdlbmlpIEdyZWJlbm5pa292XHJcbiAgICogQGVtYWlsIGRqb25ueXhAZ21haWwuY29tXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgaXRlbUNvbmZpZ01hcCh2OiBJVmlydHVhbExpc3RJdGVtQ29uZmlnTWFwKSB7XHJcbiAgICBpZiAodGhpcy5fJGl0ZW1Db25maWdNYXAuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fJGl0ZW1Db25maWdNYXAubmV4dCh2KTtcclxuXHJcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfTtcclxuICBnZXQgaXRlbUNvbmZpZ01hcCgpIHsgcmV0dXJuIHRoaXMuXyRpdGVtQ29uZmlnTWFwLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfaXRlbVNpemVPcHRpb25zID0gKHY6IG51bWJlciB8IHVuZGVmaW5lZCkgPT4ge1xyXG4gICAgaWYgKHYgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9JVEVNX1NJWkU7XHJcbiAgICB9XHJcbiAgICBjb25zdCB2YWwgPSBOdW1iZXIodik7XHJcbiAgICByZXR1cm4gTnVtYmVyLmlzTmFOKHZhbCkgfHwgdmFsIDw9IDAgPyBERUZBVUxUX0lURU1fU0laRSA6IHZhbDtcclxuICB9O1xyXG5cclxuICBwcml2YXRlIF8kaXRlbVNpemUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oREVGQVVMVF9JVEVNX1NJWkUpO1xyXG4gIHJlYWRvbmx5ICRpdGVtU2l6ZSA9IHRoaXMuXyRpdGVtU2l6ZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgLyoqXHJcbiAgICogSWYgZGlyZWN0aW9uID0gJ3ZlcnRpY2FsJywgdGhlbiB0aGUgaGVpZ2h0IG9mIGEgdHlwaWNhbCBlbGVtZW50LiBJZiBkaXJlY3Rpb24gPSAnaG9yaXpvbnRhbCcsIHRoZW4gdGhlIHdpZHRoIG9mIGEgdHlwaWNhbCBlbGVtZW50LlxyXG4gICAqIElnbm9yZWQgaWYgdGhlIGR5bmFtaWNTaXplIHByb3BlcnR5IGlzIHRydWUuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgaXRlbVNpemUodjogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5fJGl0ZW1TaXplLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuXyRpdGVtU2l6ZS5uZXh0KHRoaXMuX2l0ZW1TaXplT3B0aW9ucyh2KSk7XHJcblxyXG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH07XHJcbiAgZ2V0IGl0ZW1TaXplKCkgeyByZXR1cm4gdGhpcy5fJGl0ZW1TaXplLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGR5bmFtaWNTaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihERUZBVUxUX0RZTkFNSUNfU0laRSk7XHJcbiAgcmVhZG9ubHkgJGR5bmFtaWNTaXplID0gdGhpcy5fJGR5bmFtaWNTaXplLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICAvKipcclxuICAgKiBJZiB0cnVlIHRoZW4gdGhlIGl0ZW1zIGluIHRoZSBsaXN0IGNhbiBoYXZlIGRpZmZlcmVudCBzaXplcyBhbmQgdGhlIGl0ZW1TaXplIHByb3BlcnR5IGlzIGlnbm9yZWQuXHJcbiAgICogSWYgZmFsc2UgdGhlbiB0aGUgaXRlbXMgaW4gdGhlIGxpc3QgaGF2ZSBhIGZpeGVkIHNpemUgc3BlY2lmaWVkIGJ5IHRoZSBpdGVtU2l6ZSBwcm9wZXJ0eS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgZmFsc2UuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgZHluYW1pY1NpemUodjogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuXyRkeW5hbWljU2l6ZS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl8kZHluYW1pY1NpemUubmV4dCh2KTtcclxuXHJcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfTtcclxuICBnZXQgZHluYW1pY1NpemUoKSB7IHJldHVybiB0aGlzLl8kZHluYW1pY1NpemUuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kZGlyZWN0aW9uID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEaXJlY3Rpb24+KERFRkFVTFRfRElSRUNUSU9OKTtcclxuICByZWFkb25seSAkZGlyZWN0aW9uID0gdGhpcy5fJGRpcmVjdGlvbi5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGV0ZXJtaW5lcyB0aGUgZGlyZWN0aW9uIGluIHdoaWNoIGVsZW1lbnRzIGFyZSBwbGFjZWQuIERlZmF1bHQgdmFsdWUgaXMgXCJ2ZXJ0aWNhbFwiLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGRpcmVjdGlvbih2OiBEaXJlY3Rpb24pIHtcclxuICAgIGlmICh0aGlzLl8kZGlyZWN0aW9uLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuXyRkaXJlY3Rpb24ubmV4dCh2KTtcclxuXHJcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfTtcclxuICBnZXQgZGlyZWN0aW9uKCkgeyByZXR1cm4gdGhpcy5fJGRpcmVjdGlvbi5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXByZWNhdGVkIFwiaXRlbU9mZnNldFwiIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkLiBVc2UgXCJidWZmZXJTaXplXCIgYW5kIFwibWF4QnVmZmVyU2l6ZVwiLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGl0ZW1zT2Zmc2V0KHY6IG51bWJlcikge1xyXG4gICAgdGhyb3cgRXJyb3IoJ1wiaXRlbU9mZnNldFwiIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkLiBVc2UgXCJidWZmZXJTaXplXCIgYW5kIFwibWF4QnVmZmVyU2l6ZVwiLicpO1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgXyRidWZmZXJTaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KERFRkFVTFRfQlVGRkVSX1NJWkUpO1xyXG4gIHJlYWRvbmx5ICRidWZmZXJTaXplID0gdGhpcy5fJGJ1ZmZlclNpemUuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIE51bWJlciBvZiBlbGVtZW50cyBvdXRzaWRlIHRoZSBzY29wZSBvZiB2aXNpYmlsaXR5LiBEZWZhdWx0IHZhbHVlIGlzIDIuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgYnVmZmVyU2l6ZSh2OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLl8kYnVmZmVyU2l6ZS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl8kYnVmZmVyU2l6ZS5uZXh0KHYpO1xyXG4gIH07XHJcbiAgZ2V0IGJ1ZmZlclNpemUoKSB7IHJldHVybiB0aGlzLl8kYnVmZmVyU2l6ZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgX21heEJ1ZmZlclNpemVUcmFuc2Zvcm0gPSAodjogbnVtYmVyIHwgdW5kZWZpbmVkKSA9PiB7XHJcbiAgICBjb25zdCBidWZmZXJTaXplID0gdGhpcy5fJGJ1ZmZlclNpemUuZ2V0VmFsdWUoKTtcclxuICAgIGlmICh2ID09PSB1bmRlZmluZWQgfHwgdiA8PSBidWZmZXJTaXplKSB7XHJcbiAgICAgIHJldHVybiBidWZmZXJTaXplO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBfJG1heEJ1ZmZlclNpemUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oREVGQVVMVF9NQVhfQlVGRkVSX1NJWkUpO1xyXG4gIHJlYWRvbmx5ICRtYXhCdWZmZXJTaXplID0gdGhpcy5fJG1heEJ1ZmZlclNpemUuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIE1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRzIG91dHNpZGUgdGhlIHNjb3BlIG9mIHZpc2liaWxpdHkuIERlZmF1bHQgdmFsdWUgaXMgMTAwLlxyXG4gICAqIElmIG1heEJ1ZmZlclNpemUgaXMgc2V0IHRvIGJlIGdyZWF0ZXIgdGhhbiBidWZmZXJTaXplLCB0aGVuIGFkYXB0aXZlIGJ1ZmZlciBtb2RlIGlzIGVuYWJsZWQuXHJcbiAgICogVGhlIGdyZWF0ZXIgdGhlIHNjcm9sbCBzaXplLCB0aGUgbW9yZSBlbGVtZW50cyBhcmUgYWxsb2NhdGVkIGZvciByZW5kZXJpbmcuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgbWF4QnVmZmVyU2l6ZSh2OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHZhbCA9IHRoaXMuX21heEJ1ZmZlclNpemVUcmFuc2Zvcm0odik7XHJcbiAgICBpZiAodGhpcy5fJG1heEJ1ZmZlclNpemUuZ2V0VmFsdWUoKSA9PT0gdmFsKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl8kbWF4QnVmZmVyU2l6ZS5uZXh0KHZhbCk7XHJcbiAgfTtcclxuICBnZXQgbWF4QnVmZmVyU2l6ZSgpIHsgcmV0dXJuIHRoaXMuXyRtYXhCdWZmZXJTaXplLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHRyYWNrQnkgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oVFJBQ0tfQllfUFJPUEVSVFlfTkFNRSk7XHJcbiAgcmVhZG9ubHkgJHRyYWNrQnkgPSB0aGlzLl8kdHJhY2tCeS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IGJ5IHdoaWNoIHRyYWNraW5nIGlzIHBlcmZvcm1lZFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHRyYWNrQnkodjogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy5fJHRyYWNrQnkuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fJHRyYWNrQnkubmV4dCh2KTtcclxuICB9O1xyXG4gIGdldCB0cmFja0J5KCkgeyByZXR1cm4gdGhpcy5fJHRyYWNrQnkuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF9pc1ZlcnRpY2FsID0gdGhpcy5nZXRJc1ZlcnRpY2FsKCk7XHJcblxyXG4gIGdldCBvcmllbnRhdGlvbigpIHtcclxuICAgIHJldHVybiB0aGlzLl9pc1ZlcnRpY2FsID8gRGlyZWN0aW9ucy5WRVJUSUNBTCA6IERpcmVjdGlvbnMuSE9SSVpPTlRBTDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgXyRzbmFwcGluZ01ldGhvZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U25hcHBpbmdNZXRob2Q+KERFRkFVTFRfU05BUFBJTkdfTUVUSE9EKTtcclxuICByZWFkb25seSAkc25hcHBpbmdNZXRob2QgPSB0aGlzLl8kc25hcHBpbmdNZXRob2QuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNuYXBwaW5nIG1ldGhvZC5cclxuICAgKiAnZGVmYXVsdCcgLSBOb3JtYWwgZ3JvdXAgcmVuZGVyaW5nLlxyXG4gICAqICdhZHZhbmNlZCcgLSBUaGUgZ3JvdXAgaXMgcmVuZGVyZWQgb24gYSB0cmFuc3BhcmVudCBiYWNrZ3JvdW5kLiBMaXN0IGl0ZW1zIGJlbG93IHRoZSBncm91cCBhcmUgbm90IHJlbmRlcmVkLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNuYXBwaW5nTWV0aG9kKHY6IFNuYXBwaW5nTWV0aG9kKSB7XHJcbiAgICBpZiAodGhpcy5fJHNuYXBwaW5nTWV0aG9kLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuXyRzbmFwcGluZ01ldGhvZC5uZXh0KHYpO1xyXG4gIH07XHJcbiAgZ2V0IHNuYXBwaW5nTWV0aG9kKCkgeyByZXR1cm4gdGhpcy5fJHNuYXBwaW5nTWV0aG9kLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkOiBib29sZWFuID0gdGhpcy5nZXRJc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQoKTtcclxuICBnZXQgaXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkKCkgeyByZXR1cm4gdGhpcy5faXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkOyB9XHJcblxyXG4gIHByaXZhdGUgXyRtZXRob2RGb3JTZWxlY3RpbmcgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1ldGhvZEZvclNlbGVjdGluZz4oREVGQVVMVF9TRUxFQ1RfTUVUSE9EKTtcclxuICByZWFkb25seSAkbWV0aG9kRm9yU2VsZWN0aW5nID0gdGhpcy5fJG1ldGhvZEZvclNlbGVjdGluZy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgLyoqXHJcbiAgICogIE1ldGhvZCBmb3Igc2VsZWN0aW5nIGxpc3QgaXRlbXMuXHJcbiAgICogJ3NlbGVjdCcgLSBMaXN0IGl0ZW1zIGFyZSBzZWxlY3RlZCBvbmUgYnkgb25lLlxyXG4gICAqICdtdWx0aS1zZWxlY3QnIC0gTXVsdGlwbGUgc2VsZWN0aW9uIG9mIGxpc3QgaXRlbXMuXHJcbiAgICogJ25vbmUnIC0gTGlzdCBpdGVtcyBhcmUgbm90IHNlbGVjdGFibGUuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgbWV0aG9kRm9yU2VsZWN0aW5nKHY6IE1ldGhvZEZvclNlbGVjdGluZykge1xyXG4gICAgaWYgKHRoaXMuXyRtZXRob2RGb3JTZWxlY3RpbmcuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fJG1ldGhvZEZvclNlbGVjdGluZy5uZXh0KHYpO1xyXG4gIH07XHJcbiAgZ2V0IG1ldGhvZEZvclNlbGVjdGluZygpIHsgcmV0dXJuIHRoaXMuXyRtZXRob2RGb3JTZWxlY3RpbmcuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF9pc05vdFNlbGVjdGluZyA9IHRoaXMuZ2V0SXNOb3RTZWxlY3RpbmcoKTtcclxuICBnZXQgaXNOb3RTZWxlY3RpbmcoKSB7IHJldHVybiB0aGlzLl9pc05vdFNlbGVjdGluZzsgfVxyXG5cclxuICBwcml2YXRlIF9pc1NpbmdsZVNlbGVjdGluZyA9IHRoaXMuZ2V0SXNTaW5nbGVTZWxlY3RpbmcoKTtcclxuICBnZXQgaXNTaW5nbGVTZWxlY3RpbmcoKSB7IHJldHVybiB0aGlzLl9pc1NpbmdsZVNlbGVjdGluZzsgfVxyXG5cclxuICBwcml2YXRlIF9pc011bHRpU2VsZWN0aW5nID0gdGhpcy5nZXRJc011bHRpU2VsZWN0aW5nKCk7XHJcbiAgZ2V0IGlzTXVsdGlTZWxlY3RpbmcoKSB7IHJldHVybiB0aGlzLl9pc011bHRpU2VsZWN0aW5nOyB9XHJcblxyXG4gIHByaXZhdGUgX2Rpc3BsYXlDb21wb25lbnRzOiBBcnJheTxDb21wb25lbnRSZWY8QmFzZVZpcnR1YWxMaXN0SXRlbUNvbXBvbmVudD4+ID0gW107XHJcblxyXG4gIHByaXZhdGUgX3NuYXBlZERpc3BsYXlDb21wb25lbnQ6IENvbXBvbmVudFJlZjxCYXNlVmlydHVhbExpc3RJdGVtQ29tcG9uZW50PiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgcHJpdmF0ZSBfJGJvdW5kcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVNpemUgfCBudWxsPihudWxsKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbFNpemUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XHJcblxyXG4gIHByaXZhdGUgX3Jlc2l6ZU9ic2VydmVyOiBSZXNpemVPYnNlcnZlciB8IG51bGwgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIF9yZXNpemVTbmFwcGVkQ29tcG9uZW50SGFuZGxlciA9ICgpID0+IHtcclxuICAgIGNvbnN0IGxpc3QgPSB0aGlzLl9saXN0LCBjb250YWluZXIgPSB0aGlzLl9jb250YWluZXIsIHNuYXBwZWRDb21wb25lbnQgPSB0aGlzLl9zbmFwZWREaXNwbGF5Q29tcG9uZW50Py5pbnN0YW5jZTtcclxuICAgIGlmIChsaXN0ICYmIGNvbnRhaW5lciAmJiBzbmFwcGVkQ29tcG9uZW50KSB7XHJcbiAgICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLl9pc1ZlcnRpY2FsLCBsaXN0Qm91bmRzID0gbGlzdC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCBsaXN0RWxlbWVudCA9IGxpc3Q/Lm5hdGl2ZUVsZW1lbnQsXHJcbiAgICAgICAgeyB3aWR0aDogbFdpZHRoLCBoZWlnaHQ6IGxIZWlnaHQgfSA9IGxpc3RFbGVtZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSA/PyB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfSxcclxuICAgICAgICB7IHdpZHRoLCBoZWlnaHQgfSA9IHRoaXMuXyRib3VuZHMuZ2V0VmFsdWUoKSA/PyB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfSxcclxuICAgICAgICBpc1Njcm9sbGFibGUgPSBpc1ZlcnRpY2FsID8gY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0ID4gMCA6IGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFdpZHRoID4gMDtcclxuXHJcbiAgICAgIGxldCBzY3JvbGxCYXJTaXplID0gaXNWZXJ0aWNhbCA/IHdpZHRoIC0gbFdpZHRoIDogaGVpZ2h0IC0gbEhlaWdodCwgaXNTY3JvbGxCYXJPdmVybGFwID0gdHJ1ZSwgb3ZlcmxhcFNjcm9sbEJhclNpemUgPSAwO1xyXG4gICAgICBpZiAoc2Nyb2xsQmFyU2l6ZSA9PT0gMCAmJiBpc1Njcm9sbGFibGUpIHtcclxuICAgICAgICBpc1Njcm9sbEJhck92ZXJsYXAgPSB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaXNTY3JvbGxCYXJPdmVybGFwICYmIElTX0ZJUkVGT1gpIHtcclxuICAgICAgICBzY3JvbGxCYXJTaXplID0gb3ZlcmxhcFNjcm9sbEJhclNpemUgPSBGSVJFRk9YX1NDUk9MTEJBUl9PVkVSTEFQX1NJWkU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHsgd2lkdGg6IHNXaWR0aCwgaGVpZ2h0OiBzSGVpZ2h0IH0gPSBzbmFwcGVkQ29tcG9uZW50LmdldEJvdW5kcygpID8/IHsgd2lkdGg6IDAsIGhlaWdodDogMCB9O1xyXG4gICAgICBzbmFwcGVkQ29tcG9uZW50LmVsZW1lbnQuc3R5bGUuY2xpcFBhdGggPSBgcGF0aChcIk0gMCAwIEwgMCAke3NIZWlnaHR9IEwgJHtzV2lkdGggLSBvdmVybGFwU2Nyb2xsQmFyU2l6ZX0gJHtzSGVpZ2h0fSBMICR7c1dpZHRoIC0gb3ZlcmxhcFNjcm9sbEJhclNpemV9IDAgWlwiKWA7XHJcblxyXG4gICAgICBzbmFwcGVkQ29tcG9uZW50LnJlZ3VsYXJMZW5ndGggPSBgJHtpc1ZlcnRpY2FsID8gbGlzdEJvdW5kcy53aWR0aCA6IGxpc3RCb3VuZHMuaGVpZ2h0fSR7UFh9YDtcclxuICAgICAgY29uc3QgY29udGFpbmVyRWxlbWVudCA9IGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LCBkZWx0YSA9IHNuYXBwZWRDb21wb25lbnQuaXRlbT8ubWVhc3VyZXMuZGVsdGEgPz8gMDtcclxuXHJcbiAgICAgIGxldCBsZWZ0OiBudW1iZXIsIHJpZ2h0OiBudW1iZXIsIHRvcDogbnVtYmVyLCBib3R0b206IG51bWJlcjtcclxuICAgICAgaWYgKGlzVmVydGljYWwpIHtcclxuICAgICAgICBsZWZ0ID0gMDtcclxuICAgICAgICByaWdodCA9IHdpZHRoIC0gc2Nyb2xsQmFyU2l6ZTtcclxuICAgICAgICB0b3AgPSBzSGVpZ2h0O1xyXG4gICAgICAgIGJvdHRvbSA9IGhlaWdodDtcclxuICAgICAgICBjb250YWluZXJFbGVtZW50LnN0eWxlLmNsaXBQYXRoID0gYHBhdGgoXCJNIDAgJHt0b3AgKyBkZWx0YX0gTCAwICR7aGVpZ2h0fSBMICR7d2lkdGh9ICR7aGVpZ2h0fSBMICR7d2lkdGh9IDAgTCAke3JpZ2h0fSAwIEwgJHtyaWdodH0gJHt0b3AgKyBkZWx0YX0gWlwiKWA7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGVmdCA9IHNXaWR0aDtcclxuICAgICAgICByaWdodCA9IHdpZHRoO1xyXG4gICAgICAgIHRvcCA9IDA7XHJcbiAgICAgICAgYm90dG9tID0gaGVpZ2h0IC0gc2Nyb2xsQmFyU2l6ZTtcclxuICAgICAgICBjb250YWluZXJFbGVtZW50LnN0eWxlLmNsaXBQYXRoID0gYHBhdGgoXCJNICR7bGVmdCArIGRlbHRhfSAwIEwgJHtsZWZ0ICsgZGVsdGF9ICR7Ym90dG9tfSBMIDAgJHtib3R0b219IEwgMCAke2hlaWdodH0gTCAke3dpZHRofSAke2hlaWdodH0gTCAke3dpZHRofSAwIFpcIilgO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBfcmVzaXplU25hcHBlZE9ic2VydmVyOiBSZXNpemVPYnNlcnZlciB8IG51bGwgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIF9vblJlc2l6ZUhhbmRsZXIgPSAoKSA9PiB7XHJcbiAgICBjb25zdCBib3VuZHMgPSB0aGlzLl9jb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgaWYgKGJvdW5kcykge1xyXG4gICAgICB0aGlzLl8kYm91bmRzLm5leHQoeyB3aWR0aDogYm91bmRzLndpZHRoLCBoZWlnaHQ6IGJvdW5kcy5oZWlnaHQgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl8kYm91bmRzLm5leHQoeyB3aWR0aDogREVGQVVMVF9MSVNUX1NJWkUsIGhlaWdodDogREVGQVVMVF9MSVNUX1NJWkUgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2lzU25hcHBpbmdNZXRob2RBZHZhbmNlZCkge1xyXG4gICAgICB0aGlzLnVwZGF0ZVJlZ3VsYXJSZW5kZXJlcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfb25TY3JvbGxIYW5kbGVyID0gKGU/OiBFdmVudCkgPT4ge1xyXG4gICAgdGhpcy5jbGVhclNjcm9sbFRvUmVwZWF0RXhlY3V0aW9uVGltZW91dCgpO1xyXG5cclxuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuX2NvbnRhaW5lcj8ubmF0aXZlRWxlbWVudDtcclxuICAgIGlmIChjb250YWluZXIpIHtcclxuICAgICAgY29uc3Qgc2Nyb2xsU2l6ZSA9ICh0aGlzLl9pc1ZlcnRpY2FsID8gY29udGFpbmVyLnNjcm9sbFRvcCA6IGNvbnRhaW5lci5zY3JvbGxMZWZ0KTtcclxuXHJcbiAgICAgIHRoaXMuXyRzY3JvbGxTaXplLm5leHQoc2Nyb2xsU2l6ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF8kaW5pdGlhbGl6ZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgcmVhZG9ubHkgJGluaXRpYWxpemVkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xyXG5cclxuICAvKipcclxuICAgKiBCYXNlIGNsYXNzIG9mIHRoZSBlbGVtZW50IGNvbXBvbmVudFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2l0ZW1Db21wb25lbnRDbGFzczogQ29tcG9uZW50JDE8QmFzZVZpcnR1YWxMaXN0SXRlbUNvbXBvbmVudD4gPSBOZ1ZpcnR1YWxMaXN0SXRlbUNvbXBvbmVudDtcclxuXHJcbiAgLyoqXHJcbiAgICogQmFzZSBjbGFzcyB0cmFja0JveFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3RyYWNrQm94Q2xhc3M6IENvbXBvbmVudCQxPFRyYWNrQm94PiA9IFRyYWNrQm94O1xyXG5cclxuICAvKipcclxuICAgKiBEaWN0aW9uYXJ5IG9mIGVsZW1lbnQgc2l6ZXMgYnkgdGhlaXIgaWRcclxuICAgKi9cclxuICBwcml2YXRlIF90cmFja0JveDogVHJhY2tCb3ggPSBuZXcgdGhpcy5fdHJhY2tCb3hDbGFzcyh0aGlzLnRyYWNrQnkpO1xyXG5cclxuICBwcml2YXRlIF9vblRyYWNrQm94Q2hhbmdlSGFuZGxlciA9ICh2OiBudW1iZXIpID0+IHtcclxuICAgIHRoaXMuXyRjYWNoZVZlcnNpb24ubmV4dCh2KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgXyRjYWNoZVZlcnNpb24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oLTEpO1xyXG4gIGdldCAkY2FjaGVWZXJzaW9uKCkgeyByZXR1cm4gdGhpcy5fJGNhY2hlVmVyc2lvbi5hc09ic2VydmFibGUoKTsgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PixcclxuICAgIHByaXZhdGUgX3NlcnZpY2U6IE5nVmlydHVhbExpc3RTZXJ2aWNlLFxyXG4gICkge1xyXG4gICAgTmdWaXJ0dWFsTGlzdENvbXBvbmVudC5fX25leHRJZCA9IE5nVmlydHVhbExpc3RDb21wb25lbnQuX19uZXh0SWQgKyAxID09PSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUlxyXG4gICAgICA/IDAgOiBOZ1ZpcnR1YWxMaXN0Q29tcG9uZW50Ll9fbmV4dElkICsgMTtcclxuICAgIHRoaXMuX2lkID0gTmdWaXJ0dWFsTGlzdENvbXBvbmVudC5fX25leHRJZDtcclxuXHJcbiAgICB0aGlzLl9zZXJ2aWNlLmluaXRpYWxpemUodGhpcy5fdHJhY2tCb3gpO1xyXG5cclxuICAgIHRoaXMuXyRpbml0aWFsaXplZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgdGhpcy4kaW5pdGlhbGl6ZWQgPSB0aGlzLl8kaW5pdGlhbGl6ZWQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gICAgdGhpcy5fdHJhY2tCb3guZGlzcGxheUNvbXBvbmVudHMgPSB0aGlzLl9kaXNwbGF5Q29tcG9uZW50cztcclxuXHJcbiAgICBjb25zdCAkdHJhY2tCeSA9IHRoaXMuJHRyYWNrQnksXHJcbiAgICAgICRzZWxlY3RCeUNsaWNrID0gdGhpcy4kc2VsZWN0QnlDbGljaztcclxuXHJcbiAgICAkc2VsZWN0QnlDbGljay5waXBlKFxyXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2Uuc2VsZWN0QnlDbGljayA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkdHJhY2tCeS5waXBlKFxyXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3RyYWNrQm94LnRyYWNraW5nUHJvcGVydHlOYW1lID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICRib3VuZHMgPSB0aGlzLl8kYm91bmRzLmFzT2JzZXJ2YWJsZSgpLnBpcGUoXHJcbiAgICAgIGZpbHRlcihiID0+ICEhYiksXHJcbiAgICApLCAkaXRlbXMgPSB0aGlzLiRpdGVtcy5waXBlKFxyXG4gICAgICBtYXAoaSA9PiAhaSA/IFtdIDogaSksXHJcbiAgICApLCAkc2Nyb2xsU2l6ZSA9IHRoaXMuXyRzY3JvbGxTaXplLmFzT2JzZXJ2YWJsZSgpLFxyXG4gICAgICAkaXRlbVNpemUgPSB0aGlzLiRpdGVtU2l6ZS5waXBlKFxyXG4gICAgICAgIG1hcCh2ID0+IHYgPD0gMCA/IERFRkFVTFRfSVRFTV9TSVpFIDogdiksXHJcbiAgICAgICksXHJcbiAgICAgICRidWZmZXJTaXplID0gdGhpcy4kYnVmZmVyU2l6ZS5waXBlKFxyXG4gICAgICAgIG1hcCh2ID0+IHYgPCAwID8gREVGQVVMVF9CVUZGRVJfU0laRSA6IHYpLFxyXG4gICAgICApLFxyXG4gICAgICAkbWF4QnVmZmVyU2l6ZSA9IHRoaXMuJG1heEJ1ZmZlclNpemUucGlwZShcclxuICAgICAgICBtYXAodiA9PiB2IDwgMCA/IERFRkFVTFRfTUFYX0JVRkZFUl9TSVpFIDogdiksXHJcbiAgICAgICksXHJcbiAgICAgICRpdGVtQ29uZmlnTWFwID0gdGhpcy4kaXRlbUNvbmZpZ01hcC5waXBlKFxyXG4gICAgICAgIG1hcCh2ID0+ICF2ID8ge30gOiB2KSxcclxuICAgICAgKSxcclxuICAgICAgJHNuYXAgPSB0aGlzLiRzbmFwLFxyXG4gICAgICAkaXNWZXJ0aWNhbCA9IHRoaXMuJGRpcmVjdGlvbi5waXBlKFxyXG4gICAgICAgIG1hcCh2ID0+IHRoaXMuZ2V0SXNWZXJ0aWNhbCh2IHx8IERFRkFVTFRfRElSRUNUSU9OKSksXHJcbiAgICAgICksXHJcbiAgICAgICRkeW5hbWljU2l6ZSA9IHRoaXMuJGR5bmFtaWNTaXplLFxyXG4gICAgICAkZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbiA9IHRoaXMuJGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24sXHJcbiAgICAgICRzbmFwcGluZ01ldGhvZCA9IHRoaXMuJHNuYXBwaW5nTWV0aG9kLnBpcGUoXHJcbiAgICAgICAgbWFwKHYgPT4gdGhpcy5nZXRJc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQodiB8fCBERUZBVUxUX1NOQVBQSU5HX01FVEhPRCkpLFxyXG4gICAgICApLFxyXG4gICAgICAkbWV0aG9kRm9yU2VsZWN0aW5nID0gdGhpcy4kbWV0aG9kRm9yU2VsZWN0aW5nLFxyXG4gICAgICAkc2VsZWN0ZWRJZHMgPSB0aGlzLiRzZWxlY3RlZElkcyxcclxuICAgICAgJGNhY2hlVmVyc2lvbiA9IHRoaXMuJGNhY2hlVmVyc2lvbjtcclxuXHJcbiAgICAkaXNWZXJ0aWNhbC5waXBlKFxyXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX2lzVmVydGljYWwgPSB2O1xyXG4gICAgICAgIGNvbnN0IGVsOiBIVE1MRWxlbWVudCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcclxuICAgICAgICB0b2dnbGVDbGFzc05hbWUoZWwsIHYgPyBDTEFTU19MSVNUX1ZFUlRJQ0FMIDogQ0xBU1NfTElTVF9IT1JJWk9OVEFMLCB2ID8gQ0xBU1NfTElTVF9IT1JJWk9OVEFMIDogQ0xBU1NfTElTVF9WRVJUSUNBTCk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkc25hcHBpbmdNZXRob2QucGlwZShcclxuICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQgPSB0aGlzLl90cmFja0JveC5pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29tYmluZUxhdGVzdChbJG1ldGhvZEZvclNlbGVjdGluZywgdGhpcy4kaW5pdGlhbGl6ZWRdKS5waXBlKFxyXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICAgZGVib3VuY2VUaW1lKDApLFxyXG4gICAgICBmaWx0ZXIoKFssIGluaXRdKSA9PiBpbml0ID09PSB0cnVlKSxcclxuICAgICAgbWFwKChbdl0pID0+ICh2KSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICBjb25zdCBlbCA9IHRoaXMuX2xpc3Q/Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0SXNNdWx0aVNlbGVjdGluZyh2IHx8IERFRkFVTFRfU05BUFBJTkdfTUVUSE9EKSkge1xyXG4gICAgICAgICAgdGhpcy5faXNNdWx0aVNlbGVjdGluZyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLl9pc05vdFNlbGVjdGluZyA9IHRoaXMuX2lzU2luZ2xlU2VsZWN0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICBpZiAoZWwpIHtcclxuICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKCdyb2xlJywgUk9MRV9MSVNUX0JPWCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLl9zZXJ2aWNlLm1ldGhvZE9mU2VsZWN0aW5nID0gTWV0aG9kc0ZvclNlbGVjdGluZ1R5cGVzLk1VTFRJX1NFTEVDVDtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ2V0SXNTaW5nbGVTZWxlY3RpbmcodiB8fCBERUZBVUxUX1NOQVBQSU5HX01FVEhPRCkpIHtcclxuICAgICAgICAgIHRoaXMuX2lzU2luZ2xlU2VsZWN0aW5nID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuX2lzTm90U2VsZWN0aW5nID0gdGhpcy5faXNNdWx0aVNlbGVjdGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKGVsKSB7XHJcbiAgICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZSgncm9sZScsIFJPTEVfTElTVF9CT1gpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5fc2VydmljZS5tZXRob2RPZlNlbGVjdGluZyA9IE1ldGhvZHNGb3JTZWxlY3RpbmdUeXBlcy5TRUxFQ1Q7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmdldElzTm90U2VsZWN0aW5nKHYgfHwgREVGQVVMVF9TTkFQUElOR19NRVRIT0QpKSB7XHJcbiAgICAgICAgICB0aGlzLl9pc05vdFNlbGVjdGluZyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLl9pc1NpbmdsZVNlbGVjdGluZyA9IHRoaXMuX2lzTXVsdGlTZWxlY3RpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIGlmIChlbCkge1xyXG4gICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCBST0xFX0xJU1QpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5fc2VydmljZS5tZXRob2RPZlNlbGVjdGluZyA9IE1ldGhvZHNGb3JTZWxlY3RpbmdUeXBlcy5OT05FO1xyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRkeW5hbWljU2l6ZS5waXBlKFxyXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICAgdGFwKGR5bmFtaWNTaXplID0+IHtcclxuICAgICAgICB0aGlzLmxpc3RlbkNhY2hlQ2hhbmdlc0lmTmVlZChkeW5hbWljU2l6ZSk7XHJcbiAgICAgIH0pXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuJGluaXRpYWxpemVkLCAkYm91bmRzLCAkaXRlbXMsICRpdGVtQ29uZmlnTWFwLCAkc2Nyb2xsU2l6ZSwgJGl0ZW1TaXplLFxyXG4gICAgICAkYnVmZmVyU2l6ZSwgJG1heEJ1ZmZlclNpemUsICRzbmFwLCAkaXNWZXJ0aWNhbCwgJGR5bmFtaWNTaXplLCAkZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbiwgJGNhY2hlVmVyc2lvbixcclxuICAgIF0pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICBmaWx0ZXIoKFtpbml0aWFsaXplZF0pID0+ICEhaW5pdGlhbGl6ZWQpLFxyXG4gICAgICBzd2l0Y2hNYXAoKFssXHJcbiAgICAgICAgYm91bmRzLCBpdGVtcywgaXRlbUNvbmZpZ01hcCwgc2Nyb2xsU2l6ZSwgaXRlbVNpemUsXHJcbiAgICAgICAgYnVmZmVyU2l6ZSwgbWF4QnVmZmVyU2l6ZSwgc25hcCwgaXNWZXJ0aWNhbCwgZHluYW1pY1NpemUsIGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24sIGNhY2hlVmVyc2lvbixcclxuICAgICAgXSkgPT4ge1xyXG4gICAgICAgIGxldCBhY3R1YWxTY3JvbGxTaXplID0gKHRoaXMuX2lzVmVydGljYWwgPyB0aGlzLl9jb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID8/IDAgOiB0aGlzLl9jb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCkgPz8gMDtcclxuICAgICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGJvdW5kcyEsXHJcbiAgICAgICAgICBvcHRzOiBJVXBkYXRlQ29sbGVjdGlvbk9wdGlvbnM8SVZpcnR1YWxMaXN0SXRlbSwgSVZpcnR1YWxMaXN0Q29sbGVjdGlvbj4gPSB7XHJcbiAgICAgICAgICAgIGJvdW5kczogeyB3aWR0aCwgaGVpZ2h0IH0sIGR5bmFtaWNTaXplLCBpc1ZlcnRpY2FsLCBpdGVtU2l6ZSxcclxuICAgICAgICAgICAgYnVmZmVyU2l6ZSwgbWF4QnVmZmVyU2l6ZSwgc2Nyb2xsU2l6ZTogYWN0dWFsU2Nyb2xsU2l6ZSwgc25hcCwgZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbixcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7IGRpc3BsYXlJdGVtcywgdG90YWxTaXplIH0gPSB0aGlzLl90cmFja0JveC51cGRhdGVDb2xsZWN0aW9uKGl0ZW1zLCBpdGVtQ29uZmlnTWFwLCBvcHRzKTtcclxuXHJcbiAgICAgICAgdGhpcy5yZXNldEJvdW5kc1NpemUoaXNWZXJ0aWNhbCwgdG90YWxTaXplKTtcclxuXHJcbiAgICAgICAgdGhpcy5jcmVhdGVEaXNwbGF5Q29tcG9uZW50c0lmTmVlZChkaXNwbGF5SXRlbXMpO1xyXG5cclxuICAgICAgICB0aGlzLnRyYWNraW5nKCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQpIHtcclxuICAgICAgICAgIHRoaXMudXBkYXRlUmVndWxhclJlbmRlcmVyKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLl9jb250YWluZXI7XHJcblxyXG4gICAgICAgIGlmIChjb250YWluZXIpIHtcclxuICAgICAgICAgIGNvbnN0IGRlbHRhID0gdGhpcy5fdHJhY2tCb3guZGVsdGE7XHJcbiAgICAgICAgICBhY3R1YWxTY3JvbGxTaXplID0gYWN0dWFsU2Nyb2xsU2l6ZSArIGRlbHRhO1xyXG5cclxuICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmNsZWFyRGVsdGEoKTtcclxuXHJcbiAgICAgICAgICBpZiAoc2Nyb2xsU2l6ZSAhPT0gYWN0dWFsU2Nyb2xsU2l6ZSkge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJhbXM6IFNjcm9sbFRvT3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICBbdGhpcy5faXNWZXJ0aWNhbCA/IFRPUF9QUk9QX05BTUUgOiBMRUZUX1BST1BfTkFNRV06IGFjdHVhbFNjcm9sbFNpemUsXHJcbiAgICAgICAgICAgICAgYmVoYXZpb3I6IEJFSEFWSU9SX0lOU1RBTlQgYXMgU2Nyb2xsQmVoYXZpb3JcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvKHBhcmFtcyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gb2YoZGlzcGxheUl0ZW1zKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICRpdGVtUmVuZGVyZXIgPSB0aGlzLiRpdGVtUmVuZGVyZXI7XHJcblxyXG4gICAgJGl0ZW1SZW5kZXJlci5waXBlKFxyXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRyZW5kZXJlci5uZXh0KHYpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGJvdW5kcy5waXBlKFxyXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgdGFwKHZhbHVlID0+IHtcclxuICAgICAgICB0aGlzLm9uVmlld3BvcnRDaGFuZ2UuZW1pdCh2YWx1ZSA/PyB1bmRlZmluZWQpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy5fc2VydmljZS4kaXRlbUNsaWNrLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5vbkl0ZW1DbGljay5lbWl0KHYgPz8gdW5kZWZpbmVkKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGxldCBpc1NlbGVjdGVkSWRzRmlyc3RFbWl0ID0gMDtcclxuXHJcbiAgICB0aGlzLl9zZXJ2aWNlLiRzZWxlY3RlZElkcy5waXBlKFxyXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmlzU2luZ2xlU2VsZWN0aW5nIHx8ICh0aGlzLmlzTXVsdGlTZWxlY3RpbmcgJiYgaXNTZWxlY3RlZElkc0ZpcnN0RW1pdCA+PSAyKSkge1xyXG4gICAgICAgICAgY29uc3QgY3VyciA9IHRoaXMuXyRzZWxlY3RlZElkcy5nZXRWYWx1ZSgpO1xyXG4gICAgICAgICAgaWYgKCh0aGlzLmlzU2luZ2xlU2VsZWN0aW5nICYmIEpTT04uc3RyaW5naWZ5KHYpICE9PSBKU09OLnN0cmluZ2lmeShjdXJyKSkgfHwgKGlzU2VsZWN0ZWRJZHNGaXJzdEVtaXQgPT09IDIgJiYgSlNPTi5zdHJpbmdpZnkodikgIT09IEpTT04uc3RyaW5naWZ5KGN1cnIpKSB8fCBpc1NlbGVjdGVkSWRzRmlyc3RFbWl0ID4gMikge1xyXG4gICAgICAgICAgICB0aGlzLm9uU2VsZWN0LmVtaXQodik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc1NlbGVjdGVkSWRzRmlyc3RFbWl0IDwgMykge1xyXG4gICAgICAgICAgaXNTZWxlY3RlZElkc0ZpcnN0RW1pdCsrO1xyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRzZWxlY3RlZElkcy5waXBlKFxyXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2Uuc2V0U2VsZWN0ZWRJZHModik7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgfVxyXG5cclxuICAvKiogQGludGVybmFsICovXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLm9uSW5pdCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbkluaXQoKSB7XHJcbiAgICB0aGlzLl8kaW5pdGlhbGl6ZWQubmV4dCh0cnVlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbGlzdGVuQ2FjaGVDaGFuZ2VzSWZOZWVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgaWYgKCF0aGlzLl90cmFja0JveC5oYXNFdmVudExpc3RlbmVyKFRSQUNLX0JPWF9DSEFOR0VfRVZFTlRfTkFNRSwgdGhpcy5fb25UcmFja0JveENoYW5nZUhhbmRsZXIpKSB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tCb3guYWRkRXZlbnRMaXN0ZW5lcihUUkFDS19CT1hfQ0hBTkdFX0VWRU5UX05BTUUsIHRoaXMuX29uVHJhY2tCb3hDaGFuZ2VIYW5kbGVyKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuX3RyYWNrQm94Lmhhc0V2ZW50TGlzdGVuZXIoVFJBQ0tfQk9YX0NIQU5HRV9FVkVOVF9OQU1FLCB0aGlzLl9vblRyYWNrQm94Q2hhbmdlSGFuZGxlcikpIHtcclxuICAgICAgICB0aGlzLl90cmFja0JveC5yZW1vdmVFdmVudExpc3RlbmVyKFRSQUNLX0JPWF9DSEFOR0VfRVZFTlRfTkFNRSwgdGhpcy5fb25UcmFja0JveENoYW5nZUhhbmRsZXIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldElzU25hcHBpbmdNZXRob2RBZHZhbmNlZChtPzogU25hcHBpbmdNZXRob2QpIHtcclxuICAgIGNvbnN0IG1ldGhvZCA9IG0gfHwgdGhpcy5fJHNuYXBwaW5nTWV0aG9kLmdldFZhbHVlKCk7XHJcbiAgICByZXR1cm4gaXNTbmFwcGluZ01ldGhvZEFkdmVuY2VkKG1ldGhvZCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldElzTm90U2VsZWN0aW5nKG0/OiBNZXRob2RGb3JTZWxlY3RpbmcpIHtcclxuICAgIGNvbnN0IG1ldGhvZCA9IG0gfHwgdGhpcy5tZXRob2RGb3JTZWxlY3Rpbmc7XHJcbiAgICByZXR1cm4gaXNNZXRob2RGb3JTZWxlY3RpbmcobWV0aG9kLCBNZXRob2RzRm9yU2VsZWN0aW5nLk5PTkUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRJc1NpbmdsZVNlbGVjdGluZyhtPzogTWV0aG9kRm9yU2VsZWN0aW5nKSB7XHJcbiAgICBjb25zdCBtZXRob2QgPSBtIHx8IHRoaXMubWV0aG9kRm9yU2VsZWN0aW5nO1xyXG4gICAgcmV0dXJuIGlzTWV0aG9kRm9yU2VsZWN0aW5nKG1ldGhvZCwgTWV0aG9kc0ZvclNlbGVjdGluZy5TRUxFQ1QpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRJc011bHRpU2VsZWN0aW5nKG0/OiBNZXRob2RGb3JTZWxlY3RpbmcpIHtcclxuICAgIGNvbnN0IG1ldGhvZCA9IG0gfHwgdGhpcy5tZXRob2RGb3JTZWxlY3Rpbmc7XHJcbiAgICByZXR1cm4gaXNNZXRob2RGb3JTZWxlY3RpbmcobWV0aG9kLCBNZXRob2RzRm9yU2VsZWN0aW5nLk1VTFRJX1NFTEVDVCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldElzVmVydGljYWwoZD86IERpcmVjdGlvbikge1xyXG4gICAgY29uc3QgZGlyID0gZCB8fCB0aGlzLmRpcmVjdGlvbjtcclxuICAgIHJldHVybiBpc0RpcmVjdGlvbihkaXIsIERpcmVjdGlvbnMuVkVSVElDQUwpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY29tcG9uZW50c1Jlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcclxuICAgIHRoaXMuX3RyYWNrQm94LmNoYW5nZXMoKTtcclxuICB9KTtcclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVEaXNwbGF5Q29tcG9uZW50c0lmTmVlZChkaXNwbGF5SXRlbXM6IElSZW5kZXJWaXJ0dWFsTGlzdENvbGxlY3Rpb24gfCBudWxsKSB7XHJcbiAgICBpZiAoIWRpc3BsYXlJdGVtcyB8fCAhdGhpcy5fbGlzdENvbnRhaW5lclJlZikge1xyXG4gICAgICB0aGlzLl90cmFja0JveC5zZXREaXNwbGF5T2JqZWN0SW5kZXhNYXBCeUlkKHt9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQgJiYgdGhpcy5zbmFwKSB7XHJcbiAgICAgIGlmICghdGhpcy5fc25hcGVkRGlzcGxheUNvbXBvbmVudCAmJiB0aGlzLl9zbmFwQ29udGFpbmVyUmVmKSB7XHJcbiAgICAgICAgY29uc3QgY29tcCA9IHRoaXMuX3NuYXBDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KHRoaXMuX2l0ZW1Db21wb25lbnRDbGFzcyk7XHJcbiAgICAgICAgY29tcC5pbnN0YW5jZS5yZWd1bGFyID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9zbmFwZWREaXNwbGF5Q29tcG9uZW50ID0gY29tcDtcclxuICAgICAgICB0aGlzLl90cmFja0JveC5zbmFwZWREaXNwbGF5Q29tcG9uZW50ID0gdGhpcy5fc25hcGVkRGlzcGxheUNvbXBvbmVudDtcclxuXHJcbiAgICAgICAgdGhpcy5fcmVzaXplU25hcHBlZE9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKHRoaXMuX3Jlc2l6ZVNuYXBwZWRDb21wb25lbnRIYW5kbGVyKTtcclxuICAgICAgICB0aGlzLl9yZXNpemVTbmFwcGVkT2JzZXJ2ZXIub2JzZXJ2ZShjb21wLmluc3RhbmNlLmVsZW1lbnQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fdHJhY2tCb3guaXRlbXMgPSBkaXNwbGF5SXRlbXM7XHJcblxyXG4gICAgY29uc3QgX2xpc3RDb250YWluZXJSZWYgPSB0aGlzLl9saXN0Q29udGFpbmVyUmVmO1xyXG5cclxuICAgIGNvbnN0IG1heExlbmd0aCA9IGRpc3BsYXlJdGVtcy5sZW5ndGgsIGNvbXBvbmVudHMgPSB0aGlzLl9kaXNwbGF5Q29tcG9uZW50cztcclxuXHJcbiAgICB3aGlsZSAoY29tcG9uZW50cy5sZW5ndGggPCBtYXhMZW5ndGgpIHtcclxuICAgICAgaWYgKF9saXN0Q29udGFpbmVyUmVmKSB7XHJcbiAgICAgICAgY29uc3QgY29tcCA9IF9saXN0Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudCh0aGlzLl9pdGVtQ29tcG9uZW50Q2xhc3MpO1xyXG4gICAgICAgIGNvbXBvbmVudHMucHVzaChjb21wKTtcclxuXHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50c1Jlc2l6ZU9ic2VydmVyLm9ic2VydmUoY29tcC5pbnN0YW5jZS5lbGVtZW50KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVzZXRSZW5kZXJlcnMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlUmVndWxhclJlbmRlcmVyKCkge1xyXG4gICAgdGhpcy5fcmVzaXplU25hcHBlZENvbXBvbmVudEhhbmRsZXIoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzZXRSZW5kZXJlcnMoaXRlbVJlbmRlcmVyPzogVGVtcGxhdGVSZWY8SFRNTEVsZW1lbnQ+KSB7XHJcbiAgICBjb25zdCBkb01hcDogeyBbaWQ6IG51bWJlcl06IG51bWJlciB9ID0ge307XHJcbiAgICBmb3IgKGxldCBpID0gMCwgbCA9IHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5fZGlzcGxheUNvbXBvbmVudHNbaV07XHJcbiAgICAgIGl0ZW0uaW5zdGFuY2UucmVuZGVyZXIgPSBpdGVtUmVuZGVyZXIgfHwgdGhpcy5pdGVtUmVuZGVyZXI7XHJcbiAgICAgIGRvTWFwW2l0ZW0uaW5zdGFuY2UuaWRdID0gaTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5faXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkICYmIHRoaXMuc25hcCAmJiB0aGlzLl9zbmFwZWREaXNwbGF5Q29tcG9uZW50ICYmIHRoaXMuX3NuYXBDb250YWluZXJSZWYpIHtcclxuICAgICAgY29uc3QgY29tcCA9IHRoaXMuX3NuYXBlZERpc3BsYXlDb21wb25lbnQ7XHJcbiAgICAgIGNvbXAuaW5zdGFuY2UucmVuZGVyZXIgPSBpdGVtUmVuZGVyZXIgfHwgdGhpcy5pdGVtUmVuZGVyZXI7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fdHJhY2tCb3guc2V0RGlzcGxheU9iamVjdEluZGV4TWFwQnlJZChkb01hcCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUcmFja2luZyBieSBpZFxyXG4gICAqL1xyXG4gIHByaXZhdGUgdHJhY2tpbmcoKSB7XHJcbiAgICB0aGlzLl90cmFja0JveC50cmFjaygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNldEJvdW5kc1NpemUoaXNWZXJ0aWNhbDogYm9vbGVhbiwgdG90YWxTaXplOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGwgPSB0aGlzLl9saXN0O1xyXG4gICAgaWYgKGwpIHtcclxuICAgICAgbC5uYXRpdmVFbGVtZW50LnN0eWxlW2lzVmVydGljYWwgPyBIRUlHSFRfUFJPUF9OQU1FIDogV0lEVEhfUFJPUF9OQU1FXSA9IGAke3RvdGFsU2l6ZX0ke1BYfWA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgYW4gZWxlbWVudCB3aXRoIGEgZ2l2ZW4gaWRcclxuICAgKi9cclxuICBnZXRJdGVtQm91bmRzKGlkOiBJZCk6IElTaXplIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl90cmFja0JveC5nZXRJdGVtQm91bmRzKGlkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBtZXRob2Qgc2Nyb2xscyB0aGUgbGlzdCB0byB0aGUgZWxlbWVudCB3aXRoIHRoZSBnaXZlbiBpZCBhbmQgcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHNjcm9sbGVkIGFyZWEuXHJcbiAgICogQmVoYXZpb3IgYWNjZXB0cyB0aGUgdmFsdWVzIOKAi+KAi1wiYXV0b1wiLCBcImluc3RhbnRcIiBhbmQgXCJzbW9vdGhcIi5cclxuICAgKi9cclxuICBzY3JvbGxUbyhpZDogSWQsIGJlaGF2aW9yOiBTY3JvbGxCZWhhdmlvciA9IEJFSEFWSU9SX0FVVE8gYXMgU2Nyb2xsQmVoYXZpb3IpIHtcclxuICAgIHRoaXMuc2Nyb2xsVG9FeGVjdXRvcihpZCwgYmVoYXZpb3IpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2Nyb2xsVG9SZXBlYXRFeGVjdXRpb25UaW1lb3V0OiBhbnk7XHJcblxyXG4gIHByaXZhdGUgY2xlYXJTY3JvbGxUb1JlcGVhdEV4ZWN1dGlvblRpbWVvdXQoKSB7XHJcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fc2Nyb2xsVG9SZXBlYXRFeGVjdXRpb25UaW1lb3V0KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2Nyb2xsVG9FeGVjdXRvcihpZDogSWQsIGJlaGF2aW9yOiBTY3JvbGxCZWhhdmlvciwgaXRlcmF0aW9uOiBudW1iZXIgPSAwLCBpc0xhc3RJdGVyYXRpb24gPSBmYWxzZSkge1xyXG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLml0ZW1zO1xyXG4gICAgaWYgKCFpdGVtcyB8fCAhaXRlbXMubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBkeW5hbWljU2l6ZSA9IHRoaXMuZHluYW1pY1NpemUsIGNvbnRhaW5lciA9IHRoaXMuX2NvbnRhaW5lciwgaXRlbVNpemUgPSB0aGlzLml0ZW1TaXplO1xyXG4gICAgaWYgKGNvbnRhaW5lcikge1xyXG4gICAgICB0aGlzLmNsZWFyU2Nyb2xsVG9SZXBlYXRFeGVjdXRpb25UaW1lb3V0KCk7XHJcblxyXG4gICAgICBpZiAoZHluYW1pY1NpemUpIHtcclxuICAgICAgICBpZiAoY29udGFpbmVyKSB7XHJcbiAgICAgICAgICBjb250YWluZXIubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFNDUk9MTCwgdGhpcy5fb25TY3JvbGxIYW5kbGVyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy5fJGJvdW5kcy5nZXRWYWx1ZSgpIHx8IHsgd2lkdGg6IDAsIGhlaWdodDogMCB9LFxyXG4gICAgICAgICAgaXRlbUNvbmZpZ01hcCA9IHRoaXMuaXRlbUNvbmZpZ01hcCwgaXRlbXMgPSB0aGlzLml0ZW1zLCBpc1ZlcnRpY2FsID0gdGhpcy5faXNWZXJ0aWNhbCwgZGVsdGEgPSB0aGlzLl90cmFja0JveC5kZWx0YSxcclxuICAgICAgICAgIG9wdHM6IElHZXRJdGVtUG9zaXRpb25PcHRpb25zPElWaXJ0dWFsTGlzdEl0ZW0sIElWaXJ0dWFsTGlzdENvbGxlY3Rpb24+ID0ge1xyXG4gICAgICAgICAgICBib3VuZHM6IHsgd2lkdGgsIGhlaWdodCB9LCBjb2xsZWN0aW9uOiBpdGVtcywgZHluYW1pY1NpemUsIGlzVmVydGljYWw6IHRoaXMuX2lzVmVydGljYWwsIGl0ZW1TaXplLFxyXG4gICAgICAgICAgICBidWZmZXJTaXplOiB0aGlzLmJ1ZmZlclNpemUsIG1heEJ1ZmZlclNpemU6IHRoaXMubWF4QnVmZmVyU2l6ZSwgc2Nyb2xsU2l6ZTogKGlzVmVydGljYWwgPyBjb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgOiBjb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0KSArIGRlbHRhLFxyXG4gICAgICAgICAgICBzbmFwOiB0aGlzLnNuYXAsIGZyb21JdGVtSWQ6IGlkLCBlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uOiB0aGlzLmVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgc2Nyb2xsU2l6ZSA9IHRoaXMuX3RyYWNrQm94LmdldEl0ZW1Qb3NpdGlvbihpZCwgaXRlbUNvbmZpZ01hcCwgb3B0cyksXHJcbiAgICAgICAgICBwYXJhbXM6IFNjcm9sbFRvT3B0aW9ucyA9IHsgW2lzVmVydGljYWwgPyBUT1BfUFJPUF9OQU1FIDogTEVGVF9QUk9QX05BTUVdOiBzY3JvbGxTaXplLCBiZWhhdmlvciB9O1xyXG5cclxuICAgICAgICBpZiAoc2Nyb2xsU2l6ZSA9PT0gLTEpIHtcclxuICAgICAgICAgIGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoU0NST0xMLCB0aGlzLl9vblNjcm9sbEhhbmRsZXIpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fdHJhY2tCb3guY2xlYXJEZWx0YSgpO1xyXG5cclxuICAgICAgICBpZiAoY29udGFpbmVyKSB7XHJcbiAgICAgICAgICBjb25zdCB7IGRpc3BsYXlJdGVtcywgdG90YWxTaXplIH0gPSB0aGlzLl90cmFja0JveC51cGRhdGVDb2xsZWN0aW9uKGl0ZW1zLCBpdGVtQ29uZmlnTWFwLCB7XHJcbiAgICAgICAgICAgIC4uLm9wdHMsIHNjcm9sbFNpemUsIGZyb21JdGVtSWQ6IGlzTGFzdEl0ZXJhdGlvbiA/IHVuZGVmaW5lZCA6IGlkLFxyXG4gICAgICAgICAgfSksIGRlbHRhID0gdGhpcy5fdHJhY2tCb3guZGVsdGE7XHJcblxyXG4gICAgICAgICAgdGhpcy5fdHJhY2tCb3guY2xlYXJEZWx0YSgpO1xyXG5cclxuICAgICAgICAgIGxldCBhY3R1YWxTY3JvbGxTaXplID0gc2Nyb2xsU2l6ZSArIGRlbHRhO1xyXG5cclxuICAgICAgICAgIHRoaXMucmVzZXRCb3VuZHNTaXplKGlzVmVydGljYWwsIHRvdGFsU2l6ZSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5jcmVhdGVEaXNwbGF5Q29tcG9uZW50c0lmTmVlZChkaXNwbGF5SXRlbXMpO1xyXG5cclxuICAgICAgICAgIHRoaXMudHJhY2tpbmcoKTtcclxuXHJcbiAgICAgICAgICBjb25zdCBfc2Nyb2xsU2l6ZSA9IHRoaXMuX3RyYWNrQm94LmdldEl0ZW1Qb3NpdGlvbihpZCwgaXRlbUNvbmZpZ01hcCwgeyAuLi5vcHRzLCBzY3JvbGxTaXplOiBhY3R1YWxTY3JvbGxTaXplLCBmcm9tSXRlbUlkOiBpZCB9KTtcclxuXHJcbiAgICAgICAgICBpZiAoX3Njcm9sbFNpemUgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoU0NST0xMLCB0aGlzLl9vblNjcm9sbEhhbmRsZXIpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgY29uc3Qgbm90Q2hhbmdlZCA9IGFjdHVhbFNjcm9sbFNpemUgPT09IF9zY3JvbGxTaXplXHJcblxyXG4gICAgICAgICAgaWYgKCFub3RDaGFuZ2VkIHx8IGl0ZXJhdGlvbiA8IE1BWF9TQ1JPTExfVE9fSVRFUkFUSU9OUykge1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyU2Nyb2xsVG9SZXBlYXRFeGVjdXRpb25UaW1lb3V0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3Njcm9sbFRvUmVwZWF0RXhlY3V0aW9uVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9FeGVjdXRvcihpZCwgQkVIQVZJT1JfSU5TVEFOVCBhcyBTY3JvbGxCZWhhdmlvciwgaXRlcmF0aW9uICsgMSwgbm90Q2hhbmdlZCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fJHNjcm9sbFNpemUubmV4dChhY3R1YWxTY3JvbGxTaXplKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoU0NST0xMLCB0aGlzLl9vblNjcm9sbEhhbmRsZXIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG8ocGFyYW1zKTtcclxuXHJcbiAgICAgICAgdGhpcy5fJHNjcm9sbFNpemUubmV4dChzY3JvbGxTaXplKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBpbmRleCA9IGl0ZW1zLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uaWQgPT09IGlkKTtcclxuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgY29uc3Qgc2Nyb2xsU2l6ZSA9IGluZGV4ICogdGhpcy5pdGVtU2l6ZTtcclxuICAgICAgICAgIGNvbnN0IHBhcmFtczogU2Nyb2xsVG9PcHRpb25zID0geyBbdGhpcy5faXNWZXJ0aWNhbCA/IFRPUF9QUk9QX05BTUUgOiBMRUZUX1BST1BfTkFNRV06IHNjcm9sbFNpemUsIGJlaGF2aW9yIH07XHJcbiAgICAgICAgICBjb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUbyhwYXJhbXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2Nyb2xscyB0aGUgc2Nyb2xsIGFyZWEgdG8gdGhlIGRlc2lyZWQgZWxlbWVudCB3aXRoIHRoZSBzcGVjaWZpZWQgSUQuXHJcbiAgICovXHJcbiAgc2Nyb2xsVG9FbmQoYmVoYXZpb3I6IFNjcm9sbEJlaGF2aW9yID0gQkVIQVZJT1JfSU5TVEFOVCBhcyBTY3JvbGxCZWhhdmlvcikge1xyXG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLml0ZW1zLCBsYXRJdGVtID0gaXRlbXNbaXRlbXMubGVuZ3RoID4gMCA/IGl0ZW1zLmxlbmd0aCAtIDEgOiAwXTtcclxuICAgIHRoaXMuc2Nyb2xsVG8obGF0SXRlbS5pZCwgYmVoYXZpb3IpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfb25Db250YWluZXJTY3JvbGxIYW5kbGVyID0gKGU6IEV2ZW50KSA9PiB7XHJcbiAgICBjb25zdCBjb250YWluZXJFbCA9IHRoaXMuX2NvbnRhaW5lcjtcclxuICAgIGlmIChjb250YWluZXJFbCkge1xyXG4gICAgICBjb25zdCBzY3JvbGxTaXplID0gKHRoaXMuX2lzVmVydGljYWwgPyBjb250YWluZXJFbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA6IGNvbnRhaW5lckVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCk7XHJcbiAgICAgIHRoaXMuX3RyYWNrQm94LmRlbHRhRGlyZWN0aW9uID0gdGhpcy5fJHNjcm9sbFNpemUuZ2V0VmFsdWUoKSA+IHNjcm9sbFNpemUgPyAtMSA6IHRoaXMuXyRzY3JvbGxTaXplLmdldFZhbHVlKCkgPCBzY3JvbGxTaXplID8gMSA6IDA7XHJcblxyXG4gICAgICBjb25zdCBldmVudCA9IG5ldyBTY3JvbGxFdmVudCh7XHJcbiAgICAgICAgZGlyZWN0aW9uOiB0aGlzLl90cmFja0JveC5zY3JvbGxEaXJlY3Rpb24sIGNvbnRhaW5lcjogY29udGFpbmVyRWwubmF0aXZlRWxlbWVudCxcclxuICAgICAgICBsaXN0OiB0aGlzLl9saXN0IS5uYXRpdmVFbGVtZW50LCBkZWx0YTogdGhpcy5fdHJhY2tCb3guZGVsdGEsXHJcbiAgICAgICAgc2Nyb2xsRGVsdGE6IHRoaXMuX3RyYWNrQm94LnNjcm9sbERlbHRhLCBpc1ZlcnRpY2FsOiB0aGlzLl9pc1ZlcnRpY2FsLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMub25TY3JvbGwuZW1pdChldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9vbkNvbnRhaW5lclNjcm9sbEVuZEhhbmRsZXIgPSAoZTogRXZlbnQpID0+IHtcclxuICAgIGNvbnN0IGNvbnRhaW5lckVsID0gdGhpcy5fY29udGFpbmVyO1xyXG4gICAgaWYgKGNvbnRhaW5lckVsKSB7XHJcbiAgICAgIGNvbnN0IHNjcm9sbFNpemUgPSAodGhpcy5faXNWZXJ0aWNhbCA/IGNvbnRhaW5lckVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wIDogY29udGFpbmVyRWwubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0KTtcclxuICAgICAgdGhpcy5fdHJhY2tCb3guZGVsdGFEaXJlY3Rpb24gPSB0aGlzLl8kc2Nyb2xsU2l6ZS5nZXRWYWx1ZSgpID4gc2Nyb2xsU2l6ZSA/IC0xIDogMDtcclxuXHJcbiAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IFNjcm9sbEV2ZW50KHtcclxuICAgICAgICBkaXJlY3Rpb246IHRoaXMuX3RyYWNrQm94LnNjcm9sbERpcmVjdGlvbiwgY29udGFpbmVyOiBjb250YWluZXJFbC5uYXRpdmVFbGVtZW50LFxyXG4gICAgICAgIGxpc3Q6IHRoaXMuX2xpc3QhLm5hdGl2ZUVsZW1lbnQsIGRlbHRhOiB0aGlzLl90cmFja0JveC5kZWx0YSxcclxuICAgICAgICBzY3JvbGxEZWx0YTogdGhpcy5fdHJhY2tCb3guc2Nyb2xsRGVsdGEsIGlzVmVydGljYWw6IHRoaXMuX2lzVmVydGljYWwsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5vblNjcm9sbEVuZC5lbWl0KGV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBAaW50ZXJuYWwgKi9cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFmdGVyVmlld0luaXQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIGNvbnN0IGNvbnRhaW5lckVsID0gdGhpcy5fY29udGFpbmVyO1xyXG4gICAgaWYgKGNvbnRhaW5lckVsKSB7XHJcbiAgICAgIC8vIGZvciBkaXJlY3Rpb24gY2FsY3VsYXRpb25cclxuICAgICAgY29udGFpbmVyRWwubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFNDUk9MTCwgdGhpcy5fb25Db250YWluZXJTY3JvbGxIYW5kbGVyKTtcclxuICAgICAgY29udGFpbmVyRWwubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFNDUk9MTF9FTkQsIHRoaXMuX29uQ29udGFpbmVyU2Nyb2xsRW5kSGFuZGxlcik7XHJcblxyXG4gICAgICBjb250YWluZXJFbC5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoU0NST0xMLCB0aGlzLl9vblNjcm9sbEhhbmRsZXIpO1xyXG5cclxuICAgICAgdGhpcy5fcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIodGhpcy5fb25SZXNpemVIYW5kbGVyKTtcclxuICAgICAgdGhpcy5fcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShjb250YWluZXJFbC5uYXRpdmVFbGVtZW50KTtcclxuXHJcbiAgICAgIHRoaXMuX29uUmVzaXplSGFuZGxlcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kaXNwb3NlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRpc3Bvc2UoKSB7XHJcbiAgICB0aGlzLmNsZWFyU2Nyb2xsVG9SZXBlYXRFeGVjdXRpb25UaW1lb3V0KCk7XHJcblxyXG4gICAgaWYgKHRoaXMuX3RyYWNrQm94KSB7XHJcbiAgICAgIHRoaXMuX3RyYWNrQm94LmRpc3Bvc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fY29tcG9uZW50c1Jlc2l6ZU9ic2VydmVyKSB7XHJcbiAgICAgIHRoaXMuX2NvbXBvbmVudHNSZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX3Jlc2l6ZU9ic2VydmVyKSB7XHJcbiAgICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fcmVzaXplU25hcHBlZE9ic2VydmVyKSB7XHJcbiAgICAgIHRoaXMuX3Jlc2l6ZVNuYXBwZWRPYnNlcnZlci5kaXNjb25uZWN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY29udGFpbmVyRWwgPSB0aGlzLl9jb250YWluZXI7XHJcbiAgICBpZiAoY29udGFpbmVyRWwpIHtcclxuICAgICAgY29udGFpbmVyRWwubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFNDUk9MTCwgdGhpcy5fb25TY3JvbGxIYW5kbGVyKTtcclxuICAgICAgY29udGFpbmVyRWwubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFNDUk9MTCwgdGhpcy5fb25Db250YWluZXJTY3JvbGxIYW5kbGVyKTtcclxuICAgICAgY29udGFpbmVyRWwubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFNDUk9MTF9FTkQsIHRoaXMuX29uQ29udGFpbmVyU2Nyb2xsRW5kSGFuZGxlcik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX3NuYXBlZERpc3BsYXlDb21wb25lbnQpIHtcclxuICAgICAgdGhpcy5fc25hcGVkRGlzcGxheUNvbXBvbmVudC5kZXN0cm95KCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzKSB7XHJcbiAgICAgIHdoaWxlICh0aGlzLl9kaXNwbGF5Q29tcG9uZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgY29uc3QgY29tcCA9IHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzLnBvcCgpO1xyXG4gICAgICAgIGNvbXA/LmRlc3Ryb3koKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2ICpuZ0lmPVwic25hcFwiICNzbmFwcGVkIHBhcnQ9XCJzbmFwcGVkLWl0ZW1cIiBjbGFzcz1cIm5ndmxfX2xpc3Qtc25hcHBlclwiPlxyXG4gIDxuZy1jb250YWluZXIgI3NuYXBSZW5kZXJlckNvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cclxuPC9kaXY+XHJcbjxkaXYgI2NvbnRhaW5lciBwYXJ0PVwic2Nyb2xsZXJcIiBjbGFzcz1cIm5ndmxfX3Njcm9sbGVyXCI+XHJcbiAgPGRpdiBbYXR0ci5hcmlhLW9yaWVudGF0aW9uXT1cIm9yaWVudGF0aW9uXCIgI2xpc3QgcGFydD1cImxpc3RcIiBjbGFzcz1cIm5ndmxfX2xpc3RcIj5cclxuICAgIDxuZy1jb250YWluZXIgI3JlbmRlcmVyc0NvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cclxuICA8L2Rpdj5cclxuPC9kaXY+Il19
|
|
847
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctdmlydHVhbC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL25nLXZpcnR1YWwtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9uZy12aXJ0dWFsLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNVLHVCQUF1QixFQUFxQixTQUFTLEVBQWdCLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUNoRyxNQUFNLEVBQWUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixHQUN2RixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsU0FBUyxFQUFhLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsSixPQUFPLEVBQ0wsYUFBYSxFQUFFLGdCQUFnQixFQUFFLHFCQUFxQixFQUFFLG1CQUFtQixFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLG9CQUFvQixFQUFFLG1DQUFtQyxFQUFFLGlCQUFpQixFQUNqTSxpQkFBaUIsRUFBRSx1QkFBdUIsRUFBRSx1QkFBdUIsRUFBRSxxQkFBcUIsRUFBRSxZQUFZLEVBQUUsdUJBQXVCLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLHdCQUF3QixFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFDcE8sc0JBQXNCLEVBQUUsZUFBZSxHQUN4QyxNQUFNLFNBQVMsQ0FBQztBQUlqQixPQUFPLEVBQWEsVUFBVSxFQUFzQixtQkFBbUIsRUFBa0IsTUFBTSxTQUFTLENBQUM7QUFDekcsT0FBTyxFQUFFLFdBQVcsRUFBRSxlQUFl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QVc7c0JBRGQsS0FBSztnQkFtQkYsU0FBUztzQkFEWixLQUFLO2dCQWdCRixXQUFXO3NCQURkLEtBQUs7Z0JBWUYsVUFBVTtzQkFEYixLQUFLO2dCQTJCRixhQUFhO3NCQURoQixLQUFLO2dCQWtCRixPQUFPO3NCQURWLEtBQUs7Z0JBeUJGLGNBQWM7c0JBRGpCLEtBQUs7Z0JBdUJGLGtCQUFrQjtzQkFEckIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIENvbXBvbmVudFJlZiwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCxcclxuICBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkLCBWaWV3Q29udGFpbmVyUmVmLCBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgT2JzZXJ2YWJsZSwgb2YsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtcclxuICBCRUhBVklPUl9BVVRPLCBCRUhBVklPUl9JTlNUQU5ULCBDTEFTU19MSVNUX0hPUklaT05UQUwsIENMQVNTX0xJU1RfVkVSVElDQUwsIERFRkFVTFRfQlVGRkVSX1NJWkUsIERFRkFVTFRfRElSRUNUSU9OLCBERUZBVUxUX0RZTkFNSUNfU0laRSwgREVGQVVMVF9FTkFCTEVEX0JVRkZFUl9PUFRJTUlaQVRJT04sIERFRkFVTFRfSVRFTV9TSVpFLFxyXG4gIERFRkFVTFRfTElTVF9TSVpFLCBERUZBVUxUX01BWF9CVUZGRVJfU0laRSwgREVGQVVMVF9TRUxFQ1RfQllfQ0xJQ0ssIERFRkFVTFRfU0VMRUNUX01FVEhPRCwgREVGQVVMVF9TTkFQLCBERUZBVUxUX1NOQVBQSU5HX01FVEhPRCwgSEVJR0hUX1BST1BfTkFNRSwgTEVGVF9QUk9QX05BTUUsIE1BWF9TQ1JPTExfVE9fSVRFUkFUSU9OUywgUFgsIFNDUk9MTCwgU0NST0xMX0VORCwgVE9QX1BST1BfTkFNRSxcclxuICBUUkFDS19CWV9QUk9QRVJUWV9OQU1FLCBXSURUSF9QUk9QX05BTUUsXHJcbn0gZnJvbSAnLi9jb25zdCc7XHJcbmltcG9ydCB7IElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW0sIElTY3JvbGxFdmVudCwgSVZpcnR1YWxMaXN0Q29sbGVjdGlvbiwgSVZpcnR1YWxMaXN0SXRlbSwgSVZpcnR1YWxMaXN0SXRlbUNvbmZpZ01hcCB9IGZyb20gJy4vbW9kZWxzJztcclxuaW1wb3J0IHsgSWQsIElTaXplIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IElSZW5kZXJWaXJ0dWFsTGlzdENvbGxlY3Rpb24gfSBmcm9tICcuL21vZGVscy9yZW5kZXItY29sbGVjdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IERpcmVjdGlvbiwgRGlyZWN0aW9ucywgTWV0aG9kRm9yU2VsZWN0aW5nLCBNZXRob2RzRm9yU2VsZWN0aW5nLCBTbmFwcGluZ01ldGhvZCB9IGZyb20gJy4vZW51bXMnO1xyXG5pbXBvcnQgeyBTY3JvbGxFdmVudCwgdG9nZ2xlQ2xhc3NOYW1lIH0gZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCB7IElHZXRJdGVtUG9zaXRpb25PcHRpb25zLCBJVXBkYXRlQ29sbGVjdGlvbk9wdGlvbnMsIFRSQUNLX0JPWF9DSEFOR0VfRVZFTlRfTkFNRSwgVHJhY2tCb3ggfSBmcm9tICcuL3V0aWxzL3RyYWNrQm94JztcclxuaW1wb3J0IHsgaXNTbmFwcGluZ01ldGhvZEFkdmVuY2VkIH0gZnJvbSAnLi91dGlscy9zbmFwcGluZy1tZXRob2QnO1xyXG5pbXBvcnQgeyBGSVJFRk9YX1NDUk9MTEJBUl9PVkVSTEFQX1NJWkUsIElTX0ZJUkVGT1ggfSBmcm9tICcuL3V0aWxzL2Jyb3dzZXInO1xyXG5pbXBvcnQgeyBOZ1ZpcnR1YWxMaXN0SXRlbUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9uZy12aXJ0dWFsLWxpc3QtaXRlbS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBCYXNlVmlydHVhbExpc3RJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9tb2RlbHMvYmFzZS12aXJ0dWFsLWxpc3QtaXRlbS1jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQkMSB9IGZyb20gJy4vbW9kZWxzL2NvbXBvbmVudC5tb2RlbCc7XHJcbmltcG9ydCB7IGlzRGlyZWN0aW9uIH0gZnJvbSAnLi91dGlscy9pc0RpcmVjdGlvbic7XHJcbmltcG9ydCB7IE5nVmlydHVhbExpc3RTZXJ2aWNlIH0gZnJvbSAnLi9uZy12aXJ0dWFsLWxpc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IGlzTWV0aG9kRm9yU2VsZWN0aW5nIH0gZnJvbSAnLi91dGlscy9pc01ldGhvZEZvclNlbGVjdGluZyc7XHJcbmltcG9ydCB7IE1ldGhvZHNGb3JTZWxlY3RpbmdUeXBlcyB9IGZyb20gJy4vZW51bXMvbWV0aG9kLWZvci1zZWxlY3RpbmctdHlwZXMnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XHJcblxyXG5jb25zdCBST0xFX0xJU1QgPSAnbGlzdCcsXHJcbiAgUk9MRV9MSVNUX0JPWCA9ICdsaXN0Ym94JztcclxuXHJcbi8qKlxyXG4gKiBWaXJ0dWFsIGxpc3QgY29tcG9uZW50LlxyXG4gKiBNYXhpbXVtIHBlcmZvcm1hbmNlIGZvciBleHRyZW1lbHkgbGFyZ2UgbGlzdHMuXHJcbiAqIEl0IGlzIGJhc2VkIG9uIGFsZ29yaXRobXMgZm9yIHZpcnR1YWxpemF0aW9uIG9mIHNjcmVlbiBvYmplY3RzLlxyXG4gKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vRGpvbm55WC9uZy12aXJ0dWFsLWxpc3QvYmxvYi8xNi54L3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL25nLXZpcnR1YWwtbGlzdC5jb21wb25lbnQudHNcclxuICogQGF1dGhvciBFdmdlbmlpIEdyZWJlbm5pa292XHJcbiAqIEBlbWFpbCBkam9ubnl4QGdtYWlsLmNvbVxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICduZy12aXJ0dWFsLWxpc3QnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9uZy12aXJ0dWFsLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL25nLXZpcnR1YWwtbGlzdC5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLlNoYWRvd0RvbSxcclxuICBwcm92aWRlcnM6IFtOZ1ZpcnR1YWxMaXN0U2VydmljZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ1ZpcnR1YWxMaXN0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgc3RhdGljIF9fbmV4dElkOiBudW1iZXIgPSAwO1xyXG5cclxuICBwcml2YXRlIF9pZDogbnVtYmVyID0gTmdWaXJ0dWFsTGlzdENvbXBvbmVudC5fX25leHRJZDtcclxuICAvKipcclxuICAgKiBSZWFkb25seS4gUmV0dXJucyB0aGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGNvbXBvbmVudC5cclxuICAgKi9cclxuICBnZXQgaWQoKSB7IHJldHVybiB0aGlzLl9pZDsgfVxyXG5cclxuICBAVmlld0NoaWxkKCdyZW5kZXJlcnNDb250YWluZXInLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSlcclxuICBwcml2YXRlIF9saXN0Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmIHwgdW5kZWZpbmVkO1xyXG5cclxuICBAVmlld0NoaWxkKCdjb250YWluZXInLCB7IHJlYWQ6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+IH0pXHJcbiAgcHJpdmF0ZSBfY29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQFZpZXdDaGlsZCgnbGlzdCcsIHsgcmVhZDogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4gfSlcclxuICBwcml2YXRlIF9saXN0OiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQFZpZXdDaGlsZCgnc25hcFJlbmRlcmVyQ29udGFpbmVyJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXHJcbiAgcHJpdmF0ZSBfc25hcENvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQFZpZXdDaGlsZCgnc25hcHBlZCcsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxyXG4gIHByaXZhdGUgX3NuYXBwZWRDb250YWluZXI6IFZpZXdDb250YWluZXJSZWYgfCB1bmRlZmluZWQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpcmVzIHdoZW4gdGhlIGxpc3QgaGFzIGJlZW4gc2Nyb2xsZWQuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpXHJcbiAgb25TY3JvbGwgPSBuZXcgRXZlbnRFbWl0dGVyPElTY3JvbGxFdmVudD4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRmlyZXMgd2hlbiB0aGUgbGlzdCBoYXMgY29tcGxldGVkIHNjcm9sbGluZy5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBvblNjcm9sbEVuZCA9IG5ldyBFdmVudEVtaXR0ZXI8SVNjcm9sbEV2ZW50PigpO1xyXG5cclxuICAvKipcclxuICAgKiBGaXJlcyB3aGVuIHRoZSB2aWV3cG9ydCBzaXplIGlzIGNoYW5nZWQuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpXHJcbiAgb25WaWV3cG9ydENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8SVNpemU+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpcmVzIHdoZW4gYW4gZWxlbWVudCBpcyBjbGlja2VkLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIG9uSXRlbUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxJUmVuZGVyVmlydHVhbExpc3RJdGVtPGFueT4gfCB1bmRlZmluZWQ+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpcmVzIHdoZW4gYW4gZWxlbWVudHMgYXJlIHNlbGVjdGVkLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIG9uU2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxBcnJheTxJZD4gfCBJZCB8IHVuZGVmaW5lZD4oKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGl0ZW1zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJVmlydHVhbExpc3RDb2xsZWN0aW9uIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG4gIHJlYWRvbmx5ICRpdGVtcyA9IHRoaXMuXyRpdGVtcy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfaXRlbXNUcmFuc2Zvcm0gPSAodjogSVZpcnR1YWxMaXN0Q29sbGVjdGlvbiB8IHVuZGVmaW5lZCkgPT4ge1xyXG4gICAgdGhpcy5fdHJhY2tCb3gucmVzZXRDb2xsZWN0aW9uKHYsIHRoaXMuXyRpdGVtU2l6ZS5nZXRWYWx1ZSgpKTtcclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbGxlY3Rpb24gb2YgbGlzdCBpdGVtcy5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBpdGVtcyh2OiBJVmlydHVhbExpc3RDb2xsZWN0aW9uKSB7XHJcbiAgICBpZiAodGhpcy5fJGl0ZW1zLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9pdGVtc1RyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kaXRlbXMubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuXHJcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfTtcclxuICBnZXQgaXRlbXMoKSB7IHJldHVybiB0aGlzLl8kaXRlbXMuZ2V0VmFsdWUoKSBhcyBJVmlydHVhbExpc3RDb2xsZWN0aW9uOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzZWxlY3RlZElkcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8SWQ+IHwgSWQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XHJcbiAgcmVhZG9ubHkgJHNlbGVjdGVkSWRzID0gdGhpcy5fJHNlbGVjdGVkSWRzLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBzZWxlY3RlZCBpdGVtcy5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzZWxlY3RlZElkcyh2OiBBcnJheTxJZD4gfCBJZCB8IHVuZGVmaW5lZCkge1xyXG4gICAgaWYgKHRoaXMuXyRzZWxlY3RlZElkcy5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl8kc2VsZWN0ZWRJZHMubmV4dCh2KTtcclxuXHJcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfTtcclxuICBnZXQgc2VsZWN0ZWRJZHMoKSB7IHJldHVybiB0aGlzLl8kc2VsZWN0ZWRJZHMuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kc2VsZWN0QnlDbGljayA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oREVGQVVMVF9TRUxFQ1RfQllfQ0xJQ0spO1xyXG4gIHJlYWRvbmx5ICRzZWxlY3RCeUNsaWNrID0gdGhpcy5fJHNlbGVjdEJ5Q2xpY2suYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIGZhbHNlLCB0aGUgZWxlbWVudCBpcyBzZWxlY3RlZCB1c2luZyB0aGUgY29uZmlnLnNlbGVjdCBtZXRob2QgcGFzc2VkIHRvIHRoZSB0ZW1wbGF0ZTsgXHJcbiAgICogaWYgdHJ1ZSwgdGhlIGVsZW1lbnQgaXMgc2VsZWN0ZWQgYnkgY2xpY2tpbmcgb24gaXQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHRydWUuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc2VsZWN0QnlDbGljayh2OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fJHNlbGVjdEJ5Q2xpY2suZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fJHNlbGVjdEJ5Q2xpY2submV4dCh2KTtcclxuXHJcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfTtcclxuICBnZXQgc2VsZWN0QnlDbGljaygpIHsgcmV0dXJuIHRoaXMuXyRzZWxlY3RCeUNsaWNrLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNuYXAgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KERFRkFVTFRfU05BUCk7XHJcbiAgcmVhZG9ubHkgJHNuYXAgPSB0aGlzLl8kc25hcC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGVsZW1lbnRzIHdpbGwgc25hcC4gRGVmYXVsdCB2YWx1ZSBpcyBcInRydWVcIi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzbmFwKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kc25hcC5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl8kc25hcC5uZXh0KHYpO1xyXG5cclxuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9O1xyXG4gIGdldCBzbmFwKCkgeyByZXR1cm4gdGhpcy5fJHNuYXAuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oREVGQVVMVF9FTkFCTEVEX0JVRkZFUl9PUFRJTUlaQVRJT04pO1xyXG4gIHJlYWRvbmx5ICRlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uID0gdGhpcy5fJGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24uYXNPYnNlcnZhYmxlKCk7XHJcbiAgLyoqXHJcbiAgICogRXhwZXJpbWVudGFsIVxyXG4gICAqIEVuYWJsZXMgYnVmZmVyIG9wdGltaXphdGlvbi5cclxuICAgKiBDYW4gb25seSBiZSB1c2VkIGlmIGl0ZW1zIGluIHRoZSBjb2xsZWN0aW9uIGFyZSBub3QgYWRkZWQgb3IgdXBkYXRlZC4gT3RoZXJ3aXNlLCBhcnRpZmFjdHMgaW4gdGhlIGZvcm0gb2YgdHdpdGNoaW5nIG9mIHRoZSBzY3JvbGwgYXJlYSBhcmUgcG9zc2libGUuXHJcbiAgICogV29ya3Mgb25seSBpZiB0aGUgcHJvcGVydHkgZHluYW1pYyA9IHRydWVcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbi5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl8kZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbi5uZXh0KHYpO1xyXG5cclxuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9O1xyXG4gIGdldCBlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uKCkgeyByZXR1cm4gdGhpcy5fJGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24uZ2V0VmFsdWUoKTsgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBfJGl0ZW1SZW5kZXJlciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcclxuICByZWFkb25seSAkaXRlbVJlbmRlcmVyID0gdGhpcy5fJGl0ZW1SZW5kZXJlci5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHJlbmRlcmVyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG4gIC8qKlxyXG4gICogUmVuZGVyaW5nIGVsZW1lbnQgdGVtcGxhdGUuXHJcbiAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBpdGVtUmVuZGVyZXIodjogVGVtcGxhdGVSZWY8YW55Pikge1xyXG4gICAgaWYgKHRoaXMuXyRpdGVtUmVuZGVyZXIuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fJGl0ZW1SZW5kZXJlci5uZXh0KHYpO1xyXG5cclxuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9O1xyXG4gIGdldCBpdGVtUmVuZGVyZXIoKSB7IHJldHVybiB0aGlzLl8kaXRlbVJlbmRlcmVyLmdldFZhbHVlKCkgYXMgVGVtcGxhdGVSZWY8YW55PjsgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlcHJlY2F0ZWRcclxuICAgKiBVc2UgYGl0ZW1Db25maWdNYXBgIGluc3RlYWQuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzdGlja3lNYXA6IGFueTtcclxuXHJcbiAgcHJpdmF0ZSBfJGl0ZW1Db25maWdNYXAgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElWaXJ0dWFsTGlzdEl0ZW1Db25maWdNYXA+KHt9KTtcclxuICByZWFkb25seSAkaXRlbUNvbmZpZ01hcCA9IHRoaXMuXyRpdGVtQ29uZmlnTWFwLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHN0aWNreSBwb3NpdGlvbiBhbmQgc2VsZWN0YWJsZSBmb3IgdGhlIGxpc3QgaXRlbSBlbGVtZW50LiBJZiBzdGlja3kgcG9zaXRpb24gaXMgZ3JlYXRlciB0aGFuIDAsIHRoZW4gc3RpY2t5IHBvc2l0aW9uIGlzIGFwcGxpZWQuIFxyXG4gICAqIElmIHRoZSBzdGlja3kgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIGAwYCwgdGhlbiB0aGUgc3RpY2t5IHBvc2l0aW9uIG1vZGUgaXMgZW5hYmxlZCBmb3IgdGhlIGVsZW1lbnQuIGAxYCAtIHBvc2l0aW9uIHN0YXJ0LCBgMmAgLSBwb3NpdGlvbiBlbmQuIERlZmF1bHQgdmFsdWUgaXMgYDBgLlxyXG4gICAqIHNlbGVjdGFibGUgZGV0ZXJtaW5lcyB3aGV0aGVyIGFuIGVsZW1lbnQgY2FuIGJlIHNlbGVjdGVkIG9yIG5vdC4gRGVmYXVsdCB2YWx1ZSBpcyBgdHJ1ZWAuXHJcbiAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0Rqb25ueVgvbmctdmlydHVhbC1saXN0L2Jsb2IvMTYueC9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9tb2RlbHMvaXRlbS1jb25maWctbWFwLm1vZGVsLnRzXHJcbiAgICogQGF1dGhvciBFdmdlbmlpIEdyZWJlbm5pa292XHJcbiAgICogQGVtYWlsIGRqb25ueXhAZ21haWwuY29tXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgaXRlbUNvbmZpZ01hcCh2OiBJVmlydHVhbExpc3RJdGVtQ29uZmlnTWFwKSB7XHJcbiAgICBpZiAodGhpcy5fJGl0ZW1Db25maWdNYXAuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fJGl0ZW1Db25maWdNYXAubmV4dCh2KTtcclxuXHJcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfTtcclxuICBnZXQgaXRlbUNvbmZpZ01hcCgpIHsgcmV0dXJuIHRoaXMuXyRpdGVtQ29uZmlnTWFwLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfaXRlbVNpemVPcHRpb25zID0gKHY6IG51bWJlciB8IHVuZGVmaW5lZCkgPT4ge1xyXG4gICAgaWYgKHYgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9JVEVNX1NJWkU7XHJcbiAgICB9XHJcbiAgICBjb25zdCB2YWwgPSBOdW1iZXIodik7XHJcbiAgICByZXR1cm4gTnVtYmVyLmlzTmFOKHZhbCkgfHwgdmFsIDw9IDAgPyBERUZBVUxUX0lURU1fU0laRSA6IHZhbDtcclxuICB9O1xyXG5cclxuICBwcml2YXRlIF8kaXRlbVNpemUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oREVGQVVMVF9JVEVNX1NJWkUpO1xyXG4gIHJlYWRvbmx5ICRpdGVtU2l6ZSA9IHRoaXMuXyRpdGVtU2l6ZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgLyoqXHJcbiAgICogSWYgZGlyZWN0aW9uID0gJ3ZlcnRpY2FsJywgdGhlbiB0aGUgaGVpZ2h0IG9mIGEgdHlwaWNhbCBlbGVtZW50LiBJZiBkaXJlY3Rpb24gPSAnaG9yaXpvbnRhbCcsIHRoZW4gdGhlIHdpZHRoIG9mIGEgdHlwaWNhbCBlbGVtZW50LlxyXG4gICAqIElnbm9yZWQgaWYgdGhlIGR5bmFtaWNTaXplIHByb3BlcnR5IGlzIHRydWUuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgaXRlbVNpemUodjogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5fJGl0ZW1TaXplLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuXyRpdGVtU2l6ZS5uZXh0KHRoaXMuX2l0ZW1TaXplT3B0aW9ucyh2KSk7XHJcblxyXG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH07XHJcbiAgZ2V0IGl0ZW1TaXplKCkgeyByZXR1cm4gdGhpcy5fJGl0ZW1TaXplLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGR5bmFtaWNTaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihERUZBVUxUX0RZTkFNSUNfU0laRSk7XHJcbiAgcmVhZG9ubHkgJGR5bmFtaWNTaXplID0gdGhpcy5fJGR5bmFtaWNTaXplLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICAvKipcclxuICAgKiBJZiB0cnVlIHRoZW4gdGhlIGl0ZW1zIGluIHRoZSBsaXN0IGNhbiBoYXZlIGRpZmZlcmVudCBzaXplcyBhbmQgdGhlIGl0ZW1TaXplIHByb3BlcnR5IGlzIGlnbm9yZWQuXHJcbiAgICogSWYgZmFsc2UgdGhlbiB0aGUgaXRlbXMgaW4gdGhlIGxpc3QgaGF2ZSBhIGZpeGVkIHNpemUgc3BlY2lmaWVkIGJ5IHRoZSBpdGVtU2l6ZSBwcm9wZXJ0eS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgZmFsc2UuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgZHluYW1pY1NpemUodjogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuXyRkeW5hbWljU2l6ZS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl8kZHluYW1pY1NpemUubmV4dCh2KTtcclxuXHJcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfTtcclxuICBnZXQgZHluYW1pY1NpemUoKSB7IHJldHVybiB0aGlzLl8kZHluYW1pY1NpemUuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kZGlyZWN0aW9uID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEaXJlY3Rpb24+KERFRkFVTFRfRElSRUNUSU9OKTtcclxuICByZWFkb25seSAkZGlyZWN0aW9uID0gdGhpcy5fJGRpcmVjdGlvbi5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGV0ZXJtaW5lcyB0aGUgZGlyZWN0aW9uIGluIHdoaWNoIGVsZW1lbnRzIGFyZSBwbGFjZWQuIERlZmF1bHQgdmFsdWUgaXMgXCJ2ZXJ0aWNhbFwiLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGRpcmVjdGlvbih2OiBEaXJlY3Rpb24pIHtcclxuICAgIGlmICh0aGlzLl8kZGlyZWN0aW9uLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuXyRkaXJlY3Rpb24ubmV4dCh2KTtcclxuXHJcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfTtcclxuICBnZXQgZGlyZWN0aW9uKCkgeyByZXR1cm4gdGhpcy5fJGRpcmVjdGlvbi5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXByZWNhdGVkIFwiaXRlbU9mZnNldFwiIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkLiBVc2UgXCJidWZmZXJTaXplXCIgYW5kIFwibWF4QnVmZmVyU2l6ZVwiLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGl0ZW1zT2Zmc2V0KHY6IG51bWJlcikge1xyXG4gICAgdGhyb3cgRXJyb3IoJ1wiaXRlbU9mZnNldFwiIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkLiBVc2UgXCJidWZmZXJTaXplXCIgYW5kIFwibWF4QnVmZmVyU2l6ZVwiLicpO1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgXyRidWZmZXJTaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KERFRkFVTFRfQlVGRkVSX1NJWkUpO1xyXG4gIHJlYWRvbmx5ICRidWZmZXJTaXplID0gdGhpcy5fJGJ1ZmZlclNpemUuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIE51bWJlciBvZiBlbGVtZW50cyBvdXRzaWRlIHRoZSBzY29wZSBvZiB2aXNpYmlsaXR5LiBEZWZhdWx0IHZhbHVlIGlzIDIuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgYnVmZmVyU2l6ZSh2OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLl8kYnVmZmVyU2l6ZS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl8kYnVmZmVyU2l6ZS5uZXh0KHYpO1xyXG4gIH07XHJcbiAgZ2V0IGJ1ZmZlclNpemUoKSB7IHJldHVybiB0aGlzLl8kYnVmZmVyU2l6ZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgX21heEJ1ZmZlclNpemVUcmFuc2Zvcm0gPSAodjogbnVtYmVyIHwgdW5kZWZpbmVkKSA9PiB7XHJcbiAgICBjb25zdCBidWZmZXJTaXplID0gdGhpcy5fJGJ1ZmZlclNpemUuZ2V0VmFsdWUoKTtcclxuICAgIGlmICh2ID09PSB1bmRlZmluZWQgfHwgdiA8PSBidWZmZXJTaXplKSB7XHJcbiAgICAgIHJldHVybiBidWZmZXJTaXplO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBfJG1heEJ1ZmZlclNpemUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oREVGQVVMVF9NQVhfQlVGRkVSX1NJWkUpO1xyXG4gIHJlYWRvbmx5ICRtYXhCdWZmZXJTaXplID0gdGhpcy5fJG1heEJ1ZmZlclNpemUuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIE1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRzIG91dHNpZGUgdGhlIHNjb3BlIG9mIHZpc2liaWxpdHkuIERlZmF1bHQgdmFsdWUgaXMgMTAwLlxyXG4gICAqIElmIG1heEJ1ZmZlclNpemUgaXMgc2V0IHRvIGJlIGdyZWF0ZXIgdGhhbiBidWZmZXJTaXplLCB0aGVuIGFkYXB0aXZlIGJ1ZmZlciBtb2RlIGlzIGVuYWJsZWQuXHJcbiAgICogVGhlIGdyZWF0ZXIgdGhlIHNjcm9sbCBzaXplLCB0aGUgbW9yZSBlbGVtZW50cyBhcmUgYWxsb2NhdGVkIGZvciByZW5kZXJpbmcuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgbWF4QnVmZmVyU2l6ZSh2OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHZhbCA9IHRoaXMuX21heEJ1ZmZlclNpemVUcmFuc2Zvcm0odik7XHJcbiAgICBpZiAodGhpcy5fJG1heEJ1ZmZlclNpemUuZ2V0VmFsdWUoKSA9PT0gdmFsKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl8kbWF4QnVmZmVyU2l6ZS5uZXh0KHZhbCk7XHJcbiAgfTtcclxuICBnZXQgbWF4QnVmZmVyU2l6ZSgpIHsgcmV0dXJuIHRoaXMuXyRtYXhCdWZmZXJTaXplLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHRyYWNrQnkgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oVFJBQ0tfQllfUFJPUEVSVFlfTkFNRSk7XHJcbiAgcmVhZG9ubHkgJHRyYWNrQnkgPSB0aGlzLl8kdHJhY2tCeS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IGJ5IHdoaWNoIHRyYWNraW5nIGlzIHBlcmZvcm1lZFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHRyYWNrQnkodjogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy5fJHRyYWNrQnkuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fJHRyYWNrQnkubmV4dCh2KTtcclxuICB9O1xyXG4gIGdldCB0cmFja0J5KCkgeyByZXR1cm4gdGhpcy5fJHRyYWNrQnkuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF9pc1ZlcnRpY2FsID0gdGhpcy5nZXRJc1ZlcnRpY2FsKCk7XHJcblxyXG4gIGdldCBvcmllbnRhdGlvbigpIHtcclxuICAgIHJldHVybiB0aGlzLl9pc1ZlcnRpY2FsID8gRGlyZWN0aW9ucy5WRVJUSUNBTCA6IERpcmVjdGlvbnMuSE9SSVpPTlRBTDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgXyRzbmFwcGluZ01ldGhvZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U25hcHBpbmdNZXRob2Q+KERFRkFVTFRfU05BUFBJTkdfTUVUSE9EKTtcclxuICByZWFkb25seSAkc25hcHBpbmdNZXRob2QgPSB0aGlzLl8kc25hcHBpbmdNZXRob2QuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNuYXBwaW5nIG1ldGhvZC5cclxuICAgKiAnZGVmYXVsdCcgLSBOb3JtYWwgZ3JvdXAgcmVuZGVyaW5nLlxyXG4gICAqICdhZHZhbmNlZCcgLSBUaGUgZ3JvdXAgaXMgcmVuZGVyZWQgb24gYSB0cmFuc3BhcmVudCBiYWNrZ3JvdW5kLiBMaXN0IGl0ZW1zIGJlbG93IHRoZSBncm91cCBhcmUgbm90IHJlbmRlcmVkLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNuYXBwaW5nTWV0aG9kKHY6IFNuYXBwaW5nTWV0aG9kKSB7XHJcbiAgICBpZiAodGhpcy5fJHNuYXBwaW5nTWV0aG9kLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuXyRzbmFwcGluZ01ldGhvZC5uZXh0KHYpO1xyXG4gIH07XHJcbiAgZ2V0IHNuYXBwaW5nTWV0aG9kKCkgeyByZXR1cm4gdGhpcy5fJHNuYXBwaW5nTWV0aG9kLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkOiBib29sZWFuID0gdGhpcy5nZXRJc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQoKTtcclxuICBnZXQgaXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkKCkgeyByZXR1cm4gdGhpcy5faXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkOyB9XHJcblxyXG4gIHByaXZhdGUgXyRtZXRob2RGb3JTZWxlY3RpbmcgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1ldGhvZEZvclNlbGVjdGluZz4oREVGQVVMVF9TRUxFQ1RfTUVUSE9EKTtcclxuICByZWFkb25seSAkbWV0aG9kRm9yU2VsZWN0aW5nID0gdGhpcy5fJG1ldGhvZEZvclNlbGVjdGluZy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgLyoqXHJcbiAgICogIE1ldGhvZCBmb3Igc2VsZWN0aW5nIGxpc3QgaXRlbXMuXHJcbiAgICogJ3NlbGVjdCcgLSBMaXN0IGl0ZW1zIGFyZSBzZWxlY3RlZCBvbmUgYnkgb25lLlxyXG4gICAqICdtdWx0aS1zZWxlY3QnIC0gTXVsdGlwbGUgc2VsZWN0aW9uIG9mIGxpc3QgaXRlbXMuXHJcbiAgICogJ25vbmUnIC0gTGlzdCBpdGVtcyBhcmUgbm90IHNlbGVjdGFibGUuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgbWV0aG9kRm9yU2VsZWN0aW5nKHY6IE1ldGhvZEZvclNlbGVjdGluZykge1xyXG4gICAgaWYgKHRoaXMuXyRtZXRob2RGb3JTZWxlY3RpbmcuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fJG1ldGhvZEZvclNlbGVjdGluZy5uZXh0KHYpO1xyXG4gIH07XHJcbiAgZ2V0IG1ldGhvZEZvclNlbGVjdGluZygpIHsgcmV0dXJuIHRoaXMuXyRtZXRob2RGb3JTZWxlY3RpbmcuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF9pc05vdFNlbGVjdGluZyA9IHRoaXMuZ2V0SXNOb3RTZWxlY3RpbmcoKTtcclxuICBnZXQgaXNOb3RTZWxlY3RpbmcoKSB7IHJldHVybiB0aGlzLl9pc05vdFNlbGVjdGluZzsgfVxyXG5cclxuICBwcml2YXRlIF9pc1NpbmdsZVNlbGVjdGluZyA9IHRoaXMuZ2V0SXNTaW5nbGVTZWxlY3RpbmcoKTtcclxuICBnZXQgaXNTaW5nbGVTZWxlY3RpbmcoKSB7IHJldHVybiB0aGlzLl9pc1NpbmdsZVNlbGVjdGluZzsgfVxyXG5cclxuICBwcml2YXRlIF9pc011bHRpU2VsZWN0aW5nID0gdGhpcy5nZXRJc011bHRpU2VsZWN0aW5nKCk7XHJcbiAgZ2V0IGlzTXVsdGlTZWxlY3RpbmcoKSB7IHJldHVybiB0aGlzLl9pc011bHRpU2VsZWN0aW5nOyB9XHJcblxyXG4gIHByaXZhdGUgX2Rpc3BsYXlDb21wb25lbnRzOiBBcnJheTxDb21wb25lbnRSZWY8QmFzZVZpcnR1YWxMaXN0SXRlbUNvbXBvbmVudD4+ID0gW107XHJcblxyXG4gIHByaXZhdGUgX3NuYXBlZERpc3BsYXlDb21wb25lbnQ6IENvbXBvbmVudFJlZjxCYXNlVmlydHVhbExpc3RJdGVtQ29tcG9uZW50PiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgcHJpdmF0ZSBfJGJvdW5kcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVNpemUgfCBudWxsPihudWxsKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbFNpemUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XHJcblxyXG4gIHByaXZhdGUgX3Jlc2l6ZU9ic2VydmVyOiBSZXNpemVPYnNlcnZlciB8IG51bGwgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIF9yZXNpemVTbmFwcGVkQ29tcG9uZW50SGFuZGxlciA9ICgpID0+IHtcclxuICAgIGNvbnN0IGxpc3QgPSB0aGlzLl9saXN0LCBjb250YWluZXIgPSB0aGlzLl9jb250YWluZXIsIHNuYXBwZWRDb21wb25lbnQgPSB0aGlzLl9zbmFwZWREaXNwbGF5Q29tcG9uZW50Py5pbnN0YW5jZTtcclxuICAgIGlmIChsaXN0ICYmIGNvbnRhaW5lciAmJiBzbmFwcGVkQ29tcG9uZW50KSB7XHJcbiAgICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLl9pc1ZlcnRpY2FsLCBsaXN0Qm91bmRzID0gbGlzdC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCBsaXN0RWxlbWVudCA9IGxpc3Q/Lm5hdGl2ZUVsZW1lbnQsXHJcbiAgICAgICAgeyB3aWR0aDogbFdpZHRoLCBoZWlnaHQ6IGxIZWlnaHQgfSA9IGxpc3RFbGVtZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSA/PyB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfSxcclxuICAgICAgICB7IHdpZHRoLCBoZWlnaHQgfSA9IHRoaXMuXyRib3VuZHMuZ2V0VmFsdWUoKSA/PyB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfSxcclxuICAgICAgICBpc1Njcm9sbGFibGUgPSBpc1ZlcnRpY2FsID8gY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0ID4gMCA6IGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFdpZHRoID4gMDtcclxuXHJcbiAgICAgIGxldCBzY3JvbGxCYXJTaXplID0gaXNWZXJ0aWNhbCA/IHdpZHRoIC0gbFdpZHRoIDogaGVpZ2h0IC0gbEhlaWdodCwgaXNTY3JvbGxCYXJPdmVybGFwID0gdHJ1ZSwgb3ZlcmxhcFNjcm9sbEJhclNpemUgPSAwO1xyXG4gICAgICBpZiAoc2Nyb2xsQmFyU2l6ZSA9PT0gMCAmJiBpc1Njcm9sbGFibGUpIHtcclxuICAgICAgICBpc1Njcm9sbEJhck92ZXJsYXAgPSB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaXNTY3JvbGxCYXJPdmVybGFwICYmIElTX0ZJUkVGT1gpIHtcclxuICAgICAgICBzY3JvbGxCYXJTaXplID0gb3ZlcmxhcFNjcm9sbEJhclNpemUgPSBGSVJFRk9YX1NDUk9MTEJBUl9PVkVSTEFQX1NJWkU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHsgd2lkdGg6IHNXaWR0aCwgaGVpZ2h0OiBzSGVpZ2h0IH0gPSBzbmFwcGVkQ29tcG9uZW50LmdldEJvdW5kcygpID8/IHsgd2lkdGg6IDAsIGhlaWdodDogMCB9O1xyXG4gICAgICBzbmFwcGVkQ29tcG9uZW50LmVsZW1lbnQuc3R5bGUuY2xpcFBhdGggPSBgcGF0aChcIk0gMCAwIEwgMCAke3NIZWlnaHR9IEwgJHtzV2lkdGggLSBvdmVybGFwU2Nyb2xsQmFyU2l6ZX0gJHtzSGVpZ2h0fSBMICR7c1dpZHRoIC0gb3ZlcmxhcFNjcm9sbEJhclNpemV9IDAgWlwiKWA7XHJcblxyXG4gICAgICBzbmFwcGVkQ29tcG9uZW50LnJlZ3VsYXJMZW5ndGggPSBgJHtpc1ZlcnRpY2FsID8gbGlzdEJvdW5kcy53aWR0aCA6IGxpc3RCb3VuZHMuaGVpZ2h0fSR7UFh9YDtcclxuICAgICAgY29uc3QgY29udGFpbmVyRWxlbWVudCA9IGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LCBkZWx0YSA9IHNuYXBwZWRDb21wb25lbnQuaXRlbT8ubWVhc3VyZXMuZGVsdGEgPz8gMDtcclxuXHJcbiAgICAgIGxldCBsZWZ0OiBudW1iZXIsIHJpZ2h0OiBudW1iZXIsIHRvcDogbnVtYmVyLCBib3R0b206IG51bWJlcjtcclxuICAgICAgaWYgKGlzVmVydGljYWwpIHtcclxuICAgICAgICBsZWZ0ID0gMDtcclxuICAgICAgICByaWdodCA9IHdpZHRoIC0gc2Nyb2xsQmFyU2l6ZTtcclxuICAgICAgICB0b3AgPSBzSGVpZ2h0O1xyXG4gICAgICAgIGJvdHRvbSA9IGhlaWdodDtcclxuICAgICAgICBjb250YWluZXJFbGVtZW50LnN0eWxlLmNsaXBQYXRoID0gYHBhdGgoXCJNIDAgJHt0b3AgKyBkZWx0YX0gTCAwICR7aGVpZ2h0fSBMICR7d2lkdGh9ICR7aGVpZ2h0fSBMICR7d2lkdGh9IDAgTCAke3JpZ2h0fSAwIEwgJHtyaWdodH0gJHt0b3AgKyBkZWx0YX0gWlwiKWA7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGVmdCA9IHNXaWR0aDtcclxuICAgICAgICByaWdodCA9IHdpZHRoO1xyXG4gICAgICAgIHRvcCA9IDA7XHJcbiAgICAgICAgYm90dG9tID0gaGVpZ2h0IC0gc2Nyb2xsQmFyU2l6ZTtcclxuICAgICAgICBjb250YWluZXJFbGVtZW50LnN0eWxlLmNsaXBQYXRoID0gYHBhdGgoXCJNICR7bGVmdCArIGRlbHRhfSAwIEwgJHtsZWZ0ICsgZGVsdGF9ICR7Ym90dG9tfSBMIDAgJHtib3R0b219IEwgMCAke2hlaWdodH0gTCAke3dpZHRofSAke2hlaWdodH0gTCAke3dpZHRofSAwIFpcIilgO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBfcmVzaXplU25hcHBlZE9ic2VydmVyOiBSZXNpemVPYnNlcnZlciB8IG51bGwgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIF9vblJlc2l6ZUhhbmRsZXIgPSAoKSA9PiB7XHJcbiAgICBjb25zdCBib3VuZHMgPSB0aGlzLl9jb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgaWYgKGJvdW5kcykge1xyXG4gICAgICB0aGlzLl8kYm91bmRzLm5leHQoeyB3aWR0aDogYm91bmRzLndpZHRoLCBoZWlnaHQ6IGJvdW5kcy5oZWlnaHQgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl8kYm91bmRzLm5leHQoeyB3aWR0aDogREVGQVVMVF9MSVNUX1NJWkUsIGhlaWdodDogREVGQVVMVF9MSVNUX1NJWkUgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2lzU25hcHBpbmdNZXRob2RBZHZhbmNlZCkge1xyXG4gICAgICB0aGlzLnVwZGF0ZVJlZ3VsYXJSZW5kZXJlcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfb25TY3JvbGxIYW5kbGVyID0gKGU/OiBFdmVudCkgPT4ge1xyXG4gICAgdGhpcy5jbGVhclNjcm9sbFRvUmVwZWF0RXhlY3V0aW9uVGltZW91dCgpO1xyXG5cclxuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuX2NvbnRhaW5lcj8ubmF0aXZlRWxlbWVudDtcclxuICAgIGlmIChjb250YWluZXIpIHtcclxuICAgICAgY29uc3Qgc2Nyb2xsU2l6ZSA9ICh0aGlzLl9pc1ZlcnRpY2FsID8gY29udGFpbmVyLnNjcm9sbFRvcCA6IGNvbnRhaW5lci5zY3JvbGxMZWZ0KTtcclxuXHJcbiAgICAgIHRoaXMuXyRzY3JvbGxTaXplLm5leHQoc2Nyb2xsU2l6ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF8kaW5pdGlhbGl6ZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICByZWFkb25seSAkaW5pdGlhbGl6ZWQgPSB0aGlzLl8kaW5pdGlhbGl6ZWQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyR2aWV3SW5pdGlhbGl6ZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICByZWFkb25seSAkdmlld0luaXRpYWxpemVkID0gdGhpcy5fJHZpZXdJbml0aWFsaXplZC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgLyoqXHJcbiAgICogQmFzZSBjbGFzcyBvZiB0aGUgZWxlbWVudCBjb21wb25lbnRcclxuICAgKi9cclxuICBwcml2YXRlIF9pdGVtQ29tcG9uZW50Q2xhc3M6IENvbXBvbmVudCQxPEJhc2VWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQ+ID0gTmdWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIEJhc2UgY2xhc3MgdHJhY2tCb3hcclxuICAgKi9cclxuICBwcml2YXRlIF90cmFja0JveENsYXNzOiBDb21wb25lbnQkMTxUcmFja0JveD4gPSBUcmFja0JveDtcclxuXHJcbiAgLyoqXHJcbiAgICogRGljdGlvbmFyeSBvZiBlbGVtZW50IHNpemVzIGJ5IHRoZWlyIGlkXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfdHJhY2tCb3g6IFRyYWNrQm94ID0gbmV3IHRoaXMuX3RyYWNrQm94Q2xhc3ModGhpcy50cmFja0J5KTtcclxuXHJcbiAgcHJpdmF0ZSBfb25UcmFja0JveENoYW5nZUhhbmRsZXIgPSAodjogbnVtYmVyKSA9PiB7XHJcbiAgICB0aGlzLl8kY2FjaGVWZXJzaW9uLm5leHQodik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF8kY2FjaGVWZXJzaW9uID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KC0xKTtcclxuICBnZXQgJGNhY2hlVmVyc2lvbigpIHsgcmV0dXJuIHRoaXMuXyRjYWNoZVZlcnNpb24uYXNPYnNlcnZhYmxlKCk7IH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9jZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4sXHJcbiAgICBwcml2YXRlIF9zZXJ2aWNlOiBOZ1ZpcnR1YWxMaXN0U2VydmljZSxcclxuICApIHtcclxuICAgIE5nVmlydHVhbExpc3RDb21wb25lbnQuX19uZXh0SWQgPSBOZ1ZpcnR1YWxMaXN0Q29tcG9uZW50Ll9fbmV4dElkICsgMSA9PT0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcclxuICAgICAgPyAwIDogTmdWaXJ0dWFsTGlzdENvbXBvbmVudC5fX25leHRJZCArIDE7XHJcbiAgICB0aGlzLl9pZCA9IE5nVmlydHVhbExpc3RDb21wb25lbnQuX19uZXh0SWQ7XHJcblxyXG4gICAgdGhpcy5fc2VydmljZS5pbml0aWFsaXplKHRoaXMuX3RyYWNrQm94KTtcclxuXHJcbiAgICB0aGlzLiR2aWV3SW5pdGlhbGl6ZWQucGlwZShcclxuICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXHJcbiAgICAgIGZpbHRlcih2ID0+ICEhdiksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLmxpc3RFbGVtZW50ID0gdGhpcy5fbGlzdD8ubmF0aXZlRWxlbWVudCA/PyBudWxsO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy5fdHJhY2tCb3guZGlzcGxheUNvbXBvbmVudHMgPSB0aGlzLl9kaXNwbGF5Q29tcG9uZW50cztcclxuXHJcbiAgICBjb25zdCAkdHJhY2tCeSA9IHRoaXMuJHRyYWNrQnksXHJcbiAgICAgICRzZWxlY3RCeUNsaWNrID0gdGhpcy4kc2VsZWN0QnlDbGljaztcclxuXHJcbiAgICAkc2VsZWN0QnlDbGljay5waXBlKFxyXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2Uuc2VsZWN0QnlDbGljayA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkdHJhY2tCeS5waXBlKFxyXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3RyYWNrQm94LnRyYWNraW5nUHJvcGVydHlOYW1lID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICRib3VuZHMgPSB0aGlzLl8kYm91bmRzLmFzT2JzZXJ2YWJsZSgpLnBpcGUoXHJcbiAgICAgIGZpbHRlcihiID0+ICEhYiksXHJcbiAgICApLCAkaXRlbXMgPSB0aGlzLiRpdGVtcy5waXBlKFxyXG4gICAgICBtYXAoaSA9PiAhaSA/IFtdIDogaSksXHJcbiAgICApLCAkc2Nyb2xsU2l6ZSA9IHRoaXMuXyRzY3JvbGxTaXplLmFzT2JzZXJ2YWJsZSgpLFxyXG4gICAgICAkaXRlbVNpemUgPSB0aGlzLiRpdGVtU2l6ZS5waXBlKFxyXG4gICAgICAgIG1hcCh2ID0+IHYgPD0gMCA/IERFRkFVTFRfSVRFTV9TSVpFIDogdiksXHJcbiAgICAgICksXHJcbiAgICAgICRidWZmZXJTaXplID0gdGhpcy4kYnVmZmVyU2l6ZS5waXBlKFxyXG4gICAgICAgIG1hcCh2ID0+IHYgPCAwID8gREVGQVVMVF9CVUZGRVJfU0laRSA6IHYpLFxyXG4gICAgICApLFxyXG4gICAgICAkbWF4QnVmZmVyU2l6ZSA9IHRoaXMuJG1heEJ1ZmZlclNpemUucGlwZShcclxuICAgICAgICBtYXAodiA9PiB2IDwgMCA/IERFRkFVTFRfTUFYX0JVRkZFUl9TSVpFIDogdiksXHJcbiAgICAgICksXHJcbiAgICAgICRpdGVtQ29uZmlnTWFwID0gdGhpcy4kaXRlbUNvbmZpZ01hcC5waXBlKFxyXG4gICAgICAgIG1hcCh2ID0+ICF2ID8ge30gOiB2KSxcclxuICAgICAgKSxcclxuICAgICAgJHNuYXAgPSB0aGlzLiRzbmFwLFxyXG4gICAgICAkaXNWZXJ0aWNhbCA9IHRoaXMuJGRpcmVjdGlvbi5waXBlKFxyXG4gICAgICAgIG1hcCh2ID0+IHRoaXMuZ2V0SXNWZXJ0aWNhbCh2IHx8IERFRkFVTFRfRElSRUNUSU9OKSksXHJcbiAgICAgICksXHJcbiAgICAgICRkeW5hbWljU2l6ZSA9IHRoaXMuJGR5bmFtaWNTaXplLFxyXG4gICAgICAkZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbiA9IHRoaXMuJGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24sXHJcbiAgICAgICRzbmFwcGluZ01ldGhvZCA9IHRoaXMuJHNuYXBwaW5nTWV0aG9kLnBpcGUoXHJcbiAgICAgICAgbWFwKHYgPT4gdGhpcy5nZXRJc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQodiB8fCBERUZBVUxUX1NOQVBQSU5HX01FVEhPRCkpLFxyXG4gICAgICApLFxyXG4gICAgICAkbWV0aG9kRm9yU2VsZWN0aW5nID0gdGhpcy4kbWV0aG9kRm9yU2VsZWN0aW5nLFxyXG4gICAgICAkc2VsZWN0ZWRJZHMgPSB0aGlzLiRzZWxlY3RlZElkcyxcclxuICAgICAgJGNhY2hlVmVyc2lvbiA9IHRoaXMuJGNhY2hlVmVyc2lvbjtcclxuXHJcbiAgICAkaXNWZXJ0aWNhbC5waXBlKFxyXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX2lzVmVydGljYWwgPSB2O1xyXG4gICAgICAgIGNvbnN0IGVsOiBIVE1MRWxlbWVudCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcclxuICAgICAgICB0b2dnbGVDbGFzc05hbWUoZWwsIHYgPyBDTEFTU19MSVNUX1ZFUlRJQ0FMIDogQ0xBU1NfTElTVF9IT1JJWk9OVEFMLCB2ID8gQ0xBU1NfTElTVF9IT1JJWk9OVEFMIDogQ0xBU1NfTElTVF9WRVJUSUNBTCk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkc25hcHBpbmdNZXRob2QucGlwZShcclxuICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQgPSB0aGlzLl90cmFja0JveC5pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29tYmluZUxhdGVzdChbJG1ldGhvZEZvclNlbGVjdGluZywgdGhpcy4kaW5pdGlhbGl6ZWRdKS5waXBlKFxyXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICAgZGVib3VuY2VUaW1lKDApLFxyXG4gICAgICBmaWx0ZXIoKFssIGluaXRdKSA9PiBpbml0ID09PSB0cnVlKSxcclxuICAgICAgbWFwKChbdl0pID0+ICh2KSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICBjb25zdCBlbCA9IHRoaXMuX2xpc3Q/Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0SXNNdWx0aVNlbGVjdGluZyh2IHx8IERFRkFVTFRfU05BUFBJTkdfTUVUSE9EKSkge1xyXG4gICAgICAgICAgdGhpcy5faXNNdWx0aVNlbGVjdGluZyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLl9pc05vdFNlbGVjdGluZyA9IHRoaXMuX2lzU2luZ2xlU2VsZWN0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICBpZiAoZWwpIHtcclxuICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKCdyb2xlJywgUk9MRV9MSVNUX0JPWCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLl9zZXJ2aWNlLm1ldGhvZE9mU2VsZWN0aW5nID0gTWV0aG9kc0ZvclNlbGVjdGluZ1R5cGVzLk1VTFRJX1NFTEVDVDtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ2V0SXNTaW5nbGVTZWxlY3RpbmcodiB8fCBERUZBVUxUX1NOQVBQSU5HX01FVEhPRCkpIHtcclxuICAgICAgICAgIHRoaXMuX2lzU2luZ2xlU2VsZWN0aW5nID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuX2lzTm90U2VsZWN0aW5nID0gdGhpcy5faXNNdWx0aVNlbGVjdGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKGVsKSB7XHJcbiAgICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZSgncm9sZScsIFJPTEVfTElTVF9CT1gpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5fc2VydmljZS5tZXRob2RPZlNlbGVjdGluZyA9IE1ldGhvZHNGb3JTZWxlY3RpbmdUeXBlcy5TRUxFQ1Q7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmdldElzTm90U2VsZWN0aW5nKHYgfHwgREVGQVVMVF9TTkFQUElOR19NRVRIT0QpKSB7XHJcbiAgICAgICAgICB0aGlzLl9pc05vdFNlbGVjdGluZyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLl9pc1NpbmdsZVNlbGVjdGluZyA9IHRoaXMuX2lzTXVsdGlTZWxlY3RpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIGlmIChlbCkge1xyXG4gICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCBST0xFX0xJU1QpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5fc2VydmljZS5tZXRob2RPZlNlbGVjdGluZyA9IE1ldGhvZHNGb3JTZWxlY3RpbmdUeXBlcy5OT05FO1xyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRkeW5hbWljU2l6ZS5waXBlKFxyXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICAgdGFwKGR5bmFtaWNTaXplID0+IHtcclxuICAgICAgICB0aGlzLmxpc3RlbkNhY2hlQ2hhbmdlc0lmTmVlZChkeW5hbWljU2l6ZSk7XHJcbiAgICAgIH0pXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuJGluaXRpYWxpemVkLCAkYm91bmRzLCAkaXRlbXMsICRpdGVtQ29uZmlnTWFwLCAkc2Nyb2xsU2l6ZSwgJGl0ZW1TaXplLFxyXG4gICAgICAkYnVmZmVyU2l6ZSwgJG1heEJ1ZmZlclNpemUsICRzbmFwLCAkaXNWZXJ0aWNhbCwgJGR5bmFtaWNTaXplLCAkZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbiwgJGNhY2hlVmVyc2lvbixcclxuICAgIF0pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICBmaWx0ZXIoKFtpbml0aWFsaXplZF0pID0+ICEhaW5pdGlhbGl6ZWQpLFxyXG4gICAgICBzd2l0Y2hNYXAoKFssXHJcbiAgICAgICAgYm91bmRzLCBpdGVtcywgaXRlbUNvbmZpZ01hcCwgc2Nyb2xsU2l6ZSwgaXRlbVNpemUsXHJcbiAgICAgICAgYnVmZmVyU2l6ZSwgbWF4QnVmZmVyU2l6ZSwgc25hcCwgaXNWZXJ0aWNhbCwgZHluYW1pY1NpemUsIGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24sIGNhY2hlVmVyc2lvbixcclxuICAgICAgXSkgPT4ge1xyXG4gICAgICAgIGxldCBhY3R1YWxTY3JvbGxTaXplID0gKHRoaXMuX2lzVmVydGljYWwgPyB0aGlzLl9jb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID8/IDAgOiB0aGlzLl9jb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCkgPz8gMDtcclxuICAgICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGJvdW5kcyEsXHJcbiAgICAgICAgICBvcHRzOiBJVXBkYXRlQ29sbGVjdGlvbk9wdGlvbnM8SVZpcnR1YWxMaXN0SXRlbSwgSVZpcnR1YWxMaXN0Q29sbGVjdGlvbj4gPSB7XHJcbiAgICAgICAgICAgIGJvdW5kczogeyB3aWR0aCwgaGVpZ2h0IH0sIGR5bmFtaWNTaXplLCBpc1ZlcnRpY2FsLCBpdGVtU2l6ZSxcclxuICAgICAgICAgICAgYnVmZmVyU2l6ZSwgbWF4QnVmZmVyU2l6ZSwgc2Nyb2xsU2l6ZTogYWN0dWFsU2Nyb2xsU2l6ZSwgc25hcCwgZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbixcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7IGRpc3BsYXlJdGVtcywgdG90YWxTaXplIH0gPSB0aGlzLl90cmFja0JveC51cGRhdGVDb2xsZWN0aW9uKGl0ZW1zLCBpdGVtQ29uZmlnTWFwLCBvcHRzKTtcclxuXHJcbiAgICAgICAgdGhpcy5yZXNldEJvdW5kc1NpemUoaXNWZXJ0aWNhbCwgdG90YWxTaXplKTtcclxuXHJcbiAgICAgICAgdGhpcy5jcmVhdGVEaXNwbGF5Q29tcG9uZW50c0lmTmVlZChkaXNwbGF5SXRlbXMpO1xyXG5cclxuICAgICAgICB0aGlzLnRyYWNraW5nKCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQpIHtcclxuICAgICAgICAgIHRoaXMudXBkYXRlUmVndWxhclJlbmRlcmVyKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLl9jb250YWluZXI7XHJcblxyXG4gICAgICAgIGlmIChjb250YWluZXIpIHtcclxuICAgICAgICAgIGNvbnN0IGRlbHRhID0gdGhpcy5fdHJhY2tCb3guZGVsdGE7XHJcbiAgICAgICAgICBhY3R1YWxTY3JvbGxTaXplID0gYWN0dWFsU2Nyb2xsU2l6ZSArIGRlbHRhO1xyXG5cclxuICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmNsZWFyRGVsdGEoKTtcclxuXHJcbiAgICAgICAgICBpZiAoc2Nyb2xsU2l6ZSAhPT0gYWN0dWFsU2Nyb2xsU2l6ZSkge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJhbXM6IFNjcm9sbFRvT3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICBbdGhpcy5faXNWZXJ0aWNhbCA/IFRPUF9QUk9QX05BTUUgOiBMRUZUX1BST1BfTkFNRV06IGFjdHVhbFNjcm9sbFNpemUsXHJcbiAgICAgICAgICAgICAgYmVoYXZpb3I6IEJFSEFWSU9SX0lOU1RBTlQgYXMgU2Nyb2xsQmVoYXZpb3JcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvKHBhcmFtcyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gb2YoZGlzcGxheUl0ZW1zKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICRpdGVtUmVuZGVyZXIgPSB0aGlzLiRpdGVtUmVuZGVyZXI7XHJcblxyXG4gICAgJGl0ZW1SZW5kZXJlci5waXBlKFxyXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRyZW5kZXJlci5uZXh0KHYpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGJvdW5kcy5waXBlKFxyXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgdGFwKHZhbHVlID0+IHtcclxuICAgICAgICB0aGlzLm9uVmlld3BvcnRDaGFuZ2UuZW1pdCh2YWx1ZSA/PyB1bmRlZmluZWQpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy5fc2VydmljZS4kaXRlbUNsaWNrLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5vbkl0ZW1DbGljay5lbWl0KHYgPz8gdW5kZWZpbmVkKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGxldCBpc1NlbGVjdGVkSWRzRmlyc3RFbWl0ID0gMDtcclxuXHJcbiAgICB0aGlzLl9zZXJ2aWNlLiRzZWxlY3RlZElkcy5waXBlKFxyXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmlzU2luZ2xlU2VsZWN0aW5nIHx8ICh0aGlzLmlzTXVsdGlTZWxlY3RpbmcgJiYgaXNTZWxlY3RlZElkc0ZpcnN0RW1pdCA+PSAyKSkge1xyXG4gICAgICAgICAgY29uc3QgY3VyciA9IHRoaXMuXyRzZWxlY3RlZElkcy5nZXRWYWx1ZSgpO1xyXG4gICAgICAgICAgaWYgKCh0aGlzLmlzU2luZ2xlU2VsZWN0aW5nICYmIEpTT04uc3RyaW5naWZ5KHYpICE9PSBKU09OLnN0cmluZ2lmeShjdXJyKSkgfHwgKGlzU2VsZWN0ZWRJZHNGaXJzdEVtaXQgPT09IDIgJiYgSlNPTi5zdHJpbmdpZnkodikgIT09IEpTT04uc3RyaW5naWZ5KGN1cnIpKSB8fCBpc1NlbGVjdGVkSWRzRmlyc3RFbWl0ID4gMikge1xyXG4gICAgICAgICAgICB0aGlzLm9uU2VsZWN0LmVtaXQodik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc1NlbGVjdGVkSWRzRmlyc3RFbWl0IDwgMykge1xyXG4gICAgICAgICAgaXNTZWxlY3RlZElkc0ZpcnN0RW1pdCsrO1xyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRzZWxlY3RlZElkcy5waXBlKFxyXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2Uuc2V0U2VsZWN0ZWRJZHModik7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgfVxyXG5cclxuICAvKiogQGludGVybmFsICovXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLm9uSW5pdCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbkluaXQoKSB7XHJcbiAgICB0aGlzLl8kaW5pdGlhbGl6ZWQubmV4dCh0cnVlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbGlzdGVuQ2FjaGVDaGFuZ2VzSWZOZWVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgaWYgKCF0aGlzLl90cmFja0JveC5oYXNFdmVudExpc3RlbmVyKFRSQUNLX0JPWF9DSEFOR0VfRVZFTlRfTkFNRSwgdGhpcy5fb25UcmFja0JveENoYW5nZUhhbmRsZXIpKSB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tCb3guYWRkRXZlbnRMaXN0ZW5lcihUUkFDS19CT1hfQ0hBTkdFX0VWRU5UX05BTUUsIHRoaXMuX29uVHJhY2tCb3hDaGFuZ2VIYW5kbGVyKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuX3RyYWNrQm94Lmhhc0V2ZW50TGlzdGVuZXIoVFJBQ0tfQk9YX0NIQU5HRV9FVkVOVF9OQU1FLCB0aGlzLl9vblRyYWNrQm94Q2hhbmdlSGFuZGxlcikpIHtcclxuICAgICAgICB0aGlzLl90cmFja0JveC5yZW1vdmVFdmVudExpc3RlbmVyKFRSQUNLX0JPWF9DSEFOR0VfRVZFTlRfTkFNRSwgdGhpcy5fb25UcmFja0JveENoYW5nZUhhbmRsZXIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldElzU25hcHBpbmdNZXRob2RBZHZhbmNlZChtPzogU25hcHBpbmdNZXRob2QpIHtcclxuICAgIGNvbnN0IG1ldGhvZCA9IG0gfHwgdGhpcy5fJHNuYXBwaW5nTWV0aG9kLmdldFZhbHVlKCk7XHJcbiAgICByZXR1cm4gaXNTbmFwcGluZ01ldGhvZEFkdmVuY2VkKG1ldGhvZCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldElzTm90U2VsZWN0aW5nKG0/OiBNZXRob2RGb3JTZWxlY3RpbmcpIHtcclxuICAgIGNvbnN0IG1ldGhvZCA9IG0gfHwgdGhpcy5tZXRob2RGb3JTZWxlY3Rpbmc7XHJcbiAgICByZXR1cm4gaXNNZXRob2RGb3JTZWxlY3RpbmcobWV0aG9kLCBNZXRob2RzRm9yU2VsZWN0aW5nLk5PTkUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRJc1NpbmdsZVNlbGVjdGluZyhtPzogTWV0aG9kRm9yU2VsZWN0aW5nKSB7XHJcbiAgICBjb25zdCBtZXRob2QgPSBtIHx8IHRoaXMubWV0aG9kRm9yU2VsZWN0aW5nO1xyXG4gICAgcmV0dXJuIGlzTWV0aG9kRm9yU2VsZWN0aW5nKG1ldGhvZCwgTWV0aG9kc0ZvclNlbGVjdGluZy5TRUxFQ1QpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRJc011bHRpU2VsZWN0aW5nKG0/OiBNZXRob2RGb3JTZWxlY3RpbmcpIHtcclxuICAgIGNvbnN0IG1ldGhvZCA9IG0gfHwgdGhpcy5tZXRob2RGb3JTZWxlY3Rpbmc7XHJcbiAgICByZXR1cm4gaXNNZXRob2RGb3JTZWxlY3RpbmcobWV0aG9kLCBNZXRob2RzRm9yU2VsZWN0aW5nLk1VTFRJX1NFTEVDVCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldElzVmVydGljYWwoZD86IERpcmVjdGlvbikge1xyXG4gICAgY29uc3QgZGlyID0gZCB8fCB0aGlzLmRpcmVjdGlvbjtcclxuICAgIHJldHVybiBpc0RpcmVjdGlvbihkaXIsIERpcmVjdGlvbnMuVkVSVElDQUwpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY29tcG9uZW50c1Jlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcclxuICAgIHRoaXMuX3RyYWNrQm94LmNoYW5nZXMoKTtcclxuICB9KTtcclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVEaXNwbGF5Q29tcG9uZW50c0lmTmVlZChkaXNwbGF5SXRlbXM6IElSZW5kZXJWaXJ0dWFsTGlzdENvbGxlY3Rpb24gfCBudWxsKSB7XHJcbiAgICBpZiAoIWRpc3BsYXlJdGVtcyB8fCAhdGhpcy5fbGlzdENvbnRhaW5lclJlZikge1xyXG4gICAgICB0aGlzLl90cmFja0JveC5zZXREaXNwbGF5T2JqZWN0SW5kZXhNYXBCeUlkKHt9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQgJiYgdGhpcy5zbmFwKSB7XHJcbiAgICAgIGlmICghdGhpcy5fc25hcGVkRGlzcGxheUNvbXBvbmVudCAmJiB0aGlzLl9zbmFwQ29udGFpbmVyUmVmKSB7XHJcbiAgICAgICAgY29uc3QgY29tcCA9IHRoaXMuX3NuYXBDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KHRoaXMuX2l0ZW1Db21wb25lbnRDbGFzcyk7XHJcbiAgICAgICAgY29tcC5pbnN0YW5jZS5yZWd1bGFyID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9zbmFwZWREaXNwbGF5Q29tcG9uZW50ID0gY29tcDtcclxuICAgICAgICB0aGlzLl90cmFja0JveC5zbmFwZWREaXNwbGF5Q29tcG9uZW50ID0gdGhpcy5fc25hcGVkRGlzcGxheUNvbXBvbmVudDtcclxuXHJcbiAgICAgICAgdGhpcy5fcmVzaXplU25hcHBlZE9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKHRoaXMuX3Jlc2l6ZVNuYXBwZWRDb21wb25lbnRIYW5kbGVyKTtcclxuICAgICAgICB0aGlzLl9yZXNpemVTbmFwcGVkT2JzZXJ2ZXIub2JzZXJ2ZShjb21wLmluc3RhbmNlLmVsZW1lbnQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fdHJhY2tCb3guaXRlbXMgPSBkaXNwbGF5SXRlbXM7XHJcblxyXG4gICAgY29uc3QgX2xpc3RDb250YWluZXJSZWYgPSB0aGlzLl9saXN0Q29udGFpbmVyUmVmO1xyXG5cclxuICAgIGNvbnN0IG1heExlbmd0aCA9IGRpc3BsYXlJdGVtcy5sZW5ndGgsIGNvbXBvbmVudHMgPSB0aGlzLl9kaXNwbGF5Q29tcG9uZW50cztcclxuXHJcbiAgICB3aGlsZSAoY29tcG9uZW50cy5sZW5ndGggPCBtYXhMZW5ndGgpIHtcclxuICAgICAgaWYgKF9saXN0Q29udGFpbmVyUmVmKSB7XHJcbiAgICAgICAgY29uc3QgY29tcCA9IF9saXN0Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudCh0aGlzLl9pdGVtQ29tcG9uZW50Q2xhc3MpO1xyXG4gICAgICAgIGNvbXBvbmVudHMucHVzaChjb21wKTtcclxuXHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50c1Jlc2l6ZU9ic2VydmVyLm9ic2VydmUoY29tcC5pbnN0YW5jZS5lbGVtZW50KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVzZXRSZW5kZXJlcnMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlUmVndWxhclJlbmRlcmVyKCkge1xyXG4gICAgdGhpcy5fcmVzaXplU25hcHBlZENvbXBvbmVudEhhbmRsZXIoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzZXRSZW5kZXJlcnMoaXRlbVJlbmRlcmVyPzogVGVtcGxhdGVSZWY8SFRNTEVsZW1lbnQ+KSB7XHJcbiAgICBjb25zdCBkb01hcDogeyBbaWQ6IG51bWJlcl06IG51bWJlciB9ID0ge307XHJcbiAgICBmb3IgKGxldCBpID0gMCwgbCA9IHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5fZGlzcGxheUNvbXBvbmVudHNbaV07XHJcbiAgICAgIGl0ZW0uaW5zdGFuY2UucmVuZGVyZXIgPSBpdGVtUmVuZGVyZXIgfHwgdGhpcy5pdGVtUmVuZGVyZXI7XHJcbiAgICAgIGRvTWFwW2l0ZW0uaW5zdGFuY2UuaWRdID0gaTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5faXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkICYmIHRoaXMuc25hcCAmJiB0aGlzLl9zbmFwZWREaXNwbGF5Q29tcG9uZW50ICYmIHRoaXMuX3NuYXBDb250YWluZXJSZWYpIHtcclxuICAgICAgY29uc3QgY29tcCA9IHRoaXMuX3NuYXBlZERpc3BsYXlDb21wb25lbnQ7XHJcbiAgICAgIGNvbXAuaW5zdGFuY2UucmVuZGVyZXIgPSBpdGVtUmVuZGVyZXIgfHwgdGhpcy5pdGVtUmVuZGVyZXI7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fdHJhY2tCb3guc2V0RGlzcGxheU9iamVjdEluZGV4TWFwQnlJZChkb01hcCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUcmFja2luZyBieSBpZFxyXG4gICAqL1xyXG4gIHByaXZhdGUgdHJhY2tpbmcoKSB7XHJcbiAgICB0aGlzLl90cmFja0JveC50cmFjaygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNldEJvdW5kc1NpemUoaXNWZXJ0aWNhbDogYm9vbGVhbiwgdG90YWxTaXplOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGwgPSB0aGlzLl9saXN0O1xyXG4gICAgaWYgKGwpIHtcclxuICAgICAgbC5uYXRpdmVFbGVtZW50LnN0eWxlW2lzVmVydGljYWwgPyBIRUlHSFRfUFJPUF9OQU1FIDogV0lEVEhfUFJPUF9OQU1FXSA9IGAke3RvdGFsU2l6ZX0ke1BYfWA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgYW4gZWxlbWVudCB3aXRoIGEgZ2l2ZW4gaWRcclxuICAgKi9cclxuICBnZXRJdGVtQm91bmRzKGlkOiBJZCk6IElTaXplIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl90cmFja0JveC5nZXRJdGVtQm91bmRzKGlkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBtZXRob2Qgc2Nyb2xscyB0aGUgbGlzdCB0byB0aGUgZWxlbWVudCB3aXRoIHRoZSBnaXZlbiBpZCBhbmQgcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHNjcm9sbGVkIGFyZWEuXHJcbiAgICogQmVoYXZpb3IgYWNjZXB0cyB0aGUgdmFsdWVzIOKAi+KAi1wiYXV0b1wiLCBcImluc3RhbnRcIiBhbmQgXCJzbW9vdGhcIi5cclxuICAgKi9cclxuICBzY3JvbGxUbyhpZDogSWQsIGJlaGF2aW9yOiBTY3JvbGxCZWhhdmlvciA9IEJFSEFWSU9SX0FVVE8gYXMgU2Nyb2xsQmVoYXZpb3IpIHtcclxuICAgIHRoaXMuc2Nyb2xsVG9FeGVjdXRvcihpZCwgYmVoYXZpb3IpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2Nyb2xsVG9SZXBlYXRFeGVjdXRpb25UaW1lb3V0OiBhbnk7XHJcblxyXG4gIHByaXZhdGUgY2xlYXJTY3JvbGxUb1JlcGVhdEV4ZWN1dGlvblRpbWVvdXQoKSB7XHJcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fc2Nyb2xsVG9SZXBlYXRFeGVjdXRpb25UaW1lb3V0KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2Nyb2xsVG9FeGVjdXRvcihpZDogSWQsIGJlaGF2aW9yOiBTY3JvbGxCZWhhdmlvciwgaXRlcmF0aW9uOiBudW1iZXIgPSAwLCBpc0xhc3RJdGVyYXRpb24gPSBmYWxzZSkge1xyXG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLml0ZW1zO1xyXG4gICAgaWYgKCFpdGVtcyB8fCAhaXRlbXMubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBkeW5hbWljU2l6ZSA9IHRoaXMuZHluYW1pY1NpemUsIGNvbnRhaW5lciA9IHRoaXMuX2NvbnRhaW5lciwgaXRlbVNpemUgPSB0aGlzLml0ZW1TaXplO1xyXG4gICAgaWYgKGNvbnRhaW5lcikge1xyXG4gICAgICB0aGlzLmNsZWFyU2Nyb2xsVG9SZXBlYXRFeGVjdXRpb25UaW1lb3V0KCk7XHJcblxyXG4gICAgICBpZiAoZHluYW1pY1NpemUpIHtcclxuICAgICAgICBpZiAoY29udGFpbmVyKSB7XHJcbiAgICAgICAgICBjb250YWluZXIubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFNDUk9MTCwgdGhpcy5fb25TY3JvbGxIYW5kbGVyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy5fJGJvdW5kcy5nZXRWYWx1ZSgpIHx8IHsgd2lkdGg6IDAsIGhlaWdodDogMCB9LFxyXG4gICAgICAgICAgaXRlbUNvbmZpZ01hcCA9IHRoaXMuaXRlbUNvbmZpZ01hcCwgaXRlbXMgPSB0aGlzLml0ZW1zLCBpc1ZlcnRpY2FsID0gdGhpcy5faXNWZXJ0aWNhbCwgZGVsdGEgPSB0aGlzLl90cmFja0JveC5kZWx0YSxcclxuICAgICAgICAgIG9wdHM6IElHZXRJdGVtUG9zaXRpb25PcHRpb25zPElWaXJ0dWFsTGlzdEl0ZW0sIElWaXJ0dWFsTGlzdENvbGxlY3Rpb24+ID0ge1xyXG4gICAgICAgICAgICBib3VuZHM6IHsgd2lkdGgsIGhlaWdodCB9LCBjb2xsZWN0aW9uOiBpdGVtcywgZHluYW1pY1NpemUsIGlzVmVydGljYWw6IHRoaXMuX2lzVmVydGljYWwsIGl0ZW1TaXplLFxyXG4gICAgICAgICAgICBidWZmZXJTaXplOiB0aGlzLmJ1ZmZlclNpemUsIG1heEJ1ZmZlclNpemU6IHRoaXMubWF4QnVmZmVyU2l6ZSwgc2Nyb2xsU2l6ZTogKGlzVmVydGljYWwgPyBjb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgOiBjb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0KSArIGRlbHRhLFxyXG4gICAgICAgICAgICBzbmFwOiB0aGlzLnNuYXAsIGZyb21JdGVtSWQ6IGlkLCBlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uOiB0aGlzLmVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgc2Nyb2xsU2l6ZSA9IHRoaXMuX3RyYWNrQm94LmdldEl0ZW1Qb3NpdGlvbihpZCwgaXRlbUNvbmZpZ01hcCwgb3B0cyksXHJcbiAgICAgICAgICBwYXJhbXM6IFNjcm9sbFRvT3B0aW9ucyA9IHsgW2lzVmVydGljYWwgPyBUT1BfUFJPUF9OQU1FIDogTEVGVF9QUk9QX05BTUVdOiBzY3JvbGxTaXplLCBiZWhhdmlvciB9O1xyXG5cclxuICAgICAgICBpZiAoc2Nyb2xsU2l6ZSA9PT0gLTEpIHtcclxuICAgICAgICAgIGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoU0NST0xMLCB0aGlzLl9vblNjcm9sbEhhbmRsZXIpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fdHJhY2tCb3guY2xlYXJEZWx0YSgpO1xyXG5cclxuICAgICAgICBpZiAoY29udGFpbmVyKSB7XHJcbiAgICAgICAgICBjb25zdCB7IGRpc3BsYXlJdGVtcywgdG90YWxTaXplIH0gPSB0aGlzLl90cmFja0JveC51cGRhdGVDb2xsZWN0aW9uKGl0ZW1zLCBpdGVtQ29uZmlnTWFwLCB7XHJcbiAgICAgICAgICAgIC4uLm9wdHMsIHNjcm9sbFNpemUsIGZyb21JdGVtSWQ6IGlzTGFzdEl0ZXJhdGlvbiA/IHVuZGVmaW5lZCA6IGlkLFxyXG4gICAgICAgICAgfSksIGRlbHRhID0gdGhpcy5fdHJhY2tCb3guZGVsdGE7XHJcblxyXG4gICAgICAgICAgdGhpcy5fdHJhY2tCb3guY2xlYXJEZWx0YSgpO1xyXG5cclxuICAgICAgICAgIGxldCBhY3R1YWxTY3JvbGxTaXplID0gc2Nyb2xsU2l6ZSArIGRlbHRhO1xyXG5cclxuICAgICAgICAgIHRoaXMucmVzZXRCb3VuZHNTaXplKGlzVmVydGljYWwsIHRvdGFsU2l6ZSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5jcmVhdGVEaXNwbGF5Q29tcG9uZW50c0lmTmVlZChkaXNwbGF5SXRlbXMpO1xyXG5cclxuICAgICAgICAgIHRoaXMudHJhY2tpbmcoKTtcclxuXHJcbiAgICAgICAgICBjb25zdCBfc2Nyb2xsU2l6ZSA9IHRoaXMuX3RyYWNrQm94LmdldEl0ZW1Qb3NpdGlvbihpZCwgaXRlbUNvbmZpZ01hcCwgeyAuLi5vcHRzLCBzY3JvbGxTaXplOiBhY3R1YWxTY3JvbGxTaXplLCBmcm9tSXRlbUlkOiBpZCB9KTtcclxuXHJcbiAgICAgICAgICBpZiAoX3Njcm9sbFNpemUgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoU0NST0xMLCB0aGlzLl9vblNjcm9sbEhhbmRsZXIpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgY29uc3Qgbm90Q2hhbmdlZCA9IGFjdHVhbFNjcm9sbFNpemUgPT09IF9zY3JvbGxTaXplXHJcblxyXG4gICAgICAgICAgaWYgKCFub3RDaGFuZ2VkIHx8IGl0ZXJhdGlvbiA8IE1BWF9TQ1JPTExfVE9fSVRFUkFUSU9OUykge1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyU2Nyb2xsVG9SZXBlYXRFeGVjdXRpb25UaW1lb3V0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3Njcm9sbFRvUmVwZWF0RXhlY3V0aW9uVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9FeGVjdXRvcihpZCwgQkVIQVZJT1JfSU5TVEFOVCBhcyBTY3JvbGxCZWhhdmlvciwgaXRlcmF0aW9uICsgMSwgbm90Q2hhbmdlZCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fJHNjcm9sbFNpemUubmV4dChhY3R1YWxTY3JvbGxTaXplKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoU0NST0xMLCB0aGlzLl9vblNjcm9sbEhhbmRsZXIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG8ocGFyYW1zKTtcclxuXHJcbiAgICAgICAgdGhpcy5fJHNjcm9sbFNpemUubmV4dChzY3JvbGxTaXplKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBpbmRleCA9IGl0ZW1zLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uaWQgPT09IGlkKTtcclxuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgY29uc3Qgc2Nyb2xsU2l6ZSA9IGluZGV4ICogdGhpcy5pdGVtU2l6ZTtcclxuICAgICAgICAgIGNvbnN0IHBhcmFtczogU2Nyb2xsVG9PcHRpb25zID0geyBbdGhpcy5faXNWZXJ0aWNhbCA/IFRPUF9QUk9QX05BTUUgOiBMRUZUX1BST1BfTkFNRV06IHNjcm9sbFNpemUsIGJlaGF2aW9yIH07XHJcbiAgICAgICAgICBjb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUbyhwYXJhbXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2Nyb2xscyB0aGUgc2Nyb2xsIGFyZWEgdG8gdGhlIGRlc2lyZWQgZWxlbWVudCB3aXRoIHRoZSBzcGVjaWZpZWQgSUQuXHJcbiAgICovXHJcbiAgc2Nyb2xsVG9FbmQoYmVoYXZpb3I6IFNjcm9sbEJlaGF2aW9yID0gQkVIQVZJT1JfSU5TVEFOVCBhcyBTY3JvbGxCZWhhdmlvcikge1xyXG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLml0ZW1zLCBsYXRJdGVtID0gaXRlbXNbaXRlbXMubGVuZ3RoID4gMCA/IGl0ZW1zLmxlbmd0aCAtIDEgOiAwXTtcclxuICAgIHRoaXMuc2Nyb2xsVG8obGF0SXRlbS5pZCwgYmVoYXZpb3IpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfb25Db250YWluZXJTY3JvbGxIYW5kbGVyID0gKGU6IEV2ZW50KSA9PiB7XHJcbiAgICBjb25zdCBjb250YWluZXJFbCA9IHRoaXMuX2NvbnRhaW5lcjtcclxuICAgIGlmIChjb250YWluZXJFbCkge1xyXG4gICAgICBjb25zdCBzY3JvbGxTaXplID0gKHRoaXMuX2lzVmVydGljYWwgPyBjb250YWluZXJFbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA6IGNvbnRhaW5lckVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCk7XHJcbiAgICAgIHRoaXMuX3RyYWNrQm94LmRlbHRhRGlyZWN0aW9uID0gdGhpcy5fJHNjcm9sbFNpemUuZ2V0VmFsdWUoKSA+IHNjcm9sbFNpemUgPyAtMSA6IHRoaXMuXyRzY3JvbGxTaXplLmdldFZhbHVlKCkgPCBzY3JvbGxTaXplID8gMSA6IDA7XHJcblxyXG4gICAgICBjb25zdCBldmVudCA9IG5ldyBTY3JvbGxFdmVudCh7XHJcbiAgICAgICAgZGlyZWN0aW9uOiB0aGlzLl90cmFja0JveC5zY3JvbGxEaXJlY3Rpb24sIGNvbnRhaW5lcjogY29udGFpbmVyRWwubmF0aXZlRWxlbWVudCxcclxuICAgICAgICBsaXN0OiB0aGlzLl9saXN0IS5uYXRpdmVFbGVtZW50LCBkZWx0YTogdGhpcy5fdHJhY2tCb3guZGVsdGEsXHJcbiAgICAgICAgc2Nyb2xsRGVsdGE6IHRoaXMuX3RyYWNrQm94LnNjcm9sbERlbHRhLCBpc1ZlcnRpY2FsOiB0aGlzLl9pc1ZlcnRpY2FsLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMub25TY3JvbGwuZW1pdChldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9vbkNvbnRhaW5lclNjcm9sbEVuZEhhbmRsZXIgPSAoZTogRXZlbnQpID0+IHtcclxuICAgIGNvbnN0IGNvbnRhaW5lckVsID0gdGhpcy5fY29udGFpbmVyO1xyXG4gICAgaWYgKGNvbnRhaW5lckVsKSB7XHJcbiAgICAgIGNvbnN0IHNjcm9sbFNpemUgPSAodGhpcy5faXNWZXJ0aWNhbCA/IGNvbnRhaW5lckVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wIDogY29udGFpbmVyRWwubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0KTtcclxuICAgICAgdGhpcy5fdHJhY2tCb3guZGVsdGFEaXJlY3Rpb24gPSB0aGlzLl8kc2Nyb2xsU2l6ZS5nZXRWYWx1ZSgpID4gc2Nyb2xsU2l6ZSA/IC0xIDogMDtcclxuXHJcbiAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IFNjcm9sbEV2ZW50KHtcclxuICAgICAgICBkaXJlY3Rpb246IHRoaXMuX3RyYWNrQm94LnNjcm9sbERpcmVjdGlvbiwgY29udGFpbmVyOiBjb250YWluZXJFbC5uYXRpdmVFbGVtZW50LFxyXG4gICAgICAgIGxpc3Q6IHRoaXMuX2xpc3QhLm5hdGl2ZUVsZW1lbnQsIGRlbHRhOiB0aGlzLl90cmFja0JveC5kZWx0YSxcclxuICAgICAgICBzY3JvbGxEZWx0YTogdGhpcy5fdHJhY2tCb3guc2Nyb2xsRGVsdGEsIGlzVmVydGljYWw6IHRoaXMuX2lzVmVydGljYWwsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5vblNjcm9sbEVuZC5lbWl0KGV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBAaW50ZXJuYWwgKi9cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFmdGVyVmlld0luaXQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIGNvbnN0IGNvbnRhaW5lckVsID0gdGhpcy5fY29udGFpbmVyO1xyXG4gICAgaWYgKGNvbnRhaW5lckVsKSB7XHJcbiAgICAgIC8vIGZvciBkaXJlY3Rpb24gY2FsY3VsYXRpb25cclxuICAgICAgY29udGFpbmVyRWwubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFNDUk9MTCwgdGhpcy5fb25Db250YWluZXJTY3JvbGxIYW5kbGVyKTtcclxuICAgICAgY29udGFpbmVyRWwubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFNDUk9MTF9FTkQsIHRoaXMuX29uQ29udGFpbmVyU2Nyb2xsRW5kSGFuZGxlcik7XHJcblxyXG4gICAgICBjb250YWluZXJFbC5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoU0NST0xMLCB0aGlzLl9vblNjcm9sbEhhbmRsZXIpO1xyXG5cclxuICAgICAgdGhpcy5fcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIodGhpcy5fb25SZXNpemVIYW5kbGVyKTtcclxuICAgICAgdGhpcy5fcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShjb250YWluZXJFbC5uYXRpdmVFbGVtZW50KTtcclxuXHJcbiAgICAgIHRoaXMuX29uUmVzaXplSGFuZGxlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuXyR2aWV3SW5pdGlhbGl6ZWQubmV4dCh0cnVlKTtcclxuICB9XHJcblxyXG4gIC8qKiBAaW50ZXJuYWwgKi9cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGlzcG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBkaXNwb3NlKCkge1xyXG4gICAgdGhpcy5jbGVhclNjcm9sbFRvUmVwZWF0RXhlY3V0aW9uVGltZW91dCgpO1xyXG5cclxuICAgIGlmICh0aGlzLl90cmFja0JveCkge1xyXG4gICAgICB0aGlzLl90cmFja0JveC5kaXNwb3NlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2NvbXBvbmVudHNSZXNpemVPYnNlcnZlcikge1xyXG4gICAgICB0aGlzLl9jb21wb25lbnRzUmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9yZXNpemVPYnNlcnZlcikge1xyXG4gICAgICB0aGlzLl9yZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX3Jlc2l6ZVNuYXBwZWRPYnNlcnZlcikge1xyXG4gICAgICB0aGlzLl9yZXNpemVTbmFwcGVkT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNvbnRhaW5lckVsID0gdGhpcy5fY29udGFpbmVyO1xyXG4gICAgaWYgKGNvbnRhaW5lckVsKSB7XHJcbiAgICAgIGNvbnRhaW5lckVsLm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihTQ1JPTEwsIHRoaXMuX29uU2Nyb2xsSGFuZGxlcik7XHJcbiAgICAgIGNvbnRhaW5lckVsLm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihTQ1JPTEwsIHRoaXMuX29uQ29udGFpbmVyU2Nyb2xsSGFuZGxlcik7XHJcbiAgICAgIGNvbnRhaW5lckVsLm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihTQ1JPTExfRU5ELCB0aGlzLl9vbkNvbnRhaW5lclNjcm9sbEVuZEhhbmRsZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9zbmFwZWREaXNwbGF5Q29tcG9uZW50KSB7XHJcbiAgICAgIHRoaXMuX3NuYXBlZERpc3BsYXlDb21wb25lbnQuZGVzdHJveSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9kaXNwbGF5Q29tcG9uZW50cykge1xyXG4gICAgICB3aGlsZSAodGhpcy5fZGlzcGxheUNvbXBvbmVudHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnN0IGNvbXAgPSB0aGlzLl9kaXNwbGF5Q29tcG9uZW50cy5wb3AoKTtcclxuICAgICAgICBjb21wPy5kZXN0cm95KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiAqbmdJZj1cInNuYXBcIiAjc25hcHBlZCBwYXJ0PVwic25hcHBlZC1pdGVtXCIgY2xhc3M9XCJuZ3ZsX19saXN0LXNuYXBwZXJcIj5cclxuICA8bmctY29udGFpbmVyICNzbmFwUmVuZGVyZXJDb250YWluZXI+PC9uZy1jb250YWluZXI+XHJcbjwvZGl2PlxyXG48ZGl2ICNjb250YWluZXIgcGFydD1cInNjcm9sbGVyXCIgY2xhc3M9XCJuZ3ZsX19zY3JvbGxlclwiPlxyXG4gIDxkaXYgW2F0dHIuYXJpYS1vcmllbnRhdGlvbl09XCJvcmllbnRhdGlvblwiICNsaXN0IHBhcnQ9XCJsaXN0XCIgY2xhc3M9XCJuZ3ZsX19saXN0XCI+XHJcbiAgICA8bmctY29udGFpbmVyICNyZW5kZXJlcnNDb250YWluZXI+PC9uZy1jb250YWluZXI+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==
|
|
@@ -16,8 +16,9 @@ export class NgVirtualListService {
|
|
|
16
16
|
set methodOfSelecting(v) {
|
|
17
17
|
this._$methodOfSelecting.next(v);
|
|
18
18
|
}
|
|
19
|
-
selectByClick = DEFAULT_SELECT_BY_CLICK;
|
|
20
19
|
_trackBox;
|
|
20
|
+
selectByClick = DEFAULT_SELECT_BY_CLICK;
|
|
21
|
+
listElement = null;
|
|
21
22
|
constructor() {
|
|
22
23
|
this._$methodOfSelecting.pipe(takeUntilDestroyed(), tap(v => {
|
|
23
24
|
switch (v) {
|
|
@@ -123,4 +124,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
123
124
|
providedIn: 'root'
|
|
124
125
|
}]
|
|
125
126
|
}], ctorParameters: function () { return []; } });
|
|
126
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctdmlydHVhbC1saXN0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9uZy12aXJ0dWFsLWxpc3Quc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR3BDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUVoRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxTQUFTLENBQUM7O0FBS2xELE1BQU0sT0FBTyxvQkFBb0I7SUFDdkIsZ0JBQWdCLEdBQVcsQ0FBQyxDQUFDO0lBRTdCLFdBQVcsR0FBRyxJQUFJLE9BQU8sRUFBMkMsQ0FBQztJQUM3RSxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUVyQyxhQUFhLEdBQUcsSUFBSSxlQUFlLENBQTZCLFNBQVMsQ0FBQyxDQUFDO0lBQ25GLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBRXpDLG1CQUFtQixHQUFHLElBQUksZUFBZSxDQUEyQixDQUFDLENBQUMsQ0FBQztJQUMvRSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFN0QsSUFBSSxpQkFBaUIsQ0FBQyxDQUEyQjtRQUMvQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxhQUFhLEdBQVksdUJBQXVCLENB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QztJQUVELG1CQUFtQjtRQUNqQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEtBQUssTUFBTSxDQUFDLGdCQUFnQjtZQUM5RSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7d0dBckhVLG9CQUFvQjs0R0FBcEIsb0JBQW9CLGNBRm5CLE1BQU07OzRGQUVQLG9CQUFvQjtrQkFIaEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRhcCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBUcmFja0JveCB9IGZyb20gJy4vdXRpbHMvdHJhY2tCb3gnO1xyXG5pbXBvcnQgeyBJUmVuZGVyVmlydHVhbExpc3RJdGVtIH0gZnJvbSAnLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzL2ludGVybmFsL0JlaGF2aW9yU3ViamVjdCc7XHJcbmltcG9ydCB7IElkIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IE1ldGhvZHNGb3JTZWxlY3RpbmdUeXBlcyB9IGZyb20gJy4vZW51bXMvbWV0aG9kLWZvci1zZWxlY3RpbmctdHlwZXMnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XHJcbmltcG9ydCB7IERFRkFVTFRfU0VMRUNUX0JZX0NMSUNLIH0gZnJvbSAnLi9jb25zdCc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ1ZpcnR1YWxMaXN0U2VydmljZSB7XHJcbiAgcHJpdmF0ZSBfbmV4dENvbXBvbmVudElkOiBudW1iZXIgPSAwO1xyXG5cclxuICBwcml2YXRlIF8kaXRlbUNsaWNrID0gbmV3IFN1YmplY3Q8SVJlbmRlclZpcnR1YWxMaXN0SXRlbTxhbnk+IHwgdW5kZWZpbmVkPigpO1xyXG4gICRpdGVtQ2xpY2sgPSB0aGlzLl8kaXRlbUNsaWNrLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kc2VsZWN0ZWRJZHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFycmF5PElkPiB8IElkIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG4gICRzZWxlY3RlZElkcyA9IHRoaXMuXyRzZWxlY3RlZElkcy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJG1ldGhvZE9mU2VsZWN0aW5nID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNZXRob2RzRm9yU2VsZWN0aW5nVHlwZXM+KDApO1xyXG4gICRtZXRob2RPZlNlbGVjdGluZyA9IHRoaXMuXyRtZXRob2RPZlNlbGVjdGluZy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgc2V0IG1ldGhvZE9mU2VsZWN0aW5nKHY6IE1ldGhvZHNGb3JTZWxlY3RpbmdUeXBlcykge1xyXG4gICAgdGhpcy5fJG1ldGhvZE9mU2VsZWN0aW5nLm5leHQodik7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RCeUNsaWNrOiBib29sZWFuID0gREVGQVVMVF9TRUxFQ1RfQllfQ0xJQ0s7XHJcblxyXG4gIHByaXZhdGUgX3RyYWNrQm94OiBUcmFja0JveCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLl8kbWV0aG9kT2ZTZWxlY3RpbmcucGlwZShcclxuICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICBzd2l0Y2ggKHYpIHtcclxuICAgICAgICAgIGNhc2UgTWV0aG9kc0ZvclNlbGVjdGluZ1R5cGVzLlNFTEVDVDoge1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyID0gdGhpcy5fJHNlbGVjdGVkSWRzLmdldFZhbHVlKCk7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY3VyciAhPT0gJ251bWJlcicgJiYgdHlwZW9mIGN1cnIgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQodW5kZWZpbmVkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNhc2UgTWV0aG9kc0ZvclNlbGVjdGluZ1R5cGVzLk1VTFRJX1NFTEVDVDoge1xyXG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5fJHNlbGVjdGVkSWRzLmdldFZhbHVlKCkpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQoW10pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY2FzZSBNZXRob2RzRm9yU2VsZWN0aW5nVHlwZXMuTk9ORTpcclxuICAgICAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQodW5kZWZpbmVkKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBzZXRTZWxlY3RlZElkcyhpZHM6IEFycmF5PElkPiB8IElkIHwgdW5kZWZpbmVkKSB7XHJcbiAgICBpZiAoSlNPTi5zdHJpbmdpZnkodGhpcy5fJHNlbGVjdGVkSWRzLmdldFZhbHVlKCkpICE9PSBKU09OLnN0cmluZ2lmeShpZHMpKSB7XHJcbiAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KGlkcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpdGVtQ2xpY2soZGF0YTogSVJlbmRlclZpcnR1YWxMaXN0SXRlbSB8IHVuZGVmaW5lZCkge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0QnlDbGljaykge1xyXG4gICAgICB0aGlzLnNlbGVjdChkYXRhKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbGVjdHMgYSBsaXN0IGl0ZW1cclxuICAgKiBAcGFyYW0gZGF0YSBcclxuICAgKiBAcGFyYW0gc2VsZWN0ZWQgLSBJZiB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLCB0aGVuIHRoZSB0b2dnbGUgbWV0aG9kIGlzIGV4ZWN1dGVkLCBpZiBmYWxzZSBvciB0cnVlLCB0aGVuIHRoZSBzZWxlY3Rpb24vZGVzZWxlY3Rpb24gaXMgcGVyZm9ybWVkLlxyXG4gICAqL1xyXG4gIHNlbGVjdChkYXRhOiBJUmVuZGVyVmlydHVhbExpc3RJdGVtIHwgdW5kZWZpbmVkLCBzZWxlY3RlZDogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCkge1xyXG4gICAgaWYgKGRhdGEgJiYgZGF0YS5jb25maWcuc2VsZWN0YWJsZSkge1xyXG4gICAgICBzd2l0Y2ggKHRoaXMuXyRtZXRob2RPZlNlbGVjdGluZy5nZXRWYWx1ZSgpKSB7XHJcbiAgICAgICAgY2FzZSBNZXRob2RzRm9yU2VsZWN0aW5nVHlwZXMuU0VMRUNUOiB7XHJcbiAgICAgICAgICBjb25zdCBjdXJyID0gdGhpcy5fJHNlbGVjdGVkSWRzLmdldFZhbHVlKCkgYXMgKElkIHwgdW5kZWZpbmVkKTtcclxuICAgICAgICAgIGlmIChzZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KGN1cnIgIT09IGRhdGE/LmlkID8gZGF0YT8uaWQgOiB1bmRlZmluZWQpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQoc2VsZWN0ZWQgPyBkYXRhPy5pZCA6IHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FzZSBNZXRob2RzRm9yU2VsZWN0aW5nVHlwZXMuTVVMVElfU0VMRUNUOiB7XHJcbiAgICAgICAgICBjb25zdCBjdXJyID0gWy4uLih0aGlzLl8kc2VsZWN0ZWRJZHMuZ2V0VmFsdWUoKSB8fCBbXSkgYXMgQXJyYXk8SWQ+XSwgaW5kZXggPSBjdXJyLmluZGV4T2YoZGF0YS5pZCk7XHJcbiAgICAgICAgICBpZiAoc2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICAgIGN1cnIuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgICB0aGlzLl8kc2VsZWN0ZWRJZHMubmV4dChjdXJyKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLl8kc2VsZWN0ZWRJZHMubmV4dChbLi4uY3VyciwgZGF0YS5pZF0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkKSB7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQoY3Vycik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQoWy4uLmN1cnIsIGRhdGEuaWRdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICBjdXJyLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQoY3Vycik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQoY3Vycik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXNlIE1ldGhvZHNGb3JTZWxlY3RpbmdUeXBlcy5OT05FOlxyXG4gICAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KHVuZGVmaW5lZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplKHRyYWNrQm94OiBUcmFja0JveCkge1xyXG4gICAgdGhpcy5fdHJhY2tCb3ggPSB0cmFja0JveDtcclxuICB9XHJcblxyXG4gIGdlbmVyYXRlQ29tcG9uZW50SWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbmV4dENvbXBvbmVudElkID0gdGhpcy5fbmV4dENvbXBvbmVudElkID09PSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUlxyXG4gICAgICA/IDAgOiB0aGlzLl9uZXh0Q29tcG9uZW50SWQgKyAxO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
127
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctdmlydHVhbC1saXN0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9uZy12aXJ0dWFsLWxpc3Quc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR3BDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUVoRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxTQUFTLENBQUM7O0FBS2xELE1BQU0sT0FBTyxvQkFBb0I7SUFDdkIsZ0JBQWdCLEdBQVcsQ0FBQyxDQUFDO0lBRTdCLFdBQVcsR0FBRyxJQUFJLE9BQU8sRUFBMkMsQ0FBQztJQUM3RSxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUVyQyxhQUFhLEdBQUcsSUFBSSxlQUFlLENBQTZCLFNBQVMsQ0FBQyxDQUFDO0lBQ25GLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBRXpDLG1CQUFtQixHQUFHLElBQUksZUFBZSxDQUEyQixDQUFDLENBQUMsQ0FBQztJQUMvRSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFN0QsSUFBSSxpQkFBaUIsQ0FBQyxDQUEyQjtRQUMvQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFTyxTQUFTLENBQXVCO0lBRXhDLGFB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QVMsR0FBRyxRQUFRLENBQUM7SUFDNUIsQ0FBQztJQUVELG1CQUFtQjtRQUNqQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEtBQUssTUFBTSxDQUFDLGdCQUFnQjtZQUM5RSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7d0dBdkhVLG9CQUFvQjs0R0FBcEIsb0JBQW9CLGNBRm5CLE1BQU07OzRGQUVQLG9CQUFvQjtrQkFIaEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRhcCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBUcmFja0JveCB9IGZyb20gJy4vdXRpbHMvdHJhY2tCb3gnO1xyXG5pbXBvcnQgeyBJUmVuZGVyVmlydHVhbExpc3RJdGVtIH0gZnJvbSAnLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzL2ludGVybmFsL0JlaGF2aW9yU3ViamVjdCc7XHJcbmltcG9ydCB7IElkIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IE1ldGhvZHNGb3JTZWxlY3RpbmdUeXBlcyB9IGZyb20gJy4vZW51bXMvbWV0aG9kLWZvci1zZWxlY3RpbmctdHlwZXMnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XHJcbmltcG9ydCB7IERFRkFVTFRfU0VMRUNUX0JZX0NMSUNLIH0gZnJvbSAnLi9jb25zdCc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ1ZpcnR1YWxMaXN0U2VydmljZSB7XHJcbiAgcHJpdmF0ZSBfbmV4dENvbXBvbmVudElkOiBudW1iZXIgPSAwO1xyXG5cclxuICBwcml2YXRlIF8kaXRlbUNsaWNrID0gbmV3IFN1YmplY3Q8SVJlbmRlclZpcnR1YWxMaXN0SXRlbTxhbnk+IHwgdW5kZWZpbmVkPigpO1xyXG4gICRpdGVtQ2xpY2sgPSB0aGlzLl8kaXRlbUNsaWNrLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kc2VsZWN0ZWRJZHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFycmF5PElkPiB8IElkIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG4gICRzZWxlY3RlZElkcyA9IHRoaXMuXyRzZWxlY3RlZElkcy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJG1ldGhvZE9mU2VsZWN0aW5nID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNZXRob2RzRm9yU2VsZWN0aW5nVHlwZXM+KDApO1xyXG4gICRtZXRob2RPZlNlbGVjdGluZyA9IHRoaXMuXyRtZXRob2RPZlNlbGVjdGluZy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgc2V0IG1ldGhvZE9mU2VsZWN0aW5nKHY6IE1ldGhvZHNGb3JTZWxlY3RpbmdUeXBlcykge1xyXG4gICAgdGhpcy5fJG1ldGhvZE9mU2VsZWN0aW5nLm5leHQodik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF90cmFja0JveDogVHJhY2tCb3ggfCB1bmRlZmluZWQ7XHJcblxyXG4gIHNlbGVjdEJ5Q2xpY2s6IGJvb2xlYW4gPSBERUZBVUxUX1NFTEVDVF9CWV9DTElDSztcclxuXHJcbiAgbGlzdEVsZW1lbnQ6IEhUTUxEaXZFbGVtZW50IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5fJG1ldGhvZE9mU2VsZWN0aW5nLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgc3dpdGNoICh2KSB7XHJcbiAgICAgICAgICBjYXNlIE1ldGhvZHNGb3JTZWxlY3RpbmdUeXBlcy5TRUxFQ1Q6IHtcclxuICAgICAgICAgICAgY29uc3QgY3VyciA9IHRoaXMuXyRzZWxlY3RlZElkcy5nZXRWYWx1ZSgpO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGN1cnIgIT09ICdudW1iZXInICYmIHR5cGVvZiBjdXJyICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjYXNlIE1ldGhvZHNGb3JTZWxlY3RpbmdUeXBlcy5NVUxUSV9TRUxFQ1Q6IHtcclxuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMuXyRzZWxlY3RlZElkcy5nZXRWYWx1ZSgpKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KFtdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNhc2UgTWV0aG9kc0ZvclNlbGVjdGluZ1R5cGVzLk5PTkU6XHJcbiAgICAgICAgICBkZWZhdWx0OiB7XHJcbiAgICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0U2VsZWN0ZWRJZHMoaWRzOiBBcnJheTxJZD4gfCBJZCB8IHVuZGVmaW5lZCkge1xyXG4gICAgaWYgKEpTT04uc3RyaW5naWZ5KHRoaXMuXyRzZWxlY3RlZElkcy5nZXRWYWx1ZSgpKSAhPT0gSlNPTi5zdHJpbmdpZnkoaWRzKSkge1xyXG4gICAgICB0aGlzLl8kc2VsZWN0ZWRJZHMubmV4dChpZHMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXRlbUNsaWNrKGRhdGE6IElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW0gfCB1bmRlZmluZWQpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdEJ5Q2xpY2spIHtcclxuICAgICAgdGhpcy5zZWxlY3QoZGF0YSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZWxlY3RzIGEgbGlzdCBpdGVtXHJcbiAgICogQHBhcmFtIGRhdGEgXHJcbiAgICogQHBhcmFtIHNlbGVjdGVkIC0gSWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgdGhlbiB0aGUgdG9nZ2xlIG1ldGhvZCBpcyBleGVjdXRlZCwgaWYgZmFsc2Ugb3IgdHJ1ZSwgdGhlbiB0aGUgc2VsZWN0aW9uL2Rlc2VsZWN0aW9uIGlzIHBlcmZvcm1lZC5cclxuICAgKi9cclxuICBzZWxlY3QoZGF0YTogSVJlbmRlclZpcnR1YWxMaXN0SXRlbSB8IHVuZGVmaW5lZCwgc2VsZWN0ZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQpIHtcclxuICAgIGlmIChkYXRhICYmIGRhdGEuY29uZmlnLnNlbGVjdGFibGUpIHtcclxuICAgICAgc3dpdGNoICh0aGlzLl8kbWV0aG9kT2ZTZWxlY3RpbmcuZ2V0VmFsdWUoKSkge1xyXG4gICAgICAgIGNhc2UgTWV0aG9kc0ZvclNlbGVjdGluZ1R5cGVzLlNFTEVDVDoge1xyXG4gICAgICAgICAgY29uc3QgY3VyciA9IHRoaXMuXyRzZWxlY3RlZElkcy5nZXRWYWx1ZSgpIGFzIChJZCB8IHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICBpZiAoc2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLl8kc2VsZWN0ZWRJZHMubmV4dChjdXJyICE9PSBkYXRhPy5pZCA/IGRhdGE/LmlkIDogdW5kZWZpbmVkKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KHNlbGVjdGVkID8gZGF0YT8uaWQgOiB1bmRlZmluZWQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhc2UgTWV0aG9kc0ZvclNlbGVjdGluZ1R5cGVzLk1VTFRJX1NFTEVDVDoge1xyXG4gICAgICAgICAgY29uc3QgY3VyciA9IFsuLi4odGhpcy5fJHNlbGVjdGVkSWRzLmdldFZhbHVlKCkgfHwgW10pIGFzIEFycmF5PElkPl0sIGluZGV4ID0gY3Vyci5pbmRleE9mKGRhdGEuaWQpO1xyXG4gICAgICAgICAgaWYgKHNlbGVjdGVkID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICBjdXJyLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQoY3Vycik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQoWy4uLmN1cnIsIGRhdGEuaWRdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIGlmIChzZWxlY3RlZCkge1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KGN1cnIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KFsuLi5jdXJyLCBkYXRhLmlkXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgY3Vyci5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KGN1cnIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KGN1cnIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FzZSBNZXRob2RzRm9yU2VsZWN0aW5nVHlwZXMuTk9ORTpcclxuICAgICAgICBkZWZhdWx0OiB7XHJcbiAgICAgICAgICB0aGlzLl8kc2VsZWN0ZWRJZHMubmV4dCh1bmRlZmluZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGl6ZSh0cmFja0JveDogVHJhY2tCb3gpIHtcclxuICAgIHRoaXMuX3RyYWNrQm94ID0gdHJhY2tCb3g7XHJcbiAgfVxyXG5cclxuICBnZW5lcmF0ZUNvbXBvbmVudElkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX25leHRDb21wb25lbnRJZCA9IHRoaXMuX25leHRDb21wb25lbnRJZCA9PT0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcclxuICAgICAgPyAwIDogdGhpcy5fbmV4dENvbXBvbmVudElkICsgMTtcclxuICB9XHJcbn1cclxuIl19
|