@acorex/components 18.14.0 → 18.14.1-next.1
Sign up to get free protection for your applications and to get access to all the features.
- package/calendar/lib/calendar.component.d.ts +16 -5
- package/calendar/lib/calendar.module.d.ts +2 -1
- package/check-box/lib/check-box.component.d.ts +13 -5
- package/cron-job/README.md +3 -0
- package/cron-job/index.d.ts +8 -0
- package/cron-job/lib/cron-job-container/cron-job-container.component.d.ts +31 -0
- package/cron-job/lib/cron-job.module.d.ts +25 -0
- package/cron-job/lib/cron-job.service.d.ts +22 -0
- package/cron-job/lib/day/day.component.d.ts +22 -0
- package/cron-job/lib/day/day.model.d.ts +61 -0
- package/cron-job/lib/day/day.service.d.ts +17 -0
- package/cron-job/lib/hours/hours.component.d.ts +14 -0
- package/cron-job/lib/hours/hours.model.d.ts +5 -0
- package/cron-job/lib/hours/hours.service.d.ts +13 -0
- package/cron-job/lib/minutes/minutes.component.d.ts +14 -0
- package/cron-job/lib/minutes/minutes.model.d.ts +5 -0
- package/cron-job/lib/minutes/minutes.service.d.ts +13 -0
- package/cron-job/lib/month/month.component.d.ts +16 -0
- package/cron-job/lib/month/month.model.d.ts +5 -0
- package/cron-job/lib/month/month.service.d.ts +14 -0
- package/cron-job/lib/seconds/seconds.component.d.ts +14 -0
- package/cron-job/lib/seconds/seconds.model.d.ts +5 -0
- package/cron-job/lib/seconds/seconds.service.d.ts +13 -0
- package/cron-job/lib/types/iexpression.d.ts +3 -0
- package/cron-job/lib/types/shared.model.d.ts +37 -0
- package/cron-job/lib/year/year.component.d.ts +15 -0
- package/cron-job/lib/year/year.model.d.ts +16 -0
- package/cron-job/lib/year/year.service.d.ts +12 -0
- package/datetime-input/lib/datetime-input.component.d.ts +9 -0
- package/datetime-picker/lib/datetime-picker.component.d.ts +1 -0
- package/esm2022/alert/lib/alert.component.mjs +10 -14
- package/esm2022/avatar/lib/avatar.component.mjs +2 -2
- package/esm2022/calendar/lib/calendar.component.mjs +186 -158
- package/esm2022/calendar/lib/calendar.module.mjs +5 -4
- package/esm2022/check-box/lib/check-box.component.mjs +39 -22
- package/esm2022/common/lib/components/selection-base.component.class.mjs +2 -1
- package/esm2022/cron-job/acorex-components-cron-job.mjs +5 -0
- package/esm2022/cron-job/index.mjs +9 -0
- package/esm2022/cron-job/lib/cron-job-container/cron-job-container.component.mjs +90 -0
- package/esm2022/cron-job/lib/cron-job.module.mjs +80 -0
- package/esm2022/cron-job/lib/cron-job.service.mjs +60 -0
- package/esm2022/cron-job/lib/day/day.component.mjs +61 -0
- package/esm2022/cron-job/lib/day/day.model.mjs +88 -0
- package/esm2022/cron-job/lib/day/day.service.mjs +196 -0
- package/esm2022/cron-job/lib/hours/hours.component.mjs +38 -0
- package/esm2022/cron-job/lib/hours/hours.model.mjs +8 -0
- package/esm2022/cron-job/lib/hours/hours.service.mjs +82 -0
- package/esm2022/cron-job/lib/minutes/minutes.component.mjs +38 -0
- package/esm2022/cron-job/lib/minutes/minutes.model.mjs +8 -0
- package/esm2022/cron-job/lib/minutes/minutes.service.mjs +82 -0
- package/esm2022/cron-job/lib/month/month.component.mjs +47 -0
- package/esm2022/cron-job/lib/month/month.model.mjs +8 -0
- package/esm2022/cron-job/lib/month/month.service.mjs +96 -0
- package/esm2022/cron-job/lib/seconds/seconds.component.mjs +38 -0
- package/esm2022/cron-job/lib/seconds/seconds.model.mjs +8 -0
- package/esm2022/cron-job/lib/seconds/seconds.service.mjs +82 -0
- package/esm2022/cron-job/lib/types/iexpression.mjs +2 -0
- package/esm2022/cron-job/lib/types/shared.model.mjs +49 -0
- package/esm2022/cron-job/lib/year/year.component.mjs +45 -0
- package/esm2022/cron-job/lib/year/year.model.mjs +28 -0
- package/esm2022/cron-job/lib/year/year.service.mjs +82 -0
- package/esm2022/datetime-input/lib/datetime-input.component.mjs +38 -10
- package/esm2022/datetime-picker/lib/datetime-picker.component.mjs +17 -4
- package/esm2022/list/lib/list.component.mjs +3 -3
- package/esm2022/loading/lib/loading.component.mjs +7 -3
- package/esm2022/loading/lib/loading.service.mjs +3 -3
- package/esm2022/radio/lib/radio.component.mjs +3 -3
- package/esm2022/selection-list/lib/selection-list.component.mjs +18 -28
- package/esm2022/text-box/lib/text-box.component.mjs +11 -8
- package/esm2022/time-line/lib/time-line-item.component.mjs +3 -3
- package/esm2022/time-line/lib/time-line.component.mjs +18 -4
- package/fesm2022/acorex-components-action-sheet.mjs +1 -1
- package/fesm2022/acorex-components-alert.mjs +10 -14
- package/fesm2022/acorex-components-alert.mjs.map +1 -1
- package/fesm2022/acorex-components-audio-wave.mjs +1 -1
- package/fesm2022/acorex-components-avatar.mjs +3 -3
- package/fesm2022/acorex-components-avatar.mjs.map +1 -1
- package/fesm2022/acorex-components-badge.mjs +1 -1
- package/fesm2022/acorex-components-bottom-navigation.mjs +1 -1
- package/fesm2022/acorex-components-breadcrumbs.mjs +1 -1
- package/fesm2022/acorex-components-button-group.mjs +1 -1
- package/fesm2022/acorex-components-button.mjs +1 -1
- package/fesm2022/acorex-components-calendar.mjs +188 -160
- package/fesm2022/acorex-components-calendar.mjs.map +1 -1
- package/fesm2022/acorex-components-check-box.mjs +39 -22
- package/fesm2022/acorex-components-check-box.mjs.map +1 -1
- package/fesm2022/acorex-components-chips.mjs +1 -1
- package/fesm2022/acorex-components-circular-progress.mjs +1 -1
- package/fesm2022/acorex-components-collapse.mjs +1 -1
- package/fesm2022/acorex-components-color-box.mjs +1 -1
- package/fesm2022/acorex-components-color-palette.mjs +1 -1
- package/fesm2022/acorex-components-comment.mjs +1 -1
- package/fesm2022/acorex-components-common.mjs +2 -1
- package/fesm2022/acorex-components-common.mjs.map +1 -1
- package/fesm2022/acorex-components-conversation.mjs +1 -1
- package/fesm2022/acorex-components-cron-job.mjs +1191 -0
- package/fesm2022/acorex-components-cron-job.mjs.map +1 -0
- package/fesm2022/acorex-components-data-pager.mjs +1 -1
- package/fesm2022/acorex-components-data-table.mjs +1 -1
- package/fesm2022/acorex-components-datetime-box.mjs +1 -1
- package/fesm2022/acorex-components-datetime-input.mjs +36 -8
- package/fesm2022/acorex-components-datetime-input.mjs.map +1 -1
- package/fesm2022/acorex-components-datetime-picker.mjs +16 -3
- package/fesm2022/acorex-components-datetime-picker.mjs.map +1 -1
- package/fesm2022/acorex-components-decorators.mjs +1 -1
- package/fesm2022/acorex-components-dialog.mjs +1 -1
- package/fesm2022/acorex-components-drawer.mjs +1 -1
- package/fesm2022/acorex-components-dropdown-button.mjs +1 -1
- package/fesm2022/acorex-components-dropdown.mjs +1 -1
- package/fesm2022/acorex-components-form.mjs +1 -1
- package/fesm2022/acorex-components-image-editor.mjs +1 -1
- package/fesm2022/acorex-components-image.mjs +1 -1
- package/fesm2022/acorex-components-json-viewer.mjs +1 -1
- package/fesm2022/acorex-components-label.mjs +1 -1
- package/fesm2022/acorex-components-list.mjs +3 -3
- package/fesm2022/acorex-components-list.mjs.map +1 -1
- package/fesm2022/acorex-components-loading-dialog.mjs +1 -1
- package/fesm2022/acorex-components-loading.mjs +9 -5
- package/fesm2022/acorex-components-loading.mjs.map +1 -1
- package/fesm2022/acorex-components-map.mjs +1 -1
- package/fesm2022/acorex-components-media-viewer.mjs +1 -1
- package/fesm2022/acorex-components-menu.mjs +1 -1
- package/fesm2022/acorex-components-nav.mjs +1 -1
- package/fesm2022/acorex-components-navbar.mjs +1 -1
- package/fesm2022/acorex-components-notification.mjs +1 -1
- package/fesm2022/acorex-components-number-box.mjs +1 -1
- package/fesm2022/acorex-components-otp.mjs +1 -1
- package/fesm2022/acorex-components-page.mjs +1 -1
- package/fesm2022/acorex-components-paint.mjs +1 -1
- package/fesm2022/acorex-components-password-box.mjs +1 -1
- package/fesm2022/acorex-components-phone-box.mjs +1 -1
- package/fesm2022/acorex-components-picker.mjs +1 -1
- package/fesm2022/acorex-components-popover.mjs +1 -1
- package/fesm2022/acorex-components-popup.mjs +1 -1
- package/fesm2022/acorex-components-progress-bar.mjs +1 -1
- package/fesm2022/acorex-components-qrcode.mjs +1 -1
- package/fesm2022/acorex-components-radio.mjs +3 -3
- package/fesm2022/acorex-components-radio.mjs.map +1 -1
- package/fesm2022/acorex-components-range-slider.mjs +1 -1
- package/fesm2022/acorex-components-rate-picker.mjs +1 -1
- package/fesm2022/acorex-components-result.mjs +1 -1
- package/fesm2022/acorex-components-routing-progress.mjs +1 -1
- package/fesm2022/acorex-components-scheduler.mjs +1 -1
- package/fesm2022/acorex-components-search-box.mjs +1 -1
- package/fesm2022/acorex-components-select-box.mjs +1 -1
- package/fesm2022/acorex-components-selection-list.mjs +18 -28
- package/fesm2022/acorex-components-selection-list.mjs.map +1 -1
- package/fesm2022/acorex-components-side-menu.mjs +1 -1
- package/fesm2022/acorex-components-skeleton.mjs +1 -1
- package/fesm2022/acorex-components-slider.mjs +1 -1
- package/fesm2022/acorex-components-step-wizard.mjs +1 -1
- package/fesm2022/acorex-components-switch.mjs +1 -1
- package/fesm2022/acorex-components-tabs.mjs +1 -1
- package/fesm2022/acorex-components-tag.mjs +1 -1
- package/fesm2022/acorex-components-text-area.mjs +1 -1
- package/fesm2022/acorex-components-text-box.mjs +10 -7
- package/fesm2022/acorex-components-text-box.mjs.map +1 -1
- package/fesm2022/acorex-components-time-line.mjs +19 -5
- package/fesm2022/acorex-components-time-line.mjs.map +1 -1
- package/fesm2022/acorex-components-toast.mjs +1 -1
- package/fesm2022/acorex-components-tooltip.mjs +1 -1
- package/fesm2022/acorex-components-uploader.mjs +1 -1
- package/fesm2022/acorex-components-wysiwyg.mjs +1 -1
- package/package.json +7 -1
- package/selection-list/lib/selection-list.component.d.ts +4 -12
- package/text-box/lib/text-box.component.d.ts +2 -2
- package/time-line/lib/time-line.component.d.ts +2 -0
@@ -1,14 +1,15 @@
|
|
1
1
|
import { AXValuableComponent, MXInteractiveComponent, MXValueComponent, } from '@acorex/components/common';
|
2
2
|
import { AXDateTimeRange } from '@acorex/core/date-time';
|
3
|
-
import { ChangeDetectionStrategy, Component, HostBinding, HostListener, ViewEncapsulation, forwardRef } from '@angular/core';
|
3
|
+
import { ChangeDetectionStrategy, Component, HostBinding, HostListener, ViewEncapsulation, forwardRef, } from '@angular/core';
|
4
4
|
import { AXUnsubscriber } from '@acorex/core/utils';
|
5
5
|
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
6
6
|
import { classes } from 'polytype';
|
7
|
-
import { MXCalendarBaseComponent } from './calendar.class';
|
7
|
+
import { MXCalendarBaseComponent, } from './calendar.class';
|
8
8
|
import * as i0 from "@angular/core";
|
9
9
|
import * as i1 from "@acorex/core/utils";
|
10
10
|
import * as i2 from "@angular/common";
|
11
|
-
import * as i3 from "@acorex/
|
11
|
+
import * as i3 from "@acorex/components/common";
|
12
|
+
import * as i4 from "@acorex/core/translation";
|
12
13
|
/**
|
13
14
|
* A calendar component that provides a customizable calendar view with various options for selection, navigation, and styling.
|
14
15
|
*
|
@@ -18,31 +19,6 @@ export class AXCalendarComponent extends classes((MXValueComponent), MXInteracti
|
|
18
19
|
get displayRange() {
|
19
20
|
return new AXDateTimeRange(this.views[0].range.startTime, this.views[this.views.length - 1].range.endTime);
|
20
21
|
}
|
21
|
-
/**
|
22
|
-
* @ignore
|
23
|
-
*/
|
24
|
-
_setDisplayRange(current) {
|
25
|
-
switch (this.activeView) {
|
26
|
-
case 'year': {
|
27
|
-
const y = current.startOf('year').year;
|
28
|
-
const min = y - (y % 10);
|
29
|
-
const max = min + 9;
|
30
|
-
return new AXDateTimeRange(this.calendarService.create({
|
31
|
-
year: min,
|
32
|
-
month: 1,
|
33
|
-
date: 1,
|
34
|
-
}, this.type), this.calendarService.create({
|
35
|
-
year: max,
|
36
|
-
month: 12,
|
37
|
-
date: 28,
|
38
|
-
}, this.type));
|
39
|
-
}
|
40
|
-
case 'month':
|
41
|
-
return new AXDateTimeRange(current.startOf('year'), current.endOf('year').add('day', -1));
|
42
|
-
default:
|
43
|
-
return new AXDateTimeRange(current.startOf('month'), current.endOf('month'));
|
44
|
-
}
|
45
|
-
}
|
46
22
|
/**
|
47
23
|
* @ignore
|
48
24
|
*/
|
@@ -111,7 +87,6 @@ export class AXCalendarComponent extends classes((MXValueComponent), MXInteracti
|
|
111
87
|
/**
|
112
88
|
* @ignore
|
113
89
|
*/
|
114
|
-
ngOnDestroy() { }
|
115
90
|
render() {
|
116
91
|
if (!this._viewStartDate)
|
117
92
|
return;
|
@@ -130,137 +105,175 @@ export class AXCalendarComponent extends classes((MXValueComponent), MXInteracti
|
|
130
105
|
};
|
131
106
|
this.views = [];
|
132
107
|
for (let i = 0; i < this.count; i++) {
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
108
|
+
switch (this.activeView) {
|
109
|
+
case 'day':
|
110
|
+
this.dayView(i, applyCellClass);
|
111
|
+
break;
|
112
|
+
case 'month':
|
113
|
+
this.monthView(i, applyCellClass);
|
114
|
+
break;
|
115
|
+
case 'year':
|
116
|
+
this.yearView(i, applyCellClass);
|
117
|
+
break;
|
139
118
|
}
|
140
|
-
|
141
|
-
|
142
|
-
|
119
|
+
}
|
120
|
+
this.cdr.markForCheck();
|
121
|
+
}
|
122
|
+
/**
|
123
|
+
* @ignore
|
124
|
+
*/
|
125
|
+
_setDisplayRange(current) {
|
126
|
+
switch (this.activeView) {
|
127
|
+
case 'year': {
|
128
|
+
const y = current.startOf('year').year;
|
129
|
+
const min = y - (y % 10);
|
130
|
+
const max = min + 9;
|
131
|
+
return new AXDateTimeRange(this.calendarService.create({
|
132
|
+
year: min,
|
133
|
+
month: 1,
|
134
|
+
date: 1,
|
135
|
+
}, this.type), this.calendarService.create({
|
136
|
+
year: max,
|
137
|
+
month: 12,
|
138
|
+
date: 28,
|
139
|
+
}, this.type));
|
140
|
+
}
|
141
|
+
case 'month':
|
142
|
+
return new AXDateTimeRange(current.startOf('year'), current.endOf('year').add('day', -1));
|
143
|
+
default:
|
144
|
+
return new AXDateTimeRange(current.startOf('month'), current.endOf('month'));
|
145
|
+
}
|
146
|
+
}
|
147
|
+
/**
|
148
|
+
* @ignore
|
149
|
+
*/
|
150
|
+
dayView(i, applyCellClass) {
|
151
|
+
const current = this._viewStartDate.add('month', i);
|
152
|
+
const view = {
|
153
|
+
range: this._setDisplayRange(current),
|
154
|
+
slots: [],
|
155
|
+
};
|
156
|
+
this.views.push(view);
|
157
|
+
const a = view.range.enumurate('day');
|
158
|
+
view.slots = a.map((d, i) => {
|
159
|
+
const r = {};
|
160
|
+
r.date = d;
|
161
|
+
r.text = d.dayOfMonth;
|
162
|
+
r.tooltip = d.format('longDate');
|
163
|
+
r.today = d.equal(this._today, 'day');
|
164
|
+
r.selected = this.value && d.equal(this.value, 'day');
|
165
|
+
r.holiday = this.isHoliday(d) || this.isWeekend(d);
|
166
|
+
r.disabled =
|
167
|
+
(this.minValue && d.compare(this.minValue, 'day') == -1) ||
|
168
|
+
(this.maxValue && d.compare(this.maxValue, 'day') == 1) ||
|
169
|
+
this.isDisabled(d);
|
170
|
+
//
|
171
|
+
const focused = d.dayOfMonth == this._footPrint.day &&
|
172
|
+
d.monthOfYear == this._footPrint.month &&
|
173
|
+
d.year == this._footPrint.year;
|
174
|
+
//
|
175
|
+
if (r.disabled) {
|
176
|
+
r.cssClass = {
|
177
|
+
'ax-state-disabled': true,
|
178
|
+
};
|
143
179
|
}
|
144
180
|
else {
|
145
|
-
|
146
|
-
|
181
|
+
r.cssClass = {
|
182
|
+
'ax-state-today': r.today,
|
183
|
+
'ax-state-selected': r.selected,
|
184
|
+
'ax-state-holiday': r.holiday,
|
185
|
+
// 'ax-state-focused': focused,
|
186
|
+
};
|
147
187
|
}
|
188
|
+
// ax-col-start-1 ax-col-start-2 ax-col-start-3 ax-col-start-4 ax-col-start-5 ax-col-start-6 ax-col-start-7
|
189
|
+
r.cssClass[`ax-column-start-${view.range.startTime.dayOfWeek}`] = i == 0;
|
190
|
+
if (this.cellClass)
|
191
|
+
applyCellClass(r);
|
192
|
+
return r;
|
193
|
+
});
|
194
|
+
}
|
195
|
+
/**
|
196
|
+
* @ignore
|
197
|
+
*/
|
198
|
+
monthView(i, applyCellClass) {
|
199
|
+
const current = this._viewStartDate.add('year', i);
|
200
|
+
const view = {
|
201
|
+
range: this._setDisplayRange(current),
|
202
|
+
slots: [],
|
203
|
+
};
|
204
|
+
this.views.push(view);
|
205
|
+
const a = view.range.enumurate('month');
|
206
|
+
view.slots = a.map((d, i) => {
|
207
|
+
const r = {};
|
208
|
+
r.date = d;
|
209
|
+
r.text = d.format('MMM');
|
210
|
+
r.tooltip = d.format('MMMM YYYY');
|
211
|
+
r.today = d.equal(this._today, 'month');
|
148
212
|
//
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
slots: [],
|
153
|
-
};
|
154
|
-
this.views.push(view);
|
213
|
+
r.disabled =
|
214
|
+
(this.minValue && d.compare(this.minValue, 'month') == -1) ||
|
215
|
+
(this.maxValue && d.compare(this.maxValue, 'month') == 1);
|
155
216
|
//
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
//
|
172
|
-
r.disabled =
|
173
|
-
(this.minValue && d.compare(this.minValue, 'year') == -1) || (this.maxValue && d.compare(this.maxValue, 'year') == 1);
|
174
|
-
//
|
175
|
-
if (r.disabled) {
|
176
|
-
r.cssClass = {
|
177
|
-
'ax-state-disabled': r.disabled,
|
178
|
-
};
|
179
|
-
}
|
180
|
-
else {
|
181
|
-
r.cssClass = {
|
182
|
-
'ax-state-today': r.today,
|
183
|
-
'ax-state-selected': r.selected,
|
184
|
-
'ax-state-focused': focused,
|
185
|
-
};
|
186
|
-
}
|
187
|
-
applyCellClass(r);
|
188
|
-
return r;
|
189
|
-
});
|
217
|
+
r.selected = this.value && this.depth == 'month' && d.equal(this.value, 'month');
|
218
|
+
//
|
219
|
+
const focused = d.monthOfYear == this._footPrint.month && d.year == this._footPrint.year;
|
220
|
+
//
|
221
|
+
if (r.disabled) {
|
222
|
+
r.cssClass = {
|
223
|
+
'ax-state-disabled': r.disabled,
|
224
|
+
};
|
225
|
+
}
|
226
|
+
else {
|
227
|
+
r.cssClass = {
|
228
|
+
'ax-state-today': r.today,
|
229
|
+
'ax-state-selected': r.selected,
|
230
|
+
'ax-state-focused': focused,
|
231
|
+
};
|
190
232
|
}
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
233
|
+
applyCellClass(r);
|
234
|
+
return r;
|
235
|
+
});
|
236
|
+
}
|
237
|
+
/**
|
238
|
+
* @ignore
|
239
|
+
*/
|
240
|
+
yearView(i, applyCellClass) {
|
241
|
+
const current = this._viewStartDate.add('year', i * 10);
|
242
|
+
const view = {
|
243
|
+
range: this._setDisplayRange(current),
|
244
|
+
slots: [],
|
245
|
+
};
|
246
|
+
this.views.push(view);
|
247
|
+
const a = view.range.enumurate('year');
|
248
|
+
view.slots = a.map((d, i) => {
|
249
|
+
const r = {};
|
250
|
+
r.date = d;
|
251
|
+
r.text = d.format('YYYY');
|
252
|
+
r.tooltip = d.format('YYYY');
|
253
|
+
r.today = d.equal(this._today, 'year');
|
254
|
+
r.selected = this.value && this.depth == 'year' && d.equal(this.value, 'year');
|
255
|
+
//
|
256
|
+
const focused = d.year == this._footPrint.year;
|
257
|
+
//
|
258
|
+
r.disabled =
|
259
|
+
(this.minValue && d.compare(this.minValue, 'year') == -1) ||
|
260
|
+
(this.maxValue && d.compare(this.maxValue, 'year') == 1);
|
261
|
+
//
|
262
|
+
if (r.disabled) {
|
263
|
+
r.cssClass = {
|
264
|
+
'ax-state-disabled': r.disabled,
|
265
|
+
};
|
223
266
|
}
|
224
|
-
// day view
|
225
267
|
else {
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
r.tooltip = d.format('longDate');
|
232
|
-
r.today = d.equal(this._today, 'day');
|
233
|
-
r.selected = this.value && d.equal(this.value, 'day');
|
234
|
-
r.holiday = this.isHoliday(d) || this.isWeekend(d);
|
235
|
-
r.disabled =
|
236
|
-
(this.minValue && d.compare(this.minValue, 'day') == -1) ||
|
237
|
-
(this.maxValue && d.compare(this.maxValue, 'day') == 1) ||
|
238
|
-
this.isDisabled(d);
|
239
|
-
//
|
240
|
-
const focused = d.dayOfMonth == this._footPrint.day && d.monthOfYear == this._footPrint.month && d.year == this._footPrint.year;
|
241
|
-
//
|
242
|
-
if (r.disabled) {
|
243
|
-
r.cssClass = {
|
244
|
-
'ax-state-disabled': true,
|
245
|
-
};
|
246
|
-
}
|
247
|
-
else {
|
248
|
-
r.cssClass = {
|
249
|
-
'ax-state-today': r.today,
|
250
|
-
'ax-state-selected': r.selected,
|
251
|
-
'ax-state-holiday': r.holiday,
|
252
|
-
//'ax-state-focused': focused,
|
253
|
-
};
|
254
|
-
}
|
255
|
-
// ax-col-start-1 ax-col-start-2 ax-col-start-3 ax-col-start-4 ax-col-start-5 ax-col-start-6 ax-col-start-7
|
256
|
-
r.cssClass[`ax-column-start-${view.range.startTime.dayOfWeek}`] = i == 0;
|
257
|
-
if (this.cellClass)
|
258
|
-
applyCellClass(r);
|
259
|
-
return r;
|
260
|
-
});
|
268
|
+
r.cssClass = {
|
269
|
+
'ax-state-today': r.today,
|
270
|
+
'ax-state-selected': r.selected,
|
271
|
+
'ax-state-focused': focused,
|
272
|
+
};
|
261
273
|
}
|
262
|
-
|
263
|
-
|
274
|
+
applyCellClass(r);
|
275
|
+
return r;
|
276
|
+
});
|
264
277
|
}
|
265
278
|
/**
|
266
279
|
* @ignore
|
@@ -292,13 +305,12 @@ export class AXCalendarComponent extends classes((MXValueComponent), MXInteracti
|
|
292
305
|
nativeEvent: e,
|
293
306
|
});
|
294
307
|
//
|
295
|
-
const val = this.calendarService.create(slot.date.date, this.type);
|
296
308
|
if (this.activeView == 'day') {
|
297
309
|
this._setDate(slot.date.date);
|
298
310
|
}
|
299
311
|
else if (this.activeView == 'month' && this.depth == 'day') {
|
300
312
|
this.activeView = 'day';
|
301
|
-
this._footPrint.month =
|
313
|
+
this._footPrint.month = this.calendarService.create(slot.date.date, this.type).monthOfYear;
|
302
314
|
this.navTo(slot.date);
|
303
315
|
}
|
304
316
|
else if (this.activeView == 'month' && this.depth == 'month') {
|
@@ -306,7 +318,7 @@ export class AXCalendarComponent extends classes((MXValueComponent), MXInteracti
|
|
306
318
|
}
|
307
319
|
else if (this.activeView == 'year' && (this.depth == 'day' || this.depth == 'month')) {
|
308
320
|
this.activeView = 'month';
|
309
|
-
this._footPrint.year =
|
321
|
+
this._footPrint.year = this.calendarService.create(slot.date.date, this.type).year;
|
310
322
|
this.navTo(slot.date);
|
311
323
|
}
|
312
324
|
else if (this.activeView == 'year' && this.depth == 'year') {
|
@@ -331,7 +343,10 @@ export class AXCalendarComponent extends classes((MXValueComponent), MXInteracti
|
|
331
343
|
* @ignore
|
332
344
|
*/
|
333
345
|
internalOptionChanged(e) {
|
334
|
-
if (e.name == 'depth' ||
|
346
|
+
if (e.name == 'depth' ||
|
347
|
+
e.name == 'activeView' ||
|
348
|
+
e.name == 'disabledDates' ||
|
349
|
+
e.name == 'holidayDates') {
|
335
350
|
this.render();
|
336
351
|
}
|
337
352
|
if (e.name == 'type') {
|
@@ -364,7 +379,20 @@ export class AXCalendarComponent extends classes((MXValueComponent), MXInteracti
|
|
364
379
|
this._footPrint.year = val.year;
|
365
380
|
this._footPrint.month = val.monthOfYear;
|
366
381
|
this._footPrint.day = val.dayOfMonth;
|
367
|
-
|
382
|
+
const calendarSlots = Array.from(document.querySelectorAll('.ax-calendar-slot'));
|
383
|
+
const selectedSlot = document.querySelector('.ax-state-selected');
|
384
|
+
if (selectedSlot) {
|
385
|
+
selectedSlot.classList.remove('ax-state-selected');
|
386
|
+
}
|
387
|
+
else {
|
388
|
+
this.render();
|
389
|
+
}
|
390
|
+
calendarSlots.forEach((element) => {
|
391
|
+
element = element;
|
392
|
+
if (element.textContent == this._footPrint.day) {
|
393
|
+
element.classList.add('ax-state-selected');
|
394
|
+
}
|
395
|
+
});
|
368
396
|
}
|
369
397
|
/**
|
370
398
|
* @ignore
|
@@ -539,7 +567,7 @@ export class AXCalendarComponent extends classes((MXValueComponent), MXInteracti
|
|
539
567
|
useExisting: AXCalendarComponent,
|
540
568
|
},
|
541
569
|
AXUnsubscriber,
|
542
|
-
], usesInheritance: true, ngImport: i0, template: "<ng-content select=\"ax-header\"></ng-content>\n<div class=\"ax-calendar-body\">\n @for (v of views; let i = $index, first = $first, last = $last; track i) {\n @switch (activeView) {\n @case ('year') {\n @if (showNavigation) {\n <div class=\"ax-calendar-view-header\">\n <div class=\"ax-calendar-header-info\">\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-state-disabled\"\n (click)=\"_handleNavClick($event, 'year')\"\n >\n {{ v.range.startTime.format('YYYY') }} - {{ v.range.endTime.format('YYYY') }}\n </button>\n </div>\n @if (last) {\n <div class=\"ax-calendar-header-buttons\">\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-button-icon ax-next\"\n (click)=\"_handlePrevClick()\"\n [title]=\"'prev' | translate | async\"\n >\n <i class=\"ax-icon ax-icon-chevron-left\"></i>\n </button>\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-button-icon\"\n (click)=\"_handleNextClick()\"\n [title]=\"'next' | translate | async\"\n >\n <i class=\"ax-icon ax-icon-chevron-right\"></i>\n </button>\n </div>\n }\n </div>\n }\n <div class=\"ax-calendar-slots ax-calendar-slots-year\" [ngClass]=\"{ 'ax-default': !cellTemplate }\">\n @for (slot of v.slots; track slot.text) {\n <div\n tabindex=\"0\"\n class=\"ax-calendar-slot\"\n [class.ax-state-disabled]=\"disabled\"\n [ngClass]=\"slot.cssClass\"\n (click)=\"_handleSlotClick($event, slot)\"\n >\n @if (cellTemplate) {\n <div>\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: { $implicit: { slot: slot } }\">\n </ng-container>\n </div>\n } @else {\n <div [title]=\"slot.tooltip\">\n {{ slot.text }}\n </div>\n }\n </div>\n }\n </div>\n }\n @case ('month') {\n @if (showNavigation) {\n <div class=\"ax-calendar-view-header\">\n <div class=\"ax-calendar-header-info\">\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded\"\n (click)=\"_handleNavClick($event, 'year')\"\n >\n {{ v.range.startTime.format('YYYY') }}\n </button>\n </div>\n @if (last) {\n <div class=\"ax-calendar-header-buttons\">\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-button-icon\"\n (click)=\"_handlePrevClick()\"\n [title]=\"'prev' | translate | async\"\n >\n <i class=\"ax-icon ax-icon-chevron-left\"></i>\n </button>\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-button-icon\"\n (click)=\"_handleNextClick()\"\n [title]=\"'next' | translate | async\"\n >\n <i class=\"ax-icon ax-icon-chevron-right\"></i>\n </button>\n </div>\n }\n </div>\n }\n <div class=\"ax-calendar-slots ax-calendar-slots-month\" [ngClass]=\"{ 'ax-default': !cellTemplate }\">\n <div\n tabindex=\"0\"\n *ngFor=\"let slot of v.slots\"\n class=\"ax-calendar-slot\"\n [class.ax-state-disabled]=\"disabled\"\n [ngClass]=\"slot.cssClass\"\n (click)=\"_handleSlotClick($event, slot)\"\n >\n @if (cellTemplate) {\n <div>\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: { $implicit: { slot: slot } }\">\n </ng-container>\n </div>\n } @else {\n <div [title]=\"slot.tooltip\">\n {{ getMonthName(slot.date, 'short') | translate | async }}\n </div>\n }\n </div>\n </div>\n }\n @default {\n @if (showNavigation) {\n <div class=\"ax-calendar-view-header\">\n <div class=\"ax-calendar-header-info\">\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded\"\n (click)=\"_handleNavClick($event, 'year')\"\n >\n {{ v.range.startTime.format('YYYY') }}\n </button>\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded\"\n (click)=\"_handleNavClick($event, 'month')\"\n >\n {{ getMonthName(v.range.startTime, 'long') | translate | async }}\n </button>\n </div>\n @if (last) {\n <div class=\"ax-calendar-header-buttons\">\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-button-icon\"\n (click)=\"_handlePrevClick()\"\n [title]=\"'prev' | translate | async\"\n >\n <i class=\"ax-icon ax-icon-chevron-left\"></i>\n </button>\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-button-icon\"\n (click)=\"_handleNextClick()\"\n [title]=\"'next' | translate | async\"\n >\n <i class=\"ax-icon ax-icon-chevron-right\"></i>\n </button>\n </div>\n }\n </div>\n }\n <div class=\"ax-calendar-week\">\n <div *ngFor=\"let d of _weekdays\">{{ 'dateTime.weekdays.short.' + d | translate | async }}</div>\n </div>\n <div class=\"ax-calendar-slots ax-calendar-slots-day\" [ngClass]=\"{ 'ax-default': !cellTemplate }\">\n <ng-container *ngFor=\"let slot of v.slots\">\n <div\n tabindex=\"0\"\n class=\"ax-calendar-slot\"\n [class.ax-state-disabled]=\"disabled\"\n [ngClass]=\"slot.cssClass\"\n (click)=\"_handleSlotClick($event, slot)\"\n >\n @if (cellTemplate) {\n <div>\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: { $implicit: { slot: slot } }\">\n </ng-container>\n </div>\n } @else {\n <div [title]=\"slot.tooltip\">\n {{ slot.text }}\n </div>\n }\n </div>\n </ng-container>\n </div>\n }\n }\n }\n</div>\n<ng-content select=\"ax-footer\"></ng-content>\n", styles: [".ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:hover:not(.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:hover.ax-state-disabled,.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:hover.ax-state-selected){background-color:rgba(var(--ax-color-primary-200));color:rgba(var(--ax-color-primary-fore-tint))}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:focus-visible:not(.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:focus-visible.ax-state-disabled){outline-color:rgba(var(--ax-color-primary-200))}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-today{border-color:rgba(var(--ax-color-primary-200));color:rgba(var(--ax-color-primary-200))}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-today.ax-state-holiday{color:rgba(var(--ax-color-danger-200))!important;border-color:rgba(var(--ax-color-danger-200))!important}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected{background-color:rgba(var(--ax-color-primary-200));color:rgba(var(--ax-color-primary-fore-tint))}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected.ax-state-holiday{outline-color:rgba(var(--ax-color-primary-200))!important;background-color:rgba(var(--ax-color-danger-200))!important;color:rgba(var(--ax-color-danger-fore-tint))!important}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected.ax-state-holiday:is(.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected.ax-state-holiday:hover):not(.ax-state-disabled){background-color:rgba(var(--ax-color-danger-200))!important;border-color:rgba(var(--ax-color-danger-200))!important}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-holiday{color:rgba(var(--ax-color-danger-200))}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-holiday:is(.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-holiday:hover):not(.ax-state-disabled){background-color:rgba(var(--ax-color-danger-200))!important;border-color:rgba(var(--ax-color-danger-200))!important;color:rgba(var(--ax-color-danger-fore-tint))!important}.ax-dark ax-calendar .ax-calendar-footer:is(.ax-dark ax-calendar .ax-calendar-footer:focus,.ax-dark ax-calendar .ax-calendar-footer:focus-visible):not(.ax-state-disabled){outline-color:rgba(var(--ax-color-primary-200))}html[dir=rtl] ax-calendar .ax-calendar-header-buttons .ax-icon{-moz-transform:scale(-1,1);-o-transform:scale(-1,1);-webkit-transform:scale(-1,1);transform:scaleX(-1)}ax-calendar{display:block;width:100%;background-color:rgba(var(--ax-color-surface),var(--tw-bg-opacity));color:rgba(var(--ax-color-surface-fore),var(--tw-text-opacity))}ax-calendar.ax-state-disabled .ax-calendar-slots{cursor:not-allowed;opacity:.5}ax-calendar.ax-state-readonly .ax-calendar-slots{cursor:text}ax-calendar .ax-calendar-header{display:flex;justify-content:space-between;padding-left:.25rem;padding-right:.25rem;padding-top:.25rem}ax-calendar .ax-calendar-header .ax-calendar-header-info{font-weight:500}ax-calendar .ax-calendar-header .ax-calendar-header-buttons{display:flex}ax-calendar .ax-calendar-body{display:flex;flex-direction:column}@media (min-width: 1024px){ax-calendar .ax-calendar-body{flex-direction:column}}ax-calendar .ax-calendar-body>div{width:100%;flex:1 1 0%}@media (min-width: 768px){ax-calendar .ax-calendar-body>div{width:20rem}}ax-calendar .ax-calendar-body .ax-calendar-view-header{display:flex;justify-content:space-between;border-bottom-width:1px;border-color:rgba(var(--ax-color-border-default));padding:.5rem}ax-calendar .ax-calendar-body .ax-calendar-view-header .ax-calendar-header-info{font-weight:500}ax-calendar .ax-calendar-body .ax-calendar-view-header .ax-calendar-header-buttons{display:flex}ax-calendar .ax-calendar-body .ax-calendar-slots{display:grid;gap:.25rem;padding:1rem}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot{position:relative;display:flex;cursor:pointer;align-items:center;justify-content:center;border-radius:var(--ax-rounded-border-default);text-align:center;font-size:.875rem;line-height:1.25rem;color:rgba(var(--ax-color-surface-fore));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:before{content:\"\";float:left;padding-top:100%}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:after{content:\"\";clear:both;display:block}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:hover:not(ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:hover.ax-state-disabled,ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:hover.ax-state-selected){background-color:rgba(var(--ax-color-primary-500));color:rgba(var(--ax-color-primary-fore))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:focus-visible:not(ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:focus-visible.ax-state-disabled){outline-width:2px;outline-color:rgba(var(--ax-color-primary-500))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:focus-visible.ax-state-disabled{outline-style:dashed;outline-width:2px}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-disabled{cursor:not-allowed;opacity:.5}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-readonly{cursor:text;opacity:.75}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-1{grid-column-start:1}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-2{grid-column-start:2}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-3{grid-column-start:3}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-4{grid-column-start:4}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-5{grid-column-start:5}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-6{grid-column-start:6}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-7{grid-column-start:7}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-other{opacity:.05}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-today{border-width:1px;border-color:rgba(var(--ax-color-primary-500));color:rgba(var(--ax-color-primary-500))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-today.ax-state-holiday{border-color:rgba(var(--ax-color-danger-500))!important}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-focused{border-width:1px;border-color:rgba(var(--ax-color-border-default))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected{background-color:rgba(var(--ax-color-primary-500));color:rgba(var(--ax-color-primary-fore))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected.ax-state-holiday{background-color:rgba(var(--ax-color-danger-500))!important;color:rgba(var(--ax-color-danger-fore))!important}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected.ax-state-holiday{color:rgba(var(--ax-color-primary-fore))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-holiday{color:rgba(var(--ax-color-danger-500))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-holiday:is(ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-holiday:hover):not(.ax-state-disabled){background-color:rgba(var(--ax-color-danger-500))!important;border-color:rgba(var(--ax-color-danger-500))!important}ax-calendar .ax-calendar-body .ax-calendar-slots.ax-calendar-slots-day{grid-template-columns:repeat(7,minmax(0,1fr))}ax-calendar .ax-calendar-body .ax-calendar-slots.ax-calendar-slots-year,ax-calendar .ax-calendar-body .ax-calendar-slots.ax-calendar-slots-month{grid-template-columns:repeat(4,minmax(0,1fr))}ax-calendar .ax-calendar-body .ax-calendar-week{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));padding-left:.5rem;padding-right:.5rem;padding-top:.75rem}ax-calendar .ax-calendar-body .ax-calendar-week>div{position:relative;margin:.125rem;display:flex;cursor:pointer;align-items:center;justify-content:center;text-align:center;font-size:.875rem;line-height:1.25rem}ax-calendar .ax-calendar-footer{margin-top:1.25rem;display:flex;align-items:center;justify-content:center}ax-calendar .ax-calendar-footer .ax-today-button{display:block;height:var(--ax-size-default);width:100%;cursor:pointer;border-radius:var(--ax-rounded-border-default);background-color:rgba(var(--ax-color-primary-500));padding-left:1rem;padding-right:1rem;text-align:center;font-size:.875rem;line-height:1.25rem;color:rgba(var(--ax-color-primary-fore))}ax-calendar .ax-calendar-footer .ax-today-button.ax-state-disabled{cursor:not-allowed;opacity:.5}ax-calendar .ax-calendar-footer .ax-today-button.ax-state-readonly{cursor:text;opacity:.75}ax-calendar .ax-calendar-footer .ax-today-button:is(ax-calendar .ax-calendar-footer .ax-today-button:hover):not(.ax-state-disabled){background-color:rgba(var(--ax-color-primary-600))}ax-calendar .ax-calendar-footer .ax-today-button:is(ax-calendar .ax-calendar-footer .ax-today-button:focus,ax-calendar .ax-calendar-footer .ax-today-button:focus-visible):not(.ax-state-disabled){outline-color:rgba(var(--ax-color-primary-500),1)}.ax-calendar-picker{display:flex;width:100%}.ax-calendar-picker ax-picker{flex:1 1 0%}.ax-overlay-pane ax-calendar{border-style:none}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
570
|
+
], usesInheritance: true, ngImport: i0, template: "<ng-content select=\"ax-header\"></ng-content>\n<div class=\"ax-calendar-body\">\n @for (v of views; let i = $index, first = $first, last = $last; track i) {\n @switch (activeView) {\n @case ('year') {\n @if (showNavigation) {\n <div class=\"ax-calendar-view-header\">\n <div class=\"ax-calendar-header-info\">\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-state-disabled\"\n (click)=\"_handleNavClick($event, 'year')\"\n >\n {{ v.range.startTime.format('YYYY') }} - {{ v.range.endTime.format('YYYY') }}\n </button>\n </div>\n @if (last) {\n <div class=\"ax-calendar-header-buttons\">\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-button-icon ax-next\"\n (click)=\"_handlePrevClick()\"\n [title]=\"'prev' | translate | async\"\n >\n <i class=\"ax-icon ax-icon-chevron-left\"></i>\n </button>\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-button-icon\"\n (click)=\"_handleNextClick()\"\n [title]=\"'next' | translate | async\"\n >\n <i class=\"ax-icon ax-icon-chevron-right\"></i>\n </button>\n </div>\n }\n </div>\n }\n <div class=\"ax-calendar-slots ax-calendar-slots-year\" [ngClass]=\"{ 'ax-default': !cellTemplate }\">\n @for (slot of v.slots; track slot.text) {\n <button\n tabindex=\"0\"\n class=\"ax-calendar-slot\"\n [class.ax-state-disabled]=\"disabled\"\n [ngClass]=\"slot.cssClass\"\n (click)=\"_handleSlotClick($event, slot)\"\n >\n @if (cellTemplate) {\n <div>\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: { $implicit: { slot: slot } }\">\n </ng-container>\n </div>\n } @else {\n <div [title]=\"slot.tooltip\">\n {{ slot.text }}\n </div>\n }\n </button>\n }\n </div>\n }\n @case ('month') {\n @if (showNavigation) {\n <div class=\"ax-calendar-view-header\">\n <div class=\"ax-calendar-header-info\">\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded\"\n (click)=\"_handleNavClick($event, 'year')\"\n >\n {{ v.range.startTime.format('YYYY') }}\n </button>\n </div>\n @if (last) {\n <div class=\"ax-calendar-header-buttons\">\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-button-icon\"\n (click)=\"_handlePrevClick()\"\n [title]=\"'prev' | translate | async\"\n >\n <i class=\"ax-icon ax-icon-chevron-left\"></i>\n </button>\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-button-icon\"\n (click)=\"_handleNextClick()\"\n [title]=\"'next' | translate | async\"\n >\n <i class=\"ax-icon ax-icon-chevron-right\"></i>\n </button>\n </div>\n }\n </div>\n }\n <div class=\"ax-calendar-slots ax-calendar-slots-month\" [ngClass]=\"{ 'ax-default': !cellTemplate }\">\n <button\n tabindex=\"0\"\n *ngFor=\"let slot of v.slots\"\n class=\"ax-calendar-slot\"\n [class.ax-state-disabled]=\"disabled\"\n [ngClass]=\"slot.cssClass\"\n (click)=\"_handleSlotClick($event, slot)\"\n >\n @if (cellTemplate) {\n <div>\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: { $implicit: { slot: slot } }\">\n </ng-container>\n </div>\n } @else {\n <div [title]=\"slot.tooltip\">\n {{ getMonthName(slot.date, 'short') | translate | async }}\n </div>\n }\n </button>\n </div>\n }\n @default {\n @if (showNavigation) {\n <div class=\"ax-calendar-view-header\">\n <div class=\"ax-calendar-header-info\">\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded\"\n (click)=\"_handleNavClick($event, 'year')\"\n >\n {{ v.range.startTime.format('YYYY') }}\n </button>\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded\"\n (click)=\"_handleNavClick($event, 'month')\"\n >\n {{ getMonthName(v.range.startTime, 'long') | translate | async }}\n </button>\n </div>\n @if (last) {\n <div class=\"ax-calendar-header-buttons\">\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-button-icon\"\n (click)=\"_handlePrevClick()\"\n [title]=\"'prev' | translate | async\"\n >\n <i class=\"ax-icon ax-icon-chevron-left\"></i>\n </button>\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-button-icon\"\n (click)=\"_handleNextClick()\"\n [title]=\"'next' | translate | async\"\n >\n <i class=\"ax-icon ax-icon-chevron-right\"></i>\n </button>\n </div>\n }\n </div>\n }\n <div class=\"ax-calendar-week\">\n <div *ngFor=\"let d of _weekdays\">{{ 'dateTime.weekdays.short.' + d | translate | async }}</div>\n </div>\n <div class=\"ax-calendar-slots ax-calendar-slots-day\" [ngClass]=\"{ 'ax-default': !cellTemplate }\">\n <ng-container *ngFor=\"let slot of v.slots\">\n <button\n tabindex=\"0\"\n class=\"ax-calendar-slot\"\n [class.ax-state-disabled]=\"disabled\"\n [ngClass]=\"slot.cssClass\"\n (click)=\"_handleSlotClick($event, slot)\"\n [axRipple]=\"true\"\n >\n @if (cellTemplate) {\n <div>\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: { $implicit: { slot: slot } }\">\n </ng-container>\n </div>\n } @else {\n <div [title]=\"slot.tooltip\">\n {{ slot.text }}\n </div>\n }\n </button>\n </ng-container>\n </div>\n }\n }\n }\n</div>\n<ng-content select=\"ax-footer\"></ng-content>\n", styles: [".ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:hover:not(.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:hover.ax-state-disabled,.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:hover.ax-state-selected){background-color:rgba(var(--ax-color-primary-200));color:rgba(var(--ax-color-primary-fore-tint))}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:focus-visible:not(.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:focus-visible.ax-state-disabled){outline-color:rgba(var(--ax-color-primary-200))}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-today{border-color:rgba(var(--ax-color-primary-200));color:rgba(var(--ax-color-primary-200))}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-today.ax-state-holiday{color:rgba(var(--ax-color-danger-200))!important;border-color:rgba(var(--ax-color-danger-200))!important}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected{background-color:rgba(var(--ax-color-primary-200));color:rgba(var(--ax-color-primary-fore-tint))}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected.ax-state-holiday{outline-color:rgba(var(--ax-color-primary-200))!important;background-color:rgba(var(--ax-color-danger-200))!important;color:rgba(var(--ax-color-danger-fore-tint))!important}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected.ax-state-holiday:is(.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected.ax-state-holiday:hover):not(.ax-state-disabled){background-color:rgba(var(--ax-color-danger-200))!important;border-color:rgba(var(--ax-color-danger-200))!important}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-holiday{color:rgba(var(--ax-color-danger-200))}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-holiday:is(.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-holiday:hover):not(.ax-state-disabled){background-color:rgba(var(--ax-color-danger-200))!important;border-color:rgba(var(--ax-color-danger-200))!important;color:rgba(var(--ax-color-danger-fore-tint))!important}.ax-dark ax-calendar .ax-calendar-footer:is(.ax-dark ax-calendar .ax-calendar-footer:focus,.ax-dark ax-calendar .ax-calendar-footer:focus-visible):not(.ax-state-disabled){outline-color:rgba(var(--ax-color-primary-200))}html[dir=rtl] ax-calendar .ax-calendar-header-buttons .ax-icon{-moz-transform:scale(-1,1);-o-transform:scale(-1,1);-webkit-transform:scale(-1,1);transform:scaleX(-1)}ax-calendar{display:block;width:100%;background-color:rgba(var(--ax-color-surface),var(--tw-bg-opacity));color:rgba(var(--ax-color-surface-fore),var(--tw-text-opacity))}ax-calendar.ax-state-disabled .ax-calendar-slots{cursor:not-allowed;opacity:.5}ax-calendar.ax-state-readonly .ax-calendar-slots{cursor:text}ax-calendar .ax-calendar-header{display:flex;justify-content:space-between;padding-left:.25rem;padding-right:.25rem;padding-top:.25rem}ax-calendar .ax-calendar-header .ax-calendar-header-info{font-weight:500}ax-calendar .ax-calendar-header .ax-calendar-header-buttons{display:flex}ax-calendar .ax-calendar-body{display:flex;flex-direction:column;justify-content:center;align-items:center}@media (min-width: 1024px){ax-calendar .ax-calendar-body{flex-direction:column}}ax-calendar .ax-calendar-body>div{width:100%;flex:1 1 0%}@media (min-width: 768px){ax-calendar .ax-calendar-body>div{width:20rem}}ax-calendar .ax-calendar-body .ax-calendar-view-header{display:flex;justify-content:space-between;border-bottom-width:1px;border-color:rgba(var(--ax-color-border-default));padding:.5rem}ax-calendar .ax-calendar-body .ax-calendar-view-header .ax-calendar-header-info{font-weight:500}ax-calendar .ax-calendar-body .ax-calendar-view-header .ax-calendar-header-buttons{display:flex}ax-calendar .ax-calendar-body .ax-calendar-slots{display:grid;gap:.25rem;padding:1rem}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot{position:relative;display:flex;cursor:pointer;align-items:center;justify-content:center;border-radius:var(--ax-rounded-border-default);text-align:center;font-size:.875rem;line-height:1.25rem;color:rgba(var(--ax-color-surface-fore));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:before{content:\"\";float:left;padding-top:100%}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:after{content:\"\";clear:both;display:block}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:hover:not(ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:hover.ax-state-disabled,ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:hover.ax-state-selected){background-color:rgba(var(--ax-color-primary-500));color:rgba(var(--ax-color-primary-fore))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:focus-visible:not(ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:focus-visible.ax-state-disabled){outline-width:2px;outline-color:rgba(var(--ax-color-primary-500))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:focus-visible.ax-state-disabled{outline-style:dashed;outline-width:2px}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-disabled{cursor:not-allowed;opacity:.5}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-readonly{cursor:text;opacity:.75}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-1{grid-column-start:1}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-2{grid-column-start:2}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-3{grid-column-start:3}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-4{grid-column-start:4}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-5{grid-column-start:5}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-6{grid-column-start:6}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-7{grid-column-start:7}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-other{opacity:.05}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-today{border-width:1px;border-color:rgba(var(--ax-color-primary-500));color:rgba(var(--ax-color-primary-500))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-today.ax-state-holiday{border-color:rgba(var(--ax-color-danger-500))!important}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-focused{border-width:1px;border-color:rgba(var(--ax-color-border-default))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected{background-color:rgba(var(--ax-color-primary-500));color:rgba(var(--ax-color-primary-fore))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected.ax-state-holiday{background-color:rgba(var(--ax-color-danger-500))!important;color:rgba(var(--ax-color-danger-fore))!important}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected.ax-state-holiday{color:rgba(var(--ax-color-primary-fore))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-holiday{color:rgba(var(--ax-color-danger-500))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-holiday:is(ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-holiday:hover):not(.ax-state-disabled){background-color:rgba(var(--ax-color-danger-500))!important;border-color:rgba(var(--ax-color-danger-500))!important}ax-calendar .ax-calendar-body .ax-calendar-slots.ax-calendar-slots-day{grid-template-columns:repeat(7,minmax(0,1fr))}ax-calendar .ax-calendar-body .ax-calendar-slots.ax-calendar-slots-year,ax-calendar .ax-calendar-body .ax-calendar-slots.ax-calendar-slots-month{grid-template-columns:repeat(4,minmax(0,1fr))}ax-calendar .ax-calendar-body .ax-calendar-week{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));padding-left:.5rem;padding-right:.5rem;padding-top:.75rem}ax-calendar .ax-calendar-body .ax-calendar-week>div{position:relative;margin:.125rem;display:flex;cursor:pointer;align-items:center;justify-content:center;text-align:center;font-size:.875rem;line-height:1.25rem}ax-calendar .ax-calendar-footer{margin-top:1.25rem;display:flex;align-items:center;justify-content:center}ax-calendar .ax-calendar-footer .ax-today-button{display:block;height:var(--ax-size-default);width:100%;cursor:pointer;border-radius:var(--ax-rounded-border-default);background-color:rgba(var(--ax-color-primary-500));padding-left:1rem;padding-right:1rem;text-align:center;font-size:.875rem;line-height:1.25rem;color:rgba(var(--ax-color-primary-fore))}ax-calendar .ax-calendar-footer .ax-today-button.ax-state-disabled{cursor:not-allowed;opacity:.5}ax-calendar .ax-calendar-footer .ax-today-button.ax-state-readonly{cursor:text;opacity:.75}ax-calendar .ax-calendar-footer .ax-today-button:is(ax-calendar .ax-calendar-footer .ax-today-button:hover):not(.ax-state-disabled){background-color:rgba(var(--ax-color-primary-600))}ax-calendar .ax-calendar-footer .ax-today-button:is(ax-calendar .ax-calendar-footer .ax-today-button:focus,ax-calendar .ax-calendar-footer .ax-today-button:focus-visible):not(.ax-state-disabled){outline-color:rgba(var(--ax-color-primary-500),1)}.ax-calendar-picker{display:flex;width:100%}.ax-calendar-picker ax-picker{flex:1 1 0%}.ax-overlay-pane ax-calendar{border-style:none}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.AXRippleDirective, selector: "[axRipple]", inputs: ["axRipple", "axRippleColor"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
543
571
|
}
|
544
572
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXCalendarComponent, decorators: [{
|
545
573
|
type: Component,
|
@@ -589,7 +617,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
|
|
589
617
|
useExisting: AXCalendarComponent,
|
590
618
|
},
|
591
619
|
AXUnsubscriber,
|
592
|
-
], template: "<ng-content select=\"ax-header\"></ng-content>\n<div class=\"ax-calendar-body\">\n @for (v of views; let i = $index, first = $first, last = $last; track i) {\n @switch (activeView) {\n @case ('year') {\n @if (showNavigation) {\n <div class=\"ax-calendar-view-header\">\n <div class=\"ax-calendar-header-info\">\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-state-disabled\"\n (click)=\"_handleNavClick($event, 'year')\"\n >\n {{ v.range.startTime.format('YYYY') }} - {{ v.range.endTime.format('YYYY') }}\n </button>\n </div>\n @if (last) {\n <div class=\"ax-calendar-header-buttons\">\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-button-icon ax-next\"\n (click)=\"_handlePrevClick()\"\n [title]=\"'prev' | translate | async\"\n >\n <i class=\"ax-icon ax-icon-chevron-left\"></i>\n </button>\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-button-icon\"\n (click)=\"_handleNextClick()\"\n [title]=\"'next' | translate | async\"\n >\n <i class=\"ax-icon ax-icon-chevron-right\"></i>\n </button>\n </div>\n }\n </div>\n }\n <div class=\"ax-calendar-slots ax-calendar-slots-year\" [ngClass]=\"{ 'ax-default': !cellTemplate }\">\n @for (slot of v.slots; track slot.text) {\n <div\n tabindex=\"0\"\n class=\"ax-calendar-slot\"\n [class.ax-state-disabled]=\"disabled\"\n [ngClass]=\"slot.cssClass\"\n (click)=\"_handleSlotClick($event, slot)\"\n >\n @if (cellTemplate) {\n <div>\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: { $implicit: { slot: slot } }\">\n </ng-container>\n </div>\n } @else {\n <div [title]=\"slot.tooltip\">\n {{ slot.text }}\n </div>\n }\n </div>\n }\n </div>\n }\n @case ('month') {\n @if (showNavigation) {\n <div class=\"ax-calendar-view-header\">\n <div class=\"ax-calendar-header-info\">\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded\"\n (click)=\"_handleNavClick($event, 'year')\"\n >\n {{ v.range.startTime.format('YYYY') }}\n </button>\n </div>\n @if (last) {\n <div class=\"ax-calendar-header-buttons\">\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-button-icon\"\n (click)=\"_handlePrevClick()\"\n [title]=\"'prev' | translate | async\"\n >\n <i class=\"ax-icon ax-icon-chevron-left\"></i>\n </button>\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-button-icon\"\n (click)=\"_handleNextClick()\"\n [title]=\"'next' | translate | async\"\n >\n <i class=\"ax-icon ax-icon-chevron-right\"></i>\n </button>\n </div>\n }\n </div>\n }\n <div class=\"ax-calendar-slots ax-calendar-slots-month\" [ngClass]=\"{ 'ax-default': !cellTemplate }\">\n <div\n tabindex=\"0\"\n *ngFor=\"let slot of v.slots\"\n class=\"ax-calendar-slot\"\n [class.ax-state-disabled]=\"disabled\"\n [ngClass]=\"slot.cssClass\"\n (click)=\"_handleSlotClick($event, slot)\"\n >\n @if (cellTemplate) {\n <div>\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: { $implicit: { slot: slot } }\">\n </ng-container>\n </div>\n } @else {\n <div [title]=\"slot.tooltip\">\n {{ getMonthName(slot.date, 'short') | translate | async }}\n </div>\n }\n </div>\n </div>\n }\n @default {\n @if (showNavigation) {\n <div class=\"ax-calendar-view-header\">\n <div class=\"ax-calendar-header-info\">\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded\"\n (click)=\"_handleNavClick($event, 'year')\"\n >\n {{ v.range.startTime.format('YYYY') }}\n </button>\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded\"\n (click)=\"_handleNavClick($event, 'month')\"\n >\n {{ getMonthName(v.range.startTime, 'long') | translate | async }}\n </button>\n </div>\n @if (last) {\n <div class=\"ax-calendar-header-buttons\">\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-button-icon\"\n (click)=\"_handlePrevClick()\"\n [title]=\"'prev' | translate | async\"\n >\n <i class=\"ax-icon ax-icon-chevron-left\"></i>\n </button>\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-button-icon\"\n (click)=\"_handleNextClick()\"\n [title]=\"'next' | translate | async\"\n >\n <i class=\"ax-icon ax-icon-chevron-right\"></i>\n </button>\n </div>\n }\n </div>\n }\n <div class=\"ax-calendar-week\">\n <div *ngFor=\"let d of _weekdays\">{{ 'dateTime.weekdays.short.' + d | translate | async }}</div>\n </div>\n <div class=\"ax-calendar-slots ax-calendar-slots-day\" [ngClass]=\"{ 'ax-default': !cellTemplate }\">\n <ng-container *ngFor=\"let slot of v.slots\">\n <div\n tabindex=\"0\"\n class=\"ax-calendar-slot\"\n [class.ax-state-disabled]=\"disabled\"\n [ngClass]=\"slot.cssClass\"\n (click)=\"_handleSlotClick($event, slot)\"\n >\n @if (cellTemplate) {\n <div>\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: { $implicit: { slot: slot } }\">\n </ng-container>\n </div>\n } @else {\n <div [title]=\"slot.tooltip\">\n {{ slot.text }}\n </div>\n }\n </div>\n </ng-container>\n </div>\n }\n }\n }\n</div>\n<ng-content select=\"ax-footer\"></ng-content>\n", styles: [".ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:hover:not(.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:hover.ax-state-disabled,.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:hover.ax-state-selected){background-color:rgba(var(--ax-color-primary-200));color:rgba(var(--ax-color-primary-fore-tint))}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:focus-visible:not(.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:focus-visible.ax-state-disabled){outline-color:rgba(var(--ax-color-primary-200))}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-today{border-color:rgba(var(--ax-color-primary-200));color:rgba(var(--ax-color-primary-200))}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-today.ax-state-holiday{color:rgba(var(--ax-color-danger-200))!important;border-color:rgba(var(--ax-color-danger-200))!important}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected{background-color:rgba(var(--ax-color-primary-200));color:rgba(var(--ax-color-primary-fore-tint))}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected.ax-state-holiday{outline-color:rgba(var(--ax-color-primary-200))!important;background-color:rgba(var(--ax-color-danger-200))!important;color:rgba(var(--ax-color-danger-fore-tint))!important}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected.ax-state-holiday:is(.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected.ax-state-holiday:hover):not(.ax-state-disabled){background-color:rgba(var(--ax-color-danger-200))!important;border-color:rgba(var(--ax-color-danger-200))!important}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-holiday{color:rgba(var(--ax-color-danger-200))}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-holiday:is(.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-holiday:hover):not(.ax-state-disabled){background-color:rgba(var(--ax-color-danger-200))!important;border-color:rgba(var(--ax-color-danger-200))!important;color:rgba(var(--ax-color-danger-fore-tint))!important}.ax-dark ax-calendar .ax-calendar-footer:is(.ax-dark ax-calendar .ax-calendar-footer:focus,.ax-dark ax-calendar .ax-calendar-footer:focus-visible):not(.ax-state-disabled){outline-color:rgba(var(--ax-color-primary-200))}html[dir=rtl] ax-calendar .ax-calendar-header-buttons .ax-icon{-moz-transform:scale(-1,1);-o-transform:scale(-1,1);-webkit-transform:scale(-1,1);transform:scaleX(-1)}ax-calendar{display:block;width:100%;background-color:rgba(var(--ax-color-surface),var(--tw-bg-opacity));color:rgba(var(--ax-color-surface-fore),var(--tw-text-opacity))}ax-calendar.ax-state-disabled .ax-calendar-slots{cursor:not-allowed;opacity:.5}ax-calendar.ax-state-readonly .ax-calendar-slots{cursor:text}ax-calendar .ax-calendar-header{display:flex;justify-content:space-between;padding-left:.25rem;padding-right:.25rem;padding-top:.25rem}ax-calendar .ax-calendar-header .ax-calendar-header-info{font-weight:500}ax-calendar .ax-calendar-header .ax-calendar-header-buttons{display:flex}ax-calendar .ax-calendar-body{display:flex;flex-direction:column}@media (min-width: 1024px){ax-calendar .ax-calendar-body{flex-direction:column}}ax-calendar .ax-calendar-body>div{width:100%;flex:1 1 0%}@media (min-width: 768px){ax-calendar .ax-calendar-body>div{width:20rem}}ax-calendar .ax-calendar-body .ax-calendar-view-header{display:flex;justify-content:space-between;border-bottom-width:1px;border-color:rgba(var(--ax-color-border-default));padding:.5rem}ax-calendar .ax-calendar-body .ax-calendar-view-header .ax-calendar-header-info{font-weight:500}ax-calendar .ax-calendar-body .ax-calendar-view-header .ax-calendar-header-buttons{display:flex}ax-calendar .ax-calendar-body .ax-calendar-slots{display:grid;gap:.25rem;padding:1rem}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot{position:relative;display:flex;cursor:pointer;align-items:center;justify-content:center;border-radius:var(--ax-rounded-border-default);text-align:center;font-size:.875rem;line-height:1.25rem;color:rgba(var(--ax-color-surface-fore));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:before{content:\"\";float:left;padding-top:100%}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:after{content:\"\";clear:both;display:block}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:hover:not(ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:hover.ax-state-disabled,ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:hover.ax-state-selected){background-color:rgba(var(--ax-color-primary-500));color:rgba(var(--ax-color-primary-fore))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:focus-visible:not(ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:focus-visible.ax-state-disabled){outline-width:2px;outline-color:rgba(var(--ax-color-primary-500))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:focus-visible.ax-state-disabled{outline-style:dashed;outline-width:2px}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-disabled{cursor:not-allowed;opacity:.5}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-readonly{cursor:text;opacity:.75}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-1{grid-column-start:1}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-2{grid-column-start:2}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-3{grid-column-start:3}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-4{grid-column-start:4}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-5{grid-column-start:5}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-6{grid-column-start:6}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-7{grid-column-start:7}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-other{opacity:.05}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-today{border-width:1px;border-color:rgba(var(--ax-color-primary-500));color:rgba(var(--ax-color-primary-500))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-today.ax-state-holiday{border-color:rgba(var(--ax-color-danger-500))!important}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-focused{border-width:1px;border-color:rgba(var(--ax-color-border-default))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected{background-color:rgba(var(--ax-color-primary-500));color:rgba(var(--ax-color-primary-fore))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected.ax-state-holiday{background-color:rgba(var(--ax-color-danger-500))!important;color:rgba(var(--ax-color-danger-fore))!important}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected.ax-state-holiday{color:rgba(var(--ax-color-primary-fore))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-holiday{color:rgba(var(--ax-color-danger-500))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-holiday:is(ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-holiday:hover):not(.ax-state-disabled){background-color:rgba(var(--ax-color-danger-500))!important;border-color:rgba(var(--ax-color-danger-500))!important}ax-calendar .ax-calendar-body .ax-calendar-slots.ax-calendar-slots-day{grid-template-columns:repeat(7,minmax(0,1fr))}ax-calendar .ax-calendar-body .ax-calendar-slots.ax-calendar-slots-year,ax-calendar .ax-calendar-body .ax-calendar-slots.ax-calendar-slots-month{grid-template-columns:repeat(4,minmax(0,1fr))}ax-calendar .ax-calendar-body .ax-calendar-week{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));padding-left:.5rem;padding-right:.5rem;padding-top:.75rem}ax-calendar .ax-calendar-body .ax-calendar-week>div{position:relative;margin:.125rem;display:flex;cursor:pointer;align-items:center;justify-content:center;text-align:center;font-size:.875rem;line-height:1.25rem}ax-calendar .ax-calendar-footer{margin-top:1.25rem;display:flex;align-items:center;justify-content:center}ax-calendar .ax-calendar-footer .ax-today-button{display:block;height:var(--ax-size-default);width:100%;cursor:pointer;border-radius:var(--ax-rounded-border-default);background-color:rgba(var(--ax-color-primary-500));padding-left:1rem;padding-right:1rem;text-align:center;font-size:.875rem;line-height:1.25rem;color:rgba(var(--ax-color-primary-fore))}ax-calendar .ax-calendar-footer .ax-today-button.ax-state-disabled{cursor:not-allowed;opacity:.5}ax-calendar .ax-calendar-footer .ax-today-button.ax-state-readonly{cursor:text;opacity:.75}ax-calendar .ax-calendar-footer .ax-today-button:is(ax-calendar .ax-calendar-footer .ax-today-button:hover):not(.ax-state-disabled){background-color:rgba(var(--ax-color-primary-600))}ax-calendar .ax-calendar-footer .ax-today-button:is(ax-calendar .ax-calendar-footer .ax-today-button:focus,ax-calendar .ax-calendar-footer .ax-today-button:focus-visible):not(.ax-state-disabled){outline-color:rgba(var(--ax-color-primary-500),1)}.ax-calendar-picker{display:flex;width:100%}.ax-calendar-picker ax-picker{flex:1 1 0%}.ax-overlay-pane ax-calendar{border-style:none}\n"] }]
|
620
|
+
], template: "<ng-content select=\"ax-header\"></ng-content>\n<div class=\"ax-calendar-body\">\n @for (v of views; let i = $index, first = $first, last = $last; track i) {\n @switch (activeView) {\n @case ('year') {\n @if (showNavigation) {\n <div class=\"ax-calendar-view-header\">\n <div class=\"ax-calendar-header-info\">\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-state-disabled\"\n (click)=\"_handleNavClick($event, 'year')\"\n >\n {{ v.range.startTime.format('YYYY') }} - {{ v.range.endTime.format('YYYY') }}\n </button>\n </div>\n @if (last) {\n <div class=\"ax-calendar-header-buttons\">\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-button-icon ax-next\"\n (click)=\"_handlePrevClick()\"\n [title]=\"'prev' | translate | async\"\n >\n <i class=\"ax-icon ax-icon-chevron-left\"></i>\n </button>\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-button-icon\"\n (click)=\"_handleNextClick()\"\n [title]=\"'next' | translate | async\"\n >\n <i class=\"ax-icon ax-icon-chevron-right\"></i>\n </button>\n </div>\n }\n </div>\n }\n <div class=\"ax-calendar-slots ax-calendar-slots-year\" [ngClass]=\"{ 'ax-default': !cellTemplate }\">\n @for (slot of v.slots; track slot.text) {\n <button\n tabindex=\"0\"\n class=\"ax-calendar-slot\"\n [class.ax-state-disabled]=\"disabled\"\n [ngClass]=\"slot.cssClass\"\n (click)=\"_handleSlotClick($event, slot)\"\n >\n @if (cellTemplate) {\n <div>\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: { $implicit: { slot: slot } }\">\n </ng-container>\n </div>\n } @else {\n <div [title]=\"slot.tooltip\">\n {{ slot.text }}\n </div>\n }\n </button>\n }\n </div>\n }\n @case ('month') {\n @if (showNavigation) {\n <div class=\"ax-calendar-view-header\">\n <div class=\"ax-calendar-header-info\">\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded\"\n (click)=\"_handleNavClick($event, 'year')\"\n >\n {{ v.range.startTime.format('YYYY') }}\n </button>\n </div>\n @if (last) {\n <div class=\"ax-calendar-header-buttons\">\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-button-icon\"\n (click)=\"_handlePrevClick()\"\n [title]=\"'prev' | translate | async\"\n >\n <i class=\"ax-icon ax-icon-chevron-left\"></i>\n </button>\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-button-icon\"\n (click)=\"_handleNextClick()\"\n [title]=\"'next' | translate | async\"\n >\n <i class=\"ax-icon ax-icon-chevron-right\"></i>\n </button>\n </div>\n }\n </div>\n }\n <div class=\"ax-calendar-slots ax-calendar-slots-month\" [ngClass]=\"{ 'ax-default': !cellTemplate }\">\n <button\n tabindex=\"0\"\n *ngFor=\"let slot of v.slots\"\n class=\"ax-calendar-slot\"\n [class.ax-state-disabled]=\"disabled\"\n [ngClass]=\"slot.cssClass\"\n (click)=\"_handleSlotClick($event, slot)\"\n >\n @if (cellTemplate) {\n <div>\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: { $implicit: { slot: slot } }\">\n </ng-container>\n </div>\n } @else {\n <div [title]=\"slot.tooltip\">\n {{ getMonthName(slot.date, 'short') | translate | async }}\n </div>\n }\n </button>\n </div>\n }\n @default {\n @if (showNavigation) {\n <div class=\"ax-calendar-view-header\">\n <div class=\"ax-calendar-header-info\">\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded\"\n (click)=\"_handleNavClick($event, 'year')\"\n >\n {{ v.range.startTime.format('YYYY') }}\n </button>\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded\"\n (click)=\"_handleNavClick($event, 'month')\"\n >\n {{ getMonthName(v.range.startTime, 'long') | translate | async }}\n </button>\n </div>\n @if (last) {\n <div class=\"ax-calendar-header-buttons\">\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-button-icon\"\n (click)=\"_handlePrevClick()\"\n [title]=\"'prev' | translate | async\"\n >\n <i class=\"ax-icon ax-icon-chevron-left\"></i>\n </button>\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-button-icon\"\n (click)=\"_handleNextClick()\"\n [title]=\"'next' | translate | async\"\n >\n <i class=\"ax-icon ax-icon-chevron-right\"></i>\n </button>\n </div>\n }\n </div>\n }\n <div class=\"ax-calendar-week\">\n <div *ngFor=\"let d of _weekdays\">{{ 'dateTime.weekdays.short.' + d | translate | async }}</div>\n </div>\n <div class=\"ax-calendar-slots ax-calendar-slots-day\" [ngClass]=\"{ 'ax-default': !cellTemplate }\">\n <ng-container *ngFor=\"let slot of v.slots\">\n <button\n tabindex=\"0\"\n class=\"ax-calendar-slot\"\n [class.ax-state-disabled]=\"disabled\"\n [ngClass]=\"slot.cssClass\"\n (click)=\"_handleSlotClick($event, slot)\"\n [axRipple]=\"true\"\n >\n @if (cellTemplate) {\n <div>\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: { $implicit: { slot: slot } }\">\n </ng-container>\n </div>\n } @else {\n <div [title]=\"slot.tooltip\">\n {{ slot.text }}\n </div>\n }\n </button>\n </ng-container>\n </div>\n }\n }\n }\n</div>\n<ng-content select=\"ax-footer\"></ng-content>\n", styles: [".ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:hover:not(.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:hover.ax-state-disabled,.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:hover.ax-state-selected){background-color:rgba(var(--ax-color-primary-200));color:rgba(var(--ax-color-primary-fore-tint))}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:focus-visible:not(.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:focus-visible.ax-state-disabled){outline-color:rgba(var(--ax-color-primary-200))}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-today{border-color:rgba(var(--ax-color-primary-200));color:rgba(var(--ax-color-primary-200))}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-today.ax-state-holiday{color:rgba(var(--ax-color-danger-200))!important;border-color:rgba(var(--ax-color-danger-200))!important}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected{background-color:rgba(var(--ax-color-primary-200));color:rgba(var(--ax-color-primary-fore-tint))}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected.ax-state-holiday{outline-color:rgba(var(--ax-color-primary-200))!important;background-color:rgba(var(--ax-color-danger-200))!important;color:rgba(var(--ax-color-danger-fore-tint))!important}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected.ax-state-holiday:is(.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected.ax-state-holiday:hover):not(.ax-state-disabled){background-color:rgba(var(--ax-color-danger-200))!important;border-color:rgba(var(--ax-color-danger-200))!important}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-holiday{color:rgba(var(--ax-color-danger-200))}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-holiday:is(.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-holiday:hover):not(.ax-state-disabled){background-color:rgba(var(--ax-color-danger-200))!important;border-color:rgba(var(--ax-color-danger-200))!important;color:rgba(var(--ax-color-danger-fore-tint))!important}.ax-dark ax-calendar .ax-calendar-footer:is(.ax-dark ax-calendar .ax-calendar-footer:focus,.ax-dark ax-calendar .ax-calendar-footer:focus-visible):not(.ax-state-disabled){outline-color:rgba(var(--ax-color-primary-200))}html[dir=rtl] ax-calendar .ax-calendar-header-buttons .ax-icon{-moz-transform:scale(-1,1);-o-transform:scale(-1,1);-webkit-transform:scale(-1,1);transform:scaleX(-1)}ax-calendar{display:block;width:100%;background-color:rgba(var(--ax-color-surface),var(--tw-bg-opacity));color:rgba(var(--ax-color-surface-fore),var(--tw-text-opacity))}ax-calendar.ax-state-disabled .ax-calendar-slots{cursor:not-allowed;opacity:.5}ax-calendar.ax-state-readonly .ax-calendar-slots{cursor:text}ax-calendar .ax-calendar-header{display:flex;justify-content:space-between;padding-left:.25rem;padding-right:.25rem;padding-top:.25rem}ax-calendar .ax-calendar-header .ax-calendar-header-info{font-weight:500}ax-calendar .ax-calendar-header .ax-calendar-header-buttons{display:flex}ax-calendar .ax-calendar-body{display:flex;flex-direction:column;justify-content:center;align-items:center}@media (min-width: 1024px){ax-calendar .ax-calendar-body{flex-direction:column}}ax-calendar .ax-calendar-body>div{width:100%;flex:1 1 0%}@media (min-width: 768px){ax-calendar .ax-calendar-body>div{width:20rem}}ax-calendar .ax-calendar-body .ax-calendar-view-header{display:flex;justify-content:space-between;border-bottom-width:1px;border-color:rgba(var(--ax-color-border-default));padding:.5rem}ax-calendar .ax-calendar-body .ax-calendar-view-header .ax-calendar-header-info{font-weight:500}ax-calendar .ax-calendar-body .ax-calendar-view-header .ax-calendar-header-buttons{display:flex}ax-calendar .ax-calendar-body .ax-calendar-slots{display:grid;gap:.25rem;padding:1rem}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot{position:relative;display:flex;cursor:pointer;align-items:center;justify-content:center;border-radius:var(--ax-rounded-border-default);text-align:center;font-size:.875rem;line-height:1.25rem;color:rgba(var(--ax-color-surface-fore));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:before{content:\"\";float:left;padding-top:100%}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:after{content:\"\";clear:both;display:block}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:hover:not(ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:hover.ax-state-disabled,ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:hover.ax-state-selected){background-color:rgba(var(--ax-color-primary-500));color:rgba(var(--ax-color-primary-fore))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:focus-visible:not(ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:focus-visible.ax-state-disabled){outline-width:2px;outline-color:rgba(var(--ax-color-primary-500))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:focus-visible.ax-state-disabled{outline-style:dashed;outline-width:2px}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-disabled{cursor:not-allowed;opacity:.5}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-readonly{cursor:text;opacity:.75}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-1{grid-column-start:1}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-2{grid-column-start:2}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-3{grid-column-start:3}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-4{grid-column-start:4}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-5{grid-column-start:5}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-6{grid-column-start:6}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-7{grid-column-start:7}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-other{opacity:.05}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-today{border-width:1px;border-color:rgba(var(--ax-color-primary-500));color:rgba(var(--ax-color-primary-500))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-today.ax-state-holiday{border-color:rgba(var(--ax-color-danger-500))!important}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-focused{border-width:1px;border-color:rgba(var(--ax-color-border-default))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected{background-color:rgba(var(--ax-color-primary-500));color:rgba(var(--ax-color-primary-fore))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected.ax-state-holiday{background-color:rgba(var(--ax-color-danger-500))!important;color:rgba(var(--ax-color-danger-fore))!important}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected.ax-state-holiday{color:rgba(var(--ax-color-primary-fore))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-holiday{color:rgba(var(--ax-color-danger-500))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-holiday:is(ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-holiday:hover):not(.ax-state-disabled){background-color:rgba(var(--ax-color-danger-500))!important;border-color:rgba(var(--ax-color-danger-500))!important}ax-calendar .ax-calendar-body .ax-calendar-slots.ax-calendar-slots-day{grid-template-columns:repeat(7,minmax(0,1fr))}ax-calendar .ax-calendar-body .ax-calendar-slots.ax-calendar-slots-year,ax-calendar .ax-calendar-body .ax-calendar-slots.ax-calendar-slots-month{grid-template-columns:repeat(4,minmax(0,1fr))}ax-calendar .ax-calendar-body .ax-calendar-week{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));padding-left:.5rem;padding-right:.5rem;padding-top:.75rem}ax-calendar .ax-calendar-body .ax-calendar-week>div{position:relative;margin:.125rem;display:flex;cursor:pointer;align-items:center;justify-content:center;text-align:center;font-size:.875rem;line-height:1.25rem}ax-calendar .ax-calendar-footer{margin-top:1.25rem;display:flex;align-items:center;justify-content:center}ax-calendar .ax-calendar-footer .ax-today-button{display:block;height:var(--ax-size-default);width:100%;cursor:pointer;border-radius:var(--ax-rounded-border-default);background-color:rgba(var(--ax-color-primary-500));padding-left:1rem;padding-right:1rem;text-align:center;font-size:.875rem;line-height:1.25rem;color:rgba(var(--ax-color-primary-fore))}ax-calendar .ax-calendar-footer .ax-today-button.ax-state-disabled{cursor:not-allowed;opacity:.5}ax-calendar .ax-calendar-footer .ax-today-button.ax-state-readonly{cursor:text;opacity:.75}ax-calendar .ax-calendar-footer .ax-today-button:is(ax-calendar .ax-calendar-footer .ax-today-button:hover):not(.ax-state-disabled){background-color:rgba(var(--ax-color-primary-600))}ax-calendar .ax-calendar-footer .ax-today-button:is(ax-calendar .ax-calendar-footer .ax-today-button:focus,ax-calendar .ax-calendar-footer .ax-today-button:focus-visible):not(.ax-state-disabled){outline-color:rgba(var(--ax-color-primary-500),1)}.ax-calendar-picker{display:flex;width:100%}.ax-calendar-picker ax-picker{flex:1 1 0%}.ax-overlay-pane ax-calendar{border-style:none}\n"] }]
|
593
621
|
}], ctorParameters: () => [{ type: i1.AXUnsubscriber }], propDecorators: { __hostClass: [{
|
594
622
|
type: HostBinding,
|
595
623
|
args: ['class']
|
@@ -597,4 +625,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
|
|
597
625
|
type: HostListener,
|
598
626
|
args: ['keydown', ['$event']]
|
599
627
|
}] } });
|
600
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2NhbGVuZGFyL3NyYy9saWIvY2FsZW5kYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2NhbGVuZGFyL3NyYy9saWIvY2FsZW5kYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLG1CQUFtQixFQUVuQixzQkFBc0IsRUFDdEIsZ0JBQWdCLEdBQ2pCLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFjLGVBQWUsRUFBWSxNQUFNLHdCQUF3QixDQUFDO0FBQy9FLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFN0gsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbkMsT0FBTyxFQUEwRCx1QkFBdUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7OztBQUVuSDs7OztHQUlHO0FBeURILE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxPQUFPLENBQUMsQ0FBQSxnQkFBNkIsQ0FBQSxFQUFFLHNCQUFzQixFQUFFLHVCQUF1QixDQUFDO0lBQzlILElBQVcsWUFBWTtRQUNyQixPQUFPLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUss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b0JBQW9CO3dCQUNwQixZQUFZO3dCQUNaLGFBQWE7d0JBQ2IsYUFBYTtxQkFDZCxhQUNVO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLG9CQUFvQixDQUFDOzRCQUNsRCxLQUFLLEVBQUUsSUFBSTt5QkFDWjt3QkFDRDs0QkFDRSxPQUFPLEVBQUUsbUJBQW1COzRCQUM1QixXQUFXLHFCQUFxQjt5QkFDakM7d0JBQ0QsY0FBYztxQkFDZjttRkF5Y1csV0FBVztzQkFEdEIsV0FBVzt1QkFBQyxPQUFPO2dCQTBEcEIscUJBQXFCO3NCQURwQixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFYQ2xpY2tFdmVudCxcbiAgQVhWYWx1YWJsZUNvbXBvbmVudCxcbiAgTVhDb21wb25lbnRPcHRpb25DaGFuZ2VkLFxuICBNWEludGVyYWN0aXZlQ29tcG9uZW50LFxuICBNWFZhbHVlQ29tcG9uZW50LFxufSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvY29tbW9uJztcbmltcG9ydCB7IEFYRGF0ZVRpbWUsIEFYRGF0ZVRpbWVSYW5nZSwgVGltZVVuaXQgfSBmcm9tICdAYWNvcmV4L2NvcmUvZGF0ZS10aW1lJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEhvc3RCaW5kaW5nLCBIb3N0TGlzdGVuZXIsIFZpZXdFbmNhcHN1bGF0aW9uLCBmb3J3YXJkUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEFYVW5zdWJzY3JpYmVyIH0gZnJvbSAnQGFjb3JleC9jb3JlL3V0aWxzJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgY2xhc3NlcyB9IGZyb20gJ3BvbHl0eXBlJztcbmltcG9ydCB7IEFYQ2FsZW5kYXJWaWV3LCBBWENhbGVuZGFyVmlld1Nsb3QsIEFYQ2FsZW5kYXJWaWV3VHlwZSwgTVhDYWxlbmRhckJhc2VDb21wb25lbnQgfSBmcm9tICcuL2NhbGVuZGFyLmNsYXNzJztcblxuLyoqXG4gKiBBIGNhbGVuZGFyIGNvbXBvbmVudCB0aGF0IHByb3ZpZGVzIGEgY3VzdG9taXphYmxlIGNhbGVuZGFyIHZpZXcgd2l0aCB2YXJpb3VzIG9wdGlvbnMgZm9yIHNlbGVjdGlvbiwgbmF2aWdhdGlvbiwgYW5kIHN0eWxpbmcuXG4gKlxuICogQGNhdGVnb3J5IENvbXBvbmVudHNcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXgtY2FsZW5kYXInLFxuICB0ZW1wbGF0ZVVybDogJy4vY2FsZW5kYXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jYWxlbmRhci5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW5wdXRzOiBbXG4gICAgJ3J0bCcsXG4gICAgJ3JlYWRvbmx5JyxcbiAgICAndmFsdWUnLFxuICAgICduYW1lJyxcbiAgICAnZGlzYWJsZWQnLFxuICAgICdkZXB0aCcsXG4gICAgJ2FjdGl2ZVZpZXcnLFxuICAgICdtaW5WYWx1ZScsXG4gICAgJ21heFZhbHVlJyxcbiAgICAnZGlzYWJsZWREYXRlcycsXG4gICAgJ2hvbGlkYXlEYXRlcycsXG4gICAgJ3R5cGUnLFxuICAgICdjZWxsVGVtcGxhdGUnLFxuICAgICdjZWxsQ2xhc3MnLFxuICAgICdzaG93TmF2aWdhdGlvbicsXG4gICAgJ2NvdW50JyxcbiAgICAnbmFtZScsXG4gICAgJ2lkJyxcbiAgXSxcbiAgb3V0cHV0czogW1xuICAgICdvbk9wdGlvbkNoYW5nZWQnLFxuICAgICd2YWx1ZUNoYW5nZScsXG4gICAgJ29uVmFsdWVDaGFuZ2VkJyxcbiAgICAnbWluVmFsdWVDaGFuZ2UnLFxuICAgICdtYXhWYWx1ZUNoYW5nZScsXG4gICAgJ29uQmx1cicsXG4gICAgJ29uRm9jdXMnLFxuICAgICdkZXB0aENoYW5nZScsXG4gICAgJ3R5cGVDaGFuZ2UnLFxuICAgICdhY3RpdmVWaWV3Q2hhbmdlJyxcbiAgICAnZGlzYWJsZWREYXRlc0NoYW5nZScsXG4gICAgJ2hvbGlkYXlEYXRlc0NoYW5nZScsXG4gICAgJ29uTmF2aWdhdGUnLFxuICAgICdvblNsb3RDbGljaycsXG4gICAgJ2NvdW50Q2hhbmdlJyxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBBWENhbGVuZGFyQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogQVhWYWx1YWJsZUNvbXBvbmVudCxcbiAgICAgIHVzZUV4aXN0aW5nOiBBWENhbGVuZGFyQ29tcG9uZW50LFxuICAgIH0sXG4gICAgQVhVbnN1YnNjcmliZXIsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEFYQ2FsZW5kYXJDb21wb25lbnQgZXh0ZW5kcyBjbGFzc2VzKE1YVmFsdWVDb21wb25lbnQ8RGF0ZSB8IG51bGw+LCBNWEludGVyYWN0aXZlQ29tcG9uZW50LCBNWENhbGVuZGFyQmFzZUNvbXBvbmVudCkge1xuICBwdWJsaWMgZ2V0IGRpc3BsYXlSYW5nZSgpOiBBWERhdGVUaW1lUmFuZ2Uge1xuICAgIHJldHVybiBuZXcgQVhEYXRlVGltZVJhbmdlKHRoaXMudmlld3NbMF0ucmFuZ2Uuc3RhcnRUaW1lLCB0aGlzLnZpZXdzW3RoaXMudmlld3MubGVuZ3RoIC0gMV0ucmFuZ2UuZW5kVGltZSk7XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByaXZhdGUgX3NldERpc3BsYXlSYW5nZShjdXJyZW50OiBBWERhdGVUaW1lKTogQVhEYXRlVGltZVJhbmdlIHtcbiAgICBzd2l0Y2ggKHRoaXMuYWN0aXZlVmlldykge1xuICAgICAgY2FzZSAneWVhcic6IHtcbiAgICAgICAgY29uc3QgeSA9IGN1cnJlbnQuc3RhcnRPZigneWVhcicpLnllYXI7XG4gICAgICAgIGNvbnN0IG1pbiA9IHkgLSAoeSAlIDEwKTtcbiAgICAgICAgY29uc3QgbWF4ID0gbWluICsgOTtcbiAgICAgICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lUmFuZ2UoXG4gICAgICAgICAgdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB5ZWFyOiBtaW4sXG4gICAgICAgICAgICAgIG1vbnRoOiAxLFxuICAgICAgICAgICAgICBkYXRlOiAxLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRoaXMudHlwZSxcbiAgICAgICAgICApLFxuICAgICAgICAgIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgeWVhcjogbWF4LFxuICAgICAgICAgICAgICBtb250aDogMTIsXG4gICAgICAgICAgICAgIGRhdGU6IDI4LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRoaXMudHlwZSxcbiAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICByZXR1cm4gbmV3IEFYRGF0ZVRpbWVSYW5nZShjdXJyZW50LnN0YXJ0T2YoJ3llYXInKSwgY3VycmVudC5lbmRPZigneWVhcicpLmFkZCgnZGF5JywgLTEpKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBuZXcgQVhEYXRlVGltZVJhbmdlKGN1cnJlbnQuc3RhcnRPZignbW9udGgnKSwgY3VycmVudC5lbmRPZignbW9udGgnKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBwcm90ZWN0ZWQgX3RvZGF5ID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKG5ldyBEYXRlKCksIHRoaXMudHlwZSk7XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBwcml2YXRlIF92aWV3U3RhcnREYXRlITogQVhEYXRlVGltZTtcblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByaXZhdGUgX25hdlVzZXJJbnRlcmFjdGlvbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiAgQGlnbm9yZVxuICAgKi9cbiAgcHJpdmF0ZSBfZm9vdFByaW50ID0ge1xuICAgIHllYXI6IG51bGwsXG4gICAgbW9udGg6IG51bGwsXG4gICAgZGF5OiBudWxsLFxuICB9O1xuXG4gIC8qKlxuICAgKiAgQGlnbm9yZVxuICAgKi9cbiAgcHJvdGVjdGVkIHZpZXdzOiBBWENhbGVuZGFyVmlld1tdID0gW107XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBwcm90ZWN0ZWQgX3dlZWtkYXlzOiBudW1iZXJbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiAgQGlnbm9yZVxuICAgKi9cbiAgcHJpdmF0ZSBfaW5pdFZhbHVlcygpIHtcbiAgICB0aGlzLl90b2RheSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShuZXcgRGF0ZSgpLCB0aGlzLnR5cGUpO1xuICAgIHRoaXMuX3dlZWtkYXlzID0gdGhpcy5fdG9kYXkuY2FsZW5kYXIud2Vla2RheXM7XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByaXZhdGUgX3JlZnJlc2goKSB7XG4gICAgdGhpcy5faW5pdFZhbHVlcygpO1xuICAgIHRoaXMubmF2VG8odGhpcy52YWx1ZSB8fCB0aGlzLl90b2RheSk7XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIGNvbnN0cnVjdG9yKHVuc3Vic2NyaWJlcjogQVhVbnN1YnNjcmliZXIpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLm9uSG9saWRheXNDaGFuZ2VkLnBpcGUodW5zdWJzY3JpYmVyLnRha2VVbnRpbERlc3Ryb3kpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH0pO1xuICAgIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNhbGVuZGFyQ2hhbmdlcyQucGlwZSh1bnN1YnNjcmliZXIudGFrZVVudGlsRGVzdHJveSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuX3JlZnJlc2goKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiAgQGlnbm9yZVxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIG5nT25Jbml0KCkge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgdGhpcy5faW5pdFZhbHVlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBwcm90ZWN0ZWQgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy52YWx1ZSkge1xuICAgICAgdGhpcy5nb1RvZGF5KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKTogdm9pZCB7fVxuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICBpZiAoIXRoaXMuX3ZpZXdTdGFydERhdGUpIHJldHVybjtcbiAgICBjb25zdCBhcHBseUNlbGxDbGFzcyA9IChzbG90OiBBWENhbGVuZGFyVmlld1Nsb3QsIGNlbGxDbGFzczogYW55ID0gdGhpcy5jZWxsQ2xhc3MpID0+IHtcbiAgICAgIHN3aXRjaCAodHlwZW9mIGNlbGxDbGFzcykge1xuICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgIGNlbGxDbGFzcy5zcGxpdCgnICcpLmZvckVhY2goKGMpID0+IChzbG90LmNzc0NsYXNzW2NdID0gdHJ1ZSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICAgIE9iamVjdC5hc3NpZ24oc2xvdC5jc3NDbGFzcywgY2VsbENsYXNzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgICAgIGFwcGx5Q2VsbENsYXNzKHNsb3QsIGNlbGxDbGFzcyhzbG90LmRhdGUpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMudmlld3MgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY291bnQ7IGkrKykge1xuICAgICAgbGV0IHVuaXQ6IFRpbWVVbml0ID0gJ21vbnRoJztcbiAgICAgIGxldCB2YWx1ZTogbnVtYmVyID0gaTtcbiAgICAgIC8vXG4gICAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09ICdkYXknKSB7XG4gICAgICAgIHVuaXQgPSAnbW9udGgnO1xuICAgICAgICB2YWx1ZSA9IGk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuYWN0aXZlVmlldyA9PSAnbW9udGgnKSB7XG4gICAgICAgIHVuaXQgPSAneWVhcic7XG4gICAgICAgIHZhbHVlID0gaTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVuaXQgPSAneWVhcic7XG4gICAgICAgIHZhbHVlID0gaSAqIDEwO1xuICAgICAgfVxuICAgICAgLy9cbiAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLl92aWV3U3RhcnREYXRlLmFkZCh1bml0LCB2YWx1ZSk7XG4gICAgICBjb25zdCB2aWV3OiBBWENhbGVuZGFyVmlldyA9IHtcbiAgICAgICAgcmFuZ2U6IHRoaXMuX3NldERpc3BsYXlSYW5nZShjdXJyZW50KSxcbiAgICAgICAgc2xvdHM6IFtdLFxuICAgICAgfTtcbiAgICAgIHRoaXMudmlld3MucHVzaCh2aWV3KTtcbiAgICAgIC8vXG4gICAgICAvLyB5ZWFyIHZpZXdcbiAgICAgIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT0gJ3llYXInKSB7XG4gICAgICAgIGNvbnN0IGEgPSB2aWV3LnJhbmdlLmVudW11cmF0ZSgneWVhcicpO1xuXG4gICAgICAgIHZpZXcuc2xvdHMgPSBhLm1hcCgoZCwgaSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHI6IGFueSA9IHt9O1xuICAgICAgICAgIHIuZGF0ZSA9IGQ7XG4gICAgICAgICAgLy9cbiAgICAgICAgICByLnRleHQgPSBkLmZvcm1hdCgnWVlZWScpO1xuICAgICAgICAgIHIudG9vbHRpcCA9IGQuZm9ybWF0KCdZWVlZJyk7XG4gICAgICAgICAgLy9cbiAgICAgICAgICByLnRvZGF5ID0gZC5lcXVhbCh0aGlzLl90b2RheSwgJ3llYXInKTtcbiAgICAgICAgICAvL1xuICAgICAgICAgIHIuc2VsZWN0ZWQgPSB0aGlzLnZhbHVlICYmIHRoaXMuZGVwdGggPT0gJ3llYXInICYmIGQuZXF1YWwodGhpcy52YWx1ZSwgJ3llYXInKTtcbiAgICAgICAgICAvL1xuICAgICAgICAgIGNvbnN0IGZvY3VzZWQgPSBkLnllYXIgPT0gdGhpcy5fZm9vdFByaW50LnllYXI7XG4gICAgICAgICAgLy9cbiAgICAgICAgICByLmRpc2FibGVkID1cbiAgICAgICAgICAgICh0aGlzLm1pblZhbHVlICYmIGQuY29tcGFyZSh0aGlzLm1pblZhbHVlLCAneWVhcicpID09IC0xKSB8fCAodGhpcy5tYXhWYWx1ZSAmJiBkLmNvbXBhcmUodGhpcy5tYXhWYWx1ZSwgJ3llYXInKSA9PSAxKTtcbiAgICAgICAgICAvL1xuICAgICAgICAgIGlmIChyLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByLmNzc0NsYXNzID0ge1xuICAgICAgICAgICAgICAnYXgtc3RhdGUtZGlzYWJsZWQnOiByLmRpc2FibGVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgci5jc3NDbGFzcyA9IHtcbiAgICAgICAgICAgICAgJ2F4LXN0YXRlLXRvZGF5Jzogci50b2RheSxcbiAgICAgICAgICAgICAgJ2F4LXN0YXRlLXNlbGVjdGVkJzogci5zZWxlY3RlZCxcbiAgICAgICAgICAgICAgJ2F4LXN0YXRlLWZvY3VzZWQnOiBmb2N1c2VkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYXBwbHlDZWxsQ2xhc3Mocik7XG4gICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgLy8gbW9udGggdmlld1xuICAgICAgZWxzZSBpZiAodGhpcy5hY3RpdmVWaWV3ID09ICdtb250aCcpIHtcbiAgICAgICAgY29uc3QgYSA9IHZpZXcucmFuZ2UuZW51bXVyYXRlKCdtb250aCcpO1xuICAgICAgICB2aWV3LnNsb3RzID0gYS5tYXAoKGQsIGkpID0+IHtcbiAgICAgICAgICBjb25zdCByOiBhbnkgPSB7fTtcbiAgICAgICAgICByLmRhdGUgPSBkO1xuICAgICAgICAgIHIudGV4dCA9IGQuZm9ybWF0KCdNTU0nKTtcbiAgICAgICAgICByLnRvb2x0aXAgPSBkLmZvcm1hdCgnTU1NTSBZWVlZJyk7XG4gICAgICAgICAgci50b2RheSA9IGQuZXF1YWwodGhpcy5fdG9kYXksICdtb250aCcpO1xuICAgICAgICAgIC8vXG4gICAgICAgICAgci5kaXNhYmxlZCA9XG4gICAgICAgICAgICAodGhpcy5taW5WYWx1ZSAmJiBkLmNvbXBhcmUodGhpcy5taW5WYWx1ZSwgJ21vbnRoJykgPT0gLTEpIHx8ICh0aGlzLm1heFZhbHVlICYmIGQuY29tcGFyZSh0aGlzLm1heFZhbHVlLCAnbW9udGgnKSA9PSAxKTtcbiAgICAgICAgICAvL1xuICAgICAgICAgIHIuc2VsZWN0ZWQgPSB0aGlzLnZhbHVlICYmIHRoaXMuZGVwdGggPT0gJ21vbnRoJyAmJiBkLmVxdWFsKHRoaXMudmFsdWUsICdtb250aCcpO1xuICAgICAgICAgIC8vXG4gICAgICAgICAgY29uc3QgZm9jdXNlZCA9IGQubW9udGhPZlllYXIgPT0gdGhpcy5fZm9vdFByaW50Lm1vbnRoICYmIGQueWVhciA9PSB0aGlzLl9mb290UHJpbnQueWVhcjtcbiAgICAgICAgICAvL1xuICAgICAgICAgIGlmIChyLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByLmNzc0NsYXNzID0ge1xuICAgICAgICAgICAgICAnYXgtc3RhdGUtZGlzYWJsZWQnOiByLmRpc2FibGVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgci5jc3NDbGFzcyA9IHtcbiAgICAgICAgICAgICAgJ2F4LXN0YXRlLXRvZGF5Jzogci50b2RheSxcbiAgICAgICAgICAgICAgJ2F4LXN0YXRlLXNlbGVjdGVkJzogci5zZWxlY3RlZCxcbiAgICAgICAgICAgICAgJ2F4LXN0YXRlLWZvY3VzZWQnOiBmb2N1c2VkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYXBwbHlDZWxsQ2xhc3Mocik7XG4gICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgLy8gZGF5IHZpZXdcbiAgICAgIGVsc2Uge1xuICAgICAgICBjb25zdCBhID0gdmlldy5yYW5nZS5lbnVtdXJhdGUoJ2RheScpO1xuICAgICAgICB2aWV3LnNsb3RzID0gYS5tYXAoKGQsIGkpID0+IHtcbiAgICAgICAgICBjb25zdCByOiBhbnkgPSB7fTtcbiAgICAgICAgICByLmRhdGUgPSBkO1xuICAgICAgICAgIHIudGV4dCA9IGQuZGF5T2ZNb250aDtcbiAgICAgICAgICByLnRvb2x0aXAgPSBkLmZvcm1hdCgnbG9uZ0RhdGUnKTtcbiAgICAgICAgICByLnRvZGF5ID0gZC5lcXVhbCh0aGlzLl90b2RheSwgJ2RheScpO1xuICAgICAgICAgIHIuc2VsZWN0ZWQgPSB0aGlzLnZhbHVlICYmIGQuZXF1YWwodGhpcy52YWx1ZSwgJ2RheScpO1xuICAgICAgICAgIHIuaG9saWRheSA9IHRoaXMuaXNIb2xpZGF5KGQpIHx8IHRoaXMuaXNXZWVrZW5kKGQpO1xuICAgICAgICAgIHIuZGlzYWJsZWQgPVxuICAgICAgICAgICAgKHRoaXMubWluVmFsdWUgJiYgZC5jb21wYXJlKHRoaXMubWluVmFsdWUsICdkYXknKSA9PSAtMSkgfHxcbiAgICAgICAgICAgICh0aGlzLm1heFZhbHVlICYmIGQuY29tcGFyZSh0aGlzLm1heFZhbHVlLCAnZGF5JykgPT0gMSkgfHxcbiAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlZChkKTtcbiAgICAgICAgICAvL1xuICAgICAgICAgIGNvbnN0IGZvY3VzZWQgPSBkLmRheU9mTW9udGggPT0gdGhpcy5fZm9vdFByaW50LmRheSAmJiBkLm1vbnRoT2ZZZWFyID09IHRoaXMuX2Zvb3RQcmludC5tb250aCAmJiBkLnllYXIgPT0gdGhpcy5fZm9vdFByaW50LnllYXI7XG4gICAgICAgICAgLy9cbiAgICAgICAgICBpZiAoci5kaXNhYmxlZCkge1xuICAgICAgICAgICAgci5jc3NDbGFzcyA9IHtcbiAgICAgICAgICAgICAgJ2F4LXN0YXRlLWRpc2FibGVkJzogdHJ1ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHIuY3NzQ2xhc3MgPSB7XG4gICAgICAgICAgICAgICdheC1zdGF0ZS10b2RheSc6IHIudG9kYXksXG4gICAgICAgICAgICAgICdheC1zdGF0ZS1zZWxlY3RlZCc6IHIuc2VsZWN0ZWQsXG4gICAgICAgICAgICAgICdheC1zdGF0ZS1ob2xpZGF5Jzogci5ob2xpZGF5LFxuICAgICAgICAgICAgICAvLydheC1zdGF0ZS1mb2N1c2VkJzogZm9jdXNlZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGF4LWNvbC1zdGFydC0xIGF4LWNvbC1zdGFydC0yIGF4LWNvbC1zdGFydC0zIGF4LWNvbC1zdGFydC00IGF4LWNvbC1zdGFydC01IGF4LWNvbC1zdGFydC02IGF4LWNvbC1zdGFydC03XG4gICAgICAgICAgci5jc3NDbGFzc1tgYXgtY29sdW1uLXN0YXJ0LSR7dmlldy5yYW5nZS5zdGFydFRpbWUuZGF5T2ZXZWVrfWBdID0gaSA9PSAwO1xuICAgICAgICAgIGlmICh0aGlzLmNlbGxDbGFzcykgYXBwbHlDZWxsQ2xhc3Mocik7XG4gICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAgQGlnbm9yZVxuICAgKi9cbiAgcHJvdGVjdGVkIF9oYW5kbGVQcmV2Q2xpY2soKSB7XG4gICAgdGhpcy5fbmF2VXNlckludGVyYWN0aW9uID0gdHJ1ZTtcbiAgICB0aGlzLnByZXYoKTtcbiAgICB0aGlzLl9uYXZVc2VySW50ZXJhY3Rpb24gPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiAgQGlnbm9yZVxuICAgKi9cbiAgcHJvdGVjdGVkIF9oYW5kbGVOZXh0Q2xpY2soKSB7XG4gICAgdGhpcy5fbmF2VXNlckludGVyYWN0aW9uID0gdHJ1ZTtcbiAgICB0aGlzLm5leHQoKTtcbiAgICB0aGlzLl9uYXZVc2VySW50ZXJhY3Rpb24gPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiAgQGlnbm9yZVxuICAgKi9cbiAgcHJvdGVjdGVkIF9oYW5kbGVTbG90Q2xpY2soZTogTW91c2VFdmVudCwgc2xvdDogQVhDYWxlbmRhclZpZXdTbG90KSB7XG4gICAgaWYgKHNsb3QuZGlzYWJsZWQgfHwgdGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xuICAgIC8vXG4gICAgdGhpcy5vblNsb3RDbGljay5lbWl0KHtcbiAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgIGl0ZW06IHNsb3QuZGF0ZS5kYXRlLFxuICAgICAgaXNVc2VySW50ZXJhY3Rpb246IHRydWUsXG4gICAgICBuYXRpdmVFdmVudDogZSxcbiAgICB9KTtcbiAgICAvL1xuICAgIGNvbnN0IHZhbCA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShzbG90LmRhdGUuZGF0ZSwgdGhpcy50eXBlKTtcbiAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09ICdkYXknKSB7XG4gICAgICB0aGlzLl9zZXREYXRlKHNsb3QuZGF0ZS5kYXRlKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuYWN0aXZlVmlldyA9PSAnbW9udGgnICYmIHRoaXMuZGVwdGggPT0gJ2RheScpIHtcbiAgICAgIHRoaXMuYWN0aXZlVmlldyA9ICdkYXknO1xuICAgICAgdGhpcy5fZm9vdFByaW50Lm1vbnRoID0gdmFsLm1vbnRoT2ZZZWFyO1xuICAgICAgdGhpcy5uYXZUbyhzbG90LmRhdGUpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5hY3RpdmVWaWV3ID09ICdtb250aCcgJiYgdGhpcy5kZXB0aCA9PSAnbW9udGgnKSB7XG4gICAgICB0aGlzLl9zZXREYXRlKHNsb3QuZGF0ZS5kYXRlKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuYWN0aXZlVmlldyA9PSAneWVhcicgJiYgKHRoaXMuZGVwdGggPT0gJ2RheScgfHwgdGhpcy5kZXB0aCA9PSAnbW9udGgnKSkge1xuICAgICAgdGhpcy5hY3RpdmVWaWV3ID0gJ21vbnRoJztcbiAgICAgIHRoaXMuX2Zvb3RQcmludC55ZWFyID0gdmFsLnllYXI7XG4gICAgICB0aGlzLm5hdlRvKHNsb3QuZGF0ZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT0gJ3llYXInICYmIHRoaXMuZGVwdGggPT0gJ3llYXInKSB7XG4gICAgICB0aGlzLl9zZXREYXRlKHNsb3QuZGF0ZS5kYXRlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByb3RlY3RlZCBfaGFuZGxlTmF2Q2xpY2soZTogQVhDbGlja0V2ZW50IHwgYW55LCB2aWV3OiBBWENhbGVuZGFyVmlld1R5cGUpIHtcbiAgICB0aGlzLl9uYXZVc2VySW50ZXJhY3Rpb24gPSB0cnVlO1xuICAgIHRoaXMuYWN0aXZlVmlldyA9IHZpZXc7XG4gICAgdGhpcy5fbmF2VXNlckludGVyYWN0aW9uID0gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlVmlldygpIHtcbiAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09ICdkYXknKSB0aGlzLmFjdGl2ZVZpZXcgPSAnbW9udGgnO1xuICAgIGVsc2UgaWYgKHRoaXMuYWN0aXZlVmlldyA9PSAnbW9udGgnKSB0aGlzLmFjdGl2ZVZpZXcgPSAneWVhcic7XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBpbnRlcm5hbE9wdGlvbkNoYW5nZWQoZTogTVhDb21wb25lbnRPcHRpb25DaGFuZ2VkKSB7XG4gICAgaWYgKGUubmFtZSA9PSAnZGVwdGgnIHx8IGUubmFtZSA9PSAnYWN0aXZlVmlldycgfHwgZS5uYW1lID09ICdkaXNhYmxlZERhdGVzJyB8fCBlLm5hbWUgPT0gJ2hvbGlkYXlEYXRlcycpIHtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgfVxuICAgIGlmIChlLm5hbWUgPT0gJ3R5cGUnKSB7XG4gICAgICB0aGlzLl9yZWZyZXNoKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgaW50ZXJuYWxTZXRWYWx1ZSh2YWx1ZTogRGF0ZSk6IERhdGUgfCBudWxsIHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCB2ID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY29udmVydCh2YWx1ZSk7XG4gICAgY29uc3QgaXNEaXNhYmxlZCA9IHRoaXMuaXNEaXNhYmxlZCh2KTtcbiAgICBpZiAoaXNEaXNhYmxlZCkgcmV0dXJuIG51bGw7XG4gICAgZWxzZSByZXR1cm4gdi5kYXRlO1xuICB9XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgaW50ZXJuYWxWYWx1ZUNoYW5nZWQodmFsdWU/OiBEYXRlKSB7XG4gICAgY29uc3QgdmFsID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKHZhbHVlLCB0aGlzLnR5cGUpO1xuICAgIGlmIChcbiAgICAgICF0aGlzLl92aWV3U3RhcnREYXRlIHx8XG4gICAgICB2YWwuY29tcGFyZSh0aGlzLmRpc3BsYXlSYW5nZS5zdGFydFRpbWUsIHRoaXMuYWN0aXZlVmlldykgPT0gLTEgfHxcbiAgICAgIHZhbC5jb21wYXJlKHRoaXMuZGlzcGxheVJhbmdlLmVuZFRpbWUsIHRoaXMuYWN0aXZlVmlldykgPT0gMVxuICAgICkge1xuICAgICAgdGhpcy5fdmlld1N0YXJ0RGF0ZSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZSh2YWx1ZSwgdGhpcy50eXBlKTtcbiAgICB9XG4gICAgdGhpcy5fZm9vdFByaW50LnllYXIgPSB2YWwueWVhcjtcbiAgICB0aGlzLl9mb290UHJpbnQubW9udGggPSB2YWwubW9udGhPZlllYXI7XG4gICAgdGhpcy5fZm9vdFByaW50LmRheSA9IHZhbC5kYXlPZk1vbnRoO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByb3RlY3RlZCBfaGFuZGxlR29Ub2RheSgpIHtcbiAgICB0aGlzLl9uYXZVc2VySW50ZXJhY3Rpb24gPSB0cnVlO1xuICAgIHRoaXMuX3NldERhdGUodGhpcy5fdG9kYXkuZGF0ZSk7XG4gICAgdGhpcy5nb1RvZGF5KCk7XG4gICAgdGhpcy5fbmF2VXNlckludGVyYWN0aW9uID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogTmF2aWdhdGVzIHRvIHRoZSBuZXh0IGl0ZW0uXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG5leHQoKSB7XG4gICAgdGhpcy5fbmF2TmV4dFByZXYoZmFsc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIE5hdmlnYXRlcyB0byB0aGUgcHJldmlvdXMgaXRlbS5cbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcHJldigpIHtcbiAgICB0aGlzLl9uYXZOZXh0UHJldih0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGZvY3VzIHRvIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgY2FsZW5kYXIgc2xvdCBvciB0aGUgZmlyc3QgYXZhaWxhYmxlIHNsb3QuXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG92ZXJyaWRlIGZvY3VzKCkge1xuICAgIGNvbnN0IGZ1bmMgPSAoczogc3RyaW5nKSA9PiB0aGlzLmdldEhvc3RFbGVtZW50KCkucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4ocyk7XG4gICAgY29uc3QgZGl2ID0gZnVuYygnLmF4LWNhbGVuZGFyLXNsb3RzPmRpdi5heC1zdGF0ZS1zZWxlY3RlZCcpIHx8IGZ1bmMoJy5heC1jYWxlbmRhci1zbG90cz5kaXYnKTtcbiAgICBkaXY/LmZvY3VzKCk7XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByaXZhdGUgX25hdk5leHRQcmV2KHByZXY6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBzaWduID0gcHJldiA/IC0xIDogMTtcbiAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09ICdkYXknKSB0aGlzLm5hdlRvKHRoaXMuX3ZpZXdTdGFydERhdGUuYWRkKCdtb250aCcsIHNpZ24gKiAxICogdGhpcy5jb3VudCkpO1xuICAgIGVsc2UgaWYgKHRoaXMuYWN0aXZlVmlldyA9PSAnbW9udGgnKSB0aGlzLm5hdlRvKHRoaXMuX3ZpZXdTdGFydERhdGUuYWRkKCd5ZWFyJywgc2lnbiAqIDEgKiB0aGlzLmNvdW50KSk7XG4gICAgZWxzZSB0aGlzLm5hdlRvKHRoaXMuX3ZpZXdTdGFydERhdGUuYWRkKCd5ZWFyJywgc2lnbiAqIDEwICogdGhpcy5jb3VudCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIE5hdmlnYXRlcyB0byB0aGUgY3VycmVudCBkYXRlLlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBnb1RvZGF5KCkge1xuICAgIHRoaXMubmF2VG8odGhpcy5fdG9kYXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIE5hdmlnYXRlcyB0byBhIHNwZWNpZmllZCBkYXRlIGFuZCB1cGRhdGVzIHRoZSB2aWV3LlxuICAgKlxuICAgKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIG5hdmlnYXRlIHRvLCB3aGljaCBjYW4gYmUgYSBgRGF0ZWAgb2JqZWN0IG9yIGFuIGBBWERhdGVUaW1lYCBpbnN0YW5jZS5cbiAgICogQGlnbm9yZVxuICAgKi9cbiAgbmF2VG8oZGF0ZTogRGF0ZSB8IEFYRGF0ZVRpbWUpIHtcbiAgICBjb25zdCB2YWwgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jb252ZXJ0KGRhdGUsIHRoaXMudHlwZSk7XG4gICAgdGhpcy5fdmlld1N0YXJ0RGF0ZSA9IHZhbC5zdGFydE9mKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICAvL3RvIG1ha2Ugc3VyZSBpdHMgcmVuZHJlZCBhbmQgZGlzcGxheVJhbmdlIGlzIG5vdCBudWxsXG4gICAgaWYgKHRoaXMudmlld3MubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgdnIgPSB0aGlzLmRpc3BsYXlSYW5nZTtcbiAgICAgIHRoaXMub25OYXZpZ2F0ZS5lbWl0KHtcbiAgICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgICBpc1VzZXJJbnRlcmFjdGlvbjogdGhpcy5fbmF2VXNlckludGVyYWN0aW9uLFxuICAgICAgICBzdGFydDogdnIuc3RhcnRUaW1lPy5kYXRlLFxuICAgICAgICBlbmQ6IHZyLmVuZFRpbWU/LmRhdGUsXG4gICAgICAgIGh0bWxFbGVtZW50OiB0aGlzLmdldEhvc3RFbGVtZW50KCksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICBwcml2YXRlIGdldCBfX2hvc3RDbGFzcygpOiBzdHJpbmcge1xuICAgIGNvbnN0IF9jbGFzc2VzID0ge1xuICAgICAgJ2F4LXN0YXRlLWRpc2FibGVkJzogdGhpcy5kaXNhYmxlZCxcbiAgICAgICdheC1zdGF0ZS1yZWFkb25seSc6IHRoaXMucmVhZG9ubHksXG4gICAgfTtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoX2NsYXNzZXMpXG4gICAgICAuZmlsdGVyKChjKSA9PiBjWzFdKVxuICAgICAgLm1hcCgoYykgPT4gY1swXSlcbiAgICAgIC5qb2luKCcgJyk7XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByaXZhdGUgX3NldERhdGUodmFsdWU6IERhdGUpIHtcbiAgICBpZiAodGhpcy5yZWFkb25seSB8fCB0aGlzLmRpc2FibGVkKSByZXR1cm47XG4gICAgdGhpcy5jb21taXRWYWx1ZSh0aGlzLmNhbGVuZGFyU2VydmljZS5jb252ZXJ0KHZhbHVlLCB0aGlzLnR5cGUpLnN0YXJ0T2YoKS5kYXRlLCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAgQGlnbm9yZVxuICAgKi9cbiAgcHJvdGVjdGVkIGlzRGlzYWJsZWQoZGF0ZTogQVhEYXRlVGltZSk6IGJvb2xlYW4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZGlzYWJsZWREYXRlcykgJiYgdGhpcy5kaXNhYmxlZERhdGVzLmxlbmd0aCAhPSAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZERhdGVzLnNvbWUoKGQpID0+IGRhdGUuZXF1YWwoZCwgJ2RheScpKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLmRpc2FibGVkRGF0ZXMgPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWREYXRlcyhkYXRlLmRhdGUpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByb3RlY3RlZCBpc0hvbGlkYXkoZGF0ZTogQVhEYXRlVGltZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGdoID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuaG9saWRheXMuc29tZSgoZCkgPT4gZGF0ZS5lcXVhbChkLmRhdGUsICdkYXknKSk7XG4gICAgbGV0IGRoID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuaG9saWRheXMuc29tZSgoZCkgPT4gZGF0ZS5lcXVhbChkLmRhdGUsICdkYXknKSk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5ob2xpZGF5RGF0ZXMpICYmIHRoaXMuaG9saWRheURhdGVzLmxlbmd0aCAhPSAwKSB7XG4gICAgICBkaCA9IHRoaXMuaG9saWRheURhdGVzLnNvbWUoKGQpID0+IGRhdGUuZXF1YWwoZCwgJ2RheScpKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLmhvbGlkYXlEYXRlcyA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBkaCA9IHRoaXMuaG9saWRheURhdGVzKGRhdGUuZGF0ZSk7XG4gICAgfVxuICAgIHJldHVybiBnaCB8fCBkaDtcbiAgfVxuXG4gIC8qKlxuICAgKiAgQGlnbm9yZVxuICAgKi9cbiAgcHJvdGVjdGVkIGlzV2Vla2VuZChkYXRlOiBBWERhdGVUaW1lKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgd2Vla2VuZCA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLnJlc29sdmVDYWxlbmRhcih0aGlzLnR5cGUpLndlZWtlbmQ7XG4gICAgcmV0dXJuIHdlZWtlbmQuaW5jbHVkZXMoZGF0ZS5kYXlPZldlZWsgLSAxKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAgQGlnbm9yZVxuICAgKi9cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gIF9oYW5kbGVPbktleWRvd25FdmVudChlOiBLZXlib2FyZEV2ZW50KSB7XG4gICAgLy9UT0RPOiBjb21wbGV0ZSBrZXlib2FkIG5hdmlnYXRpb25cbiAgICBjb25zdCBpZ25vcmUgPSAoKSA9PiB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH07XG4gICAgaWYgKGUuY29kZSA9PT0gJ0Fycm93UmlnaHQnIHx8IGUuY29kZSA9PT0gJ0Fycm93TGVmdCcpIHtcbiAgICAgIGlmIChlLmN0cmxLZXkpIHtcbiAgICAgICAgZS5jb2RlID09PSAnQXJyb3dSaWdodCcgPyB0aGlzLm5leHQoKSA6IHRoaXMucHJldigpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgIH0sIDUwKTtcbiAgICAgIH1cbiAgICAgIGlnbm9yZSgpO1xuICAgIH0gZWxzZSBpZiAoZS5jb2RlID09PSAnQXJyb3dVcCcgfHwgZS5jb2RlID09PSAnQXJyb3dEb3duJykge1xuICAgICAgaWYgKGUuY3RybEtleSkge1xuICAgICAgICBlLmNvZGUgPT09ICdBcnJvd1VwJyA/IHRoaXMubmV4dCgpIDogdGhpcy5wcmV2KCk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgfSwgNTApO1xuICAgICAgfVxuICAgICAgaWdub3JlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0TW9udGhOYW1lKGRhdGU6IEFYRGF0ZVRpbWUsIHN0eWxlOiAnc2hvcnQnIHwgJ2xvbmcnKSB7XG4gICAgcmV0dXJuIGBkYXRlVGltZS5tb250aHMuJHtkYXRlLmNhbGVuZGFyLm5hbWUoKX0uJHtzdHlsZX0uJHtkYXRlLm1vbnRoT2ZZZWFyIC0gMX1gO1xuICB9XG59XG4iLCI8bmctY29udGVudCBzZWxlY3Q9XCJheC1oZWFkZXJcIj48L25nLWNvbnRlbnQ+XG48ZGl2IGNsYXNzPVwiYXgtY2FsZW5kYXItYm9keVwiPlxuICBAZm9yICh2IG9mIHZpZXdzOyBsZXQgaSA9ICRpbmRleCwgZmlyc3QgPSAkZmlyc3QsIGxhc3QgPSAkbGFzdDsgdHJhY2sgaSkge1xuICAgIEBzd2l0Y2ggKGFjdGl2ZVZpZXcpIHtcbiAgICAgIEBjYXNlICgneWVhcicpIHtcbiAgICAgICAgQGlmIChzaG93TmF2aWdhdGlvbikge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1jYWxlbmRhci12aWV3LWhlYWRlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF4LWNhbGVuZGFyLWhlYWRlci1pbmZvXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJkaXNhYmxlZCA/ICcnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgW2F0dHIucmVhZG9ubHldPVwicmVhZG9ubHkgPyAnJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYXgtZ2VuZXJhbC1idXR0b24gYXgtYnV0dG9uLXJvdW5kZWQgYXgtc3RhdGUtZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJfaGFuZGxlTmF2Q2xpY2soJGV2ZW50LCAneWVhcicpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IHYucmFuZ2Uuc3RhcnRUaW1lLmZvcm1hdCgnWVlZWScpIH19IC0ge3sgdi5yYW5nZS5lbmRUaW1lLmZvcm1hdCgnWVlZWScpIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBAaWYgKGxhc3QpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF4LWNhbGVuZGFyLWhlYWRlci1idXR0b25zXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJkaXNhYmxlZCA/ICcnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5yZWFkb25seV09XCJyZWFkb25seSA/ICcnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LWdlbmVyYWwtYnV0dG9uIGF4LWJ1dHRvbi1yb3VuZGVkIGF4LWJ1dHRvbi1pY29uIGF4LW5leHRcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9oYW5kbGVQcmV2Q2xpY2soKVwiXG4gICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ3ByZXYnIHwgdHJhbnNsYXRlIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiYXgtaWNvbiBheC1pY29uLWNoZXZyb24tbGVmdFwiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cImRpc2FibGVkID8gJycgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLnJlYWRvbmx5XT1cInJlYWRvbmx5ID8gJycgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXgtZ2VuZXJhbC1idXR0b24gYXgtYnV0dG9uLXJvdW5kZWQgYXgtYnV0dG9uLWljb25cIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9oYW5kbGVOZXh0Q2xpY2soKVwiXG4gICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ25leHQnIHwgdHJhbnNsYXRlIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiYXgtaWNvbiBheC1pY29uLWNoZXZyb24tcmlnaHRcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIDxkaXYgY2xhc3M9XCJheC1jYWxlbmRhci1zbG90cyBheC1jYWxlbmRhci1zbG90cy15ZWFyXCIgW25nQ2xhc3NdPVwieyAnYXgtZGVmYXVsdCc6ICFjZWxsVGVtcGxhdGUgfVwiPlxuICAgICAgICAgIEBmb3IgKHNsb3Qgb2Ygdi5zbG90czsgdHJhY2sgc2xvdC50ZXh0KSB7XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYXgtY2FsZW5kYXItc2xvdFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5heC1zdGF0ZS1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNsb3QuY3NzQ2xhc3NcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiX2hhbmRsZVNsb3RDbGljaygkZXZlbnQsIHNsb3QpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgQGlmIChjZWxsVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNlbGxUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IHsgc2xvdDogc2xvdCB9IH1cIj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8ZGl2IFt0aXRsZV09XCJzbG90LnRvb2x0aXBcIj5cbiAgICAgICAgICAgICAgICAgIHt7IHNsb3QudGV4dCB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgQGNhc2UgKCdtb250aCcpIHtcbiAgICAgICAgQGlmIChzaG93TmF2aWdhdGlvbikge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1jYWxlbmRhci12aWV3LWhlYWRlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF4LWNhbGVuZGFyLWhlYWRlci1pbmZvXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJkaXNhYmxlZCA/ICcnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgW2F0dHIucmVhZG9ubHldPVwicmVhZG9ubHkgPyAnJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYXgtZ2VuZXJhbC1idXR0b24gYXgtYnV0dG9uLXJvdW5kZWRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJfaGFuZGxlTmF2Q2xpY2soJGV2ZW50LCAneWVhcicpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IHYucmFuZ2Uuc3RhcnRUaW1lLmZvcm1hdCgnWVlZWScpIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBAaWYgKGxhc3QpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF4LWNhbGVuZGFyLWhlYWRlci1idXR0b25zXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJkaXNhYmxlZCA/ICcnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5yZWFkb25seV09XCJyZWFkb25seSA/ICcnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LWdlbmVyYWwtYnV0dG9uIGF4LWJ1dHRvbi1yb3VuZGVkIGF4LWJ1dHRvbi1pY29uXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJfaGFuZGxlUHJldkNsaWNrKClcIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidwcmV2JyB8IHRyYW5zbGF0ZSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImF4LWljb24gYXgtaWNvbi1jaGV2cm9uLWxlZnRcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJkaXNhYmxlZCA/ICcnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5yZWFkb25seV09XCJyZWFkb25seSA/ICcnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LWdlbmVyYWwtYnV0dG9uIGF4LWJ1dHRvbi1yb3VuZGVkIGF4LWJ1dHRvbi1pY29uXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJfaGFuZGxlTmV4dENsaWNrKClcIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIiduZXh0JyB8IHRyYW5zbGF0ZSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImF4LWljb24gYXgtaWNvbi1jaGV2cm9uLXJpZ2h0XCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtY2FsZW5kYXItc2xvdHMgYXgtY2FsZW5kYXItc2xvdHMtbW9udGhcIiBbbmdDbGFzc109XCJ7ICdheC1kZWZhdWx0JzogIWNlbGxUZW1wbGF0ZSB9XCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBzbG90IG9mIHYuc2xvdHNcIlxuICAgICAgICAgICAgY2xhc3M9XCJheC1jYWxlbmRhci1zbG90XCJcbiAgICAgICAgICAgIFtjbGFzcy5heC1zdGF0ZS1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJzbG90LmNzc0NsYXNzXCJcbiAgICAgICAgICAgIChjbGljayk9XCJfaGFuZGxlU2xvdENsaWNrKCRldmVudCwgc2xvdClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIEBpZiAoY2VsbFRlbXBsYXRlKSB7XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNlbGxUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IHsgc2xvdDogc2xvdCB9IH1cIj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgPGRpdiBbdGl0bGVdPVwic2xvdC50b29sdGlwXCI+XG4gICAgICAgICAgICAgICAge3sgZ2V0TW9udGhOYW1lKHNsb3QuZGF0ZSwgJ3Nob3J0JykgfCB0cmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICBAZGVmYXVsdCB7XG4gICAgICAgIEBpZiAoc2hvd05hdmlnYXRpb24pIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtY2FsZW5kYXItdmlldy1oZWFkZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1jYWxlbmRhci1oZWFkZXItaW5mb1wiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZWQgPyAnJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgIFthdHRyLnJlYWRvbmx5XT1cInJlYWRvbmx5ID8gJycgOiBudWxsXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImF4LWdlbmVyYWwtYnV0dG9uIGF4LWJ1dHRvbi1yb3VuZGVkXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiX2hhbmRsZU5hdkNsaWNrKCRldmVudCwgJ3llYXInKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyB2LnJhbmdlLnN0YXJ0VGltZS5mb3JtYXQoJ1lZWVknKSB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cImRpc2FibGVkID8gJycgOiBudWxsXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5yZWFkb25seV09XCJyZWFkb25seSA/ICcnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJheC1nZW5lcmFsLWJ1dHRvbiBheC1idXR0b24tcm91bmRlZFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9oYW5kbGVOYXZDbGljaygkZXZlbnQsICdtb250aCcpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IGdldE1vbnRoTmFtZSh2LnJhbmdlLnN0YXJ0VGltZSwgJ2xvbmcnKSB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBAaWYgKGxhc3QpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF4LWNhbGVuZGFyLWhlYWRlci1idXR0b25zXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJkaXNhYmxlZCA/ICcnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5yZWFkb25seV09XCJyZWFkb25seSA/ICcnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LWdlbmVyYWwtYnV0dG9uIGF4LWJ1dHRvbi1yb3VuZGVkIGF4LWJ1dHRvbi1pY29uXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJfaGFuZGxlUHJldkNsaWNrKClcIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidwcmV2JyB8IHRyYW5zbGF0ZSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImF4LWljb24gYXgtaWNvbi1jaGV2cm9uLWxlZnRcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJkaXNhYmxlZCA/ICcnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5yZWFkb25seV09XCJyZWFkb25seSA/ICcnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LWdlbmVyYWwtYnV0dG9uIGF4LWJ1dHRvbi1yb3VuZGVkIGF4LWJ1dHRvbi1pY29uXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJfaGFuZGxlTmV4dENsaWNrKClcIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIiduZXh0JyB8IHRyYW5zbGF0ZSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImF4LWljb24gYXgtaWNvbi1jaGV2cm9uLXJpZ2h0XCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtY2FsZW5kYXItd2Vla1wiPlxuICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGQgb2YgX3dlZWtkYXlzXCI+e3sgJ2RhdGVUaW1lLndlZWtkYXlzLnNob3J0LicgKyBkIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJheC1jYWxlbmRhci1zbG90cyBheC1jYWxlbmRhci1zbG90cy1kYXlcIiBbbmdDbGFzc109XCJ7ICdheC1kZWZhdWx0JzogIWNlbGxUZW1wbGF0ZSB9XCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc2xvdCBvZiB2LnNsb3RzXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYXgtY2FsZW5kYXItc2xvdFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5heC1zdGF0ZS1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNsb3QuY3NzQ2xhc3NcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiX2hhbmRsZVNsb3RDbGljaygkZXZlbnQsIHNsb3QpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgQGlmIChjZWxsVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNlbGxUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IHsgc2xvdDogc2xvdCB9IH1cIj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8ZGl2IFt0aXRsZV09XCJzbG90LnRvb2x0aXBcIj5cbiAgICAgICAgICAgICAgICAgIHt7IHNsb3QudGV4dCB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgfVxuICB9XG48L2Rpdj5cbjxuZy1jb250ZW50IHNlbGVjdD1cImF4LWZvb3RlclwiPjwvbmctY29udGVudD5cbiJdfQ==
|
628
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2NhbGVuZGFyL3NyYy9saWIvY2FsZW5kYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2NhbGVuZGFyL3NyYy9saWIvY2FsZW5kYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLG1CQUFtQixFQUVuQixzQkFBc0IsRUFDdEIsZ0JBQWdCLEdBQ2pCLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFjLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JFLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFdBQVcsRUFDWCxZQUFZLEVBQ1osaUJBQWlCLEVBQ2pCLFVBQVUsR0FDWCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNuQyxPQUFPLEVBSUwsdUJBQXVCLEdBQ3hCLE1BQU0sa0JBQWtCLENBQUM7Ozs7OztBQUUxQjs7OztHQUlHO0FBeURILE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxPQUFPLENBQzlDLENBQUEsZ0JBQTZCLENBQUEsRUFDN0Isc0JBQXNCLEVBQ3RCLHVCQUF1QixDQUN4QjtJQUNDLElBQVcsWUFBWTtRQUNyQixPQUFPLElBQUksZUFBZSxDQUN4QixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQzdCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENB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NEJBQ2xELEtBQUssRUFBRSxJQUFJO3lCQUNaO3dCQUNEOzRCQUNFLE9BQU8sRUFBRSxtQkFBbUI7NEJBQzVCLFdBQVcscUJBQXFCO3lCQUNqQzt3QkFDRCxjQUFjO3FCQUNmO21GQWtmVyxXQUFXO3NCQUR0QixXQUFXO3VCQUFDLE9BQU87Z0JBMERwQixxQkFBcUI7c0JBRHBCLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQVhDbGlja0V2ZW50LFxuICBBWFZhbHVhYmxlQ29tcG9uZW50LFxuICBNWENvbXBvbmVudE9wdGlvbkNoYW5nZWQsXG4gIE1YSW50ZXJhY3RpdmVDb21wb25lbnQsXG4gIE1YVmFsdWVDb21wb25lbnQsXG59IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9jb21tb24nO1xuaW1wb3J0IHsgQVhEYXRlVGltZSwgQVhEYXRlVGltZVJhbmdlIH0gZnJvbSAnQGFjb3JleC9jb3JlL2RhdGUtdGltZSc7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgZm9yd2FyZFJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEFYVW5zdWJzY3JpYmVyIH0gZnJvbSAnQGFjb3JleC9jb3JlL3V0aWxzJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgY2xhc3NlcyB9IGZyb20gJ3BvbHl0eXBlJztcbmltcG9ydCB7XG4gIEFYQ2FsZW5kYXJWaWV3LFxuICBBWENhbGVuZGFyVmlld1Nsb3QsXG4gIEFYQ2FsZW5kYXJWaWV3VHlwZSxcbiAgTVhDYWxlbmRhckJhc2VDb21wb25lbnQsXG59IGZyb20gJy4vY2FsZW5kYXIuY2xhc3MnO1xuXG4vKipcbiAqIEEgY2FsZW5kYXIgY29tcG9uZW50IHRoYXQgcHJvdmlkZXMgYSBjdXN0b21pemFibGUgY2FsZW5kYXIgdmlldyB3aXRoIHZhcmlvdXMgb3B0aW9ucyBmb3Igc2VsZWN0aW9uLCBuYXZpZ2F0aW9uLCBhbmQgc3R5bGluZy5cbiAqXG4gKiBAY2F0ZWdvcnkgQ29tcG9uZW50c1xuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdheC1jYWxlbmRhcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYWxlbmRhci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NhbGVuZGFyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbnB1dHM6IFtcbiAgICAncnRsJyxcbiAgICAncmVhZG9ubHknLFxuICAgICd2YWx1ZScsXG4gICAgJ25hbWUnLFxuICAgICdkaXNhYmxlZCcsXG4gICAgJ2RlcHRoJyxcbiAgICAnYWN0aXZlVmlldycsXG4gICAgJ21pblZhbHVlJyxcbiAgICAnbWF4VmFsdWUnLFxuICAgICdkaXNhYmxlZERhdGVzJyxcbiAgICAnaG9saWRheURhdGVzJyxcbiAgICAndHlwZScsXG4gICAgJ2NlbGxUZW1wbGF0ZScsXG4gICAgJ2NlbGxDbGFzcycsXG4gICAgJ3Nob3dOYXZpZ2F0aW9uJyxcbiAgICAnY291bnQnLFxuICAgICduYW1lJyxcbiAgICAnaWQnLFxuICBdLFxuICBvdXRwdXRzOiBbXG4gICAgJ29uT3B0aW9uQ2hhbmdlZCcsXG4gICAgJ3ZhbHVlQ2hhbmdlJyxcbiAgICAnb25WYWx1ZUNoYW5nZWQnLFxuICAgICdtaW5WYWx1ZUNoYW5nZScsXG4gICAgJ21heFZhbHVlQ2hhbmdlJyxcbiAgICAnb25CbHVyJyxcbiAgICAnb25Gb2N1cycsXG4gICAgJ2RlcHRoQ2hhbmdlJyxcbiAgICAndHlwZUNoYW5nZScsXG4gICAgJ2FjdGl2ZVZpZXdDaGFuZ2UnLFxuICAgICdkaXNhYmxlZERhdGVzQ2hhbmdlJyxcbiAgICAnaG9saWRheURhdGVzQ2hhbmdlJyxcbiAgICAnb25OYXZpZ2F0ZScsXG4gICAgJ29uU2xvdENsaWNrJyxcbiAgICAnY291bnRDaGFuZ2UnLFxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEFYQ2FsZW5kYXJDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBBWFZhbHVhYmxlQ29tcG9uZW50LFxuICAgICAgdXNlRXhpc3Rpbmc6IEFYQ2FsZW5kYXJDb21wb25lbnQsXG4gICAgfSxcbiAgICBBWFVuc3Vic2NyaWJlcixcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQVhDYWxlbmRhckNvbXBvbmVudCBleHRlbmRzIGNsYXNzZXMoXG4gIE1YVmFsdWVDb21wb25lbnQ8RGF0ZSB8IG51bGw+LFxuICBNWEludGVyYWN0aXZlQ29tcG9uZW50LFxuICBNWENhbGVuZGFyQmFzZUNvbXBvbmVudCxcbikge1xuICBwdWJsaWMgZ2V0IGRpc3BsYXlSYW5nZSgpOiBBWERhdGVUaW1lUmFuZ2Uge1xuICAgIHJldHVybiBuZXcgQVhEYXRlVGltZVJhbmdlKFxuICAgICAgdGhpcy52aWV3c1swXS5yYW5nZS5zdGFydFRpbWUsXG4gICAgICB0aGlzLnZpZXdzW3RoaXMudmlld3MubGVuZ3RoIC0gMV0ucmFuZ2UuZW5kVGltZSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBwcm90ZWN0ZWQgX3RvZGF5ID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKG5ldyBEYXRlKCksIHRoaXMudHlwZSk7XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBwcml2YXRlIF92aWV3U3RhcnREYXRlITogQVhEYXRlVGltZTtcblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByaXZhdGUgX25hdlVzZXJJbnRlcmFjdGlvbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiAgQGlnbm9yZVxuICAgKi9cbiAgcHJpdmF0ZSBfZm9vdFByaW50ID0ge1xuICAgIHllYXI6IG51bGwsXG4gICAgbW9udGg6IG51bGwsXG4gICAgZGF5OiBudWxsLFxuICB9O1xuXG4gIC8qKlxuICAgKiAgQGlnbm9yZVxuICAgKi9cbiAgcHJvdGVjdGVkIHZpZXdzOiBBWENhbGVuZGFyVmlld1tdID0gW107XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBwcm90ZWN0ZWQgX3dlZWtkYXlzOiBudW1iZXJbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiAgQGlnbm9yZVxuICAgKi9cbiAgcHJpdmF0ZSBfaW5pdFZhbHVlcygpIHtcbiAgICB0aGlzLl90b2RheSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShuZXcgRGF0ZSgpLCB0aGlzLnR5cGUpO1xuICAgIHRoaXMuX3dlZWtkYXlzID0gdGhpcy5fdG9kYXkuY2FsZW5kYXIud2Vla2RheXM7XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByaXZhdGUgX3JlZnJlc2goKSB7XG4gICAgdGhpcy5faW5pdFZhbHVlcygpO1xuICAgIHRoaXMubmF2VG8odGhpcy52YWx1ZSB8fCB0aGlzLl90b2RheSk7XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIGNvbnN0cnVjdG9yKHVuc3Vic2NyaWJlcjogQVhVbnN1YnNjcmliZXIpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLm9uSG9saWRheXNDaGFuZ2VkLnBpcGUodW5zdWJzY3JpYmVyLnRha2VVbnRpbERlc3Ryb3kpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH0pO1xuICAgIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNhbGVuZGFyQ2hhbmdlcyQucGlwZSh1bnN1YnNjcmliZXIudGFrZVVudGlsRGVzdHJveSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuX3JlZnJlc2goKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiAgQGlnbm9yZVxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIG5nT25Jbml0KCkge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgdGhpcy5faW5pdFZhbHVlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBwcm90ZWN0ZWQgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy52YWx1ZSkge1xuICAgICAgdGhpcy5nb1RvZGF5KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgaWYgKCF0aGlzLl92aWV3U3RhcnREYXRlKSByZXR1cm47XG4gICAgY29uc3QgYXBwbHlDZWxsQ2xhc3MgPSAoc2xvdDogQVhDYWxlbmRhclZpZXdTbG90LCBjZWxsQ2xhc3M6IGFueSA9IHRoaXMuY2VsbENsYXNzKSA9PiB7XG4gICAgICBzd2l0Y2ggKHR5cGVvZiBjZWxsQ2xhc3MpIHtcbiAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICBjZWxsQ2xhc3Muc3BsaXQoJyAnKS5mb3JFYWNoKChjKSA9PiAoc2xvdC5jc3NDbGFzc1tjXSA9IHRydWUpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgICBPYmplY3QuYXNzaWduKHNsb3QuY3NzQ2xhc3MsIGNlbGxDbGFzcyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgICBhcHBseUNlbGxDbGFzcyhzbG90LCBjZWxsQ2xhc3Moc2xvdC5kYXRlKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLnZpZXdzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvdW50OyBpKyspIHtcbiAgICAgIHN3aXRjaCAodGhpcy5hY3RpdmVWaWV3KSB7XG4gICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgdGhpcy5kYXlWaWV3KGksIGFwcGx5Q2VsbENsYXNzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgIHRoaXMubW9udGhWaWV3KGksIGFwcGx5Q2VsbENsYXNzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgdGhpcy55ZWFyVmlldyhpLCBhcHBseUNlbGxDbGFzcyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBwcml2YXRlIF9zZXREaXNwbGF5UmFuZ2UoY3VycmVudDogQVhEYXRlVGltZSk6IEFYRGF0ZVRpbWVSYW5nZSB7XG4gICAgc3dpdGNoICh0aGlzLmFjdGl2ZVZpZXcpIHtcbiAgICAgIGNhc2UgJ3llYXInOiB7XG4gICAgICAgIGNvbnN0IHkgPSBjdXJyZW50LnN0YXJ0T2YoJ3llYXInKS55ZWFyO1xuICAgICAgICBjb25zdCBtaW4gPSB5IC0gKHkgJSAxMCk7XG4gICAgICAgIGNvbnN0IG1heCA9IG1pbiArIDk7XG4gICAgICAgIHJldHVybiBuZXcgQVhEYXRlVGltZVJhbmdlKFxuICAgICAgICAgIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgeWVhcjogbWluLFxuICAgICAgICAgICAgICBtb250aDogMSxcbiAgICAgICAgICAgICAgZGF0ZTogMSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aGlzLnR5cGUsXG4gICAgICAgICAgKSxcbiAgICAgICAgICB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHllYXI6IG1heCxcbiAgICAgICAgICAgICAgbW9udGg6IDEyLFxuICAgICAgICAgICAgICBkYXRlOiAyOCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aGlzLnR5cGUsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lUmFuZ2UoY3VycmVudC5zdGFydE9mKCd5ZWFyJyksIGN1cnJlbnQuZW5kT2YoJ3llYXInKS5hZGQoJ2RheScsIC0xKSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbmV3IEFYRGF0ZVRpbWVSYW5nZShjdXJyZW50LnN0YXJ0T2YoJ21vbnRoJyksIGN1cnJlbnQuZW5kT2YoJ21vbnRoJykpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiAgQGlnbm9yZVxuICAgKi9cbiAgcHJpdmF0ZSBkYXlWaWV3KGk6IG51bWJlciwgYXBwbHlDZWxsQ2xhc3M6IGFueSkge1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLl92aWV3U3RhcnREYXRlLmFkZCgnbW9udGgnLCBpKTtcbiAgICBjb25zdCB2aWV3OiBBWENhbGVuZGFyVmlldyA9IHtcbiAgICAgIHJhbmdlOiB0aGlzLl9zZXREaXNwbGF5UmFuZ2UoY3VycmVudCksXG4gICAgICBzbG90czogW10sXG4gICAgfTtcbiAgICB0aGlzLnZpZXdzLnB1c2godmlldyk7XG4gICAgY29uc3QgYSA9IHZpZXcucmFuZ2UuZW51bXVyYXRlKCdkYXknKTtcbiAgICB2aWV3LnNsb3RzID0gYS5tYXAoKGQsIGkpID0+IHtcbiAgICAgIGNvbnN0IHI6IGFueSA9IHt9O1xuICAgICAgci5kYXRlID0gZDtcbiAgICAgIHIudGV4dCA9IGQuZGF5T2ZNb250aDtcbiAgICAgIHIudG9vbHRpcCA9IGQuZm9ybWF0KCdsb25nRGF0ZScpO1xuICAgICAgci50b2RheSA9IGQuZXF1YWwodGhpcy5fdG9kYXksICdkYXknKTtcbiAgICAgIHIuc2VsZWN0ZWQgPSB0aGlzLnZhbHVlICYmIGQuZXF1YWwodGhpcy52YWx1ZSwgJ2RheScpO1xuICAgICAgci5ob2xpZGF5ID0gdGhpcy5pc0hvbGlkYXkoZCkgfHwgdGhpcy5pc1dlZWtlbmQoZCk7XG4gICAgICByLmRpc2FibGVkID1cbiAgICAgICAgKHRoaXMubWluVmFsdWUgJiYgZC5jb21wYXJlKHRoaXMubWluVmFsdWUsICdkYXknKSA9PSAtMSkgfHxcbiAgICAgICAgKHRoaXMubWF4VmFsdWUgJiYgZC5jb21wYXJlKHRoaXMubWF4VmFsdWUsICdkYXknKSA9PSAxKSB8fFxuICAgICAgICB0aGlzLmlzRGlzYWJsZWQoZCk7XG4gICAgICAvL1xuICAgICAgY29uc3QgZm9jdXNlZCA9XG4gICAgICAgIGQuZGF5T2ZNb250aCA9PSB0aGlzLl9mb290UHJpbnQuZGF5ICYmXG4gICAgICAgIGQubW9udGhPZlllYXIgPT0gdGhpcy5fZm9vdFByaW50Lm1vbnRoICYmXG4gICAgICAgIGQueWVhciA9PSB0aGlzLl9mb290UHJpbnQueWVhcjtcbiAgICAgIC8vXG4gICAgICBpZiAoci5kaXNhYmxlZCkge1xuICAgICAgICByLmNzc0NsYXNzID0ge1xuICAgICAgICAgICdheC1zdGF0ZS1kaXNhYmxlZCc6IHRydWUsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByLmNzc0NsYXNzID0ge1xuICAgICAgICAgICdheC1zdGF0ZS10b2RheSc6IHIudG9kYXksXG4gICAgICAgICAgJ2F4LXN0YXRlLXNlbGVjdGVkJzogci5zZWxlY3RlZCxcbiAgICAgICAgICAnYXgtc3RhdGUtaG9saWRheSc6IHIuaG9saWRheSxcbiAgICAgICAgICAvLyAnYXgtc3RhdGUtZm9jdXNlZCc6IGZvY3VzZWQsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICAvLyBheC1jb2wtc3RhcnQtMSBheC1jb2wtc3RhcnQtMiBheC1jb2wtc3RhcnQtMyBheC1jb2wtc3RhcnQtNCBheC1jb2wtc3RhcnQtNSBheC1jb2wtc3RhcnQtNiBheC1jb2wtc3RhcnQtN1xuICAgICAgci5jc3NDbGFzc1tgYXgtY29sdW1uLXN0YXJ0LSR7dmlldy5yYW5nZS5zdGFydFRpbWUuZGF5T2ZXZWVrfWBdID0gaSA9PSAwO1xuICAgICAgaWYgKHRoaXMuY2VsbENsYXNzKSBhcHBseUNlbGxDbGFzcyhyKTtcbiAgICAgIHJldHVybiByO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBwcml2YXRlIG1vbnRoVmlldyhpOiBudW1iZXIsIGFwcGx5Q2VsbENsYXNzOiBhbnkpIHtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5fdmlld1N0YXJ0RGF0ZS5hZGQoJ3llYXInLCBpKTtcbiAgICBjb25zdCB2aWV3OiBBWENhbGVuZGFyVmlldyA9IHtcbiAgICAgIHJhbmdlOiB0aGlzLl9zZXREaXNwbGF5UmFuZ2UoY3VycmVudCksXG4gICAgICBzbG90czogW10sXG4gICAgfTtcbiAgICB0aGlzLnZpZXdzLnB1c2godmlldyk7XG4gICAgY29uc3QgYSA9IHZpZXcucmFuZ2UuZW51bXVyYXRlKCdtb250aCcpO1xuICAgIHZpZXcuc2xvdHMgPSBhLm1hcCgoZCwgaSkgPT4ge1xuICAgICAgY29uc3QgcjogYW55ID0ge307XG4gICAgICByLmRhdGUgPSBkO1xuICAgICAgci50ZXh0ID0gZC5mb3JtYXQoJ01NTScpO1xuICAgICAgci50b29sdGlwID0gZC5mb3JtYXQoJ01NTU0gWVlZWScpO1xuICAgICAgci50b2RheSA9IGQuZXF1YWwodGhpcy5fdG9kYXksICdtb250aCcpO1xuICAgICAgLy9cbiAgICAgIHIuZGlzYWJsZWQgPVxuICAgICAgICAodGhpcy5taW5WYWx1ZSAmJiBkLmNvbXBhcmUodGhpcy5taW5WYWx1ZSwgJ21vbnRoJykgPT0gLTEpIHx8XG4gICAgICAgICh0aGlzLm1heFZhbHVlICYmIGQuY29tcGFyZSh0aGlzLm1heFZhbHVlLCAnbW9udGgnKSA9PSAxKTtcbiAgICAgIC8vXG4gICAgICByLnNlbGVjdGVkID0gdGhpcy52YWx1ZSAmJiB0aGlzLmRlcHRoID09ICdtb250aCcgJiYgZC5lcXVhbCh0aGlzLnZhbHVlLCAnbW9udGgnKTtcbiAgICAgIC8vXG4gICAgICBjb25zdCBmb2N1c2VkID0gZC5tb250aE9mWWVhciA9PSB0aGlzLl9mb290UHJpbnQubW9udGggJiYgZC55ZWFyID09IHRoaXMuX2Zvb3RQcmludC55ZWFyO1xuICAgICAgLy9cbiAgICAgIGlmIChyLmRpc2FibGVkKSB7XG4gICAgICAgIHIuY3NzQ2xhc3MgPSB7XG4gICAgICAgICAgJ2F4LXN0YXRlLWRpc2FibGVkJzogci5kaXNhYmxlZCxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHIuY3NzQ2xhc3MgPSB7XG4gICAgICAgICAgJ2F4LXN0YXRlLXRvZGF5Jzogci50b2RheSxcbiAgICAgICAgICAnYXgtc3RhdGUtc2VsZWN0ZWQnOiByLnNlbGVjdGVkLFxuICAgICAgICAgICdheC1zdGF0ZS1mb2N1c2VkJzogZm9jdXNlZCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGFwcGx5Q2VsbENsYXNzKHIpO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByaXZhdGUgeWVhclZpZXcoaTogbnVtYmVyLCBhcHBseUNlbGxDbGFzczogYW55KSB7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuX3ZpZXdTdGFydERhdGUuYWRkKCd5ZWFyJywgaSAqIDEwKTtcbiAgICBjb25zdCB2aWV3OiBBWENhbGVuZGFyVmlldyA9IHtcbiAgICAgIHJhbmdlOiB0aGlzLl9zZXREaXNwbGF5UmFuZ2UoY3VycmVudCksXG4gICAgICBzbG90czogW10sXG4gICAgfTtcbiAgICB0aGlzLnZpZXdzLnB1c2godmlldyk7XG4gICAgY29uc3QgYSA9IHZpZXcucmFuZ2UuZW51bXVyYXRlKCd5ZWFyJyk7XG5cbiAgICB2aWV3LnNsb3RzID0gYS5tYXAoKGQsIGkpID0+IHtcbiAgICAgIGNvbnN0IHI6IGFueSA9IHt9O1xuICAgICAgci5kYXRlID0gZDtcbiAgICAgIHIudGV4dCA9IGQuZm9ybWF0KCdZWVlZJyk7XG4gICAgICByLnRvb2x0aXAgPSBkLmZvcm1hdCgnWVlZWScpO1xuICAgICAgci50b2RheSA9IGQuZXF1YWwodGhpcy5fdG9kYXksICd5ZWFyJyk7XG4gICAgICByLnNlbGVjdGVkID0gdGhpcy52YWx1ZSAmJiB0aGlzLmRlcHRoID09ICd5ZWFyJyAmJiBkLmVxdWFsKHRoaXMudmFsdWUsICd5ZWFyJyk7XG4gICAgICAvL1xuICAgICAgY29uc3QgZm9jdXNlZCA9IGQueWVhciA9PSB0aGlzLl9mb290UHJpbnQueWVhcjtcbiAgICAgIC8vXG4gICAgICByLmRpc2FibGVkID1cbiAgICAgICAgKHRoaXMubWluVmFsdWUgJiYgZC5jb21wYXJlKHRoaXMubWluVmFsdWUsICd5ZWFyJykgPT0gLTEpIHx8XG4gICAgICAgICh0aGlzLm1heFZhbHVlICYmIGQuY29tcGFyZSh0aGlzLm1heFZhbHVlLCAneWVhcicpID09IDEpO1xuICAgICAgLy9cbiAgICAgIGlmIChyLmRpc2FibGVkKSB7XG4gICAgICAgIHIuY3NzQ2xhc3MgPSB7XG4gICAgICAgICAgJ2F4LXN0YXRlLWRpc2FibGVkJzogci5kaXNhYmxlZCxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHIuY3NzQ2xhc3MgPSB7XG4gICAgICAgICAgJ2F4LXN0YXRlLXRvZGF5Jzogci50b2RheSxcbiAgICAgICAgICAnYXgtc3RhdGUtc2VsZWN0ZWQnOiByLnNlbGVjdGVkLFxuICAgICAgICAgICdheC1zdGF0ZS1mb2N1c2VkJzogZm9jdXNlZCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGFwcGx5Q2VsbENsYXNzKHIpO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByb3RlY3RlZCBfaGFuZGxlUHJldkNsaWNrKCkge1xuICAgIHRoaXMuX25hdlVzZXJJbnRlcmFjdGlvbiA9IHRydWU7XG4gICAgdGhpcy5wcmV2KCk7XG4gICAgdGhpcy5fbmF2VXNlckludGVyYWN0aW9uID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByb3RlY3RlZCBfaGFuZGxlTmV4dENsaWNrKCkge1xuICAgIHRoaXMuX25hdlVzZXJJbnRlcmFjdGlvbiA9IHRydWU7XG4gICAgdGhpcy5uZXh0KCk7XG4gICAgdGhpcy5fbmF2VXNlckludGVyYWN0aW9uID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByb3RlY3RlZCBfaGFuZGxlU2xvdENsaWNrKGU6IE1vdXNlRXZlbnQsIHNsb3Q6IEFYQ2FsZW5kYXJWaWV3U2xvdCkge1xuICAgIGlmIChzbG90LmRpc2FibGVkIHx8IHRoaXMuZGlzYWJsZWQpIHJldHVybjtcbiAgICAvL1xuICAgIHRoaXMub25TbG90Q2xpY2suZW1pdCh7XG4gICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICBpdGVtOiBzbG90LmRhdGUuZGF0ZSxcbiAgICAgIGlzVXNlckludGVyYWN0aW9uOiB0cnVlLFxuICAgICAgbmF0aXZlRXZlbnQ6IGUsXG4gICAgfSk7XG4gICAgLy9cbiAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09ICdkYXknKSB7XG4gICAgICB0aGlzLl9zZXREYXRlKHNsb3QuZGF0ZS5kYXRlKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuYWN0aXZlVmlldyA9PSAnbW9udGgnICYmIHRoaXMuZGVwdGggPT0gJ2RheScpIHtcbiAgICAgIHRoaXMuYWN0aXZlVmlldyA9ICdkYXknO1xuICAgICAgdGhpcy5fZm9vdFByaW50Lm1vbnRoID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKHNsb3QuZGF0ZS5kYXRlLCB0aGlzLnR5cGUpLm1vbnRoT2ZZZWFyO1xuICAgICAgdGhpcy5uYXZUbyhzbG90LmRhdGUpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5hY3RpdmVWaWV3ID09ICdtb250aCcgJiYgdGhpcy5kZXB0aCA9PSAnbW9udGgnKSB7XG4gICAgICB0aGlzLl9zZXREYXRlKHNsb3QuZGF0ZS5kYXRlKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuYWN0aXZlVmlldyA9PSAneWVhcicgJiYgKHRoaXMuZGVwdGggPT0gJ2RheScgfHwgdGhpcy5kZXB0aCA9PSAnbW9udGgnKSkge1xuICAgICAgdGhpcy5hY3RpdmVWaWV3ID0gJ21vbnRoJztcbiAgICAgIHRoaXMuX2Zvb3RQcmludC55ZWFyID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKHNsb3QuZGF0ZS5kYXRlLCB0aGlzLnR5cGUpLnllYXI7XG4gICAgICB0aGlzLm5hdlRvKHNsb3QuZGF0ZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT0gJ3llYXInICYmIHRoaXMuZGVwdGggPT0gJ3llYXInKSB7XG4gICAgICB0aGlzLl9zZXREYXRlKHNsb3QuZGF0ZS5kYXRlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByb3RlY3RlZCBfaGFuZGxlTmF2Q2xpY2soZTogQVhDbGlja0V2ZW50IHwgYW55LCB2aWV3OiBBWENhbGVuZGFyVmlld1R5cGUpIHtcbiAgICB0aGlzLl9uYXZVc2VySW50ZXJhY3Rpb24gPSB0cnVlO1xuICAgIHRoaXMuYWN0aXZlVmlldyA9IHZpZXc7XG4gICAgdGhpcy5fbmF2VXNlckludGVyYWN0aW9uID0gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlVmlldygpIHtcbiAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09ICdkYXknKSB0aGlzLmFjdGl2ZVZpZXcgPSAnbW9udGgnO1xuICAgIGVsc2UgaWYgKHRoaXMuYWN0aXZlVmlldyA9PSAnbW9udGgnKSB0aGlzLmFjdGl2ZVZpZXcgPSAneWVhcic7XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBpbnRlcm5hbE9wdGlvbkNoYW5nZWQoZTogTVhDb21wb25lbnRPcHRpb25DaGFuZ2VkKSB7XG4gICAgaWYgKFxuICAgICAgZS5uYW1lID09ICdkZXB0aCcgfHxcbiAgICAgIGUubmFtZSA9PSAnYWN0aXZlVmlldycgfHxcbiAgICAgIGUubmFtZSA9PSAnZGlzYWJsZWREYXRlcycgfHxcbiAgICAgIGUubmFtZSA9PSAnaG9saWRheURhdGVzJ1xuICAgICkge1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9XG4gICAgaWYgKGUubmFtZSA9PSAndHlwZScpIHtcbiAgICAgIHRoaXMuX3JlZnJlc2goKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBpbnRlcm5hbFNldFZhbHVlKHZhbHVlOiBEYXRlKTogRGF0ZSB8IG51bGwge1xuICAgIGlmICghdmFsdWUpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHYgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jb252ZXJ0KHZhbHVlKTtcbiAgICBjb25zdCBpc0Rpc2FibGVkID0gdGhpcy5pc0Rpc2FibGVkKHYpO1xuICAgIGlmIChpc0Rpc2FibGVkKSByZXR1cm4gbnVsbDtcbiAgICBlbHNlIHJldHVybiB2LmRhdGU7XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBpbnRlcm5hbFZhbHVlQ2hhbmdlZCh2YWx1ZT86IERhdGUpIHtcbiAgICBjb25zdCB2YWwgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUodmFsdWUsIHRoaXMudHlwZSk7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuX3ZpZXdTdGFydERhdGUgfHxcbiAgICAgIHZhbC5jb21wYXJlKHRoaXMuZGlzcGxheVJhbmdlLnN0YXJ0VGltZSwgdGhpcy5hY3RpdmVWaWV3KSA9PSAtMSB8fFxuICAgICAgdmFsLmNvbXBhcmUodGhpcy5kaXNwbGF5UmFuZ2UuZW5kVGltZSwgdGhpcy5hY3RpdmVWaWV3KSA9PSAxXG4gICAgKSB7XG4gICAgICB0aGlzLl92aWV3U3RhcnREYXRlID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKHZhbHVlLCB0aGlzLnR5cGUpO1xuICAgIH1cbiAgICB0aGlzLl9mb290UHJpbnQueWVhciA9IHZhbC55ZWFyO1xuICAgIHRoaXMuX2Zvb3RQcmludC5tb250aCA9IHZhbC5tb250aE9mWWVhcjtcbiAgICB0aGlzLl9mb290UHJpbnQuZGF5ID0gdmFsLmRheU9mTW9udGg7XG5cbiAgICBjb25zdCBjYWxlbmRhclNsb3RzID0gQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuYXgtY2FsZW5kYXItc2xvdCcpKTtcbiAgICBjb25zdCBzZWxlY3RlZFNsb3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuYXgtc3RhdGUtc2VsZWN0ZWQnKTtcbiAgICBpZiAoc2VsZWN0ZWRTbG90KSB7XG4gICAgICBzZWxlY3RlZFNsb3QuY2xhc3NMaXN0LnJlbW92ZSgnYXgtc3RhdGUtc2VsZWN0ZWQnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9XG4gICAgY2FsZW5kYXJTbG90cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICBlbGVtZW50ID0gZWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGlmIChlbGVtZW50LnRleHRDb250ZW50ID09IHRoaXMuX2Zvb3RQcmludC5kYXkpIHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKCdheC1zdGF0ZS1zZWxlY3RlZCcpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBwcm90ZWN0ZWQgX2hhbmRsZUdvVG9kYXkoKSB7XG4gICAgdGhpcy5fbmF2VXNlckludGVyYWN0aW9uID0gdHJ1ZTtcbiAgICB0aGlzLl9zZXREYXRlKHRoaXMuX3RvZGF5LmRhdGUpO1xuICAgIHRoaXMuZ29Ub2RheSgpO1xuICAgIHRoaXMuX25hdlVzZXJJbnRlcmFjdGlvbiA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIE5hdmlnYXRlcyB0byB0aGUgbmV4dCBpdGVtLlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBuZXh0KCkge1xuICAgIHRoaXMuX25hdk5leHRQcmV2KGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOYXZpZ2F0ZXMgdG8gdGhlIHByZXZpb3VzIGl0ZW0uXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHByZXYoKSB7XG4gICAgdGhpcy5fbmF2TmV4dFByZXYodHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBmb2N1cyB0byB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGNhbGVuZGFyIHNsb3Qgb3IgdGhlIGZpcnN0IGF2YWlsYWJsZSBzbG90LlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvdmVycmlkZSBmb2N1cygpIHtcbiAgICBjb25zdCBmdW5jID0gKHM6IHN0cmluZykgPT4gdGhpcy5nZXRIb3N0RWxlbWVudCgpLnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KHMpO1xuICAgIGNvbnN0IGRpdiA9IGZ1bmMoJy5heC1jYWxlbmRhci1zbG90cz5kaXYuYXgtc3RhdGUtc2VsZWN0ZWQnKSB8fCBmdW5jKCcuYXgtY2FsZW5kYXItc2xvdHM+ZGl2Jyk7XG4gICAgZGl2Py5mb2N1cygpO1xuICB9XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBwcml2YXRlIF9uYXZOZXh0UHJldihwcmV2OiBib29sZWFuKSB7XG4gICAgY29uc3Qgc2lnbiA9IHByZXYgPyAtMSA6IDE7XG4gICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PSAnZGF5JykgdGhpcy5uYXZUbyh0aGlzLl92aWV3U3RhcnREYXRlLmFkZCgnbW9udGgnLCBzaWduICogMSAqIHRoaXMuY291bnQpKTtcbiAgICBlbHNlIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT0gJ21vbnRoJykgdGhpcy5uYXZUbyh0aGlzLl92aWV3U3RhcnREYXRlLmFkZCgneWVhcicsIHNpZ24gKiAxICogdGhpcy5jb3VudCkpO1xuICAgIGVsc2UgdGhpcy5uYXZUbyh0aGlzLl92aWV3U3RhcnREYXRlLmFkZCgneWVhcicsIHNpZ24gKiAxMCAqIHRoaXMuY291bnQpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOYXZpZ2F0ZXMgdG8gdGhlIGN1cnJlbnQgZGF0ZS5cbiAgICogQGlnbm9yZVxuICAgKi9cbiAgZ29Ub2RheSgpIHtcbiAgICB0aGlzLm5hdlRvKHRoaXMuX3RvZGF5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOYXZpZ2F0ZXMgdG8gYSBzcGVjaWZpZWQgZGF0ZSBhbmQgdXBkYXRlcyB0aGUgdmlldy5cbiAgICpcbiAgICogQHBhcmFtIGRhdGUgLSBUaGUgZGF0ZSB0byBuYXZpZ2F0ZSB0bywgd2hpY2ggY2FuIGJlIGEgYERhdGVgIG9iamVjdCBvciBhbiBgQVhEYXRlVGltZWAgaW5zdGFuY2UuXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG5hdlRvKGRhdGU6IERhdGUgfCBBWERhdGVUaW1lKSB7XG4gICAgY29uc3QgdmFsID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY29udmVydChkYXRlLCB0aGlzLnR5cGUpO1xuICAgIHRoaXMuX3ZpZXdTdGFydERhdGUgPSB2YWwuc3RhcnRPZigpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgLy90byBtYWtlIHN1cmUgaXRzIHJlbmRyZWQgYW5kIGRpc3BsYXlSYW5nZSBpcyBub3QgbnVsbFxuICAgIGlmICh0aGlzLnZpZXdzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHZyID0gdGhpcy5kaXNwbGF5UmFuZ2U7XG4gICAgICB0aGlzLm9uTmF2aWdhdGUuZW1pdCh7XG4gICAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgICAgaXNVc2VySW50ZXJhY3Rpb246IHRoaXMuX25hdlVzZXJJbnRlcmFjdGlvbixcbiAgICAgICAgc3RhcnQ6IHZyLnN0YXJ0VGltZT8uZGF0ZSxcbiAgICAgICAgZW5kOiB2ci5lbmRUaW1lPy5kYXRlLFxuICAgICAgICBodG1sRWxlbWVudDogdGhpcy5nZXRIb3N0RWxlbWVudCgpLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgcHJpdmF0ZSBnZXQgX19ob3N0Q2xhc3MoKTogc3RyaW5nIHtcbiAgICBjb25zdCBfY2xhc3NlcyA9IHtcbiAgICAgICdheC1zdGF0ZS1kaXNhYmxlZCc6IHRoaXMuZGlzYWJsZWQsXG4gICAgICAnYXgtc3RhdGUtcmVhZG9ubHknOiB0aGlzLnJlYWRvbmx5LFxuICAgIH07XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKF9jbGFzc2VzKVxuICAgICAgLmZpbHRlcigoYykgPT4gY1sxXSlcbiAgICAgIC5tYXAoKGMpID0+IGNbMF0pXG4gICAgICAuam9pbignICcpO1xuICB9XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBwcml2YXRlIF9zZXREYXRlKHZhbHVlOiBEYXRlKSB7XG4gICAgaWYgKHRoaXMucmVhZG9ubHkgfHwgdGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xuICAgIHRoaXMuY29tbWl0VmFsdWUodGhpcy5jYWxlbmRhclNlcnZpY2UuY29udmVydCh2YWx1ZSwgdGhpcy50eXBlKS5zdGFydE9mKCkuZGF0ZSwgdHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByb3RlY3RlZCBpc0Rpc2FibGVkKGRhdGU6IEFYRGF0ZVRpbWUpOiBib29sZWFuIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmRpc2FibGVkRGF0ZXMpICYmIHRoaXMuZGlzYWJsZWREYXRlcy5sZW5ndGggIT0gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWREYXRlcy5zb21lKChkKSA9PiBkYXRlLmVxdWFsKGQsICdkYXknKSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5kaXNhYmxlZERhdGVzID09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkRGF0ZXMoZGF0ZS5kYXRlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBwcm90ZWN0ZWQgaXNIb2xpZGF5KGRhdGU6IEFYRGF0ZVRpbWUpOiBib29sZWFuIHtcbiAgICBjb25zdCBnaCA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmhvbGlkYXlzLnNvbWUoKGQpID0+IGRhdGUuZXF1YWwoZC5kYXRlLCAnZGF5JykpO1xuICAgIGxldCBkaCA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmhvbGlkYXlzLnNvbWUoKGQpID0+IGRhdGUuZXF1YWwoZC5kYXRlLCAnZGF5JykpO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuaG9saWRheURhdGVzKSAmJiB0aGlzLmhvbGlkYXlEYXRlcy5sZW5ndGggIT0gMCkge1xuICAgICAgZGggPSB0aGlzLmhvbGlkYXlEYXRlcy5zb21lKChkKSA9PiBkYXRlLmVxdWFsKGQsICdkYXknKSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5ob2xpZGF5RGF0ZXMgPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZGggPSB0aGlzLmhvbGlkYXlEYXRlcyhkYXRlLmRhdGUpO1xuICAgIH1cbiAgICByZXR1cm4gZ2ggfHwgZGg7XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByb3RlY3RlZCBpc1dlZWtlbmQoZGF0ZTogQVhEYXRlVGltZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHdlZWtlbmQgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5yZXNvbHZlQ2FsZW5kYXIodGhpcy50eXBlKS53ZWVrZW5kO1xuICAgIHJldHVybiB3ZWVrZW5kLmluY2x1ZGVzKGRhdGUuZGF5T2ZXZWVrIC0gMSk7XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICBfaGFuZGxlT25LZXlkb3duRXZlbnQoZTogS2V5Ym9hcmRFdmVudCkge1xuICAgIC8vVE9ETzogY29tcGxldGUga2V5Ym9hZCBuYXZpZ2F0aW9uXG4gICAgY29uc3QgaWdub3JlID0gKCkgPT4ge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9O1xuICAgIGlmIChlLmNvZGUgPT09ICdBcnJvd1JpZ2h0JyB8fCBlLmNvZGUgPT09ICdBcnJvd0xlZnQnKSB7XG4gICAgICBpZiAoZS5jdHJsS2V5KSB7XG4gICAgICAgIGUuY29kZSA9PT0gJ0Fycm93UmlnaHQnID8gdGhpcy5uZXh0KCkgOiB0aGlzLnByZXYoKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgICB9LCA1MCk7XG4gICAgICB9XG4gICAgICBpZ25vcmUoKTtcbiAgICB9IGVsc2UgaWYgKGUuY29kZSA9PT0gJ0Fycm93VXAnIHx8IGUuY29kZSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgIGlmIChlLmN0cmxLZXkpIHtcbiAgICAgICAgZS5jb2RlID09PSAnQXJyb3dVcCcgPyB0aGlzLm5leHQoKSA6IHRoaXMucHJldigpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgIH0sIDUwKTtcbiAgICAgIH1cbiAgICAgIGlnbm9yZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiAgQGlnbm9yZVxuICAgKi9cbiAgcHJvdGVjdGVkIGdldE1vbnRoTmFtZShkYXRlOiBBWERhdGVUaW1lLCBzdHlsZTogJ3Nob3J0JyB8ICdsb25nJykge1xuICAgIHJldHVybiBgZGF0ZVRpbWUubW9udGhzLiR7ZGF0ZS5jYWxlbmRhci5uYW1lKCl9LiR7c3R5bGV9LiR7ZGF0ZS5tb250aE9mWWVhciAtIDF9YDtcbiAgfVxufVxuIiwiPG5nLWNvbnRlbnQgc2VsZWN0PVwiYXgtaGVhZGVyXCI+PC9uZy1jb250ZW50PlxuPGRpdiBjbGFzcz1cImF4LWNhbGVuZGFyLWJvZHlcIj5cbiAgQGZvciAodiBvZiB2aWV3czsgbGV0IGkgPSAkaW5kZXgsIGZpcnN0ID0gJGZpcnN0LCBsYXN0ID0gJGxhc3Q7IHRyYWNrIGkpIHtcbiAgICBAc3dpdGNoIChhY3RpdmVWaWV3KSB7XG4gICAgICBAY2FzZSAoJ3llYXInKSB7XG4gICAgICAgIEBpZiAoc2hvd05hdmlnYXRpb24pIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtY2FsZW5kYXItdmlldy1oZWFkZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1jYWxlbmRhci1oZWFkZXItaW5mb1wiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZWQgPyAnJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgIFthdHRyLnJlYWRvbmx5XT1cInJlYWRvbmx5ID8gJycgOiBudWxsXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImF4LWdlbmVyYWwtYnV0dG9uIGF4LWJ1dHRvbi1yb3VuZGVkIGF4LXN0YXRlLWRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiX2hhbmRsZU5hdkNsaWNrKCRldmVudCwgJ3llYXInKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyB2LnJhbmdlLnN0YXJ0VGltZS5mb3JtYXQoJ1lZWVknKSB9fSAtIHt7IHYucmFuZ2UuZW5kVGltZS5mb3JtYXQoJ1lZWVknKSB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgQGlmIChsYXN0KSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1jYWxlbmRhci1oZWFkZXItYnV0dG9uc1wiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZWQgPyAnJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIucmVhZG9ubHldPVwicmVhZG9ubHkgPyAnJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJheC1nZW5lcmFsLWJ1dHRvbiBheC1idXR0b24tcm91bmRlZCBheC1idXR0b24taWNvbiBheC1uZXh0XCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJfaGFuZGxlUHJldkNsaWNrKClcIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidwcmV2JyB8IHRyYW5zbGF0ZSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImF4LWljb24gYXgtaWNvbi1jaGV2cm9uLWxlZnRcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJkaXNhYmxlZCA/ICcnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5yZWFkb25seV09XCJyZWFkb25seSA/ICcnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LWdlbmVyYWwtYnV0dG9uIGF4LWJ1dHRvbi1yb3VuZGVkIGF4LWJ1dHRvbi1pY29uXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJfaGFuZGxlTmV4dENsaWNrKClcIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIiduZXh0JyB8IHRyYW5zbGF0ZSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImF4LWljb24gYXgtaWNvbi1jaGV2cm9uLXJpZ2h0XCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtY2FsZW5kYXItc2xvdHMgYXgtY2FsZW5kYXItc2xvdHMteWVhclwiIFtuZ0NsYXNzXT1cInsgJ2F4LWRlZmF1bHQnOiAhY2VsbFRlbXBsYXRlIH1cIj5cbiAgICAgICAgICBAZm9yIChzbG90IG9mIHYuc2xvdHM7IHRyYWNrIHNsb3QudGV4dCkge1xuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICBjbGFzcz1cImF4LWNhbGVuZGFyLXNsb3RcIlxuICAgICAgICAgICAgICBbY2xhc3MuYXgtc3RhdGUtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJzbG90LmNzc0NsYXNzXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIl9oYW5kbGVTbG90Q2xpY2soJGV2ZW50LCBzbG90KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIEBpZiAoY2VsbFRlbXBsYXRlKSB7XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjZWxsVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiB7IHNsb3Q6IHNsb3QgfSB9XCI+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPGRpdiBbdGl0bGVdPVwic2xvdC50b29sdGlwXCI+XG4gICAgICAgICAgICAgICAgICB7eyBzbG90LnRleHQgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIEBjYXNlICgnbW9udGgnKSB7XG4gICAgICAgIEBpZiAoc2hvd05hdmlnYXRpb24pIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtY2FsZW5kYXItdmlldy1oZWFkZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1jYWxlbmRhci1oZWFkZXItaW5mb1wiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZWQgPyAnJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgIFthdHRyLnJlYWRvbmx5XT1cInJlYWRvbmx5ID8gJycgOiBudWxsXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImF4LWdlbmVyYWwtYnV0dG9uIGF4LWJ1dHRvbi1yb3VuZGVkXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiX2hhbmRsZU5hdkNsaWNrKCRldmVudCwgJ3llYXInKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyB2LnJhbmdlLnN0YXJ0VGltZS5mb3JtYXQoJ1lZWVknKSB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgQGlmIChsYXN0KSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1jYWxlbmRhci1oZWFkZXItYnV0dG9uc1wiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZWQgPyAnJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIucmVhZG9ubHldPVwicmVhZG9ubHkgPyAnJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJheC1nZW5lcmFsLWJ1dHRvbiBheC1idXR0b24tcm91bmRlZCBheC1idXR0b24taWNvblwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiX2hhbmRsZVByZXZDbGljaygpXCJcbiAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCIncHJldicgfCB0cmFuc2xhdGUgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJheC1pY29uIGF4LWljb24tY2hldnJvbi1sZWZ0XCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZWQgPyAnJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIucmVhZG9ubHldPVwicmVhZG9ubHkgPyAnJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJheC1nZW5lcmFsLWJ1dHRvbiBheC1idXR0b24tcm91bmRlZCBheC1idXR0b24taWNvblwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiX2hhbmRsZU5leHRDbGljaygpXCJcbiAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInbmV4dCcgfCB0cmFuc2xhdGUgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJheC1pY29uIGF4LWljb24tY2hldnJvbi1yaWdodFwiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgPGRpdiBjbGFzcz1cImF4LWNhbGVuZGFyLXNsb3RzIGF4LWNhbGVuZGFyLXNsb3RzLW1vbnRoXCIgW25nQ2xhc3NdPVwieyAnYXgtZGVmYXVsdCc6ICFjZWxsVGVtcGxhdGUgfVwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgc2xvdCBvZiB2LnNsb3RzXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYXgtY2FsZW5kYXItc2xvdFwiXG4gICAgICAgICAgICBbY2xhc3MuYXgtc3RhdGUtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwic2xvdC5jc3NDbGFzc1wiXG4gICAgICAgICAgICAoY2xpY2spPVwiX2hhbmRsZVNsb3RDbGljaygkZXZlbnQsIHNsb3QpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBAaWYgKGNlbGxUZW1wbGF0ZSkge1xuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjZWxsVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiB7IHNsb3Q6IHNsb3QgfSB9XCI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgIDxkaXYgW3RpdGxlXT1cInNsb3QudG9vbHRpcFwiPlxuICAgICAgICAgICAgICAgIHt7IGdldE1vbnRoTmFtZShzbG90LmRhdGUsICdzaG9ydCcpIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgQGRlZmF1bHQge1xuICAgICAgICBAaWYgKHNob3dOYXZpZ2F0aW9uKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImF4LWNhbGVuZGFyLXZpZXctaGVhZGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtY2FsZW5kYXItaGVhZGVyLWluZm9cIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cImRpc2FibGVkID8gJycgOiBudWxsXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5yZWFkb25seV09XCJyZWFkb25seSA/ICcnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJheC1nZW5lcmFsLWJ1dHRvbiBheC1idXR0b24tcm91bmRlZFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9oYW5kbGVOYXZDbGljaygkZXZlbnQsICd5ZWFyJylcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgdi5yYW5nZS5zdGFydFRpbWUuZm9ybWF0KCdZWVlZJykgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJkaXNhYmxlZCA/ICcnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgW2F0dHIucmVhZG9ubHldPVwicmVhZG9ubHkgPyAnJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYXgtZ2VuZXJhbC1idXR0b24gYXgtYnV0dG9uLXJvdW5kZWRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJfaGFuZGxlTmF2Q2xpY2soJGV2ZW50LCAnbW9udGgnKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBnZXRNb250aE5hbWUodi5yYW5nZS5zdGFydFRpbWUsICdsb25nJykgfCB0cmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgQGlmIChsYXN0KSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1jYWxlbmRhci1oZWFkZXItYnV0dG9uc1wiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZWQgPyAnJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIucmVhZG9ubHldPVwicmVhZG9ubHkgPyAnJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJheC1nZW5lcmFsLWJ1dHRvbiBheC1idXR0b24tcm91bmRlZCBheC1idXR0b24taWNvblwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiX2hhbmRsZVByZXZDbGljaygpXCJcbiAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCIncHJldicgfCB0cmFuc2xhdGUgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJheC1pY29uIGF4LWljb24tY2hldnJvbi1sZWZ0XCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZWQgPyAnJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIucmVhZG9ubHldPVwicmVhZG9ubHkgPyAnJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJheC1nZW5lcmFsLWJ1dHRvbiBheC1idXR0b24tcm91bmRlZCBheC1idXR0b24taWNvblwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiX2hhbmRsZU5leHRDbGljaygpXCJcbiAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInbmV4dCcgfCB0cmFuc2xhdGUgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJheC1pY29uIGF4LWljb24tY2hldnJvbi1yaWdodFwiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgPGRpdiBjbGFzcz1cImF4LWNhbGVuZGFyLXdlZWtcIj5cbiAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBkIG9mIF93ZWVrZGF5c1wiPnt7ICdkYXRlVGltZS53ZWVrZGF5cy5zaG9ydC4nICsgZCB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtY2FsZW5kYXItc2xvdHMgYXgtY2FsZW5kYXItc2xvdHMtZGF5XCIgW25nQ2xhc3NdPVwieyAnYXgtZGVmYXVsdCc6ICFjZWxsVGVtcGxhdGUgfVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHNsb3Qgb2Ygdi5zbG90c1wiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICBjbGFzcz1cImF4LWNhbGVuZGFyLXNsb3RcIlxuICAgICAgICAgICAgICBbY2xhc3MuYXgtc3RhdGUtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJzbG90LmNzc0NsYXNzXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIl9oYW5kbGVTbG90Q2xpY2soJGV2ZW50LCBzbG90KVwiXG4gICAgICAgICAgICAgIFtheFJpcHBsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgQGlmIChjZWxsVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNlbGxUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IHsgc2xvdDogc2xvdCB9IH1cIj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8ZGl2IFt0aXRsZV09XCJzbG90LnRvb2x0aXBcIj5cbiAgICAgICAgICAgICAgICAgIHt7IHNsb3QudGV4dCB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgfVxuICB9XG48L2Rpdj5cbjxuZy1jb250ZW50IHNlbGVjdD1cImF4LWZvb3RlclwiPjwvbmctY29udGVudD5cbiJdfQ==
|