UNPKG

kepler.gl

Version:

kepler.gl is a webgl based application to visualize large scale location data in the browser

196 lines (173 loc) 20.2 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.DatasetTag = undefined; var _taggedTemplateLiteral2 = require('babel-runtime/helpers/taggedTemplateLiteral'); var _taggedTemplateLiteral3 = _interopRequireDefault(_taggedTemplateLiteral2); var _templateObject = (0, _taggedTemplateLiteral3.default)(['\n transition: ', ';\n'], ['\n transition: ', ';\n']), _templateObject2 = (0, _taggedTemplateLiteral3.default)(['\n color: ', ';\n display: flex;\n align-items: flex-start;\n\n .source-data-arrow {\n height: 16px;\n }\n :hover {\n color: ', ';\n cursor: ', ';\n\n .dataset-action {\n color: ', ';\n opacity: 1;\n }\n\n .dataset-action:hover {\n color: white;\n }\n }\n'], ['\n color: ', ';\n display: flex;\n align-items: flex-start;\n\n .source-data-arrow {\n height: 16px;\n }\n :hover {\n color: ', ';\n cursor: ', ';\n\n .dataset-action {\n color: ', ';\n opacity: 1;\n }\n\n .dataset-action:hover {\n color: white;\n }\n }\n']), _templateObject3 = (0, _taggedTemplateLiteral3.default)(['\n display: flex;\n color: ', ';\n font-size: 11px;\n letter-spacing: 0.2px;\n overflow: auto;\n\n .dataset-color {\n flex-shrink: 0;\n margin-top: 5px;\n }\n\n .dataset-name {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n'], ['\n display: flex;\n color: ', ';\n font-size: 11px;\n letter-spacing: 0.2px;\n overflow: auto;\n\n .dataset-color {\n flex-shrink: 0;\n margin-top: 5px;\n }\n\n .dataset-name {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n']), _templateObject4 = (0, _taggedTemplateLiteral3.default)(['\n margin-left: 12px;\n height: 16px;\n opacity: 0;\n'], ['\n margin-left: 12px;\n height: 16px;\n opacity: 0;\n']), _templateObject5 = (0, _taggedTemplateLiteral3.default)(['\n font-size: 11px;\n color: ', ';\n padding-left: 19px;\n'], ['\n font-size: 11px;\n color: ', ';\n padding-left: 19px;\n']); // Copyright (c) 2018 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 _react = require('react'); var _react2 = _interopRequireDefault(_react); var _styledComponents = require('styled-components'); var _styledComponents2 = _interopRequireDefault(_styledComponents); var _d3Format = require('d3-format'); var _styledComponents3 = require('../common/styled-components'); var _icons = require('../common/icons'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var defaultRemoveDataset = function defaultRemoveDataset(datasetKey) {}; var numFormat = (0, _d3Format.format)(','); var SourceDataCatelog = _styledComponents2.default.div(_templateObject, function (props) { return props.theme.transition; }); var DatasetTitle = _styledComponents2.default.div(_templateObject2, function (props) { return props.theme.textColor; }, function (props) { return props.clickable ? props.theme.textColorHl : props.theme.textColor; }, function (props) { return props.clickable ? 'pointer' : 'auto'; }, function (props) { return props.theme.textColorHl; }); var DatasetTagWrapper = _styledComponents2.default.div(_templateObject3, function (props) { return props.theme.textColor; }); var DataTagAction = _styledComponents2.default.div(_templateObject4); var DataRowCount = _styledComponents2.default.div(_templateObject5, function (props) { return props.theme.subtextColor; }); var DatasetTag = exports.DatasetTag = function DatasetTag(_ref) { var onClick = _ref.onClick, dataset = _ref.dataset; return _react2.default.createElement( DatasetTagWrapper, { className: 'source-data-tag', onClick: onClick }, _react2.default.createElement(_styledComponents3.DatasetSquare, { className: 'dataset-color', color: dataset.color }), _react2.default.createElement( 'div', { className: 'dataset-name' }, dataset.label ) ); }; var SourceDataCatalog = function SourceDataCatalog(_ref2) { var datasets = _ref2.datasets, showDatasetTable = _ref2.showDatasetTable, removeDataset = _ref2.removeDataset, _ref2$showDeleteDatas = _ref2.showDeleteDataset, showDeleteDataset = _ref2$showDeleteDatas === undefined ? false : _ref2$showDeleteDatas; return _react2.default.createElement( SourceDataCatelog, { className: 'source-data-catalog' }, Object.values(datasets).map(function (dataset, index) { return _react2.default.createElement( _styledComponents3.SidePanelSection, { key: dataset.id }, _react2.default.createElement( DatasetTitle, { className: 'source-data-title', clickable: Boolean(showDatasetTable) }, _react2.default.createElement(DatasetTag, { dataset: dataset, onClick: showDatasetTable ? function () { return showDatasetTable(dataset.id); } : null }), showDatasetTable ? _react2.default.createElement( _styledComponents3.CenterFlexbox, { className: 'source-data-arrow' }, _react2.default.createElement(_icons.ArrowRight, { height: '12px' }) ) : null, showDatasetTable ? _react2.default.createElement(ShowDataTable, { id: dataset.id, showDatasetTable: showDatasetTable }) : null, showDeleteDataset ? _react2.default.createElement(RemoveDataset, { datasetKey: dataset.id, removeDataset: removeDataset }) : null ), showDatasetTable ? _react2.default.createElement( DataRowCount, { className: 'source-data-rows' }, numFormat(dataset.allData.length) + ' rows' ) : null ); }) ); }; var ShowDataTable = function ShowDataTable(_ref3) { var id = _ref3.id, showDatasetTable = _ref3.showDatasetTable; return _react2.default.createElement( DataTagAction, { className: 'dataset-action show-data-table', 'data-tip': true, 'data-for': 'data-table-' + id }, _react2.default.createElement(_icons.Table, { height: '16px', onClick: function onClick() { return showDatasetTable(id); } }), _react2.default.createElement( _styledComponents3.Tooltip, { id: 'data-table-' + id, effect: 'solid' }, _react2.default.createElement( 'span', null, 'Show data table' ) ) ); }; var RemoveDataset = function RemoveDataset(_ref4) { var datasetKey = _ref4.datasetKey, _ref4$removeDataset = _ref4.removeDataset, removeDataset = _ref4$removeDataset === undefined ? defaultRemoveDataset : _ref4$removeDataset; return _react2.default.createElement( DataTagAction, { className: 'dataset-action remove-dataset', 'data-tip': true, 'data-for': 'delete-' + datasetKey }, _react2.default.createElement(_icons.Trash, { height: '16px', onClick: function onClick(e) { e.stopPropagation(); removeDataset(datasetKey); } }), _react2.default.createElement( _styledComponents3.Tooltip, { id: 'delete-' + datasetKey, effect: 'solid', type: 'error' }, _react2.default.createElement( 'span', null, 'Remove dataset' ) ) ); }; exports.default = SourceDataCatalog; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NpZGUtcGFuZWwvc291cmNlLWRhdGEtY2F0YWxvZy5qcyJdLCJuYW1lcyI6WyJkZWZhdWx0UmVtb3ZlRGF0YXNldCIsIm51bUZvcm1hdCIsIlNvdXJjZURhdGFDYXRlbG9nIiwic3R5bGVkIiwiZGl2IiwicHJvcHMiLCJ0aGVtZSIsInRyYW5zaXRpb24iLCJEYXRhc2V0VGl0bGUiLCJ0ZXh0Q29sb3IiLCJjbGlja2FibGUiLCJ0ZXh0Q29sb3JIbCIsIkRhdGFzZXRUYWdXcmFwcGVyIiwiRGF0YVRhZ0FjdGlvbiIsIkRhdGFSb3dDb3VudCIsInN1YnRleHRDb2xvciIsIkRhdGFzZXRUYWciLCJvbkNsaWNrIiwiZGF0YXNldCIsImNvbG9yIiwibGFiZWwiLCJTb3VyY2VEYXRhQ2F0YWxvZyIsImRhdGFzZXRzIiwic2hvd0RhdGFzZXRUYWJsZSIsInJlbW92ZURhdGFzZXQiLCJzaG93RGVsZXRlRGF0YXNldCIsIk9iamVjdCIsInZhbHVlcyIsIm1hcCIsImluZGV4IiwiaWQiLCJCb29sZWFuIiwiYWxsRGF0YSIsImxlbmd0aCIsIlNob3dEYXRhVGFibGUiLCJSZW1vdmVEYXRhc2V0IiwiZGF0YXNldEtleSIsImUiLCJzdG9wUHJvcGFnYXRpb24iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OzttTUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7OztBQUNBOzs7O0FBQ0E7O0FBRUE7O0FBQ0E7Ozs7QUFFQSxJQUFNQSx1QkFBdUIsU0FBdkJBLG9CQUF1QixhQUFjLENBQUUsQ0FBN0M7QUFDQSxJQUFNQyxZQUFZLHNCQUFPLEdBQVAsQ0FBbEI7O0FBRUEsSUFBTUMsb0JBQW9CQywyQkFBT0MsR0FBM0Isa0JBQ1U7QUFBQSxTQUFTQyxNQUFNQyxLQUFOLENBQVlDLFVBQXJCO0FBQUEs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LEVBQUY7QUFBQSxNQUFNUCxnQkFBTixTQUFNQSxnQkFBTjtBQUFBLFNBQ3BCO0FBQUMsaUJBQUQ7QUFBQTtBQUNFLGlCQUFVLGdDQURaO0FBRUUsc0JBRkY7QUFHRSxrQ0FBd0JPO0FBSDFCO0FBS0Usa0NBQUMsWUFBRCxJQUFPLFFBQU8sTUFBZCxFQUFxQixTQUFTO0FBQUEsZUFBTVAsaUJBQWlCTyxFQUFqQixDQUFOO0FBQUEsT0FBOUIsR0FMRjtBQU1FO0FBQUMsZ0NBQUQ7QUFBQSxRQUFTLG9CQUFrQkEsRUFBM0IsRUFBaUMsUUFBTyxPQUF4QztBQUNFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFERjtBQU5GLEdBRG9CO0FBQUEsQ0FBdEI7O0FBYUEsSUFBTUssZ0JBQWdCLFNBQWhCQSxhQUFnQjtBQUFBLE1BQUVDLFVBQUYsU0FBRUEsVUFBRjtBQUFBLGtDQUFjWixhQUFkO0FBQUEsTUFBY0EsYUFBZCx1Q0FBOEJ4QixvQkFBOUI7QUFBQSxTQUNwQjtBQUFDLGlCQUFEO0FBQUE7QUFDRSxpQkFBVSwrQkFEWjtBQUVFLHNCQUZGO0FBR0UsOEJBQW9Cb0M7QUFIdEI7QUFLRSxrQ0FBQyxZQUFEO0FBQ0UsY0FBTyxNQURUO0FBRUUsZUFBUyxvQkFBSztBQUNaQyxVQUFFQyxlQUFGO0FBQ0FkLHNCQUFjWSxVQUFkO0FBQ0Q7QUFMSCxNQUxGO0FBWUU7QUFBQyxnQ0FBRDtBQUFBLFFBQVMsZ0JBQWNBLFVBQXZCLEVBQXFDLFFBQU8sT0FBNUMsRUFBb0QsTUFBSyxPQUF6RDtBQUNFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFERjtBQVpGLEdBRG9CO0FBQUEsQ0FBdEI7O2tCQW1CZWYsaUIiLCJmaWxlIjoic291cmNlLWRhdGEtY2F0YWxvZy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAxOCBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7Zm9ybWF0fSBmcm9tICdkMy1mb3JtYXQnO1xuXG5pbXBvcnQge1NpZGVQYW5lbFNlY3Rpb24sIFRvb2x0aXAsIERhdGFzZXRTcXVhcmUsIENlbnRlckZsZXhib3h9IGZyb20gJ2NvbXBvbmVudHMvY29tbW9uL3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7VGFibGUsIFRyYXNoLCBBcnJvd1JpZ2h0fSBmcm9tICdjb21wb25lbnRzL2NvbW1vbi9pY29ucyc7XG5cbmNvbnN0IGRlZmF1bHRSZW1vdmVEYXRhc2V0ID0gZGF0YXNldEtleSA9PiB7fTtcbmNvbnN0IG51bUZvcm1hdCA9IGZvcm1hdCgnLCcpO1xuXG5jb25zdCBTb3VyY2VEYXRhQ2F0ZWxvZyA9IHN0eWxlZC5kaXZgXG4gIHRyYW5zaXRpb246ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUudHJhbnNpdGlvbn07XG5gO1xuXG5jb25zdCBEYXRhc2V0VGl0bGUgPSBzdHlsZWQuZGl2YFxuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS50ZXh0Q29sb3J9O1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcblxuICAuc291cmNlLWRhdGEtYXJyb3cge1xuICAgIGhlaWdodDogMTZweDtcbiAgfVxuICA6aG92ZXIge1xuICAgIGNvbG9yOiAke3Byb3BzID0+XG4gICAgICBwcm9wcy5jbGlja2FibGUgPyBwcm9wcy50aGVtZS50ZXh0Q29sb3JIbCA6IHByb3BzLnRoZW1lLnRleHRDb2xvcn07XG4gICAgY3Vyc29yOiAke3Byb3BzID0+IChwcm9wcy5jbGlja2FibGUgPyAncG9pbnRlcicgOiAnYXV0bycpfTtcblxuICAgIC5kYXRhc2V0LWFjdGlvbiB7XG4gICAgICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS50ZXh0Q29sb3JIbH07XG4gICAgICBvcGFjaXR5OiAxO1xuICAgIH1cblxuICAgIC5kYXRhc2V0LWFjdGlvbjpob3ZlciB7XG4gICAgICBjb2xvcjogd2hpdGU7XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBEYXRhc2V0VGFnV3JhcHBlciA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnRleHRDb2xvcn07XG4gIGZvbnQtc2l6ZTogMTFweDtcbiAgbGV0dGVyLXNwYWNpbmc6IDAuMnB4O1xuICBvdmVyZmxvdzogYXV0bztcblxuICAuZGF0YXNldC1jb2xvciB7XG4gICAgZmxleC1zaHJpbms6IDA7XG4gICAgbWFyZ2luLXRvcDogNXB4O1xuICB9XG5cbiAgLmRhdGFzZXQtbmFtZSB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICB9XG5gO1xuXG5jb25zdCBEYXRhVGFnQWN0aW9uID0gc3R5bGVkLmRpdmBcbiAgbWFyZ2luLWxlZnQ6IDEycHg7XG4gIGhlaWdodDogMTZweDtcbiAgb3BhY2l0eTogMDtcbmA7XG5cbmNvbnN0IERhdGFSb3dDb3VudCA9IHN0eWxlZC5kaXZgXG4gIGZvbnQtc2l6ZTogMTFweDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3VidGV4dENvbG9yfTtcbiAgcGFkZGluZy1sZWZ0OiAxOXB4O1xuYDtcblxuZXhwb3J0IGNvbnN0IERhdGFzZXRUYWcgPSAoe29uQ2xpY2ssIGRhdGFzZXR9KSA9PiAoXG4gIDxEYXRhc2V0VGFnV3JhcHBlciBjbGFzc05hbWU9XCJzb3VyY2UtZGF0YS10YWdcIiBvbkNsaWNrPXtvbkNsaWNrfT5cbiAgICA8RGF0YXNldFNxdWFyZSBjbGFzc05hbWU9XCJkYXRhc2V0LWNvbG9yXCIgY29sb3I9e2RhdGFzZXQuY29sb3J9IC8+XG4gICAgPGRpdiBjbGFzc05hbWU9XCJkYXRhc2V0LW5hbWVcIj57ZGF0YXNldC5sYWJlbH08L2Rpdj5cbiAgPC9EYXRhc2V0VGFnV3JhcHBlcj5cbik7XG5cbmNvbnN0IFNvdXJjZURhdGFDYXRhbG9nID0gKHtcbiAgZGF0YXNldHMsXG4gIHNob3dEYXRhc2V0VGFibGUsXG4gIHJlbW92ZURhdGFzZXQsXG4gIHNob3dEZWxldGVEYXRhc2V0ID0gZmFsc2Vcbn0pID0+IChcbiAgPFNvdXJjZURhdGFDYXRlbG9nIGNsYXNzTmFtZT1cInNvdXJjZS1kYXRhLWNhdGFsb2dcIj5cbiAgICB7T2JqZWN0LnZhbHVlcyhkYXRhc2V0cykubWFwKChkYXRhc2V0LCBpbmRleCkgPT4gKFxuICAgICAgPFNpZGVQYW5lbFNlY3Rpb24ga2V5PXtkYXRhc2V0LmlkfT5cbiAgICAgICAgPERhdGFzZXRUaXRsZSBjbGFzc05hbWU9XCJzb3VyY2UtZGF0YS10aXRsZVwiIGNsaWNrYWJsZT17Qm9vbGVhbihzaG93RGF0YXNldFRhYmxlKX0+XG4gICAgICAgICAgPERhdGFzZXRUYWdcbiAgICAgICAgICAgIGRhdGFzZXQ9e2RhdGFzZXR9XG4gICAgICAgICAgICBvbkNsaWNrPXtcbiAgICAgICAgICAgICAgc2hvd0RhdGFzZXRUYWJsZSA/ICgpID0+IHNob3dEYXRhc2V0VGFibGUoZGF0YXNldC5pZCkgOiBudWxsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7c2hvd0RhdGFzZXRUYWJsZSA/XG4gICAgICAgICAgICA8Q2VudGVyRmxleGJveCBjbGFzc05hbWU9XCJzb3VyY2UtZGF0YS1hcnJvd1wiPlxuICAgICAgICAgICAgICA8QXJyb3dSaWdodCBoZWlnaHQ9XCIxMnB4XCIgLz5cbiAgICAgICAgICAgIDwvQ2VudGVyRmxleGJveD4gOiBudWxsfVxuICAgICAgICAgIHtzaG93RGF0YXNldFRhYmxlID8gKFxuICAgICAgICAgICAgPFNob3dEYXRhVGFibGVcbiAgICAgICAgICAgICAgaWQ9e2RhdGFzZXQuaWR9XG4gICAgICAgICAgICAgIHNob3dEYXRhc2V0VGFibGU9e3Nob3dEYXRhc2V0VGFibGV9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIHtzaG93RGVsZXRlRGF0YXNldCA/IChcbiAgICAgICAgICAgIDxSZW1vdmVEYXRhc2V0XG4gICAgICAgICAgICAgIGRhdGFzZXRLZXk9e2RhdGFzZXQuaWR9XG4gICAgICAgICAgICAgIHJlbW92ZURhdGFzZXQ9e3JlbW92ZURhdGFzZXR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICA8L0RhdGFzZXRUaXRsZT5cbiAgICAgICAge3Nob3dEYXRhc2V0VGFibGUgPyAoXG4gICAgICAgICAgPERhdGFSb3dDb3VudCBjbGFzc05hbWU9XCJzb3VyY2UtZGF0YS1yb3dzXCI+e2Ake251bUZvcm1hdChcbiAgICAgICAgICAgIGRhdGFzZXQuYWxsRGF0YS5sZW5ndGhcbiAgICAgICAgICApfSByb3dzYH08L0RhdGFSb3dDb3VudD5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICA8L1NpZGVQYW5lbFNlY3Rpb24+XG4gICAgKSl9XG4gIDwvU291cmNlRGF0YUNhdGVsb2c+XG4pO1xuXG5jb25zdCBTaG93RGF0YVRhYmxlID0gKHtpZCwgc2hvd0RhdGFzZXRUYWJsZX0pID0+IChcbiAgPERhdGFUYWdBY3Rpb25cbiAgICBjbGFzc05hbWU9XCJkYXRhc2V0LWFjdGlvbiBzaG93LWRhdGEtdGFibGVcIlxuICAgIGRhdGEtdGlwXG4gICAgZGF0YS1mb3I9e2BkYXRhLXRhYmxlLSR7aWR9YH1cbiAgPlxuICAgIDxUYWJsZSBoZWlnaHQ9XCIxNnB4XCIgb25DbGljaz17KCkgPT4gc2hvd0RhdGFzZXRUYWJsZShpZCl9IC8+XG4gICAgPFRvb2x0aXAgaWQ9e2BkYXRhLXRhYmxlLSR7aWR9YH0gZWZmZWN0PVwic29saWRcIj5cbiAgICAgIDxzcGFuPlNob3cgZGF0YSB0YWJsZTwvc3Bhbj5cbiAgICA8L1Rvb2x0aXA+XG4gIDwvRGF0YVRhZ0FjdGlvbj5cbik7XG5cbmNvbnN0IFJlbW92ZURhdGFzZXQgPSAoe2RhdGFzZXRLZXksIHJlbW92ZURhdGFzZXQgPSBkZWZhdWx0UmVtb3ZlRGF0YXNldH0pID0+IChcbiAgPERhdGFUYWdBY3Rpb25cbiAgICBjbGFzc05hbWU9XCJkYXRhc2V0LWFjdGlvbiByZW1vdmUtZGF0YXNldFwiXG4gICAgZGF0YS10aXBcbiAgICBkYXRhLWZvcj17YGRlbGV0ZS0ke2RhdGFzZXRLZXl9YH1cbiAgPlxuICAgIDxUcmFzaFxuICAgICAgaGVpZ2h0PVwiMTZweFwiXG4gICAgICBvbkNsaWNrPXtlID0+IHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgcmVtb3ZlRGF0YXNldChkYXRhc2V0S2V5KTtcbiAgICAgIH19XG4gICAgLz5cbiAgICA8VG9vbHRpcCBpZD17YGRlbGV0ZS0ke2RhdGFzZXRLZXl9YH0gZWZmZWN0PVwic29saWRcIiB0eXBlPVwiZXJyb3JcIj5cbiAgICAgIDxzcGFuPlJlbW92ZSBkYXRhc2V0PC9zcGFuPlxuICAgIDwvVG9vbHRpcD5cbiAgPC9EYXRhVGFnQWN0aW9uPlxuKTtcblxuZXhwb3J0IGRlZmF1bHQgU291cmNlRGF0YUNhdGFsb2c7XG4iXX0=