@piserve-tech/form-submission 1.3.19 → 1.3.21
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.
- package/esm2022/form-fields/date-time-fields/date-time-fields.component.mjs +240 -18
- package/esm2022/form-fields/drop-down-fields/drop-down-fields.component.mjs +1 -1
- package/esm2022/form-fields/form-fields.module.mjs +8 -4
- package/esm2022/form-fields/mobile-fields/mobile-fields.component.mjs +55 -9
- package/esm2022/models/appearance.model.mjs +1 -1
- package/esm2022/models/validation.model.mjs +1 -1
- package/esm2022/services/mapper.service.mjs +7 -2
- package/fesm2022/piserve-tech-form-submission.mjs +309 -32
- package/fesm2022/piserve-tech-form-submission.mjs.map +1 -1
- package/form-fields/date-time-fields/date-time-fields.component.d.ts +11 -2
- package/form-fields/form-fields.module.d.ts +2 -1
- package/form-fields/mobile-fields/mobile-fields.component.d.ts +7 -2
- package/models/appearance.model.d.ts +1 -0
- package/models/validation.model.d.ts +4 -0
- package/package.json +2 -2
|
@@ -4,26 +4,35 @@ import * as i0 from "@angular/core";
|
|
|
4
4
|
import * as i1 from "@angular/common";
|
|
5
5
|
import * as i2 from "@angular/forms";
|
|
6
6
|
import * as i3 from "ngx-bootstrap/datepicker";
|
|
7
|
+
import * as i4 from "ngx-material-timepicker";
|
|
7
8
|
export class DateTimeFieldsComponent {
|
|
8
9
|
constructor(datePipe) {
|
|
9
10
|
this.datePipe = datePipe;
|
|
10
11
|
this.bsConfig = {
|
|
11
|
-
containerClass: 'theme-
|
|
12
|
+
containerClass: 'theme-dark-blue',
|
|
13
|
+
isAnimated: true,
|
|
14
|
+
adaptivePosition: true,
|
|
15
|
+
showWeekNumbers: false,
|
|
12
16
|
};
|
|
13
17
|
this.question = {};
|
|
14
18
|
this.required = false;
|
|
15
19
|
this.hint = '';
|
|
16
20
|
this.count = 0;
|
|
21
|
+
this.minTime = '';
|
|
22
|
+
this.maxTime = '';
|
|
17
23
|
this.dateType = '';
|
|
18
24
|
this.format = '';
|
|
25
|
+
this.timeFormat = '';
|
|
19
26
|
this.minDateOption = '';
|
|
20
27
|
this.maxDateOption = '';
|
|
21
28
|
this.todayDate = new Date();
|
|
22
|
-
this.selectedDate =
|
|
29
|
+
this.selectedDate = null;
|
|
23
30
|
this.selectedTime = '';
|
|
24
31
|
this.selectedDateRange = '';
|
|
25
|
-
this.selectedDateAndTime =
|
|
32
|
+
this.selectedDateAndTime = null;
|
|
26
33
|
this.validationMessage = '';
|
|
34
|
+
this.maxTimeOption = '';
|
|
35
|
+
this.minTimeOption = '';
|
|
27
36
|
}
|
|
28
37
|
ngOnInit() {
|
|
29
38
|
this.valueAssigned();
|
|
@@ -34,16 +43,82 @@ export class DateTimeFieldsComponent {
|
|
|
34
43
|
this.hint = this.question.hint;
|
|
35
44
|
this.dateType = this.question.formElement.appearance.dateType;
|
|
36
45
|
this.minDateOption = this.question.formElement.validation.minDateOption;
|
|
37
|
-
console.log('option', this.minDateOption);
|
|
38
46
|
this.minDate = this.getMinDate();
|
|
39
|
-
console.log('min', this.minDate);
|
|
40
47
|
this.maxDateOption = this.question.formElement.validation.maxDateOption;
|
|
41
48
|
this.maxDate = this.getMaxDate();
|
|
42
49
|
this.setDateTimeFormat();
|
|
43
|
-
this.
|
|
50
|
+
if (this.question?.answer && (this.question?.answer).length > 0)
|
|
51
|
+
this.selectedDate = this.question?.answer;
|
|
44
52
|
this.selectedTime = this.question.answer;
|
|
45
|
-
this.
|
|
53
|
+
if (this.question?.answer && (this.question?.answer).length > 0)
|
|
54
|
+
this.selectedDateAndTime = new Date(this.question.answer);
|
|
46
55
|
this.selectedDateRange = this.question.answer;
|
|
56
|
+
this.minTimeOption = this.question.formElement.validation.minTimeOption;
|
|
57
|
+
this.maxTimeOption = this.question.formElement.validation.maxTimeOption;
|
|
58
|
+
if (this.dateType !== 'DATE_AND_TIME') {
|
|
59
|
+
this.minTime = this.getMinTime().toString();
|
|
60
|
+
this.maxTime = this.getMaxTime().toString();
|
|
61
|
+
}
|
|
62
|
+
if (this.dateType === 'DATE_AND_TIME' && this.question?.answer) {
|
|
63
|
+
const dateTimeArray = this.question.answer
|
|
64
|
+
? this.question.answer.split(',')
|
|
65
|
+
: []; // Fallback to an empty array if `this.question.answer` is undefined
|
|
66
|
+
if (dateTimeArray.length === 2) {
|
|
67
|
+
const fetchedDate = dateTimeArray[0].trim();
|
|
68
|
+
const fetchedTime = dateTimeArray[1].trim();
|
|
69
|
+
this.selectedDate = fetchedDate;
|
|
70
|
+
this.selectedTime = fetchedTime;
|
|
71
|
+
}
|
|
72
|
+
const formattedDate = this.datePipe.transform(this.selectedDateAndTime, 'dd/MM/yyyy');
|
|
73
|
+
const formatteminDate = this.datePipe.transform(this.minDate, 'dd/MM/yyyy');
|
|
74
|
+
const formattemaxDate = this.datePipe.transform(this.maxDate, 'dd/MM/yyyy');
|
|
75
|
+
console.log("formattedDate" + formattedDate);
|
|
76
|
+
console.log("formattedDate" + formattemaxDate);
|
|
77
|
+
if (formattedDate === formatteminDate) {
|
|
78
|
+
this.minTime = this.getMinTime().toString();
|
|
79
|
+
if (this.timeFormat === '12') {
|
|
80
|
+
this.maxTime = '12:00 pm';
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
this.maxTime = '23:00';
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
if (formattedDate === formattemaxDate) {
|
|
87
|
+
this.maxTime = this.getMaxTime().toString();
|
|
88
|
+
if (this.timeFormat === '12') {
|
|
89
|
+
this.minTime = '12:00 am';
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
this.minTime = '00:00';
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
if (formattedDate !== formatteminDate && formattedDate !== formattemaxDate) {
|
|
96
|
+
if (this.timeFormat === '12') {
|
|
97
|
+
this.minTime = '12:00 am';
|
|
98
|
+
this.maxTime = '12:00 pm';
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
this.minTime = '00:00';
|
|
102
|
+
this.maxTime = '23:00';
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
if (!this.minTime || this.minTime.length === 0) {
|
|
107
|
+
if (this.timeFormat === '12') {
|
|
108
|
+
this.minTime = '12:00 am';
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
this.minTime = '00:00';
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
if (!this.maxTime || this.maxTime.length === 0) {
|
|
115
|
+
if (this.timeFormat === '12') {
|
|
116
|
+
this.maxTime = '12:00 pm';
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
this.maxTime = '23:00';
|
|
120
|
+
}
|
|
121
|
+
}
|
|
47
122
|
}
|
|
48
123
|
setDateTimeFormat() {
|
|
49
124
|
switch (this.dateType) {
|
|
@@ -51,10 +126,10 @@ export class DateTimeFieldsComponent {
|
|
|
51
126
|
this.format = this.question.formElement.appearance.format;
|
|
52
127
|
break;
|
|
53
128
|
case 'TIME_ONLY':
|
|
54
|
-
this.
|
|
129
|
+
this.timeFormat = this.question.formElement.appearance.timeFormat;
|
|
55
130
|
break;
|
|
56
131
|
case 'DATE_AND_TIME':
|
|
57
|
-
this.format = this.question.formElement.appearance.format
|
|
132
|
+
this.format = this.question.formElement.appearance.format;
|
|
58
133
|
break;
|
|
59
134
|
case 'DATE_RANGE':
|
|
60
135
|
this.format = this.question.formElement.appearance.format;
|
|
@@ -73,7 +148,7 @@ export class DateTimeFieldsComponent {
|
|
|
73
148
|
return undefined; // Return undefined if no valid option
|
|
74
149
|
}
|
|
75
150
|
getMaxDate() {
|
|
76
|
-
if (this.maxDateOption === '
|
|
151
|
+
if (this.maxDateOption === 'CURRENT_DATE') {
|
|
77
152
|
return this.todayDate;
|
|
78
153
|
}
|
|
79
154
|
else if (this.maxDateOption === 'CUSTOM') {
|
|
@@ -81,6 +156,43 @@ export class DateTimeFieldsComponent {
|
|
|
81
156
|
}
|
|
82
157
|
return undefined;
|
|
83
158
|
}
|
|
159
|
+
getMinTime() {
|
|
160
|
+
if (this.minTimeOption) {
|
|
161
|
+
const format = this.timeFormat === '24' ? 'HH:mm' : 'hh:mm a';
|
|
162
|
+
if (this.minTimeOption === 'CURRENT_TIME') {
|
|
163
|
+
const now = new Date();
|
|
164
|
+
return this.datePipe.transform(now, format) || '';
|
|
165
|
+
}
|
|
166
|
+
else if (this.minTimeOption === 'CUSTOM') {
|
|
167
|
+
const customTime = this.question.formElement.validation.minTime;
|
|
168
|
+
const [hours, minutes] = customTime.split(':'); // Split by colon to get hours and minutes
|
|
169
|
+
// Create a Date object with a fixed date and custom time
|
|
170
|
+
const customDate = new Date();
|
|
171
|
+
customDate.setHours(parseInt(hours, 10), parseInt(minutes, 10), 0, 0); // Set hours and minutes
|
|
172
|
+
return this.datePipe.transform(customDate, format) || '';
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
// Ensure a default return if no condition is met
|
|
176
|
+
return '';
|
|
177
|
+
}
|
|
178
|
+
getMaxTime() {
|
|
179
|
+
if (this.maxTimeOption) {
|
|
180
|
+
const format = this.timeFormat === '24' ? 'HH:mm' : 'hh:mm a';
|
|
181
|
+
if (this.maxTimeOption === 'CURRENT_TIME') {
|
|
182
|
+
const now = new Date();
|
|
183
|
+
return this.datePipe.transform(now, format) || '';
|
|
184
|
+
}
|
|
185
|
+
else if (this.maxTimeOption === 'CUSTOM') {
|
|
186
|
+
const customTime = this.question.formElement.validation.maxTime;
|
|
187
|
+
const [hours, minutes] = customTime.split(':'); // Split by colon to get hours and minutes
|
|
188
|
+
// Create a Date object with a fixed date and custom time
|
|
189
|
+
const customDate = new Date();
|
|
190
|
+
customDate.setHours(parseInt(hours, 10), parseInt(minutes, 10), 0, 0); // Set hours and minutes
|
|
191
|
+
return this.datePipe.transform(customDate, format) || '';
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
return '';
|
|
195
|
+
}
|
|
84
196
|
openDatePicker() {
|
|
85
197
|
this.datepicker.toggle();
|
|
86
198
|
}
|
|
@@ -92,7 +204,12 @@ export class DateTimeFieldsComponent {
|
|
|
92
204
|
}
|
|
93
205
|
validateField() {
|
|
94
206
|
if (this.dateType === 'DATE_ONLY') {
|
|
95
|
-
|
|
207
|
+
if (this.selectedDate) {
|
|
208
|
+
this.question.answer = this.formatDate(this.selectedDate.toString());
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
this.question.answer = '';
|
|
212
|
+
}
|
|
96
213
|
this.validateDateOnly();
|
|
97
214
|
}
|
|
98
215
|
else if (this.dateType === 'TIME_ONLY') {
|
|
@@ -100,7 +217,12 @@ export class DateTimeFieldsComponent {
|
|
|
100
217
|
this.validateTimeOnly();
|
|
101
218
|
}
|
|
102
219
|
else if (this.dateType === 'DATE_AND_TIME') {
|
|
103
|
-
|
|
220
|
+
if (this.selectedDateAndTime) {
|
|
221
|
+
this.question.answer = this.formatDate(this.selectedDateAndTime.toString());
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
this.question.answer = '';
|
|
225
|
+
}
|
|
104
226
|
this.validateDateAndTime();
|
|
105
227
|
}
|
|
106
228
|
else {
|
|
@@ -111,12 +233,48 @@ export class DateTimeFieldsComponent {
|
|
|
111
233
|
formatDate(date, type = 'dateTime') {
|
|
112
234
|
switch (this.dateType) {
|
|
113
235
|
case 'DATE_ONLY':
|
|
114
|
-
return this.datePipe.transform(
|
|
236
|
+
return this.datePipe.transform(this.selectedDate, 'dd/MM/yyyy') || '';
|
|
115
237
|
case 'DATE_AND_TIME':
|
|
116
|
-
|
|
238
|
+
const formattedDate = this.datePipe.transform(this.selectedDateAndTime, 'dd/MM/yyyy');
|
|
239
|
+
const formatteminDate = this.datePipe.transform(this.minDate, 'dd/MM/yyyy');
|
|
240
|
+
const formattemaxDate = this.datePipe.transform(this.maxDate, 'dd/MM/yyyy');
|
|
241
|
+
if (formattedDate === formatteminDate) {
|
|
242
|
+
this.minTime = this.getMinTime().toString();
|
|
243
|
+
if (this.timeFormat === '12') {
|
|
244
|
+
this.maxTime = '12:00 pm';
|
|
245
|
+
}
|
|
246
|
+
else {
|
|
247
|
+
this.maxTime = '23:00';
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
if (formattedDate === formattemaxDate) {
|
|
251
|
+
this.maxTime = this.getMaxTime().toString();
|
|
252
|
+
if (this.timeFormat === '12') {
|
|
253
|
+
this.minTime = '12:00 am';
|
|
254
|
+
}
|
|
255
|
+
else {
|
|
256
|
+
this.minTime = '00:00';
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
if (formattedDate !== formatteminDate && formattedDate !== formattemaxDate) {
|
|
260
|
+
if (this.timeFormat === '12') {
|
|
261
|
+
this.minTime = '12:00 am';
|
|
262
|
+
this.maxTime = '12:00 pm';
|
|
263
|
+
}
|
|
264
|
+
else {
|
|
265
|
+
this.minTime = '00:00';
|
|
266
|
+
this.maxTime = '23:00';
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
const formattedTime = this.selectedTime || ''; // If selectedTime is null or undefined, use empty string
|
|
270
|
+
if (formattedDate && formattedTime) {
|
|
271
|
+
return `${formattedDate},${formattedTime}`;
|
|
272
|
+
}
|
|
273
|
+
return '';
|
|
117
274
|
case 'DATE_RANGE':
|
|
118
275
|
const dates = date;
|
|
119
|
-
|
|
276
|
+
// Ensure dates is defined and is an array
|
|
277
|
+
if (Array.isArray(dates) && dates.length === 2) {
|
|
120
278
|
const start = this.datePipe.transform(dates[0], 'dd/MM/yyyy');
|
|
121
279
|
const end = this.datePipe.transform(dates[1], 'dd/MM/yyyy');
|
|
122
280
|
return `${start} - ${end}`;
|
|
@@ -165,22 +323,86 @@ export class DateTimeFieldsComponent {
|
|
|
165
323
|
}
|
|
166
324
|
validateDateAndTime() {
|
|
167
325
|
this.validationFailed = false;
|
|
326
|
+
this.timeValidationFailed = false;
|
|
168
327
|
this.validationMessage = '';
|
|
169
328
|
if (this.required && !this.selectedDateAndTime) {
|
|
170
329
|
this.validationFailed = true;
|
|
171
330
|
this.validationMessage = 'This is a required question';
|
|
172
331
|
this.question.validation = false;
|
|
173
332
|
}
|
|
333
|
+
else if (this.required && !this.selectedTime) {
|
|
334
|
+
this.timeValidationFailed = true;
|
|
335
|
+
this.validationMessage = 'This is a required question';
|
|
336
|
+
this.question.validation = false;
|
|
337
|
+
}
|
|
174
338
|
else {
|
|
175
339
|
this.question.validation = true;
|
|
176
340
|
}
|
|
177
341
|
}
|
|
342
|
+
convertToISODate(dateInput) {
|
|
343
|
+
if (!dateInput) {
|
|
344
|
+
return null; // Return null if dateInput is null, undefined, or any falsy value
|
|
345
|
+
}
|
|
346
|
+
let year, month, day;
|
|
347
|
+
if (Array.isArray(dateInput)) {
|
|
348
|
+
// Extract year, month, and day from array input
|
|
349
|
+
[year, month, day] = dateInput;
|
|
350
|
+
// Validate the array format
|
|
351
|
+
if (typeof year !== 'number' ||
|
|
352
|
+
typeof month !== 'number' ||
|
|
353
|
+
typeof day !== 'number' ||
|
|
354
|
+
isNaN(year) ||
|
|
355
|
+
isNaN(month) ||
|
|
356
|
+
isNaN(day) ||
|
|
357
|
+
!Number.isInteger(year) ||
|
|
358
|
+
!Number.isInteger(month) ||
|
|
359
|
+
!Number.isInteger(day) ||
|
|
360
|
+
month < 1 ||
|
|
361
|
+
month > 12 ||
|
|
362
|
+
day < 1 ||
|
|
363
|
+
day > 31) {
|
|
364
|
+
return null;
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
else if (typeof dateInput === 'string') {
|
|
368
|
+
// Check if the string matches the YYYY-MM-DD format
|
|
369
|
+
const dateParts = dateInput.split('-');
|
|
370
|
+
if (dateParts.length !== 3)
|
|
371
|
+
return null;
|
|
372
|
+
[year, month, day] = dateParts.map(Number);
|
|
373
|
+
// Validate the parsed parts
|
|
374
|
+
if (isNaN(year) ||
|
|
375
|
+
isNaN(month) ||
|
|
376
|
+
isNaN(day) ||
|
|
377
|
+
!Number.isInteger(year) ||
|
|
378
|
+
!Number.isInteger(month) ||
|
|
379
|
+
!Number.isInteger(day) ||
|
|
380
|
+
month < 1 ||
|
|
381
|
+
month > 12 ||
|
|
382
|
+
day < 1 ||
|
|
383
|
+
day > 31) {
|
|
384
|
+
return null;
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
else {
|
|
388
|
+
return null; // Unsupported input type
|
|
389
|
+
}
|
|
390
|
+
// Create a Date object (month is 0-based, so subtract 1)
|
|
391
|
+
const date = new Date(year, month - 1, day);
|
|
392
|
+
// Verify if the Date object matches the provided year, month, and day
|
|
393
|
+
if (date.getFullYear() !== year ||
|
|
394
|
+
date.getMonth() !== month - 1 ||
|
|
395
|
+
date.getDate() !== day) {
|
|
396
|
+
return null;
|
|
397
|
+
}
|
|
398
|
+
return date;
|
|
399
|
+
}
|
|
178
400
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DateTimeFieldsComponent, deps: [{ token: i1.DatePipe }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
179
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DateTimeFieldsComponent, selector: "lib-date-time-fields", inputs: { question: "question" }, providers: [DatePipe], viewQueries: [{ propertyName: "datepicker", first: true, predicate: ["datepickerYMD"], descendants: true }, { propertyName: "dateRangePicker", first: true, predicate: ["daterangepicker"], descendants: true }, { propertyName: "dateAndTimePicker", first: true, predicate: ["dateAndTimePicker"], descendants: true }], ngImport: i0, template: "<div [ngClass]=\"'col-' + count\" class=\"mb-5 px-3\">\n <div class=\"input-wrapper mb-2\">\n <div [innerHTML]=\"question.questionNumber\"></div>\n <label>{{ question.question }}</label\n > \n <span class=\"text-danger\" *ngIf=\"required\">*</span>\n <div\n class=\"svg-wrapper mb-2 hintIcon\"\n [attr.data-title]=\"hint\"\n *ngIf=\"hint\"\n >\n <svg\n class=\"hintSvg\"\n viewBox=\"0 0 30 30\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n </div>\n <ng-container *ngIf=\"dateType === 'DATE_ONLY'\">\n <!-- Date only picker -->\n <div class=\"input-container\">\n <input\n class=\"form-control height\"\n #datepickerYMD=\"bsDatepicker\"\n bsDatepicker\n [minDate]=\"minDate ? minDate : undefined\"\n [maxDate]=\"maxDate ? maxDate : undefined\"\n [bsConfig]=\"{ dateInputFormat: format }\"\n [(ngModel)]=\"selectedDate\"\n (blur)=\"validateField()\"\n (ngModelChange)=\"validateField()\"\n [class.invalid]=\"validationFailed\"\n />\n <i\n class=\"fa-solid fa-calendar-days calendar-icon text-primary fs-5\"\n (click)=\"openDatePicker()\"\n ></i>\n </div>\n <div *ngIf=\"validationFailed\" class=\"text-danger mt-2\">\n <svg\n class=\"validationSvg\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M12.001 16.75C12.139 16.75 12.251 16.638 12.25 16.5C12.25 16.362 12.138 16.25 12 16.25C11.862 16.25 11.75 16.362 11.75 16.5C11.75 16.638 11.862 16.75 12.001 16.75\"\n stroke=\"white\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M12 21C7.029 21 3 16.971 3 12C3 7.029 7.029 3 12 3C16.971 3 21 7.029 21 12C21 16.971 16.971 21 12 21Z\"\n fill=\"#FF0000\"\n stroke=\"#FF0000\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M12 12.75L12 7.75\"\n stroke=\"white\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <circle cx=\"12\" cy=\"16\" r=\"1\" fill=\"white\" />\n </svg>\n {{ validationMessage }}\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"dateType === 'TIME_ONLY'\">\n <!-- Time picker -->\n <input\n type=\"time\"\n class=\"form-control height\"\n (blur)=\"validateField()\"\n [(ngModel)]=\"selectedTime\"\n (ngModelChange)=\"validateField()\"\n [class.invalid]=\"validationFailed\"\n />\n <div *ngIf=\"validationFailed\" class=\"text-danger mt-2\">\n <svg\n class=\"validationSvg\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M12.001 16.75C12.139 16.75 12.251 16.638 12.25 16.5C12.25 16.362 12.138 16.25 12 16.25C11.862 16.25 11.75 16.362 11.75 16.5C11.75 16.638 11.862 16.75 12.001 16.75\"\n stroke=\"white\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M12 21C7.029 21 3 16.971 3 12C3 7.029 7.029 3 12 3C16.971 3 21 7.029 21 12C21 16.971 16.971 21 12 21Z\"\n fill=\"#FF0000\"\n stroke=\"#FF0000\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M12 12.75L12 7.75\"\n stroke=\"white\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <circle cx=\"12\" cy=\"16\" r=\"1\" fill=\"white\" />\n </svg>\n {{ validationMessage }}\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"dateType === 'DATE_AND_TIME'\">\n <!-- Date and time picker -->\n <div class=\"input-container\">\n <input\n #dateAndTimePicker=\"bsDatepicker\"\n type=\"text\"\n class=\"form-control height\"\n [minDate]=\"minDate ? minDate : undefined\"\n [maxDate]=\"maxDate ? maxDate : undefined\"\n [bsConfig]=\"{\n withTimepicker: true,\n keepDatepickerOpened: true,\n rangeInputFormat: format,\n dateInputFormat: format\n }\"\n bsDatepicker\n [class.invalid]=\"validationFailed\"\n [(ngModel)]=\"selectedDateAndTime\"\n (blur)=\"validateField()\"\n (ngModelChange)=\"validateField()\"\n />\n <i\n class=\"fa-solid fa-calendar-days calendar-icon text-primary fs-5\"\n (click)=\"openDateAndTimePicker()\"\n ></i>\n </div>\n <div *ngIf=\"validationFailed\" class=\"text-danger mt-2\">\n <svg\n class=\"validationSvg\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M12.001 16.75C12.139 16.75 12.251 16.638 12.25 16.5C12.25 16.362 12.138 16.25 12 16.25C11.862 16.25 11.75 16.362 11.75 16.5C11.75 16.638 11.862 16.75 12.001 16.75\"\n stroke=\"white\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M12 21C7.029 21 3 16.971 3 12C3 7.029 7.029 3 12 3C16.971 3 21 7.029 21 12C21 16.971 16.971 21 12 21Z\"\n fill=\"#FF0000\"\n stroke=\"#FF0000\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M12 12.75L12 7.75\"\n stroke=\"white\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <circle cx=\"12\" cy=\"16\" r=\"1\" fill=\"white\" />\n </svg>\n {{ validationMessage }}\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"dateType === 'DATE_RANGE'\">\n <!-- Date range picker -->\n <div class=\"input-container\">\n <input\n type=\"text\"\n class=\"form-control height\"\n #daterangepicker=\"bsDaterangepicker\"\n bsDaterangepicker\n [minDate]=\"minDate ? minDate : undefined\"\n [maxDate]=\"maxDate ? maxDate : undefined\"\n [bsConfig]=\"{\n rangeInputFormat: format,\n dateInputFormat: format,\n showWeekNumbers: false\n }\"\n [(ngModel)]=\"selectedDateRange\"\n (blur)=\"validateField()\"\n (ngModelChange)=\"validateField()\"\n [class.invalid]=\"validationFailed\"\n />\n <i\n class=\"fa-solid fa-calendar-days calendar-icon text-primary fs-5\"\n (click)=\"openDateRangePicker()\"\n ></i>\n </div>\n <div *ngIf=\"validationFailed\" class=\"text-danger mt-2\">\n <svg\n class=\"validationSvg\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M12.001 16.75C12.139 16.75 12.251 16.638 12.25 16.5C12.25 16.362 12.138 16.25 12 16.25C11.862 16.25 11.75 16.362 11.75 16.5C11.75 16.638 11.862 16.75 12.001 16.75\"\n stroke=\"white\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M12 21C7.029 21 3 16.971 3 12C3 7.029 7.029 3 12 3C16.971 3 21 7.029 21 12C21 16.971 16.971 21 12 21Z\"\n fill=\"#FF0000\"\n stroke=\"#FF0000\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M12 12.75L12 7.75\"\n stroke=\"white\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <circle cx=\"12\" cy=\"16\" r=\"1\" fill=\"white\" />\n </svg>\n {{ validationMessage }}\n </div>\n </ng-container>\n</div>\n", styles: [".input-wrapper{display:flex;align-items:flex-start}.svg-wrapper{margin-inline-start:auto;z-index:999}.hintIcon{position:relative;cursor:pointer}.hintIcon:hover:before{content:attr(data-title);position:absolute;top:calc(100% + 2px);right:0;padding:4px 8px;border-radius:4px;background-color:#1d252d;color:#8e9aa0;font-size:14px;min-width:300px;word-wrap:break-word;word-break:break-word;text-align:center;white-space:normal}.hintIcon:hover:after{content:\"\";position:absolute;top:calc(100% - 26px);left:50%;border:solid transparent;border-width:18px;border-bottom-color:#1d252d;transform:translate(-50%)}.height{height:42px}.invalid{border-color:red}.hintSvg{width:30px;height:30px;fill:none}.validationSvg{width:24px;height:24px;fill:none}.input-container{position:relative}.input-container .form-control{padding-right:30px}.input-container .calendar-icon{position:absolute;top:50%;right:10px;transform:translateY(-50%);cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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"] }, { kind: "directive", type: i3.BsDatepickerDirective, selector: "[bsDatepicker]", inputs: ["placement", "triggers", "outsideClick", "container", "outsideEsc", "isDisabled", "minDate", "maxDate", "minMode", "daysDisabled", "datesDisabled", "datesEnabled", "dateCustomClasses", "dateTooltipTexts", "isOpen", "bsValue", "bsConfig"], outputs: ["onShown", "onHidden", "bsValueChange"], exportAs: ["bsDatepicker"] }, { kind: "directive", type: i3.BsDatepickerInputDirective, selector: "input[bsDatepicker]" }, { kind: "directive", type: i3.BsDaterangepickerDirective, selector: "[bsDaterangepicker]", inputs: ["placement", "triggers", "outsideClick", "container", "outsideEsc", "isOpen", "bsValue", "bsConfig", "isDisabled", "minDate", "maxDate", "dateCustomClasses", "daysDisabled", "datesDisabled", "datesEnabled"], outputs: ["onShown", "onHidden", "bsValueChange"], exportAs: ["bsDaterangepicker"] }, { kind: "directive", type: i3.BsDaterangepickerInputDirective, selector: "input[bsDaterangepicker]" }] }); }
|
|
401
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DateTimeFieldsComponent, selector: "lib-date-time-fields", inputs: { question: "question" }, providers: [DatePipe], viewQueries: [{ propertyName: "datepicker", first: true, predicate: ["datepickerYMD"], descendants: true }, { propertyName: "dateRangePicker", first: true, predicate: ["daterangepicker"], descendants: true }, { propertyName: "dateAndTimePicker", first: true, predicate: ["dateAndTimePicker"], descendants: true }], ngImport: i0, template: "<div [ngClass]=\"'col-' + count\" class=\"mb-5 px-3\">\n <div class=\"input-wrapper mb-2\">\n <div [innerHTML]=\"question.questionNumber\"></div>\n <label>{{ question.question }}</label\n > \n <span class=\"text-danger\" *ngIf=\"required\">*</span>\n <div\n class=\"svg-wrapper mb-2 hintIcon\"\n [attr.data-title]=\"hint\"\n *ngIf=\"hint\"\n >\n <svg\n class=\"hintSvg\"\n viewBox=\"0 0 30 30\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n </div>\n <ng-container *ngIf=\"dateType === 'DATE_ONLY'\">\n <!-- Date only picker -->\n <div class=\"input-container\">\n <input\n class=\"form-control height\"\n #datepickerYMD=\"bsDatepicker\"\n bsDatepicker\n [minDate]=\"minDate ? minDate : undefined\"\n [maxDate]=\"maxDate ? maxDate : undefined\"\n [bsConfig]=\"{ dateInputFormat: format }\"\n [(ngModel)]=\"selectedDate\"\n (blur)=\"validateField()\"\n (ngModelChange)=\"validateField()\"\n [class.invalid]=\"validationFailed\"\n placeholder=\"Select date\"\n />\n <i\n class=\"fa-solid fa-calendar-days calendar-icon text-primary fs-5\"\n (click)=\"openDatePicker()\"\n ></i>\n </div>\n <div *ngIf=\"validationFailed\" class=\"text-danger mt-2\">\n <svg\n class=\"validationSvg\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M12.001 16.75C12.139 16.75 12.251 16.638 12.25 16.5C12.25 16.362 12.138 16.25 12 16.25C11.862 16.25 11.75 16.362 11.75 16.5C11.75 16.638 11.862 16.75 12.001 16.75\"\n stroke=\"white\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M12 21C7.029 21 3 16.971 3 12C3 7.029 7.029 3 12 3C16.971 3 21 7.029 21 12C21 16.971 16.971 21 12 21Z\"\n fill=\"#FF0000\"\n stroke=\"#FF0000\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M12 12.75L12 7.75\"\n stroke=\"white\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <circle cx=\"12\" cy=\"16\" r=\"1\" fill=\"white\" />\n </svg>\n {{ validationMessage }}\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"dateType === 'TIME_ONLY'\">\n <!-- Time picker -->\n\n\n<div class=\"input-container\">\n <input\n class=\"form-control height appearanceInput mt-3\"\n aria-label=\"Select time\"\n placeholder=\"Select time\"\n readonly\n [format]=\"timeFormat==='24'?24:12\"\n [ngxTimepicker]=\"fullTime3\"\n [(ngModel)]=\"selectedTime\"\n [max]=\"maxTime\"\n [min]=\"minTime\"\n (ngModelChange)=\"validateField()\"\n [class.invalid]=\"validationFailed\"\n />\n \n <i\n id=\"startDateIcon\"\n class=\"fa-solid fa-clock text-primary fs-6 clock-icon\"\n (click)=\"fullTime3.open()\"\n style=\"cursor: pointer;\"\n></i>\n <ngx-material-timepicker #fullTime3></ngx-material-timepicker>\n</div>\n <div *ngIf=\"validationFailed\" class=\"text-danger mt-2\">\n <svg\n class=\"validationSvg\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M12.001 16.75C12.139 16.75 12.251 16.638 12.25 16.5C12.25 16.362 12.138 16.25 12 16.25C11.862 16.25 11.75 16.362 11.75 16.5C11.75 16.638 11.862 16.75 12.001 16.75\"\n stroke=\"white\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M12 21C7.029 21 3 16.971 3 12C3 7.029 7.029 3 12 3C16.971 3 21 7.029 21 12C21 16.971 16.971 21 12 21Z\"\n fill=\"#FF0000\"\n stroke=\"#FF0000\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M12 12.75L12 7.75\"\n stroke=\"white\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <circle cx=\"12\" cy=\"16\" r=\"1\" fill=\"white\" />\n </svg>\n {{ validationMessage }}\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"dateType === 'DATE_AND_TIME'\">\n <!-- Date and time picker -->\n <div class=\"input-container\">\n <input\n #dateAndTimePicker=\"bsDatepicker\"\n type=\"text\"\n class=\"form-control height\"\n [minDate]=\"minDate ? minDate : undefined\"\n [maxDate]=\"maxDate ? maxDate : undefined\"\n [bsConfig]=\"{\n dateInputFormat: format\n }\"\n placeholder=\"Select date\"\n bsDatepicker\n [class.invalid]=\"validationFailed\"\n [(ngModel)]=\"selectedDateAndTime\"\n (blur)=\"validateField()\"\n (ngModelChange)=\"validateField()\"\n />\n <i\n class=\"fa-solid fa-calendar-days calendar-icon text-primary fs-5\"\n (click)=\"openDateAndTimePicker()\"\n ></i>\n </div>\n <div class=\"input-container\" *ngIf=\"selectedDateAndTime && selectedDateAndTime != null\">\n <input\n \n class=\"form-control height appearanceInput mt-3\"\n aria-label=\"Select time\"\n placeholder=\"Select time\"\n readonly\n [format]=\"timeFormat==='24'?24:12\"\n [ngxTimepicker]=\"fullTime4\"\n [(ngModel)]=\"selectedTime\"\n [max]=\"maxTime\"\n [min]=\"minTime\"\n (ngModelChange)=\"validateField()\"\n [class.invalid]=\"timeValidationFailed\"\n />\n \n <i\n id=\"startDateIcon\"\n class=\"fa-solid fa-clock text-primary fs-6 clock-icon\"\n (click)=\"fullTime4.open()\"\n style=\"cursor: pointer;\"\n ></i>\n <ngx-material-timepicker #fullTime4></ngx-material-timepicker>\n </div>\n \n <div *ngIf=\"validationFailed || timeValidationFailed\" class=\"text-danger mt-2\">\n <svg\n class=\"validationSvg\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M12.001 16.75C12.139 16.75 12.251 16.638 12.25 16.5C12.25 16.362 12.138 16.25 12 16.25C11.862 16.25 11.75 16.362 11.75 16.5C11.75 16.638 11.862 16.75 12.001 16.75\"\n stroke=\"white\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M12 21C7.029 21 3 16.971 3 12C3 7.029 7.029 3 12 3C16.971 3 21 7.029 21 12C21 16.971 16.971 21 12 21Z\"\n fill=\"#FF0000\"\n stroke=\"#FF0000\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M12 12.75L12 7.75\"\n stroke=\"white\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <circle cx=\"12\" cy=\"16\" r=\"1\" fill=\"white\" />\n </svg>\n {{ validationMessage }}\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"dateType === 'DATE_RANGE'\">\n <!-- Date range picker -->\n <div class=\"input-container\">\n <input\n type=\"text\"\n class=\"form-control height\"\n #daterangepicker=\"bsDaterangepicker\"\n bsDaterangepicker\n placeholder=\"Select date\"\n [minDate]=\"minDate ? minDate : undefined\"\n [maxDate]=\"maxDate ? maxDate : undefined\"\n [bsConfig]=\"{\n rangeInputFormat: format,\n dateInputFormat: format,\n }\"\n [(ngModel)]=\"selectedDateRange\"\n (blur)=\"validateField()\"\n (ngModelChange)=\"validateField()\"\n [class.invalid]=\"validationFailed\"\n />\n <i\n class=\"fa-solid fa-calendar-days calendar-icon text-primary fs-5\"\n (click)=\"openDateRangePicker()\"\n ></i>\n </div>\n <div *ngIf=\"validationFailed\" class=\"text-danger mt-2\">\n <svg\n class=\"validationSvg\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M12.001 16.75C12.139 16.75 12.251 16.638 12.25 16.5C12.25 16.362 12.138 16.25 12 16.25C11.862 16.25 11.75 16.362 11.75 16.5C11.75 16.638 11.862 16.75 12.001 16.75\"\n stroke=\"white\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M12 21C7.029 21 3 16.971 3 12C3 7.029 7.029 3 12 3C16.971 3 21 7.029 21 12C21 16.971 16.971 21 12 21Z\"\n fill=\"#FF0000\"\n stroke=\"#FF0000\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M12 12.75L12 7.75\"\n stroke=\"white\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <circle cx=\"12\" cy=\"16\" r=\"1\" fill=\"white\" />\n </svg>\n {{ validationMessage }}\n </div>\n </ng-container>\n</div>\n", styles: [".input-wrapper{display:flex;align-items:flex-start}.svg-wrapper{margin-inline-start:auto;z-index:999}.hintIcon{position:relative;cursor:pointer}.hintIcon:hover:before{content:attr(data-title);position:absolute;top:calc(100% + 2px);right:0;padding:4px 8px;border-radius:4px;background-color:#1d252d;color:#8e9aa0;font-size:14px;min-width:300px;word-wrap:break-word;word-break:break-word;text-align:center;white-space:normal}.hintIcon:hover:after{content:\"\";position:absolute;top:calc(100% - 26px);left:50%;border:solid transparent;border-width:18px;border-bottom-color:#1d252d;transform:translate(-50%)}.height{height:42px}.invalid{border-color:red}.hintSvg{width:30px;height:30px;fill:none}.validationSvg{width:24px;height:24px;fill:none}.input-container{position:relative}.input-container .form-control{padding-right:30px}.input-container .calendar-icon,.clock-icon{position:absolute;top:50%;right:10px;transform:translateY(-50%);cursor:pointer}.appearanceInput{background-color:#fff}::ng-deep ngx-material-timepicker-content{--body-background-color: #fff;--primary-font-family: \"Roboto\",sans-serif;--button-color: #0637b2 !important;--dial-active-color: #fff;--dial-inactive-color: rgba(255, 255, 255, .5);--dial-background-color: #0637b2 !important;--dial-editable-active-color: #0637b2 !important;--dial-editable-background-color: #fff;--clock-face-time-active-color: #fff;--clock-face-time-inactive-color: #6c6c6c;--clock-face-inner-time-inactive-color: #929292;--clock-face-time-disabled-color: #c5c5c5;--clock-face-background-color: #f0f0f0;--clock-hand-color: #0637b2 !important}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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"] }, { kind: "directive", type: i3.BsDatepickerDirective, selector: "[bsDatepicker]", inputs: ["placement", "triggers", "outsideClick", "container", "outsideEsc", "isDisabled", "minDate", "maxDate", "minMode", "daysDisabled", "datesDisabled", "datesEnabled", "dateCustomClasses", "dateTooltipTexts", "isOpen", "bsValue", "bsConfig"], outputs: ["onShown", "onHidden", "bsValueChange"], exportAs: ["bsDatepicker"] }, { kind: "directive", type: i3.BsDatepickerInputDirective, selector: "input[bsDatepicker]" }, { kind: "directive", type: i3.BsDaterangepickerDirective, selector: "[bsDaterangepicker]", inputs: ["placement", "triggers", "outsideClick", "container", "outsideEsc", "isOpen", "bsValue", "bsConfig", "isDisabled", "minDate", "maxDate", "dateCustomClasses", "daysDisabled", "datesDisabled", "datesEnabled"], outputs: ["onShown", "onHidden", "bsValueChange"], exportAs: ["bsDaterangepicker"] }, { kind: "directive", type: i3.BsDaterangepickerInputDirective, selector: "input[bsDaterangepicker]" }, { kind: "component", type: i4.NgxMaterialTimepickerComponent, selector: "ngx-material-timepicker", inputs: ["cancelBtnTmpl", "editableHintTmpl", "confirmBtnTmpl", "ESC", "enableKeyboardInput", "preventOverlayClick", "disableAnimation", "appendToInput", "hoursOnly", "defaultTime", "timepickerClass", "theme", "min", "max", "ngxMaterialTimepickerTheme", "format", "minutesGap"], outputs: ["timeSet", "opened", "closed", "hourSelected", "timeChanged"] }, { kind: "directive", type: i4.TimepickerDirective, selector: "[ngxTimepicker]", inputs: ["format", "min", "max", "ngxTimepicker", "value", "disabled", "disableClick"] }] }); }
|
|
180
402
|
}
|
|
181
403
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DateTimeFieldsComponent, decorators: [{
|
|
182
404
|
type: Component,
|
|
183
|
-
args: [{ selector: 'lib-date-time-fields', providers: [DatePipe], template: "<div [ngClass]=\"'col-' + count\" class=\"mb-5 px-3\">\n <div class=\"input-wrapper mb-2\">\n <div [innerHTML]=\"question.questionNumber\"></div>\n <label>{{ question.question }}</label\n > \n <span class=\"text-danger\" *ngIf=\"required\">*</span>\n <div\n class=\"svg-wrapper mb-2 hintIcon\"\n [attr.data-title]=\"hint\"\n *ngIf=\"hint\"\n >\n <svg\n class=\"hintSvg\"\n viewBox=\"0 0 30 30\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n </div>\n <ng-container *ngIf=\"dateType === 'DATE_ONLY'\">\n <!-- Date only picker -->\n <div class=\"input-container\">\n <input\n class=\"form-control height\"\n #datepickerYMD=\"bsDatepicker\"\n bsDatepicker\n [minDate]=\"minDate ? minDate : undefined\"\n [maxDate]=\"maxDate ? maxDate : undefined\"\n [bsConfig]=\"{ dateInputFormat: format }\"\n [(ngModel)]=\"selectedDate\"\n (blur)=\"validateField()\"\n (ngModelChange)=\"validateField()\"\n [class.invalid]=\"validationFailed\"\n />\n <i\n class=\"fa-solid fa-calendar-days calendar-icon text-primary fs-5\"\n (click)=\"openDatePicker()\"\n ></i>\n </div>\n <div *ngIf=\"validationFailed\" class=\"text-danger mt-2\">\n <svg\n class=\"validationSvg\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M12.001 16.75C12.139 16.75 12.251 16.638 12.25 16.5C12.25 16.362 12.138 16.25 12 16.25C11.862 16.25 11.75 16.362 11.75 16.5C11.75 16.638 11.862 16.75 12.001 16.75\"\n stroke=\"white\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M12 21C7.029 21 3 16.971 3 12C3 7.029 7.029 3 12 3C16.971 3 21 7.029 21 12C21 16.971 16.971 21 12 21Z\"\n fill=\"#FF0000\"\n stroke=\"#FF0000\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M12 12.75L12 7.75\"\n stroke=\"white\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <circle cx=\"12\" cy=\"16\" r=\"1\" fill=\"white\" />\n </svg>\n {{ validationMessage }}\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"dateType === 'TIME_ONLY'\">\n <!-- Time picker -->\n <input\n type=\"time\"\n class=\"form-control height\"\n (blur)=\"validateField()\"\n [(ngModel)]=\"selectedTime\"\n (ngModelChange)=\"validateField()\"\n [class.invalid]=\"validationFailed\"\n />\n <div *ngIf=\"validationFailed\" class=\"text-danger mt-2\">\n <svg\n class=\"validationSvg\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M12.001 16.75C12.139 16.75 12.251 16.638 12.25 16.5C12.25 16.362 12.138 16.25 12 16.25C11.862 16.25 11.75 16.362 11.75 16.5C11.75 16.638 11.862 16.75 12.001 16.75\"\n stroke=\"white\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M12 21C7.029 21 3 16.971 3 12C3 7.029 7.029 3 12 3C16.971 3 21 7.029 21 12C21 16.971 16.971 21 12 21Z\"\n fill=\"#FF0000\"\n stroke=\"#FF0000\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M12 12.75L12 7.75\"\n stroke=\"white\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <circle cx=\"12\" cy=\"16\" r=\"1\" fill=\"white\" />\n </svg>\n {{ validationMessage }}\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"dateType === 'DATE_AND_TIME'\">\n <!-- Date and time picker -->\n <div class=\"input-container\">\n <input\n #dateAndTimePicker=\"bsDatepicker\"\n type=\"text\"\n class=\"form-control height\"\n [minDate]=\"minDate ? minDate : undefined\"\n [maxDate]=\"maxDate ? maxDate : undefined\"\n [bsConfig]=\"{\n withTimepicker: true,\n keepDatepickerOpened: true,\n rangeInputFormat: format,\n dateInputFormat: format\n }\"\n bsDatepicker\n [class.invalid]=\"validationFailed\"\n [(ngModel)]=\"selectedDateAndTime\"\n (blur)=\"validateField()\"\n (ngModelChange)=\"validateField()\"\n />\n <i\n class=\"fa-solid fa-calendar-days calendar-icon text-primary fs-5\"\n (click)=\"openDateAndTimePicker()\"\n ></i>\n </div>\n <div *ngIf=\"validationFailed\" class=\"text-danger mt-2\">\n <svg\n class=\"validationSvg\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M12.001 16.75C12.139 16.75 12.251 16.638 12.25 16.5C12.25 16.362 12.138 16.25 12 16.25C11.862 16.25 11.75 16.362 11.75 16.5C11.75 16.638 11.862 16.75 12.001 16.75\"\n stroke=\"white\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M12 21C7.029 21 3 16.971 3 12C3 7.029 7.029 3 12 3C16.971 3 21 7.029 21 12C21 16.971 16.971 21 12 21Z\"\n fill=\"#FF0000\"\n stroke=\"#FF0000\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M12 12.75L12 7.75\"\n stroke=\"white\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <circle cx=\"12\" cy=\"16\" r=\"1\" fill=\"white\" />\n </svg>\n {{ validationMessage }}\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"dateType === 'DATE_RANGE'\">\n <!-- Date range picker -->\n <div class=\"input-container\">\n <input\n type=\"text\"\n class=\"form-control height\"\n #daterangepicker=\"bsDaterangepicker\"\n bsDaterangepicker\n [minDate]=\"minDate ? minDate : undefined\"\n [maxDate]=\"maxDate ? maxDate : undefined\"\n [bsConfig]=\"{\n rangeInputFormat: format,\n dateInputFormat: format,\n showWeekNumbers: false\n }\"\n [(ngModel)]=\"selectedDateRange\"\n (blur)=\"validateField()\"\n (ngModelChange)=\"validateField()\"\n [class.invalid]=\"validationFailed\"\n />\n <i\n class=\"fa-solid fa-calendar-days calendar-icon text-primary fs-5\"\n (click)=\"openDateRangePicker()\"\n ></i>\n </div>\n <div *ngIf=\"validationFailed\" class=\"text-danger mt-2\">\n <svg\n class=\"validationSvg\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M12.001 16.75C12.139 16.75 12.251 16.638 12.25 16.5C12.25 16.362 12.138 16.25 12 16.25C11.862 16.25 11.75 16.362 11.75 16.5C11.75 16.638 11.862 16.75 12.001 16.75\"\n stroke=\"white\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M12 21C7.029 21 3 16.971 3 12C3 7.029 7.029 3 12 3C16.971 3 21 7.029 21 12C21 16.971 16.971 21 12 21Z\"\n fill=\"#FF0000\"\n stroke=\"#FF0000\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M12 12.75L12 7.75\"\n stroke=\"white\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <circle cx=\"12\" cy=\"16\" r=\"1\" fill=\"white\" />\n </svg>\n {{ validationMessage }}\n </div>\n </ng-container>\n</div>\n", styles: [".input-wrapper{display:flex;align-items:flex-start}.svg-wrapper{margin-inline-start:auto;z-index:999}.hintIcon{position:relative;cursor:pointer}.hintIcon:hover:before{content:attr(data-title);position:absolute;top:calc(100% + 2px);right:0;padding:4px 8px;border-radius:4px;background-color:#1d252d;color:#8e9aa0;font-size:14px;min-width:300px;word-wrap:break-word;word-break:break-word;text-align:center;white-space:normal}.hintIcon:hover:after{content:\"\";position:absolute;top:calc(100% - 26px);left:50%;border:solid transparent;border-width:18px;border-bottom-color:#1d252d;transform:translate(-50%)}.height{height:42px}.invalid{border-color:red}.hintSvg{width:30px;height:30px;fill:none}.validationSvg{width:24px;height:24px;fill:none}.input-container{position:relative}.input-container .form-control{padding-right:30px}.input-container .calendar-icon{position:absolute;top:50%;right:10px;transform:translateY(-50%);cursor:pointer}\n"] }]
|
|
405
|
+
args: [{ selector: 'lib-date-time-fields', providers: [DatePipe], template: "<div [ngClass]=\"'col-' + count\" class=\"mb-5 px-3\">\n <div class=\"input-wrapper mb-2\">\n <div [innerHTML]=\"question.questionNumber\"></div>\n <label>{{ question.question }}</label\n > \n <span class=\"text-danger\" *ngIf=\"required\">*</span>\n <div\n class=\"svg-wrapper mb-2 hintIcon\"\n [attr.data-title]=\"hint\"\n *ngIf=\"hint\"\n >\n <svg\n class=\"hintSvg\"\n viewBox=\"0 0 30 30\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n </div>\n <ng-container *ngIf=\"dateType === 'DATE_ONLY'\">\n <!-- Date only picker -->\n <div class=\"input-container\">\n <input\n class=\"form-control height\"\n #datepickerYMD=\"bsDatepicker\"\n bsDatepicker\n [minDate]=\"minDate ? minDate : undefined\"\n [maxDate]=\"maxDate ? maxDate : undefined\"\n [bsConfig]=\"{ dateInputFormat: format }\"\n [(ngModel)]=\"selectedDate\"\n (blur)=\"validateField()\"\n (ngModelChange)=\"validateField()\"\n [class.invalid]=\"validationFailed\"\n placeholder=\"Select date\"\n />\n <i\n class=\"fa-solid fa-calendar-days calendar-icon text-primary fs-5\"\n (click)=\"openDatePicker()\"\n ></i>\n </div>\n <div *ngIf=\"validationFailed\" class=\"text-danger mt-2\">\n <svg\n class=\"validationSvg\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M12.001 16.75C12.139 16.75 12.251 16.638 12.25 16.5C12.25 16.362 12.138 16.25 12 16.25C11.862 16.25 11.75 16.362 11.75 16.5C11.75 16.638 11.862 16.75 12.001 16.75\"\n stroke=\"white\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M12 21C7.029 21 3 16.971 3 12C3 7.029 7.029 3 12 3C16.971 3 21 7.029 21 12C21 16.971 16.971 21 12 21Z\"\n fill=\"#FF0000\"\n stroke=\"#FF0000\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M12 12.75L12 7.75\"\n stroke=\"white\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <circle cx=\"12\" cy=\"16\" r=\"1\" fill=\"white\" />\n </svg>\n {{ validationMessage }}\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"dateType === 'TIME_ONLY'\">\n <!-- Time picker -->\n\n\n<div class=\"input-container\">\n <input\n class=\"form-control height appearanceInput mt-3\"\n aria-label=\"Select time\"\n placeholder=\"Select time\"\n readonly\n [format]=\"timeFormat==='24'?24:12\"\n [ngxTimepicker]=\"fullTime3\"\n [(ngModel)]=\"selectedTime\"\n [max]=\"maxTime\"\n [min]=\"minTime\"\n (ngModelChange)=\"validateField()\"\n [class.invalid]=\"validationFailed\"\n />\n \n <i\n id=\"startDateIcon\"\n class=\"fa-solid fa-clock text-primary fs-6 clock-icon\"\n (click)=\"fullTime3.open()\"\n style=\"cursor: pointer;\"\n></i>\n <ngx-material-timepicker #fullTime3></ngx-material-timepicker>\n</div>\n <div *ngIf=\"validationFailed\" class=\"text-danger mt-2\">\n <svg\n class=\"validationSvg\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M12.001 16.75C12.139 16.75 12.251 16.638 12.25 16.5C12.25 16.362 12.138 16.25 12 16.25C11.862 16.25 11.75 16.362 11.75 16.5C11.75 16.638 11.862 16.75 12.001 16.75\"\n stroke=\"white\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M12 21C7.029 21 3 16.971 3 12C3 7.029 7.029 3 12 3C16.971 3 21 7.029 21 12C21 16.971 16.971 21 12 21Z\"\n fill=\"#FF0000\"\n stroke=\"#FF0000\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M12 12.75L12 7.75\"\n stroke=\"white\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <circle cx=\"12\" cy=\"16\" r=\"1\" fill=\"white\" />\n </svg>\n {{ validationMessage }}\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"dateType === 'DATE_AND_TIME'\">\n <!-- Date and time picker -->\n <div class=\"input-container\">\n <input\n #dateAndTimePicker=\"bsDatepicker\"\n type=\"text\"\n class=\"form-control height\"\n [minDate]=\"minDate ? minDate : undefined\"\n [maxDate]=\"maxDate ? maxDate : undefined\"\n [bsConfig]=\"{\n dateInputFormat: format\n }\"\n placeholder=\"Select date\"\n bsDatepicker\n [class.invalid]=\"validationFailed\"\n [(ngModel)]=\"selectedDateAndTime\"\n (blur)=\"validateField()\"\n (ngModelChange)=\"validateField()\"\n />\n <i\n class=\"fa-solid fa-calendar-days calendar-icon text-primary fs-5\"\n (click)=\"openDateAndTimePicker()\"\n ></i>\n </div>\n <div class=\"input-container\" *ngIf=\"selectedDateAndTime && selectedDateAndTime != null\">\n <input\n \n class=\"form-control height appearanceInput mt-3\"\n aria-label=\"Select time\"\n placeholder=\"Select time\"\n readonly\n [format]=\"timeFormat==='24'?24:12\"\n [ngxTimepicker]=\"fullTime4\"\n [(ngModel)]=\"selectedTime\"\n [max]=\"maxTime\"\n [min]=\"minTime\"\n (ngModelChange)=\"validateField()\"\n [class.invalid]=\"timeValidationFailed\"\n />\n \n <i\n id=\"startDateIcon\"\n class=\"fa-solid fa-clock text-primary fs-6 clock-icon\"\n (click)=\"fullTime4.open()\"\n style=\"cursor: pointer;\"\n ></i>\n <ngx-material-timepicker #fullTime4></ngx-material-timepicker>\n </div>\n \n <div *ngIf=\"validationFailed || timeValidationFailed\" class=\"text-danger mt-2\">\n <svg\n class=\"validationSvg\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M12.001 16.75C12.139 16.75 12.251 16.638 12.25 16.5C12.25 16.362 12.138 16.25 12 16.25C11.862 16.25 11.75 16.362 11.75 16.5C11.75 16.638 11.862 16.75 12.001 16.75\"\n stroke=\"white\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M12 21C7.029 21 3 16.971 3 12C3 7.029 7.029 3 12 3C16.971 3 21 7.029 21 12C21 16.971 16.971 21 12 21Z\"\n fill=\"#FF0000\"\n stroke=\"#FF0000\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M12 12.75L12 7.75\"\n stroke=\"white\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <circle cx=\"12\" cy=\"16\" r=\"1\" fill=\"white\" />\n </svg>\n {{ validationMessage }}\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"dateType === 'DATE_RANGE'\">\n <!-- Date range picker -->\n <div class=\"input-container\">\n <input\n type=\"text\"\n class=\"form-control height\"\n #daterangepicker=\"bsDaterangepicker\"\n bsDaterangepicker\n placeholder=\"Select date\"\n [minDate]=\"minDate ? minDate : undefined\"\n [maxDate]=\"maxDate ? maxDate : undefined\"\n [bsConfig]=\"{\n rangeInputFormat: format,\n dateInputFormat: format,\n }\"\n [(ngModel)]=\"selectedDateRange\"\n (blur)=\"validateField()\"\n (ngModelChange)=\"validateField()\"\n [class.invalid]=\"validationFailed\"\n />\n <i\n class=\"fa-solid fa-calendar-days calendar-icon text-primary fs-5\"\n (click)=\"openDateRangePicker()\"\n ></i>\n </div>\n <div *ngIf=\"validationFailed\" class=\"text-danger mt-2\">\n <svg\n class=\"validationSvg\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M12.001 16.75C12.139 16.75 12.251 16.638 12.25 16.5C12.25 16.362 12.138 16.25 12 16.25C11.862 16.25 11.75 16.362 11.75 16.5C11.75 16.638 11.862 16.75 12.001 16.75\"\n stroke=\"white\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M12 21C7.029 21 3 16.971 3 12C3 7.029 7.029 3 12 3C16.971 3 21 7.029 21 12C21 16.971 16.971 21 12 21Z\"\n fill=\"#FF0000\"\n stroke=\"#FF0000\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M12 12.75L12 7.75\"\n stroke=\"white\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <circle cx=\"12\" cy=\"16\" r=\"1\" fill=\"white\" />\n </svg>\n {{ validationMessage }}\n </div>\n </ng-container>\n</div>\n", styles: [".input-wrapper{display:flex;align-items:flex-start}.svg-wrapper{margin-inline-start:auto;z-index:999}.hintIcon{position:relative;cursor:pointer}.hintIcon:hover:before{content:attr(data-title);position:absolute;top:calc(100% + 2px);right:0;padding:4px 8px;border-radius:4px;background-color:#1d252d;color:#8e9aa0;font-size:14px;min-width:300px;word-wrap:break-word;word-break:break-word;text-align:center;white-space:normal}.hintIcon:hover:after{content:\"\";position:absolute;top:calc(100% - 26px);left:50%;border:solid transparent;border-width:18px;border-bottom-color:#1d252d;transform:translate(-50%)}.height{height:42px}.invalid{border-color:red}.hintSvg{width:30px;height:30px;fill:none}.validationSvg{width:24px;height:24px;fill:none}.input-container{position:relative}.input-container .form-control{padding-right:30px}.input-container .calendar-icon,.clock-icon{position:absolute;top:50%;right:10px;transform:translateY(-50%);cursor:pointer}.appearanceInput{background-color:#fff}::ng-deep ngx-material-timepicker-content{--body-background-color: #fff;--primary-font-family: \"Roboto\",sans-serif;--button-color: #0637b2 !important;--dial-active-color: #fff;--dial-inactive-color: rgba(255, 255, 255, .5);--dial-background-color: #0637b2 !important;--dial-editable-active-color: #0637b2 !important;--dial-editable-background-color: #fff;--clock-face-time-active-color: #fff;--clock-face-time-inactive-color: #6c6c6c;--clock-face-inner-time-inactive-color: #929292;--clock-face-time-disabled-color: #c5c5c5;--clock-face-background-color: #f0f0f0;--clock-hand-color: #0637b2 !important}\n"] }]
|
|
184
406
|
}], ctorParameters: function () { return [{ type: i1.DatePipe }]; }, propDecorators: { question: [{
|
|
185
407
|
type: Input
|
|
186
408
|
}], datepicker: [{
|
|
@@ -193,4 +415,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
193
415
|
type: ViewChild,
|
|
194
416
|
args: ['dateAndTimePicker']
|
|
195
417
|
}] } });
|
|
196
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLWZpZWxkcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLXN1Ym1pc3Npb24vc3JjL2Zvcm0tZmllbGRzL2RhdGUtdGltZS1maWVsZHMvZGF0ZS10aW1lLWZpZWxkcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLXN1Ym1pc3Npb24vc3JjL2Zvcm0tZmllbGRzL2RhdGUtdGltZS1maWVsZHMvZGF0ZS10aW1lLWZpZWxkcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBZ0IsS0FBSyxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFZbEYsTUFBTSxPQUFPLHVCQUF1QjtJQXlCbEMsWUFBb0IsUUFBa0I7UUFBbEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQXhCdEMsYUFBUSxHQUFnQztZQUN0QyxjQUFjLEVBQUUsV0FBVztTQUM1QixDQUFDO1FBRU8sYUFBUSxHQUFRLEVBQUUsQ0FBQztRQUM1QixhQUFRLEdBQVksS0FBSyxDQUFDO1FBQzFCLFNBQUksR0FBVyxFQUFFLENBQUM7UUFDbEIsVUFBSyxHQUFXLENBQUMsQ0FBQztRQUNsQixhQUFRLEdBQVcsRUFBRSxDQUFDO1FBQ3RCLFdBQU0sR0FBVyxFQUFFLENBQUM7UUFDcEIsa0JBQWEsR0FBVyxFQUFFLENBQUM7UUFFM0Isa0JBQWEsR0FBVyxFQUFFLENBQUM7UUFFM0IsY0FBUyxHQUFTLElBQUksSUFBSSxFQUFFLENBQUM7UUFDN0IsaUJBQVksR0FBVyxFQUFFLENBQUM7UUFDMUIsaUJBQVksR0FBVyxFQUFFLENBQUM7UUFDMUIsc0JBQWlCLEdBQVcsRUFBRSxDQUFDO1FBQy9CLHdCQUFtQixHQUFXLEVBQUUsQ0FBQztRQUVq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Q0FBQztJQUNELG1CQUFtQjtRQUNqQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQzlCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7UUFDNUIsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQzlDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7WUFDN0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLDZCQUE2QixDQUFDO1lBQ3ZELElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztTQUNsQzthQUNJO1lBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1NBQ2pDO0lBQ0gsQ0FBQzsrR0F6TFUsdUJBQXVCO21HQUF2Qix1QkFBdUIsaUZBRnZCLENBQUMsUUFBUSxDQUFDLHFWQ1h2Qixxd1NBMlFBOzs0RkQ5UGEsdUJBQXVCO2tCQU5uQyxTQUFTOytCQUNFLHNCQUFzQixhQUdyQixDQUFDLFFBQVEsQ0FBQzsrRkFPWixRQUFRO3NCQUFoQixLQUFLO2dCQWlCc0IsVUFBVTtzQkFBckMsU0FBUzt1QkFBQyxlQUFlO2dCQUNJLGVBQWU7c0JBQTVDLFNBQVM7dUJBQUMsaUJBQWlCO2dCQUNJLGlCQUFpQjtzQkFBaEQsU0FBUzt1QkFBQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBCc0RhdGVwaWNrZXJDb25maWcsXG4gIEJzRGF0ZXBpY2tlckRpcmVjdGl2ZSxcbn0gZnJvbSAnbmd4LWJvb3RzdHJhcC9kYXRlcGlja2VyJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWRhdGUtdGltZS1maWVsZHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZS10aW1lLWZpZWxkcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RhdGUtdGltZS1maWVsZHMuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbRGF0ZVBpcGVdXG59KVxuZXhwb3J0IGNsYXNzIERhdGVUaW1lRmllbGRzQ29tcG9uZW50IHtcbiAgYnNDb25maWc6IFBhcnRpYWw8QnNEYXRlcGlja2VyQ29uZmlnPiA9IHtcbiAgICBjb250YWluZXJDbGFzczogJ3RoZW1lLXJlZCcsXG4gIH07XG5cbiAgQElucHV0KCkgcXVlc3Rpb246IGFueSA9IHt9O1xuICByZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBoaW50OiBzdHJpbmcgPSAnJztcbiAgY291bnQ6IG51bWJlciA9IDA7XG4gIGRhdGVUeXBlOiBzdHJpbmcgPSAnJztcbiAgZm9ybWF0OiBzdHJpbmcgPSAnJztcbiAgbWluRGF0ZU9wdGlvbjogc3RyaW5nID0gJyc7XG4gIG1pbkRhdGU6IERhdGUgfCB1bmRlZmluZWQ7XG4gIG1heERhdGVPcHRpb246IHN0cmluZyA9ICcnO1xuICBtYXhEYXRlOiBEYXRlIHwgdW5kZWZpbmVkO1xuICB0b2RheURhdGU6IERhdGUgPSBuZXcgRGF0ZSgpO1xuICBzZWxlY3RlZERhdGU6IHN0cmluZyA9ICcnO1xuICBzZWxlY3RlZFRpbWU6IHN0cmluZyA9ICcnO1xuICBzZWxlY3RlZERhdGVSYW5nZTogc3RyaW5nID0gJyc7XG4gIHNlbGVjdGVkRGF0ZUFuZFRpbWU6IHN0cmluZyA9ICcnO1xuICB2YWxpZGF0aW9uRmFpbGVkITogYm9vbGVhbjtcbiAgdmFsaWRhdGlvbk1lc3NhZ2U6IHN0cmluZyA9ICcnO1xuICBAVmlld0NoaWxkKCdkYXRlcGlja2VyWU1EJykgZGF0ZXBpY2tlciE6IEJzRGF0ZXBpY2tlckRpcmVjdGl2ZTtcbiAgQFZpZXdDaGlsZCgnZGF0ZXJhbmdlcGlja2VyJykgZGF0ZVJhbmdlUGlja2VyITogQnNEYXRlcGlja2VyRGlyZWN0aXZlO1xuICBAVmlld0NoaWxkKCdkYXRlQW5kVGltZVBpY2tlcicpIGRhdGVBbmRUaW1lUGlja2VyITogQnNEYXRlcGlja2VyRGlyZWN0aXZlO1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZSkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy52YWx1ZUFzc2lnbmVkKCk7XG4gIH1cblxuICB2YWx1ZUFzc2lnbmVkKCkge1xuICAgIHRoaXMuY291bnQgPSB0aGlzLnF1ZXN0aW9uLmNvdW50O1xuICAgIHRoaXMucmVxdWlyZWQgPSB0aGlzLnF1ZXN0aW9uLnJlcXVpcmVkO1xuICAgIHRoaXMuaGludCA9IHRoaXMucXVlc3Rpb24uaGludDtcbiAgICB0aGlzLmRhdGVUeXBlID0gdGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC5hcHBlYXJhbmNlLmRhdGVUeXBlO1xuICAgIHRoaXMubWluRGF0ZU9wdGlvbiA9IHRoaXMucXVlc3Rpb24uZm9ybUVsZW1lbnQudmFsaWRhdGlvbi5taW5EYXRlT3B0aW9uO1xuICAgIGNvbnNvbGUubG9nKCdvcHRpb24nLHRoaXMubWluRGF0ZU9wdGlvbik7XG4gICAgXG4gICAgdGhpcy5taW5EYXRlID0gdGhpcy5nZXRNaW5EYXRlKCk7XG4gICAgY29uc29sZS5sb2coJ21pbicsdGhpcy5taW5EYXRlKTtcbiAgICBcbiAgICB0aGlzLm1heERhdGVPcHRpb24gPSB0aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50LnZhbGlkYXRpb24ubWF4RGF0ZU9wdGlvbjtcbiAgICB0aGlzLm1heERhdGUgPSB0aGlzLmdldE1heERhdGUoKTtcbiAgICB0aGlzLnNldERhdGVUaW1lRm9ybWF0KCk7XG4gICAgdGhpcy5zZWxlY3RlZERhdGUgPSB0aGlzLnF1ZXN0aW9uLmFuc3dlcjtcbiAgICB0aGlzLnNlbGVjdGVkVGltZSA9IHRoaXMucXVlc3Rpb24uYW5zd2VyO1xuICAgIHRoaXMuc2VsZWN0ZWREYXRlQW5kVGltZSA9IHRoaXMucXVlc3Rpb24uYW5zd2VyO1xuICAgIHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2UgPSB0aGlzLnF1ZXN0aW9uLmFuc3dlcjtcbiAgfVxuXG4gIHNldERhdGVUaW1lRm9ybWF0KCkge1xuICAgIHN3aXRjaCAodGhpcy5kYXRlVHlwZSkge1xuICAgICAgY2FzZSAnREFURV9PTkxZJzpcbiAgICAgICAgdGhpcy5mb3JtYXQgPXRoaXMucXVlc3Rpb24uZm9ybUVsZW1lbnQuYXBwZWFyYW5jZS5mb3JtYXQ7ICAgICAgICBcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdUSU1FX09OTFknOlxuICAgICAgICB0aGlzLmZvcm1hdCA9ICdISDptbSc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnREFURV9BTkRfVElNRSc6XG4gICAgICAgIHRoaXMuZm9ybWF0ID0gdGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC5hcHBlYXJhbmNlLmZvcm1hdCsnIEhIOm1tJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdEQVRFX1JBTkdFJzpcbiAgICAgICAgdGhpcy5mb3JtYXQgPSB0aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50LmFwcGVhcmFuY2UuZm9ybWF0O1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuZm9ybWF0ID0gJ0REL01NL1lZWVknO1xuICAgIH1cbiAgfVxuXG4gIGdldE1pbkRhdGUoKTogRGF0ZSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRoaXMubWluRGF0ZU9wdGlvbiA9PT0gJ0NVUlJFTlRfREFURScpIHtcbiAgICAgIHJldHVybiB0aGlzLnRvZGF5RGF0ZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubWluRGF0ZU9wdGlvbiA9PT0gJ0NVU1RPTScpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZSh0aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50LnZhbGlkYXRpb24ubWluRGF0ZSk7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7IC8vIFJldHVybiB1bmRlZmluZWQgaWYgbm8gdmFsaWQgb3B0aW9uXG4gIH1cblxuICBnZXRNYXhEYXRlKCk6IERhdGUgfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLm1heERhdGVPcHRpb24gPT09ICdUT0RBWScpIHtcbiAgICAgIHJldHVybiB0aGlzLnRvZGF5RGF0ZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubWF4RGF0ZU9wdGlvbiA9PT0gJ0NVU1RPTScpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZSh0aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50LnZhbGlkYXRpb24ubWF4RGF0ZSk7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBvcGVuRGF0ZVBpY2tlcigpIHtcbiAgICB0aGlzLmRhdGVwaWNrZXIudG9nZ2xlKCk7XG4gIH1cblxuICBvcGVuRGF0ZVJhbmdlUGlja2VyKCkge1xuICAgIHRoaXMuZGF0ZVJhbmdlUGlja2VyLnRvZ2dsZSgpO1xuICB9XG5cbiAgb3BlbkRhdGVBbmRUaW1lUGlja2VyKCkge1xuICAgIHRoaXMuZGF0ZUFuZFRpbWVQaWNrZXIudG9nZ2xlKCk7XG4gIH1cblxuICB2YWxpZGF0ZUZpZWxkKCkge1xuICAgIGlmICh0aGlzLmRhdGVUeXBlID09PSAnREFURV9PTkxZJykge1xuICAgICAgdGhpcy5xdWVzdGlvbi5hbnN3ZXIgPSB0aGlzLmZvcm1hdERhdGUodGhpcy5zZWxlY3RlZERhdGUpO1xuICAgICAgdGhpcy52YWxpZGF0ZURhdGVPbmx5KClcbiAgICB9XG4gICAgZWxzZSBpZih0aGlzLmRhdGVUeXBlID09PSAnVElNRV9PTkxZJyl7XG4gICAgICB0aGlzLnF1ZXN0aW9uLmFuc3dlcj1TdHJpbmcodGhpcy5zZWxlY3RlZFRpbWUpO1xuICAgICAgdGhpcy52YWxpZGF0ZVRpbWVPbmx5KClcbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5kYXRlVHlwZSA9PT0gJ0RBVEVfQU5EX1RJTUUnKSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uLmFuc3dlciA9IHRoaXMuZm9ybWF0RGF0ZSh0aGlzLnNlbGVjdGVkRGF0ZUFuZFRpbWUpO1xuICAgICAgdGhpcy52YWxpZGF0ZURhdGVBbmRUaW1lKClcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uLmFuc3dlciA9IHRoaXMuZm9ybWF0RGF0ZSh0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlKTtcbiAgICAgIHRoaXMudmFsaWRhdGVEYXRlUmFuZ2UoKVxuICAgIH1cbiAgfVxuXG4gIGZvcm1hdERhdGUoZGF0ZTogc3RyaW5nIHwgRGF0ZSwgdHlwZTogc3RyaW5nID0gJ2RhdGVUaW1lJyk6IHN0cmluZyB7XG4gICAgc3dpdGNoICh0aGlzLmRhdGVUeXBlKSB7XG4gICAgICBjYXNlICdEQVRFX09OTFknOlxuICAgICAgICByZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZSwgJ2RkL01NL3l5eXknKSB8fCAnJztcbiAgICAgIGNhc2UgJ0RBVEVfQU5EX1RJTUUnOlxuICAgICAgICByZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZSwgJ2RkL01NL3l5eXkgSEg6bW0nKSB8fCAnJztcbiAgICAgIGNhc2UgJ0RBVEVfUkFOR0UnOlxuICAgICAgICBjb25zdCBkYXRlcyA9IGRhdGUgYXMgdW5rbm93biBhcyBEYXRlW107XG4gICAgICAgIGlmIChkYXRlcy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGVzWzBdLCAnZGQvTU0veXl5eScpO1xuICAgICAgICAgIGNvbnN0IGVuZCA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGVzWzFdLCAnZGQvTU0veXl5eScpO1xuICAgICAgICAgIHJldHVybiBgJHtzdGFydH0gLSAke2VuZH1gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShkYXRlLCAnZGQvTU0veXl5eScpIHx8ICcnO1xuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlRGF0ZU9ubHkoKSB7XG4gICAgdGhpcy52YWxpZGF0aW9uRmFpbGVkID0gZmFsc2U7XG4gICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZSA9ICcnO1xuICAgIGlmICh0aGlzLnJlcXVpcmVkICYmICF0aGlzLnNlbGVjdGVkRGF0ZSkge1xuICAgICAgdGhpcy52YWxpZGF0aW9uRmFpbGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UgPSAnVGhpcyBpcyBhIHJlcXVpcmVkIHF1ZXN0aW9uJztcbiAgICAgIHRoaXMucXVlc3Rpb24udmFsaWRhdGlvbiA9IGZhbHNlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMucXVlc3Rpb24udmFsaWRhdGlvbiA9IHRydWU7XG4gICAgfVxuICB9XG4gIHZhbGlkYXRlVGltZU9ubHkoKSB7XG4gICAgdGhpcy52YWxpZGF0aW9uRmFpbGVkID0gZmFsc2U7XG4gICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZSA9ICcnO1xuICAgIGlmICh0aGlzLnJlcXVpcmVkICYmICF0aGlzLnNlbGVjdGVkVGltZSkge1xuICAgICAgdGhpcy52YWxpZGF0aW9uRmFpbGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UgPSAnVGhpcyBpcyBhIHJlcXVpcmVkIHF1ZXN0aW9uJzs7XG4gICAgICB0aGlzLnF1ZXN0aW9uLnZhbGlkYXRpb24gPSBmYWxzZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uLnZhbGlkYXRpb24gPSB0cnVlO1xuICAgIH1cbiAgfVxuICB2YWxpZGF0ZURhdGVSYW5nZSgpIHtcbiAgICB0aGlzLnZhbGlkYXRpb25GYWlsZWQgPSBmYWxzZTtcbiAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlID0gJyc7XG4gICAgaWYgKHRoaXMucmVxdWlyZWQgJiYgIXRoaXMuc2VsZWN0ZWREYXRlUmFuZ2UpIHtcbiAgICAgIHRoaXMudmFsaWRhdGlvbkZhaWxlZCA9IHRydWU7XG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlID0gJ1RoaXMgaXMgYSByZXF1aXJlZCBxdWVzdGlvbic7XG4gICAgICB0aGlzLnF1ZXN0aW9uLnZhbGlkYXRpb24gPSBmYWxzZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uLnZhbGlkYXRpb24gPSB0cnVlO1xuICAgIH1cbiAgfVxuICB2YWxpZGF0ZURhdGVBbmRUaW1lKCkge1xuICAgIHRoaXMudmFsaWRhdGlvbkZhaWxlZCA9IGZhbHNlO1xuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UgPSAnJztcbiAgICBpZiAodGhpcy5yZXF1aXJlZCAmJiAhdGhpcy5zZWxlY3RlZERhdGVBbmRUaW1lKSB7XG4gICAgICB0aGlzLnZhbGlkYXRpb25GYWlsZWQgPSB0cnVlO1xuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZSA9ICdUaGlzIGlzIGEgcmVxdWlyZWQgcXVlc3Rpb24nO1xuICAgICAgdGhpcy5xdWVzdGlvbi52YWxpZGF0aW9uID0gZmFsc2U7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5xdWVzdGlvbi52YWxpZGF0aW9uID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgW25nQ2xhc3NdPVwiJ2NvbC0nICsgY291bnRcIiBjbGFzcz1cIm1iLTUgcHgtM1wiPlxuICA8ZGl2IGNsYXNzPVwiaW5wdXQtd3JhcHBlciBtYi0yXCI+XG4gICAgPGRpdiBbaW5uZXJIVE1MXT1cInF1ZXN0aW9uLnF1ZXN0aW9uTnVtYmVyXCI+PC9kaXY+XG4gICAgJm5ic3A7Jm5ic3A7IDxsYWJlbD57eyBxdWVzdGlvbi5xdWVzdGlvbiB9fTwvbGFiZWxcbiAgICA+Jm5ic3A7XG4gICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwicmVxdWlyZWRcIj4qPC9zcGFuPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwic3ZnLXdyYXBwZXIgbWItMiBoaW50SWNvblwiXG4gICAgICBbYXR0ci5kYXRhLXRpdGxlXT1cImhpbnRcIlxuICAgICAgKm5nSWY9XCJoaW50XCJcbiAgICA+XG4gICAgICA8c3ZnXG4gICAgICAgIGNsYXNzPVwiaGludFN2Z1wiXG4gICAgICAgIHZpZXdCb3g9XCIwIDAgMzAgMzBcIlxuICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgID5cbiAgICAgICAgPHBhdGhcbiAgICAgICAgICBmaWxsLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICBjbGlwLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICBkPVwiTTE1IDI2LjI1VjI2LjI1QzguNzg2MjUgMjYuMjUgMy43NSAyMS4yMTM4IDMuNzUgMTVWMTVDMy43NSA4Ljc4NjI1IDguNzg2MjUgMy43NSAxNSAzLjc1VjMuNzVDMjEuMjEzOCAzLjc1IDI2LjI1IDguNzg2MjUgMjYuMjUgMTVWMTVDMjYuMjUgMjEuMjEzOCAyMS4yMTM4IDI2LjI1IDE1IDI2LjI1WlwiXG4gICAgICAgICAgc3Ryb2tlPVwiIzMyMzIzMlwiXG4gICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgIC8+XG4gICAgICAgIDxwYXRoXG4gICAgICAgICAgZD1cIk0xNSAxNi41NjIzVjE2LjI0OThDMTUgMTUuMjI4NSAxNS42MzEyIDE0LjY3NDggMTYuMjYzNyAxNC4yNDk4QzE2Ljg4MTIgMTMuODMzNSAxNy41IDEzLjI5MSAxNy41IDEyLjI5MUMxNy41IDEwLjkwOTggMTYuMzgxMyA5Ljc5MTAyIDE1IDkuNzkxMDJDMTMuNjE4NyA5Ljc5MTAyIDEyLjUgMTAuOTA5OCAxMi41IDEyLjI5MVwiXG4gICAgICAgICAgc3Ryb2tlPVwiIzMyMzIzMlwiXG4gICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgIC8+XG4gICAgICAgIDxwYXRoXG4gICAgICAgICAgZD1cIk0xNC45OTg4IDIwQzE0LjgyNjMgMjAgMTQuNjg2MyAyMC4xNCAxNC42ODc1IDIwLjMxMjVDMTQuNjg3NSAyMC40ODUgMTQuODI3NSAyMC42MjUgMTUgMjAuNjI1QzE1LjE3MjUgMjAuNjI1IDE1LjMxMjUgMjAuNDg1IDE1LjMxMjUgMjAuMzEyNUMxNS4zMTI1IDIwLjE0IDE1LjE3MjUgMjAgMTQuOTk4OCAyMFwiXG4gICAgICAgICAgc3Ryb2tlPVwiIzMyMzIzMlwiXG4gICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgIC8+XG4gICAgICA8L3N2Zz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRlVHlwZSA9PT0gJ0RBVEVfT05MWSdcIj5cbiAgICA8IS0tIERhdGUgb25seSBwaWNrZXIgLS0+XG4gICAgPGRpdiBjbGFzcz1cImlucHV0LWNvbnRhaW5lclwiPlxuICAgICAgPGlucHV0XG4gICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGhlaWdodFwiXG4gICAgICAgICNkYXRlcGlja2VyWU1EPVwiYnNEYXRlcGlja2VyXCJcbiAgICAgICAgYnNEYXRlcGlja2VyXG4gICAgICAgIFttaW5EYXRlXT1cIm1pbkRhdGUgPyBtaW5EYXRlIDogdW5kZWZpbmVkXCJcbiAgICAgICAgW21heERhdGVdPVwibWF4RGF0ZSA/IG1heERhdGUgOiB1bmRlZmluZWRcIlxuICAgICAgICBbYnNDb25maWddPVwieyBkYXRlSW5wdXRGb3JtYXQ6IGZvcm1hdCB9XCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZERhdGVcIlxuICAgICAgICAoYmx1cik9XCJ2YWxpZGF0ZUZpZWxkKClcIlxuICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ2YWxpZGF0ZUZpZWxkKClcIlxuICAgICAgICBbY2xhc3MuaW52YWxpZF09XCJ2YWxpZGF0aW9uRmFpbGVkXCJcbiAgICAgIC8+XG4gICAgICA8aVxuICAgICAgICBjbGFzcz1cImZhLXNvbGlkIGZhLWNhbGVuZGFyLWRheXMgY2FsZW5kYXItaWNvbiB0ZXh0LXByaW1hcnkgZnMtNVwiXG4gICAgICAgIChjbGljayk9XCJvcGVuRGF0ZVBpY2tlcigpXCJcbiAgICAgID48L2k+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cInZhbGlkYXRpb25GYWlsZWRcIiBjbGFzcz1cInRleHQtZGFuZ2VyIG10LTJcIj5cbiAgICAgIDxzdmdcbiAgICAgICAgY2xhc3M9XCJ2YWxpZGF0aW9uU3ZnXCJcbiAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiXG4gICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgPlxuICAgICAgICA8cGF0aFxuICAgICAgICAgIGQ9XCJNMTIuMDAxIDE2Ljc1QzEyLjEzOSAxNi43NSAxMi4yNTEgMTYuNjM4IDEyLjI1IDE2LjVDMTIuMjUgMTYuMzYyIDEyLjEzOCAxNi4yNSAxMiAxNi4yNUMxMS44NjIgMTYuMjUgMTEuNzUgMTYuMzYyIDExLjc1IDE2LjVDMTEuNzUgMTYuNjM4IDExLjg2MiAxNi43NSAxMi4wMDEgMTYuNzVcIlxuICAgICAgICAgIHN0cm9rZT1cIndoaXRlXCJcbiAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjVcIlxuICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgLz5cbiAgICAgICAgPHBhdGhcbiAgICAgICAgICBmaWxsLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICBjbGlwLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICBkPVwiTTEyIDIxQzcuMDI5IDIxIDMgMTYuOTcxIDMgMTJDMyA3LjAyOSA3LjAyOSAzIDEyIDNDMTYuOTcxIDMgMjEgNy4wMjkgMjEgMTJDMjEgMTYuOTcxIDE2Ljk3MSAyMSAxMiAyMVpcIlxuICAgICAgICAgIGZpbGw9XCIjRkYwMDAwXCJcbiAgICAgICAgICBzdHJva2U9XCIjRkYwMDAwXCJcbiAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjVcIlxuICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgLz5cbiAgICAgICAgPHBhdGhcbiAgICAgICAgICBkPVwiTTEyIDEyLjc1TDEyIDcuNzVcIlxuICAgICAgICAgIHN0cm9rZT1cIndoaXRlXCJcbiAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjVcIlxuICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgLz5cbiAgICAgICAgPGNpcmNsZSBjeD1cIjEyXCIgY3k9XCIxNlwiIHI9XCIxXCIgZmlsbD1cIndoaXRlXCIgLz5cbiAgICAgIDwvc3ZnPlxuICAgICAge3sgdmFsaWRhdGlvbk1lc3NhZ2UgfX1cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRhdGVUeXBlID09PSAnVElNRV9PTkxZJ1wiPlxuICAgIDwhLS0gVGltZSBwaWNrZXIgLS0+XG4gICAgPGlucHV0XG4gICAgICB0eXBlPVwidGltZVwiXG4gICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBoZWlnaHRcIlxuICAgICAgKGJsdXIpPVwidmFsaWRhdGVGaWVsZCgpXCJcbiAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRUaW1lXCJcbiAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInZhbGlkYXRlRmllbGQoKVwiXG4gICAgICBbY2xhc3MuaW52YWxpZF09XCJ2YWxpZGF0aW9uRmFpbGVkXCJcbiAgICAvPlxuICAgIDxkaXYgKm5nSWY9XCJ2YWxpZGF0aW9uRmFpbGVkXCIgY2xhc3M9XCJ0ZXh0LWRhbmdlciBtdC0yXCI+XG4gICAgICA8c3ZnXG4gICAgICAgIGNsYXNzPVwidmFsaWRhdGlvblN2Z1wiXG4gICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxuICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgID5cbiAgICAgICAgPHBhdGhcbiAgICAgICAgICBkPVwiTTEyLjAwMSAxNi43NUMxMi4xMzkgMTYuNzUgMTIuMjUxIDE2LjYzOCAxMi4yNSAxNi41QzEyLjI1IDE2LjM2MiAxMi4xMzggMTYuMjUgMTIgMTYuMjVDMTEuODYyIDE2LjI1IDExLjc1IDE2LjM2MiAxMS43NSAxNi41QzExLjc1IDE2LjYzOCAxMS44NjIgMTYuNzUgMTIuMDAxIDE2Ljc1XCJcbiAgICAgICAgICBzdHJva2U9XCJ3aGl0ZVwiXG4gICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgIC8+XG4gICAgICAgIDxwYXRoXG4gICAgICAgICAgZmlsbC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgY2xpcC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgZD1cIk0xMiAyMUM3LjAyOSAyMSAzIDE2Ljk3MSAzIDEyQzMgNy4wMjkgNy4wMjkgMyAxMiAzQzE2Ljk3MSAzIDIxIDcuMDI5IDIxIDEyQzIxIDE2Ljk3MSAxNi45NzEgMjEgMTIgMjFaXCJcbiAgICAgICAgICBmaWxsPVwiI0ZGMDAwMFwiXG4gICAgICAgICAgc3Ryb2tlPVwiI0ZGMDAwMFwiXG4gICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgIC8+XG4gICAgICAgIDxwYXRoXG4gICAgICAgICAgZD1cIk0xMiAxMi43NUwxMiA3Ljc1XCJcbiAgICAgICAgICBzdHJva2U9XCJ3aGl0ZVwiXG4gICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgIC8+XG4gICAgICAgIDxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTZcIiByPVwiMVwiIGZpbGw9XCJ3aGl0ZVwiIC8+XG4gICAgICA8L3N2Zz5cbiAgICAgIHt7IHZhbGlkYXRpb25NZXNzYWdlIH19XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRlVHlwZSA9PT0gJ0RBVEVfQU5EX1RJTUUnXCI+XG4gICAgPCEtLSBEYXRlIGFuZCB0aW1lIHBpY2tlciAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtY29udGFpbmVyXCI+XG4gICAgICA8aW5wdXRcbiAgICAgICAgI2RhdGVBbmRUaW1lUGlja2VyPVwiYnNEYXRlcGlja2VyXCJcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBoZWlnaHRcIlxuICAgICAgICBbbWluRGF0ZV09XCJtaW5EYXRlID8gbWluRGF0ZSA6IHVuZGVmaW5lZFwiXG4gICAgICAgIFttYXhEYXRlXT1cIm1heERhdGUgPyBtYXhEYXRlIDogdW5kZWZpbmVkXCJcbiAgICAgICAgW2JzQ29uZmlnXT1cIntcbiAgICAgICAgICB3aXRoVGltZXBpY2tlcjogdHJ1ZSxcbiAgICAgICAgICBrZWVwRGF0ZXBpY2tlck9wZW5lZDogdHJ1ZSxcbiAgICAgICAgICByYW5nZUlucHV0Rm9ybWF0OiBmb3JtYXQsXG4gICAgICAgICAgZGF0ZUlucHV0Rm9ybWF0OiBmb3JtYXRcbiAgICAgICAgfVwiXG4gICAgICAgIGJzRGF0ZXBpY2tlclxuICAgICAgICBbY2xhc3MuaW52YWxpZF09XCJ2YWxpZGF0aW9uRmFpbGVkXCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZERhdGVBbmRUaW1lXCJcbiAgICAgICAgKGJsdXIpPVwidmFsaWRhdGVGaWVsZCgpXCJcbiAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidmFsaWRhdGVGaWVsZCgpXCJcbiAgICAgIC8+XG4gICAgICA8aVxuICAgICAgICBjbGFzcz1cImZhLXNvbGlkIGZhLWNhbGVuZGFyLWRheXMgY2FsZW5kYXItaWNvbiB0ZXh0LXByaW1hcnkgZnMtNVwiXG4gICAgICAgIChjbGljayk9XCJvcGVuRGF0ZUFuZFRpbWVQaWNrZXIoKVwiXG4gICAgICA+PC9pPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJ2YWxpZGF0aW9uRmFpbGVkXCIgY2xhc3M9XCJ0ZXh0LWRhbmdlciBtdC0yXCI+XG4gICAgICA8c3ZnXG4gICAgICAgIGNsYXNzPVwidmFsaWRhdGlvblN2Z1wiXG4gICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxuICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgID5cbiAgICAgICAgPHBhdGhcbiAgICAgICAgICBkPVwiTTEyLjAwMSAxNi43NUMxMi4xMzkgMTYuNzUgMTIuMjUxIDE2LjYzOCAxMi4yNSAxNi41QzEyLjI1IDE2LjM2MiAxMi4xMzggMTYuMjUgMTIgMTYuMjVDMTEuODYyIDE2LjI1IDExLjc1IDE2LjM2MiAxMS43NSAxNi41QzExLjc1IDE2LjYzOCAxMS44NjIgMTYuNzUgMTIuMDAxIDE2Ljc1XCJcbiAgICAgICAgICBzdHJva2U9XCJ3aGl0ZVwiXG4gICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgIC8+XG4gICAgICAgIDxwYXRoXG4gICAgICAgICAgZmlsbC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgY2xpcC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgZD1cIk0xMiAyMUM3LjAyOSAyMSAzIDE2Ljk3MSAzIDEyQzMgNy4wMjkgNy4wMjkgMyAxMiAzQzE2Ljk3MSAzIDIxIDcuMDI5IDIxIDEyQzIxIDE2Ljk3MSAxNi45NzEgMjEgMTIgMjFaXCJcbiAgICAgICAgICBmaWxsPVwiI0ZGMDAwMFwiXG4gICAgICAgICAgc3Ryb2tlPVwiI0ZGMDAwMFwiXG4gICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgIC8+XG4gICAgICAgIDxwYXRoXG4gICAgICAgICAgZD1cIk0xMiAxMi43NUwxMiA3Ljc1XCJcbiAgICAgICAgICBzdHJva2U9XCJ3aGl0ZVwiXG4gICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgIC8+XG4gICAgICAgIDxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTZcIiByPVwiMVwiIGZpbGw9XCJ3aGl0ZVwiIC8+XG4gICAgICA8L3N2Zz5cbiAgICAgIHt7IHZhbGlkYXRpb25NZXNzYWdlIH19XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRlVHlwZSA9PT0gJ0RBVEVfUkFOR0UnXCI+XG4gICAgPCEtLSBEYXRlIHJhbmdlIHBpY2tlciAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtY29udGFpbmVyXCI+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBoZWlnaHRcIlxuICAgICAgICAjZGF0ZXJhbmdlcGlja2VyPVwiYnNEYXRlcmFuZ2VwaWNrZXJcIlxuICAgICAgICBic0RhdGVyYW5nZXBpY2tlclxuICAgICAgICBbbWluRGF0ZV09XCJtaW5EYXRlID8gbWluRGF0ZSA6IHVuZGVmaW5lZFwiXG4gICAgICAgIFttYXhEYXRlXT1cIm1heERhdGUgPyBtYXhEYXRlIDogdW5kZWZpbmVkXCJcbiAgICAgICAgW2JzQ29uZmlnXT1cIntcbiAgICAgICAgICByYW5nZUlucHV0Rm9ybWF0OiBmb3JtYXQsXG4gICAgICAgICAgZGF0ZUlucHV0Rm9ybWF0OiBmb3JtYXQsXG4gICAgICAgICAgc2hvd1dlZWtOdW1iZXJzOiBmYWxzZVxuICAgICAgICB9XCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZERhdGVSYW5nZVwiXG4gICAgICAgIChibHVyKT1cInZhbGlkYXRlRmllbGQoKVwiXG4gICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInZhbGlkYXRlRmllbGQoKVwiXG4gICAgICAgIFtjbGFzcy5pbnZhbGlkXT1cInZhbGlkYXRpb25GYWlsZWRcIlxuICAgICAgLz5cbiAgICAgIDxpXG4gICAgICAgIGNsYXNzPVwiZmEtc29saWQgZmEtY2FsZW5kYXItZGF5cyBjYWxlbmRhci1pY29uIHRleHQtcHJpbWFyeSBmcy01XCJcbiAgICAgICAgKGNsaWNrKT1cIm9wZW5EYXRlUmFuZ2VQaWNrZXIoKVwiXG4gICAgICA+PC9pPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJ2YWxpZGF0aW9uRmFpbGVkXCIgY2xhc3M9XCJ0ZXh0LWRhbmdlciBtdC0yXCI+XG4gICAgICA8c3ZnXG4gICAgICAgIGNsYXNzPVwidmFsaWRhdGlvblN2Z1wiXG4gICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxuICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgID5cbiAgICAgICAgPHBhdGhcbiAgICAgICAgICBkPVwiTTEyLjAwMSAxNi43NUMxMi4xMzkgMTYuNzUgMTIuMjUxIDE2LjYzOCAxMi4yNSAxNi41QzEyLjI1IDE2LjM2MiAxMi4xMzggMTYuMjUgMTIgMTYuMjVDMTEuODYyIDE2LjI1IDExLjc1IDE2LjM2MiAxMS43NSAxNi41QzExLjc1IDE2LjYzOCAxMS44NjIgMTYuNzUgMTIuMDAxIDE2Ljc1XCJcbiAgICAgICAgICBzdHJva2U9XCJ3aGl0ZVwiXG4gICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgIC8+XG4gICAgICAgIDxwYXRoXG4gICAgICAgICAgZmlsbC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgY2xpcC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgZD1cIk0xMiAyMUM3LjAyOSAyMSAzIDE2Ljk3MSAzIDEyQzMgNy4wMjkgNy4wMjkgMyAxMiAzQzE2Ljk3MSAzIDIxIDcuMDI5IDIxIDEyQzIxIDE2Ljk3MSAxNi45NzEgMjEgMTIgMjFaXCJcbiAgICAgICAgICBmaWxsPVwiI0ZGMDAwMFwiXG4gICAgICAgICAgc3Ryb2tlPVwiI0ZGMDAwMFwiXG4gICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgIC8+XG4gICAgICAgIDxwYXRoXG4gICAgICAgICAgZD1cIk0xMiAxMi43NUwxMiA3Ljc1XCJcbiAgICAgICAgICBzdHJva2U9XCJ3aGl0ZVwiXG4gICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgIC8+XG4gICAgICAgIDxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTZcIiByPVwiMVwiIGZpbGw9XCJ3aGl0ZVwiIC8+XG4gICAgICA8L3N2Zz5cbiAgICAgIHt7IHZhbGlkYXRpb25NZXNzYWdlIH19XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG4iXX0=
|
|
418
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLWZpZWxkcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLXN1Ym1pc3Npb24vc3JjL2Zvcm0tZmllbGRzL2RhdGUtdGltZS1maWVsZHMvZGF0ZS10aW1lLWZpZWxkcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLXN1Ym1pc3Npb24vc3JjL2Zvcm0tZmllbGRzL2RhdGUtdGltZS1maWVsZHMvZGF0ZS10aW1lLWZpZWxkcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBZ0IsS0FBSyxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7O0FBWWxGLE1BQU0sT0FBTyx1QkFBdUI7SUFtQ2xDLFlBQW9CLFFBQWtCO1FBQWxCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFsQ3RDLGFBQVEsR0FBZ0M7WUFDdEMsY0FBYyxFQUFFLGlCQUFpQjtZQUNqQyxVQUFVLEVBQUUsSUFBSTtZQUNoQixnQkFBZ0IsRUFBRSxJQUFJO1lBQ3RCLGVBQWUsRUFBRSxLQUFLO1NBQ3ZCLENBQUM7UUFFTyxhQUFRLEdBQVEsRUFBRSxDQUFDO1FBQzVCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIsU0FBSSxHQUFXLEVBQUUsQ0FBQztRQUNsQixVQUFLLEdBQVcsQ0FBQyxDQUFDO1FBQ2xCLFlBQU8sR0FBVyxFQUFFLENBQUM7UUFDckIsWUFBTyxHQUFXLEVBQUUsQ0FBQztRQUNyQixhQUFRLEdBQVcsRUFBRSxDQUFDO1FBQ3RCLFdBQU0sR0FBVyxFQUFFLENBQUM7UUFDcEIsZUFBVSxHQUFVLEVBQUUsQ0FBQztRQUN2QixrQkFBYSxHQUFXLEVBQUUsQ0FBQztRQUUzQixrQkFBYSxHQUFXLEVBQUUsQ0FBQztRQUUz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IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBCc0RhdGVwaWNrZXJDb25maWcsXG4gIEJzRGF0ZXBpY2tlckRpcmVjdGl2ZSxcbn0gZnJvbSAnbmd4LWJvb3RzdHJhcC9kYXRlcGlja2VyJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWRhdGUtdGltZS1maWVsZHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZS10aW1lLWZpZWxkcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RhdGUtdGltZS1maWVsZHMuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbRGF0ZVBpcGVdXG59KVxuZXhwb3J0IGNsYXNzIERhdGVUaW1lRmllbGRzQ29tcG9uZW50IHtcbiAgYnNDb25maWc6IFBhcnRpYWw8QnNEYXRlcGlja2VyQ29uZmlnPiA9IHtcbiAgICBjb250YWluZXJDbGFzczogJ3RoZW1lLWRhcmstYmx1ZScsXG4gICAgaXNBbmltYXRlZDogdHJ1ZSxcbiAgICBhZGFwdGl2ZVBvc2l0aW9uOiB0cnVlLFxuICAgIHNob3dXZWVrTnVtYmVyczogZmFsc2UsXG4gIH07XG5cbiAgQElucHV0KCkgcXVlc3Rpb246IGFueSA9IHt9O1xuICByZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBoaW50OiBzdHJpbmcgPSAnJztcbiAgY291bnQ6IG51bWJlciA9IDA7XG4gIG1pblRpbWU6IHN0cmluZyA9ICcnO1xuICBtYXhUaW1lOiBzdHJpbmcgPSAnJztcbiAgZGF0ZVR5cGU6IHN0cmluZyA9ICcnO1xuICBmb3JtYXQ6IHN0cmluZyA9ICcnO1xuICB0aW1lRm9ybWF0OiBzdHJpbmcgPScnO1xuICBtaW5EYXRlT3B0aW9uOiBzdHJpbmcgPSAnJztcbiAgbWluRGF0ZTogRGF0ZSB8IHVuZGVmaW5lZDtcbiAgbWF4RGF0ZU9wdGlvbjogc3RyaW5nID0gJyc7XG4gIG1heERhdGU6IERhdGUgfCB1bmRlZmluZWQ7XG4gIHRvZGF5RGF0ZTogRGF0ZSA9IG5ldyBEYXRlKCk7XG4gIHNlbGVjdGVkRGF0ZTogRGF0ZSB8IG51bGwgPSBudWxsO1xuICBzZWxlY3RlZFRpbWU6IHN0cmluZyA9ICcnO1xuICBzZWxlY3RlZERhdGVSYW5nZTogc3RyaW5nID0gJyc7XG4gIHNlbGVjdGVkRGF0ZUFuZFRpbWU6IERhdGUgfCBudWxsID0gbnVsbDtcbiAgdmFsaWRhdGlvbkZhaWxlZCE6IGJvb2xlYW47XG4gIHRpbWVWYWxpZGF0aW9uRmFpbGVkITogYm9vbGVhbjtcbiAgdmFsaWRhdGlvbk1lc3NhZ2U6IHN0cmluZyA9ICcnO1xuICBtYXhUaW1lT3B0aW9uOiBzdHJpbmcgPSAnJztcbiAgbWluVGltZU9wdGlvbjogc3RyaW5nID0gJyc7XG4gXG4gIEBWaWV3Q2hpbGQoJ2RhdGVwaWNrZXJZTUQnKSBkYXRlcGlja2VyITogQnNEYXRlcGlja2VyRGlyZWN0aXZlO1xuICBAVmlld0NoaWxkKCdkYXRlcmFuZ2VwaWNrZXInKSBkYXRlUmFuZ2VQaWNrZXIhOiBCc0RhdGVwaWNrZXJEaXJlY3RpdmU7XG4gIEBWaWV3Q2hpbGQoJ2RhdGVBbmRUaW1lUGlja2VyJykgZGF0ZUFuZFRpbWVQaWNrZXIhOiBCc0RhdGVwaWNrZXJEaXJlY3RpdmU7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlKSB7IH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnZhbHVlQXNzaWduZWQoKTtcbiAgfVxuXG4gIHZhbHVlQXNzaWduZWQoKSB7XG4gIFxuICAgIHRoaXMuY291bnQgPSB0aGlzLnF1ZXN0aW9uLmNvdW50O1xuICAgIHRoaXMucmVxdWlyZWQgPSB0aGlzLnF1ZXN0aW9uLnJlcXVpcmVkO1xuICAgIHRoaXMuaGludCA9IHRoaXMucXVlc3Rpb24uaGludDtcbiAgICB0aGlzLmRhdGVUeXBlID0gdGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC5hcHBlYXJhbmNlLmRhdGVUeXBlO1xuICAgIHRoaXMubWluRGF0ZU9wdGlvbiA9IHRoaXMucXVlc3Rpb24uZm9ybUVsZW1lbnQudmFsaWRhdGlvbi5taW5EYXRlT3B0aW9uO1xuXG4gICAgXG4gICAgdGhpcy5taW5EYXRlID0gdGhpcy5nZXRNaW5EYXRlKCk7XG5cbiAgICBcbiAgICB0aGlzLm1heERhdGVPcHRpb24gPSB0aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50LnZhbGlkYXRpb24ubWF4RGF0ZU9wdGlvbjtcbiAgICB0aGlzLm1heERhdGUgPSB0aGlzLmdldE1heERhdGUoKTtcbiAgICB0aGlzLnNldERhdGVUaW1lRm9ybWF0KCk7XG4gICAgaWYodGhpcy5xdWVzdGlvbj8uYW5zd2VyICYmICh0aGlzLnF1ZXN0aW9uPy5hbnN3ZXIpLmxlbmd0aD4wKVxuICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gdGhpcy5xdWVzdGlvbj8uYW5zd2VyIDsgICAgXG4gICAgdGhpcy5zZWxlY3RlZFRpbWUgPSB0aGlzLnF1ZXN0aW9uLmFuc3dlcjtcbiAgICBpZih0aGlzLnF1ZXN0aW9uPy5hbnN3ZXIgJiYgKHRoaXMucXVlc3Rpb24/LmFuc3dlcikubGVuZ3RoPjApXG4gICAgdGhpcy5zZWxlY3RlZERhdGVBbmRUaW1lID0gbmV3IERhdGUodGhpcy5xdWVzdGlvbi5hbnN3ZXIpO1xuICAgIHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2UgPSB0aGlzLnF1ZXN0aW9uLmFuc3dlcjtcbiAgIHRoaXMubWluVGltZU9wdGlvbj10aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50LnZhbGlkYXRpb24ubWluVGltZU9wdGlvbjtcbiAgIHRoaXMubWF4VGltZU9wdGlvbj10aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50LnZhbGlkYXRpb24ubWF4VGltZU9wdGlvbjtcbiAgIGlmKHRoaXMuZGF0ZVR5cGUhPT0nREFURV9BTkRfVElNRScpe1xuICB0aGlzLm1pblRpbWU9dGhpcy5nZXRNaW5UaW1lKCkudG9TdHJpbmcoKTtcbiAgdGhpcy5tYXhUaW1lPXRoaXMuZ2V0TWF4VGltZSgpLnRvU3RyaW5nKCk7XG4gICB9XG4gIGlmKHRoaXMuZGF0ZVR5cGU9PT0nREFURV9BTkRfVElNRScgICYmIHRoaXMucXVlc3Rpb24/LmFuc3dlcil7XG4gICAgY29uc3QgZGF0ZVRpbWVBcnJheSA9IHRoaXMucXVlc3Rpb24uYW5zd2VyIFxuICAgID8gdGhpcy5xdWVzdGlvbi5hbnN3ZXIuc3BsaXQoJywnKVxuICAgIDogW107IC8vIEZhbGxiYWNrIHRvIGFuIGVtcHR5IGFycmF5IGlmIGB0aGlzLnF1ZXN0aW9uLmFuc3dlcmAgaXMgdW5kZWZpbmVkXG4gIFxuICBpZiAoZGF0ZVRpbWVBcnJheS5sZW5ndGggPT09IDIpIHtcbiAgICBjb25zdCBmZXRjaGVkRGF0ZSA9IGRhdGVUaW1lQXJyYXlbMF0udHJpbSgpO1xuICAgIGNvbnN0IGZldGNoZWRUaW1lID0gZGF0ZVRpbWVBcnJheVsxXS50cmltKCk7XG4gICAgdGhpcy5zZWxlY3RlZERhdGU9ZmV0Y2hlZERhdGU7XG4gICAgdGhpcy5zZWxlY3RlZFRpbWU9ZmV0Y2hlZFRpbWU7XG4gIH1cblxuICBjb25zdCBmb3JtYXR0ZWREYXRlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5zZWxlY3RlZERhdGVBbmRUaW1lLCAnZGQvTU0veXl5eScpO1xuICBjb25zdCBmb3JtYXR0ZW1pbkRhdGUgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh0aGlzLm1pbkRhdGUsICdkZC9NTS95eXl5Jyk7XG4gIGNvbnN0IGZvcm1hdHRlbWF4RGF0ZSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHRoaXMubWF4RGF0ZSwgJ2RkL01NL3l5eXknKTtcbiAgY29uc29sZS5sb2coXCJmb3JtYXR0ZWREYXRlXCIgK2Zvcm1hdHRlZERhdGUpO1xuICBjb25zb2xlLmxvZyhcImZvcm1hdHRlZERhdGVcIiArZm9ybWF0dGVtYXhEYXRlKTtcbiAgXG4gIGlmKGZvcm1hdHRlZERhdGU9PT1mb3JtYXR0ZW1pbkRhdGUpe1xuICAgICAgdGhpcy5taW5UaW1lPXRoaXMuZ2V0TWluVGltZSgpLnRvU3RyaW5nKCk7XG4gICAgICBpZiAodGhpcy50aW1lRm9ybWF0PT09ICcxMicpIHtcbiAgICAgICAgdGhpcy5tYXhUaW1lID0gJzEyOjAwIHBtJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubWF4VGltZSA9ICcyMzowMCc7XG4gICAgICB9XG4gIH1cbiAgaWYoZm9ybWF0dGVkRGF0ZT09PWZvcm1hdHRlbWF4RGF0ZSl7XG4gICAgdGhpcy5tYXhUaW1lPXRoaXMuZ2V0TWF4VGltZSgpLnRvU3RyaW5nKCk7XG4gICAgaWYgKHRoaXMudGltZUZvcm1hdCA9PT0gJzEyJykge1xuICAgICAgdGhpcy5taW5UaW1lID0gJzEyOjAwIGFtJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5taW5UaW1lID0gJzAwOjAwJztcbiAgICB9XG59XG5pZihmb3JtYXR0ZWREYXRlIT09Zm9ybWF0dGVtaW5EYXRlICYmIGZvcm1hdHRlZERhdGUhPT1mb3JtYXR0ZW1heERhdGUpe1xuICBpZiAodGhpcy50aW1lRm9ybWF0ID09PSAnMTInKSB7XG4gICAgdGhpcy5taW5UaW1lID0gJzEyOjAwIGFtJztcbiAgICB0aGlzLm1heFRpbWUgPSAnMTI6MDAgcG0nO1xuICB9IGVsc2Uge1xuICAgIHRoaXMubWluVGltZSA9ICcwMDowMCc7XG4gICAgdGhpcy5tYXhUaW1lID0gJzIzOjAwJztcbiAgfVxufVxuICAgIFxuICB9XG5cbiAgXG4gICAgaWYgKCF0aGlzLm1pblRpbWUgfHwgdGhpcy5taW5UaW1lLmxlbmd0aCA9PT0gMCkge1xuICAgICAgaWYgKHRoaXMudGltZUZvcm1hdCA9PT0gJzEyJykge1xuICAgICAgICB0aGlzLm1pblRpbWUgPSAnMTI6MDAgYW0nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5taW5UaW1lID0gJzAwOjAwJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubWF4VGltZSB8fCB0aGlzLm1heFRpbWUubGVuZ3RoID09PSAwKSB7XG4gICAgICBpZiAodGhpcy50aW1lRm9ybWF0PT09ICcxMicpIHtcbiAgICAgICAgdGhpcy5tYXhUaW1lID0gJzEyOjAwIHBtJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubWF4VGltZSA9ICcyMzowMCc7XG4gICAgICB9XG4gICAgfVxuXG5cbiAgICBcbiAgfVxuXG4gIHNldERhdGVUaW1lRm9ybWF0KCkge1xuICAgIHN3aXRjaCAodGhpcy5kYXRlVHlwZSkge1xuICAgICAgY2FzZSAnREFURV9PTkxZJzpcbiAgICAgICAgdGhpcy5mb3JtYXQgPXRoaXMucXVlc3Rpb24uZm9ybUVsZW1lbnQuYXBwZWFyYW5jZS5mb3JtYXQ7ICAgICAgICBcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdUSU1FX09OTFknOiBcbiAgICAgICAgdGhpcy50aW1lRm9ybWF0ID0gdGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC5hcHBlYXJhbmNlLnRpbWVGb3JtYXQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnREFURV9BTkRfVElNRSc6XG4gICAgICAgIHRoaXMuZm9ybWF0ID0gdGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC5hcHBlYXJhbmNlLmZvcm1hdDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdEQVRFX1JBTkdFJzpcbiAgICAgICAgdGhpcy5mb3JtYXQgPSB0aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50LmFwcGVhcmFuY2UuZm9ybWF0O1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuZm9ybWF0ID0gJ0REL01NL1lZWVknO1xuICAgIH1cbiAgfVxuXG4gIGdldE1pbkRhdGUoKTogRGF0ZSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRoaXMubWluRGF0ZU9wdGlvbiA9PT0gJ0NVUlJFTlRfREFURScpIHtcbiAgICAgIHJldHVybiB0aGlzLnRvZGF5RGF0ZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubWluRGF0ZU9wdGlvbiA9PT0gJ0NVU1RPTScpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZSh0aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50LnZhbGlkYXRpb24ubWluRGF0ZSk7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7IC8vIFJldHVybiB1bmRlZmluZWQgaWYgbm8gdmFsaWQgb3B0aW9uXG4gIH1cblxuICBnZXRNYXhEYXRlKCk6IERhdGUgfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLm1heERhdGVPcHRpb24gPT09ICdDVVJSRU5UX0RBVEUnKSB7XG4gICAgICByZXR1cm4gdGhpcy50b2RheURhdGU7XG4gICAgfSBlbHNlIGlmICh0aGlzLm1heERhdGVPcHRpb24gPT09ICdDVVNUT00nKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUodGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC52YWxpZGF0aW9uLm1heERhdGUpO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0TWluVGltZSgpIHtcbiAgICBpZiAodGhpcy5taW5UaW1lT3B0aW9uKSB7XG4gICAgICBjb25zdCBmb3JtYXQgPSB0aGlzLnRpbWVGb3JtYXQgPT09ICcyNCcgPyAnSEg6bW0nIDogJ2hoOm1tIGEnO1xuICAgICAgXG4gICAgICBpZiAodGhpcy5taW5UaW1lT3B0aW9uID09PSAnQ1VSUkVOVF9USU1FJykge1xuICAgICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0obm93LCBmb3JtYXQpIHx8ICcnO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLm1pblRpbWVPcHRpb24gPT09ICdDVVNUT00nKSB7XG4gICAgICAgIGNvbnN0IGN1c3RvbVRpbWUgPSB0aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50LnZhbGlkYXRpb24ubWluVGltZTtcbiAgICAgICAgY29uc3QgW2hvdXJzLCBtaW51dGVzXSA9IGN1c3RvbVRpbWUuc3BsaXQoJzonKTsgLy8gU3BsaXQgYnkgY29sb24gdG8gZ2V0IGhvdXJzIGFuZCBtaW51dGVzXG4gICAgICAgICAgXG4gICAgICAvLyBDcmVhdGUgYSBEYXRlIG9iamVjdCB3aXRoIGEgZml4ZWQgZGF0ZSBhbmQgY3VzdG9tIHRpbWVcbiAgICAgIGNvbnN0IGN1c3RvbURhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgY3VzdG9tRGF0ZS5zZXRIb3VycyhwYXJzZUludChob3VycywgMTApLCBwYXJzZUludChtaW51dGVzLCAxMCksIDAsIDApOyAvLyBTZXQgaG91cnMgYW5kIG1pbnV0ZXNcblxuICAgICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGN1c3RvbURhdGUsIGZvcm1hdCkgfHwgJyc7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIEVuc3VyZSBhIGRlZmF1bHQgcmV0dXJuIGlmIG5vIGNvbmRpdGlvbiBpcyBtZXRcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgXG5cbiAgZ2V0TWF4VGltZSgpIHtcbiAgICBpZih0aGlzLm1heFRpbWVPcHRpb24pe1xuICAgICAgY29uc3QgZm9ybWF0PSB0aGlzLnRpbWVGb3JtYXQ9PT0nMjQnPydISDptbSc6J2hoOm1tIGEnO1xuICAgICAgaWYodGhpcy5tYXhUaW1lT3B0aW9uPT09J0NVUlJFTlRfVElNRScpXG4gICAgICB7XG4gICAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShub3csZm9ybWF0KSB8fCAnJztcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYodGhpcy5tYXhUaW1lT3B0aW9uPT09J0NVU1RPTScpe1xuICAgICAgICBjb25zdCBjdXN0b21UaW1lID0gIHRoaXMucXVlc3Rpb24uZm9ybUVsZW1lbnQudmFsaWRhdGlvbi5tYXhUaW1lO1xuICAgICAgICBjb25zdCBbaG91cnMsIG1pbnV0ZXNdID0gY3VzdG9tVGltZS5zcGxpdCgnOicpOyAvLyBTcGxpdCBieSBjb2xvbiB0byBnZXQgaG91cnMgYW5kIG1pbnV0ZXNcbiAgICBcbiAgICAgIC8vIENyZWF0ZSBhIERhdGUgb2JqZWN0IHdpdGggYSBmaXhlZCBkYXRlIGFuZCBjdXN0b20gdGltZVxuICAgICAgY29uc3QgY3VzdG9tRGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICBjdXN0b21EYXRlLnNldEhvdXJzKHBhcnNlSW50KGhvdXJzLCAxMCksIHBhcnNlSW50KG1pbnV0ZXMsIDEwKSwgMCwgMCk7IC8vIFNldCBob3VycyBhbmQgbWludXRlc1xuXG4gICAgICByZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oY3VzdG9tRGF0ZSwgZm9ybWF0KSB8fCAnJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBvcGVuRGF0ZVBpY2tlcigpIHtcbiAgICB0aGlzLmRhdGVwaWNrZXIudG9nZ2xlKCk7XG4gIH1cblxuICBvcGVuRGF0ZVJhbmdlUGlja2VyKCkge1xuICAgIHRoaXMuZGF0ZVJhbmdlUGlja2VyLnRvZ2dsZSgpO1xuICB9XG5cbiAgb3BlbkRhdGVBbmRUaW1lUGlja2VyKCkge1xuICAgIHRoaXMuZGF0ZUFuZFRpbWVQaWNrZXIudG9nZ2xlKCk7XG4gIH1cbiAgXG5cbiAgdmFsaWRhdGVGaWVsZCgpIHtcbiAgICBpZiAodGhpcy5kYXRlVHlwZSA9PT0gJ0RBVEVfT05MWScpIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkRGF0ZSkge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uLmFuc3dlciA9IHRoaXMuZm9ybWF0RGF0ZSh0aGlzLnNlbGVjdGVkRGF0ZS50b1N0cmluZygpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uLmFuc3dlciA9ICcnO1xuICAgIH1cbiAgXG4gICAgICB0aGlzLnZhbGlkYXRlRGF0ZU9ubHkoKVxuICAgIH1cbiAgICBlbHNlIGlmKHRoaXMuZGF0ZVR5cGUgPT09ICdUSU1FX09OTFknKXtcbiAgICAgIHRoaXMucXVlc3Rpb24uYW5zd2VyPVN0cmluZyh0aGlzLnNlbGVjdGVkVGltZSk7XG4gICAgICB0aGlzLnZhbGlkYXRlVGltZU9ubHkoKVxuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLmRhdGVUeXBlID09PSAnREFURV9BTkRfVElNRScpIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkRGF0ZUFuZFRpbWUpIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbi5hbnN3ZXIgPSB0aGlzLmZvcm1hdERhdGUodGhpcy5zZWxlY3RlZERhdGVBbmRUaW1lLnRvU3RyaW5nKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb24uYW5zd2VyID0gJyc7XG4gICAgfVxuICAgICBcbiAgICAgIHRoaXMudmFsaWRhdGVEYXRlQW5kVGltZSgpXG5cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uLmFuc3dlciA9IHRoaXMuZm9ybWF0RGF0ZSh0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlKTtcbiAgICAgIHRoaXMudmFsaWRhdGVEYXRlUmFuZ2UoKVxuICAgIH1cbiAgfVxuXG4gIGZvcm1hdERhdGUoZGF0ZTogc3RyaW5nIHwgRGF0ZSwgdHlwZTogc3RyaW5nID0gJ2RhdGVUaW1lJyk6IHN0cmluZyB7XG4gICAgc3dpdGNoICh0aGlzLmRhdGVUeXBlKSB7XG4gICAgICBjYXNlICdEQVRFX09OTFknOlxuICAgICAgICByZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5zZWxlY3RlZERhdGUsICdkZC9NTS95eXl5JykgfHwgJyc7XG4gICAgICBjYXNlICdEQVRFX0FORF9USU1FJzpcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkRGF0ZSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHRoaXMuc2VsZWN0ZWREYXRlQW5kVGltZSwgJ2RkL01NL3l5eXknKTtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVtaW5EYXRlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5taW5EYXRlLCAnZGQvTU0veXl5eScpO1xuICAgICAgICBjb25zdCBmb3JtYXR0ZW1heERhdGUgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh0aGlzLm1heERhdGUsICdkZC9NTS95eXl5Jyk7XG4gICAgICAgIGlmKGZvcm1hdHRlZERhdGU9PT1mb3JtYXR0ZW1pbkRhdGUpe1xuICAgICAgICAgICAgdGhpcy5taW5UaW1lPXRoaXMuZ2V0TWluVGltZSgpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBpZiAodGhpcy50aW1lRm9ybWF0PT09ICcxMicpIHtcbiAgICAgICAgICAgICAgdGhpcy5tYXhUaW1lID0gJzEyOjAwIHBtJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMubWF4VGltZSA9ICcyMzowMCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYoZm9ybWF0dGVkRGF0ZT09PWZvcm1hdHRlbWF4RGF0ZSl7XG4gICAgICAgICAgdGhpcy5tYXhUaW1lPXRoaXMuZ2V0TWF4VGltZSgpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgaWYgKHRoaXMudGltZUZvcm1hdCA9PT0gJzEyJykge1xuICAgICAgICAgICAgdGhpcy5taW5UaW1lID0gJzEyOjAwIGFtJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5taW5UaW1lID0gJzAwOjAwJztcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZihmb3JtYXR0ZWREYXRlIT09Zm9ybWF0dGVtaW5EYXRlICYmIGZvcm1hdHRlZERhdGUhPT1mb3JtYXR0ZW1heERhdGUpe1xuICAgICAgICBpZiAodGhpcy50aW1lRm9ybWF0ID09PSAnMTInKSB7XG4gICAgICAgICAgdGhpcy5taW5UaW1lID0gJzEyOjAwIGFtJztcbiAgICAgICAgICB0aGlzLm1heFRpbWUgPSAnMTI6MDAgcG0nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubWluVGltZSA9ICcwMDowMCc7XG4gICAgICAgICAgdGhpcy5tYXhUaW1lID0gJzIzOjAwJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgICBjb25zdCBmb3JtYXR0ZWRUaW1lID0gdGhpcy5zZWxlY3RlZFRpbWUgfHwgJyc7ICAvLyBJZiBzZWxlY3RlZFRpbWUgaXMgbnVsbCBvciB1bmRlZmluZWQsIHVzZSBlbXB0eSBzdHJpbmdcbiAgICAgICAgaWYgKGZvcm1hdHRlZERhdGUgJiYgZm9ybWF0dGVkVGltZSkge1xuICAgICAgICAgIHJldHVybiBgJHtmb3JtYXR0ZWREYXRlfSwke2Zvcm1hdHRlZFRpbWV9YDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgICBjYXNlICdEQVRFX1JBTkdFJzpcbiAgICAgICAgXG4gICAgICBjb25zdCBkYXRlcyA9IGRhdGUgYXMgdW5rbm93biBhcyBEYXRlW107XG4gIFxuICAgICAgLy8gRW5zdXJlIGRhdGVzIGlzIGRlZmluZWQgYW5kIGlzIGFuIGFycmF5XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRlcykgJiYgZGF0ZXMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZXNbMF0sICdkZC9NTS95eXl5Jyk7XG4gICAgICAgIGNvbnN0IGVuZCA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGVzWzFdLCAnZGQvTU0veXl5eScpO1xuICAgICAgICByZXR1cm4gYCR7c3RhcnR9IC0gJHtlbmR9YDtcbiAgICAgIH1cbiAgICBcbiAgICAgIHJldHVybiAnJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShkYXRlLCAnZGQvTU0veXl5eScpIHx8ICcnO1xuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlRGF0ZU9ubHkoKSB7XG4gICAgdGhpcy52YWxpZGF0aW9uRmFpbGVkID0gZmFsc2U7XG4gICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZSA9ICcnO1xuICAgIGlmICh0aGlzLnJlcXVpcmVkICYmICF0aGlzLnNlbGVjdGVkRGF0ZSkge1xuICAgICAgdGhpcy52YWxpZGF0aW9uRmFpbGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UgPSAnVGhpcyBpcyBhIHJlcXVpcmVkIHF1ZXN0aW9uJztcbiAgICAgIHRoaXMucXVlc3Rpb24udmFsaWRhdGlvbiA9IGZhbHNlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMucXVlc3Rpb24udmFsaWRhdGlvbiA9IHRydWU7XG4gICAgfVxuICB9XG4gIHZhbGlkYXRlVGltZU9ubHkoKSB7XG4gICAgdGhpcy52YWxpZGF0aW9uRmFpbGVkID0gZmFsc2U7XG4gICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZSA9ICcnO1xuICAgIGlmICh0aGlzLnJlcXVpcmVkICYmICF0aGlzLnNlbGVjdGVkVGltZSkge1xuICAgICAgdGhpcy52YWxpZGF0aW9uRmFpbGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UgPSAnVGhpcyBpcyBhIHJlcXVpcmVkIHF1ZXN0aW9uJzs7XG4gICAgICB0aGlzLnF1ZXN0aW9uLnZhbGlkYXRpb24gPSBmYWxzZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uLnZhbGlkYXRpb24gPSB0cnVlO1xuICAgIH1cbiAgfVxuICB2YWxpZGF0ZURhdGVSYW5nZSgpIHtcbiAgICB0aGlzLnZhbGlkYXRpb25GYWlsZWQgPSBmYWxzZTtcbiAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlID0gJyc7XG4gICAgaWYgKHRoaXMucmVxdWlyZWQgJiYgIXRoaXMuc2VsZWN0ZWREYXRlUmFuZ2UpIHtcbiAgICAgIHRoaXMudmFsaWRhdGlvbkZhaWxlZCA9IHRydWU7XG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlID0gJ1RoaXMgaXMgYSByZXF1aXJlZCBxdWVzdGlvbic7XG4gICAgICB0aGlzLnF1ZXN0aW9uLnZhbGlkYXRpb24gPSBmYWxzZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uLnZhbGlkYXRpb24gPSB0cnVlO1xuICAgIH1cbiAgfVxuICB2YWxpZGF0ZURhdGVBbmRUaW1lKCkge1xuICAgIHRoaXMudmFsaWRhdGlvbkZhaWxlZCA9IGZhbHNlO1xuICAgIHRoaXMudGltZVZhbGlkYXRpb25GYWlsZWQ9IGZhbHNlO1xuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UgPSAnJztcbiAgICBpZiAodGhpcy5yZXF1aXJlZCAmJiAhdGhpcy5zZWxlY3RlZERhdGVBbmRUaW1lICkge1xuICAgICAgdGhpcy52YWxpZGF0aW9uRmFpbGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UgPSAnVGhpcyBpcyBhIHJlcXVpcmVkIHF1ZXN0aW9uJztcbiAgICAgIHRoaXMucXVlc3Rpb24udmFsaWRhdGlvbiA9IGZhbHNlO1xuICAgIH1cbiAgICBlbHNlIGlmKHRoaXMucmVxdWlyZWQgJiYgICAhdGhpcy5zZWxlY3RlZFRpbWUpe1xuICAgICAgdGhpcy50aW1lVmFsaWRhdGlvbkZhaWxlZCA9IHRydWU7XG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlID0gJ1RoaXMgaXMgYSByZXF1aXJlZCBxdWVzdGlvbic7XG4gICAgICB0aGlzLnF1ZXN0aW9uLnZhbGlkYXRpb24gPSBmYWxzZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uLnZhbGlkYXRpb24gPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGNvbnZlcnRUb0lTT0RhdGUoXG4gICAgZGF0ZUlucHV0OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gfCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkXG4gICk6IERhdGUgfCBudWxsIHtcbiBcbiAgICBcbiAgICBpZiAoIWRhdGVJbnB1dCkge1xuIFxuICAgICAgXG4gICAgICByZXR1cm4gbnVsbDsgLy8gUmV0dXJuIG51bGwgaWYgZGF0ZUlucHV0IGlzIG51bGwsIHVuZGVmaW5lZCwgb3IgYW55IGZhbHN5IHZhbHVlXG4gICAgfVxuXG4gICAgbGV0IHllYXIsIG1vbnRoLCBkYXk7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRlSW5wdXQpKSB7XG4gICAgICAvLyBFeHRyYWN0IHllYXIsIG1vbnRoLCBhbmQgZGF5IGZyb20gYXJyYXkgaW5wdXRcbiAgICAgIFt5ZWFyLCBtb250aCwgZGF5XSA9IGRhdGVJbnB1dDtcblxuICAgICAgLy8gVmFsaWRhdGUgdGhlIGFycmF5IGZvcm1hdFxuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2YgeWVhciAhPT0gJ251bWJlcicgfHxcbiAgICAgICAgdHlwZW9mIG1vbnRoICE9PSAnbnVtYmVyJyB8fFxuICAgICAgICB0eXBlb2YgZGF5ICE9PSAnbnVtYmVyJyB8fFxuICAgICAgICBpc05hTih5ZWFyKSB8fFxuICAgICAgICBpc05hTihtb250aCkgfHxcbiAgICAgICAgaXNOYU4oZGF5KSB8fFxuICAgICAgICAhTnVtYmVyLmlzSW50ZWdlcih5ZWFyKSB8fFxuICAgICAgICAhTnVtYmVyLmlzSW50ZWdlcihtb250aCkgfHxcbiAgICAgICAgIU51bWJlci5pc0ludGVnZXIoZGF5KSB8fFxuICAgICAgICBtb250aCA8IDEgfHxcbiAgICAgICAgbW9udGggPiAxMiB8fFxuICAgICAgICBkYXkgPCAxIHx8XG4gICAgICAgIGRheSA+IDMxXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZGF0ZUlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gQ2hlY2sgaWYgdGhlIHN0cmluZyBtYXRjaGVzIHRoZSBZWVlZLU1NLUREIGZvcm1hdFxuICAgICAgY29uc3QgZGF0ZVBhcnRzID0gZGF0ZUlucHV0LnNwbGl0KCctJyk7XG4gICAgICBpZiAoZGF0ZVBhcnRzLmxlbmd0aCAhPT0gMykgcmV0dXJuIG51bGw7XG5cbiAgICAgIFt5ZWFyLCBtb250aCwgZGF5XSA9IGRhdGVQYXJ0cy5tYXAoTnVtYmVyKTtcblxuICAgICAgLy8gVmFsaWRhdGUgdGhlIHBhcnNlZCBwYXJ0c1xuICAgICAgaWYgKFxuICAgICAgICBpc05hTih5ZWFyKSB8fFxuICAgICAgICBpc05hTihtb250aCkgfHxcbiAgICAgICAgaXNOYU4oZGF5KSB8fFxuICAgICAgICAhTnVtYmVyLmlzSW50ZWdlcih5ZWFyKSB8fFxuICAgICAgICAhTnVtYmVyLmlzSW50ZWdlcihtb250aCkgfHxcbiAgICAgICAgIU51bWJlci5pc0ludGVnZXIoZGF5KSB8fFxuICAgICAgICBtb250aCA8IDEgfHxcbiAgICAgICAgbW9udGggPiAxMiB8fFxuICAgICAgICBkYXkgPCAxIHx8XG4gICAgICAgIGRheSA+IDMxXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsOyAvLyBVbnN1cHBvcnRlZCBpbnB1dCB0eXBlXG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGEgRGF0ZSBvYmplY3QgKG1vbnRoIGlzIDAtYmFzZWQsIHNvIHN1YnRyYWN0IDEpXG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoIC0gMSwgZGF5KTtcblxuICAgIC8vIFZlcmlmeSBpZiB0aGUgRGF0ZSBvYmplY3QgbWF0Y2hlcyB0aGUgcHJvdmlkZWQgeWVhciwgbW9udGgsIGFuZCBkYXlcbiAgICBpZiAoXG4gICAgICBkYXRlLmdldEZ1bGxZZWFyKCkgIT09IHllYXIgfHxcbiAgICAgIGRhdGUuZ2V0TW9udGgoKSAhPT0gbW9udGggLSAxIHx8XG4gICAgICBkYXRlLmdldERhdGUoKSAhPT0gZGF5XG4gICAgKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0ZTtcbiAgfVxuXG59XG4iLCI8ZGl2IFtuZ0NsYXNzXT1cIidjb2wtJyArIGNvdW50XCIgY2xhc3M9XCJtYi01IHB4LTNcIj5cbiAgPGRpdiBjbGFzcz1cImlucHV0LXdyYXBwZXIgbWItMlwiPlxuICAgIDxkaXYgW2lubmVySFRNTF09XCJxdWVzdGlvbi5xdWVzdGlvbk51bWJlclwiPjwvZGl2PlxuICAgICZuYnNwOyZuYnNwOyA8bGFiZWw+e3sgcXVlc3Rpb24ucXVlc3Rpb24gfX08L2xhYmVsXG4gICAgPiZuYnNwO1xuICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cInJlcXVpcmVkXCI+Kjwvc3Bhbj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInN2Zy13cmFwcGVyIG1iLTIgaGludEljb25cIlxuICAgICAgW2F0dHIuZGF0YS10aXRsZV09XCJoaW50XCJcbiAgICAgICpuZ0lmPVwiaGludFwiXG4gICAgPlxuICAgICAgPHN2Z1xuICAgICAgICBjbGFzcz1cImhpbnRTdmdcIlxuICAgICAgICB2aWV3Qm94PVwiMCAwIDMwIDMwXCJcbiAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICA+XG4gICAgICAgIDxwYXRoXG4gICAgICAgICAgZmlsbC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgY2xpcC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgZD1cIk0xNSAyNi4yNVYyNi4yNUM4Ljc4NjI1IDI2LjI1IDMuNzUgMjEuMjEzOCAzLjc1IDE1VjE1QzMuNzUgOC43ODYyNSA4Ljc4NjI1IDMuNzUgMTUgMy43NVYzLjc1QzIxLjIxMzggMy43NSAyNi4yNSA4Ljc4NjI1IDI2LjI1IDE1VjE1QzI2LjI1IDIxLjIxMzggMjEuMjEzOCAyNi4yNSAxNSAyNi4yNVpcIlxuICAgICAgICAgIHN0cm9rZT1cIiMzMjMyMzJcIlxuICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNVwiXG4gICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAvPlxuICAgICAgICA8cGF0aFxuICAgICAgICAgIGQ9XCJNMTUgMTYuNTYyM1YxNi4yNDk4QzE1IDE1LjIyODUgMTUuNjMxMiAxNC42NzQ4IDE2LjI2MzcgMTQuMjQ5OEMxNi44ODEyIDEzLjgzMzUgMTcuNSAxMy4yOTEgMTcuNSAxMi4yOTFDMTcuNSAxMC45MDk4IDE2LjM4MTMgOS43OTEwMiAxNSA5Ljc5MTAyQzEzLjYxODcgOS43OTEwMiAxMi41IDEwLjkwOTggMTIuNSAxMi4yOTFcIlxuICAgICAgICAgIHN0cm9rZT1cIiMzMjMyMzJcIlxuICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNVwiXG4gICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAvPlxuICAgICAgICA8cGF0aFxuICAgICAgICAgIGQ9XCJNMTQuOTk4OCAyMEMxNC44MjYzIDIwIDE0LjY4NjMgMjAuMTQgMTQuNjg3NSAyMC4zMTI1QzE0LjY4NzUgMjAuNDg1IDE0LjgyNzUgMjAuNjI1IDE1IDIwLjYyNUMxNS4xNzI1IDIwLjYyNSAxNS4zMTI1IDIwLjQ4NSAxNS4zMTI1IDIwLjMxMjVDMTUuMzEyNSAyMC4xNCAxNS4xNzI1IDIwIDE0Ljk5ODggMjBcIlxuICAgICAgICAgIHN0cm9rZT1cIiMzMjMyMzJcIlxuICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNVwiXG4gICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAvPlxuICAgICAgPC9zdmc+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0ZVR5cGUgPT09ICdEQVRFX09OTFknXCI+XG4gICAgPCEtLSBEYXRlIG9ubHkgcGlja2VyIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1jb250YWluZXJcIj5cbiAgICAgIDxpbnB1dFxuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBoZWlnaHRcIlxuICAgICAgICAjZGF0ZXBpY2tlcllNRD1cImJzRGF0ZXBpY2tlclwiXG4gICAgICAgIGJzRGF0ZXBpY2tlclxuICAgICAgICBbbWluRGF0ZV09XCJtaW5EYXRlID8gbWluRGF0ZSA6IHVuZGVmaW5lZFwiXG4gICAgICAgIFttYXhEYXRlXT1cIm1heERhdGUgPyBtYXhEYXRlIDogdW5kZWZpbmVkXCJcbiAgICAgICAgW2JzQ29uZmlnXT1cInsgZGF0ZUlucHV0Rm9ybWF0OiBmb3JtYXQgfVwiXG4gICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWREYXRlXCJcbiAgICAgICAgKGJsdXIpPVwidmFsaWRhdGVGaWVsZCgpXCJcbiAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidmFsaWRhdGVGaWVsZCgpXCJcbiAgICAgICAgW2NsYXNzLmludmFsaWRdPVwidmFsaWRhdGlvbkZhaWxlZFwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IGRhdGVcIlxuICAgICAgLz5cbiAgICAgIDxpXG4gICAgICAgIGNsYXNzPVwiZmEtc29saWQgZmEtY2FsZW5kYXItZGF5cyBjYWxlbmRhci1pY29uIHRleHQtcHJpbWFyeSBmcy01XCJcbiAgICAgICAgKGNsaWNrKT1cIm9wZW5EYXRlUGlja2VyKClcIlxuICAgICAgPjwvaT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwidmFsaWRhdGlvbkZhaWxlZFwiIGNsYXNzPVwidGV4dC1kYW5nZXIgbXQtMlwiPlxuICAgICAgPHN2Z1xuICAgICAgICBjbGFzcz1cInZhbGlkYXRpb25TdmdcIlxuICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcbiAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICA+XG4gICAgICAgIDxwYXRoXG4gICAgICAgICAgZD1cIk0xMi4wMDEgMTYuNzVDMTIuMTM5IDE2Ljc1IDEyLjI1MSAxNi42MzggMTIuMjUgMTYuNUMxMi4yNSAxNi4zNjIgMTIuMTM4IDE2LjI1IDEyIDE2LjI1QzExLjg2MiAxNi4yNSAxMS43NSAxNi4zNjIgMTEuNzUgMTYuNUMxMS43NSAxNi42MzggMTEuODYyIDE2Ljc1IDEyLjAwMSAxNi43NVwiXG4gICAgICAgICAgc3Ryb2tlPVwid2hpdGVcIlxuICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNVwiXG4gICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAvPlxuICAgICAgICA8cGF0aFxuICAgICAgICAgIGZpbGwtcnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgIGNsaXAtcnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgIGQ9XCJNMTIgMjFDNy4wMjkgMjEgMyAxNi45NzEgMyAxMkMzIDcuMDI5IDcuMDI5IDMgMTIgM0MxNi45NzEgMyAyMSA3LjAyOSAyMSAxMkMyMSAxNi45NzEgMTYuOTcxIDIxIDEyIDIxWlwiXG4gICAgICAgICAgZmlsbD1cIiNGRjAwMDBcIlxuICAgICAgICAgIHN0cm9rZT1cIiNGRjAwMDBcIlxuICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNVwiXG4gICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAvPlxuICAgICAgICA8cGF0aFxuICAgICAgICAgIGQ9XCJNMTIgMTIuNzVMMTIgNy43NVwiXG4gICAgICAgICAgc3Ryb2tlPVwid2hpdGVcIlxuICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNVwiXG4gICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAvPlxuICAgICAgICA8Y2lyY2xlIGN4PVwiMTJcIiBjeT1cIjE2XCIgcj1cIjFcIiBmaWxsPVwid2hpdGVcIiAvPlxuICAgICAgPC9zdmc+XG4gICAgICB7eyB2YWxpZGF0aW9uTWVzc2FnZSB9fVxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0ZVR5cGUgPT09ICdUSU1FX09OTFknXCI+XG4gICAgPCEtLSBUaW1lIHBpY2tlciAtLT5cblxuXG48ZGl2IGNsYXNzPVwiaW5wdXQtY29udGFpbmVyXCI+XG4gICAgICA8aW5wdXRcbiAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGhlaWdodCBhcHBlYXJhbmNlSW5wdXQgbXQtM1wiXG4gICAgICBhcmlhLWxhYmVsPVwiU2VsZWN0IHRpbWVcIlxuICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgdGltZVwiXG4gICAgICByZWFkb25seVxuICAgICAgW2Zvcm1hdF09XCJ0aW1lRm9ybWF0PT09JzI0Jz8yNDoxMlwiXG4gICAgICBbbmd4VGltZXBpY2tlcl09XCJmdWxsVGltZTNcIlxuICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFRpbWVcIlxuICAgICAgW21heF09XCJtYXhUaW1lXCJcbiAgICAgIFttaW5dPVwibWluVGltZVwiXG4gICAgICAobmdNb2RlbENoYW5nZSk9XCJ2YWxpZGF0ZUZpZWxkKClcIlxuICAgICAgW2NsYXNzLmludmFsaWRdPVwidmFsaWRhdGlvbkZhaWxlZFwiXG4gIC8+XG4gIFxuICA8aVxuICBpZD1cInN0YXJ0RGF0ZUljb25cIlxuICBjbGFzcz1cImZhLXNvbGlkIGZhLWNsb2NrIHRleHQtcHJpbWFyeSBmcy02IGNsb2NrLWljb25cIlxuICAoY2xpY2spPVwiZnVsbFRpbWUzLm9wZW4oKVwiXG4gIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyO1wiXG4+PC9pPlxuICA8bmd4LW1hdGVyaWFsLXRpbWVwaWNrZXIgI2Z1bGxUaW1lMz48L25neC1tYXRlcmlhbC10aW1lcGlja2VyPlxuPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cInZhbGlkYXRpb25GYWlsZWRcIiBjbGFzcz1cInRleHQtZGFuZ2VyIG10LTJcIj5cbiAgICAgIDxzdmdcbiAgICAgICAgY2xhc3M9XCJ2YWxpZGF0aW9uU3ZnXCJcbiAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiXG4gICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgPlxuICAgICAgICA8cGF0aFxuICAgICAgICAgIGQ9XCJNMTIuMDAxIDE2Ljc1QzEyLjEzOSAxNi43NSAxMi4yNTEgMTYuNjM4IDEyLjI1IDE2LjVDMTIuMjUgMTYuMzYyIDEyLjEzOCAxNi4yNSAxMiAxNi4yNUMxMS44NjIgMTYuMjUgMTEuNzUgMTYuMzYyIDExLjc1IDE2LjVDMTEuNzUgMTYuNjM4IDExLjg2MiAxNi43NSAxMi4wMDEgMTYuNzVcIlxuICAgICAgICAgIHN0cm9rZT1cIndoaXRlXCJcbiAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjVcIlxuICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgLz5cbiAgICAgICAgPHBhdGhcbiAgICAgICAgICBmaWxsLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICBjbGlwLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICBkPVwiTTEyIDIxQzcuMDI5IDIxIDMgMTYuOTcxIDMgMTJDMyA3LjAyOSA3LjAyOSAzIDEyIDNDMTYuOTcxIDMgMjEgNy4wMjkgMjEgMTJDMjEgMTYuOTcxIDE2Ljk3MSAyMSAxMiAyMVpcIlxuICAgICAgICAgIGZpbGw9XCIjRkYwMDAwXCJcbiAgICAgICAgICBzdHJva2U9XCIjRkYwMDAwXCJcbiAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjVcIlxuICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgLz5cbiAgICAgICAgPHBhdGhcbiAgICAgICAgICBkPVwiTTEyIDEyLjc1TDEyIDcuNzVcIlxuICAgICAgICAgIHN0cm9rZT1cIndoaXRlXCJcbiAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjVcIlxuICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgLz5cbiAgICAgICAgPGNpcmNsZSBjeD1cIjEyXCIgY3k9XCIxNlwiIHI9XCIxXCIgZmlsbD1cIndoaXRlXCIgLz5cbiAgICAgIDwvc3ZnPlxuICAgICAge3sgdmFsaWRhdGlvbk1lc3NhZ2UgfX1cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRhdGVUeXBlID09PSAnREFURV9BTkRfVElNRSdcIj5cbiAgICA8IS0tIERhdGUgYW5kIHRpbWUgcGlja2VyIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1jb250YWluZXJcIj5cbiAgICAgIDxpbnB1dFxuICAgICAgICAjZGF0ZUFuZFRpbWVQaWNrZXI9XCJic0RhdGVwaWNrZXJcIlxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGhlaWdodFwiXG4gICAgICAgIFttaW5EYXRlXT1cIm1pbkRhdGUgPyBtaW5EYXRlIDogdW5kZWZpbmVkXCJcbiAgICAgICAgW21heERhdGVdPVwibWF4RGF0ZSA/IG1heERhdGUgOiB1bmRlZmluZWRcIlxuICAgICAgICBbYnNDb25maWddPVwie1xuICAgICAgICAgIGRhdGVJbnB1dEZvcm1hdDogZm9ybWF0XG4gICAgICAgIH1cIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBkYXRlXCJcbiAgICAgICAgYnNEYXRlcGlja2VyXG4gICAgICAgIFtjbGFzcy5pbnZhbGlkXT1cInZhbGlkYXRpb25GYWlsZWRcIlxuICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkRGF0ZUFuZFRpbWVcIlxuICAgICAgICAoYmx1cik9XCJ2YWxpZGF0ZUZpZWxkKClcIlxuICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ2YWxpZGF0ZUZpZWxkKClcIlxuICAgICAgLz5cbiAgICAgIDxpXG4gICAgICAgIGNsYXNzPVwiZmEtc29saWQgZmEtY2FsZW5kYXItZGF5cyBjYWxlbmRhci1pY29uIHRleHQtcHJpbWFyeSBmcy01XCJcbiAgICAgICAgKGNsaWNrKT1cIm9wZW5EYXRlQW5kVGltZVBpY2tlcigpXCJcbiAgICAgID48L2k+XG4gICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtY29udGFpbmVyXCIgKm5nSWY9XCJzZWxlY3RlZERhdGVBbmRUaW1lICYmIHNlbGVjdGVkRGF0ZUFuZFRpbWUgIT0gbnVsbFwiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgXG4gICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGhlaWdodCBhcHBlYXJhbmNlSW5wdXQgbXQtM1wiXG4gICAgICAgIGFyaWEtbGFiZWw9XCJTZWxlY3QgdGltZVwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IHRpbWVcIlxuICAgICAgICByZWFkb25seVxuICAgICAgICBbZm9ybWF0XT1cInRpbWVGb3JtYXQ9PT0nMjQnPzI0OjEyXCJcbiAgICAgICAgW25neFRpbWVwaWNrZXJdPVwiZnVsbFRpbWU0XCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFRpbWVcIlxuICAgICAgICBbbWF4XT1cIm1heFRpbWVcIlxuICAgICAgICBbbWluXT1cIm1pblRpbWVcIlxuICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ2YWxpZGF0ZUZpZWxkKClcIlxuICAgICAgICBbY2xhc3MuaW52YWxpZF09XCJ0aW1lVmFsaWRhdGlvbkZhaWxlZFwiXG4gICAgLz5cbiAgICBcbiAgICA8aVxuICAgIGlkPVwic3RhcnREYXRlSWNvblwiXG4gICAgY2xhc3M9XCJmYS1zb2xpZCBmYS1jbG9jayB0ZXh0LXByaW1hcnkgZnMtNiBjbG9jay1pY29uXCJcbiAgICAoY2xpY2spPVwiZnVsbFRpbWU0Lm9wZW4oKVwiXG4gICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXI7XCJcbiAgPjwvaT5cbiAgICA8bmd4LW1hdGVyaWFsLXRpbWVwaWNrZXIgI2Z1bGxUaW1lND48L25neC1tYXRlcmlhbC10aW1lcGlja2VyPlxuICA8L2Rpdj5cbiAgIFxuICAgIDxkaXYgKm5nSWY9XCJ2YWxpZGF0aW9uRmFpbGVkIHx8IHRpbWVWYWxpZGF0aW9uRmFpbGVkXCIgY2xhc3M9XCJ0ZXh0LWRhbmdlciBtdC0yXCI+XG4gICAgICA8c3ZnXG4gICAgICAgIGNsYXNzPVwidmFsaWRhdGlvblN2Z1wiXG4gICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxuICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgID5cbiAgICAgICAgPHBhdGhcbiAgICAgICAgICBkPVwiTTEyLjAwMSAxNi43NUMxMi4xMzkgMTYuNzUgMTIuMjUxIDE2LjYzOCAxMi4yNSAxNi41QzEyLjI1IDE2LjM2MiAxMi4xMzggMTYuMjUgMTIgMTYuMjVDMTEuODYyIDE2LjI1IDExLjc1IDE2LjM2MiAxMS43NSAxNi41QzExLjc1IDE2LjYzOCAxMS44NjIgMTYuNzUgMTIuMDAxIDE2Ljc1XCJcbiAgICAgICAgICBzdHJva2U9XCJ3aGl0ZVwiXG4gICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgIC8+XG4gICAgICAgIDxwYXRoXG4gICAgICAgICAgZmlsbC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgY2xpcC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgZD1cIk0xMiAyMUM3LjAyOSAyMSAzIDE2Ljk3MSAzIDEyQzMgNy4wMjkgNy4wMjkgMyAxMiAzQzE2Ljk3MSAzIDIxIDcuMDI5IDIxIDEyQzIxIDE2Ljk3MSAxNi45NzEgMjEgMTIgMjFaXCJcbiAgICAgICAgICBmaWxsPVwiI0ZGMDAwMFwiXG4gICAgICAgICAgc3Ryb2tlPVwiI0ZGMDAwMFwiXG4gICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgIC8+XG4gICAgICAgIDxwYXRoXG4gICAgICAgICAgZD1cIk0xMiAxMi43NUwxMiA3Ljc1XCJcbiAgICAgICAgICBzdHJva2U9XCJ3aGl0ZVwiXG4gICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgIC8+XG4gICAgICAgIDxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTZcIiByPVwiMVwiIGZpbGw9XCJ3aGl0ZVwiIC8+XG4gICAgICA8L3N2Zz5cbiAgICAgIHt7IHZhbGlkYXRpb25NZXNzYWdlIH19XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRlVHlwZSA9PT0gJ0RBVEVfUkFOR0UnXCI+XG4gICAgPCEtLSBEYXRlIHJhbmdlIHBpY2tlciAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtY29udGFpbmVyXCI+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBoZWlnaHRcIlxuICAgICAgICAjZGF0ZXJhbmdlcGlja2VyPVwiYnNEYXRlcmFuZ2VwaWNrZXJcIlxuICAgICAgICBic0RhdGVyYW5nZXBpY2tlclxuICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBkYXRlXCJcbiAgICAgICAgW21pbkRhdGVdPVwibWluRGF0ZSA/IG1pbkRhdGUgOiB1bmRlZmluZWRcIlxuICAgICAgICBbbWF4RGF0ZV09XCJtYXhEYXRlID8gbWF4RGF0ZSA6IHVuZGVmaW5lZFwiXG4gICAgICAgIFtic0NvbmZpZ109XCJ7XG4gICAgICAgICAgcmFuZ2VJbnB1dEZvcm1hdDogZm9ybWF0LFxuICAgICAgICAgIGRhdGVJbnB1dEZvcm1hdDogZm9ybWF0LFxuICAgICAgICB9XCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZERhdGVSYW5nZVwiXG4gICAgICAgIChibHVyKT1cInZhbGlkYXRlRmllbGQoKVwiXG4gICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInZhbGlkYXRlRmllbGQoKVwiXG4gICAgICAgIFtjbGFzcy5pbnZhbGlkXT1cInZhbGlkYXRpb25GYWlsZWRcIlxuICAgICAgLz5cbiAgICAgIDxpXG4gICAgICAgIGNsYXNzPVwiZmEtc29saWQgZmEtY2FsZW5kYXItZGF5cyBjYWxlbmRhci1pY29uIHRleHQtcHJpbWFyeSBmcy01XCJcbiAgICAgICAgKGNsaWNrKT1cIm9wZW5EYXRlUmFuZ2VQaWNrZXIoKVwiXG4gICAgICA+PC9pPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJ2YWxpZGF0aW9uRmFpbGVkXCIgY2xhc3M9XCJ0ZXh0LWRhbmdlciBtdC0yXCI+XG4gICAgICA8c3ZnXG4gICAgICAgIGNsYXNzPVwidmFsaWRhdGlvblN2Z1wiXG4gICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxuICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgID5cbiAgICAgICAgPHBhdGhcbiAgICAgICAgICBkPVwiTTEyLjAwMSAxNi43NUMxMi4xMzkgMTYuNzUgMTIuMjUxIDE2LjYzOCAxMi4yNSAxNi41QzEyLjI1IDE2LjM2MiAxMi4xMzggMTYuMjUgMTIgMTYuMjVDMTEuODYyIDE2LjI1IDExLjc1IDE2LjM2MiAxMS43NSAxNi41QzExLjc1IDE2LjYzOCAxMS44NjIgMTYuNzUgMTIuMDAxIDE2Ljc1XCJcbiAgICAgICAgICBzdHJva2U9XCJ3aGl0ZVwiXG4gICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgIC8+XG4gICAgICAgIDxwYXRoXG4gICAgICAgICAgZmlsbC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgY2xpcC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgZD1cIk0xMiAyMUM3LjAyOSAyMSAzIDE2Ljk3MSAzIDEyQzMgNy4wMjkgNy4wMjkgMyAxMiAzQzE2Ljk3MSAzIDIxIDcuMDI5IDIxIDEyQzIxIDE2Ljk3MSAxNi45NzEgMjEgMTIgMjFaXCJcbiAgICAgICAgICBmaWxsPVwiI0ZGMDAwMFwiXG4gICAgICAgICAgc3Ryb2tlPVwiI0ZGMDAwMFwiXG4gICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgIC8+XG4gICAgICAgIDxwYXRoXG4gICAgICAgICAgZD1cIk0xMiAxMi43NUwxMiA3Ljc1XCJcbiAgICAgICAgICBzdHJva2U9XCJ3aGl0ZVwiXG4gICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgIC8+XG4gICAgICAgIDxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTZcIiByPVwiMVwiIGZpbGw9XCJ3aGl0ZVwiIC8+XG4gICAgICA8L3N2Zz5cbiAgICAgIHt7IHZhbGlkYXRpb25NZXNzYWdlIH19XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG4iXX0=
|