imm-element-ui 2.9.9 → 3.0.2
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/grid/grid/grid.component.mjs +1 -1
- package/esm2022/lib/page-form/page-form.component.mjs +30 -8
- package/esm2022/lib/page-form/page-form.interface.mjs +1 -1
- package/esm2022/lib/share/utils.mjs +3 -3
- package/fesm2022/imm-element-ui.mjs +31 -9
- package/fesm2022/imm-element-ui.mjs.map +1 -1
- package/lib/grid/grid/grid.component.d.ts +2 -2
- package/lib/page-form/page-form.component.d.ts +1 -1
- package/lib/page-form/page-form.interface.d.ts +13 -1
- package/package.json +1 -1
|
@@ -14,4 +14,4 @@ export const formTypeToProps = {
|
|
|
14
14
|
codemirror: 'codeMirrorProps',
|
|
15
15
|
rowselector: 'rowSelectorProps',
|
|
16
16
|
};
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1mb3JtLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ltbS1lbGVtZW50LXVpL3NyYy9saWIvcGFnZS1mb3JtL3BhZ2UtZm9ybS5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBNElBLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBUTtJQUNuQyxTQUFTLEVBQUUsZ0JBQWdCO0lBQzNCLFdBQVcsRUFBRSxrQkFBa0I7SUFDL0IsTUFBTSxFQUFFLGFBQWE7SUFDckIsVUFBVSxFQUFFLGlCQUFpQjtJQUM3QixVQUFVLEVBQUUsaUJBQWlCO0lBQzdCLFlBQVksRUFBRSxtQkFBbUI7SUFDakMsV0FBVyxFQUFFLGtCQUFrQjtJQUMvQixLQUFLLEVBQUUsWUFBWTtJQUNuQixRQUFRLEVBQUUsZUFBZTtJQUN6QixNQUFNLEVBQUUsYUFBYTtJQUNyQixLQUFLLEVBQUUsWUFBWTtJQUNuQixZQUFZLEVBQUUsbUJBQW1CO0lBQ2pDLFVBQVUsRUFBRSxpQkFBaUI7SUFDN0IsV0FBVyxFQUFFLGtCQUFrQjtDQUMvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR3JpZE9wdGlvbnMgfSBmcm9tICcuLi9ncmlkL2dyaWQvZ3JpZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2VhcmNoIH0gZnJvbSAnLi4vYW0vYW0uY29tcG9uZW50JztcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcbmltcG9ydCB7IFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgdHlwZSB7IFBhZ2VGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi9wYWdlLWZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IFNhZmVBbnkgfSBmcm9tICdpbW0tYmknO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN1YlNhdmVDb25maWcge1xuXHRlbmFibGVkPzogYm9vbGVhbjtcblx0bGFiZWw/OiBzdHJpbmc7XG5cdGhpZGRlbj86IEZ1bmN0aW9uO1xuXHRzYXZlRnVuYz86IGFueTtcbn1cblxuZXhwb3J0IHR5cGUgR3JpZERlbGV0ZUZ1bmMgPSAoaWRzOiBhbnlbXSwgZ3JpZDogR3JpZExpc3QsIGNiPzogRnVuY3Rpb24pID0+IHZvaWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3ViQWRkQ29udGV4dCB7XG5cdGRhdGE6IGFueTtcblx0Z3JpZDogR3JpZExpc3Q7XG5cdHBhZ2VGb3JtOiBQYWdlRm9ybUNvbXBvbmVudDtcblx0Y29tcG9uZW50OiBhbnk7XG5cdGluZGV4OiBudW1iZXI7XG5cdGF1dGhMZXZlbDogbnVtYmVyO1xuXHRnZXRQcm06IGFueTtcblx0cnVudGltZUNvbnRleHQ6IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5cbmV4cG9ydCB0eXBlIEdyaWRBZGRGdW5jID0gKGNvbnRleHQ6IFN1YkFkZENvbnRleHQpID0+IHZvaWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSHJlZkJ0bkxpc3QgZXh0ZW5kcyBQYXJ0aWFsPEJ1dHRvbj4ge1xuXHR1cmw/OiBzdHJpbmc7XG5cdGkxOG5LZXk/OiBzdHJpbmc7XG5cdGlkS2V5Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBlcm1pc3Npb25CdG4gZXh0ZW5kcyBQYXJ0aWFsPEJ1dHRvbj4ge1xuXHRhdXRoOiBudW1iZXI7XG5cdG9uQ2xpY2s/OiBhbnk7XG5cdGJ0bkRpc2FibGVkPzogRnVuY3Rpb247XG5cdGJ0bkhpZGRlbj86IEZ1bmN0aW9uO1xuXHRpMThuS2V5Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdyaWRMaXN0IHtcblx0Z3JpZE9wdGlvbnM6IEdyaWRPcHRpb25zO1xuXHRzdWJUYWJsZTogc3RyaW5nO1xuXHRzdWJUYWJsZVNvdXJjZT86ICdoYW5kbGUnIHwgJ3NlbGVjdCcgfCAnY3VzdG9tJyB8ICdub25lJztcblx0c2VsZWN0T3B0aW9ucz86IEdyaWRPcHRpb25zO1xuXHRzdWJEYXRhS2V5OiBzdHJpbmc7XG5cdHNsb3RLZXk/OiBzdHJpbmc7XG5cdHRpdGxlPzogc3RyaW5nO1xuXHRpMThuS2V5Pzogc3RyaW5nO1xuXHRzZWxlY3REYXRhQ2I/OiBGdW5jdGlvbjtcblx0c2VhcmNoUHJtPzogU2VhcmNoO1xuXHRkZWxldGVGdW5jPzogR3JpZERlbGV0ZUZ1bmM7XG5cdGFkZEZ1bmM/OiBHcmlkQWRkRnVuYztcblx0ZGVsZXRlSGlkZGVuPzogRnVuY3Rpb247XG5cdGFkZEhpZGRlbj86IEZ1bmN0aW9uO1xuXHRzZWxlY3REYXRhPzogYW55W107XG5cdHVuaXF1ZUZpZWxkPzogc3RyaW5nO1xuXHRzdWJTYXZlPzogU3ViU2F2ZUNvbmZpZztcblx0W3Byb3BOYW1lOnN0cmluZ106YW55LFxuXHR0eXBlPzpzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDdXN0b21MaXN0RGlhbG9nIHtcblx0Z2V0UmVzdWx0KCk6IGFueVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEN1c3RvbUxpc3RGb3JtVGVtcGxhdGVDb250ZXh0IHtcblx0cGFnZUZvcm06IFBhZ2VGb3JtQ29tcG9uZW50O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2VGb3JtU2xvdENvbnRleHQge1xuXHQkaW1wbGljaXQ6IFBhZ2VGb3JtU2xvdENvbnRleHQ7XG5cdHNsb3RLZXk6IHN0cmluZztcblx0Z3JpZDogR3JpZExpc3Q7XG5cdGluZGV4OiBudW1iZXI7XG5cdHBhZ2VGb3JtOiBQYWdlRm9ybUNvbXBvbmVudDtcblx0ZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cdG1vZGVsOiB1bmtub3duO1xuXHR1cHNlcnQ6IHVua25vd247XG5cdGFjdGl2ZTogYm9vbGVhbjtcblx0Z3JpZERpc2FibGU6Ym9vbGVhblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2VMZWZ0UGFuZWxEYXRhU291cmNlIHtcblx0bG9hZGVyPzogKChjb250ZXh0PzogYW55KSA9PiBhbnkpIHwgYW55O1xuXHRyZXF1ZXN0PzogUmVjb3JkPHN0cmluZywgYW55Pjtcblx0cmVzdWx0UGF0aD86IHN0cmluZztcblx0dHJhbnNmb3JtPzogKChpdGVtczogYW55LCBjb250ZXh0PzogYW55KSA9PiBhbnlbXSkgfCBhbnk7XG5cdGRlZmF1bHRTZWxlY3Q/OiAoKGNvbnRleHQ/OiBhbnkpID0+IGFueSkgfCBhbnk7XG5cdG9wdGlvbnM/OiBhbnlbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYWdlTGVmdFBhbmVsRXZlbnRzIHtcblx0b25Jbml0PzogKGNvbnRleHQ/OiBhbnkpID0+IGFueTtcblx0b25JdGVtc0xvYWRlZD86IChjb250ZXh0PzogYW55KSA9PiBhbnk7XG5cdG9uU2VsZWN0aW9uQ2hhbmdlPzogKGNvbnRleHQ/OiBhbnkpID0+IGFueTtcblx0b25EZXRhaWxNZXJnZT86IChjb250ZXh0PzogYW55KSA9PiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFnZUxlZnRQYW5lbExpc3RDb25maWcge1xuXHRvcHRpb25MYWJlbD86IHN0cmluZztcblx0b3B0aW9uVmFsdWU/OiBzdHJpbmc7XG5cdGFsbG93RGVzZWxlY3Q/OiBib29sZWFuO1xuXHRlbXB0eU1lc3NhZ2U/OiBzdHJpbmc7XG5cdGRhdGFTb3VyY2U/OiBQYWdlTGVmdFBhbmVsRGF0YVNvdXJjZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYWdlTGVmdFBhbmVsVHJlZUNvbmZpZyB7XG5cdG5vZGVMYWJlbD86IHN0cmluZztcblx0bm9kZVZhbHVlPzogc3RyaW5nO1xuXHRjaGlsZHJlbkZpZWxkPzogc3RyaW5nO1xuXHRkZWZhdWx0RXhwYW5kPzogYm9vbGVhbjtcblx0ZXhwYW5kZWRLZXlzU3RhdGVLZXk/OiBzdHJpbmc7XG5cdGljb25GaWVsZD86IHN0cmluZztcblx0bGVhZkZpZWxkPzogc3RyaW5nO1xuXHRkaXNhYmxlZEZpZWxkPzogc3RyaW5nO1xuXHRwYXJlbnRTZWxlY3RhYmxlPzogYm9vbGVhbjtcblx0ZW1wdHlNZXNzYWdlPzogc3RyaW5nO1xuXHRkYXRhU291cmNlPzogUGFnZUxlZnRQYW5lbERhdGFTb3VyY2U7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFnZUxlZnRQYW5lbENvbmZpZyB7XG5cdGVuYWJsZWQ/OiBib29sZWFuO1xuXHRtb2RlPzogJ2xpc3QnIHwgJ3RyZWUnO1xuXHRzdGF0ZUtleT86IHN0cmluZztcblx0cGFuZWxTZWxlY3RlZERhdGFLZXk/OiBzdHJpbmc7XG5cdG9wdGlvbkxhYmVsPzogc3RyaW5nO1xuXHRvcHRpb25WYWx1ZT86IHN0cmluZztcblx0YWxsb3dEZXNlbGVjdD86IGJvb2xlYW47XG5cdGVtcHR5TWVzc2FnZT86IHN0cmluZztcblx0ZGF0YVNvdXJjZT86IFBhZ2VMZWZ0UGFuZWxEYXRhU291cmNlO1xuXHRhcHBlbmRHcm91cHM/OiBhbnlbXSB8ICgoY29udGV4dD86IGFueSkgPT4gYW55W10pO1xuXHRsaXN0PzogUGFnZUxlZnRQYW5lbExpc3RDb25maWc7XG5cdHRyZWU/OiBQYWdlTGVmdFBhbmVsVHJlZUNvbmZpZztcblx0ZXZlbnRzPzogUGFnZUxlZnRQYW5lbEV2ZW50cztcbn1cblxuZXhwb3J0IGNvbnN0IGZvcm1UeXBlVG9Qcm9wczogYW55ID0ge1xuXHRpbnB1dHRleHQ6ICdpbnB1dFRleHRQcm9wcycsXG5cdGlucHV0bnVtYmVyOiAnaW5wdXROdW1iZXJQcm9wcycsXG5cdHNlbGVjdDogJ3NlbGVjdFByb3BzJyxcblx0dHJlZXNlbGVjdDogJ3RyZWVTZWxlY3RQcm9wcycsXG5cdGRhdGVwaWNrZXI6ICdkYXRlUGlja2VyUHJvcHMnLFxuXHRhdXRvY29tcGxldGU6ICdhdXRvQ29tcGxldGVQcm9wcycsXG5cdG11bHRpc2VsZWN0OiAnbXVsdGlTZWxlY3RQcm9wcycsXG5cdHJhZGlvOiAncmFkaW9Qcm9wcycsXG5cdHRleHRhcmVhOiAndGV4dEFyZWFQcm9wcycsXG5cdHVwbG9hZDogJ3VwbG9hZFByb3BzJyxcblx0aW1hZ2U6ICdpbWFnZVByb3BzJyxcblx0aW1hZ2VwcmV2aWV3OiAnaW1hZ2VQcmV2aWV3UHJvcHMnLFxuXHRjb2RlbWlycm9yOiAnY29kZU1pcnJvclByb3BzJyxcblx0cm93c2VsZWN0b3I6ICdyb3dTZWxlY3RvclByb3BzJyxcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFnZUZvcm1TbG90IHtcblx0aGFuZGxlQWRkOiAoYWN0aW9uPzogdW5rbm93bikgPT4gdm9pZDtcblx0aGFuZGxlUmVtb3ZlOiAoYWN0aW9uPzogdW5rbm93bikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYXlsb2FkVXBzZXJ0IHtcblx0YWN0aW9uOidhZGQnfCdlZGl0J3wnZGVsZXRlJztcblx0ZmllbGQ6IHN0cmluZztcblx0aGVhZGVyTmFtZTpzdHJpbmc7XG5cdG5ld1ZhbHVlOiBTYWZlQW55O1xuXHRvbGRWYWx1ZTogU2FmZUFueTtcblx0cmVjb3JkSW5kZXg6IG51bWJlcjtcblx0aW5kZXg6bnVtYmVyO1xuXHRkYXRhOiBSZWNvcmQ8c3RyaW5nLCBTYWZlQW55Pjtcblx0c2VsZWN0TmFtZT86c3RyaW5nfHVuZGVmaW5lZFxufVxuIl19
|
|
@@ -425,8 +425,8 @@ export const convertGrid = (thisArg, gridList, fiterPreloads) => {
|
|
|
425
425
|
fiterPreloads.push(...item.fiterPreloads);
|
|
426
426
|
}
|
|
427
427
|
if (item.type == 'grid') {
|
|
428
|
-
let { gridOptions: { columnDefs, ...restGridOptions }, subTableSource, subDataKey, title, selectDataCb, fk, mainField, uniqueField, addDataCb, deleteFunc, deleteHidden, showDelete = true, addHidden, scrollHeight, dragSort, selectionMode, isRowSelectable, addSort, reference, slotKey, subSave, gridCustomDisabled } = item;
|
|
429
|
-
grid = { subTableSource, subDataKey, title, showDelete, slotKey, subSave, deleteFunc, deleteHidden, addHidden, gridCustomDisabled, ...grid };
|
|
428
|
+
let { gridOptions: { columnDefs, ...restGridOptions }, subTableSource, subDataKey, title, selectDataCb, fk, mainField, uniqueField, addDataCb, addFunc, deleteFunc, deleteHidden, showDelete = true, addHidden, scrollHeight, dragSort, selectionMode, isRowSelectable, addSort, reference, slotKey, subSave, gridCustomDisabled } = item;
|
|
429
|
+
grid = { subTableSource, subDataKey, title, showDelete, slotKey, subSave, addFunc, deleteFunc, deleteHidden, addHidden, gridCustomDisabled, ...grid };
|
|
430
430
|
let gridOptions = {
|
|
431
431
|
...restGridOptions,
|
|
432
432
|
fk,
|
|
@@ -604,4 +604,4 @@ export const deepClone = (source, that, cache) => {
|
|
|
604
604
|
return source;
|
|
605
605
|
}
|
|
606
606
|
};
|
|
607
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbW0tZWxlbWVudC11aS9zcmMvbGliL3NoYXJlL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNqQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbkQsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFJbEMsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxJQUFTLEVBQW1CLEVBQUU7SUFDaEUsNkJBQTZCO0lBQzdCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNYLE9BQU8sVUFBVSxDQUFDO0lBQ25CLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNiLENBQUMsQ0FBQztBQUNGLE1BQU0sQ0FBQyxJQUFJLFlBQVksR0FBRyxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQ3pDLEdBQUc7S0FDRCxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFdBQVc7S0FDOUIsT0FBTyxDQUFDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxDQUFDLFdBQVc7S0FDL0MsV0FBVyxFQUFFLENBQUMsT0FBTztLQUNyQixLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUTtLQUNyQixHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMs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QyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEQsQ0FBQzthQUFNLENBQUM7WUFDUCxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2IsQ0FBQztRQUNELEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzFCLEtBQUssSUFBSSxHQUFHLElBQUksTUFBTSxFQUFFLENBQUM7WUFDeEIsSUFBSSxNQUFNLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNuRCxDQUFDO1FBQ0YsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2YsQ0FBQztTQUFNLENBQUM7UUFDUCxPQUFPLE1BQU0sQ0FBQztJQUNmLENBQUM7QUFDRixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBzaGFyZVJlcGxheSwgcGlwZSwgZm9ya0pvaW4sIGZpcnN0VmFsdWVGcm9tLCBpc09ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcclxuaW1wb3J0IHsgZm9ybVR5cGVUb1Byb3BzIH0gZnJvbSAnLi4vLi4vcHVibGljLWFwaSc7XHJcbmltcG9ydCBOUCBmcm9tICdudW1iZXItcHJlY2lzaW9uJztcclxuXHJcbmV4cG9ydCB0eXBlIEZpbHRlck1hdGNoTW9kZSA9ICdlbmRzV2l0aCcgfCAnc3RhcnRzV2l0aCcgfCAnY29udGFpbnMnIHwgJ2VxdWFscycgfCAnbm90RXF1YWxzJyB8ICdpbicgfCAnbHQnIHwgJ2x0ZScgfCAnZ3QnIHwgJ2d0ZSc7XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0RmlsdGVyTWF0Y2hNb2RlID0gKG1vZGU6IGFueSk6IEZpbHRlck1hdGNoTW9kZSA9PiB7XHJcblx0Ly8g5pyq6YWN572u5pe25L2/55SoIFByaW1lTkcg6buY6K6kIGNvbnRhaW5zXHJcblx0aWYgKCFtb2RlKSB7XHJcblx0XHRyZXR1cm4gJ2NvbnRhaW5zJztcclxuXHR9XHJcblx0cmV0dXJuIG1vZGU7XHJcbn07XHJcbmV4cG9ydCBsZXQgdG9QYXNjYWxDYXNlID0gKHN0cjogc3RyaW5nKSA9PlxyXG5cdHN0clxyXG5cdFx0LnJlcGxhY2UoL18vZywgJyAnKSAvLyDkuIvliJLnur/mm7/mjaLkuLrnqbrmoLxcclxuXHRcdC5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCAnJDEgJDInKSAvLyDlsI/pqbzls7DliIblibLkuLrljZXor41cclxuXHRcdC50b0xvd2VyQ2FzZSgpIC8vIOi9rOS4uuWwj+WGmVxyXG5cdFx0LnNwbGl0KC9cXHMrLykgLy8g5oyJ56m65qC85YiG5YmyXHJcblx0XHQubWFwKCh3b3JkKSA9PiAod29yZCA/IHdvcmRbMF0udG9VcHBlckNhc2UoKSArIHdvcmQuc2xpY2UoMSkgOiAnJykpXHJcblx0XHQuam9pbignJyk7XHJcblxyXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVVbmlxdWVJZCA9ICgpID0+IHtcclxuXHRjb25zdCB0aW1lc3RhbXAgPSBEYXRlLm5vdygpLnRvU3RyaW5nKDM2KTsgLy8g5pe26Ze05oiz6L2sMzbov5vliLbnvKnnn63plb/luqZcclxuXHRjb25zdCByYW5kb20gPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgNCk7IC8vIOmaj+acuumDqOWIhlxyXG5cdHJldHVybiBgJHt0aW1lc3RhbXB9JHtyYW5kb219YDtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBjcmVhdGVDaXJjdWxhckl0ZXJhdG9yID0gKGFycmF5OiBhbnlbXSkgPT4ge1xyXG5cdGxldCBpbmRleCA9IC0xO1xyXG5cdHJldHVybiB7XHJcblx0XHRuZXh0OiAoKSA9PiB7XHJcblx0XHRcdGluZGV4Kys7XHJcblx0XHRcdHJldHVybiBhcnJheVtpbmRleCAlIGFycmF5Lmxlbmd0aF07XHJcblx0XHR9LFxyXG5cdFx0cHJldjogKCkgPT4ge1xyXG5cdFx0XHRpbmRleC0tO1xyXG5cdFx0XHRyZXR1cm4gYXJyYXlbKChpbmRleCAlIGFycmF5Lmxlbmd0aCkgKyBhcnJheS5sZW5ndGgpICUgYXJyYXkubGVuZ3RoXTtcclxuXHRcdH0sXHJcblx0fTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBwYXJzZUZ1bmN0aW9ucyA9IChvYmo6IGFueSwgX3RoaXM6IGFueSk6IGFueSA9PiB7XHJcblx0aWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XHJcblx0XHQvLyDlsJ3or5Xmo4DmtYvmmK/lkKbmmK/lh73mlbDlrZfnrKbkuLJcclxuXHRcdGlmICgob2JqLmluY2x1ZGVzKCc9PicpIHx8IG9iai5pbmNsdWRlcygnUHJvbWlzZScpKSAmJiAhaXNKU09OUGFyc2FibGUob2JqKSkge1xyXG5cdFx0XHRjb25zdCBvID0gY29tcGlsZVRzVG9KcyhvYmopO1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZygn6Kej5p6Q5Ye95pWwOicsIG9iaik7XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0Y29uc3Qgc2FuZGJveCA9IHtcclxuXHRcdFx0XHRcdE9ic2VydmFibGUsXHJcblx0XHRcdFx0XHRvZixcclxuXHRcdFx0XHRcdGZvcmtKb2luLFxyXG5cdFx0XHRcdFx0bWFwLFxyXG5cdFx0XHRcdFx0c2hhcmVSZXBsYXksXHJcblx0XHRcdFx0XHRwaXBlLFxyXG5cdFx0XHRcdFx0UHJvbWlzZSwgLy8g5re75YqgIFByb21pc2Ug5YiwIHNhbmRib3hcclxuXHRcdFx0XHRcdGFzeW5jOiB0cnVlLCAvLyDmoIforrDmlK/mjIHlvILmraVcclxuXHRcdFx0XHRcdHJlc29sdmU6IFByb21pc2UucmVzb2x2ZS5iaW5kKFByb21pc2UpLFxyXG5cdFx0XHRcdFx0cmVqZWN0OiBQcm9taXNlLnJlamVjdC5iaW5kKFByb21pc2UpLFxyXG5cdFx0XHRcdFx0TlAsXHJcblx0XHRcdFx0XHRmaXJzdFZhbHVlRnJvbSxcclxuXHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHQvLyDlpITnkIYgUHJvbWlzZSDmnoTpgKDlh73mlbDnmoTmg4XlhrVcclxuXHRcdFx0XHRpZiAob2JqLmluY2x1ZGVzKCduZXcgUHJvbWlzZScpKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gbmV3IEZ1bmN0aW9uKFxyXG5cdFx0XHRcdFx0XHQnc2FuZGJveCcsXHJcblx0XHRcdFx0XHRcdGBcclxuXHRcdFx0XHRcdFx0XHR3aXRoKHNhbmRib3gpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiAke299O1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0YCxcclxuXHRcdFx0XHRcdCkuYmluZChfdGhpcykoc2FuZGJveCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyDlpITnkIbmma7pgJrlh73mlbDlkoznrq3lpLTlh73mlbBcclxuXHRcdFx0XHRyZXR1cm4gbmV3IEZ1bmN0aW9uKFxyXG5cdFx0XHRcdFx0J3NhbmRib3gnLFxyXG5cdFx0XHRcdFx0YFxyXG5cdFx0XHRcdFx0XHR3aXRoKHNhbmRib3gpIHtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gKCR7b30pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRgLFxyXG5cdFx0XHRcdCkuYmluZChfdGhpcykoc2FuZGJveCk7XHJcblx0XHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0XHRjb25zb2xlLmVycm9yKCflh73mlbDop6PmnpDlpLHotKU6JywgZSwgJ1xcbuWOn+Wni+Wtl+espuS4sjonLCBvYmopO1xyXG5cdFx0XHRcdHJldHVybiBvYmo7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChpc0pTT05QYXJzYWJsZShvYmopKSB7XHJcblx0XHRcdGxldCBqc29uID0gSlNPTi5wYXJzZShvYmopO1xyXG5cdFx0XHRyZXR1cm4gcGFyc2VGdW5jdGlvbnMoanNvbiwgX3RoaXMpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIG9iajtcclxuXHR9XHJcblx0aWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xyXG5cdFx0cmV0dXJuIG9iai5tYXAoKGl0ZW06IGFueSkgPT4gcGFyc2VGdW5jdGlvbnMoaXRlbSwgX3RoaXMpKTtcclxuXHR9XHJcblx0aWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIG9iaiAhPT0gbnVsbCkge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBhbnkgPSB7fTtcclxuXHRcdGZvciAoY29uc3Qga2V5IGluIG9iaikge1xyXG5cdFx0XHRpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuXHRcdFx0XHRyZXN1bHRba2V5XSA9IHBhcnNlRnVuY3Rpb25zKG9ialtrZXldLCBfdGhpcyk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gb2JqO1xyXG59O1xyXG5cclxuLy8g6L6F5Yqp5Ye95pWw77ya5qOA5p+l5piv5ZCm5YyF5ZCrIFByb21pc2Ug5p6E6YCg5Ye95pWwXHJcbmNvbnN0IGNvbnRhaW5zUHJvbWlzZUNvbnN0cnVjdG9yID0gKHN0cjogc3RyaW5nKTogYm9vbGVhbiA9PiB7XHJcblx0cmV0dXJuIC9uZXdcXHMrUHJvbWlzZS8udGVzdChzdHIpO1xyXG59O1xyXG5cclxuLy8g5L+u5pS5IGNvbXBpbGVUc1RvSnMg5Ye95pWw5Lul5pu05aW95Zyw5aSE55CGIFByb21pc2VcclxuZXhwb3J0IGNvbnN0IGNvbXBpbGVUc1RvSnMgPSAodHNDb2RlOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xyXG5cdC8vIOWmguaenOaYryBQcm9taXNlIOaehOmAoOWHveaVsO+8jOS4jemcgOimgemineWkluWkhOeQhlxyXG5cdGlmIChjb250YWluc1Byb21pc2VDb25zdHJ1Y3Rvcih0c0NvZGUpKSB7XHJcblx0XHRyZXR1cm4gdHNDb2RlO1xyXG5cdH1cclxuXHJcblx0Y29uc3QgcmVzdWx0ID0gdHMudHJhbnNwaWxlTW9kdWxlKHRzQ29kZSwge1xyXG5cdFx0Y29tcGlsZXJPcHRpb25zOiB7XHJcblx0XHRcdG1vZHVsZTogdHMuTW9kdWxlS2luZC5Db21tb25KUyxcclxuXHRcdFx0dGFyZ2V0OiB0cy5TY3JpcHRUYXJnZXQuRVMyMDE1LFxyXG5cdFx0XHQvLyDlkK/nlKjlvILmraXlh73mlbDmlK/mjIFcclxuXHRcdFx0bGliOiBbJ2VzMjAxNScsICdlczIwMTUucHJvbWlzZScsICdkb20nXSxcclxuXHRcdH0sXHJcblx0fSk7XHJcblx0cmV0dXJuIHJlbW92ZVRyYWlsaW5nU2VtaWNvbG9uKHJlc3VsdC5vdXRwdXRUZXh0KTtcclxufTtcclxuXHJcbmNvbnN0IHJlbW92ZVRyYWlsaW5nU2VtaWNvbG9uID0gKGZ1bmNTdHI6IHN0cmluZyk6IHN0cmluZyA9PiB7XHJcblx0Ly8g5YWI5Y676Zmk5YmN5ZCO56m655m9XHJcblx0Y29uc3QgdHJpbW1lZCA9IGZ1bmNTdHIudHJpbSgpO1xyXG5cdC8vIOWPquabv+aNouacgOWQjuS4gOS4quWIhuWPt++8iOWmguaenOWug+S4jeWcqOiKseaLrOWPt+WGhe+8iVxyXG5cdGlmICh0cmltbWVkLmVuZHNXaXRoKCc7JykpIHtcclxuXHRcdHJldHVybiB0cmltbWVkLnNsaWNlKDAsIC0xKTtcclxuXHR9XHJcblx0cmV0dXJuIHRyaW1tZWQ7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgaXNKU09OUGFyc2FibGUgPSAoc3RyOiBhbnkpID0+IHtcclxuXHR0cnkge1xyXG5cdFx0SlNPTi5wYXJzZShzdHIpO1xyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fSBjYXRjaCAoZSkge1xyXG5cdFx0Ly8gbGV0IHN0cklzT2JqID0gL1xce1tefV0qXFx9fFxcW1teXFxdXSpcXF0vLnRlc3Qoc3RyKVxyXG5cdFx0Ly8gaWYoc3RySXNPYmope1xyXG5cdFx0Ly8gXHRjb25zb2xlLmVycm9yKCdKU09OIOino+aekOWksei0pTonLCBlLCAnXFxu5Y6f5aeL5a2X56ym5LiyOicsIHN0cilcclxuXHRcdC8vIH1cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcbn07XHJcblxyXG4vKipcclxuICog5qC55o2u5oyH5a6a55qE6ZSu5pWw57uE6L+H5ruk5a+56LGhXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogLSDopoHov4fmu6TnmoTljp/lp4vlr7nosaFcclxuICogQHBhcmFtIHtBcnJheX0ga2V5cyAtIOmcgOimgeS/neeVmeeahOmUruaVsOe7hFxyXG4gKiBAcmV0dXJucyB7T2JqZWN0fSDov4fmu6TlkI7nmoTmlrDlr7nosaFcclxuICovXHJcbmV4cG9ydCBjb25zdCBmaWx0ZXJPYmplY3RCeUtleXMgPSAob2JqOiBhbnksIGtleXM6IHN0cmluZ1tdKSA9PiB7XHJcblx0Ly8g5Y+C5pWw5qCh6aqMXHJcblx0aWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnIHx8IG9iaiA9PT0gbnVsbCB8fCBBcnJheS5pc0FycmF5KG9iaikpIHtcclxuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ+esrOS4gOS4quWPguaVsOW/hemhu+aYr+aZrumAmuWvueixoScpO1xyXG5cdH1cclxuXHJcblx0aWYgKCFBcnJheS5pc0FycmF5KGtleXMpKSB7XHJcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCfnrKzkuozkuKrlj4LmlbDlv4XpobvmmK/mlbDnu4QnKTtcclxuXHR9XHJcblxyXG5cdC8vIOS9v+eUqHJlZHVjZeWIm+W7uuaWsOWvueixoVxyXG5cdHJldHVybiBrZXlzLnJlZHVjZSgoYWNjOiBhbnksIGtleTogc3RyaW5nKSA9PiB7XHJcblx0XHQvLyDlj6rmnInlvZPljp/lr7nosaHmnInor6XlsZ7mgKfml7bmiY3mt7vliqDliLDmlrDlr7nosaFcclxuXHRcdGlmIChrZXkgaW4gb2JqKSB7XHJcblx0XHRcdGFjY1trZXldID0gb2JqW2tleV07XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gYWNjO1xyXG5cdH0sIHt9KTtcclxufTtcclxuLyoqXHJcbiAqIOiHquWumuS5ieWHveaVsOWOu+mZpOepuuWtl+espuS4slxyXG4gKiBAcGFyYW0gYWN0XHJcbiAqIEByZXR1cm5zXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgY29udmVydEFjdCA9IChhY3Q6IGFueSkgPT4ge1xyXG5cdGFjdC5mb3JFYWNoKCh2OiBhbnkpID0+IHtcclxuXHRcdGlmICh2Lmhhc093blByb3BlcnR5KCdidG5IaWRkZW4nKSAmJiB0eXBlb2Ygdi5idG5IaWRkZW4gIT0gJ2Z1bmN0aW9uJykge1xyXG5cdFx0XHRkZWxldGUgdi5idG5IaWRkZW47XHJcblx0XHR9XHJcblx0XHRpZiAodi5oYXNPd25Qcm9wZXJ0eSgnYnRuRGlzYWJsZWQnKSAmJiB0eXBlb2Ygdi5idG5EaXNhYmxlZCAhPSAnZnVuY3Rpb24nKSB7XHJcblx0XHRcdGRlbGV0ZSB2LmJ0bkRpc2FibGVkO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHYuaGFzT3duUHJvcGVydHkoJ29uQ2xpY2snKSAmJiB0eXBlb2Ygdi5vbkNsaWNrICE9ICdmdW5jdGlvbicpIHtcclxuXHRcdFx0ZGVsZXRlIHYub25DbGljaztcclxuXHRcdH1cclxuXHR9KTtcclxuXHRyZXR1cm4gYWN0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIGZvcm1wYWdlIOmAmueUqGNvbnRlbnTlh73mlbDovaznp7tcclxuICogQHBhcmFtIGNvbnRlbnRcclxuICogQHBhcmFtIHRoaXNBcmdcclxuICovXHJcbmV4cG9ydCBjb25zdCBjaGFuZ2VDb250ZW50ID0gKGNvbnRlbnQ6IGFueSwgdGhpc0FyZzogYW55KSA9PiB7XHJcblx0Ly8gQHRzLWlnbm9yZVxyXG5cdGNvbnN0IGlzSTE4biA9IHdpbmRvdy5hcHBJc0kxOG47XHJcblx0Y29udGVudCA9IHBhcnNlRnVuY3Rpb25zKGNvbnRlbnQsIHRoaXNBcmcpO1xyXG5cdHRoaXNBcmcucGFnZUNvbnRlbnQgPSBjb250ZW50O1xyXG5cdGxldCB7IGdyaWRMaXN0LCBocmVmQnRuTGlzdCwgZ2V0UHJtLCBncm91cHMsIHN0YXR1c0tleSwgc3RhdHVzLCBzdGF0dXNTdGVwcywgc3RhdHVzQ29uZiA9IG51bGwgfSA9IGNvbnRlbnQ7XHJcblx0aWYgKHN0YXR1c0tleSkge1xyXG5cdFx0dGhpc0FyZy5zdGF0dXNLZXkgPSBzdGF0dXNLZXk7XHJcblx0XHRzdGF0dXNTdGVwcy5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcclxuXHRcdFx0aWYgKGlzSTE4biAmJiAoIWl0ZW0uaGFzT3duUHJvcGVydHkoJ2kxOG5LZXknKSB8fCBpdGVtLmkxOG5LZXkgPT0gJycpKSB7XHJcblx0XHRcdFx0aXRlbS5pMThuS2V5ID0gYHRhYmxlcy4ke2dldFBybS5tb2RlbE5hbWV9LiR7c3RhdHVzS2V5fSR7aXRlbS52YWx1ZX1gO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdHRoaXNBcmcuc3RlcHMgPSBzdGF0dXNTdGVwcztcclxuXHRcdHN0YXR1c0NvbmYgJiYgKHRoaXNBcmcuc3RhdHVzQ29uZiA9IHN0YXR1c0NvbmYpO1xyXG5cdH1cclxuXHJcblx0dGhpc0FyZy5hY3Rpb25zID0gY29udmVydEFjdChjb250ZW50LmFjdGlvbnMpO1xyXG5cdGNvbnRlbnQuZm9ybURpc2FibGVkICYmICh0aGlzQXJnLmZvcm1EaXNhYmxlZCA9IGNvbnRlbnQuZm9ybURpc2FibGVkKTtcclxuXHR0aGlzQXJnLmdldFBybSA9IGdldFBybTtcclxuXHR0aGlzQXJnLmdldFBybS5vcmdGaWVsZCA9IGNvbnRlbnQub3JnRmllbGQgfHwgJyc7XHJcblx0dGhpc0FyZy5ncmlkcyA9IFtdO1xyXG5cdGxldCBmaXRlclByZWxvYWRzOiBhbnlbXSA9IFtdO1xyXG5cclxuXHRjb252ZXJ0Rm9ybSh0aGlzQXJnLCBncm91cHMsIGNvbnRlbnQuc291cmNlRGF0YSk7XHJcblx0Y29udmVydEdyaWQodGhpc0FyZywgZ3JpZExpc3QsIGZpdGVyUHJlbG9hZHMpO1xyXG5cclxuXHR0aGlzQXJnLmZvcm1EZXRhaWwgPSBjb250ZW50LmZvcm1EZXRhaWw7XHJcblx0dGhpc0FyZy5zYXZlRnVuYyA9IGNvbnRlbnQuc2F2ZUZ1bmM7XHJcblx0dGhpc0FyZy5pc0xvZyA9IGNvbnRlbnQuc291cmNlRGF0YS5tb2RlbC5sb2c7XHJcblx0dGhpc0FyZy5nZXRQcm1bJ2dldExvZyddID0gY29udGVudC5zb3VyY2VEYXRhLm1vZGVsLmxvZztcclxuXHR0aGlzQXJnLmdldFBybVsnZml0ZXJQcmVsb2FkcyddID0gZml0ZXJQcmVsb2FkcztcclxuXHR0aGlzQXJnLmhyZWZCdG5MaXN0ID0gaHJlZkJ0bkxpc3Q7XHJcblx0dGhpc0FyZy5ydW50aW1lQ29udGV4dEluaXQgPSBjb250ZW50LnJ1bnRpbWVDb250ZXh0SW5pdDtcclxuXHRleGVjdXRlUnVudGltZUNvbnRleHRJbml0KHRoaXNBcmcpO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGV4ZWN1dGVSdW50aW1lQ29udGV4dEluaXQgPSAodGhpc0FyZzogYW55KSA9PiB7XHJcblx0aWYgKHR5cGVvZiB0aGlzQXJnLnJ1bnRpbWVDb250ZXh0SW5pdCAhPT0gJ2Z1bmN0aW9uJykge1xyXG5cdFx0cmV0dXJuO1xyXG5cdH1cclxuXHRjb25zdCBjb250ZXh0ID0ge1xyXG5cdFx0Y29tcG9uZW50OiB0aGlzQXJnLFxyXG5cdFx0aHR0cDogdGhpc0FyZy5odHRwLFxyXG5cdFx0cm91dGU6IHRoaXNBcmcucm91dGUsXHJcblx0XHRyb3V0ZXI6IHRoaXNBcmcucm91dGVyLFxyXG5cdFx0cnVudGltZUNvbnRleHQ6IHRoaXNBcmcucnVudGltZUNvbnRleHQsXHJcblx0fTtcclxuXHRjb25zdCByZXN1bHQgPSB0aGlzQXJnLnJ1bnRpbWVDb250ZXh0SW5pdChjb250ZXh0KTtcclxuXHRyZXNvbHZlUnVudGltZUNvbnRleHRSZXN1bHQodGhpc0FyZywgcmVzdWx0KTtcclxufTtcclxuXHJcbmNvbnN0IHJlc29sdmVSdW50aW1lQ29udGV4dFJlc3VsdCA9IGFzeW5jICh0aGlzQXJnOiBhbnksIHJlc3VsdDogYW55KSA9PiB7XHJcblx0bGV0IHJlc29sdmVkID0gcmVzdWx0O1xyXG5cdGlmIChpc09ic2VydmFibGUocmVzdWx0KSkge1xyXG5cdFx0cmVzb2x2ZWQgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShyZXN1bHQpO1xyXG5cdH0gZWxzZSBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xyXG5cdFx0cmVzb2x2ZWQgPSBhd2FpdCByZXN1bHQ7XHJcblx0fVxyXG5cdGlmIChyZXNvbHZlZCAmJiB0eXBlb2YgcmVzb2x2ZWQgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHJlc29sdmVkKSkge1xyXG5cdFx0dGhpc0FyZy5ydW50aW1lQ29udGV4dCA9IHtcclxuXHRcdFx0Li4uKHRoaXNBcmcucnVudGltZUNvbnRleHQgfHwge30pLFxyXG5cdFx0XHQuLi5yZXNvbHZlZCxcclxuXHRcdH07XHJcblx0fSBlbHNlIGlmIChyZXNvbHZlZCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHR0aGlzQXJnLnJ1bnRpbWVDb250ZXh0ID0ge1xyXG5cdFx0XHQuLi4odGhpc0FyZy5ydW50aW1lQ29udGV4dCB8fCB7fSksXHJcblx0XHRcdHZhbHVlOiByZXNvbHZlZCxcclxuXHRcdH07XHJcblx0fSBlbHNlIHtcclxuXHRcdHRoaXNBcmcucnVudGltZUNvbnRleHQgPSB7fTtcclxuXHR9XHJcblx0dGhpc0FyZy5jZHI/Lm1hcmtGb3JDaGVjaz8uKCk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgY2FsY1Jvd1NwYW4gPSAocGFyYW1zOiBhbnksIGZpZWxkPzogc3RyaW5nKSA9PiB7XG5cdGZpZWxkID0gZmllbGQgfHwgcGFyYW1zLmNvbERlZi5maWVsZDtcclxuXHRjb25zdCBjdXJyZW50VmFsdWUgPSBwYXJhbXMuZGF0YVtmaWVsZCFdO1xyXG5cdGNvbnN0IGN1cnJlbnRSb3dJbmRleCA9IHBhcmFtcy5ub2RlLnJvd0luZGV4O1xyXG5cclxuXHRsZXQgcm93U3BhbiA9IDE7XHJcblxyXG5cdGZvciAobGV0IGkgPSBjdXJyZW50Um93SW5kZXggKyAxOyBpIDwgcGFyYW1zLmFwaS5nZXREaXNwbGF5ZWRSb3dDb3VudCgpOyBpKyspIHtcclxuXHRcdGNvbnN0IG5vZGUgPSBwYXJhbXMuYXBpLmdldERpc3BsYXllZFJvd0F0SW5kZXgoaSk7XHJcblx0XHRpZiAobm9kZS5kYXRhW2ZpZWxkIV0gPT09IGN1cnJlbnRWYWx1ZSkge1xyXG5cdFx0XHRyb3dTcGFuKys7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRicmVhaztcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGlmIChjdXJyZW50Um93SW5kZXggPiAwICYmIHBhcmFtcy5hcGkuZ2V0RGlzcGxheWVkUm93QXRJbmRleChjdXJyZW50Um93SW5kZXggLSAxKS5kYXRhW2ZpZWxkIV0gPT09IGN1cnJlbnRWYWx1ZSkge1xyXG5cdFx0cmV0dXJuIDE7XHJcblx0fVxyXG5cdHJldHVybiByb3dTcGFuO1xufTtcblxuY29uc3QgYXBwZW5kQ2VsbENsYXNzID0gKGNlbGxDbGFzczogYW55LCBjbGFzc05hbWU6IHN0cmluZykgPT4ge1xuXHRpZiAoQXJyYXkuaXNBcnJheShjZWxsQ2xhc3MpKSB7XG5cdFx0cmV0dXJuIGNlbGxDbGFzcy5pbmNsdWRlcyhjbGFzc05hbWUpID8gY2VsbENsYXNzIDogWy4uLmNlbGxDbGFzcywgY2xhc3NOYW1lXTtcblx0fVxuXHRpZiAodHlwZW9mIGNlbGxDbGFzcyA9PT0gJ3N0cmluZycgJiYgY2VsbENsYXNzLmxlbmd0aCA+IDApIHtcblx0XHRyZXR1cm4gY2VsbENsYXNzLnNwbGl0KC9cXHMrLykuaW5jbHVkZXMoY2xhc3NOYW1lKSA/IGNlbGxDbGFzcyA6IGAke2NlbGxDbGFzc30gJHtjbGFzc05hbWV9YDtcblx0fVxuXHRyZXR1cm4gY2xhc3NOYW1lO1xufTtcblxuY29uc3Qgc3VwcHJlc3NUZXh0YXJlYVNoaWZ0RW50ZXIgPSAoY29sOiBhbnkpID0+IHtcblx0Y29uc3QgcmF3U3VwcHJlc3NLZXlib2FyZEV2ZW50ID0gY29sLnN1cHByZXNzS2V5Ym9hcmRFdmVudDtcblx0Y29sLnN1cHByZXNzS2V5Ym9hcmRFdmVudCA9IChwYXJhbXM6IGFueSkgPT4ge1xuXHRcdGlmICh0eXBlb2YgcmF3U3VwcHJlc3NLZXlib2FyZEV2ZW50ID09PSAnZnVuY3Rpb24nICYmIHJhd1N1cHByZXNzS2V5Ym9hcmRFdmVudChwYXJhbXMpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0Y29uc3QgZXZlbnQgPSBwYXJhbXM/LmV2ZW50O1xuXHRcdHJldHVybiAhIXBhcmFtcz8uZWRpdGluZyAmJiBldmVudD8ua2V5ID09PSAnRW50ZXInICYmICEhZXZlbnQ/LnNoaWZ0S2V5O1xuXHR9O1xufTtcblxuY29uc3QgY29udmVydFRvb2x0aXBGaWVsZCA9IChjb2w6IGFueSkgPT4ge1xuXHRpZiAoY29sLnRvb2x0aXBGaWVsZENvbmYgPT09IHRydWUgfHwgY29sLnRvb2x0aXBGaWVsZCA9PT0gdHJ1ZSkge1xuXHRcdGlmIChjb2wuZmllbGQpIHtcblx0XHRcdGNvbC50b29sdGlwRmllbGQgPSBjb2wuZmllbGQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRlbGV0ZSBjb2wudG9vbHRpcEZpZWxkO1xuXHRcdH1cblx0fSBlbHNlIGlmIChjb2wudG9vbHRpcEZpZWxkQ29uZiA9PT0gZmFsc2UgfHwgY29sLnRvb2x0aXBGaWVsZCA9PT0gZmFsc2UpIHtcblx0XHRkZWxldGUgY29sLnRvb2x0aXBGaWVsZDtcblx0fVxufTtcblxuZXhwb3J0IGNvbnN0IGNvbnZlcnRDb2wgPSAob3B0aW9uczogYW55LCBjb2w6IGFueVtdLCBhdXRoTGV2ZWw6IG51bWJlciwgZHJhZ1NvcnQ/OiBzdHJpbmcpID0+IHtcblx0Ly8gQHRzLWlnbm9yZVxuXHRjb25zdCBpc0kxOG4gPSB3aW5kb3cuYXBwSXNJMThuO1xuXHQvLyBjb25zb2xlLmxvZygnaXNJMThuLS0tLS0nLGlzSTE4bilcblx0Y29sLmZvckVhY2goKGl0ZW06IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xuXHRcdGNvbnZlcnRUb29sdGlwRmllbGQoaXRlbSk7XG5cdFx0aWYgKHR5cGVvZiBpdGVtLmhpZGUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGl0ZW0uaGlkZSAhPT0gJ3N0cmluZycpIHtcblx0XHRcdGl0ZW0uaGlkZSA9IGl0ZW0uaGlkZUNvbCA9PT0gdHJ1ZSB8fCBpdGVtLmhpZGUgPT09IHRydWU7XG5cdFx0fVxuXHRcdGlmIChhdXRoTGV2ZWwgPCAzKSB7XG5cdFx0XHRpdGVtLmVkaXRhYmxlID0gZmFsc2U7XG5cdFx0fVxuXHRcdGlmIChkcmFnU29ydCAmJiBpbmRleCA9PT0gMCkge1xyXG5cdFx0XHRpdGVtLnJvd0RyYWcgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGlzSTE4biAmJiAoIWl0ZW0uaGFzT3duUHJvcGVydHkoJ2kxOG5LZXknKSB8fCBpdGVtLmkxOG5LZXkgPT0gJycpKSB7XG5cdFx0XHRpdGVtLmkxOG5LZXkgPSBgdGFibGVzLiR7b3B0aW9ucy5tb2RlbE5hbWV9LiR7aXRlbS5maWVsZH1gO1xuXHRcdH1cblx0XHRpZiAoaXRlbS5oYXNPd25Qcm9wZXJ0eSgndGV4dFdyYXAnKSAmJiBpdGVtLnRleHRXcmFwICYmIGl0ZW0uY2VsbEVkaXRvciAhPT0gJ2NlbGxFZGl0VGV4dGFyZWFDb21wb25lbnQnKSB7XG5cdFx0XHRpdGVtLmF1dG9IZWlnaHQgPSB0cnVlO1xuXHRcdFx0aXRlbS5jZWxsQ2xhc3MgPSAnY2VsbC13cmFwLXRleHQnO1xuXHRcdH1cblx0XHRpZiAoaXRlbS5jZWxsRWRpdG9yID09PSAnY2VsbEVkaXRUZXh0YXJlYUNvbXBvbmVudCcpIHtcblx0XHRcdGl0ZW0ud3JhcFRleHQgPSB0cnVlO1xuXHRcdFx0aXRlbS5hdXRvSGVpZ2h0ID0gdHJ1ZTtcblx0XHRcdGl0ZW0uY2VsbENsYXNzID0gYXBwZW5kQ2VsbENsYXNzKGl0ZW0uY2VsbENsYXNzLCAnY2VsbC10ZXh0YXJlYS13cmFwLXRleHQnKTtcblx0XHRcdHN1cHByZXNzVGV4dGFyZWFTaGlmdEVudGVyKGl0ZW0pO1xuXHRcdH1cblx0XHRpZiAoaXRlbS5maWVsZFR5cGUgPT0gJ1ZBUkNIQVInKSB7XG5cdFx0XHRpdGVtLmNlbGxEYXRhVHlwZSA9IGZhbHNlO1xuXHRcdH1cblx0XHRpdGVtLmhlYWRlclZhbHVlR2V0dGVyID0gd3JhcEhlYWRlclZhbHVlR2V0dGVyKGl0ZW0uaGVhZGVyVmFsdWVHZXR0ZXIsIGl0ZW0pO1xyXG5cdFx0aWYgKGl0ZW0ucm93U3BhbkNvbmYpIHtcclxuXHRcdFx0bGV0IHJvd1NwYW4gPSB7XHJcblx0XHRcdFx0cm93U3BhbjogKHBhcmFtczogYW55KSA9PiBjYWxjUm93U3BhbihwYXJhbXMpLFxyXG5cdFx0XHRcdGNlbGxSZW5kZXJlcjogJ3Jvd1NwYW5SZW5kZXJlcicsXHJcblx0XHRcdFx0Y2VsbFJlbmRlcmVyUGFyYW1zOiB7XHJcblx0XHRcdFx0XHRyb3dTcGFuOiAocGFyYW1zOiBhbnkpID0+IGNhbGNSb3dTcGFuKHBhcmFtcyksXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0fTtcclxuXHRcdFx0T2JqZWN0LmFzc2lnbihpdGVtLCByb3dTcGFuKTtcclxuXHRcdFx0b3B0aW9ucy5zdXBwcmVzc1Jvd1RyYW5zZm9ybSA9IHRydWU7XHJcblx0XHRcdG9wdGlvbnMucm93Q2xhc3MgPSAncm93U3Bhbic7XHJcblx0XHR9XHJcblx0XHQvLyBpZihpdGVtLmVkaXRhYmxlKXtcclxuXHRcdC8vIFx0aXRlbS5oZWFkZXJDbGFzcyA9IGl0ZW0uaGFzT3duUHJvcGVydHkoJ2hlYWRlckNsYXNzJylcclxuXHRcdC8vIFx0XHQ/IGAke2l0ZW0uaGVhZGVyQ2xhc3N9IGVkaXRhYmxlLWNvbHVtbi1oZWFkZXJgXHJcblx0XHQvLyBcdFx0OiAnZWRpdGFibGUtY29sdW1uLWhlYWRlcidcclxuXHRcdC8vIH1cclxuXHR9KTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBncmlkT3B0aW9uc0hvb2tlciA9IChncmlkT3B0aW9uczogYW55KSA9PiB7XHJcblx0Z3JpZE9wdGlvbnM/LmNvbHVtbkRlZnM/LmZvckVhY2goKGNvbDogYW55KSA9PiB7XHJcblx0XHRpZiAoY29sLmhpZGVDb2wpIHtcclxuXHRcdFx0Y29sLmhpZGUgPSBjb2wuaGlkZUNvbDtcclxuXHRcdFx0ZGVsZXRlIGNvbC5oaWRlQ29sO1xyXG5cdFx0fVxyXG5cdFx0Ly8gQHRzLWlnbm9yZVxyXG5cdFx0Y29uc3QgaXNJMThuID0gd2luZG93LmFwcElzSTE4bjtcclxuXHRcdGlmIChpc0kxOG4gJiYgKCFjb2wuaGFzT3duUHJvcGVydHkoJ2kxOG5LZXknKSB8fCBjb2wuaTE4bktleSA9PSAnJykpIHtcblx0XHRcdGNvbC5pMThuS2V5ID0gYHRhYmxlcy4ke2dyaWRPcHRpb25zLm1vZGVsTmFtZX0uJHtjb2wuZmllbGR9YDtcblx0XHR9XG5cdFx0aWYgKGNvbC5oYXNPd25Qcm9wZXJ0eSgndGV4dFdyYXAnKSAmJiBjb2wudGV4dFdyYXAgJiYgY29sLmNlbGxFZGl0b3IgIT09ICdjZWxsRWRpdFRleHRhcmVhQ29tcG9uZW50Jykge1xuXHRcdFx0Y29sLmF1dG9IZWlnaHQgPSB0cnVlO1xuXHRcdFx0Y29sLmNlbGxDbGFzcyA9ICdjZWxsLXdyYXAtdGV4dCc7XG5cdFx0fVxuXHRcdGlmIChjb2wuY2VsbEVkaXRvciA9PT0gJ2NlbGxFZGl0VGV4dGFyZWFDb21wb25lbnQnKSB7XG5cdFx0XHRjb2wud3JhcFRleHQgPSB0cnVlO1xuXHRcdFx0Y29sLmF1dG9IZWlnaHQgPSB0cnVlO1xuXHRcdFx0Y29sLmNlbGxDbGFzcyA9IGFwcGVuZENlbGxDbGFzcyhjb2wuY2VsbENsYXNzLCAnY2VsbC10ZXh0YXJlYS13cmFwLXRleHQnKTtcblx0XHRcdHN1cHByZXNzVGV4dGFyZWFTaGlmdEVudGVyKGNvbCk7XG5cdFx0fVxuXHRcdGNvbC5oZWFkZXJWYWx1ZUdldHRlciA9IHdyYXBIZWFkZXJWYWx1ZUdldHRlcihjb2wuaGVhZGVyVmFsdWVHZXR0ZXIsIGNvbCk7XG5cdFx0aWYgKGNvbC5yb3dTcGFuQ29uZikge1xyXG5cdFx0XHRsZXQgcm93U3BhbiA9IHtcclxuXHRcdFx0XHRyb3dTcGFuOiAocGFyYW1zOiBhbnkpID0+IGNhbGNSb3dTcGFuKHBhcmFtcyksXHJcblx0XHRcdFx0Y2VsbFJlbmRlcmVyOiAncm93U3BhblJlbmRlcmVyJyxcclxuXHRcdFx0XHRjZWxsUmVuZGVyZXJQYXJhbXM6IHtcclxuXHRcdFx0XHRcdHJvd1NwYW46IChwYXJhbXM6IGFueSkgPT4gY2FsY1Jvd1NwYW4ocGFyYW1zKSxcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHR9O1xyXG5cdFx0XHRPYmplY3QuYXNzaWduKGNvbCwgcm93U3Bhbik7XHJcblx0XHRcdGdyaWRPcHRpb25zLnN1cHByZXNzUm93VHJhbnNmb3JtID0gdHJ1ZTtcclxuXHRcdFx0Z3JpZE9wdGlvbnMucm93Q2xhc3MgPSAncm93U3Bhbic7XHJcblx0XHR9XHJcblx0fSk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3Qgd3JhcEhlYWRlclZhbHVlR2V0dGVyID0gKGdldHRlcjogYW55LCBjb2xEZWY6IGFueSkgPT4ge1xyXG5cdGlmICh0eXBlb2YgZ2V0dGVyICE9PSAnZnVuY3Rpb24nKSB7XHJcblx0XHRyZXR1cm4gZ2V0dGVyO1xyXG5cdH1cclxuXHRyZXR1cm4gKHBhcmFtczogYW55KSA9PiB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHRjb25zdCB2YWx1ZSA9IGdldHRlcihwYXJhbXMpO1xyXG5cdFx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycpIHtcclxuXHRcdFx0XHRyZXR1cm4gcmVzb2x2ZUhlYWRlckZhbGxiYWNrKHBhcmFtcz8uY29sRGVmIHx8IGNvbERlZik7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIHZhbHVlO1xyXG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignaGVhZGVyVmFsdWVHZXR0ZXIg5omn6KGM5aSx6LSlOicsIGVycm9yLCBjb2xEZWYpO1xyXG5cdFx0XHRyZXR1cm4gcmVzb2x2ZUhlYWRlckZhbGxiYWNrKHBhcmFtcz8uY29sRGVmIHx8IGNvbERlZik7XHJcblx0XHR9XHJcblx0fTtcclxufTtcclxuXHJcbmNvbnN0IHJlc29sdmVIZWFkZXJGYWxsYmFjayA9IChjb2xEZWY6IGFueSkgPT4ge1xyXG5cdHJldHVybiBjb2xEZWY/LmhlYWRlck5hbWUgfHwgY29sRGVmPy5maWVsZCB8fCAnJztcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBjb252ZXJ0R3JpZCA9ICh0aGlzQXJnOiBhbnksIGdyaWRMaXN0OiBhbnksIGZpdGVyUHJlbG9hZHM6IGFueSkgPT4ge1xyXG5cdGdyaWRMaXN0LmZvckVhY2goYXN5bmMgKGl0ZW06IGFueSkgPT4ge1xyXG5cdFx0IWl0ZW0udHlwZSAmJiAoaXRlbS50eXBlID0gJ2dyaWQnKTtcclxuXHRcdGxldCBncmlkOiBhbnkgPSB7IHR5cGU6IGl0ZW0udHlwZSB9O1xyXG5cdFx0aWYgKGl0ZW0uZml0ZXJQcmVsb2FkcyBpbnN0YW5jZW9mIEFycmF5KSB7XHJcblx0XHRcdGZpdGVyUHJlbG9hZHMucHVzaCguLi5pdGVtLmZpdGVyUHJlbG9hZHMpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGl0ZW0udHlwZSA9PSAnZ3JpZCcpIHtcclxuXHRcdFx0bGV0IHtcclxuXHRcdFx0XHRncmlkT3B0aW9uczogeyBjb2x1bW5EZWZzLCAuLi5yZXN0R3JpZE9wdGlvbnMgfSxcclxuXHRcdFx0XHRzdWJUYWJsZVNvdXJjZSxcclxuXHRcdFx0XHRzdWJEYXRhS2V5LFxyXG5cdFx0XHRcdHRpdGxlLFxyXG5cdFx0XHRcdHNlbGVjdERhdGFDYixcclxuXHRcdFx0XHRmayxcclxuXHRcdFx0XHRtYWluRmllbGQsXHJcblx0XHRcdFx0dW5pcXVlRmllbGQsXHJcblx0XHRcdFx0YWRkRGF0YUNiLFxyXG5cdFx0XHRcdGRlbGV0ZUZ1bmMsXHJcblx0XHRcdFx0ZGVsZXRlSGlkZGVuLFxyXG5cdFx0XHRcdHNob3dEZWxldGUgPSB0cnVlLFxyXG5cdFx0XHRcdGFkZEhpZGRlbixcclxuXHRcdFx0XHRzY3JvbGxIZWlnaHQsXHJcblx0XHRcdFx0ZHJhZ1NvcnQsXHJcblx0XHRcdFx0c2VsZWN0aW9uTW9kZSxcclxuXHRcdFx0XHRpc1Jvd1NlbGVjdGFibGUsXHJcblx0XHRcdFx0YWRkU29ydCxcclxuXHRcdFx0XHRyZWZlcmVuY2UsXHJcblx0XHRcdFx0c2xvdEtleSxcclxuXHRcdFx0XHRzdWJTYXZlLFxyXG5cdFx0XHRcdGdyaWRDdXN0b21EaXNhYmxlZFxyXG5cdFx0XHR9ID0gaXRlbTtcclxuXHRcdFx0Z3JpZCA9IHsgc3ViVGFibGVTb3VyY2UsIHN1YkRhdGFLZXksIHRpdGxlLCBzaG93RGVsZXRlLCBzbG90S2V5LCBzdWJTYXZlLCBkZWxldGVGdW5jLCBkZWxldGVIaWRkZW4sIGFkZEhpZGRlbiwgZ3JpZEN1c3RvbURpc2FibGVkLCAuLi5ncmlkIH07XHJcblx0XHRcdGxldCBncmlkT3B0aW9ucyA9IHtcclxuXHRcdFx0XHQuLi5yZXN0R3JpZE9wdGlvbnMsXHJcblx0XHRcdFx0ZmssXHJcblx0XHRcdFx0c3ViVGFibGVTb3VyY2UsXHJcblx0XHRcdFx0c3ViRGF0YUtleSxcclxuXHRcdFx0XHRtYWluRmllbGQsXHJcblx0XHRcdFx0cmVmZXJlbmNlLFxyXG5cdFx0XHR9O1xyXG5cdFx0XHQvLyBAdHMtaWdub3JlXHJcblx0XHRcdGlmICh3aW5kb3cuYXBwSXNJMThuICYmICghaXRlbS5oYXNPd25Qcm9wZXJ0eSgnaTE4bktleScpIHx8IGl0ZW0uaTE4bktleSA9PSAnJykpIHtcclxuXHRcdFx0XHRncmlkLmkxOG5LZXkgPSBgdGFibGVzLiR7dGhpc0FyZy5nZXRQcm0ubW9kZWxOYW1lfS4ke3N1YkRhdGFLZXl9YDtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoZ3JpZE9wdGlvbnMucm93TW9kZWxUeXBlID09ICdjbGllbnRTaWRlJykge1xyXG5cdFx0XHRcdGdyaWRPcHRpb25zLnN1cHByZXNzUm93VmlydHVhbGlzYXRpb24gPSB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChzY3JvbGxIZWlnaHQpIHtcclxuXHRcdFx0XHRncmlkT3B0aW9ucy5zY3JvbGxIZWlnaHQgPSBzY3JvbGxIZWlnaHQ7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKGRyYWdTb3J0KSB7XHJcblx0XHRcdFx0Z3JpZE9wdGlvbnMucm93RHJhZ01hbmFnZWQgPSB0cnVlO1xyXG5cdFx0XHRcdGdyaWRPcHRpb25zLmRyYWdTb3J0ID0gZHJhZ1NvcnQ7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHNlbGVjdGlvbk1vZGUpIHtcclxuXHRcdFx0XHRncmlkT3B0aW9ucy5zZWxlY3Rpb25Nb2RlID0gc2VsZWN0aW9uTW9kZTtcclxuXHRcdFx0XHRpZiAoc2VsZWN0aW9uTW9kZSAhPSAnbm9uZScpIHtcclxuXHRcdFx0XHRcdGdyaWRPcHRpb25zLnJvd1NlbGVjdGlvbiA9IHtcclxuXHRcdFx0XHRcdFx0bW9kZTogc2VsZWN0aW9uTW9kZSA9PSAnc2luZ2xlJyA/ICdzaW5nbGVSb3cnIDogJ211bHRpUm93JyxcclxuXHRcdFx0XHRcdFx0aXNSb3dTZWxlY3RhYmxlOiBpc1Jvd1NlbGVjdGFibGUgPyBpc1Jvd1NlbGVjdGFibGUgOiBudWxsLFxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0Z3JpZE9wdGlvbnMucm93U2VsZWN0aW9uID0gdW5kZWZpbmVkO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRjb252ZXJ0Q29sKGdyaWRPcHRpb25zLCBjb2x1bW5EZWZzLCB0aGlzQXJnLmF1dGhMZXZlbCwgZHJhZ1NvcnQpO1xyXG5cdFx0XHRncmlkT3B0aW9ucy5jb2x1bW5EZWZzID0gY29sdW1uRGVmcztcclxuXHRcdFx0aWYgKHN1YlRhYmxlU291cmNlID09PSAnc2VsZWN0JyAmJiBpdGVtLnNlbGVjdE1vZGVsQ29kZSkge1xyXG5cdFx0XHRcdHRoaXNBcmcud2ViZ2V0KHsgY29kZTogaXRlbS5zZWxlY3RNb2RlbENvZGUgfSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG5cdFx0XHRcdFx0bGV0IHNlbGVjdENvbnRlbnQgPSBwYXJzZUZ1bmN0aW9ucyhKU09OLnBhcnNlKHJlcy5jb250ZW50KSwgdGhpc0FyZyk7XHJcblx0XHRcdFx0XHRncmlkLnNlbGVjdE9wdGlvbnMgPSBzZWxlY3RDb250ZW50Py5ncmlkT3B0aW9ucztcclxuXHRcdFx0XHRcdGdyaWQuc2VsZWN0T3B0aW9ucy5yb3dNb2RlbFR5cGUgPSBncmlkLnNlbGVjdE9wdGlvbnMucm93TW9kZWxUeXBlIHx8ICdzZXJ2ZXJTaWRlJztcclxuXHRcdFx0XHRcdGlmIChncmlkLnNlbGVjdE9wdGlvbnMucm93TW9kZWxUeXBlID09ICdzZXJ2ZXJTaWRlJykge1xyXG5cdFx0XHRcdFx0XHRncmlkLnNlbGVjdE9wdGlvbnMuc2VydmVyRnVuYyA9IGdyaWQuc2VsZWN0T3B0aW9ucy5zZXJ2ZXJGdW5jIHx8IHRoaXNBcmcud2ViX3NlYXJjaC5iaW5kKHRoaXNBcmcpO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0Z3JpZC5zZWxlY3RPcHRpb25zLmNsaWVudEZ1bmMgPSBncmlkLnNlbGVjdE9wdGlvbnMuY2xpZW50RnVuYyB8fCB0aGlzQXJnLndlYl9zZWFyY2guYmluZCh0aGlzQXJnKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGdyaWQudW5pcXVlRmllbGQgPSB1bmlxdWVGaWVsZDtcclxuXHRcdFx0XHRcdGdyaWQuc2VsZWN0RGF0YUNiID0gc2VsZWN0RGF0YUNiO1xyXG5cdFx0XHRcdFx0Z3JpZC5zZWxlY3RPcHRpb25zLnNjcm9sbEhlaWdodCA9ICczMDBweCc7XHJcblx0XHRcdFx0XHRncmlkLnNlbGVjdE9wdGlvbnMuc2VhcmNoUHJtID0gc2VsZWN0Q29udGVudC5zZWFyY2hQcm07XHJcblx0XHRcdFx0XHRncmlkLnNlbGVjdE1vZGVsQ29kZSA9IGl0ZW0uc2VsZWN0TW9kZWxDb2RlO1xyXG5cdFx0XHRcdFx0Y29udmVydENvbChncmlkLnNlbGVjdE9wdGlvbnMsIGdyaWQuc2VsZWN0T3B0aW9ucy5jb2x1bW5EZWZzISwgMSk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0Z3JpZC5zZWFyY2hQcm0gPSB7IC4uLnRoaXNBcmcuc2VhcmNoUHJtIH07XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0YWRkRGF0YUNiICYmIChncmlkT3B0aW9ucy5hZGREYXRhQ2IgPSBhZGREYXRhQ2IpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGdyaWQuZ3JpZE9wdGlvbnMgPSBncmlkT3B0aW9ucztcclxuXHRcdFx0YWRkU29ydCAmJiAoZ3JpZC5hZGRTb3J0ID0gYWRkU29ydCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRpdGVtLmludGVyYWN0aXZlTGFiZWwgPSB0cnVlO1xyXG5cdFx0XHRncmlkID0ge1xyXG5cdFx0XHRcdC4uLml0ZW0sXHJcblx0XHRcdH07XHJcblx0XHRcdGdyaWQuZm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG5cdFx0fVxyXG5cdFx0dGhpc0FyZy5ncmlkcy5wdXNoKGdyaWQpO1xyXG5cdH0pO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGNvbnZlcnRGb3JtID0gKHRoaXNBcmc6IGFueSwgZ3JvdXBBcnI6IGFueSwgc291cmNlRGF0YTogYW55KSA9PiB7XHJcblx0Z3JvdXBBcnIuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XHJcblx0XHRpZiAodGhpc0FyZy5hdXRoTGV2ZWwgPCAzKSB7XHJcblx0XHRcdGl0ZW1bZm9ybVR5cGVUb1Byb3BzW2l0ZW0udHlwZV1dLmRpc2FibGVkID0gdHJ1ZTtcclxuXHRcdH1cclxuXHR9KTtcclxuXHR0aGlzQXJnLmZvcm1PcHRpb25zID0ge1xyXG5cdFx0ZmllbGRzOiBbXHJcblx0XHRcdHtcclxuXHRcdFx0XHRncm91cENsYXNzOiAnZmxleCBmbGV4LXJvdyBmbGV4LXdyYXAnLFxyXG5cdFx0XHRcdGdyb3VwOiBncm91cEFycixcclxuXHRcdFx0fSxcclxuXHRcdF0sXHJcblx0XHRmb3JtOiBuZXcgRm9ybUdyb3VwKHt9KSxcclxuXHRcdG1haW5GaWVsZDogc291cmNlRGF0YS5tb2RlbC5tYWluRmllbGRzLFxyXG5cdFx0bW9kZWxOYW1lOiBzb3VyY2VEYXRhLm1vZGVsLm1vZGVsTmFtZSxcclxuXHRcdGV4dHJhOiB7IHRoaXNBcmcgfSxcclxuXHR9O1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGNsZWFyTG9jYWwgPSAoKSA9PiB7XHJcblx0bGV0IHRoZW1lQ29uZmlnU3RhdGUgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3RoZW1lQ29uZmlnU3RhdGUnKTtcclxuXHR3aW5kb3cubG9jYWxTdG9yYWdlLmNsZWFyKCk7XHJcblx0aWYgKHRoZW1lQ29uZmlnU3RhdGUpIHtcclxuXHRcdHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndGhlbWVDb25maWdTdGF0ZScsIHRoZW1lQ29uZmlnU3RhdGUpO1xyXG5cdH1cclxuXHR3aW5kb3cuc2Vzc2lvblN0b3JhZ2UuY2xlYXIoKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBwYWdlTGlzdEdyaWRPcHRpb25zID0gKGdyaWRPcHRpb25zOiBhbnksIHRoaXNBcmc6IGFueSkgPT4ge1xyXG5cdGdyaWRPcHRpb25zLnNjcm9sbEhlaWdodCA9ICdjYWxjKDEwMHZoIC0gOTVweCknO1xyXG5cdGdyaWRPcHRpb25zLnJvd01vZGVsVHlwZSA9IGdyaWRPcHRpb25zLnJvd01vZGVsVHlwZSB8fCAnc2VydmVyU2lkZSc7XHJcblx0aWYgKGdyaWRPcHRpb25zLnJvd01vZGVsVHlwZSA9PSAnc2VydmVyU2lkZScpIHtcclxuXHRcdGdyaWRPcHRpb25zLnNlcnZlckZ1bmMgPSBncmlkT3B0aW9ucy5zZXJ2ZXJGdW5jIHx8IHRoaXNBcmcud2ViX3NlYXJjaC5iaW5kKHRoaXNBcmcpO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRncmlkT3B0aW9ucy5jbGllbnRGdW5jID0gZ3JpZE9wdGlvbnMuY2xpZW50RnVuYyB8fCB0aGlzQXJnLndlYl9zZWFyY2guYmluZCh0aGlzQXJnKTtcclxuXHR9XHJcblx0aWYgKGdyaWRPcHRpb25zLnNlbGVjdGlvbk1vZGUpIHtcclxuXHRcdC8vIGdyaWRPcHRpb25zLnNlbGVjdGlvbk1vZGUgPSBzZWxlY3Rpb25Nb2RlXHJcblx0XHRpZiAoZ3JpZE9wdGlvbnMuc2VsZWN0aW9uTW9kZSAhPSAnbm9uZScpIHtcclxuXHRcdFx0Z3JpZE9wdGlvbnMucm93U2VsZWN0aW9uID0ge1xyXG5cdFx0XHRcdG1vZGU6IGdyaWRPcHRpb25zLnNlbGVjdGlvbk1vZGUgPT0gJ3NpbmdsZScgPyAnc2luZ2xlUm93JyA6ICdtdWx0aVJvdycsXHJcblx0XHRcdFx0aXNSb3dTZWxlY3RhYmxlOiBncmlkT3B0aW9ucy5pc1Jvd1NlbGVjdGFibGUgPyBncmlkT3B0aW9ucy5pc1Jvd1NlbGVjdGFibGUgOiB1bmRlZmluZWQsXHJcblx0XHRcdH07XHJcblx0XHRcdGlmIChncmlkT3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnaGVhZGVyQ2hlY2tib3gnKSAmJiBncmlkT3B0aW9ucy5yb3dTZWxlY3Rpb24ubW9kZSA9PSAnbXVsdGlSb3cnKSB7XHJcblx0XHRcdFx0Z3JpZE9wdGlvbnMucm93U2VsZWN0aW9uLmhlYWRlckNoZWNrYm94ID0gZ3JpZE9wdGlvbnMuaGVhZGVyQ2hlY2tib3g7XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGdyaWRPcHRpb25zLnJvd1NlbGVjdGlvbiA9IHVuZGVmaW5lZDtcclxuXHRcdH1cclxuXHR9XHJcblx0Y29udmVydENvbChncmlkT3B0aW9ucywgZ3JpZE9wdGlvbnMuY29sdW1uRGVmcyEsIDEpO1xyXG5cdHJldHVybiBncmlkT3B0aW9ucztcclxufTtcclxuLy8g5rex5bqm5ou36LSdXHJcbmV4cG9ydCBjb25zdCBkZWVwQ2xvbmUgPSAoc291cmNlOiBhbnksIHRoYXQ6IGFueSwgY2FjaGU/OiBhbnkpID0+IHtcclxuXHRpZiAoIWNhY2hlKSB7XHJcblx0XHRjYWNoZSA9IG5ldyBNYXAoKTtcclxuXHR9XHJcblx0aWYgKGlzT2JzZXJ2YWJsZShzb3VyY2UpKSB7XHJcblx0XHRyZXR1cm4gc291cmNlO1xyXG5cdH1cclxuXHRpZiAoc291cmNlIGluc3RhbmNlb2YgT2JqZWN0KSB7XHJcblx0XHQvLyDkuI3ogIPomZHot6ggaWZyYW1lXHJcblx0XHRpZiAoY2FjaGUuZ2V0KHNvdXJjZSkpIHtcclxuXHRcdFx0cmV0dXJuIGNhY2hlLmdldChzb3VyY2UpO1xyXG5cdFx0fVxyXG5cdFx0bGV0IHJlc3VsdDogYW55O1xyXG5cdFx0aWYgKHNvdXJjZSBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XHJcblx0XHRcdGlmIChzb3VyY2UucHJvdG90eXBlKSB7XHJcblx0XHRcdFx0Ly8g5pyJIHByb3RvdHlwZSDlsLHmmK/mma7pgJrlh73mlbBcclxuXHRcdFx0XHRyZXN1bHQgPSBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gc291cmNlLmFwcGx5KHRoYXQsIGFyZ3VtZW50cyk7XHJcblx0XHRcdFx0fTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRyZXN1bHQgPSAoLi4uYXJnczogYW55KSA9PiB7XHJcblx0XHRcdFx0XHRyZXR1cm4gc291cmNlLmNhbGwodW5kZWZpbmVkLCAuLi5hcmdzKTtcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2UgaWYgKHNvdXJjZSBpbnN0YW5jZW9mIEFycmF5KSB7XHJcblx0XHRcdHJlc3VsdCA9IFtdO1xyXG5cdFx0fSBlbHNlIGlmIChzb3VyY2UgaW5zdGFuY2VvZiBEYXRlKSB7XHJcblx0XHRcdHJlc3VsdCA9IG5ldyBEYXRlKChzb3VyY2UgYXMgYW55KSAtIDApO1xyXG5cdFx0fSBlbHNlIGlmIChzb3VyY2UgaW5zdGFuY2VvZiBSZWdFeHApIHtcclxuXHRcdFx0cmVzdWx0ID0gbmV3IFJlZ0V4cChzb3VyY2Uuc291cmNlLCBzb3VyY2UuZmxhZ3MpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0cmVzdWx0ID0ge307XHJcblx0XHR9XHJcblx0XHRjYWNoZS5zZXQoc291cmNlLCByZXN1bHQpO1xyXG5cdFx0Zm9yIChsZXQga2V5IGluIHNvdXJjZSkge1xyXG5cdFx0XHRpZiAoc291cmNlLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuXHRcdFx0XHRyZXN1bHRba2V5XSA9IGRlZXBDbG9uZShzb3VyY2Vba2V5XSwgdGhhdCwgY2FjaGUpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gc291cmNlO1xyXG5cdH1cclxufTtcclxuIl19
|
|
607
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbW0tZWxlbWVudC11aS9zcmMvbGliL3NoYXJlL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNqQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbkQsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFJbEMsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxJQUFTLEVBQW1CLEVBQUU7SUFDaEUsNkJBQTZCO0lBQzdCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNYLE9BQU8sVUFBVSxDQUFDO0lBQ25CLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNiLENBQUMsQ0FBQztBQUNGLE1BQU0sQ0FBQyxJQUFJLFlBQVksR0FBRyxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQ3pDLEdBQUc7S0FDRCxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFdBQVc7S0FDOUIsT0FBTyxDQUFDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxDQUFDLFdBQVc7S0FDL0MsV0FBVyxFQUFFLENBQUMsT0FBTztLQUNyQixLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUTtLQUNyQixHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMs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LE1BQU0sRUFBRSxDQUFDO1lBQ3JDLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsRCxDQUFDO2FBQU0sQ0FBQztZQUNQLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDYixDQUFDO1FBQ0QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDMUIsS0FBSyxJQUFJLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUN4QixJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDaEMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ25ELENBQUM7UUFDRixDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDZixDQUFDO1NBQU0sQ0FBQztRQUNQLE9BQU8sTUFBTSxDQUFDO0lBQ2YsQ0FBQztBQUNGLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIHNoYXJlUmVwbGF5LCBwaXBlLCBmb3JrSm9pbiwgZmlyc3RWYWx1ZUZyb20sIGlzT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xyXG5pbXBvcnQgeyBmb3JtVHlwZVRvUHJvcHMgfSBmcm9tICcuLi8uLi9wdWJsaWMtYXBpJztcclxuaW1wb3J0IE5QIGZyb20gJ251bWJlci1wcmVjaXNpb24nO1xyXG5cclxuZXhwb3J0IHR5cGUgRmlsdGVyTWF0Y2hNb2RlID0gJ2VuZHNXaXRoJyB8ICdzdGFydHNXaXRoJyB8ICdjb250YWlucycgfCAnZXF1YWxzJyB8ICdub3RFcXVhbHMnIHwgJ2luJyB8ICdsdCcgfCAnbHRlJyB8ICdndCcgfCAnZ3RlJztcclxuXHJcbmV4cG9ydCBjb25zdCBnZXRGaWx0ZXJNYXRjaE1vZGUgPSAobW9kZTogYW55KTogRmlsdGVyTWF0Y2hNb2RlID0+IHtcclxuXHQvLyDmnKrphY3nva7ml7bkvb/nlKggUHJpbWVORyDpu5jorqQgY29udGFpbnNcclxuXHRpZiAoIW1vZGUpIHtcclxuXHRcdHJldHVybiAnY29udGFpbnMnO1xyXG5cdH1cclxuXHRyZXR1cm4gbW9kZTtcclxufTtcclxuZXhwb3J0IGxldCB0b1Bhc2NhbENhc2UgPSAoc3RyOiBzdHJpbmcpID0+XHJcblx0c3RyXHJcblx0XHQucmVwbGFjZSgvXy9nLCAnICcpIC8vIOS4i+WIkue6v+abv+aNouS4uuepuuagvFxyXG5cdFx0LnJlcGxhY2UoLyhbYS16XSkoW0EtWl0pL2csICckMSAkMicpIC8vIOWwj+mpvOWzsOWIhuWJsuS4uuWNleivjVxyXG5cdFx0LnRvTG93ZXJDYXNlKCkgLy8g6L2s5Li65bCP5YaZXHJcblx0XHQuc3BsaXQoL1xccysvKSAvLyDmjInnqbrmoLzliIblibJcclxuXHRcdC5tYXAoKHdvcmQpID0+ICh3b3JkID8gd29yZFswXS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKSA6ICcnKSlcclxuXHRcdC5qb2luKCcnKTtcclxuXHJcbmV4cG9ydCBjb25zdCBnZW5lcmF0ZVVuaXF1ZUlkID0gKCkgPT4ge1xyXG5cdGNvbnN0IHRpbWVzdGFtcCA9IERhdGUubm93KCkudG9TdHJpbmcoMzYpOyAvLyDml7bpl7TmiLPovawzNui/m+WItue8qeefremVv+W6plxyXG5cdGNvbnN0IHJhbmRvbSA9IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCA0KTsgLy8g6ZqP5py66YOo5YiGXHJcblx0cmV0dXJuIGAke3RpbWVzdGFtcH0ke3JhbmRvbX1gO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGNyZWF0ZUNpcmN1bGFySXRlcmF0b3IgPSAoYXJyYXk6IGFueVtdKSA9PiB7XHJcblx0bGV0IGluZGV4ID0gLTE7XHJcblx0cmV0dXJuIHtcclxuXHRcdG5leHQ6ICgpID0+IHtcclxuXHRcdFx0aW5kZXgrKztcclxuXHRcdFx0cmV0dXJuIGFycmF5W2luZGV4ICUgYXJyYXkubGVuZ3RoXTtcclxuXHRcdH0sXHJcblx0XHRwcmV2OiAoKSA9PiB7XHJcblx0XHRcdGluZGV4LS07XHJcblx0XHRcdHJldHVybiBhcnJheVsoKGluZGV4ICUgYXJyYXkubGVuZ3RoKSArIGFycmF5Lmxlbmd0aCkgJSBhcnJheS5sZW5ndGhdO1xyXG5cdFx0fSxcclxuXHR9O1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IHBhcnNlRnVuY3Rpb25zID0gKG9iajogYW55LCBfdGhpczogYW55KTogYW55ID0+IHtcclxuXHRpZiAodHlwZW9mIG9iaiA9PT0gJ3N0cmluZycpIHtcclxuXHRcdC8vIOWwneivleajgOa1i+aYr+WQpuaYr+WHveaVsOWtl+espuS4slxyXG5cdFx0aWYgKChvYmouaW5jbHVkZXMoJz0+JykgfHwgb2JqLmluY2x1ZGVzKCdQcm9taXNlJykpICYmICFpc0pTT05QYXJzYWJsZShvYmopKSB7XHJcblx0XHRcdGNvbnN0IG8gPSBjb21waWxlVHNUb0pzKG9iaik7XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKCfop6PmnpDlh73mlbA6Jywgb2JqKTtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRjb25zdCBzYW5kYm94ID0ge1xyXG5cdFx0XHRcdFx0T2JzZXJ2YWJsZSxcclxuXHRcdFx0XHRcdG9mLFxyXG5cdFx0XHRcdFx0Zm9ya0pvaW4sXHJcblx0XHRcdFx0XHRtYXAsXHJcblx0XHRcdFx0XHRzaGFyZVJlcGxheSxcclxuXHRcdFx0XHRcdHBpcGUsXHJcblx0XHRcdFx0XHRQcm9taXNlLCAvLyDmt7vliqAgUHJvbWlzZSDliLAgc2FuZGJveFxyXG5cdFx0XHRcdFx0YXN5bmM6IHRydWUsIC8vIOagh+iusOaUr+aMgeW8guatpVxyXG5cdFx0XHRcdFx0cmVzb2x2ZTogUHJvbWlzZS5yZXNvbHZlLmJpbmQoUHJvbWlzZSksXHJcblx0XHRcdFx0XHRyZWplY3Q6IFByb21pc2UucmVqZWN0LmJpbmQoUHJvbWlzZSksXHJcblx0XHRcdFx0XHROUCxcclxuXHRcdFx0XHRcdGZpcnN0VmFsdWVGcm9tLFxyXG5cdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdC8vIOWkhOeQhiBQcm9taXNlIOaehOmAoOWHveaVsOeahOaDheWGtVxyXG5cdFx0XHRcdGlmIChvYmouaW5jbHVkZXMoJ25ldyBQcm9taXNlJykpIHtcclxuXHRcdFx0XHRcdHJldHVybiBuZXcgRnVuY3Rpb24oXHJcblx0XHRcdFx0XHRcdCdzYW5kYm94JyxcclxuXHRcdFx0XHRcdFx0YFxyXG5cdFx0XHRcdFx0XHRcdHdpdGgoc2FuZGJveCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuICR7b307XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRgLFxyXG5cdFx0XHRcdFx0KS5iaW5kKF90aGlzKShzYW5kYm94KTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIOWkhOeQhuaZrumAmuWHveaVsOWSjOeureWktOWHveaVsFxyXG5cdFx0XHRcdHJldHVybiBuZXcgRnVuY3Rpb24oXHJcblx0XHRcdFx0XHQnc2FuZGJveCcsXHJcblx0XHRcdFx0XHRgXHJcblx0XHRcdFx0XHRcdHdpdGgoc2FuZGJveCkge1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybiAoJHtvfSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGAsXHJcblx0XHRcdFx0KS5iaW5kKF90aGlzKShzYW5kYm94KTtcclxuXHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ+WHveaVsOino+aekOWksei0pTonLCBlLCAnXFxu5Y6f5aeL5a2X56ym5LiyOicsIG9iaik7XHJcblx0XHRcdFx0cmV0dXJuIG9iajtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKGlzSlNPTlBhcnNhYmxlKG9iaikpIHtcclxuXHRcdFx0bGV0IGpzb24gPSBKU09OLnBhcnNlKG9iaik7XHJcblx0XHRcdHJldHVybiBwYXJzZUZ1bmN0aW9ucyhqc29uLCBfdGhpcyk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gb2JqO1xyXG5cdH1cclxuXHRpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XHJcblx0XHRyZXR1cm4gb2JqLm1hcCgoaXRlbTogYW55KSA9PiBwYXJzZUZ1bmN0aW9ucyhpdGVtLCBfdGhpcykpO1xyXG5cdH1cclxuXHRpZiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgb2JqICE9PSBudWxsKSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xyXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XHJcblx0XHRcdGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG5cdFx0XHRcdHJlc3VsdFtrZXldID0gcGFyc2VGdW5jdGlvbnMob2JqW2tleV0sIF90aGlzKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHJldHVybiBvYmo7XHJcbn07XHJcblxyXG4vLyDovoXliqnlh73mlbDvvJrmo4Dmn6XmmK/lkKbljIXlkKsgUHJvbWlzZSDmnoTpgKDlh73mlbBcclxuY29uc3QgY29udGFpbnNQcm9taXNlQ29uc3RydWN0b3IgPSAoc3RyOiBzdHJpbmcpOiBib29sZWFuID0+IHtcclxuXHRyZXR1cm4gL25ld1xccytQcm9taXNlLy50ZXN0KHN0cik7XHJcbn07XHJcblxyXG4vLyDkv67mlLkgY29tcGlsZVRzVG9KcyDlh73mlbDku6Xmm7Tlpb3lnLDlpITnkIYgUHJvbWlzZVxyXG5leHBvcnQgY29uc3QgY29tcGlsZVRzVG9KcyA9ICh0c0NvZGU6IHN0cmluZyk6IHN0cmluZyA9PiB7XHJcblx0Ly8g5aaC5p6c5pivIFByb21pc2Ug5p6E6YCg5Ye95pWw77yM5LiN6ZyA6KaB6aKd5aSW5aSE55CGXHJcblx0aWYgKGNvbnRhaW5zUHJvbWlzZUNvbnN0cnVjdG9yKHRzQ29kZSkpIHtcclxuXHRcdHJldHVybiB0c0NvZGU7XHJcblx0fVxyXG5cclxuXHRjb25zdCByZXN1bHQgPSB0cy50cmFuc3BpbGVNb2R1bGUodHNDb2RlLCB7XHJcblx0XHRjb21waWxlck9wdGlvbnM6IHtcclxuXHRcdFx0bW9kdWxlOiB0cy5Nb2R1bGVLaW5kLkNvbW1vbkpTLFxyXG5cdFx0XHR0YXJnZXQ6IHRzLlNjcmlwdFRhcmdldC5FUzIwMTUsXHJcblx0XHRcdC8vIOWQr+eUqOW8guatpeWHveaVsOaUr+aMgVxyXG5cdFx0XHRsaWI6IFsnZXMyMDE1JywgJ2VzMjAxNS5wcm9taXNlJywgJ2RvbSddLFxyXG5cdFx0fSxcclxuXHR9KTtcclxuXHRyZXR1cm4gcmVtb3ZlVHJhaWxpbmdTZW1pY29sb24ocmVzdWx0Lm91dHB1dFRleHQpO1xyXG59O1xyXG5cclxuY29uc3QgcmVtb3ZlVHJhaWxpbmdTZW1pY29sb24gPSAoZnVuY1N0cjogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuXHQvLyDlhYjljrvpmaTliY3lkI7nqbrnmb1cclxuXHRjb25zdCB0cmltbWVkID0gZnVuY1N0ci50cmltKCk7XHJcblx0Ly8g5Y+q5pu/5o2i5pyA5ZCO5LiA5Liq5YiG5Y+377yI5aaC5p6c5a6D5LiN5Zyo6Iqx5ous5Y+35YaF77yJXHJcblx0aWYgKHRyaW1tZWQuZW5kc1dpdGgoJzsnKSkge1xyXG5cdFx0cmV0dXJuIHRyaW1tZWQuc2xpY2UoMCwgLTEpO1xyXG5cdH1cclxuXHRyZXR1cm4gdHJpbW1lZDtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBpc0pTT05QYXJzYWJsZSA9IChzdHI6IGFueSkgPT4ge1xyXG5cdHRyeSB7XHJcblx0XHRKU09OLnBhcnNlKHN0cik7XHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9IGNhdGNoIChlKSB7XHJcblx0XHQvLyBsZXQgc3RySXNPYmogPSAvXFx7W159XSpcXH18XFxbW15cXF1dKlxcXS8udGVzdChzdHIpXHJcblx0XHQvLyBpZihzdHJJc09iail7XHJcblx0XHQvLyBcdGNvbnNvbGUuZXJyb3IoJ0pTT04g6Kej5p6Q5aSx6LSlOicsIGUsICdcXG7ljp/lp4vlrZfnrKbkuLI6Jywgc3RyKVxyXG5cdFx0Ly8gfVxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiDmoLnmja7mjIflrprnmoTplK7mlbDnu4Tov4fmu6Tlr7nosaFcclxuICogQHBhcmFtIHtPYmplY3R9IG9iaiAtIOimgei/h+a7pOeahOWOn+Wni+WvueixoVxyXG4gKiBAcGFyYW0ge0FycmF5fSBrZXlzIC0g6ZyA6KaB5L+d55WZ55qE6ZSu5pWw57uEXHJcbiAqIEByZXR1cm5zIHtPYmplY3R9IOi/h+a7pOWQjueahOaWsOWvueixoVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGZpbHRlck9iamVjdEJ5S2V5cyA9IChvYmo6IGFueSwga2V5czogc3RyaW5nW10pID0+IHtcclxuXHQvLyDlj4LmlbDmoKHpqoxcclxuXHRpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgb2JqID09PSBudWxsIHx8IEFycmF5LmlzQXJyYXkob2JqKSkge1xyXG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcign56ys5LiA5Liq5Y+C5pWw5b+F6aG75piv5pmu6YCa5a+56LGhJyk7XHJcblx0fVxyXG5cclxuXHRpZiAoIUFycmF5LmlzQXJyYXkoa2V5cykpIHtcclxuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ+esrOS6jOS4quWPguaVsOW/hemhu+aYr+aVsOe7hCcpO1xyXG5cdH1cclxuXHJcblx0Ly8g5L2/55SocmVkdWNl5Yib5bu65paw5a+56LGhXHJcblx0cmV0dXJuIGtleXMucmVkdWNlKChhY2M6IGFueSwga2V5OiBzdHJpbmcpID0+IHtcclxuXHRcdC8vIOWPquacieW9k+WOn+WvueixoeacieivpeWxnuaAp+aXtuaJjea3u+WKoOWIsOaWsOWvueixoVxyXG5cdFx0aWYgKGtleSBpbiBvYmopIHtcclxuXHRcdFx0YWNjW2tleV0gPSBvYmpba2V5XTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBhY2M7XHJcblx0fSwge30pO1xyXG59O1xyXG4vKipcclxuICog6Ieq5a6a5LmJ5Ye95pWw5Y676Zmk56m65a2X56ym5LiyXHJcbiAqIEBwYXJhbSBhY3RcclxuICogQHJldHVybnNcclxuICovXHJcbmV4cG9ydCBjb25zdCBjb252ZXJ0QWN0ID0gKGFjdDogYW55KSA9PiB7XHJcblx0YWN0LmZvckVhY2goKHY6IGFueSkgPT4ge1xyXG5cdFx0aWYgKHYuaGFzT3duUHJvcGVydHkoJ2J0bkhpZGRlbicpICYmIHR5cGVvZiB2LmJ0bkhpZGRlbiAhPSAnZnVuY3Rpb24nKSB7XHJcblx0XHRcdGRlbGV0ZSB2LmJ0bkhpZGRlbjtcclxuXHRcdH1cclxuXHRcdGlmICh2Lmhhc093blByb3BlcnR5KCdidG5EaXNhYmxlZCcpICYmIHR5cGVvZiB2LmJ0bkRpc2FibGVkICE9ICdmdW5jdGlvbicpIHtcclxuXHRcdFx0ZGVsZXRlIHYuYnRuRGlzYWJsZWQ7XHJcblx0XHR9XHJcblx0XHRpZiAodi5oYXNPd25Qcm9wZXJ0eSgnb25DbGljaycpICYmIHR5cGVvZiB2Lm9uQ2xpY2sgIT0gJ2Z1bmN0aW9uJykge1xyXG5cdFx0XHRkZWxldGUgdi5vbkNsaWNrO1xyXG5cdFx0fVxyXG5cdH0pO1xyXG5cdHJldHVybiBhY3Q7XHJcbn07XHJcblxyXG4vKipcclxuICogZm9ybXBhZ2Ug6YCa55SoY29udGVudOWHveaVsOi9rOenu1xyXG4gKiBAcGFyYW0gY29udGVudFxyXG4gKiBAcGFyYW0gdGhpc0FyZ1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGNoYW5nZUNvbnRlbnQgPSAoY29udGVudDogYW55LCB0aGlzQXJnOiBhbnkpID0+IHtcclxuXHQvLyBAdHMtaWdub3JlXHJcblx0Y29uc3QgaXNJMThuID0gd2luZG93LmFwcElzSTE4bjtcclxuXHRjb250ZW50ID0gcGFyc2VGdW5jdGlvbnMoY29udGVudCwgdGhpc0FyZyk7XHJcblx0dGhpc0FyZy5wYWdlQ29udGVudCA9IGNvbnRlbnQ7XHJcblx0bGV0IHsgZ3JpZExpc3QsIGhyZWZCdG5MaXN0LCBnZXRQcm0sIGdyb3Vwcywgc3RhdHVzS2V5LCBzdGF0dXMsIHN0YXR1c1N0ZXBzLCBzdGF0dXNDb25mID0gbnVsbCB9ID0gY29udGVudDtcclxuXHRpZiAoc3RhdHVzS2V5KSB7XHJcblx0XHR0aGlzQXJnLnN0YXR1c0tleSA9IHN0YXR1c0tleTtcclxuXHRcdHN0YXR1c1N0ZXBzLmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xyXG5cdFx0XHRpZiAoaXNJMThuICYmICghaXRlbS5oYXNPd25Qcm9wZXJ0eSgnaTE4bktleScpIHx8IGl0ZW0uaTE4bktleSA9PSAnJykpIHtcclxuXHRcdFx0XHRpdGVtLmkxOG5LZXkgPSBgdGFibGVzLiR7Z2V0UHJtLm1vZGVsTmFtZX0uJHtzdGF0dXNLZXl9JHtpdGVtLnZhbHVlfWA7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0dGhpc0FyZy5zdGVwcyA9IHN0YXR1c1N0ZXBzO1xyXG5cdFx0c3RhdHVzQ29uZiAmJiAodGhpc0FyZy5zdGF0dXNDb25mID0gc3RhdHVzQ29uZik7XHJcblx0fVxyXG5cclxuXHR0aGlzQXJnLmFjdGlvbnMgPSBjb252ZXJ0QWN0KGNvbnRlbnQuYWN0aW9ucyk7XHJcblx0Y29udGVudC5mb3JtRGlzYWJsZWQgJiYgKHRoaXNBcmcuZm9ybURpc2FibGVkID0gY29udGVudC5mb3JtRGlzYWJsZWQpO1xyXG5cdHRoaXNBcmcuZ2V0UHJtID0gZ2V0UHJtO1xyXG5cdHRoaXNBcmcuZ2V0UHJtLm9yZ0ZpZWxkID0gY29udGVudC5vcmdGaWVsZCB8fCAnJztcclxuXHR0aGlzQXJnLmdyaWRzID0gW107XHJcblx0bGV0IGZpdGVyUHJlbG9hZHM6IGFueVtdID0gW107XHJcblxyXG5cdGNvbnZlcnRGb3JtKHRoaXNBcmcsIGdyb3VwcywgY29udGVudC5zb3VyY2VEYXRhKTtcclxuXHRjb252ZXJ0R3JpZCh0aGlzQXJnLCBncmlkTGlzdCwgZml0ZXJQcmVsb2Fkcyk7XHJcblxyXG5cdHRoaXNBcmcuZm9ybURldGFpbCA9IGNvbnRlbnQuZm9ybURldGFpbDtcclxuXHR0aGlzQXJnLnNhdmVGdW5jID0gY29udGVudC5zYXZlRnVuYztcclxuXHR0aGlzQXJnLmlzTG9nID0gY29udGVudC5zb3VyY2VEYXRhLm1vZGVsLmxvZztcclxuXHR0aGlzQXJnLmdldFBybVsnZ2V0TG9nJ10gPSBjb250ZW50LnNvdXJjZURhdGEubW9kZWwubG9nO1xyXG5cdHRoaXNBcmcuZ2V0UHJtWydmaXRlclByZWxvYWRzJ10gPSBmaXRlclByZWxvYWRzO1xyXG5cdHRoaXNBcmcuaHJlZkJ0bkxpc3QgPSBocmVmQnRuTGlzdDtcclxuXHR0aGlzQXJnLnJ1bnRpbWVDb250ZXh0SW5pdCA9IGNvbnRlbnQucnVudGltZUNvbnRleHRJbml0O1xyXG5cdGV4ZWN1dGVSdW50aW1lQ29udGV4dEluaXQodGhpc0FyZyk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZXhlY3V0ZVJ1bnRpbWVDb250ZXh0SW5pdCA9ICh0aGlzQXJnOiBhbnkpID0+IHtcclxuXHRpZiAodHlwZW9mIHRoaXNBcmcucnVudGltZUNvbnRleHRJbml0ICE9PSAnZnVuY3Rpb24nKSB7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cdGNvbnN0IGNvbnRleHQgPSB7XHJcblx0XHRjb21wb25lbnQ6IHRoaXNBcmcsXHJcblx0XHRodHRwOiB0aGlzQXJnLmh0dHAsXHJcblx0XHRyb3V0ZTogdGhpc0FyZy5yb3V0ZSxcclxuXHRcdHJvdXRlcjogdGhpc0FyZy5yb3V0ZXIsXHJcblx0XHRydW50aW1lQ29udGV4dDogdGhpc0FyZy5ydW50aW1lQ29udGV4dCxcclxuXHR9O1xyXG5cdGNvbnN0IHJlc3VsdCA9IHRoaXNBcmcucnVudGltZUNvbnRleHRJbml0KGNvbnRleHQpO1xyXG5cdHJlc29sdmVSdW50aW1lQ29udGV4dFJlc3VsdCh0aGlzQXJnLCByZXN1bHQpO1xyXG59O1xyXG5cclxuY29uc3QgcmVzb2x2ZVJ1bnRpbWVDb250ZXh0UmVzdWx0ID0gYXN5bmMgKHRoaXNBcmc6IGFueSwgcmVzdWx0OiBhbnkpID0+IHtcclxuXHRsZXQgcmVzb2x2ZWQgPSByZXN1bHQ7XHJcblx0aWYgKGlzT2JzZXJ2YWJsZShyZXN1bHQpKSB7XHJcblx0XHRyZXNvbHZlZCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHJlc3VsdCk7XHJcblx0fSBlbHNlIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XHJcblx0XHRyZXNvbHZlZCA9IGF3YWl0IHJlc3VsdDtcclxuXHR9XHJcblx0aWYgKHJlc29sdmVkICYmIHR5cGVvZiByZXNvbHZlZCA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkocmVzb2x2ZWQpKSB7XHJcblx0XHR0aGlzQXJnLnJ1bnRpbWVDb250ZXh0ID0ge1xyXG5cdFx0XHQuLi4odGhpc0FyZy5ydW50aW1lQ29udGV4dCB8fCB7fSksXHJcblx0XHRcdC4uLnJlc29sdmVkLFxyXG5cdFx0fTtcclxuXHR9IGVsc2UgaWYgKHJlc29sdmVkICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdHRoaXNBcmcucnVudGltZUNvbnRleHQgPSB7XHJcblx0XHRcdC4uLih0aGlzQXJnLnJ1bnRpbWVDb250ZXh0IHx8IHt9KSxcclxuXHRcdFx0dmFsdWU6IHJlc29sdmVkLFxyXG5cdFx0fTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0dGhpc0FyZy5ydW50aW1lQ29udGV4dCA9IHt9O1xyXG5cdH1cclxuXHR0aGlzQXJnLmNkcj8ubWFya0ZvckNoZWNrPy4oKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBjYWxjUm93U3BhbiA9IChwYXJhbXM6IGFueSwgZmllbGQ/OiBzdHJpbmcpID0+IHtcblx0ZmllbGQgPSBmaWVsZCB8fCBwYXJhbXMuY29sRGVmLmZpZWxkO1xyXG5cdGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHBhcmFtcy5kYXRhW2ZpZWxkIV07XHJcblx0Y29uc3QgY3VycmVudFJvd0luZGV4ID0gcGFyYW1zLm5vZGUucm93SW5kZXg7XHJcblxyXG5cdGxldCByb3dTcGFuID0gMTtcclxuXHJcblx0Zm9yIChsZXQgaSA9IGN1cnJlbnRSb3dJbmRleCArIDE7IGkgPCBwYXJhbXMuYXBpLmdldERpc3BsYXllZFJvd0NvdW50KCk7IGkrKykge1xyXG5cdFx0Y29uc3Qgbm9kZSA9IHBhcmFtcy5hcGkuZ2V0RGlzcGxheWVkUm93QXRJbmRleChpKTtcclxuXHRcdGlmIChub2RlLmRhdGFbZmllbGQhXSA9PT0gY3VycmVudFZhbHVlKSB7XHJcblx0XHRcdHJvd1NwYW4rKztcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGJyZWFrO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aWYgKGN1cnJlbnRSb3dJbmRleCA+IDAgJiYgcGFyYW1zLmFwaS5nZXREaXNwbGF5ZWRSb3dBdEluZGV4KGN1cnJlbnRSb3dJbmRleCAtIDEpLmRhdGFbZmllbGQhXSA9PT0gY3VycmVudFZhbHVlKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9XHJcblx0cmV0dXJuIHJvd1NwYW47XG59O1xuXG5jb25zdCBhcHBlbmRDZWxsQ2xhc3MgPSAoY2VsbENsYXNzOiBhbnksIGNsYXNzTmFtZTogc3RyaW5nKSA9PiB7XG5cdGlmIChBcnJheS5pc0FycmF5KGNlbGxDbGFzcykpIHtcblx0XHRyZXR1cm4gY2VsbENsYXNzLmluY2x1ZGVzKGNsYXNzTmFtZSkgPyBjZWxsQ2xhc3MgOiBbLi4uY2VsbENsYXNzLCBjbGFzc05hbWVdO1xuXHR9XG5cdGlmICh0eXBlb2YgY2VsbENsYXNzID09PSAnc3RyaW5nJyAmJiBjZWxsQ2xhc3MubGVuZ3RoID4gMCkge1xuXHRcdHJldHVybiBjZWxsQ2xhc3Muc3BsaXQoL1xccysvKS5pbmNsdWRlcyhjbGFzc05hbWUpID8gY2VsbENsYXNzIDogYCR7Y2VsbENsYXNzfSAke2NsYXNzTmFtZX1gO1xuXHR9XG5cdHJldHVybiBjbGFzc05hbWU7XG59O1xuXG5jb25zdCBzdXBwcmVzc1RleHRhcmVhU2hpZnRFbnRlciA9IChjb2w6IGFueSkgPT4ge1xuXHRjb25zdCByYXdTdXBwcmVzc0tleWJvYXJkRXZlbnQgPSBjb2wuc3VwcHJlc3NLZXlib2FyZEV2ZW50O1xuXHRjb2wuc3VwcHJlc3NLZXlib2FyZEV2ZW50ID0gKHBhcmFtczogYW55KSA9PiB7XG5cdFx0aWYgKHR5cGVvZiByYXdTdXBwcmVzc0tleWJvYXJkRXZlbnQgPT09ICdmdW5jdGlvbicgJiYgcmF3U3VwcHJlc3NLZXlib2FyZEV2ZW50KHBhcmFtcykpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRjb25zdCBldmVudCA9IHBhcmFtcz8uZXZlbnQ7XG5cdFx0cmV0dXJuICEhcGFyYW1zPy5lZGl0aW5nICYmIGV2ZW50Py5rZXkgPT09ICdFbnRlcicgJiYgISFldmVudD8uc2hpZnRLZXk7XG5cdH07XG59O1xuXG5jb25zdCBjb252ZXJ0VG9vbHRpcEZpZWxkID0gKGNvbDogYW55KSA9PiB7XG5cdGlmIChjb2wudG9vbHRpcEZpZWxkQ29uZiA9PT0gdHJ1ZSB8fCBjb2wudG9vbHRpcEZpZWxkID09PSB0cnVlKSB7XG5cdFx0aWYgKGNvbC5maWVsZCkge1xuXHRcdFx0Y29sLnRvb2x0aXBGaWVsZCA9IGNvbC5maWVsZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGVsZXRlIGNvbC50b29sdGlwRmllbGQ7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGNvbC50b29sdGlwRmllbGRDb25mID09PSBmYWxzZSB8fCBjb2wudG9vbHRpcEZpZWxkID09PSBmYWxzZSkge1xuXHRcdGRlbGV0ZSBjb2wudG9vbHRpcEZpZWxkO1xuXHR9XG59O1xuXG5leHBvcnQgY29uc3QgY29udmVydENvbCA9IChvcHRpb25zOiBhbnksIGNvbDogYW55W10sIGF1dGhMZXZlbDogbnVtYmVyLCBkcmFnU29ydD86IHN0cmluZykgPT4ge1xuXHQvLyBAdHMtaWdub3JlXG5cdGNvbnN0IGlzSTE4biA9IHdpbmRvdy5hcHBJc0kxOG47XG5cdC8vIGNvbnNvbGUubG9nKCdpc0kxOG4tLS0tLScsaXNJMThuKVxuXHRjb2wuZm9yRWFjaCgoaXRlbTogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XG5cdFx0Y29udmVydFRvb2x0aXBGaWVsZChpdGVtKTtcblx0XHRpZiAodHlwZW9mIGl0ZW0uaGlkZSAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgaXRlbS5oaWRlICE9PSAnc3RyaW5nJykge1xuXHRcdFx0aXRlbS5oaWRlID0gaXRlbS5oaWRlQ29sID09PSB0cnVlIHx8IGl0ZW0uaGlkZSA9PT0gdHJ1ZTtcblx0XHR9XG5cdFx0aWYgKGF1dGhMZXZlbCA8IDMpIHtcblx0XHRcdGl0ZW0uZWRpdGFibGUgPSBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKGRyYWdTb3J0ICYmIGluZGV4ID09PSAwKSB7XHJcblx0XHRcdGl0ZW0ucm93RHJhZyA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRpZiAoaXNJMThuICYmICghaXRlbS5oYXNPd25Qcm9wZXJ0eSgnaTE4bktleScpIHx8IGl0ZW0uaTE4bktleSA9PSAnJykpIHtcblx0XHRcdGl0ZW0uaTE4bktleSA9IGB0YWJsZXMuJHtvcHRpb25zLm1vZGVsTmFtZX0uJHtpdGVtLmZpZWxkfWA7XG5cdFx0fVxuXHRcdGlmIChpdGVtLmhhc093blByb3BlcnR5KCd0ZXh0V3JhcCcpICYmIGl0ZW0udGV4dFdyYXAgJiYgaXRlbS5jZWxsRWRpdG9yICE9PSAnY2VsbEVkaXRUZXh0YXJlYUNvbXBvbmVudCcpIHtcblx0XHRcdGl0ZW0uYXV0b0hlaWdodCA9IHRydWU7XG5cdFx0XHRpdGVtLmNlbGxDbGFzcyA9ICdjZWxsLXdyYXAtdGV4dCc7XG5cdFx0fVxuXHRcdGlmIChpdGVtLmNlbGxFZGl0b3IgPT09ICdjZWxsRWRpdFRleHRhcmVhQ29tcG9uZW50Jykge1xuXHRcdFx0aXRlbS53cmFwVGV4dCA9IHRydWU7XG5cdFx0XHRpdGVtLmF1dG9IZWlnaHQgPSB0cnVlO1xuXHRcdFx0aXRlbS5jZWxsQ2xhc3MgPSBhcHBlbmRDZWxsQ2xhc3MoaXRlbS5jZWxsQ2xhc3MsICdjZWxsLXRleHRhcmVhLXdyYXAtdGV4dCcpO1xuXHRcdFx0c3VwcHJlc3NUZXh0YXJlYVNoaWZ0RW50ZXIoaXRlbSk7XG5cdFx0fVxuXHRcdGlmIChpdGVtLmZpZWxkVHlwZSA9PSAnVkFSQ0hBUicpIHtcblx0XHRcdGl0ZW0uY2VsbERhdGFUeXBlID0gZmFsc2U7XG5cdFx0fVxuXHRcdGl0ZW0uaGVhZGVyVmFsdWVHZXR0ZXIgPSB3cmFwSGVhZGVyVmFsdWVHZXR0ZXIoaXRlbS5oZWFkZXJWYWx1ZUdldHRlciwgaXRlbSk7XHJcblx0XHRpZiAoaXRlbS5yb3dTcGFuQ29uZikge1xyXG5cdFx0XHRsZXQgcm93U3BhbiA9IHtcclxuXHRcdFx0XHRyb3dTcGFuOiAocGFyYW1zOiBhbnkpID0+IGNhbGNSb3dTcGFuKHBhcmFtcyksXHJcblx0XHRcdFx0Y2VsbFJlbmRlcmVyOiAncm93U3BhblJlbmRlcmVyJyxcclxuXHRcdFx0XHRjZWxsUmVuZGVyZXJQYXJhbXM6IHtcclxuXHRcdFx0XHRcdHJvd1NwYW46IChwYXJhbXM6IGFueSkgPT4gY2FsY1Jvd1NwYW4ocGFyYW1zKSxcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHR9O1xyXG5cdFx0XHRPYmplY3QuYXNzaWduKGl0ZW0sIHJvd1NwYW4pO1xyXG5cdFx0XHRvcHRpb25zLnN1cHByZXNzUm93VHJhbnNmb3JtID0gdHJ1ZTtcclxuXHRcdFx0b3B0aW9ucy5yb3dDbGFzcyA9ICdyb3dTcGFuJztcclxuXHRcdH1cclxuXHRcdC8vIGlmKGl0ZW0uZWRpdGFibGUpe1xyXG5cdFx0Ly8gXHRpdGVtLmhlYWRlckNsYXNzID0gaXRlbS5oYXNPd25Qcm9wZXJ0eSgnaGVhZGVyQ2xhc3MnKVxyXG5cdFx0Ly8gXHRcdD8gYCR7aXRlbS5oZWFkZXJDbGFzc30gZWRpdGFibGUtY29sdW1uLWhlYWRlcmBcclxuXHRcdC8vIFx0XHQ6ICdlZGl0YWJsZS1jb2x1bW4taGVhZGVyJ1xyXG5cdFx0Ly8gfVxyXG5cdH0pO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGdyaWRPcHRpb25zSG9va2VyID0gKGdyaWRPcHRpb25zOiBhbnkpID0+IHtcclxuXHRncmlkT3B0aW9ucz8uY29sdW1uRGVmcz8uZm9yRWFjaCgoY29sOiBhbnkpID0+IHtcclxuXHRcdGlmIChjb2wuaGlkZUNvbCkge1xyXG5cdFx0XHRjb2wuaGlkZSA9IGNvbC5oaWRlQ29sO1xyXG5cdFx0XHRkZWxldGUgY29sLmhpZGVDb2w7XHJcblx0XHR9XHJcblx0XHQvLyBAdHMtaWdub3JlXHJcblx0XHRjb25zdCBpc0kxOG4gPSB3aW5kb3cuYXBwSXNJMThuO1xyXG5cdFx0aWYgKGlzSTE4biAmJiAoIWNvbC5oYXNPd25Qcm9wZXJ0eSgnaTE4bktleScpIHx8IGNvbC5pMThuS2V5ID09ICcnKSkge1xuXHRcdFx0Y29sLmkxOG5LZXkgPSBgdGFibGVzLiR7Z3JpZE9wdGlvbnMubW9kZWxOYW1lfS4ke2NvbC5maWVsZH1gO1xuXHRcdH1cblx0XHRpZiAoY29sLmhhc093blByb3BlcnR5KCd0ZXh0V3JhcCcpICYmIGNvbC50ZXh0V3JhcCAmJiBjb2wuY2VsbEVkaXRvciAhPT0gJ2NlbGxFZGl0VGV4dGFyZWFDb21wb25lbnQnKSB7XG5cdFx0XHRjb2wuYXV0b0hlaWdodCA9IHRydWU7XG5cdFx0XHRjb2wuY2VsbENsYXNzID0gJ2NlbGwtd3JhcC10ZXh0Jztcblx0XHR9XG5cdFx0aWYgKGNvbC5jZWxsRWRpdG9yID09PSAnY2VsbEVkaXRUZXh0YXJlYUNvbXBvbmVudCcpIHtcblx0XHRcdGNvbC53cmFwVGV4dCA9IHRydWU7XG5cdFx0XHRjb2wuYXV0b0hlaWdodCA9IHRydWU7XG5cdFx0XHRjb2wuY2VsbENsYXNzID0gYXBwZW5kQ2VsbENsYXNzKGNvbC5jZWxsQ2xhc3MsICdjZWxsLXRleHRhcmVhLXdyYXAtdGV4dCcpO1xuXHRcdFx0c3VwcHJlc3NUZXh0YXJlYVNoaWZ0RW50ZXIoY29sKTtcblx0XHR9XG5cdFx0Y29sLmhlYWRlclZhbHVlR2V0dGVyID0gd3JhcEhlYWRlclZhbHVlR2V0dGVyKGNvbC5oZWFkZXJWYWx1ZUdldHRlciwgY29sKTtcblx0XHRpZiAoY29sLnJvd1NwYW5Db25mKSB7XHJcblx0XHRcdGxldCByb3dTcGFuID0ge1xyXG5cdFx0XHRcdHJvd1NwYW46IChwYXJhbXM6IGFueSkgPT4gY2FsY1Jvd1NwYW4ocGFyYW1zKSxcclxuXHRcdFx0XHRjZWxsUmVuZGVyZXI6ICdyb3dTcGFuUmVuZGVyZXInLFxyXG5cdFx0XHRcdGNlbGxSZW5kZXJlclBhcmFtczoge1xyXG5cdFx0XHRcdFx0cm93U3BhbjogKHBhcmFtczogYW55KSA9PiBjYWxjUm93U3BhbihwYXJhbXMpLFxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdH07XHJcblx0XHRcdE9iamVjdC5hc3NpZ24oY29sLCByb3dTcGFuKTtcclxuXHRcdFx0Z3JpZE9wdGlvbnMuc3VwcHJlc3NSb3dUcmFuc2Zvcm0gPSB0cnVlO1xyXG5cdFx0XHRncmlkT3B0aW9ucy5yb3dDbGFzcyA9ICdyb3dTcGFuJztcclxuXHRcdH1cclxuXHR9KTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCB3cmFwSGVhZGVyVmFsdWVHZXR0ZXIgPSAoZ2V0dGVyOiBhbnksIGNvbERlZjogYW55KSA9PiB7XHJcblx0aWYgKHR5cGVvZiBnZXR0ZXIgIT09ICdmdW5jdGlvbicpIHtcclxuXHRcdHJldHVybiBnZXR0ZXI7XHJcblx0fVxyXG5cdHJldHVybiAocGFyYW1zOiBhbnkpID0+IHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdGNvbnN0IHZhbHVlID0gZ2V0dGVyKHBhcmFtcyk7XHJcblx0XHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSAnJykge1xyXG5cdFx0XHRcdHJldHVybiByZXNvbHZlSGVhZGVyRmFsbGJhY2socGFyYW1zPy5jb2xEZWYgfHwgY29sRGVmKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gdmFsdWU7XHJcblx0XHR9IGNhdGNoIChlcnJvcikge1xyXG5cdFx0XHRjb25zb2xlLmVycm9yKCdoZWFkZXJWYWx1ZUdldHRlciDmiafooYzlpLHotKU6JywgZXJyb3IsIGNvbERlZik7XHJcblx0XHRcdHJldHVybiByZXNvbHZlSGVhZGVyRmFsbGJhY2socGFyYW1zPy5jb2xEZWYgfHwgY29sRGVmKTtcclxuXHRcdH1cclxuXHR9O1xyXG59O1xyXG5cclxuY29uc3QgcmVzb2x2ZUhlYWRlckZhbGxiYWNrID0gKGNvbERlZjogYW55KSA9PiB7XHJcblx0cmV0dXJuIGNvbERlZj8uaGVhZGVyTmFtZSB8fCBjb2xEZWY/LmZpZWxkIHx8ICcnO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGNvbnZlcnRHcmlkID0gKHRoaXNBcmc6IGFueSwgZ3JpZExpc3Q6IGFueSwgZml0ZXJQcmVsb2FkczogYW55KSA9PiB7XHJcblx0Z3JpZExpc3QuZm9yRWFjaChhc3luYyAoaXRlbTogYW55KSA9PiB7XHJcblx0XHQhaXRlbS50eXBlICYmIChpdGVtLnR5cGUgPSAnZ3JpZCcpO1xyXG5cdFx0bGV0IGdyaWQ6IGFueSA9IHsgdHlwZTogaXRlbS50eXBlIH07XHJcblx0XHRpZiAoaXRlbS5maXRlclByZWxvYWRzIGluc3RhbmNlb2YgQXJyYXkpIHtcclxuXHRcdFx0Zml0ZXJQcmVsb2Fkcy5wdXNoKC4uLml0ZW0uZml0ZXJQcmVsb2Fkcyk7XHJcblx0XHR9XHJcblx0XHRpZiAoaXRlbS50eXBlID09ICdncmlkJykge1xyXG5cdFx0XHRsZXQge1xyXG5cdFx0XHRcdGdyaWRPcHRpb25zOiB7IGNvbHVtbkRlZnMsIC4uLnJlc3RHcmlkT3B0aW9ucyB9LFxyXG5cdFx0XHRcdHN1YlRhYmxlU291cmNlLFxyXG5cdFx0XHRcdHN1YkRhdGFLZXksXHJcblx0XHRcdFx0dGl0bGUsXHJcblx0XHRcdFx0c2VsZWN0RGF0YUNiLFxyXG5cdFx0XHRcdGZrLFxyXG5cdFx0XHRcdG1haW5GaWVsZCxcclxuXHRcdFx0XHR1bmlxdWVGaWVsZCxcblx0XHRcdFx0YWRkRGF0YUNiLFxuXHRcdFx0XHRhZGRGdW5jLFxuXHRcdFx0XHRkZWxldGVGdW5jLFxuXHRcdFx0XHRkZWxldGVIaWRkZW4sXHJcblx0XHRcdFx0c2hvd0RlbGV0ZSA9IHRydWUsXHJcblx0XHRcdFx0YWRkSGlkZGVuLFxyXG5cdFx0XHRcdHNjcm9sbEhlaWdodCxcclxuXHRcdFx0XHRkcmFnU29ydCxcclxuXHRcdFx0XHRzZWxlY3Rpb25Nb2RlLFxyXG5cdFx0XHRcdGlzUm93U2VsZWN0YWJsZSxcclxuXHRcdFx0XHRhZGRTb3J0LFxyXG5cdFx0XHRcdHJlZmVyZW5jZSxcclxuXHRcdFx0XHRzbG90S2V5LFxyXG5cdFx0XHRcdHN1YlNhdmUsXHJcblx0XHRcdFx0Z3JpZEN1c3RvbURpc2FibGVkXHJcblx0XHRcdH0gPSBpdGVtO1xyXG5cdFx0XHRncmlkID0geyBzdWJUYWJsZVNvdXJjZSwgc3ViRGF0YUtleSwgdGl0bGUsIHNob3dEZWxldGUsIHNsb3RLZXksIHN1YlNhdmUsIGFkZEZ1bmMsIGRlbGV0ZUZ1bmMsIGRlbGV0ZUhpZGRlbiwgYWRkSGlkZGVuLCBncmlkQ3VzdG9tRGlzYWJsZWQsIC4uLmdyaWQgfTtcblx0XHRcdGxldCBncmlkT3B0aW9ucyA9IHtcclxuXHRcdFx0XHQuLi5yZXN0R3JpZE9wdGlvbnMsXHJcblx0XHRcdFx0ZmssXHJcblx0XHRcdFx0c3ViVGFibGVTb3VyY2UsXHJcblx0XHRcdFx0c3ViRGF0YUtleSxcclxuXHRcdFx0XHRtYWluRmllbGQsXHJcblx0XHRcdFx0cmVmZXJlbmNlLFxyXG5cdFx0XHR9O1xyXG5cdFx0XHQvLyBAdHMtaWdub3JlXHJcblx0XHRcdGlmICh3aW5kb3cuYXBwSXNJMThuICYmICghaXRlbS5oYXNPd25Qcm9wZXJ0eSgnaTE4bktleScpIHx8IGl0ZW0uaTE4bktleSA9PSAnJykpIHtcclxuXHRcdFx0XHRncmlkLmkxOG5LZXkgPSBgdGFibGVzLiR7dGhpc0FyZy5nZXRQcm0ubW9kZWxOYW1lfS4ke3N1YkRhdGFLZXl9YDtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoZ3JpZE9wdGlvbnMucm93TW9kZWxUeXBlID09ICdjbGllbnRTaWRlJykge1xyXG5cdFx0XHRcdGdyaWRPcHRpb25zLnN1cHByZXNzUm93VmlydHVhbGlzYXRpb24gPSB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChzY3JvbGxIZWlnaHQpIHtcclxuXHRcdFx0XHRncmlkT3B0aW9ucy5zY3JvbGxIZWlnaHQgPSBzY3JvbGxIZWlnaHQ7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKGRyYWdTb3J0KSB7XHJcblx0XHRcdFx0Z3JpZE9wdGlvbnMucm93RHJhZ01hbmFnZWQgPSB0cnVlO1xyXG5cdFx0XHRcdGdyaWRPcHRpb25zLmRyYWdTb3J0ID0gZHJhZ1NvcnQ7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHNlbGVjdGlvbk1vZGUpIHtcclxuXHRcdFx0XHRncmlkT3B0aW9ucy5zZWxlY3Rpb25Nb2RlID0gc2VsZWN0aW9uTW9kZTtcclxuXHRcdFx0XHRpZiAoc2VsZWN0aW9uTW9kZSAhPSAnbm9uZScpIHtcclxuXHRcdFx0XHRcdGdyaWRPcHRpb25zLnJvd1NlbGVjdGlvbiA9IHtcclxuXHRcdFx0XHRcdFx0bW9kZTogc2VsZWN0aW9uTW9kZSA9PSAnc2luZ2xlJyA/ICdzaW5nbGVSb3cnIDogJ211bHRpUm93JyxcclxuXHRcdFx0XHRcdFx0aXNSb3dTZWxlY3RhYmxlOiBpc1Jvd1NlbGVjdGFibGUgPyBpc1Jvd1NlbGVjdGFibGUgOiBudWxsLFxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0Z3JpZE9wdGlvbnMucm93U2VsZWN0aW9uID0gdW5kZWZpbmVkO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRjb252ZXJ0Q29sKGdyaWRPcHRpb25zLCBjb2x1bW5EZWZzLCB0aGlzQXJnLmF1dGhMZXZlbCwgZHJhZ1NvcnQpO1xyXG5cdFx0XHRncmlkT3B0aW9ucy5jb2x1bW5EZWZzID0gY29sdW1uRGVmcztcclxuXHRcdFx0aWYgKHN1YlRhYmxlU291cmNlID09PSAnc2VsZWN0JyAmJiBpdGVtLnNlbGVjdE1vZGVsQ29kZSkge1xyXG5cdFx0XHRcdHRoaXNBcmcud2ViZ2V0KHsgY29kZTogaXRlbS5zZWxlY3RNb2RlbENvZGUgfSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG5cdFx0XHRcdFx0bGV0IHNlbGVjdENvbnRlbnQgPSBwYXJzZUZ1bmN0aW9ucyhKU09OLnBhcnNlKHJlcy5jb250ZW50KSwgdGhpc0FyZyk7XHJcblx0XHRcdFx0XHRncmlkLnNlbGVjdE9wdGlvbnMgPSBzZWxlY3RDb250ZW50Py5ncmlkT3B0aW9ucztcclxuXHRcdFx0XHRcdGdyaWQuc2VsZWN0T3B0aW9ucy5yb3dNb2RlbFR5cGUgPSBncmlkLnNlbGVjdE9wdGlvbnMucm93TW9kZWxUeXBlIHx8ICdzZXJ2ZXJTaWRlJztcclxuXHRcdFx0XHRcdGlmIChncmlkLnNlbGVjdE9wdGlvbnMucm93TW9kZWxUeXBlID09ICdzZXJ2ZXJTaWRlJykge1xyXG5cdFx0XHRcdFx0XHRncmlkLnNlbGVjdE9wdGlvbnMuc2VydmVyRnVuYyA9IGdyaWQuc2VsZWN0T3B0aW9ucy5zZXJ2ZXJGdW5jIHx8IHRoaXNBcmcud2ViX3NlYXJjaC5iaW5kKHRoaXNBcmcpO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0Z3JpZC5zZWxlY3RPcHRpb25zLmNsaWVudEZ1bmMgPSBncmlkLnNlbGVjdE9wdGlvbnMuY2xpZW50RnVuYyB8fCB0aGlzQXJnLndlYl9zZWFyY2guYmluZCh0aGlzQXJnKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGdyaWQudW5pcXVlRmllbGQgPSB1bmlxdWVGaWVsZDtcclxuXHRcdFx0XHRcdGdyaWQuc2VsZWN0RGF0YUNiID0gc2VsZWN0RGF0YUNiO1xyXG5cdFx0XHRcdFx0Z3JpZC5zZWxlY3RPcHRpb25zLnNjcm9sbEhlaWdodCA9ICczMDBweCc7XHJcblx0XHRcdFx0XHRncmlkLnNlbGVjdE9wdGlvbnMuc2VhcmNoUHJtID0gc2VsZWN0Q29udGVudC5zZWFyY2hQcm07XHJcblx0XHRcdFx0XHRncmlkLnNlbGVjdE1vZGVsQ29kZSA9IGl0ZW0uc2VsZWN0TW9kZWxDb2RlO1xyXG5cdFx0XHRcdFx0Y29udmVydENvbChncmlkLnNlbGVjdE9wdGlvbnMsIGdyaWQuc2VsZWN0T3B0aW9ucy5jb2x1bW5EZWZzISwgMSk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0Z3JpZC5zZWFyY2hQcm0gPSB7IC4uLnRoaXNBcmcuc2VhcmNoUHJtIH07XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0YWRkRGF0YUNiICYmIChncmlkT3B0aW9ucy5hZGREYXRhQ2IgPSBhZGREYXRhQ2IpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGdyaWQuZ3JpZE9wdGlvbnMgPSBncmlkT3B0aW9ucztcclxuXHRcdFx0YWRkU29ydCAmJiAoZ3JpZC5hZGRTb3J0ID0gYWRkU29ydCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRpdGVtLmludGVyYWN0aXZlTGFiZWwgPSB0cnVlO1xyXG5cdFx0XHRncmlkID0ge1xyXG5cdFx0XHRcdC4uLml0ZW0sXHJcblx0XHRcdH07XHJcblx0XHRcdGdyaWQuZm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG5cdFx0fVxyXG5cdFx0dGhpc0FyZy5ncmlkcy5wdXNoKGdyaWQpO1xyXG5cdH0pO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGNvbnZlcnRGb3JtID0gKHRoaXNBcmc6IGFueSwgZ3JvdXBBcnI6IGFueSwgc291cmNlRGF0YTogYW55KSA9PiB7XHJcblx0Z3JvdXBBcnIuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XHJcblx0XHRpZiAodGhpc0FyZy5hdXRoTGV2ZWwgPCAzKSB7XHJcblx0XHRcdGl0ZW1bZm9ybVR5cGVUb1Byb3BzW2l0ZW0udHlwZV1dLmRpc2FibGVkID0gdHJ1ZTtcclxuXHRcdH1cclxuXHR9KTtcclxuXHR0aGlzQXJnLmZvcm1PcHRpb25zID0ge1xyXG5cdFx0ZmllbGRzOiBbXHJcblx0XHRcdHtcclxuXHRcdFx0XHRncm91cENsYXNzOiAnZmxleCBmbGV4LXJvdyBmbGV4LXdyYXAnLFxyXG5cdFx0XHRcdGdyb3VwOiBncm91cEFycixcclxuXHRcdFx0fSxcclxuXHRcdF0sXHJcblx0XHRmb3JtOiBuZXcgRm9ybUdyb3VwKHt9KSxcclxuXHRcdG1haW5GaWVsZDogc291cmNlRGF0YS5tb2RlbC5tYWluRmllbGRzLFxyXG5cdFx0bW9kZWxOYW1lOiBzb3VyY2VEYXRhLm1vZGVsLm1vZGVsTmFtZSxcclxuXHRcdGV4dHJhOiB7IHRoaXNBcmcgfSxcclxuXHR9O1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGNsZWFyTG9jYWwgPSAoKSA9PiB7XHJcblx0bGV0IHRoZW1lQ29uZmlnU3RhdGUgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3RoZW1lQ29uZmlnU3RhdGUnKTtcclxuXHR3aW5kb3cubG9jYWxTdG9yYWdlLmNsZWFyKCk7XHJcblx0aWYgKHRoZW1lQ29uZmlnU3RhdGUpIHtcclxuXHRcdHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndGhlbWVDb25maWdTdGF0ZScsIHRoZW1lQ29uZmlnU3RhdGUpO1xyXG5cdH1cclxuXHR3aW5kb3cuc2Vzc2lvblN0b3JhZ2UuY2xlYXIoKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBwYWdlTGlzdEdyaWRPcHRpb25zID0gKGdyaWRPcHRpb25zOiBhbnksIHRoaXNBcmc6IGFueSkgPT4ge1xyXG5cdGdyaWRPcHRpb25zLnNjcm9sbEhlaWdodCA9ICdjYWxjKDEwMHZoIC0gOTVweCknO1xyXG5cdGdyaWRPcHRpb25zLnJvd01vZGVsVHlwZSA9IGdyaWRPcHRpb25zLnJvd01vZGVsVHlwZSB8fCAnc2VydmVyU2lkZSc7XHJcblx0aWYgKGdyaWRPcHRpb25zLnJvd01vZGVsVHlwZSA9PSAnc2VydmVyU2lkZScpIHtcclxuXHRcdGdyaWRPcHRpb25zLnNlcnZlckZ1bmMgPSBncmlkT3B0aW9ucy5zZXJ2ZXJGdW5jIHx8IHRoaXNBcmcud2ViX3NlYXJjaC5iaW5kKHRoaXNBcmcpO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRncmlkT3B0aW9ucy5jbGllbnRGdW5jID0gZ3JpZE9wdGlvbnMuY2xpZW50RnVuYyB8fCB0aGlzQXJnLndlYl9zZWFyY2guYmluZCh0aGlzQXJnKTtcclxuXHR9XHJcblx0aWYgKGdyaWRPcHRpb25zLnNlbGVjdGlvbk1vZGUpIHtcclxuXHRcdC8vIGdyaWRPcHRpb25zLnNlbGVjdGlvbk1vZGUgPSBzZWxlY3Rpb25Nb2RlXHJcblx0XHRpZiAoZ3JpZE9wdGlvbnMuc2VsZWN0aW9uTW9kZSAhPSAnbm9uZScpIHtcclxuXHRcdFx0Z3JpZE9wdGlvbnMucm93U2VsZWN0aW9uID0ge1xyXG5cdFx0XHRcdG1vZGU6IGdyaWRPcHRpb25zLnNlbGVjdGlvbk1vZGUgPT0gJ3NpbmdsZScgPyAnc2luZ2xlUm93JyA6ICdtdWx0aVJvdycsXHJcblx0XHRcdFx0aXNSb3dTZWxlY3RhYmxlOiBncmlkT3B0aW9ucy5pc1Jvd1NlbGVjdGFibGUgPyBncmlkT3B0aW9ucy5pc1Jvd1NlbGVjdGFibGUgOiB1bmRlZmluZWQsXHJcblx0XHRcdH07XHJcblx0XHRcdGlmIChncmlkT3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnaGVhZGVyQ2hlY2tib3gnKSAmJiBncmlkT3B0aW9ucy5yb3dTZWxlY3Rpb24ubW9kZSA9PSAnbXVsdGlSb3cnKSB7XHJcblx0XHRcdFx0Z3JpZE9wdGlvbnMucm93U2VsZWN0aW9uLmhlYWRlckNoZWNrYm94ID0gZ3JpZE9wdGlvbnMuaGVhZGVyQ2hlY2tib3g7XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGdyaWRPcHRpb25zLnJvd1NlbGVjdGlvbiA9IHVuZGVmaW5lZDtcclxuXHRcdH1cclxuXHR9XHJcblx0Y29udmVydENvbChncmlkT3B0aW9ucywgZ3JpZE9wdGlvbnMuY29sdW1uRGVmcyEsIDEpO1xyXG5cdHJldHVybiBncmlkT3B0aW9ucztcclxufTtcclxuLy8g5rex5bqm5ou36LSdXHJcbmV4cG9ydCBjb25zdCBkZWVwQ2xvbmUgPSAoc291cmNlOiBhbnksIHRoYXQ6IGFueSwgY2FjaGU/OiBhbnkpID0+IHtcclxuXHRpZiAoIWNhY2hlKSB7XHJcblx0XHRjYWNoZSA9IG5ldyBNYXAoKTtcclxuXHR9XHJcblx0aWYgKGlzT2JzZXJ2YWJsZShzb3VyY2UpKSB7XHJcblx0XHRyZXR1cm4gc291cmNlO1xyXG5cdH1cclxuXHRpZiAoc291cmNlIGluc3RhbmNlb2YgT2JqZWN0KSB7XHJcblx0XHQvLyDkuI3ogIPomZHot6ggaWZyYW1lXHJcblx0XHRpZiAoY2FjaGUuZ2V0KHNvdXJjZSkpIHtcclxuXHRcdFx0cmV0dXJuIGNhY2hlLmdldChzb3VyY2UpO1xyXG5cdFx0fVxyXG5cdFx0bGV0IHJlc3VsdDogYW55O1xyXG5cdFx0aWYgKHNvdXJjZSBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XHJcblx0XHRcdGlmIChzb3VyY2UucHJvdG90eXBlKSB7XHJcblx0XHRcdFx0Ly8g5pyJIHByb3RvdHlwZSDlsLHmmK/mma7pgJrlh73mlbBcclxuXHRcdFx0XHRyZXN1bHQgPSBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gc291cmNlLmFwcGx5KHRoYXQsIGFyZ3VtZW50cyk7XHJcblx0XHRcdFx0fTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRyZXN1bHQgPSAoLi4uYXJnczogYW55KSA9PiB7XHJcblx0XHRcdFx0XHRyZXR1cm4gc291cmNlLmNhbGwodW5kZWZpbmVkLCAuLi5hcmdzKTtcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2UgaWYgKHNvdXJjZSBpbnN0YW5jZW9mIEFycmF5KSB7XHJcblx0XHRcdHJlc3VsdCA9IFtdO1xyXG5cdFx0fSBlbHNlIGlmIChzb3VyY2UgaW5zdGFuY2VvZiBEYXRlKSB7XHJcblx0XHRcdHJlc3VsdCA9IG5ldyBEYXRlKChzb3VyY2UgYXMgYW55KSAtIDApO1xyXG5cdFx0fSBlbHNlIGlmIChzb3VyY2UgaW5zdGFuY2VvZiBSZWdFeHApIHtcclxuXHRcdFx0cmVzdWx0ID0gbmV3IFJlZ0V4cChzb3VyY2Uuc291cmNlLCBzb3VyY2UuZmxhZ3MpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0cmVzdWx0ID0ge307XHJcblx0XHR9XHJcblx0XHRjYWNoZS5zZXQoc291cmNlLCByZXN1bHQpO1xyXG5cdFx0Zm9yIChsZXQga2V5IGluIHNvdXJjZSkge1xyXG5cdFx0XHRpZiAoc291cmNlLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuXHRcdFx0XHRyZXN1bHRba2V5XSA9IGRlZXBDbG9uZShzb3VyY2Vba2V5XSwgdGhhdCwgY2FjaGUpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gc291cmNlO1xyXG5cdH1cclxufTtcclxuIl19
|
|
@@ -2430,8 +2430,8 @@ const convertGrid = (thisArg, gridList, fiterPreloads) => {
|
|
|
2430
2430
|
fiterPreloads.push(...item.fiterPreloads);
|
|
2431
2431
|
}
|
|
2432
2432
|
if (item.type == 'grid') {
|
|
2433
|
-
let { gridOptions: { columnDefs, ...restGridOptions }, subTableSource, subDataKey, title, selectDataCb, fk, mainField, uniqueField, addDataCb, deleteFunc, deleteHidden, showDelete = true, addHidden, scrollHeight, dragSort, selectionMode, isRowSelectable, addSort, reference, slotKey, subSave, gridCustomDisabled } = item;
|
|
2434
|
-
grid = { subTableSource, subDataKey, title, showDelete, slotKey, subSave, deleteFunc, deleteHidden, addHidden, gridCustomDisabled, ...grid };
|
|
2433
|
+
let { gridOptions: { columnDefs, ...restGridOptions }, subTableSource, subDataKey, title, selectDataCb, fk, mainField, uniqueField, addDataCb, addFunc, deleteFunc, deleteHidden, showDelete = true, addHidden, scrollHeight, dragSort, selectionMode, isRowSelectable, addSort, reference, slotKey, subSave, gridCustomDisabled } = item;
|
|
2434
|
+
grid = { subTableSource, subDataKey, title, showDelete, slotKey, subSave, addFunc, deleteFunc, deleteHidden, addHidden, gridCustomDisabled, ...grid };
|
|
2435
2435
|
let gridOptions = {
|
|
2436
2436
|
...restGridOptions,
|
|
2437
2437
|
fk,
|
|
@@ -12622,7 +12622,11 @@ class PageFormComponent extends AmComponent {
|
|
|
12622
12622
|
item.editable = true;
|
|
12623
12623
|
}
|
|
12624
12624
|
});
|
|
12625
|
-
|
|
12625
|
+
const grid = this.customGrid?.get(index);
|
|
12626
|
+
if (typeof grid?.refreshColumnDefs === 'function') {
|
|
12627
|
+
// 统一处理列配置,保留 hideExpression 和编辑器转换结果,避免原始列覆盖运行时状态。
|
|
12628
|
+
void grid.refreshColumnDefs(v.gridOptions);
|
|
12629
|
+
}
|
|
12626
12630
|
}
|
|
12627
12631
|
else if (v.type == 'form') {
|
|
12628
12632
|
v.fields?.forEach((item) => {
|
|
@@ -12755,7 +12759,7 @@ class PageFormComponent extends AmComponent {
|
|
|
12755
12759
|
const currentGrid = grid ?? this.getCurrentGrid();
|
|
12756
12760
|
return currentGrid?.subSave?.label || '保存';
|
|
12757
12761
|
}
|
|
12758
|
-
|
|
12762
|
+
createSubGridContext(grid) {
|
|
12759
12763
|
const index = grid ? this.resolvedGridList().indexOf(grid) : -1;
|
|
12760
12764
|
return {
|
|
12761
12765
|
data: this.getPrm.data || this.cForm?.model?.(),
|
|
@@ -12769,11 +12773,11 @@ class PageFormComponent extends AmComponent {
|
|
|
12769
12773
|
};
|
|
12770
12774
|
}
|
|
12771
12775
|
resolveSubButtonHidden(grid, hidden) {
|
|
12772
|
-
if (typeof hidden !== 'function') {
|
|
12776
|
+
if (!grid || typeof hidden !== 'function') {
|
|
12773
12777
|
return false;
|
|
12774
12778
|
}
|
|
12775
12779
|
try {
|
|
12776
|
-
return !!hidden.call(this.runtimeContext?.['component'] || this, this.
|
|
12780
|
+
return !!hidden.call(this.runtimeContext?.['component'] || this, this.createSubGridContext(grid));
|
|
12777
12781
|
}
|
|
12778
12782
|
catch (error) {
|
|
12779
12783
|
console.error('子表按钮隐藏条件执行失败:', error, grid);
|
|
@@ -12926,12 +12930,30 @@ class PageFormComponent extends AmComponent {
|
|
|
12926
12930
|
}
|
|
12927
12931
|
addRowClickHandler(grid) {
|
|
12928
12932
|
const subDataKey = grid.subDataKey;
|
|
12933
|
+
const index = this.resolvedGridList().indexOf(grid);
|
|
12934
|
+
const isCustomSlot = Boolean(this.slotRenderStates[index]?.slot);
|
|
12929
12935
|
if (grid.subTableSource === 'handle') {
|
|
12930
12936
|
const addItem = grid.gridOptions?.addDataCb?.() ?? {};
|
|
12931
12937
|
this.pageFormService.addData(subDataKey, addItem, grid);
|
|
12932
12938
|
return;
|
|
12933
12939
|
}
|
|
12934
|
-
|
|
12940
|
+
if (grid.subTableSource === 'custom') {
|
|
12941
|
+
if (typeof grid.addFunc === 'function') {
|
|
12942
|
+
try {
|
|
12943
|
+
grid.addFunc.call(this.runtimeContext?.['component'] || this, this.createSubGridContext(grid));
|
|
12944
|
+
}
|
|
12945
|
+
catch (error) {
|
|
12946
|
+
console.error('子表自定义添加执行失败:', error, grid);
|
|
12947
|
+
}
|
|
12948
|
+
}
|
|
12949
|
+
return;
|
|
12950
|
+
}
|
|
12951
|
+
if (grid.subTableSource !== 'select') {
|
|
12952
|
+
return;
|
|
12953
|
+
}
|
|
12954
|
+
if (isCustomSlot) {
|
|
12955
|
+
this.pageFormService.addData(subDataKey, undefined, grid);
|
|
12956
|
+
}
|
|
12935
12957
|
this.dataSourceShow();
|
|
12936
12958
|
}
|
|
12937
12959
|
delRowClickHandler(grid) {
|
|
@@ -12980,7 +13002,7 @@ class PageFormComponent extends AmComponent {
|
|
|
12980
13002
|
}
|
|
12981
13003
|
}
|
|
12982
13004
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PageFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
12983
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: PageFormComponent, isStandalone: true, selector: "app-page-form", inputs: { addVisible: { classPropertyName: "addVisible", publicName: "addVisible", isSignal: true, isRequired: false, transformFunction: null }, gridList: { classPropertyName: "gridList", publicName: "gridList", isSignal: true, isRequired: false, transformFunction: null }, form: { classPropertyName: "form", publicName: "form", isSignal: true, isRequired: true, transformFunction: null }, getPrmInput: { classPropertyName: "getPrmInput", publicName: "getPrmInput", isSignal: true, isRequired: true, transformFunction: null }, statusSteps: { classPropertyName: "statusSteps", publicName: "statusSteps", isSignal: true, isRequired: false, transformFunction: null }, statusKey: { classPropertyName: "statusKey", publicName: "statusKey", isSignal: true, isRequired: false, transformFunction: null }, hrefBtnList: { classPropertyName: "hrefBtnList", publicName: "hrefBtnList", isSignal: true, isRequired: false, transformFunction: null }, setTitle: { classPropertyName: "setTitle", publicName: "setTitle", isSignal: true, isRequired: false, transformFunction: null }, actionList: { classPropertyName: "actionList", publicName: "actionList", isSignal: true, isRequired: false, transformFunction: null }, modelLog: { classPropertyName: "modelLog", publicName: "modelLog", isSignal: true, isRequired: false, transformFunction: null }, formDisabled: { classPropertyName: "formDisabled", publicName: "formDisabled", isSignal: true, isRequired: false, transformFunction: null }, statusConf: { classPropertyName: "statusConf", publicName: "statusConf", isSignal: true, isRequired: false, transformFunction: null }, formDetail: { classPropertyName: "formDetail", publicName: "formDetail", isSignal: true, isRequired: false, transformFunction: null }, saveFunc: { classPropertyName: "saveFunc", publicName: "saveFunc", isSignal: true, isRequired: false, transformFunction: null }, showMainSaveButton: { classPropertyName: "showMainSaveButton", publicName: "showMainSaveButton", isSignal: true, isRequired: false, transformFunction: null }, configNewPath: { classPropertyName: "configNewPath", publicName: "configNewPath", isSignal: true, isRequired: false, transformFunction: null }, closeFallbackUrl: { classPropertyName: "closeFallbackUrl", publicName: "closeFallbackUrl", isSignal: true, isRequired: false, transformFunction: null }, runtimeContextInput: { classPropertyName: "runtimeContextInput", publicName: "runtimeContextInput", isSignal: true, isRequired: false, transformFunction: null }, customLeftPanel: { classPropertyName: "customLeftPanel", publicName: "customLeftPanel", isSignal: true, isRequired: false, transformFunction: null }, customListFormTemplateMap: { classPropertyName: "customListFormTemplateMap", publicName: "customListFormTemplateMap", isSignal: true, isRequired: false, transformFunction: null }, customListFormInstanceMap: { classPropertyName: "customListFormInstanceMap", publicName: "customListFormInstanceMap", isSignal: true, isRequired: false, transformFunction: null }, leftPanel: { classPropertyName: "leftPanel", publicName: "leftPanel", isSignal: true, isRequired: false, transformFunction: null }, panelSelectedData: { classPropertyName: "panelSelectedData", publicName: "panelSelectedData", isSignal: true, isRequired: false, transformFunction: null }, authLevel: { classPropertyName: "authLevel", publicName: "authLevel", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "window:resize": "onResize()" } }, providers: [], queries: [{ propertyName: "pageFormSlots", predicate: PageFormSlotDirective, descendants: true }], viewQueries: [{ propertyName: "cForm", first: true, predicate: ["cForm"], descendants: true }, { propertyName: "rowSelector", first: true, predicate: RowSelectorComponent$1, descendants: true }, { propertyName: "customGrid", predicate: ["customGrid"], descendants: true }, { propertyName: "tabForm", predicate: ["tabForm"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"md:overflow-hidden\">\n <!-- \u4FDD\u5B58\u65B0\u5EFA\u64CD\u4F5C\u533A -->\n\t<div class=\"flex md:flex-wrap lg:flex-nowrap items-center md:justify-between py-1 px-1 border-b-[1px] border-[#dbdbdb] bg-white\">\n\t\t<div class=\"lg:basis-1/3 order-1\">\n\t\t\t<app-crumb-action\n\t\t\t\t[addVisible]=\"addVisible()\"\n\t\t\t\t[newUrl]=\"newUrl\"\n\t\t\t\t[isShowCog]=\"true\"\n\t\t\t\t[outlined]=\"true\"\n\t\t\t\t[authLevel]=\"authLevel()\"\n\t\t\t\t[actionList]=\"actionList()\"\n\t\t\t\t[configNewPath]=\"configNewPath()\"\n\t\t\t\t[closeFallbackUrl]=\"closeFallbackUrl()\"\n\t\t\t\t[data]=\"getPrm.data ?? {}\"\n\t\t\t\t[saveBtnDisable]=\"saveBtnDisable\"\n\t\t\t\t[showSaveButton]=\"showMainSaveButton()\"\n\t\t\t\t(actionEvent)=\"authClick($event)\"\n\t\t\t\t(saveEvent)=\"submitForm()\">\n\t\t\t</app-crumb-action>\n\t\t</div>\n\n\t\t<div class=\"basis-1/5 lg:basis-2/3 order-2 lg:order-2 md:order-last md:basis-full md:mt-[6px]\">\n\t\t\t<href-btn-list\n\t\t\t\t[hrefs]=\"hrefBtnList()\"\n\t\t\t\t(hrefClick)=\"goRun($event)\"></href-btn-list>\n\t\t\t<!-- @if (id) {\n\t\t\t\t@for (btn of hrefBtnList(); track btn) {\n\t\t\t\t\t<p-button\n\t\t\t\t\t\t[variant]=\"btn?.variant\"\n\t\t\t\t\t\t[severity]=\"btn?.severity\"\n\t\t\t\t\t\tclass=\"mr-[6px]\"\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t[icon]=\"btn?.icon\"\n\t\t\t\t\t\tlabel=\"{{ btn.i18nKey ? i18n.fanyi(btn.i18nKey) : btn.label }}\"\n\t\t\t\t\t\t(click)=\"goRun(btn)\">\n\t\t\t\t\t</p-button>\n\t\t\t\t}\n\t\t\t} -->\n\t\t</div>\n\t\t<div class=\"basis-1/3 order-3 flex flex-row-reverse\">\n\t\t\t@if (modelLog()) {\n\t\t\t\t<div class=\"hidden md:block\">\n\t\t\t\t\t<span\n\t\t\t\t\t\t[class]=\"'iconfont icon-sidebar icon-sidebar-' + sidebarMode()\"\n\t\t\t\t\t\t(click)=\"toggleLog()\"></span>\n\t\t\t\t</div>\n\t\t\t}\n\t\t</div>\n\t</div>\n\t<div class=\"flex\">\n\t\t<div class=\"px-2 flex flex-wrap items-center flex-1\">\n\t\t\t<div class=\"hidden md:basis-1/3 py-1 basis-full md:flex items-center flex-row order-1\">\n\t\t\t\t@for (action of actionList(); let i = $index; track action) {\n\t\t\t\t\t<p-button\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t[icon]=\"getPrm.data?.icon\"\n\t\t\t\t\t\t[loading]=\"action.loading\"\n\t\t\t\t\t\t[label]=\"action.i18nKey ? (action.i18nKey | translate) : action.label\"\n\t\t\t\t\t\t[disabled]=\"action.btnDisabled ? action.btnDisabled(getPrm.data) : false\"\n\t\t\t\t\t\t[styleClass]=\"\n\t\t\t\t\t\t\t(action.auth || 0) > (authLevel() || 0) || !!action.btnHidden?.(getPrm.data)\n\t\t\t\t\t\t\t\t? 'form-action hidden'\n\t\t\t\t\t\t\t\t: 'form-action block mr-[.5rem]'\n\t\t\t\t\t\t\"\n\t\t\t\t\t\t(onClick)=\"action.onClick != '' && action.onClick?.(getPrm.data, action)\">\n\t\t\t\t\t</p-button>\n\t\t\t\t}\n\t\t\t</div>\n\t\t\t<div class=\"md:basis-2/3 basis-full flex md:flex-row-reverse flex-row md:order-2 order-first w-full\">\n\t\t\t\t@if (stepsVisible) {\n\t\t\t\t\t<custom-steps\n\t\t\t\t\t\t#customSteps\n\t\t\t\t\t\tclass=\"w-full\"\n\t\t\t\t\t\t[steps]=\"statusSteps()\"\n\t\t\t\t\t\t[modelLog]=\"showLog()\"\n\t\t\t\t\t\t[current]=\"getPrm.data && getPrm.data[statusKey()] !== undefined ? getPrm.data[statusKey()] : 0\"\n\t\t\t\t\t\t[authLevel]=\"authLevel()\"\n\t\t\t\t\t\t[isClick]=\"this.statusConf().isClick\"\n\t\t\t\t\t\t(change)=\"statusChange($event, customSteps)\">\n\t\t\t\t\t</custom-steps>\n\t\t\t\t}\n\t\t\t</div>\n\t\t</div>\n\t\t@if (showLog()) {\n\t\t\t<div class=\"lg:w-[400px] md:w-[300px] hidden md:block\"></div>\n\t\t}\n\t</div>\n <!-- form \u4E3B\u533A\u57DF-->\n @if(this.form().form) {\n <div class=\"main flex flex-wrap\">\n @if (customLeftPanel()) {\n <div class=\"hidden md:block md:h-full md:overflow-y-auto md:flex-none md:w-fit md:max-w-full\">\n <ng-container *ngTemplateOutlet=\"customLeftPanel()\"></ng-container>\n </div>\n } @else if (leftPanel()?.enabled && leftPanel()?.mode === 'list') {\n <div class=\"hidden md:block md:h-full md:overflow-y-auto md:flex-none md:w-[220px] md:max-w-full px-2\">\n <div class=\"page-form-left-panel\">\n <am-single-select-listbox\n [options]=\"leftPanelItems\"\n [ngModel]=\"leftPanelSelectedValue\"\n (onChange)=\"onLeftPanelSelectionChange($event)\"\n [optionValue]=\"getPanelOptionValue()\"\n [optionLabel]=\"getPanelOptionLabel()\"\n [emptyMessage]=\"getPanelEmptyMessage()\"\n [allowDeselect]=\"getPanelAllowDeselect()\" />\n </div>\n </div>\n } @else if (leftPanel()?.enabled && leftPanel()?.mode === 'tree') {\n <div class=\"hidden md:block md:h-full md:overflow-y-auto md:flex-none md:w-[220px] md:max-w-full px-2\">\n <div class=\"page-form-left-panel page-form-tree-panel\">\n @if (leftPanelTreeNodes.length > 0) {\n <p-tree\n [value]=\"leftPanelTreeNodes\"\n selectionMode=\"single\"\n [(selection)]=\"leftPanelSelectedNode\"\n [emptyMessage]=\"getPanelEmptyMessage()\"\n styleClass=\"page-form-left-tree\"\n (onNodeSelect)=\"onLeftPanelTreeNodeSelect($event)\"\n (onNodeExpand)=\"onLeftPanelTreeNodeExpand($event)\"\n (onNodeCollapse)=\"onLeftPanelTreeNodeCollapse($event)\" />\n } @else {\n <div class=\"page-form-left-panel-empty\">{{ getPanelEmptyMessage() }}</div>\n }\n </div>\n </div>\n }\n <div class=\"w-full md:min-w-0 md:flex-1 md:h-full md:overflow-y-auto\">\n <div class=\"bg-white mx-2 form-panel\">\n <div class=\"p-2 flex-1\">\n <form [formGroup]=\"form().form!\">\n <custom-form\n #cForm\n [options]=\"formOptions\"\n [upsert]=\"upsertPrm\"\n [model]=\"getPrm.data ?? {}\"\n (modelChange)=\"onMainFormModelChange()\"></custom-form>\n </form>\n </div>\n @if (grids && grids.length > 0) {\n <div class=\"relative mb-2\">\n <p-tabs [(value)]=\"indexValue\">\n <p-tablist>\n @for (fchild of grids; let i = $index; track fchild) {\n <p-tab\n [value]=\"i\"\n (click)=\"tabClick()\">\n {{ fchild.i18nKey ? i18n.fanyi(fchild.i18nKey) : fchild.title }}\n </p-tab>\n }\n </p-tablist>\n </p-tabs>\n </div>\n }\n @for (grid of grids; let i = $index; track grid) {\n @let slotState = slotRenderStates[i];\n @let slot = slotState?.slot;\n <div [hidden]=\"indexValue != i\" [style.height]=\"slot ? grid.gridOptions.scrollHeight : null\">\n @if (slot) {\n <ng-container *ngTemplateOutlet=\"slot.templateRef; context: slotState.context\"> </ng-container>\n <div class=\"flex justify-end py-[5px] pr-[8px] bg-white\">\n @if (canShowCurrentTabSave(grid)) {\n <p-button\n icon=\"pi pi-cloud-upload\"\n [text]=\"true\"\n severity=\"primary\"\n [disabled]=\"grid.gridDisabled\"\n (onClick)=\"saveCurrentTab()\" />\n }\n @if (grid.subTableSource != 'none' && !isSubAddHidden(grid)) {\n <p-button\n icon=\"pi pi-plus\"\n [text]=\"true\"\n severity=\"success\"\n [disabled]=\"grid.gridDisabled\"\n (onClick)=\"addRowClickHandler(grid)\" />\n }\n @if (grid.showDelete && !isSubDeleteHidden(grid)) {\n <p-button\n icon=\"pi pi-trash\"\n [text]=\"true\"\n severity=\"danger\"\n [disabled]=\"grid.gridDisabled\"\n (onClick)=\"delRowClickHandler(grid)\" />\n }\n\t\t\t\t\t\t\t\t\t<div #customGrid></div>\n </div>\n } @else {\n @if (grid.type == 'grid') {\n <custom-grid\n #customGrid\n [rowData]=\"getPrm.data?.[grid.subDataKey!]\"\n [hideExpressionData]=\"getPrm.data ?? {}\"\n [hideExpressionVersion]=\"hideExpressionVersion\"\n [upsert]=\"upsertPrm\"\n (deleteEmit)=\"delRows($event)\"\n (gridDataChanged)=\"refreshSubGridColumnVisibility()\"\n [addType]=\"grid.subTableSource\"\n (addEmit)=\"dataSourceShow()\"\n [gridOptions]=\"grid.gridOptions\"\n [gridDisable]=\"grid.gridDisabled\"\n [authLevel]=\"authLevel()\"\n [showDelete]=\"grid.showDelete\"\n [deleteHidden]=\"isSubDeleteHidden(grid)\"\n [addHidden]=\"isSubAddHidden(grid)\"\n [subSaveVisible]=\"canShowCurrentTabSave(grid)\"\n [subSaveHidden]=\"isSubSaveHidden(grid)\"\n [subSaveLabel]=\"getCurrentTabSaveLabel(grid)\"\n [subSaveDisabled]=\"grid.gridDisabled\"\n [selectData]=\"grid.selectData\"\n [addSort]=\"grid.addSort\"\n (subSaveEmit)=\"saveCurrentTab()\">\n </custom-grid>\n } @else {\n @if (canShowCurrentTabSave(grid)) {\n <div class=\"flex justify-end px-2 pt-2 bg-white\">\n <p-button\n icon=\"pi pi-cloud-upload\"\n [text]=\"true\"\n severity=\"primary\"\n [disabled]=\"grid.gridDisable\"\n (onClick)=\"saveCurrentTab()\" />\n </div>\n }\n <custom-form\n #tabForm\n [options]=\"grid\"\n [upsert]=\"upsertPrm\"\n [model]=\"subFormModel[grid.subDataKey!] || {}\"\n (modelChange)=\"refreshSubGridColumnVisibility()\">\n </custom-form>\n }\n }\n </div>\n }\n </div>\n </div>\n @if (showLog()) {\n <div class=\"w-full lg:w-[400px] md:w-[300px] md:h-full md:overflow-y-auto hidden md:block\">\n <custom-log [logs]=\"getPrm.data?.log ?? []\"></custom-log>\n </div>\n }\n </div>\n }\n</div>\n<row-selector\n\t[(visible)]=\"visible\"\n\t[searchPrm]=\"dialogSearchPrm\"\n\t[gridOptions]=\"selectOptions\"\n\t[selectionKeys]=\"selectionKeys\"\n\t[selectModelCode]=\"currentSelectModelCode || undefined\"\n\t[customListFormByDialog]=\"currentCustomListFormTemplate\"\n\t[customListFormByDialogContext]=\"currentCustomListFormContext\"\n\t[customListDialogMap]=\"customListFormInstanceMap()\"\n\t(onOk)=\"onOk($event)\"\n\t(cancelSelect)=\"onCancelSelected($event)\">\n</row-selector>\n", styles: ["@charset \"UTF-8\";.main{height:calc(100vh - 128px)}:host ::ng-deep .main .ag-root-wrapper{border-left:none!important;border-right:none!important;border-bottom:none!important}:host ::ng-deep .form-action{background:#e7e9ed!important;color:var(--ag-text-color)!important;border-color:#e7e9ed!important}:host ::ng-deep .form-action:not(:disabled):hover{background-color:#d8dadd!important;border-color:#d8dadd}:host ::ng-deep .page-form-left-tree{border:none!important;padding:0!important}.form-panel{border:solid 1px #dbdbdb}.page-form-left-panel{height:100%}.page-form-tree-panel{border:1px solid #e2e8f0;border-radius:4px;background:#fff;padding:4px}.page-form-left-panel-empty{display:flex;align-items:center;justify-content:center;min-height:160px;color:#94a3b8;font-size:12px}.icon-sidebar{color:#334155;padding:2.5px}.icon-sidebar:hover{color:var(--p-primary-color);cursor:pointer}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i2$4.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "fluid", "buttonProps"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: FormComponent, selector: "custom-form", inputs: ["options", "model", "upsert"], outputs: ["modelChange"] }, { kind: "component", type: LogComponent, selector: "custom-log", inputs: ["logs", "id"] }, { kind: "component", type: CrumbActionComponent, selector: "app-crumb-action", inputs: ["isShowCog", "addVisible", "importVisible", "exportVisible", "newUrl", "configNewPath", "closeFallbackUrl", "onExport", "outlined", "isList", "authLevel", "actionList", "data", "menus", "saveBtnDisable", "showSaveButton"], outputs: ["saveEvent", "cancelEvent", "actionEvent"] }, { kind: "component", type: StepsComponent, selector: "custom-steps", inputs: ["modelLog", "needSelfAdjusting", "steps", "current", "authLevel", "isClick"], outputs: ["change"] }, { kind: "component", type: GridComponent, selector: "custom-grid", inputs: ["gridOptions", "selectionKeys", "upsert", "rowData", "hideExpressionData", "hideExpressionVersion", "searchPrm", "addType", "selectData", "showAct", "actPos", "authLevel", "showDelete", "deleteHidden", "addHidden", "gridDisable", "addSort", "subSaveVisible", "subSaveHidden", "subSaveLabel", "subSaveDisabled"], outputs: ["deleteEmit", "addEmit", "gridDataChanged", "subSaveEmit"] }, { kind: "ngmodule", type: TabsModule }, { kind: "component", type: i4.Tabs, selector: "p-tabs", inputs: ["value", "scrollable", "lazy", "selectOnFocus", "showNavigators", "tabindex"], outputs: ["valueChange"] }, { kind: "component", type: i4.TabList, selector: "p-tablist" }, { kind: "component", type: i4.Tab, selector: "p-tab", inputs: ["value", "disabled"], outputs: ["valueChange"] }, { kind: "component", type: RowSelectorComponent$1, selector: "row-selector", inputs: ["title", "selectionKeys", "gridOptions", "searchPrm", "visible", "showSearch", "selectModelCode", "customListFormByDialog", "customListFormByDialogContext", "customListDialogMap"], outputs: ["onOk", "visibleChange", "cancelSelect"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "component", type: HrefBtnListComponent, selector: "href-btn-list", inputs: ["hrefs"], outputs: ["hrefClick"] }, { kind: "component", type: SingleSelectListboxComponent, selector: "am-single-select-listbox", inputs: ["options", "optionLabel", "optionValue", "disabled", "emptyMessage", "allowDeselect"], outputs: ["onChange"] }, { kind: "ngmodule", type: TreeModule }, { kind: "component", type: i2$9.Tree, selector: "p-tree", inputs: ["value", "selectionMode", "loadingMode", "selection", "style", "styleClass", "contextMenu", "draggableScope", "droppableScope", "draggableNodes", "droppableNodes", "metaKeySelection", "propagateSelectionUp", "propagateSelectionDown", "loading", "loadingIcon", "emptyMessage", "ariaLabel", "togglerAriaLabel", "ariaLabelledBy", "validateDrop", "filter", "filterBy", "filterMode", "filterOptions", "filterPlaceholder", "filteredNodes", "filterLocale", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "indentation", "_templateMap", "trackBy", "highlightOnSelect", "virtualNodeHeight"], outputs: ["selectionChange", "onNodeSelect", "onNodeUnselect", "onNodeExpand", "onNodeCollapse", "onNodeContextMenuSelect", "onNodeDrop", "onLazyLoad", "onScroll", "onScrollIndexChange", "onFilter"] }] }); }
|
|
13005
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: PageFormComponent, isStandalone: true, selector: "app-page-form", inputs: { addVisible: { classPropertyName: "addVisible", publicName: "addVisible", isSignal: true, isRequired: false, transformFunction: null }, gridList: { classPropertyName: "gridList", publicName: "gridList", isSignal: true, isRequired: false, transformFunction: null }, form: { classPropertyName: "form", publicName: "form", isSignal: true, isRequired: true, transformFunction: null }, getPrmInput: { classPropertyName: "getPrmInput", publicName: "getPrmInput", isSignal: true, isRequired: true, transformFunction: null }, statusSteps: { classPropertyName: "statusSteps", publicName: "statusSteps", isSignal: true, isRequired: false, transformFunction: null }, statusKey: { classPropertyName: "statusKey", publicName: "statusKey", isSignal: true, isRequired: false, transformFunction: null }, hrefBtnList: { classPropertyName: "hrefBtnList", publicName: "hrefBtnList", isSignal: true, isRequired: false, transformFunction: null }, setTitle: { classPropertyName: "setTitle", publicName: "setTitle", isSignal: true, isRequired: false, transformFunction: null }, actionList: { classPropertyName: "actionList", publicName: "actionList", isSignal: true, isRequired: false, transformFunction: null }, modelLog: { classPropertyName: "modelLog", publicName: "modelLog", isSignal: true, isRequired: false, transformFunction: null }, formDisabled: { classPropertyName: "formDisabled", publicName: "formDisabled", isSignal: true, isRequired: false, transformFunction: null }, statusConf: { classPropertyName: "statusConf", publicName: "statusConf", isSignal: true, isRequired: false, transformFunction: null }, formDetail: { classPropertyName: "formDetail", publicName: "formDetail", isSignal: true, isRequired: false, transformFunction: null }, saveFunc: { classPropertyName: "saveFunc", publicName: "saveFunc", isSignal: true, isRequired: false, transformFunction: null }, showMainSaveButton: { classPropertyName: "showMainSaveButton", publicName: "showMainSaveButton", isSignal: true, isRequired: false, transformFunction: null }, configNewPath: { classPropertyName: "configNewPath", publicName: "configNewPath", isSignal: true, isRequired: false, transformFunction: null }, closeFallbackUrl: { classPropertyName: "closeFallbackUrl", publicName: "closeFallbackUrl", isSignal: true, isRequired: false, transformFunction: null }, runtimeContextInput: { classPropertyName: "runtimeContextInput", publicName: "runtimeContextInput", isSignal: true, isRequired: false, transformFunction: null }, customLeftPanel: { classPropertyName: "customLeftPanel", publicName: "customLeftPanel", isSignal: true, isRequired: false, transformFunction: null }, customListFormTemplateMap: { classPropertyName: "customListFormTemplateMap", publicName: "customListFormTemplateMap", isSignal: true, isRequired: false, transformFunction: null }, customListFormInstanceMap: { classPropertyName: "customListFormInstanceMap", publicName: "customListFormInstanceMap", isSignal: true, isRequired: false, transformFunction: null }, leftPanel: { classPropertyName: "leftPanel", publicName: "leftPanel", isSignal: true, isRequired: false, transformFunction: null }, panelSelectedData: { classPropertyName: "panelSelectedData", publicName: "panelSelectedData", isSignal: true, isRequired: false, transformFunction: null }, authLevel: { classPropertyName: "authLevel", publicName: "authLevel", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "window:resize": "onResize()" } }, providers: [], queries: [{ propertyName: "pageFormSlots", predicate: PageFormSlotDirective, descendants: true }], viewQueries: [{ propertyName: "cForm", first: true, predicate: ["cForm"], descendants: true }, { propertyName: "rowSelector", first: true, predicate: RowSelectorComponent$1, descendants: true }, { propertyName: "customGrid", predicate: ["customGrid"], descendants: true }, { propertyName: "tabForm", predicate: ["tabForm"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"md:overflow-hidden\">\n <!-- \u4FDD\u5B58\u65B0\u5EFA\u64CD\u4F5C\u533A -->\n\t<div class=\"flex md:flex-wrap lg:flex-nowrap items-center md:justify-between py-1 px-1 border-b-[1px] border-[#dbdbdb] bg-white\">\n\t\t<div class=\"lg:basis-1/3 order-1\">\n\t\t\t<app-crumb-action\n\t\t\t\t[addVisible]=\"addVisible()\"\n\t\t\t\t[newUrl]=\"newUrl\"\n\t\t\t\t[isShowCog]=\"true\"\n\t\t\t\t[outlined]=\"true\"\n\t\t\t\t[authLevel]=\"authLevel()\"\n\t\t\t\t[actionList]=\"actionList()\"\n\t\t\t\t[configNewPath]=\"configNewPath()\"\n\t\t\t\t[closeFallbackUrl]=\"closeFallbackUrl()\"\n\t\t\t\t[data]=\"getPrm.data ?? {}\"\n\t\t\t\t[saveBtnDisable]=\"saveBtnDisable\"\n\t\t\t\t[showSaveButton]=\"showMainSaveButton()\"\n\t\t\t\t(actionEvent)=\"authClick($event)\"\n\t\t\t\t(saveEvent)=\"submitForm()\">\n\t\t\t</app-crumb-action>\n\t\t</div>\n\n\t\t<div class=\"basis-1/5 lg:basis-2/3 order-2 lg:order-2 md:order-last md:basis-full md:mt-[6px]\">\n\t\t\t<href-btn-list\n\t\t\t\t[hrefs]=\"hrefBtnList()\"\n\t\t\t\t(hrefClick)=\"goRun($event)\"></href-btn-list>\n\t\t\t<!-- @if (id) {\n\t\t\t\t@for (btn of hrefBtnList(); track btn) {\n\t\t\t\t\t<p-button\n\t\t\t\t\t\t[variant]=\"btn?.variant\"\n\t\t\t\t\t\t[severity]=\"btn?.severity\"\n\t\t\t\t\t\tclass=\"mr-[6px]\"\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t[icon]=\"btn?.icon\"\n\t\t\t\t\t\tlabel=\"{{ btn.i18nKey ? i18n.fanyi(btn.i18nKey) : btn.label }}\"\n\t\t\t\t\t\t(click)=\"goRun(btn)\">\n\t\t\t\t\t</p-button>\n\t\t\t\t}\n\t\t\t} -->\n\t\t</div>\n\t\t<div class=\"basis-1/3 order-3 flex flex-row-reverse\">\n\t\t\t@if (modelLog()) {\n\t\t\t\t<div class=\"hidden md:block\">\n\t\t\t\t\t<span\n\t\t\t\t\t\t[class]=\"'iconfont icon-sidebar icon-sidebar-' + sidebarMode()\"\n\t\t\t\t\t\t(click)=\"toggleLog()\"></span>\n\t\t\t\t</div>\n\t\t\t}\n\t\t</div>\n\t</div>\n\t<div class=\"flex\">\n\t\t<div class=\"px-2 flex flex-wrap items-center flex-1\">\n\t\t\t<div class=\"hidden md:basis-1/3 py-1 basis-full md:flex items-center flex-row order-1\">\n\t\t\t\t@for (action of actionList(); let i = $index; track action) {\n\t\t\t\t\t<p-button\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t[icon]=\"getPrm.data?.icon\"\n\t\t\t\t\t\t[loading]=\"action.loading\"\n\t\t\t\t\t\t[label]=\"action.i18nKey ? (action.i18nKey | translate) : action.label\"\n\t\t\t\t\t\t[disabled]=\"action.btnDisabled ? action.btnDisabled(getPrm.data) : false\"\n\t\t\t\t\t\t[styleClass]=\"\n\t\t\t\t\t\t\t(action.auth || 0) > (authLevel() || 0) || !!action.btnHidden?.(getPrm.data)\n\t\t\t\t\t\t\t\t? 'form-action hidden'\n\t\t\t\t\t\t\t\t: 'form-action block mr-[.5rem]'\n\t\t\t\t\t\t\"\n\t\t\t\t\t\t(onClick)=\"action.onClick != '' && action.onClick?.(getPrm.data, action)\">\n\t\t\t\t\t</p-button>\n\t\t\t\t}\n\t\t\t</div>\n\t\t\t<div class=\"md:basis-2/3 basis-full flex md:flex-row-reverse flex-row md:order-2 order-first w-full\">\n\t\t\t\t@if (stepsVisible) {\n\t\t\t\t\t<custom-steps\n\t\t\t\t\t\t#customSteps\n\t\t\t\t\t\tclass=\"w-full\"\n\t\t\t\t\t\t[steps]=\"statusSteps()\"\n\t\t\t\t\t\t[modelLog]=\"showLog()\"\n\t\t\t\t\t\t[current]=\"getPrm.data && getPrm.data[statusKey()] !== undefined ? getPrm.data[statusKey()] : 0\"\n\t\t\t\t\t\t[authLevel]=\"authLevel()\"\n\t\t\t\t\t\t[isClick]=\"this.statusConf().isClick\"\n\t\t\t\t\t\t(change)=\"statusChange($event, customSteps)\">\n\t\t\t\t\t</custom-steps>\n\t\t\t\t}\n\t\t\t</div>\n\t\t</div>\n\t\t@if (showLog()) {\n\t\t\t<div class=\"lg:w-[400px] md:w-[300px] hidden md:block\"></div>\n\t\t}\n\t</div>\n <!-- form \u4E3B\u533A\u57DF-->\n @if(this.form().form) {\n <div class=\"main flex flex-wrap\">\n @if (customLeftPanel()) {\n <div class=\"hidden md:block md:h-full md:overflow-y-auto md:flex-none md:w-fit md:max-w-full\">\n <ng-container *ngTemplateOutlet=\"customLeftPanel()\"></ng-container>\n </div>\n } @else if (leftPanel()?.enabled && leftPanel()?.mode === 'list') {\n <div class=\"hidden md:block md:h-full md:overflow-y-auto md:flex-none md:w-[220px] md:max-w-full px-2\">\n <div class=\"page-form-left-panel\">\n <am-single-select-listbox\n [options]=\"leftPanelItems\"\n [ngModel]=\"leftPanelSelectedValue\"\n (onChange)=\"onLeftPanelSelectionChange($event)\"\n [optionValue]=\"getPanelOptionValue()\"\n [optionLabel]=\"getPanelOptionLabel()\"\n [emptyMessage]=\"getPanelEmptyMessage()\"\n [allowDeselect]=\"getPanelAllowDeselect()\" />\n </div>\n </div>\n } @else if (leftPanel()?.enabled && leftPanel()?.mode === 'tree') {\n <div class=\"hidden md:block md:h-full md:overflow-y-auto md:flex-none md:w-[220px] md:max-w-full px-2\">\n <div class=\"page-form-left-panel page-form-tree-panel\">\n @if (leftPanelTreeNodes.length > 0) {\n <p-tree\n [value]=\"leftPanelTreeNodes\"\n selectionMode=\"single\"\n [(selection)]=\"leftPanelSelectedNode\"\n [emptyMessage]=\"getPanelEmptyMessage()\"\n styleClass=\"page-form-left-tree\"\n (onNodeSelect)=\"onLeftPanelTreeNodeSelect($event)\"\n (onNodeExpand)=\"onLeftPanelTreeNodeExpand($event)\"\n (onNodeCollapse)=\"onLeftPanelTreeNodeCollapse($event)\" />\n } @else {\n <div class=\"page-form-left-panel-empty\">{{ getPanelEmptyMessage() }}</div>\n }\n </div>\n </div>\n }\n <div class=\"w-full md:min-w-0 md:flex-1 md:h-full md:overflow-y-auto\">\n <div class=\"bg-white mx-2 form-panel\">\n <div class=\"p-2 flex-1\">\n <form [formGroup]=\"form().form!\">\n <custom-form\n #cForm\n [options]=\"formOptions\"\n [upsert]=\"upsertPrm\"\n [model]=\"getPrm.data ?? {}\"\n (modelChange)=\"onMainFormModelChange()\"></custom-form>\n </form>\n </div>\n @if (grids && grids.length > 0) {\n <div class=\"relative mb-2\">\n <p-tabs [(value)]=\"indexValue\">\n <p-tablist>\n @for (fchild of grids; let i = $index; track fchild) {\n <p-tab\n [value]=\"i\"\n (click)=\"tabClick()\">\n {{ fchild.i18nKey ? i18n.fanyi(fchild.i18nKey) : fchild.title }}\n </p-tab>\n }\n </p-tablist>\n </p-tabs>\n </div>\n }\n @for (grid of grids; let i = $index; track grid) {\n @let slotState = slotRenderStates[i];\n @let slot = slotState?.slot;\n <div [hidden]=\"indexValue != i\" [style.height]=\"slot ? grid.gridOptions.scrollHeight : null\">\n @if (slot) {\n <ng-container *ngTemplateOutlet=\"slot.templateRef; context: slotState.context\"> </ng-container>\n <div class=\"flex justify-end py-[5px] pr-[8px] bg-white\">\n @if (canShowCurrentTabSave(grid)) {\n <p-button\n icon=\"pi pi-cloud-upload\"\n [text]=\"true\"\n severity=\"primary\"\n [disabled]=\"grid.gridDisabled\"\n (onClick)=\"saveCurrentTab()\" />\n }\n @if (grid.subTableSource != 'none' && !isSubAddHidden(grid)) {\n <p-button\n icon=\"pi pi-plus\"\n [text]=\"true\"\n severity=\"success\"\n [disabled]=\"grid.gridDisabled\"\n (onClick)=\"addRowClickHandler(grid)\" />\n }\n @if (grid.showDelete && !isSubDeleteHidden(grid)) {\n <p-button\n icon=\"pi pi-trash\"\n [text]=\"true\"\n severity=\"danger\"\n [disabled]=\"grid.gridDisabled\"\n (onClick)=\"delRowClickHandler(grid)\" />\n }\n\t\t\t\t\t\t\t\t\t<div #customGrid></div>\n </div>\n } @else {\n @if (grid.type == 'grid') {\n <custom-grid\n #customGrid\n [rowData]=\"getPrm.data?.[grid.subDataKey!]\"\n [hideExpressionData]=\"getPrm.data ?? {}\"\n [hideExpressionVersion]=\"hideExpressionVersion\"\n [upsert]=\"upsertPrm\"\n (deleteEmit)=\"delRows($event)\"\n (gridDataChanged)=\"refreshSubGridColumnVisibility()\"\n [addType]=\"grid.subTableSource\"\n (addEmit)=\"addRowClickHandler(grid)\"\n [gridOptions]=\"grid.gridOptions\"\n [gridDisable]=\"grid.gridDisabled\"\n [authLevel]=\"authLevel()\"\n [showDelete]=\"grid.showDelete\"\n [deleteHidden]=\"isSubDeleteHidden(grid)\"\n [addHidden]=\"isSubAddHidden(grid)\"\n [subSaveVisible]=\"canShowCurrentTabSave(grid)\"\n [subSaveHidden]=\"isSubSaveHidden(grid)\"\n [subSaveLabel]=\"getCurrentTabSaveLabel(grid)\"\n [subSaveDisabled]=\"grid.gridDisabled\"\n [selectData]=\"grid.selectData\"\n [addSort]=\"grid.addSort\"\n (subSaveEmit)=\"saveCurrentTab()\">\n </custom-grid>\n } @else {\n @if (canShowCurrentTabSave(grid)) {\n <div class=\"flex justify-end px-2 pt-2 bg-white\">\n <p-button\n icon=\"pi pi-cloud-upload\"\n [text]=\"true\"\n severity=\"primary\"\n [disabled]=\"grid.gridDisable\"\n (onClick)=\"saveCurrentTab()\" />\n </div>\n }\n <custom-form\n #tabForm\n [options]=\"grid\"\n [upsert]=\"upsertPrm\"\n [model]=\"subFormModel[grid.subDataKey!] || {}\"\n (modelChange)=\"refreshSubGridColumnVisibility()\">\n </custom-form>\n }\n }\n </div>\n }\n </div>\n </div>\n @if (showLog()) {\n <div class=\"w-full lg:w-[400px] md:w-[300px] md:h-full md:overflow-y-auto hidden md:block\">\n <custom-log [logs]=\"getPrm.data?.log ?? []\"></custom-log>\n </div>\n }\n </div>\n }\n</div>\n<row-selector\n\t[(visible)]=\"visible\"\n\t[searchPrm]=\"dialogSearchPrm\"\n\t[gridOptions]=\"selectOptions\"\n\t[selectionKeys]=\"selectionKeys\"\n\t[selectModelCode]=\"currentSelectModelCode || undefined\"\n\t[customListFormByDialog]=\"currentCustomListFormTemplate\"\n\t[customListFormByDialogContext]=\"currentCustomListFormContext\"\n\t[customListDialogMap]=\"customListFormInstanceMap()\"\n\t(onOk)=\"onOk($event)\"\n\t(cancelSelect)=\"onCancelSelected($event)\">\n</row-selector>\n", styles: ["@charset \"UTF-8\";.main{height:calc(100vh - 128px)}:host ::ng-deep .main .ag-root-wrapper{border-left:none!important;border-right:none!important;border-bottom:none!important}:host ::ng-deep .form-action{background:#e7e9ed!important;color:var(--ag-text-color)!important;border-color:#e7e9ed!important}:host ::ng-deep .form-action:not(:disabled):hover{background-color:#d8dadd!important;border-color:#d8dadd}:host ::ng-deep .page-form-left-tree{border:none!important;padding:0!important}.form-panel{border:solid 1px #dbdbdb}.page-form-left-panel{height:100%}.page-form-tree-panel{border:1px solid #e2e8f0;border-radius:4px;background:#fff;padding:4px}.page-form-left-panel-empty{display:flex;align-items:center;justify-content:center;min-height:160px;color:#94a3b8;font-size:12px}.icon-sidebar{color:#334155;padding:2.5px}.icon-sidebar:hover{color:var(--p-primary-color);cursor:pointer}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i2$4.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "fluid", "buttonProps"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: FormComponent, selector: "custom-form", inputs: ["options", "model", "upsert"], outputs: ["modelChange"] }, { kind: "component", type: LogComponent, selector: "custom-log", inputs: ["logs", "id"] }, { kind: "component", type: CrumbActionComponent, selector: "app-crumb-action", inputs: ["isShowCog", "addVisible", "importVisible", "exportVisible", "newUrl", "configNewPath", "closeFallbackUrl", "onExport", "outlined", "isList", "authLevel", "actionList", "data", "menus", "saveBtnDisable", "showSaveButton"], outputs: ["saveEvent", "cancelEvent", "actionEvent"] }, { kind: "component", type: StepsComponent, selector: "custom-steps", inputs: ["modelLog", "needSelfAdjusting", "steps", "current", "authLevel", "isClick"], outputs: ["change"] }, { kind: "component", type: GridComponent, selector: "custom-grid", inputs: ["gridOptions", "selectionKeys", "upsert", "rowData", "hideExpressionData", "hideExpressionVersion", "searchPrm", "addType", "selectData", "showAct", "actPos", "authLevel", "showDelete", "deleteHidden", "addHidden", "gridDisable", "addSort", "subSaveVisible", "subSaveHidden", "subSaveLabel", "subSaveDisabled"], outputs: ["deleteEmit", "addEmit", "gridDataChanged", "subSaveEmit"] }, { kind: "ngmodule", type: TabsModule }, { kind: "component", type: i4.Tabs, selector: "p-tabs", inputs: ["value", "scrollable", "lazy", "selectOnFocus", "showNavigators", "tabindex"], outputs: ["valueChange"] }, { kind: "component", type: i4.TabList, selector: "p-tablist" }, { kind: "component", type: i4.Tab, selector: "p-tab", inputs: ["value", "disabled"], outputs: ["valueChange"] }, { kind: "component", type: RowSelectorComponent$1, selector: "row-selector", inputs: ["title", "selectionKeys", "gridOptions", "searchPrm", "visible", "showSearch", "selectModelCode", "customListFormByDialog", "customListFormByDialogContext", "customListDialogMap"], outputs: ["onOk", "visibleChange", "cancelSelect"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "component", type: HrefBtnListComponent, selector: "href-btn-list", inputs: ["hrefs"], outputs: ["hrefClick"] }, { kind: "component", type: SingleSelectListboxComponent, selector: "am-single-select-listbox", inputs: ["options", "optionLabel", "optionValue", "disabled", "emptyMessage", "allowDeselect"], outputs: ["onChange"] }, { kind: "ngmodule", type: TreeModule }, { kind: "component", type: i2$9.Tree, selector: "p-tree", inputs: ["value", "selectionMode", "loadingMode", "selection", "style", "styleClass", "contextMenu", "draggableScope", "droppableScope", "draggableNodes", "droppableNodes", "metaKeySelection", "propagateSelectionUp", "propagateSelectionDown", "loading", "loadingIcon", "emptyMessage", "ariaLabel", "togglerAriaLabel", "ariaLabelledBy", "validateDrop", "filter", "filterBy", "filterMode", "filterOptions", "filterPlaceholder", "filteredNodes", "filterLocale", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "indentation", "_templateMap", "trackBy", "highlightOnSelect", "virtualNodeHeight"], outputs: ["selectionChange", "onNodeSelect", "onNodeUnselect", "onNodeExpand", "onNodeCollapse", "onNodeContextMenuSelect", "onNodeDrop", "onLazyLoad", "onScroll", "onScrollIndexChange", "onFilter"] }] }); }
|
|
12984
13006
|
}
|
|
12985
13007
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PageFormComponent, decorators: [{
|
|
12986
13008
|
type: Component,
|
|
@@ -13000,7 +13022,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
13000
13022
|
HrefBtnListComponent,
|
|
13001
13023
|
SingleSelectListboxComponent,
|
|
13002
13024
|
TreeModule,
|
|
13003
|
-
], providers: [], template: "<div class=\"md:overflow-hidden\">\n <!-- \u4FDD\u5B58\u65B0\u5EFA\u64CD\u4F5C\u533A -->\n\t<div class=\"flex md:flex-wrap lg:flex-nowrap items-center md:justify-between py-1 px-1 border-b-[1px] border-[#dbdbdb] bg-white\">\n\t\t<div class=\"lg:basis-1/3 order-1\">\n\t\t\t<app-crumb-action\n\t\t\t\t[addVisible]=\"addVisible()\"\n\t\t\t\t[newUrl]=\"newUrl\"\n\t\t\t\t[isShowCog]=\"true\"\n\t\t\t\t[outlined]=\"true\"\n\t\t\t\t[authLevel]=\"authLevel()\"\n\t\t\t\t[actionList]=\"actionList()\"\n\t\t\t\t[configNewPath]=\"configNewPath()\"\n\t\t\t\t[closeFallbackUrl]=\"closeFallbackUrl()\"\n\t\t\t\t[data]=\"getPrm.data ?? {}\"\n\t\t\t\t[saveBtnDisable]=\"saveBtnDisable\"\n\t\t\t\t[showSaveButton]=\"showMainSaveButton()\"\n\t\t\t\t(actionEvent)=\"authClick($event)\"\n\t\t\t\t(saveEvent)=\"submitForm()\">\n\t\t\t</app-crumb-action>\n\t\t</div>\n\n\t\t<div class=\"basis-1/5 lg:basis-2/3 order-2 lg:order-2 md:order-last md:basis-full md:mt-[6px]\">\n\t\t\t<href-btn-list\n\t\t\t\t[hrefs]=\"hrefBtnList()\"\n\t\t\t\t(hrefClick)=\"goRun($event)\"></href-btn-list>\n\t\t\t<!-- @if (id) {\n\t\t\t\t@for (btn of hrefBtnList(); track btn) {\n\t\t\t\t\t<p-button\n\t\t\t\t\t\t[variant]=\"btn?.variant\"\n\t\t\t\t\t\t[severity]=\"btn?.severity\"\n\t\t\t\t\t\tclass=\"mr-[6px]\"\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t[icon]=\"btn?.icon\"\n\t\t\t\t\t\tlabel=\"{{ btn.i18nKey ? i18n.fanyi(btn.i18nKey) : btn.label }}\"\n\t\t\t\t\t\t(click)=\"goRun(btn)\">\n\t\t\t\t\t</p-button>\n\t\t\t\t}\n\t\t\t} -->\n\t\t</div>\n\t\t<div class=\"basis-1/3 order-3 flex flex-row-reverse\">\n\t\t\t@if (modelLog()) {\n\t\t\t\t<div class=\"hidden md:block\">\n\t\t\t\t\t<span\n\t\t\t\t\t\t[class]=\"'iconfont icon-sidebar icon-sidebar-' + sidebarMode()\"\n\t\t\t\t\t\t(click)=\"toggleLog()\"></span>\n\t\t\t\t</div>\n\t\t\t}\n\t\t</div>\n\t</div>\n\t<div class=\"flex\">\n\t\t<div class=\"px-2 flex flex-wrap items-center flex-1\">\n\t\t\t<div class=\"hidden md:basis-1/3 py-1 basis-full md:flex items-center flex-row order-1\">\n\t\t\t\t@for (action of actionList(); let i = $index; track action) {\n\t\t\t\t\t<p-button\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t[icon]=\"getPrm.data?.icon\"\n\t\t\t\t\t\t[loading]=\"action.loading\"\n\t\t\t\t\t\t[label]=\"action.i18nKey ? (action.i18nKey | translate) : action.label\"\n\t\t\t\t\t\t[disabled]=\"action.btnDisabled ? action.btnDisabled(getPrm.data) : false\"\n\t\t\t\t\t\t[styleClass]=\"\n\t\t\t\t\t\t\t(action.auth || 0) > (authLevel() || 0) || !!action.btnHidden?.(getPrm.data)\n\t\t\t\t\t\t\t\t? 'form-action hidden'\n\t\t\t\t\t\t\t\t: 'form-action block mr-[.5rem]'\n\t\t\t\t\t\t\"\n\t\t\t\t\t\t(onClick)=\"action.onClick != '' && action.onClick?.(getPrm.data, action)\">\n\t\t\t\t\t</p-button>\n\t\t\t\t}\n\t\t\t</div>\n\t\t\t<div class=\"md:basis-2/3 basis-full flex md:flex-row-reverse flex-row md:order-2 order-first w-full\">\n\t\t\t\t@if (stepsVisible) {\n\t\t\t\t\t<custom-steps\n\t\t\t\t\t\t#customSteps\n\t\t\t\t\t\tclass=\"w-full\"\n\t\t\t\t\t\t[steps]=\"statusSteps()\"\n\t\t\t\t\t\t[modelLog]=\"showLog()\"\n\t\t\t\t\t\t[current]=\"getPrm.data && getPrm.data[statusKey()] !== undefined ? getPrm.data[statusKey()] : 0\"\n\t\t\t\t\t\t[authLevel]=\"authLevel()\"\n\t\t\t\t\t\t[isClick]=\"this.statusConf().isClick\"\n\t\t\t\t\t\t(change)=\"statusChange($event, customSteps)\">\n\t\t\t\t\t</custom-steps>\n\t\t\t\t}\n\t\t\t</div>\n\t\t</div>\n\t\t@if (showLog()) {\n\t\t\t<div class=\"lg:w-[400px] md:w-[300px] hidden md:block\"></div>\n\t\t}\n\t</div>\n <!-- form \u4E3B\u533A\u57DF-->\n @if(this.form().form) {\n <div class=\"main flex flex-wrap\">\n @if (customLeftPanel()) {\n <div class=\"hidden md:block md:h-full md:overflow-y-auto md:flex-none md:w-fit md:max-w-full\">\n <ng-container *ngTemplateOutlet=\"customLeftPanel()\"></ng-container>\n </div>\n } @else if (leftPanel()?.enabled && leftPanel()?.mode === 'list') {\n <div class=\"hidden md:block md:h-full md:overflow-y-auto md:flex-none md:w-[220px] md:max-w-full px-2\">\n <div class=\"page-form-left-panel\">\n <am-single-select-listbox\n [options]=\"leftPanelItems\"\n [ngModel]=\"leftPanelSelectedValue\"\n (onChange)=\"onLeftPanelSelectionChange($event)\"\n [optionValue]=\"getPanelOptionValue()\"\n [optionLabel]=\"getPanelOptionLabel()\"\n [emptyMessage]=\"getPanelEmptyMessage()\"\n [allowDeselect]=\"getPanelAllowDeselect()\" />\n </div>\n </div>\n } @else if (leftPanel()?.enabled && leftPanel()?.mode === 'tree') {\n <div class=\"hidden md:block md:h-full md:overflow-y-auto md:flex-none md:w-[220px] md:max-w-full px-2\">\n <div class=\"page-form-left-panel page-form-tree-panel\">\n @if (leftPanelTreeNodes.length > 0) {\n <p-tree\n [value]=\"leftPanelTreeNodes\"\n selectionMode=\"single\"\n [(selection)]=\"leftPanelSelectedNode\"\n [emptyMessage]=\"getPanelEmptyMessage()\"\n styleClass=\"page-form-left-tree\"\n (onNodeSelect)=\"onLeftPanelTreeNodeSelect($event)\"\n (onNodeExpand)=\"onLeftPanelTreeNodeExpand($event)\"\n (onNodeCollapse)=\"onLeftPanelTreeNodeCollapse($event)\" />\n } @else {\n <div class=\"page-form-left-panel-empty\">{{ getPanelEmptyMessage() }}</div>\n }\n </div>\n </div>\n }\n <div class=\"w-full md:min-w-0 md:flex-1 md:h-full md:overflow-y-auto\">\n <div class=\"bg-white mx-2 form-panel\">\n <div class=\"p-2 flex-1\">\n <form [formGroup]=\"form().form!\">\n <custom-form\n #cForm\n [options]=\"formOptions\"\n [upsert]=\"upsertPrm\"\n [model]=\"getPrm.data ?? {}\"\n (modelChange)=\"onMainFormModelChange()\"></custom-form>\n </form>\n </div>\n @if (grids && grids.length > 0) {\n <div class=\"relative mb-2\">\n <p-tabs [(value)]=\"indexValue\">\n <p-tablist>\n @for (fchild of grids; let i = $index; track fchild) {\n <p-tab\n [value]=\"i\"\n (click)=\"tabClick()\">\n {{ fchild.i18nKey ? i18n.fanyi(fchild.i18nKey) : fchild.title }}\n </p-tab>\n }\n </p-tablist>\n </p-tabs>\n </div>\n }\n @for (grid of grids; let i = $index; track grid) {\n @let slotState = slotRenderStates[i];\n @let slot = slotState?.slot;\n <div [hidden]=\"indexValue != i\" [style.height]=\"slot ? grid.gridOptions.scrollHeight : null\">\n @if (slot) {\n <ng-container *ngTemplateOutlet=\"slot.templateRef; context: slotState.context\"> </ng-container>\n <div class=\"flex justify-end py-[5px] pr-[8px] bg-white\">\n @if (canShowCurrentTabSave(grid)) {\n <p-button\n icon=\"pi pi-cloud-upload\"\n [text]=\"true\"\n severity=\"primary\"\n [disabled]=\"grid.gridDisabled\"\n (onClick)=\"saveCurrentTab()\" />\n }\n @if (grid.subTableSource != 'none' && !isSubAddHidden(grid)) {\n <p-button\n icon=\"pi pi-plus\"\n [text]=\"true\"\n severity=\"success\"\n [disabled]=\"grid.gridDisabled\"\n (onClick)=\"addRowClickHandler(grid)\" />\n }\n @if (grid.showDelete && !isSubDeleteHidden(grid)) {\n <p-button\n icon=\"pi pi-trash\"\n [text]=\"true\"\n severity=\"danger\"\n [disabled]=\"grid.gridDisabled\"\n (onClick)=\"delRowClickHandler(grid)\" />\n }\n\t\t\t\t\t\t\t\t\t<div #customGrid></div>\n </div>\n } @else {\n @if (grid.type == 'grid') {\n <custom-grid\n #customGrid\n [rowData]=\"getPrm.data?.[grid.subDataKey!]\"\n [hideExpressionData]=\"getPrm.data ?? {}\"\n [hideExpressionVersion]=\"hideExpressionVersion\"\n [upsert]=\"upsertPrm\"\n (deleteEmit)=\"delRows($event)\"\n (gridDataChanged)=\"refreshSubGridColumnVisibility()\"\n [addType]=\"grid.subTableSource\"\n (addEmit)=\"dataSourceShow()\"\n [gridOptions]=\"grid.gridOptions\"\n [gridDisable]=\"grid.gridDisabled\"\n [authLevel]=\"authLevel()\"\n [showDelete]=\"grid.showDelete\"\n [deleteHidden]=\"isSubDeleteHidden(grid)\"\n [addHidden]=\"isSubAddHidden(grid)\"\n [subSaveVisible]=\"canShowCurrentTabSave(grid)\"\n [subSaveHidden]=\"isSubSaveHidden(grid)\"\n [subSaveLabel]=\"getCurrentTabSaveLabel(grid)\"\n [subSaveDisabled]=\"grid.gridDisabled\"\n [selectData]=\"grid.selectData\"\n [addSort]=\"grid.addSort\"\n (subSaveEmit)=\"saveCurrentTab()\">\n </custom-grid>\n } @else {\n @if (canShowCurrentTabSave(grid)) {\n <div class=\"flex justify-end px-2 pt-2 bg-white\">\n <p-button\n icon=\"pi pi-cloud-upload\"\n [text]=\"true\"\n severity=\"primary\"\n [disabled]=\"grid.gridDisable\"\n (onClick)=\"saveCurrentTab()\" />\n </div>\n }\n <custom-form\n #tabForm\n [options]=\"grid\"\n [upsert]=\"upsertPrm\"\n [model]=\"subFormModel[grid.subDataKey!] || {}\"\n (modelChange)=\"refreshSubGridColumnVisibility()\">\n </custom-form>\n }\n }\n </div>\n }\n </div>\n </div>\n @if (showLog()) {\n <div class=\"w-full lg:w-[400px] md:w-[300px] md:h-full md:overflow-y-auto hidden md:block\">\n <custom-log [logs]=\"getPrm.data?.log ?? []\"></custom-log>\n </div>\n }\n </div>\n }\n</div>\n<row-selector\n\t[(visible)]=\"visible\"\n\t[searchPrm]=\"dialogSearchPrm\"\n\t[gridOptions]=\"selectOptions\"\n\t[selectionKeys]=\"selectionKeys\"\n\t[selectModelCode]=\"currentSelectModelCode || undefined\"\n\t[customListFormByDialog]=\"currentCustomListFormTemplate\"\n\t[customListFormByDialogContext]=\"currentCustomListFormContext\"\n\t[customListDialogMap]=\"customListFormInstanceMap()\"\n\t(onOk)=\"onOk($event)\"\n\t(cancelSelect)=\"onCancelSelected($event)\">\n</row-selector>\n", styles: ["@charset \"UTF-8\";.main{height:calc(100vh - 128px)}:host ::ng-deep .main .ag-root-wrapper{border-left:none!important;border-right:none!important;border-bottom:none!important}:host ::ng-deep .form-action{background:#e7e9ed!important;color:var(--ag-text-color)!important;border-color:#e7e9ed!important}:host ::ng-deep .form-action:not(:disabled):hover{background-color:#d8dadd!important;border-color:#d8dadd}:host ::ng-deep .page-form-left-tree{border:none!important;padding:0!important}.form-panel{border:solid 1px #dbdbdb}.page-form-left-panel{height:100%}.page-form-tree-panel{border:1px solid #e2e8f0;border-radius:4px;background:#fff;padding:4px}.page-form-left-panel-empty{display:flex;align-items:center;justify-content:center;min-height:160px;color:#94a3b8;font-size:12px}.icon-sidebar{color:#334155;padding:2.5px}.icon-sidebar:hover{color:var(--p-primary-color);cursor:pointer}\n"] }]
|
|
13025
|
+
], providers: [], template: "<div class=\"md:overflow-hidden\">\n <!-- \u4FDD\u5B58\u65B0\u5EFA\u64CD\u4F5C\u533A -->\n\t<div class=\"flex md:flex-wrap lg:flex-nowrap items-center md:justify-between py-1 px-1 border-b-[1px] border-[#dbdbdb] bg-white\">\n\t\t<div class=\"lg:basis-1/3 order-1\">\n\t\t\t<app-crumb-action\n\t\t\t\t[addVisible]=\"addVisible()\"\n\t\t\t\t[newUrl]=\"newUrl\"\n\t\t\t\t[isShowCog]=\"true\"\n\t\t\t\t[outlined]=\"true\"\n\t\t\t\t[authLevel]=\"authLevel()\"\n\t\t\t\t[actionList]=\"actionList()\"\n\t\t\t\t[configNewPath]=\"configNewPath()\"\n\t\t\t\t[closeFallbackUrl]=\"closeFallbackUrl()\"\n\t\t\t\t[data]=\"getPrm.data ?? {}\"\n\t\t\t\t[saveBtnDisable]=\"saveBtnDisable\"\n\t\t\t\t[showSaveButton]=\"showMainSaveButton()\"\n\t\t\t\t(actionEvent)=\"authClick($event)\"\n\t\t\t\t(saveEvent)=\"submitForm()\">\n\t\t\t</app-crumb-action>\n\t\t</div>\n\n\t\t<div class=\"basis-1/5 lg:basis-2/3 order-2 lg:order-2 md:order-last md:basis-full md:mt-[6px]\">\n\t\t\t<href-btn-list\n\t\t\t\t[hrefs]=\"hrefBtnList()\"\n\t\t\t\t(hrefClick)=\"goRun($event)\"></href-btn-list>\n\t\t\t<!-- @if (id) {\n\t\t\t\t@for (btn of hrefBtnList(); track btn) {\n\t\t\t\t\t<p-button\n\t\t\t\t\t\t[variant]=\"btn?.variant\"\n\t\t\t\t\t\t[severity]=\"btn?.severity\"\n\t\t\t\t\t\tclass=\"mr-[6px]\"\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t[icon]=\"btn?.icon\"\n\t\t\t\t\t\tlabel=\"{{ btn.i18nKey ? i18n.fanyi(btn.i18nKey) : btn.label }}\"\n\t\t\t\t\t\t(click)=\"goRun(btn)\">\n\t\t\t\t\t</p-button>\n\t\t\t\t}\n\t\t\t} -->\n\t\t</div>\n\t\t<div class=\"basis-1/3 order-3 flex flex-row-reverse\">\n\t\t\t@if (modelLog()) {\n\t\t\t\t<div class=\"hidden md:block\">\n\t\t\t\t\t<span\n\t\t\t\t\t\t[class]=\"'iconfont icon-sidebar icon-sidebar-' + sidebarMode()\"\n\t\t\t\t\t\t(click)=\"toggleLog()\"></span>\n\t\t\t\t</div>\n\t\t\t}\n\t\t</div>\n\t</div>\n\t<div class=\"flex\">\n\t\t<div class=\"px-2 flex flex-wrap items-center flex-1\">\n\t\t\t<div class=\"hidden md:basis-1/3 py-1 basis-full md:flex items-center flex-row order-1\">\n\t\t\t\t@for (action of actionList(); let i = $index; track action) {\n\t\t\t\t\t<p-button\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t[icon]=\"getPrm.data?.icon\"\n\t\t\t\t\t\t[loading]=\"action.loading\"\n\t\t\t\t\t\t[label]=\"action.i18nKey ? (action.i18nKey | translate) : action.label\"\n\t\t\t\t\t\t[disabled]=\"action.btnDisabled ? action.btnDisabled(getPrm.data) : false\"\n\t\t\t\t\t\t[styleClass]=\"\n\t\t\t\t\t\t\t(action.auth || 0) > (authLevel() || 0) || !!action.btnHidden?.(getPrm.data)\n\t\t\t\t\t\t\t\t? 'form-action hidden'\n\t\t\t\t\t\t\t\t: 'form-action block mr-[.5rem]'\n\t\t\t\t\t\t\"\n\t\t\t\t\t\t(onClick)=\"action.onClick != '' && action.onClick?.(getPrm.data, action)\">\n\t\t\t\t\t</p-button>\n\t\t\t\t}\n\t\t\t</div>\n\t\t\t<div class=\"md:basis-2/3 basis-full flex md:flex-row-reverse flex-row md:order-2 order-first w-full\">\n\t\t\t\t@if (stepsVisible) {\n\t\t\t\t\t<custom-steps\n\t\t\t\t\t\t#customSteps\n\t\t\t\t\t\tclass=\"w-full\"\n\t\t\t\t\t\t[steps]=\"statusSteps()\"\n\t\t\t\t\t\t[modelLog]=\"showLog()\"\n\t\t\t\t\t\t[current]=\"getPrm.data && getPrm.data[statusKey()] !== undefined ? getPrm.data[statusKey()] : 0\"\n\t\t\t\t\t\t[authLevel]=\"authLevel()\"\n\t\t\t\t\t\t[isClick]=\"this.statusConf().isClick\"\n\t\t\t\t\t\t(change)=\"statusChange($event, customSteps)\">\n\t\t\t\t\t</custom-steps>\n\t\t\t\t}\n\t\t\t</div>\n\t\t</div>\n\t\t@if (showLog()) {\n\t\t\t<div class=\"lg:w-[400px] md:w-[300px] hidden md:block\"></div>\n\t\t}\n\t</div>\n <!-- form \u4E3B\u533A\u57DF-->\n @if(this.form().form) {\n <div class=\"main flex flex-wrap\">\n @if (customLeftPanel()) {\n <div class=\"hidden md:block md:h-full md:overflow-y-auto md:flex-none md:w-fit md:max-w-full\">\n <ng-container *ngTemplateOutlet=\"customLeftPanel()\"></ng-container>\n </div>\n } @else if (leftPanel()?.enabled && leftPanel()?.mode === 'list') {\n <div class=\"hidden md:block md:h-full md:overflow-y-auto md:flex-none md:w-[220px] md:max-w-full px-2\">\n <div class=\"page-form-left-panel\">\n <am-single-select-listbox\n [options]=\"leftPanelItems\"\n [ngModel]=\"leftPanelSelectedValue\"\n (onChange)=\"onLeftPanelSelectionChange($event)\"\n [optionValue]=\"getPanelOptionValue()\"\n [optionLabel]=\"getPanelOptionLabel()\"\n [emptyMessage]=\"getPanelEmptyMessage()\"\n [allowDeselect]=\"getPanelAllowDeselect()\" />\n </div>\n </div>\n } @else if (leftPanel()?.enabled && leftPanel()?.mode === 'tree') {\n <div class=\"hidden md:block md:h-full md:overflow-y-auto md:flex-none md:w-[220px] md:max-w-full px-2\">\n <div class=\"page-form-left-panel page-form-tree-panel\">\n @if (leftPanelTreeNodes.length > 0) {\n <p-tree\n [value]=\"leftPanelTreeNodes\"\n selectionMode=\"single\"\n [(selection)]=\"leftPanelSelectedNode\"\n [emptyMessage]=\"getPanelEmptyMessage()\"\n styleClass=\"page-form-left-tree\"\n (onNodeSelect)=\"onLeftPanelTreeNodeSelect($event)\"\n (onNodeExpand)=\"onLeftPanelTreeNodeExpand($event)\"\n (onNodeCollapse)=\"onLeftPanelTreeNodeCollapse($event)\" />\n } @else {\n <div class=\"page-form-left-panel-empty\">{{ getPanelEmptyMessage() }}</div>\n }\n </div>\n </div>\n }\n <div class=\"w-full md:min-w-0 md:flex-1 md:h-full md:overflow-y-auto\">\n <div class=\"bg-white mx-2 form-panel\">\n <div class=\"p-2 flex-1\">\n <form [formGroup]=\"form().form!\">\n <custom-form\n #cForm\n [options]=\"formOptions\"\n [upsert]=\"upsertPrm\"\n [model]=\"getPrm.data ?? {}\"\n (modelChange)=\"onMainFormModelChange()\"></custom-form>\n </form>\n </div>\n @if (grids && grids.length > 0) {\n <div class=\"relative mb-2\">\n <p-tabs [(value)]=\"indexValue\">\n <p-tablist>\n @for (fchild of grids; let i = $index; track fchild) {\n <p-tab\n [value]=\"i\"\n (click)=\"tabClick()\">\n {{ fchild.i18nKey ? i18n.fanyi(fchild.i18nKey) : fchild.title }}\n </p-tab>\n }\n </p-tablist>\n </p-tabs>\n </div>\n }\n @for (grid of grids; let i = $index; track grid) {\n @let slotState = slotRenderStates[i];\n @let slot = slotState?.slot;\n <div [hidden]=\"indexValue != i\" [style.height]=\"slot ? grid.gridOptions.scrollHeight : null\">\n @if (slot) {\n <ng-container *ngTemplateOutlet=\"slot.templateRef; context: slotState.context\"> </ng-container>\n <div class=\"flex justify-end py-[5px] pr-[8px] bg-white\">\n @if (canShowCurrentTabSave(grid)) {\n <p-button\n icon=\"pi pi-cloud-upload\"\n [text]=\"true\"\n severity=\"primary\"\n [disabled]=\"grid.gridDisabled\"\n (onClick)=\"saveCurrentTab()\" />\n }\n @if (grid.subTableSource != 'none' && !isSubAddHidden(grid)) {\n <p-button\n icon=\"pi pi-plus\"\n [text]=\"true\"\n severity=\"success\"\n [disabled]=\"grid.gridDisabled\"\n (onClick)=\"addRowClickHandler(grid)\" />\n }\n @if (grid.showDelete && !isSubDeleteHidden(grid)) {\n <p-button\n icon=\"pi pi-trash\"\n [text]=\"true\"\n severity=\"danger\"\n [disabled]=\"grid.gridDisabled\"\n (onClick)=\"delRowClickHandler(grid)\" />\n }\n\t\t\t\t\t\t\t\t\t<div #customGrid></div>\n </div>\n } @else {\n @if (grid.type == 'grid') {\n <custom-grid\n #customGrid\n [rowData]=\"getPrm.data?.[grid.subDataKey!]\"\n [hideExpressionData]=\"getPrm.data ?? {}\"\n [hideExpressionVersion]=\"hideExpressionVersion\"\n [upsert]=\"upsertPrm\"\n (deleteEmit)=\"delRows($event)\"\n (gridDataChanged)=\"refreshSubGridColumnVisibility()\"\n [addType]=\"grid.subTableSource\"\n (addEmit)=\"addRowClickHandler(grid)\"\n [gridOptions]=\"grid.gridOptions\"\n [gridDisable]=\"grid.gridDisabled\"\n [authLevel]=\"authLevel()\"\n [showDelete]=\"grid.showDelete\"\n [deleteHidden]=\"isSubDeleteHidden(grid)\"\n [addHidden]=\"isSubAddHidden(grid)\"\n [subSaveVisible]=\"canShowCurrentTabSave(grid)\"\n [subSaveHidden]=\"isSubSaveHidden(grid)\"\n [subSaveLabel]=\"getCurrentTabSaveLabel(grid)\"\n [subSaveDisabled]=\"grid.gridDisabled\"\n [selectData]=\"grid.selectData\"\n [addSort]=\"grid.addSort\"\n (subSaveEmit)=\"saveCurrentTab()\">\n </custom-grid>\n } @else {\n @if (canShowCurrentTabSave(grid)) {\n <div class=\"flex justify-end px-2 pt-2 bg-white\">\n <p-button\n icon=\"pi pi-cloud-upload\"\n [text]=\"true\"\n severity=\"primary\"\n [disabled]=\"grid.gridDisable\"\n (onClick)=\"saveCurrentTab()\" />\n </div>\n }\n <custom-form\n #tabForm\n [options]=\"grid\"\n [upsert]=\"upsertPrm\"\n [model]=\"subFormModel[grid.subDataKey!] || {}\"\n (modelChange)=\"refreshSubGridColumnVisibility()\">\n </custom-form>\n }\n }\n </div>\n }\n </div>\n </div>\n @if (showLog()) {\n <div class=\"w-full lg:w-[400px] md:w-[300px] md:h-full md:overflow-y-auto hidden md:block\">\n <custom-log [logs]=\"getPrm.data?.log ?? []\"></custom-log>\n </div>\n }\n </div>\n }\n</div>\n<row-selector\n\t[(visible)]=\"visible\"\n\t[searchPrm]=\"dialogSearchPrm\"\n\t[gridOptions]=\"selectOptions\"\n\t[selectionKeys]=\"selectionKeys\"\n\t[selectModelCode]=\"currentSelectModelCode || undefined\"\n\t[customListFormByDialog]=\"currentCustomListFormTemplate\"\n\t[customListFormByDialogContext]=\"currentCustomListFormContext\"\n\t[customListDialogMap]=\"customListFormInstanceMap()\"\n\t(onOk)=\"onOk($event)\"\n\t(cancelSelect)=\"onCancelSelected($event)\">\n</row-selector>\n", styles: ["@charset \"UTF-8\";.main{height:calc(100vh - 128px)}:host ::ng-deep .main .ag-root-wrapper{border-left:none!important;border-right:none!important;border-bottom:none!important}:host ::ng-deep .form-action{background:#e7e9ed!important;color:var(--ag-text-color)!important;border-color:#e7e9ed!important}:host ::ng-deep .form-action:not(:disabled):hover{background-color:#d8dadd!important;border-color:#d8dadd}:host ::ng-deep .page-form-left-tree{border:none!important;padding:0!important}.form-panel{border:solid 1px #dbdbdb}.page-form-left-panel{height:100%}.page-form-tree-panel{border:1px solid #e2e8f0;border-radius:4px;background:#fff;padding:4px}.page-form-left-panel-empty{display:flex;align-items:center;justify-content:center;min-height:160px;color:#94a3b8;font-size:12px}.icon-sidebar{color:#334155;padding:2.5px}.icon-sidebar:hover{color:var(--p-primary-color);cursor:pointer}\n"] }]
|
|
13004
13026
|
}], ctorParameters: () => [], propDecorators: { cForm: [{
|
|
13005
13027
|
type: ViewChild,
|
|
13006
13028
|
args: ['cForm']
|