@wizishop/angular-components 15.1.138 → 15.1.140

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3334,6 +3334,36 @@ wac-calendar {
3334
3334
  .datetimepicker .datetimepicker-footer {
3335
3335
  display: none;
3336
3336
  }
3337
+
3338
+ .wac-calendar--range {
3339
+ .datetimepicker.is-primary .datepicker-body .datepicker-dates .datepicker-days .datepicker-date.datepicker-range {
3340
+ background-color: $wac-wizishop-blue;
3341
+ button {
3342
+ background-color: $wac-wizishop-blue!important;
3343
+ }
3344
+ &.datepicker-range-start, &.datepicker-range-end, &.is-today.datepicker-range-start {
3345
+ button {
3346
+ background-color: $white!important;
3347
+ border-color: $white!important;
3348
+ color: $wac-wizishop-blue!important;
3349
+ }
3350
+ }
3351
+ }
3352
+ .wac-calendar__wrapper__input {
3353
+ min-width: 270px;
3354
+ max-width: 270px;
3355
+ &__date {
3356
+ margin: 0;
3357
+ }
3358
+ &__separator {
3359
+ margin: 0 12px 0 10px;
3360
+ i {
3361
+ font-size: rem(14);
3362
+ color: $wac-main-text;
3363
+ }
3364
+ }
3365
+ }
3366
+ }
3337
3367
  .wac-card-price {
3338
3368
  width: 100%;
3339
3369
  padding: 30px;
@@ -5143,6 +5173,7 @@ wac-grid {
5143
5173
  }
5144
5174
  }
5145
5175
  :host {
5176
+ height: 100%;
5146
5177
  position: relative;
5147
5178
 
5148
5179
  @for $i from 1 through 12 {
@@ -5172,6 +5203,7 @@ wac-grid {
5172
5203
  align-items: center;
5173
5204
  gap: 15px;
5174
5205
  height: 100%;
5206
+ min-height: 150px;
5175
5207
  background: #ffffff;
5176
5208
  width: 100%;
5177
5209
  padding: 20px;
@@ -5201,6 +5233,10 @@ wac-grid {
5201
5233
  }
5202
5234
  }
5203
5235
 
5236
+ .with-desc {
5237
+ min-height: none !important;
5238
+ }
5239
+
5204
5240
  a {
5205
5241
  cursor: pointer;
5206
5242
  }
@@ -30,6 +30,15 @@ export class CalendarComponent {
30
30
  get dateSelected() {
31
31
  return this._dateSelected;
32
32
  }
33
+ set dateSelectedEnd(dateSelected) {
34
+ if (this.disabled) {
35
+ return;
36
+ }
37
+ this._dateSelectedEnd = new Date(dateSelected); // trigger change detection for pure pipe
38
+ }
39
+ get dateSelectedEnd() {
40
+ return this._dateSelectedEnd;
41
+ }
33
42
  set calendarMinutes(calendarMinutes) {
34
43
  if (!this.dateSelected) {
35
44
  this.dateSelected = new Date();
@@ -60,6 +69,7 @@ export class CalendarComponent {
60
69
  this.datePipe = datePipe;
61
70
  this.boldLabel = false; // todo remove when label will be a ng-content
62
71
  this.type = 'input';
72
+ this.isRange = false;
63
73
  this._options = {
64
74
  displayMode: 'inline',
65
75
  showHeader: false,
@@ -93,6 +103,11 @@ export class CalendarComponent {
93
103
  selectedDates.startDate.setHours(this.dateSelected.getHours());
94
104
  selectedDates.startDate.setMinutes(this.dateSelected.getMinutes());
95
105
  this.dateSelected = selectedDates.startDate;
106
+ if (selectedDates.endDate) {
107
+ selectedDates.endDate.setMinutes(this.dateSelectedEnd.getMinutes());
108
+ selectedDates.endDate.setMinutes(this.dateSelectedEnd.getMinutes());
109
+ this.dateSelectedEnd = selectedDates.endDate;
110
+ }
96
111
  this.triggerDateSelectedChange();
97
112
  }
98
113
  triggerDateSelectedChange() {
@@ -100,7 +115,7 @@ export class CalendarComponent {
100
115
  this.dateSelectedChange.emit(this.dateSelected);
101
116
  this.triggerChange({
102
117
  startDate: this.dateSelected,
103
- endDate: this.dateSelected
118
+ endDate: this.dateSelectedEnd
104
119
  });
105
120
  }
106
121
  triggerChange(event) {
@@ -184,14 +199,14 @@ export class CalendarComponent {
184
199
  }
185
200
  }
186
201
  CalendarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: CalendarComponent, deps: [{ token: i1.DatePipe }], target: i0.ɵɵFactoryTarget.Component });
187
- CalendarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.5", type: CalendarComponent, selector: "wac-calendar", inputs: { label: "label", boldLabel: "boldLabel", type: "type", options: "options", position: "position", dateSelected: "dateSelected", typeDate: "typeDate", noMargin: "noMargin", disabled: "disabled" }, outputs: { dateSelectedChange: "dateSelectedChange", changeData: "changeData" }, providers: [
202
+ CalendarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.5", type: CalendarComponent, selector: "wac-calendar", inputs: { label: "label", boldLabel: "boldLabel", type: "type", isRange: "isRange", options: "options", position: "position", dateSelected: "dateSelected", dateSelectedEnd: "dateSelectedEnd", typeDate: "typeDate", noMargin: "noMargin", disabled: "disabled" }, outputs: { dateSelectedChange: "dateSelectedChange", changeData: "changeData" }, providers: [
188
203
  {
189
204
  provide: NG_VALUE_ACCESSOR,
190
205
  useExisting: CalendarComponent,
191
206
  multi: true
192
207
  },
193
208
  DatePipe
194
- ], viewQueries: [{ propertyName: "minutes", first: true, predicate: ["minutes"], descendants: true }, { propertyName: "hours", first: true, predicate: ["hours"], descendants: true }, { propertyName: "datePicker", first: true, predicate: ["datePicker"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\r\n class=\"wac-calendar\"\r\n [ngClass]=\"{\r\n 'wac-calendar--input': type === 'input',\r\n 'wac-calendar--onlyDate': typeDate === 'date',\r\n 'wac-calendar--edit': type === 'edit',\r\n 'wac-calendar--select': type === 'select',\r\n 'wac-calendar--no-margin': noMargin,\r\n 'wac-calendar--open': open\r\n }\"\r\n [zIndexToggle]=\"open\"\r\n>\r\n <p [class]=\"'wac-calendar__label' + (boldLabel ? ' bold' : '')\" *ngIf=\"label && (type === 'input' || type === 'select')\" (click)=\"openCalendar()\">{{ label }}</p>\r\n <p class=\"wac-calendar__startLabel\" *ngIf=\"type === 'edit'\">{{ startLabel }}</p>\r\n <wac-optional-disable-container [disabled]=\"disabled\">\r\n <div class=\"wac-calendar__autoHide\" wzAutoHide (clickOutside)=\"openCalendar('close')\">\r\n <div class=\"wac-calendar__wrapper\">\r\n <div class=\"wac-calendar__wrapper__input\" *ngIf=\"type === 'input'\" (click)=\"openCalendar()\">\r\n <div class=\"wac-calendar__wrapper__input__icon\">\r\n <i class=\"far fa-calendar-alt\"></i>\r\n </div>\r\n <div class=\"wac-calendar__wrapper__input__date\">\r\n <span *ngIf=\"dateSelected\" @opacityAnimation>{{ dateSelected | date: 'dd/MM/yyyy'}}</span>\r\n <span class=\"placeholder-date\" *ngIf=\"!dateSelected\" @opacityAnimation>{{ 'wac.Date.PlaceHolder.dd/mm/yyyy' | translate }}</span>\r\n </div>\r\n <div class=\"wac-calendar__wrapper__input__time\">\r\n <span *ngIf=\"dateSelected\" @opacityAnimation>{{ dateSelected | date: 'HH:mm' }}</span>\r\n <span class=\"placeholder-date\" *ngIf=\"!dateSelected\" @opacityAnimation>{{ 'wac.Date.PlaceHolder.HH:mm' | translate }}</span>\r\n </div>\r\n </div>\r\n <div class=\"wac-calendar__wrapper__editInPlace\" *ngIf=\"type === 'edit'\" (click)=\"openCalendar()\">\r\n <div class=\"wac-calendar__wrapper__editInPlace__icon\">\r\n <i class=\"fal fa-calendar-alt\"></i>\r\n </div>\r\n <div class=\"wac-calendar__wrapper__editInPlace__date\">\r\n <div class=\"wac-calendar__wrapper__input__time\">\r\n <span *ngIf=\"dateSelected\" @opacityAnimation>{{ dateSelected | date: 'dd/MM/yyyy HH:mm' }}</span>\r\n <span class=\"placeholder-date\" *ngIf=\"!dateSelected\" @opacityAnimation>{{ 'wac.Date.PlaceHolder.dd/MM/yyyy_HH:mm' | translate }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"wac-calendar__wrapper__select\" *ngIf=\"type === 'select'\" (click)=\"openCalendar()\">\r\n <div class=\"wac-calendar__wrapper__select__icon\">\r\n <i class=\"fal fa-calendar-alt\"></i>\r\n </div>\r\n <div class=\"wac-calendar__wrapper__select__date\">\r\n <span *ngIf=\"dateSelected\" @opacityAnimation>{{ dateSelected | date: 'dd/MM/yyyy HH:mm' }}</span>\r\n <span class=\"placeholder-date\" *ngIf=\"!dateSelected\" @opacityAnimation>{{ 'wac.Date.PlaceHolder.dd/MM/yyyy_HH:mm' | translate }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n class=\"wac-calendar__absolute\"\r\n [ngClass]=\"{\r\n top: position === 'top',\r\n bottom: position === 'bottom',\r\n left: position === 'left',\r\n right: position === 'right',\r\n 'right-top': position === 'right-top',\r\n 'right-bottom': position === 'right-bottom',\r\n 'left-top': position === 'left-top',\r\n 'left-bottom': position === 'left-bottom',\r\n 'with-time': typeDate === 'datetime-local' || typeDate === 'datetime'\r\n }\"\r\n >\r\n <nwb-date-picker #datePicker (change)=\"onChangeDate($event)\" [options]=\"options\">\r\n <input [nwbDatepickerStart]=\"datePicker\" type=\"text\" [nwbDateType]=\"'date'\" [value]=\"dateSelected?.toISOString()\" />\r\n </nwb-date-picker>\r\n <div class=\"wac-calendar__absolute__time\" *ngIf=\"typeDate === 'datetime-local' || typeDate === 'datetime'\">\r\n <div class=\"wac-calendar__absolute__time__wrapper\">\r\n <div class=\"wac-calendar__absolute__time__wrapper__hours\">\r\n <div class=\"wac-calendar__absolute__time__wrapper__hours__left\">\r\n <button class=\"wac-calendar__absolute__time__wrapper__hours__btn\" (click)=\"incrementHours($event)\">\r\n <i class=\"fas fa-plus\"></i>\r\n </button>\r\n <button class=\"wac-calendar__absolute__time__wrapper__hours__btn\" (click)=\"decrementHours($event)\">\r\n <i class=\"fas fa-minus\"></i>\r\n </button>\r\n </div>\r\n <div class=\"wac-calendar__absolute__time__wrapper__hours__right\">\r\n <input #hours type=\"text\" [(ngModel)]=\"calendarHours\" [wacOnlyNumber]=\"true\"/>\r\n </div>\r\n </div>\r\n <div class=\"wac-calendar__absolute__time__wrapper__minutes\">\r\n <div class=\"wac-calendar__absolute__time__wrapper__minutes__left\">\r\n <input #minutes type=\"text\" [(ngModel)]=\"calendarMinutes\" [wacOnlyNumber]=\"true\"/>\r\n </div>\r\n <div class=\"wac-calendar__absolute__time__wrapper__minutes__right\">\r\n <button class=\"wac-calendar__absolute__time__wrapper__minutes__btn\" (click)=\"incrementMinutes($event)\">\r\n <i class=\"fas fa-plus\"></i>\r\n </button>\r\n <button class=\"wac-calendar__absolute__time__wrapper__minutes__btn\" (click)=\"decrementsMinutes($event)\">\r\n <i class=\"fas fa-minus\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </wac-optional-disable-container>\r\n <p class=\"wac-calendar__endLabel\" *ngIf=\"type === 'edit'\">{{ endLabel }}</p>\r\n</div>\r\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.NwbDatePickerComponent, selector: "nwb-date-picker", inputs: ["options"], outputs: ["change", "clear"] }, { kind: "directive", type: i3.NwbDatePickerInputStartDirective, selector: "input[nwbDatepickerStart]", inputs: ["nwbDatepickerStart"] }, { kind: "directive", type: i3.NwbDatePickerInputDateTypeDirective, selector: "input[nwbDateType]", inputs: ["nwbDateType"] }, { kind: "directive", type: i4.AutoHideDirective, selector: "[wzAutoHide]", inputs: ["triggerElement", "forceOn"], outputs: ["clickOutside"] }, { kind: "directive", type: i5.ZindexToggleDirective, selector: "[zIndexToggle]", inputs: ["zIndexToggle"], outputs: ["onEventChange"] }, { kind: "directive", type: i6.OnlyNumberDirective, selector: "[wacOnlyNumber]", inputs: ["wacOnlyNumber"] }, { kind: "component", type: i7.OptionalDisableContainerComponent, selector: "wac-optional-disable-container", inputs: ["disabled"] }, { kind: "pipe", type: i1.DatePipe, name: "date" }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }], animations: [opacityAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
209
+ ], viewQueries: [{ propertyName: "minutes", first: true, predicate: ["minutes"], descendants: true }, { propertyName: "hours", first: true, predicate: ["hours"], descendants: true }, { propertyName: "datePicker", first: true, predicate: ["datePicker"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\r\n class=\"wac-calendar\"\r\n [ngClass]=\"{\r\n 'wac-calendar--input': type === 'input',\r\n 'wac-calendar--onlyDate': typeDate === 'date',\r\n 'wac-calendar--edit': type === 'edit',\r\n 'wac-calendar--select': type === 'select',\r\n 'wac-calendar--no-margin': noMargin,\r\n 'wac-calendar--open': open,\r\n 'wac-calendar--range': isRange\r\n }\"\r\n [zIndexToggle]=\"open\"\r\n>\r\n <p [class]=\"'wac-calendar__label' + (boldLabel ? ' bold' : '')\" *ngIf=\"label && (type === 'input' || type === 'select')\" (click)=\"openCalendar()\">{{ label }}</p>\r\n <p class=\"wac-calendar__startLabel\" *ngIf=\"type === 'edit'\">{{ startLabel }}</p>\r\n <wac-optional-disable-container [disabled]=\"disabled\">\r\n <div class=\"wac-calendar__autoHide\" wzAutoHide (clickOutside)=\"openCalendar('close')\">\r\n <div class=\"wac-calendar__wrapper\">\r\n <div class=\"wac-calendar__wrapper__input\" *ngIf=\"type === 'input'\" (click)=\"openCalendar()\">\r\n <div class=\"wac-calendar__wrapper__input__icon\">\r\n <i class=\"far fa-calendar-alt\"></i>\r\n </div>\r\n <div class=\"wac-calendar__wrapper__input__date\">\r\n <span *ngIf=\"dateSelected\" @opacityAnimation>{{ dateSelected | date: 'dd/MM/yyyy'}}</span>\r\n <span class=\"placeholder-date\" *ngIf=\"!dateSelected\" @opacityAnimation>{{ 'wac.Date.PlaceHolder.dd/mm/yyyy' | translate }}</span>\r\n </div>\r\n <div class=\"wac-calendar__wrapper__input__time\">\r\n <span *ngIf=\"dateSelected\" @opacityAnimation>{{ dateSelected | date: 'HH:mm' }}</span>\r\n <span class=\"placeholder-date\" *ngIf=\"!dateSelected\" @opacityAnimation>{{ 'wac.Date.PlaceHolder.HH:mm' | translate }}</span>\r\n </div>\r\n <ng-container *ngIf=\"isRange\">\r\n <div class=\"wac-calendar__wrapper__input__separator\"><i class=\"fa-solid fa-chevron-right\"></i></div>\r\n <div class=\"wac-calendar__wrapper__input__date\">\r\n <span *ngIf=\"dateSelectedEnd\" @opacityAnimation>{{ dateSelectedEnd | date: 'dd/MM/yyyy'}}</span>\r\n <span class=\"placeholder-date\" *ngIf=\"!dateSelectedEnd\" @opacityAnimation>{{ 'wac.Date.PlaceHolder.dd/mm/yyyy' | translate }}</span>\r\n </div>\r\n <div class=\"wac-calendar__wrapper__input__time\">\r\n <span *ngIf=\"dateSelectedEnd\" @opacityAnimation>{{ dateSelectedEnd | date: 'HH:mm' }}</span>\r\n <span class=\"placeholder-date\" *ngIf=\"!dateSelectedEnd\" @opacityAnimation>{{ 'wac.Date.PlaceHolder.HH:mm' | translate }}</span>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"wac-calendar__wrapper__editInPlace\" *ngIf=\"type === 'edit'\" (click)=\"openCalendar()\">\r\n <div class=\"wac-calendar__wrapper__editInPlace__icon\">\r\n <i class=\"fal fa-calendar-alt\"></i>\r\n </div>\r\n <div class=\"wac-calendar__wrapper__editInPlace__date\">\r\n <div class=\"wac-calendar__wrapper__input__time\">\r\n <span *ngIf=\"dateSelected\" @opacityAnimation>{{ dateSelected | date: 'dd/MM/yyyy HH:mm' }}</span>\r\n <span class=\"placeholder-date\" *ngIf=\"!dateSelected\" @opacityAnimation>{{ 'wac.Date.PlaceHolder.dd/MM/yyyy_HH:mm' | translate }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"wac-calendar__wrapper__select\" *ngIf=\"type === 'select'\" (click)=\"openCalendar()\">\r\n <div class=\"wac-calendar__wrapper__select__icon\">\r\n <i class=\"fal fa-calendar-alt\"></i>\r\n </div>\r\n <div class=\"wac-calendar__wrapper__select__date\">\r\n <span *ngIf=\"dateSelected\" @opacityAnimation>{{ dateSelected | date: 'dd/MM/yyyy HH:mm' }}</span>\r\n <span class=\"placeholder-date\" *ngIf=\"!dateSelected\" @opacityAnimation>{{ 'wac.Date.PlaceHolder.dd/MM/yyyy_HH:mm' | translate }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n class=\"wac-calendar__absolute\"\r\n [ngClass]=\"{\r\n top: position === 'top',\r\n bottom: position === 'bottom',\r\n left: position === 'left',\r\n right: position === 'right',\r\n 'right-top': position === 'right-top',\r\n 'right-bottom': position === 'right-bottom',\r\n 'left-top': position === 'left-top',\r\n 'left-bottom': position === 'left-bottom',\r\n 'with-time': typeDate === 'datetime-local' || typeDate === 'datetime'\r\n }\"\r\n >\r\n\r\n <!-- Solo nwbDatePicker -->\r\n <ng-container *ngIf=\"!isRange\">\r\n <nwb-date-picker #datePicker (change)=\"onChangeDate($event)\" [options]=\"options\">\r\n <input [nwbDatepickerStart]=\"datePicker\" type=\"text\" [nwbDateType]=\"'date'\" [value]=\"dateSelected?.toISOString()\" />\r\n </nwb-date-picker>\r\n </ng-container>\r\n\r\n <!-- Range nwbDatePicker -->\r\n <ng-container *ngIf=\"isRange\">\r\n <nwb-date-picker #datePicker (change)=\"onChangeDate($event)\" [options]=\"options\">\r\n <input [nwbDatepickerStart]=\"datePicker\" type=\"text\" [nwbDateType]=\"'date'\" [value]=\"dateSelected?.toISOString()\" />\r\n <input [nwbDatepickerEnd]=\"datePicker\" type=\"text\" [nwbDateType]=\"'date'\" [value]=\"dateSelectedEnd?.toISOString()\" />\r\n </nwb-date-picker>\r\n </ng-container>\r\n <div class=\"wac-calendar__absolute__time\" *ngIf=\"typeDate === 'datetime-local' || typeDate === 'datetime'\">\r\n <div class=\"wac-calendar__absolute__time__wrapper\">\r\n <div class=\"wac-calendar__absolute__time__wrapper__hours\">\r\n <div class=\"wac-calendar__absolute__time__wrapper__hours__left\">\r\n <button class=\"wac-calendar__absolute__time__wrapper__hours__btn\" (click)=\"incrementHours($event)\">\r\n <i class=\"fas fa-plus\"></i>\r\n </button>\r\n <button class=\"wac-calendar__absolute__time__wrapper__hours__btn\" (click)=\"decrementHours($event)\">\r\n <i class=\"fas fa-minus\"></i>\r\n </button>\r\n </div>\r\n <div class=\"wac-calendar__absolute__time__wrapper__hours__right\">\r\n <input #hours type=\"text\" [(ngModel)]=\"calendarHours\" [wacOnlyNumber]=\"true\"/>\r\n </div>\r\n </div>\r\n <div class=\"wac-calendar__absolute__time__wrapper__minutes\">\r\n <div class=\"wac-calendar__absolute__time__wrapper__minutes__left\">\r\n <input #minutes type=\"text\" [(ngModel)]=\"calendarMinutes\" [wacOnlyNumber]=\"true\"/>\r\n </div>\r\n <div class=\"wac-calendar__absolute__time__wrapper__minutes__right\">\r\n <button class=\"wac-calendar__absolute__time__wrapper__minutes__btn\" (click)=\"incrementMinutes($event)\">\r\n <i class=\"fas fa-plus\"></i>\r\n </button>\r\n <button class=\"wac-calendar__absolute__time__wrapper__minutes__btn\" (click)=\"decrementsMinutes($event)\">\r\n <i class=\"fas fa-minus\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </wac-optional-disable-container>\r\n <p class=\"wac-calendar__endLabel\" *ngIf=\"type === 'edit'\">{{ endLabel }}</p>\r\n</div>\r\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.NwbDatePickerComponent, selector: "nwb-date-picker", inputs: ["options"], outputs: ["change", "clear"] }, { kind: "directive", type: i3.NwbDatePickerInputStartDirective, selector: "input[nwbDatepickerStart]", inputs: ["nwbDatepickerStart"] }, { kind: "directive", type: i3.NwbDatePickerInputEndDirective, selector: "input[nwbDatepickerEnd]", inputs: ["nwbDatepickerEnd", "nwbDateType"] }, { kind: "directive", type: i3.NwbDatePickerInputDateTypeDirective, selector: "input[nwbDateType]", inputs: ["nwbDateType"] }, { kind: "directive", type: i4.AutoHideDirective, selector: "[wzAutoHide]", inputs: ["triggerElement", "forceOn"], outputs: ["clickOutside"] }, { kind: "directive", type: i5.ZindexToggleDirective, selector: "[zIndexToggle]", inputs: ["zIndexToggle"], outputs: ["onEventChange"] }, { kind: "directive", type: i6.OnlyNumberDirective, selector: "[wacOnlyNumber]", inputs: ["wacOnlyNumber"] }, { kind: "component", type: i7.OptionalDisableContainerComponent, selector: "wac-optional-disable-container", inputs: ["disabled"] }, { kind: "pipe", type: i1.DatePipe, name: "date" }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }], animations: [opacityAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
195
210
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: CalendarComponent, decorators: [{
196
211
  type: Component,
197
212
  args: [{ selector: 'wac-calendar', providers: [
@@ -201,7 +216,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.5", ngImpor
201
216
  multi: true
202
217
  },
203
218
  DatePipe
204
- ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, animations: [opacityAnimation], template: "<div\r\n class=\"wac-calendar\"\r\n [ngClass]=\"{\r\n 'wac-calendar--input': type === 'input',\r\n 'wac-calendar--onlyDate': typeDate === 'date',\r\n 'wac-calendar--edit': type === 'edit',\r\n 'wac-calendar--select': type === 'select',\r\n 'wac-calendar--no-margin': noMargin,\r\n 'wac-calendar--open': open\r\n }\"\r\n [zIndexToggle]=\"open\"\r\n>\r\n <p [class]=\"'wac-calendar__label' + (boldLabel ? ' bold' : '')\" *ngIf=\"label && (type === 'input' || type === 'select')\" (click)=\"openCalendar()\">{{ label }}</p>\r\n <p class=\"wac-calendar__startLabel\" *ngIf=\"type === 'edit'\">{{ startLabel }}</p>\r\n <wac-optional-disable-container [disabled]=\"disabled\">\r\n <div class=\"wac-calendar__autoHide\" wzAutoHide (clickOutside)=\"openCalendar('close')\">\r\n <div class=\"wac-calendar__wrapper\">\r\n <div class=\"wac-calendar__wrapper__input\" *ngIf=\"type === 'input'\" (click)=\"openCalendar()\">\r\n <div class=\"wac-calendar__wrapper__input__icon\">\r\n <i class=\"far fa-calendar-alt\"></i>\r\n </div>\r\n <div class=\"wac-calendar__wrapper__input__date\">\r\n <span *ngIf=\"dateSelected\" @opacityAnimation>{{ dateSelected | date: 'dd/MM/yyyy'}}</span>\r\n <span class=\"placeholder-date\" *ngIf=\"!dateSelected\" @opacityAnimation>{{ 'wac.Date.PlaceHolder.dd/mm/yyyy' | translate }}</span>\r\n </div>\r\n <div class=\"wac-calendar__wrapper__input__time\">\r\n <span *ngIf=\"dateSelected\" @opacityAnimation>{{ dateSelected | date: 'HH:mm' }}</span>\r\n <span class=\"placeholder-date\" *ngIf=\"!dateSelected\" @opacityAnimation>{{ 'wac.Date.PlaceHolder.HH:mm' | translate }}</span>\r\n </div>\r\n </div>\r\n <div class=\"wac-calendar__wrapper__editInPlace\" *ngIf=\"type === 'edit'\" (click)=\"openCalendar()\">\r\n <div class=\"wac-calendar__wrapper__editInPlace__icon\">\r\n <i class=\"fal fa-calendar-alt\"></i>\r\n </div>\r\n <div class=\"wac-calendar__wrapper__editInPlace__date\">\r\n <div class=\"wac-calendar__wrapper__input__time\">\r\n <span *ngIf=\"dateSelected\" @opacityAnimation>{{ dateSelected | date: 'dd/MM/yyyy HH:mm' }}</span>\r\n <span class=\"placeholder-date\" *ngIf=\"!dateSelected\" @opacityAnimation>{{ 'wac.Date.PlaceHolder.dd/MM/yyyy_HH:mm' | translate }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"wac-calendar__wrapper__select\" *ngIf=\"type === 'select'\" (click)=\"openCalendar()\">\r\n <div class=\"wac-calendar__wrapper__select__icon\">\r\n <i class=\"fal fa-calendar-alt\"></i>\r\n </div>\r\n <div class=\"wac-calendar__wrapper__select__date\">\r\n <span *ngIf=\"dateSelected\" @opacityAnimation>{{ dateSelected | date: 'dd/MM/yyyy HH:mm' }}</span>\r\n <span class=\"placeholder-date\" *ngIf=\"!dateSelected\" @opacityAnimation>{{ 'wac.Date.PlaceHolder.dd/MM/yyyy_HH:mm' | translate }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n class=\"wac-calendar__absolute\"\r\n [ngClass]=\"{\r\n top: position === 'top',\r\n bottom: position === 'bottom',\r\n left: position === 'left',\r\n right: position === 'right',\r\n 'right-top': position === 'right-top',\r\n 'right-bottom': position === 'right-bottom',\r\n 'left-top': position === 'left-top',\r\n 'left-bottom': position === 'left-bottom',\r\n 'with-time': typeDate === 'datetime-local' || typeDate === 'datetime'\r\n }\"\r\n >\r\n <nwb-date-picker #datePicker (change)=\"onChangeDate($event)\" [options]=\"options\">\r\n <input [nwbDatepickerStart]=\"datePicker\" type=\"text\" [nwbDateType]=\"'date'\" [value]=\"dateSelected?.toISOString()\" />\r\n </nwb-date-picker>\r\n <div class=\"wac-calendar__absolute__time\" *ngIf=\"typeDate === 'datetime-local' || typeDate === 'datetime'\">\r\n <div class=\"wac-calendar__absolute__time__wrapper\">\r\n <div class=\"wac-calendar__absolute__time__wrapper__hours\">\r\n <div class=\"wac-calendar__absolute__time__wrapper__hours__left\">\r\n <button class=\"wac-calendar__absolute__time__wrapper__hours__btn\" (click)=\"incrementHours($event)\">\r\n <i class=\"fas fa-plus\"></i>\r\n </button>\r\n <button class=\"wac-calendar__absolute__time__wrapper__hours__btn\" (click)=\"decrementHours($event)\">\r\n <i class=\"fas fa-minus\"></i>\r\n </button>\r\n </div>\r\n <div class=\"wac-calendar__absolute__time__wrapper__hours__right\">\r\n <input #hours type=\"text\" [(ngModel)]=\"calendarHours\" [wacOnlyNumber]=\"true\"/>\r\n </div>\r\n </div>\r\n <div class=\"wac-calendar__absolute__time__wrapper__minutes\">\r\n <div class=\"wac-calendar__absolute__time__wrapper__minutes__left\">\r\n <input #minutes type=\"text\" [(ngModel)]=\"calendarMinutes\" [wacOnlyNumber]=\"true\"/>\r\n </div>\r\n <div class=\"wac-calendar__absolute__time__wrapper__minutes__right\">\r\n <button class=\"wac-calendar__absolute__time__wrapper__minutes__btn\" (click)=\"incrementMinutes($event)\">\r\n <i class=\"fas fa-plus\"></i>\r\n </button>\r\n <button class=\"wac-calendar__absolute__time__wrapper__minutes__btn\" (click)=\"decrementsMinutes($event)\">\r\n <i class=\"fas fa-minus\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </wac-optional-disable-container>\r\n <p class=\"wac-calendar__endLabel\" *ngIf=\"type === 'edit'\">{{ endLabel }}</p>\r\n</div>\r\n" }]
219
+ ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, animations: [opacityAnimation], template: "<div\r\n class=\"wac-calendar\"\r\n [ngClass]=\"{\r\n 'wac-calendar--input': type === 'input',\r\n 'wac-calendar--onlyDate': typeDate === 'date',\r\n 'wac-calendar--edit': type === 'edit',\r\n 'wac-calendar--select': type === 'select',\r\n 'wac-calendar--no-margin': noMargin,\r\n 'wac-calendar--open': open,\r\n 'wac-calendar--range': isRange\r\n }\"\r\n [zIndexToggle]=\"open\"\r\n>\r\n <p [class]=\"'wac-calendar__label' + (boldLabel ? ' bold' : '')\" *ngIf=\"label && (type === 'input' || type === 'select')\" (click)=\"openCalendar()\">{{ label }}</p>\r\n <p class=\"wac-calendar__startLabel\" *ngIf=\"type === 'edit'\">{{ startLabel }}</p>\r\n <wac-optional-disable-container [disabled]=\"disabled\">\r\n <div class=\"wac-calendar__autoHide\" wzAutoHide (clickOutside)=\"openCalendar('close')\">\r\n <div class=\"wac-calendar__wrapper\">\r\n <div class=\"wac-calendar__wrapper__input\" *ngIf=\"type === 'input'\" (click)=\"openCalendar()\">\r\n <div class=\"wac-calendar__wrapper__input__icon\">\r\n <i class=\"far fa-calendar-alt\"></i>\r\n </div>\r\n <div class=\"wac-calendar__wrapper__input__date\">\r\n <span *ngIf=\"dateSelected\" @opacityAnimation>{{ dateSelected | date: 'dd/MM/yyyy'}}</span>\r\n <span class=\"placeholder-date\" *ngIf=\"!dateSelected\" @opacityAnimation>{{ 'wac.Date.PlaceHolder.dd/mm/yyyy' | translate }}</span>\r\n </div>\r\n <div class=\"wac-calendar__wrapper__input__time\">\r\n <span *ngIf=\"dateSelected\" @opacityAnimation>{{ dateSelected | date: 'HH:mm' }}</span>\r\n <span class=\"placeholder-date\" *ngIf=\"!dateSelected\" @opacityAnimation>{{ 'wac.Date.PlaceHolder.HH:mm' | translate }}</span>\r\n </div>\r\n <ng-container *ngIf=\"isRange\">\r\n <div class=\"wac-calendar__wrapper__input__separator\"><i class=\"fa-solid fa-chevron-right\"></i></div>\r\n <div class=\"wac-calendar__wrapper__input__date\">\r\n <span *ngIf=\"dateSelectedEnd\" @opacityAnimation>{{ dateSelectedEnd | date: 'dd/MM/yyyy'}}</span>\r\n <span class=\"placeholder-date\" *ngIf=\"!dateSelectedEnd\" @opacityAnimation>{{ 'wac.Date.PlaceHolder.dd/mm/yyyy' | translate }}</span>\r\n </div>\r\n <div class=\"wac-calendar__wrapper__input__time\">\r\n <span *ngIf=\"dateSelectedEnd\" @opacityAnimation>{{ dateSelectedEnd | date: 'HH:mm' }}</span>\r\n <span class=\"placeholder-date\" *ngIf=\"!dateSelectedEnd\" @opacityAnimation>{{ 'wac.Date.PlaceHolder.HH:mm' | translate }}</span>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"wac-calendar__wrapper__editInPlace\" *ngIf=\"type === 'edit'\" (click)=\"openCalendar()\">\r\n <div class=\"wac-calendar__wrapper__editInPlace__icon\">\r\n <i class=\"fal fa-calendar-alt\"></i>\r\n </div>\r\n <div class=\"wac-calendar__wrapper__editInPlace__date\">\r\n <div class=\"wac-calendar__wrapper__input__time\">\r\n <span *ngIf=\"dateSelected\" @opacityAnimation>{{ dateSelected | date: 'dd/MM/yyyy HH:mm' }}</span>\r\n <span class=\"placeholder-date\" *ngIf=\"!dateSelected\" @opacityAnimation>{{ 'wac.Date.PlaceHolder.dd/MM/yyyy_HH:mm' | translate }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"wac-calendar__wrapper__select\" *ngIf=\"type === 'select'\" (click)=\"openCalendar()\">\r\n <div class=\"wac-calendar__wrapper__select__icon\">\r\n <i class=\"fal fa-calendar-alt\"></i>\r\n </div>\r\n <div class=\"wac-calendar__wrapper__select__date\">\r\n <span *ngIf=\"dateSelected\" @opacityAnimation>{{ dateSelected | date: 'dd/MM/yyyy HH:mm' }}</span>\r\n <span class=\"placeholder-date\" *ngIf=\"!dateSelected\" @opacityAnimation>{{ 'wac.Date.PlaceHolder.dd/MM/yyyy_HH:mm' | translate }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n class=\"wac-calendar__absolute\"\r\n [ngClass]=\"{\r\n top: position === 'top',\r\n bottom: position === 'bottom',\r\n left: position === 'left',\r\n right: position === 'right',\r\n 'right-top': position === 'right-top',\r\n 'right-bottom': position === 'right-bottom',\r\n 'left-top': position === 'left-top',\r\n 'left-bottom': position === 'left-bottom',\r\n 'with-time': typeDate === 'datetime-local' || typeDate === 'datetime'\r\n }\"\r\n >\r\n\r\n <!-- Solo nwbDatePicker -->\r\n <ng-container *ngIf=\"!isRange\">\r\n <nwb-date-picker #datePicker (change)=\"onChangeDate($event)\" [options]=\"options\">\r\n <input [nwbDatepickerStart]=\"datePicker\" type=\"text\" [nwbDateType]=\"'date'\" [value]=\"dateSelected?.toISOString()\" />\r\n </nwb-date-picker>\r\n </ng-container>\r\n\r\n <!-- Range nwbDatePicker -->\r\n <ng-container *ngIf=\"isRange\">\r\n <nwb-date-picker #datePicker (change)=\"onChangeDate($event)\" [options]=\"options\">\r\n <input [nwbDatepickerStart]=\"datePicker\" type=\"text\" [nwbDateType]=\"'date'\" [value]=\"dateSelected?.toISOString()\" />\r\n <input [nwbDatepickerEnd]=\"datePicker\" type=\"text\" [nwbDateType]=\"'date'\" [value]=\"dateSelectedEnd?.toISOString()\" />\r\n </nwb-date-picker>\r\n </ng-container>\r\n <div class=\"wac-calendar__absolute__time\" *ngIf=\"typeDate === 'datetime-local' || typeDate === 'datetime'\">\r\n <div class=\"wac-calendar__absolute__time__wrapper\">\r\n <div class=\"wac-calendar__absolute__time__wrapper__hours\">\r\n <div class=\"wac-calendar__absolute__time__wrapper__hours__left\">\r\n <button class=\"wac-calendar__absolute__time__wrapper__hours__btn\" (click)=\"incrementHours($event)\">\r\n <i class=\"fas fa-plus\"></i>\r\n </button>\r\n <button class=\"wac-calendar__absolute__time__wrapper__hours__btn\" (click)=\"decrementHours($event)\">\r\n <i class=\"fas fa-minus\"></i>\r\n </button>\r\n </div>\r\n <div class=\"wac-calendar__absolute__time__wrapper__hours__right\">\r\n <input #hours type=\"text\" [(ngModel)]=\"calendarHours\" [wacOnlyNumber]=\"true\"/>\r\n </div>\r\n </div>\r\n <div class=\"wac-calendar__absolute__time__wrapper__minutes\">\r\n <div class=\"wac-calendar__absolute__time__wrapper__minutes__left\">\r\n <input #minutes type=\"text\" [(ngModel)]=\"calendarMinutes\" [wacOnlyNumber]=\"true\"/>\r\n </div>\r\n <div class=\"wac-calendar__absolute__time__wrapper__minutes__right\">\r\n <button class=\"wac-calendar__absolute__time__wrapper__minutes__btn\" (click)=\"incrementMinutes($event)\">\r\n <i class=\"fas fa-plus\"></i>\r\n </button>\r\n <button class=\"wac-calendar__absolute__time__wrapper__minutes__btn\" (click)=\"decrementsMinutes($event)\">\r\n <i class=\"fas fa-minus\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </wac-optional-disable-container>\r\n <p class=\"wac-calendar__endLabel\" *ngIf=\"type === 'edit'\">{{ endLabel }}</p>\r\n</div>\r\n" }]
205
220
  }], ctorParameters: function () { return [{ type: i1.DatePipe }]; }, propDecorators: { minutes: [{
206
221
  type: ViewChild,
207
222
  args: ['minutes']
@@ -217,12 +232,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.5", ngImpor
217
232
  type: Input
218
233
  }], type: [{
219
234
  type: Input
235
+ }], isRange: [{
236
+ type: Input
220
237
  }], options: [{
221
238
  type: Input
222
239
  }], position: [{
223
240
  type: Input
224
241
  }], dateSelected: [{
225
242
  type: Input
243
+ }], dateSelectedEnd: [{
244
+ type: Input
226
245
  }], dateSelectedChange: [{
227
246
  type: Output
228
247
  }], typeDate: [{
@@ -234,4 +253,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.5", ngImpor
234
253
  }], changeData: [{
235
254
  type: Output
236
255
  }] } });
237
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2NhbGVuZGFyL2NhbGVuZGFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUE0Qix1QkFBdUIsRUFBRSxTQUFTLEVBQWMsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEssT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXpFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDOzs7Ozs7Ozs7O0FBaUIzRSxNQUFNLE9BQU8saUJBQWlCO0lBZTVCLElBQ0ksT0FBTyxDQUFDLE9BQXVDO1FBQ2pELElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO1FBQ3hCLElBQUksSUFBSSxDQUFDLHVCQUF1QixFQUFFLEVBQUU7WUFDbEMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzVDO0lBQ0gsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBV0QsSUFDSSxZQUFZLENBQUMsWUFBa0I7UUFDakMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxJQUFJLENBQUMs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QUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksY0FDekIsQ0FBQyxnQkFBZ0IsQ0FBQzsrRkFJUixPQUFPO3NCQUE1QixTQUFTO3VCQUFDLFNBQVM7Z0JBQ0EsS0FBSztzQkFBeEIsU0FBUzt1QkFBQyxPQUFPO2dCQUNPLFVBQVU7c0JBQWxDLFNBQVM7dUJBQUMsWUFBWTtnQkFHdkIsS0FBSztzQkFESixLQUFLO2dCQUlOLFNBQVM7c0JBRFIsS0FBSztnQkFJTixJQUFJO3NCQURILEtBQUs7Z0JBSUYsT0FBTztzQkFEVixLQUFLO2dCQW1CTixRQUFRO3NCQURQLEtBQUs7Z0JBSUYsWUFBWTtzQkFEZixLQUFLO2dCQVlJLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFHUCxRQUFRO3NCQURQLEtBQUs7Z0JBR04sUUFBUTtzQkFEUCxLQUFLO2dCQUdHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUksVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgRXZlbnRFbWl0dGVyLCBPdXRwdXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBOd2JEYXRlUGlja2VyQ29tcG9uZW50LCBOd2JEYXRlUGlja2VyRXZlbnQsIE53YkRhdGVQaWNrZXJPcHRpb25zIH0gZnJvbSAnQHdpemlzaG9wL25nLXdpemktYnVsbWEnO1xyXG5pbXBvcnQgeyBvcGFjaXR5QW5pbWF0aW9uIH0gZnJvbSAnLi4vLi4vYW5pbWF0aW9ucy9zaG93L29wYWNpdHkuYW5pbWF0aW9uJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnd2FjLWNhbGVuZGFyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY2FsZW5kYXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgdXNlRXhpc3Rpbmc6IENhbGVuZGFyQ29tcG9uZW50LFxyXG4gICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgfSxcclxuICAgIERhdGVQaXBlXHJcbiAgXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIGFuaW1hdGlvbnM6IFtvcGFjaXR5QW5pbWF0aW9uXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2FsZW5kYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuICAvLyEgQXQgdGhlIG1vbWVudCwgdGhlIGNvbXBvbmVudCBoYW5kbGUgb25seSBvbmUgZGF0ZSAobm90IGEgcmFuZ2UpXHJcbiAgQFZpZXdDaGlsZCgnbWludXRlcycpIG1pbnV0ZXM6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnaG91cnMnKSBob3VyczogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdkYXRlUGlja2VyJykgZGF0ZVBpY2tlcjogTndiRGF0ZVBpY2tlckNvbXBvbmVudDtcclxuXHJcbiAgQElucHV0KClcclxuICBsYWJlbDogc3RyaW5nIHwgbnVsbDsgLy8gdG9kbyB1c2UgbmctY29udGVudCBpbnN0ZWFkXHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgYm9sZExhYmVsOiBib29sZWFuID0gZmFsc2U7IC8vIHRvZG8gcmVtb3ZlIHdoZW4gbGFiZWwgd2lsbCBiZSBhIG5nLWNvbnRlbnRcclxuXHJcbiAgQElucHV0KClcclxuICB0eXBlOiAnaW5wdXQnIHwgJ2VkaXQnIHwgJ3NlbGVjdCcgPSAnaW5wdXQnO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBvcHRpb25zKG9wdGlvbnM6IFJlYWRvbmx5PE53YkRhdGVQaWNrZXJPcHRpb25zPikge1xyXG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XHJcbiAgICBpZiAodGhpcy5pc0J1bG1hRGF0ZVBpY2tlckV4aXN0cygpKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlQnVsbWFEYXRlUGlja2VyT3B0aW9ucyhvcHRpb25zKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBvcHRpb25zKCkgOiBSZWFkb25seTxOd2JEYXRlUGlja2VyT3B0aW9ucz4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnM7XHJcbiAgfVxyXG5cclxuICBfb3B0aW9uczogUmVhZG9ubHk8TndiRGF0ZVBpY2tlck9wdGlvbnM+ICA9IHtcclxuICAgIGRpc3BsYXlNb2RlOiAnaW5saW5lJyxcclxuICAgIHNob3dIZWFkZXI6IGZhbHNlLFxyXG4gICAgc2hvd0Zvb3RlcjogdHJ1ZSxcclxuICB9O1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHBvc2l0aW9uID0gJ2JvdHRvbSc7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGRhdGVTZWxlY3RlZChkYXRlU2VsZWN0ZWQ6IERhdGUpIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuX2RhdGVTZWxlY3RlZCA9IG5ldyBEYXRlKGRhdGVTZWxlY3RlZCk7IC8vIHRyaWdnZXIgY2hhbmdlIGRldGVjdGlvbiBmb3IgcHVyZSBwaXBlXHJcbiAgfVxyXG4gIGdldCBkYXRlU2VsZWN0ZWQoKSA6IERhdGUge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RhdGVTZWxlY3RlZDtcclxuICB9XHJcbiAgX2RhdGVTZWxlY3RlZDogRGF0ZTtcclxuXHJcbiAgQE91dHB1dCgpIGRhdGVTZWxlY3RlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgQElucHV0KClcclxuICB0eXBlRGF0ZTogJ2RhdGV0aW1lJyB8ICdkYXRldGltZS1sb2NhbCcgfCAnZGF0ZScgPSAnZGF0ZXRpbWUtbG9jYWwnO1xyXG4gIEBJbnB1dCgpXHJcbiAgbm9NYXJnaW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcclxuXHJcbiAgQE91dHB1dCgpIGNoYW5nZURhdGEgPSBuZXcgRXZlbnRFbWl0dGVyPHsgc3RhcnREYXRlOiBEYXRlOyBlbmREYXRlOiBEYXRlOyB9PigpO1xyXG4gIG9wZW4gPSBmYWxzZTtcclxuICBzdGFydExhYmVsID0gJyc7XHJcbiAgZW5kTGFiZWwgPSAnJztcclxuXHJcbiAgc2V0IGNhbGVuZGFyTWludXRlcyhjYWxlbmRhck1pbnV0ZXM6IHN0cmluZykge1xyXG4gICAgaWYgKCF0aGlzLmRhdGVTZWxlY3RlZCkge1xyXG4gICAgICB0aGlzLmRhdGVTZWxlY3RlZCA9IG5ldyBEYXRlKCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBtaW51dGVzID0gdGhpcy5mb3JtYXRUaW1lKGNhbGVuZGFyTWludXRlcywgMCwgNTkpO1xyXG4gICAgdGhpcy5kYXRlU2VsZWN0ZWQuc2V0TWludXRlcyhtaW51dGVzKTtcclxuXHJcbiAgICB0aGlzLmRhdGVTZWxlY3RlZCA9IHRoaXMuZGF0ZVNlbGVjdGVkOyAvLyB0cmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb25cclxuICAgIHRoaXMubWludXRlcy5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5kYXRlU2VsZWN0ZWQsICdtbScpOyAvLyBmb3JjZSB0byB1cGRhdGUgdGhlIGlucHV0IHZhbHVlXHJcbiAgICB0aGlzLnRyaWdnZXJEYXRlU2VsZWN0ZWRDaGFuZ2UoKTtcclxuICB9XHJcblxyXG4gIGdldCBjYWxlbmRhck1pbnV0ZXMoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh0aGlzLmRhdGVTZWxlY3RlZCA/PyBuZXcgRGF0ZSgpLCAnbW0nKTtcclxuICB9XHJcblxyXG4gIHNldCBjYWxlbmRhckhvdXJzKGNhbGVuZGFySG91cnM6IHN0cmluZykge1xyXG4gICAgaWYgKCF0aGlzLmRhdGVTZWxlY3RlZCkge1xyXG4gICAgICB0aGlzLmRhdGVTZWxlY3RlZCA9IG5ldyBEYXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaG91cnMgPSB0aGlzLmZvcm1hdFRpbWUoY2FsZW5kYXJIb3VycywgMCwgMjMpO1xyXG5cclxuICAgIHRoaXMuZGF0ZVNlbGVjdGVkLnNldEhvdXJzKGhvdXJzKTtcclxuICAgIHRoaXMuZGF0ZVNlbGVjdGVkID0gdGhpcy5kYXRlU2VsZWN0ZWQ7IC8vIHRyaWdnZXIgY2hhbmdlIGRldGVjdGlvblxyXG4gICAgdGhpcy5ob3Vycy5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5kYXRlU2VsZWN0ZWQsICdISCcpOyAvLyBmb3JjZSB0byB1cGRhdGUgdGhlIGlucHV0IHZhbHVlXHJcbiAgICB0aGlzLnRyaWdnZXJEYXRlU2VsZWN0ZWRDaGFuZ2UoKTtcclxuICB9XHJcblxyXG4gIGdldCBjYWxlbmRhckhvdXJzKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5kYXRlU2VsZWN0ZWQgPz8gbmV3IERhdGUoKSwgJ0hIJyk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZSkge31cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXMubGFiZWwgfHwgY2hhbmdlcy50eXBlKSB7XHJcbiAgICAgIHRoaXMuc2V0Q2FsZW5kYXJMYWJlbCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2VEYXRlKHNlbGVjdGVkRGF0ZXM6IE53YkRhdGVQaWNrZXJFdmVudCkge1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5kYXRlU2VsZWN0ZWQpIHtcclxuICAgICAgdGhpcy5kYXRlU2VsZWN0ZWQgPSBuZXcgRGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdGVkRGF0ZXMuc3RhcnREYXRlLnNldEhvdXJzKHRoaXMuZGF0ZVNlbGVjdGVkLmdldEhvdXJzKCkpO1xyXG4gICAgc2VsZWN0ZWREYXRlcy5zdGFydERhdGUuc2V0TWludXRlcyh0aGlzLmRhdGVTZWxlY3RlZC5nZXRNaW51dGVzKCkpO1xyXG5cclxuICAgIHRoaXMuZGF0ZVNlbGVjdGVkID0gc2VsZWN0ZWREYXRlcy5zdGFydERhdGU7XHJcbiAgICB0aGlzLnRyaWdnZXJEYXRlU2VsZWN0ZWRDaGFuZ2UoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdHJpZ2dlckRhdGVTZWxlY3RlZENoYW5nZSgpIHtcclxuICAgIHRoaXMub25DaGFuZ2UodGhpcy5kYXRlU2VsZWN0ZWQpO1xyXG4gICAgdGhpcy5kYXRlU2VsZWN0ZWRDaGFuZ2UuZW1pdCh0aGlzLmRhdGVTZWxlY3RlZCk7XHJcbiAgICB0aGlzLnRyaWdnZXJDaGFuZ2Uoe1xyXG4gICAgICBzdGFydERhdGU6IHRoaXMuZGF0ZVNlbGVjdGVkLFxyXG4gICAgICBlbmREYXRlOiB0aGlzLmRhdGVTZWxlY3RlZFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyQ2hhbmdlKGV2ZW50OiB7IHN0YXJ0RGF0ZTogRGF0ZTsgZW5kRGF0ZTogRGF0ZTsgfSkge1xyXG4gICAgdGhpcy5jaGFuZ2VEYXRhLmVtaXQoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgb3BlbkNhbGVuZGFyKHZhbHVlID0gbnVsbCkge1xyXG5cclxuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodmFsdWUgPT09ICdjbG9zZScpIHtcclxuICAgICAgaWYgKHRoaXMub3Blbikge1xyXG4gICAgICAgIHRoaXMub3BlbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMub25Ub3VjaCgpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm9wZW4gPSAhdGhpcy5vcGVuO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRDYWxlbmRhckxhYmVsKCkge1xyXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gJ2VkaXQnICYmIHRoaXMubGFiZWwpIHtcclxuICAgICAgY29uc3Qgc3BsaXRMYWJlbCA9IHRoaXMubGFiZWwuc3BsaXQoJ3t4fScpO1xyXG4gICAgICBpZiAoc3BsaXRMYWJlbC5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgdGhpcy5zdGFydExhYmVsID0gc3BsaXRMYWJlbFswXTtcclxuICAgICAgICB0aGlzLmVuZExhYmVsID0gc3BsaXRMYWJlbFsxXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnN0YXJ0TGFiZWwgPSB0aGlzLmxhYmVsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbmNyZW1lbnRNaW51dGVzKCRldmVudDogRXZlbnQpIHtcclxuICAgIHRoaXMuY2FsZW5kYXJNaW51dGVzID0gcGFyc2VJbnQodGhpcy5jYWxlbmRhck1pbnV0ZXMsIDEwKSArIDEgKyAnJztcclxuICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gIH1cclxuXHJcbiAgZGVjcmVtZW50c01pbnV0ZXMoJGV2ZW50OiBFdmVudCkge1xyXG4gICAgdGhpcy5jYWxlbmRhck1pbnV0ZXMgPSBwYXJzZUludCh0aGlzLmNhbGVuZGFyTWludXRlcywgMTApIC0gMSArICcnO1xyXG4gICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgfVxyXG5cclxuICBpbmNyZW1lbnRIb3VycygkZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICB0aGlzLmNhbGVuZGFySG91cnMgPSBwYXJzZUludCh0aGlzLmNhbGVuZGFySG91cnMsIDEwKSArIDEgKyAnJztcclxuICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gIH1cclxuXHJcbiAgZGVjcmVtZW50SG91cnMoJGV2ZW50OiBFdmVudCkge1xyXG4gICAgdGhpcy5jYWxlbmRhckhvdXJzID0gcGFyc2VJbnQodGhpcy5jYWxlbmRhckhvdXJzLCAxMCkgLSAxICsgJyc7XHJcbiAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICBFbnN1cmUgdGhhdCB0aGUgaW5wdXQgdmFsdWUgaXMgYSBudW1iZXIgYW5kIHRoYXQgaXQgaXMgYmV0d2VlbiBtaW4gYW5kIG1heFxyXG4gICovXHJcbiAgcHJpdmF0ZSBmb3JtYXRUaW1lKHRpbWU6IHN0cmluZyB8IG51bWJlciwgbWluID0gMCwgbWF4ID0gNTkpIHtcclxuICAgIGxldCB0aW1lTnVtYmVyID0gdHlwZW9mIHRpbWUgPT09ICdzdHJpbmcnID8gcGFyc2VJbnQodGltZSwgMTApIDogdGltZTtcclxuICAgIHRpbWVOdW1iZXIgPSB0aW1lTnVtYmVyID4gbWF4ID8gbWluIDogdGltZU51bWJlcjtcclxuICAgIHRpbWVOdW1iZXIgPSB0aW1lTnVtYmVyIDwgbWluID8gbWF4IDogdGltZU51bWJlcjtcclxuICAgIHRpbWVOdW1iZXIgPSBwYXJzZUludCgoJycgKyB0aW1lTnVtYmVyKS5zbGljZSgtMikpOyAvLyBrZWVwcyBvbmx5IHRoZSBsYXN0IDIgZGlnaXRzXHJcbiAgICByZXR1cm4gdGltZU51bWJlcjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlQnVsbWFEYXRlUGlja2VyT3B0aW9ucyhvcHRpb25zOiBSZWFkb25seTxOd2JEYXRlUGlja2VyT3B0aW9ucz4pIHtcclxuICAgIGNvbnN0IGJ1bG1hQ2FsZW5kYXJEYXRlUGlja2VyID0gdGhpcy5kYXRlUGlja2VyWydidWxtYUNhbGVuZGFyJ10uZGF0ZVBpY2tlcjtcclxuICAgIGJ1bG1hQ2FsZW5kYXJEYXRlUGlja2VyLm1pbiA9IG9wdGlvbnMubWluRGF0ZTtcclxuICAgIGJ1bG1hQ2FsZW5kYXJEYXRlUGlja2VyLm1heCA9IG9wdGlvbnMubWF4RGF0ZTtcclxuICAgIGJ1bG1hQ2FsZW5kYXJEYXRlUGlja2VyLnJlZnJlc2goKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNCdWxtYURhdGVQaWNrZXJFeGlzdHMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRlUGlja2VyICYmIHRoaXMuZGF0ZVBpY2tlclsnYnVsbWFDYWxlbmRhciddICYmIHRoaXMuZGF0ZVBpY2tlclsnYnVsbWFDYWxlbmRhciddLmRhdGVQaWNrZXI7XHJcbiAgfVxyXG5cclxuICAvLyBDb250cm9sVmFsdWVBY2Nlc3NvciBtZXRob2RzXHJcblxyXG4gIG9uQ2hhbmdlOiAodmFsdWU6IERhdGUpID0+IHZvaWQgPSAoKSA9PiB7fTtcclxuXHJcbiAgb25Ub3VjaDogKCkgPT4gdm9pZCA9ICgpID0+IHt9O1xyXG5cclxuICB3cml0ZVZhbHVlKGRhdGU6IERhdGUpOiB2b2lkIHtcclxuICAgIGlmICghZGF0ZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmRhdGVTZWxlY3RlZCA9IGRhdGU7XHJcbiAgfVxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSl7XHJcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpe1xyXG4gICAgICB0aGlzLm9uVG91Y2ggPSBmbjtcclxuICB9XHJcbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcclxuICB9XHJcbn1cclxuIiwiPGRpdlxyXG4gIGNsYXNzPVwid2FjLWNhbGVuZGFyXCJcclxuICBbbmdDbGFzc109XCJ7XHJcbiAgICAnd2FjLWNhbGVuZGFyLS1pbnB1dCc6IHR5cGUgPT09ICdpbnB1dCcsXHJcbiAgICAnd2FjLWNhbGVuZGFyLS1vbmx5RGF0ZSc6IHR5cGVEYXRlID09PSAnZGF0ZScsXHJcbiAgICAnd2FjLWNhbGVuZGFyLS1lZGl0JzogdHlwZSA9PT0gJ2VkaXQnLFxyXG4gICAgJ3dhYy1jYWxlbmRhci0tc2VsZWN0JzogdHlwZSA9PT0gJ3NlbGVjdCcsXHJcbiAgICAnd2FjLWNhbGVuZGFyLS1uby1tYXJnaW4nOiBub01hcmdpbixcclxuICAgICd3YWMtY2FsZW5kYXItLW9wZW4nOiBvcGVuXHJcbiAgfVwiXHJcbiAgW3pJbmRleFRvZ2dsZV09XCJvcGVuXCJcclxuPlxyXG4gIDxwIFtjbGFzc109XCInd2FjLWNhbGVuZGFyX19sYWJlbCcgKyAoYm9sZExhYmVsID8gJyBib2xkJyA6ICcnKVwiICpuZ0lmPVwibGFiZWwgJiYgKHR5cGUgPT09ICdpbnB1dCcgfHwgdHlwZSA9PT0gJ3NlbGVjdCcpXCIgKGNsaWNrKT1cIm9wZW5DYWxlbmRhcigpXCI+e3sgbGFiZWwgfX08L3A+XHJcbiAgPHAgY2xhc3M9XCJ3YWMtY2FsZW5kYXJfX3N0YXJ0TGFiZWxcIiAqbmdJZj1cInR5cGUgPT09ICdlZGl0J1wiPnt7IHN0YXJ0TGFiZWwgfX08L3A+XHJcbiAgPHdhYy1vcHRpb25hbC1kaXNhYmxlLWNvbnRhaW5lciBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJ3YWMtY2FsZW5kYXJfX2F1dG9IaWRlXCIgd3pBdXRvSGlkZSAoY2xpY2tPdXRzaWRlKT1cIm9wZW5DYWxlbmRhcignY2xvc2UnKVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwid2FjLWNhbGVuZGFyX193cmFwcGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIndhYy1jYWxlbmRhcl9fd3JhcHBlcl9faW5wdXRcIiAqbmdJZj1cInR5cGUgPT09ICdpbnB1dCdcIiAoY2xpY2spPVwib3BlbkNhbGVuZGFyKClcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3YWMtY2FsZW5kYXJfX3dyYXBwZXJfX2lucHV0X19pY29uXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFyIGZhLWNhbGVuZGFyLWFsdFwiPjwvaT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIndhYy1jYWxlbmRhcl9fd3JhcHBlcl9faW5wdXRfX2RhdGVcIj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJkYXRlU2VsZWN0ZWRcIiBAb3BhY2l0eUFuaW1hdGlvbj57eyBkYXRlU2VsZWN0ZWQgfCBkYXRlOiAnZGQvTU0veXl5eSd9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwbGFjZWhvbGRlci1kYXRlXCIgKm5nSWY9XCIhZGF0ZVNlbGVjdGVkXCIgQG9wYWNpdHlBbmltYXRpb24+e3sgJ3dhYy5EYXRlLlBsYWNlSG9sZGVyLmRkL21tL3l5eXknIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwid2FjLWNhbGVuZGFyX193cmFwcGVyX19pbnB1dF9fdGltZVwiPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImRhdGVTZWxlY3RlZFwiIEBvcGFjaXR5QW5pbWF0aW9uPnt7IGRhdGVTZWxlY3RlZCB8IGRhdGU6ICdISDptbScgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGxhY2Vob2xkZXItZGF0ZVwiICpuZ0lmPVwiIWRhdGVTZWxlY3RlZFwiIEBvcGFjaXR5QW5pbWF0aW9uPnt7ICd3YWMuRGF0ZS5QbGFjZUhvbGRlci5ISDptbScgfCB0cmFuc2xhdGUgfX08L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwid2FjLWNhbGVuZGFyX193cmFwcGVyX19lZGl0SW5QbGFjZVwiICpuZ0lmPVwidHlwZSA9PT0gJ2VkaXQnXCIgKGNsaWNrKT1cIm9wZW5DYWxlbmRhcigpXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwid2FjLWNhbGVuZGFyX193cmFwcGVyX19lZGl0SW5QbGFjZV9faWNvblwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhbCBmYS1jYWxlbmRhci1hbHRcIj48L2k+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3YWMtY2FsZW5kYXJfX3dyYXBwZXJfX2VkaXRJblBsYWNlX19kYXRlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3YWMtY2FsZW5kYXJfX3dyYXBwZXJfX2lucHV0X190aW1lXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJkYXRlU2VsZWN0ZWRcIiBAb3BhY2l0eUFuaW1hdGlvbj57eyBkYXRlU2VsZWN0ZWQgfCBkYXRlOiAnZGQvTU0veXl5eSBISDptbScgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwbGFjZWhvbGRlci1kYXRlXCIgKm5nSWY9XCIhZGF0ZVNlbGVjdGVkXCIgQG9wYWNpdHlBbmltYXRpb24+e3sgJ3dhYy5EYXRlLlBsYWNlSG9sZGVyLmRkL01NL3l5eXlfSEg6bW0nIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3YWMtY2FsZW5kYXJfX3dyYXBwZXJfX3NlbGVjdFwiICpuZ0lmPVwidHlwZSA9PT0gJ3NlbGVjdCdcIiAoY2xpY2spPVwib3BlbkNhbGVuZGFyKClcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3YWMtY2FsZW5kYXJfX3dyYXBwZXJfX3NlbGVjdF9faWNvblwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhbCBmYS1jYWxlbmRhci1hbHRcIj48L2k+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3YWMtY2FsZW5kYXJfX3dyYXBwZXJfX3NlbGVjdF9fZGF0ZVwiPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImRhdGVTZWxlY3RlZFwiIEBvcGFjaXR5QW5pbWF0aW9uPnt7IGRhdGVTZWxlY3RlZCB8IGRhdGU6ICdkZC9NTS95eXl5IEhIOm1tJyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwbGFjZWhvbGRlci1kYXRlXCIgKm5nSWY9XCIhZGF0ZVNlbGVjdGVkXCIgQG9wYWNpdHlBbmltYXRpb24+e3sgJ3dhYy5EYXRlLlBsYWNlSG9sZGVyLmRkL01NL3l5eXlfSEg6bW0nIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJ3YWMtY2FsZW5kYXJfX2Fic29sdXRlXCJcclxuICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICB0b3A6IHBvc2l0aW9uID09PSAndG9wJyxcclxuICAgICAgICAgIGJvdHRvbTogcG9zaXRpb24gPT09ICdib3R0b20nLFxyXG4gICAgICAgICAgbGVmdDogcG9zaXRpb24gPT09ICdsZWZ0JyxcclxuICAgICAgICAgIHJpZ2h0OiBwb3NpdGlvbiA9PT0gJ3JpZ2h0JyxcclxuICAgICAgICAgICdyaWdodC10b3AnOiBwb3NpdGlvbiA9PT0gJ3JpZ2h0LXRvcCcsXHJcbiAgICAgICAgICAncmlnaHQtYm90dG9tJzogcG9zaXRpb24gPT09ICdyaWdodC1ib3R0b20nLFxyXG4gICAgICAgICAgJ2xlZnQtdG9wJzogcG9zaXRpb24gPT09ICdsZWZ0LXRvcCcsXHJcbiAgICAgICAgICAnbGVmdC1ib3R0b20nOiBwb3NpdGlvbiA9PT0gJ2xlZnQtYm90dG9tJyxcclxuICAgICAgICAgICd3aXRoLXRpbWUnOiB0eXBlRGF0ZSA9PT0gJ2RhdGV0aW1lLWxvY2FsJyB8fCB0eXBlRGF0ZSA9PT0gJ2RhdGV0aW1lJ1xyXG4gICAgICAgIH1cIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG53Yi1kYXRlLXBpY2tlciAjZGF0ZVBpY2tlciAoY2hhbmdlKT1cIm9uQ2hhbmdlRGF0ZSgkZXZlbnQpXCIgW29wdGlvbnNdPVwib3B0aW9uc1wiPlxyXG4gICAgICAgICAgPGlucHV0IFtud2JEYXRlcGlja2VyU3RhcnRdPVwiZGF0ZVBpY2tlclwiIHR5cGU9XCJ0ZXh0XCIgW253YkRhdGVUeXBlXT1cIidkYXRlJ1wiIFt2YWx1ZV09XCJkYXRlU2VsZWN0ZWQ/LnRvSVNPU3RyaW5nKClcIiAvPlxyXG4gICAgICAgIDwvbndiLWRhdGUtcGlja2VyPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3YWMtY2FsZW5kYXJfX2Fic29sdXRlX190aW1lXCIgKm5nSWY9XCJ0eXBlRGF0ZSA9PT0gJ2RhdGV0aW1lLWxvY2FsJyB8fCB0eXBlRGF0ZSA9PT0gJ2RhdGV0aW1lJ1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIndhYy1jYWxlbmRhcl9fYWJzb2x1dGVfX3RpbWVfX3dyYXBwZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndhYy1jYWxlbmRhcl9fYWJzb2x1dGVfX3RpbWVfX3dyYXBwZXJfX2hvdXJzXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndhYy1jYWxlbmRhcl9fYWJzb2x1dGVfX3RpbWVfX3dyYXBwZXJfX2hvdXJzX19sZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwid2FjLWNhbGVuZGFyX19hYnNvbHV0ZV9fdGltZV9fd3JhcHBlcl9faG91cnNfX2J0blwiIChjbGljayk9XCJpbmNyZW1lbnRIb3VycygkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBsdXNcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ3YWMtY2FsZW5kYXJfX2Fic29sdXRlX190aW1lX193cmFwcGVyX19ob3Vyc19fYnRuXCIgKGNsaWNrKT1cImRlY3JlbWVudEhvdXJzKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtbWludXNcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2FjLWNhbGVuZGFyX19hYnNvbHV0ZV9fdGltZV9fd3JhcHBlcl9faG91cnNfX3JpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgI2hvdXJzIHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09XCJjYWxlbmRhckhvdXJzXCIgW3dhY09ubHlOdW1iZXJdPVwidHJ1ZVwiLz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3YWMtY2FsZW5kYXJfX2Fic29sdXRlX190aW1lX193cmFwcGVyX19taW51dGVzXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndhYy1jYWxlbmRhcl9fYWJzb2x1dGVfX3RpbWVfX3dyYXBwZXJfX21pbnV0ZXNfX2xlZnRcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCAjbWludXRlcyB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwiY2FsZW5kYXJNaW51dGVzXCIgW3dhY09ubHlOdW1iZXJdPVwidHJ1ZVwiLz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2FjLWNhbGVuZGFyX19hYnNvbHV0ZV9fdGltZV9fd3JhcHBlcl9fbWludXRlc19fcmlnaHRcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ3YWMtY2FsZW5kYXJfX2Fic29sdXRlX190aW1lX193cmFwcGVyX19taW51dGVzX19idG5cIiAoY2xpY2spPVwiaW5jcmVtZW50TWludXRlcygkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBsdXNcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ3YWMtY2FsZW5kYXJfX2Fic29sdXRlX190aW1lX193cmFwcGVyX19taW51dGVzX19idG5cIiAoY2xpY2spPVwiZGVjcmVtZW50c01pbnV0ZXMoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1taW51c1wiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvd2FjLW9wdGlvbmFsLWRpc2FibGUtY29udGFpbmVyPlxyXG4gIDxwIGNsYXNzPVwid2FjLWNhbGVuZGFyX19lbmRMYWJlbFwiICpuZ0lmPVwidHlwZSA9PT0gJ2VkaXQnXCI+e3sgZW5kTGFiZWwgfX08L3A+XHJcbjwvZGl2PlxyXG4iXX0=
256
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2NhbGVuZGFyL2NhbGVuZGFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUE0Qix1QkFBdUIsRUFBRSxTQUFTLEVBQWMsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEssT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXpFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDOzs7Ozs7Ozs7O0FBaUIzRSxNQUFNLE9BQU8saUJBQWlCO0lBa0I1QixJQUNJLE9BQU8sQ0FBQyxPQUF1QztRQUNqRCxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztRQUN4QixJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxFQUFFO1lBQ2xDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUM1QztJQUNILENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQVdELElBQ0ksWUFBWSxDQUFDLFlBQWtCO1FBQ2pDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQixPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksSUFBSSxDQUFD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QWhCLEtBQUs7Z0JBRUksVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgRXZlbnRFbWl0dGVyLCBPdXRwdXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBOd2JEYXRlUGlja2VyQ29tcG9uZW50LCBOd2JEYXRlUGlja2VyRXZlbnQsIE53YkRhdGVQaWNrZXJPcHRpb25zIH0gZnJvbSAnQHdpemlzaG9wL25nLXdpemktYnVsbWEnO1xyXG5pbXBvcnQgeyBvcGFjaXR5QW5pbWF0aW9uIH0gZnJvbSAnLi4vLi4vYW5pbWF0aW9ucy9zaG93L29wYWNpdHkuYW5pbWF0aW9uJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnd2FjLWNhbGVuZGFyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY2FsZW5kYXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgdXNlRXhpc3Rpbmc6IENhbGVuZGFyQ29tcG9uZW50LFxyXG4gICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgfSxcclxuICAgIERhdGVQaXBlXHJcbiAgXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIGFuaW1hdGlvbnM6IFtvcGFjaXR5QW5pbWF0aW9uXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2FsZW5kYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuICAvLyEgQXQgdGhlIG1vbWVudCwgdGhlIGNvbXBvbmVudCBoYW5kbGUgb25seSBvbmUgZGF0ZSAobm90IGEgcmFuZ2UpXHJcbiAgQFZpZXdDaGlsZCgnbWludXRlcycpIG1pbnV0ZXM6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnaG91cnMnKSBob3VyczogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdkYXRlUGlja2VyJykgZGF0ZVBpY2tlcjogTndiRGF0ZVBpY2tlckNvbXBvbmVudDtcclxuXHJcbiAgQElucHV0KClcclxuICBsYWJlbDogc3RyaW5nIHwgbnVsbDsgLy8gdG9kbyB1c2UgbmctY29udGVudCBpbnN0ZWFkXHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgYm9sZExhYmVsOiBib29sZWFuID0gZmFsc2U7IC8vIHRvZG8gcmVtb3ZlIHdoZW4gbGFiZWwgd2lsbCBiZSBhIG5nLWNvbnRlbnRcclxuXHJcbiAgQElucHV0KClcclxuICB0eXBlOiAnaW5wdXQnIHwgJ2VkaXQnIHwgJ3NlbGVjdCcgPSAnaW5wdXQnO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGlzUmFuZ2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgb3B0aW9ucyhvcHRpb25zOiBSZWFkb25seTxOd2JEYXRlUGlja2VyT3B0aW9ucz4pIHtcclxuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xyXG4gICAgaWYgKHRoaXMuaXNCdWxtYURhdGVQaWNrZXJFeGlzdHMoKSkge1xyXG4gICAgICB0aGlzLnVwZGF0ZUJ1bG1hRGF0ZVBpY2tlck9wdGlvbnMob3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgb3B0aW9ucygpIDogUmVhZG9ubHk8TndiRGF0ZVBpY2tlck9wdGlvbnM+IHtcclxuICAgIHJldHVybiB0aGlzLl9vcHRpb25zO1xyXG4gIH1cclxuXHJcbiAgX29wdGlvbnM6IFJlYWRvbmx5PE53YkRhdGVQaWNrZXJPcHRpb25zPiAgPSB7XHJcbiAgICBkaXNwbGF5TW9kZTogJ2lubGluZScsXHJcbiAgICBzaG93SGVhZGVyOiBmYWxzZSxcclxuICAgIHNob3dGb290ZXI6IHRydWUsXHJcbiAgfTtcclxuXHJcbiAgQElucHV0KClcclxuICBwb3NpdGlvbiA9ICdib3R0b20nO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBkYXRlU2VsZWN0ZWQoZGF0ZVNlbGVjdGVkOiBEYXRlKSB7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLl9kYXRlU2VsZWN0ZWQgPSBuZXcgRGF0ZShkYXRlU2VsZWN0ZWQpOyAvLyB0cmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb24gZm9yIHB1cmUgcGlwZVxyXG4gIH1cclxuICBnZXQgZGF0ZVNlbGVjdGVkKCkgOiBEYXRlIHtcclxuICAgIHJldHVybiB0aGlzLl9kYXRlU2VsZWN0ZWQ7XHJcbiAgfVxyXG4gIF9kYXRlU2VsZWN0ZWQ6IERhdGU7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGRhdGVTZWxlY3RlZEVuZChkYXRlU2VsZWN0ZWQ6IERhdGUpIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuX2RhdGVTZWxlY3RlZEVuZCA9IG5ldyBEYXRlKGRhdGVTZWxlY3RlZCk7IC8vIHRyaWdnZXIgY2hhbmdlIGRldGVjdGlvbiBmb3IgcHVyZSBwaXBlXHJcbiAgfVxyXG4gIGdldCBkYXRlU2VsZWN0ZWRFbmQoKSA6IERhdGUge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RhdGVTZWxlY3RlZEVuZDtcclxuICB9XHJcbiAgX2RhdGVTZWxlY3RlZEVuZDogRGF0ZTtcclxuXHJcbiAgQE91dHB1dCgpIGRhdGVTZWxlY3RlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgQElucHV0KClcclxuICB0eXBlRGF0ZTogJ2RhdGV0aW1lJyB8ICdkYXRldGltZS1sb2NhbCcgfCAnZGF0ZScgPSAnZGF0ZXRpbWUtbG9jYWwnO1xyXG4gIEBJbnB1dCgpXHJcbiAgbm9NYXJnaW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcclxuXHJcbiAgQE91dHB1dCgpIGNoYW5nZURhdGEgPSBuZXcgRXZlbnRFbWl0dGVyPHsgc3RhcnREYXRlOiBEYXRlOyBlbmREYXRlOiBEYXRlOyB9PigpO1xyXG4gIG9wZW4gPSBmYWxzZTtcclxuICBzdGFydExhYmVsID0gJyc7XHJcbiAgZW5kTGFiZWwgPSAnJztcclxuXHJcbiAgc2V0IGNhbGVuZGFyTWludXRlcyhjYWxlbmRhck1pbnV0ZXM6IHN0cmluZykge1xyXG4gICAgaWYgKCF0aGlzLmRhdGVTZWxlY3RlZCkge1xyXG4gICAgICB0aGlzLmRhdGVTZWxlY3RlZCA9IG5ldyBEYXRlKCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBtaW51dGVzID0gdGhpcy5mb3JtYXRUaW1lKGNhbGVuZGFyTWludXRlcywgMCwgNTkpO1xyXG4gICAgdGhpcy5kYXRlU2VsZWN0ZWQuc2V0TWludXRlcyhtaW51dGVzKTtcclxuXHJcbiAgICB0aGlzLmRhdGVTZWxlY3RlZCA9IHRoaXMuZGF0ZVNlbGVjdGVkOyAvLyB0cmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb25cclxuICAgIHRoaXMubWludXRlcy5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5kYXRlU2VsZWN0ZWQsICdtbScpOyAvLyBmb3JjZSB0byB1cGRhdGUgdGhlIGlucHV0IHZhbHVlXHJcbiAgICB0aGlzLnRyaWdnZXJEYXRlU2VsZWN0ZWRDaGFuZ2UoKTtcclxuICB9XHJcblxyXG4gIGdldCBjYWxlbmRhck1pbnV0ZXMoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh0aGlzLmRhdGVTZWxlY3RlZCA/PyBuZXcgRGF0ZSgpLCAnbW0nKTtcclxuICB9XHJcblxyXG4gIHNldCBjYWxlbmRhckhvdXJzKGNhbGVuZGFySG91cnM6IHN0cmluZykge1xyXG4gICAgaWYgKCF0aGlzLmRhdGVTZWxlY3RlZCkge1xyXG4gICAgICB0aGlzLmRhdGVTZWxlY3RlZCA9IG5ldyBEYXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaG91cnMgPSB0aGlzLmZvcm1hdFRpbWUoY2FsZW5kYXJIb3VycywgMCwgMjMpO1xyXG5cclxuICAgIHRoaXMuZGF0ZVNlbGVjdGVkLnNldEhvdXJzKGhvdXJzKTtcclxuICAgIHRoaXMuZGF0ZVNlbGVjdGVkID0gdGhpcy5kYXRlU2VsZWN0ZWQ7IC8vIHRyaWdnZXIgY2hhbmdlIGRldGVjdGlvblxyXG4gICAgdGhpcy5ob3Vycy5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5kYXRlU2VsZWN0ZWQsICdISCcpOyAvLyBmb3JjZSB0byB1cGRhdGUgdGhlIGlucHV0IHZhbHVlXHJcbiAgICB0aGlzLnRyaWdnZXJEYXRlU2VsZWN0ZWRDaGFuZ2UoKTtcclxuICB9XHJcblxyXG4gIGdldCBjYWxlbmRhckhvdXJzKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5kYXRlU2VsZWN0ZWQgPz8gbmV3IERhdGUoKSwgJ0hIJyk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZSkge31cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXMubGFiZWwgfHwgY2hhbmdlcy50eXBlKSB7XHJcbiAgICAgIHRoaXMuc2V0Q2FsZW5kYXJMYWJlbCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2VEYXRlKHNlbGVjdGVkRGF0ZXM6IE53YkRhdGVQaWNrZXJFdmVudCkge1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5kYXRlU2VsZWN0ZWQpIHtcclxuICAgICAgdGhpcy5kYXRlU2VsZWN0ZWQgPSBuZXcgRGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdGVkRGF0ZXMuc3RhcnREYXRlLnNldEhvdXJzKHRoaXMuZGF0ZVNlbGVjdGVkLmdldEhvdXJzKCkpO1xyXG4gICAgc2VsZWN0ZWREYXRlcy5zdGFydERhdGUuc2V0TWludXRlcyh0aGlzLmRhdGVTZWxlY3RlZC5nZXRNaW51dGVzKCkpO1xyXG5cclxuICAgIHRoaXMuZGF0ZVNlbGVjdGVkID0gc2VsZWN0ZWREYXRlcy5zdGFydERhdGU7XHJcblxyXG4gICAgaWYgKHNlbGVjdGVkRGF0ZXMuZW5kRGF0ZSkge1xyXG4gICAgICBzZWxlY3RlZERhdGVzLmVuZERhdGUuc2V0TWludXRlcyh0aGlzLmRhdGVTZWxlY3RlZEVuZC5nZXRNaW51dGVzKCkpO1xyXG4gICAgICBzZWxlY3RlZERhdGVzLmVuZERhdGUuc2V0TWludXRlcyh0aGlzLmRhdGVTZWxlY3RlZEVuZC5nZXRNaW51dGVzKCkpO1xyXG4gICAgICB0aGlzLmRhdGVTZWxlY3RlZEVuZCA9IHNlbGVjdGVkRGF0ZXMuZW5kRGF0ZTtcclxuICAgIH1cclxuICAgIHRoaXMudHJpZ2dlckRhdGVTZWxlY3RlZENoYW5nZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0cmlnZ2VyRGF0ZVNlbGVjdGVkQ2hhbmdlKCkge1xyXG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLmRhdGVTZWxlY3RlZCk7XHJcbiAgICB0aGlzLmRhdGVTZWxlY3RlZENoYW5nZS5lbWl0KHRoaXMuZGF0ZVNlbGVjdGVkKTtcclxuICAgIHRoaXMudHJpZ2dlckNoYW5nZSh7XHJcbiAgICAgIHN0YXJ0RGF0ZTogdGhpcy5kYXRlU2VsZWN0ZWQsXHJcbiAgICAgIGVuZERhdGU6IHRoaXMuZGF0ZVNlbGVjdGVkRW5kXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJDaGFuZ2UoZXZlbnQ6IHsgc3RhcnREYXRlOiBEYXRlOyBlbmREYXRlOiBEYXRlOyB9KSB7XHJcbiAgICB0aGlzLmNoYW5nZURhdGEuZW1pdChldmVudCk7XHJcbiAgfVxyXG5cclxuICBvcGVuQ2FsZW5kYXIodmFsdWUgPSBudWxsKSB7XHJcblxyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh2YWx1ZSA9PT0gJ2Nsb3NlJykge1xyXG4gICAgICBpZiAodGhpcy5vcGVuKSB7XHJcbiAgICAgICAgdGhpcy5vcGVuID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5vblRvdWNoKCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMub3BlbiA9ICF0aGlzLm9wZW47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldENhbGVuZGFyTGFiZWwoKSB7XHJcbiAgICBpZiAodGhpcy50eXBlID09PSAnZWRpdCcgJiYgdGhpcy5sYWJlbCkge1xyXG4gICAgICBjb25zdCBzcGxpdExhYmVsID0gdGhpcy5sYWJlbC5zcGxpdCgne3h9Jyk7XHJcbiAgICAgIGlmIChzcGxpdExhYmVsLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICB0aGlzLnN0YXJ0TGFiZWwgPSBzcGxpdExhYmVsWzBdO1xyXG4gICAgICAgIHRoaXMuZW5kTGFiZWwgPSBzcGxpdExhYmVsWzFdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc3RhcnRMYWJlbCA9IHRoaXMubGFiZWw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGluY3JlbWVudE1pbnV0ZXMoJGV2ZW50OiBFdmVudCkge1xyXG4gICAgdGhpcy5jYWxlbmRhck1pbnV0ZXMgPSBwYXJzZUludCh0aGlzLmNhbGVuZGFyTWludXRlcywgMTApICsgMSArICcnO1xyXG4gICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgfVxyXG5cclxuICBkZWNyZW1lbnRzTWludXRlcygkZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICB0aGlzLmNhbGVuZGFyTWludXRlcyA9IHBhcnNlSW50KHRoaXMuY2FsZW5kYXJNaW51dGVzLCAxMCkgLSAxICsgJyc7XHJcbiAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICB9XHJcblxyXG4gIGluY3JlbWVudEhvdXJzKCRldmVudDogRXZlbnQpIHtcclxuICAgIHRoaXMuY2FsZW5kYXJIb3VycyA9IHBhcnNlSW50KHRoaXMuY2FsZW5kYXJIb3VycywgMTApICsgMSArICcnO1xyXG4gICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgfVxyXG5cclxuICBkZWNyZW1lbnRIb3VycygkZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICB0aGlzLmNhbGVuZGFySG91cnMgPSBwYXJzZUludCh0aGlzLmNhbGVuZGFySG91cnMsIDEwKSAtIDEgKyAnJztcclxuICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgIEVuc3VyZSB0aGF0IHRoZSBpbnB1dCB2YWx1ZSBpcyBhIG51bWJlciBhbmQgdGhhdCBpdCBpcyBiZXR3ZWVuIG1pbiBhbmQgbWF4XHJcbiAgKi9cclxuICBwcml2YXRlIGZvcm1hdFRpbWUodGltZTogc3RyaW5nIHwgbnVtYmVyLCBtaW4gPSAwLCBtYXggPSA1OSkge1xyXG4gICAgbGV0IHRpbWVOdW1iZXIgPSB0eXBlb2YgdGltZSA9PT0gJ3N0cmluZycgPyBwYXJzZUludCh0aW1lLCAxMCkgOiB0aW1lO1xyXG4gICAgdGltZU51bWJlciA9IHRpbWVOdW1iZXIgPiBtYXggPyBtaW4gOiB0aW1lTnVtYmVyO1xyXG4gICAgdGltZU51bWJlciA9IHRpbWVOdW1iZXIgPCBtaW4gPyBtYXggOiB0aW1lTnVtYmVyO1xyXG4gICAgdGltZU51bWJlciA9IHBhcnNlSW50KCgnJyArIHRpbWVOdW1iZXIpLnNsaWNlKC0yKSk7IC8vIGtlZXBzIG9ubHkgdGhlIGxhc3QgMiBkaWdpdHNcclxuICAgIHJldHVybiB0aW1lTnVtYmVyO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVCdWxtYURhdGVQaWNrZXJPcHRpb25zKG9wdGlvbnM6IFJlYWRvbmx5PE53YkRhdGVQaWNrZXJPcHRpb25zPikge1xyXG4gICAgY29uc3QgYnVsbWFDYWxlbmRhckRhdGVQaWNrZXIgPSB0aGlzLmRhdGVQaWNrZXJbJ2J1bG1hQ2FsZW5kYXInXS5kYXRlUGlja2VyO1xyXG4gICAgYnVsbWFDYWxlbmRhckRhdGVQaWNrZXIubWluID0gb3B0aW9ucy5taW5EYXRlO1xyXG4gICAgYnVsbWFDYWxlbmRhckRhdGVQaWNrZXIubWF4ID0gb3B0aW9ucy5tYXhEYXRlO1xyXG4gICAgYnVsbWFDYWxlbmRhckRhdGVQaWNrZXIucmVmcmVzaCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc0J1bG1hRGF0ZVBpY2tlckV4aXN0cygpIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGVQaWNrZXIgJiYgdGhpcy5kYXRlUGlja2VyWydidWxtYUNhbGVuZGFyJ10gJiYgdGhpcy5kYXRlUGlja2VyWydidWxtYUNhbGVuZGFyJ10uZGF0ZVBpY2tlcjtcclxuICB9XHJcblxyXG4gIC8vIENvbnRyb2xWYWx1ZUFjY2Vzc29yIG1ldGhvZHNcclxuXHJcbiAgb25DaGFuZ2U6ICh2YWx1ZTogRGF0ZSkgPT4gdm9pZCA9ICgpID0+IHt9O1xyXG5cclxuICBvblRvdWNoOiAoKSA9PiB2b2lkID0gKCkgPT4ge307XHJcblxyXG4gIHdyaXRlVmFsdWUoZGF0ZTogRGF0ZSk6IHZvaWQge1xyXG4gICAgaWYgKCFkYXRlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuZGF0ZVNlbGVjdGVkID0gZGF0ZTtcclxuICB9XHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KXtcclxuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICB9XHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSl7XHJcbiAgICAgIHRoaXMub25Ub3VjaCA9IGZuO1xyXG4gIH1cclxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2XHJcbiAgY2xhc3M9XCJ3YWMtY2FsZW5kYXJcIlxyXG4gIFtuZ0NsYXNzXT1cIntcclxuICAgICd3YWMtY2FsZW5kYXItLWlucHV0JzogdHlwZSA9PT0gJ2lucHV0JyxcclxuICAgICd3YWMtY2FsZW5kYXItLW9ubHlEYXRlJzogdHlwZURhdGUgPT09ICdkYXRlJyxcclxuICAgICd3YWMtY2FsZW5kYXItLWVkaXQnOiB0eXBlID09PSAnZWRpdCcsXHJcbiAgICAnd2FjLWNhbGVuZGFyLS1zZWxlY3QnOiB0eXBlID09PSAnc2VsZWN0JyxcclxuICAgICd3YWMtY2FsZW5kYXItLW5vLW1hcmdpbic6IG5vTWFyZ2luLFxyXG4gICAgJ3dhYy1jYWxlbmRhci0tb3Blbic6IG9wZW4sXHJcbiAgICAnd2FjLWNhbGVuZGFyLS1yYW5nZSc6IGlzUmFuZ2VcclxuICB9XCJcclxuICBbekluZGV4VG9nZ2xlXT1cIm9wZW5cIlxyXG4+XHJcbiAgPHAgW2NsYXNzXT1cIid3YWMtY2FsZW5kYXJfX2xhYmVsJyArIChib2xkTGFiZWwgPyAnIGJvbGQnIDogJycpXCIgKm5nSWY9XCJsYWJlbCAmJiAodHlwZSA9PT0gJ2lucHV0JyB8fCB0eXBlID09PSAnc2VsZWN0JylcIiAoY2xpY2spPVwib3BlbkNhbGVuZGFyKClcIj57eyBsYWJlbCB9fTwvcD5cclxuICA8cCBjbGFzcz1cIndhYy1jYWxlbmRhcl9fc3RhcnRMYWJlbFwiICpuZ0lmPVwidHlwZSA9PT0gJ2VkaXQnXCI+e3sgc3RhcnRMYWJlbCB9fTwvcD5cclxuICA8d2FjLW9wdGlvbmFsLWRpc2FibGUtY29udGFpbmVyIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIndhYy1jYWxlbmRhcl9fYXV0b0hpZGVcIiB3ekF1dG9IaWRlIChjbGlja091dHNpZGUpPVwib3BlbkNhbGVuZGFyKCdjbG9zZScpXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ3YWMtY2FsZW5kYXJfX3dyYXBwZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwid2FjLWNhbGVuZGFyX193cmFwcGVyX19pbnB1dFwiICpuZ0lmPVwidHlwZSA9PT0gJ2lucHV0J1wiIChjbGljayk9XCJvcGVuQ2FsZW5kYXIoKVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIndhYy1jYWxlbmRhcl9fd3JhcHBlcl9faW5wdXRfX2ljb25cIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXIgZmEtY2FsZW5kYXItYWx0XCI+PC9pPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwid2FjLWNhbGVuZGFyX193cmFwcGVyX19pbnB1dF9fZGF0ZVwiPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImRhdGVTZWxlY3RlZFwiIEBvcGFjaXR5QW5pbWF0aW9uPnt7IGRhdGVTZWxlY3RlZCB8IGRhdGU6ICdkZC9NTS95eXl5J319PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBsYWNlaG9sZGVyLWRhdGVcIiAqbmdJZj1cIiFkYXRlU2VsZWN0ZWRcIiBAb3BhY2l0eUFuaW1hdGlvbj57eyAnd2FjLkRhdGUuUGxhY2VIb2xkZXIuZGQvbW0veXl5eScgfCB0cmFuc2xhdGUgfX08L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3YWMtY2FsZW5kYXJfX3dyYXBwZXJfX2lucHV0X190aW1lXCI+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZGF0ZVNlbGVjdGVkXCIgQG9wYWNpdHlBbmltYXRpb24+e3sgZGF0ZVNlbGVjdGVkIHwgZGF0ZTogJ0hIOm1tJyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwbGFjZWhvbGRlci1kYXRlXCIgKm5nSWY9XCIhZGF0ZVNlbGVjdGVkXCIgQG9wYWNpdHlBbmltYXRpb24+e3sgJ3dhYy5EYXRlLlBsYWNlSG9sZGVyLkhIOm1tJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzUmFuZ2VcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndhYy1jYWxlbmRhcl9fd3JhcHBlcl9faW5wdXRfX3NlcGFyYXRvclwiPjxpIGNsYXNzPVwiZmEtc29saWQgZmEtY2hldnJvbi1yaWdodFwiPjwvaT48L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndhYy1jYWxlbmRhcl9fd3JhcHBlcl9faW5wdXRfX2RhdGVcIj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImRhdGVTZWxlY3RlZEVuZFwiIEBvcGFjaXR5QW5pbWF0aW9uPnt7IGRhdGVTZWxlY3RlZEVuZCB8IGRhdGU6ICdkZC9NTS95eXl5J319PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGxhY2Vob2xkZXItZGF0ZVwiICpuZ0lmPVwiIWRhdGVTZWxlY3RlZEVuZFwiIEBvcGFjaXR5QW5pbWF0aW9uPnt7ICd3YWMuRGF0ZS5QbGFjZUhvbGRlci5kZC9tbS95eXl5JyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3YWMtY2FsZW5kYXJfX3dyYXBwZXJfX2lucHV0X190aW1lXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJkYXRlU2VsZWN0ZWRFbmRcIiBAb3BhY2l0eUFuaW1hdGlvbj57eyBkYXRlU2VsZWN0ZWRFbmQgfCBkYXRlOiAnSEg6bW0nIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGxhY2Vob2xkZXItZGF0ZVwiICpuZ0lmPVwiIWRhdGVTZWxlY3RlZEVuZFwiIEBvcGFjaXR5QW5pbWF0aW9uPnt7ICd3YWMuRGF0ZS5QbGFjZUhvbGRlci5ISDptbScgfCB0cmFuc2xhdGUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIndhYy1jYWxlbmRhcl9fd3JhcHBlcl9fZWRpdEluUGxhY2VcIiAqbmdJZj1cInR5cGUgPT09ICdlZGl0J1wiIChjbGljayk9XCJvcGVuQ2FsZW5kYXIoKVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIndhYy1jYWxlbmRhcl9fd3JhcHBlcl9fZWRpdEluUGxhY2VfX2ljb25cIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYWwgZmEtY2FsZW5kYXItYWx0XCI+PC9pPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwid2FjLWNhbGVuZGFyX193cmFwcGVyX19lZGl0SW5QbGFjZV9fZGF0ZVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2FjLWNhbGVuZGFyX193cmFwcGVyX19pbnB1dF9fdGltZVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZGF0ZVNlbGVjdGVkXCIgQG9wYWNpdHlBbmltYXRpb24+e3sgZGF0ZVNlbGVjdGVkIHwgZGF0ZTogJ2RkL01NL3l5eXkgSEg6bW0nIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGxhY2Vob2xkZXItZGF0ZVwiICpuZ0lmPVwiIWRhdGVTZWxlY3RlZFwiIEBvcGFjaXR5QW5pbWF0aW9uPnt7ICd3YWMuRGF0ZS5QbGFjZUhvbGRlci5kZC9NTS95eXl5X0hIOm1tJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwid2FjLWNhbGVuZGFyX193cmFwcGVyX19zZWxlY3RcIiAqbmdJZj1cInR5cGUgPT09ICdzZWxlY3QnXCIgKGNsaWNrKT1cIm9wZW5DYWxlbmRhcigpXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwid2FjLWNhbGVuZGFyX193cmFwcGVyX19zZWxlY3RfX2ljb25cIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYWwgZmEtY2FsZW5kYXItYWx0XCI+PC9pPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwid2FjLWNhbGVuZGFyX193cmFwcGVyX19zZWxlY3RfX2RhdGVcIj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJkYXRlU2VsZWN0ZWRcIiBAb3BhY2l0eUFuaW1hdGlvbj57eyBkYXRlU2VsZWN0ZWQgfCBkYXRlOiAnZGQvTU0veXl5eSBISDptbScgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGxhY2Vob2xkZXItZGF0ZVwiICpuZ0lmPVwiIWRhdGVTZWxlY3RlZFwiIEBvcGFjaXR5QW5pbWF0aW9uPnt7ICd3YWMuRGF0ZS5QbGFjZUhvbGRlci5kZC9NTS95eXl5X0hIOm1tJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwid2FjLWNhbGVuZGFyX19hYnNvbHV0ZVwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgdG9wOiBwb3NpdGlvbiA9PT0gJ3RvcCcsXHJcbiAgICAgICAgICBib3R0b206IHBvc2l0aW9uID09PSAnYm90dG9tJyxcclxuICAgICAgICAgIGxlZnQ6IHBvc2l0aW9uID09PSAnbGVmdCcsXHJcbiAgICAgICAgICByaWdodDogcG9zaXRpb24gPT09ICdyaWdodCcsXHJcbiAgICAgICAgICAncmlnaHQtdG9wJzogcG9zaXRpb24gPT09ICdyaWdodC10b3AnLFxyXG4gICAgICAgICAgJ3JpZ2h0LWJvdHRvbSc6IHBvc2l0aW9uID09PSAncmlnaHQtYm90dG9tJyxcclxuICAgICAgICAgICdsZWZ0LXRvcCc6IHBvc2l0aW9uID09PSAnbGVmdC10b3AnLFxyXG4gICAgICAgICAgJ2xlZnQtYm90dG9tJzogcG9zaXRpb24gPT09ICdsZWZ0LWJvdHRvbScsXHJcbiAgICAgICAgICAnd2l0aC10aW1lJzogdHlwZURhdGUgPT09ICdkYXRldGltZS1sb2NhbCcgfHwgdHlwZURhdGUgPT09ICdkYXRldGltZSdcclxuICAgICAgICB9XCJcclxuICAgICAgPlxyXG5cclxuICAgICAgICA8IS0tIFNvbG8gbndiRGF0ZVBpY2tlciAtLT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzUmFuZ2VcIj5cclxuICAgICAgICAgIDxud2ItZGF0ZS1waWNrZXIgI2RhdGVQaWNrZXIgKGNoYW5nZSk9XCJvbkNoYW5nZURhdGUoJGV2ZW50KVwiIFtvcHRpb25zXT1cIm9wdGlvbnNcIj5cclxuICAgICAgICAgICAgPGlucHV0IFtud2JEYXRlcGlja2VyU3RhcnRdPVwiZGF0ZVBpY2tlclwiIHR5cGU9XCJ0ZXh0XCIgW253YkRhdGVUeXBlXT1cIidkYXRlJ1wiIFt2YWx1ZV09XCJkYXRlU2VsZWN0ZWQ/LnRvSVNPU3RyaW5nKClcIiAvPlxyXG4gICAgICAgICAgPC9ud2ItZGF0ZS1waWNrZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDwhLS0gUmFuZ2UgbndiRGF0ZVBpY2tlciAtLT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNSYW5nZVwiPlxyXG4gICAgICAgICAgPG53Yi1kYXRlLXBpY2tlciAjZGF0ZVBpY2tlciAoY2hhbmdlKT1cIm9uQ2hhbmdlRGF0ZSgkZXZlbnQpXCIgW29wdGlvbnNdPVwib3B0aW9uc1wiPlxyXG4gICAgICAgICAgICA8aW5wdXQgW253YkRhdGVwaWNrZXJTdGFydF09XCJkYXRlUGlja2VyXCIgdHlwZT1cInRleHRcIiBbbndiRGF0ZVR5cGVdPVwiJ2RhdGUnXCIgW3ZhbHVlXT1cImRhdGVTZWxlY3RlZD8udG9JU09TdHJpbmcoKVwiIC8+XHJcbiAgICAgICAgICAgIDxpbnB1dCBbbndiRGF0ZXBpY2tlckVuZF09XCJkYXRlUGlja2VyXCIgdHlwZT1cInRleHRcIiBbbndiRGF0ZVR5cGVdPVwiJ2RhdGUnXCIgW3ZhbHVlXT1cImRhdGVTZWxlY3RlZEVuZD8udG9JU09TdHJpbmcoKVwiIC8+XHJcbiAgICAgICAgICA8L253Yi1kYXRlLXBpY2tlcj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwid2FjLWNhbGVuZGFyX19hYnNvbHV0ZV9fdGltZVwiICpuZ0lmPVwidHlwZURhdGUgPT09ICdkYXRldGltZS1sb2NhbCcgfHwgdHlwZURhdGUgPT09ICdkYXRldGltZSdcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3YWMtY2FsZW5kYXJfX2Fic29sdXRlX190aW1lX193cmFwcGVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3YWMtY2FsZW5kYXJfX2Fic29sdXRlX190aW1lX193cmFwcGVyX19ob3Vyc1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3YWMtY2FsZW5kYXJfX2Fic29sdXRlX190aW1lX193cmFwcGVyX19ob3Vyc19fbGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIndhYy1jYWxlbmRhcl9fYWJzb2x1dGVfX3RpbWVfX3dyYXBwZXJfX2hvdXJzX19idG5cIiAoY2xpY2spPVwiaW5jcmVtZW50SG91cnMoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1wbHVzXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwid2FjLWNhbGVuZGFyX19hYnNvbHV0ZV9fdGltZV9fd3JhcHBlcl9faG91cnNfX2J0blwiIChjbGljayk9XCJkZWNyZW1lbnRIb3VycygkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLW1pbnVzXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndhYy1jYWxlbmRhcl9fYWJzb2x1dGVfX3RpbWVfX3dyYXBwZXJfX2hvdXJzX19yaWdodFwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0ICNob3VycyB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwiY2FsZW5kYXJIb3Vyc1wiIFt3YWNPbmx5TnVtYmVyXT1cInRydWVcIi8+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2FjLWNhbGVuZGFyX19hYnNvbHV0ZV9fdGltZV9fd3JhcHBlcl9fbWludXRlc1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3YWMtY2FsZW5kYXJfX2Fic29sdXRlX190aW1lX193cmFwcGVyX19taW51dGVzX19sZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgI21pbnV0ZXMgdHlwZT1cInRleHRcIiBbKG5nTW9kZWwpXT1cImNhbGVuZGFyTWludXRlc1wiIFt3YWNPbmx5TnVtYmVyXT1cInRydWVcIi8+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndhYy1jYWxlbmRhcl9fYWJzb2x1dGVfX3RpbWVfX3dyYXBwZXJfX21pbnV0ZXNfX3JpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwid2FjLWNhbGVuZGFyX19hYnNvbHV0ZV9fdGltZV9fd3JhcHBlcl9fbWludXRlc19fYnRuXCIgKGNsaWNrKT1cImluY3JlbWVudE1pbnV0ZXMoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1wbHVzXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwid2FjLWNhbGVuZGFyX19hYnNvbHV0ZV9fdGltZV9fd3JhcHBlcl9fbWludXRlc19fYnRuXCIgKGNsaWNrKT1cImRlY3JlbWVudHNNaW51dGVzKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtbWludXNcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L3dhYy1vcHRpb25hbC1kaXNhYmxlLWNvbnRhaW5lcj5cclxuICA8cCBjbGFzcz1cIndhYy1jYWxlbmRhcl9fZW5kTGFiZWxcIiAqbmdJZj1cInR5cGUgPT09ICdlZGl0J1wiPnt7IGVuZExhYmVsIH19PC9wPlxyXG48L2Rpdj5cclxuIl19
@@ -36,10 +36,10 @@ export class MenuTileComponent {
36
36
  }
37
37
  }
38
38
  MenuTileComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: MenuTileComponent, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Component });
39
- MenuTileComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.5", type: MenuTileComponent, selector: "wac-menu-tile", inputs: { col: "col", iconPath: "iconPath", title: "title", description: "description", new: "new", newElement: "newElement", url: "url", urlQueryParams: "urlQueryParams", external: "external" }, host: { properties: { "class": "this.hostClasses" } }, ngImport: i0, template: "<div class=\"wac-menu-tile__new\" *ngIf=\"newElement\">\r\n <wac-text noMargin><i class=\"fa-regular fa-wand-magic-sparkles\"></i>&nbsp;{{ new }}</wac-text>\r\n</div>\r\n<a class=\"wac-menu-tile__content\" *ngIf=\"url && url.startsWith('http')\" [href]=\"url\" [target]=\"external ? '_blank' : '_self'\">\r\n <img [src]=\"iconPath\" />\r\n <div class=\"w-text\">\r\n <wac-text noMargin>{{ title }}</wac-text>\r\n <wac-text *ngIf=\"description\" noMargin [textClass]=\"'grey'\">{{ description }}</wac-text>\r\n </div>\r\n</a>\r\n<a class=\"wac-menu-tile__content\" *ngIf=\"url && !url.startsWith('http')\" (click)=\"navigate()\">\r\n <img [src]=\"iconPath\" />\r\n <div class=\"w-text\">\r\n <wac-text noMargin>{{ title }}</wac-text>\r\n <wac-text *ngIf=\"description\" noMargin [textClass]=\"'grey'\">{{ description }}</wac-text>\r\n </div>\r\n</a>\r\n<div *ngIf=\"!url\" class=\"wac-menu-tile__content\">\r\n <img [src]=\"iconPath\" />\r\n <div class=\"w-text\">\r\n <wac-text noMargin>{{ title }}</wac-text>\r\n <wac-text *ngIf=\"description\" noMargin [textClass]=\"'grey'\">{{ description }}</wac-text>\r\n </div>\r\n</div>\r\n", styles: [":host{position:relative}:host.wac-menu-tile--col-1{grid-column:span 1}:host.wac-menu-tile--col-2{grid-column:span 2}:host.wac-menu-tile--col-3{grid-column:span 3}:host.wac-menu-tile--col-4{grid-column:span 4}:host.wac-menu-tile--col-5{grid-column:span 5}:host.wac-menu-tile--col-6{grid-column:span 6}:host.wac-menu-tile--col-7{grid-column:span 7}:host.wac-menu-tile--col-8{grid-column:span 8}:host.wac-menu-tile--col-9{grid-column:span 9}:host.wac-menu-tile--col-10{grid-column:span 10}:host.wac-menu-tile--col-11{grid-column:span 11}:host.wac-menu-tile--col-12{grid-column:span 12}.wac-menu-tile__new{position:absolute;background-color:#59d0cf;color:#fff;font-weight:500;font-size:12px;padding:6px;top:0;left:15px}.wac-menu-tile__content{display:flex;flex-direction:column;justify-content:center;align-items:center;gap:15px;height:100%;background:#ffffff;width:100%;padding:20px;border:1px solid #ffffff;border-radius:3px;box-shadow:0 2px 6px #0000000d;transition:border-color .3s ease-in-out}.wac-menu-tile__content:hover,.wac-menu-tile__content:active,.wac-menu-tile__content:focus{border-color:#3ba6ec;transition:border-color .3s ease-in-out}.wac-menu-tile__content img{width:auto;height:35px}.wac-menu-tile__content .w-text{display:flex;flex-direction:column;align-items:center;gap:10px;text-align:center}.wac-menu-tile a{cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.TextComponent, selector: "wac-text", inputs: ["textClass", "noMargin"] }] });
39
+ MenuTileComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.5", type: MenuTileComponent, selector: "wac-menu-tile", inputs: { col: "col", iconPath: "iconPath", title: "title", description: "description", new: "new", newElement: "newElement", url: "url", urlQueryParams: "urlQueryParams", external: "external" }, host: { properties: { "class": "this.hostClasses" } }, ngImport: i0, template: "<div class=\"wac-menu-tile__new\" *ngIf=\"newElement\">\r\n <wac-text noMargin><i class=\"fa-regular fa-wand-magic-sparkles\"></i>&nbsp;{{ new }}</wac-text>\r\n</div>\r\n<a class=\"wac-menu-tile__content\" [ngClass]=\"{'with-desc': description}\" *ngIf=\"url && url.startsWith('http')\" [href]=\"url\" [target]=\"external ? '_blank' : '_self'\">\r\n <img [src]=\"iconPath\" />\r\n <div class=\"w-text\">\r\n <wac-text noMargin>{{ title }}</wac-text>\r\n <wac-text *ngIf=\"description\" noMargin [textClass]=\"'grey'\">{{ description }}</wac-text>\r\n </div>\r\n</a>\r\n<a class=\"wac-menu-tile__content\" [ngClass]=\"{'with-desc': description}\" *ngIf=\"url && !url.startsWith('http')\" (click)=\"navigate()\">\r\n <img [src]=\"iconPath\" />\r\n <div class=\"w-text\">\r\n <wac-text noMargin>{{ title }}</wac-text>\r\n <wac-text *ngIf=\"description\" noMargin [textClass]=\"'grey'\">{{ description }}</wac-text>\r\n </div>\r\n</a>\r\n<div *ngIf=\"!url\" class=\"wac-menu-tile__content\" [ngClass]=\"{'with-desc': description}\">\r\n <img [src]=\"iconPath\" />\r\n <div class=\"w-text\">\r\n <wac-text noMargin>{{ title }}</wac-text>\r\n <wac-text *ngIf=\"description\" noMargin [textClass]=\"'grey'\">{{ description }}</wac-text>\r\n </div>\r\n</div>\r\n", styles: [":host{height:100%;position:relative}:host.wac-menu-tile--col-1{grid-column:span 1}:host.wac-menu-tile--col-2{grid-column:span 2}:host.wac-menu-tile--col-3{grid-column:span 3}:host.wac-menu-tile--col-4{grid-column:span 4}:host.wac-menu-tile--col-5{grid-column:span 5}:host.wac-menu-tile--col-6{grid-column:span 6}:host.wac-menu-tile--col-7{grid-column:span 7}:host.wac-menu-tile--col-8{grid-column:span 8}:host.wac-menu-tile--col-9{grid-column:span 9}:host.wac-menu-tile--col-10{grid-column:span 10}:host.wac-menu-tile--col-11{grid-column:span 11}:host.wac-menu-tile--col-12{grid-column:span 12}.wac-menu-tile__new{position:absolute;background-color:#59d0cf;color:#fff;font-weight:500;font-size:12px;padding:6px;top:0;left:15px}.wac-menu-tile__content{display:flex;flex-direction:column;justify-content:center;align-items:center;gap:15px;height:100%;min-height:150px;background:#ffffff;width:100%;padding:20px;border:1px solid #ffffff;border-radius:3px;box-shadow:0 2px 6px #0000000d;transition:border-color .3s ease-in-out}.wac-menu-tile__content:hover,.wac-menu-tile__content:active,.wac-menu-tile__content:focus{border-color:#3ba6ec;transition:border-color .3s ease-in-out}.wac-menu-tile__content img{width:auto;height:35px}.wac-menu-tile__content .w-text{display:flex;flex-direction:column;align-items:center;gap:10px;text-align:center}.wac-menu-tile .with-desc{min-height:none!important}.wac-menu-tile a{cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.TextComponent, selector: "wac-text", inputs: ["textClass", "noMargin"] }] });
40
40
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: MenuTileComponent, decorators: [{
41
41
  type: Component,
42
- args: [{ selector: 'wac-menu-tile', template: "<div class=\"wac-menu-tile__new\" *ngIf=\"newElement\">\r\n <wac-text noMargin><i class=\"fa-regular fa-wand-magic-sparkles\"></i>&nbsp;{{ new }}</wac-text>\r\n</div>\r\n<a class=\"wac-menu-tile__content\" *ngIf=\"url && url.startsWith('http')\" [href]=\"url\" [target]=\"external ? '_blank' : '_self'\">\r\n <img [src]=\"iconPath\" />\r\n <div class=\"w-text\">\r\n <wac-text noMargin>{{ title }}</wac-text>\r\n <wac-text *ngIf=\"description\" noMargin [textClass]=\"'grey'\">{{ description }}</wac-text>\r\n </div>\r\n</a>\r\n<a class=\"wac-menu-tile__content\" *ngIf=\"url && !url.startsWith('http')\" (click)=\"navigate()\">\r\n <img [src]=\"iconPath\" />\r\n <div class=\"w-text\">\r\n <wac-text noMargin>{{ title }}</wac-text>\r\n <wac-text *ngIf=\"description\" noMargin [textClass]=\"'grey'\">{{ description }}</wac-text>\r\n </div>\r\n</a>\r\n<div *ngIf=\"!url\" class=\"wac-menu-tile__content\">\r\n <img [src]=\"iconPath\" />\r\n <div class=\"w-text\">\r\n <wac-text noMargin>{{ title }}</wac-text>\r\n <wac-text *ngIf=\"description\" noMargin [textClass]=\"'grey'\">{{ description }}</wac-text>\r\n </div>\r\n</div>\r\n", styles: [":host{position:relative}:host.wac-menu-tile--col-1{grid-column:span 1}:host.wac-menu-tile--col-2{grid-column:span 2}:host.wac-menu-tile--col-3{grid-column:span 3}:host.wac-menu-tile--col-4{grid-column:span 4}:host.wac-menu-tile--col-5{grid-column:span 5}:host.wac-menu-tile--col-6{grid-column:span 6}:host.wac-menu-tile--col-7{grid-column:span 7}:host.wac-menu-tile--col-8{grid-column:span 8}:host.wac-menu-tile--col-9{grid-column:span 9}:host.wac-menu-tile--col-10{grid-column:span 10}:host.wac-menu-tile--col-11{grid-column:span 11}:host.wac-menu-tile--col-12{grid-column:span 12}.wac-menu-tile__new{position:absolute;background-color:#59d0cf;color:#fff;font-weight:500;font-size:12px;padding:6px;top:0;left:15px}.wac-menu-tile__content{display:flex;flex-direction:column;justify-content:center;align-items:center;gap:15px;height:100%;background:#ffffff;width:100%;padding:20px;border:1px solid #ffffff;border-radius:3px;box-shadow:0 2px 6px #0000000d;transition:border-color .3s ease-in-out}.wac-menu-tile__content:hover,.wac-menu-tile__content:active,.wac-menu-tile__content:focus{border-color:#3ba6ec;transition:border-color .3s ease-in-out}.wac-menu-tile__content img{width:auto;height:35px}.wac-menu-tile__content .w-text{display:flex;flex-direction:column;align-items:center;gap:10px;text-align:center}.wac-menu-tile a{cursor:pointer}\n"] }]
42
+ args: [{ selector: 'wac-menu-tile', template: "<div class=\"wac-menu-tile__new\" *ngIf=\"newElement\">\r\n <wac-text noMargin><i class=\"fa-regular fa-wand-magic-sparkles\"></i>&nbsp;{{ new }}</wac-text>\r\n</div>\r\n<a class=\"wac-menu-tile__content\" [ngClass]=\"{'with-desc': description}\" *ngIf=\"url && url.startsWith('http')\" [href]=\"url\" [target]=\"external ? '_blank' : '_self'\">\r\n <img [src]=\"iconPath\" />\r\n <div class=\"w-text\">\r\n <wac-text noMargin>{{ title }}</wac-text>\r\n <wac-text *ngIf=\"description\" noMargin [textClass]=\"'grey'\">{{ description }}</wac-text>\r\n </div>\r\n</a>\r\n<a class=\"wac-menu-tile__content\" [ngClass]=\"{'with-desc': description}\" *ngIf=\"url && !url.startsWith('http')\" (click)=\"navigate()\">\r\n <img [src]=\"iconPath\" />\r\n <div class=\"w-text\">\r\n <wac-text noMargin>{{ title }}</wac-text>\r\n <wac-text *ngIf=\"description\" noMargin [textClass]=\"'grey'\">{{ description }}</wac-text>\r\n </div>\r\n</a>\r\n<div *ngIf=\"!url\" class=\"wac-menu-tile__content\" [ngClass]=\"{'with-desc': description}\">\r\n <img [src]=\"iconPath\" />\r\n <div class=\"w-text\">\r\n <wac-text noMargin>{{ title }}</wac-text>\r\n <wac-text *ngIf=\"description\" noMargin [textClass]=\"'grey'\">{{ description }}</wac-text>\r\n </div>\r\n</div>\r\n", styles: [":host{height:100%;position:relative}:host.wac-menu-tile--col-1{grid-column:span 1}:host.wac-menu-tile--col-2{grid-column:span 2}:host.wac-menu-tile--col-3{grid-column:span 3}:host.wac-menu-tile--col-4{grid-column:span 4}:host.wac-menu-tile--col-5{grid-column:span 5}:host.wac-menu-tile--col-6{grid-column:span 6}:host.wac-menu-tile--col-7{grid-column:span 7}:host.wac-menu-tile--col-8{grid-column:span 8}:host.wac-menu-tile--col-9{grid-column:span 9}:host.wac-menu-tile--col-10{grid-column:span 10}:host.wac-menu-tile--col-11{grid-column:span 11}:host.wac-menu-tile--col-12{grid-column:span 12}.wac-menu-tile__new{position:absolute;background-color:#59d0cf;color:#fff;font-weight:500;font-size:12px;padding:6px;top:0;left:15px}.wac-menu-tile__content{display:flex;flex-direction:column;justify-content:center;align-items:center;gap:15px;height:100%;min-height:150px;background:#ffffff;width:100%;padding:20px;border:1px solid #ffffff;border-radius:3px;box-shadow:0 2px 6px #0000000d;transition:border-color .3s ease-in-out}.wac-menu-tile__content:hover,.wac-menu-tile__content:active,.wac-menu-tile__content:focus{border-color:#3ba6ec;transition:border-color .3s ease-in-out}.wac-menu-tile__content img{width:auto;height:35px}.wac-menu-tile__content .w-text{display:flex;flex-direction:column;align-items:center;gap:10px;text-align:center}.wac-menu-tile .with-desc{min-height:none!important}.wac-menu-tile a{cursor:pointer}\n"] }]
43
43
  }], ctorParameters: function () { return [{ type: i1.Router }]; }, propDecorators: { col: [{
44
44
  type: Input
45
45
  }], hostClasses: [{
@@ -62,4 +62,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.5", ngImpor
62
62
  }], external: [{
63
63
  type: Input
64
64
  }] } });
65
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS10aWxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvbWVudS10aWxlL21lbnUtdGlsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL21lbnUtdGlsZS9tZW51LXRpbGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDOzs7OztBQVF0RSxNQUFNLE9BQU8saUJBQWlCO0lBSTVCLElBQ0ksR0FBRztRQUNMLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0lBQ0QsSUFBSSxHQUFHLENBQUMsS0FBYTtRQUNuQixrREFBa0Q7UUFDbEQsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvRixDQUFDO0lBRUQsSUFDSSxXQUFXO1FBQ2IsT0FBTyxvQ0FBb0MsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ3hELENBQUM7SUFrQkQsWUFBb0IsTUFBYztRQUFkLFdBQU0sR0FBTixNQUFNLENBQVE7UUFoQzFCLFNBQUksR0FBVyxDQUFDLENBQUM7UUFnQmhCLGFBQVEsR0FBVyxFQUFFLENBQUM7UUFFdEIsVUFBSyxHQUFXLEVBQUUsQ0FBQztRQUVuQixnQkFBVyxHQUFXLEVBQUUsQ0FBQztRQUV6QixRQUFHLEdBQVcsRUFBRSxDQUFDO1FBRWpCLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFFNUIsUUFBRyxHQUFrQixJQUFJLENBQUM7UUFFMUIsbUJBQWMsR0FBVyxJQUFJLENBQUM7UUFFOUIsYUFBUSxHQUFZLEtBQUssQ0FBQztJQUVFLENBQUM7SUFFdEMsUUFBUSxLQUFJLENBQUM7SUFFYixRQUFRO1FBQ04sTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUN4QyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFDN0I7WUFDRSxXQUFXO1lBQ1gsbUJBQW1CLEVBQUUsT0FBTztTQUM3QixDQUNGLENBQUM7SUFDSixDQUFDOzs4R0E5Q1UsaUJBQWlCO2tHQUFqQixpQkFBaUIsZ1RDUjlCLHlvQ0F3QkE7MkZEaEJhLGlCQUFpQjtrQkFMN0IsU0FBUzsrQkFDRSxlQUFlOzZGQVNyQixHQUFHO3NCQUROLEtBQUs7Z0JBVUYsV0FBVztzQkFEZCxXQUFXO3VCQUFDLE9BQU87Z0JBS1gsUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxLQUFLO3NCQUFiLEtBQUs7Z0JBRUcsV0FBVztzQkFBbkIsS0FBSztnQkFFRyxHQUFHO3NCQUFYLEtBQUs7Z0JBRUcsVUFBVTtzQkFBbEIsS0FBSztnQkFFRyxHQUFHO3NCQUFYLEtBQUs7Z0JBRUcsY0FBYztzQkFBdEIsS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBIb3N0QmluZGluZywgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBQYXJhbXMsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3dhYy1tZW51LXRpbGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9tZW51LXRpbGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL21lbnUtdGlsZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNZW51VGlsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIHByaXZhdGUgX2NvbDogbnVtYmVyID0gMTtcclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgY29sKCk6IG51bWJlciB7IFxyXG4gICAgcmV0dXJuIHRoaXMuX2NvbDsgXHJcbiAgfVxyXG4gIHNldCBjb2wodmFsdWU6IG51bWJlcikge1xyXG4gICAgLy8gRW5zdXJlIGNvbCBpcyBiZXR3ZWVuIDEtMTIgZm9yIGEgMTItY29sdW1uIGdyaWRcclxuICAgIHRoaXMuX2NvbCA9ICFpc05hTihOdW1iZXIodmFsdWUpKSA/IE1hdGgubWluKE1hdGgubWF4KE1hdGgucm91bmQoTnVtYmVyKHZhbHVlKSksIDEpLCAxMikgOiAxO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXHJcbiAgZ2V0IGhvc3RDbGFzc2VzKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYHdhYy1tZW51LXRpbGUgd2FjLW1lbnUtdGlsZS0tY29sLSR7dGhpcy5jb2x9YDtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIGljb25QYXRoOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgQElucHV0KCkgdGl0bGU6IHN0cmluZyA9ICcnO1xyXG5cclxuICBASW5wdXQoKSBkZXNjcmlwdGlvbjogc3RyaW5nID0gJyc7XHJcblxyXG4gIEBJbnB1dCgpIG5ldzogc3RyaW5nID0gJyc7XHJcblxyXG4gIEBJbnB1dCgpIG5ld0VsZW1lbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgdXJsOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgQElucHV0KCkgdXJsUXVlcnlQYXJhbXM6IFBhcmFtcyA9IG51bGw7XHJcblxyXG4gIEBJbnB1dCgpIGV4dGVybmFsOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcm91dGVyOiBSb3V0ZXIpIHt9XHJcblxyXG4gIG5nT25Jbml0KCkge31cclxuXHJcbiAgbmF2aWdhdGUoKSB7XHJcbiAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHRoaXMudXJsUXVlcnlQYXJhbXM7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy51cmxdLCBcclxuICAgICAge1xyXG4gICAgICAgIHF1ZXJ5UGFyYW1zLFxyXG4gICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScsXHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJ3YWMtbWVudS10aWxlX19uZXdcIiAqbmdJZj1cIm5ld0VsZW1lbnRcIj5cclxuICA8d2FjLXRleHQgbm9NYXJnaW4+PGkgY2xhc3M9XCJmYS1yZWd1bGFyIGZhLXdhbmQtbWFnaWMtc3BhcmtsZXNcIj48L2k+Jm5ic3A7e3sgbmV3IH19PC93YWMtdGV4dD5cclxuPC9kaXY+XHJcbjxhIGNsYXNzPVwid2FjLW1lbnUtdGlsZV9fY29udGVudFwiICpuZ0lmPVwidXJsICYmIHVybC5zdGFydHNXaXRoKCdodHRwJylcIiBbaHJlZl09XCJ1cmxcIiBbdGFyZ2V0XT1cImV4dGVybmFsID8gJ19ibGFuaycgOiAnX3NlbGYnXCI+XHJcbiAgPGltZyBbc3JjXT1cImljb25QYXRoXCIgLz5cclxuICA8ZGl2IGNsYXNzPVwidy10ZXh0XCI+XHJcbiAgICA8d2FjLXRleHQgbm9NYXJnaW4+e3sgdGl0bGUgfX08L3dhYy10ZXh0PlxyXG4gICAgPHdhYy10ZXh0ICpuZ0lmPVwiZGVzY3JpcHRpb25cIiBub01hcmdpbiBbdGV4dENsYXNzXT1cIidncmV5J1wiPnt7IGRlc2NyaXB0aW9uIH19PC93YWMtdGV4dD5cclxuICA8L2Rpdj5cclxuPC9hPlxyXG48YSBjbGFzcz1cIndhYy1tZW51LXRpbGVfX2NvbnRlbnRcIiAqbmdJZj1cInVybCAmJiAhdXJsLnN0YXJ0c1dpdGgoJ2h0dHAnKVwiIChjbGljayk9XCJuYXZpZ2F0ZSgpXCI+XHJcbiAgPGltZyBbc3JjXT1cImljb25QYXRoXCIgLz5cclxuICA8ZGl2IGNsYXNzPVwidy10ZXh0XCI+XHJcbiAgICA8d2FjLXRleHQgbm9NYXJnaW4+e3sgdGl0bGUgfX08L3dhYy10ZXh0PlxyXG4gICAgPHdhYy10ZXh0ICpuZ0lmPVwiZGVzY3JpcHRpb25cIiBub01hcmdpbiBbdGV4dENsYXNzXT1cIidncmV5J1wiPnt7IGRlc2NyaXB0aW9uIH19PC93YWMtdGV4dD5cclxuICA8L2Rpdj5cclxuPC9hPlxyXG48ZGl2ICpuZ0lmPVwiIXVybFwiIGNsYXNzPVwid2FjLW1lbnUtdGlsZV9fY29udGVudFwiPlxyXG4gIDxpbWcgW3NyY109XCJpY29uUGF0aFwiIC8+XHJcbiAgPGRpdiBjbGFzcz1cInctdGV4dFwiPlxyXG4gICAgPHdhYy10ZXh0IG5vTWFyZ2luPnt7IHRpdGxlIH19PC93YWMtdGV4dD5cclxuICAgIDx3YWMtdGV4dCAqbmdJZj1cImRlc2NyaXB0aW9uXCIgbm9NYXJnaW4gW3RleHRDbGFzc109XCInZ3JleSdcIj57eyBkZXNjcmlwdGlvbiB9fTwvd2FjLXRleHQ+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS10aWxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvbWVudS10aWxlL21lbnUtdGlsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL21lbnUtdGlsZS9tZW51LXRpbGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDOzs7OztBQVF0RSxNQUFNLE9BQU8saUJBQWlCO0lBSTVCLElBQ0ksR0FBRztRQUNMLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0lBQ0QsSUFBSSxHQUFHLENBQUMsS0FBYTtRQUNuQixrREFBa0Q7UUFDbEQsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvRixDQUFDO0lBRUQsSUFDSSxXQUFXO1FBQ2IsT0FBTyxvQ0FBb0MsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ3hELENBQUM7SUFrQkQsWUFBb0IsTUFBYztRQUFkLFdBQU0sR0FBTixNQUFNLENBQVE7UUFoQzFCLFNBQUksR0FBVyxDQUFDLENBQUM7UUFnQmhCLGFBQVEsR0FBVyxFQUFFLENBQUM7UUFFdEIsVUFBSyxHQUFXLEVBQUUsQ0FBQztRQUVuQixnQkFBVyxHQUFXLEVBQUUsQ0FBQztRQUV6QixRQUFHLEdBQVcsRUFBRSxDQUFDO1FBRWpCLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFFNUIsUUFBRyxHQUFrQixJQUFJLENBQUM7UUFFMUIsbUJBQWMsR0FBVyxJQUFJLENBQUM7UUFFOUIsYUFBUSxHQUFZLEtBQUssQ0FBQztJQUVFLENBQUM7SUFFdEMsUUFBUSxLQUFJLENBQUM7SUFFYixRQUFRO1FBQ04sTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUN4QyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFDN0I7WUFDRSxXQUFXO1lBQ1gsbUJBQW1CLEVBQUUsT0FBTztTQUM3QixDQUNGLENBQUM7SUFDSixDQUFDOzs4R0E5Q1UsaUJBQWlCO2tHQUFqQixpQkFBaUIsZ1RDUjlCLG93Q0F3QkE7MkZEaEJhLGlCQUFpQjtrQkFMN0IsU0FBUzsrQkFDRSxlQUFlOzZGQVNyQixHQUFHO3NCQUROLEtBQUs7Z0JBVUYsV0FBVztzQkFEZCxXQUFXO3VCQUFDLE9BQU87Z0JBS1gsUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxLQUFLO3NCQUFiLEtBQUs7Z0JBRUcsV0FBVztzQkFBbkIsS0FBSztnQkFFRyxHQUFHO3NCQUFYLEtBQUs7Z0JBRUcsVUFBVTtzQkFBbEIsS0FBSztnQkFFRyxHQUFHO3NCQUFYLEtBQUs7Z0JBRUcsY0FBYztzQkFBdEIsS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBIb3N0QmluZGluZywgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBQYXJhbXMsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3dhYy1tZW51LXRpbGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9tZW51LXRpbGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL21lbnUtdGlsZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNZW51VGlsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIHByaXZhdGUgX2NvbDogbnVtYmVyID0gMTtcclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgY29sKCk6IG51bWJlciB7IFxyXG4gICAgcmV0dXJuIHRoaXMuX2NvbDsgXHJcbiAgfVxyXG4gIHNldCBjb2wodmFsdWU6IG51bWJlcikge1xyXG4gICAgLy8gRW5zdXJlIGNvbCBpcyBiZXR3ZWVuIDEtMTIgZm9yIGEgMTItY29sdW1uIGdyaWRcclxuICAgIHRoaXMuX2NvbCA9ICFpc05hTihOdW1iZXIodmFsdWUpKSA/IE1hdGgubWluKE1hdGgubWF4KE1hdGgucm91bmQoTnVtYmVyKHZhbHVlKSksIDEpLCAxMikgOiAxO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXHJcbiAgZ2V0IGhvc3RDbGFzc2VzKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYHdhYy1tZW51LXRpbGUgd2FjLW1lbnUtdGlsZS0tY29sLSR7dGhpcy5jb2x9YDtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIGljb25QYXRoOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgQElucHV0KCkgdGl0bGU6IHN0cmluZyA9ICcnO1xyXG5cclxuICBASW5wdXQoKSBkZXNjcmlwdGlvbjogc3RyaW5nID0gJyc7XHJcblxyXG4gIEBJbnB1dCgpIG5ldzogc3RyaW5nID0gJyc7XHJcblxyXG4gIEBJbnB1dCgpIG5ld0VsZW1lbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgdXJsOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgQElucHV0KCkgdXJsUXVlcnlQYXJhbXM6IFBhcmFtcyA9IG51bGw7XHJcblxyXG4gIEBJbnB1dCgpIGV4dGVybmFsOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcm91dGVyOiBSb3V0ZXIpIHt9XHJcblxyXG4gIG5nT25Jbml0KCkge31cclxuXHJcbiAgbmF2aWdhdGUoKSB7XHJcbiAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHRoaXMudXJsUXVlcnlQYXJhbXM7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy51cmxdLCBcclxuICAgICAge1xyXG4gICAgICAgIHF1ZXJ5UGFyYW1zLFxyXG4gICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScsXHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJ3YWMtbWVudS10aWxlX19uZXdcIiAqbmdJZj1cIm5ld0VsZW1lbnRcIj5cclxuICA8d2FjLXRleHQgbm9NYXJnaW4+PGkgY2xhc3M9XCJmYS1yZWd1bGFyIGZhLXdhbmQtbWFnaWMtc3BhcmtsZXNcIj48L2k+Jm5ic3A7e3sgbmV3IH19PC93YWMtdGV4dD5cclxuPC9kaXY+XHJcbjxhIGNsYXNzPVwid2FjLW1lbnUtdGlsZV9fY29udGVudFwiIFtuZ0NsYXNzXT1cInsnd2l0aC1kZXNjJzogZGVzY3JpcHRpb259XCIgKm5nSWY9XCJ1cmwgJiYgdXJsLnN0YXJ0c1dpdGgoJ2h0dHAnKVwiIFtocmVmXT1cInVybFwiIFt0YXJnZXRdPVwiZXh0ZXJuYWwgPyAnX2JsYW5rJyA6ICdfc2VsZidcIj5cclxuICA8aW1nIFtzcmNdPVwiaWNvblBhdGhcIiAvPlxyXG4gIDxkaXYgY2xhc3M9XCJ3LXRleHRcIj5cclxuICAgIDx3YWMtdGV4dCBub01hcmdpbj57eyB0aXRsZSB9fTwvd2FjLXRleHQ+XHJcbiAgICA8d2FjLXRleHQgKm5nSWY9XCJkZXNjcmlwdGlvblwiIG5vTWFyZ2luIFt0ZXh0Q2xhc3NdPVwiJ2dyZXknXCI+e3sgZGVzY3JpcHRpb24gfX08L3dhYy10ZXh0PlxyXG4gIDwvZGl2PlxyXG48L2E+XHJcbjxhIGNsYXNzPVwid2FjLW1lbnUtdGlsZV9fY29udGVudFwiIFtuZ0NsYXNzXT1cInsnd2l0aC1kZXNjJzogZGVzY3JpcHRpb259XCIgKm5nSWY9XCJ1cmwgJiYgIXVybC5zdGFydHNXaXRoKCdodHRwJylcIiAoY2xpY2spPVwibmF2aWdhdGUoKVwiPlxyXG4gIDxpbWcgW3NyY109XCJpY29uUGF0aFwiIC8+XHJcbiAgPGRpdiBjbGFzcz1cInctdGV4dFwiPlxyXG4gICAgPHdhYy10ZXh0IG5vTWFyZ2luPnt7IHRpdGxlIH19PC93YWMtdGV4dD5cclxuICAgIDx3YWMtdGV4dCAqbmdJZj1cImRlc2NyaXB0aW9uXCIgbm9NYXJnaW4gW3RleHRDbGFzc109XCInZ3JleSdcIj57eyBkZXNjcmlwdGlvbiB9fTwvd2FjLXRleHQ+XHJcbiAgPC9kaXY+XHJcbjwvYT5cclxuPGRpdiAqbmdJZj1cIiF1cmxcIiBjbGFzcz1cIndhYy1tZW51LXRpbGVfX2NvbnRlbnRcIiBbbmdDbGFzc109XCJ7J3dpdGgtZGVzYyc6IGRlc2NyaXB0aW9ufVwiPlxyXG4gIDxpbWcgW3NyY109XCJpY29uUGF0aFwiIC8+XHJcbiAgPGRpdiBjbGFzcz1cInctdGV4dFwiPlxyXG4gICAgPHdhYy10ZXh0IG5vTWFyZ2luPnt7IHRpdGxlIH19PC93YWMtdGV4dD5cclxuICAgIDx3YWMtdGV4dCAqbmdJZj1cImRlc2NyaXB0aW9uXCIgbm9NYXJnaW4gW3RleHRDbGFzc109XCInZ3JleSdcIj57eyBkZXNjcmlwdGlvbiB9fTwvd2FjLXRleHQ+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=