@fundamental-ngx/core 0.46.0-rc.0 → 0.46.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/calendar/calendar-directives.d.ts +1 -1
  2. package/calendar/calendar-header/calendar-header.component.d.ts +2 -6
  3. package/calendar/calendar-views/calendar-aggregated-year-view/calendar-aggregated-year-view.component.d.ts +1 -1
  4. package/calendar/calendar-views/calendar-day-view/calendar-day-view.component.d.ts +27 -32
  5. package/calendar/calendar-views/calendar-month-view/calendar-month-view.component.d.ts +1 -1
  6. package/calendar/calendar-views/calendar-year-view/calendar-year-view.component.d.ts +1 -1
  7. package/calendar/calendar.component.d.ts +7 -8
  8. package/calendar/calendar.module.d.ts +2 -5
  9. package/combobox/combobox-mobile/combobox-mobile.component.d.ts +2 -1
  10. package/date-picker/date-picker-mobile/date-picker-mobile.component.d.ts +31 -0
  11. package/date-picker/date-picker.component.d.ts +46 -16
  12. package/date-picker/date-picker.model.d.ts +11 -0
  13. package/date-picker/date-picker.module.d.ts +2 -12
  14. package/date-picker/index.d.ts +2 -0
  15. package/date-picker/tokens.d.ts +5 -0
  16. package/datetime-picker/datetime-picker-mobile/datetime-picker-mobile.component.d.ts +29 -0
  17. package/datetime-picker/datetime-picker.component.d.ts +34 -12
  18. package/datetime-picker/datetime-picker.model.d.ts +9 -0
  19. package/datetime-picker/datetime-picker.module.d.ts +2 -14
  20. package/datetime-picker/index.d.ts +2 -0
  21. package/datetime-picker/tokens.d.ts +5 -0
  22. package/esm2022/calendar/calendar-directives.mjs +4 -3
  23. package/esm2022/calendar/calendar-header/calendar-header.component.mjs +7 -15
  24. package/esm2022/calendar/calendar-views/calendar-aggregated-year-view/calendar-aggregated-year-view.component.mjs +6 -5
  25. package/esm2022/calendar/calendar-views/calendar-day-view/calendar-day-view.component.mjs +21 -30
  26. package/esm2022/calendar/calendar-views/calendar-month-view/calendar-month-view.component.mjs +6 -5
  27. package/esm2022/calendar/calendar-views/calendar-year-view/calendar-year-view.component.mjs +6 -5
  28. package/esm2022/calendar/calendar.component.mjs +17 -13
  29. package/esm2022/calendar/calendar.module.mjs +9 -9
  30. package/esm2022/combobox/combobox-mobile/combobox-mobile.component.mjs +3 -2
  31. package/esm2022/date-picker/date-picker-mobile/date-picker-mobile.component.mjs +96 -0
  32. package/esm2022/date-picker/date-picker.component.mjs +142 -40
  33. package/esm2022/date-picker/date-picker.model.mjs +2 -0
  34. package/esm2022/date-picker/date-picker.module.mjs +6 -49
  35. package/esm2022/date-picker/index.mjs +3 -1
  36. package/esm2022/date-picker/tokens.mjs +4 -0
  37. package/esm2022/datetime-picker/datetime-picker-mobile/datetime-picker-mobile.component.mjs +96 -0
  38. package/esm2022/datetime-picker/datetime-picker.component.mjs +120 -36
  39. package/esm2022/datetime-picker/datetime-picker.model.mjs +2 -0
  40. package/esm2022/datetime-picker/datetime-picker.module.mjs +6 -57
  41. package/esm2022/datetime-picker/index.mjs +3 -1
  42. package/esm2022/datetime-picker/tokens.mjs +4 -0
  43. package/esm2022/mobile-mode/mobile-mode.class.mjs +3 -1
  44. package/esm2022/shared/interfaces/special-day-rule.mjs +1 -1
  45. package/fesm2022/fundamental-ngx-core-calendar.mjs +91 -95
  46. package/fesm2022/fundamental-ngx-core-calendar.mjs.map +1 -1
  47. package/fesm2022/fundamental-ngx-core-combobox.mjs +2 -1
  48. package/fesm2022/fundamental-ngx-core-combobox.mjs.map +1 -1
  49. package/fesm2022/fundamental-ngx-core-date-picker.mjs +235 -86
  50. package/fesm2022/fundamental-ngx-core-date-picker.mjs.map +1 -1
  51. package/fesm2022/fundamental-ngx-core-datetime-picker.mjs +211 -88
  52. package/fesm2022/fundamental-ngx-core-datetime-picker.mjs.map +1 -1
  53. package/fesm2022/fundamental-ngx-core-mobile-mode.mjs +2 -0
  54. package/fesm2022/fundamental-ngx-core-mobile-mode.mjs.map +1 -1
  55. package/fundamental-ngx-core-v0.46.0-rc.2.tgz +0 -0
  56. package/mobile-mode/mobile-mode.class.d.ts +3 -1
  57. package/package.json +3 -3
  58. package/schematics/add-dependencies/index.js +4 -4
  59. package/shared/interfaces/special-day-rule.d.ts +1 -1
  60. package/fundamental-ngx-core-v0.46.0-rc.0.tgz +0 -0
@@ -6,6 +6,8 @@ import { CalendarComponent, CalendarYearGrid, DaysOfWeek, FdCalendarView } from
6
6
  import { FormItemControl, PopoverFormMessageService } from '@fundamental-ngx/core/form';
7
7
  import { Nullable } from '@fundamental-ngx/cdk/utils';
8
8
  import { FormStates } from '@fundamental-ngx/cdk/forms';
9
+ import { DateTimePicker } from './datetime-picker.model';
10
+ import { MobileModeConfig } from '@fundamental-ngx/core/mobile-mode';
9
11
  import * as i0 from "@angular/core";
10
12
  /**
11
13
  * The datetime picker component is an opinionated composition of the fd-popover,
@@ -15,7 +17,7 @@ import * as i0 from "@angular/core";
15
17
  * <fd-date-time-picker [(ngModel)]="dateTime"></fd-date-time-picker>
16
18
  * ```
17
19
  */
18
- export declare class DatetimePickerComponent<D> implements OnInit, OnDestroy, OnChanges, AfterViewInit, ControlValueAccessor, Validator, FormItemControl {
20
+ export declare class DatetimePickerComponent<D> implements DateTimePicker<D>, OnInit, OnDestroy, OnChanges, AfterViewInit, ControlValueAccessor, Validator, FormItemControl {
19
21
  private _elRef;
20
22
  private _changeDetRef;
21
23
  private _dateTimeAdapter;
@@ -50,13 +52,9 @@ export declare class DatetimePickerComponent<D> implements OnInit, OnDestroy, On
50
52
  ariaLabelledBy: Nullable<string>;
51
53
  /** Text displayed in message */
52
54
  set message(message: string);
53
- /** @hidden */
54
- _message: string | null;
55
55
  /** The trigger events that will open/close the message box.
56
56
  * Accepts any [HTML DOM Events](https://www.w3schools.com/jsref/dom_obj_event.asp). */
57
57
  set messageTriggers(triggers: string[]);
58
- /** @hidden */
59
- _messageTriggers: string[];
60
58
  /**
61
59
  * Whether the time component shows minutes.
62
60
  * Default value is based on the current locale format option
@@ -100,7 +98,7 @@ export declare class DatetimePickerComponent<D> implements OnInit, OnDestroy, On
100
98
  buttonFocusable: boolean;
101
99
  /**
102
100
  * Special days mark, it can be used by passing array of object with
103
- * Special day number, list 1-20 [class:`fd-calendar__special-day--{{number}}`] is available there:
101
+ * Special day number, list 1-20 [class:`fd-calendar__item--legend-{{number}}`] is available there:
104
102
  * https://sap.github.io/fundamental-styles/components/calendar.html calendar special days section
105
103
  * Rule accepts method with FdDate object as a parameter. ex:
106
104
  * `rule: (fdDate: FdDate) => fdDate.getDay() === 1`, which will mark all sundays as special day.
@@ -139,6 +137,14 @@ export declare class DatetimePickerComponent<D> implements OnInit, OnDestroy, On
139
137
  * Whether to prevent page scrolling when focusing date picker input field after calendar has been closed.
140
138
  */
141
139
  preventScrollOnFocus: boolean;
140
+ /** Whether to render datetime picker in mobile mode. */
141
+ mobile: boolean;
142
+ /** Mobile mode configuration. */
143
+ mobileConfig: MobileModeConfig;
144
+ /** Whether calendar is used inside mobile in landscape mode, it also adds close button on right side */
145
+ mobileLandscape: boolean;
146
+ /** Whether calendar is used inside mobile in portrait mode */
147
+ mobilePortrait: boolean;
142
148
  /** Event emitted when the state of the isOpen property changes. */
143
149
  isOpenChange: EventEmitter<boolean>;
144
150
  /** Event thrown every time calendar active view is changed */
@@ -164,6 +170,12 @@ export declare class DatetimePickerComponent<D> implements OnInit, OnDestroy, On
164
170
  /** @hidden */
165
171
  _inputElement: ElementRef<HTMLInputElement>;
166
172
  /** @hidden */
173
+ private readonly _pickerTemplate;
174
+ /** @hidden */
175
+ _message: string | null;
176
+ /** @hidden */
177
+ _messageTriggers: string[];
178
+ /** @hidden */
167
179
  _processInputOnBlur: boolean;
168
180
  /**
169
181
  * @hidden
@@ -194,22 +206,26 @@ export declare class DatetimePickerComponent<D> implements OnInit, OnDestroy, On
194
206
  /** @hidden */
195
207
  private _calendarPendingDate;
196
208
  /** @hidden */
197
- private readonly _onDestroy$;
209
+ private readonly _injector;
210
+ /** @hidden */
211
+ private readonly _dynamicComponentService;
212
+ /** @hidden */
213
+ private _mobileComponentRef;
198
214
  /** @hidden */
199
215
  private _subscriptions;
200
216
  /** @hidden */
201
217
  private _touched;
202
218
  /** @hidden */
203
- onChange: (value: D | null) => void;
204
- /** @hidden */
205
- onTouched: () => void;
219
+ constructor(_elRef: ElementRef, _changeDetRef: ChangeDetectorRef, _dateTimeAdapter: DatetimeAdapter<D>, _dateTimeFormats: DateTimeFormats, _popoverFormMessage: PopoverFormMessageService);
206
220
  /**
207
221
  * Function used to disable certain dates in the calendar.
208
222
  * @param fdDate FdDate
209
223
  */
210
224
  disableFunction: (value: D) => boolean;
211
225
  /** @hidden */
212
- constructor(_elRef: ElementRef, _changeDetRef: ChangeDetectorRef, _dateTimeAdapter: DatetimeAdapter<D>, _dateTimeFormats: DateTimeFormats, _popoverFormMessage: PopoverFormMessageService);
226
+ onChange: (value: D | null) => void;
227
+ /** @hidden */
228
+ onTouched: () => void;
213
229
  /** @hidden */
214
230
  ngOnChanges(changes: any): void;
215
231
  /** @hidden */
@@ -285,6 +301,10 @@ export declare class DatetimePickerComponent<D> implements OnInit, OnDestroy, On
285
301
  */
286
302
  handleInputChange(inputStr: string, isTypeEvent: boolean): void;
287
303
  /** @hidden */
304
+ dialogApprove(): void;
305
+ /** Method used to restore original value for mobile mode. */
306
+ dialogDismiss(value: D): void;
307
+ /** @hidden */
288
308
  _changeMessageVisibility(): void;
289
309
  /** @hidden */
290
310
  _onOpenStateChanged(isOpen: boolean): void;
@@ -309,6 +329,8 @@ export declare class DatetimePickerComponent<D> implements OnInit, OnDestroy, On
309
329
  private _setTempDateTime;
310
330
  /** @hidden */
311
331
  private _calculateTimeOptions;
332
+ /** @hidden */
333
+ private _setUpMobileMode;
312
334
  static ɵfac: i0.ɵɵFactoryDeclaration<DatetimePickerComponent<any>, [null, null, { optional: true; }, { optional: true; }, null]>;
313
- static ɵcmp: i0.ɵɵComponentDeclaration<DatetimePickerComponent<any>, "fd-datetime-picker", never, { "placeholder": { "alias": "placeholder"; "required": false; }; "placement": { "alias": "placement"; "required": false; }; "appendTo": { "alias": "appendTo"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "inputId": { "alias": "inputId"; "required": false; }; "required": { "alias": "required"; "required": false; }; "meridian": { "alias": "meridian"; "required": false; }; "displaySeconds": { "alias": "displaySeconds"; "required": false; }; "ariaLabelledBy": { "alias": "ariaLabelledBy"; "required": false; }; "message": { "alias": "message"; "required": false; }; "messageTriggers": { "alias": "messageTriggers"; "required": false; }; "displayMinutes": { "alias": "displayMinutes"; "required": false; }; "displayHours": { "alias": "displayHours"; "required": false; }; "useValidation": { "alias": "useValidation"; "required": false; }; "date": { "alias": "date"; "required": false; }; "isOpen": { "alias": "isOpen"; "required": false; }; "startingDayOfWeek": { "alias": "startingDayOfWeek"; "required": false; }; "activeView": { "alias": "activeView"; "required": false; }; "allowNull": { "alias": "allowNull"; "required": false; }; "keepTwoDigitsTime": { "alias": "keepTwoDigitsTime"; "required": false; }; "state": { "alias": "state"; "required": false; }; "buttonFocusable": { "alias": "buttonFocusable"; "required": false; }; "specialDaysRules": { "alias": "specialDaysRules"; "required": false; }; "yearGrid": { "alias": "yearGrid"; "required": false; }; "aggregatedYearGrid": { "alias": "aggregatedYearGrid"; "required": false; }; "markWeekends": { "alias": "markWeekends"; "required": false; }; "spinnerButtons": { "alias": "spinnerButtons"; "required": false; }; "showWeekNumbers": { "alias": "showWeekNumbers"; "required": false; }; "showFooter": { "alias": "showFooter"; "required": false; }; "processInputOnBlur": { "alias": "processInputOnBlur"; "required": false; }; "preventScrollOnFocus": { "alias": "preventScrollOnFocus"; "required": false; }; "disableFunction": { "alias": "disableFunction"; "required": false; }; }, { "isOpenChange": "isOpenChange"; "activeViewChange": "activeViewChange"; "dateChange": "dateChange"; "calendarChange": "calendarChange"; "timeChange": "timeChange"; "onClose": "onClose"; "touched": "touched"; }, never, ["*"], false, never, false>;
335
+ static ɵcmp: i0.ɵɵComponentDeclaration<DatetimePickerComponent<any>, "fd-datetime-picker", never, { "placeholder": { "alias": "placeholder"; "required": false; }; "placement": { "alias": "placement"; "required": false; }; "appendTo": { "alias": "appendTo"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "inputId": { "alias": "inputId"; "required": false; }; "required": { "alias": "required"; "required": false; }; "meridian": { "alias": "meridian"; "required": false; }; "displaySeconds": { "alias": "displaySeconds"; "required": false; }; "ariaLabelledBy": { "alias": "ariaLabelledBy"; "required": false; }; "message": { "alias": "message"; "required": false; }; "messageTriggers": { "alias": "messageTriggers"; "required": false; }; "displayMinutes": { "alias": "displayMinutes"; "required": false; }; "displayHours": { "alias": "displayHours"; "required": false; }; "useValidation": { "alias": "useValidation"; "required": false; }; "date": { "alias": "date"; "required": false; }; "isOpen": { "alias": "isOpen"; "required": false; }; "startingDayOfWeek": { "alias": "startingDayOfWeek"; "required": false; }; "activeView": { "alias": "activeView"; "required": false; }; "allowNull": { "alias": "allowNull"; "required": false; }; "keepTwoDigitsTime": { "alias": "keepTwoDigitsTime"; "required": false; }; "state": { "alias": "state"; "required": false; }; "buttonFocusable": { "alias": "buttonFocusable"; "required": false; }; "specialDaysRules": { "alias": "specialDaysRules"; "required": false; }; "yearGrid": { "alias": "yearGrid"; "required": false; }; "aggregatedYearGrid": { "alias": "aggregatedYearGrid"; "required": false; }; "markWeekends": { "alias": "markWeekends"; "required": false; }; "spinnerButtons": { "alias": "spinnerButtons"; "required": false; }; "showWeekNumbers": { "alias": "showWeekNumbers"; "required": false; }; "showFooter": { "alias": "showFooter"; "required": false; }; "processInputOnBlur": { "alias": "processInputOnBlur"; "required": false; }; "preventScrollOnFocus": { "alias": "preventScrollOnFocus"; "required": false; }; "mobile": { "alias": "mobile"; "required": false; }; "mobileConfig": { "alias": "mobileConfig"; "required": false; }; "mobileLandscape": { "alias": "mobileLandscape"; "required": false; }; "mobilePortrait": { "alias": "mobilePortrait"; "required": false; }; "disableFunction": { "alias": "disableFunction"; "required": false; }; }, { "isOpenChange": "isOpenChange"; "activeViewChange": "activeViewChange"; "dateChange": "dateChange"; "calendarChange": "calendarChange"; "timeChange": "timeChange"; "onClose": "onClose"; "touched": "touched"; }, never, ["*"], true, never, false>;
314
336
  }
@@ -0,0 +1,9 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import { Nullable } from '@fundamental-ngx/cdk/utils';
3
+ import { MobileMode } from '@fundamental-ngx/core/mobile-mode';
4
+ export interface DateTimePicker<D> extends MobileMode {
5
+ date: Nullable<D>;
6
+ isOpenChange: EventEmitter<boolean>;
7
+ dialogApprove(): void;
8
+ dialogDismiss(value: Nullable<D>): void;
9
+ }
@@ -1,20 +1,8 @@
1
1
  import * as i0 from "@angular/core";
2
2
  import * as i1 from "./datetime-picker.component";
3
- import * as i2 from "@angular/common";
4
- import * as i3 from "@fundamental-ngx/core/icon";
5
- import * as i4 from "@fundamental-ngx/core/popover";
6
- import * as i5 from "@fundamental-ngx/core/calendar";
7
- import * as i6 from "@angular/forms";
8
- import * as i7 from "@fundamental-ngx/core/time";
9
- import * as i8 from "@fundamental-ngx/core/input-group";
10
- import * as i9 from "@fundamental-ngx/core/button";
11
- import * as i10 from "@fundamental-ngx/i18n";
12
- import * as i11 from "@fundamental-ngx/core/bar";
13
- import * as i12 from "@fundamental-ngx/core/segmented-button";
14
- import * as i13 from "@fundamental-ngx/core/form";
15
- import * as i14 from "@fundamental-ngx/core/content-density";
3
+ import * as i2 from "./datetime-picker-mobile/datetime-picker-mobile.component";
16
4
  export declare class DatetimePickerModule {
17
5
  static ɵfac: i0.ɵɵFactoryDeclaration<DatetimePickerModule, never>;
18
- static ɵmod: i0.ɵɵNgModuleDeclaration<DatetimePickerModule, [typeof i1.DatetimePickerComponent], [typeof i2.CommonModule, typeof i3.IconModule, typeof i4.PopoverModule, typeof i5.CalendarModule, typeof i6.FormsModule, typeof i7.TimeModule, typeof i8.InputGroupModule, typeof i9.ButtonModule, typeof i10.I18nModule, typeof i11.BarModule, typeof i12.SegmentedButtonModule, typeof i13.FormMessageModule, typeof i14.ContentDensityModule], [typeof i1.DatetimePickerComponent, typeof i14.ContentDensityModule]>;
6
+ static ɵmod: i0.ɵɵNgModuleDeclaration<DatetimePickerModule, never, [typeof i1.DatetimePickerComponent, typeof i2.DatetimePickerMobileComponent], [typeof i1.DatetimePickerComponent, typeof i2.DatetimePickerMobileComponent]>;
19
7
  static ɵinj: i0.ɵɵInjectorDeclaration<DatetimePickerModule>;
20
8
  }
@@ -1,2 +1,4 @@
1
1
  export * from './datetime-picker.module';
2
2
  export * from './datetime-picker.component';
3
+ export * from './datetime-picker-mobile/datetime-picker-mobile.component';
4
+ export * from './datetime-picker.model';
@@ -0,0 +1,5 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ import { DateTimePicker } from './datetime-picker.model';
3
+ import { MobileModeConfig } from '@fundamental-ngx/core/mobile-mode';
4
+ export declare const FD_DATETIME_PICKER_COMPONENT: InjectionToken<DateTimePicker<any>>;
5
+ export declare const FD_DATETIME_PICKER_MOBILE_CONFIG: InjectionToken<MobileModeConfig>;
@@ -18,7 +18,7 @@ export class CalendarCloseButtonDirective {
18
18
  this._calendarI18nLabels = _calendarI18nLabels;
19
19
  }
20
20
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.0", ngImport: i0, type: CalendarCloseButtonDirective, deps: [{ token: 'aria-label', attribute: true }, { token: 'title', attribute: true }, { token: i1.CalendarI18nLabels }], target: i0.ɵɵFactoryTarget.Directive }); }
21
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.0", type: CalendarCloseButtonDirective, selector: "[fd-calendar-close-button]", host: { properties: { "attr.aria-label": "_ariaLabel", "attr.title": "_title" }, classAttribute: "fd-calendar__close-button" }, ngImport: i0 }); }
21
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.0", type: CalendarCloseButtonDirective, isStandalone: true, selector: "[fd-calendar-close-button]", host: { properties: { "attr.aria-label": "_ariaLabel", "attr.title": "_title" }, classAttribute: "fd-calendar__close-button" }, ngImport: i0 }); }
22
22
  }
23
23
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImport: i0, type: CalendarCloseButtonDirective, decorators: [{
24
24
  type: Directive,
@@ -29,7 +29,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImpor
29
29
  class: 'fd-calendar__close-button',
30
30
  '[attr.aria-label]': '_ariaLabel',
31
31
  '[attr.title]': '_title'
32
- }
32
+ },
33
+ standalone: true
33
34
  }]
34
35
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
35
36
  type: Attribute,
@@ -38,4 +39,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImpor
38
39
  type: Attribute,
39
40
  args: ['title']
40
41
  }] }, { type: i1.CalendarI18nLabels }]; } });
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItZGlyZWN0aXZlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2NhbGVuZGFyL2NhbGVuZGFyLWRpcmVjdGl2ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFckQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7OztBQVdqRSxNQUFNLE9BQU8sNEJBQTRCO0lBQ3JDLGNBQWM7SUFDZCxJQUFJLFVBQVU7UUFDVixPQUFPLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsa0JBQWtCLENBQUM7SUFDbEYsQ0FBQztJQUVELGNBQWM7SUFDZCxJQUFJLE1BQU07UUFDTixPQUFPLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLGtCQUFrQixDQUFDO0lBQzlFLENBQUM7SUFFRCxjQUFjO0lBQ2QsWUFDcUMsa0JBQTBCLEVBQy9CLGNBQXNCLEVBQzFDLG1CQUF1QztRQUZkLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBUTtRQUMvQixtQkFBYyxHQUFkLGNBQWMsQ0FBUTtRQUMxQyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQW9CO0lBQ2hELENBQUM7OEdBaEJLLDRCQUE0QixrQkFhdEIsWUFBWSw4QkFDWixPQUFPO2tHQWRiLDRCQUE0Qjs7MkZBQTVCLDRCQUE0QjtrQkFUeEMsU0FBUzttQkFBQztvQkFDUCw4REFBOEQ7b0JBQzlELFFBQVEsRUFBRSw0QkFBNEI7b0JBQ3RDLElBQUksRUFBRTt3QkFDRixLQUFLLEVBQUUsMkJBQTJCO3dCQUNsQyxtQkFBbUIsRUFBRSxZQUFZO3dCQUNqQyxjQUFjLEVBQUUsUUFBUTtxQkFDM0I7aUJBQ0o7OzBCQWNRLFNBQVM7MkJBQUMsWUFBWTs7MEJBQ3RCLFNBQVM7MkJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF0dHJpYnV0ZSwgRGlyZWN0aXZlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IENhbGVuZGFySTE4bkxhYmVscyB9IGZyb20gJy4vaTE4bi9jYWxlbmRhci1pMThuLWxhYmVscyc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvZGlyZWN0aXZlLXNlbGVjdG9yXG4gICAgc2VsZWN0b3I6ICdbZmQtY2FsZW5kYXItY2xvc2UtYnV0dG9uXScsXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ2ZkLWNhbGVuZGFyX19jbG9zZS1idXR0b24nLFxuICAgICAgICAnW2F0dHIuYXJpYS1sYWJlbF0nOiAnX2FyaWFMYWJlbCcsXG4gICAgICAgICdbYXR0ci50aXRsZV0nOiAnX3RpdGxlJ1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgQ2FsZW5kYXJDbG9zZUJ1dHRvbkRpcmVjdGl2ZSB7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX2FyaWFMYWJlbCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fb3JpZ2luYWxBcmlhTGFiZWwgfHwgdGhpcy5fY2FsZW5kYXJJMThuTGFiZWxzLmNsb3NlQ2FsZW5kYXJMYWJlbDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfdGl0bGUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29yaWdpbmFsVGl0bGUgfHwgdGhpcy5fY2FsZW5kYXJJMThuTGFiZWxzLmNsb3NlQ2FsZW5kYXJMYWJlbDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBAQXR0cmlidXRlKCdhcmlhLWxhYmVsJykgcHJpdmF0ZSBfb3JpZ2luYWxBcmlhTGFiZWw6IHN0cmluZyxcbiAgICAgICAgQEF0dHJpYnV0ZSgndGl0bGUnKSBwcml2YXRlIF9vcmlnaW5hbFRpdGxlOiBzdHJpbmcsXG4gICAgICAgIHByaXZhdGUgX2NhbGVuZGFySTE4bkxhYmVsczogQ2FsZW5kYXJJMThuTGFiZWxzXG4gICAgKSB7fVxufVxuIl19
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItZGlyZWN0aXZlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2NhbGVuZGFyL2NhbGVuZGFyLWRpcmVjdGl2ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFckQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7OztBQVlqRSxNQUFNLE9BQU8sNEJBQTRCO0lBQ3JDLGNBQWM7SUFDZCxJQUFJLFVBQVU7UUFDVixPQUFPLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsa0JBQWtCLENBQUM7SUFDbEYsQ0FBQztJQUVELGNBQWM7SUFDZCxJQUFJLE1BQU07UUFDTixPQUFPLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLGtCQUFrQixDQUFDO0lBQzlFLENBQUM7SUFFRCxjQUFjO0lBQ2QsWUFDcUMsa0JBQTBCLEVBQy9CLGNBQXNCLEVBQzFDLG1CQUF1QztRQUZkLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBUTtRQUMvQixtQkFBYyxHQUFkLGNBQWMsQ0FBUTtRQUMxQyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQW9CO0lBQ2hELENBQUM7OEdBaEJLLDRCQUE0QixrQkFhdEIsWUFBWSw4QkFDWixPQUFPO2tHQWRiLDRCQUE0Qjs7MkZBQTVCLDRCQUE0QjtrQkFWeEMsU0FBUzttQkFBQztvQkFDUCw4REFBOEQ7b0JBQzlELFFBQVEsRUFBRSw0QkFBNEI7b0JBQ3RDLElBQUksRUFBRTt3QkFDRixLQUFLLEVBQUUsMkJBQTJCO3dCQUNsQyxtQkFBbUIsRUFBRSxZQUFZO3dCQUNqQyxjQUFjLEVBQUUsUUFBUTtxQkFDM0I7b0JBQ0QsVUFBVSxFQUFFLElBQUk7aUJBQ25COzswQkFjUSxTQUFTOzJCQUFDLFlBQVk7OzBCQUN0QixTQUFTOzJCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdHRyaWJ1dGUsIERpcmVjdGl2ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBDYWxlbmRhckkxOG5MYWJlbHMgfSBmcm9tICcuL2kxOG4vY2FsZW5kYXItaTE4bi1sYWJlbHMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1zZWxlY3RvclxuICAgIHNlbGVjdG9yOiAnW2ZkLWNhbGVuZGFyLWNsb3NlLWJ1dHRvbl0nLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICdmZC1jYWxlbmRhcl9fY2xvc2UtYnV0dG9uJyxcbiAgICAgICAgJ1thdHRyLmFyaWEtbGFiZWxdJzogJ19hcmlhTGFiZWwnLFxuICAgICAgICAnW2F0dHIudGl0bGVdJzogJ190aXRsZSdcbiAgICB9LFxuICAgIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgQ2FsZW5kYXJDbG9zZUJ1dHRvbkRpcmVjdGl2ZSB7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX2FyaWFMYWJlbCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fb3JpZ2luYWxBcmlhTGFiZWwgfHwgdGhpcy5fY2FsZW5kYXJJMThuTGFiZWxzLmNsb3NlQ2FsZW5kYXJMYWJlbDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfdGl0bGUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29yaWdpbmFsVGl0bGUgfHwgdGhpcy5fY2FsZW5kYXJJMThuTGFiZWxzLmNsb3NlQ2FsZW5kYXJMYWJlbDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBAQXR0cmlidXRlKCdhcmlhLWxhYmVsJykgcHJpdmF0ZSBfb3JpZ2luYWxBcmlhTGFiZWw6IHN0cmluZyxcbiAgICAgICAgQEF0dHJpYnV0ZSgndGl0bGUnKSBwcml2YXRlIF9vcmlnaW5hbFRpdGxlOiBzdHJpbmcsXG4gICAgICAgIHByaXZhdGUgX2NhbGVuZGFySTE4bkxhYmVsczogQ2FsZW5kYXJJMThuTGFiZWxzXG4gICAgKSB7fVxufVxuIl19
@@ -4,13 +4,13 @@ import { Subject } from 'rxjs';
4
4
  import { DatetimeAdapter } from '@fundamental-ngx/core/datetime';
5
5
  import { CalendarI18nLabels } from '../i18n/calendar-i18n-labels';
6
6
  import { CalendarService } from '../calendar.service';
7
+ import { NgIf } from '@angular/common';
8
+ import { ButtonModule } from '@fundamental-ngx/core/button';
7
9
  import * as i0 from "@angular/core";
8
10
  import * as i1 from "../i18n/calendar-i18n-labels";
9
11
  import * as i2 from "../calendar.service";
10
12
  import * as i3 from "@fundamental-ngx/core/datetime";
11
- import * as i4 from "@angular/common";
12
- import * as i5 from "@fundamental-ngx/core/button";
13
- import * as i6 from "../calendar-directives";
13
+ import * as i4 from "@fundamental-ngx/core/button";
14
14
  /**
15
15
  * Internal use only.
16
16
  * Header of the calendar component.
@@ -107,7 +107,7 @@ export class CalendarHeaderComponent {
107
107
  this._changeDetRef = _changeDetRef;
108
108
  this._calendarService = _calendarService;
109
109
  this._dateTimeAdapter = _dateTimeAdapter;
110
- /** Whether close button should be shown */
110
+ /** Whether calendar should be rendered in mobile landscape mode. */
111
111
  this.mobileLandscape = false;
112
112
  /** Event emitted when the active view should change. */
113
113
  this.activeViewChange = new EventEmitter();
@@ -115,8 +115,6 @@ export class CalendarHeaderComponent {
115
115
  this.previousClicked = new EventEmitter();
116
116
  /** Event emitted when the next button is clicked. */
117
117
  this.nextClicked = new EventEmitter();
118
- /** Event thrown, when the close button is clicked */
119
- this.closeClicked = new EventEmitter();
120
118
  /** An RxJS Subject that will kill the data stream upon component’s destruction (for unsubscribing) */
121
119
  this._onDestroy$ = new Subject();
122
120
  /** Month names */
@@ -161,10 +159,6 @@ export class CalendarHeaderComponent {
161
159
  this.activeViewChange.emit(this.activeView);
162
160
  }
163
161
  /** @hidden */
164
- _emitClose() {
165
- this.closeClicked.emit();
166
- }
167
- /** @hidden */
168
162
  _listenToLocaleChanges() {
169
163
  this._dateTimeAdapter.localeChanges.pipe(takeUntil(this._onDestroy$)).subscribe(() => {
170
164
  this._calculateMonthNames();
@@ -242,13 +236,13 @@ export class CalendarHeaderComponent {
242
236
  return this._dateTimeAdapter.getYearName(this._dateTimeAdapter.createDate(year, 1, 1));
243
237
  }
244
238
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.0", ngImport: i0, type: CalendarHeaderComponent, deps: [{ token: i1.CalendarI18nLabels }, { token: i0.ChangeDetectorRef }, { token: i2.CalendarService }, { token: i3.DatetimeAdapter }], target: i0.ɵɵFactoryTarget.Component }); }
245
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.0", type: CalendarHeaderComponent, selector: "fd-calendar-header", inputs: { activeView: "activeView", currentlyDisplayed: "currentlyDisplayed", previousButtonDisabled: "previousButtonDisabled", nextButtonDisabled: "nextButtonDisabled", calendarYearGrid: "calendarYearGrid", id: "id", mobileLandscape: "mobileLandscape" }, outputs: { activeViewChange: "activeViewChange", previousClicked: "previousClicked", nextClicked: "nextClicked", closeClicked: "closeClicked" }, host: { properties: { "attr.id": "viewId" } }, viewQueries: [{ propertyName: "_prevButtonComponent", first: true, predicate: ["prevButton"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<header class=\"fd-calendar__header\">\n <div class=\"fd-calendar__navigation\" [class.fd-calendar__navigation--main]=\"mobileLandscape\">\n <div class=\"fd-calendar__action fd-calendar__action--arrow-left\">\n <button\n #prevButton\n fd-button\n fdType=\"transparent\"\n glyph=\"slim-arrow-left\"\n [attr.id]=\"_prevButtonId\"\n [disabled]=\"previousButtonDisabled\"\n [attr.title]=\"previousAriaLabel\"\n [ariaLabel]=\"previousAriaLabel\"\n type=\"button\"\n (click)=\"previousClicked.emit()\"\n ></button>\n </div>\n <ng-container *ngIf=\"isOnDayView || isOnMonthView\">\n <div class=\"fd-calendar__action\">\n <!-- Select month button -->\n <button\n fd-button\n type=\"button\"\n fdType=\"transparent\"\n [attr.aria-labelledby]=\"_monthButtonLabelId + ' ' + _selectMonthButtonAriaLabelId\"\n [attr.data-fd-calendar-month]=\"currentlyDisplayed.month\"\n (click)=\"_processViewChange('month', $event)\"\n >\n <span [attr.id]=\"_monthButtonLabelId\">{{ selectMonthLabel }}</span>\n </button>\n </div>\n <div class=\"fd-calendar__action\">\n <!-- Select year button -->\n <button\n fd-button\n type=\"button\"\n fdType=\"transparent\"\n [attr.aria-labelledby]=\"_yearButtonLabelId + ' ' + _selectYearButtonAriaLabelId\"\n [attr.data-fd-calendar-year]=\"currentlyDisplayed.year\"\n (click)=\"_processViewChange('year', $event)\"\n >\n <span [attr.id]=\"_yearButtonLabelId\">{{ selectYearLabel }}</span>\n </button>\n </div>\n </ng-container>\n <ng-container *ngIf=\"isOnAggregatedYearsView || isOnYearView\">\n <div class=\"fd-calendar__action\" aria-live=\"polite\">\n <button\n fd-button\n fdType=\"transparent\"\n [attr.aria-labelledby]=\"_yearsRangeButtonLabelId + ' ' + _selectYearsRangeButtonAriaLabelId\"\n (click)=\"_processViewChange('aggregatedYear', $event)\"\n type=\"button\"\n >\n <span [attr.id]=\"_yearsRangeButtonLabelId\">{{ selectAggregatedYearLabel }}</span>\n </button>\n </div>\n </ng-container>\n <div class=\"fd-calendar__action fd-calendar__action--arrow-right\">\n <button\n fd-button\n fdType=\"transparent\"\n glyph=\"slim-arrow-right\"\n [attr.id]=\"_nextButtonId\"\n [disabled]=\"nextButtonDisabled\"\n [attr.title]=\"nextAriaLabel\"\n [ariaLabel]=\"nextAriaLabel\"\n (click)=\"nextClicked.emit()\"\n type=\"button\"\n ></button>\n </div>\n <button\n *ngIf=\"mobileLandscape\"\n fd-button\n fd-calendar-close-button\n class=\"fd-calendar__close-button--navigation\"\n type=\"button\"\n glyph=\"decline\"\n fdType=\"transparent\"\n (click)=\"_emitClose()\"\n ></button>\n </div>\n\n <!-- Hidden elements for aria purposes -->\n <div hidden aria-hidden=\"true\">\n <div [attr.id]=\"_selectMonthButtonAriaLabelId\">{{ selectMonthAriaLabel }}</div>\n <div [attr.id]=\"_selectYearButtonAriaLabelId\">{{ selectYearAriaLabel }}</div>\n <div [attr.id]=\"_selectYearsRangeButtonAriaLabelId\">{{ selectAggregatedYearAriaLabel }}</div>\n </div>\n</header>\n", styles: [""], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "directive", type: i6.CalendarCloseButtonDirective, selector: "[fd-calendar-close-button]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
239
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.0", type: CalendarHeaderComponent, isStandalone: true, selector: "fd-calendar-header", inputs: { activeView: "activeView", currentlyDisplayed: "currentlyDisplayed", previousButtonDisabled: "previousButtonDisabled", nextButtonDisabled: "nextButtonDisabled", calendarYearGrid: "calendarYearGrid", id: "id", mobileLandscape: "mobileLandscape" }, outputs: { activeViewChange: "activeViewChange", previousClicked: "previousClicked", nextClicked: "nextClicked" }, host: { properties: { "attr.id": "viewId" } }, viewQueries: [{ propertyName: "_prevButtonComponent", first: true, predicate: ["prevButton"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<header class=\"fd-calendar__navigation\" [class.fd-calendar__navigation--main]=\"mobileLandscape\">\n <div class=\"fd-calendar__action fd-calendar__action--arrow-left\">\n <button\n #prevButton\n fd-button\n fdType=\"transparent\"\n glyph=\"slim-arrow-left\"\n [attr.id]=\"_prevButtonId\"\n [disabled]=\"previousButtonDisabled\"\n [attr.title]=\"previousAriaLabel\"\n [ariaLabel]=\"previousAriaLabel\"\n type=\"button\"\n (click)=\"previousClicked.emit()\"\n ></button>\n </div>\n <ng-container *ngIf=\"isOnDayView || isOnMonthView\">\n <div class=\"fd-calendar__action\">\n <!-- Select month button -->\n <button\n fd-button\n type=\"button\"\n fdType=\"transparent\"\n [attr.aria-labelledby]=\"_monthButtonLabelId + ' ' + _selectMonthButtonAriaLabelId\"\n [attr.data-fd-calendar-month]=\"currentlyDisplayed.month\"\n (click)=\"_processViewChange('month', $event)\"\n >\n <span [attr.id]=\"_monthButtonLabelId\">{{ selectMonthLabel }}</span>\n </button>\n </div>\n <div class=\"fd-calendar__action\">\n <!-- Select year button -->\n <button\n fd-button\n type=\"button\"\n fdType=\"transparent\"\n [attr.aria-labelledby]=\"_yearButtonLabelId + ' ' + _selectYearButtonAriaLabelId\"\n [attr.data-fd-calendar-year]=\"currentlyDisplayed.year\"\n (click)=\"_processViewChange('year', $event)\"\n >\n <span [attr.id]=\"_yearButtonLabelId\">{{ selectYearLabel }}</span>\n </button>\n </div>\n </ng-container>\n <ng-container *ngIf=\"isOnAggregatedYearsView || isOnYearView\">\n <div class=\"fd-calendar__action\" aria-live=\"polite\">\n <button\n fd-button\n fdType=\"transparent\"\n [attr.aria-labelledby]=\"_yearsRangeButtonLabelId + ' ' + _selectYearsRangeButtonAriaLabelId\"\n (click)=\"_processViewChange('aggregatedYear', $event)\"\n type=\"button\"\n >\n <span [attr.id]=\"_yearsRangeButtonLabelId\">{{ selectAggregatedYearLabel }}</span>\n </button>\n </div>\n </ng-container>\n <div class=\"fd-calendar__action fd-calendar__action--arrow-right\">\n <button\n fd-button\n fdType=\"transparent\"\n glyph=\"slim-arrow-right\"\n [attr.id]=\"_nextButtonId\"\n [disabled]=\"nextButtonDisabled\"\n [attr.title]=\"nextAriaLabel\"\n [ariaLabel]=\"nextAriaLabel\"\n (click)=\"nextClicked.emit()\"\n type=\"button\"\n ></button>\n </div>\n</header>\n\n<!-- Hidden elements for aria purposes -->\n<div hidden aria-hidden=\"true\">\n <div [attr.id]=\"_selectMonthButtonAriaLabelId\">{{ selectMonthAriaLabel }}</div>\n <div [attr.id]=\"_selectYearButtonAriaLabelId\">{{ selectYearAriaLabel }}</div>\n <div [attr.id]=\"_selectYearsRangeButtonAriaLabelId\">{{ selectAggregatedYearAriaLabel }}</div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i4.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
246
240
  }
247
241
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImport: i0, type: CalendarHeaderComponent, decorators: [{
248
242
  type: Component,
249
243
  args: [{ selector: 'fd-calendar-header', encapsulation: ViewEncapsulation.None, host: {
250
244
  '[attr.id]': 'viewId'
251
- }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<header class=\"fd-calendar__header\">\n <div class=\"fd-calendar__navigation\" [class.fd-calendar__navigation--main]=\"mobileLandscape\">\n <div class=\"fd-calendar__action fd-calendar__action--arrow-left\">\n <button\n #prevButton\n fd-button\n fdType=\"transparent\"\n glyph=\"slim-arrow-left\"\n [attr.id]=\"_prevButtonId\"\n [disabled]=\"previousButtonDisabled\"\n [attr.title]=\"previousAriaLabel\"\n [ariaLabel]=\"previousAriaLabel\"\n type=\"button\"\n (click)=\"previousClicked.emit()\"\n ></button>\n </div>\n <ng-container *ngIf=\"isOnDayView || isOnMonthView\">\n <div class=\"fd-calendar__action\">\n <!-- Select month button -->\n <button\n fd-button\n type=\"button\"\n fdType=\"transparent\"\n [attr.aria-labelledby]=\"_monthButtonLabelId + ' ' + _selectMonthButtonAriaLabelId\"\n [attr.data-fd-calendar-month]=\"currentlyDisplayed.month\"\n (click)=\"_processViewChange('month', $event)\"\n >\n <span [attr.id]=\"_monthButtonLabelId\">{{ selectMonthLabel }}</span>\n </button>\n </div>\n <div class=\"fd-calendar__action\">\n <!-- Select year button -->\n <button\n fd-button\n type=\"button\"\n fdType=\"transparent\"\n [attr.aria-labelledby]=\"_yearButtonLabelId + ' ' + _selectYearButtonAriaLabelId\"\n [attr.data-fd-calendar-year]=\"currentlyDisplayed.year\"\n (click)=\"_processViewChange('year', $event)\"\n >\n <span [attr.id]=\"_yearButtonLabelId\">{{ selectYearLabel }}</span>\n </button>\n </div>\n </ng-container>\n <ng-container *ngIf=\"isOnAggregatedYearsView || isOnYearView\">\n <div class=\"fd-calendar__action\" aria-live=\"polite\">\n <button\n fd-button\n fdType=\"transparent\"\n [attr.aria-labelledby]=\"_yearsRangeButtonLabelId + ' ' + _selectYearsRangeButtonAriaLabelId\"\n (click)=\"_processViewChange('aggregatedYear', $event)\"\n type=\"button\"\n >\n <span [attr.id]=\"_yearsRangeButtonLabelId\">{{ selectAggregatedYearLabel }}</span>\n </button>\n </div>\n </ng-container>\n <div class=\"fd-calendar__action fd-calendar__action--arrow-right\">\n <button\n fd-button\n fdType=\"transparent\"\n glyph=\"slim-arrow-right\"\n [attr.id]=\"_nextButtonId\"\n [disabled]=\"nextButtonDisabled\"\n [attr.title]=\"nextAriaLabel\"\n [ariaLabel]=\"nextAriaLabel\"\n (click)=\"nextClicked.emit()\"\n type=\"button\"\n ></button>\n </div>\n <button\n *ngIf=\"mobileLandscape\"\n fd-button\n fd-calendar-close-button\n class=\"fd-calendar__close-button--navigation\"\n type=\"button\"\n glyph=\"decline\"\n fdType=\"transparent\"\n (click)=\"_emitClose()\"\n ></button>\n </div>\n\n <!-- Hidden elements for aria purposes -->\n <div hidden aria-hidden=\"true\">\n <div [attr.id]=\"_selectMonthButtonAriaLabelId\">{{ selectMonthAriaLabel }}</div>\n <div [attr.id]=\"_selectYearButtonAriaLabelId\">{{ selectYearAriaLabel }}</div>\n <div [attr.id]=\"_selectYearsRangeButtonAriaLabelId\">{{ selectAggregatedYearAriaLabel }}</div>\n </div>\n</header>\n" }]
245
+ }, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [ButtonModule, NgIf], template: "<header class=\"fd-calendar__navigation\" [class.fd-calendar__navigation--main]=\"mobileLandscape\">\n <div class=\"fd-calendar__action fd-calendar__action--arrow-left\">\n <button\n #prevButton\n fd-button\n fdType=\"transparent\"\n glyph=\"slim-arrow-left\"\n [attr.id]=\"_prevButtonId\"\n [disabled]=\"previousButtonDisabled\"\n [attr.title]=\"previousAriaLabel\"\n [ariaLabel]=\"previousAriaLabel\"\n type=\"button\"\n (click)=\"previousClicked.emit()\"\n ></button>\n </div>\n <ng-container *ngIf=\"isOnDayView || isOnMonthView\">\n <div class=\"fd-calendar__action\">\n <!-- Select month button -->\n <button\n fd-button\n type=\"button\"\n fdType=\"transparent\"\n [attr.aria-labelledby]=\"_monthButtonLabelId + ' ' + _selectMonthButtonAriaLabelId\"\n [attr.data-fd-calendar-month]=\"currentlyDisplayed.month\"\n (click)=\"_processViewChange('month', $event)\"\n >\n <span [attr.id]=\"_monthButtonLabelId\">{{ selectMonthLabel }}</span>\n </button>\n </div>\n <div class=\"fd-calendar__action\">\n <!-- Select year button -->\n <button\n fd-button\n type=\"button\"\n fdType=\"transparent\"\n [attr.aria-labelledby]=\"_yearButtonLabelId + ' ' + _selectYearButtonAriaLabelId\"\n [attr.data-fd-calendar-year]=\"currentlyDisplayed.year\"\n (click)=\"_processViewChange('year', $event)\"\n >\n <span [attr.id]=\"_yearButtonLabelId\">{{ selectYearLabel }}</span>\n </button>\n </div>\n </ng-container>\n <ng-container *ngIf=\"isOnAggregatedYearsView || isOnYearView\">\n <div class=\"fd-calendar__action\" aria-live=\"polite\">\n <button\n fd-button\n fdType=\"transparent\"\n [attr.aria-labelledby]=\"_yearsRangeButtonLabelId + ' ' + _selectYearsRangeButtonAriaLabelId\"\n (click)=\"_processViewChange('aggregatedYear', $event)\"\n type=\"button\"\n >\n <span [attr.id]=\"_yearsRangeButtonLabelId\">{{ selectAggregatedYearLabel }}</span>\n </button>\n </div>\n </ng-container>\n <div class=\"fd-calendar__action fd-calendar__action--arrow-right\">\n <button\n fd-button\n fdType=\"transparent\"\n glyph=\"slim-arrow-right\"\n [attr.id]=\"_nextButtonId\"\n [disabled]=\"nextButtonDisabled\"\n [attr.title]=\"nextAriaLabel\"\n [ariaLabel]=\"nextAriaLabel\"\n (click)=\"nextClicked.emit()\"\n type=\"button\"\n ></button>\n </div>\n</header>\n\n<!-- Hidden elements for aria purposes -->\n<div hidden aria-hidden=\"true\">\n <div [attr.id]=\"_selectMonthButtonAriaLabelId\">{{ selectMonthAriaLabel }}</div>\n <div [attr.id]=\"_selectYearButtonAriaLabelId\">{{ selectYearAriaLabel }}</div>\n <div [attr.id]=\"_selectYearsRangeButtonAriaLabelId\">{{ selectAggregatedYearAriaLabel }}</div>\n</div>\n" }]
252
246
  }], ctorParameters: function () { return [{ type: i1.CalendarI18nLabels }, { type: i0.ChangeDetectorRef }, { type: i2.CalendarService }, { type: i3.DatetimeAdapter }]; }, propDecorators: { activeView: [{
253
247
  type: Input
254
248
  }], currentlyDisplayed: [{
@@ -269,10 +263,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImpor
269
263
  type: Output
270
264
  }], nextClicked: [{
271
265
  type: Output
272
- }], closeClicked: [{
273
- type: Output
274
266
  }], _prevButtonComponent: [{
275
267
  type: ViewChild,
276
268
  args: ['prevButton', { read: ElementRef }]
277
269
  }] } });
278
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2NhbGVuZGFyL2NhbGVuZGFyLWhlYWRlci9jYWxlbmRhci1oZWFkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvY2FsZW5kYXIvY2FsZW5kYXItaGVhZGVyL2NhbGVuZGFyLWhlYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxFQUVOLFNBQVMsRUFDVCxpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRWpFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBSWxFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7QUFFdEQ7OztHQUdHO0FBV0gsTUFBTSxPQUFPLHVCQUF1QjtJQWlCaEM7O09BRUc7SUFDSCxJQUNJLGdCQUFnQixDQUFDLFFBQTBCO1FBQzNDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxRQUFRLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxtQ0FBbUMsRUFBRSxDQUFDO0lBQy9DLENBQUM7SUFrREQsOERBQThEO0lBQzlELElBQUksdUJBQXVCO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFVBQVUsS0FBSyxn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O3VCQUFDLFlBQVksRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IERhdGV0aW1lQWRhcHRlciB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9kYXRldGltZSc7XG5cbmltcG9ydCB7IENhbGVuZGFySTE4bkxhYmVscyB9IGZyb20gJy4uL2kxOG4vY2FsZW5kYXItaTE4bi1sYWJlbHMnO1xuaW1wb3J0IHsgRmRDYWxlbmRhclZpZXcgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBDYWxlbmRhckN1cnJlbnQgfSBmcm9tICcuLi9tb2RlbHMvY2FsZW5kYXItY3VycmVudCc7XG5pbXBvcnQgeyBDYWxlbmRhclllYXJHcmlkIH0gZnJvbSAnLi4vbW9kZWxzL2NhbGVuZGFyLXllYXItZ3JpZCc7XG5pbXBvcnQgeyBDYWxlbmRhclNlcnZpY2UgfSBmcm9tICcuLi9jYWxlbmRhci5zZXJ2aWNlJztcblxuLyoqXG4gKiBJbnRlcm5hbCB1c2Ugb25seS5cbiAqIEhlYWRlciBvZiB0aGUgY2FsZW5kYXIgY29tcG9uZW50LlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLWNhbGVuZGFyLWhlYWRlcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NhbGVuZGFyLWhlYWRlci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vY2FsZW5kYXItaGVhZGVyLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBob3N0OiB7XG4gICAgICAgICdbYXR0ci5pZF0nOiAndmlld0lkJ1xuICAgIH0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgQ2FsZW5kYXJIZWFkZXJDb21wb25lbnQ8RD4gaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgICAvKiogQ3VycmVudGx5IGFjdGl2ZSB2aWV3LiBOZWVkZWQgZm9yIGExMXkgbGFiZWxzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYWN0aXZlVmlldzogRmRDYWxlbmRhclZpZXc7XG5cbiAgICAvKiogQ3VycmVudGx5IGRpc3BsYXllZCBkYXRlIG9uIHRoZSBjYWxlbmRhci4gKi9cbiAgICBASW5wdXQoKVxuICAgIGN1cnJlbnRseURpc3BsYXllZDogQ2FsZW5kYXJDdXJyZW50O1xuXG4gICAgLyoqIHdoZXRoZXIgcHJldmlvdXMgbmF2aWdhdGlvbiBidXR0b24gc2hvdWxkIGJlIGRpc2FibGVkIGluIHRoZSBoZWFkZXIuICovXG4gICAgQElucHV0KClcbiAgICBwcmV2aW91c0J1dHRvbkRpc2FibGVkOiBib29sZWFuO1xuXG4gICAgLyoqIHdoZXRoZXIgbmV4dCBuYXZpZ2F0aW9uIGJ1dHRvbiBzaG91bGQgYmUgZGlzYWJsZWQgaW4gdGhlIGhlYWRlci4gKi9cbiAgICBASW5wdXQoKVxuICAgIG5leHRCdXR0b25EaXNhYmxlZDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIE9iamVjdCB0byBjdXN0b21pemUgeWVhciBncmlkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgY2FsZW5kYXJZZWFyR3JpZCh5ZWFyR3JpZDogQ2FsZW5kYXJZZWFyR3JpZCkge1xuICAgICAgICB0aGlzLl9hbW91bnRPZlllYXJzUGVyUGVyaW9kID0geWVhckdyaWQuY29scyAqIHllYXJHcmlkLnJvd3MgLSAxO1xuICAgICAgICB0aGlzLl9jYWxjdWxhdGVTZWxlY3RBZ2dyZWdhdGVkWWVhckxhYmVsKCk7XG4gICAgfVxuXG4gICAgLyoqIENhbGVuZGFyIElEICovXG4gICAgQElucHV0KClcbiAgICBpZDogc3RyaW5nO1xuXG4gICAgLyoqIFdoZXRoZXIgY2xvc2UgYnV0dG9uIHNob3VsZCBiZSBzaG93biAqL1xuICAgIEBJbnB1dCgpXG4gICAgbW9iaWxlTGFuZHNjYXBlID0gZmFsc2U7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBhY3RpdmUgdmlldyBzaG91bGQgY2hhbmdlLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IGFjdGl2ZVZpZXdDaGFuZ2U6IEV2ZW50RW1pdHRlcjxGZENhbGVuZGFyVmlldz4gPSBuZXcgRXZlbnRFbWl0dGVyPEZkQ2FsZW5kYXJWaWV3PigpO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgcHJldmlvdXMgYnV0dG9uIGlzIGNsaWNrZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgcHJldmlvdXNDbGlja2VkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBuZXh0IGJ1dHRvbiBpcyBjbGlja2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IG5leHRDbGlja2VkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKiogRXZlbnQgdGhyb3duLCB3aGVuIHRoZSBjbG9zZSBidXR0b24gaXMgY2xpY2tlZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IGNsb3NlQ2xpY2tlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqIEFyaWEgbGFiZWwgZm9yIHRoZSBwcmV2aW91cyBidXR0b24uIERlcGVuZHMgb24gdGhlIGFjdGl2ZSB2aWV3LiAqL1xuICAgIHByZXZpb3VzQXJpYUxhYmVsOiBzdHJpbmc7XG5cbiAgICAvKiogQXJpYSBsYWJlbCBmb3IgdGhlIG5leHQgYnV0dG9uLiBEZXBlbmRzIG9uIHRoZSBhY3RpdmUgdmlldy4gKi9cbiAgICBuZXh0QXJpYUxhYmVsOiBzdHJpbmc7XG5cbiAgICAvKiogQnV0dG9uIGFyaWEgbGFiZWwgdG8gb3BlbiBtb250aCBzZWxlY3Rpb24gdmlldy4gKi9cbiAgICBzZWxlY3RNb250aEFyaWFMYWJlbDogc3RyaW5nO1xuXG4gICAgLyoqIEJ1dHRvbiBhcmlhIGxhYmVsIHRvIG9wZW4geWVhciBzZWxlY3Rpb24gdmlldy4gKi9cbiAgICBzZWxlY3RZZWFyQXJpYUxhYmVsOiBzdHJpbmc7XG5cbiAgICAvKiogQnV0dG9uIGFyaWEgbGFiZWwgdG8gb3BlbiBhZ2dyZWdhdGVkIHllYXJzIHNlbGVjdGlvbiB2aWV3LiAqL1xuICAgIHNlbGVjdEFnZ3JlZ2F0ZWRZZWFyQXJpYUxhYmVsOiBzdHJpbmc7XG5cbiAgICAvKiogQnV0dG9uIGxhYmVsIHRvIG9wZW4gbW9udGggc2VsZWN0aW9uIHZpZXcuICovXG4gICAgc2VsZWN0TW9udGhMYWJlbDogc3RyaW5nO1xuXG4gICAgLyoqIEJ1dHRvbiBsYWJlbCB0byBvcGVuIHllYXIgc2VsZWN0aW9uIHZpZXcuICovXG4gICAgc2VsZWN0WWVhckxhYmVsOiBzdHJpbmc7XG5cbiAgICAvKiogQnV0dG9uIGxhYmVsIHRvIG9wZW4gYWdncmVnYXRlZCB5ZWFycyBzZWxlY3Rpb24gdmlldy4gKi9cbiAgICBzZWxlY3RBZ2dyZWdhdGVkWWVhckxhYmVsOiBzdHJpbmc7XG5cbiAgICAvKiogR2V0IGluZm9ybWF0aW9uIGlzIGNhbGVuZGFyIGlzIG9uIGFnZ3JlZ2F0ZWQgeWVhcnMgdmlldyAqL1xuICAgIGdldCBpc09uQWdncmVnYXRlZFllYXJzVmlldygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlVmlldyA9PT0gJ2FnZ3JlZ2F0ZWRZZWFyJztcbiAgICB9XG5cbiAgICAvKiogR2V0IGluZm9ybWF0aW9uIGlzIGNhbGVuZGFyIGlzIG9uIHllYXIgdmlldyAqL1xuICAgIGdldCBpc09uWWVhclZpZXcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZVZpZXcgPT09ICd5ZWFyJztcbiAgICB9XG5cbiAgICAvKiogR2V0IGluZm9ybWF0aW9uIGlzIGNhbGVuZGFyIGlzIG9uIG1vbnRoIHZpZXcgKi9cbiAgICBnZXQgaXNPbk1vbnRoVmlldygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlVmlldyA9PT0gJ21vbnRoJztcbiAgICB9XG5cbiAgICAvKiogR2V0IGluZm9ybWF0aW9uIGlzIGNhbGVuZGFyIGlzIG9uIGRheSB2aWV3ICovXG4gICAgZ2V0IGlzT25EYXlWaWV3KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmVWaWV3ID09PSAnZGF5JztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21wb25lbnQgaWRcbiAgICAgKi9cbiAgICBnZXQgdmlld0lkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmlkICsgJy1oZWFkZXInO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBQcmV2aW91cyBidXR0b24gaWRcbiAgICAgKi9cbiAgICBnZXQgX3ByZXZCdXR0b25JZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3SWQgKyAnLWxlZnQtYXJyb3cnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBOZXh0IGJ1dHRvbiBpZFxuICAgICAqL1xuICAgIGdldCBfbmV4dEJ1dHRvbklkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdJZCArICctcmlnaHQtYXJyb3cnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNb250aCBsYWJlbCBpZFxuICAgICAqL1xuICAgIGdldCBfbW9udGhCdXR0b25MYWJlbElkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdJZCArICctbW9udGgtbGFiZWwnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBTZWxlY3QgbW9udGggYXJpYSBsYWJlbCBpZFxuICAgICAqL1xuICAgIGdldCBfc2VsZWN0TW9udGhCdXR0b25BcmlhTGFiZWxJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3SWQgKyAnLXNlbGVjdC1tb250aC1hcmlhLWxhYmVsJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogWWVhciBsYWJlbCBpZFxuICAgICAqL1xuICAgIGdldCBfeWVhckJ1dHRvbkxhYmVsSWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0lkICsgJy15ZWFyLWxhYmVsJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogU2VsZWN0IHllYXIgYXJpYSBsYWJlbCBpZFxuICAgICAqL1xuICAgIGdldCBfc2VsZWN0WWVhckJ1dHRvbkFyaWFMYWJlbElkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdJZCArICctc2VsZWN0LXllYXItYXJpYS1sYWJlbCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFllYXJzIHJhbmdlIGxhYmVsIGlkXG4gICAgICovXG4gICAgZ2V0IF95ZWFyc1JhbmdlQnV0dG9uTGFiZWxJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3SWQgKyAnLXllYXJzLXJhbmdlLWxhYmVsJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogU2VsZWN0IHllYXJzIHJhbmdlIGFyaWEgbGFiZWwgaWRcbiAgICAgKi9cbiAgICBnZXQgX3NlbGVjdFllYXJzUmFuZ2VCdXR0b25BcmlhTGFiZWxJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3SWQgKyAnLXNlbGVjdC15ZWFycy1yYW5nZS1hcmlhLWxhYmVsJztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ3ByZXZCdXR0b24nLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBfcHJldkJ1dHRvbkNvbXBvbmVudDogRWxlbWVudFJlZjtcblxuICAgIC8qKiBBbiBSeEpTIFN1YmplY3QgdGhhdCB3aWxsIGtpbGwgdGhlIGRhdGEgc3RyZWFtIHVwb24gY29tcG9uZW504oCZcyBkZXN0cnVjdGlvbiAoZm9yIHVuc3Vic2NyaWJpbmcpICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX29uRGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIE1vbnRoIG5hbWVzICovXG4gICAgcHJpdmF0ZSBfbW9udGhOYW1lczogc3RyaW5nW10gPSBbXTtcblxuICAgIC8qKiBHZXQgaW5mb3JtYXRpb24gYWJvdXQgYW1vdW50IG9mIHllYXJzIGRpc3BsYXllZCBhdCBvbmNlIG9uIHllYXIgdmlldyAgKi9cbiAgICBwcml2YXRlIF9hbW91bnRPZlllYXJzUGVyUGVyaW9kID0gMTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX2NhbGVuZGFySTE4bkxhYmVsczogQ2FsZW5kYXJJMThuTGFiZWxzLFxuICAgICAgICBwcml2YXRlIF9jaGFuZ2VEZXRSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIF9jYWxlbmRhclNlcnZpY2U6IENhbGVuZGFyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfZGF0ZVRpbWVBZGFwdGVyOiBEYXRldGltZUFkYXB0ZXI8RD5cbiAgICApIHt9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5fb25EZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAoY2hhbmdlcy5jdXJyZW50bHlEaXNwbGF5ZWQgJiYgIWNoYW5nZXMuY3VycmVudGx5RGlzcGxheWVkLmZpcnN0Q2hhbmdlKSB8fFxuICAgICAgICAgICAgKGNoYW5nZXMuYWN0aXZlVmlldyAmJiAhY2hhbmdlcy5hY3RpdmVWaWV3LmZpcnN0Q2hhbmdlKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuX2NhbGN1bGF0ZUxhYmVscygpO1xuICAgICAgICAgICAgdGhpcy5fY2FsY3VsYXRlQXJpYUxhYmVscygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLmxlZnRBcnJvd0lkID0gdGhpcy5fcHJldkJ1dHRvbklkO1xuXG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZU1vbnRoTmFtZXMoKTtcblxuICAgICAgICB0aGlzLl9jYWxjdWxhdGVMYWJlbHMoKTtcblxuICAgICAgICB0aGlzLl9jYWxjdWxhdGVBcmlhTGFiZWxzKCk7XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuVG9Mb2NhbGVDaGFuZ2VzKCk7XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuVG9DYWxlbmRhckxhYmVsc0NoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGb2N1cyBvbiBmb2N1c2FibGUgY29udHJvbCB3aXRoaW4gdGhlIGhlYWRlclxuICAgICAqL1xuICAgIGZvY3VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9wcmV2QnV0dG9uQ29tcG9uZW50Lm5hdGl2ZUVsZW1lbnQ/LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfcHJvY2Vzc1ZpZXdDaGFuZ2UodHlwZTogRmRDYWxlbmRhclZpZXcsIGV2ZW50PzogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hY3RpdmVWaWV3ID0gdHlwZSA9PT0gdGhpcy5hY3RpdmVWaWV3ID8gJ2RheScgOiB0eXBlO1xuXG4gICAgICAgIHRoaXMuYWN0aXZlVmlld0NoYW5nZS5lbWl0KHRoaXMuYWN0aXZlVmlldyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZW1pdENsb3NlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsb3NlQ2xpY2tlZC5lbWl0KCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub0xvY2FsZUNoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5sb2NhbGVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fY2FsY3VsYXRlTW9udGhOYW1lcygpO1xuICAgICAgICAgICAgdGhpcy5fY2FsY3VsYXRlTGFiZWxzKCk7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuVG9DYWxlbmRhckxhYmVsc0NoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFySTE4bkxhYmVscy5sYWJlbHNDaGFuZ2UucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9jYWxjdWxhdGVBcmlhTGFiZWxzKCk7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2FsY3VsYXRlQXJpYUxhYmVscygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlUHJldmlvdXNBcmlhTGFiZWwoKTtcbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlTmV4dEFyaWFMYWJlbCgpO1xuICAgICAgICB0aGlzLl9jYWxjdWxhdGVTZWxlY3RNb250aEFyaWFMYWJlbCgpO1xuICAgICAgICB0aGlzLl9jYWxjdWxhdGVTZWxlY3RZZWFyQXJpYUxhYmVsKCk7XG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZVNlbGVjdEFnZ3JlZ2F0ZWRZZWFyQXJpYUxhYmVsKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jYWxjdWxhdGVMYWJlbHMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZVNlbGVjdE1vbnRoTGFiZWwoKTtcbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlU2VsZWN0WWVhckxhYmVsKCk7XG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZVNlbGVjdEFnZ3JlZ2F0ZWRZZWFyTGFiZWwoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhbGN1bGF0ZVByZXZpb3VzQXJpYUxhYmVsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnByZXZpb3VzQXJpYUxhYmVsID0gdGhpcy5pc09uRGF5Vmlld1xuICAgICAgICAgICAgPyB0aGlzLl9jYWxlbmRhckkxOG5MYWJlbHMucHJldmlvdXNNb250aExhYmVsXG4gICAgICAgICAgICA6IHRoaXMuX2NhbGVuZGFySTE4bkxhYmVscy5wcmV2aW91c1llYXJMYWJlbDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhbGN1bGF0ZU5leHRBcmlhTGFiZWwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubmV4dEFyaWFMYWJlbCA9IHRoaXMuaXNPbkRheVZpZXdcbiAgICAgICAgICAgID8gdGhpcy5fY2FsZW5kYXJJMThuTGFiZWxzLm5leHRNb250aExhYmVsXG4gICAgICAgICAgICA6IHRoaXMuX2NhbGVuZGFySTE4bkxhYmVscy5uZXh0WWVhckxhYmVsO1xuICAgIH1cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhbGN1bGF0ZVNlbGVjdE1vbnRoQXJpYUxhYmVsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlbGVjdE1vbnRoQXJpYUxhYmVsID0gdGhpcy5pc09uTW9udGhWaWV3XG4gICAgICAgICAgICA/IHRoaXMuX2NhbGVuZGFySTE4bkxhYmVscy5kYXRlU2VsZWN0aW9uTGFiZWxcbiAgICAgICAgICAgIDogdGhpcy5fY2FsZW5kYXJJMThuTGFiZWxzLm1vbnRoU2VsZWN0aW9uTGFiZWw7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jYWxjdWxhdGVTZWxlY3RZZWFyQXJpYUxhYmVsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlbGVjdFllYXJBcmlhTGFiZWwgPSB0aGlzLl9jYWxlbmRhckkxOG5MYWJlbHMueWVhclNlbGVjdGlvbkxhYmVsO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2FsY3VsYXRlU2VsZWN0QWdncmVnYXRlZFllYXJBcmlhTGFiZWwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0QWdncmVnYXRlZFllYXJBcmlhTGFiZWwgPSB0aGlzLmlzT25BZ2dyZWdhdGVkWWVhcnNWaWV3XG4gICAgICAgICAgICA/IHRoaXMuX2NhbGVuZGFySTE4bkxhYmVscy5kYXRlU2VsZWN0aW9uTGFiZWxcbiAgICAgICAgICAgIDogdGhpcy5fY2FsZW5kYXJJMThuTGFiZWxzLnllYXJzUmFuZ2VTZWxlY3Rpb25MYWJlbDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhbGN1bGF0ZVNlbGVjdE1vbnRoTGFiZWwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0TW9udGhMYWJlbCA9IHRoaXMuX21vbnRoTmFtZXNbdGhpcy5jdXJyZW50bHlEaXNwbGF5ZWQubW9udGggLSAxXTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhbGN1bGF0ZVNlbGVjdFllYXJMYWJlbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3RZZWFyTGFiZWwgPSB0aGlzLl9nZXRZZWFyTmFtZSh0aGlzLmN1cnJlbnRseURpc3BsYXllZC55ZWFyKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhbGN1bGF0ZVNlbGVjdEFnZ3JlZ2F0ZWRZZWFyTGFiZWwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0QWdncmVnYXRlZFllYXJMYWJlbCA9IGAke3RoaXMuX2dldFllYXJOYW1lKHRoaXMuY3VycmVudGx5RGlzcGxheWVkLnllYXIpfS0ke3RoaXMuX2dldFllYXJOYW1lKFxuICAgICAgICAgICAgdGhpcy5jdXJyZW50bHlEaXNwbGF5ZWQueWVhciArIHRoaXMuX2Ftb3VudE9mWWVhcnNQZXJQZXJpb2RcbiAgICAgICAgKX1gO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2FsY3VsYXRlTW9udGhOYW1lcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbW9udGhOYW1lcyA9IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5nZXRNb250aE5hbWVzKCdsb25nJyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRZZWFyTmFtZSh5ZWFyOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmdldFllYXJOYW1lKHRoaXMuX2RhdGVUaW1lQWRhcHRlci5jcmVhdGVEYXRlKHllYXIsIDEsIDEpKTtcbiAgICB9XG59XG4iLCI8aGVhZGVyIGNsYXNzPVwiZmQtY2FsZW5kYXJfX2hlYWRlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJmZC1jYWxlbmRhcl9fbmF2aWdhdGlvblwiIFtjbGFzcy5mZC1jYWxlbmRhcl9fbmF2aWdhdGlvbi0tbWFpbl09XCJtb2JpbGVMYW5kc2NhcGVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZkLWNhbGVuZGFyX19hY3Rpb24gZmQtY2FsZW5kYXJfX2FjdGlvbi0tYXJyb3ctbGVmdFwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICNwcmV2QnV0dG9uXG4gICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgIGdseXBoPVwic2xpbS1hcnJvdy1sZWZ0XCJcbiAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCJfcHJldkJ1dHRvbklkXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwicHJldmlvdXNCdXR0b25EaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwicHJldmlvdXNBcmlhTGFiZWxcIlxuICAgICAgICAgICAgICAgIFthcmlhTGFiZWxdPVwicHJldmlvdXNBcmlhTGFiZWxcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJwcmV2aW91c0NsaWNrZWQuZW1pdCgpXCJcbiAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc09uRGF5VmlldyB8fCBpc09uTW9udGhWaWV3XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtY2FsZW5kYXJfX2FjdGlvblwiPlxuICAgICAgICAgICAgICAgIDwhLS0gU2VsZWN0IG1vbnRoIGJ1dHRvbiAtLT5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiX21vbnRoQnV0dG9uTGFiZWxJZCArICcgJyArIF9zZWxlY3RNb250aEJ1dHRvbkFyaWFMYWJlbElkXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1mZC1jYWxlbmRhci1tb250aF09XCJjdXJyZW50bHlEaXNwbGF5ZWQubW9udGhcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiX3Byb2Nlc3NWaWV3Q2hhbmdlKCdtb250aCcsICRldmVudClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2F0dHIuaWRdPVwiX21vbnRoQnV0dG9uTGFiZWxJZFwiPnt7IHNlbGVjdE1vbnRoTGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmZC1jYWxlbmRhcl9fYWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgPCEtLSBTZWxlY3QgeWVhciBidXR0b24gLS0+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cIl95ZWFyQnV0dG9uTGFiZWxJZCArICcgJyArIF9zZWxlY3RZZWFyQnV0dG9uQXJpYUxhYmVsSWRcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWZkLWNhbGVuZGFyLXllYXJdPVwiY3VycmVudGx5RGlzcGxheWVkLnllYXJcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiX3Byb2Nlc3NWaWV3Q2hhbmdlKCd5ZWFyJywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBbYXR0ci5pZF09XCJfeWVhckJ1dHRvbkxhYmVsSWRcIj57eyBzZWxlY3RZZWFyTGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc09uQWdncmVnYXRlZFllYXJzVmlldyB8fCBpc09uWWVhclZpZXdcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmZC1jYWxlbmRhcl9fYWN0aW9uXCIgYXJpYS1saXZlPVwicG9saXRlXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiX3llYXJzUmFuZ2VCdXR0b25MYWJlbElkICsgJyAnICsgX3NlbGVjdFllYXJzUmFuZ2VCdXR0b25BcmlhTGFiZWxJZFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJfcHJvY2Vzc1ZpZXdDaGFuZ2UoJ2FnZ3JlZ2F0ZWRZZWFyJywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2F0dHIuaWRdPVwiX3llYXJzUmFuZ2VCdXR0b25MYWJlbElkXCI+e3sgc2VsZWN0QWdncmVnYXRlZFllYXJMYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZkLWNhbGVuZGFyX19hY3Rpb24gZmQtY2FsZW5kYXJfX2FjdGlvbi0tYXJyb3ctcmlnaHRcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgZ2x5cGg9XCJzbGltLWFycm93LXJpZ2h0XCJcbiAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCJfbmV4dEJ1dHRvbklkXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibmV4dEJ1dHRvbkRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICBbYXR0ci50aXRsZV09XCJuZXh0QXJpYUxhYmVsXCJcbiAgICAgICAgICAgICAgICBbYXJpYUxhYmVsXT1cIm5leHRBcmlhTGFiZWxcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJuZXh0Q2xpY2tlZC5lbWl0KClcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJtb2JpbGVMYW5kc2NhcGVcIlxuICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICBmZC1jYWxlbmRhci1jbG9zZS1idXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiZmQtY2FsZW5kYXJfX2Nsb3NlLWJ1dHRvbi0tbmF2aWdhdGlvblwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGdseXBoPVwiZGVjbGluZVwiXG4gICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiX2VtaXRDbG9zZSgpXCJcbiAgICAgICAgPjwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBIaWRkZW4gZWxlbWVudHMgZm9yIGFyaWEgcHVycG9zZXMgLS0+XG4gICAgPGRpdiBoaWRkZW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgIDxkaXYgW2F0dHIuaWRdPVwiX3NlbGVjdE1vbnRoQnV0dG9uQXJpYUxhYmVsSWRcIj57eyBzZWxlY3RNb250aEFyaWFMYWJlbCB9fTwvZGl2PlxuICAgICAgICA8ZGl2IFthdHRyLmlkXT1cIl9zZWxlY3RZZWFyQnV0dG9uQXJpYUxhYmVsSWRcIj57eyBzZWxlY3RZZWFyQXJpYUxhYmVsIH19PC9kaXY+XG4gICAgICAgIDxkaXYgW2F0dHIuaWRdPVwiX3NlbGVjdFllYXJzUmFuZ2VCdXR0b25BcmlhTGFiZWxJZFwiPnt7IHNlbGVjdEFnZ3JlZ2F0ZWRZZWFyQXJpYUxhYmVsIH19PC9kaXY+XG4gICAgPC9kaXY+XG48L2hlYWRlcj5cbiJdfQ==
270
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2NhbGVuZGFyL2NhbGVuZGFyLWhlYWRlci9jYWxlbmRhci1oZWFkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvY2FsZW5kYXIvY2FsZW5kYXItaGVhZGVyL2NhbGVuZGFyLWhlYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxFQUVOLFNBQVMsRUFDVCxpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRWpFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBSWxFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7Ozs7QUFFNUQ7OztHQUdHO0FBYUgsTUFBTSxPQUFPLHVCQUF1QjtJQWlCaEM7O09BRUc7SUFDSCxJQUNJLGdCQUFnQixDQUFDLFFBQTBCO1FBQzNDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxRQUFRLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxtQ0FBbUMs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QUFTO3VCQUFDLFlBQVksRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IERhdGV0aW1lQWRhcHRlciB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9kYXRldGltZSc7XG5cbmltcG9ydCB7IENhbGVuZGFySTE4bkxhYmVscyB9IGZyb20gJy4uL2kxOG4vY2FsZW5kYXItaTE4bi1sYWJlbHMnO1xuaW1wb3J0IHsgRmRDYWxlbmRhclZpZXcgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBDYWxlbmRhckN1cnJlbnQgfSBmcm9tICcuLi9tb2RlbHMvY2FsZW5kYXItY3VycmVudCc7XG5pbXBvcnQgeyBDYWxlbmRhclllYXJHcmlkIH0gZnJvbSAnLi4vbW9kZWxzL2NhbGVuZGFyLXllYXItZ3JpZCc7XG5pbXBvcnQgeyBDYWxlbmRhclNlcnZpY2UgfSBmcm9tICcuLi9jYWxlbmRhci5zZXJ2aWNlJztcbmltcG9ydCB7IE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2J1dHRvbic7XG5cbi8qKlxuICogSW50ZXJuYWwgdXNlIG9ubHkuXG4gKiBIZWFkZXIgb2YgdGhlIGNhbGVuZGFyIGNvbXBvbmVudC5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC1jYWxlbmRhci1oZWFkZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jYWxlbmRhci1oZWFkZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2NhbGVuZGFyLWhlYWRlci5jb21wb25lbnQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgaG9zdDoge1xuICAgICAgICAnW2F0dHIuaWRdJzogJ3ZpZXdJZCdcbiAgICB9LFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0J1dHRvbk1vZHVsZSwgTmdJZl1cbn0pXG5leHBvcnQgY2xhc3MgQ2FsZW5kYXJIZWFkZXJDb21wb25lbnQ8RD4gaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgICAvKiogQ3VycmVudGx5IGFjdGl2ZSB2aWV3LiBOZWVkZWQgZm9yIGExMXkgbGFiZWxzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYWN0aXZlVmlldzogRmRDYWxlbmRhclZpZXc7XG5cbiAgICAvKiogQ3VycmVudGx5IGRpc3BsYXllZCBkYXRlIG9uIHRoZSBjYWxlbmRhci4gKi9cbiAgICBASW5wdXQoKVxuICAgIGN1cnJlbnRseURpc3BsYXllZDogQ2FsZW5kYXJDdXJyZW50O1xuXG4gICAgLyoqIHdoZXRoZXIgcHJldmlvdXMgbmF2aWdhdGlvbiBidXR0b24gc2hvdWxkIGJlIGRpc2FibGVkIGluIHRoZSBoZWFkZXIuICovXG4gICAgQElucHV0KClcbiAgICBwcmV2aW91c0J1dHRvbkRpc2FibGVkOiBib29sZWFuO1xuXG4gICAgLyoqIHdoZXRoZXIgbmV4dCBuYXZpZ2F0aW9uIGJ1dHRvbiBzaG91bGQgYmUgZGlzYWJsZWQgaW4gdGhlIGhlYWRlci4gKi9cbiAgICBASW5wdXQoKVxuICAgIG5leHRCdXR0b25EaXNhYmxlZDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIE9iamVjdCB0byBjdXN0b21pemUgeWVhciBncmlkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgY2FsZW5kYXJZZWFyR3JpZCh5ZWFyR3JpZDogQ2FsZW5kYXJZZWFyR3JpZCkge1xuICAgICAgICB0aGlzLl9hbW91bnRPZlllYXJzUGVyUGVyaW9kID0geWVhckdyaWQuY29scyAqIHllYXJHcmlkLnJvd3MgLSAxO1xuICAgICAgICB0aGlzLl9jYWxjdWxhdGVTZWxlY3RBZ2dyZWdhdGVkWWVhckxhYmVsKCk7XG4gICAgfVxuXG4gICAgLyoqIENhbGVuZGFyIElEICovXG4gICAgQElucHV0KClcbiAgICBpZDogc3RyaW5nO1xuXG4gICAgLyoqIFdoZXRoZXIgY2FsZW5kYXIgc2hvdWxkIGJlIHJlbmRlcmVkIGluIG1vYmlsZSBsYW5kc2NhcGUgbW9kZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIG1vYmlsZUxhbmRzY2FwZSA9IGZhbHNlO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgYWN0aXZlIHZpZXcgc2hvdWxkIGNoYW5nZS4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBhY3RpdmVWaWV3Q2hhbmdlOiBFdmVudEVtaXR0ZXI8RmRDYWxlbmRhclZpZXc+ID0gbmV3IEV2ZW50RW1pdHRlcjxGZENhbGVuZGFyVmlldz4oKTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIHByZXZpb3VzIGJ1dHRvbiBpcyBjbGlja2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHByZXZpb3VzQ2xpY2tlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgbmV4dCBidXR0b24gaXMgY2xpY2tlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBuZXh0Q2xpY2tlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqIEFyaWEgbGFiZWwgZm9yIHRoZSBwcmV2aW91cyBidXR0b24uIERlcGVuZHMgb24gdGhlIGFjdGl2ZSB2aWV3LiAqL1xuICAgIHByZXZpb3VzQXJpYUxhYmVsOiBzdHJpbmc7XG5cbiAgICAvKiogQXJpYSBsYWJlbCBmb3IgdGhlIG5leHQgYnV0dG9uLiBEZXBlbmRzIG9uIHRoZSBhY3RpdmUgdmlldy4gKi9cbiAgICBuZXh0QXJpYUxhYmVsOiBzdHJpbmc7XG5cbiAgICAvKiogQnV0dG9uIGFyaWEgbGFiZWwgdG8gb3BlbiBtb250aCBzZWxlY3Rpb24gdmlldy4gKi9cbiAgICBzZWxlY3RNb250aEFyaWFMYWJlbDogc3RyaW5nO1xuXG4gICAgLyoqIEJ1dHRvbiBhcmlhIGxhYmVsIHRvIG9wZW4geWVhciBzZWxlY3Rpb24gdmlldy4gKi9cbiAgICBzZWxlY3RZZWFyQXJpYUxhYmVsOiBzdHJpbmc7XG5cbiAgICAvKiogQnV0dG9uIGFyaWEgbGFiZWwgdG8gb3BlbiBhZ2dyZWdhdGVkIHllYXJzIHNlbGVjdGlvbiB2aWV3LiAqL1xuICAgIHNlbGVjdEFnZ3JlZ2F0ZWRZZWFyQXJpYUxhYmVsOiBzdHJpbmc7XG5cbiAgICAvKiogQnV0dG9uIGxhYmVsIHRvIG9wZW4gbW9udGggc2VsZWN0aW9uIHZpZXcuICovXG4gICAgc2VsZWN0TW9udGhMYWJlbDogc3RyaW5nO1xuXG4gICAgLyoqIEJ1dHRvbiBsYWJlbCB0byBvcGVuIHllYXIgc2VsZWN0aW9uIHZpZXcuICovXG4gICAgc2VsZWN0WWVhckxhYmVsOiBzdHJpbmc7XG5cbiAgICAvKiogQnV0dG9uIGxhYmVsIHRvIG9wZW4gYWdncmVnYXRlZCB5ZWFycyBzZWxlY3Rpb24gdmlldy4gKi9cbiAgICBzZWxlY3RBZ2dyZWdhdGVkWWVhckxhYmVsOiBzdHJpbmc7XG5cbiAgICAvKiogR2V0IGluZm9ybWF0aW9uIGlzIGNhbGVuZGFyIGlzIG9uIGFnZ3JlZ2F0ZWQgeWVhcnMgdmlldyAqL1xuICAgIGdldCBpc09uQWdncmVnYXRlZFllYXJzVmlldygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlVmlldyA9PT0gJ2FnZ3JlZ2F0ZWRZZWFyJztcbiAgICB9XG5cbiAgICAvKiogR2V0IGluZm9ybWF0aW9uIGlzIGNhbGVuZGFyIGlzIG9uIHllYXIgdmlldyAqL1xuICAgIGdldCBpc09uWWVhclZpZXcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZVZpZXcgPT09ICd5ZWFyJztcbiAgICB9XG5cbiAgICAvKiogR2V0IGluZm9ybWF0aW9uIGlzIGNhbGVuZGFyIGlzIG9uIG1vbnRoIHZpZXcgKi9cbiAgICBnZXQgaXNPbk1vbnRoVmlldygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlVmlldyA9PT0gJ21vbnRoJztcbiAgICB9XG5cbiAgICAvKiogR2V0IGluZm9ybWF0aW9uIGlzIGNhbGVuZGFyIGlzIG9uIGRheSB2aWV3ICovXG4gICAgZ2V0IGlzT25EYXlWaWV3KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmVWaWV3ID09PSAnZGF5JztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21wb25lbnQgaWRcbiAgICAgKi9cbiAgICBnZXQgdmlld0lkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmlkICsgJy1oZWFkZXInO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBQcmV2aW91cyBidXR0b24gaWRcbiAgICAgKi9cbiAgICBnZXQgX3ByZXZCdXR0b25JZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3SWQgKyAnLWxlZnQtYXJyb3cnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBOZXh0IGJ1dHRvbiBpZFxuICAgICAqL1xuICAgIGdldCBfbmV4dEJ1dHRvbklkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdJZCArICctcmlnaHQtYXJyb3cnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNb250aCBsYWJlbCBpZFxuICAgICAqL1xuICAgIGdldCBfbW9udGhCdXR0b25MYWJlbElkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdJZCArICctbW9udGgtbGFiZWwnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBTZWxlY3QgbW9udGggYXJpYSBsYWJlbCBpZFxuICAgICAqL1xuICAgIGdldCBfc2VsZWN0TW9udGhCdXR0b25BcmlhTGFiZWxJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3SWQgKyAnLXNlbGVjdC1tb250aC1hcmlhLWxhYmVsJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogWWVhciBsYWJlbCBpZFxuICAgICAqL1xuICAgIGdldCBfeWVhckJ1dHRvbkxhYmVsSWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0lkICsgJy15ZWFyLWxhYmVsJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogU2VsZWN0IHllYXIgYXJpYSBsYWJlbCBpZFxuICAgICAqL1xuICAgIGdldCBfc2VsZWN0WWVhckJ1dHRvbkFyaWFMYWJlbElkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdJZCArICctc2VsZWN0LXllYXItYXJpYS1sYWJlbCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFllYXJzIHJhbmdlIGxhYmVsIGlkXG4gICAgICovXG4gICAgZ2V0IF95ZWFyc1JhbmdlQnV0dG9uTGFiZWxJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3SWQgKyAnLXllYXJzLXJhbmdlLWxhYmVsJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogU2VsZWN0IHllYXJzIHJhbmdlIGFyaWEgbGFiZWwgaWRcbiAgICAgKi9cbiAgICBnZXQgX3NlbGVjdFllYXJzUmFuZ2VCdXR0b25BcmlhTGFiZWxJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3SWQgKyAnLXNlbGVjdC15ZWFycy1yYW5nZS1hcmlhLWxhYmVsJztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ3ByZXZCdXR0b24nLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBfcHJldkJ1dHRvbkNvbXBvbmVudDogRWxlbWVudFJlZjtcblxuICAgIC8qKiBBbiBSeEpTIFN1YmplY3QgdGhhdCB3aWxsIGtpbGwgdGhlIGRhdGEgc3RyZWFtIHVwb24gY29tcG9uZW504oCZcyBkZXN0cnVjdGlvbiAoZm9yIHVuc3Vic2NyaWJpbmcpICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX29uRGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIE1vbnRoIG5hbWVzICovXG4gICAgcHJpdmF0ZSBfbW9udGhOYW1lczogc3RyaW5nW10gPSBbXTtcblxuICAgIC8qKiBHZXQgaW5mb3JtYXRpb24gYWJvdXQgYW1vdW50IG9mIHllYXJzIGRpc3BsYXllZCBhdCBvbmNlIG9uIHllYXIgdmlldyAgKi9cbiAgICBwcml2YXRlIF9hbW91bnRPZlllYXJzUGVyUGVyaW9kID0gMTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX2NhbGVuZGFySTE4bkxhYmVsczogQ2FsZW5kYXJJMThuTGFiZWxzLFxuICAgICAgICBwcml2YXRlIF9jaGFuZ2VEZXRSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIF9jYWxlbmRhclNlcnZpY2U6IENhbGVuZGFyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfZGF0ZVRpbWVBZGFwdGVyOiBEYXRldGltZUFkYXB0ZXI8RD5cbiAgICApIHt9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5fb25EZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAoY2hhbmdlcy5jdXJyZW50bHlEaXNwbGF5ZWQgJiYgIWNoYW5nZXMuY3VycmVudGx5RGlzcGxheWVkLmZpcnN0Q2hhbmdlKSB8fFxuICAgICAgICAgICAgKGNoYW5nZXMuYWN0aXZlVmlldyAmJiAhY2hhbmdlcy5hY3RpdmVWaWV3LmZpcnN0Q2hhbmdlKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuX2NhbGN1bGF0ZUxhYmVscygpO1xuICAgICAgICAgICAgdGhpcy5fY2FsY3VsYXRlQXJpYUxhYmVscygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLmxlZnRBcnJvd0lkID0gdGhpcy5fcHJldkJ1dHRvbklkO1xuXG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZU1vbnRoTmFtZXMoKTtcblxuICAgICAgICB0aGlzLl9jYWxjdWxhdGVMYWJlbHMoKTtcblxuICAgICAgICB0aGlzLl9jYWxjdWxhdGVBcmlhTGFiZWxzKCk7XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuVG9Mb2NhbGVDaGFuZ2VzKCk7XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuVG9DYWxlbmRhckxhYmVsc0NoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGb2N1cyBvbiBmb2N1c2FibGUgY29udHJvbCB3aXRoaW4gdGhlIGhlYWRlclxuICAgICAqL1xuICAgIGZvY3VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9wcmV2QnV0dG9uQ29tcG9uZW50Lm5hdGl2ZUVsZW1lbnQ/LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfcHJvY2Vzc1ZpZXdDaGFuZ2UodHlwZTogRmRDYWxlbmRhclZpZXcsIGV2ZW50PzogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hY3RpdmVWaWV3ID0gdHlwZSA9PT0gdGhpcy5hY3RpdmVWaWV3ID8gJ2RheScgOiB0eXBlO1xuXG4gICAgICAgIHRoaXMuYWN0aXZlVmlld0NoYW5nZS5lbWl0KHRoaXMuYWN0aXZlVmlldyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub0xvY2FsZUNoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5sb2NhbGVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fY2FsY3VsYXRlTW9udGhOYW1lcygpO1xuICAgICAgICAgICAgdGhpcy5fY2FsY3VsYXRlTGFiZWxzKCk7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuVG9DYWxlbmRhckxhYmVsc0NoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFySTE4bkxhYmVscy5sYWJlbHNDaGFuZ2UucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9jYWxjdWxhdGVBcmlhTGFiZWxzKCk7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2FsY3VsYXRlQXJpYUxhYmVscygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlUHJldmlvdXNBcmlhTGFiZWwoKTtcbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlTmV4dEFyaWFMYWJlbCgpO1xuICAgICAgICB0aGlzLl9jYWxjdWxhdGVTZWxlY3RNb250aEFyaWFMYWJlbCgpO1xuICAgICAgICB0aGlzLl9jYWxjdWxhdGVTZWxlY3RZZWFyQXJpYUxhYmVsKCk7XG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZVNlbGVjdEFnZ3JlZ2F0ZWRZZWFyQXJpYUxhYmVsKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jYWxjdWxhdGVMYWJlbHMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZVNlbGVjdE1vbnRoTGFiZWwoKTtcbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlU2VsZWN0WWVhckxhYmVsKCk7XG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZVNlbGVjdEFnZ3JlZ2F0ZWRZZWFyTGFiZWwoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhbGN1bGF0ZVByZXZpb3VzQXJpYUxhYmVsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnByZXZpb3VzQXJpYUxhYmVsID0gdGhpcy5pc09uRGF5Vmlld1xuICAgICAgICAgICAgPyB0aGlzLl9jYWxlbmRhckkxOG5MYWJlbHMucHJldmlvdXNNb250aExhYmVsXG4gICAgICAgICAgICA6IHRoaXMuX2NhbGVuZGFySTE4bkxhYmVscy5wcmV2aW91c1llYXJMYWJlbDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhbGN1bGF0ZU5leHRBcmlhTGFiZWwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubmV4dEFyaWFMYWJlbCA9IHRoaXMuaXNPbkRheVZpZXdcbiAgICAgICAgICAgID8gdGhpcy5fY2FsZW5kYXJJMThuTGFiZWxzLm5leHRNb250aExhYmVsXG4gICAgICAgICAgICA6IHRoaXMuX2NhbGVuZGFySTE4bkxhYmVscy5uZXh0WWVhckxhYmVsO1xuICAgIH1cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhbGN1bGF0ZVNlbGVjdE1vbnRoQXJpYUxhYmVsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlbGVjdE1vbnRoQXJpYUxhYmVsID0gdGhpcy5pc09uTW9udGhWaWV3XG4gICAgICAgICAgICA/IHRoaXMuX2NhbGVuZGFySTE4bkxhYmVscy5kYXRlU2VsZWN0aW9uTGFiZWxcbiAgICAgICAgICAgIDogdGhpcy5fY2FsZW5kYXJJMThuTGFiZWxzLm1vbnRoU2VsZWN0aW9uTGFiZWw7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jYWxjdWxhdGVTZWxlY3RZZWFyQXJpYUxhYmVsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlbGVjdFllYXJBcmlhTGFiZWwgPSB0aGlzLl9jYWxlbmRhckkxOG5MYWJlbHMueWVhclNlbGVjdGlvbkxhYmVsO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2FsY3VsYXRlU2VsZWN0QWdncmVnYXRlZFllYXJBcmlhTGFiZWwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0QWdncmVnYXRlZFllYXJBcmlhTGFiZWwgPSB0aGlzLmlzT25BZ2dyZWdhdGVkWWVhcnNWaWV3XG4gICAgICAgICAgICA/IHRoaXMuX2NhbGVuZGFySTE4bkxhYmVscy5kYXRlU2VsZWN0aW9uTGFiZWxcbiAgICAgICAgICAgIDogdGhpcy5fY2FsZW5kYXJJMThuTGFiZWxzLnllYXJzUmFuZ2VTZWxlY3Rpb25MYWJlbDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhbGN1bGF0ZVNlbGVjdE1vbnRoTGFiZWwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0TW9udGhMYWJlbCA9IHRoaXMuX21vbnRoTmFtZXNbdGhpcy5jdXJyZW50bHlEaXNwbGF5ZWQubW9udGggLSAxXTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhbGN1bGF0ZVNlbGVjdFllYXJMYWJlbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3RZZWFyTGFiZWwgPSB0aGlzLl9nZXRZZWFyTmFtZSh0aGlzLmN1cnJlbnRseURpc3BsYXllZC55ZWFyKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhbGN1bGF0ZVNlbGVjdEFnZ3JlZ2F0ZWRZZWFyTGFiZWwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0QWdncmVnYXRlZFllYXJMYWJlbCA9IGAke3RoaXMuX2dldFllYXJOYW1lKHRoaXMuY3VycmVudGx5RGlzcGxheWVkLnllYXIpfS0ke3RoaXMuX2dldFllYXJOYW1lKFxuICAgICAgICAgICAgdGhpcy5jdXJyZW50bHlEaXNwbGF5ZWQueWVhciArIHRoaXMuX2Ftb3VudE9mWWVhcnNQZXJQZXJpb2RcbiAgICAgICAgKX1gO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2FsY3VsYXRlTW9udGhOYW1lcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbW9udGhOYW1lcyA9IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5nZXRNb250aE5hbWVzKCdsb25nJyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRZZWFyTmFtZSh5ZWFyOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmdldFllYXJOYW1lKHRoaXMuX2RhdGVUaW1lQWRhcHRlci5jcmVhdGVEYXRlKHllYXIsIDEsIDEpKTtcbiAgICB9XG59XG4iLCI8aGVhZGVyIGNsYXNzPVwiZmQtY2FsZW5kYXJfX25hdmlnYXRpb25cIiBbY2xhc3MuZmQtY2FsZW5kYXJfX25hdmlnYXRpb24tLW1haW5dPVwibW9iaWxlTGFuZHNjYXBlXCI+XG4gICAgPGRpdiBjbGFzcz1cImZkLWNhbGVuZGFyX19hY3Rpb24gZmQtY2FsZW5kYXJfX2FjdGlvbi0tYXJyb3ctbGVmdFwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAjcHJldkJ1dHRvblxuICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICBnbHlwaD1cInNsaW0tYXJyb3ctbGVmdFwiXG4gICAgICAgICAgICBbYXR0ci5pZF09XCJfcHJldkJ1dHRvbklkXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJwcmV2aW91c0J1dHRvbkRpc2FibGVkXCJcbiAgICAgICAgICAgIFthdHRyLnRpdGxlXT1cInByZXZpb3VzQXJpYUxhYmVsXCJcbiAgICAgICAgICAgIFthcmlhTGFiZWxdPVwicHJldmlvdXNBcmlhTGFiZWxcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwicHJldmlvdXNDbGlja2VkLmVtaXQoKVwiXG4gICAgICAgID48L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNPbkRheVZpZXcgfHwgaXNPbk1vbnRoVmlld1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtY2FsZW5kYXJfX2FjdGlvblwiPlxuICAgICAgICAgICAgPCEtLSBTZWxlY3QgbW9udGggYnV0dG9uIC0tPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiX21vbnRoQnV0dG9uTGFiZWxJZCArICcgJyArIF9zZWxlY3RNb250aEJ1dHRvbkFyaWFMYWJlbElkXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWZkLWNhbGVuZGFyLW1vbnRoXT1cImN1cnJlbnRseURpc3BsYXllZC5tb250aFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9wcm9jZXNzVmlld0NoYW5nZSgnbW9udGgnLCAkZXZlbnQpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhbiBbYXR0ci5pZF09XCJfbW9udGhCdXR0b25MYWJlbElkXCI+e3sgc2VsZWN0TW9udGhMYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZkLWNhbGVuZGFyX19hY3Rpb25cIj5cbiAgICAgICAgICAgIDwhLS0gU2VsZWN0IHllYXIgYnV0dG9uIC0tPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiX3llYXJCdXR0b25MYWJlbElkICsgJyAnICsgX3NlbGVjdFllYXJCdXR0b25BcmlhTGFiZWxJZFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1mZC1jYWxlbmRhci15ZWFyXT1cImN1cnJlbnRseURpc3BsYXllZC55ZWFyXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiX3Byb2Nlc3NWaWV3Q2hhbmdlKCd5ZWFyJywgJGV2ZW50KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4gW2F0dHIuaWRdPVwiX3llYXJCdXR0b25MYWJlbElkXCI+e3sgc2VsZWN0WWVhckxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc09uQWdncmVnYXRlZFllYXJzVmlldyB8fCBpc09uWWVhclZpZXdcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZkLWNhbGVuZGFyX19hY3Rpb25cIiBhcmlhLWxpdmU9XCJwb2xpdGVcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cIl95ZWFyc1JhbmdlQnV0dG9uTGFiZWxJZCArICcgJyArIF9zZWxlY3RZZWFyc1JhbmdlQnV0dG9uQXJpYUxhYmVsSWRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJfcHJvY2Vzc1ZpZXdDaGFuZ2UoJ2FnZ3JlZ2F0ZWRZZWFyJywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4gW2F0dHIuaWRdPVwiX3llYXJzUmFuZ2VCdXR0b25MYWJlbElkXCI+e3sgc2VsZWN0QWdncmVnYXRlZFllYXJMYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8ZGl2IGNsYXNzPVwiZmQtY2FsZW5kYXJfX2FjdGlvbiBmZC1jYWxlbmRhcl9fYWN0aW9uLS1hcnJvdy1yaWdodFwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgIGdseXBoPVwic2xpbS1hcnJvdy1yaWdodFwiXG4gICAgICAgICAgICBbYXR0ci5pZF09XCJfbmV4dEJ1dHRvbklkXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJuZXh0QnV0dG9uRGlzYWJsZWRcIlxuICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwibmV4dEFyaWFMYWJlbFwiXG4gICAgICAgICAgICBbYXJpYUxhYmVsXT1cIm5leHRBcmlhTGFiZWxcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm5leHRDbGlja2VkLmVtaXQoKVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgPjwvYnV0dG9uPlxuICAgIDwvZGl2PlxuPC9oZWFkZXI+XG5cbjwhLS0gSGlkZGVuIGVsZW1lbnRzIGZvciBhcmlhIHB1cnBvc2VzIC0tPlxuPGRpdiBoaWRkZW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgPGRpdiBbYXR0ci5pZF09XCJfc2VsZWN0TW9udGhCdXR0b25BcmlhTGFiZWxJZFwiPnt7IHNlbGVjdE1vbnRoQXJpYUxhYmVsIH19PC9kaXY+XG4gICAgPGRpdiBbYXR0ci5pZF09XCJfc2VsZWN0WWVhckJ1dHRvbkFyaWFMYWJlbElkXCI+e3sgc2VsZWN0WWVhckFyaWFMYWJlbCB9fTwvZGl2PlxuICAgIDxkaXYgW2F0dHIuaWRdPVwiX3NlbGVjdFllYXJzUmFuZ2VCdXR0b25BcmlhTGFiZWxJZFwiPnt7IHNlbGVjdEFnZ3JlZ2F0ZWRZZWFyQXJpYUxhYmVsIH19PC9kaXY+XG48L2Rpdj5cbiJdfQ==