nxt-pick-datetime 18.0.0 → 19.0.4
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/nxt-pick-datetime-moment-adapter.mjs +23 -26
- package/fesm2022/nxt-pick-datetime-moment-adapter.mjs.map +1 -1
- package/fesm2022/nxt-pick-datetime-native-adapter.mjs +22 -24
- package/fesm2022/nxt-pick-datetime-native-adapter.mjs.map +1 -1
- package/fesm2022/nxt-pick-datetime.mjs +76 -74
- package/fesm2022/nxt-pick-datetime.mjs.map +1 -1
- package/lib/class/date-time.class.d.ts +1 -1
- package/moment-adapter/moment-adapter.module.d.ts +2 -0
- package/moment-adapter/public-api.d.ts +1 -1
- package/native-adapter/native-adapter.module.d.ts +2 -0
- package/native-adapter/public-api.d.ts +1 -1
- package/package.json +9 -14
- package/esm2022/lib/class/date-time-adapter.class.mjs +0 -97
- package/esm2022/lib/class/date-time-format.class.mjs +0 -4
- package/esm2022/lib/class/date-time.class.mjs +0 -95
- package/esm2022/lib/class/dialog-config.class.mjs +0 -47
- package/esm2022/lib/class/dialog-ref.class.mjs +0 -119
- package/esm2022/lib/date-time/calendar/calendar.component.mjs +0 -346
- package/esm2022/lib/date-time/calendar-body/calendar-body.component.mjs +0 -151
- package/esm2022/lib/date-time/calendar-month-view/calendar-month-view.component.mjs +0 -429
- package/esm2022/lib/date-time/calendar-multi-year-view/calendar-multi-year-view.component.mjs +0 -358
- package/esm2022/lib/date-time/calendar-year-view/calendar-year-view.component.mjs +0 -362
- package/esm2022/lib/date-time/date-time-inline/date-time-inline.component.mjs +0 -275
- package/esm2022/lib/date-time/date-time-picker/date-time-picker.component.mjs +0 -541
- package/esm2022/lib/date-time/date-time-picker-container/date-time-picker-container.animations.mjs +0 -19
- package/esm2022/lib/date-time/date-time-picker-container/date-time-picker-container.component.mjs +0 -389
- package/esm2022/lib/date-time/date-time-picker-input.directive.mjs +0 -618
- package/esm2022/lib/date-time/date-time-picker-intl.service.mjs +0 -61
- package/esm2022/lib/date-time/date-time-picker-trigger.directive.mjs +0 -70
- package/esm2022/lib/date-time/date-time.module.mjs +0 -96
- package/esm2022/lib/date-time/number-fixed-len.pipe.mjs +0 -22
- package/esm2022/lib/date-time/timer/timer.component.mjs +0 -299
- package/esm2022/lib/date-time/timer-box/timer-box.component.mjs +0 -95
- package/esm2022/lib/dialog/dialog-container/dialog-container.component.mjs +0 -248
- package/esm2022/lib/dialog/dialog.module.mjs +0 -42
- package/esm2022/lib/dialog/dialog.service.mjs +0 -251
- package/esm2022/lib/utils/object.mjs +0 -24
- package/esm2022/moment-adapter/date-time-adapter.class.mjs +0 -220
- package/esm2022/moment-adapter/date-time-format.class.mjs +0 -13
- package/esm2022/moment-adapter/moment-adapter.module.mjs +0 -37
- package/esm2022/moment-adapter/nxt-pick-datetime-moment-adapter.mjs +0 -5
- package/esm2022/moment-adapter/public-api.mjs +0 -3
- package/esm2022/native-adapter/date-time-adapter.class.mjs +0 -366
- package/esm2022/native-adapter/date-time-format.class.mjs +0 -13
- package/esm2022/native-adapter/native-adapter.module.mjs +0 -37
- package/esm2022/native-adapter/nxt-pick-datetime-native-adapter.mjs +0 -5
- package/esm2022/native-adapter/public-api.mjs +0 -2
- package/esm2022/nxt-pick-datetime.mjs +0 -5
- package/esm2022/public-api.mjs +0 -14
package/esm2022/lib/date-time/calendar-multi-year-view/calendar-multi-year-view.component.mjs
DELETED
|
@@ -1,358 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, Input, Output, ViewChild } from '@angular/core';
|
|
2
|
-
import { CalendarCell, CalendarBodyComponent } from '../calendar-body/calendar-body.component';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "../date-time-picker-intl.service";
|
|
5
|
-
import * as i2 from "../../class/date-time-adapter.class";
|
|
6
|
-
import * as i3 from "../calendar-body/calendar-body.component";
|
|
7
|
-
/** @internal */
|
|
8
|
-
export const YEARS_PER_ROW = 3;
|
|
9
|
-
/** @internal */
|
|
10
|
-
export const YEAR_ROWS = 7;
|
|
11
|
-
export class MultiYearViewComponent {
|
|
12
|
-
get selectMode() {
|
|
13
|
-
return this._selectMode;
|
|
14
|
-
}
|
|
15
|
-
set selectMode(val) {
|
|
16
|
-
this._selectMode = val;
|
|
17
|
-
if (this.initiated) {
|
|
18
|
-
this.setSelectedYears();
|
|
19
|
-
this.cdRef.markForCheck();
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
get selected() {
|
|
23
|
-
return this._selected;
|
|
24
|
-
}
|
|
25
|
-
set selected(value) {
|
|
26
|
-
const oldSelected = this._selected;
|
|
27
|
-
value = this.dateTimeAdapter.deserialize(value);
|
|
28
|
-
this._selected = this.getValidDate(value);
|
|
29
|
-
if (!this.dateTimeAdapter.isSameDay(oldSelected, this._selected)) {
|
|
30
|
-
this.setSelectedYears();
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
get selecteds() {
|
|
34
|
-
return this._selecteds;
|
|
35
|
-
}
|
|
36
|
-
set selecteds(values) {
|
|
37
|
-
this._selecteds = values.map((v) => {
|
|
38
|
-
v = this.dateTimeAdapter.deserialize(v);
|
|
39
|
-
return this.getValidDate(v);
|
|
40
|
-
});
|
|
41
|
-
this.setSelectedYears();
|
|
42
|
-
}
|
|
43
|
-
get pickerMoment() {
|
|
44
|
-
return this._pickerMoment;
|
|
45
|
-
}
|
|
46
|
-
set pickerMoment(value) {
|
|
47
|
-
const oldMoment = this._pickerMoment;
|
|
48
|
-
value = this.dateTimeAdapter.deserialize(value);
|
|
49
|
-
this._pickerMoment = this.getValidDate(value) || this.dateTimeAdapter.now();
|
|
50
|
-
if (oldMoment && this._pickerMoment &&
|
|
51
|
-
!this.isSameYearList(oldMoment, this._pickerMoment)) {
|
|
52
|
-
this.generateYearList();
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
get dateTimeFilter() {
|
|
56
|
-
return this._dateTimeFilter;
|
|
57
|
-
}
|
|
58
|
-
set dateTimeFilter(filter) {
|
|
59
|
-
this._dateTimeFilter = filter;
|
|
60
|
-
if (this.initiated) {
|
|
61
|
-
this.generateYearList();
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
get min() {
|
|
65
|
-
return this._minDate;
|
|
66
|
-
}
|
|
67
|
-
set min(value) {
|
|
68
|
-
value = this.dateTimeAdapter.deserialize(value);
|
|
69
|
-
this._minDate = this.getValidDate(value);
|
|
70
|
-
if (this.initiated) {
|
|
71
|
-
this.generateYearList();
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
get max() {
|
|
75
|
-
return this._maxDate;
|
|
76
|
-
}
|
|
77
|
-
set max(value) {
|
|
78
|
-
value = this.dateTimeAdapter.deserialize(value);
|
|
79
|
-
this._maxDate = this.getValidDate(value);
|
|
80
|
-
if (this.initiated) {
|
|
81
|
-
this.generateYearList();
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
get todayYear() {
|
|
85
|
-
return this._todayYear;
|
|
86
|
-
}
|
|
87
|
-
get years() {
|
|
88
|
-
return this._years;
|
|
89
|
-
}
|
|
90
|
-
get selectedYears() {
|
|
91
|
-
return this._selectedYears;
|
|
92
|
-
}
|
|
93
|
-
get isInSingleMode() {
|
|
94
|
-
return this.selectMode === 'single';
|
|
95
|
-
}
|
|
96
|
-
get isInRangeMode() {
|
|
97
|
-
return this.selectMode === 'range' || this.selectMode === 'rangeFrom'
|
|
98
|
-
|| this.selectMode === 'rangeTo';
|
|
99
|
-
}
|
|
100
|
-
get activeCell() {
|
|
101
|
-
if (this._pickerMoment) {
|
|
102
|
-
return this.dateTimeAdapter.getYear(this._pickerMoment) % (YEARS_PER_ROW * YEAR_ROWS);
|
|
103
|
-
}
|
|
104
|
-
return;
|
|
105
|
-
}
|
|
106
|
-
get tableHeader() {
|
|
107
|
-
if (this._years && this._years.length > 0) {
|
|
108
|
-
return `${this._years[0][0].displayValue} ~ ${this._years[YEAR_ROWS - 1][YEARS_PER_ROW - 1].displayValue}`;
|
|
109
|
-
}
|
|
110
|
-
return;
|
|
111
|
-
}
|
|
112
|
-
get prevButtonLabel() {
|
|
113
|
-
return this.pickerIntl.prevMultiYearLabel;
|
|
114
|
-
}
|
|
115
|
-
get nextButtonLabel() {
|
|
116
|
-
return this.pickerIntl.nextMultiYearLabel;
|
|
117
|
-
}
|
|
118
|
-
/** @internal */
|
|
119
|
-
get calendarView() {
|
|
120
|
-
return true;
|
|
121
|
-
}
|
|
122
|
-
/** @internal */
|
|
123
|
-
get calendarMultiYearView() {
|
|
124
|
-
return true;
|
|
125
|
-
}
|
|
126
|
-
constructor(cdRef, pickerIntl, dateTimeAdapter) {
|
|
127
|
-
this.cdRef = cdRef;
|
|
128
|
-
this.pickerIntl = pickerIntl;
|
|
129
|
-
this.dateTimeAdapter = dateTimeAdapter;
|
|
130
|
-
/**
|
|
131
|
-
* The select mode of the picker;
|
|
132
|
-
*/
|
|
133
|
-
this._selectMode = 'single';
|
|
134
|
-
this._selecteds = new Array();
|
|
135
|
-
this.initiated = false;
|
|
136
|
-
/**
|
|
137
|
-
* Callback to invoke when a new month is selected
|
|
138
|
-
*/
|
|
139
|
-
// eslint-disable-next-line @angular-eslint/no-output-native
|
|
140
|
-
this.change = new EventEmitter();
|
|
141
|
-
/**
|
|
142
|
-
* Emits the selected year
|
|
143
|
-
*
|
|
144
|
-
* This doesn't imply a change on the selected date.
|
|
145
|
-
*/
|
|
146
|
-
this.yearSelected = new EventEmitter();
|
|
147
|
-
/** Emits when any date is activated */
|
|
148
|
-
this.pickerMomentChange = new EventEmitter();
|
|
149
|
-
/** Emits when use keyboard enter to select a calendar cell */
|
|
150
|
-
this.keyboardEnter = new EventEmitter();
|
|
151
|
-
}
|
|
152
|
-
ngOnInit() {
|
|
153
|
-
}
|
|
154
|
-
ngAfterContentInit() {
|
|
155
|
-
this._todayYear = this.dateTimeAdapter.getYear(this.dateTimeAdapter.now());
|
|
156
|
-
this.generateYearList();
|
|
157
|
-
this.initiated = true;
|
|
158
|
-
}
|
|
159
|
-
/**
|
|
160
|
-
* Handle a calendarCell selected
|
|
161
|
-
*/
|
|
162
|
-
selectCalendarCell(cell) {
|
|
163
|
-
this.selectYear(cell.value);
|
|
164
|
-
}
|
|
165
|
-
selectYear(year) {
|
|
166
|
-
this.yearSelected.emit(this.dateTimeAdapter.createDate(year, 0, 1));
|
|
167
|
-
const firstDateOfMonth = this.dateTimeAdapter.createDate(year, this.dateTimeAdapter.getMonth(this.pickerMoment), 1);
|
|
168
|
-
const daysInMonth = this.dateTimeAdapter.getNumDaysInMonth(firstDateOfMonth);
|
|
169
|
-
const selected = this.dateTimeAdapter.createDate(year, this.dateTimeAdapter.getMonth(this.pickerMoment), Math.min(daysInMonth, this.dateTimeAdapter.getDate(this.pickerMoment)), this.dateTimeAdapter.getHours(this.pickerMoment), this.dateTimeAdapter.getMinutes(this.pickerMoment), this.dateTimeAdapter.getSeconds(this.pickerMoment));
|
|
170
|
-
this.change.emit(selected);
|
|
171
|
-
}
|
|
172
|
-
/**
|
|
173
|
-
* Generate the previous year list
|
|
174
|
-
*/
|
|
175
|
-
prevYearList(event) {
|
|
176
|
-
this._pickerMoment = this.dateTimeAdapter.addCalendarYears(this.pickerMoment, -1 * YEAR_ROWS * YEARS_PER_ROW);
|
|
177
|
-
this.generateYearList();
|
|
178
|
-
event.preventDefault();
|
|
179
|
-
}
|
|
180
|
-
/**
|
|
181
|
-
* Generate the next year list
|
|
182
|
-
*/
|
|
183
|
-
nextYearList(event) {
|
|
184
|
-
this._pickerMoment = this.dateTimeAdapter.addCalendarYears(this.pickerMoment, YEAR_ROWS * YEARS_PER_ROW);
|
|
185
|
-
this.generateYearList();
|
|
186
|
-
event.preventDefault();
|
|
187
|
-
}
|
|
188
|
-
generateYearList() {
|
|
189
|
-
this._years = [];
|
|
190
|
-
const pickerMomentYear = this.dateTimeAdapter.getYear(this._pickerMoment);
|
|
191
|
-
const offset = pickerMomentYear % (YEARS_PER_ROW * YEAR_ROWS);
|
|
192
|
-
for (let i = 0; i < YEAR_ROWS; i++) {
|
|
193
|
-
const row = [];
|
|
194
|
-
for (let j = 0; j < YEARS_PER_ROW; j++) {
|
|
195
|
-
const year = pickerMomentYear - offset + (j + i * YEARS_PER_ROW);
|
|
196
|
-
const yearCell = this.createYearCell(year);
|
|
197
|
-
row.push(yearCell);
|
|
198
|
-
}
|
|
199
|
-
this._years.push(row);
|
|
200
|
-
}
|
|
201
|
-
return;
|
|
202
|
-
}
|
|
203
|
-
/** Whether the previous period button is enabled */
|
|
204
|
-
previousEnabled() {
|
|
205
|
-
if (!this.min) {
|
|
206
|
-
return true;
|
|
207
|
-
}
|
|
208
|
-
return !this.min || !this.isSameYearList(this._pickerMoment, this.min);
|
|
209
|
-
}
|
|
210
|
-
/** Whether the next period button is enabled */
|
|
211
|
-
nextEnabled() {
|
|
212
|
-
return !this.max || !this.isSameYearList(this._pickerMoment, this.max);
|
|
213
|
-
}
|
|
214
|
-
handleCalendarKeydown(event) {
|
|
215
|
-
let moment;
|
|
216
|
-
switch (event.code.toLowerCase()) {
|
|
217
|
-
// minus 1 year
|
|
218
|
-
case 'arrowleft':
|
|
219
|
-
moment = this.dateTimeAdapter.addCalendarYears(this._pickerMoment, -1);
|
|
220
|
-
this.pickerMomentChange.emit(moment);
|
|
221
|
-
break;
|
|
222
|
-
// add 1 year
|
|
223
|
-
case 'arrowright':
|
|
224
|
-
moment = this.dateTimeAdapter.addCalendarYears(this._pickerMoment, 1);
|
|
225
|
-
this.pickerMomentChange.emit(moment);
|
|
226
|
-
break;
|
|
227
|
-
// minus 3 years
|
|
228
|
-
case 'arrowup':
|
|
229
|
-
moment = this.dateTimeAdapter.addCalendarYears(this._pickerMoment, -1 * YEARS_PER_ROW);
|
|
230
|
-
this.pickerMomentChange.emit(moment);
|
|
231
|
-
break;
|
|
232
|
-
// add 3 years
|
|
233
|
-
case 'arrowdown':
|
|
234
|
-
moment = this.dateTimeAdapter.addCalendarYears(this._pickerMoment, YEARS_PER_ROW);
|
|
235
|
-
this.pickerMomentChange.emit(moment);
|
|
236
|
-
break;
|
|
237
|
-
// go to the first year of the year page
|
|
238
|
-
case 'home':
|
|
239
|
-
moment = this.dateTimeAdapter.addCalendarYears(this._pickerMoment, -this.dateTimeAdapter.getYear(this._pickerMoment) % (YEARS_PER_ROW * YEAR_ROWS));
|
|
240
|
-
this.pickerMomentChange.emit(moment);
|
|
241
|
-
break;
|
|
242
|
-
// go to the last year of the year page
|
|
243
|
-
case 'end':
|
|
244
|
-
moment = this.dateTimeAdapter.addCalendarYears(this._pickerMoment, (YEARS_PER_ROW * YEAR_ROWS) - this.dateTimeAdapter.getYear(this._pickerMoment) % (YEARS_PER_ROW * YEAR_ROWS) - 1);
|
|
245
|
-
this.pickerMomentChange.emit(moment);
|
|
246
|
-
break;
|
|
247
|
-
// minus 1 year page (or 10 year pages)
|
|
248
|
-
case 'pageup':
|
|
249
|
-
moment = this.dateTimeAdapter.addCalendarYears(this.pickerMoment, event.altKey ? -10 * (YEARS_PER_ROW * YEAR_ROWS) : -1 * (YEARS_PER_ROW * YEAR_ROWS));
|
|
250
|
-
this.pickerMomentChange.emit(moment);
|
|
251
|
-
break;
|
|
252
|
-
// add 1 year page (or 10 year pages)
|
|
253
|
-
case 'pagedown':
|
|
254
|
-
moment = this.dateTimeAdapter.addCalendarYears(this.pickerMoment, event.altKey ? 10 * (YEARS_PER_ROW * YEAR_ROWS) : (YEARS_PER_ROW * YEAR_ROWS));
|
|
255
|
-
this.pickerMomentChange.emit(moment);
|
|
256
|
-
break;
|
|
257
|
-
case 'enter':
|
|
258
|
-
this.selectYear(this.dateTimeAdapter.getYear(this._pickerMoment));
|
|
259
|
-
this.keyboardEnter.emit();
|
|
260
|
-
break;
|
|
261
|
-
default:
|
|
262
|
-
return;
|
|
263
|
-
}
|
|
264
|
-
this.focusActiveCell();
|
|
265
|
-
event.preventDefault();
|
|
266
|
-
}
|
|
267
|
-
/**
|
|
268
|
-
* Creates an CalendarCell for the given year.
|
|
269
|
-
*/
|
|
270
|
-
createYearCell(year) {
|
|
271
|
-
const startDateOfYear = this.dateTimeAdapter.createDate(year, 0, 1);
|
|
272
|
-
const ariaLabel = this.dateTimeAdapter.getYearName(startDateOfYear);
|
|
273
|
-
const cellClass = 'nxt-dt-year-' + year;
|
|
274
|
-
return new CalendarCell(year, year.toString(), ariaLabel, this.isYearEnabled(year), false, cellClass);
|
|
275
|
-
}
|
|
276
|
-
setSelectedYears() {
|
|
277
|
-
this._selectedYears = [];
|
|
278
|
-
if (this.isInSingleMode && this.selected) {
|
|
279
|
-
this._selectedYears[0] = this.dateTimeAdapter.getYear(this.selected);
|
|
280
|
-
}
|
|
281
|
-
if (this.isInRangeMode && this.selecteds) {
|
|
282
|
-
this._selectedYears = this.selecteds.map((selected) => {
|
|
283
|
-
if (this.dateTimeAdapter.isValid(selected)) {
|
|
284
|
-
return this.dateTimeAdapter.getYear(selected);
|
|
285
|
-
}
|
|
286
|
-
return;
|
|
287
|
-
});
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
/** Whether the given year is enabled */
|
|
291
|
-
isYearEnabled(year) {
|
|
292
|
-
// enable if it reaches here and there's no filter defined
|
|
293
|
-
if (!this.dateTimeFilter) {
|
|
294
|
-
return true;
|
|
295
|
-
}
|
|
296
|
-
const firstOfYear = this.dateTimeAdapter.createDate(year, 0, 1);
|
|
297
|
-
// If any date in the year is enabled count the year as enabled.
|
|
298
|
-
for (let date = firstOfYear; this.dateTimeAdapter.getYear(date) == year; date = this.dateTimeAdapter.addCalendarDays(date, 1)) {
|
|
299
|
-
if (this.dateTimeFilter(date, 'year')) {
|
|
300
|
-
return true;
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
return false;
|
|
304
|
-
}
|
|
305
|
-
isSameYearList(date1, date2) {
|
|
306
|
-
return Math.floor(this.dateTimeAdapter.getYear(date1) / (YEARS_PER_ROW * YEAR_ROWS)) ===
|
|
307
|
-
Math.floor(this.dateTimeAdapter.getYear(date2) / (YEARS_PER_ROW * YEAR_ROWS));
|
|
308
|
-
}
|
|
309
|
-
/**
|
|
310
|
-
* Get a valid date object
|
|
311
|
-
*/
|
|
312
|
-
getValidDate(obj) {
|
|
313
|
-
return (this.dateTimeAdapter.isDateInstance(obj) && this.dateTimeAdapter.isValid(obj))
|
|
314
|
-
? obj
|
|
315
|
-
: undefined;
|
|
316
|
-
}
|
|
317
|
-
focusActiveCell() {
|
|
318
|
-
this.calendarBodyElm?.focusActiveCell();
|
|
319
|
-
}
|
|
320
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: MultiYearViewComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.DateTimeIntl }, { token: i2.DateTimeAdapter }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
321
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.1", type: MultiYearViewComponent, selector: "nxt-date-time-multi-year-view", inputs: { selectMode: "selectMode", selected: "selected", selecteds: "selecteds", pickerMoment: "pickerMoment", dateTimeFilter: "dateTimeFilter", min: "min", max: "max" }, outputs: { change: "change", yearSelected: "yearSelected", pickerMomentChange: "pickerMomentChange", keyboardEnter: "keyboardEnter" }, host: { properties: { "class.nxt-dt-calendar-view": "this.calendarView", "class.nxt-dt-calendar-multi-year-view": "this.calendarMultiYearView" } }, viewQueries: [{ propertyName: "calendarBodyElm", first: true, predicate: CalendarBodyComponent, descendants: true, static: true }], ngImport: i0, template: "<button class=\"nxt-dt-control-button nxt-dt-control-arrow-button\"\r\n [disabled]=\"!previousEnabled()\"\r\n [attr.aria-label]=\"prevButtonLabel\"\r\n type=\"button\"\r\n tabindex=\"0\"\r\n (click)=\"prevYearList($event)\">\r\n <span class=\"nxt-dt-control-button-content\"\r\n tabindex=\"-1\">\r\n <!-- <editor-fold desc=\"SVG Arrow Left\"> -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n version=\"1.1\"\r\n x=\"0px\"\r\n y=\"0px\"\r\n viewBox=\"0 0 250.738 250.738\"\r\n style=\"enable-background:new 0 0 250.738 250.738;\"\r\n xml:space=\"preserve\"\r\n width=\"100%\"\r\n height=\"100%\">\r\n <path style=\"fill-rule: evenodd; clip-rule: evenodd;\"\r\n d=\"M96.633,125.369l95.053-94.533c7.101-7.055,7.101-18.492,0-25.546 c-7.1-7.054-18.613-7.054-25.714,0L58.989,111.689c-3.784,3.759-5.487,8.759-5.238,13.68c-0.249,4.922,1.454,9.921,5.238,13.681 l106.983,106.398c7.101,7.055,18.613,7.055,25.714,0c7.101-7.054,7.101-18.491,0-25.544L96.633,125.369z\" />\r\n </svg>\r\n <!-- </editor-fold> -->\r\n </span>\r\n</button>\r\n<table class=\"nxt-dt-calendar-table nxt-dt-calendar-multi-year-table\">\r\n <thead class=\"nxt-dt-calendar-header\">\r\n <tr>\r\n <th colspan=\"3\">{{tableHeader}}</th>\r\n </tr>\r\n </thead>\r\n <tbody nxtDateTimeCalendarBody\r\n role=\"grid\"\r\n [rows]=\"years\"\r\n [numCols]=\"3\"\r\n [cellRatio]=\"3 / 7\"\r\n [activeCell]=\"activeCell ?? 0\"\r\n [todayValue]=\"todayYear\"\r\n [selectedValues]=\"selectedYears\"\r\n [selectMode]=\"selectMode\"\r\n (keydown)=\"handleCalendarKeydown($event)\"\r\n (select)=\"selectCalendarCell($event)\"></tbody>\r\n</table>\r\n<button class=\"nxt-dt-control-button nxt-dt-control-arrow-button\"\r\n [disabled]=\"!nextEnabled()\"\r\n [attr.aria-label]=\"nextButtonLabel\"\r\n type=\"button\"\r\n tabindex=\"0\"\r\n (click)=\"nextYearList($event)\">\r\n <span class=\"nxt-dt-control-button-content\"\r\n tabindex=\"-1\">\r\n <!-- <editor-fold desc=\"SVG Arrow Right\"> -->\r\n <svg version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n x=\"0px\"\r\n y=\"0px\"\r\n viewBox=\"0 0 250.738 250.738\"\r\n style=\"enable-background:new 0 0 250.738 250.738;\"\r\n xml:space=\"preserve\">\r\n <path style=\"fill-rule:evenodd;clip-rule:evenodd;\"\r\n d=\"M191.75,111.689L84.766,5.291c-7.1-7.055-18.613-7.055-25.713,0\r\n c-7.101,7.054-7.101,18.49,0,25.544l95.053,94.534l-95.053,94.533c-7.101,7.054-7.101,18.491,0,25.545\r\n c7.1,7.054,18.613,7.054,25.713,0L191.75,139.05c3.784-3.759,5.487-8.759,5.238-13.681\r\n C197.237,120.447,195.534,115.448,191.75,111.689z\" />\r\n </svg>\r\n <!-- </editor-fold> -->\r\n </span>\r\n</button>\r\n", styles: [""], dependencies: [{ kind: "component", type: i3.CalendarBodyComponent, selector: "[nxtDateTimeCalendarBody]", inputs: ["activeCell", "rows", "numCols", "cellRatio", "todayValue", "selectedValues", "selectMode"], outputs: ["select"], exportAs: ["nxtDateTimeCalendarBody"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
322
|
-
}
|
|
323
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: MultiYearViewComponent, decorators: [{
|
|
324
|
-
type: Component,
|
|
325
|
-
args: [{ selector: 'nxt-date-time-multi-year-view', preserveWhitespaces: false, changeDetection: ChangeDetectionStrategy.OnPush, template: "<button class=\"nxt-dt-control-button nxt-dt-control-arrow-button\"\r\n [disabled]=\"!previousEnabled()\"\r\n [attr.aria-label]=\"prevButtonLabel\"\r\n type=\"button\"\r\n tabindex=\"0\"\r\n (click)=\"prevYearList($event)\">\r\n <span class=\"nxt-dt-control-button-content\"\r\n tabindex=\"-1\">\r\n <!-- <editor-fold desc=\"SVG Arrow Left\"> -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n version=\"1.1\"\r\n x=\"0px\"\r\n y=\"0px\"\r\n viewBox=\"0 0 250.738 250.738\"\r\n style=\"enable-background:new 0 0 250.738 250.738;\"\r\n xml:space=\"preserve\"\r\n width=\"100%\"\r\n height=\"100%\">\r\n <path style=\"fill-rule: evenodd; clip-rule: evenodd;\"\r\n d=\"M96.633,125.369l95.053-94.533c7.101-7.055,7.101-18.492,0-25.546 c-7.1-7.054-18.613-7.054-25.714,0L58.989,111.689c-3.784,3.759-5.487,8.759-5.238,13.68c-0.249,4.922,1.454,9.921,5.238,13.681 l106.983,106.398c7.101,7.055,18.613,7.055,25.714,0c7.101-7.054,7.101-18.491,0-25.544L96.633,125.369z\" />\r\n </svg>\r\n <!-- </editor-fold> -->\r\n </span>\r\n</button>\r\n<table class=\"nxt-dt-calendar-table nxt-dt-calendar-multi-year-table\">\r\n <thead class=\"nxt-dt-calendar-header\">\r\n <tr>\r\n <th colspan=\"3\">{{tableHeader}}</th>\r\n </tr>\r\n </thead>\r\n <tbody nxtDateTimeCalendarBody\r\n role=\"grid\"\r\n [rows]=\"years\"\r\n [numCols]=\"3\"\r\n [cellRatio]=\"3 / 7\"\r\n [activeCell]=\"activeCell ?? 0\"\r\n [todayValue]=\"todayYear\"\r\n [selectedValues]=\"selectedYears\"\r\n [selectMode]=\"selectMode\"\r\n (keydown)=\"handleCalendarKeydown($event)\"\r\n (select)=\"selectCalendarCell($event)\"></tbody>\r\n</table>\r\n<button class=\"nxt-dt-control-button nxt-dt-control-arrow-button\"\r\n [disabled]=\"!nextEnabled()\"\r\n [attr.aria-label]=\"nextButtonLabel\"\r\n type=\"button\"\r\n tabindex=\"0\"\r\n (click)=\"nextYearList($event)\">\r\n <span class=\"nxt-dt-control-button-content\"\r\n tabindex=\"-1\">\r\n <!-- <editor-fold desc=\"SVG Arrow Right\"> -->\r\n <svg version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n x=\"0px\"\r\n y=\"0px\"\r\n viewBox=\"0 0 250.738 250.738\"\r\n style=\"enable-background:new 0 0 250.738 250.738;\"\r\n xml:space=\"preserve\">\r\n <path style=\"fill-rule:evenodd;clip-rule:evenodd;\"\r\n d=\"M191.75,111.689L84.766,5.291c-7.1-7.055-18.613-7.055-25.713,0\r\n c-7.101,7.054-7.101,18.49,0,25.544l95.053,94.534l-95.053,94.533c-7.101,7.054-7.101,18.491,0,25.545\r\n c7.1,7.054,18.613,7.054,25.713,0L191.75,139.05c3.784-3.759,5.487-8.759,5.238-13.681\r\n C197.237,120.447,195.534,115.448,191.75,111.689z\" />\r\n </svg>\r\n <!-- </editor-fold> -->\r\n </span>\r\n</button>\r\n" }]
|
|
326
|
-
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.DateTimeIntl }, { type: i2.DateTimeAdapter }], propDecorators: { selectMode: [{
|
|
327
|
-
type: Input
|
|
328
|
-
}], selected: [{
|
|
329
|
-
type: Input
|
|
330
|
-
}], selecteds: [{
|
|
331
|
-
type: Input
|
|
332
|
-
}], pickerMoment: [{
|
|
333
|
-
type: Input
|
|
334
|
-
}], dateTimeFilter: [{
|
|
335
|
-
type: Input
|
|
336
|
-
}], min: [{
|
|
337
|
-
type: Input
|
|
338
|
-
}], max: [{
|
|
339
|
-
type: Input
|
|
340
|
-
}], change: [{
|
|
341
|
-
type: Output
|
|
342
|
-
}], yearSelected: [{
|
|
343
|
-
type: Output
|
|
344
|
-
}], pickerMomentChange: [{
|
|
345
|
-
type: Output
|
|
346
|
-
}], keyboardEnter: [{
|
|
347
|
-
type: Output
|
|
348
|
-
}], calendarBodyElm: [{
|
|
349
|
-
type: ViewChild,
|
|
350
|
-
args: [CalendarBodyComponent, { static: true }]
|
|
351
|
-
}], calendarView: [{
|
|
352
|
-
type: HostBinding,
|
|
353
|
-
args: ['class.nxt-dt-calendar-view']
|
|
354
|
-
}], calendarMultiYearView: [{
|
|
355
|
-
type: HostBinding,
|
|
356
|
-
args: ['class.nxt-dt-calendar-multi-year-view']
|
|
357
|
-
}] } });
|
|
358
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItbXVsdGkteWVhci12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3BpY2stZGF0ZXRpbWUvc3JjL2xpYi9kYXRlLXRpbWUvY2FsZW5kYXItbXVsdGkteWVhci12aWV3L2NhbGVuZGFyLW11bHRpLXllYXItdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9waWNrLWRhdGV0aW1lL3NyYy9saWIvZGF0ZS10aW1lL2NhbGVuZGFyLW11bHRpLXllYXItdmlldy9jYWxlbmRhci1tdWx0aS15ZWFyLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFvQix1QkFBdUIsRUFBcUIsU0FBUyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFHcEssT0FBTyxFQUFFLFlBQVksRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFBOzs7OztBQUc5RixnQkFBZ0I7QUFDaEIsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBQTtBQUU5QixnQkFBZ0I7QUFDaEIsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQTtBQVUxQixNQUFNLE9BQU8sc0JBQXNCO0lBTS9CLElBQ0ksVUFBVTtRQUNWLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQTtJQUMzQixDQUFDO0lBRUQsSUFBSSxVQUFVLENBQUMsR0FBZTtRQUMxQixJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQTtRQUN0QixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtZQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFBO1FBQzdCLENBQUM7SUFDTCxD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QUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2xGLENBQUMsQ0FBQyxHQUFHO1lBQ0wsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtJQUNuQixDQUFDO0lBRU8sZUFBZTtRQUNuQixJQUFJLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxDQUFBO0lBQzNDLENBQUM7OEdBMWFRLHNCQUFzQjtrR0FBdEIsc0JBQXNCLDZqQkF5THBCLHFCQUFxQiw4REM3TXBDLHluR0FxRUE7OzJGRGpEYSxzQkFBc0I7a0JBUmxDLFNBQVM7K0JBQ0ksK0JBQStCLHVCQUdwQixLQUFLLG1CQUNULHVCQUF1QixDQUFDLE1BQU07K0lBVTNDLFVBQVU7c0JBRGIsS0FBSztnQkFnQkYsUUFBUTtzQkFEWCxLQUFLO2dCQWlCRixTQUFTO3NCQURaLEtBQUs7Z0JBZUYsWUFBWTtzQkFEZixLQUFLO2dCQXFCRixjQUFjO3NCQURqQixLQUFLO2dCQWVGLEdBQUc7c0JBRE4sS0FBSztnQkFnQkYsR0FBRztzQkFETixLQUFLO2dCQWtFRyxNQUFNO3NCQURkLE1BQU07Z0JBU0UsWUFBWTtzQkFEcEIsTUFBTTtnQkFLRSxrQkFBa0I7c0JBRDFCLE1BQU07Z0JBS0UsYUFBYTtzQkFEckIsTUFBTTtnQkFLQyxlQUFlO3NCQUR0QixTQUFTO3VCQUFDLHFCQUFxQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFLOUMsWUFBWTtzQkFEZixXQUFXO3VCQUFDLDRCQUE0QjtnQkFPckMscUJBQXFCO3NCQUR4QixXQUFXO3VCQUFDLHVDQUF1QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyQ29udGVudEluaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEhvc3RCaW5kaW5nLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXHJcbmltcG9ydCB7IERhdGVUaW1lQWRhcHRlciB9IGZyb20gJy4uLy4uL2NsYXNzL2RhdGUtdGltZS1hZGFwdGVyLmNsYXNzJ1xyXG5pbXBvcnQgeyBEYXRlRmlsdGVyLCBTZWxlY3RNb2RlIH0gZnJvbSAnLi4vLi4vY2xhc3MvZGF0ZS10aW1lLmNsYXNzJ1xyXG5pbXBvcnQgeyBDYWxlbmRhckNlbGwsIENhbGVuZGFyQm9keUNvbXBvbmVudCB9IGZyb20gJy4uL2NhbGVuZGFyLWJvZHkvY2FsZW5kYXItYm9keS5jb21wb25lbnQnXHJcbmltcG9ydCB7IERhdGVUaW1lSW50bCB9IGZyb20gJy4uL2RhdGUtdGltZS1waWNrZXItaW50bC5zZXJ2aWNlJ1xyXG5cclxuLyoqIEBpbnRlcm5hbCAqL1xyXG5leHBvcnQgY29uc3QgWUVBUlNfUEVSX1JPVyA9IDNcclxuXHJcbi8qKiBAaW50ZXJuYWwgKi9cclxuZXhwb3J0IGNvbnN0IFlFQVJfUk9XUyA9IDdcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdueHQtZGF0ZS10aW1lLW11bHRpLXllYXItdmlldycsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2FsZW5kYXItbXVsdGkteWVhci12aWV3LmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2NhbGVuZGFyLW11bHRpLXllYXItdmlldy5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgcHJlc2VydmVXaGl0ZXNwYWNlczogZmFsc2UsXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIE11bHRpWWVhclZpZXdDb21wb25lbnQ8VD4gaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudEluaXQge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHNlbGVjdCBtb2RlIG9mIHRoZSBwaWNrZXI7XHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX3NlbGVjdE1vZGU6IFNlbGVjdE1vZGUgPSAnc2luZ2xlJ1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBzZWxlY3RNb2RlKCk6IFNlbGVjdE1vZGUge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RNb2RlXHJcbiAgICB9XHJcblxyXG4gICAgc2V0IHNlbGVjdE1vZGUodmFsOiBTZWxlY3RNb2RlKSB7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0TW9kZSA9IHZhbFxyXG4gICAgICAgIGlmICh0aGlzLmluaXRpYXRlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkWWVhcnMoKVxyXG4gICAgICAgICAgICB0aGlzLmNkUmVmLm1hcmtGb3JDaGVjaygpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIGRhdGUgKi9cclxuICAgIHByaXZhdGUgX3NlbGVjdGVkPzogVFxyXG4gICAgQElucHV0KClcclxuICAgIGdldCBzZWxlY3RlZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRcclxuICAgIH1cclxuXHJcbiAgICBzZXQgc2VsZWN0ZWQodmFsdWU6IFQgfCB1bmRlZmluZWQpIHtcclxuICAgICAgICBjb25zdCBvbGRTZWxlY3RlZCA9IHRoaXMuX3NlbGVjdGVkXHJcbiAgICAgICAgdmFsdWUgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5kZXNlcmlhbGl6ZSh2YWx1ZSlcclxuICAgICAgICB0aGlzLl9zZWxlY3RlZCA9IHRoaXMuZ2V0VmFsaWREYXRlKHZhbHVlKVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuZGF0ZVRpbWVBZGFwdGVyLmlzU2FtZURheShvbGRTZWxlY3RlZCwgdGhpcy5fc2VsZWN0ZWQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRZZWFycygpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3NlbGVjdGVkcyA9IG5ldyBBcnJheTxUIHwgdW5kZWZpbmVkPigpXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IHNlbGVjdGVkcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRzXHJcbiAgICB9XHJcblxyXG4gICAgc2V0IHNlbGVjdGVkcyh2YWx1ZXM6IEFycmF5PFQgfCB1bmRlZmluZWQ+KSB7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRzID0gdmFsdWVzLm1hcCgodikgPT4ge1xyXG4gICAgICAgICAgICB2ID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuZGVzZXJpYWxpemUodilcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VmFsaWREYXRlKHYpXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLnNldFNlbGVjdGVkWWVhcnMoKVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3BpY2tlck1vbWVudD86IFRcclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgcGlja2VyTW9tZW50KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9waWNrZXJNb21lbnRcclxuICAgIH1cclxuXHJcbiAgICBzZXQgcGlja2VyTW9tZW50KHZhbHVlOiBUIHwgdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgY29uc3Qgb2xkTW9tZW50ID0gdGhpcy5fcGlja2VyTW9tZW50XHJcbiAgICAgICAgdmFsdWUgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5kZXNlcmlhbGl6ZSh2YWx1ZSlcclxuICAgICAgICB0aGlzLl9waWNrZXJNb21lbnQgPSB0aGlzLmdldFZhbGlkRGF0ZSh2YWx1ZSkgfHwgdGhpcy5kYXRlVGltZUFkYXB0ZXIubm93KClcclxuXHJcbiAgICAgICAgaWYgKG9sZE1vbWVudCAmJiB0aGlzLl9waWNrZXJNb21lbnQgJiZcclxuICAgICAgICAgICAgIXRoaXMuaXNTYW1lWWVhckxpc3Qob2xkTW9tZW50LCB0aGlzLl9waWNrZXJNb21lbnQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVZZWFyTGlzdCgpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSBmdW5jdGlvbiB1c2VkIHRvIGZpbHRlciB3aGljaCBkYXRlcyBhcmUgc2VsZWN0YWJsZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF9kYXRlVGltZUZpbHRlcj86IERhdGVGaWx0ZXI8VD5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgZGF0ZVRpbWVGaWx0ZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVUaW1lRmlsdGVyXHJcbiAgICB9XHJcblxyXG4gICAgc2V0IGRhdGVUaW1lRmlsdGVyKGZpbHRlcjogRGF0ZUZpbHRlcjxUPiB8IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMuX2RhdGVUaW1lRmlsdGVyID0gZmlsdGVyXHJcbiAgICAgICAgaWYgKHRoaXMuaW5pdGlhdGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVZZWFyTGlzdCgpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBUaGUgbWluaW11bSBzZWxlY3RhYmxlIGRhdGUgKi9cclxuICAgIHByaXZhdGUgX21pbkRhdGU/OiBUXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IG1pbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbWluRGF0ZVxyXG4gICAgfVxyXG5cclxuICAgIHNldCBtaW4odmFsdWU6IFQgfCB1bmRlZmluZWQpIHtcclxuICAgICAgICB2YWx1ZSA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmRlc2VyaWFsaXplKHZhbHVlKVxyXG4gICAgICAgIHRoaXMuX21pbkRhdGUgPSB0aGlzLmdldFZhbGlkRGF0ZSh2YWx1ZSlcclxuICAgICAgICBpZiAodGhpcy5pbml0aWF0ZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZVllYXJMaXN0KClcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFRoZSBtYXhpbXVtIHNlbGVjdGFibGUgZGF0ZSAqL1xyXG4gICAgcHJpdmF0ZSBfbWF4RGF0ZT86IFRcclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgbWF4KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9tYXhEYXRlXHJcbiAgICB9XHJcblxyXG4gICAgc2V0IG1heCh2YWx1ZTogVCB8IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHZhbHVlID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpXHJcbiAgICAgICAgdGhpcy5fbWF4RGF0ZSA9IHRoaXMuZ2V0VmFsaWREYXRlKHZhbHVlKVxyXG4gICAgICAgIGlmICh0aGlzLmluaXRpYXRlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRlWWVhckxpc3QoKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF90b2RheVllYXI/OiBudW1iZXJcclxuICAgIGdldCB0b2RheVllYXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RvZGF5WWVhclxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3llYXJzPzogQ2FsZW5kYXJDZWxsW11bXVxyXG4gICAgZ2V0IHllYXJzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl95ZWFyc1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3NlbGVjdGVkWWVhcnM/OiBBcnJheTxudW1iZXIgfCB1bmRlZmluZWQ+XHJcbiAgICBnZXQgc2VsZWN0ZWRZZWFycygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRZZWFyc1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5pdGlhdGVkID0gZmFsc2VcclxuXHJcbiAgICBnZXQgaXNJblNpbmdsZU1vZGUoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0TW9kZSA9PT0gJ3NpbmdsZSdcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaXNJblJhbmdlTW9kZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RNb2RlID09PSAncmFuZ2UnIHx8IHRoaXMuc2VsZWN0TW9kZSA9PT0gJ3JhbmdlRnJvbSdcclxuICAgICAgICAgICAgfHwgdGhpcy5zZWxlY3RNb2RlID09PSAncmFuZ2VUbydcclxuICAgIH1cclxuXHJcbiAgICBnZXQgYWN0aXZlQ2VsbCgpOiBudW1iZXIgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIGlmICh0aGlzLl9waWNrZXJNb21lbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldFllYXIodGhpcy5fcGlja2VyTW9tZW50KSAlIChZRUFSU19QRVJfUk9XICogWUVBUl9ST1dTKVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICBnZXQgdGFibGVIZWFkZXIoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICBpZiAodGhpcy5feWVhcnMgJiYgdGhpcy5feWVhcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYCR7dGhpcy5feWVhcnNbMF1bMF0uZGlzcGxheVZhbHVlfSB+ICR7dGhpcy5feWVhcnNbWUVBUl9ST1dTIC0gMV1bWUVBUlNfUEVSX1JPVyAtIDFdLmRpc3BsYXlWYWx1ZX1gXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIGdldCBwcmV2QnV0dG9uTGFiZWwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5waWNrZXJJbnRsLnByZXZNdWx0aVllYXJMYWJlbFxyXG4gICAgfVxyXG5cclxuICAgIGdldCBuZXh0QnV0dG9uTGFiZWwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5waWNrZXJJbnRsLm5leHRNdWx0aVllYXJMYWJlbFxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gYSBuZXcgbW9udGggaXMgc2VsZWN0ZWRcclxuICAgICAqL1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtbmF0aXZlXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHJlYWRvbmx5IGNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VD4oKVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRW1pdHMgdGhlIHNlbGVjdGVkIHllYXJcclxuICAgICAqXHJcbiAgICAgKiBUaGlzIGRvZXNuJ3QgaW1wbHkgYSBjaGFuZ2Ugb24gdGhlIHNlbGVjdGVkIGRhdGUuXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcmVhZG9ubHkgeWVhclNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxUPigpXHJcblxyXG4gICAgLyoqIEVtaXRzIHdoZW4gYW55IGRhdGUgaXMgYWN0aXZhdGVkICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHJlYWRvbmx5IHBpY2tlck1vbWVudENoYW5nZTogRXZlbnRFbWl0dGVyPFQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUPigpXHJcblxyXG4gICAgLyoqIEVtaXRzIHdoZW4gdXNlIGtleWJvYXJkIGVudGVyIHRvIHNlbGVjdCBhIGNhbGVuZGFyIGNlbGwgKi9cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcmVhZG9ubHkga2V5Ym9hcmRFbnRlciA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKVxyXG5cclxuICAgIC8qKiBUaGUgYm9keSBvZiBjYWxlbmRhciB0YWJsZSAqL1xyXG4gICAgQFZpZXdDaGlsZChDYWxlbmRhckJvZHlDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgICBwcml2YXRlIGNhbGVuZGFyQm9keUVsbT86IENhbGVuZGFyQm9keUNvbXBvbmVudFxyXG5cclxuICAgIC8qKiBAaW50ZXJuYWwgKi9cclxuICAgIEBIb3N0QmluZGluZygnY2xhc3Mubnh0LWR0LWNhbGVuZGFyLXZpZXcnKVxyXG4gICAgZ2V0IGNhbGVuZGFyVmlldygpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaW50ZXJuYWwgKi9cclxuICAgIEBIb3N0QmluZGluZygnY2xhc3Mubnh0LWR0LWNhbGVuZGFyLW11bHRpLXllYXItdmlldycpXHJcbiAgICBnZXQgY2FsZW5kYXJNdWx0aVllYXJWaWV3KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBwaWNrZXJJbnRsOiBEYXRlVGltZUludGwsXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBkYXRlVGltZUFkYXB0ZXI6IERhdGVUaW1lQWRhcHRlcjxUPlxyXG4gICAgKSB7IH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fdG9kYXlZZWFyID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0WWVhcih0aGlzLmRhdGVUaW1lQWRhcHRlci5ub3coKSlcclxuICAgICAgICB0aGlzLmdlbmVyYXRlWWVhckxpc3QoKVxyXG4gICAgICAgIHRoaXMuaW5pdGlhdGVkID0gdHJ1ZVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGFuZGxlIGEgY2FsZW5kYXJDZWxsIHNlbGVjdGVkXHJcbiAgICAgKi9cclxuICAgIHNlbGVjdENhbGVuZGFyQ2VsbChjZWxsOiBDYWxlbmRhckNlbGwpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNlbGVjdFllYXIoY2VsbC52YWx1ZSlcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNlbGVjdFllYXIoeWVhcjogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy55ZWFyU2VsZWN0ZWQuZW1pdCh0aGlzLmRhdGVUaW1lQWRhcHRlci5jcmVhdGVEYXRlKHllYXIsIDAsIDEpKVxyXG4gICAgICAgIGNvbnN0IGZpcnN0RGF0ZU9mTW9udGggPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5jcmVhdGVEYXRlKFxyXG4gICAgICAgICAgICB5ZWFyLFxyXG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRNb250aCh0aGlzLnBpY2tlck1vbWVudCksXHJcbiAgICAgICAgICAgIDFcclxuICAgICAgICApXHJcbiAgICAgICAgY29uc3QgZGF5c0luTW9udGggPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXROdW1EYXlzSW5Nb250aChmaXJzdERhdGVPZk1vbnRoKVxyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuY3JlYXRlRGF0ZShcclxuICAgICAgICAgICAgeWVhcixcclxuICAgICAgICAgICAgdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0TW9udGgodGhpcy5waWNrZXJNb21lbnQpLFxyXG4gICAgICAgICAgICBNYXRoLm1pbihkYXlzSW5Nb250aCwgdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0RGF0ZSh0aGlzLnBpY2tlck1vbWVudCkpLFxyXG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRIb3Vycyh0aGlzLnBpY2tlck1vbWVudCksXHJcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldE1pbnV0ZXModGhpcy5waWNrZXJNb21lbnQpLFxyXG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRTZWNvbmRzKHRoaXMucGlja2VyTW9tZW50KVxyXG4gICAgICAgIClcclxuXHJcbiAgICAgICAgdGhpcy5jaGFuZ2UuZW1pdChzZWxlY3RlZClcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlIHRoZSBwcmV2aW91cyB5ZWFyIGxpc3RcclxuICAgICAqL1xyXG4gICAgcHJldlllYXJMaXN0KGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9waWNrZXJNb21lbnQgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5hZGRDYWxlbmRhclllYXJzKHRoaXMucGlja2VyTW9tZW50LCAtMSAqIFlFQVJfUk9XUyAqIFlFQVJTX1BFUl9ST1cpXHJcbiAgICAgICAgdGhpcy5nZW5lcmF0ZVllYXJMaXN0KClcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZSB0aGUgbmV4dCB5ZWFyIGxpc3RcclxuICAgICAqL1xyXG4gICAgbmV4dFllYXJMaXN0KGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9waWNrZXJNb21lbnQgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5hZGRDYWxlbmRhclllYXJzKHRoaXMucGlja2VyTW9tZW50LCBZRUFSX1JPV1MgKiBZRUFSU19QRVJfUk9XKVxyXG4gICAgICAgIHRoaXMuZ2VuZXJhdGVZZWFyTGlzdCgpXHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxyXG4gICAgfVxyXG5cclxuICAgIGdlbmVyYXRlWWVhckxpc3QoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5feWVhcnMgPSBbXVxyXG5cclxuICAgICAgICBjb25zdCBwaWNrZXJNb21lbnRZZWFyID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0WWVhcih0aGlzLl9waWNrZXJNb21lbnQpXHJcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gcGlja2VyTW9tZW50WWVhciAlIChZRUFSU19QRVJfUk9XICogWUVBUl9ST1dTKVxyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IFlFQVJfUk9XUzsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IFtdXHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IFlFQVJTX1BFUl9ST1c7IGorKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeWVhciA9IHBpY2tlck1vbWVudFllYXIgLSBvZmZzZXQgKyAoaiArIGkgKiBZRUFSU19QRVJfUk9XKVxyXG4gICAgICAgICAgICAgICAgY29uc3QgeWVhckNlbGwgPSB0aGlzLmNyZWF0ZVllYXJDZWxsKHllYXIpXHJcbiAgICAgICAgICAgICAgICByb3cucHVzaCh5ZWFyQ2VsbClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5feWVhcnMucHVzaChyb3cpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFdoZXRoZXIgdGhlIHByZXZpb3VzIHBlcmlvZCBidXR0b24gaXMgZW5hYmxlZCAqL1xyXG4gICAgcHJldmlvdXNFbmFibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghdGhpcy5taW4pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLm1pbiB8fCAhdGhpcy5pc1NhbWVZZWFyTGlzdCh0aGlzLl9waWNrZXJNb21lbnQsIHRoaXMubWluKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBXaGV0aGVyIHRoZSBuZXh0IHBlcmlvZCBidXR0b24gaXMgZW5hYmxlZCAqL1xyXG4gICAgbmV4dEVuYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLm1heCB8fCAhdGhpcy5pc1NhbWVZZWFyTGlzdCh0aGlzLl9waWNrZXJNb21lbnQsIHRoaXMubWF4KVxyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZUNhbGVuZGFyS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgICAgIGxldCBtb21lbnRcclxuICAgICAgICBzd2l0Y2ggKGV2ZW50LmNvZGUudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICAvLyBtaW51cyAxIHllYXJcclxuICAgICAgICAgICAgY2FzZSAnYXJyb3dsZWZ0JzpcclxuICAgICAgICAgICAgICAgIG1vbWVudCA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmFkZENhbGVuZGFyWWVhcnModGhpcy5fcGlja2VyTW9tZW50LCAtMSlcclxuICAgICAgICAgICAgICAgIHRoaXMucGlja2VyTW9tZW50Q2hhbmdlLmVtaXQobW9tZW50KVxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuXHJcbiAgICAgICAgICAgIC8vIGFkZCAxIHllYXJcclxuICAgICAgICAgICAgY2FzZSAnYXJyb3dyaWdodCc6XHJcbiAgICAgICAgICAgICAgICBtb21lbnQgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5hZGRDYWxlbmRhclllYXJzKHRoaXMuX3BpY2tlck1vbWVudCwgMSlcclxuICAgICAgICAgICAgICAgIHRoaXMucGlja2VyTW9tZW50Q2hhbmdlLmVtaXQobW9tZW50KVxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuXHJcbiAgICAgICAgICAgIC8vIG1pbnVzIDMgeWVhcnNcclxuICAgICAgICAgICAgY2FzZSAnYXJyb3d1cCc6XHJcbiAgICAgICAgICAgICAgICBtb21lbnQgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5hZGRDYWxlbmRhclllYXJzKHRoaXMuX3BpY2tlck1vbWVudCwgLTEgKiBZRUFSU19QRVJfUk9XKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5waWNrZXJNb21lbnRDaGFuZ2UuZW1pdChtb21lbnQpXHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG5cclxuICAgICAgICAgICAgLy8gYWRkIDMgeWVhcnNcclxuICAgICAgICAgICAgY2FzZSAnYXJyb3dkb3duJzpcclxuICAgICAgICAgICAgICAgIG1vbWVudCA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmFkZENhbGVuZGFyWWVhcnModGhpcy5fcGlja2VyTW9tZW50LCBZRUFSU19QRVJfUk9XKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5waWNrZXJNb21lbnRDaGFuZ2UuZW1pdChtb21lbnQpXHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG5cclxuICAgICAgICAgICAgLy8gZ28gdG8gdGhlIGZpcnN0IHllYXIgb2YgdGhlIHllYXIgcGFnZVxyXG4gICAgICAgICAgICBjYXNlICdob21lJzpcclxuICAgICAgICAgICAgICAgIG1vbWVudCA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmFkZENhbGVuZGFyWWVhcnModGhpcy5fcGlja2VyTW9tZW50LFxyXG4gICAgICAgICAgICAgICAgICAgIC10aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRZZWFyKHRoaXMuX3BpY2tlck1vbWVudCkgJSAoWUVBUlNfUEVSX1JPVyAqIFlFQVJfUk9XUykpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBpY2tlck1vbWVudENoYW5nZS5lbWl0KG1vbWVudClcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcblxyXG4gICAgICAgICAgICAvLyBnbyB0byB0aGUgbGFzdCB5ZWFyIG9mIHRoZSB5ZWFyIHBhZ2VcclxuICAgICAgICAgICAgY2FzZSAnZW5kJzpcclxuICAgICAgICAgICAgICAgIG1vbWVudCA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmFkZENhbGVuZGFyWWVhcnModGhpcy5fcGlja2VyTW9tZW50LFxyXG4gICAgICAgICAgICAgICAgICAgIChZRUFSU19QRVJfUk9XICogWUVBUl9ST1dTKSAtIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldFllYXIodGhpcy5fcGlja2VyTW9tZW50KSAlIChZRUFSU19QRVJfUk9XICogWUVBUl9ST1dTKSAtIDEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBpY2tlck1vbWVudENoYW5nZS5lbWl0KG1vbWVudClcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcblxyXG4gICAgICAgICAgICAvLyBtaW51cyAxIHllYXIgcGFnZSAob3IgMTAgeWVhciBwYWdlcylcclxuICAgICAgICAgICAgY2FzZSAncGFnZXVwJzpcclxuICAgICAgICAgICAgICAgIG1vbWVudCA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmFkZENhbGVuZGFyWWVhcnModGhpcy5waWNrZXJNb21lbnQsIGV2ZW50LmFsdEtleSA/IC0xMCAqIChZRUFSU19QRVJfUk9XICogWUVBUl9ST1dTKSA6IC0xICogKFlFQVJTX1BFUl9ST1cgKiBZRUFSX1JPV1MpKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5waWNrZXJNb21lbnRDaGFuZ2UuZW1pdChtb21lbnQpXHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG5cclxuICAgICAgICAgICAgLy8gYWRkIDEgeWVhciBwYWdlIChvciAxMCB5ZWFyIHBhZ2VzKVxyXG4gICAgICAgICAgICBjYXNlICdwYWdlZG93bic6XHJcbiAgICAgICAgICAgICAgICBtb21lbnQgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5hZGRDYWxlbmRhclllYXJzKHRoaXMucGlja2VyTW9tZW50LCBldmVudC5hbHRLZXkgPyAxMCAqIChZRUFSU19QRVJfUk9XICogWUVBUl9ST1dTKSA6IChZRUFSU19QRVJfUk9XICogWUVBUl9ST1dTKSlcclxuICAgICAgICAgICAgICAgIHRoaXMucGlja2VyTW9tZW50Q2hhbmdlLmVtaXQobW9tZW50KVxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ2VudGVyJzpcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0WWVhcih0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRZZWFyKHRoaXMuX3BpY2tlck1vbWVudCkpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmtleWJvYXJkRW50ZXIuZW1pdCgpXHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG5cclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5mb2N1c0FjdGl2ZUNlbGwoKVxyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYW4gQ2FsZW5kYXJDZWxsIGZvciB0aGUgZ2l2ZW4geWVhci5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBjcmVhdGVZZWFyQ2VsbCh5ZWFyOiBudW1iZXIpOiBDYWxlbmRhckNlbGwge1xyXG4gICAgICAgIGNvbnN0IHN0YXJ0RGF0ZU9mWWVhciA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmNyZWF0ZURhdGUoeWVhciwgMCwgMSlcclxuICAgICAgICBjb25zdCBhcmlhTGFiZWwgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRZZWFyTmFtZShzdGFydERhdGVPZlllYXIpXHJcbiAgICAgICAgY29uc3QgY2VsbENsYXNzID0gJ254dC1kdC15ZWFyLScgKyB5ZWFyXHJcbiAgICAgICAgcmV0dXJuIG5ldyBDYWxlbmRhckNlbGwoeWVhciwgeWVhci50b1N0cmluZygpLCBhcmlhTGFiZWwsIHRoaXMuaXNZZWFyRW5hYmxlZCh5ZWFyKSwgZmFsc2UsIGNlbGxDbGFzcylcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldFNlbGVjdGVkWWVhcnMoKTogdm9pZCB7XHJcblxyXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkWWVhcnMgPSBbXVxyXG5cclxuICAgICAgICBpZiAodGhpcy5pc0luU2luZ2xlTW9kZSAmJiB0aGlzLnNlbGVjdGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkWWVhcnNbMF0gPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRZZWFyKHRoaXMuc2VsZWN0ZWQpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5pc0luUmFuZ2VNb2RlICYmIHRoaXMuc2VsZWN0ZWRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkWWVhcnMgPSB0aGlzLnNlbGVjdGVkcy5tYXAoKHNlbGVjdGVkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRlVGltZUFkYXB0ZXIuaXNWYWxpZChzZWxlY3RlZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0WWVhcihzZWxlY3RlZClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKiogV2hldGhlciB0aGUgZ2l2ZW4geWVhciBpcyBlbmFibGVkICovXHJcbiAgICBwcml2YXRlIGlzWWVhckVuYWJsZWQoeWVhcjogbnVtYmVyKSB7XHJcblxyXG4gICAgICAgIC8vIGVuYWJsZSBpZiBpdCByZWFjaGVzIGhlcmUgYW5kIHRoZXJlJ3Mgbm8gZmlsdGVyIGRlZmluZWRcclxuICAgICAgICBpZiAoIXRoaXMuZGF0ZVRpbWVGaWx0ZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGZpcnN0T2ZZZWFyID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuY3JlYXRlRGF0ZSh5ZWFyLCAwLCAxKVxyXG5cclxuICAgICAgICAvLyBJZiBhbnkgZGF0ZSBpbiB0aGUgeWVhciBpcyBlbmFibGVkIGNvdW50IHRoZSB5ZWFyIGFzIGVuYWJsZWQuXHJcbiAgICAgICAgZm9yIChsZXQgZGF0ZSA9IGZpcnN0T2ZZZWFyOyB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRZZWFyKGRhdGUpID09IHllYXI7XHJcbiAgICAgICAgICAgIGRhdGUgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5hZGRDYWxlbmRhckRheXMoZGF0ZSwgMSkpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZGF0ZVRpbWVGaWx0ZXIoZGF0ZSwgJ3llYXInKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpc1NhbWVZZWFyTGlzdChkYXRlMT86IFQsIGRhdGUyPzogVCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldFllYXIoZGF0ZTEpIC8gKFlFQVJTX1BFUl9ST1cgKiBZRUFSX1JPV1MpKSA9PT1cclxuICAgICAgICAgICAgTWF0aC5mbG9vcih0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRZZWFyKGRhdGUyKSAvIChZRUFSU19QRVJfUk9XICogWUVBUl9ST1dTKSlcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBhIHZhbGlkIGRhdGUgb2JqZWN0XHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0VmFsaWREYXRlKG9iajogYW55KTogVCB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLmRhdGVUaW1lQWRhcHRlci5pc0RhdGVJbnN0YW5jZShvYmopICYmIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmlzVmFsaWQob2JqKSlcclxuICAgICAgICAgICAgPyBvYmpcclxuICAgICAgICAgICAgOiB1bmRlZmluZWRcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGZvY3VzQWN0aXZlQ2VsbCgpIHtcclxuICAgICAgICB0aGlzLmNhbGVuZGFyQm9keUVsbT8uZm9jdXNBY3RpdmVDZWxsKClcclxuICAgIH1cclxufVxyXG4iLCI8YnV0dG9uIGNsYXNzPVwibnh0LWR0LWNvbnRyb2wtYnV0dG9uIG54dC1kdC1jb250cm9sLWFycm93LWJ1dHRvblwiXHJcbiAgICBbZGlzYWJsZWRdPVwiIXByZXZpb3VzRW5hYmxlZCgpXCJcclxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwicHJldkJ1dHRvbkxhYmVsXCJcclxuICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgdGFiaW5kZXg9XCIwXCJcclxuICAgIChjbGljayk9XCJwcmV2WWVhckxpc3QoJGV2ZW50KVwiPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJueHQtZHQtY29udHJvbC1idXR0b24tY29udGVudFwiXHJcbiAgICAgICAgdGFiaW5kZXg9XCItMVwiPlxyXG4gICAgICAgIDwhLS0gPGVkaXRvci1mb2xkIGRlc2M9XCJTVkcgQXJyb3cgTGVmdFwiPiAtLT5cclxuICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgICB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIlxyXG4gICAgICAgICAgICB2ZXJzaW9uPVwiMS4xXCJcclxuICAgICAgICAgICAgeD1cIjBweFwiXHJcbiAgICAgICAgICAgIHk9XCIwcHhcIlxyXG4gICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI1MC43MzggMjUwLjczOFwiXHJcbiAgICAgICAgICAgIHN0eWxlPVwiZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAyNTAuNzM4IDI1MC43Mzg7XCJcclxuICAgICAgICAgICAgeG1sOnNwYWNlPVwicHJlc2VydmVcIlxyXG4gICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxyXG4gICAgICAgICAgICBoZWlnaHQ9XCIxMDAlXCI+XHJcbiAgICAgICAgICAgIDxwYXRoIHN0eWxlPVwiZmlsbC1ydWxlOiBldmVub2RkOyBjbGlwLXJ1bGU6IGV2ZW5vZGQ7XCJcclxuICAgICAgICAgICAgICAgIGQ9XCJNOTYuNjMzLDEyNS4zNjlsOTUuMDUzLTk0LjUzM2M3LjEwMS03LjA1NSw3LjEwMS0xOC40OTIsMC0yNS41NDYgICBjLTcuMS03LjA1NC0xOC42MTMtNy4wNTQtMjUuNzE0LDBMNTguOTg5LDExMS42ODljLTMuNzg0LDMuNzU5LTUuNDg3LDguNzU5LTUuMjM4LDEzLjY4Yy0wLjI0OSw0LjkyMiwxLjQ1NCw5LjkyMSw1LjIzOCwxMy42ODEgICBsMTA2Ljk4MywxMDYuMzk4YzcuMTAxLDcuMDU1LDE4LjYxMyw3LjA1NSwyNS43MTQsMGM3LjEwMS03LjA1NCw3LjEwMS0xOC40OTEsMC0yNS41NDRMOTYuNjMzLDEyNS4zNjl6XCIgLz5cclxuICAgICAgICA8L3N2Zz5cclxuICAgICAgICA8IS0tIDwvZWRpdG9yLWZvbGQ+IC0tPlxyXG4gICAgPC9zcGFuPlxyXG48L2J1dHRvbj5cclxuPHRhYmxlIGNsYXNzPVwibnh0LWR0LWNhbGVuZGFyLXRhYmxlIG54dC1kdC1jYWxlbmRhci1tdWx0aS15ZWFyLXRhYmxlXCI+XHJcbiAgICA8dGhlYWQgY2xhc3M9XCJueHQtZHQtY2FsZW5kYXItaGVhZGVyXCI+XHJcbiAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICA8dGggY29sc3Bhbj1cIjNcIj57e3RhYmxlSGVhZGVyfX08L3RoPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICA8L3RoZWFkPlxyXG4gICAgPHRib2R5IG54dERhdGVUaW1lQ2FsZW5kYXJCb2R5XHJcbiAgICAgICAgcm9sZT1cImdyaWRcIlxyXG4gICAgICAgIFtyb3dzXT1cInllYXJzXCJcclxuICAgICAgICBbbnVtQ29sc109XCIzXCJcclxuICAgICAgICBbY2VsbFJhdGlvXT1cIjMgLyA3XCJcclxuICAgICAgICBbYWN0aXZlQ2VsbF09XCJhY3RpdmVDZWxsID8/IDBcIlxyXG4gICAgICAgIFt0b2RheVZhbHVlXT1cInRvZGF5WWVhclwiXHJcbiAgICAgICAgW3NlbGVjdGVkVmFsdWVzXT1cInNlbGVjdGVkWWVhcnNcIlxyXG4gICAgICAgIFtzZWxlY3RNb2RlXT1cInNlbGVjdE1vZGVcIlxyXG4gICAgICAgIChrZXlkb3duKT1cImhhbmRsZUNhbGVuZGFyS2V5ZG93bigkZXZlbnQpXCJcclxuICAgICAgICAoc2VsZWN0KT1cInNlbGVjdENhbGVuZGFyQ2VsbCgkZXZlbnQpXCI+PC90Ym9keT5cclxuPC90YWJsZT5cclxuPGJ1dHRvbiBjbGFzcz1cIm54dC1kdC1jb250cm9sLWJ1dHRvbiBueHQtZHQtY29udHJvbC1hcnJvdy1idXR0b25cIlxyXG4gICAgW2Rpc2FibGVkXT1cIiFuZXh0RW5hYmxlZCgpXCJcclxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwibmV4dEJ1dHRvbkxhYmVsXCJcclxuICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgdGFiaW5kZXg9XCIwXCJcclxuICAgIChjbGljayk9XCJuZXh0WWVhckxpc3QoJGV2ZW50KVwiPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJueHQtZHQtY29udHJvbC1idXR0b24tY29udGVudFwiXHJcbiAgICAgICAgdGFiaW5kZXg9XCItMVwiPlxyXG4gICAgICAgIDwhLS0gPGVkaXRvci1mb2xkIGRlc2M9XCJTVkcgQXJyb3cgUmlnaHRcIj4gLS0+XHJcbiAgICAgICAgPHN2ZyB2ZXJzaW9uPVwiMS4xXCJcclxuICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiXHJcbiAgICAgICAgICAgIHg9XCIwcHhcIlxyXG4gICAgICAgICAgICB5PVwiMHB4XCJcclxuICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNTAuNzM4IDI1MC43MzhcIlxyXG4gICAgICAgICAgICBzdHlsZT1cImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMjUwLjczOCAyNTAuNzM4O1wiXHJcbiAgICAgICAgICAgIHhtbDpzcGFjZT1cInByZXNlcnZlXCI+XHJcbiAgICAgICAgICAgIDxwYXRoIHN0eWxlPVwiZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7XCJcclxuICAgICAgICAgICAgICAgIGQ9XCJNMTkxLjc1LDExMS42ODlMODQuNzY2LDUuMjkxYy03LjEtNy4wNTUtMTguNjEzLTcuMDU1LTI1LjcxMywwXHJcbiAgICAgICAgICAgICAgICBjLTcuMTAxLDcuMDU0LTcuMTAxLDE4LjQ5LDAsMjUuNTQ0bDk1LjA1Myw5NC41MzRsLTk1LjA1Myw5NC41MzNjLTcuMTAxLDcuMDU0LTcuMTAxLDE4LjQ5MSwwLDI1LjU0NVxyXG4gICAgICAgICAgICAgICAgYzcuMSw3LjA1NCwxOC42MTMsNy4wNTQsMjUuNzEzLDBMMTkxLjc1LDEzOS4wNWMzLjc4NC0zLjc1OSw1LjQ4Ny04Ljc1OSw1LjIzOC0xMy42ODFcclxuICAgICAgICAgICAgICAgIEMxOTcuMjM3LDEyMC40NDcsMTk1LjUzNCwxMTUuNDQ4LDE5MS43NSwxMTEuNjg5elwiIC8+XHJcbiAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgPCEtLSA8L2VkaXRvci1mb2xkPiAtLT5cclxuICAgIDwvc3Bhbj5cclxuPC9idXR0b24+XHJcbiJdfQ==
|