@myrtex-org/form 1.1.42 → 1.1.43
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/esm2022/lib/modules/object-form/components/elements/base/base-field/base-field.component.mjs +2 -1
- package/esm2022/lib/modules/object-form/components/elements/input/table/input-table.component.mjs +62 -4
- package/fesm2022/myrtex-org-form.mjs +62 -4
- package/fesm2022/myrtex-org-form.mjs.map +1 -1
- package/lib/modules/object-form/components/elements/input/table/input-table.component.d.ts +5 -2
- package/package.json +1 -1
package/esm2022/lib/modules/object-form/components/elements/base/base-field/base-field.component.mjs
CHANGED
|
@@ -135,6 +135,7 @@ export class BaseFieldComponent {
|
|
|
135
135
|
_initModel() {
|
|
136
136
|
if (this.valueMode === 'manual') {
|
|
137
137
|
this.model = cloneDeep(getValueModel(this.settings, this.manualValues)) || defaultValueModel(this.settings);
|
|
138
|
+
this._customInit();
|
|
138
139
|
}
|
|
139
140
|
else {
|
|
140
141
|
this.model = defaultValueModel(this.settings);
|
|
@@ -159,4 +160,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
159
160
|
}], changed: [{
|
|
160
161
|
type: Output
|
|
161
162
|
}] } });
|
|
162
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9teXJ0ZXgtZm9ybS9zcmMvbGliL21vZHVsZXMvb2JqZWN0LWZvcm0vY29tcG9uZW50cy9lbGVtZW50cy9iYXNlL2Jhc2UtZmllbGQvYmFzZS1maWVsZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RILE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDcEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN0QyxPQUFPLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUV4RixPQUFPLEVBQUUsYUFBYSxFQUFTLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFJOUMsTUFBTSxPQUFnQixrQkFBa0I7SUFEeEM7UUFLWSxXQUFNLEdBQVUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLGNBQVMsR0FBc0IsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDekQsb0JBQWUsR0FBbUIsRUFBRSxDQUFDO1FBQ3JDLGFBQVEsR0FBVyxFQUFFLENBQUM7UUFDeEIsb0JBQWUsR0FBeUQsSUFBSSxPQUFPLEVBQStDLENBQUM7UUFFbkksbUJBQWMsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDckMscUJBQWdCLEdBQVksS0FBSyxDQUFDO1FBQ3BDLG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBSWpDLGlCQUFZLEdBQWlCLEVBQUUsQ0FBQztRQWlCOUIsY0FBUyxHQUFzQixNQUFNLENBQUM7UUFVOUIsWUFBTyxHQUFHLElBQUksWUFBWSxFQUErQyxDQUFDO0tBZ0k1RjtJQXpKQyxJQUFhLE1BQU0sQ0FBQyxLQUFtQjtRQUNyQyxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7WUFFMUIsTUFBTSxvQkFBb0IsR0FDeEIsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLEtBQUssYUFBYSxDQUFDLFdBQVc7Z0JBQ2hELElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBa0MsRUFBRSxVQUFVLEtBQUssVUFBVSxDQUFDLE9BQU8sQ0FBQztZQUV4RixJQUFJLG9CQUFvQixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBeUIsRUFBRSxLQUFLLENBQUM7Z0JBQ25HLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDakMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBSUQsSUFBYSxJQUFJLENBQUMsUUFBNEI7UUFDNUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFrQixDQUFDO1FBRW5DLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUVuQixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFJRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRWxCLElBQUksQ0FBQyxlQUFlO2FBQ2pCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDdkIsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2pCLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQztZQUNsRCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFTCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsQ0FBQzthQUNwRixTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDbEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE1BQU0sQ0FBQztZQUMvQixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFTixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUM7YUFDN0UsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO1lBQUEsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRU4sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsbUJBQW1CLENBQUM7YUFDbEYsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDO1lBQzdCLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVOLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztRQUNuQyxDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVELElBQUksY0FBYztRQUNoQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDMUIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6RixDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLGlCQUFpQjtRQUNuQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzFCLE9BQU8saUNBQWlDLENBQUM7UUFDM0MsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDNUUsQ0FBQztJQUVPLGlCQUFpQixDQUFDLElBQWU7UUFDdkMsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUNiLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDeEIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7Z0JBQ3ZCLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO1lBQ3BDLEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDO2dCQUN0QixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUM1QixLQUFLLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQztnQkFDdEIsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDNUIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUM3QixLQUFLLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQztnQkFDeEIsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDO1lBQ3BDO2dCQUNFLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7SUFDSCxDQUFDO0lBRVMseUJBQXlCO1FBQ2pDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUM5RixTQUFTLENBQUMsQ0FBQyxNQUFtRSxFQUFFLEVBQUU7WUFDakYsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDWCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO29CQUMzQixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO29CQUVoQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3JCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7SUFFUyxZQUFZO1FBQ3BCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVTLHFCQUFxQjtRQUM3QixPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVTLGtCQUFrQixDQUFDLEtBQW1CO0lBQ2hELENBQUM7SUFFUyxXQUFXO1FBQ25CLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVTLGVBQWUsQ0FBQyxLQUEwQjtRQUNsRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFUyxVQUFVO1FBQ2xCLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUF3QixDQUFDLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3JJLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLEtBQUssR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEQsQ0FBQztJQUNILENBQUM7SUFFRCxjQUFjLENBQUMsS0FBbUI7UUFDaEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXBDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUvQixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7SUFFeEMsQ0FBQzsrR0ExS21CLGtCQUFrQjttSEFBbEIsa0JBQWtCOzs0RkFBbEIsa0JBQWtCO2tCQUR2QyxVQUFVOzhCQW1CSSxNQUFNO3NCQUFsQixLQUFLO2dCQWVHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRU8sSUFBSTtzQkFBaEIsS0FBSztnQkFRVyxPQUFPO3NCQUF2QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIEV2ZW50RW1pdHRlciwgaW5qZWN0LCBJbmplY3RhYmxlLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XHJcbmltcG9ydCB7IGNsb25lRGVlcCB9IGZyb20gJ2xvZGFzaC1lcyc7XHJcbmltcG9ydCB7IENvbXBvbmVudFR5cGUsIElucHV0U3RhdGUsIFZhbHVlVHlwZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NoYXJlZC1mb3JtL2VudW1zJztcclxuaW1wb3J0IHsgQ29tcG9uZW50TW9kZWxCYXNlLCBTZWxlY3RMaXN0SXRlbSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NoYXJlZC1mb3JtL21vZGVscyc7XHJcbmltcG9ydCB7IEF1dG9TYXZlU3RvcmUsIEZpZWxkIH0gZnJvbSAnQG15cnRleC1vcmcvdWknO1xyXG5pbXBvcnQgeyBDb21wb25lbnRWYWx1ZU1vZGVsLCBWYWx1ZU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgZGVmYXVsdFZhbHVlTW9kZWwsIGdldFZhbHVlTW9kZWwgfSBmcm9tICcuLi8uLi8uLi8uLi9oZWxwZXJzJztcclxuaW1wb3J0IHsgb2JqZWN0Rm9ybVNlbGVjdG9ycyB9IGZyb20gJy4uLy4uLy4uLy4uL3N0b3JlJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBJbnB1dE51bWJlck9wdGlvbnNCYXNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2VsZW1ldHMvaW5wdXRzJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VGaWVsZENvbXBvbmVudDxUTW9kZWwgZXh0ZW5kcyBDb21wb25lbnRNb2RlbEJhc2UsIFRPdXRwdXRFdmVudCBleHRlbmRzIHtcclxuICBpZDogc3RyaW5nLFxyXG4gIHZhbHVlOiBhbnlcclxufT4gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgcHJvdGVjdGVkIF9zdG9yZTogU3RvcmUgPSBpbmplY3QoU3RvcmUpO1xyXG4gIHByb3RlY3RlZCBfZGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcclxuICBwcm90ZWN0ZWQgX3N1YnNjcmlwdGlvbnMkOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG4gIHByb3RlY3RlZCBvYmplY3RJZDogc3RyaW5nID0gJyc7XHJcbiAgcHJpdmF0ZSBfY2hhbmdlU3ViamVjdCQ6IFN1YmplY3Q8Q29tcG9uZW50VmFsdWVNb2RlbCB8IENvbXBvbmVudFZhbHVlTW9kZWxbXT4gPSBuZXcgU3ViamVjdDxDb21wb25lbnRWYWx1ZU1vZGVsIHwgQ29tcG9uZW50VmFsdWVNb2RlbFtdPigpO1xyXG5cclxuICBwcml2YXRlIF9hdXRvU2F2ZVN0b3JlID0gaW5qZWN0KEF1dG9TYXZlU3RvcmUpO1xyXG4gIHByb3RlY3RlZCBfaXNDaGVja1JlcXVpcmVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfY2FuRWRpdE9iamVjdDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwdWJsaWMgbW9kZWwhOiBDb21wb25lbnRWYWx1ZU1vZGVsO1xyXG4gIHB1YmxpYyBzZXR0aW5ncyE6IFRNb2RlbDtcclxuICBwdWJsaWMgbWFudWFsVmFsdWVzOiBWYWx1ZU1vZGVsW10gPSBbXTtcclxuXHJcbiAgQElucHV0KCkgc2V0IHZhbHVlcyh2YWx1ZTogVmFsdWVNb2RlbFtdKSB7XHJcbiAgICBpZiAodGhpcy52YWx1ZU1vZGUgPT09ICdtYW51YWwnKSB7XHJcbiAgICAgIHRoaXMubWFudWFsVmFsdWVzID0gdmFsdWU7XHJcblxyXG4gICAgICBjb25zdCBpc0Zvcm11bGFJbnB1dE51bWJlciA9XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncz8udHlwZSA9PT0gQ29tcG9uZW50VHlwZS5JbnB1dE51bWJlciAmJlxyXG4gICAgICAgICh0aGlzLnNldHRpbmdzPy5vcHRpb25zIGFzIElucHV0TnVtYmVyT3B0aW9uc0Jhc2UpPy5pbnB1dFN0YXRlID09PSBJbnB1dFN0YXRlLkZvcm11bGE7XHJcblxyXG4gICAgICBpZiAoaXNGb3JtdWxhSW5wdXROdW1iZXIgJiYgdGhpcy5tb2RlbCkge1xyXG4gICAgICAgIHRoaXMubW9kZWwudmFsdWUgPSAoZ2V0VmFsdWVNb2RlbCh0aGlzLnNldHRpbmdzLCB0aGlzLm1hbnVhbFZhbHVlcykgYXMgQ29tcG9uZW50VmFsdWVNb2RlbCk/LnZhbHVlO1xyXG4gICAgICAgIHRoaXMuX2RldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgdmFsdWVNb2RlOiAnYXV0bycgfCAnbWFudWFsJyA9ICdhdXRvJztcclxuXHJcbiAgQElucHV0KCkgc2V0IGRhdGEoc2V0dGluZ3M6IENvbXBvbmVudE1vZGVsQmFzZSkge1xyXG4gICAgdGhpcy5zZXR0aW5ncyA9IHNldHRpbmdzIGFzIFRNb2RlbDtcclxuXHJcbiAgICB0aGlzLl9jdXN0b21Jbml0KCk7XHJcblxyXG4gICAgdGhpcy5fZGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgQE91dHB1dCgpIHB1YmxpYyBjaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxDb21wb25lbnRWYWx1ZU1vZGVsIHwgQ29tcG9uZW50VmFsdWVNb2RlbFtdPigpO1xyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2luaXRNb2RlbCgpO1xyXG5cclxuICAgIHRoaXMuX2NoYW5nZVN1YmplY3QkXHJcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSg1MDApKVxyXG4gICAgICAuc3Vic2NyaWJlKG1vZGVsID0+IHtcclxuICAgICAgICBpZiAodGhpcy5fY3VzdG9tVmFsaWRhdGUodGhpcy5tb2RlbCkpIHtcclxuICAgICAgICAgIHRoaXMuY2hhbmdlZC5lbWl0KHRoaXMuX3RyYW5zZm9ybU91dHB1dFZhbHVlKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucyQucHVzaCh0aGlzLl9zdG9yZS5zZWxlY3Qob2JqZWN0Rm9ybVNlbGVjdG9ycy5zZWxlY3RJc0NoZWNrUmVxdWlyZWQpXHJcbiAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgICB0aGlzLl9pc0NoZWNrUmVxdWlyZWQgPSByZXN1bHQ7XHJcbiAgICAgICAgdGhpcy5fZGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9KSk7XHJcblxyXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucyQucHVzaCh0aGlzLl9zdG9yZS5zZWxlY3Qob2JqZWN0Rm9ybVNlbGVjdG9ycy5zZWxlY3RPYmplY3RJZClcclxuICAgICAgLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICAgIHRoaXMub2JqZWN0SWQgPSByZXN1bHQ7O1xyXG4gICAgICB9KSk7XHJcblxyXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucyQucHVzaCh0aGlzLl9zdG9yZS5zZWxlY3Qob2JqZWN0Rm9ybVNlbGVjdG9ycy5zZWxlY3RDYW5FZGl0T2JqZWN0KVxyXG4gICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgdGhpcy5fY2FuRWRpdE9iamVjdCA9IHJlc3VsdDtcclxuICAgICAgICB0aGlzLl9kZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH0pKTtcclxuXHJcbiAgICBpZiAodGhpcy52YWx1ZU1vZGUgPT09ICdhdXRvJykge1xyXG4gICAgICB0aGlzLl9pbml0U3Vic2NyaXB0aW9uRm9yVmFsdWUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucyQuZm9yRWFjaCgoc3Vic2NyaXB0aW9uKSA9PiBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSk7XHJcbiAgfVxyXG5cclxuICBnZXQgYXV0b3NhdmVGaWVsZHMoKTogRmllbGRbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYXV0b1NhdmVTdG9yZS5maWVsZHMoKTtcclxuICB9XHJcblxyXG4gIGdldCBnZXRJbnZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuX2lzQ2hlY2tSZXF1aXJlZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5vcHRpb25zLnJlcXVpcmVkICYmICF0aGlzLl9yZXF1aXJlZFZhbGlkYXRlKHRoaXMubW9kZWwudmFsdWVUeXBlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBnZXRJbnZhbGlkTWVzc2FnZSgpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMuX2lzQ2hlY2tSZXF1aXJlZCkge1xyXG4gICAgICByZXR1cm4gJ9Cf0L7Qu9C1INC+0LHRj9C30LDRgtC10LvRjNC90L4g0LTQu9GPINC30LDQv9C+0LvQvdC10L3QuNGPJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnNldHRpbmdzLm9wdGlvbnMuaXNBdXRvTG9hZGVkUHJvcGVydHkgfHwgIXRoaXMuX2NhbkVkaXRPYmplY3Q7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZXF1aXJlZFZhbGlkYXRlKHR5cGU6IFZhbHVlVHlwZSkge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgKFZhbHVlVHlwZS5TdHJpbmcpOlxyXG4gICAgICBjYXNlIChWYWx1ZVR5cGUuRGF0ZVRpbWUpOlxyXG4gICAgICAgIHJldHVybiAhIXRoaXMubW9kZWwudmFsdWU/LnRyaW0oKTtcclxuICAgICAgY2FzZSAoVmFsdWVUeXBlLkRlY2ltYWwpOlxyXG4gICAgICAgIHJldHVybiAhIXRoaXMubW9kZWwudmFsdWU7XHJcbiAgICAgIGNhc2UgKFZhbHVlVHlwZS5Cb29sZWFuKTpcclxuICAgICAgICByZXR1cm4gISF0aGlzLm1vZGVsLnZhbHVlO1xyXG4gICAgICBjYXNlIChWYWx1ZVR5cGUuU3RyaW5nQXJyYXkpOlxyXG4gICAgICBjYXNlIChWYWx1ZVR5cGUuR3VpZEFycmF5KTpcclxuICAgICAgICByZXR1cm4gISF0aGlzLm1vZGVsLnZhbHVlPy5sZW5ndGg7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgX2luaXRTdWJzY3JpcHRpb25Gb3JWYWx1ZSgpIHtcclxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMkLnB1c2godGhpcy5fc3RvcmUuc2VsZWN0KG9iamVjdEZvcm1TZWxlY3RvcnMuc2VsZWN0VmFsdWVNb2RlbCh0aGlzLnNldHRpbmdzKSlcclxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBDb21wb25lbnRWYWx1ZU1vZGVsIHwgbnVsbCB8IChDb21wb25lbnRWYWx1ZU1vZGVsIHwgbnVsbClbXSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShyZXN1bHQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwudmFsdWUgPSByZXN1bHQudmFsdWU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9jdXN0b21Jbml0KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgX3VwZGF0ZVZhbHVlKCkge1xyXG4gICAgdGhpcy5fY2hhbmdlU3ViamVjdCQubmV4dCh0aGlzLl90cmFuc2Zvcm1PdXRwdXRWYWx1ZSgpKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBfdHJhbnNmb3JtT3V0cHV0VmFsdWUoKTogQ29tcG9uZW50VmFsdWVNb2RlbCB8IENvbXBvbmVudFZhbHVlTW9kZWxbXSB7XHJcbiAgICByZXR1cm4gY2xvbmVEZWVwKHRoaXMubW9kZWwpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIF9jdXN0b21Nb2RlbE1vZGlmeShldmVudDogVE91dHB1dEV2ZW50KSB7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgX2N1c3RvbUluaXQoKSB7XHJcbiAgICB0aGlzLm1vZGVsID0gdGhpcy5tb2RlbCB8fCBkZWZhdWx0VmFsdWVNb2RlbCh0aGlzLnNldHRpbmdzKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBfY3VzdG9tVmFsaWRhdGUobW9kZWw6IENvbXBvbmVudFZhbHVlTW9kZWwpIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIF9pbml0TW9kZWwoKSB7XHJcbiAgICBpZiAodGhpcy52YWx1ZU1vZGUgPT09ICdtYW51YWwnKSB7XHJcbiAgICAgIHRoaXMubW9kZWwgPSBjbG9uZURlZXAoZ2V0VmFsdWVNb2RlbCh0aGlzLnNldHRpbmdzLCB0aGlzLm1hbnVhbFZhbHVlcykgYXMgQ29tcG9uZW50VmFsdWVNb2RlbCkgfHwgZGVmYXVsdFZhbHVlTW9kZWwodGhpcy5zZXR0aW5ncyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm1vZGVsID0gZGVmYXVsdFZhbHVlTW9kZWwodGhpcy5zZXR0aW5ncyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkaXNwYXRjaE1vZGlmeShldmVudDogVE91dHB1dEV2ZW50KSB7XHJcbiAgICB0aGlzLl9hdXRvU2F2ZVN0b3JlLmFkZElkKGV2ZW50LmlkKTtcclxuXHJcbiAgICB0aGlzLl9jdXN0b21Nb2RlbE1vZGlmeShldmVudCk7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLl91cGRhdGVWYWx1ZSgpKTtcclxuXHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
163
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9teXJ0ZXgtZm9ybS9zcmMvbGliL21vZHVsZXMvb2JqZWN0LWZvcm0vY29tcG9uZW50cy9lbGVtZW50cy9iYXNlL2Jhc2UtZmllbGQvYmFzZS1maWVsZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RILE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDcEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN0QyxPQUFPLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUV4RixPQUFPLEVBQUUsYUFBYSxFQUFTLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFJOUMsTUFBTSxPQUFnQixrQkFBa0I7SUFEeEM7UUFLWSxXQUFNLEdBQVUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLGNBQVMsR0FBc0IsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDekQsb0JBQWUsR0FBbUIsRUFBRSxDQUFDO1FBQ3JDLGFBQVEsR0FBVyxFQUFFLENBQUM7UUFDeEIsb0JBQWUsR0FBeUQsSUFBSSxPQUFP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IENoYW5nZURldGVjdG9yUmVmLCBFdmVudEVtaXR0ZXIsIGluamVjdCwgSW5qZWN0YWJsZSwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xyXG5pbXBvcnQgeyBjbG9uZURlZXAgfSBmcm9tICdsb2Rhc2gtZXMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRUeXBlLCBJbnB1dFN0YXRlLCBWYWx1ZVR5cGUgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zaGFyZWQtZm9ybS9lbnVtcyc7XHJcbmltcG9ydCB7IENvbXBvbmVudE1vZGVsQmFzZSwgU2VsZWN0TGlzdEl0ZW0gfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zaGFyZWQtZm9ybS9tb2RlbHMnO1xyXG5pbXBvcnQgeyBBdXRvU2F2ZVN0b3JlLCBGaWVsZCB9IGZyb20gJ0BteXJ0ZXgtb3JnL3VpJztcclxuaW1wb3J0IHsgQ29tcG9uZW50VmFsdWVNb2RlbCwgVmFsdWVNb2RlbCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscyc7XHJcbmltcG9ydCB7IGRlZmF1bHRWYWx1ZU1vZGVsLCBnZXRWYWx1ZU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vaGVscGVycyc7XHJcbmltcG9ydCB7IG9iamVjdEZvcm1TZWxlY3RvcnMgfSBmcm9tICcuLi8uLi8uLi8uLi9zdG9yZSc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgSW5wdXROdW1iZXJPcHRpb25zQmFzZSB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9lbGVtZXRzL2lucHV0cyc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlRmllbGRDb21wb25lbnQ8VE1vZGVsIGV4dGVuZHMgQ29tcG9uZW50TW9kZWxCYXNlLCBUT3V0cHV0RXZlbnQgZXh0ZW5kcyB7XHJcbiAgaWQ6IHN0cmluZyxcclxuICB2YWx1ZTogYW55XHJcbn0+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIHByb3RlY3RlZCBfc3RvcmU6IFN0b3JlID0gaW5qZWN0KFN0b3JlKTtcclxuICBwcm90ZWN0ZWQgX2RldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZiA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgcHJvdGVjdGVkIF9zdWJzY3JpcHRpb25zJDogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuICBwcm90ZWN0ZWQgb2JqZWN0SWQ6IHN0cmluZyA9ICcnO1xyXG4gIHByaXZhdGUgX2NoYW5nZVN1YmplY3QkOiBTdWJqZWN0PENvbXBvbmVudFZhbHVlTW9kZWwgfCBDb21wb25lbnRWYWx1ZU1vZGVsW10+ID0gbmV3IFN1YmplY3Q8Q29tcG9uZW50VmFsdWVNb2RlbCB8IENvbXBvbmVudFZhbHVlTW9kZWxbXT4oKTtcclxuXHJcbiAgcHJpdmF0ZSBfYXV0b1NhdmVTdG9yZSA9IGluamVjdChBdXRvU2F2ZVN0b3JlKTtcclxuICBwcm90ZWN0ZWQgX2lzQ2hlY2tSZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2NhbkVkaXRPYmplY3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHVibGljIG1vZGVsITogQ29tcG9uZW50VmFsdWVNb2RlbDtcclxuICBwdWJsaWMgc2V0dGluZ3MhOiBUTW9kZWw7XHJcbiAgcHVibGljIG1hbnVhbFZhbHVlczogVmFsdWVNb2RlbFtdID0gW107XHJcblxyXG4gIEBJbnB1dCgpIHNldCB2YWx1ZXModmFsdWU6IFZhbHVlTW9kZWxbXSkge1xyXG4gICAgaWYgKHRoaXMudmFsdWVNb2RlID09PSAnbWFudWFsJykge1xyXG4gICAgICB0aGlzLm1hbnVhbFZhbHVlcyA9IHZhbHVlO1xyXG5cclxuICAgICAgY29uc3QgaXNGb3JtdWxhSW5wdXROdW1iZXIgPVxyXG4gICAgICAgIHRoaXMuc2V0dGluZ3M/LnR5cGUgPT09IENvbXBvbmVudFR5cGUuSW5wdXROdW1iZXIgJiZcclxuICAgICAgICAodGhpcy5zZXR0aW5ncz8ub3B0aW9ucyBhcyBJbnB1dE51bWJlck9wdGlvbnNCYXNlKT8uaW5wdXRTdGF0ZSA9PT0gSW5wdXRTdGF0ZS5Gb3JtdWxhO1xyXG5cclxuICAgICAgaWYgKGlzRm9ybXVsYUlucHV0TnVtYmVyICYmIHRoaXMubW9kZWwpIHtcclxuICAgICAgICB0aGlzLm1vZGVsLnZhbHVlID0gKGdldFZhbHVlTW9kZWwodGhpcy5zZXR0aW5ncywgdGhpcy5tYW51YWxWYWx1ZXMpIGFzIENvbXBvbmVudFZhbHVlTW9kZWwpPy52YWx1ZTtcclxuICAgICAgICB0aGlzLl9kZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHZhbHVlTW9kZTogJ2F1dG8nIHwgJ21hbnVhbCcgPSAnYXV0byc7XHJcblxyXG4gIEBJbnB1dCgpIHNldCBkYXRhKHNldHRpbmdzOiBDb21wb25lbnRNb2RlbEJhc2UpIHtcclxuICAgIHRoaXMuc2V0dGluZ3MgPSBzZXR0aW5ncyBhcyBUTW9kZWw7XHJcblxyXG4gICAgdGhpcy5fY3VzdG9tSW5pdCgpO1xyXG5cclxuICAgIHRoaXMuX2RldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIEBPdXRwdXQoKSBwdWJsaWMgY2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Q29tcG9uZW50VmFsdWVNb2RlbCB8IENvbXBvbmVudFZhbHVlTW9kZWxbXT4oKTtcclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9pbml0TW9kZWwoKTtcclxuXHJcbiAgICB0aGlzLl9jaGFuZ2VTdWJqZWN0JFxyXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoNTAwKSlcclxuICAgICAgLnN1YnNjcmliZShtb2RlbCA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2N1c3RvbVZhbGlkYXRlKHRoaXMubW9kZWwpKSB7XHJcbiAgICAgICAgICB0aGlzLmNoYW5nZWQuZW1pdCh0aGlzLl90cmFuc2Zvcm1PdXRwdXRWYWx1ZSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMkLnB1c2godGhpcy5fc3RvcmUuc2VsZWN0KG9iamVjdEZvcm1TZWxlY3RvcnMuc2VsZWN0SXNDaGVja1JlcXVpcmVkKVxyXG4gICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgdGhpcy5faXNDaGVja1JlcXVpcmVkID0gcmVzdWx0O1xyXG4gICAgICAgIHRoaXMuX2RldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfSkpO1xyXG5cclxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMkLnB1c2godGhpcy5fc3RvcmUuc2VsZWN0KG9iamVjdEZvcm1TZWxlY3RvcnMuc2VsZWN0T2JqZWN0SWQpXHJcbiAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgICB0aGlzLm9iamVjdElkID0gcmVzdWx0OztcclxuICAgICAgfSkpO1xyXG5cclxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMkLnB1c2godGhpcy5fc3RvcmUuc2VsZWN0KG9iamVjdEZvcm1TZWxlY3RvcnMuc2VsZWN0Q2FuRWRpdE9iamVjdClcclxuICAgICAgLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICAgIHRoaXMuX2NhbkVkaXRPYmplY3QgPSByZXN1bHQ7XHJcbiAgICAgICAgdGhpcy5fZGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9KSk7XHJcblxyXG4gICAgaWYgKHRoaXMudmFsdWVNb2RlID09PSAnYXV0bycpIHtcclxuICAgICAgdGhpcy5faW5pdFN1YnNjcmlwdGlvbkZvclZhbHVlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMkLmZvckVhY2goKHN1YnNjcmlwdGlvbikgPT4gc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGF1dG9zYXZlRmllbGRzKCk6IEZpZWxkW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2F1dG9TYXZlU3RvcmUuZmllbGRzKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgZ2V0SW52YWxpZCgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLl9pc0NoZWNrUmVxdWlyZWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3Mub3B0aW9ucy5yZXF1aXJlZCAmJiAhdGhpcy5fcmVxdWlyZWRWYWxpZGF0ZSh0aGlzLm1vZGVsLnZhbHVlVHlwZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgZ2V0SW52YWxpZE1lc3NhZ2UoKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLl9pc0NoZWNrUmVxdWlyZWQpIHtcclxuICAgICAgcmV0dXJuICfQn9C+0LvQtSDQvtCx0Y/Qt9Cw0YLQtdC70YzQvdC+INC00LvRjyDQt9Cw0L/QvtC70L3QtdC90LjRjyc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5vcHRpb25zLmlzQXV0b0xvYWRlZFByb3BlcnR5IHx8ICF0aGlzLl9jYW5FZGl0T2JqZWN0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVxdWlyZWRWYWxpZGF0ZSh0eXBlOiBWYWx1ZVR5cGUpIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlIChWYWx1ZVR5cGUuU3RyaW5nKTpcclxuICAgICAgY2FzZSAoVmFsdWVUeXBlLkRhdGVUaW1lKTpcclxuICAgICAgICByZXR1cm4gISF0aGlzLm1vZGVsLnZhbHVlPy50cmltKCk7XHJcbiAgICAgIGNhc2UgKFZhbHVlVHlwZS5EZWNpbWFsKTpcclxuICAgICAgICByZXR1cm4gISF0aGlzLm1vZGVsLnZhbHVlO1xyXG4gICAgICBjYXNlIChWYWx1ZVR5cGUuQm9vbGVhbik6XHJcbiAgICAgICAgcmV0dXJuICEhdGhpcy5tb2RlbC52YWx1ZTtcclxuICAgICAgY2FzZSAoVmFsdWVUeXBlLlN0cmluZ0FycmF5KTpcclxuICAgICAgY2FzZSAoVmFsdWVUeXBlLkd1aWRBcnJheSk6XHJcbiAgICAgICAgcmV0dXJuICEhdGhpcy5tb2RlbC52YWx1ZT8ubGVuZ3RoO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIF9pbml0U3Vic2NyaXB0aW9uRm9yVmFsdWUoKSB7XHJcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zJC5wdXNoKHRoaXMuX3N0b3JlLnNlbGVjdChvYmplY3RGb3JtU2VsZWN0b3JzLnNlbGVjdFZhbHVlTW9kZWwodGhpcy5zZXR0aW5ncykpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogQ29tcG9uZW50VmFsdWVNb2RlbCB8IG51bGwgfCAoQ29tcG9uZW50VmFsdWVNb2RlbCB8IG51bGwpW10pID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVzdWx0KSkge1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsLnZhbHVlID0gcmVzdWx0LnZhbHVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fY3VzdG9tSW5pdCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIF91cGRhdGVWYWx1ZSgpIHtcclxuICAgIHRoaXMuX2NoYW5nZVN1YmplY3QkLm5leHQodGhpcy5fdHJhbnNmb3JtT3V0cHV0VmFsdWUoKSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgX3RyYW5zZm9ybU91dHB1dFZhbHVlKCk6IENvbXBvbmVudFZhbHVlTW9kZWwgfCBDb21wb25lbnRWYWx1ZU1vZGVsW10ge1xyXG4gICAgcmV0dXJuIGNsb25lRGVlcCh0aGlzLm1vZGVsKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBfY3VzdG9tTW9kZWxNb2RpZnkoZXZlbnQ6IFRPdXRwdXRFdmVudCkge1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIF9jdXN0b21Jbml0KCkge1xyXG4gICAgdGhpcy5tb2RlbCA9IHRoaXMubW9kZWwgfHwgZGVmYXVsdFZhbHVlTW9kZWwodGhpcy5zZXR0aW5ncyk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgX2N1c3RvbVZhbGlkYXRlKG1vZGVsOiBDb21wb25lbnRWYWx1ZU1vZGVsKSB7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBfaW5pdE1vZGVsKCkge1xyXG4gICAgaWYgKHRoaXMudmFsdWVNb2RlID09PSAnbWFudWFsJykge1xyXG4gICAgICB0aGlzLm1vZGVsID0gY2xvbmVEZWVwKGdldFZhbHVlTW9kZWwodGhpcy5zZXR0aW5ncywgdGhpcy5tYW51YWxWYWx1ZXMpIGFzIENvbXBvbmVudFZhbHVlTW9kZWwpIHx8IGRlZmF1bHRWYWx1ZU1vZGVsKHRoaXMuc2V0dGluZ3MpO1xyXG5cclxuICAgICAgdGhpcy5fY3VzdG9tSW5pdCgpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm1vZGVsID0gZGVmYXVsdFZhbHVlTW9kZWwodGhpcy5zZXR0aW5ncyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkaXNwYXRjaE1vZGlmeShldmVudDogVE91dHB1dEV2ZW50KSB7XHJcbiAgICB0aGlzLl9hdXRvU2F2ZVN0b3JlLmFkZElkKGV2ZW50LmlkKTtcclxuXHJcbiAgICB0aGlzLl9jdXN0b21Nb2RlbE1vZGlmeShldmVudCk7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLl91cGRhdGVWYWx1ZSgpKTtcclxuXHJcbiAgfVxyXG59XHJcbiJdfQ==
|
package/esm2022/lib/modules/object-form/components/elements/input/table/input-table.component.mjs
CHANGED
|
@@ -8,6 +8,8 @@ import { objectFormActions, objectFormSelectors } from '../../../../store';
|
|
|
8
8
|
import { ModalService } from '@myrtex-org/ui';
|
|
9
9
|
import { InputTableModalComponent } from './components';
|
|
10
10
|
import { getRowModel } from './helpers/get-row-model.helper';
|
|
11
|
+
import { ReferenceService } from '../../../../services/reference.service';
|
|
12
|
+
import CustomStore from 'devextreme/data/custom_store';
|
|
11
13
|
import * as i0 from "@angular/core";
|
|
12
14
|
import * as i1 from "@myrtex-org/ui";
|
|
13
15
|
import * as i2 from "devextreme-angular";
|
|
@@ -16,6 +18,8 @@ import * as i4 from "devextreme-angular/core";
|
|
|
16
18
|
export class InputTableComponent {
|
|
17
19
|
constructor() {
|
|
18
20
|
this.type = ComponentType.InputTable;
|
|
21
|
+
this._referenceService = inject(ReferenceService);
|
|
22
|
+
this._lookupsCache = new Map();
|
|
19
23
|
this._store = inject(Store);
|
|
20
24
|
this._detector = inject(ChangeDetectorRef);
|
|
21
25
|
this._modalService = inject(ModalService);
|
|
@@ -74,6 +78,9 @@ export class InputTableComponent {
|
|
|
74
78
|
this._subscriptions$.forEach((subscription) => subscription.unsubscribe());
|
|
75
79
|
}
|
|
76
80
|
createRow() {
|
|
81
|
+
if (this.disabled) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
77
84
|
this._modalService.open(InputTableModalComponent, {
|
|
78
85
|
title: 'Создание строки',
|
|
79
86
|
okText: 'Создать',
|
|
@@ -89,6 +96,9 @@ export class InputTableComponent {
|
|
|
89
96
|
});
|
|
90
97
|
}
|
|
91
98
|
deleteRow(event) {
|
|
99
|
+
if (this.disabled) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
92
102
|
const findRow = this._rows.find(item => item.id === event.row.data.id);
|
|
93
103
|
if (findRow) {
|
|
94
104
|
this._rows = this._rows.filter(item => item.id !== event.row.data.id);
|
|
@@ -138,6 +148,8 @@ export class InputTableComponent {
|
|
|
138
148
|
switch (component.type) {
|
|
139
149
|
case ComponentType.InputDate:
|
|
140
150
|
return 'date';
|
|
151
|
+
case ComponentType.InputSwitch:
|
|
152
|
+
return 'boolean';
|
|
141
153
|
default:
|
|
142
154
|
return 'string';
|
|
143
155
|
}
|
|
@@ -199,6 +211,7 @@ export class InputTableComponent {
|
|
|
199
211
|
this._detector.detectChanges();
|
|
200
212
|
}
|
|
201
213
|
_transformColumn(component) {
|
|
214
|
+
const dataType = this.getDataType(component);
|
|
202
215
|
const column = {
|
|
203
216
|
caption: component.options.label || '',
|
|
204
217
|
columns: component.components.map(c => this._transformColumn(structuredClone(c))),
|
|
@@ -207,9 +220,10 @@ export class InputTableComponent {
|
|
|
207
220
|
format: this.getFormat(component),
|
|
208
221
|
minWidth: 160
|
|
209
222
|
};
|
|
210
|
-
if (
|
|
223
|
+
if (dataType === 'boolean') {
|
|
211
224
|
column.calculateCellValue = (rowData) => {
|
|
212
225
|
const value = rowData[component.sysName];
|
|
226
|
+
// Если true — Да, если false, "" или null — Нет
|
|
213
227
|
return !!value;
|
|
214
228
|
};
|
|
215
229
|
column.lookup = {
|
|
@@ -221,6 +235,29 @@ export class InputTableComponent {
|
|
|
221
235
|
displayExpr: 'displayValue'
|
|
222
236
|
};
|
|
223
237
|
}
|
|
238
|
+
if (component.type === ComponentType.InputSelect) {
|
|
239
|
+
const selectModel = component;
|
|
240
|
+
if (selectModel.options.manual) {
|
|
241
|
+
column.lookup = {
|
|
242
|
+
dataSource: selectModel.options.items,
|
|
243
|
+
valueExpr: 'value',
|
|
244
|
+
displayExpr: 'text'
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
else if (selectModel.options.directory?.[0]) {
|
|
248
|
+
const directoryName = selectModel.options.directory[0];
|
|
249
|
+
column.lookup = {
|
|
250
|
+
// Оборачиваем в CustomStore для соответствия типам DevExtreme
|
|
251
|
+
dataSource: new CustomStore({
|
|
252
|
+
key: 'value',
|
|
253
|
+
load: () => this.getLookupData(directoryName),
|
|
254
|
+
byKey: (key) => this.getLookupData(directoryName).then(items => items.find(i => i.value === key))
|
|
255
|
+
}),
|
|
256
|
+
valueExpr: 'value',
|
|
257
|
+
displayExpr: 'text'
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
}
|
|
224
261
|
if (this.settings.options.groups.length) {
|
|
225
262
|
const findIdx = this.settings.options.groups.findIndex(x => x === component.sysName);
|
|
226
263
|
if (findIdx !== -1) {
|
|
@@ -229,6 +266,27 @@ export class InputTableComponent {
|
|
|
229
266
|
}
|
|
230
267
|
return column;
|
|
231
268
|
}
|
|
269
|
+
getLookupData(directoryName) {
|
|
270
|
+
// Проверяем кэш
|
|
271
|
+
if (this._lookupsCache.has(directoryName)) {
|
|
272
|
+
return Promise.resolve(this._lookupsCache.get(directoryName));
|
|
273
|
+
}
|
|
274
|
+
// Запрашиваем данные (используем тот же objectId, что и в модалке)
|
|
275
|
+
// Убедитесь, что objectId доступен в этом компоненте
|
|
276
|
+
return new Promise((resolve) => {
|
|
277
|
+
this._referenceService.getReferences(directoryName, this.objectId).subscribe({
|
|
278
|
+
next: (result) => {
|
|
279
|
+
const items = (result?.rows || []).map((row) => ({
|
|
280
|
+
value: row.a,
|
|
281
|
+
text: row.b
|
|
282
|
+
}));
|
|
283
|
+
this._lookupsCache.set(directoryName, items);
|
|
284
|
+
resolve(items);
|
|
285
|
+
},
|
|
286
|
+
error: () => resolve([])
|
|
287
|
+
});
|
|
288
|
+
});
|
|
289
|
+
}
|
|
232
290
|
_buildTableValueModel() {
|
|
233
291
|
const groupedData = this._buildGroupedItems(this._rows, this.settings.options.groups || [], 0);
|
|
234
292
|
const totals = this._calculateTotals(this._rows);
|
|
@@ -345,11 +403,11 @@ export class InputTableComponent {
|
|
|
345
403
|
return typeof maybeRow.id === 'string' && Array.isArray(maybeRow.data);
|
|
346
404
|
}
|
|
347
405
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: InputTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
348
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: InputTableComponent, selector: "app-input-table", inputs: { values: "values", data: "data" }, outputs: { changed: "changed" }, viewQueries: [{ propertyName: "dataGrid", first: true, predicate: ["dataGrid"], descendants: true }, { propertyName: "editTemplate", first: true, predicate: ["editTemplate"], descendants: true }], ngImport: i0, template: "@if (settings) {\r\n <div class=\"input-table-content w-100\">\r\n @if (settings.options.label) {\r\n <mrx-label\r\n [required]=\"settings.options.required\"\r\n [tooltip]=\"settings.options.tooltip || ''\"\r\n >\r\n {{ settings.options.label }}\r\n </mrx-label>\r\n }\r\n\r\n <dx-data-grid\r\n #dataGrid\r\n [dataSource]=\"dataSource\"\r\n [columns]=\"columns\"\r\n [disabled]=\"disabled\"\r\n noDataText=\"\u041D\u0435\u0442 \u0434\u0430\u043D\u043D\u044B\u0445\"\r\n style=\"width: 100%\"\r\n [wordWrapEnabled]=\"true\"\r\n [columnAutoWidth]=\"true\"\r\n [class.noData]=\"isRedNoData\"\r\n >\r\n <dxo-toolbar>\r\n <dxi-item location=\"after\">\r\n <div *dxTemplate class=\"add-row\">\r\n <mrx-button\r\n [size]=\"'medium'\"\r\n [type]=\"'secondary'\"\r\n [customClasses]=\"'mb-3'\"\r\n (mrxClick)=\"createRow()\"\r\n >{{settings.options.addBtnTitle}}\r\n </mrx-button>\r\n </div>\r\n </dxi-item>\r\n </dxo-toolbar>\r\n\r\n <div *dxTemplate=\"let buttonData of 'editButtonTemplate'\">\r\n <span class=\"mrx-icon icon-edit icon-font-16 cursor-pointer\" (click)=\"editRow(buttonData)\"></span>\r\n </div>\r\n\r\n <div *dxTemplate=\"let buttonData of 'deleteButtonTemplate'\">\r\n <span class=\"mrx-icon icon-delete icon-font-16 cursor-pointer\" (click)=\"deleteRow(buttonData)\"></span>\r\n </div>\r\n\r\n @if (dataSource.length) {\r\n <dxo-summary>\r\n @for (component of settings.components; track component.id; let first = $first) {\r\n @if (!first) {\r\n @if (showTotal(component)) {\r\n <dxi-group-item\r\n [column]=\"component.sysName\"\r\n summaryType=\"sum\"\r\n displayFormat=\"\u0418\u0442\u043E\u0433\u043E: {0}\"\r\n [showInGroupFooter]=\"true\"\r\n [alignByColumn]=\"true\">\r\n </dxi-group-item>\r\n\r\n <dxi-total-item \r\n [column]=\"component.sysName\" \r\n displayFormat=\"{0}\"\r\n summaryType=\"sum\"\r\n ></dxi-total-item>\r\n }\r\n\r\n @for (component of component.components; track component.id) {\r\n @if (showTotal(component)) {\r\n <dxi-group-item\r\n [column]=\"component.sysName\"\r\n summaryType=\"sum\"\r\n displayFormat=\"\u0418\u0442\u043E\u0433\u043E: {0}\"\r\n [showInGroupFooter]=\"true\"\r\n [alignByColumn]=\"true\">\r\n </dxi-group-item>\r\n }\r\n\r\n @for (component of component.components; track component.id) {\r\n @if (showTotal(component)) {\r\n <dxi-group-item\r\n [column]=\"component.sysName\"\r\n summaryType=\"sum\"\r\n displayFormat=\"\u0418\u0442\u043E\u0433\u043E: {0}\"\r\n [showInGroupFooter]=\"true\"\r\n [alignByColumn]=\"true\">\r\n </dxi-group-item>\r\n }\r\n }\r\n }\r\n } @else {\r\n @if (hasAnyTotal) { \r\n <dxi-total-item\r\n [column]=\"component.sysName\"\r\n [cssClass]=\"'text-bold'\"\r\n [displayFormat]=\"showTotal(component) ? '{0}' : '\u0418\u0422\u041E\u0413\u041E'\"\r\n [summaryType]=\"showTotal(component) ? 'sum' : undefined\"\r\n ></dxi-total-item>\r\n }\r\n }\r\n }\r\n </dxo-summary>\r\n }\r\n </dx-data-grid>\r\n\r\n @if(!!settings.options.maxRows) {\r\n <mrx-hint-error-message\r\n message=\"\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u043E\u0435 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0441\u0442\u0440\u043E\u043A: {{ settings.options.maxRows }}\"\r\n [maxValue]=\"settings.options.maxRows\"\r\n [value]=\"rowsCount\"\r\n ></mrx-hint-error-message>\r\n }\r\n\r\n <ng-template #editTemplate let-cellInfo=\"cellInfo\">\r\n <div class=\"d-flex align-items-center justify-content-center\" style=\"gap: 4px\">\r\n <span class=\"mrx-icon icon-edit icon-font-16 cursor-pointer\" (click)=\"editRow(cellInfo)\"></span>\r\n <span class=\"mrx-icon icon-delete icon-font-16 cursor-pointer\" (click)=\"deleteRow(cellInfo)\"></span>\r\n </div>\r\n </ng-template>\r\n </div>\r\n}\r\n\r\n\r\n", styles: [":host::ng-deep .input-table-content .noData .dx-datagrid-nodata{color:var(--system-text-negative, #8E2100)}:host::ng-deep .input-table-content .dx-datagrid{padding:0}:host::ng-deep .input-table-content .dx-datagrid-header-panel{display:flex;align-items:center;min-height:40px;padding:0}:host::ng-deep .input-table-content .dx-datagrid-rowsview{border-bottom:none}:host::ng-deep .input-table-content .dx-datagrid-rowsview.dx-empty{border-bottom:1px solid #ddd;height:48px}:host::ng-deep .input-table-content .dx-datagrid .dx-datagrid-total-footer{border-top:none;border-left:none;border-right:none}:host::ng-deep .input-table-content .dx-datagrid .dx-datagrid-total-footer .dx-datagrid-content{padding:0}:host::ng-deep .input-table-content .dx-datagrid .dx-datagrid-total-footer .dx-datagrid-content table,:host::ng-deep .input-table-content .dx-datagrid .dx-datagrid-total-footer .dx-datagrid-content th,:host::ng-deep .input-table-content .dx-datagrid .dx-datagrid-total-footer .dx-datagrid-content td{border:1px solid #ddd;border-top:none;border-collapse:collapse}:host::ng-deep .input-table-content .dx-datagrid .dx-datagrid-total-footer .dx-datagrid-content table{border-top:none}:host::ng-deep .input-table-content .dx-datagrid .dx-datagrid-total-footer .dx-datagrid-content .dx-datagrid-summary-item{font-weight:400}:host::ng-deep .input-table-content .dx-datagrid .dx-datagrid-headers{position:relative;top:0;border-top:1px solid var(--neutral-bg-divider)}:host::ng-deep .input-table-content .dx-datagrid .dx-datagrid-headers td.dx-command-expand.dx-datagrid-group-space{border-right:none!important;border-right-color:transparent}:host::ng-deep .input-table-content .dx-datagrid .dx-datagrid-total-footer td.dx-command-expand.dx-datagrid-group-space{border-right-color:transparent}:host::ng-deep .input-table-content .dx-datagrid .dx-row>td,:host::ng-deep .input-table-content .dx-datagrid .page-wrapper .dx-treelist-container .dx-row>td{color:var(--neutral-text-secondary, #4D5157);font-family:var(--body-md-bold-font-family, \"PT Sans\");font-size:var(--body-md-bold-font-size, 14px);font-weight:var(--body-md-bold-font-weight, 700);line-height:var(--body-md-bold-line-height, 16px)}:host::ng-deep .input-table-content .dx-datagrid .dx-row.dx-data-row.dx-column-lines>td{color:var(--neutral-text-tertiary, #71767E);font-family:var(--body-md-font-family, \"PT Sans\");font-size:var(--body-md-font-size, 14px);font-weight:var(--body-md-font-weight, 400);line-height:var(--body-md-line-height, 20px)}:host::ng-deep .custom-cell-controls .dx-template-wrapper{display:inline-flex}\n"], dependencies: [{ kind: "component", type: i1.LabelComponent, selector: "mrx-label", inputs: ["requiredHidden", "required", "boldLabel", "disabled", "placeholder", "label", "customClasses", "triggerTextPosition", "isPublicInfo", "publicInfoTooltip", "isSwitch", "switchLabel", "switchValue", "switchSize", "isCheckbox", "checkboxLabel", "checkboxValue", "counter", "linkText", "linkPrevent", "linkType", "linkMonochrome", "href", "triggerType", "tooltip", "tooltipInitialVisible", "isSaveToStorage"], outputs: ["changeSwitchValue", "changeCheckboxValue", "clickedLink"] }, { kind: "component", type: i1.ButtonComponent, selector: "mrx-button", inputs: ["size", "type", "color", "iconPosition", "active", "disabled", "isLoading", "iconOnly", "customClasses", "label", "icon", "iconClass", "buttonType", "href", "target", "routerLink", "queryParams"], outputs: ["mrxClick"] }, { kind: "component", type: i2.DxDataGridComponent, selector: "dx-data-grid", inputs: ["accessKey", "activeStateEnabled", "allowColumnReordering", "allowColumnResizing", "autoNavigateToFocusedRow", "cacheEnabled", "cellHintEnabled", "columnAutoWidth", "columnChooser", "columnFixing", "columnHidingEnabled", "columnMinWidth", "columnResizingMode", "columns", "columnWidth", "customizeColumns", "dataRowTemplate", "dataSource", "dateSerializationFormat", "disabled", "editing", "elementAttr", "errorRowEnabled", "export", "filterBuilder", "filterBuilderPopup", "filterPanel", "filterRow", "filterSyncEnabled", "filterValue", "focusedColumnIndex", "focusedRowEnabled", "focusedRowIndex", "focusedRowKey", "grouping", "groupPanel", "headerFilter", "height", "highlightChanges", "hint", "hoverStateEnabled", "keyboardNavigation", "keyExpr", "loadPanel", "masterDetail", "noDataText", "pager", "paging", "remoteOperations", "renderAsync", "repaintChangesOnly", "rowAlternationEnabled", "rowDragging", "rowTemplate", "rtlEnabled", "scrolling", "searchPanel", "selectedRowKeys", "selection", "selectionFilter", "showBorders", "showColumnHeaders", "showColumnLines", "showRowLines", "sortByGroupSummaryInfo", "sorting", "stateStoring", "summary", "syncLookupFilterValues", "tabIndex", "toolbar", "twoWayBindingEnabled", "visible", "width", "wordWrapEnabled"], outputs: ["onAdaptiveDetailRowPreparing", "onCellClick", "onCellDblClick", "onCellHoverChanged", "onCellPrepared", "onContentReady", "onContextMenuPreparing", "onDataErrorOccurred", "onDisposing", "onEditCanceled", "onEditCanceling", "onEditingStart", "onEditorPrepared", "onEditorPreparing", "onExporting", "onFocusedCellChanged", "onFocusedCellChanging", "onFocusedRowChanged", "onFocusedRowChanging", "onInitialized", "onInitNewRow", "onKeyDown", "onOptionChanged", "onRowClick", "onRowCollapsed", "onRowCollapsing", "onRowDblClick", "onRowExpanded", "onRowExpanding", "onRowInserted", "onRowInserting", "onRowPrepared", "onRowRemoved", "onRowRemoving", "onRowUpdated", "onRowUpdating", "onRowValidating", "onSaved", "onSaving", "onSelectionChanged", "onToolbarPreparing", "accessKeyChange", "activeStateEnabledChange", "allowColumnReorderingChange", "allowColumnResizingChange", "autoNavigateToFocusedRowChange", "cacheEnabledChange", "cellHintEnabledChange", "columnAutoWidthChange", "columnChooserChange", "columnFixingChange", "columnHidingEnabledChange", "columnMinWidthChange", "columnResizingModeChange", "columnsChange", "columnWidthChange", "customizeColumnsChange", "dataRowTemplateChange", "dataSourceChange", "dateSerializationFormatChange", "disabledChange", "editingChange", "elementAttrChange", "errorRowEnabledChange", "exportChange", "filterBuilderChange", "filterBuilderPopupChange", "filterPanelChange", "filterRowChange", "filterSyncEnabledChange", "filterValueChange", "focusedColumnIndexChange", "focusedRowEnabledChange", "focusedRowIndexChange", "focusedRowKeyChange", "groupingChange", "groupPanelChange", "headerFilterChange", "heightChange", "highlightChangesChange", "hintChange", "hoverStateEnabledChange", "keyboardNavigationChange", "keyExprChange", "loadPanelChange", "masterDetailChange", "noDataTextChange", "pagerChange", "pagingChange", "remoteOperationsChange", "renderAsyncChange", "repaintChangesOnlyChange", "rowAlternationEnabledChange", "rowDraggingChange", "rowTemplateChange", "rtlEnabledChange", "scrollingChange", "searchPanelChange", "selectedRowKeysChange", "selectionChange", "selectionFilterChange", "showBordersChange", "showColumnHeadersChange", "showColumnLinesChange", "showRowLinesChange", "sortByGroupSummaryInfoChange", "sortingChange", "stateStoringChange", "summaryChange", "syncLookupFilterValuesChange", "tabIndexChange", "toolbarChange", "twoWayBindingEnabledChange", "visibleChange", "widthChange", "wordWrapEnabledChange"] }, { kind: "component", type: i3.DxiItemComponent, selector: "dxi-item", inputs: ["disabled", "html", "icon", "template", "text", "title", "titleTemplate", "visible", "onClick", "stylingMode", "type", "baseSize", "box", "ratio", "shrink", "elementAttr", "hint", "beginGroup", "closeMenuOnClick", "items", "selectable", "selected", "colSpan", "cssClass", "dataField", "editorOptions", "editorType", "helpText", "isRequired", "itemType", "label", "name", "validationRules", "visibleIndex", "alignItemLabels", "caption", "colCount", "colCountByScreen", "tabPanelOptions", "tabs", "badge", "tabTemplate", "buttonOptions", "horizontalAlignment", "verticalAlignment", "locateInMenu", "location", "menuItemTemplate", "options", "showText", "widget", "height", "width", "imageAlt", "imageSrc", "acceptedValues", "formatName", "formatValues", "key", "showChevron", "linkAttr", "url", "heightRatio", "widthRatio", "expanded", "hasItems", "id", "parentId"] }, { kind: "component", type: i3.DxoSummaryComponent, selector: "dxo-summary", inputs: ["calculateCustomSummary", "groupItems", "recalculateWhileEditing", "skipEmptyValues", "texts", "totalItems"] }, { kind: "component", type: i3.DxiGroupItemComponent, selector: "dxi-group-item", inputs: ["alignByColumn", "column", "customizeText", "displayFormat", "name", "showInColumn", "showInGroupFooter", "skipEmptyValues", "summaryType", "valueFormat"] }, { kind: "component", type: i3.DxiTotalItemComponent, selector: "dxi-total-item", inputs: ["alignment", "column", "cssClass", "customizeText", "displayFormat", "name", "showInColumn", "skipEmptyValues", "summaryType", "valueFormat"] }, { kind: "component", type: i3.DxoToolbarComponent, selector: "dxo-toolbar", inputs: ["disabled", "items", "visible", "fileSelectionItems", "container", "multiline"] }, { kind: "directive", type: i4.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }, { kind: "component", type: i1.HintErrorMessageComponent, selector: "mrx-hint-error-message", inputs: ["message", "value", "maxValue", "minValue", "minLength", "maxLength", "checkInvalid"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
406
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: InputTableComponent, selector: "app-input-table", inputs: { values: "values", data: "data" }, outputs: { changed: "changed" }, viewQueries: [{ propertyName: "dataGrid", first: true, predicate: ["dataGrid"], descendants: true }, { propertyName: "editTemplate", first: true, predicate: ["editTemplate"], descendants: true }], ngImport: i0, template: "@if (settings) {\r\n <div class=\"input-table-content w-100\">\r\n @if (settings.options.label) {\r\n <mrx-label\r\n [required]=\"settings.options.required\"\r\n [tooltip]=\"settings.options.tooltip || ''\"\r\n >\r\n {{ settings.options.label }}\r\n </mrx-label>\r\n }\r\n\r\n <dx-data-grid\r\n #dataGrid\r\n [dataSource]=\"dataSource\"\r\n [columns]=\"columns\"\r\n noDataText=\"\u041D\u0435\u0442 \u0434\u0430\u043D\u043D\u044B\u0445\"\r\n style=\"width: 100%\"\r\n [wordWrapEnabled]=\"true\"\r\n [columnAutoWidth]=\"true\"\r\n [class.noData]=\"isRedNoData\"\r\n >\r\n @if(disabled) {\r\n <dxo-toolbar>\r\n <dxi-item location=\"after\">\r\n <div *dxTemplate class=\"add-row\">\r\n <mrx-button\r\n [size]=\"'medium'\"\r\n [type]=\"'secondary'\"\r\n [customClasses]=\"'mb-3'\"\r\n (mrxClick)=\"createRow()\"\r\n >{{settings.options.addBtnTitle}}\r\n </mrx-button>\r\n </div>\r\n </dxi-item>\r\n </dxo-toolbar>\r\n\r\n <div *dxTemplate=\"let buttonData of 'editButtonTemplate'\">\r\n <span class=\"mrx-icon icon-edit icon-font-16 cursor-pointer\" (click)=\"editRow(buttonData)\"></span>\r\n </div>\r\n\r\n <div *dxTemplate=\"let buttonData of 'deleteButtonTemplate'\">\r\n <span class=\"mrx-icon icon-delete icon-font-16 cursor-pointer\" (click)=\"deleteRow(buttonData)\"></span>\r\n </div>\r\n }\r\n\r\n @if (dataSource.length) {\r\n <dxo-summary>\r\n @for (component of settings.components; track component.id; let first = $first) {\r\n @if (!first) {\r\n @if (showTotal(component)) {\r\n <dxi-group-item\r\n [column]=\"component.sysName\"\r\n summaryType=\"sum\"\r\n displayFormat=\"\u0418\u0442\u043E\u0433\u043E: {0}\"\r\n [showInGroupFooter]=\"true\"\r\n [alignByColumn]=\"true\">\r\n </dxi-group-item>\r\n\r\n <dxi-total-item \r\n [column]=\"component.sysName\" \r\n displayFormat=\"{0}\"\r\n summaryType=\"sum\"\r\n ></dxi-total-item>\r\n }\r\n\r\n @for (component of component.components; track component.id) {\r\n @if (showTotal(component)) {\r\n <dxi-group-item\r\n [column]=\"component.sysName\"\r\n summaryType=\"sum\"\r\n displayFormat=\"\u0418\u0442\u043E\u0433\u043E: {0}\"\r\n [showInGroupFooter]=\"true\"\r\n [alignByColumn]=\"true\">\r\n </dxi-group-item>\r\n }\r\n\r\n @for (component of component.components; track component.id) {\r\n @if (showTotal(component)) {\r\n <dxi-group-item\r\n [column]=\"component.sysName\"\r\n summaryType=\"sum\"\r\n displayFormat=\"\u0418\u0442\u043E\u0433\u043E: {0}\"\r\n [showInGroupFooter]=\"true\"\r\n [alignByColumn]=\"true\">\r\n </dxi-group-item>\r\n }\r\n }\r\n }\r\n } @else {\r\n @if (hasAnyTotal) { \r\n <dxi-total-item\r\n [column]=\"component.sysName\"\r\n [cssClass]=\"'text-bold'\"\r\n [displayFormat]=\"showTotal(component) ? '{0}' : '\u0418\u0422\u041E\u0413\u041E'\"\r\n [summaryType]=\"showTotal(component) ? 'sum' : undefined\"\r\n ></dxi-total-item>\r\n }\r\n }\r\n }\r\n </dxo-summary>\r\n }\r\n </dx-data-grid>\r\n\r\n @if(!!settings.options.maxRows) {\r\n <mrx-hint-error-message\r\n message=\"\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u043E\u0435 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0441\u0442\u0440\u043E\u043A: {{ settings.options.maxRows }}\"\r\n [maxValue]=\"settings.options.maxRows\"\r\n [value]=\"rowsCount\"\r\n ></mrx-hint-error-message>\r\n }\r\n\r\n @if(disabled) {\r\n <ng-template #editTemplate let-cellInfo=\"cellInfo\">\r\n <div class=\"d-flex align-items-center justify-content-center\" style=\"gap: 4px\">\r\n <span class=\"mrx-icon icon-edit icon-font-16 cursor-pointer\" (click)=\"editRow(cellInfo)\"></span>\r\n <span class=\"mrx-icon icon-delete icon-font-16 cursor-pointer\" (click)=\"deleteRow(cellInfo)\"></span>\r\n </div>\r\n </ng-template>\r\n }\r\n </div>\r\n}\r\n\r\n\r\n", styles: [":host::ng-deep .input-table-content .noData .dx-datagrid-nodata{color:var(--system-text-negative, #8E2100)}:host::ng-deep .input-table-content .dx-datagrid{padding:0}:host::ng-deep .input-table-content .dx-datagrid-header-panel{display:flex;align-items:center;min-height:40px;padding:0}:host::ng-deep .input-table-content .dx-datagrid-rowsview{border-bottom:none}:host::ng-deep .input-table-content .dx-datagrid-rowsview.dx-empty{border-bottom:1px solid #ddd;height:48px}:host::ng-deep .input-table-content .dx-datagrid .dx-datagrid-total-footer{border-top:none;border-left:none;border-right:none}:host::ng-deep .input-table-content .dx-datagrid .dx-datagrid-total-footer .dx-datagrid-content{padding:0}:host::ng-deep .input-table-content .dx-datagrid .dx-datagrid-total-footer .dx-datagrid-content table,:host::ng-deep .input-table-content .dx-datagrid .dx-datagrid-total-footer .dx-datagrid-content th,:host::ng-deep .input-table-content .dx-datagrid .dx-datagrid-total-footer .dx-datagrid-content td{border:1px solid #ddd;border-top:none;border-collapse:collapse}:host::ng-deep .input-table-content .dx-datagrid .dx-datagrid-total-footer .dx-datagrid-content table{border-top:none}:host::ng-deep .input-table-content .dx-datagrid .dx-datagrid-total-footer .dx-datagrid-content .dx-datagrid-summary-item{font-weight:400}:host::ng-deep .input-table-content .dx-datagrid .dx-datagrid-headers{position:relative;top:0;border-top:1px solid var(--neutral-bg-divider)}:host::ng-deep .input-table-content .dx-datagrid .dx-datagrid-headers td.dx-command-expand.dx-datagrid-group-space{border-right:none!important;border-right-color:transparent}:host::ng-deep .input-table-content .dx-datagrid .dx-datagrid-total-footer td.dx-command-expand.dx-datagrid-group-space{border-right-color:transparent}:host::ng-deep .input-table-content .dx-datagrid .dx-row>td,:host::ng-deep .input-table-content .dx-datagrid .page-wrapper .dx-treelist-container .dx-row>td{color:var(--neutral-text-secondary, #4D5157);font-family:var(--body-md-bold-font-family, \"PT Sans\");font-size:var(--body-md-bold-font-size, 14px);font-weight:var(--body-md-bold-font-weight, 700);line-height:var(--body-md-bold-line-height, 16px)}:host::ng-deep .input-table-content .dx-datagrid .dx-row.dx-data-row.dx-column-lines>td{color:var(--neutral-text-tertiary, #71767E);font-family:var(--body-md-font-family, \"PT Sans\");font-size:var(--body-md-font-size, 14px);font-weight:var(--body-md-font-weight, 400);line-height:var(--body-md-line-height, 20px)}:host::ng-deep .custom-cell-controls .dx-template-wrapper{display:inline-flex}\n"], dependencies: [{ kind: "component", type: i1.LabelComponent, selector: "mrx-label", inputs: ["requiredHidden", "required", "boldLabel", "disabled", "placeholder", "label", "customClasses", "triggerTextPosition", "isPublicInfo", "publicInfoTooltip", "isSwitch", "switchLabel", "switchValue", "switchSize", "isCheckbox", "checkboxLabel", "checkboxValue", "counter", "linkText", "linkPrevent", "linkType", "linkMonochrome", "href", "triggerType", "tooltip", "tooltipInitialVisible", "isSaveToStorage"], outputs: ["changeSwitchValue", "changeCheckboxValue", "clickedLink"] }, { kind: "component", type: i1.ButtonComponent, selector: "mrx-button", inputs: ["size", "type", "color", "iconPosition", "active", "disabled", "isLoading", "iconOnly", "customClasses", "label", "icon", "iconClass", "buttonType", "href", "target", "routerLink", "queryParams"], outputs: ["mrxClick"] }, { kind: "component", type: i2.DxDataGridComponent, selector: "dx-data-grid", inputs: ["accessKey", "activeStateEnabled", "allowColumnReordering", "allowColumnResizing", "autoNavigateToFocusedRow", "cacheEnabled", "cellHintEnabled", "columnAutoWidth", "columnChooser", "columnFixing", "columnHidingEnabled", "columnMinWidth", "columnResizingMode", "columns", "columnWidth", "customizeColumns", "dataRowTemplate", "dataSource", "dateSerializationFormat", "disabled", "editing", "elementAttr", "errorRowEnabled", "export", "filterBuilder", "filterBuilderPopup", "filterPanel", "filterRow", "filterSyncEnabled", "filterValue", "focusedColumnIndex", "focusedRowEnabled", "focusedRowIndex", "focusedRowKey", "grouping", "groupPanel", "headerFilter", "height", "highlightChanges", "hint", "hoverStateEnabled", "keyboardNavigation", "keyExpr", "loadPanel", "masterDetail", "noDataText", "pager", "paging", "remoteOperations", "renderAsync", "repaintChangesOnly", "rowAlternationEnabled", "rowDragging", "rowTemplate", "rtlEnabled", "scrolling", "searchPanel", "selectedRowKeys", "selection", "selectionFilter", "showBorders", "showColumnHeaders", "showColumnLines", "showRowLines", "sortByGroupSummaryInfo", "sorting", "stateStoring", "summary", "syncLookupFilterValues", "tabIndex", "toolbar", "twoWayBindingEnabled", "visible", "width", "wordWrapEnabled"], outputs: ["onAdaptiveDetailRowPreparing", "onCellClick", "onCellDblClick", "onCellHoverChanged", "onCellPrepared", "onContentReady", "onContextMenuPreparing", "onDataErrorOccurred", "onDisposing", "onEditCanceled", "onEditCanceling", "onEditingStart", "onEditorPrepared", "onEditorPreparing", "onExporting", "onFocusedCellChanged", "onFocusedCellChanging", "onFocusedRowChanged", "onFocusedRowChanging", "onInitialized", "onInitNewRow", "onKeyDown", "onOptionChanged", "onRowClick", "onRowCollapsed", "onRowCollapsing", "onRowDblClick", "onRowExpanded", "onRowExpanding", "onRowInserted", "onRowInserting", "onRowPrepared", "onRowRemoved", "onRowRemoving", "onRowUpdated", "onRowUpdating", "onRowValidating", "onSaved", "onSaving", "onSelectionChanged", "onToolbarPreparing", "accessKeyChange", "activeStateEnabledChange", "allowColumnReorderingChange", "allowColumnResizingChange", "autoNavigateToFocusedRowChange", "cacheEnabledChange", "cellHintEnabledChange", "columnAutoWidthChange", "columnChooserChange", "columnFixingChange", "columnHidingEnabledChange", "columnMinWidthChange", "columnResizingModeChange", "columnsChange", "columnWidthChange", "customizeColumnsChange", "dataRowTemplateChange", "dataSourceChange", "dateSerializationFormatChange", "disabledChange", "editingChange", "elementAttrChange", "errorRowEnabledChange", "exportChange", "filterBuilderChange", "filterBuilderPopupChange", "filterPanelChange", "filterRowChange", "filterSyncEnabledChange", "filterValueChange", "focusedColumnIndexChange", "focusedRowEnabledChange", "focusedRowIndexChange", "focusedRowKeyChange", "groupingChange", "groupPanelChange", "headerFilterChange", "heightChange", "highlightChangesChange", "hintChange", "hoverStateEnabledChange", "keyboardNavigationChange", "keyExprChange", "loadPanelChange", "masterDetailChange", "noDataTextChange", "pagerChange", "pagingChange", "remoteOperationsChange", "renderAsyncChange", "repaintChangesOnlyChange", "rowAlternationEnabledChange", "rowDraggingChange", "rowTemplateChange", "rtlEnabledChange", "scrollingChange", "searchPanelChange", "selectedRowKeysChange", "selectionChange", "selectionFilterChange", "showBordersChange", "showColumnHeadersChange", "showColumnLinesChange", "showRowLinesChange", "sortByGroupSummaryInfoChange", "sortingChange", "stateStoringChange", "summaryChange", "syncLookupFilterValuesChange", "tabIndexChange", "toolbarChange", "twoWayBindingEnabledChange", "visibleChange", "widthChange", "wordWrapEnabledChange"] }, { kind: "component", type: i3.DxiItemComponent, selector: "dxi-item", inputs: ["disabled", "html", "icon", "template", "text", "title", "titleTemplate", "visible", "onClick", "stylingMode", "type", "baseSize", "box", "ratio", "shrink", "elementAttr", "hint", "beginGroup", "closeMenuOnClick", "items", "selectable", "selected", "colSpan", "cssClass", "dataField", "editorOptions", "editorType", "helpText", "isRequired", "itemType", "label", "name", "validationRules", "visibleIndex", "alignItemLabels", "caption", "colCount", "colCountByScreen", "tabPanelOptions", "tabs", "badge", "tabTemplate", "buttonOptions", "horizontalAlignment", "verticalAlignment", "locateInMenu", "location", "menuItemTemplate", "options", "showText", "widget", "height", "width", "imageAlt", "imageSrc", "acceptedValues", "formatName", "formatValues", "key", "showChevron", "linkAttr", "url", "heightRatio", "widthRatio", "expanded", "hasItems", "id", "parentId"] }, { kind: "component", type: i3.DxoSummaryComponent, selector: "dxo-summary", inputs: ["calculateCustomSummary", "groupItems", "recalculateWhileEditing", "skipEmptyValues", "texts", "totalItems"] }, { kind: "component", type: i3.DxiGroupItemComponent, selector: "dxi-group-item", inputs: ["alignByColumn", "column", "customizeText", "displayFormat", "name", "showInColumn", "showInGroupFooter", "skipEmptyValues", "summaryType", "valueFormat"] }, { kind: "component", type: i3.DxiTotalItemComponent, selector: "dxi-total-item", inputs: ["alignment", "column", "cssClass", "customizeText", "displayFormat", "name", "showInColumn", "skipEmptyValues", "summaryType", "valueFormat"] }, { kind: "component", type: i3.DxoToolbarComponent, selector: "dxo-toolbar", inputs: ["disabled", "items", "visible", "fileSelectionItems", "container", "multiline"] }, { kind: "directive", type: i4.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }, { kind: "component", type: i1.HintErrorMessageComponent, selector: "mrx-hint-error-message", inputs: ["message", "value", "maxValue", "minValue", "minLength", "maxLength", "checkInvalid"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
349
407
|
}
|
|
350
408
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: InputTableComponent, decorators: [{
|
|
351
409
|
type: Component,
|
|
352
|
-
args: [{ selector: 'app-input-table', changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (settings) {\r\n <div class=\"input-table-content w-100\">\r\n @if (settings.options.label) {\r\n <mrx-label\r\n [required]=\"settings.options.required\"\r\n [tooltip]=\"settings.options.tooltip || ''\"\r\n >\r\n {{ settings.options.label }}\r\n </mrx-label>\r\n }\r\n\r\n <dx-data-grid\r\n #dataGrid\r\n [dataSource]=\"dataSource\"\r\n [columns]=\"columns\"\r\n
|
|
410
|
+
args: [{ selector: 'app-input-table', changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (settings) {\r\n <div class=\"input-table-content w-100\">\r\n @if (settings.options.label) {\r\n <mrx-label\r\n [required]=\"settings.options.required\"\r\n [tooltip]=\"settings.options.tooltip || ''\"\r\n >\r\n {{ settings.options.label }}\r\n </mrx-label>\r\n }\r\n\r\n <dx-data-grid\r\n #dataGrid\r\n [dataSource]=\"dataSource\"\r\n [columns]=\"columns\"\r\n noDataText=\"\u041D\u0435\u0442 \u0434\u0430\u043D\u043D\u044B\u0445\"\r\n style=\"width: 100%\"\r\n [wordWrapEnabled]=\"true\"\r\n [columnAutoWidth]=\"true\"\r\n [class.noData]=\"isRedNoData\"\r\n >\r\n @if(disabled) {\r\n <dxo-toolbar>\r\n <dxi-item location=\"after\">\r\n <div *dxTemplate class=\"add-row\">\r\n <mrx-button\r\n [size]=\"'medium'\"\r\n [type]=\"'secondary'\"\r\n [customClasses]=\"'mb-3'\"\r\n (mrxClick)=\"createRow()\"\r\n >{{settings.options.addBtnTitle}}\r\n </mrx-button>\r\n </div>\r\n </dxi-item>\r\n </dxo-toolbar>\r\n\r\n <div *dxTemplate=\"let buttonData of 'editButtonTemplate'\">\r\n <span class=\"mrx-icon icon-edit icon-font-16 cursor-pointer\" (click)=\"editRow(buttonData)\"></span>\r\n </div>\r\n\r\n <div *dxTemplate=\"let buttonData of 'deleteButtonTemplate'\">\r\n <span class=\"mrx-icon icon-delete icon-font-16 cursor-pointer\" (click)=\"deleteRow(buttonData)\"></span>\r\n </div>\r\n }\r\n\r\n @if (dataSource.length) {\r\n <dxo-summary>\r\n @for (component of settings.components; track component.id; let first = $first) {\r\n @if (!first) {\r\n @if (showTotal(component)) {\r\n <dxi-group-item\r\n [column]=\"component.sysName\"\r\n summaryType=\"sum\"\r\n displayFormat=\"\u0418\u0442\u043E\u0433\u043E: {0}\"\r\n [showInGroupFooter]=\"true\"\r\n [alignByColumn]=\"true\">\r\n </dxi-group-item>\r\n\r\n <dxi-total-item \r\n [column]=\"component.sysName\" \r\n displayFormat=\"{0}\"\r\n summaryType=\"sum\"\r\n ></dxi-total-item>\r\n }\r\n\r\n @for (component of component.components; track component.id) {\r\n @if (showTotal(component)) {\r\n <dxi-group-item\r\n [column]=\"component.sysName\"\r\n summaryType=\"sum\"\r\n displayFormat=\"\u0418\u0442\u043E\u0433\u043E: {0}\"\r\n [showInGroupFooter]=\"true\"\r\n [alignByColumn]=\"true\">\r\n </dxi-group-item>\r\n }\r\n\r\n @for (component of component.components; track component.id) {\r\n @if (showTotal(component)) {\r\n <dxi-group-item\r\n [column]=\"component.sysName\"\r\n summaryType=\"sum\"\r\n displayFormat=\"\u0418\u0442\u043E\u0433\u043E: {0}\"\r\n [showInGroupFooter]=\"true\"\r\n [alignByColumn]=\"true\">\r\n </dxi-group-item>\r\n }\r\n }\r\n }\r\n } @else {\r\n @if (hasAnyTotal) { \r\n <dxi-total-item\r\n [column]=\"component.sysName\"\r\n [cssClass]=\"'text-bold'\"\r\n [displayFormat]=\"showTotal(component) ? '{0}' : '\u0418\u0422\u041E\u0413\u041E'\"\r\n [summaryType]=\"showTotal(component) ? 'sum' : undefined\"\r\n ></dxi-total-item>\r\n }\r\n }\r\n }\r\n </dxo-summary>\r\n }\r\n </dx-data-grid>\r\n\r\n @if(!!settings.options.maxRows) {\r\n <mrx-hint-error-message\r\n message=\"\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u043E\u0435 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0441\u0442\u0440\u043E\u043A: {{ settings.options.maxRows }}\"\r\n [maxValue]=\"settings.options.maxRows\"\r\n [value]=\"rowsCount\"\r\n ></mrx-hint-error-message>\r\n }\r\n\r\n @if(disabled) {\r\n <ng-template #editTemplate let-cellInfo=\"cellInfo\">\r\n <div class=\"d-flex align-items-center justify-content-center\" style=\"gap: 4px\">\r\n <span class=\"mrx-icon icon-edit icon-font-16 cursor-pointer\" (click)=\"editRow(cellInfo)\"></span>\r\n <span class=\"mrx-icon icon-delete icon-font-16 cursor-pointer\" (click)=\"deleteRow(cellInfo)\"></span>\r\n </div>\r\n </ng-template>\r\n }\r\n </div>\r\n}\r\n\r\n\r\n", styles: [":host::ng-deep .input-table-content .noData .dx-datagrid-nodata{color:var(--system-text-negative, #8E2100)}:host::ng-deep .input-table-content .dx-datagrid{padding:0}:host::ng-deep .input-table-content .dx-datagrid-header-panel{display:flex;align-items:center;min-height:40px;padding:0}:host::ng-deep .input-table-content .dx-datagrid-rowsview{border-bottom:none}:host::ng-deep .input-table-content .dx-datagrid-rowsview.dx-empty{border-bottom:1px solid #ddd;height:48px}:host::ng-deep .input-table-content .dx-datagrid .dx-datagrid-total-footer{border-top:none;border-left:none;border-right:none}:host::ng-deep .input-table-content .dx-datagrid .dx-datagrid-total-footer .dx-datagrid-content{padding:0}:host::ng-deep .input-table-content .dx-datagrid .dx-datagrid-total-footer .dx-datagrid-content table,:host::ng-deep .input-table-content .dx-datagrid .dx-datagrid-total-footer .dx-datagrid-content th,:host::ng-deep .input-table-content .dx-datagrid .dx-datagrid-total-footer .dx-datagrid-content td{border:1px solid #ddd;border-top:none;border-collapse:collapse}:host::ng-deep .input-table-content .dx-datagrid .dx-datagrid-total-footer .dx-datagrid-content table{border-top:none}:host::ng-deep .input-table-content .dx-datagrid .dx-datagrid-total-footer .dx-datagrid-content .dx-datagrid-summary-item{font-weight:400}:host::ng-deep .input-table-content .dx-datagrid .dx-datagrid-headers{position:relative;top:0;border-top:1px solid var(--neutral-bg-divider)}:host::ng-deep .input-table-content .dx-datagrid .dx-datagrid-headers td.dx-command-expand.dx-datagrid-group-space{border-right:none!important;border-right-color:transparent}:host::ng-deep .input-table-content .dx-datagrid .dx-datagrid-total-footer td.dx-command-expand.dx-datagrid-group-space{border-right-color:transparent}:host::ng-deep .input-table-content .dx-datagrid .dx-row>td,:host::ng-deep .input-table-content .dx-datagrid .page-wrapper .dx-treelist-container .dx-row>td{color:var(--neutral-text-secondary, #4D5157);font-family:var(--body-md-bold-font-family, \"PT Sans\");font-size:var(--body-md-bold-font-size, 14px);font-weight:var(--body-md-bold-font-weight, 700);line-height:var(--body-md-bold-line-height, 16px)}:host::ng-deep .input-table-content .dx-datagrid .dx-row.dx-data-row.dx-column-lines>td{color:var(--neutral-text-tertiary, #71767E);font-family:var(--body-md-font-family, \"PT Sans\");font-size:var(--body-md-font-size, 14px);font-weight:var(--body-md-font-weight, 400);line-height:var(--body-md-line-height, 20px)}:host::ng-deep .custom-cell-controls .dx-template-wrapper{display:inline-flex}\n"] }]
|
|
353
411
|
}], propDecorators: { values: [{
|
|
354
412
|
type: Input
|
|
355
413
|
}], data: [{
|
|
@@ -363,4 +421,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
363
421
|
}], changed: [{
|
|
364
422
|
type: Output
|
|
365
423
|
}] } });
|
|
366
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlydGV4LWZvcm0vc3JjL2xpYi9tb2R1bGVzL29iamVjdC1mb3JtL2NvbXBvbmVudHMvZWxlbWVudHMvaW5wdXQvdGFibGUvaW5wdXQtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlydGV4LWZvcm0vc3JjL2xpYi9tb2R1bGVzL29iamVjdC1mb3JtL2NvbXBvbmVudHMvZWxlbWVudHMvaW5wdXQvdGFibGUvaW5wdXQtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFBRSxNQUFNLEVBQ3BCLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDL0UsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVwQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFFN0MsT0FBTyxFQUtMLGFBQWEsRUFHZCxNQUFNLG9CQUFvQixDQUFDO0FBRTVCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDeEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOzs7Ozs7QUFTN0QsTUFBTSxPQUFPLG1CQUFtQjtJQU5oQztRQU9FLFNBQUksR0FBRyxhQUFhLENBQUMsVUFBVSxDQUFDO1FBRXhCLFdBQU0sR0FBVSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsY0FBUyxHQUFzQixNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUN6RCxrQkFBYSxHQUFpQixNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFbkQsb0JBQWUsR0FBNkIsSUFBSSxPQUFPLEVBQW1CLENBQUM7UUFDM0Usb0JBQWUsR0FBbUIsRUFBRSxDQUFDO1FBRXJDLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUNsQyxtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUNoQyxVQUFLLEdBQW9CLEVBQUUsQ0FBQztRQUk3QixlQUFVLEdBQTZCLEVBQUUsQ0FBQztRQUMxQyxZQUFPLEdBQWtCLEVBQUUsQ0FBQztRQUUxQixXQUFNLEdBQXdCLEVBQUUsQ0FBQztRQWdCekIsWUFBTyxHQUE4RCxJQUFJLFlBQVksRUFBK0MsQ0FBQztLQWtZdko7SUFoWkMsSUFBYSxJQUFJLENBQUMsUUFBNEI7UUFDNUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUEyQixDQUFDO1FBRTVDLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUMsQ0FBQztRQUNwRixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUVoQixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRS9CLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBT0QsSUFBVyxTQUFTO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUN2QyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUN4RSxDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQy9CLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRWxCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUN2QixZQUFZLENBQUMsR0FBRyxDQUFDLENBQ2xCLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxFQUFDLEtBQUssRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkUsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN6RyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDO1lBQy9CLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVKLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLG1CQUFtQixDQUFDO2FBQ2xGLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNsQixJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQztZQUM3QixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFTixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUYsU0FBUyxDQUFDLENBQUMsTUFBbUUsRUFBRSxFQUFFO1lBQ2pGLE1BQU0sV0FBVyxHQUFHLGVBQWUsQ0FBQyxNQUFnQyxDQUFDLENBQUM7WUFFdEUsSUFBSSxXQUFXLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDdkYsSUFBSSxDQUFDLEtBQUssR0FBRyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNoRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNuQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVNLFNBQVM7UUFDZCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRTtZQUNoRCxLQUFLLEVBQUUsaUJBQWlCO1lBQ3hCLE1BQU0sRUFBRSxTQUFTO1lBQ2pCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixRQUFRLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDcEMsZUFBZSxFQUFFLElBQUksQ0FBQyxnQkFBZ0I7U0FDdkMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNuQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDbkIsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBRWhFLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUVqQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDO1lBQzFELENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxTQUFTLENBQUMsS0FBVTtRQUN6QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFdkUsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBRXRFLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRWpDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUM7UUFDMUQsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDVixPQUFPLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM5QixDQUFDO0lBRU0sT0FBTyxDQUFDLEtBQVU7UUFDdkIsTUFBTSxPQUFPLEdBQThCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVsRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUU7Z0JBQ2hELEtBQUssRUFBRSx1QkFBdUI7Z0JBQzlCLE1BQU0sRUFBRSxXQUFXO2dCQUNuQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7Z0JBQ3ZCLFFBQVEsRUFBRSxPQUFPO2FBQ2xCLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ25DLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNuQixNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUM5QyxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUUxRSxJQUFJLFdBQVcsRUFBRSxDQUFDO3dCQUNoQixXQUFXLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO3dCQUV6QyxJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQzt3QkFDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBRWpDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUM7b0JBQzFELENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFTSxTQUFTLENBQUMsU0FBNkI7UUFDNUMsUUFBUSxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdkIsS0FBSyxhQUFhLENBQUMsU0FBUztnQkFDMUIsUUFBUyxTQUE0QixDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDdkQsS0FBSyxZQUFZLENBQUMsUUFBUTt3QkFDeEIsT0FBTyxrQkFBa0IsQ0FBQztvQkFDNUI7d0JBQ0UsT0FBTyxZQUFZLENBQUM7Z0JBQ3hCLENBQUM7WUFDSDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDO0lBRU0sV0FBVyxDQUFDLFNBQTZCO1FBQzlDLFFBQVEsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3ZCLEtBQUssYUFBYSxDQUFDLFNBQVM7Z0JBQzFCLE9BQU8sTUFBTSxDQUFDO1lBQ2hCO2dCQUNFLE9BQU8sUUFBUSxDQUFDO1FBQ3BCLENBQUM7SUFDSCxDQUFDO0lBRU0sU0FBUyxDQUFDLFNBQTZCO1FBQzVDLElBQUksU0FBUyxDQUFDLElBQUksS0FBSyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakQsTUFBTSxPQUFPLEdBQXFCLFNBQTZCLENBQUM7WUFFaEUsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUNsQyxDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU0sYUFBYSxDQUFDLFNBQTZCO1FBQ2hELE9BQVEsU0FBOEIsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO0lBQzFELENBQUM7SUFFTyxVQUFVO1FBQ2hCLElBQUksQ0FBQyxLQUFLLEdBQUc7WUFDWCxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPO1lBQzlCLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUk7WUFDeEIsSUFBSSxFQUFFLEVBQUU7WUFDUixNQUFNLEVBQUUsRUFBRTtTQUNYLENBQUM7UUFDRixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRU8sZUFBZSxDQUFDLElBQXFCO1FBQzNDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQW1CLEVBQUUsRUFBRTtZQUNqRCxNQUFNLFdBQVcsR0FBUSxFQUFFLENBQUM7WUFFNUIsS0FBSyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3hCLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQ3pELENBQUM7WUFFRCxXQUFXLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7WUFFekIsT0FBTyxXQUFXLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRS9CLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNuQyxDQUFDO0lBQ0gsQ0FBQztJQUVPLFlBQVksQ0FBQyxVQUFnQztRQUNuRCxJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU5RSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztZQUNoQixPQUFPLEVBQUUsRUFBRTtZQUNYLElBQUksRUFBRSxTQUFTO1lBQ2YsS0FBSyxFQUFFLEVBQUU7WUFDVCxRQUFRLEVBQUUsc0JBQXNCO1lBQ2hDLE9BQU8sRUFBRTtnQkFDUDtvQkFDRSxRQUFRLEVBQUUsb0JBQW9CO29CQUM5QixJQUFJLEVBQUUsZUFBZTtpQkFDdEI7Z0JBQ0Q7b0JBQ0UsUUFBUSxFQUFFLHNCQUFzQjtvQkFDaEMsSUFBSSxFQUFFLFNBQVM7aUJBQ2hCO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbkMsQ0FBQztRQUNELElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVPLGdCQUFnQixDQUFDLFNBQTZCO1FBQ3BELE1BQU0sTUFBTSxHQUFnQjtZQUMxQixPQUFPLEVBQUUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksRUFBRTtZQUN0QyxPQUFPLEVBQUUsU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakYsU0FBUyxFQUFFLFNBQVMsQ0FBQyxPQUFPO1lBQzVCLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQztZQUNyQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUM7WUFDakMsUUFBUSxFQUFFLEdBQUc7U0FDZCxDQUFBO1FBRUQsSUFBSSxNQUFNLENBQUMsUUFBUSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2xDLE1BQU0sQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLE9BQVksRUFBRSxFQUFFO2dCQUMzQyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN6QyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFDakIsQ0FBQyxDQUFDO1lBRUYsTUFBTSxDQUFDLE1BQU0sR0FBRztnQkFDZCxVQUFVLEVBQUU7b0JBQ1YsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUU7b0JBQ25DLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFO2lCQUN0QztnQkFDRCxTQUFTLEVBQUUsT0FBTztnQkFDbEIsV0FBVyxFQUFFLGNBQWM7YUFDNUIsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN4QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUVyRixJQUFJLE9BQU8sS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNuQixNQUFNLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQTtZQUM3QixDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFBO0lBQ2YsQ0FBQztJQUVPLHFCQUFxQjtRQUMzQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQy9GLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFakQsSUFBSSxDQUFDLEtBQUssR0FBRztZQUNYLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU87WUFDOUIsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSTtZQUN4QixJQUFJLEVBQUUsV0FBVztZQUNqQixNQUFNO1NBQ1AsQ0FBQztRQUVGLE9BQU8sZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRU8sa0JBQWtCLENBQUMsSUFBcUIsRUFBRSxXQUFxQixFQUFFLEtBQWE7UUFDcEYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLElBQUksS0FBSyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN2RCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsQ0FBQyxRQUFRLElBQUksYUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNwRixDQUFDO1FBRUQsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxFQUFnRSxDQUFDO1FBRXZGLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7WUFDdkIsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLFVBQVUsQ0FBQyxFQUFFLEtBQUssSUFBSSxJQUFJLENBQUM7WUFDL0UsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN2QyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJO2dCQUNsQyxJQUFJLEVBQUUsRUFBRTtnQkFDUixpQkFBaUIsRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQzthQUN0RSxDQUFDO1lBQ0YsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDeEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDNUIsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFnQixFQUFFLENBQUM7UUFFL0IsS0FBSyxNQUFNLFNBQVMsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztZQUN4QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ25GLE1BQU0sVUFBVSxHQUFvQjtnQkFDbEMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxLQUFLO2dCQUM3QixJQUFJLEVBQUUsVUFBVTtnQkFDaEIsTUFBTSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQzthQUMzRSxDQUFDO1lBRUYsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMxQixDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVPLGdCQUFnQixDQUFDLElBQXFCLEVBQUUsaUJBQTBCO1FBQ3hFLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRXJFLE9BQU8sWUFBWSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUNsQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFO2dCQUNuQyxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssQ0FBQztnQkFDekUsTUFBTSxZQUFZLEdBQUcsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFFdkUsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFDbEUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRU4sT0FBTztnQkFDTCxPQUFPLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsaUJBQWlCLENBQUM7Z0JBQ3BFLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSTtnQkFDcEIsU0FBUyxFQUFFLFNBQVMsQ0FBQyxTQUFTO2dCQUM5QixLQUFLLEVBQUUsR0FBRzthQUNZLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsYUFBcUIsRUFBRSxpQkFBMEI7UUFDeEUsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1lBQ3RCLE9BQU8sR0FBRyxhQUFhLElBQUksaUJBQWlCLFFBQVEsQ0FBQztRQUN2RCxDQUFDO1FBRUQsT0FBTyxHQUFHLGFBQWEsUUFBUSxDQUFDO0lBQ2xDLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxVQUFlLEVBQUUsZUFBdUI7UUFDcEUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNuRCxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakMsSUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLElBQUksT0FBTyxVQUFVLEtBQUssUUFBUSxJQUFJLE9BQU8sVUFBVSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUN4RyxPQUFPLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM1QixDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksVUFBVSxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ2pELElBQUksT0FBTyxVQUFVLENBQUMsS0FBSyxLQUFLLFFBQVEsSUFBSSxPQUFPLFVBQVUsQ0FBQyxLQUFLLEtBQUssUUFBUSxJQUFJLE9BQU8sVUFBVSxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDMUgsT0FBTyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2xDLENBQUM7WUFFRCxJQUFJLE9BQU8sVUFBVSxDQUFDLE9BQU8sS0FBSyxRQUFRLElBQUksVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNqRSxPQUFPLFVBQVUsQ0FBQyxPQUFPLENBQUM7WUFDNUIsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsSUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLElBQUksT0FBTyxVQUFVLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDeEcsT0FBTyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDNUIsQ0FBQztRQUVELE9BQU8sZUFBZSxDQUFDO0lBQ3pCLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxVQUFnQztRQUN2RCxNQUFNLE1BQU0sR0FBdUIsRUFBRSxDQUFDO1FBRXRDLEtBQUssTUFBTSxTQUFTLElBQUksVUFBVSxFQUFFLENBQUM7WUFDbkMsSUFBSSxTQUFTLENBQUMsSUFBSSxLQUFLLGFBQWEsQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO2dCQUM5RSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQTZCLENBQUMsQ0FBQztZQUM3QyxDQUFDO1lBRUQsSUFBSSxTQUFTLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxDQUFDO2dCQUNqQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQzlELENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVPLFlBQVksQ0FBQyxRQUFxQixFQUFFO1FBQzFDLE1BQU0sSUFBSSxHQUFvQixFQUFFLENBQUM7UUFFakMsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN6QixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQztvQkFDUixHQUFHLElBQUk7b0JBQ1AsUUFBUSxFQUFFLGFBQWEsQ0FBQyxHQUFHO2lCQUM1QixDQUFDLENBQUM7WUFDTCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxLQUFLLEdBQUcsSUFBdUIsQ0FBQztnQkFDdEMsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO29CQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDOUMsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU8sTUFBTSxDQUFDLElBQWU7UUFDNUIsTUFBTSxRQUFRLEdBQUcsSUFBcUIsQ0FBQztRQUN2QyxPQUFPLE9BQU8sUUFBUSxDQUFDLEVBQUUsS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekUsQ0FBQzsrR0FwYVUsbUJBQW1CO21HQUFuQixtQkFBbUIseVVDdkNoQyxndkpBd0hBOzs0RkRqRmEsbUJBQW1CO2tCQU4vQixTQUFTOytCQUNFLGlCQUFpQixtQkFHVix1QkFBdUIsQ0FBQyxNQUFNOzhCQXFCdEMsTUFBTTtzQkFBZCxLQUFLO2dCQUVPLElBQUk7c0JBQWhCLEtBQUs7Z0JBV2tDLFFBQVE7c0JBQS9DLFNBQVM7dUJBQUMsVUFBVSxFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQztnQkFDTSxZQUFZO3NCQUF2RCxTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUM7Z0JBRXpCLE9BQU87c0JBQXZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsIGluamVjdCxcclxuICBJbnB1dCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBWaWV3Q2hpbGRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50VHlwZSwgRGF0ZVR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc2hhcmVkLWZvcm0vZW51bXMnO1xyXG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50TW9kZWxCYXNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc2hhcmVkLWZvcm0vbW9kZWxzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgRHhEYXRhR3JpZENvbXBvbmVudCB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhcic7XHJcbmltcG9ydCB7XHJcbiAgQ29tcG9uZW50VmFsdWVNb2RlbCxcclxuICBTZWN0aW9uVmFsdWVNb2RlbCxcclxuICBUYWJsZUdyb3VwTW9kZWwsXHJcbiAgVGFibGVJdGVtLFxyXG4gIFRhYmxlSXRlbVR5cGUsXHJcbiAgVGFibGVSb3dNb2RlbCxcclxuICBUYWJsZVZhbHVlTW9kZWxcclxufSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBJbnB1dERhdGVNb2RlbCwgSW5wdXROdW1iZXJNb2RlbCwgSW5wdXRUYWJsZU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2VsZW1ldHMvaW5wdXRzJztcclxuaW1wb3J0IHsgb2JqZWN0Rm9ybUFjdGlvbnMsIG9iamVjdEZvcm1TZWxlY3RvcnMgfSBmcm9tICcuLi8uLi8uLi8uLi9zdG9yZSc7XHJcbmltcG9ydCB7IE1vZGFsU2VydmljZSB9IGZyb20gJ0BteXJ0ZXgtb3JnL3VpJztcclxuaW1wb3J0IHsgSW5wdXRUYWJsZU1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzJztcclxuaW1wb3J0IHsgZ2V0Um93TW9kZWwgfSBmcm9tICcuL2hlbHBlcnMvZ2V0LXJvdy1tb2RlbC5oZWxwZXInO1xyXG5pbXBvcnQgeyBDb2x1bW5Nb2RlbCB9IGZyb20gJy4vbW9kZWxzL2NvbHVtbi5tb2RlbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1pbnB1dC10YWJsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2lucHV0LXRhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9pbnB1dC10YWJsZS5jb21wb25lbnQubGVzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJbnB1dFRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIHR5cGUgPSBDb21wb25lbnRUeXBlLklucHV0VGFibGU7XHJcblxyXG4gIHByaXZhdGUgX3N0b3JlOiBTdG9yZSA9IGluamVjdChTdG9yZSk7XHJcbiAgcHJpdmF0ZSBfZGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcclxuICBwcml2YXRlIF9tb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSA9IGluamVjdChNb2RhbFNlcnZpY2UpO1xyXG5cclxuICBwcml2YXRlIF9jaGFuZ2VTdWJqZWN0JDogU3ViamVjdDxUYWJsZVZhbHVlTW9kZWw+ID0gbmV3IFN1YmplY3Q8VGFibGVWYWx1ZU1vZGVsPigpO1xyXG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbnMkOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG5cclxuICBwcml2YXRlIF9pc0NoZWNrUmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9jYW5FZGl0T2JqZWN0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfcm93czogVGFibGVSb3dNb2RlbFtdID0gW107XHJcblxyXG4gIHB1YmxpYyBtb2RlbCE6IFRhYmxlVmFsdWVNb2RlbDtcclxuICBwdWJsaWMgc2V0dGluZ3MhOiBJbnB1dFRhYmxlTW9kZWw7XHJcbiAgcHVibGljIGRhdGFTb3VyY2U6IHsgW2tleTogc3RyaW5nXTogYW55IH1bXSA9IFtdO1xyXG4gIHB1YmxpYyBjb2x1bW5zOiBDb2x1bW5Nb2RlbFtdID0gW107XHJcblxyXG4gIEBJbnB1dCgpIHZhbHVlczogU2VjdGlvblZhbHVlTW9kZWxbXSA9IFtdO1xyXG5cclxuICBASW5wdXQoKSBzZXQgZGF0YShzZXR0aW5nczogQ29tcG9uZW50TW9kZWxCYXNlKSB7XHJcbiAgICB0aGlzLnNldHRpbmdzID0gc2V0dGluZ3MgYXMgSW5wdXRUYWJsZU1vZGVsO1xyXG5cclxuICAgIHRoaXMubW9kZWwgPSB7c3lzTmFtZTogc2V0dGluZ3Muc3lzTmFtZSwgdHlwZTogc2V0dGluZ3MudHlwZSwgZGF0YTogW10sIHRvdGFsczogW119O1xyXG4gICAgdGhpcy5fcm93cyA9IFtdO1xyXG5cclxuICAgIHRoaXMuX2RldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICB0aGlzLl9pbml0Q29sdW1ucyh0aGlzLnNldHRpbmdzLmNvbXBvbmVudHMpO1xyXG4gIH1cclxuXHJcbiAgQFZpZXdDaGlsZCgnZGF0YUdyaWQnLCB7c3RhdGljOiBmYWxzZX0pIGRhdGFHcmlkITogRHhEYXRhR3JpZENvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKCdlZGl0VGVtcGxhdGUnLCB7c3RhdGljOiBmYWxzZX0pIGVkaXRUZW1wbGF0ZSE6IGFueTtcclxuXHJcbiAgQE91dHB1dCgpIHB1YmxpYyBjaGFuZ2VkOiBFdmVudEVtaXR0ZXI8Q29tcG9uZW50VmFsdWVNb2RlbCB8IENvbXBvbmVudFZhbHVlTW9kZWxbXT4gPSBuZXcgRXZlbnRFbWl0dGVyPENvbXBvbmVudFZhbHVlTW9kZWwgfCBDb21wb25lbnRWYWx1ZU1vZGVsW10+KCk7XHJcblxyXG4gIHB1YmxpYyBnZXQgcm93c0NvdW50KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fcm93cy5sZW5ndGggfHwgMDtcclxuICB9XHJcblxyXG4gIGdldCBoYXNBbnlUb3RhbCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnNldHRpbmdzLmNvbXBvbmVudHMuc29tZShjID0+XHJcbiAgICAgIHRoaXMuc2hvd1RvdGFsKGMpIHx8IGMuY29tcG9uZW50cz8uc29tZShpbm5lciA9PiB0aGlzLnNob3dUb3RhbChpbm5lcikpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzUmVkTm9EYXRhKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzQ2hlY2tSZXF1aXJlZDtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5faW5pdE1vZGVsKCk7XHJcblxyXG4gICAgdGhpcy5fY2hhbmdlU3ViamVjdCQucGlwZShcclxuICAgICAgZGVib3VuY2VUaW1lKDcwMCksXHJcbiAgICApLnN1YnNjcmliZShtb2RlbCA9PiB7XHJcbiAgICAgIHRoaXMuX3N0b3JlLmRpc3BhdGNoKG9iamVjdEZvcm1BY3Rpb25zLnVwZGF0ZVZhbHVlcyh7dmFsdWU6IG1vZGVsfSkpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucyQucHVzaCh0aGlzLl9zdG9yZS5zZWxlY3Qob2JqZWN0Rm9ybVNlbGVjdG9ycy5zZWxlY3RJc0NoZWNrUmVxdWlyZWQpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICB0aGlzLl9pc0NoZWNrUmVxdWlyZWQgPSByZXN1bHQ7XHJcbiAgICAgIHRoaXMuX2RldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0pKTtcclxuXHJcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zJC5wdXNoKHRoaXMuX3N0b3JlLnNlbGVjdChvYmplY3RGb3JtU2VsZWN0b3JzLnNlbGVjdENhbkVkaXRPYmplY3QpXHJcbiAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgICB0aGlzLl9jYW5FZGl0T2JqZWN0ID0gcmVzdWx0O1xyXG4gICAgICAgIHRoaXMuX2RldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfSkpO1xyXG5cclxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMkLnB1c2godGhpcy5fc3RvcmUuc2VsZWN0KG9iamVjdEZvcm1TZWxlY3RvcnMuc2VsZWN0VmFsdWVNb2RlbCh0aGlzLnNldHRpbmdzKSlcclxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBDb21wb25lbnRWYWx1ZU1vZGVsIHwgbnVsbCB8IChDb21wb25lbnRWYWx1ZU1vZGVsIHwgbnVsbClbXSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNsb25lUmVzdWx0ID0gc3RydWN0dXJlZENsb25lKHJlc3VsdCBhcyBUYWJsZVZhbHVlTW9kZWwgfCBudWxsKTtcclxuXHJcbiAgICAgICAgaWYgKGNsb25lUmVzdWx0ICYmICFBcnJheS5pc0FycmF5KGNsb25lUmVzdWx0KSAmJiB0aGlzLm1vZGVsLmRhdGEgIT09IGNsb25lUmVzdWx0LmRhdGEpIHtcclxuICAgICAgICAgIHRoaXMubW9kZWwgPSBzdHJ1Y3R1cmVkQ2xvbmUoY2xvbmVSZXN1bHQpO1xyXG4gICAgICAgICAgdGhpcy5fcm93cyA9IHRoaXMuX2V4dHJhY3RSb3dzKHRoaXMubW9kZWwuZGF0YSk7XHJcbiAgICAgICAgICB0aGlzLl9pbml0RGF0YVNvdXJjZSh0aGlzLl9yb3dzKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fY2hhbmdlU3ViamVjdCQudW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMkLmZvckVhY2goKHN1YnNjcmlwdGlvbikgPT4gc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNyZWF0ZVJvdygpIHtcclxuICAgIHRoaXMuX21vZGFsU2VydmljZS5vcGVuKElucHV0VGFibGVNb2RhbENvbXBvbmVudCwge1xyXG4gICAgICB0aXRsZTogJ9Ch0L7Qt9C00LDQvdC40LUg0YHRgtGA0L7QutC4JyxcclxuICAgICAgb2tUZXh0OiAn0KHQvtC30LTQsNGC0YwnLFxyXG4gICAgICBzZXR0aW5nczogdGhpcy5zZXR0aW5ncyxcclxuICAgICAgcm93TW9kZWw6IGdldFJvd01vZGVsKHRoaXMuc2V0dGluZ3MpLFxyXG4gICAgICBpc0NoZWNrUmVxdWlyZWQ6IHRoaXMuX2lzQ2hlY2tSZXF1aXJlZFxyXG4gICAgfSkuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzb2x2ZSA9PiB7XHJcbiAgICAgIGlmIChyZXNvbHZlLnJlc3VsdCkge1xyXG4gICAgICAgIHRoaXMuX3Jvd3MgPSBbLi4uc3RydWN0dXJlZENsb25lKHRoaXMuX3Jvd3MpLCByZXNvbHZlLnJvd01vZGVsXTtcclxuXHJcbiAgICAgICAgdGhpcy5faW5pdERhdGFTb3VyY2UodGhpcy5fcm93cyk7XHJcblxyXG4gICAgICAgIHRoaXMuX2NoYW5nZVN1YmplY3QkLm5leHQodGhpcy5fYnVpbGRUYWJsZVZhbHVlTW9kZWwoKSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGRlbGV0ZVJvdyhldmVudDogYW55KSB7XHJcbiAgICBjb25zdCBmaW5kUm93ID0gdGhpcy5fcm93cy5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PT0gZXZlbnQucm93LmRhdGEuaWQpO1xyXG5cclxuICAgIGlmIChmaW5kUm93KSB7XHJcbiAgICAgIHRoaXMuX3Jvd3MgPSB0aGlzLl9yb3dzLmZpbHRlcihpdGVtID0+IGl0ZW0uaWQgIT09IGV2ZW50LnJvdy5kYXRhLmlkKTtcclxuXHJcbiAgICAgIHRoaXMuX2luaXREYXRhU291cmNlKHRoaXMuX3Jvd3MpO1xyXG5cclxuICAgICAgdGhpcy5fY2hhbmdlU3ViamVjdCQubmV4dCh0aGlzLl9idWlsZFRhYmxlVmFsdWVNb2RlbCgpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhdGhpcy5fY2FuRWRpdE9iamVjdDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBlZGl0Um93KGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnN0IGZpbmRSb3c6IFRhYmxlUm93TW9kZWwgfCB1bmRlZmluZWQgPSB0aGlzLl9yb3dzLmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSBldmVudC5yb3cuZGF0YS5pZCk7XHJcblxyXG4gICAgaWYgKGZpbmRSb3cpIHtcclxuICAgICAgdGhpcy5fbW9kYWxTZXJ2aWNlLm9wZW4oSW5wdXRUYWJsZU1vZGFsQ29tcG9uZW50LCB7XHJcbiAgICAgICAgdGl0bGU6ICfQoNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNC1INGB0YLRgNC+0LrQuCcsXHJcbiAgICAgICAgb2tUZXh0OiAn0KHQvtGF0YDQsNC90LjRgtGMJyxcclxuICAgICAgICBzZXR0aW5nczogdGhpcy5zZXR0aW5ncyxcclxuICAgICAgICByb3dNb2RlbDogZmluZFJvd1xyXG4gICAgICB9KS5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXNvbHZlID0+IHtcclxuICAgICAgICBpZiAocmVzb2x2ZS5yZXN1bHQpIHtcclxuICAgICAgICAgIGNvbnN0IGNsb25lUm93cyA9IHN0cnVjdHVyZWRDbG9uZSh0aGlzLl9yb3dzKTtcclxuICAgICAgICAgIGNvbnN0IGVkaXRhYmxlUm93ID0gY2xvbmVSb3dzLmZpbmQocm93ID0+IHJvdy5pZCA9PT0gcmVzb2x2ZS5yb3dNb2RlbC5pZCk7XHJcblxyXG4gICAgICAgICAgaWYgKGVkaXRhYmxlUm93KSB7XHJcbiAgICAgICAgICAgIGVkaXRhYmxlUm93LmRhdGEgPSByZXNvbHZlLnJvd01vZGVsLmRhdGE7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9yb3dzID0gY2xvbmVSb3dzO1xyXG4gICAgICAgICAgICB0aGlzLl9pbml0RGF0YVNvdXJjZSh0aGlzLl9yb3dzKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZVN1YmplY3QkLm5leHQodGhpcy5fYnVpbGRUYWJsZVZhbHVlTW9kZWwoKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRGb3JtYXQoY29tcG9uZW50OiBDb21wb25lbnRNb2RlbEJhc2UpIHtcclxuICAgIHN3aXRjaCAoY29tcG9uZW50LnR5cGUpIHtcclxuICAgICAgY2FzZSBDb21wb25lbnRUeXBlLklucHV0RGF0ZTpcclxuICAgICAgICBzd2l0Y2ggKChjb21wb25lbnQgYXMgSW5wdXREYXRlTW9kZWwpLm9wdGlvbnMudmlld1R5cGUpIHtcclxuICAgICAgICAgIGNhc2UgRGF0ZVR5cGVFbnVtLkRhdGVUaW1lOlxyXG4gICAgICAgICAgICByZXR1cm4gJ2RkLk1NLnl5eXkgaGg6bW0nO1xyXG4gICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuICdkZC5NTS55eXl5JztcclxuICAgICAgICB9XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldERhdGFUeXBlKGNvbXBvbmVudDogQ29tcG9uZW50TW9kZWxCYXNlKSB7XHJcbiAgICBzd2l0Y2ggKGNvbXBvbmVudC50eXBlKSB7XHJcbiAgICAgIGNhc2UgQ29tcG9uZW50VHlwZS5JbnB1dERhdGU6XHJcbiAgICAgICAgcmV0dXJuICdkYXRlJztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gJ3N0cmluZyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2hvd1RvdGFsKGNvbXBvbmVudDogQ29tcG9uZW50TW9kZWxCYXNlKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoY29tcG9uZW50LnR5cGUgPT09IENvbXBvbmVudFR5cGUuSW5wdXROdW1iZXIpIHtcclxuICAgICAgY29uc3QgZWxlbWVudDogSW5wdXROdW1iZXJNb2RlbCA9IGNvbXBvbmVudCBhcyBJbnB1dE51bWJlck1vZGVsO1xyXG5cclxuICAgICAgcmV0dXJuIGVsZW1lbnQub3B0aW9ucy5pblRvdGFscztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaXNUb3RhbENvbHVtbihjb21wb25lbnQ6IENvbXBvbmVudE1vZGVsQmFzZSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChjb21wb25lbnQgYXMgSW5wdXROdW1iZXJNb2RlbCkub3B0aW9ucy5pblRvdGFscztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2luaXRNb2RlbCgpIHtcclxuICAgIHRoaXMubW9kZWwgPSB7XHJcbiAgICAgIHN5c05hbWU6IHRoaXMuc2V0dGluZ3Muc3lzTmFtZSxcclxuICAgICAgdHlwZTogdGhpcy5zZXR0aW5ncy50eXBlLFxyXG4gICAgICBkYXRhOiBbXSxcclxuICAgICAgdG90YWxzOiBbXVxyXG4gICAgfTtcclxuICAgIHRoaXMuX3Jvd3MgPSBbXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2luaXREYXRhU291cmNlKGRhdGE6IFRhYmxlUm93TW9kZWxbXSkge1xyXG4gICAgdGhpcy5kYXRhU291cmNlID0gZGF0YS5tYXAoKGl0ZW06IFRhYmxlUm93TW9kZWwpID0+IHtcclxuICAgICAgY29uc3QgbmV3RGF0YUl0ZW06IGFueSA9IHt9O1xyXG5cclxuICAgICAgZm9yIChsZXQgaSBpbiBpdGVtLmRhdGEpIHtcclxuICAgICAgICBuZXdEYXRhSXRlbVtpdGVtLmRhdGFbaV0uc3lzTmFtZV0gPSBpdGVtLmRhdGFbaV0udmFsdWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG5ld0RhdGFJdGVtLmlkID0gaXRlbS5pZDtcclxuXHJcbiAgICAgIHJldHVybiBuZXdEYXRhSXRlbTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuX2RldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICBpZiAodGhpcy5kYXRhR3JpZD8uaW5zdGFuY2UpIHtcclxuICAgICAgdGhpcy5kYXRhR3JpZC5pbnN0YW5jZS5yZWZyZXNoKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pbml0Q29sdW1ucyhjb21wb25lbnRzOiBDb21wb25lbnRNb2RlbEJhc2VbXSkge1xyXG4gICAgdGhpcy5jb2x1bW5zID0gY29tcG9uZW50cy5tYXAoYyA9PiB0aGlzLl90cmFuc2Zvcm1Db2x1bW4oc3RydWN0dXJlZENsb25lKGMpKSk7XHJcblxyXG4gICAgdGhpcy5jb2x1bW5zLnB1c2goe1xyXG4gICAgICBjYXB0aW9uOiAnJyxcclxuICAgICAgdHlwZTogJ2J1dHRvbnMnLFxyXG4gICAgICB3aWR0aDogODAsXHJcbiAgICAgIGNzc0NsYXNzOiAnY3VzdG9tLWNlbGwtY29udHJvbHMnLFxyXG4gICAgICBidXR0b25zOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdGVtcGxhdGU6ICdlZGl0QnV0dG9uVGVtcGxhdGUnLFxyXG4gICAgICAgICAgaGludDogJ9Cg0LXQtNCw0LrRgtC40YDQvtCy0LDRgtGMJyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHRlbXBsYXRlOiAnZGVsZXRlQnV0dG9uVGVtcGxhdGUnLFxyXG4gICAgICAgICAgaGludDogJ9Cj0LTQsNC70LjRgtGMJyxcclxuICAgICAgICB9LFxyXG4gICAgICBdLFxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuZGF0YUdyaWQ/Lmluc3RhbmNlKSB7XHJcbiAgICAgIHRoaXMuZGF0YUdyaWQuaW5zdGFuY2UucmVwYWludCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fZGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdHJhbnNmb3JtQ29sdW1uKGNvbXBvbmVudDogQ29tcG9uZW50TW9kZWxCYXNlKTogQ29sdW1uTW9kZWwge1xyXG4gICAgY29uc3QgY29sdW1uOiBDb2x1bW5Nb2RlbCA9IHtcclxuICAgICAgY2FwdGlvbjogY29tcG9uZW50Lm9wdGlvbnMubGFiZWwgfHwgJycsXHJcbiAgICAgIGNvbHVtbnM6IGNvbXBvbmVudC5jb21wb25lbnRzLm1hcChjID0+IHRoaXMuX3RyYW5zZm9ybUNvbHVtbihzdHJ1Y3R1cmVkQ2xvbmUoYykpKSxcclxuICAgICAgZGF0YUZpZWxkOiBjb21wb25lbnQuc3lzTmFtZSxcclxuICAgICAgZGF0YVR5cGU6IHRoaXMuZ2V0RGF0YVR5cGUoY29tcG9uZW50KSxcclxuICAgICAgZm9ybWF0OiB0aGlzLmdldEZvcm1hdChjb21wb25lbnQpLFxyXG4gICAgICBtaW5XaWR0aDogMTYwXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbHVtbi5kYXRhVHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgIGNvbHVtbi5jYWxjdWxhdGVDZWxsVmFsdWUgPSAocm93RGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSByb3dEYXRhW2NvbXBvbmVudC5zeXNOYW1lXTtcclxuICAgICAgICByZXR1cm4gISF2YWx1ZTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGNvbHVtbi5sb29rdXAgPSB7XHJcbiAgICAgICAgZGF0YVNvdXJjZTogW1xyXG4gICAgICAgICAgeyB2YWx1ZTogdHJ1ZSwgZGlzcGxheVZhbHVlOiAn0JTQsCcgfSxcclxuICAgICAgICAgIHsgdmFsdWU6IGZhbHNlLCBkaXNwbGF5VmFsdWU6ICfQndC10YInIH1cclxuICAgICAgICBdLFxyXG4gICAgICAgIHZhbHVlRXhwcjogJ3ZhbHVlJyxcclxuICAgICAgICBkaXNwbGF5RXhwcjogJ2Rpc3BsYXlWYWx1ZSdcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zZXR0aW5ncy5vcHRpb25zLmdyb3Vwcy5sZW5ndGgpIHtcclxuICAgICAgY29uc3QgZmluZElkeCA9IHRoaXMuc2V0dGluZ3Mub3B0aW9ucy5ncm91cHMuZmluZEluZGV4KHggPT4geCA9PT0gY29tcG9uZW50LnN5c05hbWUpO1xyXG5cclxuICAgICAgaWYgKGZpbmRJZHggIT09IC0xKSB7XHJcbiAgICAgICAgY29sdW1uLmdyb3VwSW5kZXggPSBmaW5kSWR4XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY29sdW1uXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9idWlsZFRhYmxlVmFsdWVNb2RlbCgpOiBUYWJsZVZhbHVlTW9kZWwge1xyXG4gICAgY29uc3QgZ3JvdXBlZERhdGEgPSB0aGlzLl9idWlsZEdyb3VwZWRJdGVtcyh0aGlzLl9yb3dzLCB0aGlzLnNldHRpbmdzLm9wdGlvbnMuZ3JvdXBzIHx8IFtdLCAwKTtcclxuICAgIGNvbnN0IHRvdGFscyA9IHRoaXMuX2NhbGN1bGF0ZVRvdGFscyh0aGlzLl9yb3dzKTtcclxuXHJcbiAgICB0aGlzLm1vZGVsID0ge1xyXG4gICAgICBzeXNOYW1lOiB0aGlzLnNldHRpbmdzLnN5c05hbWUsXHJcbiAgICAgIHR5cGU6IHRoaXMuc2V0dGluZ3MudHlwZSxcclxuICAgICAgZGF0YTogZ3JvdXBlZERhdGEsXHJcbiAgICAgIHRvdGFsc1xyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gc3RydWN0dXJlZENsb25lKHRoaXMubW9kZWwpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYnVpbGRHcm91cGVkSXRlbXMocm93czogVGFibGVSb3dNb2RlbFtdLCBncm91cEZpZWxkczogc3RyaW5nW10sIGxldmVsOiBudW1iZXIpOiBUYWJsZUl0ZW1bXSB7XHJcbiAgICBpZiAoIWdyb3VwRmllbGRzLmxlbmd0aCB8fCBsZXZlbCA+PSBncm91cEZpZWxkcy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIHJvd3MubWFwKHJvdyA9PiAoeyAuLi5yb3csIGl0ZW1UeXBlOiByb3cuaXRlbVR5cGUgPz8gVGFibGVJdGVtVHlwZS5Sb3cgfSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGdyb3VwRmllbGQgPSBncm91cEZpZWxkc1tsZXZlbF07XHJcbiAgICBjb25zdCBncm91cHMgPSBuZXcgTWFwPHN0cmluZywgeyByb3dzOiBUYWJsZVJvd01vZGVsW10sIGdyb3VwVmFsdWVTeXNOYW1lOiBzdHJpbmcgfT4oKTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IHJvdyBvZiByb3dzKSB7XHJcbiAgICAgIGNvbnN0IGZpZWxkVmFsdWUgPSByb3cuZGF0YS5maW5kKHggPT4geC5zeXNOYW1lID09PSBncm91cEZpZWxkKT8udmFsdWUgPz8gbnVsbDtcclxuICAgICAgY29uc3Qga2V5ID0gSlNPTi5zdHJpbmdpZnkoZmllbGRWYWx1ZSk7XHJcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gZ3JvdXBzLmdldChrZXkpID8/IHtcclxuICAgICAgICByb3dzOiBbXSxcclxuICAgICAgICBncm91cFZhbHVlU3lzTmFtZTogdGhpcy5fZ2V0R3JvdXBWYWx1ZVN5c05hbWUoZmllbGRWYWx1ZSwgZ3JvdXBGaWVsZClcclxuICAgICAgfTtcclxuICAgICAgZXhpc3Rpbmcucm93cy5wdXNoKHJvdyk7XHJcbiAgICAgIGdyb3Vwcy5zZXQoa2V5LCBleGlzdGluZyk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVzdWx0OiBUYWJsZUl0ZW1bXSA9IFtdO1xyXG5cclxuICAgIGZvciAoY29uc3QgZ3JvdXBJdGVtIG9mIGdyb3Vwcy52YWx1ZXMoKSkge1xyXG4gICAgICBjb25zdCBuZXN0ZWREYXRhID0gdGhpcy5fYnVpbGRHcm91cGVkSXRlbXMoZ3JvdXBJdGVtLnJvd3MsIGdyb3VwRmllbGRzLCBsZXZlbCArIDEpO1xyXG4gICAgICBjb25zdCBncm91cE1vZGVsOiBUYWJsZUdyb3VwTW9kZWwgPSB7XHJcbiAgICAgICAgaXRlbVR5cGU6IFRhYmxlSXRlbVR5cGUuR3JvdXAsXHJcbiAgICAgICAgZGF0YTogbmVzdGVkRGF0YSxcclxuICAgICAgICB0b3RhbHM6IHRoaXMuX2NhbGN1bGF0ZVRvdGFscyhncm91cEl0ZW0ucm93cywgZ3JvdXBJdGVtLmdyb3VwVmFsdWVTeXNOYW1lKVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgcmVzdWx0LnB1c2goZ3JvdXBNb2RlbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NhbGN1bGF0ZVRvdGFscyhyb3dzOiBUYWJsZVJvd01vZGVsW10sIGdyb3VwRmllbGRTeXNOYW1lPzogc3RyaW5nKTogQ29tcG9uZW50VmFsdWVNb2RlbFtdIHtcclxuICAgIGNvbnN0IHRvdGFsQ29sdW1ucyA9IHRoaXMuX2dldFRvdGFsQ29sdW1ucyh0aGlzLnNldHRpbmdzLmNvbXBvbmVudHMpO1xyXG5cclxuICAgIHJldHVybiB0b3RhbENvbHVtbnMubWFwKGNvbXBvbmVudCA9PiB7XHJcbiAgICAgIGNvbnN0IHN1bSA9IHJvd3MucmVkdWNlKChhY2MsIHJvdykgPT4ge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gcm93LmRhdGEuZmluZCh4ID0+IHguc3lzTmFtZSA9PT0gY29tcG9uZW50LnN5c05hbWUpPy52YWx1ZTtcclxuICAgICAgICBjb25zdCBudW1lcmljVmFsdWUgPSB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInID8gdmFsdWUgOiBOdW1iZXIodmFsdWUpO1xyXG5cclxuICAgICAgICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKG51bWVyaWNWYWx1ZSkgPyBhY2MgKyBudW1lcmljVmFsdWUgOiBhY2M7XHJcbiAgICAgIH0sIDApO1xyXG5cclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBzeXNOYW1lOiB0aGlzLl9nZXRUb3RhbFN5c05hbWUoY29tcG9uZW50LnN5c05hbWUsIGdyb3VwRmllbGRTeXNOYW1lKSxcclxuICAgICAgICB0eXBlOiBjb21wb25lbnQudHlwZSxcclxuICAgICAgICB2YWx1ZVR5cGU6IGNvbXBvbmVudC52YWx1ZVR5cGUsXHJcbiAgICAgICAgdmFsdWU6IHN1bVxyXG4gICAgICB9IGFzIENvbXBvbmVudFZhbHVlTW9kZWw7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldFRvdGFsU3lzTmFtZShjb2x1bW5TeXNOYW1lOiBzdHJpbmcsIGdyb3VwRmllbGRTeXNOYW1lPzogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmIChncm91cEZpZWxkU3lzTmFtZSkge1xyXG4gICAgICByZXR1cm4gYCR7Y29sdW1uU3lzTmFtZX1fJHtncm91cEZpZWxkU3lzTmFtZX1fdG90YWxgO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBgJHtjb2x1bW5TeXNOYW1lfV90b3RhbGA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRHcm91cFZhbHVlU3lzTmFtZShmaWVsZFZhbHVlOiBhbnksIGZhbGxiYWNrU3lzTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGZpZWxkVmFsdWUpICYmIGZpZWxkVmFsdWUubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IGZpcnN0VmFsdWUgPSBmaWVsZFZhbHVlWzBdO1xyXG4gICAgICBpZiAodHlwZW9mIGZpcnN0VmFsdWUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBmaXJzdFZhbHVlID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgZmlyc3RWYWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgcmV0dXJuIFN0cmluZyhmaXJzdFZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChmaWVsZFZhbHVlICYmIHR5cGVvZiBmaWVsZFZhbHVlID09PSAnb2JqZWN0Jykge1xyXG4gICAgICBpZiAodHlwZW9mIGZpZWxkVmFsdWUudmFsdWUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBmaWVsZFZhbHVlLnZhbHVlID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgZmllbGRWYWx1ZS52YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgcmV0dXJuIFN0cmluZyhmaWVsZFZhbHVlLnZhbHVlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHR5cGVvZiBmaWVsZFZhbHVlLnN5c05hbWUgPT09ICdzdHJpbmcnICYmIGZpZWxkVmFsdWUuc3lzTmFtZSkge1xyXG4gICAgICAgIHJldHVybiBmaWVsZFZhbHVlLnN5c05hbWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIGZpZWxkVmFsdWUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBmaWVsZFZhbHVlID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgZmllbGRWYWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgIHJldHVybiBTdHJpbmcoZmllbGRWYWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbGxiYWNrU3lzTmFtZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldFRvdGFsQ29sdW1ucyhjb21wb25lbnRzOiBDb21wb25lbnRNb2RlbEJhc2VbXSk6IElucHV0TnVtYmVyTW9kZWxbXSB7XHJcbiAgICBjb25zdCByZXN1bHQ6IElucHV0TnVtYmVyTW9kZWxbXSA9IFtdO1xyXG5cclxuICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIGNvbXBvbmVudHMpIHtcclxuICAgICAgaWYgKGNvbXBvbmVudC50eXBlID09PSBDb21wb25lbnRUeXBlLklucHV0TnVtYmVyICYmIHRoaXMuc2hvd1RvdGFsKGNvbXBvbmVudCkpIHtcclxuICAgICAgICByZXN1bHQucHVzaChjb21wb25lbnQgYXMgSW5wdXROdW1iZXJNb2RlbCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChjb21wb25lbnQuY29tcG9uZW50cz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgcmVzdWx0LnB1c2goLi4udGhpcy5fZ2V0VG90YWxDb2x1bW5zKGNvbXBvbmVudC5jb21wb25lbnRzKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZXh0cmFjdFJvd3MoaXRlbXM6IFRhYmxlSXRlbVtdID0gW10pOiBUYWJsZVJvd01vZGVsW10ge1xyXG4gICAgY29uc3Qgcm93czogVGFibGVSb3dNb2RlbFtdID0gW107XHJcblxyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XHJcbiAgICAgIGlmICh0aGlzLl9pc1JvdyhpdGVtKSkge1xyXG4gICAgICAgIHJvd3MucHVzaCh7XHJcbiAgICAgICAgICAuLi5pdGVtLFxyXG4gICAgICAgICAgaXRlbVR5cGU6IFRhYmxlSXRlbVR5cGUuUm93XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgZ3JvdXAgPSBpdGVtIGFzIFRhYmxlR3JvdXBNb2RlbDtcclxuICAgICAgICBpZiAoZ3JvdXAuZGF0YT8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICByb3dzLnB1c2goLi4udGhpcy5fZXh0cmFjdFJvd3MoZ3JvdXAuZGF0YSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByb3dzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNSb3coaXRlbTogVGFibGVJdGVtKTogaXRlbSBpcyBUYWJsZVJvd01vZGVsIHtcclxuICAgIGNvbnN0IG1heWJlUm93ID0gaXRlbSBhcyBUYWJsZVJvd01vZGVsO1xyXG4gICAgcmV0dXJuIHR5cGVvZiBtYXliZVJvdy5pZCA9PT0gJ3N0cmluZycgJiYgQXJyYXkuaXNBcnJheShtYXliZVJvdy5kYXRhKTtcclxuICB9XHJcbn1cclxuIiwiQGlmIChzZXR0aW5ncykge1xyXG4gIDxkaXYgY2xhc3M9XCJpbnB1dC10YWJsZS1jb250ZW50IHctMTAwXCI+XHJcbiAgICBAaWYgKHNldHRpbmdzLm9wdGlvbnMubGFiZWwpIHtcclxuICAgICAgPG1yeC1sYWJlbFxyXG4gICAgICAgIFtyZXF1aXJlZF09XCJzZXR0aW5ncy5vcHRpb25zLnJlcXVpcmVkXCJcclxuICAgICAgICBbdG9vbHRpcF09XCJzZXR0aW5ncy5vcHRpb25zLnRvb2x0aXAgfHwgJydcIlxyXG4gICAgICA+XHJcbiAgICAgICAge3sgc2V0dGluZ3Mub3B0aW9ucy5sYWJlbCB9fVxyXG4gICAgICA8L21yeC1sYWJlbD5cclxuICAgIH1cclxuXHJcbiAgICA8ZHgtZGF0YS1ncmlkXHJcbiAgICAgICNkYXRhR3JpZFxyXG4gICAgICBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCJcclxuICAgICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXHJcbiAgICAgIG5vRGF0YVRleHQ9XCLQndC10YIg0LTQsNC90L3Ri9GFXCJcclxuICAgICAgc3R5bGU9XCJ3aWR0aDogMTAwJVwiXHJcbiAgICAgIFt3b3JkV3JhcEVuYWJsZWRdPVwidHJ1ZVwiXHJcbiAgICAgIFtjb2x1bW5BdXRvV2lkdGhdPVwidHJ1ZVwiXHJcbiAgICAgIFtjbGFzcy5ub0RhdGFdPVwiaXNSZWROb0RhdGFcIlxyXG4gICAgPlxyXG4gICAgICA8ZHhvLXRvb2xiYXI+XHJcbiAgICAgICAgPGR4aS1pdGVtIGxvY2F0aW9uPVwiYWZ0ZXJcIj5cclxuICAgICAgICAgIDxkaXYgKmR4VGVtcGxhdGUgY2xhc3M9XCJhZGQtcm93XCI+XHJcbiAgICAgICAgICAgIDxtcngtYnV0dG9uXHJcbiAgICAgICAgICAgICAgW3NpemVdPVwiJ21lZGl1bSdcIlxyXG4gICAgICAgICAgICAgIFt0eXBlXT1cIidzZWNvbmRhcnknXCJcclxuICAgICAgICAgICAgICBbY3VzdG9tQ2xhc3Nlc109XCInbWItMydcIlxyXG4gICAgICAgICAgICAgIChtcnhDbGljayk9XCJjcmVhdGVSb3coKVwiXHJcbiAgICAgICAgICAgID57e3NldHRpbmdzLm9wdGlvbnMuYWRkQnRuVGl0bGV9fVxyXG4gICAgICAgICAgICA8L21yeC1idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2R4aS1pdGVtPlxyXG4gICAgICA8L2R4by10b29sYmFyPlxyXG5cclxuICAgICAgPGRpdiAqZHhUZW1wbGF0ZT1cImxldCBidXR0b25EYXRhIG9mICdlZGl0QnV0dG9uVGVtcGxhdGUnXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtcngtaWNvbiBpY29uLWVkaXQgaWNvbi1mb250LTE2IGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cImVkaXRSb3coYnV0dG9uRGF0YSlcIj48L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiAqZHhUZW1wbGF0ZT1cImxldCBidXR0b25EYXRhIG9mICdkZWxldGVCdXR0b25UZW1wbGF0ZSdcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1yeC1pY29uIGljb24tZGVsZXRlIGljb24tZm9udC0xNiBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJkZWxldGVSb3coYnV0dG9uRGF0YSlcIj48L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgQGlmIChkYXRhU291cmNlLmxlbmd0aCkge1xyXG4gICAgICAgIDxkeG8tc3VtbWFyeT5cclxuICAgICAgICAgIEBmb3IgKGNvbXBvbmVudCBvZiBzZXR0aW5ncy5jb21wb25lbnRzOyB0cmFjayBjb21wb25lbnQuaWQ7IGxldCBmaXJzdCA9ICRmaXJzdCkge1xyXG4gICAgICAgICAgICBAaWYgKCFmaXJzdCkge1xyXG4gICAgICAgICAgICAgIEBpZiAoc2hvd1RvdGFsKGNvbXBvbmVudCkpIHtcclxuICAgICAgICAgICAgICAgIDxkeGktZ3JvdXAtaXRlbVxyXG4gICAgICAgICAgICAgICAgICBbY29sdW1uXT1cImNvbXBvbmVudC5zeXNOYW1lXCJcclxuICAgICAgICAgICAgICAgICAgc3VtbWFyeVR5cGU9XCJzdW1cIlxyXG4gICAgICAgICAgICAgICAgICBkaXNwbGF5Rm9ybWF0PVwi0JjRgtC+0LPQvjogezB9XCJcclxuICAgICAgICAgICAgICAgICAgW3Nob3dJbkdyb3VwRm9vdGVyXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICBbYWxpZ25CeUNvbHVtbl09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICA8L2R4aS1ncm91cC1pdGVtPlxyXG5cclxuICAgICAgICAgICAgICAgIDxkeGktdG90YWwtaXRlbSBcclxuICAgICAgICAgICAgICAgICAgW2NvbHVtbl09XCJjb21wb25lbnQuc3lzTmFtZVwiIFxyXG4gICAgICAgICAgICAgICAgICBkaXNwbGF5Rm9ybWF0PVwiezB9XCJcclxuICAgICAgICAgICAgICAgICAgc3VtbWFyeVR5cGU9XCJzdW1cIlxyXG4gICAgICAgICAgICAgICAgPjwvZHhpLXRvdGFsLWl0ZW0+XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBAZm9yIChjb21wb25lbnQgb2YgY29tcG9uZW50LmNvbXBvbmVudHM7IHRyYWNrIGNvbXBvbmVudC5pZCkge1xyXG4gICAgICAgICAgICAgICAgQGlmIChzaG93VG90YWwoY29tcG9uZW50KSkge1xyXG4gICAgICAgICAgICAgICAgICA8ZHhpLWdyb3VwLWl0ZW1cclxuICAgICAgICAgICAgICAgICAgICBbY29sdW1uXT1cImNvbXBvbmVudC5zeXNOYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5VHlwZT1cInN1bVwiXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheUZvcm1hdD1cItCY0YLQvtCz0L46IHswfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3Nob3dJbkdyb3VwRm9vdGVyXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFthbGlnbkJ5Q29sdW1uXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgPC9keGktZ3JvdXAtaXRlbT5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBAZm9yIChjb21wb25lbnQgb2YgY29tcG9uZW50LmNvbXBvbmVudHM7IHRyYWNrIGNvbXBvbmVudC5pZCkge1xyXG4gICAgICAgICAgICAgICAgICBAaWYgKHNob3dUb3RhbChjb21wb25lbnQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgPGR4aS1ncm91cC1pdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY29sdW1uXT1cImNvbXBvbmVudC5zeXNOYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHN1bW1hcnlUeXBlPVwic3VtXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlGb3JtYXQ9XCLQmNGC0L7Qs9C+OiB7MH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW3Nob3dJbkdyb3VwRm9vdGVyXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2FsaWduQnlDb2x1bW5dPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZHhpLWdyb3VwLWl0ZW0+XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgICAgICAgIEBpZiAoaGFzQW55VG90YWwpIHsgXHJcbiAgICAgICAgICAgICAgICA8ZHhpLXRvdGFsLWl0ZW1cclxuICAgICAgICAgICAgICAgICAgICBbY29sdW1uXT1cImNvbXBvbmVudC5zeXNOYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICBbY3NzQ2xhc3NdPVwiJ3RleHQtYm9sZCdcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNwbGF5Rm9ybWF0XT1cInNob3dUb3RhbChjb21wb25lbnQpID8gJ3swfScgOiAn0JjQotCe0JPQnidcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzdW1tYXJ5VHlwZV09XCJzaG93VG90YWwoY29tcG9uZW50KSA/ICdzdW0nIDogdW5kZWZpbmVkXCJcclxuICAgICAgICAgICAgICAgID48L2R4aS10b3RhbC1pdGVtPlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDwvZHhvLXN1bW1hcnk+XHJcbiAgICAgIH1cclxuICAgIDwvZHgtZGF0YS1ncmlkPlxyXG5cclxuICAgIEBpZighIXNldHRpbmdzLm9wdGlvbnMubWF4Um93cykge1xyXG4gICAgICA8bXJ4LWhpbnQtZXJyb3ItbWVzc2FnZVxyXG4gICAgICAgIG1lc3NhZ2U9XCLQnNCw0LrRgdC40LzQsNC70YzQvdC+0LUg0LrQvtC70LjRh9C10YHRgtCy0L4g0YHRgtGA0L7Qujoge3sgc2V0dGluZ3Mub3B0aW9ucy5tYXhSb3dzIH19XCJcclxuICAgICAgICBbbWF4VmFsdWVdPVwic2V0dGluZ3Mub3B0aW9ucy5tYXhSb3dzXCJcclxuICAgICAgICBbdmFsdWVdPVwicm93c0NvdW50XCJcclxuICAgICAgPjwvbXJ4LWhpbnQtZXJyb3ItbWVzc2FnZT5cclxuICAgIH1cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgI2VkaXRUZW1wbGF0ZSBsZXQtY2VsbEluZm89XCJjZWxsSW5mb1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCIgc3R5bGU9XCJnYXA6IDRweFwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibXJ4LWljb24gaWNvbi1lZGl0IGljb24tZm9udC0xNiBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJlZGl0Um93KGNlbGxJbmZvKVwiPjwvc3Bhbj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1yeC1pY29uIGljb24tZGVsZXRlIGljb24tZm9udC0xNiBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJkZWxldGVSb3coY2VsbEluZm8pXCI+PC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9kaXY+XHJcbn1cclxuXHJcblxyXG4iXX0=
|
|
424
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlydGV4LWZvcm0vc3JjL2xpYi9tb2R1bGVzL29iamVjdC1mb3JtL2NvbXBvbmVudHMvZWxlbWVudHMvaW5wdXQvdGFibGUvaW5wdXQtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlydGV4LWZvcm0vc3JjL2xpYi9tb2R1bGVzL29iamVjdC1mb3JtL2NvbXBvbmVudHMvZWxlbWVudHMvaW5wdXQvdGFibGUvaW5wdXQtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFBRSxNQUFNLEVBQ3BCLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDL0UsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVwQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFFN0MsT0FBTyxFQUtMLGFBQWEsRUFHZCxNQUFNLG9CQUFvQixDQUFDO0FBRTVCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDeEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdDQUFnQyxDQUFD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O3NCQUF2RCxTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUM7Z0JBRXpCLE9BQU87c0JBQXZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsIGluamVjdCxcclxuICBJbnB1dCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBWaWV3Q2hpbGRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50VHlwZSwgRGF0ZVR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc2hhcmVkLWZvcm0vZW51bXMnO1xyXG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50TW9kZWxCYXNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc2hhcmVkLWZvcm0vbW9kZWxzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgRHhEYXRhR3JpZENvbXBvbmVudCB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhcic7XHJcbmltcG9ydCB7XHJcbiAgQ29tcG9uZW50VmFsdWVNb2RlbCxcclxuICBTZWN0aW9uVmFsdWVNb2RlbCxcclxuICBUYWJsZUdyb3VwTW9kZWwsXHJcbiAgVGFibGVJdGVtLFxyXG4gIFRhYmxlSXRlbVR5cGUsXHJcbiAgVGFibGVSb3dNb2RlbCxcclxuICBUYWJsZVZhbHVlTW9kZWxcclxufSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBJbnB1dERhdGVNb2RlbCwgSW5wdXROdW1iZXJNb2RlbCwgSW5wdXRTZWxlY3RNb2RlbCwgSW5wdXRUYWJsZU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2VsZW1ldHMvaW5wdXRzJztcclxuaW1wb3J0IHsgb2JqZWN0Rm9ybUFjdGlvbnMsIG9iamVjdEZvcm1TZWxlY3RvcnMgfSBmcm9tICcuLi8uLi8uLi8uLi9zdG9yZSc7XHJcbmltcG9ydCB7IE1vZGFsU2VydmljZSB9IGZyb20gJ0BteXJ0ZXgtb3JnL3VpJztcclxuaW1wb3J0IHsgSW5wdXRUYWJsZU1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzJztcclxuaW1wb3J0IHsgZ2V0Um93TW9kZWwgfSBmcm9tICcuL2hlbHBlcnMvZ2V0LXJvdy1tb2RlbC5oZWxwZXInO1xyXG5pbXBvcnQgeyBDb2x1bW5Nb2RlbCB9IGZyb20gJy4vbW9kZWxzL2NvbHVtbi5tb2RlbCc7XHJcbmltcG9ydCB7IFJlZmVyZW5jZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9yZWZlcmVuY2Uuc2VydmljZSc7XHJcbmltcG9ydCBDdXN0b21TdG9yZSBmcm9tICdkZXZleHRyZW1lL2RhdGEvY3VzdG9tX3N0b3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWlucHV0LXRhYmxlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vaW5wdXQtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2lucHV0LXRhYmxlLmNvbXBvbmVudC5sZXNzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIElucHV0VGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgdHlwZSA9IENvbXBvbmVudFR5cGUuSW5wdXRUYWJsZTtcclxuXHJcbiAgcHJpdmF0ZSBfcmVmZXJlbmNlU2VydmljZTogUmVmZXJlbmNlU2VydmljZSA9IGluamVjdChSZWZlcmVuY2VTZXJ2aWNlKTtcclxuXHJcbiAgcHJpdmF0ZSBfbG9va3Vwc0NhY2hlOiBNYXA8c3RyaW5nLCBhbnlbXT4gPSBuZXcgTWFwKCk7XHJcblxyXG4gIHByaXZhdGUgX3N0b3JlOiBTdG9yZSA9IGluamVjdChTdG9yZSk7XHJcbiAgcHJpdmF0ZSBfZGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcclxuICBwcml2YXRlIF9tb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSA9IGluamVjdChNb2RhbFNlcnZpY2UpO1xyXG5cclxuICBwcml2YXRlIF9jaGFuZ2VTdWJqZWN0JDogU3ViamVjdDxUYWJsZVZhbHVlTW9kZWw+ID0gbmV3IFN1YmplY3Q8VGFibGVWYWx1ZU1vZGVsPigpO1xyXG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbnMkOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG5cclxuICBwcml2YXRlIF9pc0NoZWNrUmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9jYW5FZGl0T2JqZWN0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfcm93czogVGFibGVSb3dNb2RlbFtdID0gW107XHJcblxyXG4gIHB1YmxpYyBtb2RlbCE6IFRhYmxlVmFsdWVNb2RlbDtcclxuICBwdWJsaWMgc2V0dGluZ3MhOiBJbnB1dFRhYmxlTW9kZWw7XHJcbiAgcHVibGljIGRhdGFTb3VyY2U6IHsgW2tleTogc3RyaW5nXTogYW55IH1bXSA9IFtdO1xyXG4gIHB1YmxpYyBjb2x1bW5zOiBDb2x1bW5Nb2RlbFtdID0gW107XHJcblxyXG4gIEBJbnB1dCgpIHZhbHVlczogU2VjdGlvblZhbHVlTW9kZWxbXSA9IFtdO1xyXG5cclxuICBASW5wdXQoKSBzZXQgZGF0YShzZXR0aW5nczogQ29tcG9uZW50TW9kZWxCYXNlKSB7XHJcbiAgICB0aGlzLnNldHRpbmdzID0gc2V0dGluZ3MgYXMgSW5wdXRUYWJsZU1vZGVsO1xyXG5cclxuICAgIHRoaXMubW9kZWwgPSB7c3lzTmFtZTogc2V0dGluZ3Muc3lzTmFtZSwgdHlwZTogc2V0dGluZ3MudHlwZSwgZGF0YTogW10sIHRvdGFsczogW119O1xyXG4gICAgdGhpcy5fcm93cyA9IFtdO1xyXG5cclxuICAgIHRoaXMuX2RldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICB0aGlzLl9pbml0Q29sdW1ucyh0aGlzLnNldHRpbmdzLmNvbXBvbmVudHMpO1xyXG4gIH1cclxuXHJcbiAgQFZpZXdDaGlsZCgnZGF0YUdyaWQnLCB7c3RhdGljOiBmYWxzZX0pIGRhdGFHcmlkITogRHhEYXRhR3JpZENvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKCdlZGl0VGVtcGxhdGUnLCB7c3RhdGljOiBmYWxzZX0pIGVkaXRUZW1wbGF0ZSE6IGFueTtcclxuXHJcbiAgQE91dHB1dCgpIHB1YmxpYyBjaGFuZ2VkOiBFdmVudEVtaXR0ZXI8Q29tcG9uZW50VmFsdWVNb2RlbCB8IENvbXBvbmVudFZhbHVlTW9kZWxbXT4gPSBuZXcgRXZlbnRFbWl0dGVyPENvbXBvbmVudFZhbHVlTW9kZWwgfCBDb21wb25lbnRWYWx1ZU1vZGVsW10+KCk7XHJcblxyXG4gIHB1YmxpYyBnZXQgcm93c0NvdW50KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fcm93cy5sZW5ndGggfHwgMDtcclxuICB9XHJcblxyXG4gIGdldCBoYXNBbnlUb3RhbCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnNldHRpbmdzLmNvbXBvbmVudHMuc29tZShjID0+XHJcbiAgICAgIHRoaXMuc2hvd1RvdGFsKGMpIHx8IGMuY29tcG9uZW50cz8uc29tZShpbm5lciA9PiB0aGlzLnNob3dUb3RhbChpbm5lcikpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzUmVkTm9EYXRhKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzQ2hlY2tSZXF1aXJlZDtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5faW5pdE1vZGVsKCk7XHJcblxyXG4gICAgdGhpcy5fY2hhbmdlU3ViamVjdCQucGlwZShcclxuICAgICAgZGVib3VuY2VUaW1lKDcwMCksXHJcbiAgICApLnN1YnNjcmliZShtb2RlbCA9PiB7XHJcbiAgICAgIHRoaXMuX3N0b3JlLmRpc3BhdGNoKG9iamVjdEZvcm1BY3Rpb25zLnVwZGF0ZVZhbHVlcyh7dmFsdWU6IG1vZGVsfSkpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucyQucHVzaCh0aGlzLl9zdG9yZS5zZWxlY3Qob2JqZWN0Rm9ybVNlbGVjdG9ycy5zZWxlY3RJc0NoZWNrUmVxdWlyZWQpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICB0aGlzLl9pc0NoZWNrUmVxdWlyZWQgPSByZXN1bHQ7XHJcbiAgICAgIHRoaXMuX2RldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0pKTtcclxuXHJcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zJC5wdXNoKHRoaXMuX3N0b3JlLnNlbGVjdChvYmplY3RGb3JtU2VsZWN0b3JzLnNlbGVjdENhbkVkaXRPYmplY3QpXHJcbiAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgICB0aGlzLl9jYW5FZGl0T2JqZWN0ID0gcmVzdWx0O1xyXG4gICAgICAgIHRoaXMuX2RldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfSkpO1xyXG5cclxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMkLnB1c2godGhpcy5fc3RvcmUuc2VsZWN0KG9iamVjdEZvcm1TZWxlY3RvcnMuc2VsZWN0VmFsdWVNb2RlbCh0aGlzLnNldHRpbmdzKSlcclxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBDb21wb25lbnRWYWx1ZU1vZGVsIHwgbnVsbCB8IChDb21wb25lbnRWYWx1ZU1vZGVsIHwgbnVsbClbXSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNsb25lUmVzdWx0ID0gc3RydWN0dXJlZENsb25lKHJlc3VsdCBhcyBUYWJsZVZhbHVlTW9kZWwgfCBudWxsKTtcclxuXHJcbiAgICAgICAgaWYgKGNsb25lUmVzdWx0ICYmICFBcnJheS5pc0FycmF5KGNsb25lUmVzdWx0KSAmJiB0aGlzLm1vZGVsLmRhdGEgIT09IGNsb25lUmVzdWx0LmRhdGEpIHtcclxuICAgICAgICAgIHRoaXMubW9kZWwgPSBzdHJ1Y3R1cmVkQ2xvbmUoY2xvbmVSZXN1bHQpO1xyXG4gICAgICAgICAgdGhpcy5fcm93cyA9IHRoaXMuX2V4dHJhY3RSb3dzKHRoaXMubW9kZWwuZGF0YSk7XHJcbiAgICAgICAgICB0aGlzLl9pbml0RGF0YVNvdXJjZSh0aGlzLl9yb3dzKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fY2hhbmdlU3ViamVjdCQudW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMkLmZvckVhY2goKHN1YnNjcmlwdGlvbikgPT4gc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNyZWF0ZVJvdygpIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9tb2RhbFNlcnZpY2Uub3BlbihJbnB1dFRhYmxlTW9kYWxDb21wb25lbnQsIHtcclxuICAgICAgdGl0bGU6ICfQodC+0LfQtNCw0L3QuNC1INGB0YLRgNC+0LrQuCcsXHJcbiAgICAgIG9rVGV4dDogJ9Ch0L7Qt9C00LDRgtGMJyxcclxuICAgICAgc2V0dGluZ3M6IHRoaXMuc2V0dGluZ3MsXHJcbiAgICAgIHJvd01vZGVsOiBnZXRSb3dNb2RlbCh0aGlzLnNldHRpbmdzKSxcclxuICAgICAgaXNDaGVja1JlcXVpcmVkOiB0aGlzLl9pc0NoZWNrUmVxdWlyZWRcclxuICAgIH0pLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc29sdmUgPT4ge1xyXG4gICAgICBpZiAocmVzb2x2ZS5yZXN1bHQpIHtcclxuICAgICAgICB0aGlzLl9yb3dzID0gWy4uLnN0cnVjdHVyZWRDbG9uZSh0aGlzLl9yb3dzKSwgcmVzb2x2ZS5yb3dNb2RlbF07XHJcblxyXG4gICAgICAgIHRoaXMuX2luaXREYXRhU291cmNlKHRoaXMuX3Jvd3MpO1xyXG5cclxuICAgICAgICB0aGlzLl9jaGFuZ2VTdWJqZWN0JC5uZXh0KHRoaXMuX2J1aWxkVGFibGVWYWx1ZU1vZGVsKCkpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBkZWxldGVSb3coZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBjb25zdCBmaW5kUm93ID0gdGhpcy5fcm93cy5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PT0gZXZlbnQucm93LmRhdGEuaWQpO1xyXG5cclxuICAgIGlmIChmaW5kUm93KSB7XHJcbiAgICAgIHRoaXMuX3Jvd3MgPSB0aGlzLl9yb3dzLmZpbHRlcihpdGVtID0+IGl0ZW0uaWQgIT09IGV2ZW50LnJvdy5kYXRhLmlkKTtcclxuXHJcbiAgICAgIHRoaXMuX2luaXREYXRhU291cmNlKHRoaXMuX3Jvd3MpO1xyXG5cclxuICAgICAgdGhpcy5fY2hhbmdlU3ViamVjdCQubmV4dCh0aGlzLl9idWlsZFRhYmxlVmFsdWVNb2RlbCgpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhdGhpcy5fY2FuRWRpdE9iamVjdDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBlZGl0Um93KGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnN0IGZpbmRSb3c6IFRhYmxlUm93TW9kZWwgfCB1bmRlZmluZWQgPSB0aGlzLl9yb3dzLmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSBldmVudC5yb3cuZGF0YS5pZCk7XHJcblxyXG4gICAgaWYgKGZpbmRSb3cpIHtcclxuICAgICAgdGhpcy5fbW9kYWxTZXJ2aWNlLm9wZW4oSW5wdXRUYWJsZU1vZGFsQ29tcG9uZW50LCB7XHJcbiAgICAgICAgdGl0bGU6ICfQoNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNC1INGB0YLRgNC+0LrQuCcsXHJcbiAgICAgICAgb2tUZXh0OiAn0KHQvtGF0YDQsNC90LjRgtGMJyxcclxuICAgICAgICBzZXR0aW5nczogdGhpcy5zZXR0aW5ncyxcclxuICAgICAgICByb3dNb2RlbDogZmluZFJvd1xyXG4gICAgICB9KS5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXNvbHZlID0+IHtcclxuICAgICAgICBpZiAocmVzb2x2ZS5yZXN1bHQpIHtcclxuICAgICAgICAgIGNvbnN0IGNsb25lUm93cyA9IHN0cnVjdHVyZWRDbG9uZSh0aGlzLl9yb3dzKTtcclxuICAgICAgICAgIGNvbnN0IGVkaXRhYmxlUm93ID0gY2xvbmVSb3dzLmZpbmQocm93ID0+IHJvdy5pZCA9PT0gcmVzb2x2ZS5yb3dNb2RlbC5pZCk7XHJcblxyXG4gICAgICAgICAgaWYgKGVkaXRhYmxlUm93KSB7XHJcbiAgICAgICAgICAgIGVkaXRhYmxlUm93LmRhdGEgPSByZXNvbHZlLnJvd01vZGVsLmRhdGE7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9yb3dzID0gY2xvbmVSb3dzO1xyXG4gICAgICAgICAgICB0aGlzLl9pbml0RGF0YVNvdXJjZSh0aGlzLl9yb3dzKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZVN1YmplY3QkLm5leHQodGhpcy5fYnVpbGRUYWJsZVZhbHVlTW9kZWwoKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRGb3JtYXQoY29tcG9uZW50OiBDb21wb25lbnRNb2RlbEJhc2UpIHtcclxuICAgIHN3aXRjaCAoY29tcG9uZW50LnR5cGUpIHtcclxuICAgICAgY2FzZSBDb21wb25lbnRUeXBlLklucHV0RGF0ZTpcclxuICAgICAgICBzd2l0Y2ggKChjb21wb25lbnQgYXMgSW5wdXREYXRlTW9kZWwpLm9wdGlvbnMudmlld1R5cGUpIHtcclxuICAgICAgICAgIGNhc2UgRGF0ZVR5cGVFbnVtLkRhdGVUaW1lOlxyXG4gICAgICAgICAgICByZXR1cm4gJ2RkLk1NLnl5eXkgaGg6bW0nO1xyXG4gICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuICdkZC5NTS55eXl5JztcclxuICAgICAgICB9XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldERhdGFUeXBlKGNvbXBvbmVudDogQ29tcG9uZW50TW9kZWxCYXNlKSB7XHJcbiAgICBzd2l0Y2ggKGNvbXBvbmVudC50eXBlKSB7XHJcbiAgICAgIGNhc2UgQ29tcG9uZW50VHlwZS5JbnB1dERhdGU6XHJcbiAgICAgICAgcmV0dXJuICdkYXRlJztcclxuICAgICAgY2FzZSBDb21wb25lbnRUeXBlLklucHV0U3dpdGNoOlxyXG4gICAgICAgIHJldHVybiAnYm9vbGVhbidcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gJ3N0cmluZyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2hvd1RvdGFsKGNvbXBvbmVudDogQ29tcG9uZW50TW9kZWxCYXNlKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoY29tcG9uZW50LnR5cGUgPT09IENvbXBvbmVudFR5cGUuSW5wdXROdW1iZXIpIHtcclxuICAgICAgY29uc3QgZWxlbWVudDogSW5wdXROdW1iZXJNb2RlbCA9IGNvbXBvbmVudCBhcyBJbnB1dE51bWJlck1vZGVsO1xyXG5cclxuICAgICAgcmV0dXJuIGVsZW1lbnQub3B0aW9ucy5pblRvdGFscztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaXNUb3RhbENvbHVtbihjb21wb25lbnQ6IENvbXBvbmVudE1vZGVsQmFzZSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChjb21wb25lbnQgYXMgSW5wdXROdW1iZXJNb2RlbCkub3B0aW9ucy5pblRvdGFscztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2luaXRNb2RlbCgpIHtcclxuICAgIHRoaXMubW9kZWwgPSB7XHJcbiAgICAgIHN5c05hbWU6IHRoaXMuc2V0dGluZ3Muc3lzTmFtZSxcclxuICAgICAgdHlwZTogdGhpcy5zZXR0aW5ncy50eXBlLFxyXG4gICAgICBkYXRhOiBbXSxcclxuICAgICAgdG90YWxzOiBbXVxyXG4gICAgfTtcclxuICAgIHRoaXMuX3Jvd3MgPSBbXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2luaXREYXRhU291cmNlKGRhdGE6IFRhYmxlUm93TW9kZWxbXSkge1xyXG4gICAgdGhpcy5kYXRhU291cmNlID0gZGF0YS5tYXAoKGl0ZW06IFRhYmxlUm93TW9kZWwpID0+IHtcclxuICAgICAgY29uc3QgbmV3RGF0YUl0ZW06IGFueSA9IHt9O1xyXG5cclxuICAgICAgZm9yIChsZXQgaSBpbiBpdGVtLmRhdGEpIHtcclxuICAgICAgICBuZXdEYXRhSXRlbVtpdGVtLmRhdGFbaV0uc3lzTmFtZV0gPSBpdGVtLmRhdGFbaV0udmFsdWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG5ld0RhdGFJdGVtLmlkID0gaXRlbS5pZDtcclxuXHJcbiAgICAgIHJldHVybiBuZXdEYXRhSXRlbTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuX2RldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICBpZiAodGhpcy5kYXRhR3JpZD8uaW5zdGFuY2UpIHtcclxuICAgICAgdGhpcy5kYXRhR3JpZC5pbnN0YW5jZS5yZWZyZXNoKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pbml0Q29sdW1ucyhjb21wb25lbnRzOiBDb21wb25lbnRNb2RlbEJhc2VbXSkge1xyXG4gICAgdGhpcy5jb2x1bW5zID0gY29tcG9uZW50cy5tYXAoYyA9PiB0aGlzLl90cmFuc2Zvcm1Db2x1bW4oc3RydWN0dXJlZENsb25lKGMpKSk7XHJcblxyXG4gICAgdGhpcy5jb2x1bW5zLnB1c2goe1xyXG4gICAgICBjYXB0aW9uOiAnJyxcclxuICAgICAgdHlwZTogJ2J1dHRvbnMnLFxyXG4gICAgICB3aWR0aDogODAsXHJcbiAgICAgIGNzc0NsYXNzOiAnY3VzdG9tLWNlbGwtY29udHJvbHMnLFxyXG4gICAgICBidXR0b25zOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdGVtcGxhdGU6ICdlZGl0QnV0dG9uVGVtcGxhdGUnLFxyXG4gICAgICAgICAgaGludDogJ9Cg0LXQtNCw0LrRgtC40YDQvtCy0LDRgtGMJyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHRlbXBsYXRlOiAnZGVsZXRlQnV0dG9uVGVtcGxhdGUnLFxyXG4gICAgICAgICAgaGludDogJ9Cj0LTQsNC70LjRgtGMJyxcclxuICAgICAgICB9LFxyXG4gICAgICBdLFxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuZGF0YUdyaWQ/Lmluc3RhbmNlKSB7XHJcbiAgICAgIHRoaXMuZGF0YUdyaWQuaW5zdGFuY2UucmVwYWludCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fZGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdHJhbnNmb3JtQ29sdW1uKGNvbXBvbmVudDogQ29tcG9uZW50TW9kZWxCYXNlKTogQ29sdW1uTW9kZWwge1xyXG4gICAgY29uc3QgZGF0YVR5cGUgPSB0aGlzLmdldERhdGFUeXBlKGNvbXBvbmVudCk7XHJcblxyXG4gICAgY29uc3QgY29sdW1uOiBDb2x1bW5Nb2RlbCA9IHtcclxuICAgICAgY2FwdGlvbjogY29tcG9uZW50Lm9wdGlvbnMubGFiZWwgfHwgJycsXHJcbiAgICAgIGNvbHVtbnM6IGNvbXBvbmVudC5jb21wb25lbnRzLm1hcChjID0+IHRoaXMuX3RyYW5zZm9ybUNvbHVtbihzdHJ1Y3R1cmVkQ2xvbmUoYykpKSxcclxuICAgICAgZGF0YUZpZWxkOiBjb21wb25lbnQuc3lzTmFtZSxcclxuICAgICAgZGF0YVR5cGU6IHRoaXMuZ2V0RGF0YVR5cGUoY29tcG9uZW50KSxcclxuICAgICAgZm9ybWF0OiB0aGlzLmdldEZvcm1hdChjb21wb25lbnQpLFxyXG4gICAgICBtaW5XaWR0aDogMTYwXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRhdGFUeXBlID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgY29sdW1uLmNhbGN1bGF0ZUNlbGxWYWx1ZSA9IChyb3dEYXRhOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IHJvd0RhdGFbY29tcG9uZW50LnN5c05hbWVdO1xyXG4gICAgICAgIC8vINCV0YHQu9C4IHRydWUg4oCUINCU0LAsINC10YHQu9C4IGZhbHNlLCBcIlwiINC40LvQuCBudWxsIOKAlCDQndC10YJcclxuICAgICAgICByZXR1cm4gISF2YWx1ZTsgXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBjb2x1bW4ubG9va3VwID0ge1xyXG4gICAgICAgIGRhdGFTb3VyY2U6IFtcclxuICAgICAgICAgIHsgdmFsdWU6IHRydWUsIGRpc3BsYXlWYWx1ZTogJ9CU0LAnIH0sXHJcbiAgICAgICAgICB7IHZhbHVlOiBmYWxzZSwgZGlzcGxheVZhbHVlOiAn0J3QtdGCJyB9XHJcbiAgICAgICAgXSxcclxuICAgICAgICB2YWx1ZUV4cHI6ICd2YWx1ZScsXHJcbiAgICAgICAgZGlzcGxheUV4cHI6ICdkaXNwbGF5VmFsdWUnXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbXBvbmVudC50eXBlID09PSBDb21wb25lbnRUeXBlLklucHV0U2VsZWN0KSB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdE1vZGVsID0gY29tcG9uZW50IGFzIElucHV0U2VsZWN0TW9kZWw7XHJcblxyXG4gICAgICBpZiAoc2VsZWN0TW9kZWwub3B0aW9ucy5tYW51YWwpIHtcclxuICAgICAgICBjb2x1bW4ubG9va3VwID0ge1xyXG4gICAgICAgICAgZGF0YVNvdXJjZTogc2VsZWN0TW9kZWwub3B0aW9ucy5pdGVtcyxcclxuICAgICAgICAgIHZhbHVlRXhwcjogJ3ZhbHVlJyxcclxuICAgICAgICAgIGRpc3BsYXlFeHByOiAndGV4dCdcclxuICAgICAgICB9O1xyXG4gICAgICB9IGVsc2UgaWYgKHNlbGVjdE1vZGVsLm9wdGlvbnMuZGlyZWN0b3J5Py5bMF0pIHtcclxuICAgICAgICBjb25zdCBkaXJlY3RvcnlOYW1lID0gc2VsZWN0TW9kZWwub3B0aW9ucy5kaXJlY3RvcnlbMF07XHJcblxyXG4gICAgICAgIGNvbHVtbi5sb29rdXAgPSB7XHJcbiAgICAgICAgICAvLyDQntCx0L7RgNCw0YfQuNCy0LDQtdC8INCyIEN1c3RvbVN0b3JlINC00LvRjyDRgdC+0L7RgtCy0LXRgtGB0YLQstC40Y8g0YLQuNC/0LDQvCBEZXZFeHRyZW1lXHJcbiAgICAgICAgICBkYXRhU291cmNlOiBuZXcgQ3VzdG9tU3RvcmUoe1xyXG4gICAgICAgICAgICBrZXk6ICd2YWx1ZScsXHJcbiAgICAgICAgICAgIGxvYWQ6ICgpID0+IHRoaXMuZ2V0TG9va3VwRGF0YShkaXJlY3RvcnlOYW1lKSxcclxuICAgICAgICAgICAgYnlLZXk6IChrZXkpID0+IHRoaXMuZ2V0TG9va3VwRGF0YShkaXJlY3RvcnlOYW1lKS50aGVuKGl0ZW1zID0+IGl0ZW1zLmZpbmQoaSA9PiBpLnZhbHVlID09PSBrZXkpKVxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICB2YWx1ZUV4cHI6ICd2YWx1ZScsXHJcbiAgICAgICAgICBkaXNwbGF5RXhwcjogJ3RleHQnXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNldHRpbmdzLm9wdGlvbnMuZ3JvdXBzLmxlbmd0aCkge1xyXG4gICAgICBjb25zdCBmaW5kSWR4ID0gdGhpcy5zZXR0aW5ncy5vcHRpb25zLmdyb3Vwcy5maW5kSW5kZXgoeCA9PiB4ID09PSBjb21wb25lbnQuc3lzTmFtZSk7XHJcblxyXG4gICAgICBpZiAoZmluZElkeCAhPT0gLTEpIHtcclxuICAgICAgICBjb2x1bW4uZ3JvdXBJbmRleCA9IGZpbmRJZHhcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjb2x1bW5cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0TG9va3VwRGF0YShkaXJlY3RvcnlOYW1lOiBzdHJpbmcpOiBQcm9taXNlPGFueVtdPiB7XHJcbiAgICAvLyDQn9GA0L7QstC10YDRj9C10Lwg0LrRjdGIXHJcbiAgICBpZiAodGhpcy5fbG9va3Vwc0NhY2hlLmhhcyhkaXJlY3RvcnlOYW1lKSkge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2xvb2t1cHNDYWNoZS5nZXQoZGlyZWN0b3J5TmFtZSkhKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyDQl9Cw0L/RgNCw0YjQuNCy0LDQtdC8INC00LDQvdC90YvQtSAo0LjRgdC/0L7Qu9GM0LfRg9C10Lwg0YLQvtGCINC20LUgb2JqZWN0SWQsINGH0YLQviDQuCDQsiDQvNC+0LTQsNC70LrQtSlcclxuICAgIC8vINCj0LHQtdC00LjRgtC10YHRjCwg0YfRgtC+IG9iamVjdElkINC00L7RgdGC0YPQv9C10L0g0LIg0Y3RgtC+0Lwg0LrQvtC80L/QvtC90LXQvdGC0LVcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICB0aGlzLl9yZWZlcmVuY2VTZXJ2aWNlLmdldFJlZmVyZW5jZXMoZGlyZWN0b3J5TmFtZSwgKHRoaXMgYXMgYW55KS5vYmplY3RJZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBpdGVtcyA9IChyZXN1bHQ/LnJvd3MgfHwgW10pLm1hcCgocm93OiBhbnkpID0+ICh7XHJcbiAgICAgICAgICAgIHZhbHVlOiByb3cuYSxcclxuICAgICAgICAgICAgdGV4dDogcm93LmJcclxuICAgICAgICAgIH0pKTtcclxuICAgICAgICAgIHRoaXMuX2xvb2t1cHNDYWNoZS5zZXQoZGlyZWN0b3J5TmFtZSwgaXRlbXMpO1xyXG4gICAgICAgICAgcmVzb2x2ZShpdGVtcyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKCkgPT4gcmVzb2x2ZShbXSlcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2J1aWxkVGFibGVWYWx1ZU1vZGVsKCk6IFRhYmxlVmFsdWVNb2RlbCB7XHJcbiAgICBjb25zdCBncm91cGVkRGF0YSA9IHRoaXMuX2J1aWxkR3JvdXBlZEl0ZW1zKHRoaXMuX3Jvd3MsIHRoaXMuc2V0dGluZ3Mub3B0aW9ucy5ncm91cHMgfHwgW10sIDApO1xyXG4gICAgY29uc3QgdG90YWxzID0gdGhpcy5fY2FsY3VsYXRlVG90YWxzKHRoaXMuX3Jvd3MpO1xyXG5cclxuICAgIHRoaXMubW9kZWwgPSB7XHJcbiAgICAgIHN5c05hbWU6IHRoaXMuc2V0dGluZ3Muc3lzTmFtZSxcclxuICAgICAgdHlwZTogdGhpcy5zZXR0aW5ncy50eXBlLFxyXG4gICAgICBkYXRhOiBncm91cGVkRGF0YSxcclxuICAgICAgdG90YWxzXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5tb2RlbCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9idWlsZEdyb3VwZWRJdGVtcyhyb3dzOiBUYWJsZVJvd01vZGVsW10sIGdyb3VwRmllbGRzOiBzdHJpbmdbXSwgbGV2ZWw6IG51bWJlcik6IFRhYmxlSXRlbVtdIHtcclxuICAgIGlmICghZ3JvdXBGaWVsZHMubGVuZ3RoIHx8IGxldmVsID49IGdyb3VwRmllbGRzLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm4gcm93cy5tYXAocm93ID0+ICh7IC4uLnJvdywgaXRlbVR5cGU6IHJvdy5pdGVtVHlwZSA/PyBUYWJsZUl0ZW1UeXBlLlJvdyB9KSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZ3JvdXBGaWVsZCA9IGdyb3VwRmllbGRzW2xldmVsXTtcclxuICAgIGNvbnN0IGdyb3VwcyA9IG5ldyBNYXA8c3RyaW5nLCB7IHJvd3M6IFRhYmxlUm93TW9kZWxbXSwgZ3JvdXBWYWx1ZVN5c05hbWU6IHN0cmluZyB9PigpO1xyXG5cclxuICAgIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHtcclxuICAgICAgY29uc3QgZmllbGRWYWx1ZSA9IHJvdy5kYXRhLmZpbmQoeCA9PiB4LnN5c05hbWUgPT09IGdyb3VwRmllbGQpPy52YWx1ZSA/PyBudWxsO1xyXG4gICAgICBjb25zdCBrZXkgPSBKU09OLnN0cmluZ2lmeShmaWVsZFZhbHVlKTtcclxuICAgICAgY29uc3QgZXhpc3RpbmcgPSBncm91cHMuZ2V0KGtleSkgPz8ge1xyXG4gICAgICAgIHJvd3M6IFtdLFxyXG4gICAgICAgIGdyb3VwVmFsdWVTeXNOYW1lOiB0aGlzLl9nZXRHcm91cFZhbHVlU3lzTmFtZShmaWVsZFZhbHVlLCBncm91cEZpZWxkKVxyXG4gICAgICB9O1xyXG4gICAgICBleGlzdGluZy5yb3dzLnB1c2gocm93KTtcclxuICAgICAgZ3JvdXBzLnNldChrZXksIGV4aXN0aW5nKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZXN1bHQ6IFRhYmxlSXRlbVtdID0gW107XHJcblxyXG4gICAgZm9yIChjb25zdCBncm91cEl0ZW0gb2YgZ3JvdXBzLnZhbHVlcygpKSB7XHJcbiAgICAgIGNvbnN0IG5lc3RlZERhdGEgPSB0aGlzLl9idWlsZEdyb3VwZWRJdGVtcyhncm91cEl0ZW0ucm93cywgZ3JvdXBGaWVsZHMsIGxldmVsICsgMSk7XHJcbiAgICAgIGNvbnN0IGdyb3VwTW9kZWw6IFRhYmxlR3JvdXBNb2RlbCA9IHtcclxuICAgICAgICBpdGVtVHlwZTogVGFibGVJdGVtVHlwZS5Hcm91cCxcclxuICAgICAgICBkYXRhOiBuZXN0ZWREYXRhLFxyXG4gICAgICAgIHRvdGFsczogdGhpcy5fY2FsY3VsYXRlVG90YWxzKGdyb3VwSXRlbS5yb3dzLCBncm91cEl0ZW0uZ3JvdXBWYWx1ZVN5c05hbWUpXHJcbiAgICAgIH07XHJcblxyXG4gICAgICByZXN1bHQucHVzaChncm91cE1vZGVsKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2FsY3VsYXRlVG90YWxzKHJvd3M6IFRhYmxlUm93TW9kZWxbXSwgZ3JvdXBGaWVsZFN5c05hbWU/OiBzdHJpbmcpOiBDb21wb25lbnRWYWx1ZU1vZGVsW10ge1xyXG4gICAgY29uc3QgdG90YWxDb2x1bW5zID0gdGhpcy5fZ2V0VG90YWxDb2x1bW5zKHRoaXMuc2V0dGluZ3MuY29tcG9uZW50cyk7XHJcblxyXG4gICAgcmV0dXJuIHRvdGFsQ29sdW1ucy5tYXAoY29tcG9uZW50ID0+IHtcclxuICAgICAgY29uc3Qgc3VtID0gcm93cy5yZWR1Y2UoKGFjYywgcm93KSA9PiB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSByb3cuZGF0YS5maW5kKHggPT4geC5zeXNOYW1lID09PSBjb21wb25lbnQuc3lzTmFtZSk/LnZhbHVlO1xyXG4gICAgICAgIGNvbnN0IG51bWVyaWNWYWx1ZSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgPyB2YWx1ZSA6IE51bWJlcih2YWx1ZSk7XHJcblxyXG4gICAgICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUobnVtZXJpY1ZhbHVlKSA/IGFjYyArIG51bWVyaWNWYWx1ZSA6IGFjYztcclxuICAgICAgfSwgMCk7XHJcblxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHN5c05hbWU6IHRoaXMuX2dldFRvdGFsU3lzTmFtZShjb21wb25lbnQuc3lzTmFtZSwgZ3JvdXBGaWVsZFN5c05hbWUpLFxyXG4gICAgICAgIHR5cGU6IGNvbXBvbmVudC50eXBlLFxyXG4gICAgICAgIHZhbHVlVHlwZTogY29tcG9uZW50LnZhbHVlVHlwZSxcclxuICAgICAgICB2YWx1ZTogc3VtXHJcbiAgICAgIH0gYXMgQ29tcG9uZW50VmFsdWVNb2RlbDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0VG90YWxTeXNOYW1lKGNvbHVtblN5c05hbWU6IHN0cmluZywgZ3JvdXBGaWVsZFN5c05hbWU/OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKGdyb3VwRmllbGRTeXNOYW1lKSB7XHJcbiAgICAgIHJldHVybiBgJHtjb2x1bW5TeXNOYW1lfV8ke2dyb3VwRmllbGRTeXNOYW1lfV90b3RhbGA7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGAke2NvbHVtblN5c05hbWV9X3RvdGFsYDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldEdyb3VwVmFsdWVTeXNOYW1lKGZpZWxkVmFsdWU6IGFueSwgZmFsbGJhY2tTeXNOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZmllbGRWYWx1ZSkgJiYgZmllbGRWYWx1ZS5sZW5ndGgpIHtcclxuICAgICAgY29uc3QgZmlyc3RWYWx1ZSA9IGZpZWxkVmFsdWVbMF07XHJcbiAgICAgIGlmICh0eXBlb2YgZmlyc3RWYWx1ZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGZpcnN0VmFsdWUgPT09ICdudW1iZXInIHx8IHR5cGVvZiBmaXJzdFZhbHVlID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgICByZXR1cm4gU3RyaW5nKGZpcnN0VmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGZpZWxkVmFsdWUgJiYgdHlwZW9mIGZpZWxkVmFsdWUgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgIGlmICh0eXBlb2YgZmllbGRWYWx1ZS52YWx1ZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGZpZWxkVmFsdWUudmFsdWUgPT09ICdudW1iZXInIHx8IHR5cGVvZiBmaWVsZFZhbHVlLnZhbHVlID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgICByZXR1cm4gU3RyaW5nKGZpZWxkVmFsdWUudmFsdWUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodHlwZW9mIGZpZWxkVmFsdWUuc3lzTmFtZSA9PT0gJ3N0cmluZycgJiYgZmllbGRWYWx1ZS5zeXNOYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIGZpZWxkVmFsdWUuc3lzTmFtZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2YgZmllbGRWYWx1ZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGZpZWxkVmFsdWUgPT09ICdudW1iZXInIHx8IHR5cGVvZiBmaWVsZFZhbHVlID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgcmV0dXJuIFN0cmluZyhmaWVsZFZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsbGJhY2tTeXNOYW1lO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0VG90YWxDb2x1bW5zKGNvbXBvbmVudHM6IENvbXBvbmVudE1vZGVsQmFzZVtdKTogSW5wdXROdW1iZXJNb2RlbFtdIHtcclxuICAgIGNvbnN0IHJlc3VsdDogSW5wdXROdW1iZXJNb2RlbFtdID0gW107XHJcblxyXG4gICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cykge1xyXG4gICAgICBpZiAoY29tcG9uZW50LnR5cGUgPT09IENvbXBvbmVudFR5cGUuSW5wdXROdW1iZXIgJiYgdGhpcy5zaG93VG90YWwoY29tcG9uZW50KSkge1xyXG4gICAgICAgIHJlc3VsdC5wdXNoKGNvbXBvbmVudCBhcyBJbnB1dE51bWJlck1vZGVsKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGNvbXBvbmVudC5jb21wb25lbnRzPy5sZW5ndGgpIHtcclxuICAgICAgICByZXN1bHQucHVzaCguLi50aGlzLl9nZXRUb3RhbENvbHVtbnMoY29tcG9uZW50LmNvbXBvbmVudHMpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9leHRyYWN0Um93cyhpdGVtczogVGFibGVJdGVtW10gPSBbXSk6IFRhYmxlUm93TW9kZWxbXSB7XHJcbiAgICBjb25zdCByb3dzOiBUYWJsZVJvd01vZGVsW10gPSBbXTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcclxuICAgICAgaWYgKHRoaXMuX2lzUm93KGl0ZW0pKSB7XHJcbiAgICAgICAgcm93cy5wdXNoKHtcclxuICAgICAgICAgIC4uLml0ZW0sXHJcbiAgICAgICAgICBpdGVtVHlwZTogVGFibGVJdGVtVHlwZS5Sb3dcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBncm91cCA9IGl0ZW0gYXMgVGFibGVHcm91cE1vZGVsO1xyXG4gICAgICAgIGlmIChncm91cC5kYXRhPy5sZW5ndGgpIHtcclxuICAgICAgICAgIHJvd3MucHVzaCguLi50aGlzLl9leHRyYWN0Um93cyhncm91cC5kYXRhKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJvd3M7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pc1JvdyhpdGVtOiBUYWJsZUl0ZW0pOiBpdGVtIGlzIFRhYmxlUm93TW9kZWwge1xyXG4gICAgY29uc3QgbWF5YmVSb3cgPSBpdGVtIGFzIFRhYmxlUm93TW9kZWw7XHJcbiAgICByZXR1cm4gdHlwZW9mIG1heWJlUm93LmlkID09PSAnc3RyaW5nJyAmJiBBcnJheS5pc0FycmF5KG1heWJlUm93LmRhdGEpO1xyXG4gIH1cclxufVxyXG4iLCJAaWYgKHNldHRpbmdzKSB7XHJcbiAgPGRpdiBjbGFzcz1cImlucHV0LXRhYmxlLWNvbnRlbnQgdy0xMDBcIj5cclxuICAgIEBpZiAoc2V0dGluZ3Mub3B0aW9ucy5sYWJlbCkge1xyXG4gICAgICA8bXJ4LWxhYmVsXHJcbiAgICAgICAgW3JlcXVpcmVkXT1cInNldHRpbmdzLm9wdGlvbnMucmVxdWlyZWRcIlxyXG4gICAgICAgIFt0b29sdGlwXT1cInNldHRpbmdzLm9wdGlvbnMudG9vbHRpcCB8fCAnJ1wiXHJcbiAgICAgID5cclxuICAgICAgICB7eyBzZXR0aW5ncy5vcHRpb25zLmxhYmVsIH19XHJcbiAgICAgIDwvbXJ4LWxhYmVsPlxyXG4gICAgfVxyXG5cclxuICAgIDxkeC1kYXRhLWdyaWRcclxuICAgICAgI2RhdGFHcmlkXHJcbiAgICAgIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIlxyXG4gICAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcclxuICAgICAgbm9EYXRhVGV4dD1cItCd0LXRgiDQtNCw0L3QvdGL0YVcIlxyXG4gICAgICBzdHlsZT1cIndpZHRoOiAxMDAlXCJcclxuICAgICAgW3dvcmRXcmFwRW5hYmxlZF09XCJ0cnVlXCJcclxuICAgICAgW2NvbHVtbkF1dG9XaWR0aF09XCJ0cnVlXCJcclxuICAgICAgW2NsYXNzLm5vRGF0YV09XCJpc1JlZE5vRGF0YVwiXHJcbiAgICA+XHJcbiAgICAgIEBpZihkaXNhYmxlZCkge1xyXG4gICAgICAgIDxkeG8tdG9vbGJhcj5cclxuICAgICAgICAgIDxkeGktaXRlbSBsb2NhdGlvbj1cImFmdGVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgKmR4VGVtcGxhdGUgY2xhc3M9XCJhZGQtcm93XCI+XHJcbiAgICAgICAgICAgICAgPG1yeC1idXR0b25cclxuICAgICAgICAgICAgICAgIFtzaXplXT1cIidtZWRpdW0nXCJcclxuICAgICAgICAgICAgICAgIFt0eXBlXT1cIidzZWNvbmRhcnknXCJcclxuICAgICAgICAgICAgICAgIFtjdXN0b21DbGFzc2VzXT1cIidtYi0zJ1wiXHJcbiAgICAgICAgICAgICAgICAobXJ4Q2xpY2spPVwiY3JlYXRlUm93KClcIlxyXG4gICAgICAgICAgICAgID57e3NldHRpbmdzLm9wdGlvbnMuYWRkQnRuVGl0bGV9fVxyXG4gICAgICAgICAgICAgIDwvbXJ4LWJ1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2R4aS1pdGVtPlxyXG4gICAgICAgIDwvZHhvLXRvb2xiYXI+XHJcblxyXG4gICAgICAgIDxkaXYgKmR4VGVtcGxhdGU9XCJsZXQgYnV0dG9uRGF0YSBvZiAnZWRpdEJ1dHRvblRlbXBsYXRlJ1wiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcngtaWNvbiBpY29uLWVkaXQgaWNvbi1mb250LTE2IGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cImVkaXRSb3coYnV0dG9uRGF0YSlcIj48L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgKmR4VGVtcGxhdGU9XCJsZXQgYnV0dG9uRGF0YSBvZiAnZGVsZXRlQnV0dG9uVGVtcGxhdGUnXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1yeC1pY29uIGljb24tZGVsZXRlIGljb24tZm9udC0xNiBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJkZWxldGVSb3coYnV0dG9uRGF0YSlcIj48L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIEBpZiAoZGF0YVNvdXJjZS5sZW5ndGgpIHtcclxuICAgICAgICA8ZHhvLXN1bW1hcnk+XHJcbiAgICAgICAgICBAZm9yIChjb21wb25lbnQgb2Ygc2V0dGluZ3MuY29tcG9uZW50czsgdHJhY2sgY29tcG9uZW50LmlkOyBsZXQgZmlyc3QgPSAkZmlyc3QpIHtcclxuICAgICAgICAgICAgQGlmICghZmlyc3QpIHtcclxuICAgICAgICAgICAgICBAaWYgKHNob3dUb3RhbChjb21wb25lbnQpKSB7XHJcbiAgICAgICAgICAgICAgICA8ZHhpLWdyb3VwLWl0ZW1cclxuICAgICAgICAgICAgICAgICAgW2NvbHVtbl09XCJjb21wb25lbnQuc3lzTmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgIHN1bW1hcnlUeXBlPVwic3VtXCJcclxuICAgICAgICAgICAgICAgICAgZGlzcGxheUZvcm1hdD1cItCY0YLQvtCz0L46IHswfVwiXHJcbiAgICAgICAgICAgICAgICAgIFtzaG93SW5Hcm91cEZvb3Rlcl09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgW2FsaWduQnlDb2x1bW5dPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgPC9keGktZ3JvdXAtaXRlbT5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZHhpLXRvdGFsLWl0ZW0gXHJcbiAgICAgICAgICAgICAgICAgIFtjb2x1bW5dPVwiY29tcG9uZW50LnN5c05hbWVcIiBcclxuICAgICAgICAgICAgICAgICAgZGlzcGxheUZvcm1hdD1cInswfVwiXHJcbiAgICAgICAgICAgICAgICAgIHN1bW1hcnlUeXBlPVwic3VtXCJcclxuICAgICAgICAgICAgICAgID48L2R4aS10b3RhbC1pdGVtPlxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgQGZvciAoY29tcG9uZW50IG9mIGNvbXBvbmVudC5jb21wb25lbnRzOyB0cmFjayBjb21wb25lbnQuaWQpIHtcclxuICAgICAgICAgICAgICAgIEBpZiAoc2hvd1RvdGFsKGNvbXBvbmVudCkpIHtcclxuICAgICAgICAgICAgICAgICAgPGR4aS1ncm91cC1pdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgW2NvbHVtbl09XCJjb21wb25lbnQuc3lzTmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3VtbWFyeVR5cGU9XCJzdW1cIlxyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXlGb3JtYXQ9XCLQmNGC0L7Qs9C+OiB7MH1cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzaG93SW5Hcm91cEZvb3Rlcl09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICBbYWxpZ25CeUNvbHVtbl09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwvZHhpLWdyb3VwLWl0ZW0+XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgQGZvciAoY29tcG9uZW50IG9mIGNvbXBvbmVudC5jb21wb25lbnRzOyB0cmFjayBjb21wb25lbnQuaWQpIHtcclxuICAgICAgICAgICAgICAgICAgQGlmIChzaG93VG90YWwoY29tcG9uZW50KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIDxkeGktZ3JvdXAtaXRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbl09XCJjb21wb25lbnQuc3lzTmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5VHlwZT1cInN1bVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5Rm9ybWF0PVwi0JjRgtC+0LPQvjogezB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtzaG93SW5Hcm91cEZvb3Rlcl09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFthbGlnbkJ5Q29sdW1uXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2R4aS1ncm91cC1pdGVtPlxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAgICBAaWYgKGhhc0FueVRvdGFsKSB7IFxyXG4gICAgICAgICAgICAgICAgPGR4aS10b3RhbC1pdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgW2NvbHVtbl09XCJjb21wb25lbnQuc3lzTmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Nzc0NsYXNzXT1cIid0ZXh0LWJvbGQnXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzcGxheUZvcm1hdF09XCJzaG93VG90YWwoY29tcG9uZW50KSA/ICd7MH0nIDogJ9CY0KLQntCT0J4nXCJcclxuICAgICAgICAgICAgICAgICAgICBbc3VtbWFyeVR5cGVdPVwic2hvd1RvdGFsKGNvbXBvbmVudCkgPyAnc3VtJyA6IHVuZGVmaW5lZFwiXHJcbiAgICAgICAgICAgICAgICA+PC9keGktdG90YWwtaXRlbT5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L2R4by1zdW1tYXJ5PlxyXG4gICAgICB9XHJcbiAgICA8L2R4LWRhdGEtZ3JpZD5cclxuXHJcbiAgICBAaWYoISFzZXR0aW5ncy5vcHRpb25zLm1heFJvd3MpIHtcclxuICAgICAgPG1yeC1oaW50LWVycm9yLW1lc3NhZ2VcclxuICAgICAgICBtZXNzYWdlPVwi0JzQsNC60YHQuNC80LDQu9GM0L3QvtC1INC60L7Qu9C40YfQtdGB0YLQstC+INGB0YLRgNC+0Lo6IHt7IHNldHRpbmdzLm9wdGlvbnMubWF4Um93cyB9fVwiXHJcbiAgICAgICAgW21heFZhbHVlXT1cInNldHRpbmdzLm9wdGlvbnMubWF4Um93c1wiXHJcbiAgICAgICAgW3ZhbHVlXT1cInJvd3NDb3VudFwiXHJcbiAgICAgID48L21yeC1oaW50LWVycm9yLW1lc3NhZ2U+XHJcbiAgICB9XHJcblxyXG4gICAgQGlmKGRpc2FibGVkKSB7XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjZWRpdFRlbXBsYXRlIGxldC1jZWxsSW5mbz1cImNlbGxJbmZvXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiIHN0eWxlPVwiZ2FwOiA0cHhcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXJ4LWljb24gaWNvbi1lZGl0IGljb24tZm9udC0xNiBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJlZGl0Um93KGNlbGxJbmZvKVwiPjwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXJ4LWljb24gaWNvbi1kZWxldGUgaWNvbi1mb250LTE2IGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cImRlbGV0ZVJvdyhjZWxsSW5mbylcIj48L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcbn1cclxuXHJcblxyXG4iXX0=
|