@flywheel-io/vision 2.7.0-beta.0 → 2.7.0

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 (42) hide show
  1. package/assets/fonts/Flywheel-Vision-Icons.svg +8 -2
  2. package/assets/fonts/Flywheel-Vision-Icons.ttf +0 -0
  3. package/assets/fonts/Flywheel-Vision-Icons.woff +0 -0
  4. package/assets/svg/documents-file-move-arrow-right.svg +4 -0
  5. package/assets/svg/folder-move.svg +4 -0
  6. package/assets/svg/mouse-scroll.svg +4 -0
  7. package/assets/svg/thumbs-down-dislike.svg +4 -0
  8. package/components/avatar-list/avatar-list.component.d.ts +5 -3
  9. package/components/dialog/dialog-confirm.component.d.ts +2 -1
  10. package/components/form-heading/form-heading.component.d.ts +3 -1
  11. package/components/form-heading/form-heading.module.d.ts +2 -1
  12. package/components/icon/icon.types.d.ts +1 -1
  13. package/components/menu/menu-close-triggers.directive.d.ts +1 -1
  14. package/components/tag/tag.component.d.ts +10 -0
  15. package/components/tag/tag.module.d.ts +9 -0
  16. package/components/tooltip/tooltip-panel/tooltip-panel.component.d.ts +6 -6
  17. package/components/tooltip/tooltip.component.d.ts +2 -1
  18. package/components/tooltip/tooltip.directive.d.ts +39 -6
  19. package/components/wrapped-input/wrapped-input.component.d.ts +4 -1
  20. package/esm2022/components/avatar/avatar.component.mjs +7 -3
  21. package/esm2022/components/avatar-list/avatar-list.component.mjs +24 -24
  22. package/esm2022/components/chip-list/chip-list.component.mjs +3 -2
  23. package/esm2022/components/dialog/dialog-confirm.component.mjs +6 -3
  24. package/esm2022/components/form-heading/form-heading.component.mjs +9 -3
  25. package/esm2022/components/form-heading/form-heading.module.mjs +7 -3
  26. package/esm2022/components/icon/icon.types.mjs +44 -41
  27. package/esm2022/components/menu/menu-close-triggers.directive.mjs +15 -9
  28. package/esm2022/components/paginator/paginator-advanced/paginator-advanced.component.mjs +2 -2
  29. package/esm2022/components/select-menu/multi-select-menu/multi-select-menu.component.mjs +6 -1
  30. package/esm2022/components/tag/tag.component.mjs +25 -0
  31. package/esm2022/components/tag/tag.module.mjs +28 -0
  32. package/esm2022/components/tooltip/tooltip-panel/tooltip-panel.component.mjs +12 -21
  33. package/esm2022/components/tooltip/tooltip.component.mjs +4 -3
  34. package/esm2022/components/tooltip/tooltip.directive.mjs +94 -31
  35. package/esm2022/components/typeahead/typeahead.component.mjs +8 -4
  36. package/esm2022/components/wrapped-input/wrapped-input.component.mjs +10 -3
  37. package/fesm2022/flywheel-io-vision.mjs +274 -134
  38. package/fesm2022/flywheel-io-vision.mjs.map +1 -1
  39. package/package.json +1 -1
  40. package/scss/icons/_icon-glyphs.scss +12 -4
  41. package/styles.css +16 -4
  42. package/flywheel-io-vision-2.7.0-beta.0.tgz +0 -0
@@ -3,13 +3,6 @@ import { ComponentPortal } from '@angular/cdk/portal';
3
3
  import { computed, Directive, effect, ElementRef, inject, input, model, signal, ViewContainerRef } from '@angular/core';
4
4
  import { FwTooltipPanelComponent } from './tooltip-panel/tooltip-panel.component';
5
5
  import * as i0 from "@angular/core";
6
- const positionMap = {
7
- 'none': { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: 3 },
8
- 'above': { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: 3 },
9
- 'below': { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: -3 },
10
- 'left': { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center' },
11
- 'right': { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center' },
12
- };
13
6
  const delayMap = {
14
7
  'none': 0,
15
8
  'short': 400,
@@ -18,49 +11,97 @@ const delayMap = {
18
11
  const delayNameToMs = (name) => {
19
12
  return delayMap[name];
20
13
  };
14
+ const positionMap = {
15
+ 'above': { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: 3 },
16
+ 'below': { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: -3 },
17
+ 'left': { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center' },
18
+ 'right': { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center' },
19
+ 'none': { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: 3 },
20
+ };
21
+ /**
22
+ * Directive for displaying extra context on hover
23
+ * @see [Vision Docs](https://cdn.flywheel.io/docs/vision/master/?path=/docs/components-tooltip--docs)
24
+ */
21
25
  export class FwTooltipDirective {
22
26
  constructor() {
23
- // External Context
27
+ /***** External Context *****/
24
28
  this.elementRef = inject(ElementRef);
25
29
  this.viewContainerRef = inject(ViewContainerRef);
26
30
  this.overlayService = inject(Overlay);
27
- // Internal refs
31
+ /***** Internal Refs *****/
28
32
  this.overlayRef = signal(undefined);
29
33
  this.tooltipRef = signal(undefined);
30
- // Inputs
31
- this.delayMs = input(400, {
32
- transform: delayNameToMs,
33
- alias: 'fwTooltipDelay',
34
- });
34
+ /***** Inputs *****/
35
35
  // a lot of these ideally wouldn't be models,
36
36
  // but it makes it easier to interact with this from derivative directives
37
- this.title = model('undefined', {
37
+ // VS Code pulls the input that shares a name with the directive for giving context
38
+ // so putting the top level comment on this input
39
+ /**
40
+ * Directive for displaying extra context on hover
41
+ * @see [Vision Docs](https://cdn.flywheel.io/docs/vision/master/?path=/docs/components-tooltip--docs)
42
+ */
43
+ this.title = model('Placeholder', {
38
44
  alias: 'fwTooltip',
39
45
  });
46
+ /**
47
+ * direction relative to the parent component that the tooltip will attempt to position itself to
48
+ */
40
49
  this.position = model('above', {
41
50
  alias: 'fwTooltipPosition',
42
51
  });
52
+ /**
53
+ * maximum width of the tooltip in pixels
54
+ */
43
55
  this.maxWidth = model(200, {
44
56
  alias: 'fwTooltipMaxWidthPx',
45
57
  });
58
+ /**
59
+ * amount of delay before the tooltip displays
60
+ *
61
+ * none (0ms),
62
+ * short (400ms),
63
+ * long (700ms)
64
+ */
65
+ this.delayMs = input(400, {
66
+ transform: delayNameToMs,
67
+ alias: 'fwTooltipDelay',
68
+ });
69
+ /**
70
+ * whether or not the tooltip should have a caret
71
+ */
72
+ this.displayCaret = input(true, {
73
+ alias: 'fwTooltipCaret',
74
+ });
46
75
  this.enabled = model(true, {
47
- alias: 'fwTooltipEnabled'
76
+ alias: 'fwTooltipEnabled',
77
+ });
78
+ /***** Derived State *****/
79
+ this.connectedPositions = computed(() => {
80
+ // falback positions for if it doesn't fit in the specified position
81
+ // tend towards closer first i.e. 'above' will try 'left' and 'right' before resorting to 'below
82
+ const positionPreferenceOrderMap = {
83
+ 'above': ['above', 'right', 'left', 'below'],
84
+ 'right': ['right', 'below', 'above', 'left'],
85
+ 'below': ['below', 'left', 'right', 'above'],
86
+ 'left': ['left', 'above', 'below', 'right'],
87
+ };
88
+ const fallbackNamedPositions = positionPreferenceOrderMap[this.position()];
89
+ const connectedPositions = fallbackNamedPositions.map(name => positionMap[name]);
90
+ return connectedPositions;
48
91
  });
49
- // derived state
50
- this.connectedPosition = computed(() => [positionMap[this.position()]]);
51
92
  this.positionStrategy = computed(() => {
52
93
  const positionBuilder = this.overlayService.position();
53
94
  const withOrigin = positionBuilder.flexibleConnectedTo(this.elementRef);
54
- const completedStrategy = withOrigin.withPositions(this.connectedPosition());
95
+ const completedStrategy = withOrigin.withPositions(this.connectedPositions());
55
96
  return completedStrategy;
56
97
  });
57
98
  this.overlayConfig = computed(() => ({
58
99
  positionStrategy: this.positionStrategy(),
59
- maxWidth: this.maxWidth(),
100
+ maxWidth: Number(this.maxWidth()),
60
101
  ScrollStrategyOptions: this.overlayService.scrollStrategies.close(),
61
102
  disposeOnNavigation: true,
62
103
  }));
63
- // effects and methods
104
+ /***** Effects and Methods *****/
64
105
  this.addMouseEventListeners = effect(() => {
65
106
  const nativeElement = this.elementRef.nativeElement;
66
107
  nativeElement.addEventListener('mouseenter', () => {
@@ -70,13 +111,32 @@ export class FwTooltipDirective {
70
111
  this.hideTooltip();
71
112
  });
72
113
  });
114
+ // updates the tooltip panel's caret position if a fallback position is used
115
+ this.handlePositionChange = effect(() => {
116
+ this.positionChangeSub?.unsubscribe();
117
+ this.positionChangeSub = this.positionStrategy().positionChanges.subscribe(positionChange => {
118
+ const newPosition = positionChange.connectionPair;
119
+ const positionNames = Object.keys(positionMap);
120
+ const newPositionName = positionNames.find(name => {
121
+ const pos = positionMap[name];
122
+ return pos.originX === newPosition.originX &&
123
+ pos.originY === newPosition.originY &&
124
+ pos.overlayX === newPosition.overlayX &&
125
+ pos.overlayY === newPosition.overlayY;
126
+ });
127
+ if (newPositionName) {
128
+ this.tooltipRef().setInput('position', newPositionName);
129
+ this.tooltipRef().changeDetectorRef.detectChanges();
130
+ }
131
+ });
132
+ });
73
133
  }
74
134
  ngOnInit() {
75
135
  this.tooltipPortal = new ComponentPortal(FwTooltipPanelComponent, this.viewContainerRef);
76
136
  this.overlayRef.set(this.overlayService.create());
77
137
  }
78
138
  showTooltip() {
79
- if (!this.enabled()) {
139
+ if (!this.enabled() || !this.title()) {
80
140
  return;
81
141
  }
82
142
  const overlayRef = this.overlayRef();
@@ -89,20 +149,23 @@ export class FwTooltipDirective {
89
149
  this.tooltipRef.set(tooltipRef);
90
150
  tooltipRef.setInput('title', this.title());
91
151
  tooltipRef.setInput('position', this.position());
152
+ tooltipRef.setInput('maxWidth', this.maxWidth());
153
+ tooltipRef.setInput('displayCaret', this.displayCaret());
92
154
  tooltipRef.changeDetectorRef.detectChanges();
93
155
  }, this.delayMs());
94
156
  }
95
157
  hideTooltip() {
96
- const animationDelayMs = 200;
97
- this.closeDelayTimer = window.setTimeout(() => {
98
- window.clearTimeout(this.openDelayTimer);
99
- this.openDelayTimer = undefined;
100
- this.overlayRef().detach();
101
- this.tooltipRef.set(undefined);
102
- }, animationDelayMs);
158
+ window.clearTimeout(this.openDelayTimer);
159
+ this.openDelayTimer = undefined;
160
+ this.overlayRef().detach();
161
+ this.tooltipRef.set(undefined);
162
+ }
163
+ ngOnDestroy() {
164
+ this.positionChangeSub.unsubscribe();
165
+ this.hideTooltip();
103
166
  }
104
167
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FwTooltipDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
105
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "17.3.12", type: FwTooltipDirective, isStandalone: true, selector: "[fwTooltip]", inputs: { delayMs: { classPropertyName: "delayMs", publicName: "fwTooltipDelay", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "fwTooltip", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "fwTooltipPosition", isSignal: true, isRequired: false, transformFunction: null }, maxWidth: { classPropertyName: "maxWidth", publicName: "fwTooltipMaxWidthPx", isSignal: true, isRequired: false, transformFunction: null }, enabled: { classPropertyName: "enabled", publicName: "fwTooltipEnabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { title: "fwTooltipChange", position: "fwTooltipPositionChange", maxWidth: "fwTooltipMaxWidthPxChange", enabled: "fwTooltipEnabledChange" }, ngImport: i0 }); }
168
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "17.3.12", type: FwTooltipDirective, isStandalone: true, selector: "[fwTooltip]", inputs: { title: { classPropertyName: "title", publicName: "fwTooltip", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "fwTooltipPosition", isSignal: true, isRequired: false, transformFunction: null }, maxWidth: { classPropertyName: "maxWidth", publicName: "fwTooltipMaxWidthPx", isSignal: true, isRequired: false, transformFunction: null }, delayMs: { classPropertyName: "delayMs", publicName: "fwTooltipDelay", isSignal: true, isRequired: false, transformFunction: null }, displayCaret: { classPropertyName: "displayCaret", publicName: "fwTooltipCaret", isSignal: true, isRequired: false, transformFunction: null }, enabled: { classPropertyName: "enabled", publicName: "fwTooltipEnabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { title: "fwTooltipChange", position: "fwTooltipPositionChange", maxWidth: "fwTooltipMaxWidthPxChange", enabled: "fwTooltipEnabledChange" }, ngImport: i0 }); }
106
169
  }
107
170
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FwTooltipDirective, decorators: [{
108
171
  type: Directive,
@@ -111,4 +174,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
111
174
  standalone: true,
112
175
  }]
113
176
  }] });
114
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy90b29sdGlwL3Rvb2x0aXAuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsT0FBTyxFQUE2QixNQUFNLHNCQUFzQixDQUFDO0FBQzdGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQWdCLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFOUksT0FBTyxFQUFFLHVCQUF1QixFQUFrQixNQUFNLHlDQUF5QyxDQUFDOztBQUtsRyxNQUFNLFdBQVcsR0FBeUM7SUFDeEQsTUFBTSxFQUFFLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFO0lBQ2pHLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRTtJQUNsRyxPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRTtJQUNuRyxNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxF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Qy9DLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQsV0FBVztRQUVULE1BQU0sZ0JBQWdCLEdBQUcsR0FBRyxDQUFDO1FBRzdCLElBQUksQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDNUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDekMsSUFBSSxDQUFDLGNBQWMsR0FBRyxTQUFTLENBQUM7WUFDaEMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2pDLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7K0dBaEhVLGtCQUFrQjttR0FBbEIsa0JBQWtCOzs0RkFBbEIsa0JBQWtCO2tCQUo5QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxhQUFhO29CQUN2QixVQUFVLEVBQUUsSUFBSTtpQkFDakIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25uZWN0ZWRQb3NpdGlvbiwgT3ZlcmxheSwgT3ZlcmxheUNvbmZpZywgT3ZlcmxheVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IENvbXBvbmVudFBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHsgQ29tcG9uZW50UmVmLCBjb21wdXRlZCwgRGlyZWN0aXZlLCBlZmZlY3QsIEVsZW1lbnRSZWYsIGluamVjdCwgaW5wdXQsIG1vZGVsLCBPbkluaXQsIHNpZ25hbCwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBGd1Rvb2x0aXBQYW5lbENvbXBvbmVudCwgU2ltcGxlUG9zaXRpb24gfSBmcm9tICcuL3Rvb2x0aXAtcGFuZWwvdG9vbHRpcC1wYW5lbC5jb21wb25lbnQnO1xuXG50eXBlIERlbGF5TGVuZ3RoID0gJ25vbmUnIHwgJ3Nob3J0JyB8ICdsb25nJztcbnR5cGUgRGVsYXlNYXAgPSB7IFtLIGluIERlbGF5TGVuZ3RoXTogbnVtYmVyIH07XG5cbmNvbnN0IHBvc2l0aW9uTWFwOiB7IFtrZXk6IHN0cmluZ106IENvbm5lY3RlZFBvc2l0aW9uIH0gPSB7XG4gICdub25lJzogeyBvcmlnaW5YOiAnY2VudGVyJywgb3JpZ2luWTogJ3RvcCcsIG92ZXJsYXlYOiAnY2VudGVyJywgb3ZlcmxheVk6ICdib3R0b20nLCBvZmZzZXRZOiAzIH0sXG4gICdhYm92ZSc6IHsgb3JpZ2luWDogJ2NlbnRlcicsIG9yaWdpblk6ICd0b3AnLCBvdmVybGF5WDogJ2NlbnRlcicsIG92ZXJsYXlZOiAnYm90dG9tJywgb2Zmc2V0WTogMyB9LFxuICAnYmVsb3cnOiB7IG9yaWdpblg6ICdjZW50ZXInLCBvcmlnaW5ZOiAnYm90dG9tJywgb3ZlcmxheVg6ICdjZW50ZXInLCBvdmVybGF5WTogJ3RvcCcsIG9mZnNldFk6IC0zIH0sXG4gICdsZWZ0JzogeyBvcmlnaW5YOiAnc3RhcnQnLCBvcmlnaW5ZOiAnY2VudGVyJywgb3ZlcmxheVg6ICdlbmQnLCBvdmVybGF5WTogJ2NlbnRlcicgfSxcbiAgJ3JpZ2h0JzogeyBvcmlnaW5YOiAnZW5kJywgb3JpZ2luWTogJ2NlbnRlcicsIG92ZXJsYXlYOiAnc3RhcnQnLCBvdmVybGF5WTogJ2NlbnRlcicgfSxcbn07XG5cbmNvbnN0IGRlbGF5TWFwOiBEZWxheU1hcCA9IHtcbiAgJ25vbmUnOiAwLFxuICAnc2hvcnQnOiA0MDAsXG4gICdsb25nJzogNzAwLFxufVxuXG5jb25zdCBkZWxheU5hbWVUb01zID0gKG5hbWU6IERlbGF5TGVuZ3RoKTogbnVtYmVyID0+IHtcbiAgcmV0dXJuIGRlbGF5TWFwW25hbWVdO1xufVxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbZndUb29sdGlwXScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEZ3VG9vbHRpcERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgLy8gRXh0ZXJuYWwgQ29udGV4dFxuICBwcml2YXRlIGVsZW1lbnRSZWYgPSBpbmplY3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KEVsZW1lbnRSZWYpO1xuICBwcml2YXRlIHZpZXdDb250YWluZXJSZWYgPSBpbmplY3QoVmlld0NvbnRhaW5lclJlZik7XG4gIHByaXZhdGUgb3ZlcmxheVNlcnZpY2UgPSBpbmplY3QoT3ZlcmxheSk7XG5cbiAgLy8gSW50ZXJuYWwgcmVmc1xuICBwcml2YXRlIG92ZXJsYXlSZWYgPSBzaWduYWw8T3ZlcmxheVJlZj4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSB0b29sdGlwUmVmID0gc2lnbmFsPENvbXBvbmVudFJlZjxGd1Rvb2x0aXBQYW5lbENvbXBvbmVudD4+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgdG9vbHRpcFBvcnRhbDogQ29tcG9uZW50UG9ydGFsPEZ3VG9vbHRpcFBhbmVsQ29tcG9uZW50PjtcblxuICAvLyBJbnB1dHNcbiAgZGVsYXlNcyA9IGlucHV0KDQwMCwge1xuICAgIHRyYW5zZm9ybTogZGVsYXlOYW1lVG9NcyxcbiAgICBhbGlhczogJ2Z3VG9vbHRpcERlbGF5JyxcbiAgfSk7XG5cbiAgLy8gYSBsb3Qgb2YgdGhlc2UgaWRlYWxseSB3b3VsZG4ndCBiZSBtb2RlbHMsXG4gIC8vIGJ1dCBpdCBtYWtlcyBpdCBlYXNpZXIgdG8gaW50ZXJhY3Qgd2l0aCB0aGlzIGZyb20gZGVyaXZhdGl2ZSBkaXJlY3RpdmVzXG5cbiAgdGl0bGUgPSBtb2RlbDxzdHJpbmc+KCd1bmRlZmluZWQnLCB7XG4gICAgYWxpYXM6ICdmd1Rvb2x0aXAnLFxuICB9KVxuXG4gIHBvc2l0aW9uID0gbW9kZWw8U2ltcGxlUG9zaXRpb24+KCdhYm92ZScsIHtcbiAgICBhbGlhczogJ2Z3VG9vbHRpcFBvc2l0aW9uJyxcbiAgfSk7XG5cbiAgbWF4V2lkdGggPSBtb2RlbDxudW1iZXI+KDIwMCwge1xuICAgIGFsaWFzOiAnZndUb29sdGlwTWF4V2lkdGhQeCcsXG4gIH0pXG5cbiAgZW5hYmxlZCA9IG1vZGVsKHRydWUsIHtcbiAgICBhbGlhczogJ2Z3VG9vbHRpcEVuYWJsZWQnXG4gIH0pO1xuXG4gIC8vIGRlcml2ZWQgc3RhdGVcbiAgY29ubmVjdGVkUG9zaXRpb24gPSBjb21wdXRlZCgoKSA9PiBbcG9zaXRpb25NYXBbdGhpcy5wb3NpdGlvbigpXV0pO1xuXG4gIHBvc2l0aW9uU3RyYXRlZ3kgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgcG9zaXRpb25CdWlsZGVyID0gdGhpcy5vdmVybGF5U2VydmljZS5wb3NpdGlvbigpO1xuICAgIGNvbnN0IHdpdGhPcmlnaW4gPSBwb3NpdGlvbkJ1aWxkZXIuZmxleGlibGVDb25uZWN0ZWRUbyh0aGlzLmVsZW1lbnRSZWYpO1xuICAgIGNvbnN0IGNvbXBsZXRlZFN0cmF0ZWd5ID0gd2l0aE9yaWdpbi53aXRoUG9zaXRpb25zKHRoaXMuY29ubmVjdGVkUG9zaXRpb24oKSk7XG4gICAgcmV0dXJuIGNvbXBsZXRlZFN0cmF0ZWd5O1xuICB9KTtcblxuICBvdmVybGF5Q29uZmlnID0gY29tcHV0ZWQ8T3ZlcmxheUNvbmZpZz4oKCkgPT4gKHtcbiAgICBwb3NpdGlvblN0cmF0ZWd5OiB0aGlzLnBvc2l0aW9uU3RyYXRlZ3koKSxcbiAgICBtYXhXaWR0aDogdGhpcy5tYXhXaWR0aCgpLFxuICAgIFNjcm9sbFN0cmF0ZWd5T3B0aW9uczogdGhpcy5vdmVybGF5U2VydmljZS5zY3JvbGxTdHJhdGVnaWVzLmNsb3NlKCksXG4gICAgZGlzcG9zZU9uTmF2aWdhdGlvbjogdHJ1ZSxcbiAgfSkpO1xuXG4gIC8vIGVmZmVjdHMgYW5kIG1ldGhvZHNcbiAgYWRkTW91c2VFdmVudExpc3RlbmVycyA9IGVmZmVjdCgoKSA9PiB7XG5cbiAgICBjb25zdCBuYXRpdmVFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICBuYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZW50ZXInLCAoKSA9PiB7XG4gICAgICB0aGlzLnNob3dUb29sdGlwKCk7XG4gICAgfSk7XG5cbiAgICBuYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCAoKSA9PiB7XG4gICAgICB0aGlzLmhpZGVUb29sdGlwKCk7XG4gICAgfSk7XG4gIH0pXG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy50b29sdGlwUG9ydGFsID0gbmV3IENvbXBvbmVudFBvcnRhbChGd1Rvb2x0aXBQYW5lbENvbXBvbmVudCwgdGhpcy52aWV3Q29udGFpbmVyUmVmKTtcblxuICAgIHRoaXMub3ZlcmxheVJlZi5zZXQodGhpcy5vdmVybGF5U2VydmljZS5jcmVhdGUoKSk7XG4gIH1cblxuXG4gIHByaXZhdGUgb3BlbkRlbGF5VGltZXI6IG51bWJlcjtcbiAgcHJpdmF0ZSBjbG9zZURlbGF5VGltZXI6IG51bWJlcjtcblxuICBzaG93VG9vbHRpcCgpOiB2b2lkIHtcblxuICAgIGlmKCF0aGlzLmVuYWJsZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG92ZXJsYXlSZWYgPSB0aGlzLm92ZXJsYXlSZWYoKTtcbiAgICBvdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uU3RyYXRlZ3kodGhpcy5wb3NpdGlvblN0cmF0ZWd5KCkpO1xuXG4gICAgaWYgKHRoaXMub3BlbkRlbGF5VGltZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm9wZW5EZWxheVRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgdG9vbHRpcFJlZiA9IG92ZXJsYXlSZWYuYXR0YWNoKHRoaXMudG9vbHRpcFBvcnRhbCk7XG4gICAgICB0aGlzLnRvb2x0aXBSZWYuc2V0KHRvb2x0aXBSZWYpO1xuXG4gICAgICB0b29sdGlwUmVmLnNldElucHV0KCd0aXRsZScsIHRoaXMudGl0bGUoKSk7XG4gICAgICB0b29sdGlwUmVmLnNldElucHV0KCdwb3NpdGlvbicsIHRoaXMucG9zaXRpb24oKSk7XG4gICAgICB0b29sdGlwUmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9LCB0aGlzLmRlbGF5TXMoKSk7XG4gIH1cblxuICBoaWRlVG9vbHRpcCgpOiB2b2lkIHtcblxuICAgIGNvbnN0IGFuaW1hdGlvbkRlbGF5TXMgPSAyMDA7XG5cblxuICAgIHRoaXMuY2xvc2VEZWxheVRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLm9wZW5EZWxheVRpbWVyKTtcbiAgICAgIHRoaXMub3BlbkRlbGF5VGltZXIgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLm92ZXJsYXlSZWYoKS5kZXRhY2goKTtcbiAgICAgIHRoaXMudG9vbHRpcFJlZi5zZXQodW5kZWZpbmVkKTtcbiAgICB9LCBhbmltYXRpb25EZWxheU1zKTtcbiAgfVxuXG59XG4iXX0=
177
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy90b29sdGlwL3Rvb2x0aXAuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsT0FBTyxFQUE2QixNQUFNLHNCQUFzQixDQUFDO0FBQzdGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQWdCLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3pKLE9BQU8sRUFBRSx1QkFBdUIsRUFBa0IsTUFBTSx5Q0FBeUMsQ0FBQzs7QUFLbEcsTUFBTSxRQUFRLEdBQWE7SUFDekIsTUFBTSxFQUFFLENBQUM7SUFDVCxPQUFPLEVBQUUsR0FBRztJQUNaLE1BQU0sRUFBRSxHQUFHO0NBQ1osQ0FBQTtBQUVELE1BQU0sYUFBYSxHQUFHLENBQUMsSUFBaUIsRUFBVSxFQUFFO0lBQ2xELE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3hCLENBQUMsQ0FBQTtBQUdELE1BQU0sV0FBVyxHQUF5QztJQUN4RCxPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUU7SUFDbEcsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUU7SUFDbkcsTUFBTSxFQUFFLEVBQUUsT0FBTyxFQUFFLE9B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LElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQixDQUFDOytHQXpMVSxrQkFBa0I7bUdBQWxCLGtCQUFrQjs7NEZBQWxCLGtCQUFrQjtrQkFKOUIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsYUFBYTtvQkFDdkIsVUFBVSxFQUFFLElBQUk7aUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29ubmVjdGVkUG9zaXRpb24sIE92ZXJsYXksIE92ZXJsYXlDb25maWcsIE92ZXJsYXlSZWYgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBDb21wb25lbnRQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IENvbXBvbmVudFJlZiwgY29tcHV0ZWQsIERpcmVjdGl2ZSwgZWZmZWN0LCBFbGVtZW50UmVmLCBpbmplY3QsIGlucHV0LCBtb2RlbCwgT25EZXN0cm95LCBPbkluaXQsIHNpZ25hbCwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEZ3VG9vbHRpcFBhbmVsQ29tcG9uZW50LCBTaW1wbGVQb3NpdGlvbiB9IGZyb20gJy4vdG9vbHRpcC1wYW5lbC90b29sdGlwLXBhbmVsLmNvbXBvbmVudCc7XG5cbnR5cGUgRGVsYXlMZW5ndGggPSAnbm9uZScgfCAnc2hvcnQnIHwgJ2xvbmcnO1xudHlwZSBEZWxheU1hcCA9IHsgW0sgaW4gRGVsYXlMZW5ndGhdOiBudW1iZXIgfTtcblxuY29uc3QgZGVsYXlNYXA6IERlbGF5TWFwID0ge1xuICAnbm9uZSc6IDAsXG4gICdzaG9ydCc6IDQwMCxcbiAgJ2xvbmcnOiA3MDAsXG59XG5cbmNvbnN0IGRlbGF5TmFtZVRvTXMgPSAobmFtZTogRGVsYXlMZW5ndGgpOiBudW1iZXIgPT4ge1xuICByZXR1cm4gZGVsYXlNYXBbbmFtZV07XG59XG5cblxuY29uc3QgcG9zaXRpb25NYXA6IHsgW2tleTogc3RyaW5nXTogQ29ubmVjdGVkUG9zaXRpb24gfSA9IHtcbiAgJ2Fib3ZlJzogeyBvcmlnaW5YOiAnY2VudGVyJywgb3JpZ2luWTogJ3RvcCcsIG92ZXJsYXlYOiAnY2VudGVyJywgb3ZlcmxheVk6ICdib3R0b20nLCBvZmZzZXRZOiAzIH0sXG4gICdiZWxvdyc6IHsgb3JpZ2luWDogJ2NlbnRlcicsIG9yaWdpblk6ICdib3R0b20nLCBvdmVybGF5WDogJ2NlbnRlcicsIG92ZXJsYXlZOiAndG9wJywgb2Zmc2V0WTogLTMgfSxcbiAgJ2xlZnQnOiB7IG9yaWdpblg6ICdzdGFydCcsIG9yaWdpblk6ICdjZW50ZXInLCBvdmVybGF5WDogJ2VuZCcsIG92ZXJsYXlZOiAnY2VudGVyJyB9LFxuICAncmlnaHQnOiB7IG9yaWdpblg6ICdlbmQnLCBvcmlnaW5ZOiAnY2VudGVyJywgb3ZlcmxheVg6ICdzdGFydCcsIG92ZXJsYXlZOiAnY2VudGVyJyB9LFxuICAnbm9uZSc6IHsgb3JpZ2luWDogJ2NlbnRlcicsIG9yaWdpblk6ICd0b3AnLCBvdmVybGF5WDogJ2NlbnRlcicsIG92ZXJsYXlZOiAnYm90dG9tJywgb2Zmc2V0WTogMyB9LFxufTtcblxuXG4vKipcbiAqIERpcmVjdGl2ZSBmb3IgZGlzcGxheWluZyBleHRyYSBjb250ZXh0IG9uIGhvdmVyXG4gKiBAc2VlIFtWaXNpb24gRG9jc10oaHR0cHM6Ly9jZG4uZmx5d2hlZWwuaW8vZG9jcy92aXNpb24vbWFzdGVyLz9wYXRoPS9kb2NzL2NvbXBvbmVudHMtdG9vbHRpcC0tZG9jcylcbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2Z3VG9vbHRpcF0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBGd1Rvb2x0aXBEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgLyoqKioqIEV4dGVybmFsIENvbnRleHQgKioqKiovXG5cbiAgcHJpdmF0ZSBlbGVtZW50UmVmID0gaW5qZWN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PihFbGVtZW50UmVmKTtcbiAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmID0gaW5qZWN0KFZpZXdDb250YWluZXJSZWYpO1xuICBwcml2YXRlIG92ZXJsYXlTZXJ2aWNlID0gaW5qZWN0KE92ZXJsYXkpO1xuXG4gIC8qKioqKiBJbnRlcm5hbCBSZWZzICoqKioqL1xuXG4gIHByaXZhdGUgb3ZlcmxheVJlZiA9IHNpZ25hbDxPdmVybGF5UmVmPih1bmRlZmluZWQpO1xuICBwcml2YXRlIHRvb2x0aXBSZWYgPSBzaWduYWw8Q29tcG9uZW50UmVmPEZ3VG9vbHRpcFBhbmVsQ29tcG9uZW50Pj4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSB0b29sdGlwUG9ydGFsOiBDb21wb25lbnRQb3J0YWw8RndUb29sdGlwUGFuZWxDb21wb25lbnQ+O1xuXG4gIC8qKioqKiBJbnB1dHMgKioqKiovXG5cbiAgLy8gYSBsb3Qgb2YgdGhlc2UgaWRlYWxseSB3b3VsZG4ndCBiZSBtb2RlbHMsXG4gIC8vIGJ1dCBpdCBtYWtlcyBpdCBlYXNpZXIgdG8gaW50ZXJhY3Qgd2l0aCB0aGlzIGZyb20gZGVyaXZhdGl2ZSBkaXJlY3RpdmVzXG5cbiAgLy8gVlMgQ29kZSBwdWxscyB0aGUgaW5wdXQgdGhhdCBzaGFyZXMgYSBuYW1lIHdpdGggdGhlIGRpcmVjdGl2ZSBmb3IgZ2l2aW5nIGNvbnRleHRcbiAgLy8gc28gcHV0dGluZyB0aGUgdG9wIGxldmVsIGNvbW1lbnQgb24gdGhpcyBpbnB1dFxuXG4gIC8qKlxuICAgKiBEaXJlY3RpdmUgZm9yIGRpc3BsYXlpbmcgZXh0cmEgY29udGV4dCBvbiBob3ZlclxuICAgKiBAc2VlIFtWaXNpb24gRG9jc10oaHR0cHM6Ly9jZG4uZmx5d2hlZWwuaW8vZG9jcy92aXNpb24vbWFzdGVyLz9wYXRoPS9kb2NzL2NvbXBvbmVudHMtdG9vbHRpcC0tZG9jcylcbiAgICovXG4gIHRpdGxlID0gbW9kZWw8c3RyaW5nPignUGxhY2Vob2xkZXInLCB7XG4gICAgYWxpYXM6ICdmd1Rvb2x0aXAnLFxuICB9KVxuXG4gIC8qKlxuICAgKiBkaXJlY3Rpb24gcmVsYXRpdmUgdG8gdGhlIHBhcmVudCBjb21wb25lbnQgdGhhdCB0aGUgdG9vbHRpcCB3aWxsIGF0dGVtcHQgdG8gcG9zaXRpb24gaXRzZWxmIHRvXG4gICAqL1xuICBwb3NpdGlvbiA9IG1vZGVsPFNpbXBsZVBvc2l0aW9uPignYWJvdmUnLCB7XG4gICAgYWxpYXM6ICdmd1Rvb2x0aXBQb3NpdGlvbicsXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBtYXhpbXVtIHdpZHRoIG9mIHRoZSB0b29sdGlwIGluIHBpeGVsc1xuICAgKi9cbiAgbWF4V2lkdGggPSBtb2RlbDxudW1iZXI+KDIwMCwge1xuICAgIGFsaWFzOiAnZndUb29sdGlwTWF4V2lkdGhQeCcsXG4gIH0pXG5cbiAgLyoqXG4gICAqIGFtb3VudCBvZiBkZWxheSBiZWZvcmUgdGhlIHRvb2x0aXAgZGlzcGxheXNcbiAgICpcbiAgICogbm9uZSAoMG1zKSxcbiAgICogc2hvcnQgKDQwMG1zKSxcbiAgICogbG9uZyAoNzAwbXMpXG4gICAqL1xuICBkZWxheU1zID0gaW5wdXQoNDAwLCB7XG4gICAgdHJhbnNmb3JtOiBkZWxheU5hbWVUb01zLFxuICAgIGFsaWFzOiAnZndUb29sdGlwRGVsYXknLFxuICB9KTtcblxuICAvKipcbiAgICogd2hldGhlciBvciBub3QgdGhlIHRvb2x0aXAgc2hvdWxkIGhhdmUgYSBjYXJldFxuICAgKi9cbiAgZGlzcGxheUNhcmV0ID0gaW5wdXQodHJ1ZSwge1xuICAgIGFsaWFzOiAnZndUb29sdGlwQ2FyZXQnLFxuICB9KTtcblxuXG4gIGVuYWJsZWQgPSBtb2RlbCh0cnVlLCB7XG4gICAgYWxpYXM6ICdmd1Rvb2x0aXBFbmFibGVkJyxcbiAgfSk7XG5cbiAgLyoqKioqIERlcml2ZWQgU3RhdGUgKioqKiovXG5cbiAgY29ubmVjdGVkUG9zaXRpb25zID0gY29tcHV0ZWQ8Q29ubmVjdGVkUG9zaXRpb25bXT4oKCkgPT4ge1xuICAgIC8vIGZhbGJhY2sgcG9zaXRpb25zIGZvciBpZiBpdCBkb2Vzbid0IGZpdCBpbiB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uXG4gICAgLy8gdGVuZCB0b3dhcmRzIGNsb3NlciBmaXJzdCBpLmUuICdhYm92ZScgd2lsbCB0cnkgJ2xlZnQnIGFuZCAncmlnaHQnIGJlZm9yZSByZXNvcnRpbmcgdG8gJ2JlbG93XG4gICAgY29uc3QgcG9zaXRpb25QcmVmZXJlbmNlT3JkZXJNYXAgPSB7XG4gICAgICAnYWJvdmUnOiBbJ2Fib3ZlJywgJ3JpZ2h0JywgJ2xlZnQnLCAnYmVsb3cnXSxcbiAgICAgICdyaWdodCc6IFsncmlnaHQnLCAnYmVsb3cnLCAnYWJvdmUnLCAnbGVmdCddLFxuICAgICAgJ2JlbG93JzogWydiZWxvdycsICdsZWZ0JywgJ3JpZ2h0JywgJ2Fib3ZlJ10sXG4gICAgICAnbGVmdCc6IFsnbGVmdCcsICdhYm92ZScsICdiZWxvdycsICdyaWdodCddLFxuICAgIH1cblxuICAgIGNvbnN0IGZhbGxiYWNrTmFtZWRQb3NpdGlvbnMgPSBwb3NpdGlvblByZWZlcmVuY2VPcmRlck1hcFt0aGlzLnBvc2l0aW9uKCldO1xuICAgIGNvbnN0IGNvbm5lY3RlZFBvc2l0aW9ucyA9IGZhbGxiYWNrTmFtZWRQb3NpdGlvbnMubWFwKG5hbWUgPT4gcG9zaXRpb25NYXBbbmFtZV0pO1xuXG4gICAgcmV0dXJuIGNvbm5lY3RlZFBvc2l0aW9ucztcbiAgfSk7XG5cbiAgcG9zaXRpb25TdHJhdGVneSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBwb3NpdGlvbkJ1aWxkZXIgPSB0aGlzLm92ZXJsYXlTZXJ2aWNlLnBvc2l0aW9uKCk7XG4gICAgY29uc3Qgd2l0aE9yaWdpbiA9IHBvc2l0aW9uQnVpbGRlci5mbGV4aWJsZUNvbm5lY3RlZFRvKHRoaXMuZWxlbWVudFJlZik7XG4gICAgY29uc3QgY29tcGxldGVkU3RyYXRlZ3kgPSB3aXRoT3JpZ2luLndpdGhQb3NpdGlvbnModGhpcy5jb25uZWN0ZWRQb3NpdGlvbnMoKSk7XG4gICAgcmV0dXJuIGNvbXBsZXRlZFN0cmF0ZWd5O1xuICB9KTtcblxuICBvdmVybGF5Q29uZmlnID0gY29tcHV0ZWQ8T3ZlcmxheUNvbmZpZz4oKCkgPT4gKHtcbiAgICBwb3NpdGlvblN0cmF0ZWd5OiB0aGlzLnBvc2l0aW9uU3RyYXRlZ3koKSxcbiAgICBtYXhXaWR0aDogTnVtYmVyKHRoaXMubWF4V2lkdGgoKSksXG4gICAgU2Nyb2xsU3RyYXRlZ3lPcHRpb25zOiB0aGlzLm92ZXJsYXlTZXJ2aWNlLnNjcm9sbFN0cmF0ZWdpZXMuY2xvc2UoKSxcbiAgICBkaXNwb3NlT25OYXZpZ2F0aW9uOiB0cnVlLFxuICB9KSk7XG5cbiAgLyoqKioqIEVmZmVjdHMgYW5kIE1ldGhvZHMgKioqKiovXG5cbiAgYWRkTW91c2VFdmVudExpc3RlbmVycyA9IGVmZmVjdCgoKSA9PiB7XG5cbiAgICBjb25zdCBuYXRpdmVFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICBuYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZW50ZXInLCAoKSA9PiB7XG4gICAgICB0aGlzLnNob3dUb29sdGlwKCk7XG4gICAgfSk7XG5cbiAgICBuYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCAoKSA9PiB7XG4gICAgICB0aGlzLmhpZGVUb29sdGlwKCk7XG4gICAgfSk7XG4gIH0pXG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy50b29sdGlwUG9ydGFsID0gbmV3IENvbXBvbmVudFBvcnRhbChGd1Rvb2x0aXBQYW5lbENvbXBvbmVudCwgdGhpcy52aWV3Q29udGFpbmVyUmVmKTtcblxuICAgIHRoaXMub3ZlcmxheVJlZi5zZXQodGhpcy5vdmVybGF5U2VydmljZS5jcmVhdGUoKSk7XG4gIH1cblxuXG4gIHByaXZhdGUgb3BlbkRlbGF5VGltZXI6IG51bWJlcjtcblxuICBzaG93VG9vbHRpcCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZW5hYmxlZCgpIHx8ICF0aGlzLnRpdGxlKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAgICAgY29uc3Qgb3ZlcmxheVJlZiA9IHRoaXMub3ZlcmxheVJlZigpO1xuICAgIG92ZXJsYXlSZWYudXBkYXRlUG9zaXRpb25TdHJhdGVneSh0aGlzLnBvc2l0aW9uU3RyYXRlZ3koKSk7XG5cbiAgICBpZiAodGhpcy5vcGVuRGVsYXlUaW1lcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMub3BlbkRlbGF5VGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCB0b29sdGlwUmVmID0gb3ZlcmxheVJlZi5hdHRhY2godGhpcy50b29sdGlwUG9ydGFsKTtcbiAgICAgIHRoaXMudG9vbHRpcFJlZi5zZXQodG9vbHRpcFJlZik7XG5cbiAgICAgIHRvb2x0aXBSZWYuc2V0SW5wdXQoJ3RpdGxlJywgdGhpcy50aXRsZSgpKTtcbiAgICAgIHRvb2x0aXBSZWYuc2V0SW5wdXQoJ3Bvc2l0aW9uJywgdGhpcy5wb3NpdGlvbigpKTtcbiAgICAgIHRvb2x0aXBSZWYuc2V0SW5wdXQoJ21heFdpZHRoJywgdGhpcy5tYXhXaWR0aCgpKTtcbiAgICAgIHRvb2x0aXBSZWYuc2V0SW5wdXQoJ2Rpc3BsYXlDYXJldCcsIHRoaXMuZGlzcGxheUNhcmV0KCkpO1xuICAgICAgdG9vbHRpcFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSwgdGhpcy5kZWxheU1zKCkpO1xuICB9XG5cbiAgcG9zaXRpb25DaGFuZ2VTdWI6IFN1YnNjcmlwdGlvbjtcblxuICAvLyB1cGRhdGVzIHRoZSB0b29sdGlwIHBhbmVsJ3MgY2FyZXQgcG9zaXRpb24gaWYgYSBmYWxsYmFjayBwb3NpdGlvbiBpcyB1c2VkXG4gIGhhbmRsZVBvc2l0aW9uQ2hhbmdlID0gZWZmZWN0KCgpID0+IHtcblxuICAgIHRoaXMucG9zaXRpb25DaGFuZ2VTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5wb3NpdGlvbkNoYW5nZVN1YiA9IHRoaXMucG9zaXRpb25TdHJhdGVneSgpLnBvc2l0aW9uQ2hhbmdlcy5zdWJzY3JpYmUocG9zaXRpb25DaGFuZ2UgPT4ge1xuXG4gICAgICBjb25zdCBuZXdQb3NpdGlvbiA9IHBvc2l0aW9uQ2hhbmdlLmNvbm5lY3Rpb25QYWlyO1xuXG4gICAgICBjb25zdCBwb3NpdGlvbk5hbWVzID0gT2JqZWN0LmtleXMocG9zaXRpb25NYXApO1xuICAgICAgY29uc3QgbmV3UG9zaXRpb25OYW1lID0gcG9zaXRpb25OYW1lcy5maW5kKG5hbWUgPT4ge1xuICAgICAgICBjb25zdCBwb3MgPSBwb3NpdGlvbk1hcFtuYW1lXTtcblxuICAgICAgICByZXR1cm4gcG9zLm9yaWdpblggPT09IG5ld1Bvc2l0aW9uLm9yaWdpblggJiZcbiAgICAgICAgcG9zLm9yaWdpblkgPT09IG5ld1Bvc2l0aW9uLm9yaWdpblkgJiZcbiAgICAgICAgcG9zLm92ZXJsYXlYID09PSBuZXdQb3NpdGlvbi5vdmVybGF5WCAmJlxuICAgICAgICBwb3Mub3ZlcmxheVkgPT09IG5ld1Bvc2l0aW9uLm92ZXJsYXlZO1xuICAgICAgfSlcblxuICAgICAgaWYgKG5ld1Bvc2l0aW9uTmFtZSkge1xuICAgICAgICB0aGlzLnRvb2x0aXBSZWYoKS5zZXRJbnB1dCgncG9zaXRpb24nLCBuZXdQb3NpdGlvbk5hbWUpO1xuICAgICAgICB0aGlzLnRvb2x0aXBSZWYoKS5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9XG4gICAgfSlcbiAgfSlcblxuICBoaWRlVG9vbHRpcCgpOiB2b2lkIHtcbiAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMub3BlbkRlbGF5VGltZXIpO1xuICAgIHRoaXMub3BlbkRlbGF5VGltZXIgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5vdmVybGF5UmVmKCkuZGV0YWNoKCk7XG4gICAgdGhpcy50b29sdGlwUmVmLnNldCh1bmRlZmluZWQpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5wb3NpdGlvbkNoYW5nZVN1Yi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuaGlkZVRvb2x0aXAoKTtcbiAgfVxufVxuIl19
@@ -1,6 +1,6 @@
1
1
  import { CdkMenuModule, CdkMenuTrigger } from '@angular/cdk/menu';
2
2
  import { NgClass } from '@angular/common';
3
- import { ChangeDetectorRef, Component, computed, effect, forwardRef, HostListener, inject, input, model, signal, viewChild, viewChildren } from '@angular/core';
3
+ import { ChangeDetectorRef, Component, computed, effect, forwardRef, HostListener, inject, input, model, signal, viewChild, viewChildren, } from '@angular/core';
4
4
  import { toObservable, toSignal } from '@angular/core/rxjs-interop';
5
5
  import { NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';
6
6
  import { map, of, startWith, switchMap, tap } from 'rxjs';
@@ -28,8 +28,10 @@ export class FwTypeaheadComponent {
28
28
  this.changeDetector = inject(ChangeDetectorRef);
29
29
  this.loading = model(false);
30
30
  this.disabled = model(false);
31
- this.onChange = (_) => { };
32
- this.onTouched = () => { };
31
+ this.onChange = (_) => {
32
+ };
33
+ this.onTouched = () => {
34
+ };
33
35
  this.value = model([]);
34
36
  this.optionsInput = input([], { alias: 'options' });
35
37
  this.maxOptionsHeight = input('400px');
@@ -156,12 +158,14 @@ export class FwTypeaheadComponent {
156
158
  const newValue = currentValue.filter(val => val !== chipValue);
157
159
  this.value.set(newValue);
158
160
  this.focusInput();
161
+ // eslint-disable-next-line @rx-angular/no-explicit-change-detection-apis
159
162
  this.changeDetector.detectChanges();
160
163
  }
161
164
  focusInput(e = null) {
162
165
  e?.preventDefault();
163
166
  e?.stopPropagation();
164
167
  e?.stopImmediatePropagation();
168
+ // eslint-disable-next-line @rx-angular/prefer-no-layout-sensitive-apis
165
169
  this.inputRef().nativeElement.focus();
166
170
  }
167
171
  /* eslint-enable */
@@ -229,4 +233,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
229
233
  type: HostListener,
230
234
  args: ['click', ['$event']]
231
235
  }] } });
232
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWFoZWFkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3R5cGVhaGVhZC90eXBlYWhlYWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdHlwZWFoZWFkL3R5cGVhaGVhZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQWMsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1SyxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RixPQUFPLEVBQUUsR0FBRyxFQUFjLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV0RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNqRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdkUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzVFLE9BQU8s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REFDckIsZ0JBQWdCLHFMQUNoQixtQkFBbUIseURBQ25CLE9BQU87OzRGQVlFLG9CQUFvQjtrQkF4QmhDLFNBQVM7K0JBQ0UsY0FBYyxjQUNaLElBQUksV0FDUDt3QkFDUCxpQkFBaUI7d0JBQ2pCLFlBQVk7d0JBQ1osbUJBQW1CO3dCQUNuQixZQUFZO3dCQUNaLGFBQWE7d0JBQ2IscUJBQXFCO3dCQUNyQixnQkFBZ0I7d0JBQ2hCLG1CQUFtQjt3QkFDbkIsT0FBTztxQkFDVixhQUNZO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLHFCQUFxQixDQUFDOzRCQUNuRCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjs4QkFLK0IsWUFBWTtzQkFBM0MsWUFBWTt1QkFBQyxnQkFBZ0I7Z0JBMkJLLE9BQU87c0JBQXpDLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrTWVudU1vZHVsZSwgQ2RrTWVudVRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvbWVudSc7XG5pbXBvcnQgeyBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIGNvbXB1dGVkLCBlZmZlY3QsIEVsZW1lbnRSZWYsIGZvcndhcmRSZWYsIEhvc3RMaXN0ZW5lciwgaW5qZWN0LCBpbnB1dCwgbW9kZWwsIHNpZ25hbCwgdmlld0NoaWxkLCB2aWV3Q2hpbGRyZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvT2JzZXJ2YWJsZSwgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBtYXAsIE9ic2VydmFibGUsIG9mLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IE1lbnVSZWdpc3RlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvbWVudS1yZWdpc3Rlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRndDaGlwTW9kdWxlIH0gZnJvbSAnLi4vY2hpcC9jaGlwLm1vZHVsZSc7XG5pbXBvcnQgeyBGd0NoaXBMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi4vY2hpcC1saXN0L2NoaXAtbGlzdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRndNZW51TW9kdWxlIH0gZnJvbSAnLi4vbWVudS9tZW51Lm1vZHVsZSc7XG5pbXBvcnQgeyBGd01lbnVJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi4vbWVudS9tZW51LWl0ZW0vbWVudS1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGd1Byb2dyZXNzTW9kdWxlIH0gZnJvbSAnLi4vcHJvZ3Jlc3MvcHJvZ3Jlc3MubW9kdWxlJztcbmltcG9ydCB7IEZ3VGV4dElucHV0TW9kdWxlIH0gZnJvbSAnLi4vdGV4dC1pbnB1dC90ZXh0LWlucHV0Lm1vZHVsZSc7XG5cbnR5cGUgT3B0aW9uRmV0Y2hpbmdGbiA9IChzZWFyY2hTdHJpbmc6IHN0cmluZykgPT4gT2JzZXJ2YWJsZTxzdHJpbmdbXT47XG5cbi8qKlxuICogQ29tcG9uZW50IGZvciBoYXZpbmcgYSB1c2VyIHNlbGVjdCBtdWx0aXBsZSB2YWx1ZXMgd2hpbGUgYWxzbyBhbGxvd2luZyBhcmJpdHJhcnkgdmFsdWVzIHRvIGJlIGFkZGVkXG4gKiBAc2VlIFtWaXNpb24gRG9jc10oaHR0cHM6Ly9jZG4uZmx5d2hlZWwuaW8vZG9jcy92aXNpb24vbWFzdGVyLz9wYXRoPS9kb2NzL2Zvcm0tY29udHJvbHMtdHlwZWFoZWFkLS1kb2NzKVxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdmdy10eXBlYWhlYWQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgRndUZXh0SW5wdXRNb2R1bGUsXG4gICAgRndDaGlwTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgRndNZW51TW9kdWxlLFxuICAgIENka01lbnVNb2R1bGUsXG4gICAgTWVudVJlZ2lzdGVyRGlyZWN0aXZlLFxuICAgIEZ3UHJvZ3Jlc3NNb2R1bGUsXG4gICAgRndDaGlwTGlzdENvbXBvbmVudCxcbiAgICBOZ0NsYXNzLFxuXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBGd1R5cGVhaGVhZENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vdHlwZWFoZWFkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3R5cGVhaGVhZC5jb21wb25lbnQuc2NzcycsXG59KVxuZXhwb3J0IGNsYXNzIEZ3VHlwZWFoZWFkQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycpIG91dHNpZGVDbGljaygpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgIHRoaXMudHJpZ2dlcigpLmNsb3NlKCk7XG4gIH1cblxuICB0cmlnZ2VyID0gdmlld0NoaWxkKENka01lbnVUcmlnZ2VyKTtcbiAgY2hhbmdlRGV0ZWN0b3IgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICBsb2FkaW5nID0gbW9kZWwoZmFsc2UpO1xuICBkaXNhYmxlZCA9IG1vZGVsKGZhbHNlKTtcblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkLnNldChpc0Rpc2FibGVkKTtcbiAgfVxuXG4gIHdyaXRlVmFsdWUoaW5jb21pbmdWYWx1ZTogc3RyaW5nW10pOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlLnNldChpbmNvbWluZ1ZhbHVlKTtcbiAgfVxuXG4gIG9uQ2hhbmdlID0gKF86IHN0cmluZ1tdKTogdm9pZCA9PiB7fTtcbiAgcmVnaXN0ZXJPbkNoYW5nZShvbkNoYW5nZUZuKTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IG9uQ2hhbmdlRm47XG4gIH1cbiAgb25Ub3VjaGVkID0gKCk6IHZvaWQgPT4ge307XG4gIHJlZ2lzdGVyT25Ub3VjaGVkKG9uVG91Y2hlZEZuKTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBvblRvdWNoZWRGbjtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSkgb25DbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgfVxuXG4gIHZhbHVlID0gbW9kZWw8c3RyaW5nW10+KFtdKTtcbiAgb3B0aW9uc0lucHV0ID0gaW5wdXQ8c3RyaW5nW10gfCBPcHRpb25GZXRjaGluZ0ZuPihbXSwgeyBhbGlhczogJ29wdGlvbnMnIH0pO1xuXG4gIG1heE9wdGlvbnNIZWlnaHQgPSBpbnB1dCgnNDAwcHgnKTtcbiAgbWluT3B0aW9uc0hlaWdodCA9IGlucHV0KCcwcHgnKTtcbiAgb3B0aW9uc1dpZHRoID0gaW5wdXQoJycpO1xuXG4gIG5vdGlmeU9uVmFsdWVDaGFuZ2VzID0gZWZmZWN0KCgpID0+IHtcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUoKSk7XG4gIH0pXG5cbiAgc2VhcmNoVmFsdWUgPSBtb2RlbCgnJyk7XG4gIHNlYXJjaFZhbHVlQ2hhbmdlcyQgPSB0b09ic2VydmFibGUodGhpcy5zZWFyY2hWYWx1ZSk7XG4gIGhhbmRsZVNlYXJjaENoYW5nZShldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmICh0aGlzLnRyaWdnZXIoKS5jbG9zZWQpIHtcbiAgICAgIHRoaXMudHJpZ2dlcigpLm9wZW4oKTtcbiAgICB9XG4gICAgY29uc3QgdmFsdWUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xuICAgIHRoaXMuc2VhcmNoVmFsdWUuc2V0KHZhbHVlKTtcbiAgfVxuXG4gIGFsbG93TmV3ID0gaW5wdXQodHJ1ZSk7XG4gIHBsYWNlaG9sZGVyID0gaW5wdXQoJ0VudGVyIHRhZ3MuLi4nKTtcblxuICBvcHRpb25zJDogT2JzZXJ2YWJsZTxzdHJpbmdbXT4gPSB0aGlzLnNlYXJjaFZhbHVlQ2hhbmdlcyQucGlwZShcbiAgICBzdGFydFdpdGgoJycpLFxuICAgIHRhcCgoKSA9PiB0aGlzLmxvYWRpbmcuc2V0KHRydWUpKSxcbiAgICBzd2l0Y2hNYXAoc2VhcmNoU3RyaW5nID0+IHtcblxuICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnNJbnB1dCgpID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNvbnN0IGZldGNoaW5nRnVuY3Rpb24gPSB0aGlzLm9wdGlvbnNJbnB1dCgpIGFzIE9wdGlvbkZldGNoaW5nRm47XG4gICAgICAgIHJldHVybiBmZXRjaGluZ0Z1bmN0aW9uKHNlYXJjaFN0cmluZyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpbHRlcmVkU3RhdGljT3B0aW9ucyQgPSBvZih0aGlzLm9wdGlvbnNJbnB1dCgpIGFzIHN0cmluZ1tdKS5waXBlKFxuICAgICAgICBtYXAob3B0aW9ucyA9PiBvcHRpb25zLmZpbHRlcihvcHQgPT4gb3B0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoU3RyaW5nLnRvTG93ZXJDYXNlKCkpKSksXG4gICAgICApO1xuXG4gICAgICByZXR1cm4gZmlsdGVyZWRTdGF0aWNPcHRpb25zJDtcbiAgICB9KSxcbiAgICBtYXAob3B0aW9ucyA9PiB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5maWx0ZXIob3B0aW9uID0+IHtcbiAgICAgICAgY29uc3QgYWxyZWFkeVNlbGVjdGVkID0gdGhpcy52YWx1ZSgpLmZpbmQodmFsID0+IHZhbC50b0xvd2VyQ2FzZSgpID09PSBvcHRpb24udG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIHJldHVybiAhYWxyZWFkeVNlbGVjdGVkO1xuICAgICAgfSlcbiAgICB9KSxcbiAgICB0YXAoKCkgPT4gdGhpcy5sb2FkaW5nLnNldChmYWxzZSkpLFxuICApXG4gIG9wdGlvbnNTaWduYWwgPSB0b1NpZ25hbCh0aGlzLm9wdGlvbnMkKTtcblxuXG4gIGNsb3NlQ2hpcChjaGlwVmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXMudmFsdWUoKTtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IGN1cnJlbnRWYWx1ZS5maWx0ZXIodmFsID0+IHZhbCAhPT0gY2hpcFZhbHVlKTtcbiAgICB0aGlzLnZhbHVlLnNldChuZXdWYWx1ZSk7XG4gICAgdGhpcy5mb2N1c0lucHV0KCk7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBkaXNwbGF5TmV3T3B0aW9uID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy5zZWFyY2hWYWx1ZSgpO1xuXG4gICAgaWYgKCFuZXdWYWx1ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGRpcmVjdE1hdGNoID0gdGhpcy5vcHRpb25zU2lnbmFsKCk/LmluY2x1ZGVzPy4obmV3VmFsdWUpO1xuICAgIGNvbnN0IGxvYWRpbmcgPSB0aGlzLmxvYWRpbmcoKTtcbiAgICBjb25zdCBhbHJlYWR5U2VsZWN0ZWQgPSBCb29sZWFuKHRoaXMudmFsdWUoKS5maW5kKHZhbCA9PiB2YWwudG9Mb3dlckNhc2UoKSA9PT0gbmV3VmFsdWUudG9Mb3dlckNhc2UoKSkpO1xuXG5cbiAgICByZXR1cm4gdGhpcy5hbGxvd05ldygpICYmICFhbHJlYWR5U2VsZWN0ZWQgJiYgKCFkaXJlY3RNYXRjaCB8fCBsb2FkaW5nKTtcbiAgfSlcblxuICBhZGRWYWx1ZSA9IChuZXdWYWx1ZTogc3RyaW5nKTogdm9pZCA9PiB7XG4gICAgdGhpcy52YWx1ZS51cGRhdGUocHJldlZhbHVlID0+IFtcbiAgICAgIC4uLnByZXZWYWx1ZSB8fCBbXSxcbiAgICAgIG5ld1ZhbHVlLFxuICAgIF0pXG4gIH1cblxuICBoYW5kbGVPcHRpb25DbGljayA9IChvcHRpb25WYWx1ZSk6IHZvaWQgPT4ge1xuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgdGhpcy5hZGRWYWx1ZShvcHRpb25WYWx1ZSk7XG4gICAgdGhpcy5mb2N1c0lucHV0KCk7XG4gICAgdGhpcy5zZWFyY2hWYWx1ZS5zZXQoJycpO1xuICB9XG5cbiAgcmVzZXRGb2N1c09uT3B0aW9uc0NoYW5nZSA9IGVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHRoaXMuZGlzcGxheWVkT3B0aW9ucygpIHx8IHRoaXMuc2VhcmNoVmFsdWUoKSkge1xuICAgICAgdGhpcy5mb2N1c2VkSW5kZXguc2V0KDApO1xuICAgIH1cbiAgfSwgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9KVxuXG4gIGRpc3BsYXllZE9wdGlvbnMgPSB2aWV3Q2hpbGRyZW4oRndNZW51SXRlbUNvbXBvbmVudCk7XG4gIGZvY3VzZWRJbmRleCA9IHNpZ25hbCgwKTtcbiAgZm9jdXNlZE9wdGlvbiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5kaXNwbGF5ZWRPcHRpb25zKCk7XG4gICAgY29uc3QgZm9jdXNlZCA9IHRoaXMuZm9jdXNlZEluZGV4KCk7XG5cbiAgICBjb25zdCBvbmx5T25lID0gb3B0aW9ucy5sZW5ndGggPT09IDE7XG4gICAgcmV0dXJuIG9ubHlPbmUgPyB0aGlzLnNlYXJjaFZhbHVlKCkgOiBvcHRpb25zW2ZvY3VzZWRdPy52YWx1ZTtcbiAgfSlcblxuICBpbnB1dFJlZiA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+PignaW5wdXQnKTtcbiAgZm9jdXNJbnB1dChlOiBNb3VzZUV2ZW50ID0gbnVsbCk6IHZvaWQge1xuICAgIGU/LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZT8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZT8uc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5pbnB1dFJlZigpLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgfVxuXG4gIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvbiAqL1xuICBrZXlIYW5kbGVyTWFwOiB7IFtrZXljb2RlOiBzdHJpbmddOiAoZTogS2V5Ym9hcmRFdmVudCkgPT4gdm9pZCB9ID0ge1xuICAgICdFbnRlcic6ICgpID0+IHtcbiAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMuZm9jdXNlZE9wdGlvbigpIHx8IHRoaXMuc2VhcmNoVmFsdWUoKTtcbiAgICAgIGNvbnN0IGR1cGxpY2F0ZSA9IHRoaXMudmFsdWUoKS5maW5kKHZhbCA9PiB2YWwudG9Mb3dlckNhc2UoKSA9PT0gbmV3VmFsdWUudG9Mb3dlckNhc2UoKSk7XG5cbiAgICAgIGlmICghbmV3VmFsdWUgfHwgZHVwbGljYXRlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5hZGRWYWx1ZShuZXdWYWx1ZSk7XG4gICAgICB0aGlzLnNlYXJjaFZhbHVlLnNldCgnJyk7XG4gICAgfSxcbiAgICAnQXJyb3dEb3duJzogKCkgPT4ge1xuICAgICAgdGhpcy5tb3ZlRm9jdXNlZCgnZG93bicpO1xuICAgIH0sXG4gICAgJ0Fycm93VXAnOiAoKSA9PiB7XG4gICAgICB0aGlzLm1vdmVGb2N1c2VkKCd1cCcpO1xuICAgIH0sXG4gICAgJ0JhY2tzcGFjZSc6ICgpID0+IHtcbiAgICAgIGNvbnN0IHNlYXJjaElzRW1wdHkgPSAhdGhpcy5zZWFyY2hWYWx1ZSgpOyAvLyBhbnkgZmFsc3kgdmFsdWUgaXMgZW1wdHlcbiAgICAgIGlmIChzZWFyY2hJc0VtcHR5ICYmIHRoaXMudmFsdWUoKT8ubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmNsb3NlQ2hpcCh0aGlzLnZhbHVlKClbdGhpcy52YWx1ZSgpLmxlbmd0aCAtIDFdKVxuICAgICAgfVxuICAgICAgcmV0dXJuICFzZWFyY2hJc0VtcHR5O1xuICAgIH0sXG4gICAgJ1RhYic6ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLnRyaWdnZXIoKS5pc09wZW4pIHtcbiAgICAgICAgdGhpcy50cmlnZ2VyKCkuY2xvc2UoKTtcbiAgICAgIH1cbiAgICB9LFxuICB9XG4gIC8qIGVzbGludC1lbmFibGUgKi9cblxuICBoYW5kbGVLZXkoZTogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzLmtleUhhbmRsZXJNYXBbZS5rZXldO1xuICAgIGhhbmRsZXI/LihlKTtcbiAgfVxuXG4gIHNldEZvY3VzQnlWYWx1ZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZGlzcGxheWVkT3B0aW9ucygpO1xuICAgIGNvbnN0IGZvdW5kSW5kZXggPSBvcHRpb25zLmZpbmRJbmRleChvcHQgPT4gb3B0LnZhbHVlID09PSB2YWx1ZSk7XG4gICAgY29uc3QgZmluYWxJbmRleCA9IGZvdW5kSW5kZXggPT09IC0xID8gMCA6IGZvdW5kSW5kZXg7XG4gICAgdGhpcy5mb2N1c2VkSW5kZXguc2V0KGZpbmFsSW5kZXgpO1xuICB9XG5cbiAgcHJpdmF0ZSBtb3ZlRm9jdXNlZChkaXJlY3Rpb246ICd1cCcgfCAnZG93bicpOiB2b2lkIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5kaXNwbGF5ZWRPcHRpb25zKCk7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmZvY3VzZWRJbmRleCgpO1xuXG4gICAgY29uc3QgY2xhbXBJbmRleCA9IChuOiBudW1iZXIpOiBudW1iZXIgPT4ge1xuICAgICAgaWYgKG4gPCAwKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChuID49IG9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbjtcbiAgICB9XG5cbiAgICBjb25zdCBpbmRleENoYW5nZSA9IGRpcmVjdGlvbiA9PT0gJ3VwJyA/IC0xIDogMTtcblxuICAgIGNvbnN0IG5ld0luZGV4ID0gY2xhbXBJbmRleChpbmRleCArIGluZGV4Q2hhbmdlKTtcbiAgICB0aGlzLmZvY3VzZWRJbmRleC5zZXQobmV3SW5kZXgpO1xuXG4gICAgY29uc3QgbmV3bHlGb2N1c2VkID0gdGhpcy5kaXNwbGF5ZWRPcHRpb25zKClbdGhpcy5mb2N1c2VkSW5kZXgoKV07XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHJ4LWFuZ3VsYXIvcHJlZmVyLW5vLWxheW91dC1zZW5zaXRpdmUtYXBpc1xuICAgIG5ld2x5Rm9jdXNlZC5zY3JvbGxJbnRvVmlldygpO1xuICB9XG5cbn1cbiIsIjxkaXZcbiAgKGNsaWNrKT1cImZvY3VzSW5wdXQoJGV2ZW50KVwiXG4gIGNsYXNzPVwiaW5wdXQtY29udGFpbmVyXCJcbiAgW25nQ2xhc3NdPVwieyAnZGlzYWJsZWQnOiBkaXNhYmxlZCgpIH1cIlxuICBbY2RrTWVudVRyaWdnZXJGb3JdPVwibWVudUNvbnRlbnRcIlxuICBmd01lbnVSZWdpc3RlclxuICAjaW5wdXRDb250YWluZXI+XG4gIDxmdy1jaGlwLWxpc3QgY2xhc3M9XCJjaGlwc1wiPlxuICAgIEBmb3IodmFsIG9mIHZhbHVlKCk7IHRyYWNrIHZhbCkge1xuICAgICAgPGZ3LWNoaXBcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgW3Nob3dDbG9zZV09XCJ0cnVlXCJcbiAgICAgICAgW3RpdGxlXT1cInZhbFwiXG4gICAgICAgIFtzZWxlY3RhYmxlXT1cImZhbHNlXCJcbiAgICAgICAgKGNsb3NlKT1cImNsb3NlQ2hpcCh2YWwpXCJcbiAgICAgIC8+XG4gICAgfVxuICA8L2Z3LWNoaXAtbGlzdD5cbiAgPGlucHV0XG4gICAgdGVzdC1pZD1cInR5cGVhaGVhZC1pbnB1dFwiXG4gICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyKClcIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCgpXCJcbiAgICBbdmFsdWVdPVwic2VhcmNoVmFsdWUoKVwiXG4gICAgKGtleXVwKT1cImhhbmRsZVNlYXJjaENoYW5nZSgkZXZlbnQpXCJcbiAgICAoa2V5ZG93bik9XCJoYW5kbGVLZXkoJGV2ZW50KVwiXG4gICAgI2lucHV0XG4gICAgdHlwZT1cInRleHRcIlxuICAvPlxuICBAaWYobG9hZGluZygpKSB7XG4gICAgPGZ3LXByb2dyZXNzLXNwaW5uZXIgc2l6ZT1cInNtYWxsXCIvPlxuICB9XG48L2Rpdj5cbjxuZy10ZW1wbGF0ZSAjbWVudUNvbnRlbnQ+XG4gICAgPGZ3LW1lbnUtY29udGFpbmVyXG4gICAgICBbbWF4SGVpZ2h0XT1cIm1heE9wdGlvbnNIZWlnaHQoKVwiXG4gICAgICBbbWluSGVpZ2h0XT1cIm1pbk9wdGlvbnNIZWlnaHQoKVwiXG4gICAgICBbd2lkdGhdPVwib3B0aW9uc1dpZHRoKCkgfHwgaW5wdXRDb250YWluZXIub2Zmc2V0V2lkdGggLSAyICsgJ3B4J1wiXG4gICAgPlxuICAgICAgPGZ3LW1lbnU+XG4gICAgICAgIEBpZihsb2FkaW5nKCkgJiYgIWRpc3BsYXlOZXdPcHRpb24oKSkge1xuICAgICAgICAgIDxmdy1tZW51LWl0ZW0gdGl0bGU9XCJTZWFyY2hpbmcuLi5cIiBbZGlzYWJsZWRdPVwidHJ1ZVwiLz5cbiAgICAgICAgfSBAZWxzZSBpZighbG9hZGluZygpKSB7XG4gICAgICAgICAgQGZvciAob3B0aW9uIG9mIG9wdGlvbnNTaWduYWwoKTsgdHJhY2sgb3B0aW9uKSB7XG4gICAgICAgICAgICA8ZnctbWVudS1pdGVtXG4gICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVPcHRpb25DbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwic2V0Rm9jdXNCeVZhbHVlKG9wdGlvbilcIlxuICAgICAgICAgICAgICBbdGl0bGVdPVwib3B0aW9uXCJcbiAgICAgICAgICAgICAgW2ZvY3VzZWRdPVwiZm9jdXNlZE9wdGlvbigpID09PSBvcHRpb25cIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwib3B0aW9uXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBlbXB0eSB7XG4gICAgICAgICAgICBAaWYgKCFkaXNwbGF5TmV3T3B0aW9uKCkpIHtcbiAgICAgICAgICAgICAgPGZ3LW1lbnUtaXRlbSB0aXRsZT1cIk5vIHRhZyBzdWdnZXN0aW9uc1wiIFtkaXNhYmxlZF09XCJ0cnVlXCIvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBAaWYoZGlzcGxheU5ld09wdGlvbigpKSB7XG4gICAgICAgICAgPGZ3LW1lbnUtaXRlbVxuICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZU9wdGlvbkNsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwic2V0Rm9jdXNCeVZhbHVlKHNlYXJjaFZhbHVlKCkpXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCJzZWFyY2hWYWx1ZSgpXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJzZWFyY2hWYWx1ZSgpXCJcbiAgICAgICAgICAgIFtmb2N1c2VkXT1cImZvY3VzZWRPcHRpb24oKSA9PT0gc2VhcmNoVmFsdWUoKVwiPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJuZXctdGFnXCI+TmV3PC9wPlxuICAgICAgICAgIDwvZnctbWVudS1pdGVtPlxuICAgICAgICB9XG4gICAgICA8L2Z3LW1lbnU+XG4gICAgPC9mdy1tZW51LWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
236
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWFoZWFkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3R5cGVhaGVhZC90eXBlYWhlYWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdHlwZWFoZWFkL3R5cGVhaGVhZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsTUFBTSxFQUVOLFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUYsT0FBTyxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDakYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM1RSxPQUFP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WSwrM0JBQ1osYUFBYSxzUUFDYixxQkFBcUIsNERBQ3JCLGdCQUFnQixxTEFDaEIsbUJBQW1CLHlEQUNuQixPQUFPOzs0RkFZRSxvQkFBb0I7a0JBeEJoQyxTQUFTOytCQUNFLGNBQWMsY0FDWixJQUFJLFdBQ1A7d0JBQ1AsaUJBQWlCO3dCQUNqQixZQUFZO3dCQUNaLG1CQUFtQjt3QkFDbkIsWUFBWTt3QkFDWixhQUFhO3dCQUNiLHFCQUFxQjt3QkFDckIsZ0JBQWdCO3dCQUNoQixtQkFBbUI7d0JBQ25CLE9BQU87cUJBQ1IsYUFDVTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxxQkFBcUIsQ0FBQzs0QkFDbkQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7OEJBSytCLFlBQVk7c0JBQTNDLFlBQVk7dUJBQUMsZ0JBQWdCO2dCQWdDSyxPQUFPO3NCQUF6QyxZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENka01lbnVNb2R1bGUsIENka01lbnVUcmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL21lbnUnO1xuaW1wb3J0IHsgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgZWZmZWN0LFxuICBFbGVtZW50UmVmLFxuICBmb3J3YXJkUmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIG1vZGVsLFxuICBzaWduYWwsXG4gIHZpZXdDaGlsZCxcbiAgdmlld0NoaWxkcmVuLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvT2JzZXJ2YWJsZSwgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBtYXAsIE9ic2VydmFibGUsIG9mLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IE1lbnVSZWdpc3RlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvbWVudS1yZWdpc3Rlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRndDaGlwTW9kdWxlIH0gZnJvbSAnLi4vY2hpcC9jaGlwLm1vZHVsZSc7XG5pbXBvcnQgeyBGd0NoaXBMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi4vY2hpcC1saXN0L2NoaXAtbGlzdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRndNZW51TW9kdWxlIH0gZnJvbSAnLi4vbWVudS9tZW51Lm1vZHVsZSc7XG5pbXBvcnQgeyBGd01lbnVJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi4vbWVudS9tZW51LWl0ZW0vbWVudS1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGd1Byb2dyZXNzTW9kdWxlIH0gZnJvbSAnLi4vcHJvZ3Jlc3MvcHJvZ3Jlc3MubW9kdWxlJztcbmltcG9ydCB7IEZ3VGV4dElucHV0TW9kdWxlIH0gZnJvbSAnLi4vdGV4dC1pbnB1dC90ZXh0LWlucHV0Lm1vZHVsZSc7XG5cbnR5cGUgT3B0aW9uRmV0Y2hpbmdGbiA9IChzZWFyY2hTdHJpbmc6IHN0cmluZykgPT4gT2JzZXJ2YWJsZTxzdHJpbmdbXT47XG5cbi8qKlxuICogQ29tcG9uZW50IGZvciBoYXZpbmcgYSB1c2VyIHNlbGVjdCBtdWx0aXBsZSB2YWx1ZXMgd2hpbGUgYWxzbyBhbGxvd2luZyBhcmJpdHJhcnkgdmFsdWVzIHRvIGJlIGFkZGVkXG4gKiBAc2VlIFtWaXNpb24gRG9jc10oaHR0cHM6Ly9jZG4uZmx5d2hlZWwuaW8vZG9jcy92aXNpb24vbWFzdGVyLz9wYXRoPS9kb2NzL2Zvcm0tY29udHJvbHMtdHlwZWFoZWFkLS1kb2NzKVxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdmdy10eXBlYWhlYWQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgRndUZXh0SW5wdXRNb2R1bGUsXG4gICAgRndDaGlwTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgRndNZW51TW9kdWxlLFxuICAgIENka01lbnVNb2R1bGUsXG4gICAgTWVudVJlZ2lzdGVyRGlyZWN0aXZlLFxuICAgIEZ3UHJvZ3Jlc3NNb2R1bGUsXG4gICAgRndDaGlwTGlzdENvbXBvbmVudCxcbiAgICBOZ0NsYXNzLFxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEZ3VHlwZWFoZWFkQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi90eXBlYWhlYWQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vdHlwZWFoZWFkLmNvbXBvbmVudC5zY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgRndUeXBlYWhlYWRDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJykgb3V0c2lkZUNsaWNrKCk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgdGhpcy50cmlnZ2VyKCkuY2xvc2UoKTtcbiAgfVxuXG4gIHRyaWdnZXIgPSB2aWV3Q2hpbGQoQ2RrTWVudVRyaWdnZXIpO1xuICBjaGFuZ2VEZXRlY3RvciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gIGxvYWRpbmcgPSBtb2RlbChmYWxzZSk7XG4gIGRpc2FibGVkID0gbW9kZWwoZmFsc2UpO1xuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQuc2V0KGlzRGlzYWJsZWQpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZShpbmNvbWluZ1ZhbHVlOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUuc2V0KGluY29taW5nVmFsdWUpO1xuICB9XG5cbiAgb25DaGFuZ2UgPSAoXzogc3RyaW5nW10pOiB2b2lkID0+IHtcbiAgfTtcblxuICByZWdpc3Rlck9uQ2hhbmdlKG9uQ2hhbmdlRm4pOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gb25DaGFuZ2VGbjtcbiAgfVxuXG4gIG9uVG91Y2hlZCA9ICgpOiB2b2lkID0+IHtcbiAgfTtcblxuICByZWdpc3Rlck9uVG91Y2hlZChvblRvdWNoZWRGbik6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gb25Ub3VjaGVkRm47XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pIG9uQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgdmFsdWUgPSBtb2RlbDxzdHJpbmdbXT4oW10pO1xuICBvcHRpb25zSW5wdXQgPSBpbnB1dDxzdHJpbmdbXSB8IE9wdGlvbkZldGNoaW5nRm4+KFtdLCB7IGFsaWFzOiAnb3B0aW9ucycgfSk7XG5cbiAgbWF4T3B0aW9uc0hlaWdodCA9IGlucHV0KCc0MDBweCcpO1xuICBtaW5PcHRpb25zSGVpZ2h0ID0gaW5wdXQoJzBweCcpO1xuICBvcHRpb25zV2lkdGggPSBpbnB1dCgnJyk7XG5cbiAgbm90aWZ5T25WYWx1ZUNoYW5nZXMgPSBlZmZlY3QoKCkgPT4ge1xuICAgIHRoaXMub25DaGFuZ2UodGhpcy52YWx1ZSgpKTtcbiAgfSk7XG5cbiAgc2VhcmNoVmFsdWUgPSBtb2RlbCgnJyk7XG4gIHNlYXJjaFZhbHVlQ2hhbmdlcyQgPSB0b09ic2VydmFibGUodGhpcy5zZWFyY2hWYWx1ZSk7XG5cbiAgaGFuZGxlU2VhcmNoQ2hhbmdlKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMudHJpZ2dlcigpLmNsb3NlZCkge1xuICAgICAgdGhpcy50cmlnZ2VyKCkub3BlbigpO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZSA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG4gICAgdGhpcy5zZWFyY2hWYWx1ZS5zZXQodmFsdWUpO1xuICB9XG5cbiAgYWxsb3dOZXcgPSBpbnB1dCh0cnVlKTtcbiAgcGxhY2Vob2xkZXIgPSBpbnB1dCgnRW50ZXIgdGFncy4uLicpO1xuXG4gIG9wdGlvbnMkOiBPYnNlcnZhYmxlPHN0cmluZ1tdPiA9IHRoaXMuc2VhcmNoVmFsdWVDaGFuZ2VzJC5waXBlKFxuICAgIHN0YXJ0V2l0aCgnJyksXG4gICAgdGFwKCgpID0+IHRoaXMubG9hZGluZy5zZXQodHJ1ZSkpLFxuICAgIHN3aXRjaE1hcChzZWFyY2hTdHJpbmcgPT4ge1xuXG4gICAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9uc0lucHV0KCkgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29uc3QgZmV0Y2hpbmdGdW5jdGlvbiA9IHRoaXMub3B0aW9uc0lucHV0KCkgYXMgT3B0aW9uRmV0Y2hpbmdGbjtcbiAgICAgICAgcmV0dXJuIGZldGNoaW5nRnVuY3Rpb24oc2VhcmNoU3RyaW5nKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmlsdGVyZWRTdGF0aWNPcHRpb25zJCA9IG9mKHRoaXMub3B0aW9uc0lucHV0KCkgYXMgc3RyaW5nW10pLnBpcGUoXG4gICAgICAgIG1hcChvcHRpb25zID0+IG9wdGlvbnMuZmlsdGVyKG9wdCA9PiBvcHQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hTdHJpbmcudG9Mb3dlckNhc2UoKSkpKSxcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBmaWx0ZXJlZFN0YXRpY09wdGlvbnMkO1xuICAgIH0pLFxuICAgIG1hcChvcHRpb25zID0+IHtcbiAgICAgIHJldHVybiBvcHRpb25zLmZpbHRlcihvcHRpb24gPT4ge1xuICAgICAgICBjb25zdCBhbHJlYWR5U2VsZWN0ZWQgPSB0aGlzLnZhbHVlKCkuZmluZCh2YWwgPT4gdmFsLnRvTG93ZXJDYXNlKCkgPT09IG9wdGlvbi50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgcmV0dXJuICFhbHJlYWR5U2VsZWN0ZWQ7XG4gICAgICB9KTtcbiAgICB9KSxcbiAgICB0YXAoKCkgPT4gdGhpcy5sb2FkaW5nLnNldChmYWxzZSkpLFxuICApO1xuICBvcHRpb25zU2lnbmFsID0gdG9TaWduYWwodGhpcy5vcHRpb25zJCk7XG5cblxuICBjbG9zZUNoaXAoY2hpcFZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB0aGlzLnZhbHVlKCk7XG4gICAgY29uc3QgbmV3VmFsdWUgPSBjdXJyZW50VmFsdWUuZmlsdGVyKHZhbCA9PiB2YWwgIT09IGNoaXBWYWx1ZSk7XG4gICAgdGhpcy52YWx1ZS5zZXQobmV3VmFsdWUpO1xuICAgIHRoaXMuZm9jdXNJbnB1dCgpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAcngtYW5ndWxhci9uby1leHBsaWNpdC1jaGFuZ2UtZGV0ZWN0aW9uLWFwaXNcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGRpc3BsYXlOZXdPcHRpb24gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLnNlYXJjaFZhbHVlKCk7XG5cbiAgICBpZiAoIW5ld1ZhbHVlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgZGlyZWN0TWF0Y2ggPSB0aGlzLm9wdGlvbnNTaWduYWwoKT8uaW5jbHVkZXM/LihuZXdWYWx1ZSk7XG4gICAgY29uc3QgbG9hZGluZyA9IHRoaXMubG9hZGluZygpO1xuICAgIGNvbnN0IGFscmVhZHlTZWxlY3RlZCA9IEJvb2xlYW4odGhpcy52YWx1ZSgpLmZpbmQodmFsID0+IHZhbC50b0xvd2VyQ2FzZSgpID09PSBuZXdWYWx1ZS50b0xvd2VyQ2FzZSgpKSk7XG5cblxuICAgIHJldHVybiB0aGlzLmFsbG93TmV3KCkgJiYgIWFscmVhZHlTZWxlY3RlZCAmJiAoIWRpcmVjdE1hdGNoIHx8IGxvYWRpbmcpO1xuICB9KTtcblxuICBhZGRWYWx1ZSA9IChuZXdWYWx1ZTogc3RyaW5nKTogdm9pZCA9PiB7XG4gICAgdGhpcy52YWx1ZS51cGRhdGUocHJldlZhbHVlID0+IFtcbiAgICAgIC4uLnByZXZWYWx1ZSB8fCBbXSxcbiAgICAgIG5ld1ZhbHVlLFxuICAgIF0pO1xuICB9O1xuXG4gIGhhbmRsZU9wdGlvbkNsaWNrID0gKG9wdGlvblZhbHVlKTogdm9pZCA9PiB7XG4gICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICB0aGlzLmFkZFZhbHVlKG9wdGlvblZhbHVlKTtcbiAgICB0aGlzLmZvY3VzSW5wdXQoKTtcbiAgICB0aGlzLnNlYXJjaFZhbHVlLnNldCgnJyk7XG4gIH07XG5cbiAgcmVzZXRGb2N1c09uT3B0aW9uc0NoYW5nZSA9IGVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHRoaXMuZGlzcGxheWVkT3B0aW9ucygpIHx8IHRoaXMuc2VhcmNoVmFsdWUoKSkge1xuICAgICAgdGhpcy5mb2N1c2VkSW5kZXguc2V0KDApO1xuICAgIH1cbiAgfSwgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9KTtcblxuICBkaXNwbGF5ZWRPcHRpb25zID0gdmlld0NoaWxkcmVuKEZ3TWVudUl0ZW1Db21wb25lbnQpO1xuICBmb2N1c2VkSW5kZXggPSBzaWduYWwoMCk7XG4gIGZvY3VzZWRPcHRpb24gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZGlzcGxheWVkT3B0aW9ucygpO1xuICAgIGNvbnN0IGZvY3VzZWQgPSB0aGlzLmZvY3VzZWRJbmRleCgpO1xuXG4gICAgY29uc3Qgb25seU9uZSA9IG9wdGlvbnMubGVuZ3RoID09PSAxO1xuICAgIHJldHVybiBvbmx5T25lID8gdGhpcy5zZWFyY2hWYWx1ZSgpIDogb3B0aW9uc1tmb2N1c2VkXT8udmFsdWU7XG4gIH0pO1xuXG4gIGlucHV0UmVmID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD4+KCdpbnB1dCcpO1xuXG4gIGZvY3VzSW5wdXQoZTogTW91c2VFdmVudCA9IG51bGwpOiB2b2lkIHtcbiAgICBlPy5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGU/LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGU/LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAcngtYW5ndWxhci9wcmVmZXItbm8tbGF5b3V0LXNlbnNpdGl2ZS1hcGlzXG4gICAgdGhpcy5pbnB1dFJlZigpLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgfVxuXG4gIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvbiAqL1xuICBrZXlIYW5kbGVyTWFwOiB7IFtrZXljb2RlOiBzdHJpbmddOiAoZTogS2V5Ym9hcmRFdmVudCkgPT4gdm9pZCB9ID0ge1xuICAgICdFbnRlcic6ICgpID0+IHtcbiAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMuZm9jdXNlZE9wdGlvbigpIHx8IHRoaXMuc2VhcmNoVmFsdWUoKTtcbiAgICAgIGNvbnN0IGR1cGxpY2F0ZSA9IHRoaXMudmFsdWUoKS5maW5kKHZhbCA9PiB2YWwudG9Mb3dlckNhc2UoKSA9PT0gbmV3VmFsdWUudG9Mb3dlckNhc2UoKSk7XG5cbiAgICAgIGlmICghbmV3VmFsdWUgfHwgZHVwbGljYXRlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5hZGRWYWx1ZShuZXdWYWx1ZSk7XG4gICAgICB0aGlzLnNlYXJjaFZhbHVlLnNldCgnJyk7XG4gICAgfSxcbiAgICAnQXJyb3dEb3duJzogKCkgPT4ge1xuICAgICAgdGhpcy5tb3ZlRm9jdXNlZCgnZG93bicpO1xuICAgIH0sXG4gICAgJ0Fycm93VXAnOiAoKSA9PiB7XG4gICAgICB0aGlzLm1vdmVGb2N1c2VkKCd1cCcpO1xuICAgIH0sXG4gICAgJ0JhY2tzcGFjZSc6ICgpID0+IHtcbiAgICAgIGNvbnN0IHNlYXJjaElzRW1wdHkgPSAhdGhpcy5zZWFyY2hWYWx1ZSgpOyAvLyBhbnkgZmFsc3kgdmFsdWUgaXMgZW1wdHlcbiAgICAgIGlmIChzZWFyY2hJc0VtcHR5ICYmIHRoaXMudmFsdWUoKT8ubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmNsb3NlQ2hpcCh0aGlzLnZhbHVlKClbdGhpcy52YWx1ZSgpLmxlbmd0aCAtIDFdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAhc2VhcmNoSXNFbXB0eTtcbiAgICB9LFxuICAgICdUYWInOiAoKSA9PiB7XG4gICAgICBpZiAodGhpcy50cmlnZ2VyKCkuaXNPcGVuKSB7XG4gICAgICAgIHRoaXMudHJpZ2dlcigpLmNsb3NlKCk7XG4gICAgICB9XG4gICAgfSxcbiAgfTtcblxuICAvKiBlc2xpbnQtZW5hYmxlICovXG5cbiAgaGFuZGxlS2V5KGU6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBoYW5kbGVyID0gdGhpcy5rZXlIYW5kbGVyTWFwW2Uua2V5XTtcbiAgICBoYW5kbGVyPy4oZSk7XG4gIH1cblxuICBzZXRGb2N1c0J5VmFsdWUodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmRpc3BsYXllZE9wdGlvbnMoKTtcbiAgICBjb25zdCBmb3VuZEluZGV4ID0gb3B0aW9ucy5maW5kSW5kZXgob3B0ID0+IG9wdC52YWx1ZSA9PT0gdmFsdWUpO1xuICAgIGNvbnN0IGZpbmFsSW5kZXggPSBmb3VuZEluZGV4ID09PSAtMSA/IDAgOiBmb3VuZEluZGV4O1xuICAgIHRoaXMuZm9jdXNlZEluZGV4LnNldChmaW5hbEluZGV4KTtcbiAgfVxuXG4gIHByaXZhdGUgbW92ZUZvY3VzZWQoZGlyZWN0aW9uOiAndXAnIHwgJ2Rvd24nKTogdm9pZCB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZGlzcGxheWVkT3B0aW9ucygpO1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5mb2N1c2VkSW5kZXgoKTtcblxuICAgIGNvbnN0IGNsYW1wSW5kZXggPSAobjogbnVtYmVyKTogbnVtYmVyID0+IHtcbiAgICAgIGlmIChuIDwgMCkge1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5sZW5ndGggLSAxO1xuICAgICAgfSBlbHNlIGlmIChuID49IG9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbjtcbiAgICB9O1xuXG4gICAgY29uc3QgaW5kZXhDaGFuZ2UgPSBkaXJlY3Rpb24gPT09ICd1cCcgPyAtMSA6IDE7XG5cbiAgICBjb25zdCBuZXdJbmRleCA9IGNsYW1wSW5kZXgoaW5kZXggKyBpbmRleENoYW5nZSk7XG4gICAgdGhpcy5mb2N1c2VkSW5kZXguc2V0KG5ld0luZGV4KTtcblxuICAgIGNvbnN0IG5ld2x5Rm9jdXNlZCA9IHRoaXMuZGlzcGxheWVkT3B0aW9ucygpW3RoaXMuZm9jdXNlZEluZGV4KCldO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEByeC1hbmd1bGFyL3ByZWZlci1uby1sYXlvdXQtc2Vuc2l0aXZlLWFwaXNcbiAgICBuZXdseUZvY3VzZWQuc2Nyb2xsSW50b1ZpZXcoKTtcbiAgfVxuXG59XG4iLCI8ZGl2XG4gIChjbGljayk9XCJmb2N1c0lucHV0KCRldmVudClcIlxuICBjbGFzcz1cImlucHV0LWNvbnRhaW5lclwiXG4gIFtuZ0NsYXNzXT1cInsgJ2Rpc2FibGVkJzogZGlzYWJsZWQoKSB9XCJcbiAgW2Nka01lbnVUcmlnZ2VyRm9yXT1cIm1lbnVDb250ZW50XCJcbiAgZndNZW51UmVnaXN0ZXJcbiAgI2lucHV0Q29udGFpbmVyPlxuICA8ZnctY2hpcC1saXN0IGNsYXNzPVwiY2hpcHNcIj5cbiAgICBAZm9yKHZhbCBvZiB2YWx1ZSgpOyB0cmFjayB2YWwpIHtcbiAgICAgIDxmdy1jaGlwXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgIFtzaG93Q2xvc2VdPVwidHJ1ZVwiXG4gICAgICAgIFt0aXRsZV09XCJ2YWxcIlxuICAgICAgICBbc2VsZWN0YWJsZV09XCJmYWxzZVwiXG4gICAgICAgIChjbG9zZSk9XCJjbG9zZUNoaXAodmFsKVwiXG4gICAgICAvPlxuICAgIH1cbiAgPC9mdy1jaGlwLWxpc3Q+XG4gIDxpbnB1dFxuICAgIHRlc3QtaWQ9XCJ0eXBlYWhlYWQtaW5wdXRcIlxuICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlcigpXCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQoKVwiXG4gICAgW3ZhbHVlXT1cInNlYXJjaFZhbHVlKClcIlxuICAgIChrZXl1cCk9XCJoYW5kbGVTZWFyY2hDaGFuZ2UoJGV2ZW50KVwiXG4gICAgKGtleWRvd24pPVwiaGFuZGxlS2V5KCRldmVudClcIlxuICAgICNpbnB1dFxuICAgIHR5cGU9XCJ0ZXh0XCJcbiAgLz5cbiAgQGlmKGxvYWRpbmcoKSkge1xuICAgIDxmdy1wcm9ncmVzcy1zcGlubmVyIHNpemU9XCJzbWFsbFwiLz5cbiAgfVxuPC9kaXY+XG48bmctdGVtcGxhdGUgI21lbnVDb250ZW50PlxuICAgIDxmdy1tZW51LWNvbnRhaW5lclxuICAgICAgW21heEhlaWdodF09XCJtYXhPcHRpb25zSGVpZ2h0KClcIlxuICAgICAgW21pbkhlaWdodF09XCJtaW5PcHRpb25zSGVpZ2h0KClcIlxuICAgICAgW3dpZHRoXT1cIm9wdGlvbnNXaWR0aCgpIHx8IGlucHV0Q29udGFpbmVyLm9mZnNldFdpZHRoIC0gMiArICdweCdcIlxuICAgID5cbiAgICAgIDxmdy1tZW51PlxuICAgICAgICBAaWYobG9hZGluZygpICYmICFkaXNwbGF5TmV3T3B0aW9uKCkpIHtcbiAgICAgICAgICA8ZnctbWVudS1pdGVtIHRpdGxlPVwiU2VhcmNoaW5nLi4uXCIgW2Rpc2FibGVkXT1cInRydWVcIi8+XG4gICAgICAgIH0gQGVsc2UgaWYoIWxvYWRpbmcoKSkge1xuICAgICAgICAgIEBmb3IgKG9wdGlvbiBvZiBvcHRpb25zU2lnbmFsKCk7IHRyYWNrIG9wdGlvbikge1xuICAgICAgICAgICAgPGZ3LW1lbnUtaXRlbVxuICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlT3B0aW9uQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cInNldEZvY3VzQnlWYWx1ZShvcHRpb24pXCJcbiAgICAgICAgICAgICAgW3RpdGxlXT1cIm9wdGlvblwiXG4gICAgICAgICAgICAgIFtmb2N1c2VkXT1cImZvY3VzZWRPcHRpb24oKSA9PT0gb3B0aW9uXCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvblwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAZW1wdHkge1xuICAgICAgICAgICAgQGlmICghZGlzcGxheU5ld09wdGlvbigpKSB7XG4gICAgICAgICAgICAgIDxmdy1tZW51LWl0ZW0gdGl0bGU9XCJObyB0YWcgc3VnZ2VzdGlvbnNcIiBbZGlzYWJsZWRdPVwidHJ1ZVwiLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgQGlmKGRpc3BsYXlOZXdPcHRpb24oKSkge1xuICAgICAgICAgIDxmdy1tZW51LWl0ZW1cbiAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVPcHRpb25DbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgIChtb3VzZWVudGVyKT1cInNldEZvY3VzQnlWYWx1ZShzZWFyY2hWYWx1ZSgpKVwiXG4gICAgICAgICAgICBbdGl0bGVdPVwic2VhcmNoVmFsdWUoKVwiXG4gICAgICAgICAgICBbdmFsdWVdPVwic2VhcmNoVmFsdWUoKVwiXG4gICAgICAgICAgICBbZm9jdXNlZF09XCJmb2N1c2VkT3B0aW9uKCkgPT09IHNlYXJjaFZhbHVlKClcIj5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwibmV3LXRhZ1wiPk5ldzwvcD5cbiAgICAgICAgICA8L2Z3LW1lbnUtaXRlbT5cbiAgICAgICAgfVxuICAgICAgPC9mdy1tZW51PlxuICAgIDwvZnctbWVudS1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -4,24 +4,31 @@ import * as i1 from "@angular/common";
4
4
  import * as i2 from "../form-heading/form-heading.component";
5
5
  export class FwWrappedInputComponent {
6
6
  constructor() {
7
+ this.statusColor = 'slate';
7
8
  this.class = true;
8
9
  }
9
10
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FwWrappedInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
10
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FwWrappedInputComponent, selector: "fw-wrapped-input", inputs: { title: "title", description: "description", helperText: "helperText", errorText: "errorText" }, host: { properties: { "class.fw-wrapped-input": "this.class" } }, ngImport: i0, template: "<label>\n <fw-form-heading *ngIf=\"title\" [title]=\"title\" [description]=\"description\"></fw-form-heading>\n <ng-content select=\"fw-form-heading\"></ng-content>\n</label>\n<div class=\"input-wrapper\">\n <ng-content\n select=\"fw-button-toggle, fw-date-input, fw-text-input, fw-number-input, fw-phone-input, fw-textarea-input, fw-select, fw-multi-select, fw-checkbox, fw-typeahead\"></ng-content>\n</div>\n<p class=\"vision-p4 helper-text\" *ngIf=\"!!helperText && !errorText\">{{ helperText }}</p>\n<p class=\"vision-p4 error-text\" *ngIf=\"!!errorText\">{{ errorText }}</p>\n", styles: [".fw-wrapped-input{display:flex;flex-direction:column;flex:1}.fw-wrapped-input .input-wrapper{max-width:100%;display:flex;flex-direction:row;flex:1;gap:16px}.fw-wrapped-input .input-wrapper>*{flex:1}.fw-wrapped-input .helper-text,.fw-wrapped-input .error-text{margin-top:4px;color:var(--typography-light);line-height:13px;margin-left:6px;margin-bottom:0;text-align:left}.fw-wrapped-input .error-text{color:var(--red-base)}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.FwFormHeadingComponent, selector: "fw-form-heading", inputs: ["title", "description", "status"] }], encapsulation: i0.ViewEncapsulation.None }); }
11
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FwWrappedInputComponent, selector: "fw-wrapped-input", inputs: { title: "title", status: "status", statusColor: "statusColor", description: "description", helperText: "helperText", errorText: "errorText", required: "required" }, host: { properties: { "class.fw-wrapped-input": "this.class" } }, ngImport: i0, template: "<label>\n <fw-form-heading\n *ngIf=\"title\" [title]=\"title\" [description]=\"description\"\n [required]=\"required\" [status]=\"status\" [statusColor]=\"statusColor\">\n </fw-form-heading>\n <ng-content select=\"fw-form-heading\"></ng-content>\n</label>\n<div class=\"input-wrapper\">\n <ng-content\n select=\"fw-button-toggle, fw-date-input, fw-text-input, fw-number-input, fw-phone-input, fw-textarea-input, fw-select, fw-multi-select, fw-checkbox, fw-typeahead\"></ng-content>\n</div>\n<p class=\"vision-p4 helper-text\" *ngIf=\"!!helperText && !errorText\">{{ helperText }}</p>\n<p class=\"vision-p4 error-text\" *ngIf=\"!!errorText\">{{ errorText }}</p>\n", styles: [".fw-wrapped-input{display:flex;flex-direction:column;flex:1}.fw-wrapped-input .input-wrapper{max-width:100%;display:flex;flex-direction:row;flex:1;gap:16px}.fw-wrapped-input .input-wrapper>*{flex:1}.fw-wrapped-input .helper-text,.fw-wrapped-input .error-text{margin-top:4px;color:var(--typography-light);line-height:13px;margin-left:6px;margin-bottom:0;text-align:left}.fw-wrapped-input .error-text{color:var(--red-base)}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.FwFormHeadingComponent, selector: "fw-form-heading", inputs: ["title", "description", "required", "status", "statusColor"] }], encapsulation: i0.ViewEncapsulation.None }); }
11
12
  }
12
13
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FwWrappedInputComponent, decorators: [{
13
14
  type: Component,
14
- args: [{ selector: 'fw-wrapped-input', encapsulation: ViewEncapsulation.None, template: "<label>\n <fw-form-heading *ngIf=\"title\" [title]=\"title\" [description]=\"description\"></fw-form-heading>\n <ng-content select=\"fw-form-heading\"></ng-content>\n</label>\n<div class=\"input-wrapper\">\n <ng-content\n select=\"fw-button-toggle, fw-date-input, fw-text-input, fw-number-input, fw-phone-input, fw-textarea-input, fw-select, fw-multi-select, fw-checkbox, fw-typeahead\"></ng-content>\n</div>\n<p class=\"vision-p4 helper-text\" *ngIf=\"!!helperText && !errorText\">{{ helperText }}</p>\n<p class=\"vision-p4 error-text\" *ngIf=\"!!errorText\">{{ errorText }}</p>\n", styles: [".fw-wrapped-input{display:flex;flex-direction:column;flex:1}.fw-wrapped-input .input-wrapper{max-width:100%;display:flex;flex-direction:row;flex:1;gap:16px}.fw-wrapped-input .input-wrapper>*{flex:1}.fw-wrapped-input .helper-text,.fw-wrapped-input .error-text{margin-top:4px;color:var(--typography-light);line-height:13px;margin-left:6px;margin-bottom:0;text-align:left}.fw-wrapped-input .error-text{color:var(--red-base)}\n"] }]
15
+ args: [{ selector: 'fw-wrapped-input', encapsulation: ViewEncapsulation.None, template: "<label>\n <fw-form-heading\n *ngIf=\"title\" [title]=\"title\" [description]=\"description\"\n [required]=\"required\" [status]=\"status\" [statusColor]=\"statusColor\">\n </fw-form-heading>\n <ng-content select=\"fw-form-heading\"></ng-content>\n</label>\n<div class=\"input-wrapper\">\n <ng-content\n select=\"fw-button-toggle, fw-date-input, fw-text-input, fw-number-input, fw-phone-input, fw-textarea-input, fw-select, fw-multi-select, fw-checkbox, fw-typeahead\"></ng-content>\n</div>\n<p class=\"vision-p4 helper-text\" *ngIf=\"!!helperText && !errorText\">{{ helperText }}</p>\n<p class=\"vision-p4 error-text\" *ngIf=\"!!errorText\">{{ errorText }}</p>\n", styles: [".fw-wrapped-input{display:flex;flex-direction:column;flex:1}.fw-wrapped-input .input-wrapper{max-width:100%;display:flex;flex-direction:row;flex:1;gap:16px}.fw-wrapped-input .input-wrapper>*{flex:1}.fw-wrapped-input .helper-text,.fw-wrapped-input .error-text{margin-top:4px;color:var(--typography-light);line-height:13px;margin-left:6px;margin-bottom:0;text-align:left}.fw-wrapped-input .error-text{color:var(--red-base)}\n"] }]
15
16
  }], propDecorators: { title: [{
16
17
  type: Input
18
+ }], status: [{
19
+ type: Input
20
+ }], statusColor: [{
21
+ type: Input
17
22
  }], description: [{
18
23
  type: Input
19
24
  }], helperText: [{
20
25
  type: Input
21
26
  }], errorText: [{
22
27
  type: Input
28
+ }], required: [{
29
+ type: Input
23
30
  }], class: [{
24
31
  type: HostBinding,
25
32
  args: ['class.fw-wrapped-input']
26
33
  }] } });
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JhcHBlZC1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy93cmFwcGVkLWlucHV0L3dyYXBwZWQtaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvd3JhcHBlZC1pbnB1dC93cmFwcGVkLWlucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7OztBQVFqRixNQUFNLE9BQU8sdUJBQXVCO0lBTnBDO1FBWXlDLFVBQUssR0FBRyxJQUFJLENBQUM7S0FDckQ7K0dBUFksdUJBQXVCO21HQUF2Qix1QkFBdUIsb09DUnBDLDZrQkFVQTs7NEZERmEsdUJBQXVCO2tCQU5uQyxTQUFTOytCQUNFLGtCQUFrQixpQkFHYixpQkFBaUIsQ0FBQyxJQUFJOzhCQUc1QixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRWlDLEtBQUs7c0JBQTNDLFdBQVc7dUJBQUMsd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBIb3N0QmluZGluZywgSW5wdXQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Z3LXdyYXBwZWQtaW5wdXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vd3JhcHBlZC1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3dyYXBwZWQtaW5wdXQuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgRndXcmFwcGVkSW5wdXRDb21wb25lbnQge1xuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nO1xuICBASW5wdXQoKSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgQElucHV0KCkgaGVscGVyVGV4dD86IHN0cmluZztcbiAgQElucHV0KCkgZXJyb3JUZXh0Pzogc3RyaW5nO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZnctd3JhcHBlZC1pbnB1dCcpIGNsYXNzID0gdHJ1ZTtcbn1cblxuXG4iLCI8bGFiZWw+XG4gIDxmdy1mb3JtLWhlYWRpbmcgKm5nSWY9XCJ0aXRsZVwiIFt0aXRsZV09XCJ0aXRsZVwiIFtkZXNjcmlwdGlvbl09XCJkZXNjcmlwdGlvblwiPjwvZnctZm9ybS1oZWFkaW5nPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJmdy1mb3JtLWhlYWRpbmdcIj48L25nLWNvbnRlbnQ+XG48L2xhYmVsPlxuPGRpdiBjbGFzcz1cImlucHV0LXdyYXBwZXJcIj5cbiAgPG5nLWNvbnRlbnRcbiAgICBzZWxlY3Q9XCJmdy1idXR0b24tdG9nZ2xlLCBmdy1kYXRlLWlucHV0LCBmdy10ZXh0LWlucHV0LCBmdy1udW1iZXItaW5wdXQsIGZ3LXBob25lLWlucHV0LCBmdy10ZXh0YXJlYS1pbnB1dCwgZnctc2VsZWN0LCBmdy1tdWx0aS1zZWxlY3QsIGZ3LWNoZWNrYm94LCBmdy10eXBlYWhlYWRcIj48L25nLWNvbnRlbnQ+XG48L2Rpdj5cbjxwIGNsYXNzPVwidmlzaW9uLXA0IGhlbHBlci10ZXh0XCIgKm5nSWY9XCIhIWhlbHBlclRleHQgJiYgIWVycm9yVGV4dFwiPnt7IGhlbHBlclRleHQgfX08L3A+XG48cCBjbGFzcz1cInZpc2lvbi1wNCBlcnJvci10ZXh0XCIgKm5nSWY9XCIhIWVycm9yVGV4dFwiPnt7IGVycm9yVGV4dCB9fTwvcD5cbiJdfQ==
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JhcHBlZC1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy93cmFwcGVkLWlucHV0L3dyYXBwZWQtaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvd3JhcHBlZC1pbnB1dC93cmFwcGVkLWlucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7OztBQVFqRixNQUFNLE9BQU8sdUJBQXVCO0lBTnBDO1FBU1csZ0JBQVcsR0FBb0UsT0FBTyxDQUFDO1FBTXpELFVBQUssR0FBRyxJQUFJLENBQUM7S0FDckQ7K0dBVlksdUJBQXVCO21HQUF2Qix1QkFBdUIsd1NDUnBDLHFxQkFhQTs7NEZETGEsdUJBQXVCO2tCQU5uQyxTQUFTOytCQUNFLGtCQUFrQixpQkFHYixpQkFBaUIsQ0FBQyxJQUFJOzhCQUc1QixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFFaUMsS0FBSztzQkFBM0MsV0FBVzt1QkFBQyx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEhvc3RCaW5kaW5nLCBJbnB1dCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZnctd3JhcHBlZC1pbnB1dCcsXG4gIHRlbXBsYXRlVXJsOiAnLi93cmFwcGVkLWlucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vd3JhcHBlZC1pbnB1dC5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBGd1dyYXBwZWRJbnB1dENvbXBvbmVudCB7XG4gIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHN0YXR1cz86IHN0cmluZztcbiAgQElucHV0KCkgc3RhdHVzQ29sb3I/OiAnc2xhdGUnIHwgJ3ByaW1hcnknIHwgJ3NlY29uZGFyeScgfCAncmVkJyB8ICdncmVlbicgfCAnb3JhbmdlJyA9ICdzbGF0ZSc7XG4gIEBJbnB1dCgpIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBASW5wdXQoKSBoZWxwZXJUZXh0Pzogc3RyaW5nO1xuICBASW5wdXQoKSBlcnJvclRleHQ/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHJlcXVpcmVkPzogYm9vbGVhbjtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZ3LXdyYXBwZWQtaW5wdXQnKSBjbGFzcyA9IHRydWU7XG59XG5cblxuIiwiPGxhYmVsPlxuICA8ZnctZm9ybS1oZWFkaW5nXG4gICAgKm5nSWY9XCJ0aXRsZVwiIFt0aXRsZV09XCJ0aXRsZVwiIFtkZXNjcmlwdGlvbl09XCJkZXNjcmlwdGlvblwiXG4gICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCIgW3N0YXR1c109XCJzdGF0dXNcIiBbc3RhdHVzQ29sb3JdPVwic3RhdHVzQ29sb3JcIj5cbiAgPC9mdy1mb3JtLWhlYWRpbmc+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cImZ3LWZvcm0taGVhZGluZ1wiPjwvbmctY29udGVudD5cbjwvbGFiZWw+XG48ZGl2IGNsYXNzPVwiaW5wdXQtd3JhcHBlclwiPlxuICA8bmctY29udGVudFxuICAgIHNlbGVjdD1cImZ3LWJ1dHRvbi10b2dnbGUsIGZ3LWRhdGUtaW5wdXQsIGZ3LXRleHQtaW5wdXQsIGZ3LW51bWJlci1pbnB1dCwgZnctcGhvbmUtaW5wdXQsIGZ3LXRleHRhcmVhLWlucHV0LCBmdy1zZWxlY3QsIGZ3LW11bHRpLXNlbGVjdCwgZnctY2hlY2tib3gsIGZ3LXR5cGVhaGVhZFwiPjwvbmctY29udGVudD5cbjwvZGl2PlxuPHAgY2xhc3M9XCJ2aXNpb24tcDQgaGVscGVyLXRleHRcIiAqbmdJZj1cIiEhaGVscGVyVGV4dCAmJiAhZXJyb3JUZXh0XCI+e3sgaGVscGVyVGV4dCB9fTwvcD5cbjxwIGNsYXNzPVwidmlzaW9uLXA0IGVycm9yLXRleHRcIiAqbmdJZj1cIiEhZXJyb3JUZXh0XCI+e3sgZXJyb3JUZXh0IH19PC9wPlxuIl19