UNPKG

ng-devui

Version:

DevUI components based on Angular

207 lines 25.5 kB
export const simDeepClone = (obj) => { if (obj === null) { return null; } if (typeof obj === 'object') { return JSON.parse(JSON.stringify(obj)); } else if (typeof obj === 'string') { try { return JSON.parse(obj); } catch (e) { console.error(e); } } else { return obj; } }; export function tableResizeFunc(tableWidthConfig, ele) { let _totalWidth = 0; let lastWidth = 0; let firstResize = true; return function onResize({ width, beforeWidth }, field) { const index = tableWidthConfig.findIndex((config) => { return config.field === field; }); if (index > -1) { if (firstResize) { firstResize = false; const ratio = beforeWidth / parseInt(tableWidthConfig[index].width, 10); tableWidthConfig.forEach((t) => { t.width = parseInt(t.width, 10) * ratio + 'px'; }); _totalWidth = ele.nativeElement.querySelector('.table-wrap').offsetWidth - 8; lastWidth = parseInt(tableWidthConfig.slice(-1)[0].width); } tableWidthConfig[index].width = width + 'px'; let newWidthTotal = 0; tableWidthConfig.forEach((t) => { newWidthTotal += parseInt(t.width, 10); }); const lastCol = tableWidthConfig[tableWidthConfig.length - 1]; const lastColWidth = parseInt(lastCol.width, 10); const changeValue = newWidthTotal - _totalWidth; if (changeValue < 0) { lastCol.width = lastColWidth + _totalWidth - newWidthTotal + 'px'; } else if (lastColWidth > lastWidth) { const lastChange = lastColWidth - lastWidth > changeValue ? changeValue : lastColWidth - lastWidth; lastCol.width = lastColWidth - lastChange + 'px'; } } }; } export const highPerformanceFilter = (arr, func) => { let res = []; const arrLength = arr.length; // 经过调查,在小于10000或大于99999条数据的时候,for循环速度比filter速度会快7至8倍左右 if (arrLength < 10000 || arrLength > 99999) { for (let a = 0; a < arrLength; a++) { if (func(arr[a], a)) { res.push(arr[a]); } } } else { res = arr.filter(func); } return res; }; // 生成随机Id export const generateId = () => { let timeStamp = new Date().getTime(); if (window.performance && typeof window.performance.now === 'function') { timeStamp += performance.now(); } const id = 'aaaaaaaaaaaaaaabaaaaaaaaaaaaaaa'.replace(/[ab]/g, (item) => { const res = (timeStamp + Math.random() * 16) % 16 | 0; timeStamp = Math.floor(timeStamp / 16); return (item === 'a' ? res : (res & 0x3) | 0x8).toString(16); }); return id; }; export const highPerformanceExpandObjectInArray = (oldObj, attr) => { oldObj[Symbol.iterator] = () => { return { next: function next() { const array = Reflect.ownKeys(oldObj); if (this.index < array.length - 1) { const key = array[this.index]; this.index++; return { value: oldObj[key] }; } else { return { done: true }; } }, index: 0, }; }; if (attr) { const newObj = []; for (let i = 0; i < attr.length; i++) { if (Object.prototype.hasOwnProperty.call(oldObj, attr[i])) { newObj.push(oldObj[attr[i]]); } } return newObj; } return [...oldObj]; }; // 将一些公共方法拆分出来 export const getNodeIndex = (nodeId, treeTableArray) => { // 找到节点在总数据中的位置的方法 return treeTableArray.findIndex((v) => v.node_id === nodeId); }; export class FindChild { constructor() { // 寻找子节点 this.allChildCol = []; } getChildrenOfItem(node, treeTableArray) { // 找到节点下的子节点的方法 const data = highPerformanceFilter(treeTableArray, (item) => item.parent_node_id === node.node_id); return data; } getAllChildrenOfItem(node, treeTableArray) { // 找到节点下所有子集的方法 this.allChildCol = []; this.getAllChildrenData(node, treeTableArray); return this.allChildCol; } getAllChildrenData(node, treeTableArray) { const childData = this.getChildrenOfItem(node, treeTableArray); const newArray = [...childData]; newArray.push(node); this.allChildCol = [...this.allChildCol, ...newArray]; for (let i = 0; i < childData.length; i++) { if (childData[i].node_type) { this.getAllChildrenData(childData[i], treeTableArray); } } } } export const distinct = (recordArr, nodeArr) => { // 数组去重的方法 const arr = recordArr.concat(nodeArr); const result = []; const obj = {}; for (const i of arr) { if (!obj[i.node_id]) { result.push(i); obj[i.node_id] = 1; } } return result; }; export const highPerformanceMap = (arr, func) => { let res = []; const arrLength = arr.length; if (arrLength < 10000 || arrLength > 99999) { for (let a = 0; a < arrLength; a++) { const rs = func(arr[a], a); if (rs) { res.push(rs); } } } else { res = arr.map(func); } return res; }; export const flatTreeData = (dataSource) => { const flatData = []; const travelObj = (arr, parentId) => { arr.forEach((item) => { if (item.children) { const obj = { id: generateId(), node_id: generateId(), node_type: 1, parent_node_id: parentId, ...item, }; const children = obj.children; delete obj.children; flatData.push(obj); travelObj(children, obj.node_id); } else { const obj = { id: generateId(), node_id: generateId(), node_type: 0, parent_node_id: parentId, ...item, }; flatData.push(obj); } }); }; travelObj(dataSource, null); return flatData; }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9kZXZ1aS9kYXRhLXRhYmxlL3V0aWxzL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFO0lBQ2xDLElBQUksR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ2pCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDNUIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN6QyxDQUFDO1NBQU0sSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUM7WUFDSCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekIsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25CLENBQUM7SUFDSCxDQUFDO1NBQU0sQ0FBQztRQUNOLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztBQUNILENBQUMsQ0FBQztBQUVGLE1BQU0sVUFBVSxlQUFlLENBQUMsZ0JBQW9DLEVBQUUsR0FBZTtJQUNuRixJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUM7SUFDcEIsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQztJQUN2QixPQUFPLFNBQVMsUUFBUSxDQUFDLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxFQUFFLEtBQUs7UUFDcEQsTUFBTSxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDbEQsT0FBTyxNQUFNLENBQUMs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LENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3JCLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztJQUVGLFNBQVMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFNUIsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUYWJsZVdpZHRoQ29uZmlnIH0gZnJvbSAnLi4vZGF0YS10YWJsZS5tb2RlbCc7XHJcblxyXG5leHBvcnQgY29uc3Qgc2ltRGVlcENsb25lID0gKG9iaikgPT4ge1xyXG4gIGlmIChvYmogPT09IG51bGwpIHtcclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuICBpZiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcpIHtcclxuICAgIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9iaikpO1xyXG4gIH0gZWxzZSBpZiAodHlwZW9mIG9iaiA9PT0gJ3N0cmluZycpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKG9iaik7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiBvYmo7XHJcbiAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHRhYmxlUmVzaXplRnVuYyh0YWJsZVdpZHRoQ29uZmlnOiBUYWJsZVdpZHRoQ29uZmlnW10sIGVsZTogRWxlbWVudFJlZikge1xyXG4gIGxldCBfdG90YWxXaWR0aCA9IDA7XHJcbiAgbGV0IGxhc3RXaWR0aCA9IDA7XHJcbiAgbGV0IGZpcnN0UmVzaXplID0gdHJ1ZTtcclxuICByZXR1cm4gZnVuY3Rpb24gb25SZXNpemUoeyB3aWR0aCwgYmVmb3JlV2lkdGggfSwgZmllbGQpIHtcclxuICAgIGNvbnN0IGluZGV4ID0gdGFibGVXaWR0aENvbmZpZy5maW5kSW5kZXgoKGNvbmZpZykgPT4ge1xyXG4gICAgICByZXR1cm4gY29uZmlnLmZpZWxkID09PSBmaWVsZDtcclxuICAgIH0pO1xyXG4gICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgaWYgKGZpcnN0UmVzaXplKSB7XHJcbiAgICAgICAgZmlyc3RSZXNpemUgPSBmYWxzZTtcclxuICAgICAgICBjb25zdCByYXRpbyA9IGJlZm9yZVdpZHRoIC8gcGFyc2VJbnQodGFibGVXaWR0aENvbmZpZ1tpbmRleF0ud2lkdGgsIDEwKTtcclxuICAgICAgICB0YWJsZVdpZHRoQ29uZmlnLmZvckVhY2goKHQpID0+IHtcclxuICAgICAgICAgIHQud2lkdGggPSBwYXJzZUludCh0LndpZHRoLCAxMCkgKiByYXRpbyArICdweCc7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgX3RvdGFsV2lkdGggPSBlbGUubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcudGFibGUtd3JhcCcpLm9mZnNldFdpZHRoIC0gODtcclxuICAgICAgICBsYXN0V2lkdGggPSBwYXJzZUludCh0YWJsZVdpZHRoQ29uZmlnLnNsaWNlKC0xKVswXS53aWR0aCk7XHJcbiAgICAgIH1cclxuICAgICAgdGFibGVXaWR0aENvbmZpZ1tpbmRleF0ud2lkdGggPSB3aWR0aCArICdweCc7XHJcblxyXG4gICAgICBsZXQgbmV3V2lkdGhUb3RhbCA9IDA7XHJcbiAgICAgIHRhYmxlV2lkdGhDb25maWcuZm9yRWFjaCgodCkgPT4ge1xyXG4gICAgICAgIG5ld1dpZHRoVG90YWwgKz0gcGFyc2VJbnQodC53aWR0aCwgMTApO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGNvbnN0IGxhc3RDb2wgPSB0YWJsZVdpZHRoQ29uZmlnW3RhYmxlV2lkdGhDb25maWcubGVuZ3RoIC0gMV07XHJcbiAgICAgIGNvbnN0IGxhc3RDb2xXaWR0aCA9IHBhcnNlSW50KGxhc3RDb2wud2lkdGgsIDEwKTtcclxuICAgICAgY29uc3QgY2hhbmdlVmFsdWUgPSBuZXdXaWR0aFRvdGFsIC0gX3RvdGFsV2lkdGg7XHJcbiAgICAgIGlmIChjaGFuZ2VWYWx1ZSA8IDApIHtcclxuICAgICAgICBsYXN0Q29sLndpZHRoID0gbGFzdENvbFdpZHRoICsgX3RvdGFsV2lkdGggLSBuZXdXaWR0aFRvdGFsICsgJ3B4JztcclxuICAgICAgfSBlbHNlIGlmIChsYXN0Q29sV2lkdGggPiBsYXN0V2lkdGgpIHtcclxuICAgICAgICBjb25zdCBsYXN0Q2hhbmdlID0gbGFzdENvbFdpZHRoIC0gbGFzdFdpZHRoID4gY2hhbmdlVmFsdWUgPyBjaGFuZ2VWYWx1ZSA6IGxhc3RDb2xXaWR0aCAtIGxhc3RXaWR0aDtcclxuICAgICAgICBsYXN0Q29sLndpZHRoID0gbGFzdENvbFdpZHRoIC0gbGFzdENoYW5nZSArICdweCc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgaGlnaFBlcmZvcm1hbmNlRmlsdGVyID0gKGFyciwgZnVuYykgPT4ge1xyXG4gIGxldCByZXMgPSBbXTtcclxuICBjb25zdCBhcnJMZW5ndGggPSBhcnIubGVuZ3RoO1xyXG4gIC8vIOe7j+i/h+iwg+afpe+8jOWcqOWwj+S6jjEwMDAw5oiW5aSn5LqOOTk5OTnmnaHmlbDmja7nmoTml7blgJnvvIxmb3Llvqrnjq/pgJ/luqbmr5RmaWx0ZXLpgJ/luqbkvJrlv6s36IezOOWAjeW3puWPs1xyXG4gIGlmIChhcnJMZW5ndGggPCAxMDAwMCB8fCBhcnJMZW5ndGggPiA5OTk5OSkge1xyXG4gICAgZm9yIChsZXQgYSA9IDA7IGEgPCBhcnJMZW5ndGg7IGErKykge1xyXG4gICAgICBpZiAoZnVuYyhhcnJbYV0sIGEpKSB7XHJcbiAgICAgICAgcmVzLnB1c2goYXJyW2FdKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICByZXMgPSBhcnIuZmlsdGVyKGZ1bmMpO1xyXG4gIH1cclxuICByZXR1cm4gcmVzO1xyXG59O1xyXG5cclxuLy8g55Sf5oiQ6ZqP5py6SWRcclxuZXhwb3J0IGNvbnN0IGdlbmVyYXRlSWQgPSAoKSA9PiB7XHJcbiAgbGV0IHRpbWVTdGFtcCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gIGlmICh3aW5kb3cucGVyZm9ybWFuY2UgJiYgdHlwZW9mIHdpbmRvdy5wZXJmb3JtYW5jZS5ub3cgPT09ICdmdW5jdGlvbicpIHtcclxuICAgIHRpbWVTdGFtcCArPSBwZXJmb3JtYW5jZS5ub3coKTtcclxuICB9XHJcbiAgY29uc3QgaWQgPSAnYWFhYWFhYWFhYWFhYWFhYmFhYWFhYWFhYWFhYWFhYScucmVwbGFjZSgvW2FiXS9nLCAoaXRlbSkgPT4ge1xyXG4gICAgY29uc3QgcmVzID0gKHRpbWVTdGFtcCArIE1hdGgucmFuZG9tKCkgKiAxNikgJSAxNiB8IDA7XHJcbiAgICB0aW1lU3RhbXAgPSBNYXRoLmZsb29yKHRpbWVTdGFtcCAvIDE2KTtcclxuICAgIHJldHVybiAoaXRlbSA9PT0gJ2EnID8gcmVzIDogKHJlcyAmIDB4MykgfCAweDgpLnRvU3RyaW5nKDE2KTtcclxuICB9KTtcclxuICByZXR1cm4gaWQ7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgaGlnaFBlcmZvcm1hbmNlRXhwYW5kT2JqZWN0SW5BcnJheSA9IChvbGRPYmosIGF0dHIpID0+IHtcclxuICBvbGRPYmpbU3ltYm9sLml0ZXJhdG9yXSA9ICgpID0+IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIG5leHQ6IGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICAgICAgY29uc3QgYXJyYXkgPSBSZWZsZWN0Lm93bktleXMob2xkT2JqKTtcclxuICAgICAgICBpZiAodGhpcy5pbmRleCA8IGFycmF5Lmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgIGNvbnN0IGtleSA9IGFycmF5W3RoaXMuaW5kZXhdO1xyXG4gICAgICAgICAgdGhpcy5pbmRleCsrO1xyXG4gICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG9sZE9ialtrZXldIH07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUgfTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGluZGV4OiAwLFxyXG4gICAgfTtcclxuICB9O1xyXG4gIGlmIChhdHRyKSB7XHJcbiAgICBjb25zdCBuZXdPYmogPSBbXTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXR0ci5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9sZE9iaiwgYXR0cltpXSkpIHtcclxuICAgICAgICBuZXdPYmoucHVzaChvbGRPYmpbYXR0cltpXV0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3T2JqO1xyXG4gIH1cclxuICByZXR1cm4gWy4uLm9sZE9ial07XHJcbn07XHJcblxyXG4vLyDlsIbkuIDkupvlhazlhbHmlrnms5Xmi4bliIblh7rmnaVcclxuZXhwb3J0IGNvbnN0IGdldE5vZGVJbmRleCA9IChub2RlSWQsIHRyZWVUYWJsZUFycmF5KSA9PiB7XHJcbiAgLy8g5om+5Yiw6IqC54K55Zyo5oC75pWw5o2u5Lit55qE5L2N572u55qE5pa55rOVXHJcbiAgcmV0dXJuIHRyZWVUYWJsZUFycmF5LmZpbmRJbmRleCgodikgPT4gdi5ub2RlX2lkID09PSBub2RlSWQpO1xyXG59O1xyXG5cclxuZXhwb3J0IGNsYXNzIEZpbmRDaGlsZCB7XHJcbiAgLy8g5a+75om+5a2Q6IqC54K5XHJcbiAgYWxsQ2hpbGRDb2w6IGFueSA9IFtdO1xyXG5cclxuICBnZXRDaGlsZHJlbk9mSXRlbShub2RlLCB0cmVlVGFibGVBcnJheSkge1xyXG4gICAgLy8g5om+5Yiw6IqC54K55LiL55qE5a2Q6IqC54K555qE5pa55rOVXHJcbiAgICBjb25zdCBkYXRhOiBhbnkgPSBoaWdoUGVyZm9ybWFuY2VGaWx0ZXIodHJlZVRhYmxlQXJyYXksIChpdGVtKSA9PiBpdGVtLnBhcmVudF9ub2RlX2lkID09PSBub2RlLm5vZGVfaWQpO1xyXG4gICAgcmV0dXJuIGRhdGE7XHJcbiAgfVxyXG5cclxuICBnZXRBbGxDaGlsZHJlbk9mSXRlbShub2RlLCB0cmVlVGFibGVBcnJheSkge1xyXG4gICAgLy8g5om+5Yiw6IqC54K55LiL5omA5pyJ5a2Q6ZuG55qE5pa55rOVXHJcbiAgICB0aGlzLmFsbENoaWxkQ29sID0gW107XHJcbiAgICB0aGlzLmdldEFsbENoaWxkcmVuRGF0YShub2RlLCB0cmVlVGFibGVBcnJheSk7XHJcbiAgICByZXR1cm4gdGhpcy5hbGxDaGlsZENvbDtcclxuICB9XHJcblxyXG4gIGdldEFsbENoaWxkcmVuRGF0YShub2RlLCB0cmVlVGFibGVBcnJheSkge1xyXG4gICAgY29uc3QgY2hpbGREYXRhID0gdGhpcy5nZXRDaGlsZHJlbk9mSXRlbShub2RlLCB0cmVlVGFibGVBcnJheSk7XHJcbiAgICBjb25zdCBuZXdBcnJheSA9IFsuLi5jaGlsZERhdGFdO1xyXG4gICAgbmV3QXJyYXkucHVzaChub2RlKTtcclxuICAgIHRoaXMuYWxsQ2hpbGRDb2wgPSBbLi4udGhpcy5hbGxDaGlsZENvbCwgLi4ubmV3QXJyYXldO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZERhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKGNoaWxkRGF0YVtpXS5ub2RlX3R5cGUpIHtcclxuICAgICAgICB0aGlzLmdldEFsbENoaWxkcmVuRGF0YShjaGlsZERhdGFbaV0sIHRyZWVUYWJsZUFycmF5KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGRpc3RpbmN0ID0gKHJlY29yZEFyciwgbm9kZUFycikgPT4ge1xyXG4gIC8vIOaVsOe7hOWOu+mHjeeahOaWueazlVxyXG4gIGNvbnN0IGFyciA9IHJlY29yZEFyci5jb25jYXQobm9kZUFycik7XHJcbiAgY29uc3QgcmVzdWx0ID0gW107XHJcbiAgY29uc3Qgb2JqID0ge307XHJcbiAgZm9yIChjb25zdCBpIG9mIGFycikge1xyXG4gICAgaWYgKCFvYmpbaS5ub2RlX2lkXSkge1xyXG4gICAgICByZXN1bHQucHVzaChpKTtcclxuICAgICAgb2JqW2kubm9kZV9pZF0gPSAxO1xyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gcmVzdWx0O1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGhpZ2hQZXJmb3JtYW5jZU1hcCA9IChhcnIsIGZ1bmMpID0+IHtcclxuICBsZXQgcmVzID0gW107XHJcbiAgY29uc3QgYXJyTGVuZ3RoID0gYXJyLmxlbmd0aDtcclxuICBpZiAoYXJyTGVuZ3RoIDwgMTAwMDAgfHwgYXJyTGVuZ3RoID4gOTk5OTkpIHtcclxuICAgIGZvciAobGV0IGEgPSAwOyBhIDwgYXJyTGVuZ3RoOyBhKyspIHtcclxuICAgICAgY29uc3QgcnMgPSBmdW5jKGFyclthXSwgYSk7XHJcbiAgICAgIGlmIChycykge1xyXG4gICAgICAgIHJlcy5wdXNoKHJzKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICByZXMgPSBhcnIubWFwKGZ1bmMpO1xyXG4gIH1cclxuICByZXR1cm4gcmVzO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGZsYXRUcmVlRGF0YSA9IChkYXRhU291cmNlOiBhbnlbXSkgPT4ge1xyXG4gIGNvbnN0IGZsYXREYXRhID0gW107XHJcbiAgY29uc3QgdHJhdmVsT2JqID0gKGFyciwgcGFyZW50SWQpID0+IHtcclxuICAgIGFyci5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGlmIChpdGVtLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgY29uc3Qgb2JqID0ge1xyXG4gICAgICAgICAgaWQ6IGdlbmVyYXRlSWQoKSxcclxuICAgICAgICAgIG5vZGVfaWQ6IGdlbmVyYXRlSWQoKSxcclxuICAgICAgICAgIG5vZGVfdHlwZTogMSxcclxuICAgICAgICAgIHBhcmVudF9ub2RlX2lkOiBwYXJlbnRJZCxcclxuICAgICAgICAgIC4uLml0ZW0sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IG9iai5jaGlsZHJlbjtcclxuICAgICAgICBkZWxldGUgb2JqLmNoaWxkcmVuO1xyXG4gICAgICAgIGZsYXREYXRhLnB1c2gob2JqKTtcclxuICAgICAgICB0cmF2ZWxPYmooY2hpbGRyZW4sIG9iai5ub2RlX2lkKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBvYmogPSB7XHJcbiAgICAgICAgICBpZDogZ2VuZXJhdGVJZCgpLFxyXG4gICAgICAgICAgbm9kZV9pZDogZ2VuZXJhdGVJZCgpLFxyXG4gICAgICAgICAgbm9kZV90eXBlOiAwLFxyXG4gICAgICAgICAgcGFyZW50X25vZGVfaWQ6IHBhcmVudElkLFxyXG4gICAgICAgICAgLi4uaXRlbSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGZsYXREYXRhLnB1c2gob2JqKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfTtcclxuXHJcbiAgdHJhdmVsT2JqKGRhdGFTb3VyY2UsIG51bGwpO1xyXG5cclxuICByZXR1cm4gZmxhdERhdGE7XHJcbn07XHJcbiJdfQ==