@wavemaker/app-ng-runtime 12.0.0-next.141138 → 12.0.0-next.141142
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.
- app-ng-runtime/build-task/bundles/index.umd.js +2 -2
- app-ng-runtime/build-task/esm2022/data/form/form-field/form-field.build.mjs +3 -3
- app-ng-runtime/build-task/fesm2022/index.mjs +2 -2
- app-ng-runtime/build-task/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/base/bundles/index.umd.js +7 -0
- app-ng-runtime/components/base/esm2022/widgets/common/base/dataset-aware-nav.component.mjs +8 -1
- app-ng-runtime/components/base/fesm2022/index.mjs +7 -0
- app-ng-runtime/components/base/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/base/widgets/common/base/dataset-aware-nav.component.d.ts +2 -0
- app-ng-runtime/components/chart/bundles/index.umd.js +2 -1
- app-ng-runtime/components/chart/esm2022/chart.utils.mjs +3 -2
- app-ng-runtime/components/chart/fesm2022/index.mjs +2 -1
- app-ng-runtime/components/chart/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/data/list/bundles/index.umd.js +8 -0
- app-ng-runtime/components/data/list/esm2022/list-item.directive.mjs +10 -1
- app-ng-runtime/components/data/list/fesm2022/index.mjs +9 -1
- app-ng-runtime/components/data/list/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/data/pagination/bundles/index.umd.js +2 -2
- app-ng-runtime/components/data/pagination/esm2022/pagination.component.mjs +3 -3
- app-ng-runtime/components/data/pagination/fesm2022/index.mjs +2 -2
- app-ng-runtime/components/data/pagination/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/input/chips/bundles/index.umd.js +19 -5
- app-ng-runtime/components/input/chips/esm2022/chips.component.mjs +20 -6
- app-ng-runtime/components/input/chips/fesm2022/index.mjs +19 -5
- app-ng-runtime/components/input/chips/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/input/default/base-form.component.d.ts +1 -0
- app-ng-runtime/components/input/default/bundles/index.umd.js +33 -9
- app-ng-runtime/components/input/default/esm2022/base-form.component.mjs +6 -3
- app-ng-runtime/components/input/default/esm2022/number/number.component.mjs +4 -4
- app-ng-runtime/components/input/default/esm2022/text/locale/number-locale.mjs +26 -5
- app-ng-runtime/components/input/default/fesm2022/index.mjs +33 -9
- app-ng-runtime/components/input/default/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/input/default/text/locale/number-locale.d.ts +1 -0
- app-ng-runtime/components/input/epoch/base-date-time.component.d.ts +1 -0
- app-ng-runtime/components/input/epoch/bundles/index.umd.js +4 -0
- app-ng-runtime/components/input/epoch/esm2022/base-date-time.component.mjs +4 -1
- app-ng-runtime/components/input/epoch/esm2022/date/date.props.mjs +2 -1
- app-ng-runtime/components/input/epoch/fesm2022/index.mjs +4 -0
- app-ng-runtime/components/input/epoch/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/navigation/menu/bundles/index.umd.js +3 -2
- app-ng-runtime/components/navigation/menu/esm2022/nav/nav.component.mjs +3 -3
- app-ng-runtime/components/navigation/menu/esm2022/nav/nav.props.mjs +2 -1
- app-ng-runtime/components/navigation/menu/fesm2022/index.mjs +3 -2
- app-ng-runtime/components/navigation/menu/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/package.json +1 -1
- app-ng-runtime/scripts/datatable/datatable.js +3 -0
|
@@ -247,7 +247,9 @@ let NumberLocale = class NumberLocale extends BaseInput {
|
|
|
247
247
|
onInputChange(value) {
|
|
248
248
|
const stepVal = this.stepLength();
|
|
249
249
|
// WMS-22355, Trigger change cb if value exists or value is empty but datavalue exists (when value is selected and deleted).
|
|
250
|
-
|
|
250
|
+
// Fix for [WMS-27041]: Ensure the change callback for the number widget triggers only on focus out (when updateon is set to blur),
|
|
251
|
+
// not during initial input when the previous value is undefined and the current value is null.
|
|
252
|
+
if ((isDefined(value) && (value !== '' || this.datavalue)) && !(this.widgetType === 'wm-number' && this.getPrevDataValue() === undefined && this.datavalue == null)) {
|
|
251
253
|
this.handleChange(value);
|
|
252
254
|
}
|
|
253
255
|
else {
|
|
@@ -309,9 +311,25 @@ let NumberLocale = class NumberLocale extends BaseInput {
|
|
|
309
311
|
* @returns {number}
|
|
310
312
|
*/
|
|
311
313
|
countDecimals(value) {
|
|
312
|
-
const
|
|
313
|
-
|
|
314
|
-
|
|
314
|
+
const num = Number(value);
|
|
315
|
+
if (num === 0) {
|
|
316
|
+
return 0;
|
|
317
|
+
}
|
|
318
|
+
// Convert to number and handle scientific notation
|
|
319
|
+
if (Number.isNaN(num))
|
|
320
|
+
return 0;
|
|
321
|
+
// Get the exponential form to handle scientific notation properly
|
|
322
|
+
const exponentialStr = num.toExponential();
|
|
323
|
+
const match = exponentialStr.match(/^-?\d*\.?(\d+)?e([+-]\d+)$/);
|
|
324
|
+
if (match) {
|
|
325
|
+
const decimals = match[1] ? match[1].length : 0;
|
|
326
|
+
const exponent = parseInt(match[2]);
|
|
327
|
+
return Math.max(0, decimals - exponent);
|
|
328
|
+
}
|
|
329
|
+
// Fallback to regular decimal counting
|
|
330
|
+
const decimalStr = num.toString();
|
|
331
|
+
const isLocalizedNumber = includes(decimalStr, this.DECIMAL);
|
|
332
|
+
const parts = isLocalizedNumber ? decimalStr.split(this.DECIMAL) : decimalStr.split('.');
|
|
315
333
|
return parts[1] ? parts[1].length : 0;
|
|
316
334
|
}
|
|
317
335
|
/**
|
|
@@ -454,6 +472,9 @@ let NumberLocale = class NumberLocale extends BaseInput {
|
|
|
454
472
|
onBackspace($event) {
|
|
455
473
|
this.isDefaultQuery = false;
|
|
456
474
|
}
|
|
475
|
+
onDelete($event) {
|
|
476
|
+
this.isDefaultQuery = false;
|
|
477
|
+
}
|
|
457
478
|
onEnter($event) {
|
|
458
479
|
this.datavalue = $event.target.value;
|
|
459
480
|
}
|
|
@@ -486,4 +507,4 @@ NumberLocale = __decorate([
|
|
|
486
507
|
TrailingZeroDecimalPipe, Object])
|
|
487
508
|
], NumberLocale);
|
|
488
509
|
export { NumberLocale };
|
|
489
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtYmVyLWxvY2FsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9pbnB1dC9kZWZhdWx0L3NyYy90ZXh0L2xvY2FsZS9udW1iZXItbG9jYWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFekQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXRFLE9BQU8sRUFBQyxtQkFBbUIsRUFBRSxTQUFTLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDeEQsT0FBTyxFQUFpQix1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV4RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0MsT0FBTyxFQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVoRyxJQUFzQixZQUFZLEdBQWxDLE1BQXNCLFlBQWEsU0FBUSxTQUFTO0lBeUJoRCxZQUNJLEdBQWEsRUFDYixNQUFxQixFQUNiLFdBQWdDLEVBQ2hDLHVCQUFnRCxFQUNoQixlQUFvQjtRQUU1RCxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxlQUFlLENBQUMsQ0FBQztRQUo1QixnQkFBVyxHQUFYLFdBQVcsQ0FBcUI7UUFDaEMsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUF5QjtRQXRCcEQsbUJBQWMsR0FBWSxJQUFJLENBQUM7UUFDL0IsaUJBQVksR0FBVyxFQUFFLENBQUM7UUF5QjlCLElBQUksQ0FBQyxjQUFjLEdBQUcsV0FBVyxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDdEQsSUFBSSxDQUFD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WSxDQThnQmpDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3QsIEluamVjdG9yLCBPcHRpb25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGdldExvY2FsZU51bWJlclN5bWJvbCwgTnVtYmVyU3ltYm9sIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHtBYnN0cmFjdEkxOG5TZXJ2aWNlLCBpc0RlZmluZWR9IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7IElXaWRnZXRDb25maWcsIFRyYWlsaW5nWmVyb0RlY2ltYWxQaXBlLCBJTlBVVE1PREUgfSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNlJztcblxuaW1wb3J0IHsgQmFzZUlucHV0IH0gZnJvbSAnLi4vYmFzZS9iYXNlLWlucHV0JztcbmltcG9ydCB7aW5jbHVkZXMsIGludGVyc2VjdGlvbiwgaXNOdWxsLCBpc1N0cmluZywgaXNVbmRlZmluZWQsIHJvdW5kLCB0b0FycmF5fSBmcm9tIFwibG9kYXNoLWVzXCI7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBOdW1iZXJMb2NhbGUgZXh0ZW5kcyBCYXNlSW5wdXQgaW1wbGVtZW50cyBWYWxpZGF0b3Ige1xuICAgIHByaXZhdGUgREVDSU1BTDogc3RyaW5nO1xuICAgIHByaXZhdGUgR1JPVVA6IHN0cmluZztcbiAgICBwcml2YXRlIHNlbGVjdGVkTG9jYWxlOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBwcm94eU1vZGVsOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBudW1iZXJOb3RJblJhbmdlOiBib29sZWFuO1xuICAgIHByaXZhdGUgaXNJbnZhbGlkTnVtYmVyOiBib29sZWFuO1xuICAgIHByaXZhdGUgaXNEZWZhdWx0UXVlcnk6IGJvb2xlYW4gPSB0cnVlO1xuICAgIHByaXZhdGUgZGVjaW1hbFZhbHVlOiBzdHJpbmcgPSAnJztcbiAgICBwdWJsaWMgZGlzcGxheVZhbHVlOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBudW1iZXJmaWx0ZXI6IHN0cmluZztcbiAgICBwcml2YXRlIGxvY2FsZWZpbHRlcjogc3RyaW5nO1xuICAgIHB1YmxpYyByZWFkb25seTogYm9vbGVhbjtcblxuICAgIHB1YmxpYyBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICAgIHB1YmxpYyBtaW52YWx1ZTogbnVtYmVyO1xuICAgIHB1YmxpYyBtYXh2YWx1ZTogbnVtYmVyO1xuICAgIHB1YmxpYyB1cGRhdGVvbjogc3RyaW5nO1xuICAgIHB1YmxpYyBzdGVwOiBudW1iZXI7XG4gICAgcHVibGljIHRyYWlsaW5nemVybzogYm9vbGVhbjtcbiAgICBwcml2YXRlIHZhbGlkYXRlVHlwZTogc3RyaW5nO1xuICAgIHB1YmxpYyBpbnB1dG1vZGU6IHN0cmluZztcbiAgICBwdWJsaWMgZGVjaW1hbHBsYWNlczogbnVtYmVyO1xuICAgIHByaXZhdGUgbGFzdFZhbElzRGVjaW1hbDogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBpbmo6IEluamVjdG9yLFxuICAgICAgICBjb25maWc6IElXaWRnZXRDb25maWcsXG4gICAgICAgIHByaXZhdGUgaTE4blNlcnZpY2U6IEFic3RyYWN0STE4blNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdHJhaWxpbmdaZXJvRGVjaW1hbFBpcGU6IFRyYWlsaW5nWmVyb0RlY2ltYWxQaXBlLFxuICAgICAgICBASW5qZWN0KCdFWFBMSUNJVF9DT05URVhUJykgQE9wdGlvbmFsKCkgZXhwbGljaXRDb250ZXh0OiBhbnlcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaW5qLCBjb25maWcsIGV4cGxpY2l0Q29udGV4dCk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMb2NhbGUgPSBpMThuU2VydmljZS5nZXRTZWxlY3RlZExvY2FsZSgpO1xuICAgICAgICB0aGlzLkRFQ0lNQUwgPSBnZXRMb2NhbGVOdW1iZXJTeW1ib2wodGhpcy5sb2NhbGVmaWx0ZXIgfHwgdGhpcy5zZWxlY3RlZExvY2FsZSwgTnVtYmVyU3ltYm9sLkRlY2ltYWwpO1xuICAgICAgICB0aGlzLkdST1VQID0gZ2V0TG9jYWxlTnVtYmVyU3ltYm9sKHRoaXMubG9jYWxlZmlsdGVyIHx8IHRoaXMuc2VsZWN0ZWRMb2NhbGUsIE51bWJlclN5bWJvbC5Hcm91cCk7XG4gICAgICAgIHRoaXMubnVtYmVyZmlsdGVyID0gJzEuMC0xNic7XG4gICAgICAgIHRoaXMucmVzZXRWYWxpZGF0aW9ucygpO1xuICAgIH1cblxuICAgIC8vIFNldHRlciBmb3IgdGhlIGRhdGF2YWx1ZS5cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgc2V0IGRhdGF2YWx1ZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMubGFzdFZhbElzRGVjaW1hbCA9IGZhbHNlO1xuXG4gICAgICAgIC8vIHNldCB0ZXh0IHZhbHVlIHRvIG51bGwgaWYgZGF0YSB2YWx1ZSBpcyBlbXB0eS5cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBpZiAoaW5jbHVkZXMoW251bGwsIHVuZGVmaW5lZCwgJyddLCB2YWx1ZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBwcmV2RGF0YVZhbHVlID0gICh0aGlzIGFzIGFueSkucHJldkRhdGF2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gaW5wdXQudmFsdWUgPSB0aGlzLnByb3h5TW9kZWwgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5yZXNldFZhbGlkYXRpb25zKCk7XG4gICAgICAgICAgICBpZiAoKHByZXZEYXRhVmFsdWUgfHwgcHJldkRhdGFWYWx1ZSA9PSAwKSAmJiAhdGhpcy5pc0RlZmF1bHRRdWVyeSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9vbkNoYW5nZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHRoZSB3aWRnZXQgaGFzIGRlZmF1bHQgdmFsdWUgYW5kIGlmIHdlIGNoYW5nZSB0aGUgbG9jYWxlLCB0aGUgdmFsdWUgc2hvdWxkIGJlIGluIHNlbGVjdGVkIGxvY2FsZSBmb3JtYXQuXG4gICAgICAgIGlmICh0aGlzLmlzRGVmYXVsdFF1ZXJ5KSB7XG4gICAgICAgICAgICBjb25zdCBpc0xvY2FsaXplZE51bWJlciA9IGlzU3RyaW5nKHZhbHVlKSAmJiBpbmNsdWRlcyh2YWx1ZSwgdGhpcy5ERUNJTUFMKTtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRzID0gaXNMb2NhbGl6ZWROdW1iZXIgPyAodmFsdWUgYXMgYW55KS5zcGxpdCh0aGlzLkRFQ0lNQUwpIDogaXNTdHJpbmcodmFsdWUpICYmICh2YWx1ZSBhcyBhbnkpLnNwbGl0KCcuJyk7XG5cbiAgICAgICAgICAgIGxldCBkZWNpbWFsUGxhY2VzQXR0clZhbCA9IHRoaXMuZ2V0QXR0cignZGVjaW1hbHBsYWNlcycpO1xuICAgICAgICAgICAgY29uc3QgZGVjaW1hbHBsYWNlcyA9IGRlY2ltYWxQbGFjZXNBdHRyVmFsICE9PSAnJyAmJiBkZWNpbWFsUGxhY2VzQXR0clZhbCAhPT0gdW5kZWZpbmVkID8gTnVtYmVyKGRlY2ltYWxQbGFjZXNBdHRyVmFsKSA6IE5hTjtcbiAgICAgICAgICAgIGlmKHRoaXMuaW5wdXRtb2RlID09PSBJTlBVVE1PREUuTkFUVVJBTCAmJiAhaXNOYU4oZGVjaW1hbHBsYWNlcykpIHtcbiAgICAgICAgICAgICAgICBpZihkZWNpbWFscGxhY2VzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVjaW1hbFZhbHVlID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICh2YWx1ZSBhcyBhbnkpID0gaXNMb2NhbGl6ZWROdW1iZXIgPyBwYXJ0c1swXSA6IHRoaXMudHJhbnNmb3JtTnVtYmVyKHBhcnRzWzBdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYoZGVjaW1hbHBsYWNlcyA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWNpbWFsVmFsdWUgPSBwYXJ0c1sxXSAmJiBwYXJ0c1sxXS5zdWJzdHJpbmcoMCwgZGVjaW1hbHBsYWNlcykgfHwgJyc7XG4gICAgICAgICAgICAgICAgICAgIGlmKGlzTG9jYWxpemVkTnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAodmFsdWUgYXMgYW55KSA9IHRoaXMuZGVjaW1hbFZhbHVlLmxlbmd0aCA/IGAke3BhcnRzWzBdfSR7dGhpcy5ERUNJTUFMfSR7dGhpcy5kZWNpbWFsVmFsdWV9YCA6IHBhcnRzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlIGFzIGFueSkgPSBOdW1iZXIucGFyc2VGbG9hdChTdHJpbmcodmFsdWUpKS50b0ZpeGVkKGRlY2ltYWxwbGFjZXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlY2ltYWxWYWx1ZSA9IHBhcnRzWzFdIHx8ICcnO1xuICAgICAgICAgICAgICAgICh2YWx1ZSBhcyBhbnkpID0gaXNMb2NhbGl6ZWROdW1iZXIgPyB2YWx1ZSA6IHRoaXMudHJhbnNmb3JtTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG51bWJlclJlZyA9IC9cXGQvO1xuICAgICAgICBjb25zdCBzdHJWYWwgPSB2YWx1ZS50b1N0cmluZygpO1xuICAgICAgICBsZXQgbW9kZWw7XG4gICAgICAgIC8vIFdoZW4gdGhlIGlucHV0IHZhbHVlIG9ubHkgY29udGFpbnMgc2VwZXJhdG9yLCBkbyBub3QgY29udmVydCB0aGUgc2VwZXJ0YW9yIGludG8gMFxuICAgICAgICBpZiAobnVtYmVyUmVnLnRlc3Qoc3RyVmFsKSkge1xuICAgICAgICAgICAgbW9kZWwgPSB0aGlzLnBhcnNlTnVtYmVyKHN0clZhbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtb2RlbCA9IE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9uIGtleXByZXNzLCBpZiB0aGUgdXNlciB0eXBlcyBhIGRlY2ltYWwgYW5kIGlzIHN0aWxsIGFjdGl2ZSBvbiB0aGUgaW5wdXQgZG8gbm90IHRocm93IGVycm9yLlxuICAgICAgICBpZiAoaXNOYU4obW9kZWwpICYmIHN0clZhbFtzdHJWYWwubGVuZ3RoIC0gMV0gPT09IHRoaXMuREVDSU1BTCAmJiB0aGlzLm5nTW9kZWxPcHRpb25zLnVwZGF0ZU9uID09PSAnY2hhbmdlJyAmJiB0aGlzLiRlbGVtZW50LmZpbmQoJ2lucHV0OmZvY3VzJykubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmxhc3RWYWxJc0RlY2ltYWwgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIGdldCBhIHZhbGlkIG51bWJlciBmb3JtIHRoZSB0ZXh0LlxuICAgICAgICAvLyBpZiB0aGUgbnVtYmVyIGlzIHZhbGlkIG9yIGlmIG51bWJlciBpcyBub3QgaW4gcmFuZ2UgdXBkYXRlIHRoZSBtb2RlbCB2YWx1ZS5cbiAgICAgICAgaWYgKCF0aGlzLmxhc3RWYWxJc0RlY2ltYWwgJiYgdGhpcy5pc1ZhbGlkKG1vZGVsKSkge1xuICAgICAgICAgICAgdGhpcy5wcm94eU1vZGVsID0gbW9kZWw7XG4gICAgICAgICAgICAvLyB1cGRhdGUgdGhlIGRpc3BsYXkgdmFsdWUgaW4gdGhlIHRleHQgYm94LlxuICAgICAgICAgICAgdGhpcy51cGRhdGVEaXNwbGF5VGV4dCgpO1xuICAgICAgICAgICAgLy8gRG8gbm90IHRyaWdnZXIgb25jaGFuZ2UgZXZlbnQgZm9yIGRlZmF1bHQgdmFsdWVcbiAgICAgICAgICAgIGlmICghdGhpcy5pc0RlZmF1bHRRdWVyeSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlKG1vZGVsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gdmFsdWUudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIHRoaXMucHJveHlNb2RlbCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZShudWxsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJldHVybnMgdGhlIGFjdHVhbCBtb2RlbCB2YWx1ZSBvZiB0aGUgd2lkZ2V0LlxuICAgIGdldCBkYXRhdmFsdWUoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJveHlNb2RlbDtcbiAgICB9XG5cbiAgICAvLyByZXNldHMgYWxsIHRoZSBmbGFncyByZWxhdGVkIHRvIHRoZSB3aWRnZXQncyB2YWxpZGF0aW9uLlxuICAgIHByb3RlY3RlZCByZXNldFZhbGlkYXRpb25zKCkge1xuICAgICAgICB0aGlzLmlzSW52YWxpZE51bWJlciA9IGZhbHNlO1xuICAgICAgICB0aGlzLm51bWJlck5vdEluUmFuZ2UgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIHZhbGlkYXRpb25zIGZvciB0aGUgbnVtYmVyIGJlZm9yZSB1cGRhdGluZyB0aGUgd2lkZ2V0IG1vZGVsLiBsaWtlIHZhbGlkYXRpbmcgbWluIGFuZCBtYXggdmFsdWUgZm9yIHRoZSB3aWRnZXQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbCBudW1iZXIgdG8gYmUgdmFsaWRhdGVkXG4gICAgICogQHJldHVybnMge251bWJlcn1cbiAgICAgKi9cbiAgICBwcml2YXRlIGlzVmFsaWQodmFsOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgLy8gaWQgbnVtYmVyIGlzIGluZmluaXRlIHRoZW4gY29uc2lkZXIgaXQgYXMgaW52YWxpZCB2YWx1ZVxuICAgICAgICBsZXQgaW52YWxpZERlY2ltYWxQbGFjZXMgPSBmYWxzZTtcbiAgICAgICAgaWYodGhpcy5pbnB1dG1vZGUgPT09IElOUFVUTU9ERS5OQVRVUkFMICYmICFpc05hTih0aGlzLmRlY2ltYWxwbGFjZXMpICYmIHRoaXMuZGVjaW1hbHBsYWNlcyA+PSAwKSB7XG4gICAgICAgICAgICBpbnZhbGlkRGVjaW1hbFBsYWNlcyA9IHRoaXMuY291bnREZWNpbWFscyh2YWwpID4gdGhpcy5kZWNpbWFscGxhY2VzO1xuICAgICAgICB9IGVsc2UgaWYoIU51bWJlci5pc0ludGVnZXIodGhpcy5zdGVwKSAmJiB0aGlzLmNvdW50RGVjaW1hbHModmFsKSA+IHRoaXMuY291bnREZWNpbWFscyh0aGlzLnN0ZXApKSB7XG4gICAgICAgICAgICBpbnZhbGlkRGVjaW1hbFBsYWNlcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzTmFOKHZhbCkgfHwgIWlzRmluaXRlKHZhbCkgfHwgaW52YWxpZERlY2ltYWxQbGFjZXMpIHtcbiAgICAgICAgICAgIHRoaXMuaXNJbnZhbGlkTnVtYmVyID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsICE9PSB0aGlzLmdldFZhbHVlSW5SYW5nZSh2YWwpKSB7XG4gICAgICAgICAgICB0aGlzLm51bWJlck5vdEluUmFuZ2UgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZXNldFZhbGlkYXRpb25zKCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJldHVybnMgYSB2YWxpZCBudW1iZXIgYnkgdmFsaWRhdGluZyB0aGUgbWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAgICogQHJldHVybnMge251bWJlcn1cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFZhbHVlSW5SYW5nZSh2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKCFpc05hTih0aGlzLm1pbnZhbHVlKSAmJiB2YWx1ZSA8IHRoaXMubWludmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVUeXBlID0gJ21pbnZhbHVlJztcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1pbnZhbHVlO1xuXG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc05hTih0aGlzLm1heHZhbHVlKSAmJiB2YWx1ZSA+IHRoaXMubWF4dmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVUeXBlID0gJ21heHZhbHVlJztcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1heHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjb252ZXJ0IG51bWJlciB0byBsb2NhbGl6ZWQgbnVtYmVyIHVzaW5nIGFuZ3VsYXIgZGVjaW1hbCBwaXBlLiBlZyAxMCwwMCwwMDAgb3IgMSwwMDAsMDAwXG4gICAgICogQHBhcmFtIG51bWJlclxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAgICovXG4gICAgcHJpdmF0ZSB0cmFuc2Zvcm1OdW1iZXIobnVtYmVyLCBudW1iZXJmaWx0ZXI/KTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZmlsdGVyVmFsID0gbnVtYmVyZmlsdGVyID8gbnVtYmVyZmlsdGVyIDogdGhpcy5udW1iZXJmaWx0ZXI7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYWlsaW5nWmVyb0RlY2ltYWxQaXBlLnRyYW5zZm9ybShudW1iZXIsIHRoaXMuc2VsZWN0ZWRMb2NhbGUsIGZpbHRlclZhbCwgdGhpcy5sb2NhbGVmaWx0ZXIsIHRoaXMudHJhaWxpbmd6ZXJvLCB0aGlzLmRlY2ltYWxWYWx1ZSwgISFudW1iZXJmaWx0ZXIsIHRoaXMuaTE4blNlcnZpY2U/LmdldHdpZGdldExvY2FsZSgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiByZXNldHMgdGhlIGN1cnNvciBwb3NpdGlvbiBpbiB0aGUgdGV4dCBib3guXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIGN1cnNvciBwb3NpdGlvbiBpbmRleCBmb3JtIGxlZnQgdG8gcmlnaHQuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZXNldEN1cnNvclBvc2l0aW9uKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudDtcbiAgICAgICAgLy8gcG9zaXRpb24gb2YgdGhlIGN1cnNvciBzaG91bGQgYmUgZ2l2ZW4gZm9ybSByaWdodCB0byBsZWZ0LlxuICAgICAgICBsZXQgcG9zaXRpb24gPSBpbnB1dC52YWx1ZS5sZW5ndGggLSB2YWx1ZTtcbiAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbiA8IDAgPyAwIDogcG9zaXRpb247XG4gICAgICAgIC8vIHNldCB0aGUgY3Vyc29yIHBvc2l0aW9uIGluIHRoZSB0ZXh0IGJveC5cbiAgICAgICAgaW5wdXQuc2V0U2VsZWN0aW9uUmFuZ2UocG9zaXRpb24sIHBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNZXRob2QgcGFyc2VzIHRoZSBMb2NhbGl6ZWQgbnVtYmVyKHN0cmluZykgdG8gYSB2YWxpZCBudW1iZXIuXG4gICAgICogaWYgdGhlIHN0cmluZyBkb3NlIG5vdCByZXN1bHQgdG8gYSB2YWxpZCBudW1iZXIgdGhlbiByZXR1cm5zIE5hTi5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsIExvY2FsaXplZCBudW1iZXIuXG4gICAgICogQHJldHVybnMge251bWJlcn1cbiAgICAgKi9cbiAgICBwcml2YXRlIHBhcnNlTnVtYmVyKHZhbDogc3RyaW5nKTogbnVtYmVyIHtcbiAgICAgICAgLy8gV01TLTIyMTc5OiBzcGxpdCBudW1iZXIgYmFzZWQgb24gdGhlIGRlY2ltYWwgc2VwYXJhdG9yIGluIHRoZSB2YWxcbiAgICAgICAgLy8gc3BsaXRzIHN0cmluZyBpbnRvIHR3byBwYXJ0cy4gZGVjaW1hbCBhbmQgbnVtYmVyLlxuICAgICAgICBjb25zdCBwYXJ0cyA9IHZhbC5zcGxpdCh0aGlzLmlucHV0bW9kZSA9PT0gSU5QVVRNT0RFLkZJTkFOQ0lBTCA/ICh2YWwuaW5kZXhPZih0aGlzLkRFQ0lNQUwpID4gLTEgPyB0aGlzLkRFQ0lNQUwgOiAnLicpIDogdGhpcy5ERUNJTUFMKTtcbiAgICAgICAgaWYgKCFwYXJ0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJ0cy5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIG51bWJlciBoYXZlIGRlY2ltYWwgcG9pbnQgYW5kIG5vdCBoYXZlIGEgZGVjaW1hbCB2YWx1ZSB0aGVuIHJldHVybi5cbiAgICAgICAgaWYgKHBhcnRzWzFdID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICAvLyByZXBsYWNlcyBhbGwgZ3JvdXAgc2VwYXJhdG9ycyBmb3JtIHRoZSBudW1iZXIuXG4gICAgICAgIGNvbnN0IG51bWJlciA9IE51bWJlcihwYXJ0c1swXS5zcGxpdCh0aGlzLkdST1VQKS5qb2luKCcnKSk7XG4gICAgICAgIGNvbnN0IGRlY2ltYWwgPSBOdW1iZXIoYDAuJHtwYXJ0c1sxXSB8fCAwfWApO1xuICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKG51bWJlcikgfHwgTnVtYmVyLmlzTmFOKGRlY2ltYWwpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN1bSA9IHBhcnRzLmxlbmd0aCA+IDEgPyBwYXJzZUZsb2F0KChudW1iZXIgKyBkZWNpbWFsKS50b0ZpeGVkKHBhcnRzWzFdLmxlbmd0aCkpIDogbnVtYmVyICsgZGVjaW1hbDtcbiAgICAgICAgLy8gaWYgdGhlIG51bWJlciBpcyBuZWdhdGl2ZSB0aGVuIGNhbGN1bGF0ZSB0aGUgbnVtYmVyIGFzIG51bWJlciAtIGRlY2ltYWxcbiAgICAgICAgLy8gRXg6IG51bWJlciA9IC0xMjMgYW5kIGRlY2ltYWwgPSAwLjQ1IHRoZW4gbnVtYmVyIC0gZGVjaW1hbCA9IC0xMjMtMDQ1ID0gLTEyMy40NVxuICAgICAgICAvLyBJZiBlbnRlcmVkIG51bWJlciBpcyAtMC4xIHRvIC0wLjkgdGhlbiB0aGUgbnVtYmVyIGlzIC0wIGFuZCBkZWNpbWFsIGlzIDAuMSB0byAwLjkuIE5vdyBjYWxhY3VsYXRlIHRoZSBudW1iZXIgYXMgbnVtYmVyLWRlY2ltYWxcbiAgICAgICAgLy8gRXg6IG51bWJlciA9IC0wIGFuZCBkZWNpbWFsID0gMC4xIHRoZW4gbnVtYmVyLWRlY2ltYWwgPSAtMC0wLjEgPSAtMC4xXG4gICAgICAgIGlmIChudW1iZXIgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuaXMoMCwgbnVtYmVyKSA/IHN1bSA6IG51bWJlciAtIGRlY2ltYWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bWJlciA+IDAgPyBzdW0gOiBudW1iZXIgLSBkZWNpbWFsO1xuICAgIH1cblxuICAgIC8vIHVwZGF0ZXMgdGhlIHdpZGdldHMgdGV4dCB2YWx1ZS5cbiAgICBwcml2YXRlIHVwZGF0ZURpc3BsYXlUZXh0KCkge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCBwb3NpdGlvbjogbnVtYmVyID0gaW5wdXQuc2VsZWN0aW9uU3RhcnQ7XG4gICAgICAgIGNvbnN0IHByZVZhbHVlOiBzdHJpbmcgPSBpbnB1dC52YWx1ZTtcbiAgICAgICAgaWYgKCF0aGlzLmlzRGVmYXVsdFF1ZXJ5KSB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0cyA9IHByZVZhbHVlLnNwbGl0KHRoaXMuREVDSU1BTCk7XG4gICAgICAgICAgICB0aGlzLmRlY2ltYWxWYWx1ZSA9IHBhcnRzWzFdIHx8ICcnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0ZXBWYWwgPSB0aGlzLnN0ZXBMZW5ndGgoKTtcbiAgICAgICAgaWYgKHRoaXMuaW5wdXRtb2RlID09PSBJTlBVVE1PREUuRklOQU5DSUFMICYmIHN0ZXBWYWwpIHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gaW5wdXQudmFsdWUgPSB0aGlzLnRyYW5zZm9ybU51bWJlcih0aGlzLnByb3h5TW9kZWwsIGAxLiR7c3RlcFZhbH0tJHtzdGVwVmFsfWApO1xuICAgICAgICAgICAgdGhpcy5kZWNpbWFsVmFsdWUgPSB0aGlzLmRlY2ltYWxWYWx1ZS5yZXBsYWNlKC9cXEQvZywnJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IGlucHV0LnZhbHVlID0gdGhpcy50cmFuc2Zvcm1OdW1iZXIodGhpcy5wcm94eU1vZGVsKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpbiBzYWZhcmkgYnJvd3Nlciwgc2V0U2VsZWN0aW9uUmFuZ2Ugd2lsbCBmb2N1cyB0aGUgaW5wdXQgYnkgZGVmYXVsdCwgd2hpY2ggbWF5IGludm9rZSB0aGUgZm9jdXMgZXZlbnQgb24gd2lkZ2V0LlxuICAgICAgICAvLyBIZW5jZSBwcmV2ZW50aW5nIHRoZSBzZXRTZWxlY3Rpb25SYW5nZSB3aGVuIGRlZmF1bHQgdmFsdWUgaXMgc2V0IGkuZS4gd2lkZ2V0IGlzIG5vdCBmb2N1c2VkLlxuICAgICAgICBpZiAodGhpcy51cGRhdGVvbiA9PT0gJ2RlZmF1bHQnICYmICF0aGlzLmlzRGVmYXVsdFF1ZXJ5KSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0Q3Vyc29yUG9zaXRpb24ocHJlVmFsdWUubGVuZ3RoIC0gcG9zaXRpb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBzdGVwIGxlbmd0aCBzZXQgaW4gdGhlIHN0dWRpb1xuICAgIHByaXZhdGUgc3RlcExlbmd0aCgpIHtcbiAgICAgICAgaWYodGhpcy5pbnB1dG1vZGUgPT09ICdJTlBVVE1PREUuTkFUVVJBTCcgJiYgIWlzTmFOKHRoaXMuZGVjaW1hbHBsYWNlcykgJiYgdGhpcy5kZWNpbWFscGxhY2VzID49IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY2ltYWxwbGFjZXM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RlcExlbiA9IHRoaXMuc3RlcC50b1N0cmluZygpLnNwbGl0KCcuJyk7XG4gICAgICAgIGlmIChzdGVwTGVuLmxlbmd0aCA9PT0gMSApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBzdGVwTGVuWzFdLmxlbmd0aDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIHRoZSBjdXJyZW5jeSB3aWRnZXQgaGFzIGlucHV0IG1vZGUgYXMgbmF0dXJhbCBhbmQgdHJhaWxpbmcgemVybyBpcyBkZWZpbmVkIG9yIG5vdFxuICAgIHB1YmxpYyBpc05hdHVyYWxDdXJyZW5jeSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRtb2RlID09PSBJTlBVVE1PREUuTkFUVVJBTCAmJiB0aGlzLndpZGdldFR5cGUgPT09ICd3bS1jdXJyZW5jeScgJiYgISF0aGlzLnRyYWlsaW5nemVybztcbiAgICB9XG5cbiAgICAgICAvKipcbiAgICAgKiBAcGFyYW0gdmFsdWUgY29udGFpbnMgdGhlIHZhbHVlIGVudGVyZWQgaW4gdGhlIGlucHV0IGJveFxuICAgICAqIFRoaXMgZnVuY3Rpb24gbW9kaWZpZXMgdGhlIHVzZXIgaW5wdXQgdmFsdWUsIGludG8gZmluYW5jaWFsIG1vZGUuXG4gICAgICogTnVtYmVyIHN0YXJ0cyBmcm9tIGhpZ2hlc3QgcHJlY2VzaW9uIGRlY2ltYWwsIG9uIHR5cGluZyBudW1iZXIgc2hpZnRzIHRvIHRoZSBsZWZ0XG4gICAgICovXG4gICAgcHVibGljIG9uSW5wdXRDaGFuZ2UodmFsdWU6IGFueSkge1xuICAgICAgICBjb25zdCBzdGVwVmFsID0gdGhpcy5zdGVwTGVuZ3RoKCk7XG4gICAgICAgIC8vIFdNUy0yMjM1NSwgVHJpZ2dlciBjaGFuZ2UgY2IgaWYgdmFsdWUgZXhpc3RzIG9yIHZhbHVlIGlzIGVtcHR5IGJ1dCBkYXRhdmFsdWUgZXhpc3RzICh3aGVuIHZhbHVlIGlzIHNlbGVjdGVkIGFuZCBkZWxldGVkKS5cbiAgICAgICAgaWYgKGlzRGVmaW5lZCh2YWx1ZSkgJiYgKHZhbHVlICE9PSAnJyB8fCB0aGlzLmRhdGF2YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghc3RlcFZhbCB8fCB0aGlzLmlucHV0bW9kZSAhPT0gSU5QVVRNT0RFLkZJTkFOQ0lBTCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGZpbmFuY2lhbFZhbDtcblxuICAgICAgICAvKipcbiAgICAgICAgICogSWYgdGhlIHZhbHVlIGlzIGVudGVyZWQgYnkgdGhlIHVzZXIsIGZvcm1hdCB0aGUgaW5wdXRcbiAgICAgICAgICogSWYgdGhlIHZhbHVlIGlzIHByb3ZpZGVkIGFzIGRlZmF1bHQgdmFsdWUsIHNraXAgZm9ybWF0dGluZ1xuICAgICAgICAgKi9cbiAgICAgICAgaWYgKHRoaXMuaXNEZWZhdWx0UXVlcnkpIHtcbiAgICAgICAgICAgIGZpbmFuY2lhbFZhbCA9IHBhcnNlRmxvYXQodmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdmFsSW5XaG9sZU51bSA9IHBhcnNlSW50KHZhbHVlLnRvU3RyaW5nKCkucmVwbGFjZSgvXFxEL2csJycpKTtcbiAgICAgICAgICAgIGZpbmFuY2lhbFZhbCA9IHZhbEluV2hvbGVOdW0gKiAgdGhpcy5zdGVwO1xuICAgICAgICB9XG5cbiAgICAgICAgICAgaWYgKCFpc05hTihmaW5hbmNpYWxWYWwpKSB7XG4gICAgICAgICAgICAvLyBXaGVuIHVwZGF0ZSBvbiBrZXkgaXMgc2V0IGtleXByZXNzLCB1cGRhdGUgdGhlIGRhdGF2YWx1ZSBlbHNlIHVwZGF0ZSBvbmx5IHRoZSBkaXNwbGF5IHZhbHVlXG4gICAgICAgICAgICBpZiAodGhpcy5uZ01vZGVsT3B0aW9ucy51cGRhdGVPbiA9PT0gJ2NoYW5nZScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGF2YWx1ZSA9IHBhcnNlRmxvYXQoZmluYW5jaWFsVmFsLnRvRml4ZWQoc3RlcFZhbCkpO1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlKHRoaXMuZGF0YXZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5VmFsdWUgPSBmaW5hbmNpYWxWYWwudG9GaXhlZChzdGVwVmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLm5nTW9kZWxPcHRpb25zLnVwZGF0ZU9uICE9PSAnYmx1cicpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YXZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UobnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJbnB1dCBtb2RlIGlzIGZpbmFuY2lhbCBhbmQgdHJhaWxpbmcgemVybyBpcyBzZXQgdG8gZmFsc2UsIE9uIGZvY3VzIHNldCBkaXNwbGF5IHZhbCB0byBmaXhlZCBwb2ludCBub3RhdGlvbiBhbmQgT24gYmx1ciBzdHJpcCB0cmFpbGluZyB6ZXJvc1xuICAgIC8vIEluIGN1cnJlbmN5LCBpbnB1dG1vZGUgaXMgbmF0dXJhbCBhbmQgdHJhaWxpbmcgemVybyBhbmQgc3RlcCBhcmUgZGVmaW5lZCwgb24gYmx1ciBkaXNwbGF5IHZhbCB0byBmaXhlZCBwb2ludCBub3RhdGlvbiBhbmQgb24gZm9jdXMgc3RyaXAgdGhlIHplcm9zXG4gICAgcHVibGljIGNoZWNrRm9yVHJhaWxpbmdaZXJvcygkZXZlbnQpIHtcbiAgICAgICAgY29uc3Qgc3RlcFZhbCA9IHRoaXMuc3RlcExlbmd0aCgpO1xuICAgICAgICBjb25zdCBmaW5hbmNpYWxNb2RlID0gIXRoaXMudHJhaWxpbmd6ZXJvICYmIHRoaXMuaW5wdXRtb2RlID09PSBJTlBVVE1PREUuRklOQU5DSUFMO1xuXG4gICAgICAgIC8vIElmIHRoZSB1c2VyJ3MgbGFzdCBpbnB1dCBpcyBhIGRlY2ltYWwgYW5kIG5vdCBhY3RpdmUgb24gaW5wdXQgZmllbGQsIHRocm93IGVycm9yXG4gICAgICAgIGlmICh0aGlzLmxhc3RWYWxJc0RlY2ltYWwpIHtcbiAgICAgICAgICAgIHRoaXMub25Nb2RlbENoYW5nZSh0aGlzLmRpc3BsYXlWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmaW5hbmNpYWxNb2RlICYmICF0aGlzLmlzTmF0dXJhbEN1cnJlbmN5KCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RlcFZhbCAmJiB0aGlzLmRhdGF2YWx1ZSkge1xuICAgICAgICAgICAgbGV0IG51bWJlcmZpbHRlcjtcbiAgICAgICAgICAgIGlmICgoZmluYW5jaWFsTW9kZSAmJiAkZXZlbnQudHlwZSA9PT0gJ2ZvY3VzJykgfHwgKHRoaXMuaXNOYXR1cmFsQ3VycmVuY3koKSAmJiAkZXZlbnQudHlwZSA9PT0gJ2JsdXInKSkge1xuICAgICAgICAgICAgICAgIG51bWJlcmZpbHRlciA9IGAxLiR7c3RlcFZhbH0tJHtzdGVwVmFsfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IHRoaXMudHJhbnNmb3JtTnVtYmVyKHRoaXMuZGF0YXZhbHVlLCBudW1iZXJmaWx0ZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmV0dXJucyB0aGUgbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIGEgbnVtYmVyIGhhdmUuXG4gICAgICogQHBhcmFtIHZhbHVlOiBudW1iZXJcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgICAqL1xuICAgIHByaXZhdGUgY291bnREZWNpbWFscyh2YWx1ZSkge1xuICAgICAgICBjb25zdCB2YWx1ZVN0ciA9IHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgIGNvbnN0IGlzTG9jYWxpemVkTnVtYmVyID0gaW5jbHVkZXModmFsdWVTdHIsIHRoaXMuREVDSU1BTCk7XG4gICAgICAgIGNvbnN0IHBhcnRzID0gaXNMb2NhbGl6ZWROdW1iZXIgPyB2YWx1ZVN0ci5zcGxpdCh0aGlzLkRFQ0lNQUwpIDogdmFsdWVTdHIuc3BsaXQoJy4nKTtcbiAgICAgICAgcmV0dXJuIHBhcnRzWzFdID8gcGFydHNbMV0ubGVuZ3RoIDogMFxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGhhbmRsZXMgdGhlIGFycm93IHByZXNzIGV2ZW50LiBJbmNyZWFzZXMgb3IgZGVjcmVhc2VzIHRoZSBudW1iZXIuIHRyaWdnZXJlZCBmb20gdGhlIHRlbXBsYXRlXG4gICAgICogQHBhcmFtICRldmVudCBrZXlib2FyZCBldmVudC5cbiAgICAgKiBAcGFyYW0ga2V5IGlkZW50aWZpZXIgdG8gaW5jcmVhc2Ugb3IgZGVjcmVhc2UgdGhlIG51bWJlci5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25BcnJvd1ByZXNzKCRldmVudCwga2V5KSB7XG4gICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAodGhpcy5yZWFkb25seSB8fCB0aGlzLnN0ZXAgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0YXJnZXRWYWwgPSAkZXZlbnQudGFyZ2V0LnZhbHVlLnJlcGxhY2UoLywvZywgJycpO1xuXG4gICAgICAgIC8vIHByb3h5TW9kZWwgdG8gYmUgdXBkYXRlZCBmcm9tICRldmVudC50YXJnZXQudmFsdWUgaWYgcHJlc2VudCB0byBzdXBwb3J0IGFycm93IGtleXMgd2hlbiBpbnB1dCBjaGFuZ2VzIGVsc2UgcGljayB1cCBmcm9tIHRoaXMucHJveHltb2RlbFxuICAgICAgICBsZXQgcHJveHlNb2RlbDtcbiAgICAgICAgaWYgKHRhcmdldFZhbCAmJiAhaXNOYU4ocGFyc2VGbG9hdCh0YXJnZXRWYWwpKSkge1xuICAgICAgICAgICAgcHJveHlNb2RlbCA9IHBhcnNlRmxvYXQodGFyZ2V0VmFsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByb3h5TW9kZWwgPSB0aGlzLnByb3h5TW9kZWw7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdmFsdWU7XG5cbiAgICAgICAgLy8gaWYgdGhlIG51bWJlciBpcyBub3QgaW4gcmFuZ2UgYW5kIHdoZW4gYXJyb3cgYnV0dG9ucyBhcmUgcHJlc3NlZCBuZWVkIHRvIGdldCBhcHByb3ByaWF0ZSBudW1iZXIgdmFsdWUuXG4gICAgICAgIGlmICh0aGlzLm51bWJlck5vdEluUmFuZ2UpIHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0VmFsdWUgPSB0aGlzLnBhcnNlTnVtYmVyKHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50LnZhbHVlKTtcbiAgICAgICAgICAgIC8vIHRha2UgdGhlIHRleHRib3ggdmFsdWUgYXMgY3VycmVudCBtb2RlbCBpZiB0aGUgdmFsdWUgaXMgdmFsaWQuXG4gICAgICAgICAgICBpZiAoIWlzTmFOKGlucHV0VmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmdldFZhbHVlSW5SYW5nZShpbnB1dFZhbHVlKTtcbiAgICAgICAgICAgICAgICBwcm94eU1vZGVsID0gaW5wdXRWYWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0VmFsaWRhdGlvbnMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChpc1VuZGVmaW5lZChwcm94eU1vZGVsKSB8fCBpc051bGwocHJveHlNb2RlbCkpIHtcbiAgICAgICAgICAgICAgICBwcm94eU1vZGVsID0gdmFsdWUgPSB0aGlzLmdldFZhbHVlSW5SYW5nZSgodGhpcy5taW52YWx1ZSB8fCAwKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldFZhbGlkYXRpb25zKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5nZXRWYWx1ZUluUmFuZ2UocHJveHlNb2RlbCArIChrZXkgPT09ICdVUCcgPyB0aGlzLnN0ZXAgOiAtdGhpcy5zdGVwKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKChrZXkgPT09ICdVUCcgJiYgcHJveHlNb2RlbCA8PSB2YWx1ZSkgfHwgKGtleSA9PT0gJ0RPV04nICYmIHByb3h5TW9kZWwgPj0gdmFsdWUpKSB7XG4gICAgICAgICAgICBjb25zdCBkZWNpbWFsUm91bmRWYWx1ZSA9IE1hdGgubWF4KHRoaXMuY291bnREZWNpbWFscyhwcm94eU1vZGVsKSwgdGhpcy5jb3VudERlY2ltYWxzKHRoaXMuc3RlcCkpO1xuXG4gICAgICAgICAgICAvLyB1cGRhdGUgdGhlIG1vZGVsUHJveHkuXG4gICAgICAgICAgICB0aGlzLnByb3h5TW9kZWwgPSByb3VuZCh2YWx1ZSwgZGVjaW1hbFJvdW5kVmFsdWUpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEaXNwbGF5VGV4dCgpO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UodGhpcy5wcm94eU1vZGVsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIG1ldGhvZCBpcyBjYWxsZWQgZnJvbSB0aGUgZnJvbSB3aWRnZXQuIHRvIGNoZWNrIHdoZXRoZXIgdGhlIHZhbHVlIGVudGVyZWQgaXMgdmFsaWQgb3Igbm90LlxuICAgICAqIEByZXR1cm5zIHtvYmplY3R9XG4gICAgICovXG4gICAgcHVibGljIHZhbGlkYXRlKGM6IEFic3RyYWN0Q29udHJvbCkge1xuICAgICAgICBpZiAodGhpcy5pc0ludmFsaWROdW1iZXIpIHtcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVUeXBlID0gJyc7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGludmFsaWROdW1iZXI6IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsaWQ6IGZhbHNlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubnVtYmVyTm90SW5SYW5nZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBudW1iZXJOb3RJblJhbmdlOiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkOiBmYWxzZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsaWRhdGVUeXBlID0gJyc7XG4gICAgICAgIC8qIFdNUy0xODI2OSB8IEV4dGVuZGluZyB0aGUgZXhpc3RpbmcgdmFsaWRhdGlvbiBmb3IgJ3JlcXVpcmVkJyAqL1xuICAgICAgICBpZiAodGhpc1snc2hvdyddICYmIHRoaXNbJ3JlcXVpcmVkJ10pIHtcbiAgICAgICAgICAgIHJldHVybiAoISFjLnZhbHVlIHx8IGMudmFsdWUgPT09IDApID8gbnVsbCA6IHsgcmVxdWlyZWQ6IHRydWUgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgdmFsaWRhdGVJbnB1dEVudHJ5KCRldmVudCkge1xuXG4gICAgICAgIHRoaXMuaXNEZWZhdWx0UXVlcnkgPSBmYWxzZTtcblxuICAgICAgICAvLyBhbGxvdyBhY3Rpb25zIGlmIGNvbnRyb2wga2V5IGlzIHByZXNzZWQgb3IgaWYgYmFja3NwYWNlIGlzIHByZXNzZWQuIChmb3IgTW96aWxsYSkuXG4gICAgICAgIGlmICgkZXZlbnQuY3RybEtleSB8fCBpbmNsdWRlcyhbJ0JhY2tzcGFjZScsICdBcnJvd1JpZ2h0JywgJ0Fycm93TGVmdCcsICdUYWInLCAnRW50ZXInLCAnRGVsZXRlJ10sICRldmVudC5rZXkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2YWxpZGl0eSA9IG5ldyBSZWdFeHAoYF5bXFxcXGRcXFxccy0sLmUrJHt0aGlzLkdST1VQfSR7dGhpcy5ERUNJTUFMfV0kYCwgJ2knKTtcbiAgICAgICAgY29uc3QgaW5wdXRWYWx1ZSA9ICRldmVudC50YXJnZXQudmFsdWU7XG5cbiAgICAgICAgLy8gd2hlbiBpbnB1dCBtb2RlIGlzIGZpbmFuY2lhbCwgZG8gbm90IHJlc3RyaWN0IHVzZXIgb24gZW50ZXJpbmcgdGhlIHZhbHVlIHdoZW4gc3RlcCB2YWx1ZSBsaW1pdCBpcyByZWFjaGVkLlxuICAgICAgICBjb25zdCBza2lwU3RlcFZhbGlkYXRpb24gPSB0aGlzLmlucHV0bW9kZSA9PT0gSU5QVVRNT0RFLkZJTkFOQ0lBTDtcblxuICAgICAgICAvLyBWYWxpZGF0ZXMgaWYgdXNlciBlbmV0ZXJzIG1vcmUgdGhhbiAxNiBkaWdpdHNcbiAgICAgICAgaWYgKGlucHV0VmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZFZhbCA9ICBwYXJzZUludChpbnB1dFZhbHVlLnRvU3RyaW5nKCkucmVwbGFjZSgvXFxEL2csJycpKTtcbiAgICAgICAgICAgIGlmIChwYXJzZWRWYWwudG9TdHJpbmcoKS5sZW5ndGggPiAxNSkge1xuICAgICAgICAgICAgICAgIC8vIFdNUy0yMjMyMTogSWYgdGhlIG51bWJlciBpcyBncmVhdGVyIHRoYW4gTUFYX1NBRkVfSU5URUdFUiAobW9yZSB0aGFuIDE1IG51bWJlcnMpLlxuICAgICAgICAgICAgICAgIC8vIHVzZXIgc2VsZWN0cyBhIHJhbmdlIG9mIGRpZ2l0cyBhbmQgcHJlc3NlcyBhIGtleS5cbiAgICAgICAgICAgICAgICAvLyBEbyBub3QgdGhyb3cgdmFsaWRhdGlvbiBvZiBleGNlZWRlZCBudW1iZXIgYXMgc2VsZWN0ZWQgcmFuZ2UgdmFsdWUgd2lsbCBiZSBkZWxldGVkLlxuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkVmFsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZFZhbCAmJiBzZWxlY3RlZFZhbC50b1N0cmluZygpICYmIHNlbGVjdGVkVmFsLmZvY3VzTm9kZSA9PT0gdGhpcy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyB2YWxpZGF0ZXMgZW50ZXJpbmcgb2YgZGVjaW1hbCB2YWx1ZXMgb25seSB3aGVuIHVzZXIgcHJvdmlkZXMgZGVjaW1hbCBsaW1pdChpLmUgc3RlcCBjb250YWlucyBkZWNpbWFsIHZhbHVlcykuXG4gICAgICAgIC8vIFJlc3RyaWN0IHVzZXIgZnJvbSBlbnRlcmluZyBvbmx5IGlmIHRoZSBkZWNpbWFsIGxpbWl0IGlzIHJlYWNoZWQgYW5kIHRoZSBuZXcgZGlnaXQgaXMgZW50ZXJlZCBpbiBkZWNpbWFsIHBsYWNlXG4gICAgICAgIC8vIGlmICghc2tpcFN0ZXBWYWxpZGF0aW9uICYmIGlucHV0VmFsdWUgJiYgdGhpcy5jb3VudERlY2ltYWxzKHRoaXMuc3RlcCkgJiYgKHRoaXMuY291bnREZWNpbWFscyhpbnB1dFZhbHVlKSA+PSB0aGlzLmNvdW50RGVjaW1hbHModGhpcy5zdGVwKSkgJiYgJGV2ZW50LnRhcmdldC5zZWxlY3Rpb25TdGFydCA+PSBpbnB1dFZhbHVlLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgLy8gICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgLy8gfVxuICAgICAgICAvLyB2YWxpZGF0ZXMgaWYgdXNlciBlbnRlcmVkIGFuIGludmFsaWQgY2hhcmFjdGVyLlxuICAgICAgICBpZiAoIXZhbGlkaXR5LnRlc3QoJGV2ZW50LmtleSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHRoaXMuaW5wdXRtb2RlID09PSBJTlBVVE1PREUuTkFUVVJBTCAmJiAhaXNOYU4odGhpcy5kZWNpbWFscGxhY2VzKSkge1xuICAgICAgICAgICAgaWYodGhpcy5kZWNpbWFscGxhY2VzID09PSAwICYmIHRoaXMuREVDSU1BTCA9PT0gJGV2ZW50LmtleSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHBhcnRzID0gaW5jbHVkZXMoaW5wdXRWYWx1ZSwgdGhpcy5ERUNJTUFMKSA/IChpbnB1dFZhbHVlIGFzIGFueSkuc3BsaXQodGhpcy5ERUNJTUFMKSA6IGlucHV0VmFsdWUuc3BsaXQoJy4nKTtcbiAgICAgICAgICAgIGNvbnN0IGlzQ3Vyc29yUG9zaXRpb25BdERlY2ltYWxQbGFjZSA9ICRldmVudC50YXJnZXQuc2VsZWN0aW9uU3RhcnQgPiBwYXJ0c1swXS5sZW5ndGg7XG4gICAgICAgICAgICBpZih0aGlzLmRlY2ltYWxwbGFjZXMgPiAwICYmIHRoaXMuY291bnREZWNpbWFscyhpbnB1dFZhbHVlKSA+PSB0aGlzLmRlY2ltYWxwbGFjZXMgJiYgaXNDdXJzb3JQb3NpdGlvbkF0RGVjaW1hbFBsYWNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gY29tbWEgY2Fubm90IGJlIGVudGVyZWQgY29uc2VjdXRpdmVseVxuICAgICAgICBpZiAoaW5jbHVkZXMoaW5wdXRWYWx1ZSwgJywnKSAmJiBpbnB1dFZhbHVlW2lucHV0VmFsdWUubGVuZ3RoIC0gMV0gPT09ICcsJyAmJiAkZXZlbnQua2V5ID09PSAnLCcpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGEgZGVjaW1hbCB2YWx1ZSBjYW4gYmUgZW50ZXJlZCBvbmx5IG9uY2UgaW4gdGhlIGlucHV0LlxuICAgICAgICBpZiAoaW5jbHVkZXMoaW5wdXRWYWx1ZSwgdGhpcy5ERUNJTUFMKSAmJiAkZXZlbnQua2V5ID09PSB0aGlzLkRFQ0lNQUwpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyAnZScgY2FuIGJlIGVudGVyZWQgb25seSBvbmNlIGluIHRoZSBpbnB1dC5cbiAgICAgICAgaWYgKGludGVyc2VjdGlvbih0b0FycmF5KGlucHV0VmFsdWUpLCBbJ2UnLCAnRSddKS5sZW5ndGggJiYgaW5jbHVkZXMoJ2VFJywgJGV2ZW50LmtleSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKGluY2x1ZGVzKGlucHV0VmFsdWUsICcrJykgfHwgaW5jbHVkZXMoaW5wdXRWYWx1ZSwgJy0nKSkgJiYgKCRldmVudC5rZXkgPT09ICcrJyB8fCAkZXZlbnQua2V5ID09PSAnLScpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRG8gbm90IGFsbG93IHVzZXIgdG8gZW50ZXIgb25seSBzcGFjZSB3aXRob3V0IGFueSBpbnB1dCB2YWx1ZVxuICAgICAgICBpZiAoIWlucHV0VmFsdWUgJiYgJGV2ZW50LmNvZGUgPT09ICdTcGFjZScpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQmFja3NwYWNlKCRldmVudCkge1xuICAgICAgICB0aGlzLmlzRGVmYXVsdFF1ZXJ5ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgb25FbnRlcigkZXZlbnQpIHtcbiAgICAgICAgdGhpcy5kYXRhdmFsdWUgPSAkZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgIH1cblxuICAgIG9uTW9kZWxDaGFuZ2UoJGV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmlucHV0bW9kZSA9PT0gSU5QVVRNT0RFLk5BVFVSQUwgfHwgKHRoaXMuaW5wdXRtb2RlID09PSBJTlBVVE1PREUuRklOQU5DSUFMICYmIHRoaXMubmdNb2RlbE9wdGlvbnMudXBkYXRlT24gPT09ICdibHVyJykpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YXZhbHVlID0gJGV2ZW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdj8pIHtcbiAgICAgICAgaWYgKGtleSA9PT0gJ21pbnZhbHVlJyB8fCBrZXkgPT09ICdtYXh2YWx1ZScpIHtcbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZChudik7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnZGF0YXZhbHVlJyAmJiAhb3YpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTmF0dXJhbEN1cnJlbmN5KCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrRm9yVHJhaWxpbmdaZXJvcyh7dHlwZTogJ2JsdXInfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMub25JbnB1dENoYW5nZShudik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdXBlci5vblByb3BlcnR5Q2hhbmdlKGtleSwgbnYsIG92KTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|
|
510
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtYmVyLWxvY2FsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9pbnB1dC9kZWZhdWx0L3NyYy90ZXh0L2xvY2FsZS9udW1iZXItbG9jYWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFekQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXRFLE9BQU8sRUFBQyxtQkFBbUIsRUFBRSxTQUFTLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDeEQsT0FBTyxFQUFpQix1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV4RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0MsT0FBTyxFQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVoRyxJQUFzQixZQUFZLEdBQWxDLE1BQXNCLFlBQWEsU0FBUSxTQUFTO0lBeUJoRCxZQUNJLEdBQWEsRUFDYixNQUFxQixFQUNiLFdBQWdDLEVBQ2hDLHVCQUFnRCxFQUNoQixlQUFvQjtRQUU1RCxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxlQUFlLENBQUMsQ0FBQztRQUo1QixnQkFBVyxHQUFYLFdBQVcsQ0FBcUI7UUFDaEMsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUF5QjtRQXRCcEQsbUJBQWMsR0FBWSxJQUFJLENBQUM7UUFDL0IsaUJBQVksR0FBVyxFQUFFLENBQUM7UUF5QjlCLElBQUksQ0FBQyxjQUFjLEdBQUcsV0FBVyxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDdEQsSUFBSSxDQUFD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QUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEtBQUssTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUM5SCxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztRQUM1QixDQUFDO0lBQ0wsQ0FBQztJQUVELGdCQUFnQixDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRztRQUN6QixJQUFJLEdBQUcsS0FBSyxVQUFVLElBQUksR0FBRyxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQzNDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDckIsQ0FBQzthQUFNLElBQUksR0FBRyxLQUFLLFdBQVcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3BDLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEVBQUMsSUFBSSxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUM7WUFDL0MsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDM0IsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ0osS0FBSyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDeEMsQ0FBQztJQUNMLENBQUM7Q0FDSixDQUFBO0FBcGlCcUIsWUFBWTtJQThCekIsV0FBQSxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtJQUFFLFdBQUEsUUFBUSxFQUFFLENBQUE7cUNBSmxDLFFBQVEsVUFFUSxtQkFBbUI7UUFDUCx1QkFBdUI7R0E3QjFDLFlBQVksQ0FvaUJqQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0LCBJbmplY3RvciwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBWYWxpZGF0b3IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBnZXRMb2NhbGVOdW1iZXJTeW1ib2wsIE51bWJlclN5bWJvbCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmltcG9ydCB7QWJzdHJhY3RJMThuU2VydmljZSwgaXNEZWZpbmVkfSBmcm9tICdAd20vY29yZSc7XG5pbXBvcnQgeyBJV2lkZ2V0Q29uZmlnLCBUcmFpbGluZ1plcm9EZWNpbWFsUGlwZSwgSU5QVVRNT0RFIH0gZnJvbSAnQHdtL2NvbXBvbmVudHMvYmFzZSc7XG5cbmltcG9ydCB7IEJhc2VJbnB1dCB9IGZyb20gJy4uL2Jhc2UvYmFzZS1pbnB1dCc7XG5pbXBvcnQge2luY2x1ZGVzLCBpbnRlcnNlY3Rpb24sIGlzTnVsbCwgaXNTdHJpbmcsIGlzVW5kZWZpbmVkLCByb3VuZCwgdG9BcnJheX0gZnJvbSBcImxvZGFzaC1lc1wiO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTnVtYmVyTG9jYWxlIGV4dGVuZHMgQmFzZUlucHV0IGltcGxlbWVudHMgVmFsaWRhdG9yIHtcbiAgICBwcml2YXRlIERFQ0lNQUw6IHN0cmluZztcbiAgICBwcml2YXRlIEdST1VQOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBzZWxlY3RlZExvY2FsZTogc3RyaW5nO1xuICAgIHByaXZhdGUgcHJveHlNb2RlbDogbnVtYmVyO1xuICAgIHByaXZhdGUgbnVtYmVyTm90SW5SYW5nZTogYm9vbGVhbjtcbiAgICBwcml2YXRlIGlzSW52YWxpZE51bWJlcjogYm9vbGVhbjtcbiAgICBwcml2YXRlIGlzRGVmYXVsdFF1ZXJ5OiBib29sZWFuID0gdHJ1ZTtcbiAgICBwcml2YXRlIGRlY2ltYWxWYWx1ZTogc3RyaW5nID0gJyc7XG4gICAgcHVibGljIGRpc3BsYXlWYWx1ZTogc3RyaW5nO1xuICAgIHByaXZhdGUgbnVtYmVyZmlsdGVyOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBsb2NhbGVmaWx0ZXI6IHN0cmluZztcbiAgICBwdWJsaWMgcmVhZG9ubHk6IGJvb2xlYW47XG5cbiAgICBwdWJsaWMgcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgICBwdWJsaWMgbWludmFsdWU6IG51bWJlcjtcbiAgICBwdWJsaWMgbWF4dmFsdWU6IG51bWJlcjtcbiAgICBwdWJsaWMgdXBkYXRlb246IHN0cmluZztcbiAgICBwdWJsaWMgc3RlcDogbnVtYmVyO1xuICAgIHB1YmxpYyB0cmFpbGluZ3plcm86IGJvb2xlYW47XG4gICAgcHJpdmF0ZSB2YWxpZGF0ZVR5cGU6IHN0cmluZztcbiAgICBwdWJsaWMgaW5wdXRtb2RlOiBzdHJpbmc7XG4gICAgcHVibGljIGRlY2ltYWxwbGFjZXM6IG51bWJlcjtcbiAgICBwcml2YXRlIGxhc3RWYWxJc0RlY2ltYWw6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgaW5qOiBJbmplY3RvcixcbiAgICAgICAgY29uZmlnOiBJV2lkZ2V0Q29uZmlnLFxuICAgICAgICBwcml2YXRlIGkxOG5TZXJ2aWNlOiBBYnN0cmFjdEkxOG5TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHRyYWlsaW5nWmVyb0RlY2ltYWxQaXBlOiBUcmFpbGluZ1plcm9EZWNpbWFsUGlwZSxcbiAgICAgICAgQEluamVjdCgnRVhQTElDSVRfQ09OVEVYVCcpIEBPcHRpb25hbCgpIGV4cGxpY2l0Q29udGV4dDogYW55XG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGluaiwgY29uZmlnLCBleHBsaWNpdENvbnRleHQpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTG9jYWxlID0gaTE4blNlcnZpY2UuZ2V0U2VsZWN0ZWRMb2NhbGUoKTtcbiAgICAgICAgdGhpcy5ERUNJTUFMID0gZ2V0TG9jYWxlTnVtYmVyU3ltYm9sKHRoaXMubG9jYWxlZmlsdGVyIHx8IHRoaXMuc2VsZWN0ZWRMb2NhbGUsIE51bWJlclN5bWJvbC5EZWNpbWFsKTtcbiAgICAgICAgdGhpcy5HUk9VUCA9IGdldExvY2FsZU51bWJlclN5bWJvbCh0aGlzLmxvY2FsZWZpbHRlciB8fCB0aGlzLnNlbGVjdGVkTG9jYWxlLCBOdW1iZXJTeW1ib2wuR3JvdXApO1xuICAgICAgICB0aGlzLm51bWJlcmZpbHRlciA9ICcxLjAtMTYnO1xuICAgICAgICB0aGlzLnJlc2V0VmFsaWRhdGlvbnMoKTtcbiAgICB9XG5cbiAgICAvLyBTZXR0ZXIgZm9yIHRoZSBkYXRhdmFsdWUuXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHNldCBkYXRhdmFsdWUodmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLmxhc3RWYWxJc0RlY2ltYWwgPSBmYWxzZTtcblxuICAgICAgICAvLyBzZXQgdGV4dCB2YWx1ZSB0byBudWxsIGlmIGRhdGEgdmFsdWUgaXMgZW1wdHkuXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgaWYgKGluY2x1ZGVzKFtudWxsLCB1bmRlZmluZWQsICcnXSwgdmFsdWUpKSB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgcHJldkRhdGFWYWx1ZSA9ICAodGhpcyBhcyBhbnkpLnByZXZEYXRhdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IGlucHV0LnZhbHVlID0gdGhpcy5wcm94eU1vZGVsID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMucmVzZXRWYWxpZGF0aW9ucygpO1xuICAgICAgICAgICAgaWYgKChwcmV2RGF0YVZhbHVlIHx8IHByZXZEYXRhVmFsdWUgPT0gMCkgJiYgIXRoaXMuaXNEZWZhdWx0UXVlcnkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiB0aGUgd2lkZ2V0IGhhcyBkZWZhdWx0IHZhbHVlIGFuZCBpZiB3ZSBjaGFuZ2UgdGhlIGxvY2FsZSwgdGhlIHZhbHVlIHNob3VsZCBiZSBpbiBzZWxlY3RlZCBsb2NhbGUgZm9ybWF0LlxuICAgICAgICBpZiAodGhpcy5pc0RlZmF1bHRRdWVyeSkge1xuICAgICAgICAgICAgY29uc3QgaXNMb2NhbGl6ZWROdW1iZXIgPSBpc1N0cmluZyh2YWx1ZSkgJiYgaW5jbHVkZXModmFsdWUsIHRoaXMuREVDSU1BTCk7XG4gICAgICAgICAgICBjb25zdCBwYXJ0cyA9IGlzTG9jYWxpemVkTnVtYmVyID8gKHZhbHVlIGFzIGFueSkuc3BsaXQodGhpcy5ERUNJTUFMKSA6IGlzU3RyaW5nKHZhbHVlKSAmJiAodmFsdWUgYXMgYW55KS5zcGxpdCgnLicpO1xuXG4gICAgICAgICAgICBsZXQgZGVjaW1hbFBsYWNlc0F0dHJWYWwgPSB0aGlzLmdldEF0dHIoJ2RlY2ltYWxwbGFjZXMnKTtcbiAgICAgICAgICAgIGNvbnN0IGRlY2ltYWxwbGFjZXMgPSBkZWNpbWFsUGxhY2VzQXR0clZhbCAhPT0gJycgJiYgZGVjaW1hbFBsYWNlc0F0dHJWYWwgIT09IHVuZGVmaW5lZCA/IE51bWJlcihkZWNpbWFsUGxhY2VzQXR0clZhbCkgOiBOYU47XG4gICAgICAgICAgICBpZih0aGlzLmlucHV0bW9kZSA9PT0gSU5QVVRNT0RFLk5BVFVSQUwgJiYgIWlzTmFOKGRlY2ltYWxwbGFjZXMpKSB7XG4gICAgICAgICAgICAgICAgaWYoZGVjaW1hbHBsYWNlcyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlY2ltYWxWYWx1ZSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAodmFsdWUgYXMgYW55KSA9IGlzTG9jYWxpemVkTnVtYmVyID8gcGFydHNbMF0gOiB0aGlzLnRyYW5zZm9ybU51bWJlcihwYXJ0c1swXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmKGRlY2ltYWxwbGFjZXMgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVjaW1hbFZhbHVlID0gcGFydHNbMV0gJiYgcGFydHNbMV0uc3Vic3RyaW5nKDAsIGRlY2ltYWxwbGFjZXMpIHx8ICcnO1xuICAgICAgICAgICAgICAgICAgICBpZihpc0xvY2FsaXplZE51bWJlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlIGFzIGFueSkgPSB0aGlzLmRlY2ltYWxWYWx1ZS5sZW5ndGggPyBgJHtwYXJ0c1swXX0ke3RoaXMuREVDSU1BTH0ke3RoaXMuZGVjaW1hbFZhbHVlfWAgOiBwYXJ0c1swXTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZSBhcyBhbnkpID0gTnVtYmVyLnBhcnNlRmxvYXQoU3RyaW5nKHZhbHVlKSkudG9GaXhlZChkZWNpbWFscGxhY2VzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWNpbWFsVmFsdWUgPSBwYXJ0c1sxXSB8fCAnJztcbiAgICAgICAgICAgICAgICAodmFsdWUgYXMgYW55KSA9IGlzTG9jYWxpemVkTnVtYmVyID8gdmFsdWUgOiB0aGlzLnRyYW5zZm9ybU51bWJlcih2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBudW1iZXJSZWcgPSAvXFxkLztcbiAgICAgICAgY29uc3Qgc3RyVmFsID0gdmFsdWUudG9TdHJpbmcoKTtcbiAgICAgICAgbGV0IG1vZGVsO1xuICAgICAgICAvLyBXaGVuIHRoZSBpbnB1dCB2YWx1ZSBvbmx5IGNvbnRhaW5zIHNlcGVyYXRvciwgZG8gbm90IGNvbnZlcnQgdGhlIHNlcGVydGFvciBpbnRvIDBcbiAgICAgICAgaWYgKG51bWJlclJlZy50ZXN0KHN0clZhbCkpIHtcbiAgICAgICAgICAgIG1vZGVsID0gdGhpcy5wYXJzZU51bWJlcihzdHJWYWwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbW9kZWwgPSBOYU47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPbiBrZXlwcmVzcywgaWYgdGhlIHVzZXIgdHlwZXMgYSBkZWNpbWFsIGFuZCBpcyBzdGlsbCBhY3RpdmUgb24gdGhlIGlucHV0IGRvIG5vdCB0aHJvdyBlcnJvci5cbiAgICAgICAgaWYgKGlzTmFOKG1vZGVsKSAmJiBzdHJWYWxbc3RyVmFsLmxlbmd0aCAtIDFdID09PSB0aGlzLkRFQ0lNQUwgJiYgdGhpcy5uZ01vZGVsT3B0aW9ucy51cGRhdGVPbiA9PT0gJ2NoYW5nZScgJiYgdGhpcy4kZWxlbWVudC5maW5kKCdpbnB1dDpmb2N1cycpLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5sYXN0VmFsSXNEZWNpbWFsID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBnZXQgYSB2YWxpZCBudW1iZXIgZm9ybSB0aGUgdGV4dC5cbiAgICAgICAgLy8gaWYgdGhlIG51bWJlciBpcyB2YWxpZCBvciBpZiBudW1iZXIgaXMgbm90IGluIHJhbmdlIHVwZGF0ZSB0aGUgbW9kZWwgdmFsdWUuXG4gICAgICAgIGlmICghdGhpcy5sYXN0VmFsSXNEZWNpbWFsICYmIHRoaXMuaXNWYWxpZChtb2RlbCkpIHtcbiAgICAgICAgICAgIHRoaXMucHJveHlNb2RlbCA9IG1vZGVsO1xuICAgICAgICAgICAgLy8gdXBkYXRlIHRoZSBkaXNwbGF5IHZhbHVlIGluIHRoZSB0ZXh0IGJveC5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGlzcGxheVRleHQoKTtcbiAgICAgICAgICAgIC8vIERvIG5vdCB0cmlnZ2VyIG9uY2hhbmdlIGV2ZW50IGZvciBkZWZhdWx0IHZhbHVlXG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNEZWZhdWx0UXVlcnkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZShtb2RlbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB0aGlzLnByb3h5TW9kZWwgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UobnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyByZXR1cm5zIHRoZSBhY3R1YWwgbW9kZWwgdmFsdWUgb2YgdGhlIHdpZGdldC5cbiAgICBnZXQgZGF0YXZhbHVlKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3h5TW9kZWw7XG4gICAgfVxuXG4gICAgLy8gcmVzZXRzIGFsbCB0aGUgZmxhZ3MgcmVsYXRlZCB0byB0aGUgd2lkZ2V0J3MgdmFsaWRhdGlvbi5cbiAgICBwcm90ZWN0ZWQgcmVzZXRWYWxpZGF0aW9ucygpIHtcbiAgICAgICAgdGhpcy5pc0ludmFsaWROdW1iZXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5udW1iZXJOb3RJblJhbmdlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyB2YWxpZGF0aW9ucyBmb3IgdGhlIG51bWJlciBiZWZvcmUgdXBkYXRpbmcgdGhlIHdpZGdldCBtb2RlbC4gbGlrZSB2YWxpZGF0aW5nIG1pbiBhbmQgbWF4IHZhbHVlIGZvciB0aGUgd2lkZ2V0LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWwgbnVtYmVyIHRvIGJlIHZhbGlkYXRlZFxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAgICovXG4gICAgcHJpdmF0ZSBpc1ZhbGlkKHZhbDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIC8vIGlkIG51bWJlciBpcyBpbmZpbml0ZSB0aGVuIGNvbnNpZGVyIGl0IGFzIGludmFsaWQgdmFsdWVcbiAgICAgICAgbGV0IGludmFsaWREZWNpbWFsUGxhY2VzID0gZmFsc2U7XG4gICAgICAgIGlmKHRoaXMuaW5wdXRtb2RlID09PSBJTlBVVE1PREUuTkFUVVJBTCAmJiAhaXNOYU4odGhpcy5kZWNpbWFscGxhY2VzKSAmJiB0aGlzLmRlY2ltYWxwbGFjZXMgPj0gMCkge1xuICAgICAgICAgICAgaW52YWxpZERlY2ltYWxQbGFjZXMgPSB0aGlzLmNvdW50RGVjaW1hbHModmFsKSA+IHRoaXMuZGVjaW1hbHBsYWNlcztcbiAgICAgICAgfSBlbHNlIGlmKCFOdW1iZXIuaXNJbnRlZ2VyKHRoaXMuc3RlcCkgJiYgdGhpcy5jb3VudERlY2ltYWxzKHZhbCkgPiB0aGlzLmNvdW50RGVjaW1hbHModGhpcy5zdGVwKSkge1xuICAgICAgICAgICAgaW52YWxpZERlY2ltYWxQbGFjZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc05hTih2YWwpIHx8ICFpc0Zpbml0ZSh2YWwpIHx8IGludmFsaWREZWNpbWFsUGxhY2VzKSB7XG4gICAgICAgICAgICB0aGlzLmlzSW52YWxpZE51bWJlciA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbCAhPT0gdGhpcy5nZXRWYWx1ZUluUmFuZ2UodmFsKSkge1xuICAgICAgICAgICAgdGhpcy5udW1iZXJOb3RJblJhbmdlID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVzZXRWYWxpZGF0aW9ucygpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiByZXR1cm5zIGEgdmFsaWQgbnVtYmVyIGJ5IHZhbGlkYXRpbmcgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRWYWx1ZUluUmFuZ2UodmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGlmICghaXNOYU4odGhpcy5taW52YWx1ZSkgJiYgdmFsdWUgPCB0aGlzLm1pbnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlVHlwZSA9ICdtaW52YWx1ZSc7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5taW52YWx1ZTtcblxuICAgICAgICB9XG4gICAgICAgIGlmICghaXNOYU4odGhpcy5tYXh2YWx1ZSkgJiYgdmFsdWUgPiB0aGlzLm1heHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlVHlwZSA9ICdtYXh2YWx1ZSc7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYXh2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY29udmVydCBudW1iZXIgdG8gbG9jYWxpemVkIG51bWJlciB1c2luZyBhbmd1bGFyIGRlY2ltYWwgcGlwZS4gZWcgMTAsMDAsMDAwIG9yIDEsMDAwLDAwMFxuICAgICAqIEBwYXJhbSBudW1iZXJcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgICAqL1xuICAgIHByaXZhdGUgdHJhbnNmb3JtTnVtYmVyKG51bWJlciwgbnVtYmVyZmlsdGVyPyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGZpbHRlclZhbCA9IG51bWJlcmZpbHRlciA/IG51bWJlcmZpbHRlciA6IHRoaXMubnVtYmVyZmlsdGVyO1xuICAgICAgICByZXR1cm4gdGhpcy50cmFpbGluZ1plcm9EZWNpbWFsUGlwZS50cmFuc2Zvcm0obnVtYmVyLCB0aGlzLnNlbGVjdGVkTG9jYWxlLCBmaWx0ZXJWYWwsIHRoaXMubG9jYWxlZmlsdGVyLCB0aGlzLnRyYWlsaW5nemVybywgdGhpcy5kZWNpbWFsVmFsdWUsICEhbnVtYmVyZmlsdGVyLCB0aGlzLmkxOG5TZXJ2aWNlPy5nZXR3aWRnZXRMb2NhbGUoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmVzZXRzIHRoZSBjdXJzb3IgcG9zaXRpb24gaW4gdGhlIHRleHQgYm94LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSBjdXJzb3IgcG9zaXRpb24gaW5kZXggZm9ybSBsZWZ0IHRvIHJpZ2h0LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVzZXRDdXJzb3JQb3NpdGlvbih2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIC8vIHBvc2l0aW9uIG9mIHRoZSBjdXJzb3Igc2hvdWxkIGJlIGdpdmVuIGZvcm0gcmlnaHQgdG8gbGVmdC5cbiAgICAgICAgbGV0IHBvc2l0aW9uID0gaW5wdXQudmFsdWUubGVuZ3RoIC0gdmFsdWU7XG4gICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24gPCAwID8gMCA6IHBvc2l0aW9uO1xuICAgICAgICAvLyBzZXQgdGhlIGN1cnNvciBwb3NpdGlvbiBpbiB0aGUgdGV4dCBib3guXG4gICAgICAgIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKHBvc2l0aW9uLCBwb3NpdGlvbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWV0aG9kIHBhcnNlcyB0aGUgTG9jYWxpemVkIG51bWJlcihzdHJpbmcpIHRvIGEgdmFsaWQgbnVtYmVyLlxuICAgICAqIGlmIHRoZSBzdHJpbmcgZG9zZSBub3QgcmVzdWx0IHRvIGEgdmFsaWQgbnVtYmVyIHRoZW4gcmV0dXJucyBOYU4uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHZhbCBMb2NhbGl6ZWQgbnVtYmVyLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAgICovXG4gICAgcHJpdmF0ZSBwYXJzZU51bWJlcih2YWw6IHN0cmluZyk6IG51bWJlciB7XG4gICAgICAgIC8vIFdNUy0yMjE3OTogc3BsaXQgbnVtYmVyIGJhc2VkIG9uIHRoZSBkZWNpbWFsIHNlcGFyYXRvciBpbiB0aGUgdmFsXG4gICAgICAgIC8vIHNwbGl0cyBzdHJpbmcgaW50byB0d28gcGFydHMuIGRlY2ltYWwgYW5kIG51bWJlci5cbiAgICAgICAgY29uc3QgcGFydHMgPSB2YWwuc3BsaXQodGhpcy5pbnB1dG1vZGUgPT09IElOUFVUTU9ERS5GSU5BTkNJQUwgPyAodmFsLmluZGV4T2YodGhpcy5ERUNJTUFMKSA+IC0xID8gdGhpcy5ERUNJTUFMIDogJy4nKSA6IHRoaXMuREVDSU1BTCk7XG4gICAgICAgIGlmICghcGFydHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFydHMubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICAvLyBJZiBudW1iZXIgaGF2ZSBkZWNpbWFsIHBvaW50IGFuZCBub3QgaGF2ZSBhIGRlY2ltYWwgdmFsdWUgdGhlbiByZXR1cm4uXG4gICAgICAgIGlmIChwYXJ0c1sxXSA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVwbGFjZXMgYWxsIGdyb3VwIHNlcGFyYXRvcnMgZm9ybSB0aGUgbnVtYmVyLlxuICAgICAgICBjb25zdCBudW1iZXIgPSBOdW1iZXIocGFydHNbMF0uc3BsaXQodGhpcy5HUk9VUCkuam9pbignJykpO1xuICAgICAgICBjb25zdCBkZWNpbWFsID0gTnVtYmVyKGAwLiR7cGFydHNbMV0gfHwgMH1gKTtcbiAgICAgICAgaWYgKE51bWJlci5pc05hTihudW1iZXIpIHx8IE51bWJlci5pc05hTihkZWNpbWFsKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdW0gPSBwYXJ0cy5sZW5ndGggPiAxID8gcGFyc2VGbG9hdCgobnVtYmVyICsgZGVjaW1hbCkudG9GaXhlZChwYXJ0c1sxXS5sZW5ndGgpKSA6IG51bWJlciArIGRlY2ltYWw7XG4gICAgICAgIC8vIGlmIHRoZSBudW1iZXIgaXMgbmVnYXRpdmUgdGhlbiBjYWxjdWxhdGUgdGhlIG51bWJlciBhcyBudW1iZXIgLSBkZWNpbWFsXG4gICAgICAgIC8vIEV4OiBudW1iZXIgPSAtMTIzIGFuZCBkZWNpbWFsID0gMC40NSB0aGVuIG51bWJlciAtIGRlY2ltYWwgPSAtMTIzLTA0NSA9IC0xMjMuNDVcbiAgICAgICAgLy8gSWYgZW50ZXJlZCBudW1iZXIgaXMgLTAuMSB0byAtMC45IHRoZW4gdGhlIG51bWJlciBpcyAtMCBhbmQgZGVjaW1hbCBpcyAwLjEgdG8gMC45LiBOb3cgY2FsYWN1bGF0ZSB0aGUgbnVtYmVyIGFzIG51bWJlci1kZWNpbWFsXG4gICAgICAgIC8vIEV4OiBudW1iZXIgPSAtMCBhbmQgZGVjaW1hbCA9IDAuMSB0aGVuIG51bWJlci1kZWNpbWFsID0gLTAtMC4xID0gLTAuMVxuICAgICAgICBpZiAobnVtYmVyID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmlzKDAsIG51bWJlcikgPyBzdW0gOiBudW1iZXIgLSBkZWNpbWFsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudW1iZXIgPiAwID8gc3VtIDogbnVtYmVyIC0gZGVjaW1hbDtcbiAgICB9XG5cbiAgICAvLyB1cGRhdGVzIHRoZSB3aWRnZXRzIHRleHQgdmFsdWUuXG4gICAgcHJpdmF0ZSB1cGRhdGVEaXNwbGF5VGV4dCgpIHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3QgcG9zaXRpb246IG51bWJlciA9IGlucHV0LnNlbGVjdGlvblN0YXJ0O1xuICAgICAgICBjb25zdCBwcmVWYWx1ZTogc3RyaW5nID0gaW5wdXQudmFsdWU7XG4gICAgICAgIGlmICghdGhpcy5pc0RlZmF1bHRRdWVyeSkge1xuICAgICAgICAgICAgY29uc3QgcGFydHMgPSBwcmVWYWx1ZS5zcGxpdCh0aGlzLkRFQ0lNQUwpO1xuICAgICAgICAgICAgdGhpcy5kZWNpbWFsVmFsdWUgPSBwYXJ0c1sxXSB8fCAnJztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGVwVmFsID0gdGhpcy5zdGVwTGVuZ3RoKCk7XG4gICAgICAgIGlmICh0aGlzLmlucHV0bW9kZSA9PT0gSU5QVVRNT0RFLkZJTkFOQ0lBTCAmJiBzdGVwVmFsKSB7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IGlucHV0LnZhbHVlID0gdGhpcy50cmFuc2Zvcm1OdW1iZXIodGhpcy5wcm94eU1vZGVsLCBgMS4ke3N0ZXBWYWx9LSR7c3RlcFZhbH1gKTtcbiAgICAgICAgICAgIHRoaXMuZGVjaW1hbFZhbHVlID0gdGhpcy5kZWNpbWFsVmFsdWUucmVwbGFjZSgvXFxEL2csJycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5VmFsdWUgPSBpbnB1dC52YWx1ZSA9IHRoaXMudHJhbnNmb3JtTnVtYmVyKHRoaXMucHJveHlNb2RlbCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaW4gc2FmYXJpIGJyb3dzZXIsIHNldFNlbGVjdGlvblJhbmdlIHdpbGwgZm9jdXMgdGhlIGlucHV0IGJ5IGRlZmF1bHQsIHdoaWNoIG1heSBpbnZva2UgdGhlIGZvY3VzIGV2ZW50IG9uIHdpZGdldC5cbiAgICAgICAgLy8gSGVuY2UgcHJldmVudGluZyB0aGUgc2V0U2VsZWN0aW9uUmFuZ2Ugd2hlbiBkZWZhdWx0IHZhbHVlIGlzIHNldCBpLmUuIHdpZGdldCBpcyBub3QgZm9jdXNlZC5cbiAgICAgICAgaWYgKHRoaXMudXBkYXRlb24gPT09ICdkZWZhdWx0JyAmJiAhdGhpcy5pc0RlZmF1bHRRdWVyeSkge1xuICAgICAgICAgICAgdGhpcy5yZXNldEN1cnNvclBvc2l0aW9uKHByZVZhbHVlLmxlbmd0aCAtIHBvc2l0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgc3RlcCBsZW5ndGggc2V0IGluIHRoZSBzdHVkaW9cbiAgICBwcml2YXRlIHN0ZXBMZW5ndGgoKSB7XG4gICAgICAgIGlmKHRoaXMuaW5wdXRtb2RlID09PSAnSU5QVVRNT0RFLk5BVFVSQUwnICYmICFpc05hTih0aGlzLmRlY2ltYWxwbGFjZXMpICYmIHRoaXMuZGVjaW1hbHBsYWNlcyA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNpbWFscGxhY2VzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0ZXBMZW4gPSB0aGlzLnN0ZXAudG9TdHJpbmcoKS5zcGxpdCgnLicpO1xuICAgICAgICBpZiAoc3RlcExlbi5sZW5ndGggPT09IDEgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gc3RlcExlblsxXS5sZW5ndGg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiB0aGUgY3VycmVuY3kgd2lkZ2V0IGhhcyBpbnB1dCBtb2RlIGFzIG5hdHVyYWwgYW5kIHRyYWlsaW5nIHplcm8gaXMgZGVmaW5lZCBvciBub3RcbiAgICBwdWJsaWMgaXNOYXR1cmFsQ3VycmVuY3koKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlucHV0bW9kZSA9PT0gSU5QVVRNT0RFLk5BVFVSQUwgJiYgdGhpcy53aWRnZXRUeXBlID09PSAnd20tY3VycmVuY3knICYmICEhdGhpcy50cmFpbGluZ3plcm87XG4gICAgfVxuXG4gICAgICAgLyoqXG4gICAgICogQHBhcmFtIHZhbHVlIGNvbnRhaW5zIHRoZSB2YWx1ZSBlbnRlcmVkIGluIHRoZSBpbnB1dCBib3hcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSB1c2VyIGlucHV0IHZhbHVlLCBpbnRvIGZpbmFuY2lhbCBtb2RlLlxuICAgICAqIE51bWJlciBzdGFydHMgZnJvbSBoaWdoZXN0IHByZWNlc2lvbiBkZWNpbWFsLCBvbiB0eXBpbmcgbnVtYmVyIHNoaWZ0cyB0byB0aGUgbGVmdFxuICAgICAqL1xuICAgIHB1YmxpYyBvbklucHV0Q2hhbmdlKHZhbHVlOiBhbnkpIHtcbiAgICAgICAgY29uc3Qgc3RlcFZhbCA9IHRoaXMuc3RlcExlbmd0aCgpO1xuICAgICAgICAvLyBXTVMtMjIzNTUsIFRyaWdnZXIgY2hhbmdlIGNiIGlmIHZhbHVlIGV4aXN0cyBvciB2YWx1ZSBpcyBlbXB0eSBidXQgZGF0YXZhbHVlIGV4aXN0cyAod2hlbiB2YWx1ZSBpcyBzZWxlY3RlZCBhbmQgZGVsZXRlZCkuXG4gICAgICAgICAgIC8vIEZpeCBmb3IgW1dNUy0yNzA0MV06IEVuc3VyZSB0aGUgY2hhbmdlIGNhbGxiYWNrIGZvciB0aGUgbnVtYmVyIHdpZGdldCB0cmlnZ2VycyBvbmx5IG9uIGZvY3VzIG91dCAod2hlbiB1cGRhdGVvbiBpcyBzZXQgdG8gYmx1ciksXG4gICAgICAgICAgIC8vIG5vdCBkdXJpbmcgaW5pdGlhbCBpbnB1dCB3aGVuIHRoZSBwcmV2aW91cyB2YWx1ZSBpcyB1bmRlZmluZWQgYW5kIHRoZSBjdXJyZW50IHZhbHVlIGlzIG51bGwuXG4gICAgICAgIGlmICgoaXNEZWZpbmVkKHZhbHVlKSAmJiAodmFsdWUgIT09ICcnIHx8IHRoaXMuZGF0YXZhbHVlKSkgJiYgISh0aGlzLndpZGdldFR5cGUgPT09ICd3bS1udW1iZXInICYmIHRoaXMuZ2V0UHJldkRhdGFWYWx1ZSgpID09PSB1bmRlZmluZWQgJiYgdGhpcy5kYXRhdmFsdWUgPT0gbnVsbCkpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghc3RlcFZhbCB8fCB0aGlzLmlucHV0bW9kZSAhPT0gSU5QVVRNT0RFLkZJTkFOQ0lBTCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGZpbmFuY2lhbFZhbDtcblxuICAgICAgICAvKipcbiAgICAgICAgICogSWYgdGhlIHZhbHVlIGlzIGVudGVyZWQgYnkgdGhlIHVzZXIsIGZvcm1hdCB0aGUgaW5wdXRcbiAgICAgICAgICogSWYgdGhlIHZhbHVlIGlzIHByb3ZpZGVkIGFzIGRlZmF1bHQgdmFsdWUsIHNraXAgZm9ybWF0dGluZ1xuICAgICAgICAgKi9cbiAgICAgICAgaWYgKHRoaXMuaXNEZWZhdWx0UXVlcnkpIHtcbiAgICAgICAgICAgIGZpbmFuY2lhbFZhbCA9IHBhcnNlRmxvYXQodmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdmFsSW5XaG9sZU51bSA9IHBhcnNlSW50KHZhbHVlLnRvU3RyaW5nKCkucmVwbGFjZSgvXFxEL2csJycpKTtcbiAgICAgICAgICAgIGZpbmFuY2lhbFZhbCA9IHZhbEluV2hvbGVOdW0gKiAgdGhpcy5zdGVwO1xuICAgICAgICB9XG5cbiAgICAgICAgICAgaWYgKCFpc05hTihmaW5hbmNpYWxWYWwpKSB7XG4gICAgICAgICAgICAvLyBXaGVuIHVwZGF0ZSBvbiBrZXkgaXMgc2V0IGtleXByZXNzLCB1cGRhdGUgdGhlIGRhdGF2YWx1ZSBlbHNlIHVwZGF0ZSBvbmx5IHRoZSBkaXNwbGF5IHZhbHVlXG4gICAgICAgICAgICBpZiAodGhpcy5uZ01vZGVsT3B0aW9ucy51cGRhdGVPbiA9PT0gJ2NoYW5nZScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGF2YWx1ZSA9IHBhcnNlRmxvYXQoZmluYW5jaWFsVmFsLnRvRml4ZWQoc3RlcFZhbCkpO1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlKHRoaXMuZGF0YXZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5VmFsdWUgPSBmaW5hbmNpYWxWYWwudG9GaXhlZChzdGVwVmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLm5nTW9kZWxPcHRpb25zLnVwZGF0ZU9uICE9PSAnYmx1cicpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YXZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UobnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJbnB1dCBtb2RlIGlzIGZpbmFuY2lhbCBhbmQgdHJhaWxpbmcgemVybyBpcyBzZXQgdG8gZmFsc2UsIE9uIGZvY3VzIHNldCBkaXNwbGF5IHZhbCB0byBmaXhlZCBwb2ludCBub3RhdGlvbiBhbmQgT24gYmx1ciBzdHJpcCB0cmFpbGluZyB6ZXJvc1xuICAgIC8vIEluIGN1cnJlbmN5LCBpbnB1dG1vZGUgaXMgbmF0dXJhbCBhbmQgdHJhaWxpbmcgemVybyBhbmQgc3RlcCBhcmUgZGVmaW5lZCwgb24gYmx1ciBkaXNwbGF5IHZhbCB0byBmaXhlZCBwb2ludCBub3RhdGlvbiBhbmQgb24gZm9jdXMgc3RyaXAgdGhlIHplcm9zXG4gICAgcHVibGljIGNoZWNrRm9yVHJhaWxpbmdaZXJvcygkZXZlbnQpIHtcbiAgICAgICAgY29uc3Qgc3RlcFZhbCA9IHRoaXMuc3RlcExlbmd0aCgpO1xuICAgICAgICBjb25zdCBmaW5hbmNpYWxNb2RlID0gIXRoaXMudHJhaWxpbmd6ZXJvICYmIHRoaXMuaW5wdXRtb2RlID09PSBJTlBVVE1PREUuRklOQU5DSUFMO1xuXG4gICAgICAgIC8vIElmIHRoZSB1c2VyJ3MgbGFzdCBpbnB1dCBpcyBhIGRlY2ltYWwgYW5kIG5vdCBhY3RpdmUgb24gaW5wdXQgZmllbGQsIHRocm93IGVycm9yXG4gICAgICAgIGlmICh0aGlzLmxhc3RWYWxJc0RlY2ltYWwpIHtcbiAgICAgICAgICAgIHRoaXMub25Nb2RlbENoYW5nZSh0aGlzLmRpc3BsYXlWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmaW5hbmNpYWxNb2RlICYmICF0aGlzLmlzTmF0dXJhbEN1cnJlbmN5KCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RlcFZhbCAmJiB0aGlzLmRhdGF2YWx1ZSkge1xuICAgICAgICAgICAgbGV0IG51bWJlcmZpbHRlcjtcbiAgICAgICAgICAgIGlmICgoZmluYW5jaWFsTW9kZSAmJiAkZXZlbnQudHlwZSA9PT0gJ2ZvY3VzJykgfHwgKHRoaXMuaXNOYXR1cmFsQ3VycmVuY3koKSAmJiAkZXZlbnQudHlwZSA9PT0gJ2JsdXInKSkge1xuICAgICAgICAgICAgICAgIG51bWJlcmZpbHRlciA9IGAxLiR7c3RlcFZhbH0tJHtzdGVwVmFsfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IHRoaXMudHJhbnNmb3JtTnVtYmVyKHRoaXMuZGF0YXZhbHVlLCBudW1iZXJmaWx0ZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmV0dXJucyB0aGUgbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIGEgbnVtYmVyIGhhdmUuXG4gICAgICogQHBhcmFtIHZhbHVlOiBudW1iZXJcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgICAqL1xuICAgIHByaXZhdGUgY291bnREZWNpbWFscyh2YWx1ZSkge1xuICAgICAgICBjb25zdCBudW0gPSBOdW1iZXIodmFsdWUpO1xuICAgICAgICBpZiAobnVtID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgIFxuICAgICAgICAvLyBDb252ZXJ0IHRvIG51bWJlciBhbmQgaGFuZGxlIHNjaWVudGlmaWMgbm90YXRpb25cbiAgICAgICAgaWYgKE51bWJlci5pc05hTihudW0pKSByZXR1cm4gMDtcbiAgICAgICAgXG4gICAgICAgIC8vIEdldCB0aGUgZXhwb25lbnRpYWwgZm9ybSB0byBoYW5kbGUgc2NpZW50aWZpYyBub3RhdGlvbiBwcm9wZXJseVxuICAgICAgICBjb25zdCBleHBvbmVudGlhbFN0ciA9IG51bS50b0V4cG9uZW50aWFsKCk7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gZXhwb25lbnRpYWxTdHIubWF0Y2goL14tP1xcZCpcXC4/KFxcZCspP2UoWystXVxcZCspJC8pO1xuICAgICAgICBcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICBjb25zdCBkZWNpbWFscyA9IG1hdGNoWzFdID8gbWF0Y2hbMV0ubGVuZ3RoIDogMDtcbiAgICAgICAgICAgIGNvbnN0IGV4cG9uZW50ID0gcGFyc2VJbnQobWF0Y2hbMl0pO1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsIGRlY2ltYWxzIC0gZXhwb25lbnQpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBGYWxsYmFjayB0byByZWd1bGFyIGRlY2ltYWwgY291bnRpbmdcbiAgICAgICAgY29uc3QgZGVjaW1hbFN0ciA9IG51bS50b1N0cmluZygpO1xuICAgICAgICBjb25zdCBpc0xvY2FsaXplZE51bWJlciA9IGluY2x1ZGVzKGRlY2ltYWxTdHIsIHRoaXMuREVDSU1BTCk7XG4gICAgICAgIGNvbnN0IHBhcnRzID0gaXNMb2NhbGl6ZWROdW1iZXIgPyBkZWNpbWFsU3RyLnNwbGl0KHRoaXMuREVDSU1BTCkgOiBkZWNpbWFsU3RyLnNwbGl0KCcuJyk7XG4gICAgICAgIHJldHVybiBwYXJ0c1sxXSA/IHBhcnRzWzFdLmxlbmd0aCA6IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogaGFuZGxlcyB0aGUgYXJyb3cgcHJlc3MgZXZlbnQuIEluY3JlYXNlcyBvciBkZWNyZWFzZXMgdGhlIG51bWJlci4gdHJpZ2dlcmVkIGZvbSB0aGUgdGVtcGxhdGVcbiAgICAgKiBAcGFyYW0gJGV2ZW50IGtleWJvYXJkIGV2ZW50LlxuICAgICAqIEBwYXJhbSBrZXkgaWRlbnRpZmllciB0byBpbmNyZWFzZSBvciBkZWNyZWFzZSB0aGUgbnVtYmVyLlxuICAgICAqL1xuICAgIHB1YmxpYyBvbkFycm93UHJlc3MoJGV2ZW50LCBrZXkpIHtcbiAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmICh0aGlzLnJlYWRvbmx5IHx8IHRoaXMuc3RlcCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhcmdldFZhbCA9ICRldmVudC50YXJnZXQudmFsdWUucmVwbGFjZSgvLC9nLCAnJyk7XG5cbiAgICAgICAgLy8gcHJveHlNb2RlbCB0byBiZSB1cGRhdGVkIGZyb20gJGV2ZW50LnRhcmdldC52YWx1ZSBpZiBwcmVzZW50IHRvIHN1cHBvcnQgYXJyb3cga2V5cyB3aGVuIGlucHV0IGNoYW5nZXMgZWxzZSBwaWNrIHVwIGZyb20gdGhpcy5wcm94eW1vZGVsXG4gICAgICAgIGxldCBwcm94eU1vZGVsO1xuICAgICAgICBpZiAodGFyZ2V0VmFsICYmICFpc05hTihwYXJzZUZsb2F0KHRhcmdldFZhbCkpKSB7XG4gICAgICAgICAgICBwcm94eU1vZGVsID0gcGFyc2VGbG9hdCh0YXJnZXRWYWwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcHJveHlNb2RlbCA9IHRoaXMucHJveHlNb2RlbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB2YWx1ZTtcblxuICAgICAgICAvLyBpZiB0aGUgbnVtYmVyIGlzIG5vdCBpbiByYW5nZSBhbmQgd2hlbiBhcnJvdyBidXR0b25zIGFyZSBwcmVzc2VkIG5lZWQgdG8gZ2V0IGFwcHJvcHJpYXRlIG51bWJlciB2YWx1ZS5cbiAgICAgICAgaWYgKHRoaXMubnVtYmVyTm90SW5SYW5nZSkge1xuICAgICAgICAgICAgY29uc3QgaW5wdXRWYWx1ZSA9IHRoaXMucGFyc2VOdW1iZXIodGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQudmFsdWUpO1xuICAgICAgICAgICAgLy8gdGFrZSB0aGUgdGV4dGJveCB2YWx1ZSBhcyBjdXJyZW50IG1vZGVsIGlmIHRoZSB2YWx1ZSBpcyB2YWxpZC5cbiAgICAgICAgICAgIGlmICghaXNOYU4oaW5wdXRWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWVJblJhbmdlKGlucHV0VmFsdWUpO1xuICAgICAgICAgICAgICAgIHByb3h5TW9kZWwgPSBpbnB1dFZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRWYWxpZGF0aW9ucygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGlzVW5kZWZpbmVkKHByb3h5TW9kZWwpIHx8IGlzTnVsbChwcm94eU1vZGVsKSkge1xuICAgICAgICAgICAgICAgIHByb3h5TW9kZWwgPSB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWVJblJhbmdlKCh0aGlzLm1pbnZhbHVlIHx8IDApKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0VmFsaWRhdGlvbnMoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmdldFZhbHVlSW5SYW5nZShwcm94eU1vZGVsICsgKGtleSA9PT0gJ1VQJyA/IHRoaXMuc3RlcCA6IC10aGlzLnN0ZXApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoKGtleSA9PT0gJ1VQJyAmJiBwcm94eU1vZGVsIDw9IHZhbHVlKSB8fCAoa2V5ID09PSAnRE9XTicgJiYgcHJveHlNb2RlbCA+PSB2YWx1ZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlY2ltYWxSb3VuZFZhbHVlID0gTWF0aC5tYXgodGhpcy5jb3VudERlY2ltYWxzKHByb3h5TW9kZWwpLCB0aGlzLmNvdW50RGVjaW1hbHModGhpcy5zdGVwKSk7XG5cbiAgICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgbW9kZWxQcm94eS5cbiAgICAgICAgICAgIHRoaXMucHJveHlNb2RlbCA9IHJvdW5kKHZhbHVlLCBkZWNpbWFsUm91bmRWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURpc3BsYXlUZXh0KCk7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSh0aGlzLnByb3h5TW9kZWwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogbWV0aG9kIGlzIGNhbGxlZCBmcm9tIHRoZSBmcm9tIHdpZGdldC4gdG8gY2hlY2sgd2hldGhlciB0aGUgdmFsdWUgZW50ZXJlZCBpcyB2YWxpZCBvciBub3QuXG4gICAgICogQHJldHVybnMge29iamVjdH1cbiAgICAgKi9cbiAgICBwdWJsaWMgdmFsaWRhdGUoYzogQWJzdHJhY3RDb250cm9sKSB7XG4gICAgICAgIGlmICh0aGlzLmlzSW52YWxpZE51bWJlcikge1xuICAgICAgICAgICAgdGhpcy52YWxpZGF0ZVR5cGUgPSAnJztcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaW52YWxpZE51bWJlcjoge1xuICAgICAgICAgICAgICAgICAgICB2YWxpZDogZmFsc2VcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5udW1iZXJOb3RJblJhbmdlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG51bWJlck5vdEluUmFuZ2U6IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsaWQ6IGZhbHNlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWxpZGF0ZVR5cGUgPSAnJztcbiAgICAgICAgLyogV01TLTE4MjY5IHwgRXh0ZW5kaW5nIHRoZSBleGlzdGluZyB2YWxpZGF0aW9uIGZvciAncmVxdWlyZWQnICovXG4gICAgICAgIGlmICh0aGlzWydzaG93J10gJiYgdGhpc1sncmVxdWlyZWQnXSkge1xuICAgICAgICAgICAgcmV0dXJuICghIWMudmFsdWUgfHwgYy52YWx1ZSA9PT0gMCkgPyBudWxsIDogeyByZXF1aXJlZDogdHJ1ZSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyB2YWxpZGF0ZUlucHV0RW50cnkoJGV2ZW50KSB7XG5cbiAgICAgICAgdGhpcy5pc0RlZmF1bHRRdWVyeSA9IGZhbHNlO1xuXG4gICAgICAgIC8vIGFsbG93IGFjdGlvbnMgaWYgY29udHJvbCBrZXkgaXMgcHJlc3NlZCBvciBpZiBiYWNrc3BhY2UgaXMgcHJlc3NlZC4gKGZvciBNb3ppbGxhKS5cbiAgICAgICAgaWYgKCRldmVudC5jdHJsS2V5IHx8IGluY2x1ZGVzKFsnQmFja3NwYWNlJywgJ0Fycm93UmlnaHQnLCAnQXJyb3dMZWZ0JywgJ1RhYicsICdFbnRlcicsICdEZWxldGUnXSwgJGV2ZW50LmtleSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZhbGlkaXR5ID0gbmV3IFJlZ0V4cChgXltcXFxcZFxcXFxzLSwuZSske3RoaXMuR1JPVVB9JHt0aGlzLkRFQ0lNQUx9XSRgLCAnaScpO1xuICAgICAgICBjb25zdCBpbnB1dFZhbHVlID0gJGV2ZW50LnRhcmdldC52YWx1ZTtcblxuICAgICAgICAvLyB3aGVuIGlucHV0IG1vZGUgaXMgZmluYW5jaWFsLCBkbyBub3QgcmVzdHJpY3QgdXNlciBvbiBlbnRlcmluZyB0aGUgdmFsdWUgd2hlbiBzdGVwIHZhbHVlIGxpbWl0IGlzIHJlYWNoZWQuXG4gICAgICAgIGNvbnN0IHNraXBTdGVwVmFsaWRhdGlvbiA9IHRoaXMuaW5wdXRtb2RlID09PSBJTlBVVE1PREUuRklOQU5DSUFMO1xuXG4gICAgICAgIC8vIFZhbGlkYXRlcyBpZiB1c2VyIGVuZXRlcnMgbW9yZSB0aGFuIDE2IGRpZ2l0c1xuICAgICAgICBpZiAoaW5wdXRWYWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkVmFsID0gIHBhcnNlSW50KGlucHV0VmFsdWUudG9TdHJpbmcoKS5yZXBsYWNlKC9cXEQvZywnJykpO1xuICAgICAgICAgICAgaWYgKHBhcnNlZFZhbC50b1N0cmluZygpLmxlbmd0aCA+IDE1KSB7XG4gICAgICAgICAgICAgICAgLy8gV01TLTIyMzIxOiBJZiB0aGUgbnVtYmVyIGlzIGdyZWF0ZXIgdGhhbiBNQVhfU0FGRV9JTlRFR0VSIChtb3JlIHRoYW4gMTUgbnVtYmVycykuXG4gICAgICAgICAgICAgICAgLy8gdXNlciBzZWxlY3RzIGEgcmFuZ2Ugb2YgZGlnaXRzIGFuZCBwcmVzc2VzIGEga2V5LlxuICAgICAgICAgICAgICAgIC8vIERvIG5vdCB0aHJvdyB2YWxpZGF0aW9uIG9mIGV4Y2VlZGVkIG51bWJlciBhcyBzZWxlY3RlZCByYW5nZSB2YWx1ZSB3aWxsIGJlIGRlbGV0ZWQuXG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRWYWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkVmFsICYmIHNlbGVjdGVkVmFsLnRvU3RyaW5nKCkgJiYgc2VsZWN0ZWRWYWwuZm9jdXNOb2RlID09PSB0aGlzLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHZhbGlkYXRlcyBlbnRlcmluZyBvZiBkZWNpbWFsIHZhbHVlcyBvbmx5IHdoZW4gdXNlciBwcm92aWRlcyBkZWNpbWFsIGxpbWl0KGkuZSBzdGVwIGNvbnRhaW5zIGRlY2ltYWwgdmFsdWVzKS5cbiAgICAgICAgLy8gUmVzdHJpY3QgdXNlciBmcm9tIGVudGVyaW5nIG9ubHkgaWYgdGhlIGRlY2ltYWwgbGltaXQgaXMgcmVhY2hlZCBhbmQgdGhlIG5ldyBkaWdpdCBpcyBlbnRlcmVkIGluIGRlY2ltYWwgcGxhY2VcbiAgICAgICAgLy8gaWYgKCFza2lwU3RlcFZhbGlkYXRpb24gJiYgaW5wdXRWYWx1ZSAmJiB0aGlzLmNvdW50RGVjaW1hbHModGhpcy5zdGVwKSAmJiAodGhpcy5jb3VudERlY2ltYWxzKGlucHV0VmFsdWUpID49IHRoaXMuY291bnREZWNpbWFscyh0aGlzLnN0ZXApKSAmJiAkZXZlbnQudGFyZ2V0LnNlbGVjdGlvblN0YXJ0ID49IGlucHV0VmFsdWUubGVuZ3RoIC0gMSkge1xuICAgICAgICAvLyAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvLyB9XG4gICAgICAgIC8vIHZhbGlkYXRlcyBpZiB1c2VyIGVudGVyZWQgYW4gaW52YWxpZCBjaGFyYWN0ZXIuXG4gICAgICAgIGlmICghdmFsaWRpdHkudGVzdCgkZXZlbnQua2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodGhpcy5pbnB1dG1vZGUgPT09IElOUFVUTU9ERS5OQVRVUkFMICYmICFpc05hTih0aGlzLmRlY2ltYWxwbGFjZXMpKSB7XG4gICAgICAgICAgICBpZih0aGlzLmRlY2ltYWxwbGFjZXMgPT09IDAgJiYgdGhpcy5ERUNJTUFMID09PSAkZXZlbnQua2V5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcGFydHMgPSBpbmNsdWRlcyhpbnB1dFZhbHVlLCB0aGlzLkRFQ0lNQUwpID8gKGlucHV0VmFsdWUgYXMgYW55KS5zcGxpdCh0aGlzLkRFQ0lNQUwpIDogaW5wdXRWYWx1ZS5zcGxpdCgnLicpO1xuICAgICAgICAgICAgY29uc3QgaXNDdXJzb3JQb3NpdGlvbkF0RGVjaW1hbFBsYWNlID0gJGV2ZW50LnRhcmdldC5zZWxlY3Rpb25TdGFydCA+IHBhcnRzWzBdLmxlbmd0aDtcbiAgICAgICAgICAgIGlmKHRoaXMuZGVjaW1hbHBsYWNlcyA+IDAgJiYgdGhpcy5jb3VudERlY2ltYWxzKGlucHV0VmFsdWUpID49IHRoaXMuZGVjaW1hbHBsYWNlcyAmJiBpc0N1cnNvclBvc2l0aW9uQXREZWNpbWFsUGxhY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjb21tYSBjYW5ub3QgYmUgZW50ZXJlZCBjb25zZWN1dGl2ZWx5XG4gICAgICAgIGlmIChpbmNsdWRlcyhpbnB1dFZhbHVlLCAnLCcpICYmIGlucHV0VmFsdWVbaW5wdXRWYWx1ZS5sZW5ndGggLSAxXSA9PT0gJywnICYmICRldmVudC5rZXkgPT09ICcsJykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYSBkZWNpbWFsIHZhbHVlIGNhbiBiZSBlbnRlcmVkIG9ubHkgb25jZSBpbiB0aGUgaW5wdXQuXG4gICAgICAgIGlmIChpbmNsdWRlcyhpbnB1dFZhbHVlLCB0aGlzLkRFQ0lNQUwpICYmICRldmVudC5rZXkgPT09IHRoaXMuREVDSU1BTCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vICdlJyBjYW4gYmUgZW50ZXJlZCBvbmx5IG9uY2UgaW4gdGhlIGlucHV0LlxuICAgICAgICBpZiAoaW50ZXJzZWN0aW9uKHRvQXJyYXkoaW5wdXRWYWx1ZSksIFsnZScsICdFJ10pLmxlbmd0aCAmJiBpbmNsdWRlcygnZUUnLCAkZXZlbnQua2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoaW5jbHVkZXMoaW5wdXRWYWx1ZSwgJysnKSB8fCBpbmNsdWRlcyhpbnB1dFZhbHVlLCAnLScpKSAmJiAoJGV2ZW50LmtleSA9PT0gJysnIHx8ICRldmVudC5rZXkgPT09ICctJykpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBEbyBub3QgYWxsb3cgdXNlciB0byBlbnRlciBvbmx5IHNwYWNlIHdpdGhvdXQgYW55IGlucHV0IHZhbHVlXG4gICAgICAgIGlmICghaW5wdXRWYWx1ZSAmJiAkZXZlbnQuY29kZSA9PT0gJ1NwYWNlJykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIG9uQmFja3NwYWNlKCRldmVudCkge1xuICAgICAgICB0aGlzLmlzRGVmYXVsdFF1ZXJ5ID0gZmFsc2U7XG4gICAgfVxuICAgIG9uRGVsZXRlKCRldmVudCkge1xuICAgICAgICB0aGlzLmlzRGVmYXVsdFF1ZXJ5ID0gZmFsc2U7XG4gICAgfVxuICAgIG9uRW50ZXIoJGV2ZW50KSB7XG4gICAgICAgIHRoaXMuZGF0YXZhbHVlID0gJGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICB9XG5cbiAgICBvbk1vZGVsQ2hhbmdlKCRldmVudCkge1xuICAgICAgICBpZiAodGhpcy5pbnB1dG1vZGUgPT09IElOUFVUTU9ERS5OQVRVUkFMIHx8ICh0aGlzLmlucHV0bW9kZSA9PT0gSU5QVVRNT0RFLkZJTkFOQ0lBTCAmJiB0aGlzLm5nTW9kZWxPcHRpb25zLnVwZGF0ZU9uID09PSAnYmx1cicpKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGF2YWx1ZSA9ICRldmVudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uUHJvcGVydHlDaGFuZ2Uoa2V5LCBudiwgb3Y/KSB7XG4gICAgICAgIGlmIChrZXkgPT09ICdtaW52YWx1ZScgfHwga2V5ID09PSAnbWF4dmFsdWUnKSB7XG4gICAgICAgICAgICB0aGlzLmlzVmFsaWQobnYpO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2RhdGF2YWx1ZScgJiYgIW92KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc05hdHVyYWxDdXJyZW5jeSgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja0ZvclRyYWlsaW5nWmVyb3Moe3R5cGU6ICdibHVyJ30pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uSW5wdXRDaGFuZ2UobnYpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3VwZXIub25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdik7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|
|
@@ -223,10 +223,10 @@ class BaseFormComponent extends StylableComponent {
|
|
|
223
223
|
}
|
|
224
224
|
binddatavalue = binddatavalue.replace(/\[\$i\]/g, '[0]');
|
|
225
225
|
// In case of list widget context will be the listItem.
|
|
226
|
-
if (has(this.context, binddatavalue.split('.')[0])) {
|
|
226
|
+
if (has(this.context, binddatavalue.split('.')[0]) && has(this.context, binddatavalue)) {
|
|
227
227
|
set(this.context, binddatavalue, value);
|
|
228
228
|
}
|
|
229
|
-
else {
|
|
229
|
+
else if (has(this.viewParent, binddatavalue)) {
|
|
230
230
|
set(this.viewParent, binddatavalue, value);
|
|
231
231
|
}
|
|
232
232
|
}
|
|
@@ -248,6 +248,9 @@ class BaseFormComponent extends StylableComponent {
|
|
|
248
248
|
updatePrevDatavalue(val) {
|
|
249
249
|
this.prevDatavalue = val;
|
|
250
250
|
}
|
|
251
|
+
getPrevDataValue() {
|
|
252
|
+
return this.prevDatavalue;
|
|
253
|
+
}
|
|
251
254
|
ngAfterViewInit() {
|
|
252
255
|
super.ngAfterViewInit();
|
|
253
256
|
// [WMS-18892]- stopping event propagation [for ArrowLeft, ArrowUp, ArrowRight, ArrowDown actions] when form widgets or form is inside list widget
|
|
@@ -1581,7 +1584,9 @@ let NumberLocale = class NumberLocale extends BaseInput {
|
|
|
1581
1584
|
onInputChange(value) {
|
|
1582
1585
|
const stepVal = this.stepLength();
|
|
1583
1586
|
// WMS-22355, Trigger change cb if value exists or value is empty but datavalue exists (when value is selected and deleted).
|
|
1584
|
-
|
|
1587
|
+
// Fix for [WMS-27041]: Ensure the change callback for the number widget triggers only on focus out (when updateon is set to blur),
|
|
1588
|
+
// not during initial input when the previous value is undefined and the current value is null.
|
|
1589
|
+
if ((isDefined(value) && (value !== '' || this.datavalue)) && !(this.widgetType === 'wm-number' && this.getPrevDataValue() === undefined && this.datavalue == null)) {
|
|
1585
1590
|
this.handleChange(value);
|
|
1586
1591
|
}
|
|
1587
1592
|
else {
|
|
@@ -1643,9 +1648,25 @@ let NumberLocale = class NumberLocale extends BaseInput {
|
|
|
1643
1648
|
* @returns {number}
|
|
1644
1649
|
*/
|
|
1645
1650
|
countDecimals(value) {
|
|
1646
|
-
const
|
|
1647
|
-
|
|
1648
|
-
|
|
1651
|
+
const num = Number(value);
|
|
1652
|
+
if (num === 0) {
|
|
1653
|
+
return 0;
|
|
1654
|
+
}
|
|
1655
|
+
// Convert to number and handle scientific notation
|
|
1656
|
+
if (Number.isNaN(num))
|
|
1657
|
+
return 0;
|
|
1658
|
+
// Get the exponential form to handle scientific notation properly
|
|
1659
|
+
const exponentialStr = num.toExponential();
|
|
1660
|
+
const match = exponentialStr.match(/^-?\d*\.?(\d+)?e([+-]\d+)$/);
|
|
1661
|
+
if (match) {
|
|
1662
|
+
const decimals = match[1] ? match[1].length : 0;
|
|
1663
|
+
const exponent = parseInt(match[2]);
|
|
1664
|
+
return Math.max(0, decimals - exponent);
|
|
1665
|
+
}
|
|
1666
|
+
// Fallback to regular decimal counting
|
|
1667
|
+
const decimalStr = num.toString();
|
|
1668
|
+
const isLocalizedNumber = includes(decimalStr, this.DECIMAL);
|
|
1669
|
+
const parts = isLocalizedNumber ? decimalStr.split(this.DECIMAL) : decimalStr.split('.');
|
|
1649
1670
|
return parts[1] ? parts[1].length : 0;
|
|
1650
1671
|
}
|
|
1651
1672
|
/**
|
|
@@ -1788,6 +1809,9 @@ let NumberLocale = class NumberLocale extends BaseInput {
|
|
|
1788
1809
|
onBackspace($event) {
|
|
1789
1810
|
this.isDefaultQuery = false;
|
|
1790
1811
|
}
|
|
1812
|
+
onDelete($event) {
|
|
1813
|
+
this.isDefaultQuery = false;
|
|
1814
|
+
}
|
|
1791
1815
|
onEnter($event) {
|
|
1792
1816
|
this.datavalue = $event.target.value;
|
|
1793
1817
|
}
|
|
@@ -1843,10 +1867,10 @@ class NumberComponent extends NumberLocale {
|
|
|
1843
1867
|
provideAs(NumberComponent, NG_VALUE_ACCESSOR, true),
|
|
1844
1868
|
provideAs(NumberComponent, NG_VALIDATORS, true),
|
|
1845
1869
|
provideAsWidgetRef(NumberComponent)
|
|
1846
|
-
]), i0.ɵɵInheritDefinitionFeature], attrs: _c1$8, decls: 2, vars: 14, consts: [["input", ""], ["inputmode", "decimal", "focus-target", "", "type", "text", 1, "form-control", "app-textbox", "app-number-input", 3, "ngModelChange", "blur", "focus", "input", "keypress", "keydown.backspace", "keydown.enter", "keydown.ArrowUp", "keydown.ArrowDown", "ngModel", "readonly", "disabled", "pattern", "autofocus", "ngClass", "ngStyle", "ngModelOptions", "required"]], template: function NumberComponent_Template(rf, ctx) { if (rf & 1) {
|
|
1870
|
+
]), i0.ɵɵInheritDefinitionFeature], attrs: _c1$8, decls: 2, vars: 14, consts: [["input", ""], ["inputmode", "decimal", "focus-target", "", "type", "text", 1, "form-control", "app-textbox", "app-number-input", 3, "ngModelChange", "blur", "focus", "input", "keypress", "keydown.backspace", "keydown.delete", "keydown.enter", "keydown.ArrowUp", "keydown.ArrowDown", "ngModel", "readonly", "disabled", "pattern", "autofocus", "ngClass", "ngStyle", "ngModelOptions", "required"]], template: function NumberComponent_Template(rf, ctx) { if (rf & 1) {
|
|
1847
1871
|
const _r1 = i0.ɵɵgetCurrentView();
|
|
1848
1872
|
i0.ɵɵelementStart(0, "input", 1, 0);
|
|
1849
|
-
i0.ɵɵlistener("ngModelChange", function NumberComponent_Template_input_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onModelChange($event)); })("blur", function NumberComponent_Template_input_blur_0_listener($event) { i0.ɵɵrestoreView(_r1); ctx.handleBlur($event); return i0.ɵɵresetView(ctx.checkForTrailingZeros($event)); })("focus", function NumberComponent_Template_input_focus_0_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.checkForTrailingZeros($event)); })("input", function NumberComponent_Template_input_input_0_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onInputChange($event.target.value)); })("keypress", function NumberComponent_Template_input_keypress_0_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.validateInputEntry($event)); })("keydown.backspace", function NumberComponent_Template_input_keydown_backspace_0_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onBackspace($event)); })("keydown.enter", function NumberComponent_Template_input_keydown_enter_0_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onEnter($event)); })("keydown.ArrowUp", function NumberComponent_Template_input_keydown_ArrowUp_0_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onArrowPress($event, "UP")); })("keydown.ArrowDown", function NumberComponent_Template_input_keydown_ArrowDown_0_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onArrowPress($event, "DOWN")); });
|
|
1873
|
+
i0.ɵɵlistener("ngModelChange", function NumberComponent_Template_input_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onModelChange($event)); })("blur", function NumberComponent_Template_input_blur_0_listener($event) { i0.ɵɵrestoreView(_r1); ctx.handleBlur($event); return i0.ɵɵresetView(ctx.checkForTrailingZeros($event)); })("focus", function NumberComponent_Template_input_focus_0_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.checkForTrailingZeros($event)); })("input", function NumberComponent_Template_input_input_0_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onInputChange($event.target.value)); })("keypress", function NumberComponent_Template_input_keypress_0_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.validateInputEntry($event)); })("keydown.backspace", function NumberComponent_Template_input_keydown_backspace_0_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onBackspace($event)); })("keydown.delete", function NumberComponent_Template_input_keydown_delete_0_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onDelete($event)); })("keydown.enter", function NumberComponent_Template_input_keydown_enter_0_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onEnter($event)); })("keydown.ArrowUp", function NumberComponent_Template_input_keydown_ArrowUp_0_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onArrowPress($event, "UP")); })("keydown.ArrowDown", function NumberComponent_Template_input_keydown_ArrowDown_0_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onArrowPress($event, "DOWN")); });
|
|
1850
1874
|
i0.ɵɵelementEnd();
|
|
1851
1875
|
} if (rf & 2) {
|
|
1852
1876
|
i0.ɵɵproperty("ngModel", ctx.displayValue)("readonly", ctx.readonly)("disabled", ctx.disabled)("pattern", ctx.regexp)("autofocus", ctx.autofocus)("ngClass", ctx.conditionalclass)("ngStyle", ctx.conditionalstyle)("ngModelOptions", ctx.ngModelOptions)("required", ctx.required);
|
|
@@ -1859,7 +1883,7 @@ class NumberComponent extends NumberLocale {
|
|
|
1859
1883
|
provideAs(NumberComponent, NG_VALUE_ACCESSOR, true),
|
|
1860
1884
|
provideAs(NumberComponent, NG_VALIDATORS, true),
|
|
1861
1885
|
provideAsWidgetRef(NumberComponent)
|
|
1862
|
-
], template: "<input class=\"form-control app-textbox app-number-input\"\n inputmode=\"decimal\"\n focus-target\n [attr.name]=\"name\"\n type=\"text\"\n [ngModel]=\"displayValue\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [pattern]=\"regexp\"\n [attr.tabindex]=\"tabindex\"\n [attr.placeholder]=\"placeholder\"\n [attr.accesskey]=\"shortcutkey\"\n [attr.aria-label]=\"arialabel\"\n [autofocus]=\"autofocus\"\n [ngClass]=\"conditionalclass\"\n [ngStyle]=\"conditionalstyle\"\n (ngModelChange)=\"onModelChange($event)\"\n (blur)=\"handleBlur($event); checkForTrailingZeros($event);\"\n (focus)=\"checkForTrailingZeros($event)\"\n (input)=\"onInputChange($event.target.value)\"\n [ngModelOptions]=\"ngModelOptions\"\n [required]=\"required\"\n (keypress)=\"validateInputEntry($event)\"\n (keydown.backspace)=\"onBackspace($event)\"\n (keydown.enter)=\"onEnter($event)\"\n (keydown.ArrowUp)=\"onArrowPress($event, 'UP')\"\n (keydown.ArrowDown)=\"onArrowPress($event, 'DOWN')\"\n #input>\n" }]
|
|
1886
|
+
], template: "<input class=\"form-control app-textbox app-number-input\"\n inputmode=\"decimal\"\n focus-target\n [attr.name]=\"name\"\n type=\"text\"\n [ngModel]=\"displayValue\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [pattern]=\"regexp\"\n [attr.tabindex]=\"tabindex\"\n [attr.placeholder]=\"placeholder\"\n [attr.accesskey]=\"shortcutkey\"\n [attr.aria-label]=\"arialabel\"\n [autofocus]=\"autofocus\"\n [ngClass]=\"conditionalclass\"\n [ngStyle]=\"conditionalstyle\"\n (ngModelChange)=\"onModelChange($event)\"\n (blur)=\"handleBlur($event); checkForTrailingZeros($event);\"\n (focus)=\"checkForTrailingZeros($event)\"\n (input)=\"onInputChange($event.target.value)\"\n [ngModelOptions]=\"ngModelOptions\"\n [required]=\"required\"\n (keypress)=\"validateInputEntry($event)\"\n (keydown.backspace)=\"onBackspace($event)\"\n (keydown.delete)=\"onDelete($event)\"\n (keydown.enter)=\"onEnter($event)\"\n (keydown.ArrowUp)=\"onArrowPress($event, 'UP')\"\n (keydown.ArrowDown)=\"onArrowPress($event, 'DOWN')\"\n #input>\n" }]
|
|
1863
1887
|
}], () => [{ type: i0.Injector }, { type: i1$1.AbstractI18nService }, { type: i2.TrailingZeroDecimalPipe }, { type: undefined, decorators: [{
|
|
1864
1888
|
type: Inject,
|
|
1865
1889
|
args: ['EXPLICIT_CONTEXT']
|