@seniorsistemas/angular-components 17.25.6 → 17.25.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (25) hide show
  1. package/bundles/seniorsistemas-angular-components.umd.js +116 -74
  2. package/bundles/seniorsistemas-angular-components.umd.js.map +1 -1
  3. package/bundles/seniorsistemas-angular-components.umd.min.js +1 -1
  4. package/bundles/seniorsistemas-angular-components.umd.min.js.map +1 -1
  5. package/components/help-popover/models/help-popover.models.d.ts +0 -13
  6. package/components/utils/utils.d.ts +17 -0
  7. package/esm2015/components/help-popover/help-popover.directive.js +3 -30
  8. package/esm2015/components/help-popover/models/help-popover.models.js +1 -1
  9. package/esm2015/components/tooltip/tooltip.component.js +1 -1
  10. package/esm2015/components/tooltip/tooltip.directive.js +74 -30
  11. package/esm2015/components/utils/utils.js +33 -1
  12. package/esm5/components/help-popover/help-popover.directive.js +3 -30
  13. package/esm5/components/help-popover/models/help-popover.models.js +1 -1
  14. package/esm5/components/tooltip/tooltip.component.js +1 -1
  15. package/esm5/components/tooltip/tooltip.directive.js +76 -42
  16. package/esm5/components/utils/utils.js +33 -1
  17. package/fesm2015/seniorsistemas-angular-components.js +114 -64
  18. package/fesm2015/seniorsistemas-angular-components.js.map +1 -1
  19. package/fesm5/seniorsistemas-angular-components.js +116 -76
  20. package/fesm5/seniorsistemas-angular-components.js.map +1 -1
  21. package/package.json +1 -1
  22. package/seniorsistemas-angular-components.metadata.json +1 -1
  23. package/components/tooltip/models/element-area.d.ts +0 -6
  24. package/esm2015/components/tooltip/models/element-area.js +0 -1
  25. package/esm5/components/tooltip/models/element-area.js +0 -1
@@ -2,7 +2,7 @@ import { __decorate } from "tslib";
2
2
  import { ApplicationRef, ComponentFactoryResolver, ComponentRef, Directive, ElementRef, EventEmitter, HostListener, Injector, Input, OnDestroy, OnInit, Output, TemplateRef } from '@angular/core';
3
3
  import { Subject } from 'rxjs';
4
4
  import { debounceTime, takeUntil } from 'rxjs/operators';
5
- import { isMousePositionOutsideOfElement } from '../utils';
5
+ import { getElementLeftoverContentAvailable, getElementPositionInfo, isMousePositionOutsideOfElement } from '../utils';
6
6
  import { HelpPopoverComponent } from './help-popover/help-popover.component';
7
7
  var HelpPopoverDirective = /** @class */ (function () {
8
8
  function HelpPopoverDirective(element, injector, componentFactoryResolver, appRef) {
@@ -216,18 +216,7 @@ var HelpPopoverDirective = /** @class */ (function () {
216
216
  return top;
217
217
  };
218
218
  HelpPopoverDirective.prototype.getLeftoverContentAvailableForPopover = function () {
219
- var windowWidth = window.innerWidth;
220
- var popoverElementTriggerRect = this.element.nativeElement.getBoundingClientRect();
221
- var freeDistanceToBottom = window.innerHeight - popoverElementTriggerRect.bottom;
222
- var freeDistanceToTop = popoverElementTriggerRect.top;
223
- var freeDistanceToLeft = popoverElementTriggerRect.left;
224
- var freeDistanceToRight = windowWidth - popoverElementTriggerRect.right;
225
- return {
226
- freeDistanceToBottom: freeDistanceToBottom,
227
- freeDistanceToTop: freeDistanceToTop,
228
- freeDistanceToLeft: freeDistanceToLeft,
229
- freeDistanceToRight: freeDistanceToRight
230
- };
219
+ return getElementLeftoverContentAvailable(this.element.nativeElement);
231
220
  };
232
221
  Object.defineProperty(HelpPopoverDirective.prototype, "getPopoverElement", {
233
222
  get: function () {
@@ -356,20 +345,4 @@ var HelpPopoverDirective = /** @class */ (function () {
356
345
  return HelpPopoverDirective;
357
346
  }());
358
347
  export { HelpPopoverDirective };
359
- var getElementPositionInfo = function (element) {
360
- var rect = element.getBoundingClientRect();
361
- var scrollTop = window.scrollY || document.documentElement.scrollTop;
362
- var scrollLeft = window.scrollX || document.documentElement.scrollLeft;
363
- var elementHeight = rect.height;
364
- var elementWidth = rect.width;
365
- return {
366
- top: rect.top + scrollTop,
367
- left: rect.left + scrollLeft,
368
- right: rect.left + scrollLeft + elementWidth,
369
- elementHeight: elementHeight,
370
- elementWidth: elementWidth,
371
- };
372
- };
373
- var ɵ0 = getElementPositionInfo;
374
- export { ɵ0 };
375
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscC1wb3BvdmVyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjb21wb25lbnRzL2hlbHAtcG9wb3Zlci9oZWxwLXBvcG92ZXIuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLHdCQUF3QixFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbk0sT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pELE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUMzRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQU83RTtJQTBDRSw4QkFDbUIsT0FBZ0MsRUFDaEMsUUFBa0IsRUFDbEIsd0JBQWtELEVBQ2xELE1BQXNCO1FBSnpDLGlCQUtLO1FBSmMsWUFBTyxHQUFQLE9BQU8sQ0FBeUI7UUFDaEMsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQiw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQTBCO1FBQ2xELFdBQU0sR0FBTixNQUFNLENBQWdCO1FBN0N4Qiw2QkFBd0IsR0FBeUIsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ3RHLHNCQUFpQixHQUFHO1lBQ25DLElBQUksQ0FBQyxLQUFJLENBQUMsWUFBWSxFQUFFO2dCQUN0QixPQUFPO2FBQ1I7WUFDRCxLQUFJLENBQUMsd0JB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OytEQUEwQztJQXFDbkQ7UUFEQyxZQUFZLENBQUMsT0FBTyxDQUFDO3VEQU1yQjtJQXJFVSxvQkFBb0I7UUFKaEMsU0FBUyxDQUFDO1lBQ1QsUUFBUSxFQUFFLGdCQUFnQjtZQUMxQixRQUFRLEVBQUUsY0FBYztTQUN6QixDQUFDO09BQ1csb0JBQW9CLENBd1RoQztJQUFELDJCQUFDO0NBQUEsQUF4VEQsSUF3VEM7U0F4VFksb0JBQW9CO0FBMlRqQyxJQUFNLHNCQUFzQixHQUFHLFVBQUMsT0FBb0I7SUFDbEQsSUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDN0MsSUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLE9BQU8sSUFBSSxRQUFRLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQztJQUN2RSxJQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsT0FBTyxJQUFJLFFBQVEsQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDO0lBRXpFLElBQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDbEMsSUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztJQUVoQyxPQUFPO1FBQ0wsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsU0FBUztRQUN6QixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVO1FBQzVCLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsR0FBRyxZQUFZO1FBQzVDLGFBQWEsZUFBQTtRQUNiLFlBQVksY0FBQTtLQUNiLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcHBsaWNhdGlvblJlZiwgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBDb21wb25lbnRSZWYsIERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIEluamVjdG9yLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgaXNNb3VzZVBvc2l0aW9uT3V0c2lkZU9mRWxlbWVudCB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IEhlbHBQb3BvdmVyQ29tcG9uZW50IH0gZnJvbSAnLi9oZWxwLXBvcG92ZXIvaGVscC1wb3BvdmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBIZWxwUG9wb3ZlckFycm93UG9zaXRpb24sIEhlbHBQb3BvdmVyUG9zaXRpb24sIFBvcG92ZXJFbGVtZW50VHJpZ2dlclBvc2l0aW9uLCBQb3BvdmVyVHJpZ2dlckF2YWlsYWJsZVBvc2l0aW9uIH0gZnJvbSAnLi9tb2RlbHMvaGVscC1wb3BvdmVyLm1vZGVscyc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tzSGVscFBvcG92ZXJdJyxcbiAgZXhwb3J0QXM6ICdzSGVscFBvcG92ZXInXG59KVxuZXhwb3J0IGNsYXNzIEhlbHBQb3BvdmVyRGlyZWN0aXZlIGltcGxlbWVudHMgT25EZXN0cm95LCBPbkluaXQge1xuICBwcml2YXRlIHJlYWRvbmx5IE1VVEFUSU9OX09CU0VSVkVSX0NPTkZJRzogTXV0YXRpb25PYnNlcnZlckluaXQgPSB7IGF0dHJpYnV0ZXM6IHRydWUsIGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9O1xuICBwcml2YXRlIHJlYWRvbmx5IE9CU0VSVkVSX0NBTExCQUNLID0gKCkgPT4ge1xuICAgIGlmICghdGhpcy5jb21wb25lbnRSZWYpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5hcHBseVBvc2l0aW9uSW50b0VsZW1lbnQoKTtcbiAgfVxuICBwcml2YXRlIHJlYWRvbmx5IFJFU0laRV9PQlNFUlZFUiA9ICgpID0+IHtcbiAgICB0aGlzLm9uUmVzaXplJC5uZXh0KCk7XG4gIH1cbiAgQElucHV0KCkgc0hlbHBQb3BvdmVyOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIGNsb3NlQnV0dG9uID0gdHJ1ZTtcbiAgQElucHV0KCkgcG9wb3Zlckljb24gPSAnJztcbiAgQElucHV0KCkgcG9wb3ZlckhlYWRlciA9ICcnO1xuICBASW5wdXQoKSBwb3BvdmVyRm9vdGVyID0gJyc7XG4gIEBJbnB1dCgpIHBvcG92ZXJCdXR0b25UZXh0ID0gJyc7XG4gIEBJbnB1dCgpIHBvcG92ZXJBcnJvd1Bvc2l0aW9uOiBIZWxwUG9wb3ZlckFycm93UG9zaXRpb24gPSAnYmVnaW5uaW5nJztcbiAgcHJpdmF0ZSBfcG9wb3ZlclBvc2l0aW9uOiBIZWxwUG9wb3ZlclBvc2l0aW9uID0gJ2JvdHRvbSc7XG4gIHB1YmxpYyBnZXQgcG9wb3ZlclBvc2l0aW9uKCk6IEhlbHBQb3BvdmVyUG9zaXRpb24ge1xuICAgIHJldHVybiB0aGlzLl9wb3BvdmVyUG9zaXRpb247XG4gIH1cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBwb3BvdmVyUG9zaXRpb24odmFsdWU6IEhlbHBQb3BvdmVyUG9zaXRpb24pIHtcbiAgICB0aGlzLl9wb3BvdmVyUG9zaXRpb24gPSB2YWx1ZTtcbiAgICB0aGlzLmludGVybmFsUG9zaXRpb24gPSB2YWx1ZTtcbiAgfVxuICBAT3V0cHV0KCkgYnV0dG9uQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBwcml2YXRlIG9uRGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPEhlbHBQb3BvdmVyQ29tcG9uZW50PiB8IG51bGwgPSBudWxsXG4gIHByaXZhdGUgbXV0YXRpb25PYnNlcnZlclBvcG92ZXJFbGVtZW50OiBNdXRhdGlvbk9ic2VydmVyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgbXV0YXRpb25PYnNlcnZlclBvcG92ZXJDb250ZW50OiBNdXRhdGlvbk9ic2VydmVyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgaW50ZXJuYWxQb3NpdGlvbjogSGVscFBvcG92ZXJQb3NpdGlvbiA9ICdib3R0b20nO1xuICBwcml2YXRlIG9uUmVzaXplJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgbWFudWFsVHJpZ2dlciA9IGZhbHNlO1xuICBwcml2YXRlIGxpc3RlbmVyID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICBjb25zdCB0b3RhbEVsZW1lbnRBcmVhID0gdGhpcy5jb21wb25lbnRSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBpZiAoaXNNb3VzZVBvc2l0aW9uT3V0c2lkZU9mRWxlbWVudChldmVudCwgdG90YWxFbGVtZW50QXJlYSkpIHtcbiAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgIH1cbiAgfVxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBhcHBSZWY6IEFwcGxpY2F0aW9uUmVmLFxuICApIHsgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IHBvcG92ZXJFbGVtZW50T2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcih0aGlzLk9CU0VSVkVSX0NBTExCQUNLKTtcbiAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXJQb3BvdmVyRWxlbWVudCA9IHBvcG92ZXJFbGVtZW50T2JzZXJ2ZXI7XG4gICAgcG9wb3ZlckVsZW1lbnRPYnNlcnZlci5vYnNlcnZlKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCB0aGlzLk1VVEFUSU9OX09CU0VSVkVSX0NPTkZJRyk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuUkVTSVpFX09CU0VSVkVSKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsZW5kJywgdGhpcy5PQlNFUlZFUl9DQUxMQkFDSyk7XG4gICAgdGhpcy5vblJlc2l6ZSQucGlwZSh0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kkKSwgZGVib3VuY2VUaW1lKDEwMCkpLnN1YnNjcmliZSh0aGlzLk9CU0VSVkVSX0NBTExCQUNLKVxuICB9XG5cbiAgc2hvdygpIHtcbiAgICB0aGlzLm1hbnVhbFRyaWdnZXIgPSB0cnVlO1xuICAgIHRoaXMuX2NyZWF0ZUNvbXBvbmVudCgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snKVxuICBkb0NsaWNrKCkge1xuICAgIGlmICh0aGlzLm1hbnVhbFRyaWdnZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fY3JlYXRlQ29tcG9uZW50KCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLm9uRGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMub25EZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuZGVzdHJveSgpO1xuICAgIGlmICh0aGlzLm11dGF0aW9uT2JzZXJ2ZXJQb3BvdmVyRWxlbWVudCkge1xuICAgICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyUG9wb3ZlckVsZW1lbnQuZGlzY29ubmVjdCgpO1xuICAgIH1cbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5SRVNJWkVfT0JTRVJWRVIpO1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGxlbmQnLCB0aGlzLk9CU0VSVkVSX0NBTExCQUNLKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NyZWF0ZUNvbXBvbmVudCgpIHtcbiAgICBpZiAoIXRoaXMuc0hlbHBQb3BvdmVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmNvbXBvbmVudFJlZikge1xuICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgfVxuICAgIGNvbnN0IGNvbXBvbmVudEZhY3RvcnkgPSB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShIZWxwUG9wb3ZlckNvbXBvbmVudCk7XG4gICAgY29uc3QgY29tcG9uZW50UmVmID0gY29tcG9uZW50RmFjdG9yeS5jcmVhdGUodGhpcy5pbmplY3Rvcik7XG4gICAgdGhpcy5jb21wb25lbnRSZWYgPSBjb21wb25lbnRSZWY7XG4gICAgaWYgKHRoaXMubXV0YXRpb25PYnNlcnZlclBvcG92ZXJDb250ZW50KSB7XG4gICAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXJQb3BvdmVyQ29udGVudC5kaXNjb25uZWN0KCk7XG4gICAgfVxuICAgIHRoaXMubXV0YXRpb25PYnNlcnZlclBvcG92ZXJDb250ZW50ID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIodGhpcy5PQlNFUlZFUl9DQUxMQkFDSyk7XG4gICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyUG9wb3ZlckNvbnRlbnQub2JzZXJ2ZSgodGhpcy5jb21wb25lbnRSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkucXVlcnlTZWxlY3RvcignLnBvcG92ZXItY29udGVudCcpLCB0aGlzLk1VVEFUSU9OX09CU0VSVkVSX0NPTkZJRyk7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjb21wb25lbnRSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudCk7XG4gICAgdGhpcy5hcHBSZWYuYXR0YWNoVmlldyhjb21wb25lbnRSZWYuaG9zdFZpZXcpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmxpc3RlbmVyKTtcbiAgICB9KVxuICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbXBvbmVudFJlZi5pbnN0YW5jZTtcbiAgICBjb21wb25lbnQucG9wb3ZlckNvbnRlbnQgPSB0aGlzLnNIZWxwUG9wb3ZlcjtcbiAgICBjb21wb25lbnQuY2xvc2VCdXR0b24gPSB0aGlzLmNsb3NlQnV0dG9uO1xuICAgIGNvbXBvbmVudC5pY29uID0gdGhpcy5wb3BvdmVySWNvbjtcbiAgICBjb21wb25lbnQuaGVhZGVyID0gdGhpcy5wb3BvdmVySGVhZGVyO1xuICAgIGNvbXBvbmVudC5mb290ZXIgPSB0aGlzLnBvcG92ZXJGb290ZXI7XG4gICAgY29tcG9uZW50LmJ1dHRvbiA9IHRoaXMucG9wb3ZlckJ1dHRvblRleHQ7XG4gICAgY29tcG9uZW50LnBvc2l0aW9uID0gdGhpcy5pbnRlcm5hbFBvc2l0aW9uO1xuICAgIGNvbXBvbmVudC5hcnJvd1Bvc2l0aW9uID0gdGhpcy5wb3BvdmVyQXJyb3dQb3NpdGlvbjtcbiAgICBjb21wb25lbnQuYnV0dG9uQ2xpY2tlZCA9IHRoaXMuYnV0dG9uQ2xpY2tlZDtcbiAgICBjb21wb25lbnQuY2xvc2VkLnBpcGUodGFrZVVudGlsKHRoaXMub25EZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICB9KVxuICAgIHRoaXMuYXBwbHlQb3NpdGlvbkludG9FbGVtZW50KCk7XG4gIH1cblxuICBwcml2YXRlIGRlc3Ryb3koKSB7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmxpc3RlbmVyKTtcbiAgICBpZiAodGhpcy5jb21wb25lbnRSZWYpIHtcbiAgICAgIHRoaXMuY29tcG9uZW50UmVmLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuY29tcG9uZW50UmVmID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLmludGVybmFsUG9zaXRpb24gPSB0aGlzLnBvcG92ZXJQb3NpdGlvbjtcblxuICAgIGlmICh0aGlzLm11dGF0aW9uT2JzZXJ2ZXJQb3BvdmVyQ29udGVudCkge1xuICAgICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyUG9wb3ZlckNvbnRlbnQuZGlzY29ubmVjdCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlQb3NpdGlvbkludG9FbGVtZW50KCkge1xuICAgIGNvbnN0IHBvcG92ZXJFbGVtZW50UG9zaXRpb24gPSBnZXRFbGVtZW50UG9zaXRpb25JbmZvKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMudmFsaWRQb3NpdGlvbjtcbiAgICB0aGlzLmludGVybmFsUG9zaXRpb24gPSBwb3NpdGlvbjtcbiAgICB0aGlzLnBvcG92ZXJDb21wb25lbnRJbnN0YW5jZS5wb3NpdGlvbiA9IHRoaXMuaW50ZXJuYWxQb3NpdGlvbjtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHN3aXRjaCAodGhpcy5pbnRlcm5hbFBvc2l0aW9uKSB7XG4gICAgICAgIGNhc2UgJ2JvdHRvbSc6IHtcbiAgICAgICAgICB0aGlzLmFwcGx5UG9wb3ZlclBvc2l0aW9uQm90dG9tKHBvcG92ZXJFbGVtZW50UG9zaXRpb24pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ3RvcCc6IHtcbiAgICAgICAgICB0aGlzLmFwcGx5UG9wb3ZlclBvc2l0aW9uVG9wKHBvcG92ZXJFbGVtZW50UG9zaXRpb24pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ2xlZnQnOiB7XG4gICAgICAgICAgdGhpcy5hcHBseVBvcG92ZXJQb3NpdGlvbkxlZnQocG9wb3ZlckVsZW1lbnRQb3NpdGlvbik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAncmlnaHQnOiB7XG4gICAgICAgICAgdGhpcy5hcHBseVBvcG92ZXJQb3NpdGlvblJpZ2h0KHBvcG92ZXJFbGVtZW50UG9zaXRpb24pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnBvcG92ZXJDb21wb25lbnRJbnN0YW5jZS52aXNpYmxlID0gdHJ1ZTtcbiAgICB9KVxuXG4gIH1cblxuICBwcml2YXRlIGFwcGx5UG9wb3ZlclBvc2l0aW9uQm90dG9tKHBvcG92ZXJFbGVtZW50UG9zaXRpb246IFBvcG92ZXJFbGVtZW50VHJpZ2dlclBvc2l0aW9uKSB7XG4gICAgY29uc3QgcG9wb3ZlckVsZW1lbnQgPSB0aGlzLmdldFBvcG92ZXJFbGVtZW50O1xuICAgIGNvbnN0IGxlZnRQb3BvdmVyID0gdGhpcy5nZXRIb3Jpem9udGFsTGVmdChwb3BvdmVyRWxlbWVudFBvc2l0aW9uKVxuICAgIHBvcG92ZXJFbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICBwb3BvdmVyRWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7bGVmdFBvcG92ZXJ9cHhgO1xuICAgIHBvcG92ZXJFbGVtZW50LnN0eWxlLnRvcCA9IGBjYWxjKCR7cG9wb3ZlckVsZW1lbnRQb3NpdGlvbi50b3B9cHggKyAke3BvcG92ZXJFbGVtZW50UG9zaXRpb24uZWxlbWVudEhlaWdodH1weClgXG4gIH1cblxuICBwcml2YXRlIGFwcGx5UG9wb3ZlclBvc2l0aW9uVG9wKHBvcG92ZXJFbGVtZW50UG9zaXRpb246IFBvcG92ZXJFbGVtZW50VHJpZ2dlclBvc2l0aW9uKSB7XG4gICAgY29uc3QgcG9wb3ZlckVsZW1lbnQgPSB0aGlzLmdldFBvcG92ZXJFbGVtZW50O1xuICAgIGNvbnN0IGxlZnRQb3BvdmVyID0gdGhpcy5nZXRIb3Jpem9udGFsTGVmdChwb3BvdmVyRWxlbWVudFBvc2l0aW9uKVxuICAgIGNvbnN0IHBvcG92ZXJIZWlnaHQgPSBwb3BvdmVyRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XG4gICAgcG9wb3ZlckVsZW1lbnQuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgIHBvcG92ZXJFbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtsZWZ0UG9wb3Zlcn1weGA7XG4gICAgcG9wb3ZlckVsZW1lbnQuc3R5bGUudG9wID0gYGNhbGMoJHtwb3BvdmVyRWxlbWVudFBvc2l0aW9uLnRvcH1weCAtICR7cG9wb3ZlckhlaWdodH1weClgO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVBvcG92ZXJQb3NpdGlvbkxlZnQocG9wb3ZlckVsZW1lbnRQb3NpdGlvbjogUG9wb3ZlckVsZW1lbnRUcmlnZ2VyUG9zaXRpb24pIHtcbiAgICBjb25zdCBwb3BvdmVyRWxlbWVudCA9IHRoaXMuZ2V0UG9wb3ZlckVsZW1lbnQ7XG4gICAgY29uc3QgcG9wb3ZlcldpZHRoID0gcG9wb3ZlckVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgcG9wb3ZlckVsZW1lbnQuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgIHBvcG92ZXJFbGVtZW50LnN0eWxlLmxlZnQgPSBgY2FsYygke3BvcG92ZXJFbGVtZW50UG9zaXRpb24ucmlnaHR9cHggLSAke3BvcG92ZXJXaWR0aCArIHBvcG92ZXJFbGVtZW50UG9zaXRpb24uZWxlbWVudFdpZHRofXB4KWA7XG4gICAgcG9wb3ZlckVsZW1lbnQuc3R5bGUudG9wID0gdGhpcy5nZXRWZXJ0aWNhbFRvcChwb3BvdmVyRWxlbWVudFBvc2l0aW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlQb3BvdmVyUG9zaXRpb25SaWdodChwb3BvdmVyRWxlbWVudFBvc2l0aW9uOiBQb3BvdmVyRWxlbWVudFRyaWdnZXJQb3NpdGlvbikge1xuICAgIGNvbnN0IHBvcG92ZXJFbGVtZW50ID0gdGhpcy5nZXRQb3BvdmVyRWxlbWVudDtcbiAgICBwb3BvdmVyRWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgcG9wb3ZlckVsZW1lbnQuc3R5bGUubGVmdCA9IGBjYWxjKCR7cG9wb3ZlckVsZW1lbnRQb3NpdGlvbi5yaWdodH1weClgO1xuICAgIHBvcG92ZXJFbGVtZW50LnN0eWxlLnRvcCA9IHRoaXMuZ2V0VmVydGljYWxUb3AocG9wb3ZlckVsZW1lbnRQb3NpdGlvbik7XG4gIH1cblxuICBwcml2YXRlIGdldEhvcml6b250YWxMZWZ0KHBvcG92ZXJFbGVtZW50UG9zaXRpb246IFBvcG92ZXJFbGVtZW50VHJpZ2dlclBvc2l0aW9uKSB7XG4gICAgY29uc3QgcG9wb3ZlckVsZW1lbnQgPSB0aGlzLmdldFBvcG92ZXJFbGVtZW50O1xuICAgIGNvbnN0IHBvcG92ZXJXaWR0aCA9IHBvcG92ZXJFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgIGxldCBfaG9yaXpvbnRhbExlZnQgPSBwb3BvdmVyRWxlbWVudFBvc2l0aW9uLmxlZnQ7XG4gICAgaWYgKHRoaXMucG9wb3ZlckFycm93UG9zaXRpb24gPT09ICdlbmQnKSB7XG4gICAgICBfaG9yaXpvbnRhbExlZnQgPSBwb3BvdmVyRWxlbWVudFBvc2l0aW9uLnJpZ2h0IC0gcG9wb3ZlcldpZHRoO1xuICAgIH0gZWxzZSBpZiAodGhpcy5wb3BvdmVyQXJyb3dQb3NpdGlvbiA9PT0gJ21pZGRsZScpIHtcbiAgICAgIF9ob3Jpem9udGFsTGVmdCA9IChwb3BvdmVyRWxlbWVudFBvc2l0aW9uLmxlZnQgKyBwb3BvdmVyRWxlbWVudFBvc2l0aW9uLmVsZW1lbnRXaWR0aCAvIDIpIC0gKHBvcG92ZXJXaWR0aCAvIDIpO1xuICAgIH1cbiAgICByZXR1cm4gX2hvcml6b250YWxMZWZ0O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRWZXJ0aWNhbFRvcChwb3BvdmVyRWxlbWVudFBvc2l0aW9uOiBQb3BvdmVyRWxlbWVudFRyaWdnZXJQb3NpdGlvbikge1xuICAgIGNvbnN0IGFycm93RWxlbWVudFBvc2l0aW9uID0gZ2V0RWxlbWVudFBvc2l0aW9uSW5mbyh0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5hcnJvd0VsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gICAgY29uc3QgcG9wb3ZlckNvbnRlbnRQb3NpdGlvbiA9IGdldEVsZW1lbnRQb3NpdGlvbkluZm8odGhpcy5jb21wb25lbnRSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudCk7XG4gICAgY29uc3QgcG9wb3ZlckVsZW1lbnQgPSB0aGlzLmdldFBvcG92ZXJFbGVtZW50O1xuICAgIGNvbnN0IHBvcG92ZXJIZWlnaHQgPSBwb3BvdmVyRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XG4gICAgbGV0IHRvcCA9IGBjYWxjKCR7cG9wb3ZlckVsZW1lbnRQb3NpdGlvbi50b3B9cHggLSAke3BvcG92ZXJIZWlnaHQgLyAyfXB4ICsgJHtwb3BvdmVyRWxlbWVudFBvc2l0aW9uLmVsZW1lbnRIZWlnaHQgLyAyfXB4KWA7XG5cbiAgICBjb25zdCBhcnJvd01pZGRsZSA9IGFycm93RWxlbWVudFBvc2l0aW9uLmVsZW1lbnRIZWlnaHQgLyAyO1xuICAgIGlmICh0aGlzLnBvcG92ZXJBcnJvd1Bvc2l0aW9uID09PSAnYmVnaW5uaW5nJykge1xuICAgICAgY29uc3QgZGlzdGFuY2VBcnJvd0Zyb21TdGFydCA9IGFycm93RWxlbWVudFBvc2l0aW9uLnRvcCAtIHBvcG92ZXJDb250ZW50UG9zaXRpb24udG9wO1xuICAgICAgdG9wID0gYGNhbGMoJHtwb3BvdmVyRWxlbWVudFBvc2l0aW9uLnRvcH1weCArICR7cG9wb3ZlckVsZW1lbnRQb3NpdGlvbi5lbGVtZW50SGVpZ2h0IC8gMn1weCAtICR7ZGlzdGFuY2VBcnJvd0Zyb21TdGFydCArIGFycm93TWlkZGxlfXB4KWA7XG4gICAgfSBlbHNlIGlmICh0aGlzLnBvcG92ZXJBcnJvd1Bvc2l0aW9uID09PSAnZW5kJykge1xuICAgICAgY29uc3QgZGlzdGFuY2VBcnJvd0Zyb21FbmQgPSAocG9wb3ZlckNvbnRlbnRQb3NpdGlvbi50b3AgKyBwb3BvdmVyQ29udGVudFBvc2l0aW9uLmVsZW1lbnRIZWlnaHQpIC0gKGFycm93RWxlbWVudFBvc2l0aW9uLnRvcCArIGFycm93RWxlbWVudFBvc2l0aW9uLmVsZW1lbnRIZWlnaHQpO1xuICAgICAgdG9wID0gYGNhbGMoJHtwb3BvdmVyRWxlbWVudFBvc2l0aW9uLnRvcH1weCAtICR7cG9wb3ZlckNvbnRlbnRQb3NpdGlvbi5lbGVtZW50SGVpZ2h0fXB4ICsgJHtwb3BvdmVyRWxlbWVudFBvc2l0aW9uLmVsZW1lbnRIZWlnaHQgLyAyfXB4ICsgJHtkaXN0YW5jZUFycm93RnJvbUVuZCArIGFycm93TWlkZGxlfXB4KWA7XG4gICAgfVxuICAgIHJldHVybiB0b3A7XG4gIH1cblxuICBwcml2YXRlIGdldExlZnRvdmVyQ29udGVudEF2YWlsYWJsZUZvclBvcG92ZXIoKTogUG9wb3ZlclRyaWdnZXJBdmFpbGFibGVQb3NpdGlvbiB7XG4gICAgY29uc3Qgd2luZG93V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICBjb25zdCBwb3BvdmVyRWxlbWVudFRyaWdnZXJSZWN0ID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgZnJlZURpc3RhbmNlVG9Cb3R0b20gPSB3aW5kb3cuaW5uZXJIZWlnaHQgLSBwb3BvdmVyRWxlbWVudFRyaWdnZXJSZWN0LmJvdHRvbTtcbiAgICBjb25zdCBmcmVlRGlzdGFuY2VUb1RvcCA9IHBvcG92ZXJFbGVtZW50VHJpZ2dlclJlY3QudG9wO1xuICAgIGNvbnN0IGZyZWVEaXN0YW5jZVRvTGVmdCA9IHBvcG92ZXJFbGVtZW50VHJpZ2dlclJlY3QubGVmdDtcbiAgICBjb25zdCBmcmVlRGlzdGFuY2VUb1JpZ2h0ID0gd2luZG93V2lkdGggLSBwb3BvdmVyRWxlbWVudFRyaWdnZXJSZWN0LnJpZ2h0O1xuICAgIHJldHVybiB7XG4gICAgICBmcmVlRGlzdGFuY2VUb0JvdHRvbSxcbiAgICAgIGZyZWVEaXN0YW5jZVRvVG9wLFxuICAgICAgZnJlZURpc3RhbmNlVG9MZWZ0LFxuICAgICAgZnJlZURpc3RhbmNlVG9SaWdodFxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGdldFBvcG92ZXJFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHBvcG92ZXJDb21wb25lbnRJbnN0YW5jZSgpIHtcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAqIEdpdmVuIHRoZSBjdXJyZW50IHBvc2l0aW9uIG9mIHRoZSBwb3BvdmVyIGFuZCB0aGUgYXZhaWxhYmxlIHNwYWNlIGFyb3VuZFxuICogdGhlIHRyaWdnZXIgZWxlbWVudCwgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiB0aGUgcG9zaXRpb24gdGhhdCB0aGUgcG9wb3ZlclxuICogd2lsbCBiZSBzZXQgYXQuXG4gKlxuICogSWYgdGhlIHBvcG92ZXIgd2lsbCBmaXQgYXQgdGhlIGdpdmVuIHBvc2l0aW9uLCBpdCB3aWxsIHJldHVybiB0aGUgc2FtZVxuICogcG9zaXRpb24uXG4gKlxuICogSWYgdGhlIHBvcG92ZXIgd2lsbCBub3QgZml0IGF0IHRoZSBnaXZlbiBwb3NpdGlvbiwgaXQgd2lsbCByZXR1cm4gdGhlIHBvc2l0aW9uXG4gKiB0aGF0IGhhcyB0aGUgbW9zdCBhdmFpbGFibGUgc3BhY2UgKHRvcCBvciBib3R0b20pLlxuICpcbiAqIElmIHRoZXJlIGlzIG5vIHBvc2l0aW9uIHdpdGggYXZhaWxhYmxlIHNwYWNlLCBpdCB3aWxsIHJldHVybiB0aGUgZ2l2ZW5cbiAqIHBvc2l0aW9uLlxuICpcbiAqIEByZXR1cm5zIFRoZSBwb3NpdGlvbiB0aGF0IHRoZSBwb3BvdmVyIHdpbGwgYmUgc2V0IGF0LlxuICovXG4gIHByaXZhdGUgZ2V0IHZhbGlkUG9zaXRpb24oKTogSGVscFBvcG92ZXJQb3NpdGlvbiB7XG4gICAgY29uc3QgeyBmcmVlRGlzdGFuY2VUb0JvdHRvbSwgZnJlZURpc3RhbmNlVG9Ub3AsIGZyZWVEaXN0YW5jZVRvTGVmdCwgZnJlZURpc3RhbmNlVG9SaWdodCB9ID0gdGhpcy5nZXRMZWZ0b3ZlckNvbnRlbnRBdmFpbGFibGVGb3JQb3BvdmVyKCk7XG5cbiAgICBjb25zdCBwb3BvdmVyRWxlbWVudFBvc2l0aW9uID0gZ2V0RWxlbWVudFBvc2l0aW9uSW5mbyh0aGlzLmNvbXBvbmVudFJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50KTtcbiAgICBjb25zdCBwb3BvdmVyRWxlbWVudFdpZHRoID0gcG9wb3ZlckVsZW1lbnRQb3NpdGlvbi5lbGVtZW50V2lkdGg7XG4gICAgY29uc3QgcG9wb3ZlckVsZW1lbnRIZWlnaHQgPSBwb3BvdmVyRWxlbWVudFBvc2l0aW9uLmVsZW1lbnRIZWlnaHQ7XG5cbiAgICBjb25zdCByZW1haW5pbmdTcGFjZUJvdHRvbSA9IGZyZWVEaXN0YW5jZVRvQm90dG9tIC0gcG9wb3ZlckVsZW1lbnRIZWlnaHQ7XG4gICAgY29uc3QgcmVtYWluaW5nU3BhY2VUb3AgPSBmcmVlRGlzdGFuY2VUb1RvcCAtIHBvcG92ZXJFbGVtZW50SGVpZ2h0O1xuICAgIGNvbnN0IHJlbWFpbmluZ1NwYWNlTGVmdCA9IGZyZWVEaXN0YW5jZVRvTGVmdCAtIHBvcG92ZXJFbGVtZW50V2lkdGg7XG4gICAgY29uc3QgcmVtYWluaW5nU3BhY2VSaWdodCA9IGZyZWVEaXN0YW5jZVRvUmlnaHQgLSBwb3BvdmVyRWxlbWVudFdpZHRoO1xuXG4gICAgY29uc3QgY2FuU2V0QXRCb3R0b20gPSByZW1haW5pbmdTcGFjZUJvdHRvbSA+IDA7XG4gICAgY29uc3QgY2FuU2V0QXRUb3AgPSByZW1haW5pbmdTcGFjZVRvcCA+IDA7XG4gICAgY29uc3QgY2FuU2V0QXRMZWZ0ID0gcmVtYWluaW5nU3BhY2VMZWZ0ID4gMDtcbiAgICBjb25zdCBjYW5TZXRBdFJpZ2h0ID0gcmVtYWluaW5nU3BhY2VSaWdodCA+IDA7XG5cbiAgICBsZXQgdmFsaWRQb3NpdGlvbjogSGVscFBvcG92ZXJQb3NpdGlvbjtcbiAgICBpZiAoY2FuU2V0QXRCb3R0b20gJiYgdGhpcy5wb3BvdmVyUG9zaXRpb24gPT09ICdib3R0b20nKSB7XG4gICAgICB2YWxpZFBvc2l0aW9uID0gJ2JvdHRvbSc7XG4gICAgfSBlbHNlIGlmIChjYW5TZXRBdFRvcCAmJiB0aGlzLnBvcG92ZXJQb3NpdGlvbiA9PT0gJ3RvcCcpIHtcbiAgICAgIHZhbGlkUG9zaXRpb24gPSAndG9wJztcbiAgICB9IGVsc2UgaWYgKGNhblNldEF0TGVmdCAmJiB0aGlzLnBvcG92ZXJQb3NpdGlvbiA9PT0gJ2xlZnQnKSB7XG4gICAgICB2YWxpZFBvc2l0aW9uID0gJ2xlZnQnO1xuICAgIH0gZWxzZSBpZiAoY2FuU2V0QXRSaWdodCAmJiB0aGlzLnBvcG92ZXJQb3NpdGlvbiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgdmFsaWRQb3NpdGlvbiA9ICdyaWdodCc7XG4gICAgfVxuXG4gICAgY29uc3QgbmVlZFVzZU90aGVyUG9zaXRpb24gPSAhdmFsaWRQb3NpdGlvbjtcbiAgICBpZiAobmVlZFVzZU90aGVyUG9zaXRpb24pIHtcbiAgICAgIGNvbnN0IGZyZWVQb3NpdGlvbnM6IHsgcG9zaXRpb246IEhlbHBQb3BvdmVyUG9zaXRpb24sIGZyZWVEaXN0YW5jZTogbnVtYmVyIH1bXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHBvc2l0aW9uOiAnYm90dG9tJyBhcyBIZWxwUG9wb3ZlclBvc2l0aW9uLFxuICAgICAgICAgIGZyZWVEaXN0YW5jZTogcmVtYWluaW5nU3BhY2VCb3R0b20sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwb3NpdGlvbjogJ3RvcCcgYXMgSGVscFBvcG92ZXJQb3NpdGlvbixcbiAgICAgICAgICBmcmVlRGlzdGFuY2U6IHJlbWFpbmluZ1NwYWNlVG9wLFxuICAgICAgICB9XG4gICAgICBdLmZpbHRlcigoeCkgPT4geC5mcmVlRGlzdGFuY2UgPiAwKTtcblxuICAgICAgaWYgKGZyZWVQb3NpdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBvcG92ZXJQb3NpdGlvbjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGl0ZW1XaXRoTWF4RnJlZURpc3RhbmNlID0gZnJlZVBvc2l0aW9ucy5zb3J0KChhLCBiKSA9PiBiLmZyZWVEaXN0YW5jZSAtIGEuZnJlZURpc3RhbmNlKVswXTtcbiAgICAgIHJldHVybiBpdGVtV2l0aE1heEZyZWVEaXN0YW5jZS5wb3NpdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMucG9wb3ZlclBvc2l0aW9uO1xuICAgIH1cbiAgfVxufVxuXG5cbmNvbnN0IGdldEVsZW1lbnRQb3NpdGlvbkluZm8gPSAoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBQb3BvdmVyRWxlbWVudFRyaWdnZXJQb3NpdGlvbiA9PiB7XG4gIGNvbnN0IHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCBzY3JvbGxUb3AgPSB3aW5kb3cuc2Nyb2xsWSB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wO1xuICBjb25zdCBzY3JvbGxMZWZ0ID0gd2luZG93LnNjcm9sbFggfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQ7XG5cbiAgY29uc3QgZWxlbWVudEhlaWdodCA9IHJlY3QuaGVpZ2h0O1xuICBjb25zdCBlbGVtZW50V2lkdGggPSByZWN0LndpZHRoO1xuXG4gIHJldHVybiB7XG4gICAgdG9wOiByZWN0LnRvcCArIHNjcm9sbFRvcCxcbiAgICBsZWZ0OiByZWN0LmxlZnQgKyBzY3JvbGxMZWZ0LFxuICAgIHJpZ2h0OiByZWN0LmxlZnQgKyBzY3JvbGxMZWZ0ICsgZWxlbWVudFdpZHRoLFxuICAgIGVsZW1lbnRIZWlnaHQsXG4gICAgZWxlbWVudFdpZHRoLFxuICB9O1xufTtcbiJdfQ==
348
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscC1wb3BvdmVyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjb21wb25lbnRzL2hlbHAtcG9wb3Zlci9oZWxwLXBvcG92ZXIuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLHdCQUF3QixFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbk0sT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pELE9BQU8sRUFBNEMsa0NBQWtDLEVBQUUsc0JBQXNCLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDakssT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFPN0U7SUEwQ0UsOEJBQ21CLE9BQWdDLEVBQ2hDLFFBQWtCLEVBQ2xCLHdCQUFrRCxFQUNsRCxNQUFzQjtRQUp6QyxpQkFLSztRQUpjLFlBQU8sR0FBUCxPQUFPLENBQXlCO1FBQ2hDLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUNsRCxXQUFNLEdBQU4sTUFBTSxDQUFnQjtRQTdDeEIsNkJBQXdCLEdBQXlCLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUN0RyxzQkFBaUIsR0FBRztZQUNuQyxJQUFJLENBQUMsS0FBSSxDQUFDLFlBQVksRUFBRTtnQkFDdEIsT0FB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SUFBSSxDQUFDLGVBQWUsQ0FBQztpQkFDN0I7Z0JBQ0QsSUFBTSx1QkFBdUIsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSyxPQUFBLENBQUMsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLFlBQVksRUFBL0IsQ0FBK0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNqRyxPQUFPLHVCQUF1QixDQUFDLFFBQVEsQ0FBQzthQUN6QztpQkFBTTtnQkFDTCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7YUFDN0I7UUFDSCxDQUFDOzs7T0FBQTs7Z0JBalEyQixVQUFVO2dCQUNULFFBQVE7Z0JBQ1Esd0JBQXdCO2dCQUMxQyxjQUFjOztJQW5DaEM7UUFBUixLQUFLLEVBQUU7OERBQXVEO0lBQ3REO1FBQVIsS0FBSyxFQUFFOzZEQUFvQjtJQUNuQjtRQUFSLEtBQUssRUFBRTs2REFBa0I7SUFDakI7UUFBUixLQUFLLEVBQUU7K0RBQW9CO0lBQ25CO1FBQVIsS0FBSyxFQUFFOytEQUFvQjtJQUNuQjtRQUFSLEtBQUssRUFBRTttRUFBd0I7SUFDdkI7UUFBUixLQUFLLEVBQUU7c0VBQThEO0lBTXRFO1FBREMsS0FBSyxFQUFFOytEQUlQO0lBQ1M7UUFBVCxNQUFNLEVBQUU7K0RBQTBDO0lBcUNuRDtRQURDLFlBQVksQ0FBQyxPQUFPLENBQUM7dURBTXJCO0lBckVVLG9CQUFvQjtRQUpoQyxTQUFTLENBQUM7WUFDVCxRQUFRLEVBQUUsZ0JBQWdCO1lBQzFCLFFBQVEsRUFBRSxjQUFjO1NBQ3pCLENBQUM7T0FDVyxvQkFBb0IsQ0E2U2hDO0lBQUQsMkJBQUM7Q0FBQSxBQTdTRCxJQTZTQztTQTdTWSxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcHBsaWNhdGlvblJlZiwgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBDb21wb25lbnRSZWYsIERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIEluamVjdG9yLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRWxlbWVudExlZnRvdmVyUG9zaXRpb24sIEVsZW1lbnRQb3NpdGlvbiwgZ2V0RWxlbWVudExlZnRvdmVyQ29udGVudEF2YWlsYWJsZSwgZ2V0RWxlbWVudFBvc2l0aW9uSW5mbywgaXNNb3VzZVBvc2l0aW9uT3V0c2lkZU9mRWxlbWVudCB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IEhlbHBQb3BvdmVyQ29tcG9uZW50IH0gZnJvbSAnLi9oZWxwLXBvcG92ZXIvaGVscC1wb3BvdmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBIZWxwUG9wb3ZlckFycm93UG9zaXRpb24sIEhlbHBQb3BvdmVyUG9zaXRpb24gfSBmcm9tICcuL21vZGVscy9oZWxwLXBvcG92ZXIubW9kZWxzJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW3NIZWxwUG9wb3Zlcl0nLFxuICBleHBvcnRBczogJ3NIZWxwUG9wb3Zlcidcbn0pXG5leHBvcnQgY2xhc3MgSGVscFBvcG92ZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uSW5pdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgTVVUQVRJT05fT0JTRVJWRVJfQ09ORklHOiBNdXRhdGlvbk9ic2VydmVySW5pdCA9IHsgYXR0cmlidXRlczogdHJ1ZSwgY2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiB0cnVlIH07XG4gIHByaXZhdGUgcmVhZG9ubHkgT0JTRVJWRVJfQ0FMTEJBQ0sgPSAoKSA9PiB7XG4gICAgaWYgKCF0aGlzLmNvbXBvbmVudFJlZikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmFwcGx5UG9zaXRpb25JbnRvRWxlbWVudCgpO1xuICB9XG4gIHByaXZhdGUgcmVhZG9ubHkgUkVTSVpFX09CU0VSVkVSID0gKCkgPT4ge1xuICAgIHRoaXMub25SZXNpemUkLm5leHQoKTtcbiAgfVxuICBASW5wdXQoKSBzSGVscFBvcG92ZXI6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgY2xvc2VCdXR0b24gPSB0cnVlO1xuICBASW5wdXQoKSBwb3BvdmVySWNvbiA9ICcnO1xuICBASW5wdXQoKSBwb3BvdmVySGVhZGVyID0gJyc7XG4gIEBJbnB1dCgpIHBvcG92ZXJGb290ZXIgPSAnJztcbiAgQElucHV0KCkgcG9wb3ZlckJ1dHRvblRleHQgPSAnJztcbiAgQElucHV0KCkgcG9wb3ZlckFycm93UG9zaXRpb246IEhlbHBQb3BvdmVyQXJyb3dQb3NpdGlvbiA9ICdiZWdpbm5pbmcnO1xuICBwcml2YXRlIF9wb3BvdmVyUG9zaXRpb246IEhlbHBQb3BvdmVyUG9zaXRpb24gPSAnYm90dG9tJztcbiAgcHVibGljIGdldCBwb3BvdmVyUG9zaXRpb24oKTogSGVscFBvcG92ZXJQb3NpdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3BvcG92ZXJQb3NpdGlvbjtcbiAgfVxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHBvcG92ZXJQb3NpdGlvbih2YWx1ZTogSGVscFBvcG92ZXJQb3NpdGlvbikge1xuICAgIHRoaXMuX3BvcG92ZXJQb3NpdGlvbiA9IHZhbHVlO1xuICAgIHRoaXMuaW50ZXJuYWxQb3NpdGlvbiA9IHZhbHVlO1xuICB9XG4gIEBPdXRwdXQoKSBidXR0b25DbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIHByaXZhdGUgb25EZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgY29tcG9uZW50UmVmOiBDb21wb25lbnRSZWY8SGVscFBvcG92ZXJDb21wb25lbnQ+IHwgbnVsbCA9IG51bGxcbiAgcHJpdmF0ZSBtdXRhdGlvbk9ic2VydmVyUG9wb3ZlckVsZW1lbnQ6IE11dGF0aW9uT2JzZXJ2ZXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBtdXRhdGlvbk9ic2VydmVyUG9wb3ZlckNvbnRlbnQ6IE11dGF0aW9uT2JzZXJ2ZXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBpbnRlcm5hbFBvc2l0aW9uOiBIZWxwUG9wb3ZlclBvc2l0aW9uID0gJ2JvdHRvbSc7XG4gIHByaXZhdGUgb25SZXNpemUkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBtYW51YWxUcmlnZ2VyID0gZmFsc2U7XG4gIHByaXZhdGUgbGlzdGVuZXIgPSAoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgIGNvbnN0IHRvdGFsRWxlbWVudEFyZWEgPSB0aGlzLmNvbXBvbmVudFJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGlmIChpc01vdXNlUG9zaXRpb25PdXRzaWRlT2ZFbGVtZW50KGV2ZW50LCB0b3RhbEVsZW1lbnRBcmVhKSkge1xuICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgfVxuICB9XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFwcFJlZjogQXBwbGljYXRpb25SZWYsXG4gICkgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgY29uc3QgcG9wb3ZlckVsZW1lbnRPYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKHRoaXMuT0JTRVJWRVJfQ0FMTEJBQ0spO1xuICAgIHRoaXMubXV0YXRpb25PYnNlcnZlclBvcG92ZXJFbGVtZW50ID0gcG9wb3ZlckVsZW1lbnRPYnNlcnZlcjtcbiAgICBwb3BvdmVyRWxlbWVudE9ic2VydmVyLm9ic2VydmUodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIHRoaXMuTVVUQVRJT05fT0JTRVJWRVJfQ09ORklHKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5SRVNJWkVfT0JTRVJWRVIpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGxlbmQnLCB0aGlzLk9CU0VSVkVSX0NBTExCQUNLKTtcbiAgICB0aGlzLm9uUmVzaXplJC5waXBlKHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSQpLCBkZWJvdW5jZVRpbWUoMTAwKSkuc3Vic2NyaWJlKHRoaXMuT0JTRVJWRVJfQ0FMTEJBQ0spXG4gIH1cblxuICBzaG93KCkge1xuICAgIHRoaXMubWFudWFsVHJpZ2dlciA9IHRydWU7XG4gICAgdGhpcy5fY3JlYXRlQ29tcG9uZW50KCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdjbGljaycpXG4gIGRvQ2xpY2soKSB7XG4gICAgaWYgKHRoaXMubWFudWFsVHJpZ2dlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9jcmVhdGVDb21wb25lbnQoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMub25EZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5vbkRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5kZXN0cm95KCk7XG4gICAgaWYgKHRoaXMubXV0YXRpb25PYnNlcnZlclBvcG92ZXJFbGVtZW50KSB7XG4gICAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXJQb3BvdmVyRWxlbWVudC5kaXNjb25uZWN0KCk7XG4gICAgfVxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLlJFU0laRV9PQlNFUlZFUik7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbGVuZCcsIHRoaXMuT0JTRVJWRVJfQ0FMTEJBQ0spO1xuICB9XG5cbiAgcHJpdmF0ZSBfY3JlYXRlQ29tcG9uZW50KCkge1xuICAgIGlmICghdGhpcy5zSGVscFBvcG92ZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuY29tcG9uZW50UmVmKSB7XG4gICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICB9XG4gICAgY29uc3QgY29tcG9uZW50RmFjdG9yeSA9IHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KEhlbHBQb3BvdmVyQ29tcG9uZW50KTtcbiAgICBjb25zdCBjb21wb25lbnRSZWYgPSBjb21wb25lbnRGYWN0b3J5LmNyZWF0ZSh0aGlzLmluamVjdG9yKTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZiA9IGNvbXBvbmVudFJlZjtcbiAgICBpZiAodGhpcy5tdXRhdGlvbk9ic2VydmVyUG9wb3ZlckNvbnRlbnQpIHtcbiAgICAgIHRoaXMubXV0YXRpb25PYnNlcnZlclBvcG92ZXJDb250ZW50LmRpc2Nvbm5lY3QoKTtcbiAgICB9XG4gICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyUG9wb3ZlckNvbnRlbnQgPSBuZXcgTXV0YXRpb25PYnNlcnZlcih0aGlzLk9CU0VSVkVSX0NBTExCQUNLKTtcbiAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXJQb3BvdmVyQ29udGVudC5vYnNlcnZlKCh0aGlzLmNvbXBvbmVudFJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KS5xdWVyeVNlbGVjdG9yKCcucG9wb3Zlci1jb250ZW50JyksIHRoaXMuTVVUQVRJT05fT0JTRVJWRVJfQ09ORklHKTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNvbXBvbmVudFJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50KTtcbiAgICB0aGlzLmFwcFJlZi5hdHRhY2hWaWV3KGNvbXBvbmVudFJlZi5ob3N0Vmlldyk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMubGlzdGVuZXIpO1xuICAgIH0pXG4gICAgY29uc3QgY29tcG9uZW50ID0gY29tcG9uZW50UmVmLmluc3RhbmNlO1xuICAgIGNvbXBvbmVudC5wb3BvdmVyQ29udGVudCA9IHRoaXMuc0hlbHBQb3BvdmVyO1xuICAgIGNvbXBvbmVudC5jbG9zZUJ1dHRvbiA9IHRoaXMuY2xvc2VCdXR0b247XG4gICAgY29tcG9uZW50Lmljb24gPSB0aGlzLnBvcG92ZXJJY29uO1xuICAgIGNvbXBvbmVudC5oZWFkZXIgPSB0aGlzLnBvcG92ZXJIZWFkZXI7XG4gICAgY29tcG9uZW50LmZvb3RlciA9IHRoaXMucG9wb3ZlckZvb3RlcjtcbiAgICBjb21wb25lbnQuYnV0dG9uID0gdGhpcy5wb3BvdmVyQnV0dG9uVGV4dDtcbiAgICBjb21wb25lbnQucG9zaXRpb24gPSB0aGlzLmludGVybmFsUG9zaXRpb247XG4gICAgY29tcG9uZW50LmFycm93UG9zaXRpb24gPSB0aGlzLnBvcG92ZXJBcnJvd1Bvc2l0aW9uO1xuICAgIGNvbXBvbmVudC5idXR0b25DbGlja2VkID0gdGhpcy5idXR0b25DbGlja2VkO1xuICAgIGNvbXBvbmVudC5jbG9zZWQucGlwZSh0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgIH0pXG4gICAgdGhpcy5hcHBseVBvc2l0aW9uSW50b0VsZW1lbnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVzdHJveSgpIHtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMubGlzdGVuZXIpO1xuICAgIGlmICh0aGlzLmNvbXBvbmVudFJlZikge1xuICAgICAgdGhpcy5jb21wb25lbnRSZWYuZGVzdHJveSgpO1xuICAgICAgdGhpcy5jb21wb25lbnRSZWYgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuaW50ZXJuYWxQb3NpdGlvbiA9IHRoaXMucG9wb3ZlclBvc2l0aW9uO1xuXG4gICAgaWYgKHRoaXMubXV0YXRpb25PYnNlcnZlclBvcG92ZXJDb250ZW50KSB7XG4gICAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXJQb3BvdmVyQ29udGVudC5kaXNjb25uZWN0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVBvc2l0aW9uSW50b0VsZW1lbnQoKSB7XG4gICAgY29uc3QgcG9wb3ZlckVsZW1lbnRQb3NpdGlvbiA9IGdldEVsZW1lbnRQb3NpdGlvbkluZm8odGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy52YWxpZFBvc2l0aW9uO1xuICAgIHRoaXMuaW50ZXJuYWxQb3NpdGlvbiA9IHBvc2l0aW9uO1xuICAgIHRoaXMucG9wb3ZlckNvbXBvbmVudEluc3RhbmNlLnBvc2l0aW9uID0gdGhpcy5pbnRlcm5hbFBvc2l0aW9uO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgc3dpdGNoICh0aGlzLmludGVybmFsUG9zaXRpb24pIHtcbiAgICAgICAgY2FzZSAnYm90dG9tJzoge1xuICAgICAgICAgIHRoaXMuYXBwbHlQb3BvdmVyUG9zaXRpb25Cb3R0b20ocG9wb3ZlckVsZW1lbnRQb3NpdGlvbik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAndG9wJzoge1xuICAgICAgICAgIHRoaXMuYXBwbHlQb3BvdmVyUG9zaXRpb25Ub3AocG9wb3ZlckVsZW1lbnRQb3NpdGlvbik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnbGVmdCc6IHtcbiAgICAgICAgICB0aGlzLmFwcGx5UG9wb3ZlclBvc2l0aW9uTGVmdChwb3BvdmVyRWxlbWVudFBvc2l0aW9uKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdyaWdodCc6IHtcbiAgICAgICAgICB0aGlzLmFwcGx5UG9wb3ZlclBvc2l0aW9uUmlnaHQocG9wb3ZlckVsZW1lbnRQb3NpdGlvbik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMucG9wb3ZlckNvbXBvbmVudEluc3RhbmNlLnZpc2libGUgPSB0cnVlO1xuICAgIH0pXG5cbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlQb3BvdmVyUG9zaXRpb25Cb3R0b20ocG9wb3ZlckVsZW1lbnRQb3NpdGlvbjogRWxlbWVudFBvc2l0aW9uKSB7XG4gICAgY29uc3QgcG9wb3ZlckVsZW1lbnQgPSB0aGlzLmdldFBvcG92ZXJFbGVtZW50O1xuICAgIGNvbnN0IGxlZnRQb3BvdmVyID0gdGhpcy5nZXRIb3Jpem9udGFsTGVmdChwb3BvdmVyRWxlbWVudFBvc2l0aW9uKVxuICAgIHBvcG92ZXJFbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICBwb3BvdmVyRWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7bGVmdFBvcG92ZXJ9cHhgO1xuICAgIHBvcG92ZXJFbGVtZW50LnN0eWxlLnRvcCA9IGBjYWxjKCR7cG9wb3ZlckVsZW1lbnRQb3NpdGlvbi50b3B9cHggKyAke3BvcG92ZXJFbGVtZW50UG9zaXRpb24uZWxlbWVudEhlaWdodH1weClgXG4gIH1cblxuICBwcml2YXRlIGFwcGx5UG9wb3ZlclBvc2l0aW9uVG9wKHBvcG92ZXJFbGVtZW50UG9zaXRpb246IEVsZW1lbnRQb3NpdGlvbikge1xuICAgIGNvbnN0IHBvcG92ZXJFbGVtZW50ID0gdGhpcy5nZXRQb3BvdmVyRWxlbWVudDtcbiAgICBjb25zdCBsZWZ0UG9wb3ZlciA9IHRoaXMuZ2V0SG9yaXpvbnRhbExlZnQocG9wb3ZlckVsZW1lbnRQb3NpdGlvbilcbiAgICBjb25zdCBwb3BvdmVySGVpZ2h0ID0gcG9wb3ZlckVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xuICAgIHBvcG92ZXJFbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICBwb3BvdmVyRWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7bGVmdFBvcG92ZXJ9cHhgO1xuICAgIHBvcG92ZXJFbGVtZW50LnN0eWxlLnRvcCA9IGBjYWxjKCR7cG9wb3ZlckVsZW1lbnRQb3NpdGlvbi50b3B9cHggLSAke3BvcG92ZXJIZWlnaHR9cHgpYDtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlQb3BvdmVyUG9zaXRpb25MZWZ0KHBvcG92ZXJFbGVtZW50UG9zaXRpb246IEVsZW1lbnRQb3NpdGlvbikge1xuICAgIGNvbnN0IHBvcG92ZXJFbGVtZW50ID0gdGhpcy5nZXRQb3BvdmVyRWxlbWVudDtcbiAgICBjb25zdCBwb3BvdmVyV2lkdGggPSBwb3BvdmVyRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICBwb3BvdmVyRWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgcG9wb3ZlckVsZW1lbnQuc3R5bGUubGVmdCA9IGBjYWxjKCR7cG9wb3ZlckVsZW1lbnRQb3NpdGlvbi5yaWdodH1weCAtICR7cG9wb3ZlcldpZHRoICsgcG9wb3ZlckVsZW1lbnRQb3NpdGlvbi5lbGVtZW50V2lkdGh9cHgpYDtcbiAgICBwb3BvdmVyRWxlbWVudC5zdHlsZS50b3AgPSB0aGlzLmdldFZlcnRpY2FsVG9wKHBvcG92ZXJFbGVtZW50UG9zaXRpb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVBvcG92ZXJQb3NpdGlvblJpZ2h0KHBvcG92ZXJFbGVtZW50UG9zaXRpb246IEVsZW1lbnRQb3NpdGlvbikge1xuICAgIGNvbnN0IHBvcG92ZXJFbGVtZW50ID0gdGhpcy5nZXRQb3BvdmVyRWxlbWVudDtcbiAgICBwb3BvdmVyRWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgcG9wb3ZlckVsZW1lbnQuc3R5bGUubGVmdCA9IGBjYWxjKCR7cG9wb3ZlckVsZW1lbnRQb3NpdGlvbi5yaWdodH1weClgO1xuICAgIHBvcG92ZXJFbGVtZW50LnN0eWxlLnRvcCA9IHRoaXMuZ2V0VmVydGljYWxUb3AocG9wb3ZlckVsZW1lbnRQb3NpdGlvbik7XG4gIH1cblxuICBwcml2YXRlIGdldEhvcml6b250YWxMZWZ0KHBvcG92ZXJFbGVtZW50UG9zaXRpb246IEVsZW1lbnRQb3NpdGlvbikge1xuICAgIGNvbnN0IHBvcG92ZXJFbGVtZW50ID0gdGhpcy5nZXRQb3BvdmVyRWxlbWVudDtcbiAgICBjb25zdCBwb3BvdmVyV2lkdGggPSBwb3BvdmVyRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICBsZXQgX2hvcml6b250YWxMZWZ0ID0gcG9wb3ZlckVsZW1lbnRQb3NpdGlvbi5sZWZ0O1xuICAgIGlmICh0aGlzLnBvcG92ZXJBcnJvd1Bvc2l0aW9uID09PSAnZW5kJykge1xuICAgICAgX2hvcml6b250YWxMZWZ0ID0gcG9wb3ZlckVsZW1lbnRQb3NpdGlvbi5yaWdodCAtIHBvcG92ZXJXaWR0aDtcbiAgICB9IGVsc2UgaWYgKHRoaXMucG9wb3ZlckFycm93UG9zaXRpb24gPT09ICdtaWRkbGUnKSB7XG4gICAgICBfaG9yaXpvbnRhbExlZnQgPSAocG9wb3ZlckVsZW1lbnRQb3NpdGlvbi5sZWZ0ICsgcG9wb3ZlckVsZW1lbnRQb3NpdGlvbi5lbGVtZW50V2lkdGggLyAyKSAtIChwb3BvdmVyV2lkdGggLyAyKTtcbiAgICB9XG4gICAgcmV0dXJuIF9ob3Jpem9udGFsTGVmdDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VmVydGljYWxUb3AocG9wb3ZlckVsZW1lbnRQb3NpdGlvbjogRWxlbWVudFBvc2l0aW9uKSB7XG4gICAgY29uc3QgYXJyb3dFbGVtZW50UG9zaXRpb24gPSBnZXRFbGVtZW50UG9zaXRpb25JbmZvKHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLmFycm93RWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgICBjb25zdCBwb3BvdmVyQ29udGVudFBvc2l0aW9uID0gZ2V0RWxlbWVudFBvc2l0aW9uSW5mbyh0aGlzLmNvbXBvbmVudFJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50KTtcbiAgICBjb25zdCBwb3BvdmVyRWxlbWVudCA9IHRoaXMuZ2V0UG9wb3ZlckVsZW1lbnQ7XG4gICAgY29uc3QgcG9wb3ZlckhlaWdodCA9IHBvcG92ZXJFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcbiAgICBsZXQgdG9wID0gYGNhbGMoJHtwb3BvdmVyRWxlbWVudFBvc2l0aW9uLnRvcH1weCAtICR7cG9wb3ZlckhlaWdodCAvIDJ9cHggKyAke3BvcG92ZXJFbGVtZW50UG9zaXRpb24uZWxlbWVudEhlaWdodCAvIDJ9cHgpYDtcblxuICAgIGNvbnN0IGFycm93TWlkZGxlID0gYXJyb3dFbGVtZW50UG9zaXRpb24uZWxlbWVudEhlaWdodCAvIDI7XG4gICAgaWYgKHRoaXMucG9wb3ZlckFycm93UG9zaXRpb24gPT09ICdiZWdpbm5pbmcnKSB7XG4gICAgICBjb25zdCBkaXN0YW5jZUFycm93RnJvbVN0YXJ0ID0gYXJyb3dFbGVtZW50UG9zaXRpb24udG9wIC0gcG9wb3ZlckNvbnRlbnRQb3NpdGlvbi50b3A7XG4gICAgICB0b3AgPSBgY2FsYygke3BvcG92ZXJFbGVtZW50UG9zaXRpb24udG9wfXB4ICsgJHtwb3BvdmVyRWxlbWVudFBvc2l0aW9uLmVsZW1lbnRIZWlnaHQgLyAyfXB4IC0gJHtkaXN0YW5jZUFycm93RnJvbVN0YXJ0ICsgYXJyb3dNaWRkbGV9cHgpYDtcbiAgICB9IGVsc2UgaWYgKHRoaXMucG9wb3ZlckFycm93UG9zaXRpb24gPT09ICdlbmQnKSB7XG4gICAgICBjb25zdCBkaXN0YW5jZUFycm93RnJvbUVuZCA9IChwb3BvdmVyQ29udGVudFBvc2l0aW9uLnRvcCArIHBvcG92ZXJDb250ZW50UG9zaXRpb24uZWxlbWVudEhlaWdodCkgLSAoYXJyb3dFbGVtZW50UG9zaXRpb24udG9wICsgYXJyb3dFbGVtZW50UG9zaXRpb24uZWxlbWVudEhlaWdodCk7XG4gICAgICB0b3AgPSBgY2FsYygke3BvcG92ZXJFbGVtZW50UG9zaXRpb24udG9wfXB4IC0gJHtwb3BvdmVyQ29udGVudFBvc2l0aW9uLmVsZW1lbnRIZWlnaHR9cHggKyAke3BvcG92ZXJFbGVtZW50UG9zaXRpb24uZWxlbWVudEhlaWdodCAvIDJ9cHggKyAke2Rpc3RhbmNlQXJyb3dGcm9tRW5kICsgYXJyb3dNaWRkbGV9cHgpYDtcbiAgICB9XG4gICAgcmV0dXJuIHRvcDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TGVmdG92ZXJDb250ZW50QXZhaWxhYmxlRm9yUG9wb3ZlcigpOiBFbGVtZW50TGVmdG92ZXJQb3NpdGlvbiB7XG4gICAgcmV0dXJuIGdldEVsZW1lbnRMZWZ0b3ZlckNvbnRlbnRBdmFpbGFibGUodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZ2V0UG9wb3ZlckVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLmNvbXBvbmVudFJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgcG9wb3ZlckNvbXBvbmVudEluc3RhbmNlKCkge1xuICAgIHJldHVybiB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICogR2l2ZW4gdGhlIGN1cnJlbnQgcG9zaXRpb24gb2YgdGhlIHBvcG92ZXIgYW5kIHRoZSBhdmFpbGFibGUgc3BhY2UgYXJvdW5kXG4gKiB0aGUgdHJpZ2dlciBlbGVtZW50LCB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRoZSBwb3NpdGlvbiB0aGF0IHRoZSBwb3BvdmVyXG4gKiB3aWxsIGJlIHNldCBhdC5cbiAqXG4gKiBJZiB0aGUgcG9wb3ZlciB3aWxsIGZpdCBhdCB0aGUgZ2l2ZW4gcG9zaXRpb24sIGl0IHdpbGwgcmV0dXJuIHRoZSBzYW1lXG4gKiBwb3NpdGlvbi5cbiAqXG4gKiBJZiB0aGUgcG9wb3ZlciB3aWxsIG5vdCBmaXQgYXQgdGhlIGdpdmVuIHBvc2l0aW9uLCBpdCB3aWxsIHJldHVybiB0aGUgcG9zaXRpb25cbiAqIHRoYXQgaGFzIHRoZSBtb3N0IGF2YWlsYWJsZSBzcGFjZSAodG9wIG9yIGJvdHRvbSkuXG4gKlxuICogSWYgdGhlcmUgaXMgbm8gcG9zaXRpb24gd2l0aCBhdmFpbGFibGUgc3BhY2UsIGl0IHdpbGwgcmV0dXJuIHRoZSBnaXZlblxuICogcG9zaXRpb24uXG4gKlxuICogQHJldHVybnMgVGhlIHBvc2l0aW9uIHRoYXQgdGhlIHBvcG92ZXIgd2lsbCBiZSBzZXQgYXQuXG4gKi9cbiAgcHJpdmF0ZSBnZXQgdmFsaWRQb3NpdGlvbigpOiBIZWxwUG9wb3ZlclBvc2l0aW9uIHtcbiAgICBjb25zdCB7IGZyZWVEaXN0YW5jZVRvQm90dG9tLCBmcmVlRGlzdGFuY2VUb1RvcCwgZnJlZURpc3RhbmNlVG9MZWZ0LCBmcmVlRGlzdGFuY2VUb1JpZ2h0IH0gPSB0aGlzLmdldExlZnRvdmVyQ29udGVudEF2YWlsYWJsZUZvclBvcG92ZXIoKTtcblxuICAgIGNvbnN0IHBvcG92ZXJFbGVtZW50UG9zaXRpb24gPSBnZXRFbGVtZW50UG9zaXRpb25JbmZvKHRoaXMuY29tcG9uZW50UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQpO1xuICAgIGNvbnN0IHBvcG92ZXJFbGVtZW50V2lkdGggPSBwb3BvdmVyRWxlbWVudFBvc2l0aW9uLmVsZW1lbnRXaWR0aDtcbiAgICBjb25zdCBwb3BvdmVyRWxlbWVudEhlaWdodCA9IHBvcG92ZXJFbGVtZW50UG9zaXRpb24uZWxlbWVudEhlaWdodDtcblxuICAgIGNvbnN0IHJlbWFpbmluZ1NwYWNlQm90dG9tID0gZnJlZURpc3RhbmNlVG9Cb3R0b20gLSBwb3BvdmVyRWxlbWVudEhlaWdodDtcbiAgICBjb25zdCByZW1haW5pbmdTcGFjZVRvcCA9IGZyZWVEaXN0YW5jZVRvVG9wIC0gcG9wb3ZlckVsZW1lbnRIZWlnaHQ7XG4gICAgY29uc3QgcmVtYWluaW5nU3BhY2VMZWZ0ID0gZnJlZURpc3RhbmNlVG9MZWZ0IC0gcG9wb3ZlckVsZW1lbnRXaWR0aDtcbiAgICBjb25zdCByZW1haW5pbmdTcGFjZVJpZ2h0ID0gZnJlZURpc3RhbmNlVG9SaWdodCAtIHBvcG92ZXJFbGVtZW50V2lkdGg7XG5cbiAgICBjb25zdCBjYW5TZXRBdEJvdHRvbSA9IHJlbWFpbmluZ1NwYWNlQm90dG9tID4gMDtcbiAgICBjb25zdCBjYW5TZXRBdFRvcCA9IHJlbWFpbmluZ1NwYWNlVG9wID4gMDtcbiAgICBjb25zdCBjYW5TZXRBdExlZnQgPSByZW1haW5pbmdTcGFjZUxlZnQgPiAwO1xuICAgIGNvbnN0IGNhblNldEF0UmlnaHQgPSByZW1haW5pbmdTcGFjZVJpZ2h0ID4gMDtcblxuICAgIGxldCB2YWxpZFBvc2l0aW9uOiBIZWxwUG9wb3ZlclBvc2l0aW9uO1xuICAgIGlmIChjYW5TZXRBdEJvdHRvbSAmJiB0aGlzLnBvcG92ZXJQb3NpdGlvbiA9PT0gJ2JvdHRvbScpIHtcbiAgICAgIHZhbGlkUG9zaXRpb24gPSAnYm90dG9tJztcbiAgICB9IGVsc2UgaWYgKGNhblNldEF0VG9wICYmIHRoaXMucG9wb3ZlclBvc2l0aW9uID09PSAndG9wJykge1xuICAgICAgdmFsaWRQb3NpdGlvbiA9ICd0b3AnO1xuICAgIH0gZWxzZSBpZiAoY2FuU2V0QXRMZWZ0ICYmIHRoaXMucG9wb3ZlclBvc2l0aW9uID09PSAnbGVmdCcpIHtcbiAgICAgIHZhbGlkUG9zaXRpb24gPSAnbGVmdCc7XG4gICAgfSBlbHNlIGlmIChjYW5TZXRBdFJpZ2h0ICYmIHRoaXMucG9wb3ZlclBvc2l0aW9uID09PSAncmlnaHQnKSB7XG4gICAgICB2YWxpZFBvc2l0aW9uID0gJ3JpZ2h0JztcbiAgICB9XG5cbiAgICBjb25zdCBuZWVkVXNlT3RoZXJQb3NpdGlvbiA9ICF2YWxpZFBvc2l0aW9uO1xuICAgIGlmIChuZWVkVXNlT3RoZXJQb3NpdGlvbikge1xuICAgICAgY29uc3QgZnJlZVBvc2l0aW9uczogeyBwb3NpdGlvbjogSGVscFBvcG92ZXJQb3NpdGlvbiwgZnJlZURpc3RhbmNlOiBudW1iZXIgfVtdID0gW1xuICAgICAgICB7XG4gICAgICAgICAgcG9zaXRpb246ICdib3R0b20nIGFzIEhlbHBQb3BvdmVyUG9zaXRpb24sXG4gICAgICAgICAgZnJlZURpc3RhbmNlOiByZW1haW5pbmdTcGFjZUJvdHRvbSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHBvc2l0aW9uOiAndG9wJyBhcyBIZWxwUG9wb3ZlclBvc2l0aW9uLFxuICAgICAgICAgIGZyZWVEaXN0YW5jZTogcmVtYWluaW5nU3BhY2VUb3AsXG4gICAgICAgIH1cbiAgICAgIF0uZmlsdGVyKCh4KSA9PiB4LmZyZWVEaXN0YW5jZSA+IDApO1xuXG4gICAgICBpZiAoZnJlZVBvc2l0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucG9wb3ZlclBvc2l0aW9uO1xuICAgICAgfVxuICAgICAgY29uc3QgaXRlbVdpdGhNYXhGcmVlRGlzdGFuY2UgPSBmcmVlUG9zaXRpb25zLnNvcnQoKGEsIGIpID0+IGIuZnJlZURpc3RhbmNlIC0gYS5mcmVlRGlzdGFuY2UpWzBdO1xuICAgICAgcmV0dXJuIGl0ZW1XaXRoTWF4RnJlZURpc3RhbmNlLnBvc2l0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5wb3BvdmVyUG9zaXRpb247XG4gICAgfVxuICB9XG59XG5cbiJdfQ==
@@ -1 +1 @@
1
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscC1wb3BvdmVyLm1vZGVscy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjb21wb25lbnRzL2hlbHAtcG9wb3Zlci9tb2RlbHMvaGVscC1wb3BvdmVyLm1vZGVscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiXG5leHBvcnQgdHlwZSBIZWxwUG9wb3ZlclBvc2l0aW9uID0gJ3RvcCcgfCAncmlnaHQnIHwgJ2JvdHRvbScgfCAnbGVmdCc7XG5leHBvcnQgdHlwZSBIZWxwUG9wb3ZlckFycm93UG9zaXRpb24gPSAnYmVnaW5uaW5nJyB8ICdtaWRkbGUnIHwgJ2VuZCc7XG5cblxuZXhwb3J0IHR5cGUgUG9wb3ZlckVsZW1lbnRUcmlnZ2VyUG9zaXRpb24gPSB7XG4gICAgdG9wOiBudW1iZXI7XG4gICAgbGVmdDogbnVtYmVyO1xuICAgIHJpZ2h0OiBudW1iZXI7XG4gICAgZWxlbWVudEhlaWdodDogbnVtYmVyXG4gICAgZWxlbWVudFdpZHRoOiBudW1iZXI7XG59XG5cbmV4cG9ydCB0eXBlIFBvcG92ZXJUcmlnZ2VyQXZhaWxhYmxlUG9zaXRpb24gPSB7XG4gICAgZnJlZURpc3RhbmNlVG9Cb3R0b206IG51bWJlcjtcbiAgICBmcmVlRGlzdGFuY2VUb1RvcDogbnVtYmVyO1xuICAgIGZyZWVEaXN0YW5jZVRvTGVmdDogbnVtYmVyO1xuICAgIGZyZWVEaXN0YW5jZVRvUmlnaHQ6IG51bWJlcjtcbn1cbiJdfQ==
1
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscC1wb3BvdmVyLm1vZGVscy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjb21wb25lbnRzL2hlbHAtcG9wb3Zlci9tb2RlbHMvaGVscC1wb3BvdmVyLm1vZGVscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiXG5leHBvcnQgdHlwZSBIZWxwUG9wb3ZlclBvc2l0aW9uID0gJ3RvcCcgfCAncmlnaHQnIHwgJ2JvdHRvbScgfCAnbGVmdCc7XG5leHBvcnQgdHlwZSBIZWxwUG9wb3ZlckFycm93UG9zaXRpb24gPSAnYmVnaW5uaW5nJyB8ICdtaWRkbGUnIHwgJ2VuZCc7XG4iXX0=
@@ -13,7 +13,7 @@ var TooltipComponent = /** @class */ (function () {
13
13
  TooltipComponent = __decorate([
14
14
  Component({
15
15
  template: "<div\n id=\"tooltip\"\n class=\"tooltip\"\n [ngClass]=\"['tooltip--' + position]\"\n [class.tooltip--visible]=\"visible\"\n [ngStyle]=\"{\n 'left': left + 'px',\n 'top': top + 'px'\n }\">\n <ng-template\n *ngIf=\"escape;\n then escapeTemplate;\n else noEscapeTemplate\">\n </ng-template> \n</div>\n\n<ng-template #noEscapeTemplate>\n <span\n class=\"tooltip__content\"\n [innerHTML]=\"tooltip\">\n </span>\n</ng-template>\n\n<ng-template #escapeTemplate>\n <span class=\"tooltip__content\">\n {{ tooltip }}\n </span>\n</ng-template>",
16
- styles: [".tooltip{background-color:#000;border-radius:2px;color:#fff;font-family:\"Open Sans\",sans-serif;font-size:14px;font-weight:400;line-height:21px;margin-top:5px;opacity:0;padding:8px;position:fixed;transform:translateX(-50%);text-align:center;max-width:220px;word-wrap:break-word;z-index:99999}.tooltip--visible{opacity:1;transition:opacity .3s}.tooltip::before{content:\"\";height:0;position:absolute;width:0}.tooltip--bottom{margin-top:8px;transform:translateX(-50%)}.tooltip--bottom::before{border:5px solid transparent;border-bottom:5px solid #000;left:calc(50% - 5px);top:-10px}.tooltip--top{margin-bottom:8px;transform:translate(-50%,-100%)}.tooltip--top::before{border:5px solid transparent;border-top:5px solid #000;left:calc(50% - 5px);bottom:-10px}.tooltip--left{margin-right:28px;transform:translate(calc(-100% - 7px),-50%)}.tooltip--left::before{border:5px solid transparent;border-left:5px solid #000;right:-10px;bottom:calc(50% - 5px)}.tooltip--right{margin-left:7px;transform:translateY(-50%)}.tooltip--right::before{border:5px solid transparent;border-right:5px solid #000;left:-10px;bottom:calc(50% - 5px)}"]
16
+ styles: [".tooltip{background-color:#000;border-radius:2px;color:#fff;font-family:\"Open Sans\",sans-serif;font-size:14px;font-weight:400;line-height:21px;opacity:0;padding:8px;position:fixed;transform:translateX(-50%);text-align:center;max-width:220px;word-wrap:break-word;z-index:99999}.tooltip--visible{opacity:1;transition:opacity .3s}.tooltip::before{content:\"\";height:0;position:absolute;width:0}.tooltip--bottom{margin-top:5px;transform:translateX(-50%)}.tooltip--bottom::before{border:5px solid transparent;border-bottom:5px solid #000;left:calc(50% - 5px);top:-10px}.tooltip--top{margin-bottom:5px;transform:translate(-50%,-100%)}.tooltip--top::before{border:5px solid transparent;border-top:5px solid #000;left:calc(50% - 5px);bottom:-10px}.tooltip--left{margin-right:28px;transform:translate(calc(-100% - 7px),-50%)}.tooltip--left::before{border:5px solid transparent;border-left:5px solid #000;right:-10px;bottom:calc(50% - 5px)}.tooltip--right{margin-left:7px;transform:translateY(-50%)}.tooltip--right::before{border:5px solid transparent;border-right:5px solid #000;left:-10px;bottom:calc(50% - 5px)}"]
17
17
  })
18
18
  ], TooltipComponent);
19
19
  return TooltipComponent;
@@ -1,7 +1,7 @@
1
- import { __decorate, __values } from "tslib";
2
- import { isMousePositionOutsideOfElement, isNullOrUndefined } from './../utils/utils';
1
+ import { __decorate } from "tslib";
3
2
  import { ApplicationRef, ComponentFactoryResolver, ComponentRef, Directive, ElementRef, EmbeddedViewRef, HostListener, Injector, Input, OnDestroy, OnInit, Renderer2, } from "@angular/core";
4
3
  import { DebounceUtils } from "../utils/debouce";
4
+ import { getElementLeftoverContentAvailable, getElementPositionInfo, isMousePositionOutsideOfElement, isNullOrUndefined } from './../utils/utils';
5
5
  import { MobileBehavior, TooltipEvent, TooltipPosition } from "./models";
6
6
  import { TooltipComponent } from "./tooltip.component";
7
7
  var TooltipDirective = /** @class */ (function () {
@@ -180,64 +180,98 @@ var TooltipDirective = /** @class */ (function () {
180
180
  }
181
181
  };
182
182
  TooltipDirective.prototype.setTooltipPositionProperty = function () {
183
- var e_1, _a;
183
+ var _this = this;
184
184
  if (!this.componentRef) {
185
185
  return;
186
186
  }
187
- var margin = 20;
188
187
  var anchorSize = 5;
189
- var domElem = this.componentRef.hostView.rootNodes[0].querySelector("#tooltip");
190
- var _b = domElem.getBoundingClientRect(), height = _b.height, width = _b.width;
191
- var _c = this.elementRef.nativeElement.getBoundingClientRect(), left = _c.left, right = _c.right, top = _c.top, bottom = _c.bottom;
188
+ var _a = this.elementRef.nativeElement.getBoundingClientRect(), left = _a.left, right = _a.right;
189
+ var tooltipElementPosition = getElementPositionInfo(this.tooltipDivElement);
190
+ var elementLeftover = getElementLeftoverContentAvailable(this.elementRef.nativeElement);
191
+ var elementTriggerPosition = getElementPositionInfo(this.elementRef.nativeElement);
192
+ var isPositionHorizontal = [TooltipPosition.Left, TooltipPosition.Right].includes(this.position);
193
+ var distanceToBorders = isPositionHorizontal ? tooltipElementPosition.elementWidth : tooltipElementPosition.elementHorizontalCenter;
194
+ var canSetAtTop = elementLeftover.freeDistanceToTop > tooltipElementPosition.elementHeight;
195
+ var canSetAtLeft = elementLeftover.freeDistanceToLeft > distanceToBorders;
196
+ var canSetAtRight = elementLeftover.freeDistanceToRight > distanceToBorders;
197
+ var canSetAtBottom = elementLeftover.freeDistanceToBottom > tooltipElementPosition.elementHeight;
198
+ var topVertical = elementTriggerPosition.top + elementTriggerPosition.elementVerticalCenter;
199
+ var checkTopPosition = function () {
200
+ return canSetAtTop && canSetAtLeft && canSetAtRight;
201
+ };
202
+ var checkBottomPosition = function () {
203
+ return canSetAtBottom && canSetAtLeft && canSetAtRight;
204
+ };
205
+ var checkLeftPosition = function () {
206
+ return canSetAtLeft && canSetAtTop && canSetAtBottom;
207
+ };
208
+ var checkRightPosition = function () {
209
+ return canSetAtRight && canSetAtTop && canSetAtBottom;
210
+ };
211
+ var setTopPosition = function () {
212
+ return {
213
+ left: left + (right - left) / 2,
214
+ top: elementTriggerPosition.top - anchorSize
215
+ };
216
+ };
217
+ var setBottomPosition = function () {
218
+ return {
219
+ left: left + (right - left) / 2,
220
+ top: elementTriggerPosition.top + elementTriggerPosition.elementHeight
221
+ };
222
+ };
223
+ var setLeftPosition = function () {
224
+ return {
225
+ left: left,
226
+ top: topVertical
227
+ };
228
+ };
229
+ var setRightPosition = function () {
230
+ return {
231
+ left: right,
232
+ top: topVertical
233
+ };
234
+ };
192
235
  var positions = [
193
236
  {
194
237
  pos: TooltipPosition.Top,
195
- check: function () { return top > height; },
196
- set: function () { return ({ left: left + (right - left) / 2, top: top - margin - anchorSize }); },
238
+ check: checkTopPosition,
239
+ set: setTopPosition
197
240
  },
198
241
  {
199
242
  pos: TooltipPosition.Bottom,
200
- check: function () { return document.body.clientHeight - bottom > height; },
201
- set: function () { return ({ left: left + (right - left) / 2, top: bottom + margin }); },
243
+ check: checkBottomPosition,
244
+ set: setBottomPosition
202
245
  },
203
246
  {
204
247
  pos: TooltipPosition.Left,
205
- check: function () { return left > width; },
206
- set: function () { return ({ left: left - margin, top: top + height / 2 - anchorSize }); },
248
+ check: checkLeftPosition,
249
+ set: setLeftPosition
207
250
  },
208
251
  {
209
252
  pos: TooltipPosition.Right,
210
- check: function () { return document.body.clientWidth - right > width; },
211
- set: function () { return ({ left: right + margin, top: top + height / 2 - anchorSize }); },
212
- },
213
- ];
214
- if (this.componentRef) {
215
- try {
216
- for (var positions_1 = __values(positions), positions_1_1 = positions_1.next(); !positions_1_1.done; positions_1_1 = positions_1.next()) {
217
- var _d = positions_1_1.value, pos = _d.pos, check = _d.check, set = _d.set;
218
- if (check()) {
219
- this.position = pos;
220
- var _e = set(), left_1 = _e.left, top_1 = _e.top;
221
- this.componentRef.instance.left = Math.round(left_1);
222
- this.componentRef.instance.top = Math.round(top_1);
223
- this.componentRef.instance.position = this.position;
224
- return;
225
- }
226
- }
253
+ check: checkRightPosition,
254
+ set: setRightPosition
227
255
  }
228
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
229
- finally {
230
- try {
231
- if (positions_1_1 && !positions_1_1.done && (_a = positions_1.return)) _a.call(positions_1);
232
- }
233
- finally { if (e_1) throw e_1.error; }
256
+ ];
257
+ var positionDefined = positions.find(function (position) { return position.pos === _this.position; });
258
+ var validPosition = positionDefined;
259
+ var canUseDefinedPosition = positionDefined.check();
260
+ if (canUseDefinedPosition) {
261
+ validPosition = positionDefined;
262
+ }
263
+ else if (!canUseDefinedPosition) {
264
+ var validAlternativePosition = positions.find(function (position) { return position.check(); });
265
+ if (validAlternativePosition) {
266
+ validPosition = validAlternativePosition;
234
267
  }
235
- // Se não conseguir posicionar, mostrar abaixo
236
- this.position = TooltipPosition.Bottom;
237
- this.componentRef.instance.left = Math.round(left + (right - left) / 2);
238
- this.componentRef.instance.top = Math.round(bottom + margin);
239
- this.componentRef.instance.position = this.position;
240
268
  }
269
+ var _position = validPosition.set();
270
+ var positionLeft = _position.left;
271
+ var positionTop = _position.top;
272
+ this.componentRef.instance.left = Math.round(positionLeft);
273
+ this.componentRef.instance.top = Math.round(positionTop);
274
+ this.componentRef.instance.position = validPosition.pos;
241
275
  };
242
276
  TooltipDirective.prototype.setTooltipComponentProperties = function () {
243
277
  if (this.componentRef !== null) {
@@ -321,4 +355,4 @@ var TooltipDirective = /** @class */ (function () {
321
355
  return TooltipDirective;
322
356
  }());
323
357
  export { TooltipDirective };
324
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy90b29sdGlwL3Rvb2x0aXAuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN0RixPQUFPLEVBQ0gsY0FBYyxFQUNkLHdCQUF3QixFQUN4QixZQUFZLEVBQ1osU0FBUyxFQUNULFVBQVUsRUFDVixlQUFlLEVBQ2YsWUFBWSxFQUNaLFFBQVEsRUFDUixLQUFLLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFDTixTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN6RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQU12RDtJQW9DSSwwQkFDcUIsVUFBc0IsRUFDdEIsTUFBc0IsRUFDdEIsd0JBQWtELEVBQ2xELFFBQWtCLEVBQ2xCLGFBQTRCLEVBQzVCLFFBQW1CO1FBTnhDLGlCQVVDO1FBVG9CLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFDdEIsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUNsRCxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFyQ2pDLGFBQVEsR0FBb0IsZUFBZSxDQUFDLEdBQUcsQ0FBQztRQUdoRCxjQUFTLEdBQUcsR0FBRyxDQUFDO1FBTWhCLGlCQUFZLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQztR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SyxFQUFFO3VEQUNlO0lBR3ZCO1FBREMsS0FBSyxFQUFFO3lEQUNtQjtJQUczQjtRQURDLEtBQUssRUFBRTswREFDaUM7SUFHekM7UUFEQyxLQUFLLEVBQUU7b0RBQ2M7SUFHdEI7UUFEQyxLQUFLLEVBQUU7cURBQ2M7SUFHdEI7UUFEQyxLQUFLLEVBQUU7NERBQ3dDO0lBR2hEO1FBREMsS0FBSyxFQUFFOzZEQUNpQztJQWdHekM7UUFGQyxZQUFZLENBQUMsT0FBTyxDQUFDO1FBQ3JCLFlBQVksQ0FBQyxTQUFTLENBQUM7bURBS3ZCO0lBR0Q7UUFEQyxZQUFZLENBQUMsT0FBTyxDQUFDO21EQUtyQjtJQUdEO1FBREMsWUFBWSxDQUFDLE1BQU0sQ0FBQztrREFLcEI7SUFHRDtRQURDLFlBQVksQ0FBQyxZQUFZLENBQUM7d0RBSzFCO0lBSUQ7UUFGQyxZQUFZLENBQUMsWUFBWSxDQUFDO1FBQzFCLFlBQVksQ0FBQyxPQUFPLENBQUM7d0RBS3JCO0lBR0Q7UUFEQyxZQUFZLENBQUMsWUFBWSxDQUFDO3dEQVMxQjtJQUdEO1FBREMsWUFBWSxDQUFDLFVBQVUsQ0FBQztzREFReEI7SUFoTFEsZ0JBQWdCO1FBSDVCLFNBQVMsQ0FBQztZQUNQLFFBQVEsRUFBRSxZQUFZO1NBQ3pCLENBQUM7T0FDVyxnQkFBZ0IsQ0FrVDVCO0lBQUQsdUJBQUM7Q0FBQSxBQWxURCxJQWtUQztTQWxUWSxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc01vdXNlUG9zaXRpb25PdXRzaWRlT2ZFbGVtZW50LCBpc051bGxPclVuZGVmaW5lZCB9IGZyb20gJy4vLi4vdXRpbHMvdXRpbHMnO1xuaW1wb3J0IHtcbiAgICBBcHBsaWNhdGlvblJlZixcbiAgICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgQ29tcG9uZW50UmVmLFxuICAgIERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIEVtYmVkZGVkVmlld1JlZixcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBSZW5kZXJlcjIsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBEZWJvdW5jZVV0aWxzIH0gZnJvbSBcIi4uL3V0aWxzL2RlYm91Y2VcIjtcbmltcG9ydCB7IE1vYmlsZUJlaGF2aW9yLCBUb29sdGlwRXZlbnQsIFRvb2x0aXBQb3NpdGlvbiB9IGZyb20gXCIuL21vZGVsc1wiO1xuaW1wb3J0IHsgVG9vbHRpcENvbXBvbmVudCB9IGZyb20gXCIuL3Rvb2x0aXAuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBFbGVtZW50QXJlYSB9IGZyb20gXCIuL21vZGVscy9lbGVtZW50LWFyZWFcIjtcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6IFwiW3NUb29sdGlwXVwiLFxufSlcbmV4cG9ydCBjbGFzcyBUb29sdGlwRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIEBJbnB1dChcInNUb29sdGlwXCIpXG4gICAgcHVibGljIHRvb2x0aXA6IHN0cmluZztcblxuICAgIEBJbnB1dChcInRvb2x0aXBQb3NpdGlvblwiKVxuICAgIHB1YmxpYyBwb3NpdGlvbjogVG9vbHRpcFBvc2l0aW9uID0gVG9vbHRpcFBvc2l0aW9uLlRvcDtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNob3dEZWxheSA9IDUwMDtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRpc3BsYXlUaW1lOiBudW1iZXI7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB0b29sdGlwRXZlbnQgPSBUb29sdGlwRXZlbnQuSG92ZXI7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBlc2NhcGUgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHZpc2libGUgPSB0cnVlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbW9iaWxlQmVoYXZpb3IgPSBNb2JpbGVCZWhhdmlvci5QcmVzc2luZztcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGZvY3VzZWRJbnB1dFJlZjogSFRNTElucHV0RWxlbWVudDtcblxuICAgIHByaXZhdGUgY29tcG9uZW50UmVmOiBDb21wb25lbnRSZWY8YW55PiA9IG51bGw7XG4gICAgcHJpdmF0ZSBzaG93VGltZW91dD86IG51bWJlcjtcbiAgICBwcml2YXRlIHRvdWNoVGltZW91dD86IG51bWJlcjtcbiAgICBwcml2YXRlIHRvb2x0aXBEaXZFbGVtZW50PzogSFRNTEVsZW1lbnQ7XG4gICAgcHJpdmF0ZSByZWFkb25seSBib3VuZE9uV2luZG93TW91c2VNb3ZlRnVuY3Rpb246IChldmVudDogTW91c2VFdmVudCkgPT4gdm9pZDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlYm91bmNlQ3JlYXRlVG9vbHRpcEZ1bmN0aW9uOiAoKSA9PiB2b2lkO1xuICAgIHByaXZhdGUgZXhpc3RGb2N1c2VkSW5wdXRSZWZUb29sdGlwID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGFwcFJlZjogQXBwbGljYXRpb25SZWYsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGRlYm91bmNlVXRpbHM6IERlYm91bmNlVXRpbHMsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgcmVuZGVyZXI6IFJlbmRlcmVyMlxuICAgICkge1xuICAgICAgICB0aGlzLmJvdW5kT25XaW5kb3dNb3VzZU1vdmVGdW5jdGlvbiA9IHRoaXMub25XaW5kb3dNb3VzZU1vdmUuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5kZWJvdW5jZUNyZWF0ZVRvb2x0aXBGdW5jdGlvbiA9IHRoaXMuZGVib3VuY2VVdGlscy5kZWJvdW5jZUxlYWRpbmcoKCkgPT4gdGhpcy5fY3JlYXRlVG9vbHRpcCh0cnVlLCB0cnVlKSk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnZhbGlkYXRlUG9zaXRpb24oKTtcbiAgICAgICAgdGhpcy51cGRhdGVUb29sdGlwVmlzaWJpbGl0eVdoZW5Gb2N1c09uSW5wdXQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25XaW5kb3dNb3VzZU1vdmUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbXBvbmVudFJlZikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVsZW1lbnRSZWN0ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IHRvb2xUaXBSZWN0ID0gdGhpcy50b29sdGlwRGl2RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICBjb25zdCB0b3RhbEVsZW1lbnRBcmVhID0ge1xuICAgICAgICAgICAgdG9wOiBNYXRoLm1pbihlbGVtZW50UmVjdC50b3AsIHRvb2xUaXBSZWN0LnRvcCksXG4gICAgICAgICAgICByaWdodDogTWF0aC5tYXgoZWxlbWVudFJlY3QucmlnaHQsIHRvb2xUaXBSZWN0LnJpZ2h0KSxcbiAgICAgICAgICAgIGxlZnQ6IE1hdGgubWluKGVsZW1lbnRSZWN0LmxlZnQsIHRvb2xUaXBSZWN0LmxlZnQpLFxuICAgICAgICAgICAgYm90dG9tOiBNYXRoLm1heChlbGVtZW50UmVjdC5ib3R0b20sIHRvb2xUaXBSZWN0LmJvdHRvbSksXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGlzTW91c2VQb3NpdGlvbk91dHNpZGVPZkVsZW1lbnQoZXZlbnQsIHRvdGFsRWxlbWVudEFyZWEpICYmICF0aGlzLmV4aXN0Rm9jdXNlZElucHV0UmVmVG9vbHRpcCkge1xuICAgICAgICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNYW5pcHVsYSBhIHZpc2liaWxpZGFkZSBkbyB0b29sdGlwIHF1YW5kbyBob3V2ZXIgdW1hIHJlZmVyw6puY2lhIGRlIGlucHV0LlxuICAgICAqL1xuICAgIHByaXZhdGUgdXBkYXRlVG9vbHRpcFZpc2liaWxpdHlXaGVuRm9jdXNPbklucHV0KCkge1xuICAgICAgICBpZiAodGhpcy5mb2N1c2VkSW5wdXRSZWYpIHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0Rm9jdXMgPSB0aGlzLmZvY3VzZWRJbnB1dFJlZjtcbiAgICAgICAgICAgIGNvbnN0IGljb24gPSB0aGlzLmdldEljb25Gcm9tRm9jdXNlZElucHV0KCk7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmxpc3RlbihpbnB1dEZvY3VzLCBcImZvY3VzXCIsICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaWNvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmV4aXN0Rm9jdXNlZElucHV0UmVmVG9vbHRpcCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZVRvb2x0aXAoZmFsc2UsIGZhbHNlKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4oaW5wdXRGb2N1cywgXCJibHVyXCIsICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaWNvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZVRvb2x0aXAoaWNvbik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmV4aXN0Rm9jdXNlZElucHV0UmVmVG9vbHRpcCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT2J0w6ltIG8gZWxlbWVudG8gZG8gw61jb25lIGFzc29jaWFkbyBhbyBsYWJlbCBkbyBpbnB1dCBlbSBmb2N1cy5cbiAgICAgKiBAcmV0dXJucyBPIMOtY29uZSBkbyBpbnB1dCBlbSBmb2N1cy5cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldEljb25Gcm9tRm9jdXNlZElucHV0KCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBvIHRvb2x0aXAgYXNzb2NpYWRvIGFvIMOtY29uZSBkbyBpbnB1dCBlbSBmb2N1cy5cbiAgICAgKiBAcGFyYW0gaWNvbiBPIMOtY29uZSBkbyBpbnB1dCBlbSBmb2N1cy5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlbW92ZVRvb2x0aXAoaWNvbjogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdG9vbHRpcCA9IGljb24ucXVlcnlTZWxlY3RvcihcIi50b29sdGlwXCIpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBpZiAodG9vbHRpcCkge1xuICAgICAgICAgICAgdG9vbHRpcC5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHdoZW5ldmVyIHRoZSBjb21wb25lbnQgd2l0aCB0aGUgdG9vbHRpcCBpcyBjbGlja2VkIEkgZGVzdHJveSB0aGUgdG9vbHRpcC5cbiAgICAvLyB3aGVuZXZlciBhIGtleSBpcyBwcmVzc2VkIG9uIHRoZSBjb21wb25lbnQgd2l0aCB0aGUgdG9vbHRpcCBJIGRlc3Ryb3kgdGhlIHRvb2x0aXAuXG4gICAgQEhvc3RMaXN0ZW5lcihcImNsaWNrXCIpXG4gICAgQEhvc3RMaXN0ZW5lcihcImtleWRvd25cIilcbiAgICBwdWJsaWMgb25DbGljaygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudG9vbHRpcEV2ZW50ID09PSBUb29sdGlwRXZlbnQuSG92ZXIgJiYgIW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkgJiYgIW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZS9pKSkge1xuICAgICAgICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKFwiZm9jdXNcIilcbiAgICBwdWJsaWMgb25Gb2N1cygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudG9vbHRpcEV2ZW50ID09PSBUb29sdGlwRXZlbnQuRm9jdXMpIHtcbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZVRvb2x0aXAodHJ1ZSwgdHJ1ZSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoXCJibHVyXCIpXG4gICAgcHVibGljIG9uQmx1cigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudG9vbHRpcEV2ZW50ID09PSBUb29sdGlwRXZlbnQuRm9jdXMpIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcihcIm1vdXNlZW50ZXJcIilcbiAgICBwdWJsaWMgb25Nb3VzZUVudGVyKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy50b29sdGlwRXZlbnQgPT09IFRvb2x0aXBFdmVudC5Ib3Zlcikge1xuICAgICAgICAgICAgdGhpcy5kZWJvdW5jZUNyZWF0ZVRvb2x0aXBGdW5jdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIilcbiAgICBASG9zdExpc3RlbmVyKFwid2hlZWxcIilcbiAgICBwdWJsaWMgb25Nb3VzZUxlYXZlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy50b29sdGlwRXZlbnQgPT09IFRvb2x0aXBFdmVudC5Ib3ZlciAmJiAhdGhpcy5leGlzdEZvY3VzZWRJbnB1dFJlZlRvb2x0aXApIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcihcInRvdWNoc3RhcnRcIilcbiAgICBwdWJsaWMgb25Ub3VjaFN0YXJ0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy50b29sdGlwRXZlbnQgPT09IFRvb2x0aXBFdmVudC5Ib3Zlcikge1xuICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLnRvdWNoVGltZW91dCk7XG4gICAgICAgICAgICBjb25zdCBfZGVsYXkgPSB0aGlzLm1vYmlsZUJlaGF2aW9yID09PSBNb2JpbGVCZWhhdmlvci5QcmVzc2luZyA/IHRoaXMuc2hvd0RlbGF5IDogMFxuICAgICAgICAgICAgdGhpcy50b3VjaFRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlVG9vbHRpcCh0cnVlLCB0cnVlKTtcbiAgICAgICAgICAgIH0sIF9kZWxheSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoXCJ0b3VjaGVuZFwiKVxuICAgIHB1YmxpYyBvblRvdWNoRW5kKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy50b29sdGlwRXZlbnQgPT09IFRvb2x0aXBFdmVudC5Ib3Zlcikge1xuICAgICAgICAgICAgaWYgKHRoaXMubW9iaWxlQmVoYXZpb3IgPT09IE1vYmlsZUJlaGF2aW9yLlByZXNzaW5nKSB7XG4gICAgICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLnRvdWNoVGltZW91dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbGlkYXRlUG9zaXRpb24oKSB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5zUG9zaXRpb24gPSBbVG9vbHRpcFBvc2l0aW9uLlRvcCwgVG9vbHRpcFBvc2l0aW9uLlJpZ2h0LCBUb29sdGlwUG9zaXRpb24uQm90dG9tLCBUb29sdGlwUG9zaXRpb24uTGVmdF0uaW5jbHVkZXMoXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCFjb250YWluc1Bvc2l0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uID0gVG9vbHRpcFBvc2l0aW9uLlRvcDtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVG9vbHRpcCAke3RoaXMucG9zaXRpb259IHBvc2l0aW9uIGlzIHVuZXhwZWN0ZWRgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RG9tRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudEZhY3RvcnkgPSB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShUb29sdGlwQ29tcG9uZW50KTtcbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWYgPSBjb21wb25lbnRGYWN0b3J5LmNyZWF0ZSh0aGlzLmluamVjdG9yKTtcbiAgICAgICAgdGhpcy5hcHBSZWYuYXR0YWNoVmlldyh0aGlzLmNvbXBvbmVudFJlZi5ob3N0Vmlldyk7XG4gICAgICAgIHJldHVybiAodGhpcy5jb21wb25lbnRSZWYuaG9zdFZpZXcgYXMgRW1iZWRkZWRWaWV3UmVmPGFueT4pLnJvb3ROb2Rlc1swXSBhcyBIVE1MRWxlbWVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jcmVhdGVUb29sdGlwKHVzZVNob3dEZWxheSA9IGZhbHNlLCBhdXRvRGVzdHJveSA9IHRydWUpIHtcbiAgICAgICAgY29uc3QgaGFzVGV4dCA9IHRoaXMudG9vbHRpcD8ubGVuZ3RoID4gMDtcbiAgICAgICAgY29uc3QgaGFzQ29tcG9uZW50UmVmID0gdGhpcy5jb21wb25lbnRSZWYgIT09IG51bGw7XG4gICAgICAgIGlmICghaGFzVGV4dCB8fCBoYXNDb21wb25lbnRSZWYpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb21FbGVtZW50ID0gdGhpcy5nZXREb21FbGVtZW50KCk7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9tRWxlbWVudCk7XG4gICAgICAgIHRoaXMudG9vbHRpcERpdkVsZW1lbnQgPSBkb21FbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIudG9vbHRpcFwiKTtcbiAgICAgICAgdGhpcy5zZXRUb29sdGlwQ29tcG9uZW50UHJvcGVydGllcygpO1xuICAgICAgICBjb25zdCBfc2hvd0RlbGF5ID0gdXNlU2hvd0RlbGF5ID8gdGhpcy5zaG93RGVsYXkgOiAwO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1Rvb2x0aXAoKVxuICAgICAgICB9LCBfc2hvd0RlbGF5KVxuXG5cblxuICAgICAgICB0aGlzLnJlbmRlcmVyLmxpc3Rlbih3aW5kb3csIFwic2Nyb2xsXCIsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0VG9vbHRpcFBvc2l0aW9uUHJvcGVydHkoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGF1dG9EZXN0cm95ICYmIHRoaXMuZGlzcGxheVRpbWUpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgICAgICAgfSwgdGhpcy5kaXNwbGF5VGltZSlcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzaG93VG9vbHRpcCgpIHtcbiAgICAgICAgaWYgKHRoaXMuY29tcG9uZW50UmVmICE9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS52aXNpYmxlID0gdGhpcy52aXNpYmxlO1xuXG4gICAgICAgICAgICB0aGlzLnNldFRvb2x0aXBQb3NpdGlvblByb3BlcnR5KCk7XG5cbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsIHRoaXMuYm91bmRPbldpbmRvd01vdXNlTW92ZUZ1bmN0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VG9vbHRpcFBvc2l0aW9uUHJvcGVydHkoKSB7XG4gICAgICAgIGlmICghdGhpcy5jb21wb25lbnRSZWYpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1hcmdpbiA9IDIwO1xuICAgICAgICBjb25zdCBhbmNob3JTaXplID0gNTtcbiAgICAgICAgY29uc3QgZG9tRWxlbSA9ICgodGhpcy5jb21wb25lbnRSZWYuaG9zdFZpZXcgYXMgRW1iZWRkZWRWaWV3UmVmPGFueT4pLnJvb3ROb2Rlc1swXSBhcyBIVE1MRWxlbWVudCkucXVlcnlTZWxlY3RvcihcIiN0b29sdGlwXCIpO1xuICAgICAgICBjb25zdCB7IGhlaWdodCwgd2lkdGggfSA9IGRvbUVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IHsgbGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tIH0gPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICBjb25zdCBwb3NpdGlvbnMgPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcG9zOiBUb29sdGlwUG9zaXRpb24uVG9wLFxuICAgICAgICAgICAgICAgIGNoZWNrOiAoKSA9PiB0b3AgPiBoZWlnaHQsXG4gICAgICAgICAgICAgICAgc2V0OiAoKSA9PiAoeyBsZWZ0OiBsZWZ0ICsgKHJpZ2h0IC0gbGVmdCkgLyAyLCB0b3A6IHRvcCAtIG1hcmdpbiAtIGFuY2hvclNpemUgfSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHBvczogVG9vbHRpcFBvc2l0aW9uLkJvdHRvbSxcbiAgICAgICAgICAgICAgICBjaGVjazogKCkgPT4gZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQgLSBib3R0b20gPiBoZWlnaHQsXG4gICAgICAgICAgICAgICAgc2V0OiAoKSA9PiAoeyBsZWZ0OiBsZWZ0ICsgKHJpZ2h0IC0gbGVmdCkgLyAyLCB0b3A6IGJvdHRvbSArIG1hcmdpbiB9KSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcG9zOiBUb29sdGlwUG9zaXRpb24uTGVmdCxcbiAgICAgICAgICAgICAgICBjaGVjazogKCkgPT4gbGVmdCA+IHdpZHRoLFxuICAgICAgICAgICAgICAgIHNldDogKCkgPT4gKHsgbGVmdDogbGVmdCAtIG1hcmdpbiwgdG9wOiB0b3AgKyBoZWlnaHQgLyAyIC0gYW5jaG9yU2l6ZSB9KSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcG9zOiBUb29sdGlwUG9zaXRpb24uUmlnaHQsXG4gICAgICAgICAgICAgICAgY2hlY2s6ICgpID0+IGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggLSByaWdodCA+IHdpZHRoLFxuICAgICAgICAgICAgICAgIHNldDogKCkgPT4gKHsgbGVmdDogcmlnaHQgKyBtYXJnaW4sIHRvcDogdG9wICsgaGVpZ2h0IC8gMiAtIGFuY2hvclNpemUgfSksXG4gICAgICAgICAgICB9LFxuICAgICAgICBdO1xuXG4gICAgICAgIGlmICh0aGlzLmNvbXBvbmVudFJlZikge1xuICAgICAgICAgICAgZm9yIChjb25zdCB7IHBvcywgY2hlY2ssIHNldCB9IG9mIHBvc2l0aW9ucykge1xuICAgICAgICAgICAgICAgIGlmIChjaGVjaygpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucG9zaXRpb24gPSBwb3M7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgbGVmdCwgdG9wIH0gPSBzZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UubGVmdCA9IE1hdGgucm91bmQobGVmdCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLnRvcCA9IE1hdGgucm91bmQodG9wKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UucG9zaXRpb24gPSB0aGlzLnBvc2l0aW9uO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTZSBuw6NvIGNvbnNlZ3VpciBwb3NpY2lvbmFyLCBtb3N0cmFyIGFiYWl4b1xuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbiA9IFRvb2x0aXBQb3NpdGlvbi5Cb3R0b207XG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5sZWZ0ID0gTWF0aC5yb3VuZChsZWZ0ICsgKHJpZ2h0IC0gbGVmdCkgLyAyKTtcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLnRvcCA9IE1hdGgucm91bmQoYm90dG9tICsgbWFyZ2luKTtcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLnBvc2l0aW9uID0gdGhpcy5wb3NpdGlvbjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VG9vbHRpcENvbXBvbmVudFByb3BlcnRpZXMoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbXBvbmVudFJlZiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UudG9vbHRpcCA9IHRoaXMudG9vbHRpcDtcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLmVzY2FwZSA9IHRoaXMuZXNjYXBlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKHRoaXMuY29tcG9uZW50UmVmKSkge1xuICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLnNob3dUaW1lb3V0KTtcbiAgICAgICAgICAgIHRoaXMuYXBwUmVmLmRldGFjaFZpZXcodGhpcy5jb21wb25lbnRSZWYuaG9zdFZpZXcpO1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRSZWYgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy50b29sdGlwRGl2RWxlbWVudCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLCB0aGlzLmJvdW5kT25XaW5kb3dNb3VzZU1vdmVGdW5jdGlvbik7XG4gICAgfVxufVxuIl19
358
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy90b29sdGlwL3Rvb2x0aXAuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0gsY0FBYyxFQUNkLHdCQUF3QixFQUN4QixZQUFZLEVBQ1osU0FBUyxFQUNULFVBQVUsRUFDVixlQUFlLEVBQ2YsWUFBWSxFQUNaLFFBQVEsRUFDUixLQUFLLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFDTixTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxzQkFBc0IsRUFBRSwrQkFBK0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2xKLE9BQU8sRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN6RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUt2RDtJQW9DSSwwQkFDcUIsVUFBc0IsRUFDdEIsTUFBc0IsRUFDdEIsd0JBQWtELEVBQ2xELFFBQWtCLEVBQ2xCLGFBQTRCLEVBQzVCLFFBQW1CO1FBTnhDLGlCQVVDO1FBVG9CLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFDdEIsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUNsRCxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFyQ2pDLGFBQVEsR0FBb0IsZUFBZSxDQUFDLEdBQUcsQ0FBQztRQUdoRCxjQUFTLEdBQUcsR0FBRyxDQUFDO1FBTWhCLGlCQUFZLEdB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RkMsWUFBWSxDQUFDLE9BQU8sQ0FBQztRQUNyQixZQUFZLENBQUMsU0FBUyxDQUFDO21EQUt2QjtJQUdEO1FBREMsWUFBWSxDQUFDLE9BQU8sQ0FBQzttREFLckI7SUFHRDtRQURDLFlBQVksQ0FBQyxNQUFNLENBQUM7a0RBS3BCO0lBR0Q7UUFEQyxZQUFZLENBQUMsWUFBWSxDQUFDO3dEQUsxQjtJQUlEO1FBRkMsWUFBWSxDQUFDLFlBQVksQ0FBQztRQUMxQixZQUFZLENBQUMsT0FBTyxDQUFDO3dEQUtyQjtJQUdEO1FBREMsWUFBWSxDQUFDLFlBQVksQ0FBQzt3REFTMUI7SUFHRDtRQURDLFlBQVksQ0FBQyxVQUFVLENBQUM7c0RBUXhCO0lBaExRLGdCQUFnQjtRQUg1QixTQUFTLENBQUM7WUFDUCxRQUFRLEVBQUUsWUFBWTtTQUN6QixDQUFDO09BQ1csZ0JBQWdCLENBeVc1QjtJQUFELHVCQUFDO0NBQUEsQUF6V0QsSUF5V0M7U0F6V1ksZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBcHBsaWNhdGlvblJlZixcbiAgICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgQ29tcG9uZW50UmVmLFxuICAgIERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIEVtYmVkZGVkVmlld1JlZixcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBSZW5kZXJlcjIsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBEZWJvdW5jZVV0aWxzIH0gZnJvbSBcIi4uL3V0aWxzL2RlYm91Y2VcIjtcbmltcG9ydCB7IGdldEVsZW1lbnRMZWZ0b3ZlckNvbnRlbnRBdmFpbGFibGUsIGdldEVsZW1lbnRQb3NpdGlvbkluZm8sIGlzTW91c2VQb3NpdGlvbk91dHNpZGVPZkVsZW1lbnQsIGlzTnVsbE9yVW5kZWZpbmVkIH0gZnJvbSAnLi8uLi91dGlscy91dGlscyc7XG5pbXBvcnQgeyBNb2JpbGVCZWhhdmlvciwgVG9vbHRpcEV2ZW50LCBUb29sdGlwUG9zaXRpb24gfSBmcm9tIFwiLi9tb2RlbHNcIjtcbmltcG9ydCB7IFRvb2x0aXBDb21wb25lbnQgfSBmcm9tIFwiLi90b29sdGlwLmNvbXBvbmVudFwiO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogXCJbc1Rvb2x0aXBdXCIsXG59KVxuZXhwb3J0IGNsYXNzIFRvb2x0aXBEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgQElucHV0KFwic1Rvb2x0aXBcIilcbiAgICBwdWJsaWMgdG9vbHRpcDogc3RyaW5nO1xuXG4gICAgQElucHV0KFwidG9vbHRpcFBvc2l0aW9uXCIpXG4gICAgcHVibGljIHBvc2l0aW9uOiBUb29sdGlwUG9zaXRpb24gPSBUb29sdGlwUG9zaXRpb24uVG9wO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2hvd0RlbGF5ID0gNTAwO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZGlzcGxheVRpbWU6IG51bWJlcjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHRvb2x0aXBFdmVudCA9IFRvb2x0aXBFdmVudC5Ib3ZlcjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGVzY2FwZSA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdmlzaWJsZSA9IHRydWU7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBtb2JpbGVCZWhhdmlvciA9IE1vYmlsZUJlaGF2aW9yLlByZXNzaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZm9jdXNlZElucHV0UmVmOiBIVE1MSW5wdXRFbGVtZW50O1xuXG4gICAgcHJpdmF0ZSBjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxUb29sdGlwQ29tcG9uZW50PiA9IG51bGw7XG4gICAgcHJpdmF0ZSBzaG93VGltZW91dD86IG51bWJlcjtcbiAgICBwcml2YXRlIHRvdWNoVGltZW91dD86IG51bWJlcjtcbiAgICBwcml2YXRlIHRvb2x0aXBEaXZFbGVtZW50PzogSFRNTEVsZW1lbnQ7XG4gICAgcHJpdmF0ZSByZWFkb25seSBib3VuZE9uV2luZG93TW91c2VNb3ZlRnVuY3Rpb246IChldmVudDogTW91c2VFdmVudCkgPT4gdm9pZDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlYm91bmNlQ3JlYXRlVG9vbHRpcEZ1bmN0aW9uOiAoKSA9PiB2b2lkO1xuICAgIHByaXZhdGUgZXhpc3RGb2N1c2VkSW5wdXRSZWZUb29sdGlwID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGFwcFJlZjogQXBwbGljYXRpb25SZWYsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGRlYm91bmNlVXRpbHM6IERlYm91bmNlVXRpbHMsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgcmVuZGVyZXI6IFJlbmRlcmVyMlxuICAgICkge1xuICAgICAgICB0aGlzLmJvdW5kT25XaW5kb3dNb3VzZU1vdmVGdW5jdGlvbiA9IHRoaXMub25XaW5kb3dNb3VzZU1vdmUuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5kZWJvdW5jZUNyZWF0ZVRvb2x0aXBGdW5jdGlvbiA9IHRoaXMuZGVib3VuY2VVdGlscy5kZWJvdW5jZUxlYWRpbmcoKCkgPT4gdGhpcy5fY3JlYXRlVG9vbHRpcCh0cnVlLCB0cnVlKSk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnZhbGlkYXRlUG9zaXRpb24oKTtcbiAgICAgICAgdGhpcy51cGRhdGVUb29sdGlwVmlzaWJpbGl0eVdoZW5Gb2N1c09uSW5wdXQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25XaW5kb3dNb3VzZU1vdmUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbXBvbmVudFJlZikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVsZW1lbnRSZWN0ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IHRvb2xUaXBSZWN0ID0gdGhpcy50b29sdGlwRGl2RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICBjb25zdCB0b3RhbEVsZW1lbnRBcmVhID0ge1xuICAgICAgICAgICAgdG9wOiBNYXRoLm1pbihlbGVtZW50UmVjdC50b3AsIHRvb2xUaXBSZWN0LnRvcCksXG4gICAgICAgICAgICByaWdodDogTWF0aC5tYXgoZWxlbWVudFJlY3QucmlnaHQsIHRvb2xUaXBSZWN0LnJpZ2h0KSxcbiAgICAgICAgICAgIGxlZnQ6IE1hdGgubWluKGVsZW1lbnRSZWN0LmxlZnQsIHRvb2xUaXBSZWN0LmxlZnQpLFxuICAgICAgICAgICAgYm90dG9tOiBNYXRoLm1heChlbGVtZW50UmVjdC5ib3R0b20sIHRvb2xUaXBSZWN0LmJvdHRvbSksXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGlzTW91c2VQb3NpdGlvbk91dHNpZGVPZkVsZW1lbnQoZXZlbnQsIHRvdGFsRWxlbWVudEFyZWEpICYmICF0aGlzLmV4aXN0Rm9jdXNlZElucHV0UmVmVG9vbHRpcCkge1xuICAgICAgICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNYW5pcHVsYSBhIHZpc2liaWxpZGFkZSBkbyB0b29sdGlwIHF1YW5kbyBob3V2ZXIgdW1hIHJlZmVyw6puY2lhIGRlIGlucHV0LlxuICAgICAqL1xuICAgIHByaXZhdGUgdXBkYXRlVG9vbHRpcFZpc2liaWxpdHlXaGVuRm9jdXNPbklucHV0KCkge1xuICAgICAgICBpZiAodGhpcy5mb2N1c2VkSW5wdXRSZWYpIHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0Rm9jdXMgPSB0aGlzLmZvY3VzZWRJbnB1dFJlZjtcbiAgICAgICAgICAgIGNvbnN0IGljb24gPSB0aGlzLmdldEljb25Gcm9tRm9jdXNlZElucHV0KCk7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmxpc3RlbihpbnB1dEZvY3VzLCBcImZvY3VzXCIsICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaWNvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmV4aXN0Rm9jdXNlZElucHV0UmVmVG9vbHRpcCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZVRvb2x0aXAoZmFsc2UsIGZhbHNlKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4oaW5wdXRGb2N1cywgXCJibHVyXCIsICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaWNvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZVRvb2x0aXAoaWNvbik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmV4aXN0Rm9jdXNlZElucHV0UmVmVG9vbHRpcCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT2J0w6ltIG8gZWxlbWVudG8gZG8gw61jb25lIGFzc29jaWFkbyBhbyBsYWJlbCBkbyBpbnB1dCBlbSBmb2N1cy5cbiAgICAgKiBAcmV0dXJucyBPIMOtY29uZSBkbyBpbnB1dCBlbSBmb2N1cy5cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldEljb25Gcm9tRm9jdXNlZElucHV0KCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBvIHRvb2x0aXAgYXNzb2NpYWRvIGFvIMOtY29uZSBkbyBpbnB1dCBlbSBmb2N1cy5cbiAgICAgKiBAcGFyYW0gaWNvbiBPIMOtY29uZSBkbyBpbnB1dCBlbSBmb2N1cy5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlbW92ZVRvb2x0aXAoaWNvbjogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdG9vbHRpcCA9IGljb24ucXVlcnlTZWxlY3RvcihcIi50b29sdGlwXCIpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBpZiAodG9vbHRpcCkge1xuICAgICAgICAgICAgdG9vbHRpcC5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHdoZW5ldmVyIHRoZSBjb21wb25lbnQgd2l0aCB0aGUgdG9vbHRpcCBpcyBjbGlja2VkIEkgZGVzdHJveSB0aGUgdG9vbHRpcC5cbiAgICAvLyB3aGVuZXZlciBhIGtleSBpcyBwcmVzc2VkIG9uIHRoZSBjb21wb25lbnQgd2l0aCB0aGUgdG9vbHRpcCBJIGRlc3Ryb3kgdGhlIHRvb2x0aXAuXG4gICAgQEhvc3RMaXN0ZW5lcihcImNsaWNrXCIpXG4gICAgQEhvc3RMaXN0ZW5lcihcImtleWRvd25cIilcbiAgICBwdWJsaWMgb25DbGljaygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudG9vbHRpcEV2ZW50ID09PSBUb29sdGlwRXZlbnQuSG92ZXIgJiYgIW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkgJiYgIW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZS9pKSkge1xuICAgICAgICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKFwiZm9jdXNcIilcbiAgICBwdWJsaWMgb25Gb2N1cygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudG9vbHRpcEV2ZW50ID09PSBUb29sdGlwRXZlbnQuRm9jdXMpIHtcbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZVRvb2x0aXAodHJ1ZSwgdHJ1ZSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoXCJibHVyXCIpXG4gICAgcHVibGljIG9uQmx1cigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudG9vbHRpcEV2ZW50ID09PSBUb29sdGlwRXZlbnQuRm9jdXMpIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcihcIm1vdXNlZW50ZXJcIilcbiAgICBwdWJsaWMgb25Nb3VzZUVudGVyKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy50b29sdGlwRXZlbnQgPT09IFRvb2x0aXBFdmVudC5Ib3Zlcikge1xuICAgICAgICAgICAgdGhpcy5kZWJvdW5jZUNyZWF0ZVRvb2x0aXBGdW5jdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIilcbiAgICBASG9zdExpc3RlbmVyKFwid2hlZWxcIilcbiAgICBwdWJsaWMgb25Nb3VzZUxlYXZlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy50b29sdGlwRXZlbnQgPT09IFRvb2x0aXBFdmVudC5Ib3ZlciAmJiAhdGhpcy5leGlzdEZvY3VzZWRJbnB1dFJlZlRvb2x0aXApIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcihcInRvdWNoc3RhcnRcIilcbiAgICBwdWJsaWMgb25Ub3VjaFN0YXJ0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy50b29sdGlwRXZlbnQgPT09IFRvb2x0aXBFdmVudC5Ib3Zlcikge1xuICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLnRvdWNoVGltZW91dCk7XG4gICAgICAgICAgICBjb25zdCBfZGVsYXkgPSB0aGlzLm1vYmlsZUJlaGF2aW9yID09PSBNb2JpbGVCZWhhdmlvci5QcmVzc2luZyA/IHRoaXMuc2hvd0RlbGF5IDogMFxuICAgICAgICAgICAgdGhpcy50b3VjaFRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlVG9vbHRpcCh0cnVlLCB0cnVlKTtcbiAgICAgICAgICAgIH0sIF9kZWxheSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoXCJ0b3VjaGVuZFwiKVxuICAgIHB1YmxpYyBvblRvdWNoRW5kKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy50b29sdGlwRXZlbnQgPT09IFRvb2x0aXBFdmVudC5Ib3Zlcikge1xuICAgICAgICAgICAgaWYgKHRoaXMubW9iaWxlQmVoYXZpb3IgPT09IE1vYmlsZUJlaGF2aW9yLlByZXNzaW5nKSB7XG4gICAgICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLnRvdWNoVGltZW91dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbGlkYXRlUG9zaXRpb24oKSB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5zUG9zaXRpb24gPSBbVG9vbHRpcFBvc2l0aW9uLlRvcCwgVG9vbHRpcFBvc2l0aW9uLlJpZ2h0LCBUb29sdGlwUG9zaXRpb24uQm90dG9tLCBUb29sdGlwUG9zaXRpb24uTGVmdF0uaW5jbHVkZXMoXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCFjb250YWluc1Bvc2l0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uID0gVG9vbHRpcFBvc2l0aW9uLlRvcDtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVG9vbHRpcCAke3RoaXMucG9zaXRpb259IHBvc2l0aW9uIGlzIHVuZXhwZWN0ZWRgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RG9tRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudEZhY3RvcnkgPSB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShUb29sdGlwQ29tcG9uZW50KTtcbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWYgPSBjb21wb25lbnRGYWN0b3J5LmNyZWF0ZSh0aGlzLmluamVjdG9yKTtcbiAgICAgICAgdGhpcy5hcHBSZWYuYXR0YWNoVmlldyh0aGlzLmNvbXBvbmVudFJlZi5ob3N0Vmlldyk7XG4gICAgICAgIHJldHVybiAodGhpcy5jb21wb25lbnRSZWYuaG9zdFZpZXcgYXMgRW1iZWRkZWRWaWV3UmVmPGFueT4pLnJvb3ROb2Rlc1swXSBhcyBIVE1MRWxlbWVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jcmVhdGVUb29sdGlwKHVzZVNob3dEZWxheSA9IGZhbHNlLCBhdXRvRGVzdHJveSA9IHRydWUpIHtcbiAgICAgICAgY29uc3QgaGFzVGV4dCA9IHRoaXMudG9vbHRpcD8ubGVuZ3RoID4gMDtcbiAgICAgICAgY29uc3QgaGFzQ29tcG9uZW50UmVmID0gdGhpcy5jb21wb25lbnRSZWYgIT09IG51bGw7XG4gICAgICAgIGlmICghaGFzVGV4dCB8fCBoYXNDb21wb25lbnRSZWYpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb21FbGVtZW50ID0gdGhpcy5nZXREb21FbGVtZW50KCk7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9tRWxlbWVudCk7XG4gICAgICAgIHRoaXMudG9vbHRpcERpdkVsZW1lbnQgPSBkb21FbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIudG9vbHRpcFwiKTtcbiAgICAgICAgdGhpcy5zZXRUb29sdGlwQ29tcG9uZW50UHJvcGVydGllcygpO1xuICAgICAgICBjb25zdCBfc2hvd0RlbGF5ID0gdXNlU2hvd0RlbGF5ID8gdGhpcy5zaG93RGVsYXkgOiAwO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1Rvb2x0aXAoKVxuICAgICAgICB9LCBfc2hvd0RlbGF5KVxuXG5cblxuICAgICAgICB0aGlzLnJlbmRlcmVyLmxpc3Rlbih3aW5kb3csIFwic2Nyb2xsXCIsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0VG9vbHRpcFBvc2l0aW9uUHJvcGVydHkoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGF1dG9EZXN0cm95ICYmIHRoaXMuZGlzcGxheVRpbWUpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgICAgICAgfSwgdGhpcy5kaXNwbGF5VGltZSlcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzaG93VG9vbHRpcCgpIHtcbiAgICAgICAgaWYgKHRoaXMuY29tcG9uZW50UmVmICE9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS52aXNpYmxlID0gdGhpcy52aXNpYmxlO1xuXG4gICAgICAgICAgICB0aGlzLnNldFRvb2x0aXBQb3NpdGlvblByb3BlcnR5KCk7XG5cbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsIHRoaXMuYm91bmRPbldpbmRvd01vdXNlTW92ZUZ1bmN0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VG9vbHRpcFBvc2l0aW9uUHJvcGVydHkoKSB7XG4gICAgICAgIGlmICghdGhpcy5jb21wb25lbnRSZWYpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFuY2hvclNpemUgPSA1O1xuICAgICAgICBjb25zdCB7IGxlZnQsIHJpZ2h0IH0gPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICBjb25zdCB0b29sdGlwRWxlbWVudFBvc2l0aW9uID0gZ2V0RWxlbWVudFBvc2l0aW9uSW5mbyh0aGlzLnRvb2x0aXBEaXZFbGVtZW50KTtcbiAgICAgICAgY29uc3QgZWxlbWVudExlZnRvdmVyID0gZ2V0RWxlbWVudExlZnRvdmVyQ29udGVudEF2YWlsYWJsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRUcmlnZ2VyUG9zaXRpb24gPSBnZXRFbGVtZW50UG9zaXRpb25JbmZvKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgY29uc3QgaXNQb3NpdGlvbkhvcml6b250YWwgPSBbVG9vbHRpcFBvc2l0aW9uLkxlZnQsIFRvb2x0aXBQb3NpdGlvbi5SaWdodF0uaW5jbHVkZXModGhpcy5wb3NpdGlvbik7XG4gICAgICAgIGNvbnN0IGRpc3RhbmNlVG9Cb3JkZXJzID0gaXNQb3NpdGlvbkhvcml6b250YWwgPyB0b29sdGlwRWxlbWVudFBvc2l0aW9uLmVsZW1lbnRXaWR0aCA6IHRvb2x0aXBFbGVtZW50UG9zaXRpb24uZWxlbWVudEhvcml6b250YWxDZW50ZXI7XG4gICAgICAgIGNvbnN0IGNhblNldEF0VG9wID0gZWxlbWVudExlZnRvdmVyLmZyZWVEaXN0YW5jZVRvVG9wID4gdG9vbHRpcEVsZW1lbnRQb3NpdGlvbi5lbGVtZW50SGVpZ2h0O1xuICAgICAgICBjb25zdCBjYW5TZXRBdExlZnQgPSBlbGVtZW50TGVmdG92ZXIuZnJlZURpc3RhbmNlVG9MZWZ0ID4gZGlzdGFuY2VUb0JvcmRlcnM7XG4gICAgICAgIGNvbnN0IGNhblNldEF0UmlnaHQgPSBlbGVtZW50TGVmdG92ZXIuZnJlZURpc3RhbmNlVG9SaWdodCA+IGRpc3RhbmNlVG9Cb3JkZXJzO1xuICAgICAgICBjb25zdCBjYW5TZXRBdEJvdHRvbSA9IGVsZW1lbnRMZWZ0b3Zlci5mcmVlRGlzdGFuY2VUb0JvdHRvbSA+IHRvb2x0aXBFbGVtZW50UG9zaXRpb24uZWxlbWVudEhlaWdodDtcbiAgICAgICAgY29uc3QgdG9wVmVydGljYWwgPSBlbGVtZW50VHJpZ2dlclBvc2l0aW9uLnRvcCArIGVsZW1lbnRUcmlnZ2VyUG9zaXRpb24uZWxlbWVudFZlcnRpY2FsQ2VudGVyO1xuICAgICAgICBjb25zdCBjaGVja1RvcFBvc2l0aW9uID0gKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGNhblNldEF0VG9wICYmIGNhblNldEF0TGVmdCAmJiBjYW5TZXRBdFJpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNoZWNrQm90dG9tUG9zaXRpb24gPSAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gY2FuU2V0QXRCb3R0b20gJiYgY2FuU2V0QXRMZWZ0ICYmIGNhblNldEF0UmlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2hlY2tMZWZ0UG9zaXRpb24gPSAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gY2FuU2V0QXRMZWZ0ICYmIGNhblNldEF0VG9wICYmIGNhblNldEF0Qm90dG9tO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2hlY2tSaWdodFBvc2l0aW9uID0gKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGNhblNldEF0UmlnaHQgJiYgY2FuU2V0QXRUb3AgJiYgY2FuU2V0QXRCb3R0b207XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZXRUb3BQb3NpdGlvbiA9ICgpOiB7IGxlZnQ6IG51bWJlciwgdG9wOiBudW1iZXIgfSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGxlZnQ6IGxlZnQgKyAocmlnaHQgLSBsZWZ0KSAvIDIsXG4gICAgICAgICAgICAgICAgdG9wOiBlbGVtZW50VHJpZ2dlclBvc2l0aW9uLnRvcCAtIGFuY2hvclNpemVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNldEJvdHRvbVBvc2l0aW9uID0gKCk6IHsgbGVmdDogbnVtYmVyLCB0b3A6IG51bWJlciB9ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbGVmdDogbGVmdCArIChyaWdodCAtIGxlZnQpIC8gMixcbiAgICAgICAgICAgICAgICB0b3A6IGVsZW1lbnRUcmlnZ2VyUG9zaXRpb24udG9wICsgZWxlbWVudFRyaWdnZXJQb3NpdGlvbi5lbGVtZW50SGVpZ2h0XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2V0TGVmdFBvc2l0aW9uID0gKCk6IHsgbGVmdDogbnVtYmVyLCB0b3A6IG51bWJlciB9ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbGVmdDogbGVmdCxcbiAgICAgICAgICAgICAgICB0b3A6IHRvcFZlcnRpY2FsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2V0UmlnaHRQb3NpdGlvbiA9ICgpOiB7IGxlZnQ6IG51bWJlciwgdG9wOiBudW1iZXIgfSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGxlZnQ6IHJpZ2h0LFxuICAgICAgICAgICAgICAgIHRvcDogdG9wVmVydGljYWxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICB0eXBlIFBvc2l0aW9uID0ge1xuICAgICAgICAgICAgcG9zOiBUb29sdGlwUG9zaXRpb24sXG4gICAgICAgICAgICBjaGVjazogKCkgPT4gYm9vbGVhbixcbiAgICAgICAgICAgIHNldDogKCkgPT4geyBsZWZ0OiBudW1iZXIsIHRvcDogbnVtYmVyIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBvc2l0aW9uczogUG9zaXRpb25bXSA9IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwb3M6IFRvb2x0aXBQb3NpdGlvbi5Ub3AsXG4gICAgICAgICAgICAgICAgY2hlY2s6IGNoZWNrVG9wUG9zaXRpb24sXG4gICAgICAgICAgICAgICAgc2V0OiBzZXRUb3BQb3NpdGlvblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwb3M6IFRvb2x0aXBQb3NpdGlvbi5Cb3R0b20sXG4gICAgICAgICAgICAgICAgY2hlY2s6IGNoZWNrQm90dG9tUG9zaXRpb24sXG4gICAgICAgICAgICAgICAgc2V0OiBzZXRCb3R0b21Qb3NpdGlvblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwb3M6IFRvb2x0aXBQb3NpdGlvbi5MZWZ0LFxuICAgICAgICAgICAgICAgIGNoZWNrOiBjaGVja0xlZnRQb3NpdGlvbixcbiAgICAgICAgICAgICAgICBzZXQ6IHNldExlZnRQb3NpdGlvblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwb3M6IFRvb2x0aXBQb3NpdGlvbi5SaWdodCxcbiAgICAgICAgICAgICAgICBjaGVjazogY2hlY2tSaWdodFBvc2l0aW9uLFxuICAgICAgICAgICAgICAgIHNldDogc2V0UmlnaHRQb3NpdGlvblxuXG4gICAgICAgICAgICB9XG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgcG9zaXRpb25EZWZpbmVkID0gcG9zaXRpb25zLmZpbmQoKHBvc2l0aW9uKSA9PiBwb3NpdGlvbi5wb3MgPT09IHRoaXMucG9zaXRpb24pO1xuICAgICAgICBsZXQgdmFsaWRQb3NpdGlvbjogUG9zaXRpb24gPSBwb3NpdGlvbkRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGNhblVzZURlZmluZWRQb3NpdGlvbiA9IHBvc2l0aW9uRGVmaW5lZC5jaGVjaygpO1xuICAgICAgICBpZiAoY2FuVXNlRGVmaW5lZFBvc2l0aW9uKSB7XG4gICAgICAgICAgICB2YWxpZFBvc2l0aW9uID0gcG9zaXRpb25EZWZpbmVkO1xuICAgICAgICB9IGVsc2UgaWYgKCFjYW5Vc2VEZWZpbmVkUG9zaXRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkQWx0ZXJuYXRpdmVQb3NpdGlvbiA9IHBvc2l0aW9ucy5maW5kKChwb3NpdGlvbikgPT4gcG9zaXRpb24uY2hlY2soKSk7XG4gICAgICAgICAgICBpZiAodmFsaWRBbHRlcm5hdGl2ZVBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgdmFsaWRQb3NpdGlvbiA9IHZhbGlkQWx0ZXJuYXRpdmVQb3NpdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBfcG9zaXRpb24gPSB2YWxpZFBvc2l0aW9uLnNldCgpO1xuICAgICAgICBjb25zdCBwb3NpdGlvbkxlZnQgPSBfcG9zaXRpb24ubGVmdDtcbiAgICAgICAgY29uc3QgcG9zaXRpb25Ub3AgPSBfcG9zaXRpb24udG9wO1xuICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5sZWZ0ID0gTWF0aC5yb3VuZChwb3NpdGlvbkxlZnQpO1xuICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS50b3AgPSBNYXRoLnJvdW5kKHBvc2l0aW9uVG9wKTtcbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UucG9zaXRpb24gPSB2YWxpZFBvc2l0aW9uLnBvcztcblxuICAgIH1cbiAgICBwcml2YXRlIHNldFRvb2x0aXBDb21wb25lbnRQcm9wZXJ0aWVzKCkge1xuICAgICAgICBpZiAodGhpcy5jb21wb25lbnRSZWYgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLnRvb2x0aXAgPSB0aGlzLnRvb2x0aXA7XG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5lc2NhcGUgPSB0aGlzLmVzY2FwZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZCh0aGlzLmNvbXBvbmVudFJlZikpIHtcbiAgICAgICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5zaG93VGltZW91dCk7XG4gICAgICAgICAgICB0aGlzLmFwcFJlZi5kZXRhY2hWaWV3KHRoaXMuY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMudG9vbHRpcERpdkVsZW1lbnQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIiwgdGhpcy5ib3VuZE9uV2luZG93TW91c2VNb3ZlRnVuY3Rpb24pO1xuICAgIH1cbn1cbiJdfQ==
@@ -4,4 +4,36 @@ export var isMousePositionOutsideOfElement = function (event, elementArea) {
4
4
  var eventY = event.clientY;
5
5
  return eventX < elementArea.left || eventX >= elementArea.right || eventY < elementArea.top || eventY >= elementArea.bottom;
6
6
  };
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy91dGlscy91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsSUFBTSxpQkFBaUIsR0FBRyxVQUFDLEtBQWMsSUFBSyxPQUFBLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBckMsQ0FBcUMsQ0FBQztBQUUzRixNQUFNLENBQUMsSUFBTSwrQkFBK0IsR0FBRyxVQUFDLEtBQWdDLEVBQUUsV0FLakY7SUFDRyxJQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO0lBQzdCLElBQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7SUFDN0IsT0FBTyxNQUFNLEdBQUcsV0FBVyxDQUFDLElBQUksSUFBSSxNQUFNLElBQUksV0FBVyxDQUFDLEtBQUssSUFBSSxNQUFNLEdBQUcsV0FBVyxDQUFDLEdBQUcsSUFBSSxNQUFNLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQztBQUNoSSxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgaXNOdWxsT3JVbmRlZmluZWQgPSAodmFsdWU6IHVua25vd24pID0+IHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQ7XHJcblxyXG5leHBvcnQgY29uc3QgaXNNb3VzZVBvc2l0aW9uT3V0c2lkZU9mRWxlbWVudCA9IChldmVudDogTW91c2VFdmVudCB8IFBvaW50ZXJFdmVudCwgZWxlbWVudEFyZWE6IHtcclxuICAgIHRvcDogbnVtYmVyO1xyXG4gICAgcmlnaHQ6IG51bWJlcjtcclxuICAgIGxlZnQ6IG51bWJlcjtcclxuICAgIGJvdHRvbTogbnVtYmVyO1xyXG59KSA9PiB7XHJcbiAgICBjb25zdCBldmVudFggPSBldmVudC5jbGllbnRYO1xyXG4gICAgY29uc3QgZXZlbnRZID0gZXZlbnQuY2xpZW50WTtcclxuICAgIHJldHVybiBldmVudFggPCBlbGVtZW50QXJlYS5sZWZ0IHx8IGV2ZW50WCA+PSBlbGVtZW50QXJlYS5yaWdodCB8fCBldmVudFkgPCBlbGVtZW50QXJlYS50b3AgfHwgZXZlbnRZID49IGVsZW1lbnRBcmVhLmJvdHRvbTtcclxufVxyXG4iXX0=
7
+ export var getElementPositionInfo = function (element) {
8
+ var rect = element.getBoundingClientRect();
9
+ var scrollTop = window.scrollY || document.documentElement.scrollTop;
10
+ var scrollLeft = window.scrollX || document.documentElement.scrollLeft;
11
+ var elementHeight = rect.height;
12
+ var elementWidth = rect.width;
13
+ var elementVerticalCenter = elementHeight / 2;
14
+ var elementHorizontalCenter = elementWidth / 2;
15
+ return {
16
+ top: rect.top + scrollTop,
17
+ left: rect.left + scrollLeft,
18
+ right: rect.left + scrollLeft + elementWidth,
19
+ elementHeight: elementHeight,
20
+ elementWidth: elementWidth,
21
+ elementVerticalCenter: elementVerticalCenter,
22
+ elementHorizontalCenter: elementHorizontalCenter
23
+ };
24
+ };
25
+ export var getElementLeftoverContentAvailable = function (element) {
26
+ var windowWidth = window.innerWidth;
27
+ var popoverElementTriggerRect = element.getBoundingClientRect();
28
+ var freeDistanceToBottom = window.innerHeight - popoverElementTriggerRect.bottom;
29
+ var freeDistanceToTop = popoverElementTriggerRect.top;
30
+ var freeDistanceToLeft = popoverElementTriggerRect.left;
31
+ var freeDistanceToRight = windowWidth - popoverElementTriggerRect.right;
32
+ return {
33
+ freeDistanceToBottom: freeDistanceToBottom,
34
+ freeDistanceToTop: freeDistanceToTop,
35
+ freeDistanceToLeft: freeDistanceToLeft,
36
+ freeDistanceToRight: freeDistanceToRight
37
+ };
38
+ };
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy91dGlscy91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsSUFBTSxpQkFBaUIsR0FBRyxVQUFDLEtBQWMsSUFBSyxPQUFBLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBckMsQ0FBcUMsQ0FBQztBQWtCM0YsTUFBTSxDQUFDLElBQU0sK0JBQStCLEdBQUcsVUFBQyxLQUFnQyxFQUFFLFdBS2pGO0lBQ0csSUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztJQUM3QixJQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO0lBQzdCLE9BQU8sTUFBTSxHQUFHLFdBQVcsQ0FBQyxJQUFJLElBQUksTUFBTSxJQUFJLFdBQVcsQ0FBQyxLQUFLLElBQUksTUFBTSxHQUFHLFdBQVcsQ0FBQyxHQUFHLElBQUksTUFBTSxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUM7QUFDaEksQ0FBQyxDQUFBO0FBRUQsTUFBTSxDQUFDLElBQU0sc0JBQXNCLEdBQUcsVUFBQyxPQUFvQjtJQUN2RCxJQUFNLElBQUksR0FBRyxPQUFPLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUM3QyxJQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsT0FBTyxJQUFJLFFBQVEsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDO0lBQ3ZFLElBQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxPQUFPLElBQUksUUFBUSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUM7SUFFekUsSUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNsQyxJQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ2hDLElBQU0scUJBQXFCLEdBQUcsYUFBYSxHQUFHLENBQUMsQ0FBQztJQUNoRCxJQUFNLHVCQUF1QixHQUFHLFlBQVksR0FBRyxDQUFDLENBQUM7SUFFakQsT0FBTztRQUNILEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxHQUFHLFNBQVM7UUFDekIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVTtRQUM1QixLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLEdBQUcsWUFBWTtRQUM1QyxhQUFhLGVBQUE7UUFDYixZQUFZLGNBQUE7UUFDWixxQkFBcUIsdUJBQUE7UUFDckIsdUJBQXVCLHlCQUFBO0tBQzFCLENBQUM7QUFDTixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsSUFBTSxrQ0FBa0MsR0FBRyxVQUFDLE9BQW9CO0lBQ25FLElBQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7SUFDdEMsSUFBTSx5QkFBeUIsR0FBRyxPQUFPLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUNsRSxJQUFNLG9CQUFvQixHQUFHLE1BQU0sQ0FBQyxXQUFXLEdBQUcseUJBQXlCLENBQUMsTUFBTSxDQUFDO0lBQ25GLElBQU0saUJBQWlCLEdBQUcseUJBQXlCLENBQUMsR0FBRyxDQUFDO0lBQ3hELElBQU0sa0JBQWtCLEdBQUcseUJBQXlCLENBQUMsSUFBSSxDQUFDO0lBQzFELElBQU0sbUJBQW1CLEdBQUcsV0FBVyxHQUFHLHlCQUF5QixDQUFDLEtBQUssQ0FBQztJQUMxRSxPQUFPO1FBQ0gsb0JBQW9CLHNCQUFBO1FBQ3BCLGlCQUFpQixtQkFBQTtRQUNqQixrQkFBa0Isb0JBQUE7UUFDbEIsbUJBQW1CLHFCQUFBO0tBQ3RCLENBQUE7QUFDTCxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgaXNOdWxsT3JVbmRlZmluZWQgPSAodmFsdWU6IHVua25vd24pID0+IHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQ7XHJcbmV4cG9ydCB0eXBlIEVsZW1lbnRQb3NpdGlvbiA9IHtcclxuICAgIHRvcDogbnVtYmVyO1xyXG4gICAgbGVmdDogbnVtYmVyO1xyXG4gICAgcmlnaHQ6IG51bWJlcjtcclxuICAgIGVsZW1lbnRIZWlnaHQ6IG51bWJlcjtcclxuICAgIGVsZW1lbnRXaWR0aDogbnVtYmVyO1xyXG4gICAgZWxlbWVudFZlcnRpY2FsQ2VudGVyOiBudW1iZXI7XHJcbiAgICBlbGVtZW50SG9yaXpvbnRhbENlbnRlcjogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBFbGVtZW50TGVmdG92ZXJQb3NpdGlvbiA9IHtcclxuICAgIGZyZWVEaXN0YW5jZVRvQm90dG9tOiBudW1iZXI7XHJcbiAgICBmcmVlRGlzdGFuY2VUb1RvcDogbnVtYmVyO1xyXG4gICAgZnJlZURpc3RhbmNlVG9MZWZ0OiBudW1iZXI7XHJcbiAgICBmcmVlRGlzdGFuY2VUb1JpZ2h0OiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBpc01vdXNlUG9zaXRpb25PdXRzaWRlT2ZFbGVtZW50ID0gKGV2ZW50OiBNb3VzZUV2ZW50IHwgUG9pbnRlckV2ZW50LCBlbGVtZW50QXJlYToge1xyXG4gICAgdG9wOiBudW1iZXI7XHJcbiAgICByaWdodDogbnVtYmVyO1xyXG4gICAgbGVmdDogbnVtYmVyO1xyXG4gICAgYm90dG9tOiBudW1iZXI7XHJcbn0pID0+IHtcclxuICAgIGNvbnN0IGV2ZW50WCA9IGV2ZW50LmNsaWVudFg7XHJcbiAgICBjb25zdCBldmVudFkgPSBldmVudC5jbGllbnRZO1xyXG4gICAgcmV0dXJuIGV2ZW50WCA8IGVsZW1lbnRBcmVhLmxlZnQgfHwgZXZlbnRYID49IGVsZW1lbnRBcmVhLnJpZ2h0IHx8IGV2ZW50WSA8IGVsZW1lbnRBcmVhLnRvcCB8fCBldmVudFkgPj0gZWxlbWVudEFyZWEuYm90dG9tO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0RWxlbWVudFBvc2l0aW9uSW5mbyA9IChlbGVtZW50OiBIVE1MRWxlbWVudCk6IEVsZW1lbnRQb3NpdGlvbiA9PiB7XHJcbiAgICBjb25zdCByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIGNvbnN0IHNjcm9sbFRvcCA9IHdpbmRvdy5zY3JvbGxZIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3A7XHJcbiAgICBjb25zdCBzY3JvbGxMZWZ0ID0gd2luZG93LnNjcm9sbFggfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQ7XHJcblxyXG4gICAgY29uc3QgZWxlbWVudEhlaWdodCA9IHJlY3QuaGVpZ2h0O1xyXG4gICAgY29uc3QgZWxlbWVudFdpZHRoID0gcmVjdC53aWR0aDtcclxuICAgIGNvbnN0IGVsZW1lbnRWZXJ0aWNhbENlbnRlciA9IGVsZW1lbnRIZWlnaHQgLyAyO1xyXG4gICAgY29uc3QgZWxlbWVudEhvcml6b250YWxDZW50ZXIgPSBlbGVtZW50V2lkdGggLyAyO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgdG9wOiByZWN0LnRvcCArIHNjcm9sbFRvcCxcclxuICAgICAgICBsZWZ0OiByZWN0LmxlZnQgKyBzY3JvbGxMZWZ0LFxyXG4gICAgICAgIHJpZ2h0OiByZWN0LmxlZnQgKyBzY3JvbGxMZWZ0ICsgZWxlbWVudFdpZHRoLFxyXG4gICAgICAgIGVsZW1lbnRIZWlnaHQsXHJcbiAgICAgICAgZWxlbWVudFdpZHRoLFxyXG4gICAgICAgIGVsZW1lbnRWZXJ0aWNhbENlbnRlcixcclxuICAgICAgICBlbGVtZW50SG9yaXpvbnRhbENlbnRlclxyXG4gICAgfTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBnZXRFbGVtZW50TGVmdG92ZXJDb250ZW50QXZhaWxhYmxlID0gKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogRWxlbWVudExlZnRvdmVyUG9zaXRpb24gPT4ge1xyXG4gICAgY29uc3Qgd2luZG93V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcclxuICAgIGNvbnN0IHBvcG92ZXJFbGVtZW50VHJpZ2dlclJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgY29uc3QgZnJlZURpc3RhbmNlVG9Cb3R0b20gPSB3aW5kb3cuaW5uZXJIZWlnaHQgLSBwb3BvdmVyRWxlbWVudFRyaWdnZXJSZWN0LmJvdHRvbTtcclxuICAgIGNvbnN0IGZyZWVEaXN0YW5jZVRvVG9wID0gcG9wb3ZlckVsZW1lbnRUcmlnZ2VyUmVjdC50b3A7XHJcbiAgICBjb25zdCBmcmVlRGlzdGFuY2VUb0xlZnQgPSBwb3BvdmVyRWxlbWVudFRyaWdnZXJSZWN0LmxlZnQ7XHJcbiAgICBjb25zdCBmcmVlRGlzdGFuY2VUb1JpZ2h0ID0gd2luZG93V2lkdGggLSBwb3BvdmVyRWxlbWVudFRyaWdnZXJSZWN0LnJpZ2h0O1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBmcmVlRGlzdGFuY2VUb0JvdHRvbSxcclxuICAgICAgICBmcmVlRGlzdGFuY2VUb1RvcCxcclxuICAgICAgICBmcmVlRGlzdGFuY2VUb0xlZnQsXHJcbiAgICAgICAgZnJlZURpc3RhbmNlVG9SaWdodFxyXG4gICAgfVxyXG59XHJcbiJdfQ==