kepler.gl.geoiq
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
153 lines (138 loc) • 18.8 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _react = _interopRequireDefault(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _defaultSettings = require("../../constants/default-settings");
var _icons = require("../common/icons");
var _styledComponents = require("../common/styled-components");
// Copyright (c) 2023 Uber Technologies, Inc.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
var propTypes = {
datasets: _propTypes["default"].object.isRequired,
selectedDataset: _propTypes["default"].string,
dataType: _propTypes["default"].string.isRequired,
filtered: _propTypes["default"].bool.isRequired,
// callbacks
onClose: _propTypes["default"].func.isRequired,
onChangeExportSelectedDataset: _propTypes["default"].func.isRequired,
onChangeExportDataType: _propTypes["default"].func.isRequired,
onChangeExportFiltered: _propTypes["default"].func.isRequired
};
var getDataRowCount = function getDataRowCount(datasets, selectedDataset, filtered) {
var selectedData = datasets[selectedDataset];
if (!selectedData) {
return "".concat(Object.keys(datasets).length, " Files ");
}
var allData = selectedData.allData,
data = selectedData.data;
var rowCount = filtered ? data.length : allData.length;
return "".concat(rowCount.toLocaleString(), " Rows");
};
var ExportDataModal = function ExportDataModal(_ref) {
var datasets = _ref.datasets,
selectedDataset = _ref.selectedDataset,
dataType = _ref.dataType,
filtered = _ref.filtered,
config = _ref.config,
onChangeExportDataType = _ref.onChangeExportDataType,
onChangeExportSelectedDataset = _ref.onChangeExportSelectedDataset,
onChangeExportFiltered = _ref.onChangeExportFiltered;
return (/*#__PURE__*/_react["default"].createElement(_styledComponents.StyledModalContent, {
className: "export-data-modal"
}, /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(_styledComponents.StyledExportSection, null, /*#__PURE__*/_react["default"].createElement("div", {
className: "description"
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "title"
}, "Dataset"), /*#__PURE__*/_react["default"].createElement("div", {
className: "subtitle"
}, "Choose the datasets you want to export")), /*#__PURE__*/_react["default"].createElement("div", {
className: "selection"
}, /*#__PURE__*/_react["default"].createElement("select", {
value: selectedDataset,
onChange: function onChange(e) {
return onChangeExportSelectedDataset(e.target.value);
}
}, ['All'].concat(Object.keys(datasets)).map(function (d) {
return (/*#__PURE__*/_react["default"].createElement("option", {
key: d,
value: d
}, datasets[d] && datasets[d].label || d)
);
})))), /*#__PURE__*/_react["default"].createElement(_styledComponents.StyledExportSection, null, /*#__PURE__*/_react["default"].createElement("div", {
className: "description"
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "title"
}, "Data Type"), /*#__PURE__*/_react["default"].createElement("div", {
className: "subtitle"
}, "Choose the type of data you want to export")), /*#__PURE__*/_react["default"].createElement("div", {
className: "selection"
}, _defaultSettings.EXPORT_DATA_TYPE_OPTIONS.map(function (op) {
return (/*#__PURE__*/_react["default"].createElement(_styledComponents.StyledType, {
key: op.id,
selected: dataType === op.id,
available: op.available,
onClick: function onClick() {
return op.available && onChangeExportDataType(op.id);
}
}, /*#__PURE__*/_react["default"].createElement(_icons.FileType, {
ext: op.label,
height: "80px",
fontSize: "11px"
}))
);
}))), /*#__PURE__*/_react["default"].createElement(_styledComponents.StyledExportSection, null, /*#__PURE__*/_react["default"].createElement("div", {
className: "description"
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "title"
}, "Filter Data"), /*#__PURE__*/_react["default"].createElement("div", {
className: "subtitle"
}, "You can choose exporting original data or filtered data")), /*#__PURE__*/_react["default"].createElement("div", {
className: "selection"
}, /*#__PURE__*/_react["default"].createElement(_styledComponents.StyledFilteredOption, {
selected: !filtered,
onClick: function onClick() {
return onChangeExportFiltered(false);
}
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "filtered-title"
}, "Unfiltered Data"), /*#__PURE__*/_react["default"].createElement("div", {
className: "filtered-subtitle"
}, getDataRowCount(datasets, selectedDataset, false))), /*#__PURE__*/_react["default"].createElement(_styledComponents.StyledFilteredOption, {
selected: filtered,
onClick: function onClick() {
return onChangeExportFiltered(true);
}
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "filtered-title"
}, "Filtered Data"), /*#__PURE__*/_react["default"].createElement("div", {
className: "filtered-subtitle"
}, getDataRowCount(datasets, selectedDataset, true)))))))
);
};
ExportDataModal.propTypes = propTypes;
var ExportDataModalFactory = function ExportDataModalFactory() {
return ExportDataModal;
};
var _default = exports["default"] = ExportDataModalFactory;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vZGFscy9leHBvcnQtZGF0YS1tb2RhbC5qcyJdLCJuYW1lcyI6WyJwcm9wVHlwZXMiLCJkYXRhc2V0cyIsIlByb3BUeXBlcyIsIm9iamVjdCIsImlzUmVxdWlyZWQiLCJzZWxlY3RlZERhdGFzZXQiLCJzdHJpbmciLCJkYXRhVHlwZSIsImZpbHRlcmVkIiwiYm9vbCIsIm9uQ2xvc2UiLCJmdW5jIiwib25DaGFuZ2VFeHBvcnRTZWxlY3RlZERhdGFzZXQiLCJvbkNoYW5nZUV4cG9ydERhdGFUeXBlIiwib25DaGFuZ2VFeHBvcnRGaWx0ZXJlZCIsImdldERhdGFSb3dDb3VudCIsInNlbGVjdGVkRGF0YSIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJhbGxEYXRhIiwiZGF0YSIsInJvd0NvdW50IiwidG9Mb2NhbGVTdHJpbmciLCJFeHBvcnREYXRhTW9kYWwiLCJjb25maWciLCJlIiwidGFyZ2V0IiwidmFsdWUiLCJjb25jYXQiLCJtYXAiLCJkIiwibGFiZWwiLCJFWFBPUlRfREFUQV9UWVBFX09QVElPTlMiLCJvcCIsImlkIiwiYXZhaWxhYmxlIiwiRXhwb3J0RGF0YU1vZGFsRmFjdG9yeSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBb0JBOztBQUNBOztBQUVBOztBQUNBOztBQUNBOztBQXpCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWNBLElBQU1BLFNBQVMsR0FBRztBQUNoQkMsRUFBQUEsUUFBUSxFQUFFQyxzQkFBVUMsTUFBVixDQUFpQkMsVUFEWDtBQUVoQkMsRUFBQUEsZUFBZSxFQUFFSCxzQkFBVUksTUFGWDtBQUdoQkMsRUFBQUEsUUFBUSxFQUFFTCxzQkFBVUksTUFBVixDQUFpQkYsVUFIWDtBQUloQkksRUFBQUEsUUFBUSxFQUFFTixzQkFBVU8sSUFBVixDQUFlTCxVQUpU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LFNBQVMsRUFBQztBQUFmLE9BQW9DQyxlQUFlLENBQUNkLFFBQUQsRUFBV0ksZUFBWCxFQUE0QixJQUE1QixDQUFuRCxDQUZGLENBTEYsQ0FURixDQXhDRixDQURGO0FBWHNCO0FBQUEsQ0FBeEI7O0FBNEVBbUIsZUFBZSxDQUFDeEIsU0FBaEIsR0FBNEJBLFNBQTVCOztBQUVBLElBQU1xQyxzQkFBc0IsR0FBRyxTQUF6QkEsc0JBQXlCO0FBQUEsU0FBTWIsZUFBTjtBQUFBLENBQS9COztvQ0FDZWEsc0IiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMjMgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuaW1wb3J0IHtFWFBPUlRfREFUQV9UWVBFX09QVElPTlN9IGZyb20gJ2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzJztcbmltcG9ydCB7RmlsZVR5cGV9IGZyb20gJ2NvbXBvbmVudHMvY29tbW9uL2ljb25zJztcbmltcG9ydCB7XG4gIFN0eWxlZE1vZGFsQ29udGVudCxcbiAgU3R5bGVkRXhwb3J0U2VjdGlvbixcbiAgU3R5bGVkRmlsdGVyZWRPcHRpb24sXG4gIFN0eWxlZFR5cGVcbn0gZnJvbSAnY29tcG9uZW50cy9jb21tb24vc3R5bGVkLWNvbXBvbmVudHMnO1xuXG5jb25zdCBwcm9wVHlwZXMgPSB7XG4gIGRhdGFzZXRzOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gIHNlbGVjdGVkRGF0YXNldDogUHJvcFR5cGVzLnN0cmluZyxcbiAgZGF0YVR5cGU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgZmlsdGVyZWQ6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIC8vIGNhbGxiYWNrc1xuICBvbkNsb3NlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBvbkNoYW5nZUV4cG9ydFNlbGVjdGVkRGF0YXNldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb25DaGFuZ2VFeHBvcnREYXRhVHlwZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb25DaGFuZ2VFeHBvcnRGaWx0ZXJlZDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZFxufTtcblxuY29uc3QgZ2V0RGF0YVJvd0NvdW50ID0gKGRhdGFzZXRzLCBzZWxlY3RlZERhdGFzZXQsIGZpbHRlcmVkKSA9PiB7XG4gIGNvbnN0IHNlbGVjdGVkRGF0YSA9IGRhdGFzZXRzW3NlbGVjdGVkRGF0YXNldF07XG4gIGlmICghc2VsZWN0ZWREYXRhKSB7XG4gICAgcmV0dXJuIGAke09iamVjdC5rZXlzKGRhdGFzZXRzKS5sZW5ndGh9IEZpbGVzIGAgO1xuICB9XG4gIGNvbnN0IHthbGxEYXRhLCBkYXRhfSA9IHNlbGVjdGVkRGF0YTtcbiAgY29uc3Qgcm93Q291bnQgPSBmaWx0ZXJlZCA/IGRhdGEubGVuZ3RoIDogYWxsRGF0YS5sZW5ndGg7XG4gIHJldHVybiBgJHtyb3dDb3VudC50b0xvY2FsZVN0cmluZygpfSBSb3dzYDtcbn07XG5cbmNvbnN0IEV4cG9ydERhdGFNb2RhbCA9ICh7XG4gIGRhdGFzZXRzLFxuICBzZWxlY3RlZERhdGFzZXQsXG4gIGRhdGFUeXBlLFxuICBmaWx0ZXJlZCxcbiAgY29uZmlnLFxuICAvLyBjYWxsYmFja3M6XG4gIG9uQ2hhbmdlRXhwb3J0RGF0YVR5cGUsXG4gIG9uQ2hhbmdlRXhwb3J0U2VsZWN0ZWREYXRhc2V0LFxuICBvbkNoYW5nZUV4cG9ydEZpbHRlcmVkXG59KSA9PiAoXG4gIDxTdHlsZWRNb2RhbENvbnRlbnQgY2xhc3NOYW1lPVwiZXhwb3J0LWRhdGEtbW9kYWxcIj5cbiAgICA8ZGl2PlxuICAgICAgPFN0eWxlZEV4cG9ydFNlY3Rpb24+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZGVzY3JpcHRpb25cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRpdGxlXCI+XG4gICAgICAgICAgICBEYXRhc2V0XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdWJ0aXRsZVwiPlxuICAgICAgICAgICAgQ2hvb3NlIHRoZSBkYXRhc2V0cyB5b3Ugd2FudCB0byBleHBvcnRcbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2VsZWN0aW9uXCI+XG4gICAgICAgICAgPHNlbGVjdCB2YWx1ZT17c2VsZWN0ZWREYXRhc2V0fSBvbkNoYW5nZT17ZSA9PiBvbkNoYW5nZUV4cG9ydFNlbGVjdGVkRGF0YXNldChlLnRhcmdldC52YWx1ZSl9PlxuICAgICAgICAgIHtbJ0FsbCddLmNvbmNhdChPYmplY3Qua2V5cyhkYXRhc2V0cykpLm1hcChkID0+IChcbiAgICAgICAgICAgIDxvcHRpb24ga2V5PXtkfSB2YWx1ZT17ZH0+eyhkYXRhc2V0c1tkXSAmJiBkYXRhc2V0c1tkXS5sYWJlbCkgfHwgZH08L29wdGlvbj5cbiAgICAgICAgICApKX1cbiAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L1N0eWxlZEV4cG9ydFNlY3Rpb24+XG4gICAgICA8U3R5bGVkRXhwb3J0U2VjdGlvbj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJkZXNjcmlwdGlvblwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGl0bGVcIj5cbiAgICAgICAgICAgIERhdGEgVHlwZVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3VidGl0bGVcIj5cbiAgICAgICAgICAgIENob29zZSB0aGUgdHlwZSBvZiBkYXRhIHlvdSB3YW50IHRvIGV4cG9ydFxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzZWxlY3Rpb25cIj5cbiAgICAgICAgICB7RVhQT1JUX0RBVEFfVFlQRV9PUFRJT05TLm1hcChvcCA9PlxuICAgICAgICAgICAgPFN0eWxlZFR5cGVcbiAgICAgICAgICAgICAga2V5PXtvcC5pZH1cbiAgICAgICAgICAgICAgc2VsZWN0ZWQ9e2RhdGFUeXBlID09PSBvcC5pZH1cbiAgICAgICAgICAgICAgYXZhaWxhYmxlPXtvcC5hdmFpbGFibGV9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG9wLmF2YWlsYWJsZSAmJiBvbkNoYW5nZUV4cG9ydERhdGFUeXBlKG9wLmlkKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPEZpbGVUeXBlIGV4dD17b3AubGFiZWx9IGhlaWdodD1cIjgwcHhcIiBmb250U2l6ZT1cIjExcHhcIiAvPlxuICAgICAgICAgICAgPC9TdHlsZWRUeXBlPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9TdHlsZWRFeHBvcnRTZWN0aW9uPlxuICAgICAgPFN0eWxlZEV4cG9ydFNlY3Rpb24+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZGVzY3JpcHRpb25cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRpdGxlXCI+XG4gICAgICAgICAgICBGaWx0ZXIgRGF0YVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3VidGl0bGVcIj5cbiAgICAgICAgICAgIFlvdSBjYW4gY2hvb3NlIGV4cG9ydGluZyBvcmlnaW5hbCBkYXRhIG9yIGZpbHRlcmVkIGRhdGFcbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2VsZWN0aW9uXCI+XG4gICAgICAgICAgPFN0eWxlZEZpbHRlcmVkT3B0aW9uIHNlbGVjdGVkPXshZmlsdGVyZWR9IG9uQ2xpY2s9eygpID0+IG9uQ2hhbmdlRXhwb3J0RmlsdGVyZWQoZmFsc2UpfT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmlsdGVyZWQtdGl0bGVcIj5VbmZpbHRlcmVkIERhdGE8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmlsdGVyZWQtc3VidGl0bGVcIj57Z2V0RGF0YVJvd0NvdW50KGRhdGFzZXRzLCBzZWxlY3RlZERhdGFzZXQsIGZhbHNlKX08L2Rpdj5cbiAgICAgICAgICA8L1N0eWxlZEZpbHRlcmVkT3B0aW9uPlxuICAgICAgICAgIDxTdHlsZWRGaWx0ZXJlZE9wdGlvbiBzZWxlY3RlZD17ZmlsdGVyZWR9IG9uQ2xpY2s9eygpID0+IG9uQ2hhbmdlRXhwb3J0RmlsdGVyZWQodHJ1ZSl9PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmaWx0ZXJlZC10aXRsZVwiPkZpbHRlcmVkIERhdGE8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmlsdGVyZWQtc3VidGl0bGVcIj57Z2V0RGF0YVJvd0NvdW50KGRhdGFzZXRzLCBzZWxlY3RlZERhdGFzZXQsIHRydWUpfTwvZGl2PlxuICAgICAgICAgIDwvU3R5bGVkRmlsdGVyZWRPcHRpb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9TdHlsZWRFeHBvcnRTZWN0aW9uPlxuICAgIDwvZGl2PlxuICA8L1N0eWxlZE1vZGFsQ29udGVudD5cbik7XG5cbkV4cG9ydERhdGFNb2RhbC5wcm9wVHlwZXMgPSBwcm9wVHlwZXM7XG5cbmNvbnN0IEV4cG9ydERhdGFNb2RhbEZhY3RvcnkgPSAoKSA9PiBFeHBvcnREYXRhTW9kYWw7XG5leHBvcnQgZGVmYXVsdCBFeHBvcnREYXRhTW9kYWxGYWN0b3J5O1xuIl19