@annalib/anna-core 20.2.73 → 20.2.75

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 (78) hide show
  1. package/esm2022/lib/anna-core-shared-lib/components/anna-buyer-approval-icon-template/anna-buyer-approval-icon-template.component.mjs +5 -7
  2. package/esm2022/lib/anna-core-shared-lib/components/anna-deleted-order-icon-template/anna-deleted-order-icon-template.component.mjs +4 -6
  3. package/esm2022/lib/anna-core-shared-lib/components/anna-icon-column/anna-icon-column.component.mjs +16 -13
  4. package/esm2022/lib/anna-core-shared-lib/components/anna-live-icon-template/anna-live-icon-template.component.mjs +5 -7
  5. package/esm2022/lib/anna-core-shared-lib/components/anna-no-data/anna-no-data.component.mjs +1 -1
  6. package/esm2022/lib/anna-core-shared-lib/components/anna-notify-icon-template/anna-notify-icon-template.component.mjs +4 -6
  7. package/esm2022/lib/anna-core-shared-lib/components/anna-pay-for-performance-icon-template/anna-pay-for-performance-icon-template.component.mjs +5 -7
  8. package/esm2022/lib/anna-core-shared-lib/components/anna-rejected-icon-template/anna-rejected-icon-template.component.mjs +5 -7
  9. package/esm2022/lib/anna-core-shared-lib/directives/digits-only/digits-only.directive.mjs +27 -34
  10. package/esm2022/lib/anna-core-shared-lib/directives/fixed-rows-popup-table/fixed-rows-popup-table.directive.mjs +5 -5
  11. package/esm2022/lib/anna-core-shared-lib/directives/show-ellipsis-text/show-ellipsis-text.directive.mjs +17 -15
  12. package/esm2022/lib/anna-core-shared-lib/models/anna-global-dropdown-config.model.mjs +1 -1
  13. package/esm2022/lib/anna-core-shared-lib/models/anna-non-editable-gt-models.mjs +1 -1
  14. package/esm2022/lib/anna-core-shared-lib/models/anna-tooltip.model.mjs +2 -2
  15. package/esm2022/lib/anna-core-shared-lib/pipes/annaConvertArrayToCommaSeperatedValue.pipe.mjs +3 -3
  16. package/esm2022/lib/anna-core-shared-lib/pipes/annaDateFormatter.pipe.mjs +3 -4
  17. package/esm2022/lib/anna-core-shared-lib/pipes/annaFilterSearchedText.pipe.mjs +17 -19
  18. package/esm2022/lib/anna-core-shared-lib/pipes/annaReplaceChar.pipe.mjs +2 -1
  19. package/esm2022/lib/anna-core-shared-lib/services/anna-date-time-format.service.mjs +102 -81
  20. package/esm2022/lib/anna-core-shared-lib/services/anna-filter.service.mjs +381 -376
  21. package/esm2022/lib/anna-core-shared-lib/services/anna-generic-table.service.mjs +29 -31
  22. package/esm2022/lib/anna-core-shared-lib/services/anna-global-config.service.mjs +1 -1
  23. package/esm2022/lib/anna-core-shared-lib/services/anna-number-format.service.mjs +21 -15
  24. package/esm2022/lib/anna-core-shared-lib/services/anna-persisting-filter.service.mjs +6 -7
  25. package/esm2022/lib/anna-core-shared-lib/services/anna-sort.service.mjs +41 -43
  26. package/esm2022/lib/anna-core.module.mjs +28 -47
  27. package/esm2022/lib/anna-dropdown-lib/components/anna-calendar-filter/anna-calendar-filter.component.mjs +19 -19
  28. package/esm2022/lib/anna-dropdown-lib/components/anna-week-calendar-filter/anna-week-calendar-filter.component.mjs +76 -88
  29. package/esm2022/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-checkbox-filter/anna-column-checkbox-filter.component.mjs +40 -36
  30. package/esm2022/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-date-range-filter/anna-column-date-range-filter.component.mjs +14 -13
  31. package/esm2022/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-slider-filter/anna-column-slider-filter.component.mjs +23 -23
  32. package/esm2022/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-time-filter/anna-column-time-filter.component.mjs +31 -34
  33. package/esm2022/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.mjs +108 -101
  34. package/esm2022/lib/anna-generic-table-lib/components/anna-sort/anna-sort.component.mjs +13 -9
  35. package/esm2022/public-api.mjs +27 -30
  36. package/fesm2022/annalib-anna-core.mjs +2842 -3565
  37. package/fesm2022/annalib-anna-core.mjs.map +1 -1
  38. package/lib/anna-core-shared-lib/components/anna-buyer-approval-icon-template/anna-buyer-approval-icon-template.component.d.ts +2 -5
  39. package/lib/anna-core-shared-lib/components/anna-deleted-order-icon-template/anna-deleted-order-icon-template.component.d.ts +2 -5
  40. package/lib/anna-core-shared-lib/components/anna-icon-column/anna-icon-column.component.d.ts +4 -6
  41. package/lib/anna-core-shared-lib/components/anna-live-icon-template/anna-live-icon-template.component.d.ts +2 -5
  42. package/lib/anna-core-shared-lib/components/anna-notify-icon-template/anna-notify-icon-template.component.d.ts +2 -5
  43. package/lib/anna-core-shared-lib/components/anna-pay-for-performance-icon-template/anna-pay-for-performance-icon-template.component.d.ts +2 -5
  44. package/lib/anna-core-shared-lib/components/anna-rejected-icon-template/anna-rejected-icon-template.component.d.ts +2 -5
  45. package/lib/anna-core-shared-lib/directives/digits-only/digits-only.directive.d.ts +1 -1
  46. package/lib/anna-core-shared-lib/directives/fixed-rows-popup-table/fixed-rows-popup-table.directive.d.ts +3 -3
  47. package/lib/anna-core-shared-lib/directives/show-ellipsis-text/show-ellipsis-text.directive.d.ts +3 -3
  48. package/lib/anna-core-shared-lib/models/anna-non-editable-gt-models.d.ts +1 -1
  49. package/lib/anna-core-shared-lib/models/anna-tooltip.model.d.ts +1 -1
  50. package/lib/anna-core-shared-lib/pipes/annaDateFormatter.pipe.d.ts +0 -1
  51. package/lib/anna-core-shared-lib/services/anna-date-time-format.service.d.ts +3 -1
  52. package/lib/anna-core-shared-lib/services/anna-filter.service.d.ts +4 -4
  53. package/lib/anna-core-shared-lib/services/anna-global-config.service.d.ts +2 -2
  54. package/lib/anna-core-shared-lib/services/anna-persisting-filter.service.d.ts +0 -1
  55. package/lib/anna-core.module.d.ts +12 -15
  56. package/lib/anna-dropdown-lib/components/anna-calendar-filter/anna-calendar-filter.component.d.ts +1 -1
  57. package/lib/anna-dropdown-lib/components/anna-week-calendar-filter/anna-week-calendar-filter.component.d.ts +2 -2
  58. package/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-checkbox-filter/anna-column-checkbox-filter.component.d.ts +4 -4
  59. package/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-date-range-filter/anna-column-date-range-filter.component.d.ts +3 -3
  60. package/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-slider-filter/anna-column-slider-filter.component.d.ts +4 -4
  61. package/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-time-filter/anna-column-time-filter.component.d.ts +4 -4
  62. package/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.d.ts +9 -9
  63. package/lib/anna-generic-table-lib/components/anna-sort/anna-sort.component.d.ts +2 -2
  64. package/package.json +1 -1
  65. package/public-api.d.ts +14 -17
  66. package/src/lib/anna-common-scss/_filters.scss +12 -0
  67. package/src/lib/anna-common-scss/_show-hide-total-row.scss +1 -1
  68. package/esm2022/lib/anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component.mjs +0 -352
  69. package/esm2022/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/anna-fixed-row-size-table-virtual-scroll-strategy.directive.mjs +0 -204
  70. package/esm2022/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/index.mjs +0 -2
  71. package/esm2022/lib/anna-generic-table-lib/directives/anna-virtual-table/anna-virtual-table.directive.mjs +0 -180
  72. package/esm2022/lib/anna-generic-table-lib/directives/anna-virtual-table/index.mjs +0 -2
  73. package/lib/anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component.d.ts +0 -141
  74. package/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/anna-fixed-row-size-table-virtual-scroll-strategy.directive.d.ts +0 -89
  75. package/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/index.d.ts +0 -1
  76. package/lib/anna-generic-table-lib/directives/anna-virtual-table/anna-virtual-table.directive.d.ts +0 -45
  77. package/lib/anna-generic-table-lib/directives/anna-virtual-table/index.d.ts +0 -1
  78. package/src/lib/anna-common-scss/_drag-and-drop.scss +0 -22
@@ -1,12 +1,12 @@
1
1
  // Angular import statements
2
- import { DatePipe, NgIf, NgClass } from "@angular/common";
2
+ import { DatePipe, NgClass, NgIf } from "@angular/common";
3
3
  import { Component, EventEmitter, Input, Output } from "@angular/core";
4
+ import { FormsModule } from "@angular/forms";
4
5
  // Third party import statements
5
- import { NgbCalendar, NgbDate, NgbDatepickerConfig, NgbInputDatepicker, NgbDatepicker, } from "@ng-bootstrap/ng-bootstrap";
6
+ import { NgbCalendar, NgbDate, NgbDatepicker, NgbDatepickerConfig, NgbInputDatepicker, } from "@ng-bootstrap/ng-bootstrap";
6
7
  import dayjs from "dayjs";
7
8
  import { AnnaDateTimeFormatService } from "../../../anna-core-shared-lib/services/anna-date-time-format.service";
8
9
  import { AnnaGlobalConfigService } from "../../../anna-core-shared-lib/services/anna-global-config.service";
9
- import { FormsModule } from "@angular/forms";
10
10
  import * as i0 from "@angular/core";
11
11
  import * as i1 from "@ng-bootstrap/ng-bootstrap";
12
12
  import * as i2 from "../../../anna-core-shared-lib/services/anna-date-time-format.service";
@@ -15,12 +15,14 @@ import * as i4 from "@angular/forms";
15
15
  // User defined import statements
16
16
  export class AnnaWeekCalendarComponent {
17
17
  ngOnChanges(changes) {
18
- //if some values are not sent, setting the default values
19
- this._defaultValues = this.globalConfigService.defaultWeekCalendarConfig;
20
- this.config = { ...this._defaultValues, ...this.config };
18
+ // if some values are not sent, setting the default values
19
+ this.defaultValues = this.globalConfigService.defaultWeekCalendarConfig;
20
+ this.config = { ...this.defaultValues, ...this.config };
21
21
  if (this.config.selectCurrentWeek) {
22
22
  this.initializeWeekData();
23
- this.fromDate && this.selectWeek(this.fromDate);
23
+ if (this.fromDate) {
24
+ this.selectWeek(this.fromDate);
25
+ }
24
26
  }
25
27
  this.formatter = this.formattedDates();
26
28
  if (this.selectedFromDate && this.selectedEndDate && this.config) {
@@ -32,9 +34,7 @@ export class AnnaWeekCalendarComponent {
32
34
  this.setCalendarMap();
33
35
  }
34
36
  if (this.disabledDates.length > 0) {
35
- this.disabledFunc = (date, current) => {
36
- return this.checkIfDateIsDisabled(date);
37
- };
37
+ this.disabledFunc = (date, current) => this.checkIfDateIsDisabled(date);
38
38
  }
39
39
  }
40
40
  constructor(calendar, datePickerConfig, annaDateTimeFormatService, globalConfigService) {
@@ -59,23 +59,22 @@ export class AnnaWeekCalendarComponent {
59
59
  const weekDay = yearStartDate.day();
60
60
  const noOfDays = weekStartDate.diff(yearStartDate, "d") + 1;
61
61
  function convertNgbDateToMoment(ngbDate) {
62
- let formatType = "MM/DD/YYYY";
63
62
  let converted = null;
64
63
  if (ngbDate && ngbDate.month && ngbDate.day && ngbDate.year) {
65
- converted = ngbDate.month + "/" + ngbDate.day + "/" + ngbDate.year;
66
- converted = dayjs(converted).format(formatType);
64
+ converted = `${ngbDate.month}/${ngbDate.day}/${ngbDate.year}`;
65
+ converted = dayjs(converted).format("MM/DD/YYYY");
67
66
  }
68
67
  return converted;
69
68
  }
70
69
  function checkIfYearIsBroadcastLeapYear() {
71
- let isLeapYear = (weekYear % 4 == 0 && weekYear % 100 != 0) || weekYear % 400 == 0;
72
- return (isLeapYear && (weekDay == 0 || weekDay == 6)) || (!isLeapYear && weekDay == 0);
70
+ const isLeapYear = (weekYear % 4 === 0 && weekYear % 100 !== 0) || weekYear % 400 === 0;
71
+ return (isLeapYear && (weekDay === 0 || weekDay === 6)) || (!isLeapYear && weekDay === 0);
73
72
  }
74
73
  const isLeapYear = checkIfYearIsBroadcastLeapYear();
75
74
  const divider = isLeapYear ? 53 : 52;
76
75
  const adder = isLeapYear ? 2 : 1;
77
- let broadcastNumberOfDays = weekDay + noOfDays;
78
- let broadcastWeekNumber = broadcastNumberOfDays % 7 > 0 ? broadcastNumberOfDays / 7 + adder : broadcastNumberOfDays / 7;
76
+ const broadcastNumberOfDays = weekDay + noOfDays;
77
+ const broadcastWeekNumber = broadcastNumberOfDays % 7 > 0 ? broadcastNumberOfDays / 7 + adder : broadcastNumberOfDays / 7;
79
78
  if (Math.floor(broadcastWeekNumber % divider) === 0) {
80
79
  return divider;
81
80
  }
@@ -94,16 +93,16 @@ export class AnnaWeekCalendarComponent {
94
93
  this.weekObjects = [];
95
94
  this.fromDate = this.calendar.getToday();
96
95
  this.today = this.calendar.getToday();
97
- let backDatedPeriod = JSON.parse(localStorage.getItem("userDetails") || "{}").locking_period_days;
96
+ const backDatedPeriod = JSON.parse(localStorage.getItem("userDetails") || "{}").locking_period_days;
98
97
  if (backDatedPeriod < 0) {
99
- let date = this.calendar.getPrev(this.calendar.getToday(), "d", Math.abs(backDatedPeriod));
98
+ const date = this.calendar.getPrev(this.calendar.getToday(), "d", Math.abs(backDatedPeriod));
100
99
  this.today = NgbDate.from(date);
101
100
  this.fromDate = NgbDate.from(date);
102
101
  }
103
102
  // Disable months before numberOfMonthsToEnable
104
103
  this.datePickerConfig.markDisabled = (date) => {
105
- let previousMonth = this.calendar.getPrev(this.today, "m", this.config.numberOfMonthsToEnableInPast);
106
- let previousDay = this.calendar.getPrev(previousMonth, "d", 1);
104
+ const previousMonth = this.calendar.getPrev(this.today, "m", this.config.numberOfMonthsToEnableInPast);
105
+ const previousDay = this.calendar.getPrev(previousMonth, "d", 1);
107
106
  return !NgbDate.from(previousDay).before(date);
108
107
  };
109
108
  this.formatter = this.formattedDates();
@@ -114,7 +113,7 @@ export class AnnaWeekCalendarComponent {
114
113
  const dateObject = new Date(date.year, date.month - 1, date.day);
115
114
  let constructDate = this.buildDate(dateObject);
116
115
  if (!this.config.selectMultipleWeeks) {
117
- //Single week selection
116
+ // Single week selection
118
117
  this.fromDate = this.constructStartDate(dateObject)(constructDate);
119
118
  this.toDate = this.constructEndDate(dateObject)(constructDate);
120
119
  this.weekNumberGenerator();
@@ -130,7 +129,7 @@ export class AnnaWeekCalendarComponent {
130
129
  else if (date.after(this.toDate)) {
131
130
  if (this.flag2) {
132
131
  this.fromDate = this.constructStartDate(dateObject)(constructDate);
133
- //this.toDate = this.constructEndDate(dateObject)(constructDate);
132
+ // this.toDate = this.constructEndDate(dateObject)(constructDate);
134
133
  }
135
134
  this.flag2 = !this.flag2;
136
135
  this.toDate = this.constructEndDate(dateObject)(constructDate);
@@ -140,8 +139,8 @@ export class AnnaWeekCalendarComponent {
140
139
  this.toDate = this.constructEndDate(dateObject)(constructDate);
141
140
  }
142
141
  if (this.disabledDates.length > 0) {
143
- let dayjsStartDate = dayjs(this.annaDateTimeFormatService.convertNgbDateToMoment(this.fromDate), "MM/DD/YYYY");
144
- let dayjsEndDate = dayjs(this.annaDateTimeFormatService.convertNgbDateToMoment(this.toDate), "MM/DD/YYYY");
142
+ const dayjsStartDate = dayjs(this.annaDateTimeFormatService.convertNgbDateToMoment(this.fromDate), "MM/DD/YYYY");
143
+ const dayjsEndDate = dayjs(this.annaDateTimeFormatService.convertNgbDateToMoment(this.toDate), "MM/DD/YYYY");
145
144
  let ngbDate;
146
145
  while (!dayjsStartDate.isSame(dayjsEndDate)) {
147
146
  ngbDate = this.annaDateTimeFormatService.convertToNgbDate(dayjsStartDate, "MM/DD/YYYY");
@@ -150,8 +149,8 @@ export class AnnaWeekCalendarComponent {
150
149
  }
151
150
  dayjsStartDate.add(1, "d");
152
151
  }
153
- let newDateObject = new Date(ngbDate.year, ngbDate.month - 1, ngbDate.day - 1);
154
- let constructDate = this.buildDate(newDateObject);
152
+ const newDateObject = new Date(ngbDate.year, ngbDate.month - 1, ngbDate.day - 1);
153
+ constructDate = this.buildDate(newDateObject);
155
154
  this.toDate = this.constructEndDate(newDateObject)(constructDate);
156
155
  }
157
156
  this.weekNumberGenerator();
@@ -161,17 +160,17 @@ export class AnnaWeekCalendarComponent {
161
160
  }
162
161
  }
163
162
  weekNumberGenerator() {
164
- let dates = [];
163
+ const dates = [];
165
164
  let week = [];
166
165
  let startDate = NgbDate.from(this.fromDate);
167
- let endDate = NgbDate.from(this.toDate);
166
+ const endDate = NgbDate.from(this.toDate);
168
167
  week.push(startDate);
169
168
  while (endDate != null && !startDate.equals(endDate)) {
170
- let date = this.calendar.getNext(startDate, "d", 1);
169
+ const date = this.calendar.getNext(startDate, "d", 1);
171
170
  startDate = date;
172
171
  week.push(date);
173
172
  // Collect all days in week to calculate the week number
174
- if (week.length == 7) {
173
+ if (week.length === 7) {
175
174
  dates.push(week);
176
175
  week = [];
177
176
  }
@@ -182,14 +181,15 @@ export class AnnaWeekCalendarComponent {
182
181
  this.selectedDates(dates);
183
182
  this.weekNumbers = [];
184
183
  this.weekObjects = [];
185
- if (dates.length > 0) {
186
- for (let date of dates) {
187
- this.weekNumbers.push(" Week " + this.calendar.getWeekNumber(date, this.config.firstDayOfWeek));
188
- let dates = this.formatter(date[0], date[6]);
189
- let dateObjects = { startDate: dates.formattedStartDate, endDate: dates.formattedEndDate };
190
- this.weekObjects.push(dateObjects);
191
- }
192
- }
184
+ dates.forEach((date) => {
185
+ this.weekNumbers.push(` Week ${this.calendar.getWeekNumber(date, this.config.firstDayOfWeek)}`);
186
+ const formattedDates = this.formatter(date[0], date[6]);
187
+ const dateObjects = {
188
+ startDate: formattedDates.formattedStartDate,
189
+ endDate: formattedDates.formattedEndDate,
190
+ };
191
+ this.weekObjects.push(dateObjects);
192
+ });
193
193
  this.displayToUI();
194
194
  }
195
195
  selectedDates(dates) {
@@ -197,18 +197,14 @@ export class AnnaWeekCalendarComponent {
197
197
  this.toDate = dates[dates.length - 1][6];
198
198
  }
199
199
  formattedDates() {
200
- let pipe = new DatePipe("en-US");
201
- let thisObj = this;
202
- return function (fromDate, toDate) {
203
- let fromDateObject = new Date(fromDate.year, fromDate.month - 1, fromDate.day);
204
- let toDateObject = new Date(toDate.year, toDate.month - 1, toDate.day);
205
- thisObj.formattedStartDate = pipe.transform(fromDateObject, thisObj.config.dateFormatForRequest);
206
- thisObj.formattedEndDate = pipe.transform(toDateObject, thisObj.config.dateFormatForRequest);
207
- thisObj.dateToDisplay =
208
- pipe.transform(fromDateObject, thisObj.config.dateFormatToDisplay) +
209
- " to " +
210
- pipe.transform(toDateObject, thisObj.config.dateFormatToDisplay);
211
- return thisObj;
200
+ const pipe = new DatePipe("en-US");
201
+ return (fromDate, toDate) => {
202
+ const fromDateObject = new Date(fromDate.year, fromDate.month - 1, fromDate.day);
203
+ const toDateObject = new Date(toDate.year, toDate.month - 1, toDate.day);
204
+ this.formattedStartDate = pipe.transform(fromDateObject, this.config.dateFormatForRequest);
205
+ this.formattedEndDate = pipe.transform(toDateObject, this.config.dateFormatForRequest);
206
+ this.dateToDisplay = `${pipe.transform(fromDateObject, this.config.dateFormatToDisplay)} to ${pipe.transform(toDateObject, this.config.dateFormatToDisplay)}`;
207
+ return this;
212
208
  };
213
209
  }
214
210
  displayToUI() {
@@ -216,38 +212,36 @@ export class AnnaWeekCalendarComponent {
216
212
  // Display for only Single Week
217
213
  this.formatter(this.fromDate, this.toDate);
218
214
  }
219
- else {
215
+ else if (this.weekNumbers.length > (this.config.maxWeeksToShowWithRemainingCount ?? 0)) {
220
216
  // Display for Multiple Weeks
221
- if (this.weekNumbers.length > (this.config.maxWeeksToShowWithRemainingCount ?? 0)) {
222
- let weekDisplay = [];
223
- for (let i = 0; i < (this.config.maxWeeksToShowWithRemainingCount ?? 0); i++) {
224
- weekDisplay.push(this.weekNumbers.shift());
225
- }
226
- let remainingWeeks = this.weekNumbers.length;
227
- this.weekNumbers = [];
228
- this.weekNumbers.push(weekDisplay + " +" + remainingWeeks);
217
+ const weekDisplay = [];
218
+ for (let i = 0; i < (this.config.maxWeeksToShowWithRemainingCount ?? 0); i++) {
219
+ weekDisplay.push(this.weekNumbers.shift());
229
220
  }
221
+ const remainingWeeks = this.weekNumbers.length;
222
+ this.weekNumbers = [];
223
+ this.weekNumbers.push(`${weekDisplay} +${remainingWeeks}`);
230
224
  }
231
225
  }
232
226
  constructStartDate(date) {
233
- let firstDayOfWeek = this.config.firstDayOfWeek;
234
- return function (constructDate) {
235
- let startDay = date.getDay() != 0 ? (firstDayOfWeek ?? 0) - date.getDay() : -6;
227
+ const { firstDayOfWeek } = this.config;
228
+ return (constructDate) => {
229
+ const startDay = date.getDay() !== 0 ? (firstDayOfWeek ?? 0) - date.getDay() : -6;
236
230
  return constructDate(startDay);
237
231
  };
238
232
  }
239
233
  constructEndDate(date) {
240
- let firstDayOfWeek = this.config.firstDayOfWeek;
241
- return function (constructDate) {
242
- let endDay = date.getDay() != 0 ? (firstDayOfWeek ?? 0) + 6 - date.getDay() : 0;
234
+ const { firstDayOfWeek } = this.config;
235
+ return (constructDate) => {
236
+ const endDay = date.getDay() !== 0 ? (firstDayOfWeek ?? 0) + 6 - date.getDay() : 0;
243
237
  return constructDate(endDay);
244
238
  };
245
239
  }
246
240
  buildDate(date) {
247
- return function (number) {
248
- let day = date.getDate() + number;
241
+ return (number) => {
242
+ const day = date.getDate() + number;
249
243
  const dateObject = new Date(date.getFullYear(), date.getMonth(), day);
250
- let ngbDateObject = {};
244
+ const ngbDateObject = {};
251
245
  ngbDateObject.day = day;
252
246
  if (ngbDateObject.day > 31 || ngbDateObject.day < 1) {
253
247
  ngbDateObject.day = dateObject.getDate();
@@ -290,14 +284,14 @@ export class AnnaWeekCalendarComponent {
290
284
  this.applyChanges();
291
285
  }
292
286
  setCalendarMap() {
293
- let dateObj = { fromDate: this.fromDate, toDate: this.toDate };
287
+ const dateObj = { fromDate: this.fromDate, toDate: this.toDate };
294
288
  this.calendarMap.set("oldDates", dateObj);
295
289
  }
296
290
  applyChanges() {
297
291
  this.multiSelectDropdownOpen = false;
298
292
  if (!this.config.emitMultipleWeekObjects) {
299
- let dates = {};
300
- let formattedDates = this.formatter(this.fromDate, this.toDate);
293
+ const dates = {};
294
+ const formattedDates = this.formatter(this.fromDate, this.toDate);
301
295
  dates.startDate = formattedDates.formattedStartDate;
302
296
  dates.endDate = formattedDates.formattedEndDate;
303
297
  this.applyWeekCalendarChanges.emit(dates);
@@ -325,7 +319,7 @@ export class AnnaWeekCalendarComponent {
325
319
  revertDates() {
326
320
  this.multiSelectDropdownOpen = false;
327
321
  if (this.calendarMap.get("oldDates")) {
328
- let dateObj = this.calendarMap.get("oldDates");
322
+ const dateObj = this.calendarMap.get("oldDates");
329
323
  this.fromDate = dateObj.fromDate;
330
324
  this.toDate = dateObj.toDate;
331
325
  this.weekNumberGenerator();
@@ -340,32 +334,26 @@ export class AnnaWeekCalendarComponent {
340
334
  datepickerRef.close();
341
335
  }
342
336
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AnnaWeekCalendarComponent, deps: [{ token: i1.NgbCalendar }, { token: i1.NgbDatepickerConfig }, { token: i2.AnnaDateTimeFormatService }, { token: i3.AnnaGlobalConfigService }], target: i0.ɵɵFactoryTarget.Component }); }
343
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AnnaWeekCalendarComponent, isStandalone: true, selector: "anna-core-week-calendar-filter-lib", inputs: { selectedFromDate: ["from-date", "selectedFromDate"], selectedEndDate: ["to-date", "selectedEndDate"], disabledDates: ["disabled-dates", "disabledDates"], maxDate: "maxDate", minDate: "minDate", config: ["week-calendar-config", "config"] }, outputs: { applyWeekCalendarChanges: "apply", calendarToggled: "toggle-calendar" }, usesOnChanges: true, ngImport: i0, template: "<form\r\n class=\"form-inline\"\r\n *ngIf=\"config.showAsDropdown\"\r\n>\r\n <div class=\"form-group hidden\">\r\n <div class=\"input-group\">\r\n <input\r\n name=\"datepicker\"\r\n class=\"form-control\"\r\n ngbDatepicker\r\n #datepicker=\"ngbDatepicker\"\r\n [autoClose]=\"false\"\r\n (dateSelect)=\"selectWeek($event)\"\r\n (closed)=\"isFocused(false)\"\r\n [displayMonths]=\"1\"\r\n [dayTemplate]=\"t\"\r\n [startDate]=\"fromDate!\"\r\n [firstDayOfWeek]=\"config.firstDayOfWeek\"\r\n [showWeekNumbers]=\"config.showWeekNumbers\"\r\n tabindex=\"-1\"\r\n style=\"display: none\"\r\n [footerTemplate]=\"footerTemplate\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <!--Single week select-->\r\n <div *ngIf=\"!config.selectMultipleWeeks\">\r\n <span style=\"position: relative; left: 30px; font-size: 12px\"> &nbsp;{{ weekNumbers }} </span>\r\n <div class=\"form-group\">\r\n <div class=\"input-group\">\r\n <div class=\"single-week\">\r\n <div class=\"left\">\r\n <span\r\n class=\"material-icons next-round-btn\"\r\n (click)=\"previousWeek()\"\r\n >\r\n navigate_next\r\n </span>\r\n </div>\r\n <input\r\n #dpFromDate\r\n class=\"form-control\"\r\n placeholder=\"Select Weeks\"\r\n [ngClass]=\"[config.customClass == '' ? '' : config.customClass]\"\r\n name=\"dpFromDate\"\r\n [value]=\"dateToDisplay\"\r\n [readonly]=\"true\"\r\n (click)=\"isFocused(true); isDropdownOpenedForCalendar(datepicker)\"\r\n />\r\n <i\r\n class=\"mdi mdi-menu-down\"\r\n *ngIf=\"!datepicker.isOpen()\"\r\n (click)=\"datepicker.open()\"\r\n ></i>\r\n <i\r\n class=\"mdi mdi-menu-up\"\r\n *ngIf=\"datepicker.isOpen()\"\r\n (click)=\"isDropdownOpenedForCalendar(datepicker)\"\r\n ></i>\r\n <div class=\"right\">\r\n <span\r\n class=\"material-icons round-btn\"\r\n (click)=\"nextWeek()\"\r\n >\r\n navigate_next\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!--Multiple week select-->\r\n <div\r\n class=\"form-group\"\r\n *ngIf=\"config.selectMultipleWeeks\"\r\n >\r\n <div class=\"input-group\">\r\n <div class=\"multiple-weeks\">\r\n <input\r\n #dpFromDate\r\n class=\"form-control\"\r\n placeholder=\"Select Weeks\"\r\n [ngClass]=\"[config.customClass == '' ? '' : config.customClass]\"\r\n name=\"dpFromDate\"\r\n [readonly]=\"true\"\r\n [value]=\"weekNumbers\"\r\n (click)=\"isFocused(true); isDropdownOpenedForCalendar(datepicker)\"\r\n />\r\n <i\r\n *ngIf=\"!multiSelectDropdownOpen\"\r\n class=\"mdi mdi-menu-down multiselect-input-arrow\"\r\n ></i>\r\n <i\r\n *ngIf=\"multiSelectDropdownOpen\"\r\n class=\"mdi mdi-menu-up multiselect-input-arrow\"\r\n ></i>\r\n </div>\r\n </div>\r\n </div>\r\n</form>\r\n\r\n<ngb-datepicker\r\n #weekPicker\r\n *ngIf=\"!config.showAsDropdown\"\r\n [displayMonths]=\"1\"\r\n [startDate]=\"fromDate!\"\r\n [firstDayOfWeek]=\"config.firstDayOfWeek\"\r\n [showWeekNumbers]=\"config.showWeekNumbers\"\r\n [dayTemplate]=\"t\"\r\n [maxDate]=\"maxDate\"\r\n [minDate]=\"minDate\"\r\n (dateSelect)=\"selectWeek($event)\"\r\n [markDisabled]=\"disabledFunc\"\r\n>\r\n</ngb-datepicker>\r\n\r\n<ng-template #footerTemplate>\r\n <hr class=\"my-0\" />\r\n <button\r\n class=\"btn btn-primary btn-sm m-2 float-right\"\r\n (click)=\"applyChanges(); closeDatepicker(datepicker)\"\r\n style=\"background-color: #268bff; color: #ffffff\"\r\n >\r\n Apply\r\n </button>\r\n <button\r\n class=\"btn btn-primary btn-sm m-2 float-right\"\r\n (click)=\"revertDates(); closeDatepicker(datepicker)\"\r\n style=\"background-color: rgba(38, 139, 255, 0.12); color: #268bff\"\r\n >\r\n Cancel\r\n </button>\r\n</ng-template>\r\n\r\n<ng-template\r\n #t\r\n let-date\r\n let-focused=\"focused\"\r\n let-disabled=\"disabled\"\r\n>\r\n <span\r\n class=\"custom-day\"\r\n [class.focused]=\"focused\"\r\n [class.range]=\"isRange(date)\"\r\n [class.faded]=\"isHovered(date) || isInside(date)\"\r\n [class.disabled]=\"disabled\"\r\n (mouseenter)=\"hoveredDate = date\"\r\n (mouseleave)=\"hoveredDate = null\"\r\n >\r\n {{ date.day }}\r\n </span>\r\n</ng-template>\r\n\r\n<!--\r\n\r\n<hr>\r\n\r\n<pre>From: {{ fromDate | json }} </pre>\r\n<pre>To: {{ toDate | json }} </pre>\r\n<pre>weekNumbers: {{ weekNumbers | json }} </pre>\r\n\r\n-->\r\n", styles: [":host ::ng-deep .ngb-dp-arrow button:disabled{color:#4a4a4a;background-color:#fff;opacity:.25;cursor:not-allowed}:host ::ng-deep .ngb-dp-arrow button:disabled .ngb-dp-navigation-chevron{color:#4a4a4a}:host ::ng-deep .ngb-dp-arrow button .ngb-dp-navigation-chevron{color:#000}:host::ng-deep .right{width:unset!important;background-color:#fff!important}:host::ng-deep .ngb-dp-day,:host::ng-deep .ngb-dp-weekday{width:3rem!important;font-style:unset!important;color:#8bac2a;outline:none}:host::ng-deep .ngb-dp-day:first-child{border:1px solid black}:host::ng-deep .ngb-dp-day.disabled{color:#d4d4d4;cursor:not-allowed}:host::ng-deep .ngb-dp-showweek:before{content:\"Weeks\";margin-right:5px}:host::ng-deep .ngb-dp-week-number{font-style:unset!important;width:4rem!important;margin-right:5px;font-weight:700;color:#000!important;border-right:1px solid rgba(0,0,0,.125)}:host::ng-deep .ngb-dp-week-number:before{font-style:unset!important;content:\"Week \"}:host::ng-deep .ngb-dp-weekday.ngb-dp-showweek{margin-right:5px;width:4rem!important;border-right:1px solid rgba(0,0,0,.125)}:host::ng-deep .dropdown-menu{box-shadow:none}:host::ng-deep .dropdown-menu.show{top:15px!important}:host::ng-deep .bg-light{background-color:#fff!important}:host::ng-deep .ngb-dp-weekdays{border-top:1px solid rgba(0,0,0,.125)}:host::ng-deep .ngb-dp-arrow-btn:focus{box-shadow:none}.custom-day{text-align:center;padding:.185rem .25rem;display:inline-block;height:1.75rem;font-weight:700;color:#222b45;width:3rem!important}.custom-day.focused{background-color:#fff}.custom-day.faded{background-color:#0275d880!important}.custom-day.faded:focus{outline:none!important}.custom-day:hover{background-color:#268bff1f!important;color:#4a4a4a!important}.custom-day:focus{outline:none!important}.custom-day.range{background-color:#268bff1f!important;color:#4a4a4a!important}.custom-day.range:focus{outline:none!important}.custom-day.disabled{color:#d3d3d3}.input-group>.single-week,.input-group .multiple-weeks{display:inline-flex!important}.input-group>.single-week>.form-control,.input-group .multiple-weeks>.form-control{width:212px;border-radius:2px;border:solid 1px #b3b3b3;height:1.875rem;cursor:pointer}.input-group>.form-control{width:212px;border-radius:2px;border:solid 1px #b3b3b3;height:1.875rem;cursor:pointer}.form-control[readonly]{background-color:#fff!important}.next-round-btn{transform:rotate(180deg);margin-left:.125rem;line-height:1.3;border-radius:50%;cursor:pointer}.round-btn{line-height:1.3;border-radius:50%;cursor:pointer;margin-left:.25rem}:host::ng-deep select.custom-select{background:none;appearance:auto}.left,.right{width:1.875rem!important;height:1.875rem;background:#d8d8d8!important;border-radius:50%}.left{margin-right:.3125rem}.right{margin-left:.3125rem}:host::ng-deep .right .ngb-dp-navigation-chevron,:host::ng-deep .ngb-dp-navigation-chevron{color:#268bff}:host::ng-deep .ngb-dp-arrow-btn:focus{outline-width:0px}.custom-day.faded{background-color:#268bff33!important;color:#000!important;font-weight:600}.custom-day{text-align:center;padding:.185rem .25rem;color:#000;display:inline-block;line-height:1.9;height:2rem;width:2rem}.custom-day.focused{background-color:#e6e6e6}.custom-day.range{background-color:#268bff!important;color:#fff!important;font-weight:600}.custom-day:hover{background-color:#d9e1e6;border-radius:.25rem;color:#bdbdbd}:host::ng-deep div.ngb-dp-weekday{color:#8bac2a;font-family:Roboto;font-size:.8125rem;font-weight:700;font-stretch:normal;font-style:normal;line-height:2.6;letter-spacing:normal}.mdi-menu-up,.mdi-menu-down{position:absolute;right:2.438rem;top:1px;font-size:1.375rem;cursor:pointer}.multiselect-input-arrow{position:absolute;right:.75rem;top:3px;font-size:1.25rem;cursor:pointer;pointer-events:none}button:focus{outline:none;box-shadow:none;border-color:transparent}::ng-deep .ngb-dp-header,::ng-deep .ngb-dp-week{background:#fff!important}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: NgbInputDatepicker, selector: "input[ngbDatepicker]", inputs: ["autoClose", "contentTemplate", "datepickerClass", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "minDate", "maxDate", "navigation", "outsideDays", "placement", "popperOptions", "restoreFocus", "showWeekNumbers", "startDate", "container", "positionTarget", "weekdays", "disabled"], outputs: ["dateSelect", "navigate", "closed"], exportAs: ["ngbDatepicker"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: NgbDatepicker, selector: "ngb-datepicker", inputs: ["contentTemplate", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "maxDate", "minDate", "navigation", "outsideDays", "showWeekNumbers", "startDate", "weekdays"], outputs: ["navigate", "dateSelect"], exportAs: ["ngbDatepicker"] }] }); }
337
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AnnaWeekCalendarComponent, isStandalone: true, selector: "anna-core-week-calendar-filter-lib", inputs: { selectedFromDate: "selectedFromDate", selectedEndDate: "selectedEndDate", disabledDates: "disabledDates", maxDate: "maxDate", minDate: "minDate", config: "config" }, outputs: { applyWeekCalendarChanges: "applyWeekCalendarChanges", calendarToggled: "calendarToggled" }, usesOnChanges: true, ngImport: i0, template: "<form\r\n class=\"form-inline\"\r\n *ngIf=\"config.showAsDropdown\"\r\n>\r\n <div class=\"form-group hidden\">\r\n <div class=\"input-group\">\r\n <input\r\n name=\"datepicker d-none\"\r\n class=\"form-control\"\r\n ngbDatepicker\r\n #datepicker=\"ngbDatepicker\"\r\n [autoClose]=\"false\"\r\n (dateSelect)=\"selectWeek($event)\"\r\n (closed)=\"isFocused(false)\"\r\n [displayMonths]=\"1\"\r\n [dayTemplate]=\"t\"\r\n [startDate]=\"fromDate!\"\r\n [firstDayOfWeek]=\"config.firstDayOfWeek\"\r\n [showWeekNumbers]=\"config.showWeekNumbers\"\r\n tabindex=\"-1\"\r\n [footerTemplate]=\"footerTemplate\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <!--Single week select-->\r\n <div *ngIf=\"!config.selectMultipleWeeks\">\r\n <span class=\"weeknumbers-label\"> &nbsp;{{ weekNumbers }} </span>\r\n <div class=\"form-group\">\r\n <div class=\"input-group\">\r\n <div class=\"single-week\">\r\n <div class=\"left\">\r\n <span\r\n class=\"material-icons next-round-btn\"\r\n (click)=\"previousWeek()\"\r\n >\r\n navigate_next\r\n </span>\r\n </div>\r\n <input\r\n #dpFromDate\r\n class=\"form-control\"\r\n placeholder=\"Select Weeks\"\r\n [ngClass]=\"[config.customClass === '' ? '' : config.customClass]\"\r\n name=\"dpFromDate\"\r\n [value]=\"dateToDisplay\"\r\n [readonly]=\"true\"\r\n (click)=\"isFocused(true); isDropdownOpenedForCalendar(datepicker)\"\r\n />\r\n <i\r\n class=\"mdi mdi-menu-down\"\r\n *ngIf=\"!datepicker.isOpen()\"\r\n (click)=\"datepicker.open()\"\r\n ></i>\r\n <i\r\n class=\"mdi mdi-menu-up\"\r\n *ngIf=\"datepicker.isOpen()\"\r\n (click)=\"isDropdownOpenedForCalendar(datepicker)\"\r\n ></i>\r\n <div class=\"right\">\r\n <span\r\n class=\"material-icons round-btn\"\r\n (click)=\"nextWeek()\"\r\n >\r\n navigate_next\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!--Multiple week select-->\r\n <div\r\n class=\"form-group\"\r\n *ngIf=\"config.selectMultipleWeeks\"\r\n >\r\n <div class=\"input-group\">\r\n <div class=\"multiple-weeks\">\r\n <input\r\n #dpFromDate\r\n class=\"form-control\"\r\n placeholder=\"Select Weeks\"\r\n [ngClass]=\"[config.customClass === '' ? '' : config.customClass]\"\r\n name=\"dpFromDate\"\r\n [readonly]=\"true\"\r\n [value]=\"weekNumbers\"\r\n (click)=\"isFocused(true); isDropdownOpenedForCalendar(datepicker)\"\r\n />\r\n <i\r\n *ngIf=\"!multiSelectDropdownOpen\"\r\n class=\"mdi mdi-menu-down multiselect-input-arrow\"\r\n ></i>\r\n <i\r\n *ngIf=\"multiSelectDropdownOpen\"\r\n class=\"mdi mdi-menu-up multiselect-input-arrow\"\r\n ></i>\r\n </div>\r\n </div>\r\n </div>\r\n</form>\r\n\r\n<ngb-datepicker\r\n #weekPicker\r\n *ngIf=\"!config.showAsDropdown\"\r\n [displayMonths]=\"1\"\r\n [startDate]=\"fromDate!\"\r\n [firstDayOfWeek]=\"config.firstDayOfWeek\"\r\n [showWeekNumbers]=\"config.showWeekNumbers\"\r\n [dayTemplate]=\"t\"\r\n [maxDate]=\"maxDate\"\r\n [minDate]=\"minDate\"\r\n (dateSelect)=\"selectWeek($event)\"\r\n [markDisabled]=\"disabledFunc\"\r\n>\r\n</ngb-datepicker>\r\n\r\n<ng-template #footerTemplate>\r\n <hr class=\"my-0\" />\r\n <button\r\n class=\"btn btn-primary btn-sm m-2 float-right apply-btn\"\r\n (click)=\"applyChanges(); closeDatepicker(datepicker)\"\r\n >\r\n Apply\r\n </button>\r\n <button\r\n class=\"btn btn-primary btn-sm m-2 float-right cancel-btn\"\r\n (click)=\"revertDates(); closeDatepicker(datepicker)\"\r\n >\r\n Cancel\r\n </button>\r\n</ng-template>\r\n\r\n<ng-template\r\n #t\r\n let-date\r\n let-focused=\"focused\"\r\n let-disabled=\"disabled\"\r\n>\r\n <span\r\n class=\"custom-day\"\r\n [class.focused]=\"focused\"\r\n [class.range]=\"isRange(date)\"\r\n [class.faded]=\"isHovered(date) || isInside(date)\"\r\n [class.disabled]=\"disabled\"\r\n (mouseenter)=\"hoveredDate = date\"\r\n (mouseleave)=\"hoveredDate = null\"\r\n >\r\n {{ date.day }}\r\n </span>\r\n</ng-template>\r\n", styles: [":host ::ng-deep .ngb-dp-arrow button:disabled{color:#4a4a4a;background-color:#fff;opacity:.25;cursor:not-allowed}:host ::ng-deep .ngb-dp-arrow button:disabled .ngb-dp-navigation-chevron{color:#4a4a4a}:host ::ng-deep .ngb-dp-arrow button .ngb-dp-navigation-chevron{color:#000}:host::ng-deep .right{width:unset!important;background-color:#fff!important}:host::ng-deep .ngb-dp-day,:host::ng-deep .ngb-dp-weekday{width:3rem!important;font-style:unset!important;color:#8bac2a;outline:none}:host::ng-deep .ngb-dp-day:first-child{border:1px solid black}:host::ng-deep .ngb-dp-day.disabled{color:#d4d4d4;cursor:not-allowed}:host::ng-deep .ngb-dp-showweek:before{content:\"Weeks\";margin-right:5px}:host::ng-deep .ngb-dp-week-number{font-style:unset!important;width:4rem!important;margin-right:5px;font-weight:700;color:#000!important;border-right:1px solid rgba(0,0,0,.125)}:host::ng-deep .ngb-dp-week-number:before{font-style:unset!important;content:\"Week \"}:host::ng-deep .ngb-dp-weekday.ngb-dp-showweek{margin-right:5px;width:4rem!important;border-right:1px solid rgba(0,0,0,.125)}:host::ng-deep .dropdown-menu{box-shadow:none}:host::ng-deep .dropdown-menu.show{top:15px!important}:host::ng-deep .bg-light{background-color:#fff!important}:host::ng-deep .ngb-dp-weekdays{border-top:1px solid rgba(0,0,0,.125)}:host::ng-deep .ngb-dp-arrow-btn:focus{box-shadow:none}.custom-day{text-align:center;padding:.185rem .25rem;display:inline-block;height:1.75rem;font-weight:700;color:#222b45;width:3rem!important}.custom-day.focused{background-color:#fff}.custom-day.faded{background-color:#0275d880!important}.custom-day.faded:focus{outline:none!important}.custom-day:hover{background-color:#268bff1f!important;color:#4a4a4a!important}.custom-day:focus{outline:none!important}.custom-day.range{background-color:#268bff1f!important;color:#4a4a4a!important}.custom-day.range:focus{outline:none!important}.custom-day.disabled{color:#d3d3d3}.input-group>.single-week,.input-group .multiple-weeks{display:inline-flex!important}.input-group>.single-week>.form-control,.input-group .multiple-weeks>.form-control{width:212px;border-radius:2px;border:solid 1px #b3b3b3;height:1.875rem;cursor:pointer}.input-group>.form-control{width:212px;border-radius:2px;border:solid 1px #b3b3b3;height:1.875rem;cursor:pointer}.form-control[readonly]{background-color:#fff!important}.next-round-btn{transform:rotate(180deg);margin-left:.125rem;line-height:1.3;border-radius:50%;cursor:pointer}.round-btn{line-height:1.3;border-radius:50%;cursor:pointer;margin-left:.25rem}:host::ng-deep select.custom-select{background:none;appearance:auto}.left,.right{width:1.875rem!important;height:1.875rem;background:#d8d8d8!important;border-radius:50%}.left{margin-right:.3125rem}.right{margin-left:.3125rem}:host::ng-deep .right .ngb-dp-navigation-chevron,:host::ng-deep .ngb-dp-navigation-chevron{color:#268bff}:host::ng-deep .ngb-dp-arrow-btn:focus{outline-width:0px}.custom-day.faded{background-color:#268bff33!important;color:#000!important;font-weight:600}.custom-day{text-align:center;padding:.185rem .25rem;color:#000;display:inline-block;line-height:1.9;height:2rem;width:2rem}.custom-day.focused{background-color:#e6e6e6}.custom-day.range{background-color:#268bff!important;color:#fff!important;font-weight:600}.custom-day:hover{background-color:#d9e1e6;border-radius:.25rem;color:#bdbdbd}:host::ng-deep div.ngb-dp-weekday{color:#8bac2a;font-family:Roboto;font-size:.8125rem;font-weight:700;font-stretch:normal;font-style:normal;line-height:2.6;letter-spacing:normal}.mdi-menu-up,.mdi-menu-down{position:absolute;right:2.438rem;top:1px;font-size:1.375rem;cursor:pointer}.multiselect-input-arrow{position:absolute;right:.75rem;top:3px;font-size:1.25rem;cursor:pointer;pointer-events:none}button:focus{outline:none;box-shadow:none;border-color:transparent}::ng-deep .ngb-dp-header,::ng-deep .ngb-dp-week{background:#fff!important}.weeknumbers-label{position:relative;left:30px;font-size:12px}.apply-btn{background-color:#268bff;color:#fff}.cancel-btn{background-color:#268bff1f;color:#268bff}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: NgbInputDatepicker, selector: "input[ngbDatepicker]", inputs: ["autoClose", "contentTemplate", "datepickerClass", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "minDate", "maxDate", "navigation", "outsideDays", "placement", "popperOptions", "restoreFocus", "showWeekNumbers", "startDate", "container", "positionTarget", "weekdays", "disabled"], outputs: ["dateSelect", "navigate", "closed"], exportAs: ["ngbDatepicker"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: NgbDatepicker, selector: "ngb-datepicker", inputs: ["contentTemplate", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "maxDate", "minDate", "navigation", "outsideDays", "showWeekNumbers", "startDate", "weekdays"], outputs: ["navigate", "dateSelect"], exportAs: ["ngbDatepicker"] }] }); }
344
338
  }
345
339
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AnnaWeekCalendarComponent, decorators: [{
346
340
  type: Component,
347
- args: [{ selector: "anna-core-week-calendar-filter-lib", standalone: true, imports: [NgIf, FormsModule, NgbInputDatepicker, NgClass, NgbDatepicker], template: "<form\r\n class=\"form-inline\"\r\n *ngIf=\"config.showAsDropdown\"\r\n>\r\n <div class=\"form-group hidden\">\r\n <div class=\"input-group\">\r\n <input\r\n name=\"datepicker\"\r\n class=\"form-control\"\r\n ngbDatepicker\r\n #datepicker=\"ngbDatepicker\"\r\n [autoClose]=\"false\"\r\n (dateSelect)=\"selectWeek($event)\"\r\n (closed)=\"isFocused(false)\"\r\n [displayMonths]=\"1\"\r\n [dayTemplate]=\"t\"\r\n [startDate]=\"fromDate!\"\r\n [firstDayOfWeek]=\"config.firstDayOfWeek\"\r\n [showWeekNumbers]=\"config.showWeekNumbers\"\r\n tabindex=\"-1\"\r\n style=\"display: none\"\r\n [footerTemplate]=\"footerTemplate\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <!--Single week select-->\r\n <div *ngIf=\"!config.selectMultipleWeeks\">\r\n <span style=\"position: relative; left: 30px; font-size: 12px\"> &nbsp;{{ weekNumbers }} </span>\r\n <div class=\"form-group\">\r\n <div class=\"input-group\">\r\n <div class=\"single-week\">\r\n <div class=\"left\">\r\n <span\r\n class=\"material-icons next-round-btn\"\r\n (click)=\"previousWeek()\"\r\n >\r\n navigate_next\r\n </span>\r\n </div>\r\n <input\r\n #dpFromDate\r\n class=\"form-control\"\r\n placeholder=\"Select Weeks\"\r\n [ngClass]=\"[config.customClass == '' ? '' : config.customClass]\"\r\n name=\"dpFromDate\"\r\n [value]=\"dateToDisplay\"\r\n [readonly]=\"true\"\r\n (click)=\"isFocused(true); isDropdownOpenedForCalendar(datepicker)\"\r\n />\r\n <i\r\n class=\"mdi mdi-menu-down\"\r\n *ngIf=\"!datepicker.isOpen()\"\r\n (click)=\"datepicker.open()\"\r\n ></i>\r\n <i\r\n class=\"mdi mdi-menu-up\"\r\n *ngIf=\"datepicker.isOpen()\"\r\n (click)=\"isDropdownOpenedForCalendar(datepicker)\"\r\n ></i>\r\n <div class=\"right\">\r\n <span\r\n class=\"material-icons round-btn\"\r\n (click)=\"nextWeek()\"\r\n >\r\n navigate_next\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!--Multiple week select-->\r\n <div\r\n class=\"form-group\"\r\n *ngIf=\"config.selectMultipleWeeks\"\r\n >\r\n <div class=\"input-group\">\r\n <div class=\"multiple-weeks\">\r\n <input\r\n #dpFromDate\r\n class=\"form-control\"\r\n placeholder=\"Select Weeks\"\r\n [ngClass]=\"[config.customClass == '' ? '' : config.customClass]\"\r\n name=\"dpFromDate\"\r\n [readonly]=\"true\"\r\n [value]=\"weekNumbers\"\r\n (click)=\"isFocused(true); isDropdownOpenedForCalendar(datepicker)\"\r\n />\r\n <i\r\n *ngIf=\"!multiSelectDropdownOpen\"\r\n class=\"mdi mdi-menu-down multiselect-input-arrow\"\r\n ></i>\r\n <i\r\n *ngIf=\"multiSelectDropdownOpen\"\r\n class=\"mdi mdi-menu-up multiselect-input-arrow\"\r\n ></i>\r\n </div>\r\n </div>\r\n </div>\r\n</form>\r\n\r\n<ngb-datepicker\r\n #weekPicker\r\n *ngIf=\"!config.showAsDropdown\"\r\n [displayMonths]=\"1\"\r\n [startDate]=\"fromDate!\"\r\n [firstDayOfWeek]=\"config.firstDayOfWeek\"\r\n [showWeekNumbers]=\"config.showWeekNumbers\"\r\n [dayTemplate]=\"t\"\r\n [maxDate]=\"maxDate\"\r\n [minDate]=\"minDate\"\r\n (dateSelect)=\"selectWeek($event)\"\r\n [markDisabled]=\"disabledFunc\"\r\n>\r\n</ngb-datepicker>\r\n\r\n<ng-template #footerTemplate>\r\n <hr class=\"my-0\" />\r\n <button\r\n class=\"btn btn-primary btn-sm m-2 float-right\"\r\n (click)=\"applyChanges(); closeDatepicker(datepicker)\"\r\n style=\"background-color: #268bff; color: #ffffff\"\r\n >\r\n Apply\r\n </button>\r\n <button\r\n class=\"btn btn-primary btn-sm m-2 float-right\"\r\n (click)=\"revertDates(); closeDatepicker(datepicker)\"\r\n style=\"background-color: rgba(38, 139, 255, 0.12); color: #268bff\"\r\n >\r\n Cancel\r\n </button>\r\n</ng-template>\r\n\r\n<ng-template\r\n #t\r\n let-date\r\n let-focused=\"focused\"\r\n let-disabled=\"disabled\"\r\n>\r\n <span\r\n class=\"custom-day\"\r\n [class.focused]=\"focused\"\r\n [class.range]=\"isRange(date)\"\r\n [class.faded]=\"isHovered(date) || isInside(date)\"\r\n [class.disabled]=\"disabled\"\r\n (mouseenter)=\"hoveredDate = date\"\r\n (mouseleave)=\"hoveredDate = null\"\r\n >\r\n {{ date.day }}\r\n </span>\r\n</ng-template>\r\n\r\n<!--\r\n\r\n<hr>\r\n\r\n<pre>From: {{ fromDate | json }} </pre>\r\n<pre>To: {{ toDate | json }} </pre>\r\n<pre>weekNumbers: {{ weekNumbers | json }} </pre>\r\n\r\n-->\r\n", styles: [":host ::ng-deep .ngb-dp-arrow button:disabled{color:#4a4a4a;background-color:#fff;opacity:.25;cursor:not-allowed}:host ::ng-deep .ngb-dp-arrow button:disabled .ngb-dp-navigation-chevron{color:#4a4a4a}:host ::ng-deep .ngb-dp-arrow button .ngb-dp-navigation-chevron{color:#000}:host::ng-deep .right{width:unset!important;background-color:#fff!important}:host::ng-deep .ngb-dp-day,:host::ng-deep .ngb-dp-weekday{width:3rem!important;font-style:unset!important;color:#8bac2a;outline:none}:host::ng-deep .ngb-dp-day:first-child{border:1px solid black}:host::ng-deep .ngb-dp-day.disabled{color:#d4d4d4;cursor:not-allowed}:host::ng-deep .ngb-dp-showweek:before{content:\"Weeks\";margin-right:5px}:host::ng-deep .ngb-dp-week-number{font-style:unset!important;width:4rem!important;margin-right:5px;font-weight:700;color:#000!important;border-right:1px solid rgba(0,0,0,.125)}:host::ng-deep .ngb-dp-week-number:before{font-style:unset!important;content:\"Week \"}:host::ng-deep .ngb-dp-weekday.ngb-dp-showweek{margin-right:5px;width:4rem!important;border-right:1px solid rgba(0,0,0,.125)}:host::ng-deep .dropdown-menu{box-shadow:none}:host::ng-deep .dropdown-menu.show{top:15px!important}:host::ng-deep .bg-light{background-color:#fff!important}:host::ng-deep .ngb-dp-weekdays{border-top:1px solid rgba(0,0,0,.125)}:host::ng-deep .ngb-dp-arrow-btn:focus{box-shadow:none}.custom-day{text-align:center;padding:.185rem .25rem;display:inline-block;height:1.75rem;font-weight:700;color:#222b45;width:3rem!important}.custom-day.focused{background-color:#fff}.custom-day.faded{background-color:#0275d880!important}.custom-day.faded:focus{outline:none!important}.custom-day:hover{background-color:#268bff1f!important;color:#4a4a4a!important}.custom-day:focus{outline:none!important}.custom-day.range{background-color:#268bff1f!important;color:#4a4a4a!important}.custom-day.range:focus{outline:none!important}.custom-day.disabled{color:#d3d3d3}.input-group>.single-week,.input-group .multiple-weeks{display:inline-flex!important}.input-group>.single-week>.form-control,.input-group .multiple-weeks>.form-control{width:212px;border-radius:2px;border:solid 1px #b3b3b3;height:1.875rem;cursor:pointer}.input-group>.form-control{width:212px;border-radius:2px;border:solid 1px #b3b3b3;height:1.875rem;cursor:pointer}.form-control[readonly]{background-color:#fff!important}.next-round-btn{transform:rotate(180deg);margin-left:.125rem;line-height:1.3;border-radius:50%;cursor:pointer}.round-btn{line-height:1.3;border-radius:50%;cursor:pointer;margin-left:.25rem}:host::ng-deep select.custom-select{background:none;appearance:auto}.left,.right{width:1.875rem!important;height:1.875rem;background:#d8d8d8!important;border-radius:50%}.left{margin-right:.3125rem}.right{margin-left:.3125rem}:host::ng-deep .right .ngb-dp-navigation-chevron,:host::ng-deep .ngb-dp-navigation-chevron{color:#268bff}:host::ng-deep .ngb-dp-arrow-btn:focus{outline-width:0px}.custom-day.faded{background-color:#268bff33!important;color:#000!important;font-weight:600}.custom-day{text-align:center;padding:.185rem .25rem;color:#000;display:inline-block;line-height:1.9;height:2rem;width:2rem}.custom-day.focused{background-color:#e6e6e6}.custom-day.range{background-color:#268bff!important;color:#fff!important;font-weight:600}.custom-day:hover{background-color:#d9e1e6;border-radius:.25rem;color:#bdbdbd}:host::ng-deep div.ngb-dp-weekday{color:#8bac2a;font-family:Roboto;font-size:.8125rem;font-weight:700;font-stretch:normal;font-style:normal;line-height:2.6;letter-spacing:normal}.mdi-menu-up,.mdi-menu-down{position:absolute;right:2.438rem;top:1px;font-size:1.375rem;cursor:pointer}.multiselect-input-arrow{position:absolute;right:.75rem;top:3px;font-size:1.25rem;cursor:pointer;pointer-events:none}button:focus{outline:none;box-shadow:none;border-color:transparent}::ng-deep .ngb-dp-header,::ng-deep .ngb-dp-week{background:#fff!important}\n"] }]
341
+ args: [{ selector: "anna-core-week-calendar-filter-lib", standalone: true, imports: [NgIf, FormsModule, NgbInputDatepicker, NgClass, NgbDatepicker], template: "<form\r\n class=\"form-inline\"\r\n *ngIf=\"config.showAsDropdown\"\r\n>\r\n <div class=\"form-group hidden\">\r\n <div class=\"input-group\">\r\n <input\r\n name=\"datepicker d-none\"\r\n class=\"form-control\"\r\n ngbDatepicker\r\n #datepicker=\"ngbDatepicker\"\r\n [autoClose]=\"false\"\r\n (dateSelect)=\"selectWeek($event)\"\r\n (closed)=\"isFocused(false)\"\r\n [displayMonths]=\"1\"\r\n [dayTemplate]=\"t\"\r\n [startDate]=\"fromDate!\"\r\n [firstDayOfWeek]=\"config.firstDayOfWeek\"\r\n [showWeekNumbers]=\"config.showWeekNumbers\"\r\n tabindex=\"-1\"\r\n [footerTemplate]=\"footerTemplate\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <!--Single week select-->\r\n <div *ngIf=\"!config.selectMultipleWeeks\">\r\n <span class=\"weeknumbers-label\"> &nbsp;{{ weekNumbers }} </span>\r\n <div class=\"form-group\">\r\n <div class=\"input-group\">\r\n <div class=\"single-week\">\r\n <div class=\"left\">\r\n <span\r\n class=\"material-icons next-round-btn\"\r\n (click)=\"previousWeek()\"\r\n >\r\n navigate_next\r\n </span>\r\n </div>\r\n <input\r\n #dpFromDate\r\n class=\"form-control\"\r\n placeholder=\"Select Weeks\"\r\n [ngClass]=\"[config.customClass === '' ? '' : config.customClass]\"\r\n name=\"dpFromDate\"\r\n [value]=\"dateToDisplay\"\r\n [readonly]=\"true\"\r\n (click)=\"isFocused(true); isDropdownOpenedForCalendar(datepicker)\"\r\n />\r\n <i\r\n class=\"mdi mdi-menu-down\"\r\n *ngIf=\"!datepicker.isOpen()\"\r\n (click)=\"datepicker.open()\"\r\n ></i>\r\n <i\r\n class=\"mdi mdi-menu-up\"\r\n *ngIf=\"datepicker.isOpen()\"\r\n (click)=\"isDropdownOpenedForCalendar(datepicker)\"\r\n ></i>\r\n <div class=\"right\">\r\n <span\r\n class=\"material-icons round-btn\"\r\n (click)=\"nextWeek()\"\r\n >\r\n navigate_next\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!--Multiple week select-->\r\n <div\r\n class=\"form-group\"\r\n *ngIf=\"config.selectMultipleWeeks\"\r\n >\r\n <div class=\"input-group\">\r\n <div class=\"multiple-weeks\">\r\n <input\r\n #dpFromDate\r\n class=\"form-control\"\r\n placeholder=\"Select Weeks\"\r\n [ngClass]=\"[config.customClass === '' ? '' : config.customClass]\"\r\n name=\"dpFromDate\"\r\n [readonly]=\"true\"\r\n [value]=\"weekNumbers\"\r\n (click)=\"isFocused(true); isDropdownOpenedForCalendar(datepicker)\"\r\n />\r\n <i\r\n *ngIf=\"!multiSelectDropdownOpen\"\r\n class=\"mdi mdi-menu-down multiselect-input-arrow\"\r\n ></i>\r\n <i\r\n *ngIf=\"multiSelectDropdownOpen\"\r\n class=\"mdi mdi-menu-up multiselect-input-arrow\"\r\n ></i>\r\n </div>\r\n </div>\r\n </div>\r\n</form>\r\n\r\n<ngb-datepicker\r\n #weekPicker\r\n *ngIf=\"!config.showAsDropdown\"\r\n [displayMonths]=\"1\"\r\n [startDate]=\"fromDate!\"\r\n [firstDayOfWeek]=\"config.firstDayOfWeek\"\r\n [showWeekNumbers]=\"config.showWeekNumbers\"\r\n [dayTemplate]=\"t\"\r\n [maxDate]=\"maxDate\"\r\n [minDate]=\"minDate\"\r\n (dateSelect)=\"selectWeek($event)\"\r\n [markDisabled]=\"disabledFunc\"\r\n>\r\n</ngb-datepicker>\r\n\r\n<ng-template #footerTemplate>\r\n <hr class=\"my-0\" />\r\n <button\r\n class=\"btn btn-primary btn-sm m-2 float-right apply-btn\"\r\n (click)=\"applyChanges(); closeDatepicker(datepicker)\"\r\n >\r\n Apply\r\n </button>\r\n <button\r\n class=\"btn btn-primary btn-sm m-2 float-right cancel-btn\"\r\n (click)=\"revertDates(); closeDatepicker(datepicker)\"\r\n >\r\n Cancel\r\n </button>\r\n</ng-template>\r\n\r\n<ng-template\r\n #t\r\n let-date\r\n let-focused=\"focused\"\r\n let-disabled=\"disabled\"\r\n>\r\n <span\r\n class=\"custom-day\"\r\n [class.focused]=\"focused\"\r\n [class.range]=\"isRange(date)\"\r\n [class.faded]=\"isHovered(date) || isInside(date)\"\r\n [class.disabled]=\"disabled\"\r\n (mouseenter)=\"hoveredDate = date\"\r\n (mouseleave)=\"hoveredDate = null\"\r\n >\r\n {{ date.day }}\r\n </span>\r\n</ng-template>\r\n", styles: [":host ::ng-deep .ngb-dp-arrow button:disabled{color:#4a4a4a;background-color:#fff;opacity:.25;cursor:not-allowed}:host ::ng-deep .ngb-dp-arrow button:disabled .ngb-dp-navigation-chevron{color:#4a4a4a}:host ::ng-deep .ngb-dp-arrow button .ngb-dp-navigation-chevron{color:#000}:host::ng-deep .right{width:unset!important;background-color:#fff!important}:host::ng-deep .ngb-dp-day,:host::ng-deep .ngb-dp-weekday{width:3rem!important;font-style:unset!important;color:#8bac2a;outline:none}:host::ng-deep .ngb-dp-day:first-child{border:1px solid black}:host::ng-deep .ngb-dp-day.disabled{color:#d4d4d4;cursor:not-allowed}:host::ng-deep .ngb-dp-showweek:before{content:\"Weeks\";margin-right:5px}:host::ng-deep .ngb-dp-week-number{font-style:unset!important;width:4rem!important;margin-right:5px;font-weight:700;color:#000!important;border-right:1px solid rgba(0,0,0,.125)}:host::ng-deep .ngb-dp-week-number:before{font-style:unset!important;content:\"Week \"}:host::ng-deep .ngb-dp-weekday.ngb-dp-showweek{margin-right:5px;width:4rem!important;border-right:1px solid rgba(0,0,0,.125)}:host::ng-deep .dropdown-menu{box-shadow:none}:host::ng-deep .dropdown-menu.show{top:15px!important}:host::ng-deep .bg-light{background-color:#fff!important}:host::ng-deep .ngb-dp-weekdays{border-top:1px solid rgba(0,0,0,.125)}:host::ng-deep .ngb-dp-arrow-btn:focus{box-shadow:none}.custom-day{text-align:center;padding:.185rem .25rem;display:inline-block;height:1.75rem;font-weight:700;color:#222b45;width:3rem!important}.custom-day.focused{background-color:#fff}.custom-day.faded{background-color:#0275d880!important}.custom-day.faded:focus{outline:none!important}.custom-day:hover{background-color:#268bff1f!important;color:#4a4a4a!important}.custom-day:focus{outline:none!important}.custom-day.range{background-color:#268bff1f!important;color:#4a4a4a!important}.custom-day.range:focus{outline:none!important}.custom-day.disabled{color:#d3d3d3}.input-group>.single-week,.input-group .multiple-weeks{display:inline-flex!important}.input-group>.single-week>.form-control,.input-group .multiple-weeks>.form-control{width:212px;border-radius:2px;border:solid 1px #b3b3b3;height:1.875rem;cursor:pointer}.input-group>.form-control{width:212px;border-radius:2px;border:solid 1px #b3b3b3;height:1.875rem;cursor:pointer}.form-control[readonly]{background-color:#fff!important}.next-round-btn{transform:rotate(180deg);margin-left:.125rem;line-height:1.3;border-radius:50%;cursor:pointer}.round-btn{line-height:1.3;border-radius:50%;cursor:pointer;margin-left:.25rem}:host::ng-deep select.custom-select{background:none;appearance:auto}.left,.right{width:1.875rem!important;height:1.875rem;background:#d8d8d8!important;border-radius:50%}.left{margin-right:.3125rem}.right{margin-left:.3125rem}:host::ng-deep .right .ngb-dp-navigation-chevron,:host::ng-deep .ngb-dp-navigation-chevron{color:#268bff}:host::ng-deep .ngb-dp-arrow-btn:focus{outline-width:0px}.custom-day.faded{background-color:#268bff33!important;color:#000!important;font-weight:600}.custom-day{text-align:center;padding:.185rem .25rem;color:#000;display:inline-block;line-height:1.9;height:2rem;width:2rem}.custom-day.focused{background-color:#e6e6e6}.custom-day.range{background-color:#268bff!important;color:#fff!important;font-weight:600}.custom-day:hover{background-color:#d9e1e6;border-radius:.25rem;color:#bdbdbd}:host::ng-deep div.ngb-dp-weekday{color:#8bac2a;font-family:Roboto;font-size:.8125rem;font-weight:700;font-stretch:normal;font-style:normal;line-height:2.6;letter-spacing:normal}.mdi-menu-up,.mdi-menu-down{position:absolute;right:2.438rem;top:1px;font-size:1.375rem;cursor:pointer}.multiselect-input-arrow{position:absolute;right:.75rem;top:3px;font-size:1.25rem;cursor:pointer;pointer-events:none}button:focus{outline:none;box-shadow:none;border-color:transparent}::ng-deep .ngb-dp-header,::ng-deep .ngb-dp-week{background:#fff!important}.weeknumbers-label{position:relative;left:30px;font-size:12px}.apply-btn{background-color:#268bff;color:#fff}.cancel-btn{background-color:#268bff1f;color:#268bff}\n"] }]
348
342
  }], ctorParameters: function () { return [{ type: i1.NgbCalendar }, { type: i1.NgbDatepickerConfig }, { type: i2.AnnaDateTimeFormatService }, { type: i3.AnnaGlobalConfigService }]; }, propDecorators: { selectedFromDate: [{
349
- type: Input,
350
- args: ["from-date"]
343
+ type: Input
351
344
  }], selectedEndDate: [{
352
- type: Input,
353
- args: ["to-date"]
345
+ type: Input
354
346
  }], disabledDates: [{
355
- type: Input,
356
- args: ["disabled-dates"]
347
+ type: Input
357
348
  }], maxDate: [{
358
349
  type: Input
359
350
  }], minDate: [{
360
351
  type: Input
361
352
  }], config: [{
362
- type: Input,
363
- args: ["week-calendar-config"]
353
+ type: Input
364
354
  }], applyWeekCalendarChanges: [{
365
- type: Output,
366
- args: ["apply"]
355
+ type: Output
367
356
  }], calendarToggled: [{
368
- type: Output,
369
- args: ["toggle-calendar"]
357
+ type: Output
370
358
  }] } });
371
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5uYS13ZWVrLWNhbGVuZGFyLWZpbHRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbm5hLWNvcmUvc3JjL2xpYi9hbm5hLWRyb3Bkb3duLWxpYi9jb21wb25lbnRzL2FubmEtd2Vlay1jYWxlbmRhci1maWx0ZXIvYW5uYS13ZWVrLWNhbGVuZGFyLWZpbHRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbm5hLWNvcmUvc3JjL2xpYi9hbm5hLWRyb3Bkb3duLWxpYi9jb21wb25lbnRzL2FubmEtd2Vlay1jYWxlbmRhci1maWx0ZXIvYW5uYS13ZWVrLWNhbGVuZGFyLWZpbHRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw0QkFBNEI7QUFDNUIsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUQsT0FBTyxFQUFpQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUV4SCxnQ0FBZ0M7QUFDaEMsT0FBTyxFQUNILFdBQVcsRUFDWCxPQUFPLEVBQ1AsbUJBQW1CLEVBRW5CLGtCQUFrQixFQUNsQixhQUFhLEdBQ2hCLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRzFCLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHNFQUFzRSxDQUFDO0FBQ2pILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG1FQUFtRSxDQUFDO0FBQzVHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7O0FBRTdDLGlDQUFpQztBQVNqQyxNQUFNLE9BQU8seUJBQXlCO0lBb0NsQyxXQUFXLENBQUMsT0FBc0I7UUFDOUIseURBQXlEO1FBQ3pE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SUFBSSxPQUFPLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDM0YsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsZUFBZSxDQUFDLGFBQWtCO1FBQzlCLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMxQixDQUFDOytHQXZaUSx5QkFBeUI7bUdBQXpCLHlCQUF5QixpY0M3QnRDLDB2TEFvS0EsZzNIRHpJYyxJQUFJLDRGQUFFLFdBQVcsd2RBQUUsa0JBQWtCLHllQUFFLE9BQU8sb0ZBQUUsYUFBYTs7NEZBRTlELHlCQUF5QjtrQkFQckMsU0FBUzsrQkFDSSxvQ0FBb0MsY0FHbEMsSUFBSSxXQUNQLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsYUFBYSxDQUFDO2tOQXNCcEQsZ0JBQWdCO3NCQUFuQyxLQUFLO3VCQUFDLFdBQVc7Z0JBQ0EsZUFBZTtzQkFBaEMsS0FBSzt1QkFBQyxTQUFTO2dCQUNTLGFBQWE7c0JBQXJDLEtBQUs7dUJBQUMsZ0JBQWdCO2dCQUNkLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBUXlCLE1BQU07c0JBQXBDLEtBQUs7dUJBQUMsc0JBQXNCO2dCQUNaLHdCQUF3QjtzQkFBeEMsTUFBTTt1QkFBQyxPQUFPO2dCQUNZLGVBQWU7c0JBQXpDLE1BQU07dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQW5ndWxhciBpbXBvcnQgc3RhdGVtZW50c1xyXG5pbXBvcnQgeyBEYXRlUGlwZSwgTmdJZiwgTmdDbGFzcyB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbi8vIFRoaXJkIHBhcnR5IGltcG9ydCBzdGF0ZW1lbnRzXHJcbmltcG9ydCB7XHJcbiAgICBOZ2JDYWxlbmRhcixcclxuICAgIE5nYkRhdGUsXHJcbiAgICBOZ2JEYXRlcGlja2VyQ29uZmlnLFxyXG4gICAgTmdiRGF0ZVN0cnVjdCxcclxuICAgIE5nYklucHV0RGF0ZXBpY2tlcixcclxuICAgIE5nYkRhdGVwaWNrZXIsXHJcbn0gZnJvbSBcIkBuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwXCI7XHJcbmltcG9ydCBkYXlqcyBmcm9tIFwiZGF5anNcIjtcclxuaW1wb3J0IHsgV2Vla09iamVjdCB9IGZyb20gXCIuLi8uLi8uLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9tb2RlbHMvYW5uYS1nZW5lcmljLWRhdGEtdHlwZS5tb2RlbFwiO1xyXG5pbXBvcnQgeyBJV2Vla0NhbGVuZGFyIH0gZnJvbSBcIi4uLy4uLy4uL2FubmEtY29yZS1zaGFyZWQtbGliL21vZGVscy9hbm5hLWdsb2JhbC1kcm9wZG93bi1jb25maWcubW9kZWxcIjtcclxuaW1wb3J0IHsgQW5uYURhdGVUaW1lRm9ybWF0U2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9zZXJ2aWNlcy9hbm5hLWRhdGUtdGltZS1mb3JtYXQuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBBbm5hR2xvYmFsQ29uZmlnU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9zZXJ2aWNlcy9hbm5hLWdsb2JhbC1jb25maWcuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5cclxuLy8gVXNlciBkZWZpbmVkIGltcG9ydCBzdGF0ZW1lbnRzXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiBcImFubmEtY29yZS13ZWVrLWNhbGVuZGFyLWZpbHRlci1saWJcIixcclxuICAgIHRlbXBsYXRlVXJsOiBcIi4vYW5uYS13ZWVrLWNhbGVuZGFyLWZpbHRlci5jb21wb25lbnQuaHRtbFwiLFxyXG4gICAgc3R5bGVVcmxzOiBbXCIuL2FubmEtd2Vlay1jYWxlbmRhci1maWx0ZXIuY29tcG9uZW50LnNjc3NcIl0sXHJcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gICAgaW1wb3J0czogW05nSWYsIEZvcm1zTW9kdWxlLCBOZ2JJbnB1dERhdGVwaWNrZXIsIE5nQ2xhc3MsIE5nYkRhdGVwaWNrZXJdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQW5uYVdlZWtDYWxlbmRhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0IHtcclxuICAgIGZyb21EYXRlOiBOZ2JEYXRlIHwgbnVsbDtcclxuICAgIGhvdmVyZWREYXRlOiBOZ2JEYXRlIHwgbnVsbCA9IG51bGw7XHJcbiAgICB0b0RhdGU6IE5nYkRhdGUgfCBudWxsID0gbnVsbDtcclxuICAgIHRvZGF5OiBOZ2JEYXRlO1xyXG5cclxuICAgIG1vZGVsOiBOZ2JEYXRlU3RydWN0O1xyXG5cclxuICAgIHdlZWtOdW1iZXJzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgcGlwZTogRGF0ZVBpcGU7XHJcbiAgICBkYXRlVG9EaXNwbGF5OiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgd2Vla09iamVjdHM6IFdlZWtPYmplY3RbXTtcclxuICAgIG11bHRpU2VsZWN0RHJvcGRvd25PcGVuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBkYXRlcGlja2VyOiBOZ2JJbnB1dERhdGVwaWNrZXI7XHJcbiAgICBwcml2YXRlIGZvcm1hdHRlcjogYW55O1xyXG4gICAgcHVibGljIGZvcm1hdHRlZFN0YXJ0RGF0ZTogc3RyaW5nO1xyXG4gICAgcHVibGljIGZvcm1hdHRlZEVuZERhdGU6IHN0cmluZztcclxuICAgIHByaXZhdGUgY2FsZW5kYXJNYXAgPSBuZXcgTWFwKCk7XHJcbiAgICBwcml2YXRlIGZsYWcxOiBib29sZWFuO1xyXG4gICAgcHJpdmF0ZSBmbGFnMjogYm9vbGVhbjtcclxuICAgIEBJbnB1dChcImZyb20tZGF0ZVwiKSBzZWxlY3RlZEZyb21EYXRlOiBOZ2JEYXRlU3RydWN0O1xyXG4gICAgQElucHV0KFwidG8tZGF0ZVwiKSBzZWxlY3RlZEVuZERhdGU6IE5nYkRhdGVTdHJ1Y3Q7XHJcbiAgICBASW5wdXQoXCJkaXNhYmxlZC1kYXRlc1wiKSBkaXNhYmxlZERhdGVzOiBOZ2JEYXRlW10gPSBbXTtcclxuICAgIEBJbnB1dCgpIG1heERhdGU6IGFueTtcclxuICAgIEBJbnB1dCgpIG1pbkRhdGU6IGFueTtcclxuXHJcbiAgICBkaXNhYmxlZEZ1bmM6IGFueTtcclxuICAgIHN0YXRlOiBhbnk7XHJcblxyXG4gICAgLy9TZXR0aW5nIHRoZSBkZWZhdWx0IHZhbHVlcztcclxuICAgIHByaXZhdGUgX2RlZmF1bHRWYWx1ZXM6IElXZWVrQ2FsZW5kYXI7XHJcblxyXG4gICAgQElucHV0KFwid2Vlay1jYWxlbmRhci1jb25maWdcIikgY29uZmlnOiBJV2Vla0NhbGVuZGFyO1xyXG4gICAgQE91dHB1dChcImFwcGx5XCIpIGFwcGx5V2Vla0NhbGVuZGFyQ2hhbmdlcyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoXCJ0b2dnbGUtY2FsZW5kYXJcIikgY2FsZW5kYXJUb2dnbGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgICAgICAvL2lmIHNvbWUgdmFsdWVzIGFyZSBub3Qgc2VudCwgc2V0dGluZyB0aGUgZGVmYXVsdCB2YWx1ZXNcclxuICAgICAgICB0aGlzLl9kZWZhdWx0VmFsdWVzID0gdGhpcy5nbG9iYWxDb25maWdTZXJ2aWNlLmRlZmF1bHRXZWVrQ2FsZW5kYXJDb25maWc7XHJcbiAgICAgICAgdGhpcy5jb25maWcgPSB7IC4uLnRoaXMuX2RlZmF1bHRWYWx1ZXMsIC4uLnRoaXMuY29uZmlnIH07XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZy5zZWxlY3RDdXJyZW50V2Vlaykge1xyXG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemVXZWVrRGF0YSgpO1xyXG4gICAgICAgICAgICB0aGlzLmZyb21EYXRlICYmIHRoaXMuc2VsZWN0V2Vlayh0aGlzLmZyb21EYXRlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZm9ybWF0dGVyID0gdGhpcy5mb3JtYXR0ZWREYXRlcygpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEZyb21EYXRlICYmIHRoaXMuc2VsZWN0ZWRFbmREYXRlICYmIHRoaXMuY29uZmlnKSB7XHJcbiAgICAgICAgICAgIC8vIHRoaXMuc2VsZWN0V2Vlayh0aGlzLmZyb21EYXRlKTtcclxuICAgICAgICAgICAgdGhpcy5mcm9tRGF0ZSA9IE5nYkRhdGUuZnJvbSh0aGlzLnNlbGVjdGVkRnJvbURhdGUpO1xyXG4gICAgICAgICAgICB0aGlzLnRvRGF0ZSA9IE5nYkRhdGUuZnJvbSh0aGlzLnNlbGVjdGVkRW5kRGF0ZSk7XHJcbiAgICAgICAgICAgIHRoaXMud2Vla051bWJlckdlbmVyYXRvcigpO1xyXG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlUb1VJKCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q2FsZW5kYXJNYXAoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkRGF0ZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkRnVuYyA9IChkYXRlOiBOZ2JEYXRlLCBjdXJyZW50OiB7IG1vbnRoOiBudW1iZXIgfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tJZkRhdGVJc0Rpc2FibGVkKGRhdGUpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGNhbGVuZGFyOiBOZ2JDYWxlbmRhcixcclxuICAgICAgICBwcml2YXRlIGRhdGVQaWNrZXJDb25maWc6IE5nYkRhdGVwaWNrZXJDb25maWcsXHJcbiAgICAgICAgcHJpdmF0ZSBhbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlOiBBbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgZ2xvYmFsQ29uZmlnU2VydmljZTogQW5uYUdsb2JhbENvbmZpZ1NlcnZpY2UsXHJcbiAgICApIHt9XHJcblxyXG4gICAgZ2V0V2Vla051bWJlcih3ZWVrOiBhbnksIGZpcnN0RGF5T2ZXZWVrOiBhbnkpIHtcclxuICAgICAgICBjb25zdCB3ZWVrU3RhcnREYXRlID0gZGF5anMoY29udmVydE5nYkRhdGVUb01vbWVudCh3ZWVrWzBdKSwgXCJNTS9ERC9ZWVlZXCIpO1xyXG4gICAgICAgIGNvbnN0IHdlZWtZZWFyID0gd2Vla1N0YXJ0RGF0ZS55ZWFyKCk7XHJcbiAgICAgICAgY29uc3QgeWVhclN0YXJ0RGF0ZSA9IGRheWpzKGAwMS8wMS8ke3dlZWtZZWFyfWAsIFwiTU0vREQvWVlZWVwiKTtcclxuICAgICAgICBjb25zdCB3ZWVrRGF5ID0geWVhclN0YXJ0RGF0ZS5kYXkoKTtcclxuXHJcbiAgICAgICAgY29uc3Qgbm9PZkRheXMgPSB3ZWVrU3RhcnREYXRlLmRpZmYoeWVhclN0YXJ0RGF0ZSwgXCJkXCIpICsgMTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gY29udmVydE5nYkRhdGVUb01vbWVudChuZ2JEYXRlOiBOZ2JEYXRlKTogc3RyaW5nIHtcclxuICAgICAgICAgICAgbGV0IGZvcm1hdFR5cGUgPSBcIk1NL0REL1lZWVlcIjtcclxuICAgICAgICAgICAgbGV0IGNvbnZlcnRlZCA9IG51bGw7XHJcbiAgICAgICAgICAgIGlmIChuZ2JEYXRlICYmIG5nYkRhdGUubW9udGggJiYgbmdiRGF0ZS5kYXkgJiYgbmdiRGF0ZS55ZWFyKSB7XHJcbiAgICAgICAgICAgICAgICBjb252ZXJ0ZWQgPSBuZ2JEYXRlLm1vbnRoICsgXCIvXCIgKyBuZ2JEYXRlLmRheSArIFwiL1wiICsgbmdiRGF0ZS55ZWFyO1xyXG4gICAgICAgICAgICAgICAgY29udmVydGVkID0gZGF5anMoY29udmVydGVkKS5mb3JtYXQoZm9ybWF0VHlwZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrSWZZZWFySXNCcm9hZGNhc3RMZWFwWWVhcigpIHtcclxuICAgICAgICAgICAgbGV0IGlzTGVhcFllYXIgPSAod2Vla1llYXIgJSA0ID09IDAgJiYgd2Vla1llYXIgJSAxMDAgIT0gMCkgfHwgd2Vla1llYXIgJSA0MDAgPT0gMDtcclxuICAgICAgICAgICAgcmV0dXJuIChpc0xlYXBZZWFyICYmICh3ZWVrRGF5ID09IDAgfHwgd2Vla0RheSA9PSA2KSkgfHwgKCFpc0xlYXBZZWFyICYmIHdlZWtEYXkgPT0gMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBpc0xlYXBZZWFyID0gY2hlY2tJZlllYXJJc0Jyb2FkY2FzdExlYXBZZWFyKCk7XHJcbiAgICAgICAgY29uc3QgZGl2aWRlciA9IGlzTGVhcFllYXIgPyA1MyA6IDUyO1xyXG4gICAgICAgIGNvbnN0IGFkZGVyID0gaXNMZWFwWWVhciA/IDIgOiAxO1xyXG5cclxuICAgICAgICBsZXQgYnJvYWRjYXN0TnVtYmVyT2ZEYXlzID0gd2Vla0RheSArIG5vT2ZEYXlzO1xyXG4gICAgICAgIGxldCBicm9hZGNhc3RXZWVrTnVtYmVyID1cclxuICAgICAgICAgICAgYnJvYWRjYXN0TnVtYmVyT2ZEYXlzICUgNyA+IDAgPyBicm9hZGNhc3ROdW1iZXJPZkRheXMgLyA3ICsgYWRkZXIgOiBicm9hZGNhc3ROdW1iZXJPZkRheXMgLyA3O1xyXG5cclxuICAgICAgICBpZiAoTWF0aC5mbG9vcihicm9hZGNhc3RXZWVrTnVtYmVyICUgZGl2aWRlcikgPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGRpdmlkZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKGJyb2FkY2FzdFdlZWtOdW1iZXIgJSBkaXZpZGVyKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICAgICAgLy8gQ0hBTkdFU0BBTk5BTElCIENoYW5nZWQgdGhpcy5cclxuICAgICAgICAvLyB0aGlzLmNhbGVuZGFyW1wiX19wcm90b19fXCJdLmdldFdlZWtOdW1iZXIgPSB0aGlzLmdldFdlZWtOdW1iZXI7XHJcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMuY2FsZW5kYXIsIHsgZ2V0V2Vla051bWJlcjogdGhpcy5nZXRXZWVrTnVtYmVyIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIC8vIHRoaXMuc2VsZWN0V2Vlayh0aGlzLmZyb21EYXRlKTtcclxuICAgICAgICB0aGlzLnNldENhbGVuZGFyTWFwKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdGlhbGl6ZVdlZWtEYXRhKCkge1xyXG4gICAgICAgIHRoaXMud2Vla09iamVjdHMgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5mcm9tRGF0ZSA9IHRoaXMuY2FsZW5kYXIuZ2V0VG9kYXkoKTtcclxuICAgICAgICB0aGlzLnRvZGF5ID0gdGhpcy5jYWxlbmRhci5nZXRUb2RheSgpO1xyXG5cclxuICAgICAgICBsZXQgYmFja0RhdGVkUGVyaW9kID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcInVzZXJEZXRhaWxzXCIpIHx8IFwie31cIikubG9ja2luZ19wZXJpb2RfZGF5cztcclxuICAgICAgICBpZiAoYmFja0RhdGVkUGVyaW9kIDwgMCkge1xyXG4gICAgICAgICAgICBsZXQgZGF0ZTogTmdiRGF0ZSA9IHRoaXMuY2FsZW5kYXIuZ2V0UHJldih0aGlzLmNhbGVuZGFyLmdldFRvZGF5KCksIFwiZFwiLCBNYXRoLmFicyhiYWNrRGF0ZWRQZXJpb2QpKTtcclxuICAgICAgICAgICAgdGhpcy50b2RheSA9IE5nYkRhdGUuZnJvbShkYXRlKTtcclxuICAgICAgICAgICAgdGhpcy5mcm9tRGF0ZSA9IE5nYkRhdGUuZnJvbShkYXRlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIERpc2FibGUgbW9udGhzIGJlZm9yZSBudW1iZXJPZk1vbnRoc1RvRW5hYmxlXHJcbiAgICAgICAgdGhpcy5kYXRlUGlja2VyQ29uZmlnLm1hcmtEaXNhYmxlZCA9IChkYXRlOiBOZ2JEYXRlU3RydWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBwcmV2aW91c01vbnRoID0gdGhpcy5jYWxlbmRhci5nZXRQcmV2KHRoaXMudG9kYXksIFwibVwiLCB0aGlzLmNvbmZpZy5udW1iZXJPZk1vbnRoc1RvRW5hYmxlSW5QYXN0KTtcclxuICAgICAgICAgICAgbGV0IHByZXZpb3VzRGF5ID0gdGhpcy5jYWxlbmRhci5nZXRQcmV2KHByZXZpb3VzTW9udGgsIFwiZFwiLCAxKTtcclxuICAgICAgICAgICAgcmV0dXJuICFOZ2JEYXRlLmZyb20ocHJldmlvdXNEYXkpLmJlZm9yZShkYXRlKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuZm9ybWF0dGVyID0gdGhpcy5mb3JtYXR0ZWREYXRlcygpO1xyXG4gICAgICAgIHRoaXMuZmxhZzEgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmZsYWcyID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0V2VlayhkYXRlOiBOZ2JEYXRlKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZGF0ZU9iamVjdCA9IG5ldyBEYXRlKGRhdGUueWVhciwgZGF0ZS5tb250aCAtIDEsIGRhdGUuZGF5KTtcclxuICAgICAgICBsZXQgY29uc3RydWN0RGF0ZSA9IHRoaXMuYnVpbGREYXRlKGRhdGVPYmplY3QpO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuY29uZmlnLnNlbGVjdE11bHRpcGxlV2Vla3MpIHtcclxuICAgICAgICAgICAgLy9TaW5nbGUgd2VlayBzZWxlY3Rpb25cclxuICAgICAgICAgICAgdGhpcy5mcm9tRGF0ZSA9IHRoaXMuY29uc3RydWN0U3RhcnREYXRlKGRhdGVPYmplY3QpKGNvbnN0cnVjdERhdGUpO1xyXG4gICAgICAgICAgICB0aGlzLnRvRGF0ZSA9IHRoaXMuY29uc3RydWN0RW5kRGF0ZShkYXRlT2JqZWN0KShjb25zdHJ1Y3REYXRlKTtcclxuICAgICAgICAgICAgdGhpcy53ZWVrTnVtYmVyR2VuZXJhdG9yKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGRhdGUuYmVmb3JlKHRoaXMuZnJvbURhdGUpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZyb21EYXRlID0gdGhpcy5jb25zdHJ1Y3RTdGFydERhdGUoZGF0ZU9iamVjdCkoY29uc3RydWN0RGF0ZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5mbGFnMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9EYXRlID0gdGhpcy5jb25zdHJ1Y3RFbmREYXRlKGRhdGVPYmplY3QpKGNvbnN0cnVjdERhdGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5mbGFnMSA9ICF0aGlzLmZsYWcxO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGUuYWZ0ZXIodGhpcy50b0RhdGUpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5mbGFnMikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZnJvbURhdGUgPSB0aGlzLmNvbnN0cnVjdFN0YXJ0RGF0ZShkYXRlT2JqZWN0KShjb25zdHJ1Y3REYXRlKTtcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMudG9EYXRlID0gdGhpcy5jb25zdHJ1Y3RFbmREYXRlKGRhdGVPYmplY3QpKGNvbnN0cnVjdERhdGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5mbGFnMiA9ICF0aGlzLmZsYWcyO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b0RhdGUgPSB0aGlzLmNvbnN0cnVjdEVuZERhdGUoZGF0ZU9iamVjdCkoY29uc3RydWN0RGF0ZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZyb21EYXRlID0gdGhpcy5jb25zdHJ1Y3RTdGFydERhdGUoZGF0ZU9iamVjdCkoY29uc3RydWN0RGF0ZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvRGF0ZSA9IHRoaXMuY29uc3RydWN0RW5kRGF0ZShkYXRlT2JqZWN0KShjb25zdHJ1Y3REYXRlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWREYXRlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZGF5anNTdGFydERhdGUgPSBkYXlqcyhcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UuY29udmVydE5nYkRhdGVUb01vbWVudCh0aGlzLmZyb21EYXRlKSxcclxuICAgICAgICAgICAgICAgICAgICBcIk1NL0REL1lZWVlcIixcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBsZXQgZGF5anNFbmREYXRlID0gZGF5anMoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLmNvbnZlcnROZ2JEYXRlVG9Nb21lbnQodGhpcy50b0RhdGUpLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiTU0vREQvWVlZWVwiLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGxldCBuZ2JEYXRlO1xyXG4gICAgICAgICAgICAgICAgd2hpbGUgKCFkYXlqc1N0YXJ0RGF0ZS5pc1NhbWUoZGF5anNFbmREYXRlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5nYkRhdGUgPSB0aGlzLmFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UuY29udmVydFRvTmdiRGF0ZShkYXlqc1N0YXJ0RGF0ZSwgXCJNTS9ERC9ZWVlZXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNoZWNrSWZEYXRlSXNEaXNhYmxlZChuZ2JEYXRlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZGF5anNTdGFydERhdGUuYWRkKDEsIFwiZFwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxldCBuZXdEYXRlT2JqZWN0ID0gbmV3IERhdGUobmdiRGF0ZS55ZWFyLCBuZ2JEYXRlLm1vbnRoIC0gMSwgbmdiRGF0ZS5kYXkgLSAxKTtcclxuICAgICAgICAgICAgICAgIGxldCBjb25zdHJ1Y3REYXRlID0gdGhpcy5idWlsZERhdGUobmV3RGF0ZU9iamVjdCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvRGF0ZSA9IHRoaXMuY29uc3RydWN0RW5kRGF0ZShuZXdEYXRlT2JqZWN0KShjb25zdHJ1Y3REYXRlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy53ZWVrTnVtYmVyR2VuZXJhdG9yKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuY29uZmlnLnNob3dBc0Ryb3Bkb3duKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHlDaGFuZ2VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHdlZWtOdW1iZXJHZW5lcmF0b3IoKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IGRhdGVzID0gW107XHJcbiAgICAgICAgbGV0IHdlZWsgPSBbXTtcclxuXHJcbiAgICAgICAgbGV0IHN0YXJ0RGF0ZSA9IE5nYkRhdGUuZnJvbSh0aGlzLmZyb21EYXRlKTtcclxuICAgICAgICBsZXQgZW5kRGF0ZSA9IE5nYkRhdGUuZnJvbSh0aGlzLnRvRGF0ZSk7XHJcblxyXG4gICAgICAgIHdlZWsucHVzaChzdGFydERhdGUpO1xyXG4gICAgICAgIHdoaWxlIChlbmREYXRlICE9IG51bGwgJiYgIXN0YXJ0RGF0ZS5lcXVhbHMoZW5kRGF0ZSkpIHtcclxuICAgICAgICAgICAgbGV0IGRhdGUgPSB0aGlzLmNhbGVuZGFyLmdldE5leHQoc3RhcnREYXRlLCBcImRcIiwgMSk7XHJcbiAgICAgICAgICAgIHN0YXJ0RGF0ZSA9IGRhdGU7XHJcbiAgICAgICAgICAgIHdlZWsucHVzaChkYXRlKTtcclxuXHJcbiAgICAgICAgICAgIC8vIENvbGxlY3QgYWxsIGRheXMgaW4gd2VlayB0byBjYWxjdWxhdGUgdGhlIHdlZWsgbnVtYmVyXHJcbiAgICAgICAgICAgIGlmICh3ZWVrLmxlbmd0aCA9PSA3KSB7XHJcbiAgICAgICAgICAgICAgICBkYXRlcy5wdXNoKHdlZWspO1xyXG4gICAgICAgICAgICAgICAgd2VlayA9IFtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgodGhpcy5jb25maWcubWF4V2Vla3NUb1NlbGVjdCA/PyAwKSA+IDAgJiYgZGF0ZXMubGVuZ3RoID4gKHRoaXMuY29uZmlnLm1heFdlZWtzVG9TZWxlY3QgPz8gMCkpIHtcclxuICAgICAgICAgICAgZGF0ZXMuc3BsaWNlKHRoaXMuY29uZmlnLm1heFdlZWtzVG9TZWxlY3QgPz8gMCwgZGF0ZXMubGVuZ3RoIC0gKHRoaXMuY29uZmlnLm1heFdlZWtzVG9TZWxlY3QgPz8gMCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZXMoZGF0ZXMpO1xyXG5cclxuICAgICAgICB0aGlzLndlZWtOdW1iZXJzID0gW107XHJcbiAgICAgICAgdGhpcy53ZWVrT2JqZWN0cyA9IFtdO1xyXG4gICAgICAgIGlmIChkYXRlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGRhdGUgb2YgZGF0ZXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMud2Vla051bWJlcnMucHVzaChcIiBXZWVrIFwiICsgdGhpcy5jYWxlbmRhci5nZXRXZWVrTnVtYmVyKGRhdGUsIHRoaXMuY29uZmlnLmZpcnN0RGF5T2ZXZWVrKSk7XHJcbiAgICAgICAgICAgICAgICBsZXQgZGF0ZXMgPSB0aGlzLmZvcm1hdHRlcihkYXRlWzBdLCBkYXRlWzZdKTtcclxuICAgICAgICAgICAgICAgIGxldCBkYXRlT2JqZWN0cyA9IHsgc3RhcnREYXRlOiBkYXRlcy5mb3JtYXR0ZWRTdGFydERhdGUsIGVuZERhdGU6IGRhdGVzLmZvcm1hdHRlZEVuZERhdGUgfTtcclxuICAgICAgICAgICAgICAgIHRoaXMud2Vla09iamVjdHMucHVzaChkYXRlT2JqZWN0cyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kaXNwbGF5VG9VSSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdGVkRGF0ZXMoZGF0ZXM6IGFueSkge1xyXG4gICAgICAgIHRoaXMuZnJvbURhdGUgPSBkYXRlc1swXVswXTtcclxuICAgICAgICB0aGlzLnRvRGF0ZSA9IGRhdGVzW2RhdGVzLmxlbmd0aCAtIDFdWzZdO1xyXG4gICAgfVxyXG5cclxuICAgIGZvcm1hdHRlZERhdGVzKCkge1xyXG4gICAgICAgIGxldCBwaXBlID0gbmV3IERhdGVQaXBlKFwiZW4tVVNcIik7XHJcbiAgICAgICAgbGV0IHRoaXNPYmogPSB0aGlzO1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoZnJvbURhdGU6IE5nYkRhdGUsIHRvRGF0ZTogTmdiRGF0ZSkge1xyXG4gICAgICAgICAgICBsZXQgZnJvbURhdGVPYmplY3QgPSBuZXcgRGF0ZShmcm9tRGF0ZS55ZWFyLCBmcm9tRGF0ZS5tb250aCAtIDEsIGZyb21EYXRlLmRheSk7XHJcbiAgICAgICAgICAgIGxldCB0b0RhdGVPYmplY3QgPSBuZXcgRGF0ZSh0b0RhdGUueWVhciwgdG9EYXRlLm1vbnRoIC0gMSwgdG9EYXRlLmRheSk7XHJcbiAgICAgICAgICAgIHRoaXNPYmouZm9ybWF0dGVkU3RhcnREYXRlID0gcGlwZS50cmFuc2Zvcm0oZnJvbURhdGVPYmplY3QsIHRoaXNPYmouY29uZmlnLmRhdGVGb3JtYXRGb3JSZXF1ZXN0KTtcclxuICAgICAgICAgICAgdGhpc09iai5mb3JtYXR0ZWRFbmREYXRlID0gcGlwZS50cmFuc2Zvcm0odG9EYXRlT2JqZWN0LCB0aGlzT2JqLmNvbmZpZy5kYXRlRm9ybWF0Rm9yUmVxdWVzdCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzT2JqLmRhdGVUb0Rpc3BsYXkgPVxyXG4gICAgICAgICAgICAgICAgcGlwZS50cmFuc2Zvcm0oZnJvbURhdGVPYmplY3QsIHRoaXNPYmouY29uZmlnLmRhdGVGb3JtYXRUb0Rpc3BsYXkpICtcclxuICAgICAgICAgICAgICAgIFwiIHRvIFwiICtcclxuICAgICAgICAgICAgICAgIHBpcGUudHJhbnNmb3JtKHRvRGF0ZU9iamVjdCwgdGhpc09iai5jb25maWcuZGF0ZUZvcm1hdFRvRGlzcGxheSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzT2JqO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgZGlzcGxheVRvVUkoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvbmZpZy5zZWxlY3RNdWx0aXBsZVdlZWtzICYmIHRoaXMuZnJvbURhdGUgJiYgdGhpcy50b0RhdGUpIHtcclxuICAgICAgICAgICAgLy8gRGlzcGxheSBmb3Igb25seSBTaW5nbGUgV2Vla1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1hdHRlcih0aGlzLmZyb21EYXRlLCB0aGlzLnRvRGF0ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gRGlzcGxheSBmb3IgTXVsdGlwbGUgV2Vla3NcclxuICAgICAgICAgICAgaWYgKHRoaXMud2Vla051bWJlcnMubGVuZ3RoID4gKHRoaXMuY29uZmlnLm1heFdlZWtzVG9TaG93V2l0aFJlbWFpbmluZ0NvdW50ID8/IDApKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgd2Vla0Rpc3BsYXkgPSBbXTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgKHRoaXMuY29uZmlnLm1heFdlZWtzVG9TaG93V2l0aFJlbWFpbmluZ0NvdW50ID8/IDApOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB3ZWVrRGlzcGxheS5wdXNoKHRoaXMud2Vla051bWJlcnMuc2hpZnQoKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsZXQgcmVtYWluaW5nV2Vla3MgPSB0aGlzLndlZWtOdW1iZXJzLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIHRoaXMud2Vla051bWJlcnMgPSBbXTtcclxuICAgICAgICAgICAgICAgIHRoaXMud2Vla051bWJlcnMucHVzaCh3ZWVrRGlzcGxheSArIFwiICtcIiArIHJlbWFpbmluZ1dlZWtzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3RTdGFydERhdGUoZGF0ZTogRGF0ZSkge1xyXG4gICAgICAgIGxldCBmaXJzdERheU9mV2VlayA9IHRoaXMuY29uZmlnLmZpcnN0RGF5T2ZXZWVrO1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoY29uc3RydWN0RGF0ZTogYW55KSB7XHJcbiAgICAgICAgICAgIGxldCBzdGFydERheSA9IGRhdGUuZ2V0RGF5KCkgIT0gMCA/IChmaXJzdERheU9mV2VlayA/PyAwKSAtIGRhdGUuZ2V0RGF5KCkgOiAtNjtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdERhdGUoc3RhcnREYXkpO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0RW5kRGF0ZShkYXRlOiBEYXRlKSB7XHJcbiAgICAgICAgbGV0IGZpcnN0RGF5T2ZXZWVrID0gdGhpcy5jb25maWcuZmlyc3REYXlPZldlZWs7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjb25zdHJ1Y3REYXRlOiBhbnkpIHtcclxuICAgICAgICAgICAgbGV0IGVuZERheSA9IGRhdGUuZ2V0RGF5KCkgIT0gMCA/IChmaXJzdERheU9mV2VlayA/PyAwKSArIDYgLSBkYXRlLmdldERheSgpIDogMDtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdERhdGUoZW5kRGF5KTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGJ1aWxkRGF0ZShkYXRlOiBEYXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChudW1iZXI6IG51bWJlcik6IE5nYkRhdGUgfCBudWxsIHtcclxuICAgICAgICAgICAgbGV0IGRheSA9IGRhdGUuZ2V0RGF0ZSgpICsgbnVtYmVyO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRlT2JqZWN0ID0gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRheSk7XHJcblxyXG4gICAgICAgICAgICBsZXQgbmdiRGF0ZU9iamVjdCA9IHt9IGFzIE5nYkRhdGU7XHJcbiAgICAgICAgICAgIG5nYkRhdGVPYmplY3QuZGF5ID0gZGF5O1xyXG5cclxuICAgICAgICAgICAgaWYgKG5nYkRhdGVPYmplY3QuZGF5ID4gMzEgfHwgbmdiRGF0ZU9iamVjdC5kYXkgPCAxKSB7XHJcbiAgICAgICAgICAgICAgICBuZ2JEYXRlT2JqZWN0LmRheSA9IGRhdGVPYmplY3QuZ2V0RGF0ZSgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBuZ2JEYXRlT2JqZWN0Lm1vbnRoID0gZGF0ZU9iamVjdC5nZXRNb250aCgpICsgMTtcclxuICAgICAgICAgICAgbmdiRGF0ZU9iamVjdC55ZWFyID0gZGF0ZU9iamVjdC5nZXRGdWxsWWVhcigpO1xyXG4gICAgICAgICAgICByZXR1cm4gTmdiRGF0ZS5mcm9tKG5nYkRhdGVPYmplY3QpO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgaXNIb3ZlcmVkKGRhdGU6IE5nYkRhdGUpOiBib29sZWFuIHwgbnVsbCB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgdGhpcy5mcm9tRGF0ZSAmJlxyXG4gICAgICAgICAgICAhdGhpcy50b0RhdGUgJiZcclxuICAgICAgICAgICAgdGhpcy5ob3ZlcmVkRGF0ZSAmJlxyXG4gICAgICAgICAgICBkYXRlLmFmdGVyKHRoaXMuZnJvbURhdGUpICYmXHJcbiAgICAgICAgICAgIGRhdGUuYmVmb3JlKHRoaXMuaG92ZXJlZERhdGUpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpc0luc2lkZShkYXRlOiBOZ2JEYXRlKTogYm9vbGVhbiB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRvRGF0ZSAmJiBkYXRlLmFmdGVyKHRoaXMuZnJvbURhdGUpICYmIGRhdGUuYmVmb3JlKHRoaXMudG9EYXRlKTtcclxuICAgIH1cclxuXHJcbiAgICBpc1JhbmdlKGRhdGU6IE5nYkRhdGUpOiBib29sZWFuIHwgbnVsbCB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgZGF0ZS5lcXVhbHModGhpcy5mcm9tRGF0ZSkgfHxcclxuICAgICAgICAgICAgKHRoaXMudG9EYXRlICYmIGRhdGUuZXF1YWxzKHRoaXMudG9EYXRlKSkgfHxcclxuICAgICAgICAgICAgdGhpcy5pc0luc2lkZShkYXRlKSB8fFxyXG4gICAgICAgICAgICB0aGlzLmlzSG92ZXJlZChkYXRlKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJldmlvdXNXZWVrKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmZyb21EYXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9EYXRlID0gdGhpcy5jYWxlbmRhci5nZXRQcmV2KHRoaXMuZnJvbURhdGUsIFwiZFwiLCAxKTtcclxuICAgICAgICAgICAgdGhpcy5mcm9tRGF0ZSA9IHRoaXMuY2FsZW5kYXIuZ2V0UHJldih0aGlzLmZyb21EYXRlLCBcImRcIiwgdGhpcy5jYWxlbmRhci5nZXREYXlzUGVyV2VlaygpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy53ZWVrTnVtYmVyR2VuZXJhdG9yKCk7XHJcbiAgICAgICAgdGhpcy5hcHBseUNoYW5nZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZXh0V2VlaygpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5mcm9tRGF0ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZyb21EYXRlID0gdGhpcy5jYWxlbmRhci5nZXROZXh0KHRoaXMuZnJvbURhdGUsIFwiZFwiLCB0aGlzLmNhbGVuZGFyLmdldERheXNQZXJXZWVrKCkpO1xyXG4gICAgICAgICAgICB0aGlzLnRvRGF0ZSA9IHRoaXMuY2FsZW5kYXIuZ2V0TmV4dCh0aGlzLmZyb21EYXRlLCBcImRcIiwgdGhpcy5jYWxlbmRhci5nZXREYXlzUGVyV2VlaygpIC0gMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMud2Vla051bWJlckdlbmVyYXRvcigpO1xyXG4gICAgICAgIHRoaXMuYXBwbHlDaGFuZ2VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0Q2FsZW5kYXJNYXAoKSB7XHJcbiAgICAgICAgbGV0IGRhdGVPYmogPSB7IGZyb21EYXRlOiB0aGlzLmZyb21EYXRlLCB0b0RhdGU6IHRoaXMudG9EYXRlIH07XHJcbiAgICAgICAgdGhpcy5jYWxlbmRhck1hcC5zZXQoXCJvbGREYXRlc1wiLCBkYXRlT2JqKTtcclxuICAgIH1cclxuXHJcbiAgICBhcHBseUNoYW5nZXMoKSB7XHJcbiAgICAgICAgdGhpcy5tdWx0aVNlbGVjdERyb3Bkb3duT3BlbiA9IGZhbHNlO1xyXG4gICAgICAgIGlmICghdGhpcy5jb25maWcuZW1pdE11bHRpcGxlV2Vla09iamVjdHMpIHtcclxuICAgICAgICAgICAgbGV0IGRhdGVzID0ge30gYXMgV2Vla09iamVjdDtcclxuICAgICAgICAgICAgbGV0IGZvcm1hdHRlZERhdGVzID0gdGhpcy5mb3JtYXR0ZXIodGhpcy5mcm9tRGF0ZSwgdGhpcy50b0RhdGUpO1xyXG4gICAgICAgICAgICBkYXRlcy5zdGFydERhdGUgPSBmb3JtYXR0ZWREYXRlcy5mb3JtYXR0ZWRTdGFydERhdGU7XHJcbiAgICAgICAgICAgIGRhdGVzLmVuZERhdGUgPSBmb3JtYXR0ZWREYXRlcy5mb3JtYXR0ZWRFbmREYXRlO1xyXG4gICAgICAgICAgICB0aGlzLmFwcGx5V2Vla0NhbGVuZGFyQ2hhbmdlcy5lbWl0KGRhdGVzKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmFwcGx5V2Vla0NhbGVuZGFyQ2hhbmdlcy5lbWl0KHRoaXMud2Vla09iamVjdHMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNldENhbGVuZGFyTWFwKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNGb2N1c2VkKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmNhbGVuZGFyVG9nZ2xlZC5lbWl0KHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBpc0Ryb3Bkb3duT3BlbmVkRm9yQ2FsZW5kYXIoZGF0ZXBpY2tlcjogTmdiSW5wdXREYXRlcGlja2VyKSB7XHJcbiAgICAgICAgdGhpcy5kYXRlcGlja2VyID0gZGF0ZXBpY2tlcjtcclxuICAgICAgICBpZiAodGhpcy5kYXRlcGlja2VyLmlzT3BlbigpKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmV2ZXJ0RGF0ZXMoKTtcclxuICAgICAgICAgICAgdGhpcy5kYXRlcGlja2VyLmNsb3NlKCk7XHJcbiAgICAgICAgICAgIHRoaXMubXVsdGlTZWxlY3REcm9wZG93bk9wZW4gPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGVwaWNrZXIub3BlbigpO1xyXG4gICAgICAgICAgICB0aGlzLm11bHRpU2VsZWN0RHJvcGRvd25PcGVuID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV2ZXJ0RGF0ZXMoKSB7XHJcbiAgICAgICAgdGhpcy5tdWx0aVNlbGVjdERyb3Bkb3duT3BlbiA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLmNhbGVuZGFyTWFwLmdldChcIm9sZERhdGVzXCIpKSB7XHJcbiAgICAgICAgICAgIGxldCBkYXRlT2JqID0gdGhpcy5jYWxlbmRhck1hcC5nZXQoXCJvbGREYXRlc1wiKTtcclxuICAgICAgICAgICAgdGhpcy5mcm9tRGF0ZSA9IGRhdGVPYmouZnJvbURhdGU7XHJcbiAgICAgICAgICAgIHRoaXMudG9EYXRlID0gZGF0ZU9iai50b0RhdGU7XHJcbiAgICAgICAgICAgIHRoaXMud2Vla051bWJlckdlbmVyYXRvcigpO1xyXG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlUb1VJKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNoZWNrSWZEYXRlSXNEaXNhYmxlZChkYXRlOiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCB2YWxpZGF0b3JGdW5jID0gKG5nYkRhdGU6IE5nYkRhdGUpID0+XHJcbiAgICAgICAgICAgIG5nYkRhdGUueWVhciA9PT0gZGF0ZS55ZWFyICYmIG5nYkRhdGUubW9udGggPT09IGRhdGUubW9udGggJiYgbmdiRGF0ZS5kYXkgPT09IGRhdGUuZGF5O1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkRGF0ZXMuc29tZSh2YWxpZGF0b3JGdW5jKTtcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZURhdGVwaWNrZXIoZGF0ZXBpY2tlclJlZjogYW55KSB7XHJcbiAgICAgICAgZGF0ZXBpY2tlclJlZi5jbG9zZSgpO1xyXG4gICAgfVxyXG59XHJcbiIsIjxmb3JtXHJcbiAgICBjbGFzcz1cImZvcm0taW5saW5lXCJcclxuICAgICpuZ0lmPVwiY29uZmlnLnNob3dBc0Ryb3Bkb3duXCJcclxuPlxyXG4gICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgaGlkZGVuXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgbmFtZT1cImRhdGVwaWNrZXJcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgICAgbmdiRGF0ZXBpY2tlclxyXG4gICAgICAgICAgICAgICAgI2RhdGVwaWNrZXI9XCJuZ2JEYXRlcGlja2VyXCJcclxuICAgICAgICAgICAgICAgIFthdXRvQ2xvc2VdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgKGRhdGVTZWxlY3QpPVwic2VsZWN0V2VlaygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIChjbG9zZWQpPVwiaXNGb2N1c2VkKGZhbHNlKVwiXHJcbiAgICAgICAgICAgICAgICBbZGlzcGxheU1vbnRoc109XCIxXCJcclxuICAgICAgICAgICAgICAgIFtkYXlUZW1wbGF0ZV09XCJ0XCJcclxuICAgICAgICAgICAgICAgIFtzdGFydERhdGVdPVwiZnJvbURhdGUhXCJcclxuICAgICAgICAgICAgICAgIFtmaXJzdERheU9mV2Vla109XCJjb25maWcuZmlyc3REYXlPZldlZWtcIlxyXG4gICAgICAgICAgICAgICAgW3Nob3dXZWVrTnVtYmVyc109XCJjb25maWcuc2hvd1dlZWtOdW1iZXJzXCJcclxuICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxyXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJkaXNwbGF5OiBub25lXCJcclxuICAgICAgICAgICAgICAgIFtmb290ZXJUZW1wbGF0ZV09XCJmb290ZXJUZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tU2luZ2xlIHdlZWsgc2VsZWN0LS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiIWNvbmZpZy5zZWxlY3RNdWx0aXBsZVdlZWtzXCI+XHJcbiAgICAgICAgPHNwYW4gc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7IGxlZnQ6IDMwcHg7IGZvbnQtc2l6ZTogMTJweFwiPiAmbmJzcDt7eyB3ZWVrTnVtYmVycyB9fSA8L3NwYW4+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2luZ2xlLXdlZWtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBuZXh0LXJvdW5kLWJ0blwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicHJldmlvdXNXZWVrKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0ZV9uZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgI2RwRnJvbURhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBXZWVrc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIltjb25maWcuY3VzdG9tQ2xhc3MgPT0gJycgPyAnJyA6IGNvbmZpZy5jdXN0b21DbGFzc11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiZHBGcm9tRGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJkYXRlVG9EaXNwbGF5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaXNGb2N1c2VkKHRydWUpOyBpc0Ryb3Bkb3duT3BlbmVkRm9yQ2FsZW5kYXIoZGF0ZXBpY2tlcilcIlxyXG4gICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLW1lbnUtZG93blwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWRhdGVwaWNrZXIuaXNPcGVuKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGF0ZXBpY2tlci5vcGVuKClcIlxyXG4gICAgICAgICAgICAgICAgICAgID48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLW1lbnUtdXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRhdGVwaWNrZXIuaXNPcGVuKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaXNEcm9wZG93bk9wZW5lZEZvckNhbGVuZGFyKGRhdGVwaWNrZXIpXCJcclxuICAgICAgICAgICAgICAgICAgICA+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyByb3VuZC1idG5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm5leHRXZWVrKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0ZV9uZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS1NdWx0aXBsZSB3ZWVrIHNlbGVjdC0tPlxyXG4gICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwiZm9ybS1ncm91cFwiXHJcbiAgICAgICAgKm5nSWY9XCJjb25maWcuc2VsZWN0TXVsdGlwbGVXZWVrc1wiXHJcbiAgICA+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdWx0aXBsZS13ZWVrc1wiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgI2RwRnJvbURhdGVcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgV2Vla3NcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIltjb25maWcuY3VzdG9tQ2xhc3MgPT0gJycgPyAnJyA6IGNvbmZpZy5jdXN0b21DbGFzc11cIlxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJkcEZyb21EYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIndlZWtOdW1iZXJzXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaXNGb2N1c2VkKHRydWUpOyBpc0Ryb3Bkb3duT3BlbmVkRm9yQ2FsZW5kYXIoZGF0ZXBpY2tlcilcIlxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhbXVsdGlTZWxlY3REcm9wZG93bk9wZW5cIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1tZW51LWRvd24gbXVsdGlzZWxlY3QtaW5wdXQtYXJyb3dcIlxyXG4gICAgICAgICAgICAgICAgPjwvaT5cclxuICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJtdWx0aVNlbGVjdERyb3Bkb3duT3BlblwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLW1lbnUtdXAgbXVsdGlzZWxlY3QtaW5wdXQtYXJyb3dcIlxyXG4gICAgICAgICAgICAgICAgPjwvaT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9mb3JtPlxyXG5cclxuPG5nYi1kYXRlcGlja2VyXHJcbiAgICAjd2Vla1BpY2tlclxyXG4gICAgKm5nSWY9XCIhY29uZmlnLnNob3dBc0Ryb3Bkb3duXCJcclxuICAgIFtkaXNwbGF5TW9udGhzXT1cIjFcIlxyXG4gICAgW3N0YXJ0RGF0ZV09XCJmcm9tRGF0ZSFcIlxyXG4gICAgW2ZpcnN0RGF5T2ZXZWVrXT1cImNvbmZpZy5maXJzdERheU9mV2Vla1wiXHJcbiAgICBbc2hvd1dlZWtOdW1iZXJzXT1cImNvbmZpZy5zaG93V2Vla051bWJlcnNcIlxyXG4gICAgW2RheVRlbXBsYXRlXT1cInRcIlxyXG4gICAgW21heERhdGVdPVwibWF4RGF0ZVwiXHJcbiAgICBbbWluRGF0ZV09XCJtaW5EYXRlXCJcclxuICAgIChkYXRlU2VsZWN0KT1cInNlbGVjdFdlZWsoJGV2ZW50KVwiXHJcbiAgICBbbWFya0Rpc2FibGVkXT1cImRpc2FibGVkRnVuY1wiXHJcbj5cclxuPC9uZ2ItZGF0ZXBpY2tlcj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjZm9vdGVyVGVtcGxhdGU+XHJcbiAgICA8aHIgY2xhc3M9XCJteS0wXCIgLz5cclxuICAgIDxidXR0b25cclxuICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc20gbS0yIGZsb2F0LXJpZ2h0XCJcclxuICAgICAgICAoY2xpY2spPVwiYXBwbHlDaGFuZ2VzKCk7IGNsb3NlRGF0ZXBpY2tlcihkYXRlcGlja2VyKVwiXHJcbiAgICAgICAgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjMjY4YmZmOyBjb2xvcjogI2ZmZmZmZlwiXHJcbiAgICA+XHJcbiAgICAgICAgQXBwbHlcclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbSBtLTIgZmxvYXQtcmlnaHRcIlxyXG4gICAgICAgIChjbGljayk9XCJyZXZlcnREYXRlcygpOyBjbG9zZURhdGVwaWNrZXIoZGF0ZXBpY2tlcilcIlxyXG4gICAgICAgIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogcmdiYSgzOCwgMTM5LCAyNTUsIDAuMTIpOyBjb2xvcjogIzI2OGJmZlwiXHJcbiAgICA+XHJcbiAgICAgICAgQ2FuY2VsXHJcbiAgICA8L2J1dHRvbj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZVxyXG4gICAgI3RcclxuICAgIGxldC1kYXRlXHJcbiAgICBsZXQtZm9jdXNlZD1cImZvY3VzZWRcIlxyXG4gICAgbGV0LWRpc2FibGVkPVwiZGlzYWJsZWRcIlxyXG4+XHJcbiAgICA8c3BhblxyXG4gICAgICAgIGNsYXNzPVwiY3VzdG9tLWRheVwiXHJcbiAgICAgICAgW2NsYXNzLmZvY3VzZWRdPVwiZm9jdXNlZFwiXHJcbiAgICAgICAgW2NsYXNzLnJhbmdlXT1cImlzUmFuZ2UoZGF0ZSlcIlxyXG4gICAgICAgIFtjbGFzcy5mYWRlZF09XCJpc0hvdmVyZWQoZGF0ZSkgfHwgaXNJbnNpZGUoZGF0ZSlcIlxyXG4gICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJkaXNhYmxlZFwiXHJcbiAgICAgICAgKG1vdXNlZW50ZXIpPVwiaG92ZXJlZERhdGUgPSBkYXRlXCJcclxuICAgICAgICAobW91c2VsZWF2ZSk9XCJob3ZlcmVkRGF0ZSA9IG51bGxcIlxyXG4gICAgPlxyXG4gICAgICAgIHt7IGRhdGUuZGF5IH19XHJcbiAgICA8L3NwYW4+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tXHJcblxyXG48aHI+XHJcblxyXG48cHJlPkZyb206IHt7IGZyb21EYXRlIHwganNvbiB9fSA8L3ByZT5cclxuPHByZT5Ubzoge3sgdG9EYXRlIHwganNvbiB9fSA8L3ByZT5cclxuPHByZT53ZWVrTnVtYmVyczoge3sgd2Vla051bWJlcnMgfCBqc29uIH19IDwvcHJlPlxyXG5cclxuLS0+XHJcbiJdfQ==
359
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5uYS13ZWVrLWNhbGVuZGFyLWZpbHRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbm5hLWNvcmUvc3JjL2xpYi9hbm5hLWRyb3Bkb3duLWxpYi9jb21wb25lbnRzL2FubmEtd2Vlay1jYWxlbmRhci1maWx0ZXIvYW5uYS13ZWVrLWNhbGVuZGFyLWZpbHRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbm5hLWNvcmUvc3JjL2xpYi9hbm5hLWRyb3Bkb3duLWxpYi9jb21wb25lbnRzL2FubmEtd2Vlay1jYWxlbmRhci1maWx0ZXIvYW5uYS13ZWVrLWNhbGVuZGFyLWZpbHRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw0QkFBNEI7QUFDNUIsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUQsT0FBTyxFQUFpQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUN4SCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsZ0NBQWdDO0FBQ2hDLE9BQU8sRUFDSCxXQUFXLEVBQ1gsT0FBTyxFQUNQLGFBQWEsRUFDYixtQkFBbUIsRUFFbkIsa0JBQWtCLEdBQ3JCLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBSTFCLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHNFQUFzRSxDQUFDO0FBQ2pILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG1FQUFtRSxDQUFDOzs7Ozs7QUFFNUcsaUNBQWlDO0FBU2pDLE1BQU0sT0FBTyx5QkFBeUI7SUFvQ2xDLFdBQVcsQ0FBQyxPQUFzQjtRQUM5QiwwREFBMEQ7UUFDMUQs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Q0FBQyxhQUFhLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsZUFBZSxDQUFDLGFBQWtCO1FBQzlCLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMxQixDQUFDOytHQXRaUSx5QkFBeUI7bUdBQXpCLHlCQUF5QiwwWUM3QnRDLGs1S0F1SkEsa2hJRDVIYyxJQUFJLDRGQUFFLFdBQVcsd2RBQUUsa0JBQWtCLHllQUFFLE9BQU8sb0ZBQUUsYUFBYTs7NEZBRTlELHlCQUF5QjtrQkFQckMsU0FBUzsrQkFDSSxvQ0FBb0MsY0FHbEMsSUFBSSxXQUNQLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsYUFBYSxDQUFDO2tOQXNCL0QsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQVFHLE1BQU07c0JBQWQsS0FBSztnQkFDSSx3QkFBd0I7c0JBQWpDLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXIgaW1wb3J0IHN0YXRlbWVudHNcclxuaW1wb3J0IHsgRGF0ZVBpcGUsIE5nQ2xhc3MsIE5nSWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbi8vIFRoaXJkIHBhcnR5IGltcG9ydCBzdGF0ZW1lbnRzXHJcbmltcG9ydCB7XHJcbiAgICBOZ2JDYWxlbmRhcixcclxuICAgIE5nYkRhdGUsXHJcbiAgICBOZ2JEYXRlcGlja2VyLFxyXG4gICAgTmdiRGF0ZXBpY2tlckNvbmZpZyxcclxuICAgIE5nYkRhdGVTdHJ1Y3QsXHJcbiAgICBOZ2JJbnB1dERhdGVwaWNrZXIsXHJcbn0gZnJvbSBcIkBuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwXCI7XHJcbmltcG9ydCBkYXlqcyBmcm9tIFwiZGF5anNcIjtcclxuXHJcbmltcG9ydCB7IFdlZWtPYmplY3QgfSBmcm9tIFwiLi4vLi4vLi4vYW5uYS1jb3JlLXNoYXJlZC1saWIvbW9kZWxzL2FubmEtZ2VuZXJpYy1kYXRhLXR5cGUubW9kZWxcIjtcclxuaW1wb3J0IHsgSVdlZWtDYWxlbmRhciB9IGZyb20gXCIuLi8uLi8uLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9tb2RlbHMvYW5uYS1nbG9iYWwtZHJvcGRvd24tY29uZmlnLm1vZGVsXCI7XHJcbmltcG9ydCB7IEFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vYW5uYS1jb3JlLXNoYXJlZC1saWIvc2VydmljZXMvYW5uYS1kYXRlLXRpbWUtZm9ybWF0LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQW5uYUdsb2JhbENvbmZpZ1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vYW5uYS1jb3JlLXNoYXJlZC1saWIvc2VydmljZXMvYW5uYS1nbG9iYWwtY29uZmlnLnNlcnZpY2VcIjtcclxuXHJcbi8vIFVzZXIgZGVmaW5lZCBpbXBvcnQgc3RhdGVtZW50c1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogXCJhbm5hLWNvcmUtd2Vlay1jYWxlbmRhci1maWx0ZXItbGliXCIsXHJcbiAgICB0ZW1wbGF0ZVVybDogXCIuL2FubmEtd2Vlay1jYWxlbmRhci1maWx0ZXIuY29tcG9uZW50Lmh0bWxcIixcclxuICAgIHN0eWxlVXJsczogW1wiLi9hbm5hLXdlZWstY2FsZW5kYXItZmlsdGVyLmNvbXBvbmVudC5zY3NzXCJdLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICAgIGltcG9ydHM6IFtOZ0lmLCBGb3Jtc01vZHVsZSwgTmdiSW5wdXREYXRlcGlja2VyLCBOZ0NsYXNzLCBOZ2JEYXRlcGlja2VyXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFubmFXZWVrQ2FsZW5kYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgICBmcm9tRGF0ZTogTmdiRGF0ZSB8IG51bGw7XHJcbiAgICBob3ZlcmVkRGF0ZTogTmdiRGF0ZSB8IG51bGwgPSBudWxsO1xyXG4gICAgdG9EYXRlOiBOZ2JEYXRlIHwgbnVsbCA9IG51bGw7XHJcbiAgICB0b2RheTogTmdiRGF0ZTtcclxuXHJcbiAgICBtb2RlbDogTmdiRGF0ZVN0cnVjdDtcclxuXHJcbiAgICB3ZWVrTnVtYmVyczogc3RyaW5nW10gPSBbXTtcclxuICAgIHBpcGU6IERhdGVQaXBlO1xyXG4gICAgZGF0ZVRvRGlzcGxheTogc3RyaW5nID0gXCJcIjtcclxuICAgIHdlZWtPYmplY3RzOiBXZWVrT2JqZWN0W107XHJcbiAgICBtdWx0aVNlbGVjdERyb3Bkb3duT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgZGF0ZXBpY2tlcjogTmdiSW5wdXREYXRlcGlja2VyO1xyXG4gICAgcHJpdmF0ZSBmb3JtYXR0ZXI6IGFueTtcclxuICAgIHB1YmxpYyBmb3JtYXR0ZWRTdGFydERhdGU6IHN0cmluZztcclxuICAgIHB1YmxpYyBmb3JtYXR0ZWRFbmREYXRlOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIGNhbGVuZGFyTWFwID0gbmV3IE1hcCgpO1xyXG4gICAgcHJpdmF0ZSBmbGFnMTogYm9vbGVhbjtcclxuICAgIHByaXZhdGUgZmxhZzI6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBzZWxlY3RlZEZyb21EYXRlOiBOZ2JEYXRlU3RydWN0O1xyXG4gICAgQElucHV0KCkgc2VsZWN0ZWRFbmREYXRlOiBOZ2JEYXRlU3RydWN0O1xyXG4gICAgQElucHV0KCkgZGlzYWJsZWREYXRlczogTmdiRGF0ZVtdID0gW107XHJcbiAgICBASW5wdXQoKSBtYXhEYXRlOiBhbnk7XHJcbiAgICBASW5wdXQoKSBtaW5EYXRlOiBhbnk7XHJcblxyXG4gICAgZGlzYWJsZWRGdW5jOiBhbnk7XHJcbiAgICBzdGF0ZTogYW55O1xyXG5cclxuICAgIC8vIFNldHRpbmcgdGhlIGRlZmF1bHQgdmFsdWVzO1xyXG4gICAgcHJpdmF0ZSBkZWZhdWx0VmFsdWVzOiBJV2Vla0NhbGVuZGFyO1xyXG5cclxuICAgIEBJbnB1dCgpIGNvbmZpZzogSVdlZWtDYWxlbmRhcjtcclxuICAgIEBPdXRwdXQoKSBhcHBseVdlZWtDYWxlbmRhckNoYW5nZXMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBAT3V0cHV0KCkgY2FsZW5kYXJUb2dnbGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgICAgICAvLyBpZiBzb21lIHZhbHVlcyBhcmUgbm90IHNlbnQsIHNldHRpbmcgdGhlIGRlZmF1bHQgdmFsdWVzXHJcbiAgICAgICAgdGhpcy5kZWZhdWx0VmFsdWVzID0gdGhpcy5nbG9iYWxDb25maWdTZXJ2aWNlLmRlZmF1bHRXZWVrQ2FsZW5kYXJDb25maWc7XHJcbiAgICAgICAgdGhpcy5jb25maWcgPSB7IC4uLnRoaXMuZGVmYXVsdFZhbHVlcywgLi4udGhpcy5jb25maWcgfTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLnNlbGVjdEN1cnJlbnRXZWVrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZVdlZWtEYXRhKCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZyb21EYXRlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFdlZWsodGhpcy5mcm9tRGF0ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZm9ybWF0dGVyID0gdGhpcy5mb3JtYXR0ZWREYXRlcygpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEZyb21EYXRlICYmIHRoaXMuc2VsZWN0ZWRFbmREYXRlICYmIHRoaXMuY29uZmlnKSB7XHJcbiAgICAgICAgICAgIC8vIHRoaXMuc2VsZWN0V2Vlayh0aGlzLmZyb21EYXRlKTtcclxuICAgICAgICAgICAgdGhpcy5mcm9tRGF0ZSA9IE5nYkRhdGUuZnJvbSh0aGlzLnNlbGVjdGVkRnJvbURhdGUpO1xyXG4gICAgICAgICAgICB0aGlzLnRvRGF0ZSA9IE5nYkRhdGUuZnJvbSh0aGlzLnNlbGVjdGVkRW5kRGF0ZSk7XHJcbiAgICAgICAgICAgIHRoaXMud2Vla051bWJlckdlbmVyYXRvcigpO1xyXG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlUb1VJKCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q2FsZW5kYXJNYXAoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkRGF0ZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkRnVuYyA9IChkYXRlOiBOZ2JEYXRlLCBjdXJyZW50OiB7IG1vbnRoOiBudW1iZXIgfSkgPT4gdGhpcy5jaGVja0lmRGF0ZUlzRGlzYWJsZWQoZGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgY2FsZW5kYXI6IE5nYkNhbGVuZGFyLFxyXG4gICAgICAgIHByaXZhdGUgZGF0ZVBpY2tlckNvbmZpZzogTmdiRGF0ZXBpY2tlckNvbmZpZyxcclxuICAgICAgICBwcml2YXRlIGFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2U6IEFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBnbG9iYWxDb25maWdTZXJ2aWNlOiBBbm5hR2xvYmFsQ29uZmlnU2VydmljZSxcclxuICAgICkge31cclxuXHJcbiAgICBnZXRXZWVrTnVtYmVyKHdlZWs6IGFueSwgZmlyc3REYXlPZldlZWs6IGFueSkge1xyXG4gICAgICAgIGNvbnN0IHdlZWtTdGFydERhdGUgPSBkYXlqcyhjb252ZXJ0TmdiRGF0ZVRvTW9tZW50KHdlZWtbMF0pLCBcIk1NL0REL1lZWVlcIik7XHJcbiAgICAgICAgY29uc3Qgd2Vla1llYXIgPSB3ZWVrU3RhcnREYXRlLnllYXIoKTtcclxuICAgICAgICBjb25zdCB5ZWFyU3RhcnREYXRlID0gZGF5anMoYDAxLzAxLyR7d2Vla1llYXJ9YCwgXCJNTS9ERC9ZWVlZXCIpO1xyXG4gICAgICAgIGNvbnN0IHdlZWtEYXkgPSB5ZWFyU3RhcnREYXRlLmRheSgpO1xyXG5cclxuICAgICAgICBjb25zdCBub09mRGF5cyA9IHdlZWtTdGFydERhdGUuZGlmZih5ZWFyU3RhcnREYXRlLCBcImRcIikgKyAxO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiBjb252ZXJ0TmdiRGF0ZVRvTW9tZW50KG5nYkRhdGU6IE5nYkRhdGUpOiBzdHJpbmcge1xyXG4gICAgICAgICAgICBsZXQgY29udmVydGVkID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKG5nYkRhdGUgJiYgbmdiRGF0ZS5tb250aCAmJiBuZ2JEYXRlLmRheSAmJiBuZ2JEYXRlLnllYXIpIHtcclxuICAgICAgICAgICAgICAgIGNvbnZlcnRlZCA9IGAke25nYkRhdGUubW9udGh9LyR7bmdiRGF0ZS5kYXl9LyR7bmdiRGF0ZS55ZWFyfWA7XHJcbiAgICAgICAgICAgICAgICBjb252ZXJ0ZWQgPSBkYXlqcyhjb252ZXJ0ZWQpLmZvcm1hdChcIk1NL0REL1lZWVlcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrSWZZZWFySXNCcm9hZGNhc3RMZWFwWWVhcigpIHtcclxuICAgICAgICAgICAgY29uc3QgaXNMZWFwWWVhciA9ICh3ZWVrWWVhciAlIDQgPT09IDAgJiYgd2Vla1llYXIgJSAxMDAgIT09IDApIHx8IHdlZWtZZWFyICUgNDAwID09PSAwO1xyXG4gICAgICAgICAgICByZXR1cm4gKGlzTGVhcFllYXIgJiYgKHdlZWtEYXkgPT09IDAgfHwgd2Vla0RheSA9PT0gNikpIHx8ICghaXNMZWFwWWVhciAmJiB3ZWVrRGF5ID09PSAwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGlzTGVhcFllYXIgPSBjaGVja0lmWWVhcklzQnJvYWRjYXN0TGVhcFllYXIoKTtcclxuICAgICAgICBjb25zdCBkaXZpZGVyID0gaXNMZWFwWWVhciA/IDUzIDogNTI7XHJcbiAgICAgICAgY29uc3QgYWRkZXIgPSBpc0xlYXBZZWFyID8gMiA6IDE7XHJcblxyXG4gICAgICAgIGNvbnN0IGJyb2FkY2FzdE51bWJlck9mRGF5cyA9IHdlZWtEYXkgKyBub09mRGF5cztcclxuICAgICAgICBjb25zdCBicm9hZGNhc3RXZWVrTnVtYmVyID1cclxuICAgICAgICAgICAgYnJvYWRjYXN0TnVtYmVyT2ZEYXlzICUgNyA+IDAgPyBicm9hZGNhc3ROdW1iZXJPZkRheXMgLyA3ICsgYWRkZXIgOiBicm9hZGNhc3ROdW1iZXJPZkRheXMgLyA3O1xyXG5cclxuICAgICAgICBpZiAoTWF0aC5mbG9vcihicm9hZGNhc3RXZWVrTnVtYmVyICUgZGl2aWRlcikgPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGRpdmlkZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKGJyb2FkY2FzdFdlZWtOdW1iZXIgJSBkaXZpZGVyKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICAgICAgLy8gQ0hBTkdFU0BBTk5BTElCIENoYW5nZWQgdGhpcy5cclxuICAgICAgICAvLyB0aGlzLmNhbGVuZGFyW1wiX19wcm90b19fXCJdLmdldFdlZWtOdW1iZXIgPSB0aGlzLmdldFdlZWtOdW1iZXI7XHJcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMuY2FsZW5kYXIsIHsgZ2V0V2Vla051bWJlcjogdGhpcy5nZXRXZWVrTnVtYmVyIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIC8vIHRoaXMuc2VsZWN0V2Vlayh0aGlzLmZyb21EYXRlKTtcclxuICAgICAgICB0aGlzLnNldENhbGVuZGFyTWFwKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdGlhbGl6ZVdlZWtEYXRhKCkge1xyXG4gICAgICAgIHRoaXMud2Vla09iamVjdHMgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5mcm9tRGF0ZSA9IHRoaXMuY2FsZW5kYXIuZ2V0VG9kYXkoKTtcclxuICAgICAgICB0aGlzLnRvZGF5ID0gdGhpcy5jYWxlbmRhci5nZXRUb2RheSgpO1xyXG5cclxuICAgICAgICBjb25zdCBiYWNrRGF0ZWRQZXJpb2QgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwidXNlckRldGFpbHNcIikgfHwgXCJ7fVwiKS5sb2NraW5nX3BlcmlvZF9kYXlzO1xyXG4gICAgICAgIGlmIChiYWNrRGF0ZWRQZXJpb2QgPCAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGU6IE5nYkRhdGUgPSB0aGlzLmNhbGVuZGFyLmdldFByZXYodGhpcy5jYWxlbmRhci5nZXRUb2RheSgpLCBcImRcIiwgTWF0aC5hYnMoYmFja0RhdGVkUGVyaW9kKSk7XHJcbiAgICAgICAgICAgIHRoaXMudG9kYXkgPSBOZ2JEYXRlLmZyb20oZGF0ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuZnJvbURhdGUgPSBOZ2JEYXRlLmZyb20oZGF0ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBEaXNhYmxlIG1vbnRocyBiZWZvcmUgbnVtYmVyT2ZNb250aHNUb0VuYWJsZVxyXG4gICAgICAgIHRoaXMuZGF0ZVBpY2tlckNvbmZpZy5tYXJrRGlzYWJsZWQgPSAoZGF0ZTogTmdiRGF0ZVN0cnVjdCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBwcmV2aW91c01vbnRoID0gdGhpcy5jYWxlbmRhci5nZXRQcmV2KHRoaXMudG9kYXksIFwibVwiLCB0aGlzLmNvbmZpZy5udW1iZXJPZk1vbnRoc1RvRW5hYmxlSW5QYXN0KTtcclxuICAgICAgICAgICAgY29uc3QgcHJldmlvdXNEYXkgPSB0aGlzLmNhbGVuZGFyLmdldFByZXYocHJldmlvdXNNb250aCwgXCJkXCIsIDEpO1xyXG4gICAgICAgICAgICByZXR1cm4gIU5nYkRhdGUuZnJvbShwcmV2aW91c0RheSkuYmVmb3JlKGRhdGUpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5mb3JtYXR0ZXIgPSB0aGlzLmZvcm1hdHRlZERhdGVzKCk7XHJcbiAgICAgICAgdGhpcy5mbGFnMSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZmxhZzIgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RXZWVrKGRhdGU6IE5nYkRhdGUpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBkYXRlT2JqZWN0ID0gbmV3IERhdGUoZGF0ZS55ZWFyLCBkYXRlLm1vbnRoIC0gMSwgZGF0ZS5kYXkpO1xyXG4gICAgICAgIGxldCBjb25zdHJ1Y3REYXRlID0gdGhpcy5idWlsZERhdGUoZGF0ZU9iamVjdCk7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5jb25maWcuc2VsZWN0TXVsdGlwbGVXZWVrcykge1xyXG4gICAgICAgICAgICAvLyBTaW5nbGUgd2VlayBzZWxlY3Rpb25cclxuICAgICAgICAgICAgdGhpcy5mcm9tRGF0ZSA9IHRoaXMuY29uc3RydWN0U3RhcnREYXRlKGRhdGVPYmplY3QpKGNvbnN0cnVjdERhdGUpO1xyXG4gICAgICAgICAgICB0aGlzLnRvRGF0ZSA9IHRoaXMuY29uc3RydWN0RW5kRGF0ZShkYXRlT2JqZWN0KShjb25zdHJ1Y3REYXRlKTtcclxuICAgICAgICAgICAgdGhpcy53ZWVrTnVtYmVyR2VuZXJhdG9yKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGRhdGUuYmVmb3JlKHRoaXMuZnJvbURhdGUpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZyb21EYXRlID0gdGhpcy5jb25zdHJ1Y3RTdGFydERhdGUoZGF0ZU9iamVjdCkoY29uc3RydWN0RGF0ZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5mbGFnMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9EYXRlID0gdGhpcy5jb25zdHJ1Y3RFbmREYXRlKGRhdGVPYmplY3QpKGNvbnN0cnVjdERhdGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5mbGFnMSA9ICF0aGlzLmZsYWcxO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGUuYWZ0ZXIodGhpcy50b0RhdGUpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5mbGFnMikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZnJvbURhdGUgPSB0aGlzLmNvbnN0cnVjdFN0YXJ0RGF0ZShkYXRlT2JqZWN0KShjb25zdHJ1Y3REYXRlKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLnRvRGF0ZSA9IHRoaXMuY29uc3RydWN0RW5kRGF0ZShkYXRlT2JqZWN0KShjb25zdHJ1Y3REYXRlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuZmxhZzIgPSAhdGhpcy5mbGFnMjtcclxuICAgICAgICAgICAgICAgIHRoaXMudG9EYXRlID0gdGhpcy5jb25zdHJ1Y3RFbmREYXRlKGRhdGVPYmplY3QpKGNvbnN0cnVjdERhdGUpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mcm9tRGF0ZSA9IHRoaXMuY29uc3RydWN0U3RhcnREYXRlKGRhdGVPYmplY3QpKGNvbnN0cnVjdERhdGUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b0RhdGUgPSB0aGlzLmNvbnN0cnVjdEVuZERhdGUoZGF0ZU9iamVjdCkoY29uc3RydWN0RGF0ZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRpc2FibGVkRGF0ZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGF5anNTdGFydERhdGUgPSBkYXlqcyhcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UuY29udmVydE5nYkRhdGVUb01vbWVudCh0aGlzLmZyb21EYXRlKSxcclxuICAgICAgICAgICAgICAgICAgICBcIk1NL0REL1lZWVlcIixcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkYXlqc0VuZERhdGUgPSBkYXlqcyhcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UuY29udmVydE5nYkRhdGVUb01vbWVudCh0aGlzLnRvRGF0ZSksXHJcbiAgICAgICAgICAgICAgICAgICAgXCJNTS9ERC9ZWVlZXCIsXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgbGV0IG5nYkRhdGU7XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoIWRheWpzU3RhcnREYXRlLmlzU2FtZShkYXlqc0VuZERhdGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmdiRGF0ZSA9IHRoaXMuYW5uYURhdGVUaW1lRm9ybWF0U2VydmljZS5jb252ZXJ0VG9OZ2JEYXRlKGRheWpzU3RhcnREYXRlLCBcIk1NL0REL1lZWVlcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hlY2tJZkRhdGVJc0Rpc2FibGVkKG5nYkRhdGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBkYXlqc1N0YXJ0RGF0ZS5hZGQoMSwgXCJkXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3RGF0ZU9iamVjdCA9IG5ldyBEYXRlKG5nYkRhdGUueWVhciwgbmdiRGF0ZS5tb250aCAtIDEsIG5nYkRhdGUuZGF5IC0gMSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdHJ1Y3REYXRlID0gdGhpcy5idWlsZERhdGUobmV3RGF0ZU9iamVjdCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvRGF0ZSA9IHRoaXMuY29uc3RydWN0RW5kRGF0ZShuZXdEYXRlT2JqZWN0KShjb25zdHJ1Y3REYXRlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy53ZWVrTnVtYmVyR2VuZXJhdG9yKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuY29uZmlnLnNob3dBc0Ryb3Bkb3duKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHlDaGFuZ2VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHdlZWtOdW1iZXJHZW5lcmF0b3IoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZGF0ZXMgPSBbXTtcclxuICAgICAgICBsZXQgd2VlayA9IFtdO1xyXG5cclxuICAgICAgICBsZXQgc3RhcnREYXRlID0gTmdiRGF0ZS5mcm9tKHRoaXMuZnJvbURhdGUpO1xyXG4gICAgICAgIGNvbnN0IGVuZERhdGUgPSBOZ2JEYXRlLmZyb20odGhpcy50b0RhdGUpO1xyXG5cclxuICAgICAgICB3ZWVrLnB1c2goc3RhcnREYXRlKTtcclxuICAgICAgICB3aGlsZSAoZW5kRGF0ZSAhPSBudWxsICYmICFzdGFydERhdGUuZXF1YWxzKGVuZERhdGUpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLmNhbGVuZGFyLmdldE5leHQoc3RhcnREYXRlLCBcImRcIiwgMSk7XHJcbiAgICAgICAgICAgIHN0YXJ0RGF0ZSA9IGRhdGU7XHJcbiAgICAgICAgICAgIHdlZWsucHVzaChkYXRlKTtcclxuXHJcbiAgICAgICAgICAgIC8vIENvbGxlY3QgYWxsIGRheXMgaW4gd2VlayB0byBjYWxjdWxhdGUgdGhlIHdlZWsgbnVtYmVyXHJcbiAgICAgICAgICAgIGlmICh3ZWVrLmxlbmd0aCA9PT0gNykge1xyXG4gICAgICAgICAgICAgICAgZGF0ZXMucHVzaCh3ZWVrKTtcclxuICAgICAgICAgICAgICAgIHdlZWsgPSBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoKHRoaXMuY29uZmlnLm1heFdlZWtzVG9TZWxlY3QgPz8gMCkgPiAwICYmIGRhdGVzLmxlbmd0aCA+ICh0aGlzLmNvbmZpZy5tYXhXZWVrc1RvU2VsZWN0ID8/IDApKSB7XHJcbiAgICAgICAgICAgIGRhdGVzLnNwbGljZSh0aGlzLmNvbmZpZy5tYXhXZWVrc1RvU2VsZWN0ID8/IDAsIGRhdGVzLmxlbmd0aCAtICh0aGlzLmNvbmZpZy5tYXhXZWVrc1RvU2VsZWN0ID8/IDApKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVzKGRhdGVzKTtcclxuXHJcbiAgICAgICAgdGhpcy53ZWVrTnVtYmVycyA9IFtdO1xyXG4gICAgICAgIHRoaXMud2Vla09iamVjdHMgPSBbXTtcclxuXHJcbiAgICAgICAgZGF0ZXMuZm9yRWFjaCgoZGF0ZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLndlZWtOdW1iZXJzLnB1c2goYCBXZWVrICR7dGhpcy5jYWxlbmRhci5nZXRXZWVrTnVtYmVyKGRhdGUsIHRoaXMuY29uZmlnLmZpcnN0RGF5T2ZXZWVrKX1gKTtcclxuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkRGF0ZXMgPSB0aGlzLmZvcm1hdHRlcihkYXRlWzBdLCBkYXRlWzZdKTtcclxuICAgICAgICAgICAgY29uc3QgZGF0ZU9iamVjdHMgPSB7XHJcbiAgICAgICAgICAgICAgICBzdGFydERhdGU6IGZvcm1hdHRlZERhdGVzLmZvcm1hdHRlZFN0YXJ0RGF0ZSxcclxuICAgICAgICAgICAgICAgIGVuZERhdGU6IGZvcm1hdHRlZERhdGVzLmZvcm1hdHRlZEVuZERhdGUsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMud2Vla09iamVjdHMucHVzaChkYXRlT2JqZWN0cyk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZGlzcGxheVRvVUkoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RlZERhdGVzKGRhdGVzOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmZyb21EYXRlID0gZGF0ZXNbMF1bMF07XHJcbiAgICAgICAgdGhpcy50b0RhdGUgPSBkYXRlc1tkYXRlcy5sZW5ndGggLSAxXVs2XTtcclxuICAgIH1cclxuXHJcbiAgICBmb3JtYXR0ZWREYXRlcygpIHtcclxuICAgICAgICBjb25zdCBwaXBlID0gbmV3IERhdGVQaXBlKFwiZW4tVVNcIik7XHJcbiAgICAgICAgcmV0dXJuIChmcm9tRGF0ZTogTmdiRGF0ZSwgdG9EYXRlOiBOZ2JEYXRlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZyb21EYXRlT2JqZWN0ID0gbmV3IERhdGUoZnJvbURhdGUueWVhciwgZnJvbURhdGUubW9udGggLSAxLCBmcm9tRGF0ZS5kYXkpO1xyXG4gICAgICAgICAgICBjb25zdCB0b0RhdGVPYmplY3QgPSBuZXcgRGF0ZSh0b0RhdGUueWVhciwgdG9EYXRlLm1vbnRoIC0gMSwgdG9EYXRlLmRheSk7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0dGVkU3RhcnREYXRlID0gcGlwZS50cmFuc2Zvcm0oZnJvbURhdGVPYmplY3QsIHRoaXMuY29uZmlnLmRhdGVGb3JtYXRGb3JSZXF1ZXN0KTtcclxuICAgICAgICAgICAgdGhpcy5mb3JtYXR0ZWRFbmREYXRlID0gcGlwZS50cmFuc2Zvcm0odG9EYXRlT2JqZWN0LCB0aGlzLmNvbmZpZy5kYXRlRm9ybWF0Rm9yUmVxdWVzdCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmRhdGVUb0Rpc3BsYXkgPSBgJHtwaXBlLnRyYW5zZm9ybShcclxuICAgICAgICAgICAgICAgIGZyb21EYXRlT2JqZWN0LFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcuZGF0ZUZvcm1hdFRvRGlzcGxheSxcclxuICAgICAgICAgICAgKX0gdG8gJHtwaXBlLnRyYW5zZm9ybSh0b0RhdGVPYmplY3QsIHRoaXMuY29uZmlnLmRhdGVGb3JtYXRUb0Rpc3BsYXkpfWA7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgZGlzcGxheVRvVUkoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvbmZpZy5zZWxlY3RNdWx0aXBsZVdlZWtzICYmIHRoaXMuZnJvbURhdGUgJiYgdGhpcy50b0RhdGUpIHtcclxuICAgICAgICAgICAgLy8gRGlzcGxheSBmb3Igb25seSBTaW5nbGUgV2Vla1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1hdHRlcih0aGlzLmZyb21EYXRlLCB0aGlzLnRvRGF0ZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLndlZWtOdW1iZXJzLmxlbmd0aCA+ICh0aGlzLmNvbmZpZy5tYXhXZWVrc1RvU2hvd1dpdGhSZW1haW5pbmdDb3VudCA/PyAwKSkge1xyXG4gICAgICAgICAgICAvLyBEaXNwbGF5IGZvciBNdWx0aXBsZSBXZWVrc1xyXG4gICAgICAgICAgICBjb25zdCB3ZWVrRGlzcGxheSA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8ICh0aGlzLmNvbmZpZy5tYXhXZWVrc1RvU2hvd1dpdGhSZW1haW5pbmdDb3VudCA/PyAwKTsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB3ZWVrRGlzcGxheS5wdXNoKHRoaXMud2Vla051bWJlcnMuc2hpZnQoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgcmVtYWluaW5nV2Vla3MgPSB0aGlzLndlZWtOdW1iZXJzLmxlbmd0aDtcclxuICAgICAgICAgICAgdGhpcy53ZWVrTnVtYmVycyA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLndlZWtOdW1iZXJzLnB1c2goYCR7d2Vla0Rpc3BsYXl9ICske3JlbWFpbmluZ1dlZWtzfWApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3RTdGFydERhdGUoZGF0ZTogRGF0ZSkge1xyXG4gICAgICAgIGNvbnN0IHsgZmlyc3REYXlPZldlZWsgfSA9IHRoaXMuY29uZmlnO1xyXG4gICAgICAgIHJldHVybiAoY29uc3RydWN0RGF0ZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0RGF5ID0gZGF0ZS5nZXREYXkoKSAhPT0gMCA/IChmaXJzdERheU9mV2VlayA/PyAwKSAtIGRhdGUuZ2V0RGF5KCkgOiAtNjtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdERhdGUoc3RhcnREYXkpO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0RW5kRGF0ZShkYXRlOiBEYXRlKSB7XHJcbiAgICAgICAgY29uc3QgeyBmaXJzdERheU9mV2VlayB9ID0gdGhpcy5jb25maWc7XHJcbiAgICAgICAgcmV0dXJuIChjb25zdHJ1Y3REYXRlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZW5kRGF5ID0gZGF0ZS5nZXREYXkoKSAhPT0gMCA/IChmaXJzdERheU9mV2VlayA/PyAwKSArIDYgLSBkYXRlLmdldERheSgpIDogMDtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdERhdGUoZW5kRGF5KTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGJ1aWxkRGF0ZShkYXRlOiBEYXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIChudW1iZXI6IG51bWJlcik6IE5nYkRhdGUgfCBudWxsID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZGF5ID0gZGF0ZS5nZXREYXRlKCkgKyBudW1iZXI7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGVPYmplY3QgPSBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF5KTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG5nYkRhdGVPYmplY3QgPSB7fSBhcyBOZ2JEYXRlO1xyXG4gICAgICAgICAgICBuZ2JEYXRlT2JqZWN0LmRheSA9IGRheTtcclxuXHJcbiAgICAgICAgICAgIGlmIChuZ2JEYXRlT2JqZWN0LmRheSA+IDMxIHx8IG5nYkRhdGVPYmplY3QuZGF5IDwgMSkge1xyXG4gICAgICAgICAgICAgICAgbmdiRGF0ZU9iamVjdC5kYXkgPSBkYXRlT2JqZWN0LmdldERhdGUoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbmdiRGF0ZU9iamVjdC5tb250aCA9IGRhdGVPYmplY3QuZ2V0TW9udGgoKSArIDE7XHJcbiAgICAgICAgICAgIG5nYkRhdGVPYmplY3QueWVhciA9IGRhdGVPYmplY3QuZ2V0RnVsbFllYXIoKTtcclxuICAgICAgICAgICAgcmV0dXJuIE5nYkRhdGUuZnJvbShuZ2JEYXRlT2JqZWN0KTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGlzSG92ZXJlZChkYXRlOiBOZ2JEYXRlKTogYm9vbGVhbiB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIHRoaXMuZnJvbURhdGUgJiZcclxuICAgICAgICAgICAgIXRoaXMudG9EYXRlICYmXHJcbiAgICAgICAgICAgIHRoaXMuaG92ZXJlZERhdGUgJiZcclxuICAgICAgICAgICAgZGF0ZS5hZnRlcih0aGlzLmZyb21EYXRlKSAmJlxyXG4gICAgICAgICAgICBkYXRlLmJlZm9yZSh0aGlzLmhvdmVyZWREYXRlKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNJbnNpZGUoZGF0ZTogTmdiRGF0ZSk6IGJvb2xlYW4gfCBudWxsIHtcclxuICAgICAgICByZXR1cm4gdGhpcy50b0RhdGUgJiYgZGF0ZS5hZnRlcih0aGlzLmZyb21EYXRlKSAmJiBkYXRlLmJlZm9yZSh0aGlzLnRvRGF0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNSYW5nZShkYXRlOiBOZ2JEYXRlKTogYm9vbGVhbiB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIGRhdGUuZXF1YWxzKHRoaXMuZnJvbURhdGUpIHx8XHJcbiAgICAgICAgICAgICh0aGlzLnRvRGF0ZSAmJiBkYXRlLmVxdWFscyh0aGlzLnRvRGF0ZSkpIHx8XHJcbiAgICAgICAgICAgIHRoaXMuaXNJbnNpZGUoZGF0ZSkgfHxcclxuICAgICAgICAgICAgdGhpcy5pc0hvdmVyZWQoZGF0ZSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHByZXZpb3VzV2VlaygpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5mcm9tRGF0ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvRGF0ZSA9IHRoaXMuY2FsZW5kYXIuZ2V0UHJldih0aGlzLmZyb21EYXRlLCBcImRcIiwgMSk7XHJcbiAgICAgICAgICAgIHRoaXMuZnJvbURhdGUgPSB0aGlzLmNhbGVuZGFyLmdldFByZXYodGhpcy5mcm9tRGF0ZSwgXCJkXCIsIHRoaXMuY2FsZW5kYXIuZ2V0RGF5c1BlcldlZWsoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMud2Vla051bWJlckdlbmVyYXRvcigpO1xyXG4gICAgICAgIHRoaXMuYXBwbHlDaGFuZ2VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmV4dFdlZWsoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZnJvbURhdGUpIHtcclxuICAgICAgICAgICAgdGhpcy5mcm9tRGF0ZSA9IHRoaXMuY2FsZW5kYXIuZ2V0TmV4dCh0aGlzLmZyb21EYXRlLCBcImRcIiwgdGhpcy5jYWxlbmRhci5nZXREYXlzUGVyV2VlaygpKTtcclxuICAgICAgICAgICAgdGhpcy50b0RhdGUgPSB0aGlzLmNhbGVuZGFyLmdldE5leHQodGhpcy5mcm9tRGF0ZSwgXCJkXCIsIHRoaXMuY2FsZW5kYXIuZ2V0RGF5c1BlcldlZWsoKSAtIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLndlZWtOdW1iZXJHZW5lcmF0b3IoKTtcclxuICAgICAgICB0aGlzLmFwcGx5Q2hhbmdlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldENhbGVuZGFyTWFwKCkge1xyXG4gICAgICAgIGNvbnN0IGRhdGVPYmogPSB7IGZyb21EYXRlOiB0aGlzLmZyb21EYXRlLCB0b0RhdGU6IHRoaXMudG9EYXRlIH07XHJcbiAgICAgICAgdGhpcy5jYWxlbmRhck1hcC5zZXQoXCJvbGREYXRlc1wiLCBkYXRlT2JqKTtcclxuICAgIH1cclxuXHJcbiAgICBhcHBseUNoYW5nZXMoKSB7XHJcbiAgICAgICAgdGhpcy5tdWx0aVNlbGVjdERyb3Bkb3duT3BlbiA9IGZhbHNlO1xyXG4gICAgICAgIGlmICghdGhpcy5jb25maWcuZW1pdE11bHRpcGxlV2Vla09iamVjdHMpIHtcclxuICAgICAgICAgICAgY29uc3QgZGF0ZXMgPSB7fSBhcyBXZWVrT2JqZWN0O1xyXG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWREYXRlcyA9IHRoaXMuZm9ybWF0dGVyKHRoaXMuZnJvbURhdGUsIHRoaXMudG9EYXRlKTtcclxuICAgICAgICAgICAgZGF0ZXMuc3RhcnREYXRlID0gZm9ybWF0dGVkRGF0ZXMuZm9ybWF0dGVkU3RhcnREYXRlO1xyXG4gICAgICAgICAgICBkYXRlcy5lbmREYXRlID0gZm9ybWF0dGVkRGF0ZXMuZm9ybWF0dGVkRW5kRGF0ZTtcclxuICAgICAgICAgICAgdGhpcy5hcHBseVdlZWtDYWxlbmRhckNoYW5nZXMuZW1pdChkYXRlcyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5hcHBseVdlZWtDYWxlbmRhckNoYW5nZXMuZW1pdCh0aGlzLndlZWtPYmplY3RzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRDYWxlbmRhck1hcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlzRm9jdXNlZCh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5jYWxlbmRhclRvZ2dsZWQuZW1pdCh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNEcm9wZG93bk9wZW5lZEZvckNhbGVuZGFyKGRhdGVwaWNrZXI6IE5nYklucHV0RGF0ZXBpY2tlcikge1xyXG4gICAgICAgIHRoaXMuZGF0ZXBpY2tlciA9IGRhdGVwaWNrZXI7XHJcbiAgICAgICAgaWYgKHRoaXMuZGF0ZXBpY2tlci5pc09wZW4oKSkge1xyXG4gICAgICAgICAgICB0aGlzLnJldmVydERhdGVzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0ZXBpY2tlci5jbG9zZSgpO1xyXG4gICAgICAgICAgICB0aGlzLm11bHRpU2VsZWN0RHJvcGRvd25PcGVuID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRlcGlja2VyLm9wZW4oKTtcclxuICAgICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdERyb3Bkb3duT3BlbiA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldmVydERhdGVzKCkge1xyXG4gICAgICAgIHRoaXMubXVsdGlTZWxlY3REcm9wZG93bk9wZW4gPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5jYWxlbmRhck1hcC5nZXQoXCJvbGREYXRlc1wiKSkge1xyXG4gICAgICAgICAgICBjb25zdCBkYXRlT2JqID0gdGhpcy5jYWxlbmRhck1hcC5nZXQoXCJvbGREYXRlc1wiKTtcclxuICAgICAgICAgICAgdGhpcy5mcm9tRGF0ZSA9IGRhdGVPYmouZnJvbURhdGU7XHJcbiAgICAgICAgICAgIHRoaXMudG9EYXRlID0gZGF0ZU9iai50b0RhdGU7XHJcbiAgICAgICAgICAgIHRoaXMud2Vla051bWJlckdlbmVyYXRvcigpO1xyXG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlUb1VJKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNoZWNrSWZEYXRlSXNEaXNhYmxlZChkYXRlOiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCB2YWxpZGF0b3JGdW5jID0gKG5nYkRhdGU6IE5nYkRhdGUpID0+XHJcbiAgICAgICAgICAgIG5nYkRhdGUueWVhciA9PT0gZGF0ZS55ZWFyICYmIG5nYkRhdGUubW9udGggPT09IGRhdGUubW9udGggJiYgbmdiRGF0ZS5kYXkgPT09IGRhdGUuZGF5O1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkRGF0ZXMuc29tZSh2YWxpZGF0b3JGdW5jKTtcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZURhdGVwaWNrZXIoZGF0ZXBpY2tlclJlZjogYW55KSB7XHJcbiAgICAgICAgZGF0ZXBpY2tlclJlZi5jbG9zZSgpO1xyXG4gICAgfVxyXG59XHJcbiIsIjxmb3JtXHJcbiAgICBjbGFzcz1cImZvcm0taW5saW5lXCJcclxuICAgICpuZ0lmPVwiY29uZmlnLnNob3dBc0Ryb3Bkb3duXCJcclxuPlxyXG4gICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgaGlkZGVuXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgbmFtZT1cImRhdGVwaWNrZXIgZC1ub25lXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcclxuICAgICAgICAgICAgICAgIG5nYkRhdGVwaWNrZXJcclxuICAgICAgICAgICAgICAgICNkYXRlcGlja2VyPVwibmdiRGF0ZXBpY2tlclwiXHJcbiAgICAgICAgICAgICAgICBbYXV0b0Nsb3NlXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgIChkYXRlU2VsZWN0KT1cInNlbGVjdFdlZWsoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAoY2xvc2VkKT1cImlzRm9jdXNlZChmYWxzZSlcIlxyXG4gICAgICAgICAgICAgICAgW2Rpc3BsYXlNb250aHNdPVwiMVwiXHJcbiAgICAgICAgICAgICAgICBbZGF5VGVtcGxhdGVdPVwidFwiXHJcbiAgICAgICAgICAgICAgICBbc3RhcnREYXRlXT1cImZyb21EYXRlIVwiXHJcbiAgICAgICAgICAgICAgICBbZmlyc3REYXlPZldlZWtdPVwiY29uZmlnLmZpcnN0RGF5T2ZXZWVrXCJcclxuICAgICAgICAgICAgICAgIFtzaG93V2Vla051bWJlcnNdPVwiY29uZmlnLnNob3dXZWVrTnVtYmVyc1wiXHJcbiAgICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcclxuICAgICAgICAgICAgICAgIFtmb290ZXJUZW1wbGF0ZV09XCJmb290ZXJUZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tU2luZ2xlIHdlZWsgc2VsZWN0LS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiIWNvbmZpZy5zZWxlY3RNdWx0aXBsZVdlZWtzXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ3ZWVrbnVtYmVycy1sYWJlbFwiPiAmbmJzcDt7eyB3ZWVrTnVtYmVycyB9fSA8L3NwYW4+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2luZ2xlLXdlZWtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBuZXh0LXJvdW5kLWJ0blwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicHJldmlvdXNXZWVrKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0ZV9uZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgI2RwRnJvbURhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBXZWVrc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIltjb25maWcuY3VzdG9tQ2xhc3MgPT09ICcnID8gJycgOiBjb25maWcuY3VzdG9tQ2xhc3NdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImRwRnJvbURhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZGF0ZVRvRGlzcGxheVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImlzRm9jdXNlZCh0cnVlKTsgaXNEcm9wZG93bk9wZW5lZEZvckNhbGVuZGFyKGRhdGVwaWNrZXIpXCJcclxuICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1tZW51LWRvd25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFkYXRlcGlja2VyLmlzT3BlbigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRhdGVwaWNrZXIub3BlbigpXCJcclxuICAgICAgICAgICAgICAgICAgICA+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1tZW51LXVwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkYXRlcGlja2VyLmlzT3BlbigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImlzRHJvcGRvd25PcGVuZWRGb3JDYWxlbmRhcihkYXRlcGlja2VyKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgcm91bmQtYnRuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJuZXh0V2VlaygpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdGVfbmV4dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tTXVsdGlwbGUgd2VlayBzZWxlY3QtLT5cclxuICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cImZvcm0tZ3JvdXBcIlxyXG4gICAgICAgICpuZ0lmPVwiY29uZmlnLnNlbGVjdE11bHRpcGxlV2Vla3NcIlxyXG4gICAgPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXVsdGlwbGUtd2Vla3NcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICNkcEZyb21EYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IFdlZWtzXCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJbY29uZmlnLmN1c3RvbUNsYXNzID09PSAnJyA/ICcnIDogY29uZmlnLmN1c3RvbUNsYXNzXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZT1cImRwRnJvbURhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwid2Vla051bWJlcnNcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJpc0ZvY3VzZWQodHJ1ZSk7IGlzRHJvcGRvd25PcGVuZWRGb3JDYWxlbmRhcihkYXRlcGlja2VyKVwiXHJcbiAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFtdWx0aVNlbGVjdERyb3Bkb3duT3BlblwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLW1lbnUtZG93biBtdWx0aXNlbGVjdC1pbnB1dC1hcnJvd1wiXHJcbiAgICAgICAgICAgICAgICA+PC9pPlxyXG4gICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm11bHRpU2VsZWN0RHJvcGRvd25PcGVuXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktbWVudS11cCBtdWx0aXNlbGVjdC1pbnB1dC1hcnJvd1wiXHJcbiAgICAgICAgICAgICAgICA+PC9pPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Zvcm0+XHJcblxyXG48bmdiLWRhdGVwaWNrZXJcclxuICAgICN3ZWVrUGlja2VyXHJcbiAgICAqbmdJZj1cIiFjb25maWcuc2hvd0FzRHJvcGRvd25cIlxyXG4gICAgW2Rpc3BsYXlNb250aHNdPVwiMVwiXHJcbiAgICBbc3RhcnREYXRlXT1cImZyb21EYXRlIVwiXHJcbiAgICBbZmlyc3REYXlPZldlZWtdPVwiY29uZmlnLmZpcnN0RGF5T2ZXZWVrXCJcclxuICAgIFtzaG93V2Vla051bWJlcnNdPVwiY29uZmlnLnNob3dXZWVrTnVtYmVyc1wiXHJcbiAgICBbZGF5VGVtcGxhdGVdPVwidFwiXHJcbiAgICBbbWF4RGF0ZV09XCJtYXhEYXRlXCJcclxuICAgIFttaW5EYXRlXT1cIm1pbkRhdGVcIlxyXG4gICAgKGRhdGVTZWxlY3QpPVwic2VsZWN0V2VlaygkZXZlbnQpXCJcclxuICAgIFttYXJrRGlzYWJsZWRdPVwiZGlzYWJsZWRGdW5jXCJcclxuPlxyXG48L25nYi1kYXRlcGlja2VyPlxyXG5cclxuPG5nLXRlbXBsYXRlICNmb290ZXJUZW1wbGF0ZT5cclxuICAgIDxociBjbGFzcz1cIm15LTBcIiAvPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbSBtLTIgZmxvYXQtcmlnaHQgYXBwbHktYnRuXCJcclxuICAgICAgICAoY2xpY2spPVwiYXBwbHlDaGFuZ2VzKCk7IGNsb3NlRGF0ZXBpY2tlcihkYXRlcGlja2VyKVwiXHJcbiAgICA+XHJcbiAgICAgICAgQXBwbHlcclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbSBtLTIgZmxvYXQtcmlnaHQgY2FuY2VsLWJ0blwiXHJcbiAgICAgICAgKGNsaWNrKT1cInJldmVydERhdGVzKCk7IGNsb3NlRGF0ZXBpY2tlcihkYXRlcGlja2VyKVwiXHJcbiAgICA+XHJcbiAgICAgICAgQ2FuY2VsXHJcbiAgICA8L2J1dHRvbj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZVxyXG4gICAgI3RcclxuICAgIGxldC1kYXRlXHJcbiAgICBsZXQtZm9jdXNlZD1cImZvY3VzZWRcIlxyXG4gICAgbGV0LWRpc2FibGVkPVwiZGlzYWJsZWRcIlxyXG4+XHJcbiAgICA8c3BhblxyXG4gICAgICAgIGNsYXNzPVwiY3VzdG9tLWRheVwiXHJcbiAgICAgICAgW2NsYXNzLmZvY3VzZWRdPVwiZm9jdXNlZFwiXHJcbiAgICAgICAgW2NsYXNzLnJhbmdlXT1cImlzUmFuZ2UoZGF0ZSlcIlxyXG4gICAgICAgIFtjbGFzcy5mYWRlZF09XCJpc0hvdmVyZWQoZGF0ZSkgfHwgaXNJbnNpZGUoZGF0ZSlcIlxyXG4gICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJkaXNhYmxlZFwiXHJcbiAgICAgICAgKG1vdXNlZW50ZXIpPVwiaG92ZXJlZERhdGUgPSBkYXRlXCJcclxuICAgICAgICAobW91c2VsZWF2ZSk9XCJob3ZlcmVkRGF0ZSA9IG51bGxcIlxyXG4gICAgPlxyXG4gICAgICAgIHt7IGRhdGUuZGF5IH19XHJcbiAgICA8L3NwYW4+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==