@skyux/datetime 7.0.0-beta.11 → 7.0.0-beta.13
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 +1532 -991
- 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 +262 -204
- package/esm2020/lib/modules/date-range-picker/date-range-picker.module.mjs +11 -3
- package/esm2020/lib/modules/date-range-picker/date-range.service.mjs +42 -38
- 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 +7 -14
- package/esm2020/lib/modules/datepicker/datepicker-calendar-inner.component.mjs +43 -20
- package/esm2020/lib/modules/datepicker/datepicker-calendar.component.mjs +28 -35
- package/esm2020/lib/modules/datepicker/datepicker-config.service.mjs +1 -1
- package/esm2020/lib/modules/datepicker/datepicker-input-fuzzy.directive.mjs +223 -209
- package/esm2020/lib/modules/datepicker/datepicker-input.directive.mjs +212 -220
- package/esm2020/lib/modules/datepicker/datepicker.component.mjs +117 -138
- package/esm2020/lib/modules/datepicker/daypicker-button.component.mjs +3 -3
- package/esm2020/lib/modules/datepicker/daypicker-cell.component.mjs +61 -59
- package/esm2020/lib/modules/datepicker/daypicker.component.mjs +143 -137
- package/esm2020/lib/modules/datepicker/fuzzy-date.service.mjs +123 -132
- package/esm2020/lib/modules/datepicker/monthpicker.component.mjs +51 -49
- package/esm2020/lib/modules/datepicker/yearpicker.component.mjs +52 -50
- package/esm2020/lib/modules/timepicker/timepicker.component.mjs +104 -88
- package/esm2020/lib/modules/timepicker/timepicker.directive.mjs +105 -98
- package/fesm2015/skyux-datetime.mjs +1642 -1516
- package/fesm2015/skyux-datetime.mjs.map +1 -1
- package/fesm2020/skyux-datetime.mjs +1618 -1510
- 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 +8 -8
@@ -1,3 +1,5 @@
|
|
1
|
+
var _SkyFuzzyDateService_instances, _SkyFuzzyDateService_currentLocale, _SkyFuzzyDateService_ngUnsubscribe, _SkyFuzzyDateService_getMostRecentLeapYear, _SkyFuzzyDateService_getDateSeparator, _SkyFuzzyDateService_get4DigitYearFromDateString, _SkyFuzzyDateService_isLeapYear, _SkyFuzzyDateService_getMonthNumber, _SkyFuzzyDateService_getDefaultYear, _SkyFuzzyDateService_getDateComponents, _SkyFuzzyDateService_getDateFormatIndexes, _SkyFuzzyDateService_getDateValueIndexes, _SkyFuzzyDateService_isFuzzyDateValid;
|
2
|
+
import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
|
1
3
|
import { Injectable } from '@angular/core';
|
2
4
|
import { SkyAppLocaleProvider } from '@skyux/i18n';
|
3
5
|
import moment from 'moment';
|
@@ -10,48 +12,52 @@ import * as i1 from "@skyux/i18n";
|
|
10
12
|
*/
|
11
13
|
export class SkyFuzzyDateService {
|
12
14
|
constructor(localeProvider) {
|
13
|
-
this
|
14
|
-
this
|
15
|
-
this
|
15
|
+
_SkyFuzzyDateService_instances.add(this);
|
16
|
+
_SkyFuzzyDateService_currentLocale.set(this, void 0);
|
17
|
+
_SkyFuzzyDateService_ngUnsubscribe.set(this, new Subject());
|
18
|
+
__classPrivateFieldSet(this, _SkyFuzzyDateService_currentLocale, localeProvider.defaultLocale, "f");
|
19
|
+
localeProvider
|
16
20
|
.getLocaleInfo()
|
17
|
-
.pipe(takeUntil(this
|
21
|
+
.pipe(takeUntil(__classPrivateFieldGet(this, _SkyFuzzyDateService_ngUnsubscribe, "f")))
|
18
22
|
.subscribe((localeInfo) => {
|
19
|
-
this
|
23
|
+
__classPrivateFieldSet(this, _SkyFuzzyDateService_currentLocale, localeInfo.locale, "f");
|
20
24
|
});
|
21
25
|
}
|
22
26
|
/* istanbul ignore next */
|
23
27
|
ngOnDestroy() {
|
24
|
-
this.
|
25
|
-
this.
|
28
|
+
__classPrivateFieldGet(this, _SkyFuzzyDateService_ngUnsubscribe, "f").next();
|
29
|
+
__classPrivateFieldGet(this, _SkyFuzzyDateService_ngUnsubscribe, "f").complete();
|
26
30
|
}
|
27
31
|
/**
|
28
32
|
* Returns the browser's current locale string.
|
29
33
|
*/
|
30
34
|
getCurrentLocale() {
|
31
|
-
return this
|
35
|
+
return __classPrivateFieldGet(this, _SkyFuzzyDateService_currentLocale, "f");
|
32
36
|
}
|
33
37
|
/**
|
34
38
|
* Returns the short format of the provided locale.
|
35
39
|
* If not provided, the locale will be taken from the browser's default locale.
|
36
40
|
*/
|
37
41
|
getLocaleShortFormat(locale) {
|
38
|
-
return moment.localeData(locale || this
|
42
|
+
return moment.localeData(locale || __classPrivateFieldGet(this, _SkyFuzzyDateService_currentLocale, "f")).longDateFormat('L');
|
39
43
|
}
|
40
44
|
/**
|
41
45
|
* Formats a fuzzy date by using the provided format and locale strings.
|
42
46
|
* If not provided, the locale will be taken from the browser's default locale.
|
43
47
|
*/
|
44
48
|
format(fuzzyDate, format, locale) {
|
45
|
-
if (!this.
|
49
|
+
if (!__classPrivateFieldGet(this, _SkyFuzzyDateService_instances, "m", _SkyFuzzyDateService_isFuzzyDateValid).call(this, fuzzyDate)) {
|
46
50
|
return '';
|
47
51
|
}
|
48
52
|
if (!format) {
|
49
53
|
return '';
|
50
54
|
}
|
51
|
-
const separator = this.
|
55
|
+
const separator = __classPrivateFieldGet(this, _SkyFuzzyDateService_instances, "m", _SkyFuzzyDateService_getDateSeparator).call(this, format);
|
52
56
|
const dateParts = [];
|
53
|
-
const formatTokens =
|
54
|
-
|
57
|
+
const formatTokens = separator
|
58
|
+
? format.split(separator)
|
59
|
+
: [format];
|
60
|
+
locale = locale || __classPrivateFieldGet(this, _SkyFuzzyDateService_currentLocale, "f");
|
55
61
|
const fuzzyDateMoment = this.getMomentFromFuzzyDate(fuzzyDate).locale(locale);
|
56
62
|
for (let index = 0; index < formatTokens.length; index++) {
|
57
63
|
const token = formatTokens[index];
|
@@ -86,8 +92,8 @@ export class SkyFuzzyDateService {
|
|
86
92
|
if (!fuzzyDate) {
|
87
93
|
return;
|
88
94
|
}
|
89
|
-
const year = fuzzyDate.year || this.
|
90
|
-
const month = fuzzyDate.month > 0 ? fuzzyDate.month - 1 : 0;
|
95
|
+
const year = fuzzyDate.year || __classPrivateFieldGet(this, _SkyFuzzyDateService_instances, "m", _SkyFuzzyDateService_getDefaultYear).call(this, fuzzyDate);
|
96
|
+
const month = fuzzyDate.month && fuzzyDate.month > 0 ? fuzzyDate.month - 1 : 0;
|
91
97
|
const day = fuzzyDate.day || 1;
|
92
98
|
return moment([year, month, day]);
|
93
99
|
}
|
@@ -99,8 +105,8 @@ export class SkyFuzzyDateService {
|
|
99
105
|
if (!fuzzyDate || !dateFormat) {
|
100
106
|
return;
|
101
107
|
}
|
102
|
-
const separator = this.
|
103
|
-
const dateFormatIndexes = this.
|
108
|
+
const separator = __classPrivateFieldGet(this, _SkyFuzzyDateService_instances, "m", _SkyFuzzyDateService_getDateSeparator).call(this, dateFormat);
|
109
|
+
const dateFormatIndexes = __classPrivateFieldGet(this, _SkyFuzzyDateService_instances, "m", _SkyFuzzyDateService_getDateFormatIndexes).call(this, dateFormat);
|
104
110
|
let dateString = '';
|
105
111
|
// Get the components of the date in the order expected of the local format.
|
106
112
|
const dateComponents = [
|
@@ -124,7 +130,7 @@ export class SkyFuzzyDateService {
|
|
124
130
|
return;
|
125
131
|
}
|
126
132
|
const fuzzyDate = {};
|
127
|
-
const dateFormatIndexes = this.
|
133
|
+
const dateFormatIndexes = __classPrivateFieldGet(this, _SkyFuzzyDateService_instances, "m", _SkyFuzzyDateService_getDateFormatIndexes).call(this, dateFormat);
|
128
134
|
if (dateFormatIndexes.yearIndex > -1) {
|
129
135
|
fuzzyDate.year = selectedDate.getFullYear();
|
130
136
|
}
|
@@ -143,8 +149,8 @@ export class SkyFuzzyDateService {
|
|
143
149
|
let day;
|
144
150
|
let month;
|
145
151
|
let year;
|
146
|
-
const dateComponents = this.
|
147
|
-
const indexes = this.
|
152
|
+
const dateComponents = __classPrivateFieldGet(this, _SkyFuzzyDateService_instances, "m", _SkyFuzzyDateService_getDateComponents).call(this, date);
|
153
|
+
const indexes = __classPrivateFieldGet(this, _SkyFuzzyDateService_instances, "m", _SkyFuzzyDateService_getDateValueIndexes).call(this, date, dateFormat);
|
148
154
|
// Look at the date string's component count:
|
149
155
|
// 3 indicates a full date
|
150
156
|
// 2 indicates a month-year or month-day date
|
@@ -159,7 +165,7 @@ export class SkyFuzzyDateService {
|
|
159
165
|
case 2:
|
160
166
|
// First, check for a 4-digit year. If year exists, then we assume the other component
|
161
167
|
// is the month. Otherwise, we can assume the input is mm/dd or mm/yy (2-digit year).
|
162
|
-
year = this.
|
168
|
+
year = __classPrivateFieldGet(this, _SkyFuzzyDateService_instances, "m", _SkyFuzzyDateService_get4DigitYearFromDateString).call(this, date);
|
163
169
|
if (year) {
|
164
170
|
month =
|
165
171
|
dateComponents[0] === year.toString()
|
@@ -199,7 +205,7 @@ export class SkyFuzzyDateService {
|
|
199
205
|
}
|
200
206
|
if (month) {
|
201
207
|
// Check if month is valid.
|
202
|
-
month = this.
|
208
|
+
month = __classPrivateFieldGet(this, _SkyFuzzyDateService_instances, "m", _SkyFuzzyDateService_getMonthNumber).call(this, month);
|
203
209
|
if (month === undefined) {
|
204
210
|
return;
|
205
211
|
}
|
@@ -264,133 +270,118 @@ export class SkyFuzzyDateService {
|
|
264
270
|
year: currentDate.year(),
|
265
271
|
};
|
266
272
|
}
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
return leapYear;
|
273
|
-
}
|
274
|
-
/**
|
275
|
-
* Returns the first separator found in the provided date format string.
|
276
|
-
* Accepted separators: ['/', '.', '-', ' '].
|
277
|
-
* @param dateFormat
|
278
|
-
*/
|
279
|
-
getDateSeparator(dateFormat) {
|
280
|
-
let returnValue;
|
281
|
-
const separators = ['/', '.', '-', ' '];
|
282
|
-
separators.forEach((separator) => {
|
283
|
-
if (!returnValue && dateFormat.indexOf(separator) > 0) {
|
284
|
-
returnValue = separator;
|
285
|
-
}
|
286
|
-
});
|
287
|
-
return returnValue;
|
273
|
+
}
|
274
|
+
_SkyFuzzyDateService_currentLocale = new WeakMap(), _SkyFuzzyDateService_ngUnsubscribe = new WeakMap(), _SkyFuzzyDateService_instances = new WeakSet(), _SkyFuzzyDateService_getMostRecentLeapYear = function _SkyFuzzyDateService_getMostRecentLeapYear() {
|
275
|
+
let leapYear = new Date().getFullYear();
|
276
|
+
while (!__classPrivateFieldGet(this, _SkyFuzzyDateService_instances, "m", _SkyFuzzyDateService_isLeapYear).call(this, leapYear)) {
|
277
|
+
leapYear -= 1;
|
288
278
|
}
|
289
|
-
|
290
|
-
|
291
|
-
|
279
|
+
return leapYear;
|
280
|
+
}, _SkyFuzzyDateService_getDateSeparator = function _SkyFuzzyDateService_getDateSeparator(dateFormat) {
|
281
|
+
let returnValue;
|
282
|
+
const separators = ['/', '.', '-', ' '];
|
283
|
+
separators.forEach((separator) => {
|
284
|
+
if (!returnValue && dateFormat.indexOf(separator) > 0) {
|
285
|
+
returnValue = separator;
|
286
|
+
}
|
287
|
+
});
|
288
|
+
return returnValue;
|
289
|
+
}, _SkyFuzzyDateService_get4DigitYearFromDateString = function _SkyFuzzyDateService_get4DigitYearFromDateString(date) {
|
290
|
+
let year;
|
291
|
+
const separator = __classPrivateFieldGet(this, _SkyFuzzyDateService_instances, "m", _SkyFuzzyDateService_getDateSeparator).call(this, date);
|
292
|
+
if (separator) {
|
292
293
|
// Find the number value in the string that is 4 digits long.
|
293
294
|
date.split(separator).forEach((dateComponent) => {
|
294
295
|
if (!year && parseInt(dateComponent, 10).toString().length === 4) {
|
295
296
|
year = dateComponent;
|
296
297
|
}
|
297
298
|
});
|
298
|
-
if (year && !isNaN(Number(year))) {
|
299
|
-
return parseInt(year, 10);
|
300
|
-
}
|
301
299
|
}
|
302
|
-
|
303
|
-
return (year
|
300
|
+
if (year && !isNaN(Number(year))) {
|
301
|
+
return parseInt(year, 10);
|
304
302
|
}
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
}
|
315
|
-
else {
|
316
|
-
returnValue = monthAsNumber;
|
317
|
-
}
|
318
|
-
// Ensure that the month is between 1 and 12
|
319
|
-
if (!(1 <= returnValue && returnValue <= 12)) {
|
303
|
+
return undefined;
|
304
|
+
}, _SkyFuzzyDateService_isLeapYear = function _SkyFuzzyDateService_isLeapYear(year) {
|
305
|
+
return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
|
306
|
+
}, _SkyFuzzyDateService_getMonthNumber = function _SkyFuzzyDateService_getMonthNumber(month) {
|
307
|
+
let returnValue;
|
308
|
+
const monthAsNumber = parseInt(month, 10);
|
309
|
+
// If the month component is a string ("Janaury"), we check to see if it is a valid month
|
310
|
+
if (isNaN(monthAsNumber)) {
|
311
|
+
if (!moment(month, 'MMMM').isValid()) {
|
320
312
|
return;
|
321
313
|
}
|
322
|
-
|
314
|
+
returnValue = parseInt(moment().month(month).format('M'), 10);
|
323
315
|
}
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
return new Date().getFullYear();
|
331
|
-
}
|
316
|
+
else {
|
317
|
+
returnValue = monthAsNumber;
|
318
|
+
}
|
319
|
+
// Ensure that the month is between 1 and 12
|
320
|
+
if (!(1 <= returnValue && returnValue <= 12)) {
|
321
|
+
return;
|
332
322
|
}
|
333
|
-
|
334
|
-
|
323
|
+
return returnValue;
|
324
|
+
}, _SkyFuzzyDateService_getDefaultYear = function _SkyFuzzyDateService_getDefaultYear(fuzzyDate) {
|
325
|
+
// Check if we need to return a leap year or the current year.
|
326
|
+
if (fuzzyDate.month === 2 && fuzzyDate.day === 29) {
|
327
|
+
return __classPrivateFieldGet(this, _SkyFuzzyDateService_instances, "m", _SkyFuzzyDateService_getMostRecentLeapYear).call(this);
|
328
|
+
}
|
329
|
+
else {
|
330
|
+
return new Date().getFullYear();
|
331
|
+
}
|
332
|
+
}, _SkyFuzzyDateService_getDateComponents = function _SkyFuzzyDateService_getDateComponents(date) {
|
333
|
+
const separator = __classPrivateFieldGet(this, _SkyFuzzyDateService_instances, "m", _SkyFuzzyDateService_getDateSeparator).call(this, date);
|
334
|
+
if (separator) {
|
335
335
|
return date.split(separator);
|
336
336
|
}
|
337
|
-
|
338
|
-
|
339
|
-
dateFormat = dateFormat.toLowerCase();
|
340
|
-
return {
|
341
|
-
yearIndex: dateFormat.indexOf('y'),
|
342
|
-
monthIndex: dateFormat.indexOf('m'),
|
343
|
-
dayIndex: dateFormat.indexOf('d'),
|
344
|
-
};
|
337
|
+
else {
|
338
|
+
return [date];
|
345
339
|
}
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
}
|
359
|
-
dateComponentIndexes.sort(function (a, b) {
|
360
|
-
return a - b;
|
361
|
-
});
|
362
|
-
return {
|
363
|
-
yearIndex: dateComponentIndexes.indexOf(dateFormatIndexes.yearIndex),
|
364
|
-
monthIndex: dateComponentIndexes.indexOf(dateFormatIndexes.monthIndex),
|
365
|
-
dayIndex: dateComponentIndexes.indexOf(dateFormatIndexes.dayIndex),
|
366
|
-
};
|
340
|
+
}, _SkyFuzzyDateService_getDateFormatIndexes = function _SkyFuzzyDateService_getDateFormatIndexes(dateFormat) {
|
341
|
+
dateFormat = dateFormat.toLowerCase();
|
342
|
+
return {
|
343
|
+
yearIndex: dateFormat.indexOf('y'),
|
344
|
+
monthIndex: dateFormat.indexOf('m'),
|
345
|
+
dayIndex: dateFormat.indexOf('d'),
|
346
|
+
};
|
347
|
+
}, _SkyFuzzyDateService_getDateValueIndexes = function _SkyFuzzyDateService_getDateValueIndexes(date, dateFormat) {
|
348
|
+
const dateFormatIndexes = __classPrivateFieldGet(this, _SkyFuzzyDateService_instances, "m", _SkyFuzzyDateService_getDateFormatIndexes).call(this, dateFormat);
|
349
|
+
const dateComponentIndexes = [];
|
350
|
+
if (dateFormatIndexes.yearIndex > -1) {
|
351
|
+
dateComponentIndexes.push(dateFormatIndexes.yearIndex);
|
367
352
|
}
|
368
|
-
|
369
|
-
|
370
|
-
* month, day, year
|
371
|
-
* month, year
|
372
|
-
* month, day
|
373
|
-
* year only
|
374
|
-
*/
|
375
|
-
isFuzzyDateValid(fuzzyDate) {
|
376
|
-
if (!fuzzyDate) {
|
377
|
-
return false;
|
378
|
-
}
|
379
|
-
// If none of the dates part are specified, return false.
|
380
|
-
if (!fuzzyDate.day && !fuzzyDate.month && !fuzzyDate.year) {
|
381
|
-
return false;
|
382
|
-
}
|
383
|
-
// If only month is specified, return false.
|
384
|
-
if (!fuzzyDate.day && fuzzyDate.month && !fuzzyDate.year) {
|
385
|
-
return false;
|
386
|
-
}
|
387
|
-
// If only day is specified, return false.
|
388
|
-
if (fuzzyDate.day && !fuzzyDate.month && !fuzzyDate.year) {
|
389
|
-
return false;
|
390
|
-
}
|
391
|
-
return true;
|
353
|
+
if (dateFormatIndexes.monthIndex > -1) {
|
354
|
+
dateComponentIndexes.push(dateFormatIndexes.monthIndex);
|
392
355
|
}
|
393
|
-
|
356
|
+
if (dateFormatIndexes.dayIndex > -1) {
|
357
|
+
dateComponentIndexes.push(dateFormatIndexes.dayIndex);
|
358
|
+
}
|
359
|
+
dateComponentIndexes.sort(function (a, b) {
|
360
|
+
return a - b;
|
361
|
+
});
|
362
|
+
return {
|
363
|
+
yearIndex: dateComponentIndexes.indexOf(dateFormatIndexes.yearIndex),
|
364
|
+
monthIndex: dateComponentIndexes.indexOf(dateFormatIndexes.monthIndex),
|
365
|
+
dayIndex: dateComponentIndexes.indexOf(dateFormatIndexes.dayIndex),
|
366
|
+
};
|
367
|
+
}, _SkyFuzzyDateService_isFuzzyDateValid = function _SkyFuzzyDateService_isFuzzyDateValid(fuzzyDate) {
|
368
|
+
if (!fuzzyDate) {
|
369
|
+
return false;
|
370
|
+
}
|
371
|
+
// If none of the dates part are specified, return false.
|
372
|
+
if (!fuzzyDate.day && !fuzzyDate.month && !fuzzyDate.year) {
|
373
|
+
return false;
|
374
|
+
}
|
375
|
+
// If only month is specified, return false.
|
376
|
+
if (!fuzzyDate.day && fuzzyDate.month && !fuzzyDate.year) {
|
377
|
+
return false;
|
378
|
+
}
|
379
|
+
// If only day is specified, return false.
|
380
|
+
if (fuzzyDate.day && !fuzzyDate.month && !fuzzyDate.year) {
|
381
|
+
return false;
|
382
|
+
}
|
383
|
+
return true;
|
384
|
+
};
|
394
385
|
SkyFuzzyDateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: SkyFuzzyDateService, deps: [{ token: i1.SkyAppLocaleProvider }], target: i0.ɵɵFactoryTarget.Injectable });
|
395
386
|
SkyFuzzyDateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: SkyFuzzyDateService, providedIn: 'root' });
|
396
387
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: SkyFuzzyDateService, decorators: [{
|
@@ -399,4 +390,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImpor
|
|
399
390
|
providedIn: 'root',
|
400
391
|
}]
|
401
392
|
}], ctorParameters: function () { return [{ type: i1.SkyAppLocaleProvider }]; } });
|
402
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnV6enktZGF0ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2RhdGV0aW1lL3NyYy9saWIvbW9kdWxlcy9kYXRlcGlja2VyL2Z1enp5LWRhdGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVuRCxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQXVCM0M7O0dBRUc7QUFJSCxNQUFNLE9BQU8sbUJBQW1CO0lBSzlCLFlBQW9CLGNBQW9DO1FBQXBDLG1CQUFjLEdBQWQsY0FBYyxDQUFzQjtRQUZoRCxrQkFBYSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFHMUMsSUFBSSxDQUFDLGNBQWM7YUFDaEIsYUFBYSxFQUFFO2FBQ2YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDbkMsU0FBUyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDeEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELDBCQUEwQjtJQUNuQixXQUFXO1FBQ2hCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxnQkFBZ0I7UUFDckIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFRDs7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QW1CO29IQUFuQixtQkFBbUIsY0FGbEIsTUFBTTsyRkFFUCxtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTa3lBcHBMb2NhbGVQcm92aWRlciB9IGZyb20gJ0Bza3l1eC9pMThuJztcblxuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBTa3lGdXp6eURhdGUgfSBmcm9tICcuL2Z1enp5LWRhdGUnO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5pbnRlcmZhY2UgU2t5RGF0ZUluZGV4ZXMge1xuICB5ZWFySW5kZXg6IG51bWJlcjtcbiAgbW9udGhJbmRleDogbnVtYmVyO1xuICBkYXlJbmRleDogbnVtYmVyO1xufVxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5pbnRlcmZhY2UgU2t5RnV6enlEYXRlUmFuZ2Uge1xuICB5ZWFyczogc3RyaW5nO1xuICBtb250aHM6IHN0cmluZztcbiAgZGF5czogc3RyaW5nO1xuICB2YWxpZDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFNreUZ1enp5RGF0ZVNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIGN1cnJlbnRMb2NhbGU6IHN0cmluZztcblxuICBwcml2YXRlIG5nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbG9jYWxlUHJvdmlkZXI6IFNreUFwcExvY2FsZVByb3ZpZGVyKSB7XG4gICAgdGhpcy5sb2NhbGVQcm92aWRlclxuICAgICAgLmdldExvY2FsZUluZm8oKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKChsb2NhbGVJbmZvKSA9PiB7XG4gICAgICAgIHRoaXMuY3VycmVudExvY2FsZSA9IGxvY2FsZUluZm8ubG9jYWxlO1xuICAgICAgfSk7XG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBicm93c2VyJ3MgY3VycmVudCBsb2NhbGUgc3RyaW5nLlxuICAgKi9cbiAgcHVibGljIGdldEN1cnJlbnRMb2NhbGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50TG9jYWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHNob3J0IGZvcm1hdCBvZiB0aGUgcHJvdmlkZWQgbG9jYWxlLlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIHRoZSBsb2NhbGUgd2lsbCBiZSB0YWtlbiBmcm9tIHRoZSBicm93c2VyJ3MgZGVmYXVsdCBsb2NhbGUuXG4gICAqL1xuICBwdWJsaWMgZ2V0TG9jYWxlU2hvcnRGb3JtYXQobG9jYWxlPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbW9tZW50LmxvY2FsZURhdGEobG9jYWxlIHx8IHRoaXMuY3VycmVudExvY2FsZSkubG9uZ0RhdGVGb3JtYXQoJ0wnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXRzIGEgZnV6enkgZGF0ZSBieSB1c2luZyB0aGUgcHJvdmlkZWQgZm9ybWF0IGFuZCBsb2NhbGUgc3RyaW5ncy5cbiAgICogSWYgbm90IHByb3ZpZGVkLCB0aGUgbG9jYWxlIHdpbGwgYmUgdGFrZW4gZnJvbSB0aGUgYnJvd3NlcidzIGRlZmF1bHQgbG9jYWxlLlxuICAgKi9cbiAgcHVibGljIGZvcm1hdChcbiAgICBmdXp6eURhdGU6IFNreUZ1enp5RGF0ZSxcbiAgICBmb3JtYXQ6IHN0cmluZyxcbiAgICBsb2NhbGU/OiBzdHJpbmdcbiAgKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuaXNGdXp6eURhdGVWYWxpZChmdXp6eURhdGUpKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgaWYgKCFmb3JtYXQpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCBzZXBhcmF0b3IgPSB0aGlzLmdldERhdGVTZXBhcmF0b3IoZm9ybWF0KTtcbiAgICBjb25zdCBkYXRlUGFydHM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgZm9ybWF0VG9rZW5zOiBzdHJpbmdbXSA9IGZvcm1hdC5zcGxpdChzZXBhcmF0b3IpO1xuICAgIGxvY2FsZSA9IGxvY2FsZSB8fCB0aGlzLmN1cnJlbnRMb2NhbGU7XG4gICAgY29uc3QgZnV6enlEYXRlTW9tZW50ID1cbiAgICAgIHRoaXMuZ2V0TW9tZW50RnJvbUZ1enp5RGF0ZShmdXp6eURhdGUpLmxvY2FsZShsb2NhbGUpO1xuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGZvcm1hdFRva2Vucy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGNvbnN0IHRva2VuID0gZm9ybWF0VG9rZW5zW2luZGV4XTtcblxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmICh0b2tlbikge1xuICAgICAgICBzd2l0Y2ggKHRva2VuLnN1YnN0cigwLCAxKS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgY2FzZSAneSc6XG4gICAgICAgICAgICBpZiAoZnV6enlEYXRlLnllYXIpIHtcbiAgICAgICAgICAgICAgZGF0ZVBhcnRzLnB1c2goZnV6enlEYXRlTW9tZW50LmZvcm1hdCh0b2tlbikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnbSc6XG4gICAgICAgICAgICBpZiAoZnV6enlEYXRlLm1vbnRoKSB7XG4gICAgICAgICAgICAgIGRhdGVQYXJ0cy5wdXNoKGZ1enp5RGF0ZU1vbWVudC5mb3JtYXQodG9rZW4pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgaWYgKGZ1enp5RGF0ZS5kYXkpIHtcbiAgICAgICAgICAgICAgZGF0ZVBhcnRzLnB1c2goZnV6enlEYXRlTW9tZW50LmZvcm1hdCh0b2tlbikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGF0ZVBhcnRzLmpvaW4oc2VwYXJhdG9yKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIHllYXJzIHdpbGwgZGVmYXVsdCB0byBjdXJyZW50IHllYXI7IG1vbnRocyB3aWxsIGRlZmF1bHQgdG8gSmFudWFyeTtcbiAgICogZGF5cyB3aWxsIGRlZmF1bHQgdG8gMXN0IG9mIHRoZSBtb250aC5cbiAgICovXG4gIHB1YmxpYyBnZXRNb21lbnRGcm9tRnV6enlEYXRlKGZ1enp5RGF0ZTogU2t5RnV6enlEYXRlKTogYW55IHtcbiAgICBpZiAoIWZ1enp5RGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHllYXIgPSBmdXp6eURhdGUueWVhciB8fCB0aGlzLmdldERlZmF1bHRZZWFyKGZ1enp5RGF0ZSk7XG4gICAgY29uc3QgbW9udGggPSBmdXp6eURhdGUubW9udGggPiAwID8gZnV6enlEYXRlLm1vbnRoIC0gMSA6IDA7XG4gICAgY29uc3QgZGF5ID0gZnV6enlEYXRlLmRheSB8fCAxO1xuXG4gICAgcmV0dXJuIG1vbWVudChbeWVhciwgbW9udGgsIGRheV0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYSBzdHJpbmcgaW5zdGFuY2Ugb2YgYSBmdXp6eSBkYXRlLlxuICAgKiBAZGVwcmVjYXRlZCBEZXByZWNhdGVkIGluIGZhdm9yIG9mIHRoZSBgZm9ybWF0YCBmdW5jdGlvbi5cbiAgICovXG4gIHB1YmxpYyBnZXRTdHJpbmdGcm9tRnV6enlEYXRlKFxuICAgIGZ1enp5RGF0ZTogU2t5RnV6enlEYXRlLFxuICAgIGRhdGVGb3JtYXQ6IHN0cmluZ1xuICApOiBzdHJpbmcge1xuICAgIGlmICghZnV6enlEYXRlIHx8ICFkYXRlRm9ybWF0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2VwYXJhdG9yID0gdGhpcy5nZXREYXRlU2VwYXJhdG9yKGRhdGVGb3JtYXQpO1xuICAgIGNvbnN0IGRhdGVGb3JtYXRJbmRleGVzID0gdGhpcy5nZXREYXRlRm9ybWF0SW5kZXhlcyhkYXRlRm9ybWF0KTtcbiAgICBsZXQgZGF0ZVN0cmluZyA9ICcnO1xuXG4gICAgLy8gR2V0IHRoZSBjb21wb25lbnRzIG9mIHRoZSBkYXRlIGluIHRoZSBvcmRlciBleHBlY3RlZCBvZiB0aGUgbG9jYWwgZm9ybWF0LlxuICAgIGNvbnN0IGRhdGVDb21wb25lbnRzID0gW1xuICAgICAgeyB2YWx1ZTogZnV6enlEYXRlLnllYXIgfHwgMCwgaW5kZXg6IGRhdGVGb3JtYXRJbmRleGVzLnllYXJJbmRleCB9LFxuICAgICAgeyB2YWx1ZTogZnV6enlEYXRlLm1vbnRoIHx8IDAsIGluZGV4OiBkYXRlRm9ybWF0SW5kZXhlcy5tb250aEluZGV4IH0sXG4gICAgICB7IHZhbHVlOiBmdXp6eURhdGUuZGF5IHx8IDAsIGluZGV4OiBkYXRlRm9ybWF0SW5kZXhlcy5kYXlJbmRleCB9LFxuICAgIF07XG4gICAgZGF0ZUNvbXBvbmVudHMuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IGEuaW5kZXggLSBiLmluZGV4KTtcblxuICAgIGRhdGVDb21wb25lbnRzLmZvckVhY2goKGNvbXBvbmVudCkgPT4ge1xuICAgICAgaWYgKGNvbXBvbmVudC52YWx1ZSA+IDAgJiYgY29tcG9uZW50LmluZGV4ID4gLTEpIHtcbiAgICAgICAgaWYgKGRhdGVTdHJpbmcpIHtcbiAgICAgICAgICBkYXRlU3RyaW5nICs9IHNlcGFyYXRvcjtcbiAgICAgICAgfVxuICAgICAgICBkYXRlU3RyaW5nICs9IGNvbXBvbmVudC52YWx1ZS50b1N0cmluZygpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRhdGVTdHJpbmcudHJpbSgpO1xuICB9XG5cbiAgcHVibGljIGdldEZ1enp5RGF0ZUZyb21TZWxlY3RlZERhdGUoXG4gICAgc2VsZWN0ZWREYXRlOiBEYXRlLFxuICAgIGRhdGVGb3JtYXQ6IHN0cmluZ1xuICApOiBTa3lGdXp6eURhdGUge1xuICAgIGlmICghc2VsZWN0ZWREYXRlIHx8ICFkYXRlRm9ybWF0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZnV6enlEYXRlOiBTa3lGdXp6eURhdGUgPSB7fTtcbiAgICBjb25zdCBkYXRlRm9ybWF0SW5kZXhlcyA9IHRoaXMuZ2V0RGF0ZUZvcm1hdEluZGV4ZXMoZGF0ZUZvcm1hdCk7XG5cbiAgICBpZiAoZGF0ZUZvcm1hdEluZGV4ZXMueWVhckluZGV4ID4gLTEpIHtcbiAgICAgIGZ1enp5RGF0ZS55ZWFyID0gc2VsZWN0ZWREYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGVGb3JtYXRJbmRleGVzLmRheUluZGV4ID4gLTEpIHtcbiAgICAgIGZ1enp5RGF0ZS5kYXkgPSBzZWxlY3RlZERhdGUuZ2V0RGF0ZSgpO1xuICAgIH1cblxuICAgIGlmIChkYXRlRm9ybWF0SW5kZXhlcy5tb250aEluZGV4ID4gLTEpIHtcbiAgICAgIGZ1enp5RGF0ZS5tb250aCA9IHNlbGVjdGVkRGF0ZS5nZXRNb250aCgpICsgMTsgLy8gZ2V0TW9udGgoKSBpcyAwLWluZGV4ZWQuXG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1enp5RGF0ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRGdXp6eURhdGVGcm9tU3RyaW5nKFxuICAgIGRhdGU6IHN0cmluZyxcbiAgICBkYXRlRm9ybWF0OiBzdHJpbmdcbiAgKTogU2t5RnV6enlEYXRlIHtcbiAgICBpZiAoIWRhdGUgfHwgIWRhdGVGb3JtYXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgZGF5OiBhbnk7XG4gICAgbGV0IG1vbnRoOiBhbnk7XG4gICAgbGV0IHllYXI6IGFueTtcblxuICAgIGNvbnN0IGRhdGVDb21wb25lbnRzID0gdGhpcy5nZXREYXRlQ29tcG9uZW50cyhkYXRlKTtcbiAgICBjb25zdCBpbmRleGVzID0gdGhpcy5nZXREYXRlVmFsdWVJbmRleGVzKGRhdGUsIGRhdGVGb3JtYXQpO1xuXG4gICAgLy8gTG9vayBhdCB0aGUgZGF0ZSBzdHJpbmcncyBjb21wb25lbnQgY291bnQ6XG4gICAgLy8gMyBpbmRpY2F0ZXMgYSBmdWxsIGRhdGVcbiAgICAvLyAyIGluZGljYXRlcyBhIG1vbnRoLXllYXIgb3IgbW9udGgtZGF5IGRhdGVcbiAgICAvLyAxIGluZGljYXRlcyBhIHllYXJcbiAgICAvLyBPdGhlciBpbmRpY2F0ZXMgYSBwcm9ibGVtXG4gICAgc3dpdGNoIChkYXRlQ29tcG9uZW50cy5sZW5ndGgpIHtcbiAgICAgIGNhc2UgMzpcbiAgICAgICAgeWVhciA9IGRhdGVDb21wb25lbnRzW2luZGV4ZXMueWVhckluZGV4XTtcbiAgICAgICAgbW9udGggPSBkYXRlQ29tcG9uZW50c1tpbmRleGVzLm1vbnRoSW5kZXhdO1xuICAgICAgICBkYXkgPSBkYXRlQ29tcG9uZW50c1tpbmRleGVzLmRheUluZGV4XTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIC8vIEZpcnN0LCBjaGVjayBmb3IgYSA0LWRpZ2l0IHllYXIuIElmIHllYXIgZXhpc3RzLCB0aGVuIHdlIGFzc3VtZSB0aGUgb3RoZXIgY29tcG9uZW50XG4gICAgICAgIC8vIGlzIHRoZSBtb250aC4gT3RoZXJ3aXNlLCB3ZSBjYW4gYXNzdW1lIHRoZSBpbnB1dCBpcyBtbS9kZCBvciBtbS95eSAoMi1kaWdpdCB5ZWFyKS5cbiAgICAgICAgeWVhciA9IHRoaXMuZ2V0NERpZ2l0WWVhckZyb21EYXRlU3RyaW5nKGRhdGUpO1xuICAgICAgICBpZiAoeWVhcikge1xuICAgICAgICAgIG1vbnRoID1cbiAgICAgICAgICAgIGRhdGVDb21wb25lbnRzWzBdID09PSB5ZWFyLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgPyBkYXRlQ29tcG9uZW50c1sxXVxuICAgICAgICAgICAgICA6IGRhdGVDb21wb25lbnRzWzBdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChpbmRleGVzLmRheUluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIC8vIG1tL2RkXG4gICAgICAgICAgICBtb250aCA9XG4gICAgICAgICAgICAgIGluZGV4ZXMubW9udGhJbmRleCA8IGluZGV4ZXMuZGF5SW5kZXhcbiAgICAgICAgICAgICAgICA/IGRhdGVDb21wb25lbnRzWzBdXG4gICAgICAgICAgICAgICAgOiBkYXRlQ29tcG9uZW50c1sxXTtcbiAgICAgICAgICAgIGRheSA9XG4gICAgICAgICAgICAgIG1vbnRoID09PSBkYXRlQ29tcG9uZW50c1sxXVxuICAgICAgICAgICAgICAgID8gZGF0ZUNvbXBvbmVudHNbMF1cbiAgICAgICAgICAgICAgICA6IGRhdGVDb21wb25lbnRzWzFdO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBtbS95eVxuICAgICAgICAgICAgbW9udGggPVxuICAgICAgICAgICAgICBpbmRleGVzLm1vbnRoSW5kZXggPCBpbmRleGVzLnllYXJJbmRleFxuICAgICAgICAgICAgICAgID8gZGF0ZUNvbXBvbmVudHNbMF1cbiAgICAgICAgICAgICAgICA6IGRhdGVDb21wb25lbnRzWzFdO1xuICAgICAgICAgICAgeWVhciA9XG4gICAgICAgICAgICAgIG1vbnRoID09PSBkYXRlQ29tcG9uZW50c1sxXVxuICAgICAgICAgICAgICAgID8gZGF0ZUNvbXBvbmVudHNbMF1cbiAgICAgICAgICAgICAgICA6IGRhdGVDb21wb25lbnRzWzFdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgeWVhciA9IGRhdGU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChtb250aCkge1xuICAgICAgLy8gQ2hlY2sgaWYgbW9udGggaXMgdmFsaWQuXG4gICAgICBtb250aCA9IHRoaXMuZ2V0TW9udGhOdW1iZXIobW9udGgpO1xuICAgICAgaWYgKG1vbnRoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBpZiBkYXkgaXMgdmFsaWQuXG4gICAgICBpZiAoZGF5KSB7XG4gICAgICAgIGRheSA9IHBhcnNlSW50KGRheSwgMTApO1xuICAgICAgICBjb25zdCBmdXp6eU1vbWVudCA9IHRoaXMuZ2V0TW9tZW50RnJvbUZ1enp5RGF0ZSh7XG4gICAgICAgICAgbW9udGg6IG1vbnRoLFxuICAgICAgICAgIGRheTogZGF5LFxuICAgICAgICAgIHllYXI6IHllYXIsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoaXNOYU4oZGF5KSB8fCAhZnV6enlNb21lbnQuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHllYXIpIHtcbiAgICAgIHllYXIgPVxuICAgICAgICB5ZWFyLnRvU3RyaW5nKCkubGVuZ3RoID09PSAyXG4gICAgICAgICAgPyBtb21lbnQucGFyc2VUd29EaWdpdFllYXIoeWVhcilcbiAgICAgICAgICA6IHBhcnNlSW50KHllYXIudG9TdHJpbmcoKSwgMTApO1xuICAgICAgaWYgKGlzTmFOKHllYXIpIHx8IHllYXIudG9TdHJpbmcoKS5sZW5ndGggIT09IDQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBtb250aDogbW9udGgsXG4gICAgICBkYXk6IGRheSxcbiAgICAgIHllYXI6IHllYXIsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRGdXp6eURhdGVSYW5nZShcbiAgICBzdGFydEZ1enp5RGF0ZTogU2t5RnV6enlEYXRlLFxuICAgIGVuZEZ1enp5RGF0ZTogU2t5RnV6enlEYXRlXG4gICk6IFNreUZ1enp5RGF0ZVJhbmdlIHtcbiAgICBsZXQgc3RhcnQ7XG4gICAgbGV0IGVuZDtcbiAgICBsZXQgZGF5cztcbiAgICBsZXQgbW9udGhzO1xuICAgIGxldCB5ZWFycztcbiAgICBsZXQgdmFsaWQgPSBmYWxzZTtcblxuICAgIGlmIChcbiAgICAgIHN0YXJ0RnV6enlEYXRlICYmXG4gICAgICBzdGFydEZ1enp5RGF0ZS55ZWFyICYmXG4gICAgICBlbmRGdXp6eURhdGUgJiZcbiAgICAgIGVuZEZ1enp5RGF0ZS55ZWFyXG4gICAgKSB7XG4gICAgICBzdGFydCA9IHRoaXMuZ2V0TW9tZW50RnJvbUZ1enp5RGF0ZShzdGFydEZ1enp5RGF0ZSk7XG4gICAgICBlbmQgPSB0aGlzLmdldE1vbWVudEZyb21GdXp6eURhdGUoZW5kRnV6enlEYXRlKTtcblxuICAgICAgeWVhcnMgPSBlbmQuZGlmZihzdGFydCwgJ3llYXJzJyk7XG4gICAgICBtb250aHMgPSBlbmQuZGlmZihzdGFydCwgJ21vbnRocycpO1xuICAgICAgZGF5cyA9IGVuZC5kaWZmKHN0YXJ0LCAnZGF5cycpO1xuICAgICAgdmFsaWQgPSBlbmQuZGlmZihzdGFydCkgPj0gMDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgeWVhcnM6IHllYXJzLFxuICAgICAgbW9udGhzOiBtb250aHMsXG4gICAgICBkYXlzOiBkYXlzLFxuICAgICAgdmFsaWQ6IHZhbGlkLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgZ2V0Q3VycmVudEZ1enp5RGF0ZSgpOiBTa3lGdXp6eURhdGUge1xuICAgIGNvbnN0IGN1cnJlbnREYXRlID0gbW9tZW50KCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGF5OiBjdXJyZW50RGF0ZS5kYXRlKCksXG4gICAgICBtb250aDogY3VycmVudERhdGUubW9udGgoKSArIDEsIC8vIG1vbnRoKCkgaXMgMC1pbmRleGVkLlxuICAgICAgeWVhcjogY3VycmVudERhdGUueWVhcigpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldE1vc3RSZWNlbnRMZWFwWWVhcigpOiBudW1iZXIge1xuICAgIGxldCBsZWFwWWVhciA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcblxuICAgIHdoaWxlICghdGhpcy5pc0xlYXBZZWFyKGxlYXBZZWFyKSkge1xuICAgICAgbGVhcFllYXIgLT0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGVhcFllYXI7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZmlyc3Qgc2VwYXJhdG9yIGZvdW5kIGluIHRoZSBwcm92aWRlZCBkYXRlIGZvcm1hdCBzdHJpbmcuXG4gICAqIEFjY2VwdGVkIHNlcGFyYXRvcnM6IFsnLycsICcuJywgJy0nLCAnICddLlxuICAgKiBAcGFyYW0gZGF0ZUZvcm1hdFxuICAgKi9cbiAgcHJpdmF0ZSBnZXREYXRlU2VwYXJhdG9yKGRhdGVGb3JtYXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IHJldHVyblZhbHVlOiBzdHJpbmc7XG4gICAgY29uc3Qgc2VwYXJhdG9ycyA9IFsnLycsICcuJywgJy0nLCAnICddO1xuXG4gICAgc2VwYXJhdG9ycy5mb3JFYWNoKChzZXBhcmF0b3IpID0+IHtcbiAgICAgIGlmICghcmV0dXJuVmFsdWUgJiYgZGF0ZUZvcm1hdC5pbmRleE9mKHNlcGFyYXRvcikgPiAwKSB7XG4gICAgICAgIHJldHVyblZhbHVlID0gc2VwYXJhdG9yO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQ0RGlnaXRZZWFyRnJvbURhdGVTdHJpbmcoZGF0ZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBsZXQgeWVhcjogc3RyaW5nO1xuICAgIGNvbnN0IHNlcGFyYXRvciA9IHRoaXMuZ2V0RGF0ZVNlcGFyYXRvcihkYXRlKTtcblxuICAgIC8vIEZpbmQgdGhlIG51bWJlciB2YWx1ZSBpbiB0aGUgc3RyaW5nIHRoYXQgaXMgNCBkaWdpdHMgbG9uZy5cbiAgICBkYXRlLnNwbGl0KHNlcGFyYXRvcikuZm9yRWFjaCgoZGF0ZUNvbXBvbmVudCkgPT4ge1xuICAgICAgaWYgKCF5ZWFyICYmIHBhcnNlSW50KGRhdGVDb21wb25lbnQsIDEwKS50b1N0cmluZygpLmxlbmd0aCA9PT0gNCkge1xuICAgICAgICB5ZWFyID0gZGF0ZUNvbXBvbmVudDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICh5ZWFyICYmICFpc05hTihOdW1iZXIoeWVhcikpKSB7XG4gICAgICByZXR1cm4gcGFyc2VJbnQoeWVhciwgMTApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNMZWFwWWVhcih5ZWFyOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHllYXIgJSA0ID09PSAwICYmIHllYXIgJSAxMDAgIT09IDApIHx8IHllYXIgJSA0MDAgPT09IDA7XG4gIH1cblxuICBwcml2YXRlIGdldE1vbnRoTnVtYmVyKG1vbnRoOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGxldCByZXR1cm5WYWx1ZTogbnVtYmVyO1xuICAgIGNvbnN0IG1vbnRoQXNOdW1iZXIgPSBwYXJzZUludChtb250aCwgMTApO1xuXG4gICAgLy8gSWYgdGhlIG1vbnRoIGNvbXBvbmVudCBpcyBhIHN0cmluZyAoXCJKYW5hdXJ5XCIpLCB3ZSBjaGVjayB0byBzZWUgaWYgaXQgaXMgYSB2YWxpZCBtb250aFxuICAgIGlmIChpc05hTihtb250aEFzTnVtYmVyKSkge1xuICAgICAgaWYgKCFtb21lbnQobW9udGgsICdNTU1NJykuaXNWYWxpZCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHJldHVyblZhbHVlID0gcGFyc2VJbnQobW9tZW50KCkubW9udGgobW9udGgpLmZvcm1hdCgnTScpLCAxMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVyblZhbHVlID0gbW9udGhBc051bWJlcjtcbiAgICB9XG5cbiAgICAvLyBFbnN1cmUgdGhhdCB0aGUgbW9udGggaXMgYmV0d2VlbiAxIGFuZCAxMlxuICAgIGlmICghKDEgPD0gcmV0dXJuVmFsdWUgJiYgcmV0dXJuVmFsdWUgPD0gMTIpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZWZhdWx0WWVhcihmdXp6eURhdGU6IFNreUZ1enp5RGF0ZSk6IG51bWJlciB7XG4gICAgLy8gQ2hlY2sgaWYgd2UgbmVlZCB0byByZXR1cm4gYSBsZWFwIHllYXIgb3IgdGhlIGN1cnJlbnQgeWVhci5cbiAgICBpZiAoZnV6enlEYXRlLm1vbnRoID09PSAyICYmIGZ1enp5RGF0ZS5kYXkgPT09IDI5KSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRNb3N0UmVjZW50TGVhcFllYXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldERhdGVDb21wb25lbnRzKGRhdGU6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBzZXBhcmF0b3IgPSB0aGlzLmdldERhdGVTZXBhcmF0b3IoZGF0ZSk7XG4gICAgcmV0dXJuIGRhdGUuc3BsaXQoc2VwYXJhdG9yKTtcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIG9yZGVyIG9mIHllYXIsIG1vbnRoLCBhbmQgZGF5IGZyb20gdGhlIHByb3ZpZGVkIGRhdGUgZm9ybWF0LlxuICBwcml2YXRlIGdldERhdGVGb3JtYXRJbmRleGVzKGRhdGVGb3JtYXQ6IHN0cmluZyk6IFNreURhdGVJbmRleGVzIHtcbiAgICBkYXRlRm9ybWF0ID0gZGF0ZUZvcm1hdC50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiB7XG4gICAgICB5ZWFySW5kZXg6IGRhdGVGb3JtYXQuaW5kZXhPZigneScpLFxuICAgICAgbW9udGhJbmRleDogZGF0ZUZvcm1hdC5pbmRleE9mKCdtJyksXG4gICAgICBkYXlJbmRleDogZGF0ZUZvcm1hdC5pbmRleE9mKCdkJyksXG4gICAgfTtcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIGluZGV4IG9mIGVhY2ggb2YgdGhlIGRhdGUgY29tcG9uZW50cyBpbiB0aGUgcHJvdmlkZWQgc3RyaW5nIChtb250aCwgZGF5LCB5ZWFyKS5cbiAgcHJpdmF0ZSBnZXREYXRlVmFsdWVJbmRleGVzKFxuICAgIGRhdGU6IHN0cmluZyxcbiAgICBkYXRlRm9ybWF0OiBzdHJpbmdcbiAgKTogU2t5RGF0ZUluZGV4ZXMge1xuICAgIGNvbnN0IGRhdGVGb3JtYXRJbmRleGVzID0gdGhpcy5nZXREYXRlRm9ybWF0SW5kZXhlcyhkYXRlRm9ybWF0KTtcbiAgICBjb25zdCBkYXRlQ29tcG9uZW50SW5kZXhlcyA9IFtdO1xuICAgIGlmIChkYXRlRm9ybWF0SW5kZXhlcy55ZWFySW5kZXggPiAtMSkge1xuICAgICAgZGF0ZUNvbXBvbmVudEluZGV4ZXMucHVzaChkYXRlRm9ybWF0SW5kZXhlcy55ZWFySW5kZXgpO1xuICAgIH1cblxuICAgIGlmIChkYXRlRm9ybWF0SW5kZXhlcy5tb250aEluZGV4ID4gLTEpIHtcbiAgICAgIGRhdGVDb21wb25lbnRJbmRleGVzLnB1c2goZGF0ZUZvcm1hdEluZGV4ZXMubW9udGhJbmRleCk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGVGb3JtYXRJbmRleGVzLmRheUluZGV4ID4gLTEpIHtcbiAgICAgIGRhdGVDb21wb25lbnRJbmRleGVzLnB1c2goZGF0ZUZvcm1hdEluZGV4ZXMuZGF5SW5kZXgpO1xuICAgIH1cblxuICAgIGRhdGVDb21wb25lbnRJbmRleGVzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIHJldHVybiBhIC0gYjtcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICB5ZWFySW5kZXg6IGRhdGVDb21wb25lbnRJbmRleGVzLmluZGV4T2YoZGF0ZUZvcm1hdEluZGV4ZXMueWVhckluZGV4KSxcbiAgICAgIG1vbnRoSW5kZXg6IGRhdGVDb21wb25lbnRJbmRleGVzLmluZGV4T2YoZGF0ZUZvcm1hdEluZGV4ZXMubW9udGhJbmRleCksXG4gICAgICBkYXlJbmRleDogZGF0ZUNvbXBvbmVudEluZGV4ZXMuaW5kZXhPZihkYXRlRm9ybWF0SW5kZXhlcy5kYXlJbmRleCksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIHByb3ZpZGVkIFNreUZ1enp5RGF0ZSBvYmplY3QuIFZhbGlkIGZ1enp5IGRhdGVzIGFyZSBhcyBmb2xsb3dzOlxuICAgKiBtb250aCwgZGF5LCB5ZWFyXG4gICAqIG1vbnRoLCB5ZWFyXG4gICAqIG1vbnRoLCBkYXlcbiAgICogeWVhciBvbmx5XG4gICAqL1xuICBwcml2YXRlIGlzRnV6enlEYXRlVmFsaWQoZnV6enlEYXRlOiBTa3lGdXp6eURhdGUpOiBib29sZWFuIHtcbiAgICBpZiAoIWZ1enp5RGF0ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIElmIG5vbmUgb2YgdGhlIGRhdGVzIHBhcnQgYXJlIHNwZWNpZmllZCwgcmV0dXJuIGZhbHNlLlxuICAgIGlmICghZnV6enlEYXRlLmRheSAmJiAhZnV6enlEYXRlLm1vbnRoICYmICFmdXp6eURhdGUueWVhcikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIElmIG9ubHkgbW9udGggaXMgc3BlY2lmaWVkLCByZXR1cm4gZmFsc2UuXG4gICAgaWYgKCFmdXp6eURhdGUuZGF5ICYmIGZ1enp5RGF0ZS5tb250aCAmJiAhZnV6enlEYXRlLnllYXIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBJZiBvbmx5IGRheSBpcyBzcGVjaWZpZWQsIHJldHVybiBmYWxzZS5cbiAgICBpZiAoZnV6enlEYXRlLmRheSAmJiAhZnV6enlEYXRlLm1vbnRoICYmICFmdXp6eURhdGUueWVhcikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG4iXX0=
|
393
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnV6enktZGF0ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2RhdGV0aW1lL3NyYy9saWIvbW9kdWxlcy9kYXRlcGlja2VyL2Z1enp5LWRhdGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRW5ELE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBdUIzQzs7R0FFRztBQUlILE1BQU0sT0FBTyxtQkFBbUI7SUFLOUIsWUFBWSxjQUFvQzs7UUFKaEQscURBQXVCO1FBRXZCLDZDQUFpQixJQUFJLE9BQU8sRUFBUSxFQUFDO1FBR25DLHVCQUFBLElBQUksc0NBQWtCLGNBQWMsQ0FBQyxhQUFhLE1BQUEsQ0FBQztRQUNuRCxjQUFjO2FBQ1gsYUFBYSxFQUFFO2FBQ2YsSUFBSSxDQUFDLFNBQVMsQ0FBQyx1QkFBQSxJQUFJLDBDQUFlLENBQUMsQ0FBQzthQUNwQyxTQUFTLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUN4Qix1QkFBQSxJQUFJLHNDQUFrQixVQUFVLENBQUMsTUFBTSxNQUFBLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsMEJBQTBCO0lBQ25CLFdBQVc7UUFDaEIsdUJBQUEsSUFBSSwwQ0FBZSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzNCLHVCQUFBLElBQUksMENBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxnQkFBZ0I7UUFDckIsT0FBTyx1QkFBQSxJ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QyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxTQUFTLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtRQUN4RCxPQUFPLEtBQUssQ0FBQztLQUNkO0lBRUQsMENBQTBDO0lBQzFDLElBQUksU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO1FBQ3hELE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7Z0hBemRVLG1CQUFtQjtvSEFBbkIsbUJBQW1CLGNBRmxCLE1BQU07MkZBRVAsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2t5QXBwTG9jYWxlUHJvdmlkZXIgfSBmcm9tICdAc2t5dXgvaTE4bic7XG5cbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgU2t5RnV6enlEYXRlIH0gZnJvbSAnLi9mdXp6eS1kYXRlJztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuaW50ZXJmYWNlIFNreURhdGVJbmRleGVzIHtcbiAgeWVhckluZGV4OiBudW1iZXI7XG4gIG1vbnRoSW5kZXg6IG51bWJlcjtcbiAgZGF5SW5kZXg6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuaW50ZXJmYWNlIFNreUZ1enp5RGF0ZVJhbmdlIHtcbiAgeWVhcnM6IHN0cmluZztcbiAgbW9udGhzOiBzdHJpbmc7XG4gIGRheXM6IHN0cmluZztcbiAgdmFsaWQ6IGJvb2xlYW47XG59XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lGdXp6eURhdGVTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgI2N1cnJlbnRMb2NhbGU6IHN0cmluZztcblxuICAjbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IobG9jYWxlUHJvdmlkZXI6IFNreUFwcExvY2FsZVByb3ZpZGVyKSB7XG4gICAgdGhpcy4jY3VycmVudExvY2FsZSA9IGxvY2FsZVByb3ZpZGVyLmRlZmF1bHRMb2NhbGU7XG4gICAgbG9jYWxlUHJvdmlkZXJcbiAgICAgIC5nZXRMb2NhbGVJbmZvKClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGxvY2FsZUluZm8pID0+IHtcbiAgICAgICAgdGhpcy4jY3VycmVudExvY2FsZSA9IGxvY2FsZUluZm8ubG9jYWxlO1xuICAgICAgfSk7XG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGJyb3dzZXIncyBjdXJyZW50IGxvY2FsZSBzdHJpbmcuXG4gICAqL1xuICBwdWJsaWMgZ2V0Q3VycmVudExvY2FsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLiNjdXJyZW50TG9jYWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHNob3J0IGZvcm1hdCBvZiB0aGUgcHJvdmlkZWQgbG9jYWxlLlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIHRoZSBsb2NhbGUgd2lsbCBiZSB0YWtlbiBmcm9tIHRoZSBicm93c2VyJ3MgZGVmYXVsdCBsb2NhbGUuXG4gICAqL1xuICBwdWJsaWMgZ2V0TG9jYWxlU2hvcnRGb3JtYXQobG9jYWxlPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbW9tZW50LmxvY2FsZURhdGEobG9jYWxlIHx8IHRoaXMuI2N1cnJlbnRMb2NhbGUpLmxvbmdEYXRlRm9ybWF0KCdMJyk7XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0cyBhIGZ1enp5IGRhdGUgYnkgdXNpbmcgdGhlIHByb3ZpZGVkIGZvcm1hdCBhbmQgbG9jYWxlIHN0cmluZ3MuXG4gICAqIElmIG5vdCBwcm92aWRlZCwgdGhlIGxvY2FsZSB3aWxsIGJlIHRha2VuIGZyb20gdGhlIGJyb3dzZXIncyBkZWZhdWx0IGxvY2FsZS5cbiAgICovXG4gIHB1YmxpYyBmb3JtYXQoXG4gICAgZnV6enlEYXRlOiBTa3lGdXp6eURhdGUsXG4gICAgZm9ybWF0Pzogc3RyaW5nLFxuICAgIGxvY2FsZT86IHN0cmluZ1xuICApOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy4jaXNGdXp6eURhdGVWYWxpZChmdXp6eURhdGUpKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgaWYgKCFmb3JtYXQpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCBzZXBhcmF0b3IgPSB0aGlzLiNnZXREYXRlU2VwYXJhdG9yKGZvcm1hdCk7XG4gICAgY29uc3QgZGF0ZVBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IGZvcm1hdFRva2Vuczogc3RyaW5nW10gPSBzZXBhcmF0b3JcbiAgICAgID8gZm9ybWF0LnNwbGl0KHNlcGFyYXRvcilcbiAgICAgIDogW2Zvcm1hdF07XG4gICAgbG9jYWxlID0gbG9jYWxlIHx8IHRoaXMuI2N1cnJlbnRMb2NhbGU7XG4gICAgY29uc3QgZnV6enlEYXRlTW9tZW50ID1cbiAgICAgIHRoaXMuZ2V0TW9tZW50RnJvbUZ1enp5RGF0ZShmdXp6eURhdGUpLmxvY2FsZShsb2NhbGUpO1xuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGZvcm1hdFRva2Vucy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGNvbnN0IHRva2VuID0gZm9ybWF0VG9rZW5zW2luZGV4XTtcblxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmICh0b2tlbikge1xuICAgICAgICBzd2l0Y2ggKHRva2VuLnN1YnN0cigwLCAxKS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgY2FzZSAneSc6XG4gICAgICAgICAgICBpZiAoZnV6enlEYXRlLnllYXIpIHtcbiAgICAgICAgICAgICAgZGF0ZVBhcnRzLnB1c2goZnV6enlEYXRlTW9tZW50LmZvcm1hdCh0b2tlbikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnbSc6XG4gICAgICAgICAgICBpZiAoZnV6enlEYXRlLm1vbnRoKSB7XG4gICAgICAgICAgICAgIGRhdGVQYXJ0cy5wdXNoKGZ1enp5RGF0ZU1vbWVudC5mb3JtYXQodG9rZW4pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgaWYgKGZ1enp5RGF0ZS5kYXkpIHtcbiAgICAgICAgICAgICAgZGF0ZVBhcnRzLnB1c2goZnV6enlEYXRlTW9tZW50LmZvcm1hdCh0b2tlbikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGF0ZVBhcnRzLmpvaW4oc2VwYXJhdG9yKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIHllYXJzIHdpbGwgZGVmYXVsdCB0byBjdXJyZW50IHllYXI7IG1vbnRocyB3aWxsIGRlZmF1bHQgdG8gSmFudWFyeTtcbiAgICogZGF5cyB3aWxsIGRlZmF1bHQgdG8gMXN0IG9mIHRoZSBtb250aC5cbiAgICovXG4gIHB1YmxpYyBnZXRNb21lbnRGcm9tRnV6enlEYXRlKGZ1enp5RGF0ZT86IFNreUZ1enp5RGF0ZSk6IGFueSB7XG4gICAgaWYgKCFmdXp6eURhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB5ZWFyID0gZnV6enlEYXRlLnllYXIgfHwgdGhpcy4jZ2V0RGVmYXVsdFllYXIoZnV6enlEYXRlKTtcbiAgICBjb25zdCBtb250aCA9XG4gICAgICBmdXp6eURhdGUubW9udGggJiYgZnV6enlEYXRlLm1vbnRoID4gMCA/IGZ1enp5RGF0ZS5tb250aCAtIDEgOiAwO1xuICAgIGNvbnN0IGRheSA9IGZ1enp5RGF0ZS5kYXkgfHwgMTtcblxuICAgIHJldHVybiBtb21lbnQoW3llYXIsIG1vbnRoLCBkYXldKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGEgc3RyaW5nIGluc3RhbmNlIG9mIGEgZnV6enkgZGF0ZS5cbiAgICogQGRlcHJlY2F0ZWQgRGVwcmVjYXRlZCBpbiBmYXZvciBvZiB0aGUgYGZvcm1hdGAgZnVuY3Rpb24uXG4gICAqL1xuICBwdWJsaWMgZ2V0U3RyaW5nRnJvbUZ1enp5RGF0ZShcbiAgICBmdXp6eURhdGU/OiBTa3lGdXp6eURhdGUsXG4gICAgZGF0ZUZvcm1hdD86IHN0cmluZ1xuICApOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICghZnV6enlEYXRlIHx8ICFkYXRlRm9ybWF0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2VwYXJhdG9yID0gdGhpcy4jZ2V0RGF0ZVNlcGFyYXRvcihkYXRlRm9ybWF0KTtcbiAgICBjb25zdCBkYXRlRm9ybWF0SW5kZXhlcyA9IHRoaXMuI2dldERhdGVGb3JtYXRJbmRleGVzKGRhdGVGb3JtYXQpO1xuICAgIGxldCBkYXRlU3RyaW5nID0gJyc7XG5cbiAgICAvLyBHZXQgdGhlIGNvbXBvbmVudHMgb2YgdGhlIGRhdGUgaW4gdGhlIG9yZGVyIGV4cGVjdGVkIG9mIHRoZSBsb2NhbCBmb3JtYXQuXG4gICAgY29uc3QgZGF0ZUNvbXBvbmVudHMgPSBbXG4gICAgICB7IHZhbHVlOiBmdXp6eURhdGUueWVhciB8fCAwLCBpbmRleDogZGF0ZUZvcm1hdEluZGV4ZXMueWVhckluZGV4IH0sXG4gICAgICB7IHZhbHVlOiBmdXp6eURhdGUubW9udGggfHwgMCwgaW5kZXg6IGRhdGVGb3JtYXRJbmRleGVzLm1vbnRoSW5kZXggfSxcbiAgICAgIHsgdmFsdWU6IGZ1enp5RGF0ZS5kYXkgfHwgMCwgaW5kZXg6IGRhdGVGb3JtYXRJbmRleGVzLmRheUluZGV4IH0sXG4gICAgXTtcbiAgICBkYXRlQ29tcG9uZW50cy5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4gYS5pbmRleCAtIGIuaW5kZXgpO1xuXG4gICAgZGF0ZUNvbXBvbmVudHMuZm9yRWFjaCgoY29tcG9uZW50KSA9PiB7XG4gICAgICBpZiAoY29tcG9uZW50LnZhbHVlID4gMCAmJiBjb21wb25lbnQuaW5kZXggPiAtMSkge1xuICAgICAgICBpZiAoZGF0ZVN0cmluZykge1xuICAgICAgICAgIGRhdGVTdHJpbmcgKz0gc2VwYXJhdG9yO1xuICAgICAgICB9XG4gICAgICAgIGRhdGVTdHJpbmcgKz0gY29tcG9uZW50LnZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGF0ZVN0cmluZy50cmltKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RnV6enlEYXRlRnJvbVNlbGVjdGVkRGF0ZShcbiAgICBzZWxlY3RlZERhdGU/OiBEYXRlLFxuICAgIGRhdGVGb3JtYXQ/OiBzdHJpbmdcbiAgKTogU2t5RnV6enlEYXRlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXNlbGVjdGVkRGF0ZSB8fCAhZGF0ZUZvcm1hdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZ1enp5RGF0ZTogU2t5RnV6enlEYXRlID0ge307XG4gICAgY29uc3QgZGF0ZUZvcm1hdEluZGV4ZXMgPSB0aGlzLiNnZXREYXRlRm9ybWF0SW5kZXhlcyhkYXRlRm9ybWF0KTtcblxuICAgIGlmIChkYXRlRm9ybWF0SW5kZXhlcy55ZWFySW5kZXggPiAtMSkge1xuICAgICAgZnV6enlEYXRlLnllYXIgPSBzZWxlY3RlZERhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICB9XG5cbiAgICBpZiAoZGF0ZUZvcm1hdEluZGV4ZXMuZGF5SW5kZXggPiAtMSkge1xuICAgICAgZnV6enlEYXRlLmRheSA9IHNlbGVjdGVkRGF0ZS5nZXREYXRlKCk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGVGb3JtYXRJbmRleGVzLm1vbnRoSW5kZXggPiAtMSkge1xuICAgICAgZnV6enlEYXRlLm1vbnRoID0gc2VsZWN0ZWREYXRlLmdldE1vbnRoKCkgKyAxOyAvLyBnZXRNb250aCgpIGlzIDAtaW5kZXhlZC5cbiAgICB9XG5cbiAgICByZXR1cm4gZnV6enlEYXRlO1xuICB9XG5cbiAgcHVibGljIGdldEZ1enp5RGF0ZUZyb21TdHJpbmcoXG4gICAgZGF0ZTogc3RyaW5nLFxuICAgIGRhdGVGb3JtYXQ/OiBzdHJpbmdcbiAgKTogU2t5RnV6enlEYXRlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIWRhdGUgfHwgIWRhdGVGb3JtYXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgZGF5OiBhbnk7XG4gICAgbGV0IG1vbnRoOiBhbnk7XG4gICAgbGV0IHllYXI6IGFueTtcblxuICAgIGNvbnN0IGRhdGVDb21wb25lbnRzID0gdGhpcy4jZ2V0RGF0ZUNvbXBvbmVudHMoZGF0ZSk7XG4gICAgY29uc3QgaW5kZXhlcyA9IHRoaXMuI2dldERhdGVWYWx1ZUluZGV4ZXMoZGF0ZSwgZGF0ZUZvcm1hdCk7XG5cbiAgICAvLyBMb29rIGF0IHRoZSBkYXRlIHN0cmluZydzIGNvbXBvbmVudCBjb3VudDpcbiAgICAvLyAzIGluZGljYXRlcyBhIGZ1bGwgZGF0ZVxuICAgIC8vIDIgaW5kaWNhdGVzIGEgbW9udGgteWVhciBvciBtb250aC1kYXkgZGF0ZVxuICAgIC8vIDEgaW5kaWNhdGVzIGEgeWVhclxuICAgIC8vIE90aGVyIGluZGljYXRlcyBhIHByb2JsZW1cbiAgICBzd2l0Y2ggKGRhdGVDb21wb25lbnRzLmxlbmd0aCkge1xuICAgICAgY2FzZSAzOlxuICAgICAgICB5ZWFyID0gZGF0ZUNvbXBvbmVudHNbaW5kZXhlcy55ZWFySW5kZXhdO1xuICAgICAgICBtb250aCA9IGRhdGVDb21wb25lbnRzW2luZGV4ZXMubW9udGhJbmRleF07XG4gICAgICAgIGRheSA9IGRhdGVDb21wb25lbnRzW2luZGV4ZXMuZGF5SW5kZXhdO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgLy8gRmlyc3QsIGNoZWNrIGZvciBhIDQtZGlnaXQgeWVhci4gSWYgeWVhciBleGlzdHMsIHRoZW4gd2UgYXNzdW1lIHRoZSBvdGhlciBjb21wb25lbnRcbiAgICAgICAgLy8gaXMgdGhlIG1vbnRoLiBPdGhlcndpc2UsIHdlIGNhbiBhc3N1bWUgdGhlIGlucHV0IGlzIG1tL2RkIG9yIG1tL3l5ICgyLWRpZ2l0IHllYXIpLlxuICAgICAgICB5ZWFyID0gdGhpcy4jZ2V0NERpZ2l0WWVhckZyb21EYXRlU3RyaW5nKGRhdGUpO1xuICAgICAgICBpZiAoeWVhcikge1xuICAgICAgICAgIG1vbnRoID1cbiAgICAgICAgICAgIGRhdGVDb21wb25lbnRzWzBdID09PSB5ZWFyLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgPyBkYXRlQ29tcG9uZW50c1sxXVxuICAgICAgICAgICAgICA6IGRhdGVDb21wb25lbnRzWzBdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChpbmRleGVzLmRheUluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIC8vIG1tL2RkXG4gICAgICAgICAgICBtb250aCA9XG4gICAgICAgICAgICAgIGluZGV4ZXMubW9udGhJbmRleCA8IGluZGV4ZXMuZGF5SW5kZXhcbiAgICAgICAgICAgICAgICA/IGRhdGVDb21wb25lbnRzWzBdXG4gICAgICAgICAgICAgICAgOiBkYXRlQ29tcG9uZW50c1sxXTtcbiAgICAgICAgICAgIGRheSA9XG4gICAgICAgICAgICAgIG1vbnRoID09PSBkYXRlQ29tcG9uZW50c1sxXVxuICAgICAgICAgICAgICAgID8gZGF0ZUNvbXBvbmVudHNbMF1cbiAgICAgICAgICAgICAgICA6IGRhdGVDb21wb25lbnRzWzFdO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBtbS95eVxuICAgICAgICAgICAgbW9udGggPVxuICAgICAgICAgICAgICBpbmRleGVzLm1vbnRoSW5kZXggPCBpbmRleGVzLnllYXJJbmRleFxuICAgICAgICAgICAgICAgID8gZGF0ZUNvbXBvbmVudHNbMF1cbiAgICAgICAgICAgICAgICA6IGRhdGVDb21wb25lbnRzWzFdO1xuICAgICAgICAgICAgeWVhciA9XG4gICAgICAgICAgICAgIG1vbnRoID09PSBkYXRlQ29tcG9uZW50c1sxXVxuICAgICAgICAgICAgICAgID8gZGF0ZUNvbXBvbmVudHNbMF1cbiAgICAgICAgICAgICAgICA6IGRhdGVDb21wb25lbnRzWzFdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgeWVhciA9IGRhdGU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChtb250aCkge1xuICAgICAgLy8gQ2hlY2sgaWYgbW9udGggaXMgdmFsaWQuXG4gICAgICBtb250aCA9IHRoaXMuI2dldE1vbnRoTnVtYmVyKG1vbnRoKTtcbiAgICAgIGlmIChtb250aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgaWYgZGF5IGlzIHZhbGlkLlxuICAgICAgaWYgKGRheSkge1xuICAgICAgICBkYXkgPSBwYXJzZUludChkYXksIDEwKTtcbiAgICAgICAgY29uc3QgZnV6enlNb21lbnQgPSB0aGlzLmdldE1vbWVudEZyb21GdXp6eURhdGUoe1xuICAgICAgICAgIG1vbnRoOiBtb250aCxcbiAgICAgICAgICBkYXk6IGRheSxcbiAgICAgICAgICB5ZWFyOiB5ZWFyLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGlzTmFOKGRheSkgfHwgIWZ1enp5TW9tZW50LmlzVmFsaWQoKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh5ZWFyKSB7XG4gICAgICB5ZWFyID1cbiAgICAgICAgeWVhci50b1N0cmluZygpLmxlbmd0aCA9PT0gMlxuICAgICAgICAgID8gbW9tZW50LnBhcnNlVHdvRGlnaXRZZWFyKHllYXIpXG4gICAgICAgICAgOiBwYXJzZUludCh5ZWFyLnRvU3RyaW5nKCksIDEwKTtcbiAgICAgIGlmIChpc05hTih5ZWFyKSB8fCB5ZWFyLnRvU3RyaW5nKCkubGVuZ3RoICE9PSA0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbW9udGg6IG1vbnRoLFxuICAgICAgZGF5OiBkYXksXG4gICAgICB5ZWFyOiB5ZWFyLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgZ2V0RnV6enlEYXRlUmFuZ2UoXG4gICAgc3RhcnRGdXp6eURhdGU6IFNreUZ1enp5RGF0ZSxcbiAgICBlbmRGdXp6eURhdGU6IFNreUZ1enp5RGF0ZVxuICApOiBTa3lGdXp6eURhdGVSYW5nZSB7XG4gICAgbGV0IHN0YXJ0O1xuICAgIGxldCBlbmQ7XG4gICAgbGV0IGRheXM7XG4gICAgbGV0IG1vbnRocztcbiAgICBsZXQgeWVhcnM7XG4gICAgbGV0IHZhbGlkID0gZmFsc2U7XG5cbiAgICBpZiAoXG4gICAgICBzdGFydEZ1enp5RGF0ZSAmJlxuICAgICAgc3RhcnRGdXp6eURhdGUueWVhciAmJlxuICAgICAgZW5kRnV6enlEYXRlICYmXG4gICAgICBlbmRGdXp6eURhdGUueWVhclxuICAgICkge1xuICAgICAgc3RhcnQgPSB0aGlzLmdldE1vbWVudEZyb21GdXp6eURhdGUoc3RhcnRGdXp6eURhdGUpO1xuICAgICAgZW5kID0gdGhpcy5nZXRNb21lbnRGcm9tRnV6enlEYXRlKGVuZEZ1enp5RGF0ZSk7XG5cbiAgICAgIHllYXJzID0gZW5kLmRpZmYoc3RhcnQsICd5ZWFycycpO1xuICAgICAgbW9udGhzID0gZW5kLmRpZmYoc3RhcnQsICdtb250aHMnKTtcbiAgICAgIGRheXMgPSBlbmQuZGlmZihzdGFydCwgJ2RheXMnKTtcbiAgICAgIHZhbGlkID0gZW5kLmRpZmYoc3RhcnQpID49IDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHllYXJzOiB5ZWFycyxcbiAgICAgIG1vbnRoczogbW9udGhzLFxuICAgICAgZGF5czogZGF5cyxcbiAgICAgIHZhbGlkOiB2YWxpZCxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGdldEN1cnJlbnRGdXp6eURhdGUoKTogU2t5RnV6enlEYXRlIHtcbiAgICBjb25zdCBjdXJyZW50RGF0ZSA9IG1vbWVudCgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRheTogY3VycmVudERhdGUuZGF0ZSgpLFxuICAgICAgbW9udGg6IGN1cnJlbnREYXRlLm1vbnRoKCkgKyAxLCAvLyBtb250aCgpIGlzIDAtaW5kZXhlZC5cbiAgICAgIHllYXI6IGN1cnJlbnREYXRlLnllYXIoKSxcbiAgICB9O1xuICB9XG5cbiAgI2dldE1vc3RSZWNlbnRMZWFwWWVhcigpOiBudW1iZXIge1xuICAgIGxldCBsZWFwWWVhciA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcblxuICAgIHdoaWxlICghdGhpcy4jaXNMZWFwWWVhcihsZWFwWWVhcikpIHtcbiAgICAgIGxlYXBZZWFyIC09IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxlYXBZZWFyO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGZpcnN0IHNlcGFyYXRvciBmb3VuZCBpbiB0aGUgcHJvdmlkZWQgZGF0ZSBmb3JtYXQgc3RyaW5nLlxuICAgKiBBY2NlcHRlZCBzZXBhcmF0b3JzOiBbJy8nLCAnLicsICctJywgJyAnXS5cbiAgICogQHBhcmFtIGRhdGVGb3JtYXRcbiAgICovXG4gICNnZXREYXRlU2VwYXJhdG9yKGRhdGVGb3JtYXQ6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IHJldHVyblZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgY29uc3Qgc2VwYXJhdG9ycyA9IFsnLycsICcuJywgJy0nLCAnICddO1xuXG4gICAgc2VwYXJhdG9ycy5mb3JFYWNoKChzZXBhcmF0b3IpID0+IHtcbiAgICAgIGlmICghcmV0dXJuVmFsdWUgJiYgZGF0ZUZvcm1hdC5pbmRleE9mKHNlcGFyYXRvcikgPiAwKSB7XG4gICAgICAgIHJldHVyblZhbHVlID0gc2VwYXJhdG9yO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICB9XG5cbiAgI2dldDREaWdpdFllYXJGcm9tRGF0ZVN0cmluZyhkYXRlOiBzdHJpbmcpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIGxldCB5ZWFyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgY29uc3Qgc2VwYXJhdG9yID0gdGhpcy4jZ2V0RGF0ZVNlcGFyYXRvcihkYXRlKTtcblxuICAgIGlmIChzZXBhcmF0b3IpIHtcbiAgICAgIC8vIEZpbmQgdGhlIG51bWJlciB2YWx1ZSBpbiB0aGUgc3RyaW5nIHRoYXQgaXMgNCBkaWdpdHMgbG9uZy5cbiAgICAgIGRhdGUuc3BsaXQoc2VwYXJhdG9yKS5mb3JFYWNoKChkYXRlQ29tcG9uZW50KSA9PiB7XG4gICAgICAgIGlmICgheWVhciAmJiBwYXJzZUludChkYXRlQ29tcG9uZW50LCAxMCkudG9TdHJpbmcoKS5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgICB5ZWFyID0gZGF0ZUNvbXBvbmVudDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHllYXIgJiYgIWlzTmFOKE51bWJlcih5ZWFyKSkpIHtcbiAgICAgIHJldHVybiBwYXJzZUludCh5ZWFyLCAxMCk7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAjaXNMZWFwWWVhcih5ZWFyOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHllYXIgJSA0ID09PSAwICYmIHllYXIgJSAxMDAgIT09IDApIHx8IHllYXIgJSA0MDAgPT09IDA7XG4gIH1cblxuICAjZ2V0TW9udGhOdW1iZXIobW9udGg6IHN0cmluZyk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IHJldHVyblZhbHVlOiBudW1iZXI7XG4gICAgY29uc3QgbW9udGhBc051bWJlciA9IHBhcnNlSW50KG1vbnRoLCAxMCk7XG5cbiAgICAvLyBJZiB0aGUgbW9udGggY29tcG9uZW50IGlzIGEgc3RyaW5nIChcIkphbmF1cnlcIiksIHdlIGNoZWNrIHRvIHNlZSBpZiBpdCBpcyBhIHZhbGlkIG1vbnRoXG4gICAgaWYgKGlzTmFOKG1vbnRoQXNOdW1iZXIpKSB7XG4gICAgICBpZiAoIW1vbWVudChtb250aCwgJ01NTU0nKS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmV0dXJuVmFsdWUgPSBwYXJzZUludChtb21lbnQoKS5tb250aChtb250aCkuZm9ybWF0KCdNJyksIDEwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuVmFsdWUgPSBtb250aEFzTnVtYmVyO1xuICAgIH1cblxuICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBtb250aCBpcyBiZXR3ZWVuIDEgYW5kIDEyXG4gICAgaWYgKCEoMSA8PSByZXR1cm5WYWx1ZSAmJiByZXR1cm5WYWx1ZSA8PSAxMikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0dXJuVmFsdWU7XG4gIH1cblxuICAjZ2V0RGVmYXVsdFllYXIoZnV6enlEYXRlOiBTa3lGdXp6eURhdGUpOiBudW1iZXIge1xuICAgIC8vIENoZWNrIGlmIHdlIG5lZWQgdG8gcmV0dXJuIGEgbGVhcCB5ZWFyIG9yIHRoZSBjdXJyZW50IHllYXIuXG4gICAgaWYgKGZ1enp5RGF0ZS5tb250aCA9PT0gMiAmJiBmdXp6eURhdGUuZGF5ID09PSAyOSkge1xuICAgICAgcmV0dXJuIHRoaXMuI2dldE1vc3RSZWNlbnRMZWFwWWVhcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpO1xuICAgIH1cbiAgfVxuXG4gICNnZXREYXRlQ29tcG9uZW50cyhkYXRlOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qgc2VwYXJhdG9yID0gdGhpcy4jZ2V0RGF0ZVNlcGFyYXRvcihkYXRlKTtcbiAgICBpZiAoc2VwYXJhdG9yKSB7XG4gICAgICByZXR1cm4gZGF0ZS5zcGxpdChzZXBhcmF0b3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW2RhdGVdO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIG9yZGVyIG9mIHllYXIsIG1vbnRoLCBhbmQgZGF5IGZyb20gdGhlIHByb3ZpZGVkIGRhdGUgZm9ybWF0LlxuICAjZ2V0RGF0ZUZvcm1hdEluZGV4ZXMoZGF0ZUZvcm1hdDogc3RyaW5nKTogU2t5RGF0ZUluZGV4ZXMge1xuICAgIGRhdGVGb3JtYXQgPSBkYXRlRm9ybWF0LnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHllYXJJbmRleDogZGF0ZUZvcm1hdC5pbmRleE9mKCd5JyksXG4gICAgICBtb250aEluZGV4OiBkYXRlRm9ybWF0LmluZGV4T2YoJ20nKSxcbiAgICAgIGRheUluZGV4OiBkYXRlRm9ybWF0LmluZGV4T2YoJ2QnKSxcbiAgICB9O1xuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgaW5kZXggb2YgZWFjaCBvZiB0aGUgZGF0ZSBjb21wb25lbnRzIGluIHRoZSBwcm92aWRlZCBzdHJpbmcgKG1vbnRoLCBkYXksIHllYXIpLlxuICAjZ2V0RGF0ZVZhbHVlSW5kZXhlcyhkYXRlOiBzdHJpbmcsIGRhdGVGb3JtYXQ6IHN0cmluZyk6IFNreURhdGVJbmRleGVzIHtcbiAgICBjb25zdCBkYXRlRm9ybWF0SW5kZXhlcyA9IHRoaXMuI2dldERhdGVGb3JtYXRJbmRleGVzKGRhdGVGb3JtYXQpO1xuICAgIGNvbnN0IGRhdGVDb21wb25lbnRJbmRleGVzID0gW107XG4gICAgaWYgKGRhdGVGb3JtYXRJbmRleGVzLnllYXJJbmRleCA+IC0xKSB7XG4gICAgICBkYXRlQ29tcG9uZW50SW5kZXhlcy5wdXNoKGRhdGVGb3JtYXRJbmRleGVzLnllYXJJbmRleCk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGVGb3JtYXRJbmRleGVzLm1vbnRoSW5kZXggPiAtMSkge1xuICAgICAgZGF0ZUNvbXBvbmVudEluZGV4ZXMucHVzaChkYXRlRm9ybWF0SW5kZXhlcy5tb250aEluZGV4KTtcbiAgICB9XG5cbiAgICBpZiAoZGF0ZUZvcm1hdEluZGV4ZXMuZGF5SW5kZXggPiAtMSkge1xuICAgICAgZGF0ZUNvbXBvbmVudEluZGV4ZXMucHVzaChkYXRlRm9ybWF0SW5kZXhlcy5kYXlJbmRleCk7XG4gICAgfVxuXG4gICAgZGF0ZUNvbXBvbmVudEluZGV4ZXMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGEgLSBiO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHllYXJJbmRleDogZGF0ZUNvbXBvbmVudEluZGV4ZXMuaW5kZXhPZihkYXRlRm9ybWF0SW5kZXhlcy55ZWFySW5kZXgpLFxuICAgICAgbW9udGhJbmRleDogZGF0ZUNvbXBvbmVudEluZGV4ZXMuaW5kZXhPZihkYXRlRm9ybWF0SW5kZXhlcy5tb250aEluZGV4KSxcbiAgICAgIGRheUluZGV4OiBkYXRlQ29tcG9uZW50SW5kZXhlcy5pbmRleE9mKGRhdGVGb3JtYXRJbmRleGVzLmRheUluZGV4KSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgcHJvdmlkZWQgU2t5RnV6enlEYXRlIG9iamVjdC4gVmFsaWQgZnV6enkgZGF0ZXMgYXJlIGFzIGZvbGxvd3M6XG4gICAqIG1vbnRoLCBkYXksIHllYXJcbiAgICogbW9udGgsIHllYXJcbiAgICogbW9udGgsIGRheVxuICAgKiB5ZWFyIG9ubHlcbiAgICovXG4gICNpc0Z1enp5RGF0ZVZhbGlkKGZ1enp5RGF0ZTogU2t5RnV6enlEYXRlKTogYm9vbGVhbiB7XG4gICAgaWYgKCFmdXp6eURhdGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBJZiBub25lIG9mIHRoZSBkYXRlcyBwYXJ0IGFyZSBzcGVjaWZpZWQsIHJldHVybiBmYWxzZS5cbiAgICBpZiAoIWZ1enp5RGF0ZS5kYXkgJiYgIWZ1enp5RGF0ZS5tb250aCAmJiAhZnV6enlEYXRlLnllYXIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBJZiBvbmx5IG1vbnRoIGlzIHNwZWNpZmllZCwgcmV0dXJuIGZhbHNlLlxuICAgIGlmICghZnV6enlEYXRlLmRheSAmJiBmdXp6eURhdGUubW9udGggJiYgIWZ1enp5RGF0ZS55ZWFyKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gSWYgb25seSBkYXkgaXMgc3BlY2lmaWVkLCByZXR1cm4gZmFsc2UuXG4gICAgaWYgKGZ1enp5RGF0ZS5kYXkgJiYgIWZ1enp5RGF0ZS5tb250aCAmJiAhZnV6enlEYXRlLnllYXIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuIl19
|