@klippa/ngx-enhancy-forms 18.34.0 → 20.0.1

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 (91) hide show
  1. package/fesm2022/klippa-ngx-enhancy-forms.mjs +145 -140
  2. package/fesm2022/klippa-ngx-enhancy-forms.mjs.map +1 -1
  3. package/index.d.ts +707 -3
  4. package/package.json +5 -7
  5. package/esm2022/klippa-ngx-enhancy-forms.mjs +0 -5
  6. package/esm2022/lib/elementIsTruncatedCb.component.mjs +0 -58
  7. package/esm2022/lib/elements/button/button.component.mjs +0 -57
  8. package/esm2022/lib/elements/checkbox/checkbox.component.mjs +0 -23
  9. package/esm2022/lib/elements/date-picker/date-picker.component.mjs +0 -108
  10. package/esm2022/lib/elements/date-time-picker/date-time-picker.component.mjs +0 -436
  11. package/esm2022/lib/elements/email/email-input.component.mjs +0 -21
  12. package/esm2022/lib/elements/file-input/file-input.component.mjs +0 -76
  13. package/esm2022/lib/elements/hour-minute-input/hour-minute-input.component.mjs +0 -90
  14. package/esm2022/lib/elements/loading-indicator/loading-indicator.component.mjs +0 -20
  15. package/esm2022/lib/elements/number-input/number-input.component.mjs +0 -31
  16. package/esm2022/lib/elements/password-field/password-field.component.mjs +0 -21
  17. package/esm2022/lib/elements/radio/radio.component.mjs +0 -34
  18. package/esm2022/lib/elements/select/select-footer/select-footer.component.mjs +0 -15
  19. package/esm2022/lib/elements/select/select.component.mjs +0 -385
  20. package/esm2022/lib/elements/sortable-grouped-items/sortable-grouped-items.component.mjs +0 -54
  21. package/esm2022/lib/elements/sortable-items/sortable-items.component.mjs +0 -189
  22. package/esm2022/lib/elements/text-area/text-area.component.mjs +0 -23
  23. package/esm2022/lib/elements/text-input/text-input.component.mjs +0 -52
  24. package/esm2022/lib/elements/toggle/toggle.component.mjs +0 -21
  25. package/esm2022/lib/elements/value-accessor-base/multiple-value-accessor-base.component.mjs +0 -61
  26. package/esm2022/lib/elements/value-accessor-base/value-accessor-base.component.mjs +0 -167
  27. package/esm2022/lib/form/form-caption/form-caption.component.mjs +0 -31
  28. package/esm2022/lib/form/form-caption-end/form-caption-end.component.mjs +0 -34
  29. package/esm2022/lib/form/form-element/form-element.component.mjs +0 -317
  30. package/esm2022/lib/form/form-error/form-error.component.mjs +0 -40
  31. package/esm2022/lib/form/form-submit-button/form-submit-button.component.mjs +0 -71
  32. package/esm2022/lib/form/form-validation-error/form-validation-error.mjs +0 -22
  33. package/esm2022/lib/form/form.component.mjs +0 -456
  34. package/esm2022/lib/material.module.mjs +0 -22
  35. package/esm2022/lib/ngx-enhancy-forms.module.mjs +0 -191
  36. package/esm2022/lib/onRender.component.mjs +0 -19
  37. package/esm2022/lib/types.mjs +0 -2
  38. package/esm2022/lib/util/angular.mjs +0 -9
  39. package/esm2022/lib/util/arrays.mjs +0 -48
  40. package/esm2022/lib/util/classes.mjs +0 -2
  41. package/esm2022/lib/util/dom.mjs +0 -15
  42. package/esm2022/lib/util/objects.mjs +0 -38
  43. package/esm2022/lib/util/values.mjs +0 -23
  44. package/esm2022/lib/validators/dateValidator.mjs +0 -6
  45. package/esm2022/lib/validators/timeValidator.mjs +0 -6
  46. package/esm2022/lib/warning-icon/warning-icon.component.mjs +0 -17
  47. package/esm2022/lib/withTooltip.component.mjs +0 -185
  48. package/esm2022/public-api.mjs +0 -38
  49. package/lib/elementIsTruncatedCb.component.d.ts +0 -14
  50. package/lib/elements/button/button.component.d.ts +0 -16
  51. package/lib/elements/checkbox/checkbox.component.d.ts +0 -8
  52. package/lib/elements/date-picker/date-picker.component.d.ts +0 -26
  53. package/lib/elements/date-time-picker/date-time-picker.component.d.ts +0 -83
  54. package/lib/elements/email/email-input.component.d.ts +0 -7
  55. package/lib/elements/file-input/file-input.component.d.ts +0 -18
  56. package/lib/elements/hour-minute-input/hour-minute-input.component.d.ts +0 -20
  57. package/lib/elements/loading-indicator/loading-indicator.component.d.ts +0 -7
  58. package/lib/elements/number-input/number-input.component.d.ts +0 -9
  59. package/lib/elements/password-field/password-field.component.d.ts +0 -7
  60. package/lib/elements/radio/radio.component.d.ts +0 -21
  61. package/lib/elements/select/select-footer/select-footer.component.d.ts +0 -7
  62. package/lib/elements/select/select.component.d.ts +0 -91
  63. package/lib/elements/sortable-grouped-items/sortable-grouped-items.component.d.ts +0 -12
  64. package/lib/elements/sortable-items/sortable-items.component.d.ts +0 -29
  65. package/lib/elements/text-area/text-area.component.d.ts +0 -9
  66. package/lib/elements/text-input/text-input.component.d.ts +0 -19
  67. package/lib/elements/toggle/toggle.component.d.ts +0 -7
  68. package/lib/elements/value-accessor-base/multiple-value-accessor-base.component.d.ts +0 -14
  69. package/lib/elements/value-accessor-base/value-accessor-base.component.d.ts +0 -50
  70. package/lib/form/form-caption/form-caption.component.d.ts +0 -11
  71. package/lib/form/form-caption-end/form-caption-end.component.d.ts +0 -12
  72. package/lib/form/form-element/form-element.component.d.ts +0 -81
  73. package/lib/form/form-error/form-error.component.d.ts +0 -15
  74. package/lib/form/form-submit-button/form-submit-button.component.d.ts +0 -21
  75. package/lib/form/form-validation-error/form-validation-error.d.ts +0 -10
  76. package/lib/form/form.component.d.ts +0 -62
  77. package/lib/material.module.d.ts +0 -11
  78. package/lib/ngx-enhancy-forms.module.d.ts +0 -41
  79. package/lib/onRender.component.d.ts +0 -8
  80. package/lib/types.d.ts +0 -16
  81. package/lib/util/angular.d.ts +0 -2
  82. package/lib/util/arrays.d.ts +0 -8
  83. package/lib/util/classes.d.ts +0 -1
  84. package/lib/util/dom.d.ts +0 -2
  85. package/lib/util/objects.d.ts +0 -1
  86. package/lib/util/values.d.ts +0 -6
  87. package/lib/validators/dateValidator.d.ts +0 -3
  88. package/lib/validators/timeValidator.d.ts +0 -3
  89. package/lib/warning-icon/warning-icon.component.d.ts +0 -6
  90. package/lib/withTooltip.component.d.ts +0 -23
  91. package/public-api.d.ts +0 -34
@@ -1,436 +0,0 @@
1
- import { Component, Host, Inject, InjectionToken, Input, Optional, ViewChild } from '@angular/core';
2
- import { NG_VALUE_ACCESSOR } from '@angular/forms';
3
- import { invalidDateKey } from '../../validators/dateValidator';
4
- import { MAT_DATE_FORMATS, MAT_NATIVE_DATE_FORMATS } from '@angular/material/core';
5
- import { MultipleValueAccessorBase } from '../value-accessor-base/multiple-value-accessor-base.component';
6
- import { isValueSet, stringIsSetAndFilled } from '../../util/values';
7
- import { endOfMonth, format as formatDate, startOfMonth, isSameDay } from 'date-fns';
8
- import { arrayIsSetAndFilled, removeDuplicatesFromArray } from '../../util/arrays';
9
- import { runNextRenderCycle } from "../../util/angular";
10
- import * as i0 from "@angular/core";
11
- import * as i1 from "../../form/form-element/form-element.component";
12
- import * as i2 from "@angular/forms";
13
- import * as i3 from "@angular/material/core";
14
- import * as i4 from "@angular/common";
15
- import * as i5 from "@angular/material/datepicker";
16
- import * as i6 from "@angular/material/form-field";
17
- import * as i7 from "@angular/material/input";
18
- import * as i8 from "../../onRender.component";
19
- export const KLP_DATE_FORMATS = new InjectionToken('klp.form.date.formats');
20
- export const DATE_TIME_PICKER_TRANSLATIONS = new InjectionToken('klp.form.dateTime.translations');
21
- export const DATE_PICKER_LOCALE = new InjectionToken('klp.form.dateTime.locale');
22
- export function matDateFormatsFactory(component, dateFormats) {
23
- return dateFormats?.(component.format) ?? MAT_NATIVE_DATE_FORMATS;
24
- }
25
- export class DateTimePickerComponent extends MultipleValueAccessorBase {
26
- constructor(parent, controlContainer, translations, datePickerLocale, dateAdapter, elRef, cdr, ngZone) {
27
- super(parent, controlContainer);
28
- this.parent = parent;
29
- this.controlContainer = controlContainer;
30
- this.translations = translations;
31
- this.datePickerLocale = datePickerLocale;
32
- this.dateAdapter = dateAdapter;
33
- this.elRef = elRef;
34
- this.cdr = cdr;
35
- this.ngZone = ngZone;
36
- this.minDate = undefined;
37
- this.maxDate = undefined;
38
- this.sameMonthOnly = false;
39
- this.format = 'dd-MM-yyyy';
40
- this.clearable = false;
41
- this.showTimeInput = true;
42
- this.initHour = null;
43
- this.initMinute = null;
44
- this.invalidTimeAsMidnight = false; // if the time is not valid, use 00:00 as the time
45
- this.openPickerOnDate = null;
46
- this.minDateStartOfDay = undefined;
47
- this.maxDateEndOfDay = undefined;
48
- this.selectedDates = [];
49
- this.dateTouched = false;
50
- this.hoursTouched = false;
51
- this.minutesTouched = false;
52
- this.dropdownVisible = false;
53
- this.minutesOfHour = [];
54
- this.Number = Number;
55
- this.isSelected = (d) => {
56
- if (this.multiple) {
57
- return this.selectedDates.some((e) => isSameDay(e, d)) ? 'selected' : '';
58
- }
59
- return '';
60
- };
61
- this.filterDates = (e) => {
62
- if (this.disabled) {
63
- return false;
64
- }
65
- return true;
66
- };
67
- this.timeDropdownRendered = () => {
68
- runNextRenderCycle(() => {
69
- this.ngZone.runOutsideAngular(() => {
70
- document.addEventListener('mousedown', this.clickHandlerForTimeDropdown);
71
- });
72
- });
73
- const activeHour = this.timeDoubleDropdown.nativeElement.querySelector('.hourOfDay .isActive');
74
- const activeMinute = this.timeDoubleDropdown.nativeElement.querySelector('.minuteOfHour .isActive');
75
- const activeHourParent = activeHour?.parentElement;
76
- const activeMinuteParent = activeMinute?.parentElement;
77
- if (activeHourParent) {
78
- activeHourParent.scrollTop = activeHour?.offsetTop - 110;
79
- }
80
- if (activeMinuteParent) {
81
- activeMinuteParent.scrollTop = activeMinute?.offsetTop - 110;
82
- }
83
- };
84
- this.clickHandlerForTimeDropdown = (event) => {
85
- if (this.dropdownVisible) {
86
- const dropdown = this.elRef.nativeElement.querySelector('.timeDoubleDropdown');
87
- if (!dropdown.contains(event.target)) {
88
- this.ngZone.run(() => {
89
- this.dropdownVisible = false;
90
- document.removeEventListener('mousedown', this.clickHandlerForTimeDropdown);
91
- });
92
- }
93
- }
94
- };
95
- if (isValueSet(datePickerLocale)) {
96
- dateAdapter.setLocale(datePickerLocale());
97
- }
98
- }
99
- ngOnInit() {
100
- super.ngOnInit();
101
- if (this.multiple) {
102
- this.placeholder = '';
103
- this.showTimeInput = false;
104
- }
105
- this.hours = this.initHour;
106
- this.minutes = this.initMinute;
107
- this.minutesOfHour = Array.from({ length: 60 }, (v, k) => k).filter(e => e % 5 === 0);
108
- }
109
- ngAfterViewInit() {
110
- if (this.multiple) {
111
- // we are going to overwrite the datepicker closing fn later, so we are saving it here to restore it when needed
112
- this.datePickingClosingFn = this.datePickerRef.close;
113
- }
114
- }
115
- ngOnChanges(changes) {
116
- if (changes.minDate) {
117
- this.determineMinAndMaxDates();
118
- }
119
- if (changes.maxDate) {
120
- this.determineMinAndMaxDates();
121
- }
122
- }
123
- setMinDate(minDate) {
124
- if (minDate) {
125
- this.minDateStartOfDay = new Date(minDate);
126
- this.minDateStartOfDay.setHours(0, 0, 0, 0);
127
- }
128
- else {
129
- this.minDateStartOfDay = undefined;
130
- }
131
- }
132
- setMaxDate(maxDate) {
133
- if (maxDate) {
134
- this.maxDateEndOfDay = new Date(maxDate);
135
- this.maxDateEndOfDay.setHours(23, 59, 59, 999);
136
- }
137
- else {
138
- this.maxDateEndOfDay = undefined;
139
- }
140
- }
141
- getSelectedMonths() {
142
- return removeDuplicatesFromArray(this.selectedDates.map((e) => formatDate(e, 'MMMM'))).length;
143
- }
144
- // dateChanged is called when the output of the datepicker is changed and
145
- // parsed correctly. If the date is invalid, it will be called the first time
146
- // with null but never again until a valid input is provided.
147
- dateChanged(event) {
148
- const date = event.value;
149
- if (this.multiple) {
150
- this.datePickerRef.close = () => {
151
- };
152
- if (this.selectedDates.some((e) => isSameDay(e, date))) {
153
- this.selectedDates = this.selectedDates.filter((e) => !isSameDay(e, date));
154
- }
155
- else {
156
- this.selectedDates = [...this.selectedDates, date];
157
- }
158
- // START HACK
159
- // the date picker does not provide any rerender calls. Therefore, we are going to change the minDate in order to force the render
160
- // This is needed to show all selected days in our date picker
161
- // We also set the innerValue to null (with this.valueForMaterialDatePicker = null;), otherwise you can not
162
- // deselect your last picked date
163
- this.cdr.detectChanges();
164
- this.valueForMaterialDatePicker = null;
165
- const oldMinDate = this.minDateStartOfDay;
166
- this.minDateStartOfDay = new Date(0);
167
- this.cdr.detectChanges();
168
- this.minDateStartOfDay = oldMinDate;
169
- // END HACK
170
- if (this.sameMonthOnly) {
171
- if (this.selectedDates.length >= 2) {
172
- if (date < startOfMonth(this.selectedDates[0]) || date > endOfMonth(this.selectedDates[0])) {
173
- this.selectedDates = [date];
174
- }
175
- }
176
- this.determineMinAndMaxDates();
177
- }
178
- this.setInnerValueAndNotify(this.selectedDates);
179
- setTimeout(() => {
180
- this.datePickerRef.close = this.datePickingClosingFn;
181
- });
182
- }
183
- else {
184
- this.notifyNewDate();
185
- }
186
- }
187
- determineMinAndMaxDates() {
188
- if (this.sameMonthOnly) {
189
- if (this.selectedDates.length >= 2) {
190
- this.setMinDate(startOfMonth(this.selectedDates[0]));
191
- this.setMaxDate(endOfMonth(this.selectedDates[0]));
192
- }
193
- else {
194
- this.setMinDate(this.minDate);
195
- this.setMaxDate(this.maxDate);
196
- }
197
- }
198
- else {
199
- this.setMinDate(this.minDate);
200
- this.setMaxDate(this.maxDate);
201
- }
202
- }
203
- notifyNewDate() {
204
- const nativeInputValue = this.nativeInputRef.nativeElement.value;
205
- const parsedHours = Number(this.hours);
206
- const parsedMinutes = Number(this.minutes);
207
- // if we dont have the time element
208
- if (!this.showTimeInput) {
209
- if (!stringIsSetAndFilled(nativeInputValue)) {
210
- this.setInnerValueAndNotify(null);
211
- return;
212
- }
213
- if (this.valueForMaterialDatePicker instanceof Date) {
214
- this.setInnerValueAndNotify(this.valueForMaterialDatePicker);
215
- return;
216
- }
217
- }
218
- // when all inputs are empty
219
- if (!stringIsSetAndFilled(nativeInputValue) && !stringIsSetAndFilled(this.hours) && !stringIsSetAndFilled(this.minutes)) {
220
- this.setInnerValueAndNotify(null);
221
- return;
222
- }
223
- // if we have date and time
224
- if (stringIsSetAndFilled(this.hours) &&
225
- Number.isFinite(parsedHours) &&
226
- parsedHours >= 0 &&
227
- parsedHours <= 23 &&
228
- stringIsSetAndFilled(this.minutes) &&
229
- Number.isFinite(parsedMinutes) &&
230
- parsedMinutes >= 0 &&
231
- parsedMinutes <= 59 &&
232
- this.valueForMaterialDatePicker instanceof Date) {
233
- const newDateWithHours = new Date(this.valueForMaterialDatePicker.setHours(parsedHours));
234
- const newDateWithMinutes = new Date(newDateWithHours.setMinutes(parsedMinutes));
235
- this.setInnerValueAndNotify(newDateWithMinutes);
236
- return;
237
- }
238
- if (this.invalidTimeAsMidnight) {
239
- if (this.valueForMaterialDatePicker instanceof Date) {
240
- this.setInnerValueAndNotify(this.valueForMaterialDatePicker);
241
- return;
242
- }
243
- }
244
- // all other cases, we are not in a valid state
245
- this.setInnerValueAndNotify(invalidDateKey);
246
- }
247
- writeValue(value) {
248
- super.writeValue(value);
249
- if (Array.isArray(value)) {
250
- this.selectedDates = value;
251
- this.determineMinAndMaxDates();
252
- this.valueForMaterialDatePicker = null;
253
- if (arrayIsSetAndFilled(value)) {
254
- this.openPickerOnDate = this.selectedDates[0];
255
- }
256
- }
257
- else {
258
- this.valueForMaterialDatePicker = value === invalidDateKey ? null : value;
259
- if (value instanceof Date) {
260
- this.hours = String(value.getHours());
261
- this.minutes = String(value.getMinutes());
262
- this.formatTime();
263
- this.openPickerOnDate = value;
264
- }
265
- else {
266
- this.hours = this.initHour ?? '';
267
- this.minutes = this.initMinute ?? '';
268
- this.openPickerOnDate = null;
269
- this.selectedDates = [];
270
- }
271
- }
272
- }
273
- // nativeValueChanged is called when the internal text value changes, but not
274
- // when the date is changed via the date picker. We need this so that we can
275
- // determine if the datepicker is empty or invalid.
276
- nativeValueChanged() {
277
- if (this.datePickerRef.opened) {
278
- // if the user is typing instead of using the picker, close it.
279
- this.datePickerRef.close();
280
- }
281
- this.notifyNewDate();
282
- }
283
- resetToNull() {
284
- this.setInnerValueAndNotify(null);
285
- this.valueForMaterialDatePicker = null;
286
- this.nativeInputRef.nativeElement.value = null;
287
- this.hours = '';
288
- this.minutes = '';
289
- this.selectedDates = [];
290
- }
291
- formatTime() {
292
- if (Number.isFinite(Number(this.hours)) && this.hours.length === 1) {
293
- this.hours = '0' + this.hours;
294
- }
295
- if (Number.isFinite(Number(this.minutes)) && this.minutes.length === 1) {
296
- this.minutes = '0' + this.minutes;
297
- }
298
- }
299
- touchDate() {
300
- this.dateTouched = true;
301
- this.determineAllTouched();
302
- }
303
- touchHours() {
304
- this.hoursTouched = true;
305
- this.determineAllTouched();
306
- }
307
- touchMinutes() {
308
- this.minutesTouched = true;
309
- this.determineAllTouched();
310
- }
311
- determineAllTouched() {
312
- if ((this.dateTouched && this.hoursTouched && this.minutesTouched) || (this.dateTouched && !this.showTimeInput)) {
313
- this.touch();
314
- }
315
- }
316
- getDefaultTranslation(key) {
317
- switch (key) {
318
- case 'placeholder':
319
- return () => 'Select date';
320
- case 'selectDays':
321
- return () => 'Select day(s)';
322
- case 'selectedDate':
323
- return (d) => d.toLocaleDateString();
324
- case 'daysSelected':
325
- return (amount) => `${amount} days selected`;
326
- case 'selectedInMonth':
327
- return (d) => ` in ${formatDate(d, 'MMMM')}`;
328
- }
329
- }
330
- getTranslation(key, params = null) {
331
- if (key === 'placeholder' && this.multiple) {
332
- return '';
333
- }
334
- if (key === 'placeholder' && stringIsSetAndFilled(this.placeholder)) {
335
- return this.placeholder;
336
- }
337
- return this.translations?.[key]?.(params) ?? this.getDefaultTranslation(key)(params);
338
- }
339
- counter(i) {
340
- return new Array(i).fill(0).map((x, j) => j);
341
- }
342
- setHour(hour) {
343
- this.hours = hour > 9 ? String(hour) : '0' + hour;
344
- this.notifyNewDate();
345
- }
346
- setMinute(minute) {
347
- this.minutes = minute > 9 ? String(minute) : '0' + minute;
348
- this.notifyNewDate();
349
- }
350
- blurredHours() {
351
- this.formatTime();
352
- this.touchHours();
353
- }
354
- blurredMinutes() {
355
- this.formatTime();
356
- this.touchMinutes();
357
- }
358
- isActive(toCheck, actualValue) {
359
- if (!stringIsSetAndFilled(actualValue)) {
360
- return false;
361
- }
362
- return Number(actualValue) === toCheck;
363
- }
364
- shizzle() {
365
- console.log('a');
366
- this.datePickerRef.open();
367
- }
368
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: DateTimePickerComponent, deps: [{ token: i1.FormElementComponent, host: true, optional: true }, { token: i2.ControlContainer, host: true, optional: true }, { token: DATE_TIME_PICKER_TRANSLATIONS, optional: true }, { token: DATE_PICKER_LOCALE, optional: true }, { token: i3.DateAdapter }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
369
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: DateTimePickerComponent, selector: "klp-form-date-time-picker", inputs: { minDate: "minDate", maxDate: "maxDate", sameMonthOnly: "sameMonthOnly", format: "format", placeholder: "placeholder", clearable: "clearable", showTimeInput: "showTimeInput", initHour: "initHour", initMinute: "initMinute", invalidTimeAsMidnight: "invalidTimeAsMidnight" }, providers: [
370
- { provide: NG_VALUE_ACCESSOR, useExisting: DateTimePickerComponent, multi: true },
371
- {
372
- provide: MAT_DATE_FORMATS,
373
- deps: [DateTimePickerComponent, [new Optional(), KLP_DATE_FORMATS]],
374
- useFactory: matDateFormatsFactory,
375
- },
376
- ], viewQueries: [{ propertyName: "nativeInputRef", first: true, predicate: ["nativeInput"], descendants: true }, { propertyName: "datePickerRef", first: true, predicate: ["picker"], descendants: true }, { propertyName: "timeDoubleDropdown", first: true, predicate: ["timeDoubleDropdown"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"componentContainer\" [ngClass]=\"{showErrors: isInErrorState()}\" [ngClass]=\"{disabled: disabled}\">\n\t<div class=\"dateContainer\" [ngClass]=\"{noRightBorder: !showTimeInput && clearable && !disabled, disabled: disabled}\">\n\t\t<mat-form-field floatLabel=\"never\">\n\t\t\t<div *ngIf=\"multiple\" class=\"daysSelectedCaption\" (click)=\"picker.open()\" [ngClass]=\"{disabled: disabled}\">\n\t\t\t\t<ng-container *ngIf=\"selectedDates.length >= 2\">\n\t\t\t\t\t<span>{{getTranslation('daysSelected', selectedDates.length)}}</span>\n\t\t\t\t\t<span *ngIf=\"getSelectedMonths() === 1\">{{getTranslation('selectedInMonth', selectedDates[0])}}</span>\n\t\t\t\t</ng-container>\n\t\t\t\t<span *ngIf=\"selectedDates.length === 1\">{{getTranslation('selectedDate', selectedDates[0])}}</span>\n\t\t\t\t<span *ngIf=\"selectedDates.length === 0\" class=\"placeholderForMultipleSelection\">{{getTranslation('selectDays')}}</span>\n\t\t\t</div>\n\n\t\t\t@if (disabled) {\n\t\t\t\t<div class=\"disabledClickArea\" (click)=\"picker.open()\"></div>\n\t\t\t}\n\t\t\t<input\n\t\t\t\t#nativeInput\n\t\t\t\tmatInput\n\t\t\t\t[matDatepicker]=\"picker\"\n\t\t\t\t[matDatepickerFilter]=\"filterDates\"\n\t\t\t\t[(ngModel)]=\"valueForMaterialDatePicker\"\n\t\t\t\t(dateInput)=\"dateChanged($event)\"\n\t\t\t\t(input)=\"nativeValueChanged()\"\n\t\t\t\t(click)=\"picker.open()\"\n\t\t\t\t[min]=\"minDateStartOfDay\"\n\t\t\t\t[max]=\"maxDateEndOfDay\"\n\t\t\t\t[placeholder]=\"getTranslation('placeholder')\"\n\t\t\t\t(blur)=\"touchDate()\"\n\t\t\t\t[ngClass]=\"{inputForMultipleDays: multiple, disabled: disabled}\"\n\t\t\t>\n\t\t\t<mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n\t\t\t<mat-datepicker\n\t\t\t\t#picker\n\t\t\t\t[dateClass]=\"isSelected\"\n\t\t\t\t[startAt]=\"openPickerOnDate\"\n\t\t\t></mat-datepicker>\n\t\t</mat-form-field>\n\t\t<div class=\"tail\">\n\t\t\t<ng-container [ngTemplateOutlet]=\"getTailTpl()\"></ng-container>\n\t\t</div>\n\t</div>\n\t<div class=\"timeContainer\" *ngIf=\"showTimeInput\" [ngClass]=\"{disabled: disabled}\">\n\n\t\t<div class=\"timeContainerInner\">\n\t\t\t<svg class=\"clockIcon\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" (click)=\"hourInput.focus()\">\n\t\t\t\t<path d=\"M12 6V12L16 14M22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12Z\" stroke=\"#888da8\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n\t\t\t</svg>\n\n\t\t\t<input #hourInput maxlength=\"2\" placeholder=\"__\" [disabled]=\"disabled\" [(ngModel)]=\"hours\" (ngModelChange)=\"notifyNewDate()\" (focus)=\"dropdownVisible = true\" (blur)=\"blurredHours();\">\n\t\t\t<div class=\"divider\">:</div>\n\t\t\t<input maxlength=\"2\" placeholder=\"__\" [disabled]=\"disabled\" [(ngModel)]=\"minutes\" (ngModelChange)=\"notifyNewDate()\" (focus)=\"dropdownVisible = true\" (blur)=\"blurredMinutes();\">\n\t\t</div>\n\n\t\t<div class=\"timeDoubleDropdown\" #timeDoubleDropdown *ngIf=\"dropdownVisible\" [onRenderFn]=\"timeDropdownRendered\">\n\t\t\t<div class=\"hourOfDay\">\n\t\t\t\t@for (hour of counter(24); track hour) {\n\t\t\t\t\t<div class=\"entry\" (mousedown)=\"setHour(hour)\" [ngClass]=\"{isActive: isActive(hour, hours)}\">{{hour > 9 ? hour : '0' + hour }}</div>\n\t\t\t\t}\n\t\t\t</div>\n\t\t\t<div class=\"minuteOfHour\">\n\t\t\t\t@for (minute of minutesOfHour; track minute) {\n\t\t\t\t\t<div class=\"entry\" (mousedown)=\"setMinute(minute)\" [ngClass]=\"{isActive: isActive(minute, minutes)}\">{{minute > 9 ? minute : '0' + minute}}</div>\n\t\t\t\t}\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>\n", styles: [":host{display:block;--mdc-icon-button-icon-size: 18px}:host ::ng-deep .mat-mdc-icon-button .mat-mdc-button-persistent-ripple{border-radius:unset}:host ::ng-deep .mat-datepicker-toggle-default-icon{color:transparent}:host ::ng-deep .mat-mdc-form-field{display:block;height:100%;width:100%}:host ::ng-deep .mat-mdc-form-field .mat-mdc-text-field-wrapper,:host ::ng-deep .mat-mdc-form-field .mat-mdc-text-field-wrapper:hover .mat-mdc-form-field-focus-overlay{background-color:unset}:host ::ng-deep .mat-mdc-form-field .mat-mdc-text-field-wrapper:hover,:host ::ng-deep .mat-mdc-form-field .mat-mdc-text-field-wrapper:hover .mat-mdc-form-field-focus-overlay:hover{background-color:unset}:host ::ng-deep .mat-mdc-form-field .mat-mdc-form-field-infix{padding-top:8px;padding-bottom:8px;min-height:40px;font-size:14px;color:#101828;width:100%}:host ::ng-deep .mat-mdc-form-field .mat-mdc-form-field-icon-suffix{height:100%;padding:0}:host ::ng-deep .mat-mdc-form-field .mat-mdc-icon-button{padding:5px 0 0;height:36px;margin-right:6px;width:36px;color:#adadad}:host ::ng-deep .mat-mdc-form-field .mat-mdc-icon-button:after{position:absolute;left:50%;content:\"\";display:inline-block;width:20px;height:20px;background-image:url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"><path d=\"M17.5 8.33329H2.5M13.3333 1.66663V4.99996M6.66667 1.66663V4.99996M6.5 18.3333H13.5C14.9001 18.3333 15.6002 18.3333 16.135 18.0608C16.6054 17.8211 16.9878 17.4387 17.2275 16.9683C17.5 16.4335 17.5 15.7334 17.5 14.3333V7.33329C17.5 5.93316 17.5 5.2331 17.2275 4.69832C16.9878 4.22791 16.6054 3.84546 16.135 3.60578C15.6002 3.33329 14.9001 3.33329 13.5 3.33329H6.5C5.09987 3.33329 4.3998 3.33329 3.86502 3.60578C3.39462 3.84546 3.01217 4.22791 2.77248 4.69832C2.5 5.2331 2.5 5.93316 2.5 7.33329V14.3333C2.5 15.7334 2.5 16.4335 2.77248 16.9683C3.01217 17.4387 3.39462 17.8211 3.86502 18.0608C4.3998 18.3333 5.09987 18.3333 6.5 18.3333Z\" stroke=\"%23475467\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/> </svg>');background-size:contain;background-repeat:no-repeat;transform:translate(-50%,-2px) translate(1px)}:host ::ng-deep .mat-mdc-form-field .mat-mdc-icon-button.cdk-focused .mat-mdc-button-persistent-ripple.mdc-icon-button__ripple{display:none}:host ::ng-deep .mat-mdc-form-field .mat-mdc-icon-button span{height:42px;width:42px;top:50%;left:50%;transform:translate(-50%,-50%)}:host ::ng-deep .mat-mdc-form-field .mat-mdc-form-field-subscript-wrapper{display:none}:host ::ng-deep .mat-mdc-form-field .mdc-line-ripple:before,:host ::ng-deep .mat-mdc-form-field .mdc-line-ripple:after{display:none}:host ::ng-deep .mat-mdc-form-field .mat-mdc-form-field-label{color:#adadad}:host ::ng-deep .mat-mdc-form-field.mat-mdc-focused,:host ::ng-deep .mat-mdc-form-field .mat-mdc-form-field-label{color:#adadad}:host ::ng-deep .mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input,:host ::ng-deep .mat-mdc-form-field-input-control,:host ::ng-deep .mdc-text-field__input{color:#101828}:host ::ng-deep .mat-mdc-form-field-has-icon-suffix .mat-mdc-text-field-wrapper{padding:0}:host ::ng-deep .mat-mdc-datepicker-toggle-active{color:#667085}:host ::ng-deep .mat-mdc-form-field-flex{flex-direction:row-reverse}:host ::ng-deep .daysSelectedCaption{cursor:pointer}:host ::ng-deep .daysSelectedCaption.disabled{cursor:zoom-in}:host ::ng-deep .inputForMultipleDays{display:none}:host ::ng-deep .disabledClickArea{position:absolute;inset:0;z-index:1}:host ::ng-deep .mat-mdc-form-field.mat-focused,:host ::ng-deep .mat-mdc-form-field-focus-overlay{opacity:unset;background-color:unset}.componentContainer{display:flex;position:relative;border-radius:2px;color:#101828}.componentContainer ::ng-deep .mdc-text-field__input::placeholder{color:#aaa!important}.componentContainer .placeholderForMultipleSelection,.componentContainer .placeholderForSelection{color:#adadad}.componentContainer.showErrors .dateContainer,.componentContainer.showErrors .timeContainer,.componentContainer.showErrors .clearButton.withoutSpacing{border-color:#ff8000}.componentContainer .clearButton{flex:0 0 auto;display:flex;align-items:center;background:#fff;color:#7b7b7b;border:1px solid #D0D5DD;margin-left:1.25rem;padding:6px 14px;font-size:18px}.componentContainer .clearButton.withoutSpacing{border-left:none;margin-left:0}.componentContainer .clearButton:disabled{border:1px solid #D0D5DD;background:#f2f4f7}.componentContainer .dateContainer{flex:1 1 auto;background:#fff;border:1px solid #D0D5DD;border-radius:8px;display:flex}.componentContainer .dateContainer.noRightBorder{border-right:none}.componentContainer .dateContainer.disabled{background:#f2f4f7;border-color:transparent;cursor:pointer}.componentContainer .dateContainer.disabled::ng-deep input{cursor:pointer}.componentContainer .dateContainer:hover{border-color:#98a2b3}.componentContainer .dateContainer:focus-within{border-color:#00ac42;outline:1px solid #00AC42}.componentContainer .dateContainer::ng-deep input{padding-right:2.5rem}.componentContainer .dateContainer::ng-deep input:placeholder-shown{text-overflow:ellipsis}.componentContainer .dateContainer::ng-deep input::-webkit-input-placeholder{color:red}.componentContainer .dateContainer::ng-deep input:-moz-placeholder{color:red}.componentContainer .dateContainer::ng-deep input::-moz-placeholder{color:red}.componentContainer .dateContainer::ng-deep input:-ms-input-placeholder{color:red}.componentContainer .timeContainer{width:102px;position:relative;margin-left:1.25rem}.componentContainer .timeContainer .timeContainerInner{height:100%;flex:0 0 auto;padding:6px .625rem;background:#fff;display:flex;align-items:center;border:1px solid #D0D5DD;border-radius:8px}.componentContainer .timeContainer .timeContainerInner:hover{border-color:#98a2b3}.componentContainer .timeContainer .timeContainerInner:focus-within{border-color:#00ac42;outline:1px solid #00AC42}.componentContainer .timeContainer.disabled .timeContainerInner,.componentContainer .timeContainer.disabled input{background:#f2f4f7}.componentContainer .timeContainer .clockIcon{width:18px;margin-right:.3125rem}.componentContainer .timeContainer input{color:#101828;text-align:center;width:20px;padding:0;border:none;height:100%}.componentContainer .timeContainer input::placeholder{color:#adadad}.componentContainer .timeContainer .divider{margin:0 .3125rem}.componentContainer .timeContainer .timeDoubleDropdown{position:absolute;height:275px;width:102px;z-index:1;transform:translate(102px) translate(-100%);border:1px solid #D0D5DD;display:flex;background:#fff}.componentContainer .timeContainer .timeDoubleDropdown .hourOfDay{overflow:auto;scrollbar-width:none;width:50%}.componentContainer .timeContainer .timeDoubleDropdown .minuteOfHour{border-left:1px solid #D0D5DD;overflow:auto;scrollbar-width:none;width:50%}.componentContainer .timeContainer .timeDoubleDropdown .entry{text-align:center;height:42px;width:100%;line-height:42px;background:#fff;cursor:pointer}.componentContainer .timeContainer .timeDoubleDropdown .entry:hover{background:#f8f9fa}.componentContainer .timeContainer .timeDoubleDropdown .entry.isActive{color:#fff;background:#00ac42}.tail{margin-left:.4rem;transform:translateY(.3rem)}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i5.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i5.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i8.OnRenderDirective, selector: "[onRenderFn]", inputs: ["onRenderFn"] }] }); }
377
- }
378
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: DateTimePickerComponent, decorators: [{
379
- type: Component,
380
- args: [{ selector: 'klp-form-date-time-picker', providers: [
381
- { provide: NG_VALUE_ACCESSOR, useExisting: DateTimePickerComponent, multi: true },
382
- {
383
- provide: MAT_DATE_FORMATS,
384
- deps: [DateTimePickerComponent, [new Optional(), KLP_DATE_FORMATS]],
385
- useFactory: matDateFormatsFactory,
386
- },
387
- ], template: "<div class=\"componentContainer\" [ngClass]=\"{showErrors: isInErrorState()}\" [ngClass]=\"{disabled: disabled}\">\n\t<div class=\"dateContainer\" [ngClass]=\"{noRightBorder: !showTimeInput && clearable && !disabled, disabled: disabled}\">\n\t\t<mat-form-field floatLabel=\"never\">\n\t\t\t<div *ngIf=\"multiple\" class=\"daysSelectedCaption\" (click)=\"picker.open()\" [ngClass]=\"{disabled: disabled}\">\n\t\t\t\t<ng-container *ngIf=\"selectedDates.length >= 2\">\n\t\t\t\t\t<span>{{getTranslation('daysSelected', selectedDates.length)}}</span>\n\t\t\t\t\t<span *ngIf=\"getSelectedMonths() === 1\">{{getTranslation('selectedInMonth', selectedDates[0])}}</span>\n\t\t\t\t</ng-container>\n\t\t\t\t<span *ngIf=\"selectedDates.length === 1\">{{getTranslation('selectedDate', selectedDates[0])}}</span>\n\t\t\t\t<span *ngIf=\"selectedDates.length === 0\" class=\"placeholderForMultipleSelection\">{{getTranslation('selectDays')}}</span>\n\t\t\t</div>\n\n\t\t\t@if (disabled) {\n\t\t\t\t<div class=\"disabledClickArea\" (click)=\"picker.open()\"></div>\n\t\t\t}\n\t\t\t<input\n\t\t\t\t#nativeInput\n\t\t\t\tmatInput\n\t\t\t\t[matDatepicker]=\"picker\"\n\t\t\t\t[matDatepickerFilter]=\"filterDates\"\n\t\t\t\t[(ngModel)]=\"valueForMaterialDatePicker\"\n\t\t\t\t(dateInput)=\"dateChanged($event)\"\n\t\t\t\t(input)=\"nativeValueChanged()\"\n\t\t\t\t(click)=\"picker.open()\"\n\t\t\t\t[min]=\"minDateStartOfDay\"\n\t\t\t\t[max]=\"maxDateEndOfDay\"\n\t\t\t\t[placeholder]=\"getTranslation('placeholder')\"\n\t\t\t\t(blur)=\"touchDate()\"\n\t\t\t\t[ngClass]=\"{inputForMultipleDays: multiple, disabled: disabled}\"\n\t\t\t>\n\t\t\t<mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n\t\t\t<mat-datepicker\n\t\t\t\t#picker\n\t\t\t\t[dateClass]=\"isSelected\"\n\t\t\t\t[startAt]=\"openPickerOnDate\"\n\t\t\t></mat-datepicker>\n\t\t</mat-form-field>\n\t\t<div class=\"tail\">\n\t\t\t<ng-container [ngTemplateOutlet]=\"getTailTpl()\"></ng-container>\n\t\t</div>\n\t</div>\n\t<div class=\"timeContainer\" *ngIf=\"showTimeInput\" [ngClass]=\"{disabled: disabled}\">\n\n\t\t<div class=\"timeContainerInner\">\n\t\t\t<svg class=\"clockIcon\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" (click)=\"hourInput.focus()\">\n\t\t\t\t<path d=\"M12 6V12L16 14M22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12Z\" stroke=\"#888da8\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n\t\t\t</svg>\n\n\t\t\t<input #hourInput maxlength=\"2\" placeholder=\"__\" [disabled]=\"disabled\" [(ngModel)]=\"hours\" (ngModelChange)=\"notifyNewDate()\" (focus)=\"dropdownVisible = true\" (blur)=\"blurredHours();\">\n\t\t\t<div class=\"divider\">:</div>\n\t\t\t<input maxlength=\"2\" placeholder=\"__\" [disabled]=\"disabled\" [(ngModel)]=\"minutes\" (ngModelChange)=\"notifyNewDate()\" (focus)=\"dropdownVisible = true\" (blur)=\"blurredMinutes();\">\n\t\t</div>\n\n\t\t<div class=\"timeDoubleDropdown\" #timeDoubleDropdown *ngIf=\"dropdownVisible\" [onRenderFn]=\"timeDropdownRendered\">\n\t\t\t<div class=\"hourOfDay\">\n\t\t\t\t@for (hour of counter(24); track hour) {\n\t\t\t\t\t<div class=\"entry\" (mousedown)=\"setHour(hour)\" [ngClass]=\"{isActive: isActive(hour, hours)}\">{{hour > 9 ? hour : '0' + hour }}</div>\n\t\t\t\t}\n\t\t\t</div>\n\t\t\t<div class=\"minuteOfHour\">\n\t\t\t\t@for (minute of minutesOfHour; track minute) {\n\t\t\t\t\t<div class=\"entry\" (mousedown)=\"setMinute(minute)\" [ngClass]=\"{isActive: isActive(minute, minutes)}\">{{minute > 9 ? minute : '0' + minute}}</div>\n\t\t\t\t}\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>\n", styles: [":host{display:block;--mdc-icon-button-icon-size: 18px}:host ::ng-deep .mat-mdc-icon-button .mat-mdc-button-persistent-ripple{border-radius:unset}:host ::ng-deep .mat-datepicker-toggle-default-icon{color:transparent}:host ::ng-deep .mat-mdc-form-field{display:block;height:100%;width:100%}:host ::ng-deep .mat-mdc-form-field .mat-mdc-text-field-wrapper,:host ::ng-deep .mat-mdc-form-field .mat-mdc-text-field-wrapper:hover .mat-mdc-form-field-focus-overlay{background-color:unset}:host ::ng-deep .mat-mdc-form-field .mat-mdc-text-field-wrapper:hover,:host ::ng-deep .mat-mdc-form-field .mat-mdc-text-field-wrapper:hover .mat-mdc-form-field-focus-overlay:hover{background-color:unset}:host ::ng-deep .mat-mdc-form-field .mat-mdc-form-field-infix{padding-top:8px;padding-bottom:8px;min-height:40px;font-size:14px;color:#101828;width:100%}:host ::ng-deep .mat-mdc-form-field .mat-mdc-form-field-icon-suffix{height:100%;padding:0}:host ::ng-deep .mat-mdc-form-field .mat-mdc-icon-button{padding:5px 0 0;height:36px;margin-right:6px;width:36px;color:#adadad}:host ::ng-deep .mat-mdc-form-field .mat-mdc-icon-button:after{position:absolute;left:50%;content:\"\";display:inline-block;width:20px;height:20px;background-image:url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"><path d=\"M17.5 8.33329H2.5M13.3333 1.66663V4.99996M6.66667 1.66663V4.99996M6.5 18.3333H13.5C14.9001 18.3333 15.6002 18.3333 16.135 18.0608C16.6054 17.8211 16.9878 17.4387 17.2275 16.9683C17.5 16.4335 17.5 15.7334 17.5 14.3333V7.33329C17.5 5.93316 17.5 5.2331 17.2275 4.69832C16.9878 4.22791 16.6054 3.84546 16.135 3.60578C15.6002 3.33329 14.9001 3.33329 13.5 3.33329H6.5C5.09987 3.33329 4.3998 3.33329 3.86502 3.60578C3.39462 3.84546 3.01217 4.22791 2.77248 4.69832C2.5 5.2331 2.5 5.93316 2.5 7.33329V14.3333C2.5 15.7334 2.5 16.4335 2.77248 16.9683C3.01217 17.4387 3.39462 17.8211 3.86502 18.0608C4.3998 18.3333 5.09987 18.3333 6.5 18.3333Z\" stroke=\"%23475467\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/> </svg>');background-size:contain;background-repeat:no-repeat;transform:translate(-50%,-2px) translate(1px)}:host ::ng-deep .mat-mdc-form-field .mat-mdc-icon-button.cdk-focused .mat-mdc-button-persistent-ripple.mdc-icon-button__ripple{display:none}:host ::ng-deep .mat-mdc-form-field .mat-mdc-icon-button span{height:42px;width:42px;top:50%;left:50%;transform:translate(-50%,-50%)}:host ::ng-deep .mat-mdc-form-field .mat-mdc-form-field-subscript-wrapper{display:none}:host ::ng-deep .mat-mdc-form-field .mdc-line-ripple:before,:host ::ng-deep .mat-mdc-form-field .mdc-line-ripple:after{display:none}:host ::ng-deep .mat-mdc-form-field .mat-mdc-form-field-label{color:#adadad}:host ::ng-deep .mat-mdc-form-field.mat-mdc-focused,:host ::ng-deep .mat-mdc-form-field .mat-mdc-form-field-label{color:#adadad}:host ::ng-deep .mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input,:host ::ng-deep .mat-mdc-form-field-input-control,:host ::ng-deep .mdc-text-field__input{color:#101828}:host ::ng-deep .mat-mdc-form-field-has-icon-suffix .mat-mdc-text-field-wrapper{padding:0}:host ::ng-deep .mat-mdc-datepicker-toggle-active{color:#667085}:host ::ng-deep .mat-mdc-form-field-flex{flex-direction:row-reverse}:host ::ng-deep .daysSelectedCaption{cursor:pointer}:host ::ng-deep .daysSelectedCaption.disabled{cursor:zoom-in}:host ::ng-deep .inputForMultipleDays{display:none}:host ::ng-deep .disabledClickArea{position:absolute;inset:0;z-index:1}:host ::ng-deep .mat-mdc-form-field.mat-focused,:host ::ng-deep .mat-mdc-form-field-focus-overlay{opacity:unset;background-color:unset}.componentContainer{display:flex;position:relative;border-radius:2px;color:#101828}.componentContainer ::ng-deep .mdc-text-field__input::placeholder{color:#aaa!important}.componentContainer .placeholderForMultipleSelection,.componentContainer .placeholderForSelection{color:#adadad}.componentContainer.showErrors .dateContainer,.componentContainer.showErrors .timeContainer,.componentContainer.showErrors .clearButton.withoutSpacing{border-color:#ff8000}.componentContainer .clearButton{flex:0 0 auto;display:flex;align-items:center;background:#fff;color:#7b7b7b;border:1px solid #D0D5DD;margin-left:1.25rem;padding:6px 14px;font-size:18px}.componentContainer .clearButton.withoutSpacing{border-left:none;margin-left:0}.componentContainer .clearButton:disabled{border:1px solid #D0D5DD;background:#f2f4f7}.componentContainer .dateContainer{flex:1 1 auto;background:#fff;border:1px solid #D0D5DD;border-radius:8px;display:flex}.componentContainer .dateContainer.noRightBorder{border-right:none}.componentContainer .dateContainer.disabled{background:#f2f4f7;border-color:transparent;cursor:pointer}.componentContainer .dateContainer.disabled::ng-deep input{cursor:pointer}.componentContainer .dateContainer:hover{border-color:#98a2b3}.componentContainer .dateContainer:focus-within{border-color:#00ac42;outline:1px solid #00AC42}.componentContainer .dateContainer::ng-deep input{padding-right:2.5rem}.componentContainer .dateContainer::ng-deep input:placeholder-shown{text-overflow:ellipsis}.componentContainer .dateContainer::ng-deep input::-webkit-input-placeholder{color:red}.componentContainer .dateContainer::ng-deep input:-moz-placeholder{color:red}.componentContainer .dateContainer::ng-deep input::-moz-placeholder{color:red}.componentContainer .dateContainer::ng-deep input:-ms-input-placeholder{color:red}.componentContainer .timeContainer{width:102px;position:relative;margin-left:1.25rem}.componentContainer .timeContainer .timeContainerInner{height:100%;flex:0 0 auto;padding:6px .625rem;background:#fff;display:flex;align-items:center;border:1px solid #D0D5DD;border-radius:8px}.componentContainer .timeContainer .timeContainerInner:hover{border-color:#98a2b3}.componentContainer .timeContainer .timeContainerInner:focus-within{border-color:#00ac42;outline:1px solid #00AC42}.componentContainer .timeContainer.disabled .timeContainerInner,.componentContainer .timeContainer.disabled input{background:#f2f4f7}.componentContainer .timeContainer .clockIcon{width:18px;margin-right:.3125rem}.componentContainer .timeContainer input{color:#101828;text-align:center;width:20px;padding:0;border:none;height:100%}.componentContainer .timeContainer input::placeholder{color:#adadad}.componentContainer .timeContainer .divider{margin:0 .3125rem}.componentContainer .timeContainer .timeDoubleDropdown{position:absolute;height:275px;width:102px;z-index:1;transform:translate(102px) translate(-100%);border:1px solid #D0D5DD;display:flex;background:#fff}.componentContainer .timeContainer .timeDoubleDropdown .hourOfDay{overflow:auto;scrollbar-width:none;width:50%}.componentContainer .timeContainer .timeDoubleDropdown .minuteOfHour{border-left:1px solid #D0D5DD;overflow:auto;scrollbar-width:none;width:50%}.componentContainer .timeContainer .timeDoubleDropdown .entry{text-align:center;height:42px;width:100%;line-height:42px;background:#fff;cursor:pointer}.componentContainer .timeContainer .timeDoubleDropdown .entry:hover{background:#f8f9fa}.componentContainer .timeContainer .timeDoubleDropdown .entry.isActive{color:#fff;background:#00ac42}.tail{margin-left:.4rem;transform:translateY(.3rem)}\n"] }]
388
- }], ctorParameters: () => [{ type: i1.FormElementComponent, decorators: [{
389
- type: Host
390
- }, {
391
- type: Optional
392
- }] }, { type: i2.ControlContainer, decorators: [{
393
- type: Host
394
- }, {
395
- type: Optional
396
- }] }, { type: undefined, decorators: [{
397
- type: Inject,
398
- args: [DATE_TIME_PICKER_TRANSLATIONS]
399
- }, {
400
- type: Optional
401
- }] }, { type: undefined, decorators: [{
402
- type: Inject,
403
- args: [DATE_PICKER_LOCALE]
404
- }, {
405
- type: Optional
406
- }] }, { type: i3.DateAdapter }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }], propDecorators: { minDate: [{
407
- type: Input
408
- }], maxDate: [{
409
- type: Input
410
- }], sameMonthOnly: [{
411
- type: Input
412
- }], format: [{
413
- type: Input
414
- }], placeholder: [{
415
- type: Input
416
- }], clearable: [{
417
- type: Input
418
- }], showTimeInput: [{
419
- type: Input
420
- }], initHour: [{
421
- type: Input
422
- }], initMinute: [{
423
- type: Input
424
- }], invalidTimeAsMidnight: [{
425
- type: Input
426
- }], nativeInputRef: [{
427
- type: ViewChild,
428
- args: ['nativeInput']
429
- }], datePickerRef: [{
430
- type: ViewChild,
431
- args: ['picker']
432
- }], timeDoubleDropdown: [{
433
- type: ViewChild,
434
- args: ['timeDoubleDropdown']
435
- }] } });
436
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rbGlwcGEvbmd4LWVuaGFuY3ktZm9ybXMvc3JjL2xpYi9lbGVtZW50cy9kYXRlLXRpbWUtcGlja2VyL2RhdGUtdGltZS1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2xpcHBhL25neC1lbmhhbmN5LWZvcm1zL3NyYy9saWIvZWxlbWVudHMvZGF0ZS10aW1lLXBpY2tlci9kYXRlLXRpbWUtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTixTQUFTLEVBRVQsSUFBSSxFQUNKLE1BQU0sRUFDTixjQUFjLEVBQ2QsS0FBSyxFQUdMLFFBQVEsRUFFUixTQUFTLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFtQixpQkFBaUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ25FLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUU5RCxPQUFPLEVBQWMsZ0JBQWdCLEVBQUUsdUJBQXVCLEVBQWlCLE1BQU0sd0JBQXdCLENBQUM7QUFHOUcsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sK0RBQStELENBQUM7QUFDeEcsT0FBTyxFQUFDLFVBQVUsRUFBRSxvQkFBb0IsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ25FLE9BQU8sRUFBQyxVQUFVLEVBQUUsTUFBTSxJQUFJLFVBQVUsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ25GLE9BQU8sRUFBQyxtQkFBbUIsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xGLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7Ozs7O0FBRXRELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLElBQUksY0FBYyxDQUFpQix1QkFBdUIsQ0FBQyxDQUFDO0FBQzVGLE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHLElBQUksY0FBYyxDQUFNLGdDQUFnQyxDQUFDLENBQUM7QUFDdkcsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxjQUFjLENBQU0sMEJBQTBCLENBQUMsQ0FBQztBQUV0RixNQUFNLFVBQVUscUJBQXFCLENBQUMsU0FBa0MsRUFBRSxXQUE0QjtJQUNyRyxPQUFPLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSx1QkFBdUIsQ0FBQztBQUNuRSxDQUFDO0FBZUQsTUFBTSxPQUFPLHVCQUF3QixTQUFRLHlCQUF1RDtJQW1DbkcsWUFDK0IsTUFBNEIsRUFDNUIsZ0JBQWtDLEVBQ0wsWUFBaUIsRUFDNUIsZ0JBQXFCLEVBQzdELFdBQThCLEVBQzlCLEtBQWlCLEVBQ2pCLEdBQXNCLEVBQ3RCLE1BQWM7UUFFdEIsS0FBSyxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBVEYsV0FBTSxHQUFOLE1BQU0sQ0FBc0I7UUFDNUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNMLGlCQUFZLEdBQVosWUFBWSxDQUFLO1FBQzVCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBSztRQUM3RCxnQkFBVyxHQUFYLFdBQVcsQ0FBbUI7UUFDOUIsVUFBSyxHQUFMLEtBQUssQ0FBWTtRQUNqQixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBMUNQLFlBQU8sR0FBUyxTQUFTLENBQUM7UUFDMUIsWUFBTyxHQUFTLFNBQVMsQ0FBQztRQUMxQixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUN0QixXQUFNLEdBQUcsWUFBWSxDQUFDO1FBRXRCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsa0JBQWEsR0FBRyxJQUFJLENBQUM7UUFDckIsYUFBUSxHQUFXLElBQUksQ0FBQztRQUN4QixlQUFVLEdBQVcsSUFBSSxDQUFDO1FBQzFCLDBCQUFxQixHQUFHLEtBQUssQ0FBQyxDQUFDLGtEQUFrRDtRQU1qRyxxQkFBZ0IsR0FBUyxJQUFJLENBQUM7UUFDOUIsc0JBQWlCLEdBQVMsU0FBUyxDQUFDO1FBQ3BDLG9CQUFlLEdBQVMsU0FBUyxDQUFDO1FBUXhCLGtCQUFhLEdBQWdCLEVBQUUsQ0FBQztRQUVsQyxnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUNwQixpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUNyQixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUNyQixvQkFBZSxHQUFHLEtBQUssQ0FBQztRQUN4QixrQkFBYSxHQUFrQixFQUFFLENBQUM7UUFDbEMsV0FBTSxHQUFHLE1BQU0sQ0FBQztRQThOMUIsZUFBVSxHQUFHLENBQUMsQ0FBTyxFQUFFLEVBQUU7WUFDeEIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ25CLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDMUUsQ0FBQztZQUNELE9BQU8sRUFBRSxDQUFDO1FBQ1gsQ0FBQyxDQUFDO1FBQ0YsZ0JBQVcsR0FBc0IsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUN0QyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDbkIsT0FBTyxLQUFLLENBQUM7WUFDZCxDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDYixDQUFDLENBQUM7UUEwRkYseUJBQW9CLEdBQUcsR0FBRyxFQUFFO1lBQzNCLGtCQUFrQixDQUFDLEdBQUcsRUFBRTtnQkFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7b0JBQ2xDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUcsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUM7Z0JBQzNFLENBQUMsQ0FBQyxDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM7WUFFSCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1lBQy9GLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLHlCQUF5QixDQUFDLENBQUM7WUFDcEcsTUFBTSxnQkFBZ0IsR0FBRyxVQUFVLEVBQUUsYUFBYSxDQUFDO1lBQ25ELE1BQU0sa0JBQWtCLEdBQUcsWUFBWSxFQUFFLGFBQWEsQ0FBQztZQUN2RCxJQUFJLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3RCLGdCQUFnQixDQUFDLFNBQVMsR0FBRyxVQUFVLEVBQUUsU0FBUyxHQUFHLEdBQUcsQ0FBQztZQUMxRCxDQUFDO1lBQ0QsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO2dCQUN4QixrQkFBa0IsQ0FBQyxTQUFTLEdBQUcsWUFBWSxFQUFFLFNBQVMsR0FBRyxHQUFHLENBQUM7WUFDOUQsQ0FBQztRQUNGLENBQUMsQ0FBQTtRQUVELGdDQUEyQixHQUFHLENBQUMsS0FBaUIsRUFBRSxFQUFFO1lBQ25ELElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUMxQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMscUJBQXFCLENBQUMsQ0FBQztnQkFDL0UsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7b0JBQ3RDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTt3QkFDcEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7d0JBQzdCLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUcsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUM7b0JBQzlFLENBQUMsQ0FBQyxDQUFDO2dCQUNKLENBQUM7WUFDRixDQUFDO1FBQ0YsQ0FBQyxDQUFDO1FBblZELElBQUksVUFBVSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztZQUNsQyxXQUFXLENBQUMsU0FBUyxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUMzQyxDQUFDO0lBQ0YsQ0FBQztJQUVELFFBQVE7UUFDUCxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDNUIsQ0FBQztRQUNELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUMzQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDL0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUUsRUFBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBSUQsZUFBZTtRQUNkLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ25CLGdIQUFnSDtZQUNoSCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUM7UUFDdEQsQ0FBQztJQUNGLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDakMsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDaEMsQ0FBQztRQUNELElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQ2hDLENBQUM7SUFDRixDQUFDO0lBRUQsVUFBVSxDQUFDLE9BQWE7UUFDdkIsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMzQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzdDLENBQUM7YUFBTSxDQUFDO1lBQ1AsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFNBQVMsQ0FBQztRQUNwQyxDQUFDO0lBQ0YsQ0FBQztJQUVELFVBQVUsQ0FBQyxPQUFhO1FBQ3ZCLElBQUksT0FBTyxFQUFFLENBQUM7WUFDYixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3pDLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2hELENBQUM7YUFBTSxDQUFDO1lBQ1AsSUFBSSxDQUFDLGVBQWUsR0FBRyxTQUFTLENBQUM7UUFDbEMsQ0FBQztJQUNGLENBQUM7SUFFRCxpQkFBaUI7UUFDaEIsT0FBTyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQy9GLENBQUM7SUFFRCx5RUFBeUU7SUFDekUsNkVBQTZFO0lBQzdFLDZEQUE2RDtJQUM3RCxXQUFXLENBQUMsS0FBVTtRQUNyQixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ3pCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLEdBQUcsRUFBRTtZQUNoQyxDQUFDLENBQUM7WUFFRixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDeEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDNUUsQ0FBQztpQkFBTSxDQUFDO2dCQUNQLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDcEQsQ0FBQztZQUNELGFBQWE7WUFDYixrSUFBa0k7WUFDbEksOERBQThEO1lBQzlELDJHQUEyRztZQUMzRyxpQ0FBaUM7WUFDakMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFDO1lBQ3ZDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztZQUMxQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsVUFBVSxDQUFDO1lBQ3BDLFdBQVc7WUFFWCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztvQkFDcEMsSUFBSSxJQUFJLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO3dCQUM1RixJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQzdCLENBQUM7Z0JBQ0YsQ0FBQztnQkFDRCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztZQUNoQyxDQUFDO1lBRUQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNoRCxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNmLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztZQUN0RCxDQUFDLENBQUMsQ0FBQztRQUNKLENBQUM7YUFBTSxDQUFDO1lBQ1AsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3RCLENBQUM7SUFDRixDQUFDO0lBRUQsdUJBQXVCO1FBQ3RCLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3hCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNyRCxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ1AsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQy9CLENBQUM7UUFDRixDQUFDO2FBQU0sQ0FBQztZQUNQLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9CLENBQUM7SUFDRixDQUFDO0lBRUQsYUFBYTtRQUNaLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDO1FBQ2pFLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkMsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUUzQyxtQ0FBbUM7UUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsb0JBQW9CLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO2dCQUM3QyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2xDLE9BQU87WUFDUixDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsMEJBQTBCLFlBQVksSUFBSSxFQUFFLENBQUM7Z0JBQ3JELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQztnQkFDN0QsT0FBTztZQUNSLENBQUM7UUFDRixDQUFDO1FBQ0QsNEJBQTRCO1FBQzVCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDekgsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xDLE9BQU87UUFDUixDQUFDO1FBQ0QsMkJBQTJCO1FBQzNCLElBQ0Msb0JBQW9CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUNoQyxNQUFNLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQztZQUM1QixXQUFXLElBQUksQ0FBQztZQUNoQixXQUFXLElBQUksRUFBRTtZQUNqQixvQkFBb0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQ2xDLE1BQU0sQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDO1lBQzlCLGFBQWEsSUFBSSxDQUFDO1lBQ2xCLGFBQWEsSUFBSSxFQUFFO1lBQ25CLElBQUksQ0FBQywwQkFBMEIsWUFBWSxJQUFJLEVBQzlDLENBQUM7WUFDRixNQUFNLGdCQUFnQixHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztZQUN6RixNQUFNLGtCQUFrQixHQUFHLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQ2hGLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ2hELE9BQU87UUFDUixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUNoQyxJQUFJLElBQUksQ0FBQywwQkFBMEIsWUFBWSxJQUFJLEVBQUUsQ0FBQztnQkFDckQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO2dCQUM3RCxPQUFPO1lBQ1IsQ0FBQztRQUNGLENBQUM7UUFDRCwrQ0FBK0M7UUFDL0MsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBaUQ7UUFDM0QsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztZQUMzQixJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFDO1lBQ3ZDLElBQUksbUJBQW1CLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDL0MsQ0FBQztRQUNGLENBQUM7YUFBTSxDQUFDO1lBQ1AsSUFBSSxDQUFDLDBCQUEwQixHQUFHLEtBQUssS0FBSyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQzFFLElBQUksS0FBSyxZQUFZLElBQUksRUFBRSxDQUFDO2dCQUMzQixJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDdEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDbEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztZQUMvQixDQUFDO2lCQUFNLENBQUM7Z0JBQ1AsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQztnQkFDckMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztnQkFDN0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7WUFDekIsQ0FBQztRQUNGLENBQUM7SUFDRixDQUFDO0lBRUQsNkVBQTZFO0lBQzdFLDRFQUE0RTtJQUM1RSxtREFBbUQ7SUFDbkQsa0JBQWtCO1FBQ2pCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMvQiwrREFBK0Q7WUFDL0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM1QixDQUFDO1FBQ0QsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxXQUFXO1FBQ1YsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQywwQkFBMEIsR0FBRyxJQUFJLENBQUM7UUFDdkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUMvQyxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNoQixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBZ0JELFVBQVU7UUFDVCxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3BFLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDL0IsQ0FBQztRQUNELElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDeEUsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUNuQyxDQUFDO0lBQ0YsQ0FBQztJQUVELFNBQVM7UUFDUixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsVUFBVTtRQUNULElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxZQUFZO1FBQ1gsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFDM0IsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELG1CQUFtQjtRQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztZQUNqSCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDZCxDQUFDO0lBQ0YsQ0FBQztJQUdELHFCQUFxQixDQUFDLEdBQVc7UUFDaEMsUUFBUSxHQUFHLEVBQUUsQ0FBQztZQUNiLEtBQUssYUFBYTtnQkFDakIsT0FBTyxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUM7WUFDNUIsS0FBSyxZQUFZO2dCQUNoQixPQUFPLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQztZQUM5QixLQUFLLGNBQWM7Z0JBQ2xCLE9BQU8sQ0FBQyxDQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzVDLEtBQUssY0FBYztnQkFDbEIsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsR0FBRyxNQUFNLGdCQUFnQixDQUFDO1lBQzlDLEtBQUssaUJBQWlCO2dCQUNyQixPQUFPLENBQUMsQ0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLFVBQVUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUNyRCxDQUFDO0lBQ0YsQ0FBQztJQUVELGNBQWMsQ0FBQyxHQUFXLEVBQUUsU0FBYyxJQUFJO1FBQzdDLElBQUksR0FBRyxLQUFLLGFBQWEsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDNUMsT0FBTyxFQUFFLENBQUM7UUFDWCxDQUFDO1FBQ0QsSUFBSSxHQUFHLEtBQUssYUFBYSxJQUFJLG9CQUFvQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ3JFLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUN6QixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUVELE9BQU8sQ0FBQyxDQUFTO1FBQ2hCLE9BQU8sSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxPQUFPLENBQUMsSUFBWTtRQUNuQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQztRQUNsRCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELFNBQVMsQ0FBQyxNQUFjO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO1FBQzFELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsWUFBWTtRQUNYLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVELGNBQWM7UUFDYixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxRQUFRLENBQUMsT0FBZSxFQUFFLFdBQW1CO1FBQzVDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ3hDLE9BQU8sS0FBSyxDQUFDO1FBQ2QsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLE9BQU8sQ0FBQztJQUN4QyxDQUFDO0lBaUNELE9BQU87UUFDTixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDM0IsQ0FBQzs4R0F0WVcsdUJBQXVCLDhJQXNDMUIsNkJBQTZCLDZCQUM3QixrQkFBa0I7a0dBdkNmLHVCQUF1Qiw4VUFUeEI7WUFDVixFQUFDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsdUJBQXVCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBQztZQUMvRTtnQkFDQyxPQUFPLEVBQUUsZ0JBQWdCO2dCQUN6QixJQUFJLEVBQUUsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLElBQUksUUFBUSxFQUFFLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztnQkFDbkUsVUFBVSxFQUFFLHFCQUFxQjthQUNqQztTQUNELDBYQzlDRixzbUhBbUVBOzsyRkRuQmEsdUJBQXVCO2tCQWJuQyxTQUFTOytCQUNDLDJCQUEyQixhQUcxQjt3QkFDVixFQUFDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxXQUFXLHlCQUF5QixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUM7d0JBQy9FOzRCQUNDLE9BQU8sRUFBRSxnQkFBZ0I7NEJBQ3pCLElBQUksRUFBRSwwQkFBMEIsQ0FBQyxJQUFJLFFBQVEsRUFBRSxFQUFFLGdCQUFnQixDQUFDLENBQUM7NEJBQ25FLFVBQVUsRUFBRSxxQkFBcUI7eUJBQ2pDO3FCQUNEOzswQkFzQ0MsSUFBSTs7MEJBQUksUUFBUTs7MEJBQ2hCLElBQUk7OzBCQUFJLFFBQVE7OzBCQUNoQixNQUFNOzJCQUFDLDZCQUE2Qjs7MEJBQUcsUUFBUTs7MEJBQy9DLE1BQU07MkJBQUMsa0JBQWtCOzswQkFBRyxRQUFRO2lKQXRDdEIsT0FBTztzQkFBdEIsS0FBSztnQkFDVSxPQUFPO3NCQUF0QixLQUFLO2dCQUNVLGFBQWE7c0JBQTVCLEtBQUs7Z0JBQ1UsTUFBTTtzQkFBckIsS0FBSztnQkFDVSxXQUFXO3NCQUExQixLQUFLO2dCQUNVLFNBQVM7c0JBQXhCLEtBQUs7Z0JBQ1UsYUFBYTtzQkFBNUIsS0FBSztnQkFDVSxRQUFRO3NCQUF2QixLQUFLO2dCQUNVLFVBQVU7c0JBQXpCLEtBQUs7Z0JBQ1UscUJBQXFCO3NCQUFwQyxLQUFLO2dCQUVvQixjQUFjO3NCQUF2QyxTQUFTO3VCQUFDLGFBQWE7Z0JBQ0gsYUFBYTtzQkFBakMsU0FBUzt1QkFBQyxRQUFRO2dCQUNjLGtCQUFrQjtzQkFBbEQsU0FBUzt1QkFBQyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRBZnRlclZpZXdJbml0LFxuXHRDaGFuZ2VEZXRlY3RvclJlZixcblx0Q29tcG9uZW50LFxuXHRFbGVtZW50UmVmLFxuXHRIb3N0LFxuXHRJbmplY3QsXG5cdEluamVjdGlvblRva2VuLFxuXHRJbnB1dCwgTmdab25lLFxuXHRPbkNoYW5nZXMsXG5cdE9uSW5pdCxcblx0T3B0aW9uYWwsXG5cdFNpbXBsZUNoYW5nZXMsXG5cdFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q29udHJvbENvbnRhaW5lciwgTkdfVkFMVUVfQUNDRVNTT1J9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7aW52YWxpZERhdGVLZXl9IGZyb20gJy4uLy4uL3ZhbGlkYXRvcnMvZGF0ZVZhbGlkYXRvcic7XG5pbXBvcnQge0RhdGVGaWx0ZXJGbiwgTWF0RGF0ZXBpY2tlcn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlcic7XG5pbXBvcnQge0RhdGVBZGFwdGVyLCBNQVRfREFURV9GT1JNQVRTLCBNQVRfTkFUSVZFX0RBVEVfRk9STUFUUywgTWF0RGF0ZUZvcm1hdHN9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHtLbHBEYXRlRm9ybWF0c30gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHtGb3JtRWxlbWVudENvbXBvbmVudH0gZnJvbSAnLi4vLi4vZm9ybS9mb3JtLWVsZW1lbnQvZm9ybS1lbGVtZW50LmNvbXBvbmVudCc7XG5pbXBvcnQge011bHRpcGxlVmFsdWVBY2Nlc3NvckJhc2V9IGZyb20gJy4uL3ZhbHVlLWFjY2Vzc29yLWJhc2UvbXVsdGlwbGUtdmFsdWUtYWNjZXNzb3ItYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHtpc1ZhbHVlU2V0LCBzdHJpbmdJc1NldEFuZEZpbGxlZH0gZnJvbSAnLi4vLi4vdXRpbC92YWx1ZXMnO1xuaW1wb3J0IHtlbmRPZk1vbnRoLCBmb3JtYXQgYXMgZm9ybWF0RGF0ZSwgc3RhcnRPZk1vbnRoLCBpc1NhbWVEYXl9IGZyb20gJ2RhdGUtZm5zJztcbmltcG9ydCB7YXJyYXlJc1NldEFuZEZpbGxlZCwgcmVtb3ZlRHVwbGljYXRlc0Zyb21BcnJheSB9IGZyb20gJy4uLy4uL3V0aWwvYXJyYXlzJztcbmltcG9ydCB7cnVuTmV4dFJlbmRlckN5Y2xlfSBmcm9tIFwiLi4vLi4vdXRpbC9hbmd1bGFyXCI7XG5cbmV4cG9ydCBjb25zdCBLTFBfREFURV9GT1JNQVRTID0gbmV3IEluamVjdGlvblRva2VuPEtscERhdGVGb3JtYXRzPigna2xwLmZvcm0uZGF0ZS5mb3JtYXRzJyk7XG5leHBvcnQgY29uc3QgREFURV9USU1FX1BJQ0tFUl9UUkFOU0xBVElPTlMgPSBuZXcgSW5qZWN0aW9uVG9rZW48YW55Pigna2xwLmZvcm0uZGF0ZVRpbWUudHJhbnNsYXRpb25zJyk7XG5leHBvcnQgY29uc3QgREFURV9QSUNLRVJfTE9DQUxFID0gbmV3IEluamVjdGlvblRva2VuPGFueT4oJ2tscC5mb3JtLmRhdGVUaW1lLmxvY2FsZScpO1xuXG5leHBvcnQgZnVuY3Rpb24gbWF0RGF0ZUZvcm1hdHNGYWN0b3J5KGNvbXBvbmVudDogRGF0ZVRpbWVQaWNrZXJDb21wb25lbnQsIGRhdGVGb3JtYXRzPzogS2xwRGF0ZUZvcm1hdHMpOiBNYXREYXRlRm9ybWF0cyB7XG5cdHJldHVybiBkYXRlRm9ybWF0cz8uKGNvbXBvbmVudC5mb3JtYXQpID8/IE1BVF9OQVRJVkVfREFURV9GT1JNQVRTO1xufVxuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICdrbHAtZm9ybS1kYXRlLXRpbWUtcGlja2VyJyxcblx0dGVtcGxhdGVVcmw6ICcuL2RhdGUtdGltZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuXHRzdHlsZVVybHM6IFsnLi9kYXRlLXRpbWUtcGlja2VyLmNvbXBvbmVudC5zY3NzJ10sXG5cdHByb3ZpZGVyczogW1xuXHRcdHtwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUiwgdXNlRXhpc3Rpbmc6IERhdGVUaW1lUGlja2VyQ29tcG9uZW50LCBtdWx0aTogdHJ1ZX0sXG5cdFx0e1xuXHRcdFx0cHJvdmlkZTogTUFUX0RBVEVfRk9STUFUUyxcblx0XHRcdGRlcHM6IFtEYXRlVGltZVBpY2tlckNvbXBvbmVudCwgW25ldyBPcHRpb25hbCgpLCBLTFBfREFURV9GT1JNQVRTXV0sXG5cdFx0XHR1c2VGYWN0b3J5OiBtYXREYXRlRm9ybWF0c0ZhY3RvcnksXG5cdFx0fSxcblx0XSxcbn0pXG5leHBvcnQgY2xhc3MgRGF0ZVRpbWVQaWNrZXJDb21wb25lbnQgZXh0ZW5kcyBNdWx0aXBsZVZhbHVlQWNjZXNzb3JCYXNlPERhdGUgfCB0eXBlb2YgaW52YWxpZERhdGVLZXk+IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMge1xuXHRASW5wdXQoKSBwdWJsaWMgbWluRGF0ZTogRGF0ZSA9IHVuZGVmaW5lZDtcblx0QElucHV0KCkgcHVibGljIG1heERhdGU6IERhdGUgPSB1bmRlZmluZWQ7XG5cdEBJbnB1dCgpIHB1YmxpYyBzYW1lTW9udGhPbmx5ID0gZmFsc2U7XG5cdEBJbnB1dCgpIHB1YmxpYyBmb3JtYXQgPSAnZGQtTU0teXl5eSc7XG5cdEBJbnB1dCgpIHB1YmxpYyBwbGFjZWhvbGRlcjogc3RyaW5nO1xuXHRASW5wdXQoKSBwdWJsaWMgY2xlYXJhYmxlID0gZmFsc2U7XG5cdEBJbnB1dCgpIHB1YmxpYyBzaG93VGltZUlucHV0ID0gdHJ1ZTtcblx0QElucHV0KCkgcHVibGljIGluaXRIb3VyOiBzdHJpbmcgPSBudWxsO1xuXHRASW5wdXQoKSBwdWJsaWMgaW5pdE1pbnV0ZTogc3RyaW5nID0gbnVsbDtcblx0QElucHV0KCkgcHVibGljIGludmFsaWRUaW1lQXNNaWRuaWdodCA9IGZhbHNlOyAvLyBpZiB0aGUgdGltZSBpcyBub3QgdmFsaWQsIHVzZSAwMDowMCBhcyB0aGUgdGltZVxuXG5cdEBWaWV3Q2hpbGQoJ25hdGl2ZUlucHV0JykgbmF0aXZlSW5wdXRSZWY6IEVsZW1lbnRSZWY7XG5cdEBWaWV3Q2hpbGQoJ3BpY2tlcicpIGRhdGVQaWNrZXJSZWY6IE1hdERhdGVwaWNrZXI8RGF0ZT47XG5cdEBWaWV3Q2hpbGQoJ3RpbWVEb3VibGVEcm9wZG93bicpIHRpbWVEb3VibGVEcm9wZG93bjogRWxlbWVudFJlZjtcblxuXHRvcGVuUGlja2VyT25EYXRlOiBEYXRlID0gbnVsbDtcblx0bWluRGF0ZVN0YXJ0T2ZEYXk6IERhdGUgPSB1bmRlZmluZWQ7XG5cdG1heERhdGVFbmRPZkRheTogRGF0ZSA9IHVuZGVmaW5lZDtcblxuXHQvLyB0aGlzIGlzIHBhc3NlZCBhcyBuZ21vZGVsIGFuZCBpcyB1c2VkIHRvIHNldCB0aGUgaW5pdGlhbCBkYXRlLiBCdXQgd2UgYWxzb1xuXHQvLyB1c2UgaW5wdXQgYW5kIG5hdGl2ZUlucHV0IGNhbGxiYWNrcyB0byBleHRlbmQgdGhlIHZhbGlkYXRpb24gbG9naWMgc28gd2Vcblx0Ly8gY2FuIGRpc3Rpbmd1aXNoIGJldHdlZW4gZW1wdHkgYW5kIGludmFsaWQgZGF0ZXMuXG5cdHZhbHVlRm9yTWF0ZXJpYWxEYXRlUGlja2VyOiBEYXRlO1xuXHRob3Vyczogc3RyaW5nOyAvLyBzdHJpbmcgYmVjYXVzZSBpdCdzIGEgdGV4dCBpbnB1dFxuXHRtaW51dGVzOiBzdHJpbmc7IC8vIHN0cmluZyBiZWNhdXNlIGl0J3MgYSB0ZXh0IGlucHV0XG5cdHByb3RlY3RlZCBzZWxlY3RlZERhdGVzOiBBcnJheTxEYXRlPiA9IFtdO1xuXHRwcml2YXRlIGRhdGVQaWNraW5nQ2xvc2luZ0ZuOiAoKSA9PiB2b2lkO1xuXHRwcml2YXRlIGRhdGVUb3VjaGVkID0gZmFsc2U7XG5cdHByaXZhdGUgaG91cnNUb3VjaGVkID0gZmFsc2U7XG5cdHByaXZhdGUgbWludXRlc1RvdWNoZWQgPSBmYWxzZTtcblx0cHJvdGVjdGVkIGRyb3Bkb3duVmlzaWJsZSA9IGZhbHNlO1xuXHRwcm90ZWN0ZWQgbWludXRlc09mSG91cjogQXJyYXk8bnVtYmVyPiA9IFtdO1xuXHRwcm90ZWN0ZWQgTnVtYmVyID0gTnVtYmVyO1xuXG5cdGNvbnN0cnVjdG9yKFxuXHRcdEBIb3N0KCkgQE9wdGlvbmFsKCkgcHJvdGVjdGVkIHBhcmVudDogRm9ybUVsZW1lbnRDb21wb25lbnQsXG5cdFx0QEhvc3QoKSBAT3B0aW9uYWwoKSBwcm90ZWN0ZWQgY29udHJvbENvbnRhaW5lcjogQ29udHJvbENvbnRhaW5lcixcblx0XHRASW5qZWN0KERBVEVfVElNRV9QSUNLRVJfVFJBTlNMQVRJT05TKSBAT3B0aW9uYWwoKSBwcml2YXRlIHRyYW5zbGF0aW9uczogYW55LFxuXHRcdEBJbmplY3QoREFURV9QSUNLRVJfTE9DQUxFKSBAT3B0aW9uYWwoKSBwcml2YXRlIGRhdGVQaWNrZXJMb2NhbGU6IGFueSxcblx0XHRwcml2YXRlIGRhdGVBZGFwdGVyOiBEYXRlQWRhcHRlcjxEYXRlPixcblx0XHRwcml2YXRlIGVsUmVmOiBFbGVtZW50UmVmLFxuXHRcdHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcblx0XHRwcml2YXRlIG5nWm9uZTogTmdab25lLFxuXHQpIHtcblx0XHRzdXBlcihwYXJlbnQsIGNvbnRyb2xDb250YWluZXIpO1xuXHRcdGlmIChpc1ZhbHVlU2V0KGRhdGVQaWNrZXJMb2NhbGUpKSB7XG5cdFx0XHRkYXRlQWRhcHRlci5zZXRMb2NhbGUoZGF0ZVBpY2tlckxvY2FsZSgpKTtcblx0XHR9XG5cdH1cblxuXHRuZ09uSW5pdCgpOiB2b2lkIHtcblx0XHRzdXBlci5uZ09uSW5pdCgpO1xuXHRcdGlmICh0aGlzLm11bHRpcGxlKSB7XG5cdFx0XHR0aGlzLnBsYWNlaG9sZGVyID0gJyc7XG5cdFx0XHR0aGlzLnNob3dUaW1lSW5wdXQgPSBmYWxzZTtcblx0XHR9XG5cdFx0dGhpcy5ob3VycyA9IHRoaXMuaW5pdEhvdXI7XG5cdFx0dGhpcy5taW51dGVzID0gdGhpcy5pbml0TWludXRlO1xuXHRcdHRoaXMubWludXRlc09mSG91ciA9IEFycmF5LmZyb20oe2xlbmd0aDogNjB9LCAodiwgaykgPT4gaykuZmlsdGVyKGUgPT4gZSAlIDUgPT09IDApO1xuXHR9XG5cblxuXG5cdG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5tdWx0aXBsZSkge1xuXHRcdFx0Ly8gd2UgYXJlIGdvaW5nIHRvIG92ZXJ3cml0ZSB0aGUgZGF0ZXBpY2tlciBjbG9zaW5nIGZuIGxhdGVyLCBzbyB3ZSBhcmUgc2F2aW5nIGl0IGhlcmUgdG8gcmVzdG9yZSBpdCB3aGVuIG5lZWRlZFxuXHRcdFx0dGhpcy5kYXRlUGlja2luZ0Nsb3NpbmdGbiA9IHRoaXMuZGF0ZVBpY2tlclJlZi5jbG9zZTtcblx0XHR9XG5cdH1cblxuXHRuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG5cdFx0aWYgKGNoYW5nZXMubWluRGF0ZSkge1xuXHRcdFx0dGhpcy5kZXRlcm1pbmVNaW5BbmRNYXhEYXRlcygpO1xuXHRcdH1cblx0XHRpZiAoY2hhbmdlcy5tYXhEYXRlKSB7XG5cdFx0XHR0aGlzLmRldGVybWluZU1pbkFuZE1heERhdGVzKCk7XG5cdFx0fVxuXHR9XG5cblx0c2V0TWluRGF0ZShtaW5EYXRlOiBEYXRlKTogdm9pZCB7XG5cdFx0aWYgKG1pbkRhdGUpIHtcblx0XHRcdHRoaXMubWluRGF0ZVN0YXJ0T2ZEYXkgPSBuZXcgRGF0ZShtaW5EYXRlKTtcblx0XHRcdHRoaXMubWluRGF0ZVN0YXJ0T2ZEYXkuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMubWluRGF0ZVN0YXJ0T2ZEYXkgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG5cblx0c2V0TWF4RGF0ZShtYXhEYXRlOiBEYXRlKTogdm9pZCB7XG5cdFx0aWYgKG1heERhdGUpIHtcblx0XHRcdHRoaXMubWF4RGF0ZUVuZE9mRGF5ID0gbmV3IERhdGUobWF4RGF0ZSk7XG5cdFx0XHR0aGlzLm1heERhdGVFbmRPZkRheS5zZXRIb3VycygyMywgNTksIDU5LCA5OTkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm1heERhdGVFbmRPZkRheSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblxuXHRnZXRTZWxlY3RlZE1vbnRocygpOiBudW1iZXIge1xuXHRcdHJldHVybiByZW1vdmVEdXBsaWNhdGVzRnJvbUFycmF5KHRoaXMuc2VsZWN0ZWREYXRlcy5tYXAoKGUpID0+IGZvcm1hdERhdGUoZSwgJ01NTU0nKSkpLmxlbmd0aDtcblx0fVxuXG5cdC8vIGRhdGVDaGFuZ2VkIGlzIGNhbGxlZCB3aGVuIHRoZSBvdXRwdXQgb2YgdGhlIGRhdGVwaWNrZXIgaXMgY2hhbmdlZCBhbmRcblx0Ly8gcGFyc2VkIGNvcnJlY3RseS4gSWYgdGhlIGRhdGUgaXMgaW52YWxpZCwgaXQgd2lsbCBiZSBjYWxsZWQgdGhlIGZpcnN0IHRpbWVcblx0Ly8gd2l0aCBudWxsIGJ1dCBuZXZlciBhZ2FpbiB1bnRpbCBhIHZhbGlkIGlucHV0IGlzIHByb3ZpZGVkLlxuXHRkYXRlQ2hhbmdlZChldmVudDogYW55KTogdm9pZCB7XG5cdFx0Y29uc3QgZGF0ZSA9IGV2ZW50LnZhbHVlO1xuXHRcdGlmICh0aGlzLm11bHRpcGxlKSB7XG5cdFx0XHR0aGlzLmRhdGVQaWNrZXJSZWYuY2xvc2UgPSAoKSA9PiB7XG5cdFx0XHR9O1xuXG5cdFx0XHRpZiAodGhpcy5zZWxlY3RlZERhdGVzLnNvbWUoKGUpID0+IGlzU2FtZURheShlLCBkYXRlKSkpIHtcblx0XHRcdFx0dGhpcy5zZWxlY3RlZERhdGVzID0gdGhpcy5zZWxlY3RlZERhdGVzLmZpbHRlcigoZSkgPT4gIWlzU2FtZURheShlLCBkYXRlKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnNlbGVjdGVkRGF0ZXMgPSBbLi4udGhpcy5zZWxlY3RlZERhdGVzLCBkYXRlXTtcblx0XHRcdH1cblx0XHRcdC8vIFNUQVJUIEhBQ0tcblx0XHRcdC8vIHRoZSBkYXRlIHBpY2tlciBkb2VzIG5vdCBwcm92aWRlIGFueSByZXJlbmRlciBjYWxscy4gVGhlcmVmb3JlLCB3ZSBhcmUgZ29pbmcgdG8gY2hhbmdlIHRoZSBtaW5EYXRlIGluIG9yZGVyIHRvIGZvcmNlIHRoZSByZW5kZXJcblx0XHRcdC8vIFRoaXMgaXMgbmVlZGVkIHRvIHNob3cgYWxsIHNlbGVjdGVkIGRheXMgaW4gb3VyIGRhdGUgcGlja2VyXG5cdFx0XHQvLyBXZSBhbHNvIHNldCB0aGUgaW5uZXJWYWx1ZSB0byBudWxsICh3aXRoIHRoaXMudmFsdWVGb3JNYXRlcmlhbERhdGVQaWNrZXIgPSBudWxsOyksIG90aGVyd2lzZSB5b3UgY2FuIG5vdFxuXHRcdFx0Ly8gZGVzZWxlY3QgeW91ciBsYXN0IHBpY2tlZCBkYXRlXG5cdFx0XHR0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG5cdFx0XHR0aGlzLnZhbHVlRm9yTWF0ZXJpYWxEYXRlUGlja2VyID0gbnVsbDtcblx0XHRcdGNvbnN0IG9sZE1pbkRhdGUgPSB0aGlzLm1pbkRhdGVTdGFydE9mRGF5O1xuXHRcdFx0dGhpcy5taW5EYXRlU3RhcnRPZkRheSA9IG5ldyBEYXRlKDApO1xuXHRcdFx0dGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuXHRcdFx0dGhpcy5taW5EYXRlU3RhcnRPZkRheSA9IG9sZE1pbkRhdGU7XG5cdFx0XHQvLyBFTkQgSEFDS1xuXG5cdFx0XHRpZiAodGhpcy5zYW1lTW9udGhPbmx5KSB7XG5cdFx0XHRcdGlmICh0aGlzLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID49IDIpIHtcblx0XHRcdFx0XHRpZiAoZGF0ZSA8IHN0YXJ0T2ZNb250aCh0aGlzLnNlbGVjdGVkRGF0ZXNbMF0pIHx8IGRhdGUgPiBlbmRPZk1vbnRoKHRoaXMuc2VsZWN0ZWREYXRlc1swXSkpIHtcblx0XHRcdFx0XHRcdHRoaXMuc2VsZWN0ZWREYXRlcyA9IFtkYXRlXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5kZXRlcm1pbmVNaW5BbmRNYXhEYXRlcygpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnNldElubmVyVmFsdWVBbmROb3RpZnkodGhpcy5zZWxlY3RlZERhdGVzKTtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmRhdGVQaWNrZXJSZWYuY2xvc2UgPSB0aGlzLmRhdGVQaWNraW5nQ2xvc2luZ0ZuO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMubm90aWZ5TmV3RGF0ZSgpO1xuXHRcdH1cblx0fVxuXG5cdGRldGVybWluZU1pbkFuZE1heERhdGVzKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLnNhbWVNb250aE9ubHkpIHtcblx0XHRcdGlmICh0aGlzLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID49IDIpIHtcblx0XHRcdFx0dGhpcy5zZXRNaW5EYXRlKHN0YXJ0T2ZNb250aCh0aGlzLnNlbGVjdGVkRGF0ZXNbMF0pKTtcblx0XHRcdFx0dGhpcy5zZXRNYXhEYXRlKGVuZE9mTW9udGgodGhpcy5zZWxlY3RlZERhdGVzWzBdKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnNldE1pbkRhdGUodGhpcy5taW5EYXRlKTtcblx0XHRcdFx0dGhpcy5zZXRNYXhEYXRlKHRoaXMubWF4RGF0ZSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0TWluRGF0ZSh0aGlzLm1pbkRhdGUpO1xuXHRcdFx0dGhpcy5zZXRNYXhEYXRlKHRoaXMubWF4RGF0ZSk7XG5cdFx0fVxuXHR9XG5cblx0bm90aWZ5TmV3RGF0ZSgpOiB2b2lkIHtcblx0XHRjb25zdCBuYXRpdmVJbnB1dFZhbHVlID0gdGhpcy5uYXRpdmVJbnB1dFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlO1xuXHRcdGNvbnN0IHBhcnNlZEhvdXJzID0gTnVtYmVyKHRoaXMuaG91cnMpO1xuXHRcdGNvbnN0IHBhcnNlZE1pbnV0ZXMgPSBOdW1iZXIodGhpcy5taW51dGVzKTtcblxuXHRcdC8vIGlmIHdlIGRvbnQgaGF2ZSB0aGUgdGltZSBlbGVtZW50XG5cdFx0aWYgKCF0aGlzLnNob3dUaW1lSW5wdXQpIHtcblx0XHRcdGlmICghc3RyaW5nSXNTZXRBbmRGaWxsZWQobmF0aXZlSW5wdXRWYWx1ZSkpIHtcblx0XHRcdFx0dGhpcy5zZXRJbm5lclZhbHVlQW5kTm90aWZ5KG51bGwpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAodGhpcy52YWx1ZUZvck1hdGVyaWFsRGF0ZVBpY2tlciBpbnN0YW5jZW9mIERhdGUpIHtcblx0XHRcdFx0dGhpcy5zZXRJbm5lclZhbHVlQW5kTm90aWZ5KHRoaXMudmFsdWVGb3JNYXRlcmlhbERhdGVQaWNrZXIpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIHdoZW4gYWxsIGlucHV0cyBhcmUgZW1wdHlcblx0XHRpZiAoIXN0cmluZ0lzU2V0QW5kRmlsbGVkKG5hdGl2ZUlucHV0VmFsdWUpICYmICFzdHJpbmdJc1NldEFuZEZpbGxlZCh0aGlzLmhvdXJzKSAmJiAhc3RyaW5nSXNTZXRBbmRGaWxsZWQodGhpcy5taW51dGVzKSkge1xuXHRcdFx0dGhpcy5zZXRJbm5lclZhbHVlQW5kTm90aWZ5KG51bGwpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHQvLyBpZiB3ZSBoYXZlIGRhdGUgYW5kIHRpbWVcblx0XHRpZiAoXG5cdFx0XHRzdHJpbmdJc1NldEFuZEZpbGxlZCh0aGlzLmhvdXJzKSAmJlxuXHRcdFx0TnVtYmVyLmlzRmluaXRlKHBhcnNlZEhvdXJzKSAmJlxuXHRcdFx0cGFyc2VkSG91cnMgPj0gMCAmJlxuXHRcdFx0cGFyc2VkSG91cnMgPD0gMjMgJiZcblx0XHRcdHN0cmluZ0lzU2V0QW5kRmlsbGVkKHRoaXMubWludXRlcykgJiZcblx0XHRcdE51bWJlci5pc0Zpbml0ZShwYXJzZWRNaW51dGVzKSAmJlxuXHRcdFx0cGFyc2VkTWludXRlcyA+PSAwICYmXG5cdFx0XHRwYXJzZWRNaW51dGVzIDw9IDU5ICYmXG5cdFx0XHR0aGlzLnZhbHVlRm9yTWF0ZXJpYWxEYXRlUGlja2VyIGluc3RhbmNlb2YgRGF0ZVxuXHRcdCkge1xuXHRcdFx0Y29uc3QgbmV3RGF0ZVdpdGhIb3VycyA9IG5ldyBEYXRlKHRoaXMudmFsdWVGb3JNYXRlcmlhbERhdGVQaWNrZXIuc2V0SG91cnMocGFyc2VkSG91cnMpKTtcblx0XHRcdGNvbnN0IG5ld0RhdGVXaXRoTWludXRlcyA9IG5ldyBEYXRlKG5ld0RhdGVXaXRoSG91cnMuc2V0TWludXRlcyhwYXJzZWRNaW51dGVzKSk7XG5cdFx0XHR0aGlzLnNldElubmVyVmFsdWVBbmROb3RpZnkobmV3RGF0ZVdpdGhNaW51dGVzKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKHRoaXMuaW52YWxpZFRpbWVBc01pZG5pZ2h0KSB7XG5cdFx0XHRpZiAodGhpcy52YWx1ZUZvck1hdGVyaWFsRGF0ZVBpY2tlciBpbnN0YW5jZW9mIERhdGUpIHtcblx0XHRcdFx0dGhpcy5zZXRJbm5lclZhbHVlQW5kTm90aWZ5KHRoaXMudmFsdWVGb3JNYXRlcmlhbERhdGVQaWNrZXIpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIGFsbCBvdGhlciBjYXNlcywgd2UgYXJlIG5vdCBpbiBhIHZhbGlkIHN0YXRlXG5cdFx0dGhpcy5zZXRJbm5lclZhbHVlQW5kTm90aWZ5KGludmFsaWREYXRlS2V5KTtcblx0fVxuXG5cdHdyaXRlVmFsdWUodmFsdWU6IERhdGUgfCBBcnJheTxEYXRlPiB8IHR5cGVvZiBpbnZhbGlkRGF0ZUtleSk6IHZvaWQge1xuXHRcdHN1cGVyLndyaXRlVmFsdWUodmFsdWUpO1xuXHRcdGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0dGhpcy5zZWxlY3RlZERhdGVzID0gdmFsdWU7XG5cdFx0XHR0aGlzLmRldGVybWluZU1pbkFuZE1heERhdGVzKCk7XG5cdFx0XHR0aGlzLnZhbHVlRm9yTWF0ZXJpYWxEYXRlUGlja2VyID0gbnVsbDtcblx0XHRcdGlmIChhcnJheUlzU2V0QW5kRmlsbGVkKHZhbHVlKSkge1xuXHRcdFx0XHR0aGlzLm9wZW5QaWNrZXJPbkRhdGUgPSB0aGlzLnNlbGVjdGVkRGF0ZXNbMF07XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMudmFsdWVGb3JNYXRlcmlhbERhdGVQaWNrZXIgPSB2YWx1ZSA9PT0gaW52YWxpZERhdGVLZXkgPyBudWxsIDogdmFsdWU7XG5cdFx0XHRpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG5cdFx0XHRcdHRoaXMuaG91cnMgPSBTdHJpbmcodmFsdWUuZ2V0SG91cnMoKSk7XG5cdFx0XHRcdHRoaXMubWludXRlcyA9IFN0cmluZyh2YWx1ZS5nZXRNaW51dGVzKCkpO1xuXHRcdFx0XHR0aGlzLmZvcm1hdFRpbWUoKTtcblx0XHRcdFx0dGhpcy5vcGVuUGlja2VyT25EYXRlID0gdmFsdWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLmhvdXJzID0gdGhpcy5pbml0SG91ciA/PyAnJztcblx0XHRcdFx0dGhpcy5taW51dGVzID0gdGhpcy5pbml0TWludXRlID8/ICcnO1xuXHRcdFx0XHR0aGlzLm9wZW5QaWNrZXJPbkRhdGUgPSBudWxsO1xuXHRcdFx0XHR0aGlzLnNlbGVjdGVkRGF0ZXMgPSBbXTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBuYXRpdmVWYWx1ZUNoYW5nZWQgaXMgY2FsbGVkIHdoZW4gdGhlIGludGVybmFsIHRleHQgdmFsdWUgY2hhbmdlcywgYnV0IG5vdFxuXHQvLyB3aGVuIHRoZSBkYXRlIGlzIGNoYW5nZWQgdmlhIHRoZSBkYXRlIHBpY2tlci4gV2UgbmVlZCB0aGlzIHNvIHRoYXQgd2UgY2FuXG5cdC8vIGRldGVybWluZSBpZiB0aGUgZGF0ZXBpY2tlciBpcyBlbXB0eSBvciBpbnZhbGlkLlxuXHRuYXRpdmVWYWx1ZUNoYW5nZWQoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuZGF0ZVBpY2tlclJlZi5vcGVuZWQpIHtcblx0XHRcdC8vIGlmIHRoZSB1c2VyIGlzIHR5cGluZyBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBwaWNrZXIsIGNsb3NlIGl0LlxuXHRcdFx0dGhpcy5kYXRlUGlja2VyUmVmLmNsb3NlKCk7XG5cdFx0fVxuXHRcdHRoaXMubm90aWZ5TmV3RGF0ZSgpO1xuXHR9XG5cblx0cmVzZXRUb051bGwoKTogdm9pZCB7XG5cdFx0dGhpcy5zZXRJbm5lclZhbHVlQW5kTm90aWZ5KG51bGwpO1xuXHRcdHRoaXMudmFsdWVGb3JNYXRlcmlhbERhdGVQaWNrZXIgPSBudWxsO1xuXHRcdHRoaXMubmF0aXZlSW5wdXRSZWYubmF0aXZlRWxlbWVudC52YWx1ZSA9IG51bGw7XG5cdFx0dGhpcy5ob3VycyA9ICcnO1xuXHRcdHRoaXMubWludXRlcyA9ICcnO1xuXHRcdHRoaXMuc2VsZWN0ZWREYXRlcyA9IFtdO1xuXHR9XG5cblx0aXNTZWxlY3RlZCA9IChkOiBEYXRlKSA9PiB7XG5cdFx0aWYgKHRoaXMubXVsdGlwbGUpIHtcblx0XHRcdHJldHVybiB0aGlzLnNlbGVjdGVkRGF0ZXMuc29tZSgoZSkgPT4gaXNTYW1lRGF5KGUsIGQpKSA/ICdzZWxlY3RlZCcgOiAnJztcblx0XHR9XG5cdFx0cmV0dXJuICcnO1xuXHR9O1xuXHRmaWx0ZXJEYXRlczogRGF0ZUZpbHRlckZuPGFueT4gPSAoZSkgPT4ge1xuXHRcdGlmICh0aGlzLmRpc2FibGVkKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9O1xuXG5cblx0Zm9ybWF0VGltZSgpOiB2b2lkIHtcblx0XHRpZiAoTnVtYmVyLmlzRmluaXRlKE51bWJlcih0aGlzLmhvdXJzKSkgJiYgdGhpcy5ob3Vycy5sZW5ndGggPT09IDEpIHtcblx0XHRcdHRoaXMuaG91cnMgPSAnMCcgKyB0aGlzLmhvdXJzO1xuXHRcdH1cblx0XHRpZiAoTnVtYmVyLmlzRmluaXRlKE51bWJlcih0aGlzLm1pbnV0ZXMpKSAmJiB0aGlzLm1pbnV0ZXMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHR0aGlzLm1pbnV0ZXMgPSAnMCcgKyB0aGlzLm1pbnV0ZXM7XG5cdFx0fVxuXHR9XG5cblx0dG91Y2hEYXRlKCk6IHZvaWQge1xuXHRcdHRoaXMuZGF0ZVRvdWNoZWQgPSB0cnVlO1xuXHRcdHRoaXMuZGV0ZXJtaW5lQWxsVG91Y2hlZCgpO1xuXHR9XG5cblx0dG91Y2hIb3VycygpOiB2b2lkIHtcblx0XHR0aGlzLmhvdXJzVG91Y2hlZCA9IHRydWU7XG5cdFx0dGhpcy5kZXRlcm1pbmVBbGxUb3VjaGVkKCk7XG5cdH1cblxuXHR0b3VjaE1pbnV0ZXMoKTogdm9pZCB7XG5cdFx0dGhpcy5taW51dGVzVG91Y2hlZCA9IHRydWU7XG5cdFx0dGhpcy5kZXRlcm1pbmVBbGxUb3VjaGVkKCk7XG5cdH1cblxuXHRkZXRlcm1pbmVBbGxUb3VjaGVkKCk6IHZvaWQge1xuXHRcdGlmICgodGhpcy5kYXRlVG91Y2hlZCAmJiB0aGlzLmhvdXJzVG91Y2hlZCAmJiB0aGlzLm1pbnV0ZXNUb3VjaGVkKSB8fCAodGhpcy5kYXRlVG91Y2hlZCAmJiAhdGhpcy5zaG93VGltZUlucHV0KSkge1xuXHRcdFx0dGhpcy50b3VjaCgpO1xuXHRcdH1cblx0fVxuXG5cblx0Z2V0RGVmYXVsdFRyYW5zbGF0aW9uKGtleTogc3RyaW5nKTogKHg6IGFueSkgPT4gc3RyaW5nIHtcblx0XHRzd2l0Y2ggKGtleSkge1xuXHRcdFx0Y2FzZSAncGxhY2Vob2xkZXInOlxuXHRcdFx0XHRyZXR1cm4gKCkgPT4gJ1NlbGVjdCBkYXRlJztcblx0XHRcdGNhc2UgJ3NlbGVjdERheXMnOlxuXHRcdFx0XHRyZXR1cm4gKCkgPT4gJ1NlbGVjdCBkYXkocyknO1xuXHRcdFx0Y2FzZSAnc2VsZWN0ZWREYXRlJzpcblx0XHRcdFx0cmV0dXJuIChkOiBEYXRlKSA9PiBkLnRvTG9jYWxlRGF0ZVN0cmluZygpO1xuXHRcdFx0Y2FzZSAnZGF5c1NlbGVjdGVkJzpcblx0XHRcdFx0cmV0dXJuIChhbW91bnQpID0+IGAke2Ftb3VudH0gZGF5cyBzZWxlY3RlZGA7XG5cdFx0XHRjYXNlICdzZWxlY3RlZEluTW9udGgnOlxuXHRcdFx0XHRyZXR1cm4gKGQ6IERhdGUpID0+IGAgaW4gJHtmb3JtYXREYXRlKGQsICdNTU1NJyl9YDtcblx0XHR9XG5cdH1cblxuXHRnZXRUcmFuc2xhdGlvbihrZXk6IHN0cmluZywgcGFyYW1zOiBhbnkgPSBudWxsKTogc3RyaW5nIHtcblx0XHRpZiAoa2V5ID09PSAncGxhY2Vob2xkZXInICYmIHRoaXMubXVsdGlwbGUpIHtcblx0XHRcdHJldHVybiAnJztcblx0XHR9XG5cdFx0aWYgKGtleSA9PT0gJ3BsYWNlaG9sZGVyJyAmJiBzdHJpbmdJc1NldEFuZEZpbGxlZCh0aGlzLnBsYWNlaG9sZGVyKSkge1xuXHRcdFx0cmV0dXJuIHRoaXMucGxhY2Vob2xkZXI7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLnRyYW5zbGF0aW9ucz8uW2tleV0/LihwYXJhbXMpID8/IHRoaXMuZ2V0RGVmYXVsdFRyYW5zbGF0aW9uKGtleSkocGFyYW1zKTtcblx0fVxuXG5cdGNvdW50ZXIoaTogbnVtYmVyKTogQXJyYXk8bnVtYmVyPiB7XG5cdFx0cmV0dXJuIG5ldyBBcnJheShpKS5maWxsKDApLm1hcCgoeCwgaikgPT4gaik7XG5cdH1cblxuXHRzZXRIb3VyKGhvdXI6IG51bWJlcik6IHZvaWQge1xuXHRcdHRoaXMuaG91cnMgPSBob3VyID4gOSA/IFN0cmluZyhob3VyKSA6ICcwJyArIGhvdXI7XG5cdFx0dGhpcy5ub3RpZnlOZXdEYXRlKCk7XG5cdH1cblxuXHRzZXRNaW51dGUobWludXRlOiBudW1iZXIpOiB2b2lkIHtcblx0XHR0aGlzLm1pbnV0ZXMgPSBtaW51dGUgPiA5ID8gU3RyaW5nKG1pbnV0ZSkgOiAnMCcgKyBtaW51dGU7XG5cdFx0dGhpcy5ub3RpZnlOZXdEYXRlKCk7XG5cdH1cblxuXHRibHVycmVkSG91cnMoKTogdm9pZCB7XG5cdFx0dGhpcy5mb3JtYXRUaW1lKCk7XG5cdFx0dGhpcy50b3VjaEhvdXJzKCk7XG5cdH1cblxuXHRibHVycmVkTWludXRlcygpOiB2b2lkIHtcblx0XHR0aGlzLmZvcm1hdFRpbWUoKTtcblx0XHR0aGlzLnRvdWNoTWludXRlcygpO1xuXHR9XG5cblx0aXNBY3RpdmUodG9DaGVjazogbnVtYmVyLCBhY3R1YWxWYWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0aWYgKCFzdHJpbmdJc1NldEFuZEZpbGxlZChhY3R1YWxWYWx1ZSkpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIE51bWJlcihhY3R1YWxWYWx1ZSkgPT09IHRvQ2hlY2s7XG5cdH1cblxuXHR0aW1lRHJvcGRvd25SZW5kZXJlZCA9ICgpID0+IHtcblx0XHRydW5OZXh0UmVuZGVyQ3ljbGUoKCkgPT4ge1xuXHRcdFx0dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuXHRcdFx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAgdGhpcy5jbGlja0hhbmRsZXJGb3JUaW1lRHJvcGRvd24pO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHRjb25zdCBhY3RpdmVIb3VyID0gdGhpcy50aW1lRG91YmxlRHJvcGRvd24ubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuaG91ck9mRGF5IC5pc0FjdGl2ZScpO1xuXHRcdGNvbnN0IGFjdGl2ZU1pbnV0ZSA9IHRoaXMudGltZURvdWJsZURyb3Bkb3duLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLm1pbnV0ZU9mSG91ciAuaXNBY3RpdmUnKTtcblx0XHRjb25zdCBhY3RpdmVIb3VyUGFyZW50ID0gYWN0aXZlSG91cj8ucGFyZW50RWxlbWVudDtcblx0XHRjb25zdCBhY3RpdmVNaW51dGVQYXJlbnQgPSBhY3RpdmVNaW51dGU/LnBhcmVudEVsZW1lbnQ7XG5cdFx0aWYgKGFjdGl2ZUhvdXJQYXJlbnQpIHtcblx0XHRcdGFjdGl2ZUhvdXJQYXJlbnQuc2Nyb2xsVG9wID0gYWN0aXZlSG91cj8ub2Zmc2V0VG9wIC0gMTEwO1xuXHRcdH1cblx0XHRpZiAoYWN0aXZlTWludXRlUGFyZW50KSB7XG5cdFx0XHRhY3RpdmVNaW51dGVQYXJlbnQuc2Nyb2xsVG9wID0gYWN0aXZlTWludXRlPy5vZmZzZXRUb3AgLSAxMTA7XG5cdFx0fVxuXHR9XG5cblx0Y2xpY2tIYW5kbGVyRm9yVGltZURyb3Bkb3duID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG5cdFx0aWYgKHRoaXMuZHJvcGRvd25WaXNpYmxlKSB7XG5cdFx0XHRjb25zdCBkcm9wZG93biA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcudGltZURvdWJsZURyb3Bkb3duJyk7XG5cdFx0XHRpZiAoIWRyb3Bkb3duLmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcblx0XHRcdFx0dGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcblx0XHRcdFx0XHR0aGlzLmRyb3Bkb3duVmlzaWJsZSA9IGZhbHNlO1xuXHRcdFx0XHRcdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsICB0aGlzLmNsaWNrSGFuZGxlckZvclRpbWVEcm9wZG93bik7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHRzaGl6emxlKCkge1xuXHRcdGNvbnNvbGUubG9nKCdhJyk7XG5cdFx0dGhpcy5kYXRlUGlja2VyUmVmLm9wZW4oKTtcblx0fVxufVxuIiwiPGRpdiBjbGFzcz1cImNvbXBvbmVudENvbnRhaW5lclwiIFtuZ0NsYXNzXT1cIntzaG93RXJyb3JzOiBpc0luRXJyb3JTdGF0ZSgpfVwiIFtuZ0NsYXNzXT1cIntkaXNhYmxlZDogZGlzYWJsZWR9XCI+XG5cdDxkaXYgY2xhc3M9XCJkYXRlQ29udGFpbmVyXCIgW25nQ2xhc3NdPVwie25vUmlnaHRCb3JkZXI6ICFzaG93VGltZUlucHV0ICYmIGNsZWFyYWJsZSAmJiAhZGlzYWJsZWQsIGRpc2FibGVkOiBkaXNhYmxlZH1cIj5cblx0XHQ8bWF0LWZvcm0tZmllbGQgZmxvYXRMYWJlbD1cIm5ldmVyXCI+XG5cdFx0XHQ8ZGl2ICpuZ0lmPVwibXVsdGlwbGVcIiBjbGFzcz1cImRheXNTZWxlY3RlZENhcHRpb25cIiAoY2xpY2spPVwicGlja2VyLm9wZW4oKVwiIFtuZ0NsYXNzXT1cIntkaXNhYmxlZDogZGlzYWJsZWR9XCI+XG5cdFx0XHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZERhdGVzLmxlbmd0aCA+PSAyXCI+XG5cdFx0XHRcdFx0PHNwYW4+e3tnZXRUcmFuc2xhdGlvbignZGF5c1NlbGVjdGVkJywgc2VsZWN0ZWREYXRlcy5sZW5ndGgpfX08L3NwYW4+XG5cdFx0XHRcdFx0PHNwYW4gKm5nSWY9XCJnZXRTZWxlY3RlZE1vbnRocygpID09PSAxXCI+e3tnZXRUcmFuc2xhdGlvbignc2VsZWN0ZWRJbk1vbnRoJywgc2VsZWN0ZWREYXRlc1swXSl9fTwvc3Bhbj5cblx0XHRcdFx0PC9uZy1jb250YWluZXI+XG5cdFx0XHRcdDxzcGFuICpuZ0lmPVwic2VsZWN0ZWREYXRlcy5sZW5ndGggPT09IDFcIj57e2dldFRyYW5zbGF0aW9uKCdzZWxlY3RlZERhdGUnLCBzZWxlY3RlZERhdGVzWzBdKX19PC9zcGFuPlxuXHRcdFx0XHQ8c3BhbiAqbmdJZj1cInNlbGVjdGVkRGF0ZXMubGVuZ3RoID09PSAwXCIgY2xhc3M9XCJwbGFjZWhvbGRlckZvck11bHRpcGxlU2VsZWN0aW9uXCI+e3tnZXRUcmFuc2xhdGlvbignc2VsZWN0RGF5cycpfX08L3NwYW4+XG5cdFx0XHQ8L2Rpdj5cblxuXHRcdFx0QGlmIChkaXNhYmxlZCkge1xuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZGlzYWJsZWRDbGlja0FyZWFcIiAoY2xpY2spPVwicGlja2VyLm9wZW4oKVwiPjwvZGl2PlxuXHRcdFx0fVxuXHRcdFx0PGlucHV0XG5cdFx0XHRcdCNuYXRpdmVJbnB1dFxuXHRcdFx0XHRtYXRJbnB1dFxuXHRcdFx0XHRbbWF0RGF0ZXBpY2tlcl09XCJwaWNrZXJcIlxuXHRcdFx0XHRbbWF0RGF0ZXBpY2tlckZpbHRlcl09XCJmaWx0ZXJEYXRlc1wiXG5cdFx0XHRcdFsobmdNb2RlbCldPVwidmFsdWVGb3JNYXRlcmlhbERhdGVQaWNrZXJcIlxuXHRcdFx0XHQoZGF0ZUlucHV0KT1cImRhdGVDaGFuZ2VkKCRldmVudClcIlxuXHRcdFx0XHQoaW5wdXQpPVwibmF0aXZlVmFsdWVDaGFuZ2VkKClcIlxuXHRcdFx0XHQoY2xpY2spPVwicGlja2VyLm9wZW4oKVwiXG5cdFx0XHRcdFttaW5dPVwibWluRGF0ZVN0YXJ0T2ZEYXlcIlxuXHRcdFx0XHRbbWF4XT1cIm1heERhdGVFbmRPZkRheVwiXG5cdFx0XHRcdFtwbGFjZWhvbGRlcl09XCJnZXRUcmFuc2xhdGlvbigncGxhY2Vob2xkZXInKVwiXG5cdFx0XHRcdChibHVyKT1cInRvdWNoRGF0ZSgpXCJcblx0XHRcdFx0W25nQ2xhc3NdPVwie2lucHV0Rm9yTXVsdGlwbGVEYXlzOiBtdWx0aXBsZSwgZGlzYWJsZWQ6IGRpc2FibGVkfVwiXG5cdFx0XHQ+XG5cdFx0XHQ8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cInBpY2tlclwiPjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxuXHRcdFx0PG1hdC1kYXRlcGlja2VyXG5cdFx0XHRcdCNwaWNrZXJcblx0XHRcdFx0W2RhdGVDbGFzc109XCJpc1NlbGVjdGVkXCJcblx0XHRcdFx0W3N0YXJ0QXRdPVwib3BlblBpY2tlck9uRGF0ZVwiXG5cdFx0XHQ+PC9tYXQtZGF0ZXBpY2tlcj5cblx0XHQ8L21hdC1mb3JtLWZpZWxkPlxuXHRcdDxkaXYgY2xhc3M9XCJ0YWlsXCI+XG5cdFx0XHQ8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImdldFRhaWxUcGwoKVwiPjwvbmctY29udGFpbmVyPlxuXHRcdDwvZGl2PlxuXHQ8L2Rpdj5cblx0PGRpdiBjbGFzcz1cInRpbWVDb250YWluZXJcIiAqbmdJZj1cInNob3dUaW1lSW5wdXRcIiBbbmdDbGFzc109XCJ7ZGlzYWJsZWQ6IGRpc2FibGVkfVwiPlxuXG5cdFx0PGRpdiBjbGFzcz1cInRpbWVDb250YWluZXJJbm5lclwiPlxuXHRcdFx0PHN2ZyBjbGFzcz1cImNsb2NrSWNvblwiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiAoY2xpY2spPVwiaG91cklucHV0LmZvY3VzKClcIj5cblx0XHRcdFx0PHBhdGggZD1cIk0xMiA2VjEyTDE2IDE0TTIyIDEyQzIyIDE3LjUyMjggMTcuNTIyOCAyMiAxMiAyMkM2LjQ3NzE1IDIyIDIgMTcuNTIyOCAyIDEyQzIgNi40NzcxNSA2LjQ3NzE1IDIgMTIgMkMxNy41MjI4IDIgMjIgNi40NzcxNSAyMiAxMlpcIiBzdHJva2U9XCIjODg4ZGE4XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cblx0XHRcdDwvc3ZnPlxuXG5cdFx0XHQ8aW5wdXQgI2hvdXJJbnB1dCBtYXhsZW5ndGg9XCIyXCIgcGxhY2Vob2xkZXI9XCJfX1wiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIFsobmdNb2RlbCldPVwiaG91cnNcIiAobmdNb2RlbENoYW5nZSk9XCJub3RpZnlOZXdEYXRlKClcIiAoZm9jdXMpPVwiZHJvcGRvd25WaXNpYmxlID0gdHJ1ZVwiIChibHVyKT1cImJsdXJyZWRIb3VycygpO1wiPlxuXHRcdFx0PGRpdiBjbGFzcz1cImRpdmlkZXJcIj46PC9kaXY+XG5cdFx0XHQ8aW5wdXQgbWF4bGVuZ3RoPVwiMlwiIHBsYWNlaG9sZGVyPVwiX19cIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbKG5nTW9kZWwpXT1cIm1pbnV0ZXNcIiAobmdNb2RlbENoYW5nZSk9XCJub3RpZnlOZXdEYXRlKClcIiAoZm9jdXMpPVwiZHJvcGRvd25WaXNpYmxlID0gdHJ1ZVwiIChibHVyKT1cImJsdXJyZWRNaW51dGVzKCk7XCI+XG5cdFx0PC9kaXY+XG5cblx0XHQ8ZGl2IGNsYXNzPVwidGltZURvdWJsZURyb3Bkb3duXCIgI3RpbWVEb3VibGVEcm9wZG93biAqbmdJZj1cImRyb3Bkb3duVmlzaWJsZVwiIFtvblJlbmRlckZuXT1cInRpbWVEcm9wZG93blJlbmRlcmVkXCI+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwiaG91ck9mRGF5XCI+XG5cdFx0XHRcdEBmb3IgKGhvdXIgb2YgY291bnRlcigyNCk7IHRyYWNrIGhvdXIpIHtcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZW50cnlcIiAobW91c2Vkb3duKT1cInNldEhvdXIoaG91cilcIiBbbmdDbGFzc109XCJ7aXNBY3RpdmU6IGlzQWN0aXZlKGhvdXIsIGhvdXJzKX1cIj57e2hvdXIgPiA5ID8gaG91ciA6ICcwJyArIGhvdXIgfX08L2Rpdj5cblx0XHRcdFx0fVxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwibWludXRlT2ZIb3VyXCI+XG5cdFx0XHRcdEBmb3IgKG1pbnV0ZSBvZiBtaW51dGVzT2ZIb3VyOyB0cmFjayBtaW51dGUpIHtcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZW50cnlcIiAobW91c2Vkb3duKT1cInNldE1pbnV0ZShtaW51dGUpXCIgW25nQ2xhc3NdPVwie2lzQWN0aXZlOiBpc0FjdGl2ZShtaW51dGUsIG1pbnV0ZXMpfVwiPnt7bWludXRlID4gOSA/IG1pbnV0ZSA6ICcwJyArIG1pbnV0ZX19PC9kaXY+XG5cdFx0XHRcdH1cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PlxuXHQ8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -1,21 +0,0 @@
1
- import { Component, Input } from '@angular/core';
2
- import { NG_VALUE_ACCESSOR } from '@angular/forms';
3
- import { ValueAccessorBase } from '../value-accessor-base/value-accessor-base.component';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@angular/common";
6
- import * as i2 from "@angular/forms";
7
- export class EmailInputComponent extends ValueAccessorBase {
8
- constructor() {
9
- super(...arguments);
10
- this.placeholder = '';
11
- }
12
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: EmailInputComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
13
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: EmailInputComponent, selector: "klp-form-email-input", inputs: { placeholder: "placeholder" }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: EmailInputComponent, multi: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"componentContainer\">\n\t<input\n\t\ttype=\"email\"\n\t\tclass=\"form-control\"\n\t\t[(ngModel)]=\"innerValue\"\n\t\t(input)=\"setInnerValueAndNotify($event.target.value)\"\n\t\t[placeholder]=\"placeholder\"\n\t\t(blur)=\"touch()\"\n\t\t[disabled]=\"disabled\"\n\t\t[ngClass]=\"{showErrors: isInErrorState()}\"\n\t\t#nativeInputRef\n\t/>\n\t<div class=\"tail\">\n\t\t<ng-container [ngTemplateOutlet]=\"getTailTpl()\"></ng-container>\n\t</div>\n</div>\n", styles: [":host{display:block}input{outline:none;display:block;border:1px solid #D0D5DD;border-radius:8px;box-shadow:none;height:42px;width:100%;padding:.375rem .625rem;font-size:14px;color:#101828}input:hover{border-color:#98a2b3}input::-webkit-input-placeholder{color:#98a2b3}input:-moz-placeholder{color:#98a2b3}input::-moz-placeholder{color:#98a2b3}input:-ms-input-placeholder{color:#98a2b3}input:focus,input:focus-within{outline:1px solid #00AC42;box-shadow:none;border-color:#00ac42}input.input-sm{height:30px}input.input-lg{height:50px}input.error{border-color:#dc3545;background-color:#f6cdd1}input.valid{border-color:#37c936;background-color:#ebfaeb;color:#278d26}input:placeholder-shown{text-overflow:ellipsis}input[disabled]{background-color:#f2f4f7;border-color:#f2f4f7}.componentContainer{position:relative}.showErrors{border-color:#ff8000;padding-right:2rem}.tail{position:absolute;right:.625rem;display:flex;align-items:center;top:0;bottom:0;gap:.625rem}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
14
- }
15
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: EmailInputComponent, decorators: [{
16
- type: Component,
17
- args: [{ selector: 'klp-form-email-input', providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: EmailInputComponent, multi: true }], template: "<div class=\"componentContainer\">\n\t<input\n\t\ttype=\"email\"\n\t\tclass=\"form-control\"\n\t\t[(ngModel)]=\"innerValue\"\n\t\t(input)=\"setInnerValueAndNotify($event.target.value)\"\n\t\t[placeholder]=\"placeholder\"\n\t\t(blur)=\"touch()\"\n\t\t[disabled]=\"disabled\"\n\t\t[ngClass]=\"{showErrors: isInErrorState()}\"\n\t\t#nativeInputRef\n\t/>\n\t<div class=\"tail\">\n\t\t<ng-container [ngTemplateOutlet]=\"getTailTpl()\"></ng-container>\n\t</div>\n</div>\n", styles: [":host{display:block}input{outline:none;display:block;border:1px solid #D0D5DD;border-radius:8px;box-shadow:none;height:42px;width:100%;padding:.375rem .625rem;font-size:14px;color:#101828}input:hover{border-color:#98a2b3}input::-webkit-input-placeholder{color:#98a2b3}input:-moz-placeholder{color:#98a2b3}input::-moz-placeholder{color:#98a2b3}input:-ms-input-placeholder{color:#98a2b3}input:focus,input:focus-within{outline:1px solid #00AC42;box-shadow:none;border-color:#00ac42}input.input-sm{height:30px}input.input-lg{height:50px}input.error{border-color:#dc3545;background-color:#f6cdd1}input.valid{border-color:#37c936;background-color:#ebfaeb;color:#278d26}input:placeholder-shown{text-overflow:ellipsis}input[disabled]{background-color:#f2f4f7;border-color:#f2f4f7}.componentContainer{position:relative}.showErrors{border-color:#ff8000;padding-right:2rem}.tail{position:absolute;right:.625rem;display:flex;align-items:center;top:0;bottom:0;gap:.625rem}\n"] }]
18
- }], propDecorators: { placeholder: [{
19
- type: Input
20
- }] } });
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1haWwtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2xpcHBhL25neC1lbmhhbmN5LWZvcm1zL3NyYy9saWIvZWxlbWVudHMvZW1haWwvZW1haWwtaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2xpcHBhL25neC1lbmhhbmN5LWZvcm1zL3NyYy9saWIvZWxlbWVudHMvZW1haWwvZW1haWwtaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDL0MsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sc0RBQXNELENBQUM7Ozs7QUFRdkYsTUFBTSxPQUFPLG1CQUFvQixTQUFRLGlCQUF5QjtJQU5sRTs7UUFPVSxnQkFBVyxHQUFHLEVBQUUsQ0FBQztLQUMxQjs4R0FGWSxtQkFBbUI7a0dBQW5CLG1CQUFtQix1RkFGcEIsQ0FBQyxFQUFDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBQyxDQUFDLGlEQ1J6RixtZEFnQkE7OzJGRE5hLG1CQUFtQjtrQkFOL0IsU0FBUzsrQkFDQyxzQkFBc0IsYUFHckIsQ0FBQyxFQUFDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxXQUFXLHFCQUFxQixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUMsQ0FBQzs4QkFHL0UsV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBJbnB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge05HX1ZBTFVFX0FDQ0VTU09SfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1ZhbHVlQWNjZXNzb3JCYXNlfSBmcm9tICcuLi92YWx1ZS1hY2Nlc3Nvci1iYXNlL3ZhbHVlLWFjY2Vzc29yLWJhc2UuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAna2xwLWZvcm0tZW1haWwtaW5wdXQnLFxuXHR0ZW1wbGF0ZVVybDogJy4vZW1haWwtaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuXHRzdHlsZVVybHM6IFsnLi9lbWFpbC1pbnB1dC5jb21wb25lbnQuc2NzcyddLFxuXHRwcm92aWRlcnM6IFt7cHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsIHVzZUV4aXN0aW5nOiBFbWFpbElucHV0Q29tcG9uZW50LCBtdWx0aTogdHJ1ZX1dLFxufSlcbmV4cG9ydCBjbGFzcyBFbWFpbElucHV0Q29tcG9uZW50IGV4dGVuZHMgVmFsdWVBY2Nlc3NvckJhc2U8c3RyaW5nPiB7XG5cdEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJyc7XG59XG4iLCI8ZGl2IGNsYXNzPVwiY29tcG9uZW50Q29udGFpbmVyXCI+XG5cdDxpbnB1dFxuXHRcdHR5cGU9XCJlbWFpbFwiXG5cdFx0Y2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuXHRcdFsobmdNb2RlbCldPVwiaW5uZXJWYWx1ZVwiXG5cdFx0KGlucHV0KT1cInNldElubmVyVmFsdWVBbmROb3RpZnkoJGV2ZW50LnRhcmdldC52YWx1ZSlcIlxuXHRcdFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG5cdFx0KGJsdXIpPVwidG91Y2goKVwiXG5cdFx0W2Rpc2FibGVkXT1cImRpc2FibGVkXCJcblx0XHRbbmdDbGFzc109XCJ7c2hvd0Vycm9yczogaXNJbkVycm9yU3RhdGUoKX1cIlxuXHRcdCNuYXRpdmVJbnB1dFJlZlxuXHQvPlxuXHQ8ZGl2IGNsYXNzPVwidGFpbFwiPlxuXHRcdDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZ2V0VGFpbFRwbCgpXCI+PC9uZy1jb250YWluZXI+XG5cdDwvZGl2PlxuPC9kaXY+XG4iXX0=