@ndwnu/design-system 5.0.0 → 6.0.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 (181) hide show
  1. package/components/alert/alert.model.d.ts +1 -6
  2. package/components/banner/banner.model.d.ts +1 -4
  3. package/components/card/card-header/card-header.component.d.ts +7 -1
  4. package/components/card/card.animation.d.ts +1 -0
  5. package/components/card/card.component.d.ts +15 -2
  6. package/components/card/index.d.ts +2 -2
  7. package/components/dropdown/dropdown.component.d.ts +1 -1
  8. package/components/form-field/autosuggest/autosuggest-add-option/autosuggest-add-option.component.d.ts +3 -3
  9. package/components/form-field/autosuggest/autosuggest-option/autosuggest-option.component.d.ts +7 -7
  10. package/components/form-field/autosuggest/autosuggest-option/autosuggest-option.model.d.ts +5 -2
  11. package/components/form-field/autosuggest/autosuggest-option/base-autosuggest-option.component.d.ts +5 -6
  12. package/components/form-field/autosuggest/autosuggest-panel/autosuggest-panel.component.d.ts +12 -14
  13. package/components/form-field/autosuggest/autosuggest.directive.d.ts +7 -8
  14. package/components/form-field/clear-search-button/clear-search-button.component.d.ts +2 -1
  15. package/components/form-field/form-field.component.d.ts +2 -1
  16. package/components/form-field/input/input.model.d.ts +1 -11
  17. package/components/form-field/picker-button/picker-button.component.d.ts +1 -0
  18. package/components/form-field/textarea/auto-grow.directive.d.ts +6 -3
  19. package/components/form-field/textarea/index.d.ts +1 -0
  20. package/components/form-field/textarea/max-char.directive.d.ts +15 -0
  21. package/components/icon/action-icon/action-icon.component.d.ts +2 -2
  22. package/components/index.d.ts +1 -0
  23. package/components/layout/layout.component.d.ts +5 -2
  24. package/components/main-navigation/main-navigation.imports.d.ts +1 -1
  25. package/components/main-navigation/main-navigation.model.d.ts +1 -4
  26. package/components/modal/modal.component.d.ts +1 -2
  27. package/components/multi-select/multi-select.component.d.ts +3 -3
  28. package/components/pill/pill.model.d.ts +1 -8
  29. package/components/router-breadcrumbs/router-breadcrumbs.component.d.ts +2 -2
  30. package/components/summary-card/index.d.ts +10 -0
  31. package/components/summary-card/summary-card-action/summary-card-action.component.d.ts +11 -0
  32. package/components/summary-card/summary-card-actions/summary-card-actions.component.d.ts +9 -0
  33. package/components/summary-card/summary-card-avatar/summary-card-avatar.component.d.ts +8 -0
  34. package/components/summary-card/summary-card-content/summary-card-content.component.d.ts +5 -0
  35. package/components/summary-card/summary-card-header/summary-card-header.component.d.ts +5 -0
  36. package/components/summary-card/summary-card-subtitle/summary-card-subtitle.component.d.ts +5 -0
  37. package/components/summary-card/summary-card-tag/summary-card-tag.component.d.ts +5 -0
  38. package/components/summary-card/summary-card-tags/summary-card-tags.component.d.ts +5 -0
  39. package/components/summary-card/summary-card.component.d.ts +5 -0
  40. package/components/summary-card/summary-card.model.d.ts +2 -0
  41. package/components/tag/tag.component.d.ts +2 -2
  42. package/core/style/styles.css +217 -11
  43. package/core/style/styles.scss +217 -11
  44. package/fesm2022/ndwnu-design-system.mjs +608 -334
  45. package/fesm2022/ndwnu-design-system.mjs.map +1 -1
  46. package/package.json +5 -7
  47. package/esm2022/components/accordion/accordion.component.mjs +0 -32
  48. package/esm2022/components/accordion/accordion.service.mjs +0 -17
  49. package/esm2022/components/accordion/index.mjs +0 -3
  50. package/esm2022/components/alert/alert.component.mjs +0 -42
  51. package/esm2022/components/alert/alert.model.mjs +0 -8
  52. package/esm2022/components/alert/index.mjs +0 -3
  53. package/esm2022/components/badge/badge.component.mjs +0 -21
  54. package/esm2022/components/badge/index.mjs +0 -2
  55. package/esm2022/components/banner/banner.component.mjs +0 -61
  56. package/esm2022/components/banner/banner.model.mjs +0 -6
  57. package/esm2022/components/banner/index.mjs +0 -3
  58. package/esm2022/components/breadcrumb/breadcrumb.component.mjs +0 -15
  59. package/esm2022/components/breadcrumb/index.mjs +0 -2
  60. package/esm2022/components/breadcrumb-group/breadcrumb-group.component.mjs +0 -21
  61. package/esm2022/components/breadcrumb-group/index.mjs +0 -2
  62. package/esm2022/components/button/button.directive.mjs +0 -37
  63. package/esm2022/components/button/index.mjs +0 -2
  64. package/esm2022/components/card/card-content/card-content.component.mjs +0 -11
  65. package/esm2022/components/card/card-content/index.mjs +0 -2
  66. package/esm2022/components/card/card-footer/card-footer.component.mjs +0 -11
  67. package/esm2022/components/card/card-footer/index.mjs +0 -2
  68. package/esm2022/components/card/card-header/card-header.component.mjs +0 -11
  69. package/esm2022/components/card/card-header/index.mjs +0 -2
  70. package/esm2022/components/card/card.component.mjs +0 -11
  71. package/esm2022/components/card/index.mjs +0 -15
  72. package/esm2022/components/collapsible/collapsible.animation.mjs +0 -26
  73. package/esm2022/components/collapsible/collapsible.component.mjs +0 -34
  74. package/esm2022/components/collapsible/index.mjs +0 -2
  75. package/esm2022/components/dashboard-card/dashboard-card.component.mjs +0 -32
  76. package/esm2022/components/dashboard-card/index.mjs +0 -2
  77. package/esm2022/components/dropdown/dropdown.component.mjs +0 -57
  78. package/esm2022/components/dropdown/index.mjs +0 -2
  79. package/esm2022/components/form-field/autosuggest/autosuggest-add-option/autosuggest-add-option.component.mjs +0 -29
  80. package/esm2022/components/form-field/autosuggest/autosuggest-add-option/index.mjs +0 -2
  81. package/esm2022/components/form-field/autosuggest/autosuggest-option/autosuggest-option.component.mjs +0 -45
  82. package/esm2022/components/form-field/autosuggest/autosuggest-option/autosuggest-option.model.mjs +0 -2
  83. package/esm2022/components/form-field/autosuggest/autosuggest-option/base-autosuggest-option.component.mjs +0 -85
  84. package/esm2022/components/form-field/autosuggest/autosuggest-option/index.mjs +0 -3
  85. package/esm2022/components/form-field/autosuggest/autosuggest-panel/autosuggest-panel.component.mjs +0 -82
  86. package/esm2022/components/form-field/autosuggest/autosuggest.directive.mjs +0 -411
  87. package/esm2022/components/form-field/autosuggest/index.mjs +0 -6
  88. package/esm2022/components/form-field/autosuggest/match-bold.pipe.mjs +0 -21
  89. package/esm2022/components/form-field/checkbox/checkbox.component.mjs +0 -62
  90. package/esm2022/components/form-field/checkbox/index.mjs +0 -2
  91. package/esm2022/components/form-field/checkbox-group/checkbox-group.component.mjs +0 -15
  92. package/esm2022/components/form-field/checkbox-group/index.mjs +0 -2
  93. package/esm2022/components/form-field/clear-search-button/clear-search-button.component.mjs +0 -37
  94. package/esm2022/components/form-field/error/error.component.mjs +0 -12
  95. package/esm2022/components/form-field/error/index.mjs +0 -2
  96. package/esm2022/components/form-field/file-upload/file-upload-text.interface.mjs +0 -2
  97. package/esm2022/components/form-field/file-upload/file-upload.component.mjs +0 -172
  98. package/esm2022/components/form-field/file-upload/index.mjs +0 -3
  99. package/esm2022/components/form-field/form-field.component.mjs +0 -81
  100. package/esm2022/components/form-field/form-field.constant.mjs +0 -2
  101. package/esm2022/components/form-field/form-field.model.mjs +0 -8
  102. package/esm2022/components/form-field/index.mjs +0 -17
  103. package/esm2022/components/form-field/info/index.mjs +0 -2
  104. package/esm2022/components/form-field/info/info.component.mjs +0 -11
  105. package/esm2022/components/form-field/input/index.mjs +0 -3
  106. package/esm2022/components/form-field/input/input.directive.mjs +0 -68
  107. package/esm2022/components/form-field/input/input.model.mjs +0 -13
  108. package/esm2022/components/form-field/input-button/index.mjs +0 -2
  109. package/esm2022/components/form-field/input-button/input-button.component.mjs +0 -23
  110. package/esm2022/components/form-field/input-icon/index.mjs +0 -2
  111. package/esm2022/components/form-field/input-icon/input-icon.component.mjs +0 -12
  112. package/esm2022/components/form-field/month-input/index.mjs +0 -2
  113. package/esm2022/components/form-field/month-input/month-input-utils.mjs +0 -13
  114. package/esm2022/components/form-field/month-input/month-input.component.mjs +0 -154
  115. package/esm2022/components/form-field/option-group/index.mjs +0 -4
  116. package/esm2022/components/form-field/option-group/option-group.component.mjs +0 -64
  117. package/esm2022/components/form-field/option-group/option-group.model.mjs +0 -2
  118. package/esm2022/components/form-field/option-group/option.component.mjs +0 -22
  119. package/esm2022/components/form-field/picker-button/picker-button.component.mjs +0 -45
  120. package/esm2022/components/form-field/radio-button/index.mjs +0 -2
  121. package/esm2022/components/form-field/radio-button/radio-button.component.mjs +0 -63
  122. package/esm2022/components/form-field/radio-group/index.mjs +0 -2
  123. package/esm2022/components/form-field/radio-group/radio-group.component.mjs +0 -70
  124. package/esm2022/components/form-field/success/index.mjs +0 -2
  125. package/esm2022/components/form-field/success/success.component.mjs +0 -12
  126. package/esm2022/components/form-field/textarea/auto-grow.directive.mjs +0 -45
  127. package/esm2022/components/form-field/textarea/index.mjs +0 -2
  128. package/esm2022/components/icon/action-icon/action-icon.component.mjs +0 -40
  129. package/esm2022/components/icon/action-icon/index.mjs +0 -2
  130. package/esm2022/components/icon/icon.component.mjs +0 -36
  131. package/esm2022/components/icon/index.mjs +0 -3
  132. package/esm2022/components/index.mjs +0 -28
  133. package/esm2022/components/layout/index.mjs +0 -2
  134. package/esm2022/components/layout/layout.component.mjs +0 -20
  135. package/esm2022/components/layout-banners/index.mjs +0 -2
  136. package/esm2022/components/layout-banners/layout-banners.component.mjs +0 -11
  137. package/esm2022/components/loader/index.mjs +0 -2
  138. package/esm2022/components/loader/loader.component.mjs +0 -11
  139. package/esm2022/components/main-navigation/index.mjs +0 -3
  140. package/esm2022/components/main-navigation/main-navigation.component.mjs +0 -165
  141. package/esm2022/components/main-navigation/main-navigation.imports.mjs +0 -20
  142. package/esm2022/components/main-navigation/main-navigation.model.mjs +0 -6
  143. package/esm2022/components/main-navigation-menu/index.mjs +0 -2
  144. package/esm2022/components/main-navigation-menu/main-navigation-menu.component.mjs +0 -20
  145. package/esm2022/components/modal/index.mjs +0 -16
  146. package/esm2022/components/modal/modal-content/index.mjs +0 -2
  147. package/esm2022/components/modal/modal-content/modal-content.component.mjs +0 -11
  148. package/esm2022/components/modal/modal-footer/index.mjs +0 -2
  149. package/esm2022/components/modal/modal-footer/modal-footer.component.mjs +0 -11
  150. package/esm2022/components/modal/modal-header/index.mjs +0 -2
  151. package/esm2022/components/modal/modal-header/modal-header.component.mjs +0 -18
  152. package/esm2022/components/modal/modal-ref.mjs +0 -4
  153. package/esm2022/components/modal/modal.component.mjs +0 -19
  154. package/esm2022/components/modal/modal.service.mjs +0 -31
  155. package/esm2022/components/multi-select/checkbox-data.interface.mjs +0 -2
  156. package/esm2022/components/multi-select/index.mjs +0 -4
  157. package/esm2022/components/multi-select/multi-select.component.mjs +0 -76
  158. package/esm2022/components/multi-select/select-all-text.interface.mjs +0 -2
  159. package/esm2022/components/pill/index.mjs +0 -3
  160. package/esm2022/components/pill/pill.component.mjs +0 -25
  161. package/esm2022/components/pill/pill.model.mjs +0 -2
  162. package/esm2022/components/popover/index.mjs +0 -2
  163. package/esm2022/components/popover/popover-trigger.directive.mjs +0 -182
  164. package/esm2022/components/router-breadcrumbs/index.mjs +0 -2
  165. package/esm2022/components/router-breadcrumbs/router-breadcrumbs.component.mjs +0 -37
  166. package/esm2022/components/tab/index.mjs +0 -2
  167. package/esm2022/components/tab/tab.component.mjs +0 -32
  168. package/esm2022/components/tab-group/index.mjs +0 -2
  169. package/esm2022/components/tab-group/tab-group.component.mjs +0 -34
  170. package/esm2022/components/tag/index.mjs +0 -2
  171. package/esm2022/components/tag/tag.component.mjs +0 -29
  172. package/esm2022/components/toast/index.mjs +0 -3
  173. package/esm2022/components/toast/toast.component.mjs +0 -77
  174. package/esm2022/components/toast/toast.service.mjs +0 -43
  175. package/esm2022/components/tooltip/index.mjs +0 -3
  176. package/esm2022/components/tooltip/tooltip.component.mjs +0 -16
  177. package/esm2022/components/tooltip/tooltip.directive.mjs +0 -89
  178. package/esm2022/models/aria.model.mjs +0 -2
  179. package/esm2022/models/index.mjs +0 -2
  180. package/esm2022/ndwnu-design-system.mjs +0 -5
  181. package/esm2022/public-api.mjs +0 -5
@@ -1,411 +0,0 @@
1
- /* eslint max-lines: off */
2
- // Based on https://github.com/angular/components/tree/main/src/material/autocomplete
3
- import { hasModifierKey } from '@angular/cdk/keycodes';
4
- import { ConnectionPositionPair, Overlay, OverlayConfig, ViewportRuler, } from '@angular/cdk/overlay';
5
- import { TemplatePortal } from '@angular/cdk/portal';
6
- import { DOCUMENT } from '@angular/common';
7
- import { ChangeDetectorRef, DestroyRef, Directive, ElementRef, forwardRef, inject, input, NgZone, output, ViewContainerRef, } from '@angular/core';
8
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
9
- import { NG_VALUE_ACCESSOR } from '@angular/forms';
10
- import { defer, delay, filter, fromEvent, map, merge, of, Subject, switchMap, take, } from 'rxjs';
11
- import { AutocompleteOptionSelectionChange, } from './autosuggest-option/autosuggest-option.component';
12
- import { INPUT_CONTAINER_CLASS } from '../form-field.constant';
13
- import * as i0 from "@angular/core";
14
- export class AutosuggestDirective {
15
- constructor() {
16
- this.ndwAutosuggest = input.required();
17
- this.filter = output();
18
- this.overlayAttached = false;
19
- this.overlayRef = null;
20
- this.canOpenOnNextFocus = true;
21
- this.valueOnAttach = null;
22
- this.valueOnLastKeydown = null;
23
- this.closeKeyEventStream = new Subject();
24
- this.zone = inject(NgZone);
25
- this.element = inject(ElementRef);
26
- this.viewContainerRef = inject(ViewContainerRef);
27
- this.overlay = inject(Overlay);
28
- this.changeDetectorRef = inject(ChangeDetectorRef);
29
- this.document = inject(DOCUMENT);
30
- this.viewportRuler = inject(ViewportRuler);
31
- this.destroyRef = inject(DestroyRef);
32
- this.optionSelections = defer(() => {
33
- const options = this.autosuggest.items;
34
- if (this.autosuggest && options) {
35
- return merge(...options.map((option) => option.selectionChange));
36
- }
37
- return this.zone.onStable.asObservable().pipe(take(1), switchMap(() => this.optionSelections));
38
- });
39
- this.handlePanelKeydown = (event) => {
40
- if ((event.key === 'Escape' && !hasModifierKey(event)) ||
41
- (event.key === 'ArrowUp' && hasModifierKey(event, 'altKey'))) {
42
- this.closeKeyEventStream.next();
43
- this.resetActiveItem();
44
- event.stopPropagation();
45
- event.preventDefault();
46
- }
47
- };
48
- this.windowBlurHandler = () => {
49
- this.canOpenOnNextFocus =
50
- this.document?.activeElement !== this.element.nativeElement || this.panelOpen;
51
- };
52
- this.onChange = () => { };
53
- this.onTouched = () => { };
54
- }
55
- get panelOpen() {
56
- return this.overlayAttached && !!this.autosuggest?.showPanel;
57
- }
58
- get activeOption() {
59
- const keyManager = this.autosuggest?.keyManager;
60
- return keyManager?.activeItem ?? null;
61
- }
62
- get autosuggest() {
63
- return this.ndwAutosuggest();
64
- }
65
- get panelClosingActions() {
66
- return merge(this.optionSelections, this.autosuggest.keyManager.tabOut.pipe(filter(() => this.overlayAttached)), this.closeKeyEventStream, this.getOutsideClickStream(), this.overlayRef
67
- ? this.overlayRef.detachments().pipe(filter(() => this.overlayAttached))
68
- : of()).pipe(map((event) => (event instanceof AutocompleteOptionSelectionChange ? event : null)));
69
- }
70
- ngAfterViewInit() {
71
- const window = this.getWindow();
72
- if (typeof window !== 'undefined') {
73
- this.zone.runOutsideAngular(() => {
74
- window.addEventListener('blur', this.windowBlurHandler);
75
- });
76
- }
77
- }
78
- ngOnDestroy() {
79
- const window = this.getWindow();
80
- if (typeof window !== 'undefined') {
81
- window.removeEventListener('blur', this.windowBlurHandler);
82
- }
83
- this.closingActionsSubscription?.unsubscribe();
84
- this.keydownSubscription?.unsubscribe();
85
- this.closeKeyEventStream.complete();
86
- this.destroyPanel();
87
- }
88
- openPanel(valueOnAttach = this.element.nativeElement.value) {
89
- this.attachOverlay(valueOnAttach);
90
- }
91
- closePanel() {
92
- if (!this.overlayAttached) {
93
- return;
94
- }
95
- if (this.panelOpen) {
96
- this.autosuggest.closed?.emit();
97
- }
98
- this.autosuggest.isOpen = false;
99
- this.overlayAttached = false;
100
- if (this.overlayRef?.hasAttached()) {
101
- this.overlayRef.detach();
102
- this.closingActionsSubscription?.unsubscribe();
103
- this.keydownSubscription?.unsubscribe();
104
- }
105
- this.changeDetectorRef.detectChanges();
106
- // Dispatch an input event to trigger the form-field component change detection.
107
- this.element.nativeElement.dispatchEvent(new Event('input'));
108
- }
109
- handleFocus() {
110
- this.filter.emit(this.element.nativeElement.value);
111
- if (!this.canOpenOnNextFocus) {
112
- this.canOpenOnNextFocus = true;
113
- this.blur();
114
- }
115
- else if (this.canOpen()) {
116
- this.previousValue = this.element.nativeElement.value;
117
- this.attachOverlay(this.previousValue);
118
- }
119
- }
120
- writeValue(value) {
121
- Promise.resolve(null).then(() => this.setTriggerValue(value));
122
- }
123
- registerOnChange(fn) {
124
- this.onChange = fn;
125
- }
126
- registerOnTouched(fn) {
127
- this.onTouched = fn;
128
- }
129
- clearValue() {
130
- this.writeValue('');
131
- this.onChange('');
132
- }
133
- handleClick() {
134
- if (this.canOpen() && !this.panelOpen) {
135
- this.openPanel();
136
- }
137
- }
138
- handleKeydown(event) {
139
- const code = event.code;
140
- if (event.key === 'Escape') {
141
- event.preventDefault();
142
- }
143
- this.valueOnLastKeydown = this.element.nativeElement.value;
144
- if (this.activeOption && code === 'Enter' && this.panelOpen) {
145
- this.activeOption.selectViaInteraction();
146
- this.resetActiveItem();
147
- event.preventDefault();
148
- }
149
- else if (this.autosuggest) {
150
- const prevActiveItem = this.autosuggest.keyManager?.activeItem;
151
- const isArrowKey = code === 'ArrowUp' || code === 'ArrowDown';
152
- if (code === 'Tab' || (isArrowKey && this.panelOpen)) {
153
- this.autosuggest.keyManager?.onKeydown(event);
154
- }
155
- else if (isArrowKey && this.canOpen()) {
156
- this.openPanel();
157
- }
158
- if (isArrowKey || this.autosuggest.keyManager?.activeItem !== prevActiveItem) {
159
- this.scrollToOption();
160
- if (this.activeOption) {
161
- this.assignOptionValue(this.activeOption.value() ?? null);
162
- }
163
- }
164
- }
165
- }
166
- handleInput(event) {
167
- const target = event.target;
168
- let value = target.value;
169
- this.filter.emit(value);
170
- this.autosuggest.searchTerm.set(value);
171
- // Based on `NumberValueAccessor` from forms.
172
- if (target.type === 'number') {
173
- value = value === '' ? null : parseFloat(value);
174
- }
175
- if (this.previousValue !== value) {
176
- this.previousValue = value;
177
- if (!this.autosuggest) {
178
- this.onChange(value);
179
- }
180
- if (!value) {
181
- this.clearPreviousSelectedOption(null, true);
182
- }
183
- if (this.canOpen() && this.document.activeElement === event.target) {
184
- const valueOnAttach = this.valueOnLastKeydown ?? this.element.nativeElement.value;
185
- this.valueOnLastKeydown = null;
186
- this.openPanel(valueOnAttach);
187
- }
188
- }
189
- }
190
- setDisabledState(isDisabled) {
191
- this.element.nativeElement.disabled = isDisabled;
192
- }
193
- destroyPanel() {
194
- if (this.overlayRef) {
195
- this.closePanel();
196
- this.overlayRef.dispose();
197
- this.overlayRef = null;
198
- }
199
- }
200
- attachOverlay(valueOnAttach = this.element.nativeElement.value) {
201
- if (!this.autosuggest) {
202
- throw Error('Cannot open autosuggest panel because the autosuggest is not defined.');
203
- }
204
- let overlayRef = this.overlayRef;
205
- if (!overlayRef) {
206
- this.portal = new TemplatePortal(this.autosuggest.template(), this.viewContainerRef);
207
- overlayRef = this.overlay.create(this.getOverlayConfig());
208
- this.overlayRef = overlayRef;
209
- this.viewportRuler
210
- .change()
211
- .pipe(takeUntilDestroyed(this.destroyRef))
212
- .subscribe(() => {
213
- if (this.panelOpen && overlayRef) {
214
- overlayRef.updateSize({ width: this.getHostWidth() });
215
- }
216
- });
217
- this.initKeydownEvents();
218
- }
219
- if (overlayRef && !overlayRef.hasAttached()) {
220
- overlayRef.attach(this.portal);
221
- this.valueOnAttach = valueOnAttach;
222
- this.closingActionsSubscription = this.subscribeToClosingActions();
223
- this.keydownSubscription = overlayRef.keydownEvents().subscribe(this.handlePanelKeydown);
224
- }
225
- const wasOpen = this.panelOpen;
226
- this.autosuggest.setVisibility();
227
- this.autosuggest.isOpen = true;
228
- this.overlayAttached = true;
229
- if (this.panelOpen && wasOpen !== this.panelOpen) {
230
- this.autosuggest.opened.emit();
231
- }
232
- }
233
- initKeydownEvents() {
234
- this.overlayRef?.keydownEvents()?.subscribe((event) => {
235
- if (event.code === 'ArrowUp' && event.altKey) {
236
- this.resetActiveItem();
237
- this.closeKeyEventStream.next();
238
- event.stopPropagation();
239
- event.preventDefault();
240
- this.blur();
241
- }
242
- });
243
- }
244
- getOverlayConfig() {
245
- return new OverlayConfig({
246
- positionStrategy: this.getOverlayPosition(),
247
- scrollStrategy: this.overlay.scrollStrategies.reposition(),
248
- width: this.getHostWidth(),
249
- });
250
- }
251
- getHostWidth() {
252
- return this.bindingElement().getBoundingClientRect().width;
253
- }
254
- bindingElement() {
255
- const element = this.element.nativeElement;
256
- const parentElement = element.parentElement;
257
- return parentElement?.classList?.contains(INPUT_CONTAINER_CLASS) ? parentElement : element;
258
- }
259
- getOverlayPosition() {
260
- const positions = [
261
- new ConnectionPositionPair({ originX: 'start', originY: 'bottom' }, { overlayX: 'start', overlayY: 'top' }),
262
- ];
263
- return this.overlay
264
- .position()
265
- .flexibleConnectedTo(this.bindingElement())
266
- .withPositions(positions)
267
- .withFlexibleDimensions(false)
268
- .withPush(false);
269
- }
270
- resetActiveItem() {
271
- const activeItemIndex = 0;
272
- if (this.autosuggest.keyManager) {
273
- this.autosuggest.keyManager.setActiveItem(activeItemIndex);
274
- }
275
- }
276
- blur() {
277
- this.element.nativeElement.blur();
278
- }
279
- getOutsideClickStream() {
280
- return merge(fromEvent(this.document, 'click'), fromEvent(this.document, 'touchend')).pipe(filter((event) => {
281
- const clickTarget = event.target;
282
- return (this.overlayAttached &&
283
- clickTarget !== this.element.nativeElement &&
284
- this.document.activeElement !== this.element.nativeElement &&
285
- !!this.overlayRef &&
286
- !this.overlayRef.overlayElement.contains(clickTarget));
287
- }));
288
- }
289
- subscribeToClosingActions() {
290
- const items = this.autosuggest.items;
291
- const firstStable = this.zone.onStable.asObservable().pipe(take(1));
292
- const optionChanges = items.changes.pipe(delay(0));
293
- return merge(firstStable, optionChanges)
294
- .pipe(switchMap(() => {
295
- const wasOpen = this.panelOpen;
296
- this.resetActiveItem();
297
- this.autosuggest.setVisibility();
298
- if (this.panelOpen) {
299
- this.overlayRef?.updatePosition();
300
- if (wasOpen !== this.panelOpen) {
301
- this.autosuggest.opened?.emit();
302
- }
303
- }
304
- return this.panelClosingActions;
305
- }), take(1))
306
- .subscribe((event) => this.setValueAndClose(event));
307
- }
308
- setValueAndClose(event) {
309
- const toSelect = event ? event.source : null;
310
- if (toSelect) {
311
- this.clearPreviousSelectedOption(toSelect);
312
- this.onChange(toSelect.value());
313
- this.assignOptionValue(toSelect.value() ?? null);
314
- this.autosuggest.emitSelectEvent(toSelect);
315
- this.element.nativeElement.focus();
316
- }
317
- else if (this.element.nativeElement.value !== this.valueOnAttach) {
318
- this.clearPreviousSelectedOption(null);
319
- this.assignOptionValue(null);
320
- this.onChange(null);
321
- }
322
- this.closePanel();
323
- }
324
- assignOptionValue(value) {
325
- const toDisplay = this.getDisplayValue(value);
326
- if (value == null) {
327
- this.clearPreviousSelectedOption(null, false);
328
- }
329
- this.updateNativeInputValue(toDisplay ?? '');
330
- }
331
- getDisplayValue(value) {
332
- if (!value) {
333
- return '';
334
- }
335
- const displayWithFn = this.autosuggest.displayWith();
336
- return this.autosuggest && displayWithFn ? displayWithFn(value) : value;
337
- }
338
- updateNativeInputValue(value) {
339
- this.element.nativeElement.value = value;
340
- this.previousValue = value;
341
- this.changeDetectorRef.markForCheck();
342
- }
343
- scrollToOption() {
344
- const index = this.autosuggest.keyManager?.activeItemIndex ?? 0;
345
- if (index === 0) {
346
- this.autosuggest.setScrollTop(0);
347
- }
348
- else {
349
- const newScrollPosition = index * 26;
350
- this.autosuggest.setScrollTop(newScrollPosition);
351
- }
352
- }
353
- setTriggerValue(value) {
354
- const inputValue = value ?? '';
355
- this.element.nativeElement.value = inputValue;
356
- this.previousValue = inputValue;
357
- }
358
- clearPreviousSelectedOption(skip, emitEvent) {
359
- this.onChange(null);
360
- this.autosuggest.items?.forEach((option) => {
361
- if (option !== skip && option.selected) {
362
- option.deselect(emitEvent);
363
- }
364
- });
365
- }
366
- canOpen() {
367
- const element = this.element.nativeElement;
368
- return !element.readOnly && !element.disabled;
369
- }
370
- getWindow() {
371
- return this.document?.defaultView ?? window;
372
- }
373
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: AutosuggestDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
374
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.0.1", type: AutosuggestDirective, isStandalone: true, selector: "input[ndwAutosuggest], textarea[ndwAutosuggest]", inputs: { ndwAutosuggest: { classPropertyName: "ndwAutosuggest", publicName: "ndwAutosuggest", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { filter: "filter" }, host: { listeners: { "focus": "handleFocus()", "blur": "onTouched()", "input": "handleInput($event)", "keydown": "handleKeydown($event)", "click": "handleClick()" }, properties: { "attr.role": "\"combobox\"", "attr.autocomplete": "\"off\"", "attr.aria-autocomplete": "\"list\"", "attr.aria-activedescendant": "(panelOpen && activeOption) ? activeOption.id : null", "attr.aria-expanded": "panelOpen.toString()", "attr.aria-owns": "!panelOpen ? null : ndwAutosuggest()?.id", "attr.aria-haspopup": "\"true\"" } }, providers: [
375
- {
376
- provide: NG_VALUE_ACCESSOR,
377
- useExisting: forwardRef(() => AutosuggestDirective),
378
- multi: true,
379
- },
380
- ], exportAs: ["ndwAutosuggestTrigger"], ngImport: i0 }); }
381
- }
382
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: AutosuggestDirective, decorators: [{
383
- type: Directive,
384
- args: [{
385
- selector: 'input[ndwAutosuggest], textarea[ndwAutosuggest]',
386
- exportAs: 'ndwAutosuggestTrigger',
387
- standalone: true,
388
- host: {
389
- '[attr.role]': '"combobox"',
390
- '[attr.autocomplete]': '"off"',
391
- '[attr.aria-autocomplete]': '"list"',
392
- '[attr.aria-activedescendant]': '(panelOpen && activeOption) ? activeOption.id : null',
393
- '[attr.aria-expanded]': 'panelOpen.toString()',
394
- '[attr.aria-owns]': '!panelOpen ? null : ndwAutosuggest()?.id',
395
- '[attr.aria-haspopup]': '"true"',
396
- '(focus)': 'handleFocus()',
397
- '(blur)': 'onTouched()',
398
- '(input)': 'handleInput($event)',
399
- '(keydown)': 'handleKeydown($event)',
400
- '(click)': 'handleClick()',
401
- },
402
- providers: [
403
- {
404
- provide: NG_VALUE_ACCESSOR,
405
- useExisting: forwardRef(() => AutosuggestDirective),
406
- multi: true,
407
- },
408
- ],
409
- }]
410
- }] });
411
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b3N1Z2dlc3QuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmR3L3NyYy9jb21wb25lbnRzL2Zvcm0tZmllbGQvYXV0b3N1Z2dlc3QvYXV0b3N1Z2dlc3QuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJCQUEyQjtBQUUzQixxRkFBcUY7QUFFckYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3ZELE9BQU8sRUFDTCxzQkFBc0IsRUFFdEIsT0FBTyxFQUNQLGFBQWEsRUFFYixhQUFhLEdBQ2QsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFFTCxpQkFBaUIsRUFDakIsVUFBVSxFQUNWLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUVOLE1BQU0sRUFDTixnQkFBZ0IsR0FDakIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFDTCxLQUFLLEVBQ0wsS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsR0FBRyxFQUNILEtBQUssRUFFTCxFQUFFLEVBQ0YsT0FBTyxFQUVQLFNBQVMsRUFDVCxJQUFJLEdBQ0wsTUFBTSxNQUFNLENBQUM7QUFFZCxPQUFPLEVBQ0wsaUNBQWlDLEdBRWxDLE1BQU0sbURBQW1ELENBQUM7QUFFM0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7O0FBNkIvRCxNQUFNLE9BQU8sb0JBQW9CO0lBMUJqQztRQTJCa0IsbUJBQWMsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUE2QixDQUFDO1FBRTdELFdBQU0sR0FBRyxNQUFNLEVBQVUsQ0FBQztRQUVsQyxvQkFBZSxHQUFHLEtBQUssQ0FBQztRQUN4QixlQUFVLEdBQXNCLElBQUksQ0FBQztRQUtyQyx1QkFBa0IsR0FBRyxJQUFJLENBQUM7UUFDMUIsa0JBQWEsR0FBMkIsSUFBSSxDQUFDO1FBQzdDLHVCQUFrQixHQUFrQixJQUFJLENBQUM7UUFDaEMsd0JBQW1CLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUUxQyxTQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RCLFlBQU8sR0FBRyxNQUFNLENBQStCLFVBQVUsQ0FBQyxDQUFDO1FBQzNELHFCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzVDLFlBQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUIsc0JBQWlCLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDOUMsYUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1QixrQkFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN0QyxlQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBMkJoQyxxQkFBZ0IsR0FBa0QsS0FBSyxDQUFDLEdBQUcsRUFBRTtZQUM1RixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztZQUV2QyxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ2hDLE9BQU8sS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7WUFDbkUsQ0FBQztZQUVELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUMzQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUN2QyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUEySmMsdUJBQWtCLEdBQUcsQ0FBQyxLQUFvQixFQUFRLEVBQUU7WUFDbkUsSUFDRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssUUFBUSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNsRCxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssU0FBUyxJQUFJLGNBQWMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFDNUQsQ0FBQztnQkFDRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN4QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDekIsQ0FBQztRQUNILENBQUMsQ0FBQztRQUVlLHNCQUFpQixHQUFHLEdBQVMsRUFBRTtZQUM5QyxJQUFJLENBQUMsa0JBQWtCO2dCQUNyQixJQUFJLENBQUMsUUFBUSxFQUFFLGFBQWEsS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ2xGLENBQUMsQ0FBQztRQUVLLGFBQVEsR0FBNkIsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO1FBQzlDLGNBQVMsR0FBRyxHQUFTLEVBQUUsR0FBRSxDQUFDLENBQUM7S0EyT25DO0lBNWJDLElBQVcsU0FBUztRQUNsQixPQUFPLElBQUksQ0FBQyxlQUFlLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDO0lBQy9ELENBQUM7SUFFRCxJQUFXLFlBQVk7UUFDckIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUM7UUFDaEQsT0FBTyxVQUFVLEVBQUUsVUFBVSxJQUFJLElBQUksQ0FBQztJQUN4QyxDQUFDO0lBRUQsSUFBVyxXQUFXO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFZLG1CQUFtQjtRQUM3QixPQUFPLEtBQUssQ0FDVixJQUFJLENBQUMsZ0JBQWdCLEVBQ3JCLElBQUksQ0FBQyxXQUFZLENBQUMsVUFBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUM3RSxJQUFJLENBQUMsbUJBQW1CLEVBQ3hCLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxFQUM1QixJQUFJLENBQUMsVUFBVTtZQUNiLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ3hFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDVCxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxZQUFZLGlDQUFpQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5RixDQUFDO0lBZU0sZUFBZTtRQUNwQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFaEMsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRTtnQkFDL0IsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUMxRCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRU0sV0FBVztRQUNoQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFaEMsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUNsQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzdELENBQUM7UUFFRCxJQUFJLENBQUMsMEJBQTBCLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDL0MsSUFBSSxDQUFDLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVNLFNBQVMsQ0FBQyxnQkFBd0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsS0FBSztRQUN2RSxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFTSxVQUFVO1FBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUMxQixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ2xDLENBQUM7UUFFRCxJQUFJLENBQUMsV0FBWSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDakMsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFFN0IsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsMEJBQTBCLEVBQUUsV0FBVyxFQUFFLENBQUM7WUFDL0MsSUFBSSxDQUFDLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQzFDLENBQUM7UUFFRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFdkMsZ0ZBQWdGO1FBQ2hGLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFTSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRW5ELElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1lBQy9CLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNkLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDO1lBQ3RELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3pDLENBQUM7SUFDSCxDQUFDO0lBRU0sVUFBVSxDQUFDLEtBQWM7UUFDOUIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFlLENBQUMsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxFQUErQjtRQUNyRCxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRU0saUJBQWlCLENBQUMsRUFBaUI7UUFDeEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVNLFVBQVU7UUFDZixJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ25CLENBQUM7SUFDSCxDQUFDO0lBRU0sYUFBYSxDQUFDLEtBQW9CO1FBQ3ZDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFFeEIsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzNCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN6QixDQUFDO1FBRUQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQztRQUUzRCxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxLQUFLLE9BQU8sSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDNUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN2QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDekIsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzVCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQztZQUMvRCxNQUFNLFVBQVUsR0FBRyxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksS0FBSyxXQUFXLENBQUM7WUFFOUQsSUFBSSxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO2dCQUNyRCxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEQsQ0FBQztpQkFBTSxJQUFJLFVBQVUsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztnQkFDeEMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLENBQUM7WUFFRCxJQUFJLFVBQVUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxVQUFVLEtBQUssY0FBYyxFQUFFLENBQUM7Z0JBQzdFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFFdEIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7b0JBQ3RCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxJQUFJLElBQUksQ0FBQyxDQUFDO2dCQUM1RCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRU0sV0FBVyxDQUFDLEtBQW9CO1FBQ3JDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUEwQixDQUFDO1FBQ2hELElBQUksS0FBSyxHQUEyQixNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ2pELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV2Qyw2Q0FBNkM7UUFDN0MsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzdCLEtBQUssR0FBRyxLQUFLLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsRCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1lBRTNCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkIsQ0FBQztZQUVELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDWCxJQUFJLENBQUMsMkJBQTJCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQy9DLENBQUM7WUFFRCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsS0FBSyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ25FLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUM7Z0JBQ2xGLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDaEMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsVUFBbUI7UUFDekMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztJQUNuRCxDQUFDO0lBc0JPLFlBQVk7UUFDbEIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDekIsQ0FBQztJQUNILENBQUM7SUFFTyxhQUFhLENBQUMsZ0JBQXdCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEtBQUs7UUFDNUUsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN0QixNQUFNLEtBQUssQ0FBQyx1RUFBdUUsQ0FBQyxDQUFDO1FBQ3ZGLENBQUM7UUFFRCxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBRWpDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDckYsVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7WUFDMUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7WUFFN0IsSUFBSSxDQUFDLGFBQWE7aUJBQ2YsTUFBTSxFQUFFO2lCQUNSLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7aUJBQ3pDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLFVBQVUsRUFBRSxDQUFDO29CQUNqQyxVQUFVLENBQUMsVUFBVSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3hELENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUVMLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzNCLENBQUM7UUFFRCxJQUFJLFVBQVUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1lBQzVDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQy9CLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1lBQ25DLElBQUksQ0FBQywwQkFBMEIsR0FBRyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztZQUNuRSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsVUFBVSxDQUFDLGFBQWEsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUMzRixDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUMvQixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUMvQixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztRQUU1QixJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksT0FBTyxLQUFLLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNqRCxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNqQyxDQUFDO0lBQ0gsQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixJQUFJLENBQUMsVUFBVSxFQUFFLGFBQWEsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3BELElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUM3QyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFFaEMsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN4QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNkLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxnQkFBZ0I7UUFDdEIsT0FBTyxJQUFJLGFBQWEsQ0FBQztZQUN2QixnQkFBZ0IsRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDM0MsY0FBYyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFO1lBQzFELEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFO1NBQzNCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxZQUFZO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLHFCQUFxQixFQUFFLENBQUMsS0FBSyxDQUFDO0lBQzdELENBQUM7SUFFTyxjQUFjO1FBQ3BCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO1FBQzNDLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUM7UUFDNUMsT0FBTyxhQUFhLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUM3RixDQUFDO0lBRU8sa0JBQWtCO1FBQ3hCLE1BQU0sU0FBUyxHQUFHO1lBQ2hCLElBQUksc0JBQXNCLENBQ3hCLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQ3ZDLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQ3ZDO1NBQ0YsQ0FBQztRQUVGLE9BQU8sSUFBSSxDQUFDLE9BQU87YUFDaEIsUUFBUSxFQUFFO2FBQ1YsbUJBQW1CLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2FBQzFDLGFBQWEsQ0FBQyxTQUFTLENBQUM7YUFDeEIsc0JBQXNCLENBQUMsS0FBSyxDQUFDO2FBQzdCLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRU8sZUFBZTtRQUNyQixNQUFNLGVBQWUsR0FBRyxDQUFDLENBQUM7UUFFMUIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM3RCxDQUFDO0lBQ0gsQ0FBQztJQUVPLElBQUk7UUFDVixJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRU8scUJBQXFCO1FBQzNCLE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUN4RixNQUFNLENBQUMsQ0FBQyxLQUFZLEVBQVcsRUFBRTtZQUMvQixNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsTUFBcUIsQ0FBQztZQUVoRCxPQUFPLENBQ0wsSUFBSSxDQUFDLGVBQWU7Z0JBQ3BCLFdBQVcsS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWE7Z0JBQzFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYTtnQkFDMUQsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVO2dCQUNqQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FDdEQsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRU8seUJBQXlCO1FBQy9CLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFZLENBQUMsS0FBSyxDQUFDO1FBRXRDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwRSxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVuRCxPQUFPLEtBQUssQ0FBQyxXQUFXLEVBQUUsYUFBYSxDQUFDO2FBQ3JDLElBQUksQ0FDSCxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUMvQixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUVqQyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDbkIsSUFBSSxDQUFDLFVBQVUsRUFBRSxjQUFjLEVBQUUsQ0FBQztnQkFFbEMsSUFBSSxPQUFPLEtBQUssSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO29CQUMvQixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztnQkFDbEMsQ0FBQztZQUNILENBQUM7WUFFRCxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztRQUNsQyxDQUFDLENBQUMsRUFDRixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQ1I7YUFDQSxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxLQUErQztRQUN0RSxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUU3QyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLDJCQUEyQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMzQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNyQyxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ25FLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QixDQUFDO1FBRUQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxLQUErQjtRQUN2RCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTlDLElBQUksS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUVELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVPLGVBQWUsQ0FBQyxLQUErQjtRQUNyRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFFRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3JELE9BQU8sSUFBSSxDQUFDLFdBQVcsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUUsS0FBZ0IsQ0FBQztJQUN0RixDQUFDO0lBRU8sc0JBQXNCLENBQUMsS0FBYTtRQUMxQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRU8sY0FBYztRQUNwQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxlQUFlLElBQUksQ0FBQyxDQUFDO1FBRWhFLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25DLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxpQkFBaUIsR0FBRyxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDbkQsQ0FBQztJQUNILENBQUM7SUFFTyxlQUFlLENBQUMsS0FBYTtRQUNuQyxNQUFNLFVBQVUsR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO1FBRS9CLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUM7UUFDOUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxVQUFVLENBQUM7SUFDbEMsQ0FBQztJQUVPLDJCQUEyQixDQUNqQyxJQUF1RSxFQUN2RSxTQUFtQjtRQUVuQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ3pDLElBQUksTUFBTSxLQUFLLElBQUksSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3ZDLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDN0IsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLE9BQU87UUFDYixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQztRQUMzQyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7SUFDaEQsQ0FBQztJQUVPLFNBQVM7UUFDZixPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBVyxJQUFJLE1BQU0sQ0FBQztJQUM5QyxDQUFDOzhHQXBkVSxvQkFBb0I7a0dBQXBCLG9CQUFvQiwweEJBUnBCO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQztnQkFDbkQsS0FBSyxFQUFFLElBQUk7YUFDWjtTQUNGOzsyRkFFVSxvQkFBb0I7a0JBMUJoQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxpREFBaUQ7b0JBQzNELFFBQVEsRUFBRSx1QkFBdUI7b0JBQ2pDLFVBQVUsRUFBRSxJQUFJO29CQUNoQixJQUFJLEVBQUU7d0JBQ0osYUFBYSxFQUFFLFlBQVk7d0JBQzNCLHFCQUFxQixFQUFFLE9BQU87d0JBQzlCLDBCQUEwQixFQUFFLFFBQVE7d0JBQ3BDLDhCQUE4QixFQUFFLHNEQUFzRDt3QkFDdEYsc0JBQXNCLEVBQUUsc0JBQXNCO3dCQUM5QyxrQkFBa0IsRUFBRSwwQ0FBMEM7d0JBQzlELHNCQUFzQixFQUFFLFFBQVE7d0JBQ2hDLFNBQVMsRUFBRSxlQUFlO3dCQUMxQixRQUFRLEVBQUUsYUFBYTt3QkFDdkIsU0FBUyxFQUFFLHFCQUFxQjt3QkFDaEMsV0FBVyxFQUFFLHVCQUF1Qjt3QkFDcEMsU0FBUyxFQUFFLGVBQWU7cUJBQzNCO29CQUNELFNBQVMsRUFBRTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxxQkFBcUIsQ0FBQzs0QkFDbkQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQgbWF4LWxpbmVzOiBvZmYgKi9cblxuLy8gQmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY29tcG9uZW50cy90cmVlL21haW4vc3JjL21hdGVyaWFsL2F1dG9jb21wbGV0ZVxuXG5pbXBvcnQgeyBoYXNNb2RpZmllcktleSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQge1xuICBDb25uZWN0aW9uUG9zaXRpb25QYWlyLFxuICBGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3ksXG4gIE92ZXJsYXksXG4gIE92ZXJsYXlDb25maWcsXG4gIE92ZXJsYXlSZWYsXG4gIFZpZXdwb3J0UnVsZXIsXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IFRlbXBsYXRlUG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgRGVzdHJveVJlZixcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBmb3J3YXJkUmVmLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBOZ1pvbmUsXG4gIE9uRGVzdHJveSxcbiAgb3V0cHV0LFxuICBWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIGRlZmVyLFxuICBkZWxheSxcbiAgZmlsdGVyLFxuICBmcm9tRXZlbnQsXG4gIG1hcCxcbiAgbWVyZ2UsXG4gIE9ic2VydmFibGUsXG4gIG9mLFxuICBTdWJqZWN0LFxuICBTdWJzY3JpcHRpb24sXG4gIHN3aXRjaE1hcCxcbiAgdGFrZSxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBdXRvc3VnZ2VzdEFkZE9wdGlvbkNvbXBvbmVudCB9IGZyb20gJy4vYXV0b3N1Z2dlc3QtYWRkLW9wdGlvbic7XG5pbXBvcnQge1xuICBBdXRvY29tcGxldGVPcHRpb25TZWxlY3Rpb25DaGFuZ2UsXG4gIEF1dG9zdWdnZXN0T3B0aW9uQ29tcG9uZW50LFxufSBmcm9tICcuL2F1dG9zdWdnZXN0LW9wdGlvbi9hdXRvc3VnZ2VzdC1vcHRpb24uY29tcG9uZW50JztcbmltcG9ydCB7IEF1dG9zdWdnZXN0UGFuZWxDb21wb25lbnQgfSBmcm9tICcuL2F1dG9zdWdnZXN0LXBhbmVsL2F1dG9zdWdnZXN0LXBhbmVsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJTlBVVF9DT05UQUlORVJfQ0xBU1MgfSBmcm9tICcuLi9mb3JtLWZpZWxkLmNvbnN0YW50JztcbmltcG9ydCB7IEF1dG9zdWdnZXN0T3B0aW9uIH0gZnJvbSAnLi9hdXRvc3VnZ2VzdC1vcHRpb24vYXV0b3N1Z2dlc3Qtb3B0aW9uLm1vZGVsJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnaW5wdXRbbmR3QXV0b3N1Z2dlc3RdLCB0ZXh0YXJlYVtuZHdBdXRvc3VnZ2VzdF0nLFxuICBleHBvcnRBczogJ25kd0F1dG9zdWdnZXN0VHJpZ2dlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGhvc3Q6IHtcbiAgICAnW2F0dHIucm9sZV0nOiAnXCJjb21ib2JveFwiJyxcbiAgICAnW2F0dHIuYXV0b2NvbXBsZXRlXSc6ICdcIm9mZlwiJyxcbiAgICAnW2F0dHIuYXJpYS1hdXRvY29tcGxldGVdJzogJ1wibGlzdFwiJyxcbiAgICAnW2F0dHIuYXJpYS1hY3RpdmVkZXNjZW5kYW50XSc6ICcocGFuZWxPcGVuICYmIGFjdGl2ZU9wdGlvbikgPyBhY3RpdmVPcHRpb24uaWQgOiBudWxsJyxcbiAgICAnW2F0dHIuYXJpYS1leHBhbmRlZF0nOiAncGFuZWxPcGVuLnRvU3RyaW5nKCknLFxuICAgICdbYXR0ci5hcmlhLW93bnNdJzogJyFwYW5lbE9wZW4gPyBudWxsIDogbmR3QXV0b3N1Z2dlc3QoKT8uaWQnLFxuICAgICdbYXR0ci5hcmlhLWhhc3BvcHVwXSc6ICdcInRydWVcIicsXG4gICAgJyhmb2N1cyknOiAnaGFuZGxlRm9jdXMoKScsXG4gICAgJyhibHVyKSc6ICdvblRvdWNoZWQoKScsXG4gICAgJyhpbnB1dCknOiAnaGFuZGxlSW5wdXQoJGV2ZW50KScsXG4gICAgJyhrZXlkb3duKSc6ICdoYW5kbGVLZXlkb3duKCRldmVudCknLFxuICAgICcoY2xpY2spJzogJ2hhbmRsZUNsaWNrKCknLFxuICB9LFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEF1dG9zdWdnZXN0RGlyZWN0aXZlKSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEF1dG9zdWdnZXN0RGlyZWN0aXZlIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIHB1YmxpYyByZWFkb25seSBuZHdBdXRvc3VnZ2VzdCA9IGlucHV0LnJlcXVpcmVkPEF1dG9zdWdnZXN0UGFuZWxDb21wb25lbnQ+KCk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGZpbHRlciA9IG91dHB1dDxzdHJpbmc+KCk7XG5cbiAgcHJpdmF0ZSBvdmVybGF5QXR0YWNoZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBvdmVybGF5UmVmOiBPdmVybGF5UmVmIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcG9ydGFsOiBUZW1wbGF0ZVBvcnRhbCB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBwcmV2aW91c1ZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIGNsb3NpbmdBY3Rpb25zU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUga2V5ZG93blN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIGNhbk9wZW5Pbk5leHRGb2N1cyA9IHRydWU7XG4gIHByaXZhdGUgdmFsdWVPbkF0dGFjaDogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgdmFsdWVPbkxhc3RLZXlkb3duOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBjbG9zZUtleUV2ZW50U3RyZWFtID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHpvbmUgPSBpbmplY3QoTmdab25lKTtcbiAgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50ID0gaW5qZWN0PEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD4+KEVsZW1lbnRSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IHZpZXdDb250YWluZXJSZWYgPSBpbmplY3QoVmlld0NvbnRhaW5lclJlZik7XG4gIHByaXZhdGUgcmVhZG9ubHkgb3ZlcmxheSA9IGluamVjdChPdmVybGF5KTtcbiAgcHJpdmF0ZSByZWFkb25seSBjaGFuZ2VEZXRlY3RvclJlZiA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuICBwcml2YXRlIHJlYWRvbmx5IHZpZXdwb3J0UnVsZXIgPSBpbmplY3QoVmlld3BvcnRSdWxlcik7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICBwdWJsaWMgZ2V0IHBhbmVsT3BlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5vdmVybGF5QXR0YWNoZWQgJiYgISF0aGlzLmF1dG9zdWdnZXN0Py5zaG93UGFuZWw7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGFjdGl2ZU9wdGlvbigpOiBBdXRvc3VnZ2VzdE9wdGlvbkNvbXBvbmVudCB8IEF1dG9zdWdnZXN0QWRkT3B0aW9uQ29tcG9uZW50IHwgbnVsbCB7XG4gICAgY29uc3Qga2V5TWFuYWdlciA9IHRoaXMuYXV0b3N1Z2dlc3Q/LmtleU1hbmFnZXI7XG4gICAgcmV0dXJuIGtleU1hbmFnZXI/LmFjdGl2ZUl0ZW0gPz8gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYXV0b3N1Z2dlc3QoKTogQXV0b3N1Z2dlc3RQYW5lbENvbXBvbmVudCB7XG4gICAgcmV0dXJuIHRoaXMubmR3QXV0b3N1Z2dlc3QoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHBhbmVsQ2xvc2luZ0FjdGlvbnMoKTogT2JzZXJ2YWJsZTxBdXRvY29tcGxldGVPcHRpb25TZWxlY3Rpb25DaGFuZ2UgfCBudWxsPiB7XG4gICAgcmV0dXJuIG1lcmdlKFxuICAgICAgdGhpcy5vcHRpb25TZWxlY3Rpb25zLFxuICAgICAgdGhpcy5hdXRvc3VnZ2VzdCEua2V5TWFuYWdlciEudGFiT3V0LnBpcGUoZmlsdGVyKCgpID0+IHRoaXMub3ZlcmxheUF0dGFjaGVkKSksXG4gICAgICB0aGlzLmNsb3NlS2V5RXZlbnRTdHJlYW0sXG4gICAgICB0aGlzLmdldE91dHNpZGVDbGlja1N0cmVhbSgpLFxuICAgICAgdGhpcy5vdmVybGF5UmVmXG4gICAgICAgID8gdGhpcy5vdmVybGF5UmVmLmRldGFjaG1lbnRzKCkucGlwZShmaWx0ZXIoKCkgPT4gdGhpcy5vdmVybGF5QXR0YWNoZWQpKVxuICAgICAgICA6IG9mKCksXG4gICAgKS5waXBlKG1hcCgoZXZlbnQpID0+IChldmVudCBpbnN0YW5jZW9mIEF1dG9jb21wbGV0ZU9wdGlvblNlbGVjdGlvbkNoYW5nZSA/IGV2ZW50IDogbnVsbCkpKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uU2VsZWN0aW9uczogT2JzZXJ2YWJsZTxBdXRvY29tcGxldGVPcHRpb25TZWxlY3Rpb25DaGFuZ2U+ID0gZGVmZXIoKCkgPT4ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmF1dG9zdWdnZXN0Lml0ZW1zO1xuXG4gICAgaWYgKHRoaXMuYXV0b3N1Z2dlc3QgJiYgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIG1lcmdlKC4uLm9wdGlvbnMubWFwKChvcHRpb24pID0+IG9wdGlvbi5zZWxlY3Rpb25DaGFuZ2UpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy56b25lLm9uU3RhYmxlLmFzT2JzZXJ2YWJsZSgpLnBpcGUoXG4gICAgICB0YWtlKDEpLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMub3B0aW9uU2VsZWN0aW9ucyksXG4gICAgKTtcbiAgfSk7XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBjb25zdCB3aW5kb3cgPSB0aGlzLmdldFdpbmRvdygpO1xuXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIHRoaXMud2luZG93Qmx1ckhhbmRsZXIpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGNvbnN0IHdpbmRvdyA9IHRoaXMuZ2V0V2luZG93KCk7XG5cbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdibHVyJywgdGhpcy53aW5kb3dCbHVySGFuZGxlcik7XG4gICAgfVxuXG4gICAgdGhpcy5jbG9zaW5nQWN0aW9uc1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmtleWRvd25TdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jbG9zZUtleUV2ZW50U3RyZWFtLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5kZXN0cm95UGFuZWwoKTtcbiAgfVxuXG4gIHB1YmxpYyBvcGVuUGFuZWwodmFsdWVPbkF0dGFjaDogc3RyaW5nID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUpOiB2b2lkIHtcbiAgICB0aGlzLmF0dGFjaE92ZXJsYXkodmFsdWVPbkF0dGFjaCk7XG4gIH1cblxuICBwdWJsaWMgY2xvc2VQYW5lbCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMub3ZlcmxheUF0dGFjaGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGFuZWxPcGVuKSB7XG4gICAgICB0aGlzLmF1dG9zdWdnZXN0LmNsb3NlZD8uZW1pdCgpO1xuICAgIH1cblxuICAgIHRoaXMuYXV0b3N1Z2dlc3QhLmlzT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMub3ZlcmxheUF0dGFjaGVkID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5vdmVybGF5UmVmPy5oYXNBdHRhY2hlZCgpKSB7XG4gICAgICB0aGlzLm92ZXJsYXlSZWYuZGV0YWNoKCk7XG4gICAgICB0aGlzLmNsb3NpbmdBY3Rpb25zU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5rZXlkb3duU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgLy8gRGlzcGF0Y2ggYW4gaW5wdXQgZXZlbnQgdG8gdHJpZ2dlciB0aGUgZm9ybS1maWVsZCBjb21wb25lbnQgY2hhbmdlIGRldGVjdGlvbi5cbiAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnaW5wdXQnKSk7XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlRm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXIuZW1pdCh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSk7XG5cbiAgICBpZiAoIXRoaXMuY2FuT3Blbk9uTmV4dEZvY3VzKSB7XG4gICAgICB0aGlzLmNhbk9wZW5Pbk5leHRGb2N1cyA9IHRydWU7XG4gICAgICB0aGlzLmJsdXIoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY2FuT3BlbigpKSB7XG4gICAgICB0aGlzLnByZXZpb3VzVmFsdWUgPSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZTtcbiAgICAgIHRoaXMuYXR0YWNoT3ZlcmxheSh0aGlzLnByZXZpb3VzVmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiB1bmtub3duKTogdm9pZCB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKG51bGwpLnRoZW4oKCkgPT4gdGhpcy5zZXRUcmlnZ2VyVmFsdWUodmFsdWUgYXMgc3RyaW5nKSk7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiB1bmtub3duKSA9PiB1bmtub3duKTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB1bmtub3duKTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhclZhbHVlKCk6IHZvaWQge1xuICAgIHRoaXMud3JpdGVWYWx1ZSgnJyk7XG4gICAgdGhpcy5vbkNoYW5nZSgnJyk7XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlQ2xpY2soKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2FuT3BlbigpICYmICF0aGlzLnBhbmVsT3Blbikge1xuICAgICAgdGhpcy5vcGVuUGFuZWwoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGNvZGUgPSBldmVudC5jb2RlO1xuXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdGhpcy52YWx1ZU9uTGFzdEtleWRvd24gPSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICh0aGlzLmFjdGl2ZU9wdGlvbiAmJiBjb2RlID09PSAnRW50ZXInICYmIHRoaXMucGFuZWxPcGVuKSB7XG4gICAgICB0aGlzLmFjdGl2ZU9wdGlvbi5zZWxlY3RWaWFJbnRlcmFjdGlvbigpO1xuICAgICAgdGhpcy5yZXNldEFjdGl2ZUl0ZW0oKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmF1dG9zdWdnZXN0KSB7XG4gICAgICBjb25zdCBwcmV2QWN0aXZlSXRlbSA9IHRoaXMuYXV0b3N1Z2dlc3Qua2V5TWFuYWdlcj8uYWN0aXZlSXRlbTtcbiAgICAgIGNvbnN0IGlzQXJyb3dLZXkgPSBjb2RlID09PSAnQXJyb3dVcCcgfHwgY29kZSA9PT0gJ0Fycm93RG93bic7XG5cbiAgICAgIGlmIChjb2RlID09PSAnVGFiJyB8fCAoaXNBcnJvd0tleSAmJiB0aGlzLnBhbmVsT3BlbikpIHtcbiAgICAgICAgdGhpcy5hdXRvc3VnZ2VzdC5rZXlNYW5hZ2VyPy5vbktleWRvd24oZXZlbnQpO1xuICAgICAgfSBlbHNlIGlmIChpc0Fycm93S2V5ICYmIHRoaXMuY2FuT3BlbigpKSB7XG4gICAgICAgIHRoaXMub3BlblBhbmVsKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0Fycm93S2V5IHx8IHRoaXMuYXV0b3N1Z2dlc3Qua2V5TWFuYWdlcj8uYWN0aXZlSXRlbSAhPT0gcHJldkFjdGl2ZUl0ZW0pIHtcbiAgICAgICAgdGhpcy5zY3JvbGxUb09wdGlvbigpO1xuXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZU9wdGlvbikge1xuICAgICAgICAgIHRoaXMuYXNzaWduT3B0aW9uVmFsdWUodGhpcy5hY3RpdmVPcHRpb24udmFsdWUoKSA/PyBudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBoYW5kbGVJbnB1dChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGxldCB2YWx1ZTogbnVtYmVyIHwgc3RyaW5nIHwgbnVsbCA9IHRhcmdldC52YWx1ZTtcbiAgICB0aGlzLmZpbHRlci5lbWl0KHZhbHVlKTtcbiAgICB0aGlzLmF1dG9zdWdnZXN0LnNlYXJjaFRlcm0uc2V0KHZhbHVlKTtcblxuICAgIC8vIEJhc2VkIG9uIGBOdW1iZXJWYWx1ZUFjY2Vzc29yYCBmcm9tIGZvcm1zLlxuICAgIGlmICh0YXJnZXQudHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUgPT09ICcnID8gbnVsbCA6IHBhcnNlRmxvYXQodmFsdWUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnByZXZpb3VzVmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLnByZXZpb3VzVmFsdWUgPSB2YWx1ZTtcblxuICAgICAgaWYgKCF0aGlzLmF1dG9zdWdnZXN0KSB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgIHRoaXMuY2xlYXJQcmV2aW91c1NlbGVjdGVkT3B0aW9uKG51bGwsIHRydWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5jYW5PcGVuKCkgJiYgdGhpcy5kb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBldmVudC50YXJnZXQpIHtcbiAgICAgICAgY29uc3QgdmFsdWVPbkF0dGFjaCA9IHRoaXMudmFsdWVPbkxhc3RLZXlkb3duID8/IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlO1xuICAgICAgICB0aGlzLnZhbHVlT25MYXN0S2V5ZG93biA9IG51bGw7XG4gICAgICAgIHRoaXMub3BlblBhbmVsKHZhbHVlT25BdHRhY2gpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IGhhbmRsZVBhbmVsS2V5ZG93biA9IChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQgPT4ge1xuICAgIGlmIChcbiAgICAgIChldmVudC5rZXkgPT09ICdFc2NhcGUnICYmICFoYXNNb2RpZmllcktleShldmVudCkpIHx8XG4gICAgICAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcgJiYgaGFzTW9kaWZpZXJLZXkoZXZlbnQsICdhbHRLZXknKSlcbiAgICApIHtcbiAgICAgIHRoaXMuY2xvc2VLZXlFdmVudFN0cmVhbS5uZXh0KCk7XG4gICAgICB0aGlzLnJlc2V0QWN0aXZlSXRlbSgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHdpbmRvd0JsdXJIYW5kbGVyID0gKCk6IHZvaWQgPT4ge1xuICAgIHRoaXMuY2FuT3Blbk9uTmV4dEZvY3VzID1cbiAgICAgIHRoaXMuZG9jdW1lbnQ/LmFjdGl2ZUVsZW1lbnQgIT09IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50IHx8IHRoaXMucGFuZWxPcGVuO1xuICB9O1xuXG4gIHB1YmxpYyBvbkNoYW5nZTogKHZhbHVlOiB1bmtub3duKSA9PiB2b2lkID0gKCkgPT4ge307XG4gIHB1YmxpYyBvblRvdWNoZWQgPSAoKTogdm9pZCA9PiB7fTtcblxuICBwcml2YXRlIGRlc3Ryb3lQYW5lbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vdmVybGF5UmVmKSB7XG4gICAgICB0aGlzLmNsb3NlUGFuZWwoKTtcbiAgICAgIHRoaXMub3ZlcmxheVJlZi5kaXNwb3NlKCk7XG4gICAgICB0aGlzLm92ZXJsYXlSZWYgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXR0YWNoT3ZlcmxheSh2YWx1ZU9uQXR0YWNoOiBzdHJpbmcgPSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5hdXRvc3VnZ2VzdCkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0Nhbm5vdCBvcGVuIGF1dG9zdWdnZXN0IHBhbmVsIGJlY2F1c2UgdGhlIGF1dG9zdWdnZXN0IGlzIG5vdCBkZWZpbmVkLicpO1xuICAgIH1cblxuICAgIGxldCBvdmVybGF5UmVmID0gdGhpcy5vdmVybGF5UmVmO1xuXG4gICAgaWYgKCFvdmVybGF5UmVmKSB7XG4gICAgICB0aGlzLnBvcnRhbCA9IG5ldyBUZW1wbGF0ZVBvcnRhbCh0aGlzLmF1dG9zdWdnZXN0LnRlbXBsYXRlKCksIHRoaXMudmlld0NvbnRhaW5lclJlZik7XG4gICAgICBvdmVybGF5UmVmID0gdGhpcy5vdmVybGF5LmNyZWF0ZSh0aGlzLmdldE92ZXJsYXlDb25maWcoKSk7XG4gICAgICB0aGlzLm92ZXJsYXlSZWYgPSBvdmVybGF5UmVmO1xuXG4gICAgICB0aGlzLnZpZXdwb3J0UnVsZXJcbiAgICAgICAgLmNoYW5nZSgpXG4gICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5wYW5lbE9wZW4gJiYgb3ZlcmxheVJlZikge1xuICAgICAgICAgICAgb3ZlcmxheVJlZi51cGRhdGVTaXplKHsgd2lkdGg6IHRoaXMuZ2V0SG9zdFdpZHRoKCkgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgdGhpcy5pbml0S2V5ZG93bkV2ZW50cygpO1xuICAgIH1cblxuICAgIGlmIChvdmVybGF5UmVmICYmICFvdmVybGF5UmVmLmhhc0F0dGFjaGVkKCkpIHtcbiAgICAgIG92ZXJsYXlSZWYuYXR0YWNoKHRoaXMucG9ydGFsKTtcbiAgICAgIHRoaXMudmFsdWVPbkF0dGFjaCA9IHZhbHVlT25BdHRhY2g7XG4gICAgICB0aGlzLmNsb3NpbmdBY3Rpb25zU3Vic2NyaXB0aW9uID0gdGhpcy5zdWJzY3JpYmVUb0Nsb3NpbmdBY3Rpb25zKCk7XG4gICAgICB0aGlzLmtleWRvd25TdWJzY3JpcHRpb24gPSBvdmVybGF5UmVmLmtleWRvd25FdmVudHMoKS5zdWJzY3JpYmUodGhpcy5oYW5kbGVQYW5lbEtleWRvd24pO1xuICAgIH1cblxuICAgIGNvbnN0IHdhc09wZW4gPSB0aGlzLnBhbmVsT3BlbjtcbiAgICB0aGlzLmF1dG9zdWdnZXN0LnNldFZpc2liaWxpdHkoKTtcbiAgICB0aGlzLmF1dG9zdWdnZXN0LmlzT3BlbiA9IHRydWU7XG4gICAgdGhpcy5vdmVybGF5QXR0YWNoZWQgPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMucGFuZWxPcGVuICYmIHdhc09wZW4gIT09IHRoaXMucGFuZWxPcGVuKSB7XG4gICAgICB0aGlzLmF1dG9zdWdnZXN0Lm9wZW5lZC5lbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0S2V5ZG93bkV2ZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLm92ZXJsYXlSZWY/LmtleWRvd25FdmVudHMoKT8uc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgaWYgKGV2ZW50LmNvZGUgPT09ICdBcnJvd1VwJyAmJiBldmVudC5hbHRLZXkpIHtcbiAgICAgICAgdGhpcy5yZXNldEFjdGl2ZUl0ZW0oKTtcbiAgICAgICAgdGhpcy5jbG9zZUtleUV2ZW50U3RyZWFtLm5leHQoKTtcblxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5ibHVyKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldE92ZXJsYXlDb25maWcoKTogT3ZlcmxheUNvbmZpZyB7XG4gICAgcmV0dXJuIG5ldyBPdmVybGF5Q29uZmlnKHtcbiAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IHRoaXMuZ2V0T3ZlcmxheVBvc2l0aW9uKCksXG4gICAgICBzY3JvbGxTdHJhdGVneTogdGhpcy5vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpLFxuICAgICAgd2lkdGg6IHRoaXMuZ2V0SG9zdFdpZHRoKCksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldEhvc3RXaWR0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmJpbmRpbmdFbGVtZW50KCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gIH1cblxuICBwcml2YXRlIGJpbmRpbmdFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgcGFyZW50RWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICByZXR1cm4gcGFyZW50RWxlbWVudD8uY2xhc3NMaXN0Py5jb250YWlucyhJTlBVVF9DT05UQUlORVJfQ0xBU1MpID8gcGFyZW50RWxlbWVudCA6IGVsZW1lbnQ7XG4gIH1cblxuICBwcml2YXRlIGdldE92ZXJsYXlQb3NpdGlvbigpOiBGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3kge1xuICAgIGNvbnN0IHBvc2l0aW9ucyA9IFtcbiAgICAgIG5ldyBDb25uZWN0aW9uUG9zaXRpb25QYWlyKFxuICAgICAgICB7IG9yaWdpblg6ICdzdGFydCcsIG9yaWdpblk6ICdib3R0b20nIH0sXG4gICAgICAgIHsgb3ZlcmxheVg6ICdzdGFydCcsIG92ZXJsYXlZOiAndG9wJyB9LFxuICAgICAgKSxcbiAgICBdO1xuXG4gICAgcmV0dXJuIHRoaXMub3ZlcmxheVxuICAgICAgLnBvc2l0aW9uKClcbiAgICAgIC5mbGV4aWJsZUNvbm5lY3RlZFRvKHRoaXMuYmluZGluZ0VsZW1lbnQoKSlcbiAgICAgIC53aXRoUG9zaXRpb25zKHBvc2l0aW9ucylcbiAgICAgIC53aXRoRmxleGlibGVEaW1lbnNpb25zKGZhbHNlKVxuICAgICAgLndpdGhQdXNoKGZhbHNlKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRBY3RpdmVJdGVtKCk6IHZvaWQge1xuICAgIGNvbnN0IGFjdGl2ZUl0ZW1JbmRleCA9IDA7XG5cbiAgICBpZiAodGhpcy5hdXRvc3VnZ2VzdC5rZXlNYW5hZ2VyKSB7XG4gICAgICB0aGlzLmF1dG9zdWdnZXN0LmtleU1hbmFnZXIuc2V0QWN0aXZlSXRlbShhY3RpdmVJdGVtSW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYmx1cigpOiB2b2lkIHtcbiAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5ibHVyKCk7XG4gIH1cblxuICBwcml2YXRlIGdldE91dHNpZGVDbGlja1N0cmVhbSgpOiBPYnNlcnZhYmxlPEV2ZW50PiB7XG4gICAgcmV0dXJuIG1lcmdlKGZyb21FdmVudCh0aGlzLmRvY3VtZW50LCAnY2xpY2snKSwgZnJvbUV2ZW50KHRoaXMuZG9jdW1lbnQsICd0b3VjaGVuZCcpKS5waXBlKFxuICAgICAgZmlsdGVyKChldmVudDogRXZlbnQpOiBib29sZWFuID0+IHtcbiAgICAgICAgY29uc3QgY2xpY2tUYXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICB0aGlzLm92ZXJsYXlBdHRhY2hlZCAmJlxuICAgICAgICAgIGNsaWNrVGFyZ2V0ICE9PSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCAmJlxuICAgICAgICAgIHRoaXMuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgJiZcbiAgICAgICAgICAhIXRoaXMub3ZlcmxheVJlZiAmJlxuICAgICAgICAgICF0aGlzLm92ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQuY29udGFpbnMoY2xpY2tUYXJnZXQpXG4gICAgICAgICk7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb0Nsb3NpbmdBY3Rpb25zKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmF1dG9zdWdnZXN0IS5pdGVtcztcblxuICAgIGNvbnN0IGZpcnN0U3RhYmxlID0gdGhpcy56b25lLm9uU3RhYmxlLmFzT2JzZXJ2YWJsZSgpLnBpcGUodGFrZSgxKSk7XG4gICAgY29uc3Qgb3B0aW9uQ2hhbmdlcyA9IGl0ZW1zLmNoYW5nZXMucGlwZShkZWxheSgwKSk7XG5cbiAgICByZXR1cm4gbWVyZ2UoZmlyc3RTdGFibGUsIG9wdGlvbkNoYW5nZXMpXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgICBjb25zdCB3YXNPcGVuID0gdGhpcy5wYW5lbE9wZW47XG4gICAgICAgICAgdGhpcy5yZXNldEFjdGl2ZUl0ZW0oKTtcbiAgICAgICAgICB0aGlzLmF1dG9zdWdnZXN0LnNldFZpc2liaWxpdHkoKTtcblxuICAgICAgICAgIGlmICh0aGlzLnBhbmVsT3Blbikge1xuICAgICAgICAgICAgdGhpcy5vdmVybGF5UmVmPy51cGRhdGVQb3NpdGlvbigpO1xuXG4gICAgICAgICAgICBpZiAod2FzT3BlbiAhPT0gdGhpcy5wYW5lbE9wZW4pIHtcbiAgICAgICAgICAgICAgdGhpcy5hdXRvc3VnZ2VzdC5vcGVuZWQ/LmVtaXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdGhpcy5wYW5lbENsb3NpbmdBY3Rpb25zO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB0aGlzLnNldFZhbHVlQW5kQ2xvc2UoZXZlbnQpKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0VmFsdWVBbmRDbG9zZShldmVudDogQXV0b2NvbXBsZXRlT3B0aW9uU2VsZWN0aW9uQ2hhbmdlIHwgbnVsbCk6IHZvaWQge1xuICAgIGNvbnN0IHRvU2VsZWN0ID0gZXZlbnQgPyBldmVudC5zb3VyY2UgOiBudWxsO1xuXG4gICAgaWYgKHRvU2VsZWN0KSB7XG4gICAgICB0aGlzLmNsZWFyUHJldmlvdXNTZWxlY3RlZE9wdGlvbih0b1NlbGVjdCk7XG4gICAgICB0aGlzLm9uQ2hhbmdlKHRvU2VsZWN0LnZhbHVlKCkpO1xuICAgICAgdGhpcy5hc3NpZ25PcHRpb25WYWx1ZSh0b1NlbGVjdC52YWx1ZSgpID8/IG51bGwpO1xuICAgICAgdGhpcy5hdXRvc3VnZ2VzdC5lbWl0U2VsZWN0RXZlbnQodG9TZWxlY3QpO1xuICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlICE9PSB0aGlzLnZhbHVlT25BdHRhY2gpIHtcbiAgICAgIHRoaXMuY2xlYXJQcmV2aW91c1NlbGVjdGVkT3B0aW9uKG51bGwpO1xuICAgICAgdGhpcy5hc3NpZ25PcHRpb25WYWx1ZShudWxsKTtcbiAgICAgIHRoaXMub25DaGFuZ2UobnVsbCk7XG4gICAgfVxuXG4gICAgdGhpcy5jbG9zZVBhbmVsKCk7XG4gIH1cblxuICBwcml2YXRlIGFzc2lnbk9wdGlvblZhbHVlKHZhbHVlOiBBdXRvc3VnZ2VzdE9wdGlvbiB8IG51bGwpOiB2b2lkIHtcbiAgICBjb25zdCB0b0Rpc3BsYXkgPSB0aGlzLmdldERpc3BsYXlWYWx1ZSh2YWx1ZSk7XG5cbiAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgdGhpcy5jbGVhclByZXZpb3VzU2VsZWN0ZWRPcHRpb24obnVsbCwgZmFsc2UpO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlTmF0aXZlSW5wdXRWYWx1ZSh0b0Rpc3BsYXkgPz8gJycpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREaXNwbGF5VmFsdWUodmFsdWU6IEF1dG9zdWdnZXN0T3B0aW9uIHwgbnVsbCk6IHN0cmluZyB7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IGRpc3BsYXlXaXRoRm4gPSB0aGlzLmF1dG9zdWdnZXN0LmRpc3BsYXlXaXRoKCk7XG4gICAgcmV0dXJuIHRoaXMuYXV0b3N1Z2dlc3QgJiYgZGlzcGxheVdpdGhGbiA/IGRpc3BsYXlXaXRoRm4odmFsdWUpIDogKHZhbHVlIGFzIHN0cmluZyk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU5hdGl2ZUlucHV0VmFsdWUodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5wcmV2aW91c1ZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgc2Nyb2xsVG9PcHRpb24oKTogdm9pZCB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmF1dG9zdWdnZXN0LmtleU1hbmFnZXI/LmFjdGl2ZUl0ZW1JbmRleCA/PyAwO1xuXG4gICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICB0aGlzLmF1dG9zdWdnZXN0LnNldFNjcm9sbFRvcCgwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbmV3U2Nyb2xsUG9zaXRpb24gPSBpbmRleCAqIDI2O1xuICAgICAgdGhpcy5hdXRvc3VnZ2VzdC5zZXRTY3JvbGxUb3AobmV3U2Nyb2xsUG9zaXRpb24pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0VHJpZ2dlclZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBpbnB1dFZhbHVlID0gdmFsdWUgPz8gJyc7XG5cbiAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSA9IGlucHV0VmFsdWU7XG4gICAgdGhpcy5wcmV2aW91c1ZhbHVlID0gaW5wdXRWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJQcmV2aW91c1NlbGVjdGVkT3B0aW9uKFxuICAgIHNraXA6IEF1dG9zdWdnZXN0T3B0aW9uQ29tcG9uZW50IHwgQXV0b3N1Z2dlc3RBZGRPcHRpb25Db21wb25lbnQgfCBudWxsLFxuICAgIGVtaXRFdmVudD86IGJvb2xlYW4sXG4gICk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UobnVsbCk7XG4gICAgdGhpcy5hdXRvc3VnZ2VzdC5pdGVtcz8uZm9yRWFjaCgob3B0aW9uKSA9PiB7XG4gICAgICBpZiAob3B0aW9uICE9PSBza2lwICYmIG9wdGlvbi5zZWxlY3RlZCkge1xuICAgICAgICBvcHRpb24uZGVzZWxlY3QoZW1pdEV2ZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2FuT3BlbigpOiBib29sZWFuIHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgcmV0dXJuICFlbGVtZW50LnJlYWRPbmx5ICYmICFlbGVtZW50LmRpc2FibGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRXaW5kb3coKTogV2luZG93IHtcbiAgICByZXR1cm4gdGhpcy5kb2N1bWVudD8uZGVmYXVsdFZpZXcgPz8gd2luZG93O1xuICB9XG59XG4iXX0=
@@ -1,6 +0,0 @@
1
- export * from './autosuggest.directive';
2
- export * from './autosuggest-option/autosuggest-option.model';
3
- export * from './autosuggest-option/autosuggest-option.component';
4
- export * from './autosuggest-panel/autosuggest-panel.component';
5
- export * from './autosuggest-add-option/autosuggest-add-option.component';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZHcvc3JjL2NvbXBvbmVudHMvZm9ybS1maWVsZC9hdXRvc3VnZ2VzdC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsK0NBQStDLENBQUM7QUFDOUQsY0FBYyxtREFBbUQsQ0FBQztBQUNsRSxjQUFjLGlEQUFpRCxDQUFDO0FBQ2hFLGNBQWMsMkRBQTJELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2F1dG9zdWdnZXN0LmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2F1dG9zdWdnZXN0LW9wdGlvbi9hdXRvc3VnZ2VzdC1vcHRpb24ubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9hdXRvc3VnZ2VzdC1vcHRpb24vYXV0b3N1Z2dlc3Qtb3B0aW9uLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2F1dG9zdWdnZXN0LXBhbmVsL2F1dG9zdWdnZXN0LXBhbmVsLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2F1dG9zdWdnZXN0LWFkZC1vcHRpb24vYXV0b3N1Z2dlc3QtYWRkLW9wdGlvbi5jb21wb25lbnQnO1xuIl19
@@ -1,21 +0,0 @@
1
- import { Pipe } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export class MatchBoldPipe {
4
- transform(value, searchTerm) {
5
- if (!searchTerm || typeof value !== 'string') {
6
- return `${value}`;
7
- }
8
- const regex = new RegExp(`(${searchTerm})`, 'gi');
9
- return value.replace(regex, '<b>$1</b>');
10
- }
11
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: MatchBoldPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
12
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.1", ngImport: i0, type: MatchBoldPipe, isStandalone: true, name: "matchBold" }); }
13
- }
14
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: MatchBoldPipe, decorators: [{
15
- type: Pipe,
16
- args: [{
17
- name: 'matchBold',
18
- standalone: true,
19
- }]
20
- }] });
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0Y2gtYm9sZC5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmR3L3NyYy9jb21wb25lbnRzL2Zvcm0tZmllbGQvYXV0b3N1Z2dlc3QvbWF0Y2gtYm9sZC5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDOztBQU1wRCxNQUFNLE9BQU8sYUFBYTtJQUNqQixTQUFTLENBQUMsS0FBYyxFQUFFLFVBQWtCO1FBQ2pELElBQUksQ0FBQyxVQUFVLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDN0MsT0FBTyxHQUFHLEtBQUssRUFBRSxDQUFDO1FBQ3BCLENBQUM7UUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLFVBQVUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2xELE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDM0MsQ0FBQzs4R0FSVSxhQUFhOzRHQUFiLGFBQWE7OzJGQUFiLGFBQWE7a0JBSnpCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLFdBQVc7b0JBQ2pCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQFBpcGUoe1xuICBuYW1lOiAnbWF0Y2hCb2xkJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgTWF0Y2hCb2xkUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICBwdWJsaWMgdHJhbnNmb3JtKHZhbHVlOiB1bmtub3duLCBzZWFyY2hUZXJtOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghc2VhcmNoVGVybSB8fCB0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gYCR7dmFsdWV9YDtcbiAgICB9XG5cbiAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoYCgke3NlYXJjaFRlcm19KWAsICdnaScpO1xuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKHJlZ2V4LCAnPGI+JDE8L2I+Jyk7XG4gIH1cbn1cbiJdfQ==
@@ -1,62 +0,0 @@
1
- import { NgClass } from '@angular/common';
2
- import { ChangeDetectionStrategy, Component, input, model } from '@angular/core';
3
- import { NG_VALUE_ACCESSOR } from '@angular/forms';
4
- import { IconComponent } from '../../icon';
5
- import * as i0 from "@angular/core";
6
- export class CheckboxComponent {
7
- constructor() {
8
- this.checked = model(false);
9
- this.switch = input(false);
10
- this.disabled = input(false);
11
- this.error = input(false);
12
- this.success = input(false);
13
- this.indeterminate = input(false);
14
- this.required = input(false);
15
- this.uuid = crypto.randomUUID();
16
- }
17
- onClick() {
18
- if (this.disabled()) {
19
- return;
20
- }
21
- this.checked.set(!this.checked());
22
- }
23
- onKeyDown(event) {
24
- if (event.key !== 'Enter' || this.disabled()) {
25
- return;
26
- }
27
- this.checked.set(!this.checked());
28
- event.preventDefault();
29
- }
30
- writeValue(value) {
31
- this.checked.set(value);
32
- }
33
- registerOnChange(fn) {
34
- this.checked.subscribe(fn);
35
- }
36
- registerOnTouched() {
37
- // noop
38
- }
39
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: CheckboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
40
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.1", type: CheckboxComponent, isStandalone: true, selector: "ndw-checkbox", inputs: { checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null }, switch: { classPropertyName: "switch", publicName: "switch", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null }, success: { classPropertyName: "success", publicName: "success", isSignal: true, isRequired: false, transformFunction: null }, indeterminate: { classPropertyName: "indeterminate", publicName: "indeterminate", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { checked: "checkedChange" }, host: { properties: { "class.checked": "checked()", "class.disabled": "disabled()", "class.indeterminate": "indeterminate()" } }, providers: [
41
- {
42
- provide: NG_VALUE_ACCESSOR,
43
- useExisting: CheckboxComponent,
44
- multi: true,
45
- },
46
- ], ngImport: i0, template: "<input\n type=\"checkbox\"\n [id]=\"'checkbox-' + uuid\"\n [checked]=\"checked()\"\n [disabled]=\"disabled()\"\n [required]=\"required()\"\n aria-hidden=\"true\"\n/>\n<div\n [ngClass]=\"{ error: error(), success: success(), checkbox: !switch(), switch: switch() }\"\n role=\"checkbox\"\n [attr.aria-checked]=\"indeterminate() ? 'mixed' : checked()\"\n [attr.aria-disabled]=\"disabled()\"\n [attr.aria-labelledby]=\"'checkbox-label-' + uuid\"\n (click)=\"onClick()\"\n (keydown)=\"onKeyDown($event)\"\n [tabindex]=\"disabled() ? -1 : 0\"\n>\n @if (!switch()) {\n @if (checked()) {\n <ndw-icon>check</ndw-icon>\n } @else if (indeterminate()) {\n <ndw-icon>remove</ndw-icon>\n }\n } @else {\n <span class=\"switch-icon\">\n @if (checked()) {\n <ndw-icon>check</ndw-icon>\n } @else {\n <ndw-icon>close</ndw-icon>\n }\n </span>\n }\n</div>\n<label\n id=\"checkbox-label-{{ uuid }}\"\n tabindex=\"-1\"\n [for]=\"'checkbox-' + uuid\"\n [ngClass]=\"{ 'switch-text': switch() }\"\n (click)=\"onClick()\"\n (keydown)=\"onKeyDown($event)\"\n>\n <ng-content />\n</label>\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,400..650;1,9..40,400..650&family=Material+Symbols+Rounded:opsz,wght@20..48,400&family=Nunito+Sans:ital,opsz,wght@0,6..12,400..650;1,6..12,400..650&family=Roboto+Flex:opsz,wght@8..144,100..1000&display=block\";.ndw-heading-xl{font-family:var(--ndw-font-family-heading);font-size:2.5rem;font-weight:var(--ndw-font-weight-bold);line-height:150%}.ndw-heading-lg{font-family:var(--ndw-font-family-heading);font-size:2rem;font-weight:var(--ndw-font-weight-bold);line-height:150%}.ndw-heading-md{font-family:var(--ndw-font-family-heading);font-size:1.5rem;font-weight:var(--ndw-font-weight-bold);line-height:150%}.ndw-heading-sm{font-family:var(--ndw-font-family-heading);font-size:1.25rem;font-weight:var(--ndw-font-weight-bold);line-height:150%}.ndw-paragraph-bold-xl{font-family:var(--ndw-font-family-body);font-size:1.125rem;font-weight:var(--ndw-font-weight-bold);line-height:150%}.ndw-paragraph-xl{font-family:var(--ndw-font-family-body);font-size:1.125rem;font-weight:var(--ndw-font-weight-regular);line-height:150%}.ndw-paragraph-bold-lg{font-family:var(--ndw-font-family-body);font-size:1rem;font-weight:var(--ndw-font-weight-bold);line-height:150%}.ndw-paragraph-lg{font-family:var(--ndw-font-family-body);font-size:1rem;font-weight:var(--ndw-font-weight-regular);line-height:150%}.ndw-paragraph-bold-md{font-family:var(--ndw-font-family-body);font-size:.8125rem;font-weight:var(--ndw-font-weight-bold);line-height:150%}.ndw-paragraph-md{font-family:var(--ndw-font-family-body);font-size:.8125rem;font-weight:var(--ndw-font-weight-regular);line-height:150%}.ndw-paragraph-bold-sm{font-family:var(--ndw-font-family-body);font-size:.6875rem;font-weight:var(--ndw-font-weight-bold);line-height:150%}.ndw-paragraph-sm{font-family:var(--ndw-font-family-body);font-size:.6875rem;font-weight:var(--ndw-font-weight-regular);line-height:150%}:host{--checkable-input-size: 1.25rem;cursor:pointer;display:inline-grid;gap:var(--ndw-spacing-xs);grid-template-columns:auto 1fr;min-height:1.375rem;width:fit-content}input{display:none}div{background-color:var(--ndw-color-white);border:var(--ndw-border-size-sm) solid var(--ndw-color-grey-300);box-sizing:border-box;color:var(--ndw-color-white);display:flex;height:var(--checkable-input-size);position:relative;transition:background-color var(--ndw-animation-speed-fast) ease-out,border-color var(--ndw-animation-speed-fast) ease-out,box-shadow var(--ndw-animation-speed-fast) ease-out;width:var(--checkable-input-size)}div.success{background-color:var(--ndw-color-positive-100);border-color:var(--ndw-color-positive-500)}div.error{background-color:var(--ndw-color-critical-100);border-color:var(--ndw-color-critical-500)}label{font-family:var(--ndw-font-family-body);font-size:.8125rem;font-weight:var(--ndw-font-weight-regular);line-height:150%;align-items:center;color:var(--ndw-color-grey-600);cursor:pointer;display:flex;line-height:var(--ndw-line-height-sm);width:fit-content;word-break:break-word}label:focus{outline:none}:host(.checked) div,:host(.indeterminate) div{background-color:var(--ndw-color-primary-500);border-color:var(--ndw-color-primary-500)}:host(.checked) div.success,:host(.indeterminate) div.success{background-color:var(--ndw-color-positive-500);border-color:var(--ndw-color-positive-500)}:host(.checked) div.error,:host(.indeterminate) div.error{background-color:var(--ndw-color-critical-500);border-color:var(--ndw-color-critical-500)}:host(:focus){outline:none}:host(:focus) div{box-shadow:var(--ndw-elevation-info)}:host(:active) div,:host(:focus) div,:host(:not(.checked):active) div,:host(:not(.indeterminate):active) div{border-color:var(--ndw-color-secondary-500)}:host(.checked:focus) div,:host(.indeterminate:focus) div{background-color:var(--ndw-color-primary-700)}:host(.disabled){pointer-events:none;-webkit-user-select:none;user-select:none}:host(.disabled) div{background-color:var(--ndw-color-grey-100);border-color:var(--ndw-color-grey-200)}:host(.disabled) label{color:var(--ndw-color-grey-400)}:host(.checked.disabled) div{background-color:var(--ndw-color-grey-200);border-color:var(--ndw-color-grey-200)}\n", "div{border-radius:var(--ndw-border-radius-sm)}div.checkbox ndw-icon{font-size:1.25rem;inset:calc(var(--ndw-border-size-sm) * -1);position:absolute}div.switch{width:2.75rem;height:var(--ndw-spacing-lg);border-radius:calc(var(--ndw-spacing-lg) / 2);border:var(--ndw-border-size-sm) solid var(--ndw-color-grey-300);padding:var(--ndw-border-size-lg)}div.switch .switch-icon{background-color:var(--ndw-color-grey-400);border-radius:50%;width:var(--ndw-spacing-md);height:var(--ndw-spacing-md);display:flex;align-items:center;justify-content:center;animation:translateToLeft var(--ndw-animation-speed-fast) ease-out forwards}div.switch .switch-icon ndw-icon{color:var(--ndw-color-white);font-size:var(--ndw-spacing-sm)}div.switch.error{background-color:var(--ndw-color-white)}label.switch-text{margin-top:var(--ndw-spacing-2xs)}:host(.checked) div.switch,:host(.indeterminate) div.switch{background-color:var(--ndw-color-positive-500);border-color:var(--ndw-color-positive-500)}:host(.checked) div.switch .switch-icon,:host(.indeterminate) div.switch .switch-icon{background-color:var(--ndw-color-white);animation:translateToRight var(--ndw-animation-speed-fast) ease-out forwards}:host(.checked) div.switch .switch-icon ndw-icon,:host(.indeterminate) div.switch .switch-icon ndw-icon{color:var(--ndw-color-positive-500)}:host(.checked) div.switch.error,:host(.indeterminate) div.switch.error{background-color:var(--ndw-color-positive-500)}:host(:hover) div{background-color:var(--ndw-color-white)}:host(:hover) div.checkbox{border-color:var(--ndw-color-primary-500)}:host(:hover) div.switch{border-color:var(--ndw-color-grey-500)}:host(:hover) div.switch ndw-icon{color:var(--ndw-color-white)}:host(.checked:hover) div.checkbox,:host(.indeterminate:hover) div.checkbox{background-color:var(--ndw-color-primary-600);border-color:var(--ndw-color-primary-600)}:host(.checked:hover) div.switch,:host(.indeterminate:hover) div.switch{background-color:var(--ndw-color-positive-600);border-color:var(--ndw-color-positive-600)}:host(.checked:hover) div.switch ndw-icon,:host(.indeterminate:hover) div.switch ndw-icon{color:var(--ndw-color-positive-600)}:host(:focus) div.switch{border-color:var(--ndw-color-secondary-500)}:host(.disabled) div.switch{background-color:var(--ndw-color-grey-100);border-color:var(--ndw-color-grey-300)}:host(.disabled) div.switch .switch-icon{background-color:var(--ndw-color-grey-200)}:host(.checked.disabled) div.switch,:host(.indeterminate.disabled) div.switch{background-color:var(--ndw-color-grey-400);border-color:var(--ndw-color-grey-400)}:host(.checked.disabled) div.switch .switch-icon,:host(.indeterminate.disabled) div.switch .switch-icon{background-color:var(--ndw-color-white)}:host(.checked.disabled) div.switch .switch-icon ndw-icon,:host(.indeterminate.disabled) div.switch .switch-icon ndw-icon{background-color:var(--ndw-color-white);color:var(--ndw-color-grey-400)}@keyframes translateToRight{0%{transform:translate(0);background-color:var(--ndw-color-grey-300)}to{transform:translate(20px);background-color:var(--ndw-color-white)}}@keyframes translateToLeft{0%{transform:translate(20px);background-color:var(--ndw-color-white)}to{transform:translate(0);background-color:var(--ndw-color-grey-300)}}\n"], dependencies: [{ kind: "component", type: IconComponent, selector: "ndw-icon", inputs: ["size"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
47
- }
48
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: CheckboxComponent, decorators: [{
49
- type: Component,
50
- args: [{ changeDetection: ChangeDetectionStrategy.OnPush, host: {
51
- '[class.checked]': 'checked()',
52
- '[class.disabled]': 'disabled()',
53
- '[class.indeterminate]': 'indeterminate()',
54
- }, imports: [IconComponent, NgClass], providers: [
55
- {
56
- provide: NG_VALUE_ACCESSOR,
57
- useExisting: CheckboxComponent,
58
- multi: true,
59
- },
60
- ], selector: 'ndw-checkbox', standalone: true, template: "<input\n type=\"checkbox\"\n [id]=\"'checkbox-' + uuid\"\n [checked]=\"checked()\"\n [disabled]=\"disabled()\"\n [required]=\"required()\"\n aria-hidden=\"true\"\n/>\n<div\n [ngClass]=\"{ error: error(), success: success(), checkbox: !switch(), switch: switch() }\"\n role=\"checkbox\"\n [attr.aria-checked]=\"indeterminate() ? 'mixed' : checked()\"\n [attr.aria-disabled]=\"disabled()\"\n [attr.aria-labelledby]=\"'checkbox-label-' + uuid\"\n (click)=\"onClick()\"\n (keydown)=\"onKeyDown($event)\"\n [tabindex]=\"disabled() ? -1 : 0\"\n>\n @if (!switch()) {\n @if (checked()) {\n <ndw-icon>check</ndw-icon>\n } @else if (indeterminate()) {\n <ndw-icon>remove</ndw-icon>\n }\n } @else {\n <span class=\"switch-icon\">\n @if (checked()) {\n <ndw-icon>check</ndw-icon>\n } @else {\n <ndw-icon>close</ndw-icon>\n }\n </span>\n }\n</div>\n<label\n id=\"checkbox-label-{{ uuid }}\"\n tabindex=\"-1\"\n [for]=\"'checkbox-' + uuid\"\n [ngClass]=\"{ 'switch-text': switch() }\"\n (click)=\"onClick()\"\n (keydown)=\"onKeyDown($event)\"\n>\n <ng-content />\n</label>\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,400..650;1,9..40,400..650&family=Material+Symbols+Rounded:opsz,wght@20..48,400&family=Nunito+Sans:ital,opsz,wght@0,6..12,400..650;1,6..12,400..650&family=Roboto+Flex:opsz,wght@8..144,100..1000&display=block\";.ndw-heading-xl{font-family:var(--ndw-font-family-heading);font-size:2.5rem;font-weight:var(--ndw-font-weight-bold);line-height:150%}.ndw-heading-lg{font-family:var(--ndw-font-family-heading);font-size:2rem;font-weight:var(--ndw-font-weight-bold);line-height:150%}.ndw-heading-md{font-family:var(--ndw-font-family-heading);font-size:1.5rem;font-weight:var(--ndw-font-weight-bold);line-height:150%}.ndw-heading-sm{font-family:var(--ndw-font-family-heading);font-size:1.25rem;font-weight:var(--ndw-font-weight-bold);line-height:150%}.ndw-paragraph-bold-xl{font-family:var(--ndw-font-family-body);font-size:1.125rem;font-weight:var(--ndw-font-weight-bold);line-height:150%}.ndw-paragraph-xl{font-family:var(--ndw-font-family-body);font-size:1.125rem;font-weight:var(--ndw-font-weight-regular);line-height:150%}.ndw-paragraph-bold-lg{font-family:var(--ndw-font-family-body);font-size:1rem;font-weight:var(--ndw-font-weight-bold);line-height:150%}.ndw-paragraph-lg{font-family:var(--ndw-font-family-body);font-size:1rem;font-weight:var(--ndw-font-weight-regular);line-height:150%}.ndw-paragraph-bold-md{font-family:var(--ndw-font-family-body);font-size:.8125rem;font-weight:var(--ndw-font-weight-bold);line-height:150%}.ndw-paragraph-md{font-family:var(--ndw-font-family-body);font-size:.8125rem;font-weight:var(--ndw-font-weight-regular);line-height:150%}.ndw-paragraph-bold-sm{font-family:var(--ndw-font-family-body);font-size:.6875rem;font-weight:var(--ndw-font-weight-bold);line-height:150%}.ndw-paragraph-sm{font-family:var(--ndw-font-family-body);font-size:.6875rem;font-weight:var(--ndw-font-weight-regular);line-height:150%}:host{--checkable-input-size: 1.25rem;cursor:pointer;display:inline-grid;gap:var(--ndw-spacing-xs);grid-template-columns:auto 1fr;min-height:1.375rem;width:fit-content}input{display:none}div{background-color:var(--ndw-color-white);border:var(--ndw-border-size-sm) solid var(--ndw-color-grey-300);box-sizing:border-box;color:var(--ndw-color-white);display:flex;height:var(--checkable-input-size);position:relative;transition:background-color var(--ndw-animation-speed-fast) ease-out,border-color var(--ndw-animation-speed-fast) ease-out,box-shadow var(--ndw-animation-speed-fast) ease-out;width:var(--checkable-input-size)}div.success{background-color:var(--ndw-color-positive-100);border-color:var(--ndw-color-positive-500)}div.error{background-color:var(--ndw-color-critical-100);border-color:var(--ndw-color-critical-500)}label{font-family:var(--ndw-font-family-body);font-size:.8125rem;font-weight:var(--ndw-font-weight-regular);line-height:150%;align-items:center;color:var(--ndw-color-grey-600);cursor:pointer;display:flex;line-height:var(--ndw-line-height-sm);width:fit-content;word-break:break-word}label:focus{outline:none}:host(.checked) div,:host(.indeterminate) div{background-color:var(--ndw-color-primary-500);border-color:var(--ndw-color-primary-500)}:host(.checked) div.success,:host(.indeterminate) div.success{background-color:var(--ndw-color-positive-500);border-color:var(--ndw-color-positive-500)}:host(.checked) div.error,:host(.indeterminate) div.error{background-color:var(--ndw-color-critical-500);border-color:var(--ndw-color-critical-500)}:host(:focus){outline:none}:host(:focus) div{box-shadow:var(--ndw-elevation-info)}:host(:active) div,:host(:focus) div,:host(:not(.checked):active) div,:host(:not(.indeterminate):active) div{border-color:var(--ndw-color-secondary-500)}:host(.checked:focus) div,:host(.indeterminate:focus) div{background-color:var(--ndw-color-primary-700)}:host(.disabled){pointer-events:none;-webkit-user-select:none;user-select:none}:host(.disabled) div{background-color:var(--ndw-color-grey-100);border-color:var(--ndw-color-grey-200)}:host(.disabled) label{color:var(--ndw-color-grey-400)}:host(.checked.disabled) div{background-color:var(--ndw-color-grey-200);border-color:var(--ndw-color-grey-200)}\n", "div{border-radius:var(--ndw-border-radius-sm)}div.checkbox ndw-icon{font-size:1.25rem;inset:calc(var(--ndw-border-size-sm) * -1);position:absolute}div.switch{width:2.75rem;height:var(--ndw-spacing-lg);border-radius:calc(var(--ndw-spacing-lg) / 2);border:var(--ndw-border-size-sm) solid var(--ndw-color-grey-300);padding:var(--ndw-border-size-lg)}div.switch .switch-icon{background-color:var(--ndw-color-grey-400);border-radius:50%;width:var(--ndw-spacing-md);height:var(--ndw-spacing-md);display:flex;align-items:center;justify-content:center;animation:translateToLeft var(--ndw-animation-speed-fast) ease-out forwards}div.switch .switch-icon ndw-icon{color:var(--ndw-color-white);font-size:var(--ndw-spacing-sm)}div.switch.error{background-color:var(--ndw-color-white)}label.switch-text{margin-top:var(--ndw-spacing-2xs)}:host(.checked) div.switch,:host(.indeterminate) div.switch{background-color:var(--ndw-color-positive-500);border-color:var(--ndw-color-positive-500)}:host(.checked) div.switch .switch-icon,:host(.indeterminate) div.switch .switch-icon{background-color:var(--ndw-color-white);animation:translateToRight var(--ndw-animation-speed-fast) ease-out forwards}:host(.checked) div.switch .switch-icon ndw-icon,:host(.indeterminate) div.switch .switch-icon ndw-icon{color:var(--ndw-color-positive-500)}:host(.checked) div.switch.error,:host(.indeterminate) div.switch.error{background-color:var(--ndw-color-positive-500)}:host(:hover) div{background-color:var(--ndw-color-white)}:host(:hover) div.checkbox{border-color:var(--ndw-color-primary-500)}:host(:hover) div.switch{border-color:var(--ndw-color-grey-500)}:host(:hover) div.switch ndw-icon{color:var(--ndw-color-white)}:host(.checked:hover) div.checkbox,:host(.indeterminate:hover) div.checkbox{background-color:var(--ndw-color-primary-600);border-color:var(--ndw-color-primary-600)}:host(.checked:hover) div.switch,:host(.indeterminate:hover) div.switch{background-color:var(--ndw-color-positive-600);border-color:var(--ndw-color-positive-600)}:host(.checked:hover) div.switch ndw-icon,:host(.indeterminate:hover) div.switch ndw-icon{color:var(--ndw-color-positive-600)}:host(:focus) div.switch{border-color:var(--ndw-color-secondary-500)}:host(.disabled) div.switch{background-color:var(--ndw-color-grey-100);border-color:var(--ndw-color-grey-300)}:host(.disabled) div.switch .switch-icon{background-color:var(--ndw-color-grey-200)}:host(.checked.disabled) div.switch,:host(.indeterminate.disabled) div.switch{background-color:var(--ndw-color-grey-400);border-color:var(--ndw-color-grey-400)}:host(.checked.disabled) div.switch .switch-icon,:host(.indeterminate.disabled) div.switch .switch-icon{background-color:var(--ndw-color-white)}:host(.checked.disabled) div.switch .switch-icon ndw-icon,:host(.indeterminate.disabled) div.switch .switch-icon ndw-icon{background-color:var(--ndw-color-white);color:var(--ndw-color-grey-400)}@keyframes translateToRight{0%{transform:translate(0);background-color:var(--ndw-color-grey-300)}to{transform:translate(20px);background-color:var(--ndw-color-white)}}@keyframes translateToLeft{0%{transform:translate(20px);background-color:var(--ndw-color-white)}to{transform:translate(0);background-color:var(--ndw-color-grey-300)}}\n"] }]
61
- }] });
62
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmR3L3NyYy9jb21wb25lbnRzL2Zvcm0tZmllbGQvY2hlY2tib3gvY2hlY2tib3guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmR3L3NyYy9jb21wb25lbnRzL2Zvcm0tZmllbGQvY2hlY2tib3gvY2hlY2tib3guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFekUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFlBQVksQ0FBQzs7QUFzQjNDLE1BQU0sT0FBTyxpQkFBaUI7SUFwQjlCO1FBcUJTLFlBQU8sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkIsV0FBTSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QixhQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLFVBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckIsWUFBTyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QixrQkFBYSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixhQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXhCLFNBQUksR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7S0E4Qm5DO0lBNUJRLE9BQU87UUFDWixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO1lBQ3BCLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRU0sU0FBUyxDQUFDLEtBQW9CO1FBQ25DLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxPQUFPLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7WUFDN0MsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ2xDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRU0sVUFBVSxDQUFDLEtBQWM7UUFDOUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVNLGdCQUFnQixDQUFDLEVBQTRCO1FBQ2xELElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFTSxpQkFBaUI7UUFDdEIsT0FBTztJQUNULENBQUM7OEdBdENVLGlCQUFpQjtrR0FBakIsaUJBQWlCLGluQ0FaakI7WUFDVDtnQkFDRSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsaUJBQWlCO2dCQUM5QixLQUFLLEVBQUUsSUFBSTthQUNaO1NBQ0YsMEJDcEJILG9uQ0E0Q0EsNnlPRC9CWSxhQUFhLHVFQUFFLE9BQU87OzJGQWFyQixpQkFBaUI7a0JBcEI3QixTQUFTO3NDQUNTLHVCQUF1QixDQUFDLE1BQU0sUUFDekM7d0JBQ0osaUJBQWlCLEVBQUUsV0FBVzt3QkFDOUIsa0JBQWtCLEVBQUUsWUFBWTt3QkFDaEMsdUJBQXVCLEVBQUUsaUJBQWlCO3FCQUMzQyxXQUNRLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxhQUN0Qjt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLG1CQUFtQjs0QkFDOUIsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0YsWUFDUyxjQUFjLGNBQ1osSUFBSSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgaW5wdXQsIG1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IEljb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9pY29uJztcblxuQENvbXBvbmVudCh7XG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7XG4gICAgJ1tjbGFzcy5jaGVja2VkXSc6ICdjaGVja2VkKCknLFxuICAgICdbY2xhc3MuZGlzYWJsZWRdJzogJ2Rpc2FibGVkKCknLFxuICAgICdbY2xhc3MuaW5kZXRlcm1pbmF0ZV0nOiAnaW5kZXRlcm1pbmF0ZSgpJyxcbiAgfSxcbiAgaW1wb3J0czogW0ljb25Db21wb25lbnQsIE5nQ2xhc3NdLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBDaGVja2JveENvbXBvbmVudCxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0sXG4gIHNlbGVjdG9yOiAnbmR3LWNoZWNrYm94JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc3R5bGVVcmxzOiBbJy4uL2NoZWNrYWJsZS1pbnB1dC5zY3NzJywgJy4vY2hlY2tib3guY29tcG9uZW50LnNjc3MnXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2NoZWNrYm94LmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgQ2hlY2tib3hDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIHB1YmxpYyBjaGVja2VkID0gbW9kZWwoZmFsc2UpO1xuICBwdWJsaWMgc3dpdGNoID0gaW5wdXQoZmFsc2UpO1xuICBwdWJsaWMgZGlzYWJsZWQgPSBpbnB1dChmYWxzZSk7XG4gIHB1YmxpYyBlcnJvciA9IGlucHV0KGZhbHNlKTtcbiAgcHVibGljIHN1Y2Nlc3MgPSBpbnB1dChmYWxzZSk7XG4gIHB1YmxpYyBpbmRldGVybWluYXRlID0gaW5wdXQoZmFsc2UpO1xuICBwdWJsaWMgcmVxdWlyZWQgPSBpbnB1dChmYWxzZSk7XG5cbiAgcHVibGljIHV1aWQgPSBjcnlwdG8ucmFuZG9tVVVJRCgpO1xuXG4gIHB1YmxpYyBvbkNsaWNrKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNoZWNrZWQuc2V0KCF0aGlzLmNoZWNrZWQoKSk7XG4gIH1cblxuICBwdWJsaWMgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LmtleSAhPT0gJ0VudGVyJyB8fCB0aGlzLmRpc2FibGVkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNoZWNrZWQuc2V0KCF0aGlzLmNoZWNrZWQoKSk7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5jaGVja2VkLnNldCh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBib29sZWFuKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5jaGVja2VkLnN1YnNjcmliZShmbik7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoKTogdm9pZCB7XG4gICAgLy8gbm9vcFxuICB9XG59XG4iLCI8aW5wdXRcbiAgdHlwZT1cImNoZWNrYm94XCJcbiAgW2lkXT1cIidjaGVja2JveC0nICsgdXVpZFwiXG4gIFtjaGVja2VkXT1cImNoZWNrZWQoKVwiXG4gIFtkaXNhYmxlZF09XCJkaXNhYmxlZCgpXCJcbiAgW3JlcXVpcmVkXT1cInJlcXVpcmVkKClcIlxuICBhcmlhLWhpZGRlbj1cInRydWVcIlxuLz5cbjxkaXZcbiAgW25nQ2xhc3NdPVwieyBlcnJvcjogZXJyb3IoKSwgc3VjY2Vzczogc3VjY2VzcygpLCBjaGVja2JveDogIXN3aXRjaCgpLCBzd2l0Y2g6IHN3aXRjaCgpIH1cIlxuICByb2xlPVwiY2hlY2tib3hcIlxuICBbYXR0ci5hcmlhLWNoZWNrZWRdPVwiaW5kZXRlcm1pbmF0ZSgpID8gJ21peGVkJyA6IGNoZWNrZWQoKVwiXG4gIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZGlzYWJsZWQoKVwiXG4gIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCInY2hlY2tib3gtbGFiZWwtJyArIHV1aWRcIlxuICAoY2xpY2spPVwib25DbGljaygpXCJcbiAgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudClcIlxuICBbdGFiaW5kZXhdPVwiZGlzYWJsZWQoKSA/IC0xIDogMFwiXG4+XG4gIEBpZiAoIXN3aXRjaCgpKSB7XG4gICAgQGlmIChjaGVja2VkKCkpIHtcbiAgICAgIDxuZHctaWNvbj5jaGVjazwvbmR3LWljb24+XG4gICAgfSBAZWxzZSBpZiAoaW5kZXRlcm1pbmF0ZSgpKSB7XG4gICAgICA8bmR3LWljb24+cmVtb3ZlPC9uZHctaWNvbj5cbiAgICB9XG4gIH0gQGVsc2Uge1xuICAgIDxzcGFuIGNsYXNzPVwic3dpdGNoLWljb25cIj5cbiAgICAgIEBpZiAoY2hlY2tlZCgpKSB7XG4gICAgICAgIDxuZHctaWNvbj5jaGVjazwvbmR3LWljb24+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPG5kdy1pY29uPmNsb3NlPC9uZHctaWNvbj5cbiAgICAgIH1cbiAgICA8L3NwYW4+XG4gIH1cbjwvZGl2PlxuPGxhYmVsXG4gIGlkPVwiY2hlY2tib3gtbGFiZWwte3sgdXVpZCB9fVwiXG4gIHRhYmluZGV4PVwiLTFcIlxuICBbZm9yXT1cIidjaGVja2JveC0nICsgdXVpZFwiXG4gIFtuZ0NsYXNzXT1cInsgJ3N3aXRjaC10ZXh0Jzogc3dpdGNoKCkgfVwiXG4gIChjbGljayk9XCJvbkNsaWNrKClcIlxuICAoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50KVwiXG4+XG4gIDxuZy1jb250ZW50IC8+XG48L2xhYmVsPlxuIl19