@datarailsshared/datarailsshared 1.3.15 → 1.3.18

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 (30) hide show
  1. package/assets/styles/img/{spinner.gif → new-spinner.gif} +0 -0
  2. package/bundles/datarailsshared-datarailsshared.umd.js +107 -56
  3. package/bundles/datarailsshared-datarailsshared.umd.js.map +1 -1
  4. package/datarailsshared-datarailsshared-1.3.18.tgz +0 -0
  5. package/datarailsshared-datarailsshared.metadata.json +1 -1
  6. package/esm2015/lib/dr-dropdown/dr-dropdown-position.directive.js +2 -2
  7. package/esm2015/lib/dr-dropdown/dr-dropdown.component.js +5 -4
  8. package/esm2015/lib/dr-inputs/button/button.component.js +3 -3
  9. package/esm2015/lib/dr-inputs/dr-input/dr-input.component.js +1 -1
  10. package/esm2015/lib/dr-inputs/dr-select/dr-select.component.js +1 -1
  11. package/esm2015/lib/dr-inputs/dr-toggle/dr-toggle.component.js +3 -2
  12. package/esm2015/lib/dr-popover/dr-popover.component.js +36 -5
  13. package/esm2015/lib/dr-popover/dr-popover.directive.js +7 -29
  14. package/esm2015/lib/dr-popover/dr-popover.service.js +31 -5
  15. package/esm2015/lib/dr-spinner/dr-spinner.component.js +1 -1
  16. package/esm2015/lib/models/constants.js +3 -3
  17. package/esm2015/lib/models/popover.js +16 -2
  18. package/esm2015/public-api.js +2 -2
  19. package/fesm2015/datarailsshared-datarailsshared.js +105 -57
  20. package/fesm2015/datarailsshared-datarailsshared.js.map +1 -1
  21. package/lib/dr-dropdown/dr-dropdown.component.d.ts +1 -1
  22. package/lib/dr-inputs/button/button.component.d.ts +1 -1
  23. package/lib/dr-inputs/dr-toggle/dr-toggle.component.d.ts +1 -0
  24. package/lib/dr-popover/dr-popover.component.d.ts +12 -3
  25. package/lib/dr-popover/dr-popover.directive.d.ts +5 -7
  26. package/lib/dr-popover/dr-popover.service.d.ts +2 -1
  27. package/lib/models/popover.d.ts +11 -1
  28. package/package.json +1 -1
  29. package/public-api.d.ts +1 -1
  30. package/datarailsshared-datarailsshared-1.3.15.tgz +0 -0
@@ -1,10 +1,11 @@
1
+ import { first } from 'rxjs/operators';
1
2
  import { DrPopoverRef } from './dr-popover-ref';
2
3
  import { DrPopoverComponent } from './dr-popover.component';
3
4
  import { ComponentPortal } from '@angular/cdk/portal';
4
5
  import { Injectable, Injector } from '@angular/core';
5
6
  import { Overlay, OverlayConfig, OverlayPositionBuilder } from '@angular/cdk/overlay';
6
7
  import { POPUP_POSITIONS } from '../models/constants';
7
- import { DEFAULT_CONFIG, DEFAULT_MODEL } from '../models/popover';
8
+ import { DEFAULT_CONFIG, DEFAULT_MODEL, getAlignmentDimension } from '../models/popover';
8
9
  import * as i0 from "@angular/core";
9
10
  import * as i1 from "@angular/cdk/overlay";
10
11
  export class DrPopoverService {
@@ -20,10 +21,10 @@ export class DrPopoverService {
20
21
  const overlayRef = this.createOverlay(model);
21
22
  const popoverRef = new DrPopoverRef(overlayRef);
22
23
  this.attachOverlayContainer(content, model, overlayRef, popoverRef);
23
- this.registerCloseListeners(model, overlayRef, popoverRef);
24
+ this.registerListeners(model, overlayRef, popoverRef);
24
25
  return popoverRef;
25
26
  }
26
- attachOverlayContainer(content, { contentContext, position, class: elementClass, manualClosing, hostRef }, overlayRef, popoverRef) {
27
+ attachOverlayContainer(content, { contentContext, position, class: elementClass, manualClosing, hostRef, alignment }, overlayRef, popoverRef) {
27
28
  const componentPortal = new ComponentPortal(DrPopoverComponent, null, this.createInjector(popoverRef));
28
29
  const contentRef = overlayRef.attach(componentPortal);
29
30
  popoverRef.componentRef = contentRef;
@@ -32,17 +33,26 @@ export class DrPopoverService {
32
33
  contentRef.instance.class = elementClass + ' ' + position;
33
34
  contentRef.instance.manualClosing = manualClosing;
34
35
  contentRef.instance.hostRef = hostRef;
36
+ contentRef.instance.alignment = alignment;
37
+ contentRef.instance.position = position;
35
38
  }
36
39
  createOverlay(popoverModel) {
37
40
  const overlayConfig = this.getOverlayConfig(popoverModel);
38
41
  return this.overlay.create(overlayConfig);
39
42
  }
40
43
  getOverlayConfig(popoverModel) {
44
+ if (!POPUP_POSITIONS[popoverModel.position])
45
+ throw new Error(`DrPopover does not support the '${popoverModel === null || popoverModel === void 0 ? void 0 : popoverModel.position}' position!`);
41
46
  const config = Object.assign(Object.assign({}, DEFAULT_CONFIG), popoverModel.overlayConfig || {});
47
+ const hostElement = this.getHostElement(popoverModel.hostRef);
42
48
  const positionStrategy = this.overlayPositionBuilder
43
49
  .flexibleConnectedTo(popoverModel.hostRef)
44
50
  .withPositions([POPUP_POSITIONS[popoverModel.position]]);
45
51
  const overlayConfig = new OverlayConfig(Object.assign({ scrollStrategy: this.overlay.scrollStrategies.noop(), positionStrategy }, config));
52
+ if (popoverModel.alignment === 'host' && hostElement) {
53
+ const alignmentDimension = getAlignmentDimension(popoverModel.position);
54
+ overlayConfig[alignmentDimension] = hostElement.getBoundingClientRect()[alignmentDimension];
55
+ }
46
56
  return overlayConfig;
47
57
  }
48
58
  createInjector(popoverRef) {
@@ -51,15 +61,31 @@ export class DrPopoverService {
51
61
  ];
52
62
  return Injector.create({ providers: injectionTokens, parent: this.injector });
53
63
  }
54
- registerCloseListeners(popoverModel, overlayRef, popoverRef) {
64
+ registerListeners(popoverModel, overlayRef, popoverRef) {
55
65
  const config = popoverModel.overlayConfig || {};
56
66
  const targetElement = popoverModel.targetElement;
67
+ const hostElement = this.getHostElement(popoverModel.hostRef);
57
68
  if ((config === null || config === void 0 ? void 0 : config.closeOnBackdropClick) && (config === null || config === void 0 ? void 0 : config.hasBackdrop)) {
58
69
  overlayRef.backdropClick().subscribe(() => popoverRef.close());
59
70
  }
60
71
  if (targetElement) {
61
72
  targetElement.addEventListener('mouseup', () => popoverRef.close(), { once: true });
62
73
  }
74
+ if (popoverModel.alignment === 'host' && hostElement) {
75
+ const alignmentDimension = getAlignmentDimension(popoverModel.position);
76
+ const resizeObserver = new ResizeObserver(entries => {
77
+ entries.forEach(host => overlayRef.updateSize({ [alignmentDimension]: host.target.getBoundingClientRect()[alignmentDimension] }));
78
+ });
79
+ resizeObserver.observe(hostElement);
80
+ popoverRef.onClose.pipe(first()).subscribe(() => resizeObserver.unobserve(hostElement));
81
+ }
82
+ }
83
+ getHostElement(hostRef) {
84
+ if (!hostRef || hostRef.x)
85
+ return null;
86
+ if (hostRef.nativeElement)
87
+ return hostRef.nativeElement;
88
+ return hostRef;
63
89
  }
64
90
  }
65
91
  DrPopoverService.ɵprov = i0.ɵɵdefineInjectable({ factory: function DrPopoverService_Factory() { return new DrPopoverService(i0.ɵɵinject(i1.Overlay), i0.ɵɵinject(i1.OverlayPositionBuilder), i0.ɵɵinject(i0.INJECTOR)); }, token: DrPopoverService, providedIn: "root" });
@@ -73,4 +99,4 @@ DrPopoverService.ctorParameters = () => [
73
99
  { type: OverlayPositionBuilder },
74
100
  { type: Injector }
75
101
  ];
76
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHItcG9wb3Zlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YXJhaWxzc2hhcmVkL3NyYy9saWIvZHItcG9wb3Zlci9kci1wb3BvdmVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBcUMsTUFBTSxlQUFlLENBQUM7QUFDeEYsT0FBTyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsc0JBQXNCLEVBQWMsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQTRCLE1BQU0sbUJBQW1CLENBQUM7OztBQUs1RixNQUFNLE9BQU8sZ0JBQWdCO0lBRXpCLFlBQ1ksT0FBZ0IsRUFDaEIsc0JBQThDLEVBQzlDLFFBQWtCO1FBRmxCLFlBQU8sR0FBUCxPQUFPLENBQVM7UUFDaEIsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUM5QyxhQUFRLEdBQVIsUUFBUSxDQUFVO0lBQzFCLENBQUM7SUFFTCxJQUFJLENBQUksT0FBMkMsRUFBRSxZQUFzQztRQUN2RixJQUFJLENBQUMsT0FBTztZQUFFLE9BQU87UUFFckIsTUFBTSxLQUFLLG1DQUFRLGFBQWEsR0FBSyxZQUFZLENBQUUsQ0FBQztRQUVwRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTdDLE1BQU0sVUFBVSxHQUFHLElBQUksWUFBWSxDQUFJLFVBQVUsQ0FBQyxDQUFD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LENBQUMsYUFBYSxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1NBQ2xFO1FBRUQsSUFBSSxhQUFhLEVBQUU7WUFDZixhQUFhLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQ3ZGO0lBQ0wsQ0FBQzs7OztZQXJGSixVQUFVLFNBQUM7Z0JBQ1IsVUFBVSxFQUFFLE1BQU07YUFDckI7OztZQU5RLE9BQU87WUFBaUIsc0JBQXNCO1lBRGxDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEclBvcG92ZXJSZWYgfSBmcm9tICcuL2RyLXBvcG92ZXItcmVmJztcclxuaW1wb3J0IHsgRHJQb3BvdmVyQ29tcG9uZW50IH0gZnJvbSAnLi9kci1wb3BvdmVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvbXBvbmVudFBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciwgU3RhdGljUHJvdmlkZXIsIFRlbXBsYXRlUmVmLCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE92ZXJsYXksIE92ZXJsYXlDb25maWcsIE92ZXJsYXlQb3NpdGlvbkJ1aWxkZXIsIE92ZXJsYXlSZWYgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XHJcbmltcG9ydCB7IFBPUFVQX1BPU0lUSU9OUyB9IGZyb20gJy4uL21vZGVscy9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBERUZBVUxUX0NPTkZJRywgREVGQVVMVF9NT0RFTCwgSURyUG9wb3ZlckNvbXBvbmVudE1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL3BvcG92ZXInO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRHJQb3BvdmVyU2VydmljZSB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBvdmVybGF5OiBPdmVybGF5LFxyXG4gICAgICAgIHByaXZhdGUgb3ZlcmxheVBvc2l0aW9uQnVpbGRlcjogT3ZlcmxheVBvc2l0aW9uQnVpbGRlcixcclxuICAgICAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcclxuICAgICkgeyB9XHJcblxyXG4gICAgb3BlbjxUPihjb250ZW50OiBUeXBlPFQ+IHwgVGVtcGxhdGVSZWY8SFRNTEVsZW1lbnQ+LCBwb3BvdmVyTW9kZWw6IElEclBvcG92ZXJDb21wb25lbnRNb2RlbCk6IERyUG9wb3ZlclJlZjxUPiB7XHJcbiAgICAgICAgaWYgKCFjb250ZW50KSByZXR1cm47XHJcblxyXG4gICAgICAgIGNvbnN0IG1vZGVsID0geyAuLi5ERUZBVUxUX01PREVMLCAuLi5wb3BvdmVyTW9kZWwgfTtcclxuXHJcbiAgICAgICAgY29uc3Qgb3ZlcmxheVJlZiA9IHRoaXMuY3JlYXRlT3ZlcmxheShtb2RlbCk7XHJcblxyXG4gICAgICAgIGNvbnN0IHBvcG92ZXJSZWYgPSBuZXcgRHJQb3BvdmVyUmVmPFQ+KG92ZXJsYXlSZWYpO1xyXG5cclxuICAgICAgICB0aGlzLmF0dGFjaE92ZXJsYXlDb250YWluZXIoY29udGVudCwgbW9kZWwsIG92ZXJsYXlSZWYsIHBvcG92ZXJSZWYpO1xyXG5cclxuICAgICAgICB0aGlzLnJlZ2lzdGVyQ2xvc2VMaXN0ZW5lcnMobW9kZWwsIG92ZXJsYXlSZWYsIHBvcG92ZXJSZWYpO1xyXG5cclxuICAgICAgICByZXR1cm4gcG9wb3ZlclJlZjtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGF0dGFjaE92ZXJsYXlDb250YWluZXI8VD4oXHJcbiAgICAgICAgY29udGVudDogVHlwZTxUPiB8IFRlbXBsYXRlUmVmPEhUTUxFbGVtZW50PixcclxuICAgICAgICB7IGNvbnRlbnRDb250ZXh0LCBwb3NpdGlvbiwgY2xhc3M6IGVsZW1lbnRDbGFzcywgbWFudWFsQ2xvc2luZywgaG9zdFJlZiB9OiBJRHJQb3BvdmVyQ29tcG9uZW50TW9kZWwsXHJcbiAgICAgICAgb3ZlcmxheVJlZjogT3ZlcmxheVJlZixcclxuICAgICAgICBwb3BvdmVyUmVmOiBEclBvcG92ZXJSZWY8VD5cclxuICAgICk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGNvbXBvbmVudFBvcnRhbCA9IG5ldyBDb21wb25lbnRQb3J0YWw8RHJQb3BvdmVyQ29tcG9uZW50PFQ+PihEclBvcG92ZXJDb21wb25lbnQsIG51bGwsIHRoaXMuY3JlYXRlSW5qZWN0b3IocG9wb3ZlclJlZikpO1xyXG4gICAgICAgIGNvbnN0IGNvbnRlbnRSZWYgPSBvdmVybGF5UmVmLmF0dGFjaDxEclBvcG92ZXJDb21wb25lbnQ8VD4+KGNvbXBvbmVudFBvcnRhbCk7XHJcblxyXG4gICAgICAgIHBvcG92ZXJSZWYuY29tcG9uZW50UmVmID0gY29udGVudFJlZjtcclxuXHJcbiAgICAgICAgY29udGVudFJlZi5pbnN0YW5jZS5jb250ZW50ID0gY29udGVudDtcclxuICAgICAgICBjb250ZW50UmVmLmluc3RhbmNlLmNvbnRlbnRDb250ZXh0ID0geyAuLi5jb250ZW50Q29udGV4dCwgY2xvc2VQb3BvdmVyOiBwb3BvdmVyUmVmLmNsb3NlLmJpbmQocG9wb3ZlclJlZikgfTtcclxuICAgICAgICBjb250ZW50UmVmLmluc3RhbmNlLmNsYXNzID0gZWxlbWVudENsYXNzICsgJyAnICsgcG9zaXRpb247XHJcbiAgICAgICAgY29udGVudFJlZi5pbnN0YW5jZS5tYW51YWxDbG9zaW5nID0gbWFudWFsQ2xvc2luZztcclxuICAgICAgICBjb250ZW50UmVmLmluc3RhbmNlLmhvc3RSZWYgPSBob3N0UmVmO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY3JlYXRlT3ZlcmxheShwb3BvdmVyTW9kZWw6IElEclBvcG92ZXJDb21wb25lbnRNb2RlbCk6IE92ZXJsYXlSZWYge1xyXG4gICAgICAgIGNvbnN0IG92ZXJsYXlDb25maWcgPSB0aGlzLmdldE92ZXJsYXlDb25maWcocG9wb3Zlck1vZGVsKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5vdmVybGF5LmNyZWF0ZShvdmVybGF5Q29uZmlnKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldE92ZXJsYXlDb25maWcocG9wb3Zlck1vZGVsOiBJRHJQb3BvdmVyQ29tcG9uZW50TW9kZWwpOiBPdmVybGF5Q29uZmlnIHtcclxuICAgICAgICBjb25zdCBjb25maWcgPSB7IC4uLkRFRkFVTFRfQ09ORklHLCAuLi5wb3BvdmVyTW9kZWwub3ZlcmxheUNvbmZpZyB8fCB7fX07XHJcblxyXG4gICAgICAgIGNvbnN0IHBvc2l0aW9uU3RyYXRlZ3kgPSB0aGlzLm92ZXJsYXlQb3NpdGlvbkJ1aWxkZXJcclxuICAgICAgICAgICAgLmZsZXhpYmxlQ29ubmVjdGVkVG8ocG9wb3Zlck1vZGVsLmhvc3RSZWYpXHJcbiAgICAgICAgICAgIC53aXRoUG9zaXRpb25zKFtQT1BVUF9QT1NJVElPTlNbcG9wb3Zlck1vZGVsLnBvc2l0aW9uXV0pO1xyXG5cclxuICAgICAgICBjb25zdCBvdmVybGF5Q29uZmlnID0gbmV3IE92ZXJsYXlDb25maWcoe1xyXG4gICAgICAgICAgICBzY3JvbGxTdHJhdGVneTogdGhpcy5vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMubm9vcCgpLFxyXG4gICAgICAgICAgICBwb3NpdGlvblN0cmF0ZWd5LFxyXG4gICAgICAgICAgICAuLi5jb25maWcsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBvdmVybGF5Q29uZmlnO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY3JlYXRlSW5qZWN0b3I8VD4ocG9wb3ZlclJlZjogRHJQb3BvdmVyUmVmPFQ+KTogSW5qZWN0b3Ige1xyXG4gICAgICAgIGNvbnN0IGluamVjdGlvblRva2VuczogU3RhdGljUHJvdmlkZXJbXSA9IFtcclxuICAgICAgICAgICAgeyBwcm92aWRlOiBEclBvcG92ZXJSZWYsIHVzZVZhbHVlOiBwb3BvdmVyUmVmIH0sXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgcmV0dXJuIEluamVjdG9yLmNyZWF0ZSh7IHByb3ZpZGVyczogaW5qZWN0aW9uVG9rZW5zLCBwYXJlbnQ6IHRoaXMuaW5qZWN0b3IgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZWdpc3RlckNsb3NlTGlzdGVuZXJzPFQ+KHBvcG92ZXJNb2RlbDogSURyUG9wb3ZlckNvbXBvbmVudE1vZGVsLCBvdmVybGF5UmVmOiBPdmVybGF5UmVmLCBwb3BvdmVyUmVmOiBEclBvcG92ZXJSZWY8VD4pOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBjb25maWcgPSBwb3BvdmVyTW9kZWwub3ZlcmxheUNvbmZpZyB8fCB7fTtcclxuICAgICAgICBjb25zdCB0YXJnZXRFbGVtZW50ID0gcG9wb3Zlck1vZGVsLnRhcmdldEVsZW1lbnQ7XHJcblxyXG4gICAgICAgIGlmIChjb25maWc/LmNsb3NlT25CYWNrZHJvcENsaWNrICYmIGNvbmZpZz8uaGFzQmFja2Ryb3ApIHtcclxuICAgICAgICAgICAgb3ZlcmxheVJlZi5iYWNrZHJvcENsaWNrKCkuc3Vic2NyaWJlKCgpID0+IHBvcG92ZXJSZWYuY2xvc2UoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGFyZ2V0RWxlbWVudCkge1xyXG4gICAgICAgICAgICB0YXJnZXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCAoKSA9PiBwb3BvdmVyUmVmLmNsb3NlKCksIHsgb25jZTogdHJ1ZSB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG59XHJcbiJdfQ==
102
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHItcG9wb3Zlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YXJhaWxzc2hhcmVkL3NyYy9saWIvZHItcG9wb3Zlci9kci1wb3BvdmVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQWlELE1BQU0sZUFBZSxDQUFDO0FBQ3BHLE9BQU8sRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLHNCQUFzQixFQUFjLE1BQU0sc0JBQXNCLENBQUM7QUFDbEcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLHFCQUFxQixFQUFtQyxNQUFNLG1CQUFtQixDQUFDOzs7QUFLMUgsTUFBTSxPQUFPLGdCQUFnQjtJQUV6QixZQUNZLE9BQWdCLEVBQ2hCLHNCQUE4QyxFQUM5QyxRQUFrQjtRQUZsQixZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQ2hCLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFDOUMsYUFBUSxHQUFSLFFBQVEsQ0FBVTtJQUMxQixDQUFDO0lBRUwsSUFBSSxDQUFJLE9BQTJDLEVBQUUsWUFBc0M7UUFDdkYsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPO1FBRXJCLE1BQU0sS0FBSyxtQ0FBUSxhQUFhLEdBQUssWUFBWSxDQUFFLENBQUM7UUFFcEQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU3QyxNQUFNLFVBQVUsR0FBRyxJQUFJLFlBQVksQ0FBSSxVQUFVLENBQUMsQ0FBQztRQUVuRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFcEUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFdEQsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztJQUVPLHNCQUFzQixDQUMxQixPQUEyQyxFQUMzQyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBNEIsRUFDOUcsVUFBc0IsRUFDdEIsVUFBMkI7UUFFM0IsTUFBTSxlQUFlLEdBQUcsSUFBSSxlQUFlLENBQXdCLGtCQUFrQixFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDOUgsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBd0IsZUFBZSxDQUFDLENBQUM7UUFFN0UsVUFBVSxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUM7UUFFckMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3RDLFVBQVUsQ0FBQyxRQUFRLENBQUMsY0FBYyxtQ0FBUSxjQUFjLEtBQUUsWUFBWSxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFFLENBQUM7UUFDNUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsWUFBWSxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUM7UUFDMUQsVUFBVSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQ2xELFVBQVUsQ0FBQyxRQUFRLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN0QyxVQUFVLENBQUMsUUFBUSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDMUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQzVDLENBQUM7SUFFTyxhQUFhLENBQUMsWUFBc0M7UUFDeEQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzFELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVPLGdCQUFnQixDQUFDLFlBQXNDO1FBQzNELElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLFlBQVksYUFBWixZQUFZLHVCQUFaLFlBQVksQ0FBRSxRQUFRLGFBQWEsQ0FBQyxDQUFDO1FBRXJJLE1BQU0sTUFBTSxtQ0FBUSxjQUFjLEdBQUssWUFBWSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN6RSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUU5RCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxzQkFBc0I7YUFDL0MsbUJBQW1CLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUN6QyxhQUFhLENBQUMsQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU3RCxNQUFNLGFBQWEsR0FBRyxJQUFJLGFBQWEsaUJBQ25DLGNBQWMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxFQUNwRCxnQkFBZ0IsSUFDYixNQUFNLEVBQ1gsQ0FBQztRQUVILElBQUksWUFBWSxDQUFDLFNBQVMsS0FBSyxNQUFNLElBQUksV0FBVyxFQUFFO1lBQ2xELE1BQU0sa0JBQWtCLEdBQUcscUJBQXFCLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3hFLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLGtCQUFrQixDQUFDLENBQUM7U0FDL0Y7UUFFRCxPQUFPLGFBQWEsQ0FBQztJQUN6QixDQUFDO0lBRU8sY0FBYyxDQUFJLFVBQTJCO1FBQ2pELE1BQU0sZUFBZSxHQUFxQjtZQUN0QyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRTtTQUNsRCxDQUFDO1FBRUYsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUVPLGlCQUFpQixDQUFJLFlBQXNDLEVBQUUsVUFBc0IsRUFBRSxVQUEyQjtRQUNwSCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQztRQUNoRCxNQUFNLGFBQWEsR0FBRyxZQUFZLENBQUMsYUFBYSxDQUFDO1FBQ2pELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTlELElBQUksQ0FBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsb0JBQW9CLE1BQUksTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLFdBQVcsQ0FBQSxFQUFFO1lBQ3JELFVBQVUsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7U0FDbEU7UUFFRCxJQUFJLGFBQWEsRUFBRTtZQUNmLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7U0FDdkY7UUFFRCxJQUFJLFlBQVksQ0FBQyxTQUFTLEtBQUssTUFBTSxJQUFJLFdBQVcsRUFBRTtZQUNsRCxNQUFNLGtCQUFrQixHQUFHLHFCQUFxQixDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN4RSxNQUFNLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDaEQsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDdEksQ0FBQyxDQUFDLENBQUM7WUFDSCxjQUFjLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3BDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztTQUMzRjtJQUNMLENBQUM7SUFFTyxjQUFjLENBQUksT0FBNEM7UUFDbEUsSUFBSSxDQUFDLE9BQU8sSUFBWSxPQUFRLENBQUMsQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ2hELElBQWlCLE9BQVEsQ0FBQyxhQUFhO1lBQUUsT0FBb0IsT0FBUSxDQUFDLGFBQWEsQ0FBQztRQUNwRixPQUFvQixPQUFPLENBQUM7SUFDaEMsQ0FBQzs7OztZQS9HSixVQUFVLFNBQUM7Z0JBQ1IsVUFBVSxFQUFFLE1BQU07YUFDckI7OztZQU5RLE9BQU87WUFBaUIsc0JBQXNCO1lBRGxDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmaXJzdCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgRHJQb3BvdmVyUmVmIH0gZnJvbSAnLi9kci1wb3BvdmVyLXJlZic7XHJcbmltcG9ydCB7IERyUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJy4vZHItcG9wb3Zlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIFN0YXRpY1Byb3ZpZGVyLCBUZW1wbGF0ZVJlZiwgVHlwZSwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPdmVybGF5LCBPdmVybGF5Q29uZmlnLCBPdmVybGF5UG9zaXRpb25CdWlsZGVyLCBPdmVybGF5UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xyXG5pbXBvcnQgeyBQT1BVUF9QT1NJVElPTlMgfSBmcm9tICcuLi9tb2RlbHMvY29uc3RhbnRzJztcclxuaW1wb3J0IHsgREVGQVVMVF9DT05GSUcsIERFRkFVTFRfTU9ERUwsIGdldEFsaWdubWVudERpbWVuc2lvbiwgSURyUG9wb3ZlckNvbXBvbmVudE1vZGVsLCBQb2ludCB9IGZyb20gJy4uL21vZGVscy9wb3BvdmVyJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIERyUG9wb3ZlclNlcnZpY2Uge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgb3ZlcmxheTogT3ZlcmxheSxcclxuICAgICAgICBwcml2YXRlIG92ZXJsYXlQb3NpdGlvbkJ1aWxkZXI6IE92ZXJsYXlQb3NpdGlvbkJ1aWxkZXIsXHJcbiAgICAgICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICApIHsgfVxyXG5cclxuICAgIG9wZW48VD4oY29udGVudDogVHlwZTxUPiB8IFRlbXBsYXRlUmVmPEhUTUxFbGVtZW50PiwgcG9wb3Zlck1vZGVsOiBJRHJQb3BvdmVyQ29tcG9uZW50TW9kZWwpOiBEclBvcG92ZXJSZWY8VD4ge1xyXG4gICAgICAgIGlmICghY29udGVudCkgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCBtb2RlbCA9IHsgLi4uREVGQVVMVF9NT0RFTCwgLi4ucG9wb3Zlck1vZGVsIH07XHJcblxyXG4gICAgICAgIGNvbnN0IG92ZXJsYXlSZWYgPSB0aGlzLmNyZWF0ZU92ZXJsYXkobW9kZWwpO1xyXG5cclxuICAgICAgICBjb25zdCBwb3BvdmVyUmVmID0gbmV3IERyUG9wb3ZlclJlZjxUPihvdmVybGF5UmVmKTtcclxuXHJcbiAgICAgICAgdGhpcy5hdHRhY2hPdmVybGF5Q29udGFpbmVyKGNvbnRlbnQsIG1vZGVsLCBvdmVybGF5UmVmLCBwb3BvdmVyUmVmKTtcclxuXHJcbiAgICAgICAgdGhpcy5yZWdpc3Rlckxpc3RlbmVycyhtb2RlbCwgb3ZlcmxheVJlZiwgcG9wb3ZlclJlZik7XHJcblxyXG4gICAgICAgIHJldHVybiBwb3BvdmVyUmVmO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXR0YWNoT3ZlcmxheUNvbnRhaW5lcjxUPihcclxuICAgICAgICBjb250ZW50OiBUeXBlPFQ+IHwgVGVtcGxhdGVSZWY8SFRNTEVsZW1lbnQ+LFxyXG4gICAgICAgIHsgY29udGVudENvbnRleHQsIHBvc2l0aW9uLCBjbGFzczogZWxlbWVudENsYXNzLCBtYW51YWxDbG9zaW5nLCBob3N0UmVmLCBhbGlnbm1lbnQgfTogSURyUG9wb3ZlckNvbXBvbmVudE1vZGVsLFxyXG4gICAgICAgIG92ZXJsYXlSZWY6IE92ZXJsYXlSZWYsXHJcbiAgICAgICAgcG9wb3ZlclJlZjogRHJQb3BvdmVyUmVmPFQ+XHJcbiAgICApOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBjb21wb25lbnRQb3J0YWwgPSBuZXcgQ29tcG9uZW50UG9ydGFsPERyUG9wb3ZlckNvbXBvbmVudDxUPj4oRHJQb3BvdmVyQ29tcG9uZW50LCBudWxsLCB0aGlzLmNyZWF0ZUluamVjdG9yKHBvcG92ZXJSZWYpKTtcclxuICAgICAgICBjb25zdCBjb250ZW50UmVmID0gb3ZlcmxheVJlZi5hdHRhY2g8RHJQb3BvdmVyQ29tcG9uZW50PFQ+Pihjb21wb25lbnRQb3J0YWwpO1xyXG5cclxuICAgICAgICBwb3BvdmVyUmVmLmNvbXBvbmVudFJlZiA9IGNvbnRlbnRSZWY7XHJcblxyXG4gICAgICAgIGNvbnRlbnRSZWYuaW5zdGFuY2UuY29udGVudCA9IGNvbnRlbnQ7XHJcbiAgICAgICAgY29udGVudFJlZi5pbnN0YW5jZS5jb250ZW50Q29udGV4dCA9IHsgLi4uY29udGVudENvbnRleHQsIGNsb3NlUG9wb3ZlcjogcG9wb3ZlclJlZi5jbG9zZS5iaW5kKHBvcG92ZXJSZWYpIH07XHJcbiAgICAgICAgY29udGVudFJlZi5pbnN0YW5jZS5jbGFzcyA9IGVsZW1lbnRDbGFzcyArICcgJyArIHBvc2l0aW9uO1xyXG4gICAgICAgIGNvbnRlbnRSZWYuaW5zdGFuY2UubWFudWFsQ2xvc2luZyA9IG1hbnVhbENsb3Npbmc7XHJcbiAgICAgICAgY29udGVudFJlZi5pbnN0YW5jZS5ob3N0UmVmID0gaG9zdFJlZjtcclxuICAgICAgICBjb250ZW50UmVmLmluc3RhbmNlLmFsaWdubWVudCA9IGFsaWdubWVudDtcclxuICAgICAgICBjb250ZW50UmVmLmluc3RhbmNlLnBvc2l0aW9uID0gcG9zaXRpb247XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjcmVhdGVPdmVybGF5KHBvcG92ZXJNb2RlbDogSURyUG9wb3ZlckNvbXBvbmVudE1vZGVsKTogT3ZlcmxheVJlZiB7XHJcbiAgICAgICAgY29uc3Qgb3ZlcmxheUNvbmZpZyA9IHRoaXMuZ2V0T3ZlcmxheUNvbmZpZyhwb3BvdmVyTW9kZWwpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm92ZXJsYXkuY3JlYXRlKG92ZXJsYXlDb25maWcpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0T3ZlcmxheUNvbmZpZyhwb3BvdmVyTW9kZWw6IElEclBvcG92ZXJDb21wb25lbnRNb2RlbCk6IE92ZXJsYXlDb25maWcge1xyXG4gICAgICAgIGlmICghUE9QVVBfUE9TSVRJT05TW3BvcG92ZXJNb2RlbC5wb3NpdGlvbl0pIHRocm93IG5ldyBFcnJvcihgRHJQb3BvdmVyIGRvZXMgbm90IHN1cHBvcnQgdGhlICcke3BvcG92ZXJNb2RlbD8ucG9zaXRpb259JyBwb3NpdGlvbiFgKTtcclxuXHJcbiAgICAgICAgY29uc3QgY29uZmlnID0geyAuLi5ERUZBVUxUX0NPTkZJRywgLi4ucG9wb3Zlck1vZGVsLm92ZXJsYXlDb25maWcgfHwge319O1xyXG4gICAgICAgIGNvbnN0IGhvc3RFbGVtZW50ID0gdGhpcy5nZXRIb3N0RWxlbWVudChwb3BvdmVyTW9kZWwuaG9zdFJlZik7XHJcblxyXG4gICAgICAgIGNvbnN0IHBvc2l0aW9uU3RyYXRlZ3kgPSB0aGlzLm92ZXJsYXlQb3NpdGlvbkJ1aWxkZXJcclxuICAgICAgICAgICAgLmZsZXhpYmxlQ29ubmVjdGVkVG8ocG9wb3Zlck1vZGVsLmhvc3RSZWYpXHJcbiAgICAgICAgICAgIC53aXRoUG9zaXRpb25zKFtQT1BVUF9QT1NJVElPTlNbcG9wb3Zlck1vZGVsLnBvc2l0aW9uXV0pO1xyXG5cclxuICAgICAgICBjb25zdCBvdmVybGF5Q29uZmlnID0gbmV3IE92ZXJsYXlDb25maWcoe1xyXG4gICAgICAgICAgICBzY3JvbGxTdHJhdGVneTogdGhpcy5vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMubm9vcCgpLFxyXG4gICAgICAgICAgICBwb3NpdGlvblN0cmF0ZWd5LFxyXG4gICAgICAgICAgICAuLi5jb25maWcsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChwb3BvdmVyTW9kZWwuYWxpZ25tZW50ID09PSAnaG9zdCcgJiYgaG9zdEVsZW1lbnQpIHtcclxuICAgICAgICAgICAgY29uc3QgYWxpZ25tZW50RGltZW5zaW9uID0gZ2V0QWxpZ25tZW50RGltZW5zaW9uKHBvcG92ZXJNb2RlbC5wb3NpdGlvbik7XHJcbiAgICAgICAgICAgIG92ZXJsYXlDb25maWdbYWxpZ25tZW50RGltZW5zaW9uXSA9IGhvc3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW2FsaWdubWVudERpbWVuc2lvbl07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gb3ZlcmxheUNvbmZpZztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNyZWF0ZUluamVjdG9yPFQ+KHBvcG92ZXJSZWY6IERyUG9wb3ZlclJlZjxUPik6IEluamVjdG9yIHtcclxuICAgICAgICBjb25zdCBpbmplY3Rpb25Ub2tlbnM6IFN0YXRpY1Byb3ZpZGVyW10gPSBbXHJcbiAgICAgICAgICAgIHsgcHJvdmlkZTogRHJQb3BvdmVyUmVmLCB1c2VWYWx1ZTogcG9wb3ZlclJlZiB9LFxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIHJldHVybiBJbmplY3Rvci5jcmVhdGUoeyBwcm92aWRlcnM6IGluamVjdGlvblRva2VucywgcGFyZW50OiB0aGlzLmluamVjdG9yIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVnaXN0ZXJMaXN0ZW5lcnM8VD4ocG9wb3Zlck1vZGVsOiBJRHJQb3BvdmVyQ29tcG9uZW50TW9kZWwsIG92ZXJsYXlSZWY6IE92ZXJsYXlSZWYsIHBvcG92ZXJSZWY6IERyUG9wb3ZlclJlZjxUPik6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHBvcG92ZXJNb2RlbC5vdmVybGF5Q29uZmlnIHx8IHt9O1xyXG4gICAgICAgIGNvbnN0IHRhcmdldEVsZW1lbnQgPSBwb3BvdmVyTW9kZWwudGFyZ2V0RWxlbWVudDtcclxuICAgICAgICBjb25zdCBob3N0RWxlbWVudCA9IHRoaXMuZ2V0SG9zdEVsZW1lbnQocG9wb3Zlck1vZGVsLmhvc3RSZWYpO1xyXG5cclxuICAgICAgICBpZiAoY29uZmlnPy5jbG9zZU9uQmFja2Ryb3BDbGljayAmJiBjb25maWc/Lmhhc0JhY2tkcm9wKSB7XHJcbiAgICAgICAgICAgIG92ZXJsYXlSZWYuYmFja2Ryb3BDbGljaygpLnN1YnNjcmliZSgoKSA9PiBwb3BvdmVyUmVmLmNsb3NlKCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRhcmdldEVsZW1lbnQpIHtcclxuICAgICAgICAgICAgdGFyZ2V0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgKCkgPT4gcG9wb3ZlclJlZi5jbG9zZSgpLCB7IG9uY2U6IHRydWUgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocG9wb3Zlck1vZGVsLmFsaWdubWVudCA9PT0gJ2hvc3QnICYmIGhvc3RFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFsaWdubWVudERpbWVuc2lvbiA9IGdldEFsaWdubWVudERpbWVuc2lvbihwb3BvdmVyTW9kZWwucG9zaXRpb24pO1xyXG4gICAgICAgICAgICBjb25zdCByZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihlbnRyaWVzID0+IHtcclxuICAgICAgICAgICAgICAgIGVudHJpZXMuZm9yRWFjaChob3N0ID0+IG92ZXJsYXlSZWYudXBkYXRlU2l6ZSh7IFthbGlnbm1lbnREaW1lbnNpb25dOiBob3N0LnRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVthbGlnbm1lbnREaW1lbnNpb25dIH0pKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUoaG9zdEVsZW1lbnQpO1xyXG4gICAgICAgICAgICBwb3BvdmVyUmVmLm9uQ2xvc2UucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoKCkgPT4gcmVzaXplT2JzZXJ2ZXIudW5vYnNlcnZlKGhvc3RFbGVtZW50KSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0SG9zdEVsZW1lbnQ8VD4oaG9zdFJlZjogUG9pbnQgfCBIVE1MRWxlbWVudCB8IEVsZW1lbnRSZWY8VD4pOiBIVE1MRWxlbWVudCB7XHJcbiAgICAgICAgaWYgKCFob3N0UmVmIHx8ICg8UG9pbnQ+aG9zdFJlZikueCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgaWYgKCg8RWxlbWVudFJlZj5ob3N0UmVmKS5uYXRpdmVFbGVtZW50KSByZXR1cm4gKDxFbGVtZW50UmVmPmhvc3RSZWYpLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgcmV0dXJuIDxIVE1MRWxlbWVudD5ob3N0UmVmO1xyXG4gICAgfVxyXG5cclxufVxyXG4iXX0=