@fundamental-ngx/core 0.52.2-rc.30 → 0.52.2-rc.32

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.
@@ -1,4 +1,6 @@
1
1
  import { PipeTransform } from '@angular/core';
2
+ import { FdLanguage } from '@fundamental-ngx/i18n';
3
+ import { Observable } from 'rxjs';
2
4
  import { DatetimeAdapter } from './datetime-adapter';
3
5
  import { DateTimeFormats } from './datetime-formats';
4
6
  import * as i0 from "@angular/core";
@@ -31,3 +33,26 @@ export declare class DateFromNowPipe<D> implements PipeTransform {
31
33
  static ɵfac: i0.ɵɵFactoryDeclaration<DateFromNowPipe<any>, never>;
32
34
  static ɵpipe: i0.ɵɵPipeDeclaration<DateFromNowPipe<any>, "dateFromNow", true>;
33
35
  }
36
+ export declare class DayPeriodFormatPipe<D> implements PipeTransform {
37
+ private _dateTimeAdapter;
38
+ private _dateTimeFormats;
39
+ /** @hidden */
40
+ constructor(_dateTimeAdapter: DatetimeAdapter<D>, _dateTimeFormats: DateTimeFormats);
41
+ /** Format date object for day period */
42
+ transform(date: D, customFormat?: any, noDateMessage?: string): string;
43
+ static ɵfac: i0.ɵɵFactoryDeclaration<DayPeriodFormatPipe<any>, [null, { optional: true; }]>;
44
+ static ɵpipe: i0.ɵɵPipeDeclaration<DayPeriodFormatPipe<any>, "dayPeriodFormat", true>;
45
+ }
46
+ export declare class TranslateDayPeriodPipe implements PipeTransform {
47
+ private _language$;
48
+ /** @hidden */
49
+ private readonly _translationResolver;
50
+ /** Signal that will hold the current language */
51
+ private readonly _currentLanguageSignal;
52
+ /** @hidden */
53
+ constructor(_language$: Observable<FdLanguage>);
54
+ /** Format date object for day period */
55
+ transform(value: string | null): string | null;
56
+ static ɵfac: i0.ɵɵFactoryDeclaration<TranslateDayPeriodPipe, never>;
57
+ static ɵpipe: i0.ɵɵPipeDeclaration<TranslateDayPeriodPipe, "translateDayPeriod", true>;
58
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Converts a given time string to a desired format.
3
+ *
4
+ * @param {string} inputStr - The input time string to be converted.
5
+ * @returns {string} - The converted time string in the desired format.
6
+ */
7
+ export declare function convertToDesiredFormat(inputStr: string): string;
@@ -2,6 +2,9 @@ import { Platform } from '@angular/cdk/platform';
2
2
  import { DatetimeAdapter } from './datetime-adapter';
3
3
  import { FdDate } from './fd-date';
4
4
  import * as i0 from "@angular/core";
5
+ type CustomDateTimeFormatOptions = Omit<Intl.DateTimeFormatOptions, 'dayPeriod'> & {
6
+ dayPeriod?: boolean;
7
+ };
5
8
  /**
6
9
  * DatetimeAdapter implementation based on FdDate.
7
10
  *
@@ -76,7 +79,7 @@ export declare class FdDatetimeAdapter extends DatetimeAdapter<FdDate> {
76
79
  /** Parse any value to date object */
77
80
  parse(value: any, parseFormat?: Intl.DateTimeFormatOptions): FdDate | null;
78
81
  /** Format date object to string */
79
- format(date: FdDate, displayFormat: Intl.DateTimeFormatOptions): string;
82
+ format(date: FdDate, displayFormat: CustomDateTimeFormatOptions): string;
80
83
  /** Add years to a date */
81
84
  addCalendarYears(date: FdDate, years: number): FdDate;
82
85
  /** Add months to a date */
@@ -96,13 +99,21 @@ export declare class FdDatetimeAdapter extends DatetimeAdapter<FdDate> {
96
99
  /** Format date object to ISO8601 string */
97
100
  toIso8601(fdDate: FdDate): string;
98
101
  /** Check if a time format includes a day period */
99
- isTimeFormatIncludesDayPeriod(displayFormat: Intl.DateTimeFormatOptions): boolean;
102
+ isTimeFormatIncludesDayPeriod(displayFormat: CustomDateTimeFormatOptions): boolean;
100
103
  /** Check if a time format includes hours */
101
104
  isTimeFormatIncludesHours(displayFormat: Intl.DateTimeFormatOptions): boolean;
102
105
  /** Check if a time format includes minutes */
103
106
  isTimeFormatIncludesMinutes(displayFormat: Intl.DateTimeFormatOptions): boolean;
104
107
  /** Check if a time format includes seconds */
105
108
  isTimeFormatIncludesSeconds(displayFormat: Intl.DateTimeFormatOptions): boolean;
109
+ /** Format with custom pattern including day period names */
110
+ private _formatWithDayPeriod;
111
+ /** Insert day period into the formatted string */
112
+ private _insertDayPeriod;
113
+ /** Get day period name based on the hour */
114
+ private _getDayPeriodName;
115
+ /** Format date using Intl.DateTimeFormat */
116
+ private _formatWithIntl;
106
117
  /**
107
118
  * @hidden
108
119
  * Strip out unicode LTR and RTL characters. Edge and IE insert these into formatted dates while
@@ -150,3 +161,4 @@ export declare class FdDatetimeAdapter extends DatetimeAdapter<FdDate> {
150
161
  static ɵfac: i0.ɵɵFactoryDeclaration<FdDatetimeAdapter, [{ optional: true; }, null]>;
151
162
  static ɵprov: i0.ɵɵInjectableDeclaration<FdDatetimeAdapter>;
152
163
  }
164
+ export {};
@@ -6,6 +6,6 @@ import * as i1 from "./datetime-format.pipes";
6
6
  */
7
7
  export declare class FdDatetimePipesModule {
8
8
  static ɵfac: i0.ɵɵFactoryDeclaration<FdDatetimePipesModule, never>;
9
- static ɵmod: i0.ɵɵNgModuleDeclaration<FdDatetimePipesModule, never, [typeof i1.DateFormatPipe, typeof i1.DateTimeFormatPipe, typeof i1.DateFromNowPipe], [typeof i1.DateFormatPipe, typeof i1.DateTimeFormatPipe, typeof i1.DateFromNowPipe]>;
9
+ static ɵmod: i0.ɵɵNgModuleDeclaration<FdDatetimePipesModule, never, [typeof i1.DateFormatPipe, typeof i1.DateTimeFormatPipe, typeof i1.DateFromNowPipe, typeof i1.DayPeriodFormatPipe, typeof i1.TranslateDayPeriodPipe], [typeof i1.DateFormatPipe, typeof i1.DateTimeFormatPipe, typeof i1.DateFromNowPipe, typeof i1.DayPeriodFormatPipe, typeof i1.TranslateDayPeriodPipe]>;
10
10
  static ɵinj: i0.ɵɵInjectorDeclaration<FdDatetimePipesModule>;
11
11
  }
@@ -1,6 +1,7 @@
1
1
  export * from './datetime-adapter';
2
2
  export * from './datetime-format.pipes';
3
3
  export * from './datetime-formats';
4
+ export * from './datetime-utils';
4
5
  export * from './fd-date';
5
6
  export * from './fd-date-formats';
6
7
  export * from './fd-date.utils';
@@ -146,6 +146,8 @@ export declare class DatetimePickerComponent<D> implements DateTimePicker<D>, On
146
146
  mobileLandscape: boolean;
147
147
  /** Whether calendar is used inside mobile in portrait mode */
148
148
  mobilePortrait: boolean;
149
+ /** To set input width 100% */
150
+ isFullWidth: boolean;
149
151
  /** Event emitted when the state of the isOpen property changes. */
150
152
  isOpenChange: EventEmitter<boolean>;
151
153
  /** Event thrown every time calendar active view is changed */
@@ -335,6 +337,6 @@ export declare class DatetimePickerComponent<D> implements DateTimePicker<D>, On
335
337
  /** @hidden */
336
338
  private _setUpMobileMode;
337
339
  static ɵfac: i0.ɵɵFactoryDeclaration<DatetimePickerComponent<any>, [null, null, { optional: true; }, { optional: true; }, null]>;
338
- 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; }; "customDateTimeFormat": { "alias": "customDateTimeFormat"; "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>;
340
+ 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; }; "customDateTimeFormat": { "alias": "customDateTimeFormat"; "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; }; "isFullWidth": { "alias": "isFullWidth"; "required": false; }; "disableFunction": { "alias": "disableFunction"; "required": false; }; }, { "isOpenChange": "isOpenChange"; "activeViewChange": "activeViewChange"; "dateChange": "dateChange"; "calendarChange": "calendarChange"; "timeChange": "timeChange"; "onClose": "onClose"; "touched": "touched"; }, never, ["*"], true, never>;
339
341
  static ngAcceptInputType_processInputOnBlur: unknown;
340
342
  }
@@ -1,8 +1,12 @@
1
1
  import { Inject, Optional, Pipe } from '@angular/core';
2
+ import { toSignal } from '@angular/core/rxjs-interop';
3
+ import { FD_LANGUAGE, TranslationResolver } from '@fundamental-ngx/i18n';
4
+ import { Observable } from 'rxjs';
2
5
  import { DatetimeAdapter } from './datetime-adapter';
3
6
  import { DATE_TIME_FORMATS } from './datetime-formats';
4
7
  import * as i0 from "@angular/core";
5
8
  import * as i1 from "./datetime-adapter";
9
+ import * as i2 from "rxjs";
6
10
  export class DateFormatPipe {
7
11
  /** @hidden */
8
12
  constructor(_dateTimeAdapter, _dateTimeFormats) {
@@ -93,4 +97,69 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImpor
93
97
  standalone: true
94
98
  }]
95
99
  }], ctorParameters: () => [{ type: i1.DatetimeAdapter }] });
96
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUtZm9ybWF0LnBpcGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2RhdGV0aW1lL2RhdGV0aW1lLWZvcm1hdC5waXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsaUJBQWlCLEVBQW1CLE1BQU0sb0JBQW9CLENBQUM7OztBQU14RSxNQUFNLE9BQU8sY0FBYztJQUN2QixjQUFjO0lBQ2QsWUFDWSxnQkFBb0MsRUFDRyxnQkFBaUM7UUFEeEUscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFvQjtRQUNHLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBaUI7SUFDakYsQ0FBQztJQUVKLHlCQUF5QjtJQUN6QixTQUFTLENBQUMsSUFBTyxFQUFFLGFBQWEsR0FBRyxFQUFFO1FBQ2pDLElBQUksSUFBSSxFQUFFLENBQUM7WUFDUCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdkYsQ0FBQzthQUFNLENBQUM7WUFDSixPQUFPLGFBQWEsQ0FBQztRQUN6QixDQUFDO0lBQ0wsQ0FBQzs4R0FkUSxjQUFjLGlEQUlDLGlCQUFpQjs0R0FKaEMsY0FBYzs7MkZBQWQsY0FBYztrQkFKMUIsSUFBSTttQkFBQztvQkFDRixJQUFJLEVBQUUsWUFBWTtvQkFDbEIsVUFBVSxFQUFFLElBQUk7aUJBQ25COzswQkFLUSxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGlCQUFpQjs7QUFpQjdDLE1BQU0sT0FBTyxrQkFBa0I7SUFDM0IsY0FBYztJQUNkLFlBQ1ksZ0JBQW9DLEVBQ0csZ0JBQWlDO1FBRHhFLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBb0I7UUFDRyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWlCO0lBQ2pGLENBQUM7SUFFSix5QkFBeUI7SUFDekIsU0FBUyxDQUFDLElBQU8sRUFBRSxhQUFhLEdBQUcsRUFBRTtRQUNqQyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1AsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzNGLENBQUM7YUFBTSxDQUFDO1lBQ0osT0FBTyxhQUFhLENBQUM7UUFDekIsQ0FBQztJQUNMLENBQUM7OEdBZFEsa0JBQWtCLGlEQUlILGlCQUFpQjs0R0FKaEMsa0JBQWtCOzsyRkFBbEIsa0JBQWtCO2tCQUo5QixJQUFJO21CQUFDO29CQUNGLElBQUksRUFBRSxnQkFBZ0I7b0JBQ3RCLFVBQVUsRUFBRSxJQUFJO2lCQUNuQjs7MEJBS1EsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxpQkFBaUI7O0FBaUI3QyxNQUFNLE9BQU8sZUFBZTtJQUN4QixjQUFjO0lBQ2QsWUFBb0IsZ0JBQW9DO1FBQXBDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBb0I7SUFBRyxDQUFDO0lBRTVELHlCQUF5QjtJQUN6QixTQUFTLENBQUMsSUFBTyxFQUFFLGFBQWEsR0FBRyxFQUFFO1FBQ2pDLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sSUFBSSxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDdkYsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDUCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0MsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLE9BQU8sYUFBYSxDQUFDO1lBQ3pCLENBQUM7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNKLE9BQU8sQ0FBQyxJQUFJLENBQUMscURBQXFELENBQUMsQ0FBQztZQUNwRSxPQUFPLEVBQUUsQ0FBQztRQUNkLENBQUM7SUFDTCxDQUFDOzhHQWhCUSxlQUFlOzRHQUFmLGVBQWU7OzJGQUFmLGVBQWU7a0JBSjNCLElBQUk7bUJBQUM7b0JBQ0YsSUFBSSxFQUFFLGFBQWE7b0JBQ25CLFVBQVUsRUFBRSxJQUFJO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgT3B0aW9uYWwsIFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERhdGV0aW1lQWRhcHRlciB9IGZyb20gJy4vZGF0ZXRpbWUtYWRhcHRlcic7XG5pbXBvcnQgeyBEQVRFX1RJTUVfRk9STUFUUywgRGF0ZVRpbWVGb3JtYXRzIH0gZnJvbSAnLi9kYXRldGltZS1mb3JtYXRzJztcblxuQFBpcGUoe1xuICAgIG5hbWU6ICdkYXRlRm9ybWF0JyxcbiAgICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIERhdGVGb3JtYXRQaXBlPEQ+IGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfZGF0ZVRpbWVBZGFwdGVyOiBEYXRldGltZUFkYXB0ZXI8RD4sXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoREFURV9USU1FX0ZPUk1BVFMpIHByaXZhdGUgX2RhdGVUaW1lRm9ybWF0czogRGF0ZVRpbWVGb3JtYXRzXG4gICAgKSB7fVxuXG4gICAgLyoqIEZvcm1hdCBkYXRlIG9iamVjdCAqL1xuICAgIHRyYW5zZm9ybShkYXRlOiBELCBub0RhdGVNZXNzYWdlID0gJycpOiBzdHJpbmcge1xuICAgICAgICBpZiAoZGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5mb3JtYXQoZGF0ZSwgdGhpcy5fZGF0ZVRpbWVGb3JtYXRzLmRpc3BsYXkuZGF0ZUlucHV0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBub0RhdGVNZXNzYWdlO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5AUGlwZSh7XG4gICAgbmFtZTogJ2RhdGVUaW1lRm9ybWF0JyxcbiAgICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIERhdGVUaW1lRm9ybWF0UGlwZTxEPiBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX2RhdGVUaW1lQWRhcHRlcjogRGF0ZXRpbWVBZGFwdGVyPEQ+LFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KERBVEVfVElNRV9GT1JNQVRTKSBwcml2YXRlIF9kYXRlVGltZUZvcm1hdHM6IERhdGVUaW1lRm9ybWF0c1xuICAgICkge31cblxuICAgIC8qKiBGb3JtYXQgZGF0ZSBvYmplY3QgKi9cbiAgICB0cmFuc2Zvcm0oZGF0ZTogRCwgbm9EYXRlTWVzc2FnZSA9ICcnKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKGRhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZm9ybWF0KGRhdGUsIHRoaXMuX2RhdGVUaW1lRm9ybWF0cy5kaXNwbGF5LmRhdGVUaW1lSW5wdXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5vRGF0ZU1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbkBQaXBlKHtcbiAgICBuYW1lOiAnZGF0ZUZyb21Ob3cnLFxuICAgIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgRGF0ZUZyb21Ob3dQaXBlPEQ+IGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9kYXRlVGltZUFkYXB0ZXI6IERhdGV0aW1lQWRhcHRlcjxEPikge31cblxuICAgIC8qKiBGb3JtYXQgZGF0ZSBvYmplY3QgKi9cbiAgICB0cmFuc2Zvcm0oZGF0ZTogRCwgbm9EYXRlTWVzc2FnZSA9ICcnKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuX2RhdGVUaW1lQWRhcHRlci5mcm9tTm93ICYmIHR5cGVvZiB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZnJvbU5vdyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgaWYgKGRhdGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmZyb21Ob3coZGF0ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBub0RhdGVNZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdObyBmcm9tTm93IGZ1bmN0aW9uIHByb3ZpZGVkIHRvIHRoZSBEYXRldGltZUFkYXB0ZXInKTtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
100
+ export class DayPeriodFormatPipe {
101
+ /** @hidden */
102
+ constructor(_dateTimeAdapter, _dateTimeFormats) {
103
+ this._dateTimeAdapter = _dateTimeAdapter;
104
+ this._dateTimeFormats = _dateTimeFormats;
105
+ }
106
+ /** Format date object for day period */
107
+ transform(date, customFormat = {}, noDateMessage = '') {
108
+ if (!date) {
109
+ return noDateMessage;
110
+ }
111
+ return this._dateTimeAdapter.format(date, customFormat);
112
+ }
113
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: DayPeriodFormatPipe, deps: [{ token: i1.DatetimeAdapter }, { token: DATE_TIME_FORMATS, optional: true }], target: i0.ɵɵFactoryTarget.Pipe }); }
114
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.3", ngImport: i0, type: DayPeriodFormatPipe, isStandalone: true, name: "dayPeriodFormat" }); }
115
+ }
116
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: DayPeriodFormatPipe, decorators: [{
117
+ type: Pipe,
118
+ args: [{
119
+ name: 'dayPeriodFormat',
120
+ standalone: true
121
+ }]
122
+ }], ctorParameters: () => [{ type: i1.DatetimeAdapter }, { type: undefined, decorators: [{
123
+ type: Optional
124
+ }, {
125
+ type: Inject,
126
+ args: [DATE_TIME_FORMATS]
127
+ }] }] });
128
+ export class TranslateDayPeriodPipe {
129
+ /** @hidden */
130
+ constructor(_language$) {
131
+ this._language$ = _language$;
132
+ /** @hidden */
133
+ this._translationResolver = new TranslationResolver();
134
+ this._currentLanguageSignal = toSignal(this._language$, { initialValue: {} });
135
+ }
136
+ /** Format date object for day period */
137
+ transform(value) {
138
+ if (!value) {
139
+ return value;
140
+ }
141
+ const dayPeriodPattern = /(coreTime\.\w+Label)/;
142
+ const match = value.match(dayPeriodPattern);
143
+ if (match?.[0]) {
144
+ const currentLanguage = this._currentLanguageSignal();
145
+ const translatedValue = this._translationResolver.resolve(currentLanguage, match[0]);
146
+ return translatedValue ? value.replace(dayPeriodPattern, translatedValue) : value;
147
+ }
148
+ // If no day period pattern is found, return the original value
149
+ return value;
150
+ }
151
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: TranslateDayPeriodPipe, deps: [{ token: FD_LANGUAGE }], target: i0.ɵɵFactoryTarget.Pipe }); }
152
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.3", ngImport: i0, type: TranslateDayPeriodPipe, isStandalone: true, name: "translateDayPeriod", pure: false }); }
153
+ }
154
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: TranslateDayPeriodPipe, decorators: [{
155
+ type: Pipe,
156
+ args: [{
157
+ name: 'translateDayPeriod',
158
+ standalone: true,
159
+ pure: false // required to update the value when the observable is resolved
160
+ }]
161
+ }], ctorParameters: () => [{ type: i2.Observable, decorators: [{
162
+ type: Inject,
163
+ args: [FD_LANGUAGE]
164
+ }] }] });
165
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUtZm9ybWF0LnBpcGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2RhdGV0aW1lL2RhdGV0aW1lLWZvcm1hdC5waXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQXlCLE1BQU0sZUFBZSxDQUFDO0FBQzlFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsV0FBVyxFQUF1QyxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlHLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxpQkFBaUIsRUFBbUIsTUFBTSxvQkFBb0IsQ0FBQzs7OztBQU14RSxNQUFNLE9BQU8sY0FBYztJQUN2QixjQUFjO0lBQ2QsWUFDWSxnQkFBb0MsRUFDRyxnQkFBaUM7UUFEeEUscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFvQjtRQUNHLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBaUI7SUFDakYsQ0FBQztJQUVKLHlCQUF5QjtJQUN6QixTQUFTLENBQUMsSUFBTyxFQUFFLGFBQWEsR0FBRyxFQUFFO1FBQ2pDLElBQUksSUFBSSxFQUFFLENBQUM7WUFDUCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdkYsQ0FBQzthQUFNLENBQUM7WUFDSixPQUFPLGFBQWEsQ0FBQztRQUN6QixDQUFDO0lBQ0wsQ0FBQzs4R0FkUSxjQUFjLGlEQUlDLGlCQUFpQjs0R0FKaEMsY0FBYzs7MkZBQWQsY0FBYztrQkFKMUIsSUFBSTttQkFBQztvQkFDRixJ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T3B0aW9uYWwsIFBpcGUsIFBpcGVUcmFuc2Zvcm0sIFNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBGRF9MQU5HVUFHRSwgRmRMYW5ndWFnZSwgRmRMYW5ndWFnZUtleUlkZW50aWZpZXIsIFRyYW5zbGF0aW9uUmVzb2x2ZXIgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2kxOG4nO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGF0ZXRpbWVBZGFwdGVyIH0gZnJvbSAnLi9kYXRldGltZS1hZGFwdGVyJztcbmltcG9ydCB7IERBVEVfVElNRV9GT1JNQVRTLCBEYXRlVGltZUZvcm1hdHMgfSBmcm9tICcuL2RhdGV0aW1lLWZvcm1hdHMnO1xuXG5AUGlwZSh7XG4gICAgbmFtZTogJ2RhdGVGb3JtYXQnLFxuICAgIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgRGF0ZUZvcm1hdFBpcGU8RD4gaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF9kYXRlVGltZUFkYXB0ZXI6IERhdGV0aW1lQWRhcHRlcjxEPixcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChEQVRFX1RJTUVfRk9STUFUUykgcHJpdmF0ZSBfZGF0ZVRpbWVGb3JtYXRzOiBEYXRlVGltZUZvcm1hdHNcbiAgICApIHt9XG5cbiAgICAvKiogRm9ybWF0IGRhdGUgb2JqZWN0ICovXG4gICAgdHJhbnNmb3JtKGRhdGU6IEQsIG5vRGF0ZU1lc3NhZ2UgPSAnJyk6IHN0cmluZyB7XG4gICAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmZvcm1hdChkYXRlLCB0aGlzLl9kYXRlVGltZUZvcm1hdHMuZGlzcGxheS5kYXRlSW5wdXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5vRGF0ZU1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbkBQaXBlKHtcbiAgICBuYW1lOiAnZGF0ZVRpbWVGb3JtYXQnLFxuICAgIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgRGF0ZVRpbWVGb3JtYXRQaXBlPEQ+IGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfZGF0ZVRpbWVBZGFwdGVyOiBEYXRldGltZUFkYXB0ZXI8RD4sXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoREFURV9USU1FX0ZPUk1BVFMpIHByaXZhdGUgX2RhdGVUaW1lRm9ybWF0czogRGF0ZVRpbWVGb3JtYXRzXG4gICAgKSB7fVxuXG4gICAgLyoqIEZvcm1hdCBkYXRlIG9iamVjdCAqL1xuICAgIHRyYW5zZm9ybShkYXRlOiBELCBub0RhdGVNZXNzYWdlID0gJycpOiBzdHJpbmcge1xuICAgICAgICBpZiAoZGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5mb3JtYXQoZGF0ZSwgdGhpcy5fZGF0ZVRpbWVGb3JtYXRzLmRpc3BsYXkuZGF0ZVRpbWVJbnB1dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbm9EYXRlTWVzc2FnZTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuQFBpcGUoe1xuICAgIG5hbWU6ICdkYXRlRnJvbU5vdycsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBEYXRlRnJvbU5vd1BpcGU8RD4gaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX2RhdGVUaW1lQWRhcHRlcjogRGF0ZXRpbWVBZGFwdGVyPEQ+KSB7fVxuXG4gICAgLyoqIEZvcm1hdCBkYXRlIG9iamVjdCAqL1xuICAgIHRyYW5zZm9ybShkYXRlOiBELCBub0RhdGVNZXNzYWdlID0gJycpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmZyb21Ob3cgJiYgdHlwZW9mIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5mcm9tTm93ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBpZiAoZGF0ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZnJvbU5vdyhkYXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vRGF0ZU1lc3NhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ05vIGZyb21Ob3cgZnVuY3Rpb24gcHJvdmlkZWQgdG8gdGhlIERhdGV0aW1lQWRhcHRlcicpO1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5AUGlwZSh7XG4gICAgbmFtZTogJ2RheVBlcmlvZEZvcm1hdCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBEYXlQZXJpb2RGb3JtYXRQaXBlPEQ+IGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfZGF0ZVRpbWVBZGFwdGVyOiBEYXRldGltZUFkYXB0ZXI8RD4sXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoREFURV9USU1FX0ZPUk1BVFMpIHByaXZhdGUgX2RhdGVUaW1lRm9ybWF0czogRGF0ZVRpbWVGb3JtYXRzXG4gICAgKSB7fVxuXG4gICAgLyoqIEZvcm1hdCBkYXRlIG9iamVjdCBmb3IgZGF5IHBlcmlvZCAqL1xuICAgIHRyYW5zZm9ybShkYXRlOiBELCBjdXN0b21Gb3JtYXQ6IGFueSA9IHt9LCBub0RhdGVNZXNzYWdlID0gJycpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIWRhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBub0RhdGVNZXNzYWdlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5mb3JtYXQoZGF0ZSwgY3VzdG9tRm9ybWF0KTtcbiAgICB9XG59XG5cbkBQaXBlKHtcbiAgICBuYW1lOiAndHJhbnNsYXRlRGF5UGVyaW9kJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHB1cmU6IGZhbHNlIC8vIHJlcXVpcmVkIHRvIHVwZGF0ZSB0aGUgdmFsdWUgd2hlbiB0aGUgb2JzZXJ2YWJsZSBpcyByZXNvbHZlZFxufSlcbmV4cG9ydCBjbGFzcyBUcmFuc2xhdGVEYXlQZXJpb2RQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF90cmFuc2xhdGlvblJlc29sdmVyID0gbmV3IFRyYW5zbGF0aW9uUmVzb2x2ZXIoKTtcblxuICAgIC8qKiBTaWduYWwgdGhhdCB3aWxsIGhvbGQgdGhlIGN1cnJlbnQgbGFuZ3VhZ2UgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jdXJyZW50TGFuZ3VhZ2VTaWduYWw6IFNpZ25hbDxGZExhbmd1YWdlPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoQEluamVjdChGRF9MQU5HVUFHRSkgcHJpdmF0ZSBfbGFuZ3VhZ2UkOiBPYnNlcnZhYmxlPEZkTGFuZ3VhZ2U+KSB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRMYW5ndWFnZVNpZ25hbCA9IHRvU2lnbmFsKHRoaXMuX2xhbmd1YWdlJCwgeyBpbml0aWFsVmFsdWU6IHt9IGFzIEZkTGFuZ3VhZ2UgfSk7XG4gICAgfVxuXG4gICAgLyoqIEZvcm1hdCBkYXRlIG9iamVjdCBmb3IgZGF5IHBlcmlvZCAqL1xuICAgIHRyYW5zZm9ybSh2YWx1ZTogc3RyaW5nIHwgbnVsbCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXlQZXJpb2RQYXR0ZXJuID0gLyhjb3JlVGltZVxcLlxcdytMYWJlbCkvO1xuICAgICAgICBjb25zdCBtYXRjaCA9IHZhbHVlLm1hdGNoKGRheVBlcmlvZFBhdHRlcm4pO1xuXG4gICAgICAgIGlmIChtYXRjaD8uWzBdKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50TGFuZ3VhZ2UgPSB0aGlzLl9jdXJyZW50TGFuZ3VhZ2VTaWduYWwoKTtcbiAgICAgICAgICAgIGNvbnN0IHRyYW5zbGF0ZWRWYWx1ZSA9IHRoaXMuX3RyYW5zbGF0aW9uUmVzb2x2ZXIucmVzb2x2ZShcbiAgICAgICAgICAgICAgICBjdXJyZW50TGFuZ3VhZ2UsXG4gICAgICAgICAgICAgICAgbWF0Y2hbMF0gYXMgRmRMYW5ndWFnZUtleUlkZW50aWZpZXJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gdHJhbnNsYXRlZFZhbHVlID8gdmFsdWUucmVwbGFjZShkYXlQZXJpb2RQYXR0ZXJuLCB0cmFuc2xhdGVkVmFsdWUpIDogdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBubyBkYXkgcGVyaW9kIHBhdHRlcm4gaXMgZm91bmQsIHJldHVybiB0aGUgb3JpZ2luYWwgdmFsdWVcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Converts a given time string to a desired format.
3
+ *
4
+ * @param {string} inputStr - The input time string to be converted.
5
+ * @returns {string} - The converted time string in the desired format.
6
+ */
7
+ export function convertToDesiredFormat(inputStr) {
8
+ const dayPeriodMapping = {
9
+ morning: 0,
10
+ afternoon: 12,
11
+ evening: 12,
12
+ night: 0
13
+ };
14
+ const dayPeriodPattern = /\b(morning|afternoon|evening|night)\b/;
15
+ const amPmPattern = /\b(AM|PM)\b/i;
16
+ const convertDayPeriod = (input) => {
17
+ const match = input.match(dayPeriodPattern);
18
+ if (match) {
19
+ const period = match[0].toLowerCase();
20
+ const timeShift = dayPeriodMapping[period];
21
+ input = input.replace(dayPeriodPattern, '').trim();
22
+ const timeMatch = input.match(/\d{1,2}:\d{2}/);
23
+ if (timeMatch) {
24
+ const [hoursStr, minutesStr] = timeMatch[0].split(':');
25
+ let hours = Number(hoursStr);
26
+ const minutes = Number(minutesStr);
27
+ hours = (hours % 12) + timeShift;
28
+ input = input.replace(timeMatch[0], `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`);
29
+ }
30
+ }
31
+ return input;
32
+ };
33
+ const convertAmPm = (input) => {
34
+ const match = input.match(amPmPattern);
35
+ if (match) {
36
+ const period = match[0].toUpperCase();
37
+ input = input.replace(amPmPattern, '').trim();
38
+ const timeMatch = input.match(/\d{1,2}:\d{2}/);
39
+ if (timeMatch) {
40
+ const [hoursStr, minutesStr] = timeMatch[0].split(':');
41
+ let hours = Number(hoursStr);
42
+ const minutes = Number(minutesStr);
43
+ if (period === 'PM' && hours < 12) {
44
+ hours += 12;
45
+ }
46
+ if (period === 'AM' && hours === 12) {
47
+ hours = 0;
48
+ }
49
+ input = input.replace(timeMatch[0], `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`);
50
+ }
51
+ }
52
+ return input;
53
+ };
54
+ inputStr = convertDayPeriod(inputStr);
55
+ inputStr = convertAmPm(inputStr);
56
+ return inputStr.replace(/\bat\b/i, '').trim();
57
+ }
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUtdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvZGF0ZXRpbWUvZGF0ZXRpbWUtdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsUUFBZ0I7SUFDbkQsTUFBTSxnQkFBZ0IsR0FBRztRQUNyQixPQUFPLEVBQUUsQ0FBQztRQUNWLFNBQVMsRUFBRSxFQUFFO1FBQ2IsT0FBTyxFQUFFLEVBQUU7UUFDWCxLQUFLLEVBQUUsQ0FBQztLQUNYLENBQUM7SUFFRixNQUFNLGdCQUFnQixHQUFHLHVDQUF1QyxDQUFDO0lBQ2pFLE1BQU0sV0FBVyxHQUFHLGNBQWMsQ0FBQztJQUVuQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsS0FBYSxFQUFVLEVBQUU7UUFDL0MsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzVDLElBQUksS0FBSyxFQUFFLENBQUM7WUFDUixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdEMsTUFBTSxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDM0MsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbkQsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUMvQyxJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUNaLE1BQU0sQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDdkQsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUM3QixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ25DLEtBQUssR0FBRyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUM7Z0JBQ2pDLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUNqQixTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQ1osR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUNoRixDQUFDO1lBQ04sQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDLENBQUM7SUFFRixNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQWEsRUFBVSxFQUFFO1FBQzFDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdkMsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNSLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN0QyxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDOUMsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUMvQyxJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUNaLE1BQU0sQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDdkQsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUM3QixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ25DLElBQUksTUFBTSxLQUFLLElBQUksSUFBSSxLQUFLLEdBQUcsRUFBRSxFQUFFLENBQUM7b0JBQ2hDLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ2hCLENBQUM7Z0JBQ0QsSUFBSSxNQUFNLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFLEVBQUUsQ0FBQztvQkFDbEMsS0FBSyxHQUFHLENBQUMsQ0FBQztnQkFDZCxDQUFDO2dCQUNELEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUNqQixTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQ1osR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUNoRixDQUFDO1lBQ04sQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDLENBQUM7SUFFRixRQUFRLEdBQUcsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdEMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUVqQyxPQUFPLFFBQVEsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2xELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbnZlcnRzIGEgZ2l2ZW4gdGltZSBzdHJpbmcgdG8gYSBkZXNpcmVkIGZvcm1hdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRTdHIgLSBUaGUgaW5wdXQgdGltZSBzdHJpbmcgdG8gYmUgY29udmVydGVkLlxuICogQHJldHVybnMge3N0cmluZ30gLSBUaGUgY29udmVydGVkIHRpbWUgc3RyaW5nIGluIHRoZSBkZXNpcmVkIGZvcm1hdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRUb0Rlc2lyZWRGb3JtYXQoaW5wdXRTdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgZGF5UGVyaW9kTWFwcGluZyA9IHtcbiAgICAgICAgbW9ybmluZzogMCxcbiAgICAgICAgYWZ0ZXJub29uOiAxMixcbiAgICAgICAgZXZlbmluZzogMTIsXG4gICAgICAgIG5pZ2h0OiAwXG4gICAgfTtcblxuICAgIGNvbnN0IGRheVBlcmlvZFBhdHRlcm4gPSAvXFxiKG1vcm5pbmd8YWZ0ZXJub29ufGV2ZW5pbmd8bmlnaHQpXFxiLztcbiAgICBjb25zdCBhbVBtUGF0dGVybiA9IC9cXGIoQU18UE0pXFxiL2k7XG5cbiAgICBjb25zdCBjb252ZXJ0RGF5UGVyaW9kID0gKGlucHV0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgICAgICBjb25zdCBtYXRjaCA9IGlucHV0Lm1hdGNoKGRheVBlcmlvZFBhdHRlcm4pO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIGNvbnN0IHBlcmlvZCA9IG1hdGNoWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBjb25zdCB0aW1lU2hpZnQgPSBkYXlQZXJpb2RNYXBwaW5nW3BlcmlvZF07XG4gICAgICAgICAgICBpbnB1dCA9IGlucHV0LnJlcGxhY2UoZGF5UGVyaW9kUGF0dGVybiwgJycpLnRyaW0oKTtcbiAgICAgICAgICAgIGNvbnN0IHRpbWVNYXRjaCA9IGlucHV0Lm1hdGNoKC9cXGR7MSwyfTpcXGR7Mn0vKTtcbiAgICAgICAgICAgIGlmICh0aW1lTWF0Y2gpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBbaG91cnNTdHIsIG1pbnV0ZXNTdHJdID0gdGltZU1hdGNoWzBdLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICAgICAgbGV0IGhvdXJzID0gTnVtYmVyKGhvdXJzU3RyKTtcbiAgICAgICAgICAgICAgICBjb25zdCBtaW51dGVzID0gTnVtYmVyKG1pbnV0ZXNTdHIpO1xuICAgICAgICAgICAgICAgIGhvdXJzID0gKGhvdXJzICUgMTIpICsgdGltZVNoaWZ0O1xuICAgICAgICAgICAgICAgIGlucHV0ID0gaW5wdXQucmVwbGFjZShcbiAgICAgICAgICAgICAgICAgICAgdGltZU1hdGNoWzBdLFxuICAgICAgICAgICAgICAgICAgICBgJHtob3Vycy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9OiR7bWludXRlcy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9YFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH07XG5cbiAgICBjb25zdCBjb252ZXJ0QW1QbSA9IChpbnB1dDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBpbnB1dC5tYXRjaChhbVBtUGF0dGVybik7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgY29uc3QgcGVyaW9kID0gbWF0Y2hbMF0udG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIGlucHV0ID0gaW5wdXQucmVwbGFjZShhbVBtUGF0dGVybiwgJycpLnRyaW0oKTtcbiAgICAgICAgICAgIGNvbnN0IHRpbWVNYXRjaCA9IGlucHV0Lm1hdGNoKC9cXGR7MSwyfTpcXGR7Mn0vKTtcbiAgICAgICAgICAgIGlmICh0aW1lTWF0Y2gpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBbaG91cnNTdHIsIG1pbnV0ZXNTdHJdID0gdGltZU1hdGNoWzBdLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICAgICAgbGV0IGhvdXJzID0gTnVtYmVyKGhvdXJzU3RyKTtcbiAgICAgICAgICAgICAgICBjb25zdCBtaW51dGVzID0gTnVtYmVyKG1pbnV0ZXNTdHIpO1xuICAgICAgICAgICAgICAgIGlmIChwZXJpb2QgPT09ICdQTScgJiYgaG91cnMgPCAxMikge1xuICAgICAgICAgICAgICAgICAgICBob3VycyArPSAxMjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHBlcmlvZCA9PT0gJ0FNJyAmJiBob3VycyA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgaG91cnMgPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpbnB1dCA9IGlucHV0LnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgIHRpbWVNYXRjaFswXSxcbiAgICAgICAgICAgICAgICAgICAgYCR7aG91cnMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfToke21pbnV0ZXMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfWBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9O1xuXG4gICAgaW5wdXRTdHIgPSBjb252ZXJ0RGF5UGVyaW9kKGlucHV0U3RyKTtcbiAgICBpbnB1dFN0ciA9IGNvbnZlcnRBbVBtKGlucHV0U3RyKTtcblxuICAgIHJldHVybiBpbnB1dFN0ci5yZXBsYWNlKC9cXGJhdFxcYi9pLCAnJykudHJpbSgpO1xufVxuIl19
@@ -206,9 +206,9 @@ export class FdDatetimeAdapter extends DatetimeAdapter {
206
206
  date.year = Math.max(1, Math.min(9999, date.year));
207
207
  }
208
208
  displayFormat = { ...displayFormat, timeZone: 'utc' };
209
- const dateTimeFormatter = new Intl.DateTimeFormat(this.locale, displayFormat);
210
- const dateInstance = this._createDateInstanceByFdDate(date);
211
- return this._stripDirectionalityCharacters(this._format(dateTimeFormatter, dateInstance));
209
+ return displayFormat.dayPeriod
210
+ ? this._formatWithDayPeriod(date, displayFormat)
211
+ : this._formatWithIntl(date, displayFormat);
212
212
  }
213
213
  /** Add years to a date */
214
214
  addCalendarYears(date, years) {
@@ -291,6 +291,45 @@ export class FdDatetimeAdapter extends DatetimeAdapter {
291
291
  isTimeFormatIncludesSeconds(displayFormat) {
292
292
  return typeof displayFormat?.second === 'string';
293
293
  }
294
+ /** Format with custom pattern including day period names */
295
+ _formatWithDayPeriod(date, displayFormat) {
296
+ const formattedTime = this._formatWithIntl(date, { ...displayFormat, dayPeriod: undefined });
297
+ const dayPeriodName = this._getDayPeriodName(date);
298
+ return this._insertDayPeriod(formattedTime, dayPeriodName, displayFormat);
299
+ }
300
+ /** Insert day period into the formatted string */
301
+ _insertDayPeriod(formattedTime, dayPeriodName, displayFormat) {
302
+ if (displayFormat.year || displayFormat.month || displayFormat.day) {
303
+ return formattedTime
304
+ .replace(/(\d{1,2}:\d{2})( [AP]M)?/, `$1 ${dayPeriodName}`)
305
+ .replace(/,\s*(\d{1,2}:\d{2})/, `, at $1 ${dayPeriodName}`);
306
+ }
307
+ else {
308
+ return formattedTime.replace(/(\d{1,2}:\d{2}(:\d{2})?)/, `$1 ${dayPeriodName}`);
309
+ }
310
+ }
311
+ /** Get day period name based on the hour */
312
+ _getDayPeriodName(date) {
313
+ const hour = date.hour;
314
+ if (hour < 6) {
315
+ return 'coreTime.nightLabel';
316
+ }
317
+ else if (hour < 12) {
318
+ return 'coreTime.morningLabel';
319
+ }
320
+ else if (hour < 18) {
321
+ return 'coreTime.afternoonLabel';
322
+ }
323
+ else {
324
+ return 'coreTime.eveningLabel';
325
+ }
326
+ }
327
+ /** Format date using Intl.DateTimeFormat */
328
+ _formatWithIntl(date, displayFormat) {
329
+ const formatter = new Intl.DateTimeFormat(this.locale, displayFormat);
330
+ const dateInstance = this._createDateInstanceByFdDate(date);
331
+ return this._stripDirectionalityCharacters(this._format(formatter, dateInstance));
332
+ }
294
333
  /**
295
334
  * @hidden
296
335
  * Strip out unicode LTR and RTL characters. Edge and IE insert these into formatted dates while
@@ -381,4 +420,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImpor
381
420
  type: Inject,
382
421
  args: [LOCALE_ID]
383
422
  }] }, { type: i1.Platform }] });
384
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmQtZGF0ZXRpbWUtYWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9kYXRldGltZS9mZC1kYXRldGltZS1hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXhFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXZGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ25DLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQUVuRCxNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQztBQUNuQyxNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQztBQUVuQzs7Ozs7O0dBTUc7QUFHSCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsZUFBdUI7SUFJMUQsY0FBYztJQUNkLFlBQTJDLFFBQWdCLEVBQUUsUUFBa0I7UUFDM0UsS0FBSyxFQUFFLENBQUM7UUFFUixLQUFLLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTFCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxRQUFRLENBQUMsT0FBTyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUM7SUFDakUsQ0FBQztJQUtELGVBQWU7SUFDZixPQUFPLENBQUMsSUFBWTtRQUNoQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDckIsQ0FBQztJQUVELGdCQUFnQjtJQUNoQixRQUFRLENBQUMsSUFBWTtRQUNqQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDdEIs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ZTtRQUNwQzs7O1dBR0c7UUFDSCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUMvRixNQUFNLGNBQWMsR0FBRyxHQUFHLE9BQU8sSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUMvQyxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztJQUNoRCxDQUFDOzhHQXhjUSxpQkFBaUIsa0JBS00sU0FBUztrSEFMaEMsaUJBQWlCOzsyRkFBakIsaUJBQWlCO2tCQUQ3QixVQUFVOzswQkFNTSxRQUFROzswQkFBSSxNQUFNOzJCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGF0Zm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wbGF0Zm9ybSc7XG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIExPQ0FMRV9JRCwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgSU5WQUxJRF9EQVRFX0VSUk9SLCBMRVRURVJTX1VOSUNPREVfUkFOR0UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5cbmltcG9ydCB7IERhdGV0aW1lQWRhcHRlciB9IGZyb20gJy4vZGF0ZXRpbWUtYWRhcHRlcic7XG5pbXBvcnQgeyBGZERhdGUgfSBmcm9tICcuL2ZkLWRhdGUnO1xuaW1wb3J0IHsgcmFuZ2UsIHRvSXNvODYwMSB9IGZyb20gJy4vZmQtZGF0ZS51dGlscyc7XG5cbmNvbnN0IEFNX0RBWV9QRVJJT0RfREVGQVVMVCA9ICdBTSc7XG5jb25zdCBQTV9EQVlfUEVSSU9EX0RFRkFVTFQgPSAnUE0nO1xuXG4vKipcbiAqIERhdGV0aW1lQWRhcHRlciBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiBGZERhdGUuXG4gKlxuICogVGhpcyB1c2VzIEZkRGF0ZSBhcyBhIGRhdGUgbW9kZWwgYW5kIHJlbGllcyBvbiBJbnRsLkRhdGVUaW1lRm9ybWF0XG4gKiBmb3IgZm9ybWF0dGluZyBhbmQgdHJhbnNsYXRpb24gcHVycG9zZXMuXG4gKlxuICovXG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBGZERhdGV0aW1lQWRhcHRlciBleHRlbmRzIERhdGV0aW1lQWRhcHRlcjxGZERhdGU+IHtcbiAgICAvKiogV2hldGhlciB0byBjbGFtcCB0aGUgZGF0ZSBiZXR3ZWVuIDEgYW5kIDk5OTkgdG8gYXZvaWQgSUUgYW5kIEVkZ2UgZXJyb3JzLiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2ZpeFllYXJzUmFuZ2VJc3N1ZTogYm9vbGVhbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEluamVjdChMT0NBTEVfSUQpIGxvY2FsZUlkOiBzdHJpbmcsIHBsYXRmb3JtOiBQbGF0Zm9ybSkge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIHN1cGVyLnNldExvY2FsZShsb2NhbGVJZCk7XG5cbiAgICAgICAgdGhpcy5fZml4WWVhcnNSYW5nZUlzc3VlID0gcGxhdGZvcm0uVFJJREVOVCB8fCBwbGF0Zm9ybS5FREdFO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZnJvbU5vdz8oZGF0ZTogRmREYXRlKTogc3RyaW5nO1xuXG4gICAgLyoqIEdldCB5ZWFyICovXG4gICAgZ2V0WWVhcihkYXRlOiBGZERhdGUpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gZGF0ZS55ZWFyO1xuICAgIH1cblxuICAgIC8qKiBHZXQgbW9udGggKi9cbiAgICBnZXRNb250aChkYXRlOiBGZERhdGUpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gZGF0ZS5tb250aDtcbiAgICB9XG5cbiAgICAvKiogR2V0IGRhdGUgKi9cbiAgICBnZXREYXRlKGRhdGU6IEZkRGF0ZSk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBkYXRlLmRheTtcbiAgICB9XG5cbiAgICAvKiogR2V0IGRheSBvZiB3ZWVrICovXG4gICAgZ2V0RGF5T2ZXZWVrKGRhdGU6IEZkRGF0ZSk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jcmVhdGVEYXRlSW5zdGFuY2VCeUZkRGF0ZShkYXRlKS5nZXREYXkoKSArIDE7XG4gICAgfVxuXG4gICAgLyoqIEdldCBob3VycyAqL1xuICAgIGdldEhvdXJzKGRhdGU6IEZkRGF0ZSk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBkYXRlLmhvdXI7XG4gICAgfVxuXG4gICAgLyoqIEdldCBtaW51dGVzICovXG4gICAgZ2V0TWludXRlcyhkYXRlOiBGZERhdGUpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gZGF0ZS5taW51dGU7XG4gICAgfVxuXG4gICAgLyoqIEdldCBzZWNvbmRzICovXG4gICAgZ2V0U2Vjb25kcyhkYXRlOiBGZERhdGUpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gZGF0ZS5zZWNvbmQ7XG4gICAgfVxuXG4gICAgLyoqIEdldCB3ZWVrIG51bWJlciAqL1xuICAgIGdldFdlZWtOdW1iZXIoZmREYXRlOiBGZERhdGUpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBkYXRlID0gdGhpcy5fY3JlYXRlRGF0ZUluc3RhbmNlQnlGZERhdGUoZmREYXRlKTtcblxuICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyAzIC0gKChkYXRlLmdldERheSgpICsgNikgJSA3KSk7XG5cbiAgICAgICAgLy8gSmFudWFyeSA0IGlzIGFsd2F5cyBpbiB3ZWVrIDEuXG4gICAgICAgIGNvbnN0IGZpcnN0V2VlayA9IG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgMCwgNCk7XG5cbiAgICAgICAgLy8gQWRqdXN0IHRvIFRodXJzZGF5IGluIHdlZWsgMSBhbmQgY291bnQgbnVtYmVyIG9mIHdlZWtzIGZyb20gZGF0ZSB0byB3ZWVrMS5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDEgKyBNYXRoLnJvdW5kKCgoZGF0ZS5nZXRUaW1lKCkgLSBmaXJzdFdlZWsuZ2V0VGltZSgpKSAvIDg2NDAwMDAwIC0gMyArICgoZmlyc3RXZWVrLmdldERheSgpICsgNikgJSA3KSkgLyA3KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBHZXQgbW9udGggbmFtZXMgKi9cbiAgICBnZXRNb250aE5hbWVzKHN0eWxlOiAnbG9uZycgfCAnc2hvcnQnIHwgJ25hcnJvdycpOiBzdHJpbmdbXSB7XG4gICAgICAgIGNvbnN0IGRhdGVUaW1lRm9ybWF0ID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodGhpcy5sb2NhbGUsIHsgbW9udGg6IHN0eWxlLCB0aW1lWm9uZTogJ3V0YycgfSk7XG4gICAgICAgIHJldHVybiByYW5nZSgxMiwgKGkpID0+XG4gICAgICAgICAgICB0aGlzLl9zdHJpcERpcmVjdGlvbmFsaXR5Q2hhcmFjdGVycyh0aGlzLl9mb3JtYXQoZGF0ZVRpbWVGb3JtYXQsIG5ldyBEYXRlKDIwMTcsIGksIDEpKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogR2V0IGRhdGUgbmFtZXMgKi9cbiAgICBnZXREYXRlTmFtZXMoKTogc3RyaW5nW10ge1xuICAgICAgICBjb25zdCBkYXRlVGltZUZvcm1hdCA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHRoaXMubG9jYWxlLCB7IGRheTogJ251bWVyaWMnLCB0aW1lWm9uZTogJ3V0YycgfSk7XG4gICAgICAgIHJldHVybiByYW5nZSgzMSwgKGkpID0+XG4gICAgICAgICAgICB0aGlzLl9zdHJpcERpcmVjdGlvbmFsaXR5Q2hhcmFjdGVycyh0aGlzLl9mb3JtYXQoZGF0ZVRpbWVGb3JtYXQsIG5ldyBEYXRlKDIwMTcsIDAsIGkgKyAxKSkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEdldCBkYXkgb2Ygd2VlayBuYW1lcyAqL1xuICAgIGdldERheU9mV2Vla05hbWVzKHN0eWxlOiAnbG9uZycgfCAnc2hvcnQnIHwgJ25hcnJvdycpOiBzdHJpbmdbXSB7XG4gICAgICAgIGNvbnN0IGRhdGVUaW1lRm9ybWF0ID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodGhpcy5sb2NhbGUsIHsgd2Vla2RheTogc3R5bGUsIHRpbWVab25lOiAndXRjJyB9KTtcbiAgICAgICAgcmV0dXJuIHJhbmdlKDcsIChpKSA9PlxuICAgICAgICAgICAgdGhpcy5fc3RyaXBEaXJlY3Rpb25hbGl0eUNoYXJhY3RlcnModGhpcy5fZm9ybWF0KGRhdGVUaW1lRm9ybWF0LCBuZXcgRGF0ZSgyMDE3LCAwLCBpICsgMSkpKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBHZXQgeWVhciBuYW1lICovXG4gICAgZ2V0WWVhck5hbWUoZGF0ZTogRmREYXRlKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZGF0ZVRpbWVGb3JtYXQgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh0aGlzLmxvY2FsZSwgeyB5ZWFyOiAnbnVtZXJpYycsIHRpbWVab25lOiAndXRjJyB9KTtcbiAgICAgICAgY29uc3QgZGF0ZUluc3RhbmNlID0gdGhpcy5fY3JlYXRlRGF0ZUluc3RhbmNlQnlGZERhdGUoZGF0ZSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdHJpcERpcmVjdGlvbmFsaXR5Q2hhcmFjdGVycyh0aGlzLl9mb3JtYXQoZGF0ZVRpbWVGb3JtYXQsIGRhdGVJbnN0YW5jZSkpO1xuICAgIH1cblxuICAgIC8qKiBHZXQgd2VlayBuYW1lICovXG4gICAgZ2V0V2Vla05hbWUoZGF0ZTogRmREYXRlKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3Qgd2Vla051bWJlciA9IHRoaXMuZ2V0V2Vla051bWJlcihkYXRlKTtcbiAgICAgICAgcmV0dXJuIHdlZWtOdW1iZXIudG9Mb2NhbGVTdHJpbmcodGhpcy5sb2NhbGUpO1xuICAgIH1cblxuICAgIC8qKiBHZXQgaG91ciBuYW1lcyAqL1xuICAgIGdldEhvdXJOYW1lcyh7IG1lcmlkaWFuLCB0d29EaWdpdCB9OiB7IHR3b0RpZ2l0OiBib29sZWFuOyBtZXJpZGlhbjogYm9vbGVhbiB9KTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gcmFuZ2UoMjQsIChob3VyKSA9PiB7XG4gICAgICAgICAgICBpZiAobWVyaWRpYW4pIHtcbiAgICAgICAgICAgICAgICBob3VyID0gaG91ciA9PT0gMCB8fCBob3VyID09PSAxMiA/IDEyIDogaG91ciAlIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGhvdXIudG9Mb2NhbGVTdHJpbmcodGhpcy5sb2NhbGUsIHsgbWluaW11bUludGVnZXJEaWdpdHM6IHR3b0RpZ2l0ID8gMiA6IDEgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBHZXQgbWludXRlIG5hbWVzICovXG4gICAgZ2V0TWludXRlTmFtZXMoeyB0d29EaWdpdCB9OiB7IHR3b0RpZ2l0OiBib29sZWFuIH0pOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiByYW5nZSg2MCwgKG1pbnV0ZSkgPT4gbWludXRlLnRvTG9jYWxlU3RyaW5nKHRoaXMubG9jYWxlLCB7IG1pbmltdW1JbnRlZ2VyRGlnaXRzOiB0d29EaWdpdCA/IDIgOiAxIH0pKTtcbiAgICB9XG5cbiAgICAvKiogR2V0IHNlY29uZCBuYW1lcyAqL1xuICAgIGdldFNlY29uZE5hbWVzKHsgdHdvRGlnaXQgfTogeyB0d29EaWdpdDogYm9vbGVhbiB9KTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gcmFuZ2UoNjAsIChzZWNvbmQpID0+IHNlY29uZC50b0xvY2FsZVN0cmluZyh0aGlzLmxvY2FsZSwgeyBtaW5pbXVtSW50ZWdlckRpZ2l0czogdHdvRGlnaXQgPyAyIDogMSB9KSk7XG4gICAgfVxuXG4gICAgLyoqIEdldCBkYXkgcGVyaW9kIG5hbWVzICovXG4gICAgZ2V0RGF5UGVyaW9kTmFtZXMoKTogW3N0cmluZywgc3RyaW5nXSB7XG4gICAgICAgIGNvbnN0IERFRkFVTFRfUEVSSU9EUzogW3N0cmluZywgc3RyaW5nXSA9IFtBTV9EQVlfUEVSSU9EX0RFRkFVTFQsIFBNX0RBWV9QRVJJT0RfREVGQVVMVF07XG5cbiAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodGhpcy5sb2NhbGUsIHtcbiAgICAgICAgICAgIGhvdXI6ICdudW1lcmljJyxcbiAgICAgICAgICAgIG1pbnV0ZTogJ251bWVyaWMnLFxuICAgICAgICAgICAgaG91cjEyOiB0cnVlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBhbSA9IGZvcm1hdHRlci5mb3JtYXRUb1BhcnRzKG5ldyBEYXRlKDIwMjAsIDAsIDEsIDYpKS5maW5kKCh7IHR5cGUgfSkgPT4gdHlwZSA9PT0gJ2RheVBlcmlvZCcpPy52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IHBtID0gZm9ybWF0dGVyLmZvcm1hdFRvUGFydHMobmV3IERhdGUoMjAyMCwgMCwgMSwgMTYpKS5maW5kKCh7IHR5cGUgfSkgPT4gdHlwZSA9PT0gJ2RheVBlcmlvZCcpXG4gICAgICAgICAgICAgICAgPy52YWx1ZTtcblxuICAgICAgICAgICAgcmV0dXJuIGFtICYmIHBtID8gW2FtLCBwbV0gOiBERUZBVUxUX1BFUklPRFM7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRheVBlcmlvZFJlZ2V4cCA9IG5ldyBSZWdFeHAoYCgke0xFVFRFUlNfVU5JQ09ERV9SQU5HRX0rXFxcXC4qKStgLCAnZycpO1xuICAgICAgICAgICAgY29uc3QgYW1SZWdFeHBNYXRjaCA9IGZvcm1hdHRlci5mb3JtYXQobmV3IERhdGUoMjAyMCwgMCwgMSwgNikpLm1hdGNoKGRheVBlcmlvZFJlZ2V4cCk7XG4gICAgICAgICAgICBjb25zdCBwbVJlZ0V4cE1hdGNoID0gZm9ybWF0dGVyLmZvcm1hdChuZXcgRGF0ZSgyMDIwLCAwLCAxLCAxNikpLm1hdGNoKGRheVBlcmlvZFJlZ2V4cCk7XG5cbiAgICAgICAgICAgIHJldHVybiBhbVJlZ0V4cE1hdGNoICYmIHBtUmVnRXhwTWF0Y2hcbiAgICAgICAgICAgICAgICA/IFthbVJlZ0V4cE1hdGNoWzBdLCBwbVJlZ0V4cE1hdGNoWzBdXVxuICAgICAgICAgICAgICAgIDogW0FNX0RBWV9QRVJJT0RfREVGQVVMVCwgUE1fREFZX1BFUklPRF9ERUZBVUxUXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBTZXQgaG91cnMgKi9cbiAgICBzZXRIb3VycyhkYXRlOiBGZERhdGUsIGhvdXJzOiBudW1iZXIpOiBGZERhdGUge1xuICAgICAgICBjb25zdCBkYXRlSW5zdGFuY2UgPSB0aGlzLl9jcmVhdGVEYXRlSW5zdGFuY2VCeUZkRGF0ZShkYXRlKTtcbiAgICAgICAgZGF0ZUluc3RhbmNlLnNldEhvdXJzKGhvdXJzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUZkRGF0ZUZyb21EYXRlSW5zdGFuY2UoZGF0ZUluc3RhbmNlKTtcbiAgICB9XG5cbiAgICAvKiogU2V0IG1pbnV0ZXMgKi9cbiAgICBzZXRNaW51dGVzKGRhdGU6IEZkRGF0ZSwgaG91cnM6IG51bWJlcik6IEZkRGF0ZSB7XG4gICAgICAgIGNvbnN0IGRhdGVJbnN0YW5jZSA9IHRoaXMuX2NyZWF0ZURhdGVJbnN0YW5jZUJ5RmREYXRlKGRhdGUpO1xuICAgICAgICBkYXRlSW5zdGFuY2Uuc2V0TWludXRlcyhob3Vycyk7XG4gICAgICAgIHJldHVybiB0aGlzLl9jcmVhdGVGZERhdGVGcm9tRGF0ZUluc3RhbmNlKGRhdGVJbnN0YW5jZSk7XG4gICAgfVxuXG4gICAgLyoqIFNldCBzZWNvbmRzICovXG4gICAgc2V0U2Vjb25kcyhkYXRlOiBGZERhdGUsIGhvdXJzOiBudW1iZXIpOiBGZERhdGUge1xuICAgICAgICBjb25zdCBkYXRlSW5zdGFuY2UgPSB0aGlzLl9jcmVhdGVEYXRlSW5zdGFuY2VCeUZkRGF0ZShkYXRlKTtcbiAgICAgICAgZGF0ZUluc3RhbmNlLnNldFNlY29uZHMoaG91cnMpO1xuICAgICAgICByZXR1cm4gdGhpcy5fY3JlYXRlRmREYXRlRnJvbURhdGVJbnN0YW5jZShkYXRlSW5zdGFuY2UpO1xuICAgIH1cblxuICAgIC8qKiBHZXQgZmlyc3QgZGF5IG9mIHdlZWsgKi9cbiAgICBnZXRGaXJzdERheU9mV2VlaygpOiBudW1iZXIge1xuICAgICAgICAvLyBjYW4ndCByZXRyaWV2ZSB0aGlzIGluZm8gZnJvbSBJbnRsIG9iamVjdCBvciBEYXRlIG9iamVjdCwgZGVmYXVsdCB0byBTdW5kYXkuXG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIC8qKiBHZXQgbnVtYmVyIG9mIGRheXMgaW4gYSBtb250aCAqL1xuICAgIGdldE51bURheXNJbk1vbnRoKGZkRGF0ZTogRmREYXRlKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IHRoaXMuX2NyZWF0ZURhdGVJbnN0YW5jZUJ5RmREYXRlKGZkRGF0ZSk7XG4gICAgICAgIGRhdGUuc2V0TW9udGgoZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgIGRhdGUuc2V0RGF0ZSgwKTtcbiAgICAgICAgcmV0dXJuIGRhdGUuZ2V0RGF0ZSgpO1xuICAgIH1cblxuICAgIC8qKiBDcmVhdGUgYSBkYXRlIG9iamVjdCAqL1xuICAgIGNyZWF0ZURhdGUoeWVhcjogbnVtYmVyLCBtb250aCA9IDEsIGRhdGUgPSAxKTogRmREYXRlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGZERhdGUoeWVhciwgbW9udGgsIGRhdGUpO1xuICAgIH1cblxuICAgIC8qKiBHZXQgYSB0b2RheSBkYXRlIG9iamVjdCAqL1xuICAgIHRvZGF5KCk6IEZkRGF0ZSB7XG4gICAgICAgIHJldHVybiBGZERhdGUuZ2V0VG9kYXkoKTtcbiAgICB9XG5cbiAgICAvKiogR2V0IGEgbm93IGRhdGUgb2JqZWN0ICovXG4gICAgbm93KCk6IEZkRGF0ZSB7XG4gICAgICAgIHJldHVybiBGZERhdGUuZ2V0Tm93KCk7XG4gICAgfVxuXG4gICAgLyoqIFBhcnNlIGFueSB2YWx1ZSB0byBkYXRlIG9iamVjdCAqL1xuICAgIHBhcnNlKHZhbHVlOiBhbnksIHBhcnNlRm9ybWF0OiBJbnRsLkRhdGVUaW1lRm9ybWF0T3B0aW9ucyA9IHt9KTogRmREYXRlIHwgbnVsbCB7XG4gICAgICAgIGlmICghdmFsdWUgJiYgdmFsdWUgIT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRmREYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jbG9uZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFdlIGhhdmUgbm8gd2F5IHVzaW5nIHRoZSBuYXRpdmUgSlMgRGF0ZSB0byBzZXQgdGhlIHBhcnNlIGZvcm1hdCBvciBsb2NhbGUsXG4gICAgICAgICAqIHNvIHdlIGlnbm9yZSB0aGVzZSBwYXJhbWV0ZXJzLlxuICAgICAgICAgKi9cbiAgICAgICAgbGV0IGRhdGUgPSBuZXcgRGF0ZShEYXRlLnBhcnNlKHZhbHVlKSk7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYXJlIGRlYWxpbmcgd2l0aCBhIHRpbWUgc3RyaW5nXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIE51bWJlci5pc05hTihkYXRlLnZhbHVlT2YoKSkgJiZcbiAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICFwYXJzZUZvcm1hdC55ZWFyICYmXG4gICAgICAgICAgICAhcGFyc2VGb3JtYXQuZGF5ICYmXG4gICAgICAgICAgICAhcGFyc2VGb3JtYXQubW9udGggJiZcbiAgICAgICAgICAgIHBhcnNlRm9ybWF0LmhvdXJcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBkYXRlID0gdGhpcy5fcGFyc2VUaW1lU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9jcmVhdGVGZERhdGVGcm9tRGF0ZUluc3RhbmNlKGRhdGUpO1xuICAgIH1cblxuICAgIC8qKiBGb3JtYXQgZGF0ZSBvYmplY3QgdG8gc3RyaW5nICovXG4gICAgZm9ybWF0KGRhdGU6IEZkRGF0ZSwgZGlzcGxheUZvcm1hdDogSW50bC5EYXRlVGltZUZvcm1hdE9wdGlvbnMpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZChkYXRlKSkge1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSURfREFURV9FUlJPUjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9uIElFIGFuZCBFZGdlIHRoZSBpMThuIEFQSSB3aWxsIHRocm93IGEgaGFyZCBlcnJvciB0aGF0IGNhbiBjcmFzaCB0aGUgZW50aXJlIGFwcFxuICAgICAgICAvLyBpZiB3ZSBhdHRlbXB0IHRvIGZvcm1hdCBhIGRhdGUgd2hvc2UgeWVhciBpcyBsZXNzIHRoYW4gMSBvciBncmVhdGVyIHRoYW4gOTk5OS5cbiAgICAgICAgaWYgKHRoaXMuX2ZpeFllYXJzUmFuZ2VJc3N1ZSAmJiAoZGF0ZS55ZWFyIDwgMSB8fCBkYXRlLnllYXIgPiA5OTk5KSkge1xuICAgICAgICAgICAgZGF0ZSA9IHRoaXMuY2xvbmUoZGF0ZSk7XG4gICAgICAgICAgICBkYXRlLnllYXIgPSBNYXRoLm1heCgxLCBNYXRoLm1pbig5OTk5LCBkYXRlLnllYXIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRpc3BsYXlGb3JtYXQgPSB7IC4uLmRpc3BsYXlGb3JtYXQsIHRpbWVab25lOiAndXRjJyB9O1xuXG4gICAgICAgIGNvbnN0IGRhdGVUaW1lRm9ybWF0dGVyID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodGhpcy5sb2NhbGUsIGRpc3BsYXlGb3JtYXQpO1xuICAgICAgICBjb25zdCBkYXRlSW5zdGFuY2UgPSB0aGlzLl9jcmVhdGVEYXRlSW5zdGFuY2VCeUZkRGF0ZShkYXRlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0cmlwRGlyZWN0aW9uYWxpdHlDaGFyYWN0ZXJzKHRoaXMuX2Zvcm1hdChkYXRlVGltZUZvcm1hdHRlciwgZGF0ZUluc3RhbmNlKSk7XG4gICAgfVxuXG4gICAgLyoqIEFkZCB5ZWFycyB0byBhIGRhdGUgKi9cbiAgICBhZGRDYWxlbmRhclllYXJzKGRhdGU6IEZkRGF0ZSwgeWVhcnM6IG51bWJlcik6IEZkRGF0ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZENhbGVuZGFyTW9udGhzKGRhdGUsIHllYXJzICogMTIpO1xuICAgIH1cblxuICAgIC8qKiBBZGQgbW9udGhzIHRvIGEgZGF0ZSAqL1xuICAgIGFkZENhbGVuZGFyTW9udGhzKGZkRGF0ZTogRmREYXRlLCBtb250aHM6IG51bWJlcik6IEZkRGF0ZSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLl9jcmVhdGVEYXRlSW5zdGFuY2VCeUZkRGF0ZShmZERhdGUpO1xuXG4gICAgICAgIGRhdGUuc2V0TW9udGgoZGF0ZS5nZXRNb250aCgpICsgbW9udGhzKTtcblxuICAgICAgICAvLyBJdCdzIHBvc3NpYmxlIHRvIHdpbmQgdXAgaW4gdGhlIHdyb25nIG1vbnRoIGlmIHRoZSBvcmlnaW5hbCBtb250aCBoYXMgbW9yZSBkYXlzIHRoYW4gdGhlIG5ld1xuICAgICAgICAvLyBtb250aC4gSW4gdGhpcyBjYXNlIHdlIHdhbnQgdG8gZ28gdG8gdGhlIGxhc3QgZGF5IG9mIHRoZSBkZXNpcmVkIG1vbnRoLlxuICAgICAgICBpZiAoZGF0ZS5nZXREYXRlKCkgIT09IGZkRGF0ZS5kYXkpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0RGF0ZSgwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9jcmVhdGVGZERhdGVGcm9tRGF0ZUluc3RhbmNlKGRhdGUpO1xuICAgIH1cblxuICAgIC8qKiBBZGQgZGF5cyB0byBhIGRhdGUgKi9cbiAgICBhZGRDYWxlbmRhckRheXMoZmREYXRlOiBGZERhdGUsIGRheXM6IG51bWJlcik6IEZkRGF0ZSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLl9jcmVhdGVEYXRlSW5zdGFuY2VCeUZkRGF0ZShmZERhdGUpO1xuICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyBkYXlzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUZkRGF0ZUZyb21EYXRlSW5zdGFuY2UoZGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqIENsb25lIGEgZGF0ZSBvYmplY3QgKi9cbiAgICBjbG9uZShkYXRlOiBGZERhdGUpOiBGZERhdGUge1xuICAgICAgICByZXR1cm4gbmV3IEZkRGF0ZShkYXRlLnllYXIsIGRhdGUubW9udGgsIGRhdGUuZGF5LCBkYXRlLmhvdXIsIGRhdGUubWludXRlLCBkYXRlLnNlY29uZCk7XG4gICAgfVxuXG4gICAgLyoqIENoZWNrIGlmIGRhdGUgb2JqZWN0IGlzIHZhbGlkICovXG4gICAgaXNWYWxpZChkYXRlOiBGZERhdGUpOiBkYXRlIGlzIEZkRGF0ZSB7XG4gICAgICAgIGlmICghKGRhdGUgaW5zdGFuY2VvZiBGZERhdGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGUuaXNEYXRlVmFsaWQoKTtcbiAgICB9XG5cbiAgICAvKiogQ2hlY2sgaWYgZGF0ZSBiZXR3ZWVuIGdpdmVuIGRhdGVzICovXG4gICAgaXNCZXR3ZWVuKGRhdGVUb0NoZWNrOiBGZERhdGUsIHN0YXJ0RGF0ZTogRmREYXRlLCBlbmREYXRlOiBGZERhdGUpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IHRoaXMuX2NyZWF0ZURhdGVJbnN0YW5jZUJ5RmREYXRlKGRhdGVUb0NoZWNrKTtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLl9jcmVhdGVEYXRlSW5zdGFuY2VCeUZkRGF0ZShzdGFydERhdGUpO1xuICAgICAgICBjb25zdCBlbmQgPSB0aGlzLl9jcmVhdGVEYXRlSW5zdGFuY2VCeUZkRGF0ZShlbmREYXRlKTtcbiAgICAgICAgcmV0dXJuIGRhdGUuZ2V0VGltZSgpID4gc3RhcnQuZ2V0VGltZSgpICYmIGRhdGUuZ2V0VGltZSgpIDwgZW5kLmdldFRpbWUoKTtcbiAgICB9XG5cbiAgICAvKiogQ2hlY2sgaWYgZGF0ZXMgYXJlIGVxdWFsICovXG4gICAgZGF0ZXNFcXVhbChkYXRlMTogRmREYXRlLCBkYXRlMjogRmREYXRlKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghZGF0ZTEgfHwgIWRhdGUyKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gc2tpcCB0aW1lIHZhbHVlXG4gICAgICAgIGNvbnN0IGRhdGUxU3RyID0gdGhpcy50b0lzbzg2MDEoZGF0ZTEpLnNwbGl0KCdUJylbMF07XG4gICAgICAgIGNvbnN0IGRhdGUyU3RyID0gdGhpcy50b0lzbzg2MDEoZGF0ZTIpLnNwbGl0KCdUJylbMF07XG4gICAgICAgIHJldHVybiBkYXRlMVN0ciA9PT0gZGF0ZTJTdHI7XG4gICAgfVxuXG4gICAgLyoqIENoZWNrIGlmIGRhdGVzIGFuZCB0aW1lIGFyZSBlcXVhbCAqL1xuICAgIGRhdGVUaW1lc0VxdWFsKGRhdGUxOiBGZERhdGUsIGRhdGUyOiBGZERhdGUpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCFkYXRlMSB8fCAhZGF0ZTIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy50b0lzbzg2MDEoZGF0ZTEpID09PSB0aGlzLnRvSXNvODYwMShkYXRlMik7XG4gICAgfVxuXG4gICAgLyoqIEZvcm1hdCBkYXRlIG9iamVjdCB0byBJU084NjAxIHN0cmluZyAqL1xuICAgIHRvSXNvODYwMShmZERhdGU6IEZkRGF0ZSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0b0lzbzg2MDEoZmREYXRlKTtcbiAgICB9XG5cbiAgICAvKiogQ2hlY2sgaWYgYSB0aW1lIGZvcm1hdCBpbmNsdWRlcyBhIGRheSBwZXJpb2QgKi9cbiAgICBpc1RpbWVGb3JtYXRJbmNsdWRlc0RheVBlcmlvZChkaXNwbGF5Rm9ybWF0OiBJbnRsLkRhdGVUaW1lRm9ybWF0T3B0aW9ucyk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodHlwZW9mIGRpc3BsYXlGb3JtYXQ/LmhvdXIxMiA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICByZXR1cm4gZGlzcGxheUZvcm1hdC5ob3VyMTI7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZm9ybWF0dGVkRGF0ZU5vUGVyaW9kT3B0aW9uID0gdGhpcy5mb3JtYXQodGhpcy5jcmVhdGVEYXRlKDIwMjApLCBkaXNwbGF5Rm9ybWF0KTtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkRGF0ZVdpdGhQZXJpb2RPcHRpb24gPSB0aGlzLmZvcm1hdCh0aGlzLmNyZWF0ZURhdGUoMjAyMCksIHsgLi4uZGlzcGxheUZvcm1hdCwgaG91cjEyOiB0cnVlIH0pO1xuICAgICAgICByZXR1cm4gZm9ybWF0dGVkRGF0ZVdpdGhQZXJpb2RPcHRpb24gPT09IGZvcm1hdHRlZERhdGVOb1BlcmlvZE9wdGlvbjtcbiAgICB9XG5cbiAgICAvKiogQ2hlY2sgaWYgYSB0aW1lIGZvcm1hdCBpbmNsdWRlcyBob3VycyAqL1xuICAgIGlzVGltZUZvcm1hdEluY2x1ZGVzSG91cnMoZGlzcGxheUZvcm1hdDogSW50bC5EYXRlVGltZUZvcm1hdE9wdGlvbnMpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBkaXNwbGF5Rm9ybWF0Py5ob3VyID09PSAnc3RyaW5nJztcbiAgICB9XG5cbiAgICAvKiogQ2hlY2sgaWYgYSB0aW1lIGZvcm1hdCBpbmNsdWRlcyBtaW51dGVzICovXG4gICAgaXNUaW1lRm9ybWF0SW5jbHVkZXNNaW51dGVzKGRpc3BsYXlGb3JtYXQ6IEludGwuRGF0ZVRpbWVGb3JtYXRPcHRpb25zKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgZGlzcGxheUZvcm1hdD8ubWludXRlID09PSAnc3RyaW5nJztcbiAgICB9XG5cbiAgICAvKiogQ2hlY2sgaWYgYSB0aW1lIGZvcm1hdCBpbmNsdWRlcyBzZWNvbmRzICovXG4gICAgaXNUaW1lRm9ybWF0SW5jbHVkZXNTZWNvbmRzKGRpc3BsYXlGb3JtYXQ6IEludGwuRGF0ZVRpbWVGb3JtYXRPcHRpb25zKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgZGlzcGxheUZvcm1hdD8uc2Vjb25kID09PSAnc3RyaW5nJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogU3RyaXAgb3V0IHVuaWNvZGUgTFRSIGFuZCBSVEwgY2hhcmFjdGVycy4gRWRnZSBhbmQgSUUgaW5zZXJ0IHRoZXNlIGludG8gZm9ybWF0dGVkIGRhdGVzIHdoaWxlXG4gICAgICogb3RoZXIgYnJvd3NlcnMgZG8gbm90LiBXZSByZW1vdmUgdGhlbSB0byBtYWtlIG91dHB1dCBjb25zaXN0ZW50IGFuZCBiZWNhdXNlIHRoZXkgaW50ZXJmZXJlIHdpdGhcbiAgICAgKiBkYXRlIHBhcnNpbmcuXG4gICAgICogQHBhcmFtIHN0ciBUaGUgc3RyaW5nIHRvIHN0cmlwIGRpcmVjdGlvbiBjaGFyYWN0ZXJzIGZyb20uXG4gICAgICogQHJldHVybnMgVGhlIHN0cmlwcGVkIHN0cmluZy5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9zdHJpcERpcmVjdGlvbmFsaXR5Q2hhcmFjdGVycyhzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBzdHIucmVwbGFjZSgvW1xcdTIwMGVcXHUyMDBmXS9nLCAnJykucmVwbGFjZSgvXFx1MjAyZi9nLCAnICcpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZm9ybWF0KGZvcm1hdHRlcjogSW50bC5EYXRlVGltZUZvcm1hdCwgZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgICAgIGlmIChOdW1iZXIuaXNOYU4oZGF0ZS52YWx1ZU9mKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRF9EQVRFX0VSUk9SO1xuICAgICAgICB9XG4gICAgICAgIGRhdGUgPSB0aGlzLl9jcmVhdGVVVENEYXRlSW5zdGFuY2UoXG4gICAgICAgICAgICBkYXRlLmdldEZ1bGxZZWFyKCksXG4gICAgICAgICAgICBkYXRlLmdldE1vbnRoKCksXG4gICAgICAgICAgICBkYXRlLmdldERhdGUoKSxcbiAgICAgICAgICAgIGRhdGUuZ2V0SG91cnMoKSxcbiAgICAgICAgICAgIGRhdGUuZ2V0TWludXRlcygpLFxuICAgICAgICAgICAgZGF0ZS5nZXRTZWNvbmRzKCksXG4gICAgICAgICAgICBkYXRlLmdldE1pbGxpc2Vjb25kcygpXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBmb3JtYXR0ZXIuZm9ybWF0KGRhdGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBDcmVhdGUgbmF0aXZlIERhdGUgaW5zdGFuY2UgZnJvbSBGZERhdGVcbiAgICAgKiBAcGFyYW0gZGF0ZSBGZERhdGUgaW5zdGFuY2VcbiAgICAgKiBAcmV0dXJucyBkYXRlIE5hdGl2ZSBkYXRlIGluc3RhbmNlXG4gICAgICovXG4gICAgcHJpdmF0ZSBfY3JlYXRlRGF0ZUluc3RhbmNlQnlGZERhdGUoZmREYXRlOiBGZERhdGUpOiBEYXRlIHtcbiAgICAgICAgY29uc3QgeyB5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCB9ID0gZmREYXRlO1xuICAgICAgICAvLyBXZSBoYXZlIHN0cmljdGVyIHZhbGlkYXRpb24gcnVsZXMgdGhhbiBEYXRlIG9iamVjdC5cbiAgICAgICAgLy8gRm9yIGV4YW1wbGUsIERhdGUgYWxsb3dzIHZhbHVlcyBmb3IgbW9udGg9MTAwIG9yIGZvciBkYXk9MTAwLlxuICAgICAgICAvLyBUaGVyZWZvcmUsIHdlIG5lZWQgdG8gZG8gdGhpcyB0cmljayBmb3IgdGhlIGNvbnNpc3RlbmN5IG9mIHRoZSB2YWxpZGF0aW9uIHN0YXR1c1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZChmZERhdGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoTmFOKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgZGF0ZS5zZXRGdWxsWWVhcih5ZWFyLCBtb250aCAtIDEsIGRheSk7XG4gICAgICAgIGRhdGUuc2V0SG91cnMoaG91ciwgbWludXRlLCBzZWNvbmQsIDApO1xuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQ3JlYXRlIG5hdGl2ZSBEYXRlIGluc3RhbmNlIGluIFVUQ1xuICAgICAqIEBwYXJhbSB5ZWFyIFRoZSB5ZWFyXG4gICAgICogQHBhcmFtIG1vbnRoIFRoZSBtb250aCBhcyBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDExXG4gICAgICogQHBhcmFtIGRheSBUaGUgZGF0ZSBhcyBhIG51bWJlciBiZXR3ZWVuIDEgYW5kIDMxLlxuICAgICAqIEBwYXJhbSBob3VycyBUaGUgaG91cnMgYXMgYSBudW1iZXIgYmV0d2VlbiAwIC0gMjRcbiAgICAgKiBAcGFyYW0gbWludXRlcyBUaGUgbWludXRlcyBhcyBhIG51bWJlciBiZXR3ZWVuIDAgLSA1OVxuICAgICAqIEBwYXJhbSBzZWNvbmRzIFRoZSBzZWNvbmRzIGFzIGEgbnVtYmVyIGJldHdlZW4gMCAtIDU5XG4gICAgICogQHBhcmFtIG1pbGxpc2Vjb25kcyBUaGUgbWlsbGlzZWNvbmRzIGFzIGEgbnVtYmVyIGJldHdlZW4gMCAtIDU5XG4gICAgICovXG4gICAgcHJpdmF0ZSBfY3JlYXRlVVRDRGF0ZUluc3RhbmNlKFxuICAgICAgICB5ZWFyOiBudW1iZXIsXG4gICAgICAgIG1vbnRoOiBudW1iZXIsXG4gICAgICAgIGRheTogbnVtYmVyLFxuICAgICAgICBob3VycyA9IDAsXG4gICAgICAgIG1pbnV0ZXMgPSAwLFxuICAgICAgICBzZWNvbmRzID0gMCxcbiAgICAgICAgbWlsbGlzZWNvbmRzID0gMFxuICAgICk6IERhdGUge1xuICAgICAgICBjb25zdCB1dGNEYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgdXRjRGF0ZS5zZXRVVENGdWxsWWVhcih5ZWFyLCBtb250aCwgZGF5KTtcbiAgICAgICAgdXRjRGF0ZS5zZXRVVENIb3Vycyhob3VycywgbWludXRlcywgc2Vjb25kcywgbWlsbGlzZWNvbmRzKTtcbiAgICAgICAgcmV0dXJuIHV0Y0RhdGU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jcmVhdGVGZERhdGVGcm9tRGF0ZUluc3RhbmNlKGRhdGU6IERhdGUpOiBGZERhdGUge1xuICAgICAgICByZXR1cm4gbmV3IEZkRGF0ZShcbiAgICAgICAgICAgIGRhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgICAgIGRhdGUuZ2V0TW9udGgoKSArIDEsXG4gICAgICAgICAgICBkYXRlLmdldERhdGUoKSxcbiAgICAgICAgICAgIGRhdGUuZ2V0SG91cnMoKSxcbiAgICAgICAgICAgIGRhdGUuZ2V0TWludXRlcygpLFxuICAgICAgICAgICAgZGF0ZS5nZXRTZWNvbmRzKClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICpcbiAgICAgKiBTaW5jZSBGZERhdGV0aW1lQWRhcHRlciBjYW4gcGFyc2Ugb25seSBcImVuLVVTXCIgbG9jYWxlXG4gICAgICogdGhlcmUgaXMgbm8gcmVhc29uIHRvIGNyZWF0ZSBjb21wcmVoZW5zaXZlIHRpbWUgcGFyc2VcbiAgICAgKiB0aGF0IGNhbiB1bmRlcnN0YW5kIHBsZW50eSBvZiBsb2NhbGVzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRpbWVTdHIgVGltZSBzdHJpbmcgdG8gcGFyc2UgKEUuZy4gJzEwOjMwIFBNJylcbiAgICAgKiBAcmV0dXJucyBkYXRlIE5hdGl2ZSBkYXRlIGluc3RhbmNlXG4gICAgICpcbiAgICAgKi9cbiAgICBwcml2YXRlIF9wYXJzZVRpbWVTdHJpbmcodGltZVN0cjogc3RyaW5nKTogRGF0ZSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEYXRlLnBhcnNlKCcxMDozMCBBTScpIGRvZXNuJ3Qgd29yayBzbyB3ZSBuZWVkIGRvIGEgdHJpY2tcbiAgICAgICAgICogYW5kIHByZXBlbmQgaXQgYnkgYSBkYXRlIHN0cmluZy5cbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0IGRhdGVTdHIgPSB0aGlzLmZvcm1hdCh0aGlzLm5vdygpLCB7IHllYXI6ICdudW1lcmljJywgbW9udGg6ICdudW1lcmljJywgZGF5OiAnbnVtZXJpYycgfSk7XG4gICAgICAgIGNvbnN0IGRhdGVUaW1lU3RyaW5nID0gYCR7ZGF0ZVN0cn0gJHt0aW1lU3RyfWA7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShEYXRlLnBhcnNlKGRhdGVUaW1lU3RyaW5nKSk7XG4gICAgfVxufVxuIl19
423
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmQtZGF0ZXRpbWUtYWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9kYXRldGltZS9mZC1kYXRldGltZS1hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXhFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBR3ZGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ25DLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQUVuRCxNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQztBQUNuQyxNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQztBQU1uQzs7Ozs7O0dBTUc7QUFFSCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsZUFBdUI7SUFJMUQsY0FBYztJQUNkLFlBQTJDLFFBQWdCLEVBQUUsUUFBa0I7UUFDM0UsS0FBSyxFQUFFLENBQUM7UUFDUixLQUFLLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxRQUFRLENBQUMsT0FBTyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUM7SUFDakUsQ0FBQztJQUtELGVBQWU7SUFDZixPQUFPLENBQUMsSUFBWTtRQUNoQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDckIsQ0FBQztJQUVELGdCQUFnQjtJQUNoQixRQUFRLENBQUMsSUFBWTtRQUNqQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDdEIs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QUFDO0lBRUQsY0FBYztJQUNOLDZCQUE2QixDQUFDLElBQVU7UUFDNUMsT0FBTyxJQUFJLE1BQU0sQ0FDYixJQUFJLENBQUMsV0FBVyxFQUFFLEVBQ2xCLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLEVBQ25CLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFDZCxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQ2YsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUNqQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQ3BCLENBQUM7SUFDTixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNLLGdCQUFnQixDQUFDLE9BQWU7UUFDcEM7OztXQUdHO1FBQ0gsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDL0YsTUFBTSxjQUFjLEdBQUcsR0FBRyxPQUFPLElBQUksT0FBTyxFQUFFLENBQUM7UUFDL0MsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7SUFDaEQsQ0FBQzs4R0FqZlEsaUJBQWlCLGtCQUtNLFNBQVM7a0hBTGhDLGlCQUFpQjs7MkZBQWpCLGlCQUFpQjtrQkFEN0IsVUFBVTs7MEJBTU0sUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGxhdGZvcm0gfSBmcm9tICdAYW5ndWxhci9jZGsvcGxhdGZvcm0nO1xuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBMT0NBTEVfSUQsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IElOVkFMSURfREFURV9FUlJPUiwgTEVUVEVSU19VTklDT0RFX1JBTkdFIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuXG5pbXBvcnQgeyBGZExhbmd1YWdlS2V5SWRlbnRpZmllciB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvaTE4bic7XG5pbXBvcnQgeyBEYXRldGltZUFkYXB0ZXIgfSBmcm9tICcuL2RhdGV0aW1lLWFkYXB0ZXInO1xuaW1wb3J0IHsgRmREYXRlIH0gZnJvbSAnLi9mZC1kYXRlJztcbmltcG9ydCB7IHJhbmdlLCB0b0lzbzg2MDEgfSBmcm9tICcuL2ZkLWRhdGUudXRpbHMnO1xuXG5jb25zdCBBTV9EQVlfUEVSSU9EX0RFRkFVTFQgPSAnQU0nO1xuY29uc3QgUE1fREFZX1BFUklPRF9ERUZBVUxUID0gJ1BNJztcblxudHlwZSBDdXN0b21EYXRlVGltZUZvcm1hdE9wdGlvbnMgPSBPbWl0PEludGwuRGF0ZVRpbWVGb3JtYXRPcHRpb25zLCAnZGF5UGVyaW9kJz4gJiB7XG4gICAgZGF5UGVyaW9kPzogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogRGF0ZXRpbWVBZGFwdGVyIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIEZkRGF0ZS5cbiAqXG4gKiBUaGlzIHVzZXMgRmREYXRlIGFzIGEgZGF0ZSBtb2RlbCBhbmQgcmVsaWVzIG9uIEludGwuRGF0ZVRpbWVGb3JtYXRcbiAqIGZvciBmb3JtYXR0aW5nIGFuZCB0cmFuc2xhdGlvbiBwdXJwb3Nlcy5cbiAqXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBGZERhdGV0aW1lQWRhcHRlciBleHRlbmRzIERhdGV0aW1lQWRhcHRlcjxGZERhdGU+IHtcbiAgICAvKiogV2hldGhlciB0byBjbGFtcCB0aGUgZGF0ZSBiZXR3ZWVuIDEgYW5kIDk5OTkgdG8gYXZvaWQgSUUgYW5kIEVkZ2UgZXJyb3JzLiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2ZpeFllYXJzUmFuZ2VJc3N1ZTogYm9vbGVhbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEluamVjdChMT0NBTEVfSUQpIGxvY2FsZUlkOiBzdHJpbmcsIHBsYXRmb3JtOiBQbGF0Zm9ybSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICBzdXBlci5zZXRMb2NhbGUobG9jYWxlSWQpO1xuICAgICAgICB0aGlzLl9maXhZZWFyc1JhbmdlSXNzdWUgPSBwbGF0Zm9ybS5UUklERU5UIHx8IHBsYXRmb3JtLkVER0U7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBmcm9tTm93PyhkYXRlOiBGZERhdGUpOiBzdHJpbmc7XG5cbiAgICAvKiogR2V0IHllYXIgKi9cbiAgICBnZXRZZWFyKGRhdGU6IEZkRGF0ZSk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBkYXRlLnllYXI7XG4gICAgfVxuXG4gICAgLyoqIEdldCBtb250aCAqL1xuICAgIGdldE1vbnRoKGRhdGU6IEZkRGF0ZSk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBkYXRlLm1vbnRoO1xuICAgIH1cblxuICAgIC8qKiBHZXQgZGF0ZSAqL1xuICAgIGdldERhdGUoZGF0ZTogRmREYXRlKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIGRhdGUuZGF5O1xuICAgIH1cblxuICAgIC8qKiBHZXQgZGF5IG9mIHdlZWsgKi9cbiAgICBnZXREYXlPZldlZWsoZGF0ZTogRmREYXRlKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NyZWF0ZURhdGVJbnN0YW5jZUJ5RmREYXRlKGRhdGUpLmdldERheSgpICsgMTtcbiAgICB9XG5cbiAgICAvKiogR2V0IGhvdXJzICovXG4gICAgZ2V0SG91cnMoZGF0ZTogRmREYXRlKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIGRhdGUuaG91cjtcbiAgICB9XG5cbiAgICAvKiogR2V0IG1pbnV0ZXMgKi9cbiAgICBnZXRNaW51dGVzKGRhdGU6IEZkRGF0ZSk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBkYXRlLm1pbnV0ZTtcbiAgICB9XG5cbiAgICAvKiogR2V0IHNlY29uZHMgKi9cbiAgICBnZXRTZWNvbmRzKGRhdGU6IEZkRGF0ZSk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBkYXRlLnNlY29uZDtcbiAgICB9XG5cbiAgICAvKiogR2V0IHdlZWsgbnVtYmVyICovXG4gICAgZ2V0V2Vla051bWJlcihmZERhdGU6IEZkRGF0ZSk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLl9jcmVhdGVEYXRlSW5zdGFuY2VCeUZkRGF0ZShmZERhdGUpO1xuXG4gICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIDMgLSAoKGRhdGUuZ2V0RGF5KCkgKyA2KSAlIDcpKTtcblxuICAgICAgICAvLyBKYW51YXJ5IDQgaXMgYWx3YXlzIGluIHdlZWsgMS5cbiAgICAgICAgY29uc3QgZmlyc3RXZWVrID0gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCAwLCA0KTtcblxuICAgICAgICAvLyBBZGp1c3QgdG8gVGh1cnNkYXkgaW4gd2VlayAxIGFuZCBjb3VudCBudW1iZXIgb2Ygd2Vla3MgZnJvbSBkYXRlIHRvIHdlZWsxLlxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgMSArIE1hdGgucm91bmQoKChkYXRlLmdldFRpbWUoKSAtIGZpcnN0V2Vlay5nZXRUaW1lKCkpIC8gODY0MDAwMDAgLSAzICsgKChmaXJzdFdlZWsuZ2V0RGF5KCkgKyA2KSAlIDcpKSAvIDcpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEdldCBtb250aCBuYW1lcyAqL1xuICAgIGdldE1vbnRoTmFtZXMoc3R5bGU6ICdsb25nJyB8ICdzaG9ydCcgfCAnbmFycm93Jyk6IHN0cmluZ1tdIHtcbiAgICAgICAgY29uc3QgZGF0ZVRpbWVGb3JtYXQgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh0aGlzLmxvY2FsZSwgeyBtb250aDogc3R5bGUsIHRpbWVab25lOiAndXRjJyB9KTtcbiAgICAgICAgcmV0dXJuIHJhbmdlKDEyLCAoaSkgPT5cbiAgICAgICAgICAgIHRoaXMuX3N0cmlwRGlyZWN0aW9uYWxpdHlDaGFyYWN0ZXJzKHRoaXMuX2Zvcm1hdChkYXRlVGltZUZvcm1hdCwgbmV3IERhdGUoMjAxNywgaSwgMSkpKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBHZXQgZGF0ZSBuYW1lcyAqL1xuICAgIGdldERhdGVOYW1lcygpOiBzdHJpbmdbXSB7XG4gICAgICAgIGNvbnN0IGRhdGVUaW1lRm9ybWF0ID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodGhpcy5sb2NhbGUsIHsgZGF5OiAnbnVtZXJpYycsIHRpbWVab25lOiAndXRjJyB9KTtcbiAgICAgICAgcmV0dXJuIHJhbmdlKDMxLCAoaSkgPT5cbiAgICAgICAgICAgIHRoaXMuX3N0cmlwRGlyZWN0aW9uYWxpdHlDaGFyYWN0ZXJzKHRoaXMuX2Zvcm1hdChkYXRlVGltZUZvcm1hdCwgbmV3IERhdGUoMjAxNywgMCwgaSArIDEpKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogR2V0IGRheSBvZiB3ZWVrIG5hbWVzICovXG4gICAgZ2V0RGF5T2ZXZWVrTmFtZXMoc3R5bGU6ICdsb25nJyB8ICdzaG9ydCcgfCAnbmFycm93Jyk6IHN0cmluZ1tdIHtcbiAgICAgICAgY29uc3QgZGF0ZVRpbWVGb3JtYXQgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh0aGlzLmxvY2FsZSwgeyB3ZWVrZGF5OiBzdHlsZSwgdGltZVpvbmU6ICd1dGMnIH0pO1xuICAgICAgICByZXR1cm4gcmFuZ2UoNywgKGkpID0+XG4gICAgICAgICAgICB0aGlzLl9zdHJpcERpcmVjdGlvbmFsaXR5Q2hhcmFjdGVycyh0aGlzLl9mb3JtYXQoZGF0ZVRpbWVGb3JtYXQsIG5ldyBEYXRlKDIwMTcsIDAsIGkgKyAxKSkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEdldCB5ZWFyIG5hbWUgKi9cbiAgICBnZXRZZWFyTmFtZShkYXRlOiBGZERhdGUpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBkYXRlVGltZUZvcm1hdCA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHRoaXMubG9jYWxlLCB7IHllYXI6ICdudW1lcmljJywgdGltZVpvbmU6ICd1dGMnIH0pO1xuICAgICAgICBjb25zdCBkYXRlSW5zdGFuY2UgPSB0aGlzLl9jcmVhdGVEYXRlSW5zdGFuY2VCeUZkRGF0ZShkYXRlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0cmlwRGlyZWN0aW9uYWxpdHlDaGFyYWN0ZXJzKHRoaXMuX2Zvcm1hdChkYXRlVGltZUZvcm1hdCwgZGF0ZUluc3RhbmNlKSk7XG4gICAgfVxuXG4gICAgLyoqIEdldCB3ZWVrIG5hbWUgKi9cbiAgICBnZXRXZWVrTmFtZShkYXRlOiBGZERhdGUpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCB3ZWVrTnVtYmVyID0gdGhpcy5nZXRXZWVrTnVtYmVyKGRhdGUpO1xuICAgICAgICByZXR1cm4gd2Vla051bWJlci50b0xvY2FsZVN0cmluZyh0aGlzLmxvY2FsZSk7XG4gICAgfVxuXG4gICAgLyoqIEdldCBob3VyIG5hbWVzICovXG4gICAgZ2V0SG91ck5hbWVzKHsgbWVyaWRpYW4sIHR3b0RpZ2l0IH06IHsgdHdvRGlnaXQ6IGJvb2xlYW47IG1lcmlkaWFuOiBib29sZWFuIH0pOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiByYW5nZSgyNCwgKGhvdXIpID0+IHtcbiAgICAgICAgICAgIGlmIChtZXJpZGlhbikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSBob3VyID09PSAwIHx8IGhvdXIgPT09IDEyID8gMTIgOiBob3VyICUgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaG91ci50b0xvY2FsZVN0cmluZyh0aGlzLmxvY2FsZSwgeyBtaW5pbXVtSW50ZWdlckRpZ2l0czogdHdvRGlnaXQgPyAyIDogMSB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEdldCBtaW51dGUgbmFtZXMgKi9cbiAgICBnZXRNaW51dGVOYW1lcyh7IHR3b0RpZ2l0IH06IHsgdHdvRGlnaXQ6IGJvb2xlYW4gfSk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIHJhbmdlKDYwLCAobWludXRlKSA9PiBtaW51dGUudG9Mb2NhbGVTdHJpbmcodGhpcy5sb2NhbGUsIHsgbWluaW11bUludGVnZXJEaWdpdHM6IHR3b0RpZ2l0ID8gMiA6IDEgfSkpO1xuICAgIH1cblxuICAgIC8qKiBHZXQgc2Vjb25kIG5hbWVzICovXG4gICAgZ2V0U2Vjb25kTmFtZXMoeyB0d29EaWdpdCB9OiB7IHR3b0RpZ2l0OiBib29sZWFuIH0pOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiByYW5nZSg2MCwgKHNlY29uZCkgPT4gc2Vjb25kLnRvTG9jYWxlU3RyaW5nKHRoaXMubG9jYWxlLCB7IG1pbmltdW1JbnRlZ2VyRGlnaXRzOiB0d29EaWdpdCA/IDIgOiAxIH0pKTtcbiAgICB9XG5cbiAgICAvKiogR2V0IGRheSBwZXJpb2QgbmFtZXMgKi9cbiAgICBnZXREYXlQZXJpb2ROYW1lcygpOiBbc3RyaW5nLCBzdHJpbmddIHtcbiAgICAgICAgY29uc3QgREVGQVVMVF9QRVJJT0RTOiBbc3RyaW5nLCBzdHJpbmddID0gW0FNX0RBWV9QRVJJT0RfREVGQVVMVCwgUE1fREFZX1BFUklPRF9ERUZBVUxUXTtcblxuICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh0aGlzLmxvY2FsZSwge1xuICAgICAgICAgICAgaG91cjogJ251bWVyaWMnLFxuICAgICAgICAgICAgbWludXRlOiAnbnVtZXJpYycsXG4gICAgICAgICAgICBob3VyMTI6IHRydWVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGFtID0gZm9ybWF0dGVyLmZvcm1hdFRvUGFydHMobmV3IERhdGUoMjAyMCwgMCwgMSwgNikpLmZpbmQoKHsgdHlwZSB9KSA9PiB0eXBlID09PSAnZGF5UGVyaW9kJyk/LnZhbHVlO1xuICAgICAgICAgICAgY29uc3QgcG0gPSBmb3JtYXR0ZXIuZm9ybWF0VG9QYXJ0cyhuZXcgRGF0ZSgyMDIwLCAwLCAxLCAxNikpLmZpbmQoKHsgdHlwZSB9KSA9PiB0eXBlID09PSAnZGF5UGVyaW9kJylcbiAgICAgICAgICAgICAgICA/LnZhbHVlO1xuXG4gICAgICAgICAgICByZXR1cm4gYW0gJiYgcG0gPyBbYW0sIHBtXSA6IERFRkFVTFRfUEVSSU9EUztcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc3QgZGF5UGVyaW9kUmVnZXhwID0gbmV3IFJlZ0V4cChgKCR7TEVUVEVSU19VTklDT0RFX1JBTkdFfStcXFxcLiopK2AsICdnJyk7XG4gICAgICAgICAgICBjb25zdCBhbVJlZ0V4cE1hdGNoID0gZm9ybWF0dGVyLmZvcm1hdChuZXcgRGF0ZSgyMDIwLCAwLCAxLCA2KSkubWF0Y2goZGF5UGVyaW9kUmVnZXhwKTtcbiAgICAgICAgICAgIGNvbnN0IHBtUmVnRXhwTWF0Y2ggPSBmb3JtYXR0ZXIuZm9ybWF0KG5ldyBEYXRlKDIwMjAsIDAsIDEsIDE2KSkubWF0Y2goZGF5UGVyaW9kUmVnZXhwKTtcblxuICAgICAgICAgICAgcmV0dXJuIGFtUmVnRXhwTWF0Y2ggJiYgcG1SZWdFeHBNYXRjaFxuICAgICAgICAgICAgICAgID8gW2FtUmVnRXhwTWF0Y2hbMF0sIHBtUmVnRXhwTWF0Y2hbMF1dXG4gICAgICAgICAgICAgICAgOiBbQU1fREFZX1BFUklPRF9ERUZBVUxULCBQTV9EQVlfUEVSSU9EX0RFRkFVTFRdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFNldCBob3VycyAqL1xuICAgIHNldEhvdXJzKGRhdGU6IEZkRGF0ZSwgaG91cnM6IG51bWJlcik6IEZkRGF0ZSB7XG4gICAgICAgIGNvbnN0IGRhdGVJbnN0YW5jZSA9IHRoaXMuX2NyZWF0ZURhdGVJbnN0YW5jZUJ5RmREYXRlKGRhdGUpO1xuICAgICAgICBkYXRlSW5zdGFuY2Uuc2V0SG91cnMoaG91cnMpO1xuICAgICAgICByZXR1cm4gdGhpcy5fY3JlYXRlRmREYXRlRnJvbURhdGVJbnN0YW5jZShkYXRlSW5zdGFuY2UpO1xuICAgIH1cblxuICAgIC8qKiBTZXQgbWludXRlcyAqL1xuICAgIHNldE1pbnV0ZXMoZGF0ZTogRmREYXRlLCBob3VyczogbnVtYmVyKTogRmREYXRlIHtcbiAgICAgICAgY29uc3QgZGF0ZUluc3RhbmNlID0gdGhpcy5fY3JlYXRlRGF0ZUluc3RhbmNlQnlGZERhdGUoZGF0ZSk7XG4gICAgICAgIGRhdGVJbnN0YW5jZS5zZXRNaW51dGVzKGhvdXJzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUZkRGF0ZUZyb21EYXRlSW5zdGFuY2UoZGF0ZUluc3RhbmNlKTtcbiAgICB9XG5cbiAgICAvKiogU2V0IHNlY29uZHMgKi9cbiAgICBzZXRTZWNvbmRzKGRhdGU6IEZkRGF0ZSwgaG91cnM6IG51bWJlcik6IEZkRGF0ZSB7XG4gICAgICAgIGNvbnN0IGRhdGVJbnN0YW5jZSA9IHRoaXMuX2NyZWF0ZURhdGVJbnN0YW5jZUJ5RmREYXRlKGRhdGUpO1xuICAgICAgICBkYXRlSW5zdGFuY2Uuc2V0U2Vjb25kcyhob3Vycyk7XG4gICAgICAgIHJldHVybiB0aGlzLl9jcmVhdGVGZERhdGVGcm9tRGF0ZUluc3RhbmNlKGRhdGVJbnN0YW5jZSk7XG4gICAgfVxuXG4gICAgLyoqIEdldCBmaXJzdCBkYXkgb2Ygd2VlayAqL1xuICAgIGdldEZpcnN0RGF5T2ZXZWVrKCk6IG51bWJlciB7XG4gICAgICAgIC8vIGNhbid0IHJldHJpZXZlIHRoaXMgaW5mbyBmcm9tIEludGwgb2JqZWN0IG9yIERhdGUgb2JqZWN0LCBkZWZhdWx0IHRvIFN1bmRheS5cbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgLyoqIEdldCBudW1iZXIgb2YgZGF5cyBpbiBhIG1vbnRoICovXG4gICAgZ2V0TnVtRGF5c0luTW9udGgoZmREYXRlOiBGZERhdGUpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBkYXRlID0gdGhpcy5fY3JlYXRlRGF0ZUluc3RhbmNlQnlGZERhdGUoZmREYXRlKTtcbiAgICAgICAgZGF0ZS5zZXRNb250aChkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgZGF0ZS5zZXREYXRlKDApO1xuICAgICAgICByZXR1cm4gZGF0ZS5nZXREYXRlKCk7XG4gICAgfVxuXG4gICAgLyoqIENyZWF0ZSBhIGRhdGUgb2JqZWN0ICovXG4gICAgY3JlYXRlRGF0ZSh5ZWFyOiBudW1iZXIsIG1vbnRoID0gMSwgZGF0ZSA9IDEpOiBGZERhdGUge1xuICAgICAgICByZXR1cm4gbmV3IEZkRGF0ZSh5ZWFyLCBtb250aCwgZGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqIEdldCBhIHRvZGF5IGRhdGUgb2JqZWN0ICovXG4gICAgdG9kYXkoKTogRmREYXRlIHtcbiAgICAgICAgcmV0dXJuIEZkRGF0ZS5nZXRUb2RheSgpO1xuICAgIH1cblxuICAgIC8qKiBHZXQgYSBub3cgZGF0ZSBvYmplY3QgKi9cbiAgICBub3coKTogRmREYXRlIHtcbiAgICAgICAgcmV0dXJuIEZkRGF0ZS5nZXROb3coKTtcbiAgICB9XG5cbiAgICAvKiogUGFyc2UgYW55IHZhbHVlIHRvIGRhdGUgb2JqZWN0ICovXG4gICAgcGFyc2UodmFsdWU6IGFueSwgcGFyc2VGb3JtYXQ6IEludGwuRGF0ZVRpbWVGb3JtYXRPcHRpb25zID0ge30pOiBGZERhdGUgfCBudWxsIHtcbiAgICAgICAgaWYgKCF2YWx1ZSAmJiB2YWx1ZSAhPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBGZERhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb25lKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogV2UgaGF2ZSBubyB3YXkgdXNpbmcgdGhlIG5hdGl2ZSBKUyBEYXRlIHRvIHNldCB0aGUgcGFyc2UgZm9ybWF0IG9yIGxvY2FsZSxcbiAgICAgICAgICogc28gd2UgaWdub3JlIHRoZXNlIHBhcmFtZXRlcnMuXG4gICAgICAgICAqL1xuICAgICAgICBsZXQgZGF0ZSA9IG5ldyBEYXRlKERhdGUucGFyc2UodmFsdWUpKTtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDaGVjayBpZiB3ZSBhcmUgZGVhbGluZyB3aXRoIGEgdGltZSBzdHJpbmdcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgTnVtYmVyLmlzTmFOKGRhdGUudmFsdWVPZigpKSAmJlxuICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgIXBhcnNlRm9ybWF0LnllYXIgJiZcbiAgICAgICAgICAgICFwYXJzZUZvcm1hdC5kYXkgJiZcbiAgICAgICAgICAgICFwYXJzZUZvcm1hdC5tb250aCAmJlxuICAgICAgICAgICAgcGFyc2VGb3JtYXQuaG91clxuICAgICAgICApIHtcbiAgICAgICAgICAgIGRhdGUgPSB0aGlzLl9wYXJzZVRpbWVTdHJpbmcodmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUZkRGF0ZUZyb21EYXRlSW5zdGFuY2UoZGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqIEZvcm1hdCBkYXRlIG9iamVjdCB0byBzdHJpbmcgKi9cbiAgICBmb3JtYXQoZGF0ZTogRmREYXRlLCBkaXNwbGF5Rm9ybWF0OiBDdXN0b21EYXRlVGltZUZvcm1hdE9wdGlvbnMpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZChkYXRlKSkge1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSURfREFURV9FUlJPUjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9uIElFIGFuZCBFZGdlIHRoZSBpMThuIEFQSSB3aWxsIHRocm93IGEgaGFyZCBlcnJvciB0aGF0IGNhbiBjcmFzaCB0aGUgZW50aXJlIGFwcFxuICAgICAgICAvLyBpZiB3ZSBhdHRlbXB0IHRvIGZvcm1hdCBhIGRhdGUgd2hvc2UgeWVhciBpcyBsZXNzIHRoYW4gMSBvciBncmVhdGVyIHRoYW4gOTk5OS5cbiAgICAgICAgaWYgKHRoaXMuX2ZpeFllYXJzUmFuZ2VJc3N1ZSAmJiAoZGF0ZS55ZWFyIDwgMSB8fCBkYXRlLnllYXIgPiA5OTk5KSkge1xuICAgICAgICAgICAgZGF0ZSA9IHRoaXMuY2xvbmUoZGF0ZSk7XG4gICAgICAgICAgICBkYXRlLnllYXIgPSBNYXRoLm1heCgxLCBNYXRoLm1pbig5OTk5LCBkYXRlLnllYXIpKTtcbiAgICAgICAgfVxuICAgICAgICBkaXNwbGF5Rm9ybWF0ID0geyAuLi5kaXNwbGF5Rm9ybWF0LCB0aW1lWm9uZTogJ3V0YycgfTtcblxuICAgICAgICByZXR1cm4gZGlzcGxheUZvcm1hdC5kYXlQZXJpb2RcbiAgICAgICAgICAgID8gdGhpcy5fZm9ybWF0V2l0aERheVBlcmlvZChkYXRlLCBkaXNwbGF5Rm9ybWF0KVxuICAgICAgICAgICAgOiB0aGlzLl9mb3JtYXRXaXRoSW50bChkYXRlLCBkaXNwbGF5Rm9ybWF0KTtcbiAgICB9XG5cbiAgICAvKiogQWRkIHllYXJzIHRvIGEgZGF0ZSAqL1xuICAgIGFkZENhbGVuZGFyWWVhcnMoZGF0ZTogRmREYXRlLCB5ZWFyczogbnVtYmVyKTogRmREYXRlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkQ2FsZW5kYXJNb250aHMoZGF0ZSwgeWVhcnMgKiAxMik7XG4gICAgfVxuXG4gICAgLyoqIEFkZCBtb250aHMgdG8gYSBkYXRlICovXG4gICAgYWRkQ2FsZW5kYXJNb250aHMoZmREYXRlOiBGZERhdGUsIG1vbnRoczogbnVtYmVyKTogRmREYXRlIHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IHRoaXMuX2NyZWF0ZURhdGVJbnN0YW5jZUJ5RmREYXRlKGZkRGF0ZSk7XG5cbiAgICAgICAgZGF0ZS5zZXRNb250aChkYXRlLmdldE1vbnRoKCkgKyBtb250aHMpO1xuXG4gICAgICAgIC8vIEl0J3MgcG9zc2libGUgdG8gd2luZCB1cCBpbiB0aGUgd3JvbmcgbW9udGggaWYgdGhlIG9yaWdpbmFsIG1vbnRoIGhhcyBtb3JlIGRheXMgdGhhbiB0aGUgbmV3XG4gICAgICAgIC8vIG1vbnRoLiBJbiB0aGlzIGNhc2Ugd2Ugd2FudCB0byBnbyB0byB0aGUgbGFzdCBkYXkgb2YgdGhlIGRlc2lyZWQgbW9udGguXG4gICAgICAgIGlmIChkYXRlLmdldERhdGUoKSAhPT0gZmREYXRlLmRheSkge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKDApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUZkRGF0ZUZyb21EYXRlSW5zdGFuY2UoZGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqIEFkZCBkYXlzIHRvIGEgZGF0ZSAqL1xuICAgIGFkZENhbGVuZGFyRGF5cyhmZERhdGU6IEZkRGF0ZSwgZGF5czogbnVtYmVyKTogRmREYXRlIHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IHRoaXMuX2NyZWF0ZURhdGVJbnN0YW5jZUJ5RmREYXRlKGZkRGF0ZSk7XG4gICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIGRheXMpO1xuICAgICAgICByZXR1cm4gdGhpcy5fY3JlYXRlRmREYXRlRnJvbURhdGVJbnN0YW5jZShkYXRlKTtcbiAgICB9XG5cbiAgICAvKiogQ2xvbmUgYSBkYXRlIG9iamVjdCAqL1xuICAgIGNsb25lKGRhdGU6IEZkRGF0ZSk6IEZkRGF0ZSB7XG4gICAgICAgIHJldHVybiBuZXcgRmREYXRlKGRhdGUueWVhciwgZGF0ZS5tb250aCwgZGF0ZS5kYXksIGRhdGUuaG91ciwgZGF0ZS5taW51dGUsIGRhdGUuc2Vjb25kKTtcbiAgICB9XG5cbiAgICAvKiogQ2hlY2sgaWYgZGF0ZSBvYmplY3QgaXMgdmFsaWQgKi9cbiAgICBpc1ZhbGlkKGRhdGU6IEZkRGF0ZSk6IGRhdGUgaXMgRmREYXRlIHtcbiAgICAgICAgaWYgKCEoZGF0ZSBpbnN0YW5jZW9mIEZkRGF0ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0ZS5pc0RhdGVWYWxpZCgpO1xuICAgIH1cblxuICAgIC8qKiBDaGVjayBpZiBkYXRlIGJldHdlZW4gZ2l2ZW4gZGF0ZXMgKi9cbiAgICBpc0JldHdlZW4oZGF0ZVRvQ2hlY2s6IEZkRGF0ZSwgc3RhcnREYXRlOiBGZERhdGUsIGVuZERhdGU6IEZkRGF0ZSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBkYXRlID0gdGhpcy5fY3JlYXRlRGF0ZUluc3RhbmNlQnlGZERhdGUoZGF0ZVRvQ2hlY2spO1xuICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMuX2NyZWF0ZURhdGVJbnN0YW5jZUJ5RmREYXRlKHN0YXJ0RGF0ZSk7XG4gICAgICAgIGNvbnN0IGVuZCA9IHRoaXMuX2NyZWF0ZURhdGVJbnN0YW5jZUJ5RmREYXRlKGVuZERhdGUpO1xuICAgICAgICByZXR1cm4gZGF0ZS5nZXRUaW1lKCkgPiBzdGFydC5nZXRUaW1lKCkgJiYgZGF0ZS5nZXRUaW1lKCkgPCBlbmQuZ2V0VGltZSgpO1xuICAgIH1cblxuICAgIC8qKiBDaGVjayBpZiBkYXRlcyBhcmUgZXF1YWwgKi9cbiAgICBkYXRlc0VxdWFsKGRhdGUxOiBGZERhdGUsIGRhdGUyOiBGZERhdGUpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCFkYXRlMSB8fCAhZGF0ZTIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBza2lwIHRpbWUgdmFsdWVcbiAgICAgICAgY29uc3QgZGF0ZTFTdHIgPSB0aGlzLnRvSXNvODYwMShkYXRlMSkuc3BsaXQoJ1QnKVswXTtcbiAgICAgICAgY29uc3QgZGF0ZTJTdHIgPSB0aGlzLnRvSXNvODYwMShkYXRlMikuc3BsaXQoJ1QnKVswXTtcbiAgICAgICAgcmV0dXJuIGRhdGUxU3RyID09PSBkYXRlMlN0cjtcbiAgICB9XG5cbiAgICAvKiogQ2hlY2sgaWYgZGF0ZXMgYW5kIHRpbWUgYXJlIGVxdWFsICovXG4gICAgZGF0ZVRpbWVzRXF1YWwoZGF0ZTE6IEZkRGF0ZSwgZGF0ZTI6IEZkRGF0ZSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIWRhdGUxIHx8ICFkYXRlMikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnRvSXNvODYwMShkYXRlMSkgPT09IHRoaXMudG9Jc284NjAxKGRhdGUyKTtcbiAgICB9XG5cbiAgICAvKiogRm9ybWF0IGRhdGUgb2JqZWN0IHRvIElTTzg2MDEgc3RyaW5nICovXG4gICAgdG9Jc284NjAxKGZkRGF0ZTogRmREYXRlKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRvSXNvODYwMShmZERhdGUpO1xuICAgIH1cblxuICAgIC8qKiBDaGVjayBpZiBhIHRpbWUgZm9ybWF0IGluY2x1ZGVzIGEgZGF5IHBlcmlvZCAqL1xuICAgIGlzVGltZUZvcm1hdEluY2x1ZGVzRGF5UGVyaW9kKGRpc3BsYXlGb3JtYXQ6IEN1c3RvbURhdGVUaW1lRm9ybWF0T3B0aW9ucyk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodHlwZW9mIGRpc3BsYXlGb3JtYXQ/LmhvdXIxMiA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICByZXR1cm4gZGlzcGxheUZvcm1hdC5ob3VyMTI7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZm9ybWF0dGVkRGF0ZU5vUGVyaW9kT3B0aW9uID0gdGhpcy5mb3JtYXQodGhpcy5jcmVhdGVEYXRlKDIwMjApLCBkaXNwbGF5Rm9ybWF0KTtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkRGF0ZVdpdGhQZXJpb2RPcHRpb24gPSB0aGlzLmZvcm1hdCh0aGlzLmNyZWF0ZURhdGUoMjAyMCksIHsgLi4uZGlzcGxheUZvcm1hdCwgaG91cjEyOiB0cnVlIH0pO1xuICAgICAgICByZXR1cm4gZm9ybWF0dGVkRGF0ZVdpdGhQZXJpb2RPcHRpb24gPT09IGZvcm1hdHRlZERhdGVOb1BlcmlvZE9wdGlvbjtcbiAgICB9XG5cbiAgICAvKiogQ2hlY2sgaWYgYSB0aW1lIGZvcm1hdCBpbmNsdWRlcyBob3VycyAqL1xuICAgIGlzVGltZUZvcm1hdEluY2x1ZGVzSG91cnMoZGlzcGxheUZvcm1hdDogSW50bC5EYXRlVGltZUZvcm1hdE9wdGlvbnMpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBkaXNwbGF5Rm9ybWF0Py5ob3VyID09PSAnc3RyaW5nJztcbiAgICB9XG5cbiAgICAvKiogQ2hlY2sgaWYgYSB0aW1lIGZvcm1hdCBpbmNsdWRlcyBtaW51dGVzICovXG4gICAgaXNUaW1lRm9ybWF0SW5jbHVkZXNNaW51dGVzKGRpc3BsYXlGb3JtYXQ6IEludGwuRGF0ZVRpbWVGb3JtYXRPcHRpb25zKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgZGlzcGxheUZvcm1hdD8ubWludXRlID09PSAnc3RyaW5nJztcbiAgICB9XG5cbiAgICAvKiogQ2hlY2sgaWYgYSB0aW1lIGZvcm1hdCBpbmNsdWRlcyBzZWNvbmRzICovXG4gICAgaXNUaW1lRm9ybWF0SW5jbHVkZXNTZWNvbmRzKGRpc3BsYXlGb3JtYXQ6IEludGwuRGF0ZVRpbWVGb3JtYXRPcHRpb25zKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgZGlzcGxheUZvcm1hdD8uc2Vjb25kID09PSAnc3RyaW5nJztcbiAgICB9XG5cbiAgICAvKiogRm9ybWF0IHdpdGggY3VzdG9tIHBhdHRlcm4gaW5jbHVkaW5nIGRheSBwZXJpb2QgbmFtZXMgKi9cbiAgICBwcml2YXRlIF9mb3JtYXRXaXRoRGF5UGVyaW9kKGRhdGU6IEZkRGF0ZSwgZGlzcGxheUZvcm1hdDogQ3VzdG9tRGF0ZVRpbWVGb3JtYXRPcHRpb25zKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkVGltZSA9IHRoaXMuX2Zvcm1hdFdpdGhJbnRsKGRhdGUsIHsgLi4uZGlzcGxheUZvcm1hdCwgZGF5UGVyaW9kOiB1bmRlZmluZWQgfSk7XG4gICAgICAgIGNvbnN0IGRheVBlcmlvZE5hbWUgPSB0aGlzLl9nZXREYXlQZXJpb2ROYW1lKGRhdGUpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9pbnNlcnREYXlQZXJpb2QoZm9ybWF0dGVkVGltZSwgZGF5UGVyaW9kTmFtZSwgZGlzcGxheUZvcm1hdCk7XG4gICAgfVxuXG4gICAgLyoqIEluc2VydCBkYXkgcGVyaW9kIGludG8gdGhlIGZvcm1hdHRlZCBzdHJpbmcgKi9cbiAgICBwcml2YXRlIF9pbnNlcnREYXlQZXJpb2QoXG4gICAgICAgIGZvcm1hdHRlZFRpbWU6IHN0cmluZyxcbiAgICAgICAgZGF5UGVyaW9kTmFtZTogRmRMYW5ndWFnZUtleUlkZW50aWZpZXIsXG4gICAgICAgIGRpc3BsYXlGb3JtYXQ6IEN1c3RvbURhdGVUaW1lRm9ybWF0T3B0aW9uc1xuICAgICk6IHN0cmluZyB7XG4gICAgICAgIGlmIChkaXNwbGF5Rm9ybWF0LnllYXIgfHwgZGlzcGxheUZvcm1hdC5tb250aCB8fCBkaXNwbGF5Rm9ybWF0LmRheSkge1xuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdHRlZFRpbWVcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvKFxcZHsxLDJ9OlxcZHsyfSkoIFtBUF1NKT8vLCBgJDEgJHtkYXlQZXJpb2ROYW1lfWApXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoLyxcXHMqKFxcZHsxLDJ9OlxcZHsyfSkvLCBgLCBhdCAkMSAke2RheVBlcmlvZE5hbWV9YCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0dGVkVGltZS5yZXBsYWNlKC8oXFxkezEsMn06XFxkezJ9KDpcXGR7Mn0pPykvLCBgJDEgJHtkYXlQZXJpb2ROYW1lfWApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEdldCBkYXkgcGVyaW9kIG5hbWUgYmFzZWQgb24gdGhlIGhvdXIgKi9cbiAgICBwcml2YXRlIF9nZXREYXlQZXJpb2ROYW1lKGRhdGU6IEZkRGF0ZSk6IEZkTGFuZ3VhZ2VLZXlJZGVudGlmaWVyIHtcbiAgICAgICAgY29uc3QgaG91ciA9IGRhdGUuaG91cjtcbiAgICAgICAgaWYgKGhvdXIgPCA2KSB7XG4gICAgICAgICAgICByZXR1cm4gJ2NvcmVUaW1lLm5pZ2h0TGFiZWwnO1xuICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgcmV0dXJuICdjb3JlVGltZS5tb3JuaW5nTGFiZWwnO1xuICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxOCkge1xuICAgICAgICAgICAgcmV0dXJuICdjb3JlVGltZS5hZnRlcm5vb25MYWJlbCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJ2NvcmVUaW1lLmV2ZW5pbmdMYWJlbCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogRm9ybWF0IGRhdGUgdXNpbmcgSW50bC5EYXRlVGltZUZvcm1hdCAqL1xuICAgIHByaXZhdGUgX2Zvcm1hdFdpdGhJbnRsKGRhdGU6IEZkRGF0ZSwgZGlzcGxheUZvcm1hdDogYW55KTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodGhpcy5sb2NhbGUsIGRpc3BsYXlGb3JtYXQpO1xuICAgICAgICBjb25zdCBkYXRlSW5zdGFuY2UgPSB0aGlzLl9jcmVhdGVEYXRlSW5zdGFuY2VCeUZkRGF0ZShkYXRlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0cmlwRGlyZWN0aW9uYWxpdHlDaGFyYWN0ZXJzKHRoaXMuX2Zvcm1hdChmb3JtYXR0ZXIsIGRhdGVJbnN0YW5jZSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBTdHJpcCBvdXQgdW5pY29kZSBMVFIgYW5kIFJUTCBjaGFyYWN0ZXJzLiBFZGdlIGFuZCBJRSBpbnNlcnQgdGhlc2UgaW50byBmb3JtYXR0ZWQgZGF0ZXMgd2hpbGVcbiAgICAgKiBvdGhlciBicm93c2VycyBkbyBub3QuIFdlIHJlbW92ZSB0aGVtIHRvIG1ha2Ugb3V0cHV0IGNvbnNpc3RlbnQgYW5kIGJlY2F1c2UgdGhleSBpbnRlcmZlcmUgd2l0aFxuICAgICAqIGRhdGUgcGFyc2luZy5cbiAgICAgKiBAcGFyYW0gc3RyIFRoZSBzdHJpbmcgdG8gc3RyaXAgZGlyZWN0aW9uIGNoYXJhY3RlcnMgZnJvbS5cbiAgICAgKiBAcmV0dXJucyBUaGUgc3RyaXBwZWQgc3RyaW5nLlxuICAgICAqL1xuICAgIHByaXZhdGUgX3N0cmlwRGlyZWN0aW9uYWxpdHlDaGFyYWN0ZXJzKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9bXFx1MjAwZVxcdTIwMGZdL2csICcnKS5yZXBsYWNlKC9cXHUyMDJmL2csICcgJyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9mb3JtYXQoZm9ybWF0dGVyOiBJbnRsLkRhdGVUaW1lRm9ybWF0LCBkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKE51bWJlci5pc05hTihkYXRlLnZhbHVlT2YoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEX0RBVEVfRVJST1I7XG4gICAgICAgIH1cbiAgICAgICAgZGF0ZSA9IHRoaXMuX2NyZWF0ZVVUQ0RhdGVJbnN0YW5jZShcbiAgICAgICAgICAgIGRhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgICAgIGRhdGUuZ2V0TW9udGgoKSxcbiAgICAgICAgICAgIGRhdGUuZ2V0RGF0ZSgpLFxuICAgICAgICAgICAgZGF0ZS5nZXRIb3VycygpLFxuICAgICAgICAgICAgZGF0ZS5nZXRNaW51dGVzKCksXG4gICAgICAgICAgICBkYXRlLmdldFNlY29uZHMoKSxcbiAgICAgICAgICAgIGRhdGUuZ2V0TWlsbGlzZWNvbmRzKClcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGZvcm1hdHRlci5mb3JtYXQoZGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIENyZWF0ZSBuYXRpdmUgRGF0ZSBpbnN0YW5jZSBmcm9tIEZkRGF0ZVxuICAgICAqIEBwYXJhbSBkYXRlIEZkRGF0ZSBpbnN0YW5jZVxuICAgICAqIEByZXR1cm5zIGRhdGUgTmF0aXZlIGRhdGUgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBwcml2YXRlIF9jcmVhdGVEYXRlSW5zdGFuY2VCeUZkRGF0ZShmZERhdGU6IEZkRGF0ZSk6IERhdGUge1xuICAgICAgICBjb25zdCB7IHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kIH0gPSBmZERhdGU7XG4gICAgICAgIC8vIFdlIGhhdmUgc3RyaWN0ZXIgdmFsaWRhdGlvbiBydWxlcyB0aGFuIERhdGUgb2JqZWN0LlxuICAgICAgICAvLyBGb3IgZXhhbXBsZSwgRGF0ZSBhbGxvd3MgdmFsdWVzIGZvciBtb250aD0xMDAgb3IgZm9yIGRheT0xMDAuXG4gICAgICAgIC8vIFRoZXJlZm9yZSwgd2UgbmVlZCB0byBkbyB0aGlzIHRyaWNrIGZvciB0aGUgY29uc2lzdGVuY3kgb2YgdGhlIHZhbGlkYXRpb24gc3RhdHVzXG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKGZkRGF0ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICBkYXRlLnNldEZ1bGxZZWFyKHllYXIsIG1vbnRoIC0gMSwgZGF5KTtcbiAgICAgICAgZGF0ZS5zZXRIb3Vycyhob3VyLCBtaW51dGUsIHNlY29uZCwgMCk7XG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBDcmVhdGUgbmF0aXZlIERhdGUgaW5zdGFuY2UgaW4gVVRDXG4gICAgICogQHBhcmFtIHllYXIgVGhlIHllYXJcbiAgICAgKiBAcGFyYW0gbW9udGggVGhlIG1vbnRoIGFzIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMTFcbiAgICAgKiBAcGFyYW0gZGF5IFRoZSBkYXRlIGFzIGEgbnVtYmVyIGJldHdlZW4gMSBhbmQgMzEuXG4gICAgICogQHBhcmFtIGhvdXJzIFRoZSBob3VycyBhcyBhIG51bWJlciBiZXR3ZWVuIDAgLSAyNFxuICAgICAqIEBwYXJhbSBtaW51dGVzIFRoZSBtaW51dGVzIGFzIGEgbnVtYmVyIGJldHdlZW4gMCAtIDU5XG4gICAgICogQHBhcmFtIHNlY29uZHMgVGhlIHNlY29uZHMgYXMgYSBudW1iZXIgYmV0d2VlbiAwIC0gNTlcbiAgICAgKiBAcGFyYW0gbWlsbGlzZWNvbmRzIFRoZSBtaWxsaXNlY29uZHMgYXMgYSBudW1iZXIgYmV0d2VlbiAwIC0gNTlcbiAgICAgKi9cbiAgICBwcml2YXRlIF9jcmVhdGVVVENEYXRlSW5zdGFuY2UoXG4gICAgICAgIHllYXI6IG51bWJlcixcbiAgICAgICAgbW9udGg6IG51bWJlcixcbiAgICAgICAgZGF5OiBudW1iZXIsXG4gICAgICAgIGhvdXJzID0gMCxcbiAgICAgICAgbWludXRlcyA9IDAsXG4gICAgICAgIHNlY29uZHMgPSAwLFxuICAgICAgICBtaWxsaXNlY29uZHMgPSAwXG4gICAgKTogRGF0ZSB7XG4gICAgICAgIGNvbnN0IHV0Y0RhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICB1dGNEYXRlLnNldFVUQ0Z1bGxZZWFyKHllYXIsIG1vbnRoLCBkYXkpO1xuICAgICAgICB1dGNEYXRlLnNldFVUQ0hvdXJzKGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBtaWxsaXNlY29uZHMpO1xuICAgICAgICByZXR1cm4gdXRjRGF0ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NyZWF0ZUZkRGF0ZUZyb21EYXRlSW5zdGFuY2UoZGF0ZTogRGF0ZSk6IEZkRGF0ZSB7XG4gICAgICAgIHJldHVybiBuZXcgRmREYXRlKFxuICAgICAgICAgICAgZGF0ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICAgZGF0ZS5nZXRNb250aCgpICsgMSxcbiAgICAgICAgICAgIGRhdGUuZ2V0RGF0ZSgpLFxuICAgICAgICAgICAgZGF0ZS5nZXRIb3VycygpLFxuICAgICAgICAgICAgZGF0ZS5nZXRNaW51dGVzKCksXG4gICAgICAgICAgICBkYXRlLmdldFNlY29uZHMoKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKlxuICAgICAqIFNpbmNlIEZkRGF0ZXRpbWVBZGFwdGVyIGNhbiBwYXJzZSBvbmx5IFwiZW4tVVNcIiBsb2NhbGVcbiAgICAgKiB0aGVyZSBpcyBubyByZWFzb24gdG8gY3JlYXRlIGNvbXByZWhlbnNpdmUgdGltZSBwYXJzZVxuICAgICAqIHRoYXQgY2FuIHVuZGVyc3RhbmQgcGxlbnR5IG9mIGxvY2FsZXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGltZVN0ciBUaW1lIHN0cmluZyB0byBwYXJzZSAoRS5nLiAnMTA6MzAgUE0nKVxuICAgICAqIEByZXR1cm5zIGRhdGUgTmF0aXZlIGRhdGUgaW5zdGFuY2VcbiAgICAgKlxuICAgICAqL1xuICAgIHByaXZhdGUgX3BhcnNlVGltZVN0cmluZyh0aW1lU3RyOiBzdHJpbmcpOiBEYXRlIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERhdGUucGFyc2UoJzEwOjMwIEFNJykgZG9lc24ndCB3b3JrIHNvIHdlIG5lZWQgZG8gYSB0cmlja1xuICAgICAgICAgKiBhbmQgcHJlcGVuZCBpdCBieSBhIGRhdGUgc3RyaW5nLlxuICAgICAgICAgKi9cbiAgICAgICAgY29uc3QgZGF0ZVN0ciA9IHRoaXMuZm9ybWF0KHRoaXMubm93KCksIHsgeWVhcjogJ251bWVyaWMnLCBtb250aDogJ251bWVyaWMnLCBkYXk6ICdudW1lcmljJyB9KTtcbiAgICAgICAgY29uc3QgZGF0ZVRpbWVTdHJpbmcgPSBgJHtkYXRlU3RyfSAke3RpbWVTdHJ9YDtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKERhdGUucGFyc2UoZGF0ZVRpbWVTdHJpbmcpKTtcbiAgICB9XG59XG4iXX0=