barsa-calendar 2.1.1 → 2.1.2
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/fesm2022/barsa-calendar.mjs +26 -21
- package/fesm2022/barsa-calendar.mjs.map +1 -1
- package/package.json +3 -5
- package/esm2022/barsa-calendar.mjs +0 -5
- package/esm2022/lib/barsa-calendar.module.mjs +0 -117
- package/esm2022/lib/calendar-container/calendar-container.component.mjs +0 -230
- package/esm2022/lib/calendar-header/calendar-header.component.mjs +0 -66
- package/esm2022/lib/calendar-list/calendar-list.component.mjs +0 -18
- package/esm2022/lib/calendar-list-container/calendar-list-container.component.mjs +0 -29
- package/esm2022/lib/calendar-list-item/calendar-list-item.component.mjs +0 -14
- package/esm2022/lib/calendar-month/calendar-month.component.mjs +0 -249
- package/esm2022/lib/calendar-selection-days/calendar-selection-days.component.mjs +0 -196
- package/esm2022/lib/calendar-week/calendar-week.component.mjs +0 -255
- package/esm2022/lib/constants.mjs +0 -4
- package/esm2022/lib/date-time-picker/date-time-picker.component.mjs +0 -457
- package/esm2022/lib/day-event-list/day-event-list.component.mjs +0 -58
- package/esm2022/lib/day-number-box/day-number-box.component.mjs +0 -105
- package/esm2022/lib/days-in-week.pipe.mjs +0 -17
- package/esm2022/lib/equal-date.pipe.mjs +0 -23
- package/esm2022/lib/event-button/event-button.component.mjs +0 -100
- package/esm2022/lib/event-button-end-arrow/event-button-end-arrow.component.mjs +0 -29
- package/esm2022/lib/event-button-start-arrow/event-button-start-arrow.component.mjs +0 -29
- package/esm2022/lib/event-date.pipe.mjs +0 -24
- package/esm2022/lib/event-preview/event-preview.component.mjs +0 -81
- package/esm2022/lib/event-time.pipe.mjs +0 -22
- package/esm2022/lib/from-to-time.pipe.mjs +0 -23
- package/esm2022/lib/models.mjs +0 -14
- package/esm2022/lib/month-days/month-days.component.mjs +0 -222
- package/esm2022/lib/services/calendar.service.mjs +0 -645
- package/esm2022/public-api.mjs +0 -23
|
@@ -1,457 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, EventEmitter, Injectable, Input, Output, ViewChild } from '@angular/core';
|
|
2
|
-
import { distinctUntilChanged, map } from 'rxjs/operators';
|
|
3
|
-
import { BaseComponent, DateService, getDateService, BarsaApi } from 'barsa-novin-ray-core';
|
|
4
|
-
import { CalendarService } from '../services/calendar.service';
|
|
5
|
-
import { DatetimeAdapter, FdDate, FdDatetimeAdapter, InputGroupComponent, TimeComponent } from '@fundamental-ngx/core';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
import * as i1 from "barsa-novin-ray-core";
|
|
8
|
-
import * as i2 from "@fundamental-ngx/core";
|
|
9
|
-
import * as i3 from "@angular/common";
|
|
10
|
-
import * as i4 from "@angular/forms";
|
|
11
|
-
import * as i5 from "@fundamental-ngx/core/bar";
|
|
12
|
-
import * as i6 from "@fundamental-ngx/core/content-density";
|
|
13
|
-
import * as i7 from "@fundamental-ngx/core/button";
|
|
14
|
-
import * as i8 from "@fundamental-ngx/core/form";
|
|
15
|
-
import * as i9 from "@fundamental-ngx/core/input-group";
|
|
16
|
-
import * as i10 from "@fundamental-ngx/core/dialog";
|
|
17
|
-
import * as i11 from "@fundamental-ngx/core/title";
|
|
18
|
-
import * as i12 from "@fundamental-ngx/core/popover";
|
|
19
|
-
import * as i13 from "@fundamental-ngx/core/time";
|
|
20
|
-
import * as i14 from "@fundamental-ngx/core/toolbar";
|
|
21
|
-
import * as i15 from "../calendar-month/calendar-month.component";
|
|
22
|
-
import * as i16 from "../calendar-selection-days/calendar-selection-days.component";
|
|
23
|
-
export class TimeConfigI18n {
|
|
24
|
-
constructor(_bbbTranslate) {
|
|
25
|
-
this._bbbTranslate = _bbbTranslate;
|
|
26
|
-
/** Aria label for the 'increase hours' button */
|
|
27
|
-
this.increaseHoursLabel = 'Increase hours';
|
|
28
|
-
/** label for the 'hours' column */
|
|
29
|
-
this.hoursLabel = this._bbbTranslate.transform('Hours');
|
|
30
|
-
/** Aria label for the 'decrease hours' button */
|
|
31
|
-
this.decreaseHoursLabel = 'Decrease hours';
|
|
32
|
-
/** Aria label for the 'increase minutes' button */
|
|
33
|
-
this.increaseMinutesLabel = 'Increase minutes';
|
|
34
|
-
/** label for the 'minutes' column */
|
|
35
|
-
this.minutesLabel = this._bbbTranslate.transform('Minutes');
|
|
36
|
-
/** Aria label for the 'decrease minutes' button */
|
|
37
|
-
this.decreaseMinutesLabel = 'Decrease minutes';
|
|
38
|
-
/** Aria label for the 'increase seconds' button */
|
|
39
|
-
this.increaseSecondsLabel = 'Increase seconds';
|
|
40
|
-
/** label for the 'seconds' column */
|
|
41
|
-
this.secondsLabel = this._bbbTranslate.transform('Sec');
|
|
42
|
-
/** Aria label for the 'decrease seconds' button */
|
|
43
|
-
this.decreaseSecondsLabel = 'Decrease seconds';
|
|
44
|
-
/** Aria label for the 'increase period' button */
|
|
45
|
-
this.increasePeriodLabel = 'Increase period';
|
|
46
|
-
/** label for the 'period' column */
|
|
47
|
-
this.periodLabel = 'Period';
|
|
48
|
-
/** Aria label for the 'decrease period' button */
|
|
49
|
-
this.decreasePeriodLabel = 'Decrease period';
|
|
50
|
-
}
|
|
51
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TimeConfigI18n, deps: [{ token: i1.BbbTranslatePipe }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
52
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TimeConfigI18n }); }
|
|
53
|
-
}
|
|
54
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TimeConfigI18n, decorators: [{
|
|
55
|
-
type: Injectable
|
|
56
|
-
}], ctorParameters: () => [{ type: i1.BbbTranslatePipe }] });
|
|
57
|
-
export class DateTimePickerComponent extends BaseComponent {
|
|
58
|
-
constructor(_datetimeAdapter, _dateTimeToCaption, _logService, _dialogService, _portalService) {
|
|
59
|
-
super();
|
|
60
|
-
this._datetimeAdapter = _datetimeAdapter;
|
|
61
|
-
this._dateTimeToCaption = _dateTimeToCaption;
|
|
62
|
-
this._logService = _logService;
|
|
63
|
-
this._dialogService = _dialogService;
|
|
64
|
-
this.rtl = true;
|
|
65
|
-
this.rangeChange = new EventEmitter();
|
|
66
|
-
this.valueChange = new EventEmitter();
|
|
67
|
-
this.valueCaption = '';
|
|
68
|
-
this.selectionMode = 'day';
|
|
69
|
-
this.todayIndex = -1;
|
|
70
|
-
this.isValid = true;
|
|
71
|
-
this.months = [];
|
|
72
|
-
this.tempFormmatedDate = '';
|
|
73
|
-
this.rtl$ = _portalService.rtl$;
|
|
74
|
-
this.width$ = _portalService.deviceSize$.pipe(distinctUntilChanged(), map((deviceSize) => {
|
|
75
|
-
if (!this.showDate) {
|
|
76
|
-
return 260;
|
|
77
|
-
}
|
|
78
|
-
switch (deviceSize) {
|
|
79
|
-
case 'l':
|
|
80
|
-
case 'xl':
|
|
81
|
-
return 560;
|
|
82
|
-
case 's':
|
|
83
|
-
return 320;
|
|
84
|
-
default:
|
|
85
|
-
return 520;
|
|
86
|
-
}
|
|
87
|
-
}));
|
|
88
|
-
this.height = 420;
|
|
89
|
-
}
|
|
90
|
-
ngOnInit() {
|
|
91
|
-
super.ngOnInit();
|
|
92
|
-
let culture = 'en-US';
|
|
93
|
-
switch (this.primaryCalendarType) {
|
|
94
|
-
case 'HijriShamsi':
|
|
95
|
-
culture = 'fa-IR';
|
|
96
|
-
break;
|
|
97
|
-
}
|
|
98
|
-
this.culture = culture;
|
|
99
|
-
this._calendarService = new CalendarService(this._logService, culture);
|
|
100
|
-
this._calendarService.setMode('month');
|
|
101
|
-
this.weekDaysMin = this._calendarService.weekDaysMin();
|
|
102
|
-
this.weekDays = this._calendarService.weekDays();
|
|
103
|
-
this.selectedMonth$ = this._calendarService.selected$;
|
|
104
|
-
this.today = this._calendarService.today;
|
|
105
|
-
if (this.value) {
|
|
106
|
-
this.timeValue = FdDate.getFdDateByDate(this.value);
|
|
107
|
-
this._setCaption(this.value);
|
|
108
|
-
this._calendarService.loadMonthByDate(this.value);
|
|
109
|
-
}
|
|
110
|
-
else {
|
|
111
|
-
this.timeValue = FdDate.getFdDateByDate(new Date());
|
|
112
|
-
}
|
|
113
|
-
// if (this.isRangePicker) {
|
|
114
|
-
// if (this.startRangeDate) {
|
|
115
|
-
// this._calendarService.loadMonthByDate(this.startRangeDate);
|
|
116
|
-
// }
|
|
117
|
-
// if (this.endRangeDate) {
|
|
118
|
-
// }
|
|
119
|
-
// } else {
|
|
120
|
-
// this._calendarService.loadMonthByDate(this.value);
|
|
121
|
-
// }
|
|
122
|
-
this.months = this._calendarService.Months;
|
|
123
|
-
this._prepareYear(this._calendarService.selectedMonth.dateInfo.year);
|
|
124
|
-
this._setFormattedDateToInput(this.value);
|
|
125
|
-
if (this.inputGroupComponent) {
|
|
126
|
-
this.inputGroupComponent._cva.onChange = this.onCaptionChanged.bind(this);
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
onHourTextChange(e) {
|
|
130
|
-
const val = Number(e.target.value);
|
|
131
|
-
if (isNaN(val)) {
|
|
132
|
-
return;
|
|
133
|
-
}
|
|
134
|
-
this.timeValue = new FdDate(this.timeValue.year, this.timeValue.month, this.timeValue.day, val, this.timeValue.minute, this.timeValue.second);
|
|
135
|
-
}
|
|
136
|
-
onMinuteTextChange(e) {
|
|
137
|
-
const val = Number(e.target.value);
|
|
138
|
-
if (isNaN(val)) {
|
|
139
|
-
return;
|
|
140
|
-
}
|
|
141
|
-
this.timeValue = new FdDate(this.timeValue.year, this.timeValue.month, this.timeValue.day, this.timeValue.hour, val, this.timeValue.second);
|
|
142
|
-
}
|
|
143
|
-
ngOnChanges(changes) {
|
|
144
|
-
const { value } = changes;
|
|
145
|
-
if (value && !value.firstChange) {
|
|
146
|
-
const caption = this._getFormattedDate(value.currentValue);
|
|
147
|
-
if (caption !== this.inputGroupComponent?.inputText) {
|
|
148
|
-
this._setFormattedDateToInput(this.value);
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
onRangeChange(e) {
|
|
153
|
-
this.rangeChange.emit({
|
|
154
|
-
startDay: e.startDay,
|
|
155
|
-
endDay: e.endDay
|
|
156
|
-
});
|
|
157
|
-
}
|
|
158
|
-
onOpenPopover(popover, dialogTemplate) {
|
|
159
|
-
if (this.readonly || this.disabled) {
|
|
160
|
-
return;
|
|
161
|
-
}
|
|
162
|
-
if (this.timeComponent) {
|
|
163
|
-
setTimeout(() => this.timeComponent.refreshColumns(), 0);
|
|
164
|
-
}
|
|
165
|
-
if (this.deviceSize === 's' || this.isMobile) {
|
|
166
|
-
this._dialogService.open(dialogTemplate, {
|
|
167
|
-
mobile: true
|
|
168
|
-
});
|
|
169
|
-
return;
|
|
170
|
-
}
|
|
171
|
-
popover.open();
|
|
172
|
-
}
|
|
173
|
-
onMonthSelected(monthName, index) {
|
|
174
|
-
this._calendarService.gotoMonth(monthName, index);
|
|
175
|
-
}
|
|
176
|
-
onYearSelected(year) {
|
|
177
|
-
this._calendarService.gotoYear(+year);
|
|
178
|
-
}
|
|
179
|
-
onCaptionChanged(e) {
|
|
180
|
-
if (e.length < 10 && this.showDate) {
|
|
181
|
-
if (e.length === 0) {
|
|
182
|
-
this._raisValueChanged(undefined);
|
|
183
|
-
return;
|
|
184
|
-
}
|
|
185
|
-
this.isValid = false;
|
|
186
|
-
return;
|
|
187
|
-
}
|
|
188
|
-
const englishDateStr = BarsaApi.Common.Util.ReplaceFaToArCharchter(e);
|
|
189
|
-
let format = 'jYYYY/jM/jD';
|
|
190
|
-
if (this.showTime) {
|
|
191
|
-
if (this.showDate) {
|
|
192
|
-
format += ' HH:mm';
|
|
193
|
-
}
|
|
194
|
-
else {
|
|
195
|
-
format = 'HH:mm';
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
const moment = this._calendarService._dateService.stringToMoment(englishDateStr, format);
|
|
199
|
-
// const isValid = moment.isValid();// برای شمسی همیشه false نشون میده
|
|
200
|
-
if (this.showDate && isNaN(Date.parse(englishDateStr))) {
|
|
201
|
-
this.isValid = false;
|
|
202
|
-
return;
|
|
203
|
-
}
|
|
204
|
-
const tdate = new Date();
|
|
205
|
-
const date = moment.toDate();
|
|
206
|
-
if (date.getFullYear() < tdate.getFullYear() && !this.showDate) {
|
|
207
|
-
date.setFullYear(tdate.getFullYear());
|
|
208
|
-
date.setMonth(tdate.getMonth());
|
|
209
|
-
date.setDate(tdate.getDate());
|
|
210
|
-
}
|
|
211
|
-
if (isNaN(date)) {
|
|
212
|
-
this.isValid = false;
|
|
213
|
-
return;
|
|
214
|
-
}
|
|
215
|
-
this.isValid = true;
|
|
216
|
-
this.timeValue = this._datetimeAdapter.setTime(this.timeValue, date.getHours(), date.getMinutes(), date.getSeconds());
|
|
217
|
-
this.startSelectedDay = this.endSelectedDay = null;
|
|
218
|
-
this._raisValueChanged(date, false);
|
|
219
|
-
}
|
|
220
|
-
onPrevTap() {
|
|
221
|
-
if (this.selectionMode === 'day') {
|
|
222
|
-
this._calendarService.loadPrevious();
|
|
223
|
-
}
|
|
224
|
-
else if (this.selectionMode === 'month') {
|
|
225
|
-
this._calendarService.loadPrevYear();
|
|
226
|
-
}
|
|
227
|
-
else if (this.selectionMode === 'year') {
|
|
228
|
-
this._prepareYear(Number(this.years[0]) - 20);
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
onNextTap() {
|
|
232
|
-
if (this.selectionMode === 'day') {
|
|
233
|
-
this._calendarService.loadNext();
|
|
234
|
-
}
|
|
235
|
-
else if (this.selectionMode === 'month') {
|
|
236
|
-
this._calendarService.loadNextYear();
|
|
237
|
-
}
|
|
238
|
-
else if (this.selectionMode === 'year') {
|
|
239
|
-
this._prepareYear(Number(this.years[this.years.length - 1]) + 1);
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
onToday() {
|
|
243
|
-
const today = new Date();
|
|
244
|
-
this.timeValue = this._datetimeAdapter.setTime(this.timeValue, today.getHours(), today.getMinutes(), today.getSeconds());
|
|
245
|
-
if (this._calendarService.todayDay) {
|
|
246
|
-
this.startSelectedDay = this._calendarService.todayDay;
|
|
247
|
-
}
|
|
248
|
-
this._calendarService.gotoToday();
|
|
249
|
-
}
|
|
250
|
-
onDayClick(day, popover, dialog) {
|
|
251
|
-
this.isValid = true;
|
|
252
|
-
this.startSelectedDay = this.endSelectedDay = day;
|
|
253
|
-
if (this.showTime) {
|
|
254
|
-
return;
|
|
255
|
-
}
|
|
256
|
-
this._setFirstAndEndDay(day, popover, dialog);
|
|
257
|
-
}
|
|
258
|
-
onPopoverOpenChange(isOpen) {
|
|
259
|
-
if (isOpen) {
|
|
260
|
-
this._lastValue = this.value;
|
|
261
|
-
}
|
|
262
|
-
else {
|
|
263
|
-
this._lastValue = undefined;
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
onClear(popover, dialog) {
|
|
267
|
-
if (dialog) {
|
|
268
|
-
dialog.dismiss();
|
|
269
|
-
}
|
|
270
|
-
else {
|
|
271
|
-
popover.close();
|
|
272
|
-
}
|
|
273
|
-
this.value = undefined;
|
|
274
|
-
this._setFormattedDateToInput(this.value);
|
|
275
|
-
this._raisValueChanged(this.value);
|
|
276
|
-
}
|
|
277
|
-
onOk(popover, dialog) {
|
|
278
|
-
if (dialog) {
|
|
279
|
-
dialog.dismiss();
|
|
280
|
-
}
|
|
281
|
-
else {
|
|
282
|
-
popover.close();
|
|
283
|
-
}
|
|
284
|
-
if (!this.value) {
|
|
285
|
-
this.value = new Date();
|
|
286
|
-
}
|
|
287
|
-
this._handleValueChange();
|
|
288
|
-
}
|
|
289
|
-
onCancel(popover, dialog) {
|
|
290
|
-
if (this._lastValue !== this.value) {
|
|
291
|
-
this.value = this._lastValue;
|
|
292
|
-
this._setCaption(this.value);
|
|
293
|
-
}
|
|
294
|
-
if (dialog) {
|
|
295
|
-
dialog.dismiss();
|
|
296
|
-
}
|
|
297
|
-
else {
|
|
298
|
-
popover.close();
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
_setFormattedDateToInput(date) {
|
|
302
|
-
if (date) {
|
|
303
|
-
const formattedDate = this._getFormattedDate(date);
|
|
304
|
-
this.tempFormmatedDate = formattedDate;
|
|
305
|
-
this._setInputGroupText(formattedDate);
|
|
306
|
-
return;
|
|
307
|
-
}
|
|
308
|
-
this.tempFormmatedDate = '';
|
|
309
|
-
this._setInputGroupText('');
|
|
310
|
-
}
|
|
311
|
-
_setInputGroupText(val) {
|
|
312
|
-
if (this.inputGroupComponent) {
|
|
313
|
-
this.inputGroupComponent.inputText = val;
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
_getFormattedDate(date) {
|
|
317
|
-
return this._dateTimeToCaption.transform(date, this.formatPattern, this.culture, this.showDate, this.showTime);
|
|
318
|
-
}
|
|
319
|
-
_handleValueChange() {
|
|
320
|
-
this.value = this.showDate ? this.startSelectedDay?.date ?? this.value : new Date();
|
|
321
|
-
if (this.value) {
|
|
322
|
-
this.value = new Date(this.value);
|
|
323
|
-
this.value.setHours(this.timeValue.hour);
|
|
324
|
-
this.value.setMinutes(this.timeValue.minute);
|
|
325
|
-
this.value.setSeconds(this.timeValue.second);
|
|
326
|
-
}
|
|
327
|
-
this._setFormattedDateToInput(this.value);
|
|
328
|
-
this._raisValueChanged(this.value);
|
|
329
|
-
}
|
|
330
|
-
_prepareYear(from) {
|
|
331
|
-
const years = [];
|
|
332
|
-
for (let i = 0; i < 20; i++) {
|
|
333
|
-
years.push(`${from + i}`);
|
|
334
|
-
}
|
|
335
|
-
this.years = years;
|
|
336
|
-
}
|
|
337
|
-
_setCaption(value) {
|
|
338
|
-
if (!value) {
|
|
339
|
-
this.valueCaption = '';
|
|
340
|
-
return;
|
|
341
|
-
}
|
|
342
|
-
let formatPattern = this.formatPattern.replace('YYYY', 'jYYYY');
|
|
343
|
-
formatPattern = formatPattern.replace('MM', 'jMM');
|
|
344
|
-
formatPattern = formatPattern.replace('DD', 'jDD');
|
|
345
|
-
this.valueCaption = this._calendarService._dateService.getMoment(value).format(formatPattern);
|
|
346
|
-
}
|
|
347
|
-
_raisValueChanged(date, setCaption = true) {
|
|
348
|
-
// this.value = date;
|
|
349
|
-
if (setCaption) {
|
|
350
|
-
this._setCaption(date);
|
|
351
|
-
}
|
|
352
|
-
this.valueChange.emit(date);
|
|
353
|
-
}
|
|
354
|
-
_setFirstAndEndDay(day, popover, dialog) {
|
|
355
|
-
if (dialog) {
|
|
356
|
-
dialog.dismiss();
|
|
357
|
-
}
|
|
358
|
-
if (popover) {
|
|
359
|
-
popover.close();
|
|
360
|
-
}
|
|
361
|
-
if (!this.isRangePicker) {
|
|
362
|
-
this._setFormattedDateToInput(day.date);
|
|
363
|
-
this._raisValueChanged(day.date);
|
|
364
|
-
return;
|
|
365
|
-
}
|
|
366
|
-
if (this.startSelectedDay) {
|
|
367
|
-
this.endSelectedDay = day;
|
|
368
|
-
}
|
|
369
|
-
else {
|
|
370
|
-
this.startSelectedDay = day;
|
|
371
|
-
}
|
|
372
|
-
if (this.startSelectedDay && this.endSelectedDay && this.startSelectedDay.date > this.endSelectedDay.date) {
|
|
373
|
-
const temp = this.startSelectedDay;
|
|
374
|
-
this.startSelectedDay = this.endSelectedDay;
|
|
375
|
-
this.endSelectedDay = temp;
|
|
376
|
-
}
|
|
377
|
-
if (this.startSelectedDay && this.endSelectedDay) {
|
|
378
|
-
this.rangeChange.emit({
|
|
379
|
-
startDay: this.startSelectedDay.date,
|
|
380
|
-
endDay: this.endSelectedDay.date
|
|
381
|
-
});
|
|
382
|
-
}
|
|
383
|
-
}
|
|
384
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DateTimePickerComponent, deps: [{ token: i2.DatetimeAdapter }, { token: i1.DateTimeToCaptionPipe }, { token: i1.LogService }, { token: i2.DialogService }, { token: i1.PortalService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
385
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DateTimePickerComponent, selector: "bc-date-time-picker", inputs: { placeholder: "placeholder", primaryCalendarType: "primaryCalendarType", formatPattern: "formatPattern", value: "value", timeValue: "timeValue", startRangeDate: "startRangeDate", endRangeDate: "endRangeDate", isRangePicker: "isRangePicker", showTime: "showTime", showDate: "showDate", rtl: "rtl", deviceSize: "deviceSize", isMobile: "isMobile", readonly: "readonly", disabled: "disabled", buttonMenuMode: "buttonMenuMode", inlineMode: "inlineMode", daterangeMode: "daterangeMode" }, outputs: { rangeChange: "rangeChange", valueChange: "valueChange" }, providers: [
|
|
386
|
-
{
|
|
387
|
-
provide: DatetimeAdapter,
|
|
388
|
-
useClass: FdDatetimeAdapter
|
|
389
|
-
},
|
|
390
|
-
{
|
|
391
|
-
provide: DateService,
|
|
392
|
-
useFactory: getDateService
|
|
393
|
-
},
|
|
394
|
-
CalendarService
|
|
395
|
-
], viewQueries: [{ propertyName: "timeComponent", first: true, predicate: TimeComponent, descendants: true }, { propertyName: "inputGroupComponent", first: true, predicate: InputGroupComponent, descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "@if (inlineMode) {\n<ng-container\n *ngTemplateOutlet=\"\n daterangeMode ? dateRangeTpl : month;\n context: {\n $implicit: selectedMonth$ | async,\n width: width$ | async,\n height: height,\n rtl: rtl$ | async,\n weekDays: weekDays,\n weekDaysMin: weekDaysMin,\n today: today,\n deviceSize: deviceSize,\n popover: popover\n }\n \"\n>\n</ng-container>\n}\n<ng-template #dateRangeTpl>\n <bc-calendar-selection-days\n fd-toolbar-item\n [inline]=\"true\"\n [monthInfo]=\"(selectedMonth$ | async)!!\"\n (rangeChange)=\"onRangeChange($event)\"\n ></bc-calendar-selection-days>\n</ng-template>\n<fd-input-group\n placement=\"after\"\n glyph=\"calendar\"\n glyphAriaLabel=\"select day\"\n ariaLabelledBy=\"fd-input-group-icon-label-2\"\n [placeholder]=\"placeholder\"\n [value]=\"value\"\n [button]=\"true\"\n [state]=\"isValid ? 'success' : 'error'\"\n [showFocus]=\"true\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [style.display]=\"!buttonMenuMode || inlineMode ? 'inherit' : 'none'\"\n (addOnButtonClicked)=\"onOpenPopover(popover, dialogTemplate)\"\n>\n</fd-input-group>\n@if (buttonMenuMode) {\n<button\n fd-button\n [label]=\"tempFormmatedDate || placeholder\"\n [title]=\"placeholder\"\n [fdType]=\"value ? 'standard' : 'transparent'\"\n [fdMenu]=\"true\"\n (click)=\"onOpenPopover(popover, dialogTemplate)\"\n [class.placeholder-custom]=\"!value\"\n class=\"menu-button-datepicker\"\n></button>\n}\n\n<fd-popover #popover (isOpenChange)=\"onPopoverOpenChange($event)\" [focusTrapped]=\"true\" [focusAutoCapture]=\"true\">\n <fd-popover-body [style.width.px]=\"width$ | async\">\n <ng-container\n *ngTemplateOutlet=\"\n month;\n context: {\n $implicit: selectedMonth$ | async,\n width: width$ | async,\n height: height,\n rtl: rtl$ | async,\n weekDays: weekDays,\n weekDaysMin: weekDaysMin,\n today: today,\n deviceSize: deviceSize,\n popover: popover\n }\n \"\n >\n </ng-container>\n <div fd-popover-body-footer>\n <div fd-bar [barDesign]=\"'footer'\">\n <div fd-bar-right>\n <container *ngTemplateOutlet=\"footerButtons\"></container>\n </div>\n </div>\n </div>\n </fd-popover-body>\n</fd-popover>\n<ng-template let-dialog let-dialogConfig=\"dialogConfig\" #dialogTemplate>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\n <fd-dialog-body>\n <ng-container\n *ngTemplateOutlet=\"\n month;\n context: {\n $implicit: selectedMonth$ | async,\n width: width$ | async,\n height: height,\n rtl: rtl$ | async,\n weekDays: weekDays,\n weekDaysMin: weekDaysMin,\n today: today,\n deviceSize: deviceSize,\n popover: popover,\n dialog: dialog\n }\n \"\n >\n </ng-container>\n </fd-dialog-body>\n <fd-dialog-footer>\n <container *ngTemplateOutlet=\"footerButtons; context: { dialog: dialog }\"></container>\n </fd-dialog-footer>\n </fd-dialog>\n</ng-template>\n<ng-template #footerButtons let-dialog=\"dialog\">\n <fd-button-bar [label]=\"'Ok' | bbbTranslate\" fdType=\"emphasized\" (click)=\"onOk(popover, dialog)\"></fd-button-bar>\n <fd-button-bar\n [label]=\"'Clear' | bbbTranslate\"\n fdType=\"standard\"\n (click)=\"onClear(popover, dialog)\"\n ></fd-button-bar>\n <fd-button-bar [label]=\"'Cancel' | bbbTranslate\" (click)=\"onCancel(popover, dialog)\"></fd-button-bar>\n</ng-template>\n<ng-template\n #month\n let-selectedMonth\n let-width=\"width\"\n let-height=\"height\"\n let-rtl=\"rtl\"\n let-today=\"today\"\n let-showEvents=\"showEvents\"\n let-deviceSize=\"deviceSize\"\n let-popover=\"popover\"\n let-dialog=\"dialog\"\n>\n @if (showDate) {\n <fd-toolbar [fdType]=\"'transparent'\">\n <button\n fd-button\n fd-toolbar-item\n [label]=\"(showDate ? 'DateR_Today' : 'Now') | bbbTranslate\"\n (click)=\"onToday()\"\n ></button>\n @if (showDate) {\n <button\n fd-button\n fd-toolbar-item\n [fdType]=\"'transparent'\"\n [glyph]=\"rtl ? 'navigation-right-arrow' : 'navigation-left-arrow'\"\n (click)=\"onPrevTap()\"\n ></button>\n } @if (showDate) {\n <button\n fd-button\n fd-toolbar-item\n [fdType]=\"'transparent'\"\n [glyph]=\"rtl ? 'navigation-left-arrow' : 'navigation-right-arrow'\"\n (click)=\"onNextTap()\"\n ></button>\n } @if (showDate) {\n <div class=\"month-years-wrapper\" fd-title fd-toolbar-item>\n @if (selectionMode === 'day' || selectionMode === 'month') {\n <button\n fd-button\n [fdType]=\"'transparent'\"\n [label]=\"selectedMonth.dateInfo.monthName\"\n (click)=\"selectionMode = 'month'\"\n ></button>\n }\n <button\n fd-button\n [fdType]=\"'transparent'\"\n [label]=\"selectedMonth.dateInfo.year\"\n (click)=\"selectionMode = 'year'\"\n ></button>\n </div>\n }\n </fd-toolbar>\n }\n <div style=\"display: flex\">\n @switch (selectionMode) { @case ('month') {\n <div class=\"month-year-selection-wrapper\">\n @for (month of months; track month; let i = $index) {\n <button\n style=\"flex-grow: 1; width: 33%\"\n fd-button\n [fdType]=\"selectedMonth.dateInfo.monthName === month ? 'emphasized' : 'transparent'\"\n [label]=\"month\"\n (click)=\"selectionMode = 'day'; onMonthSelected(month, i)\"\n ></button>\n }\n </div>\n } @case ('year') {\n <div class=\"month-year-selection-wrapper\">\n @for (year of years; track year) {\n <button\n style=\"flex-grow: 1; width: 25%\"\n fd-button\n [fdType]=\"selectedMonth.dateInfo.year === +year ? 'emphasized' : 'transparent'\"\n [label]=\"year\"\n (click)=\"selectionMode = 'day'; onYearSelected(year)\"\n ></button>\n }\n </div>\n } @default {\n <div style=\"display: flex\">\n @if (showDate) {\n <bc-calendar-month\n [style.width]=\"width\"\n [containerHeight]=\"height\"\n [containerWidth]=\"width\"\n [rtl]=\"rtl\"\n [monthWeeksCount]=\"selectedMonth.weeksCount\"\n [weekDays]=\"weekDays\"\n [weekDaysMin]=\"weekDaysMin\"\n [today]=\"today\"\n [datePicker]=\"true\"\n [dateRange]=\"true\"\n [selectedDate]=\"startSelectedDay ? startSelectedDay.date : value\"\n [days]=\"selectedMonth.days\"\n [deviceSize]=\"deviceSize\"\n (dayClick)=\"onDayClick($event, popover, dialog)\"\n ></bc-calendar-month>\n }\n <div class=\"seperator\"></div>\n @if (showTime) {\n <div>\n <fd-time\n style=\"direction: ltr\"\n fdCompact\n [keepTwoDigits]=\"true\"\n [(ngModel)]=\"timeValue\"\n [displaySeconds]=\"false\"\n ></fd-time>\n <div style=\"display: flex; gap: 0.2rem; padding: 0.5rem\">\n <input\n fd-form-control\n class=\"remove-arrow\"\n style=\"width: 3rem\"\n [value]=\"timeValue?.minute\"\n type=\"number\"\n maxValue=\"23\"\n (input)=\"onMinuteTextChange($event)\"\n />\n <input\n fd-form-control\n style=\"width: 3rem\"\n class=\"remove-arrow\"\n [value]=\"timeValue?.hour\"\n type=\"number\"\n maxValue=\"59\"\n (input)=\"onHourTextChange($event)\"\n />\n </div>\n </div>\n }\n </div>\n } }\n </div>\n</ng-template>\n", styles: [":host{display:block}fd-popover{display:block}fd-input-group ::ng-deep input{direction:ltr}fd-time ::ng-deep .fd-time{padding-top:0}.seperator{border-left:.0625rem solid var(--sapPageFooter_BorderColor, #d9d9d9)}\n"], dependencies: [{ kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.NumbersOnlyInputDirective, selector: "input[type=number], input[numbersOnly]" }, { kind: "component", type: i5.BarComponent, selector: "[fd-bar]", inputs: ["class", "barDesign", "inPage", "inHomePage", "size"] }, { kind: "directive", type: i5.BarRightDirective, selector: "[fd-bar-right]" }, { kind: "component", type: i5.ButtonBarComponent, selector: "fd-button-bar", inputs: ["fullWidth", "fdType", "title", "ariaLabelledby", "id"] }, { kind: "directive", type: i6.ContentDensityDirective, selector: "[fdContentDensity]:not([fdCompact]):not([fdCondensed]):not([fdCozy]), [fdCompact]:not([fdContentDensity]):not([fdCondensed]):not([fdCozy]), [fdCondensed]:not([fdContentDensity]):not([fdCompact]):not([fdCozy]), [fdCozy]:not([fdContentDensity]):not([fdCompact]):not([fdCondensed])", inputs: ["fdContentDensity", "fdCompact", "fdCondensed", "fdCozy"], exportAs: ["fdContentDensity"] }, { kind: "component", type: i7.ButtonComponent, selector: "button[fd-button], a[fd-button], span[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i8.FormControlComponent, selector: "input[fd-form-control], textarea[fd-form-control]", inputs: ["state", "type", "class", "ariaLabel", "ariaLabelledBy"] }, { kind: "component", type: i9.InputGroupComponent, selector: "fd-input-group", inputs: ["placement", "required", "inline", "addOnText", "buttonFocusable", "type", "glyph", "glyphFont", "button", "isControl", "showFocus", "isExpanded", "glyphAriaLabel", "addonButtonAriaHidden", "iconTitle", "ariaLabelledBy", "ariaLabel"], outputs: ["addOnButtonClicked", "search"] }, { kind: "component", type: i10.DialogComponent, selector: "fd-dialog", inputs: ["class", "dialogRef", "dialogConfig"] }, { kind: "component", type: i10.DialogBodyComponent, selector: "fd-dialog-body", inputs: ["disablePaddings"] }, { kind: "component", type: i10.DialogFooterComponent, selector: "fd-dialog-footer" }, { kind: "component", type: i11.TitleComponent, selector: "[fd-title], [fdTitle]", inputs: ["headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "component", type: i12.PopoverBodyComponent, selector: "fd-popover-body", inputs: ["minWidth", "maxWidth", "minHeight", "maxHeight"] }, { kind: "directive", type: i12.PopoverBodyFooterDirective, selector: "[fdPopoverBodyFooter], [fd-popover-body-footer]" }, { kind: "component", type: i12.PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig", "preventSpaceKeyScroll"] }, { kind: "component", type: i13.TimeComponent, selector: "fd-time", inputs: ["meridian", "validate", "keepTwoDigits", "disabled", "displaySeconds", "displayMinutes", "displayHours", "tablet", "elementsAtOnce", "time", "spinnerButtons"] }, { kind: "component", type: i14.ToolbarComponent, selector: "fd-toolbar", inputs: ["titleId", "class", "shouldOverflow", "fdType", "title", "active", "clearBorder", "forceOverflow", "tabindex", "headingLevel", "ariaLabel", "ariaLabelledBy"] }, { kind: "directive", type: i14.ToolbarItemDirective, selector: "[fd-toolbar-item], [fdOverflowGroup], [fdOverflowPriority]", inputs: ["fdOverflowPriority", "fdOverflowGroup"] }, { kind: "component", type: i15.CalendarMonthComponent, selector: "bc-calendar-month", inputs: ["monthWeeksCount", "weekDays", "weekDaysMin", "today", "containerHeight", "days", "calendarFields", "rtl", "deviceSize", "moDataList", "datePicker", "rangePicker", "canDelete", "canAdd", "canEdit", "canView", "selectedDate", "startSelectedDayIndex", "endSelectedDayIndex"], outputs: ["editEvent", "deleteEvent", "daySelect", "dayClick", "dayMouseMove", "dayMouseUp", "dayMouseDown", "showEvent"] }, { kind: "component", type: i16.CalendarSelectionDaysComponent, selector: "bc-calendar-selection-days", inputs: ["startSelectedDayIndex", "endSelectedDayIndex", "monthInfo", "inline"], outputs: ["rangeChange"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
396
|
-
}
|
|
397
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DateTimePickerComponent, decorators: [{
|
|
398
|
-
type: Component,
|
|
399
|
-
args: [{ selector: 'bc-date-time-picker', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
400
|
-
{
|
|
401
|
-
provide: DatetimeAdapter,
|
|
402
|
-
useClass: FdDatetimeAdapter
|
|
403
|
-
},
|
|
404
|
-
{
|
|
405
|
-
provide: DateService,
|
|
406
|
-
useFactory: getDateService
|
|
407
|
-
},
|
|
408
|
-
CalendarService
|
|
409
|
-
], template: "@if (inlineMode) {\n<ng-container\n *ngTemplateOutlet=\"\n daterangeMode ? dateRangeTpl : month;\n context: {\n $implicit: selectedMonth$ | async,\n width: width$ | async,\n height: height,\n rtl: rtl$ | async,\n weekDays: weekDays,\n weekDaysMin: weekDaysMin,\n today: today,\n deviceSize: deviceSize,\n popover: popover\n }\n \"\n>\n</ng-container>\n}\n<ng-template #dateRangeTpl>\n <bc-calendar-selection-days\n fd-toolbar-item\n [inline]=\"true\"\n [monthInfo]=\"(selectedMonth$ | async)!!\"\n (rangeChange)=\"onRangeChange($event)\"\n ></bc-calendar-selection-days>\n</ng-template>\n<fd-input-group\n placement=\"after\"\n glyph=\"calendar\"\n glyphAriaLabel=\"select day\"\n ariaLabelledBy=\"fd-input-group-icon-label-2\"\n [placeholder]=\"placeholder\"\n [value]=\"value\"\n [button]=\"true\"\n [state]=\"isValid ? 'success' : 'error'\"\n [showFocus]=\"true\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [style.display]=\"!buttonMenuMode || inlineMode ? 'inherit' : 'none'\"\n (addOnButtonClicked)=\"onOpenPopover(popover, dialogTemplate)\"\n>\n</fd-input-group>\n@if (buttonMenuMode) {\n<button\n fd-button\n [label]=\"tempFormmatedDate || placeholder\"\n [title]=\"placeholder\"\n [fdType]=\"value ? 'standard' : 'transparent'\"\n [fdMenu]=\"true\"\n (click)=\"onOpenPopover(popover, dialogTemplate)\"\n [class.placeholder-custom]=\"!value\"\n class=\"menu-button-datepicker\"\n></button>\n}\n\n<fd-popover #popover (isOpenChange)=\"onPopoverOpenChange($event)\" [focusTrapped]=\"true\" [focusAutoCapture]=\"true\">\n <fd-popover-body [style.width.px]=\"width$ | async\">\n <ng-container\n *ngTemplateOutlet=\"\n month;\n context: {\n $implicit: selectedMonth$ | async,\n width: width$ | async,\n height: height,\n rtl: rtl$ | async,\n weekDays: weekDays,\n weekDaysMin: weekDaysMin,\n today: today,\n deviceSize: deviceSize,\n popover: popover\n }\n \"\n >\n </ng-container>\n <div fd-popover-body-footer>\n <div fd-bar [barDesign]=\"'footer'\">\n <div fd-bar-right>\n <container *ngTemplateOutlet=\"footerButtons\"></container>\n </div>\n </div>\n </div>\n </fd-popover-body>\n</fd-popover>\n<ng-template let-dialog let-dialogConfig=\"dialogConfig\" #dialogTemplate>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\n <fd-dialog-body>\n <ng-container\n *ngTemplateOutlet=\"\n month;\n context: {\n $implicit: selectedMonth$ | async,\n width: width$ | async,\n height: height,\n rtl: rtl$ | async,\n weekDays: weekDays,\n weekDaysMin: weekDaysMin,\n today: today,\n deviceSize: deviceSize,\n popover: popover,\n dialog: dialog\n }\n \"\n >\n </ng-container>\n </fd-dialog-body>\n <fd-dialog-footer>\n <container *ngTemplateOutlet=\"footerButtons; context: { dialog: dialog }\"></container>\n </fd-dialog-footer>\n </fd-dialog>\n</ng-template>\n<ng-template #footerButtons let-dialog=\"dialog\">\n <fd-button-bar [label]=\"'Ok' | bbbTranslate\" fdType=\"emphasized\" (click)=\"onOk(popover, dialog)\"></fd-button-bar>\n <fd-button-bar\n [label]=\"'Clear' | bbbTranslate\"\n fdType=\"standard\"\n (click)=\"onClear(popover, dialog)\"\n ></fd-button-bar>\n <fd-button-bar [label]=\"'Cancel' | bbbTranslate\" (click)=\"onCancel(popover, dialog)\"></fd-button-bar>\n</ng-template>\n<ng-template\n #month\n let-selectedMonth\n let-width=\"width\"\n let-height=\"height\"\n let-rtl=\"rtl\"\n let-today=\"today\"\n let-showEvents=\"showEvents\"\n let-deviceSize=\"deviceSize\"\n let-popover=\"popover\"\n let-dialog=\"dialog\"\n>\n @if (showDate) {\n <fd-toolbar [fdType]=\"'transparent'\">\n <button\n fd-button\n fd-toolbar-item\n [label]=\"(showDate ? 'DateR_Today' : 'Now') | bbbTranslate\"\n (click)=\"onToday()\"\n ></button>\n @if (showDate) {\n <button\n fd-button\n fd-toolbar-item\n [fdType]=\"'transparent'\"\n [glyph]=\"rtl ? 'navigation-right-arrow' : 'navigation-left-arrow'\"\n (click)=\"onPrevTap()\"\n ></button>\n } @if (showDate) {\n <button\n fd-button\n fd-toolbar-item\n [fdType]=\"'transparent'\"\n [glyph]=\"rtl ? 'navigation-left-arrow' : 'navigation-right-arrow'\"\n (click)=\"onNextTap()\"\n ></button>\n } @if (showDate) {\n <div class=\"month-years-wrapper\" fd-title fd-toolbar-item>\n @if (selectionMode === 'day' || selectionMode === 'month') {\n <button\n fd-button\n [fdType]=\"'transparent'\"\n [label]=\"selectedMonth.dateInfo.monthName\"\n (click)=\"selectionMode = 'month'\"\n ></button>\n }\n <button\n fd-button\n [fdType]=\"'transparent'\"\n [label]=\"selectedMonth.dateInfo.year\"\n (click)=\"selectionMode = 'year'\"\n ></button>\n </div>\n }\n </fd-toolbar>\n }\n <div style=\"display: flex\">\n @switch (selectionMode) { @case ('month') {\n <div class=\"month-year-selection-wrapper\">\n @for (month of months; track month; let i = $index) {\n <button\n style=\"flex-grow: 1; width: 33%\"\n fd-button\n [fdType]=\"selectedMonth.dateInfo.monthName === month ? 'emphasized' : 'transparent'\"\n [label]=\"month\"\n (click)=\"selectionMode = 'day'; onMonthSelected(month, i)\"\n ></button>\n }\n </div>\n } @case ('year') {\n <div class=\"month-year-selection-wrapper\">\n @for (year of years; track year) {\n <button\n style=\"flex-grow: 1; width: 25%\"\n fd-button\n [fdType]=\"selectedMonth.dateInfo.year === +year ? 'emphasized' : 'transparent'\"\n [label]=\"year\"\n (click)=\"selectionMode = 'day'; onYearSelected(year)\"\n ></button>\n }\n </div>\n } @default {\n <div style=\"display: flex\">\n @if (showDate) {\n <bc-calendar-month\n [style.width]=\"width\"\n [containerHeight]=\"height\"\n [containerWidth]=\"width\"\n [rtl]=\"rtl\"\n [monthWeeksCount]=\"selectedMonth.weeksCount\"\n [weekDays]=\"weekDays\"\n [weekDaysMin]=\"weekDaysMin\"\n [today]=\"today\"\n [datePicker]=\"true\"\n [dateRange]=\"true\"\n [selectedDate]=\"startSelectedDay ? startSelectedDay.date : value\"\n [days]=\"selectedMonth.days\"\n [deviceSize]=\"deviceSize\"\n (dayClick)=\"onDayClick($event, popover, dialog)\"\n ></bc-calendar-month>\n }\n <div class=\"seperator\"></div>\n @if (showTime) {\n <div>\n <fd-time\n style=\"direction: ltr\"\n fdCompact\n [keepTwoDigits]=\"true\"\n [(ngModel)]=\"timeValue\"\n [displaySeconds]=\"false\"\n ></fd-time>\n <div style=\"display: flex; gap: 0.2rem; padding: 0.5rem\">\n <input\n fd-form-control\n class=\"remove-arrow\"\n style=\"width: 3rem\"\n [value]=\"timeValue?.minute\"\n type=\"number\"\n maxValue=\"23\"\n (input)=\"onMinuteTextChange($event)\"\n />\n <input\n fd-form-control\n style=\"width: 3rem\"\n class=\"remove-arrow\"\n [value]=\"timeValue?.hour\"\n type=\"number\"\n maxValue=\"59\"\n (input)=\"onHourTextChange($event)\"\n />\n </div>\n </div>\n }\n </div>\n } }\n </div>\n</ng-template>\n", styles: [":host{display:block}fd-popover{display:block}fd-input-group ::ng-deep input{direction:ltr}fd-time ::ng-deep .fd-time{padding-top:0}.seperator{border-left:.0625rem solid var(--sapPageFooter_BorderColor, #d9d9d9)}\n"] }]
|
|
410
|
-
}], ctorParameters: () => [{ type: i2.DatetimeAdapter }, { type: i1.DateTimeToCaptionPipe }, { type: i1.LogService }, { type: i2.DialogService }, { type: i1.PortalService }], propDecorators: { placeholder: [{
|
|
411
|
-
type: Input
|
|
412
|
-
}], primaryCalendarType: [{
|
|
413
|
-
type: Input
|
|
414
|
-
}], formatPattern: [{
|
|
415
|
-
type: Input
|
|
416
|
-
}], value: [{
|
|
417
|
-
type: Input
|
|
418
|
-
}], timeValue: [{
|
|
419
|
-
type: Input
|
|
420
|
-
}], startRangeDate: [{
|
|
421
|
-
type: Input
|
|
422
|
-
}], endRangeDate: [{
|
|
423
|
-
type: Input
|
|
424
|
-
}], isRangePicker: [{
|
|
425
|
-
type: Input
|
|
426
|
-
}], showTime: [{
|
|
427
|
-
type: Input
|
|
428
|
-
}], showDate: [{
|
|
429
|
-
type: Input
|
|
430
|
-
}], rtl: [{
|
|
431
|
-
type: Input
|
|
432
|
-
}], deviceSize: [{
|
|
433
|
-
type: Input
|
|
434
|
-
}], isMobile: [{
|
|
435
|
-
type: Input
|
|
436
|
-
}], readonly: [{
|
|
437
|
-
type: Input
|
|
438
|
-
}], disabled: [{
|
|
439
|
-
type: Input
|
|
440
|
-
}], buttonMenuMode: [{
|
|
441
|
-
type: Input
|
|
442
|
-
}], inlineMode: [{
|
|
443
|
-
type: Input
|
|
444
|
-
}], daterangeMode: [{
|
|
445
|
-
type: Input
|
|
446
|
-
}], rangeChange: [{
|
|
447
|
-
type: Output
|
|
448
|
-
}], valueChange: [{
|
|
449
|
-
type: Output
|
|
450
|
-
}], timeComponent: [{
|
|
451
|
-
type: ViewChild,
|
|
452
|
-
args: [TimeComponent]
|
|
453
|
-
}], inputGroupComponent: [{
|
|
454
|
-
type: ViewChild,
|
|
455
|
-
args: [InputGroupComponent, { static: true }]
|
|
456
|
-
}] } });
|
|
457
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1jYWxlbmRhci9zcmMvbGliL2RhdGUtdGltZS1waWNrZXIvZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1jYWxlbmRhci9zcmMvbGliL2RhdGUtdGltZS1waWNrZXIvZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFHTCxNQUFNLEVBRU4sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzRCxPQUFPLEVBQ0gsYUFBYSxFQUViLFdBQVcsRUFDWCxjQUFjLEVBR2QsUUFBUSxFQUdYLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQy9ELE9BQU8sRUFDSCxlQUFlLEVBRWYsTUFBTSxFQUNOLGlCQUFpQixFQUNqQixtQkFBbUIsRUFDbkIsYUFBYSxFQUNoQixNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHL0IsTUFBTSxPQUFPLGNBQWM7SUFvQ3ZCLFlBQW9CLGFBQStCO1FBQS9CLGtCQUFhLEdBQWIsYUFBYSxDQUFrQjtRQW5DbkQsaURBQWlEO1FBQ2pELHVCQUFrQixHQUFHLGdCQUFnQixDQUFDO1FBRXRDLG1DQUFtQztRQUNuQyxlQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFbkQsaURBQWlEO1FBQ2pELHVCQUFrQixHQUFHLGdCQUFn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YUFBYTtnQkFDMEIsbUJBQW1CO3NCQUFwRSxTQUFTO3VCQUFDLG1CQUFtQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbmplY3RhYmxlLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtcbiAgICBCYXNlQ29tcG9uZW50LFxuICAgIEJiYlRyYW5zbGF0ZVBpcGUsXG4gICAgRGF0ZVNlcnZpY2UsXG4gICAgZ2V0RGF0ZVNlcnZpY2UsXG4gICAgTG9nU2VydmljZSxcbiAgICBQb3J0YWxTZXJ2aWNlLFxuICAgIEJhcnNhQXBpLFxuICAgIERhdGVUaW1lVG9DYXB0aW9uUGlwZSxcbiAgICBBYmJyZXZhdGlvbkRldmljZVNpemVcbn0gZnJvbSAnYmFyc2Etbm92aW4tcmF5LWNvcmUnO1xuaW1wb3J0IHsgQ2FsZW5kYXJNb250aEluZm8sIERheSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBDYWxlbmRhclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jYWxlbmRhci5zZXJ2aWNlJztcbmltcG9ydCB7XG4gICAgRGF0ZXRpbWVBZGFwdGVyLFxuICAgIERpYWxvZ1NlcnZpY2UsXG4gICAgRmREYXRlLFxuICAgIEZkRGF0ZXRpbWVBZGFwdGVyLFxuICAgIElucHV0R3JvdXBDb21wb25lbnQsXG4gICAgVGltZUNvbXBvbmVudFxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVGltZUNvbmZpZ0kxOG4ge1xuICAgIC8qKiBBcmlhIGxhYmVsIGZvciB0aGUgJ2luY3JlYXNlIGhvdXJzJyBidXR0b24gKi9cbiAgICBpbmNyZWFzZUhvdXJzTGFiZWwgPSAnSW5jcmVhc2UgaG91cnMnO1xuXG4gICAgLyoqIGxhYmVsIGZvciB0aGUgJ2hvdXJzJyBjb2x1bW4gKi9cbiAgICBob3Vyc0xhYmVsID0gdGhpcy5fYmJiVHJhbnNsYXRlLnRyYW5zZm9ybSgnSG91cnMnKTtcblxuICAgIC8qKiBBcmlhIGxhYmVsIGZvciB0aGUgJ2RlY3JlYXNlIGhvdXJzJyBidXR0b24gKi9cbiAgICBkZWNyZWFzZUhvdXJzTGFiZWwgPSAnRGVjcmVhc2UgaG91cnMnO1xuXG4gICAgLyoqIEFyaWEgbGFiZWwgZm9yIHRoZSAnaW5jcmVhc2UgbWludXRlcycgYnV0dG9uICovXG4gICAgaW5jcmVhc2VNaW51dGVzTGFiZWwgPSAnSW5jcmVhc2UgbWludXRlcyc7XG5cbiAgICAvKiogbGFiZWwgZm9yIHRoZSAnbWludXRlcycgY29sdW1uICovXG4gICAgbWludXRlc0xhYmVsID0gdGhpcy5fYmJiVHJhbnNsYXRlLnRyYW5zZm9ybSgnTWludXRlcycpO1xuXG4gICAgLyoqIEFyaWEgbGFiZWwgZm9yIHRoZSAnZGVjcmVhc2UgbWludXRlcycgYnV0dG9uICovXG4gICAgZGVjcmVhc2VNaW51dGVzTGFiZWwgPSAnRGVjcmVhc2UgbWludXRlcyc7XG5cbiAgICAvKiogQXJpYSBsYWJlbCBmb3IgdGhlICdpbmNyZWFzZSBzZWNvbmRzJyBidXR0b24gKi9cbiAgICBpbmNyZWFzZVNlY29uZHNMYWJlbCA9ICdJbmNyZWFzZSBzZWNvbmRzJztcblxuICAgIC8qKiBsYWJlbCBmb3IgdGhlICdzZWNvbmRzJyBjb2x1bW4gKi9cbiAgICBzZWNvbmRzTGFiZWwgPSB0aGlzLl9iYmJUcmFuc2xhdGUudHJhbnNmb3JtKCdTZWMnKTtcblxuICAgIC8qKiBBcmlhIGxhYmVsIGZvciB0aGUgJ2RlY3JlYXNlIHNlY29uZHMnIGJ1dHRvbiAqL1xuICAgIGRlY3JlYXNlU2Vjb25kc0xhYmVsID0gJ0RlY3JlYXNlIHNlY29uZHMnO1xuXG4gICAgLyoqIEFyaWEgbGFiZWwgZm9yIHRoZSAnaW5jcmVhc2UgcGVyaW9kJyBidXR0b24gKi9cbiAgICBpbmNyZWFzZVBlcmlvZExhYmVsID0gJ0luY3JlYXNlIHBlcmlvZCc7XG5cbiAgICAvKiogbGFiZWwgZm9yIHRoZSAncGVyaW9kJyBjb2x1bW4gKi9cbiAgICBwZXJpb2RMYWJlbCA9ICdQZXJpb2QnO1xuXG4gICAgLyoqIEFyaWEgbGFiZWwgZm9yIHRoZSAnZGVjcmVhc2UgcGVyaW9kJyBidXR0b24gKi9cbiAgICBkZWNyZWFzZVBlcmlvZExhYmVsID0gJ0RlY3JlYXNlIHBlcmlvZCc7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfYmJiVHJhbnNsYXRlOiBCYmJUcmFuc2xhdGVQaXBlKSB7fVxufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2JjLWRhdGUtdGltZS1waWNrZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9kYXRlLXRpbWUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9kYXRlLXRpbWUtcGlja2VyLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IERhdGV0aW1lQWRhcHRlcixcbiAgICAgICAgICAgIHVzZUNsYXNzOiBGZERhdGV0aW1lQWRhcHRlclxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBEYXRlU2VydmljZSxcbiAgICAgICAgICAgIHVzZUZhY3Rvcnk6IGdldERhdGVTZXJ2aWNlXG4gICAgICAgIH0sXG4gICAgICAgIENhbGVuZGFyU2VydmljZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgRGF0ZVRpbWVQaWNrZXJDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICAgIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHJpbWFyeUNhbGVuZGFyVHlwZTogJ0dyZWdvcmlhbicgfCAnUGVyc2lhbicgfCBzdHJpbmc7XG4gICAgQElucHV0KCkgZm9ybWF0UGF0dGVybjogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHZhbHVlOiBEYXRlIHwgdW5kZWZpbmVkO1xuICAgIEBJbnB1dCgpIHRpbWVWYWx1ZTogRmREYXRlO1xuICAgIEBJbnB1dCgpIHN0YXJ0UmFuZ2VEYXRlOiBEYXRlO1xuICAgIEBJbnB1dCgpIGVuZFJhbmdlRGF0ZTogRGF0ZTtcbiAgICBASW5wdXQoKSBpc1JhbmdlUGlja2VyOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHNob3dUaW1lOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHNob3dEYXRlOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHJ0bCA9IHRydWU7XG4gICAgQElucHV0KCkgZGV2aWNlU2l6ZTogQWJicmV2YXRpb25EZXZpY2VTaXplO1xuICAgIEBJbnB1dCgpIGlzTW9iaWxlOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHJlYWRvbmx5OiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGJ1dHRvbk1lbnVNb2RlOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGlubGluZU1vZGU6IGJvb2xlYW47XG4gICAgQElucHV0KCkgZGF0ZXJhbmdlTW9kZTogYm9vbGVhbjtcbiAgICBAT3V0cHV0KCkgcmFuZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHsgc3RhcnREYXk6IERhdGU7IGVuZERheTogRGF0ZSB9PigpO1xuICAgIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZT4oKTtcbiAgICBAVmlld0NoaWxkKFRpbWVDb21wb25lbnQpIHRpbWVDb21wb25lbnQ6IFRpbWVDb21wb25lbnQ8RmREYXRlPjtcbiAgICBAVmlld0NoaWxkKElucHV0R3JvdXBDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pIGlucHV0R3JvdXBDb21wb25lbnQ6IElucHV0R3JvdXBDb21wb25lbnQ7XG4gICAgdmFsdWVDYXB0aW9uID0gJyc7XG4gICAgZW5kU2VsZWN0ZWREYXk6IERheSB8IG51bGw7XG4gICAgc3RhcnRTZWxlY3RlZERheTogRGF5IHwgbnVsbDtcbiAgICB2YWx1ZURheTogRGF5IHwgbnVsbDtcblxuICAgIHNlbGVjdGlvbk1vZGU6ICdkYXknIHwgJ21vbnRoJyB8ICd5ZWFyJyA9ICdkYXknO1xuICAgIHRvZGF5SW5kZXggPSAtMTtcbiAgICB3aWR0aCQ6IE9ic2VydmFibGU8bnVtYmVyPjtcbiAgICBoZWlnaHQ6IG51bWJlcjtcbiAgICBzZWxlY3RlZE1vbnRoJDogT2JzZXJ2YWJsZTxDYWxlbmRhck1vbnRoSW5mbz47XG4gICAgcnRsJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgICB0b2RheTogRGF0ZTtcbiAgICB3ZWVrRGF5c01pbjogc3RyaW5nW107XG4gICAgd2Vla0RheXM6IHN0cmluZ1tdO1xuXG4gICAgaXNWYWxpZCA9IHRydWU7XG4gICAgY3VsdHVyZTogc3RyaW5nO1xuICAgIG1vbnRoczogc3RyaW5nW10gPSBbXTtcbiAgICB5ZWFyczogc3RyaW5nW107XG4gICAgdGVtcEZvcm1tYXRlZERhdGUgPSAnJztcbiAgICBwcml2YXRlIF9jYWxlbmRhclNlcnZpY2U6IENhbGVuZGFyU2VydmljZTtcbiAgICBwcml2YXRlIF9sYXN0VmFsdWU6IERhdGUgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfZGF0ZXRpbWVBZGFwdGVyOiBEYXRldGltZUFkYXB0ZXI8RmREYXRlPixcbiAgICAgICAgcHJpdmF0ZSBfZGF0ZVRpbWVUb0NhcHRpb246IERhdGVUaW1lVG9DYXB0aW9uUGlwZSxcbiAgICAgICAgcHJpdmF0ZSBfbG9nU2VydmljZTogTG9nU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcbiAgICAgICAgX3BvcnRhbFNlcnZpY2U6IFBvcnRhbFNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcblxuICAgICAgICB0aGlzLnJ0bCQgPSBfcG9ydGFsU2VydmljZS5ydGwkO1xuICAgICAgICB0aGlzLndpZHRoJCA9IF9wb3J0YWxTZXJ2aWNlLmRldmljZVNpemUkLnBpcGUoXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICAgICAgbWFwKChkZXZpY2VTaXplKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNob3dEYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAyNjA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN3aXRjaCAoZGV2aWNlU2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdsJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAneGwnOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDU2MDtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAncyc6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMzIwO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDUyMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gNDIwO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICBsZXQgY3VsdHVyZSA9ICdlbi1VUyc7XG4gICAgICAgIHN3aXRjaCAodGhpcy5wcmltYXJ5Q2FsZW5kYXJUeXBlKSB7XG4gICAgICAgICAgICBjYXNlICdIaWpyaVNoYW1zaSc6XG4gICAgICAgICAgICAgICAgY3VsdHVyZSA9ICdmYS1JUic7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdWx0dXJlID0gY3VsdHVyZTtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXJTZXJ2aWNlID0gbmV3IENhbGVuZGFyU2VydmljZSh0aGlzLl9sb2dTZXJ2aWNlLCBjdWx0dXJlKTtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLnNldE1vZGUoJ21vbnRoJyk7XG4gICAgICAgIHRoaXMud2Vla0RheXNNaW4gPSB0aGlzLl9jYWxlbmRhclNlcnZpY2Uud2Vla0RheXNNaW4oKTtcbiAgICAgICAgdGhpcy53ZWVrRGF5cyA9IHRoaXMuX2NhbGVuZGFyU2VydmljZS53ZWVrRGF5cygpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTW9udGgkID0gdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLnNlbGVjdGVkJDtcbiAgICAgICAgdGhpcy50b2RheSA9IHRoaXMuX2NhbGVuZGFyU2VydmljZS50b2RheTtcblxuICAgICAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy50aW1lVmFsdWUgPSBGZERhdGUuZ2V0RmREYXRlQnlEYXRlKHRoaXMudmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5fc2V0Q2FwdGlvbih0aGlzLnZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5sb2FkTW9udGhCeURhdGUodGhpcy52YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRpbWVWYWx1ZSA9IEZkRGF0ZS5nZXRGZERhdGVCeURhdGUobmV3IERhdGUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgKHRoaXMuaXNSYW5nZVBpY2tlcikge1xuICAgICAgICAvLyAgIGlmICh0aGlzLnN0YXJ0UmFuZ2VEYXRlKSB7XG4gICAgICAgIC8vICAgICB0aGlzLl9jYWxlbmRhclNlcnZpY2UubG9hZE1vbnRoQnlEYXRlKHRoaXMuc3RhcnRSYW5nZURhdGUpO1xuICAgICAgICAvLyAgIH1cbiAgICAgICAgLy8gICBpZiAodGhpcy5lbmRSYW5nZURhdGUpIHtcbiAgICAgICAgLy8gICB9XG4gICAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAgIC8vICAgdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLmxvYWRNb250aEJ5RGF0ZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgLy8gfVxuICAgICAgICB0aGlzLm1vbnRocyA9IHRoaXMuX2NhbGVuZGFyU2VydmljZS5Nb250aHM7XG4gICAgICAgIHRoaXMuX3ByZXBhcmVZZWFyKHRoaXMuX2NhbGVuZGFyU2VydmljZS5zZWxlY3RlZE1vbnRoLmRhdGVJbmZvLnllYXIpO1xuICAgICAgICB0aGlzLl9zZXRGb3JtYXR0ZWREYXRlVG9JbnB1dCh0aGlzLnZhbHVlKTtcbiAgICAgICAgaWYgKHRoaXMuaW5wdXRHcm91cENvbXBvbmVudCkge1xuICAgICAgICAgICAgKHRoaXMuaW5wdXRHcm91cENvbXBvbmVudCBhcyBhbnkpLl9jdmEub25DaGFuZ2UgPSB0aGlzLm9uQ2FwdGlvbkNoYW5nZWQuYmluZCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvbkhvdXJUZXh0Q2hhbmdlKGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdmFsID0gTnVtYmVyKGUudGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgaWYgKGlzTmFOKHZhbCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRpbWVWYWx1ZSA9IG5ldyBGZERhdGUoXG4gICAgICAgICAgICB0aGlzLnRpbWVWYWx1ZS55ZWFyLFxuICAgICAgICAgICAgdGhpcy50aW1lVmFsdWUubW9udGgsXG4gICAgICAgICAgICB0aGlzLnRpbWVWYWx1ZS5kYXksXG4gICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICB0aGlzLnRpbWVWYWx1ZS5taW51dGUsXG4gICAgICAgICAgICB0aGlzLnRpbWVWYWx1ZS5zZWNvbmRcbiAgICAgICAgKTtcbiAgICB9XG4gICAgb25NaW51dGVUZXh0Q2hhbmdlKGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdmFsID0gTnVtYmVyKGUudGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgaWYgKGlzTmFOKHZhbCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRpbWVWYWx1ZSA9IG5ldyBGZERhdGUoXG4gICAgICAgICAgICB0aGlzLnRpbWVWYWx1ZS55ZWFyLFxuICAgICAgICAgICAgdGhpcy50aW1lVmFsdWUubW9udGgsXG4gICAgICAgICAgICB0aGlzLnRpbWVWYWx1ZS5kYXksXG4gICAgICAgICAgICB0aGlzLnRpbWVWYWx1ZS5ob3VyLFxuICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgdGhpcy50aW1lVmFsdWUuc2Vjb25kXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IHZhbHVlIH0gPSBjaGFuZ2VzO1xuICAgICAgICBpZiAodmFsdWUgJiYgIXZhbHVlLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICBjb25zdCBjYXB0aW9uID0gdGhpcy5fZ2V0Rm9ybWF0dGVkRGF0ZSh2YWx1ZS5jdXJyZW50VmFsdWUpO1xuICAgICAgICAgICAgaWYgKGNhcHRpb24gIT09IHRoaXMuaW5wdXRHcm91cENvbXBvbmVudD8uaW5wdXRUZXh0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0Rm9ybWF0dGVkRGF0ZVRvSW5wdXQodGhpcy52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgb25SYW5nZUNoYW5nZShlKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmFuZ2VDaGFuZ2UuZW1pdCh7XG4gICAgICAgICAgICBzdGFydERheTogZS5zdGFydERheSxcbiAgICAgICAgICAgIGVuZERheTogZS5lbmREYXlcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG9uT3BlblBvcG92ZXIocG9wb3ZlciwgZGlhbG9nVGVtcGxhdGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMucmVhZG9ubHkgfHwgdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMudGltZUNvbXBvbmVudCkge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnRpbWVDb21wb25lbnQucmVmcmVzaENvbHVtbnMoKSwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGV2aWNlU2l6ZSA9PT0gJ3MnIHx8IHRoaXMuaXNNb2JpbGUpIHtcbiAgICAgICAgICAgIHRoaXMuX2RpYWxvZ1NlcnZpY2Uub3BlbihkaWFsb2dUZW1wbGF0ZSwge1xuICAgICAgICAgICAgICAgIG1vYmlsZTogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcG9wb3Zlci5vcGVuKCk7XG4gICAgfVxuICAgIG9uTW9udGhTZWxlY3RlZChtb250aE5hbWU6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9jYWxlbmRhclNlcnZpY2UuZ290b01vbnRoKG1vbnRoTmFtZSwgaW5kZXgpO1xuICAgIH1cbiAgICBvblllYXJTZWxlY3RlZCh5ZWFyOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLmdvdG9ZZWFyKCt5ZWFyKTtcbiAgICB9XG5cbiAgICBvbkNhcHRpb25DaGFuZ2VkKGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKGUubGVuZ3RoIDwgMTAgJiYgdGhpcy5zaG93RGF0ZSkge1xuICAgICAgICAgICAgaWYgKGUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmFpc1ZhbHVlQ2hhbmdlZCh1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZW5nbGlzaERhdGVTdHIgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5SZXBsYWNlRmFUb0FyQ2hhcmNodGVyKGUpO1xuICAgICAgICBsZXQgZm9ybWF0ID0gJ2pZWVlZL2pNL2pEJztcbiAgICAgICAgaWYgKHRoaXMuc2hvd1RpbWUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNob3dEYXRlKSB7XG4gICAgICAgICAgICAgICAgZm9ybWF0ICs9ICcgSEg6bW0nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3JtYXQgPSAnSEg6bW0nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1vbWVudCA9IHRoaXMuX2NhbGVuZGFyU2VydmljZS5fZGF0ZVNlcnZpY2Uuc3RyaW5nVG9Nb21lbnQoZW5nbGlzaERhdGVTdHIsIGZvcm1hdCk7XG4gICAgICAgIC8vIGNvbnN0IGlzVmFsaWQgPSBtb21lbnQuaXNWYWxpZCgpOy8vINio2LHYp9uMINi02YXYs9uMINmH2YXbjNi02YcgZmFsc2Ug2YbYtNmI2YYg2YXbjNiv2YdcbiAgICAgICAgaWYgKHRoaXMuc2hvd0RhdGUgJiYgaXNOYU4oRGF0ZS5wYXJzZShlbmdsaXNoRGF0ZVN0cikpKSB7XG4gICAgICAgICAgICB0aGlzLmlzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0ZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBtb21lbnQudG9EYXRlKCk7XG4gICAgICAgIGlmIChkYXRlLmdldEZ1bGxZZWFyKCkgPCB0ZGF0ZS5nZXRGdWxsWWVhcigpICYmICF0aGlzLnNob3dEYXRlKSB7XG4gICAgICAgICAgICBkYXRlLnNldEZ1bGxZZWFyKHRkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICAgICAgZGF0ZS5zZXRNb250aCh0ZGF0ZS5nZXRNb250aCgpKTtcbiAgICAgICAgICAgIGRhdGUuc2V0RGF0ZSh0ZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc05hTihkYXRlKSkge1xuICAgICAgICAgICAgdGhpcy5pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc1ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy50aW1lVmFsdWUgPSB0aGlzLl9kYXRldGltZUFkYXB0ZXIuc2V0VGltZShcbiAgICAgICAgICAgIHRoaXMudGltZVZhbHVlLFxuICAgICAgICAgICAgZGF0ZS5nZXRIb3VycygpLFxuICAgICAgICAgICAgZGF0ZS5nZXRNaW51dGVzKCksXG4gICAgICAgICAgICBkYXRlLmdldFNlY29uZHMoKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnN0YXJ0U2VsZWN0ZWREYXkgPSB0aGlzLmVuZFNlbGVjdGVkRGF5ID0gbnVsbDtcbiAgICAgICAgdGhpcy5fcmFpc1ZhbHVlQ2hhbmdlZChkYXRlLCBmYWxzZSk7XG4gICAgfVxuICAgIG9uUHJldlRhcCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ2RheScpIHtcbiAgICAgICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5sb2FkUHJldmlvdXMoKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdtb250aCcpIHtcbiAgICAgICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5sb2FkUHJldlllYXIoKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICd5ZWFyJykge1xuICAgICAgICAgICAgdGhpcy5fcHJlcGFyZVllYXIoTnVtYmVyKHRoaXMueWVhcnNbMF0pIC0gMjApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25OZXh0VGFwKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnZGF5Jykge1xuICAgICAgICAgICAgdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLmxvYWROZXh0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnbW9udGgnKSB7XG4gICAgICAgICAgICB0aGlzLl9jYWxlbmRhclNlcnZpY2UubG9hZE5leHRZZWFyKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAneWVhcicpIHtcbiAgICAgICAgICAgIHRoaXMuX3ByZXBhcmVZZWFyKE51bWJlcih0aGlzLnllYXJzW3RoaXMueWVhcnMubGVuZ3RoIC0gMV0pICsgMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblRvZGF5KCk6IHZvaWQge1xuICAgICAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XG4gICAgICAgIHRoaXMudGltZVZhbHVlID0gdGhpcy5fZGF0ZXRpbWVBZGFwdGVyLnNldFRpbWUoXG4gICAgICAgICAgICB0aGlzLnRpbWVWYWx1ZSxcbiAgICAgICAgICAgIHRvZGF5LmdldEhvdXJzKCksXG4gICAgICAgICAgICB0b2RheS5nZXRNaW51dGVzKCksXG4gICAgICAgICAgICB0b2RheS5nZXRTZWNvbmRzKClcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHRoaXMuX2NhbGVuZGFyU2VydmljZS50b2RheURheSkge1xuICAgICAgICAgICAgdGhpcy5zdGFydFNlbGVjdGVkRGF5ID0gdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLnRvZGF5RGF5O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5nb3RvVG9kYXkoKTtcbiAgICB9XG5cbiAgICBvbkRheUNsaWNrKGRheTogRGF5LCBwb3BvdmVyLCBkaWFsb2cpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc1ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdGFydFNlbGVjdGVkRGF5ID0gdGhpcy5lbmRTZWxlY3RlZERheSA9IGRheTtcbiAgICAgICAgaWYgKHRoaXMuc2hvd1RpbWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zZXRGaXJzdEFuZEVuZERheShkYXksIHBvcG92ZXIsIGRpYWxvZyk7XG4gICAgfVxuXG4gICAgb25Qb3BvdmVyT3BlbkNoYW5nZShpc09wZW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKGlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5fbGFzdFZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2xhc3RWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvbkNsZWFyKHBvcG92ZXIsIGRpYWxvZyk6IHZvaWQge1xuICAgICAgICBpZiAoZGlhbG9nKSB7XG4gICAgICAgICAgICBkaWFsb2cuZGlzbWlzcygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcG9wb3Zlci5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX3NldEZvcm1hdHRlZERhdGVUb0lucHV0KHRoaXMudmFsdWUpO1xuICAgICAgICB0aGlzLl9yYWlzVmFsdWVDaGFuZ2VkKHRoaXMudmFsdWUpO1xuICAgIH1cbiAgICBvbk9rKHBvcG92ZXIsIGRpYWxvZyk6IHZvaWQge1xuICAgICAgICBpZiAoZGlhbG9nKSB7XG4gICAgICAgICAgICBkaWFsb2cuZGlzbWlzcygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcG9wb3Zlci5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faGFuZGxlVmFsdWVDaGFuZ2UoKTtcbiAgICB9XG4gICAgb25DYW5jZWwocG9wb3ZlciwgZGlhbG9nKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9sYXN0VmFsdWUgIT09IHRoaXMudmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLl9sYXN0VmFsdWU7XG4gICAgICAgICAgICB0aGlzLl9zZXRDYXB0aW9uKHRoaXMudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkaWFsb2cpIHtcbiAgICAgICAgICAgIGRpYWxvZy5kaXNtaXNzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwb3BvdmVyLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZXRGb3JtYXR0ZWREYXRlVG9JbnB1dChkYXRlOiBEYXRlIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWREYXRlID0gdGhpcy5fZ2V0Rm9ybWF0dGVkRGF0ZShkYXRlKTtcbiAgICAgICAgICAgIHRoaXMudGVtcEZvcm1tYXRlZERhdGUgPSBmb3JtYXR0ZWREYXRlO1xuICAgICAgICAgICAgdGhpcy5fc2V0SW5wdXRHcm91cFRleHQoZm9ybWF0dGVkRGF0ZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50ZW1wRm9ybW1hdGVkRGF0ZSA9ICcnO1xuICAgICAgICB0aGlzLl9zZXRJbnB1dEdyb3VwVGV4dCgnJyk7XG4gICAgfVxuICAgIHByaXZhdGUgX3NldElucHV0R3JvdXBUZXh0KHZhbDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlucHV0R3JvdXBDb21wb25lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRHcm91cENvbXBvbmVudC5pbnB1dFRleHQgPSB2YWw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJpdmF0ZSBfZ2V0Rm9ybWF0dGVkRGF0ZShkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVUaW1lVG9DYXB0aW9uLnRyYW5zZm9ybShkYXRlLCB0aGlzLmZvcm1hdFBhdHRlcm4sIHRoaXMuY3VsdHVyZSwgdGhpcy5zaG93RGF0ZSwgdGhpcy5zaG93VGltZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaGFuZGxlVmFsdWVDaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnNob3dEYXRlID8gdGhpcy5zdGFydFNlbGVjdGVkRGF5Py5kYXRlID8/IHRoaXMudmFsdWUgOiBuZXcgRGF0ZSgpO1xuICAgICAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG5ldyBEYXRlKHRoaXMudmFsdWUpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRIb3Vycyh0aGlzLnRpbWVWYWx1ZS5ob3VyKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0TWludXRlcyh0aGlzLnRpbWVWYWx1ZS5taW51dGUpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRTZWNvbmRzKHRoaXMudGltZVZhbHVlLnNlY29uZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2V0Rm9ybWF0dGVkRGF0ZVRvSW5wdXQodGhpcy52YWx1ZSk7XG4gICAgICAgIHRoaXMuX3JhaXNWYWx1ZUNoYW5nZWQodGhpcy52YWx1ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgX3ByZXBhcmVZZWFyKGZyb206IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCB5ZWFyczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XG4gICAgICAgICAgICB5ZWFycy5wdXNoKGAke2Zyb20gKyBpfWApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMueWVhcnMgPSB5ZWFycztcbiAgICB9XG4gICAgcHJpdmF0ZSBfc2V0Q2FwdGlvbih2YWx1ZSk6IHZvaWQge1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlQ2FwdGlvbiA9ICcnO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBmb3JtYXRQYXR0ZXJuID0gdGhpcy5mb3JtYXRQYXR0ZXJuLnJlcGxhY2UoJ1lZWVknLCAnallZWVknKTtcbiAgICAgICAgZm9ybWF0UGF0dGVybiA9IGZvcm1hdFBhdHRlcm4ucmVwbGFjZSgnTU0nLCAnak1NJyk7XG4gICAgICAgIGZvcm1hdFBhdHRlcm4gPSBmb3JtYXRQYXR0ZXJuLnJlcGxhY2UoJ0REJywgJ2pERCcpO1xuICAgICAgICB0aGlzLnZhbHVlQ2FwdGlvbiA9IHRoaXMuX2NhbGVuZGFyU2VydmljZS5fZGF0ZVNlcnZpY2UuZ2V0TW9tZW50KHZhbHVlKS5mb3JtYXQoZm9ybWF0UGF0dGVybik7XG4gICAgfVxuICAgIHByaXZhdGUgX3JhaXNWYWx1ZUNoYW5nZWQoZGF0ZSwgc2V0Q2FwdGlvbiA9IHRydWUpOiB2b2lkIHtcbiAgICAgICAgLy8gdGhpcy52YWx1ZSA9IGRhdGU7XG4gICAgICAgIGlmIChzZXRDYXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRDYXB0aW9uKGRhdGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdChkYXRlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZXRGaXJzdEFuZEVuZERheShkYXk6IERheSwgcG9wb3ZlciwgZGlhbG9nKTogdm9pZCB7XG4gICAgICAgIGlmIChkaWFsb2cpIHtcbiAgICAgICAgICAgIGRpYWxvZy5kaXNtaXNzKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvcG92ZXIpIHtcbiAgICAgICAgICAgIHBvcG92ZXIuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuaXNSYW5nZVBpY2tlcikge1xuICAgICAgICAgICAgdGhpcy5fc2V0Rm9ybWF0dGVkRGF0ZVRvSW5wdXQoZGF5LmRhdGUpO1xuICAgICAgICAgICAgdGhpcy5fcmFpc1ZhbHVlQ2hhbmdlZChkYXkuZGF0ZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc3RhcnRTZWxlY3RlZERheSkge1xuICAgICAgICAgICAgdGhpcy5lbmRTZWxlY3RlZERheSA9IGRheTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRTZWxlY3RlZERheSA9IGRheTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zdGFydFNlbGVjdGVkRGF5ICYmIHRoaXMuZW5kU2VsZWN0ZWREYXkgJiYgdGhpcy5zdGFydFNlbGVjdGVkRGF5LmRhdGUgPiB0aGlzLmVuZFNlbGVjdGVkRGF5LmRhdGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHRlbXAgPSB0aGlzLnN0YXJ0U2VsZWN0ZWREYXk7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0U2VsZWN0ZWREYXkgPSB0aGlzLmVuZFNlbGVjdGVkRGF5O1xuICAgICAgICAgICAgdGhpcy5lbmRTZWxlY3RlZERheSA9IHRlbXA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc3RhcnRTZWxlY3RlZERheSAmJiB0aGlzLmVuZFNlbGVjdGVkRGF5KSB7XG4gICAgICAgICAgICB0aGlzLnJhbmdlQ2hhbmdlLmVtaXQoe1xuICAgICAgICAgICAgICAgIHN0YXJ0RGF5OiB0aGlzLnN0YXJ0U2VsZWN0ZWREYXkuZGF0ZSxcbiAgICAgICAgICAgICAgICBlbmREYXk6IHRoaXMuZW5kU2VsZWN0ZWREYXkuZGF0ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJAaWYgKGlubGluZU1vZGUpIHtcbjxuZy1jb250YWluZXJcbiAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICBkYXRlcmFuZ2VNb2RlID8gZGF0ZVJhbmdlVHBsIDogbW9udGg7XG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICRpbXBsaWNpdDogc2VsZWN0ZWRNb250aCQgfCBhc3luYyxcbiAgICAgICAgICAgIHdpZHRoOiB3aWR0aCQgfCBhc3luYyxcbiAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAgICAgICAgcnRsOiBydGwkIHwgYXN5bmMsXG4gICAgICAgICAgICB3ZWVrRGF5czogd2Vla0RheXMsXG4gICAgICAgICAgICB3ZWVrRGF5c01pbjogd2Vla0RheXNNaW4sXG4gICAgICAgICAgICB0b2RheTogdG9kYXksXG4gICAgICAgICAgICBkZXZpY2VTaXplOiBkZXZpY2VTaXplLFxuICAgICAgICAgICAgcG9wb3ZlcjogcG9wb3ZlclxuICAgICAgICB9XG4gICAgXCJcbj5cbjwvbmctY29udGFpbmVyPlxufVxuPG5nLXRlbXBsYXRlICNkYXRlUmFuZ2VUcGw+XG4gICAgPGJjLWNhbGVuZGFyLXNlbGVjdGlvbi1kYXlzXG4gICAgICAgIGZkLXRvb2xiYXItaXRlbVxuICAgICAgICBbaW5saW5lXT1cInRydWVcIlxuICAgICAgICBbbW9udGhJbmZvXT1cIihzZWxlY3RlZE1vbnRoJCB8IGFzeW5jKSEhXCJcbiAgICAgICAgKHJhbmdlQ2hhbmdlKT1cIm9uUmFuZ2VDaGFuZ2UoJGV2ZW50KVwiXG4gICAgPjwvYmMtY2FsZW5kYXItc2VsZWN0aW9uLWRheXM+XG48L25nLXRlbXBsYXRlPlxuPGZkLWlucHV0LWdyb3VwXG4gICAgcGxhY2VtZW50PVwiYWZ0ZXJcIlxuICAgIGdseXBoPVwiY2FsZW5kYXJcIlxuICAgIGdseXBoQXJpYUxhYmVsPVwic2VsZWN0IGRheVwiXG4gICAgYXJpYUxhYmVsbGVkQnk9XCJmZC1pbnB1dC1ncm91cC1pY29uLWxhYmVsLTJcIlxuICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICBbYnV0dG9uXT1cInRydWVcIlxuICAgIFtzdGF0ZV09XCJpc1ZhbGlkID8gJ3N1Y2Nlc3MnIDogJ2Vycm9yJ1wiXG4gICAgW3Nob3dGb2N1c109XCJ0cnVlXCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgW3N0eWxlLmRpc3BsYXldPVwiIWJ1dHRvbk1lbnVNb2RlIHx8IGlubGluZU1vZGUgPyAnaW5oZXJpdCcgOiAnbm9uZSdcIlxuICAgIChhZGRPbkJ1dHRvbkNsaWNrZWQpPVwib25PcGVuUG9wb3Zlcihwb3BvdmVyLCBkaWFsb2dUZW1wbGF0ZSlcIlxuPlxuPC9mZC1pbnB1dC1ncm91cD5cbkBpZiAoYnV0dG9uTWVudU1vZGUpIHtcbjxidXR0b25cbiAgICBmZC1idXR0b25cbiAgICBbbGFiZWxdPVwidGVtcEZvcm1tYXRlZERhdGUgfHwgcGxhY2Vob2xkZXJcIlxuICAgIFt0aXRsZV09XCJwbGFjZWhvbGRlclwiXG4gICAgW2ZkVHlwZV09XCJ2YWx1ZSA/ICdzdGFuZGFyZCcgOiAndHJhbnNwYXJlbnQnXCJcbiAgICBbZmRNZW51XT1cInRydWVcIlxuICAgIChjbGljayk9XCJvbk9wZW5Qb3BvdmVyKHBvcG92ZXIsIGRpYWxvZ1RlbXBsYXRlKVwiXG4gICAgW2NsYXNzLnBsYWNlaG9sZGVyLWN1c3RvbV09XCIhdmFsdWVcIlxuICAgIGNsYXNzPVwibWVudS1idXR0b24tZGF0ZXBpY2tlclwiXG4+PC9idXR0b24+XG59XG5cbjxmZC1wb3BvdmVyICNwb3BvdmVyIChpc09wZW5DaGFuZ2UpPVwib25Qb3BvdmVyT3BlbkNoYW5nZSgkZXZlbnQpXCIgW2ZvY3VzVHJhcHBlZF09XCJ0cnVlXCIgW2ZvY3VzQXV0b0NhcHR1cmVdPVwidHJ1ZVwiPlxuICAgIDxmZC1wb3BvdmVyLWJvZHkgW3N0eWxlLndpZHRoLnB4XT1cIndpZHRoJCB8IGFzeW5jXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgbW9udGg7XG4gICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IHNlbGVjdGVkTW9udGgkIHwgYXN5bmMsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiB3aWR0aCQgfCBhc3luYyxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgIHJ0bDogcnRsJCB8IGFzeW5jLFxuICAgICAgICAgICAgICAgICAgICB3ZWVrRGF5czogd2Vla0RheXMsXG4gICAgICAgICAgICAgICAgICAgIHdlZWtEYXlzTWluOiB3ZWVrRGF5c01pbixcbiAgICAgICAgICAgICAgICAgICAgdG9kYXk6IHRvZGF5LFxuICAgICAgICAgICAgICAgICAgICBkZXZpY2VTaXplOiBkZXZpY2VTaXplLFxuICAgICAgICAgICAgICAgICAgICBwb3BvdmVyOiBwb3BvdmVyXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdiBmZC1wb3BvdmVyLWJvZHktZm9vdGVyPlxuICAgICAgICAgICAgPGRpdiBmZC1iYXIgW2JhckRlc2lnbl09XCInZm9vdGVyJ1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgZmQtYmFyLXJpZ2h0PlxuICAgICAgICAgICAgICAgICAgICA8Y29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZm9vdGVyQnV0dG9uc1wiPjwvY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZmQtcG9wb3Zlci1ib2R5PlxuPC9mZC1wb3BvdmVyPlxuPG5nLXRlbXBsYXRlIGxldC1kaWFsb2cgbGV0LWRpYWxvZ0NvbmZpZz1cImRpYWxvZ0NvbmZpZ1wiICNkaWFsb2dUZW1wbGF0ZT5cbiAgICA8ZmQtZGlhbG9nIFtkaWFsb2dDb25maWddPVwiZGlhbG9nQ29uZmlnXCIgW2RpYWxvZ1JlZl09XCJkaWFsb2dcIj5cbiAgICAgICAgPGZkLWRpYWxvZy1ib2R5PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgIG1vbnRoO1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IHNlbGVjdGVkTW9udGgkIHwgYXN5bmMsXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogd2lkdGgkIHwgYXN5bmMsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ0bDogcnRsJCB8IGFzeW5jLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2Vla0RheXM6IHdlZWtEYXlzLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2Vla0RheXNNaW46IHdlZWtEYXlzTWluLFxuICAgICAgICAgICAgICAgICAgICAgICAgdG9kYXk6IHRvZGF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlU2l6ZTogZGV2aWNlU2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcG92ZXI6IHBvcG92ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBkaWFsb2c6IGRpYWxvZ1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2ZkLWRpYWxvZy1ib2R5PlxuICAgICAgICA8ZmQtZGlhbG9nLWZvb3Rlcj5cbiAgICAgICAgICAgIDxjb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmb290ZXJCdXR0b25zOyBjb250ZXh0OiB7IGRpYWxvZzogZGlhbG9nIH1cIj48L2NvbnRhaW5lcj5cbiAgICAgICAgPC9mZC1kaWFsb2ctZm9vdGVyPlxuICAgIDwvZmQtZGlhbG9nPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjZm9vdGVyQnV0dG9ucyBsZXQtZGlhbG9nPVwiZGlhbG9nXCI+XG4gICAgPGZkLWJ1dHRvbi1iYXIgW2xhYmVsXT1cIidPaycgfCBiYmJUcmFuc2xhdGVcIiBmZFR5cGU9XCJlbXBoYXNpemVkXCIgKGNsaWNrKT1cIm9uT2socG9wb3ZlciwgZGlhbG9nKVwiPjwvZmQtYnV0dG9uLWJhcj5cbiAgICA8ZmQtYnV0dG9uLWJhclxuICAgICAgICBbbGFiZWxdPVwiJ0NsZWFyJyB8IGJiYlRyYW5zbGF0ZVwiXG4gICAgICAgIGZkVHlwZT1cInN0YW5kYXJkXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uQ2xlYXIocG9wb3ZlciwgZGlhbG9nKVwiXG4gICAgPjwvZmQtYnV0dG9uLWJhcj5cbiAgICA8ZmQtYnV0dG9uLWJhciBbbGFiZWxdPVwiJ0NhbmNlbCcgfCBiYmJUcmFuc2xhdGVcIiAoY2xpY2spPVwib25DYW5jZWwocG9wb3ZlciwgZGlhbG9nKVwiPjwvZmQtYnV0dG9uLWJhcj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGVcbiAgICAjbW9udGhcbiAgICBsZXQtc2VsZWN0ZWRNb250aFxuICAgIGxldC13aWR0aD1cIndpZHRoXCJcbiAgICBsZXQtaGVpZ2h0PVwiaGVpZ2h0XCJcbiAgICBsZXQtcnRsPVwicnRsXCJcbiAgICBsZXQtdG9kYXk9XCJ0b2RheVwiXG4gICAgbGV0LXNob3dFdmVudHM9XCJzaG93RXZlbnRzXCJcbiAgICBsZXQtZGV2aWNlU2l6ZT1cImRldmljZVNpemVcIlxuICAgIGxldC1wb3BvdmVyPVwicG9wb3ZlclwiXG4gICAgbGV0LWRpYWxvZz1cImRpYWxvZ1wiXG4+XG4gICAgQGlmIChzaG93RGF0ZSkge1xuICAgIDxmZC10b29sYmFyIFtmZFR5cGVdPVwiJ3RyYW5zcGFyZW50J1wiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgIGZkLXRvb2xiYXItaXRlbVxuICAgICAgICAgICAgW2xhYmVsXT1cIihzaG93RGF0ZSA/ICdEYXRlUl9Ub2RheScgOiAnTm93JykgfCBiYmJUcmFuc2xhdGVcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uVG9kYXkoKVwiXG4gICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgQGlmIChzaG93RGF0ZSkge1xuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgIGZkLXRvb2xiYXItaXRlbVxuICAgICAgICAgICAgW2ZkVHlwZV09XCIndHJhbnNwYXJlbnQnXCJcbiAgICAgICAgICAgIFtnbHlwaF09XCJydGwgPyAnbmF2aWdhdGlvbi1yaWdodC1hcnJvdycgOiAnbmF2aWdhdGlvbi1sZWZ0LWFycm93J1wiXG4gICAgICAgICAgICAoY2xpY2spPVwib25QcmV2VGFwKClcIlxuICAgICAgICA+PC9idXR0b24+XG4gICAgICAgIH0gQGlmIChzaG93RGF0ZSkge1xuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgIGZkLXRvb2xiYXItaXRlbVxuICAgICAgICAgICAgW2ZkVHlwZV09XCIndHJhbnNwYXJlbnQnXCJcbiAgICAgICAgICAgIFtnbHlwaF09XCJydGwgPyAnbmF2aWdhdGlvbi1sZWZ0LWFycm93JyA6ICduYXZpZ2F0aW9uLXJpZ2h0LWFycm93J1wiXG4gICAgICAgICAgICAoY2xpY2spPVwib25OZXh0VGFwKClcIlxuICAgICAgICA+PC9idXR0b24+XG4gICAgICAgIH0gQGlmIChzaG93RGF0ZSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwibW9udGgteWVhcnMtd3JhcHBlclwiIGZkLXRpdGxlIGZkLXRvb2xiYXItaXRlbT5cbiAgICAgICAgICAgIEBpZiAoc2VsZWN0aW9uTW9kZSA9PT0gJ2RheScgfHwgc2VsZWN0aW9uTW9kZSA9PT0gJ21vbnRoJykge1xuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgIFtmZFR5cGVdPVwiJ3RyYW5zcGFyZW50J1wiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cInNlbGVjdGVkTW9udGguZGF0ZUluZm8ubW9udGhOYW1lXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0aW9uTW9kZSA9ICdtb250aCdcIlxuICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgIFtmZFR5cGVdPVwiJ3RyYW5zcGFyZW50J1wiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cInNlbGVjdGVkTW9udGguZGF0ZUluZm8ueWVhclwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdGlvbk1vZGUgPSAneWVhcidcIlxuICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgIDwvZmQtdG9vbGJhcj5cbiAgICB9XG4gICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXhcIj5cbiAgICAgICAgQHN3aXRjaCAoc2VsZWN0aW9uTW9kZSkgeyBAY2FzZSAoJ21vbnRoJykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwibW9udGgteWVhci1zZWxlY3Rpb24td3JhcHBlclwiPlxuICAgICAgICAgICAgQGZvciAobW9udGggb2YgbW9udGhzOyB0cmFjayBtb250aDsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBzdHlsZT1cImZsZXgtZ3JvdzogMTsgd2lkdGg6IDMzJVwiXG4gICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgW2ZkVHlwZV09XCJzZWxlY3RlZE1vbnRoLmRhdGVJbmZvLm1vbnRoTmFtZSA9PT0gbW9udGggPyAnZW1waGFzaXplZCcgOiAndHJhbnNwYXJlbnQnXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwibW9udGhcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3Rpb25Nb2RlID0gJ2RheSc7IG9uTW9udGhTZWxlY3RlZChtb250aCwgaSlcIlxuICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgfSBAY2FzZSAoJ3llYXInKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb250aC15ZWFyLXNlbGVjdGlvbi13cmFwcGVyXCI+XG4gICAgICAgICAgICBAZm9yICh5ZWFyIG9mIHllYXJzOyB0cmFjayB5ZWFyKSB7XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJmbGV4LWdyb3c6IDE7IHdpZHRoOiAyNSVcIlxuICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgIFtmZFR5cGVdPVwic2VsZWN0ZWRNb250aC5kYXRlSW5mby55ZWFyID09PSAreWVhciA/ICdlbXBoYXNpemVkJyA6ICd0cmFuc3BhcmVudCdcIlxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJ5ZWFyXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0aW9uTW9kZSA9ICdkYXknOyBvblllYXJTZWxlY3RlZCh5ZWFyKVwiXG4gICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB9IEBkZWZhdWx0IHtcbiAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXhcIj5cbiAgICAgICAgICAgIEBpZiAoc2hvd0RhdGUpIHtcbiAgICAgICAgICAgIDxiYy1jYWxlbmRhci1tb250aFxuICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJ3aWR0aFwiXG4gICAgICAgICAgICAgICAgW2NvbnRhaW5lckhlaWdodF09XCJoZWlnaHRcIlxuICAgICAgICAgICAgICAgIFtjb250YWluZXJXaWR0aF09XCJ3aWR0aFwiXG4gICAgICAgICAgICAgICAgW3J0bF09XCJydGxcIlxuICAgICAgICAgICAgICAgIFttb250aFdlZWtzQ291bnRdPVwic2VsZWN0ZWRNb250aC53ZWVrc0NvdW50XCJcbiAgICAgICAgICAgICAgICBbd2Vla0RheXNdPVwid2Vla0RheXNcIlxuICAgICAgICAgICAgICAgIFt3ZWVrRGF5c01pbl09XCJ3ZWVrRGF5c01pblwiXG4gICAgICAgICAgICAgICAgW3RvZGF5XT1cInRvZGF5XCJcbiAgICAgICAgICAgICAgICBbZGF0ZVBpY2tlcl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbZGF0ZVJhbmdlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtzZWxlY3RlZERhdGVdPVwic3RhcnRTZWxlY3RlZERheSA/IHN0YXJ0U2VsZWN0ZWREYXkuZGF0ZSA6IHZhbHVlXCJcbiAgICAgICAgICAgICAgICBbZGF5c109XCJzZWxlY3RlZE1vbnRoLmRheXNcIlxuICAgICAgICAgICAgICAgIFtkZXZpY2VTaXplXT1cImRldmljZVNpemVcIlxuICAgICAgICAgICAgICAgIChkYXlDbGljayk9XCJvbkRheUNsaWNrKCRldmVudCwgcG9wb3ZlciwgZGlhbG9nKVwiXG4gICAgICAgICAgICA+PC9iYy1jYWxlbmRhci1tb250aD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZXBlcmF0b3JcIj48L2Rpdj5cbiAgICAgICAgICAgIEBpZiAoc2hvd1RpbWUpIHtcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGZkLXRpbWVcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJkaXJlY3Rpb246IGx0clwiXG4gICAgICAgICAgICAgICAgICAgIGZkQ29tcGFjdFxuICAgICAgICAgICAgICAgICAgICBba2VlcFR3b0RpZ2l0c109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ0aW1lVmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzcGxheVNlY29uZHNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgID48L2ZkLXRpbWU+XG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGdhcDogMC4ycmVtOyBwYWRkaW5nOiAwLjVyZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBmZC1mb3JtLWNvbnRyb2xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicmVtb3ZlLWFycm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDNyZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInRpbWVWYWx1ZT8ubWludXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4VmFsdWU9XCIyM1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwib25NaW51dGVUZXh0Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIGZkLWZvcm0tY29udHJvbFxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogM3JlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJlbW92ZS1hcnJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidGltZVZhbHVlPy5ob3VyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4VmFsdWU9XCI1OVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwib25Ib3VyVGV4dENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgfSB9XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|