UNPKG

kepler.gl.geoiq

Version:

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

104 lines (88 loc) 16.4 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = BottomWidgetFactory; var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral")); var _react = _interopRequireDefault(require("react")); var _styledComponents = _interopRequireDefault(require("styled-components")); var _propTypes = _interopRequireDefault(require("prop-types")); var _timeWidget = _interopRequireDefault(require("./filters/time-widget")); var _animationControl = _interopRequireDefault(require("./common/animation-control/animation-control")); var _filterUtils = require("../utils/filter-utils"); var _templateObject; var propTypes = { filters: _propTypes["default"].arrayOf(_propTypes["default"].object), datasets: _propTypes["default"].object, uiState: _propTypes["default"].object, layers: _propTypes["default"].arrayOf(_propTypes["default"].object), animationConfig: _propTypes["default"].object, visStateActions: _propTypes["default"].object, sidePanelWidth: _propTypes["default"].number, containerW: _propTypes["default"].number }; var maxWidth = 1080; BottomWidgetFactory.deps = [_timeWidget["default"], _animationControl["default"]]; var BottomWidgetContainer = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n position: absolute;\n display: flex;\n flex-direction: column;\n padding-top: ", "px;\n padding-right: ", "px;\n padding-bottom: ", "px;\n padding-left: ", "px;\n width: ", "px;\n bottom: 0;\n right: 150px;\n z-index: 1;\n"])), function (props) { return props.theme.sidePanel.margin.top; }, function (props) { return props.theme.sidePanel.margin.right; }, function (props) { return props.theme.sidePanel.margin.bottom; }, function (props) { return props.theme.sidePanel.margin.left; }, function (props) { return props.width; }); function BottomWidgetFactory(TimeWidget, AnimationControl) { var BottomWidget = function BottomWidget(props) { var datasets = props.datasets, filters = props.filters, animationConfig = props.animationConfig, visStateActions = props.visStateActions, containerW = props.containerW, uiState = props.uiState, sidePanelWidth = props.sidePanelWidth, layers = props.layers; var activeSidePanel = uiState.activeSidePanel, readOnly = uiState.readOnly; var isOpen = Boolean(activeSidePanel); var enlargedFilterIdx = filters.findIndex(function (f) { return f.enlarged && f.type === _filterUtils.FILTER_TYPES.timeRange; }); var isAnyFilterAnimating = filters.some(function (f) { return f.isAnimating; }); var enlargedFilterWidth = isOpen ? containerW - sidePanelWidth : containerW; // show playback control if layers contain trip layer & at least one trip layer is visible var animatedLayer = layers.filter(function (l) { return l.config.animation && l.config.animation.enabled && l.config.isVisible; }); var readToAnimation = Array.isArray(animationConfig.domain) && animationConfig.currentTime; // if animation control is showing, hide time display in time slider var showFloatingTimeDisplay = !animatedLayer.length; return (/*#__PURE__*/_react["default"].createElement(BottomWidgetContainer, { width: Math.min(maxWidth, enlargedFilterWidth), className: "bottom-widget--container" }, animatedLayer.length && readToAnimation ? /*#__PURE__*/_react["default"].createElement(AnimationControl, { animationConfig: animationConfig, updateAnimationTime: visStateActions.updateAnimationTime, updateAnimationSpeed: visStateActions.updateLayerAnimationSpeed }) : null, enlargedFilterIdx > -1 ? /*#__PURE__*/_react["default"].createElement(TimeWidget, { filter: filters[enlargedFilterIdx], index: enlargedFilterIdx, isAnyFilterAnimating: isAnyFilterAnimating, datasets: datasets, readOnly: readOnly, showTimeDisplay: showFloatingTimeDisplay, setFilterPlot: visStateActions.setFilterPlot, setFilter: visStateActions.setFilter, toggleAnimation: visStateActions.toggleFilterAnimation, updateAnimationSpeed: visStateActions.updateFilterAnimationSpeed, enlargeFilter: visStateActions.enlargeFilter }) : null) ); }; BottomWidget.propTypes = propTypes; return BottomWidget; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL2JvdHRvbS13aWRnZXQuanMiXSwibmFtZXMiOlsicHJvcFR5cGVzIiwiZmlsdGVycyIsIlByb3BUeXBlcyIsImFycmF5T2YiLCJvYmplY3QiLCJkYXRhc2V0cyIsInVpU3RhdGUiLCJsYXllcnMiLCJhbmltYXRpb25Db25maWciLCJ2aXNTdGF0ZUFjdGlvbnMiLCJzaWRlUGFuZWxXaWR0aCIsIm51bWJlciIsImNvbnRhaW5lclciLCJtYXhXaWR0aCIsIkJvdHRvbVdpZGdldEZhY3RvcnkiLCJkZXBzIiwiVGltZVdpZGdldEZhY3RvcnkiLCJBbmltYXRpb25Db250cm9sRmFjdG9yeSIsIkJvdHRvbVdpZGdldENvbnRhaW5lciIsInN0eWxlZCIsImRpdiIsInByb3BzIiwidGhlbWUiLCJzaWRlUGFuZWwiLCJtYXJnaW4iLCJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImxlZnQiLCJ3aWR0aCIsIlRpbWVXaWRnZXQiLCJBbmltYXRpb25Db250cm9sIiwiQm90dG9tV2lkZ2V0IiwiYWN0aXZlU2lkZVBhbmVsIiwicmVhZE9ubHkiLCJpc09wZW4iLCJCb29sZWFuIiwiZW5sYXJnZWRGaWx0ZXJJZHgiLCJmaW5kSW5kZXgiLCJmIiwiZW5sYXJnZWQiLCJ0eXBlIiwiRklMVEVSX1RZUEVTIiwidGltZVJhbmdlIiwiaXNBbnlGaWx0ZXJBbmltYXRpbmciLCJzb21lIiwiaXNBbmltYXRpbmciLCJlbmxhcmdlZEZpbHRlcldpZHRoIiwiYW5pbWF0ZWRMYXllciIsImZpbHRlciIsImwiLCJjb25maWciLCJhbmltYXRpb24iLCJlbmFibGVkIiwiaXNWaXNpYmxlIiwicmVhZFRvQW5pbWF0aW9uIiwiQXJyYXkiLCJpc0FycmF5IiwiZG9tYWluIiwiY3VycmVudFRpbWUiLCJzaG93RmxvYXRpbmdUaW1lRGlzcGxheSIsImxlbmd0aCIsIk1hdGgiLCJtaW4iLCJ1cGRhdGVBbmltYXRpb25UaW1lIiwidXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZCIsInNldEZpbHRlclBsb3QiLCJzZXRGaWx0ZXIiLCJ0b2dnbGVGaWx0ZXJBbmltYXRpb24iLCJ1cGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZCIsImVubGFyZ2VGaWx0ZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBb0JBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBRUEsSUFBTUEsU0FBUyxHQUFHO0FBQ2hCQyxFQUFBQSxPQUFPLEVBQUVDLHNCQUFVQyxPQUFWLENBQWtCRCxzQkFBVUUsTUFBNUIsQ0FETztBQUVoQkMsRUFBQUEsUUFBUSxFQUFFSCxzQkFBVUUsTUFGSjtBQUdoQkUsRUFBQUEsT0FBTyxFQUFFSixzQkFBVUUsTUFISDtBQUloQkcsRUFBQUEsTUFBTSxFQUFFTCxzQkFBVUMsT0FBVixDQUFrQkQsc0JBQVVFLE1BQTVCLENBSlE7QUFLaEJJLEVBQUFBLGVBQWUsRUFBRU4sc0JBQVVFLE1BTFg7QUFNaEJLLEVBQUFBLGVBQWUsRUFBRVAsc0JBQVVFLE1BTlg7QUFPaEJNLEVBQUFBLGNBQWMsRUFBRVIsc0JBQVVTLE1BUFY7QUFRaEJDLEVBQUFBLFVBQVUsRUFBRVYsc0JBQVVTO0FBUk4sQ0FBbEI7QUFXQSxJQUFNRSxRQUFRLEdBQUcsSUFBakI7QUFFQUMsbUJBQW1CLENBQUNDLElBQXBCLEdBQTJCLENBQUNDLHNCQUFELEVBQW9CQyw0QkFBcEIsQ0FBM0I7O0FBRUEsSUFBTUMscUJBQXFCLEdBQUdDLDZCQUFPQyxHQUFWLG1VQUlWLFVBQUFDLEtBQUs7QUFBQSxTQUFJQSxLQUFLLENBQUNDLEtBQU4sQ0FBWUMsU0FBWixDQUFzQkMsTUFBdEIsQ0FBNkJDLEdBQWpDO0FBQUEsQ0FKSyxFQUtSLFVBQUFKLEtBQUs7QUFBQSxTQUFJQSxLQUFLLENBQUNDLEtBQU4sQ0FBWUMsU0FBWixDQUFzQkMsTUFBdEIsQ0FBNkJFLEtBQWpDO0FBQUEsQ0FMRyxFQU1QLFVBQUFMLEtBQUs7QUFBQSxTQUFJQSxLQUFLLENBQUNDLEtBQU4sQ0FBWUMsU0FBWixDQUFzQkMsTUFB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RUEsaUJBRlQ7QUFHRSxRQUFBLG9CQUFvQixFQUFFTyxvQkFIeEI7QUFJRSxRQUFBLFFBQVEsRUFBRXZDLFFBSlo7QUFLRSxRQUFBLFFBQVEsRUFBRTZCLFFBTFo7QUFNRSxRQUFBLGVBQWUsRUFBRTBCLHVCQU5uQjtBQU9FLFFBQUEsYUFBYSxFQUFFbkQsZUFBZSxDQUFDeUQsYUFQakM7QUFRRSxRQUFBLFNBQVMsRUFBRXpELGVBQWUsQ0FBQzBELFNBUjdCO0FBU0UsUUFBQSxlQUFlLEVBQUUxRCxlQUFlLENBQUMyRCxxQkFUbkM7QUFVRSxRQUFBLG9CQUFvQixFQUFFM0QsZUFBZSxDQUFDNEQsMEJBVnhDO0FBV0UsUUFBQSxhQUFhLEVBQUU1RCxlQUFlLENBQUM2RDtBQVhqQyxRQURELEdBY0csSUF6Qk47QUFERjtBQTZCRCxHQTlERDs7QUFnRUF0QyxFQUFBQSxZQUFZLENBQUNoQyxTQUFiLEdBQXlCQSxTQUF6QjtBQUVBLFNBQU9nQyxZQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMjMgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFRpbWVXaWRnZXRGYWN0b3J5IGZyb20gJy4vZmlsdGVycy90aW1lLXdpZGdldCc7XG5pbXBvcnQgQW5pbWF0aW9uQ29udHJvbEZhY3RvcnkgZnJvbSAnLi9jb21tb24vYW5pbWF0aW9uLWNvbnRyb2wvYW5pbWF0aW9uLWNvbnRyb2wnO1xuaW1wb3J0IHtGSUxURVJfVFlQRVN9IGZyb20gJ3V0aWxzL2ZpbHRlci11dGlscyc7XG5cbmNvbnN0IHByb3BUeXBlcyA9IHtcbiAgZmlsdGVyczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9iamVjdCksXG4gIGRhdGFzZXRzOiBQcm9wVHlwZXMub2JqZWN0LFxuICB1aVN0YXRlOiBQcm9wVHlwZXMub2JqZWN0LFxuICBsYXllcnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vYmplY3QpLFxuICBhbmltYXRpb25Db25maWc6IFByb3BUeXBlcy5vYmplY3QsXG4gIHZpc1N0YXRlQWN0aW9uczogUHJvcFR5cGVzLm9iamVjdCxcbiAgc2lkZVBhbmVsV2lkdGg6IFByb3BUeXBlcy5udW1iZXIsXG4gIGNvbnRhaW5lclc6IFByb3BUeXBlcy5udW1iZXJcbn07XG5cbmNvbnN0IG1heFdpZHRoID0gMTA4MDtcblxuQm90dG9tV2lkZ2V0RmFjdG9yeS5kZXBzID0gW1RpbWVXaWRnZXRGYWN0b3J5LCBBbmltYXRpb25Db250cm9sRmFjdG9yeV07XG5cbmNvbnN0IEJvdHRvbVdpZGdldENvbnRhaW5lciA9IHN0eWxlZC5kaXZgXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgcGFkZGluZy10b3A6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc2lkZVBhbmVsLm1hcmdpbi50b3B9cHg7XG4gIHBhZGRpbmctcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc2lkZVBhbmVsLm1hcmdpbi5yaWdodH1weDtcbiAgcGFkZGluZy1ib3R0b206ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc2lkZVBhbmVsLm1hcmdpbi5ib3R0b219cHg7XG4gIHBhZGRpbmctbGVmdDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zaWRlUGFuZWwubWFyZ2luLmxlZnR9cHg7XG4gIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLndpZHRofXB4O1xuICBib3R0b206IDA7XG4gIHJpZ2h0OiAxNTBweDtcbiAgei1pbmRleDogMTtcbmA7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJvdHRvbVdpZGdldEZhY3RvcnkoVGltZVdpZGdldCwgQW5pbWF0aW9uQ29udHJvbCkge1xuICBjb25zdCBCb3R0b21XaWRnZXQgPSBwcm9wcyA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgZGF0YXNldHMsXG4gICAgICBmaWx0ZXJzLFxuICAgICAgYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgdmlzU3RhdGVBY3Rpb25zLFxuICAgICAgY29udGFpbmVyVyxcbiAgICAgIHVpU3RhdGUsXG4gICAgICBzaWRlUGFuZWxXaWR0aCxcbiAgICAgIGxheWVyc1xuICAgIH0gPSBwcm9wcztcblxuICAgIGNvbnN0IHthY3RpdmVTaWRlUGFuZWwsIHJlYWRPbmx5fSA9IHVpU3RhdGU7XG4gICAgY29uc3QgaXNPcGVuID0gQm9vbGVhbihhY3RpdmVTaWRlUGFuZWwpO1xuXG4gICAgY29uc3QgZW5sYXJnZWRGaWx0ZXJJZHggPSBmaWx0ZXJzLmZpbmRJbmRleChcbiAgICAgIGYgPT4gZi5lbmxhcmdlZCAmJiBmLnR5cGUgPT09IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2VcbiAgICApO1xuICAgIGNvbnN0IGlzQW55RmlsdGVyQW5pbWF0aW5nID0gZmlsdGVycy5zb21lKGYgPT4gZi5pc0FuaW1hdGluZyk7XG4gICAgY29uc3QgZW5sYXJnZWRGaWx0ZXJXaWR0aCA9IGlzT3BlblxuICAgICAgPyBjb250YWluZXJXIC0gc2lkZVBhbmVsV2lkdGhcbiAgICAgIDogY29udGFpbmVyVztcblxuICAgIC8vIHNob3cgcGxheWJhY2sgY29udHJvbCBpZiBsYXllcnMgY29udGFpbiB0cmlwIGxheWVyICYgYXQgbGVhc3Qgb25lIHRyaXAgbGF5ZXIgaXMgdmlzaWJsZVxuICAgIGNvbnN0IGFuaW1hdGVkTGF5ZXIgPSBsYXllcnMuZmlsdGVyKFxuICAgICAgbCA9PlxuICAgICAgICBsLmNvbmZpZy5hbmltYXRpb24gJiYgbC5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQgJiYgbC5jb25maWcuaXNWaXNpYmxlXG4gICAgKTtcblxuICAgIGNvbnN0IHJlYWRUb0FuaW1hdGlvbiA9XG4gICAgICBBcnJheS5pc0FycmF5KGFuaW1hdGlvbkNvbmZpZy5kb21haW4pICYmIGFuaW1hdGlvbkNvbmZpZy5jdXJyZW50VGltZTtcbiAgICAvLyBpZiBhbmltYXRpb24gY29udHJvbCBpcyBzaG93aW5nLCBoaWRlIHRpbWUgZGlzcGxheSBpbiB0aW1lIHNsaWRlclxuICAgIGNvbnN0IHNob3dGbG9hdGluZ1RpbWVEaXNwbGF5ID0gIWFuaW1hdGVkTGF5ZXIubGVuZ3RoO1xuICAgIHJldHVybiAoXG4gICAgICA8Qm90dG9tV2lkZ2V0Q29udGFpbmVyXG4gICAgICAgIHdpZHRoPXtNYXRoLm1pbihtYXhXaWR0aCwgZW5sYXJnZWRGaWx0ZXJXaWR0aCl9XG4gICAgICAgIGNsYXNzTmFtZT1cImJvdHRvbS13aWRnZXQtLWNvbnRhaW5lclwiXG4gICAgICA+XG4gICAgICAgIHthbmltYXRlZExheWVyLmxlbmd0aCAmJiByZWFkVG9BbmltYXRpb24gPyAoXG4gICAgICAgICAgPEFuaW1hdGlvbkNvbnRyb2xcbiAgICAgICAgICAgIGFuaW1hdGlvbkNvbmZpZz17YW5pbWF0aW9uQ29uZmlnfVxuICAgICAgICAgICAgdXBkYXRlQW5pbWF0aW9uVGltZT17dmlzU3RhdGVBY3Rpb25zLnVwZGF0ZUFuaW1hdGlvblRpbWV9XG4gICAgICAgICAgICB1cGRhdGVBbmltYXRpb25TcGVlZD17dmlzU3RhdGVBY3Rpb25zLnVwZGF0ZUxheWVyQW5pbWF0aW9uU3BlZWR9XG4gICAgICAgICAgLz5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIHtlbmxhcmdlZEZpbHRlcklkeCA+IC0xID8gKFxuICAgICAgICAgIDxUaW1lV2lkZ2V0XG4gICAgICAgICAgICBmaWx0ZXI9e2ZpbHRlcnNbZW5sYXJnZWRGaWx0ZXJJZHhdfVxuICAgICAgICAgICAgaW5kZXg9e2VubGFyZ2VkRmlsdGVySWR4fVxuICAgICAgICAgICAgaXNBbnlGaWx0ZXJBbmltYXRpbmc9e2lzQW55RmlsdGVyQW5pbWF0aW5nfVxuICAgICAgICAgICAgZGF0YXNldHM9e2RhdGFzZXRzfVxuICAgICAgICAgICAgcmVhZE9ubHk9e3JlYWRPbmx5fVxuICAgICAgICAgICAgc2hvd1RpbWVEaXNwbGF5PXtzaG93RmxvYXRpbmdUaW1lRGlzcGxheX1cbiAgICAgICAgICAgIHNldEZpbHRlclBsb3Q9e3Zpc1N0YXRlQWN0aW9ucy5zZXRGaWx0ZXJQbG90fVxuICAgICAgICAgICAgc2V0RmlsdGVyPXt2aXNTdGF0ZUFjdGlvbnMuc2V0RmlsdGVyfVxuICAgICAgICAgICAgdG9nZ2xlQW5pbWF0aW9uPXt2aXNTdGF0ZUFjdGlvbnMudG9nZ2xlRmlsdGVyQW5pbWF0aW9ufVxuICAgICAgICAgICAgdXBkYXRlQW5pbWF0aW9uU3BlZWQ9e3Zpc1N0YXRlQWN0aW9ucy51cGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZH1cbiAgICAgICAgICAgIGVubGFyZ2VGaWx0ZXI9e3Zpc1N0YXRlQWN0aW9ucy5lbmxhcmdlRmlsdGVyfVxuICAgICAgICAgIC8+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgPC9Cb3R0b21XaWRnZXRDb250YWluZXI+XG4gICAgKTtcbiAgfTtcblxuICBCb3R0b21XaWRnZXQucHJvcFR5cGVzID0gcHJvcFR5cGVzO1xuXG4gIHJldHVybiBCb3R0b21XaWRnZXQ7XG59XG4iXX0=