@skyux/datetime 7.0.0-beta.8 → 7.0.0
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/documentation.json +1630 -985
- package/esm2020/lib/modules/date-pipe/date-pipe.module.mjs +5 -5
- package/esm2020/lib/modules/date-pipe/date.pipe.mjs +4 -5
- package/esm2020/lib/modules/date-pipe/fuzzy-date.pipe.mjs +4 -5
- package/esm2020/lib/modules/date-range-picker/date-range-picker-end-date-resource-key.pipe.mjs +20 -0
- package/esm2020/lib/modules/date-range-picker/date-range-picker-start-date-resource-key.pipe.mjs +20 -0
- package/esm2020/lib/modules/date-range-picker/date-range-picker.component.mjs +267 -212
- package/esm2020/lib/modules/date-range-picker/date-range-picker.module.mjs +14 -6
- package/esm2020/lib/modules/date-range-picker/date-range.service.mjs +45 -42
- package/esm2020/lib/modules/date-range-picker/types/date-range-calculator-date-range-function.mjs +1 -1
- package/esm2020/lib/modules/date-range-picker/types/date-range-calculator-validate-function.mjs +1 -1
- package/esm2020/lib/modules/date-range-picker/types/date-range-calculator.mjs +15 -15
- package/esm2020/lib/modules/date-range-picker/types/date-range-default-calculator-configs.mjs +4 -2
- package/esm2020/lib/modules/date-range-picker/types/date-range.mjs +1 -1
- package/esm2020/lib/modules/datepicker/date-formatter.mjs +2 -2
- package/esm2020/lib/modules/datepicker/datepicker-adapter.service.mjs +11 -18
- package/esm2020/lib/modules/datepicker/datepicker-calendar-inner.component.mjs +46 -23
- package/esm2020/lib/modules/datepicker/datepicker-calendar.component.mjs +29 -37
- package/esm2020/lib/modules/datepicker/datepicker-config.service.mjs +4 -4
- package/esm2020/lib/modules/datepicker/datepicker-input-fuzzy.directive.mjs +227 -217
- package/esm2020/lib/modules/datepicker/datepicker-input.directive.mjs +216 -227
- package/esm2020/lib/modules/datepicker/datepicker.component.mjs +122 -145
- package/esm2020/lib/modules/datepicker/datepicker.module.mjs +5 -5
- package/esm2020/lib/modules/datepicker/datepicker.service.mjs +4 -4
- package/esm2020/lib/modules/datepicker/daypicker-button.component.mjs +5 -6
- package/esm2020/lib/modules/datepicker/daypicker-cell.component.mjs +63 -63
- package/esm2020/lib/modules/datepicker/daypicker.component.mjs +146 -141
- package/esm2020/lib/modules/datepicker/fuzzy-date.service.mjs +126 -136
- package/esm2020/lib/modules/datepicker/monthpicker.component.mjs +53 -52
- package/esm2020/lib/modules/datepicker/yearpicker.component.mjs +55 -54
- package/esm2020/lib/modules/shared/sky-datetime-resources.module.mjs +5 -5
- package/esm2020/lib/modules/timepicker/timepicker.component.mjs +109 -95
- package/esm2020/lib/modules/timepicker/timepicker.directive.mjs +109 -103
- package/esm2020/lib/modules/timepicker/timepicker.module.mjs +5 -5
- package/fesm2015/skyux-datetime.mjs +1716 -1590
- package/fesm2015/skyux-datetime.mjs.map +1 -1
- package/fesm2020/skyux-datetime.mjs +1694 -1586
- package/fesm2020/skyux-datetime.mjs.map +1 -1
- package/lib/modules/date-range-picker/date-range-picker-end-date-resource-key.pipe.d.ts +8 -0
- package/lib/modules/date-range-picker/date-range-picker-start-date-resource-key.pipe.d.ts +8 -0
- package/lib/modules/date-range-picker/date-range-picker.component.d.ts +14 -43
- package/lib/modules/date-range-picker/date-range-picker.module.d.ts +9 -7
- package/lib/modules/date-range-picker/date-range.service.d.ts +1 -5
- package/lib/modules/date-range-picker/types/date-range-calculator-date-range-function.d.ts +1 -1
- package/lib/modules/date-range-picker/types/date-range-calculator-validate-function.d.ts +1 -1
- package/lib/modules/date-range-picker/types/date-range-calculator.d.ts +3 -8
- package/lib/modules/date-range-picker/types/date-range.d.ts +2 -2
- package/lib/modules/datepicker/date-formatter.d.ts +3 -3
- package/lib/modules/datepicker/datepicker-adapter.service.d.ts +1 -5
- package/lib/modules/datepicker/datepicker-calendar-inner.component.d.ts +18 -19
- package/lib/modules/datepicker/datepicker-calendar.component.d.ts +14 -25
- package/lib/modules/datepicker/datepicker-config.service.d.ts +3 -3
- package/lib/modules/datepicker/datepicker-input-fuzzy.directive.d.ts +17 -53
- package/lib/modules/datepicker/datepicker-input.directive.d.ts +13 -68
- package/lib/modules/datepicker/datepicker.component.d.ts +21 -58
- package/lib/modules/datepicker/daypicker-button.component.d.ts +1 -1
- package/lib/modules/datepicker/daypicker-cell.component.d.ts +3 -10
- package/lib/modules/datepicker/daypicker.component.d.ts +4 -16
- package/lib/modules/datepicker/fuzzy-date.service.d.ts +6 -30
- package/lib/modules/datepicker/monthpicker.component.d.ts +1 -4
- package/lib/modules/datepicker/yearpicker.component.d.ts +1 -3
- package/lib/modules/timepicker/timepicker.component.d.ts +14 -32
- package/lib/modules/timepicker/timepicker.directive.d.ts +9 -27
- package/package.json +12 -12
@@ -1,13 +1,12 @@
|
|
1
|
-
|
1
|
+
var _SkyDatepickerInputDirective_instances, _SkyDatepickerInputDirective_value_get, _SkyDatepickerInputDirective_value_set, _SkyDatepickerInputDirective_control, _SkyDatepickerInputDirective_dateFormatter, _SkyDatepickerInputDirective_initialPlaceholder, _SkyDatepickerInputDirective_preferredShortDateFormat, _SkyDatepickerInputDirective_ngUnsubscribe, _SkyDatepickerInputDirective__dateFormat, _SkyDatepickerInputDirective__disabled, _SkyDatepickerInputDirective__maxDate, _SkyDatepickerInputDirective__minDate, _SkyDatepickerInputDirective__startingDay, _SkyDatepickerInputDirective__strict, _SkyDatepickerInputDirective__value, _SkyDatepickerInputDirective_adapter, _SkyDatepickerInputDirective_changeDetector, _SkyDatepickerInputDirective_configService, _SkyDatepickerInputDirective_elementRef, _SkyDatepickerInputDirective_localeProvider, _SkyDatepickerInputDirective_renderer, _SkyDatepickerInputDirective_resourcesService, _SkyDatepickerInputDirective_datepickerComponent, _SkyDatepickerInputDirective_applyDateFormat, _SkyDatepickerInputDirective_onValueChange, _SkyDatepickerInputDirective_setInputElementValue, _SkyDatepickerInputDirective_getDateValue, _SkyDatepickerInputDirective_getShortcutOrDateValue, _SkyDatepickerInputDirective_isDateStringValid, _SkyDatepickerInputDirective_onChange, _SkyDatepickerInputDirective_onTouched, _SkyDatepickerInputDirective_onValidatorChange, _SkyDatepickerInputDirective_updatePlaceholder, _SkyDatepickerInputDirective_updateValue;
|
2
|
+
import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
|
3
|
+
import { Directive, HostListener, Input, Optional, forwardRef, } from '@angular/core';
|
2
4
|
import { NG_VALIDATORS, NG_VALUE_ACCESSOR, } from '@angular/forms';
|
3
|
-
import { SkyAppLocaleProvider, SkyLibResourcesService } from '@skyux/i18n';
|
4
5
|
import moment from 'moment';
|
5
6
|
import { Subject } from 'rxjs';
|
6
7
|
import { distinctUntilChanged, takeUntil } from 'rxjs/operators';
|
7
8
|
import { SkyDateFormatter } from './date-formatter';
|
8
9
|
import { SkyDatepickerAdapterService } from './datepicker-adapter.service';
|
9
|
-
import { SkyDatepickerConfigService } from './datepicker-config.service';
|
10
|
-
import { SkyDatepickerComponent } from './datepicker.component';
|
11
10
|
import * as i0 from "@angular/core";
|
12
11
|
import * as i1 from "./datepicker-adapter.service";
|
13
12
|
import * as i2 from "./datepicker-config.service";
|
@@ -25,40 +24,62 @@ const SKY_DATEPICKER_VALIDATOR = {
|
|
25
24
|
};
|
26
25
|
export class SkyDatepickerInputDirective {
|
27
26
|
constructor(adapter, changeDetector, configService, elementRef, localeProvider, renderer, resourcesService, datepickerComponent) {
|
28
|
-
this
|
29
|
-
this.changeDetector = changeDetector;
|
30
|
-
this.configService = configService;
|
31
|
-
this.elementRef = elementRef;
|
32
|
-
this.localeProvider = localeProvider;
|
33
|
-
this.renderer = renderer;
|
34
|
-
this.resourcesService = resourcesService;
|
35
|
-
this.datepickerComponent = datepickerComponent;
|
27
|
+
_SkyDatepickerInputDirective_instances.add(this);
|
36
28
|
/**
|
37
29
|
* Indicates whether to disable date validation on the datepicker input.
|
38
30
|
* @default false
|
39
31
|
*/
|
40
32
|
this.skyDatepickerNoValidate = false;
|
41
|
-
this
|
42
|
-
this
|
33
|
+
_SkyDatepickerInputDirective_control.set(this, void 0);
|
34
|
+
_SkyDatepickerInputDirective_dateFormatter.set(this, new SkyDateFormatter());
|
35
|
+
_SkyDatepickerInputDirective_initialPlaceholder.set(this, void 0);
|
36
|
+
_SkyDatepickerInputDirective_preferredShortDateFormat.set(this, void 0);
|
37
|
+
_SkyDatepickerInputDirective_ngUnsubscribe.set(this, new Subject());
|
38
|
+
_SkyDatepickerInputDirective__dateFormat.set(this, void 0);
|
39
|
+
_SkyDatepickerInputDirective__disabled.set(this, false);
|
40
|
+
_SkyDatepickerInputDirective__maxDate.set(this, void 0);
|
41
|
+
_SkyDatepickerInputDirective__minDate.set(this, void 0);
|
42
|
+
_SkyDatepickerInputDirective__startingDay.set(this, void 0);
|
43
|
+
_SkyDatepickerInputDirective__strict.set(this, false);
|
44
|
+
_SkyDatepickerInputDirective__value.set(this, void 0);
|
45
|
+
_SkyDatepickerInputDirective_adapter.set(this, void 0);
|
46
|
+
_SkyDatepickerInputDirective_changeDetector.set(this, void 0);
|
47
|
+
_SkyDatepickerInputDirective_configService.set(this, void 0);
|
48
|
+
_SkyDatepickerInputDirective_elementRef.set(this, void 0);
|
49
|
+
_SkyDatepickerInputDirective_localeProvider.set(this, void 0);
|
50
|
+
_SkyDatepickerInputDirective_renderer.set(this, void 0);
|
51
|
+
_SkyDatepickerInputDirective_resourcesService.set(this, void 0);
|
52
|
+
_SkyDatepickerInputDirective_datepickerComponent.set(this, void 0);
|
43
53
|
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
44
54
|
// istanbul ignore next
|
45
|
-
this
|
55
|
+
_SkyDatepickerInputDirective_onChange.set(this, (_) => { });
|
46
56
|
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
47
57
|
// istanbul ignore next
|
48
|
-
this
|
58
|
+
_SkyDatepickerInputDirective_onTouched.set(this, () => { });
|
49
59
|
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
50
60
|
// istanbul ignore next
|
51
|
-
this
|
52
|
-
|
53
|
-
|
54
|
-
|
61
|
+
_SkyDatepickerInputDirective_onValidatorChange.set(this, () => { });
|
62
|
+
if (!datepickerComponent) {
|
63
|
+
throw new Error('You must wrap the `skyDatepickerInput` directive within a ' +
|
64
|
+
'`<sky-datepicker>` component!');
|
65
|
+
}
|
66
|
+
__classPrivateFieldSet(this, _SkyDatepickerInputDirective_adapter, adapter, "f");
|
67
|
+
__classPrivateFieldSet(this, _SkyDatepickerInputDirective_changeDetector, changeDetector, "f");
|
68
|
+
__classPrivateFieldSet(this, _SkyDatepickerInputDirective_configService, configService, "f");
|
69
|
+
__classPrivateFieldSet(this, _SkyDatepickerInputDirective_elementRef, elementRef, "f");
|
70
|
+
__classPrivateFieldSet(this, _SkyDatepickerInputDirective_localeProvider, localeProvider, "f");
|
71
|
+
__classPrivateFieldSet(this, _SkyDatepickerInputDirective_renderer, renderer, "f");
|
72
|
+
__classPrivateFieldSet(this, _SkyDatepickerInputDirective_resourcesService, resourcesService, "f");
|
73
|
+
__classPrivateFieldSet(this, _SkyDatepickerInputDirective_datepickerComponent, datepickerComponent, "f");
|
74
|
+
__classPrivateFieldSet(this, _SkyDatepickerInputDirective_initialPlaceholder, __classPrivateFieldGet(this, _SkyDatepickerInputDirective_adapter, "f").getPlaceholder(__classPrivateFieldGet(this, _SkyDatepickerInputDirective_elementRef, "f")), "f");
|
75
|
+
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_instances, "m", _SkyDatepickerInputDirective_updatePlaceholder).call(this);
|
76
|
+
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_localeProvider, "f")
|
55
77
|
.getLocaleInfo()
|
56
|
-
.pipe(takeUntil(this
|
78
|
+
.pipe(takeUntil(__classPrivateFieldGet(this, _SkyDatepickerInputDirective_ngUnsubscribe, "f")))
|
57
79
|
.subscribe((localeInfo) => {
|
58
80
|
SkyDateFormatter.setLocale(localeInfo.locale);
|
59
|
-
this.
|
60
|
-
|
61
|
-
this.applyDateFormat();
|
81
|
+
__classPrivateFieldSet(this, _SkyDatepickerInputDirective_preferredShortDateFormat, SkyDateFormatter.getPreferredShortDateFormat(), "f");
|
82
|
+
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_instances, "m", _SkyDatepickerInputDirective_applyDateFormat).call(this);
|
62
83
|
});
|
63
84
|
}
|
64
85
|
/**
|
@@ -68,58 +89,54 @@ export class SkyDatepickerInputDirective {
|
|
68
89
|
*/
|
69
90
|
set dateFormat(value) {
|
70
91
|
/* istanbul ignore else */
|
71
|
-
if (value !== this
|
72
|
-
this
|
73
|
-
this.
|
92
|
+
if (value !== __classPrivateFieldGet(this, _SkyDatepickerInputDirective__dateFormat, "f")) {
|
93
|
+
__classPrivateFieldSet(this, _SkyDatepickerInputDirective__dateFormat, value, "f");
|
94
|
+
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_instances, "m", _SkyDatepickerInputDirective_applyDateFormat).call(this);
|
74
95
|
}
|
75
96
|
}
|
97
|
+
// TODO: Refactor to not have getter logic
|
76
98
|
get dateFormat() {
|
77
|
-
return (this
|
78
|
-
this.
|
79
|
-
this
|
99
|
+
return (__classPrivateFieldGet(this, _SkyDatepickerInputDirective__dateFormat, "f") ||
|
100
|
+
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_configService, "f").dateFormat ||
|
101
|
+
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_preferredShortDateFormat, "f"));
|
80
102
|
}
|
81
103
|
/**
|
82
104
|
* Indicates whether to disable the datepicker.
|
83
105
|
* @default false
|
84
106
|
*/
|
85
107
|
set disabled(value) {
|
86
|
-
this
|
87
|
-
this.
|
88
|
-
this.
|
108
|
+
__classPrivateFieldSet(this, _SkyDatepickerInputDirective__disabled, value || false, "f");
|
109
|
+
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_datepickerComponent, "f").disabled = value;
|
110
|
+
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_renderer, "f").setProperty(__classPrivateFieldGet(this, _SkyDatepickerInputDirective_elementRef, "f").nativeElement, 'disabled', value);
|
89
111
|
}
|
90
112
|
get disabled() {
|
91
|
-
return this
|
92
|
-
}
|
93
|
-
/**
|
94
|
-
* @internal
|
95
|
-
* Indicates if the input element or any of its children have focus.
|
96
|
-
*/
|
97
|
-
get inputIsFocused() {
|
98
|
-
return this.adapter.elementIsFocused();
|
113
|
+
return __classPrivateFieldGet(this, _SkyDatepickerInputDirective__disabled, "f");
|
99
114
|
}
|
100
115
|
/**
|
101
116
|
* Specifies the latest date that is available in the calendar. Place this attribute on
|
102
117
|
* the `input` element to override the default in `SkyDatepickerConfigService`.
|
103
118
|
*/
|
104
119
|
set maxDate(value) {
|
105
|
-
this
|
106
|
-
this.
|
107
|
-
this.
|
120
|
+
__classPrivateFieldSet(this, _SkyDatepickerInputDirective__maxDate, value, "f");
|
121
|
+
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_datepickerComponent, "f").maxDate = this.maxDate;
|
122
|
+
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_onValidatorChange, "f").call(this);
|
108
123
|
}
|
124
|
+
// TODO: Refactor to not have getter logic
|
109
125
|
get maxDate() {
|
110
|
-
return this
|
126
|
+
return __classPrivateFieldGet(this, _SkyDatepickerInputDirective__maxDate, "f") || __classPrivateFieldGet(this, _SkyDatepickerInputDirective_configService, "f").maxDate;
|
111
127
|
}
|
112
128
|
/**
|
113
129
|
* Specifies the earliest date that is available in the calendar. Place this attribute on
|
114
130
|
* the `input` element to override the default in `SkyDatepickerConfigService`.
|
115
131
|
*/
|
116
132
|
set minDate(value) {
|
117
|
-
this
|
118
|
-
this.
|
119
|
-
this.
|
133
|
+
__classPrivateFieldSet(this, _SkyDatepickerInputDirective__minDate, value, "f");
|
134
|
+
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_datepickerComponent, "f").minDate = this.minDate;
|
135
|
+
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_onValidatorChange, "f").call(this);
|
120
136
|
}
|
137
|
+
// TODO: Refactor to not have getter logic
|
121
138
|
get minDate() {
|
122
|
-
return this
|
139
|
+
return __classPrivateFieldGet(this, _SkyDatepickerInputDirective__minDate, "f") || __classPrivateFieldGet(this, _SkyDatepickerInputDirective_configService, "f").minDate;
|
123
140
|
}
|
124
141
|
/**
|
125
142
|
* Creates the datepicker input and calendar. Place this directive on an `input` element,
|
@@ -143,12 +160,13 @@ export class SkyDatepickerInputDirective {
|
|
143
160
|
* @default 0
|
144
161
|
*/
|
145
162
|
set startingDay(value) {
|
146
|
-
this
|
147
|
-
this.
|
148
|
-
this.
|
163
|
+
__classPrivateFieldSet(this, _SkyDatepickerInputDirective__startingDay, value, "f");
|
164
|
+
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_datepickerComponent, "f").startingDay = this.startingDay;
|
165
|
+
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_onValidatorChange, "f").call(this);
|
149
166
|
}
|
167
|
+
// TODO: Refactor to not have getter logic
|
150
168
|
get startingDay() {
|
151
|
-
return this
|
169
|
+
return __classPrivateFieldGet(this, _SkyDatepickerInputDirective__startingDay, "f") || __classPrivateFieldGet(this, _SkyDatepickerInputDirective_configService, "f").startingDay;
|
152
170
|
}
|
153
171
|
/**
|
154
172
|
* Indicates whether the format of the date value must match the format from the `dateFormat` value.
|
@@ -159,41 +177,31 @@ export class SkyDatepickerInputDirective {
|
|
159
177
|
* @default false
|
160
178
|
*/
|
161
179
|
set strict(value) {
|
162
|
-
this
|
180
|
+
__classPrivateFieldSet(this, _SkyDatepickerInputDirective__strict, value || false, "f");
|
163
181
|
}
|
164
182
|
get strict() {
|
165
|
-
return this
|
166
|
-
}
|
167
|
-
get value() {
|
168
|
-
return this._value;
|
169
|
-
}
|
170
|
-
set value(value) {
|
171
|
-
this.updateValue(value);
|
183
|
+
return __classPrivateFieldGet(this, _SkyDatepickerInputDirective__strict, "f");
|
172
184
|
}
|
173
185
|
ngOnInit() {
|
174
|
-
|
175
|
-
|
176
|
-
'`<sky-datepicker>` component!');
|
177
|
-
}
|
178
|
-
const element = this.elementRef.nativeElement;
|
179
|
-
this.renderer.addClass(element, 'sky-form-control');
|
186
|
+
const element = __classPrivateFieldGet(this, _SkyDatepickerInputDirective_elementRef, "f").nativeElement;
|
187
|
+
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_renderer, "f").addClass(element, 'sky-form-control');
|
180
188
|
const hasAriaLabel = element.getAttribute('aria-label');
|
181
189
|
if (!hasAriaLabel) {
|
182
|
-
this
|
190
|
+
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_resourcesService, "f")
|
183
191
|
.getString('skyux_date_field_default_label')
|
184
|
-
.pipe(takeUntil(this
|
192
|
+
.pipe(takeUntil(__classPrivateFieldGet(this, _SkyDatepickerInputDirective_ngUnsubscribe, "f")))
|
185
193
|
.subscribe((value) => {
|
186
|
-
this.
|
194
|
+
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_renderer, "f").setAttribute(element, 'aria-label', value);
|
187
195
|
});
|
188
196
|
}
|
189
197
|
}
|
190
198
|
ngAfterContentInit() {
|
191
|
-
this.
|
199
|
+
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_datepickerComponent, "f").dateChange
|
192
200
|
.pipe(distinctUntilChanged())
|
193
|
-
.pipe(takeUntil(this
|
201
|
+
.pipe(takeUntil(__classPrivateFieldGet(this, _SkyDatepickerInputDirective_ngUnsubscribe, "f")))
|
194
202
|
.subscribe((value) => {
|
195
|
-
this
|
196
|
-
this.
|
203
|
+
__classPrivateFieldSet(this, _SkyDatepickerInputDirective_instances, value, "a", _SkyDatepickerInputDirective_value_set);
|
204
|
+
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_onTouched, "f").call(this);
|
197
205
|
});
|
198
206
|
}
|
199
207
|
ngAfterViewInit() {
|
@@ -203,69 +211,68 @@ export class SkyDatepickerInputDirective {
|
|
203
211
|
// Of note is the parent check which allows us to determine if the form is reactive.
|
204
212
|
// Without this check there is a changed before checked error
|
205
213
|
/* istanbul ignore else */
|
206
|
-
if (this
|
214
|
+
if (__classPrivateFieldGet(this, _SkyDatepickerInputDirective_control, "f") && __classPrivateFieldGet(this, _SkyDatepickerInputDirective_control, "f").parent) {
|
207
215
|
setTimeout(() => {
|
208
|
-
this
|
216
|
+
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_control, "f")?.setValue(__classPrivateFieldGet(this, _SkyDatepickerInputDirective_instances, "a", _SkyDatepickerInputDirective_value_get), {
|
209
217
|
emitEvent: false,
|
210
218
|
});
|
211
|
-
this.
|
219
|
+
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_changeDetector, "f").markForCheck();
|
212
220
|
});
|
213
221
|
}
|
214
|
-
this.adapter.init(this.elementRef);
|
215
222
|
}
|
216
223
|
ngOnDestroy() {
|
217
|
-
this.
|
218
|
-
this.
|
224
|
+
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_ngUnsubscribe, "f").next();
|
225
|
+
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_ngUnsubscribe, "f").complete();
|
219
226
|
}
|
220
227
|
onInputChange(event) {
|
221
228
|
const value = event.target.value;
|
222
229
|
if (this.skyDatepickerNoValidate) {
|
223
|
-
this.
|
230
|
+
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_instances, "m", _SkyDatepickerInputDirective_onValueChange).call(this, value);
|
224
231
|
return;
|
225
232
|
}
|
226
233
|
// Don't try to parse the string value into a Date value if it is malformed.
|
227
|
-
if (this.
|
228
|
-
this.
|
234
|
+
if (__classPrivateFieldGet(this, _SkyDatepickerInputDirective_instances, "m", _SkyDatepickerInputDirective_isDateStringValid).call(this, value)) {
|
235
|
+
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_instances, "m", _SkyDatepickerInputDirective_onValueChange).call(this, value);
|
229
236
|
return;
|
230
237
|
}
|
231
|
-
this
|
232
|
-
this.
|
233
|
-
this
|
238
|
+
__classPrivateFieldSet(this, _SkyDatepickerInputDirective__value, value, "f");
|
239
|
+
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_onChange, "f").call(this, value);
|
240
|
+
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_control, "f")?.setErrors({
|
234
241
|
skyDate: {
|
235
242
|
invalid: true,
|
236
243
|
},
|
237
244
|
});
|
238
245
|
}
|
239
246
|
onInputBlur() {
|
240
|
-
this.
|
247
|
+
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_onTouched, "f").call(this);
|
241
248
|
}
|
242
249
|
onInput() {
|
243
|
-
this
|
250
|
+
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_control, "f")?.markAsDirty();
|
244
251
|
}
|
245
252
|
writeValue(value) {
|
246
|
-
this.
|
253
|
+
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_instances, "m", _SkyDatepickerInputDirective_updateValue).call(this, value, false);
|
247
254
|
}
|
248
255
|
validate(control) {
|
249
|
-
if (!this
|
250
|
-
this
|
256
|
+
if (!__classPrivateFieldGet(this, _SkyDatepickerInputDirective_control, "f")) {
|
257
|
+
__classPrivateFieldSet(this, _SkyDatepickerInputDirective_control, control, "f");
|
251
258
|
// Account for any date conversion that may have occurred prior to validation.
|
252
|
-
if (this.
|
253
|
-
this.
|
259
|
+
if (__classPrivateFieldGet(this, _SkyDatepickerInputDirective_control, "f").value !== __classPrivateFieldGet(this, _SkyDatepickerInputDirective_instances, "a", _SkyDatepickerInputDirective_value_get)) {
|
260
|
+
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_control, "f").patchValue(__classPrivateFieldGet(this, _SkyDatepickerInputDirective_instances, "a", _SkyDatepickerInputDirective_value_get), { emitEvent: false });
|
254
261
|
}
|
255
262
|
}
|
256
263
|
if (this.skyDatepickerNoValidate) {
|
257
|
-
return;
|
264
|
+
return null;
|
258
265
|
}
|
259
266
|
const value = control.value;
|
260
267
|
if (!value) {
|
261
|
-
return;
|
268
|
+
return null;
|
262
269
|
}
|
263
270
|
if (value instanceof Date) {
|
264
|
-
const isDateValid = this.
|
271
|
+
const isDateValid = __classPrivateFieldGet(this, _SkyDatepickerInputDirective_dateFormatter, "f").dateIsValid(value);
|
265
272
|
if (!isDateValid) {
|
266
273
|
// Mark the invalid control as touched so that the input's invalid CSS styles appear.
|
267
274
|
// (This is only required when the invalid value is set by the FormControl constructor.)
|
268
|
-
this.
|
275
|
+
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_control, "f").markAsTouched();
|
269
276
|
return {
|
270
277
|
skyDate: {
|
271
278
|
invalid: value,
|
@@ -274,7 +281,7 @@ export class SkyDatepickerInputDirective {
|
|
274
281
|
}
|
275
282
|
const minDate = this.minDate;
|
276
283
|
if (minDate &&
|
277
|
-
this.
|
284
|
+
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_dateFormatter, "f").dateIsValid(minDate) &&
|
278
285
|
value < minDate) {
|
279
286
|
return {
|
280
287
|
skyDate: {
|
@@ -284,7 +291,7 @@ export class SkyDatepickerInputDirective {
|
|
284
291
|
}
|
285
292
|
const maxDate = this.maxDate;
|
286
293
|
if (maxDate &&
|
287
|
-
this.
|
294
|
+
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_dateFormatter, "f").dateIsValid(maxDate) &&
|
288
295
|
value > maxDate) {
|
289
296
|
return {
|
290
297
|
skyDate: {
|
@@ -296,176 +303,158 @@ export class SkyDatepickerInputDirective {
|
|
296
303
|
else {
|
297
304
|
// Mark the invalid control as touched so that the input's invalid CSS styles appear.
|
298
305
|
// (This is only required when the invalid value is set by the FormControl constructor.)
|
299
|
-
this.
|
306
|
+
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_control, "f").markAsTouched();
|
300
307
|
return {
|
301
308
|
skyDate: {
|
302
309
|
invalid: value,
|
303
310
|
},
|
304
311
|
};
|
305
312
|
}
|
313
|
+
return null;
|
306
314
|
}
|
307
315
|
registerOnChange(fn) {
|
308
|
-
this
|
316
|
+
__classPrivateFieldSet(this, _SkyDatepickerInputDirective_onChange, fn, "f");
|
309
317
|
}
|
310
318
|
registerOnTouched(fn) {
|
311
|
-
this
|
319
|
+
__classPrivateFieldSet(this, _SkyDatepickerInputDirective_onTouched, fn, "f");
|
312
320
|
}
|
313
321
|
registerOnValidatorChange(fn) {
|
314
|
-
this
|
322
|
+
__classPrivateFieldSet(this, _SkyDatepickerInputDirective_onValidatorChange, fn, "f");
|
315
323
|
}
|
316
324
|
setDisabledState(disabled) {
|
317
325
|
this.disabled = disabled;
|
318
|
-
this.
|
326
|
+
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_datepickerComponent, "f").disabled = disabled;
|
319
327
|
}
|
320
328
|
/**
|
321
329
|
* Detects changes to the underlying input element's value and updates the ngModel accordingly.
|
322
330
|
* This is useful if you need to update the ngModel value before the input element loses focus.
|
323
331
|
*/
|
324
332
|
detectInputValueChange() {
|
325
|
-
this.
|
326
|
-
}
|
327
|
-
applyDateFormat() {
|
328
|
-
this.updatePlaceholder();
|
329
|
-
if (this.value) {
|
330
|
-
const formattedDate = this.dateFormatter.format(this.value, this.dateFormat);
|
331
|
-
this.setInputElementValue(formattedDate);
|
332
|
-
this.changeDetector.markForCheck();
|
333
|
-
}
|
334
|
-
}
|
335
|
-
onValueChange(newValue) {
|
336
|
-
this.value = newValue;
|
333
|
+
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_instances, "m", _SkyDatepickerInputDirective_onValueChange).call(this, __classPrivateFieldGet(this, _SkyDatepickerInputDirective_elementRef, "f").nativeElement.value);
|
337
334
|
}
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
335
|
+
}
|
336
|
+
_SkyDatepickerInputDirective_control = new WeakMap(), _SkyDatepickerInputDirective_dateFormatter = new WeakMap(), _SkyDatepickerInputDirective_initialPlaceholder = new WeakMap(), _SkyDatepickerInputDirective_preferredShortDateFormat = new WeakMap(), _SkyDatepickerInputDirective_ngUnsubscribe = new WeakMap(), _SkyDatepickerInputDirective__dateFormat = new WeakMap(), _SkyDatepickerInputDirective__disabled = new WeakMap(), _SkyDatepickerInputDirective__maxDate = new WeakMap(), _SkyDatepickerInputDirective__minDate = new WeakMap(), _SkyDatepickerInputDirective__startingDay = new WeakMap(), _SkyDatepickerInputDirective__strict = new WeakMap(), _SkyDatepickerInputDirective__value = new WeakMap(), _SkyDatepickerInputDirective_adapter = new WeakMap(), _SkyDatepickerInputDirective_changeDetector = new WeakMap(), _SkyDatepickerInputDirective_configService = new WeakMap(), _SkyDatepickerInputDirective_elementRef = new WeakMap(), _SkyDatepickerInputDirective_localeProvider = new WeakMap(), _SkyDatepickerInputDirective_renderer = new WeakMap(), _SkyDatepickerInputDirective_resourcesService = new WeakMap(), _SkyDatepickerInputDirective_datepickerComponent = new WeakMap(), _SkyDatepickerInputDirective_onChange = new WeakMap(), _SkyDatepickerInputDirective_onTouched = new WeakMap(), _SkyDatepickerInputDirective_onValidatorChange = new WeakMap(), _SkyDatepickerInputDirective_instances = new WeakSet(), _SkyDatepickerInputDirective_value_get = function _SkyDatepickerInputDirective_value_get() {
|
337
|
+
return __classPrivateFieldGet(this, _SkyDatepickerInputDirective__value, "f");
|
338
|
+
}, _SkyDatepickerInputDirective_value_set = function _SkyDatepickerInputDirective_value_set(value) {
|
339
|
+
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_instances, "m", _SkyDatepickerInputDirective_updateValue).call(this, value);
|
340
|
+
}, _SkyDatepickerInputDirective_applyDateFormat = function _SkyDatepickerInputDirective_applyDateFormat() {
|
341
|
+
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_instances, "m", _SkyDatepickerInputDirective_updatePlaceholder).call(this);
|
342
|
+
if (__classPrivateFieldGet(this, _SkyDatepickerInputDirective_instances, "a", _SkyDatepickerInputDirective_value_get)) {
|
343
|
+
const formattedDate = __classPrivateFieldGet(this, _SkyDatepickerInputDirective_dateFormatter, "f").format(__classPrivateFieldGet(this, _SkyDatepickerInputDirective_instances, "a", _SkyDatepickerInputDirective_value_get), this.dateFormat);
|
344
|
+
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_instances, "m", _SkyDatepickerInputDirective_setInputElementValue).call(this, formattedDate);
|
345
|
+
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_changeDetector, "f").markForCheck();
|
346
|
+
}
|
347
|
+
}, _SkyDatepickerInputDirective_onValueChange = function _SkyDatepickerInputDirective_onValueChange(newValue) {
|
348
|
+
__classPrivateFieldSet(this, _SkyDatepickerInputDirective_instances, newValue, "a", _SkyDatepickerInputDirective_value_set);
|
349
|
+
}, _SkyDatepickerInputDirective_setInputElementValue = function _SkyDatepickerInputDirective_setInputElementValue(value) {
|
350
|
+
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_renderer, "f").setProperty(__classPrivateFieldGet(this, _SkyDatepickerInputDirective_elementRef, "f").nativeElement, 'value', value);
|
351
|
+
}, _SkyDatepickerInputDirective_getDateValue = function _SkyDatepickerInputDirective_getDateValue(value) {
|
352
|
+
if (value instanceof Date) {
|
353
|
+
return value;
|
354
|
+
}
|
355
|
+
else if (typeof value === 'string') {
|
356
|
+
return __classPrivateFieldGet(this, _SkyDatepickerInputDirective_instances, "m", _SkyDatepickerInputDirective_getShortcutOrDateValue).call(this, value);
|
357
|
+
}
|
358
|
+
return undefined;
|
359
|
+
}, _SkyDatepickerInputDirective_getShortcutOrDateValue = function _SkyDatepickerInputDirective_getShortcutOrDateValue(value) {
|
360
|
+
const num = Number(value);
|
361
|
+
if (Number.isInteger(num)) {
|
362
|
+
// We require 8 digits in order to know that we have all information needed to determine what part of the number is the month (2), day (2), and year (4).
|
363
|
+
if (value.length === 8) {
|
364
|
+
const regex = new RegExp(/\b(MM)\b|\b(DD)\b|\b(YY)\b|\b(YYYY)\b/, 'g');
|
365
|
+
const formatTokensOnly = this.dateFormat
|
366
|
+
?.match(regex)
|
367
|
+
?.join('')
|
368
|
+
.replace(new RegExp(/Y+/), 'YYYY');
|
369
|
+
if (formatTokensOnly && formatTokensOnly.length === 8) {
|
370
|
+
const date = __classPrivateFieldGet(this, _SkyDatepickerInputDirective_dateFormatter, "f").getDateFromString(value, formatTokensOnly, true);
|
371
|
+
if (__classPrivateFieldGet(this, _SkyDatepickerInputDirective_dateFormatter, "f").dateIsValid(date)) {
|
372
|
+
return date;
|
374
373
|
}
|
375
374
|
}
|
376
|
-
const now = new Date();
|
377
|
-
const shortcutDate = new Date(now.getFullYear(), now.getMonth(), num);
|
378
|
-
const daysInMonth = shortcutDate.getDate();
|
379
|
-
if (num > 0 && num <= daysInMonth) {
|
380
|
-
return shortcutDate;
|
381
|
-
}
|
382
375
|
}
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
376
|
+
const now = new Date();
|
377
|
+
const shortcutDate = new Date(now.getFullYear(), now.getMonth(), num);
|
378
|
+
const daysInMonth = shortcutDate.getDate();
|
379
|
+
if (num > 0 && num <= daysInMonth) {
|
380
|
+
return shortcutDate;
|
388
381
|
}
|
389
382
|
}
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
if (!value || typeof value !== 'string') {
|
395
|
-
return true;
|
396
|
-
}
|
397
|
-
// Does the value only include digits, dashes, or slashes?
|
398
|
-
const regexp = /^[\d/-]+$/;
|
399
|
-
const isValid = regexp.test(value);
|
400
|
-
if (isValid) {
|
401
|
-
return true;
|
383
|
+
else {
|
384
|
+
const date = __classPrivateFieldGet(this, _SkyDatepickerInputDirective_dateFormatter, "f").getDateFromString(value, this.dateFormat, this.strict);
|
385
|
+
if (__classPrivateFieldGet(this, _SkyDatepickerInputDirective_dateFormatter, "f").dateIsValid(date)) {
|
386
|
+
return date;
|
402
387
|
}
|
403
|
-
// If not, does it conform to the standard ISO format?
|
404
|
-
const isValidIso = moment(value, moment.ISO_8601).isValid();
|
405
|
-
return isValidIso;
|
406
388
|
}
|
407
|
-
|
408
|
-
|
409
|
-
|
389
|
+
return undefined;
|
390
|
+
}, _SkyDatepickerInputDirective_isDateStringValid = function _SkyDatepickerInputDirective_isDateStringValid(value) {
|
391
|
+
if (!value || typeof value !== 'string') {
|
392
|
+
return true;
|
393
|
+
}
|
394
|
+
// Does the value only include digits, dashes, or slashes?
|
395
|
+
const regexp = /^[\d/-]+$/;
|
396
|
+
const isValid = regexp.test(value);
|
397
|
+
if (isValid) {
|
398
|
+
return true;
|
399
|
+
}
|
400
|
+
// If not, does it conform to the standard ISO format?
|
401
|
+
const isValidIso = moment(value, moment.ISO_8601).isValid();
|
402
|
+
return isValidIso;
|
403
|
+
}, _SkyDatepickerInputDirective_updatePlaceholder = function _SkyDatepickerInputDirective_updatePlaceholder() {
|
404
|
+
if (!__classPrivateFieldGet(this, _SkyDatepickerInputDirective_initialPlaceholder, "f") && this.dateFormat) {
|
405
|
+
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_adapter, "f").setPlaceholder(__classPrivateFieldGet(this, _SkyDatepickerInputDirective_elementRef, "f"), this.dateFormat);
|
406
|
+
}
|
407
|
+
}, _SkyDatepickerInputDirective_updateValue = function _SkyDatepickerInputDirective_updateValue(value, emitEvent = true) {
|
408
|
+
if (__classPrivateFieldGet(this, _SkyDatepickerInputDirective__value, "f") === value) {
|
409
|
+
return;
|
410
|
+
}
|
411
|
+
const isValidDateString = __classPrivateFieldGet(this, _SkyDatepickerInputDirective_instances, "m", _SkyDatepickerInputDirective_isDateStringValid).call(this, value);
|
412
|
+
// If the string value supplied is malformed, do not set the value to its Date equivalent.
|
413
|
+
// (JavaScript's Date parser will convert poorly formatted dates to Date objects, such as "abc 123", which isn't ideal.)
|
414
|
+
if (!isValidDateString) {
|
415
|
+
__classPrivateFieldSet(this, _SkyDatepickerInputDirective__value, value, "f");
|
416
|
+
if (emitEvent) {
|
417
|
+
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_onChange, "f").call(this, __classPrivateFieldGet(this, _SkyDatepickerInputDirective__value, "f"));
|
410
418
|
}
|
411
|
-
|
412
|
-
|
413
|
-
* Update the value of the form control and input element
|
414
|
-
* @param emitEvent Denotes if we emit an event to the consumer's form control. We do not want to do this if the value is being updated via a `setValue` call or a `patchValue` call as this is already handled by Angular.
|
415
|
-
* In these cases we do not want to fire `onChange` as it will cause extra `valueChange` and `statusChange` events and the status of the form should not be affected by these changes.
|
416
|
-
*/
|
417
|
-
updateValue(value, emitEvent = true) {
|
418
|
-
if (this._value === value) {
|
419
|
-
return;
|
419
|
+
else {
|
420
|
+
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_control, "f")?.setValue(__classPrivateFieldGet(this, _SkyDatepickerInputDirective__value, "f"), { emitEvent: false });
|
420
421
|
}
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
422
|
+
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_datepickerComponent, "f").selectedDate = __classPrivateFieldGet(this, _SkyDatepickerInputDirective__value, "f");
|
423
|
+
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_instances, "m", _SkyDatepickerInputDirective_setInputElementValue).call(this, value);
|
424
|
+
}
|
425
|
+
else {
|
426
|
+
// This value represents the date value for the input if possible.
|
427
|
+
// This value will take into account all shortcut functionality.
|
428
|
+
const dateValue = __classPrivateFieldGet(this, _SkyDatepickerInputDirective_instances, "m", _SkyDatepickerInputDirective_getDateValue).call(this, value);
|
429
|
+
const areDatesEqual = __classPrivateFieldGet(this, _SkyDatepickerInputDirective__value, "f") instanceof Date &&
|
430
|
+
dateValue &&
|
431
|
+
dateValue.getTime() === __classPrivateFieldGet(this, _SkyDatepickerInputDirective__value, "f").getTime();
|
432
|
+
if (dateValue !== __classPrivateFieldGet(this, _SkyDatepickerInputDirective__value, "f") || !areDatesEqual) {
|
433
|
+
__classPrivateFieldSet(this, _SkyDatepickerInputDirective__value, dateValue || value, "f");
|
426
434
|
if (emitEvent) {
|
427
|
-
this.
|
435
|
+
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_onChange, "f").call(this, __classPrivateFieldGet(this, _SkyDatepickerInputDirective__value, "f"));
|
428
436
|
}
|
429
437
|
else {
|
430
|
-
this
|
438
|
+
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_control, "f")?.setValue(__classPrivateFieldGet(this, _SkyDatepickerInputDirective__value, "f"), { emitEvent: false });
|
431
439
|
}
|
432
|
-
this.
|
433
|
-
|
440
|
+
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_datepickerComponent, "f").selectedDate = __classPrivateFieldGet(this, _SkyDatepickerInputDirective__value, "f");
|
441
|
+
}
|
442
|
+
if (dateValue) {
|
443
|
+
const formattedDateString = __classPrivateFieldGet(this, _SkyDatepickerInputDirective_dateFormatter, "f").format(dateValue, this.dateFormat);
|
444
|
+
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_instances, "m", _SkyDatepickerInputDirective_setInputElementValue).call(this, formattedDateString);
|
434
445
|
}
|
435
446
|
else {
|
436
|
-
|
437
|
-
// This value will take into account all shortcut functionality.
|
438
|
-
const dateValue = this.getDateValue(value);
|
439
|
-
const areDatesEqual = this._value instanceof Date &&
|
440
|
-
dateValue &&
|
441
|
-
dateValue.getTime() === this._value.getTime();
|
442
|
-
if (dateValue !== this._value || !areDatesEqual) {
|
443
|
-
this._value = dateValue || value;
|
444
|
-
if (emitEvent) {
|
445
|
-
this.onChange(this._value);
|
446
|
-
}
|
447
|
-
else {
|
448
|
-
this.control?.setValue(this._value, { emitEvent: false });
|
449
|
-
}
|
450
|
-
this.datepickerComponent.selectedDate = this._value;
|
451
|
-
}
|
452
|
-
if (dateValue) {
|
453
|
-
const formattedDateString = this.dateFormatter.format(dateValue, this.dateFormat);
|
454
|
-
this.setInputElementValue(formattedDateString);
|
455
|
-
}
|
456
|
-
else {
|
457
|
-
this.setInputElementValue(value || '');
|
458
|
-
}
|
447
|
+
__classPrivateFieldGet(this, _SkyDatepickerInputDirective_instances, "m", _SkyDatepickerInputDirective_setInputElementValue).call(this, value || '');
|
459
448
|
}
|
460
449
|
}
|
461
|
-
}
|
462
|
-
SkyDatepickerInputDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.
|
463
|
-
SkyDatepickerInputDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.
|
450
|
+
};
|
451
|
+
SkyDatepickerInputDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.11", ngImport: i0, type: SkyDatepickerInputDirective, deps: [{ token: i1.SkyDatepickerAdapterService }, { token: i0.ChangeDetectorRef }, { token: i2.SkyDatepickerConfigService }, { token: i0.ElementRef }, { token: i3.SkyAppLocaleProvider }, { token: i0.Renderer2 }, { token: i3.SkyLibResourcesService }, { token: i4.SkyDatepickerComponent, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
|
452
|
+
SkyDatepickerInputDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.11", type: SkyDatepickerInputDirective, selector: "[skyDatepickerInput]", inputs: { dateFormat: "dateFormat", disabled: "disabled", maxDate: "maxDate", minDate: "minDate", skyDatepickerInput: "skyDatepickerInput", skyDatepickerNoValidate: "skyDatepickerNoValidate", startingDay: "startingDay", strict: "strict" }, host: { listeners: { "change": "onInputChange($event)", "blur": "onInputBlur()", "input": "onInput()" } }, providers: [
|
464
453
|
SKY_DATEPICKER_VALUE_ACCESSOR,
|
465
454
|
SKY_DATEPICKER_VALIDATOR,
|
466
455
|
SkyDatepickerAdapterService,
|
467
456
|
], ngImport: i0 });
|
468
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.
|
457
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.11", ngImport: i0, type: SkyDatepickerInputDirective, decorators: [{
|
469
458
|
type: Directive,
|
470
459
|
args: [{
|
471
460
|
selector: '[skyDatepickerInput]',
|
@@ -503,4 +492,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImpor
|
|
503
492
|
type: HostListener,
|
504
493
|
args: ['input']
|
505
494
|
}] } });
|
506
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1pbnB1dC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci1pbnB1dC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBR0wsUUFBUSxFQUNSLFNBQVMsRUFDVCxVQUFVLEdBQ1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUdMLGFBQWEsRUFDYixpQkFBaUIsR0FHbEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFM0UsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3BELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzNFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7QUFFaEUsTUFBTSw2QkFBNkIsR0FBRztJQUNwQyxPQUFPLEVBQUUsaUJBQWlCO0lBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsMkJBQTJCLENBQUM7SUFDMUQsS0FBSyxFQUFFLElBQUk7Q0FDWixDQUFDO0FBRUYsTUFBTSx3QkFBd0IsR0FBRztJ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QkFtSEMsYUFBYTtzQkFEbkIsWUFBWTt1QkFBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBMEIzQixXQUFXO3NCQURqQixZQUFZO3VCQUFDLE1BQU07Z0JBTWIsT0FBTztzQkFEYixZQUFZO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIFJlbmRlcmVyMixcbiAgZm9yd2FyZFJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBOR19WQUxJREFUT1JTLFxuICBOR19WQUxVRV9BQ0NFU1NPUixcbiAgVmFsaWRhdGlvbkVycm9ycyxcbiAgVmFsaWRhdG9yLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTa3lBcHBMb2NhbGVQcm92aWRlciwgU2t5TGliUmVzb3VyY2VzU2VydmljZSB9IGZyb20gJ0Bza3l1eC9pMThuJztcblxuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgU2t5RGF0ZUZvcm1hdHRlciB9IGZyb20gJy4vZGF0ZS1mb3JtYXR0ZXInO1xuaW1wb3J0IHsgU2t5RGF0ZXBpY2tlckFkYXB0ZXJTZXJ2aWNlIH0gZnJvbSAnLi9kYXRlcGlja2VyLWFkYXB0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTa3lEYXRlcGlja2VyQ29uZmlnU2VydmljZSB9IGZyb20gJy4vZGF0ZXBpY2tlci1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBTa3lEYXRlcGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRlcGlja2VyLmNvbXBvbmVudCc7XG5cbmNvbnN0IFNLWV9EQVRFUElDS0VSX1ZBTFVFX0FDQ0VTU09SID0ge1xuICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU2t5RGF0ZXBpY2tlcklucHV0RGlyZWN0aXZlKSxcbiAgbXVsdGk6IHRydWUsXG59O1xuXG5jb25zdCBTS1lfREFURVBJQ0tFUl9WQUxJREFUT1IgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNreURhdGVwaWNrZXJJbnB1dERpcmVjdGl2ZSksXG4gIG11bHRpOiB0cnVlLFxufTtcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW3NreURhdGVwaWNrZXJJbnB1dF0nLFxuICBwcm92aWRlcnM6IFtcbiAgICBTS1lfREFURVBJQ0tFUl9WQUxVRV9BQ0NFU1NPUixcbiAgICBTS1lfREFURVBJQ0tFUl9WQUxJREFUT1IsXG4gICAgU2t5RGF0ZXBpY2tlckFkYXB0ZXJTZXJ2aWNlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lEYXRlcGlja2VySW5wdXREaXJlY3RpdmVcbiAgaW1wbGVtZW50c1xuICAgIE9uSW5pdCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICAgIFZhbGlkYXRvclxue1xuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBkYXRlIGZvcm1hdCBmb3IgdGhlIGlucHV0LiBQbGFjZSB0aGlzIGF0dHJpYnV0ZSBvbiB0aGUgYGlucHV0YCBlbGVtZW50XG4gICAqIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGluIHRoZSBgU2t5RGF0ZXBpY2tlckNvbmZpZ1NlcnZpY2VgLlxuICAgKiBAZGVmYXVsdCBcIk1NL0REL1lZWVlcIlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBkYXRlRm9ybWF0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5fZGF0ZUZvcm1hdCkge1xuICAgICAgdGhpcy5fZGF0ZUZvcm1hdCA9IHZhbHVlO1xuICAgICAgdGhpcy5hcHBseURhdGVGb3JtYXQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRhdGVGb3JtYXQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5fZGF0ZUZvcm1hdCB8fFxuICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLmRhdGVGb3JtYXQgfHxcbiAgICAgIHRoaXMucHJlZmVycmVkU2hvcnREYXRlRm9ybWF0XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0byBkaXNhYmxlIHRoZSBkYXRlcGlja2VyLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2Rpc2FibGVkID0gdmFsdWU7XG4gICAgdGhpcy5kYXRlcGlja2VyQ29tcG9uZW50LmRpc2FibGVkID0gdmFsdWU7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2Rpc2FibGVkJywgdmFsdWUpO1xuICB9XG5cbiAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQgfHwgZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEluZGljYXRlcyBpZiB0aGUgaW5wdXQgZWxlbWVudCBvciBhbnkgb2YgaXRzIGNoaWxkcmVuIGhhdmUgZm9jdXMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlucHV0SXNGb2N1c2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFkYXB0ZXIuZWxlbWVudElzRm9jdXNlZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgbGF0ZXN0IGRhdGUgdGhhdCBpcyBhdmFpbGFibGUgaW4gdGhlIGNhbGVuZGFyLiBQbGFjZSB0aGlzIGF0dHJpYnV0ZSBvblxuICAgKiB0aGUgYGlucHV0YCBlbGVtZW50IHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGluIGBTa3lEYXRlcGlja2VyQ29uZmlnU2VydmljZWAuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IG1heERhdGUodmFsdWU6IERhdGUpIHtcbiAgICB0aGlzLl9tYXhEYXRlID0gdmFsdWU7XG4gICAgdGhpcy5kYXRlcGlja2VyQ29tcG9uZW50Lm1heERhdGUgPSB0aGlzLm1heERhdGU7XG5cbiAgICB0aGlzLm9uVmFsaWRhdG9yQ2hhbmdlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1heERhdGUoKTogRGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX21heERhdGUgfHwgdGhpcy5jb25maWdTZXJ2aWNlLm1heERhdGU7XG4gIH1cblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBlYXJsaWVzdCBkYXRlIHRoYXQgaXMgYXZhaWxhYmxlIGluIHRoZSBjYWxlbmRhci4gUGxhY2UgdGhpcyBhdHRyaWJ1dGUgb25cbiAgICogdGhlIGBpbnB1dGAgZWxlbWVudCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBpbiBgU2t5RGF0ZXBpY2tlckNvbmZpZ1NlcnZpY2VgLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBtaW5EYXRlKHZhbHVlOiBEYXRlKSB7XG4gICAgdGhpcy5fbWluRGF0ZSA9IHZhbHVlO1xuICAgIHRoaXMuZGF0ZXBpY2tlckNvbXBvbmVudC5taW5EYXRlID0gdGhpcy5taW5EYXRlO1xuXG4gICAgdGhpcy5vblZhbGlkYXRvckNoYW5nZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBtaW5EYXRlKCk6IERhdGUge1xuICAgIHJldHVybiB0aGlzLl9taW5EYXRlIHx8IHRoaXMuY29uZmlnU2VydmljZS5taW5EYXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIGRhdGVwaWNrZXIgaW5wdXQgYW5kIGNhbGVuZGFyLiBQbGFjZSB0aGlzIGRpcmVjdGl2ZSBvbiBhbiBgaW5wdXRgIGVsZW1lbnQsXG4gICAqIGFuZCB3cmFwIHRoZSBpbnB1dCBpbiBhIGBza3ktZGF0ZXBpY2tlcmAgY29tcG9uZW50LiBUaGUgdmFsdWUgdGhhdCB1c2VycyBzZWxlY3QgaXMgZHJpdmVuXG4gICAqIHRocm91Z2ggdGhlIGBuZ01vZGVsYCBhdHRyaWJ1dGUgc3BlY2lmaWVkIG9uIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqIEByZXF1aXJlZFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBza3lEYXRlcGlja2VySW5wdXQoXG4gICAgdmFsdWU6IFNreURhdGVwaWNrZXJDb21wb25lbnQgfCB1bmRlZmluZWQgfCAnJ1xuICApIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ1tEZXByZWNhdGlvbiB3YXJuaW5nXSBZb3Ugbm8gbG9uZ2VyIG5lZWQgdG8gcHJvdmlkZSBhIHRlbXBsYXRlIHJlZmVyZW5jZSB2YXJpYWJsZSAnICtcbiAgICAgICAgICAndG8gdGhlIGBza3lEYXRlcGlja2VySW5wdXRgIGF0dHJpYnV0ZSAodGhpcyB3aWxsIGJlIGEgYnJlYWtpbmcgY2hhbmdlIGluIHRoZSBuZXh0ICcgK1xuICAgICAgICAgICdtYWpvciB2ZXJzaW9uIHJlbGVhc2UpLlxcbicgK1xuICAgICAgICAgICdEbyB0aGlzIGluc3RlYWQ6XFxuJyArXG4gICAgICAgICAgJzxza3ktZGF0ZXBpY2tlcj5cXG4gIDxpbnB1dCBza3lEYXRlcGlja2VySW5wdXQgLz5cXG48L3NreS1kYXRlcGlja2VyPidcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRvIGRpc2FibGUgZGF0ZSB2YWxpZGF0aW9uIG9uIHRoZSBkYXRlcGlja2VyIGlucHV0LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNreURhdGVwaWNrZXJOb1ZhbGlkYXRlID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgc3RhcnRpbmcgZGF5IG9mIHRoZSB3ZWVrIGluIHRoZSBjYWxlbmRhciwgd2hlcmUgYDBgIHNldHMgdGhlIHN0YXJ0aW5nIGRheVxuICAgKiB0byBTdW5kYXkuIFBsYWNlIHRoaXMgYXR0cmlidXRlIG9uIHRoZSBgaW5wdXRgIGVsZW1lbnQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHRcbiAgICogaW4gYFNreURhdGVwaWNrZXJDb25maWdTZXJ2aWNlYC5cbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBzdGFydGluZ0RheSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fc3RhcnRpbmdEYXkgPSB2YWx1ZTtcbiAgICB0aGlzLmRhdGVwaWNrZXJDb21wb25lbnQuc3RhcnRpbmdEYXkgPSB0aGlzLnN0YXJ0aW5nRGF5O1xuXG4gICAgdGhpcy5vblZhbGlkYXRvckNoYW5nZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBzdGFydGluZ0RheSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9zdGFydGluZ0RheSB8fCB0aGlzLmNvbmZpZ1NlcnZpY2Uuc3RhcnRpbmdEYXk7XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGZvcm1hdCBvZiB0aGUgZGF0ZSB2YWx1ZSBtdXN0IG1hdGNoIHRoZSBmb3JtYXQgZnJvbSB0aGUgYGRhdGVGb3JtYXRgIHZhbHVlLlxuICAgKiBJZiB0aGlzIHByb3BlcnR5IGlzIGB0cnVlYCBhbmQgdGhlIGRhdGVwaWNrZXIgaW5wdXQgZGlyZWN0aXZlIGNhbm5vdCBmaW5kIGFuIGV4YWN0IG1hdGNoLCB0aGVuXG4gICAqIHRoZSBpbnB1dCBpcyBtYXJrZWQgYXMgaW52YWxpZC5cbiAgICogSWYgdGhpcyBwcm9wZXJ0eSBpcyBgZmFsc2VgIGFuZCB0aGUgZGF0ZXBpY2tlciBpbnB1dCBkaXJlY3RpdmUgY2Fubm90IGZpbmQgYW4gZXhhY3QgbWF0Y2gsIHRoZW5cbiAgICogaXQgYXR0ZW1wdHMgdG8gZm9ybWF0IHRoZSBzdHJpbmcgYmFzZWQgb24gdGhlIFtJU08gODYwMSBzdGFuZGFyZCBmb3JtYXRdKGh0dHBzOi8vd3d3Lmlzby5vcmcvaXNvLTg2MDEtZGF0ZS1hbmQtdGltZS1mb3JtYXQuaHRtbCkuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHN0cmljdCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3N0cmljdCA9IHZhbHVlO1xuICB9XG5cbiAgcHVibGljIGdldCBzdHJpY3QoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3N0cmljdCB8fCBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXQgdmFsdWUodmFsdWU6IGFueSkge1xuICAgIHRoaXMudXBkYXRlVmFsdWUodmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb250cm9sOiBBYnN0cmFjdENvbnRyb2w7XG4gIHByaXZhdGUgZGF0ZUZvcm1hdHRlciA9IG5ldyBTa3lEYXRlRm9ybWF0dGVyKCk7XG4gIHByaXZhdGUgaW5pdGlhbFBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIHByaXZhdGUgcHJlZmVycmVkU2hvcnREYXRlRm9ybWF0OiBzdHJpbmc7XG4gIHByaXZhdGUgbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcHJpdmF0ZSBfZGF0ZUZvcm1hdDogc3RyaW5nO1xuICBwcml2YXRlIF9kaXNhYmxlZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfbWF4RGF0ZTogRGF0ZTtcbiAgcHJpdmF0ZSBfbWluRGF0ZTogRGF0ZTtcbiAgcHJpdmF0ZSBfc3RhcnRpbmdEYXk6IG51bWJlcjtcbiAgcHJpdmF0ZSBfc3RyaWN0OiBib29sZWFuO1xuICBwcml2YXRlIF92YWx1ZTogYW55O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYWRhcHRlcjogU2t5RGF0ZXBpY2tlckFkYXB0ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgY29uZmlnU2VydmljZTogU2t5RGF0ZXBpY2tlckNvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgbG9jYWxlUHJvdmlkZXI6IFNreUFwcExvY2FsZVByb3ZpZGVyLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIHJlc291cmNlc1NlcnZpY2U6IFNreUxpYlJlc291cmNlc1NlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBkYXRlcGlja2VyQ29tcG9uZW50OiBTa3lEYXRlcGlja2VyQ29tcG9uZW50XG4gICkge1xuICAgIHRoaXMuaW5pdGlhbFBsYWNlaG9sZGVyID0gdGhpcy5hZGFwdGVyLmdldFBsYWNlaG9sZGVyKHRoaXMuZWxlbWVudFJlZik7XG4gICAgdGhpcy51cGRhdGVQbGFjZWhvbGRlcigpO1xuXG4gICAgdGhpcy5sb2NhbGVQcm92aWRlclxuICAgICAgLmdldExvY2FsZUluZm8oKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKChsb2NhbGVJbmZvKSA9PiB7XG4gICAgICAgIFNreURhdGVGb3JtYXR0ZXIuc2V0TG9jYWxlKGxvY2FsZUluZm8ubG9jYWxlKTtcbiAgICAgICAgdGhpcy5wcmVmZXJyZWRTaG9ydERhdGVGb3JtYXQgPVxuICAgICAgICAgIFNreURhdGVGb3JtYXR0ZXIuZ2V0UHJlZmVycmVkU2hvcnREYXRlRm9ybWF0KCk7XG4gICAgICAgIHRoaXMuYXBwbHlEYXRlRm9ybWF0KCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGF0ZXBpY2tlckNvbXBvbmVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnWW91IG11c3Qgd3JhcCB0aGUgYHNreURhdGVwaWNrZXJJbnB1dGAgZGlyZWN0aXZlIHdpdGhpbiBhICcgK1xuICAgICAgICAgICdgPHNreS1kYXRlcGlja2VyPmAgY29tcG9uZW50ISdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuXG4gICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhlbGVtZW50LCAnc2t5LWZvcm0tY29udHJvbCcpO1xuXG4gICAgY29uc3QgaGFzQXJpYUxhYmVsID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnKTtcblxuICAgIGlmICghaGFzQXJpYUxhYmVsKSB7XG4gICAgICB0aGlzLnJlc291cmNlc1NlcnZpY2VcbiAgICAgICAgLmdldFN0cmluZygnc2t5dXhfZGF0ZV9maWVsZF9kZWZhdWx0X2xhYmVsJylcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShlbGVtZW50LCAnYXJpYS1sYWJlbCcsIHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmRhdGVwaWNrZXJDb21wb25lbnQuZGF0ZUNoYW5nZVxuICAgICAgLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgodmFsdWU6IERhdGUpID0+IHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIC8vIFRoaXMgaXMgbmVlZGVkIHRvIGFkZHJlc3MgYSBidWcgaW4gQW5ndWxhciA0LlxuICAgIC8vIFdoZW4gYSBjb250cm9sIHZhbHVlIGlzIHNldCBpbnRpYWxseSwgaXRzIHZhbHVlIGlzIG5vdCByZXByZXNlbnRlZCBvbiB0aGUgdmlldy5cbiAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzEzNzkyXG4gICAgLy8gT2Ygbm90ZSBpcyB0aGUgcGFyZW50IGNoZWNrIHdoaWNoIGFsbG93cyB1cyB0byBkZXRlcm1pbmUgaWYgdGhlIGZvcm0gaXMgcmVhY3RpdmUuXG4gICAgLy8gV2l0aG91dCB0aGlzIGNoZWNrIHRoZXJlIGlzIGEgY2hhbmdlZCBiZWZvcmUgY2hlY2tlZCBlcnJvclxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMuY29udHJvbCAmJiB0aGlzLmNvbnRyb2wucGFyZW50KSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5jb250cm9sLnNldFZhbHVlKHRoaXMudmFsdWUsIHtcbiAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5hZGFwdGVyLmluaXQodGhpcy5lbGVtZW50UmVmKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignY2hhbmdlJywgWyckZXZlbnQnXSlcbiAgcHVibGljIG9uSW5wdXRDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IHZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuXG4gICAgaWYgKHRoaXMuc2t5RGF0ZXBpY2tlck5vVmFsaWRhdGUpIHtcbiAgICAgIHRoaXMub25WYWx1ZUNoYW5nZSh2YWx1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRG9uJ3QgdHJ5IHRvIHBhcnNlIHRoZSBzdHJpbmcgdmFsdWUgaW50byBhIERhdGUgdmFsdWUgaWYgaXQgaXMgbWFsZm9ybWVkLlxuICAgIGlmICh0aGlzLmlzRGF0ZVN0cmluZ1ZhbGlkKHZhbHVlKSkge1xuICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlKHZhbHVlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xuXG4gICAgdGhpcy5jb250cm9sLnNldEVycm9ycyh7XG4gICAgICBza3lEYXRlOiB7XG4gICAgICAgIGludmFsaWQ6IHRydWUsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignYmx1cicpXG4gIHB1YmxpYyBvbklucHV0Qmx1cigpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignaW5wdXQnKVxuICBwdWJsaWMgb25JbnB1dCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgfVxuXG4gIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZVZhbHVlKHZhbHVlLCBmYWxzZSk7XG4gIH1cblxuICBwdWJsaWMgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB7XG4gICAgaWYgKCF0aGlzLmNvbnRyb2wpIHtcbiAgICAgIHRoaXMuY29udHJvbCA9IGNvbnRyb2w7XG4gICAgICAvLyBBY2NvdW50IGZvciBhbnkgZGF0ZSBjb252ZXJzaW9uIHRoYXQgbWF5IGhhdmUgb2NjdXJyZWQgcHJpb3IgdG8gdmFsaWRhdGlvbi5cbiAgICAgIGlmICh0aGlzLmNvbnRyb2wudmFsdWUgIT09IHRoaXMudmFsdWUpIHtcbiAgICAgICAgdGhpcy5jb250cm9sLnBhdGNoVmFsdWUodGhpcy52YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnNreURhdGVwaWNrZXJOb1ZhbGlkYXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWU6IHVua25vd24gPSBjb250cm9sLnZhbHVlO1xuXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIGNvbnN0IGlzRGF0ZVZhbGlkID0gdGhpcy5kYXRlRm9ybWF0dGVyLmRhdGVJc1ZhbGlkKHZhbHVlKTtcblxuICAgICAgaWYgKCFpc0RhdGVWYWxpZCkge1xuICAgICAgICAvLyBNYXJrIHRoZSBpbnZhbGlkIGNvbnRyb2wgYXMgdG91Y2hlZCBzbyB0aGF0IHRoZSBpbnB1dCdzIGludmFsaWQgQ1NTIHN0eWxlcyBhcHBlYXIuXG4gICAgICAgIC8vIChUaGlzIGlzIG9ubHkgcmVxdWlyZWQgd2hlbiB0aGUgaW52YWxpZCB2YWx1ZSBpcyBzZXQgYnkgdGhlIEZvcm1Db250cm9sIGNvbnN0cnVjdG9yLilcbiAgICAgICAgdGhpcy5jb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNreURhdGU6IHtcbiAgICAgICAgICAgIGludmFsaWQ6IHZhbHVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1pbkRhdGUgPSB0aGlzLm1pbkRhdGU7XG5cbiAgICAgIGlmIChcbiAgICAgICAgbWluRGF0ZSAmJlxuICAgICAgICB0aGlzLmRhdGVGb3JtYXR0ZXIuZGF0ZUlzVmFsaWQobWluRGF0ZSkgJiZcbiAgICAgICAgdmFsdWUgPCBtaW5EYXRlXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBza3lEYXRlOiB7XG4gICAgICAgICAgICBtaW5EYXRlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1heERhdGUgPSB0aGlzLm1heERhdGU7XG5cbiAgICAgIGlmIChcbiAgICAgICAgbWF4RGF0ZSAmJlxuICAgICAgICB0aGlzLmRhdGVGb3JtYXR0ZXIuZGF0ZUlzVmFsaWQobWF4RGF0ZSkgJiZcbiAgICAgICAgdmFsdWUgPiBtYXhEYXRlXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBza3lEYXRlOiB7XG4gICAgICAgICAgICBtYXhEYXRlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE1hcmsgdGhlIGludmFsaWQgY29udHJvbCBhcyB0b3VjaGVkIHNvIHRoYXQgdGhlIGlucHV0J3MgaW52YWxpZCBDU1Mgc3R5bGVzIGFwcGVhci5cbiAgICAgIC8vIChUaGlzIGlzIG9ubHkgcmVxdWlyZWQgd2hlbiB0aGUgaW52YWxpZCB2YWx1ZSBpcyBzZXQgYnkgdGhlIEZvcm1Db250cm9sIGNvbnN0cnVjdG9yLilcbiAgICAgIHRoaXMuY29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNreURhdGU6IHtcbiAgICAgICAgICBpbnZhbGlkOiB2YWx1ZSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogYW55KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vblZhbGlkYXRvckNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcHVibGljIHNldERpc2FibGVkU3RhdGUoZGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gZGlzYWJsZWQ7XG4gICAgdGhpcy5kYXRlcGlja2VyQ29tcG9uZW50LmRpc2FibGVkID0gZGlzYWJsZWQ7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZWN0cyBjaGFuZ2VzIHRvIHRoZSB1bmRlcmx5aW5nIGlucHV0IGVsZW1lbnQncyB2YWx1ZSBhbmQgdXBkYXRlcyB0aGUgbmdNb2RlbCBhY2NvcmRpbmdseS5cbiAgICogVGhpcyBpcyB1c2VmdWwgaWYgeW91IG5lZWQgdG8gdXBkYXRlIHRoZSBuZ01vZGVsIHZhbHVlIGJlZm9yZSB0aGUgaW5wdXQgZWxlbWVudCBsb3NlcyBmb2N1cy5cbiAgICovXG4gIHB1YmxpYyBkZXRlY3RJbnB1dFZhbHVlQ2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMub25WYWx1ZUNoYW5nZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC52YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5RGF0ZUZvcm1hdCgpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZVBsYWNlaG9sZGVyKCk7XG4gICAgaWYgKHRoaXMudmFsdWUpIHtcbiAgICAgIGNvbnN0IGZvcm1hdHRlZERhdGUgPSB0aGlzLmRhdGVGb3JtYXR0ZXIuZm9ybWF0KFxuICAgICAgICB0aGlzLnZhbHVlLFxuICAgICAgICB0aGlzLmRhdGVGb3JtYXRcbiAgICAgICk7XG4gICAgICB0aGlzLnNldElucHV0RWxlbWVudFZhbHVlKGZvcm1hdHRlZERhdGUpO1xuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9uVmFsdWVDaGFuZ2UobmV3VmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSBuZXdWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0SW5wdXRFbGVtZW50VmFsdWUodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICd2YWx1ZScsIHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBkYXRlIHZhbHVlIGZyb20gYSB2YWx1ZSAtIGlmIHBvc3NpYmxlLlxuICAgKiBXaWxsIG5vdCBjb252ZXJ0IHVuY29udmVydGFibGUgZGF0ZXMgb3IgbnVtYmVycyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IG1vbnRoJ3MgbnVtYmVyIG9mIGRheXMuXG4gICAqIFJldHVybnMgYHVuZGVmaW5lZGAgaWYgdGhlIHZhbHVlIGNhbiBub3QgYmUgY29udmVydGVkLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXREYXRlVmFsdWUodmFsdWU6IHVua25vd24pOiBEYXRlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRTaG9ydGN1dE9yRGF0ZVZhbHVlKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYSBzdHJpbmcgdG8gYSBkYXRlIG9iamVjdCBpZiB0aGUgc3RyaW5nIGlzIGEgdmFsaWQgZGF0ZSBzdHJpbmcuXG4gICAqIEl0IHdpbGwgYWxzbyBjb252ZXJ0IG51bWVyaWMgaW5wdXQgdG8gYSBkYXRlIGlmIHRoYXQgbnVtYmVyIGlzIHdpdGhpbiB0aGUgY3VycmVudCBtb250aCdzIG51bWJlciBvZiBkYXlzLlxuICAgKiBJZiB0aGUgc3RyaW5nIGNhbiBub3QgYmUgY29udmVydGVkLCBgdW5kZWZpbmVkYCBiZSByZXR1cm5lZC5cbiAgICovXG4gIHByaXZhdGUgZ2V0U2hvcnRjdXRPckRhdGVWYWx1ZSh2YWx1ZTogc3RyaW5nKTogRGF0ZSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbnVtID0gTnVtYmVyKHZhbHVlKTtcbiAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihudW0pKSB7XG4gICAgICAvLyBXZSByZXF1aXJlIDggZGlnaXRzIGluIG9yZGVyIHRvIGtub3cgdGhhdCB3ZSBoYXZlIGFsbCBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gZGV0ZXJtaW5lIHdoYXQgcGFydCBvZiB0aGUgbnVtYmVyIGlzIHRoZSBtb250aCAoMiksIGRheSAoMiksIGFuZCB5ZWFyICg0KS5cbiAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDgpIHtcbiAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKC9cXGIoTU0pXFxifFxcYihERClcXGJ8XFxiKFlZKVxcYnxcXGIoWVlZWSlcXGIvLCAnZycpO1xuICAgICAgICBjb25zdCBmb3JtYXRUb2tlbnNPbmx5ID0gdGhpcy5kYXRlRm9ybWF0XG4gICAgICAgICAgLm1hdGNoKHJlZ2V4KVxuICAgICAgICAgIC5qb2luKCcnKVxuICAgICAgICAgIC5yZXBsYWNlKG5ldyBSZWdFeHAoL1krLyksICdZWVlZJyk7XG5cbiAgICAgICAgaWYgKGZvcm1hdFRva2Vuc09ubHkubGVuZ3RoID09PSA4KSB7XG4gICAgICAgICAgY29uc3QgZGF0ZSA9IHRoaXMuZGF0ZUZvcm1hdHRlci5nZXREYXRlRnJvbVN0cmluZyhcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgZm9ybWF0VG9rZW5zT25seSxcbiAgICAgICAgICAgIHRydWVcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICh0aGlzLmRhdGVGb3JtYXR0ZXIuZGF0ZUlzVmFsaWQoZGF0ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICAgIGNvbnN0IHNob3J0Y3V0RGF0ZSA9IG5ldyBEYXRlKG5vdy5nZXRGdWxsWWVhcigpLCBub3cuZ2V0TW9udGgoKSwgbnVtKTtcbiAgICAgIGNvbnN0IGRheXNJbk1vbnRoID0gc2hvcnRjdXREYXRlLmdldERhdGUoKTtcbiAgICAgIGlmIChudW0gPiAwICYmIG51bSA8PSBkYXlzSW5Nb250aCkge1xuICAgICAgICByZXR1cm4gc2hvcnRjdXREYXRlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBkYXRlID0gdGhpcy5kYXRlRm9ybWF0dGVyLmdldERhdGVGcm9tU3RyaW5nKFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgdGhpcy5kYXRlRm9ybWF0LFxuICAgICAgICB0aGlzLnN0cmljdFxuICAgICAgKTtcbiAgICAgIGlmICh0aGlzLmRhdGVGb3JtYXR0ZXIuZGF0ZUlzVmFsaWQoZGF0ZSkpIHtcbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgaW5wdXQgdmFsdWUgdG8gZW5zdXJlIGl0IGlzIGZvcm1hdHRlZCBjb3JyZWN0bHkuXG4gICAqL1xuICBwcml2YXRlIGlzRGF0ZVN0cmluZ1ZhbGlkKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIERvZXMgdGhlIHZhbHVlIG9ubHkgaW5jbHVkZSBkaWdpdHMsIGRhc2hlcywgb3Igc2xhc2hlcz9cbiAgICBjb25zdCByZWdleHAgPSAvXltcXGQvLV0rJC87XG4gICAgY29uc3QgaXNWYWxpZCA9IHJlZ2V4cC50ZXN0KHZhbHVlKTtcblxuICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBJZiBub3QsIGRvZXMgaXQgY29uZm9ybSB0byB0aGUgc3RhbmRhcmQgSVNPIGZvcm1hdD9cbiAgICBjb25zdCBpc1ZhbGlkSXNvID0gbW9tZW50KHZhbHVlLCBtb21lbnQuSVNPXzg2MDEpLmlzVmFsaWQoKTtcblxuICAgIHJldHVybiBpc1ZhbGlkSXNvO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICBwcml2YXRlIG9uQ2hhbmdlID0gKF86IGFueSkgPT4ge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgcHJpdmF0ZSBvblRvdWNoZWQgPSAoKSA9PiB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICBwcml2YXRlIG9uVmFsaWRhdG9yQ2hhbmdlID0gKCkgPT4ge307XG5cbiAgcHJpdmF0ZSB1cGRhdGVQbGFjZWhvbGRlcigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaW5pdGlhbFBsYWNlaG9sZGVyKSB7XG4gICAgICB0aGlzLmFkYXB0ZXIuc2V0UGxhY2Vob2xkZXIodGhpcy5lbGVtZW50UmVmLCB0aGlzLmRhdGVGb3JtYXQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIHZhbHVlIG9mIHRoZSBmb3JtIGNvbnRyb2wgYW5kIGlucHV0IGVsZW1lbnRcbiAgICogQHBhcmFtIGVtaXRFdmVudCBEZW5vdGVzIGlmIHdlIGVtaXQgYW4gZXZlbnQgdG8gdGhlIGNvbnN1bWVyJ3MgZm9ybSBjb250cm9sLiBXZSBkbyBub3Qgd2FudCB0byBkbyB0aGlzIGlmIHRoZSB2YWx1ZSBpcyBiZWluZyB1cGRhdGVkIHZpYSBhIGBzZXRWYWx1ZWAgY2FsbCBvciBhIGBwYXRjaFZhbHVlYCBjYWxsIGFzIHRoaXMgaXMgYWxyZWFkeSBoYW5kbGVkIGJ5IEFuZ3VsYXIuXG4gICAqIEluIHRoZXNlIGNhc2VzIHdlIGRvIG5vdCB3YW50IHRvIGZpcmUgYG9uQ2hhbmdlYCBhcyBpdCB3aWxsIGNhdXNlIGV4dHJhIGB2YWx1ZUNoYW5nZWAgYW5kIGBzdGF0dXNDaGFuZ2VgIGV2ZW50cyBhbmQgdGhlIHN0YXR1cyBvZiB0aGUgZm9ybSBzaG91bGQgbm90IGJlIGFmZmVjdGVkIGJ5IHRoZXNlIGNoYW5nZXMuXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZVZhbHVlKHZhbHVlOiBhbnksIGVtaXRFdmVudCA9IHRydWUpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fdmFsdWUgPT09IHZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaXNWYWxpZERhdGVTdHJpbmcgPSB0aGlzLmlzRGF0ZVN0cmluZ1ZhbGlkKHZhbHVlKTtcblxuICAgIC8vIElmIHRoZSBzdHJpbmcgdmFsdWUgc3VwcGxpZWQgaXMgbWFsZm9ybWVkLCBkbyBub3Qgc2V0IHRoZSB2YWx1ZSB0byBpdHMgRGF0ZSBlcXVpdmFsZW50LlxuICAgIC8vIChKYXZhU2NyaXB0J3MgRGF0ZSBwYXJzZXIgd2lsbCBjb252ZXJ0IHBvb3JseSBmb3JtYXR0ZWQgZGF0ZXMgdG8gRGF0ZSBvYmplY3RzLCBzdWNoIGFzIFwiYWJjIDEyM1wiLCB3aGljaCBpc24ndCBpZGVhbC4pXG4gICAgaWYgKCFpc1ZhbGlkRGF0ZVN0cmluZykge1xuICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICAgIGlmIChlbWl0RXZlbnQpIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLl92YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvbnRyb2w/LnNldFZhbHVlKHRoaXMuX3ZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZGF0ZXBpY2tlckNvbXBvbmVudC5zZWxlY3RlZERhdGUgPSB0aGlzLl92YWx1ZTtcblxuICAgICAgdGhpcy5zZXRJbnB1dEVsZW1lbnRWYWx1ZSh2YWx1ZSB8fCAnJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgdmFsdWUgcmVwcmVzZW50cyB0aGUgZGF0ZSB2YWx1ZSBmb3IgdGhlIGlucHV0IGlmIHBvc3NpYmxlLlxuICAgICAgLy8gVGhpcyB2YWx1ZSB3aWxsIHRha2UgaW50byBhY2NvdW50IGFsbCBzaG9ydGN1dCBmdW5jdGlvbmFsaXR5LlxuICAgICAgY29uc3QgZGF0ZVZhbHVlOiBEYXRlIHwgdW5kZWZpbmVkID0gdGhpcy5nZXREYXRlVmFsdWUodmFsdWUpO1xuXG4gICAgICBjb25zdCBhcmVEYXRlc0VxdWFsID1cbiAgICAgICAgdGhpcy5fdmFsdWUgaW5zdGFuY2VvZiBEYXRlICYmXG4gICAgICAgIGRhdGVWYWx1ZSAmJlxuICAgICAgICBkYXRlVmFsdWUuZ2V0VGltZSgpID09PSB0aGlzLl92YWx1ZS5nZXRUaW1lKCk7XG5cbiAgICAgIGlmIChkYXRlVmFsdWUgIT09IHRoaXMuX3ZhbHVlIHx8ICFhcmVEYXRlc0VxdWFsKSB7XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gZGF0ZVZhbHVlIHx8IHZhbHVlO1xuICAgICAgICBpZiAoZW1pdEV2ZW50KSB7XG4gICAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLl92YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jb250cm9sPy5zZXRWYWx1ZSh0aGlzLl92YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kYXRlcGlja2VyQ29tcG9uZW50LnNlbGVjdGVkRGF0ZSA9IHRoaXMuX3ZhbHVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0ZVZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZERhdGVTdHJpbmcgPSB0aGlzLmRhdGVGb3JtYXR0ZXIuZm9ybWF0KFxuICAgICAgICAgIGRhdGVWYWx1ZSxcbiAgICAgICAgICB0aGlzLmRhdGVGb3JtYXRcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zZXRJbnB1dEVsZW1lbnRWYWx1ZShmb3JtYXR0ZWREYXRlU3RyaW5nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2V0SW5wdXRFbGVtZW50VmFsdWUodmFsdWUgfHwgJycpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
|
495
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1pbnB1dC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci1pbnB1dC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBSUwsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBR0wsUUFBUSxFQUVSLFVBQVUsR0FDWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBR0wsYUFBYSxFQUNiLGlCQUFpQixHQUdsQixNQUFNLGdCQUFnQixDQUFDO0FBR3hCLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7O0FBSTNFLE1BQU0sNkJBQTZCLEdBQUc7SUFDcEMsT0FBTyxFQUFFLGlCQUFpQjtJQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDJCQUEyQixDQUFDO0lBQzFELEtBQUssRUFBRSxJQUFJO0NBQ1osQ0FBQztBQUVGLE1BQU0sd0JBQXdCLEdBQUc7SUFDL0IsT0FBTyxFQUFFLGFBQWE7SUFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQztJQUMxRCxLQUFLLEVBQUUsSUFBSTtDQUNaLENBQUM7QUFVRixNQUFNLE9BQU8sMkJBQTJCO0lBb0x0QyxZQUNFLE9BQW9DLEVBQ3BDLGNBQWlDLEVBQ2pDLGFBQXlDLEVBQ3pDLFVB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QUEsSUFBSSxpR0FBc0IsTUFBMUIsSUFBSSxFQUF1QixLQUFLLElBQUksRUFBRSxDQUFDLENBQUM7U0FDekM7S0FDRjtBQUNILENBQUM7eUhBcmtCVSwyQkFBMkI7NkdBQTNCLDJCQUEyQiwwWUFOM0I7UUFDVCw2QkFBNkI7UUFDN0Isd0JBQXdCO1FBQ3hCLDJCQUEyQjtLQUM1Qjs0RkFFVSwyQkFBMkI7a0JBUnZDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHNCQUFzQjtvQkFDaEMsU0FBUyxFQUFFO3dCQUNULDZCQUE2Qjt3QkFDN0Isd0JBQXdCO3dCQUN4QiwyQkFBMkI7cUJBQzVCO2lCQUNGOzswQkE2TEksUUFBUTs0Q0E3S0EsVUFBVTtzQkFEcEIsS0FBSztnQkF1QkssUUFBUTtzQkFEbEIsS0FBSztnQkFvQkssT0FBTztzQkFEakIsS0FBSztnQkFrQkssT0FBTztzQkFEakIsS0FBSztnQkFvQkssa0JBQWtCO3NCQUQ1QixLQUFLO2dCQW9CQyx1QkFBdUI7c0JBRDdCLEtBQUs7Z0JBVUssV0FBVztzQkFEckIsS0FBSztnQkFzQkssTUFBTTtzQkFEaEIsS0FBSztnQkFpSUMsYUFBYTtzQkFEbkIsWUFBWTt1QkFBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBMEIzQixXQUFXO3NCQURqQixZQUFZO3VCQUFDLE1BQU07Z0JBTWIsT0FBTztzQkFEYixZQUFZO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIFJlbmRlcmVyMixcbiAgZm9yd2FyZFJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBOR19WQUxJREFUT1JTLFxuICBOR19WQUxVRV9BQ0NFU1NPUixcbiAgVmFsaWRhdGlvbkVycm9ycyxcbiAgVmFsaWRhdG9yLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTa3lBcHBMb2NhbGVQcm92aWRlciwgU2t5TGliUmVzb3VyY2VzU2VydmljZSB9IGZyb20gJ0Bza3l1eC9pMThuJztcblxuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgU2t5RGF0ZUZvcm1hdHRlciB9IGZyb20gJy4vZGF0ZS1mb3JtYXR0ZXInO1xuaW1wb3J0IHsgU2t5RGF0ZXBpY2tlckFkYXB0ZXJTZXJ2aWNlIH0gZnJvbSAnLi9kYXRlcGlja2VyLWFkYXB0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTa3lEYXRlcGlja2VyQ29uZmlnU2VydmljZSB9IGZyb20gJy4vZGF0ZXBpY2tlci1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBTa3lEYXRlcGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRlcGlja2VyLmNvbXBvbmVudCc7XG5cbmNvbnN0IFNLWV9EQVRFUElDS0VSX1ZBTFVFX0FDQ0VTU09SID0ge1xuICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU2t5RGF0ZXBpY2tlcklucHV0RGlyZWN0aXZlKSxcbiAgbXVsdGk6IHRydWUsXG59O1xuXG5jb25zdCBTS1lfREFURVBJQ0tFUl9WQUxJREFUT1IgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNreURhdGVwaWNrZXJJbnB1dERpcmVjdGl2ZSksXG4gIG11bHRpOiB0cnVlLFxufTtcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW3NreURhdGVwaWNrZXJJbnB1dF0nLFxuICBwcm92aWRlcnM6IFtcbiAgICBTS1lfREFURVBJQ0tFUl9WQUxVRV9BQ0NFU1NPUixcbiAgICBTS1lfREFURVBJQ0tFUl9WQUxJREFUT1IsXG4gICAgU2t5RGF0ZXBpY2tlckFkYXB0ZXJTZXJ2aWNlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lEYXRlcGlja2VySW5wdXREaXJlY3RpdmVcbiAgaW1wbGVtZW50c1xuICAgIE9uSW5pdCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICAgIFZhbGlkYXRvclxue1xuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBkYXRlIGZvcm1hdCBmb3IgdGhlIGlucHV0LiBQbGFjZSB0aGlzIGF0dHJpYnV0ZSBvbiB0aGUgYGlucHV0YCBlbGVtZW50XG4gICAqIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGluIHRoZSBgU2t5RGF0ZXBpY2tlckNvbmZpZ1NlcnZpY2VgLlxuICAgKiBAZGVmYXVsdCBcIk1NL0REL1lZWVlcIlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBkYXRlRm9ybWF0KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy4jX2RhdGVGb3JtYXQpIHtcbiAgICAgIHRoaXMuI19kYXRlRm9ybWF0ID0gdmFsdWU7XG4gICAgICB0aGlzLiNhcHBseURhdGVGb3JtYXQoKTtcbiAgICB9XG4gIH1cblxuICAvLyBUT0RPOiBSZWZhY3RvciB0byBub3QgaGF2ZSBnZXR0ZXIgbG9naWNcbiAgcHVibGljIGdldCBkYXRlRm9ybWF0KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuI19kYXRlRm9ybWF0IHx8XG4gICAgICB0aGlzLiNjb25maWdTZXJ2aWNlLmRhdGVGb3JtYXQgfHxcbiAgICAgIHRoaXMuI3ByZWZlcnJlZFNob3J0RGF0ZUZvcm1hdFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdG8gZGlzYWJsZSB0aGUgZGF0ZXBpY2tlci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfZGlzYWJsZWQgPSB2YWx1ZSB8fCBmYWxzZTtcbiAgICB0aGlzLiNkYXRlcGlja2VyQ29tcG9uZW50LmRpc2FibGVkID0gdmFsdWU7XG4gICAgdGhpcy4jcmVuZGVyZXIuc2V0UHJvcGVydHkoXG4gICAgICB0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAnZGlzYWJsZWQnLFxuICAgICAgdmFsdWVcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy4jX2Rpc2FibGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgbGF0ZXN0IGRhdGUgdGhhdCBpcyBhdmFpbGFibGUgaW4gdGhlIGNhbGVuZGFyLiBQbGFjZSB0aGlzIGF0dHJpYnV0ZSBvblxuICAgKiB0aGUgYGlucHV0YCBlbGVtZW50IHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGluIGBTa3lEYXRlcGlja2VyQ29uZmlnU2VydmljZWAuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IG1heERhdGUodmFsdWU6IERhdGUgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfbWF4RGF0ZSA9IHZhbHVlO1xuICAgIHRoaXMuI2RhdGVwaWNrZXJDb21wb25lbnQubWF4RGF0ZSA9IHRoaXMubWF4RGF0ZTtcblxuICAgIHRoaXMuI29uVmFsaWRhdG9yQ2hhbmdlKCk7XG4gIH1cblxuICAvLyBUT0RPOiBSZWZhY3RvciB0byBub3QgaGF2ZSBnZXR0ZXIgbG9naWNcbiAgcHVibGljIGdldCBtYXhEYXRlKCk6IERhdGUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNfbWF4RGF0ZSB8fCB0aGlzLiNjb25maWdTZXJ2aWNlLm1heERhdGU7XG4gIH1cblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBlYXJsaWVzdCBkYXRlIHRoYXQgaXMgYXZhaWxhYmxlIGluIHRoZSBjYWxlbmRhci4gUGxhY2UgdGhpcyBhdHRyaWJ1dGUgb25cbiAgICogdGhlIGBpbnB1dGAgZWxlbWVudCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBpbiBgU2t5RGF0ZXBpY2tlckNvbmZpZ1NlcnZpY2VgLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBtaW5EYXRlKHZhbHVlOiBEYXRlIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX21pbkRhdGUgPSB2YWx1ZTtcbiAgICB0aGlzLiNkYXRlcGlja2VyQ29tcG9uZW50Lm1pbkRhdGUgPSB0aGlzLm1pbkRhdGU7XG5cbiAgICB0aGlzLiNvblZhbGlkYXRvckNoYW5nZSgpO1xuICB9XG5cbiAgLy8gVE9ETzogUmVmYWN0b3IgdG8gbm90IGhhdmUgZ2V0dGVyIGxvZ2ljXG4gIHB1YmxpYyBnZXQgbWluRGF0ZSgpOiBEYXRlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX21pbkRhdGUgfHwgdGhpcy4jY29uZmlnU2VydmljZS5taW5EYXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIGRhdGVwaWNrZXIgaW5wdXQgYW5kIGNhbGVuZGFyLiBQbGFjZSB0aGlzIGRpcmVjdGl2ZSBvbiBhbiBgaW5wdXRgIGVsZW1lbnQsXG4gICAqIGFuZCB3cmFwIHRoZSBpbnB1dCBpbiBhIGBza3ktZGF0ZXBpY2tlcmAgY29tcG9uZW50LiBUaGUgdmFsdWUgdGhhdCB1c2VycyBzZWxlY3QgaXMgZHJpdmVuXG4gICAqIHRocm91Z2ggdGhlIGBuZ01vZGVsYCBhdHRyaWJ1dGUgc3BlY2lmaWVkIG9uIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqIEByZXF1aXJlZFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBza3lEYXRlcGlja2VySW5wdXQoXG4gICAgdmFsdWU6IFNreURhdGVwaWNrZXJDb21wb25lbnQgfCB1bmRlZmluZWQgfCAnJ1xuICApIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ1tEZXByZWNhdGlvbiB3YXJuaW5nXSBZb3Ugbm8gbG9uZ2VyIG5lZWQgdG8gcHJvdmlkZSBhIHRlbXBsYXRlIHJlZmVyZW5jZSB2YXJpYWJsZSAnICtcbiAgICAgICAgICAndG8gdGhlIGBza3lEYXRlcGlja2VySW5wdXRgIGF0dHJpYnV0ZSAodGhpcyB3aWxsIGJlIGEgYnJlYWtpbmcgY2hhbmdlIGluIHRoZSBuZXh0ICcgK1xuICAgICAgICAgICdtYWpvciB2ZXJzaW9uIHJlbGVhc2UpLlxcbicgK1xuICAgICAgICAgICdEbyB0aGlzIGluc3RlYWQ6XFxuJyArXG4gICAgICAgICAgJzxza3ktZGF0ZXBpY2tlcj5cXG4gIDxpbnB1dCBza3lEYXRlcGlja2VySW5wdXQgLz5cXG48L3NreS1kYXRlcGlja2VyPidcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRvIGRpc2FibGUgZGF0ZSB2YWxpZGF0aW9uIG9uIHRoZSBkYXRlcGlja2VyIGlucHV0LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNreURhdGVwaWNrZXJOb1ZhbGlkYXRlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgc3RhcnRpbmcgZGF5IG9mIHRoZSB3ZWVrIGluIHRoZSBjYWxlbmRhciwgd2hlcmUgYDBgIHNldHMgdGhlIHN0YXJ0aW5nIGRheVxuICAgKiB0byBTdW5kYXkuIFBsYWNlIHRoaXMgYXR0cmlidXRlIG9uIHRoZSBgaW5wdXRgIGVsZW1lbnQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHRcbiAgICogaW4gYFNreURhdGVwaWNrZXJDb25maWdTZXJ2aWNlYC5cbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBzdGFydGluZ0RheSh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX3N0YXJ0aW5nRGF5ID0gdmFsdWU7XG4gICAgdGhpcy4jZGF0ZXBpY2tlckNvbXBvbmVudC5zdGFydGluZ0RheSA9IHRoaXMuc3RhcnRpbmdEYXk7XG5cbiAgICB0aGlzLiNvblZhbGlkYXRvckNoYW5nZSgpO1xuICB9XG5cbiAgLy8gVE9ETzogUmVmYWN0b3IgdG8gbm90IGhhdmUgZ2V0dGVyIGxvZ2ljXG4gIHB1YmxpYyBnZXQgc3RhcnRpbmdEYXkoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy4jX3N0YXJ0aW5nRGF5IHx8IHRoaXMuI2NvbmZpZ1NlcnZpY2Uuc3RhcnRpbmdEYXk7XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGZvcm1hdCBvZiB0aGUgZGF0ZSB2YWx1ZSBtdXN0IG1hdGNoIHRoZSBmb3JtYXQgZnJvbSB0aGUgYGRhdGVGb3JtYXRgIHZhbHVlLlxuICAgKiBJZiB0aGlzIHByb3BlcnR5IGlzIGB0cnVlYCBhbmQgdGhlIGRhdGVwaWNrZXIgaW5wdXQgZGlyZWN0aXZlIGNhbm5vdCBmaW5kIGFuIGV4YWN0IG1hdGNoLCB0aGVuXG4gICAqIHRoZSBpbnB1dCBpcyBtYXJrZWQgYXMgaW52YWxpZC5cbiAgICogSWYgdGhpcyBwcm9wZXJ0eSBpcyBgZmFsc2VgIGFuZCB0aGUgZGF0ZXBpY2tlciBpbnB1dCBkaXJlY3RpdmUgY2Fubm90IGZpbmQgYW4gZXhhY3QgbWF0Y2gsIHRoZW5cbiAgICogaXQgYXR0ZW1wdHMgdG8gZm9ybWF0IHRoZSBzdHJpbmcgYmFzZWQgb24gdGhlIFtJU08gODYwMSBzdGFuZGFyZCBmb3JtYXRdKGh0dHBzOi8vd3d3Lmlzby5vcmcvaXNvLTg2MDEtZGF0ZS1hbmQtdGltZS1mb3JtYXQuaHRtbCkuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHN0cmljdCh2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19zdHJpY3QgPSB2YWx1ZSB8fCBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc3RyaWN0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLiNfc3RyaWN0O1xuICB9XG5cbiAgZ2V0ICN2YWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLiNfdmFsdWU7XG4gIH1cblxuICBzZXQgI3ZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLiN1cGRhdGVWYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICAjY29udHJvbDogQWJzdHJhY3RDb250cm9sIHwgdW5kZWZpbmVkO1xuICAjZGF0ZUZvcm1hdHRlciA9IG5ldyBTa3lEYXRlRm9ybWF0dGVyKCk7XG4gICNpbml0aWFsUGxhY2Vob2xkZXI6IHN0cmluZztcbiAgI3ByZWZlcnJlZFNob3J0RGF0ZUZvcm1hdDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAjbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgI19kYXRlRm9ybWF0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICNfZGlzYWJsZWQgPSBmYWxzZTtcbiAgI19tYXhEYXRlOiBEYXRlIHwgdW5kZWZpbmVkO1xuICAjX21pbkRhdGU6IERhdGUgfCB1bmRlZmluZWQ7XG4gICNfc3RhcnRpbmdEYXk6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgI19zdHJpY3QgPSBmYWxzZTtcbiAgI192YWx1ZTogYW55O1xuXG4gICNhZGFwdGVyOiBTa3lEYXRlcGlja2VyQWRhcHRlclNlcnZpY2U7XG4gICNjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWY7XG4gICNjb25maWdTZXJ2aWNlOiBTa3lEYXRlcGlja2VyQ29uZmlnU2VydmljZTtcbiAgI2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY7XG4gICNsb2NhbGVQcm92aWRlcjogU2t5QXBwTG9jYWxlUHJvdmlkZXI7XG4gICNyZW5kZXJlcjogUmVuZGVyZXIyO1xuICAjcmVzb3VyY2VzU2VydmljZTogU2t5TGliUmVzb3VyY2VzU2VydmljZTtcbiAgI2RhdGVwaWNrZXJDb21wb25lbnQ6IFNreURhdGVwaWNrZXJDb21wb25lbnQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgYWRhcHRlcjogU2t5RGF0ZXBpY2tlckFkYXB0ZXJTZXJ2aWNlLFxuICAgIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBjb25maWdTZXJ2aWNlOiBTa3lEYXRlcGlja2VyQ29uZmlnU2VydmljZSxcbiAgICBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIGxvY2FsZVByb3ZpZGVyOiBTa3lBcHBMb2NhbGVQcm92aWRlcixcbiAgICByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHJlc291cmNlc1NlcnZpY2U6IFNreUxpYlJlc291cmNlc1NlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgZGF0ZXBpY2tlckNvbXBvbmVudD86IFNreURhdGVwaWNrZXJDb21wb25lbnRcbiAgKSB7XG4gICAgaWYgKCFkYXRlcGlja2VyQ29tcG9uZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdZb3UgbXVzdCB3cmFwIHRoZSBgc2t5RGF0ZXBpY2tlcklucHV0YCBkaXJlY3RpdmUgd2l0aGluIGEgJyArXG4gICAgICAgICAgJ2A8c2t5LWRhdGVwaWNrZXI+YCBjb21wb25lbnQhJ1xuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy4jYWRhcHRlciA9IGFkYXB0ZXI7XG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IgPSBjaGFuZ2VEZXRlY3RvcjtcbiAgICB0aGlzLiNjb25maWdTZXJ2aWNlID0gY29uZmlnU2VydmljZTtcbiAgICB0aGlzLiNlbGVtZW50UmVmID0gZWxlbWVudFJlZjtcbiAgICB0aGlzLiNsb2NhbGVQcm92aWRlciA9IGxvY2FsZVByb3ZpZGVyO1xuICAgIHRoaXMuI3JlbmRlcmVyID0gcmVuZGVyZXI7XG4gICAgdGhpcy4jcmVzb3VyY2VzU2VydmljZSA9IHJlc291cmNlc1NlcnZpY2U7XG4gICAgdGhpcy4jZGF0ZXBpY2tlckNvbXBvbmVudCA9IGRhdGVwaWNrZXJDb21wb25lbnQ7XG4gICAgdGhpcy4jaW5pdGlhbFBsYWNlaG9sZGVyID0gdGhpcy4jYWRhcHRlci5nZXRQbGFjZWhvbGRlcih0aGlzLiNlbGVtZW50UmVmKTtcbiAgICB0aGlzLiN1cGRhdGVQbGFjZWhvbGRlcigpO1xuXG4gICAgdGhpcy4jbG9jYWxlUHJvdmlkZXJcbiAgICAgIC5nZXRMb2NhbGVJbmZvKClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGxvY2FsZUluZm8pID0+IHtcbiAgICAgICAgU2t5RGF0ZUZvcm1hdHRlci5zZXRMb2NhbGUobG9jYWxlSW5mby5sb2NhbGUpO1xuICAgICAgICB0aGlzLiNwcmVmZXJyZWRTaG9ydERhdGVGb3JtYXQgPVxuICAgICAgICAgIFNreURhdGVGb3JtYXR0ZXIuZ2V0UHJlZmVycmVkU2hvcnREYXRlRm9ybWF0KCk7XG4gICAgICAgIHRoaXMuI2FwcGx5RGF0ZUZvcm1hdCgpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuI2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcblxuICAgIHRoaXMuI3JlbmRlcmVyLmFkZENsYXNzKGVsZW1lbnQsICdza3ktZm9ybS1jb250cm9sJyk7XG5cbiAgICBjb25zdCBoYXNBcmlhTGFiZWwgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcpO1xuXG4gICAgaWYgKCFoYXNBcmlhTGFiZWwpIHtcbiAgICAgIHRoaXMuI3Jlc291cmNlc1NlcnZpY2VcbiAgICAgICAgLmdldFN0cmluZygnc2t5dXhfZGF0ZV9maWVsZF9kZWZhdWx0X2xhYmVsJylcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgdGhpcy4jcmVuZGVyZXIuc2V0QXR0cmlidXRlKGVsZW1lbnQsICdhcmlhLWxhYmVsJywgdmFsdWUpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuI2RhdGVwaWNrZXJDb21wb25lbnQuZGF0ZUNoYW5nZVxuICAgICAgLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlOiBEYXRlKSA9PiB7XG4gICAgICAgIHRoaXMuI3ZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuI29uVG91Y2hlZCgpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIC8vIFRoaXMgaXMgbmVlZGVkIHRvIGFkZHJlc3MgYSBidWcgaW4gQW5ndWxhciA0LlxuICAgIC8vIFdoZW4gYSBjb250cm9sIHZhbHVlIGlzIHNldCBpbnRpYWxseSwgaXRzIHZhbHVlIGlzIG5vdCByZXByZXNlbnRlZCBvbiB0aGUgdmlldy5cbiAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzEzNzkyXG4gICAgLy8gT2Ygbm90ZSBpcyB0aGUgcGFyZW50IGNoZWNrIHdoaWNoIGFsbG93cyB1cyB0byBkZXRlcm1pbmUgaWYgdGhlIGZvcm0gaXMgcmVhY3RpdmUuXG4gICAgLy8gV2l0aG91dCB0aGlzIGNoZWNrIHRoZXJlIGlzIGEgY2hhbmdlZCBiZWZvcmUgY2hlY2tlZCBlcnJvclxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMuI2NvbnRyb2wgJiYgdGhpcy4jY29udHJvbC5wYXJlbnQpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLiNjb250cm9sPy5zZXRWYWx1ZSh0aGlzLiN2YWx1ZSwge1xuICAgICAgICAgIGVtaXRFdmVudDogZmFsc2UsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NoYW5nZScsIFsnJGV2ZW50J10pXG4gIHB1YmxpYyBvbklucHV0Q2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcblxuICAgIGlmICh0aGlzLnNreURhdGVwaWNrZXJOb1ZhbGlkYXRlKSB7XG4gICAgICB0aGlzLiNvblZhbHVlQ2hhbmdlKHZhbHVlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBEb24ndCB0cnkgdG8gcGFyc2UgdGhlIHN0cmluZyB2YWx1ZSBpbnRvIGEgRGF0ZSB2YWx1ZSBpZiBpdCBpcyBtYWxmb3JtZWQuXG4gICAgaWYgKHRoaXMuI2lzRGF0ZVN0cmluZ1ZhbGlkKHZhbHVlKSkge1xuICAgICAgdGhpcy4jb25WYWx1ZUNoYW5nZSh2YWx1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy4jX3ZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy4jb25DaGFuZ2UodmFsdWUpO1xuXG4gICAgdGhpcy4jY29udHJvbD8uc2V0RXJyb3JzKHtcbiAgICAgIHNreURhdGU6IHtcbiAgICAgICAgaW52YWxpZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdibHVyJylcbiAgcHVibGljIG9uSW5wdXRCbHVyKCk6IHZvaWQge1xuICAgIHRoaXMuI29uVG91Y2hlZCgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignaW5wdXQnKVxuICBwdWJsaWMgb25JbnB1dCgpOiB2b2lkIHtcbiAgICB0aGlzLiNjb250cm9sPy5tYXJrQXNEaXJ0eSgpO1xuICB9XG5cbiAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuI3VwZGF0ZVZhbHVlKHZhbHVlLCBmYWxzZSk7XG4gIH1cblxuICBwdWJsaWMgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGlmICghdGhpcy4jY29udHJvbCkge1xuICAgICAgdGhpcy4jY29udHJvbCA9IGNvbnRyb2w7XG4gICAgICAvLyBBY2NvdW50IGZvciBhbnkgZGF0ZSBjb252ZXJzaW9uIHRoYXQgbWF5IGhhdmUgb2NjdXJyZWQgcHJpb3IgdG8gdmFsaWRhdGlvbi5cbiAgICAgIGlmICh0aGlzLiNjb250cm9sLnZhbHVlICE9PSB0aGlzLiN2YWx1ZSkge1xuICAgICAgICB0aGlzLiNjb250cm9sLnBhdGNoVmFsdWUodGhpcy4jdmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5za3lEYXRlcGlja2VyTm9WYWxpZGF0ZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWU6IHVua25vd24gPSBjb250cm9sLnZhbHVlO1xuXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgY29uc3QgaXNEYXRlVmFsaWQgPSB0aGlzLiNkYXRlRm9ybWF0dGVyLmRhdGVJc1ZhbGlkKHZhbHVlKTtcblxuICAgICAgaWYgKCFpc0RhdGVWYWxpZCkge1xuICAgICAgICAvLyBNYXJrIHRoZSBpbnZhbGlkIGNvbnRyb2wgYXMgdG91Y2hlZCBzbyB0aGF0IHRoZSBpbnB1dCdzIGludmFsaWQgQ1NTIHN0eWxlcyBhcHBlYXIuXG4gICAgICAgIC8vIChUaGlzIGlzIG9ubHkgcmVxdWlyZWQgd2hlbiB0aGUgaW52YWxpZCB2YWx1ZSBpcyBzZXQgYnkgdGhlIEZvcm1Db250cm9sIGNvbnN0cnVjdG9yLilcbiAgICAgICAgdGhpcy4jY29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBza3lEYXRlOiB7XG4gICAgICAgICAgICBpbnZhbGlkOiB2YWx1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtaW5EYXRlID0gdGhpcy5taW5EYXRlO1xuXG4gICAgICBpZiAoXG4gICAgICAgIG1pbkRhdGUgJiZcbiAgICAgICAgdGhpcy4jZGF0ZUZvcm1hdHRlci5kYXRlSXNWYWxpZChtaW5EYXRlKSAmJlxuICAgICAgICB2YWx1ZSA8IG1pbkRhdGVcbiAgICAgICkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNreURhdGU6IHtcbiAgICAgICAgICAgIG1pbkRhdGUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWF4RGF0ZSA9IHRoaXMubWF4RGF0ZTtcblxuICAgICAgaWYgKFxuICAgICAgICBtYXhEYXRlICYmXG4gICAgICAgIHRoaXMuI2RhdGVGb3JtYXR0ZXIuZGF0ZUlzVmFsaWQobWF4RGF0ZSkgJiZcbiAgICAgICAgdmFsdWUgPiBtYXhEYXRlXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBza3lEYXRlOiB7XG4gICAgICAgICAgICBtYXhEYXRlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE1hcmsgdGhlIGludmFsaWQgY29udHJvbCBhcyB0b3VjaGVkIHNvIHRoYXQgdGhlIGlucHV0J3MgaW52YWxpZCBDU1Mgc3R5bGVzIGFwcGVhci5cbiAgICAgIC8vIChUaGlzIGlzIG9ubHkgcmVxdWlyZWQgd2hlbiB0aGUgaW52YWxpZCB2YWx1ZSBpcyBzZXQgYnkgdGhlIEZvcm1Db250cm9sIGNvbnN0cnVjdG9yLilcbiAgICAgIHRoaXMuI2NvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBza3lEYXRlOiB7XG4gICAgICAgICAgaW52YWxpZDogdmFsdWUsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IGFueSkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuI29uQ2hhbmdlID0gZm47XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLiNvblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy4jb25WYWxpZGF0b3JDaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGRpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGRpc2FibGVkO1xuICAgIHRoaXMuI2RhdGVwaWNrZXJDb21wb25lbnQuZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlY3RzIGNoYW5nZXMgdG8gdGhlIHVuZGVybHlpbmcgaW5wdXQgZWxlbWVudCdzIHZhbHVlIGFuZCB1cGRhdGVzIHRoZSBuZ01vZGVsIGFjY29yZGluZ2x5LlxuICAgKiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3UgbmVlZCB0byB1cGRhdGUgdGhlIG5nTW9kZWwgdmFsdWUgYmVmb3JlIHRoZSBpbnB1dCBlbGVtZW50IGxvc2VzIGZvY3VzLlxuICAgKi9cbiAgcHVibGljIGRldGVjdElucHV0VmFsdWVDaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy4jb25WYWx1ZUNoYW5nZSh0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWUpO1xuICB9XG5cbiAgI2FwcGx5RGF0ZUZvcm1hdCgpOiB2b2lkIHtcbiAgICB0aGlzLiN1cGRhdGVQbGFjZWhvbGRlcigpO1xuICAgIGlmICh0aGlzLiN2YWx1ZSkge1xuICAgICAgY29uc3QgZm9ybWF0dGVkRGF0ZSA9IHRoaXMuI2RhdGVGb3JtYXR0ZXIuZm9ybWF0KFxuICAgICAgICB0aGlzLiN2YWx1ZSxcbiAgICAgICAgdGhpcy5kYXRlRm9ybWF0XG4gICAgICApO1xuICAgICAgdGhpcy4jc2V0SW5wdXRFbGVtZW50VmFsdWUoZm9ybWF0dGVkRGF0ZSk7XG4gICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICAjb25WYWx1ZUNoYW5nZShuZXdWYWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy4jdmFsdWUgPSBuZXdWYWx1ZTtcbiAgfVxuXG4gICNzZXRJbnB1dEVsZW1lbnRWYWx1ZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy4jcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAndmFsdWUnLCB2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgZGF0ZSB2YWx1ZSBmcm9tIGEgdmFsdWUgLSBpZiBwb3NzaWJsZS5cbiAgICogV2lsbCBub3QgY29udmVydCB1bmNvbnZlcnRhYmxlIGRhdGVzIG9yIG51bWJlcnMgb3V0c2lkZSBvZiB0aGUgY3VycmVudCBtb250aCdzIG51bWJlciBvZiBkYXlzLlxuICAgKiBSZXR1cm5zIGB1bmRlZmluZWRgIGlmIHRoZSB2YWx1ZSBjYW4gbm90IGJlIGNvbnZlcnRlZC5cbiAgICovXG4gICNnZXREYXRlVmFsdWUodmFsdWU6IHVua25vd24pOiBEYXRlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gdGhpcy4jZ2V0U2hvcnRjdXRPckRhdGVWYWx1ZSh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYSBzdHJpbmcgdG8gYSBkYXRlIG9iamVjdCBpZiB0aGUgc3RyaW5nIGlzIGEgdmFsaWQgZGF0ZSBzdHJpbmcuXG4gICAqIEl0IHdpbGwgYWxzbyBjb252ZXJ0IG51bWVyaWMgaW5wdXQgdG8gYSBkYXRlIGlmIHRoYXQgbnVtYmVyIGlzIHdpdGhpbiB0aGUgY3VycmVudCBtb250aCdzIG51bWJlciBvZiBkYXlzLlxuICAgKiBJZiB0aGUgc3RyaW5nIGNhbiBub3QgYmUgY29udmVydGVkLCBgdW5kZWZpbmVkYCBiZSByZXR1cm5lZC5cbiAgICovXG4gICNnZXRTaG9ydGN1dE9yRGF0ZVZhbHVlKHZhbHVlOiBzdHJpbmcpOiBEYXRlIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBudW0gPSBOdW1iZXIodmFsdWUpO1xuICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKG51bSkpIHtcbiAgICAgIC8vIFdlIHJlcXVpcmUgOCBkaWdpdHMgaW4gb3JkZXIgdG8ga25vdyB0aGF0IHdlIGhhdmUgYWxsIGluZm9ybWF0aW9uIG5lZWRlZCB0byBkZXRlcm1pbmUgd2hhdCBwYXJ0IG9mIHRoZSBudW1iZXIgaXMgdGhlIG1vbnRoICgyKSwgZGF5ICgyKSwgYW5kIHllYXIgKDQpLlxuICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gOCkge1xuICAgICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoL1xcYihNTSlcXGJ8XFxiKEREKVxcYnxcXGIoWVkpXFxifFxcYihZWVlZKVxcYi8sICdnJyk7XG4gICAgICAgIGNvbnN0IGZvcm1hdFRva2Vuc09ubHkgPSB0aGlzLmRhdGVGb3JtYXRcbiAgICAgICAgICA/Lm1hdGNoKHJlZ2V4KVxuICAgICAgICAgID8uam9pbignJylcbiAgICAgICAgICAucmVwbGFjZShuZXcgUmVnRXhwKC9ZKy8pLCAnWVlZWScpO1xuXG4gICAgICAgIGlmIChmb3JtYXRUb2tlbnNPbmx5ICYmIGZvcm1hdFRva2Vuc09ubHkubGVuZ3RoID09PSA4KSB7XG4gICAgICAgICAgY29uc3QgZGF0ZSA9IHRoaXMuI2RhdGVGb3JtYXR0ZXIuZ2V0RGF0ZUZyb21TdHJpbmcoXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIGZvcm1hdFRva2Vuc09ubHksXG4gICAgICAgICAgICB0cnVlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAodGhpcy4jZGF0ZUZvcm1hdHRlci5kYXRlSXNWYWxpZChkYXRlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgICAgY29uc3Qgc2hvcnRjdXREYXRlID0gbmV3IERhdGUobm93LmdldEZ1bGxZZWFyKCksIG5vdy5nZXRNb250aCgpLCBudW0pO1xuICAgICAgY29uc3QgZGF5c0luTW9udGggPSBzaG9ydGN1dERhdGUuZ2V0RGF0ZSgpO1xuICAgICAgaWYgKG51bSA+IDAgJiYgbnVtIDw9IGRheXNJbk1vbnRoKSB7XG4gICAgICAgIHJldHVybiBzaG9ydGN1dERhdGU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLiNkYXRlRm9ybWF0dGVyLmdldERhdGVGcm9tU3RyaW5nKFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgdGhpcy5kYXRlRm9ybWF0LFxuICAgICAgICB0aGlzLnN0cmljdFxuICAgICAgKTtcbiAgICAgIGlmICh0aGlzLiNkYXRlRm9ybWF0dGVyLmRhdGVJc1ZhbGlkKGRhdGUpKSB7XG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgaW5wdXQgdmFsdWUgdG8gZW5zdXJlIGl0IGlzIGZvcm1hdHRlZCBjb3JyZWN0bHkuXG4gICAqL1xuICAjaXNEYXRlU3RyaW5nVmFsaWQodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gRG9lcyB0aGUgdmFsdWUgb25seSBpbmNsdWRlIGRpZ2l0cywgZGFzaGVzLCBvciBzbGFzaGVzP1xuICAgIGNvbnN0IHJlZ2V4cCA9IC9eW1xcZC8tXSskLztcbiAgICBjb25zdCBpc1ZhbGlkID0gcmVnZXhwLnRlc3QodmFsdWUpO1xuXG4gICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIElmIG5vdCwgZG9lcyBpdCBjb25mb3JtIHRvIHRoZSBzdGFuZGFyZCBJU08gZm9ybWF0P1xuICAgIGNvbnN0IGlzVmFsaWRJc28gPSBtb21lbnQodmFsdWUsIG1vbWVudC5JU09fODYwMSkuaXNWYWxpZCgpO1xuXG4gICAgcmV0dXJuIGlzVmFsaWRJc287XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICNvbkNoYW5nZSA9IChfOiBhbnkpID0+IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICNvblRvdWNoZWQgPSAoKSA9PiB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAjb25WYWxpZGF0b3JDaGFuZ2UgPSAoKSA9PiB7fTtcblxuICAjdXBkYXRlUGxhY2Vob2xkZXIoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLiNpbml0aWFsUGxhY2Vob2xkZXIgJiYgdGhpcy5kYXRlRm9ybWF0KSB7XG4gICAgICB0aGlzLiNhZGFwdGVyLnNldFBsYWNlaG9sZGVyKHRoaXMuI2VsZW1lbnRSZWYsIHRoaXMuZGF0ZUZvcm1hdCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgdmFsdWUgb2YgdGhlIGZvcm0gY29udHJvbCBhbmQgaW5wdXQgZWxlbWVudFxuICAgKiBAcGFyYW0gZW1pdEV2ZW50IERlbm90ZXMgaWYgd2UgZW1pdCBhbiBldmVudCB0byB0aGUgY29uc3VtZXIncyBmb3JtIGNvbnRyb2wuIFdlIGRvIG5vdCB3YW50IHRvIGRvIHRoaXMgaWYgdGhlIHZhbHVlIGlzIGJlaW5nIHVwZGF0ZWQgdmlhIGEgYHNldFZhbHVlYCBjYWxsIG9yIGEgYHBhdGNoVmFsdWVgIGNhbGwgYXMgdGhpcyBpcyBhbHJlYWR5IGhhbmRsZWQgYnkgQW5ndWxhci5cbiAgICogSW4gdGhlc2UgY2FzZXMgd2UgZG8gbm90IHdhbnQgdG8gZmlyZSBgb25DaGFuZ2VgIGFzIGl0IHdpbGwgY2F1c2UgZXh0cmEgYHZhbHVlQ2hhbmdlYCBhbmQgYHN0YXR1c0NoYW5nZWAgZXZlbnRzIGFuZCB0aGUgc3RhdHVzIG9mIHRoZSBmb3JtIHNob3VsZCBub3QgYmUgYWZmZWN0ZWQgYnkgdGhlc2UgY2hhbmdlcy5cbiAgICovXG4gICN1cGRhdGVWYWx1ZSh2YWx1ZTogYW55LCBlbWl0RXZlbnQgPSB0cnVlKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuI192YWx1ZSA9PT0gdmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpc1ZhbGlkRGF0ZVN0cmluZyA9IHRoaXMuI2lzRGF0ZVN0cmluZ1ZhbGlkKHZhbHVlKTtcblxuICAgIC8vIElmIHRoZSBzdHJpbmcgdmFsdWUgc3VwcGxpZWQgaXMgbWFsZm9ybWVkLCBkbyBub3Qgc2V0IHRoZSB2YWx1ZSB0byBpdHMgRGF0ZSBlcXVpdmFsZW50LlxuICAgIC8vIChKYXZhU2NyaXB0J3MgRGF0ZSBwYXJzZXIgd2lsbCBjb252ZXJ0IHBvb3JseSBmb3JtYXR0ZWQgZGF0ZXMgdG8gRGF0ZSBvYmplY3RzLCBzdWNoIGFzIFwiYWJjIDEyM1wiLCB3aGljaCBpc24ndCBpZGVhbC4pXG4gICAgaWYgKCFpc1ZhbGlkRGF0ZVN0cmluZykge1xuICAgICAgdGhpcy4jX3ZhbHVlID0gdmFsdWU7XG4gICAgICBpZiAoZW1pdEV2ZW50KSB7XG4gICAgICAgIHRoaXMuI29uQ2hhbmdlKHRoaXMuI192YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLiNjb250cm9sPy5zZXRWYWx1ZSh0aGlzLiNfdmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy4jZGF0ZXBpY2tlckNvbXBvbmVudC5zZWxlY3RlZERhdGUgPSB0aGlzLiNfdmFsdWU7XG5cbiAgICAgIHRoaXMuI3NldElucHV0RWxlbWVudFZhbHVlKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhpcyB2YWx1ZSByZXByZXNlbnRzIHRoZSBkYXRlIHZhbHVlIGZvciB0aGUgaW5wdXQgaWYgcG9zc2libGUuXG4gICAgICAvLyBUaGlzIHZhbHVlIHdpbGwgdGFrZSBpbnRvIGFjY291bnQgYWxsIHNob3J0Y3V0IGZ1bmN0aW9uYWxpdHkuXG4gICAgICBjb25zdCBkYXRlVmFsdWU6IERhdGUgfCB1bmRlZmluZWQgPSB0aGlzLiNnZXREYXRlVmFsdWUodmFsdWUpO1xuXG4gICAgICBjb25zdCBhcmVEYXRlc0VxdWFsID1cbiAgICAgICAgdGhpcy4jX3ZhbHVlIGluc3RhbmNlb2YgRGF0ZSAmJlxuICAgICAgICBkYXRlVmFsdWUgJiZcbiAgICAgICAgZGF0ZVZhbHVlLmdldFRpbWUoKSA9PT0gdGhpcy4jX3ZhbHVlLmdldFRpbWUoKTtcblxuICAgICAgaWYgKGRhdGVWYWx1ZSAhPT0gdGhpcy4jX3ZhbHVlIHx8ICFhcmVEYXRlc0VxdWFsKSB7XG4gICAgICAgIHRoaXMuI192YWx1ZSA9IGRhdGVWYWx1ZSB8fCB2YWx1ZTtcbiAgICAgICAgaWYgKGVtaXRFdmVudCkge1xuICAgICAgICAgIHRoaXMuI29uQ2hhbmdlKHRoaXMuI192YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy4jY29udHJvbD8uc2V0VmFsdWUodGhpcy4jX3ZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLiNkYXRlcGlja2VyQ29tcG9uZW50LnNlbGVjdGVkRGF0ZSA9IHRoaXMuI192YWx1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGVWYWx1ZSkge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWREYXRlU3RyaW5nID0gdGhpcy4jZGF0ZUZvcm1hdHRlci5mb3JtYXQoXG4gICAgICAgICAgZGF0ZVZhbHVlLFxuICAgICAgICAgIHRoaXMuZGF0ZUZvcm1hdFxuICAgICAgICApO1xuICAgICAgICB0aGlzLiNzZXRJbnB1dEVsZW1lbnRWYWx1ZShmb3JtYXR0ZWREYXRlU3RyaW5nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuI3NldElucHV0RWxlbWVudFZhbHVlKHZhbHVlIHx8ICcnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
|