custom-app
Version:
ITIMS��Ʒ�鿪��ר��React���,�Dz��ý��ּ�dhcc-app���������
225 lines (184 loc) • 18.3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useFlexLayout = exports.actions = undefined;
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
var _react = require("react");
var _propTypes = require("prop-types");
var _propTypes2 = _interopRequireDefault(_propTypes);
var _utils = require("../utils");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var propTypes = {
defaultFlex: _propTypes2.default.number
};
var actions = exports.actions = {};
var useFlexLayout = exports.useFlexLayout = function useFlexLayout(props) {
// Validate props
_propTypes2.default.checkPropTypes(propTypes, props, "property", "useFlexLayout");
var _props$defaultFlex = props.defaultFlex,
defaultFlex = _props$defaultFlex === undefined ? 1 : _props$defaultFlex,
_props$hooks = props.hooks,
columnsHooks = _props$hooks.columns,
getRowProps = _props$hooks.getRowProps,
getHeaderRowProps = _props$hooks.getHeaderRowProps,
getHeaderProps = _props$hooks.getHeaderProps,
getCellProps = _props$hooks.getCellProps;
columnsHooks.push(function (columns, api) {
var visibleColumns = columns.filter(function (column) {
column.visible = typeof column.show === "function" ? column.show(api) : !!column.show;
return column.visible;
});
var columnMeasurements = {};
var sumWidth = 0;
visibleColumns.forEach(function (column) {
var _getSizesForColumn = getSizesForColumn(column, defaultFlex, undefined, undefined, api),
width = _getSizesForColumn.width,
minWidth = _getSizesForColumn.minWidth;
if (width) {
sumWidth += width;
} else if (minWidth) {
sumWidth += minWidth;
} else {
sumWidth += defaultFlex;
}
});
var rowStyles = {
style: {
display: "flex",
minWidth: sumWidth + "px"
}
};
api.rowStyles = rowStyles;
getRowProps.push(function () {
return rowStyles;
});
getHeaderRowProps.push(function () {
return rowStyles;
});
getHeaderProps.push(function (column) {
return {
style: _extends({
boxSizing: "border-box"
}, getStylesForColumn(column, columnMeasurements, defaultFlex, api))
// [refKey]: el => {
// renderedCellInfoRef.current[key] = {
// column,
// el
// };
// },
};
});
getCellProps.push(function (cell) {
return {
style: _extends({
display: "block",
boxSizing: "border-box"
}, getStylesForColumn(cell.column, columnMeasurements, defaultFlex, undefined, api))
// [refKey]: el => {
// renderedCellInfoRef.current[columnPathStr] = {
// column,
// el
// };
// }
};
});
return columns;
});
return props;
};
// Utils
function getStylesForColumn(column, columnMeasurements, defaultFlex, api) {
var _getSizesForColumn2 = getSizesForColumn(column, columnMeasurements, defaultFlex, api),
flex = _getSizesForColumn2.flex,
width = _getSizesForColumn2.width,
maxWidth = _getSizesForColumn2.maxWidth;
return {
flex: flex + " 0 auto",
width: width + "px",
maxWidth: maxWidth + "px"
};
}
function getSizesForColumn(_ref, columnMeasurements, defaultFlex, api) {
var columns = _ref.columns,
id = _ref.id,
width = _ref.width,
minWidth = _ref.minWidth,
maxWidth = _ref.maxWidth;
if (columns) {
columns = columns.map(function (column) {
return getSizesForColumn(column, columnMeasurements, defaultFlex, api);
}).filter(Boolean);
if (!columns.length) {
return false;
}
var flex = (0, _utils.sum)(columns.map(function (col) {
return col.flex;
}));
var _width = (0, _utils.sum)(columns.map(function (col) {
return col.width;
}));
var _maxWidth = (0, _utils.sum)(columns.map(function (col) {
return col.maxWidth;
}));
return {
flex: flex,
width: _width,
maxWidth: _maxWidth
};
}
return {
flex: width ? 0 : defaultFlex,
width: width === "auto" ? columnMeasurements[id] || defaultFlex : (0, _utils.getFirstDefined)(width, minWidth, defaultFlex),
maxWidth: maxWidth
};
}
// const resetRefs = () => {
// if (debug) console.info("resetRefs");
// renderedCellInfoRef.current = {};
// };
// const calculateAutoWidths = () => {
// RAF(() => {
// const newColumnMeasurements = {};
// Object.values(renderedCellInfoRef.current).forEach(({ column, el }) => {
// if (!el) {
// return;
// }
// let measurement = 0;
// const measureChildren = children => {
// if (children) {
// [].slice.call(children).forEach(child => {
// measurement = Math.max(
// measurement,
// Math.ceil(child.offsetWidth) || 0
// );
// measureChildren(child.children);
// });
// }
// return measurement;
// };
// const parentDims = getElementDimensions(el);
// measureChildren(el.children);
// newColumnMeasurements[column.id] = Math.max(
// newColumnMeasurements[column.id] || 0,
// measurement + parentDims.paddingLeft + parentDims.paddingRight
// );
// });
// const oldKeys = Object.keys(columnMeasurements);
// const newKeys = Object.keys(newColumnMeasurements);
// const needsUpdate =
// oldKeys.length !== newKeys.length ||
// oldKeys.some(key => {
// return columnMeasurements[key] !== newColumnMeasurements[key];
// });
// if (needsUpdate) {
// setState(old => {
// return {
// ...old,
// columnMeasurements: newColumnMeasurements
// };
// }, actions.updateAutoWidth);
// }
// });
// };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VGbGV4TGF5b3V0LmpzIl0sIm5hbWVzIjpbInByb3BUeXBlcyIsImRlZmF1bHRGbGV4IiwiUHJvcFR5cGVzIiwibnVtYmVyIiwiYWN0aW9ucyIsInVzZUZsZXhMYXlvdXQiLCJjaGVja1Byb3BUeXBlcyIsInByb3BzIiwiaG9va3MiLCJjb2x1bW5zSG9va3MiLCJjb2x1bW5zIiwiZ2V0Um93UHJvcHMiLCJnZXRIZWFkZXJSb3dQcm9wcyIsImdldEhlYWRlclByb3BzIiwiZ2V0Q2VsbFByb3BzIiwicHVzaCIsImFwaSIsInZpc2libGVDb2x1bW5zIiwiZmlsdGVyIiwiY29sdW1uIiwidmlzaWJsZSIsInNob3ciLCJjb2x1bW5NZWFzdXJlbWVudHMiLCJzdW1XaWR0aCIsImZvckVhY2giLCJnZXRTaXplc0ZvckNvbHVtbiIsInVuZGVmaW5lZCIsIndpZHRoIiwibWluV2lkdGgiLCJyb3dTdHlsZXMiLCJzdHlsZSIsImRpc3BsYXkiLCJib3hTaXppbmciLCJnZXRTdHlsZXNGb3JDb2x1bW4iLCJjZWxsIiwiZmxleCIsIm1heFdpZHRoIiwiaWQiLCJtYXAiLCJCb29sZWFuIiwibGVuZ3RoIiwiY29sIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFDQTs7OztBQUVBOzs7O0FBRUEsSUFBTUEsWUFBWTtBQUNoQkMsZUFBYUMsb0JBQVVDO0FBRFAsQ0FBbEI7O0FBSU8sSUFBTUMsNEJBQVUsRUFBaEI7O0FBRUEsSUFBTUMsd0NBQWdCLFNBQWhCQSxhQUFnQixRQUFTO0FBQ3BDO0FBQ0FILHNCQUFVSSxjQUFWLENBQXlCTixTQUF6QixFQUFvQ08sS0FBcEMsRUFBMkMsVUFBM0MsRUFBdUQsZUFBdkQ7O0FBRm9DLDJCQWFoQ0EsS0FiZ0MsQ0FLbENOLFdBTGtDO0FBQUEsTUFLbENBLFdBTGtDLHNDQUtwQixDQUxvQjtBQUFBLHFCQWFoQ00sS0FiZ0MsQ0FNbENDLEtBTmtDO0FBQUEsTUFPdkJDLFlBUHVCLGdCQU9oQ0MsT0FQ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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6InVzZUZsZXhMYXlvdXQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuXG5pbXBvcnQgeyBnZXRGaXJzdERlZmluZWQsIHN1bSB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBwcm9wVHlwZXMgPSB7XG4gIGRlZmF1bHRGbGV4OiBQcm9wVHlwZXMubnVtYmVyXG59O1xuXG5leHBvcnQgY29uc3QgYWN0aW9ucyA9IHt9O1xuXG5leHBvcnQgY29uc3QgdXNlRmxleExheW91dCA9IHByb3BzID0+IHtcbiAgLy8gVmFsaWRhdGUgcHJvcHNcbiAgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKHByb3BUeXBlcywgcHJvcHMsIFwicHJvcGVydHlcIiwgXCJ1c2VGbGV4TGF5b3V0XCIpO1xuXG4gIGNvbnN0IHtcbiAgICBkZWZhdWx0RmxleCA9IDEsXG4gICAgaG9va3M6IHtcbiAgICAgIGNvbHVtbnM6IGNvbHVtbnNIb29rcyxcbiAgICAgIGdldFJvd1Byb3BzLFxuICAgICAgZ2V0SGVhZGVyUm93UHJvcHMsXG4gICAgICBnZXRIZWFkZXJQcm9wcyxcbiAgICAgIGdldENlbGxQcm9wc1xuICAgIH1cbiAgfSA9IHByb3BzO1xuXG4gIGNvbHVtbnNIb29rcy5wdXNoKChjb2x1bW5zLCBhcGkpID0+IHtcbiAgICBjb25zdCB2aXNpYmxlQ29sdW1ucyA9IGNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiB7XG4gICAgICBjb2x1bW4udmlzaWJsZSA9XG4gICAgICAgIHR5cGVvZiBjb2x1bW4uc2hvdyA9PT0gXCJmdW5jdGlvblwiID8gY29sdW1uLnNob3coYXBpKSA6ICEhY29sdW1uLnNob3c7XG4gICAgICByZXR1cm4gY29sdW1uLnZpc2libGU7XG4gICAgfSk7XG5cbiAgICBjb25zdCBjb2x1bW5NZWFzdXJlbWVudHMgPSB7fTtcblxuICAgIGxldCBzdW1XaWR0aCA9IDA7XG4gICAgdmlzaWJsZUNvbHVtbnMuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgICAgY29uc3QgeyB3aWR0aCwgbWluV2lkdGggfSA9IGdldFNpemVzRm9yQ29sdW1uKFxuICAgICAgICBjb2x1bW4sXG4gICAgICAgIGRlZmF1bHRGbGV4LFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgYXBpXG4gICAgICApO1xuICAgICAgaWYgKHdpZHRoKSB7XG4gICAgICAgIHN1bVdpZHRoICs9IHdpZHRoO1xuICAgICAgfSBlbHNlIGlmIChtaW5XaWR0aCkge1xuICAgICAgICBzdW1XaWR0aCArPSBtaW5XaWR0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN1bVdpZHRoICs9IGRlZmF1bHRGbGV4O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3Qgcm93U3R5bGVzID0ge1xuICAgICAgc3R5bGU6IHtcbiAgICAgICAgZGlzcGxheTogXCJmbGV4XCIsXG4gICAgICAgIG1pbldpZHRoOiBgJHtzdW1XaWR0aH1weGBcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgYXBpLnJvd1N0eWxlcyA9IHJvd1N0eWxlcztcblxuICAgIGdldFJvd1Byb3BzLnB1c2goKCkgPT4gcm93U3R5bGVzKTtcbiAgICBnZXRIZWFkZXJSb3dQcm9wcy5wdXNoKCgpID0+IHJvd1N0eWxlcyk7XG5cbiAgICBnZXRIZWFkZXJQcm9wcy5wdXNoKGNvbHVtbiA9PiAoe1xuICAgICAgc3R5bGU6IHtcbiAgICAgICAgYm94U2l6aW5nOiBcImJvcmRlci1ib3hcIixcbiAgICAgICAgLi4uZ2V0U3R5bGVzRm9yQ29sdW1uKGNvbHVtbiwgY29sdW1uTWVhc3VyZW1lbnRzLCBkZWZhdWx0RmxleCwgYXBpKVxuICAgICAgfVxuICAgICAgLy8gW3JlZktleV06IGVsID0+IHtcbiAgICAgIC8vICAgcmVuZGVyZWRDZWxsSW5mb1JlZi5jdXJyZW50W2tleV0gPSB7XG4gICAgICAvLyAgICAgY29sdW1uLFxuICAgICAgLy8gICAgIGVsXG4gICAgICAvLyAgIH07XG4gICAgICAvLyB9LFxuICAgIH0pKTtcblxuICAgIGdldENlbGxQcm9wcy5wdXNoKGNlbGwgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICBkaXNwbGF5OiBcImJsb2NrXCIsXG4gICAgICAgICAgYm94U2l6aW5nOiBcImJvcmRlci1ib3hcIixcbiAgICAgICAgICAuLi5nZXRTdHlsZXNGb3JDb2x1bW4oXG4gICAgICAgICAgICBjZWxsLmNvbHVtbixcbiAgICAgICAgICAgIGNvbHVtbk1lYXN1cmVtZW50cyxcbiAgICAgICAgICAgIGRlZmF1bHRGbGV4LFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgYXBpXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAgIC8vIFtyZWZLZXldOiBlbCA9PiB7XG4gICAgICAgIC8vICAgcmVuZGVyZWRDZWxsSW5mb1JlZi5jdXJyZW50W2NvbHVtblBhdGhTdHJdID0ge1xuICAgICAgICAvLyAgICAgY29sdW1uLFxuICAgICAgICAvLyAgICAgZWxcbiAgICAgICAgLy8gICB9O1xuICAgICAgICAvLyB9XG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNvbHVtbnM7XG4gIH0pO1xuXG4gIHJldHVybiBwcm9wcztcbn07XG5cbi8vIFV0aWxzXG5cbmZ1bmN0aW9uIGdldFN0eWxlc0ZvckNvbHVtbihjb2x1bW4sIGNvbHVtbk1lYXN1cmVtZW50cywgZGVmYXVsdEZsZXgsIGFwaSkge1xuICBjb25zdCB7IGZsZXgsIHdpZHRoLCBtYXhXaWR0aCB9ID0gZ2V0U2l6ZXNGb3JDb2x1bW4oXG4gICAgY29sdW1uLFxuICAgIGNvbHVtbk1lYXN1cmVtZW50cyxcbiAgICBkZWZhdWx0RmxleCxcbiAgICBhcGlcbiAgKTtcblxuICByZXR1cm4ge1xuICAgIGZsZXg6IGAke2ZsZXh9IDAgYXV0b2AsXG4gICAgd2lkdGg6IGAke3dpZHRofXB4YCxcbiAgICBtYXhXaWR0aDogYCR7bWF4V2lkdGh9cHhgXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFNpemVzRm9yQ29sdW1uKFxuICB7IGNvbHVtbnMsIGlkLCB3aWR0aCwgbWluV2lkdGgsIG1heFdpZHRoIH0sXG4gIGNvbHVtbk1lYXN1cmVtZW50cyxcbiAgZGVmYXVsdEZsZXgsXG4gIGFwaVxuKSB7XG4gIGlmIChjb2x1bW5zKSB7XG4gICAgY29sdW1ucyA9IGNvbHVtbnNcbiAgICAgIC5tYXAoY29sdW1uID0+XG4gICAgICAgIGdldFNpemVzRm9yQ29sdW1uKGNvbHVtbiwgY29sdW1uTWVhc3VyZW1lbnRzLCBkZWZhdWx0RmxleCwgYXBpKVxuICAgICAgKVxuICAgICAgLmZpbHRlcihCb29sZWFuKTtcblxuICAgIGlmICghY29sdW1ucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBmbGV4ID0gc3VtKGNvbHVtbnMubWFwKGNvbCA9PiBjb2wuZmxleCkpO1xuICAgIGNvbnN0IHdpZHRoID0gc3VtKGNvbHVtbnMubWFwKGNvbCA9PiBjb2wud2lkdGgpKTtcbiAgICBjb25zdCBtYXhXaWR0aCA9IHN1bShjb2x1bW5zLm1hcChjb2wgPT4gY29sLm1heFdpZHRoKSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZmxleCxcbiAgICAgIHdpZHRoLFxuICAgICAgbWF4V2lkdGhcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBmbGV4OiB3aWR0aCA/IDAgOiBkZWZhdWx0RmxleCxcbiAgICB3aWR0aDpcbiAgICAgIHdpZHRoID09PSBcImF1dG9cIlxuICAgICAgICA/IGNvbHVtbk1lYXN1cmVtZW50c1tpZF0gfHwgZGVmYXVsdEZsZXhcbiAgICAgICAgOiBnZXRGaXJzdERlZmluZWQod2lkdGgsIG1pbldpZHRoLCBkZWZhdWx0RmxleCksXG4gICAgbWF4V2lkdGhcbiAgfTtcbn1cblxuLy8gY29uc3QgcmVzZXRSZWZzID0gKCkgPT4ge1xuLy8gICBpZiAoZGVidWcpIGNvbnNvbGUuaW5mbyhcInJlc2V0UmVmc1wiKTtcbi8vICAgcmVuZGVyZWRDZWxsSW5mb1JlZi5jdXJyZW50ID0ge307XG4vLyB9O1xuXG4vLyBjb25zdCBjYWxjdWxhdGVBdXRvV2lkdGhzID0gKCkgPT4ge1xuLy8gICBSQUYoKCkgPT4ge1xuLy8gICAgIGNvbnN0IG5ld0NvbHVtbk1lYXN1cmVtZW50cyA9IHt9O1xuLy8gICAgIE9iamVjdC52YWx1ZXMocmVuZGVyZWRDZWxsSW5mb1JlZi5jdXJyZW50KS5mb3JFYWNoKCh7IGNvbHVtbiwgZWwgfSkgPT4ge1xuLy8gICAgICAgaWYgKCFlbCkge1xuLy8gICAgICAgICByZXR1cm47XG4vLyAgICAgICB9XG5cbi8vICAgICAgIGxldCBtZWFzdXJlbWVudCA9IDA7XG5cbi8vICAgICAgIGNvbnN0IG1lYXN1cmVDaGlsZHJlbiA9IGNoaWxkcmVuID0+IHtcbi8vICAgICAgICAgaWYgKGNoaWxkcmVuKSB7XG4vLyAgICAgICAgICAgW10uc2xpY2UuY2FsbChjaGlsZHJlbikuZm9yRWFjaChjaGlsZCA9PiB7XG4vLyAgICAgICAgICAgICBtZWFzdXJlbWVudCA9IE1hdGgubWF4KFxuLy8gICAgICAgICAgICAgICBtZWFzdXJlbWVudCxcbi8vICAgICAgICAgICAgICAgTWF0aC5jZWlsKGNoaWxkLm9mZnNldFdpZHRoKSB8fCAwXG4vLyAgICAgICAgICAgICApO1xuLy8gICAgICAgICAgICAgbWVhc3VyZUNoaWxkcmVuKGNoaWxkLmNoaWxkcmVuKTtcbi8vICAgICAgICAgICB9KTtcbi8vICAgICAgICAgfVxuLy8gICAgICAgICByZXR1cm4gbWVhc3VyZW1lbnQ7XG4vLyAgICAgICB9O1xuXG4vLyAgICAgICBjb25zdCBwYXJlbnREaW1zID0gZ2V0RWxlbWVudERpbWVuc2lvbnMoZWwpO1xuLy8gICAgICAgbWVhc3VyZUNoaWxkcmVuKGVsLmNoaWxkcmVuKTtcblxuLy8gICAgICAgbmV3Q29sdW1uTWVhc3VyZW1lbnRzW2NvbHVtbi5pZF0gPSBNYXRoLm1heChcbi8vICAgICAgICAgbmV3Q29sdW1uTWVhc3VyZW1lbnRzW2NvbHVtbi5pZF0gfHwgMCxcbi8vICAgICAgICAgbWVhc3VyZW1lbnQgKyBwYXJlbnREaW1zLnBhZGRpbmdMZWZ0ICsgcGFyZW50RGltcy5wYWRkaW5nUmlnaHRcbi8vICAgICAgICk7XG4vLyAgICAgfSk7XG5cbi8vICAgICBjb25zdCBvbGRLZXlzID0gT2JqZWN0LmtleXMoY29sdW1uTWVhc3VyZW1lbnRzKTtcbi8vICAgICBjb25zdCBuZXdLZXlzID0gT2JqZWN0LmtleXMobmV3Q29sdW1uTWVhc3VyZW1lbnRzKTtcblxuLy8gICAgIGNvbnN0IG5lZWRzVXBkYXRlID1cbi8vICAgICAgIG9sZEtleXMubGVuZ3RoICE9PSBuZXdLZXlzLmxlbmd0aCB8fFxuLy8gICAgICAgb2xkS2V5cy5zb21lKGtleSA9PiB7XG4vLyAgICAgICAgIHJldHVybiBjb2x1bW5NZWFzdXJlbWVudHNba2V5XSAhPT0gbmV3Q29sdW1uTWVhc3VyZW1lbnRzW2tleV07XG4vLyAgICAgICB9KTtcblxuLy8gICAgIGlmIChuZWVkc1VwZGF0ZSkge1xuLy8gICAgICAgc2V0U3RhdGUob2xkID0+IHtcbi8vICAgICAgICAgcmV0dXJuIHtcbi8vICAgICAgICAgICAuLi5vbGQsXG4vLyAgICAgICAgICAgY29sdW1uTWVhc3VyZW1lbnRzOiBuZXdDb2x1bW5NZWFzdXJlbWVudHNcbi8vICAgICAgICAgfTtcbi8vICAgICAgIH0sIGFjdGlvbnMudXBkYXRlQXV0b1dpZHRoKTtcbi8vICAgICB9XG4vLyAgIH0pO1xuLy8gfTtcbiJdfQ==