@coreui/angular-pro 5.2.20 → 5.2.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (23) hide show
  1. package/esm2022/lib/calendar/calendar/calendar.component.mjs +312 -410
  2. package/esm2022/lib/calendar/calendar-month/calendar-class-month.pipe.mjs +3 -2
  3. package/esm2022/lib/calendar/calendar-month/calendar-class-row.pipe.mjs +2 -4
  4. package/esm2022/lib/calendar/calendar-month/calendar-day.directive.mjs +2 -2
  5. package/esm2022/lib/calendar/calendar-month/calendar-month.component.mjs +182 -262
  6. package/esm2022/lib/calendar/calendar-month/calendar-row.directive.mjs +33 -31
  7. package/esm2022/lib/calendar/calendar-navigation/calendar-navigation.component.mjs +41 -13
  8. package/esm2022/lib/calendar/calendar.service.mjs +13 -10
  9. package/esm2022/lib/calendar/calendar.utils.mjs +19 -12
  10. package/esm2022/lib/date-picker/date-picker.component.mjs +23 -26
  11. package/esm2022/lib/date-range-picker/date-range-picker/date-range-picker.component.mjs +193 -295
  12. package/fesm2022/coreui-angular-pro.mjs +803 -1044
  13. package/fesm2022/coreui-angular-pro.mjs.map +1 -1
  14. package/lib/calendar/calendar/calendar.component.d.ts +60 -80
  15. package/lib/calendar/calendar-month/calendar-class-row.pipe.d.ts +2 -1
  16. package/lib/calendar/calendar-month/calendar-month.component.d.ts +33 -59
  17. package/lib/calendar/calendar-month/calendar-row.directive.d.ts +1 -1
  18. package/lib/calendar/calendar-navigation/calendar-navigation.component.d.ts +16 -6
  19. package/lib/calendar/calendar.service.d.ts +11 -3
  20. package/lib/calendar/calendar.utils.d.ts +4 -3
  21. package/lib/date-picker/date-picker.component.d.ts +9 -10
  22. package/lib/date-range-picker/date-range-picker/date-range-picker.component.d.ts +65 -94
  23. package/package.json +2 -2
@@ -4,19 +4,23 @@ export function dateTransform(value) {
4
4
  export const convertIsoWeekToDate = (isoWeek) => {
5
5
  const [year, week] = isoWeek.split(/w/i);
6
6
  // Get date for 4th of January for year
7
- const date = new Date(Number(year), 0, 4);
7
+ const date = new Date(parseInt(year), 0, 4);
8
8
  // Get previous Monday, add 7 days for each week after first
9
- date.setDate(date.getDate() - (date.getDay() || 7) + 1 + (Number(week) - 1) * 7);
9
+ date.setDate(date.getDate() - (date.getDay() || 7) + 1 + (parseInt(week ?? 1) - 1) * 7);
10
10
  return date;
11
11
  };
12
- export const convertToDateObject = (date, selectionType) => {
12
+ export const convertToDateObject = (date, selectionType, propName) => {
13
13
  if (date instanceof Date) {
14
- return date;
14
+ return new Date(date);
15
+ }
16
+ if (isValidDate(date)) {
17
+ return new Date(date);
15
18
  }
16
19
  if (selectionType === 'week') {
17
20
  return convertIsoWeekToDate(date);
18
21
  }
19
- return new Date(Date.parse(date));
22
+ return tryDate(date, propName ?? 'convertToDateObject');
23
+ // return new Date(Date.parse(date));
20
24
  };
21
25
  export const convertToLocalDate = (d, locale, options = {}) => d.toLocaleDateString(locale, options);
22
26
  export const convertToLocalTime = (d, locale, options = {}) => d.toLocaleTimeString(locale, options);
@@ -242,6 +246,9 @@ export const isLastDayOfMonth = (date) => {
242
246
  test.setDate(test.getDate() + 1);
243
247
  return test.getMonth() !== month;
244
248
  };
249
+ export const equalDates = (a, b) => {
250
+ return (a && b && a.getTime() === b.getTime()) || (a === null && b === null);
251
+ };
245
252
  export const isSameDateAs = (date, date2) => {
246
253
  return (date.getDate() == date2.getDate() &&
247
254
  date.getMonth() == date2.getMonth() &&
@@ -294,19 +301,19 @@ export const tryDate = (value, propName = 'date') => {
294
301
  }
295
302
  return _value;
296
303
  };
297
- export const isDateInRangeDisabled = (startDate, endDate, dates) => {
298
- if (!dates || !dates.length) {
304
+ export const isDateInRangeDisabled = (startDate, endDate, dates, dateFilter) => {
305
+ if ((!dates || !dates.length) && !dateFilter) {
299
306
  return false;
300
307
  }
301
308
  if (startDate && endDate) {
302
309
  const date = new Date(startDate);
303
310
  let disabled = false;
304
- while (date < endDate) {
305
- date.setDate(date.getDate() + 1);
306
- if (isDateDisabled(date, null, null, dates)) {
307
- disabled = true;
311
+ while (date <= endDate) {
312
+ disabled = isDateDisabled(date, null, null, dates) || (dateFilter ? !dateFilter(date) : false);
313
+ if (disabled) {
308
314
  break;
309
315
  }
316
+ date.setDate(date.getDate() + 1);
310
317
  }
311
318
  return disabled;
312
319
  }
@@ -383,4 +390,4 @@ export const isDateInRangeDisabled = (startDate, endDate, dates) => {
383
390
  // // }
384
391
  //
385
392
  // // getDate('12/07/1997');
386
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIudXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci9zcmMvbGliL2NhbGVuZGFyL2NhbGVuZGFyLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sVUFBVSxhQUFhLENBQUMsS0FBb0I7SUFDaEQsT0FBTyxPQUFPLENBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLE9BQWUsRUFBRSxFQUFFO0lBQ3RELE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6Qyx1Q0FBdUM7SUFDdkMsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxQyw0REFBNEQ7SUFDNUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2pGLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxJQUFtQixFQUFFLGFBQTZCLEVBQUUsRUFBRTtJQUN4RixJQUFJLElBQUksWUFBWSxJQUFJLEVBQUUsQ0FBQztRQUN6QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxJQUFJLGFBQWEsS0FBSyxNQUFNLEVBQUUsQ0FBQztRQUM3QixPQUFPLG9CQUFvQixDQUFDLElBQWMsQ0FBQyxDQUFD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eEMsdUJBQXVCO0FBQ3ZCLGNBQWM7QUFDZCxVQUFVO0FBQ1Ysc0RBQXNEO0FBQ3RELDhDQUE4QztBQUM5QyxLQUFLO0FBQ0wsRUFBRTtBQUNGLHVDQUF1QztBQUN2QywyREFBMkQ7QUFDM0QsOENBQThDO0FBQzlDLE9BQU87QUFDUCxFQUFFO0FBQ0YsNEJBQTRCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2VsZWN0aW9uVHlwZSB9IGZyb20gJy4vY2FsZW5kYXIuc2VydmljZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBkYXRlVHJhbnNmb3JtKHZhbHVlOiBEYXRlIHwgbnVtYmVyKSB7XG4gIHJldHVybiB0cnlEYXRlKHZhbHVlLCAnZGF0ZVRyYW5zZm9ybScpO1xufVxuXG5leHBvcnQgY29uc3QgY29udmVydElzb1dlZWtUb0RhdGUgPSAoaXNvV2Vlazogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IFt5ZWFyLCB3ZWVrXSA9IGlzb1dlZWsuc3BsaXQoL3cvaSk7XG4gIC8vIEdldCBkYXRlIGZvciA0dGggb2YgSmFudWFyeSBmb3IgeWVhclxuICBjb25zdCBkYXRlID0gbmV3IERhdGUoTnVtYmVyKHllYXIpLCAwLCA0KTtcbiAgLy8gR2V0IHByZXZpb3VzIE1vbmRheSwgYWRkIDcgZGF5cyBmb3IgZWFjaCB3ZWVrIGFmdGVyIGZpcnN0XG4gIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSAtIChkYXRlLmdldERheSgpIHx8IDcpICsgMSArIChOdW1iZXIod2VlaykgLSAxKSAqIDcpO1xuICByZXR1cm4gZGF0ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb252ZXJ0VG9EYXRlT2JqZWN0ID0gKGRhdGU6IERhdGUgfCBzdHJpbmcsIHNlbGVjdGlvblR5cGU/OiBTZWxlY3Rpb25UeXBlKSA9PiB7XG4gIGlmIChkYXRlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgIHJldHVybiBkYXRlO1xuICB9XG5cbiAgaWYgKHNlbGVjdGlvblR5cGUgPT09ICd3ZWVrJykge1xuICAgIHJldHVybiBjb252ZXJ0SXNvV2Vla1RvRGF0ZShkYXRlIGFzIHN0cmluZyk7XG4gIH1cblxuICByZXR1cm4gbmV3IERhdGUoRGF0ZS5wYXJzZShkYXRlKSk7XG59O1xuXG5leHBvcnQgY29uc3QgY29udmVydFRvTG9jYWxEYXRlID0gKGQ6IERhdGUsIGxvY2FsZTogc3RyaW5nLCBvcHRpb25zID0ge30pID0+IGQudG9Mb2NhbGVEYXRlU3RyaW5nKGxvY2FsZSwgb3B0aW9ucyk7XG5cbmV4cG9ydCBjb25zdCBjb252ZXJ0VG9Mb2NhbFRpbWUgPSAoZDogRGF0ZSwgbG9jYWxlOiBzdHJpbmcsIG9wdGlvbnMgPSB7fSkgPT4gZC50b0xvY2FsZVRpbWVTdHJpbmcobG9jYWxlLCBvcHRpb25zKTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUdyb3Vwc0luQXJyYXkgPSA8VD4oYXJyOiBUW10sIG51bWJlck9mR3JvdXBzOiBudW1iZXIpOiBUW11bXSA9PiB7XG4gIGNvbnN0IHBlckdyb3VwID0gTWF0aC5jZWlsKGFyci5sZW5ndGggLyBudW1iZXJPZkdyb3Vwcyk7XG4gIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiBudW1iZXJPZkdyb3VwcyB9KVxuICAgIC5maWxsKCcnKVxuICAgIC5tYXAoKF8sIGkpID0+IGFyci5zbGljZShpICogcGVyR3JvdXAsIChpICsgMSkgKiBwZXJHcm91cCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENhbGVuZGFyRGF0ZSA9IChjYWxlbmRhckRhdGU6IERhdGUsIG9yZGVyOiBudW1iZXIsIHZpZXc6ICdkYXlzJyB8ICdtb250aHMnIHwgJ3llYXJzJykgPT4ge1xuICBpZiAob3JkZXIgIT09IDAgJiYgdmlldyA9PT0gJ2RheXMnKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGNhbGVuZGFyRGF0ZS5nZXRGdWxsWWVhcigpLCBjYWxlbmRhckRhdGUuZ2V0TW9udGgoKSArIG9yZGVyLCAxKTtcbiAgfVxuXG4gIGlmIChvcmRlciAhPT0gMCAmJiB2aWV3ID09PSAnbW9udGhzJykge1xuICAgIHJldHVybiBuZXcgRGF0ZShjYWxlbmRhckRhdGUuZ2V0RnVsbFllYXIoKSArIG9yZGVyLCBjYWxlbmRhckRhdGUuZ2V0TW9udGgoKSwgMSk7XG4gIH1cblxuICBpZiAob3JkZXIgIT09IDAgJiYgdmlldyA9PT0gJ3llYXJzJykge1xuICAgIHJldHVybiBuZXcgRGF0ZShjYWxlbmRhckRhdGUuZ2V0RnVsbFllYXIoKSArIDEyICogb3JkZXIsIGNhbGVuZGFyRGF0ZS5nZXRNb250aCgpLCAxKTtcbiAgfVxuXG4gIHJldHVybiBjYWxlbmRhckRhdGU7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q3VycmVudFllYXIgPSAoKSA9PiBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCk7XG5cbmV4cG9ydCBjb25zdCBnZXRDdXJyZW50TW9udGggPSAoKSA9PiBuZXcgRGF0ZSgpLmdldE1vbnRoKCk7XG5cbmV4cG9ydCBjb25zdCBnZXREYXRlQnlTZWxlY3Rpb25UeXBlID0gKGRhdGU6IERhdGUgfCBudWxsLCBzZWxlY3Rpb25UeXBlOiBTZWxlY3Rpb25UeXBlKSA9PiB7XG4gIGlmIChkYXRlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoc2VsZWN0aW9uVHlwZSA9PT0gJ3dlZWsnKSB7XG4gICAgcmV0dXJuIGAke2RhdGUuZ2V0RnVsbFllYXIoKX1XJHtnZXRXZWVrTnVtYmVyKGRhdGUpfWA7XG4gIH1cblxuICBpZiAoc2VsZWN0aW9uVHlwZSA9PT0gJ21vbnRoJykge1xuICAgIGNvbnN0IG1vbnRoTnVtYmVyID0gYDAke2RhdGUuZ2V0TW9udGgoKSArIDF9YC5zbGljZSgtMik7XG4gICAgcmV0dXJuIGAke2RhdGUuZ2V0RnVsbFllYXIoKX0tJHttb250aE51bWJlcn1gO1xuICB9XG5cbiAgaWYgKHNlbGVjdGlvblR5cGUgPT09ICd5ZWFyJykge1xuICAgIHJldHVybiBgJHtkYXRlLmdldEZ1bGxZZWFyKCl9YDtcbiAgfVxuXG4gIHJldHVybiBkYXRlO1xufTtcblxuLy9cblxuZXhwb3J0IGNvbnN0IGdldExvY2FsRGF0ZUZyb21TdHJpbmcgPSAoc3RyaW5nOiBzdHJpbmcsIGxvY2FsZTogc3RyaW5nLCB0aW1lPzogYm9vbGVhbikgPT4ge1xuICBjb25zdCBkYXRlID0gbmV3IERhdGUoMjAxMywgMTEsIDMxLCAxNywgMTksIDIyKTtcbiAgbGV0IHJlZ2V4ID0gdGltZSA/IGRhdGUudG9Mb2NhbGVTdHJpbmcobG9jYWxlKSA6IGRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKGxvY2FsZSk7XG4gIHJlZ2V4ID0gcmVnZXhcbiAgICAucmVwbGFjZSgnMjAxMycsICcoPzx5ZWFyPlswLTldezIsNH0pJylcbiAgICAucmVwbGFjZSgnMTInLCAnKD88bW9udGg+WzAtOV17MSwyfSknKVxuICAgIC5yZXBsYWNlKCczMScsICcoPzxkYXk+WzAtOV17MSwyfSknKTtcblxuICBpZiAodGltZSkge1xuICAgIHJlZ2V4ID0gcmVnZXhcbiAgICAgIC5yZXBsYWNlKCc1JywgJyg/PGhvdXI+WzAtOV17MSwyfSknKVxuICAgICAgLnJlcGxhY2UoJzE3JywgJyg/PGhvdXI+WzAtOV17MSwyfSknKVxuICAgICAgLnJlcGxhY2UoJzE5JywgJyg/PG1pbnV0ZT5bMC05XXsxLDJ9KScpXG4gICAgICAucmVwbGFjZSgnMjInLCAnKD88c2Vjb25kPlswLTldezEsMn0pJylcbiAgICAgIC5yZXBsYWNlKCdQTScsICcoPzxhbXBtPltBLVpdezJ9KScpO1xuICB9XG5cbiAgY29uc3Qgcmd4ID0gUmVnRXhwKGAke3JlZ2V4fWApO1xuICBjb25zdCBwYXJ0aWFscyA9IHN0cmluZy5tYXRjaChyZ3gpO1xuXG4gIGlmIChwYXJ0aWFscyA9PT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IG5ld0RhdGUgPVxuICAgIHBhcnRpYWxzLmdyb3VwcyAmJlxuICAgICh0aW1lXG4gICAgICA/IG5ldyBEYXRlKFxuICAgICAgICAgIE51bWJlcihwYXJ0aWFscy5ncm91cHNbJ3llYXInXSksXG4gICAgICAgICAgTnVtYmVyKHBhcnRpYWxzLmdyb3Vwc1snbW9udGgnXSkgLSAxLFxuICAgICAgICAgIE51bWJlcihwYXJ0aWFscy5ncm91cHNbJ2RheSddKSxcbiAgICAgICAgICBwYXJ0aWFscy5ncm91cHNbJ2FtcG0nXVxuICAgICAgICAgICAgPyBwYXJ0aWFscy5ncm91cHNbJ2FtcG0nXSA9PT0gJ1BNJ1xuICAgICAgICAgICAgICA/IE51bWJlcihwYXJ0aWFscy5ncm91cHNbJ2hvdXInXSkgKyAxMlxuICAgICAgICAgICAgICA6IE51bWJlcihwYXJ0aWFscy5ncm91cHNbJ2hvdXInXSlcbiAgICAgICAgICAgIDogTnVtYmVyKHBhcnRpYWxzLmdyb3Vwc1snaG91ciddKSxcbiAgICAgICAgICBOdW1iZXIocGFydGlhbHMuZ3JvdXBzWydtaW51dGUnXSksXG4gICAgICAgICAgTnVtYmVyKHBhcnRpYWxzLmdyb3Vwc1snc2Vjb25kJ10pXG4gICAgICAgIClcbiAgICAgIDogbmV3IERhdGUoXG4gICAgICAgICAgTnVtYmVyKHBhcnRpYWxzLmdyb3Vwc1sneWVhciddKSxcbiAgICAgICAgICBOdW1iZXIocGFydGlhbHMuZ3JvdXBzWydtb250aCddKSAtIDEsXG4gICAgICAgICAgTnVtYmVyKHBhcnRpYWxzLmdyb3Vwc1snZGF5J10pXG4gICAgICAgICkpO1xuXG4gIHJldHVybiBuZXdEYXRlO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE1vbnRoTmFtZSA9IChtb250aDogbnVtYmVyLCBsb2NhbGU6IHN0cmluZykgPT4ge1xuICBjb25zdCBkID0gbmV3IERhdGUoKTtcbiAgZC5zZXREYXRlKDEpO1xuICBkLnNldE1vbnRoKG1vbnRoKTtcbiAgcmV0dXJuIGQudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCB7IG1vbnRoOiAnbG9uZycgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TW9udGhzTmFtZXMgPSAobG9jYWxlOiBzdHJpbmcsIHllYXI6IG51bWJlcikgPT4ge1xuICBjb25zdCBtb250aHMgPSBbXTtcbiAgY29uc3QgZCA9IG5ldyBEYXRlKHllYXIpO1xuICBkLnNldERhdGUoMSk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgZC5zZXRNb250aChpKTtcbiAgICBtb250aHMucHVzaCh7IHllYXIsIG1vbnRoOiBkLnRvTG9jYWxlRGF0ZVN0cmluZyhsb2NhbGUsIHsgbW9udGg6ICdzaG9ydCcgfSkgfSk7XG4gIH1cblxuICByZXR1cm4gbW9udGhzO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFllYXJzID0gKHllYXI6IG51bWJlcikgPT4ge1xuICBjb25zdCB5ZWFycyA9IFtdO1xuICBmb3IgKGxldCBfeWVhciA9IHllYXIgLSA2OyBfeWVhciA8IHllYXIgKyA2OyBfeWVhcisrKSB7XG4gICAgeWVhcnMucHVzaChfeWVhcik7XG4gIH1cblxuICByZXR1cm4geWVhcnM7XG59O1xuXG5jb25zdCBnZXRMZWFkaW5nRGF5cyA9ICh5ZWFyOiBudW1iZXIsIG1vbnRoOiBudW1iZXIsIGZpcnN0RGF5T2ZXZWVrOiBudW1iZXIpID0+IHtcbiAgLy8gMDogc3VuZGF5XG4gIC8vIDE6IG1vbmRheVxuICBjb25zdCBkYXRlcyA9IFtdO1xuICBjb25zdCBkID0gbmV3IERhdGUoeWVhciwgbW9udGgpO1xuICBjb25zdCB5ID0gZC5nZXRGdWxsWWVhcigpO1xuICBjb25zdCBtID0gZC5nZXRNb250aCgpO1xuICBjb25zdCBmaXJzdFdlZWtkYXkgPSBuZXcgRGF0ZSh5LCBtLCAxKS5nZXREYXkoKTtcbiAgbGV0IGxlYWRpbmdEYXlzID0gNiAtICg2IC0gZmlyc3RXZWVrZGF5KSAtIGZpcnN0RGF5T2ZXZWVrO1xuXG4gIGlmIChmaXJzdERheU9mV2Vlaykge1xuICAgIGxlYWRpbmdEYXlzID0gbGVhZGluZ0RheXMgPCAwID8gNyArIGxlYWRpbmdEYXlzIDogbGVhZGluZ0RheXM7XG4gIH1cblxuICBmb3IgKGxldCBpID0gbGVhZGluZ0RheXMgKiAtMTsgaSA8IDA7IGkrKykge1xuICAgIGRhdGVzLnB1c2goe1xuICAgICAgZGF0ZTogbmV3IERhdGUoeSwgbSwgaSArIDEpLFxuICAgICAgbW9udGg6ICdwcmV2aW91cydcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBkYXRlcztcbn07XG5cbmNvbnN0IGdldE1vbnRoRGF5cyA9ICh5ZWFyOiBudW1iZXIsIG1vbnRoOiBudW1iZXIpID0+IHtcbiAgY29uc3QgZGF0ZXMgPSBbXTtcbiAgY29uc3QgbGFzdERheSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoICsgMSwgMCkuZ2V0RGF0ZSgpO1xuICBmb3IgKGxldCBpID0gMTsgaSA8PSBsYXN0RGF5OyBpKyspIHtcbiAgICBkYXRlcy5wdXNoKHtcbiAgICAgIGRhdGU6IG5ldyBEYXRlKHllYXIsIG1vbnRoLCBpKSxcbiAgICAgIG1vbnRoOiAnY3VycmVudCdcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gZGF0ZXM7XG59O1xuXG5jb25zdCBnZXRUcmFpbGluZ0RheXMgPSAoXG4gIHllYXI6IG51bWJlcixcbiAgbW9udGg6IG51bWJlcixcbiAgbGVhZGluZ0RheXM6IHsgZGF0ZTogRGF0ZTsgbW9udGg6IHN0cmluZyB9W10sXG4gIG1vbnRoRGF5czogeyBkYXRlOiBEYXRlOyBtb250aDogc3RyaW5nIH1bXVxuKSA9PiB7XG4gIGNvbnN0IGRhdGVzID0gW107XG4gIGNvbnN0IGRheXMgPSA0MiAtIChsZWFkaW5nRGF5cy5sZW5ndGggKyBtb250aERheXMubGVuZ3RoKTtcbiAgZm9yIChsZXQgaSA9IDE7IGkgPD0gZGF5czsgaSsrKSB7XG4gICAgZGF0ZXMucHVzaCh7XG4gICAgICBkYXRlOiBuZXcgRGF0ZSh5ZWFyLCBtb250aCArIDEsIGkpLFxuICAgICAgbW9udGg6ICduZXh0J1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBkYXRlcztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXREYXlOdW1iZXIgPSAoZGF0ZTogRGF0ZSkgPT5cbiAgTWF0aC5jZWlsKChOdW1iZXIoZGF0ZSkgLSBOdW1iZXIobmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCAwLCAwKSkpIC8gMTAwMCAvIDYwIC8gNjAgLyAyNCk7XG5cbmV4cG9ydCBjb25zdCBnZXRXZWVrTnVtYmVyID0gKGRhdGU6IERhdGUpID0+IHtcbiAgY29uc3Qgd2VlazEgPSBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIDAsIDQpO1xuICByZXR1cm4gMSArIE1hdGgucm91bmQoKChkYXRlLmdldFRpbWUoKSAtIHdlZWsxLmdldFRpbWUoKSkgLyA4NjQwMDAwMCAtIDMgKyAoKHdlZWsxLmdldERheSgpICsgNikgJSA3KSkgLyA3KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRNb250aERldGFpbHMgPSAoeWVhcjogbnVtYmVyLCBtb250aDogbnVtYmVyLCBmaXJzdERheU9mV2VlazogbnVtYmVyKSA9PiB7XG4gIGNvbnN0IGRheXNQcmV2TW9udGggPSBnZXRMZWFkaW5nRGF5cyh5ZWFyLCBtb250aCwgZmlyc3REYXlPZldlZWspO1xuICBjb25zdCBkYXlzVGhpc01vbnRoID0gZ2V0TW9udGhEYXlzKHllYXIsIG1vbnRoKTtcbiAgY29uc3QgZGF5c05leHRNb250aCA9IGdldFRyYWlsaW5nRGF5cyh5ZWFyLCBtb250aCwgZGF5c1ByZXZNb250aCwgZGF5c1RoaXNNb250aCk7XG4gIGNvbnN0IGRheXMgPSBbLi4uZGF5c1ByZXZNb250aCwgLi4uZGF5c1RoaXNNb250aCwgLi4uZGF5c05leHRNb250aF07XG5cbiAgY29uc3Qgd2Vla3M6IHsgd2Vla051bWJlcjogbnVtYmVyOyBkYXlzOiB7IGRhdGU6IERhdGU7IG1vbnRoOiBzdHJpbmcgfVtdIH1bXSA9IFtdO1xuXG4gIGRheXMuZm9yRWFjaCgoZGF5LCBpbmRleCkgPT4ge1xuICAgIGlmIChpbmRleCAlIDcgPT09IDAgfHwgd2Vla3MubGVuZ3RoID09PSAwKSB7XG4gICAgICB3ZWVrcy5wdXNoKHsgd2Vla051bWJlcjogLTEsIGRheXM6IFtdIH0pO1xuICAgIH1cblxuICAgIGlmICgoaW5kZXggKyAxKSAlIDcgPT09IDApIHtcbiAgICAgIHdlZWtzW3dlZWtzLmxlbmd0aCAtIDFdLndlZWtOdW1iZXIgPSBnZXRXZWVrTnVtYmVyKGRheS5kYXRlKTtcbiAgICB9XG5cbiAgICB3ZWVrc1t3ZWVrcy5sZW5ndGggLSAxXS5kYXlzLnB1c2goZGF5KTtcbiAgfSk7XG5cbiAgcmV0dXJuIFsuLi53ZWVrc107XG59O1xuXG5leHBvcnQgY29uc3QgaXNEYXRlRGlzYWJsZWQgPSAoZGF0ZTogRGF0ZSB8IG51bGwsIG1pbj86IERhdGUgfCBudWxsLCBtYXg/OiBEYXRlIHwgbnVsbCwgZGF0ZXM/OiAoRGF0ZSB8IERhdGVbXSlbXSkgPT4ge1xuICBpZiAoIWRhdGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKCFtaW4gJiYgIW1heCAmJiAoIWRhdGVzIHx8ICFkYXRlcy5sZW5ndGgpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChtaW4gJiYgZGF0ZSA8IG1pbikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChtYXggJiYgZGF0ZSA+IG1heCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgbGV0IGRpc2FibGVkID0gZmFsc2U7XG4gIGlmIChkYXRlcykge1xuICAgIGZvciAoY29uc3QgX2RhdGUgb2YgZGF0ZXMpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KF9kYXRlKSkge1xuICAgICAgICBpZiAoaXNEYXRlSW5SYW5nZShkYXRlLCBfZGF0ZVswXSwgX2RhdGVbMV0pKSB7XG4gICAgICAgICAgZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoX2RhdGUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgIGlmIChpc1NhbWVEYXRlQXMoZGF0ZSwgX2RhdGUpKSB7XG4gICAgICAgICAgZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRpc2FibGVkO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzRGF0ZUluUmFuZ2UgPSAoZGF0ZTogRGF0ZSB8IG51bGwsIHN0YXJ0OiBEYXRlIHwgbnVsbCwgZW5kOiBEYXRlIHwgbnVsbCkgPT4ge1xuICByZXR1cm4gZGF0ZSAmJiBzdGFydCAmJiBlbmQgJiYgc3RhcnQgPD0gZGF0ZSAmJiBkYXRlIDw9IGVuZDtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1llYXJJblJhbmdlID0gKGRhdGU6IERhdGUgfCBudWxsLCBzdGFydDogRGF0ZSB8IG51bGwsIGVuZDogRGF0ZSB8IG51bGwpID0+IHtcbiAgcmV0dXJuIGRhdGUgJiYgc3RhcnQgJiYgZW5kICYmIHN0YXJ0LmdldEZ1bGxZZWFyKCkgPD0gZGF0ZS5nZXRGdWxsWWVhcigpICYmIGRhdGUuZ2V0RnVsbFllYXIoKSA8PSBlbmQuZ2V0RnVsbFllYXIoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0RhdGVCZXR3ZWVuTWluTWF4ID0gKGRhdGU6IERhdGUgfCBudWxsLCBtaW46IERhdGUgfCBudWxsLCBtYXg6IERhdGUgfCBudWxsKSA9PiB7XG4gIGlmIChkYXRlICYmIG1pbiAmJiBtYXgpIHtcbiAgICByZXR1cm4gbWluIDw9IGRhdGUgJiYgZGF0ZSA8PSBtYXg7XG4gIH1cbiAgaWYgKGRhdGUgJiYgbWluKSB7XG4gICAgcmV0dXJuIG1pbiA8PSBkYXRlO1xuICB9XG4gIGlmIChkYXRlICYmIG1heCkge1xuICAgIHJldHVybiBkYXRlIDw9IG1heDtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0RhdGVTZWxlY3RlZCA9IChkYXRlOiBEYXRlIHwgbnVsbCwgc3RhcnQ6IERhdGUgfCBudWxsLCBlbmQ6IERhdGUgfCBudWxsKSA9PiB7XG4gIHJldHVybiBkYXRlICYmICgoc3RhcnQgJiYgaXNTYW1lRGF0ZUFzKHN0YXJ0LCBkYXRlKSkgfHwgKGVuZCAmJiBpc1NhbWVEYXRlQXMoZW5kLCBkYXRlKSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzTW9udGhTZWxlY3RlZCA9IChkYXRlOiBEYXRlIHwgbnVsbCwgc3RhcnQ6IERhdGUgfCBudWxsLCBlbmQ6IERhdGUgfCBudWxsKSA9PiB7XG4gIHJldHVybiBkYXRlICYmICgoc3RhcnQgJiYgaXNTYW1lTW9udGhBcyhzdGFydCwgZGF0ZSkpIHx8IChlbmQgJiYgaXNTYW1lTW9udGhBcyhlbmQsIGRhdGUpKSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNZZWFyU2VsZWN0ZWQgPSAoZGF0ZTogRGF0ZSB8IG51bGwsIHN0YXJ0OiBEYXRlIHwgbnVsbCwgZW5kOiBEYXRlIHwgbnVsbCkgPT4ge1xuICByZXR1cm4gZGF0ZSAmJiAoKHN0YXJ0ICYmIGlzU2FtZVllYXJBcyhzdGFydCwgZGF0ZSkpIHx8IChlbmQgJiYgaXNTYW1lWWVhckFzKGVuZCwgZGF0ZSkpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0VuZERhdGUgPSAoZGF0ZTogRGF0ZSB8IG51bGwsIHN0YXJ0OiBEYXRlIHwgbnVsbCwgZW5kOiBEYXRlIHwgbnVsbCkgPT4ge1xuICByZXR1cm4gZGF0ZSAmJiBzdGFydCAmJiBlbmQgJiYgaXNTYW1lRGF0ZUFzKGVuZCwgZGF0ZSkgJiYgc3RhcnQgPCBlbmQ7XG59O1xuXG5leHBvcnQgY29uc3QgaXNMYXN0RGF5T2ZNb250aCA9IChkYXRlOiBEYXRlKSA9PiB7XG4gIGNvbnN0IHRlc3QgPSBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSk7XG4gIGNvbnN0IG1vbnRoID0gdGVzdC5nZXRNb250aCgpO1xuXG4gIHRlc3Quc2V0RGF0ZSh0ZXN0LmdldERhdGUoKSArIDEpO1xuICByZXR1cm4gdGVzdC5nZXRNb250aCgpICE9PSBtb250aDtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1NhbWVEYXRlQXMgPSAoZGF0ZTogRGF0ZSwgZGF0ZTI6IERhdGUpID0+IHtcbiAgcmV0dXJuIChcbiAgICBkYXRlLmdldERhdGUoKSA9PSBkYXRlMi5nZXREYXRlKCkgJiZcbiAgICBkYXRlLmdldE1vbnRoKCkgPT0gZGF0ZTIuZ2V0TW9udGgoKSAmJlxuICAgIGRhdGUuZ2V0RnVsbFllYXIoKSA9PSBkYXRlMi5nZXRGdWxsWWVhcigpXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNTYW1lTW9udGhBcyA9IChkYXRlOiBEYXRlLCBkYXRlMjogRGF0ZSkgPT4ge1xuICByZXR1cm4gZGF0ZS5nZXRNb250aCgpID09IGRhdGUyLmdldE1vbnRoKCkgJiYgZGF0ZS5nZXRGdWxsWWVhcigpID09IGRhdGUyLmdldEZ1bGxZZWFyKCk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNTYW1lWWVhckFzID0gKGRhdGU6IERhdGUsIGRhdGUyOiBEYXRlKSA9PiB7XG4gIHJldHVybiBkYXRlLmdldEZ1bGxZZWFyKCkgPT0gZGF0ZTIuZ2V0RnVsbFllYXIoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1N0YXJ0RGF0ZSA9IChkYXRlOiBEYXRlIHwgbnVsbCwgc3RhcnQ6IERhdGUgfCBudWxsLCBlbmQ6IERhdGUgfCBudWxsKSA9PiB7XG4gIHJldHVybiBkYXRlICYmIHN0YXJ0ICYmIGVuZCAmJiBpc1NhbWVEYXRlQXMoc3RhcnQsIGRhdGUpICYmIHN0YXJ0IDwgZW5kO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzVG9kYXkgPSAoZGF0ZTogRGF0ZSkgPT4ge1xuICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XG4gIHJldHVybiAoXG4gICAgZGF0ZS5nZXREYXRlKCkgPT0gdG9kYXkuZ2V0RGF0ZSgpICYmXG4gICAgZGF0ZS5nZXRNb250aCgpID09IHRvZGF5LmdldE1vbnRoKCkgJiZcbiAgICBkYXRlLmdldEZ1bGxZZWFyKCkgPT0gdG9kYXkuZ2V0RnVsbFllYXIoKVxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzVGhpc01vbnRoID0gKGRhdGU6IERhdGUsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpO1xuICByZXR1cm4gaW5kZXggPT0gdG9kYXkuZ2V0TW9udGgoKSAmJiBkYXRlLmdldEZ1bGxZZWFyKCkgPT0gdG9kYXkuZ2V0RnVsbFllYXIoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1RoaXNZZWFyID0gKHllYXI6IG51bWJlcikgPT4ge1xuICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XG4gIHJldHVybiB5ZWFyID09IHRvZGF5LmdldEZ1bGxZZWFyKCk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNWYWxpZERhdGUgPSAoZGF0ZTogbnVtYmVyIHwgc3RyaW5nIHwgRGF0ZSk6IGJvb2xlYW4gPT4ge1xuICBpZiAoZGF0ZSBpbnN0YW5jZW9mIERhdGUgfHwgdHlwZW9mIGRhdGUgPT09ICdudW1iZXInIHx8IHR5cGVvZiBkYXRlID09PSAnc3RyaW5nJykge1xuICAgIC8vIFRyeSB0byBjcmVhdGUgYSBEYXRlIG9iamVjdCBmcm9tIERhdGUgb3IgdGltZXN0YW1wIG9yIHN0cmluZ1xuICAgIGNvbnN0IGRhdGVPYmogPSBuZXcgRGF0ZShkYXRlKTtcbiAgICByZXR1cm4gIWlzTmFOKGRhdGVPYmouZ2V0VGltZSgpKTtcbiAgfVxuXG4gIC8vIElmIG5vbmUgb2YgdGhlIGFib3ZlIGNvbmRpdGlvbnMgYXJlIG1ldCwgaXQncyBub3QgYSB2YWxpZCBkYXRlXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydCBjb25zdCB0cnlEYXRlID0gKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBEYXRlLCBwcm9wTmFtZTogc3RyaW5nID0gJ2RhdGUnKSA9PiB7XG4gIGxldCBfdmFsdWU7XG4gIHRyeSB7XG4gICAgaWYgKCFpc1ZhbGlkRGF0ZSh2YWx1ZSkpIHtcbiAgICAgIHRocm93IHZhbHVlO1xuICAgIH1cbiAgICBfdmFsdWUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnNvbGUud2FybihgSW52YWxpZCAke3Byb3BOYW1lfWAsIGVycik7XG4gICAgX3ZhbHVlID0gbmV3IERhdGUoKTtcbiAgICBfdmFsdWUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIH1cbiAgcmV0dXJuIF92YWx1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0RhdGVJblJhbmdlRGlzYWJsZWQgPSAoc3RhcnREYXRlPzogRGF0ZSB8IG51bGwsIGVuZERhdGU/OiBEYXRlIHwgbnVsbCwgZGF0ZXM/OiAoRGF0ZSB8IERhdGVbXSlbXSkgPT4ge1xuICBpZiAoIWRhdGVzIHx8ICFkYXRlcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHN0YXJ0RGF0ZSAmJiBlbmREYXRlKSB7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHN0YXJ0RGF0ZSk7XG4gICAgbGV0IGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICB3aGlsZSAoZGF0ZSA8IGVuZERhdGUpIHtcbiAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIDEpO1xuICAgICAgaWYgKGlzRGF0ZURpc2FibGVkKGRhdGUsIG51bGwsIG51bGwsIGRhdGVzKSkge1xuICAgICAgICBkaXNhYmxlZCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGlzYWJsZWQ7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuLy8gZXhwb3J0IGNvbnN0IHN0cmluZ1RvRGF0ZUNvbnZlcnQgPSAoZGF0ZTogc3RyaW5nLCBsb2NhbGVzOiBzdHJpbmcpID0+IHtcbi8vICAgY29uc3QgZm9ybWF0dGVyID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoJ2ZyLUZSJyk7XG4vLyAgIGNvbnN0IHBhcnRzID0gZm9ybWF0dGVyLmZvcm1hdFRvUGFydHMoKTtcbi8vICAgY29uc29sZS5sb2coZGF0ZSwgcGFydHMsIGZvcm1hdHRlci5mb3JtYXQoKSwgZm9ybWF0dGVyLnJlc29sdmVkT3B0aW9ucygpLCBmb3JtYXR0ZXIuZm9ybWF0KCkpO1xuLy8gfTtcblxuLy8gZGVjbGFyZSBuYW1lc3BhY2UgSW50bCB7XG4vLyAgIHR5cGUgRGF0ZVRpbWVGb3JtYXRQYXJ0VHlwZXMgPSBcImRheVwiIHwgXCJkYXlQZXJpb2RcIiB8IFwiZXJhXCIgfCBcImZyYWN0aW9uYWxTZWNvbmRcIiB8IFwiaG91clwiIHwgXCJsaXRlcmFsXCIgfCBcIm1pbnV0ZVwiIHwgXCJtb250aFwiIHwgXCJzZWNvbmRcIiB8IFwidGltZVpvbmVOYW1lXCIgfCBcIndlZWtkYXlcIiB8IFwieWVhclwiO1xuLy9cbi8vICAgaW50ZXJmYWNlIERhdGVUaW1lRm9ybWF0UGFydCB7XG4vLyAgICAgdHlwZTogRGF0ZVRpbWVGb3JtYXRQYXJ0VHlwZXM7XG4vLyAgICAgdmFsdWU6IHN0cmluZztcbi8vICAgfVxuLy9cbi8vICAgaW50ZXJmYWNlIERhdGVUaW1lRm9ybWF0IHtcbi8vICAgICBmb3JtYXRUb1BhcnRzKGRhdGU/OiBEYXRlIHwgbnVtYmVyKTogRGF0ZVRpbWVGb3JtYXRQYXJ0W107XG4vLyAgIH1cbi8vIH1cblxudHlwZSBEYXRlVGltZUZvcm1hdFBhcnRUeXBlcyA9XG4gIHwgJ2RheSdcbiAgfCAnZGF5UGVyaW9kJ1xuICB8ICdlcmEnXG4gIHwgJ2ZyYWN0aW9uYWxTZWNvbmQnXG4gIHwgJ2hvdXInXG4gIHwgJ2xpdGVyYWwnXG4gIHwgJ21pbnV0ZSdcbiAgfCAnbW9udGgnXG4gIHwgJ3NlY29uZCdcbiAgfCAndGltZVpvbmVOYW1lJ1xuICB8ICd3ZWVrZGF5J1xuICB8ICd5ZWFyJztcbnR5cGUgRGF0ZUZvcm1hdFBhcnRUeXBlcyA9ICdkYXknIHwgJ21vbnRoJyB8ICd5ZWFyJyB8ICdsaXRlcmFsJztcblxuLy8gdHlwZSBEYXRlUGFydHMgPSB7XG4vLyAgIFtrZXkgaW4gRGF0ZVRpbWVGb3JtYXRQYXJ0VHlwZXNdPzogc3RyaW5nO1xuLy8gfTtcblxuLy8gdHlwZSBEYXRlUGFydHMgPSB7XG4vLyAgIHllYXI6IG51bWJlciwgbW9udGg6IG51bWJlciwgZGF5OiBudW1iZXIsIGxpdGVyYWw6IHN0cmluZ1xuLy8gfTtcbi8vXG4vLyBleHBvcnQgY29uc3QgY3Z0RGF0ZSA9IChkYXRlQXNTdHJpbmc6IHN0cmluZywgbG9jYWxlID0gJ3BsLVBMJykgPT4ge1xuLy8gICBjb25zdCBkYXRlU3RyaW5nID0gZGF0ZUFzU3RyaW5nID8/IG5ldyBEYXRlKCkudG9Mb2NhbGVEYXRlU3RyaW5nKGxvY2FsZSk7XG4vLyAgIGNvbnN0IGRhdGVTcGxpdCA9IGRhdGVTdHJpbmcuc3BsaXQoL1suXFwtXFwvXFxzXFxEXS9naSkuZmlsdGVyKGl0ZW0gPT4gISFpdGVtLmxlbmd0aCk7XG4vLyAgIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KGxvY2FsZSk7XG4vLyAgIGNvbnN0IHBhcnRzID0gZm9ybWF0dGVyLmZvcm1hdFRvUGFydHMoKS5maWx0ZXIocGFydCA9PiBbJ3llYXInLCAnbW9udGgnLCAnZGF5J10uaW5jbHVkZXMocGFydC50eXBlKSk7XG4vLyAgIGNvbnN0IGRhdGVTaGltID0ge1xuLy8gICAgIGRheTogdW5kZWZpbmVkLCBtb250aDogdW5kZWZpbmVkLCB5ZWFyOiB1bmRlZmluZWRcbi8vICAgfTtcbi8vICAgcGFydHMuZm9yRWFjaCgocGFydCwgaW5kZXgpID0+IHtcbi8vICAgICBjb25zdCB7IHR5cGUsIHZhbHVlIH0gPSB7IC4uLnBhcnQgfTtcbi8vICAgICAvLyBAdHMtaWdub3JlXG4vLyAgICAgZGF0ZVNoaW1bdHlwZV0gPSBkYXRlU3BsaXRbaW5kZXhdO1xuLy8gICB9KTtcbi8vXG4vLyAgIHJldHVybiBkYXRlU2hpbTtcbi8vXG4vLyAgIC8vIGNvbnN0IGRhdGVQYXJ0czogRGF0ZVBhcnRzID0ge1xuLy8gICAvLyAgIHllYXI6IDAsXG4vLyAgIC8vICAgbW9udGg6IDAsXG4vLyAgIC8vICAgZGF5OiAwLFxuLy8gICAvLyAgIGxpdGVyYWw6ICcvJ1xuLy8gICAvLyB9O1xuLy8gICAvL1xuLy8gICAvLyBjb25zdCBsaXRlcmFsID0gcGFydHMuZmluZChwYXJ0ID0+IHBhcnQudHlwZSA9PT0gJ2xpdGVyYWwnKT8udmFsdWUgPz8gJy8nO1xuLy8gICAvLyAvLyBjb25zdCB5ZWFyID0gcGFyc2VJbnQocGFydHMuZmluZChwYXJ0ID0+IHBhcnQudHlwZSA9PT0gJ3llYXInKT8udmFsdWUgPz8gJzAnKTtcbi8vICAgLy8gLy8gY29uc3QgbW9udGggPSBwYXJzZUludChwYXJ0cy5maW5kKHBhcnQgPT4gcGFydC50eXBlID09PSAneWVhcicpPy52YWx1ZSA/PyAnMCcpO1xuLy8gICAvLyAvLyBjb25zdCBkYXkgPSBwYXJzZUludChwYXJ0cy5maW5kKHBhcnQgPT4gcGFydC50eXBlID09PSAneWVhcicpPy52YWx1ZSA/PyAnMCcpO1xuLy8gICAvL1xuLy8gICAvLyBjb25zdCBkYXRlQXJyYXkgPSBkYXRlU3RyaW5nLnNwbGl0KGxpdGVyYWwpO1xuLy8gICAvL1xuLy8gICAvLyBwYXJ0cy5mb3JFYWNoKHBhcnQgPT4ge1xuLy8gICAvLyAgIGNvbnN0IHt0eXBlLCB2YWx1ZX0gPSB7Li4ucGFydH07XG4vLyAgIC8vICAgaWYgKHR5cGUgPT09ICdkYXknKSB7XG4vLyAgIC8vXG4vLyAgIC8vICAgfVxuLy8gICAvLyB9KVxuLy8gICAvL1xuLy8gICAvLyBwYXJ0cy5maWx0ZXIocGFydCA9PiBwYXJ0LnR5cGUgaW4gZGF0ZVBhcnRzKS5tYXAocGFydCA9PiB7XG4vLyAgIC8vICAgY29uc3Qge3R5cGUsIHZhbHVlfSA9IHsuLi5wYXJ0fTtcbi8vICAgLy8gICAvLyBAdHMtaWdub3JlXG4vLyAgIC8vICAgZGF0ZVBhcnRzW3R5cGVdID0gcGFyc2VJbnQocGFydC52YWx1ZSk7XG4vLyAgIC8vICAgLy9cbi8vICAgLy8gICAvLyBzd2l0Y2ggKHR5cGUpIHtcbi8vICAgLy8gICAvLyAgIGNhc2UgJ2RheSc6XG4vLyAgIC8vICAgLy8gICAgIGRheSA9IHBhcnNlSW50KHZhbHVlKTtcbi8vICAgLy8gICAvLyAgICAgYnJlYWs7XG4vLyAgIC8vICAgLy8gICBjYXNlICdtb250aCc6XG4vLyAgIC8vICAgLy8gICAgIG1vbnRoID0gcGFyc2VJbnQodmFsdWUpO1xuLy8gICAvLyAgIC8vICAgICBicmVhaztcbi8vICAgLy8gICAvLyAgIGNhc2UgJ3llYXInOlxuLy8gICAvLyAgIC8vICAgICB5ZWFyID0gcGFyc2VJbnQodmFsdWUpO1xuLy8gICAvLyAgIC8vICAgICBicmVhaztcbi8vICAgLy8gICAvLyB9XG4vLyAgIC8vIH0pXG4vLyAgIC8vIC8vIGNvbnN0IHsgeWVhciwgbW9udGgsIGRheSB9ID0gey4uLmRhdGVQYXJ0c31cbi8vICAgLy8gcmV0dXJuIG5ldyBEYXRlKHllYXIsIG1vbnRoIC0gMSwgZGF5KTtcbi8vIH07XG4vL1xuLy8gLy8gZnVuY3Rpb24gZ2V0RGF0ZVgoZGF0ZUFzU3RyaW5nKSB7XG4vLyAvLyAgIGNvbnN0IFtkYXksIG1vbnRoLCB5ZWFyXSA9IGRhdGVBc1N0cmluZy5zcGxpdCgnLycpO1xuLy8gLy8gICByZXR1cm4gbmV3IERhdGUoeWVhciwgbW9udGggLSAxLCBkYXkpO1xuLy8gLy8gfVxuLy9cbi8vIC8vIGdldERhdGUoJzEyLzA3LzE5OTcnKTtcbiJdfQ==
393
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIudXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci9zcmMvbGliL2NhbGVuZGFyL2NhbGVuZGFyLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sVUFBVSxhQUFhLENBQUMsS0FBb0I7SUFDaEQsT0FBTyxPQUFPLENBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLE9BQWUsRUFBRSxFQUFFO0lBQ3RELE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6Qyx1Q0FBdUM7SUFDdkMsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM1Qyw0REFBNEQ7SUFDNUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN4RixPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsSUFBNEIsRUFBRSxhQUE2QixFQUFFLFFBQWlCLEVBQUUsRUFBRTtJQUNwSCxJQUFJLElBQUksWUFBWSxJQUFJLEVBQUUsQ0FBQztRQUN6QixPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMs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QUFDekMsUUFBUTtBQUNSLEVBQUU7QUFDRixxQkFBcUI7QUFDckIsRUFBRTtBQUNGLHNDQUFzQztBQUN0QyxrQkFBa0I7QUFDbEIsbUJBQW1CO0FBQ25CLGlCQUFpQjtBQUNqQixzQkFBc0I7QUFDdEIsVUFBVTtBQUNWLE9BQU87QUFDUCxrRkFBa0Y7QUFDbEYseUZBQXlGO0FBQ3pGLDBGQUEwRjtBQUMxRix3RkFBd0Y7QUFDeEYsT0FBTztBQUNQLG9EQUFvRDtBQUNwRCxPQUFPO0FBQ1AsK0JBQStCO0FBQy9CLDBDQUEwQztBQUMxQywrQkFBK0I7QUFDL0IsT0FBTztBQUNQLFdBQVc7QUFDWCxVQUFVO0FBQ1YsT0FBTztBQUNQLGtFQUFrRTtBQUNsRSwwQ0FBMEM7QUFDMUMsdUJBQXVCO0FBQ3ZCLGlEQUFpRDtBQUNqRCxZQUFZO0FBQ1osNEJBQTRCO0FBQzVCLDBCQUEwQjtBQUMxQix1Q0FBdUM7QUFDdkMsdUJBQXVCO0FBQ3ZCLDRCQUE0QjtBQUM1Qix5Q0FBeUM7QUFDekMsdUJBQXVCO0FBQ3ZCLDJCQUEyQjtBQUMzQix3Q0FBd0M7QUFDeEMsdUJBQXVCO0FBQ3ZCLGNBQWM7QUFDZCxVQUFVO0FBQ1Ysc0RBQXNEO0FBQ3RELDhDQUE4QztBQUM5QyxLQUFLO0FBQ0wsRUFBRTtBQUNGLHVDQUF1QztBQUN2QywyREFBMkQ7QUFDM0QsOENBQThDO0FBQzlDLE9BQU87QUFDUCxFQUFFO0FBQ0YsNEJBQTRCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0ZUZpbHRlclR5cGUsIFNlbGVjdGlvblR5cGUgfSBmcm9tICcuL2NhbGVuZGFyLnNlcnZpY2UnO1xuXG5leHBvcnQgZnVuY3Rpb24gZGF0ZVRyYW5zZm9ybSh2YWx1ZTogRGF0ZSB8IG51bWJlcikge1xuICByZXR1cm4gdHJ5RGF0ZSh2YWx1ZSwgJ2RhdGVUcmFuc2Zvcm0nKTtcbn1cblxuZXhwb3J0IGNvbnN0IGNvbnZlcnRJc29XZWVrVG9EYXRlID0gKGlzb1dlZWs6IHN0cmluZykgPT4ge1xuICBjb25zdCBbeWVhciwgd2Vla10gPSBpc29XZWVrLnNwbGl0KC93L2kpO1xuICAvLyBHZXQgZGF0ZSBmb3IgNHRoIG9mIEphbnVhcnkgZm9yIHllYXJcbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHBhcnNlSW50KHllYXIpLCAwLCA0KTtcbiAgLy8gR2V0IHByZXZpb3VzIE1vbmRheSwgYWRkIDcgZGF5cyBmb3IgZWFjaCB3ZWVrIGFmdGVyIGZpcnN0XG4gIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSAtIChkYXRlLmdldERheSgpIHx8IDcpICsgMSArIChwYXJzZUludCh3ZWVrID8/IDEpIC0gMSkgKiA3KTtcbiAgcmV0dXJuIGRhdGU7XG59O1xuXG5leHBvcnQgY29uc3QgY29udmVydFRvRGF0ZU9iamVjdCA9IChkYXRlOiBEYXRlIHwgc3RyaW5nIHwgbnVtYmVyLCBzZWxlY3Rpb25UeXBlPzogU2VsZWN0aW9uVHlwZSwgcHJvcE5hbWU/OiBzdHJpbmcpID0+IHtcbiAgaWYgKGRhdGUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUpO1xuICB9XG5cbiAgaWYgKGlzVmFsaWREYXRlKGRhdGUpKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUpO1xuICB9XG5cbiAgaWYgKHNlbGVjdGlvblR5cGUgPT09ICd3ZWVrJykge1xuICAgIHJldHVybiBjb252ZXJ0SXNvV2Vla1RvRGF0ZShkYXRlIGFzIHN0cmluZyk7XG4gIH1cblxuICByZXR1cm4gdHJ5RGF0ZShkYXRlLCBwcm9wTmFtZSA/PyAnY29udmVydFRvRGF0ZU9iamVjdCcpO1xuICAvLyByZXR1cm4gbmV3IERhdGUoRGF0ZS5wYXJzZShkYXRlKSk7XG59O1xuXG5leHBvcnQgY29uc3QgY29udmVydFRvTG9jYWxEYXRlID0gKGQ6IERhdGUsIGxvY2FsZTogc3RyaW5nLCBvcHRpb25zID0ge30pID0+IGQudG9Mb2NhbGVEYXRlU3RyaW5nKGxvY2FsZSwgb3B0aW9ucyk7XG5cbmV4cG9ydCBjb25zdCBjb252ZXJ0VG9Mb2NhbFRpbWUgPSAoZDogRGF0ZSwgbG9jYWxlOiBzdHJpbmcsIG9wdGlvbnMgPSB7fSkgPT4gZC50b0xvY2FsZVRpbWVTdHJpbmcobG9jYWxlLCBvcHRpb25zKTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUdyb3Vwc0luQXJyYXkgPSA8VD4oYXJyOiBUW10sIG51bWJlck9mR3JvdXBzOiBudW1iZXIpOiBUW11bXSA9PiB7XG4gIGNvbnN0IHBlckdyb3VwID0gTWF0aC5jZWlsKGFyci5sZW5ndGggLyBudW1iZXJPZkdyb3Vwcyk7XG4gIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiBudW1iZXJPZkdyb3VwcyB9KVxuICAgIC5maWxsKCcnKVxuICAgIC5tYXAoKF8sIGkpID0+IGFyci5zbGljZShpICogcGVyR3JvdXAsIChpICsgMSkgKiBwZXJHcm91cCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENhbGVuZGFyRGF0ZSA9IChjYWxlbmRhckRhdGU6IERhdGUsIG9yZGVyOiBudW1iZXIsIHZpZXc6ICdkYXlzJyB8ICdtb250aHMnIHwgJ3llYXJzJykgPT4ge1xuICBpZiAob3JkZXIgIT09IDAgJiYgdmlldyA9PT0gJ2RheXMnKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGNhbGVuZGFyRGF0ZS5nZXRGdWxsWWVhcigpLCBjYWxlbmRhckRhdGUuZ2V0TW9udGgoKSArIG9yZGVyLCAxKTtcbiAgfVxuXG4gIGlmIChvcmRlciAhPT0gMCAmJiB2aWV3ID09PSAnbW9udGhzJykge1xuICAgIHJldHVybiBuZXcgRGF0ZShjYWxlbmRhckRhdGUuZ2V0RnVsbFllYXIoKSArIG9yZGVyLCBjYWxlbmRhckRhdGUuZ2V0TW9udGgoKSwgMSk7XG4gIH1cblxuICBpZiAob3JkZXIgIT09IDAgJiYgdmlldyA9PT0gJ3llYXJzJykge1xuICAgIHJldHVybiBuZXcgRGF0ZShjYWxlbmRhckRhdGUuZ2V0RnVsbFllYXIoKSArIDEyICogb3JkZXIsIGNhbGVuZGFyRGF0ZS5nZXRNb250aCgpLCAxKTtcbiAgfVxuXG4gIHJldHVybiBjYWxlbmRhckRhdGU7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q3VycmVudFllYXIgPSAoKSA9PiBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCk7XG5cbmV4cG9ydCBjb25zdCBnZXRDdXJyZW50TW9udGggPSAoKSA9PiBuZXcgRGF0ZSgpLmdldE1vbnRoKCk7XG5cbmV4cG9ydCBjb25zdCBnZXREYXRlQnlTZWxlY3Rpb25UeXBlID0gKGRhdGU6IERhdGUgfCBudWxsLCBzZWxlY3Rpb25UeXBlOiBTZWxlY3Rpb25UeXBlKSA9PiB7XG4gIGlmIChkYXRlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoc2VsZWN0aW9uVHlwZSA9PT0gJ3dlZWsnKSB7XG4gICAgcmV0dXJuIGAke2RhdGUuZ2V0RnVsbFllYXIoKX1XJHtnZXRXZWVrTnVtYmVyKGRhdGUpfWA7XG4gIH1cblxuICBpZiAoc2VsZWN0aW9uVHlwZSA9PT0gJ21vbnRoJykge1xuICAgIGNvbnN0IG1vbnRoTnVtYmVyID0gYDAke2RhdGUuZ2V0TW9udGgoKSArIDF9YC5zbGljZSgtMik7XG4gICAgcmV0dXJuIGAke2RhdGUuZ2V0RnVsbFllYXIoKX0tJHttb250aE51bWJlcn1gO1xuICB9XG5cbiAgaWYgKHNlbGVjdGlvblR5cGUgPT09ICd5ZWFyJykge1xuICAgIHJldHVybiBgJHtkYXRlLmdldEZ1bGxZZWFyKCl9YDtcbiAgfVxuXG4gIHJldHVybiBkYXRlO1xufTtcblxuLy9cblxuZXhwb3J0IGNvbnN0IGdldExvY2FsRGF0ZUZyb21TdHJpbmcgPSAoc3RyaW5nOiBzdHJpbmcsIGxvY2FsZTogc3RyaW5nLCB0aW1lPzogYm9vbGVhbikgPT4ge1xuICBjb25zdCBkYXRlID0gbmV3IERhdGUoMjAxMywgMTEsIDMxLCAxNywgMTksIDIyKTtcbiAgbGV0IHJlZ2V4ID0gdGltZSA/IGRhdGUudG9Mb2NhbGVTdHJpbmcobG9jYWxlKSA6IGRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKGxvY2FsZSk7XG4gIHJlZ2V4ID0gcmVnZXhcbiAgICAucmVwbGFjZSgnMjAxMycsICcoPzx5ZWFyPlswLTldezIsNH0pJylcbiAgICAucmVwbGFjZSgnMTInLCAnKD88bW9udGg+WzAtOV17MSwyfSknKVxuICAgIC5yZXBsYWNlKCczMScsICcoPzxkYXk+WzAtOV17MSwyfSknKTtcblxuICBpZiAodGltZSkge1xuICAgIHJlZ2V4ID0gcmVnZXhcbiAgICAgIC5yZXBsYWNlKCc1JywgJyg/PGhvdXI+WzAtOV17MSwyfSknKVxuICAgICAgLnJlcGxhY2UoJzE3JywgJyg/PGhvdXI+WzAtOV17MSwyfSknKVxuICAgICAgLnJlcGxhY2UoJzE5JywgJyg/PG1pbnV0ZT5bMC05XXsxLDJ9KScpXG4gICAgICAucmVwbGFjZSgnMjInLCAnKD88c2Vjb25kPlswLTldezEsMn0pJylcbiAgICAgIC5yZXBsYWNlKCdQTScsICcoPzxhbXBtPltBLVpdezJ9KScpO1xuICB9XG5cbiAgY29uc3Qgcmd4ID0gUmVnRXhwKGAke3JlZ2V4fWApO1xuICBjb25zdCBwYXJ0aWFscyA9IHN0cmluZy5tYXRjaChyZ3gpO1xuXG4gIGlmIChwYXJ0aWFscyA9PT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IG5ld0RhdGUgPVxuICAgIHBhcnRpYWxzLmdyb3VwcyAmJlxuICAgICh0aW1lXG4gICAgICA/IG5ldyBEYXRlKFxuICAgICAgICAgIE51bWJlcihwYXJ0aWFscy5ncm91cHNbJ3llYXInXSksXG4gICAgICAgICAgTnVtYmVyKHBhcnRpYWxzLmdyb3Vwc1snbW9udGgnXSkgLSAxLFxuICAgICAgICAgIE51bWJlcihwYXJ0aWFscy5ncm91cHNbJ2RheSddKSxcbiAgICAgICAgICBwYXJ0aWFscy5ncm91cHNbJ2FtcG0nXVxuICAgICAgICAgICAgPyBwYXJ0aWFscy5ncm91cHNbJ2FtcG0nXSA9PT0gJ1BNJ1xuICAgICAgICAgICAgICA/IE51bWJlcihwYXJ0aWFscy5ncm91cHNbJ2hvdXInXSkgKyAxMlxuICAgICAgICAgICAgICA6IE51bWJlcihwYXJ0aWFscy5ncm91cHNbJ2hvdXInXSlcbiAgICAgICAgICAgIDogTnVtYmVyKHBhcnRpYWxzLmdyb3Vwc1snaG91ciddKSxcbiAgICAgICAgICBOdW1iZXIocGFydGlhbHMuZ3JvdXBzWydtaW51dGUnXSksXG4gICAgICAgICAgTnVtYmVyKHBhcnRpYWxzLmdyb3Vwc1snc2Vjb25kJ10pXG4gICAgICAgIClcbiAgICAgIDogbmV3IERhdGUoXG4gICAgICAgICAgTnVtYmVyKHBhcnRpYWxzLmdyb3Vwc1sneWVhciddKSxcbiAgICAgICAgICBOdW1iZXIocGFydGlhbHMuZ3JvdXBzWydtb250aCddKSAtIDEsXG4gICAgICAgICAgTnVtYmVyKHBhcnRpYWxzLmdyb3Vwc1snZGF5J10pXG4gICAgICAgICkpO1xuXG4gIHJldHVybiBuZXdEYXRlO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE1vbnRoTmFtZSA9IChtb250aDogbnVtYmVyLCBsb2NhbGU6IHN0cmluZykgPT4ge1xuICBjb25zdCBkID0gbmV3IERhdGUoKTtcbiAgZC5zZXREYXRlKDEpO1xuICBkLnNldE1vbnRoKG1vbnRoKTtcbiAgcmV0dXJuIGQudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCB7IG1vbnRoOiAnbG9uZycgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TW9udGhzTmFtZXMgPSAobG9jYWxlOiBzdHJpbmcsIHllYXI6IG51bWJlcikgPT4ge1xuICBjb25zdCBtb250aHMgPSBbXTtcbiAgY29uc3QgZCA9IG5ldyBEYXRlKHllYXIpO1xuICBkLnNldERhdGUoMSk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgZC5zZXRNb250aChpKTtcbiAgICBtb250aHMucHVzaCh7IHllYXIsIG1vbnRoOiBkLnRvTG9jYWxlRGF0ZVN0cmluZyhsb2NhbGUsIHsgbW9udGg6ICdzaG9ydCcgfSkgfSk7XG4gIH1cblxuICByZXR1cm4gbW9udGhzO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFllYXJzID0gKHllYXI6IG51bWJlcikgPT4ge1xuICBjb25zdCB5ZWFycyA9IFtdO1xuICBmb3IgKGxldCBfeWVhciA9IHllYXIgLSA2OyBfeWVhciA8IHllYXIgKyA2OyBfeWVhcisrKSB7XG4gICAgeWVhcnMucHVzaChfeWVhcik7XG4gIH1cblxuICByZXR1cm4geWVhcnM7XG59O1xuXG5jb25zdCBnZXRMZWFkaW5nRGF5cyA9ICh5ZWFyOiBudW1iZXIsIG1vbnRoOiBudW1iZXIsIGZpcnN0RGF5T2ZXZWVrOiBudW1iZXIpID0+IHtcbiAgLy8gMDogc3VuZGF5XG4gIC8vIDE6IG1vbmRheVxuICBjb25zdCBkYXRlcyA9IFtdO1xuICBjb25zdCBkID0gbmV3IERhdGUoeWVhciwgbW9udGgpO1xuICBjb25zdCB5ID0gZC5nZXRGdWxsWWVhcigpO1xuICBjb25zdCBtID0gZC5nZXRNb250aCgpO1xuICBjb25zdCBmaXJzdFdlZWtkYXkgPSBuZXcgRGF0ZSh5LCBtLCAxKS5nZXREYXkoKTtcbiAgbGV0IGxlYWRpbmdEYXlzID0gNiAtICg2IC0gZmlyc3RXZWVrZGF5KSAtIGZpcnN0RGF5T2ZXZWVrO1xuXG4gIGlmIChmaXJzdERheU9mV2Vlaykge1xuICAgIGxlYWRpbmdEYXlzID0gbGVhZGluZ0RheXMgPCAwID8gNyArIGxlYWRpbmdEYXlzIDogbGVhZGluZ0RheXM7XG4gIH1cblxuICBmb3IgKGxldCBpID0gbGVhZGluZ0RheXMgKiAtMTsgaSA8IDA7IGkrKykge1xuICAgIGRhdGVzLnB1c2goe1xuICAgICAgZGF0ZTogbmV3IERhdGUoeSwgbSwgaSArIDEpLFxuICAgICAgbW9udGg6ICdwcmV2aW91cydcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBkYXRlcztcbn07XG5cbmNvbnN0IGdldE1vbnRoRGF5cyA9ICh5ZWFyOiBudW1iZXIsIG1vbnRoOiBudW1iZXIpID0+IHtcbiAgY29uc3QgZGF0ZXMgPSBbXTtcbiAgY29uc3QgbGFzdERheSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoICsgMSwgMCkuZ2V0RGF0ZSgpO1xuICBmb3IgKGxldCBpID0gMTsgaSA8PSBsYXN0RGF5OyBpKyspIHtcbiAgICBkYXRlcy5wdXNoKHtcbiAgICAgIGRhdGU6IG5ldyBEYXRlKHllYXIsIG1vbnRoLCBpKSxcbiAgICAgIG1vbnRoOiAnY3VycmVudCdcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gZGF0ZXM7XG59O1xuXG5jb25zdCBnZXRUcmFpbGluZ0RheXMgPSAoXG4gIHllYXI6IG51bWJlcixcbiAgbW9udGg6IG51bWJlcixcbiAgbGVhZGluZ0RheXM6IHsgZGF0ZTogRGF0ZTsgbW9udGg6IHN0cmluZyB9W10sXG4gIG1vbnRoRGF5czogeyBkYXRlOiBEYXRlOyBtb250aDogc3RyaW5nIH1bXVxuKSA9PiB7XG4gIGNvbnN0IGRhdGVzID0gW107XG4gIGNvbnN0IGRheXMgPSA0MiAtIChsZWFkaW5nRGF5cy5sZW5ndGggKyBtb250aERheXMubGVuZ3RoKTtcbiAgZm9yIChsZXQgaSA9IDE7IGkgPD0gZGF5czsgaSsrKSB7XG4gICAgZGF0ZXMucHVzaCh7XG4gICAgICBkYXRlOiBuZXcgRGF0ZSh5ZWFyLCBtb250aCArIDEsIGkpLFxuICAgICAgbW9udGg6ICduZXh0J1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBkYXRlcztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXREYXlOdW1iZXIgPSAoZGF0ZTogRGF0ZSkgPT5cbiAgTWF0aC5jZWlsKChOdW1iZXIoZGF0ZSkgLSBOdW1iZXIobmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCAwLCAwKSkpIC8gMTAwMCAvIDYwIC8gNjAgLyAyNCk7XG5cbmV4cG9ydCBjb25zdCBnZXRXZWVrTnVtYmVyID0gKGRhdGU6IERhdGUpID0+IHtcbiAgY29uc3Qgd2VlazEgPSBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIDAsIDQpO1xuICByZXR1cm4gMSArIE1hdGgucm91bmQoKChkYXRlLmdldFRpbWUoKSAtIHdlZWsxLmdldFRpbWUoKSkgLyA4NjQwMDAwMCAtIDMgKyAoKHdlZWsxLmdldERheSgpICsgNikgJSA3KSkgLyA3KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRNb250aERldGFpbHMgPSAoeWVhcjogbnVtYmVyLCBtb250aDogbnVtYmVyLCBmaXJzdERheU9mV2VlazogbnVtYmVyKSA9PiB7XG4gIGNvbnN0IGRheXNQcmV2TW9udGggPSBnZXRMZWFkaW5nRGF5cyh5ZWFyLCBtb250aCwgZmlyc3REYXlPZldlZWspO1xuICBjb25zdCBkYXlzVGhpc01vbnRoID0gZ2V0TW9udGhEYXlzKHllYXIsIG1vbnRoKTtcbiAgY29uc3QgZGF5c05leHRNb250aCA9IGdldFRyYWlsaW5nRGF5cyh5ZWFyLCBtb250aCwgZGF5c1ByZXZNb250aCwgZGF5c1RoaXNNb250aCk7XG4gIGNvbnN0IGRheXMgPSBbLi4uZGF5c1ByZXZNb250aCwgLi4uZGF5c1RoaXNNb250aCwgLi4uZGF5c05leHRNb250aF07XG5cbiAgY29uc3Qgd2Vla3M6IHsgd2Vla051bWJlcjogbnVtYmVyOyBkYXlzOiB7IGRhdGU6IERhdGU7IG1vbnRoOiBzdHJpbmcgfVtdIH1bXSA9IFtdO1xuXG4gIGRheXMuZm9yRWFjaCgoZGF5LCBpbmRleCkgPT4ge1xuICAgIGlmIChpbmRleCAlIDcgPT09IDAgfHwgd2Vla3MubGVuZ3RoID09PSAwKSB7XG4gICAgICB3ZWVrcy5wdXNoKHsgd2Vla051bWJlcjogLTEsIGRheXM6IFtdIH0pO1xuICAgIH1cblxuICAgIGlmICgoaW5kZXggKyAxKSAlIDcgPT09IDApIHtcbiAgICAgIHdlZWtzW3dlZWtzLmxlbmd0aCAtIDFdLndlZWtOdW1iZXIgPSBnZXRXZWVrTnVtYmVyKGRheS5kYXRlKTtcbiAgICB9XG5cbiAgICB3ZWVrc1t3ZWVrcy5sZW5ndGggLSAxXS5kYXlzLnB1c2goZGF5KTtcbiAgfSk7XG5cbiAgcmV0dXJuIFsuLi53ZWVrc107XG59O1xuXG5leHBvcnQgY29uc3QgaXNEYXRlRGlzYWJsZWQgPSAoZGF0ZTogRGF0ZSB8IG51bGwsIG1pbj86IERhdGUgfCBudWxsLCBtYXg/OiBEYXRlIHwgbnVsbCwgZGF0ZXM/OiAoRGF0ZSB8IERhdGVbXSlbXSkgPT4ge1xuICBpZiAoIWRhdGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKCFtaW4gJiYgIW1heCAmJiAoIWRhdGVzIHx8ICFkYXRlcy5sZW5ndGgpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChtaW4gJiYgZGF0ZSA8IG1pbikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChtYXggJiYgZGF0ZSA+IG1heCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgbGV0IGRpc2FibGVkID0gZmFsc2U7XG4gIGlmIChkYXRlcykge1xuICAgIGZvciAoY29uc3QgX2RhdGUgb2YgZGF0ZXMpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KF9kYXRlKSkge1xuICAgICAgICBpZiAoaXNEYXRlSW5SYW5nZShkYXRlLCBfZGF0ZVswXSwgX2RhdGVbMV0pKSB7XG4gICAgICAgICAgZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoX2RhdGUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgIGlmIChpc1NhbWVEYXRlQXMoZGF0ZSwgX2RhdGUpKSB7XG4gICAgICAgICAgZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRpc2FibGVkO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzRGF0ZUluUmFuZ2UgPSAoZGF0ZTogRGF0ZSB8IG51bGwsIHN0YXJ0OiBEYXRlIHwgbnVsbCwgZW5kOiBEYXRlIHwgbnVsbCkgPT4ge1xuICByZXR1cm4gZGF0ZSAmJiBzdGFydCAmJiBlbmQgJiYgc3RhcnQgPD0gZGF0ZSAmJiBkYXRlIDw9IGVuZDtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1llYXJJblJhbmdlID0gKGRhdGU6IERhdGUgfCBudWxsLCBzdGFydDogRGF0ZSB8IG51bGwsIGVuZDogRGF0ZSB8IG51bGwpID0+IHtcbiAgcmV0dXJuIGRhdGUgJiYgc3RhcnQgJiYgZW5kICYmIHN0YXJ0LmdldEZ1bGxZZWFyKCkgPD0gZGF0ZS5nZXRGdWxsWWVhcigpICYmIGRhdGUuZ2V0RnVsbFllYXIoKSA8PSBlbmQuZ2V0RnVsbFllYXIoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0RhdGVCZXR3ZWVuTWluTWF4ID0gKGRhdGU6IERhdGUgfCBudWxsLCBtaW46IERhdGUgfCBudWxsLCBtYXg6IERhdGUgfCBudWxsKSA9PiB7XG4gIGlmIChkYXRlICYmIG1pbiAmJiBtYXgpIHtcbiAgICByZXR1cm4gbWluIDw9IGRhdGUgJiYgZGF0ZSA8PSBtYXg7XG4gIH1cbiAgaWYgKGRhdGUgJiYgbWluKSB7XG4gICAgcmV0dXJuIG1pbiA8PSBkYXRlO1xuICB9XG4gIGlmIChkYXRlICYmIG1heCkge1xuICAgIHJldHVybiBkYXRlIDw9IG1heDtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0RhdGVTZWxlY3RlZCA9IChkYXRlOiBEYXRlIHwgbnVsbCwgc3RhcnQ6IERhdGUgfCBudWxsLCBlbmQ6IERhdGUgfCBudWxsKSA9PiB7XG4gIHJldHVybiBkYXRlICYmICgoc3RhcnQgJiYgaXNTYW1lRGF0ZUFzKHN0YXJ0LCBkYXRlKSkgfHwgKGVuZCAmJiBpc1NhbWVEYXRlQXMoZW5kLCBkYXRlKSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzTW9udGhTZWxlY3RlZCA9IChkYXRlOiBEYXRlIHwgbnVsbCwgc3RhcnQ6IERhdGUgfCBudWxsLCBlbmQ6IERhdGUgfCBudWxsKSA9PiB7XG4gIHJldHVybiBkYXRlICYmICgoc3RhcnQgJiYgaXNTYW1lTW9udGhBcyhzdGFydCwgZGF0ZSkpIHx8IChlbmQgJiYgaXNTYW1lTW9udGhBcyhlbmQsIGRhdGUpKSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNZZWFyU2VsZWN0ZWQgPSAoZGF0ZTogRGF0ZSB8IG51bGwsIHN0YXJ0OiBEYXRlIHwgbnVsbCwgZW5kOiBEYXRlIHwgbnVsbCkgPT4ge1xuICByZXR1cm4gZGF0ZSAmJiAoKHN0YXJ0ICYmIGlzU2FtZVllYXJBcyhzdGFydCwgZGF0ZSkpIHx8IChlbmQgJiYgaXNTYW1lWWVhckFzKGVuZCwgZGF0ZSkpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0VuZERhdGUgPSAoZGF0ZTogRGF0ZSB8IG51bGwsIHN0YXJ0OiBEYXRlIHwgbnVsbCwgZW5kOiBEYXRlIHwgbnVsbCkgPT4ge1xuICByZXR1cm4gZGF0ZSAmJiBzdGFydCAmJiBlbmQgJiYgaXNTYW1lRGF0ZUFzKGVuZCwgZGF0ZSkgJiYgc3RhcnQgPCBlbmQ7XG59O1xuXG5leHBvcnQgY29uc3QgaXNMYXN0RGF5T2ZNb250aCA9IChkYXRlOiBEYXRlKSA9PiB7XG4gIGNvbnN0IHRlc3QgPSBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSk7XG4gIGNvbnN0IG1vbnRoID0gdGVzdC5nZXRNb250aCgpO1xuXG4gIHRlc3Quc2V0RGF0ZSh0ZXN0LmdldERhdGUoKSArIDEpO1xuICByZXR1cm4gdGVzdC5nZXRNb250aCgpICE9PSBtb250aDtcbn07XG5cbmV4cG9ydCBjb25zdCBlcXVhbERhdGVzID0gKGE6IERhdGUgfCBudWxsLCBiOiBEYXRlIHwgbnVsbCkgPT4ge1xuICByZXR1cm4gKGEgJiYgYiAmJiBhLmdldFRpbWUoKSA9PT0gYi5nZXRUaW1lKCkpIHx8IChhID09PSBudWxsICYmIGIgPT09IG51bGwpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzU2FtZURhdGVBcyA9IChkYXRlOiBEYXRlLCBkYXRlMjogRGF0ZSkgPT4ge1xuICByZXR1cm4gKFxuICAgIGRhdGUuZ2V0RGF0ZSgpID09IGRhdGUyLmdldERhdGUoKSAmJlxuICAgIGRhdGUuZ2V0TW9udGgoKSA9PSBkYXRlMi5nZXRNb250aCgpICYmXG4gICAgZGF0ZS5nZXRGdWxsWWVhcigpID09IGRhdGUyLmdldEZ1bGxZZWFyKClcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1NhbWVNb250aEFzID0gKGRhdGU6IERhdGUsIGRhdGUyOiBEYXRlKSA9PiB7XG4gIHJldHVybiBkYXRlLmdldE1vbnRoKCkgPT0gZGF0ZTIuZ2V0TW9udGgoKSAmJiBkYXRlLmdldEZ1bGxZZWFyKCkgPT0gZGF0ZTIuZ2V0RnVsbFllYXIoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1NhbWVZZWFyQXMgPSAoZGF0ZTogRGF0ZSwgZGF0ZTI6IERhdGUpID0+IHtcbiAgcmV0dXJuIGRhdGUuZ2V0RnVsbFllYXIoKSA9PSBkYXRlMi5nZXRGdWxsWWVhcigpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzU3RhcnREYXRlID0gKGRhdGU6IERhdGUgfCBudWxsLCBzdGFydDogRGF0ZSB8IG51bGwsIGVuZDogRGF0ZSB8IG51bGwpID0+IHtcbiAgcmV0dXJuIGRhdGUgJiYgc3RhcnQgJiYgZW5kICYmIGlzU2FtZURhdGVBcyhzdGFydCwgZGF0ZSkgJiYgc3RhcnQgPCBlbmQ7XG59O1xuXG5leHBvcnQgY29uc3QgaXNUb2RheSA9IChkYXRlOiBEYXRlKSA9PiB7XG4gIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcbiAgcmV0dXJuIChcbiAgICBkYXRlLmdldERhdGUoKSA9PSB0b2RheS5nZXREYXRlKCkgJiZcbiAgICBkYXRlLmdldE1vbnRoKCkgPT0gdG9kYXkuZ2V0TW9udGgoKSAmJlxuICAgIGRhdGUuZ2V0RnVsbFllYXIoKSA9PSB0b2RheS5nZXRGdWxsWWVhcigpXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNUaGlzTW9udGggPSAoZGF0ZTogRGF0ZSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XG4gIHJldHVybiBpbmRleCA9PSB0b2RheS5nZXRNb250aCgpICYmIGRhdGUuZ2V0RnVsbFllYXIoKSA9PSB0b2RheS5nZXRGdWxsWWVhcigpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzVGhpc1llYXIgPSAoeWVhcjogbnVtYmVyKSA9PiB7XG4gIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcbiAgcmV0dXJuIHllYXIgPT0gdG9kYXkuZ2V0RnVsbFllYXIoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1ZhbGlkRGF0ZSA9IChkYXRlOiBudW1iZXIgfCBzdHJpbmcgfCBEYXRlKTogYm9vbGVhbiA9PiB7XG4gIGlmIChkYXRlIGluc3RhbmNlb2YgRGF0ZSB8fCB0eXBlb2YgZGF0ZSA9PT0gJ251bWJlcicgfHwgdHlwZW9mIGRhdGUgPT09ICdzdHJpbmcnKSB7XG4gICAgLy8gVHJ5IHRvIGNyZWF0ZSBhIERhdGUgb2JqZWN0IGZyb20gRGF0ZSBvciB0aW1lc3RhbXAgb3Igc3RyaW5nXG4gICAgY29uc3QgZGF0ZU9iaiA9IG5ldyBEYXRlKGRhdGUpO1xuICAgIHJldHVybiAhaXNOYU4oZGF0ZU9iai5nZXRUaW1lKCkpO1xuICB9XG5cbiAgLy8gSWYgbm9uZSBvZiB0aGUgYWJvdmUgY29uZGl0aW9ucyBhcmUgbWV0LCBpdCdzIG5vdCBhIHZhbGlkIGRhdGVcbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuZXhwb3J0IGNvbnN0IHRyeURhdGUgPSAodmFsdWU6IHN0cmluZyB8IG51bWJlciB8IERhdGUsIHByb3BOYW1lOiBzdHJpbmcgPSAnZGF0ZScpID0+IHtcbiAgbGV0IF92YWx1ZTtcbiAgdHJ5IHtcbiAgICBpZiAoIWlzVmFsaWREYXRlKHZhbHVlKSkge1xuICAgICAgdGhyb3cgdmFsdWU7XG4gICAgfVxuICAgIF92YWx1ZSA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc29sZS53YXJuKGBJbnZhbGlkICR7cHJvcE5hbWV9YCwgZXJyKTtcbiAgICBfdmFsdWUgPSBuZXcgRGF0ZSgpO1xuICAgIF92YWx1ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgfVxuICByZXR1cm4gX3ZhbHVlO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzRGF0ZUluUmFuZ2VEaXNhYmxlZCA9IChcbiAgc3RhcnREYXRlPzogRGF0ZSB8IG51bGwsXG4gIGVuZERhdGU/OiBEYXRlIHwgbnVsbCxcbiAgZGF0ZXM/OiAoRGF0ZSB8IERhdGVbXSlbXSxcbiAgZGF0ZUZpbHRlcj86IERhdGVGaWx0ZXJUeXBlXG4pID0+IHtcbiAgaWYgKCghZGF0ZXMgfHwgIWRhdGVzLmxlbmd0aCkgJiYgIWRhdGVGaWx0ZXIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHN0YXJ0RGF0ZSAmJiBlbmREYXRlKSB7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHN0YXJ0RGF0ZSk7XG4gICAgbGV0IGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICB3aGlsZSAoZGF0ZSA8PSBlbmREYXRlKSB7XG4gICAgICBkaXNhYmxlZCA9IGlzRGF0ZURpc2FibGVkKGRhdGUsIG51bGwsIG51bGwsIGRhdGVzKSB8fCAoZGF0ZUZpbHRlciA/ICFkYXRlRmlsdGVyKGRhdGUpIDogZmFsc2UpO1xuICAgICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgMSk7XG4gICAgfVxuICAgIHJldHVybiBkaXNhYmxlZDtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG4vLyBleHBvcnQgY29uc3Qgc3RyaW5nVG9EYXRlQ29udmVydCA9IChkYXRlOiBzdHJpbmcsIGxvY2FsZXM6IHN0cmluZykgPT4ge1xuLy8gICBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCgnZnItRlInKTtcbi8vICAgY29uc3QgcGFydHMgPSBmb3JtYXR0ZXIuZm9ybWF0VG9QYXJ0cygpO1xuLy8gICBjb25zb2xlLmxvZyhkYXRlLCBwYXJ0cywgZm9ybWF0dGVyLmZvcm1hdCgpLCBmb3JtYXR0ZXIucmVzb2x2ZWRPcHRpb25zKCksIGZvcm1hdHRlci5mb3JtYXQoKSk7XG4vLyB9O1xuXG4vLyBkZWNsYXJlIG5hbWVzcGFjZSBJbnRsIHtcbi8vICAgdHlwZSBEYXRlVGltZUZvcm1hdFBhcnRUeXBlcyA9IFwiZGF5XCIgfCBcImRheVBlcmlvZFwiIHwgXCJlcmFcIiB8IFwiZnJhY3Rpb25hbFNlY29uZFwiIHwgXCJob3VyXCIgfCBcImxpdGVyYWxcIiB8IFwibWludXRlXCIgfCBcIm1vbnRoXCIgfCBcInNlY29uZFwiIHwgXCJ0aW1lWm9uZU5hbWVcIiB8IFwid2Vla2RheVwiIHwgXCJ5ZWFyXCI7XG4vL1xuLy8gICBpbnRlcmZhY2UgRGF0ZVRpbWVGb3JtYXRQYXJ0IHtcbi8vICAgICB0eXBlOiBEYXRlVGltZUZvcm1hdFBhcnRUeXBlcztcbi8vICAgICB2YWx1ZTogc3RyaW5nO1xuLy8gICB9XG4vL1xuLy8gICBpbnRlcmZhY2UgRGF0ZVRpbWVGb3JtYXQge1xuLy8gICAgIGZvcm1hdFRvUGFydHMoZGF0ZT86IERhdGUgfCBudW1iZXIpOiBEYXRlVGltZUZvcm1hdFBhcnRbXTtcbi8vICAgfVxuLy8gfVxuXG50eXBlIERhdGVUaW1lRm9ybWF0UGFydFR5cGVzID1cbiAgfCAnZGF5J1xuICB8ICdkYXlQZXJpb2QnXG4gIHwgJ2VyYSdcbiAgfCAnZnJhY3Rpb25hbFNlY29uZCdcbiAgfCAnaG91cidcbiAgfCAnbGl0ZXJhbCdcbiAgfCAnbWludXRlJ1xuICB8ICdtb250aCdcbiAgfCAnc2Vjb25kJ1xuICB8ICd0aW1lWm9uZU5hbWUnXG4gIHwgJ3dlZWtkYXknXG4gIHwgJ3llYXInO1xudHlwZSBEYXRlRm9ybWF0UGFydFR5cGVzID0gJ2RheScgfCAnbW9udGgnIHwgJ3llYXInIHwgJ2xpdGVyYWwnO1xuXG4vLyB0eXBlIERhdGVQYXJ0cyA9IHtcbi8vICAgW2tleSBpbiBEYXRlVGltZUZvcm1hdFBhcnRUeXBlc10/OiBzdHJpbmc7XG4vLyB9O1xuXG4vLyB0eXBlIERhdGVQYXJ0cyA9IHtcbi8vICAgeWVhcjogbnVtYmVyLCBtb250aDogbnVtYmVyLCBkYXk6IG51bWJlciwgbGl0ZXJhbDogc3RyaW5nXG4vLyB9O1xuLy9cbi8vIGV4cG9ydCBjb25zdCBjdnREYXRlID0gKGRhdGVBc1N0cmluZzogc3RyaW5nLCBsb2NhbGUgPSAncGwtUEwnKSA9PiB7XG4vLyAgIGNvbnN0IGRhdGVTdHJpbmcgPSBkYXRlQXNTdHJpbmcgPz8gbmV3IERhdGUoKS50b0xvY2FsZURhdGVTdHJpbmcobG9jYWxlKTtcbi8vICAgY29uc3QgZGF0ZVNwbGl0ID0gZGF0ZVN0cmluZy5zcGxpdCgvWy5cXC1cXC9cXHNcXERdL2dpKS5maWx0ZXIoaXRlbSA9PiAhIWl0ZW0ubGVuZ3RoKTtcbi8vICAgY29uc3QgZm9ybWF0dGVyID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQobG9jYWxlKTtcbi8vICAgY29uc3QgcGFydHMgPSBmb3JtYXR0ZXIuZm9ybWF0VG9QYXJ0cygpLmZpbHRlcihwYXJ0ID0+IFsneWVhcicsICdtb250aCcsICdkYXknXS5pbmNsdWRlcyhwYXJ0LnR5cGUpKTtcbi8vICAgY29uc3QgZGF0ZVNoaW0gPSB7XG4vLyAgICAgZGF5OiB1bmRlZmluZWQsIG1vbnRoOiB1bmRlZmluZWQsIHllYXI6IHVuZGVmaW5lZFxuLy8gICB9O1xuLy8gICBwYXJ0cy5mb3JFYWNoKChwYXJ0LCBpbmRleCkgPT4ge1xuLy8gICAgIGNvbnN0IHsgdHlwZSwgdmFsdWUgfSA9IHsgLi4ucGFydCB9O1xuLy8gICAgIC8vIEB0cy1pZ25vcmVcbi8vICAgICBkYXRlU2hpbVt0eXBlXSA9IGRhdGVTcGxpdFtpbmRleF07XG4vLyAgIH0pO1xuLy9cbi8vICAgcmV0dXJuIGRhdGVTaGltO1xuLy9cbi8vICAgLy8gY29uc3QgZGF0ZVBhcnRzOiBEYXRlUGFydHMgPSB7XG4vLyAgIC8vICAgeWVhcjogMCxcbi8vICAgLy8gICBtb250aDogMCxcbi8vICAgLy8gICBkYXk6IDAsXG4vLyAgIC8vICAgbGl0ZXJhbDogJy8nXG4vLyAgIC8vIH07XG4vLyAgIC8vXG4vLyAgIC8vIGNvbnN0IGxpdGVyYWwgPSBwYXJ0cy5maW5kKHBhcnQgPT4gcGFydC50eXBlID09PSAnbGl0ZXJhbCcpPy52YWx1ZSA/PyAnLyc7XG4vLyAgIC8vIC8vIGNvbnN0IHllYXIgPSBwYXJzZUludChwYXJ0cy5maW5kKHBhcnQgPT4gcGFydC50eXBlID09PSAneWVhcicpPy52YWx1ZSA/PyAnMCcpO1xuLy8gICAvLyAvLyBjb25zdCBtb250aCA9IHBhcnNlSW50KHBhcnRzLmZpbmQocGFydCA9PiBwYXJ0LnR5cGUgPT09ICd5ZWFyJyk/LnZhbHVlID8/ICcwJyk7XG4vLyAgIC8vIC8vIGNvbnN0IGRheSA9IHBhcnNlSW50KHBhcnRzLmZpbmQocGFydCA9PiBwYXJ0LnR5cGUgPT09ICd5ZWFyJyk/LnZhbHVlID8/ICcwJyk7XG4vLyAgIC8vXG4vLyAgIC8vIGNvbnN0IGRhdGVBcnJheSA9IGRhdGVTdHJpbmcuc3BsaXQobGl0ZXJhbCk7XG4vLyAgIC8vXG4vLyAgIC8vIHBhcnRzLmZvckVhY2gocGFydCA9PiB7XG4vLyAgIC8vICAgY29uc3Qge3R5cGUsIHZhbHVlfSA9IHsuLi5wYXJ0fTtcbi8vICAgLy8gICBpZiAodHlwZSA9PT0gJ2RheScpIHtcbi8vICAgLy9cbi8vICAgLy8gICB9XG4vLyAgIC8vIH0pXG4vLyAgIC8vXG4vLyAgIC8vIHBhcnRzLmZpbHRlcihwYXJ0ID0+IHBhcnQudHlwZSBpbiBkYXRlUGFydHMpLm1hcChwYXJ0ID0+IHtcbi8vICAgLy8gICBjb25zdCB7dHlwZSwgdmFsdWV9ID0gey4uLnBhcnR9O1xuLy8gICAvLyAgIC8vIEB0cy1pZ25vcmVcbi8vICAgLy8gICBkYXRlUGFydHNbdHlwZV0gPSBwYXJzZUludChwYXJ0LnZhbHVlKTtcbi8vICAgLy8gICAvL1xuLy8gICAvLyAgIC8vIHN3aXRjaCAodHlwZSkge1xuLy8gICAvLyAgIC8vICAgY2FzZSAnZGF5Jzpcbi8vICAgLy8gICAvLyAgICAgZGF5ID0gcGFyc2VJbnQodmFsdWUpO1xuLy8gICAvLyAgIC8vICAgICBicmVhaztcbi8vICAgLy8gICAvLyAgIGNhc2UgJ21vbnRoJzpcbi8vICAgLy8gICAvLyAgICAgbW9udGggPSBwYXJzZUludCh2YWx1ZSk7XG4vLyAgIC8vICAgLy8gICAgIGJyZWFrO1xuLy8gICAvLyAgIC8vICAgY2FzZSAneWVhcic6XG4vLyAgIC8vICAgLy8gICAgIHllYXIgPSBwYXJzZUludCh2YWx1ZSk7XG4vLyAgIC8vICAgLy8gICAgIGJyZWFrO1xuLy8gICAvLyAgIC8vIH1cbi8vICAgLy8gfSlcbi8vICAgLy8gLy8gY29uc3QgeyB5ZWFyLCBtb250aCwgZGF5IH0gPSB7Li4uZGF0ZVBhcnRzfVxuLy8gICAvLyByZXR1cm4gbmV3IERhdGUoeWVhciwgbW9udGggLSAxLCBkYXkpO1xuLy8gfTtcbi8vXG4vLyAvLyBmdW5jdGlvbiBnZXREYXRlWChkYXRlQXNTdHJpbmcpIHtcbi8vIC8vICAgY29uc3QgW2RheSwgbW9udGgsIHllYXJdID0gZGF0ZUFzU3RyaW5nLnNwbGl0KCcvJyk7XG4vLyAvLyAgIHJldHVybiBuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIGRheSk7XG4vLyAvLyB9XG4vL1xuLy8gLy8gZ2V0RGF0ZSgnMTIvMDcvMTk5NycpO1xuIl19
@@ -1,4 +1,4 @@
1
- import { ChangeDetectionStrategy, Component, forwardRef, Input, model, output } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, forwardRef, input, model, numberAttribute, output, signal } from '@angular/core';
2
2
  import { NgClass, NgTemplateOutlet } from '@angular/common';
3
3
  import { NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';
4
4
  import { ButtonDirective } from '../button';
@@ -9,33 +9,34 @@ import { FormControlDirective, InputGroupComponent, InputGroupTextDirective } fr
9
9
  import { TimePickerComponent } from '../time-picker';
10
10
  import { CustomRangeKeyPipe } from '../date-range-picker/date-range-picker/custom-range-key.pipe';
11
11
  import * as i0 from "@angular/core";
12
- import * as i1 from "@angular/cdk/layout";
13
- import * as i2 from "@angular/forms";
12
+ import * as i1 from "@angular/forms";
14
13
  export class DatePickerComponent extends DateRangePickerComponent {
15
- constructor(breakpointObserver) {
16
- super(breakpointObserver);
17
- this.placeholder = 'Select date';
14
+ constructor() {
15
+ super(...arguments);
18
16
  this.dateChange = output();
19
- this.range = false;
20
- this.calendars = 1;
21
- this.endDate = model(null);
22
- }
23
- set date(value) {
24
- this.startDateModel.set(value);
17
+ this.calendars = input(1, { transform: numberAttribute });
18
+ this.placeholder = input('Select date');
19
+ this.range = signal(false);
20
+ this.endDate = signal(null);
21
+ this.startDateModel = model(null, {
22
+ alias: 'date'
23
+ });
25
24
  }
26
25
  get date() {
27
26
  return this.startDate();
28
27
  }
29
28
  writeValue(value) {
30
- this.date = value;
29
+ this.startDateModel.set(value);
31
30
  super.writeValue(value);
32
31
  }
33
32
  subscribeDateChange(subscribe = true) {
34
33
  if (subscribe) {
35
34
  this.dateChangeSubscriptions.push(this.startDateChange.subscribe((next) => {
36
- this.date = next;
37
- this.onChange(next);
38
- this.dateChange.emit(this.date);
35
+ if (this.startDateModel()?.getTime() !== next?.getTime()) {
36
+ this.startDateModel.set(next);
37
+ this.onChange(next);
38
+ this.dateChange.emit(next);
39
+ }
39
40
  }));
40
41
  return;
41
42
  }
@@ -43,14 +44,14 @@ export class DatePickerComponent extends DateRangePickerComponent {
43
44
  subscription?.unsubscribe();
44
45
  });
45
46
  }
46
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: DatePickerComponent, deps: [{ token: i1.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component }); }
47
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.8", type: DatePickerComponent, isStandalone: true, selector: "c-date-picker", inputs: { placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: false, isRequired: false, transformFunction: null }, endDate: { classPropertyName: "endDate", publicName: "endDate", isSignal: true, isRequired: false, transformFunction: null }, date: { classPropertyName: "date", publicName: "date", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { dateChange: "dateChange", endDate: "endDateChange" }, providers: [
47
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: DatePickerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
48
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.8", type: DatePickerComponent, isStandalone: true, selector: "c-date-picker", inputs: { calendars: { classPropertyName: "calendars", publicName: "calendars", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, startDateModel: { classPropertyName: "startDateModel", publicName: "date", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { dateChange: "dateChange", startDateModel: "dateChange" }, providers: [
48
49
  {
49
50
  provide: NG_VALUE_ACCESSOR,
50
51
  useExisting: forwardRef(() => DatePickerComponent),
51
52
  multi: true
52
53
  }
53
- ], exportAs: ["cDatePicker"], usesInheritance: true, ngImport: i0, template: "<fieldset [formGroup]=\"dateRangeGroup\">\n <c-dropdown #dropdown=\"cDropdown\" [(visible)]=\"visible\" [autoClose]=\"'outside'\" [ngClass]=\"datePickerClasses\"\n [popperOptions]=\"popperjsOptions\" class=\"date-picker picker\">\n <div [caret]=\"false\"\n [disabled]=\"disabled ?? dropdown.visible\"\n cDropdownToggle\n class=\"date-picker-input-group\"\n >\n <input #startDateElementRef\n (change)=\"handleStartDateInputChange($event)\"\n [attr.tabindex]=\"disabled ? -1 : 0\"\n [ngClass]=\"{hover: !!inputStartHoverValue}\"\n [placeholder]=\"startDatePlaceholder\"\n [readonly]=\"inputReadOnly ?? null\"\n [valid]=\"range ? undefined : valid\"\n cFormControl\n class=\"date-picker-input\"\n formControlName=\"startDateInput\"\n pattern=\"[1-9]*\"\n >\n @if (range && separator !== false) {\n <div class=\"date-picker-separator\"></div>\n }\n @if (range) {\n <input #endDateElementRef\n (change)=\"handleEndDateInputChange($event)\"\n [attr.tabindex]=\"disabled ? -1 : 0\"\n [ngClass]=\"{hover: !!inputEndHoverValue}\"\n [placeholder]=\"endDatePlaceholder\"\n [readonly]=\"inputReadOnly ?? null\"\n [valid]=\"valid ?? undefined\"\n cFormControl\n class=\"date-picker-input\"\n formControlName=\"endDateInput\"\n pattern=\"[1-9]*\"\n >\n }\n @if (indicator) {\n <div class=\"date-picker-indicator\"></div>\n }\n @if (cleaner && startDateElementRef.value && !disabled) {\n <div (click)=\"!disabled && handleClear($event)\" class=\"date-picker-cleaner\" role=\"button\"></div>\n }\n </div>\n <div cDropdownMenu class=\"date-picker-dropdown py-0\">\n <div class=\"date-picker-body\">\n @if (!showRanges) {\n @if (ranges && customRanges.length > 0) {\n <div class=\"date-picker-ranges\">\n @for (customRange of customRanges; track customRange) {\n <button (click)=\"setCustomRange(customRange)\"\n [color]=\"rangesButtonsColor\"\n [size]=\"rangesButtonsSize\"\n [variant]=\"rangesButtonsVariant\"\n cButton>\n {{ customRange | customRangeKey }}\n </button>\n }\n </div>\n }\n }\n <c-calendar\n (calendarCellHover)=\"handleCalendarCellHover($event)\"\n (calendarDateChange)=\"handleCalendarDateChange($event)\"\n (endDateChange)=\"handleEndDateChange($event)\"\n (startDateChange)=\"handleStartDateChange($event)\"\n [calendarDate]=\"calendarDate\"\n [calendars]=\"isMobile ? 1 : calendars\"\n [dateFilter]=\"dateFilter\"\n [dayFormat]=\"dayFormat\"\n [disabledDates]=\"disabledDates\"\n [endDate]=\"endDate()\"\n [firstDayOfWeek]=\"firstDayOfWeek\"\n [locale]=\"locale()\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [navYearFirst]=\"navYearFirst\"\n [navigation]=\"navigation\"\n [range]=\"range\"\n [selectAdjacentDays]=\"selectAdjacentDays\"\n [selectionType]=\"selectionType\"\n [showAdjacentDays]=\"showAdjacentDays\"\n [showWeekNumber]=\"showWeekNumber\"\n [startDate]=\"startDate()\"\n [weekNumbersLabel]=\"weekNumbersLabel\"\n [weekdayFormat]=\"weekdayFormat\"\n class=\"date-picker-calendars\"\n />\n @if (false && timepicker) {\n <div class=\"date-picker-timepickers\">\n <!-- todo-->\n <c-time-picker\n variant=\"select\"\n [locale]=\"locale()\"\n [disabled]=\"!startDate()\"\n [time]=\"startDate() ?? undefined\"\n (timeChange)=\"handleStartTimeChange($event)\"\n />\n @if (range) {\n <c-time-picker\n variant=\"select\"\n [locale]=\"locale()\"\n [disabled]=\"!endDate()\"\n [time]=\"endDate() ?? undefined\"\n (timeChange)=\"handleEndTimeChange($event)\"\n />\n }\n </div>\n }\n </div>\n @if (templates?.datePickerFooter) {\n <div class=\"date-picker-footer\">\n <ng-container *ngTemplateOutlet=\"templates?.datePickerFooter; context: {$implicit: dropdown}\" />\n </div>\n }\n </div>\n <ng-content />\n </c-dropdown>\n</fieldset>\n", styles: [".form-control.date-picker-input:focus{box-shadow:0 0}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: CalendarComponent, selector: "c-calendar", inputs: ["calendarDate", "calendars", "dayFormat", "disabledDates", "startDate", "endDate", "firstDayOfWeek", "locale", "maxDate", "minDate", "navigation", "navYearFirst", "range", "view", "weekdayFormat", "dateFilter", "selectAdjacentDays", "showAdjacentDays", "selectionType", "showWeekNumber", "weekNumbersLabel"], outputs: ["calendarCellHover", "calendarDateChange", "endDateChange", "startDateChange", "viewChange"], exportAs: ["cCalendar"] }, { kind: "component", type: TimePickerComponent, selector: "c-time-picker", inputs: ["cleaner", "dateTimeFormatOptions", "disabled", "filterHours", "filterMinutes", "filterSeconds", "indicator", "inputReadOnly", "locale", "placeholder", "seconds", "size", "time", "variant", "valid", "visible"], outputs: ["timeChange"], exportAs: ["cTimePicker"] }, { kind: "directive", type: ButtonDirective, selector: "[cButton]", inputs: ["active", "color", "disabled", "shape", "size", "type", "variant"], exportAs: ["cButton"] }, { kind: "component", type: DropdownComponent, selector: "c-dropdown", inputs: ["alignment", "autoClose", "direction", "placement", "popper", "popperOptions", "variant", "visible"], outputs: ["visibleChange"], exportAs: ["cDropdown"] }, { kind: "directive", type: DropdownToggleDirective, selector: "[cDropdownToggle]", inputs: ["dropdownComponent", "disabled", "caret", "split"], exportAs: ["cDropdownToggle"] }, { kind: "directive", type: DropdownMenuDirective, selector: "[cDropdownMenu]", inputs: ["alignment", "visible"], exportAs: ["cDropdownMenu"] }, { kind: "directive", type: FormControlDirective, selector: "input[cFormControl], textarea[cFormControl]", inputs: ["sizing", "valid", "type", "plaintext"] }, { kind: "pipe", type: CustomRangeKeyPipe, name: "customRangeKey" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
54
+ ], exportAs: ["cDatePicker"], usesInheritance: true, ngImport: i0, template: "<fieldset [formGroup]=\"dateRangeGroup\">\n <c-dropdown #dropdown=\"cDropdown\" [(visible)]=\"visible\" [autoClose]=\"'outside'\" [ngClass]=\"datePickerClasses\"\n [popperOptions]=\"popperjsOptions()\" class=\"date-picker picker\">\n <div [caret]=\"false\"\n [disabled]=\"disabled() ?? dropdown.visible\"\n cDropdownToggle\n class=\"date-picker-input-group\"\n >\n <input #startDateElementRef\n (change)=\"handleStartDateInputChange($event)\"\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n [ngClass]=\"{hover: !!inputStartHoverValue()}\"\n [placeholder]=\"startDatePlaceholder\"\n [readonly]=\"inputReadOnly() ?? null\"\n [valid]=\"range() ? undefined : valid()\"\n cFormControl\n class=\"date-picker-input\"\n formControlName=\"startDateInput\"\n pattern=\"[1-9]*\"\n >\n @if (range() && separator()) {\n <div class=\"date-picker-separator\"></div>\n }\n @if (range()) {\n <input #endDateElementRef\n (change)=\"handleEndDateInputChange($event)\"\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n [ngClass]=\"{hover: !!inputEndHoverValue()}\"\n [placeholder]=\"endDatePlaceholder\"\n [readonly]=\"inputReadOnly() ?? null\"\n [valid]=\"valid() ?? undefined\"\n cFormControl\n class=\"date-picker-input\"\n formControlName=\"endDateInput\"\n pattern=\"[1-9]*\"\n >\n }\n @if (indicator()) {\n <div class=\"date-picker-indicator\"></div>\n }\n @if (cleaner() && startDateElementRef.value && !disabled()) {\n <div (click)=\"!disabled() && handleClear($event)\" class=\"date-picker-cleaner\" role=\"button\"></div>\n }\n </div>\n <div cDropdownMenu class=\"date-picker-dropdown py-0\">\n <div class=\"date-picker-body\">\n @if (!showRanges) {\n @if (ranges() && customRanges.length > 0) {\n <div class=\"date-picker-ranges\">\n @for (customRange of customRanges; track customRange) {\n <button (click)=\"setCustomRange(customRange)\"\n [color]=\"rangesButtonsColor()\"\n [size]=\"rangesButtonsSize()\"\n [variant]=\"rangesButtonsVariant()\"\n cButton>\n {{ customRange | customRangeKey }}\n </button>\n }\n </div>\n }\n }\n <c-calendar\n (calendarCellHover)=\"handleCalendarCellHover($event)\"\n (calendarDateChange)=\"handleCalendarDateChange($event)\"\n (endDateChange)=\"handleEndDateChange($event)\"\n (startDateChange)=\"handleStartDateChange($event)\"\n [calendarDate]=\"calendarDate\"\n [calendars]=\"isMobile ? 1 : calendars()\"\n [dateFilter]=\"dateFilter()\"\n [dayFormat]=\"dayFormat()\"\n [disabledDates]=\"disabledDates()\"\n [endDate]=\"endDate()\"\n [firstDayOfWeek]=\"firstDayOfWeek()\"\n [locale]=\"locale()\"\n [maxDate]=\"maxDate()\"\n [minDate]=\"minDate()\"\n [navYearFirst]=\"navYearFirst()\"\n [navigation]=\"navigation()\"\n [range]=\"range()\"\n [selectAdjacentDays]=\"selectAdjacentDays()\"\n [selectionType]=\"selectionType()\"\n [showAdjacentDays]=\"showAdjacentDays()\"\n [showWeekNumber]=\"showWeekNumber()\"\n [startDate]=\"startDate()\"\n [weekNumbersLabel]=\"weekNumbersLabel()\"\n [weekdayFormat]=\"weekdayFormat()\"\n class=\"date-picker-calendars\"\n />\n @if (false && timepicker) {\n <div class=\"date-picker-timepickers\">\n <!-- todo-->\n <c-time-picker\n variant=\"select\"\n [locale]=\"locale()\"\n [disabled]=\"!startDate()\"\n [time]=\"startDate() ?? undefined\"\n (timeChange)=\"handleStartTimeChange($event)\"\n />\n @if (range()) {\n <c-time-picker\n variant=\"select\"\n [locale]=\"locale()\"\n [disabled]=\"!endDate()\"\n [time]=\"endDate() ?? undefined\"\n (timeChange)=\"handleEndTimeChange($event)\"\n />\n }\n </div>\n }\n </div>\n @let footer = templates()?.['datePickerFooter'];\n @if (footer) {\n <div class=\"date-picker-footer\">\n <ng-container *ngTemplateOutlet=\"footer; context: {$implicit: dropdown}\" />\n </div>\n }\n </div>\n <ng-content />\n </c-dropdown>\n</fieldset>\n", styles: [".form-control.date-picker-input:focus{box-shadow:0 0}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: CalendarComponent, selector: "c-calendar", inputs: ["calendarDate", "calendars", "dayFormat", "disabledDates", "startDate", "endDate", "firstDayOfWeek", "locale", "maxDate", "minDate", "navigation", "navYearFirst", "range", "view", "weekdayFormat", "dateFilter", "selectAdjacentDays", "showAdjacentDays", "selectionType", "showWeekNumber", "weekNumbersLabel", "ariaNextMonthLabel", "ariaNextYearLabel", "ariaPrevMonthLabel", "ariaPrevYearLabel"], outputs: ["calendarDateChange", "endDateChange", "startDateChange", "viewChange", "calendarCellHover"], exportAs: ["cCalendar"] }, { kind: "component", type: TimePickerComponent, selector: "c-time-picker", inputs: ["cleaner", "dateTimeFormatOptions", "disabled", "filterHours", "filterMinutes", "filterSeconds", "indicator", "inputReadOnly", "locale", "placeholder", "seconds", "size", "time", "variant", "valid", "visible"], outputs: ["timeChange"], exportAs: ["cTimePicker"] }, { kind: "directive", type: ButtonDirective, selector: "[cButton]", inputs: ["active", "color", "disabled", "shape", "size", "type", "variant"], exportAs: ["cButton"] }, { kind: "component", type: DropdownComponent, selector: "c-dropdown", inputs: ["alignment", "autoClose", "direction", "placement", "popper", "popperOptions", "variant", "visible"], outputs: ["visibleChange"], exportAs: ["cDropdown"] }, { kind: "directive", type: DropdownToggleDirective, selector: "[cDropdownToggle]", inputs: ["dropdownComponent", "disabled", "caret", "split"], exportAs: ["cDropdownToggle"] }, { kind: "directive", type: DropdownMenuDirective, selector: "[cDropdownMenu]", inputs: ["alignment", "visible"], exportAs: ["cDropdownMenu"] }, { kind: "directive", type: FormControlDirective, selector: "input[cFormControl], textarea[cFormControl]", inputs: ["sizing", "valid", "type", "plaintext"] }, { kind: "pipe", type: CustomRangeKeyPipe, name: "customRangeKey" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
54
55
  }
55
56
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: DatePickerComponent, decorators: [{
56
57
  type: Component,
@@ -74,10 +75,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImpor
74
75
  useExisting: forwardRef(() => DatePickerComponent),
75
76
  multi: true
76
77
  }
77
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<fieldset [formGroup]=\"dateRangeGroup\">\n <c-dropdown #dropdown=\"cDropdown\" [(visible)]=\"visible\" [autoClose]=\"'outside'\" [ngClass]=\"datePickerClasses\"\n [popperOptions]=\"popperjsOptions\" class=\"date-picker picker\">\n <div [caret]=\"false\"\n [disabled]=\"disabled ?? dropdown.visible\"\n cDropdownToggle\n class=\"date-picker-input-group\"\n >\n <input #startDateElementRef\n (change)=\"handleStartDateInputChange($event)\"\n [attr.tabindex]=\"disabled ? -1 : 0\"\n [ngClass]=\"{hover: !!inputStartHoverValue}\"\n [placeholder]=\"startDatePlaceholder\"\n [readonly]=\"inputReadOnly ?? null\"\n [valid]=\"range ? undefined : valid\"\n cFormControl\n class=\"date-picker-input\"\n formControlName=\"startDateInput\"\n pattern=\"[1-9]*\"\n >\n @if (range && separator !== false) {\n <div class=\"date-picker-separator\"></div>\n }\n @if (range) {\n <input #endDateElementRef\n (change)=\"handleEndDateInputChange($event)\"\n [attr.tabindex]=\"disabled ? -1 : 0\"\n [ngClass]=\"{hover: !!inputEndHoverValue}\"\n [placeholder]=\"endDatePlaceholder\"\n [readonly]=\"inputReadOnly ?? null\"\n [valid]=\"valid ?? undefined\"\n cFormControl\n class=\"date-picker-input\"\n formControlName=\"endDateInput\"\n pattern=\"[1-9]*\"\n >\n }\n @if (indicator) {\n <div class=\"date-picker-indicator\"></div>\n }\n @if (cleaner && startDateElementRef.value && !disabled) {\n <div (click)=\"!disabled && handleClear($event)\" class=\"date-picker-cleaner\" role=\"button\"></div>\n }\n </div>\n <div cDropdownMenu class=\"date-picker-dropdown py-0\">\n <div class=\"date-picker-body\">\n @if (!showRanges) {\n @if (ranges && customRanges.length > 0) {\n <div class=\"date-picker-ranges\">\n @for (customRange of customRanges; track customRange) {\n <button (click)=\"setCustomRange(customRange)\"\n [color]=\"rangesButtonsColor\"\n [size]=\"rangesButtonsSize\"\n [variant]=\"rangesButtonsVariant\"\n cButton>\n {{ customRange | customRangeKey }}\n </button>\n }\n </div>\n }\n }\n <c-calendar\n (calendarCellHover)=\"handleCalendarCellHover($event)\"\n (calendarDateChange)=\"handleCalendarDateChange($event)\"\n (endDateChange)=\"handleEndDateChange($event)\"\n (startDateChange)=\"handleStartDateChange($event)\"\n [calendarDate]=\"calendarDate\"\n [calendars]=\"isMobile ? 1 : calendars\"\n [dateFilter]=\"dateFilter\"\n [dayFormat]=\"dayFormat\"\n [disabledDates]=\"disabledDates\"\n [endDate]=\"endDate()\"\n [firstDayOfWeek]=\"firstDayOfWeek\"\n [locale]=\"locale()\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [navYearFirst]=\"navYearFirst\"\n [navigation]=\"navigation\"\n [range]=\"range\"\n [selectAdjacentDays]=\"selectAdjacentDays\"\n [selectionType]=\"selectionType\"\n [showAdjacentDays]=\"showAdjacentDays\"\n [showWeekNumber]=\"showWeekNumber\"\n [startDate]=\"startDate()\"\n [weekNumbersLabel]=\"weekNumbersLabel\"\n [weekdayFormat]=\"weekdayFormat\"\n class=\"date-picker-calendars\"\n />\n @if (false && timepicker) {\n <div class=\"date-picker-timepickers\">\n <!-- todo-->\n <c-time-picker\n variant=\"select\"\n [locale]=\"locale()\"\n [disabled]=\"!startDate()\"\n [time]=\"startDate() ?? undefined\"\n (timeChange)=\"handleStartTimeChange($event)\"\n />\n @if (range) {\n <c-time-picker\n variant=\"select\"\n [locale]=\"locale()\"\n [disabled]=\"!endDate()\"\n [time]=\"endDate() ?? undefined\"\n (timeChange)=\"handleEndTimeChange($event)\"\n />\n }\n </div>\n }\n </div>\n @if (templates?.datePickerFooter) {\n <div class=\"date-picker-footer\">\n <ng-container *ngTemplateOutlet=\"templates?.datePickerFooter; context: {$implicit: dropdown}\" />\n </div>\n }\n </div>\n <ng-content />\n </c-dropdown>\n</fieldset>\n", styles: [".form-control.date-picker-input:focus{box-shadow:0 0}\n"] }]
78
- }], ctorParameters: () => [{ type: i1.BreakpointObserver }], propDecorators: { placeholder: [{
79
- type: Input
80
- }], date: [{
81
- type: Input
82
- }] } });
83
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZXVpLWFuZ3VsYXIvc3JjL2xpYi9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci9zcmMvbGliL2RhdGUtcmFuZ2UtcGlja2VyL2RhdGUtcmFuZ2UtcGlja2VyL2RhdGUtcmFuZ2UtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUd4RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzVDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNoRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUscUJBQXFCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDaEcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLG1CQUFtQixFQUFFLHVCQUF1QixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzdGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhEQUE4RCxDQUFDOzs7O0FBZ0NsRyxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsd0JBQXdCO0lBQy9ELFlBQVksa0JBQXNDO1FBQ2hELEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBR1YsZ0JBQVcsR0FBVyxhQUFhLENBQUM7UUFFN0MsZUFBVSxHQUFHLE1BQU0sRUFBMkIsQ0FBQztRQUV0QyxVQUFLLEdBQUcsS0FBSyxDQUFDO1FBRWQsY0FBUyxHQUFHLENBQUMsQ0FBQztRQUVkLFlBQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFWeEMsQ0FBQztJQVlELElBQ0ksSUFBSSxDQUFDLEtBQThCO1FBQ3JDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRVEsVUFBVSxDQUFDLEtBQThCO1FBQ2hELElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVRLG1CQUFtQixDQUFDLFlBQXFCLElBQUk7UUFDcEQsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQy9CLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ3RDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO2dCQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztZQUNGLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFO1lBQ3BELFlBQVksRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7OEdBM0NVLG1CQUFtQjtrR0FBbkIsbUJBQW1CLHdnQkFUbkI7WUFDVDtnQkFDRSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLG1CQUFtQixDQUFDO2dCQUNsRCxLQUFLLEVBQUUsSUFBSTthQUNaO1NBQ0YsNEVDeENILHFzSkF1SEEsaUhEbkdJLE9BQU8sb0ZBQ1AsZ0JBQWdCLG1KQUNoQixtQkFBbUIsNi9CQUNuQixpQkFBaUIsc2ZBQ2pCLG1CQUFtQiwwVUFDbkIsZUFBZSwwSkFDZixpQkFBaUIsMk5BQ2pCLHVCQUF1QiwwSkFDdkIscUJBQXFCLDJIQUVyQixvQkFBb0IscUlBRXBCLGtCQUFrQjs7MkZBV1QsbUJBQW1CO2tCQTlCL0IsU0FBUzsrQkFDRSxlQUFlLFlBR2YsYUFBYSxjQUNYLElBQUksV0FDUDt3QkFDUCxPQUFPO3dCQUNQLGdCQUFnQjt3QkFDaEIsbUJBQW1CO3dCQUNuQixpQkFBaUI7d0JBQ2pCLG1CQUFtQjt3QkFDbkIsZUFBZTt3QkFDZixpQkFBaUI7d0JBQ2pCLHVCQUF1Qjt3QkFDdkIscUJBQXFCO3dCQUNyQixtQkFBbUI7d0JBQ25CLG9CQUFvQjt3QkFDcEIsdUJBQXVCO3dCQUN2QixrQkFBa0I7cUJBQ25CLGFBQ1U7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsb0JBQW9CLENBQUM7NEJBQ2xELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGLG1CQUNnQix1QkFBdUIsQ0FBQyxNQUFNO3VGQU83QixXQUFXO3NCQUE1QixLQUFLO2dCQVdGLElBQUk7c0JBRFAsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGZvcndhcmRSZWYsIElucHV0LCBtb2RlbCwgb3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ0NsYXNzLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQnJlYWtwb2ludE9ic2VydmVyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XG5cbmltcG9ydCB7IEJ1dHRvbkRpcmVjdGl2ZSB9IGZyb20gJy4uL2J1dHRvbic7XG5pbXBvcnQgeyBEYXRlUmFuZ2VQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuLi9kYXRlLXJhbmdlLXBpY2tlcic7XG5pbXBvcnQgeyBDYWxlbmRhckNvbXBvbmVudCB9IGZyb20gJy4uL2NhbGVuZGFyJztcbmltcG9ydCB7IERyb3Bkb3duQ29tcG9uZW50LCBEcm9wZG93bk1lbnVEaXJlY3RpdmUsIERyb3Bkb3duVG9nZ2xlRGlyZWN0aXZlIH0gZnJvbSAnLi4vZHJvcGRvd24nO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2xEaXJlY3RpdmUsIElucHV0R3JvdXBDb21wb25lbnQsIElucHV0R3JvdXBUZXh0RGlyZWN0aXZlIH0gZnJvbSAnLi4vZm9ybSc7XG5pbXBvcnQgeyBUaW1lUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vdGltZS1waWNrZXInO1xuaW1wb3J0IHsgQ3VzdG9tUmFuZ2VLZXlQaXBlIH0gZnJvbSAnLi4vZGF0ZS1yYW5nZS1waWNrZXIvZGF0ZS1yYW5nZS1waWNrZXIvY3VzdG9tLXJhbmdlLWtleS5waXBlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYy1kYXRlLXBpY2tlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi4vZGF0ZS1yYW5nZS1waWNrZXIvZGF0ZS1yYW5nZS1waWNrZXIvZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi4vZGF0ZS1yYW5nZS1waWNrZXIvZGF0ZS1yYW5nZS1waWNrZXIvZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgZXhwb3J0QXM6ICdjRGF0ZVBpY2tlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBOZ0NsYXNzLFxuICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBDYWxlbmRhckNvbXBvbmVudCxcbiAgICBUaW1lUGlja2VyQ29tcG9uZW50LFxuICAgIEJ1dHRvbkRpcmVjdGl2ZSxcbiAgICBEcm9wZG93bkNvbXBvbmVudCxcbiAgICBEcm9wZG93blRvZ2dsZURpcmVjdGl2ZSxcbiAgICBEcm9wZG93bk1lbnVEaXJlY3RpdmUsXG4gICAgSW5wdXRHcm91cENvbXBvbmVudCxcbiAgICBGb3JtQ29udHJvbERpcmVjdGl2ZSxcbiAgICBJbnB1dEdyb3VwVGV4dERpcmVjdGl2ZSxcbiAgICBDdXN0b21SYW5nZUtleVBpcGVcbiAgXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRlUGlja2VyQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBEYXRlUGlja2VyQ29tcG9uZW50IGV4dGVuZHMgRGF0ZVJhbmdlUGlja2VyQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoYnJlYWtwb2ludE9ic2VydmVyOiBCcmVha3BvaW50T2JzZXJ2ZXIpIHtcbiAgICBzdXBlcihicmVha3BvaW50T2JzZXJ2ZXIpO1xuICB9XG5cbiAgQElucHV0KCkgb3ZlcnJpZGUgcGxhY2Vob2xkZXI6IHN0cmluZyA9ICdTZWxlY3QgZGF0ZSc7XG5cbiAgcmVhZG9ubHkgZGF0ZUNoYW5nZSA9IG91dHB1dDxEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZD4oKTtcblxuICBvdmVycmlkZSByZWFkb25seSByYW5nZSA9IGZhbHNlO1xuXG4gIG92ZXJyaWRlIHJlYWRvbmx5IGNhbGVuZGFycyA9IDE7XG5cbiAgb3ZlcnJpZGUgcmVhZG9ubHkgZW5kRGF0ZSA9IG1vZGVsKG51bGwpO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBkYXRlKHZhbHVlOiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuc3RhcnREYXRlTW9kZWwuc2V0KHZhbHVlKTtcbiAgfVxuXG4gIGdldCBkYXRlKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0RGF0ZSgpO1xuICB9XG5cbiAgb3ZlcnJpZGUgd3JpdGVWYWx1ZSh2YWx1ZTogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICB0aGlzLmRhdGUgPSB2YWx1ZTtcbiAgICBzdXBlci53cml0ZVZhbHVlKHZhbHVlKTtcbiAgfVxuXG4gIG92ZXJyaWRlIHN1YnNjcmliZURhdGVDaGFuZ2Uoc3Vic2NyaWJlOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xuICAgIGlmIChzdWJzY3JpYmUpIHtcbiAgICAgIHRoaXMuZGF0ZUNoYW5nZVN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgdGhpcy5zdGFydERhdGVDaGFuZ2Uuc3Vic2NyaWJlKChuZXh0KSA9PiB7XG4gICAgICAgICAgdGhpcy5kYXRlID0gbmV4dDtcbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlKG5leHQpO1xuICAgICAgICAgIHRoaXMuZGF0ZUNoYW5nZS5lbWl0KHRoaXMuZGF0ZSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmRhdGVDaGFuZ2VTdWJzY3JpcHRpb25zLmZvckVhY2goKHN1YnNjcmlwdGlvbikgPT4ge1xuICAgICAgc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIH0pO1xuICB9XG59XG4iLCI8ZmllbGRzZXQgW2Zvcm1Hcm91cF09XCJkYXRlUmFuZ2VHcm91cFwiPlxuICA8Yy1kcm9wZG93biAjZHJvcGRvd249XCJjRHJvcGRvd25cIiBbKHZpc2libGUpXT1cInZpc2libGVcIiBbYXV0b0Nsb3NlXT1cIidvdXRzaWRlJ1wiIFtuZ0NsYXNzXT1cImRhdGVQaWNrZXJDbGFzc2VzXCJcbiAgICAgICAgICAgICAgW3BvcHBlck9wdGlvbnNdPVwicG9wcGVyanNPcHRpb25zXCIgY2xhc3M9XCJkYXRlLXBpY2tlciBwaWNrZXJcIj5cbiAgICA8ZGl2IFtjYXJldF09XCJmYWxzZVwiXG4gICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgPz8gZHJvcGRvd24udmlzaWJsZVwiXG4gICAgICAgICBjRHJvcGRvd25Ub2dnbGVcbiAgICAgICAgIGNsYXNzPVwiZGF0ZS1waWNrZXItaW5wdXQtZ3JvdXBcIlxuICAgID5cbiAgICAgIDxpbnB1dCAjc3RhcnREYXRlRWxlbWVudFJlZlxuICAgICAgICAgICAgIChjaGFuZ2UpPVwiaGFuZGxlU3RhcnREYXRlSW5wdXRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiZGlzYWJsZWQgPyAtMSA6IDBcIlxuICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntob3ZlcjogISFpbnB1dFN0YXJ0SG92ZXJWYWx1ZX1cIlxuICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJzdGFydERhdGVQbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgW3JlYWRvbmx5XT1cImlucHV0UmVhZE9ubHkgPz8gbnVsbFwiXG4gICAgICAgICAgICAgW3ZhbGlkXT1cInJhbmdlID8gdW5kZWZpbmVkIDogdmFsaWRcIlxuICAgICAgICAgICAgIGNGb3JtQ29udHJvbFxuICAgICAgICAgICAgIGNsYXNzPVwiZGF0ZS1waWNrZXItaW5wdXRcIlxuICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInN0YXJ0RGF0ZUlucHV0XCJcbiAgICAgICAgICAgICBwYXR0ZXJuPVwiWzEtOV0qXCJcbiAgICAgID5cbiAgICAgIEBpZiAocmFuZ2UgJiYgc2VwYXJhdG9yICE9PSBmYWxzZSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1waWNrZXItc2VwYXJhdG9yXCI+PC9kaXY+XG4gICAgICB9XG4gICAgICBAaWYgKHJhbmdlKSB7XG4gICAgICAgIDxpbnB1dCAjZW5kRGF0ZUVsZW1lbnRSZWZcbiAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiaGFuZGxlRW5kRGF0ZUlucHV0Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiZGlzYWJsZWQgPyAtMSA6IDBcIlxuICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie2hvdmVyOiAhIWlucHV0RW5kSG92ZXJWYWx1ZX1cIlxuICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImVuZERhdGVQbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiaW5wdXRSZWFkT25seSA/PyBudWxsXCJcbiAgICAgICAgICAgICAgIFt2YWxpZF09XCJ2YWxpZCA/PyB1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgY0Zvcm1Db250cm9sXG4gICAgICAgICAgICAgICBjbGFzcz1cImRhdGUtcGlja2VyLWlucHV0XCJcbiAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImVuZERhdGVJbnB1dFwiXG4gICAgICAgICAgICAgICBwYXR0ZXJuPVwiWzEtOV0qXCJcbiAgICAgICAgPlxuICAgICAgfVxuICAgICAgQGlmIChpbmRpY2F0b3IpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImRhdGUtcGlja2VyLWluZGljYXRvclwiPjwvZGl2PlxuICAgICAgfVxuICAgICAgQGlmIChjbGVhbmVyICYmIHN0YXJ0RGF0ZUVsZW1lbnRSZWYudmFsdWUgJiYgIWRpc2FibGVkKSB7XG4gICAgICAgIDxkaXYgKGNsaWNrKT1cIiFkaXNhYmxlZCAmJiBoYW5kbGVDbGVhcigkZXZlbnQpXCIgY2xhc3M9XCJkYXRlLXBpY2tlci1jbGVhbmVyXCIgcm9sZT1cImJ1dHRvblwiPjwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICAgIDxkaXYgY0Ryb3Bkb3duTWVudSBjbGFzcz1cImRhdGUtcGlja2VyLWRyb3Bkb3duIHB5LTBcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkYXRlLXBpY2tlci1ib2R5XCI+XG4gICAgICAgIEBpZiAoIXNob3dSYW5nZXMpIHtcbiAgICAgICAgICBAaWYgKHJhbmdlcyAmJiBjdXN0b21SYW5nZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhdGUtcGlja2VyLXJhbmdlc1wiPlxuICAgICAgICAgICAgICBAZm9yIChjdXN0b21SYW5nZSBvZiBjdXN0b21SYW5nZXM7IHRyYWNrIGN1c3RvbVJhbmdlKSB7XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwic2V0Q3VzdG9tUmFuZ2UoY3VzdG9tUmFuZ2UpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCJyYW5nZXNCdXR0b25zQ29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NpemVdPVwicmFuZ2VzQnV0dG9uc1NpemVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhcmlhbnRdPVwicmFuZ2VzQnV0dG9uc1ZhcmlhbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIHt7IGN1c3RvbVJhbmdlIHwgY3VzdG9tUmFuZ2VLZXkgfX1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIDxjLWNhbGVuZGFyXG4gICAgICAgICAgKGNhbGVuZGFyQ2VsbEhvdmVyKT1cImhhbmRsZUNhbGVuZGFyQ2VsbEhvdmVyKCRldmVudClcIlxuICAgICAgICAgIChjYWxlbmRhckRhdGVDaGFuZ2UpPVwiaGFuZGxlQ2FsZW5kYXJEYXRlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgIChlbmREYXRlQ2hhbmdlKT1cImhhbmRsZUVuZERhdGVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgKHN0YXJ0RGF0ZUNoYW5nZSk9XCJoYW5kbGVTdGFydERhdGVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgW2NhbGVuZGFyRGF0ZV09XCJjYWxlbmRhckRhdGVcIlxuICAgICAgICAgIFtjYWxlbmRhcnNdPVwiaXNNb2JpbGUgPyAxIDogY2FsZW5kYXJzXCJcbiAgICAgICAgICBbZGF0ZUZpbHRlcl09XCJkYXRlRmlsdGVyXCJcbiAgICAgICAgICBbZGF5Rm9ybWF0XT1cImRheUZvcm1hdFwiXG4gICAgICAgICAgW2Rpc2FibGVkRGF0ZXNdPVwiZGlzYWJsZWREYXRlc1wiXG4gICAgICAgICAgW2VuZERhdGVdPVwiZW5kRGF0ZSgpXCJcbiAgICAgICAgICBbZmlyc3REYXlPZldlZWtdPVwiZmlyc3REYXlPZldlZWtcIlxuICAgICAgICAgIFtsb2NhbGVdPVwibG9jYWxlKClcIlxuICAgICAgICAgIFttYXhEYXRlXT1cIm1heERhdGVcIlxuICAgICAgICAgIFttaW5EYXRlXT1cIm1pbkRhdGVcIlxuICAgICAgICAgIFtuYXZZZWFyRmlyc3RdPVwibmF2WWVhckZpcnN0XCJcbiAgICAgICAgICBbbmF2aWdhdGlvbl09XCJuYXZpZ2F0aW9uXCJcbiAgICAgICAgICBbcmFuZ2VdPVwicmFuZ2VcIlxuICAgICAgICAgIFtzZWxlY3RBZGphY2VudERheXNdPVwic2VsZWN0QWRqYWNlbnREYXlzXCJcbiAgICAgICAgICBbc2VsZWN0aW9uVHlwZV09XCJzZWxlY3Rpb25UeXBlXCJcbiAgICAgICAgICBbc2hvd0FkamFjZW50RGF5c109XCJzaG93QWRqYWNlbnREYXlzXCJcbiAgICAgICAgICBbc2hvd1dlZWtOdW1iZXJdPVwic2hvd1dlZWtOdW1iZXJcIlxuICAgICAgICAgIFtzdGFydERhdGVdPVwic3RhcnREYXRlKClcIlxuICAgICAgICAgIFt3ZWVrTnVtYmVyc0xhYmVsXT1cIndlZWtOdW1iZXJzTGFiZWxcIlxuICAgICAgICAgIFt3ZWVrZGF5Rm9ybWF0XT1cIndlZWtkYXlGb3JtYXRcIlxuICAgICAgICAgIGNsYXNzPVwiZGF0ZS1waWNrZXItY2FsZW5kYXJzXCJcbiAgICAgICAgLz5cbiAgICAgICAgQGlmIChmYWxzZSAmJiB0aW1lcGlja2VyKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRhdGUtcGlja2VyLXRpbWVwaWNrZXJzXCI+XG4gICAgICAgICAgICA8IS0tIHRvZG8tLT5cbiAgICAgICAgICAgIDxjLXRpbWUtcGlja2VyXG4gICAgICAgICAgICAgIHZhcmlhbnQ9XCJzZWxlY3RcIlxuICAgICAgICAgICAgICBbbG9jYWxlXT1cImxvY2FsZSgpXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFzdGFydERhdGUoKVwiXG4gICAgICAgICAgICAgIFt0aW1lXT1cInN0YXJ0RGF0ZSgpID8/IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgICh0aW1lQ2hhbmdlKT1cImhhbmRsZVN0YXJ0VGltZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICBAaWYgKHJhbmdlKSB7XG4gICAgICAgICAgICAgIDxjLXRpbWUtcGlja2VyXG4gICAgICAgICAgICAgICAgdmFyaWFudD1cInNlbGVjdFwiXG4gICAgICAgICAgICAgICAgW2xvY2FsZV09XCJsb2NhbGUoKVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFlbmREYXRlKClcIlxuICAgICAgICAgICAgICAgIFt0aW1lXT1cImVuZERhdGUoKSA/PyB1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgICh0aW1lQ2hhbmdlKT1cImhhbmRsZUVuZFRpbWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgICAgQGlmICh0ZW1wbGF0ZXM/LmRhdGVQaWNrZXJGb290ZXIpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImRhdGUtcGlja2VyLWZvb3RlclwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZXM/LmRhdGVQaWNrZXJGb290ZXI7IGNvbnRleHQ6IHskaW1wbGljaXQ6IGRyb3Bkb3dufVwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250ZW50IC8+XG4gIDwvYy1kcm9wZG93bj5cbjwvZmllbGRzZXQ+XG4iXX0=
78
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<fieldset [formGroup]=\"dateRangeGroup\">\n <c-dropdown #dropdown=\"cDropdown\" [(visible)]=\"visible\" [autoClose]=\"'outside'\" [ngClass]=\"datePickerClasses\"\n [popperOptions]=\"popperjsOptions()\" class=\"date-picker picker\">\n <div [caret]=\"false\"\n [disabled]=\"disabled() ?? dropdown.visible\"\n cDropdownToggle\n class=\"date-picker-input-group\"\n >\n <input #startDateElementRef\n (change)=\"handleStartDateInputChange($event)\"\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n [ngClass]=\"{hover: !!inputStartHoverValue()}\"\n [placeholder]=\"startDatePlaceholder\"\n [readonly]=\"inputReadOnly() ?? null\"\n [valid]=\"range() ? undefined : valid()\"\n cFormControl\n class=\"date-picker-input\"\n formControlName=\"startDateInput\"\n pattern=\"[1-9]*\"\n >\n @if (range() && separator()) {\n <div class=\"date-picker-separator\"></div>\n }\n @if (range()) {\n <input #endDateElementRef\n (change)=\"handleEndDateInputChange($event)\"\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n [ngClass]=\"{hover: !!inputEndHoverValue()}\"\n [placeholder]=\"endDatePlaceholder\"\n [readonly]=\"inputReadOnly() ?? null\"\n [valid]=\"valid() ?? undefined\"\n cFormControl\n class=\"date-picker-input\"\n formControlName=\"endDateInput\"\n pattern=\"[1-9]*\"\n >\n }\n @if (indicator()) {\n <div class=\"date-picker-indicator\"></div>\n }\n @if (cleaner() && startDateElementRef.value && !disabled()) {\n <div (click)=\"!disabled() && handleClear($event)\" class=\"date-picker-cleaner\" role=\"button\"></div>\n }\n </div>\n <div cDropdownMenu class=\"date-picker-dropdown py-0\">\n <div class=\"date-picker-body\">\n @if (!showRanges) {\n @if (ranges() && customRanges.length > 0) {\n <div class=\"date-picker-ranges\">\n @for (customRange of customRanges; track customRange) {\n <button (click)=\"setCustomRange(customRange)\"\n [color]=\"rangesButtonsColor()\"\n [size]=\"rangesButtonsSize()\"\n [variant]=\"rangesButtonsVariant()\"\n cButton>\n {{ customRange | customRangeKey }}\n </button>\n }\n </div>\n }\n }\n <c-calendar\n (calendarCellHover)=\"handleCalendarCellHover($event)\"\n (calendarDateChange)=\"handleCalendarDateChange($event)\"\n (endDateChange)=\"handleEndDateChange($event)\"\n (startDateChange)=\"handleStartDateChange($event)\"\n [calendarDate]=\"calendarDate\"\n [calendars]=\"isMobile ? 1 : calendars()\"\n [dateFilter]=\"dateFilter()\"\n [dayFormat]=\"dayFormat()\"\n [disabledDates]=\"disabledDates()\"\n [endDate]=\"endDate()\"\n [firstDayOfWeek]=\"firstDayOfWeek()\"\n [locale]=\"locale()\"\n [maxDate]=\"maxDate()\"\n [minDate]=\"minDate()\"\n [navYearFirst]=\"navYearFirst()\"\n [navigation]=\"navigation()\"\n [range]=\"range()\"\n [selectAdjacentDays]=\"selectAdjacentDays()\"\n [selectionType]=\"selectionType()\"\n [showAdjacentDays]=\"showAdjacentDays()\"\n [showWeekNumber]=\"showWeekNumber()\"\n [startDate]=\"startDate()\"\n [weekNumbersLabel]=\"weekNumbersLabel()\"\n [weekdayFormat]=\"weekdayFormat()\"\n class=\"date-picker-calendars\"\n />\n @if (false && timepicker) {\n <div class=\"date-picker-timepickers\">\n <!-- todo-->\n <c-time-picker\n variant=\"select\"\n [locale]=\"locale()\"\n [disabled]=\"!startDate()\"\n [time]=\"startDate() ?? undefined\"\n (timeChange)=\"handleStartTimeChange($event)\"\n />\n @if (range()) {\n <c-time-picker\n variant=\"select\"\n [locale]=\"locale()\"\n [disabled]=\"!endDate()\"\n [time]=\"endDate() ?? undefined\"\n (timeChange)=\"handleEndTimeChange($event)\"\n />\n }\n </div>\n }\n </div>\n @let footer = templates()?.['datePickerFooter'];\n @if (footer) {\n <div class=\"date-picker-footer\">\n <ng-container *ngTemplateOutlet=\"footer; context: {$implicit: dropdown}\" />\n </div>\n }\n </div>\n <ng-content />\n </c-dropdown>\n</fieldset>\n", styles: [".form-control.date-picker-input:focus{box-shadow:0 0}\n"] }]
79
+ }] });
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZXVpLWFuZ3VsYXIvc3JjL2xpYi9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci9zcmMvbGliL2RhdGUtcmFuZ2UtcGlja2VyL2RhdGUtcmFuZ2UtcGlja2VyL2RhdGUtcmFuZ2UtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixLQUFLLEVBQ0wsS0FBSyxFQUVMLGVBQWUsRUFDZixNQUFNLEVBQ04sTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzVDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNoRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUscUJBQXFCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDaEcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLG1CQUFtQixFQUFFLHVCQUF1QixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzdGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhEQUE4RCxDQUFDOzs7QUFnQ2xHLE1BQU0sT0FBTyxt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aGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBmb3J3YXJkUmVmLFxuICBpbnB1dCxcbiAgbW9kZWwsXG4gIE1vZGVsU2lnbmFsLFxuICBudW1iZXJBdHRyaWJ1dGUsXG4gIG91dHB1dCxcbiAgc2lnbmFsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdDbGFzcywgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgQnV0dG9uRGlyZWN0aXZlIH0gZnJvbSAnLi4vYnV0dG9uJztcbmltcG9ydCB7IERhdGVSYW5nZVBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4uL2RhdGUtcmFuZ2UtcGlja2VyJztcbmltcG9ydCB7IENhbGVuZGFyQ29tcG9uZW50IH0gZnJvbSAnLi4vY2FsZW5kYXInO1xuaW1wb3J0IHsgRHJvcGRvd25Db21wb25lbnQsIERyb3Bkb3duTWVudURpcmVjdGl2ZSwgRHJvcGRvd25Ub2dnbGVEaXJlY3RpdmUgfSBmcm9tICcuLi9kcm9wZG93bic7XG5pbXBvcnQgeyBGb3JtQ29udHJvbERpcmVjdGl2ZSwgSW5wdXRHcm91cENvbXBvbmVudCwgSW5wdXRHcm91cFRleHREaXJlY3RpdmUgfSBmcm9tICcuLi9mb3JtJztcbmltcG9ydCB7IFRpbWVQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuLi90aW1lLXBpY2tlcic7XG5pbXBvcnQgeyBDdXN0b21SYW5nZUtleVBpcGUgfSBmcm9tICcuLi9kYXRlLXJhbmdlLXBpY2tlci9kYXRlLXJhbmdlLXBpY2tlci9jdXN0b20tcmFuZ2Uta2V5LnBpcGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjLWRhdGUtcGlja2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuLi9kYXRlLXJhbmdlLXBpY2tlci9kYXRlLXJhbmdlLXBpY2tlci9kYXRlLXJhbmdlLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuLi9kYXRlLXJhbmdlLXBpY2tlci9kYXRlLXJhbmdlLXBpY2tlci9kYXRlLXJhbmdlLXBpY2tlci5jb21wb25lbnQuc2NzcyddLFxuICBleHBvcnRBczogJ2NEYXRlUGlja2VyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIE5nQ2xhc3MsXG4gICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIENhbGVuZGFyQ29tcG9uZW50LFxuICAgIFRpbWVQaWNrZXJDb21wb25lbnQsXG4gICAgQnV0dG9uRGlyZWN0aXZlLFxuICAgIERyb3Bkb3duQ29tcG9uZW50LFxuICAgIERyb3Bkb3duVG9nZ2xlRGlyZWN0aXZlLFxuICAgIERyb3Bkb3duTWVudURpcmVjdGl2ZSxcbiAgICBJbnB1dEdyb3VwQ29tcG9uZW50LFxuICAgIEZvcm1Db250cm9sRGlyZWN0aXZlLFxuICAgIElucHV0R3JvdXBUZXh0RGlyZWN0aXZlLFxuICAgIEN1c3RvbVJhbmdlS2V5UGlwZVxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGVQaWNrZXJDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIERhdGVQaWNrZXJDb21wb25lbnQgZXh0ZW5kcyBEYXRlUmFuZ2VQaWNrZXJDb21wb25lbnQge1xuICByZWFkb25seSBkYXRlQ2hhbmdlID0gb3V0cHV0PERhdGUgfCBudWxsIHwgdW5kZWZpbmVkPigpO1xuXG4gIG92ZXJyaWRlIHJlYWRvbmx5IGNhbGVuZGFycyA9IGlucHV0KDEsIHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSk7XG5cbiAgb3ZlcnJpZGUgcmVhZG9ubHkgcGxhY2Vob2xkZXIgPSBpbnB1dDxzdHJpbmcgfCBzdHJpbmdbXT4oJ1NlbGVjdCBkYXRlJyk7XG5cbiAgb3ZlcnJpZGUgcmVhZG9ubHkgcmFuZ2UgPSBzaWduYWwoZmFsc2UpO1xuXG4gIG92ZXJyaWRlIHJlYWRvbmx5IGVuZERhdGUgPSBzaWduYWwobnVsbCk7XG5cbiAgb3ZlcnJpZGUgcmVhZG9ubHkgc3RhcnREYXRlTW9kZWw6IE1vZGVsU2lnbmFsPERhdGUgfCBudWxsPiA9IG1vZGVsPERhdGUgfCBudWxsPihudWxsLCB7XG4gICAgYWxpYXM6ICdkYXRlJ1xuICB9KTtcblxuICBnZXQgZGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydERhdGUoKTtcbiAgfVxuXG4gIG92ZXJyaWRlIHdyaXRlVmFsdWUodmFsdWU6IERhdGUgfCBudWxsKTogdm9pZCB7XG4gICAgdGhpcy5zdGFydERhdGVNb2RlbC5zZXQodmFsdWUpO1xuICAgIHN1cGVyLndyaXRlVmFsdWUodmFsdWUpO1xuICB9XG5cbiAgb3ZlcnJpZGUgc3Vic2NyaWJlRGF0ZUNoYW5nZShzdWJzY3JpYmU6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XG4gICAgaWYgKHN1YnNjcmliZSkge1xuICAgICAgdGhpcy5kYXRlQ2hhbmdlU3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICB0aGlzLnN0YXJ0RGF0ZUNoYW5nZS5zdWJzY3JpYmUoKG5leHQpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5zdGFydERhdGVNb2RlbCgpPy5nZXRUaW1lKCkgIT09IG5leHQ/LmdldFRpbWUoKSkge1xuICAgICAgICAgICAgdGhpcy5zdGFydERhdGVNb2RlbC5zZXQobmV4dCk7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKG5leHQpO1xuICAgICAgICAgICAgdGhpcy5kYXRlQ2hhbmdlLmVtaXQobmV4dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5kYXRlQ2hhbmdlU3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzdWJzY3JpcHRpb24pID0+IHtcbiAgICAgIHN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB9KTtcbiAgfVxufVxuIiwiPGZpZWxkc2V0IFtmb3JtR3JvdXBdPVwiZGF0ZVJhbmdlR3JvdXBcIj5cbiAgPGMtZHJvcGRvd24gI2Ryb3Bkb3duPVwiY0Ryb3Bkb3duXCIgWyh2aXNpYmxlKV09XCJ2aXNpYmxlXCIgW2F1dG9DbG9zZV09XCInb3V0c2lkZSdcIiBbbmdDbGFzc109XCJkYXRlUGlja2VyQ2xhc3Nlc1wiXG4gICAgICAgICAgICAgIFtwb3BwZXJPcHRpb25zXT1cInBvcHBlcmpzT3B0aW9ucygpXCIgY2xhc3M9XCJkYXRlLXBpY2tlciBwaWNrZXJcIj5cbiAgICA8ZGl2IFtjYXJldF09XCJmYWxzZVwiXG4gICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQoKSA/PyBkcm9wZG93bi52aXNpYmxlXCJcbiAgICAgICAgIGNEcm9wZG93blRvZ2dsZVxuICAgICAgICAgY2xhc3M9XCJkYXRlLXBpY2tlci1pbnB1dC1ncm91cFwiXG4gICAgPlxuICAgICAgPGlucHV0ICNzdGFydERhdGVFbGVtZW50UmVmXG4gICAgICAgICAgICAgKGNoYW5nZSk9XCJoYW5kbGVTdGFydERhdGVJbnB1dENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJkaXNhYmxlZCgpID8gLTEgOiAwXCJcbiAgICAgICAgICAgICBbbmdDbGFzc109XCJ7aG92ZXI6ICEhaW5wdXRTdGFydEhvdmVyVmFsdWUoKX1cIlxuICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJzdGFydERhdGVQbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgW3JlYWRvbmx5XT1cImlucHV0UmVhZE9ubHkoKSA/PyBudWxsXCJcbiAgICAgICAgICAgICBbdmFsaWRdPVwicmFuZ2UoKSA/IHVuZGVmaW5lZCA6IHZhbGlkKClcIlxuICAgICAgICAgICAgIGNGb3JtQ29udHJvbFxuICAgICAgICAgICAgIGNsYXNzPVwiZGF0ZS1waWNrZXItaW5wdXRcIlxuICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInN0YXJ0RGF0ZUlucHV0XCJcbiAgICAgICAgICAgICBwYXR0ZXJuPVwiWzEtOV0qXCJcbiAgICAgID5cbiAgICAgIEBpZiAocmFuZ2UoKSAmJiBzZXBhcmF0b3IoKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1waWNrZXItc2VwYXJhdG9yXCI+PC9kaXY+XG4gICAgICB9XG4gICAgICBAaWYgKHJhbmdlKCkpIHtcbiAgICAgICAgPGlucHV0ICNlbmREYXRlRWxlbWVudFJlZlxuICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJoYW5kbGVFbmREYXRlSW5wdXRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJkaXNhYmxlZCgpID8gLTEgOiAwXCJcbiAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntob3ZlcjogISFpbnB1dEVuZEhvdmVyVmFsdWUoKX1cIlxuICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImVuZERhdGVQbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiaW5wdXRSZWFkT25seSgpID8/IG51bGxcIlxuICAgICAgICAgICAgICAgW3ZhbGlkXT1cInZhbGlkKCkgPz8gdW5kZWZpbmVkXCJcbiAgICAgICAgICAgICAgIGNGb3JtQ29udHJvbFxuICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRlLXBpY2tlci1pbnB1dFwiXG4gICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJlbmREYXRlSW5wdXRcIlxuICAgICAgICAgICAgICAgcGF0dGVybj1cIlsxLTldKlwiXG4gICAgICAgID5cbiAgICAgIH1cbiAgICAgIEBpZiAoaW5kaWNhdG9yKCkpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImRhdGUtcGlja2VyLWluZGljYXRvclwiPjwvZGl2PlxuICAgICAgfVxuICAgICAgQGlmIChjbGVhbmVyKCkgJiYgc3RhcnREYXRlRWxlbWVudFJlZi52YWx1ZSAmJiAhZGlzYWJsZWQoKSkge1xuICAgICAgICA8ZGl2IChjbGljayk9XCIhZGlzYWJsZWQoKSAmJiBoYW5kbGVDbGVhcigkZXZlbnQpXCIgY2xhc3M9XCJkYXRlLXBpY2tlci1jbGVhbmVyXCIgcm9sZT1cImJ1dHRvblwiPjwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICAgIDxkaXYgY0Ryb3Bkb3duTWVudSBjbGFzcz1cImRhdGUtcGlja2VyLWRyb3Bkb3duIHB5LTBcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkYXRlLXBpY2tlci1ib2R5XCI+XG4gICAgICAgIEBpZiAoIXNob3dSYW5nZXMpIHtcbiAgICAgICAgICBAaWYgKHJhbmdlcygpICYmIGN1c3RvbVJhbmdlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1waWNrZXItcmFuZ2VzXCI+XG4gICAgICAgICAgICAgIEBmb3IgKGN1c3RvbVJhbmdlIG9mIGN1c3RvbVJhbmdlczsgdHJhY2sgY3VzdG9tUmFuZ2UpIHtcbiAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJzZXRDdXN0b21SYW5nZShjdXN0b21SYW5nZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cInJhbmdlc0J1dHRvbnNDb2xvcigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzaXplXT1cInJhbmdlc0J1dHRvbnNTaXplKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhcmlhbnRdPVwicmFuZ2VzQnV0dG9uc1ZhcmlhbnQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjQnV0dG9uPlxuICAgICAgICAgICAgICAgICAge3sgY3VzdG9tUmFuZ2UgfCBjdXN0b21SYW5nZUtleSB9fVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgPGMtY2FsZW5kYXJcbiAgICAgICAgICAoY2FsZW5kYXJDZWxsSG92ZXIpPVwiaGFuZGxlQ2FsZW5kYXJDZWxsSG92ZXIoJGV2ZW50KVwiXG4gICAgICAgICAgKGNhbGVuZGFyRGF0ZUNoYW5nZSk9XCJoYW5kbGVDYWxlbmRhckRhdGVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgKGVuZERhdGVDaGFuZ2UpPVwiaGFuZGxlRW5kRGF0ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAoc3RhcnREYXRlQ2hhbmdlKT1cImhhbmRsZVN0YXJ0RGF0ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICBbY2FsZW5kYXJEYXRlXT1cImNhbGVuZGFyRGF0ZVwiXG4gICAgICAgICAgW2NhbGVuZGFyc109XCJpc01vYmlsZSA/IDEgOiBjYWxlbmRhcnMoKVwiXG4gICAgICAgICAgW2RhdGVGaWx0ZXJdPVwiZGF0ZUZpbHRlcigpXCJcbiAgICAgICAgICBbZGF5Rm9ybWF0XT1cImRheUZvcm1hdCgpXCJcbiAgICAgICAgICBbZGlzYWJsZWREYXRlc109XCJkaXNhYmxlZERhdGVzKClcIlxuICAgICAgICAgIFtlbmREYXRlXT1cImVuZERhdGUoKVwiXG4gICAgICAgICAgW2ZpcnN0RGF5T2ZXZWVrXT1cImZpcnN0RGF5T2ZXZWVrKClcIlxuICAgICAgICAgIFtsb2NhbGVdPVwibG9jYWxlKClcIlxuICAgICAgICAgIFttYXhEYXRlXT1cIm1heERhdGUoKVwiXG4gICAgICAgICAgW21pbkRhdGVdPVwibWluRGF0ZSgpXCJcbiAgICAgICAgICBbbmF2WWVhckZpcnN0XT1cIm5hdlllYXJGaXJzdCgpXCJcbiAgICAgICAgICBbbmF2aWdhdGlvbl09XCJuYXZpZ2F0aW9uKClcIlxuICAgICAgICAgIFtyYW5nZV09XCJyYW5nZSgpXCJcbiAgICAgICAgICBbc2VsZWN0QWRqYWNlbnREYXlzXT1cInNlbGVjdEFkamFjZW50RGF5cygpXCJcbiAgICAgICAgICBbc2VsZWN0aW9uVHlwZV09XCJzZWxlY3Rpb25UeXBlKClcIlxuICAgICAgICAgIFtzaG93QWRqYWNlbnREYXlzXT1cInNob3dBZGphY2VudERheXMoKVwiXG4gICAgICAgICAgW3Nob3dXZWVrTnVtYmVyXT1cInNob3dXZWVrTnVtYmVyKClcIlxuICAgICAgICAgIFtzdGFydERhdGVdPVwic3RhcnREYXRlKClcIlxuICAgICAgICAgIFt3ZWVrTnVtYmVyc0xhYmVsXT1cIndlZWtOdW1iZXJzTGFiZWwoKVwiXG4gICAgICAgICAgW3dlZWtkYXlGb3JtYXRdPVwid2Vla2RheUZvcm1hdCgpXCJcbiAgICAgICAgICBjbGFzcz1cImRhdGUtcGlja2VyLWNhbGVuZGFyc1wiXG4gICAgICAgIC8+XG4gICAgICAgIEBpZiAoZmFsc2UgJiYgdGltZXBpY2tlcikge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlLXBpY2tlci10aW1lcGlja2Vyc1wiPlxuICAgICAgICAgICAgPCEtLSB0b2RvLS0+XG4gICAgICAgICAgICA8Yy10aW1lLXBpY2tlclxuICAgICAgICAgICAgICB2YXJpYW50PVwic2VsZWN0XCJcbiAgICAgICAgICAgICAgW2xvY2FsZV09XCJsb2NhbGUoKVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhc3RhcnREYXRlKClcIlxuICAgICAgICAgICAgICBbdGltZV09XCJzdGFydERhdGUoKSA/PyB1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAodGltZUNoYW5nZSk9XCJoYW5kbGVTdGFydFRpbWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgQGlmIChyYW5nZSgpKSB7XG4gICAgICAgICAgICAgIDxjLXRpbWUtcGlja2VyXG4gICAgICAgICAgICAgICAgdmFyaWFudD1cInNlbGVjdFwiXG4gICAgICAgICAgICAgICAgW2xvY2FsZV09XCJsb2NhbGUoKVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFlbmREYXRlKClcIlxuICAgICAgICAgICAgICAgIFt0aW1lXT1cImVuZERhdGUoKSA/PyB1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgICh0aW1lQ2hhbmdlKT1cImhhbmRsZUVuZFRpbWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgICAgQGxldCBmb290ZXIgPSB0ZW1wbGF0ZXMoKT8uWydkYXRlUGlja2VyRm9vdGVyJ107XG4gICAgICBAaWYgKGZvb3Rlcikge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1waWNrZXItZm9vdGVyXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZvb3RlcjsgY29udGV4dDogeyRpbXBsaWNpdDogZHJvcGRvd259XCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gICAgPG5nLWNvbnRlbnQgLz5cbiAgPC9jLWRyb3Bkb3duPlxuPC9maWVsZHNldD5cbiJdfQ==