ng-virtual-list 16.12.3 → 16.12.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/ng-list-item/const/index.mjs +2 -1
- package/esm2022/lib/components/ng-prerender-container/components/ng-prerender-scroller/ng-prerender-scroller.component.mjs +1 -4
- package/esm2022/lib/components/ng-prerender-container/core/prerender-track-box.mjs +3 -1
- package/esm2022/lib/components/ng-scroll-bar/ng-scroll-bar.component.mjs +5 -15
- package/esm2022/lib/components/ng-scroll-view/base/base-scroll-view.component.mjs +16 -2
- package/esm2022/lib/components/ng-scroll-view/ng-scroll-view.component.mjs +19 -9
- package/esm2022/lib/components/ng-scroller/ng-scroller.component.mjs +7 -11
- package/esm2022/lib/core/interfaces/metrics.mjs +1 -1
- package/esm2022/lib/core/interfaces/recalculate-metrics-options.mjs +1 -1
- package/esm2022/lib/core/track-box.mjs +16 -8
- package/esm2022/lib/directives/locale-sensitive/locale-sensitive.directive.mjs +6 -6
- package/esm2022/lib/models/render-item-config.model.mjs +1 -1
- package/esm2022/lib/models/render-item-measures.model.mjs +1 -1
- package/esm2022/lib/ng-virtual-list.component.mjs +89 -85
- package/esm2022/lib/utils/animator/animator.mjs +23 -15
- package/esm2022/lib/utils/animator/interfaces/animator-params.mjs +1 -1
- package/esm2022/lib/utils/animator/interfaces/animator-update-data.mjs +1 -1
- package/esm2022/lib/utils/animator/types/easing.mjs +1 -1
- package/esm2022/lib/utils/event-emitter/event-emitter.mjs +2 -2
- package/esm2022/lib/utils/event-emitter/interfaces/event-emitter.mjs +1 -1
- package/fesm2022/ng-virtual-list.mjs +178 -146
- package/fesm2022/ng-virtual-list.mjs.map +1 -1
- package/lib/components/ng-prerender-container/components/ng-prerender-scroller/ng-prerender-scroller.component.d.ts +0 -3
- package/lib/components/ng-scroll-bar/ng-scroll-bar.component.d.ts +1 -6
- package/lib/components/ng-scroll-view/base/base-scroll-view.component.d.ts +7 -1
- package/lib/components/ng-scroll-view/ng-scroll-view.component.d.ts +4 -0
- package/lib/components/ng-scroller/ng-scroller.component.d.ts +1 -3
- package/lib/core/interfaces/metrics.d.ts +2 -0
- package/lib/core/interfaces/recalculate-metrics-options.d.ts +1 -0
- package/lib/directives/locale-sensitive/locale-sensitive.directive.d.ts +2 -2
- package/lib/models/render-item-config.model.d.ts +4 -0
- package/lib/models/render-item-measures.model.d.ts +4 -0
- package/lib/ng-virtual-list.component.d.ts +0 -1
- package/lib/utils/animator/animator.d.ts +3 -2
- package/lib/utils/animator/interfaces/animator-params.d.ts +1 -1
- package/lib/utils/animator/interfaces/animator-update-data.d.ts +1 -1
- package/lib/utils/animator/types/easing.d.ts +1 -1
- package/lib/utils/event-emitter/event-emitter.d.ts +1 -1
- package/lib/utils/event-emitter/interfaces/event-emitter.d.ts +1 -1
- package/package.json +1 -1
|
@@ -3,6 +3,7 @@ import { BehaviorSubject, distinctUntilChanged, Subject, takeUntil, tap } from '
|
|
|
3
3
|
import { ScrollerDirection } from '../enums';
|
|
4
4
|
import { SCROLL_VIEW_INVERSION, SCROLL_VIEW_OVERSCROLL_ENABLED } from '../const';
|
|
5
5
|
import { DisposableComponent } from '../../../utils/disposable-component';
|
|
6
|
+
import { DEFAULT_LANG_TEXT_DIR } from '../../../const';
|
|
6
7
|
import * as i0 from "@angular/core";
|
|
7
8
|
/**
|
|
8
9
|
* BaseScrollView
|
|
@@ -67,6 +68,17 @@ export class BaseScrollView extends DisposableComponent {
|
|
|
67
68
|
$isVertical = this._$isVertical.asObservable();
|
|
68
69
|
_$grabbing = new BehaviorSubject(false);
|
|
69
70
|
$grabbing = this._$grabbing.asObservable();
|
|
71
|
+
get grabbing() {
|
|
72
|
+
return this._$grabbing.getValue();
|
|
73
|
+
}
|
|
74
|
+
_$langTextDir = new BehaviorSubject(DEFAULT_LANG_TEXT_DIR);
|
|
75
|
+
$langTextDir = this._$langTextDir.asObservable();
|
|
76
|
+
set langTextDir(v) {
|
|
77
|
+
if (this._$langTextDir.getValue() !== v) {
|
|
78
|
+
this._$langTextDir.next(v);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
get langTextDir() { return this._$langTextDir.getValue(); }
|
|
70
82
|
_inversion = inject(SCROLL_VIEW_INVERSION);
|
|
71
83
|
_overscrollEnabled = inject(SCROLL_VIEW_OVERSCROLL_ENABLED);
|
|
72
84
|
_$updateScrollBar = new Subject();
|
|
@@ -232,7 +244,7 @@ export class BaseScrollView extends DisposableComponent {
|
|
|
232
244
|
}
|
|
233
245
|
}
|
|
234
246
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: BaseScrollView, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
235
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: BaseScrollView, selector: "base-scroll-view", inputs: { direction: "direction", startOffset: "startOffset", endOffset: "endOffset", alignmentStartOffset: "alignmentStartOffset", alignmentEndOffset: "alignmentEndOffset", isInfinity: "isInfinity" }, viewQueries: [{ propertyName: "scrollContent", first: true, predicate: ["scrollContent"], descendants: true }, { propertyName: "scrollViewport", first: true, predicate: ["scrollViewport"], descendants: true }], usesInheritance: true, ngImport: i0, template: '', isInline: true });
|
|
247
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: BaseScrollView, selector: "base-scroll-view", inputs: { direction: "direction", startOffset: "startOffset", endOffset: "endOffset", alignmentStartOffset: "alignmentStartOffset", alignmentEndOffset: "alignmentEndOffset", isInfinity: "isInfinity", langTextDir: "langTextDir" }, viewQueries: [{ propertyName: "scrollContent", first: true, predicate: ["scrollContent"], descendants: true }, { propertyName: "scrollViewport", first: true, predicate: ["scrollViewport"], descendants: true }], usesInheritance: true, ngImport: i0, template: '', isInline: true });
|
|
236
248
|
}
|
|
237
249
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: BaseScrollView, decorators: [{
|
|
238
250
|
type: Component,
|
|
@@ -258,5 +270,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
258
270
|
type: Input
|
|
259
271
|
}], isInfinity: [{
|
|
260
272
|
type: Input
|
|
273
|
+
}], langTextDir: [{
|
|
274
|
+
type: Input
|
|
261
275
|
}] } });
|
|
262
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1zY3JvbGwtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9jb21wb25lbnRzL25nLXNjcm9sbC12aWV3L2Jhc2UvYmFzZS1zY3JvbGwtdmlldy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFBYyxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsR0FDbEQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0RixPQUFPLEVBQUUsaUJBQWlCLEVBQXNCLE1BQU0sVUFBVSxDQUFDO0FBRWpFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSw4QkFBOEIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNqRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7QUFFMUU7Ozs7Ozs7R0FPRztBQUtILE1BQU0sT0FBTyxjQUFlLFNBQVEsbUJBQW1CO0lBRW5ELGFBQWEsQ0FBeUM7SUFHdEQsY0FBYyxDQUF5QztJQUU3QyxXQUFXLEdBQUcsSUFBSSxlQUFlLENBQTJCLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3pGLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RELElBQ0ksU0FBUyxDQUFDLENBQTJCO1FBQ3JDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDbkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDNUI7SUFDTCxDQUFDO0lBQ0QsSUFBSSxTQUFTLEtBQUssT0FBTyxJQUFJLENBQUMsV0FB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RyxhQUFhO3NCQURaLFNBQVM7dUJBQUMsZUFBZTtnQkFJMUIsY0FBYztzQkFEYixTQUFTO3VCQUFDLGdCQUFnQjtnQkFNdkIsU0FBUztzQkFEWixLQUFLO2dCQVdGLFdBQVc7c0JBRGQsS0FBSztnQkFXRixTQUFTO3NCQURaLEtBQUs7Z0JBV0Ysb0JBQW9CO3NCQUR2QixLQUFLO2dCQVdGLGtCQUFrQjtzQkFEckIsS0FBSztnQkFXRixVQUFVO3NCQURiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBpbmplY3QsIElucHV0LCBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZGlzdGluY3RVbnRpbENoYW5nZWQsIFN1YmplY3QsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFNjcm9sbGVyRGlyZWN0aW9uLCBTY3JvbGxlckRpcmVjdGlvbnMgfSBmcm9tICcuLi9lbnVtcyc7XHJcbmltcG9ydCB7IElTaXplIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IFNDUk9MTF9WSUVXX0lOVkVSU0lPTiwgU0NST0xMX1ZJRVdfT1ZFUlNDUk9MTF9FTkFCTEVEIH0gZnJvbSAnLi4vY29uc3QnO1xyXG5pbXBvcnQgeyBEaXNwb3NhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvZGlzcG9zYWJsZS1jb21wb25lbnQnO1xyXG5cclxuLyoqXHJcbiAqIEJhc2VTY3JvbGxWaWV3XHJcbiAqIE1heGltdW0gcGVyZm9ybWFuY2UgZm9yIGV4dHJlbWVseSBsYXJnZSBsaXN0cy5cclxuICogSXQgaXMgYmFzZWQgb24gYWxnb3JpdGhtcyBmb3IgdmlydHVhbGl6YXRpb24gb2Ygc2NyZWVuIG9iamVjdHMuXHJcbiAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9Eam9ubnlYL25nLXZpcnR1YWwtbGlzdC9ibG9iLzE2LngvcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvY29tcG9uZW50cy9uZy1zY3JvbGwtdmlldy9iYXNlL2Jhc2Utc2Nyb2xsLXZpZXcuY29tcG9uZW50LnRzXHJcbiAqIEBhdXRob3IgRXZnZW5paSBBbGV4YW5kcm92aWNoIEdyZWJlbm5pa292XHJcbiAqIEBlbWFpbCBkam9ubnl4QGdtYWlsLmNvbVxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2Jhc2Utc2Nyb2xsLXZpZXcnLFxyXG4gICAgdGVtcGxhdGU6ICcnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQmFzZVNjcm9sbFZpZXcgZXh0ZW5kcyBEaXNwb3NhYmxlQ29tcG9uZW50IHtcclxuICAgIEBWaWV3Q2hpbGQoJ3Njcm9sbENvbnRlbnQnKVxyXG4gICAgc2Nyb2xsQ29udGVudDogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4gfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnc2Nyb2xsVmlld3BvcnQnKVxyXG4gICAgc2Nyb2xsVmlld3BvcnQ6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+IHwgdW5kZWZpbmVkO1xyXG5cclxuICAgIHByb3RlY3RlZCBfJGRpcmVjdGlvbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2Nyb2xsZXJEaXJlY3Rpb25zIHwgYW55PihTY3JvbGxlckRpcmVjdGlvbi5WRVJUSUNBTCk7XHJcbiAgICByZWFkb25seSAkZGlyZWN0aW9uID0gdGhpcy5fJGRpcmVjdGlvbi5hc09ic2VydmFibGUoKTtcclxuICAgIEBJbnB1dCgpXHJcbiAgICBzZXQgZGlyZWN0aW9uKHY6IFNjcm9sbGVyRGlyZWN0aW9ucyB8IGFueSkge1xyXG4gICAgICAgIGlmICh0aGlzLl8kZGlyZWN0aW9uLmdldFZhbHVlKCkgIT09IHYpIHtcclxuICAgICAgICAgICAgdGhpcy5fJGRpcmVjdGlvbi5uZXh0KHYpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGdldCBkaXJlY3Rpb24oKSB7IHJldHVybiB0aGlzLl8kZGlyZWN0aW9uLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgXyRzdGFydE9mZnNldCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuICAgIHJlYWRvbmx5ICRzdGFydE9mZnNldCA9IHRoaXMuXyRzdGFydE9mZnNldC5hc09ic2VydmFibGUoKTtcclxuICAgIEBJbnB1dCgpXHJcbiAgICBzZXQgc3RhcnRPZmZzZXQodjogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuXyRzdGFydE9mZnNldC5nZXRWYWx1ZSgpICE9PSB2KSB7XHJcbiAgICAgICAgICAgIHRoaXMuXyRzdGFydE9mZnNldC5uZXh0KHYpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGdldCBzdGFydE9mZnNldCgpIHsgcmV0dXJuIHRoaXMuXyRzdGFydE9mZnNldC5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF8kZW5kT2Zmc2V0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xyXG4gICAgcmVhZG9ubHkgJGVuZE9mZnNldCA9IHRoaXMuXyRlbmRPZmZzZXQuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICBASW5wdXQoKVxyXG4gICAgc2V0IGVuZE9mZnNldCh2OiBudW1iZXIpIHtcclxuICAgICAgICBpZiAodGhpcy5fJGVuZE9mZnNldC5nZXRWYWx1ZSgpICE9PSB2KSB7XHJcbiAgICAgICAgICAgIHRoaXMuXyRlbmRPZmZzZXQubmV4dCh2KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBnZXQgZW5kT2Zmc2V0KCkgeyByZXR1cm4gdGhpcy5fJGVuZE9mZnNldC5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF8kYWxpZ25tZW50U3RhcnRPZmZzZXQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XHJcbiAgICByZWFkb25seSAkYWxpZ25tZW50U3RhcnRPZmZzZXQgPSB0aGlzLl8kYWxpZ25tZW50U3RhcnRPZmZzZXQuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICBASW5wdXQoKVxyXG4gICAgc2V0IGFsaWdubWVudFN0YXJ0T2Zmc2V0KHY6IG51bWJlcikge1xyXG4gICAgICAgIGlmICh0aGlzLl8kYWxpZ25tZW50U3RhcnRPZmZzZXQuZ2V0VmFsdWUoKSAhPT0gdikge1xyXG4gICAgICAgICAgICB0aGlzLl8kYWxpZ25tZW50U3RhcnRPZmZzZXQubmV4dCh2KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBnZXQgYWxpZ25tZW50U3RhcnRPZmZzZXQoKSB7IHJldHVybiB0aGlzLl8kYWxpZ25tZW50U3RhcnRPZmZzZXQuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfJGFsaWdubWVudEVuZE9mZnNldCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuICAgIHJlYWRvbmx5ICRhbGlnbm1lbnRFbmRPZmZzZXQgPSB0aGlzLl8kYWxpZ25tZW50RW5kT2Zmc2V0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgQElucHV0KClcclxuICAgIHNldCBhbGlnbm1lbnRFbmRPZmZzZXQodjogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuXyRhbGlnbm1lbnRFbmRPZmZzZXQuZ2V0VmFsdWUoKSAhPT0gdikge1xyXG4gICAgICAgICAgICB0aGlzLl8kYWxpZ25tZW50RW5kT2Zmc2V0Lm5leHQodik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZ2V0IGFsaWdubWVudEVuZE9mZnNldCgpIHsgcmV0dXJuIHRoaXMuXyRhbGlnbm1lbnRFbmRPZmZzZXQuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfJGlzSW5maW5pdHkgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICAgIHJlYWRvbmx5ICRpc0luZmluaXR5ID0gdGhpcy5fJGlzSW5maW5pdHkuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICBASW5wdXQoKVxyXG4gICAgc2V0IGlzSW5maW5pdHkodjogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICh0aGlzLl8kaXNJbmZpbml0eS5nZXRWYWx1ZSgpICE9PSB2KSB7XHJcbiAgICAgICAgICAgIHRoaXMuXyRpc0luZmluaXR5Lm5leHQodik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZ2V0IGlzSW5maW5pdHkoKSB7IHJldHVybiB0aGlzLl8kaXNJbmZpbml0eS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF8kaXNWZXJ0aWNhbCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XHJcbiAgICByZWFkb25seSAkaXNWZXJ0aWNhbCA9IHRoaXMuXyRpc1ZlcnRpY2FsLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICAgIHByb3RlY3RlZCBfJGdyYWJiaW5nID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgICByZWFkb25seSAkZ3JhYmJpbmcgPSB0aGlzLl8kZ3JhYmJpbmcuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gICAgcHJvdGVjdGVkIF9pbnZlcnNpb24gPSBpbmplY3QoU0NST0xMX1ZJRVdfSU5WRVJTSU9OKTtcclxuXHJcbiAgICBwcm90ZWN0ZWQgX292ZXJzY3JvbGxFbmFibGVkID0gaW5qZWN0KFNDUk9MTF9WSUVXX09WRVJTQ1JPTExfRU5BQkxFRCk7XHJcblxyXG4gICAgcHJvdGVjdGVkIF8kdXBkYXRlU2Nyb2xsQmFyID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgIHByb3RlY3RlZCAkdXBkYXRlU2Nyb2xsQmFyID0gdGhpcy5fJHVwZGF0ZVNjcm9sbEJhci5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgICBnZXQgc2Nyb2xsYWJsZSgpIHtcclxuICAgICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHRoaXMuXyR2aWV3cG9ydEJvdW5kcy5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICBpc1ZlcnRpY2FsID0gdGhpcy5fJGlzVmVydGljYWwuZ2V0VmFsdWUoKSxcclxuICAgICAgICAgICAgdmlld3BvcnRTaXplID0gaXNWZXJ0aWNhbCA/IGhlaWdodCA6IHdpZHRoLFxyXG4gICAgICAgICAgICB0b3RhbFNpemUgPSB0aGlzLl90b3RhbFNpemU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludmVyc2lvbiA/ICh0b3RhbFNpemUgPCB2aWV3cG9ydFNpemUpIDogKHRvdGFsU2l6ZSA+IHZpZXdwb3J0U2l6ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9pc01vdmluZyA9IGZhbHNlO1xyXG4gICAgZ2V0IGlzTW92aW5nKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc01vdmluZztcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX3g6IG51bWJlciA9IDA7XHJcbiAgICBzZXQgeCh2OiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLl94ID0gdGhpcy5fYWN0dWFsWCA9IHY7XHJcblxyXG4gICAgICAgIHRoaXMubm9ybWFsaXplU2Nyb2xsU2l6ZSgpO1xyXG4gICAgfVxyXG4gICAgZ2V0IHgoKSB7IHJldHVybiB0aGlzLl94OyB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF95OiBudW1iZXIgPSAwO1xyXG4gICAgc2V0IHkodjogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5feSA9IHRoaXMuX2FjdHVhbFkgPSB2O1xyXG5cclxuICAgICAgICB0aGlzLm5vcm1hbGl6ZVNjcm9sbFNpemUoKTtcclxuICAgIH1cclxuICAgIGdldCB5KCkgeyByZXR1cm4gdGhpcy5feTsgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfYWN0dWFsVG90YWxTaXplOiBudW1iZXIgPSAwO1xyXG4gICAgcHJvdGVjdGVkIF90b3RhbFNpemU6IG51bWJlciA9IDA7XHJcbiAgICBzZXQgdG90YWxTaXplKHY6IG51bWJlcikge1xyXG4gICAgICAgIGlmICh0aGlzLl90b3RhbFNpemUgIT09IHYpIHtcclxuICAgICAgICAgICAgdGhpcy5fdG90YWxTaXplID0gdjtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnRPZmZzZXQgPSB0aGlzLl8kc3RhcnRPZmZzZXQuZ2V0VmFsdWUoKSwgZW5kT2Zmc2V0ID0gdGhpcy5fJGFsaWdubWVudEVuZE9mZnNldC5nZXRWYWx1ZSgpO1xyXG4gICAgICAgICAgICB0aGlzLl9hY3R1YWxUb3RhbFNpemUgPSB2ICsgc3RhcnRPZmZzZXQgKyBlbmRPZmZzZXQ7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm5vcm1hbGl6ZVNjcm9sbFNpemUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBnZXQgdG90YWxTaXplKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl90b3RhbFNpemU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9zdGFydExheW91dE9mZnNldDogbnVtYmVyID0gMDtcclxuICAgIHNldCBzdGFydExheW91dE9mZnNldCh2OiBudW1iZXIpIHtcclxuICAgICAgICBpZiAodGhpcy5fc3RhcnRMYXlvdXRPZmZzZXQgIT09IHYpIHtcclxuICAgICAgICAgICAgdGhpcy5fc3RhcnRMYXlvdXRPZmZzZXQgPSB2O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGdldCBzdGFydExheW91dE9mZnNldCgpIHsgcmV0dXJuIHRoaXMuX3N0YXJ0TGF5b3V0T2Zmc2V0OyB9XHJcblxyXG4gICAgZ2V0IGFjdHVhbFNjcm9sbEhlaWdodCgpIHtcclxuICAgICAgICBjb25zdCB7IGhlaWdodDogdmlld3BvcnRIZWlnaHQgfSA9IHRoaXMuXyR2aWV3cG9ydEJvdW5kcy5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICB0b3RhbFNpemUgPSB0aGlzLl9hY3R1YWxUb3RhbFNpemUsXHJcbiAgICAgICAgICAgIGlzVmVydGljYWwgPSB0aGlzLl8kaXNWZXJ0aWNhbC5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICBzdGFydE9mZnNldCA9IHRoaXMuXyRzdGFydE9mZnNldC5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICBlbmRPZmZzZXQgPSB0aGlzLl8kZW5kT2Zmc2V0LmdldFZhbHVlKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuX2ludmVyc2lvbikge1xyXG4gICAgICAgICAgICByZXR1cm4gdG90YWxTaXplID4gdmlld3BvcnRIZWlnaHQgPyBpc1ZlcnRpY2FsID8gZW5kT2Zmc2V0IDogMCA6IHZpZXdwb3J0SGVpZ2h0IC0gdG90YWxTaXplO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdG90YWxTaXplIDwgdmlld3BvcnRIZWlnaHQgPyBpc1ZlcnRpY2FsID8gc3RhcnRPZmZzZXQgOiAwIDogdG90YWxTaXplIC0gdmlld3BvcnRIZWlnaHQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGFjdHVhbFNjcm9sbFdpZHRoKCkge1xyXG4gICAgICAgIGNvbnN0IHsgd2lkdGg6IHZpZXdwb3J0V2lkdGggfSA9IHRoaXMuXyR2aWV3cG9ydEJvdW5kcy5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICB0b3RhbFNpemUgPSB0aGlzLl9hY3R1YWxUb3RhbFNpemUsXHJcbiAgICAgICAgICAgIGlzVmVydGljYWwgPSB0aGlzLl8kaXNWZXJ0aWNhbC5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICBzdGFydE9mZnNldCA9IHRoaXMuXyRzdGFydE9mZnNldC5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICBlbmRPZmZzZXQgPSB0aGlzLl8kZW5kT2Zmc2V0LmdldFZhbHVlKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuX2ludmVyc2lvbikge1xyXG4gICAgICAgICAgICByZXR1cm4gdG90YWxTaXplID4gdmlld3BvcnRXaWR0aCA/IGlzVmVydGljYWwgPyAwIDogZW5kT2Zmc2V0IDogdmlld3BvcnRXaWR0aCAtIHRvdGFsU2l6ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRvdGFsU2l6ZSA8IHZpZXdwb3J0V2lkdGggPyBpc1ZlcnRpY2FsID8gMCA6IHN0YXJ0T2Zmc2V0IDogdG90YWxTaXplIC0gdmlld3BvcnRXaWR0aDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2FjdHVhbFg6IG51bWJlciA9IDA7XHJcbiAgICBnZXQgYWN0dWFsU2Nyb2xsTGVmdCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYWN0dWFsWDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2FjdHVhbFk6IG51bWJlciA9IDA7XHJcbiAgICBnZXQgYWN0dWFsU2Nyb2xsVG9wKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9hY3R1YWxZO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzY3JvbGxMZWZ0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl94O1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzY3JvbGxUb3AoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3k7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNjcm9sbFdpZHRoKCkge1xyXG4gICAgICAgIGNvbnN0IHsgd2lkdGg6IHZpZXdwb3J0V2lkdGggfSA9IHRoaXMuXyR2aWV3cG9ydEJvdW5kcy5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICB7IHdpZHRoOiBjb250ZW50V2lkdGggfSA9IHRoaXMuXyRjb250ZW50Qm91bmRzLmdldFZhbHVlKCksXHJcbiAgICAgICAgICAgIGlzVmVydGljYWwgPSB0aGlzLl8kaXNWZXJ0aWNhbC5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICBzdGFydE9mZnNldCA9IHRoaXMuXyRzdGFydE9mZnNldC5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICBlbmRPZmZzZXQgPSB0aGlzLl8kZW5kT2Zmc2V0LmdldFZhbHVlKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuX2ludmVyc2lvbikge1xyXG4gICAgICAgICAgICByZXR1cm4gY29udGVudFdpZHRoID4gdmlld3BvcnRXaWR0aCA/IGlzVmVydGljYWwgPyAwIDogZW5kT2Zmc2V0IDogKHZpZXdwb3J0V2lkdGggLSAoY29udGVudFdpZHRoICsgdGhpcy5fJGFsaWdubWVudEVuZE9mZnNldC5nZXRWYWx1ZSgpKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb250ZW50V2lkdGggPCB2aWV3cG9ydFdpZHRoID8gaXNWZXJ0aWNhbCA/IDAgOiBzdGFydE9mZnNldCA6ICgoY29udGVudFdpZHRoICsgdGhpcy5fJGFsaWdubWVudEVuZE9mZnNldC5nZXRWYWx1ZSgpKSAtIHZpZXdwb3J0V2lkdGgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzY3JvbGxIZWlnaHQoKSB7XHJcbiAgICAgICAgY29uc3QgeyBoZWlnaHQ6IHZpZXdwb3J0SGVpZ2h0IH0gPSB0aGlzLl8kdmlld3BvcnRCb3VuZHMuZ2V0VmFsdWUoKSxcclxuICAgICAgICAgICAgeyBoZWlnaHQ6IGNvbnRlbnRIZWlnaHQgfSA9IHRoaXMuXyRjb250ZW50Qm91bmRzLmdldFZhbHVlKCksXHJcbiAgICAgICAgICAgIGlzVmVydGljYWwgPSB0aGlzLl8kaXNWZXJ0aWNhbC5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICBzdGFydE9mZnNldCA9IHRoaXMuXyRzdGFydE9mZnNldC5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICBlbmRPZmZzZXQgPSB0aGlzLl8kZW5kT2Zmc2V0LmdldFZhbHVlKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuX2ludmVyc2lvbikge1xyXG4gICAgICAgICAgICByZXR1cm4gY29udGVudEhlaWdodCA+IHZpZXdwb3J0SGVpZ2h0ID8gaXNWZXJ0aWNhbCA/IGVuZE9mZnNldCA6IDAgOiAodmlld3BvcnRIZWlnaHQgLSAoY29udGVudEhlaWdodCArIHRoaXMuXyRhbGlnbm1lbnRFbmRPZmZzZXQuZ2V0VmFsdWUoKSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY29udGVudEhlaWdodCA8IHZpZXdwb3J0SGVpZ2h0ID8gaXNWZXJ0aWNhbCA/IHN0YXJ0T2Zmc2V0IDogMCA6ICgoY29udGVudEhlaWdodCArIHRoaXMuXyRhbGlnbm1lbnRFbmRPZmZzZXQuZ2V0VmFsdWUoKSkgLSB2aWV3cG9ydEhlaWdodCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF8kdmlld3BvcnRCb3VuZHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElTaXplPih7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfSk7XHJcbiAgICByZWFkb25seSAkdmlld3BvcnRCb3VuZHMgPSB0aGlzLl8kdmlld3BvcnRCb3VuZHMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gICAgcHJvdGVjdGVkIF8kY29udGVudEJvdW5kcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVNpemU+KHsgd2lkdGg6IDAsIGhlaWdodDogMCB9KTtcclxuICAgIHJlYWRvbmx5ICRjb250ZW50Qm91bmRzID0gdGhpcy5fJGNvbnRlbnRCb3VuZHMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gICAgcHJvdGVjdGVkIF9pc0Nvb3JkaW5hdGVzT3ZlcnJpZGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuXHJcbiAgICAgICAgY29uc3QgJGRpcmVjdGlvbiA9IHRoaXMuJGRpcmVjdGlvbjtcclxuICAgICAgICAkZGlyZWN0aW9uLnBpcGUoXHJcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICAgICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl8kaXNWZXJ0aWNhbC5uZXh0KHYgPT09IFNjcm9sbGVyRGlyZWN0aW9uLlZFUlRJQ0FMKTtcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgKS5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aWNrKCkge1xyXG4gICAgICAgIHRoaXMub25SZXNpemVDb250ZW50KCk7XHJcbiAgICAgICAgdGhpcy5vblJlc2l6ZVZpZXdwb3J0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlQ29vcmRpbmF0ZXMoeDogbnVtYmVyLCB5OiBudW1iZXIpIHsgfVxyXG5cclxuICAgIHByb3RlY3RlZCBub3JtYWxpemVTY3JvbGxTaXplKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl8kaXNJbmZpbml0eS5nZXRWYWx1ZSgpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLl8kaXNWZXJ0aWNhbC5nZXRWYWx1ZSgpO1xyXG4gICAgICAgICAgICBpZiAoaXNWZXJ0aWNhbCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsU2l6ZSA9ICh0aGlzLl90b3RhbFNpemUgLSB0aGlzLl8kdmlld3BvcnRCb3VuZHMuZ2V0VmFsdWUoKS5oZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3kgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faXNDb29yZGluYXRlc092ZXJyaWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFBvc2l0aW9uID0gc2Nyb2xsU2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm92ZXJyaWRlQ29vcmRpbmF0ZXModGhpcy5feCwgY3VycmVudFBvc2l0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl95ID0gY3VycmVudFBvc2l0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl95ID4gc2Nyb2xsU2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2lzQ29vcmRpbmF0ZXNPdmVycmlkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRQb3NpdGlvbiA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vdmVycmlkZUNvb3JkaW5hdGVzKHRoaXMuX3gsIGN1cnJlbnRQb3NpdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5feSA9IGN1cnJlbnRQb3NpdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNjcm9sbFNpemUgPSAodGhpcy5fdG90YWxTaXplIC0gdGhpcy5fJHZpZXdwb3J0Qm91bmRzLmdldFZhbHVlKCkud2lkdGgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3ggPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faXNDb29yZGluYXRlc092ZXJyaWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFBvc2l0aW9uID0gc2Nyb2xsU2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm92ZXJyaWRlQ29vcmRpbmF0ZXMoY3VycmVudFBvc2l0aW9uLCB0aGlzLl95KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl94ID0gY3VycmVudFBvc2l0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl94ID4gc2Nyb2xsU2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2lzQ29vcmRpbmF0ZXNPdmVycmlkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRQb3NpdGlvbiA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vdmVycmlkZUNvb3JkaW5hdGVzKGN1cnJlbnRQb3NpdGlvbiwgdGhpcy5feSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5feCA9IGN1cnJlbnRQb3NpdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9pc0Nvb3JkaW5hdGVzT3ZlcnJpZGVkID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBvblJlc2l6ZVZpZXdwb3J0KCkge1xyXG4gICAgICAgIGNvbnN0IHZpZXdwb3J0ID0gdGhpcy5zY3JvbGxWaWV3cG9ydD8ubmF0aXZlRWxlbWVudDtcclxuICAgICAgICBpZiAoISF2aWV3cG9ydCkge1xyXG4gICAgICAgICAgICBjb25zdCBpc1ZlcnRpY2FsID0gdGhpcy5fJGlzVmVydGljYWwuZ2V0VmFsdWUoKSxcclxuICAgICAgICAgICAgICAgIHN0YXJ0T2Zmc2V0ID0gdGhpcy5fJHN0YXJ0T2Zmc2V0LmdldFZhbHVlKCksXHJcbiAgICAgICAgICAgICAgICBlbmRPZmZzZXQgPSB0aGlzLl8kZW5kT2Zmc2V0LmdldFZhbHVlKCksXHJcbiAgICAgICAgICAgICAgICB3ID0gdmlld3BvcnQub2Zmc2V0V2lkdGgsXHJcbiAgICAgICAgICAgICAgICBoID0gdmlld3BvcnQub2Zmc2V0SGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgd2lkdGggPSBpc1ZlcnRpY2FsID8gdyA6ICh3IC0gc3RhcnRPZmZzZXQgLSBlbmRPZmZzZXQpLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0ID0gaXNWZXJ0aWNhbCA/IChoIC0gc3RhcnRPZmZzZXQgLSBlbmRPZmZzZXQpIDogaCxcclxuICAgICAgICAgICAgICAgIGJvdW5kcyA9IHRoaXMuXyR2aWV3cG9ydEJvdW5kcy5nZXRWYWx1ZSgpO1xyXG4gICAgICAgICAgICBpZiAoYm91bmRzLndpZHRoID09PSB3aWR0aCAmJiBib3VuZHMuaGVpZ2h0ID09PSBoZWlnaHQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl8kdmlld3BvcnRCb3VuZHMubmV4dCh7IHdpZHRoLCBoZWlnaHQgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBvblJlc2l6ZUNvbnRlbnQodmFsdWU6IG51bWJlciB8IG51bGwgPSBudWxsKSB7XHJcbiAgICAgICAgY29uc3QgY29udGVudCA9IHRoaXMuc2Nyb2xsQ29udGVudD8ubmF0aXZlRWxlbWVudDtcclxuICAgICAgICBpZiAoISFjb250ZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLl8kaXNWZXJ0aWNhbC5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICAgICAgc3RhcnRPZmZzZXQgPSB0aGlzLl8kc3RhcnRPZmZzZXQuZ2V0VmFsdWUoKSxcclxuICAgICAgICAgICAgICAgIHcgPSBjb250ZW50Lm9mZnNldFdpZHRoLFxyXG4gICAgICAgICAgICAgICAgaCA9IGNvbnRlbnQub2Zmc2V0SGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgd2lkdGggPSBpc1ZlcnRpY2FsID8gdyA6IHZhbHVlID8/ICh3IC0gc3RhcnRPZmZzZXQpLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0ID0gaXNWZXJ0aWNhbCA/IHZhbHVlID8/IChoIC0gc3RhcnRPZmZzZXQpIDogaCxcclxuICAgICAgICAgICAgICAgIGJvdW5kcyA9IHRoaXMuXyRjb250ZW50Qm91bmRzLmdldFZhbHVlKCk7XHJcbiAgICAgICAgICAgIGlmIChib3VuZHMud2lkdGggPT09IHdpZHRoICYmIGJvdW5kcy5oZWlnaHQgPT09IGhlaWdodCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuXyRjb250ZW50Qm91bmRzLm5leHQoeyB3aWR0aCwgaGVpZ2h0IH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSJdfQ==
|
|
276
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1zY3JvbGwtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9jb21wb25lbnRzL25nLXNjcm9sbC12aWV3L2Jhc2UvYmFzZS1zY3JvbGwtdmlldy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFBYyxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsR0FDbEQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0RixPQUFPLEVBQUUsaUJBQWlCLEVBQXNCLE1BQU0sVUFBVSxDQUFDO0FBRWpFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSw4QkFBOEIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUdqRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFFdkQ7Ozs7Ozs7R0FPRztBQUtILE1BQU0sT0FBTyxjQUFlLFNBQVEsbUJBQW1CO0lBRW5ELGFBQWEsQ0FBeUM7SUFHdEQsY0FBYyxDQUF5QztJQUU3QyxXQUFXLEdBQUcsSUFBSSxlQUFlLENBQTJCLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3pGLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RELElBQ0ksU0FBUyxDQUFDLENBQTJCO1FBQ3JDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDbkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDNUI7SUFD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LEVBQ25ELE1BQU0sR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNwRCxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM3QyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEtBQUssS0FBSyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssTUFBTSxFQUFFO2dCQUNwRCxPQUFPO2FBQ1Y7WUFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1NBQ2hEO0lBQ0wsQ0FBQzt3R0F4VFEsY0FBYzs0RkFBZCxjQUFjLHdnQkFGYixFQUFFOzs0RkFFSCxjQUFjO2tCQUoxQixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxrQkFBa0I7b0JBQzVCLFFBQVEsRUFBRSxFQUFFO2lCQUNmOzBFQUdHLGFBQWE7c0JBRFosU0FBUzt1QkFBQyxlQUFlO2dCQUkxQixjQUFjO3NCQURiLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQU12QixTQUFTO3NCQURaLEtBQUs7Z0JBV0YsV0FBVztzQkFEZCxLQUFLO2dCQVdGLFNBQVM7c0JBRFosS0FBSztnQkFXRixvQkFBb0I7c0JBRHZCLEtBQUs7Z0JBV0Ysa0JBQWtCO3NCQURyQixLQUFLO2dCQVdGLFVBQVU7c0JBRGIsS0FBSztnQkFxQkYsV0FBVztzQkFEZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIENvbXBvbmVudCwgRWxlbWVudFJlZiwgaW5qZWN0LCBJbnB1dCwgVmlld0NoaWxkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBTdWJqZWN0LCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBTY3JvbGxlckRpcmVjdGlvbiwgU2Nyb2xsZXJEaXJlY3Rpb25zIH0gZnJvbSAnLi4vZW51bXMnO1xyXG5pbXBvcnQgeyBJU2l6ZSB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBTQ1JPTExfVklFV19JTlZFUlNJT04sIFNDUk9MTF9WSUVXX09WRVJTQ1JPTExfRU5BQkxFRCB9IGZyb20gJy4uL2NvbnN0JztcclxuaW1wb3J0IHsgVGV4dERpcmVjdGlvbiB9IGZyb20gJy4uLy4uLy4uL3R5cGVzJztcclxuaW1wb3J0IHsgVGV4dERpcmVjdGlvbnMgfSBmcm9tICcuLi8uLi8uLi9lbnVtcyc7XHJcbmltcG9ydCB7IERpc3Bvc2FibGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi91dGlscy9kaXNwb3NhYmxlLWNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERFRkFVTFRfTEFOR19URVhUX0RJUiB9IGZyb20gJy4uLy4uLy4uL2NvbnN0JztcclxuXHJcbi8qKlxyXG4gKiBCYXNlU2Nyb2xsVmlld1xyXG4gKiBNYXhpbXVtIHBlcmZvcm1hbmNlIGZvciBleHRyZW1lbHkgbGFyZ2UgbGlzdHMuXHJcbiAqIEl0IGlzIGJhc2VkIG9uIGFsZ29yaXRobXMgZm9yIHZpcnR1YWxpemF0aW9uIG9mIHNjcmVlbiBvYmplY3RzLlxyXG4gKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vRGpvbm55WC9uZy12aXJ0dWFsLWxpc3QvYmxvYi8xNi54L3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL2NvbXBvbmVudHMvbmctc2Nyb2xsLXZpZXcvYmFzZS9iYXNlLXNjcm9sbC12aWV3LmNvbXBvbmVudC50c1xyXG4gKiBAYXV0aG9yIEV2Z2VuaWkgQWxleGFuZHJvdmljaCBHcmViZW5uaWtvdlxyXG4gKiBAZW1haWwgZGpvbm55eEBnbWFpbC5jb21cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdiYXNlLXNjcm9sbC12aWV3JyxcclxuICAgIHRlbXBsYXRlOiAnJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIEJhc2VTY3JvbGxWaWV3IGV4dGVuZHMgRGlzcG9zYWJsZUNvbXBvbmVudCB7XHJcbiAgICBAVmlld0NoaWxkKCdzY3JvbGxDb250ZW50JylcclxuICAgIHNjcm9sbENvbnRlbnQ6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+IHwgdW5kZWZpbmVkO1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ3Njcm9sbFZpZXdwb3J0JylcclxuICAgIHNjcm9sbFZpZXdwb3J0OiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICBwcm90ZWN0ZWQgXyRkaXJlY3Rpb24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNjcm9sbGVyRGlyZWN0aW9ucyB8IGFueT4oU2Nyb2xsZXJEaXJlY3Rpb24uVkVSVElDQUwpO1xyXG4gICAgcmVhZG9ubHkgJGRpcmVjdGlvbiA9IHRoaXMuXyRkaXJlY3Rpb24uYXNPYnNlcnZhYmxlKCk7XHJcbiAgICBASW5wdXQoKVxyXG4gICAgc2V0IGRpcmVjdGlvbih2OiBTY3JvbGxlckRpcmVjdGlvbnMgfCBhbnkpIHtcclxuICAgICAgICBpZiAodGhpcy5fJGRpcmVjdGlvbi5nZXRWYWx1ZSgpICE9PSB2KSB7XHJcbiAgICAgICAgICAgIHRoaXMuXyRkaXJlY3Rpb24ubmV4dCh2KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBnZXQgZGlyZWN0aW9uKCkgeyByZXR1cm4gdGhpcy5fJGRpcmVjdGlvbi5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF8kc3RhcnRPZmZzZXQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XHJcbiAgICByZWFkb25seSAkc3RhcnRPZmZzZXQgPSB0aGlzLl8kc3RhcnRPZmZzZXQuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICBASW5wdXQoKVxyXG4gICAgc2V0IHN0YXJ0T2Zmc2V0KHY6IG51bWJlcikge1xyXG4gICAgICAgIGlmICh0aGlzLl8kc3RhcnRPZmZzZXQuZ2V0VmFsdWUoKSAhPT0gdikge1xyXG4gICAgICAgICAgICB0aGlzLl8kc3RhcnRPZmZzZXQubmV4dCh2KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBnZXQgc3RhcnRPZmZzZXQoKSB7IHJldHVybiB0aGlzLl8kc3RhcnRPZmZzZXQuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfJGVuZE9mZnNldCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuICAgIHJlYWRvbmx5ICRlbmRPZmZzZXQgPSB0aGlzLl8kZW5kT2Zmc2V0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgQElucHV0KClcclxuICAgIHNldCBlbmRPZmZzZXQodjogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuXyRlbmRPZmZzZXQuZ2V0VmFsdWUoKSAhPT0gdikge1xyXG4gICAgICAgICAgICB0aGlzLl8kZW5kT2Zmc2V0Lm5leHQodik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZ2V0IGVuZE9mZnNldCgpIHsgcmV0dXJuIHRoaXMuXyRlbmRPZmZzZXQuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfJGFsaWdubWVudFN0YXJ0T2Zmc2V0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xyXG4gICAgcmVhZG9ubHkgJGFsaWdubWVudFN0YXJ0T2Zmc2V0ID0gdGhpcy5fJGFsaWdubWVudFN0YXJ0T2Zmc2V0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgQElucHV0KClcclxuICAgIHNldCBhbGlnbm1lbnRTdGFydE9mZnNldCh2OiBudW1iZXIpIHtcclxuICAgICAgICBpZiAodGhpcy5fJGFsaWdubWVudFN0YXJ0T2Zmc2V0LmdldFZhbHVlKCkgIT09IHYpIHtcclxuICAgICAgICAgICAgdGhpcy5fJGFsaWdubWVudFN0YXJ0T2Zmc2V0Lm5leHQodik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZ2V0IGFsaWdubWVudFN0YXJ0T2Zmc2V0KCkgeyByZXR1cm4gdGhpcy5fJGFsaWdubWVudFN0YXJ0T2Zmc2V0LmdldFZhbHVlKCk7IH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgXyRhbGlnbm1lbnRFbmRPZmZzZXQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XHJcbiAgICByZWFkb25seSAkYWxpZ25tZW50RW5kT2Zmc2V0ID0gdGhpcy5fJGFsaWdubWVudEVuZE9mZnNldC5hc09ic2VydmFibGUoKTtcclxuICAgIEBJbnB1dCgpXHJcbiAgICBzZXQgYWxpZ25tZW50RW5kT2Zmc2V0KHY6IG51bWJlcikge1xyXG4gICAgICAgIGlmICh0aGlzLl8kYWxpZ25tZW50RW5kT2Zmc2V0LmdldFZhbHVlKCkgIT09IHYpIHtcclxuICAgICAgICAgICAgdGhpcy5fJGFsaWdubWVudEVuZE9mZnNldC5uZXh0KHYpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGdldCBhbGlnbm1lbnRFbmRPZmZzZXQoKSB7IHJldHVybiB0aGlzLl8kYWxpZ25tZW50RW5kT2Zmc2V0LmdldFZhbHVlKCk7IH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgXyRpc0luZmluaXR5ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgICByZWFkb25seSAkaXNJbmZpbml0eSA9IHRoaXMuXyRpc0luZmluaXR5LmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgQElucHV0KClcclxuICAgIHNldCBpc0luZmluaXR5KHY6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAodGhpcy5fJGlzSW5maW5pdHkuZ2V0VmFsdWUoKSAhPT0gdikge1xyXG4gICAgICAgICAgICB0aGlzLl8kaXNJbmZpbml0eS5uZXh0KHYpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGdldCBpc0luZmluaXR5KCkgeyByZXR1cm4gdGhpcy5fJGlzSW5maW5pdHkuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfJGlzVmVydGljYWwgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xyXG4gICAgcmVhZG9ubHkgJGlzVmVydGljYWwgPSB0aGlzLl8kaXNWZXJ0aWNhbC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgICBwcm90ZWN0ZWQgXyRncmFiYmluZyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgcmVhZG9ubHkgJGdyYWJiaW5nID0gdGhpcy5fJGdyYWJiaW5nLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgZ2V0IGdyYWJiaW5nKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl8kZ3JhYmJpbmcuZ2V0VmFsdWUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF8kbGFuZ1RleHREaXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRleHREaXJlY3Rpb24+KERFRkFVTFRfTEFOR19URVhUX0RJUik7XHJcbiAgICByZWFkb25seSAkbGFuZ1RleHREaXIgPSB0aGlzLl8kbGFuZ1RleHREaXIuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHNldCBsYW5nVGV4dERpcih2OiBUZXh0RGlyZWN0aW9uKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuXyRsYW5nVGV4dERpci5nZXRWYWx1ZSgpICE9PSB2KSB7XHJcbiAgICAgICAgICAgIHRoaXMuXyRsYW5nVGV4dERpci5uZXh0KHYpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGdldCBsYW5nVGV4dERpcigpIHsgcmV0dXJuIHRoaXMuXyRsYW5nVGV4dERpci5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9pbnZlcnNpb24gPSBpbmplY3QoU0NST0xMX1ZJRVdfSU5WRVJTSU9OKTtcclxuXHJcbiAgICBwcm90ZWN0ZWQgX292ZXJzY3JvbGxFbmFibGVkID0gaW5qZWN0KFNDUk9MTF9WSUVXX09WRVJTQ1JPTExfRU5BQkxFRCk7XHJcblxyXG4gICAgcHJvdGVjdGVkIF8kdXBkYXRlU2Nyb2xsQmFyID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgIHByb3RlY3RlZCAkdXBkYXRlU2Nyb2xsQmFyID0gdGhpcy5fJHVwZGF0ZVNjcm9sbEJhci5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgICBnZXQgc2Nyb2xsYWJsZSgpIHtcclxuICAgICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHRoaXMuXyR2aWV3cG9ydEJvdW5kcy5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICBpc1ZlcnRpY2FsID0gdGhpcy5fJGlzVmVydGljYWwuZ2V0VmFsdWUoKSxcclxuICAgICAgICAgICAgdmlld3BvcnRTaXplID0gaXNWZXJ0aWNhbCA/IGhlaWdodCA6IHdpZHRoLFxyXG4gICAgICAgICAgICB0b3RhbFNpemUgPSB0aGlzLl90b3RhbFNpemU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludmVyc2lvbiA/ICh0b3RhbFNpemUgPCB2aWV3cG9ydFNpemUpIDogKHRvdGFsU2l6ZSA+IHZpZXdwb3J0U2l6ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9pc01vdmluZyA9IGZhbHNlO1xyXG4gICAgZ2V0IGlzTW92aW5nKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc01vdmluZztcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX3g6IG51bWJlciA9IDA7XHJcbiAgICBzZXQgeCh2OiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLl94ID0gdGhpcy5fYWN0dWFsWCA9IHY7XHJcblxyXG4gICAgICAgIHRoaXMubm9ybWFsaXplU2Nyb2xsU2l6ZSgpO1xyXG4gICAgfVxyXG4gICAgZ2V0IHgoKSB7IHJldHVybiB0aGlzLl94OyB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF95OiBudW1iZXIgPSAwO1xyXG4gICAgc2V0IHkodjogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5feSA9IHRoaXMuX2FjdHVhbFkgPSB2O1xyXG5cclxuICAgICAgICB0aGlzLm5vcm1hbGl6ZVNjcm9sbFNpemUoKTtcclxuICAgIH1cclxuICAgIGdldCB5KCkgeyByZXR1cm4gdGhpcy5feTsgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfYWN0dWFsVG90YWxTaXplOiBudW1iZXIgPSAwO1xyXG4gICAgcHJvdGVjdGVkIF90b3RhbFNpemU6IG51bWJlciA9IDA7XHJcbiAgICBzZXQgdG90YWxTaXplKHY6IG51bWJlcikge1xyXG4gICAgICAgIGlmICh0aGlzLl90b3RhbFNpemUgIT09IHYpIHtcclxuICAgICAgICAgICAgdGhpcy5fdG90YWxTaXplID0gdjtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnRPZmZzZXQgPSB0aGlzLl8kc3RhcnRPZmZzZXQuZ2V0VmFsdWUoKSwgZW5kT2Zmc2V0ID0gdGhpcy5fJGFsaWdubWVudEVuZE9mZnNldC5nZXRWYWx1ZSgpO1xyXG4gICAgICAgICAgICB0aGlzLl9hY3R1YWxUb3RhbFNpemUgPSB2ICsgc3RhcnRPZmZzZXQgKyBlbmRPZmZzZXQ7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm5vcm1hbGl6ZVNjcm9sbFNpemUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBnZXQgdG90YWxTaXplKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl90b3RhbFNpemU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9zdGFydExheW91dE9mZnNldDogbnVtYmVyID0gMDtcclxuICAgIHNldCBzdGFydExheW91dE9mZnNldCh2OiBudW1iZXIpIHtcclxuICAgICAgICBpZiAodGhpcy5fc3RhcnRMYXlvdXRPZmZzZXQgIT09IHYpIHtcclxuICAgICAgICAgICAgdGhpcy5fc3RhcnRMYXlvdXRPZmZzZXQgPSB2O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGdldCBzdGFydExheW91dE9mZnNldCgpIHsgcmV0dXJuIHRoaXMuX3N0YXJ0TGF5b3V0T2Zmc2V0OyB9XHJcblxyXG4gICAgZ2V0IGFjdHVhbFNjcm9sbEhlaWdodCgpIHtcclxuICAgICAgICBjb25zdCB7IGhlaWdodDogdmlld3BvcnRIZWlnaHQgfSA9IHRoaXMuXyR2aWV3cG9ydEJvdW5kcy5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICB0b3RhbFNpemUgPSB0aGlzLl9hY3R1YWxUb3RhbFNpemUsXHJcbiAgICAgICAgICAgIGlzVmVydGljYWwgPSB0aGlzLl8kaXNWZXJ0aWNhbC5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICBzdGFydE9mZnNldCA9IHRoaXMuXyRzdGFydE9mZnNldC5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICBlbmRPZmZzZXQgPSB0aGlzLl8kZW5kT2Zmc2V0LmdldFZhbHVlKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuX2ludmVyc2lvbikge1xyXG4gICAgICAgICAgICByZXR1cm4gdG90YWxTaXplID4gdmlld3BvcnRIZWlnaHQgPyBpc1ZlcnRpY2FsID8gZW5kT2Zmc2V0IDogMCA6IHZpZXdwb3J0SGVpZ2h0IC0gdG90YWxTaXplO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdG90YWxTaXplIDwgdmlld3BvcnRIZWlnaHQgPyBpc1ZlcnRpY2FsID8gc3RhcnRPZmZzZXQgOiAwIDogdG90YWxTaXplIC0gdmlld3BvcnRIZWlnaHQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGFjdHVhbFNjcm9sbFdpZHRoKCkge1xyXG4gICAgICAgIGNvbnN0IHsgd2lkdGg6IHZpZXdwb3J0V2lkdGggfSA9IHRoaXMuXyR2aWV3cG9ydEJvdW5kcy5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICB0b3RhbFNpemUgPSB0aGlzLl9hY3R1YWxUb3RhbFNpemUsXHJcbiAgICAgICAgICAgIGlzVmVydGljYWwgPSB0aGlzLl8kaXNWZXJ0aWNhbC5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICBzdGFydE9mZnNldCA9IHRoaXMuXyRzdGFydE9mZnNldC5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICBlbmRPZmZzZXQgPSB0aGlzLl8kZW5kT2Zmc2V0LmdldFZhbHVlKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuX2ludmVyc2lvbikge1xyXG4gICAgICAgICAgICByZXR1cm4gdG90YWxTaXplID4gdmlld3BvcnRXaWR0aCA/IGlzVmVydGljYWwgPyAwIDogZW5kT2Zmc2V0IDogdmlld3BvcnRXaWR0aCAtIHRvdGFsU2l6ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRvdGFsU2l6ZSA8IHZpZXdwb3J0V2lkdGggPyBpc1ZlcnRpY2FsID8gMCA6IHN0YXJ0T2Zmc2V0IDogdG90YWxTaXplIC0gdmlld3BvcnRXaWR0aDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2FjdHVhbFg6IG51bWJlciA9IDA7XHJcbiAgICBnZXQgYWN0dWFsU2Nyb2xsTGVmdCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYWN0dWFsWDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2FjdHVhbFk6IG51bWJlciA9IDA7XHJcbiAgICBnZXQgYWN0dWFsU2Nyb2xsVG9wKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9hY3R1YWxZO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzY3JvbGxMZWZ0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl94O1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzY3JvbGxUb3AoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3k7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNjcm9sbFdpZHRoKCkge1xyXG4gICAgICAgIGNvbnN0IHsgd2lkdGg6IHZpZXdwb3J0V2lkdGggfSA9IHRoaXMuXyR2aWV3cG9ydEJvdW5kcy5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICB7IHdpZHRoOiBjb250ZW50V2lkdGggfSA9IHRoaXMuXyRjb250ZW50Qm91bmRzLmdldFZhbHVlKCksXHJcbiAgICAgICAgICAgIGlzVmVydGljYWwgPSB0aGlzLl8kaXNWZXJ0aWNhbC5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICBzdGFydE9mZnNldCA9IHRoaXMuXyRzdGFydE9mZnNldC5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICBlbmRPZmZzZXQgPSB0aGlzLl8kZW5kT2Zmc2V0LmdldFZhbHVlKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuX2ludmVyc2lvbikge1xyXG4gICAgICAgICAgICByZXR1cm4gY29udGVudFdpZHRoID4gdmlld3BvcnRXaWR0aCA/IGlzVmVydGljYWwgPyAwIDogZW5kT2Zmc2V0IDogKHZpZXdwb3J0V2lkdGggLSAoY29udGVudFdpZHRoICsgdGhpcy5fJGFsaWdubWVudEVuZE9mZnNldC5nZXRWYWx1ZSgpKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb250ZW50V2lkdGggPCB2aWV3cG9ydFdpZHRoID8gaXNWZXJ0aWNhbCA/IDAgOiBzdGFydE9mZnNldCA6ICgoY29udGVudFdpZHRoICsgdGhpcy5fJGFsaWdubWVudEVuZE9mZnNldC5nZXRWYWx1ZSgpKSAtIHZpZXdwb3J0V2lkdGgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzY3JvbGxIZWlnaHQoKSB7XHJcbiAgICAgICAgY29uc3QgeyBoZWlnaHQ6IHZpZXdwb3J0SGVpZ2h0IH0gPSB0aGlzLl8kdmlld3BvcnRCb3VuZHMuZ2V0VmFsdWUoKSxcclxuICAgICAgICAgICAgeyBoZWlnaHQ6IGNvbnRlbnRIZWlnaHQgfSA9IHRoaXMuXyRjb250ZW50Qm91bmRzLmdldFZhbHVlKCksXHJcbiAgICAgICAgICAgIGlzVmVydGljYWwgPSB0aGlzLl8kaXNWZXJ0aWNhbC5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICBzdGFydE9mZnNldCA9IHRoaXMuXyRzdGFydE9mZnNldC5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICBlbmRPZmZzZXQgPSB0aGlzLl8kZW5kT2Zmc2V0LmdldFZhbHVlKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuX2ludmVyc2lvbikge1xyXG4gICAgICAgICAgICByZXR1cm4gY29udGVudEhlaWdodCA+IHZpZXdwb3J0SGVpZ2h0ID8gaXNWZXJ0aWNhbCA/IGVuZE9mZnNldCA6IDAgOiAodmlld3BvcnRIZWlnaHQgLSAoY29udGVudEhlaWdodCArIHRoaXMuXyRhbGlnbm1lbnRFbmRPZmZzZXQuZ2V0VmFsdWUoKSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY29udGVudEhlaWdodCA8IHZpZXdwb3J0SGVpZ2h0ID8gaXNWZXJ0aWNhbCA/IHN0YXJ0T2Zmc2V0IDogMCA6ICgoY29udGVudEhlaWdodCArIHRoaXMuXyRhbGlnbm1lbnRFbmRPZmZzZXQuZ2V0VmFsdWUoKSkgLSB2aWV3cG9ydEhlaWdodCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF8kdmlld3BvcnRCb3VuZHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElTaXplPih7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfSk7XHJcbiAgICByZWFkb25seSAkdmlld3BvcnRCb3VuZHMgPSB0aGlzLl8kdmlld3BvcnRCb3VuZHMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gICAgcHJvdGVjdGVkIF8kY29udGVudEJvdW5kcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVNpemU+KHsgd2lkdGg6IDAsIGhlaWdodDogMCB9KTtcclxuICAgIHJlYWRvbmx5ICRjb250ZW50Qm91bmRzID0gdGhpcy5fJGNvbnRlbnRCb3VuZHMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gICAgcHJvdGVjdGVkIF9pc0Nvb3JkaW5hdGVzT3ZlcnJpZGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuXHJcbiAgICAgICAgY29uc3QgJGRpcmVjdGlvbiA9IHRoaXMuJGRpcmVjdGlvbjtcclxuICAgICAgICAkZGlyZWN0aW9uLnBpcGUoXHJcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICAgICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl8kaXNWZXJ0aWNhbC5uZXh0KHYgPT09IFNjcm9sbGVyRGlyZWN0aW9uLlZFUlRJQ0FMKTtcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgKS5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aWNrKCkge1xyXG4gICAgICAgIHRoaXMub25SZXNpemVDb250ZW50KCk7XHJcbiAgICAgICAgdGhpcy5vblJlc2l6ZVZpZXdwb3J0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlQ29vcmRpbmF0ZXMoeDogbnVtYmVyLCB5OiBudW1iZXIpIHsgfVxyXG5cclxuICAgIHByb3RlY3RlZCBub3JtYWxpemVTY3JvbGxTaXplKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl8kaXNJbmZpbml0eS5nZXRWYWx1ZSgpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLl8kaXNWZXJ0aWNhbC5nZXRWYWx1ZSgpO1xyXG4gICAgICAgICAgICBpZiAoaXNWZXJ0aWNhbCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsU2l6ZSA9ICh0aGlzLl90b3RhbFNpemUgLSB0aGlzLl8kdmlld3BvcnRCb3VuZHMuZ2V0VmFsdWUoKS5oZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3kgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faXNDb29yZGluYXRlc092ZXJyaWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFBvc2l0aW9uID0gc2Nyb2xsU2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm92ZXJyaWRlQ29vcmRpbmF0ZXModGhpcy5feCwgY3VycmVudFBvc2l0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl95ID0gY3VycmVudFBvc2l0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl95ID4gc2Nyb2xsU2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2lzQ29vcmRpbmF0ZXNPdmVycmlkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRQb3NpdGlvbiA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vdmVycmlkZUNvb3JkaW5hdGVzKHRoaXMuX3gsIGN1cnJlbnRQb3NpdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5feSA9IGN1cnJlbnRQb3NpdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNjcm9sbFNpemUgPSAodGhpcy5fdG90YWxTaXplIC0gdGhpcy5fJHZpZXdwb3J0Qm91bmRzLmdldFZhbHVlKCkud2lkdGgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3ggPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faXNDb29yZGluYXRlc092ZXJyaWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFBvc2l0aW9uID0gc2Nyb2xsU2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm92ZXJyaWRlQ29vcmRpbmF0ZXMoY3VycmVudFBvc2l0aW9uLCB0aGlzLl95KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl94ID0gY3VycmVudFBvc2l0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl94ID4gc2Nyb2xsU2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2lzQ29vcmRpbmF0ZXNPdmVycmlkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRQb3NpdGlvbiA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vdmVycmlkZUNvb3JkaW5hdGVzKGN1cnJlbnRQb3NpdGlvbiwgdGhpcy5feSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5feCA9IGN1cnJlbnRQb3NpdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9pc0Nvb3JkaW5hdGVzT3ZlcnJpZGVkID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBvblJlc2l6ZVZpZXdwb3J0KCkge1xyXG4gICAgICAgIGNvbnN0IHZpZXdwb3J0ID0gdGhpcy5zY3JvbGxWaWV3cG9ydD8ubmF0aXZlRWxlbWVudDtcclxuICAgICAgICBpZiAoISF2aWV3cG9ydCkge1xyXG4gICAgICAgICAgICBjb25zdCBpc1ZlcnRpY2FsID0gdGhpcy5fJGlzVmVydGljYWwuZ2V0VmFsdWUoKSxcclxuICAgICAgICAgICAgICAgIHN0YXJ0T2Zmc2V0ID0gdGhpcy5fJHN0YXJ0T2Zmc2V0LmdldFZhbHVlKCksXHJcbiAgICAgICAgICAgICAgICBlbmRPZmZzZXQgPSB0aGlzLl8kZW5kT2Zmc2V0LmdldFZhbHVlKCksXHJcbiAgICAgICAgICAgICAgICB3ID0gdmlld3BvcnQub2Zmc2V0V2lkdGgsXHJcbiAgICAgICAgICAgICAgICBoID0gdmlld3BvcnQub2Zmc2V0SGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgd2lkdGggPSBpc1ZlcnRpY2FsID8gdyA6ICh3IC0gc3RhcnRPZmZzZXQgLSBlbmRPZmZzZXQpLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0ID0gaXNWZXJ0aWNhbCA/IChoIC0gc3RhcnRPZmZzZXQgLSBlbmRPZmZzZXQpIDogaCxcclxuICAgICAgICAgICAgICAgIGJvdW5kcyA9IHRoaXMuXyR2aWV3cG9ydEJvdW5kcy5nZXRWYWx1ZSgpO1xyXG4gICAgICAgICAgICBpZiAoYm91bmRzLndpZHRoID09PSB3aWR0aCAmJiBib3VuZHMuaGVpZ2h0ID09PSBoZWlnaHQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl8kdmlld3BvcnRCb3VuZHMubmV4dCh7IHdpZHRoLCBoZWlnaHQgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBvblJlc2l6ZUNvbnRlbnQodmFsdWU6IG51bWJlciB8IG51bGwgPSBudWxsKSB7XHJcbiAgICAgICAgY29uc3QgY29udGVudCA9IHRoaXMuc2Nyb2xsQ29udGVudD8ubmF0aXZlRWxlbWVudDtcclxuICAgICAgICBpZiAoISFjb250ZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLl8kaXNWZXJ0aWNhbC5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICAgICAgc3RhcnRPZmZzZXQgPSB0aGlzLl8kc3RhcnRPZmZzZXQuZ2V0VmFsdWUoKSxcclxuICAgICAgICAgICAgICAgIHcgPSBjb250ZW50Lm9mZnNldFdpZHRoLFxyXG4gICAgICAgICAgICAgICAgaCA9IGNvbnRlbnQub2Zmc2V0SGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgd2lkdGggPSBpc1ZlcnRpY2FsID8gdyA6IHZhbHVlID8/ICh3IC0gc3RhcnRPZmZzZXQpLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0ID0gaXNWZXJ0aWNhbCA/IHZhbHVlID8/IChoIC0gc3RhcnRPZmZzZXQpIDogaCxcclxuICAgICAgICAgICAgICAgIGJvdW5kcyA9IHRoaXMuXyRjb250ZW50Qm91bmRzLmdldFZhbHVlKCk7XHJcbiAgICAgICAgICAgIGlmIChib3VuZHMud2lkdGggPT09IHdpZHRoICYmIGJvdW5kcy5oZWlnaHQgPT09IGhlaWdodCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuXyRjb250ZW50Qm91bmRzLm5leHQoeyB3aWR0aCwgaGVpZ2h0IH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSJdfQ==
|