@wavemaker/app-ng-runtime 11.8.4-rc.186 → 11.8.5-next.27420

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.
@@ -39,8 +39,25 @@ let NumberLocale = class NumberLocale extends BaseInput {
39
39
  if (this.isDefaultQuery) {
40
40
  const isLocalizedNumber = isString(value) && includes(value, this.DECIMAL);
41
41
  const parts = isLocalizedNumber ? value.split(this.DECIMAL) : isString(value) && value.split('.');
42
- this.decimalValue = parts[1] || '';
43
- value = isLocalizedNumber ? value : this.transformNumber(value);
42
+ if (this.inputmode === INPUTMODE.NATURAL && !isNaN(this.decimalplaces)) {
43
+ if (this.decimalplaces === 0) {
44
+ this.decimalValue = '';
45
+ value = isLocalizedNumber ? parts[0] : this.transformNumber(value);
46
+ }
47
+ if (this.decimalplaces > 0) {
48
+ this.decimalValue = parts[1] && parts[1].substring(0, this.decimalplaces) || '';
49
+ if (isLocalizedNumber) {
50
+ value = this.decimalValue.length ? `${parts[0]}${this.DECIMAL}${this.decimalValue}` : parts[0];
51
+ }
52
+ else {
53
+ value = Number.parseFloat(String(value)).toFixed(this.decimalplaces);
54
+ }
55
+ }
56
+ }
57
+ else {
58
+ this.decimalValue = parts[1] || '';
59
+ value = isLocalizedNumber ? value : this.transformNumber(value);
60
+ }
44
61
  }
45
62
  const numberReg = /\d/;
46
63
  const strVal = value.toString();
@@ -89,8 +106,14 @@ let NumberLocale = class NumberLocale extends BaseInput {
89
106
  */
90
107
  isValid(val) {
91
108
  // id number is infinite then consider it as invalid value
92
- if (isNaN(val) || !isFinite(val) || (!Number.isInteger(this.step) &&
93
- this.countDecimals(val) > this.countDecimals(this.step))) {
109
+ let invalidDecimalPlaces = false;
110
+ if (this.inputmode === INPUTMODE.NATURAL && !isNaN(this.decimalplaces) && this.decimalplaces >= 0) {
111
+ invalidDecimalPlaces = this.countDecimals(val) > this.decimalplaces;
112
+ }
113
+ else if (!Number.isInteger(this.step) && this.countDecimals(val) > this.countDecimals(this.step)) {
114
+ invalidDecimalPlaces = true;
115
+ }
116
+ if (isNaN(val) || !isFinite(val) || invalidDecimalPlaces) {
94
117
  this.isInvalidNumber = true;
95
118
  return false;
96
119
  }
@@ -199,6 +222,9 @@ let NumberLocale = class NumberLocale extends BaseInput {
199
222
  }
200
223
  // This function returns the step length set in the studio
201
224
  stepLength() {
225
+ if (this.inputmode === 'INPUTMODE.NATURAL' && !isNaN(this.decimalplaces) && this.decimalplaces >= 0) {
226
+ return this.decimalplaces;
227
+ }
202
228
  const stepLen = this.step.toString().split('.');
203
229
  if (stepLen.length === 1) {
204
230
  return;
@@ -387,13 +413,23 @@ let NumberLocale = class NumberLocale extends BaseInput {
387
413
  }
388
414
  // validates entering of decimal values only when user provides decimal limit(i.e step contains decimal values).
389
415
  // Restrict user from entering only if the decimal limit is reached and the new digit is entered in decimal place
390
- if (!skipStepValidation && inputValue && this.countDecimals(this.step) && (this.countDecimals(inputValue) >= this.countDecimals(this.step)) && $event.target.selectionStart >= inputValue.length - 1) {
391
- return false;
392
- }
416
+ // if (!skipStepValidation && inputValue && this.countDecimals(this.step) && (this.countDecimals(inputValue) >= this.countDecimals(this.step)) && $event.target.selectionStart >= inputValue.length - 1) {
417
+ // return false;
418
+ // }
393
419
  // validates if user entered an invalid character.
394
420
  if (!validity.test($event.key)) {
395
421
  return false;
396
422
  }
423
+ if (this.inputmode === INPUTMODE.NATURAL && !isNaN(this.decimalplaces)) {
424
+ if (this.decimalplaces === 0 && this.DECIMAL === $event.key) {
425
+ return false;
426
+ }
427
+ const parts = includes(inputValue, this.DECIMAL) ? inputValue.split(this.DECIMAL) : inputValue.split('.');
428
+ const isCursorPositionAtDecimalPlace = $event.target.selectionStart > parts[0].length;
429
+ if (this.decimalplaces > 0 && this.countDecimals(inputValue) >= this.decimalplaces && isCursorPositionAtDecimalPlace) {
430
+ return false;
431
+ }
432
+ }
397
433
  // comma cannot be entered consecutively
398
434
  if (includes(inputValue, ',') && inputValue[inputValue.length - 1] === ',' && $event.key === ',') {
399
435
  return false;
@@ -449,4 +485,4 @@ NumberLocale = __decorate([
449
485
  TrailingZeroDecimalPipe, Object])
450
486
  ], NumberLocale);
451
487
  export { NumberLocale };
452
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtYmVyLWxvY2FsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9pbnB1dC9kZWZhdWx0L3NyYy90ZXh0L2xvY2FsZS9udW1iZXItbG9jYWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFekQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXRFLE9BQU8sRUFBQyxtQkFBbUIsRUFBRSxTQUFTLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDeEQsT0FBTyxFQUFpQix1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV4RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0MsT0FBTyxFQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVoRyxJQUFzQixZQUFZLEdBQWxDLE1BQXNCLFlBQWEsU0FBUSxTQUFTO0lBd0JoRCxZQUNJLEdBQWEsRUFDYixNQUFxQixFQUNiLFdBQWdDLEVBQ2hDLHVCQUFnRCxFQUNoQixlQUFvQjtRQUU1RCxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxlQUFlLENBQUMsQ0FBQztRQUo1QixnQkFBVyxHQUFYLFdBQVcsQ0FBcUI7UUFDaEMsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUF5QjtRQXJCcEQsbUJBQWMsR0FBWSxJQUFJLENBQUM7UUFDL0IsaUJBQVksR0FBVyxFQUFFLENBQUM7UUF3QjlCLElBQUksQ0FBQyxjQUFjLEdBQUcsV0FBVyxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDdEQsSUFBSSxDQUFD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Q0FBQyxjQUFjLENBQUMsUUFBUSxLQUFLLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDOUgsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7UUFDNUIsQ0FBQztJQUNMLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUc7UUFDekIsSUFBSSxHQUFHLEtBQUssVUFBVSxJQUFJLEdBQUcsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUMzQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JCLENBQUM7YUFBTSxJQUFJLEdBQUcsS0FBSyxXQUFXLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNwQyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxFQUFDLElBQUksRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFDO1lBQy9DLENBQUM7aUJBQU0sQ0FBQztnQkFDSixJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzNCLENBQUM7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNKLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7SUFDTCxDQUFDO0NBQ0osQ0FBQTtBQXhlcUIsWUFBWTtJQTZCekIsV0FBQSxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtJQUFFLFdBQUEsUUFBUSxFQUFFLENBQUE7cUNBSmxDLFFBQVEsVUFFUSxtQkFBbUI7UUFDUCx1QkFBdUI7R0E1QjFDLFlBQVksQ0F3ZWpDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3QsIEluamVjdG9yLCBPcHRpb25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGdldExvY2FsZU51bWJlclN5bWJvbCwgTnVtYmVyU3ltYm9sIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHtBYnN0cmFjdEkxOG5TZXJ2aWNlLCBpc0RlZmluZWR9IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7IElXaWRnZXRDb25maWcsIFRyYWlsaW5nWmVyb0RlY2ltYWxQaXBlLCBJTlBVVE1PREUgfSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNlJztcblxuaW1wb3J0IHsgQmFzZUlucHV0IH0gZnJvbSAnLi4vYmFzZS9iYXNlLWlucHV0JztcbmltcG9ydCB7aW5jbHVkZXMsIGludGVyc2VjdGlvbiwgaXNOdWxsLCBpc1N0cmluZywgaXNVbmRlZmluZWQsIHJvdW5kLCB0b0FycmF5fSBmcm9tIFwibG9kYXNoLWVzXCI7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBOdW1iZXJMb2NhbGUgZXh0ZW5kcyBCYXNlSW5wdXQgaW1wbGVtZW50cyBWYWxpZGF0b3Ige1xuICAgIHByaXZhdGUgREVDSU1BTDogc3RyaW5nO1xuICAgIHByaXZhdGUgR1JPVVA6IHN0cmluZztcbiAgICBwcml2YXRlIHNlbGVjdGVkTG9jYWxlOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBwcm94eU1vZGVsOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBudW1iZXJOb3RJblJhbmdlOiBib29sZWFuO1xuICAgIHByaXZhdGUgaXNJbnZhbGlkTnVtYmVyOiBib29sZWFuO1xuICAgIHByaXZhdGUgaXNEZWZhdWx0UXVlcnk6IGJvb2xlYW4gPSB0cnVlO1xuICAgIHByaXZhdGUgZGVjaW1hbFZhbHVlOiBzdHJpbmcgPSAnJztcbiAgICBwdWJsaWMgZGlzcGxheVZhbHVlOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBudW1iZXJmaWx0ZXI6IHN0cmluZztcbiAgICBwcml2YXRlIGxvY2FsZWZpbHRlcjogc3RyaW5nO1xuICAgIHB1YmxpYyByZWFkb25seTogYm9vbGVhbjtcblxuICAgIHB1YmxpYyBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICAgIHB1YmxpYyBtaW52YWx1ZTogbnVtYmVyO1xuICAgIHB1YmxpYyBtYXh2YWx1ZTogbnVtYmVyO1xuICAgIHB1YmxpYyB1cGRhdGVvbjogc3RyaW5nO1xuICAgIHB1YmxpYyBzdGVwOiBudW1iZXI7XG4gICAgcHVibGljIHRyYWlsaW5nemVybzogYm9vbGVhbjtcbiAgICBwcml2YXRlIHZhbGlkYXRlVHlwZTogc3RyaW5nO1xuICAgIHB1YmxpYyBpbnB1dG1vZGU6IHN0cmluZztcbiAgICBwcml2YXRlIGxhc3RWYWxJc0RlY2ltYWw6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgaW5qOiBJbmplY3RvcixcbiAgICAgICAgY29uZmlnOiBJV2lkZ2V0Q29uZmlnLFxuICAgICAgICBwcml2YXRlIGkxOG5TZXJ2aWNlOiBBYnN0cmFjdEkxOG5TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHRyYWlsaW5nWmVyb0RlY2ltYWxQaXBlOiBUcmFpbGluZ1plcm9EZWNpbWFsUGlwZSxcbiAgICAgICAgQEluamVjdCgnRVhQTElDSVRfQ09OVEVYVCcpIEBPcHRpb25hbCgpIGV4cGxpY2l0Q29udGV4dDogYW55XG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGluaiwgY29uZmlnLCBleHBsaWNpdENvbnRleHQpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTG9jYWxlID0gaTE4blNlcnZpY2UuZ2V0U2VsZWN0ZWRMb2NhbGUoKTtcbiAgICAgICAgdGhpcy5ERUNJTUFMID0gZ2V0TG9jYWxlTnVtYmVyU3ltYm9sKHRoaXMubG9jYWxlZmlsdGVyIHx8IHRoaXMuc2VsZWN0ZWRMb2NhbGUsIE51bWJlclN5bWJvbC5EZWNpbWFsKTtcbiAgICAgICAgdGhpcy5HUk9VUCA9IGdldExvY2FsZU51bWJlclN5bWJvbCh0aGlzLmxvY2FsZWZpbHRlciB8fCB0aGlzLnNlbGVjdGVkTG9jYWxlLCBOdW1iZXJTeW1ib2wuR3JvdXApO1xuICAgICAgICB0aGlzLm51bWJlcmZpbHRlciA9ICcxLjAtMTYnO1xuICAgICAgICB0aGlzLnJlc2V0VmFsaWRhdGlvbnMoKTtcbiAgICB9XG5cbiAgICAvLyBTZXR0ZXIgZm9yIHRoZSBkYXRhdmFsdWUuXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHNldCBkYXRhdmFsdWUodmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLmxhc3RWYWxJc0RlY2ltYWwgPSBmYWxzZTtcblxuICAgICAgICAvLyBzZXQgdGV4dCB2YWx1ZSB0byBudWxsIGlmIGRhdGEgdmFsdWUgaXMgZW1wdHkuXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgaWYgKGluY2x1ZGVzKFtudWxsLCB1bmRlZmluZWQsICcnXSwgdmFsdWUpKSB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgcHJldkRhdGFWYWx1ZSA9ICAodGhpcyBhcyBhbnkpLnByZXZEYXRhdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IGlucHV0LnZhbHVlID0gdGhpcy5wcm94eU1vZGVsID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMucmVzZXRWYWxpZGF0aW9ucygpO1xuICAgICAgICAgICAgaWYgKChwcmV2RGF0YVZhbHVlIHx8IHByZXZEYXRhVmFsdWUgPT0gMCkgJiYgIXRoaXMuaXNEZWZhdWx0UXVlcnkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiB0aGUgd2lkZ2V0IGhhcyBkZWZhdWx0IHZhbHVlIGFuZCBpZiB3ZSBjaGFuZ2UgdGhlIGxvY2FsZSwgdGhlIHZhbHVlIHNob3VsZCBiZSBpbiBzZWxlY3RlZCBsb2NhbGUgZm9ybWF0LlxuICAgICAgICBpZiAodGhpcy5pc0RlZmF1bHRRdWVyeSkge1xuICAgICAgICAgICAgY29uc3QgaXNMb2NhbGl6ZWROdW1iZXIgPSBpc1N0cmluZyh2YWx1ZSkgJiYgaW5jbHVkZXModmFsdWUsIHRoaXMuREVDSU1BTCk7XG4gICAgICAgICAgICBjb25zdCBwYXJ0cyA9IGlzTG9jYWxpemVkTnVtYmVyID8gKHZhbHVlIGFzIGFueSkuc3BsaXQodGhpcy5ERUNJTUFMKSA6IGlzU3RyaW5nKHZhbHVlKSAmJiAodmFsdWUgYXMgYW55KS5zcGxpdCgnLicpO1xuICAgICAgICAgICAgdGhpcy5kZWNpbWFsVmFsdWUgPSBwYXJ0c1sxXSB8fCAnJztcbiAgICAgICAgICAgICh2YWx1ZSBhcyBhbnkpID0gaXNMb2NhbGl6ZWROdW1iZXIgPyB2YWx1ZSA6IHRoaXMudHJhbnNmb3JtTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG51bWJlclJlZyA9IC9cXGQvO1xuICAgICAgICBjb25zdCBzdHJWYWwgPSB2YWx1ZS50b1N0cmluZygpO1xuICAgICAgICBsZXQgbW9kZWw7XG4gICAgICAgIC8vIFdoZW4gdGhlIGlucHV0IHZhbHVlIG9ubHkgY29udGFpbnMgc2VwZXJhdG9yLCBkbyBub3QgY29udmVydCB0aGUgc2VwZXJ0YW9yIGludG8gMFxuICAgICAgICBpZiAobnVtYmVyUmVnLnRlc3Qoc3RyVmFsKSkge1xuICAgICAgICAgICAgbW9kZWwgPSB0aGlzLnBhcnNlTnVtYmVyKHN0clZhbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtb2RlbCA9IE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9uIGtleXByZXNzLCBpZiB0aGUgdXNlciB0eXBlcyBhIGRlY2ltYWwgYW5kIGlzIHN0aWxsIGFjdGl2ZSBvbiB0aGUgaW5wdXQgZG8gbm90IHRocm93IGVycm9yLlxuICAgICAgICBpZiAoaXNOYU4obW9kZWwpICYmIHN0clZhbFtzdHJWYWwubGVuZ3RoIC0gMV0gPT09IHRoaXMuREVDSU1BTCAmJiB0aGlzLm5nTW9kZWxPcHRpb25zLnVwZGF0ZU9uID09PSAnY2hhbmdlJyAmJiB0aGlzLiRlbGVtZW50LmZpbmQoJ2lucHV0OmZvY3VzJykubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmxhc3RWYWxJc0RlY2ltYWwgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIGdldCBhIHZhbGlkIG51bWJlciBmb3JtIHRoZSB0ZXh0LlxuICAgICAgICAvLyBpZiB0aGUgbnVtYmVyIGlzIHZhbGlkIG9yIGlmIG51bWJlciBpcyBub3QgaW4gcmFuZ2UgdXBkYXRlIHRoZSBtb2RlbCB2YWx1ZS5cbiAgICAgICAgaWYgKCF0aGlzLmxhc3RWYWxJc0RlY2ltYWwgJiYgdGhpcy5pc1ZhbGlkKG1vZGVsKSkge1xuICAgICAgICAgICAgdGhpcy5wcm94eU1vZGVsID0gbW9kZWw7XG4gICAgICAgICAgICAvLyB1cGRhdGUgdGhlIGRpc3BsYXkgdmFsdWUgaW4gdGhlIHRleHQgYm94LlxuICAgICAgICAgICAgdGhpcy51cGRhdGVEaXNwbGF5VGV4dCgpO1xuICAgICAgICAgICAgLy8gRG8gbm90IHRyaWdnZXIgb25jaGFuZ2UgZXZlbnQgZm9yIGRlZmF1bHQgdmFsdWVcbiAgICAgICAgICAgIGlmICghdGhpcy5pc0RlZmF1bHRRdWVyeSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlKG1vZGVsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gdmFsdWUudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIHRoaXMucHJveHlNb2RlbCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZShudWxsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJldHVybnMgdGhlIGFjdHVhbCBtb2RlbCB2YWx1ZSBvZiB0aGUgd2lkZ2V0LlxuICAgIGdldCBkYXRhdmFsdWUoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJveHlNb2RlbDtcbiAgICB9XG5cbiAgICAvLyByZXNldHMgYWxsIHRoZSBmbGFncyByZWxhdGVkIHRvIHRoZSB3aWRnZXQncyB2YWxpZGF0aW9uLlxuICAgIHByb3RlY3RlZCByZXNldFZhbGlkYXRpb25zKCkge1xuICAgICAgICB0aGlzLmlzSW52YWxpZE51bWJlciA9IGZhbHNlO1xuICAgICAgICB0aGlzLm51bWJlck5vdEluUmFuZ2UgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIHZhbGlkYXRpb25zIGZvciB0aGUgbnVtYmVyIGJlZm9yZSB1cGRhdGluZyB0aGUgd2lkZ2V0IG1vZGVsLiBsaWtlIHZhbGlkYXRpbmcgbWluIGFuZCBtYXggdmFsdWUgZm9yIHRoZSB3aWRnZXQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbCBudW1iZXIgdG8gYmUgdmFsaWRhdGVkXG4gICAgICogQHJldHVybnMge251bWJlcn1cbiAgICAgKi9cbiAgICBwcml2YXRlIGlzVmFsaWQodmFsOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgLy8gaWQgbnVtYmVyIGlzIGluZmluaXRlIHRoZW4gY29uc2lkZXIgaXQgYXMgaW52YWxpZCB2YWx1ZVxuICAgICAgICBpZiAoaXNOYU4odmFsKSB8fCAhaXNGaW5pdGUodmFsKSB8fCAoIU51bWJlci5pc0ludGVnZXIodGhpcy5zdGVwKSAmJlxuICAgICAgICAgICAgdGhpcy5jb3VudERlY2ltYWxzKHZhbCkgPiB0aGlzLmNvdW50RGVjaW1hbHModGhpcy5zdGVwKSkpIHtcbiAgICAgICAgICAgIHRoaXMuaXNJbnZhbGlkTnVtYmVyID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsICE9PSB0aGlzLmdldFZhbHVlSW5SYW5nZSh2YWwpKSB7XG4gICAgICAgICAgICB0aGlzLm51bWJlck5vdEluUmFuZ2UgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZXNldFZhbGlkYXRpb25zKCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJldHVybnMgYSB2YWxpZCBudW1iZXIgYnkgdmFsaWRhdGluZyB0aGUgbWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAgICogQHJldHVybnMge251bWJlcn1cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFZhbHVlSW5SYW5nZSh2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKCFpc05hTih0aGlzLm1pbnZhbHVlKSAmJiB2YWx1ZSA8IHRoaXMubWludmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVUeXBlID0gJ21pbnZhbHVlJztcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1pbnZhbHVlO1xuXG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc05hTih0aGlzLm1heHZhbHVlKSAmJiB2YWx1ZSA+IHRoaXMubWF4dmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVUeXBlID0gJ21heHZhbHVlJztcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1heHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjb252ZXJ0IG51bWJlciB0byBsb2NhbGl6ZWQgbnVtYmVyIHVzaW5nIGFuZ3VsYXIgZGVjaW1hbCBwaXBlLiBlZyAxMCwwMCwwMDAgb3IgMSwwMDAsMDAwXG4gICAgICogQHBhcmFtIG51bWJlclxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAgICovXG4gICAgcHJpdmF0ZSB0cmFuc2Zvcm1OdW1iZXIobnVtYmVyLCBudW1iZXJmaWx0ZXI/KTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZmlsdGVyVmFsID0gbnVtYmVyZmlsdGVyID8gbnVtYmVyZmlsdGVyIDogdGhpcy5udW1iZXJmaWx0ZXI7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYWlsaW5nWmVyb0RlY2ltYWxQaXBlLnRyYW5zZm9ybShudW1iZXIsIHRoaXMuc2VsZWN0ZWRMb2NhbGUsIGZpbHRlclZhbCwgdGhpcy5sb2NhbGVmaWx0ZXIsIHRoaXMudHJhaWxpbmd6ZXJvLCB0aGlzLmRlY2ltYWxWYWx1ZSwgISFudW1iZXJmaWx0ZXIsIHRoaXMuaTE4blNlcnZpY2U/LmdldHdpZGdldExvY2FsZSgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiByZXNldHMgdGhlIGN1cnNvciBwb3NpdGlvbiBpbiB0aGUgdGV4dCBib3guXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIGN1cnNvciBwb3NpdGlvbiBpbmRleCBmb3JtIGxlZnQgdG8gcmlnaHQuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZXNldEN1cnNvclBvc2l0aW9uKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudDtcbiAgICAgICAgLy8gcG9zaXRpb24gb2YgdGhlIGN1cnNvciBzaG91bGQgYmUgZ2l2ZW4gZm9ybSByaWdodCB0byBsZWZ0LlxuICAgICAgICBsZXQgcG9zaXRpb24gPSBpbnB1dC52YWx1ZS5sZW5ndGggLSB2YWx1ZTtcbiAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbiA8IDAgPyAwIDogcG9zaXRpb247XG4gICAgICAgIC8vIHNldCB0aGUgY3Vyc29yIHBvc2l0aW9uIGluIHRoZSB0ZXh0IGJveC5cbiAgICAgICAgaW5wdXQuc2V0U2VsZWN0aW9uUmFuZ2UocG9zaXRpb24sIHBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNZXRob2QgcGFyc2VzIHRoZSBMb2NhbGl6ZWQgbnVtYmVyKHN0cmluZykgdG8gYSB2YWxpZCBudW1iZXIuXG4gICAgICogaWYgdGhlIHN0cmluZyBkb3NlIG5vdCByZXN1bHQgdG8gYSB2YWxpZCBudW1iZXIgdGhlbiByZXR1cm5zIE5hTi5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsIExvY2FsaXplZCBudW1iZXIuXG4gICAgICogQHJldHVybnMge251bWJlcn1cbiAgICAgKi9cbiAgICBwcml2YXRlIHBhcnNlTnVtYmVyKHZhbDogc3RyaW5nKTogbnVtYmVyIHtcbiAgICAgICAgLy8gV01TLTIyMTc5OiBzcGxpdCBudW1iZXIgYmFzZWQgb24gdGhlIGRlY2ltYWwgc2VwYXJhdG9yIGluIHRoZSB2YWxcbiAgICAgICAgLy8gc3BsaXRzIHN0cmluZyBpbnRvIHR3byBwYXJ0cy4gZGVjaW1hbCBhbmQgbnVtYmVyLlxuICAgICAgICBjb25zdCBwYXJ0cyA9IHZhbC5zcGxpdCh0aGlzLmlucHV0bW9kZSA9PT0gSU5QVVRNT0RFLkZJTkFOQ0lBTCA/ICh2YWwuaW5kZXhPZih0aGlzLkRFQ0lNQUwpID4gLTEgPyB0aGlzLkRFQ0lNQUwgOiAnLicpIDogdGhpcy5ERUNJTUFMKTtcbiAgICAgICAgaWYgKCFwYXJ0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJ0cy5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIG51bWJlciBoYXZlIGRlY2ltYWwgcG9pbnQgYW5kIG5vdCBoYXZlIGEgZGVjaW1hbCB2YWx1ZSB0aGVuIHJldHVybi5cbiAgICAgICAgaWYgKHBhcnRzWzFdID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICAvLyByZXBsYWNlcyBhbGwgZ3JvdXAgc2VwYXJhdG9ycyBmb3JtIHRoZSBudW1iZXIuXG4gICAgICAgIGNvbnN0IG51bWJlciA9IE51bWJlcihwYXJ0c1swXS5zcGxpdCh0aGlzLkdST1VQKS5qb2luKCcnKSk7XG4gICAgICAgIGNvbnN0IGRlY2ltYWwgPSBOdW1iZXIoYDAuJHtwYXJ0c1sxXSB8fCAwfWApO1xuICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKG51bWJlcikgfHwgTnVtYmVyLmlzTmFOKGRlY2ltYWwpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN1bSA9IHBhcnRzLmxlbmd0aCA+IDEgPyBwYXJzZUZsb2F0KChudW1iZXIgKyBkZWNpbWFsKS50b0ZpeGVkKHBhcnRzWzFdLmxlbmd0aCkpIDogbnVtYmVyICsgZGVjaW1hbDtcbiAgICAgICAgLy8gaWYgdGhlIG51bWJlciBpcyBuZWdhdGl2ZSB0aGVuIGNhbGN1bGF0ZSB0aGUgbnVtYmVyIGFzIG51bWJlciAtIGRlY2ltYWxcbiAgICAgICAgLy8gRXg6IG51bWJlciA9IC0xMjMgYW5kIGRlY2ltYWwgPSAwLjQ1IHRoZW4gbnVtYmVyIC0gZGVjaW1hbCA9IC0xMjMtMDQ1ID0gLTEyMy40NVxuICAgICAgICAvLyBJZiBlbnRlcmVkIG51bWJlciBpcyAtMC4xIHRvIC0wLjkgdGhlbiB0aGUgbnVtYmVyIGlzIC0wIGFuZCBkZWNpbWFsIGlzIDAuMSB0byAwLjkuIE5vdyBjYWxhY3VsYXRlIHRoZSBudW1iZXIgYXMgbnVtYmVyLWRlY2ltYWxcbiAgICAgICAgLy8gRXg6IG51bWJlciA9IC0wIGFuZCBkZWNpbWFsID0gMC4xIHRoZW4gbnVtYmVyLWRlY2ltYWwgPSAtMC0wLjEgPSAtMC4xXG4gICAgICAgIGlmIChudW1iZXIgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuaXMoMCwgbnVtYmVyKSA/IHN1bSA6IG51bWJlciAtIGRlY2ltYWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bWJlciA+IDAgPyBzdW0gOiBudW1iZXIgLSBkZWNpbWFsO1xuICAgIH1cblxuICAgIC8vIHVwZGF0ZXMgdGhlIHdpZGdldHMgdGV4dCB2YWx1ZS5cbiAgICBwcml2YXRlIHVwZGF0ZURpc3BsYXlUZXh0KCkge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCBwb3NpdGlvbjogbnVtYmVyID0gaW5wdXQuc2VsZWN0aW9uU3RhcnQ7XG4gICAgICAgIGNvbnN0IHByZVZhbHVlOiBzdHJpbmcgPSBpbnB1dC52YWx1ZTtcbiAgICAgICAgaWYgKCF0aGlzLmlzRGVmYXVsdFF1ZXJ5KSB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0cyA9IHByZVZhbHVlLnNwbGl0KHRoaXMuREVDSU1BTCk7XG4gICAgICAgICAgICB0aGlzLmRlY2ltYWxWYWx1ZSA9IHBhcnRzWzFdIHx8ICcnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0ZXBWYWwgPSB0aGlzLnN0ZXBMZW5ndGgoKTtcbiAgICAgICAgaWYgKHRoaXMuaW5wdXRtb2RlID09PSBJTlBVVE1PREUuRklOQU5DSUFMICYmIHN0ZXBWYWwpIHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gaW5wdXQudmFsdWUgPSB0aGlzLnRyYW5zZm9ybU51bWJlcih0aGlzLnByb3h5TW9kZWwsIGAxLiR7c3RlcFZhbH0tJHtzdGVwVmFsfWApO1xuICAgICAgICAgICAgdGhpcy5kZWNpbWFsVmFsdWUgPSB0aGlzLmRlY2ltYWxWYWx1ZS5yZXBsYWNlKC9cXEQvZywnJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IGlucHV0LnZhbHVlID0gdGhpcy50cmFuc2Zvcm1OdW1iZXIodGhpcy5wcm94eU1vZGVsKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpbiBzYWZhcmkgYnJvd3Nlciwgc2V0U2VsZWN0aW9uUmFuZ2Ugd2lsbCBmb2N1cyB0aGUgaW5wdXQgYnkgZGVmYXVsdCwgd2hpY2ggbWF5IGludm9rZSB0aGUgZm9jdXMgZXZlbnQgb24gd2lkZ2V0LlxuICAgICAgICAvLyBIZW5jZSBwcmV2ZW50aW5nIHRoZSBzZXRTZWxlY3Rpb25SYW5nZSB3aGVuIGRlZmF1bHQgdmFsdWUgaXMgc2V0IGkuZS4gd2lkZ2V0IGlzIG5vdCBmb2N1c2VkLlxuICAgICAgICBpZiAodGhpcy51cGRhdGVvbiA9PT0gJ2RlZmF1bHQnICYmICF0aGlzLmlzRGVmYXVsdFF1ZXJ5KSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0Q3Vyc29yUG9zaXRpb24ocHJlVmFsdWUubGVuZ3RoIC0gcG9zaXRpb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBzdGVwIGxlbmd0aCBzZXQgaW4gdGhlIHN0dWRpb1xuICAgIHByaXZhdGUgc3RlcExlbmd0aCgpIHtcbiAgICAgICAgY29uc3Qgc3RlcExlbiA9IHRoaXMuc3RlcC50b1N0cmluZygpLnNwbGl0KCcuJyk7XG4gICAgICAgIGlmIChzdGVwTGVuLmxlbmd0aCA9PT0gMSApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBzdGVwTGVuWzFdLmxlbmd0aDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIHRoZSBjdXJyZW5jeSB3aWRnZXQgaGFzIGlucHV0IG1vZGUgYXMgbmF0dXJhbCBhbmQgdHJhaWxpbmcgemVybyBpcyBkZWZpbmVkIG9yIG5vdFxuICAgIHB1YmxpYyBpc05hdHVyYWxDdXJyZW5jeSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRtb2RlID09PSBJTlBVVE1PREUuTkFUVVJBTCAmJiB0aGlzLndpZGdldFR5cGUgPT09ICd3bS1jdXJyZW5jeScgJiYgISF0aGlzLnRyYWlsaW5nemVybztcbiAgICB9XG5cbiAgICAgICAvKipcbiAgICAgKiBAcGFyYW0gdmFsdWUgY29udGFpbnMgdGhlIHZhbHVlIGVudGVyZWQgaW4gdGhlIGlucHV0IGJveFxuICAgICAqIFRoaXMgZnVuY3Rpb24gbW9kaWZpZXMgdGhlIHVzZXIgaW5wdXQgdmFsdWUsIGludG8gZmluYW5jaWFsIG1vZGUuXG4gICAgICogTnVtYmVyIHN0YXJ0cyBmcm9tIGhpZ2hlc3QgcHJlY2VzaW9uIGRlY2ltYWwsIG9uIHR5cGluZyBudW1iZXIgc2hpZnRzIHRvIHRoZSBsZWZ0XG4gICAgICovXG4gICAgcHVibGljIG9uSW5wdXRDaGFuZ2UodmFsdWU6IGFueSkge1xuICAgICAgICBjb25zdCBzdGVwVmFsID0gdGhpcy5zdGVwTGVuZ3RoKCk7XG4gICAgICAgIC8vIFdNUy0yMjM1NSwgVHJpZ2dlciBjaGFuZ2UgY2IgaWYgdmFsdWUgZXhpc3RzIG9yIHZhbHVlIGlzIGVtcHR5IGJ1dCBkYXRhdmFsdWUgZXhpc3RzICh3aGVuIHZhbHVlIGlzIHNlbGVjdGVkIGFuZCBkZWxldGVkKS5cbiAgICAgICAgaWYgKGlzRGVmaW5lZCh2YWx1ZSkgJiYgKHZhbHVlICE9PSAnJyB8fCB0aGlzLmRhdGF2YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghc3RlcFZhbCB8fCB0aGlzLmlucHV0bW9kZSAhPT0gSU5QVVRNT0RFLkZJTkFOQ0lBTCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGZpbmFuY2lhbFZhbDtcblxuICAgICAgICAvKipcbiAgICAgICAgICogSWYgdGhlIHZhbHVlIGlzIGVudGVyZWQgYnkgdGhlIHVzZXIsIGZvcm1hdCB0aGUgaW5wdXRcbiAgICAgICAgICogSWYgdGhlIHZhbHVlIGlzIHByb3ZpZGVkIGFzIGRlZmF1bHQgdmFsdWUsIHNraXAgZm9ybWF0dGluZ1xuICAgICAgICAgKi9cbiAgICAgICAgaWYgKHRoaXMuaXNEZWZhdWx0UXVlcnkpIHtcbiAgICAgICAgICAgIGZpbmFuY2lhbFZhbCA9IHBhcnNlRmxvYXQodmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdmFsSW5XaG9sZU51bSA9IHBhcnNlSW50KHZhbHVlLnRvU3RyaW5nKCkucmVwbGFjZSgvXFxEL2csJycpKTtcbiAgICAgICAgICAgIGZpbmFuY2lhbFZhbCA9IHZhbEluV2hvbGVOdW0gKiAgdGhpcy5zdGVwO1xuICAgICAgICB9XG5cbiAgICAgICAgICAgaWYgKCFpc05hTihmaW5hbmNpYWxWYWwpKSB7XG4gICAgICAgICAgICAvLyBXaGVuIHVwZGF0ZSBvbiBrZXkgaXMgc2V0IGtleXByZXNzLCB1cGRhdGUgdGhlIGRhdGF2YWx1ZSBlbHNlIHVwZGF0ZSBvbmx5IHRoZSBkaXNwbGF5IHZhbHVlXG4gICAgICAgICAgICBpZiAodGhpcy5uZ01vZGVsT3B0aW9ucy51cGRhdGVPbiA9PT0gJ2NoYW5nZScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGF2YWx1ZSA9IHBhcnNlRmxvYXQoZmluYW5jaWFsVmFsLnRvRml4ZWQoc3RlcFZhbCkpO1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlKHRoaXMuZGF0YXZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5VmFsdWUgPSBmaW5hbmNpYWxWYWwudG9GaXhlZChzdGVwVmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLm5nTW9kZWxPcHRpb25zLnVwZGF0ZU9uICE9PSAnYmx1cicpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YXZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UobnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJbnB1dCBtb2RlIGlzIGZpbmFuY2lhbCBhbmQgdHJhaWxpbmcgemVybyBpcyBzZXQgdG8gZmFsc2UsIE9uIGZvY3VzIHNldCBkaXNwbGF5IHZhbCB0byBmaXhlZCBwb2ludCBub3RhdGlvbiBhbmQgT24gYmx1ciBzdHJpcCB0cmFpbGluZyB6ZXJvc1xuICAgIC8vIEluIGN1cnJlbmN5LCBpbnB1dG1vZGUgaXMgbmF0dXJhbCBhbmQgdHJhaWxpbmcgemVybyBhbmQgc3RlcCBhcmUgZGVmaW5lZCwgb24gYmx1ciBkaXNwbGF5IHZhbCB0byBmaXhlZCBwb2ludCBub3RhdGlvbiBhbmQgb24gZm9jdXMgc3RyaXAgdGhlIHplcm9zXG4gICAgcHVibGljIGNoZWNrRm9yVHJhaWxpbmdaZXJvcygkZXZlbnQpIHtcbiAgICAgICAgY29uc3Qgc3RlcFZhbCA9IHRoaXMuc3RlcExlbmd0aCgpO1xuICAgICAgICBjb25zdCBmaW5hbmNpYWxNb2RlID0gIXRoaXMudHJhaWxpbmd6ZXJvICYmIHRoaXMuaW5wdXRtb2RlID09PSBJTlBVVE1PREUuRklOQU5DSUFMO1xuXG4gICAgICAgIC8vIElmIHRoZSB1c2VyJ3MgbGFzdCBpbnB1dCBpcyBhIGRlY2ltYWwgYW5kIG5vdCBhY3RpdmUgb24gaW5wdXQgZmllbGQsIHRocm93IGVycm9yXG4gICAgICAgIGlmICh0aGlzLmxhc3RWYWxJc0RlY2ltYWwpIHtcbiAgICAgICAgICAgIHRoaXMub25Nb2RlbENoYW5nZSh0aGlzLmRpc3BsYXlWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmaW5hbmNpYWxNb2RlICYmICF0aGlzLmlzTmF0dXJhbEN1cnJlbmN5KCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RlcFZhbCAmJiB0aGlzLmRhdGF2YWx1ZSkge1xuICAgICAgICAgICAgbGV0IG51bWJlcmZpbHRlcjtcbiAgICAgICAgICAgIGlmICgoZmluYW5jaWFsTW9kZSAmJiAkZXZlbnQudHlwZSA9PT0gJ2ZvY3VzJykgfHwgKHRoaXMuaXNOYXR1cmFsQ3VycmVuY3koKSAmJiAkZXZlbnQudHlwZSA9PT0gJ2JsdXInKSkge1xuICAgICAgICAgICAgICAgIG51bWJlcmZpbHRlciA9IGAxLiR7c3RlcFZhbH0tJHtzdGVwVmFsfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IHRoaXMudHJhbnNmb3JtTnVtYmVyKHRoaXMuZGF0YXZhbHVlLCBudW1iZXJmaWx0ZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmV0dXJucyB0aGUgbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIGEgbnVtYmVyIGhhdmUuXG4gICAgICogQHBhcmFtIHZhbHVlOiBudW1iZXJcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgICAqL1xuICAgIHByaXZhdGUgY291bnREZWNpbWFscyh2YWx1ZSkge1xuICAgICAgICBpZiAoKHZhbHVlICUgMSkgIT09IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGRlY2ltYWxWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoJy4nKVsxXTtcbiAgICAgICAgICAgIHJldHVybiBkZWNpbWFsVmFsdWUgJiYgZGVjaW1hbFZhbHVlLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBoYW5kbGVzIHRoZSBhcnJvdyBwcmVzcyBldmVudC4gSW5jcmVhc2VzIG9yIGRlY3JlYXNlcyB0aGUgbnVtYmVyLiB0cmlnZ2VyZWQgZm9tIHRoZSB0ZW1wbGF0ZVxuICAgICAqIEBwYXJhbSAkZXZlbnQga2V5Ym9hcmQgZXZlbnQuXG4gICAgICogQHBhcmFtIGtleSBpZGVudGlmaWVyIHRvIGluY3JlYXNlIG9yIGRlY3JlYXNlIHRoZSBudW1iZXIuXG4gICAgICovXG4gICAgcHVibGljIG9uQXJyb3dQcmVzcygkZXZlbnQsIGtleSkge1xuICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHRoaXMucmVhZG9ubHkgfHwgdGhpcy5zdGVwID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGFyZ2V0VmFsID0gJGV2ZW50LnRhcmdldC52YWx1ZS5yZXBsYWNlKC8sL2csICcnKTtcblxuICAgICAgICAvLyBwcm94eU1vZGVsIHRvIGJlIHVwZGF0ZWQgZnJvbSAkZXZlbnQudGFyZ2V0LnZhbHVlIGlmIHByZXNlbnQgdG8gc3VwcG9ydCBhcnJvdyBrZXlzIHdoZW4gaW5wdXQgY2hhbmdlcyBlbHNlIHBpY2sgdXAgZnJvbSB0aGlzLnByb3h5bW9kZWxcbiAgICAgICAgbGV0IHByb3h5TW9kZWw7XG4gICAgICAgIGlmICh0YXJnZXRWYWwgJiYgIWlzTmFOKHBhcnNlRmxvYXQodGFyZ2V0VmFsKSkpIHtcbiAgICAgICAgICAgIHByb3h5TW9kZWwgPSBwYXJzZUZsb2F0KHRhcmdldFZhbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcm94eU1vZGVsID0gdGhpcy5wcm94eU1vZGVsO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHZhbHVlO1xuXG4gICAgICAgIC8vIGlmIHRoZSBudW1iZXIgaXMgbm90IGluIHJhbmdlIGFuZCB3aGVuIGFycm93IGJ1dHRvbnMgYXJlIHByZXNzZWQgbmVlZCB0byBnZXQgYXBwcm9wcmlhdGUgbnVtYmVyIHZhbHVlLlxuICAgICAgICBpZiAodGhpcy5udW1iZXJOb3RJblJhbmdlKSB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dFZhbHVlID0gdGhpcy5wYXJzZU51bWJlcih0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudC52YWx1ZSk7XG4gICAgICAgICAgICAvLyB0YWtlIHRoZSB0ZXh0Ym94IHZhbHVlIGFzIGN1cnJlbnQgbW9kZWwgaWYgdGhlIHZhbHVlIGlzIHZhbGlkLlxuICAgICAgICAgICAgaWYgKCFpc05hTihpbnB1dFZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5nZXRWYWx1ZUluUmFuZ2UoaW5wdXRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgcHJveHlNb2RlbCA9IGlucHV0VmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldFZhbGlkYXRpb25zKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQocHJveHlNb2RlbCkgfHwgaXNOdWxsKHByb3h5TW9kZWwpKSB7XG4gICAgICAgICAgICAgICAgcHJveHlNb2RlbCA9IHZhbHVlID0gdGhpcy5nZXRWYWx1ZUluUmFuZ2UoKHRoaXMubWludmFsdWUgfHwgMCkpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRWYWxpZGF0aW9ucygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWVJblJhbmdlKHByb3h5TW9kZWwgKyAoa2V5ID09PSAnVVAnID8gdGhpcy5zdGVwIDogLXRoaXMuc3RlcCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICgoa2V5ID09PSAnVVAnICYmIHByb3h5TW9kZWwgPD0gdmFsdWUpIHx8IChrZXkgPT09ICdET1dOJyAmJiBwcm94eU1vZGVsID49IHZhbHVlKSkge1xuICAgICAgICAgICAgY29uc3QgZGVjaW1hbFJvdW5kVmFsdWUgPSBNYXRoLm1heCh0aGlzLmNvdW50RGVjaW1hbHMocHJveHlNb2RlbCksIHRoaXMuY291bnREZWNpbWFscyh0aGlzLnN0ZXApKTtcblxuICAgICAgICAgICAgLy8gdXBkYXRlIHRoZSBtb2RlbFByb3h5LlxuICAgICAgICAgICAgdGhpcy5wcm94eU1vZGVsID0gcm91bmQodmFsdWUsIGRlY2ltYWxSb3VuZFZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGlzcGxheVRleHQoKTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlKHRoaXMucHJveHlNb2RlbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBtZXRob2QgaXMgY2FsbGVkIGZyb20gdGhlIGZyb20gd2lkZ2V0LiB0byBjaGVjayB3aGV0aGVyIHRoZSB2YWx1ZSBlbnRlcmVkIGlzIHZhbGlkIG9yIG5vdC5cbiAgICAgKiBAcmV0dXJucyB7b2JqZWN0fVxuICAgICAqL1xuICAgIHB1YmxpYyB2YWxpZGF0ZShjOiBBYnN0cmFjdENvbnRyb2wpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNJbnZhbGlkTnVtYmVyKSB7XG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlVHlwZSA9ICcnO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBpbnZhbGlkTnVtYmVyOiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkOiBmYWxzZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm51bWJlck5vdEluUmFuZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbnVtYmVyTm90SW5SYW5nZToge1xuICAgICAgICAgICAgICAgICAgICB2YWxpZDogZmFsc2VcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhbGlkYXRlVHlwZSA9ICcnO1xuICAgICAgICAvKiBXTVMtMTgyNjkgfCBFeHRlbmRpbmcgdGhlIGV4aXN0aW5nIHZhbGlkYXRpb24gZm9yICdyZXF1aXJlZCcgKi9cbiAgICAgICAgaWYgKHRoaXNbJ3Nob3cnXSAmJiB0aGlzWydyZXF1aXJlZCddKSB7XG4gICAgICAgICAgICByZXR1cm4gKCEhYy52YWx1ZSB8fCBjLnZhbHVlID09PSAwKSA/IG51bGwgOiB7IHJlcXVpcmVkOiB0cnVlIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIHZhbGlkYXRlSW5wdXRFbnRyeSgkZXZlbnQpIHtcblxuICAgICAgICB0aGlzLmlzRGVmYXVsdFF1ZXJ5ID0gZmFsc2U7XG5cbiAgICAgICAgLy8gYWxsb3cgYWN0aW9ucyBpZiBjb250cm9sIGtleSBpcyBwcmVzc2VkIG9yIGlmIGJhY2tzcGFjZSBpcyBwcmVzc2VkLiAoZm9yIE1vemlsbGEpLlxuICAgICAgICBpZiAoJGV2ZW50LmN0cmxLZXkgfHwgaW5jbHVkZXMoWydCYWNrc3BhY2UnLCAnQXJyb3dSaWdodCcsICdBcnJvd0xlZnQnLCAnVGFiJywgJ0VudGVyJywgJ0RlbGV0ZSddLCAkZXZlbnQua2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmFsaWRpdHkgPSBuZXcgUmVnRXhwKGBeW1xcXFxkXFxcXHMtLC5lKyR7dGhpcy5HUk9VUH0ke3RoaXMuREVDSU1BTH1dJGAsICdpJyk7XG4gICAgICAgIGNvbnN0IGlucHV0VmFsdWUgPSAkZXZlbnQudGFyZ2V0LnZhbHVlO1xuXG4gICAgICAgIC8vIHdoZW4gaW5wdXQgbW9kZSBpcyBmaW5hbmNpYWwsIGRvIG5vdCByZXN0cmljdCB1c2VyIG9uIGVudGVyaW5nIHRoZSB2YWx1ZSB3aGVuIHN0ZXAgdmFsdWUgbGltaXQgaXMgcmVhY2hlZC5cbiAgICAgICAgY29uc3Qgc2tpcFN0ZXBWYWxpZGF0aW9uID0gdGhpcy5pbnB1dG1vZGUgPT09IElOUFVUTU9ERS5GSU5BTkNJQUw7XG5cbiAgICAgICAgLy8gVmFsaWRhdGVzIGlmIHVzZXIgZW5ldGVycyBtb3JlIHRoYW4gMTYgZGlnaXRzXG4gICAgICAgIGlmIChpbnB1dFZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRWYWwgPSAgcGFyc2VJbnQoaW5wdXRWYWx1ZS50b1N0cmluZygpLnJlcGxhY2UoL1xcRC9nLCcnKSk7XG4gICAgICAgICAgICBpZiAocGFyc2VkVmFsLnRvU3RyaW5nKCkubGVuZ3RoID4gMTUpIHtcbiAgICAgICAgICAgICAgICAvLyBXTVMtMjIzMjE6IElmIHRoZSBudW1iZXIgaXMgZ3JlYXRlciB0aGFuIE1BWF9TQUZFX0lOVEVHRVIgKG1vcmUgdGhhbiAxNSBudW1iZXJzKS5cbiAgICAgICAgICAgICAgICAvLyB1c2VyIHNlbGVjdHMgYSByYW5nZSBvZiBkaWdpdHMgYW5kIHByZXNzZXMgYSBrZXkuXG4gICAgICAgICAgICAgICAgLy8gRG8gbm90IHRocm93IHZhbGlkYXRpb24gb2YgZXhjZWVkZWQgbnVtYmVyIGFzIHNlbGVjdGVkIHJhbmdlIHZhbHVlIHdpbGwgYmUgZGVsZXRlZC5cbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZFZhbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRWYWwgJiYgc2VsZWN0ZWRWYWwudG9TdHJpbmcoKSAmJiBzZWxlY3RlZFZhbC5mb2N1c05vZGUgPT09IHRoaXMubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdmFsaWRhdGVzIGVudGVyaW5nIG9mIGRlY2ltYWwgdmFsdWVzIG9ubHkgd2hlbiB1c2VyIHByb3ZpZGVzIGRlY2ltYWwgbGltaXQoaS5lIHN0ZXAgY29udGFpbnMgZGVjaW1hbCB2YWx1ZXMpLlxuICAgICAgICAvLyBSZXN0cmljdCB1c2VyIGZyb20gZW50ZXJpbmcgb25seSBpZiB0aGUgZGVjaW1hbCBsaW1pdCBpcyByZWFjaGVkIGFuZCB0aGUgbmV3IGRpZ2l0IGlzIGVudGVyZWQgaW4gZGVjaW1hbCBwbGFjZVxuICAgICAgICBpZiAoIXNraXBTdGVwVmFsaWRhdGlvbiAmJiBpbnB1dFZhbHVlICYmIHRoaXMuY291bnREZWNpbWFscyh0aGlzLnN0ZXApICYmICh0aGlzLmNvdW50RGVjaW1hbHMoaW5wdXRWYWx1ZSkgPj0gdGhpcy5jb3VudERlY2ltYWxzKHRoaXMuc3RlcCkpICYmICRldmVudC50YXJnZXQuc2VsZWN0aW9uU3RhcnQgPj0gaW5wdXRWYWx1ZS5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gdmFsaWRhdGVzIGlmIHVzZXIgZW50ZXJlZCBhbiBpbnZhbGlkIGNoYXJhY3Rlci5cbiAgICAgICAgaWYgKCF2YWxpZGl0eS50ZXN0KCRldmVudC5rZXkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29tbWEgY2Fubm90IGJlIGVudGVyZWQgY29uc2VjdXRpdmVseVxuICAgICAgICBpZiAoaW5jbHVkZXMoaW5wdXRWYWx1ZSwgJywnKSAmJiBpbnB1dFZhbHVlW2lucHV0VmFsdWUubGVuZ3RoIC0gMV0gPT09ICcsJyAmJiAkZXZlbnQua2V5ID09PSAnLCcpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGEgZGVjaW1hbCB2YWx1ZSBjYW4gYmUgZW50ZXJlZCBvbmx5IG9uY2UgaW4gdGhlIGlucHV0LlxuICAgICAgICBpZiAoaW5jbHVkZXMoaW5wdXRWYWx1ZSwgdGhpcy5ERUNJTUFMKSAmJiAkZXZlbnQua2V5ID09PSB0aGlzLkRFQ0lNQUwpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyAnZScgY2FuIGJlIGVudGVyZWQgb25seSBvbmNlIGluIHRoZSBpbnB1dC5cbiAgICAgICAgaWYgKGludGVyc2VjdGlvbih0b0FycmF5KGlucHV0VmFsdWUpLCBbJ2UnLCAnRSddKS5sZW5ndGggJiYgaW5jbHVkZXMoJ2VFJywgJGV2ZW50LmtleSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKGluY2x1ZGVzKGlucHV0VmFsdWUsICcrJykgfHwgaW5jbHVkZXMoaW5wdXRWYWx1ZSwgJy0nKSkgJiYgKCRldmVudC5rZXkgPT09ICcrJyB8fCAkZXZlbnQua2V5ID09PSAnLScpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRG8gbm90IGFsbG93IHVzZXIgdG8gZW50ZXIgb25seSBzcGFjZSB3aXRob3V0IGFueSBpbnB1dCB2YWx1ZVxuICAgICAgICBpZiAoIWlucHV0VmFsdWUgJiYgJGV2ZW50LmNvZGUgPT09ICdTcGFjZScpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQmFja3NwYWNlKCRldmVudCkge1xuICAgICAgICB0aGlzLmlzRGVmYXVsdFF1ZXJ5ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgb25FbnRlcigkZXZlbnQpIHtcbiAgICAgICAgdGhpcy5kYXRhdmFsdWUgPSAkZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgIH1cblxuICAgIG9uTW9kZWxDaGFuZ2UoJGV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmlucHV0bW9kZSA9PT0gSU5QVVRNT0RFLk5BVFVSQUwgfHwgKHRoaXMuaW5wdXRtb2RlID09PSBJTlBVVE1PREUuRklOQU5DSUFMICYmIHRoaXMubmdNb2RlbE9wdGlvbnMudXBkYXRlT24gPT09ICdibHVyJykpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YXZhbHVlID0gJGV2ZW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdj8pIHtcbiAgICAgICAgaWYgKGtleSA9PT0gJ21pbnZhbHVlJyB8fCBrZXkgPT09ICdtYXh2YWx1ZScpIHtcbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZChudik7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnZGF0YXZhbHVlJyAmJiAhb3YpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTmF0dXJhbEN1cnJlbmN5KCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrRm9yVHJhaWxpbmdaZXJvcyh7dHlwZTogJ2JsdXInfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMub25JbnB1dENoYW5nZShudik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdXBlci5vblByb3BlcnR5Q2hhbmdlKGtleSwgbnYsIG92KTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
488
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtYmVyLWxvY2FsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9pbnB1dC9kZWZhdWx0L3NyYy90ZXh0L2xvY2FsZS9udW1iZXItbG9jYWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFekQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXRFLE9BQU8sRUFBQyxtQkFBbUIsRUFBRSxTQUFTLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDeEQsT0FBTyxFQUFpQix1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV4RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0MsT0FBTyxFQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVoRyxJQUFzQixZQUFZLEdBQWxDLE1BQXNCLFlBQWEsU0FBUSxTQUFTO0lBeUJoRCxZQUNJLEdBQWEsRUFDYixNQUFxQixFQUNiLFdBQWdDLEVBQ2hDLHVCQUFnRCxFQUNoQixlQUFvQjtRQUU1RCxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxlQUFlLENBQUMsQ0FBQztRQUo1QixnQkFBVyxHQUFYLFdBQVcsQ0FBcUI7UUFDaEMsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUF5QjtRQXRCcEQsbUJBQWMsR0FBWSxJQUFJLENBQUM7UUFDL0IsaUJBQVksR0FBVyxFQUFFLENBQUM7UUF5QjlCLElBQUksQ0FBQyxjQUFjLEdBQUcsV0FBVyxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDdEQsSUFBSSxDQUFD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QUM7SUFFRCxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUc7UUFDekIsSUFBSSxHQUFHLEtBQUssVUFBVSxJQUFJLEdBQUcsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUMzQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JCLENBQUM7YUFBTSxJQUFJLEdBQUcsS0FBSyxXQUFXLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNwQyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxFQUFDLElBQUksRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFDO1lBQy9DLENBQUM7aUJBQU0sQ0FBQztnQkFDSixJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzNCLENBQUM7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNKLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7SUFDTCxDQUFDO0NBQ0osQ0FBQTtBQTdnQnFCLFlBQVk7SUE4QnpCLFdBQUEsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUE7SUFBRSxXQUFBLFFBQVEsRUFBRSxDQUFBO3FDQUpsQyxRQUFRLFVBRVEsbUJBQW1CO1FBQ1AsdUJBQXVCO0dBN0IxQyxZQUFZLENBNmdCakMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdCwgSW5qZWN0b3IsIE9wdGlvbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgVmFsaWRhdG9yIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgZ2V0TG9jYWxlTnVtYmVyU3ltYm9sLCBOdW1iZXJTeW1ib2wgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQge0Fic3RyYWN0STE4blNlcnZpY2UsIGlzRGVmaW5lZH0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHsgSVdpZGdldENvbmZpZywgVHJhaWxpbmdaZXJvRGVjaW1hbFBpcGUsIElOUFVUTU9ERSB9IGZyb20gJ0B3bS9jb21wb25lbnRzL2Jhc2UnO1xuXG5pbXBvcnQgeyBCYXNlSW5wdXQgfSBmcm9tICcuLi9iYXNlL2Jhc2UtaW5wdXQnO1xuaW1wb3J0IHtpbmNsdWRlcywgaW50ZXJzZWN0aW9uLCBpc051bGwsIGlzU3RyaW5nLCBpc1VuZGVmaW5lZCwgcm91bmQsIHRvQXJyYXl9IGZyb20gXCJsb2Rhc2gtZXNcIjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE51bWJlckxvY2FsZSBleHRlbmRzIEJhc2VJbnB1dCBpbXBsZW1lbnRzIFZhbGlkYXRvciB7XG4gICAgcHJpdmF0ZSBERUNJTUFMOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBHUk9VUDogc3RyaW5nO1xuICAgIHByaXZhdGUgc2VsZWN0ZWRMb2NhbGU6IHN0cmluZztcbiAgICBwcml2YXRlIHByb3h5TW9kZWw6IG51bWJlcjtcbiAgICBwcml2YXRlIG51bWJlck5vdEluUmFuZ2U6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBpc0ludmFsaWROdW1iZXI6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBpc0RlZmF1bHRRdWVyeTogYm9vbGVhbiA9IHRydWU7XG4gICAgcHJpdmF0ZSBkZWNpbWFsVmFsdWU6IHN0cmluZyA9ICcnO1xuICAgIHB1YmxpYyBkaXNwbGF5VmFsdWU6IHN0cmluZztcbiAgICBwcml2YXRlIG51bWJlcmZpbHRlcjogc3RyaW5nO1xuICAgIHByaXZhdGUgbG9jYWxlZmlsdGVyOiBzdHJpbmc7XG4gICAgcHVibGljIHJlYWRvbmx5OiBib29sZWFuO1xuXG4gICAgcHVibGljIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gICAgcHVibGljIG1pbnZhbHVlOiBudW1iZXI7XG4gICAgcHVibGljIG1heHZhbHVlOiBudW1iZXI7XG4gICAgcHVibGljIHVwZGF0ZW9uOiBzdHJpbmc7XG4gICAgcHVibGljIHN0ZXA6IG51bWJlcjtcbiAgICBwdWJsaWMgdHJhaWxpbmd6ZXJvOiBib29sZWFuO1xuICAgIHByaXZhdGUgdmFsaWRhdGVUeXBlOiBzdHJpbmc7XG4gICAgcHVibGljIGlucHV0bW9kZTogc3RyaW5nO1xuICAgIHB1YmxpYyBkZWNpbWFscGxhY2VzOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBsYXN0VmFsSXNEZWNpbWFsOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGluajogSW5qZWN0b3IsXG4gICAgICAgIGNvbmZpZzogSVdpZGdldENvbmZpZyxcbiAgICAgICAgcHJpdmF0ZSBpMThuU2VydmljZTogQWJzdHJhY3RJMThuU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB0cmFpbGluZ1plcm9EZWNpbWFsUGlwZTogVHJhaWxpbmdaZXJvRGVjaW1hbFBpcGUsXG4gICAgICAgIEBJbmplY3QoJ0VYUExJQ0lUX0NPTlRFWFQnKSBAT3B0aW9uYWwoKSBleHBsaWNpdENvbnRleHQ6IGFueVxuICAgICkge1xuICAgICAgICBzdXBlcihpbmosIGNvbmZpZywgZXhwbGljaXRDb250ZXh0KTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZExvY2FsZSA9IGkxOG5TZXJ2aWNlLmdldFNlbGVjdGVkTG9jYWxlKCk7XG4gICAgICAgIHRoaXMuREVDSU1BTCA9IGdldExvY2FsZU51bWJlclN5bWJvbCh0aGlzLmxvY2FsZWZpbHRlciB8fCB0aGlzLnNlbGVjdGVkTG9jYWxlLCBOdW1iZXJTeW1ib2wuRGVjaW1hbCk7XG4gICAgICAgIHRoaXMuR1JPVVAgPSBnZXRMb2NhbGVOdW1iZXJTeW1ib2wodGhpcy5sb2NhbGVmaWx0ZXIgfHwgdGhpcy5zZWxlY3RlZExvY2FsZSwgTnVtYmVyU3ltYm9sLkdyb3VwKTtcbiAgICAgICAgdGhpcy5udW1iZXJmaWx0ZXIgPSAnMS4wLTE2JztcbiAgICAgICAgdGhpcy5yZXNldFZhbGlkYXRpb25zKCk7XG4gICAgfVxuXG4gICAgLy8gU2V0dGVyIGZvciB0aGUgZGF0YXZhbHVlLlxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBzZXQgZGF0YXZhbHVlKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5sYXN0VmFsSXNEZWNpbWFsID0gZmFsc2U7XG5cbiAgICAgICAgLy8gc2V0IHRleHQgdmFsdWUgdG8gbnVsbCBpZiBkYXRhIHZhbHVlIGlzIGVtcHR5LlxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGlmIChpbmNsdWRlcyhbbnVsbCwgdW5kZWZpbmVkLCAnJ10sIHZhbHVlKSkge1xuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IHByZXZEYXRhVmFsdWUgPSAgKHRoaXMgYXMgYW55KS5wcmV2RGF0YXZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5VmFsdWUgPSBpbnB1dC52YWx1ZSA9IHRoaXMucHJveHlNb2RlbCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnJlc2V0VmFsaWRhdGlvbnMoKTtcbiAgICAgICAgICAgIGlmICgocHJldkRhdGFWYWx1ZSB8fCBwcmV2RGF0YVZhbHVlID09IDApICYmICF0aGlzLmlzRGVmYXVsdFF1ZXJ5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UodmFsdWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuX29uQ2hhbmdlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgdGhlIHdpZGdldCBoYXMgZGVmYXVsdCB2YWx1ZSBhbmQgaWYgd2UgY2hhbmdlIHRoZSBsb2NhbGUsIHRoZSB2YWx1ZSBzaG91bGQgYmUgaW4gc2VsZWN0ZWQgbG9jYWxlIGZvcm1hdC5cbiAgICAgICAgaWYgKHRoaXMuaXNEZWZhdWx0UXVlcnkpIHtcbiAgICAgICAgICAgIGNvbnN0IGlzTG9jYWxpemVkTnVtYmVyID0gaXNTdHJpbmcodmFsdWUpICYmIGluY2x1ZGVzKHZhbHVlLCB0aGlzLkRFQ0lNQUwpO1xuICAgICAgICAgICAgY29uc3QgcGFydHMgPSBpc0xvY2FsaXplZE51bWJlciA/ICh2YWx1ZSBhcyBhbnkpLnNwbGl0KHRoaXMuREVDSU1BTCkgOiBpc1N0cmluZyh2YWx1ZSkgJiYgKHZhbHVlIGFzIGFueSkuc3BsaXQoJy4nKTtcblxuICAgICAgICAgICAgaWYodGhpcy5pbnB1dG1vZGUgPT09IElOUFVUTU9ERS5OQVRVUkFMICYmICFpc05hTih0aGlzLmRlY2ltYWxwbGFjZXMpKSB7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5kZWNpbWFscGxhY2VzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVjaW1hbFZhbHVlID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICh2YWx1ZSBhcyBhbnkpID0gaXNMb2NhbGl6ZWROdW1iZXIgPyBwYXJ0c1swXSA6IHRoaXMudHJhbnNmb3JtTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYodGhpcy5kZWNpbWFscGxhY2VzID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlY2ltYWxWYWx1ZSA9IHBhcnRzWzFdICYmIHBhcnRzWzFdLnN1YnN0cmluZygwLCB0aGlzLmRlY2ltYWxwbGFjZXMpIHx8ICcnO1xuICAgICAgICAgICAgICAgICAgICBpZihpc0xvY2FsaXplZE51bWJlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlIGFzIGFueSkgPSB0aGlzLmRlY2ltYWxWYWx1ZS5sZW5ndGggPyBgJHtwYXJ0c1swXX0ke3RoaXMuREVDSU1BTH0ke3RoaXMuZGVjaW1hbFZhbHVlfWAgOiBwYXJ0c1swXTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZSBhcyBhbnkpID0gTnVtYmVyLnBhcnNlRmxvYXQoU3RyaW5nKHZhbHVlKSkudG9GaXhlZCh0aGlzLmRlY2ltYWxwbGFjZXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlY2ltYWxWYWx1ZSA9IHBhcnRzWzFdIHx8ICcnO1xuICAgICAgICAgICAgICAgICh2YWx1ZSBhcyBhbnkpID0gaXNMb2NhbGl6ZWROdW1iZXIgPyB2YWx1ZSA6IHRoaXMudHJhbnNmb3JtTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG51bWJlclJlZyA9IC9cXGQvO1xuICAgICAgICBjb25zdCBzdHJWYWwgPSB2YWx1ZS50b1N0cmluZygpO1xuICAgICAgICBsZXQgbW9kZWw7XG4gICAgICAgIC8vIFdoZW4gdGhlIGlucHV0IHZhbHVlIG9ubHkgY29udGFpbnMgc2VwZXJhdG9yLCBkbyBub3QgY29udmVydCB0aGUgc2VwZXJ0YW9yIGludG8gMFxuICAgICAgICBpZiAobnVtYmVyUmVnLnRlc3Qoc3RyVmFsKSkge1xuICAgICAgICAgICAgbW9kZWwgPSB0aGlzLnBhcnNlTnVtYmVyKHN0clZhbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtb2RlbCA9IE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9uIGtleXByZXNzLCBpZiB0aGUgdXNlciB0eXBlcyBhIGRlY2ltYWwgYW5kIGlzIHN0aWxsIGFjdGl2ZSBvbiB0aGUgaW5wdXQgZG8gbm90IHRocm93IGVycm9yLlxuICAgICAgICBpZiAoaXNOYU4obW9kZWwpICYmIHN0clZhbFtzdHJWYWwubGVuZ3RoIC0gMV0gPT09IHRoaXMuREVDSU1BTCAmJiB0aGlzLm5nTW9kZWxPcHRpb25zLnVwZGF0ZU9uID09PSAnY2hhbmdlJyAmJiB0aGlzLiRlbGVtZW50LmZpbmQoJ2lucHV0OmZvY3VzJykubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmxhc3RWYWxJc0RlY2ltYWwgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIGdldCBhIHZhbGlkIG51bWJlciBmb3JtIHRoZSB0ZXh0LlxuICAgICAgICAvLyBpZiB0aGUgbnVtYmVyIGlzIHZhbGlkIG9yIGlmIG51bWJlciBpcyBub3QgaW4gcmFuZ2UgdXBkYXRlIHRoZSBtb2RlbCB2YWx1ZS5cbiAgICAgICAgaWYgKCF0aGlzLmxhc3RWYWxJc0RlY2ltYWwgJiYgdGhpcy5pc1ZhbGlkKG1vZGVsKSkge1xuICAgICAgICAgICAgdGhpcy5wcm94eU1vZGVsID0gbW9kZWw7XG4gICAgICAgICAgICAvLyB1cGRhdGUgdGhlIGRpc3BsYXkgdmFsdWUgaW4gdGhlIHRleHQgYm94LlxuICAgICAgICAgICAgdGhpcy51cGRhdGVEaXNwbGF5VGV4dCgpO1xuICAgICAgICAgICAgLy8gRG8gbm90IHRyaWdnZXIgb25jaGFuZ2UgZXZlbnQgZm9yIGRlZmF1bHQgdmFsdWVcbiAgICAgICAgICAgIGlmICghdGhpcy5pc0RlZmF1bHRRdWVyeSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlKG1vZGVsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gdmFsdWUudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIHRoaXMucHJveHlNb2RlbCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZShudWxsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJldHVybnMgdGhlIGFjdHVhbCBtb2RlbCB2YWx1ZSBvZiB0aGUgd2lkZ2V0LlxuICAgIGdldCBkYXRhdmFsdWUoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJveHlNb2RlbDtcbiAgICB9XG5cbiAgICAvLyByZXNldHMgYWxsIHRoZSBmbGFncyByZWxhdGVkIHRvIHRoZSB3aWRnZXQncyB2YWxpZGF0aW9uLlxuICAgIHByb3RlY3RlZCByZXNldFZhbGlkYXRpb25zKCkge1xuICAgICAgICB0aGlzLmlzSW52YWxpZE51bWJlciA9IGZhbHNlO1xuICAgICAgICB0aGlzLm51bWJlck5vdEluUmFuZ2UgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIHZhbGlkYXRpb25zIGZvciB0aGUgbnVtYmVyIGJlZm9yZSB1cGRhdGluZyB0aGUgd2lkZ2V0IG1vZGVsLiBsaWtlIHZhbGlkYXRpbmcgbWluIGFuZCBtYXggdmFsdWUgZm9yIHRoZSB3aWRnZXQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbCBudW1iZXIgdG8gYmUgdmFsaWRhdGVkXG4gICAgICogQHJldHVybnMge251bWJlcn1cbiAgICAgKi9cbiAgICBwcml2YXRlIGlzVmFsaWQodmFsOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgLy8gaWQgbnVtYmVyIGlzIGluZmluaXRlIHRoZW4gY29uc2lkZXIgaXQgYXMgaW52YWxpZCB2YWx1ZVxuICAgICAgICBsZXQgaW52YWxpZERlY2ltYWxQbGFjZXMgPSBmYWxzZTtcbiAgICAgICAgaWYodGhpcy5pbnB1dG1vZGUgPT09IElOUFVUTU9ERS5OQVRVUkFMICYmICFpc05hTih0aGlzLmRlY2ltYWxwbGFjZXMpICYmIHRoaXMuZGVjaW1hbHBsYWNlcyA+PSAwKSB7XG4gICAgICAgICAgICBpbnZhbGlkRGVjaW1hbFBsYWNlcyA9IHRoaXMuY291bnREZWNpbWFscyh2YWwpID4gdGhpcy5kZWNpbWFscGxhY2VzO1xuICAgICAgICB9IGVsc2UgaWYoIU51bWJlci5pc0ludGVnZXIodGhpcy5zdGVwKSAmJiB0aGlzLmNvdW50RGVjaW1hbHModmFsKSA+IHRoaXMuY291bnREZWNpbWFscyh0aGlzLnN0ZXApKSB7XG4gICAgICAgICAgICBpbnZhbGlkRGVjaW1hbFBsYWNlcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzTmFOKHZhbCkgfHwgIWlzRmluaXRlKHZhbCkgfHwgaW52YWxpZERlY2ltYWxQbGFjZXMpIHtcbiAgICAgICAgICAgIHRoaXMuaXNJbnZhbGlkTnVtYmVyID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsICE9PSB0aGlzLmdldFZhbHVlSW5SYW5nZSh2YWwpKSB7XG4gICAgICAgICAgICB0aGlzLm51bWJlck5vdEluUmFuZ2UgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZXNldFZhbGlkYXRpb25zKCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJldHVybnMgYSB2YWxpZCBudW1iZXIgYnkgdmFsaWRhdGluZyB0aGUgbWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAgICogQHJldHVybnMge251bWJlcn1cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFZhbHVlSW5SYW5nZSh2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKCFpc05hTih0aGlzLm1pbnZhbHVlKSAmJiB2YWx1ZSA8IHRoaXMubWludmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVUeXBlID0gJ21pbnZhbHVlJztcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1pbnZhbHVlO1xuXG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc05hTih0aGlzLm1heHZhbHVlKSAmJiB2YWx1ZSA+IHRoaXMubWF4dmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVUeXBlID0gJ21heHZhbHVlJztcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1heHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjb252ZXJ0IG51bWJlciB0byBsb2NhbGl6ZWQgbnVtYmVyIHVzaW5nIGFuZ3VsYXIgZGVjaW1hbCBwaXBlLiBlZyAxMCwwMCwwMDAgb3IgMSwwMDAsMDAwXG4gICAgICogQHBhcmFtIG51bWJlclxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAgICovXG4gICAgcHJpdmF0ZSB0cmFuc2Zvcm1OdW1iZXIobnVtYmVyLCBudW1iZXJmaWx0ZXI/KTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZmlsdGVyVmFsID0gbnVtYmVyZmlsdGVyID8gbnVtYmVyZmlsdGVyIDogdGhpcy5udW1iZXJmaWx0ZXI7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYWlsaW5nWmVyb0RlY2ltYWxQaXBlLnRyYW5zZm9ybShudW1iZXIsIHRoaXMuc2VsZWN0ZWRMb2NhbGUsIGZpbHRlclZhbCwgdGhpcy5sb2NhbGVmaWx0ZXIsIHRoaXMudHJhaWxpbmd6ZXJvLCB0aGlzLmRlY2ltYWxWYWx1ZSwgISFudW1iZXJmaWx0ZXIsIHRoaXMuaTE4blNlcnZpY2U/LmdldHdpZGdldExvY2FsZSgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiByZXNldHMgdGhlIGN1cnNvciBwb3NpdGlvbiBpbiB0aGUgdGV4dCBib3guXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIGN1cnNvciBwb3NpdGlvbiBpbmRleCBmb3JtIGxlZnQgdG8gcmlnaHQuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZXNldEN1cnNvclBvc2l0aW9uKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudDtcbiAgICAgICAgLy8gcG9zaXRpb24gb2YgdGhlIGN1cnNvciBzaG91bGQgYmUgZ2l2ZW4gZm9ybSByaWdodCB0byBsZWZ0LlxuICAgICAgICBsZXQgcG9zaXRpb24gPSBpbnB1dC52YWx1ZS5sZW5ndGggLSB2YWx1ZTtcbiAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbiA8IDAgPyAwIDogcG9zaXRpb247XG4gICAgICAgIC8vIHNldCB0aGUgY3Vyc29yIHBvc2l0aW9uIGluIHRoZSB0ZXh0IGJveC5cbiAgICAgICAgaW5wdXQuc2V0U2VsZWN0aW9uUmFuZ2UocG9zaXRpb24sIHBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNZXRob2QgcGFyc2VzIHRoZSBMb2NhbGl6ZWQgbnVtYmVyKHN0cmluZykgdG8gYSB2YWxpZCBudW1iZXIuXG4gICAgICogaWYgdGhlIHN0cmluZyBkb3NlIG5vdCByZXN1bHQgdG8gYSB2YWxpZCBudW1iZXIgdGhlbiByZXR1cm5zIE5hTi5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsIExvY2FsaXplZCBudW1iZXIuXG4gICAgICogQHJldHVybnMge251bWJlcn1cbiAgICAgKi9cbiAgICBwcml2YXRlIHBhcnNlTnVtYmVyKHZhbDogc3RyaW5nKTogbnVtYmVyIHtcbiAgICAgICAgLy8gV01TLTIyMTc5OiBzcGxpdCBudW1iZXIgYmFzZWQgb24gdGhlIGRlY2ltYWwgc2VwYXJhdG9yIGluIHRoZSB2YWxcbiAgICAgICAgLy8gc3BsaXRzIHN0cmluZyBpbnRvIHR3byBwYXJ0cy4gZGVjaW1hbCBhbmQgbnVtYmVyLlxuICAgICAgICBjb25zdCBwYXJ0cyA9IHZhbC5zcGxpdCh0aGlzLmlucHV0bW9kZSA9PT0gSU5QVVRNT0RFLkZJTkFOQ0lBTCA/ICh2YWwuaW5kZXhPZih0aGlzLkRFQ0lNQUwpID4gLTEgPyB0aGlzLkRFQ0lNQUwgOiAnLicpIDogdGhpcy5ERUNJTUFMKTtcbiAgICAgICAgaWYgKCFwYXJ0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJ0cy5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIG51bWJlciBoYXZlIGRlY2ltYWwgcG9pbnQgYW5kIG5vdCBoYXZlIGEgZGVjaW1hbCB2YWx1ZSB0aGVuIHJldHVybi5cbiAgICAgICAgaWYgKHBhcnRzWzFdID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICAvLyByZXBsYWNlcyBhbGwgZ3JvdXAgc2VwYXJhdG9ycyBmb3JtIHRoZSBudW1iZXIuXG4gICAgICAgIGNvbnN0IG51bWJlciA9IE51bWJlcihwYXJ0c1swXS5zcGxpdCh0aGlzLkdST1VQKS5qb2luKCcnKSk7XG4gICAgICAgIGNvbnN0IGRlY2ltYWwgPSBOdW1iZXIoYDAuJHtwYXJ0c1sxXSB8fCAwfWApO1xuICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKG51bWJlcikgfHwgTnVtYmVyLmlzTmFOKGRlY2ltYWwpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN1bSA9IHBhcnRzLmxlbmd0aCA+IDEgPyBwYXJzZUZsb2F0KChudW1iZXIgKyBkZWNpbWFsKS50b0ZpeGVkKHBhcnRzWzFdLmxlbmd0aCkpIDogbnVtYmVyICsgZGVjaW1hbDtcbiAgICAgICAgLy8gaWYgdGhlIG51bWJlciBpcyBuZWdhdGl2ZSB0aGVuIGNhbGN1bGF0ZSB0aGUgbnVtYmVyIGFzIG51bWJlciAtIGRlY2ltYWxcbiAgICAgICAgLy8gRXg6IG51bWJlciA9IC0xMjMgYW5kIGRlY2ltYWwgPSAwLjQ1IHRoZW4gbnVtYmVyIC0gZGVjaW1hbCA9IC0xMjMtMDQ1ID0gLTEyMy40NVxuICAgICAgICAvLyBJZiBlbnRlcmVkIG51bWJlciBpcyAtMC4xIHRvIC0wLjkgdGhlbiB0aGUgbnVtYmVyIGlzIC0wIGFuZCBkZWNpbWFsIGlzIDAuMSB0byAwLjkuIE5vdyBjYWxhY3VsYXRlIHRoZSBudW1iZXIgYXMgbnVtYmVyLWRlY2ltYWxcbiAgICAgICAgLy8gRXg6IG51bWJlciA9IC0wIGFuZCBkZWNpbWFsID0gMC4xIHRoZW4gbnVtYmVyLWRlY2ltYWwgPSAtMC0wLjEgPSAtMC4xXG4gICAgICAgIGlmIChudW1iZXIgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuaXMoMCwgbnVtYmVyKSA/IHN1bSA6IG51bWJlciAtIGRlY2ltYWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bWJlciA+IDAgPyBzdW0gOiBudW1iZXIgLSBkZWNpbWFsO1xuICAgIH1cblxuICAgIC8vIHVwZGF0ZXMgdGhlIHdpZGdldHMgdGV4dCB2YWx1ZS5cbiAgICBwcml2YXRlIHVwZGF0ZURpc3BsYXlUZXh0KCkge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCBwb3NpdGlvbjogbnVtYmVyID0gaW5wdXQuc2VsZWN0aW9uU3RhcnQ7XG4gICAgICAgIGNvbnN0IHByZVZhbHVlOiBzdHJpbmcgPSBpbnB1dC52YWx1ZTtcbiAgICAgICAgaWYgKCF0aGlzLmlzRGVmYXVsdFF1ZXJ5KSB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0cyA9IHByZVZhbHVlLnNwbGl0KHRoaXMuREVDSU1BTCk7XG4gICAgICAgICAgICB0aGlzLmRlY2ltYWxWYWx1ZSA9IHBhcnRzWzFdIHx8ICcnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0ZXBWYWwgPSB0aGlzLnN0ZXBMZW5ndGgoKTtcbiAgICAgICAgaWYgKHRoaXMuaW5wdXRtb2RlID09PSBJTlBVVE1PREUuRklOQU5DSUFMICYmIHN0ZXBWYWwpIHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gaW5wdXQudmFsdWUgPSB0aGlzLnRyYW5zZm9ybU51bWJlcih0aGlzLnByb3h5TW9kZWwsIGAxLiR7c3RlcFZhbH0tJHtzdGVwVmFsfWApO1xuICAgICAgICAgICAgdGhpcy5kZWNpbWFsVmFsdWUgPSB0aGlzLmRlY2ltYWxWYWx1ZS5yZXBsYWNlKC9cXEQvZywnJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IGlucHV0LnZhbHVlID0gdGhpcy50cmFuc2Zvcm1OdW1iZXIodGhpcy5wcm94eU1vZGVsKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpbiBzYWZhcmkgYnJvd3Nlciwgc2V0U2VsZWN0aW9uUmFuZ2Ugd2lsbCBmb2N1cyB0aGUgaW5wdXQgYnkgZGVmYXVsdCwgd2hpY2ggbWF5IGludm9rZSB0aGUgZm9jdXMgZXZlbnQgb24gd2lkZ2V0LlxuICAgICAgICAvLyBIZW5jZSBwcmV2ZW50aW5nIHRoZSBzZXRTZWxlY3Rpb25SYW5nZSB3aGVuIGRlZmF1bHQgdmFsdWUgaXMgc2V0IGkuZS4gd2lkZ2V0IGlzIG5vdCBmb2N1c2VkLlxuICAgICAgICBpZiAodGhpcy51cGRhdGVvbiA9PT0gJ2RlZmF1bHQnICYmICF0aGlzLmlzRGVmYXVsdFF1ZXJ5KSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0Q3Vyc29yUG9zaXRpb24ocHJlVmFsdWUubGVuZ3RoIC0gcG9zaXRpb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBzdGVwIGxlbmd0aCBzZXQgaW4gdGhlIHN0dWRpb1xuICAgIHByaXZhdGUgc3RlcExlbmd0aCgpIHtcbiAgICAgICAgaWYodGhpcy5pbnB1dG1vZGUgPT09ICdJTlBVVE1PREUuTkFUVVJBTCcgJiYgIWlzTmFOKHRoaXMuZGVjaW1hbHBsYWNlcykgJiYgdGhpcy5kZWNpbWFscGxhY2VzID49IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY2ltYWxwbGFjZXM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RlcExlbiA9IHRoaXMuc3RlcC50b1N0cmluZygpLnNwbGl0KCcuJyk7XG4gICAgICAgIGlmIChzdGVwTGVuLmxlbmd0aCA9PT0gMSApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBzdGVwTGVuWzFdLmxlbmd0aDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIHRoZSBjdXJyZW5jeSB3aWRnZXQgaGFzIGlucHV0IG1vZGUgYXMgbmF0dXJhbCBhbmQgdHJhaWxpbmcgemVybyBpcyBkZWZpbmVkIG9yIG5vdFxuICAgIHB1YmxpYyBpc05hdHVyYWxDdXJyZW5jeSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRtb2RlID09PSBJTlBVVE1PREUuTkFUVVJBTCAmJiB0aGlzLndpZGdldFR5cGUgPT09ICd3bS1jdXJyZW5jeScgJiYgISF0aGlzLnRyYWlsaW5nemVybztcbiAgICB9XG5cbiAgICAgICAvKipcbiAgICAgKiBAcGFyYW0gdmFsdWUgY29udGFpbnMgdGhlIHZhbHVlIGVudGVyZWQgaW4gdGhlIGlucHV0IGJveFxuICAgICAqIFRoaXMgZnVuY3Rpb24gbW9kaWZpZXMgdGhlIHVzZXIgaW5wdXQgdmFsdWUsIGludG8gZmluYW5jaWFsIG1vZGUuXG4gICAgICogTnVtYmVyIHN0YXJ0cyBmcm9tIGhpZ2hlc3QgcHJlY2VzaW9uIGRlY2ltYWwsIG9uIHR5cGluZyBudW1iZXIgc2hpZnRzIHRvIHRoZSBsZWZ0XG4gICAgICovXG4gICAgcHVibGljIG9uSW5wdXRDaGFuZ2UodmFsdWU6IGFueSkge1xuICAgICAgICBjb25zdCBzdGVwVmFsID0gdGhpcy5zdGVwTGVuZ3RoKCk7XG4gICAgICAgIC8vIFdNUy0yMjM1NSwgVHJpZ2dlciBjaGFuZ2UgY2IgaWYgdmFsdWUgZXhpc3RzIG9yIHZhbHVlIGlzIGVtcHR5IGJ1dCBkYXRhdmFsdWUgZXhpc3RzICh3aGVuIHZhbHVlIGlzIHNlbGVjdGVkIGFuZCBkZWxldGVkKS5cbiAgICAgICAgaWYgKGlzRGVmaW5lZCh2YWx1ZSkgJiYgKHZhbHVlICE9PSAnJyB8fCB0aGlzLmRhdGF2YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghc3RlcFZhbCB8fCB0aGlzLmlucHV0bW9kZSAhPT0gSU5QVVRNT0RFLkZJTkFOQ0lBTCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGZpbmFuY2lhbFZhbDtcblxuICAgICAgICAvKipcbiAgICAgICAgICogSWYgdGhlIHZhbHVlIGlzIGVudGVyZWQgYnkgdGhlIHVzZXIsIGZvcm1hdCB0aGUgaW5wdXRcbiAgICAgICAgICogSWYgdGhlIHZhbHVlIGlzIHByb3ZpZGVkIGFzIGRlZmF1bHQgdmFsdWUsIHNraXAgZm9ybWF0dGluZ1xuICAgICAgICAgKi9cbiAgICAgICAgaWYgKHRoaXMuaXNEZWZhdWx0UXVlcnkpIHtcbiAgICAgICAgICAgIGZpbmFuY2lhbFZhbCA9IHBhcnNlRmxvYXQodmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdmFsSW5XaG9sZU51bSA9IHBhcnNlSW50KHZhbHVlLnRvU3RyaW5nKCkucmVwbGFjZSgvXFxEL2csJycpKTtcbiAgICAgICAgICAgIGZpbmFuY2lhbFZhbCA9IHZhbEluV2hvbGVOdW0gKiAgdGhpcy5zdGVwO1xuICAgICAgICB9XG5cbiAgICAgICAgICAgaWYgKCFpc05hTihmaW5hbmNpYWxWYWwpKSB7XG4gICAgICAgICAgICAvLyBXaGVuIHVwZGF0ZSBvbiBrZXkgaXMgc2V0IGtleXByZXNzLCB1cGRhdGUgdGhlIGRhdGF2YWx1ZSBlbHNlIHVwZGF0ZSBvbmx5IHRoZSBkaXNwbGF5IHZhbHVlXG4gICAgICAgICAgICBpZiAodGhpcy5uZ01vZGVsT3B0aW9ucy51cGRhdGVPbiA9PT0gJ2NoYW5nZScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGF2YWx1ZSA9IHBhcnNlRmxvYXQoZmluYW5jaWFsVmFsLnRvRml4ZWQoc3RlcFZhbCkpO1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlKHRoaXMuZGF0YXZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5VmFsdWUgPSBmaW5hbmNpYWxWYWwudG9GaXhlZChzdGVwVmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLm5nTW9kZWxPcHRpb25zLnVwZGF0ZU9uICE9PSAnYmx1cicpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YXZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UobnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJbnB1dCBtb2RlIGlzIGZpbmFuY2lhbCBhbmQgdHJhaWxpbmcgemVybyBpcyBzZXQgdG8gZmFsc2UsIE9uIGZvY3VzIHNldCBkaXNwbGF5IHZhbCB0byBmaXhlZCBwb2ludCBub3RhdGlvbiBhbmQgT24gYmx1ciBzdHJpcCB0cmFpbGluZyB6ZXJvc1xuICAgIC8vIEluIGN1cnJlbmN5LCBpbnB1dG1vZGUgaXMgbmF0dXJhbCBhbmQgdHJhaWxpbmcgemVybyBhbmQgc3RlcCBhcmUgZGVmaW5lZCwgb24gYmx1ciBkaXNwbGF5IHZhbCB0byBmaXhlZCBwb2ludCBub3RhdGlvbiBhbmQgb24gZm9jdXMgc3RyaXAgdGhlIHplcm9zXG4gICAgcHVibGljIGNoZWNrRm9yVHJhaWxpbmdaZXJvcygkZXZlbnQpIHtcbiAgICAgICAgY29uc3Qgc3RlcFZhbCA9IHRoaXMuc3RlcExlbmd0aCgpO1xuICAgICAgICBjb25zdCBmaW5hbmNpYWxNb2RlID0gIXRoaXMudHJhaWxpbmd6ZXJvICYmIHRoaXMuaW5wdXRtb2RlID09PSBJTlBVVE1PREUuRklOQU5DSUFMO1xuXG4gICAgICAgIC8vIElmIHRoZSB1c2VyJ3MgbGFzdCBpbnB1dCBpcyBhIGRlY2ltYWwgYW5kIG5vdCBhY3RpdmUgb24gaW5wdXQgZmllbGQsIHRocm93IGVycm9yXG4gICAgICAgIGlmICh0aGlzLmxhc3RWYWxJc0RlY2ltYWwpIHtcbiAgICAgICAgICAgIHRoaXMub25Nb2RlbENoYW5nZSh0aGlzLmRpc3BsYXlWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmaW5hbmNpYWxNb2RlICYmICF0aGlzLmlzTmF0dXJhbEN1cnJlbmN5KCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RlcFZhbCAmJiB0aGlzLmRhdGF2YWx1ZSkge1xuICAgICAgICAgICAgbGV0IG51bWJlcmZpbHRlcjtcbiAgICAgICAgICAgIGlmICgoZmluYW5jaWFsTW9kZSAmJiAkZXZlbnQudHlwZSA9PT0gJ2ZvY3VzJykgfHwgKHRoaXMuaXNOYXR1cmFsQ3VycmVuY3koKSAmJiAkZXZlbnQudHlwZSA9PT0gJ2JsdXInKSkge1xuICAgICAgICAgICAgICAgIG51bWJlcmZpbHRlciA9IGAxLiR7c3RlcFZhbH0tJHtzdGVwVmFsfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IHRoaXMudHJhbnNmb3JtTnVtYmVyKHRoaXMuZGF0YXZhbHVlLCBudW1iZXJmaWx0ZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmV0dXJucyB0aGUgbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIGEgbnVtYmVyIGhhdmUuXG4gICAgICogQHBhcmFtIHZhbHVlOiBudW1iZXJcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgICAqL1xuICAgIHByaXZhdGUgY291bnREZWNpbWFscyh2YWx1ZSkge1xuICAgICAgICBpZiAoKHZhbHVlICUgMSkgIT09IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGRlY2ltYWxWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoJy4nKVsxXTtcbiAgICAgICAgICAgIHJldHVybiBkZWNpbWFsVmFsdWUgJiYgZGVjaW1hbFZhbHVlLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBoYW5kbGVzIHRoZSBhcnJvdyBwcmVzcyBldmVudC4gSW5jcmVhc2VzIG9yIGRlY3JlYXNlcyB0aGUgbnVtYmVyLiB0cmlnZ2VyZWQgZm9tIHRoZSB0ZW1wbGF0ZVxuICAgICAqIEBwYXJhbSAkZXZlbnQga2V5Ym9hcmQgZXZlbnQuXG4gICAgICogQHBhcmFtIGtleSBpZGVudGlmaWVyIHRvIGluY3JlYXNlIG9yIGRlY3JlYXNlIHRoZSBudW1iZXIuXG4gICAgICovXG4gICAgcHVibGljIG9uQXJyb3dQcmVzcygkZXZlbnQsIGtleSkge1xuICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHRoaXMucmVhZG9ubHkgfHwgdGhpcy5zdGVwID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGFyZ2V0VmFsID0gJGV2ZW50LnRhcmdldC52YWx1ZS5yZXBsYWNlKC8sL2csICcnKTtcblxuICAgICAgICAvLyBwcm94eU1vZGVsIHRvIGJlIHVwZGF0ZWQgZnJvbSAkZXZlbnQudGFyZ2V0LnZhbHVlIGlmIHByZXNlbnQgdG8gc3VwcG9ydCBhcnJvdyBrZXlzIHdoZW4gaW5wdXQgY2hhbmdlcyBlbHNlIHBpY2sgdXAgZnJvbSB0aGlzLnByb3h5bW9kZWxcbiAgICAgICAgbGV0IHByb3h5TW9kZWw7XG4gICAgICAgIGlmICh0YXJnZXRWYWwgJiYgIWlzTmFOKHBhcnNlRmxvYXQodGFyZ2V0VmFsKSkpIHtcbiAgICAgICAgICAgIHByb3h5TW9kZWwgPSBwYXJzZUZsb2F0KHRhcmdldFZhbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcm94eU1vZGVsID0gdGhpcy5wcm94eU1vZGVsO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHZhbHVlO1xuXG4gICAgICAgIC8vIGlmIHRoZSBudW1iZXIgaXMgbm90IGluIHJhbmdlIGFuZCB3aGVuIGFycm93IGJ1dHRvbnMgYXJlIHByZXNzZWQgbmVlZCB0byBnZXQgYXBwcm9wcmlhdGUgbnVtYmVyIHZhbHVlLlxuICAgICAgICBpZiAodGhpcy5udW1iZXJOb3RJblJhbmdlKSB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dFZhbHVlID0gdGhpcy5wYXJzZU51bWJlcih0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudC52YWx1ZSk7XG4gICAgICAgICAgICAvLyB0YWtlIHRoZSB0ZXh0Ym94IHZhbHVlIGFzIGN1cnJlbnQgbW9kZWwgaWYgdGhlIHZhbHVlIGlzIHZhbGlkLlxuICAgICAgICAgICAgaWYgKCFpc05hTihpbnB1dFZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5nZXRWYWx1ZUluUmFuZ2UoaW5wdXRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgcHJveHlNb2RlbCA9IGlucHV0VmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldFZhbGlkYXRpb25zKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQocHJveHlNb2RlbCkgfHwgaXNOdWxsKHByb3h5TW9kZWwpKSB7XG4gICAgICAgICAgICAgICAgcHJveHlNb2RlbCA9IHZhbHVlID0gdGhpcy5nZXRWYWx1ZUluUmFuZ2UoKHRoaXMubWludmFsdWUgfHwgMCkpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRWYWxpZGF0aW9ucygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWVJblJhbmdlKHByb3h5TW9kZWwgKyAoa2V5ID09PSAnVVAnID8gdGhpcy5zdGVwIDogLXRoaXMuc3RlcCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICgoa2V5ID09PSAnVVAnICYmIHByb3h5TW9kZWwgPD0gdmFsdWUpIHx8IChrZXkgPT09ICdET1dOJyAmJiBwcm94eU1vZGVsID49IHZhbHVlKSkge1xuICAgICAgICAgICAgY29uc3QgZGVjaW1hbFJvdW5kVmFsdWUgPSBNYXRoLm1heCh0aGlzLmNvdW50RGVjaW1hbHMocHJveHlNb2RlbCksIHRoaXMuY291bnREZWNpbWFscyh0aGlzLnN0ZXApKTtcblxuICAgICAgICAgICAgLy8gdXBkYXRlIHRoZSBtb2RlbFByb3h5LlxuICAgICAgICAgICAgdGhpcy5wcm94eU1vZGVsID0gcm91bmQodmFsdWUsIGRlY2ltYWxSb3VuZFZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGlzcGxheVRleHQoKTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlKHRoaXMucHJveHlNb2RlbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBtZXRob2QgaXMgY2FsbGVkIGZyb20gdGhlIGZyb20gd2lkZ2V0LiB0byBjaGVjayB3aGV0aGVyIHRoZSB2YWx1ZSBlbnRlcmVkIGlzIHZhbGlkIG9yIG5vdC5cbiAgICAgKiBAcmV0dXJucyB7b2JqZWN0fVxuICAgICAqL1xuICAgIHB1YmxpYyB2YWxpZGF0ZShjOiBBYnN0cmFjdENvbnRyb2wpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNJbnZhbGlkTnVtYmVyKSB7XG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlVHlwZSA9ICcnO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBpbnZhbGlkTnVtYmVyOiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkOiBmYWxzZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm51bWJlck5vdEluUmFuZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbnVtYmVyTm90SW5SYW5nZToge1xuICAgICAgICAgICAgICAgICAgICB2YWxpZDogZmFsc2VcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhbGlkYXRlVHlwZSA9ICcnO1xuICAgICAgICAvKiBXTVMtMTgyNjkgfCBFeHRlbmRpbmcgdGhlIGV4aXN0aW5nIHZhbGlkYXRpb24gZm9yICdyZXF1aXJlZCcgKi9cbiAgICAgICAgaWYgKHRoaXNbJ3Nob3cnXSAmJiB0aGlzWydyZXF1aXJlZCddKSB7XG4gICAgICAgICAgICByZXR1cm4gKCEhYy52YWx1ZSB8fCBjLnZhbHVlID09PSAwKSA/IG51bGwgOiB7IHJlcXVpcmVkOiB0cnVlIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIHZhbGlkYXRlSW5wdXRFbnRyeSgkZXZlbnQpIHtcblxuICAgICAgICB0aGlzLmlzRGVmYXVsdFF1ZXJ5ID0gZmFsc2U7XG5cbiAgICAgICAgLy8gYWxsb3cgYWN0aW9ucyBpZiBjb250cm9sIGtleSBpcyBwcmVzc2VkIG9yIGlmIGJhY2tzcGFjZSBpcyBwcmVzc2VkLiAoZm9yIE1vemlsbGEpLlxuICAgICAgICBpZiAoJGV2ZW50LmN0cmxLZXkgfHwgaW5jbHVkZXMoWydCYWNrc3BhY2UnLCAnQXJyb3dSaWdodCcsICdBcnJvd0xlZnQnLCAnVGFiJywgJ0VudGVyJywgJ0RlbGV0ZSddLCAkZXZlbnQua2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmFsaWRpdHkgPSBuZXcgUmVnRXhwKGBeW1xcXFxkXFxcXHMtLC5lKyR7dGhpcy5HUk9VUH0ke3RoaXMuREVDSU1BTH1dJGAsICdpJyk7XG4gICAgICAgIGNvbnN0IGlucHV0VmFsdWUgPSAkZXZlbnQudGFyZ2V0LnZhbHVlO1xuXG4gICAgICAgIC8vIHdoZW4gaW5wdXQgbW9kZSBpcyBmaW5hbmNpYWwsIGRvIG5vdCByZXN0cmljdCB1c2VyIG9uIGVudGVyaW5nIHRoZSB2YWx1ZSB3aGVuIHN0ZXAgdmFsdWUgbGltaXQgaXMgcmVhY2hlZC5cbiAgICAgICAgY29uc3Qgc2tpcFN0ZXBWYWxpZGF0aW9uID0gdGhpcy5pbnB1dG1vZGUgPT09IElOUFVUTU9ERS5GSU5BTkNJQUw7XG5cbiAgICAgICAgLy8gVmFsaWRhdGVzIGlmIHVzZXIgZW5ldGVycyBtb3JlIHRoYW4gMTYgZGlnaXRzXG4gICAgICAgIGlmIChpbnB1dFZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRWYWwgPSAgcGFyc2VJbnQoaW5wdXRWYWx1ZS50b1N0cmluZygpLnJlcGxhY2UoL1xcRC9nLCcnKSk7XG4gICAgICAgICAgICBpZiAocGFyc2VkVmFsLnRvU3RyaW5nKCkubGVuZ3RoID4gMTUpIHtcbiAgICAgICAgICAgICAgICAvLyBXTVMtMjIzMjE6IElmIHRoZSBudW1iZXIgaXMgZ3JlYXRlciB0aGFuIE1BWF9TQUZFX0lOVEVHRVIgKG1vcmUgdGhhbiAxNSBudW1iZXJzKS5cbiAgICAgICAgICAgICAgICAvLyB1c2VyIHNlbGVjdHMgYSByYW5nZSBvZiBkaWdpdHMgYW5kIHByZXNzZXMgYSBrZXkuXG4gICAgICAgICAgICAgICAgLy8gRG8gbm90IHRocm93IHZhbGlkYXRpb24gb2YgZXhjZWVkZWQgbnVtYmVyIGFzIHNlbGVjdGVkIHJhbmdlIHZhbHVlIHdpbGwgYmUgZGVsZXRlZC5cbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZFZhbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRWYWwgJiYgc2VsZWN0ZWRWYWwudG9TdHJpbmcoKSAmJiBzZWxlY3RlZFZhbC5mb2N1c05vZGUgPT09IHRoaXMubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdmFsaWRhdGVzIGVudGVyaW5nIG9mIGRlY2ltYWwgdmFsdWVzIG9ubHkgd2hlbiB1c2VyIHByb3ZpZGVzIGRlY2ltYWwgbGltaXQoaS5lIHN0ZXAgY29udGFpbnMgZGVjaW1hbCB2YWx1ZXMpLlxuICAgICAgICAvLyBSZXN0cmljdCB1c2VyIGZyb20gZW50ZXJpbmcgb25seSBpZiB0aGUgZGVjaW1hbCBsaW1pdCBpcyByZWFjaGVkIGFuZCB0aGUgbmV3IGRpZ2l0IGlzIGVudGVyZWQgaW4gZGVjaW1hbCBwbGFjZVxuICAgICAgICAvLyBpZiAoIXNraXBTdGVwVmFsaWRhdGlvbiAmJiBpbnB1dFZhbHVlICYmIHRoaXMuY291bnREZWNpbWFscyh0aGlzLnN0ZXApICYmICh0aGlzLmNvdW50RGVjaW1hbHMoaW5wdXRWYWx1ZSkgPj0gdGhpcy5jb3VudERlY2ltYWxzKHRoaXMuc3RlcCkpICYmICRldmVudC50YXJnZXQuc2VsZWN0aW9uU3RhcnQgPj0gaW5wdXRWYWx1ZS5sZW5ndGggLSAxKSB7XG4gICAgICAgIC8vICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy8gdmFsaWRhdGVzIGlmIHVzZXIgZW50ZXJlZCBhbiBpbnZhbGlkIGNoYXJhY3Rlci5cbiAgICAgICAgaWYgKCF2YWxpZGl0eS50ZXN0KCRldmVudC5rZXkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZih0aGlzLmlucHV0bW9kZSA9PT0gSU5QVVRNT0RFLk5BVFVSQUwgJiYgIWlzTmFOKHRoaXMuZGVjaW1hbHBsYWNlcykpIHtcbiAgICAgICAgICAgIGlmKHRoaXMuZGVjaW1hbHBsYWNlcyA9PT0gMCAmJiB0aGlzLkRFQ0lNQUwgPT09ICRldmVudC5rZXkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwYXJ0cyA9IGluY2x1ZGVzKGlucHV0VmFsdWUsIHRoaXMuREVDSU1BTCkgPyAoaW5wdXRWYWx1ZSBhcyBhbnkpLnNwbGl0KHRoaXMuREVDSU1BTCkgOiBpbnB1dFZhbHVlLnNwbGl0KCcuJyk7XG4gICAgICAgICAgICBjb25zdCBpc0N1cnNvclBvc2l0aW9uQXREZWNpbWFsUGxhY2UgPSAkZXZlbnQudGFyZ2V0LnNlbGVjdGlvblN0YXJ0ID4gcGFydHNbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgaWYodGhpcy5kZWNpbWFscGxhY2VzID4gMCAmJiB0aGlzLmNvdW50RGVjaW1hbHMoaW5wdXRWYWx1ZSkgPj0gdGhpcy5kZWNpbWFscGxhY2VzICYmIGlzQ3Vyc29yUG9zaXRpb25BdERlY2ltYWxQbGFjZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNvbW1hIGNhbm5vdCBiZSBlbnRlcmVkIGNvbnNlY3V0aXZlbHlcbiAgICAgICAgaWYgKGluY2x1ZGVzKGlucHV0VmFsdWUsICcsJykgJiYgaW5wdXRWYWx1ZVtpbnB1dFZhbHVlLmxlbmd0aCAtIDFdID09PSAnLCcgJiYgJGV2ZW50LmtleSA9PT0gJywnKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhIGRlY2ltYWwgdmFsdWUgY2FuIGJlIGVudGVyZWQgb25seSBvbmNlIGluIHRoZSBpbnB1dC5cbiAgICAgICAgaWYgKGluY2x1ZGVzKGlucHV0VmFsdWUsIHRoaXMuREVDSU1BTCkgJiYgJGV2ZW50LmtleSA9PT0gdGhpcy5ERUNJTUFMKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gJ2UnIGNhbiBiZSBlbnRlcmVkIG9ubHkgb25jZSBpbiB0aGUgaW5wdXQuXG4gICAgICAgIGlmIChpbnRlcnNlY3Rpb24odG9BcnJheShpbnB1dFZhbHVlKSwgWydlJywgJ0UnXSkubGVuZ3RoICYmIGluY2x1ZGVzKCdlRScsICRldmVudC5rZXkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKChpbmNsdWRlcyhpbnB1dFZhbHVlLCAnKycpIHx8IGluY2x1ZGVzKGlucHV0VmFsdWUsICctJykpICYmICgkZXZlbnQua2V5ID09PSAnKycgfHwgJGV2ZW50LmtleSA9PT0gJy0nKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIERvIG5vdCBhbGxvdyB1c2VyIHRvIGVudGVyIG9ubHkgc3BhY2Ugd2l0aG91dCBhbnkgaW5wdXQgdmFsdWVcbiAgICAgICAgaWYgKCFpbnB1dFZhbHVlICYmICRldmVudC5jb2RlID09PSAnU3BhY2UnKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkJhY2tzcGFjZSgkZXZlbnQpIHtcbiAgICAgICAgdGhpcy5pc0RlZmF1bHRRdWVyeSA9IGZhbHNlO1xuICAgIH1cblxuICAgIG9uRW50ZXIoJGV2ZW50KSB7XG4gICAgICAgIHRoaXMuZGF0YXZhbHVlID0gJGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICB9XG5cbiAgICBvbk1vZGVsQ2hhbmdlKCRldmVudCkge1xuICAgICAgICBpZiAodGhpcy5pbnB1dG1vZGUgPT09IElOUFVUTU9ERS5OQVRVUkFMIHx8ICh0aGlzLmlucHV0bW9kZSA9PT0gSU5QVVRNT0RFLkZJTkFOQ0lBTCAmJiB0aGlzLm5nTW9kZWxPcHRpb25zLnVwZGF0ZU9uID09PSAnYmx1cicpKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGF2YWx1ZSA9ICRldmVudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uUHJvcGVydHlDaGFuZ2Uoa2V5LCBudiwgb3Y/KSB7XG4gICAgICAgIGlmIChrZXkgPT09ICdtaW52YWx1ZScgfHwga2V5ID09PSAnbWF4dmFsdWUnKSB7XG4gICAgICAgICAgICB0aGlzLmlzVmFsaWQobnYpO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2RhdGF2YWx1ZScgJiYgIW92KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc05hdHVyYWxDdXJyZW5jeSgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja0ZvclRyYWlsaW5nWmVyb3Moe3R5cGU6ICdibHVyJ30pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uSW5wdXRDaGFuZ2UobnYpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3VwZXIub25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdik7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
@@ -1238,6 +1238,7 @@ const numberProps = new Map([
1238
1238
  ['trailingzero', { value: false, ...PROP_BOOLEAN }],
1239
1239
  ['updateon', PROP_STRING],
1240
1240
  ['inputmode', { value: 'natural', ...PROP_STRING }],
1241
+ ['decimalplaces', PROP_NUMBER],
1241
1242
  ['conditionalclass', PROP_ANY],
1242
1243
  ['conditionalstyle', PROP_ANY]
1243
1244
  ]);
@@ -1364,8 +1365,25 @@ let NumberLocale = class NumberLocale extends BaseInput {
1364
1365
  if (this.isDefaultQuery) {
1365
1366
  const isLocalizedNumber = isString(value) && includes(value, this.DECIMAL);
1366
1367
  const parts = isLocalizedNumber ? value.split(this.DECIMAL) : isString(value) && value.split('.');
1367
- this.decimalValue = parts[1] || '';
1368
- value = isLocalizedNumber ? value : this.transformNumber(value);
1368
+ if (this.inputmode === INPUTMODE.NATURAL && !isNaN(this.decimalplaces)) {
1369
+ if (this.decimalplaces === 0) {
1370
+ this.decimalValue = '';
1371
+ value = isLocalizedNumber ? parts[0] : this.transformNumber(value);
1372
+ }
1373
+ if (this.decimalplaces > 0) {
1374
+ this.decimalValue = parts[1] && parts[1].substring(0, this.decimalplaces) || '';
1375
+ if (isLocalizedNumber) {
1376
+ value = this.decimalValue.length ? `${parts[0]}${this.DECIMAL}${this.decimalValue}` : parts[0];
1377
+ }
1378
+ else {
1379
+ value = Number.parseFloat(String(value)).toFixed(this.decimalplaces);
1380
+ }
1381
+ }
1382
+ }
1383
+ else {
1384
+ this.decimalValue = parts[1] || '';
1385
+ value = isLocalizedNumber ? value : this.transformNumber(value);
1386
+ }
1369
1387
  }
1370
1388
  const numberReg = /\d/;
1371
1389
  const strVal = value.toString();
@@ -1414,8 +1432,14 @@ let NumberLocale = class NumberLocale extends BaseInput {
1414
1432
  */
1415
1433
  isValid(val) {
1416
1434
  // id number is infinite then consider it as invalid value
1417
- if (isNaN(val) || !isFinite(val) || (!Number.isInteger(this.step) &&
1418
- this.countDecimals(val) > this.countDecimals(this.step))) {
1435
+ let invalidDecimalPlaces = false;
1436
+ if (this.inputmode === INPUTMODE.NATURAL && !isNaN(this.decimalplaces) && this.decimalplaces >= 0) {
1437
+ invalidDecimalPlaces = this.countDecimals(val) > this.decimalplaces;
1438
+ }
1439
+ else if (!Number.isInteger(this.step) && this.countDecimals(val) > this.countDecimals(this.step)) {
1440
+ invalidDecimalPlaces = true;
1441
+ }
1442
+ if (isNaN(val) || !isFinite(val) || invalidDecimalPlaces) {
1419
1443
  this.isInvalidNumber = true;
1420
1444
  return false;
1421
1445
  }
@@ -1524,6 +1548,9 @@ let NumberLocale = class NumberLocale extends BaseInput {
1524
1548
  }
1525
1549
  // This function returns the step length set in the studio
1526
1550
  stepLength() {
1551
+ if (this.inputmode === 'INPUTMODE.NATURAL' && !isNaN(this.decimalplaces) && this.decimalplaces >= 0) {
1552
+ return this.decimalplaces;
1553
+ }
1527
1554
  const stepLen = this.step.toString().split('.');
1528
1555
  if (stepLen.length === 1) {
1529
1556
  return;
@@ -1712,13 +1739,23 @@ let NumberLocale = class NumberLocale extends BaseInput {
1712
1739
  }
1713
1740
  // validates entering of decimal values only when user provides decimal limit(i.e step contains decimal values).
1714
1741
  // Restrict user from entering only if the decimal limit is reached and the new digit is entered in decimal place
1715
- if (!skipStepValidation && inputValue && this.countDecimals(this.step) && (this.countDecimals(inputValue) >= this.countDecimals(this.step)) && $event.target.selectionStart >= inputValue.length - 1) {
1716
- return false;
1717
- }
1742
+ // if (!skipStepValidation && inputValue && this.countDecimals(this.step) && (this.countDecimals(inputValue) >= this.countDecimals(this.step)) && $event.target.selectionStart >= inputValue.length - 1) {
1743
+ // return false;
1744
+ // }
1718
1745
  // validates if user entered an invalid character.
1719
1746
  if (!validity.test($event.key)) {
1720
1747
  return false;
1721
1748
  }
1749
+ if (this.inputmode === INPUTMODE.NATURAL && !isNaN(this.decimalplaces)) {
1750
+ if (this.decimalplaces === 0 && this.DECIMAL === $event.key) {
1751
+ return false;
1752
+ }
1753
+ const parts = includes(inputValue, this.DECIMAL) ? inputValue.split(this.DECIMAL) : inputValue.split('.');
1754
+ const isCursorPositionAtDecimalPlace = $event.target.selectionStart > parts[0].length;
1755
+ if (this.decimalplaces > 0 && this.countDecimals(inputValue) >= this.decimalplaces && isCursorPositionAtDecimalPlace) {
1756
+ return false;
1757
+ }
1758
+ }
1722
1759
  // comma cannot be entered consecutively
1723
1760
  if (includes(inputValue, ',') && inputValue[inputValue.length - 1] === ',' && $event.key === ',') {
1724
1761
  return false;