@libs-ui/components-datetime-dropdown 0.2.10-6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/README.md +3 -0
  2. package/defines/date-dropdown.define.d.ts +40 -0
  3. package/directive/date-dropdown.directive.d.ts +11 -0
  4. package/dropdown.component.d.ts +88 -0
  5. package/esm2022/defines/date-dropdown.define.mjs +248 -0
  6. package/esm2022/directive/date-dropdown.directive.mjs +33 -0
  7. package/esm2022/dropdown.component.mjs +274 -0
  8. package/esm2022/index.mjs +2 -0
  9. package/esm2022/interfaces/date-dropdown.interface.mjs +7 -0
  10. package/esm2022/interfaces/emit-dropdown.interface.mjs +2 -0
  11. package/esm2022/interfaces/functions-control-event.interface.mjs +2 -0
  12. package/esm2022/interfaces/valid.interface.mjs +3 -0
  13. package/esm2022/item/child/child.component.mjs +124 -0
  14. package/esm2022/item/item.component.mjs +216 -0
  15. package/esm2022/libs-ui-components-datetime-dropdown.mjs +5 -0
  16. package/esm2022/pipes/build-list-by-date-type-.pipe.mjs +19 -0
  17. package/esm2022/pipes/build-width.pipe.mjs +23 -0
  18. package/fesm2022/libs-ui-components-datetime-dropdown.mjs +922 -0
  19. package/fesm2022/libs-ui-components-datetime-dropdown.mjs.map +1 -0
  20. package/index.d.ts +1 -0
  21. package/interfaces/date-dropdown.interface.d.ts +47 -0
  22. package/interfaces/emit-dropdown.interface.d.ts +11 -0
  23. package/interfaces/functions-control-event.interface.d.ts +11 -0
  24. package/interfaces/valid.interface.d.ts +10 -0
  25. package/item/child/child.component.d.ts +51 -0
  26. package/item/item.component.d.ts +59 -0
  27. package/package.json +25 -0
  28. package/pipes/build-list-by-date-type-.pipe.d.ts +15 -0
  29. package/pipes/build-width.pipe.d.ts +7 -0
@@ -0,0 +1,274 @@
1
+ import { ChangeDetectionStrategy, Component, computed, effect, inject, input, output, signal, untracked, viewChild } from "@angular/core";
2
+ import { LibsUiComponentsLabelComponent } from "@libs-ui/components-label";
3
+ import { TranslateModule, TranslateService } from "@ngx-translate/core";
4
+ import { fromEvent, Subject, takeUntil, timer } from "rxjs";
5
+ import { CompareDate } from "./defines/date-dropdown.define";
6
+ import { LibsUiComponentsDatetimeDropdownDirective } from "./directive/date-dropdown.directive";
7
+ import { LibsUiComponentsDatetimeDropdownItemComponent } from "./item/item.component";
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@ngx-translate/core";
10
+ export class LibsUiComponentsDatetimeDropdownComponent {
11
+ /* PROPERTY */
12
+ width = signal(0);
13
+ widthElement = signal(undefined);
14
+ widthLabel = signal(undefined);
15
+ widthLabelFrom = signal(0);
16
+ widthLabelTo = signal(0);
17
+ isErrorCompareDate = signal(undefined);
18
+ chooseDate = signal({ from: signal({}), to: signal({}) });
19
+ isResponsive = signal(undefined);
20
+ arrayFormat = computed(() => {
21
+ return this.typeFormat().split('-');
22
+ });
23
+ changeType = signal(undefined);
24
+ cacheWidthLabel = signal(undefined);
25
+ timeOut = signal(undefined);
26
+ onDestroy = new Subject();
27
+ functionsControl = new Map();
28
+ /* INPUT */
29
+ labelConfig = input(undefined);
30
+ widthDropdown = input(136, { transform: (value) => value ?? 136 });
31
+ zIndex = input(1200, { transform: (value) => value ?? 1200 });
32
+ maxYear = input(0);
33
+ minYear = input(0);
34
+ minWidth = input(undefined);
35
+ disable = input(false);
36
+ readonly = input(false);
37
+ isMultiple = input(false);
38
+ reverseYear = input(undefined);
39
+ isBorderError = input(false);
40
+ ignoreWidth100 = input(false);
41
+ widthByElement = input(false);
42
+ disableSecond = input(false);
43
+ typeFormat = input('month-day', { transform: (value) => value ?? 'month-day' });
44
+ fromAndToDateLabel = input({ from: 'i18n_label_from', to: 'i18n_to' });
45
+ listHasButtonUnSelectOption = input(false);
46
+ selectedDateTime = input(undefined);
47
+ isEmitAfterChanged = input(false); // dùng để emit mỗi lần chọn giá trị và lần đầu init
48
+ getItemYearDisplay = input();
49
+ ignoreFromAndToDateLabel = input(false);
50
+ classIncludeTextDisplayWhenNoSelect = input(undefined);
51
+ hiddenDate = input();
52
+ listMaxItemShow = input(undefined);
53
+ ignoreConvertYearSelected = input(false);
54
+ listKeysDisable = input(undefined);
55
+ ignoreAllowTimeEqual = input(true, { transform: (value) => value ?? true });
56
+ ignoreValidTimeCompare = input(false, { transform: (value) => value ?? false });
57
+ isCheckErrorWhenSelectItem = input(true, { transform: (value) => value ?? true });
58
+ ignoreRequiredValueSecondWhenNotValidRequired = input(false); // có validate giá trị thứ 2 khi validRequired không?
59
+ validRequired = input();
60
+ /* OUTPUT */
61
+ outFunctionsControl = output();
62
+ outSelectedDropdown = output(); // dùng cho trường hợp emit mỗi một lần chọn giá trị nên khi sử dụng phải check kĩ undefined
63
+ outChooseMultiDate = output();
64
+ outChooseSingleDate = output();
65
+ outChangStageFlagMouse = output();
66
+ /* VIEW CHILD */
67
+ containerRef = viewChild('parent');
68
+ labelFromRef = viewChild('labelFrom');
69
+ labelToRef = viewChild('labelTo');
70
+ /* INJECT */
71
+ translate = inject(TranslateService);
72
+ constructor() {
73
+ effect(() => {
74
+ const isMultiple = this.isMultiple();
75
+ if (!isMultiple) {
76
+ return;
77
+ }
78
+ untracked(() => {
79
+ this.changeType.set(true);
80
+ this.functionsControl.clear();
81
+ timer(0).pipe().subscribe(() => {
82
+ this.checkResponsive();
83
+ this.changeType.set(false);
84
+ });
85
+ });
86
+ });
87
+ }
88
+ ngOnInit() {
89
+ this.outFunctionsControl.emit({ checkIsValid: this.validate.bind(this), resetError: this.resetError.bind(this), resetTime: this.resetDropdown.bind(this) });
90
+ if (this.selectedDateTime()) {
91
+ this.chooseDate.set(this.selectedDateTime());
92
+ }
93
+ }
94
+ ngAfterViewInit() {
95
+ fromEvent(window, 'resize').pipe(takeUntil(this.onDestroy)).subscribe(this.setWidthDate.bind(this));
96
+ this.widthLabel.set(undefined);
97
+ timer(0).pipe().subscribe(() => {
98
+ this.checkResponsive();
99
+ });
100
+ }
101
+ checkResponsive() {
102
+ this.isResponsive.set(false);
103
+ const widthElementParent = this.containerRef()?.nativeElement?.getBoundingClientRect().width || 0;
104
+ this.widthLabelFrom.set(this.labelFromRef()?.nativeElement?.getBoundingClientRect().width || 0);
105
+ this.widthLabelTo.set(this.labelToRef()?.nativeElement?.getBoundingClientRect().width || 0);
106
+ const spaceBetweenDate = (this.arrayFormat().length * 2) + (this.fromAndToDateLabel().from ? 1 : 0);
107
+ const width = (this.widthDropdown() * 4) + (8 * spaceBetweenDate) + this.widthLabelFrom() + this.widthLabelTo();
108
+ console.log(widthElementParent);
109
+ if (widthElementParent < width) {
110
+ this.isResponsive.set(true);
111
+ }
112
+ }
113
+ handlerChangeSelectedKey(event, type) {
114
+ this.chooseDate.update(current => {
115
+ if (current) {
116
+ current[type].set(event);
117
+ }
118
+ return current;
119
+ });
120
+ if (this.isEmitAfterChanged()) {
121
+ const dataEmit = this.isMultiple() ? this.chooseDate() : this.chooseDate()?.from();
122
+ if (dataEmit) {
123
+ this.outSelectedDropdown.emit(dataEmit);
124
+ }
125
+ }
126
+ this.applyDate();
127
+ }
128
+ async resetDropdown() {
129
+ this.functionsControl.forEach(control => control.resetDropdown());
130
+ }
131
+ async resetError() {
132
+ this.functionsControl.forEach(control => control.resetError());
133
+ }
134
+ setWidthDate() {
135
+ if (!this.containerRef() || !this.containerRef()?.nativeElement) {
136
+ return;
137
+ }
138
+ timer(0).pipe().subscribe(() => {
139
+ this.checkResponsive();
140
+ });
141
+ }
142
+ handlerFunctionControl(event, type) {
143
+ this.functionsControl.set(type, event);
144
+ }
145
+ async checkValid() {
146
+ let valid = true;
147
+ for (const control of this.functionsControl.values()) {
148
+ if (!(await control.checkIsValid())) {
149
+ valid = false;
150
+ }
151
+ }
152
+ if (this.compareDate()) {
153
+ valid = false;
154
+ }
155
+ return valid;
156
+ }
157
+ setError(error) {
158
+ this.functionsControl.forEach(control => control.setError(error));
159
+ }
160
+ compareDate() {
161
+ const type = this.typeFormat().split('-');
162
+ const dateCompare = [];
163
+ type.forEach(item => {
164
+ const from = this.chooseDate()?.from()[item];
165
+ const to = this.chooseDate()?.to()[item];
166
+ dateCompare.push({ from: from, to: to });
167
+ });
168
+ if (this.ignoreValidTimeCompare() || !this.checkCondition(true)) {
169
+ this.isErrorCompareDate.set(false);
170
+ return false;
171
+ }
172
+ if (CompareDate(dateCompare, this.ignoreAllowTimeEqual())) {
173
+ this.setError(true);
174
+ this.isErrorCompareDate.set(true);
175
+ return true;
176
+ }
177
+ this.isErrorCompareDate.set(false);
178
+ return false;
179
+ }
180
+ async validate() {
181
+ let valid = true;
182
+ if (!this.validRequired()) {
183
+ if (!this.checkCondition(false) && !this.ignoreRequiredValueSecondWhenNotValidRequired()) {
184
+ valid = await this.checkValid();
185
+ }
186
+ return valid;
187
+ }
188
+ return await this.checkValid();
189
+ }
190
+ checkCondition(hasValue) {
191
+ let checkValue = true;
192
+ const type = this.typeFormat().split('-');
193
+ type.forEach(item => {
194
+ if (hasValue && (!this.chooseDate()?.from()[item] || !this.chooseDate()?.to()[item])) {
195
+ checkValue = false;
196
+ }
197
+ if (!hasValue && (this.chooseDate()?.from()[item] || this.chooseDate()?.to()[item])) {
198
+ checkValue = false;
199
+ }
200
+ });
201
+ return checkValue;
202
+ }
203
+ applyDate() {
204
+ this.setError(false);
205
+ this.isErrorCompareDate.set(false);
206
+ if (this.isCheckErrorWhenSelectItem() && !this.validate()) {
207
+ return;
208
+ }
209
+ const from = this.chooseDate()?.from;
210
+ const to = this.chooseDate()?.to;
211
+ console.log(from?.(), to?.(), this.isMultiple());
212
+ if (this.isMultiple()) {
213
+ if (this.compareDate()) {
214
+ return;
215
+ }
216
+ let dataSelected = { from: signal({}), to: signal({}) };
217
+ this.arrayFormat().forEach(key => {
218
+ if (!from?.()?.[key] || !to?.()?.[key]) {
219
+ dataSelected = undefined;
220
+ }
221
+ if (dataSelected) {
222
+ dataSelected.from.update(current => {
223
+ current[key] = Number(from?.()[key]);
224
+ return current;
225
+ });
226
+ dataSelected.to.update(current => {
227
+ current[key] = Number(to?.()[key]);
228
+ return current;
229
+ });
230
+ }
231
+ });
232
+ if (dataSelected) {
233
+ this.outChooseMultiDate.emit(dataSelected);
234
+ }
235
+ return;
236
+ }
237
+ let dataSelected = {};
238
+ this.arrayFormat().forEach(key => {
239
+ if (!from?.()?.[key]) {
240
+ dataSelected = undefined;
241
+ }
242
+ if (dataSelected) {
243
+ dataSelected[key] = Number(from?.()?.[key]);
244
+ }
245
+ });
246
+ if (dataSelected) {
247
+ this.outChooseSingleDate.emit(dataSelected);
248
+ }
249
+ }
250
+ handlerChangeWidthLabel(width) {
251
+ this.cacheWidthLabel.set(width < (this.cacheWidthLabel() || 0) ? this.cacheWidthLabel() : Math.ceil(width));
252
+ if (this.timeOut()) {
253
+ clearTimeout(this.timeOut());
254
+ }
255
+ this.timeOut.set(setTimeout(() => {
256
+ this.widthLabel.set(this.cacheWidthLabel());
257
+ }, 100));
258
+ }
259
+ handlerChangStageFlagMouse(flagMouse) {
260
+ this.outChangStageFlagMouse.emit(flagMouse);
261
+ }
262
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsDatetimeDropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
263
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsDatetimeDropdownComponent, isStandalone: true, selector: "libs_ui-components-datetime-dropdown", inputs: { labelConfig: { classPropertyName: "labelConfig", publicName: "labelConfig", isSignal: true, isRequired: false, transformFunction: null }, widthDropdown: { classPropertyName: "widthDropdown", publicName: "widthDropdown", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, maxYear: { classPropertyName: "maxYear", publicName: "maxYear", isSignal: true, isRequired: false, transformFunction: null }, minYear: { classPropertyName: "minYear", publicName: "minYear", isSignal: true, isRequired: false, transformFunction: null }, minWidth: { classPropertyName: "minWidth", publicName: "minWidth", isSignal: true, isRequired: false, transformFunction: null }, disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, isMultiple: { classPropertyName: "isMultiple", publicName: "isMultiple", isSignal: true, isRequired: false, transformFunction: null }, reverseYear: { classPropertyName: "reverseYear", publicName: "reverseYear", isSignal: true, isRequired: false, transformFunction: null }, isBorderError: { classPropertyName: "isBorderError", publicName: "isBorderError", isSignal: true, isRequired: false, transformFunction: null }, ignoreWidth100: { classPropertyName: "ignoreWidth100", publicName: "ignoreWidth100", isSignal: true, isRequired: false, transformFunction: null }, widthByElement: { classPropertyName: "widthByElement", publicName: "widthByElement", isSignal: true, isRequired: false, transformFunction: null }, disableSecond: { classPropertyName: "disableSecond", publicName: "disableSecond", isSignal: true, isRequired: false, transformFunction: null }, typeFormat: { classPropertyName: "typeFormat", publicName: "typeFormat", isSignal: true, isRequired: false, transformFunction: null }, fromAndToDateLabel: { classPropertyName: "fromAndToDateLabel", publicName: "fromAndToDateLabel", isSignal: true, isRequired: false, transformFunction: null }, listHasButtonUnSelectOption: { classPropertyName: "listHasButtonUnSelectOption", publicName: "listHasButtonUnSelectOption", isSignal: true, isRequired: false, transformFunction: null }, selectedDateTime: { classPropertyName: "selectedDateTime", publicName: "selectedDateTime", isSignal: true, isRequired: false, transformFunction: null }, isEmitAfterChanged: { classPropertyName: "isEmitAfterChanged", publicName: "isEmitAfterChanged", isSignal: true, isRequired: false, transformFunction: null }, getItemYearDisplay: { classPropertyName: "getItemYearDisplay", publicName: "getItemYearDisplay", isSignal: true, isRequired: false, transformFunction: null }, ignoreFromAndToDateLabel: { classPropertyName: "ignoreFromAndToDateLabel", publicName: "ignoreFromAndToDateLabel", isSignal: true, isRequired: false, transformFunction: null }, classIncludeTextDisplayWhenNoSelect: { classPropertyName: "classIncludeTextDisplayWhenNoSelect", publicName: "classIncludeTextDisplayWhenNoSelect", isSignal: true, isRequired: false, transformFunction: null }, hiddenDate: { classPropertyName: "hiddenDate", publicName: "hiddenDate", isSignal: true, isRequired: false, transformFunction: null }, listMaxItemShow: { classPropertyName: "listMaxItemShow", publicName: "listMaxItemShow", isSignal: true, isRequired: false, transformFunction: null }, ignoreConvertYearSelected: { classPropertyName: "ignoreConvertYearSelected", publicName: "ignoreConvertYearSelected", isSignal: true, isRequired: false, transformFunction: null }, listKeysDisable: { classPropertyName: "listKeysDisable", publicName: "listKeysDisable", isSignal: true, isRequired: false, transformFunction: null }, ignoreAllowTimeEqual: { classPropertyName: "ignoreAllowTimeEqual", publicName: "ignoreAllowTimeEqual", isSignal: true, isRequired: false, transformFunction: null }, ignoreValidTimeCompare: { classPropertyName: "ignoreValidTimeCompare", publicName: "ignoreValidTimeCompare", isSignal: true, isRequired: false, transformFunction: null }, isCheckErrorWhenSelectItem: { classPropertyName: "isCheckErrorWhenSelectItem", publicName: "isCheckErrorWhenSelectItem", isSignal: true, isRequired: false, transformFunction: null }, ignoreRequiredValueSecondWhenNotValidRequired: { classPropertyName: "ignoreRequiredValueSecondWhenNotValidRequired", publicName: "ignoreRequiredValueSecondWhenNotValidRequired", isSignal: true, isRequired: false, transformFunction: null }, validRequired: { classPropertyName: "validRequired", publicName: "validRequired", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { outFunctionsControl: "outFunctionsControl", outSelectedDropdown: "outSelectedDropdown", outChooseMultiDate: "outChooseMultiDate", outChooseSingleDate: "outChooseSingleDate", outChangStageFlagMouse: "outChangStageFlagMouse" }, viewQueries: [{ propertyName: "containerRef", first: true, predicate: ["parent"], descendants: true, isSignal: true }, { propertyName: "labelFromRef", first: true, predicate: ["labelFrom"], descendants: true, isSignal: true }, { propertyName: "labelToRef", first: true, predicate: ["labelTo"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (labelConfig(); as labelConfig) {\n <libs_ui-components-label [classInclude]=\"labelConfig.classInclude\"\n [labelLeft]=\"labelConfig.labelLeft\"\n [labelLeftClass]=\"labelConfig.labelLeftClass\"\n [required]=\"labelConfig.required \"\n [description]=\"labelConfig.description\"\n [labelRight]=\"labelConfig.labelRight\"\n [labelRightClass]=\"labelConfig.labelRightClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [buttonsLeft]=\"labelConfig.buttonsLeft\"\n [buttonsRight]=\"labelConfig.buttonsRight\"\n [buttonsDescription]=\"labelConfig.buttonsDescription\"\n [descriptionClass]=\"labelConfig.descriptionClass\"\n [disableButtonsLeft]=\"labelConfig.disableButtonsLeft\"\n [disableButtonsRight]=\"labelConfig.disableButtonsRight\"\n [hasToggle]=\"labelConfig.hasToggle\"\n [toggleActive]=\"labelConfig.toggleActive\"\n [toggleDisable]=\"labelConfig.toggleDisable || disable()\"\n [popover]=\"labelConfig.popover\"\n [iconPopoverClass]=\"labelConfig.iconPopoverClass\"\n [limitLength]=\"labelConfig.limitLength\"\n [count]=\"labelConfig.count\" />\n}\n<div #parent\n class=\"flex items-start\"\n [class.!w-full]=\"widthByElement()\"\n [class.!column]=\"isResponsive() && isMultiple()\">\n <div #childFrom\n class=\"flex items-start\"\n [class.w-[50%]]=\"widthByElement() && !isResponsive()\"\n [class.!mb-[8px]]=\"isResponsive() && isMultiple()\"\n [class.!mr-[8px]]=\"!isResponsive() && isMultiple()\"\n [class.w-full]=\"!isMultiple() && !widthByElement() || isResponsive()\"\n [style.width.px]=\"!widthByElement() && isMultiple() && !isResponsive() ?((widthDropdown() * arrayFormat().length)+(8 * arrayFormat().length) + widthLabelFrom()):undefined\">\n\n @if (isMultiple() && !ignoreFromAndToDateLabel() && fromAndToDateLabel().from) {\n <div class=\"mr-[8px] flex-shrink-0 h-[32px] flex items-center\"\n [style.width.px]=\"isResponsive() ? (widthLabel() || undefined) : undefined\">\n <span #labelFrom\n LibsUiComponentsDatetimeDropdownDirective\n [class.!opacity-[0.5]]=\"disable()\"\n class=\"libs-ui-font-h5r text-nowrap {{ fromAndToDateLabel().classLabelFrom || '' }}\"\n (outChangeWidth)=\"handlerChangeWidthLabel($event)\">\n {{ (fromAndToDateLabel().from||' ')| translate }}\n </span>\n </div>\n }\n <div class=\"flex\"\n [class.!w-full]=\"widthByElement()\">\n @if (!changeType()) {\n <libs_ui-components-datetime-dropdown-item [class.!w-full]=\"widthByElement()\"\n [disableSecond]=\"disableSecond()\"\n [typeDate]=\"typeFormat()\"\n [zIndex]=\"zIndex()\"\n [maxYear]=\"maxYear()\"\n [disable]=\"disable()\"\n [minYear]=\"minYear()\"\n [readonly]=\"readonly()\"\n [isMultiple]=\"isMultiple() ? isResponsive() ? true : false : true\"\n [reverseYear]=\"reverseYear()\"\n [selectedDate]=\"selectedDateTime()?.from() || {}\"\n [widthDropdown]=\"widthDropdown()\"\n [widthByElement]=\"widthByElement()\"\n [getItemYearDisplay]=\"getItemYearDisplay()\"\n [listMaxItemShow]=\"listMaxItemShow()\"\n [listKeysDisable]=\"listKeysDisable()?.from()\"\n [listHasButtonUnSelectOption]=\"listHasButtonUnSelectOption()\"\n [isEmitSelectedDropDown]=\"isEmitAfterChanged()\"\n [classIncludeTextDisplayWhenNoSelect]=\"'libs-ui-font-h5r ' + classIncludeTextDisplayWhenNoSelect()\"\n (outSelectedData)=\"handlerChangeSelectedKey($event, 'from')\"\n (outFunctionControl)=\"handlerFunctionControl($event,'from')\"\n (outChangStageFlagMouse)=\"handlerChangStageFlagMouse($event)\" />\n }\n </div>\n </div>\n @if (isMultiple()) {\n <div #childTo\n [class.!w-[50%]]=\"widthByElement()\"\n [class.!w-full]=\" !widthByElement() || isResponsive()\"\n class=\"flex items-start\">\n <div class=\"mr-[8px] h-[32px] flex-shrink-0 flex items-center\"\n [style.width.px]=\"isResponsive() ? widthLabel() : undefined\">\n @if (!ignoreFromAndToDateLabel()) {\n <span #labelTo\n LibsUiComponentsDatetimeDropdownDirective\n [class.!opacity-[0.5]]=\"disable()\"\n class=\"libs-ui-font-h5r text-nowrap {{ fromAndToDateLabel().classLabelTo || '' }}\"\n (outChangeWidth)=\"handlerChangeWidthLabel($event)\">\n {{ (fromAndToDateLabel().to||' ')| translate }}\n </span>\n }\n @if (ignoreFromAndToDateLabel()) {\n <span [class.!opacity-[0.5]]=\"disable()\"\n class=\"libs-ui-font-h5r\">-</span>\n }\n </div>\n <div class=\"flex\"\n [class.!w-full]=\"widthByElement()\">\n @if (!changeType()) {\n <libs_ui-components-datetime-dropdown-item [class.w-full]=\"widthByElement()\"\n [disableSecond]=\"disableSecond()\"\n [typeDate]=\"typeFormat()\"\n [zIndex]=\"zIndex()\"\n [maxYear]=\"maxYear()\"\n [disable]=\"disable()\"\n [minYear]=\"minYear()\"\n [readonly]=\"readonly()\"\n [isMultiple]=\"isMultiple()\"\n [reverseYear]=\"reverseYear()\"\n [selectedDate]=\"selectedDateTime()?.to() || {}\"\n [widthDropdown]=\"widthDropdown()\"\n [widthByElement]=\"widthByElement()\"\n [getItemYearDisplay]=\"getItemYearDisplay()\"\n [listMaxItemShow]=\"listMaxItemShow()\"\n [listKeysDisable]=\"listKeysDisable()?.to()\"\n [listHasButtonUnSelectOption]=\"listHasButtonUnSelectOption()\"\n [classIncludeTextDisplayWhenNoSelect]=\"'libs-ui-font-h5r ' + classIncludeTextDisplayWhenNoSelect\"\n [isEmitSelectedDropDown]=\"isEmitAfterChanged()\"\n (outSelectedData)=\"handlerChangeSelectedKey($event, 'to')\"\n (outFunctionControl)=\"handlerFunctionControl($event,'to')\"\n (outChangStageFlagMouse)=\"handlerChangStageFlagMouse($event)\" />\n }\n </div>\n </div>\n }\n</div>\n\n@if (isErrorCompareDate()) {\n <div class=\"flex items-center mt-[4px]\">\n <span class=\"libs-ui-message-error libs-ui-font-h7r libs-ui-text-error\">{{ validRequired()?.messageValidCompareTime || \"i18n_invalid_end_date_selected\" | translate:validRequired()?.interpolateParamsCompareTime }}</span>\n </div>\n}\n", styles: [""], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: LibsUiComponentsLabelComponent, selector: "libs_ui-components-label", inputs: ["iconPopoverClass", "classInclude", "labelLeft", "labelLeftClass", "labelLeftBehindToggleButton", "popover", "required", "buttonsLeft", "disableButtonsLeft", "buttonsRight", "disableButtonsRight", "labelRight", "labelRightClass", "labelRightRequired", "hasToggle", "toggleSize", "toggleActive", "toggleDisable", "description", "descriptionClass", "buttonsDescription", "disableButtonsDescription", "buttonsDescriptionContainerClass", "onlyShowCount", "zIndexPopover", "timerDestroyPopover", "count", "limitLength"], outputs: ["outClickButton", "outSwitchEvent", "outLabelRightClick", "outLabelLeftClick"] }, { kind: "directive", type: LibsUiComponentsDatetimeDropdownDirective, selector: "[LibsUiComponentsDatetimeDropdownDirective]", outputs: ["outChangeWidth"] }, { kind: "component", type: LibsUiComponentsDatetimeDropdownItemComponent, selector: "libs_ui-components-datetime-dropdown-item", inputs: ["typeDate", "disableSecond", "selectedDate", "widthDropdown", "widthByElement", "getItemYearDisplay", "listHasButtonUnSelectOption", "readonly", "disable", "zIndex", "isMultiple", "classIncludeTextDisplayWhenNoSelect", "isCheckErrorWhenSelectItem", "maxYear", "minYear", "reverseYear", "listKeysDisable", "ignoreConvertYearSelected", "validRequired", "isEmitSelectedDropDown", "listMaxItemShow"], outputs: ["outSelectedData", "outFunctionControl", "outChangStageFlagMouse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
264
+ }
265
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsDatetimeDropdownComponent, decorators: [{
266
+ type: Component,
267
+ args: [{ selector: 'libs_ui-components-datetime-dropdown', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
268
+ TranslateModule,
269
+ LibsUiComponentsLabelComponent,
270
+ LibsUiComponentsDatetimeDropdownDirective,
271
+ LibsUiComponentsDatetimeDropdownItemComponent
272
+ ], template: "@if (labelConfig(); as labelConfig) {\n <libs_ui-components-label [classInclude]=\"labelConfig.classInclude\"\n [labelLeft]=\"labelConfig.labelLeft\"\n [labelLeftClass]=\"labelConfig.labelLeftClass\"\n [required]=\"labelConfig.required \"\n [description]=\"labelConfig.description\"\n [labelRight]=\"labelConfig.labelRight\"\n [labelRightClass]=\"labelConfig.labelRightClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [buttonsLeft]=\"labelConfig.buttonsLeft\"\n [buttonsRight]=\"labelConfig.buttonsRight\"\n [buttonsDescription]=\"labelConfig.buttonsDescription\"\n [descriptionClass]=\"labelConfig.descriptionClass\"\n [disableButtonsLeft]=\"labelConfig.disableButtonsLeft\"\n [disableButtonsRight]=\"labelConfig.disableButtonsRight\"\n [hasToggle]=\"labelConfig.hasToggle\"\n [toggleActive]=\"labelConfig.toggleActive\"\n [toggleDisable]=\"labelConfig.toggleDisable || disable()\"\n [popover]=\"labelConfig.popover\"\n [iconPopoverClass]=\"labelConfig.iconPopoverClass\"\n [limitLength]=\"labelConfig.limitLength\"\n [count]=\"labelConfig.count\" />\n}\n<div #parent\n class=\"flex items-start\"\n [class.!w-full]=\"widthByElement()\"\n [class.!column]=\"isResponsive() && isMultiple()\">\n <div #childFrom\n class=\"flex items-start\"\n [class.w-[50%]]=\"widthByElement() && !isResponsive()\"\n [class.!mb-[8px]]=\"isResponsive() && isMultiple()\"\n [class.!mr-[8px]]=\"!isResponsive() && isMultiple()\"\n [class.w-full]=\"!isMultiple() && !widthByElement() || isResponsive()\"\n [style.width.px]=\"!widthByElement() && isMultiple() && !isResponsive() ?((widthDropdown() * arrayFormat().length)+(8 * arrayFormat().length) + widthLabelFrom()):undefined\">\n\n @if (isMultiple() && !ignoreFromAndToDateLabel() && fromAndToDateLabel().from) {\n <div class=\"mr-[8px] flex-shrink-0 h-[32px] flex items-center\"\n [style.width.px]=\"isResponsive() ? (widthLabel() || undefined) : undefined\">\n <span #labelFrom\n LibsUiComponentsDatetimeDropdownDirective\n [class.!opacity-[0.5]]=\"disable()\"\n class=\"libs-ui-font-h5r text-nowrap {{ fromAndToDateLabel().classLabelFrom || '' }}\"\n (outChangeWidth)=\"handlerChangeWidthLabel($event)\">\n {{ (fromAndToDateLabel().from||' ')| translate }}\n </span>\n </div>\n }\n <div class=\"flex\"\n [class.!w-full]=\"widthByElement()\">\n @if (!changeType()) {\n <libs_ui-components-datetime-dropdown-item [class.!w-full]=\"widthByElement()\"\n [disableSecond]=\"disableSecond()\"\n [typeDate]=\"typeFormat()\"\n [zIndex]=\"zIndex()\"\n [maxYear]=\"maxYear()\"\n [disable]=\"disable()\"\n [minYear]=\"minYear()\"\n [readonly]=\"readonly()\"\n [isMultiple]=\"isMultiple() ? isResponsive() ? true : false : true\"\n [reverseYear]=\"reverseYear()\"\n [selectedDate]=\"selectedDateTime()?.from() || {}\"\n [widthDropdown]=\"widthDropdown()\"\n [widthByElement]=\"widthByElement()\"\n [getItemYearDisplay]=\"getItemYearDisplay()\"\n [listMaxItemShow]=\"listMaxItemShow()\"\n [listKeysDisable]=\"listKeysDisable()?.from()\"\n [listHasButtonUnSelectOption]=\"listHasButtonUnSelectOption()\"\n [isEmitSelectedDropDown]=\"isEmitAfterChanged()\"\n [classIncludeTextDisplayWhenNoSelect]=\"'libs-ui-font-h5r ' + classIncludeTextDisplayWhenNoSelect()\"\n (outSelectedData)=\"handlerChangeSelectedKey($event, 'from')\"\n (outFunctionControl)=\"handlerFunctionControl($event,'from')\"\n (outChangStageFlagMouse)=\"handlerChangStageFlagMouse($event)\" />\n }\n </div>\n </div>\n @if (isMultiple()) {\n <div #childTo\n [class.!w-[50%]]=\"widthByElement()\"\n [class.!w-full]=\" !widthByElement() || isResponsive()\"\n class=\"flex items-start\">\n <div class=\"mr-[8px] h-[32px] flex-shrink-0 flex items-center\"\n [style.width.px]=\"isResponsive() ? widthLabel() : undefined\">\n @if (!ignoreFromAndToDateLabel()) {\n <span #labelTo\n LibsUiComponentsDatetimeDropdownDirective\n [class.!opacity-[0.5]]=\"disable()\"\n class=\"libs-ui-font-h5r text-nowrap {{ fromAndToDateLabel().classLabelTo || '' }}\"\n (outChangeWidth)=\"handlerChangeWidthLabel($event)\">\n {{ (fromAndToDateLabel().to||' ')| translate }}\n </span>\n }\n @if (ignoreFromAndToDateLabel()) {\n <span [class.!opacity-[0.5]]=\"disable()\"\n class=\"libs-ui-font-h5r\">-</span>\n }\n </div>\n <div class=\"flex\"\n [class.!w-full]=\"widthByElement()\">\n @if (!changeType()) {\n <libs_ui-components-datetime-dropdown-item [class.w-full]=\"widthByElement()\"\n [disableSecond]=\"disableSecond()\"\n [typeDate]=\"typeFormat()\"\n [zIndex]=\"zIndex()\"\n [maxYear]=\"maxYear()\"\n [disable]=\"disable()\"\n [minYear]=\"minYear()\"\n [readonly]=\"readonly()\"\n [isMultiple]=\"isMultiple()\"\n [reverseYear]=\"reverseYear()\"\n [selectedDate]=\"selectedDateTime()?.to() || {}\"\n [widthDropdown]=\"widthDropdown()\"\n [widthByElement]=\"widthByElement()\"\n [getItemYearDisplay]=\"getItemYearDisplay()\"\n [listMaxItemShow]=\"listMaxItemShow()\"\n [listKeysDisable]=\"listKeysDisable()?.to()\"\n [listHasButtonUnSelectOption]=\"listHasButtonUnSelectOption()\"\n [classIncludeTextDisplayWhenNoSelect]=\"'libs-ui-font-h5r ' + classIncludeTextDisplayWhenNoSelect\"\n [isEmitSelectedDropDown]=\"isEmitAfterChanged()\"\n (outSelectedData)=\"handlerChangeSelectedKey($event, 'to')\"\n (outFunctionControl)=\"handlerFunctionControl($event,'to')\"\n (outChangStageFlagMouse)=\"handlerChangStageFlagMouse($event)\" />\n }\n </div>\n </div>\n }\n</div>\n\n@if (isErrorCompareDate()) {\n <div class=\"flex items-center mt-[4px]\">\n <span class=\"libs-ui-message-error libs-ui-font-h7r libs-ui-text-error\">{{ validRequired()?.messageValidCompareTime || \"i18n_invalid_end_date_selected\" | translate:validRequired()?.interpolateParamsCompareTime }}</span>\n </div>\n}\n" }]
273
+ }], ctorParameters: () => [] });
274
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2RhdGV0aW1lL2Ryb3Bkb3duL3NyYy9kcm9wZG93bi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvZGF0ZXRpbWUvZHJvcGRvd24vc3JjL2Ryb3Bkb3duLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQWMsTUFBTSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0ssT0FBTyxFQUFVLDhCQUE4QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFbkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzdELE9BQU8sRUFBRSx5Q0FBeUMsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBS2hHLE9BQU8sRUFBRSw2Q0FBNkMsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7QUFpQnRGLE1BQU0sT0FBTyx5Q0FBeUM7SUFDcEQsY0FBYztJQUNKLEtBQUssR0FBRyxNQUFNLENBQVMsQ0FBQyxDQUFDLENBQUM7SUFDMUIsWUFBWSxHQUFHLE1BQU0sQ0FBcUIsU0FBUyxDQUFDLENBQUM7SUFDckQsVUFBVSxHQUFHLE1BQU0sQ0FBcUIsU0FBUyxDQUFDLENBQUM7SUFDbkQsY0FBYyxHQUFHLE1BQU0sQ0FBUyxDQUFDLENBQUMsQ0FB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QUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzVHLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDbkIsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLENBQUM7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBRSxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2hDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLENBQUMsRUFBRSxHQUFHLENBQXVCLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRVMsMEJBQTBCLENBQUMsU0FBcUI7UUFDeEQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM5QyxDQUFDO3dHQWhUVSx5Q0FBeUM7NEZBQXpDLHlDQUF5QyxxektDNUJ0RCx5ME1Bb0lBLHlERC9HSSxlQUFlLDRGQUNmLDhCQUE4Qiw0cUJBQzlCLHlDQUF5QyxxSEFDekMsNkNBQTZDOzs0RkFJcEMseUNBQXlDO2tCQWZyRCxTQUFTOytCQUVFLHNDQUFzQyxjQUdwQyxJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sV0FDdEM7d0JBQ1AsZUFBZTt3QkFDZiw4QkFBOEI7d0JBQzlCLHlDQUF5Qzt3QkFDekMsNkNBQTZDO3FCQUM5QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBlZmZlY3QsIEVsZW1lbnRSZWYsIGluamVjdCwgaW5wdXQsIE9uSW5pdCwgb3V0cHV0LCBzaWduYWwsIHVudHJhY2tlZCwgdmlld0NoaWxkIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IElMYWJlbCwgTGlic1VpQ29tcG9uZW50c0xhYmVsQ29tcG9uZW50IH0gZnJvbSBcIkBsaWJzLXVpL2NvbXBvbmVudHMtbGFiZWxcIjtcbmltcG9ydCB7IElGbGFnTW91c2UgfSBmcm9tIFwiQGxpYnMtdWkvY29tcG9uZW50cy1wb3BvdmVyXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBTdWJqZWN0LCB0YWtlVW50aWwsIHRpbWVyIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IENvbXBhcmVEYXRlIH0gZnJvbSBcIi4vZGVmaW5lcy9kYXRlLWRyb3Bkb3duLmRlZmluZVwiO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0RhdGV0aW1lRHJvcGRvd25EaXJlY3RpdmUgfSBmcm9tIFwiLi9kaXJlY3RpdmUvZGF0ZS1kcm9wZG93bi5kaXJlY3RpdmVcIjtcbmltcG9ydCB7IElEYXRlRHJvcGRvd25EaXNhYmxlS2V5cywgSUZyb21BbmRUb0RhdGVMYWJlbCwgSUhpZGRlbkRhdGUsIFRZUEVfREFURV9EUk9QRE9XTl9GT1JNQVQsIFRZUEVfREFURV9GT1JNQVQgfSBmcm9tIFwiLi9pbnRlcmZhY2VzL2RhdGUtZHJvcGRvd24uaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBJRW1pdE11bHRpRGF0ZURyb3Bkb3duLCBJRW1pdFNpbmdsZURhdGVEcm9wZG93biB9IGZyb20gXCIuL2ludGVyZmFjZXMvZW1pdC1kcm9wZG93bi5pbnRlcmZhY2VcIjtcbmltcG9ydCB7IElEYXRlRHJvcGRvd25GdW5jdGlvbkNvbnRyb2xFdmVudCwgSURhdGVEcm9wZG93bkl0ZW1GdW5jdGlvbkNvbnRyb2xFdmVudCB9IGZyb20gXCIuL2ludGVyZmFjZXMvZnVuY3Rpb25zLWNvbnRyb2wtZXZlbnQuaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBJVmFsaWREYXRlRHJvcGRvd24gfSBmcm9tIFwiLi9pbnRlcmZhY2VzL3ZhbGlkLmludGVyZmFjZVwiO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0RhdGV0aW1lRHJvcGRvd25JdGVtQ29tcG9uZW50IH0gZnJvbSBcIi4vaXRlbS9pdGVtLmNvbXBvbmVudFwiO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdsaWJzX3VpLWNvbXBvbmVudHMtZGF0ZXRpbWUtZHJvcGRvd24nLFxuICB0ZW1wbGF0ZVVybDogJy4vZHJvcGRvd24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kcm9wZG93bi5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBMaWJzVWlDb21wb25lbnRzTGFiZWxDb21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c0RhdGV0aW1lRHJvcGRvd25EaXJlY3RpdmUsXG4gICAgTGlic1VpQ29tcG9uZW50c0RhdGV0aW1lRHJvcGRvd25JdGVtQ29tcG9uZW50XG4gIF1cbn0pXG5cbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzRGF0ZXRpbWVEcm9wZG93bkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gIC8qIFBST1BFUlRZICovXG4gIHByb3RlY3RlZCB3aWR0aCA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcm90ZWN0ZWQgd2lkdGhFbGVtZW50ID0gc2lnbmFsPG51bWJlciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJvdGVjdGVkIHdpZHRoTGFiZWwgPSBzaWduYWw8bnVtYmVyIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcm90ZWN0ZWQgd2lkdGhMYWJlbEZyb20gPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJvdGVjdGVkIHdpZHRoTGFiZWxUbyA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcm90ZWN0ZWQgaXNFcnJvckNvbXBhcmVEYXRlID0gc2lnbmFsPGJvb2xlYW4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCBjaG9vc2VEYXRlID0gc2lnbmFsPElFbWl0TXVsdGlEYXRlRHJvcGRvd24gfCB1bmRlZmluZWQ+KHsgZnJvbTogc2lnbmFsKHt9KSwgdG86IHNpZ25hbCh7fSkgfSk7XG4gIHByb3RlY3RlZCBpc1Jlc3BvbnNpdmUgPSBzaWduYWw8Ym9vbGVhbiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJvdGVjdGVkIGFycmF5Rm9ybWF0ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLnR5cGVGb3JtYXQoKS5zcGxpdCgnLScpIGFzIEFycmF5PFRZUEVfREFURV9GT1JNQVQ+O1xuICB9KTtcbiAgcHJvdGVjdGVkIGNoYW5nZVR5cGUgPSBzaWduYWw8Ym9vbGVhbiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICBwcml2YXRlIGNhY2hlV2lkdGhMYWJlbCA9IHNpZ25hbDxudW1iZXIgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgdGltZU91dCA9IHNpZ25hbDxudW1iZXIgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgb25EZXN0cm95ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBmdW5jdGlvbnNDb250cm9sID0gbmV3IE1hcDxzdHJpbmcsIElEYXRlRHJvcGRvd25JdGVtRnVuY3Rpb25Db250cm9sRXZlbnQ+KCk7XG5cbiAgLyogSU5QVVQgKi9cbiAgcmVhZG9ubHkgbGFiZWxDb25maWcgPSBpbnB1dDxJTGFiZWwgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHJlYWRvbmx5IHdpZHRoRHJvcGRvd24gPSBpbnB1dDxudW1iZXIsIG51bWJlcj4oMTM2LCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyAxMzYgfSk7XG4gIHJlYWRvbmx5IHpJbmRleCA9IGlucHV0PG51bWJlciwgbnVtYmVyPigxMjAwLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyAxMjAwIH0pO1xuICByZWFkb25seSBtYXhZZWFyID0gaW5wdXQ8bnVtYmVyPigwKTtcbiAgcmVhZG9ubHkgbWluWWVhciA9IGlucHV0PG51bWJlcj4oMCk7XG4gIHJlYWRvbmx5IG1pbldpZHRoID0gaW5wdXQ8bnVtYmVyIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICByZWFkb25seSBkaXNhYmxlID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSByZWFkb25seSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgaXNNdWx0aXBsZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgcmV2ZXJzZVllYXIgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICByZWFkb25seSBpc0JvcmRlckVycm9yID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBpZ25vcmVXaWR0aDEwMCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgd2lkdGhCeUVsZW1lbnQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGRpc2FibGVTZWNvbmQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IHR5cGVGb3JtYXQgPSBpbnB1dDxUWVBFX0RBVEVfRFJPUERPV05fRk9STUFULCBUWVBFX0RBVEVfRFJPUERPV05fRk9STUFUPignbW9udGgtZGF5JywgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgPz8gJ21vbnRoLWRheScgfSk7XG4gIHJlYWRvbmx5IGZyb21BbmRUb0RhdGVMYWJlbCA9IGlucHV0PElGcm9tQW5kVG9EYXRlTGFiZWw+KHsgZnJvbTogJ2kxOG5fbGFiZWxfZnJvbScsIHRvOiAnaTE4bl90bycgfSk7XG4gIHJlYWRvbmx5IGxpc3RIYXNCdXR0b25VblNlbGVjdE9wdGlvbiA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgc2VsZWN0ZWREYXRlVGltZSA9IGlucHV0PElFbWl0TXVsdGlEYXRlRHJvcGRvd24gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHJlYWRvbmx5IGlzRW1pdEFmdGVyQ2hhbmdlZCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTsgLy8gZMO5bmcgxJHhu4MgZW1pdCBt4buXaSBs4bqnbiBjaOG7jW4gZ2nDoSB0cuG7iyB2w6AgbOG6p24gxJHhuqd1IGluaXRcbiAgcmVhZG9ubHkgZ2V0SXRlbVllYXJEaXNwbGF5ID0gaW5wdXQ8KHllYXI6IHN0cmluZykgPT4gc3RyaW5nPigpO1xuICByZWFkb25seSBpZ25vcmVGcm9tQW5kVG9EYXRlTGFiZWwgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGNsYXNzSW5jbHVkZVRleHREaXNwbGF5V2hlbk5vU2VsZWN0ID0gaW5wdXQ8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICByZWFkb25seSBoaWRkZW5EYXRlID0gaW5wdXQ8SUhpZGRlbkRhdGUgfCB1bmRlZmluZWQ+KCk7XG4gIHJlYWRvbmx5IGxpc3RNYXhJdGVtU2hvdyA9IGlucHV0PHsgeWVhcj86IG51bWJlcjsgbW9udGg/OiBudW1iZXI7IHF1YXJ0ZXI/OiBudW1iZXI7IGRheT86IG51bWJlcjsgfSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkgaWdub3JlQ29udmVydFllYXJTZWxlY3RlZCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgbGlzdEtleXNEaXNhYmxlID0gaW5wdXQ8SURhdGVEcm9wZG93bkRpc2FibGVLZXlzIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIHJlYWRvbmx5IGlnbm9yZUFsbG93VGltZUVxdWFsID0gaW5wdXQ8Ym9vbGVhbiwgYm9vbGVhbj4odHJ1ZSwgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgPz8gdHJ1ZSB9KTtcbiAgcmVhZG9ubHkgaWdub3JlVmFsaWRUaW1lQ29tcGFyZSA9IGlucHV0PGJvb2xlYW4sIGJvb2xlYW4+KGZhbHNlLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyBmYWxzZSB9KTtcbiAgcmVhZG9ubHkgaXNDaGVja0Vycm9yV2hlblNlbGVjdEl0ZW0gPSBpbnB1dDxib29sZWFuLCBib29sZWFuPih0cnVlLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyB0cnVlIH0pO1xuICByZWFkb25seSBpZ25vcmVSZXF1aXJlZFZhbHVlU2Vjb25kV2hlbk5vdFZhbGlkUmVxdWlyZWQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7IC8vIGPDsyB2YWxpZGF0ZSBnacOhIHRy4buLIHRo4bupIDIga2hpIHZhbGlkUmVxdWlyZWQga2jDtG5nP1xuICByZWFkb25seSB2YWxpZFJlcXVpcmVkID0gaW5wdXQ8SVZhbGlkRGF0ZURyb3Bkb3duPigpO1xuXG4gIC8qIE9VVFBVVCAqL1xuICByZWFkb25seSBvdXRGdW5jdGlvbnNDb250cm9sID0gb3V0cHV0PElEYXRlRHJvcGRvd25GdW5jdGlvbkNvbnRyb2xFdmVudD4oKTtcbiAgcmVhZG9ubHkgb3V0U2VsZWN0ZWREcm9wZG93biA9IG91dHB1dDxJRW1pdFNpbmdsZURhdGVEcm9wZG93biB8IElFbWl0TXVsdGlEYXRlRHJvcGRvd24+KCk7Ly8gZMO5bmcgY2hvIHRyxrDhu51uZyBo4bujcCBlbWl0IG3hu5dpIG3hu5l0IGzhuqduIGNo4buNbiBnacOhIHRy4buLIG7Dqm4ga2hpIHPhu60gZOG7pW5nIHBo4bqjaSBjaGVjayBrxKkgdW5kZWZpbmVkXG4gIHJlYWRvbmx5IG91dENob29zZU11bHRpRGF0ZSA9IG91dHB1dDxJRW1pdE11bHRpRGF0ZURyb3Bkb3duPigpO1xuICByZWFkb25seSBvdXRDaG9vc2VTaW5nbGVEYXRlID0gb3V0cHV0PElFbWl0U2luZ2xlRGF0ZURyb3Bkb3duPigpO1xuICByZWFkb25seSBvdXRDaGFuZ1N0YWdlRmxhZ01vdXNlID0gb3V0cHV0PElGbGFnTW91c2U+KCk7XG5cbiAgLyogVklFVyBDSElMRCAqL1xuICBwcml2YXRlIGNvbnRhaW5lclJlZiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPigncGFyZW50Jyk7XG4gIHByaXZhdGUgbGFiZWxGcm9tUmVmID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCdsYWJlbEZyb20nKTtcbiAgcHJpdmF0ZSBsYWJlbFRvUmVmID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCdsYWJlbFRvJyk7XG5cbiAgLyogSU5KRUNUICovXG4gIHByaXZhdGUgdHJhbnNsYXRlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBpc011bHRpcGxlID0gdGhpcy5pc011bHRpcGxlKCk7XG5cbiAgICAgIGlmICghaXNNdWx0aXBsZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2hhbmdlVHlwZS5zZXQodHJ1ZSk7XG4gICAgICAgIHRoaXMuZnVuY3Rpb25zQ29udHJvbC5jbGVhcigpO1xuICAgICAgICB0aW1lcigwKS5waXBlKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmNoZWNrUmVzcG9uc2l2ZSgpO1xuICAgICAgICAgIHRoaXMuY2hhbmdlVHlwZS5zZXQoZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5vdXRGdW5jdGlvbnNDb250cm9sLmVtaXQoeyBjaGVja0lzVmFsaWQ6IHRoaXMudmFsaWRhdGUuYmluZCh0aGlzKSwgcmVzZXRFcnJvcjogdGhpcy5yZXNldEVycm9yLmJpbmQodGhpcyksIHJlc2V0VGltZTogdGhpcy5yZXNldERyb3Bkb3duLmJpbmQodGhpcykgfSk7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWREYXRlVGltZSgpKSB7XG4gICAgICB0aGlzLmNob29zZURhdGUuc2V0KHRoaXMuc2VsZWN0ZWREYXRlVGltZSgpKTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpLnBpcGUodGFrZVVudGlsKHRoaXMub25EZXN0cm95KSkuc3Vic2NyaWJlKHRoaXMuc2V0V2lkdGhEYXRlLmJpbmQodGhpcykpO1xuICAgIHRoaXMud2lkdGhMYWJlbC5zZXQodW5kZWZpbmVkKTtcbiAgICB0aW1lcigwKS5waXBlKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuY2hlY2tSZXNwb25zaXZlKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2hlY2tSZXNwb25zaXZlKCkge1xuICAgIHRoaXMuaXNSZXNwb25zaXZlLnNldChmYWxzZSk7XG4gICAgY29uc3Qgd2lkdGhFbGVtZW50UGFyZW50ID0gdGhpcy5jb250YWluZXJSZWYoKT8ubmF0aXZlRWxlbWVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggfHwgMDtcblxuICAgIHRoaXMud2lkdGhMYWJlbEZyb20uc2V0KHRoaXMubGFiZWxGcm9tUmVmKCk/Lm5hdGl2ZUVsZW1lbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIHx8IDApO1xuICAgIHRoaXMud2lkdGhMYWJlbFRvLnNldCh0aGlzLmxhYmVsVG9SZWYoKT8ubmF0aXZlRWxlbWVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggfHwgMCk7XG5cbiAgICBjb25zdCBzcGFjZUJldHdlZW5EYXRlID0gKHRoaXMuYXJyYXlGb3JtYXQoKS5sZW5ndGggKiAyKSArICh0aGlzLmZyb21BbmRUb0RhdGVMYWJlbCgpLmZyb20gPyAxIDogMCk7XG4gICAgY29uc3Qgd2lkdGggPSAodGhpcy53aWR0aERyb3Bkb3duKCkgKiA0KSArICg4ICogc3BhY2VCZXR3ZWVuRGF0ZSkgKyB0aGlzLndpZHRoTGFiZWxGcm9tKCkgKyB0aGlzLndpZHRoTGFiZWxUbygpO1xuXG4gICAgY29uc29sZS5sb2cod2lkdGhFbGVtZW50UGFyZW50KTtcblxuXG4gICAgaWYgKHdpZHRoRWxlbWVudFBhcmVudCA8IHdpZHRoKSB7XG4gICAgICB0aGlzLmlzUmVzcG9uc2l2ZS5zZXQodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDaGFuZ2VTZWxlY3RlZEtleShldmVudDogSUVtaXRTaW5nbGVEYXRlRHJvcGRvd24sIHR5cGU6ICdmcm9tJyB8ICd0bycpIHtcbiAgICB0aGlzLmNob29zZURhdGUudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgaWYgKGN1cnJlbnQpIHtcbiAgICAgICAgY3VycmVudFt0eXBlXS5zZXQoZXZlbnQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9KTtcbiAgICBpZiAodGhpcy5pc0VtaXRBZnRlckNoYW5nZWQoKSkge1xuICAgICAgY29uc3QgZGF0YUVtaXQgPSB0aGlzLmlzTXVsdGlwbGUoKSA/IHRoaXMuY2hvb3NlRGF0ZSgpIDogdGhpcy5jaG9vc2VEYXRlKCk/LmZyb20oKTtcblxuICAgICAgaWYgKGRhdGFFbWl0KSB7XG4gICAgICAgIHRoaXMub3V0U2VsZWN0ZWREcm9wZG93bi5lbWl0KGRhdGFFbWl0KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5hcHBseURhdGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVzZXREcm9wZG93bigpIHtcbiAgICB0aGlzLmZ1bmN0aW9uc0NvbnRyb2wuZm9yRWFjaChjb250cm9sID0+IGNvbnRyb2wucmVzZXREcm9wZG93bigpKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVzZXRFcnJvcigpIHtcbiAgICB0aGlzLmZ1bmN0aW9uc0NvbnRyb2wuZm9yRWFjaChjb250cm9sID0+IGNvbnRyb2wucmVzZXRFcnJvcigpKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0V2lkdGhEYXRlKCkge1xuICAgIGlmICghdGhpcy5jb250YWluZXJSZWYoKSB8fCAhdGhpcy5jb250YWluZXJSZWYoKT8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aW1lcigwKS5waXBlKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuY2hlY2tSZXNwb25zaXZlKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckZ1bmN0aW9uQ29udHJvbChldmVudDogSURhdGVEcm9wZG93bkl0ZW1GdW5jdGlvbkNvbnRyb2xFdmVudCwgdHlwZTogJ2Zyb20nIHwgJ3RvJykge1xuICAgIHRoaXMuZnVuY3Rpb25zQ29udHJvbC5zZXQodHlwZSwgZXZlbnQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGNoZWNrVmFsaWQoKSB7XG4gICAgbGV0IHZhbGlkID0gdHJ1ZTtcblxuICAgIGZvciAoY29uc3QgY29udHJvbCBvZiB0aGlzLmZ1bmN0aW9uc0NvbnRyb2wudmFsdWVzKCkpIHtcbiAgICAgIGlmICghKGF3YWl0IGNvbnRyb2wuY2hlY2tJc1ZhbGlkKCkpKSB7XG4gICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLmNvbXBhcmVEYXRlKCkpIHtcbiAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRFcnJvcihlcnJvcjogYm9vbGVhbikge1xuICAgIHRoaXMuZnVuY3Rpb25zQ29udHJvbC5mb3JFYWNoKGNvbnRyb2wgPT4gY29udHJvbC5zZXRFcnJvcihlcnJvcikpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wYXJlRGF0ZSgpIHtcbiAgICBjb25zdCB0eXBlID0gdGhpcy50eXBlRm9ybWF0KCkuc3BsaXQoJy0nKSBhcyBBcnJheTxUWVBFX0RBVEVfRk9STUFUPjtcbiAgICBjb25zdCBkYXRlQ29tcGFyZTogQXJyYXk8eyBmcm9tOiBudW1iZXIgfCB1bmRlZmluZWQsIHRvOiBudW1iZXIgfCB1bmRlZmluZWQgfT4gPSBbXTtcblxuICAgIHR5cGUuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGNvbnN0IGZyb20gPSB0aGlzLmNob29zZURhdGUoKT8uZnJvbSgpW2l0ZW1dO1xuICAgICAgY29uc3QgdG8gPSB0aGlzLmNob29zZURhdGUoKT8udG8oKVtpdGVtXTtcblxuICAgICAgZGF0ZUNvbXBhcmUucHVzaCh7IGZyb206IGZyb20sIHRvOiB0byB9KTtcbiAgICB9KTtcbiAgICBpZiAodGhpcy5pZ25vcmVWYWxpZFRpbWVDb21wYXJlKCkgfHwgIXRoaXMuY2hlY2tDb25kaXRpb24odHJ1ZSkpIHtcbiAgICAgIHRoaXMuaXNFcnJvckNvbXBhcmVEYXRlLnNldChmYWxzZSk7XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKENvbXBhcmVEYXRlKGRhdGVDb21wYXJlLCB0aGlzLmlnbm9yZUFsbG93VGltZUVxdWFsKCkpKSB7XG4gICAgICB0aGlzLnNldEVycm9yKHRydWUpO1xuICAgICAgdGhpcy5pc0Vycm9yQ29tcGFyZURhdGUuc2V0KHRydWUpO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5pc0Vycm9yQ29tcGFyZURhdGUuc2V0KGZhbHNlKTtcblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdmFsaWRhdGUoKSB7XG4gICAgbGV0IHZhbGlkID0gdHJ1ZTtcblxuICAgIGlmICghdGhpcy52YWxpZFJlcXVpcmVkKCkpIHtcbiAgICAgIGlmICghdGhpcy5jaGVja0NvbmRpdGlvbihmYWxzZSkgJiYgIXRoaXMuaWdub3JlUmVxdWlyZWRWYWx1ZVNlY29uZFdoZW5Ob3RWYWxpZFJlcXVpcmVkKCkpIHtcbiAgICAgICAgdmFsaWQgPSBhd2FpdCB0aGlzLmNoZWNrVmFsaWQoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbGlkO1xuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmNoZWNrVmFsaWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tDb25kaXRpb24oaGFzVmFsdWU6IGJvb2xlYW4pIHtcbiAgICBsZXQgY2hlY2tWYWx1ZSA9IHRydWU7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMudHlwZUZvcm1hdCgpLnNwbGl0KCctJykgYXMgQXJyYXk8VFlQRV9EQVRFX0ZPUk1BVD47XG5cbiAgICB0eXBlLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBpZiAoaGFzVmFsdWUgJiYgKCF0aGlzLmNob29zZURhdGUoKT8uZnJvbSgpW2l0ZW1dIHx8ICF0aGlzLmNob29zZURhdGUoKT8udG8oKVtpdGVtXSkpIHtcbiAgICAgICAgY2hlY2tWYWx1ZSA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKCFoYXNWYWx1ZSAmJiAodGhpcy5jaG9vc2VEYXRlKCk/LmZyb20oKVtpdGVtXSB8fCB0aGlzLmNob29zZURhdGUoKT8udG8oKVtpdGVtXSkpIHtcbiAgICAgICAgY2hlY2tWYWx1ZSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNoZWNrVmFsdWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXBwbHlEYXRlKCkge1xuICAgIHRoaXMuc2V0RXJyb3IoZmFsc2UpO1xuICAgIHRoaXMuaXNFcnJvckNvbXBhcmVEYXRlLnNldChmYWxzZSk7XG4gICAgaWYgKHRoaXMuaXNDaGVja0Vycm9yV2hlblNlbGVjdEl0ZW0oKSAmJiAhdGhpcy52YWxpZGF0ZSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGZyb20gPSB0aGlzLmNob29zZURhdGUoKT8uZnJvbTtcbiAgICBjb25zdCB0byA9IHRoaXMuY2hvb3NlRGF0ZSgpPy50bztcblxuICAgIGNvbnNvbGUubG9nKGZyb20/LigpLCB0bz8uKCksIHRoaXMuaXNNdWx0aXBsZSgpKTtcblxuXG4gICAgaWYgKHRoaXMuaXNNdWx0aXBsZSgpKSB7XG4gICAgICBpZiAodGhpcy5jb21wYXJlRGF0ZSgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxldCBkYXRhU2VsZWN0ZWQ6IElFbWl0TXVsdGlEYXRlRHJvcGRvd24gfCB1bmRlZmluZWQgPSB7IGZyb206IHNpZ25hbCh7fSksIHRvOiBzaWduYWwoe30pIH07XG5cbiAgICAgIHRoaXMuYXJyYXlGb3JtYXQoKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGlmICghZnJvbT8uKCk/LltrZXldIHx8ICF0bz8uKCk/LltrZXldKSB7XG4gICAgICAgICAgZGF0YVNlbGVjdGVkID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhU2VsZWN0ZWQpIHtcbiAgICAgICAgICBkYXRhU2VsZWN0ZWQuZnJvbS51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgICAgICBjdXJyZW50W2tleV0gPSBOdW1iZXIoZnJvbT8uKClba2V5XSk7XG5cbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGRhdGFTZWxlY3RlZC50by51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgICAgICBjdXJyZW50W2tleV0gPSBOdW1iZXIodG8/LigpW2tleV0pO1xuXG4gICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChkYXRhU2VsZWN0ZWQpIHtcbiAgICAgICAgdGhpcy5vdXRDaG9vc2VNdWx0aURhdGUuZW1pdChkYXRhU2VsZWN0ZWQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBkYXRhU2VsZWN0ZWQ6IElFbWl0U2luZ2xlRGF0ZURyb3Bkb3duIHwgdW5kZWZpbmVkID0ge307XG5cbiAgICB0aGlzLmFycmF5Rm9ybWF0KCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKCFmcm9tPy4oKT8uW2tleV0pIHtcbiAgICAgICAgZGF0YVNlbGVjdGVkID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKGRhdGFTZWxlY3RlZCkge1xuICAgICAgICBkYXRhU2VsZWN0ZWRba2V5XSA9IE51bWJlcihmcm9tPy4oKT8uW2tleV0pXG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKGRhdGFTZWxlY3RlZCkge1xuICAgICAgdGhpcy5vdXRDaG9vc2VTaW5nbGVEYXRlLmVtaXQoZGF0YVNlbGVjdGVkKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNoYW5nZVdpZHRoTGFiZWwod2lkdGg6IG51bWJlcikge1xuICAgIHRoaXMuY2FjaGVXaWR0aExhYmVsLnNldCh3aWR0aCA8ICh0aGlzLmNhY2hlV2lkdGhMYWJlbCgpIHx8IDApID8gdGhpcy5jYWNoZVdpZHRoTGFiZWwoKSA6IE1hdGguY2VpbCh3aWR0aCkpO1xuICAgIGlmICh0aGlzLnRpbWVPdXQoKSkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZU91dCgpKTtcbiAgICB9XG4gICAgdGhpcy50aW1lT3V0LnNldCgoc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLndpZHRoTGFiZWwuc2V0KHRoaXMuY2FjaGVXaWR0aExhYmVsKCkpO1xuICAgIH0sIDEwMCkgYXMgdW5rbm93bikgYXMgbnVtYmVyKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2hhbmdTdGFnZUZsYWdNb3VzZShmbGFnTW91c2U6IElGbGFnTW91c2UpIHtcbiAgICB0aGlzLm91dENoYW5nU3RhZ2VGbGFnTW91c2UuZW1pdChmbGFnTW91c2UpO1xuICB9XG59IiwiQGlmIChsYWJlbENvbmZpZygpOyBhcyBsYWJlbENvbmZpZykge1xuICA8bGlic191aS1jb21wb25lbnRzLWxhYmVsIFtjbGFzc0luY2x1ZGVdPVwibGFiZWxDb25maWcuY2xhc3NJbmNsdWRlXCJcbiAgICBbbGFiZWxMZWZ0XT1cImxhYmVsQ29uZmlnLmxhYmVsTGVmdFwiXG4gICAgW2xhYmVsTGVmdENsYXNzXT1cImxhYmVsQ29uZmlnLmxhYmVsTGVmdENsYXNzXCJcbiAgICBbcmVxdWlyZWRdPVwibGFiZWxDb25maWcucmVxdWlyZWQgXCJcbiAgICBbZGVzY3JpcHRpb25dPVwibGFiZWxDb25maWcuZGVzY3JpcHRpb25cIlxuICAgIFtsYWJlbFJpZ2h0XT1cImxhYmVsQ29uZmlnLmxhYmVsUmlnaHRcIlxuICAgIFtsYWJlbFJpZ2h0Q2xhc3NdPVwibGFiZWxDb25maWcubGFiZWxSaWdodENsYXNzXCJcbiAgICBbb25seVNob3dDb3VudF09XCJsYWJlbENvbmZpZy5vbmx5U2hvd0NvdW50XCJcbiAgICBbYnV0dG9uc0xlZnRdPVwibGFiZWxDb25maWcuYnV0dG9uc0xlZnRcIlxuICAgIFtidXR0b25zUmlnaHRdPVwibGFiZWxDb25maWcuYnV0dG9uc1JpZ2h0XCJcbiAgICBbYnV0dG9uc0Rlc2NyaXB0aW9uXT1cImxhYmVsQ29uZmlnLmJ1dHRvbnNEZXNjcmlwdGlvblwiXG4gICAgW2Rlc2NyaXB0aW9uQ2xhc3NdPVwibGFiZWxDb25maWcuZGVzY3JpcHRpb25DbGFzc1wiXG4gICAgW2Rpc2FibGVCdXR0b25zTGVmdF09XCJsYWJlbENvbmZpZy5kaXNhYmxlQnV0dG9uc0xlZnRcIlxuICAgIFtkaXNhYmxlQnV0dG9uc1JpZ2h0XT1cImxhYmVsQ29uZmlnLmRpc2FibGVCdXR0b25zUmlnaHRcIlxuICAgIFtoYXNUb2dnbGVdPVwibGFiZWxDb25maWcuaGFzVG9nZ2xlXCJcbiAgICBbdG9nZ2xlQWN0aXZlXT1cImxhYmVsQ29uZmlnLnRvZ2dsZUFjdGl2ZVwiXG4gICAgW3RvZ2dsZURpc2FibGVdPVwibGFiZWxDb25maWcudG9nZ2xlRGlzYWJsZSB8fCBkaXNhYmxlKClcIlxuICAgIFtwb3BvdmVyXT1cImxhYmVsQ29uZmlnLnBvcG92ZXJcIlxuICAgIFtpY29uUG9wb3ZlckNsYXNzXT1cImxhYmVsQ29uZmlnLmljb25Qb3BvdmVyQ2xhc3NcIlxuICAgIFtsaW1pdExlbmd0aF09XCJsYWJlbENvbmZpZy5saW1pdExlbmd0aFwiXG4gICAgW2NvdW50XT1cImxhYmVsQ29uZmlnLmNvdW50XCIgLz5cbn1cbjxkaXYgI3BhcmVudFxuICBjbGFzcz1cImZsZXggaXRlbXMtc3RhcnRcIlxuICBbY2xhc3MuIXctZnVsbF09XCJ3aWR0aEJ5RWxlbWVudCgpXCJcbiAgW2NsYXNzLiFjb2x1bW5dPVwiaXNSZXNwb25zaXZlKCkgJiYgaXNNdWx0aXBsZSgpXCI+XG4gIDxkaXYgI2NoaWxkRnJvbVxuICAgIGNsYXNzPVwiZmxleCBpdGVtcy1zdGFydFwiXG4gICAgW2NsYXNzLnctWzUwJV1dPVwid2lkdGhCeUVsZW1lbnQoKSAmJiAhaXNSZXNwb25zaXZlKClcIlxuICAgIFtjbGFzcy4hbWItWzhweF1dPVwiaXNSZXNwb25zaXZlKCkgJiYgaXNNdWx0aXBsZSgpXCJcbiAgICBbY2xhc3MuIW1yLVs4cHhdXT1cIiFpc1Jlc3BvbnNpdmUoKSAmJiBpc011bHRpcGxlKClcIlxuICAgIFtjbGFzcy53LWZ1bGxdPVwiIWlzTXVsdGlwbGUoKSAmJiAhd2lkdGhCeUVsZW1lbnQoKSB8fCBpc1Jlc3BvbnNpdmUoKVwiXG4gICAgW3N0eWxlLndpZHRoLnB4XT1cIiF3aWR0aEJ5RWxlbWVudCgpICYmIGlzTXVsdGlwbGUoKSAmJiAhaXNSZXNwb25zaXZlKCkgPygod2lkdGhEcm9wZG93bigpICogYXJyYXlGb3JtYXQoKS5sZW5ndGgpKyg4ICogYXJyYXlGb3JtYXQoKS5sZW5ndGgpICsgd2lkdGhMYWJlbEZyb20oKSk6dW5kZWZpbmVkXCI+XG5cbiAgICBAaWYgKGlzTXVsdGlwbGUoKSAmJiAhaWdub3JlRnJvbUFuZFRvRGF0ZUxhYmVsKCkgJiYgZnJvbUFuZFRvRGF0ZUxhYmVsKCkuZnJvbSkge1xuICAgICAgPGRpdiBjbGFzcz1cIm1yLVs4cHhdIGZsZXgtc2hyaW5rLTAgaC1bMzJweF0gZmxleCBpdGVtcy1jZW50ZXJcIlxuICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiaXNSZXNwb25zaXZlKCkgPyAod2lkdGhMYWJlbCgpIHx8IHVuZGVmaW5lZCkgOiB1bmRlZmluZWRcIj5cbiAgICAgICAgPHNwYW4gI2xhYmVsRnJvbVxuICAgICAgICAgIExpYnNVaUNvbXBvbmVudHNEYXRldGltZURyb3Bkb3duRGlyZWN0aXZlXG4gICAgICAgICAgW2NsYXNzLiFvcGFjaXR5LVswLjVdXT1cImRpc2FibGUoKVwiXG4gICAgICAgICAgY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDVyIHRleHQtbm93cmFwIHt7IGZyb21BbmRUb0RhdGVMYWJlbCgpLmNsYXNzTGFiZWxGcm9tIHx8ICcnIH19XCJcbiAgICAgICAgICAob3V0Q2hhbmdlV2lkdGgpPVwiaGFuZGxlckNoYW5nZVdpZHRoTGFiZWwoJGV2ZW50KVwiPlxuICAgICAgICAgIHt7IChmcm9tQW5kVG9EYXRlTGFiZWwoKS5mcm9tfHwnICcpfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgfVxuICAgIDxkaXYgY2xhc3M9XCJmbGV4XCJcbiAgICAgIFtjbGFzcy4hdy1mdWxsXT1cIndpZHRoQnlFbGVtZW50KClcIj5cbiAgICAgIEBpZiAoIWNoYW5nZVR5cGUoKSkge1xuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWRhdGV0aW1lLWRyb3Bkb3duLWl0ZW0gW2NsYXNzLiF3LWZ1bGxdPVwid2lkdGhCeUVsZW1lbnQoKVwiXG4gICAgICAgICAgW2Rpc2FibGVTZWNvbmRdPVwiZGlzYWJsZVNlY29uZCgpXCJcbiAgICAgICAgICBbdHlwZURhdGVdPVwidHlwZUZvcm1hdCgpXCJcbiAgICAgICAgICBbekluZGV4XT1cInpJbmRleCgpXCJcbiAgICAgICAgICBbbWF4WWVhcl09XCJtYXhZZWFyKClcIlxuICAgICAgICAgIFtkaXNhYmxlXT1cImRpc2FibGUoKVwiXG4gICAgICAgICAgW21pblllYXJdPVwibWluWWVhcigpXCJcbiAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiXG4gICAgICAgICAgW2lzTXVsdGlwbGVdPVwiaXNNdWx0aXBsZSgpID8gaXNSZXNwb25zaXZlKCkgPyB0cnVlIDogZmFsc2UgOiB0cnVlXCJcbiAgICAgICAgICBbcmV2ZXJzZVllYXJdPVwicmV2ZXJzZVllYXIoKVwiXG4gICAgICAgICAgW3NlbGVjdGVkRGF0ZV09XCJzZWxlY3RlZERhdGVUaW1lKCk/LmZyb20oKSB8fCB7fVwiXG4gICAgICAgICAgW3dpZHRoRHJvcGRvd25dPVwid2lkdGhEcm9wZG93bigpXCJcbiAgICAgICAgICBbd2lkdGhCeUVsZW1lbnRdPVwid2lkdGhCeUVsZW1lbnQoKVwiXG4gICAgICAgICAgW2dldEl0ZW1ZZWFyRGlzcGxheV09XCJnZXRJdGVtWWVhckRpc3BsYXkoKVwiXG4gICAgICAgICAgW2xpc3RNYXhJdGVtU2hvd109XCJsaXN0TWF4SXRlbVNob3coKVwiXG4gICAgICAgICAgW2xpc3RLZXlzRGlzYWJsZV09XCJsaXN0S2V5c0Rpc2FibGUoKT8uZnJvbSgpXCJcbiAgICAgICAgICBbbGlzdEhhc0J1dHRvblVuU2VsZWN0T3B0aW9uXT1cImxpc3RIYXNCdXR0b25VblNlbGVjdE9wdGlvbigpXCJcbiAgICAgICAgICBbaXNFbWl0U2VsZWN0ZWREcm9wRG93bl09XCJpc0VtaXRBZnRlckNoYW5nZWQoKVwiXG4gICAgICAgICAgW2NsYXNzSW5jbHVkZVRleHREaXNwbGF5V2hlbk5vU2VsZWN0XT1cIidsaWJzLXVpLWZvbnQtaDVyICcgKyBjbGFzc0luY2x1ZGVUZXh0RGlzcGxheVdoZW5Ob1NlbGVjdCgpXCJcbiAgICAgICAgICAob3V0U2VsZWN0ZWREYXRhKT1cImhhbmRsZXJDaGFuZ2VTZWxlY3RlZEtleSgkZXZlbnQsICdmcm9tJylcIlxuICAgICAgICAgIChvdXRGdW5jdGlvbkNvbnRyb2wpPVwiaGFuZGxlckZ1bmN0aW9uQ29udHJvbCgkZXZlbnQsJ2Zyb20nKVwiXG4gICAgICAgICAgKG91dENoYW5nU3RhZ2VGbGFnTW91c2UpPVwiaGFuZGxlckNoYW5nU3RhZ2VGbGFnTW91c2UoJGV2ZW50KVwiIC8+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICBAaWYgKGlzTXVsdGlwbGUoKSkge1xuICAgIDxkaXYgI2NoaWxkVG9cbiAgICAgIFtjbGFzcy4hdy1bNTAlXV09XCJ3aWR0aEJ5RWxlbWVudCgpXCJcbiAgICAgIFtjbGFzcy4hdy1mdWxsXT1cIiAhd2lkdGhCeUVsZW1lbnQoKSB8fCBpc1Jlc3BvbnNpdmUoKVwiXG4gICAgICBjbGFzcz1cImZsZXggaXRlbXMtc3RhcnRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtci1bOHB4XSBoLVszMnB4XSBmbGV4LXNocmluay0wIGZsZXggaXRlbXMtY2VudGVyXCJcbiAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImlzUmVzcG9uc2l2ZSgpID8gd2lkdGhMYWJlbCgpIDogdW5kZWZpbmVkXCI+XG4gICAgICAgIEBpZiAoIWlnbm9yZUZyb21BbmRUb0RhdGVMYWJlbCgpKSB7XG4gICAgICAgICAgPHNwYW4gI2xhYmVsVG9cbiAgICAgICAgICAgIExpYnNVaUNvbXBvbmVudHNEYXRldGltZURyb3Bkb3duRGlyZWN0aXZlXG4gICAgICAgICAgICBbY2xhc3MuIW9wYWNpdHktWzAuNV1dPVwiZGlzYWJsZSgpXCJcbiAgICAgICAgICAgIGNsYXNzPVwibGlicy11aS1mb250LWg1ciB0ZXh0LW5vd3JhcCB7eyBmcm9tQW5kVG9EYXRlTGFiZWwoKS5jbGFzc0xhYmVsVG8gfHwgJycgfX1cIlxuICAgICAgICAgICAgKG91dENoYW5nZVdpZHRoKT1cImhhbmRsZXJDaGFuZ2VXaWR0aExhYmVsKCRldmVudClcIj5cbiAgICAgICAgICAgIHt7IChmcm9tQW5kVG9EYXRlTGFiZWwoKS50b3x8JyAnKXwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoaWdub3JlRnJvbUFuZFRvRGF0ZUxhYmVsKCkpIHtcbiAgICAgICAgICA8c3BhbiBbY2xhc3MuIW9wYWNpdHktWzAuNV1dPVwiZGlzYWJsZSgpXCJcbiAgICAgICAgICAgIGNsYXNzPVwibGlicy11aS1mb250LWg1clwiPi08L3NwYW4+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXhcIlxuICAgICAgICBbY2xhc3MuIXctZnVsbF09XCJ3aWR0aEJ5RWxlbWVudCgpXCI+XG4gICAgICAgIEBpZiAoIWNoYW5nZVR5cGUoKSkge1xuICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtZGF0ZXRpbWUtZHJvcGRvd24taXRlbSBbY2xhc3Mudy1mdWxsXT1cIndpZHRoQnlFbGVtZW50KClcIlxuICAgICAgICAgICAgW2Rpc2FibGVTZWNvbmRdPVwiZGlzYWJsZVNlY29uZCgpXCJcbiAgICAgICAgICAgIFt0eXBlRGF0ZV09XCJ0eXBlRm9ybWF0KClcIlxuICAgICAgICAgICAgW3pJbmRleF09XCJ6SW5kZXgoKVwiXG4gICAgICAgICAgICBbbWF4WWVhcl09XCJtYXhZZWFyKClcIlxuICAgICAgICAgICAgW2Rpc2FibGVdPVwiZGlzYWJsZSgpXCJcbiAgICAgICAgICAgIFttaW5ZZWFyXT1cIm1pblllYXIoKVwiXG4gICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiXG4gICAgICAgICAgICBbaXNNdWx0aXBsZV09XCJpc011bHRpcGxlKClcIlxuICAgICAgICAgICAgW3JldmVyc2VZZWFyXT1cInJldmVyc2VZZWFyKClcIlxuICAgICAgICAgICAgW3NlbGVjdGVkRGF0ZV09XCJzZWxlY3RlZERhdGVUaW1lKCk/LnRvKCkgfHwge31cIlxuICAgICAgICAgICAgW3dpZHRoRHJvcGRvd25dPVwid2lkdGhEcm9wZG93bigpXCJcbiAgICAgICAgICAgIFt3aWR0aEJ5RWxlbWVudF09XCJ3aWR0aEJ5RWxlbWVudCgpXCJcbiAgICAgICAgICAgIFtnZXRJdGVtWWVhckRpc3BsYXldPVwiZ2V0SXRlbVllYXJEaXNwbGF5KClcIlxuICAgICAgICAgICAgW2xpc3RNYXhJdGVtU2hvd109XCJsaXN0TWF4SXRlbVNob3coKVwiXG4gICAgICAgICAgICBbbGlzdEtleXNEaXNhYmxlXT1cImxpc3RLZXlzRGlzYWJsZSgpPy50bygpXCJcbiAgICAgICAgICAgIFtsaXN0SGFzQnV0dG9uVW5TZWxlY3RPcHRpb25dPVwibGlzdEhhc0J1dHRvblVuU2VsZWN0T3B0aW9uKClcIlxuICAgICAgICAgICAgW2NsYXNzSW5jbHVkZVRleHREaXNwbGF5V2hlbk5vU2VsZWN0XT1cIidsaWJzLXVpLWZvbnQtaDVyICcgKyBjbGFzc0luY2x1ZGVUZXh0RGlzcGxheVdoZW5Ob1NlbGVjdFwiXG4gICAgICAgICAgICBbaXNFbWl0U2VsZWN0ZWREcm9wRG93bl09XCJpc0VtaXRBZnRlckNoYW5nZWQoKVwiXG4gICAgICAgICAgICAob3V0U2VsZWN0ZWREYXRhKT1cImhhbmRsZXJDaGFuZ2VTZWxlY3RlZEtleSgkZXZlbnQsICd0bycpXCJcbiAgICAgICAgICAgIChvdXRGdW5jdGlvbkNvbnRyb2wpPVwiaGFuZGxlckZ1bmN0aW9uQ29udHJvbCgkZXZlbnQsJ3RvJylcIlxuICAgICAgICAgICAgKG91dENoYW5nU3RhZ2VGbGFnTW91c2UpPVwiaGFuZGxlckNoYW5nU3RhZ2VGbGFnTW91c2UoJGV2ZW50KVwiIC8+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cblxuQGlmIChpc0Vycm9yQ29tcGFyZURhdGUoKSkge1xuICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgbXQtWzRweF1cIj5cbiAgICA8c3BhbiBjbGFzcz1cImxpYnMtdWktbWVzc2FnZS1lcnJvciBsaWJzLXVpLWZvbnQtaDdyIGxpYnMtdWktdGV4dC1lcnJvclwiPnt7IHZhbGlkUmVxdWlyZWQoKT8ubWVzc2FnZVZhbGlkQ29tcGFyZVRpbWUgfHwgXCJpMThuX2ludmFsaWRfZW5kX2RhdGVfc2VsZWN0ZWRcIiB8IHRyYW5zbGF0ZTp2YWxpZFJlcXVpcmVkKCk/LmludGVycG9sYXRlUGFyYW1zQ29tcGFyZVRpbWUgfX08L3NwYW4+XG4gIDwvZGl2PlxufVxuIl19
@@ -0,0 +1,2 @@
1
+ export * from './dropdown.component';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvZGF0ZXRpbWUvZHJvcGRvd24vc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsc0JBQXNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2Ryb3Bkb3duLmNvbXBvbmVudCc7XG4iXX0=
@@ -0,0 +1,7 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ export var SideEnum;
3
+ (function (SideEnum) {
4
+ SideEnum["from"] = "from";
5
+ SideEnum["to"] = "to";
6
+ })(SideEnum || (SideEnum = {}));
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1kcm9wZG93bi5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvZGF0ZXRpbWUvZHJvcGRvd24vc3JjL2ludGVyZmFjZXMvZGF0ZS1kcm9wZG93bi5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBOEJ2RCxNQUFNLENBQU4sSUFBWSxRQUdYO0FBSEQsV0FBWSxRQUFRO0lBQ2xCLHlCQUFhLENBQUE7SUFDYixxQkFBUyxDQUFBO0FBQ1gsQ0FBQyxFQUhXLFFBQVEsS0FBUixRQUFRLFFBR25CIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuXG5pbXBvcnQgeyBXcml0YWJsZVNpZ25hbCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBJRHJvcGRvd25GdW5jdGlvbkNvbnRyb2xFdmVudCB9IGZyb20gXCJAbGlicy11aS9jb21wb25lbnRzLWRyb3Bkb3duXCI7XG5cbmV4cG9ydCB0eXBlIFRZUEVfRFJPUERPV05fTU9OVEhfSUQgPSAxIHwgMiB8IDMgfCA0IHwgNSB8IDYgfCA3IHwgOCB8IDkgfCAxMCB8IDExIHwgMTI7XG5leHBvcnQgdHlwZSBUWVBFX0RBVEVfRFJPUERPV05fRk9STUFUID0gJ3llYXInIHwgJ21vbnRoJyB8ICdxdWFydGVyJyB8ICd5ZWFyLW1vbnRoJyB8ICdtb250aC1kYXknIHwgJ3llYXItcXVhcnRlcicgfCBzdHJpbmc7XG5leHBvcnQgdHlwZSBUWVBFX0RBVEVfRk9STUFUID0gJ3llYXInIHwgJ21vbnRoJyB8ICdxdWFydGVyJyB8ICdkYXknO1xuXG5leHBvcnQgaW50ZXJmYWNlIElUeXBlRGF0ZSB7XG4gIGlkOiBUWVBFX0RBVEVfRk9STUFULFxuICBrZXlTZWxlY3RlZDogYW55LFxuICBkaXNhYmxlPzogYm9vbGVhbixcbiAgc2hvd0JvcmRlckVycm9yPzogYm9vbGVhbixcbiAgaXNFcnJvcj86IGJvb2xlYW4sXG4gIGZ1bmN0aW9uQ29udHJvbD86IElEcm9wZG93bkZ1bmN0aW9uQ29udHJvbEV2ZW50XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSURhdGVEcm9wZG93bkRpc2FibGVLZXlzIHtcbiAgZnJvbT86IFdyaXRhYmxlU2lnbmFsPElEYXRlRHJvcGRvd25EaXNhYmxlPjtcbiAgdG8/OiBXcml0YWJsZVNpZ25hbDxJRGF0ZURyb3Bkb3duRGlzYWJsZT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSURhdGVEcm9wZG93bkRpc2FibGUge1xuICB5ZWFyPzogV3JpdGFibGVTaWduYWw8QXJyYXk8bnVtYmVyPj47XG4gIG1vbnRoPzogV3JpdGFibGVTaWduYWw8QXJyYXk8bnVtYmVyPj47XG4gIHF1YXJ0ZXI/OiBXcml0YWJsZVNpZ25hbDxBcnJheTxudW1iZXI+PjtcbiAgZGF5PzogV3JpdGFibGVTaWduYWw8QXJyYXk8bnVtYmVyPj47XG59XG5cbmV4cG9ydCBlbnVtIFNpZGVFbnVtIHtcbiAgZnJvbSA9ICdmcm9tJyxcbiAgdG8gPSAndG8nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUhpZGRlbkRhdGUge1xuICBmb3JtYXREYXRlOiBUWVBFX0RBVEVfRFJPUERPV05fRk9STUFUO1xuICB5ZWFyTW9udGg/OiBXcml0YWJsZVNpZ25hbDxBcnJheTxXcml0YWJsZVNpZ25hbDxJSGlkZGVuRGF0ZVllYXJNb250aD4+PjtcbiAgbW9udGhEYXk/OiBXcml0YWJsZVNpZ25hbDxBcnJheTxXcml0YWJsZVNpZ25hbDxJSGlkZGVuRGF0ZU1vbnRoRGF5Pj4+O1xufVxuXG5pbnRlcmZhY2UgSUhpZGRlbkRhdGVNb250aERheSB7XG4gIGhpZGRlbk1vbnRoOiBudW1iZXI7XG4gIGhpZGRlbkRheXM6IEFycmF5PG51bWJlcj5cbn1cbmludGVyZmFjZSBJSGlkZGVuRGF0ZVllYXJNb250aCB7XG4gIGhpZGRlblllYXI6IG51bWJlcjtcbiAgaGlkZGVuTW9udGhzOiBBcnJheTxudW1iZXI+XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUZyb21BbmRUb0RhdGVMYWJlbCB7XG4gIHRvPzogc3RyaW5nLFxuICBmcm9tPzogc3RyaW5nLFxuICBjbGFzc0xhYmVsVG8/OiBzdHJpbmcsXG4gIGNsYXNzTGFiZWxGcm9tPzogc3RyaW5nO1xufSJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1pdC1kcm9wZG93bi5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvZGF0ZXRpbWUvZHJvcGRvd24vc3JjL2ludGVyZmFjZXMvZW1pdC1kcm9wZG93bi5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdyaXRhYmxlU2lnbmFsIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJRW1pdE11bHRpRGF0ZURyb3Bkb3duIHtcbiAgZnJvbTogV3JpdGFibGVTaWduYWw8SUVtaXRTaW5nbGVEYXRlRHJvcGRvd24+O1xuICB0bzogV3JpdGFibGVTaWduYWw8SUVtaXRTaW5nbGVEYXRlRHJvcGRvd24+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElFbWl0U2luZ2xlRGF0ZURyb3Bkb3duIHtcbiAgeWVhcj86IG51bWJlcjtcbiAgbW9udGg/OiBudW1iZXI7XG4gIHF1YXJ0ZXI/OiBudW1iZXI7XG4gIGRheT86IG51bWJlcjtcbn0iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb25zLWNvbnRyb2wtZXZlbnQuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2RhdGV0aW1lL2Ryb3Bkb3duL3NyYy9pbnRlcmZhY2VzL2Z1bmN0aW9ucy1jb250cm9sLWV2ZW50LmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBJRGF0ZURyb3Bkb3duSXRlbUZ1bmN0aW9uQ29udHJvbEV2ZW50IHtcbiAgY2hlY2tJc1ZhbGlkOiAoKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuICByZXNldERyb3Bkb3duOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuICByZXNldEVycm9yOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBzZXRFcnJvcjogKGVycm9yOiBib29sZWFuKSA9PiBQcm9taXNlPHZvaWQ+XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSURhdGVEcm9wZG93bkZ1bmN0aW9uQ29udHJvbEV2ZW50IHtcbiAgY2hlY2tJc1ZhbGlkOiAoKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuICByZXNldEVycm9yPzogKCkgPT4gUHJvbWlzZTx2b2lkPlxuICByZXNldFRpbWU/OiAoKSA9PiBQcm9taXNlPHZvaWQ+XG59XG4iXX0=
@@ -0,0 +1,3 @@
1
+ ;
2
+ export {};
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWQuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2RhdGV0aW1lL2Ryb3Bkb3duL3NyYy9pbnRlcmZhY2VzL3ZhbGlkLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBJVmFsaWREYXRlRHJvcGRvd24ge1xuICBtZXNzYWdlPzogc3RyaW5nO1xuICBpbnRlcnBvbGF0ZVBhcmFtcz86IHsgYW55OiBvYmplY3QgfTtcbiAgbWVzc2FnZVZhbGlkQ29tcGFyZVRpbWU/OiBzdHJpbmc7XG4gIGludGVycG9sYXRlUGFyYW1zQ29tcGFyZVRpbWU/OiB7IGFueTogb2JqZWN0IH07XG59O1xuIl19
@@ -0,0 +1,124 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import { Component, computed, effect, inject, input, output, signal, untracked } from "@angular/core";
3
+ import { LibsUiComponentsDropdownComponent } from "@libs-ui/components-dropdown";
4
+ import { TranslateModule, TranslateService } from "@ngx-translate/core";
5
+ import { convertGetValue, convertItemSelectedDefine, getConfigHttpRequestDetailDate, getConfigHttpRequestListDate } from "../../defines/date-dropdown.define";
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@ngx-translate/core";
8
+ export class LibsUiComponentsDatetimeDropdownItemChildComponent {
9
+ /* PROPERTY */
10
+ httpRequestDetailItemById = signal(undefined);
11
+ listConfig = signal({
12
+ type: 'text',
13
+ configTemplateText: signal({
14
+ fieldKey: 'id',
15
+ autoScrollToItemSelected: true,
16
+ })
17
+ });
18
+ textNoSelectDisplay = computed(this.computedTextNoSelectDisplay.bind(this));
19
+ usingWidth = computed(this.computedWidth.bind(this));
20
+ /* INPUT */
21
+ typeDate = input(undefined);
22
+ getItemYearDisplay = input();
23
+ listHasButtonUnSelectOption = input();
24
+ readonly = input(false, { transform: (value) => value ?? false });
25
+ disable = input(false, { transform: (value) => value ?? false });
26
+ listData = input([]);
27
+ showBorderError = input(undefined);
28
+ listMaxItemShow = input(6, { transform: (value) => value ?? 6 });
29
+ zIndex = input(1000, { transform: (value) => value ?? 1000 });
30
+ classIncludeTextDisplayWhenNoSelect = input('');
31
+ listKeySelected = input();
32
+ widthDropdown = input(136);
33
+ first = input(undefined);
34
+ isError = input();
35
+ widthByElement = input();
36
+ ignoreConvertYearSelected = input();
37
+ listKeysDisable = input(undefined);
38
+ validRequired = input();
39
+ /* OUTPUT */
40
+ outSelectedKey = output();
41
+ outFunctionControl = output();
42
+ outChangStageFlagMouse = output();
43
+ /* INJECT */
44
+ translate = inject(TranslateService);
45
+ constructor() {
46
+ effect(() => {
47
+ const listData = this.listData();
48
+ untracked(() => {
49
+ this.httpRequestDetailItemById.set(getConfigHttpRequestDetailDate(listData));
50
+ this.listConfig.update(current => {
51
+ if (!current.httpRequestData) {
52
+ current.httpRequestData = signal(getConfigHttpRequestListDate(listData));
53
+ }
54
+ current.httpRequestData.set(getConfigHttpRequestListDate(listData));
55
+ if (!current.configTemplateText) {
56
+ current.configTemplateText = signal({
57
+ fieldKey: 'id',
58
+ autoScrollToItemSelected: true,
59
+ });
60
+ }
61
+ current.configTemplateText.set({
62
+ fieldKey: 'id',
63
+ autoScrollToItemSelected: true,
64
+ getValue: (item) => {
65
+ return convertGetValue(this.typeDate() || 'month', item, this.translate);
66
+ }
67
+ });
68
+ return current;
69
+ });
70
+ });
71
+ });
72
+ }
73
+ /* FUNCTIONS */
74
+ handlerChangeSelectedItem(event) {
75
+ if (!event || !event.key) {
76
+ this.outSelectedKey.emit(undefined);
77
+ return;
78
+ }
79
+ this.outSelectedKey.emit(event.key);
80
+ }
81
+ handlerFunctionControl(event) {
82
+ this.outFunctionControl.emit(event);
83
+ }
84
+ handlerChangFlagMouse(flagMouse) {
85
+ this.outChangStageFlagMouse.emit(flagMouse);
86
+ }
87
+ convertItemSelected = (item) => {
88
+ if (!item || !this.typeDate()) {
89
+ return;
90
+ }
91
+ item.labelDisplay = convertItemSelectedDefine(this.typeDate() ?? 'month', item, this.translate, this.getItemYearDisplay(), this.ignoreConvertYearSelected());
92
+ return item;
93
+ };
94
+ computedTextNoSelectDisplay() {
95
+ switch (this.typeDate()) {
96
+ case 'day':
97
+ return 'i18n_select_day';
98
+ case 'month':
99
+ return 'i18n_select_month';
100
+ case 'year':
101
+ return 'i18n_select_year';
102
+ case 'quarter':
103
+ return 'i18n_select_quarter';
104
+ default:
105
+ return 'month';
106
+ }
107
+ }
108
+ computedWidth() {
109
+ if (this.widthByElement()) {
110
+ return this.first() ? `${this.widthDropdown()}px` : '100%';
111
+ }
112
+ return `${this.widthDropdown()}px`;
113
+ }
114
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsDatetimeDropdownItemChildComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
115
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsDatetimeDropdownItemChildComponent, isStandalone: true, selector: "libs_ui-components-datetime-dropdown-item-child", inputs: { typeDate: { classPropertyName: "typeDate", publicName: "typeDate", isSignal: true, isRequired: false, transformFunction: null }, getItemYearDisplay: { classPropertyName: "getItemYearDisplay", publicName: "getItemYearDisplay", isSignal: true, isRequired: false, transformFunction: null }, listHasButtonUnSelectOption: { classPropertyName: "listHasButtonUnSelectOption", publicName: "listHasButtonUnSelectOption", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null }, listData: { classPropertyName: "listData", publicName: "listData", isSignal: true, isRequired: false, transformFunction: null }, showBorderError: { classPropertyName: "showBorderError", publicName: "showBorderError", isSignal: true, isRequired: false, transformFunction: null }, listMaxItemShow: { classPropertyName: "listMaxItemShow", publicName: "listMaxItemShow", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, classIncludeTextDisplayWhenNoSelect: { classPropertyName: "classIncludeTextDisplayWhenNoSelect", publicName: "classIncludeTextDisplayWhenNoSelect", isSignal: true, isRequired: false, transformFunction: null }, listKeySelected: { classPropertyName: "listKeySelected", publicName: "listKeySelected", isSignal: true, isRequired: false, transformFunction: null }, widthDropdown: { classPropertyName: "widthDropdown", publicName: "widthDropdown", isSignal: true, isRequired: false, transformFunction: null }, first: { classPropertyName: "first", publicName: "first", isSignal: true, isRequired: false, transformFunction: null }, isError: { classPropertyName: "isError", publicName: "isError", isSignal: true, isRequired: false, transformFunction: null }, widthByElement: { classPropertyName: "widthByElement", publicName: "widthByElement", isSignal: true, isRequired: false, transformFunction: null }, ignoreConvertYearSelected: { classPropertyName: "ignoreConvertYearSelected", publicName: "ignoreConvertYearSelected", isSignal: true, isRequired: false, transformFunction: null }, listKeysDisable: { classPropertyName: "listKeysDisable", publicName: "listKeysDisable", isSignal: true, isRequired: false, transformFunction: null }, validRequired: { classPropertyName: "validRequired", publicName: "validRequired", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { outSelectedKey: "outSelectedKey", outFunctionControl: "outFunctionControl", outChangStageFlagMouse: "outChangStageFlagMouse" }, ngImport: i0, template: " @if (typeDate()) {\n <div [style.width]=\"usingWidth()\">\n <libs_ui-components-dropdown [listHasButtonUnSelectOption]=\"listHasButtonUnSelectOption()\"\n [readonly]=\"readonly()\"\n [textDisplayWhenNoSelect]=\"textNoSelectDisplay()\"\n [disable]=\"disable()\"\n [showBorderError]=\"showBorderError()\"\n [listMaxItemShow]=\"listMaxItemShow()\"\n [listClickExactly]=\"false\"\n [zIndex]=\"zIndex()\"\n [labelPopoverConfig]=\"{ zIndex: zIndex() +1 }\"\n [listConfig]=\"listConfig()\"\n [listKeysDisable]=\"listKeysDisable()\"\n [convertItemSelected]=\"convertItemSelected\"\n [onlyEmitDataWhenReset]=\"true\"\n [classIncludeTextDisplayWhenNoSelect]=\"classIncludeTextDisplayWhenNoSelect()\"\n [httpRequestDetailItemById]=\"httpRequestDetailItemById()\"\n [listKeySelected]=\"listKeySelected()\"\n (outSelectKey)=\"handlerChangeSelectedItem($event)\"\n (outFunctionsControl)=\"handlerFunctionControl($event)\"\n (outChangStageFlagMouse)=\"handlerChangFlagMouse($event)\" />\n </div>\n }\n @if (isError()) {\n <div class=\"flex items-center mt-[4px]\">\n <span class=\"libs-ui-text-error libs-ui-font-h7r\"\n [innerHtml]=\"(validRequired()?.message || 'i18n_valid_empty_message')| translate:validRequired()?.interpolateParams\"></span>\n </div>\n }\n", dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: LibsUiComponentsDropdownComponent, selector: "libs_ui-components-dropdown", inputs: ["useXssFilter", "popoverElementRefCustom", "classInclude", "ignoreStopPropagationEvent", "flagMouse", "flagMouseContent", "popoverCustomConfig", "isNgContent", "zIndex", "convertItemSelected", "getPopoverItemSelected", "httpRequestDetailItemById", "lengthKeys", "textDisplayWhenNoSelect", "textDisplayWhenMultiSelect", "classIncludeTextDisplayWhenNoSelect", "fieldGetLabel", "labelPopoverConfig", "labelPopoverFullWidth", "hasContentUnitRight", "listSearchNoDataTemplateRef", "fieldGetImage", "imageSize", "typeShape", "fieldGetIcon", "fieldGetTextAvatar", "fieldGetColorAvatar", "classAvatarInclude", "getLastTextAfterSpace", "linkImageError", "showError", "showBorderError", "disable", "readonly", "labelConfig", "listSearchConfig", "isSearchOnline", "listHiddenInputSearch", "listSearchPadding", "listKeySearch", "listDividerClassInclude", "listConfig", "listButtonsOther", "listHasButtonUnSelectOption", "listClickExactly", "listBackgroundCustom", "listMaxItemShow", "listKeySelected", "listMultiKeySelected", "listKeysDisable", "listKeysHidden", "validRequired", "validMaxItemSelected", "changeValidUndefinedResetError", "allowSelectItemMultiple", "focusInputSearch", "onlyEmitDataWhenReset", "resetKeyWhenSelectAllKey", "listConfigHasDivider", "classIncludeIcon", "classIncludeContent", "listIgnoreClassDisableDefaultWhenUseKeysDisableItem", "tabKeyActive", "tabsConfig", "ignoreBorderBottom"], outputs: ["flagMouseChange", "flagMouseContentChange", "lengthKeysChange", "showBorderErrorChange", "listKeySelectedChange", "listMultiKeySelectedChange", "tabKeyActiveChange", "outSelectKey", "outSelectMultiKey", "outFunctionsControl", "outValidEvent", "outChangStageFlagMouse", "outDataChange", "outClickButtonOther", "outShowList", "outChangeTabKeyActive"] }] });
116
+ }
117
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsDatetimeDropdownItemChildComponent, decorators: [{
118
+ type: Component,
119
+ args: [{ selector: 'libs_ui-components-datetime-dropdown-item-child', standalone: true, imports: [
120
+ TranslateModule,
121
+ LibsUiComponentsDropdownComponent
122
+ ], template: " @if (typeDate()) {\n <div [style.width]=\"usingWidth()\">\n <libs_ui-components-dropdown [listHasButtonUnSelectOption]=\"listHasButtonUnSelectOption()\"\n [readonly]=\"readonly()\"\n [textDisplayWhenNoSelect]=\"textNoSelectDisplay()\"\n [disable]=\"disable()\"\n [showBorderError]=\"showBorderError()\"\n [listMaxItemShow]=\"listMaxItemShow()\"\n [listClickExactly]=\"false\"\n [zIndex]=\"zIndex()\"\n [labelPopoverConfig]=\"{ zIndex: zIndex() +1 }\"\n [listConfig]=\"listConfig()\"\n [listKeysDisable]=\"listKeysDisable()\"\n [convertItemSelected]=\"convertItemSelected\"\n [onlyEmitDataWhenReset]=\"true\"\n [classIncludeTextDisplayWhenNoSelect]=\"classIncludeTextDisplayWhenNoSelect()\"\n [httpRequestDetailItemById]=\"httpRequestDetailItemById()\"\n [listKeySelected]=\"listKeySelected()\"\n (outSelectKey)=\"handlerChangeSelectedItem($event)\"\n (outFunctionsControl)=\"handlerFunctionControl($event)\"\n (outChangStageFlagMouse)=\"handlerChangFlagMouse($event)\" />\n </div>\n }\n @if (isError()) {\n <div class=\"flex items-center mt-[4px]\">\n <span class=\"libs-ui-text-error libs-ui-font-h7r\"\n [innerHtml]=\"(validRequired()?.message || 'i18n_valid_empty_message')| translate:validRequired()?.interpolateParams\"></span>\n </div>\n }\n" }]
123
+ }], ctorParameters: () => [] });
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2RhdGV0aW1lL2Ryb3Bkb3duL3NyYy9pdGVtL2NoaWxkL2NoaWxkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9kYXRldGltZS9kcm9wZG93bi9zcmMvaXRlbS9jaGlsZC9jaGlsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEcsT0FBTyxFQUFpRCxpQ0FBaUMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBSWhJLE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsZUFBZSxFQUFFLHlCQUF5QixFQUFFLDhCQUE4QixFQUFFLDRCQUE0QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7OztBQWM5SixNQUFNLE9BQU8sa0RBQWtEO0lBQzdELGNBQWM7SUFDSix5QkFBeUIsR0FBRyxNQUFNLENBQWlDLFNBQVMsQ0FBQyxDQUFDO0lBQzlFLFVBQVUsR0FBRyxNQUFNLENBQWtCO1FBQzdDLElBQUksRUFBRSxNQUFNO1FBQ1osa0JBQWtCLEVBQUUsTUFBTSxDQUFDO1lBQ3pCLFFBQVEsRUFBRSxJQUFJO1lBQ2Qsd0JBQXdCLEVBQUUsSUFBSTtTQUMvQixDQUFDO0tBQ0gsQ0FBQyxDQUFDO0lBQ08sbUJBQW1CLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM1RSxV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QUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLENBQUM7UUFFN0osT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLENBQUM7SUFDTSwyQkFBMkI7UUFDakMsUUFBUSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztZQUN4QixLQUFLLEtBQUs7Z0JBQ1IsT0FBTyxpQkFBaUIsQ0FBQztZQUUzQixLQUFLLE9BQU87Z0JBQ1YsT0FBTyxtQkFBbUIsQ0FBQztZQUU3QixLQUFLLE1BQU07Z0JBQ1QsT0FBTyxrQkFBa0IsQ0FBQztZQUU1QixLQUFLLFNBQVM7Z0JBQ1osT0FBTyxxQkFBcUIsQ0FBQztZQUUvQjtnQkFDRSxPQUFPLE9BQU8sQ0FBQztRQUNuQixDQUFDO0lBQ0gsQ0FBQztJQUVPLGFBQWE7UUFDbkIsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQztZQUMxQixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQzdELENBQUM7UUFFRCxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUM7SUFDckMsQ0FBQzt3R0E3SFUsa0RBQWtEOzRGQUFsRCxrREFBa0QsODFGQ3JCL0QsaTRDQTZCQSwyQ0RiSSxlQUFlLDRGQUNmLGlDQUFpQzs7NEZBSXhCLGtEQUFrRDtrQkFYOUQsU0FBUzsrQkFFRSxpREFBaUQsY0FFL0MsSUFBSSxXQUNQO3dCQUNQLGVBQWU7d0JBQ2YsaUNBQWlDO3FCQUNsQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIGVmZmVjdCwgaW5qZWN0LCBpbnB1dCwgb3V0cHV0LCBzaWduYWwsIHVudHJhY2tlZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBJRHJvcGRvd25GdW5jdGlvbkNvbnRyb2xFdmVudCwgSUVtaXRTZWxlY3RLZXksIExpYnNVaUNvbXBvbmVudHNEcm9wZG93bkNvbXBvbmVudCB9IGZyb20gXCJAbGlicy11aS9jb21wb25lbnRzLWRyb3Bkb3duXCI7XG5pbXBvcnQgeyBJTGlzdENvbmZpZ0l0ZW0gfSBmcm9tIFwiQGxpYnMtdWkvY29tcG9uZW50cy1saXN0XCI7XG5pbXBvcnQgeyBJRmxhZ01vdXNlIH0gZnJvbSBcIkBsaWJzLXVpL2NvbXBvbmVudHMtcG9wb3ZlclwiO1xuaW1wb3J0IHsgSUh0dHBSZXF1ZXN0Q29uZmlnIH0gZnJvbSBcIkBsaWJzLXVpL3NlcnZpY2VzLWh0dHAtcmVxdWVzdFwiO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSBcIkBuZ3gtdHJhbnNsYXRlL2NvcmVcIjtcbmltcG9ydCB7IGNvbnZlcnRHZXRWYWx1ZSwgY29udmVydEl0ZW1TZWxlY3RlZERlZmluZSwgZ2V0Q29uZmlnSHR0cFJlcXVlc3REZXRhaWxEYXRlLCBnZXRDb25maWdIdHRwUmVxdWVzdExpc3REYXRlIH0gZnJvbSBcIi4uLy4uL2RlZmluZXMvZGF0ZS1kcm9wZG93bi5kZWZpbmVcIjtcbmltcG9ydCB7IFRZUEVfREFURV9GT1JNQVQgfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlcy9kYXRlLWRyb3Bkb3duLmludGVyZmFjZVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdsaWJzX3VpLWNvbXBvbmVudHMtZGF0ZXRpbWUtZHJvcGRvd24taXRlbS1jaGlsZCcsXG4gIHRlbXBsYXRlVXJsOiAnY2hpbGQuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIExpYnNVaUNvbXBvbmVudHNEcm9wZG93bkNvbXBvbmVudFxuICBdXG59KVxuXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c0RhdGV0aW1lRHJvcGRvd25JdGVtQ2hpbGRDb21wb25lbnQge1xuICAvKiBQUk9QRVJUWSAqL1xuICBwcm90ZWN0ZWQgaHR0cFJlcXVlc3REZXRhaWxJdGVtQnlJZCA9IHNpZ25hbDxJSHR0cFJlcXVlc3RDb25maWcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCBsaXN0Q29uZmlnID0gc2lnbmFsPElMaXN0Q29uZmlnSXRlbT4oe1xuICAgIHR5cGU6ICd0ZXh0JyxcbiAgICBjb25maWdUZW1wbGF0ZVRleHQ6IHNpZ25hbCh7XG4gICAgICBmaWVsZEtleTogJ2lkJyxcbiAgICAgIGF1dG9TY3JvbGxUb0l0ZW1TZWxlY3RlZDogdHJ1ZSxcbiAgICB9KVxuICB9KTtcbiAgcHJvdGVjdGVkIHRleHROb1NlbGVjdERpc3BsYXkgPSBjb21wdXRlZCh0aGlzLmNvbXB1dGVkVGV4dE5vU2VsZWN0RGlzcGxheS5iaW5kKHRoaXMpKTtcbiAgcHJvdGVjdGVkIHVzaW5nV2lkdGggPSBjb21wdXRlZCh0aGlzLmNvbXB1dGVkV2lkdGguYmluZCh0aGlzKSk7XG5cbiAgLyogSU5QVVQgKi9cbiAgcmVhZG9ubHkgdHlwZURhdGUgPSBpbnB1dDxUWVBFX0RBVEVfRk9STUFUIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICByZWFkb25seSBnZXRJdGVtWWVhckRpc3BsYXkgPSBpbnB1dDwoeWVhcjogc3RyaW5nKSA9PiBzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGxpc3RIYXNCdXR0b25VblNlbGVjdE9wdGlvbiA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IHJlYWRvbmx5ID0gaW5wdXQ8Ym9vbGVhbiwgYm9vbGVhbj4oZmFsc2UsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlID8/IGZhbHNlIH0pO1xuICByZWFkb25seSBkaXNhYmxlID0gaW5wdXQ8Ym9vbGVhbiwgYm9vbGVhbj4oZmFsc2UsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlID8/IGZhbHNlIH0pO1xuICByZWFkb25seSBsaXN0RGF0YSA9IGlucHV0PEFycmF5PHsgaWQ6IG51bWJlciwgbGFiZWw6IHN0cmluZyB9Pj4oW10pO1xuICByZWFkb25seSBzaG93Qm9yZGVyRXJyb3IgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICByZWFkb25seSBsaXN0TWF4SXRlbVNob3cgPSBpbnB1dDxudW1iZXIsIG51bWJlcj4oNiwgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgPz8gNiB9KTtcbiAgcmVhZG9ubHkgekluZGV4ID0gaW5wdXQ8bnVtYmVyLCBudW1iZXI+KDEwMDAsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlID8/IDEwMDAgfSk7XG4gIHJlYWRvbmx5IGNsYXNzSW5jbHVkZVRleHREaXNwbGF5V2hlbk5vU2VsZWN0ID0gaW5wdXQ8c3RyaW5nPignJyk7XG4gIHJlYWRvbmx5IGxpc3RLZXlTZWxlY3RlZCA9IGlucHV0PGFueT4oKTtcbiAgcmVhZG9ubHkgd2lkdGhEcm9wZG93biA9IGlucHV0PG51bWJlcj4oMTM2KTtcbiAgcmVhZG9ubHkgZmlyc3QgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICByZWFkb25seSBpc0Vycm9yID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgd2lkdGhCeUVsZW1lbnQgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBpZ25vcmVDb252ZXJ0WWVhclNlbGVjdGVkID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgbGlzdEtleXNEaXNhYmxlID0gaW5wdXQ8QXJyYXk8YW55PiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkgdmFsaWRSZXF1aXJlZCA9IGlucHV0PHtcbiAgICBtZXNzYWdlPzogc3RyaW5nO1xuICAgIGludGVycG9sYXRlUGFyYW1zPzogeyBhbnk6IG9iamVjdCB9O1xuICB9PigpO1xuXG4gIC8qIE9VVFBVVCAqL1xuICByZWFkb25seSBvdXRTZWxlY3RlZEtleSA9IG91dHB1dDxhbnk+KCk7XG4gIHJlYWRvbmx5IG91dEZ1bmN0aW9uQ29udHJvbCA9IG91dHB1dDxJRHJvcGRvd25GdW5jdGlvbkNvbnRyb2xFdmVudD4oKTtcbiAgcmVhZG9ubHkgb3V0Q2hhbmdTdGFnZUZsYWdNb3VzZSA9IG91dHB1dDxJRmxhZ01vdXNlPigpO1xuXG4gIC8qIElOSkVDVCAqL1xuICBwcml2YXRlIHRyYW5zbGF0ZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgbGlzdERhdGEgPSB0aGlzLmxpc3REYXRhKCk7XG5cbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgIHRoaXMuaHR0cFJlcXVlc3REZXRhaWxJdGVtQnlJZC5zZXQoZ2V0Q29uZmlnSHR0cFJlcXVlc3REZXRhaWxEYXRlKGxpc3REYXRhKSk7XG4gICAgICAgIHRoaXMubGlzdENvbmZpZy51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgICAgaWYgKCFjdXJyZW50Lmh0dHBSZXF1ZXN0RGF0YSkge1xuICAgICAgICAgICAgY3VycmVudC5odHRwUmVxdWVzdERhdGEgPSBzaWduYWw8SUh0dHBSZXF1ZXN0Q29uZmlnPihnZXRDb25maWdIdHRwUmVxdWVzdExpc3REYXRlKGxpc3REYXRhKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGN1cnJlbnQuaHR0cFJlcXVlc3REYXRhLnNldChnZXRDb25maWdIdHRwUmVxdWVzdExpc3REYXRlKGxpc3REYXRhKSk7XG4gICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZpZ1RlbXBsYXRlVGV4dCkge1xuICAgICAgICAgICAgY3VycmVudC5jb25maWdUZW1wbGF0ZVRleHQgPSBzaWduYWwoe1xuICAgICAgICAgICAgICBmaWVsZEtleTogJ2lkJyxcbiAgICAgICAgICAgICAgYXV0b1Njcm9sbFRvSXRlbVNlbGVjdGVkOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGN1cnJlbnQuY29uZmlnVGVtcGxhdGVUZXh0LnNldCh7XG4gICAgICAgICAgICBmaWVsZEtleTogJ2lkJyxcbiAgICAgICAgICAgIGF1dG9TY3JvbGxUb0l0ZW1TZWxlY3RlZDogdHJ1ZSxcbiAgICAgICAgICAgIGdldFZhbHVlOiAoaXRlbTogeyBsYWJlbDogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRHZXRWYWx1ZSh0aGlzLnR5cGVEYXRlKCkgfHwgJ21vbnRoJywgaXRlbSwgdGhpcy50cmFuc2xhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKiBGVU5DVElPTlMgKi9cbiAgcHJvdGVjdGVkIGhhbmRsZXJDaGFuZ2VTZWxlY3RlZEl0ZW0oZXZlbnQ/OiBJRW1pdFNlbGVjdEtleSkge1xuICAgIGlmICghZXZlbnQgfHwgIWV2ZW50LmtleSkge1xuICAgICAgdGhpcy5vdXRTZWxlY3RlZEtleS5lbWl0KHVuZGVmaW5lZCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5vdXRTZWxlY3RlZEtleS5lbWl0KGV2ZW50LmtleSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckZ1bmN0aW9uQ29udHJvbChldmVudDogSURyb3Bkb3duRnVuY3Rpb25Db250cm9sRXZlbnQpIHtcbiAgICB0aGlzLm91dEZ1bmN0aW9uQ29udHJvbC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2hhbmdGbGFnTW91c2UoZmxhZ01vdXNlOiBJRmxhZ01vdXNlKSB7XG4gICAgdGhpcy5vdXRDaGFuZ1N0YWdlRmxhZ01vdXNlLmVtaXQoZmxhZ01vdXNlKTtcbiAgfVxuICBwcm90ZWN0ZWQgY29udmVydEl0ZW1TZWxlY3RlZCA9IChpdGVtOiBhbnkpID0+IHtcbiAgICBpZiAoIWl0ZW0gfHwgIXRoaXMudHlwZURhdGUoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpdGVtLmxhYmVsRGlzcGxheSA9IGNvbnZlcnRJdGVtU2VsZWN0ZWREZWZpbmUodGhpcy50eXBlRGF0ZSgpID8/ICdtb250aCcsIGl0ZW0sIHRoaXMudHJhbnNsYXRlLCB0aGlzLmdldEl0ZW1ZZWFyRGlzcGxheSgpLCB0aGlzLmlnbm9yZUNvbnZlcnRZZWFyU2VsZWN0ZWQoKSk7XG5cbiAgICByZXR1cm4gaXRlbTtcbiAgfTtcbiAgcHJpdmF0ZSBjb21wdXRlZFRleHROb1NlbGVjdERpc3BsYXkoKSB7XG4gICAgc3dpdGNoICh0aGlzLnR5cGVEYXRlKCkpIHtcbiAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgIHJldHVybiAnaTE4bl9zZWxlY3RfZGF5JztcblxuICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICByZXR1cm4gJ2kxOG5fc2VsZWN0X21vbnRoJztcblxuICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgIHJldHVybiAnaTE4bl9zZWxlY3RfeWVhcic7XG5cbiAgICAgIGNhc2UgJ3F1YXJ0ZXInOlxuICAgICAgICByZXR1cm4gJ2kxOG5fc2VsZWN0X3F1YXJ0ZXInO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ21vbnRoJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbXB1dGVkV2lkdGgoKSB7XG4gICAgaWYgKHRoaXMud2lkdGhCeUVsZW1lbnQoKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZmlyc3QoKSA/IGAke3RoaXMud2lkdGhEcm9wZG93bigpfXB4YCA6ICcxMDAlJztcbiAgICB9XG5cbiAgICByZXR1cm4gYCR7dGhpcy53aWR0aERyb3Bkb3duKCl9cHhgO1xuICB9XG59IiwiICBAaWYgKHR5cGVEYXRlKCkpIHtcbiAgICA8ZGl2IFtzdHlsZS53aWR0aF09XCJ1c2luZ1dpZHRoKClcIj5cbiAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtZHJvcGRvd24gW2xpc3RIYXNCdXR0b25VblNlbGVjdE9wdGlvbl09XCJsaXN0SGFzQnV0dG9uVW5TZWxlY3RPcHRpb24oKVwiXG4gICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seSgpXCJcbiAgICAgICAgW3RleHREaXNwbGF5V2hlbk5vU2VsZWN0XT1cInRleHROb1NlbGVjdERpc3BsYXkoKVwiXG4gICAgICAgIFtkaXNhYmxlXT1cImRpc2FibGUoKVwiXG4gICAgICAgIFtzaG93Qm9yZGVyRXJyb3JdPVwic2hvd0JvcmRlckVycm9yKClcIlxuICAgICAgICBbbGlzdE1heEl0ZW1TaG93XT1cImxpc3RNYXhJdGVtU2hvdygpXCJcbiAgICAgICAgW2xpc3RDbGlja0V4YWN0bHldPVwiZmFsc2VcIlxuICAgICAgICBbekluZGV4XT1cInpJbmRleCgpXCJcbiAgICAgICAgW2xhYmVsUG9wb3ZlckNvbmZpZ109XCJ7IHpJbmRleDogekluZGV4KCkgKzEgfVwiXG4gICAgICAgIFtsaXN0Q29uZmlnXT1cImxpc3RDb25maWcoKVwiXG4gICAgICAgIFtsaXN0S2V5c0Rpc2FibGVdPVwibGlzdEtleXNEaXNhYmxlKClcIlxuICAgICAgICBbY29udmVydEl0ZW1TZWxlY3RlZF09XCJjb252ZXJ0SXRlbVNlbGVjdGVkXCJcbiAgICAgICAgW29ubHlFbWl0RGF0YVdoZW5SZXNldF09XCJ0cnVlXCJcbiAgICAgICAgW2NsYXNzSW5jbHVkZVRleHREaXNwbGF5V2hlbk5vU2VsZWN0XT1cImNsYXNzSW5jbHVkZVRleHREaXNwbGF5V2hlbk5vU2VsZWN0KClcIlxuICAgICAgICBbaHR0cFJlcXVlc3REZXRhaWxJdGVtQnlJZF09XCJodHRwUmVxdWVzdERldGFpbEl0ZW1CeUlkKClcIlxuICAgICAgICBbbGlzdEtleVNlbGVjdGVkXT1cImxpc3RLZXlTZWxlY3RlZCgpXCJcbiAgICAgICAgKG91dFNlbGVjdEtleSk9XCJoYW5kbGVyQ2hhbmdlU2VsZWN0ZWRJdGVtKCRldmVudClcIlxuICAgICAgICAob3V0RnVuY3Rpb25zQ29udHJvbCk9XCJoYW5kbGVyRnVuY3Rpb25Db250cm9sKCRldmVudClcIlxuICAgICAgICAob3V0Q2hhbmdTdGFnZUZsYWdNb3VzZSk9XCJoYW5kbGVyQ2hhbmdGbGFnTW91c2UoJGV2ZW50KVwiIC8+XG4gICAgPC9kaXY+XG4gIH1cbiAgQGlmIChpc0Vycm9yKCkpIHtcbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgbXQtWzRweF1cIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwibGlicy11aS10ZXh0LWVycm9yIGxpYnMtdWktZm9udC1oN3JcIlxuICAgICAgICBbaW5uZXJIdG1sXT1cIih2YWxpZFJlcXVpcmVkKCk/Lm1lc3NhZ2UgfHwgJ2kxOG5fdmFsaWRfZW1wdHlfbWVzc2FnZScpfCB0cmFuc2xhdGU6dmFsaWRSZXF1aXJlZCgpPy5pbnRlcnBvbGF0ZVBhcmFtc1wiPjwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgfVxuIl19