@eui/components 16.2.7-snapshot-1701227657382 → 16.2.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs/dependencies.html +2 -2
- package/docs/js/search/search_index.js +2 -2
- package/esm2022/eui-input-number/eui-input-number.component.mjs +2 -2
- package/fesm2022/eui-components-eui-input-number.mjs +1 -1
- package/fesm2022/eui-components-eui-input-number.mjs.map +1 -1
- package/package.json +8 -8
|
@@ -204,7 +204,7 @@ export class EuiInputNumberComponent extends InputDirective {
|
|
|
204
204
|
}
|
|
205
205
|
onKeyDown(e) {
|
|
206
206
|
// check if it's a single symbol and not Special like (Ctrl, backspace etc)
|
|
207
|
-
if (e?.key
|
|
207
|
+
if (e?.key?.length <= 1 && !e.ctrlKey && !e.altKey && !e.metaKey) {
|
|
208
208
|
// stop event propagation if key pressed is not a number or locale character or minus sign
|
|
209
209
|
if (Number.isNaN(Number.parseInt(e.key, 10)) &&
|
|
210
210
|
this.isMinusAllowed(e.key) &&
|
|
@@ -586,4 +586,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
586
586
|
type: HostListener,
|
|
587
587
|
args: ['focusout']
|
|
588
588
|
}] } });
|
|
589
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLWlucHV0LW51bWJlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9ldWktaW5wdXQtbnVtYmVyL2V1aS1pbnB1dC1udW1iZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxRQUFRLEVBQ1IsU0FBUyxFQUNULE1BQU0sRUFFTixTQUFTLEVBR1QsV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBTUwsaUJBQWlCLEdBRXBCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxvQkFBb0IsRUFBNkIsTUFBTSx1QkFBdUIsQ0FBQztBQUUvRyxPQUFPLE1BQU0sTUFBTSxXQUFXLENBQUM7QUFFL0IsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxRQUFRLEVBQUUscUJBQXFCLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDeEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBNEMzQyxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsY0FBYztJQUN2RDs7T0FFRztJQUNILElBQ1csR0FBRztRQUNWLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNyQixDQUFDO0lBQ0QsSUFBVyxHQUFHLENBQUMsS0FBa0I7UUFDN0IsSUFBSSxDQUFDLElBQUksR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBQ0Q7O09BRUc7SUFDSCxJQUNXLEdBQUc7UUFDVixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDckIsQ0FBQztJQUNELElBQVcsR0FBRyxDQUFDLEtBQWtCO1FBQzdCLElBQUksQ0FBQyxJQUFJLEdBQUcsb0JBQW9CLENBQUMsS0FB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LGtCQUNyQjt3QkFDWjs0QkFDSSxTQUFTLEVBQUUscUJBQXFCOzRCQUNoQyxNQUFNLEVBQUUsQ0FBQyxjQUFjLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQzt5QkFDbkQ7d0JBQ0Q7NEJBQ0ksU0FBUyxFQUFFLG1CQUFtQjs0QkFDOUIsTUFBTSxFQUFFLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQzt5QkFDckM7cUJBQ0osUUFFSzt3QkFDRixRQUFRLEVBQUUsYUFBYTtxQkFDMUI7OzBCQWdISSxRQUFROzswQkFDUixNQUFNOzJCQUFDLFNBQVM7OzBCQUVoQixNQUFNOzJCQUFDLFFBQVE7NENBNUdULEdBQUc7c0JBRGIsS0FBSztnQkFXSyxHQUFHO3NCQURiLEtBQUs7Z0JBV0ssV0FBVztzQkFEckIsS0FBSztnQkFRSyxTQUFTO3NCQURuQixLQUFLO2dCQVNLLFVBQVU7c0JBRHBCLFdBQVc7dUJBQUMsT0FBTztnQkFPaEIsY0FBYztzQkFEakIsS0FBSztnQkFTRixNQUFNO3NCQURULEtBQUs7Z0JBUUYsWUFBWTtzQkFEZixLQUFLO2dCQVNGLE9BQU87c0JBRFYsS0FBSztnQkFZRixRQUFRO3NCQURYLEtBQUs7Z0JBUUcsVUFBVTtzQkFBbEIsS0FBSztnQkFDOEIsSUFBSTtzQkFBdkMsV0FBVzt1QkFBQyxXQUFXO2dCQUNmLEtBQUs7c0JBQWIsS0FBSztnQkFrSU4sT0FBTztzQkFETixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkF1QnZCLFNBQVM7c0JBRGxCLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQTJDekIsVUFBVTtzQkFEbkIsWUFBWTt1QkFBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBPcHRpb25hbCxcbiAgICBMT0NBTEVfSUQsXG4gICAgSW5qZWN0LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBEb0NoZWNrLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIFJlbmRlcmVyMixcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxuICAgIEluamVjdG9yLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExvY2FsZVNlcnZpY2UsIExvY2FsZVN0YXRlIH0gZnJvbSAnQGV1aS9jb3JlJztcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSwgY29lcmNlTnVtYmVyUHJvcGVydHksIEJvb2xlYW5JbnB1dCwgTnVtYmVySW5wdXQgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgdHlwZSBDbGVhdmVPcHRpb25zIH0gZnJvbSAnY2xlYXZlLmpzL29wdGlvbnMnO1xuaW1wb3J0IENsZWF2ZSBmcm9tICdjbGVhdmUuanMnO1xuaW1wb3J0IHsgQ2xlYXZlRXZlbnRPbkNoYW5nZSB9IGZyb20gJy4vbW9kZWxzL2NsZWF2ZS1ldmVudC1vbmNoYW5nZS5tb2RlbCc7XG5pbXBvcnQgeyBJbnB1dERpcmVjdGl2ZSB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9zaGFyZWQnO1xuaW1wb3J0IHsgRE9DVU1FTlQsIGdldExvY2FsZU51bWJlclN5bWJvbCwgTnVtYmVyU3ltYm9sIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEV1aUNsZWFyYWJsZURpcmVjdGl2ZSwgRXVpTG9hZGluZ0RpcmVjdGl2ZSB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9kaXJlY3RpdmVzJztcbmltcG9ydCB7IE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuZXhwb3J0IGludGVyZmFjZSBDbGVhdmVJbnN0YW5jZSBleHRlbmRzIENsZWF2ZSB7XG4gICAgaW5pdFN3YXBIaWRkZW5JbnB1dD86ICgpID0+IHZvaWQ7XG4gICAgaW5pdE51bWVyYWxGb3JtYXR0ZXI/OiAoKSA9PiB2b2lkO1xuICAgIGluaXRUaW1lRm9ybWF0dGVyPzogKCkgPT4gdm9pZDtcbiAgICBpbml0RGF0ZUZvcm1hdHRlcj86ICgpID0+IHZvaWQ7XG4gICAgaW5pdFBob25lRm9ybWF0dGVyPzogKCkgPT4gdm9pZDtcbiAgICB1cGRhdGVDcmVkaXRDYXJkUHJvcHNCeVZhbHVlPzogKCkgPT4gdm9pZDtcbiAgICB1cGRhdGVWYWx1ZVN0YXRlPzogKCkgPT4gdm9pZDtcbiAgICBjYWxsT25WYWx1ZUNoYW5nZWQ/OiAoKSA9PiB2b2lkO1xuICAgIG9uQ2hhbmdlPzogKGV2ZW50PzogRXZlbnQpID0+IHZvaWQ7XG4gICAgb25DdXQ/OiAoZXZlbnQ/OiBFdmVudCkgPT4gdm9pZDtcbiAgICBvbkZvY3VzPzogKGV2ZW50PzogRXZlbnQpID0+IHZvaWQ7XG4gICAgb25Db3B5PzogKGV2ZW50PzogRXZlbnQpID0+IHZvaWQ7XG4gICAgb25LZXlEb3duPzogKGV2ZW50PzogRXZlbnQpID0+IHZvaWQ7XG4gICAgb25DaGFuZ2VMaXN0ZW5lcj86IChldmVudD86IEV2ZW50KSA9PiB2b2lkO1xuICAgIG9uS2V5RG93bkxpc3RlbmVyPzogKGV2ZW50PzogRXZlbnQpID0+IHZvaWQ7XG4gICAgb25Gb2N1c0xpc3RlbmVyPzogKGV2ZW50PzogRXZlbnQpID0+IHZvaWQ7XG4gICAgb25DdXRMaXN0ZW5lcj86IChldmVudD86IEV2ZW50KSA9PiB2b2lkO1xuICAgIG9uQ29weUxpc3RlbmVyPzogKGV2ZW50PzogRXZlbnQpID0+IHZvaWQ7XG59XG5cbkBDb21wb25lbnQoe1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gICAgc2VsZWN0b3I6ICdpbnB1dFtldWlJbnB1dE51bWJlcl0nLFxuICAgIHN0eWxlVXJsczogWycuL3N0eWxlcy9faW5kZXguc2NzcyddLFxuICAgIHRlbXBsYXRlOiAnJyxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGhvc3REaXJlY3RpdmVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpcmVjdGl2ZTogRXVpQ2xlYXJhYmxlRGlyZWN0aXZlLFxuICAgICAgICAgICAgaW5wdXRzOiBbJ2V1aUNsZWFyYWJsZScsICdyZWFkb25seScsICdkaXNhYmxlZCddLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBkaXJlY3RpdmU6IEV1aUxvYWRpbmdEaXJlY3RpdmUsXG4gICAgICAgICAgICBpbnB1dHM6IFsnZXVpTG9hZGluZycsICdyZWFkb25seSddLFxuICAgICAgICB9LFxuICAgIF0sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1ob3N0LW1ldGFkYXRhLXByb3BlcnR5XG4gICAgaG9zdDoge1xuICAgICAgICAnKGJsdXIpJzogJ29uVG91Y2hlZCgpJyxcbiAgICB9LFxufSlcbmV4cG9ydCBjbGFzcyBFdWlJbnB1dE51bWJlckNvbXBvbmVudCBleHRlbmRzIElucHV0RGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIERvQ2hlY2ssIE9uQ2hhbmdlcyB7XG4gICAgLyoqXG4gICAgICogVGhlIG1pbmltdW0gbnVtYmVyIGNhbiBiZSBlbnRlcmVkLiBCbG9ja3MgdXNlcidzIGlucHV0IGlmIG5vdCBpbiByYW5nZS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgbWluKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9taW47XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgbWluKHZhbHVlOiBOdW1iZXJJbnB1dCkge1xuICAgICAgICB0aGlzLl9taW4gPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBtYXhpbXVtIG51bWJlciBjYW4gYmUgZW50ZXJlZC4gQmxvY2tzIHVzZXIncyBpbnB1dCBpZiBub3QgaW4gcmFuZ2UuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IG1heCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWF4O1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IG1heCh2YWx1ZTogTnVtYmVySW5wdXQpIHtcbiAgICAgICAgdGhpcy5fbWF4ID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpO1xuICAgIH1cbiAgICAvKiogQWRkcyBsZWFkaW5nIHplcm8gdG8gYSBudW1iZXIuIEZvcm1hdHRpbmcgd2lsbCBub3Qgd29yay5cbiAgICAgKiAgICAgIGUuZy4gd2l0aCBsZWFkaW5nWmVybz0zIGlucHV0IG51bWJlciA1ID0+IDAwNVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBsZWFkaW5nWmVybygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGVhZGluZ1plcm87XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgbGVhZGluZ1plcm8odmFsdWU6IE51bWJlcklucHV0KSB7XG4gICAgICAgIHRoaXMuX2xlYWRpbmdaZXJvID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpO1xuICAgIH1cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgaXNJbnZhbGlkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNJbnZhbGlkIHx8IG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBpc0ludmFsaWQoc3RhdGU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLnNldEludmFsaWQoc3RhdGUpO1xuICAgIH1cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgICBwdWJsaWMgZ2V0IGNzc0NsYXNzZXMoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFtzdXBlci5nZXRDc3NDbGFzc2VzKCdldWktaW5wdXQtbnVtYmVyJyksIHRoaXMuX2lzSW52YWxpZCA/ICdldWktaW5wdXQtbnVtYmVyLS1pbnZhbGlkJyA6ICcnXS5qb2luKCcgJykudHJpbSgpO1xuICAgIH1cblxuICAgIC8qKiBob3cgbWFueSBkaWdpdHMgZm9yIHRoZSBkZWNpbWFsIHBhcnQgKi9cbiAgICBASW5wdXQoKVxuICAgIGdldCBmcmFjdGlvbkRpZ2l0cygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fZnJhY3Rpb25EaWdpdHM7XG4gICAgfVxuICAgIHNldCBmcmFjdGlvbkRpZ2l0cyh2YWx1ZTogTnVtYmVySW5wdXQpIHtcbiAgICAgICAgdGhpcy5fZnJhY3Rpb25EaWdpdHMgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIC8qKiBob3cgbWFueSBkaWdpdHMgZm9yIHRoZSBpbnRlZ2VyIHBhcnQgKi9cbiAgICBASW5wdXQoKVxuICAgIGdldCBkaWdpdHMoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RpZ2l0cztcbiAgICB9XG4gICAgc2V0IGRpZ2l0cyh2YWx1ZTogTnVtYmVySW5wdXQpIHtcbiAgICAgICAgdGhpcy5fZGlnaXRzID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpO1xuICAgIH1cbiAgICBASW5wdXQoKVxuICAgIGdldCBmaWxsRnJhY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWxsRnJhY3Rpb247XG4gICAgfVxuICAgIHNldCBmaWxsRnJhY3Rpb24odmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9maWxsRnJhY3Rpb24gPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cbiAgICAvKiogcm91bmRzIGEgbnVtYmVyIHdpdGggbW9yZSB0aGFuIHR3byBkZWNpbWFscyBVUCAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHJvdW5kVXAoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JvdW5kVXA7XG4gICAgfVxuICAgIHNldCByb3VuZFVwKHZhbHVlOiBOdW1iZXJJbnB1dCkge1xuICAgICAgICB0aGlzLl9yb3VuZFVwID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX2lzSW52YWxpZDogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBkb2VzIG5vdCBmb3JtYXQgdGhlIGFuZCBkbyBhIHRob3VzYW5kIGdyb3VwaW5nIG9mIG51bWJlclxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IG5vRm9ybWF0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbm9Gb3JtYXQ7XG4gICAgfVxuICAgIHNldCBub0Zvcm1hdCh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX25vRm9ybWF0ID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9ub0Zvcm1hdDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBzdHlsZUNsYXNzOiBzdHJpbmc7XG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLnR5cGUnKSBwcm90ZWN0ZWQgdHlwZSA9ICdldWktbnVtYmVyJztcbiAgICBASW5wdXQoKSB2YWx1ZTogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBfcm91bmRVcDogbnVtYmVyO1xuICAgIC8vIFRPRE86IGZpbmQgdGhlIGNvcnJlY3QgdHlwZSBvciB0dXJuIGludG8gYSBnZW5lcmljLCBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8yL2dlbmVyaWNzLmh0bWxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHB1YmxpYyBvbkNoYW5nZUNhbGxiYWNrOiAoXzogYW55KSA9PiB2b2lkO1xuICAgIGNsZWF2ZUluc3RhbmNlOiBDbGVhdmVJbnN0YW5jZTtcbiAgICBwcml2YXRlIF9taW46IG51bWJlcjtcbiAgICBwcml2YXRlIF9tYXg6IG51bWJlcjtcblxuICAgIHByaXZhdGUgX2xlYWRpbmdaZXJvID0gMDtcbiAgICAvKiogaG9sZHMgaW5zdGFuY2Ugb2YgY2xlYXZlICovXG4gICAgLyoqIG9wdGlvbnMgZm9yIHRoZSBDbGVhdmUgaW5zdGFuY2UgKi9cbiAgICBwcml2YXRlIG9wdGlvbnM6IENsZWF2ZU9wdGlvbnM7XG4gICAgcHJpdmF0ZSBfZnJhY3Rpb25EaWdpdHMgPSAwO1xuICAgIHByaXZhdGUgX2RpZ2l0czogbnVtYmVyO1xuICAgIHByaXZhdGUgX2ZpbGxGcmFjdGlvbjogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByb3RlY3RlZCBfcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgbG9jYWxlU2VydmljZTogTG9jYWxlU2VydmljZSxcbiAgICAgICAgQEluamVjdChMT0NBTEVfSUQpIHByaXZhdGUgbG9jYWxlX2lkOiBzdHJpbmcsXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogRG9jdW1lbnQsXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKF9lbGVtZW50UmVmLCBfcmVuZGVyZXIsIGluamVjdG9yKTtcblxuICAgICAgICAvLyBzZXQgZGVmYXVsdCBvcHRpb25zXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHtcbiAgICAgICAgICAgIG51bWVyYWw6IHRydWUsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG5cbiAgICAgICAgdGhpcy5jb250cm9sID0gdGhpcy5pbmplY3Rvci5nZXQoTmdDb250cm9sLCB1bmRlZmluZWQsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgICAgICAgLy8gaW5zdGFudGlhdGUgY2xlYXZlXG4gICAgICAgIGlmICghdGhpcy5jb250cm9sKSB7XG4gICAgICAgICAgICB0aGlzLmluaXRDbGVhdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHN1YnNjcmliZSB0byBsb2NhbGl6YXRpb24gc2VydmljZSBhbmQgbGlzdGVuIGZvciBsb2NhbGUgY2hhbmdlLiBEZS1jb25zdHJ1Y3Rpb24gb2YgbG9jYWxlIHNob3VsZCBoYXBwZW4gaGVyZSFcbiAgICAgICAgdGhpcy5sb2NhbGVTZXJ2aWNlPy5nZXRTdGF0ZSgpLnN1YnNjcmliZSgoc3RhdGU6IExvY2FsZVN0YXRlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLmdldENsZWF2ZU9wdHNCYXNlZE9uTG9jYWxlKHN0YXRlPy5pZCk7XG5cbiAgICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgb3B0aW9ucyBvbiB0aGUgY2xlYXZlIGluc3RhbmNlXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU9wdGlvbnModHJ1ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ3Jvb3RDbGFzc05hbWUnLCAnZXVpLWlucHV0LW51bWJlcicpO1xuICAgIH1cblxuICAgIG5nRG9DaGVjaygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbCA9IHRoaXMuaW5qZWN0b3IuZ2V0KE5nQ29udHJvbCwgdW5kZWZpbmVkLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNJbnZhbGlkID0gdGhpcy5jb250cm9sID8gdGhpcy5jb250cm9sLmludmFsaWQgJiYgdGhpcy5jb250cm9sLnRvdWNoZWQgOiB0aGlzLl9pc0ludmFsaWQ7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoT2JqZWN0Lmhhc093bihjaGFuZ2VzLCAndmFsdWUnKSkge1xuICAgICAgICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLmNsZWF2ZUluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhdmVJbnN0YW5jZS5zZXRSYXdWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoT2JqZWN0Lmhhc093bihjaGFuZ2VzLCAnZnJhY3Rpb25EaWdpdHMnKSkge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zID0geyAuLi50aGlzLm9wdGlvbnMsIG51bWVyYWxEZWNpbWFsU2NhbGU6IHRoaXMuZnJhY3Rpb25EaWdpdHMgfTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlT3B0aW9ucygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChPYmplY3QuaGFzT3duKGNoYW5nZXMsICdub0Zvcm1hdCcpKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSB7IC4uLnRoaXMub3B0aW9ucywgbnVtZXJhbFRob3VzYW5kc0dyb3VwU3R5bGU6IHRoaXMubm9Gb3JtYXQgPyAnbm9uZScgOiAndGhvdXNhbmQnIH07XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU9wdGlvbnMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoT2JqZWN0Lmhhc093bihjaGFuZ2VzLCAnZmlsbEZyYWN0aW9uJykgJiYgdGhpcy5jbGVhdmVJbnN0YW5jZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBseUZyYWN0aW9uRmlsbCh0aGlzLmNsZWF2ZUluc3RhbmNlLmdldFJhd1ZhbHVlKCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChPYmplY3QuaGFzT3duKGNoYW5nZXMsICdkaWdpdHMnKSkge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zID0geyAuLi50aGlzLm9wdGlvbnMsIG51bWVyYWxJbnRlZ2VyU2NhbGU6IHRoaXMuZGlnaXRzIH07XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU9wdGlvbnMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoT2JqZWN0Lmhhc093bihjaGFuZ2VzLCAnbWluJykpIHtcbiAgICAgICAgICAgIGlmIChjaGFuZ2VzWydtaW4nXS5jdXJyZW50VmFsdWUgPj0gMCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNsZWF2ZUluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRha2UgY2FyZSBvZiB0aGUgc2lnbiBzeW1ib2xcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGVhdmVJbnN0YW5jZS5zZXRSYXdWYWx1ZShNYXRoLmFicyhOdW1iZXIodGhpcy5jbGVhdmVJbnN0YW5jZS5nZXRSYXdWYWx1ZSgpKSkudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChPYmplY3QuaGFzT3duKGNoYW5nZXMsICdyb3VuZFVwJykpIHtcbiAgICAgICAgICAgIGlmIChjaGFuZ2VzWydyb3VuZFVwJ10uY3VycmVudFZhbHVlID4gMCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNsZWF2ZUluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBudW1iZXIgPSBOdW1iZXIucGFyc2VGbG9hdCh0aGlzLmNsZWF2ZUluc3RhbmNlLmdldFJhd1ZhbHVlKCkpO1xuICAgICAgICAgICAgICAgICAgICBudW1iZXIgPSB0aGlzLmRlY2ltYWxBZGp1c3QobnVtYmVyLCB0aGlzLnJvdW5kVXAgKiAtMSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xlYXZlSW5zdGFuY2Uuc2V0UmF3VmFsdWUobnVtYmVyLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgICAgICAvLyBkZXN0cm95IGNsZWF2ZSBpbnN0YW5jZVxuICAgICAgICBpZiAodGhpcy5jbGVhdmVJbnN0YW5jZSkge1xuICAgICAgICAgICAgdGhpcy5jbGVhdmVJbnN0YW5jZS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUT0RPOiBmaW5kIHRoZSBjb3JyZWN0IHR5cGUgb3IgdHVybiBpbnRvIGEgZ2VuZXJpYywgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svMi9nZW5lcmljcy5odG1sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBvbkNoYW5nZTogYW55ID0gKF86IGFueSk6IHZvaWQgPT4ge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sICYmIChfICE9PSBudWxsIHx8IF8gIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICAgIC8vIHBhcnNlIG51bWJlclxuICAgICAgICAgICAgLy8gY29uc3QgdmFsdWUgPSBOdW1iZXIoXyk7XG4gICAgICAgICAgICAvLyBydW4gb24gbmV4dCBNaWNyb1Rhc2sgdG8gYXZvaWQgTkcwMTAwIGVycm9yIFRPRE86IGRlZXBlciBpbnZlc3RpZ2F0aW9uXG4gICAgICAgICAgICAvLyBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHRoaXMuY29udHJvbC52aWV3VG9Nb2RlbFVwZGF0ZSh2YWx1ZSkpO1xuICAgICAgICAgICAgLy8gaW4gY2FzZSBjb250cm9sIGlzIEZvcm1Db250cm9sXG4gICAgICAgICAgICAvLyB0aGlzLmNvbnRyb2w/LmNvbnRyb2wuc2V0VmFsdWUoaXNOYU4odmFsdWUpID8gbnVsbCA6IHZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UsIGVtaXRNb2RlbFRvVmlld0NoYW5nZTogZmFsc2UgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8vIFRPRE86IGZpbmQgdGhlIGNvcnJlY3QgdHlwZSBvciB0dXJuIGludG8gYSBnZW5lcmljLCBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8yL2dlbmVyaWNzLmh0bWxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIG9uVG91Y2hlZDogYW55ID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICB0aGlzLmNvbnRyb2w/LmNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgIH07XG5cbiAgICBASG9zdExpc3RlbmVyKCdwYXN0ZScsIFsnJGV2ZW50J10pXG4gICAgb25QYXN0ZShldmVudDogQ2xpcGJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgLy8gZ2V0IHRoZSB2YWx1ZSBmcm9tIGNsaXBib2FyZFxuICAgICAgICBjb25zdCB2YWx1ZSA9IChldmVudC5jbGlwYm9hcmREYXRhIHx8IHdpbmRvd1snY2xpcGJvYXJkRGF0YSddKS5nZXREYXRhKCd0ZXh0Jyk7XG4gICAgICAgIC8vIGluIGNhc2Ugcm91bmQgVVAgaXMgZW5hYmxlZFxuICAgICAgICBpZiAodGhpcy5fcm91bmRVcCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGRpdiA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIGNsb25lIG9mIGNsZWF2ZUluc3RhbmNlXG4gICAgICAgICAgICBjb25zdCBjbG9uZUluc3RhbmNlOiBDbGVhdmVJbnN0YW5jZSA9IG5ldyBDbGVhdmUoZGl2LCB7IC4uLnRoaXMub3B0aW9ucywgbnVtZXJhbERlY2ltYWxTY2FsZTogOCB9KTtcbiAgICAgICAgICAgIGNsb25lSW5zdGFuY2Uuc2V0UmF3VmFsdWUodmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICBsZXQgbnVtYmVyID0gTnVtYmVyLnBhcnNlRmxvYXQoY2xvbmVJbnN0YW5jZS5nZXRSYXdWYWx1ZSgpKTtcbiAgICAgICAgICAgIG51bWJlciA9IHRoaXMuZGVjaW1hbEFkanVzdChudW1iZXIsIHRoaXMucm91bmRVcCAqIC0xKTtcbiAgICAgICAgICAgIGlmICghTnVtYmVyLmlzTmFOKG51bWJlcikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWF2ZUluc3RhbmNlLnNldFJhd1ZhbHVlKG51bWJlci50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBpbnZlc3RpZ2F0ZSBpbiB0aGUgZnV0dXJlIGhvdyBjYW4gdGhpcyBiZSBhdm9pZGVkXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMud3JpdGVWYWx1ZShudW1iZXIudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgICBwcm90ZWN0ZWQgb25LZXlEb3duKGU6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgLy8gY2hlY2sgaWYgaXQncyBhIHNpbmdsZSBzeW1ib2wgYW5kIG5vdCBTcGVjaWFsIGxpa2UgKEN0cmwsIGJhY2tzcGFjZSBldGMpXG4gICAgICAgIGlmIChlPy5rZXkubGVuZ3RoIDw9IDEgJiYgIWUuY3RybEtleSAmJiAhZS5hbHRLZXkgJiYgIWUubWV0YUtleSkge1xuICAgICAgICAgICAgLy8gc3RvcCBldmVudCBwcm9wYWdhdGlvbiBpZiBrZXkgcHJlc3NlZCBpcyBub3QgYSBudW1iZXIgb3IgbG9jYWxlIGNoYXJhY3RlciBvciBtaW51cyBzaWduXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgTnVtYmVyLmlzTmFOKE51bWJlci5wYXJzZUludChlLmtleSwgMTApKSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuaXNNaW51c0FsbG93ZWQoZS5rZXkpICYmXG4gICAgICAgICAgICAgICAgZS5rZXkgIT09IGdldExvY2FsZU51bWJlclN5bWJvbCh0aGlzLmxvY2FsZVNlcnZpY2U/LmN1cnJlbnRMb2NhbGUgfHwgdGhpcy5sb2NhbGVfaWQsIE51bWJlclN5bWJvbC5EZWNpbWFsKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgLy8gc3RvcCBldmVudCBwcm9wYWdhdGlvbiBpZiBrZXkgcHJlc3NlZCBleGNlZWRzIHRoZSBtaW4vbWF4IHZhbHVlIHJhbmdlXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFOdW1iZXIuaXNOYU4oTnVtYmVyLnBhcnNlSW50KGUua2V5LCAxMCkpICYmIHRoaXMuaXNPdXRTaWRlUmFuZ2UoZSkpIHtcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc091dFNpZGVSYW5nZShlKSkge1xuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gcHJvdGVjdCBkZWNpbWFsIHN5bWJvbCBkZWxldGlvbiBpbiBjYXNlIGZpbGxGcmFjdGlvbiBpcyBvblxuICAgICAgICBpZiAoZS5rZXkgPT09ICdEZWxldGUnIHx8IGUua2V5ID09PSAnQmFja3NwYWNlJykge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIC8vIHBvc2l0aW9uIG9mIGNhcmV0XG4gICAgICAgICAgICBjb25zdCBwb3MgPSBlbGVtZW50LnNlbGVjdGlvblN0YXJ0O1xuICAgICAgICAgICAgLy8gZ2V0IGNoYXJhY3RlciBhYm91dCB0byBiZSBkZWxldGVkXG4gICAgICAgICAgICBjb25zdCBjaGFyID0gZWxlbWVudC52YWx1ZS5jaGFyQXQocG9zIC0gMSk7XG4gICAgICAgICAgICAvLyBpbiBjYXNlIHRoZSBjaGFyIGlzIHRoZSBkZWNpbWFsIHN5bWJvbCBwcmV2ZW50IGRlbGV0aW9uIGFuZCBtb3ZlIGNhcmV0IGluIGZyb250XG4gICAgICAgICAgICBpZiAoY2hhciA9PT0gZ2V0TG9jYWxlTnVtYmVyU3ltYm9sKHRoaXMubG9jYWxlU2VydmljZT8uY3VycmVudExvY2FsZSB8fCB0aGlzLmxvY2FsZV9pZCwgTnVtYmVyU3ltYm9sLkRlY2ltYWwpKSB7XG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5zZXRTZWxlY3Rpb25SYW5nZShwb3MgLSAxLCBwb3MgLSAxKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc091dFNpZGVSYW5nZShlKSkge1xuICAgICAgICAgICAgICAgIC8vIGRvbid0IGFsbG93IGluc2VydGlvbiB0aGF0IHdpbGwgcHV0IG51bWJlciBvdXQgb2YgcmFuZ2VcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2ZvY3Vzb3V0JylcbiAgICBwcm90ZWN0ZWQgb25Gb2N1c291dCgpOiB2b2lkIHtcbiAgICAgICAgLy8gaW4gY2FzZSBmaWxsRnJhY3Rpb24gZmVhdHVyZSBpcyBvbiBhbmQgdGhlcmUncyBubyBpbnRlZ2VyIHBhcnQgYWRkIGxlYWRpbmcgMFxuICAgICAgICBpZiAodGhpcy5maWxsRnJhY3Rpb24gJiYgdGhpcy5jbGVhdmVJbnN0YW5jZS5nZXRSYXdWYWx1ZSgpLm1hdGNoKC9eXFwuWzAtOV0rL2cpKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWF2ZUluc3RhbmNlLnNldFJhd1ZhbHVlKCcwJyArIHRoaXMuY2xlYXZlSW5zdGFuY2UuZ2V0UmF3VmFsdWUoKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpbiBjYXNlIHJvdW5kIFVQIGlzIGVuYWJsZWRcbiAgICAgICAgaWYgKHRoaXMuX3JvdW5kVXAgPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBudW1iZXIgPSBOdW1iZXIucGFyc2VGbG9hdCh0aGlzLmNsZWF2ZUluc3RhbmNlLmdldFJhd1ZhbHVlKCkpO1xuICAgICAgICAgICAgdGhpcy5jbGVhdmVJbnN0YW5jZS5zZXRSYXdWYWx1ZSh0aGlzLmRlY2ltYWxBZGp1c3QobnVtYmVyLCB0aGlzLnJvdW5kVXAgKiAtMSkudG9TdHJpbmcoKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpbiBjYXNlIG1pbiBpcyBzZXQgYW5kIHZhbHVlIGlzIGxlc3MgdGhhbiBtaW4gcmVzZXQgdG8gdGhlIG1pbiB2YWx1ZVxuICAgICAgICBpZiAodGhpcy5taW4gJiYgTnVtYmVyLnBhcnNlRmxvYXQodGhpcy5jbGVhdmVJbnN0YW5jZS5nZXRSYXdWYWx1ZSgpKSA8IHRoaXMubWluKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWF2ZUluc3RhbmNlLnNldFJhd1ZhbHVlKHRoaXMubWluLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHNldEludmFsaWQoc3RhdGU/OiBCb29sZWFuSW5wdXQpOiB2b2lkIHtcbiAgICAgICAgLy8gaW4gY2FzZSBpdCdzIGNvbnRyb2xsZWQgYnkgTmdDb250cm9sIG92ZXJyaWRlXG4gICAgICAgIHRoaXMuX2lzSW52YWxpZCA9IHRoaXMuY29udHJvbCA/IHRoaXMuY29udHJvbC5pbnZhbGlkICYmIHRoaXMuY29udHJvbC50b3VjaGVkIDogY29lcmNlQm9vbGVhblByb3BlcnR5KHN0YXRlKTtcblxuICAgICAgICAvLyBzZXQgQmFzZURpcmVjdGl2ZSBBdHRyaWJ1dGVcbiAgICAgICAgc3VwZXIuZXVpRGFuZ2VyID0gdGhpcy5faXNJbnZhbGlkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBPdmVycmlkZSBzZXRQbGFjZWhvbGRlciBzZXRQbGFjZWhvbGRlckF0dHJpYnV0ZSBvZiBJbnB1dERpcmVjdGl2ZVxuICAgICAqIFVwZGF0ZXMgdGhlIHBsYWNlaG9sZGVyIHZhbHVlIGJhc2VkIG9uIGN1cnJlbnQgbnVtYmVyIGZvcm1hdCBhbmQgZ2l2ZW4gdmFsdWUuXG4gICAgICogSWYgdmFsdWUgcGFzc2VkIGNvbnRhaW5zIGNoYXJhY3RlcnMgaXQgZG9lc24ndCBmb3JtYXQgcGxhY2Vob2xkZXIuXG4gICAgICogKi9cbiAgICBwcm90ZWN0ZWQgc2V0UGxhY2Vob2xkZXJBdHRyaWJ1dGUodmFsdWU6IHN0cmluZyB8IG51bWJlciA9IDk5OTk5OS45OTk5KTogdm9pZCB7XG4gICAgICAgIC8vIGlmIHZhbHVlIGlzIGEgbnVtYmVyLCBmb3JtYXQgdGhlIHZhbHVlIGJhc2VkIG9uIGN1cnJlbnQgbnVtYmVyIGZvcm1hdFxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiAhaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICBjb25zdCBkaXYgPSB0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgICAgICAgICAvLyBjcmVhdGUgYSBjbG9uZSBvZiBjbGVhdmVJbnN0YW5jZVxuICAgICAgICAgICAgY29uc3QgY2xvbmVJbnN0YW5jZTogQ2xlYXZlSW5zdGFuY2UgPSBuZXcgQ2xlYXZlKGRpdiwgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgICAgIC8vIEJFV0FSRTogYnkgdGhlIHRpbWUgeW91ciBzZXRSYXdWYWx1ZSBjbGVhdmUgb3B0aW9ucyBoYXZlIGNoYW5nZWQgdGh1cyBudW1iZXIgZm9ybWF0dGluZ1xuICAgICAgICAgICAgY2xvbmVJbnN0YW5jZS5zZXRSYXdWYWx1ZSh2YWx1ZS50b1N0cmluZygpKTtcbiAgICAgICAgICAgIC8vIHNldCB0aGUgdmFsdWUgd2l0aCBjdXJyZW50IGZvcm1hdCBhcyBwbGFjZWhvbGRlclxuICAgICAgICAgICAgc3VwZXIuc2V0UGxhY2Vob2xkZXJBdHRyaWJ1dGUoY2xvbmVJbnN0YW5jZS5nZXRGb3JtYXR0ZWRWYWx1ZSgpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBzdXBlci5zZXRQbGFjZWhvbGRlckF0dHJpYnV0ZSh2YWx1ZS50b1N0cmluZygpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBsYWNlaG9sZGVyO1xuICAgICAgICAgICAgc3VwZXIuc2V0UGxhY2Vob2xkZXJBdHRyaWJ1dGUodmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBpbnN0YW50aWF0ZSBDbGVhdmUuanNcbiAgICAgKi9cbiAgICAvLyBUT0RPOiBmaW5kIHRoZSBjb3JyZWN0IHR5cGUgb3IgdHVybiBpbnRvIGEgZ2VuZXJpYywgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svMi9nZW5lcmljcy5odG1sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBwcml2YXRlIGluaXRDbGVhdmUob25DaGFuZ2VDYWxsYmFjaz86IChvYmo6IGFueSkgPT4gYW55KTogdm9pZCB7XG4gICAgICAgIC8vIGNoYW5nZSB0aGUgY2xlYXZlIHByb3RvdHlwZSBmdW5jdGlvbiB0byBpbnRlcmNlcHQgb25DdXQgY2FsbGJhY2tcbiAgICAgICAgLy8gYW5kIGFsbG93IGJhc2VkIG9uIHRoZSBldmVudCBidWJibGluZyBhbmQgZGlzYWJsZWQgc3RhdGVcbiAgICAgICAgLy8gVElQOiBjaGFuZ2UgYmVoYXZpb3Igb2Ygb25DdXQgdG8gc3RvcCBpbiBjYXNlIGJ1YmJsZSBpcyBjYW5jZWxlZFxuICAgICAgICAvLyBUT0RPOiBTZWUgcmVsZXZhbnQgaXNzdWUgaHR0cHM6Ly9naXRodWIuY29tL25vc2lyL2NsZWF2ZS5qcy9pc3N1ZXMvNjc1XG4gICAgICAgIGNvbnN0IF9vbkN1dCA9IENsZWF2ZS5wcm90b3R5cGVbJ29uQ3V0J107XG4gICAgICAgIENsZWF2ZS5wcm90b3R5cGVbJ29uQ3V0J10gPSBmdW5jdGlvbiAoZTogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1pbnZhbGlkLXRoaXNcbiAgICAgICAgICAgIGlmICghZS5jYW5jZWxCdWJibGUgJiYgIXRoaXMuZWxlbWVudC5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1pbnZhbGlkLXRoaXNcbiAgICAgICAgICAgICAgICBfb25DdXQuY2FsbCh0aGlzLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAvLyBpbiBjYXNlIG9wdGlvbnMgaXMgdW5kZWZpbmVkXG4gICAgICAgIGNvbnN0IG9wdHM6IENsZWF2ZU9wdGlvbnMgPSB7IC4uLnRoaXMub3B0aW9ucyB9O1xuXG4gICAgICAgIC8vIHNldCB0aGUgb25WYWx1ZSBjaGFuZ2UgbGlzdGVuZXIgdG8ga2VlcCB0aGUgdmFsdWUgYXQgcmVhZE9ubHkgZWxlbWVudCBpbiBzeW5jXG4gICAgICAgIG9wdHMub25WYWx1ZUNoYW5nZWQgPSBvbkNoYW5nZUNhbGxiYWNrIHx8IHRoaXMub25WYWx1ZUNoYW5nZWQuYmluZCh0aGlzKTtcblxuICAgICAgICAvLyBpbiBjYXNlIHJvdW5kIFVQIGlzIGVuYWJsZWRcbiAgICAgICAgaWYgKHRoaXMuX3JvdW5kVXAgPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBudW1iZXIgPSBOdW1iZXIucGFyc2VGbG9hdCh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5kZWNpbWFsQWRqdXN0KG51bWJlciwgdGhpcy5yb3VuZFVwICogLTEpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY3JlYXRlIHRoZSBDbGVhdmUgaW5zdGFuY2Ugd2l0aCB0aGUgbmV3IG9yIHVwZGF0ZWQgb3B0aW9uc1xuICAgICAgICB0aGlzLmNsZWF2ZUluc3RhbmNlID0gbmV3IENsZWF2ZSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIG9wdHMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIGNsZWF2ZSBvcHRpb25zIGJ5IGRlc3Ryb3lpbmcgdGhlIGN1cnJlbnQgaW5zdGFuY2UgYW5kIGNyZWF0aW5nIGFub3RoZXIgb25lIHdoaWxlIGtlZXBpbmcgdGhlIHByZXZpb3VzXG4gICAgICogdmFsdWUuXG4gICAgICovXG4gICAgcHJpdmF0ZSB1cGRhdGVPcHRpb25zKGxvY2FsZVVwZGF0ZWQgPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jbGVhdmVJbnN0YW5jZSkge1xuICAgICAgICAgICAgLy8gdGhlIHZhbHVlIGJlZm9yZSBkZXN0cm95aW5nIGNsZWF2ZSBpbnN0YW5jZVxuICAgICAgICAgICAgY29uc3QgcHJldmlvdXNWYWx1ZSA9IHRoaXMuY2xlYXZlSW5zdGFuY2UuZ2V0UmF3VmFsdWUoKTtcblxuICAgICAgICAgICAgLy8gdXBkYXRlIHRoZSBDbGVhdmUgaW5zdGFuY2Ugd2l0aCB0aGUgbmV3IG9yIHVwZGF0ZWQgb3B0aW9uc1xuICAgICAgICAgICAgdGhpcy5jbGVhdmVJbnN0YW5jZS5wcm9wZXJ0aWVzID0ge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuY2xlYXZlSW5zdGFuY2UucHJvcGVydGllcyxcbiAgICAgICAgICAgICAgICAuLi50aGlzLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgaW5pdFZhbHVlOiBwcmV2aW91c1ZhbHVlLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgLy8gaW5pdCBudW1iZXIgZm9ybWF0dGVyIHdpdGggdXBkYXRlZCBvcHRpb25zXG4gICAgICAgICAgICB0aGlzLmNsZWF2ZUluc3RhbmNlLmluaXROdW1lcmFsRm9ybWF0dGVyKCk7XG5cbiAgICAgICAgICAgIC8vIEluIGNhc2UgcHJldmlvdXMgc2V0dGluZ3Mgd2hlcmUgbnVtZXJhbERlY2ltYWxNYXJrPScuJyB3aXRoIHZhbHVlIDEwMDAuOTksIGFuZCB0aGV5IGNoYW5nZWQgdG9cbiAgICAgICAgICAgIC8vIG51bWVyYWxEZWNpbWFsTWFyaz0nLCc7IHNldCBpbml0VmFsdWUgdG8gMTAwMC45OSBvciBldmVuIDEwMDAsOTkgd2lsbCBub3QgYmUgcmVmbGVjdGVkIGFuZCBjbGVhdmUgd2lsbFxuICAgICAgICAgICAgLy8gcmVtb3ZlIHRoZSBkZWNpbWFsIHBhcnQuIFNldCBvZiB0aGUgdmFsdWUgYWZ0ZXIgaW5pdGlhbGl6YXRpb24gY2F1c2VzIHJlZm9ybWF0IG9mIG51bWJlciBhbmQgd29ya3MuXG4gICAgICAgICAgICB0aGlzLmNsZWF2ZUluc3RhbmNlLnNldFJhd1ZhbHVlKHByZXZpb3VzVmFsdWUpO1xuXG4gICAgICAgICAgICAvLyBwYXJzZSBudW1iZXJcbiAgICAgICAgICAgIGNvbnN0IG51bWJlciA9IHRoaXMucGFyc2VOdW1iZXIodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBsYWNlaG9sZGVyIHx8IHVuZGVmaW5lZCwgbG9jYWxlVXBkYXRlZCk7XG4gICAgICAgICAgICAvLyBzZXQgcGxhY2Vob2xkZXIgaW4gY2FzZSBub25lIGlzIHByb3ZpZGVkXG4gICAgICAgICAgICB0aGlzLnNldFBsYWNlaG9sZGVyQXR0cmlidXRlKG51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayBmdW5jdGlvbiBvZiB0aGUgQ2xlYXZlIGluc3RhbmNlIHRoYXQgaXMgaW52b2tlZCB3aGVuIHZhbHVlIGlzIGNoYW5nZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnQgdHlwZSBvZiBDbGVhdmVFdmVudE9uQ2hhbmdlXG4gICAgICovXG4gICAgcHJpdmF0ZSBvblZhbHVlQ2hhbmdlZChldmVudDogQ2xlYXZlRXZlbnRPbkNoYW5nZSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IHRhcmdldCB9ID0gZXZlbnQ7XG5cbiAgICAgICAgaWYgKHRoaXMuZmlsbEZyYWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGx5RnJhY3Rpb25GaWxsKHRhcmdldC5yYXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkNoYW5nZShOdW1iZXIucGFyc2VGbG9hdCh0YXJnZXQucmF3VmFsdWUpKTtcbiAgICAgICAgLy8gZmlsbCBsZWFkaW5nIHplcm9cbiAgICAgICAgaWYgKHRoaXMubGVhZGluZ1plcm8pIHtcbiAgICAgICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLmxlYWRpbmdaZXJvID4gdGhpcy5kaWdpdHMgJiYgdGhpcy5kaWdpdHMgPiAwID8gdGhpcy5kaWdpdHMgOiB0aGlzLmxlYWRpbmdaZXJvO1xuICAgICAgICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5wYWRaZXJvKGV2ZW50LnRhcmdldC5yYXdWYWx1ZSwgc2l6ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiByZXNwb25zaWJsZSB0byBleHRyYWN0IGFsbCBsb2NhbGUgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGJ1aWxkIENsZWF2ZU9wdGlvbnMgcmVsYXRlZCB0byBudW1iZXIgZm9ybWF0LlxuICAgICAqXG4gICAgICogQHBhcmFtIGlkIFRoZSBpZCBvZiB0aGUgbG9jYWxlXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRDbGVhdmVPcHRzQmFzZWRPbkxvY2FsZShpZDogc3RyaW5nKTogQ2xlYXZlT3B0aW9ucyB7XG4gICAgICAgIGlmICghaWQgfHwgaWQgPT09ICcnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvY2FsZSBpZCBjYW5ub3QgYmUgZW1wdHkgb3IgdW5kZWZpbmVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0czogQ2xlYXZlT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIG51bWVyYWw6IHRydWUsXG4gICAgICAgICAgICBkZWxpbWl0ZXI6IGdldExvY2FsZU51bWJlclN5bWJvbChpZCwgTnVtYmVyU3ltYm9sLkdyb3VwKSxcbiAgICAgICAgICAgIG51bWVyYWxEZWNpbWFsTWFyazogZ2V0TG9jYWxlTnVtYmVyU3ltYm9sKGlkLCBOdW1iZXJTeW1ib2wuRGVjaW1hbCksXG4gICAgICAgICAgICBudW1lcmFsRGVjaW1hbFNjYWxlOiB0aGlzLmZyYWN0aW9uRGlnaXRzLFxuICAgICAgICAgICAgbnVtZXJhbEludGVnZXJTY2FsZTogdGhpcy5kaWdpdHMsXG4gICAgICAgICAgICBudW1lcmFsVGhvdXNhbmRzR3JvdXBTdHlsZTogdGhpcy5ub0Zvcm1hdCA/ICdub25lJyA6ICd0aG91c2FuZCcsIC8vIFRPRE86IGltcGxlbWVudCBiYXNlZCBvbiBsb2NhbGVcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4geyAuLi50aGlzLm9wdGlvbnMsIC4uLm9wdHMgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBmaWxsIG9mIGRlY2ltYWwgcGFydCB3aXRoIHplcm9zIGluIGNhc2UgZGVjaW1hbCBwYXJ0IG9mIGdpdmVuIG51bWJlciBoYXNcbiAgICAgKiBzaXplIGxlc3MgdGhhbiB0aGUgbWF4IGZyYWN0aW9uIGRpZ2l0cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBudW1iZXJcbiAgICAgKiBAcGFyYW0gY2xlYXZlSW5zdGFuY2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgYXBwbHlGcmFjdGlvbkZpbGwobnVtYmVyOiBzdHJpbmcsIGNsZWF2ZUluc3RhbmNlOiBDbGVhdmVJbnN0YW5jZSA9IHRoaXMuY2xlYXZlSW5zdGFuY2UpOiB2b2lkIHtcbiAgICAgICAgLy8gaWYgZmlsbCBmcmFjdGlvbiBpcyBlbmFibGVkIGFuZCB0aGVyZSdzIGNsZWF2ZSBpbnN0YW5jZVxuICAgICAgICBpZiAodGhpcy5maWxsRnJhY3Rpb24pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNsZWF2ZUluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgbnVtYmVyID0gbnVtYmVyPy50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09ICcnIHx8ICFudW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBoYXNEZWNpbWFsID0gbnVtYmVyLnNwbGl0KCcuJykubGVuZ3RoID4gMTtcbiAgICAgICAgICAgICAgICAvLyBpbiBjYXNlIHRoZXJlJ3MgYWxyZWFkeSBkZWNpbWFsIHBvaW50IGluIG51bWJlclxuICAgICAgICAgICAgICAgIGlmIChoYXNEZWNpbWFsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlY2ltYWxTaXplID0gbnVtYmVyLnNwbGl0KCcuJylbMV0ubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiBzaXplIG9mIGRlY2ltYWwgcGFydCBvZiBudW1iZXIgaXMgbGVzcyB0aGFuIHRoZSBtYXggZnJhY3Rpb24gZGlnaXRzXG4gICAgICAgICAgICAgICAgICAgIGlmIChkZWNpbWFsU2l6ZSA8IHRoaXMuX2ZyYWN0aW9uRGlnaXRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgPSBudW1iZXIgKyBuZXcgQXJyYXkodGhpcy5fZnJhY3Rpb25EaWdpdHMgLSBkZWNpbWFsU2l6ZSkuZmlsbCgwKS5qb2luKCcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvcyA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWF2ZUluc3RhbmNlLnNldFJhd1ZhbHVlKG51bWJlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UocG9zLCBwb3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIGluIGNhc2UgdGhlcmUncyBub3QsIGZvcmNlIGl0IGJ5IGZpbGxpbmcgaXQgYXMgbXVjaCB6ZXJvIGFzIHRoZSBmcmFjdGlvbiBkaWdpdHNcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZnJhY3Rpb25EaWdpdHMgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIG51bWJlciA9IGAke251bWJlcn0uJHtuZXcgQXJyYXkodGhpcy5fZnJhY3Rpb25EaWdpdHMpLmZpbGwoMCkuam9pbignJyl9YDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9zID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICBjbGVhdmVJbnN0YW5jZS5zZXRSYXdWYWx1ZShudW1iZXIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UocG9zLCBwb3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhcnNlcyBhIGdpdmVuIGZvcm1hdHRlZCBudW1iZXIgYW5kIHJldHVybnMgaXQgYXMgYSBudW1iZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIGZvcm1hdHRlZCBudW1iZXIgeW91IHdhbnQgdG8gcGFyc2UgZS5nLiAxMTEsODg4LjIyXG4gICAgICogQHBhcmFtIHVzZXJQcmV2TG9jYWxlU3RhdGUgVXNlIHByZXZpb3VzIGxvY2FsZSBzdGF0ZSB0byBwYXJzZSB0aGUgdmFsdWUuIEJ5IGRlZmF1bHQsIGlzIGZhbHNlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHBhcnNlTnVtYmVyKHZhbHVlOiBzdHJpbmcsIHVzZXJQcmV2TG9jYWxlU3RhdGUgPSBmYWxzZSk6IG51bWJlciB7XG4gICAgICAgIC8vIGxvY2FsZSBzdGF0ZVxuICAgICAgICBjb25zdCBsb2NhbGUgPSB1c2VyUHJldkxvY2FsZVN0YXRlID8gdGhpcy5sb2NhbGVTZXJ2aWNlPy5wcmV2aW91c0xvY2FsZSA6IHRoaXMubG9jYWxlU2VydmljZT8uY3VycmVudExvY2FsZSB8fCB0aGlzLmxvY2FsZV9pZDtcbiAgICAgICAgLy8gZ2V0IGRlY2ltYWwgYW5kIGdyb3VwIHN5bWJvbHNcbiAgICAgICAgY29uc3QgZGVjaW1hbFN5bWJvbCA9IGdldExvY2FsZU51bWJlclN5bWJvbChsb2NhbGUsIE51bWJlclN5bWJvbC5EZWNpbWFsKTtcbiAgICAgICAgY29uc3QgZ3JvdXBTeW1ib2wgPSBnZXRMb2NhbGVOdW1iZXJTeW1ib2wobG9jYWxlLCBOdW1iZXJTeW1ib2wuR3JvdXApO1xuICAgICAgICAvLyByZXBsYWNlIHN5bWJvbHMgdG8gcGFyc2UgbnVtYmVyXG4gICAgICAgIGNvbnN0IHBhcnNlZE51bWJlciA9IHZhbHVlPy5zcGxpdChncm91cFN5bWJvbCkuam9pbignJykuc3BsaXQoZGVjaW1hbFN5bWJvbCkuam9pbignLicpO1xuICAgICAgICByZXR1cm4gTnVtYmVyLnBhcnNlRmxvYXQocGFyc2VkTnVtYmVyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYWQgbGVhZGluZyB6ZXJvIHRvIHRoZSBudW1iZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSBudW0gVGhlIG51bWJlciB0byBhZGQgbGVhZGluZyB6ZXJvIHRvXG4gICAgICogQHBhcmFtIHNpemUgTnVtYmVyIG9mIG51bWJlcidzIGxlYWRpbmcgemVyb1xuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBwYWRaZXJvKG51bSwgc2l6ZSk6IHN0cmluZyB7XG4gICAgICAgIG51bSA9IG51bS50b1N0cmluZygpO1xuICAgICAgICAvLyBnZXQgaW50ZWdlciBhbmQgZGVjaW1hbCBwYXJ0XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3RcbiAgICAgICAgbGV0IFtpbnRlZ2VyLCBkZWNpbWFsXSA9IG51bS5zcGxpdCgnLicpO1xuICAgICAgICB3aGlsZSAoaW50ZWdlci5sZW5ndGggPCBzaXplKSB7XG4gICAgICAgICAgICBpbnRlZ2VyID0gJzAnICsgaW50ZWdlcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVjaW1hbCA/IGAke2ludGVnZXJ9LiR7ZGVjaW1hbH1gIDogaW50ZWdlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjaGVja3Mgd2hldGhlciB0aGUgbWluIHN5bWJvbCBpcyBhbGxvd2VkLiBJdCBpcyBhbGxvd2VkIHdoZW4gbWludXMgc3ltYm9sXG4gICAgICogcHJvdmlkZWQgYW5kIG1pbiBpbnB1dCBpcyB1bmRlZmluZWQgb3IgbWluIHByb3ZpZGVkIGFuZCBpcyBuZWdhdGl2ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSBzdHJpbmcgY29taW5nIGZyb20gYW4gZXZlbnRcbiAgICAgKi9cbiAgICBwcml2YXRlIGlzTWludXNBbGxvd2VkKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5taW4gfHwgdGhpcy5taW4gPCAwID8ga2V5ICE9PSAnLScgOiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGNoZWNrIHdoZXRoZXIgdGhlIGtleSBlbnRlcmVkIGlzIGluc2lkZSB0aGUgbWluIGFuZFxuICAgICAqIG1heCByYW5nZS4gUmV0dXJucyB0cnVlIGlmIGl0J3Mgb3V0IG9mIHJhbmdlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGUgQSBrZXlib2FyZCBldmVudFxuICAgICAqL1xuICAgIHByaXZhdGUgaXNPdXRTaWRlUmFuZ2UoZTogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXRoaXMuY2xlYXZlSW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBnZXQgY2FyZXQgcG9zaXRpb25cbiAgICAgICAgY29uc3QgcG9zID0gZS50YXJnZXRbJ3NlbGVjdGlvblN0YXJ0J107XG4gICAgICAgIC8vIGdldCBjYXJldCBwb3NpdGlvbiAoaW4gY2FzZSB0aGVyZSdzIHRleHQgc2VsZWN0ZWQpXG4gICAgICAgIGNvbnN0IGVuZFBvcyA9IGUudGFyZ2V0WydzZWxlY3Rpb25FbmQnXTtcbiAgICAgICAgLy8gZ2V0IGN1cnJlbnQgdmFsdWUgKGZvcm1hdHRlZClcbiAgICAgICAgbGV0IHZhbHVlID0gZS50YXJnZXRbJ3ZhbHVlJ107XG4gICAgICAgIC8vIHJlbW92ZSBrZXkgZnJvbSB2YWx1ZVxuICAgICAgICBpZiAoZS5rZXkgPT09ICdEZWxldGUnIHx8IGUua2V5ID09PSAnQmFja3NwYWNlJykge1xuICAgICAgICAgICAgLy8gY2hlY2sgaWYgdGhlcmUncyBzZWxlY3Rpb24gb2YgdGV4dCB0byBiZSByZW1vdmVkXG4gICAgICAgICAgICBpZiAocG9zICE9PSBlbmRQb3MpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGUudGFyZ2V0Wyd2YWx1ZSddLnN1YnN0cmluZygwLCBwb3MpICsgZS50YXJnZXRbJ3ZhbHVlJ10uc3Vic3RyaW5nKGVuZFBvcywgZS50YXJnZXRbJ3ZhbHVlJ10ubGVuZ3RoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBlLnRhcmdldFsndmFsdWUnXS5zdWJzdHJpbmcoMCwgcG9zIC0gMSkgKyBlLnRhcmdldFsndmFsdWUnXS5zdWJzdHJpbmcoZW5kUG9zLCBlLnRhcmdldFsndmFsdWUnXS5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gYWRkIGtleSB0byB0aGUgdmFsdWVcbiAgICAgICAgICAgIHZhbHVlID0gW3ZhbHVlLnNsaWNlKDAsIHBvcyksIGUua2V5LCB2YWx1ZS5zbGljZShlbmRQb3MpXS5qb2luKCcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNyZWF0ZSBhIENsZWF2ZSBpbnN0YW5jZSB0byBleHRyYWN0IHRoZSBudW1iZXIgZnJvbSBmb3JtYXR0ZWQgdmFsdWVcbiAgICAgICAgY29uc3QgY2xlYXZlOiBDbGVhdmVJbnN0YW5jZSA9IG5ldyBDbGVhdmUodGhpcy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpLCB7IC4uLnRoaXMub3B0aW9ucyB9KTtcbiAgICAgICAgY2xlYXZlLnNldFJhd1ZhbHVlKHZhbHVlKTtcbiAgICAgICAgY29uc3QgbnVtYmVyID0gTnVtYmVyKGNsZWF2ZS5nZXRSYXdWYWx1ZSgpKTtcbiAgICAgICAgLy8gZGVzdHJveSBjbGVhdmUgaW5zdGFuY2VcbiAgICAgICAgY2xlYXZlLmRlc3Ryb3koKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubWluID49IDAgPyBmYWxzZSA6IHRoaXMubWluID4gbnVtYmVyIHx8IHRoaXMubWF4IDwgbnVtYmVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlY2ltYWwgYWRqdXN0bWVudCBvZiBhIG51bWJlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSAgdmFsdWUgVGhlIG51bWJlci5cbiAgICAgKiBAcGFyYW0gZXhwICAgVGhlIGV4cG9uZW50ICh0aGUgMTAgbG9nYXJpdGhtIG9mIHRoZSBhZGp1c3RtZW50IGJhc2UpLlxuICAgICAqIEByZXR1cm5zIFRoZSBhZGp1c3RlZCB2YWx1ZS5cbiAgICAgKi9cbiAgICBwcml2YXRlIGRlY2ltYWxBZGp1c3QodmFsdWU6IG51bWJlciwgZXhwOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICAvLyBJZiB0aGUgZXhwIGlzIHVuZGVmaW5lZCBvciB6ZXJvLi4uXG4gICAgICAgIGlmICh0eXBlb2YgZXhwID09PSAndW5kZWZpbmVkJyB8fCArZXhwID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWUgPSArdmFsdWU7XG4gICAgICAgIGV4cCA9ICtleHA7XG4gICAgICAgIC8vIElmIHRoZSB2YWx1ZSBpcyBub3QgYSBudW1iZXIgb3IgdGhlIGV4cCBpcyBub3QgYW4gaW50ZWdlci4uLlxuICAgICAgICBpZiAoaXNOYU4odmFsdWUpIHx8ICEodHlwZW9mIGV4cCA9PT0gJ251bWJlcicgJiYgZXhwICUgMSA9PT0gMCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgLy8gU2hpZnRcbiAgICAgICAgbGV0IGNsZWFuZWQgPSB2YWx1ZS50b1N0cmluZygpLnNwbGl0KCdlJyk7XG4gICAgICAgIHZhbHVlID0gTWF0aC5yb3VuZCgrKGNsZWFuZWRbMF0gKyAnZScgKyAoY2xlYW5lZFsxXSA/ICtjbGVhbmVkWzFdIC0gZXhwIDogLWV4cCkpKTtcbiAgICAgICAgLy8gU2hpZnQgYmFja1xuICAgICAgICBjbGVhbmVkID0gdmFsdWUudG9TdHJpbmcoKS5zcGxpdCgnZScpO1xuICAgICAgICByZXR1cm4gKyhjbGVhbmVkWzBdICsgJ2UnICsgKGNsZWFuZWRbMV0gPyArY2xlYW5lZFsxXSArIGV4cCA6IGV4cCkpO1xuICAgIH1cbn1cbiJdfQ==
|
|
589
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLWlucHV0LW51bWJlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9ldWktaW5wdXQtbnVtYmVyL2V1aS1pbnB1dC1udW1iZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxRQUFRLEVBQ1IsU0FBUyxFQUNULE1BQU0sRUFFTixTQUFTLEVBR1QsV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBTUwsaUJBQWlCLEdBRXBCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxvQkFBb0IsRUFBNkIsTUFBTSx1QkFBdUIsQ0FBQztBQUUvRyxPQUFPLE1BQU0sTUFBTSxXQUFXLENBQUM7QUFFL0IsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxRQUFRLEVBQUUscUJBQXFCLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDeEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBNEMzQyxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsY0FBYztJQUN2RDs7T0FFRztJQUNILElBQ1csR0FBRztRQUNWLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNyQixDQUFDO0lBQ0QsSUFBVyxHQUFHLENBQUMsS0FBa0I7UUFDN0IsSUFBSSxDQUFDLElBQUksR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBQ0Q7O09BRUc7SUFDSCxJQUNXLEdBQUc7UUFDVixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDckIsQ0FBQztJQUNELElBQVcsR0FBRyxDQUFDLEtBQWtCO1FBQzdCLElBQUksQ0FBQyxJQUFJLEdBQUcsb0JBQW9CLENBQUMsS0FB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LGtCQUNyQjt3QkFDWjs0QkFDSSxTQUFTLEVBQUUscUJBQXFCOzRCQUNoQyxNQUFNLEVBQUUsQ0FBQyxjQUFjLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQzt5QkFDbkQ7d0JBQ0Q7NEJBQ0ksU0FBUyxFQUFFLG1CQUFtQjs0QkFDOUIsTUFBTSxFQUFFLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQzt5QkFDckM7cUJBQ0osUUFFSzt3QkFDRixRQUFRLEVBQUUsYUFBYTtxQkFDMUI7OzBCQWdISSxRQUFROzswQkFDUixNQUFNOzJCQUFDLFNBQVM7OzBCQUVoQixNQUFNOzJCQUFDLFFBQVE7NENBNUdULEdBQUc7c0JBRGIsS0FBSztnQkFXSyxHQUFHO3NCQURiLEtBQUs7Z0JBV0ssV0FBVztzQkFEckIsS0FBSztnQkFRSyxTQUFTO3NCQURuQixLQUFLO2dCQVNLLFVBQVU7c0JBRHBCLFdBQVc7dUJBQUMsT0FBTztnQkFPaEIsY0FBYztzQkFEakIsS0FBSztnQkFTRixNQUFNO3NCQURULEtBQUs7Z0JBUUYsWUFBWTtzQkFEZixLQUFLO2dCQVNGLE9BQU87c0JBRFYsS0FBSztnQkFZRixRQUFRO3NCQURYLEtBQUs7Z0JBUUcsVUFBVTtzQkFBbEIsS0FBSztnQkFDOEIsSUFBSTtzQkFBdkMsV0FBVzt1QkFBQyxXQUFXO2dCQUNmLEtBQUs7c0JBQWIsS0FBSztnQkFrSU4sT0FBTztzQkFETixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkF1QnZCLFNBQVM7c0JBRGxCLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQTJDekIsVUFBVTtzQkFEbkIsWUFBWTt1QkFBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBPcHRpb25hbCxcbiAgICBMT0NBTEVfSUQsXG4gICAgSW5qZWN0LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBEb0NoZWNrLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIFJlbmRlcmVyMixcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxuICAgIEluamVjdG9yLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExvY2FsZVNlcnZpY2UsIExvY2FsZVN0YXRlIH0gZnJvbSAnQGV1aS9jb3JlJztcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSwgY29lcmNlTnVtYmVyUHJvcGVydHksIEJvb2xlYW5JbnB1dCwgTnVtYmVySW5wdXQgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgdHlwZSBDbGVhdmVPcHRpb25zIH0gZnJvbSAnY2xlYXZlLmpzL29wdGlvbnMnO1xuaW1wb3J0IENsZWF2ZSBmcm9tICdjbGVhdmUuanMnO1xuaW1wb3J0IHsgQ2xlYXZlRXZlbnRPbkNoYW5nZSB9IGZyb20gJy4vbW9kZWxzL2NsZWF2ZS1ldmVudC1vbmNoYW5nZS5tb2RlbCc7XG5pbXBvcnQgeyBJbnB1dERpcmVjdGl2ZSB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9zaGFyZWQnO1xuaW1wb3J0IHsgRE9DVU1FTlQsIGdldExvY2FsZU51bWJlclN5bWJvbCwgTnVtYmVyU3ltYm9sIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEV1aUNsZWFyYWJsZURpcmVjdGl2ZSwgRXVpTG9hZGluZ0RpcmVjdGl2ZSB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9kaXJlY3RpdmVzJztcbmltcG9ydCB7IE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuZXhwb3J0IGludGVyZmFjZSBDbGVhdmVJbnN0YW5jZSBleHRlbmRzIENsZWF2ZSB7XG4gICAgaW5pdFN3YXBIaWRkZW5JbnB1dD86ICgpID0+IHZvaWQ7XG4gICAgaW5pdE51bWVyYWxGb3JtYXR0ZXI/OiAoKSA9PiB2b2lkO1xuICAgIGluaXRUaW1lRm9ybWF0dGVyPzogKCkgPT4gdm9pZDtcbiAgICBpbml0RGF0ZUZvcm1hdHRlcj86ICgpID0+IHZvaWQ7XG4gICAgaW5pdFBob25lRm9ybWF0dGVyPzogKCkgPT4gdm9pZDtcbiAgICB1cGRhdGVDcmVkaXRDYXJkUHJvcHNCeVZhbHVlPzogKCkgPT4gdm9pZDtcbiAgICB1cGRhdGVWYWx1ZVN0YXRlPzogKCkgPT4gdm9pZDtcbiAgICBjYWxsT25WYWx1ZUNoYW5nZWQ/OiAoKSA9PiB2b2lkO1xuICAgIG9uQ2hhbmdlPzogKGV2ZW50PzogRXZlbnQpID0+IHZvaWQ7XG4gICAgb25DdXQ/OiAoZXZlbnQ/OiBFdmVudCkgPT4gdm9pZDtcbiAgICBvbkZvY3VzPzogKGV2ZW50PzogRXZlbnQpID0+IHZvaWQ7XG4gICAgb25Db3B5PzogKGV2ZW50PzogRXZlbnQpID0+IHZvaWQ7XG4gICAgb25LZXlEb3duPzogKGV2ZW50PzogRXZlbnQpID0+IHZvaWQ7XG4gICAgb25DaGFuZ2VMaXN0ZW5lcj86IChldmVudD86IEV2ZW50KSA9PiB2b2lkO1xuICAgIG9uS2V5RG93bkxpc3RlbmVyPzogKGV2ZW50PzogRXZlbnQpID0+IHZvaWQ7XG4gICAgb25Gb2N1c0xpc3RlbmVyPzogKGV2ZW50PzogRXZlbnQpID0+IHZvaWQ7XG4gICAgb25DdXRMaXN0ZW5lcj86IChldmVudD86IEV2ZW50KSA9PiB2b2lkO1xuICAgIG9uQ29weUxpc3RlbmVyPzogKGV2ZW50PzogRXZlbnQpID0+IHZvaWQ7XG59XG5cbkBDb21wb25lbnQoe1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gICAgc2VsZWN0b3I6ICdpbnB1dFtldWlJbnB1dE51bWJlcl0nLFxuICAgIHN0eWxlVXJsczogWycuL3N0eWxlcy9faW5kZXguc2NzcyddLFxuICAgIHRlbXBsYXRlOiAnJyxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGhvc3REaXJlY3RpdmVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpcmVjdGl2ZTogRXVpQ2xlYXJhYmxlRGlyZWN0aXZlLFxuICAgICAgICAgICAgaW5wdXRzOiBbJ2V1aUNsZWFyYWJsZScsICdyZWFkb25seScsICdkaXNhYmxlZCddLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBkaXJlY3RpdmU6IEV1aUxvYWRpbmdEaXJlY3RpdmUsXG4gICAgICAgICAgICBpbnB1dHM6IFsnZXVpTG9hZGluZycsICdyZWFkb25seSddLFxuICAgICAgICB9LFxuICAgIF0sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1ob3N0LW1ldGFkYXRhLXByb3BlcnR5XG4gICAgaG9zdDoge1xuICAgICAgICAnKGJsdXIpJzogJ29uVG91Y2hlZCgpJyxcbiAgICB9LFxufSlcbmV4cG9ydCBjbGFzcyBFdWlJbnB1dE51bWJlckNvbXBvbmVudCBleHRlbmRzIElucHV0RGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIERvQ2hlY2ssIE9uQ2hhbmdlcyB7XG4gICAgLyoqXG4gICAgICogVGhlIG1pbmltdW0gbnVtYmVyIGNhbiBiZSBlbnRlcmVkLiBCbG9ja3MgdXNlcidzIGlucHV0IGlmIG5vdCBpbiByYW5nZS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgbWluKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9taW47XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgbWluKHZhbHVlOiBOdW1iZXJJbnB1dCkge1xuICAgICAgICB0aGlzLl9taW4gPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBtYXhpbXVtIG51bWJlciBjYW4gYmUgZW50ZXJlZC4gQmxvY2tzIHVzZXIncyBpbnB1dCBpZiBub3QgaW4gcmFuZ2UuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IG1heCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWF4O1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IG1heCh2YWx1ZTogTnVtYmVySW5wdXQpIHtcbiAgICAgICAgdGhpcy5fbWF4ID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpO1xuICAgIH1cbiAgICAvKiogQWRkcyBsZWFkaW5nIHplcm8gdG8gYSBudW1iZXIuIEZvcm1hdHRpbmcgd2lsbCBub3Qgd29yay5cbiAgICAgKiAgICAgIGUuZy4gd2l0aCBsZWFkaW5nWmVybz0zIGlucHV0IG51bWJlciA1ID0+IDAwNVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBsZWFkaW5nWmVybygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGVhZGluZ1plcm87XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgbGVhZGluZ1plcm8odmFsdWU6IE51bWJlcklucHV0KSB7XG4gICAgICAgIHRoaXMuX2xlYWRpbmdaZXJvID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpO1xuICAgIH1cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgaXNJbnZhbGlkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNJbnZhbGlkIHx8IG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBpc0ludmFsaWQoc3RhdGU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLnNldEludmFsaWQoc3RhdGUpO1xuICAgIH1cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgICBwdWJsaWMgZ2V0IGNzc0NsYXNzZXMoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFtzdXBlci5nZXRDc3NDbGFzc2VzKCdldWktaW5wdXQtbnVtYmVyJyksIHRoaXMuX2lzSW52YWxpZCA/ICdldWktaW5wdXQtbnVtYmVyLS1pbnZhbGlkJyA6ICcnXS5qb2luKCcgJykudHJpbSgpO1xuICAgIH1cblxuICAgIC8qKiBob3cgbWFueSBkaWdpdHMgZm9yIHRoZSBkZWNpbWFsIHBhcnQgKi9cbiAgICBASW5wdXQoKVxuICAgIGdldCBmcmFjdGlvbkRpZ2l0cygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fZnJhY3Rpb25EaWdpdHM7XG4gICAgfVxuICAgIHNldCBmcmFjdGlvbkRpZ2l0cyh2YWx1ZTogTnVtYmVySW5wdXQpIHtcbiAgICAgICAgdGhpcy5fZnJhY3Rpb25EaWdpdHMgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIC8qKiBob3cgbWFueSBkaWdpdHMgZm9yIHRoZSBpbnRlZ2VyIHBhcnQgKi9cbiAgICBASW5wdXQoKVxuICAgIGdldCBkaWdpdHMoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RpZ2l0cztcbiAgICB9XG4gICAgc2V0IGRpZ2l0cyh2YWx1ZTogTnVtYmVySW5wdXQpIHtcbiAgICAgICAgdGhpcy5fZGlnaXRzID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpO1xuICAgIH1cbiAgICBASW5wdXQoKVxuICAgIGdldCBmaWxsRnJhY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWxsRnJhY3Rpb247XG4gICAgfVxuICAgIHNldCBmaWxsRnJhY3Rpb24odmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9maWxsRnJhY3Rpb24gPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cbiAgICAvKiogcm91bmRzIGEgbnVtYmVyIHdpdGggbW9yZSB0aGFuIHR3byBkZWNpbWFscyBVUCAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHJvdW5kVXAoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JvdW5kVXA7XG4gICAgfVxuICAgIHNldCByb3VuZFVwKHZhbHVlOiBOdW1iZXJJbnB1dCkge1xuICAgICAgICB0aGlzLl9yb3VuZFVwID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX2lzSW52YWxpZDogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBkb2VzIG5vdCBmb3JtYXQgdGhlIGFuZCBkbyBhIHRob3VzYW5kIGdyb3VwaW5nIG9mIG51bWJlclxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IG5vRm9ybWF0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbm9Gb3JtYXQ7XG4gICAgfVxuICAgIHNldCBub0Zvcm1hdCh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX25vRm9ybWF0ID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9ub0Zvcm1hdDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBzdHlsZUNsYXNzOiBzdHJpbmc7XG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLnR5cGUnKSBwcm90ZWN0ZWQgdHlwZSA9ICdldWktbnVtYmVyJztcbiAgICBASW5wdXQoKSB2YWx1ZTogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBfcm91bmRVcDogbnVtYmVyO1xuICAgIC8vIFRPRE86IGZpbmQgdGhlIGNvcnJlY3QgdHlwZSBvciB0dXJuIGludG8gYSBnZW5lcmljLCBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8yL2dlbmVyaWNzLmh0bWxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHB1YmxpYyBvbkNoYW5nZUNhbGxiYWNrOiAoXzogYW55KSA9PiB2b2lkO1xuICAgIGNsZWF2ZUluc3RhbmNlOiBDbGVhdmVJbnN0YW5jZTtcbiAgICBwcml2YXRlIF9taW46IG51bWJlcjtcbiAgICBwcml2YXRlIF9tYXg6IG51bWJlcjtcblxuICAgIHByaXZhdGUgX2xlYWRpbmdaZXJvID0gMDtcbiAgICAvKiogaG9sZHMgaW5zdGFuY2Ugb2YgY2xlYXZlICovXG4gICAgLyoqIG9wdGlvbnMgZm9yIHRoZSBDbGVhdmUgaW5zdGFuY2UgKi9cbiAgICBwcml2YXRlIG9wdGlvbnM6IENsZWF2ZU9wdGlvbnM7XG4gICAgcHJpdmF0ZSBfZnJhY3Rpb25EaWdpdHMgPSAwO1xuICAgIHByaXZhdGUgX2RpZ2l0czogbnVtYmVyO1xuICAgIHByaXZhdGUgX2ZpbGxGcmFjdGlvbjogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByb3RlY3RlZCBfcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgbG9jYWxlU2VydmljZTogTG9jYWxlU2VydmljZSxcbiAgICAgICAgQEluamVjdChMT0NBTEVfSUQpIHByaXZhdGUgbG9jYWxlX2lkOiBzdHJpbmcsXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogRG9jdW1lbnQsXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKF9lbGVtZW50UmVmLCBfcmVuZGVyZXIsIGluamVjdG9yKTtcblxuICAgICAgICAvLyBzZXQgZGVmYXVsdCBvcHRpb25zXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHtcbiAgICAgICAgICAgIG51bWVyYWw6IHRydWUsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG5cbiAgICAgICAgdGhpcy5jb250cm9sID0gdGhpcy5pbmplY3Rvci5nZXQoTmdDb250cm9sLCB1bmRlZmluZWQsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgICAgICAgLy8gaW5zdGFudGlhdGUgY2xlYXZlXG4gICAgICAgIGlmICghdGhpcy5jb250cm9sKSB7XG4gICAgICAgICAgICB0aGlzLmluaXRDbGVhdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHN1YnNjcmliZSB0byBsb2NhbGl6YXRpb24gc2VydmljZSBhbmQgbGlzdGVuIGZvciBsb2NhbGUgY2hhbmdlLiBEZS1jb25zdHJ1Y3Rpb24gb2YgbG9jYWxlIHNob3VsZCBoYXBwZW4gaGVyZSFcbiAgICAgICAgdGhpcy5sb2NhbGVTZXJ2aWNlPy5nZXRTdGF0ZSgpLnN1YnNjcmliZSgoc3RhdGU6IExvY2FsZVN0YXRlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLmdldENsZWF2ZU9wdHNCYXNlZE9uTG9jYWxlKHN0YXRlPy5pZCk7XG5cbiAgICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgb3B0aW9ucyBvbiB0aGUgY2xlYXZlIGluc3RhbmNlXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU9wdGlvbnModHJ1ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ3Jvb3RDbGFzc05hbWUnLCAnZXVpLWlucHV0LW51bWJlcicpO1xuICAgIH1cblxuICAgIG5nRG9DaGVjaygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbCA9IHRoaXMuaW5qZWN0b3IuZ2V0KE5nQ29udHJvbCwgdW5kZWZpbmVkLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNJbnZhbGlkID0gdGhpcy5jb250cm9sID8gdGhpcy5jb250cm9sLmludmFsaWQgJiYgdGhpcy5jb250cm9sLnRvdWNoZWQgOiB0aGlzLl9pc0ludmFsaWQ7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoT2JqZWN0Lmhhc093bihjaGFuZ2VzLCAndmFsdWUnKSkge1xuICAgICAgICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLmNsZWF2ZUluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhdmVJbnN0YW5jZS5zZXRSYXdWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoT2JqZWN0Lmhhc093bihjaGFuZ2VzLCAnZnJhY3Rpb25EaWdpdHMnKSkge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zID0geyAuLi50aGlzLm9wdGlvbnMsIG51bWVyYWxEZWNpbWFsU2NhbGU6IHRoaXMuZnJhY3Rpb25EaWdpdHMgfTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlT3B0aW9ucygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChPYmplY3QuaGFzT3duKGNoYW5nZXMsICdub0Zvcm1hdCcpKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSB7IC4uLnRoaXMub3B0aW9ucywgbnVtZXJhbFRob3VzYW5kc0dyb3VwU3R5bGU6IHRoaXMubm9Gb3JtYXQgPyAnbm9uZScgOiAndGhvdXNhbmQnIH07XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU9wdGlvbnMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoT2JqZWN0Lmhhc093bihjaGFuZ2VzLCAnZmlsbEZyYWN0aW9uJykgJiYgdGhpcy5jbGVhdmVJbnN0YW5jZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBseUZyYWN0aW9uRmlsbCh0aGlzLmNsZWF2ZUluc3RhbmNlLmdldFJhd1ZhbHVlKCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChPYmplY3QuaGFzT3duKGNoYW5nZXMsICdkaWdpdHMnKSkge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zID0geyAuLi50aGlzLm9wdGlvbnMsIG51bWVyYWxJbnRlZ2VyU2NhbGU6IHRoaXMuZGlnaXRzIH07XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU9wdGlvbnMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoT2JqZWN0Lmhhc093bihjaGFuZ2VzLCAnbWluJykpIHtcbiAgICAgICAgICAgIGlmIChjaGFuZ2VzWydtaW4nXS5jdXJyZW50VmFsdWUgPj0gMCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNsZWF2ZUluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRha2UgY2FyZSBvZiB0aGUgc2lnbiBzeW1ib2xcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGVhdmVJbnN0YW5jZS5zZXRSYXdWYWx1ZShNYXRoLmFicyhOdW1iZXIodGhpcy5jbGVhdmVJbnN0YW5jZS5nZXRSYXdWYWx1ZSgpKSkudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChPYmplY3QuaGFzT3duKGNoYW5nZXMsICdyb3VuZFVwJykpIHtcbiAgICAgICAgICAgIGlmIChjaGFuZ2VzWydyb3VuZFVwJ10uY3VycmVudFZhbHVlID4gMCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNsZWF2ZUluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBudW1iZXIgPSBOdW1iZXIucGFyc2VGbG9hdCh0aGlzLmNsZWF2ZUluc3RhbmNlLmdldFJhd1ZhbHVlKCkpO1xuICAgICAgICAgICAgICAgICAgICBudW1iZXIgPSB0aGlzLmRlY2ltYWxBZGp1c3QobnVtYmVyLCB0aGlzLnJvdW5kVXAgKiAtMSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xlYXZlSW5zdGFuY2Uuc2V0UmF3VmFsdWUobnVtYmVyLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgICAgICAvLyBkZXN0cm95IGNsZWF2ZSBpbnN0YW5jZVxuICAgICAgICBpZiAodGhpcy5jbGVhdmVJbnN0YW5jZSkge1xuICAgICAgICAgICAgdGhpcy5jbGVhdmVJbnN0YW5jZS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUT0RPOiBmaW5kIHRoZSBjb3JyZWN0IHR5cGUgb3IgdHVybiBpbnRvIGEgZ2VuZXJpYywgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svMi9nZW5lcmljcy5odG1sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBvbkNoYW5nZTogYW55ID0gKF86IGFueSk6IHZvaWQgPT4ge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sICYmIChfICE9PSBudWxsIHx8IF8gIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICAgIC8vIHBhcnNlIG51bWJlclxuICAgICAgICAgICAgLy8gY29uc3QgdmFsdWUgPSBOdW1iZXIoXyk7XG4gICAgICAgICAgICAvLyBydW4gb24gbmV4dCBNaWNyb1Rhc2sgdG8gYXZvaWQgTkcwMTAwIGVycm9yIFRPRE86IGRlZXBlciBpbnZlc3RpZ2F0aW9uXG4gICAgICAgICAgICAvLyBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHRoaXMuY29udHJvbC52aWV3VG9Nb2RlbFVwZGF0ZSh2YWx1ZSkpO1xuICAgICAgICAgICAgLy8gaW4gY2FzZSBjb250cm9sIGlzIEZvcm1Db250cm9sXG4gICAgICAgICAgICAvLyB0aGlzLmNvbnRyb2w/LmNvbnRyb2wuc2V0VmFsdWUoaXNOYU4odmFsdWUpID8gbnVsbCA6IHZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UsIGVtaXRNb2RlbFRvVmlld0NoYW5nZTogZmFsc2UgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8vIFRPRE86IGZpbmQgdGhlIGNvcnJlY3QgdHlwZSBvciB0dXJuIGludG8gYSBnZW5lcmljLCBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8yL2dlbmVyaWNzLmh0bWxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIG9uVG91Y2hlZDogYW55ID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICB0aGlzLmNvbnRyb2w/LmNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgIH07XG5cbiAgICBASG9zdExpc3RlbmVyKCdwYXN0ZScsIFsnJGV2ZW50J10pXG4gICAgb25QYXN0ZShldmVudDogQ2xpcGJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgLy8gZ2V0IHRoZSB2YWx1ZSBmcm9tIGNsaXBib2FyZFxuICAgICAgICBjb25zdCB2YWx1ZSA9IChldmVudC5jbGlwYm9hcmREYXRhIHx8IHdpbmRvd1snY2xpcGJvYXJkRGF0YSddKS5nZXREYXRhKCd0ZXh0Jyk7XG4gICAgICAgIC8vIGluIGNhc2Ugcm91bmQgVVAgaXMgZW5hYmxlZFxuICAgICAgICBpZiAodGhpcy5fcm91bmRVcCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGRpdiA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIGNsb25lIG9mIGNsZWF2ZUluc3RhbmNlXG4gICAgICAgICAgICBjb25zdCBjbG9uZUluc3RhbmNlOiBDbGVhdmVJbnN0YW5jZSA9IG5ldyBDbGVhdmUoZGl2LCB7IC4uLnRoaXMub3B0aW9ucywgbnVtZXJhbERlY2ltYWxTY2FsZTogOCB9KTtcbiAgICAgICAgICAgIGNsb25lSW5zdGFuY2Uuc2V0UmF3VmFsdWUodmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICBsZXQgbnVtYmVyID0gTnVtYmVyLnBhcnNlRmxvYXQoY2xvbmVJbnN0YW5jZS5nZXRSYXdWYWx1ZSgpKTtcbiAgICAgICAgICAgIG51bWJlciA9IHRoaXMuZGVjaW1hbEFkanVzdChudW1iZXIsIHRoaXMucm91bmRVcCAqIC0xKTtcbiAgICAgICAgICAgIGlmICghTnVtYmVyLmlzTmFOKG51bWJlcikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWF2ZUluc3RhbmNlLnNldFJhd1ZhbHVlKG51bWJlci50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBpbnZlc3RpZ2F0ZSBpbiB0aGUgZnV0dXJlIGhvdyBjYW4gdGhpcyBiZSBhdm9pZGVkXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMud3JpdGVWYWx1ZShudW1iZXIudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgICBwcm90ZWN0ZWQgb25LZXlEb3duKGU6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgLy8gY2hlY2sgaWYgaXQncyBhIHNpbmdsZSBzeW1ib2wgYW5kIG5vdCBTcGVjaWFsIGxpa2UgKEN0cmwsIGJhY2tzcGFjZSBldGMpXG4gICAgICAgIGlmIChlPy5rZXk/Lmxlbmd0aCA8PSAxICYmICFlLmN0cmxLZXkgJiYgIWUuYWx0S2V5ICYmICFlLm1ldGFLZXkpIHtcbiAgICAgICAgICAgIC8vIHN0b3AgZXZlbnQgcHJvcGFnYXRpb24gaWYga2V5IHByZXNzZWQgaXMgbm90IGEgbnVtYmVyIG9yIGxvY2FsZSBjaGFyYWN0ZXIgb3IgbWludXMgc2lnblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIE51bWJlci5pc05hTihOdW1iZXIucGFyc2VJbnQoZS5rZXksIDEwKSkgJiZcbiAgICAgICAgICAgICAgICB0aGlzLmlzTWludXNBbGxvd2VkKGUua2V5KSAmJlxuICAgICAgICAgICAgICAgIGUua2V5ICE9PSBnZXRMb2NhbGVOdW1iZXJTeW1ib2wodGhpcy5sb2NhbGVTZXJ2aWNlPy5jdXJyZW50TG9jYWxlIHx8IHRoaXMubG9jYWxlX2lkLCBOdW1iZXJTeW1ib2wuRGVjaW1hbClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIC8vIHN0b3AgZXZlbnQgcHJvcGFnYXRpb24gaWYga2V5IHByZXNzZWQgZXhjZWVkcyB0aGUgbWluL21heCB2YWx1ZSByYW5nZVxuICAgICAgICAgICAgfSBlbHNlIGlmICghTnVtYmVyLmlzTmFOKE51bWJlci5wYXJzZUludChlLmtleSwgMTApKSAmJiB0aGlzLmlzT3V0U2lkZVJhbmdlKGUpKSB7XG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNPdXRTaWRlUmFuZ2UoZSkpIHtcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHByb3RlY3QgZGVjaW1hbCBzeW1ib2wgZGVsZXRpb24gaW4gY2FzZSBmaWxsRnJhY3Rpb24gaXMgb25cbiAgICAgICAgaWYgKGUua2V5ID09PSAnRGVsZXRlJyB8fCBlLmtleSA9PT0gJ0JhY2tzcGFjZScpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICAvLyBwb3NpdGlvbiBvZiBjYXJldFxuICAgICAgICAgICAgY29uc3QgcG9zID0gZWxlbWVudC5zZWxlY3Rpb25TdGFydDtcbiAgICAgICAgICAgIC8vIGdldCBjaGFyYWN0ZXIgYWJvdXQgdG8gYmUgZGVsZXRlZFxuICAgICAgICAgICAgY29uc3QgY2hhciA9IGVsZW1lbnQudmFsdWUuY2hhckF0KHBvcyAtIDEpO1xuICAgICAgICAgICAgLy8gaW4gY2FzZSB0aGUgY2hhciBpcyB0aGUgZGVjaW1hbCBzeW1ib2wgcHJldmVudCBkZWxldGlvbiBhbmQgbW92ZSBjYXJldCBpbiBmcm9udFxuICAgICAgICAgICAgaWYgKGNoYXIgPT09IGdldExvY2FsZU51bWJlclN5bWJvbCh0aGlzLmxvY2FsZVNlcnZpY2U/LmN1cnJlbnRMb2NhbGUgfHwgdGhpcy5sb2NhbGVfaWQsIE51bWJlclN5bWJvbC5EZWNpbWFsKSkge1xuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UocG9zIC0gMSwgcG9zIC0gMSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNPdXRTaWRlUmFuZ2UoZSkpIHtcbiAgICAgICAgICAgICAgICAvLyBkb24ndCBhbGxvdyBpbnNlcnRpb24gdGhhdCB3aWxsIHB1dCBudW1iZXIgb3V0IG9mIHJhbmdlXG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdmb2N1c291dCcpXG4gICAgcHJvdGVjdGVkIG9uRm9jdXNvdXQoKTogdm9pZCB7XG4gICAgICAgIC8vIGluIGNhc2UgZmlsbEZyYWN0aW9uIGZlYXR1cmUgaXMgb24gYW5kIHRoZXJlJ3Mgbm8gaW50ZWdlciBwYXJ0IGFkZCBsZWFkaW5nIDBcbiAgICAgICAgaWYgKHRoaXMuZmlsbEZyYWN0aW9uICYmIHRoaXMuY2xlYXZlSW5zdGFuY2UuZ2V0UmF3VmFsdWUoKS5tYXRjaCgvXlxcLlswLTldKy9nKSkge1xuICAgICAgICAgICAgdGhpcy5jbGVhdmVJbnN0YW5jZS5zZXRSYXdWYWx1ZSgnMCcgKyB0aGlzLmNsZWF2ZUluc3RhbmNlLmdldFJhd1ZhbHVlKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaW4gY2FzZSByb3VuZCBVUCBpcyBlbmFibGVkXG4gICAgICAgIGlmICh0aGlzLl9yb3VuZFVwID4gMCkge1xuICAgICAgICAgICAgY29uc3QgbnVtYmVyID0gTnVtYmVyLnBhcnNlRmxvYXQodGhpcy5jbGVhdmVJbnN0YW5jZS5nZXRSYXdWYWx1ZSgpKTtcbiAgICAgICAgICAgIHRoaXMuY2xlYXZlSW5zdGFuY2Uuc2V0UmF3VmFsdWUodGhpcy5kZWNpbWFsQWRqdXN0KG51bWJlciwgdGhpcy5yb3VuZFVwICogLTEpLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaW4gY2FzZSBtaW4gaXMgc2V0IGFuZCB2YWx1ZSBpcyBsZXNzIHRoYW4gbWluIHJlc2V0IHRvIHRoZSBtaW4gdmFsdWVcbiAgICAgICAgaWYgKHRoaXMubWluICYmIE51bWJlci5wYXJzZUZsb2F0KHRoaXMuY2xlYXZlSW5zdGFuY2UuZ2V0UmF3VmFsdWUoKSkgPCB0aGlzLm1pbikge1xuICAgICAgICAgICAgdGhpcy5jbGVhdmVJbnN0YW5jZS5zZXRSYXdWYWx1ZSh0aGlzLm1pbi50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBzZXRJbnZhbGlkKHN0YXRlPzogQm9vbGVhbklucHV0KTogdm9pZCB7XG4gICAgICAgIC8vIGluIGNhc2UgaXQncyBjb250cm9sbGVkIGJ5IE5nQ29udHJvbCBvdmVycmlkZVxuICAgICAgICB0aGlzLl9pc0ludmFsaWQgPSB0aGlzLmNvbnRyb2wgPyB0aGlzLmNvbnRyb2wuaW52YWxpZCAmJiB0aGlzLmNvbnRyb2wudG91Y2hlZCA6IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eShzdGF0ZSk7XG5cbiAgICAgICAgLy8gc2V0IEJhc2VEaXJlY3RpdmUgQXR0cmlidXRlXG4gICAgICAgIHN1cGVyLmV1aURhbmdlciA9IHRoaXMuX2lzSW52YWxpZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAT3ZlcnJpZGUgc2V0UGxhY2Vob2xkZXIgc2V0UGxhY2Vob2xkZXJBdHRyaWJ1dGUgb2YgSW5wdXREaXJlY3RpdmVcbiAgICAgKiBVcGRhdGVzIHRoZSBwbGFjZWhvbGRlciB2YWx1ZSBiYXNlZCBvbiBjdXJyZW50IG51bWJlciBmb3JtYXQgYW5kIGdpdmVuIHZhbHVlLlxuICAgICAqIElmIHZhbHVlIHBhc3NlZCBjb250YWlucyBjaGFyYWN0ZXJzIGl0IGRvZXNuJ3QgZm9ybWF0IHBsYWNlaG9sZGVyLlxuICAgICAqICovXG4gICAgcHJvdGVjdGVkIHNldFBsYWNlaG9sZGVyQXR0cmlidXRlKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgPSA5OTk5OTkuOTk5OSk6IHZvaWQge1xuICAgICAgICAvLyBpZiB2YWx1ZSBpcyBhIG51bWJlciwgZm9ybWF0IHRoZSB2YWx1ZSBiYXNlZCBvbiBjdXJyZW50IG51bWJlciBmb3JtYXRcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgIWlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgY29uc3QgZGl2ID0gdGhpcy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgICAgICAgICAgLy8gY3JlYXRlIGEgY2xvbmUgb2YgY2xlYXZlSW5zdGFuY2VcbiAgICAgICAgICAgIGNvbnN0IGNsb25lSW5zdGFuY2U6IENsZWF2ZUluc3RhbmNlID0gbmV3IENsZWF2ZShkaXYsIHRoaXMub3B0aW9ucyk7XG4gICAgICAgICAgICAvLyBCRVdBUkU6IGJ5IHRoZSB0aW1lIHlvdXIgc2V0UmF3VmFsdWUgY2xlYXZlIG9wdGlvbnMgaGF2ZSBjaGFuZ2VkIHRodXMgbnVtYmVyIGZvcm1hdHRpbmdcbiAgICAgICAgICAgIGNsb25lSW5zdGFuY2Uuc2V0UmF3VmFsdWUodmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAvLyBzZXQgdGhlIHZhbHVlIHdpdGggY3VycmVudCBmb3JtYXQgYXMgcGxhY2Vob2xkZXJcbiAgICAgICAgICAgIHN1cGVyLnNldFBsYWNlaG9sZGVyQXR0cmlidXRlKGNsb25lSW5zdGFuY2UuZ2V0Rm9ybWF0dGVkVmFsdWUoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgc3VwZXIuc2V0UGxhY2Vob2xkZXJBdHRyaWJ1dGUodmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5wbGFjZWhvbGRlcjtcbiAgICAgICAgICAgIHN1cGVyLnNldFBsYWNlaG9sZGVyQXR0cmlidXRlKHZhbHVlLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogaW5zdGFudGlhdGUgQ2xlYXZlLmpzXG4gICAgICovXG4gICAgLy8gVE9ETzogZmluZCB0aGUgY29ycmVjdCB0eXBlIG9yIHR1cm4gaW50byBhIGdlbmVyaWMsIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rLzIvZ2VuZXJpY3MuaHRtbFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgcHJpdmF0ZSBpbml0Q2xlYXZlKG9uQ2hhbmdlQ2FsbGJhY2s/OiAob2JqOiBhbnkpID0+IGFueSk6IHZvaWQge1xuICAgICAgICAvLyBjaGFuZ2UgdGhlIGNsZWF2ZSBwcm90b3R5cGUgZnVuY3Rpb24gdG8gaW50ZXJjZXB0IG9uQ3V0IGNhbGxiYWNrXG4gICAgICAgIC8vIGFuZCBhbGxvdyBiYXNlZCBvbiB0aGUgZXZlbnQgYnViYmxpbmcgYW5kIGRpc2FibGVkIHN0YXRlXG4gICAgICAgIC8vIFRJUDogY2hhbmdlIGJlaGF2aW9yIG9mIG9uQ3V0IHRvIHN0b3AgaW4gY2FzZSBidWJibGUgaXMgY2FuY2VsZWRcbiAgICAgICAgLy8gVE9ETzogU2VlIHJlbGV2YW50IGlzc3VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ub3Npci9jbGVhdmUuanMvaXNzdWVzLzY3NVxuICAgICAgICBjb25zdCBfb25DdXQgPSBDbGVhdmUucHJvdG90eXBlWydvbkN1dCddO1xuICAgICAgICBDbGVhdmUucHJvdG90eXBlWydvbkN1dCddID0gZnVuY3Rpb24gKGU6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8taW52YWxpZC10aGlzXG4gICAgICAgICAgICBpZiAoIWUuY2FuY2VsQnViYmxlICYmICF0aGlzLmVsZW1lbnQuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8taW52YWxpZC10aGlzXG4gICAgICAgICAgICAgICAgX29uQ3V0LmNhbGwodGhpcywgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gaW4gY2FzZSBvcHRpb25zIGlzIHVuZGVmaW5lZFxuICAgICAgICBjb25zdCBvcHRzOiBDbGVhdmVPcHRpb25zID0geyAuLi50aGlzLm9wdGlvbnMgfTtcblxuICAgICAgICAvLyBzZXQgdGhlIG9uVmFsdWUgY2hhbmdlIGxpc3RlbmVyIHRvIGtlZXAgdGhlIHZhbHVlIGF0IHJlYWRPbmx5IGVsZW1lbnQgaW4gc3luY1xuICAgICAgICBvcHRzLm9uVmFsdWVDaGFuZ2VkID0gb25DaGFuZ2VDYWxsYmFjayB8fCB0aGlzLm9uVmFsdWVDaGFuZ2VkLmJpbmQodGhpcyk7XG5cbiAgICAgICAgLy8gaW4gY2FzZSByb3VuZCBVUCBpcyBlbmFibGVkXG4gICAgICAgIGlmICh0aGlzLl9yb3VuZFVwID4gMCkge1xuICAgICAgICAgICAgY29uc3QgbnVtYmVyID0gTnVtYmVyLnBhcnNlRmxvYXQodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC52YWx1ZSA9IHRoaXMuZGVjaW1hbEFkanVzdChudW1iZXIsIHRoaXMucm91bmRVcCAqIC0xKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNyZWF0ZSB0aGUgQ2xlYXZlIGluc3RhbmNlIHdpdGggdGhlIG5ldyBvciB1cGRhdGVkIG9wdGlvbnNcbiAgICAgICAgdGhpcy5jbGVhdmVJbnN0YW5jZSA9IG5ldyBDbGVhdmUodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBvcHRzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHRoZSBjbGVhdmUgb3B0aW9ucyBieSBkZXN0cm95aW5nIHRoZSBjdXJyZW50IGluc3RhbmNlIGFuZCBjcmVhdGluZyBhbm90aGVyIG9uZSB3aGlsZSBrZWVwaW5nIHRoZSBwcmV2aW91c1xuICAgICAqIHZhbHVlLlxuICAgICAqL1xuICAgIHByaXZhdGUgdXBkYXRlT3B0aW9ucyhsb2NhbGVVcGRhdGVkID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY2xlYXZlSW5zdGFuY2UpIHtcbiAgICAgICAgICAgIC8vIHRoZSB2YWx1ZSBiZWZvcmUgZGVzdHJveWluZyBjbGVhdmUgaW5zdGFuY2VcbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzVmFsdWUgPSB0aGlzLmNsZWF2ZUluc3RhbmNlLmdldFJhd1ZhbHVlKCk7XG5cbiAgICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgQ2xlYXZlIGluc3RhbmNlIHdpdGggdGhlIG5ldyBvciB1cGRhdGVkIG9wdGlvbnNcbiAgICAgICAgICAgIHRoaXMuY2xlYXZlSW5zdGFuY2UucHJvcGVydGllcyA9IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLmNsZWF2ZUluc3RhbmNlLnByb3BlcnRpZXMsXG4gICAgICAgICAgICAgICAgLi4udGhpcy5vcHRpb25zLFxuICAgICAgICAgICAgICAgIGluaXRWYWx1ZTogcHJldmlvdXNWYWx1ZSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIC8vIGluaXQgbnVtYmVyIGZvcm1hdHRlciB3aXRoIHVwZGF0ZWQgb3B0aW9uc1xuICAgICAgICAgICAgdGhpcy5jbGVhdmVJbnN0YW5jZS5pbml0TnVtZXJhbEZvcm1hdHRlcigpO1xuXG4gICAgICAgICAgICAvLyBJbiBjYXNlIHByZXZpb3VzIHNldHRpbmdzIHdoZXJlIG51bWVyYWxEZWNpbWFsTWFyaz0nLicgd2l0aCB2YWx1ZSAxMDAwLjk5LCBhbmQgdGhleSBjaGFuZ2VkIHRvXG4gICAgICAgICAgICAvLyBudW1lcmFsRGVjaW1hbE1hcms9JywnOyBzZXQgaW5pdFZhbHVlIHRvIDEwMDAuOTkgb3IgZXZlbiAxMDAwLDk5IHdpbGwgbm90IGJlIHJlZmxlY3RlZCBhbmQgY2xlYXZlIHdpbGxcbiAgICAgICAgICAgIC8vIHJlbW92ZSB0aGUgZGVjaW1hbCBwYXJ0LiBTZXQgb2YgdGhlIHZhbHVlIGFmdGVyIGluaXRpYWxpemF0aW9uIGNhdXNlcyByZWZvcm1hdCBvZiBudW1iZXIgYW5kIHdvcmtzLlxuICAgICAgICAgICAgdGhpcy5jbGVhdmVJbnN0YW5jZS5zZXRSYXdWYWx1ZShwcmV2aW91c1ZhbHVlKTtcblxuICAgICAgICAgICAgLy8gcGFyc2UgbnVtYmVyXG4gICAgICAgICAgICBjb25zdCBudW1iZXIgPSB0aGlzLnBhcnNlTnVtYmVyKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5wbGFjZWhvbGRlciB8fCB1bmRlZmluZWQsIGxvY2FsZVVwZGF0ZWQpO1xuICAgICAgICAgICAgLy8gc2V0IHBsYWNlaG9sZGVyIGluIGNhc2Ugbm9uZSBpcyBwcm92aWRlZFxuICAgICAgICAgICAgdGhpcy5zZXRQbGFjZWhvbGRlckF0dHJpYnV0ZShudW1iZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FsbGJhY2sgZnVuY3Rpb24gb2YgdGhlIENsZWF2ZSBpbnN0YW5jZSB0aGF0IGlzIGludm9rZWQgd2hlbiB2YWx1ZSBpcyBjaGFuZ2VkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50IHR5cGUgb2YgQ2xlYXZlRXZlbnRPbkNoYW5nZVxuICAgICAqL1xuICAgIHByaXZhdGUgb25WYWx1ZUNoYW5nZWQoZXZlbnQ6IENsZWF2ZUV2ZW50T25DaGFuZ2UpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyB0YXJnZXQgfSA9IGV2ZW50O1xuXG4gICAgICAgIGlmICh0aGlzLmZpbGxGcmFjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5hcHBseUZyYWN0aW9uRmlsbCh0YXJnZXQucmF3VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub25DaGFuZ2UoTnVtYmVyLnBhcnNlRmxvYXQodGFyZ2V0LnJhd1ZhbHVlKSk7XG4gICAgICAgIC8vIGZpbGwgbGVhZGluZyB6ZXJvXG4gICAgICAgIGlmICh0aGlzLmxlYWRpbmdaZXJvKSB7XG4gICAgICAgICAgICBjb25zdCBzaXplID0gdGhpcy5sZWFkaW5nWmVybyA+IHRoaXMuZGlnaXRzICYmIHRoaXMuZGlnaXRzID4gMCA/IHRoaXMuZGlnaXRzIDogdGhpcy5sZWFkaW5nWmVybztcbiAgICAgICAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC52YWx1ZSA9IHRoaXMucGFkWmVybyhldmVudC50YXJnZXQucmF3VmFsdWUsIHNpemUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmVzcG9uc2libGUgdG8gZXh0cmFjdCBhbGwgbG9jYWxlIGluZm9ybWF0aW9uIG5lZWRlZCB0byBidWlsZCBDbGVhdmVPcHRpb25zIHJlbGF0ZWQgdG8gbnVtYmVyIGZvcm1hdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpZCBUaGUgaWQgb2YgdGhlIGxvY2FsZVxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0Q2xlYXZlT3B0c0Jhc2VkT25Mb2NhbGUoaWQ6IHN0cmluZyk6IENsZWF2ZU9wdGlvbnMge1xuICAgICAgICBpZiAoIWlkIHx8IGlkID09PSAnJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdMb2NhbGUgaWQgY2Fubm90IGJlIGVtcHR5IG9yIHVuZGVmaW5lZCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdHM6IENsZWF2ZU9wdGlvbnMgPSB7XG4gICAgICAgICAgICBudW1lcmFsOiB0cnVlLFxuICAgICAgICAgICAgZGVsaW1pdGVyOiBnZXRMb2NhbGVOdW1iZXJTeW1ib2woaWQsIE51bWJlclN5bWJvbC5Hcm91cCksXG4gICAgICAgICAgICBudW1lcmFsRGVjaW1hbE1hcms6IGdldExvY2FsZU51bWJlclN5bWJvbChpZCwgTnVtYmVyU3ltYm9sLkRlY2ltYWwpLFxuICAgICAgICAgICAgbnVtZXJhbERlY2ltYWxTY2FsZTogdGhpcy5mcmFjdGlvbkRpZ2l0cyxcbiAgICAgICAgICAgIG51bWVyYWxJbnRlZ2VyU2NhbGU6IHRoaXMuZGlnaXRzLFxuICAgICAgICAgICAgbnVtZXJhbFRob3VzYW5kc0dyb3VwU3R5bGU6IHRoaXMubm9Gb3JtYXQgPyAnbm9uZScgOiAndGhvdXNhbmQnLCAvLyBUT0RPOiBpbXBsZW1lbnQgYmFzZWQgb24gbG9jYWxlXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHsgLi4udGhpcy5vcHRpb25zLCAuLi5vcHRzIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgZmlsbCBvZiBkZWNpbWFsIHBhcnQgd2l0aCB6ZXJvcyBpbiBjYXNlIGRlY2ltYWwgcGFydCBvZiBnaXZlbiBudW1iZXIgaGFzXG4gICAgICogc2l6ZSBsZXNzIHRoYW4gdGhlIG1heCBmcmFjdGlvbiBkaWdpdHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbnVtYmVyXG4gICAgICogQHBhcmFtIGNsZWF2ZUluc3RhbmNlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGFwcGx5RnJhY3Rpb25GaWxsKG51bWJlcjogc3RyaW5nLCBjbGVhdmVJbnN0YW5jZTogQ2xlYXZlSW5zdGFuY2UgPSB0aGlzLmNsZWF2ZUluc3RhbmNlKTogdm9pZCB7XG4gICAgICAgIC8vIGlmIGZpbGwgZnJhY3Rpb24gaXMgZW5hYmxlZCBhbmQgdGhlcmUncyBjbGVhdmUgaW5zdGFuY2VcbiAgICAgICAgaWYgKHRoaXMuZmlsbEZyYWN0aW9uKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jbGVhdmVJbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgIG51bWJlciA9IG51bWJlcj8udG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAnJyB8fCAhbnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgaGFzRGVjaW1hbCA9IG51bWJlci5zcGxpdCgnLicpLmxlbmd0aCA+IDE7XG4gICAgICAgICAgICAgICAgLy8gaW4gY2FzZSB0aGVyZSdzIGFscmVhZHkgZGVjaW1hbCBwb2ludCBpbiBudW1iZXJcbiAgICAgICAgICAgICAgICBpZiAoaGFzRGVjaW1hbCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWNpbWFsU2l6ZSA9IG51bWJlci5zcGxpdCgnLicpWzFdLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgc2l6ZSBvZiBkZWNpbWFsIHBhcnQgb2YgbnVtYmVyIGlzIGxlc3MgdGhhbiB0aGUgbWF4IGZyYWN0aW9uIGRpZ2l0c1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGVjaW1hbFNpemUgPCB0aGlzLl9mcmFjdGlvbkRpZ2l0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyID0gbnVtYmVyICsgbmV3IEFycmF5KHRoaXMuX2ZyYWN0aW9uRGlnaXRzIC0gZGVjaW1hbFNpemUpLmZpbGwoMCkuam9pbignJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwb3MgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhdmVJbnN0YW5jZS5zZXRSYXdWYWx1ZShudW1iZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNldFNlbGVjdGlvblJhbmdlKHBvcywgcG9zKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBpbiBjYXNlIHRoZXJlJ3Mgbm90LCBmb3JjZSBpdCBieSBmaWxsaW5nIGl0IGFzIG11Y2ggemVybyBhcyB0aGUgZnJhY3Rpb24gZGlnaXRzXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmZyYWN0aW9uRGlnaXRzID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBudW1iZXIgPSBgJHtudW1iZXJ9LiR7bmV3IEFycmF5KHRoaXMuX2ZyYWN0aW9uRGlnaXRzKS5maWxsKDApLmpvaW4oJycpfWA7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvcyA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydDtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXZlSW5zdGFuY2Uuc2V0UmF3VmFsdWUobnVtYmVyKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNldFNlbGVjdGlvblJhbmdlKHBvcywgcG9zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYXJzZXMgYSBnaXZlbiBmb3JtYXR0ZWQgbnVtYmVyIGFuZCByZXR1cm5zIGl0IGFzIGEgbnVtYmVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHZhbHVlIFRoZSBmb3JtYXR0ZWQgbnVtYmVyIHlvdSB3YW50IHRvIHBhcnNlIGUuZy4gMTExLDg4OC4yMlxuICAgICAqIEBwYXJhbSB1c2VyUHJldkxvY2FsZVN0YXRlIFVzZSBwcmV2aW91cyBsb2NhbGUgc3RhdGUgdG8gcGFyc2UgdGhlIHZhbHVlLiBCeSBkZWZhdWx0LCBpcyBmYWxzZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBwYXJzZU51bWJlcih2YWx1ZTogc3RyaW5nLCB1c2VyUHJldkxvY2FsZVN0YXRlID0gZmFsc2UpOiBudW1iZXIge1xuICAgICAgICAvLyBsb2NhbGUgc3RhdGVcbiAgICAgICAgY29uc3QgbG9jYWxlID0gdXNlclByZXZMb2NhbGVTdGF0ZSA/IHRoaXMubG9jYWxlU2VydmljZT8ucHJldmlvdXNMb2NhbGUgOiB0aGlzLmxvY2FsZVNlcnZpY2U/LmN1cnJlbnRMb2NhbGUgfHwgdGhpcy5sb2NhbGVfaWQ7XG4gICAgICAgIC8vIGdldCBkZWNpbWFsIGFuZCBncm91cCBzeW1ib2xzXG4gICAgICAgIGNvbnN0IGRlY2ltYWxTeW1ib2wgPSBnZXRMb2NhbGVOdW1iZXJTeW1ib2wobG9jYWxlLCBOdW1iZXJTeW1ib2wuRGVjaW1hbCk7XG4gICAgICAgIGNvbnN0IGdyb3VwU3ltYm9sID0gZ2V0TG9jYWxlTnVtYmVyU3ltYm9sKGxvY2FsZSwgTnVtYmVyU3ltYm9sLkdyb3VwKTtcbiAgICAgICAgLy8gcmVwbGFjZSBzeW1ib2xzIHRvIHBhcnNlIG51bWJlclxuICAgICAgICBjb25zdCBwYXJzZWROdW1iZXIgPSB2YWx1ZT8uc3BsaXQoZ3JvdXBTeW1ib2wpLmpvaW4oJycpLnNwbGl0KGRlY2ltYWxTeW1ib2wpLmpvaW4oJy4nKTtcbiAgICAgICAgcmV0dXJuIE51bWJlci5wYXJzZUZsb2F0KHBhcnNlZE51bWJlcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGFkIGxlYWRpbmcgemVybyB0byB0aGUgbnVtYmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbnVtIFRoZSBudW1iZXIgdG8gYWRkIGxlYWRpbmcgemVybyB0b1xuICAgICAqIEBwYXJhbSBzaXplIE51bWJlciBvZiBudW1iZXIncyBsZWFkaW5nIHplcm9cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgcGFkWmVybyhudW0sIHNpemUpOiBzdHJpbmcge1xuICAgICAgICBudW0gPSBudW0udG9TdHJpbmcoKTtcbiAgICAgICAgLy8gZ2V0IGludGVnZXIgYW5kIGRlY2ltYWwgcGFydFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG4gICAgICAgIGxldCBbaW50ZWdlciwgZGVjaW1hbF0gPSBudW0uc3BsaXQoJy4nKTtcbiAgICAgICAgd2hpbGUgKGludGVnZXIubGVuZ3RoIDwgc2l6ZSkge1xuICAgICAgICAgICAgaW50ZWdlciA9ICcwJyArIGludGVnZXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlY2ltYWwgPyBgJHtpbnRlZ2VyfS4ke2RlY2ltYWx9YCA6IGludGVnZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY2hlY2tzIHdoZXRoZXIgdGhlIG1pbiBzeW1ib2wgaXMgYWxsb3dlZC4gSXQgaXMgYWxsb3dlZCB3aGVuIG1pbnVzIHN5bWJvbFxuICAgICAqIHByb3ZpZGVkIGFuZCBtaW4gaW5wdXQgaXMgdW5kZWZpbmVkIG9yIG1pbiBwcm92aWRlZCBhbmQgaXMgbmVnYXRpdmUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBrZXkgc3RyaW5nIGNvbWluZyBmcm9tIGFuIGV2ZW50XG4gICAgICovXG4gICAgcHJpdmF0ZSBpc01pbnVzQWxsb3dlZChrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMubWluIHx8IHRoaXMubWluIDwgMCA/IGtleSAhPT0gJy0nIDogdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjaGVjayB3aGV0aGVyIHRoZSBrZXkgZW50ZXJlZCBpcyBpbnNpZGUgdGhlIG1pbiBhbmRcbiAgICAgKiBtYXggcmFuZ2UuIFJldHVybnMgdHJ1ZSBpZiBpdCdzIG91dCBvZiByYW5nZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBlIEEga2V5Ym9hcmQgZXZlbnRcbiAgICAgKi9cbiAgICBwcml2YXRlIGlzT3V0U2lkZVJhbmdlKGU6IEtleWJvYXJkRXZlbnQpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCF0aGlzLmNsZWF2ZUluc3RhbmNlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZ2V0IGNhcmV0IHBvc2l0aW9uXG4gICAgICAgIGNvbnN0IHBvcyA9IGUudGFyZ2V0WydzZWxlY3Rpb25TdGFydCddO1xuICAgICAgICAvLyBnZXQgY2FyZXQgcG9zaXRpb24gKGluIGNhc2UgdGhlcmUncyB0ZXh0IHNlbGVjdGVkKVxuICAgICAgICBjb25zdCBlbmRQb3MgPSBlLnRhcmdldFsnc2VsZWN0aW9uRW5kJ107XG4gICAgICAgIC8vIGdldCBjdXJyZW50IHZhbHVlIChmb3JtYXR0ZWQpXG4gICAgICAgIGxldCB2YWx1ZSA9IGUudGFyZ2V0Wyd2YWx1ZSddO1xuICAgICAgICAvLyByZW1vdmUga2V5IGZyb20gdmFsdWVcbiAgICAgICAgaWYgKGUua2V5ID09PSAnRGVsZXRlJyB8fCBlLmtleSA9PT0gJ0JhY2tzcGFjZScpIHtcbiAgICAgICAgICAgIC8vIGNoZWNrIGlmIHRoZXJlJ3Mgc2VsZWN0aW9uIG9mIHRleHQgdG8gYmUgcmVtb3ZlZFxuICAgICAgICAgICAgaWYgKHBvcyAhPT0gZW5kUG9zKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBlLnRhcmdldFsndmFsdWUnXS5zdWJzdHJpbmcoMCwgcG9zKSArIGUudGFyZ2V0Wyd2YWx1ZSddLnN1YnN0cmluZyhlbmRQb3MsIGUudGFyZ2V0Wyd2YWx1ZSddLmxlbmd0aCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gZS50YXJnZXRbJ3ZhbHVlJ10uc3Vic3RyaW5nKDAsIHBvcyAtIDEpICsgZS50YXJnZXRbJ3ZhbHVlJ10uc3Vic3RyaW5nKGVuZFBvcywgZS50YXJnZXRbJ3ZhbHVlJ10ubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGFkZCBrZXkgdG8gdGhlIHZhbHVlXG4gICAgICAgICAgICB2YWx1ZSA9IFt2YWx1ZS5zbGljZSgwLCBwb3MpLCBlLmtleSwgdmFsdWUuc2xpY2UoZW5kUG9zKV0uam9pbignJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjcmVhdGUgYSBDbGVhdmUgaW5zdGFuY2UgdG8gZXh0cmFjdCB0aGUgbnVtYmVyIGZyb20gZm9ybWF0dGVkIHZhbHVlXG4gICAgICAgIGNvbnN0IGNsZWF2ZTogQ2xlYXZlSW5zdGFuY2UgPSBuZXcgQ2xlYXZlKHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKSwgeyAuLi50aGlzLm9wdGlvbnMgfSk7XG4gICAgICAgIGNsZWF2ZS5zZXRSYXdWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIGNvbnN0IG51bWJlciA9IE51bWJlcihjbGVhdmUuZ2V0UmF3VmFsdWUoKSk7XG4gICAgICAgIC8vIGRlc3Ryb3kgY2xlYXZlIGluc3RhbmNlXG4gICAgICAgIGNsZWF2ZS5kZXN0cm95KCk7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbiA+PSAwID8gZmFsc2UgOiB0aGlzLm1pbiA+IG51bWJlciB8fCB0aGlzLm1heCA8IG51bWJlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWNpbWFsIGFkanVzdG1lbnQgb2YgYSBudW1iZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHZhbHVlIFRoZSBudW1iZXIuXG4gICAgICogQHBhcmFtIGV4cCAgIFRoZSBleHBvbmVudCAodGhlIDEwIGxvZ2FyaXRobSBvZiB0aGUgYWRqdXN0bWVudCBiYXNlKS5cbiAgICAgKiBAcmV0dXJucyBUaGUgYWRqdXN0ZWQgdmFsdWUuXG4gICAgICovXG4gICAgcHJpdmF0ZSBkZWNpbWFsQWRqdXN0KHZhbHVlOiBudW1iZXIsIGV4cDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgLy8gSWYgdGhlIGV4cCBpcyB1bmRlZmluZWQgb3IgemVyby4uLlxuICAgICAgICBpZiAodHlwZW9mIGV4cCA9PT0gJ3VuZGVmaW5lZCcgfHwgK2V4cCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHZhbHVlID0gK3ZhbHVlO1xuICAgICAgICBleHAgPSArZXhwO1xuICAgICAgICAvLyBJZiB0aGUgdmFsdWUgaXMgbm90IGEgbnVtYmVyIG9yIHRoZSBleHAgaXMgbm90IGFuIGludGVnZXIuLi5cbiAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSB8fCAhKHR5cGVvZiBleHAgPT09ICdudW1iZXInICYmIGV4cCAlIDEgPT09IDApKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNoaWZ0XG4gICAgICAgIGxldCBjbGVhbmVkID0gdmFsdWUudG9TdHJpbmcoKS5zcGxpdCgnZScpO1xuICAgICAgICB2YWx1ZSA9IE1hdGgucm91bmQoKyhjbGVhbmVkWzBdICsgJ2UnICsgKGNsZWFuZWRbMV0gPyArY2xlYW5lZFsxXSAtIGV4cCA6IC1leHApKSk7XG4gICAgICAgIC8vIFNoaWZ0IGJhY2tcbiAgICAgICAgY2xlYW5lZCA9IHZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoJ2UnKTtcbiAgICAgICAgcmV0dXJuICsoY2xlYW5lZFswXSArICdlJyArIChjbGVhbmVkWzFdID8gK2NsZWFuZWRbMV0gKyBleHAgOiBleHApKTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -205,7 +205,7 @@ class EuiInputNumberComponent extends InputDirective {
|
|
|
205
205
|
}
|
|
206
206
|
onKeyDown(e) {
|
|
207
207
|
// check if it's a single symbol and not Special like (Ctrl, backspace etc)
|
|
208
|
-
if (e?.key
|
|
208
|
+
if (e?.key?.length <= 1 && !e.ctrlKey && !e.altKey && !e.metaKey) {
|
|
209
209
|
// stop event propagation if key pressed is not a number or locale character or minus sign
|
|
210
210
|
if (Number.isNaN(Number.parseInt(e.key, 10)) &&
|
|
211
211
|
this.isMinusAllowed(e.key) &&
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eui-components-eui-input-number.mjs","sources":["../../eui-input-number/eui-input-number.component.ts","../../eui-input-number/eui-number-control.directive.ts","../../eui-input-number/eui-input-number.module.ts","../../eui-input-number/eui-components-eui-input-number.ts"],"sourcesContent":["import {\n Optional,\n LOCALE_ID,\n Inject,\n ChangeDetectorRef,\n Component,\n DoCheck,\n ElementRef,\n HostBinding,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Renderer2,\n SimpleChanges,\n ViewEncapsulation,\n Injector,\n} from '@angular/core';\nimport { LocaleService, LocaleState } from '@eui/core';\nimport { coerceBooleanProperty, coerceNumberProperty, BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport { type CleaveOptions } from 'cleave.js/options';\nimport Cleave from 'cleave.js';\nimport { CleaveEventOnChange } from './models/cleave-event-onchange.model';\nimport { InputDirective } from '@eui/components/shared';\nimport { DOCUMENT, getLocaleNumberSymbol, NumberSymbol } from '@angular/common';\nimport { EuiClearableDirective, EuiLoadingDirective } from '@eui/components/directives';\nimport { NgControl } from '@angular/forms';\n\nexport interface CleaveInstance extends Cleave {\n initSwapHiddenInput?: () => void;\n initNumeralFormatter?: () => void;\n initTimeFormatter?: () => void;\n initDateFormatter?: () => void;\n initPhoneFormatter?: () => void;\n updateCreditCardPropsByValue?: () => void;\n updateValueState?: () => void;\n callOnValueChanged?: () => void;\n onChange?: (event?: Event) => void;\n onCut?: (event?: Event) => void;\n onFocus?: (event?: Event) => void;\n onCopy?: (event?: Event) => void;\n onKeyDown?: (event?: Event) => void;\n onChangeListener?: (event?: Event) => void;\n onKeyDownListener?: (event?: Event) => void;\n onFocusListener?: (event?: Event) => void;\n onCutListener?: (event?: Event) => void;\n onCopyListener?: (event?: Event) => void;\n}\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'input[euiInputNumber]',\n styleUrls: ['./styles/_index.scss'],\n template: '',\n encapsulation: ViewEncapsulation.None,\n hostDirectives: [\n {\n directive: EuiClearableDirective,\n inputs: ['euiClearable', 'readonly', 'disabled'],\n },\n {\n directive: EuiLoadingDirective,\n inputs: ['euiLoading', 'readonly'],\n },\n ],\n // eslint-disable-next-line @angular-eslint/no-host-metadata-property\n host: {\n '(blur)': 'onTouched()',\n },\n})\nexport class EuiInputNumberComponent extends InputDirective implements OnInit, OnDestroy, DoCheck, OnChanges {\n /**\n * The minimum number can be entered. Blocks user's input if not in range.\n */\n @Input()\n public get min(): number {\n return this._min;\n }\n public set min(value: NumberInput) {\n this._min = coerceNumberProperty(value);\n }\n /**\n * The maximum number can be entered. Blocks user's input if not in range.\n */\n @Input()\n public get max(): number {\n return this._max;\n }\n public set max(value: NumberInput) {\n this._max = coerceNumberProperty(value);\n }\n /** Adds leading zero to a number. Formatting will not work.\n * e.g. with leadingZero=3 input number 5 => 005\n */\n @Input()\n public get leadingZero(): number {\n return this._leadingZero;\n }\n public set leadingZero(value: NumberInput) {\n this._leadingZero = coerceNumberProperty(value);\n }\n @Input()\n public get isInvalid(): boolean {\n return this._isInvalid || null;\n }\n\n public set isInvalid(state: BooleanInput) {\n this.setInvalid(state);\n }\n @HostBinding('class')\n public get cssClasses(): string {\n return [super.getCssClasses('eui-input-number'), this._isInvalid ? 'eui-input-number--invalid' : ''].join(' ').trim();\n }\n\n /** how many digits for the decimal part */\n @Input()\n get fractionDigits(): number {\n return this._fractionDigits;\n }\n set fractionDigits(value: NumberInput) {\n this._fractionDigits = coerceNumberProperty(value);\n }\n /** how many digits for the integer part */\n @Input()\n get digits(): number {\n return this._digits;\n }\n set digits(value: NumberInput) {\n this._digits = coerceNumberProperty(value);\n }\n @Input()\n get fillFraction(): boolean {\n return this._fillFraction;\n }\n set fillFraction(value: BooleanInput) {\n this._fillFraction = coerceBooleanProperty(value);\n }\n /** rounds a number with more than two decimals UP */\n @Input()\n get roundUp(): number {\n return this._roundUp;\n }\n set roundUp(value: NumberInput) {\n this._roundUp = coerceNumberProperty(value);\n }\n protected _isInvalid: boolean;\n /**\n * does not format the and do a thousand grouping of number\n */\n @Input()\n get noFormat(): boolean {\n return this._noFormat;\n }\n set noFormat(value: BooleanInput) {\n this._noFormat = coerceBooleanProperty(value);\n }\n protected _noFormat: boolean;\n @Input() styleClass: string;\n @HostBinding('attr.type') protected type = 'eui-number';\n @Input() value: string;\n protected _roundUp: number;\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public onChangeCallback: (_: any) => void;\n cleaveInstance: CleaveInstance;\n private _min: number;\n private _max: number;\n\n private _leadingZero = 0;\n /** holds instance of cleave */\n /** options for the Cleave instance */\n private options: CleaveOptions;\n private _fractionDigits = 0;\n private _digits: number;\n private _fillFraction: boolean;\n\n constructor(\n protected _elementRef: ElementRef,\n protected _renderer: Renderer2,\n private cd: ChangeDetectorRef,\n @Optional() private localeService: LocaleService,\n @Inject(LOCALE_ID) private locale_id: string,\n injector: Injector,\n @Inject(DOCUMENT) private document: Document,\n ) {\n super(_elementRef, _renderer, injector);\n\n // set default options\n this.options = {\n numeral: true,\n };\n }\n\n ngOnInit(): void {\n super.ngOnInit();\n\n this.control = this.injector.get(NgControl, undefined, { optional: true });\n\n // instantiate cleave\n if (!this.control) {\n this.initCleave();\n }\n\n // subscribe to localization service and listen for locale change. De-construction of locale should happen here!\n this.localeService?.getState().subscribe((state: LocaleState) => {\n this.options = this.getCleaveOptsBasedOnLocale(state?.id);\n\n // update the options on the cleave instance\n this.updateOptions(true);\n });\n\n this._renderer.setProperty(this._elementRef.nativeElement, 'rootClassName', 'eui-input-number');\n }\n\n ngDoCheck(): void {\n if (!this.control) {\n this.control = this.injector.get(NgControl, undefined, { optional: true });\n }\n this.isInvalid = this.control ? this.control.invalid && this.control.touched : this._isInvalid;\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (Object.hasOwn(changes, 'value')) {\n this._elementRef.nativeElement.value = this.value;\n if (this.cleaveInstance) {\n this.cleaveInstance.setRawValue(this.value);\n }\n }\n if (Object.hasOwn(changes, 'fractionDigits')) {\n this.options = { ...this.options, numeralDecimalScale: this.fractionDigits };\n this.updateOptions();\n }\n if (Object.hasOwn(changes, 'noFormat')) {\n this.options = { ...this.options, numeralThousandsGroupStyle: this.noFormat ? 'none' : 'thousand' };\n this.updateOptions();\n }\n if (Object.hasOwn(changes, 'fillFraction') && this.cleaveInstance) {\n this.applyFractionFill(this.cleaveInstance.getRawValue());\n }\n if (Object.hasOwn(changes, 'digits')) {\n this.options = { ...this.options, numeralIntegerScale: this.digits };\n this.updateOptions();\n }\n if (Object.hasOwn(changes, 'min')) {\n if (changes['min'].currentValue >= 0) {\n if (this.cleaveInstance) {\n // take care of the sign symbol\n this.cleaveInstance.setRawValue(Math.abs(Number(this.cleaveInstance.getRawValue())).toString());\n }\n }\n }\n if (Object.hasOwn(changes, 'roundUp')) {\n if (changes['roundUp'].currentValue > 0) {\n if (this.cleaveInstance) {\n let number = Number.parseFloat(this.cleaveInstance.getRawValue());\n number = this.decimalAdjust(number, this.roundUp * -1);\n this.cleaveInstance.setRawValue(number.toString());\n }\n }\n }\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n // destroy cleave instance\n if (this.cleaveInstance) {\n this.cleaveInstance.destroy();\n }\n }\n\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onChange: any = (_: any): void => {\n if (this.control && (_ !== null || _ !== undefined)) {\n // parse number\n // const value = Number(_);\n // run on next MicroTask to avoid NG0100 error TODO: deeper investigation\n // Promise.resolve().then(() => this.control.viewToModelUpdate(value));\n // in case control is FormControl\n // this.control?.control.setValue(isNaN(value) ? null : value, { emitEvent: false, emitModelToViewChange: false });\n }\n };\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onTouched: any = (): void => {\n this.control?.control.markAsTouched();\n };\n\n @HostListener('paste', ['$event'])\n onPaste(event: ClipboardEvent): void {\n // get the value from clipboard\n const value = (event.clipboardData || window['clipboardData']).getData('text');\n // in case round UP is enabled\n if (this._roundUp > 0) {\n const div = this.document.createElement('input');\n // create a clone of cleaveInstance\n const cloneInstance: CleaveInstance = new Cleave(div, { ...this.options, numeralDecimalScale: 8 });\n cloneInstance.setRawValue(value.toString());\n let number = Number.parseFloat(cloneInstance.getRawValue());\n number = this.decimalAdjust(number, this.roundUp * -1);\n if (!Number.isNaN(number)) {\n this.cleaveInstance.setRawValue(number.toString());\n // TODO: investigate in the future how can this be avoided\n setTimeout(() => {\n // this.writeValue(number.toString());\n }, 0);\n }\n }\n }\n\n @HostListener('keydown', ['$event'])\n protected onKeyDown(e: KeyboardEvent): void {\n // check if it's a single symbol and not Special like (Ctrl, backspace etc)\n if (e?.key.length <= 1 && !e.ctrlKey && !e.altKey && !e.metaKey) {\n // stop event propagation if key pressed is not a number or locale character or minus sign\n if (\n Number.isNaN(Number.parseInt(e.key, 10)) &&\n this.isMinusAllowed(e.key) &&\n e.key !== getLocaleNumberSymbol(this.localeService?.currentLocale || this.locale_id, NumberSymbol.Decimal)\n ) {\n e.stopPropagation();\n e.preventDefault();\n // stop event propagation if key pressed exceeds the min/max value range\n } else if (!Number.isNaN(Number.parseInt(e.key, 10)) && this.isOutSideRange(e)) {\n e.stopPropagation();\n e.preventDefault();\n } else if (this.isOutSideRange(e)) {\n e.stopPropagation();\n e.preventDefault();\n }\n }\n\n // protect decimal symbol deletion in case fillFraction is on\n if (e.key === 'Delete' || e.key === 'Backspace') {\n const element = this._elementRef.nativeElement;\n // position of caret\n const pos = element.selectionStart;\n // get character about to be deleted\n const char = element.value.charAt(pos - 1);\n // in case the char is the decimal symbol prevent deletion and move caret in front\n if (char === getLocaleNumberSymbol(this.localeService?.currentLocale || this.locale_id, NumberSymbol.Decimal)) {\n e.stopPropagation();\n e.preventDefault();\n element.setSelectionRange(pos - 1, pos - 1);\n } else if (this.isOutSideRange(e)) {\n // don't allow insertion that will put number out of range\n e.stopPropagation();\n e.preventDefault();\n }\n }\n }\n\n @HostListener('focusout')\n protected onFocusout(): void {\n // in case fillFraction feature is on and there's no integer part add leading 0\n if (this.fillFraction && this.cleaveInstance.getRawValue().match(/^\\.[0-9]+/g)) {\n this.cleaveInstance.setRawValue('0' + this.cleaveInstance.getRawValue());\n }\n\n // in case round UP is enabled\n if (this._roundUp > 0) {\n const number = Number.parseFloat(this.cleaveInstance.getRawValue());\n this.cleaveInstance.setRawValue(this.decimalAdjust(number, this.roundUp * -1).toString());\n }\n\n // in case min is set and value is less than min reset to the min value\n if (this.min && Number.parseFloat(this.cleaveInstance.getRawValue()) < this.min) {\n this.cleaveInstance.setRawValue(this.min.toString());\n }\n }\n\n protected setInvalid(state?: BooleanInput): void {\n // in case it's controlled by NgControl override\n this._isInvalid = this.control ? this.control.invalid && this.control.touched : coerceBooleanProperty(state);\n\n // set BaseDirective Attribute\n super.euiDanger = this._isInvalid;\n }\n\n /**\n * @Override setPlaceholder setPlaceholderAttribute of InputDirective\n * Updates the placeholder value based on current number format and given value.\n * If value passed contains characters it doesn't format placeholder.\n * */\n protected setPlaceholderAttribute(value: string | number = 999999.9999): void {\n // if value is a number, format the value based on current number format\n if (typeof value === 'number' && !isNaN(value)) {\n const div = this.document.createElement('input');\n // create a clone of cleaveInstance\n const cloneInstance: CleaveInstance = new Cleave(div, this.options);\n // BEWARE: by the time your setRawValue cleave options have changed thus number formatting\n cloneInstance.setRawValue(value.toString());\n // set the value with current format as placeholder\n super.setPlaceholderAttribute(cloneInstance.getFormattedValue());\n } else if (typeof value === 'string') {\n super.setPlaceholderAttribute(value.toString());\n } else if (isNaN(value)) {\n value = this._elementRef.nativeElement.placeholder;\n super.setPlaceholderAttribute(value.toString());\n }\n }\n\n /**\n * instantiate Cleave.js\n */\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private initCleave(onChangeCallback?: (obj: any) => any): void {\n // change the cleave prototype function to intercept onCut callback\n // and allow based on the event bubbling and disabled state\n // TIP: change behavior of onCut to stop in case bubble is canceled\n // TODO: See relevant issue https://github.com/nosir/cleave.js/issues/675\n const _onCut = Cleave.prototype['onCut'];\n Cleave.prototype['onCut'] = function (e: Event): void {\n // eslint-disable-next-line no-invalid-this\n if (!e.cancelBubble && !this.element.disabled) {\n // eslint-disable-next-line no-invalid-this\n _onCut.call(this, e);\n }\n };\n\n // in case options is undefined\n const opts: CleaveOptions = { ...this.options };\n\n // set the onValue change listener to keep the value at readOnly element in sync\n opts.onValueChanged = onChangeCallback || this.onValueChanged.bind(this);\n\n // in case round UP is enabled\n if (this._roundUp > 0) {\n const number = Number.parseFloat(this._elementRef.nativeElement.value);\n this._elementRef.nativeElement.value = this.decimalAdjust(number, this.roundUp * -1);\n }\n\n // create the Cleave instance with the new or updated options\n this.cleaveInstance = new Cleave(this._elementRef.nativeElement, opts);\n }\n\n /**\n * Updates the cleave options by destroying the current instance and creating another one while keeping the previous\n * value.\n */\n private updateOptions(localeUpdated = false): void {\n if (this.cleaveInstance) {\n // the value before destroying cleave instance\n const previousValue = this.cleaveInstance.getRawValue();\n\n // update the Cleave instance with the new or updated options\n this.cleaveInstance.properties = {\n ...this.cleaveInstance.properties,\n ...this.options,\n initValue: previousValue,\n };\n\n // init number formatter with updated options\n this.cleaveInstance.initNumeralFormatter();\n\n // In case previous settings where numeralDecimalMark='.' with value 1000.99, and they changed to\n // numeralDecimalMark=','; set initValue to 1000.99 or even 1000,99 will not be reflected and cleave will\n // remove the decimal part. Set of the value after initialization causes reformat of number and works.\n this.cleaveInstance.setRawValue(previousValue);\n\n // parse number\n const number = this.parseNumber(this._elementRef.nativeElement.placeholder || undefined, localeUpdated);\n // set placeholder in case none is provided\n this.setPlaceholderAttribute(number);\n }\n }\n\n /**\n * Callback function of the Cleave instance that is invoked when value is changed.\n *\n * @param event type of CleaveEventOnChange\n */\n private onValueChanged(event: CleaveEventOnChange): void {\n const { target } = event;\n\n if (this.fillFraction) {\n this.applyFractionFill(target.rawValue);\n }\n this.onChange(Number.parseFloat(target.rawValue));\n // fill leading zero\n if (this.leadingZero) {\n const size = this.leadingZero > this.digits && this.digits > 0 ? this.digits : this.leadingZero;\n this._elementRef.nativeElement.value = this.padZero(event.target.rawValue, size);\n }\n }\n\n /**\n * responsible to extract all locale information needed to build CleaveOptions related to number format.\n *\n * @param id The id of the locale\n */\n private getCleaveOptsBasedOnLocale(id: string): CleaveOptions {\n if (!id || id === '') {\n throw new Error('Locale id cannot be empty or undefined');\n }\n const opts: CleaveOptions = {\n numeral: true,\n delimiter: getLocaleNumberSymbol(id, NumberSymbol.Group),\n numeralDecimalMark: getLocaleNumberSymbol(id, NumberSymbol.Decimal),\n numeralDecimalScale: this.fractionDigits,\n numeralIntegerScale: this.digits,\n numeralThousandsGroupStyle: this.noFormat ? 'none' : 'thousand', // TODO: implement based on locale\n };\n\n return { ...this.options, ...opts };\n }\n\n /**\n * Applies the fill of decimal part with zeros in case decimal part of given number has\n * size less than the max fraction digits.\n *\n * @param number\n * @param cleaveInstance\n * @private\n */\n private applyFractionFill(number: string, cleaveInstance: CleaveInstance = this.cleaveInstance): void {\n // if fill fraction is enabled and there's cleave instance\n if (this.fillFraction) {\n if (this.cleaveInstance) {\n number = number?.toString();\n if (number === '' || !number) {\n return;\n }\n const hasDecimal = number.split('.').length > 1;\n // in case there's already decimal point in number\n if (hasDecimal) {\n const decimalSize = number.split('.')[1].length;\n // if size of decimal part of number is less than the max fraction digits\n if (decimalSize < this._fractionDigits) {\n number = number + new Array(this._fractionDigits - decimalSize).fill(0).join('');\n const pos = this._elementRef.nativeElement.selectionStart;\n cleaveInstance.setRawValue(number);\n this._elementRef.nativeElement.setSelectionRange(pos, pos);\n }\n // in case there's not, force it by filling it as much zero as the fraction digits\n } else if (this.fractionDigits > 0) {\n number = `${number}.${new Array(this._fractionDigits).fill(0).join('')}`;\n const pos = this._elementRef.nativeElement.selectionStart;\n cleaveInstance.setRawValue(number);\n this._elementRef.nativeElement.setSelectionRange(pos, pos);\n }\n }\n }\n }\n\n /**\n * Parses a given formatted number and returns it as a number.\n *\n * @param value The formatted number you want to parse e.g. 111,888.22\n * @param userPrevLocaleState Use previous locale state to parse the value. By default, is false\n * @private\n */\n private parseNumber(value: string, userPrevLocaleState = false): number {\n // locale state\n const locale = userPrevLocaleState ? this.localeService?.previousLocale : this.localeService?.currentLocale || this.locale_id;\n // get decimal and group symbols\n const decimalSymbol = getLocaleNumberSymbol(locale, NumberSymbol.Decimal);\n const groupSymbol = getLocaleNumberSymbol(locale, NumberSymbol.Group);\n // replace symbols to parse number\n const parsedNumber = value?.split(groupSymbol).join('').split(decimalSymbol).join('.');\n return Number.parseFloat(parsedNumber);\n }\n\n /**\n * Pad leading zero to the number\n *\n * @param num The number to add leading zero to\n * @param size Number of number's leading zero\n * @private\n */\n private padZero(num, size): string {\n num = num.toString();\n // get integer and decimal part\n // eslint-disable-next-line prefer-const\n let [integer, decimal] = num.split('.');\n while (integer.length < size) {\n integer = '0' + integer;\n }\n return decimal ? `${integer}.${decimal}` : integer;\n }\n\n /**\n * checks whether the min symbol is allowed. It is allowed when minus symbol\n * provided and min input is undefined or min provided and is negative.\n *\n * @param key The key string coming from an event\n */\n private isMinusAllowed(key: string): boolean {\n return !this.min || this.min < 0 ? key !== '-' : true;\n }\n\n /**\n * check whether the key entered is inside the min and\n * max range. Returns true if it's out of range.\n *\n * @param e A keyboard event\n */\n private isOutSideRange(e: KeyboardEvent): boolean {\n if (!this.cleaveInstance) {\n return false;\n }\n // get caret position\n const pos = e.target['selectionStart'];\n // get caret position (in case there's text selected)\n const endPos = e.target['selectionEnd'];\n // get current value (formatted)\n let value = e.target['value'];\n // remove key from value\n if (e.key === 'Delete' || e.key === 'Backspace') {\n // check if there's selection of text to be removed\n if (pos !== endPos) {\n value = e.target['value'].substring(0, pos) + e.target['value'].substring(endPos, e.target['value'].length);\n } else {\n value = e.target['value'].substring(0, pos - 1) + e.target['value'].substring(endPos, e.target['value'].length);\n }\n } else {\n // add key to the value\n value = [value.slice(0, pos), e.key, value.slice(endPos)].join('');\n }\n\n // create a Cleave instance to extract the number from formatted value\n const cleave: CleaveInstance = new Cleave(this.document.createElement('input'), { ...this.options });\n cleave.setRawValue(value);\n const number = Number(cleave.getRawValue());\n // destroy cleave instance\n cleave.destroy();\n return this.min >= 0 ? false : this.min > number || this.max < number;\n }\n\n /**\n * Decimal adjustment of a number.\n *\n * @param value The number.\n * @param exp The exponent (the 10 logarithm of the adjustment base).\n * @returns The adjusted value.\n */\n private decimalAdjust(value: number, exp: number): number {\n // If the exp is undefined or zero...\n if (typeof exp === 'undefined' || +exp === 0) {\n return Math.round(value);\n }\n value = +value;\n exp = +exp;\n // If the value is not a number or the exp is not an integer...\n if (isNaN(value) || !(typeof exp === 'number' && exp % 1 === 0)) {\n return NaN;\n }\n // Shift\n let cleaned = value.toString().split('e');\n value = Math.round(+(cleaned[0] + 'e' + (cleaned[1] ? +cleaned[1] - exp : -exp)));\n // Shift back\n cleaned = value.toString().split('e');\n return +(cleaned[0] + 'e' + (cleaned[1] ? +cleaned[1] + exp : exp));\n }\n}\n","import { Directive, ElementRef, forwardRef, OnInit, Optional } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { CleaveInstance, EuiInputNumberComponent } from './eui-input-number.component';\nimport Cleave from 'cleave.js';\n\n@Directive({\n selector: 'input[euiInputNumber][formControl],input[euiInputNumber][formControlName],input[euiInputNumber][ngModel]',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => EuiInputNumberDirective),\n multi: true,\n },\n ],\n})\nexport class EuiInputNumberDirective implements ControlValueAccessor, OnInit {\n /** hold a copy of the value */\n private value: number;\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private onChange: (t: any) => void;\n\n constructor(\n private elementRef: ElementRef,\n @Optional() private euiNumberComponent: EuiInputNumberComponent,\n ) {}\n\n ngOnInit(): void {\n this.euiNumberComponent['initCleave'](this.valueChanges.bind(this));\n }\n\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n writeValue(obj: any): void {\n const cleave: CleaveInstance = new Cleave(document.createElement('input'), { ...this.euiNumberComponent['options'] });\n cleave.setRawValue(obj);\n if (this.euiNumberComponent.fillFraction && obj !== '' && obj) {\n this.euiNumberComponent['applyFractionFill'](obj, cleave);\n }\n let valueOfElement: string;\n // fill leading zero\n if (this.euiNumberComponent.leadingZero) {\n const size =\n this.euiNumberComponent.leadingZero > this.euiNumberComponent.digits && this.euiNumberComponent.digits > 0\n ? this.euiNumberComponent.digits\n : this.euiNumberComponent.leadingZero;\n valueOfElement = this.euiNumberComponent['padZero'](cleave.getFormattedValue(), size);\n } else {\n valueOfElement = cleave.getFormattedValue();\n }\n this.elementRef.nativeElement.value = valueOfElement;\n this.value = Number.parseFloat(cleave.getRawValue());\n cleave.destroy();\n }\n\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n registerOnChange(fn: any): void {\n this.onChange = (t): void => {\n this.value = t;\n fn(t);\n };\n }\n\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.euiNumberComponent.disabled = isDisabled;\n }\n\n private onTouched(): void {\n // this.euiNumberComponent.isInvalid = this.control.invalid;\n }\n\n private valueChanges(event): void {\n const { target } = event;\n\n this.euiNumberComponent['onValueChanged'](event);\n const numberCoerce = Number.parseFloat(target.rawValue);\n if (this.value !== numberCoerce && this.onChange) {\n this.onChange(isNaN(numberCoerce) ? null : numberCoerce);\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { EuiInputNumberComponent } from './eui-input-number.component';\nimport { EuiInputNumberDirective } from './eui-number-control.directive';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [EuiInputNumberComponent, EuiInputNumberDirective],\n exports: [EuiInputNumberComponent, EuiInputNumberDirective],\n})\nexport class EuiInputNumberDirectiveModule {}\n\n// @NgModule({\n// imports: [CommonModule],\n// declarations: [EuiInputNumberComponent, EuiInputNumberDirective],\n// exports: [EuiInputNumberComponent, EuiInputNumberDirective],\n// })\n// export class EuiInputNumberModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.EuiInputNumberComponent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"eui-components-eui-input-number.mjs","sources":["../../eui-input-number/eui-input-number.component.ts","../../eui-input-number/eui-number-control.directive.ts","../../eui-input-number/eui-input-number.module.ts","../../eui-input-number/eui-components-eui-input-number.ts"],"sourcesContent":["import {\n Optional,\n LOCALE_ID,\n Inject,\n ChangeDetectorRef,\n Component,\n DoCheck,\n ElementRef,\n HostBinding,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Renderer2,\n SimpleChanges,\n ViewEncapsulation,\n Injector,\n} from '@angular/core';\nimport { LocaleService, LocaleState } from '@eui/core';\nimport { coerceBooleanProperty, coerceNumberProperty, BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport { type CleaveOptions } from 'cleave.js/options';\nimport Cleave from 'cleave.js';\nimport { CleaveEventOnChange } from './models/cleave-event-onchange.model';\nimport { InputDirective } from '@eui/components/shared';\nimport { DOCUMENT, getLocaleNumberSymbol, NumberSymbol } from '@angular/common';\nimport { EuiClearableDirective, EuiLoadingDirective } from '@eui/components/directives';\nimport { NgControl } from '@angular/forms';\n\nexport interface CleaveInstance extends Cleave {\n initSwapHiddenInput?: () => void;\n initNumeralFormatter?: () => void;\n initTimeFormatter?: () => void;\n initDateFormatter?: () => void;\n initPhoneFormatter?: () => void;\n updateCreditCardPropsByValue?: () => void;\n updateValueState?: () => void;\n callOnValueChanged?: () => void;\n onChange?: (event?: Event) => void;\n onCut?: (event?: Event) => void;\n onFocus?: (event?: Event) => void;\n onCopy?: (event?: Event) => void;\n onKeyDown?: (event?: Event) => void;\n onChangeListener?: (event?: Event) => void;\n onKeyDownListener?: (event?: Event) => void;\n onFocusListener?: (event?: Event) => void;\n onCutListener?: (event?: Event) => void;\n onCopyListener?: (event?: Event) => void;\n}\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'input[euiInputNumber]',\n styleUrls: ['./styles/_index.scss'],\n template: '',\n encapsulation: ViewEncapsulation.None,\n hostDirectives: [\n {\n directive: EuiClearableDirective,\n inputs: ['euiClearable', 'readonly', 'disabled'],\n },\n {\n directive: EuiLoadingDirective,\n inputs: ['euiLoading', 'readonly'],\n },\n ],\n // eslint-disable-next-line @angular-eslint/no-host-metadata-property\n host: {\n '(blur)': 'onTouched()',\n },\n})\nexport class EuiInputNumberComponent extends InputDirective implements OnInit, OnDestroy, DoCheck, OnChanges {\n /**\n * The minimum number can be entered. Blocks user's input if not in range.\n */\n @Input()\n public get min(): number {\n return this._min;\n }\n public set min(value: NumberInput) {\n this._min = coerceNumberProperty(value);\n }\n /**\n * The maximum number can be entered. Blocks user's input if not in range.\n */\n @Input()\n public get max(): number {\n return this._max;\n }\n public set max(value: NumberInput) {\n this._max = coerceNumberProperty(value);\n }\n /** Adds leading zero to a number. Formatting will not work.\n * e.g. with leadingZero=3 input number 5 => 005\n */\n @Input()\n public get leadingZero(): number {\n return this._leadingZero;\n }\n public set leadingZero(value: NumberInput) {\n this._leadingZero = coerceNumberProperty(value);\n }\n @Input()\n public get isInvalid(): boolean {\n return this._isInvalid || null;\n }\n\n public set isInvalid(state: BooleanInput) {\n this.setInvalid(state);\n }\n @HostBinding('class')\n public get cssClasses(): string {\n return [super.getCssClasses('eui-input-number'), this._isInvalid ? 'eui-input-number--invalid' : ''].join(' ').trim();\n }\n\n /** how many digits for the decimal part */\n @Input()\n get fractionDigits(): number {\n return this._fractionDigits;\n }\n set fractionDigits(value: NumberInput) {\n this._fractionDigits = coerceNumberProperty(value);\n }\n /** how many digits for the integer part */\n @Input()\n get digits(): number {\n return this._digits;\n }\n set digits(value: NumberInput) {\n this._digits = coerceNumberProperty(value);\n }\n @Input()\n get fillFraction(): boolean {\n return this._fillFraction;\n }\n set fillFraction(value: BooleanInput) {\n this._fillFraction = coerceBooleanProperty(value);\n }\n /** rounds a number with more than two decimals UP */\n @Input()\n get roundUp(): number {\n return this._roundUp;\n }\n set roundUp(value: NumberInput) {\n this._roundUp = coerceNumberProperty(value);\n }\n protected _isInvalid: boolean;\n /**\n * does not format the and do a thousand grouping of number\n */\n @Input()\n get noFormat(): boolean {\n return this._noFormat;\n }\n set noFormat(value: BooleanInput) {\n this._noFormat = coerceBooleanProperty(value);\n }\n protected _noFormat: boolean;\n @Input() styleClass: string;\n @HostBinding('attr.type') protected type = 'eui-number';\n @Input() value: string;\n protected _roundUp: number;\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public onChangeCallback: (_: any) => void;\n cleaveInstance: CleaveInstance;\n private _min: number;\n private _max: number;\n\n private _leadingZero = 0;\n /** holds instance of cleave */\n /** options for the Cleave instance */\n private options: CleaveOptions;\n private _fractionDigits = 0;\n private _digits: number;\n private _fillFraction: boolean;\n\n constructor(\n protected _elementRef: ElementRef,\n protected _renderer: Renderer2,\n private cd: ChangeDetectorRef,\n @Optional() private localeService: LocaleService,\n @Inject(LOCALE_ID) private locale_id: string,\n injector: Injector,\n @Inject(DOCUMENT) private document: Document,\n ) {\n super(_elementRef, _renderer, injector);\n\n // set default options\n this.options = {\n numeral: true,\n };\n }\n\n ngOnInit(): void {\n super.ngOnInit();\n\n this.control = this.injector.get(NgControl, undefined, { optional: true });\n\n // instantiate cleave\n if (!this.control) {\n this.initCleave();\n }\n\n // subscribe to localization service and listen for locale change. De-construction of locale should happen here!\n this.localeService?.getState().subscribe((state: LocaleState) => {\n this.options = this.getCleaveOptsBasedOnLocale(state?.id);\n\n // update the options on the cleave instance\n this.updateOptions(true);\n });\n\n this._renderer.setProperty(this._elementRef.nativeElement, 'rootClassName', 'eui-input-number');\n }\n\n ngDoCheck(): void {\n if (!this.control) {\n this.control = this.injector.get(NgControl, undefined, { optional: true });\n }\n this.isInvalid = this.control ? this.control.invalid && this.control.touched : this._isInvalid;\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (Object.hasOwn(changes, 'value')) {\n this._elementRef.nativeElement.value = this.value;\n if (this.cleaveInstance) {\n this.cleaveInstance.setRawValue(this.value);\n }\n }\n if (Object.hasOwn(changes, 'fractionDigits')) {\n this.options = { ...this.options, numeralDecimalScale: this.fractionDigits };\n this.updateOptions();\n }\n if (Object.hasOwn(changes, 'noFormat')) {\n this.options = { ...this.options, numeralThousandsGroupStyle: this.noFormat ? 'none' : 'thousand' };\n this.updateOptions();\n }\n if (Object.hasOwn(changes, 'fillFraction') && this.cleaveInstance) {\n this.applyFractionFill(this.cleaveInstance.getRawValue());\n }\n if (Object.hasOwn(changes, 'digits')) {\n this.options = { ...this.options, numeralIntegerScale: this.digits };\n this.updateOptions();\n }\n if (Object.hasOwn(changes, 'min')) {\n if (changes['min'].currentValue >= 0) {\n if (this.cleaveInstance) {\n // take care of the sign symbol\n this.cleaveInstance.setRawValue(Math.abs(Number(this.cleaveInstance.getRawValue())).toString());\n }\n }\n }\n if (Object.hasOwn(changes, 'roundUp')) {\n if (changes['roundUp'].currentValue > 0) {\n if (this.cleaveInstance) {\n let number = Number.parseFloat(this.cleaveInstance.getRawValue());\n number = this.decimalAdjust(number, this.roundUp * -1);\n this.cleaveInstance.setRawValue(number.toString());\n }\n }\n }\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n // destroy cleave instance\n if (this.cleaveInstance) {\n this.cleaveInstance.destroy();\n }\n }\n\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onChange: any = (_: any): void => {\n if (this.control && (_ !== null || _ !== undefined)) {\n // parse number\n // const value = Number(_);\n // run on next MicroTask to avoid NG0100 error TODO: deeper investigation\n // Promise.resolve().then(() => this.control.viewToModelUpdate(value));\n // in case control is FormControl\n // this.control?.control.setValue(isNaN(value) ? null : value, { emitEvent: false, emitModelToViewChange: false });\n }\n };\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onTouched: any = (): void => {\n this.control?.control.markAsTouched();\n };\n\n @HostListener('paste', ['$event'])\n onPaste(event: ClipboardEvent): void {\n // get the value from clipboard\n const value = (event.clipboardData || window['clipboardData']).getData('text');\n // in case round UP is enabled\n if (this._roundUp > 0) {\n const div = this.document.createElement('input');\n // create a clone of cleaveInstance\n const cloneInstance: CleaveInstance = new Cleave(div, { ...this.options, numeralDecimalScale: 8 });\n cloneInstance.setRawValue(value.toString());\n let number = Number.parseFloat(cloneInstance.getRawValue());\n number = this.decimalAdjust(number, this.roundUp * -1);\n if (!Number.isNaN(number)) {\n this.cleaveInstance.setRawValue(number.toString());\n // TODO: investigate in the future how can this be avoided\n setTimeout(() => {\n // this.writeValue(number.toString());\n }, 0);\n }\n }\n }\n\n @HostListener('keydown', ['$event'])\n protected onKeyDown(e: KeyboardEvent): void {\n // check if it's a single symbol and not Special like (Ctrl, backspace etc)\n if (e?.key?.length <= 1 && !e.ctrlKey && !e.altKey && !e.metaKey) {\n // stop event propagation if key pressed is not a number or locale character or minus sign\n if (\n Number.isNaN(Number.parseInt(e.key, 10)) &&\n this.isMinusAllowed(e.key) &&\n e.key !== getLocaleNumberSymbol(this.localeService?.currentLocale || this.locale_id, NumberSymbol.Decimal)\n ) {\n e.stopPropagation();\n e.preventDefault();\n // stop event propagation if key pressed exceeds the min/max value range\n } else if (!Number.isNaN(Number.parseInt(e.key, 10)) && this.isOutSideRange(e)) {\n e.stopPropagation();\n e.preventDefault();\n } else if (this.isOutSideRange(e)) {\n e.stopPropagation();\n e.preventDefault();\n }\n }\n\n // protect decimal symbol deletion in case fillFraction is on\n if (e.key === 'Delete' || e.key === 'Backspace') {\n const element = this._elementRef.nativeElement;\n // position of caret\n const pos = element.selectionStart;\n // get character about to be deleted\n const char = element.value.charAt(pos - 1);\n // in case the char is the decimal symbol prevent deletion and move caret in front\n if (char === getLocaleNumberSymbol(this.localeService?.currentLocale || this.locale_id, NumberSymbol.Decimal)) {\n e.stopPropagation();\n e.preventDefault();\n element.setSelectionRange(pos - 1, pos - 1);\n } else if (this.isOutSideRange(e)) {\n // don't allow insertion that will put number out of range\n e.stopPropagation();\n e.preventDefault();\n }\n }\n }\n\n @HostListener('focusout')\n protected onFocusout(): void {\n // in case fillFraction feature is on and there's no integer part add leading 0\n if (this.fillFraction && this.cleaveInstance.getRawValue().match(/^\\.[0-9]+/g)) {\n this.cleaveInstance.setRawValue('0' + this.cleaveInstance.getRawValue());\n }\n\n // in case round UP is enabled\n if (this._roundUp > 0) {\n const number = Number.parseFloat(this.cleaveInstance.getRawValue());\n this.cleaveInstance.setRawValue(this.decimalAdjust(number, this.roundUp * -1).toString());\n }\n\n // in case min is set and value is less than min reset to the min value\n if (this.min && Number.parseFloat(this.cleaveInstance.getRawValue()) < this.min) {\n this.cleaveInstance.setRawValue(this.min.toString());\n }\n }\n\n protected setInvalid(state?: BooleanInput): void {\n // in case it's controlled by NgControl override\n this._isInvalid = this.control ? this.control.invalid && this.control.touched : coerceBooleanProperty(state);\n\n // set BaseDirective Attribute\n super.euiDanger = this._isInvalid;\n }\n\n /**\n * @Override setPlaceholder setPlaceholderAttribute of InputDirective\n * Updates the placeholder value based on current number format and given value.\n * If value passed contains characters it doesn't format placeholder.\n * */\n protected setPlaceholderAttribute(value: string | number = 999999.9999): void {\n // if value is a number, format the value based on current number format\n if (typeof value === 'number' && !isNaN(value)) {\n const div = this.document.createElement('input');\n // create a clone of cleaveInstance\n const cloneInstance: CleaveInstance = new Cleave(div, this.options);\n // BEWARE: by the time your setRawValue cleave options have changed thus number formatting\n cloneInstance.setRawValue(value.toString());\n // set the value with current format as placeholder\n super.setPlaceholderAttribute(cloneInstance.getFormattedValue());\n } else if (typeof value === 'string') {\n super.setPlaceholderAttribute(value.toString());\n } else if (isNaN(value)) {\n value = this._elementRef.nativeElement.placeholder;\n super.setPlaceholderAttribute(value.toString());\n }\n }\n\n /**\n * instantiate Cleave.js\n */\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private initCleave(onChangeCallback?: (obj: any) => any): void {\n // change the cleave prototype function to intercept onCut callback\n // and allow based on the event bubbling and disabled state\n // TIP: change behavior of onCut to stop in case bubble is canceled\n // TODO: See relevant issue https://github.com/nosir/cleave.js/issues/675\n const _onCut = Cleave.prototype['onCut'];\n Cleave.prototype['onCut'] = function (e: Event): void {\n // eslint-disable-next-line no-invalid-this\n if (!e.cancelBubble && !this.element.disabled) {\n // eslint-disable-next-line no-invalid-this\n _onCut.call(this, e);\n }\n };\n\n // in case options is undefined\n const opts: CleaveOptions = { ...this.options };\n\n // set the onValue change listener to keep the value at readOnly element in sync\n opts.onValueChanged = onChangeCallback || this.onValueChanged.bind(this);\n\n // in case round UP is enabled\n if (this._roundUp > 0) {\n const number = Number.parseFloat(this._elementRef.nativeElement.value);\n this._elementRef.nativeElement.value = this.decimalAdjust(number, this.roundUp * -1);\n }\n\n // create the Cleave instance with the new or updated options\n this.cleaveInstance = new Cleave(this._elementRef.nativeElement, opts);\n }\n\n /**\n * Updates the cleave options by destroying the current instance and creating another one while keeping the previous\n * value.\n */\n private updateOptions(localeUpdated = false): void {\n if (this.cleaveInstance) {\n // the value before destroying cleave instance\n const previousValue = this.cleaveInstance.getRawValue();\n\n // update the Cleave instance with the new or updated options\n this.cleaveInstance.properties = {\n ...this.cleaveInstance.properties,\n ...this.options,\n initValue: previousValue,\n };\n\n // init number formatter with updated options\n this.cleaveInstance.initNumeralFormatter();\n\n // In case previous settings where numeralDecimalMark='.' with value 1000.99, and they changed to\n // numeralDecimalMark=','; set initValue to 1000.99 or even 1000,99 will not be reflected and cleave will\n // remove the decimal part. Set of the value after initialization causes reformat of number and works.\n this.cleaveInstance.setRawValue(previousValue);\n\n // parse number\n const number = this.parseNumber(this._elementRef.nativeElement.placeholder || undefined, localeUpdated);\n // set placeholder in case none is provided\n this.setPlaceholderAttribute(number);\n }\n }\n\n /**\n * Callback function of the Cleave instance that is invoked when value is changed.\n *\n * @param event type of CleaveEventOnChange\n */\n private onValueChanged(event: CleaveEventOnChange): void {\n const { target } = event;\n\n if (this.fillFraction) {\n this.applyFractionFill(target.rawValue);\n }\n this.onChange(Number.parseFloat(target.rawValue));\n // fill leading zero\n if (this.leadingZero) {\n const size = this.leadingZero > this.digits && this.digits > 0 ? this.digits : this.leadingZero;\n this._elementRef.nativeElement.value = this.padZero(event.target.rawValue, size);\n }\n }\n\n /**\n * responsible to extract all locale information needed to build CleaveOptions related to number format.\n *\n * @param id The id of the locale\n */\n private getCleaveOptsBasedOnLocale(id: string): CleaveOptions {\n if (!id || id === '') {\n throw new Error('Locale id cannot be empty or undefined');\n }\n const opts: CleaveOptions = {\n numeral: true,\n delimiter: getLocaleNumberSymbol(id, NumberSymbol.Group),\n numeralDecimalMark: getLocaleNumberSymbol(id, NumberSymbol.Decimal),\n numeralDecimalScale: this.fractionDigits,\n numeralIntegerScale: this.digits,\n numeralThousandsGroupStyle: this.noFormat ? 'none' : 'thousand', // TODO: implement based on locale\n };\n\n return { ...this.options, ...opts };\n }\n\n /**\n * Applies the fill of decimal part with zeros in case decimal part of given number has\n * size less than the max fraction digits.\n *\n * @param number\n * @param cleaveInstance\n * @private\n */\n private applyFractionFill(number: string, cleaveInstance: CleaveInstance = this.cleaveInstance): void {\n // if fill fraction is enabled and there's cleave instance\n if (this.fillFraction) {\n if (this.cleaveInstance) {\n number = number?.toString();\n if (number === '' || !number) {\n return;\n }\n const hasDecimal = number.split('.').length > 1;\n // in case there's already decimal point in number\n if (hasDecimal) {\n const decimalSize = number.split('.')[1].length;\n // if size of decimal part of number is less than the max fraction digits\n if (decimalSize < this._fractionDigits) {\n number = number + new Array(this._fractionDigits - decimalSize).fill(0).join('');\n const pos = this._elementRef.nativeElement.selectionStart;\n cleaveInstance.setRawValue(number);\n this._elementRef.nativeElement.setSelectionRange(pos, pos);\n }\n // in case there's not, force it by filling it as much zero as the fraction digits\n } else if (this.fractionDigits > 0) {\n number = `${number}.${new Array(this._fractionDigits).fill(0).join('')}`;\n const pos = this._elementRef.nativeElement.selectionStart;\n cleaveInstance.setRawValue(number);\n this._elementRef.nativeElement.setSelectionRange(pos, pos);\n }\n }\n }\n }\n\n /**\n * Parses a given formatted number and returns it as a number.\n *\n * @param value The formatted number you want to parse e.g. 111,888.22\n * @param userPrevLocaleState Use previous locale state to parse the value. By default, is false\n * @private\n */\n private parseNumber(value: string, userPrevLocaleState = false): number {\n // locale state\n const locale = userPrevLocaleState ? this.localeService?.previousLocale : this.localeService?.currentLocale || this.locale_id;\n // get decimal and group symbols\n const decimalSymbol = getLocaleNumberSymbol(locale, NumberSymbol.Decimal);\n const groupSymbol = getLocaleNumberSymbol(locale, NumberSymbol.Group);\n // replace symbols to parse number\n const parsedNumber = value?.split(groupSymbol).join('').split(decimalSymbol).join('.');\n return Number.parseFloat(parsedNumber);\n }\n\n /**\n * Pad leading zero to the number\n *\n * @param num The number to add leading zero to\n * @param size Number of number's leading zero\n * @private\n */\n private padZero(num, size): string {\n num = num.toString();\n // get integer and decimal part\n // eslint-disable-next-line prefer-const\n let [integer, decimal] = num.split('.');\n while (integer.length < size) {\n integer = '0' + integer;\n }\n return decimal ? `${integer}.${decimal}` : integer;\n }\n\n /**\n * checks whether the min symbol is allowed. It is allowed when minus symbol\n * provided and min input is undefined or min provided and is negative.\n *\n * @param key The key string coming from an event\n */\n private isMinusAllowed(key: string): boolean {\n return !this.min || this.min < 0 ? key !== '-' : true;\n }\n\n /**\n * check whether the key entered is inside the min and\n * max range. Returns true if it's out of range.\n *\n * @param e A keyboard event\n */\n private isOutSideRange(e: KeyboardEvent): boolean {\n if (!this.cleaveInstance) {\n return false;\n }\n // get caret position\n const pos = e.target['selectionStart'];\n // get caret position (in case there's text selected)\n const endPos = e.target['selectionEnd'];\n // get current value (formatted)\n let value = e.target['value'];\n // remove key from value\n if (e.key === 'Delete' || e.key === 'Backspace') {\n // check if there's selection of text to be removed\n if (pos !== endPos) {\n value = e.target['value'].substring(0, pos) + e.target['value'].substring(endPos, e.target['value'].length);\n } else {\n value = e.target['value'].substring(0, pos - 1) + e.target['value'].substring(endPos, e.target['value'].length);\n }\n } else {\n // add key to the value\n value = [value.slice(0, pos), e.key, value.slice(endPos)].join('');\n }\n\n // create a Cleave instance to extract the number from formatted value\n const cleave: CleaveInstance = new Cleave(this.document.createElement('input'), { ...this.options });\n cleave.setRawValue(value);\n const number = Number(cleave.getRawValue());\n // destroy cleave instance\n cleave.destroy();\n return this.min >= 0 ? false : this.min > number || this.max < number;\n }\n\n /**\n * Decimal adjustment of a number.\n *\n * @param value The number.\n * @param exp The exponent (the 10 logarithm of the adjustment base).\n * @returns The adjusted value.\n */\n private decimalAdjust(value: number, exp: number): number {\n // If the exp is undefined or zero...\n if (typeof exp === 'undefined' || +exp === 0) {\n return Math.round(value);\n }\n value = +value;\n exp = +exp;\n // If the value is not a number or the exp is not an integer...\n if (isNaN(value) || !(typeof exp === 'number' && exp % 1 === 0)) {\n return NaN;\n }\n // Shift\n let cleaned = value.toString().split('e');\n value = Math.round(+(cleaned[0] + 'e' + (cleaned[1] ? +cleaned[1] - exp : -exp)));\n // Shift back\n cleaned = value.toString().split('e');\n return +(cleaned[0] + 'e' + (cleaned[1] ? +cleaned[1] + exp : exp));\n }\n}\n","import { Directive, ElementRef, forwardRef, OnInit, Optional } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { CleaveInstance, EuiInputNumberComponent } from './eui-input-number.component';\nimport Cleave from 'cleave.js';\n\n@Directive({\n selector: 'input[euiInputNumber][formControl],input[euiInputNumber][formControlName],input[euiInputNumber][ngModel]',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => EuiInputNumberDirective),\n multi: true,\n },\n ],\n})\nexport class EuiInputNumberDirective implements ControlValueAccessor, OnInit {\n /** hold a copy of the value */\n private value: number;\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private onChange: (t: any) => void;\n\n constructor(\n private elementRef: ElementRef,\n @Optional() private euiNumberComponent: EuiInputNumberComponent,\n ) {}\n\n ngOnInit(): void {\n this.euiNumberComponent['initCleave'](this.valueChanges.bind(this));\n }\n\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n writeValue(obj: any): void {\n const cleave: CleaveInstance = new Cleave(document.createElement('input'), { ...this.euiNumberComponent['options'] });\n cleave.setRawValue(obj);\n if (this.euiNumberComponent.fillFraction && obj !== '' && obj) {\n this.euiNumberComponent['applyFractionFill'](obj, cleave);\n }\n let valueOfElement: string;\n // fill leading zero\n if (this.euiNumberComponent.leadingZero) {\n const size =\n this.euiNumberComponent.leadingZero > this.euiNumberComponent.digits && this.euiNumberComponent.digits > 0\n ? this.euiNumberComponent.digits\n : this.euiNumberComponent.leadingZero;\n valueOfElement = this.euiNumberComponent['padZero'](cleave.getFormattedValue(), size);\n } else {\n valueOfElement = cleave.getFormattedValue();\n }\n this.elementRef.nativeElement.value = valueOfElement;\n this.value = Number.parseFloat(cleave.getRawValue());\n cleave.destroy();\n }\n\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n registerOnChange(fn: any): void {\n this.onChange = (t): void => {\n this.value = t;\n fn(t);\n };\n }\n\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.euiNumberComponent.disabled = isDisabled;\n }\n\n private onTouched(): void {\n // this.euiNumberComponent.isInvalid = this.control.invalid;\n }\n\n private valueChanges(event): void {\n const { target } = event;\n\n this.euiNumberComponent['onValueChanged'](event);\n const numberCoerce = Number.parseFloat(target.rawValue);\n if (this.value !== numberCoerce && this.onChange) {\n this.onChange(isNaN(numberCoerce) ? null : numberCoerce);\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { EuiInputNumberComponent } from './eui-input-number.component';\nimport { EuiInputNumberDirective } from './eui-number-control.directive';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [EuiInputNumberComponent, EuiInputNumberDirective],\n exports: [EuiInputNumberComponent, EuiInputNumberDirective],\n})\nexport class EuiInputNumberDirectiveModule {}\n\n// @NgModule({\n// imports: [CommonModule],\n// declarations: [EuiInputNumberComponent, EuiInputNumberDirective],\n// exports: [EuiInputNumberComponent, EuiInputNumberDirective],\n// })\n// export class EuiInputNumberModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.EuiInputNumberComponent"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@eui/components",
|
|
3
|
-
"version": "16.2.7
|
|
4
|
-
"tag": "
|
|
3
|
+
"version": "16.2.7",
|
|
4
|
+
"tag": "prev",
|
|
5
5
|
"description": "eUI components package - next components prior to version 9",
|
|
6
6
|
"homepage": "https://eui.ecdevops.eu",
|
|
7
7
|
"author": "ec.europa.eui@gmail.com",
|
|
@@ -39,12 +39,6 @@
|
|
|
39
39
|
"esm": "./esm2022/eui-alert/eui-components-eui-alert.mjs",
|
|
40
40
|
"default": "./fesm2022/eui-components-eui-alert.mjs"
|
|
41
41
|
},
|
|
42
|
-
"./eui-all": {
|
|
43
|
-
"types": "./eui-all/index.d.ts",
|
|
44
|
-
"esm2022": "./esm2022/eui-all/eui-components-eui-all.mjs",
|
|
45
|
-
"esm": "./esm2022/eui-all/eui-components-eui-all.mjs",
|
|
46
|
-
"default": "./fesm2022/eui-components-eui-all.mjs"
|
|
47
|
-
},
|
|
48
42
|
"./eui-autocomplete": {
|
|
49
43
|
"types": "./eui-autocomplete/index.d.ts",
|
|
50
44
|
"esm2022": "./esm2022/eui-autocomplete/eui-components-eui-autocomplete.mjs",
|
|
@@ -57,6 +51,12 @@
|
|
|
57
51
|
"esm": "./esm2022/eui-badge/eui-components-eui-badge.mjs",
|
|
58
52
|
"default": "./fesm2022/eui-components-eui-badge.mjs"
|
|
59
53
|
},
|
|
54
|
+
"./eui-all": {
|
|
55
|
+
"types": "./eui-all/index.d.ts",
|
|
56
|
+
"esm2022": "./esm2022/eui-all/eui-components-eui-all.mjs",
|
|
57
|
+
"esm": "./esm2022/eui-all/eui-components-eui-all.mjs",
|
|
58
|
+
"default": "./fesm2022/eui-components-eui-all.mjs"
|
|
59
|
+
},
|
|
60
60
|
"./eui-block-content": {
|
|
61
61
|
"types": "./eui-block-content/index.d.ts",
|
|
62
62
|
"esm2022": "./esm2022/eui-block-content/eui-components-eui-block-content.mjs",
|