ng-virtual-list 16.9.1 → 16.9.2
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/scroller/ng-scroller.component.mjs +9 -10
- package/esm2022/lib/ng-virtual-list.component.mjs +10 -23
- package/fesm2022/ng-virtual-list.mjs +17 -31
- package/fesm2022/ng-virtual-list.mjs.map +1 -1
- package/lib/components/scroller/ng-scroller.component.d.ts +1 -0
- package/package.json +1 -1
|
@@ -409,7 +409,6 @@ export class NgScrollerComponent {
|
|
|
409
409
|
}
|
|
410
410
|
stopScrolling() {
|
|
411
411
|
cancelAnimationFrame(this._animationId);
|
|
412
|
-
cancelAnimationFrame(this._animationId1);
|
|
413
412
|
}
|
|
414
413
|
move(isVertical, position, blending = false, userAction = false) {
|
|
415
414
|
this.scrollTo({ [isVertical ? TOP : LEFT]: position, behavior: INSTANT, blending, userAction });
|
|
@@ -461,7 +460,6 @@ export class NgScrollerComponent {
|
|
|
461
460
|
prevPos = currentValue;
|
|
462
461
|
const scrollContent = this.scrollContent?.nativeElement;
|
|
463
462
|
if (!!scrollContent) {
|
|
464
|
-
cancelAnimationFrame(this._animationId1);
|
|
465
463
|
if (isVertical) {
|
|
466
464
|
this.y = currentValue;
|
|
467
465
|
scrollContent.style.transform = `translate3d(0, ${-currentValue}px, 0)`;
|
|
@@ -493,7 +491,7 @@ export class NgScrollerComponent {
|
|
|
493
491
|
this._$updateScrollBar.next();
|
|
494
492
|
}
|
|
495
493
|
scrollTo(params) {
|
|
496
|
-
const posX = params.x || params.left || 0, posY = params.y || params.top || 0, userAction = params.userAction ?? false, x = posX, y = posY, behavior = params.behavior ?? INSTANT, blending = params.blending ?? true, scrollContent = this.scrollContent?.nativeElement, isVertical = this._$direction.getValue() === ScrollerDirection.VERTICAL;
|
|
494
|
+
const posX = params.x || params.left || 0, posY = params.y || params.top || 0, userAction = params.userAction ?? false, x = posX, y = posY, behavior = params.behavior ?? INSTANT, blending = params.blending ?? true, fireUpdate = params.fireUpdate ?? true, scrollContent = this.scrollContent?.nativeElement, isVertical = this._$direction.getValue() === ScrollerDirection.VERTICAL;
|
|
497
495
|
if (this._isMoving) {
|
|
498
496
|
if (isVertical) {
|
|
499
497
|
if (y < 0 || y > this.scrollHeight) {
|
|
@@ -531,7 +529,9 @@ export class NgScrollerComponent {
|
|
|
531
529
|
if (this.cdkScrollable) {
|
|
532
530
|
this.cdkScrollable.getElementRef().nativeElement.dispatchEvent(SCROLL_EVENT);
|
|
533
531
|
}
|
|
534
|
-
|
|
532
|
+
if (fireUpdate) {
|
|
533
|
+
this.fireScrollEvent(userAction);
|
|
534
|
+
}
|
|
535
535
|
}
|
|
536
536
|
}
|
|
537
537
|
else {
|
|
@@ -543,16 +543,15 @@ export class NgScrollerComponent {
|
|
|
543
543
|
if (this.cdkScrollable) {
|
|
544
544
|
this.cdkScrollable.getElementRef().nativeElement.dispatchEvent(SCROLL_EVENT);
|
|
545
545
|
}
|
|
546
|
-
|
|
546
|
+
if (fireUpdate) {
|
|
547
|
+
this.fireScrollEvent(userAction);
|
|
548
|
+
}
|
|
547
549
|
}
|
|
548
550
|
}
|
|
549
551
|
}
|
|
550
552
|
}
|
|
551
553
|
fireScrollEvent(userAction) {
|
|
552
|
-
|
|
553
|
-
this._animationId1 = requestAnimationFrame(() => {
|
|
554
|
-
this._$scroll.next(userAction);
|
|
555
|
-
});
|
|
554
|
+
this._$scroll.next(userAction);
|
|
556
555
|
}
|
|
557
556
|
reset() {
|
|
558
557
|
if (this.scrollBar) {
|
|
@@ -622,4 +621,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
622
621
|
}], scrollbarMinSize: [{
|
|
623
622
|
type: Input
|
|
624
623
|
}] } });
|
|
625
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctc2Nyb2xsZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvY29tcG9uZW50cy9zY3JvbGxlci9uZy1zY3JvbGxlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9jb21wb25lbnRzL3Njcm9sbGVyL25nLXNjcm9sbGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFhLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFJLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUM1QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBSXBDLE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRWhGLE9BQU8sRUFDTCwwQkFBMEIsRUFDMUIsV0FBVyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSx5QkFBeUIsRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLFVB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dEQsY0FBYztzQkFEYixTQUFTO3VCQUFDLGdCQUFnQjtnQkFVdkIsU0FBUztzQkFEWixLQUFLO2dCQVVGLGNBQWM7c0JBRGpCLEtBQUs7Z0JBVUYsT0FBTztzQkFEVixLQUFLO2dCQVVGLE9BQU87c0JBRFYsS0FBSztnQkFVRixXQUFXO3NCQURkLEtBQUs7Z0JBVUYsU0FBUztzQkFEWixLQUFLO2dCQVVGLGNBQWM7c0JBRGpCLEtBQUs7Z0JBVUYsZ0JBQWdCO3NCQURuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uRGVzdHJveSwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcclxuaW1wb3J0IHsgQ2RrU2Nyb2xsYWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGRlYm91bmNlVGltZSwgZmlsdGVyLCBmcm9tRXZlbnQsIG1hcCwgb2YsIHJhY2UsIFN1YmplY3QsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgU2Nyb2xsZXJEaXJlY3Rpb24gfSBmcm9tICcuL2VudW1zJztcclxuaW1wb3J0IHsgU2Nyb2xsQm94IH0gZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCB7IFNjcm9sbGVyRGlyZWN0aW9ucyB9IGZyb20gJy4vZW51bXMnO1xyXG5pbXBvcnQgeyBJZCwgSVNpemUsIFNjcm9sbEJhclRoZW1lIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xyXG5pbXBvcnQgeyBFYXNpbmcgfSBmcm9tICcuL3R5cGVzJztcclxuaW1wb3J0IHsgZWFzZUxpbmVhciwgZWFzZU91dFF1YWQgfSBmcm9tICcuL3V0aWxzL2Vhc2UnO1xyXG5pbXBvcnQgeyBOZ1Njcm9sbEJhckNvbXBvbmVudCB9IGZyb20gXCIuLi9uZy1zY3JvbGwtYmFyL25nLXNjcm9sbC1iYXIuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IEdyYWRpZW50Q29sb3JQb3NpdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcy9ncmFkaWVudC1jb2xvci1wb3NpdGlvbnMnO1xyXG5pbXBvcnQge1xyXG4gIERFRkFVTFRfU0NST0xMQkFSX01JTl9TSVpFLFxyXG4gIElOVEVSQUNUSVZFLCBNT1VTRV9ET1dOLCBNT1VTRV9NT1ZFLCBNT1VTRV9VUCwgU0NST0xMRVJfU0NST0xMLCBTQ1JPTExFUl9TQ1JPTExCQVJfU0NST0xMLCBTQ1JPTExFUl9XSEVFTCwgVE9VQ0hfRU5ELCBUT1VDSF9NT1ZFLFxyXG4gIFRPVUNIX1NUQVJULCBXSEVFTCxcclxufSBmcm9tICcuLi8uLi9jb25zdCc7XHJcbmltcG9ydCB7IFRleHREaXJlY3Rpb24sIFRleHREaXJlY3Rpb25zIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xyXG5pbXBvcnQgeyBOZ1ZpcnR1YWxMaXN0U2VydmljZSB9IGZyb20gJy4uLy4uL25nLXZpcnR1YWwtbGlzdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERlc3Ryb3lSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmNvbnN0IFRPUCA9ICd0b3AnLFxyXG4gIExFRlQgPSAnbGVmdCcsXHJcbiAgSU5TVEFOVCA9ICdpbnN0YW50JyxcclxuICBBVVRPID0gJ2F1dG8nLFxyXG4gIFNNT09USCA9ICdzbW9vdGgnLFxyXG4gIFZFUlRJQ0FMID0gJ3ZlcnRpY2FsJyxcclxuICBEVVJBVElPTiA9IDIwMDAsXHJcbiAgRlJJQ1RJT05fRk9SQ0UgPSAuMDM1LFxyXG4gIE1BWF9EVVJBVElPTiA9IDQwMDAsXHJcbiAgQU5JTUFUSU9OX0RVUkFUSU9OID0gMjAwLFxyXG4gIE1BU1MgPSAuMDA1LFxyXG4gIE1BWF9ESVNUID0gMTI1MDAsXHJcbiAgTUlOX1RJTUVTVEFNUCA9IDIwLFxyXG4gIE1BWF9WRUxPQ0lUWV9USU1FU1RBTVAgPSAxMDAsXHJcbiAgTUlOX0FOSU1BVEVEX1ZBTFVFID0gMTAsXHJcbiAgU1BFRURfU0NBTEUgPSA1O1xyXG5cclxuY29uc3QgZ2V0U3RhcnRUaW1lID0gKCkgPT4geyByZXR1cm4gcGVyZm9ybWFuY2Uubm93KCk7IH1cclxuXHJcbmNvbnN0IGNhbGN1bGF0ZURpcmVjdGlvbiA9IChidWZmZXI6IEFycmF5PFtudW1iZXIsIG51bWJlcl0+KSA9PiB7XHJcbiAgZm9yIChsZXQgaSA9IGJ1ZmZlci5sZW5ndGggLSAxLCBsID0gMDsgaSA+PSBsOyBpLS0pIHtcclxuICAgIGNvbnN0IHYgPSBidWZmZXJbaV07XHJcbiAgICBpZiAodlswXSA9PT0gMCkge1xyXG4gICAgICBjb250aW51ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBNYXRoLnNpZ24odlswXSk7XHJcbiAgfVxyXG4gIHJldHVybiAxO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElTY3JvbGxUb1BhcmFtcyB7XHJcbiAgeD86IG51bWJlcjtcclxuICB5PzogbnVtYmVyO1xyXG4gIGxlZnQ/OiBudW1iZXI7XHJcbiAgdG9wPzogbnVtYmVyO1xyXG4gIGJsZW5kaW5nPzogYm9vbGVhbjtcclxuICBiZWhhdmlvcj86IFwiYXV0b1wiIHwgXCJpbnN0YW50XCIgfCBcInNtb290aFwiIHwgc3RyaW5nO1xyXG4gIHVzZXJBY3Rpb24/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgU0NST0xMX0VWRU5UID0gbmV3IEV2ZW50KFNDUk9MTEVSX1NDUk9MTCksXHJcbiAgV0hFRUxfRVZFTlQgPSBuZXcgRXZlbnQoU0NST0xMRVJfV0hFRUwpLFxyXG4gIFNDUk9MTEJBUl9TQ1JPTExfRVZFTlQgPSBuZXcgRXZlbnQoU0NST0xMRVJfU0NST0xMQkFSX1NDUk9MTCk7XHJcblxyXG4vKipcclxuICogVGhlIHNjcm9sbGVyIGZvciB0aGUgTmdWaXJ0dWFsTGlzdCBpdGVtIGNvbXBvbmVudFxyXG4gKiBNYXhpbXVtIHBlcmZvcm1hbmNlIGZvciBleHRyZW1lbHkgbGFyZ2UgbGlzdHMuXHJcbiAqIEl0IGlzIGJhc2VkIG9uIGFsZ29yaXRobXMgZm9yIHZpcnR1YWxpemF0aW9uIG9mIHNjcmVlbiBvYmplY3RzLlxyXG4gKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vRGpvbm55WC9uZy12aXJ0dWFsLWxpc3QvYmxvYi8xNi54L3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL2NvbXBvbmVudHMvc2Nyb2xsZXIvbmctc2Nyb2xsZXIuY29tcG9uZW50LnRzXHJcbiAqIEBhdXRob3IgRXZnZW5paSBBbGV4YW5kcm92aWNoIEdyZWJlbm5pa292XHJcbiAqIEBlbWFpbCBkam9ubnl4QGdtYWlsLmNvbVxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICduZy1zY3JvbGxlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL25nLXNjcm9sbGVyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9uZy1zY3JvbGxlci5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmdTY3JvbGxlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgQFZpZXdDaGlsZCgnc2Nyb2xsQ29udGVudCcpXHJcbiAgc2Nyb2xsQ29udGVudDogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4gfCB1bmRlZmluZWQ7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3Njcm9sbFZpZXdwb3J0JywgeyByZWFkOiBDZGtTY3JvbGxhYmxlIH0pXHJcbiAgY2RrU2Nyb2xsYWJsZTogQ2RrU2Nyb2xsYWJsZSB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQFZpZXdDaGlsZCgnc2Nyb2xsQmFyJywgeyByZWFkOiBOZ1Njcm9sbEJhckNvbXBvbmVudCB9KVxyXG4gIHNjcm9sbEJhcjogTmdTY3JvbGxCYXJDb21wb25lbnQgfCB1bmRlZmluZWQ7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3Njcm9sbFZpZXdwb3J0JylcclxuICBzY3JvbGxWaWV3cG9ydDogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4gfCB1bmRlZmluZWQ7XHJcblxyXG4gIHByaXZhdGUgXyR2aWV3SW5pdGlhbGl6ZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICByZWFkb25seSAkdmlld0luaXRpYWxpemVkID0gdGhpcy5fJHZpZXdJbml0aWFsaXplZC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGRpcmVjdGlvbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2Nyb2xsZXJEaXJlY3Rpb25zPihTY3JvbGxlckRpcmVjdGlvbi5WRVJUSUNBTCk7XHJcbiAgcmVhZG9ubHkgJGRpcmVjdGlvbiA9IHRoaXMuXyRkaXJlY3Rpb24uYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGRpcmVjdGlvbih2OiBTY3JvbGxlckRpcmVjdGlvbnMpIHtcclxuICAgIHRoaXMuXyRkaXJlY3Rpb24ubmV4dCh2KTtcclxuICB9XHJcbiAgZ2V0IGRpcmVjdGlvbigpIHsgcmV0dXJuIHRoaXMuXyRkaXJlY3Rpb24uZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kZm9jdXNlZEVsZW1lbnQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElkIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG4gIHJlYWRvbmx5ICRmb2N1c2VkRWxlbWVudCA9IHRoaXMuXyRmb2N1c2VkRWxlbWVudC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgZm9jdXNlZEVsZW1lbnQodjogSWQgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuXyRmb2N1c2VkRWxlbWVudC5uZXh0KHYpO1xyXG4gIH1cclxuICBnZXQgZm9jdXNlZEVsZW1lbnQoKSB7IHJldHVybiB0aGlzLl8kZm9jdXNlZEVsZW1lbnQuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kbG9hZGluZyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHJlYWRvbmx5ICRsb2FkaW5nID0gdGhpcy5fJGxvYWRpbmcuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGxvYWRpbmcodjogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fJGxvYWRpbmcubmV4dCh2KTtcclxuICB9XHJcbiAgZ2V0IGxvYWRpbmcoKSB7IHJldHVybiB0aGlzLl8kbG9hZGluZy5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRjbGFzc2VzID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7IFtjTmFtZTogc3RyaW5nXTogYm9vbGVhbiB9Pih7fSk7XHJcbiAgcmVhZG9ubHkgJGNsYXNzZXMgPSB0aGlzLl8kY2xhc3Nlcy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgY2xhc3Nlcyh2OiB7IFtjTmFtZTogc3RyaW5nXTogYm9vbGVhbiB9KSB7XHJcbiAgICB0aGlzLl8kY2xhc3Nlcy5uZXh0KHYpO1xyXG4gIH1cclxuICBnZXQgY2xhc3NlcygpIHsgcmV0dXJuIHRoaXMuXyRjbGFzc2VzLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHN0YXJ0T2Zmc2V0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xyXG4gIHJlYWRvbmx5ICRzdGFydE9mZnNldCA9IHRoaXMuXyRzdGFydE9mZnNldC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgc3RhcnRPZmZzZXQodjogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl8kc3RhcnRPZmZzZXQubmV4dCh2KTtcclxuICB9XHJcbiAgZ2V0IHN0YXJ0T2Zmc2V0KCkgeyByZXR1cm4gdGhpcy5fJHN0YXJ0T2Zmc2V0LmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGVuZE9mZnNldCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuICByZWFkb25seSAkZW5kT2Zmc2V0ID0gdGhpcy5fJGVuZE9mZnNldC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgZW5kT2Zmc2V0KHY6IG51bWJlcikge1xyXG4gICAgdGhpcy5fJGVuZE9mZnNldC5uZXh0KHYpO1xyXG4gIH1cclxuICBnZXQgZW5kT2Zmc2V0KCkgeyByZXR1cm4gdGhpcy5fJGVuZE9mZnNldC5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxiYXJUaGVtZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2Nyb2xsQmFyVGhlbWUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XHJcbiAgcmVhZG9ubHkgJHNjcm9sbGJhclRoZW1lID0gdGhpcy5fJHNjcm9sbGJhclRoZW1lLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBzY3JvbGxiYXJUaGVtZSh2OiBTY3JvbGxCYXJUaGVtZSB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fJHNjcm9sbGJhclRoZW1lLm5leHQodik7XHJcbiAgfVxyXG4gIGdldCBzY3JvbGxiYXJUaGVtZSgpIHsgcmV0dXJuIHRoaXMuXyRzY3JvbGxiYXJUaGVtZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxiYXJNaW5TaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KERFRkFVTFRfU0NST0xMQkFSX01JTl9TSVpFKTtcclxuICByZWFkb25seSAkc2Nyb2xsYmFyTWluU2l6ZSA9IHRoaXMuXyRzY3JvbGxiYXJNaW5TaXplLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBzY3JvbGxiYXJNaW5TaXplKHY6IG51bWJlcikge1xyXG4gICAgdGhpcy5fJHNjcm9sbGJhck1pblNpemUubmV4dCh2KTtcclxuICB9XHJcbiAgZ2V0IHNjcm9sbGJhck1pblNpemUoKSB7IHJldHVybiB0aGlzLl8kc2Nyb2xsYmFyTWluU2l6ZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRhY3R1YWxDbGFzc2VzID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7IFtjTmFtZTogc3RyaW5nXTogYm9vbGVhbiB9Pih7fSk7XHJcbiAgcmVhZG9ubHkgJGFjdHVhbENsYXNzZXMgPSB0aGlzLl8kYWN0dWFsQ2xhc3Nlcy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGNvbnRhaW5lckNsYXNzZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHsgW2NOYW1lOiBzdHJpbmddOiBib29sZWFuIH0+KHt9KTtcclxuICByZWFkb25seSAkY29udGFpbmVyQ2xhc3NlcyA9IHRoaXMuXyRjb250YWluZXJDbGFzc2VzLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kaXNWZXJ0aWNhbCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XHJcbiAgcmVhZG9ubHkgJGlzVmVydGljYWwgPSB0aGlzLl8kaXNWZXJ0aWNhbC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHRodW1iR3JhZGllbnRQb3NpdGlvbnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEdyYWRpZW50Q29sb3JQb3NpdGlvbnM+KFswLCAwXSk7XHJcbiAgcmVhZG9ubHkgJHRodW1iR3JhZGllbnRQb3NpdGlvbnMgPSB0aGlzLl8kdGh1bWJHcmFkaWVudFBvc2l0aW9ucy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHRodW1iU2l6ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuICByZWFkb25seSAkdGh1bWJTaXplID0gdGhpcy5fJHRodW1iU2l6ZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHRodW1iUG9zaXRpb24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XHJcbiAgcmVhZG9ubHkgJHRodW1iUG9zaXRpb24gPSB0aGlzLl8kdGh1bWJQb3NpdGlvbi5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHRodW1iU2hvdyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHJlYWRvbmx5ICR0aHVtYlNob3cgPSB0aGlzLl8kdGh1bWJTaG93LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kcHJlcGFyZWRTaWduYWwgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICByZWFkb25seSAkcHJlcGFyZWRTaWduYWwgPSB0aGlzLl8kcHJlcGFyZWRTaWduYWwuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRncmFiYmluZyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHJlYWRvbmx5ICRncmFiYmluZyA9IHRoaXMuXyRncmFiYmluZy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGxhbmdUZXh0RGlyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUZXh0RGlyZWN0aW9uPihUZXh0RGlyZWN0aW9ucy5MVFIpO1xyXG4gIHJlYWRvbmx5ICRsYW5nVGV4dERpciA9IHRoaXMuXyRsYW5nVGV4dERpci5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHVwZGF0ZVNjcm9sbEJhciA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgcHJvdGVjdGVkICR1cGRhdGVTY3JvbGxCYXIgPSB0aGlzLl8kdXBkYXRlU2Nyb2xsQmFyLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICByZWFkb25seSAkc2Nyb2xsID0gdGhpcy5fJHNjcm9sbC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbEVuZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcbiAgcmVhZG9ubHkgJHNjcm9sbEVuZCA9IHRoaXMuXyRzY3JvbGxFbmQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3Njcm9sbEJveCA9IG5ldyBTY3JvbGxCb3goKTtcclxuXHJcbiAgZ2V0IHNjcm9sbGFibGUoKSB7XHJcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHRoaXMuXyR2aWV3cG9ydEJvdW5kcy5nZXRWYWx1ZSgpLFxyXG4gICAgICBpc1ZlcnRpY2FsID0gdGhpcy5fJGlzVmVydGljYWwuZ2V0VmFsdWUoKSxcclxuICAgICAgdmlld3BvcnRTaXplID0gaXNWZXJ0aWNhbCA/IGhlaWdodCA6IHdpZHRoLFxyXG4gICAgICB0b3RhbFNpemUgPSB0aGlzLl90b3RhbFNpemU7XHJcbiAgICByZXR1cm4gdG90YWxTaXplID4gdmlld3BvcnRTaXplO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGhvc3QoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zY3JvbGxWaWV3cG9ydD8ubmF0aXZlRWxlbWVudDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3ByZXBhcmVkID0gZmFsc2U7XHJcbiAgc2V0IHByZXBhcmVkKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl9wcmVwYXJlZCAhPT0gdikge1xyXG4gICAgICB0aGlzLl9wcmVwYXJlZCA9IHY7XHJcbiAgICAgIHRoaXMuXyRwcmVwYXJlZFNpZ25hbC5uZXh0KHYpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNNb3ZpbmcgPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfeDogbnVtYmVyID0gMDtcclxuICBzZXQgeCh2OiBudW1iZXIpIHtcclxuICAgIHRoaXMuX3ggPSB0aGlzLl9hY3R1YWxYID0gdjtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZVNjcm9sbEJhcigpO1xyXG4gIH1cclxuICBnZXQgeCgpIHsgcmV0dXJuIHRoaXMuX3g7IH1cclxuXHJcbiAgcHJpdmF0ZSBfeTogbnVtYmVyID0gMDtcclxuICBzZXQgeSh2OiBudW1iZXIpIHtcclxuICAgIHRoaXMuX3kgPSB0aGlzLl9hY3R1YWxZID0gdjtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZVNjcm9sbEJhcigpO1xyXG4gIH1cclxuICBnZXQgeSgpIHsgcmV0dXJuIHRoaXMuX3k7IH1cclxuXHJcbiAgcHJpdmF0ZSBfdG90YWxTaXplOiBudW1iZXIgPSAwO1xyXG4gIHNldCB0b3RhbFNpemUodjogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl90b3RhbFNpemUgPSB2O1xyXG4gIH1cclxuXHJcbiAgZ2V0IGFjdHVhbFNjcm9sbEhlaWdodCgpIHtcclxuICAgIGNvbnN0IHsgaGVpZ2h0OiB2aWV3cG9ydEhlaWdodCB9ID0gdGhpcy5fJHZpZXdwb3J0Qm91bmRzLmdldFZhbHVlKCksXHJcbiAgICAgIHRvdGFsU2l6ZSA9IHRoaXMuX3RvdGFsU2l6ZSxcclxuICAgICAgaXNWZXJ0aWNhbCA9IHRoaXMuXyRkaXJlY3Rpb24uZ2V0VmFsdWUoKSA9PT0gVkVSVElDQUw7XHJcbiAgICByZXR1cm4gaXNWZXJ0aWNhbCA/IHRvdGFsU2l6ZSA8IHZpZXdwb3J0SGVpZ2h0ID8gMCA6IHRvdGFsU2l6ZSAtIHZpZXdwb3J0SGVpZ2h0IDogdGhpcy5zY3JvbGxIZWlnaHQ7XHJcbiAgfVxyXG5cclxuICBnZXQgYWN0dWFsU2Nyb2xsV2lkdGgoKSB7XHJcbiAgICBjb25zdCB7IHdpZHRoOiB2aWV3cG9ydFdpZHRoIH0gPSB0aGlzLl8kdmlld3BvcnRCb3VuZHMuZ2V0VmFsdWUoKSxcclxuICAgICAgdG90YWxTaXplID0gdGhpcy5fdG90YWxTaXplLFxyXG4gICAgICBpc1ZlcnRpY2FsID0gdGhpcy5fJGRpcmVjdGlvbi5nZXRWYWx1ZSgpID09PSBWRVJUSUNBTDtcclxuICAgIHJldHVybiBpc1ZlcnRpY2FsID8gdGhpcy5zY3JvbGxXaWR0aCA6IHRvdGFsU2l6ZSA8IHZpZXdwb3J0V2lkdGggPyAwIDogdG90YWxTaXplIC0gdmlld3BvcnRXaWR0aDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2FjdHVhbFg6IG51bWJlciA9IDA7XHJcbiAgZ2V0IGFjdHVhbFNjcm9sbExlZnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYWN0dWFsWDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2FjdHVhbFk6IG51bWJlciA9IDA7XHJcbiAgZ2V0IGFjdHVhbFNjcm9sbFRvcCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9hY3R1YWxZO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNjcm9sbExlZnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5feDtcclxuICB9XHJcblxyXG4gIGdldCBzY3JvbGxUb3AoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5feTtcclxuICB9XHJcblxyXG4gIGdldCBzY3JvbGxXaWR0aCgpIHtcclxuICAgIGNvbnN0IHsgd2lkdGg6IHZpZXdwb3J0V2lkdGggfSA9IHRoaXMuXyR2aWV3cG9ydEJvdW5kcy5nZXRWYWx1ZSgpLFxyXG4gICAgICBhY3R1YWxWaWV3cG9ydFdpZHRoID0gdmlld3BvcnRXaWR0aCxcclxuICAgICAgeyB3aWR0aDogY29udGVudFdpZHRoIH0gPSB0aGlzLl8kY29udGVudEJvdW5kcy5nZXRWYWx1ZSgpO1xyXG4gICAgcmV0dXJuIGNvbnRlbnRXaWR0aCA8IGFjdHVhbFZpZXdwb3J0V2lkdGggPyAwIDogKGNvbnRlbnRXaWR0aCAtIGFjdHVhbFZpZXdwb3J0V2lkdGgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNjcm9sbEhlaWdodCgpIHtcclxuICAgIGNvbnN0IHsgaGVpZ2h0OiB2aWV3cG9ydEhlaWdodCB9ID0gdGhpcy5fJHZpZXdwb3J0Qm91bmRzLmdldFZhbHVlKCksXHJcbiAgICAgIGFjdHVhbFZpZXdwb3J0SGVpZ2h0ID0gdmlld3BvcnRIZWlnaHQsXHJcbiAgICAgIHsgaGVpZ2h0OiBjb250ZW50SGVpZ2h0IH0gPSB0aGlzLl8kY29udGVudEJvdW5kcy5nZXRWYWx1ZSgpO1xyXG4gICAgcmV0dXJuIGNvbnRlbnRIZWlnaHQgPCBhY3R1YWxWaWV3cG9ydEhlaWdodCA/IDAgOiAoY29udGVudEhlaWdodCAtIGFjdHVhbFZpZXdwb3J0SGVpZ2h0KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3ZlbG9jaXR5OiBudW1iZXIgPSAwO1xyXG5cclxuICBwcml2YXRlIF8kdmlld3BvcnRCb3VuZHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElTaXplPih7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfSk7XHJcbiAgcmVhZG9ubHkgJHZpZXdwb3J0Qm91bmRzID0gdGhpcy5fJHZpZXdwb3J0Qm91bmRzLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kY29udGVudEJvdW5kcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVNpemU+KHsgd2lkdGg6IDAsIGhlaWdodDogMCB9KTtcclxuICByZWFkb25seSAkY29udGVudEJvdW5kcyA9IHRoaXMuXyRjb250ZW50Qm91bmRzLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF92aWV3cG9ydFJlc2l6ZU9ic2VydmVyOiBSZXNpemVPYnNlcnZlcjtcclxuXHJcbiAgcHJpdmF0ZSBfb25SZXNpemVWaWV3cG9ydEhhbmRsZXIgPSAoKSA9PiB7XHJcbiAgICBjb25zdCB2aWV3cG9ydCA9IHRoaXMuc2Nyb2xsVmlld3BvcnQ/Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBpZiAodmlld3BvcnQpIHtcclxuICAgICAgdGhpcy5fJHZpZXdwb3J0Qm91bmRzLm5leHQoeyB3aWR0aDogdmlld3BvcnQub2Zmc2V0V2lkdGgsIGhlaWdodDogdmlld3BvcnQub2Zmc2V0SGVpZ2h0IH0pO1xyXG4gICAgICB0aGlzLnVwZGF0ZVNjcm9sbEJhcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY29udGVudFJlc2l6ZU9ic2VydmVyOiBSZXNpemVPYnNlcnZlcjtcclxuXHJcbiAgcHJpdmF0ZSBfb25SZXNpemVDb250ZW50SGFuZGxlciA9ICgpID0+IHtcclxuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLnNjcm9sbENvbnRlbnQ/Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBpZiAoY29udGVudCkge1xyXG4gICAgICB0aGlzLl8kY29udGVudEJvdW5kcy5uZXh0KHsgd2lkdGg6IGNvbnRlbnQub2Zmc2V0V2lkdGgsIGhlaWdodDogY29udGVudC5vZmZzZXRIZWlnaHQgfSk7XHJcbiAgICAgIHRoaXMudXBkYXRlU2Nyb2xsQmFyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91cGRhdGVTY3JvbGxCYXJJZDogbnVtYmVyIHwgdW5kZWZpbmVkO1xyXG4gIFxyXG4gIHByaXZhdGUgX2Rlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XHJcblxyXG4gIHByaXZhdGUgX2FuaW1hdGlvbklkOiBudW1iZXIgPSAtMTtcclxuXHJcbiAgcHJpdmF0ZSBfYW5pbWF0aW9uSWQxOiBudW1iZXIgPSAtMTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfc2VydmljZTogTmdWaXJ0dWFsTGlzdFNlcnZpY2UpIHtcclxuICAgIHRoaXMuX3NlcnZpY2UuJGxhbmdUZXh0RGlyLnBpcGUoXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl8kbGFuZ1RleHREaXIubmV4dCh2KTtcclxuICAgICAgfSlcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy5fdmlld3BvcnRSZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcih0aGlzLl9vblJlc2l6ZVZpZXdwb3J0SGFuZGxlcik7XHJcbiAgICB0aGlzLl9jb250ZW50UmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIodGhpcy5fb25SZXNpemVDb250ZW50SGFuZGxlcik7XHJcblxyXG4gICAgdGhpcy4kZGlyZWN0aW9uLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxyXG4gICAgICB0YXAoZGlyZWN0aW9uID0+IHtcclxuICAgICAgICB0aGlzLl8kaXNWZXJ0aWNhbC5uZXh0KGRpcmVjdGlvbiA9PT0gU2Nyb2xsZXJEaXJlY3Rpb24uVkVSVElDQUwpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJHZpZXdwb3J0ID0gdGhpcy4kdmlld0luaXRpYWxpemVkLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxyXG4gICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4gb2YodGhpcy5zY3JvbGxWaWV3cG9ydCkucGlwZShcclxuICAgICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICAgIG1hcCh2ID0+IHYhLm5hdGl2ZUVsZW1lbnQpLFxyXG4gICAgICApKSxcclxuICAgICksXHJcbiAgICAgICRjb250ZW50ID0gdGhpcy4kdmlld0luaXRpYWxpemVkLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXHJcbiAgICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gb2YodGhpcy5zY3JvbGxDb250ZW50KS5waXBlKFxyXG4gICAgICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgICAgIG1hcCh2ID0+IHYhLm5hdGl2ZUVsZW1lbnQpLFxyXG4gICAgICAgICkpLFxyXG4gICAgICApLFxyXG4gICAgICAkdXBkYXRlU2Nyb2xsQmFyID0gdGhpcy4kdXBkYXRlU2Nyb2xsQmFyO1xyXG5cclxuICAgIGNvbnN0IHVwZGF0ZVNjcm9sbEJhckhhbmRsZXIgPSAoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHRoaXMuXyRkaXJlY3Rpb24uZ2V0VmFsdWUoKSxcclxuICAgICAgICBpc1ZlcnRpY2FsID0gdGhpcy5fJGlzVmVydGljYWwuZ2V0VmFsdWUoKSxcclxuICAgICAgICBzdGFydE9mZnNldCA9IHRoaXMuXyRzdGFydE9mZnNldC5nZXRWYWx1ZSgpLFxyXG4gICAgICAgIGVuZE9mZnNldCA9IHRoaXMuXyRlbmRPZmZzZXQuZ2V0VmFsdWUoKSxcclxuICAgICAgICBzY3JvbGxDb250ZW50ID0gdGhpcy5zY3JvbGxDb250ZW50Py5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50LFxyXG4gICAgICAgIHNjcm9sbFZpZXdwb3J0ID0gdGhpcy5zY3JvbGxWaWV3cG9ydD8ubmF0aXZlRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICB0aHVtYlNpemUsXHJcbiAgICAgICAgICB0aHVtYlBvc2l0aW9uLFxyXG4gICAgICAgICAgdGh1bWJHcmFkaWVudFBvc2l0aW9ucyxcclxuICAgICAgICB9ID0gdGhpcy5fc2Nyb2xsQm94LmNhbGN1bGF0ZVNjcm9sbCh7XHJcbiAgICAgICAgICBkaXJlY3Rpb24sXHJcbiAgICAgICAgICB2aWV3cG9ydFdpZHRoOiBzY3JvbGxWaWV3cG9ydC5vZmZzZXRXaWR0aCwgdmlld3BvcnRIZWlnaHQ6IHNjcm9sbFZpZXdwb3J0Lm9mZnNldEhlaWdodCxcclxuICAgICAgICAgIGNvbnRlbnRXaWR0aDogc2Nyb2xsQ29udGVudC5vZmZzZXRXaWR0aCwgY29udGVudEhlaWdodDogc2Nyb2xsQ29udGVudC5vZmZzZXRIZWlnaHQsXHJcbiAgICAgICAgICBzdGFydE9mZnNldCxcclxuICAgICAgICAgIGVuZE9mZnNldCxcclxuICAgICAgICAgIHBvc2l0aW9uWDogdGhpcy5feCxcclxuICAgICAgICAgIHBvc2l0aW9uWTogdGhpcy5feSxcclxuICAgICAgICAgIG1pblNpemU6IHRoaXMuXyRzY3JvbGxiYXJNaW5TaXplLmdldFZhbHVlKCksXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLl8kdGh1bWJHcmFkaWVudFBvc2l0aW9ucy5uZXh0KHRodW1iR3JhZGllbnRQb3NpdGlvbnMpO1xyXG4gICAgICB0aGlzLl8kdGh1bWJTaXplLm5leHQodGh1bWJTaXplKTtcclxuICAgICAgdGhpcy5fJHRodW1iUG9zaXRpb24ubmV4dCh0aHVtYlBvc2l0aW9uKTtcclxuICAgICAgdGhpcy5fJHRodW1iU2hvdy5uZXh0KGlzVmVydGljYWwgPyB0aGlzLnNjcm9sbEhlaWdodCA+IDAgOiB0aGlzLnNjcm9sbFdpZHRoID4gMCk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHVwZGF0ZVNjcm9sbEJhclJBRkhhbmRsZXIgPSAodGltZTogRE9NSGlnaFJlc1RpbWVTdGFtcCkgPT4ge1xyXG4gICAgICB1cGRhdGVTY3JvbGxCYXJIYW5kbGVyKCk7XHJcbiAgICB9O1xyXG5cclxuICAgICR1cGRhdGVTY3JvbGxCYXIucGlwZShcclxuICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXHJcbiAgICAgIGRlYm91bmNlVGltZSgwKSxcclxuICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICBjb25zdCB1cGRhdGVTY3JvbGxCYXJJZCA9IHRoaXMuX3VwZGF0ZVNjcm9sbEJhcklkO1xyXG4gICAgICAgIGlmICh1cGRhdGVTY3JvbGxCYXJJZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh1cGRhdGVTY3JvbGxCYXJJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3VwZGF0ZVNjcm9sbEJhcklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHVwZGF0ZVNjcm9sbEJhclJBRkhhbmRsZXIpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJHZpZXdwb3J0LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxyXG4gICAgICB0YXAodmlld3BvcnQgPT4ge1xyXG4gICAgICAgIHRoaXMuX3ZpZXdwb3J0UmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh2aWV3cG9ydCk7XHJcbiAgICAgICAgdGhpcy5fb25SZXNpemVWaWV3cG9ydEhhbmRsZXIoKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRjb250ZW50LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxyXG4gICAgICB0YXAoY29udGVudCA9PiB7XHJcbiAgICAgICAgdGhpcy5fY29udGVudFJlc2l6ZU9ic2VydmVyLm9ic2VydmUoY29udGVudCk7XHJcbiAgICAgICAgdGhpcy5fb25SZXNpemVDb250ZW50SGFuZGxlcigpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGNvbnRlbnQucGlwZShcclxuICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXHJcbiAgICAgIHN3aXRjaE1hcChjb250ZW50ID0+IHtcclxuICAgICAgICByZXR1cm4gZnJvbUV2ZW50PFdoZWVsRXZlbnQ+KGNvbnRlbnQsIFdIRUVMLCB7IHBhc3NpdmU6IGZhbHNlIH0pLnBpcGUoXHJcbiAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZiksXHJcbiAgICAgICAgICB0YXAoZSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLl8kaXNWZXJ0aWNhbC5nZXRWYWx1ZSgpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jZGtTY3JvbGxhYmxlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jZGtTY3JvbGxhYmxlLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQoV0hFRUxfRVZFTlQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpc1ZlcnRpY2FsKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuX3kgPj0gMCAmJiB0aGlzLl95IDw9IHRoaXMuc2Nyb2xsSGVpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5feCA+PSAwICYmIHRoaXMuX3ggPD0gdGhpcy5zY3JvbGxXaWR0aCkge1xyXG4gICAgICAgICAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zdG9wU2Nyb2xsaW5nKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHNjcm9sbFNpemUgPSBpc1ZlcnRpY2FsID8gdGhpcy5zY3JvbGxIZWlnaHQgOiB0aGlzLnNjcm9sbFdpZHRoLFxyXG4gICAgICAgICAgICAgIHN0YXJ0UG9zID0gaXNWZXJ0aWNhbCA/IHRoaXMueSA6IHRoaXMueCxcclxuICAgICAgICAgICAgICBkZWx0YSA9IGlzVmVydGljYWwgPyBlLmRlbHRhWSA6IGUuZGVsdGFYLCBkcCA9IHN0YXJ0UG9zICsgZGVsdGEsIHBvc2l0aW9uID0gZHAgPCAwID8gMCA6IGRwID4gc2Nyb2xsU2l6ZSA/IHNjcm9sbFNpemUgOiBkcDtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxUbyh7IFtpc1ZlcnRpY2FsID8gVE9QIDogTEVGVF06IHBvc2l0aW9uLCBiZWhhdmlvcjogSU5TVEFOVCwgdXNlckFjdGlvbjogdHJ1ZSB9KTtcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb25zdCAkbW91c2VVcCA9IGZyb21FdmVudDxNb3VzZUV2ZW50Pih3aW5kb3csIE1PVVNFX1VQLCB7IHBhc3NpdmU6IGZhbHNlIH0pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxyXG4gICAgKSxcclxuICAgICAgJG1vdXNlRHJhZ0NhbmNlbCA9ICRtb3VzZVVwLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXHJcbiAgICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuX2lzTW92aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLl8kZ3JhYmJpbmcubmV4dChmYWxzZSk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICk7XHJcblxyXG4gICAgJGNvbnRlbnQucGlwZShcclxuICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXHJcbiAgICAgIHN3aXRjaE1hcChjb250ZW50ID0+IHtcclxuICAgICAgICByZXR1cm4gZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGNvbnRlbnQsIE1PVVNFX0RPV04sIHsgcGFzc2l2ZTogZmFsc2UgfSkucGlwZShcclxuICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSxcclxuICAgICAgICAgIHN3aXRjaE1hcChlID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2Nyb2xsQmFyKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zY3JvbGxCYXIuc3RvcFNjcm9sbGluZygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcFNjcm9sbGluZygpO1xyXG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgICAgaWYgKHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoSU5URVJBQ1RJVkUpKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgaXNWZXJ0aWNhbCA9IHRoaXMuXyRpc1ZlcnRpY2FsLmdldFZhbHVlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2lzTW92aW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5fJGdyYWJiaW5nLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0UG9zID0gaXNWZXJ0aWNhbCA/IHRoaXMueSA6IHRoaXMueDtcclxuICAgICAgICAgICAgbGV0IHByZXZQb3MgPSBzdGFydFBvcywgcHJldkNsaWVudFBvc2l0aW9uID0gMCwgc3RhcnRQb3NEZWx0YSA9IDA7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0Q2xpZW50UG9zID0gaXNWZXJ0aWNhbCA/IGUuY2xpZW50WSA6IGUuY2xpZW50WCxcclxuICAgICAgICAgICAgICBvZmZzZXRzID0gbmV3IEFycmF5PFtudW1iZXIsIG51bWJlcl0+KCksIHZlbG9jaXRpZXMgPSBuZXcgQXJyYXk8W251bWJlciwgbnVtYmVyXT4oKTtcclxuICAgICAgICAgICAgbGV0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiBmcm9tRXZlbnQ8TW91c2VFdmVudD4od2luZG93LCBNT1VTRV9NT1ZFLCB7IHBhc3NpdmU6IGZhbHNlIH0pLnBpcGUoXHJcbiAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpLFxyXG4gICAgICAgICAgICAgIHRha2VVbnRpbCgkbW91c2VEcmFnQ2FuY2VsKSxcclxuICAgICAgICAgICAgICB0YXAoZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgc3dpdGNoTWFwKGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY1BvcyA9IGlzVmVydGljYWwgPyB0aGlzLnkgOiB0aGlzLng7XHJcbiAgICAgICAgICAgICAgICBpZiAoY1BvcyAhPT0gcHJldlBvcykge1xyXG4gICAgICAgICAgICAgICAgICBzdGFydFBvc0RlbHRhICs9IGNQb3MgLSBwcmV2UG9zO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFBvcyA9IGlzVmVydGljYWwgPyBlLmNsaWVudFkgOiBlLmNsaWVudFgsXHJcbiAgICAgICAgICAgICAgICAgIHNjcm9sbFNpemUgPSBpc1ZlcnRpY2FsID8gdGhpcy5zY3JvbGxIZWlnaHQgOiB0aGlzLnNjcm9sbFdpZHRoLCBkZWx0YSA9IHN0YXJ0Q2xpZW50UG9zIC0gY3VycmVudFBvcyxcclxuICAgICAgICAgICAgICAgICAgZHAgPSBzdGFydFBvcyArIHN0YXJ0UG9zRGVsdGEgKyBkZWx0YSwgcG9zaXRpb24gPSBNYXRoLnJvdW5kKGRwIDwgMCA/IDAgOiBkcCA+IHNjcm9sbFNpemUgPyBzY3JvbGxTaXplIDogZHApLCBlbmRUaW1lID0gRGF0ZS5ub3coKSxcclxuICAgICAgICAgICAgICAgICAgdGltZXN0YW1wID0gZW5kVGltZSAtIHN0YXJ0VGltZSwgc2Nyb2xsRGVsdGEgPSBwcmV2Q2xpZW50UG9zaXRpb24gPT09IDAgPyAwIDogcHJldkNsaWVudFBvc2l0aW9uIC0gY3VycmVudFBvcyxcclxuICAgICAgICAgICAgICAgICAgeyB2MCB9ID0gdGhpcy5jYWxjdWxhdGVWZWxvY2l0eShvZmZzZXRzLCBzY3JvbGxEZWx0YSwgdGltZXN0YW1wKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlQWNjZWxlcmF0aW9uKHZlbG9jaXRpZXMsIHYwLCB0aW1lc3RhbXApO1xyXG4gICAgICAgICAgICAgICAgcHJldkNsaWVudFBvc2l0aW9uID0gY3VycmVudFBvcztcclxuICAgICAgICAgICAgICAgIHByZXZQb3MgPSBwb3NpdGlvbjtcclxuICAgICAgICAgICAgICAgIHRoaXMubW92ZShpc1ZlcnRpY2FsLCBwb3NpdGlvbiwgZmFsc2UsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgc3RhcnRUaW1lID0gZW5kVGltZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByYWNlKFtmcm9tRXZlbnQ8TW91c2VFdmVudD4od2luZG93LCBNT1VTRV9VUCwgeyBwYXNzaXZlOiBmYWxzZSB9KSwgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGNvbnRlbnQsIE1PVVNFX1VQLCB7IHBhc3NpdmU6IGZhbHNlIH0pXSkucGlwZShcclxuICAgICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpLFxyXG4gICAgICAgICAgICAgICAgICB0YXAoZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZFRpbWUgPSBEYXRlLm5vdygpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wID0gZW5kVGltZSAtIHN0YXJ0VGltZSxcclxuICAgICAgICAgICAgICAgICAgICAgIHsgdjAgfSA9IHRoaXMuY2FsY3VsYXRlVmVsb2NpdHkob2Zmc2V0cywgc2Nyb2xsRGVsdGEsIHRpbWVzdGFtcCksXHJcbiAgICAgICAgICAgICAgICAgICAgICB7IGEwIH0gPSB0aGlzLmNhbGN1bGF0ZUFjY2VsZXJhdGlvbih2ZWxvY2l0aWVzLCB2MCwgdGltZXN0YW1wKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pc01vdmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuXyRncmFiYmluZy5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vdmVXaXRoQWNjZWxlcmF0aW9uKGlzVmVydGljYWwsIHBvc2l0aW9uLCAwLCB2MCwgYTApO1xyXG4gICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb25zdCAkdG91Y2hVcCA9IGZyb21FdmVudDxUb3VjaEV2ZW50Pih3aW5kb3csIFRPVUNIX0VORCwgeyBwYXNzaXZlOiBmYWxzZSB9KS5waXBlKFxyXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICksXHJcbiAgICAgICR0b3VjaENhbmNlbGVyID0gJHRvdWNoVXAucGlwZShcclxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5faXNNb3ZpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuXyRncmFiYmluZy5uZXh0KGZhbHNlKTtcclxuICAgICAgICB9KSxcclxuICAgICAgKTtcclxuXHJcbiAgICAkY29udGVudC5waXBlKFxyXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICAgc3dpdGNoTWFwKGNvbnRlbnQgPT4ge1xyXG4gICAgICAgIHJldHVybiBmcm9tRXZlbnQ8VG91Y2hFdmVudD4oY29udGVudCwgVE9VQ0hfU1RBUlQsIHsgcGFzc2l2ZTogZmFsc2UgfSkucGlwZShcclxuICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSxcclxuICAgICAgICAgIHN3aXRjaE1hcChlID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2Nyb2xsQmFyKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zY3JvbGxCYXIuc3RvcFNjcm9sbGluZygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcFNjcm9sbGluZygpO1xyXG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgICAgaWYgKHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoSU5URVJBQ1RJVkUpKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgaXNWZXJ0aWNhbCA9IHRoaXMuXyRpc1ZlcnRpY2FsLmdldFZhbHVlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2lzTW92aW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5fJGdyYWJiaW5nLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0UG9zID0gaXNWZXJ0aWNhbCA/IHRoaXMueSA6IHRoaXMueDtcclxuICAgICAgICAgICAgbGV0IHByZXZQb3MgPSBzdGFydFBvcywgcHJldkNsaWVudFBvc2l0aW9uID0gMCwgc3RhcnRQb3NEZWx0YSA9IDA7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0Q2xpZW50UG9zID0gaXNWZXJ0aWNhbCA/IGUudG91Y2hlc1tlLnRvdWNoZXMubGVuZ3RoIC0gMV0uY2xpZW50WSA6IGUudG91Y2hlc1tlLnRvdWNoZXMubGVuZ3RoIC0gMV0uY2xpZW50WCxcclxuICAgICAgICAgICAgICBvZmZzZXRzID0gbmV3IEFycmF5PFtudW1iZXIsIG51bWJlcl0+KCksIHZlbG9jaXRpZXMgPSBuZXcgQXJyYXk8W251bWJlciwgbnVtYmVyXT4oKTtcclxuICAgICAgICAgICAgbGV0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiBmcm9tRXZlbnQ8VG91Y2hFdmVudD4od2luZG93LCBUT1VDSF9NT1ZFLCB7IHBhc3NpdmU6IGZhbHNlIH0pLnBpcGUoXHJcbiAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpLFxyXG4gICAgICAgICAgICAgIHRha2VVbnRpbCgkdG91Y2hDYW5jZWxlciksXHJcbiAgICAgICAgICAgICAgdGFwKGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgIHN3aXRjaE1hcChlID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNQb3MgPSBpc1ZlcnRpY2FsID8gdGhpcy55IDogdGhpcy54O1xyXG4gICAgICAgICAgICAgICAgaWYgKGNQb3MgIT09IHByZXZQb3MpIHtcclxuICAgICAgICAgICAgICAgICAgc3RhcnRQb3NEZWx0YSArPSBjUG9zIC0gcHJldlBvcztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRQb3MgPSBpc1ZlcnRpY2FsID8gZS50b3VjaGVzW2UudG91Y2hlcy5sZW5ndGggLSAxXS5jbGllbnRZIDogZS50b3VjaGVzW2UudG91Y2hlcy5sZW5ndGggLSAxXS5jbGllbnRYLFxyXG4gICAgICAgICAgICAgICAgICBzY3JvbGxTaXplID0gaXNWZXJ0aWNhbCA/IHRoaXMuc2Nyb2xsSGVpZ2h0IDogdGhpcy5zY3JvbGxXaWR0aCwgZGVsdGEgPSBzdGFydENsaWVudFBvcyAtIGN1cnJlbnRQb3MsXHJcbiAgICAgICAgICAgICAgICAgIGRwID0gc3RhcnRQb3MgKyBzdGFydFBvc0RlbHRhICsgZGVsdGEsIHBvc2l0aW9uID0gTWF0aC5yb3VuZChkcCA8IDAgPyAwIDogZHAgPiBzY3JvbGxTaXplID8gc2Nyb2xsU2l6ZSA6IGRwKSwgZW5kVGltZSA9IERhdGUubm93KCksXHJcbiAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcCA9IGVuZFRpbWUgLSBzdGFydFRpbWUsIHNjcm9sbERlbHRhID0gcHJldkNsaWVudFBvc2l0aW9uID09PSAwID8gMCA6IHByZXZDbGllbnRQb3NpdGlvbiAtIGN1cnJlbnRQb3MsXHJcbiAgICAgICAgICAgICAgICAgIHsgdjAgfSA9IHRoaXMuY2FsY3VsYXRlVmVsb2NpdHkob2Zmc2V0cywgc2Nyb2xsRGVsdGEsIHRpbWVzdGFtcCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZUFjY2VsZXJhdGlvbih2ZWxvY2l0aWVzLCB2MCwgdGltZXN0YW1wKTtcclxuICAgICAgICAgICAgICAgIHByZXZDbGllbnRQb3NpdGlvbiA9IGN1cnJlbnRQb3M7XHJcbiAgICAgICAgICAgICAgICBwcmV2UG9zID0gcG9zaXRpb247XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vdmUoaXNWZXJ0aWNhbCwgcG9zaXRpb24sIGZhbHNlLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIHN0YXJ0VGltZSA9IGVuZFRpbWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmFjZShbZnJvbUV2ZW50PFRvdWNoRXZlbnQ+KHdpbmRvdywgVE9VQ0hfRU5ELCB7IHBhc3NpdmU6IGZhbHNlIH0pLCBmcm9tRXZlbnQ8VG91Y2hFdmVudD4oY29udGVudCwgVE9VQ0hfRU5ELCB7IHBhc3NpdmU6IGZhbHNlIH0pXSkucGlwZShcclxuICAgICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpLFxyXG4gICAgICAgICAgICAgICAgICB0YXAoZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZFRpbWUgPSBEYXRlLm5vdygpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wID0gZW5kVGltZSAtIHN0YXJ0VGltZSxcclxuICAgICAgICAgICAgICAgICAgICAgIHsgdjAgfSA9IHRoaXMuY2FsY3VsYXRlVmVsb2NpdHkob2Zmc2V0cywgc2Nyb2xsRGVsdGEsIHRpbWVzdGFtcCksXHJcbiAgICAgICAgICAgICAgICAgICAgICB7IGEwIH0gPSB0aGlzLmNhbGN1bGF0ZUFjY2VsZXJhdGlvbih2ZWxvY2l0aWVzLCB2MCwgdGltZXN0YW1wKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pc01vdmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuXyRncmFiYmluZy5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vdmVXaXRoQWNjZWxlcmF0aW9uKGlzVmVydGljYWwsIHBvc2l0aW9uLCB0aGlzLl92ZWxvY2l0eSwgdjAsIGEwKTtcclxuICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29tYmluZUxhdGVzdChbdGhpcy4kY2xhc3NlcywgdGhpcy4kZGlyZWN0aW9uLCB0aGlzLiRncmFiYmluZ10pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxyXG4gICAgICB0YXAoKFtjbGFzc2VzLCBkaXJlY3Rpb24sIGdyYWJiaW5nXSkgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRhY3R1YWxDbGFzc2VzLm5leHQoeyAuLi5jbGFzc2VzLCBbZGlyZWN0aW9uXTogdHJ1ZSwgZ3JhYmJpbmcgfSk7XHJcbiAgICAgICAgdGhpcy5fJGNvbnRhaW5lckNsYXNzZXMubmV4dCh7IFtkaXJlY3Rpb25dOiB0cnVlLCBncmFiYmluZyB9KTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5hZnRlclZpZXdJbml0KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLl8kdmlld0luaXRpYWxpemVkLm5leHQodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNhbGN1bGF0ZVZlbG9jaXR5KG9mZnNldHM6IEFycmF5PFtudW1iZXIsIG51bWJlcl0+LCBkZWx0YTogbnVtYmVyLCB0aW1lc3RhbXA6IG51bWJlciwgaW5kZXhPZmZzZXQ6IG51bWJlciA9IDEwKSB7XHJcbiAgICBvZmZzZXRzLnB1c2goW2RlbHRhLCB0aW1lc3RhbXAgPCBNSU5fVElNRVNUQU1QID8gTUlOX1RJTUVTVEFNUCA6IHRpbWVzdGFtcF0pO1xyXG5cclxuICAgIGNvbnN0IGxlbiA9IG9mZnNldHMubGVuZ3RoLCBzdGFydEluZGV4ID0gbGVuID4gaW5kZXhPZmZzZXQgPyBsZW4gLSBpbmRleE9mZnNldCA6IDAsIGxhc3RWU2lnbiA9IGNhbGN1bGF0ZURpcmVjdGlvbihvZmZzZXRzKTtcclxuICAgIGxldCB2U3VtID0gMDtcclxuICAgIGZvciAobGV0IGkgPSBzdGFydEluZGV4LCBsID0gb2Zmc2V0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgY29uc3QgcDAgPSBvZmZzZXRzW2ldO1xyXG4gICAgICBpZiAobGFzdFZTaWduICE9PSBNYXRoLnNpZ24ocDBbMF0pKSB7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHYwID0gKHAwWzFdICE9PSAwID8gbGFzdFZTaWduICogTWF0aC5hYnMocDBbMF0gLyBwMFsxXSkgKiBTUEVFRF9TQ0FMRSA6IDApO1xyXG4gICAgICB2U3VtICs9IE1hdGguc2lnbih2MCkgKiBNYXRoLnBvdyh2MCwgNCkgKiAuMDAzO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGwgPSBNYXRoLm1pbihvZmZzZXRzLmxlbmd0aCwgaW5kZXhPZmZzZXQpLCB2MCA9IGwgPiAwID8gKHZTdW0gLyBsKSA6IDA7XHJcbiAgICByZXR1cm4geyB2MCB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYWxjdWxhdGVBY2NlbGVyYXRpb24odmVsb2NpdGllczogQXJyYXk8W251bWJlciwgbnVtYmVyXT4sIGRlbHRhOiBudW1iZXIsIHRpbWVzdGFtcDogbnVtYmVyLCBpbmRleE9mZnNldDogbnVtYmVyID0gMTApIHtcclxuICAgIHZlbG9jaXRpZXMucHVzaChbZGVsdGEsIHRpbWVzdGFtcCA8IE1JTl9USU1FU1RBTVAgPyBNSU5fVElNRVNUQU1QIDogdGltZXN0YW1wXSk7XHJcbiAgICBjb25zdCBsZW4gPSB2ZWxvY2l0aWVzLmxlbmd0aCwgc3RhcnRJbmRleCA9IGxlbiA+IGluZGV4T2Zmc2V0ID8gbGVuIC0gaW5kZXhPZmZzZXQgOiAwO1xyXG4gICAgbGV0IGFTdW0gPSAwLCBwcmV2VjA6IFtudW1iZXIsIG51bWJlcl0gfCB1bmRlZmluZWQsIGl0ZXJhdGlvbiA9IDAsIGxhc3RWU2lnbiA9IGNhbGN1bGF0ZURpcmVjdGlvbih2ZWxvY2l0aWVzKTtcclxuICAgIGZvciAobGV0IGkgPSBzdGFydEluZGV4LCBsID0gdmVsb2NpdGllcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgY29uc3QgdjAwID0gcHJldlYwLCB2MDEgPSB2ZWxvY2l0aWVzW2ldO1xyXG4gICAgICBpZiAobGFzdFZTaWduICE9PSBNYXRoLnNpZ24odjAxWzBdKSkge1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh2MDApIHtcclxuICAgICAgICBjb25zdCBhMCA9IHRpbWVzdGFtcCA8IE1BWF9WRUxPQ0lUWV9USU1FU1RBTVAgPyAodjAwWzFdICE9PSAwID8gKGxhc3RWU2lnbiAqIE1hdGguYWJzKE1hdGguYWJzKHYwMVswXSkgLSBNYXRoLmFicyh2MDBbMF0pKSkgLyBNYXRoLmFicyh2MDBbMV0pIDogMCkgOiAwO1xyXG4gICAgICAgIGFTdW0gKz0gYTA7XHJcbiAgICAgICAgcHJldlYwID0gdjAxO1xyXG4gICAgICB9XHJcbiAgICAgIHByZXZWMCA9IHYwMTtcclxuICAgICAgaXRlcmF0aW9uKys7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYTAgPSBhU3VtICogRlJJQ1RJT05fRk9SQ0U7XHJcbiAgICByZXR1cm4geyBhMCB9O1xyXG4gIH1cclxuXHJcbiAgc3RvcFNjcm9sbGluZygpIHtcclxuICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX2FuaW1hdGlvbklkKTtcclxuICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX2FuaW1hdGlvbklkMSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1vdmUoaXNWZXJ0aWNhbDogYm9vbGVhbiwgcG9zaXRpb246IG51bWJlciwgYmxlbmRpbmc6IGJvb2xlYW4gPSBmYWxzZSwgdXNlckFjdGlvbjogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLnNjcm9sbFRvKHsgW2lzVmVydGljYWwgPyBUT1AgOiBMRUZUXTogcG9zaXRpb24sIGJlaGF2aW9yOiBJTlNUQU5ULCBibGVuZGluZywgdXNlckFjdGlvbiB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbW92ZVdpdGhBY2NlbGVyYXRpb24oaXNWZXJ0aWNhbDogYm9vbGVhbiwgcG9zaXRpb246IG51bWJlciwgdjA6IG51bWJlciwgdjogbnVtYmVyLCBhMDogbnVtYmVyKSB7XHJcbiAgICBpZiAoYTAgIT09IDApIHtcclxuICAgICAgY29uc3QgZHZTaWduID0gTWF0aC5zaWduKHYpLFxyXG4gICAgICAgIGR1cmF0aW9uID0gRFVSQVRJT04sIG1heER1cmF0aW9uID0gTUFYX0RVUkFUSU9OLFxyXG4gICAgICAgIG1heERpc3RhbmNlID0gZHZTaWduICogTUFYX0RJU1QsIHMgPSAoZHZTaWduICogTWF0aC5hYnMoKGEwICogTWF0aC5wb3coZHVyYXRpb24sIDIpKSAqIC41KSAvIDEwMDApIC8gTUFTUyxcclxuICAgICAgICBkaXN0YW5jZSA9IE1hdGguYWJzKHMpIDwgTUFYX0RJU1QgPyBzIDogbWF4RGlzdGFuY2UsIHBvc2l0aW9uV2l0aFZlbG9jaXR5ID0gcG9zaXRpb24gKyBkaXN0YW5jZSxcclxuICAgICAgICB2bWF4ID0gTWF0aC5tYXgoTWF0aC5hYnModjApLCBNYXRoLmFicyh2KSksXHJcbiAgICAgICAgYWQgPSBNYXRoLmFicyh2bWF4ICE9PSAwID8gTWF0aC5zcXJ0KHZtYXgpIDogMCkgKiAxMCAvIE1BU1MsXHJcbiAgICAgICAgYUR1cmF0aW9uID0gYWQgPCBtYXhEdXJhdGlvbiA/IGFkIDogbWF4RHVyYXRpb24sXHJcbiAgICAgICAgc3RhcnRQb3NpdGlvbiA9IGlzVmVydGljYWwgPyB0aGlzLnkgOiB0aGlzLng7XHJcbiAgICAgIHRoaXMuYW5pbWF0ZShzdGFydFBvc2l0aW9uLCBNYXRoLnJvdW5kKHBvc2l0aW9uV2l0aFZlbG9jaXR5KSwgYUR1cmF0aW9uLCBlYXNlT3V0UXVhZCwgdHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhbmltYXRlKHN0YXJ0VmFsdWU6IG51bWJlciwgZW5kVmFsdWU6IG51bWJlciwgZHVyYXRpb24gPSBBTklNQVRJT05fRFVSQVRJT04sIGVhc2luZ0Z1bmN0aW9uOiBFYXNpbmcgPSBlYXNlTGluZWFyLCB1c2VyQWN0aW9uOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIHRoaXMuc3RvcFNjcm9sbGluZygpO1xyXG4gICAgY29uc3Qgc3RhcnRUaW1lID0gZ2V0U3RhcnRUaW1lKCksIGlzVmVydGljYWwgPSB0aGlzLl8kZGlyZWN0aW9uLmdldFZhbHVlKCkgPT09IFNjcm9sbGVyRGlyZWN0aW9uLlZFUlRJQ0FMO1xyXG4gICAgbGV0IGlzQ2FuY2VsZWQgPSBmYWxzZSwgcHJldlBvcyA9IHN0YXJ0VmFsdWUsIHN0YXJ0ID0gc3RhcnRWYWx1ZSwgc3RhcnRQb3NEZWx0YSA9IDAsIGRlbHRhID0gMCwgcHJldlRpbWUgPSBzdGFydFRpbWUsXHJcbiAgICAgIGRpZmYgPSBNYXRoLmFicyhNYXRoLmFicyhlbmRWYWx1ZSkgLSBNYXRoLmFicyhzdGFydCkpO1xyXG5cclxuICAgIGlmIChkaWZmIDwgTUlOX0FOSU1BVEVEX1ZBTFVFKSB7XHJcbiAgICAgIGlmIChpc1ZlcnRpY2FsKSB7XHJcbiAgICAgICAgdGhpcy55ID0gcHJldlBvcyA9IHN0YXJ0ID0gZW5kVmFsdWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy54ID0gcHJldlBvcyA9IHN0YXJ0ID0gZW5kVmFsdWU7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChpc1ZlcnRpY2FsKSB7XHJcbiAgICAgICAgdGhpcy55ID0gc3RhcnQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy54ID0gc3RhcnQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgZmluaXNoZWRWYWx1ZSA9IGVuZFZhbHVlLFxyXG4gICAgICBpc0ZpbmlzaGVkID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3Qgc3RlcCA9IChjdXJyZW50VGltZTogbnVtYmVyKSA9PiB7XHJcbiAgICAgIGlmICghIWlzQ2FuY2VsZWQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGNQb3MgPSBpc1ZlcnRpY2FsID8gdGhpcy55IDogdGhpcy54O1xyXG4gICAgICBsZXQgc2Nyb2xsRGVsdGEgPSAwO1xyXG4gICAgICBpZiAoY1BvcyAhPT0gcHJldlBvcykge1xyXG4gICAgICAgIHNjcm9sbERlbHRhID0gY1BvcyAtIHByZXZQb3M7XHJcbiAgICAgICAgc3RhcnRQb3NEZWx0YSArPSBzY3JvbGxEZWx0YTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgZWxhcHNlZCA9IGN1cnJlbnRUaW1lIC0gc3RhcnRUaW1lLFxyXG4gICAgICAgIHByb2dyZXNzID0gc3RhcnQgPT09IGVuZFZhbHVlID8gMSA6IE1hdGgubWluKGR1cmF0aW9uID4gMCA/IGVsYXBzZWQgLyBkdXJhdGlvbiA6IDAsIDEpLFxyXG4gICAgICAgIGVhc2VkUHJvZ3Jlc3MgPSBlYXNpbmdGdW5jdGlvbihwcm9ncmVzcyksXHJcbiAgICAgICAgdmFsID0gc3RhcnRQb3NEZWx0YSArIHN0YXJ0ICsgKGZpbmlzaGVkVmFsdWUgLSBzdGFydCkgKiBlYXNlZFByb2dyZXNzLFxyXG4gICAgICAgIHNjcm9sbFNpemUgPSBpc1ZlcnRpY2FsID8gdGhpcy5zY3JvbGxIZWlnaHQgOiB0aGlzLnNjcm9sbFdpZHRoLFxyXG4gICAgICAgIGFjdHVhbFNjcm9sbFNpemUgPSBpc1ZlcnRpY2FsID8gdGhpcy5hY3R1YWxTY3JvbGxIZWlnaHQgOiB0aGlzLmFjdHVhbFNjcm9sbFdpZHRoLFxyXG4gICAgICAgIGN1cnJlbnRWYWx1ZSA9IHZhbCA8IDAgPyAwIDogdmFsID4gc2Nyb2xsU2l6ZSA/IHNjcm9sbFNpemUgOiB2YWwsXHJcbiAgICAgICAgdCA9IERhdGUubm93KCk7XHJcblxyXG4gICAgICBpc0ZpbmlzaGVkID0gKGN1cnJlbnRWYWx1ZSA9PT0gc2Nyb2xsU2l6ZSAmJiBNYXRoLnJvdW5kKHNjcm9sbFNpemUpID49IE1hdGgucm91bmQoYWN0dWFsU2Nyb2xsU2l6ZSkpIHx8XHJcbiAgICAgICAgY3VycmVudFZhbHVlID09PSAwIHx8IHByb2dyZXNzID09PSAxO1xyXG5cclxuICAgICAgZGVsdGEgPSBjdXJyZW50VmFsdWUgLSBzY3JvbGxEZWx0YSAtIHByZXZQb3M7XHJcblxyXG4gICAgICBjb25zdCB0cyA9IHQgLSBwcmV2VGltZSwgdGltZXN0YW1wID0gdHMgPCBNSU5fVElNRVNUQU1QID8gTUlOX1RJTUVTVEFNUCA6IHRzO1xyXG4gICAgICB0aGlzLl92ZWxvY2l0eSA9IHRpbWVzdGFtcCA+IDAgPyBkZWx0YSAvIHRpbWVzdGFtcCA6IDA7XHJcblxyXG4gICAgICBwcmV2VGltZSA9IHQ7XHJcbiAgICAgIHByZXZQb3MgPSBjdXJyZW50VmFsdWU7XHJcblxyXG4gICAgICBjb25zdCBzY3JvbGxDb250ZW50ID0gdGhpcy5zY3JvbGxDb250ZW50Py5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50O1xyXG4gICAgICBpZiAoISFzY3JvbGxDb250ZW50KSB7XHJcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fYW5pbWF0aW9uSWQxKTtcclxuICAgICAgICBpZiAoaXNWZXJ0aWNhbCkge1xyXG4gICAgICAgICAgdGhpcy55ID0gY3VycmVudFZhbHVlO1xyXG4gICAgICAgICAgc2Nyb2xsQ29udGVudC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlM2QoMCwgJHstY3VycmVudFZhbHVlfXB4LCAwKWA7XHJcbiAgICAgICAgICBpZiAodGhpcy5jZGtTY3JvbGxhYmxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2RrU2Nyb2xsYWJsZS5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KFNDUk9MTF9FVkVOVCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLl8kc2Nyb2xsLm5leHQodXNlckFjdGlvbik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMueCA9IGN1cnJlbnRWYWx1ZTtcclxuICAgICAgICAgIHNjcm9sbENvbnRlbnQuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZTNkKCR7LWN1cnJlbnRWYWx1ZX1weCwgMCwgMClgO1xyXG4gICAgICAgICAgaWYgKHRoaXMuY2RrU2Nyb2xsYWJsZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNka1Njcm9sbGFibGUuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChTQ1JPTExfRVZFTlQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5fJHNjcm9sbC5uZXh0KHVzZXJBY3Rpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoaXNGaW5pc2hlZCkge1xyXG4gICAgICAgIHRoaXMuc3RvcFNjcm9sbGluZygpO1xyXG4gICAgICAgIHRoaXMuXyRzY3JvbGxFbmQubmV4dCh1c2VyQWN0aW9uKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl9hbmltYXRpb25JZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShzdGVwKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLl9hbmltYXRpb25JZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShzdGVwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlU2Nyb2xsQmFyKCkge1xyXG4gICAgdGhpcy5fJHVwZGF0ZVNjcm9sbEJhci5uZXh0KCk7XHJcbiAgfVxyXG5cclxuICBzY3JvbGxUbyhwYXJhbXM6IElTY3JvbGxUb1BhcmFtcykge1xyXG4gICAgY29uc3QgcG9zWCA9IHBhcmFtcy54IHx8IHBhcmFtcy5sZWZ0IHx8IDAsXHJcbiAgICAgIHBvc1kgPSBwYXJhbXMueSB8fCBwYXJhbXMudG9wIHx8IDAsXHJcbiAgICAgIHVzZXJBY3Rpb24gPSBwYXJhbXMudXNlckFjdGlvbiA/PyBmYWxzZSxcclxuICAgICAgeCA9IHBvc1gsXHJcbiAgICAgIHkgPSBwb3NZLFxyXG4gICAgICBiZWhhdmlvciA9IHBhcmFtcy5iZWhhdmlvciA/PyBJTlNUQU5ULFxyXG4gICAgICBibGVuZGluZyA9IHBhcmFtcy5ibGVuZGluZyA/PyB0cnVlLFxyXG4gICAgICBzY3JvbGxDb250ZW50ID0gdGhpcy5zY3JvbGxDb250ZW50Py5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50LFxyXG4gICAgICBpc1ZlcnRpY2FsID0gdGhpcy5fJGRpcmVjdGlvbi5nZXRWYWx1ZSgpID09PSBTY3JvbGxlckRpcmVjdGlvbi5WRVJUSUNBTDtcclxuXHJcbiAgICBpZiAodGhpcy5faXNNb3ZpbmcpIHtcclxuICAgICAgaWYgKGlzVmVydGljYWwpIHtcclxuICAgICAgICBpZiAoeSA8IDAgfHwgeSA+IHRoaXMuc2Nyb2xsSGVpZ2h0KSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICh4IDwgMCB8fCB4ID4gdGhpcy5zY3JvbGxXaWR0aCkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHh4ID0geCxcclxuICAgICAgeXkgPSB5LFxyXG4gICAgICBwcmV2WCA9IHRoaXMueCxcclxuICAgICAgcHJldlkgPSB0aGlzLnk7XHJcbiAgICB0aGlzLnggPSB4eDtcclxuICAgIHRoaXMueSA9IHl5O1xyXG4gICAgaWYgKGJlaGF2aW9yID09PSBBVVRPIHx8IGJlaGF2aW9yID09PSBTTU9PVEgpIHtcclxuICAgICAgaWYgKGlzVmVydGljYWwpIHtcclxuICAgICAgICBpZiAocHJldlkgIT09IHl5KSB7XHJcbiAgICAgICAgICB0aGlzLmFuaW1hdGUocHJldlksIHl5LCBBTklNQVRJT05fRFVSQVRJT04sIGVhc2VMaW5lYXIsIHVzZXJBY3Rpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAocHJldlggIT09IHh4KSB7XHJcbiAgICAgICAgICB0aGlzLmFuaW1hdGUocHJldlgsIHh4LCBBTklNQVRJT05fRFVSQVRJT04sIGVhc2VMaW5lYXIsIHVzZXJBY3Rpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKGlzVmVydGljYWwpIHtcclxuICAgICAgICBpZiAocHJldlkgIT09IHl5KSB7XHJcbiAgICAgICAgICBpZiAoIWJsZW5kaW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcFNjcm9sbGluZygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgc2Nyb2xsQ29udGVudC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlM2QoMCwgJHsteXl9cHgsIDApYDtcclxuICAgICAgICAgIGlmICh0aGlzLmNka1Njcm9sbGFibGUpIHtcclxuICAgICAgICAgICAgdGhpcy5jZGtTY3JvbGxhYmxlLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQoU0NST0xMX0VWRU5UKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLmZpcmVTY3JvbGxFdmVudCh1c2VyQWN0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHByZXZYICE9PSB4eCkge1xyXG4gICAgICAgICAgaWYgKCFibGVuZGluZykge1xyXG4gICAgICAgICAgICB0aGlzLnN0b3BTY3JvbGxpbmcoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHNjcm9sbENvbnRlbnQuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZTNkKCR7LXh4fXB4LCAwLCAwKWA7XHJcbiAgICAgICAgICBpZiAodGhpcy5jZGtTY3JvbGxhYmxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2RrU2Nyb2xsYWJsZS5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KFNDUk9MTF9FVkVOVCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5maXJlU2Nyb2xsRXZlbnQodXNlckFjdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZmlyZVNjcm9sbEV2ZW50KHVzZXJBY3Rpb246IGJvb2xlYW4pIHtcclxuICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX2FuaW1hdGlvbklkMSk7XHJcbiAgICB0aGlzLl9hbmltYXRpb25JZDEgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xyXG4gICAgICB0aGlzLl8kc2Nyb2xsLm5leHQodXNlckFjdGlvbik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgaWYgKHRoaXMuc2Nyb2xsQmFyKSB7XHJcbiAgICAgIHRoaXMuc2Nyb2xsQmFyLnN0b3BTY3JvbGxpbmcoKTtcclxuICAgIH1cclxuICAgIHRoaXMubW92ZSh0aGlzLl8kaXNWZXJ0aWNhbC5nZXRWYWx1ZSgpLCAwKTtcclxuICB9XHJcblxyXG4gIG9uU2Nyb2xsQmFyRHJhZ0hhbmRsZXIoZTogYW55KSB7XHJcbiAgICBjb25zdCBwb3NpdGlvbiA9IGUgYXMgbnVtYmVyO1xyXG4gICAgdGhpcy5faXNNb3ZpbmcgPSB0cnVlO1xyXG4gICAgY29uc3QgaXNWZXJ0aWNhbCA9IHRoaXMuXyRpc1ZlcnRpY2FsLmdldFZhbHVlKCksXHJcbiAgICAgIHtcclxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGVQb3NpdGlvbixcclxuICAgICAgfSA9IHRoaXMuX3Njcm9sbEJveC5nZXRTY3JvbGxQb3NpdGlvbkJ5U2Nyb2xsQmFyKHtcclxuICAgICAgICBzY3JvbGxTaXplOiBpc1ZlcnRpY2FsID8gdGhpcy5hY3R1YWxTY3JvbGxIZWlnaHQgOiB0aGlzLmFjdHVhbFNjcm9sbFdpZHRoLFxyXG4gICAgICAgIHBvc2l0aW9uLFxyXG4gICAgICB9KTtcclxuICAgIHRoaXMuc2Nyb2xsVG8oeyBbaXNWZXJ0aWNhbCA/IFRPUCA6IExFRlRdOiBhYnNvbHV0ZVBvc2l0aW9uLCBiZWhhdmlvcjogQVVUTywgYmxlbmRpbmc6IHRydWUsIHVzZXJBY3Rpb246IHRydWUgfSk7XHJcbiAgICBpZiAodGhpcy5jZGtTY3JvbGxhYmxlKSB7XHJcbiAgICAgIHRoaXMuY2RrU2Nyb2xsYWJsZS5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KFNDUk9MTEJBUl9TQ1JPTExfRVZFTlQpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faXNNb3ZpbmcgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgY29uc3QgdXBkYXRlU2Nyb2xsQmFySWQgPSB0aGlzLl91cGRhdGVTY3JvbGxCYXJJZDtcclxuICAgIGlmICh1cGRhdGVTY3JvbGxCYXJJZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHVwZGF0ZVNjcm9sbEJhcklkKTtcclxuICAgICAgdGhpcy5fdXBkYXRlU2Nyb2xsQmFySWQgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdG9wU2Nyb2xsaW5nKCk7XHJcbiAgICBpZiAodGhpcy5fdmlld3BvcnRSZXNpemVPYnNlcnZlcikge1xyXG4gICAgICB0aGlzLl92aWV3cG9ydFJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLl9jb250ZW50UmVzaXplT2JzZXJ2ZXIpIHtcclxuICAgICAgdGhpcy5fY29udGVudFJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiBsb2NhbGVTZW5zaXRpdmUgW2xhbmdUZXh0RGlyXT1cIigkbGFuZ1RleHREaXIgfCBhc3luYykhXCIgW2xpc3REaXJdPVwiKCRkaXJlY3Rpb24gfCBhc3luYykhXCIgY2xhc3M9XCJuZ3ZsX19jb250YWluZXJcIlxyXG4gICAgW25nQ2xhc3NdPVwiKCRjb250YWluZXJDbGFzc2VzIHwgYXN5bmMpIVwiPlxyXG4gICAgPGRpdiAjc2Nyb2xsVmlld3BvcnQgY2RrU2Nyb2xsYWJsZSBwYXJ0PVwic2Nyb2xsZXJcIiBjbGFzcz1cIm5ndmxfX3Njcm9sbGVyXCI+XHJcbiAgICAgICAgPGRpdiAjc2Nyb2xsQ29udGVudCBbYXR0ci5hcmlhLW9yaWVudGF0aW9uXT1cIigkZGlyZWN0aW9uIHwgYXN5bmMpIVwiXHJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtYWN0aXZlZGVzY2VuZGFudF09XCIkZm9jdXNlZEVsZW1lbnQgfCBhc3luY1wiIHRhYmluZGV4PVwiMFwiIHBhcnQ9XCJsaXN0XCIgY2xhc3M9XCJuZ3ZsX19saXN0XCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiKCRhY3R1YWxDbGFzc2VzIHwgYXN5bmMpIVwiPlxyXG4gICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxuZy1zY3JvbGwtYmFyICNzY3JvbGxCYXIgW2lzVmVydGljYWxdPVwiKCRpc1ZlcnRpY2FsIHwgYXN5bmMpIVwiIFtzaXplXT1cIigkdGh1bWJTaXplIHwgYXN5bmMpIVwiXHJcbiAgICAgICAgW3RoZW1lXT1cIigkc2Nyb2xsYmFyVGhlbWUgfCBhc3luYykhXCIgW3Bvc2l0aW9uXT1cIigkdGh1bWJQb3NpdGlvbiB8IGFzeW5jKSFcIlxyXG4gICAgICAgIFt0aHVtYkdyYWRpZW50UG9zaXRpb25zXT1cIigkdGh1bWJHcmFkaWVudFBvc2l0aW9ucyB8IGFzeW5jKSFcIiBbbG9hZGluZ109XCIoJGxvYWRpbmcgfCBhc3luYykhXCJcclxuICAgICAgICBbcHJlcGFyZWRdPVwiKCRwcmVwYXJlZFNpZ25hbCB8IGFzeW5jKSFcIiBbc2hvd109XCIoJHRodW1iU2hvdyB8IGFzeW5jKSFcIlxyXG4gICAgICAgIChvbkRyYWcpPVwib25TY3JvbGxCYXJEcmFnSGFuZGxlcigkZXZlbnQpXCI+PC9uZy1zY3JvbGwtYmFyPlxyXG48L2Rpdj4iXX0=
|
|
624
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctc2Nyb2xsZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvY29tcG9uZW50cy9zY3JvbGxlci9uZy1zY3JvbGxlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9jb21wb25lbnRzL3Njcm9sbGVyL25nLXNjcm9sbGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFhLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFJLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUM1QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBSXBDLE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRWhGLE9BQU8sRUFDTCwwQkFBMEIsRUFDMUIsV0FBVyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSx5QkFBeUIsRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLFVB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VUYsT0FBTztzQkFEVixLQUFLO2dCQVVGLFdBQVc7c0JBRGQsS0FBSztnQkFVRixTQUFTO3NCQURaLEtBQUs7Z0JBVUYsY0FBYztzQkFEakIsS0FBSztnQkFVRixnQkFBZ0I7c0JBRG5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT25EZXN0cm95LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xyXG5pbXBvcnQgeyBDZGtTY3JvbGxhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIGZyb21FdmVudCwgbWFwLCBvZiwgcmFjZSwgU3ViamVjdCwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBTY3JvbGxlckRpcmVjdGlvbiB9IGZyb20gJy4vZW51bXMnO1xyXG5pbXBvcnQgeyBTY3JvbGxCb3ggfSBmcm9tICcuL3V0aWxzJztcclxuaW1wb3J0IHsgU2Nyb2xsZXJEaXJlY3Rpb25zIH0gZnJvbSAnLi9lbnVtcyc7XHJcbmltcG9ydCB7IElkLCBJU2l6ZSwgU2Nyb2xsQmFyVGhlbWUgfSBmcm9tICcuLi8uLi90eXBlcyc7XHJcbmltcG9ydCB7IEVhc2luZyB9IGZyb20gJy4vdHlwZXMnO1xyXG5pbXBvcnQgeyBlYXNlTGluZWFyLCBlYXNlT3V0UXVhZCB9IGZyb20gJy4vdXRpbHMvZWFzZSc7XHJcbmltcG9ydCB7IE5nU2Nyb2xsQmFyQ29tcG9uZW50IH0gZnJvbSBcIi4uL25nLXNjcm9sbC1iYXIvbmctc2Nyb2xsLWJhci5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgR3JhZGllbnRDb2xvclBvc2l0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzL2dyYWRpZW50LWNvbG9yLXBvc2l0aW9ucyc7XHJcbmltcG9ydCB7XHJcbiAgREVGQVVMVF9TQ1JPTExCQVJfTUlOX1NJWkUsXHJcbiAgSU5URVJBQ1RJVkUsIE1PVVNFX0RPV04sIE1PVVNFX01PVkUsIE1PVVNFX1VQLCBTQ1JPTExFUl9TQ1JPTEwsIFNDUk9MTEVSX1NDUk9MTEJBUl9TQ1JPTEwsIFNDUk9MTEVSX1dIRUVMLCBUT1VDSF9FTkQsIFRPVUNIX01PVkUsXHJcbiAgVE9VQ0hfU1RBUlQsIFdIRUVMLFxyXG59IGZyb20gJy4uLy4uL2NvbnN0JztcclxuaW1wb3J0IHsgVGV4dERpcmVjdGlvbiwgVGV4dERpcmVjdGlvbnMgfSBmcm9tICcuLi8uLi9lbnVtcyc7XHJcbmltcG9ydCB7IE5nVmlydHVhbExpc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbmctdmlydHVhbC1saXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRGVzdHJveVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuY29uc3QgVE9QID0gJ3RvcCcsXHJcbiAgTEVGVCA9ICdsZWZ0JyxcclxuICBJTlNUQU5UID0gJ2luc3RhbnQnLFxyXG4gIEFVVE8gPSAnYXV0bycsXHJcbiAgU01PT1RIID0gJ3Ntb290aCcsXHJcbiAgVkVSVElDQUwgPSAndmVydGljYWwnLFxyXG4gIERVUkFUSU9OID0gMjAwMCxcclxuICBGUklDVElPTl9GT1JDRSA9IC4wMzUsXHJcbiAgTUFYX0RVUkFUSU9OID0gNDAwMCxcclxuICBBTklNQVRJT05fRFVSQVRJT04gPSAyMDAsXHJcbiAgTUFTUyA9IC4wMDUsXHJcbiAgTUFYX0RJU1QgPSAxMjUwMCxcclxuICBNSU5fVElNRVNUQU1QID0gMjAsXHJcbiAgTUFYX1ZFTE9DSVRZX1RJTUVTVEFNUCA9IDEwMCxcclxuICBNSU5fQU5JTUFURURfVkFMVUUgPSAxMCxcclxuICBTUEVFRF9TQ0FMRSA9IDU7XHJcblxyXG5jb25zdCBnZXRTdGFydFRpbWUgPSAoKSA9PiB7IHJldHVybiBwZXJmb3JtYW5jZS5ub3coKTsgfVxyXG5cclxuY29uc3QgY2FsY3VsYXRlRGlyZWN0aW9uID0gKGJ1ZmZlcjogQXJyYXk8W251bWJlciwgbnVtYmVyXT4pID0+IHtcclxuICBmb3IgKGxldCBpID0gYnVmZmVyLmxlbmd0aCAtIDEsIGwgPSAwOyBpID49IGw7IGktLSkge1xyXG4gICAgY29uc3QgdiA9IGJ1ZmZlcltpXTtcclxuICAgIGlmICh2WzBdID09PSAwKSB7XHJcbiAgICAgIGNvbnRpbnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIE1hdGguc2lnbih2WzBdKTtcclxuICB9XHJcbiAgcmV0dXJuIDE7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVNjcm9sbFRvUGFyYW1zIHtcclxuICB4PzogbnVtYmVyO1xyXG4gIHk/OiBudW1iZXI7XHJcbiAgbGVmdD86IG51bWJlcjtcclxuICB0b3A/OiBudW1iZXI7XHJcbiAgYmxlbmRpbmc/OiBib29sZWFuO1xyXG4gIGJlaGF2aW9yPzogXCJhdXRvXCIgfCBcImluc3RhbnRcIiB8IFwic21vb3RoXCIgfCBzdHJpbmc7XHJcbiAgdXNlckFjdGlvbj86IGJvb2xlYW47XHJcbiAgZmlyZVVwZGF0ZT86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBTQ1JPTExfRVZFTlQgPSBuZXcgRXZlbnQoU0NST0xMRVJfU0NST0xMKSxcclxuICBXSEVFTF9FVkVOVCA9IG5ldyBFdmVudChTQ1JPTExFUl9XSEVFTCksXHJcbiAgU0NST0xMQkFSX1NDUk9MTF9FVkVOVCA9IG5ldyBFdmVudChTQ1JPTExFUl9TQ1JPTExCQVJfU0NST0xMKTtcclxuXHJcbi8qKlxyXG4gKiBUaGUgc2Nyb2xsZXIgZm9yIHRoZSBOZ1ZpcnR1YWxMaXN0IGl0ZW0gY29tcG9uZW50XHJcbiAqIE1heGltdW0gcGVyZm9ybWFuY2UgZm9yIGV4dHJlbWVseSBsYXJnZSBsaXN0cy5cclxuICogSXQgaXMgYmFzZWQgb24gYWxnb3JpdGhtcyBmb3IgdmlydHVhbGl6YXRpb24gb2Ygc2NyZWVuIG9iamVjdHMuXHJcbiAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9Eam9ubnlYL25nLXZpcnR1YWwtbGlzdC9ibG9iLzE2LngvcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvY29tcG9uZW50cy9zY3JvbGxlci9uZy1zY3JvbGxlci5jb21wb25lbnQudHNcclxuICogQGF1dGhvciBFdmdlbmlpIEFsZXhhbmRyb3ZpY2ggR3JlYmVubmlrb3ZcclxuICogQGVtYWlsIGRqb25ueXhAZ21haWwuY29tXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ25nLXNjcm9sbGVyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbmctc2Nyb2xsZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL25nLXNjcm9sbGVyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ1Njcm9sbGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuICBAVmlld0NoaWxkKCdzY3JvbGxDb250ZW50JylcclxuICBzY3JvbGxDb250ZW50OiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQFZpZXdDaGlsZCgnc2Nyb2xsVmlld3BvcnQnLCB7IHJlYWQ6IENka1Njcm9sbGFibGUgfSlcclxuICBjZGtTY3JvbGxhYmxlOiBDZGtTY3JvbGxhYmxlIHwgdW5kZWZpbmVkO1xyXG5cclxuICBAVmlld0NoaWxkKCdzY3JvbGxCYXInLCB7IHJlYWQ6IE5nU2Nyb2xsQmFyQ29tcG9uZW50IH0pXHJcbiAgc2Nyb2xsQmFyOiBOZ1Njcm9sbEJhckNvbXBvbmVudCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQFZpZXdDaGlsZCgnc2Nyb2xsVmlld3BvcnQnKVxyXG4gIHNjcm9sbFZpZXdwb3J0OiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgcHJpdmF0ZSBfJHZpZXdJbml0aWFsaXplZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHJlYWRvbmx5ICR2aWV3SW5pdGlhbGl6ZWQgPSB0aGlzLl8kdmlld0luaXRpYWxpemVkLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kZGlyZWN0aW9uID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTY3JvbGxlckRpcmVjdGlvbnM+KFNjcm9sbGVyRGlyZWN0aW9uLlZFUlRJQ0FMKTtcclxuICByZWFkb25seSAkZGlyZWN0aW9uID0gdGhpcy5fJGRpcmVjdGlvbi5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgZGlyZWN0aW9uKHY6IFNjcm9sbGVyRGlyZWN0aW9ucykge1xyXG4gICAgdGhpcy5fJGRpcmVjdGlvbi5uZXh0KHYpO1xyXG4gIH1cclxuICBnZXQgZGlyZWN0aW9uKCkgeyByZXR1cm4gdGhpcy5fJGRpcmVjdGlvbi5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRmb2N1c2VkRWxlbWVudCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SWQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XHJcbiAgcmVhZG9ubHkgJGZvY3VzZWRFbGVtZW50ID0gdGhpcy5fJGZvY3VzZWRFbGVtZW50LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBmb2N1c2VkRWxlbWVudCh2OiBJZCB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fJGZvY3VzZWRFbGVtZW50Lm5leHQodik7XHJcbiAgfVxyXG4gIGdldCBmb2N1c2VkRWxlbWVudCgpIHsgcmV0dXJuIHRoaXMuXyRmb2N1c2VkRWxlbWVudC5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRsb2FkaW5nID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgcmVhZG9ubHkgJGxvYWRpbmcgPSB0aGlzLl8kbG9hZGluZy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgbG9hZGluZyh2OiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl8kbG9hZGluZy5uZXh0KHYpO1xyXG4gIH1cclxuICBnZXQgbG9hZGluZygpIHsgcmV0dXJuIHRoaXMuXyRsb2FkaW5nLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGNsYXNzZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHsgW2NOYW1lOiBzdHJpbmddOiBib29sZWFuIH0+KHt9KTtcclxuICByZWFkb25seSAkY2xhc3NlcyA9IHRoaXMuXyRjbGFzc2VzLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBjbGFzc2VzKHY6IHsgW2NOYW1lOiBzdHJpbmddOiBib29sZWFuIH0pIHtcclxuICAgIHRoaXMuXyRjbGFzc2VzLm5leHQodik7XHJcbiAgfVxyXG4gIGdldCBjbGFzc2VzKCkgeyByZXR1cm4gdGhpcy5fJGNsYXNzZXMuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kc3RhcnRPZmZzZXQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XHJcbiAgcmVhZG9ubHkgJHN0YXJ0T2Zmc2V0ID0gdGhpcy5fJHN0YXJ0T2Zmc2V0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBzdGFydE9mZnNldCh2OiBudW1iZXIpIHtcclxuICAgIHRoaXMuXyRzdGFydE9mZnNldC5uZXh0KHYpO1xyXG4gIH1cclxuICBnZXQgc3RhcnRPZmZzZXQoKSB7IHJldHVybiB0aGlzLl8kc3RhcnRPZmZzZXQuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kZW5kT2Zmc2V0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xyXG4gIHJlYWRvbmx5ICRlbmRPZmZzZXQgPSB0aGlzLl8kZW5kT2Zmc2V0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBlbmRPZmZzZXQodjogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl8kZW5kT2Zmc2V0Lm5leHQodik7XHJcbiAgfVxyXG4gIGdldCBlbmRPZmZzZXQoKSB7IHJldHVybiB0aGlzLl8kZW5kT2Zmc2V0LmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbGJhclRoZW1lID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTY3JvbGxCYXJUaGVtZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcclxuICByZWFkb25seSAkc2Nyb2xsYmFyVGhlbWUgPSB0aGlzLl8kc2Nyb2xsYmFyVGhlbWUuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNjcm9sbGJhclRoZW1lKHY6IFNjcm9sbEJhclRoZW1lIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl8kc2Nyb2xsYmFyVGhlbWUubmV4dCh2KTtcclxuICB9XHJcbiAgZ2V0IHNjcm9sbGJhclRoZW1lKCkgeyByZXR1cm4gdGhpcy5fJHNjcm9sbGJhclRoZW1lLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbGJhck1pblNpemUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oREVGQVVMVF9TQ1JPTExCQVJfTUlOX1NJWkUpO1xyXG4gIHJlYWRvbmx5ICRzY3JvbGxiYXJNaW5TaXplID0gdGhpcy5fJHNjcm9sbGJhck1pblNpemUuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNjcm9sbGJhck1pblNpemUodjogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl8kc2Nyb2xsYmFyTWluU2l6ZS5uZXh0KHYpO1xyXG4gIH1cclxuICBnZXQgc2Nyb2xsYmFyTWluU2l6ZSgpIHsgcmV0dXJuIHRoaXMuXyRzY3JvbGxiYXJNaW5TaXplLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGFjdHVhbENsYXNzZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHsgW2NOYW1lOiBzdHJpbmddOiBib29sZWFuIH0+KHt9KTtcclxuICByZWFkb25seSAkYWN0dWFsQ2xhc3NlcyA9IHRoaXMuXyRhY3R1YWxDbGFzc2VzLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kY29udGFpbmVyQ2xhc3NlcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8eyBbY05hbWU6IHN0cmluZ106IGJvb2xlYW4gfT4oe30pO1xyXG4gIHJlYWRvbmx5ICRjb250YWluZXJDbGFzc2VzID0gdGhpcy5fJGNvbnRhaW5lckNsYXNzZXMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRpc1ZlcnRpY2FsID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcclxuICByZWFkb25seSAkaXNWZXJ0aWNhbCA9IHRoaXMuXyRpc1ZlcnRpY2FsLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kdGh1bWJHcmFkaWVudFBvc2l0aW9ucyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8R3JhZGllbnRDb2xvclBvc2l0aW9ucz4oWzAsIDBdKTtcclxuICByZWFkb25seSAkdGh1bWJHcmFkaWVudFBvc2l0aW9ucyA9IHRoaXMuXyR0aHVtYkdyYWRpZW50UG9zaXRpb25zLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kdGh1bWJTaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xyXG4gIHJlYWRvbmx5ICR0aHVtYlNpemUgPSB0aGlzLl8kdGh1bWJTaXplLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kdGh1bWJQb3NpdGlvbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuICByZWFkb25seSAkdGh1bWJQb3NpdGlvbiA9IHRoaXMuXyR0aHVtYlBvc2l0aW9uLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kdGh1bWJTaG93ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgcmVhZG9ubHkgJHRodW1iU2hvdyA9IHRoaXMuXyR0aHVtYlNob3cuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRwcmVwYXJlZFNpZ25hbCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHJlYWRvbmx5ICRwcmVwYXJlZFNpZ25hbCA9IHRoaXMuXyRwcmVwYXJlZFNpZ25hbC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGdyYWJiaW5nID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgcmVhZG9ubHkgJGdyYWJiaW5nID0gdGhpcy5fJGdyYWJiaW5nLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kbGFuZ1RleHREaXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRleHREaXJlY3Rpb24+KFRleHREaXJlY3Rpb25zLkxUUik7XHJcbiAgcmVhZG9ubHkgJGxhbmdUZXh0RGlyID0gdGhpcy5fJGxhbmdUZXh0RGlyLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kdXBkYXRlU2Nyb2xsQmFyID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBwcm90ZWN0ZWQgJHVwZGF0ZVNjcm9sbEJhciA9IHRoaXMuXyR1cGRhdGVTY3JvbGxCYXIuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGwgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG4gIHJlYWRvbmx5ICRzY3JvbGwgPSB0aGlzLl8kc2Nyb2xsLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsRW5kID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICByZWFkb25seSAkc2Nyb2xsRW5kID0gdGhpcy5fJHNjcm9sbEVuZC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc2Nyb2xsQm94ID0gbmV3IFNjcm9sbEJveCgpO1xyXG5cclxuICBnZXQgc2Nyb2xsYWJsZSgpIHtcclxuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy5fJHZpZXdwb3J0Qm91bmRzLmdldFZhbHVlKCksXHJcbiAgICAgIGlzVmVydGljYWwgPSB0aGlzLl8kaXNWZXJ0aWNhbC5nZXRWYWx1ZSgpLFxyXG4gICAgICB2aWV3cG9ydFNpemUgPSBpc1ZlcnRpY2FsID8gaGVpZ2h0IDogd2lkdGgsXHJcbiAgICAgIHRvdGFsU2l6ZSA9IHRoaXMuX3RvdGFsU2l6ZTtcclxuICAgIHJldHVybiB0b3RhbFNpemUgPiB2aWV3cG9ydFNpemU7XHJcbiAgfVxyXG5cclxuICBnZXQgaG9zdCgpIHtcclxuICAgIHJldHVybiB0aGlzLnNjcm9sbFZpZXdwb3J0Py5uYXRpdmVFbGVtZW50O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcHJlcGFyZWQgPSBmYWxzZTtcclxuICBzZXQgcHJlcGFyZWQodjogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuX3ByZXBhcmVkICE9PSB2KSB7XHJcbiAgICAgIHRoaXMuX3ByZXBhcmVkID0gdjtcclxuICAgICAgdGhpcy5fJHByZXBhcmVkU2lnbmFsLm5leHQodik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pc01vdmluZyA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIF94OiBudW1iZXIgPSAwO1xyXG4gIHNldCB4KHY6IG51bWJlcikge1xyXG4gICAgdGhpcy5feCA9IHRoaXMuX2FjdHVhbFggPSB2O1xyXG5cclxuICAgIHRoaXMudXBkYXRlU2Nyb2xsQmFyKCk7XHJcbiAgfVxyXG4gIGdldCB4KCkgeyByZXR1cm4gdGhpcy5feDsgfVxyXG5cclxuICBwcml2YXRlIF95OiBudW1iZXIgPSAwO1xyXG4gIHNldCB5KHY6IG51bWJlcikge1xyXG4gICAgdGhpcy5feSA9IHRoaXMuX2FjdHVhbFkgPSB2O1xyXG5cclxuICAgIHRoaXMudXBkYXRlU2Nyb2xsQmFyKCk7XHJcbiAgfVxyXG4gIGdldCB5KCkgeyByZXR1cm4gdGhpcy5feTsgfVxyXG5cclxuICBwcml2YXRlIF90b3RhbFNpemU6IG51bWJlciA9IDA7XHJcbiAgc2V0IHRvdGFsU2l6ZSh2OiBudW1iZXIpIHtcclxuICAgIHRoaXMuX3RvdGFsU2l6ZSA9IHY7XHJcbiAgfVxyXG5cclxuICBnZXQgYWN0dWFsU2Nyb2xsSGVpZ2h0KCkge1xyXG4gICAgY29uc3QgeyBoZWlnaHQ6IHZpZXdwb3J0SGVpZ2h0IH0gPSB0aGlzLl8kdmlld3BvcnRCb3VuZHMuZ2V0VmFsdWUoKSxcclxuICAgICAgdG90YWxTaXplID0gdGhpcy5fdG90YWxTaXplLFxyXG4gICAgICBpc1ZlcnRpY2FsID0gdGhpcy5fJGRpcmVjdGlvbi5nZXRWYWx1ZSgpID09PSBWRVJUSUNBTDtcclxuICAgIHJldHVybiBpc1ZlcnRpY2FsID8gdG90YWxTaXplIDwgdmlld3BvcnRIZWlnaHQgPyAwIDogdG90YWxTaXplIC0gdmlld3BvcnRIZWlnaHQgOiB0aGlzLnNjcm9sbEhlaWdodDtcclxuICB9XHJcblxyXG4gIGdldCBhY3R1YWxTY3JvbGxXaWR0aCgpIHtcclxuICAgIGNvbnN0IHsgd2lkdGg6IHZpZXdwb3J0V2lkdGggfSA9IHRoaXMuXyR2aWV3cG9ydEJvdW5kcy5nZXRWYWx1ZSgpLFxyXG4gICAgICB0b3RhbFNpemUgPSB0aGlzLl90b3RhbFNpemUsXHJcbiAgICAgIGlzVmVydGljYWwgPSB0aGlzLl8kZGlyZWN0aW9uLmdldFZhbHVlKCkgPT09IFZFUlRJQ0FMO1xyXG4gICAgcmV0dXJuIGlzVmVydGljYWwgPyB0aGlzLnNjcm9sbFdpZHRoIDogdG90YWxTaXplIDwgdmlld3BvcnRXaWR0aCA/IDAgOiB0b3RhbFNpemUgLSB2aWV3cG9ydFdpZHRoO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYWN0dWFsWDogbnVtYmVyID0gMDtcclxuICBnZXQgYWN0dWFsU2Nyb2xsTGVmdCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9hY3R1YWxYO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYWN0dWFsWTogbnVtYmVyID0gMDtcclxuICBnZXQgYWN0dWFsU2Nyb2xsVG9wKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FjdHVhbFk7XHJcbiAgfVxyXG5cclxuICBnZXQgc2Nyb2xsTGVmdCgpIHtcclxuICAgIHJldHVybiB0aGlzLl94O1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNjcm9sbFRvcCgpIHtcclxuICAgIHJldHVybiB0aGlzLl95O1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNjcm9sbFdpZHRoKCkge1xyXG4gICAgY29uc3QgeyB3aWR0aDogdmlld3BvcnRXaWR0aCB9ID0gdGhpcy5fJHZpZXdwb3J0Qm91bmRzLmdldFZhbHVlKCksXHJcbiAgICAgIGFjdHVhbFZpZXdwb3J0V2lkdGggPSB2aWV3cG9ydFdpZHRoLFxyXG4gICAgICB7IHdpZHRoOiBjb250ZW50V2lkdGggfSA9IHRoaXMuXyRjb250ZW50Qm91bmRzLmdldFZhbHVlKCk7XHJcbiAgICByZXR1cm4gY29udGVudFdpZHRoIDwgYWN0dWFsVmlld3BvcnRXaWR0aCA/IDAgOiAoY29udGVudFdpZHRoIC0gYWN0dWFsVmlld3BvcnRXaWR0aCk7XHJcbiAgfVxyXG5cclxuICBnZXQgc2Nyb2xsSGVpZ2h0KCkge1xyXG4gICAgY29uc3QgeyBoZWlnaHQ6IHZpZXdwb3J0SGVpZ2h0IH0gPSB0aGlzLl8kdmlld3BvcnRCb3VuZHMuZ2V0VmFsdWUoKSxcclxuICAgICAgYWN0dWFsVmlld3BvcnRIZWlnaHQgPSB2aWV3cG9ydEhlaWdodCxcclxuICAgICAgeyBoZWlnaHQ6IGNvbnRlbnRIZWlnaHQgfSA9IHRoaXMuXyRjb250ZW50Qm91bmRzLmdldFZhbHVlKCk7XHJcbiAgICByZXR1cm4gY29udGVudEhlaWdodCA8IGFjdHVhbFZpZXdwb3J0SGVpZ2h0ID8gMCA6IChjb250ZW50SGVpZ2h0IC0gYWN0dWFsVmlld3BvcnRIZWlnaHQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdmVsb2NpdHk6IG51bWJlciA9IDA7XHJcblxyXG4gIHByaXZhdGUgXyR2aWV3cG9ydEJvdW5kcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVNpemU+KHsgd2lkdGg6IDAsIGhlaWdodDogMCB9KTtcclxuICByZWFkb25seSAkdmlld3BvcnRCb3VuZHMgPSB0aGlzLl8kdmlld3BvcnRCb3VuZHMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRjb250ZW50Qm91bmRzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJU2l6ZT4oeyB3aWR0aDogMCwgaGVpZ2h0OiAwIH0pO1xyXG4gIHJlYWRvbmx5ICRjb250ZW50Qm91bmRzID0gdGhpcy5fJGNvbnRlbnRCb3VuZHMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3ZpZXdwb3J0UmVzaXplT2JzZXJ2ZXI6IFJlc2l6ZU9ic2VydmVyO1xyXG5cclxuICBwcml2YXRlIF9vblJlc2l6ZVZpZXdwb3J0SGFuZGxlciA9ICgpID0+IHtcclxuICAgIGNvbnN0IHZpZXdwb3J0ID0gdGhpcy5zY3JvbGxWaWV3cG9ydD8ubmF0aXZlRWxlbWVudDtcclxuICAgIGlmICh2aWV3cG9ydCkge1xyXG4gICAgICB0aGlzLl8kdmlld3BvcnRCb3VuZHMubmV4dCh7IHdpZHRoOiB2aWV3cG9ydC5vZmZzZXRXaWR0aCwgaGVpZ2h0OiB2aWV3cG9ydC5vZmZzZXRIZWlnaHQgfSk7XHJcbiAgICAgIHRoaXMudXBkYXRlU2Nyb2xsQmFyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jb250ZW50UmVzaXplT2JzZXJ2ZXI6IFJlc2l6ZU9ic2VydmVyO1xyXG5cclxuICBwcml2YXRlIF9vblJlc2l6ZUNvbnRlbnRIYW5kbGVyID0gKCkgPT4ge1xyXG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuc2Nyb2xsQ29udGVudD8ubmF0aXZlRWxlbWVudDtcclxuICAgIGlmIChjb250ZW50KSB7XHJcbiAgICAgIHRoaXMuXyRjb250ZW50Qm91bmRzLm5leHQoeyB3aWR0aDogY29udGVudC5vZmZzZXRXaWR0aCwgaGVpZ2h0OiBjb250ZW50Lm9mZnNldEhlaWdodCB9KTtcclxuICAgICAgdGhpcy51cGRhdGVTY3JvbGxCYXIoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3VwZGF0ZVNjcm9sbEJhcklkOiBudW1iZXIgfCB1bmRlZmluZWQ7XHJcblxyXG4gIHByaXZhdGUgX2Rlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XHJcblxyXG4gIHByaXZhdGUgX2FuaW1hdGlvbklkOiBudW1iZXIgPSAtMTtcclxuXHJcbiAgcHJpdmF0ZSBfYW5pbWF0aW9uSWQxOiBudW1iZXIgPSAtMTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfc2VydmljZTogTmdWaXJ0dWFsTGlzdFNlcnZpY2UpIHtcclxuICAgIHRoaXMuX3NlcnZpY2UuJGxhbmdUZXh0RGlyLnBpcGUoXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl8kbGFuZ1RleHREaXIubmV4dCh2KTtcclxuICAgICAgfSlcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy5fdmlld3BvcnRSZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcih0aGlzLl9vblJlc2l6ZVZpZXdwb3J0SGFuZGxlcik7XHJcbiAgICB0aGlzLl9jb250ZW50UmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIodGhpcy5fb25SZXNpemVDb250ZW50SGFuZGxlcik7XHJcblxyXG4gICAgdGhpcy4kZGlyZWN0aW9uLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxyXG4gICAgICB0YXAoZGlyZWN0aW9uID0+IHtcclxuICAgICAgICB0aGlzLl8kaXNWZXJ0aWNhbC5uZXh0KGRpcmVjdGlvbiA9PT0gU2Nyb2xsZXJEaXJlY3Rpb24uVkVSVElDQUwpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJHZpZXdwb3J0ID0gdGhpcy4kdmlld0luaXRpYWxpemVkLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxyXG4gICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4gb2YodGhpcy5zY3JvbGxWaWV3cG9ydCkucGlwZShcclxuICAgICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICAgIG1hcCh2ID0+IHYhLm5hdGl2ZUVsZW1lbnQpLFxyXG4gICAgICApKSxcclxuICAgICksXHJcbiAgICAgICRjb250ZW50ID0gdGhpcy4kdmlld0luaXRpYWxpemVkLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXHJcbiAgICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gb2YodGhpcy5zY3JvbGxDb250ZW50KS5waXBlKFxyXG4gICAgICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgICAgIG1hcCh2ID0+IHYhLm5hdGl2ZUVsZW1lbnQpLFxyXG4gICAgICAgICkpLFxyXG4gICAgICApLFxyXG4gICAgICAkdXBkYXRlU2Nyb2xsQmFyID0gdGhpcy4kdXBkYXRlU2Nyb2xsQmFyO1xyXG5cclxuICAgIGNvbnN0IHVwZGF0ZVNjcm9sbEJhckhhbmRsZXIgPSAoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHRoaXMuXyRkaXJlY3Rpb24uZ2V0VmFsdWUoKSxcclxuICAgICAgICBpc1ZlcnRpY2FsID0gdGhpcy5fJGlzVmVydGljYWwuZ2V0VmFsdWUoKSxcclxuICAgICAgICBzdGFydE9mZnNldCA9IHRoaXMuXyRzdGFydE9mZnNldC5nZXRWYWx1ZSgpLFxyXG4gICAgICAgIGVuZE9mZnNldCA9IHRoaXMuXyRlbmRPZmZzZXQuZ2V0VmFsdWUoKSxcclxuICAgICAgICBzY3JvbGxDb250ZW50ID0gdGhpcy5zY3JvbGxDb250ZW50Py5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50LFxyXG4gICAgICAgIHNjcm9sbFZpZXdwb3J0ID0gdGhpcy5zY3JvbGxWaWV3cG9ydD8ubmF0aXZlRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICB0aHVtYlNpemUsXHJcbiAgICAgICAgICB0aHVtYlBvc2l0aW9uLFxyXG4gICAgICAgICAgdGh1bWJHcmFkaWVudFBvc2l0aW9ucyxcclxuICAgICAgICB9ID0gdGhpcy5fc2Nyb2xsQm94LmNhbGN1bGF0ZVNjcm9sbCh7XHJcbiAgICAgICAgICBkaXJlY3Rpb24sXHJcbiAgICAgICAgICB2aWV3cG9ydFdpZHRoOiBzY3JvbGxWaWV3cG9ydC5vZmZzZXRXaWR0aCwgdmlld3BvcnRIZWlnaHQ6IHNjcm9sbFZpZXdwb3J0Lm9mZnNldEhlaWdodCxcclxuICAgICAgICAgIGNvbnRlbnRXaWR0aDogc2Nyb2xsQ29udGVudC5vZmZzZXRXaWR0aCwgY29udGVudEhlaWdodDogc2Nyb2xsQ29udGVudC5vZmZzZXRIZWlnaHQsXHJcbiAgICAgICAgICBzdGFydE9mZnNldCxcclxuICAgICAgICAgIGVuZE9mZnNldCxcclxuICAgICAgICAgIHBvc2l0aW9uWDogdGhpcy5feCxcclxuICAgICAgICAgIHBvc2l0aW9uWTogdGhpcy5feSxcclxuICAgICAgICAgIG1pblNpemU6IHRoaXMuXyRzY3JvbGxiYXJNaW5TaXplLmdldFZhbHVlKCksXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLl8kdGh1bWJHcmFkaWVudFBvc2l0aW9ucy5uZXh0KHRodW1iR3JhZGllbnRQb3NpdGlvbnMpO1xyXG4gICAgICB0aGlzLl8kdGh1bWJTaXplLm5leHQodGh1bWJTaXplKTtcclxuICAgICAgdGhpcy5fJHRodW1iUG9zaXRpb24ubmV4dCh0aHVtYlBvc2l0aW9uKTtcclxuICAgICAgdGhpcy5fJHRodW1iU2hvdy5uZXh0KGlzVmVydGljYWwgPyB0aGlzLnNjcm9sbEhlaWdodCA+IDAgOiB0aGlzLnNjcm9sbFdpZHRoID4gMCk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHVwZGF0ZVNjcm9sbEJhclJBRkhhbmRsZXIgPSAodGltZTogRE9NSGlnaFJlc1RpbWVTdGFtcCkgPT4ge1xyXG4gICAgICB1cGRhdGVTY3JvbGxCYXJIYW5kbGVyKCk7XHJcbiAgICB9O1xyXG5cclxuICAgICR1cGRhdGVTY3JvbGxCYXIucGlwZShcclxuICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXHJcbiAgICAgIGRlYm91bmNlVGltZSgwKSxcclxuICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICBjb25zdCB1cGRhdGVTY3JvbGxCYXJJZCA9IHRoaXMuX3VwZGF0ZVNjcm9sbEJhcklkO1xyXG4gICAgICAgIGlmICh1cGRhdGVTY3JvbGxCYXJJZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh1cGRhdGVTY3JvbGxCYXJJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3VwZGF0ZVNjcm9sbEJhcklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHVwZGF0ZVNjcm9sbEJhclJBRkhhbmRsZXIpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJHZpZXdwb3J0LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxyXG4gICAgICB0YXAodmlld3BvcnQgPT4ge1xyXG4gICAgICAgIHRoaXMuX3ZpZXdwb3J0UmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh2aWV3cG9ydCk7XHJcbiAgICAgICAgdGhpcy5fb25SZXNpemVWaWV3cG9ydEhhbmRsZXIoKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRjb250ZW50LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxyXG4gICAgICB0YXAoY29udGVudCA9PiB7XHJcbiAgICAgICAgdGhpcy5fY29udGVudFJlc2l6ZU9ic2VydmVyLm9ic2VydmUoY29udGVudCk7XHJcbiAgICAgICAgdGhpcy5fb25SZXNpemVDb250ZW50SGFuZGxlcigpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGNvbnRlbnQucGlwZShcclxuICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXHJcbiAgICAgIHN3aXRjaE1hcChjb250ZW50ID0+IHtcclxuICAgICAgICByZXR1cm4gZnJvbUV2ZW50PFdoZWVsRXZlbnQ+KGNvbnRlbnQsIFdIRUVMLCB7IHBhc3NpdmU6IGZhbHNlIH0pLnBpcGUoXHJcbiAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZiksXHJcbiAgICAgICAgICB0YXAoZSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLl8kaXNWZXJ0aWNhbC5nZXRWYWx1ZSgpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jZGtTY3JvbGxhYmxlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jZGtTY3JvbGxhYmxlLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQoV0hFRUxfRVZFTlQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpc1ZlcnRpY2FsKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuX3kgPj0gMCAmJiB0aGlzLl95IDw9IHRoaXMuc2Nyb2xsSGVpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5feCA+PSAwICYmIHRoaXMuX3ggPD0gdGhpcy5zY3JvbGxXaWR0aCkge1xyXG4gICAgICAgICAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zdG9wU2Nyb2xsaW5nKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHNjcm9sbFNpemUgPSBpc1ZlcnRpY2FsID8gdGhpcy5zY3JvbGxIZWlnaHQgOiB0aGlzLnNjcm9sbFdpZHRoLFxyXG4gICAgICAgICAgICAgIHN0YXJ0UG9zID0gaXNWZXJ0aWNhbCA/IHRoaXMueSA6IHRoaXMueCxcclxuICAgICAgICAgICAgICBkZWx0YSA9IGlzVmVydGljYWwgPyBlLmRlbHRhWSA6IGUuZGVsdGFYLCBkcCA9IHN0YXJ0UG9zICsgZGVsdGEsIHBvc2l0aW9uID0gZHAgPCAwID8gMCA6IGRwID4gc2Nyb2xsU2l6ZSA/IHNjcm9sbFNpemUgOiBkcDtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxUbyh7IFtpc1ZlcnRpY2FsID8gVE9QIDogTEVGVF06IHBvc2l0aW9uLCBiZWhhdmlvcjogSU5TVEFOVCwgdXNlckFjdGlvbjogdHJ1ZSB9KTtcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb25zdCAkbW91c2VVcCA9IGZyb21FdmVudDxNb3VzZUV2ZW50Pih3aW5kb3csIE1PVVNFX1VQLCB7IHBhc3NpdmU6IGZhbHNlIH0pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxyXG4gICAgKSxcclxuICAgICAgJG1vdXNlRHJhZ0NhbmNlbCA9ICRtb3VzZVVwLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXHJcbiAgICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuX2lzTW92aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLl8kZ3JhYmJpbmcubmV4dChmYWxzZSk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICk7XHJcblxyXG4gICAgJGNvbnRlbnQucGlwZShcclxuICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXHJcbiAgICAgIHN3aXRjaE1hcChjb250ZW50ID0+IHtcclxuICAgICAgICByZXR1cm4gZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGNvbnRlbnQsIE1PVVNFX0RPV04sIHsgcGFzc2l2ZTogZmFsc2UgfSkucGlwZShcclxuICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSxcclxuICAgICAgICAgIHN3aXRjaE1hcChlID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2Nyb2xsQmFyKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zY3JvbGxCYXIuc3RvcFNjcm9sbGluZygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcFNjcm9sbGluZygpO1xyXG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgICAgaWYgKHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoSU5URVJBQ1RJVkUpKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgaXNWZXJ0aWNhbCA9IHRoaXMuXyRpc1ZlcnRpY2FsLmdldFZhbHVlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2lzTW92aW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5fJGdyYWJiaW5nLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0UG9zID0gaXNWZXJ0aWNhbCA/IHRoaXMueSA6IHRoaXMueDtcclxuICAgICAgICAgICAgbGV0IHByZXZQb3MgPSBzdGFydFBvcywgcHJldkNsaWVudFBvc2l0aW9uID0gMCwgc3RhcnRQb3NEZWx0YSA9IDA7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0Q2xpZW50UG9zID0gaXNWZXJ0aWNhbCA/IGUuY2xpZW50WSA6IGUuY2xpZW50WCxcclxuICAgICAgICAgICAgICBvZmZzZXRzID0gbmV3IEFycmF5PFtudW1iZXIsIG51bWJlcl0+KCksIHZlbG9jaXRpZXMgPSBuZXcgQXJyYXk8W251bWJlciwgbnVtYmVyXT4oKTtcclxuICAgICAgICAgICAgbGV0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiBmcm9tRXZlbnQ8TW91c2VFdmVudD4od2luZG93LCBNT1VTRV9NT1ZFLCB7IHBhc3NpdmU6IGZhbHNlIH0pLnBpcGUoXHJcbiAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpLFxyXG4gICAgICAgICAgICAgIHRha2VVbnRpbCgkbW91c2VEcmFnQ2FuY2VsKSxcclxuICAgICAgICAgICAgICB0YXAoZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgc3dpdGNoTWFwKGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY1BvcyA9IGlzVmVydGljYWwgPyB0aGlzLnkgOiB0aGlzLng7XHJcbiAgICAgICAgICAgICAgICBpZiAoY1BvcyAhPT0gcHJldlBvcykge1xyXG4gICAgICAgICAgICAgICAgICBzdGFydFBvc0RlbHRhICs9IGNQb3MgLSBwcmV2UG9zO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFBvcyA9IGlzVmVydGljYWwgPyBlLmNsaWVudFkgOiBlLmNsaWVudFgsXHJcbiAgICAgICAgICAgICAgICAgIHNjcm9sbFNpemUgPSBpc1ZlcnRpY2FsID8gdGhpcy5zY3JvbGxIZWlnaHQgOiB0aGlzLnNjcm9sbFdpZHRoLCBkZWx0YSA9IHN0YXJ0Q2xpZW50UG9zIC0gY3VycmVudFBvcyxcclxuICAgICAgICAgICAgICAgICAgZHAgPSBzdGFydFBvcyArIHN0YXJ0UG9zRGVsdGEgKyBkZWx0YSwgcG9zaXRpb24gPSBNYXRoLnJvdW5kKGRwIDwgMCA/IDAgOiBkcCA+IHNjcm9sbFNpemUgPyBzY3JvbGxTaXplIDogZHApLCBlbmRUaW1lID0gRGF0ZS5ub3coKSxcclxuICAgICAgICAgICAgICAgICAgdGltZXN0YW1wID0gZW5kVGltZSAtIHN0YXJ0VGltZSwgc2Nyb2xsRGVsdGEgPSBwcmV2Q2xpZW50UG9zaXRpb24gPT09IDAgPyAwIDogcHJldkNsaWVudFBvc2l0aW9uIC0gY3VycmVudFBvcyxcclxuICAgICAgICAgICAgICAgICAgeyB2MCB9ID0gdGhpcy5jYWxjdWxhdGVWZWxvY2l0eShvZmZzZXRzLCBzY3JvbGxEZWx0YSwgdGltZXN0YW1wKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlQWNjZWxlcmF0aW9uKHZlbG9jaXRpZXMsIHYwLCB0aW1lc3RhbXApO1xyXG4gICAgICAgICAgICAgICAgcHJldkNsaWVudFBvc2l0aW9uID0gY3VycmVudFBvcztcclxuICAgICAgICAgICAgICAgIHByZXZQb3MgPSBwb3NpdGlvbjtcclxuICAgICAgICAgICAgICAgIHRoaXMubW92ZShpc1ZlcnRpY2FsLCBwb3NpdGlvbiwgZmFsc2UsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgc3RhcnRUaW1lID0gZW5kVGltZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByYWNlKFtmcm9tRXZlbnQ8TW91c2VFdmVudD4od2luZG93LCBNT1VTRV9VUCwgeyBwYXNzaXZlOiBmYWxzZSB9KSwgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGNvbnRlbnQsIE1PVVNFX1VQLCB7IHBhc3NpdmU6IGZhbHNlIH0pXSkucGlwZShcclxuICAgICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpLFxyXG4gICAgICAgICAgICAgICAgICB0YXAoZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZFRpbWUgPSBEYXRlLm5vdygpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wID0gZW5kVGltZSAtIHN0YXJ0VGltZSxcclxuICAgICAgICAgICAgICAgICAgICAgIHsgdjAgfSA9IHRoaXMuY2FsY3VsYXRlVmVsb2NpdHkob2Zmc2V0cywgc2Nyb2xsRGVsdGEsIHRpbWVzdGFtcCksXHJcbiAgICAgICAgICAgICAgICAgICAgICB7IGEwIH0gPSB0aGlzLmNhbGN1bGF0ZUFjY2VsZXJhdGlvbih2ZWxvY2l0aWVzLCB2MCwgdGltZXN0YW1wKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pc01vdmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuXyRncmFiYmluZy5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vdmVXaXRoQWNjZWxlcmF0aW9uKGlzVmVydGljYWwsIHBvc2l0aW9uLCAwLCB2MCwgYTApO1xyXG4gICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb25zdCAkdG91Y2hVcCA9IGZyb21FdmVudDxUb3VjaEV2ZW50Pih3aW5kb3csIFRPVUNIX0VORCwgeyBwYXNzaXZlOiBmYWxzZSB9KS5waXBlKFxyXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICksXHJcbiAgICAgICR0b3VjaENhbmNlbGVyID0gJHRvdWNoVXAucGlwZShcclxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5faXNNb3ZpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuXyRncmFiYmluZy5uZXh0KGZhbHNlKTtcclxuICAgICAgICB9KSxcclxuICAgICAgKTtcclxuXHJcbiAgICAkY29udGVudC5waXBlKFxyXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICAgc3dpdGNoTWFwKGNvbnRlbnQgPT4ge1xyXG4gICAgICAgIHJldHVybiBmcm9tRXZlbnQ8VG91Y2hFdmVudD4oY29udGVudCwgVE9VQ0hfU1RBUlQsIHsgcGFzc2l2ZTogZmFsc2UgfSkucGlwZShcclxuICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSxcclxuICAgICAgICAgIHN3aXRjaE1hcChlID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2Nyb2xsQmFyKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zY3JvbGxCYXIuc3RvcFNjcm9sbGluZygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcFNjcm9sbGluZygpO1xyXG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgICAgaWYgKHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoSU5URVJBQ1RJVkUpKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgaXNWZXJ0aWNhbCA9IHRoaXMuXyRpc1ZlcnRpY2FsLmdldFZhbHVlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2lzTW92aW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5fJGdyYWJiaW5nLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0UG9zID0gaXNWZXJ0aWNhbCA/IHRoaXMueSA6IHRoaXMueDtcclxuICAgICAgICAgICAgbGV0IHByZXZQb3MgPSBzdGFydFBvcywgcHJldkNsaWVudFBvc2l0aW9uID0gMCwgc3RhcnRQb3NEZWx0YSA9IDA7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0Q2xpZW50UG9zID0gaXNWZXJ0aWNhbCA/IGUudG91Y2hlc1tlLnRvdWNoZXMubGVuZ3RoIC0gMV0uY2xpZW50WSA6IGUudG91Y2hlc1tlLnRvdWNoZXMubGVuZ3RoIC0gMV0uY2xpZW50WCxcclxuICAgICAgICAgICAgICBvZmZzZXRzID0gbmV3IEFycmF5PFtudW1iZXIsIG51bWJlcl0+KCksIHZlbG9jaXRpZXMgPSBuZXcgQXJyYXk8W251bWJlciwgbnVtYmVyXT4oKTtcclxuICAgICAgICAgICAgbGV0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiBmcm9tRXZlbnQ8VG91Y2hFdmVudD4od2luZG93LCBUT1VDSF9NT1ZFLCB7IHBhc3NpdmU6IGZhbHNlIH0pLnBpcGUoXHJcbiAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpLFxyXG4gICAgICAgICAgICAgIHRha2VVbnRpbCgkdG91Y2hDYW5jZWxlciksXHJcbiAgICAgICAgICAgICAgdGFwKGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgIHN3aXRjaE1hcChlID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNQb3MgPSBpc1ZlcnRpY2FsID8gdGhpcy55IDogdGhpcy54O1xyXG4gICAgICAgICAgICAgICAgaWYgKGNQb3MgIT09IHByZXZQb3MpIHtcclxuICAgICAgICAgICAgICAgICAgc3RhcnRQb3NEZWx0YSArPSBjUG9zIC0gcHJldlBvcztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRQb3MgPSBpc1ZlcnRpY2FsID8gZS50b3VjaGVzW2UudG91Y2hlcy5sZW5ndGggLSAxXS5jbGllbnRZIDogZS50b3VjaGVzW2UudG91Y2hlcy5sZW5ndGggLSAxXS5jbGllbnRYLFxyXG4gICAgICAgICAgICAgICAgICBzY3JvbGxTaXplID0gaXNWZXJ0aWNhbCA/IHRoaXMuc2Nyb2xsSGVpZ2h0IDogdGhpcy5zY3JvbGxXaWR0aCwgZGVsdGEgPSBzdGFydENsaWVudFBvcyAtIGN1cnJlbnRQb3MsXHJcbiAgICAgICAgICAgICAgICAgIGRwID0gc3RhcnRQb3MgKyBzdGFydFBvc0RlbHRhICsgZGVsdGEsIHBvc2l0aW9uID0gTWF0aC5yb3VuZChkcCA8IDAgPyAwIDogZHAgPiBzY3JvbGxTaXplID8gc2Nyb2xsU2l6ZSA6IGRwKSwgZW5kVGltZSA9IERhdGUubm93KCksXHJcbiAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcCA9IGVuZFRpbWUgLSBzdGFydFRpbWUsIHNjcm9sbERlbHRhID0gcHJldkNsaWVudFBvc2l0aW9uID09PSAwID8gMCA6IHByZXZDbGllbnRQb3NpdGlvbiAtIGN1cnJlbnRQb3MsXHJcbiAgICAgICAgICAgICAgICAgIHsgdjAgfSA9IHRoaXMuY2FsY3VsYXRlVmVsb2NpdHkob2Zmc2V0cywgc2Nyb2xsRGVsdGEsIHRpbWVzdGFtcCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZUFjY2VsZXJhdGlvbih2ZWxvY2l0aWVzLCB2MCwgdGltZXN0YW1wKTtcclxuICAgICAgICAgICAgICAgIHByZXZDbGllbnRQb3NpdGlvbiA9IGN1cnJlbnRQb3M7XHJcbiAgICAgICAgICAgICAgICBwcmV2UG9zID0gcG9zaXRpb247XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vdmUoaXNWZXJ0aWNhbCwgcG9zaXRpb24sIGZhbHNlLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIHN0YXJ0VGltZSA9IGVuZFRpbWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmFjZShbZnJvbUV2ZW50PFRvdWNoRXZlbnQ+KHdpbmRvdywgVE9VQ0hfRU5ELCB7IHBhc3NpdmU6IGZhbHNlIH0pLCBmcm9tRXZlbnQ8VG91Y2hFdmVudD4oY29udGVudCwgVE9VQ0hfRU5ELCB7IHBhc3NpdmU6IGZhbHNlIH0pXSkucGlwZShcclxuICAgICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpLFxyXG4gICAgICAgICAgICAgICAgICB0YXAoZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZFRpbWUgPSBEYXRlLm5vdygpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wID0gZW5kVGltZSAtIHN0YXJ0VGltZSxcclxuICAgICAgICAgICAgICAgICAgICAgIHsgdjAgfSA9IHRoaXMuY2FsY3VsYXRlVmVsb2NpdHkob2Zmc2V0cywgc2Nyb2xsRGVsdGEsIHRpbWVzdGFtcCksXHJcbiAgICAgICAgICAgICAgICAgICAgICB7IGEwIH0gPSB0aGlzLmNhbGN1bGF0ZUFjY2VsZXJhdGlvbih2ZWxvY2l0aWVzLCB2MCwgdGltZXN0YW1wKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pc01vdmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuXyRncmFiYmluZy5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vdmVXaXRoQWNjZWxlcmF0aW9uKGlzVmVydGljYWwsIHBvc2l0aW9uLCB0aGlzLl92ZWxvY2l0eSwgdjAsIGEwKTtcclxuICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29tYmluZUxhdGVzdChbdGhpcy4kY2xhc3NlcywgdGhpcy4kZGlyZWN0aW9uLCB0aGlzLiRncmFiYmluZ10pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxyXG4gICAgICB0YXAoKFtjbGFzc2VzLCBkaXJlY3Rpb24sIGdyYWJiaW5nXSkgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRhY3R1YWxDbGFzc2VzLm5leHQoeyAuLi5jbGFzc2VzLCBbZGlyZWN0aW9uXTogdHJ1ZSwgZ3JhYmJpbmcgfSk7XHJcbiAgICAgICAgdGhpcy5fJGNvbnRhaW5lckNsYXNzZXMubmV4dCh7IFtkaXJlY3Rpb25dOiB0cnVlLCBncmFiYmluZyB9KTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5hZnRlclZpZXdJbml0KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLl8kdmlld0luaXRpYWxpemVkLm5leHQodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNhbGN1bGF0ZVZlbG9jaXR5KG9mZnNldHM6IEFycmF5PFtudW1iZXIsIG51bWJlcl0+LCBkZWx0YTogbnVtYmVyLCB0aW1lc3RhbXA6IG51bWJlciwgaW5kZXhPZmZzZXQ6IG51bWJlciA9IDEwKSB7XHJcbiAgICBvZmZzZXRzLnB1c2goW2RlbHRhLCB0aW1lc3RhbXAgPCBNSU5fVElNRVNUQU1QID8gTUlOX1RJTUVTVEFNUCA6IHRpbWVzdGFtcF0pO1xyXG5cclxuICAgIGNvbnN0IGxlbiA9IG9mZnNldHMubGVuZ3RoLCBzdGFydEluZGV4ID0gbGVuID4gaW5kZXhPZmZzZXQgPyBsZW4gLSBpbmRleE9mZnNldCA6IDAsIGxhc3RWU2lnbiA9IGNhbGN1bGF0ZURpcmVjdGlvbihvZmZzZXRzKTtcclxuICAgIGxldCB2U3VtID0gMDtcclxuICAgIGZvciAobGV0IGkgPSBzdGFydEluZGV4LCBsID0gb2Zmc2V0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgY29uc3QgcDAgPSBvZmZzZXRzW2ldO1xyXG4gICAgICBpZiAobGFzdFZTaWduICE9PSBNYXRoLnNpZ24ocDBbMF0pKSB7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHYwID0gKHAwWzFdICE9PSAwID8gbGFzdFZTaWduICogTWF0aC5hYnMocDBbMF0gLyBwMFsxXSkgKiBTUEVFRF9TQ0FMRSA6IDApO1xyXG4gICAgICB2U3VtICs9IE1hdGguc2lnbih2MCkgKiBNYXRoLnBvdyh2MCwgNCkgKiAuMDAzO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGwgPSBNYXRoLm1pbihvZmZzZXRzLmxlbmd0aCwgaW5kZXhPZmZzZXQpLCB2MCA9IGwgPiAwID8gKHZTdW0gLyBsKSA6IDA7XHJcbiAgICByZXR1cm4geyB2MCB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYWxjdWxhdGVBY2NlbGVyYXRpb24odmVsb2NpdGllczogQXJyYXk8W251bWJlciwgbnVtYmVyXT4sIGRlbHRhOiBudW1iZXIsIHRpbWVzdGFtcDogbnVtYmVyLCBpbmRleE9mZnNldDogbnVtYmVyID0gMTApIHtcclxuICAgIHZlbG9jaXRpZXMucHVzaChbZGVsdGEsIHRpbWVzdGFtcCA8IE1JTl9USU1FU1RBTVAgPyBNSU5fVElNRVNUQU1QIDogdGltZXN0YW1wXSk7XHJcbiAgICBjb25zdCBsZW4gPSB2ZWxvY2l0aWVzLmxlbmd0aCwgc3RhcnRJbmRleCA9IGxlbiA+IGluZGV4T2Zmc2V0ID8gbGVuIC0gaW5kZXhPZmZzZXQgOiAwO1xyXG4gICAgbGV0IGFTdW0gPSAwLCBwcmV2VjA6IFtudW1iZXIsIG51bWJlcl0gfCB1bmRlZmluZWQsIGl0ZXJhdGlvbiA9IDAsIGxhc3RWU2lnbiA9IGNhbGN1bGF0ZURpcmVjdGlvbih2ZWxvY2l0aWVzKTtcclxuICAgIGZvciAobGV0IGkgPSBzdGFydEluZGV4LCBsID0gdmVsb2NpdGllcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgY29uc3QgdjAwID0gcHJldlYwLCB2MDEgPSB2ZWxvY2l0aWVzW2ldO1xyXG4gICAgICBpZiAobGFzdFZTaWduICE9PSBNYXRoLnNpZ24odjAxWzBdKSkge1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh2MDApIHtcclxuICAgICAgICBjb25zdCBhMCA9IHRpbWVzdGFtcCA8IE1BWF9WRUxPQ0lUWV9USU1FU1RBTVAgPyAodjAwWzFdICE9PSAwID8gKGxhc3RWU2lnbiAqIE1hdGguYWJzKE1hdGguYWJzKHYwMVswXSkgLSBNYXRoLmFicyh2MDBbMF0pKSkgLyBNYXRoLmFicyh2MDBbMV0pIDogMCkgOiAwO1xyXG4gICAgICAgIGFTdW0gKz0gYTA7XHJcbiAgICAgICAgcHJldlYwID0gdjAxO1xyXG4gICAgICB9XHJcbiAgICAgIHByZXZWMCA9IHYwMTtcclxuICAgICAgaXRlcmF0aW9uKys7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYTAgPSBhU3VtICogRlJJQ1RJT05fRk9SQ0U7XHJcbiAgICByZXR1cm4geyBhMCB9O1xyXG4gIH1cclxuXHJcbiAgc3RvcFNjcm9sbGluZygpIHtcclxuICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX2FuaW1hdGlvbklkKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbW92ZShpc1ZlcnRpY2FsOiBib29sZWFuLCBwb3NpdGlvbjogbnVtYmVyLCBibGVuZGluZzogYm9vbGVhbiA9IGZhbHNlLCB1c2VyQWN0aW9uOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIHRoaXMuc2Nyb2xsVG8oeyBbaXNWZXJ0aWNhbCA/IFRPUCA6IExFRlRdOiBwb3NpdGlvbiwgYmVoYXZpb3I6IElOU1RBTlQsIGJsZW5kaW5nLCB1c2VyQWN0aW9uIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtb3ZlV2l0aEFjY2VsZXJhdGlvbihpc1ZlcnRpY2FsOiBib29sZWFuLCBwb3NpdGlvbjogbnVtYmVyLCB2MDogbnVtYmVyLCB2OiBudW1iZXIsIGEwOiBudW1iZXIpIHtcclxuICAgIGlmIChhMCAhPT0gMCkge1xyXG4gICAgICBjb25zdCBkdlNpZ24gPSBNYXRoLnNpZ24odiksXHJcbiAgICAgICAgZHVyYXRpb24gPSBEVVJBVElPTiwgbWF4RHVyYXRpb24gPSBNQVhfRFVSQVRJT04sXHJcbiAgICAgICAgbWF4RGlzdGFuY2UgPSBkdlNpZ24gKiBNQVhfRElTVCwgcyA9IChkdlNpZ24gKiBNYXRoLmFicygoYTAgKiBNYXRoLnBvdyhkdXJhdGlvbiwgMikpICogLjUpIC8gMTAwMCkgLyBNQVNTLFxyXG4gICAgICAgIGRpc3RhbmNlID0gTWF0aC5hYnMocykgPCBNQVhfRElTVCA/IHMgOiBtYXhEaXN0YW5jZSwgcG9zaXRpb25XaXRoVmVsb2NpdHkgPSBwb3NpdGlvbiArIGRpc3RhbmNlLFxyXG4gICAgICAgIHZtYXggPSBNYXRoLm1heChNYXRoLmFicyh2MCksIE1hdGguYWJzKHYpKSxcclxuICAgICAgICBhZCA9IE1hdGguYWJzKHZtYXggIT09IDAgPyBNYXRoLnNxcnQodm1heCkgOiAwKSAqIDEwIC8gTUFTUyxcclxuICAgICAgICBhRHVyYXRpb24gPSBhZCA8IG1heER1cmF0aW9uID8gYWQgOiBtYXhEdXJhdGlvbixcclxuICAgICAgICBzdGFydFBvc2l0aW9uID0gaXNWZXJ0aWNhbCA/IHRoaXMueSA6IHRoaXMueDtcclxuICAgICAgdGhpcy5hbmltYXRlKHN0YXJ0UG9zaXRpb24sIE1hdGgucm91bmQocG9zaXRpb25XaXRoVmVsb2NpdHkpLCBhRHVyYXRpb24sIGVhc2VPdXRRdWFkLCB0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFuaW1hdGUoc3RhcnRWYWx1ZTogbnVtYmVyLCBlbmRWYWx1ZTogbnVtYmVyLCBkdXJhdGlvbiA9IEFOSU1BVElPTl9EVVJBVElPTiwgZWFzaW5nRnVuY3Rpb246IEVhc2luZyA9IGVhc2VMaW5lYXIsIHVzZXJBY3Rpb246IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgdGhpcy5zdG9wU2Nyb2xsaW5nKCk7XHJcbiAgICBjb25zdCBzdGFydFRpbWUgPSBnZXRTdGFydFRpbWUoKSwgaXNWZXJ0aWNhbCA9IHRoaXMuXyRkaXJlY3Rpb24uZ2V0VmFsdWUoKSA9PT0gU2Nyb2xsZXJEaXJlY3Rpb24uVkVSVElDQUw7XHJcbiAgICBsZXQgaXNDYW5jZWxlZCA9IGZhbHNlLCBwcmV2UG9zID0gc3RhcnRWYWx1ZSwgc3RhcnQgPSBzdGFydFZhbHVlLCBzdGFydFBvc0RlbHRhID0gMCwgZGVsdGEgPSAwLCBwcmV2VGltZSA9IHN0YXJ0VGltZSxcclxuICAgICAgZGlmZiA9IE1hdGguYWJzKE1hdGguYWJzKGVuZFZhbHVlKSAtIE1hdGguYWJzKHN0YXJ0KSk7XHJcblxyXG4gICAgaWYgKGRpZmYgPCBNSU5fQU5JTUFURURfVkFMVUUpIHtcclxuICAgICAgaWYgKGlzVmVydGljYWwpIHtcclxuICAgICAgICB0aGlzLnkgPSBwcmV2UG9zID0gc3RhcnQgPSBlbmRWYWx1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnggPSBwcmV2UG9zID0gc3RhcnQgPSBlbmRWYWx1ZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKGlzVmVydGljYWwpIHtcclxuICAgICAgICB0aGlzLnkgPSBzdGFydDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnggPSBzdGFydDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBmaW5pc2hlZFZhbHVlID0gZW5kVmFsdWUsXHJcbiAgICAgIGlzRmluaXNoZWQgPSBmYWxzZTtcclxuXHJcbiAgICBjb25zdCBzdGVwID0gKGN1cnJlbnRUaW1lOiBudW1iZXIpID0+IHtcclxuICAgICAgaWYgKCEhaXNDYW5jZWxlZCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgY1BvcyA9IGlzVmVydGljYWwgPyB0aGlzLnkgOiB0aGlzLng7XHJcbiAgICAgIGxldCBzY3JvbGxEZWx0YSA9IDA7XHJcbiAgICAgIGlmIChjUG9zICE9PSBwcmV2UG9zKSB7XHJcbiAgICAgICAgc2Nyb2xsRGVsdGEgPSBjUG9zIC0gcHJldlBvcztcclxuICAgICAgICBzdGFydFBvc0RlbHRhICs9IHNjcm9sbERlbHRhO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBlbGFwc2VkID0gY3VycmVudFRpbWUgLSBzdGFydFRpbWUsXHJcbiAgICAgICAgcHJvZ3Jlc3MgPSBzdGFydCA9PT0gZW5kVmFsdWUgPyAxIDogTWF0aC5taW4oZHVyYXRpb24gPiAwID8gZWxhcHNlZCAvIGR1cmF0aW9uIDogMCwgMSksXHJcbiAgICAgICAgZWFzZWRQcm9ncmVzcyA9IGVhc2luZ0Z1bmN0aW9uKHByb2dyZXNzKSxcclxuICAgICAgICB2YWwgPSBzdGFydFBvc0RlbHRhICsgc3RhcnQgKyAoZmluaXNoZWRWYWx1ZSAtIHN0YXJ0KSAqIGVhc2VkUHJvZ3Jlc3MsXHJcbiAgICAgICAgc2Nyb2xsU2l6ZSA9IGlzVmVydGljYWwgPyB0aGlzLnNjcm9sbEhlaWdodCA6IHRoaXMuc2Nyb2xsV2lkdGgsXHJcbiAgICAgICAgYWN0dWFsU2Nyb2xsU2l6ZSA9IGlzVmVydGljYWwgPyB0aGlzLmFjdHVhbFNjcm9sbEhlaWdodCA6IHRoaXMuYWN0dWFsU2Nyb2xsV2lkdGgsXHJcbiAgICAgICAgY3VycmVudFZhbHVlID0gdmFsIDwgMCA/IDAgOiB2YWwgPiBzY3JvbGxTaXplID8gc2Nyb2xsU2l6ZSA6IHZhbCxcclxuICAgICAgICB0ID0gRGF0ZS5ub3coKTtcclxuXHJcbiAgICAgIGlzRmluaXNoZWQgPSAoY3VycmVudFZhbHVlID09PSBzY3JvbGxTaXplICYmIE1hdGgucm91bmQoc2Nyb2xsU2l6ZSkgPj0gTWF0aC5yb3VuZChhY3R1YWxTY3JvbGxTaXplKSkgfHxcclxuICAgICAgICBjdXJyZW50VmFsdWUgPT09IDAgfHwgcHJvZ3Jlc3MgPT09IDE7XHJcblxyXG4gICAgICBkZWx0YSA9IGN1cnJlbnRWYWx1ZSAtIHNjcm9sbERlbHRhIC0gcHJldlBvcztcclxuXHJcbiAgICAgIGNvbnN0IHRzID0gdCAtIHByZXZUaW1lLCB0aW1lc3RhbXAgPSB0cyA8IE1JTl9USU1FU1RBTVAgPyBNSU5fVElNRVNUQU1QIDogdHM7XHJcbiAgICAgIHRoaXMuX3ZlbG9jaXR5ID0gdGltZXN0YW1wID4gMCA/IGRlbHRhIC8gdGltZXN0YW1wIDogMDtcclxuXHJcbiAgICAgIHByZXZUaW1lID0gdDtcclxuICAgICAgcHJldlBvcyA9IGN1cnJlbnRWYWx1ZTtcclxuXHJcbiAgICAgIGNvbnN0IHNjcm9sbENvbnRlbnQgPSB0aGlzLnNjcm9sbENvbnRlbnQ/Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQ7XHJcbiAgICAgIGlmICghIXNjcm9sbENvbnRlbnQpIHtcclxuICAgICAgICBpZiAoaXNWZXJ0aWNhbCkge1xyXG4gICAgICAgICAgdGhpcy55ID0gY3VycmVudFZhbHVlO1xyXG4gICAgICAgICAgc2Nyb2xsQ29udGVudC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlM2QoMCwgJHstY3VycmVudFZhbHVlfXB4LCAwKWA7XHJcbiAgICAgICAgICBpZiAodGhpcy5jZGtTY3JvbGxhYmxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2RrU2Nyb2xsYWJsZS5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KFNDUk9MTF9FVkVOVCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLl8kc2Nyb2xsLm5leHQodXNlckFjdGlvbik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMueCA9IGN1cnJlbnRWYWx1ZTtcclxuICAgICAgICAgIHNjcm9sbENvbnRlbnQuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZTNkKCR7LWN1cnJlbnRWYWx1ZX1weCwgMCwgMClgO1xyXG4gICAgICAgICAgaWYgKHRoaXMuY2RrU2Nyb2xsYWJsZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNka1Njcm9sbGFibGUuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChTQ1JPTExfRVZFTlQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5fJHNjcm9sbC5uZXh0KHVzZXJBY3Rpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoaXNGaW5pc2hlZCkge1xyXG4gICAgICAgIHRoaXMuc3RvcFNjcm9sbGluZygpO1xyXG4gICAgICAgIHRoaXMuXyRzY3JvbGxFbmQubmV4dCh1c2VyQWN0aW9uKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl9hbmltYXRpb25JZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShzdGVwKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLl9hbmltYXRpb25JZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShzdGVwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlU2Nyb2xsQmFyKCkge1xyXG4gICAgdGhpcy5fJHVwZGF0ZVNjcm9sbEJhci5uZXh0KCk7XHJcbiAgfVxyXG5cclxuICBzY3JvbGxUbyhwYXJhbXM6IElTY3JvbGxUb1BhcmFtcykge1xyXG4gICAgY29uc3QgcG9zWCA9IHBhcmFtcy54IHx8IHBhcmFtcy5sZWZ0IHx8IDAsXHJcbiAgICAgIHBvc1kgPSBwYXJhbXMueSB8fCBwYXJhbXMudG9wIHx8IDAsXHJcbiAgICAgIHVzZXJBY3Rpb24gPSBwYXJhbXMudXNlckFjdGlvbiA/PyBmYWxzZSxcclxuICAgICAgeCA9IHBvc1gsXHJcbiAgICAgIHkgPSBwb3NZLFxyXG4gICAgICBiZWhhdmlvciA9IHBhcmFtcy5iZWhhdmlvciA/PyBJTlNUQU5ULFxyXG4gICAgICBibGVuZGluZyA9IHBhcmFtcy5ibGVuZGluZyA/PyB0cnVlLFxyXG4gICAgICBmaXJlVXBkYXRlID0gcGFyYW1zLmZpcmVVcGRhdGUgPz8gdHJ1ZSxcclxuICAgICAgc2Nyb2xsQ29udGVudCA9IHRoaXMuc2Nyb2xsQ29udGVudD8ubmF0aXZlRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudCxcclxuICAgICAgaXNWZXJ0aWNhbCA9IHRoaXMuXyRkaXJlY3Rpb24uZ2V0VmFsdWUoKSA9PT0gU2Nyb2xsZXJEaXJlY3Rpb24uVkVSVElDQUw7XHJcblxyXG4gICAgaWYgKHRoaXMuX2lzTW92aW5nKSB7XHJcbiAgICAgIGlmIChpc1ZlcnRpY2FsKSB7XHJcbiAgICAgICAgaWYgKHkgPCAwIHx8IHkgPiB0aGlzLnNjcm9sbEhlaWdodCkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoeCA8IDAgfHwgeCA+IHRoaXMuc2Nyb2xsV2lkdGgpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB4eCA9IHgsXHJcbiAgICAgIHl5ID0geSxcclxuICAgICAgcHJldlggPSB0aGlzLngsXHJcbiAgICAgIHByZXZZID0gdGhpcy55O1xyXG4gICAgdGhpcy54ID0geHg7XHJcbiAgICB0aGlzLnkgPSB5eTtcclxuICAgIGlmIChiZWhhdmlvciA9PT0gQVVUTyB8fCBiZWhhdmlvciA9PT0gU01PT1RIKSB7XHJcbiAgICAgIGlmIChpc1ZlcnRpY2FsKSB7XHJcbiAgICAgICAgaWYgKHByZXZZICE9PSB5eSkge1xyXG4gICAgICAgICAgdGhpcy5hbmltYXRlKHByZXZZLCB5eSwgQU5JTUFUSU9OX0RVUkFUSU9OLCBlYXNlTGluZWFyLCB1c2VyQWN0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHByZXZYICE9PSB4eCkge1xyXG4gICAgICAgICAgdGhpcy5hbmltYXRlKHByZXZYLCB4eCwgQU5JTUFUSU9OX0RVUkFUSU9OLCBlYXNlTGluZWFyLCB1c2VyQWN0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChpc1ZlcnRpY2FsKSB7XHJcbiAgICAgICAgaWYgKHByZXZZICE9PSB5eSkge1xyXG4gICAgICAgICAgaWYgKCFibGVuZGluZykge1xyXG4gICAgICAgICAgICB0aGlzLnN0b3BTY3JvbGxpbmcoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHNjcm9sbENvbnRlbnQuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZTNkKDAsICR7LXl5fXB4LCAwKWA7XHJcbiAgICAgICAgICBpZiAodGhpcy5jZGtTY3JvbGxhYmxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2RrU2Nyb2xsYWJsZS5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KFNDUk9MTF9FVkVOVCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKGZpcmVVcGRhdGUpIHtcclxuICAgICAgICAgICAgdGhpcy5maXJlU2Nyb2xsRXZlbnQodXNlckFjdGlvbik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChwcmV2WCAhPT0geHgpIHtcclxuICAgICAgICAgIGlmICghYmxlbmRpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5zdG9wU2Nyb2xsaW5nKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBzY3JvbGxDb250ZW50LnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUzZCgkey14eH1weCwgMCwgMClgO1xyXG4gICAgICAgICAgaWYgKHRoaXMuY2RrU2Nyb2xsYWJsZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNka1Njcm9sbGFibGUuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChTQ1JPTExfRVZFTlQpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChmaXJlVXBkYXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlyZVNjcm9sbEV2ZW50KHVzZXJBY3Rpb24pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGZpcmVTY3JvbGxFdmVudCh1c2VyQWN0aW9uOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl8kc2Nyb2xsLm5leHQodXNlckFjdGlvbik7XHJcbiAgfVxyXG5cclxuICByZXNldCgpIHtcclxuICAgIGlmICh0aGlzLnNjcm9sbEJhcikge1xyXG4gICAgICB0aGlzLnNjcm9sbEJhci5zdG9wU2Nyb2xsaW5nKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm1vdmUodGhpcy5fJGlzVmVydGljYWwuZ2V0VmFsdWUoKSwgMCk7XHJcbiAgfVxyXG5cclxuICBvblNjcm9sbEJhckRyYWdIYW5kbGVyKGU6IGFueSkge1xyXG4gICAgY29uc3QgcG9zaXRpb24gPSBlIGFzIG51bWJlcjtcclxuICAgIHRoaXMuX2lzTW92aW5nID0gdHJ1ZTtcclxuICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLl8kaXNWZXJ0aWNhbC5nZXRWYWx1ZSgpLFxyXG4gICAgICB7XHJcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlUG9zaXRpb24sXHJcbiAgICAgIH0gPSB0aGlzLl9zY3JvbGxCb3guZ2V0U2Nyb2xsUG9zaXRpb25CeVNjcm9sbEJhcih7XHJcbiAgICAgICAgc2Nyb2xsU2l6ZTogaXNWZXJ0aWNhbCA/IHRoaXMuYWN0dWFsU2Nyb2xsSGVpZ2h0IDogdGhpcy5hY3R1YWxTY3JvbGxXaWR0aCxcclxuICAgICAgICBwb3NpdGlvbixcclxuICAgICAgfSk7XHJcbiAgICB0aGlzLnNjcm9sbFRvKHsgW2lzVmVydGljYWwgPyBUT1AgOiBMRUZUXTogYWJzb2x1dGVQb3NpdGlvbiwgYmVoYXZpb3I6IEFVVE8sIGJsZW5kaW5nOiB0cnVlLCB1c2VyQWN0aW9uOiB0cnVlIH0pO1xyXG4gICAgaWYgKHRoaXMuY2RrU2Nyb2xsYWJsZSkge1xyXG4gICAgICB0aGlzLmNka1Njcm9sbGFibGUuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChTQ1JPTExCQVJfU0NST0xMX0VWRU5UKTtcclxuICAgIH1cclxuICAgIHRoaXMuX2lzTW92aW5nID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHVwZGF0ZVNjcm9sbEJhcklkID0gdGhpcy5fdXBkYXRlU2Nyb2xsQmFySWQ7XHJcbiAgICBpZiAodXBkYXRlU2Nyb2xsQmFySWQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh1cGRhdGVTY3JvbGxCYXJJZCk7XHJcbiAgICAgIHRoaXMuX3VwZGF0ZVNjcm9sbEJhcklkID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3RvcFNjcm9sbGluZygpO1xyXG4gICAgaWYgKHRoaXMuX3ZpZXdwb3J0UmVzaXplT2JzZXJ2ZXIpIHtcclxuICAgICAgdGhpcy5fdmlld3BvcnRSZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5fY29udGVudFJlc2l6ZU9ic2VydmVyKSB7XHJcbiAgICAgIHRoaXMuX2NvbnRlbnRSZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgbG9jYWxlU2Vuc2l0aXZlIFtsYW5nVGV4dERpcl09XCIoJGxhbmdUZXh0RGlyIHwgYXN5bmMpIVwiIFtsaXN0RGlyXT1cIigkZGlyZWN0aW9uIHwgYXN5bmMpIVwiIGNsYXNzPVwibmd2bF9fY29udGFpbmVyXCJcclxuICAgIFtuZ0NsYXNzXT1cIigkY29udGFpbmVyQ2xhc3NlcyB8IGFzeW5jKSFcIj5cclxuICAgIDxkaXYgI3Njcm9sbFZpZXdwb3J0IGNka1Njcm9sbGFibGUgcGFydD1cInNjcm9sbGVyXCIgY2xhc3M9XCJuZ3ZsX19zY3JvbGxlclwiPlxyXG4gICAgICAgIDxkaXYgI3Njcm9sbENvbnRlbnQgW2F0dHIuYXJpYS1vcmllbnRhdGlvbl09XCIoJGRpcmVjdGlvbiB8IGFzeW5jKSFcIlxyXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWFjdGl2ZWRlc2NlbmRhbnRdPVwiJGZvY3VzZWRFbGVtZW50IHwgYXN5bmNcIiB0YWJpbmRleD1cIjBcIiBwYXJ0PVwibGlzdFwiIGNsYXNzPVwibmd2bF9fbGlzdFwiXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIigkYWN0dWFsQ2xhc3NlcyB8IGFzeW5jKSFcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8bmctc2Nyb2xsLWJhciAjc2Nyb2xsQmFyIFtpc1ZlcnRpY2FsXT1cIigkaXNWZXJ0aWNhbCB8IGFzeW5jKSFcIiBbc2l6ZV09XCIoJHRodW1iU2l6ZSB8IGFzeW5jKSFcIlxyXG4gICAgICAgIFt0aGVtZV09XCIoJHNjcm9sbGJhclRoZW1lIHwgYXN5bmMpIVwiIFtwb3NpdGlvbl09XCIoJHRodW1iUG9zaXRpb24gfCBhc3luYykhXCJcclxuICAgICAgICBbdGh1bWJHcmFkaWVudFBvc2l0aW9uc109XCIoJHRodW1iR3JhZGllbnRQb3NpdGlvbnMgfCBhc3luYykhXCIgW2xvYWRpbmddPVwiKCRsb2FkaW5nIHwgYXN5bmMpIVwiXHJcbiAgICAgICAgW3ByZXBhcmVkXT1cIigkcHJlcGFyZWRTaWduYWwgfCBhc3luYykhXCIgW3Nob3ddPVwiKCR0aHVtYlNob3cgfCBhc3luYykhXCJcclxuICAgICAgICAob25EcmFnKT1cIm9uU2Nyb2xsQmFyRHJhZ0hhbmRsZXIoJGV2ZW50KVwiPjwvbmctc2Nyb2xsLWJhcj5cclxuPC9kaXY+Il19
|