@fundamental-ngx/core 0.35.2-rc.16 → 0.35.2-rc.19
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.
- package/action-bar/package.json +1 -1
- package/action-sheet/package.json +1 -1
- package/alert/package.json +1 -1
- package/avatar/package.json +1 -1
- package/avatar-group/package.json +1 -1
- package/bar/package.json +1 -1
- package/breadcrumb/package.json +1 -1
- package/busy-indicator/package.json +1 -1
- package/button/package.json +1 -1
- package/calendar/package.json +1 -1
- package/card/card-content.component.d.ts +1 -6
- package/card/card.component.d.ts +3 -13
- package/card/constants.d.ts +0 -1
- package/card/esm2020/card-content.component.mjs +5 -18
- package/card/esm2020/card.component.mjs +4 -24
- package/card/esm2020/constants.mjs +1 -2
- package/card/fesm2015/fundamental-ngx-core-card.mjs +8 -42
- package/card/fesm2015/fundamental-ngx-core-card.mjs.map +1 -1
- package/card/fesm2020/fundamental-ngx-core-card.mjs +6 -40
- package/card/fesm2020/fundamental-ngx-core-card.mjs.map +1 -1
- package/card/package.json +1 -1
- package/carousel/package.json +1 -1
- package/checkbox/package.json +1 -1
- package/combobox/package.json +1 -1
- package/content-density/package.json +3 -3
- package/date-picker/package.json +1 -1
- package/datetime/package.json +1 -1
- package/datetime-picker/esm2020/datetime-picker.component.mjs +2 -2
- package/datetime-picker/fesm2015/fundamental-ngx-core-datetime-picker.mjs +1 -1
- package/datetime-picker/fesm2015/fundamental-ngx-core-datetime-picker.mjs.map +1 -1
- package/datetime-picker/fesm2020/fundamental-ngx-core-datetime-picker.mjs +1 -1
- package/datetime-picker/fesm2020/fundamental-ngx-core-datetime-picker.mjs.map +1 -1
- package/datetime-picker/package.json +1 -1
- package/dialog/package.json +1 -1
- package/dynamic-page/package.json +1 -1
- package/dynamic-side-content/package.json +1 -1
- package/esm2020/card/card-content.component.mjs +5 -18
- package/esm2020/card/card.component.mjs +4 -24
- package/esm2020/card/constants.mjs +1 -2
- package/esm2020/datetime-picker/datetime-picker.component.mjs +2 -2
- package/esm2020/fixed-card-layout/fixed-card-layout.component.mjs +55 -55
- package/esm2020/list/list.component.mjs +1 -10
- package/esm2020/list/public_api.mjs +1 -2
- package/esm2020/utils/functions/get-document-font-size.mjs +4 -0
- package/esm2020/utils/functions/index.mjs +2 -1
- package/facets/package.json +1 -1
- package/feed-input/package.json +1 -1
- package/feed-list-item/package.json +1 -1
- package/fesm2015/fundamental-ngx-core-card.mjs +8 -42
- package/fesm2015/fundamental-ngx-core-card.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-core-datetime-picker.mjs +1 -1
- package/fesm2015/fundamental-ngx-core-datetime-picker.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-core-fixed-card-layout.mjs +54 -55
- package/fesm2015/fundamental-ngx-core-fixed-card-layout.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-core-list.mjs +2 -12
- package/fesm2015/fundamental-ngx-core-list.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-core-utils.mjs +5 -1
- package/fesm2015/fundamental-ngx-core-utils.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-core-card.mjs +6 -40
- package/fesm2020/fundamental-ngx-core-card.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-core-datetime-picker.mjs +1 -1
- package/fesm2020/fundamental-ngx-core-datetime-picker.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-core-fixed-card-layout.mjs +54 -54
- package/fesm2020/fundamental-ngx-core-fixed-card-layout.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-core-list.mjs +2 -12
- package/fesm2020/fundamental-ngx-core-list.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-core-utils.mjs +5 -1
- package/fesm2020/fundamental-ngx-core-utils.mjs.map +1 -1
- package/file-uploader/package.json +1 -1
- package/fixed-card-layout/esm2020/fixed-card-layout.component.mjs +55 -55
- package/fixed-card-layout/fesm2015/fundamental-ngx-core-fixed-card-layout.mjs +54 -55
- package/fixed-card-layout/fesm2015/fundamental-ngx-core-fixed-card-layout.mjs.map +1 -1
- package/fixed-card-layout/fesm2020/fundamental-ngx-core-fixed-card-layout.mjs +54 -54
- package/fixed-card-layout/fesm2020/fundamental-ngx-core-fixed-card-layout.mjs.map +1 -1
- package/fixed-card-layout/fixed-card-layout.component.d.ts +14 -18
- package/fixed-card-layout/package.json +1 -1
- package/flexible-column-layout/package.json +1 -1
- package/form/package.json +1 -1
- package/formatted-text/package.json +1 -1
- package/grid-list/package.json +1 -1
- package/icon/package.json +1 -1
- package/illustrated-message/package.json +1 -1
- package/infinite-scroll/package.json +1 -1
- package/info-label/package.json +1 -1
- package/inline-help/package.json +1 -1
- package/input-group/package.json +1 -1
- package/layout-grid/package.json +1 -1
- package/layout-panel/package.json +1 -1
- package/link/package.json +1 -1
- package/list/esm2020/list.component.mjs +1 -10
- package/list/esm2020/public_api.mjs +1 -2
- package/list/fesm2015/fundamental-ngx-core-list.mjs +2 -12
- package/list/fesm2015/fundamental-ngx-core-list.mjs.map +1 -1
- package/list/fesm2020/fundamental-ngx-core-list.mjs +2 -12
- package/list/fesm2020/fundamental-ngx-core-list.mjs.map +1 -1
- package/list/package.json +1 -1
- package/list/public_api.d.ts +0 -1
- package/menu/package.json +1 -1
- package/message-box/package.json +1 -1
- package/message-strip/package.json +1 -1
- package/message-toast/package.json +1 -1
- package/micro-process-flow/package.json +1 -1
- package/mobile-mode/package.json +1 -1
- package/multi-input/package.json +1 -1
- package/nested-list/package.json +1 -1
- package/notification/package.json +1 -1
- package/object-identifier/package.json +1 -1
- package/object-marker/package.json +1 -1
- package/object-number/package.json +1 -1
- package/object-status/package.json +1 -1
- package/overflow-layout/package.json +13 -13
- package/package.json +1 -1
- package/pagination/package.json +1 -1
- package/panel/package.json +1 -1
- package/popover/package.json +1 -1
- package/product-switch/package.json +1 -1
- package/progress-indicator/package.json +1 -1
- package/quick-view/package.json +1 -1
- package/radio/package.json +1 -1
- package/rating-indicator/package.json +1 -1
- package/resizable-card-layout/package.json +1 -1
- package/scroll-spy/package.json +1 -1
- package/scrollbar/package.json +1 -1
- package/segmented-button/package.json +1 -1
- package/select/package.json +1 -1
- package/shared/package.json +1 -1
- package/shellbar/package.json +1 -1
- package/side-navigation/package.json +1 -1
- package/slider/package.json +1 -1
- package/split-button/package.json +1 -1
- package/splitter/package.json +1 -1
- package/status-indicator/package.json +1 -1
- package/step-input/package.json +1 -1
- package/switch/package.json +1 -1
- package/table/package.json +1 -1
- package/tabs/package.json +1 -1
- package/text/package.json +1 -1
- package/theming/package.json +1 -1
- package/tile/package.json +1 -1
- package/time/package.json +1 -1
- package/time-picker/package.json +1 -1
- package/timeline/package.json +1 -1
- package/title/package.json +1 -1
- package/token/package.json +1 -1
- package/toolbar/package.json +1 -1
- package/tree/package.json +1 -1
- package/upload-collection/package.json +1 -1
- package/utils/esm2020/functions/get-document-font-size.mjs +4 -0
- package/utils/esm2020/functions/index.mjs +2 -1
- package/utils/fesm2015/fundamental-ngx-core-utils.mjs +5 -1
- package/utils/fesm2015/fundamental-ngx-core-utils.mjs.map +1 -1
- package/utils/fesm2020/fundamental-ngx-core-utils.mjs +5 -1
- package/utils/fesm2020/fundamental-ngx-core-utils.mjs.map +1 -1
- package/utils/functions/get-document-font-size.d.ts +1 -0
- package/utils/functions/index.d.ts +1 -0
- package/utils/package.json +1 -1
- package/vertical-navigation/package.json +1 -1
- package/wizard/package.json +1 -1
- package/card/card.tokens.d.ts +0 -2
- package/card/esm2020/card.tokens.mjs +0 -3
- package/esm2020/card/card.tokens.mjs +0 -3
- package/esm2020/list/list.tokens.mjs +0 -3
- package/list/esm2020/list.tokens.mjs +0 -3
- package/list/list.tokens.d.ts +0 -2
|
@@ -203,7 +203,7 @@ export class DatetimePickerComponent {
|
|
|
203
203
|
this._popoverFormMessage.messageType = state;
|
|
204
204
|
}
|
|
205
205
|
get state() {
|
|
206
|
-
if (this.
|
|
206
|
+
if (this.useValidation && this.isInvalidDateInput) {
|
|
207
207
|
return 'error';
|
|
208
208
|
}
|
|
209
209
|
return this._state;
|
|
@@ -662,4 +662,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImpor
|
|
|
662
662
|
}], disableFunction: [{
|
|
663
663
|
type: Input
|
|
664
664
|
}] } });
|
|
665
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUtcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2RhdGV0aW1lLXBpY2tlci9kYXRldGltZS1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZGF0ZXRpbWUtcGlja2VyL2RhdGV0aW1lLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFJTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixhQUFhLEVBQUUsaUJBQWlCLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRyxPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR25ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQW1CLE1BQU0sZ0NBQWdDLENBQUM7QUFDckcsT0FBTyxFQUFFLGlCQUFpQixFQUFnRCxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pILE9BQU8sRUFBbUIseUJBQXlCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNqSCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDL0QsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFN0UsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxxQkFBcUIsRUFB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QkFEVixLQUFLO2dCQVFOLFlBQVk7c0JBRFgsTUFBTTtnQkFLUyxnQkFBZ0I7c0JBRC9CLE1BQU07Z0JBS0UsVUFBVTtzQkFEbEIsTUFBTTtnQkFLRSxjQUFjO3NCQUR0QixNQUFNO2dCQUtFLFVBQVU7c0JBRGxCLE1BQU07Z0JBTUUsT0FBTztzQkFGZixNQUFNO2dCQU1FLE9BQU87c0JBRGYsTUFBTTtnQkFVUCxrQkFBa0I7c0JBRGpCLFNBQVM7dUJBQUMsaUJBQWlCO2dCQUs1QixrQkFBa0I7c0JBRGpCLFNBQVM7dUJBQUMscUJBQXFCLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUt0RCxhQUFhO3NCQURaLFNBQVM7dUJBQUMsd0JBQXdCLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQXNEekQsZUFBZTtzQkFEZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SLCBWYWxpZGF0b3IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBGb3JtU3RhdGVzLCBOdWxsYWJsZSwgUGxhY2VtZW50LCBTcGVjaWFsRGF5UnVsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9zaGFyZWQnO1xuaW1wb3J0IHsgREFURV9USU1FX0ZPUk1BVFMsIERhdGV0aW1lQWRhcHRlciwgRGF0ZVRpbWVGb3JtYXRzIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2RhdGV0aW1lJztcbmltcG9ydCB7IENhbGVuZGFyQ29tcG9uZW50LCBDYWxlbmRhclllYXJHcmlkLCBEYXlzT2ZXZWVrLCBGZENhbGVuZGFyVmlldyB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9jYWxlbmRhcic7XG5pbXBvcnQgeyBGb3JtSXRlbUNvbnRyb2wsIFBvcG92ZXJGb3JtTWVzc2FnZVNlcnZpY2UsIHJlZ2lzdGVyRm9ybUl0ZW1Db250cm9sIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Zvcm0nO1xuaW1wb3J0IHsgUG9wb3ZlclNlcnZpY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvcG9wb3Zlcic7XG5pbXBvcnQgeyBJbnB1dEdyb3VwSW5wdXREaXJlY3RpdmUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvaW5wdXQtZ3JvdXAnO1xuXG5pbXBvcnQgeyBjcmVhdGVNaXNzaW5nRGF0ZUltcGxlbWVudGF0aW9uRXJyb3IgfSBmcm9tICcuL2Vycm9ycyc7XG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuXG4vKipcbiAqIFRoZSBkYXRldGltZSBwaWNrZXIgY29tcG9uZW50IGlzIGFuIG9waW5pb25hdGVkIGNvbXBvc2l0aW9uIG9mIHRoZSBmZC1wb3BvdmVyLFxuICogZmQtY2FsZW5kYXIgYW5kIGZkLXRpbWUgY29tcG9uZW50cyB0byBhY2NvbXBsaXNoIHRoZSBVSSBwYXR0ZXJuIGZvciBwaWNraW5nIGEgZGF0ZSBhbmQgdGltZS5cbiAqIFN1cHBvcnRzIEFuZ3VsYXIgRm9ybXMuXG4gKiBgYGBodG1sXG4gKiA8ZmQtZGF0ZS10aW1lLXBpY2tlciBbKG5nTW9kZWwpXT1cImRhdGVUaW1lXCI+PC9mZC1kYXRlLXRpbWUtcGlja2VyPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmQtZGF0ZXRpbWUtcGlja2VyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZGF0ZXRpbWUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9kYXRldGltZS1waWNrZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgICBob3N0OiB7XG4gICAgICAgICcoYmx1ciknOiAnaGFuZGxlT25Ub3VjaGVkKCknXG4gICAgfSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRldGltZVBpY2tlckNvbXBvbmVudCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGF0ZXRpbWVQaWNrZXJDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgcmVnaXN0ZXJGb3JtSXRlbUNvbnRyb2woRGF0ZXRpbWVQaWNrZXJDb21wb25lbnQpLFxuICAgICAgICBQb3BvdmVyRm9ybU1lc3NhZ2VTZXJ2aWNlLFxuICAgICAgICBQb3BvdmVyU2VydmljZVxuICAgIF0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBEYXRldGltZVBpY2tlckNvbXBvbmVudDxEPlxuICAgIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciwgRm9ybUl0ZW1Db250cm9sXG57XG4gICAgLyoqIFBsYWNlaG9sZGVyIGZvciB0aGUgaW5uZXIgaW5wdXQgZWxlbWVudC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHBsYWNlaG9sZGVyID0gJyc7XG5cbiAgICAvKipcbiAgICAgKiAgVGhlIHBsYWNlbWVudCBvZiB0aGUgcG9wb3Zlci4gSXQgY2FuIGJlIG9uZSBvZjogdG9wLCB0b3Atc3RhcnQsIHRvcC1lbmQsIGJvdHRvbSxcbiAgICAgKiAgYm90dG9tLXN0YXJ0LCBib3R0b20tZW5kLCByaWdodCwgcmlnaHQtc3RhcnQsIHJpZ2h0LWVuZCwgbGVmdCwgbGVmdC1zdGFydCwgbGVmdC1lbmQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwbGFjZW1lbnQ6IFBsYWNlbWVudCA9ICdib3R0b20tc3RhcnQnO1xuXG4gICAgLyoqIFRoZSBlbGVtZW50IHRvIHdoaWNoIHRoZSBwb3BvdmVyIHNob3VsZCBiZSBhcHBlbmRlZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFwcGVuZFRvOiBFbGVtZW50UmVmO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc2FibGVkOiBib29sZWFuO1xuXG4gICAgLyoqIElkIGF0dHJpYnV0ZSBmb3IgaW5wdXQgZWxlbWVudCBpbnNpZGUgRGF0ZVRpbWVQaWNrZXIgY29tcG9uZW50ICovXG4gICAgQElucHV0KClcbiAgICBpbnB1dElkOiBzdHJpbmc7XG5cbiAgICAvKiogSWYgaXQgaXMgbWFuZGF0b3J5IGZpZWxkICovXG4gICAgQElucHV0KClcbiAgICByZXF1aXJlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgdGltZSBjb21wb25lbnQgc2hvdWxkIGJlIG1lcmlkaWFuIChhbS9wbSkuXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBiYXNlZCBvbiB0aGUgY3VycmVudCBsb2NhbGUgZm9ybWF0IG9wdGlvblxuICAgICAqICovXG4gICAgQElucHV0KClcbiAgICBtZXJpZGlhbjogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHRpbWUgY29tcG9uZW50IHNob3dzIHNlY29uZHMuXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBiYXNlZCBvbiB0aGUgY3VycmVudCBsb2NhbGUgZm9ybWF0IG9wdGlvblxuICAgICAqICovXG4gICAgQElucHV0KClcbiAgICBkaXNwbGF5U2Vjb25kczogYm9vbGVhbjtcblxuICAgIC8qKiBhcmlhLWxhYmVsIGZvciB0aGUgZGF0ZS1waWNrZXIuICovXG4gICAgQElucHV0KClcbiAgICBhcmlhTGFiZWw6IE51bGxhYmxlPHN0cmluZz47XG5cbiAgICAvKiogYXJpYS1sYWJlbGxlZGJ5IGZvciBlbGVtZW50IGRlc2NyaWJpbmcgZGF0ZS1waWNrZXIuICovXG4gICAgQElucHV0KClcbiAgICBhcmlhTGFiZWxsZWRCeTogTnVsbGFibGU8c3RyaW5nPjtcblxuICAgIC8qKiBUZXh0IGRpc3BsYXllZCBpbiBtZXNzYWdlICovXG4gICAgQElucHV0KClcbiAgICBzZXQgbWVzc2FnZShtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fbWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICAgIHRoaXMuX3BvcG92ZXJGb3JtTWVzc2FnZS5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9tZXNzYWdlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBUaGUgdHJpZ2dlciBldmVudHMgdGhhdCB3aWxsIG9wZW4vY2xvc2UgdGhlIG1lc3NhZ2UgYm94LlxuICAgICAqICBBY2NlcHRzIGFueSBbSFRNTCBET00gRXZlbnRzXShodHRwczovL3d3dy53M3NjaG9vbHMuY29tL2pzcmVmL2RvbV9vYmpfZXZlbnQuYXNwKS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBtZXNzYWdlVHJpZ2dlcnModHJpZ2dlcnM6IHN0cmluZ1tdKSB7XG4gICAgICAgIHRoaXMuX21lc3NhZ2VUcmlnZ2VycyA9IHRyaWdnZXJzO1xuICAgICAgICB0aGlzLl9wb3BvdmVyRm9ybU1lc3NhZ2UudHJpZ2dlcnMgPSB0cmlnZ2VycztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9tZXNzYWdlVHJpZ2dlcnM6IHN0cmluZ1tdID0gWydmb2N1c2luJywgJ2ZvY3Vzb3V0J107XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSB0aW1lIGNvbXBvbmVudCBzaG93cyBtaW51dGVzLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYmFzZWQgb24gdGhlIGN1cnJlbnQgbG9jYWxlIGZvcm1hdCBvcHRpb25cbiAgICAgKiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzcGxheU1pbnV0ZXM6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSB0aW1lIGNvbXBvbmVudCBzaG93cyBob3Vycy5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGJhc2VkIG9uIHRoZSBjdXJyZW50IGxvY2FsZSBmb3JtYXQgb3B0aW9uXG4gICAgICogKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc3BsYXlIb3VyczogYm9vbGVhbjtcblxuICAgIC8qKiBXaGV0aGVyIHRvIHBlcmZvcm0gdmlzdWFsIHZhbGlkYXRpb24gb24gdGhlIHBpY2tlciBpbnB1dC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHVzZVZhbGlkYXRpb24gPSB0cnVlO1xuXG4gICAgLyoqIEN1cnJlbnQgc2VsZWN0ZWQgZGF0ZS4gVHdvLXdheSBiaW5kaW5nIGlzIHN1cHBvcnRlZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGRhdGU6IE51bGxhYmxlPEQ+O1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIHBvcG92ZXIgaXMgb3Blbi4gVHdvLXdheSBiaW5kaW5nIGlzIHN1cHBvcnRlZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGlzT3BlbiA9IGZhbHNlO1xuXG4gICAgLyoqIFRoZSBkaXNhYmxlRnVuY3Rpb24gZm9yIHRoZSBjYWxlbmRhci4gKi9cbiAgICBASW5wdXQoKVxuICAgIHN0YXJ0aW5nRGF5T2ZXZWVrOiBEYXlzT2ZXZWVrID0gMTtcblxuICAgIC8qKiBBY3R1YWxseSBzaG93biBhY3RpdmUgdmlldyBvbmUgb2YgJ2RheScgfCAnbW9udGgnIHwgJ3llYXInIGluIGNhbGVuZGFyIGNvbXBvbmVudCovXG4gICAgQElucHV0KClcbiAgICBhY3RpdmVWaWV3OiBGZENhbGVuZGFyVmlldyA9ICdkYXknO1xuXG4gICAgLyoqIEFyaWEgbGFiZWwgZm9yIHRoZSBkYXRldGltZSBwaWNrZXIgaW5wdXQuICovXG4gICAgQElucHV0KClcbiAgICBkYXRldGltZUlucHV0TGFiZWwgPSAnRGF0ZXRpbWUgaW5wdXQnO1xuXG4gICAgLyoqIEFyaWEgbGFiZWwgZm9yIHRoZSBidXR0b24gdG8gc2hvdy9oaWRlIHRoZSBjYWxlbmRhci4gKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc3BsYXlEYXRldGltZVRvZ2dsZUxhYmVsID0gJ0Rpc3BsYXkgY2FsZW5kYXIgdG9nZ2xlJztcblxuICAgIC8qKiBMYWJlbCBmb3IgdGhlIFwiRGF0ZVwiIGJ1dHRvbiBpbiBkaXNwbGF5IHR5cGUgc3dpdGNoZXIgaW4gbW9iaWxlIG1vZGUgKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc3BsYXlUeXBlRGF0ZUxhYmVsID0gJ0RhdGUnO1xuXG4gICAgLyoqIExhYmVsIGZvciB0aGUgXCJUaW1lXCIgYnV0dG9uIGluIGRpc3BsYXkgdHlwZSBzd2l0Y2hlciBpbiBtb2JpbGUgbW9kZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzcGxheVR5cGVUaW1lTGFiZWwgPSAnVGltZSc7XG5cbiAgICAvKiogV2hldGhlciBhIG51bGwgaW5wdXQgaXMgY29uc2lkZXJlZCB2YWxpZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFsbG93TnVsbCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBASW5wdXQgd2hlbiBzZXQgdG8gdHJ1ZSB0aW1lIGNvbXBvbmVudCB3aWxsIHVzZSAyIGRpZ2l0cyBmb3IgZWFjaCBudW1iZXIuXG4gICAgICogRm9yIGV4YW1wbGUgOSB3aWxsIGJlY29tZSAwOVxuICAgICAqIGJ1dCAxMiB3aWxsIGJlIGtlcHQgYXMgMTIuXG4gICAgICogT25seSB1c2VzIGJ5IHRpbWUgY29tcG9uZW50IGFuZCBkb2VzIG5vdCBjaGFuZ2UgaW5wdXQgZm9ybWF0XG4gICAgICovXG4gICAgQElucHV0KCkga2VlcFR3b0RpZ2l0c1RpbWUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqICBUaGUgc3RhdGUgb2YgdGhlIGZvcm0gY29udHJvbCAtIGFwcGxpZXMgY3NzIGNsYXNzZXMuXG4gICAgICogIEFsc28gdGhpcyBpcyBhcHBsaWVkIHRvIG1lc3NhZ2UuXG4gICAgICogIENhbiBiZSBgc3VjY2Vzc2AsIGBlcnJvcmAsIGB3YXJuaW5nYCwgYGluZm9ybWF0aW9uYCBvciBibGFuayBmb3IgZGVmYXVsdC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzdGF0ZShzdGF0ZTogRm9ybVN0YXRlcykge1xuICAgICAgICB0aGlzLl9zdGF0ZSA9IHN0YXRlO1xuICAgICAgICB0aGlzLl9wb3BvdmVyRm9ybU1lc3NhZ2UubWVzc2FnZVR5cGUgPSBzdGF0ZTtcbiAgICB9XG5cbiAgICBnZXQgc3RhdGUoKTogRm9ybVN0YXRlcyB7XG4gICAgICAgIGlmICh0aGlzLl9zdGF0ZSA9PSBudWxsICYmIHRoaXMudXNlVmFsaWRhdGlvbiAmJiB0aGlzLmlzSW52YWxpZERhdGVJbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuICdlcnJvcic7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc3RhdGU6IEZvcm1TdGF0ZXMgPSAnZGVmYXVsdCc7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIEFkZE9uIEJ1dHRvbiBzaG91bGQgYmUgZm9jdXNhYmxlXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgYnV0dG9uRm9jdXNhYmxlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFNwZWNpYWwgZGF5cyBtYXJrLCBpdCBjYW4gYmUgdXNlZCBieSBwYXNzaW5nIGFycmF5IG9mIG9iamVjdCB3aXRoXG4gICAgICogU3BlY2lhbCBkYXkgbnVtYmVyLCBsaXN0IDEtMjAgW2NsYXNzOmBmZC1jYWxlbmRhcl9fc3BlY2lhbC1kYXktLXt7bnVtYmVyfX1gXSBpcyBhdmFpbGFibGUgdGhlcmU6XG4gICAgICogaHR0cHM6Ly9zYXAuZ2l0aHViLmlvL2Z1bmRhbWVudGFsLXN0eWxlcy9jb21wb25lbnRzL2NhbGVuZGFyLmh0bWwgY2FsZW5kYXIgc3BlY2lhbCBkYXlzIHNlY3Rpb25cbiAgICAgKiBSdWxlIGFjY2VwdHMgbWV0aG9kIHdpdGggRmREYXRlIG9iamVjdCBhcyBhIHBhcmFtZXRlci4gZXg6XG4gICAgICogYHJ1bGU6IChmZERhdGU6IEZkRGF0ZSkgPT4gZmREYXRlLmdldERheSgpID09PSAxYCwgd2hpY2ggd2lsbCBtYXJrIGFsbCBzdW5kYXlzIGFzIHNwZWNpYWwgZGF5LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc3BlY2lhbERheXNSdWxlczogU3BlY2lhbERheVJ1bGU8RD5bXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogT2JqZWN0IHRvIGN1c3RvbWl6ZSB5ZWFyIGdyaWQsXG4gICAgICogUm93LCBDb2x1bW5zIGFuZCBtZXRob2QgdG8gZGlzcGxheSB5ZWFyIGNhbiBiZSBtb2RpZmllZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgeWVhckdyaWQ6IENhbGVuZGFyWWVhckdyaWQgPSB7XG4gICAgICAgIHJvd3M6IDQsXG4gICAgICAgIGNvbHM6IDVcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogT2JqZWN0IHRvIGN1c3RvbWl6ZSBhZ2dyZWdhdGVkIHllYXIgZ3JpZCxcbiAgICAgKiBSb3csIENvbHVtbnMgYW5kIG1ldGhvZCB0byBkaXNwbGF5IHllYXIgY2FuIGJlIG1vZGlmaWVkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBhZ2dyZWdhdGVkWWVhckdyaWQ6IENhbGVuZGFyWWVhckdyaWQgPSB7XG4gICAgICAgIHJvd3M6IDQsXG4gICAgICAgIGNvbHM6IDNcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB1c2VyIHdhbnRzIHRvIG1hcmsgc3VuZGF5L3NhdHVyZGF5IHdpdGggYGZkLWNhbGVuZGFyX19pdGVtLS13ZWVrZW5kYCBjbGFzc1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgbWFya1dlZWtlbmRzID0gdHJ1ZTtcblxuICAgIC8qKiBASW5wdXQgV2hldGhlciB0byBzaG93IHNwaW5uZXIgYnV0dG9ucyAqL1xuICAgIEBJbnB1dCgpXG4gICAgc3Bpbm5lckJ1dHRvbnMgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB1c2VyIHdhbnRzIHRvIHNob3cgd2VlayBudW1iZXJzIG5leHQgdG8gZGF5c1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd1dlZWtOdW1iZXJzID0gdHJ1ZTtcblxuICAgIC8qKiBXaGV0aGVyIG9yIG5vdCB0byBzaG93IHRoZSBkYXRldGltZSBwaWNrZXIgZm9vdGVyIHdpdGggT0svY2FuY2VsIGJ1dHRvbnMuICovXG4gICAgQElucHV0KClcbiAgICBzaG93Rm9vdGVyID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gcmVjYWxjdWxhdGUgdmFsdWUgZnJvbSB0aGUgaW5wdXQgYXMgdXNlciB0eXBlcyBvciBvbiBibHVyLlxuICAgICAqIEJ5IGRlZmF1bHQsIHVwZGF0ZXMgdGhlIHZhbHVlIGFzIHVzZXIgdHlwZXMuXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBwcm9jZXNzSW5wdXRPbkJsdXIodjogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9wcm9jZXNzSW5wdXRPbkJsdXIgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodik7XG4gICAgfVxuXG4gICAgZ2V0IHByb2Nlc3NJbnB1dE9uQmx1cigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2Nlc3NJbnB1dE9uQmx1cjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIHByZXZlbnQgcGFnZSBzY3JvbGxpbmcgd2hlbiBmb2N1c2luZyBkYXRlIHBpY2tlciBpbnB1dCBmaWVsZCBhZnRlciBjYWxlbmRhciBoYXMgYmVlbiBjbG9zZWQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwcmV2ZW50U2Nyb2xsT25Gb2N1cyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGV4dCBhbmQgYXJpYS1sYWJlbCBvZiB0aGUgRGF0ZVRpbWVQaWNrZXIgJ09LJyBidXR0b24uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBva0xhYmVsID0gJ09LJztcblxuICAgIC8qKlxuICAgICAqIFRleHQgYW5kIGFyaWEtbGFiZWwgb2YgdGhlIERhdGVUaW1lUGlja2VyICdDYW5jZWwnIGJ1dHRvbi5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGNhbmNlbExhYmVsID0gJ0NhbmNlbCc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9wcm9jZXNzSW5wdXRPbkJsdXIgPSBmYWxzZTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIHN0YXRlIG9mIHRoZSBpc09wZW4gcHJvcGVydHkgY2hhbmdlcy4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBpc09wZW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICAvKiogRXZlbnQgdGhyb3duIGV2ZXJ5IHRpbWUgY2FsZW5kYXIgYWN0aXZlIHZpZXcgaXMgY2hhbmdlZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyByZWFkb25seSBhY3RpdmVWaWV3Q2hhbmdlOiBFdmVudEVtaXR0ZXI8RmRDYWxlbmRhclZpZXc+ID0gbmV3IEV2ZW50RW1pdHRlcjxGZENhbGVuZGFyVmlldz4oKTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGRhdGUgY2hhbmdlcy4gVGhpcyBjYW4gYmUgYSB0aW1lIG9yIGRheSBjaGFuZ2UuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgZGF0ZUNoYW5nZTogRXZlbnRFbWl0dGVyPEQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxEPigpO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgZGF5IGNoYW5nZXMgZnJvbSB0aGUgY2FsZW5kYXIuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgY2FsZW5kYXJDaGFuZ2U6IEV2ZW50RW1pdHRlcjxEPiA9IG5ldyBFdmVudEVtaXR0ZXI8RD4oKTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIHRpbWUgY2hhbmdlcyBmcm9tIHRoZSB0aW1lIGNvbXBvbmVudC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSB0aW1lQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RD4gPSBuZXcgRXZlbnRFbWl0dGVyPEQ+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIHBvcG92ZXIgY2xvc2VzLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeFxuICAgIHJlYWRvbmx5IG9uQ2xvc2U6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gZGF0ZXBpY2tlciBjaGFuZ2VzIGl0J3MgXCJ0b3VjaGVkXCIgc3RhdGUuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgdG91Y2hlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqIEluZGljYXRlcyB3aGVuIGRhdGV0aW1lIGlucHV0IGlzIGluIGludmFsaWQgc3RhdGUuICovXG4gICAgZ2V0IGlzSW52YWxpZERhdGVJbnB1dCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzSW52YWxpZERhdGVJbnB1dCAmJiB0aGlzLl90b3VjaGVkO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFJlZmVyZW5jZSB0byB0aGUgaW5uZXIgY2FsZW5kYXIgY29tcG9uZW50LiAqL1xuICAgIEBWaWV3Q2hpbGQoQ2FsZW5kYXJDb21wb25lbnQpXG4gICAgX2NhbGVuZGFyQ29tcG9uZW50OiBDYWxlbmRhckNvbXBvbmVudDxEPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnaW5wdXRHcm91cENvbXBvbmVudCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIF9pbnB1dEdyb3VwRWxlbWVudDogRWxlbWVudFJlZjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChJbnB1dEdyb3VwSW5wdXREaXJlY3RpdmUsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIF9pbnB1dEVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogRGF0ZSBvZiB0aGUgaW5wdXQgZmllbGQuIEludGVybmFsIHVzZS5cbiAgICAgKiBGb3IgcHJvZ3JhbW1hdGljIHNlbGVjdGlvbiwgdXNlIHR3by13YXkgYmluZGluZyBvbiB0aGUgZGF0ZSBpbnB1dC5cbiAgICAgKi9cbiAgICBfaW5wdXRGaWVsZERhdGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaXNJbnZhbGlkRGF0ZUlucHV0ID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiBUaGUgdGVtcG9yYXJ5IFRpbWUgb2JqZWN0IGZvciB1c2UgYmVmb3JlICdPSycgaXMgcHJlc3NlZC4gSW50ZXJuYWwgdXNlLiAqL1xuICAgIF90ZW1wVGltZTogTnVsbGFibGU8RD47XG5cbiAgICAvKiogQGhpZGRlbiBUaGUgdGVtcG9yYXJ5IENhbGVuZGFyRGF5IG9iamVjdCBmb3IgdXNlIGJlZm9yZSAnT0snIGlzIHByZXNzZWQuIEludGVybmFsIHVzZS4gKi9cbiAgICBfdGVtcERhdGU6IE51bGxhYmxlPEQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfbWVyaWRpYW46IGJvb2xlYW47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9kaXNwbGF5U2Vjb25kczogYm9vbGVhbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2Rpc3BsYXlNaW51dGVzOiBib29sZWFuO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZGlzcGxheUhvdXJzOiBib29sZWFuO1xuXG4gICAgLyoqIEBoaWRkZW4gd2hldGhlciB0byBkaXNwbGF5IGRhdGUgb3IgdGltZSBpbiBtb2JpbGUgbW9kZSAqL1xuICAgIF9kaXNwbGF5VHlwZTogJ2RhdGUnIHwgJ3RpbWUnID0gJ2RhdGUnO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9vbkRlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdG91Y2hlZCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvbkNoYW5nZTogKHZhbHVlOiBEIHwgbnVsbCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvblRvdWNoZWQgPSAoKTogdm9pZCA9PiB7fTtcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHVzZWQgdG8gZGlzYWJsZSBjZXJ0YWluIGRhdGVzIGluIHRoZSBjYWxlbmRhci5cbiAgICAgKiBAcGFyYW0gZmREYXRlIEZkRGF0ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzYWJsZUZ1bmN0aW9uOiAodmFsdWU6IEQpID0+IGJvb2xlYW4gPSAoKSA9PiBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX2VsUmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIF9jaGFuZ2VEZXRSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICAvLyBVc2UgQE9wdGlvbmFsIHRvIGF2b2lkIGFuZ3VsYXIgaW5qZWN0aW9uIGVycm9yIG1lc3NhZ2UgYW5kIHRocm93IG91ciBvd24gd2hpY2ggaXMgbW9yZSBwcmVjaXNlIG9uZVxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIF9kYXRlVGltZUFkYXB0ZXI6IERhdGV0aW1lQWRhcHRlcjxEPixcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChEQVRFX1RJTUVfRk9STUFUUykgcHJpdmF0ZSBfZGF0ZVRpbWVGb3JtYXRzOiBEYXRlVGltZUZvcm1hdHMsXG4gICAgICAgIHByaXZhdGUgX3BvcG92ZXJGb3JtTWVzc2FnZTogUG9wb3ZlckZvcm1NZXNzYWdlU2VydmljZVxuICAgICkge1xuICAgICAgICBpZiAoIXRoaXMuX2RhdGVUaW1lQWRhcHRlcikge1xuICAgICAgICAgICAgdGhyb3cgY3JlYXRlTWlzc2luZ0RhdGVJbXBsZW1lbnRhdGlvbkVycm9yKCdEYXRlVGltZUFkYXB0ZXInKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX2RhdGVUaW1lRm9ybWF0cykge1xuICAgICAgICAgICAgdGhyb3cgY3JlYXRlTWlzc2luZ0RhdGVJbXBsZW1lbnRhdGlvbkVycm9yKCdEQVRFX1RJTUVfRk9STUFUUycpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZGVmYXVsdCBtb2RlbCB2YWx1ZVxuICAgICAgICB0aGlzLmRhdGUgPSBfZGF0ZVRpbWVBZGFwdGVyLm5vdygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoY2hhbmdlcy5kYXRlKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRUZW1wRGF0ZVRpbWUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChbJ2Rpc3BsYXlIb3VycycsICdkaXNwbGF5TWludXRlcycsICdkaXNwbGF5U2Vjb25kcycsICdtZXJpZGlhbiddLnNvbWUoKGlucHV0KSA9PiBpbnB1dCBpbiBjaGFuZ2VzKSkge1xuICAgICAgICAgICAgdGhpcy5fY2FsY3VsYXRlVGltZU9wdGlvbnMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldFRlbXBEYXRlVGltZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlVGltZU9wdGlvbnMoKTtcblxuICAgICAgICB0aGlzLl9kYXRlVGltZUFkYXB0ZXIubG9jYWxlQ2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpLFxuICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLl9pbnB1dEZpZWxkRGF0ZSAhPT0gJycpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRJbnB1dCh0aGlzLmRhdGUpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NhbGN1bGF0ZVRpbWVPcHRpb25zKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0UmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5fb25EZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fSW5pdGlhbGlzZVZhcmlhYmxlc0luTWVzc2FnZVNlcnZpY2UoKTtcbiAgICAgICAgLy8gdXBkYXRlIGJpbmRpbmdzIGFmdGVyIHJlbmRlcmluZ1xuICAgICAgICAvLyBpcyBuZWVkZWQgdG8gcHJlcGVybHkgcmVmbGVjdCBlcnJvciBzdGF0ZVxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEZ1bmN0aW9uIHRoYXQgaW1wbGVtZW50cyBWYWxpZGF0b3IgSW50ZXJmYWNlLCBhZGRzIHZhbGlkYXRpb24gc3VwcG9ydCBmb3IgZm9ybXNcbiAgICAgKi9cbiAgICB2YWxpZGF0ZSgpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzQ3VycmVudE1vZGVsVmFsaWQoKSAmJiAhdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0XG4gICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgZGF0ZVZhbGlkYXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgICB2YWxpZDogZmFsc2VcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKiogVG9nZ2xlcyB0aGUgcG9wb3Zlci4gKi9cbiAgICB0b2dnbGVQb3BvdmVyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhhbmRsZU9uVG91Y2hlZCgpO1xuICAgICAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VQb3BvdmVyKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9wZW5Qb3BvdmVyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNZXRob2QgdGhhdCBoYW5kbGVzIGNhbGVuZGFyIGFjdGl2ZSB2aWV3IGNoYW5nZSBhbmQgdGhyb3dzIGV2ZW50LlxuICAgICAqL1xuICAgIGhhbmRsZUNhbGVuZGFyQWN0aXZlVmlld0NoYW5nZShhY3RpdmVWaWV3OiBGZENhbGVuZGFyVmlldyk6IHZvaWQge1xuICAgICAgICB0aGlzLmFjdGl2ZVZpZXdDaGFuZ2UuZW1pdChhY3RpdmVWaWV3KTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHRoYXQgaGFuZGxlcyBibHVyIGV2ZW50cyBvbiBkYXRldGltZSBwaWNrZXIgaW5wdXQgKi9cbiAgICBoYW5kbGVPblRvdWNoZWQoZXZlbnQ/OiBGb2N1c0V2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RvdWNoZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgICAgICB0aGlzLnRvdWNoZWQubmV4dCgpO1xuICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlSW5wdXRDaGFuZ2UoKDxIVE1MSW5wdXRFbGVtZW50PmV2ZW50LnRhcmdldCkudmFsdWUsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBPcGVucyB0aGUgcG9wb3Zlci4gKi9cbiAgICBvcGVuUG9wb3ZlcigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzT3BlbiAmJiAhdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVPblRvdWNoZWQoKTtcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX29uT3BlblN0YXRlQ2hhbmdlZCh0aGlzLmlzT3Blbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQ2xvc2VzIHRoZSBwb3BvdmVyIGFuZCByZWZyZXNoIG1vZGVsICovXG4gICAgY2xvc2VQb3BvdmVyKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMub25DbG9zZS5lbWl0KCk7XG4gICAgICAgICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fb25PcGVuU3RhdGVDaGFuZ2VkKHRoaXMuaXNPcGVuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgc2V0SW52YWxpZERhdGVJbnB1dEhhbmRsZXIoaXNJbnZhbGlkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2lzSW52YWxpZERhdGVJbnB1dCA9IGlzSW52YWxpZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IChzZWxlY3RlZDogYW55KSA9PiB7IHZvaWQgfSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgICAgIHRoaXMuX2NoYW5nZURldFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEZ1bmN0aW9uIHRoYXQgcHJvdmlkZXMgc3VwcG9ydCBmb3IgQ29udHJvbFZhbHVlQWNjZXNzb3IgdGhhdCBhbGxvd3MgdG8gdXNlIFsobmdNb2RlbCldIG9yIGZvcm1zXG4gICAgICovXG4gICAgd3JpdGVWYWx1ZShzZWxlY3RlZDogRCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRhdGUgPSB0aGlzLl9wYXJzZURhdGUoc2VsZWN0ZWQpO1xuICAgICAgICB0aGlzLl9pc0ludmFsaWREYXRlSW5wdXQgPSAhdGhpcy5faXNNb2RlbFZhbGlkKHRoaXMuZGF0ZSk7XG4gICAgICAgIGlmICh0aGlzLmlzQ3VycmVudE1vZGVsVmFsaWQoKSkge1xuICAgICAgICAgICAgdGhpcy5fc2V0VGVtcERhdGVUaW1lKCk7XG4gICAgICAgICAgICB0aGlzLl9yZWZyZXNoQ3VycmVudGx5RGlzcGxheWVkQ2FsZW5kYXJEYXRlKHRoaXMuZGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2V0SW5wdXQodGhpcy5kYXRlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRoYXQgaXMgdHJpZ2dlcmVkIGJ5IGV2ZW50cyBmcm9tIGNhbGVuZGFyIGNvbXBvbmVudCwgd2hlbiB0aGVyZSBpcyBzZWxlY3RlZCBkYXRlIGNoYW5nZWQuXG4gICAgICogSWYgaW52YWxpZCB0aW1lIG1vZGVsIGlzIGRldGVjdGVkLCBpdCB0YWtlcyB0aW1lIG1vZGVsIGRhdGEgZnJvbSBUaW1lQ29tcG9uZW50LlxuICAgICAqL1xuICAgIGhhbmRsZURhdGVDaGFuZ2UoZGF0ZTogRCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90ZW1wRGF0ZSA9IGRhdGU7XG4gICAgICAgIGlmICghdGhpcy5zaG93Rm9vdGVyKSB7XG4gICAgICAgICAgICB0aGlzLnN1Ym1pdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0aGF0IGlzIHRyaWdnZXJlZCBieSBldmVudHMgZnJvbSB0aW1lIGNvbXBvbmVudCwgd2hlbiB0aGVyZSBpcyBzZWxlY3RlZCB0aW1lIGNoYW5nZWRcbiAgICAgKi9cbiAgICBoYW5kbGVUaW1lQ2hhbmdlKHRpbWU6IEQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGVtcFRpbWUgPSB0aW1lO1xuICAgICAgICBpZiAoIXRoaXMuc2hvd0Zvb3Rlcikge1xuICAgICAgICAgICAgdGhpcy5zdWJtaXQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCBpcyB0cmlnZ2VyZWQgd2hlbiAnT0snIGJ1dHRvbiBpcyBwcmVzc2VkLlxuICAgICAqL1xuICAgIHN1Ym1pdCgpOiB2b2lkIHtcbiAgICAgICAgLy8gbWFya2luZyBkYXRlICYgdGltZSBhcyBub3QgbnVsbCwgZXJyb3JzIHdpbGwgYmUgY2F1Z2h0IGJlbG93XG4gICAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gdGhpcy5fdGVtcERhdGUhO1xuICAgICAgICBjb25zdCBjdXJyZW50VGltZSA9IHRoaXMuX3RlbXBUaW1lITtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5kYXRlID0gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLnNldFRpbWUoXG4gICAgICAgICAgICAgICAgY3VycmVudERhdGUsXG4gICAgICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmdldEhvdXJzKGN1cnJlbnRUaW1lKSxcbiAgICAgICAgICAgICAgICB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZ2V0TWludXRlcyhjdXJyZW50VGltZSksXG4gICAgICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmdldFNlY29uZHMoY3VycmVudFRpbWUpXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0ID0gIXRoaXMuaXNDdXJyZW50TW9kZWxWYWxpZCgpO1xuXG4gICAgICAgIHRoaXMuX3NldElucHV0KHRoaXMuZGF0ZSk7XG5cbiAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLmRhdGUpO1xuXG4gICAgICAgIGlmICh0aGlzLnNob3dGb290ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VQb3BvdmVyKCk7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gJ0NhbmNlbCcgYnV0dG9uIGlzIHByZXNzZWQuXG4gICAgICovXG4gICAgY2FuY2VsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90ZW1wRGF0ZSA9IHRoaXMuZGF0ZTtcbiAgICAgICAgdGhpcy5fdGVtcFRpbWUgPSB0aGlzLmRhdGU7XG4gICAgICAgIHRoaXMuY2xvc2VQb3BvdmVyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIExvb2tzIGxpa2Ugbm8gb25lIHVzZXMgaXQuIFNob3VsZCBiZSByZW1vdmVkP1xuICAgICAqL1xuICAgIGZvY3VzQXJyb3dMZWZ0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fZWxSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcjJyArIHRoaXMuX2NhbGVuZGFyQ29tcG9uZW50LmlkICsgJy1sZWZ0LWFycm93JykpIHtcbiAgICAgICAgICAgIHRoaXMuX2VsUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignIycgKyB0aGlzLl9jYWxlbmRhckNvbXBvbmVudC5pZCArICctbGVmdC1hcnJvdycpLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kLCB3aGljaCBpcyByZXNwb25zaWJsZSBmb3IgdHJhbnNmb3JtaW5nIHN0cmluZyB0byBkYXRldGltZSwgZGVwZW5kaW5nIG9uIHR5cGUgb3JcbiAgICAgKiB2YWxpZGF0aW9uIHRoZSByZXN1bHRzIGFyZSBkaWZmZXJlbnQuIEl0IGFsc28gY2hhbmdlcyB0byBzdGF0ZSBvZiBfaXNJbnZhbGlkRGF0ZUlucHV0LlxuICAgICAqL1xuICAgIGhhbmRsZUlucHV0Q2hhbmdlKGlucHV0U3RyOiBzdHJpbmcsIGlzVHlwZUV2ZW50OiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmICgoaXNUeXBlRXZlbnQgJiYgdGhpcy5wcm9jZXNzSW5wdXRPbkJsdXIpIHx8ICghaXNUeXBlRXZlbnQgJiYgIXRoaXMucHJvY2Vzc0lucHV0T25CbHVyKSkge1xuICAgICAgICAgICAgLy8gaWYgcHJvY2Vzc0lucHV0T25CbHVyID09PSB0cnVlLCBpZ25vcmUgdHlwZSBldmVudFxuICAgICAgICAgICAgLy8gaWYgcHJvY2Vzc0lucHV0T25CbHVyID09PSBmYWxzZSwgaWdub3JlIGJsdXIvZW50ZXIgZXZlbnRcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pbnB1dEZpZWxkRGF0ZSA9IGlucHV0U3RyID8/ICcnO1xuICAgICAgICBpZiAoIWlucHV0U3RyKSB7XG4gICAgICAgICAgICB0aGlzLl9pc0ludmFsaWREYXRlSW5wdXQgPSAhdGhpcy5hbGxvd051bGw7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKG51bGwpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0ZSA9IHRoaXMuX3BhcnNlRGF0ZShpbnB1dFN0cik7XG4gICAgICAgIHRoaXMuX2lzSW52YWxpZERhdGVJbnB1dCA9ICF0aGlzLl9pc01vZGVsVmFsaWQodGhpcy5kYXRlKTtcblxuICAgICAgICBpZiAoIXRoaXMuX2lzSW52YWxpZERhdGVJbnB1dCkge1xuICAgICAgICAgICAgdGhpcy5fc2V0VGVtcERhdGVUaW1lKCk7XG4gICAgICAgICAgICB0aGlzLl9yZWZyZXNoQ3VycmVudGx5RGlzcGxheWVkQ2FsZW5kYXJEYXRlKHRoaXMuZGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLmRhdGUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2NoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuX3BvcG92ZXJGb3JtTWVzc2FnZS5oaWRlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9wb3BvdmVyRm9ybU1lc3NhZ2Uuc2hvdygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25PcGVuU3RhdGVDaGFuZ2VkKGlzT3BlbjogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmlzT3BlbkNoYW5nZS5lbWl0KGlzT3Blbik7XG4gICAgICAgIHRoaXMuX2NoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5KCk7XG4gICAgICAgIC8vIGZvY3VzIGlucHV0IGNvbnRyb2wgZXZlcnkgdGltZSBwb3B1cCBpcyBjbG9zZWRcbiAgICAgICAgaWYgKCFpc09wZW4gJiYgdGhpcy5faW5wdXRFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cyh7XG4gICAgICAgICAgICAgICAgcHJldmVudFNjcm9sbDogdGhpcy5wcmV2ZW50U2Nyb2xsT25Gb2N1c1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZm9jdXMgY2FsZW5kYXIgY2VsbCBvbiBvcGVuaW5nXG4gICAgICAgIGlmIChpc09wZW4gJiYgdGhpcy5fY2FsZW5kYXJDb21wb25lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX2NhbGVuZGFyQ29tcG9uZW50LmluaXRpYWxGb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB0aGF0IHByb3ZpZGVzIGluZm9ybWF0aW9uIGlmIG1vZGVsIHNlbGVjdGVkIGRhdGUvZGF0ZXMgaGF2ZSBwcm9wZXJseSB0eXBlcyBhbmQgYXJlIHZhbGlkICovXG4gICAgaXNDdXJyZW50TW9kZWxWYWxpZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzTW9kZWxWYWxpZCh0aGlzLmRhdGUpO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdGhhdCBwcm92aWRlcyBpbmZvcm1hdGlvbiBpZiBGZERhdGVUaW1lIHBhc3NlZCBhcyBhcmcgaGFzIHByb3Blcmx5IHR5cGVzIGFuZCBpcyB2YWxpZCAqL1xuICAgIHByaXZhdGUgX2lzTW9kZWxWYWxpZChkYXRlOiBOdWxsYWJsZTxEPik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmlzVmFsaWQoZGF0ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2V0SW5wdXQoZGF0ZVRpbWU6IE51bGxhYmxlPEQ+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2lucHV0RmllbGREYXRlID0gZGF0ZVRpbWUgJiYgdGhpcy5faXNNb2RlbFZhbGlkID8gdGhpcy5fZm9ybWF0RGF0ZVRpbWUoZGF0ZVRpbWUpIDogJyc7XG4gICAgICAgIHRoaXMuX2NoYW5nZURldFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZWZyZXNoQ3VycmVudGx5RGlzcGxheWVkQ2FsZW5kYXJEYXRlKGRhdGU6IE51bGxhYmxlPEQ+KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9jYWxlbmRhckNvbXBvbmVudCkge1xuICAgICAgICAgICAgdGhpcy5fY2FsZW5kYXJDb21wb25lbnQuc2V0Q3VycmVudGx5RGlzcGxheWVkKGRhdGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEZvcm1hdCBkYXRlIHRpbWUgZW50aXR5LlxuICAgICAqL1xuICAgIHByaXZhdGUgX2Zvcm1hdERhdGVUaW1lKGRhdGVUaW1lOiBEKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkRGF0ZTogc3RyaW5nID0gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmZvcm1hdChcbiAgICAgICAgICAgIGRhdGVUaW1lLFxuICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVGb3JtYXRzLmRpc3BsYXkuZGF0ZVRpbWVJbnB1dFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gZm9ybWF0dGVkRGF0ZSB8fCAnJztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX0luaXRpYWxpc2VWYXJpYWJsZXNJbk1lc3NhZ2VTZXJ2aWNlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9wb3BvdmVyRm9ybU1lc3NhZ2UuaW5pdCh0aGlzLl9pbnB1dEdyb3VwRWxlbWVudCk7XG4gICAgICAgIHRoaXMuX3BvcG92ZXJGb3JtTWVzc2FnZS5tZXNzYWdlID0gdGhpcy5fbWVzc2FnZSA/PyAnJztcbiAgICAgICAgdGhpcy5fcG9wb3ZlckZvcm1NZXNzYWdlLnRyaWdnZXJzID0gdGhpcy5fbWVzc2FnZVRyaWdnZXJzO1xuICAgICAgICB0aGlzLl9wb3BvdmVyRm9ybU1lc3NhZ2UubWVzc2FnZVR5cGUgPSB0aGlzLl9zdGF0ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3BhcnNlRGF0ZShkYXRlOiB1bmtub3duKTogRCB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLnBhcnNlKGRhdGUsIHRoaXMuX2RhdGVUaW1lRm9ybWF0cy5wYXJzZS5kYXRlSW5wdXQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0VGVtcERhdGVUaW1lKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90ZW1wRGF0ZSA9IHRoaXMuZGF0ZTtcbiAgICAgICAgdGhpcy5fdGVtcFRpbWUgPSB0aGlzLmRhdGU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jYWxjdWxhdGVUaW1lT3B0aW9ucygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gdGhpcy5fZGF0ZVRpbWVGb3JtYXRzLmRpc3BsYXkuZGF0ZVRpbWVJbnB1dDtcblxuICAgICAgICAvLyBkZWZhdWx0IG1lcmlkaWFuIG9wdGlvbiBiYXNlZCBvbiBmb3JtYXQgb3B0aW9uXG4gICAgICAgIHRoaXMuX21lcmlkaWFuID1cbiAgICAgICAgICAgIHRoaXMubWVyaWRpYW4gIT0gbnVsbCA/IHRoaXMubWVyaWRpYW4gOiB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuaXNUaW1lRm9ybWF0SW5jbHVkZXNEYXlQZXJpb2QoZm9ybWF0KTtcblxuICAgICAgICAvLyBkZWZhdWx0IHNlY29uZHMgb3B0aW9uIGJhc2VkIG9uIGZvcm1hdCBvcHRpb25cbiAgICAgICAgdGhpcy5fZGlzcGxheVNlY29uZHMgPVxuICAgICAgICAgICAgdGhpcy5kaXNwbGF5U2Vjb25kcyAhPSBudWxsXG4gICAgICAgICAgICAgICAgPyB0aGlzLmRpc3BsYXlTZWNvbmRzXG4gICAgICAgICAgICAgICAgOiB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuaXNUaW1lRm9ybWF0SW5jbHVkZXNTZWNvbmRzKGZvcm1hdCk7XG5cbiAgICAgICAgLy8gZGVmYXVsdCBtaW51dGVzIG9wdGlvbiBiYXNlZCBvbiBmb3JtYXQgb3B0aW9uXG4gICAgICAgIHRoaXMuX2Rpc3BsYXlNaW51dGVzID1cbiAgICAgICAgICAgIHRoaXMuZGlzcGxheU1pbnV0ZXMgIT0gbnVsbFxuICAgICAgICAgICAgICAgID8gdGhpcy5kaXNwbGF5TWludXRlc1xuICAgICAgICAgICAgICAgIDogdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmlzVGltZUZvcm1hdEluY2x1ZGVzTWludXRlcyhmb3JtYXQpO1xuXG4gICAgICAgIC8vIGRlZmF1bHQgaG91cnMgb3B0aW9uIGJhc2VkIG9uIGZvcm1hdCBvcHRpb25cbiAgICAgICAgdGhpcy5fZGlzcGxheUhvdXJzID1cbiAgICAgICAgICAgIHRoaXMuZGlzcGxheUhvdXJzICE9IG51bGwgPyB0aGlzLmRpc3BsYXlIb3VycyA6IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5pc1RpbWVGb3JtYXRJbmNsdWRlc0hvdXJzKGZvcm1hdCk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZkLWRhdGV0aW1lXCI+XG4gICAgPGZkLXBvcG92ZXJcbiAgICAgICAgWyhpc09wZW4pXT1cImlzT3BlblwiXG4gICAgICAgIChpc09wZW5DaGFuZ2UpPVwiX29uT3BlblN0YXRlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgW2ZvY3VzVHJhcHBlZF09XCJ0cnVlXCJcbiAgICAgICAgW2ZvY3VzQXV0b0NhcHR1cmVdPVwiZmFsc2VcIlxuICAgICAgICBbdHJpZ2dlcnNdPVwiW11cIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICBbcGxhY2VtZW50XT1cInBsYWNlbWVudFwiXG4gICAgICAgIFthcHBlbmRUb109XCJhcHBlbmRUb1wiXG4gICAgPlxuICAgICAgICA8ZmQtcG9wb3Zlci1jb250cm9sPlxuICAgICAgICAgICAgPGZkLWlucHV0LWdyb3VwXG4gICAgICAgICAgICAgICAgI2lucHV0R3JvdXBDb21wb25lbnRcbiAgICAgICAgICAgICAgICBbc3RhdGVdPVwic3RhdGVcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgW2lzQ29udHJvbF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbYnV0dG9uXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtidXR0b25Gb2N1c2FibGVdPVwiYnV0dG9uRm9jdXNhYmxlXCJcbiAgICAgICAgICAgICAgICBnbHlwaD1cImRhdGUtdGltZVwiXG4gICAgICAgICAgICAgICAgW2lzRXhwYW5kZWRdPVwiaXNPcGVuXCJcbiAgICAgICAgICAgICAgICBbZ2x5cGhBcmlhTGFiZWxdPVwiZGlzcGxheURhdGV0aW1lVG9nZ2xlTGFiZWxcIlxuICAgICAgICAgICAgICAgIFtpY29uVGl0bGVdPVwiZGlzcGxheURhdGV0aW1lVG9nZ2xlTGFiZWxcIlxuICAgICAgICAgICAgICAgIChhZGRPbkJ1dHRvbkNsaWNrZWQpPVwidG9nZ2xlUG9wb3ZlcigpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgZmQtaW5wdXQtZ3JvdXAtaW5wdXRcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWwgfHwgZGF0ZXRpbWVJbnB1dExhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImFyaWFMYWJlbGxlZEJ5XCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuaWRdPVwiaW5wdXRJZFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJfaW5wdXRGaWVsZERhdGVcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiaGFuZGxlSW5wdXRDaGFuZ2UoJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSwgZmFsc2UpXCJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiaGFuZGxlSW5wdXRDaGFuZ2UoJGV2ZW50LCB0cnVlKVwiXG4gICAgICAgICAgICAgICAgICAgIChibHVyKT1cImhhbmRsZU9uVG91Y2hlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9mZC1pbnB1dC1ncm91cD5cbiAgICAgICAgPC9mZC1wb3BvdmVyLWNvbnRyb2w+XG4gICAgICAgIDxmZC1wb3BvdmVyLWJvZHlcbiAgICAgICAgICAgIGFyaWEtbGFiZWxsZWRieT1cImZkLWZvcm0tbWVzc2FnZVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImlzT3BlblwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWhpZGRlbl09XCIhaXNPcGVuXCJcbiAgICAgICAgICAgIFtzdHlsZS5kaXNwbGF5XT1cIidibG9jaydcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtcG9wb3Zlcl9fd3JhcHBlciBmZC1kYXRldGltZV9fd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmZC1kYXRldGltZV9fZGlzcGxheS10eXBlLXN3aXRjaGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxmZC1zZWdtZW50ZWQtYnV0dG9uIFsobmdNb2RlbCldPVwiX2Rpc3BsYXlUeXBlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGZkLWJ1dHRvbiBbbGFiZWxdPVwiZGlzcGxheVR5cGVEYXRlTGFiZWxcIiB2YWx1ZT1cImRhdGVcIj48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gZmQtYnV0dG9uIFtsYWJlbF09XCJkaXNwbGF5VHlwZVRpbWVMYWJlbFwiIHZhbHVlPVwidGltZVwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2ZkLXNlZ21lbnRlZC1idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGZkLWZvcm0tbWVzc2FnZSBpZD1cImZkLWZvcm0tbWVzc2FnZVwiIFtlbWJlZGRlZF09XCJ0cnVlXCIgKm5nSWY9XCJfbWVzc2FnZVwiIFt0eXBlXT1cInN0YXRlXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IF9tZXNzYWdlIH19XG4gICAgICAgICAgICAgICAgPC9mZC1mb3JtLW1lc3NhZ2U+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmZC1kYXRldGltZV9fY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxmZC1jYWxlbmRhclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZkLWRhdGV0aW1lX19hY3RpdmUtZGlzcGxheS10eXBlXT1cIl9kaXNwbGF5VHlwZSA9PT0gJ2RhdGUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbFR5cGU9XCJzaW5nbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZVZpZXddPVwiYWN0aXZlVmlld1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZUZ1bmN0aW9uXT1cImRpc2FibGVGdW5jdGlvbiB8fCBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZERhdGVdPVwiX3RlbXBEYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtlc2NhcGVGb2N1c0Z1bmN0aW9uXT1cIm51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21hcmtXZWVrZW5kc109XCJtYXJrV2Vla2VuZHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NwZWNpYWxEYXlzUnVsZXNdPVwic3BlY2lhbERheXNSdWxlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1dlZWtOdW1iZXJzXT1cInNob3dXZWVrTnVtYmVyc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYWdncmVnYXRlZFllYXJHcmlkXT1cImFnZ3JlZ2F0ZWRZZWFyR3JpZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbeWVhckdyaWRdPVwieWVhckdyaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0YXJ0aW5nRGF5T2ZXZWVrXT1cInN0YXJ0aW5nRGF5T2ZXZWVrXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChhY3RpdmVWaWV3Q2hhbmdlKT1cImhhbmRsZUNhbGVuZGFyQWN0aXZlVmlld0NoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3RlZERhdGVDaGFuZ2UpPVwiaGFuZGxlRGF0ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChpc1ZhbGlkRGF0ZUNoYW5nZSk9XCJzZXRJbnZhbGlkRGF0ZUlucHV0SGFuZGxlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvZmQtY2FsZW5kYXI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmZC1kYXRldGltZV9fc2VwYXJhdG9yXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxmZC10aW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImlzT3BlblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmQtZGF0ZXRpbWVfX2FjdGl2ZS1kaXNwbGF5LXR5cGVdPVwiX2Rpc3BsYXlUeXBlID09PSAndGltZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtlbGVtZW50c0F0T25jZV09XCI1XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtrZWVwVHdvRGlnaXRzXT1cImtlZXBUd29EaWdpdHNUaW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIl90ZW1wVGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3Bpbm5lckJ1dHRvbnNdPVwic3Bpbm5lckJ1dHRvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21lcmlkaWFuXT1cIl9tZXJpZGlhblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzcGxheVNlY29uZHNdPVwiX2Rpc3BsYXlTZWNvbmRzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNwbGF5TWludXRlc109XCJfZGlzcGxheU1pbnV0ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc3BsYXlIb3Vyc109XCJfZGlzcGxheUhvdXJzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImhhbmRsZVRpbWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgID48L2ZkLXRpbWU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBmZC1wb3BvdmVyLWJvZHktZm9vdGVyICpuZ0lmPVwic2hvd0Zvb3RlclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGZkLWJhciBiYXJEZXNpZ249XCJmb290ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZmQtYmFyLXJpZ2h0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1iYXItZWxlbWVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZFR5cGU9XCJlbXBoYXNpemVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJva0xhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcmlhTGFiZWxdPVwib2tMYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic3VibWl0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mZC1iYXItZWxlbWVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmQtYmFyLWVsZW1lbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImNhbmNlbExhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcmlhTGFiZWxdPVwiY2FuY2VsTGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbmNlbCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmQtYmFyLWVsZW1lbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9mZC1wb3BvdmVyLWJvZHk+XG4gICAgPC9mZC1wb3BvdmVyPlxuPC9kaXY+XG4iXX0=
|
|
665
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUtcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2RhdGV0aW1lLXBpY2tlci9kYXRldGltZS1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZGF0ZXRpbWUtcGlja2VyL2RhdGV0aW1lLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFJTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixhQUFhLEVBQUUsaUJBQWlCLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRyxPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR25ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQW1CLE1BQU0sZ0NBQWdDLENBQUM7QUFDckcsT0FBTyxFQUFFLGlCQUFpQixFQUFnRCxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pILE9BQU8sRUFBbUIseUJBQXlCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNqSCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDL0QsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFN0UsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxxQkFBcUIsRUFB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TTtnQkFLUyxnQkFBZ0I7c0JBRC9CLE1BQU07Z0JBS0UsVUFBVTtzQkFEbEIsTUFBTTtnQkFLRSxjQUFjO3NCQUR0QixNQUFNO2dCQUtFLFVBQVU7c0JBRGxCLE1BQU07Z0JBTUUsT0FBTztzQkFGZixNQUFNO2dCQU1FLE9BQU87c0JBRGYsTUFBTTtnQkFVUCxrQkFBa0I7c0JBRGpCLFNBQVM7dUJBQUMsaUJBQWlCO2dCQUs1QixrQkFBa0I7c0JBRGpCLFNBQVM7dUJBQUMscUJBQXFCLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUt0RCxhQUFhO3NCQURaLFNBQVM7dUJBQUMsd0JBQXdCLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQXNEekQsZUFBZTtzQkFEZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SLCBWYWxpZGF0b3IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBGb3JtU3RhdGVzLCBOdWxsYWJsZSwgUGxhY2VtZW50LCBTcGVjaWFsRGF5UnVsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9zaGFyZWQnO1xuaW1wb3J0IHsgREFURV9USU1FX0ZPUk1BVFMsIERhdGV0aW1lQWRhcHRlciwgRGF0ZVRpbWVGb3JtYXRzIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2RhdGV0aW1lJztcbmltcG9ydCB7IENhbGVuZGFyQ29tcG9uZW50LCBDYWxlbmRhclllYXJHcmlkLCBEYXlzT2ZXZWVrLCBGZENhbGVuZGFyVmlldyB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9jYWxlbmRhcic7XG5pbXBvcnQgeyBGb3JtSXRlbUNvbnRyb2wsIFBvcG92ZXJGb3JtTWVzc2FnZVNlcnZpY2UsIHJlZ2lzdGVyRm9ybUl0ZW1Db250cm9sIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Zvcm0nO1xuaW1wb3J0IHsgUG9wb3ZlclNlcnZpY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvcG9wb3Zlcic7XG5pbXBvcnQgeyBJbnB1dEdyb3VwSW5wdXREaXJlY3RpdmUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvaW5wdXQtZ3JvdXAnO1xuXG5pbXBvcnQgeyBjcmVhdGVNaXNzaW5nRGF0ZUltcGxlbWVudGF0aW9uRXJyb3IgfSBmcm9tICcuL2Vycm9ycyc7XG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuXG4vKipcbiAqIFRoZSBkYXRldGltZSBwaWNrZXIgY29tcG9uZW50IGlzIGFuIG9waW5pb25hdGVkIGNvbXBvc2l0aW9uIG9mIHRoZSBmZC1wb3BvdmVyLFxuICogZmQtY2FsZW5kYXIgYW5kIGZkLXRpbWUgY29tcG9uZW50cyB0byBhY2NvbXBsaXNoIHRoZSBVSSBwYXR0ZXJuIGZvciBwaWNraW5nIGEgZGF0ZSBhbmQgdGltZS5cbiAqIFN1cHBvcnRzIEFuZ3VsYXIgRm9ybXMuXG4gKiBgYGBodG1sXG4gKiA8ZmQtZGF0ZS10aW1lLXBpY2tlciBbKG5nTW9kZWwpXT1cImRhdGVUaW1lXCI+PC9mZC1kYXRlLXRpbWUtcGlja2VyPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmQtZGF0ZXRpbWUtcGlja2VyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZGF0ZXRpbWUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9kYXRldGltZS1waWNrZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgICBob3N0OiB7XG4gICAgICAgICcoYmx1ciknOiAnaGFuZGxlT25Ub3VjaGVkKCknXG4gICAgfSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRldGltZVBpY2tlckNvbXBvbmVudCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGF0ZXRpbWVQaWNrZXJDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgcmVnaXN0ZXJGb3JtSXRlbUNvbnRyb2woRGF0ZXRpbWVQaWNrZXJDb21wb25lbnQpLFxuICAgICAgICBQb3BvdmVyRm9ybU1lc3NhZ2VTZXJ2aWNlLFxuICAgICAgICBQb3BvdmVyU2VydmljZVxuICAgIF0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBEYXRldGltZVBpY2tlckNvbXBvbmVudDxEPlxuICAgIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciwgRm9ybUl0ZW1Db250cm9sXG57XG4gICAgLyoqIFBsYWNlaG9sZGVyIGZvciB0aGUgaW5uZXIgaW5wdXQgZWxlbWVudC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHBsYWNlaG9sZGVyID0gJyc7XG5cbiAgICAvKipcbiAgICAgKiAgVGhlIHBsYWNlbWVudCBvZiB0aGUgcG9wb3Zlci4gSXQgY2FuIGJlIG9uZSBvZjogdG9wLCB0b3Atc3RhcnQsIHRvcC1lbmQsIGJvdHRvbSxcbiAgICAgKiAgYm90dG9tLXN0YXJ0LCBib3R0b20tZW5kLCByaWdodCwgcmlnaHQtc3RhcnQsIHJpZ2h0LWVuZCwgbGVmdCwgbGVmdC1zdGFydCwgbGVmdC1lbmQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwbGFjZW1lbnQ6IFBsYWNlbWVudCA9ICdib3R0b20tc3RhcnQnO1xuXG4gICAgLyoqIFRoZSBlbGVtZW50IHRvIHdoaWNoIHRoZSBwb3BvdmVyIHNob3VsZCBiZSBhcHBlbmRlZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFwcGVuZFRvOiBFbGVtZW50UmVmO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc2FibGVkOiBib29sZWFuO1xuXG4gICAgLyoqIElkIGF0dHJpYnV0ZSBmb3IgaW5wdXQgZWxlbWVudCBpbnNpZGUgRGF0ZVRpbWVQaWNrZXIgY29tcG9uZW50ICovXG4gICAgQElucHV0KClcbiAgICBpbnB1dElkOiBzdHJpbmc7XG5cbiAgICAvKiogSWYgaXQgaXMgbWFuZGF0b3J5IGZpZWxkICovXG4gICAgQElucHV0KClcbiAgICByZXF1aXJlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgdGltZSBjb21wb25lbnQgc2hvdWxkIGJlIG1lcmlkaWFuIChhbS9wbSkuXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBiYXNlZCBvbiB0aGUgY3VycmVudCBsb2NhbGUgZm9ybWF0IG9wdGlvblxuICAgICAqICovXG4gICAgQElucHV0KClcbiAgICBtZXJpZGlhbjogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHRpbWUgY29tcG9uZW50IHNob3dzIHNlY29uZHMuXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBiYXNlZCBvbiB0aGUgY3VycmVudCBsb2NhbGUgZm9ybWF0IG9wdGlvblxuICAgICAqICovXG4gICAgQElucHV0KClcbiAgICBkaXNwbGF5U2Vjb25kczogYm9vbGVhbjtcblxuICAgIC8qKiBhcmlhLWxhYmVsIGZvciB0aGUgZGF0ZS1waWNrZXIuICovXG4gICAgQElucHV0KClcbiAgICBhcmlhTGFiZWw6IE51bGxhYmxlPHN0cmluZz47XG5cbiAgICAvKiogYXJpYS1sYWJlbGxlZGJ5IGZvciBlbGVtZW50IGRlc2NyaWJpbmcgZGF0ZS1waWNrZXIuICovXG4gICAgQElucHV0KClcbiAgICBhcmlhTGFiZWxsZWRCeTogTnVsbGFibGU8c3RyaW5nPjtcblxuICAgIC8qKiBUZXh0IGRpc3BsYXllZCBpbiBtZXNzYWdlICovXG4gICAgQElucHV0KClcbiAgICBzZXQgbWVzc2FnZShtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fbWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICAgIHRoaXMuX3BvcG92ZXJGb3JtTWVzc2FnZS5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9tZXNzYWdlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBUaGUgdHJpZ2dlciBldmVudHMgdGhhdCB3aWxsIG9wZW4vY2xvc2UgdGhlIG1lc3NhZ2UgYm94LlxuICAgICAqICBBY2NlcHRzIGFueSBbSFRNTCBET00gRXZlbnRzXShodHRwczovL3d3dy53M3NjaG9vbHMuY29tL2pzcmVmL2RvbV9vYmpfZXZlbnQuYXNwKS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBtZXNzYWdlVHJpZ2dlcnModHJpZ2dlcnM6IHN0cmluZ1tdKSB7XG4gICAgICAgIHRoaXMuX21lc3NhZ2VUcmlnZ2VycyA9IHRyaWdnZXJzO1xuICAgICAgICB0aGlzLl9wb3BvdmVyRm9ybU1lc3NhZ2UudHJpZ2dlcnMgPSB0cmlnZ2VycztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9tZXNzYWdlVHJpZ2dlcnM6IHN0cmluZ1tdID0gWydmb2N1c2luJywgJ2ZvY3Vzb3V0J107XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSB0aW1lIGNvbXBvbmVudCBzaG93cyBtaW51dGVzLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYmFzZWQgb24gdGhlIGN1cnJlbnQgbG9jYWxlIGZvcm1hdCBvcHRpb25cbiAgICAgKiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzcGxheU1pbnV0ZXM6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSB0aW1lIGNvbXBvbmVudCBzaG93cyBob3Vycy5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGJhc2VkIG9uIHRoZSBjdXJyZW50IGxvY2FsZSBmb3JtYXQgb3B0aW9uXG4gICAgICogKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc3BsYXlIb3VyczogYm9vbGVhbjtcblxuICAgIC8qKiBXaGV0aGVyIHRvIHBlcmZvcm0gdmlzdWFsIHZhbGlkYXRpb24gb24gdGhlIHBpY2tlciBpbnB1dC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHVzZVZhbGlkYXRpb24gPSB0cnVlO1xuXG4gICAgLyoqIEN1cnJlbnQgc2VsZWN0ZWQgZGF0ZS4gVHdvLXdheSBiaW5kaW5nIGlzIHN1cHBvcnRlZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGRhdGU6IE51bGxhYmxlPEQ+O1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIHBvcG92ZXIgaXMgb3Blbi4gVHdvLXdheSBiaW5kaW5nIGlzIHN1cHBvcnRlZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGlzT3BlbiA9IGZhbHNlO1xuXG4gICAgLyoqIFRoZSBkaXNhYmxlRnVuY3Rpb24gZm9yIHRoZSBjYWxlbmRhci4gKi9cbiAgICBASW5wdXQoKVxuICAgIHN0YXJ0aW5nRGF5T2ZXZWVrOiBEYXlzT2ZXZWVrID0gMTtcblxuICAgIC8qKiBBY3R1YWxseSBzaG93biBhY3RpdmUgdmlldyBvbmUgb2YgJ2RheScgfCAnbW9udGgnIHwgJ3llYXInIGluIGNhbGVuZGFyIGNvbXBvbmVudCovXG4gICAgQElucHV0KClcbiAgICBhY3RpdmVWaWV3OiBGZENhbGVuZGFyVmlldyA9ICdkYXknO1xuXG4gICAgLyoqIEFyaWEgbGFiZWwgZm9yIHRoZSBkYXRldGltZSBwaWNrZXIgaW5wdXQuICovXG4gICAgQElucHV0KClcbiAgICBkYXRldGltZUlucHV0TGFiZWwgPSAnRGF0ZXRpbWUgaW5wdXQnO1xuXG4gICAgLyoqIEFyaWEgbGFiZWwgZm9yIHRoZSBidXR0b24gdG8gc2hvdy9oaWRlIHRoZSBjYWxlbmRhci4gKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc3BsYXlEYXRldGltZVRvZ2dsZUxhYmVsID0gJ0Rpc3BsYXkgY2FsZW5kYXIgdG9nZ2xlJztcblxuICAgIC8qKiBMYWJlbCBmb3IgdGhlIFwiRGF0ZVwiIGJ1dHRvbiBpbiBkaXNwbGF5IHR5cGUgc3dpdGNoZXIgaW4gbW9iaWxlIG1vZGUgKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc3BsYXlUeXBlRGF0ZUxhYmVsID0gJ0RhdGUnO1xuXG4gICAgLyoqIExhYmVsIGZvciB0aGUgXCJUaW1lXCIgYnV0dG9uIGluIGRpc3BsYXkgdHlwZSBzd2l0Y2hlciBpbiBtb2JpbGUgbW9kZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzcGxheVR5cGVUaW1lTGFiZWwgPSAnVGltZSc7XG5cbiAgICAvKiogV2hldGhlciBhIG51bGwgaW5wdXQgaXMgY29uc2lkZXJlZCB2YWxpZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFsbG93TnVsbCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBASW5wdXQgd2hlbiBzZXQgdG8gdHJ1ZSB0aW1lIGNvbXBvbmVudCB3aWxsIHVzZSAyIGRpZ2l0cyBmb3IgZWFjaCBudW1iZXIuXG4gICAgICogRm9yIGV4YW1wbGUgOSB3aWxsIGJlY29tZSAwOVxuICAgICAqIGJ1dCAxMiB3aWxsIGJlIGtlcHQgYXMgMTIuXG4gICAgICogT25seSB1c2VzIGJ5IHRpbWUgY29tcG9uZW50IGFuZCBkb2VzIG5vdCBjaGFuZ2UgaW5wdXQgZm9ybWF0XG4gICAgICovXG4gICAgQElucHV0KCkga2VlcFR3b0RpZ2l0c1RpbWUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqICBUaGUgc3RhdGUgb2YgdGhlIGZvcm0gY29udHJvbCAtIGFwcGxpZXMgY3NzIGNsYXNzZXMuXG4gICAgICogIEFsc28gdGhpcyBpcyBhcHBsaWVkIHRvIG1lc3NhZ2UuXG4gICAgICogIENhbiBiZSBgc3VjY2Vzc2AsIGBlcnJvcmAsIGB3YXJuaW5nYCwgYGluZm9ybWF0aW9uYCBvciBibGFuayBmb3IgZGVmYXVsdC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzdGF0ZShzdGF0ZTogRm9ybVN0YXRlcykge1xuICAgICAgICB0aGlzLl9zdGF0ZSA9IHN0YXRlO1xuICAgICAgICB0aGlzLl9wb3BvdmVyRm9ybU1lc3NhZ2UubWVzc2FnZVR5cGUgPSBzdGF0ZTtcbiAgICB9XG5cbiAgICBnZXQgc3RhdGUoKTogRm9ybVN0YXRlcyB7XG4gICAgICAgIGlmICh0aGlzLnVzZVZhbGlkYXRpb24gJiYgdGhpcy5pc0ludmFsaWREYXRlSW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAnZXJyb3InO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3N0YXRlOiBGb3JtU3RhdGVzID0gJ2RlZmF1bHQnO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBBZGRPbiBCdXR0b24gc2hvdWxkIGJlIGZvY3VzYWJsZVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGJ1dHRvbkZvY3VzYWJsZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWFsIGRheXMgbWFyaywgaXQgY2FuIGJlIHVzZWQgYnkgcGFzc2luZyBhcnJheSBvZiBvYmplY3Qgd2l0aFxuICAgICAqIFNwZWNpYWwgZGF5IG51bWJlciwgbGlzdCAxLTIwIFtjbGFzczpgZmQtY2FsZW5kYXJfX3NwZWNpYWwtZGF5LS17e251bWJlcn19YF0gaXMgYXZhaWxhYmxlIHRoZXJlOlxuICAgICAqIGh0dHBzOi8vc2FwLmdpdGh1Yi5pby9mdW5kYW1lbnRhbC1zdHlsZXMvY29tcG9uZW50cy9jYWxlbmRhci5odG1sIGNhbGVuZGFyIHNwZWNpYWwgZGF5cyBzZWN0aW9uXG4gICAgICogUnVsZSBhY2NlcHRzIG1ldGhvZCB3aXRoIEZkRGF0ZSBvYmplY3QgYXMgYSBwYXJhbWV0ZXIuIGV4OlxuICAgICAqIGBydWxlOiAoZmREYXRlOiBGZERhdGUpID0+IGZkRGF0ZS5nZXREYXkoKSA9PT0gMWAsIHdoaWNoIHdpbGwgbWFyayBhbGwgc3VuZGF5cyBhcyBzcGVjaWFsIGRheS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNwZWNpYWxEYXlzUnVsZXM6IFNwZWNpYWxEYXlSdWxlPEQ+W10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIE9iamVjdCB0byBjdXN0b21pemUgeWVhciBncmlkLFxuICAgICAqIFJvdywgQ29sdW1ucyBhbmQgbWV0aG9kIHRvIGRpc3BsYXkgeWVhciBjYW4gYmUgbW9kaWZpZWRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHllYXJHcmlkOiBDYWxlbmRhclllYXJHcmlkID0ge1xuICAgICAgICByb3dzOiA0LFxuICAgICAgICBjb2xzOiA1XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIE9iamVjdCB0byBjdXN0b21pemUgYWdncmVnYXRlZCB5ZWFyIGdyaWQsXG4gICAgICogUm93LCBDb2x1bW5zIGFuZCBtZXRob2QgdG8gZGlzcGxheSB5ZWFyIGNhbiBiZSBtb2RpZmllZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgYWdncmVnYXRlZFllYXJHcmlkOiBDYWxlbmRhclllYXJHcmlkID0ge1xuICAgICAgICByb3dzOiA0LFxuICAgICAgICBjb2xzOiAzXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdXNlciB3YW50cyB0byBtYXJrIHN1bmRheS9zYXR1cmRheSB3aXRoIGBmZC1jYWxlbmRhcl9faXRlbS0td2Vla2VuZGAgY2xhc3NcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIG1hcmtXZWVrZW5kcyA9IHRydWU7XG5cbiAgICAvKiogQElucHV0IFdoZXRoZXIgdG8gc2hvdyBzcGlubmVyIGJ1dHRvbnMgKi9cbiAgICBASW5wdXQoKVxuICAgIHNwaW5uZXJCdXR0b25zID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdXNlciB3YW50cyB0byBzaG93IHdlZWsgbnVtYmVycyBuZXh0IHRvIGRheXNcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNob3dXZWVrTnVtYmVycyA9IHRydWU7XG5cbiAgICAvKiogV2hldGhlciBvciBub3QgdG8gc2hvdyB0aGUgZGF0ZXRpbWUgcGlja2VyIGZvb3RlciB3aXRoIE9LL2NhbmNlbCBidXR0b25zLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd0Zvb3RlciA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIHJlY2FsY3VsYXRlIHZhbHVlIGZyb20gdGhlIGlucHV0IGFzIHVzZXIgdHlwZXMgb3Igb24gYmx1ci5cbiAgICAgKiBCeSBkZWZhdWx0LCB1cGRhdGVzIHRoZSB2YWx1ZSBhcyB1c2VyIHR5cGVzLlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgcHJvY2Vzc0lucHV0T25CbHVyKHY6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fcHJvY2Vzc0lucHV0T25CbHVyID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHYpO1xuICAgIH1cblxuICAgIGdldCBwcm9jZXNzSW5wdXRPbkJsdXIoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9jZXNzSW5wdXRPbkJsdXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBwcmV2ZW50IHBhZ2Ugc2Nyb2xsaW5nIHdoZW4gZm9jdXNpbmcgZGF0ZSBwaWNrZXIgaW5wdXQgZmllbGQgYWZ0ZXIgY2FsZW5kYXIgaGFzIGJlZW4gY2xvc2VkLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHJldmVudFNjcm9sbE9uRm9jdXMgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRleHQgYW5kIGFyaWEtbGFiZWwgb2YgdGhlIERhdGVUaW1lUGlja2VyICdPSycgYnV0dG9uLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgb2tMYWJlbCA9ICdPSyc7XG5cbiAgICAvKipcbiAgICAgKiBUZXh0IGFuZCBhcmlhLWxhYmVsIG9mIHRoZSBEYXRlVGltZVBpY2tlciAnQ2FuY2VsJyBidXR0b24uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBjYW5jZWxMYWJlbCA9ICdDYW5jZWwnO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfcHJvY2Vzc0lucHV0T25CbHVyID0gZmFsc2U7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBzdGF0ZSBvZiB0aGUgaXNPcGVuIHByb3BlcnR5IGNoYW5nZXMuICovXG4gICAgQE91dHB1dCgpXG4gICAgaXNPcGVuQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgLyoqIEV2ZW50IHRocm93biBldmVyeSB0aW1lIGNhbGVuZGFyIGFjdGl2ZSB2aWV3IGlzIGNoYW5nZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcmVhZG9ubHkgYWN0aXZlVmlld0NoYW5nZTogRXZlbnRFbWl0dGVyPEZkQ2FsZW5kYXJWaWV3PiA9IG5ldyBFdmVudEVtaXR0ZXI8RmRDYWxlbmRhclZpZXc+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBkYXRlIGNoYW5nZXMuIFRoaXMgY2FuIGJlIGEgdGltZSBvciBkYXkgY2hhbmdlLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IGRhdGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxEPiA9IG5ldyBFdmVudEVtaXR0ZXI8RD4oKTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGRheSBjaGFuZ2VzIGZyb20gdGhlIGNhbGVuZGFyLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IGNhbGVuZGFyQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RD4gPSBuZXcgRXZlbnRFbWl0dGVyPEQ+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSB0aW1lIGNoYW5nZXMgZnJvbSB0aGUgdGltZSBjb21wb25lbnQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgdGltZUNoYW5nZTogRXZlbnRFbWl0dGVyPEQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxEPigpO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiBwb3BvdmVyIGNsb3Nlcy4gKi9cbiAgICBAT3V0cHV0KClcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1vbi1wcmVmaXhcbiAgICByZWFkb25seSBvbkNsb3NlOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIGRhdGVwaWNrZXIgY2hhbmdlcyBpdCdzIFwidG91Y2hlZFwiIHN0YXRlLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHRvdWNoZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKiBJbmRpY2F0ZXMgd2hlbiBkYXRldGltZSBpbnB1dCBpcyBpbiBpbnZhbGlkIHN0YXRlLiAqL1xuICAgIGdldCBpc0ludmFsaWREYXRlSW5wdXQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0ludmFsaWREYXRlSW5wdXQgJiYgdGhpcy5fdG91Y2hlZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBSZWZlcmVuY2UgdG8gdGhlIGlubmVyIGNhbGVuZGFyIGNvbXBvbmVudC4gKi9cbiAgICBAVmlld0NoaWxkKENhbGVuZGFyQ29tcG9uZW50KVxuICAgIF9jYWxlbmRhckNvbXBvbmVudDogQ2FsZW5kYXJDb21wb25lbnQ8RD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2lucHV0R3JvdXBDb21wb25lbnQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBfaW5wdXRHcm91cEVsZW1lbnQ6IEVsZW1lbnRSZWY7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoSW5wdXRHcm91cElucHV0RGlyZWN0aXZlLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBfaW5wdXRFbGVtZW50OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIERhdGUgb2YgdGhlIGlucHV0IGZpZWxkLiBJbnRlcm5hbCB1c2UuXG4gICAgICogRm9yIHByb2dyYW1tYXRpYyBzZWxlY3Rpb24sIHVzZSB0d28td2F5IGJpbmRpbmcgb24gdGhlIGRhdGUgaW5wdXQuXG4gICAgICovXG4gICAgX2lucHV0RmllbGREYXRlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2lzSW52YWxpZERhdGVJbnB1dCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gVGhlIHRlbXBvcmFyeSBUaW1lIG9iamVjdCBmb3IgdXNlIGJlZm9yZSAnT0snIGlzIHByZXNzZWQuIEludGVybmFsIHVzZS4gKi9cbiAgICBfdGVtcFRpbWU6IE51bGxhYmxlPEQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gVGhlIHRlbXBvcmFyeSBDYWxlbmRhckRheSBvYmplY3QgZm9yIHVzZSBiZWZvcmUgJ09LJyBpcyBwcmVzc2VkLiBJbnRlcm5hbCB1c2UuICovXG4gICAgX3RlbXBEYXRlOiBOdWxsYWJsZTxEPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX21lcmlkaWFuOiBib29sZWFuO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZGlzcGxheVNlY29uZHM6IGJvb2xlYW47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9kaXNwbGF5TWludXRlczogYm9vbGVhbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2Rpc3BsYXlIb3VyczogYm9vbGVhbjtcblxuICAgIC8qKiBAaGlkZGVuIHdoZXRoZXIgdG8gZGlzcGxheSBkYXRlIG9yIHRpbWUgaW4gbW9iaWxlIG1vZGUgKi9cbiAgICBfZGlzcGxheVR5cGU6ICdkYXRlJyB8ICd0aW1lJyA9ICdkYXRlJztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfb25EZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3RvdWNoZWQgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25DaGFuZ2U6ICh2YWx1ZTogRCB8IG51bGwpID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25Ub3VjaGVkID0gKCk6IHZvaWQgPT4ge307XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB1c2VkIHRvIGRpc2FibGUgY2VydGFpbiBkYXRlcyBpbiB0aGUgY2FsZW5kYXIuXG4gICAgICogQHBhcmFtIGZkRGF0ZSBGZERhdGVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc2FibGVGdW5jdGlvbjogKHZhbHVlOiBEKSA9PiBib29sZWFuID0gKCkgPT4gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF9lbFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSBfY2hhbmdlRGV0UmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgLy8gVXNlIEBPcHRpb25hbCB0byBhdm9pZCBhbmd1bGFyIGluamVjdGlvbiBlcnJvciBtZXNzYWdlIGFuZCB0aHJvdyBvdXIgb3duIHdoaWNoIGlzIG1vcmUgcHJlY2lzZSBvbmVcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfZGF0ZVRpbWVBZGFwdGVyOiBEYXRldGltZUFkYXB0ZXI8RD4sXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoREFURV9USU1FX0ZPUk1BVFMpIHByaXZhdGUgX2RhdGVUaW1lRm9ybWF0czogRGF0ZVRpbWVGb3JtYXRzLFxuICAgICAgICBwcml2YXRlIF9wb3BvdmVyRm9ybU1lc3NhZ2U6IFBvcG92ZXJGb3JtTWVzc2FnZVNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgaWYgKCF0aGlzLl9kYXRlVGltZUFkYXB0ZXIpIHtcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZU1pc3NpbmdEYXRlSW1wbGVtZW50YXRpb25FcnJvcignRGF0ZVRpbWVBZGFwdGVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl9kYXRlVGltZUZvcm1hdHMpIHtcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZU1pc3NpbmdEYXRlSW1wbGVtZW50YXRpb25FcnJvcignREFURV9USU1FX0ZPUk1BVFMnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGRlZmF1bHQgbW9kZWwgdmFsdWVcbiAgICAgICAgdGhpcy5kYXRlID0gX2RhdGVUaW1lQWRhcHRlci5ub3coKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXMuZGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5fc2V0VGVtcERhdGVUaW1lKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoWydkaXNwbGF5SG91cnMnLCAnZGlzcGxheU1pbnV0ZXMnLCAnZGlzcGxheVNlY29uZHMnLCAnbWVyaWRpYW4nXS5zb21lKChpbnB1dCkgPT4gaW5wdXQgaW4gY2hhbmdlcykpIHtcbiAgICAgICAgICAgIHRoaXMuX2NhbGN1bGF0ZVRpbWVPcHRpb25zKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kYXRlKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRUZW1wRGF0ZVRpbWUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZVRpbWVPcHRpb25zKCk7XG5cbiAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmxvY2FsZUNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5faW5wdXRGaWVsZERhdGUgIT09ICcnKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0SW5wdXQodGhpcy5kYXRlKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWxjdWxhdGVUaW1lT3B0aW9ucygpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX0luaXRpYWxpc2VWYXJpYWJsZXNJbk1lc3NhZ2VTZXJ2aWNlKCk7XG4gICAgICAgIC8vIHVwZGF0ZSBiaW5kaW5ncyBhZnRlciByZW5kZXJpbmdcbiAgICAgICAgLy8gaXMgbmVlZGVkIHRvIHByZXBlcmx5IHJlZmxlY3QgZXJyb3Igc3RhdGVcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBGdW5jdGlvbiB0aGF0IGltcGxlbWVudHMgVmFsaWRhdG9yIEludGVyZmFjZSwgYWRkcyB2YWxpZGF0aW9uIHN1cHBvcnQgZm9yIGZvcm1zXG4gICAgICovXG4gICAgdmFsaWRhdGUoKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0N1cnJlbnRNb2RlbFZhbGlkKCkgJiYgIXRoaXMuX2lzSW52YWxpZERhdGVJbnB1dFxuICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgIGRhdGVWYWxpZGF0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgdmFsaWQ6IGZhbHNlXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqIFRvZ2dsZXMgdGhlIHBvcG92ZXIuICovXG4gICAgdG9nZ2xlUG9wb3ZlcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5oYW5kbGVPblRvdWNoZWQoKTtcbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlUG9wb3ZlcigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vcGVuUG9wb3ZlcigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWV0aG9kIHRoYXQgaGFuZGxlcyBjYWxlbmRhciBhY3RpdmUgdmlldyBjaGFuZ2UgYW5kIHRocm93cyBldmVudC5cbiAgICAgKi9cbiAgICBoYW5kbGVDYWxlbmRhckFjdGl2ZVZpZXdDaGFuZ2UoYWN0aXZlVmlldzogRmRDYWxlbmRhclZpZXcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hY3RpdmVWaWV3Q2hhbmdlLmVtaXQoYWN0aXZlVmlldyk7XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB0aGF0IGhhbmRsZXMgYmx1ciBldmVudHMgb24gZGF0ZXRpbWUgcGlja2VyIGlucHV0ICovXG4gICAgaGFuZGxlT25Ub3VjaGVkKGV2ZW50PzogRm9jdXNFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90b3VjaGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgICAgdGhpcy50b3VjaGVkLm5leHQoKTtcbiAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUlucHV0Q2hhbmdlKCg8SFRNTElucHV0RWxlbWVudD5ldmVudC50YXJnZXQpLnZhbHVlLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogT3BlbnMgdGhlIHBvcG92ZXIuICovXG4gICAgb3BlblBvcG92ZXIoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5pc09wZW4gJiYgIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlT25Ub3VjaGVkKCk7XG4gICAgICAgICAgICB0aGlzLmlzT3BlbiA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9vbk9wZW5TdGF0ZUNoYW5nZWQodGhpcy5pc09wZW4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIENsb3NlcyB0aGUgcG9wb3ZlciBhbmQgcmVmcmVzaCBtb2RlbCAqL1xuICAgIGNsb3NlUG9wb3ZlcigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLm9uQ2xvc2UuZW1pdCgpO1xuICAgICAgICAgICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX29uT3BlblN0YXRlQ2hhbmdlZCh0aGlzLmlzT3Blbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHNldEludmFsaWREYXRlSW5wdXRIYW5kbGVyKGlzSW52YWxpZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLl9pc0ludmFsaWREYXRlSW5wdXQgPSBpc0ludmFsaWQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAoc2VsZWN0ZWQ6IGFueSkgPT4geyB2b2lkIH0pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBGdW5jdGlvbiB0aGF0IHByb3ZpZGVzIHN1cHBvcnQgZm9yIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHRoYXQgYWxsb3dzIHRvIHVzZSBbKG5nTW9kZWwpXSBvciBmb3Jtc1xuICAgICAqL1xuICAgIHdyaXRlVmFsdWUoc2VsZWN0ZWQ6IEQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kYXRlID0gdGhpcy5fcGFyc2VEYXRlKHNlbGVjdGVkKTtcbiAgICAgICAgdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0ID0gIXRoaXMuX2lzTW9kZWxWYWxpZCh0aGlzLmRhdGUpO1xuICAgICAgICBpZiAodGhpcy5pc0N1cnJlbnRNb2RlbFZhbGlkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldFRlbXBEYXRlVGltZSgpO1xuICAgICAgICAgICAgdGhpcy5fcmVmcmVzaEN1cnJlbnRseURpc3BsYXllZENhbGVuZGFyRGF0ZSh0aGlzLmRhdGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NldElucHV0KHRoaXMuZGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0aGF0IGlzIHRyaWdnZXJlZCBieSBldmVudHMgZnJvbSBjYWxlbmRhciBjb21wb25lbnQsIHdoZW4gdGhlcmUgaXMgc2VsZWN0ZWQgZGF0ZSBjaGFuZ2VkLlxuICAgICAqIElmIGludmFsaWQgdGltZSBtb2RlbCBpcyBkZXRlY3RlZCwgaXQgdGFrZXMgdGltZSBtb2RlbCBkYXRhIGZyb20gVGltZUNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBoYW5kbGVEYXRlQ2hhbmdlKGRhdGU6IEQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGVtcERhdGUgPSBkYXRlO1xuICAgICAgICBpZiAoIXRoaXMuc2hvd0Zvb3Rlcikge1xuICAgICAgICAgICAgdGhpcy5zdWJtaXQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCBpcyB0cmlnZ2VyZWQgYnkgZXZlbnRzIGZyb20gdGltZSBjb21wb25lbnQsIHdoZW4gdGhlcmUgaXMgc2VsZWN0ZWQgdGltZSBjaGFuZ2VkXG4gICAgICovXG4gICAgaGFuZGxlVGltZUNoYW5nZSh0aW1lOiBEKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RlbXBUaW1lID0gdGltZTtcbiAgICAgICAgaWYgKCF0aGlzLnNob3dGb290ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuc3VibWl0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRoYXQgaXMgdHJpZ2dlcmVkIHdoZW4gJ09LJyBidXR0b24gaXMgcHJlc3NlZC5cbiAgICAgKi9cbiAgICBzdWJtaXQoKTogdm9pZCB7XG4gICAgICAgIC8vIG1hcmtpbmcgZGF0ZSAmIHRpbWUgYXMgbm90IG51bGwsIGVycm9ycyB3aWxsIGJlIGNhdWdodCBiZWxvd1xuICAgICAgICBjb25zdCBjdXJyZW50RGF0ZSA9IHRoaXMuX3RlbXBEYXRlITtcbiAgICAgICAgY29uc3QgY3VycmVudFRpbWUgPSB0aGlzLl90ZW1wVGltZSE7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZSA9IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5zZXRUaW1lKFxuICAgICAgICAgICAgICAgIGN1cnJlbnREYXRlLFxuICAgICAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5nZXRIb3VycyhjdXJyZW50VGltZSksXG4gICAgICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmdldE1pbnV0ZXMoY3VycmVudFRpbWUpLFxuICAgICAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5nZXRTZWNvbmRzKGN1cnJlbnRUaW1lKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICB0aGlzLmRhdGUgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lzSW52YWxpZERhdGVJbnB1dCA9ICF0aGlzLmlzQ3VycmVudE1vZGVsVmFsaWQoKTtcblxuICAgICAgICB0aGlzLl9zZXRJbnB1dCh0aGlzLmRhdGUpO1xuXG4gICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5kYXRlKTtcblxuICAgICAgICBpZiAodGhpcy5zaG93Rm9vdGVyKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlUG9wb3ZlcigpO1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0UmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBGdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuICdDYW5jZWwnIGJ1dHRvbiBpcyBwcmVzc2VkLlxuICAgICAqL1xuICAgIGNhbmNlbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGVtcERhdGUgPSB0aGlzLmRhdGU7XG4gICAgICAgIHRoaXMuX3RlbXBUaW1lID0gdGhpcy5kYXRlO1xuICAgICAgICB0aGlzLmNsb3NlUG9wb3ZlcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBMb29rcyBsaWtlIG5vIG9uZSB1c2VzIGl0LiBTaG91bGQgYmUgcmVtb3ZlZD9cbiAgICAgKi9cbiAgICBmb2N1c0Fycm93TGVmdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2VsUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignIycgKyB0aGlzLl9jYWxlbmRhckNvbXBvbmVudC5pZCArICctbGVmdC1hcnJvdycpKSB7XG4gICAgICAgICAgICB0aGlzLl9lbFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJyMnICsgdGhpcy5fY2FsZW5kYXJDb21wb25lbnQuaWQgKyAnLWxlZnQtYXJyb3cnKS5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCwgd2hpY2ggaXMgcmVzcG9uc2libGUgZm9yIHRyYW5zZm9ybWluZyBzdHJpbmcgdG8gZGF0ZXRpbWUsIGRlcGVuZGluZyBvbiB0eXBlIG9yXG4gICAgICogdmFsaWRhdGlvbiB0aGUgcmVzdWx0cyBhcmUgZGlmZmVyZW50LiBJdCBhbHNvIGNoYW5nZXMgdG8gc3RhdGUgb2YgX2lzSW52YWxpZERhdGVJbnB1dC5cbiAgICAgKi9cbiAgICBoYW5kbGVJbnB1dENoYW5nZShpbnB1dFN0cjogc3RyaW5nLCBpc1R5cGVFdmVudDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoKGlzVHlwZUV2ZW50ICYmIHRoaXMucHJvY2Vzc0lucHV0T25CbHVyKSB8fCAoIWlzVHlwZUV2ZW50ICYmICF0aGlzLnByb2Nlc3NJbnB1dE9uQmx1cikpIHtcbiAgICAgICAgICAgIC8vIGlmIHByb2Nlc3NJbnB1dE9uQmx1ciA9PT0gdHJ1ZSwgaWdub3JlIHR5cGUgZXZlbnRcbiAgICAgICAgICAgIC8vIGlmIHByb2Nlc3NJbnB1dE9uQmx1ciA9PT0gZmFsc2UsIGlnbm9yZSBibHVyL2VudGVyIGV2ZW50XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faW5wdXRGaWVsZERhdGUgPSBpbnB1dFN0ciA/PyAnJztcbiAgICAgICAgaWYgKCFpbnB1dFN0cikge1xuICAgICAgICAgICAgdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0ID0gIXRoaXMuYWxsb3dOdWxsO1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZShudWxsKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRhdGUgPSB0aGlzLl9wYXJzZURhdGUoaW5wdXRTdHIpO1xuICAgICAgICB0aGlzLl9pc0ludmFsaWREYXRlSW5wdXQgPSAhdGhpcy5faXNNb2RlbFZhbGlkKHRoaXMuZGF0ZSk7XG5cbiAgICAgICAgaWYgKCF0aGlzLl9pc0ludmFsaWREYXRlSW5wdXQpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldFRlbXBEYXRlVGltZSgpO1xuICAgICAgICAgICAgdGhpcy5fcmVmcmVzaEN1cnJlbnRseURpc3BsYXllZENhbGVuZGFyRGF0ZSh0aGlzLmRhdGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5kYXRlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jaGFuZ2VNZXNzYWdlVmlzaWJpbGl0eSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLl9wb3BvdmVyRm9ybU1lc3NhZ2UuaGlkZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fcG9wb3ZlckZvcm1NZXNzYWdlLnNob3coKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX29uT3BlblN0YXRlQ2hhbmdlZChpc09wZW46IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc09wZW5DaGFuZ2UuZW1pdChpc09wZW4pO1xuICAgICAgICB0aGlzLl9jaGFuZ2VNZXNzYWdlVmlzaWJpbGl0eSgpO1xuICAgICAgICAvLyBmb2N1cyBpbnB1dCBjb250cm9sIGV2ZXJ5IHRpbWUgcG9wdXAgaXMgY2xvc2VkXG4gICAgICAgIGlmICghaXNPcGVuICYmIHRoaXMuX2lucHV0RWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5faW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoe1xuICAgICAgICAgICAgICAgIHByZXZlbnRTY3JvbGw6IHRoaXMucHJldmVudFNjcm9sbE9uRm9jdXNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIGZvY3VzIGNhbGVuZGFyIGNlbGwgb24gb3BlbmluZ1xuICAgICAgICBpZiAoaXNPcGVuICYmIHRoaXMuX2NhbGVuZGFyQ29tcG9uZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9jYWxlbmRhckNvbXBvbmVudC5pbml0aWFsRm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdGhhdCBwcm92aWRlcyBpbmZvcm1hdGlvbiBpZiBtb2RlbCBzZWxlY3RlZCBkYXRlL2RhdGVzIGhhdmUgcHJvcGVybHkgdHlwZXMgYW5kIGFyZSB2YWxpZCAqL1xuICAgIGlzQ3VycmVudE1vZGVsVmFsaWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc01vZGVsVmFsaWQodGhpcy5kYXRlKTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHRoYXQgcHJvdmlkZXMgaW5mb3JtYXRpb24gaWYgRmREYXRlVGltZSBwYXNzZWQgYXMgYXJnIGhhcyBwcm9wZXJseSB0eXBlcyBhbmQgaXMgdmFsaWQgKi9cbiAgICBwcml2YXRlIF9pc01vZGVsVmFsaWQoZGF0ZTogTnVsbGFibGU8RD4pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5pc1ZhbGlkKGRhdGUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3NldElucHV0KGRhdGVUaW1lOiBOdWxsYWJsZTxEPik6IHZvaWQge1xuICAgICAgICB0aGlzLl9pbnB1dEZpZWxkRGF0ZSA9IGRhdGVUaW1lICYmIHRoaXMuX2lzTW9kZWxWYWxpZCA/IHRoaXMuX2Zvcm1hdERhdGVUaW1lKGRhdGVUaW1lKSA6ICcnO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmVmcmVzaEN1cnJlbnRseURpc3BsYXllZENhbGVuZGFyRGF0ZShkYXRlOiBOdWxsYWJsZTxEPik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fY2FsZW5kYXJDb21wb25lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX2NhbGVuZGFyQ29tcG9uZW50LnNldEN1cnJlbnRseURpc3BsYXllZChkYXRlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBGb3JtYXQgZGF0ZSB0aW1lIGVudGl0eS5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9mb3JtYXREYXRlVGltZShkYXRlVGltZTogRCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZERhdGU6IHN0cmluZyA9IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5mb3JtYXQoXG4gICAgICAgICAgICBkYXRlVGltZSxcbiAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lRm9ybWF0cy5kaXNwbGF5LmRhdGVUaW1lSW5wdXRcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGZvcm1hdHRlZERhdGUgfHwgJyc7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9Jbml0aWFsaXNlVmFyaWFibGVzSW5NZXNzYWdlU2VydmljZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcG9wb3ZlckZvcm1NZXNzYWdlLmluaXQodGhpcy5faW5wdXRHcm91cEVsZW1lbnQpO1xuICAgICAgICB0aGlzLl9wb3BvdmVyRm9ybU1lc3NhZ2UubWVzc2FnZSA9IHRoaXMuX21lc3NhZ2UgPz8gJyc7XG4gICAgICAgIHRoaXMuX3BvcG92ZXJGb3JtTWVzc2FnZS50cmlnZ2VycyA9IHRoaXMuX21lc3NhZ2VUcmlnZ2VycztcbiAgICAgICAgdGhpcy5fcG9wb3ZlckZvcm1NZXNzYWdlLm1lc3NhZ2VUeXBlID0gdGhpcy5fc3RhdGU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9wYXJzZURhdGUoZGF0ZTogdW5rbm93bik6IEQgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5wYXJzZShkYXRlLCB0aGlzLl9kYXRlVGltZUZvcm1hdHMucGFyc2UuZGF0ZUlucHV0KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldFRlbXBEYXRlVGltZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGVtcERhdGUgPSB0aGlzLmRhdGU7XG4gICAgICAgIHRoaXMuX3RlbXBUaW1lID0gdGhpcy5kYXRlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2FsY3VsYXRlVGltZU9wdGlvbnMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IHRoaXMuX2RhdGVUaW1lRm9ybWF0cy5kaXNwbGF5LmRhdGVUaW1lSW5wdXQ7XG5cbiAgICAgICAgLy8gZGVmYXVsdCBtZXJpZGlhbiBvcHRpb24gYmFzZWQgb24gZm9ybWF0IG9wdGlvblxuICAgICAgICB0aGlzLl9tZXJpZGlhbiA9XG4gICAgICAgICAgICB0aGlzLm1lcmlkaWFuICE9IG51bGwgPyB0aGlzLm1lcmlkaWFuIDogdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmlzVGltZUZvcm1hdEluY2x1ZGVzRGF5UGVyaW9kKGZvcm1hdCk7XG5cbiAgICAgICAgLy8gZGVmYXVsdCBzZWNvbmRzIG9wdGlvbiBiYXNlZCBvbiBmb3JtYXQgb3B0aW9uXG4gICAgICAgIHRoaXMuX2Rpc3BsYXlTZWNvbmRzID1cbiAgICAgICAgICAgIHRoaXMuZGlzcGxheVNlY29uZHMgIT0gbnVsbFxuICAgICAgICAgICAgICAgID8gdGhpcy5kaXNwbGF5U2Vjb25kc1xuICAgICAgICAgICAgICAgIDogdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmlzVGltZUZvcm1hdEluY2x1ZGVzU2Vjb25kcyhmb3JtYXQpO1xuXG4gICAgICAgIC8vIGRlZmF1bHQgbWludXRlcyBvcHRpb24gYmFzZWQgb24gZm9ybWF0IG9wdGlvblxuICAgICAgICB0aGlzLl9kaXNwbGF5TWludXRlcyA9XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlNaW51dGVzICE9IG51bGxcbiAgICAgICAgICAgICAgICA/IHRoaXMuZGlzcGxheU1pbnV0ZXNcbiAgICAgICAgICAgICAgICA6IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5pc1RpbWVGb3JtYXRJbmNsdWRlc01pbnV0ZXMoZm9ybWF0KTtcblxuICAgICAgICAvLyBkZWZhdWx0IGhvdXJzIG9wdGlvbiBiYXNlZCBvbiBmb3JtYXQgb3B0aW9uXG4gICAgICAgIHRoaXMuX2Rpc3BsYXlIb3VycyA9XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlIb3VycyAhPSBudWxsID8gdGhpcy5kaXNwbGF5SG91cnMgOiB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuaXNUaW1lRm9ybWF0SW5jbHVkZXNIb3Vycyhmb3JtYXQpO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJmZC1kYXRldGltZVwiPlxuICAgIDxmZC1wb3BvdmVyXG4gICAgICAgIFsoaXNPcGVuKV09XCJpc09wZW5cIlxuICAgICAgICAoaXNPcGVuQ2hhbmdlKT1cIl9vbk9wZW5TdGF0ZUNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgIFtmb2N1c1RyYXBwZWRdPVwidHJ1ZVwiXG4gICAgICAgIFtmb2N1c0F1dG9DYXB0dXJlXT1cImZhbHNlXCJcbiAgICAgICAgW3RyaWdnZXJzXT1cIltdXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW3BsYWNlbWVudF09XCJwbGFjZW1lbnRcIlxuICAgICAgICBbYXBwZW5kVG9dPVwiYXBwZW5kVG9cIlxuICAgID5cbiAgICAgICAgPGZkLXBvcG92ZXItY29udHJvbD5cbiAgICAgICAgICAgIDxmZC1pbnB1dC1ncm91cFxuICAgICAgICAgICAgICAgICNpbnB1dEdyb3VwQ29tcG9uZW50XG4gICAgICAgICAgICAgICAgW3N0YXRlXT1cInN0YXRlXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIFtpc0NvbnRyb2xdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW2J1dHRvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbYnV0dG9uRm9jdXNhYmxlXT1cImJ1dHRvbkZvY3VzYWJsZVwiXG4gICAgICAgICAgICAgICAgZ2x5cGg9XCJkYXRlLXRpbWVcIlxuICAgICAgICAgICAgICAgIFtpc0V4cGFuZGVkXT1cImlzT3BlblwiXG4gICAgICAgICAgICAgICAgW2dseXBoQXJpYUxhYmVsXT1cImRpc3BsYXlEYXRldGltZVRvZ2dsZUxhYmVsXCJcbiAgICAgICAgICAgICAgICBbaWNvblRpdGxlXT1cImRpc3BsYXlEYXRldGltZVRvZ2dsZUxhYmVsXCJcbiAgICAgICAgICAgICAgICAoYWRkT25CdXR0b25DbGlja2VkKT1cInRvZ2dsZVBvcG92ZXIoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgIGZkLWlucHV0LWdyb3VwLWlucHV0XG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsIHx8IGRhdGV0aW1lSW5wdXRMYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJhcmlhTGFiZWxsZWRCeVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmlkXT1cImlucHV0SWRcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXJlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiX2lucHV0RmllbGREYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImhhbmRsZUlucHV0Q2hhbmdlKCRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUsIGZhbHNlKVwiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImhhbmRsZUlucHV0Q2hhbmdlKCRldmVudCwgdHJ1ZSlcIlxuICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJoYW5kbGVPblRvdWNoZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZmQtaW5wdXQtZ3JvdXA+XG4gICAgICAgIDwvZmQtcG9wb3Zlci1jb250cm9sPlxuICAgICAgICA8ZmQtcG9wb3Zlci1ib2R5XG4gICAgICAgICAgICBhcmlhLWxhYmVsbGVkYnk9XCJmZC1mb3JtLW1lc3NhZ2VcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc09wZW5cIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1oaWRkZW5dPVwiIWlzT3BlblwiXG4gICAgICAgICAgICBbc3R5bGUuZGlzcGxheV09XCInYmxvY2snXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZkLXBvcG92ZXJfX3dyYXBwZXIgZmQtZGF0ZXRpbWVfX3dyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtZGF0ZXRpbWVfX2Rpc3BsYXktdHlwZS1zd2l0Y2hlclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZmQtc2VnbWVudGVkLWJ1dHRvbiBbKG5nTW9kZWwpXT1cIl9kaXNwbGF5VHlwZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBmZC1idXR0b24gW2xhYmVsXT1cImRpc3BsYXlUeXBlRGF0ZUxhYmVsXCIgdmFsdWU9XCJkYXRlXCI+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGZkLWJ1dHRvbiBbbGFiZWxdPVwiZGlzcGxheVR5cGVUaW1lTGFiZWxcIiB2YWx1ZT1cInRpbWVcIj48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9mZC1zZWdtZW50ZWQtYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxmZC1mb3JtLW1lc3NhZ2UgaWQ9XCJmZC1mb3JtLW1lc3NhZ2VcIiBbZW1iZWRkZWRdPVwidHJ1ZVwiICpuZ0lmPVwiX21lc3NhZ2VcIiBbdHlwZV09XCJzdGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBfbWVzc2FnZSB9fVxuICAgICAgICAgICAgICAgIDwvZmQtZm9ybS1tZXNzYWdlPlxuICAgICAgICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtZGF0ZXRpbWVfX2NvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZmQtY2FsZW5kYXJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mZC1kYXRldGltZV9fYWN0aXZlLWRpc3BsYXktdHlwZV09XCJfZGlzcGxheVR5cGUgPT09ICdkYXRlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxUeXBlPVwic2luZ2xlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthY3RpdmVWaWV3XT1cImFjdGl2ZVZpZXdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVGdW5jdGlvbl09XCJkaXNhYmxlRnVuY3Rpb24gfHwgbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWREYXRlXT1cIl90ZW1wRGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZXNjYXBlRm9jdXNGdW5jdGlvbl09XCJudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXJrV2Vla2VuZHNdPVwibWFya1dlZWtlbmRzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzcGVjaWFsRGF5c1J1bGVzXT1cInNwZWNpYWxEYXlzUnVsZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dXZWVrTnVtYmVyc109XCJzaG93V2Vla051bWJlcnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FnZ3JlZ2F0ZWRZZWFyR3JpZF09XCJhZ2dyZWdhdGVkWWVhckdyaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3llYXJHcmlkXT1cInllYXJHcmlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdGFydGluZ0RheU9mV2Vla109XCJzdGFydGluZ0RheU9mV2Vla1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAoYWN0aXZlVmlld0NoYW5nZSk9XCJoYW5kbGVDYWxlbmRhckFjdGl2ZVZpZXdDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWREYXRlQ2hhbmdlKT1cImhhbmRsZURhdGVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoaXNWYWxpZERhdGVDaGFuZ2UpPVwic2V0SW52YWxpZERhdGVJbnB1dEhhbmRsZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgID48L2ZkLWNhbGVuZGFyPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtZGF0ZXRpbWVfX3NlcGFyYXRvclwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZmQtdGltZVxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpc09wZW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZkLWRhdGV0aW1lX19hY3RpdmUtZGlzcGxheS10eXBlXT1cIl9kaXNwbGF5VHlwZSA9PT0gJ3RpbWUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZWxlbWVudHNBdE9uY2VdPVwiNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBba2VlcFR3b0RpZ2l0c109XCJrZWVwVHdvRGlnaXRzVGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJfdGVtcFRpbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NwaW5uZXJCdXR0b25zXT1cInNwaW5uZXJCdXR0b25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttZXJpZGlhbl09XCJfbWVyaWRpYW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc3BsYXlTZWNvbmRzXT1cIl9kaXNwbGF5U2Vjb25kc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzcGxheU1pbnV0ZXNdPVwiX2Rpc3BsYXlNaW51dGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNwbGF5SG91cnNdPVwiX2Rpc3BsYXlIb3Vyc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJoYW5kbGVUaW1lQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICA+PC9mZC10aW1lPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgZmQtcG9wb3Zlci1ib2R5LWZvb3RlciAqbmdJZj1cInNob3dGb290ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBmZC1iYXIgYmFyRGVzaWduPVwiZm9vdGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGZkLWJhci1yaWdodD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmQtYmFyLWVsZW1lbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwiZW1waGFzaXplZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwib2tMYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXJpYUxhYmVsXT1cIm9rTGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInN1Ym1pdCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmQtYmFyLWVsZW1lbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkLWJhci1lbGVtZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJjYW5jZWxMYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXJpYUxhYmVsXT1cImNhbmNlbExhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjYW5jZWwoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZkLWJhci1lbGVtZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZmQtcG9wb3Zlci1ib2R5PlxuICAgIDwvZmQtcG9wb3Zlcj5cbjwvZGl2PlxuIl19
|
|
@@ -216,7 +216,7 @@ class DatetimePickerComponent {
|
|
|
216
216
|
this._popoverFormMessage.messageType = state;
|
|
217
217
|
}
|
|
218
218
|
get state() {
|
|
219
|
-
if (this.
|
|
219
|
+
if (this.useValidation && this.isInvalidDateInput) {
|
|
220
220
|
return 'error';
|
|
221
221
|
}
|
|
222
222
|
return this._state;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fundamental-ngx-core-datetime-picker.mjs","sources":["../../../../../libs/core/src/lib/datetime-picker/errors.ts","../../../../../libs/core/src/lib/datetime-picker/datetime-picker.component.ts","../../../../../libs/core/src/lib/datetime-picker/datetime-picker.component.html","../../../../../libs/core/src/lib/datetime-picker/deprecated-date-time-picker-content-density.directive.ts","../../../../../libs/core/src/lib/datetime-picker/datetime-picker.module.ts","../../../../../libs/core/src/lib/datetime-picker/fundamental-ngx-core-datetime-picker.ts"],"sourcesContent":["export function createMissingDateImplementationError(provider: string): Error {\n return Error(\n `FdDatetimePicker: No provider found for ${provider}. You must import one of the following ` +\n `modules at your application root: FdDatetimeModule, or provide a ` +\n `custom implementation.`\n );\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validator } from '@angular/forms';\nimport { Subject, Subscription } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\n\nimport { FormStates, Nullable, Placement, SpecialDayRule } from '@fundamental-ngx/core/shared';\nimport { DATE_TIME_FORMATS, DatetimeAdapter, DateTimeFormats } from '@fundamental-ngx/core/datetime';\nimport { CalendarComponent, CalendarYearGrid, DaysOfWeek, FdCalendarView } from '@fundamental-ngx/core/calendar';\nimport { FormItemControl, PopoverFormMessageService, registerFormItemControl } from '@fundamental-ngx/core/form';\nimport { PopoverService } from '@fundamental-ngx/core/popover';\nimport { InputGroupInputDirective } from '@fundamental-ngx/core/input-group';\n\nimport { createMissingDateImplementationError } from './errors';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\n\n/**\n * The datetime picker component is an opinionated composition of the fd-popover,\n * fd-calendar and fd-time components to accomplish the UI pattern for picking a date and time.\n * Supports Angular Forms.\n * ```html\n * <fd-date-time-picker [(ngModel)]=\"dateTime\"></fd-date-time-picker>\n * ```\n */\n@Component({\n selector: 'fd-datetime-picker',\n templateUrl: './datetime-picker.component.html',\n styleUrls: ['./datetime-picker.component.scss'],\n host: {\n '(blur)': 'handleOnTouched()'\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DatetimePickerComponent),\n multi: true\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => DatetimePickerComponent),\n multi: true\n },\n registerFormItemControl(DatetimePickerComponent),\n PopoverFormMessageService,\n PopoverService\n ],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DatetimePickerComponent<D>\n implements OnInit, OnDestroy, OnChanges, AfterViewInit, ControlValueAccessor, Validator, FormItemControl\n{\n /** Placeholder for the inner input element. */\n @Input()\n placeholder = '';\n\n /**\n * The placement of the popover. It can be one of: top, top-start, top-end, bottom,\n * bottom-start, bottom-end, right, right-start, right-end, left, left-start, left-end.\n */\n @Input()\n placement: Placement = 'bottom-start';\n\n /** The element to which the popover should be appended. */\n @Input()\n appendTo: ElementRef;\n\n /** Whether the component is disabled. */\n @Input()\n disabled: boolean;\n\n /** Id attribute for input element inside DateTimePicker component */\n @Input()\n inputId: string;\n\n /** If it is mandatory field */\n @Input()\n required = false;\n\n /**\n * Whether the time component should be meridian (am/pm).\n * Default value is based on the current locale format option\n * */\n @Input()\n meridian: boolean;\n\n /**\n * Whether the time component shows seconds.\n * Default value is based on the current locale format option\n * */\n @Input()\n displaySeconds: boolean;\n\n /** aria-label for the date-picker. */\n @Input()\n ariaLabel: Nullable<string>;\n\n /** aria-labelledby for element describing date-picker. */\n @Input()\n ariaLabelledBy: Nullable<string>;\n\n /** Text displayed in message */\n @Input()\n set message(message: string) {\n this._message = message;\n this._popoverFormMessage.message = message;\n }\n\n /** @hidden */\n _message: string | null = null;\n\n /** The trigger events that will open/close the message box.\n * Accepts any [HTML DOM Events](https://www.w3schools.com/jsref/dom_obj_event.asp). */\n @Input()\n set messageTriggers(triggers: string[]) {\n this._messageTriggers = triggers;\n this._popoverFormMessage.triggers = triggers;\n }\n\n /** @hidden */\n _messageTriggers: string[] = ['focusin', 'focusout'];\n\n /**\n * Whether the time component shows minutes.\n * Default value is based on the current locale format option\n * */\n @Input()\n displayMinutes: boolean;\n\n /**\n * Whether the time component shows hours.\n * Default value is based on the current locale format option\n * */\n @Input()\n displayHours: boolean;\n\n /** Whether to perform visual validation on the picker input. */\n @Input()\n useValidation = true;\n\n /** Current selected date. Two-way binding is supported. */\n @Input()\n date: Nullable<D>;\n\n /** Whether the popover is open. Two-way binding is supported. */\n @Input()\n isOpen = false;\n\n /** The disableFunction for the calendar. */\n @Input()\n startingDayOfWeek: DaysOfWeek = 1;\n\n /** Actually shown active view one of 'day' | 'month' | 'year' in calendar component*/\n @Input()\n activeView: FdCalendarView = 'day';\n\n /** Aria label for the datetime picker input. */\n @Input()\n datetimeInputLabel = 'Datetime input';\n\n /** Aria label for the button to show/hide the calendar. */\n @Input()\n displayDatetimeToggleLabel = 'Display calendar toggle';\n\n /** Label for the \"Date\" button in display type switcher in mobile mode */\n @Input()\n displayTypeDateLabel = 'Date';\n\n /** Label for the \"Time\" button in display type switcher in mobile mode */\n @Input()\n displayTypeTimeLabel = 'Time';\n\n /** Whether a null input is considered valid. */\n @Input()\n allowNull = true;\n\n /**\n * @Input when set to true time component will use 2 digits for each number.\n * For example 9 will become 09\n * but 12 will be kept as 12.\n * Only uses by time component and does not change input format\n */\n @Input() keepTwoDigitsTime = false;\n\n /**\n * The state of the form control - applies css classes.\n * Also this is applied to message.\n * Can be `success`, `error`, `warning`, `information` or blank for default.\n */\n @Input()\n set state(state: FormStates) {\n this._state = state;\n this._popoverFormMessage.messageType = state;\n }\n\n get state(): FormStates {\n if (this._state == null && this.useValidation && this.isInvalidDateInput) {\n return 'error';\n }\n return this._state;\n }\n\n /** @hidden */\n private _state: FormStates = 'default';\n\n /**\n * Whether AddOn Button should be focusable\n * @default true\n */\n @Input()\n buttonFocusable = true;\n\n /**\n * Special days mark, it can be used by passing array of object with\n * Special day number, list 1-20 [class:`fd-calendar__special-day--{{number}}`] is available there:\n * https://sap.github.io/fundamental-styles/components/calendar.html calendar special days section\n * Rule accepts method with FdDate object as a parameter. ex:\n * `rule: (fdDate: FdDate) => fdDate.getDay() === 1`, which will mark all sundays as special day.\n */\n @Input()\n specialDaysRules: SpecialDayRule<D>[] = [];\n\n /**\n * Object to customize year grid,\n * Row, Columns and method to display year can be modified\n */\n @Input()\n yearGrid: CalendarYearGrid = {\n rows: 4,\n cols: 5\n };\n\n /**\n * Object to customize aggregated year grid,\n * Row, Columns and method to display year can be modified\n */\n @Input()\n aggregatedYearGrid: CalendarYearGrid = {\n rows: 4,\n cols: 3\n };\n\n /**\n * Whether user wants to mark sunday/saturday with `fd-calendar__item--weekend` class\n */\n @Input()\n markWeekends = true;\n\n /** @Input Whether to show spinner buttons */\n @Input()\n spinnerButtons = true;\n\n /**\n * Whether user wants to show week numbers next to days\n */\n @Input()\n showWeekNumbers = true;\n\n /** Whether or not to show the datetime picker footer with OK/cancel buttons. */\n @Input()\n showFooter = true;\n\n /**\n * Whether to recalculate value from the input as user types or on blur.\n * By default, updates the value as user types.\n * @default false\n */\n @Input()\n set processInputOnBlur(v: boolean) {\n this._processInputOnBlur = coerceBooleanProperty(v);\n }\n\n get processInputOnBlur(): boolean {\n return this._processInputOnBlur;\n }\n\n /**\n * Whether to prevent page scrolling when focusing date picker input field after calendar has been closed.\n */\n @Input()\n preventScrollOnFocus = false;\n\n /**\n * Text and aria-label of the DateTimePicker 'OK' button.\n */\n @Input()\n okLabel = 'OK';\n\n /**\n * Text and aria-label of the DateTimePicker 'Cancel' button.\n */\n @Input()\n cancelLabel = 'Cancel';\n\n /** @hidden */\n _processInputOnBlur = false;\n\n /** Event emitted when the state of the isOpen property changes. */\n @Output()\n isOpenChange = new EventEmitter<boolean>();\n\n /** Event thrown every time calendar active view is changed */\n @Output()\n public readonly activeViewChange: EventEmitter<FdCalendarView> = new EventEmitter<FdCalendarView>();\n\n /** Event emitted when the date changes. This can be a time or day change. */\n @Output()\n readonly dateChange: EventEmitter<D> = new EventEmitter<D>();\n\n /** Event emitted when the day changes from the calendar. */\n @Output()\n readonly calendarChange: EventEmitter<D> = new EventEmitter<D>();\n\n /** Event emitted when the time changes from the time component. */\n @Output()\n readonly timeChange: EventEmitter<D> = new EventEmitter<D>();\n\n /** Event emitted when popover closes. */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n readonly onClose: EventEmitter<void> = new EventEmitter<void>();\n\n /** Event emitted when datepicker changes it's \"touched\" state. */\n @Output()\n readonly touched: EventEmitter<void> = new EventEmitter<void>();\n\n /** Indicates when datetime input is in invalid state. */\n get isInvalidDateInput(): boolean {\n return this._isInvalidDateInput && this._touched;\n }\n\n /** @hidden Reference to the inner calendar component. */\n @ViewChild(CalendarComponent)\n _calendarComponent: CalendarComponent<D>;\n\n /** @hidden */\n @ViewChild('inputGroupComponent', { read: ElementRef })\n _inputGroupElement: ElementRef;\n\n /** @hidden */\n @ViewChild(InputGroupInputDirective, { read: ElementRef })\n _inputElement: ElementRef<HTMLInputElement>;\n\n /**\n * @hidden\n * Date of the input field. Internal use.\n * For programmatic selection, use two-way binding on the date input.\n */\n _inputFieldDate: string | null = null;\n\n /** @hidden */\n _isInvalidDateInput = false;\n\n /** @hidden The temporary Time object for use before 'OK' is pressed. Internal use. */\n _tempTime: Nullable<D>;\n\n /** @hidden The temporary CalendarDay object for use before 'OK' is pressed. Internal use. */\n _tempDate: Nullable<D>;\n\n /** @hidden */\n _meridian: boolean;\n\n /** @hidden */\n _displaySeconds: boolean;\n\n /** @hidden */\n _displayMinutes: boolean;\n\n /** @hidden */\n _displayHours: boolean;\n\n /** @hidden whether to display date or time in mobile mode */\n _displayType: 'date' | 'time' = 'date';\n\n /** @hidden */\n private readonly _onDestroy$: Subject<void> = new Subject<void>();\n\n /** @hidden */\n private _subscriptions = new Subscription();\n\n /** @hidden */\n private _touched = false;\n\n /** @hidden */\n onChange: (value: D | null) => void = () => {};\n\n /** @hidden */\n onTouched = (): void => {};\n\n /**\n * Function used to disable certain dates in the calendar.\n * @param fdDate FdDate\n */\n @Input()\n disableFunction: (value: D) => boolean = () => false;\n\n /** @hidden */\n constructor(\n private _elRef: ElementRef,\n private _changeDetRef: ChangeDetectorRef,\n // Use @Optional to avoid angular injection error message and throw our own which is more precise one\n @Optional() private _dateTimeAdapter: DatetimeAdapter<D>,\n @Optional() @Inject(DATE_TIME_FORMATS) private _dateTimeFormats: DateTimeFormats,\n private _popoverFormMessage: PopoverFormMessageService\n ) {\n if (!this._dateTimeAdapter) {\n throw createMissingDateImplementationError('DateTimeAdapter');\n }\n if (!this._dateTimeFormats) {\n throw createMissingDateImplementationError('DATE_TIME_FORMATS');\n }\n\n // default model value\n this.date = _dateTimeAdapter.now();\n }\n\n /** @hidden */\n ngOnChanges(changes): void {\n if (changes.date) {\n this._setTempDateTime();\n }\n\n if (['displayHours', 'displayMinutes', 'displaySeconds', 'meridian'].some((input) => input in changes)) {\n this._calculateTimeOptions();\n }\n }\n\n /** @hidden */\n ngOnInit(): void {\n if (this.date) {\n this._setTempDateTime();\n }\n\n this._calculateTimeOptions();\n\n this._dateTimeAdapter.localeChanges\n .pipe(\n takeUntil(this._onDestroy$),\n filter(() => this._inputFieldDate !== '')\n )\n .subscribe(() => {\n this._setInput(this.date);\n this._calculateTimeOptions();\n this._changeDetRef.detectChanges();\n });\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n this._onDestroy$.next();\n this._onDestroy$.complete();\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._InitialiseVariablesInMessageService();\n // update bindings after rendering\n // is needed to preperly reflect error state\n setTimeout(() => {\n this._changeDetRef.markForCheck();\n });\n }\n\n /**\n * @hidden\n * Function that implements Validator Interface, adds validation support for forms\n */\n validate(): { [key: string]: any } | null {\n return this.isCurrentModelValid() && !this._isInvalidDateInput\n ? null\n : {\n dateValidation: {\n valid: false\n }\n };\n }\n\n /** Toggles the popover. */\n togglePopover(): void {\n this.handleOnTouched();\n if (this.isOpen) {\n this.closePopover();\n } else {\n this.openPopover();\n }\n }\n\n /**\n * Method that handles calendar active view change and throws event.\n */\n handleCalendarActiveViewChange(activeView: FdCalendarView): void {\n this.activeViewChange.emit(activeView);\n }\n\n /** Method that handles blur events on datetime picker input */\n handleOnTouched(event?: FocusEvent): void {\n this._touched = true;\n this.onTouched();\n this.touched.next();\n if (event) {\n this.handleInputChange((<HTMLInputElement>event.target).value, false);\n }\n }\n\n /** Opens the popover. */\n openPopover(): void {\n if (!this.isOpen && !this.disabled) {\n this.handleOnTouched();\n this.isOpen = true;\n this._onOpenStateChanged(this.isOpen);\n }\n }\n\n /** Closes the popover and refresh model */\n closePopover(): void {\n if (this.isOpen) {\n this.onClose.emit();\n this.isOpen = false;\n this._onOpenStateChanged(this.isOpen);\n }\n }\n\n /** @hidden */\n setInvalidDateInputHandler(isInvalid: boolean): void {\n this._isInvalidDateInput = isInvalid;\n }\n\n /** @hidden */\n registerOnChange(fn: (selected: any) => { void }): void {\n this.onChange = fn;\n }\n\n /** @hidden */\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n /** @hidden */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this._changeDetRef.detectChanges();\n }\n\n /**\n * @hidden\n * Function that provides support for ControlValueAccessor that allows to use [(ngModel)] or forms\n */\n writeValue(selected: D): void {\n this.date = this._parseDate(selected);\n this._isInvalidDateInput = !this._isModelValid(this.date);\n if (this.isCurrentModelValid()) {\n this._setTempDateTime();\n this._refreshCurrentlyDisplayedCalendarDate(this.date);\n }\n this._setInput(this.date);\n }\n\n /**\n * @hidden\n * Method that is triggered by events from calendar component, when there is selected date changed.\n * If invalid time model is detected, it takes time model data from TimeComponent.\n */\n handleDateChange(date: D): void {\n this._tempDate = date;\n if (!this.showFooter) {\n this.submit();\n }\n }\n\n /**\n * @hidden\n * Method that is triggered by events from time component, when there is selected time changed\n */\n handleTimeChange(time: D): void {\n this._tempTime = time;\n if (!this.showFooter) {\n this.submit();\n }\n }\n\n /**\n * @hidden\n * Method that is triggered when 'OK' button is pressed.\n */\n submit(): void {\n // marking date & time as not null, errors will be caught below\n const currentDate = this._tempDate!;\n const currentTime = this._tempTime!;\n\n try {\n this.date = this._dateTimeAdapter.setTime(\n currentDate,\n this._dateTimeAdapter.getHours(currentTime),\n this._dateTimeAdapter.getMinutes(currentTime),\n this._dateTimeAdapter.getSeconds(currentTime)\n );\n } catch {\n this.date = null;\n }\n this._isInvalidDateInput = !this.isCurrentModelValid();\n\n this._setInput(this.date);\n\n this.onChange(this.date);\n\n if (this.showFooter) {\n this.closePopover();\n this._changeDetRef.detectChanges();\n }\n }\n\n /**\n * @hidden\n * Function that is called when 'Cancel' button is pressed.\n */\n cancel(): void {\n this._tempDate = this.date;\n this._tempTime = this.date;\n this.closePopover();\n }\n\n /**\n * @hidden\n * Looks like no one uses it. Should be removed?\n */\n focusArrowLeft(): void {\n if (this._elRef.nativeElement.querySelector('#' + this._calendarComponent.id + '-left-arrow')) {\n this._elRef.nativeElement.querySelector('#' + this._calendarComponent.id + '-left-arrow').focus();\n }\n }\n\n /**\n * @hidden\n * Method, which is responsible for transforming string to datetime, depending on type or\n * validation the results are different. It also changes to state of _isInvalidDateInput.\n */\n handleInputChange(inputStr: string, isTypeEvent: boolean): void {\n if ((isTypeEvent && this.processInputOnBlur) || (!isTypeEvent && !this.processInputOnBlur)) {\n // if processInputOnBlur === true, ignore type event\n // if processInputOnBlur === false, ignore blur/enter event\n return;\n }\n this._inputFieldDate = inputStr ?? '';\n if (!inputStr) {\n this._isInvalidDateInput = !this.allowNull;\n this.onChange(null);\n return;\n }\n this.date = this._parseDate(inputStr);\n this._isInvalidDateInput = !this._isModelValid(this.date);\n\n if (!this._isInvalidDateInput) {\n this._setTempDateTime();\n this._refreshCurrentlyDisplayedCalendarDate(this.date);\n }\n this.onChange(this.date);\n }\n\n /** @hidden */\n _changeMessageVisibility(): void {\n if (this.isOpen) {\n this._popoverFormMessage.hide();\n } else {\n this._popoverFormMessage.show();\n }\n }\n\n /** @hidden */\n _onOpenStateChanged(isOpen: boolean): void {\n this.isOpenChange.emit(isOpen);\n this._changeMessageVisibility();\n // focus input control every time popup is closed\n if (!isOpen && this._inputElement) {\n this._inputElement.nativeElement.focus({\n preventScroll: this.preventScrollOnFocus\n });\n }\n // focus calendar cell on opening\n if (isOpen && this._calendarComponent) {\n this._calendarComponent.initialFocus();\n }\n }\n\n /** Method that provides information if model selected date/dates have properly types and are valid */\n isCurrentModelValid(): boolean {\n return this._isModelValid(this.date);\n }\n\n /** Method that provides information if FdDateTime passed as arg has properly types and is valid */\n private _isModelValid(date: Nullable<D>): boolean {\n return this._dateTimeAdapter.isValid(date);\n }\n\n private _setInput(dateTime: Nullable<D>): void {\n this._inputFieldDate = dateTime && this._isModelValid ? this._formatDateTime(dateTime) : '';\n this._changeDetRef.detectChanges();\n }\n\n /** @hidden */\n private _refreshCurrentlyDisplayedCalendarDate(date: Nullable<D>): void {\n if (this._calendarComponent) {\n this._calendarComponent.setCurrentlyDisplayed(date);\n }\n }\n\n /**\n * @hidden\n * Format date time entity.\n */\n private _formatDateTime(dateTime: D): string {\n const formattedDate: string = this._dateTimeAdapter.format(\n dateTime,\n this._dateTimeFormats.display.dateTimeInput\n );\n return formattedDate || '';\n }\n\n /** @hidden */\n private _InitialiseVariablesInMessageService(): void {\n this._popoverFormMessage.init(this._inputGroupElement);\n this._popoverFormMessage.message = this._message ?? '';\n this._popoverFormMessage.triggers = this._messageTriggers;\n this._popoverFormMessage.messageType = this._state;\n }\n\n /** @hidden */\n private _parseDate(date: unknown): D | null {\n return this._dateTimeAdapter.parse(date, this._dateTimeFormats.parse.dateInput);\n }\n\n /** @hidden */\n private _setTempDateTime(): void {\n this._tempDate = this.date;\n this._tempTime = this.date;\n }\n\n /** @hidden */\n private _calculateTimeOptions(): void {\n const format = this._dateTimeFormats.display.dateTimeInput;\n\n // default meridian option based on format option\n this._meridian =\n this.meridian != null ? this.meridian : this._dateTimeAdapter.isTimeFormatIncludesDayPeriod(format);\n\n // default seconds option based on format option\n this._displaySeconds =\n this.displaySeconds != null\n ? this.displaySeconds\n : this._dateTimeAdapter.isTimeFormatIncludesSeconds(format);\n\n // default minutes option based on format option\n this._displayMinutes =\n this.displayMinutes != null\n ? this.displayMinutes\n : this._dateTimeAdapter.isTimeFormatIncludesMinutes(format);\n\n // default hours option based on format option\n this._displayHours =\n this.displayHours != null ? this.displayHours : this._dateTimeAdapter.isTimeFormatIncludesHours(format);\n }\n}\n","<div class=\"fd-datetime\">\n <fd-popover\n [(isOpen)]=\"isOpen\"\n (isOpenChange)=\"_onOpenStateChanged($event)\"\n [focusTrapped]=\"true\"\n [focusAutoCapture]=\"false\"\n [triggers]=\"[]\"\n [disabled]=\"disabled\"\n [placement]=\"placement\"\n [appendTo]=\"appendTo\"\n >\n <fd-popover-control>\n <fd-input-group\n #inputGroupComponent\n [state]=\"state\"\n [disabled]=\"disabled\"\n [isControl]=\"true\"\n [button]=\"true\"\n [buttonFocusable]=\"buttonFocusable\"\n glyph=\"date-time\"\n [isExpanded]=\"isOpen\"\n [glyphAriaLabel]=\"displayDatetimeToggleLabel\"\n [iconTitle]=\"displayDatetimeToggleLabel\"\n (addOnButtonClicked)=\"togglePopover()\"\n >\n <input\n type=\"text\"\n class=\"fd-input\"\n fd-input-group-input\n [attr.aria-label]=\"ariaLabel || datetimeInputLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.id]=\"inputId\"\n [attr.aria-required]=\"required\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [ngModel]=\"_inputFieldDate\"\n (keyup.enter)=\"handleInputChange($any($event.target).value, false)\"\n (ngModelChange)=\"handleInputChange($event, true)\"\n (blur)=\"handleOnTouched($event)\"\n />\n </fd-input-group>\n </fd-popover-control>\n <fd-popover-body\n aria-labelledby=\"fd-form-message\"\n [attr.aria-expanded]=\"isOpen\"\n [attr.aria-hidden]=\"!isOpen\"\n [style.display]=\"'block'\"\n >\n <div class=\"fd-popover__wrapper fd-datetime__wrapper\">\n <div class=\"fd-datetime__display-type-switcher\">\n <fd-segmented-button [(ngModel)]=\"_displayType\">\n <button fd-button [label]=\"displayTypeDateLabel\" value=\"date\"></button>\n <button fd-button [label]=\"displayTypeTimeLabel\" value=\"time\"></button>\n </fd-segmented-button>\n </div>\n <fd-form-message id=\"fd-form-message\" [embedded]=\"true\" *ngIf=\"_message\" [type]=\"state\">\n {{ _message }}\n </fd-form-message>\n <ng-content></ng-content>\n <div class=\"fd-datetime__container\">\n <fd-calendar\n [class.fd-datetime__active-display-type]=\"_displayType === 'date'\"\n calType=\"single\"\n [activeView]=\"activeView\"\n [disableFunction]=\"disableFunction || null\"\n [selectedDate]=\"_tempDate\"\n [escapeFocusFunction]=\"null\"\n [markWeekends]=\"markWeekends\"\n [specialDaysRules]=\"specialDaysRules\"\n [showWeekNumbers]=\"showWeekNumbers\"\n [aggregatedYearGrid]=\"aggregatedYearGrid\"\n [yearGrid]=\"yearGrid\"\n [startingDayOfWeek]=\"startingDayOfWeek\"\n (activeViewChange)=\"handleCalendarActiveViewChange($event)\"\n (selectedDateChange)=\"handleDateChange($event)\"\n (isValidDateChange)=\"setInvalidDateInputHandler($event)\"\n ></fd-calendar>\n <div class=\"fd-datetime__separator\"></div>\n <fd-time\n *ngIf=\"isOpen\"\n [class.fd-datetime__active-display-type]=\"_displayType === 'time'\"\n [disabled]=\"disabled\"\n [elementsAtOnce]=\"5\"\n [keepTwoDigits]=\"keepTwoDigitsTime\"\n [ngModel]=\"_tempTime\"\n [spinnerButtons]=\"spinnerButtons\"\n [meridian]=\"_meridian\"\n [displaySeconds]=\"_displaySeconds\"\n [displayMinutes]=\"_displayMinutes\"\n [displayHours]=\"_displayHours\"\n (ngModelChange)=\"handleTimeChange($event)\"\n ></fd-time>\n </div>\n <div fd-popover-body-footer *ngIf=\"showFooter\">\n <div fd-bar barDesign=\"footer\">\n <div fd-bar-right>\n <fd-bar-element>\n <button\n fd-button\n fdType=\"emphasized\"\n [label]=\"okLabel\"\n [ariaLabel]=\"okLabel\"\n (click)=\"submit()\"\n ></button>\n </fd-bar-element>\n <fd-bar-element>\n <button\n fd-button\n fdType=\"transparent\"\n [label]=\"cancelLabel\"\n [ariaLabel]=\"cancelLabel\"\n (click)=\"cancel()\"\n ></button>\n </fd-bar-element>\n </div>\n </div>\n </div>\n </div>\n </fd-popover-body>\n </fd-popover>\n</div>\n","import { Directive, forwardRef } from '@angular/core';\nimport { CONTENT_DENSITY_DIRECTIVE, DeprecatedCompactDirective } from '@fundamental-ngx/core/content-density';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'fd-datetime-picker[compact]',\n providers: [\n {\n provide: CONTENT_DENSITY_DIRECTIVE,\n useExisting: forwardRef(() => DeprecatedDateTimePickerContentDensityDirective)\n }\n ]\n})\nexport class DeprecatedDateTimePickerContentDensityDirective extends DeprecatedCompactDirective {\n constructor() {\n super('fd-datetime-picker');\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { IconModule } from '@fundamental-ngx/core/icon';\nimport { PopoverModule } from '@fundamental-ngx/core/popover';\nimport { CalendarModule } from '@fundamental-ngx/core/calendar';\nimport { FormsModule } from '@angular/forms';\nimport { DatetimePickerComponent } from './datetime-picker.component';\nimport { TimeModule } from '@fundamental-ngx/core/time';\nimport { ButtonModule } from '@fundamental-ngx/core/button';\nimport { InputGroupModule } from '@fundamental-ngx/core/input-group';\nimport { BarModule } from '@fundamental-ngx/core/bar';\nimport { FormMessageModule } from '@fundamental-ngx/core/form';\nimport { SegmentedButtonModule } from '@fundamental-ngx/core/segmented-button';\nimport { DeprecatedDateTimePickerContentDensityDirective } from './deprecated-date-time-picker-content-density.directive';\nimport { ContentDensityModule } from '@fundamental-ngx/core/content-density';\n\n@NgModule({\n declarations: [DatetimePickerComponent, DeprecatedDateTimePickerContentDensityDirective],\n imports: [\n CommonModule,\n IconModule,\n PopoverModule,\n CalendarModule,\n FormsModule,\n TimeModule,\n InputGroupModule,\n ButtonModule,\n BarModule,\n SegmentedButtonModule,\n FormMessageModule,\n ContentDensityModule\n ],\n exports: [DatetimePickerComponent, DeprecatedDateTimePickerContentDensityDirective, ContentDensityModule]\n})\nexport class DatetimePickerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fundamental-ngx-core-datetime-picker.mjs","sources":["../../../../../libs/core/src/lib/datetime-picker/errors.ts","../../../../../libs/core/src/lib/datetime-picker/datetime-picker.component.ts","../../../../../libs/core/src/lib/datetime-picker/datetime-picker.component.html","../../../../../libs/core/src/lib/datetime-picker/deprecated-date-time-picker-content-density.directive.ts","../../../../../libs/core/src/lib/datetime-picker/datetime-picker.module.ts","../../../../../libs/core/src/lib/datetime-picker/fundamental-ngx-core-datetime-picker.ts"],"sourcesContent":["export function createMissingDateImplementationError(provider: string): Error {\n return Error(\n `FdDatetimePicker: No provider found for ${provider}. You must import one of the following ` +\n `modules at your application root: FdDatetimeModule, or provide a ` +\n `custom implementation.`\n );\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validator } from '@angular/forms';\nimport { Subject, Subscription } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\n\nimport { FormStates, Nullable, Placement, SpecialDayRule } from '@fundamental-ngx/core/shared';\nimport { DATE_TIME_FORMATS, DatetimeAdapter, DateTimeFormats } from '@fundamental-ngx/core/datetime';\nimport { CalendarComponent, CalendarYearGrid, DaysOfWeek, FdCalendarView } from '@fundamental-ngx/core/calendar';\nimport { FormItemControl, PopoverFormMessageService, registerFormItemControl } from '@fundamental-ngx/core/form';\nimport { PopoverService } from '@fundamental-ngx/core/popover';\nimport { InputGroupInputDirective } from '@fundamental-ngx/core/input-group';\n\nimport { createMissingDateImplementationError } from './errors';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\n\n/**\n * The datetime picker component is an opinionated composition of the fd-popover,\n * fd-calendar and fd-time components to accomplish the UI pattern for picking a date and time.\n * Supports Angular Forms.\n * ```html\n * <fd-date-time-picker [(ngModel)]=\"dateTime\"></fd-date-time-picker>\n * ```\n */\n@Component({\n selector: 'fd-datetime-picker',\n templateUrl: './datetime-picker.component.html',\n styleUrls: ['./datetime-picker.component.scss'],\n host: {\n '(blur)': 'handleOnTouched()'\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DatetimePickerComponent),\n multi: true\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => DatetimePickerComponent),\n multi: true\n },\n registerFormItemControl(DatetimePickerComponent),\n PopoverFormMessageService,\n PopoverService\n ],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DatetimePickerComponent<D>\n implements OnInit, OnDestroy, OnChanges, AfterViewInit, ControlValueAccessor, Validator, FormItemControl\n{\n /** Placeholder for the inner input element. */\n @Input()\n placeholder = '';\n\n /**\n * The placement of the popover. It can be one of: top, top-start, top-end, bottom,\n * bottom-start, bottom-end, right, right-start, right-end, left, left-start, left-end.\n */\n @Input()\n placement: Placement = 'bottom-start';\n\n /** The element to which the popover should be appended. */\n @Input()\n appendTo: ElementRef;\n\n /** Whether the component is disabled. */\n @Input()\n disabled: boolean;\n\n /** Id attribute for input element inside DateTimePicker component */\n @Input()\n inputId: string;\n\n /** If it is mandatory field */\n @Input()\n required = false;\n\n /**\n * Whether the time component should be meridian (am/pm).\n * Default value is based on the current locale format option\n * */\n @Input()\n meridian: boolean;\n\n /**\n * Whether the time component shows seconds.\n * Default value is based on the current locale format option\n * */\n @Input()\n displaySeconds: boolean;\n\n /** aria-label for the date-picker. */\n @Input()\n ariaLabel: Nullable<string>;\n\n /** aria-labelledby for element describing date-picker. */\n @Input()\n ariaLabelledBy: Nullable<string>;\n\n /** Text displayed in message */\n @Input()\n set message(message: string) {\n this._message = message;\n this._popoverFormMessage.message = message;\n }\n\n /** @hidden */\n _message: string | null = null;\n\n /** The trigger events that will open/close the message box.\n * Accepts any [HTML DOM Events](https://www.w3schools.com/jsref/dom_obj_event.asp). */\n @Input()\n set messageTriggers(triggers: string[]) {\n this._messageTriggers = triggers;\n this._popoverFormMessage.triggers = triggers;\n }\n\n /** @hidden */\n _messageTriggers: string[] = ['focusin', 'focusout'];\n\n /**\n * Whether the time component shows minutes.\n * Default value is based on the current locale format option\n * */\n @Input()\n displayMinutes: boolean;\n\n /**\n * Whether the time component shows hours.\n * Default value is based on the current locale format option\n * */\n @Input()\n displayHours: boolean;\n\n /** Whether to perform visual validation on the picker input. */\n @Input()\n useValidation = true;\n\n /** Current selected date. Two-way binding is supported. */\n @Input()\n date: Nullable<D>;\n\n /** Whether the popover is open. Two-way binding is supported. */\n @Input()\n isOpen = false;\n\n /** The disableFunction for the calendar. */\n @Input()\n startingDayOfWeek: DaysOfWeek = 1;\n\n /** Actually shown active view one of 'day' | 'month' | 'year' in calendar component*/\n @Input()\n activeView: FdCalendarView = 'day';\n\n /** Aria label for the datetime picker input. */\n @Input()\n datetimeInputLabel = 'Datetime input';\n\n /** Aria label for the button to show/hide the calendar. */\n @Input()\n displayDatetimeToggleLabel = 'Display calendar toggle';\n\n /** Label for the \"Date\" button in display type switcher in mobile mode */\n @Input()\n displayTypeDateLabel = 'Date';\n\n /** Label for the \"Time\" button in display type switcher in mobile mode */\n @Input()\n displayTypeTimeLabel = 'Time';\n\n /** Whether a null input is considered valid. */\n @Input()\n allowNull = true;\n\n /**\n * @Input when set to true time component will use 2 digits for each number.\n * For example 9 will become 09\n * but 12 will be kept as 12.\n * Only uses by time component and does not change input format\n */\n @Input() keepTwoDigitsTime = false;\n\n /**\n * The state of the form control - applies css classes.\n * Also this is applied to message.\n * Can be `success`, `error`, `warning`, `information` or blank for default.\n */\n @Input()\n set state(state: FormStates) {\n this._state = state;\n this._popoverFormMessage.messageType = state;\n }\n\n get state(): FormStates {\n if (this.useValidation && this.isInvalidDateInput) {\n return 'error';\n }\n return this._state;\n }\n\n /** @hidden */\n private _state: FormStates = 'default';\n\n /**\n * Whether AddOn Button should be focusable\n * @default true\n */\n @Input()\n buttonFocusable = true;\n\n /**\n * Special days mark, it can be used by passing array of object with\n * Special day number, list 1-20 [class:`fd-calendar__special-day--{{number}}`] is available there:\n * https://sap.github.io/fundamental-styles/components/calendar.html calendar special days section\n * Rule accepts method with FdDate object as a parameter. ex:\n * `rule: (fdDate: FdDate) => fdDate.getDay() === 1`, which will mark all sundays as special day.\n */\n @Input()\n specialDaysRules: SpecialDayRule<D>[] = [];\n\n /**\n * Object to customize year grid,\n * Row, Columns and method to display year can be modified\n */\n @Input()\n yearGrid: CalendarYearGrid = {\n rows: 4,\n cols: 5\n };\n\n /**\n * Object to customize aggregated year grid,\n * Row, Columns and method to display year can be modified\n */\n @Input()\n aggregatedYearGrid: CalendarYearGrid = {\n rows: 4,\n cols: 3\n };\n\n /**\n * Whether user wants to mark sunday/saturday with `fd-calendar__item--weekend` class\n */\n @Input()\n markWeekends = true;\n\n /** @Input Whether to show spinner buttons */\n @Input()\n spinnerButtons = true;\n\n /**\n * Whether user wants to show week numbers next to days\n */\n @Input()\n showWeekNumbers = true;\n\n /** Whether or not to show the datetime picker footer with OK/cancel buttons. */\n @Input()\n showFooter = true;\n\n /**\n * Whether to recalculate value from the input as user types or on blur.\n * By default, updates the value as user types.\n * @default false\n */\n @Input()\n set processInputOnBlur(v: boolean) {\n this._processInputOnBlur = coerceBooleanProperty(v);\n }\n\n get processInputOnBlur(): boolean {\n return this._processInputOnBlur;\n }\n\n /**\n * Whether to prevent page scrolling when focusing date picker input field after calendar has been closed.\n */\n @Input()\n preventScrollOnFocus = false;\n\n /**\n * Text and aria-label of the DateTimePicker 'OK' button.\n */\n @Input()\n okLabel = 'OK';\n\n /**\n * Text and aria-label of the DateTimePicker 'Cancel' button.\n */\n @Input()\n cancelLabel = 'Cancel';\n\n /** @hidden */\n _processInputOnBlur = false;\n\n /** Event emitted when the state of the isOpen property changes. */\n @Output()\n isOpenChange = new EventEmitter<boolean>();\n\n /** Event thrown every time calendar active view is changed */\n @Output()\n public readonly activeViewChange: EventEmitter<FdCalendarView> = new EventEmitter<FdCalendarView>();\n\n /** Event emitted when the date changes. This can be a time or day change. */\n @Output()\n readonly dateChange: EventEmitter<D> = new EventEmitter<D>();\n\n /** Event emitted when the day changes from the calendar. */\n @Output()\n readonly calendarChange: EventEmitter<D> = new EventEmitter<D>();\n\n /** Event emitted when the time changes from the time component. */\n @Output()\n readonly timeChange: EventEmitter<D> = new EventEmitter<D>();\n\n /** Event emitted when popover closes. */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n readonly onClose: EventEmitter<void> = new EventEmitter<void>();\n\n /** Event emitted when datepicker changes it's \"touched\" state. */\n @Output()\n readonly touched: EventEmitter<void> = new EventEmitter<void>();\n\n /** Indicates when datetime input is in invalid state. */\n get isInvalidDateInput(): boolean {\n return this._isInvalidDateInput && this._touched;\n }\n\n /** @hidden Reference to the inner calendar component. */\n @ViewChild(CalendarComponent)\n _calendarComponent: CalendarComponent<D>;\n\n /** @hidden */\n @ViewChild('inputGroupComponent', { read: ElementRef })\n _inputGroupElement: ElementRef;\n\n /** @hidden */\n @ViewChild(InputGroupInputDirective, { read: ElementRef })\n _inputElement: ElementRef<HTMLInputElement>;\n\n /**\n * @hidden\n * Date of the input field. Internal use.\n * For programmatic selection, use two-way binding on the date input.\n */\n _inputFieldDate: string | null = null;\n\n /** @hidden */\n _isInvalidDateInput = false;\n\n /** @hidden The temporary Time object for use before 'OK' is pressed. Internal use. */\n _tempTime: Nullable<D>;\n\n /** @hidden The temporary CalendarDay object for use before 'OK' is pressed. Internal use. */\n _tempDate: Nullable<D>;\n\n /** @hidden */\n _meridian: boolean;\n\n /** @hidden */\n _displaySeconds: boolean;\n\n /** @hidden */\n _displayMinutes: boolean;\n\n /** @hidden */\n _displayHours: boolean;\n\n /** @hidden whether to display date or time in mobile mode */\n _displayType: 'date' | 'time' = 'date';\n\n /** @hidden */\n private readonly _onDestroy$: Subject<void> = new Subject<void>();\n\n /** @hidden */\n private _subscriptions = new Subscription();\n\n /** @hidden */\n private _touched = false;\n\n /** @hidden */\n onChange: (value: D | null) => void = () => {};\n\n /** @hidden */\n onTouched = (): void => {};\n\n /**\n * Function used to disable certain dates in the calendar.\n * @param fdDate FdDate\n */\n @Input()\n disableFunction: (value: D) => boolean = () => false;\n\n /** @hidden */\n constructor(\n private _elRef: ElementRef,\n private _changeDetRef: ChangeDetectorRef,\n // Use @Optional to avoid angular injection error message and throw our own which is more precise one\n @Optional() private _dateTimeAdapter: DatetimeAdapter<D>,\n @Optional() @Inject(DATE_TIME_FORMATS) private _dateTimeFormats: DateTimeFormats,\n private _popoverFormMessage: PopoverFormMessageService\n ) {\n if (!this._dateTimeAdapter) {\n throw createMissingDateImplementationError('DateTimeAdapter');\n }\n if (!this._dateTimeFormats) {\n throw createMissingDateImplementationError('DATE_TIME_FORMATS');\n }\n\n // default model value\n this.date = _dateTimeAdapter.now();\n }\n\n /** @hidden */\n ngOnChanges(changes): void {\n if (changes.date) {\n this._setTempDateTime();\n }\n\n if (['displayHours', 'displayMinutes', 'displaySeconds', 'meridian'].some((input) => input in changes)) {\n this._calculateTimeOptions();\n }\n }\n\n /** @hidden */\n ngOnInit(): void {\n if (this.date) {\n this._setTempDateTime();\n }\n\n this._calculateTimeOptions();\n\n this._dateTimeAdapter.localeChanges\n .pipe(\n takeUntil(this._onDestroy$),\n filter(() => this._inputFieldDate !== '')\n )\n .subscribe(() => {\n this._setInput(this.date);\n this._calculateTimeOptions();\n this._changeDetRef.detectChanges();\n });\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n this._onDestroy$.next();\n this._onDestroy$.complete();\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._InitialiseVariablesInMessageService();\n // update bindings after rendering\n // is needed to preperly reflect error state\n setTimeout(() => {\n this._changeDetRef.markForCheck();\n });\n }\n\n /**\n * @hidden\n * Function that implements Validator Interface, adds validation support for forms\n */\n validate(): { [key: string]: any } | null {\n return this.isCurrentModelValid() && !this._isInvalidDateInput\n ? null\n : {\n dateValidation: {\n valid: false\n }\n };\n }\n\n /** Toggles the popover. */\n togglePopover(): void {\n this.handleOnTouched();\n if (this.isOpen) {\n this.closePopover();\n } else {\n this.openPopover();\n }\n }\n\n /**\n * Method that handles calendar active view change and throws event.\n */\n handleCalendarActiveViewChange(activeView: FdCalendarView): void {\n this.activeViewChange.emit(activeView);\n }\n\n /** Method that handles blur events on datetime picker input */\n handleOnTouched(event?: FocusEvent): void {\n this._touched = true;\n this.onTouched();\n this.touched.next();\n if (event) {\n this.handleInputChange((<HTMLInputElement>event.target).value, false);\n }\n }\n\n /** Opens the popover. */\n openPopover(): void {\n if (!this.isOpen && !this.disabled) {\n this.handleOnTouched();\n this.isOpen = true;\n this._onOpenStateChanged(this.isOpen);\n }\n }\n\n /** Closes the popover and refresh model */\n closePopover(): void {\n if (this.isOpen) {\n this.onClose.emit();\n this.isOpen = false;\n this._onOpenStateChanged(this.isOpen);\n }\n }\n\n /** @hidden */\n setInvalidDateInputHandler(isInvalid: boolean): void {\n this._isInvalidDateInput = isInvalid;\n }\n\n /** @hidden */\n registerOnChange(fn: (selected: any) => { void }): void {\n this.onChange = fn;\n }\n\n /** @hidden */\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n /** @hidden */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this._changeDetRef.detectChanges();\n }\n\n /**\n * @hidden\n * Function that provides support for ControlValueAccessor that allows to use [(ngModel)] or forms\n */\n writeValue(selected: D): void {\n this.date = this._parseDate(selected);\n this._isInvalidDateInput = !this._isModelValid(this.date);\n if (this.isCurrentModelValid()) {\n this._setTempDateTime();\n this._refreshCurrentlyDisplayedCalendarDate(this.date);\n }\n this._setInput(this.date);\n }\n\n /**\n * @hidden\n * Method that is triggered by events from calendar component, when there is selected date changed.\n * If invalid time model is detected, it takes time model data from TimeComponent.\n */\n handleDateChange(date: D): void {\n this._tempDate = date;\n if (!this.showFooter) {\n this.submit();\n }\n }\n\n /**\n * @hidden\n * Method that is triggered by events from time component, when there is selected time changed\n */\n handleTimeChange(time: D): void {\n this._tempTime = time;\n if (!this.showFooter) {\n this.submit();\n }\n }\n\n /**\n * @hidden\n * Method that is triggered when 'OK' button is pressed.\n */\n submit(): void {\n // marking date & time as not null, errors will be caught below\n const currentDate = this._tempDate!;\n const currentTime = this._tempTime!;\n\n try {\n this.date = this._dateTimeAdapter.setTime(\n currentDate,\n this._dateTimeAdapter.getHours(currentTime),\n this._dateTimeAdapter.getMinutes(currentTime),\n this._dateTimeAdapter.getSeconds(currentTime)\n );\n } catch {\n this.date = null;\n }\n this._isInvalidDateInput = !this.isCurrentModelValid();\n\n this._setInput(this.date);\n\n this.onChange(this.date);\n\n if (this.showFooter) {\n this.closePopover();\n this._changeDetRef.detectChanges();\n }\n }\n\n /**\n * @hidden\n * Function that is called when 'Cancel' button is pressed.\n */\n cancel(): void {\n this._tempDate = this.date;\n this._tempTime = this.date;\n this.closePopover();\n }\n\n /**\n * @hidden\n * Looks like no one uses it. Should be removed?\n */\n focusArrowLeft(): void {\n if (this._elRef.nativeElement.querySelector('#' + this._calendarComponent.id + '-left-arrow')) {\n this._elRef.nativeElement.querySelector('#' + this._calendarComponent.id + '-left-arrow').focus();\n }\n }\n\n /**\n * @hidden\n * Method, which is responsible for transforming string to datetime, depending on type or\n * validation the results are different. It also changes to state of _isInvalidDateInput.\n */\n handleInputChange(inputStr: string, isTypeEvent: boolean): void {\n if ((isTypeEvent && this.processInputOnBlur) || (!isTypeEvent && !this.processInputOnBlur)) {\n // if processInputOnBlur === true, ignore type event\n // if processInputOnBlur === false, ignore blur/enter event\n return;\n }\n this._inputFieldDate = inputStr ?? '';\n if (!inputStr) {\n this._isInvalidDateInput = !this.allowNull;\n this.onChange(null);\n return;\n }\n this.date = this._parseDate(inputStr);\n this._isInvalidDateInput = !this._isModelValid(this.date);\n\n if (!this._isInvalidDateInput) {\n this._setTempDateTime();\n this._refreshCurrentlyDisplayedCalendarDate(this.date);\n }\n this.onChange(this.date);\n }\n\n /** @hidden */\n _changeMessageVisibility(): void {\n if (this.isOpen) {\n this._popoverFormMessage.hide();\n } else {\n this._popoverFormMessage.show();\n }\n }\n\n /** @hidden */\n _onOpenStateChanged(isOpen: boolean): void {\n this.isOpenChange.emit(isOpen);\n this._changeMessageVisibility();\n // focus input control every time popup is closed\n if (!isOpen && this._inputElement) {\n this._inputElement.nativeElement.focus({\n preventScroll: this.preventScrollOnFocus\n });\n }\n // focus calendar cell on opening\n if (isOpen && this._calendarComponent) {\n this._calendarComponent.initialFocus();\n }\n }\n\n /** Method that provides information if model selected date/dates have properly types and are valid */\n isCurrentModelValid(): boolean {\n return this._isModelValid(this.date);\n }\n\n /** Method that provides information if FdDateTime passed as arg has properly types and is valid */\n private _isModelValid(date: Nullable<D>): boolean {\n return this._dateTimeAdapter.isValid(date);\n }\n\n private _setInput(dateTime: Nullable<D>): void {\n this._inputFieldDate = dateTime && this._isModelValid ? this._formatDateTime(dateTime) : '';\n this._changeDetRef.detectChanges();\n }\n\n /** @hidden */\n private _refreshCurrentlyDisplayedCalendarDate(date: Nullable<D>): void {\n if (this._calendarComponent) {\n this._calendarComponent.setCurrentlyDisplayed(date);\n }\n }\n\n /**\n * @hidden\n * Format date time entity.\n */\n private _formatDateTime(dateTime: D): string {\n const formattedDate: string = this._dateTimeAdapter.format(\n dateTime,\n this._dateTimeFormats.display.dateTimeInput\n );\n return formattedDate || '';\n }\n\n /** @hidden */\n private _InitialiseVariablesInMessageService(): void {\n this._popoverFormMessage.init(this._inputGroupElement);\n this._popoverFormMessage.message = this._message ?? '';\n this._popoverFormMessage.triggers = this._messageTriggers;\n this._popoverFormMessage.messageType = this._state;\n }\n\n /** @hidden */\n private _parseDate(date: unknown): D | null {\n return this._dateTimeAdapter.parse(date, this._dateTimeFormats.parse.dateInput);\n }\n\n /** @hidden */\n private _setTempDateTime(): void {\n this._tempDate = this.date;\n this._tempTime = this.date;\n }\n\n /** @hidden */\n private _calculateTimeOptions(): void {\n const format = this._dateTimeFormats.display.dateTimeInput;\n\n // default meridian option based on format option\n this._meridian =\n this.meridian != null ? this.meridian : this._dateTimeAdapter.isTimeFormatIncludesDayPeriod(format);\n\n // default seconds option based on format option\n this._displaySeconds =\n this.displaySeconds != null\n ? this.displaySeconds\n : this._dateTimeAdapter.isTimeFormatIncludesSeconds(format);\n\n // default minutes option based on format option\n this._displayMinutes =\n this.displayMinutes != null\n ? this.displayMinutes\n : this._dateTimeAdapter.isTimeFormatIncludesMinutes(format);\n\n // default hours option based on format option\n this._displayHours =\n this.displayHours != null ? this.displayHours : this._dateTimeAdapter.isTimeFormatIncludesHours(format);\n }\n}\n","<div class=\"fd-datetime\">\n <fd-popover\n [(isOpen)]=\"isOpen\"\n (isOpenChange)=\"_onOpenStateChanged($event)\"\n [focusTrapped]=\"true\"\n [focusAutoCapture]=\"false\"\n [triggers]=\"[]\"\n [disabled]=\"disabled\"\n [placement]=\"placement\"\n [appendTo]=\"appendTo\"\n >\n <fd-popover-control>\n <fd-input-group\n #inputGroupComponent\n [state]=\"state\"\n [disabled]=\"disabled\"\n [isControl]=\"true\"\n [button]=\"true\"\n [buttonFocusable]=\"buttonFocusable\"\n glyph=\"date-time\"\n [isExpanded]=\"isOpen\"\n [glyphAriaLabel]=\"displayDatetimeToggleLabel\"\n [iconTitle]=\"displayDatetimeToggleLabel\"\n (addOnButtonClicked)=\"togglePopover()\"\n >\n <input\n type=\"text\"\n class=\"fd-input\"\n fd-input-group-input\n [attr.aria-label]=\"ariaLabel || datetimeInputLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.id]=\"inputId\"\n [attr.aria-required]=\"required\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [ngModel]=\"_inputFieldDate\"\n (keyup.enter)=\"handleInputChange($any($event.target).value, false)\"\n (ngModelChange)=\"handleInputChange($event, true)\"\n (blur)=\"handleOnTouched($event)\"\n />\n </fd-input-group>\n </fd-popover-control>\n <fd-popover-body\n aria-labelledby=\"fd-form-message\"\n [attr.aria-expanded]=\"isOpen\"\n [attr.aria-hidden]=\"!isOpen\"\n [style.display]=\"'block'\"\n >\n <div class=\"fd-popover__wrapper fd-datetime__wrapper\">\n <div class=\"fd-datetime__display-type-switcher\">\n <fd-segmented-button [(ngModel)]=\"_displayType\">\n <button fd-button [label]=\"displayTypeDateLabel\" value=\"date\"></button>\n <button fd-button [label]=\"displayTypeTimeLabel\" value=\"time\"></button>\n </fd-segmented-button>\n </div>\n <fd-form-message id=\"fd-form-message\" [embedded]=\"true\" *ngIf=\"_message\" [type]=\"state\">\n {{ _message }}\n </fd-form-message>\n <ng-content></ng-content>\n <div class=\"fd-datetime__container\">\n <fd-calendar\n [class.fd-datetime__active-display-type]=\"_displayType === 'date'\"\n calType=\"single\"\n [activeView]=\"activeView\"\n [disableFunction]=\"disableFunction || null\"\n [selectedDate]=\"_tempDate\"\n [escapeFocusFunction]=\"null\"\n [markWeekends]=\"markWeekends\"\n [specialDaysRules]=\"specialDaysRules\"\n [showWeekNumbers]=\"showWeekNumbers\"\n [aggregatedYearGrid]=\"aggregatedYearGrid\"\n [yearGrid]=\"yearGrid\"\n [startingDayOfWeek]=\"startingDayOfWeek\"\n (activeViewChange)=\"handleCalendarActiveViewChange($event)\"\n (selectedDateChange)=\"handleDateChange($event)\"\n (isValidDateChange)=\"setInvalidDateInputHandler($event)\"\n ></fd-calendar>\n <div class=\"fd-datetime__separator\"></div>\n <fd-time\n *ngIf=\"isOpen\"\n [class.fd-datetime__active-display-type]=\"_displayType === 'time'\"\n [disabled]=\"disabled\"\n [elementsAtOnce]=\"5\"\n [keepTwoDigits]=\"keepTwoDigitsTime\"\n [ngModel]=\"_tempTime\"\n [spinnerButtons]=\"spinnerButtons\"\n [meridian]=\"_meridian\"\n [displaySeconds]=\"_displaySeconds\"\n [displayMinutes]=\"_displayMinutes\"\n [displayHours]=\"_displayHours\"\n (ngModelChange)=\"handleTimeChange($event)\"\n ></fd-time>\n </div>\n <div fd-popover-body-footer *ngIf=\"showFooter\">\n <div fd-bar barDesign=\"footer\">\n <div fd-bar-right>\n <fd-bar-element>\n <button\n fd-button\n fdType=\"emphasized\"\n [label]=\"okLabel\"\n [ariaLabel]=\"okLabel\"\n (click)=\"submit()\"\n ></button>\n </fd-bar-element>\n <fd-bar-element>\n <button\n fd-button\n fdType=\"transparent\"\n [label]=\"cancelLabel\"\n [ariaLabel]=\"cancelLabel\"\n (click)=\"cancel()\"\n ></button>\n </fd-bar-element>\n </div>\n </div>\n </div>\n </div>\n </fd-popover-body>\n </fd-popover>\n</div>\n","import { Directive, forwardRef } from '@angular/core';\nimport { CONTENT_DENSITY_DIRECTIVE, DeprecatedCompactDirective } from '@fundamental-ngx/core/content-density';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'fd-datetime-picker[compact]',\n providers: [\n {\n provide: CONTENT_DENSITY_DIRECTIVE,\n useExisting: forwardRef(() => DeprecatedDateTimePickerContentDensityDirective)\n }\n ]\n})\nexport class DeprecatedDateTimePickerContentDensityDirective extends DeprecatedCompactDirective {\n constructor() {\n super('fd-datetime-picker');\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { IconModule } from '@fundamental-ngx/core/icon';\nimport { PopoverModule } from '@fundamental-ngx/core/popover';\nimport { CalendarModule } from '@fundamental-ngx/core/calendar';\nimport { FormsModule } from '@angular/forms';\nimport { DatetimePickerComponent } from './datetime-picker.component';\nimport { TimeModule } from '@fundamental-ngx/core/time';\nimport { ButtonModule } from '@fundamental-ngx/core/button';\nimport { InputGroupModule } from '@fundamental-ngx/core/input-group';\nimport { BarModule } from '@fundamental-ngx/core/bar';\nimport { FormMessageModule } from '@fundamental-ngx/core/form';\nimport { SegmentedButtonModule } from '@fundamental-ngx/core/segmented-button';\nimport { DeprecatedDateTimePickerContentDensityDirective } from './deprecated-date-time-picker-content-density.directive';\nimport { ContentDensityModule } from '@fundamental-ngx/core/content-density';\n\n@NgModule({\n declarations: [DatetimePickerComponent, DeprecatedDateTimePickerContentDensityDirective],\n imports: [\n CommonModule,\n IconModule,\n PopoverModule,\n CalendarModule,\n FormsModule,\n TimeModule,\n InputGroupModule,\n ButtonModule,\n BarModule,\n SegmentedButtonModule,\n FormMessageModule,\n ContentDensityModule\n ],\n exports: [DatetimePickerComponent, DeprecatedDateTimePickerContentDensityDirective, ContentDensityModule]\n})\nexport class DatetimePickerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAAgB,oCAAoC,CAAC,QAAgB;IACjE,OAAO,KAAK,CACR,2CAA2C,QAAQ,yCAAyC;QACxF,mEAAmE;QACnE,wBAAwB,CAC/B,CAAC;AACN;;AC0BA;;;;;;;;MAiCa,uBAAuB;;IA4VhC,YACY,MAAkB,EAClB,aAAgC;;IAEpB,gBAAoC,EACT,gBAAiC,EACxE,mBAA8C;QAL9C,WAAM,GAAN,MAAM,CAAY;QAClB,kBAAa,GAAb,aAAa,CAAmB;QAEpB,qBAAgB,GAAhB,gBAAgB,CAAoB;QACT,qBAAgB,GAAhB,gBAAgB,CAAiB;QACxE,wBAAmB,GAAnB,mBAAmB,CAA2B;;QA7V1D,gBAAW,GAAG,EAAE,CAAC;;;;;QAOjB,cAAS,GAAc,cAAc,CAAC;;QAgBtC,aAAQ,GAAG,KAAK,CAAC;;QAgCjB,aAAQ,GAAkB,IAAI,CAAC;;QAW/B,qBAAgB,GAAa,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;;QAkBrD,kBAAa,GAAG,IAAI,CAAC;;QAQrB,WAAM,GAAG,KAAK,CAAC;;QAIf,sBAAiB,GAAe,CAAC,CAAC;;QAIlC,eAAU,GAAmB,KAAK,CAAC;;QAInC,uBAAkB,GAAG,gBAAgB,CAAC;;QAItC,+BAA0B,GAAG,yBAAyB,CAAC;;QAIvD,yBAAoB,GAAG,MAAM,CAAC;;QAI9B,yBAAoB,GAAG,MAAM,CAAC;;QAI9B,cAAS,GAAG,IAAI,CAAC;;;;;;;QAQR,sBAAiB,GAAG,KAAK,CAAC;;QAqB3B,WAAM,GAAe,SAAS,CAAC;;;;;QAOvC,oBAAe,GAAG,IAAI,CAAC;;;;;;;;QAUvB,qBAAgB,GAAwB,EAAE,CAAC;;;;;QAO3C,aAAQ,GAAqB;YACzB,IAAI,EAAE,CAAC;YACP,IAAI,EAAE,CAAC;SACV,CAAC;;;;;QAOF,uBAAkB,GAAqB;YACnC,IAAI,EAAE,CAAC;YACP,IAAI,EAAE,CAAC;SACV,CAAC;;;;QAMF,iBAAY,GAAG,IAAI,CAAC;;QAIpB,mBAAc,GAAG,IAAI,CAAC;;;;QAMtB,oBAAe,GAAG,IAAI,CAAC;;QAIvB,eAAU,GAAG,IAAI,CAAC;;;;QAoBlB,yBAAoB,GAAG,KAAK,CAAC;;;;QAM7B,YAAO,GAAG,IAAI,CAAC;;;;QAMf,gBAAW,GAAG,QAAQ,CAAC;;QAGvB,wBAAmB,GAAG,KAAK,CAAC;;QAI5B,iBAAY,GAAG,IAAI,YAAY,EAAW,CAAC;;QAI3B,qBAAgB,GAAiC,IAAI,YAAY,EAAkB,CAAC;;QAI3F,eAAU,GAAoB,IAAI,YAAY,EAAK,CAAC;;QAIpD,mBAAc,GAAoB,IAAI,YAAY,EAAK,CAAC;;QAIxD,eAAU,GAAoB,IAAI,YAAY,EAAK,CAAC;;QAKpD,YAAO,GAAuB,IAAI,YAAY,EAAQ,CAAC;;QAIvD,YAAO,GAAuB,IAAI,YAAY,EAAQ,CAAC;;;;;;QAwBhE,oBAAe,GAAkB,IAAI,CAAC;;QAGtC,wBAAmB,GAAG,KAAK,CAAC;;QAqB5B,iBAAY,GAAoB,MAAM,CAAC;;QAGtB,gBAAW,GAAkB,IAAI,OAAO,EAAQ,CAAC;;QAG1D,mBAAc,GAAG,IAAI,YAAY,EAAE,CAAC;;QAGpC,aAAQ,GAAG,KAAK,CAAC;;QAGzB,aAAQ,GAA8B,SAAQ,CAAC;;QAG/C,cAAS,GAAG,SAAc,CAAC;;;;;QAO3B,oBAAe,GAA0B,MAAM,KAAK,CAAC;QAWjD,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YACxB,MAAM,oCAAoC,CAAC,iBAAiB,CAAC,CAAC;SACjE;QACD,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YACxB,MAAM,oCAAoC,CAAC,mBAAmB,CAAC,CAAC;SACnE;;QAGD,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC,GAAG,EAAE,CAAC;KACtC;;IAxTD,IACI,OAAO,CAAC,OAAe;QACvB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,mBAAmB,CAAC,OAAO,GAAG,OAAO,CAAC;KAC9C;;;IAOD,IACI,eAAe,CAAC,QAAkB;QAClC,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC;QACjC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,GAAG,QAAQ,CAAC;KAChD;;;;;;IAwED,IACI,KAAK,CAAC,KAAiB;QACvB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,mBAAmB,CAAC,WAAW,GAAG,KAAK,CAAC;KAChD;IAED,IAAI,KAAK;QACL,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,kBAAkB,EAAE;YAC/C,OAAO,OAAO,CAAC;SAClB;QACD,OAAO,IAAI,CAAC,MAAM,CAAC;KACtB;;;;;;IAmED,IACI,kBAAkB,CAAC,CAAU;QAC7B,IAAI,CAAC,mBAAmB,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC;KACvD;IAED,IAAI,kBAAkB;QAClB,OAAO,IAAI,CAAC,mBAAmB,CAAC;KACnC;;IAqDD,IAAI,kBAAkB;QAClB,OAAO,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,QAAQ,CAAC;KACpD;;IAwFD,WAAW,CAAC,OAAO;QACf,IAAI,OAAO,CAAC,IAAI,EAAE;YACd,IAAI,CAAC,gBAAgB,EAAE,CAAC;SAC3B;QAED,IAAI,CAAC,cAAc,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,IAAI,OAAO,CAAC,EAAE;YACpG,IAAI,CAAC,qBAAqB,EAAE,CAAC;SAChC;KACJ;;IAGD,QAAQ;QACJ,IAAI,IAAI,CAAC,IAAI,EAAE;YACX,IAAI,CAAC,gBAAgB,EAAE,CAAC;SAC3B;QAED,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAE7B,IAAI,CAAC,gBAAgB,CAAC,aAAa;aAC9B,IAAI,CACD,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,EAC3B,MAAM,CAAC,MAAM,IAAI,CAAC,eAAe,KAAK,EAAE,CAAC,CAC5C;aACA,SAAS,CAAC;YACP,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1B,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC7B,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;SACtC,CAAC,CAAC;KACV;;IAGD,WAAW;QACP,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;QAClC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QACxB,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;KAC/B;;IAGD,eAAe;QACX,IAAI,CAAC,oCAAoC,EAAE,CAAC;;;QAG5C,UAAU,CAAC;YACP,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;SACrC,CAAC,CAAC;KACN;;;;;IAMD,QAAQ;QACJ,OAAO,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,IAAI,CAAC,mBAAmB;cACxD,IAAI;cACJ;gBACI,cAAc,EAAE;oBACZ,KAAK,EAAE,KAAK;iBACf;aACJ,CAAC;KACX;;IAGD,aAAa;QACT,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,IAAI,CAAC,YAAY,EAAE,CAAC;SACvB;aAAM;YACH,IAAI,CAAC,WAAW,EAAE,CAAC;SACtB;KACJ;;;;IAKD,8BAA8B,CAAC,UAA0B;QACrD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;KAC1C;;IAGD,eAAe,CAAC,KAAkB;QAC9B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACpB,IAAI,KAAK,EAAE;YACP,IAAI,CAAC,iBAAiB,CAAoB,KAAK,CAAC,MAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;SACzE;KACJ;;IAGD,WAAW;QACP,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAChC,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACzC;KACJ;;IAGD,YAAY;QACR,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACpB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YACpB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACzC;KACJ;;IAGD,0BAA0B,CAAC,SAAkB;QACzC,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAC;KACxC;;IAGD,gBAAgB,CAAC,EAA+B;QAC5C,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;KACtB;;IAGD,iBAAiB,CAAC,EAAO;QACrB,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;KACvB;;IAGD,gBAAgB,CAAC,UAAmB;QAChC,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC;QAC3B,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;KACtC;;;;;IAMD,UAAU,CAAC,QAAW;QAClB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC,mBAAmB,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1D,IAAI,IAAI,CAAC,mBAAmB,EAAE,EAAE;YAC5B,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,sCAAsC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC1D;QACD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC7B;;;;;;IAOD,gBAAgB,CAAC,IAAO;QACpB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAClB,IAAI,CAAC,MAAM,EAAE,CAAC;SACjB;KACJ;;;;;IAMD,gBAAgB,CAAC,IAAO;QACpB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAClB,IAAI,CAAC,MAAM,EAAE,CAAC;SACjB;KACJ;;;;;IAMD,MAAM;;QAEF,MAAM,WAAW,GAAG,IAAI,CAAC,SAAU,CAAC;QACpC,MAAM,WAAW,GAAG,IAAI,CAAC,SAAU,CAAC;QAEpC,IAAI;YACA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CACrC,WAAW,EACX,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,WAAW,CAAC,EAC3C,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,WAAW,CAAC,EAC7C,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,WAAW,CAAC,CAChD,CAAC;SACL;QAAC,WAAM;YACJ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;SACpB;QACD,IAAI,CAAC,mBAAmB,GAAG,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAEvD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE1B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEzB,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;SACtC;KACJ;;;;;IAMD,MAAM;QACF,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC;QAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC;QAC3B,IAAI,CAAC,YAAY,EAAE,CAAC;KACvB;;;;;IAMD,cAAc;QACV,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,aAAa,CAAC,GAAG,GAAG,IAAI,CAAC,kBAAkB,CAAC,EAAE,GAAG,aAAa,CAAC,EAAE;YAC3F,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,aAAa,CAAC,GAAG,GAAG,IAAI,CAAC,kBAAkB,CAAC,EAAE,GAAG,aAAa,CAAC,CAAC,KAAK,EAAE,CAAC;SACrG;KACJ;;;;;;IAOD,iBAAiB,CAAC,QAAgB,EAAE,WAAoB;QACpD,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,kBAAkB,MAAM,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE;;;YAGxF,OAAO;SACV;QACD,IAAI,CAAC,eAAe,GAAG,QAAQ,aAAR,QAAQ,cAAR,QAAQ,GAAI,EAAE,CAAC;QACtC,IAAI,CAAC,QAAQ,EAAE;YACX,IAAI,CAAC,mBAAmB,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;YAC3C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACpB,OAAO;SACV;QACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC,mBAAmB,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE1D,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;YAC3B,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,sCAAsC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC1D;QACD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC5B;;IAGD,wBAAwB;QACpB,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC;SACnC;aAAM;YACH,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC;SACnC;KACJ;;IAGD,mBAAmB,CAAC,MAAe;QAC/B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,wBAAwB,EAAE,CAAC;;QAEhC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,EAAE;YAC/B,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC;gBACnC,aAAa,EAAE,IAAI,CAAC,oBAAoB;aAC3C,CAAC,CAAC;SACN;;QAED,IAAI,MAAM,IAAI,IAAI,CAAC,kBAAkB,EAAE;YACnC,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;SAC1C;KACJ;;IAGD,mBAAmB;QACf,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACxC;;IAGO,aAAa,CAAC,IAAiB;QACnC,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;KAC9C;IAEO,SAAS,CAAC,QAAqB;QACnC,IAAI,CAAC,eAAe,GAAG,QAAQ,IAAI,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;QAC5F,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;KACtC;;IAGO,sCAAsC,CAAC,IAAiB;QAC5D,IAAI,IAAI,CAAC,kBAAkB,EAAE;YACzB,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;SACvD;KACJ;;;;;IAMO,eAAe,CAAC,QAAW;QAC/B,MAAM,aAAa,GAAW,IAAI,CAAC,gBAAgB,CAAC,MAAM,CACtD,QAAQ,EACR,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,aAAa,CAC9C,CAAC;QACF,OAAO,aAAa,IAAI,EAAE,CAAC;KAC9B;;IAGO,oCAAoC;;QACxC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACvD,IAAI,CAAC,mBAAmB,CAAC,OAAO,GAAG,MAAA,IAAI,CAAC,QAAQ,mCAAI,EAAE,CAAC;QACvD,IAAI,CAAC,mBAAmB,CAAC,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAC1D,IAAI,CAAC,mBAAmB,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC;KACtD;;IAGO,UAAU,CAAC,IAAa;QAC5B,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;KACnF;;IAGO,gBAAgB;QACpB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC;QAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC;KAC9B;;IAGO,qBAAqB;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,aAAa,CAAC;;QAG3D,IAAI,CAAC,SAAS;YACV,IAAI,CAAC,QAAQ,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,6BAA6B,CAAC,MAAM,CAAC,CAAC;;QAGxG,IAAI,CAAC,eAAe;YAChB,IAAI,CAAC,cAAc,IAAI,IAAI;kBACrB,IAAI,CAAC,cAAc;kBACnB,IAAI,CAAC,gBAAgB,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC;;QAGpE,IAAI,CAAC,eAAe;YAChB,IAAI,CAAC,cAAc,IAAI,IAAI;kBACrB,IAAI,CAAC,cAAc;kBACnB,IAAI,CAAC,gBAAgB,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC;;QAGpE,IAAI,CAAC,aAAa;YACd,IAAI,CAAC,YAAY,IAAI,IAAI,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC;KAC/G;;oHAvsBQ,uBAAuB,4HAiWR,iBAAiB;wGAjWhC,uBAAuB,w/CAlBrB;QACP;YACI,OAAO,EAAE,iBAAiB;YAC1B,WAAW,EAAE,UAAU,CAAC,MAAM,uBAAuB,CAAC;YACtD,KAAK,EAAE,IAAI;SACd;QACD;YACI,OAAO,EAAE,aAAa;YACtB,WAAW,EAAE,UAAU,CAAC,MAAM,uBAAuB,CAAC;YACtD,KAAK,EAAE,IAAI;SACd;QACD,uBAAuB,CAAC,uBAAuB,CAAC;QAChD,yBAAyB;QACzB,cAAc;KACjB,8EA+RU,iBAAiB,uIAIc,UAAU,6DAIzC,wBAAwB,2BAAU,UAAU,kDCpW3D,2wLAyHA;2FDxDa,uBAAuB;kBAzBnC,SAAS;+BACI,oBAAoB,QAGxB;wBACF,QAAQ,EAAE,mBAAmB;qBAChC,aACU;wBACP;4BACI,OAAO,EAAE,iBAAiB;4BAC1B,WAAW,EAAE,UAAU,CAAC,6BAA6B,CAAC;4BACtD,KAAK,EAAE,IAAI;yBACd;wBACD;4BACI,OAAO,EAAE,aAAa;4BACtB,WAAW,EAAE,UAAU,CAAC,6BAA6B,CAAC;4BACtD,KAAK,EAAE,IAAI;yBACd;wBACD,uBAAuB,yBAAyB;wBAChD,yBAAyB;wBACzB,cAAc;qBACjB,iBACc,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM;;;8BAkW1C,QAAQ;;8BACR,QAAQ;;8BAAI,MAAM;+BAAC,iBAAiB;;yBA5VzC,WAAW;sBADV,KAAK;gBAQN,SAAS;sBADR,KAAK;gBAKN,QAAQ;sBADP,KAAK;gBAKN,QAAQ;sBADP,KAAK;gBAKN,OAAO;sBADN,KAAK;gBAKN,QAAQ;sBADP,KAAK;gBAQN,QAAQ;sBADP,KAAK;gBAQN,cAAc;sBADb,KAAK;gBAKN,SAAS;sBADR,KAAK;gBAKN,cAAc;sBADb,KAAK;gBAKF,OAAO;sBADV,KAAK;gBAYF,eAAe;sBADlB,KAAK;gBAcN,cAAc;sBADb,KAAK;gBAQN,YAAY;sBADX,KAAK;gBAKN,aAAa;sBADZ,KAAK;gBAKN,IAAI;sBADH,KAAK;gBAKN,MAAM;sBADL,KAAK;gBAKN,iBAAiB;sBADhB,KAAK;gBAKN,UAAU;sBADT,KAAK;gBAKN,kBAAkB;sBADjB,KAAK;gBAKN,0BAA0B;sBADzB,KAAK;gBAKN,oBAAoB;sBADnB,KAAK;gBAKN,oBAAoB;sBADnB,KAAK;gBAKN,SAAS;sBADR,KAAK;gBASG,iBAAiB;sBAAzB,KAAK;gBAQF,KAAK;sBADR,KAAK;gBAqBN,eAAe;sBADd,KAAK;gBAWN,gBAAgB;sBADf,KAAK;gBAQN,QAAQ;sBADP,KAAK;gBAWN,kBAAkB;sBADjB,KAAK;gBAUN,YAAY;sBADX,KAAK;gBAKN,cAAc;sBADb,KAAK;gBAON,eAAe;sBADd,KAAK;gBAKN,UAAU;sBADT,KAAK;gBASF,kBAAkB;sBADrB,KAAK;gBAaN,oBAAoB;sBADnB,KAAK;gBAON,OAAO;sBADN,KAAK;gBAON,WAAW;sBADV,KAAK;gBAQN,YAAY;sBADX,MAAM;gBAKS,gBAAgB;sBAD/B,MAAM;gBAKE,UAAU;sBADlB,MAAM;gBAKE,cAAc;sBADtB,MAAM;gBAKE,UAAU;sBADlB,MAAM;gBAME,OAAO;sBAFf,MAAM;gBAME,OAAO;sBADf,MAAM;gBAUP,kBAAkB;sBADjB,SAAS;uBAAC,iBAAiB;gBAK5B,kBAAkB;sBADjB,SAAS;uBAAC,qBAAqB,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;gBAKtD,aAAa;sBADZ,SAAS;uBAAC,wBAAwB,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;gBAsDzD,eAAe;sBADd,KAAK;;;ME5YG,wDAAwD,0BAA0B;IAC3F;QACI,KAAK,CAAC,oBAAoB,CAAC,CAAC;KAC/B;;4IAHQ,+CAA+C;gIAA/C,+CAA+C,sDAP7C;QACP;YACI,OAAO,EAAE,yBAAyB;YAClC,WAAW,EAAE,UAAU,CAAC,MAAM,+CAA+C,CAAC;SACjF;KACJ;2FAEQ,+CAA+C;kBAV3D,SAAS;mBAAC;;oBAEP,QAAQ,EAAE,6BAA6B;oBACvC,SAAS,EAAE;wBACP;4BACI,OAAO,EAAE,yBAAyB;4BAClC,WAAW,EAAE,UAAU,CAAC,qDAAqD,CAAC;yBACjF;qBACJ;iBACJ;;;MCsBY,oBAAoB;;iHAApB,oBAAoB;kHAApB,oBAAoB,iBAjBd,uBAAuB,EAAE,+CAA+C,aAEnF,YAAY;QACZ,UAAU;QACV,aAAa;QACb,cAAc;QACd,WAAW;QACX,UAAU;QACV,gBAAgB;QAChB,YAAY;QACZ,SAAS;QACT,qBAAqB;QACrB,iBAAiB;QACjB,oBAAoB,aAEd,uBAAuB,EAAE,+CAA+C,EAAE,oBAAoB;kHAE/F,oBAAoB,YAhBpB;YACL,YAAY;YACZ,UAAU;YACV,aAAa;YACb,cAAc;YACd,WAAW;YACX,UAAU;YACV,gBAAgB;YAChB,YAAY;YACZ,SAAS;YACT,qBAAqB;YACrB,iBAAiB;YACjB,oBAAoB;SACvB,EACmF,oBAAoB;2FAE/F,oBAAoB;kBAlBhC,QAAQ;mBAAC;oBACN,YAAY,EAAE,CAAC,uBAAuB,EAAE,+CAA+C,CAAC;oBACxF,OAAO,EAAE;wBACL,YAAY;wBACZ,UAAU;wBACV,aAAa;wBACb,cAAc;wBACd,WAAW;wBACX,UAAU;wBACV,gBAAgB;wBAChB,YAAY;wBACZ,SAAS;wBACT,qBAAqB;wBACrB,iBAAiB;wBACjB,oBAAoB;qBACvB;oBACD,OAAO,EAAE,CAAC,uBAAuB,EAAE,+CAA+C,EAAE,oBAAoB,CAAC;iBAC5G;;;ACjCD;;;;;;"}
|
|
@@ -216,7 +216,7 @@ class DatetimePickerComponent {
|
|
|
216
216
|
this._popoverFormMessage.messageType = state;
|
|
217
217
|
}
|
|
218
218
|
get state() {
|
|
219
|
-
if (this.
|
|
219
|
+
if (this.useValidation && this.isInvalidDateInput) {
|
|
220
220
|
return 'error';
|
|
221
221
|
}
|
|
222
222
|
return this._state;
|