UNPKG

kepler.gl.geoiq

Version:

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

202 lines (156 loc) 19.9 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf3 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral")); var _react = _interopRequireWildcard(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _styledComponents = _interopRequireDefault(require("styled-components")); var _colorUtils = require("../../../utils/color-utils"); var _singleColorPalette = _interopRequireDefault(require("../layer-panel/single-color-palette")); var _colorRangeSelector = _interopRequireDefault(require("../layer-panel/color-range-selector")); var _colorPalette = _interopRequireDefault(require("../layer-panel/color-palette")); var _styledComponents2 = require("../../common/styled-components"); var _reactOnclickoutside = _interopRequireDefault(require("react-onclickoutside")); function _templateObject3() { var data = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n justify-content: space-between;\n\n .color-select__input-group {\n flex-grow: 1;\n }\n .color-select__input-group:nth-child(2) {\n margin-left: 12px;\n }\n"]); _templateObject3 = function _templateObject3() { return data; }; return data; } function _templateObject2() { var data = (0, _taggedTemplateLiteral2["default"])(["\n ", ";\n height: ", ";\n\n .color-selector__selector__label {\n text-transform: capitalize;\n font-size: 12px;\n text-align: center;\n color: ", ";\n }\n"]); _templateObject2 = function _templateObject2() { return data; }; return data; } function _templateObject() { var data = (0, _taggedTemplateLiteral2["default"])(["\n width: 32px;\n height: 18px;\n border-radius: 1px;\n background-color: ", ";\n"]); _templateObject = function _templateObject() { return data; }; return data; } var ColorBlock = _styledComponents["default"].div(_templateObject(), function (props) { return "rgb(".concat(props.color.slice(0, 3).join(','), ")"); }); var ColorSelectorInput = _styledComponents["default"].div(_templateObject2(), function (props) { return props.inputTheme === 'secondary' ? props.theme.secondaryInput : props.theme.input; }, function (props) { return props.theme.inputBoxHeight; }, function (props) { return props.theme.inputPlaceholderColor; }); var InputBoxContainer = _styledComponents["default"].div(_templateObject3()); var ColorSelector = /*#__PURE__*/ function (_Component) { (0, _inherits2["default"])(ColorSelector, _Component); function ColorSelector() { var _getPrototypeOf2; var _this; (0, _classCallCheck2["default"])(this, ColorSelector); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = (0, _possibleConstructorReturn2["default"])(this, (_getPrototypeOf2 = (0, _getPrototypeOf3["default"])(ColorSelector)).call.apply(_getPrototypeOf2, [this].concat(args))); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "state", { editing: false }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleClickOutside", function (e) { if (_this.state.editing !== false) { _this.setState({ editing: false }); } }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_onSelectColor", function (color, e) { e.stopPropagation(); if (_this.props.colorSets[_this.state.editing]) { _this.props.colorSets[_this.state.editing].setColor(color); } }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_showDropdown", function (e, i) { e.stopPropagation(); e.preventDefault(); _this.setState({ editing: i }); }); return _this; } (0, _createClass2["default"])(ColorSelector, [{ key: "render", value: function render() { var _this2 = this; var _this$props = this.props, colorSets = _this$props.colorSets, disabled = _this$props.disabled, inputTheme = _this$props.inputTheme; var editing = this.state.editing; var currentEditing = colorSets[editing] && (0, _typeof2["default"])(colorSets[editing]) === 'object'; return _react["default"].createElement("div", { className: "color-selector" }, _react["default"].createElement(InputBoxContainer, null, colorSets.map(function (cSet, i) { return _react["default"].createElement("div", { className: "color-select__input-group", key: i }, _react["default"].createElement(ColorSelectorInput, { className: "color-selector__selector", active: editing === i, disabled: disabled, inputTheme: inputTheme, onMouseDown: function onMouseDown(e) { return _this2._showDropdown(e, i); } }, cSet.isRange ? _react["default"].createElement(_colorPalette["default"], { colors: cSet.selectedColor.colors }) : _react["default"].createElement(ColorBlock, { className: "color-selector__selector__block", color: cSet.selectedColor }), cSet.label ? _react["default"].createElement("div", { className: "color-selector__selector__label" }, cSet.label) : null)); })), currentEditing ? _react["default"].createElement(_styledComponents2.StyledPanelDropdown, { className: "color-selector__dropdown" }, colorSets[editing].isRange ? _react["default"].createElement(_colorRangeSelector["default"], { selectedColorRange: colorSets[editing].selectedColor, onSelectColorRange: this._onSelectColor }) : _react["default"].createElement(_singleColorPalette["default"], { selectedColor: (0, _colorUtils.rgbToHex)(colorSets[editing].selectedColor), onSelectColor: this._onSelectColor })) : null); } }]); return ColorSelector; }(_react.Component); (0, _defineProperty2["default"])(ColorSelector, "propTypes", { colorSets: _propTypes["default"].arrayOf(_propTypes["default"].shape({ selectedColor: _propTypes["default"].oneOfType([_propTypes["default"].arrayOf(_propTypes["default"].any), _propTypes["default"].object]), setColor: _propTypes["default"].func.isRequired, isRange: _propTypes["default"].bool, label: _propTypes["default"].string })), inputTheme: _propTypes["default"].string, disabled: _propTypes["default"].bool }); (0, _defineProperty2["default"])(ColorSelector, "defaultProps", { colorSets: [] }); ; var _default = (0, _reactOnclickoutside["default"])(ColorSelector); exports["default"] = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NpZGUtcGFuZWwvd2lkZ2V0LXBhbmVsL2NvbG9yLXNlbGVjdG9yLmpzIl0sIm5hbWVzIjpbIkNvbG9yQmxvY2siLCJzdHlsZWQiLCJkaXYiLCJwcm9wcyIsImNvbG9yIiwic2xpY2UiLCJqb2luIiwiQ29sb3JTZWxlY3RvcklucHV0IiwiaW5wdXRUaGVtZSIsInRoZW1lIiwic2Vjb25kYXJ5SW5wdXQiLCJpbnB1dCIsImlucHV0Qm94SGVpZ2h0IiwiaW5wdXRQbGFjZWhvbGRlckNvbG9yIiwiSW5wdXRCb3hDb250YWluZXIiLCJDb2xvclNlbGVjdG9yIiwiZWRpdGluZyIsImUiLCJzdGF0ZSIsInNldFN0YXRlIiwic3RvcFByb3BhZ2F0aW9uIiwiY29sb3JTZXRzIiwic2V0Q29sb3IiLCJpIiwicHJldmVudERlZmF1bHQiLCJkaXNhYmxlZCIsImN1cnJlbnRFZGl0aW5nIiwibWFwIiwiY1NldCIsIl9zaG93RHJvcGRvd24iLCJpc1JhbmdlIiwic2VsZWN0ZWRDb2xvciIsImNvbG9ycyIsImxhYmVsIiwiX29uU2VsZWN0Q29sb3IiLCJDb21wb25lbnQiLCJQcm9wVHlwZXMiLCJhcnJheU9mIiwic2hhcGUiLCJvbmVPZlR5cGUiLCJhbnkiLCJvYmplY3QiLCJmdW5jIiwiaXNSZXF1aXJlZCIsImJvb2wiLCJzdHJpbmciXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBb0JBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLElBQU1BLFVBQVUsR0FBR0MsNkJBQU9DLEdBQVYsb0JBSU0sVUFBQUMsS0FBSztBQUFBLHVCQUFXQSxLQUFLLENBQUNDLEtBQU4sQ0FBWUMsS0FBWixDQUFrQixDQUFsQixFQUFxQixDQUFyQixFQUF3QkMsSUFBeEIsQ0FBNkIsR0FBN0IsQ0FBWDtBQUFB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QWNrQjtBQUNwQk0sRUFBQUEsU0FBUyxFQUFFO0FBRFMsQztBQTZFdkI7O2VBRWMscUNBQWVOLGFBQWYsQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAxOSBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCBSZWFjdCwge0NvbXBvbmVudH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHtyZ2JUb0hleH0gZnJvbSAndXRpbHMvY29sb3ItdXRpbHMnO1xuaW1wb3J0IFNpbmdsZUNvbG9yUGFsZXR0ZSBmcm9tICdjb21wb25lbnRzL3NpZGUtcGFuZWwvbGF5ZXItcGFuZWwvc2luZ2xlLWNvbG9yLXBhbGV0dGUnO1xuaW1wb3J0IENvbG9yUmFuZ2VTZWxlY3RvciBmcm9tICdjb21wb25lbnRzL3NpZGUtcGFuZWwvbGF5ZXItcGFuZWwvY29sb3ItcmFuZ2Utc2VsZWN0b3InO1xuaW1wb3J0IENvbG9yUGFsZXR0ZSBmcm9tICdjb21wb25lbnRzL3NpZGUtcGFuZWwvbGF5ZXItcGFuZWwvY29sb3ItcGFsZXR0ZSc7XG5pbXBvcnQge1N0eWxlZFBhbmVsRHJvcGRvd259IGZyb20gJ2NvbXBvbmVudHMvY29tbW9uL3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCBvbkNsaWNrT3V0c2lkZSBmcm9tICdyZWFjdC1vbmNsaWNrb3V0c2lkZSc7XG5cbmNvbnN0IENvbG9yQmxvY2sgPSBzdHlsZWQuZGl2YFxuICB3aWR0aDogMzJweDtcbiAgaGVpZ2h0OiAxOHB4O1xuICBib3JkZXItcmFkaXVzOiAxcHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICR7cHJvcHMgPT4gYHJnYigke3Byb3BzLmNvbG9yLnNsaWNlKDAsIDMpLmpvaW4oJywnKX0pYH07XG5gO1xuXG5jb25zdCBDb2xvclNlbGVjdG9ySW5wdXQgPSBzdHlsZWQuZGl2YFxuICAke3Byb3BzID0+XG4gICAgcHJvcHMuaW5wdXRUaGVtZSA9PT0gJ3NlY29uZGFyeSdcbiAgICAgID8gcHJvcHMudGhlbWUuc2Vjb25kYXJ5SW5wdXRcbiAgICAgIDogcHJvcHMudGhlbWUuaW5wdXR9O1xuICBoZWlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuaW5wdXRCb3hIZWlnaHR9O1xuXG4gIC5jb2xvci1zZWxlY3Rvcl9fc2VsZWN0b3JfX2xhYmVsIHtcbiAgICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTtcbiAgICBmb250LXNpemU6IDEycHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmlucHV0UGxhY2Vob2xkZXJDb2xvcn07XG4gIH1cbmA7XG5cbmNvbnN0IElucHV0Qm94Q29udGFpbmVyID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuXG4gIC5jb2xvci1zZWxlY3RfX2lucHV0LWdyb3VwIHtcbiAgICBmbGV4LWdyb3c6IDE7XG4gIH1cbiAgLmNvbG9yLXNlbGVjdF9faW5wdXQtZ3JvdXA6bnRoLWNoaWxkKDIpIHtcbiAgICBtYXJnaW4tbGVmdDogMTJweDtcbiAgfVxuYDtcblxuY2xhc3MgQ29sb3JTZWxlY3RvciBleHRlbmRzIENvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgY29sb3JTZXRzOiBQcm9wVHlwZXMuYXJyYXlPZihcbiAgICAgIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICAgIHNlbGVjdGVkQ29sb3I6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5hbnkpLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gICAgICAgIHNldENvbG9yOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgICAgICBpc1JhbmdlOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmdcbiAgICAgIH0pXG4gICAgKSxcbiAgICBpbnB1dFRoZW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbFxuICB9O1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgY29sb3JTZXRzOiBbXVxuICB9O1xuXG4gIHN0YXRlID0ge1xuICAgIGVkaXRpbmc6IGZhbHNlXG4gIH07XG5cbiAgaGFuZGxlQ2xpY2tPdXRzaWRlID0gZSA9PiB7XG4gICAgaWYgKHRoaXMuc3RhdGUuZWRpdGluZyAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe2VkaXRpbmc6IGZhbHNlfSk7XG4gICAgfVxuICB9O1xuXG4gIF9vblNlbGVjdENvbG9yID0gKGNvbG9yLCBlKSA9PiB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAodGhpcy5wcm9wcy5jb2xvclNldHNbdGhpcy5zdGF0ZS5lZGl0aW5nXSkge1xuICAgICAgdGhpcy5wcm9wcy5jb2xvclNldHNbdGhpcy5zdGF0ZS5lZGl0aW5nXS5zZXRDb2xvcihjb2xvcik7XG4gICAgfVxuICB9O1xuXG4gIF9zaG93RHJvcGRvd24gPSAoZSwgaSkgPT4ge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuc2V0U3RhdGUoe2VkaXRpbmc6IGl9KTtcbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge2NvbG9yU2V0cywgZGlzYWJsZWQsIGlucHV0VGhlbWV9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7ZWRpdGluZ30gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IGN1cnJlbnRFZGl0aW5nID1cbiAgICAgIGNvbG9yU2V0c1tlZGl0aW5nXSAmJiB0eXBlb2YgY29sb3JTZXRzW2VkaXRpbmddID09PSAnb2JqZWN0JztcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbG9yLXNlbGVjdG9yXCI+XG4gICAgICAgIDxJbnB1dEJveENvbnRhaW5lcj5cbiAgICAgICAgICB7Y29sb3JTZXRzLm1hcCgoY1NldCwgaSkgPT4gKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2xvci1zZWxlY3RfX2lucHV0LWdyb3VwXCIga2V5PXtpfT5cblxuICAgICAgICAgICAgICA8Q29sb3JTZWxlY3RvcklucHV0XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiY29sb3Itc2VsZWN0b3JfX3NlbGVjdG9yXCJcbiAgICAgICAgICAgICAgICBhY3RpdmU9e2VkaXRpbmcgPT09IGl9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICAgICAgICAgIGlucHV0VGhlbWU9e2lucHV0VGhlbWV9XG4gICAgICAgICAgICAgICAgb25Nb3VzZURvd249e2UgPT4gdGhpcy5fc2hvd0Ryb3Bkb3duKGUsIGkpfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2NTZXQuaXNSYW5nZSA/IChcbiAgICAgICAgICAgICAgICAgIDxDb2xvclBhbGV0dGUgY29sb3JzPXtjU2V0LnNlbGVjdGVkQ29sb3IuY29sb3JzfSAvPlxuICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICA8Q29sb3JCbG9ja1xuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJjb2xvci1zZWxlY3Rvcl9fc2VsZWN0b3JfX2Jsb2NrXCJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I9e2NTZXQuc2VsZWN0ZWRDb2xvcn1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICB7Y1NldC5sYWJlbCA/IDxkaXYgY2xhc3NOYW1lPVwiY29sb3Itc2VsZWN0b3JfX3NlbGVjdG9yX19sYWJlbFwiPntjU2V0LmxhYmVsfTwvZGl2PiA6IG51bGx9XG4gICAgICAgICAgICAgIDwvQ29sb3JTZWxlY3RvcklucHV0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvSW5wdXRCb3hDb250YWluZXI+XG4gICAgICAgIHtjdXJyZW50RWRpdGluZyA/IChcbiAgICAgICAgICA8U3R5bGVkUGFuZWxEcm9wZG93biBjbGFzc05hbWU9XCJjb2xvci1zZWxlY3Rvcl9fZHJvcGRvd25cIj5cbiAgICAgICAgICAgIHtjb2xvclNldHNbZWRpdGluZ10uaXNSYW5nZSA/IChcbiAgICAgICAgICAgICAgPENvbG9yUmFuZ2VTZWxlY3RvclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ29sb3JSYW5nZT17Y29sb3JTZXRzW2VkaXRpbmddLnNlbGVjdGVkQ29sb3J9XG4gICAgICAgICAgICAgICAgb25TZWxlY3RDb2xvclJhbmdlPXt0aGlzLl9vblNlbGVjdENvbG9yfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPFNpbmdsZUNvbG9yUGFsZXR0ZVxuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ29sb3I9e3JnYlRvSGV4KGNvbG9yU2V0c1tlZGl0aW5nXS5zZWxlY3RlZENvbG9yKX1cbiAgICAgICAgICAgICAgICBvblNlbGVjdENvbG9yPXt0aGlzLl9vblNlbGVjdENvbG9yfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L1N0eWxlZFBhbmVsRHJvcGRvd24+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgb25DbGlja091dHNpZGUoQ29sb3JTZWxlY3Rvcik7XG4iXX0=