UNPKG

kepler.gl.geoiq

Version:

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

307 lines (259 loc) 31.5 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"] = exports.SaveExportDropdown = exports.PanelAction = void 0; 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 _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); 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 _styledComponents = _interopRequireDefault(require("styled-components")); var _propTypes = _interopRequireDefault(require("prop-types")); var _styledComponents2 = require("../common/styled-components"); var _logo = _interopRequireDefault(require("../common/logo")); var _icons = require("../common/icons"); var _panelDropdown = _interopRequireDefault(require("./panel-dropdown")); function _templateObject5() { var data = (0, _taggedTemplateLiteral2["default"])(["\n background-color: ", ";\n box-shadow: ", ";\n font-size: 11px;\n padding: 16px 0;\n position: absolute;\n transition: ", ";\n display: flex;\n margin-top: ", ";\n opacity: ", ";\n transform: translateX(calc(-50% + 20px));\n pointer-events: ", ";\n z-index: 1000;\n\n .save-export-dropdown__inner {\n box-shadow: none;\n background-color: transparent;\n display: flex;\n }\n\n .save-export-dropdown__item {\n align-items: center;\n border-right: 1px solid ", ";\n color: ", ";\n display: flex;\n flex-direction: column;\n padding: 0 22px;\n\n :hover {\n cursor: pointer;\n color: ", ";\n }\n\n &:last-child {\n border-right: 0;\n }\n }\n\n .save-export-dropdown__title {\n white-space: nowrap;\n margin-top: 4px;\n }\n"]); _templateObject5 = function _templateObject5() { return data; }; return data; } function _templateObject4() { var data = (0, _taggedTemplateLiteral2["default"])(["\n align-items: center;\n border-radius: 2px;\n color: ", ";\n display: flex;\n height: 26px;\n justify-content: space-between;\n margin-left: 4px;\n width: 70px;\n padding: 5px;\n font-weight: bold;\n a {\n height: 20px;\n }\n\n :hover {\n cursor: pointer;\n background-color: ", ";\n color: ", ";\n\n a {\n color: ", ";\n }\n }\n"]); _templateObject4 = function _templateObject4() { return data; }; return data; } function _templateObject3() { var data = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n"]); _templateObject3 = function _templateObject3() { return data; }; return data; } function _templateObject2() { var data = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n justify-content: space-between;\n margin-bottom: 16px;\n width: 100%;\n"]); _templateObject2 = function _templateObject2() { return data; }; return data; } function _templateObject() { var data = (0, _taggedTemplateLiteral2["default"])(["\n background-color: ", ";\n padding: 12px 16px 0 16px;\n"]); _templateObject = function _templateObject() { return data; }; return data; } var StyledPanelHeader = _styledComponents["default"].div.attrs({ className: 'side-side-panel__header' })(_templateObject(), function (props) { return props.theme.sidePanelHeaderBg; }); var StyledPanelHeaderTop = _styledComponents["default"].div.attrs({ className: 'side-panel__header__top' })(_templateObject2()); var StyledPanelTopActions = _styledComponents["default"].div.attrs({ className: 'side-panel__header__actions' })(_templateObject3()); var StyledPanelAction = _styledComponents["default"].div.attrs({ className: 'side-panel__header__actions' })(_templateObject4(), function (props) { return props.active ? props.theme.textColorHl : props.theme.subtextColor; }, function (props) { return props.theme.secondaryBtnActBgd; }, function (props) { return props.theme.textColorHl; }, function (props) { return props.theme.textColorHl; }); var StyledPanelDropdown = _styledComponents["default"].div(_templateObject5(), function (props) { return props.theme.dropdownListBgd; }, function (props) { return props.theme.dropdownListShadow; }, function (props) { return props.theme.transitionSlow; }, function (props) { return props.show ? '6px' : '20px'; }, function (props) { return props.show ? 1 : 0; }, function (props) { return props.show ? 'all' : 'none'; }, function (props) { return props.theme.panelHeaderIcon; }, function (props) { return props.theme.textColor; }, function (props) { return props.theme.textColorHl; }); var PanelAction = function PanelAction(_ref) { var item = _ref.item, onClick = _ref.onClick; return _react["default"].createElement(StyledPanelAction, { className: "side-panel__panel-header__action", "data-tip": true, "data-for": "".concat(item.id, "-action"), onClick: onClick }, item.label ? _react["default"].createElement("p", null, item.label) : null, _react["default"].createElement("a", { target: item.blank ? '_blank' : '', href: item.href }, _react["default"].createElement(item.iconComponent, { height: "20px" })), item.tooltip ? _react["default"].createElement(_styledComponents2.Tooltip, { id: "".concat(item.id, "-action"), place: "bottom", delayShow: 500, effect: "solid" }, _react["default"].createElement("span", null, item.tooltip)) : null); }; exports.PanelAction = PanelAction; var PanelItem = function PanelItem(_ref2) { var onClose = _ref2.onClose, onClickHandler = _ref2.onClickHandler, label = _ref2.label, icon = _ref2.icon; return _react["default"].createElement("div", { className: "save-export-dropdown__item", onClick: function onClick(e) { e.stopPropagation(); onClose(); onClickHandler(); } }, icon, _react["default"].createElement("div", { className: "save-export-dropdown__title" }, label)); }; var SaveExportDropdown = function SaveExportDropdown(_ref3) { var onExportImage = _ref3.onExportImage, onExportData = _ref3.onExportData, onExportConfig = _ref3.onExportConfig, onSaveMap = _ref3.onSaveMap, show = _ref3.show, onClose = _ref3.onClose; return _react["default"].createElement(StyledPanelDropdown, { show: show, className: "save-export-dropdown" }, _react["default"].createElement(_panelDropdown["default"], { className: "save-export-dropdown__inner", show: show, onClose: onClose }, _react["default"].createElement(PanelItem, { label: "Export Image", onClickHandler: onExportImage, onClose: onClose, icon: _react["default"].createElement(_icons.Picture, { height: "16px" }) }), _react["default"].createElement(PanelItem, { label: "Export Data", onClickHandler: onExportData, onClose: onClose, icon: _react["default"].createElement(_icons.Files, { height: "16px" }) }), _react["default"].createElement(PanelItem, { label: "Export Config", onClickHandler: onExportConfig, onClose: onClose, icon: _react["default"].createElement(_icons.CodeAlt, { height: "16px" }) }), onSaveMap ? _react["default"].createElement(PanelItem, { label: "Save Map Url", onClickHandler: onSaveMap, onClose: onClose, icon: _react["default"].createElement(_icons.Share, { height: "16px" }) }) : null)); }; exports.SaveExportDropdown = SaveExportDropdown; var defaultActionItems = [{ id: 'save', iconComponent: _icons.Save, onClick: function onClick() {}, label: 'Share', dropdownComponent: SaveExportDropdown }]; function PanelHeaderFactory() { var _class, _temp; return _temp = _class = /*#__PURE__*/ function (_Component) { (0, _inherits2["default"])(PanelHeader, _Component); function PanelHeader() { (0, _classCallCheck2["default"])(this, PanelHeader); return (0, _possibleConstructorReturn2["default"])(this, (0, _getPrototypeOf2["default"])(PanelHeader).apply(this, arguments)); } (0, _createClass2["default"])(PanelHeader, [{ key: "render", value: function render() { var _this$props = this.props, appName = _this$props.appName, version = _this$props.version, actionItems = _this$props.actionItems, onSaveMap = _this$props.onSaveMap, onExportImage = _this$props.onExportImage, onExportData = _this$props.onExportData, onExportConfig = _this$props.onExportConfig, visibleDropdown = _this$props.visibleDropdown, showExportDropdown = _this$props.showExportDropdown, hideExportDropdown = _this$props.hideExportDropdown; return _react["default"].createElement(StyledPanelHeader, { className: "side-panel__panel-header" }, _react["default"].createElement(StyledPanelHeaderTop, { className: "side-panel__panel-header__top" }, _react["default"].createElement(this.props.logoComponent, { appName: appName, version: version }), _react["default"].createElement(StyledPanelTopActions, null, actionItems.map(function (item) { return _react["default"].createElement("div", { className: "side-panel__panel-header__right", key: item.id, style: { position: 'relative' } }, _react["default"].createElement(PanelAction, { item: item, onClick: function onClick() { if (item.dropdownComponent) { showExportDropdown(item.id); } item.onClick(); } }), item.dropdownComponent ? _react["default"].createElement(item.dropdownComponent, { onClose: hideExportDropdown, show: visibleDropdown === item.id, onSaveMap: onSaveMap, onExportData: onExportData, onExportImage: onExportImage, onExportConfig: onExportConfig }) : null); })))); } }]); return PanelHeader; }(_react.Component), (0, _defineProperty2["default"])(_class, "propTypes", { appName: _propTypes["default"].string, version: _propTypes["default"].string, uiState: _propTypes["default"].object, uiStateActions: _propTypes["default"].object, logoComponent: _propTypes["default"].oneOfType([_propTypes["default"].element, _propTypes["default"].func]), actionItems: _propTypes["default"].arrayOf(_propTypes["default"].any) }), (0, _defineProperty2["default"])(_class, "defaultProps", { logoComponent: _logo["default"], actionItems: defaultActionItems }), _temp; } var _default = PanelHeaderFactory; exports["default"] = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NpZGUtcGFuZWwvcGFuZWwtaGVhZGVyLmpzIl0sIm5hbWVzIjpbIlN0eWxlZFBhbmVsSGVhZGVyIiwic3R5bGVkIiwiZGl2IiwiYXR0cnMiLCJjbGFzc05hbWUiLCJwcm9wcyIsInRoZW1lIiwic2lkZVBhbmVsSGVhZGVyQmciLCJTdHlsZWRQYW5lbEhlYWRlclRvcCIsIlN0eWxlZFBhbmVsVG9wQWN0aW9ucyIsIlN0eWxlZFBhbmVsQWN0aW9uIiwiYWN0aXZlIiwidGV4dENvbG9ySGwiLCJzdWJ0ZXh0Q29sb3IiLCJzZWNvbmRhcnlCdG5BY3RCZ2QiLCJTdHlsZWRQYW5lbERyb3Bkb3duIiwiZHJvcGRvd25MaXN0QmdkIiwiZHJvcGRvd25MaXN0U2hhZG93IiwidHJhbnNpdGlvblNsb3ciLCJzaG93IiwicGFuZWxIZWFkZXJJY29uIiwidGV4dENvbG9yIiwiUGFuZWxBY3Rpb24iLCJpdGVtIiwib25DbGljayIsImlkIiwibGFiZWwiLCJibGFuayIsImhyZWYiLCJ0b29sdGlwIiwiUGFuZWxJdGVtIiwib25DbG9zZSIsIm9uQ2xpY2tIYW5kbGVyIiwiaWNvbiIsImUiLCJzdG9wUHJvcGFnYXRpb24iLCJTYXZlRXhwb3J0RHJvcGRvd24iLCJvbkV4cG9ydEltYWdlIiwib25FeHBvcnREYXRhIiwib25FeHBvcnRDb25maWciLCJvblNhdmVNYXAiLCJkZWZhdWx0QWN0aW9uSXRlbXMiLCJpY29uQ29tcG9uZW50IiwiU2F2ZSIsImRyb3Bkb3duQ29tcG9uZW50IiwiUGFuZWxIZWFkZXJGYWN0b3J5IiwiYXBwTmFtZSIsInZlcnNpb24iLCJhY3Rpb25JdGVtcyIsInZpc2libGVEcm9wZG93biIsInNob3dFeHBvcnREcm9wZG93biIsImhpZGVFeHBvcnREcm9wZG93biIsIm1hcCIsInBvc2l0aW9uIiwiQ29tcG9uZW50IiwiUHJvcFR5cGVzIiwic3RyaW5nIiwidWlTdGF0ZSIsIm9iamVjdCIsInVpU3RhdGVBY3Rpb25zIiwibG9nb0NvbXBvbmVudCIsIm9uZU9mVHlwZSIsImVsZW1lbnQiLCJmdW5jIiwiYXJyYXlPZiIsImFueSIsIktlcGxlckdsTG9nbyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW9CQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLElBQU1BLGlCQUFpQixHQUFHQyw2QkFBT0MsR0FBUCxDQUFXQyxLQUFYLENBQWlCO0FBQ3pDQyxFQUFBQSxTQUFTLEVBQUU7QUFEOEIsQ0FBakIsQ0FBSCxvQkFHRCxVQUFBQyxLQUFLO0FBQUEsU0FBSUEsS0FBSyxDQUFDQyxLQUFOLENBQVlDLGlCQUFoQjtBQUFBLENBSEosQ0FBdkI7O0FBT0EsSUFBTUMsb0JBQW9CLEdBQUdQLDZCQUFPQyxHQUFQLENBQVdDLEtBQVgsQ0FBaUI7QUFDNUNDLEVBQUFBLFNBQVMsRUFBRTtBQURpQyxDQUFqQixDQUFILG9CQUExQjs7QUFTQSxJQUFNSyxxQkFBcUIsR0FBR1IsNkJBQU9DLEdBQVAsQ0FBV0MsS0FBWCxDQUFpQjtBQUM3Q0MsRUFBQUEsU0FBUyxFQUFFO0FBRGtDLENBQWpCLENBQUgsb0JBQTNCOztBQU1BLElBQU1NLGlCQUFpQixHQUFHVCw2QkFBT0MsR0FBUCxDQUFXQyxLQUFYLENBQWlCO0FBQ3pDQyxFQUFBQSxTQUFTLEVBQUU7QUFEOEIsQ0FBakIsQ0FBSCxxQkFLWixVQUFBQyxLQUFLO0FBQUEsU0FDWkEsS0FBSyxDQUFDTSxNQUFOLEdBQWVOLEtBQUssQ0FBQ0MsS0FBTixDQUFZTSxXQUEzQixHQUF5Q1AsS0FBSyxDQUFDQyxLQUFOLENBQVlPLFlBRHpDO0FBQUEsQ0FMTyxFQW9CQyxVQUFBUixLQUFLO0FBQUEsU0FBSUEsS0FBSyxDQUFDQyxLQUFOLENBQVlRLGtCQUFoQjtBQUFBLENBcEJOLEVBcUJWLFVBQUFULEtBQUs7QUFBQSxTQUFJQSxLQUFLLENBQUND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c0JBQVVHLE1BSlQ7QUFLakJFLElBQUFBLGFBQWEsRUFBRUwsc0JBQVVNLFNBQVYsQ0FBb0IsQ0FBQ04sc0JBQVVPLE9BQVgsRUFBb0JQLHNCQUFVUSxJQUE5QixDQUFwQixDQUxFO0FBTWpCZixJQUFBQSxXQUFXLEVBQUVPLHNCQUFVUyxPQUFWLENBQWtCVCxzQkFBVVUsR0FBNUI7QUFOSSxHQURyQiw0REFVd0I7QUFDcEJMLElBQUFBLGFBQWEsRUFBRU0sZ0JBREs7QUFFcEJsQixJQUFBQSxXQUFXLEVBQUVQO0FBRk8sR0FWeEI7QUFtRUQ7O2VBRWNJLGtCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDE5IFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50fSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQge1Rvb2x0aXB9IGZyb20gJ2NvbXBvbmVudHMvY29tbW9uL3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCBLZXBsZXJHbExvZ28gZnJvbSAnY29tcG9uZW50cy9jb21tb24vbG9nbyc7XG5pbXBvcnQge0NvZGVBbHQsIFNhdmUsIEZpbGVzLCBTaGFyZSwgUGljdHVyZX0gZnJvbSAnY29tcG9uZW50cy9jb21tb24vaWNvbnMnO1xuaW1wb3J0IENsaWNrT3V0c2lkZUNsb3NlRHJvcGRvd24gZnJvbSAnY29tcG9uZW50cy9zaWRlLXBhbmVsL3BhbmVsLWRyb3Bkb3duJztcblxuY29uc3QgU3R5bGVkUGFuZWxIZWFkZXIgPSBzdHlsZWQuZGl2LmF0dHJzKHtcbiAgY2xhc3NOYW1lOiAnc2lkZS1zaWRlLXBhbmVsX19oZWFkZXInXG59KWBcbiAgYmFja2dyb3VuZC1jb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zaWRlUGFuZWxIZWFkZXJCZ307XG4gIHBhZGRpbmc6IDEycHggMTZweCAwIDE2cHg7XG5gO1xuXG5jb25zdCBTdHlsZWRQYW5lbEhlYWRlclRvcCA9IHN0eWxlZC5kaXYuYXR0cnMoe1xuICBjbGFzc05hbWU6ICdzaWRlLXBhbmVsX19oZWFkZXJfX3RvcCdcbn0pYFxuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIG1hcmdpbi1ib3R0b206IDE2cHg7XG4gIHdpZHRoOiAxMDAlO1xuYDtcblxuY29uc3QgU3R5bGVkUGFuZWxUb3BBY3Rpb25zID0gc3R5bGVkLmRpdi5hdHRycyh7XG4gIGNsYXNzTmFtZTogJ3NpZGUtcGFuZWxfX2hlYWRlcl9fYWN0aW9ucydcbn0pYFxuICBkaXNwbGF5OiBmbGV4O1xuYDtcblxuY29uc3QgU3R5bGVkUGFuZWxBY3Rpb24gPSBzdHlsZWQuZGl2LmF0dHJzKHtcbiAgY2xhc3NOYW1lOiAnc2lkZS1wYW5lbF9faGVhZGVyX19hY3Rpb25zJ1xufSlgXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgY29sb3I6ICR7cHJvcHMgPT5cbiAgICBwcm9wcy5hY3RpdmUgPyBwcm9wcy50aGVtZS50ZXh0Q29sb3JIbCA6IHByb3BzLnRoZW1lLnN1YnRleHRDb2xvcn07XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGhlaWdodDogMjZweDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBtYXJnaW4tbGVmdDogNHB4O1xuICB3aWR0aDogNzBweDtcbiAgcGFkZGluZzogNXB4O1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgYSB7XG4gICAgaGVpZ2h0OiAyMHB4O1xuICB9XG5cbiAgOmhvdmVyIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zZWNvbmRhcnlCdG5BY3RCZ2R9O1xuICAgIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnRleHRDb2xvckhsfTtcblxuICAgIGEge1xuICAgICAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUudGV4dENvbG9ySGx9O1xuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgU3R5bGVkUGFuZWxEcm9wZG93biA9IHN0eWxlZC5kaXZgXG4gIGJhY2tncm91bmQtY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuZHJvcGRvd25MaXN0QmdkfTtcbiAgYm94LXNoYWRvdzogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5kcm9wZG93bkxpc3RTaGFkb3d9O1xuICBmb250LXNpemU6IDExcHg7XG4gIHBhZGRpbmc6IDE2cHggMDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0cmFuc2l0aW9uOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnRyYW5zaXRpb25TbG93fTtcbiAgZGlzcGxheTogZmxleDtcbiAgbWFyZ2luLXRvcDogJHtwcm9wcyA9PiAocHJvcHMuc2hvdyA/ICc2cHgnIDogJzIwcHgnKX07XG4gIG9wYWNpdHk6ICR7cHJvcHMgPT4gKHByb3BzLnNob3cgPyAxIDogMCl9O1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoY2FsYygtNTAlICsgMjBweCkpO1xuICBwb2ludGVyLWV2ZW50czogJHtwcm9wcyA9PiAocHJvcHMuc2hvdyA/ICdhbGwnIDogJ25vbmUnKX07XG4gIHotaW5kZXg6IDEwMDA7XG5cbiAgLnNhdmUtZXhwb3J0LWRyb3Bkb3duX19pbm5lciB7XG4gICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICB9XG5cbiAgLnNhdmUtZXhwb3J0LWRyb3Bkb3duX19pdGVtIHtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICR7cHJvcHMgPT4gcHJvcHMudGhlbWUucGFuZWxIZWFkZXJJY29ufTtcbiAgICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS50ZXh0Q29sb3J9O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBwYWRkaW5nOiAwIDIycHg7XG5cbiAgICA6aG92ZXIge1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUudGV4dENvbG9ySGx9O1xuICAgIH1cblxuICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICBib3JkZXItcmlnaHQ6IDA7XG4gICAgfVxuICB9XG5cbiAgLnNhdmUtZXhwb3J0LWRyb3Bkb3duX190aXRsZSB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBtYXJnaW4tdG9wOiA0cHg7XG4gIH1cbmA7XG5cbmV4cG9ydCBjb25zdCBQYW5lbEFjdGlvbiA9ICh7aXRlbSwgb25DbGlja30pID0+IChcbiAgPFN0eWxlZFBhbmVsQWN0aW9uXG4gICAgY2xhc3NOYW1lPVwic2lkZS1wYW5lbF9fcGFuZWwtaGVhZGVyX19hY3Rpb25cIlxuICAgIGRhdGEtdGlwXG4gICAgZGF0YS1mb3I9e2Ake2l0ZW0uaWR9LWFjdGlvbmB9XG4gICAgb25DbGljaz17b25DbGlja31cbiAgPlxuICAgIHtpdGVtLmxhYmVsID8gPHA+e2l0ZW0ubGFiZWx9PC9wPiA6IG51bGx9XG4gICAgPGEgdGFyZ2V0PXtpdGVtLmJsYW5rID8gJ19ibGFuaycgOiAnJ30gaHJlZj17aXRlbS5ocmVmfT5cbiAgICAgIDxpdGVtLmljb25Db21wb25lbnQgaGVpZ2h0PVwiMjBweFwiIC8+XG4gICAgPC9hPlxuICAgIHtpdGVtLnRvb2x0aXAgPyAoXG4gICAgICA8VG9vbHRpcFxuICAgICAgICBpZD17YCR7aXRlbS5pZH0tYWN0aW9uYH1cbiAgICAgICAgcGxhY2U9XCJib3R0b21cIlxuICAgICAgICBkZWxheVNob3c9ezUwMH1cbiAgICAgICAgZWZmZWN0PVwic29saWRcIlxuICAgICAgPlxuICAgICAgICA8c3Bhbj57aXRlbS50b29sdGlwfTwvc3Bhbj5cbiAgICAgIDwvVG9vbHRpcD5cbiAgICApIDogbnVsbH1cbiAgPC9TdHlsZWRQYW5lbEFjdGlvbj5cbik7XG5cbmNvbnN0IFBhbmVsSXRlbSA9ICh7b25DbG9zZSwgb25DbGlja0hhbmRsZXIsIGxhYmVsLCBpY29ufSkgPT4gKFxuICA8ZGl2XG4gICAgY2xhc3NOYW1lPVwic2F2ZS1leHBvcnQtZHJvcGRvd25fX2l0ZW1cIlxuICAgIG9uQ2xpY2s9e2UgPT4ge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIG9uQ2xvc2UoKTtcbiAgICAgIG9uQ2xpY2tIYW5kbGVyKCk7XG4gICAgfX1cbiAgPlxuICAgIHtpY29ufVxuICAgIDxkaXYgY2xhc3NOYW1lPVwic2F2ZS1leHBvcnQtZHJvcGRvd25fX3RpdGxlXCI+e2xhYmVsfTwvZGl2PlxuICA8L2Rpdj5cbik7XG5cbmV4cG9ydCBjb25zdCBTYXZlRXhwb3J0RHJvcGRvd24gPSAoe1xuICBvbkV4cG9ydEltYWdlLFxuICBvbkV4cG9ydERhdGEsXG4gIG9uRXhwb3J0Q29uZmlnLFxuICBvblNhdmVNYXAsXG4gIHNob3csXG4gIG9uQ2xvc2Vcbn0pID0+IHtcbiAgcmV0dXJuIChcbiAgICA8U3R5bGVkUGFuZWxEcm9wZG93biBzaG93PXtzaG93fSBjbGFzc05hbWU9XCJzYXZlLWV4cG9ydC1kcm9wZG93blwiPlxuICAgICAgPENsaWNrT3V0c2lkZUNsb3NlRHJvcGRvd25cbiAgICAgICAgY2xhc3NOYW1lPVwic2F2ZS1leHBvcnQtZHJvcGRvd25fX2lubmVyXCJcbiAgICAgICAgc2hvdz17c2hvd31cbiAgICAgICAgb25DbG9zZT17b25DbG9zZX1cbiAgICAgID5cbiAgICAgICAgPFBhbmVsSXRlbVxuICAgICAgICAgIGxhYmVsPVwiRXhwb3J0IEltYWdlXCJcbiAgICAgICAgICBvbkNsaWNrSGFuZGxlcj17b25FeHBvcnRJbWFnZX1cbiAgICAgICAgICBvbkNsb3NlPXtvbkNsb3NlfVxuICAgICAgICAgIGljb249ezxQaWN0dXJlIGhlaWdodD1cIjE2cHhcIiAvPn1cbiAgICAgICAgLz5cblxuICAgICAgICA8UGFuZWxJdGVtXG4gICAgICAgICAgbGFiZWw9XCJFeHBvcnQgRGF0YVwiXG4gICAgICAgICAgb25DbGlja0hhbmRsZXI9e29uRXhwb3J0RGF0YX1cbiAgICAgICAgICBvbkNsb3NlPXtvbkNsb3NlfVxuICAgICAgICAgIGljb249ezxGaWxlcyBoZWlnaHQ9XCIxNnB4XCIgLz59XG4gICAgICAgIC8+XG5cbiAgICAgICAgPFBhbmVsSXRlbVxuICAgICAgICAgIGxhYmVsPVwiRXhwb3J0IENvbmZpZ1wiXG4gICAgICAgICAgb25DbGlja0hhbmRsZXI9e29uRXhwb3J0Q29uZmlnfVxuICAgICAgICAgIG9uQ2xvc2U9e29uQ2xvc2V9XG4gICAgICAgICAgaWNvbj17PENvZGVBbHQgaGVpZ2h0PVwiMTZweFwiIC8+fVxuICAgICAgICAvPlxuXG4gICAgICAgIHtvblNhdmVNYXAgPyAoXG4gICAgICAgICAgPFBhbmVsSXRlbVxuICAgICAgICAgICAgbGFiZWw9XCJTYXZlIE1hcCBVcmxcIlxuICAgICAgICAgICAgb25DbGlja0hhbmRsZXI9e29uU2F2ZU1hcH1cbiAgICAgICAgICAgIG9uQ2xvc2U9e29uQ2xvc2V9XG4gICAgICAgICAgICBpY29uPXs8U2hhcmUgaGVpZ2h0PVwiMTZweFwiIC8+fVxuICAgICAgICAgIC8+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgPC9DbGlja091dHNpZGVDbG9zZURyb3Bkb3duPlxuICAgIDwvU3R5bGVkUGFuZWxEcm9wZG93bj5cbiAgKTtcbn07XG5cbmNvbnN0IGRlZmF1bHRBY3Rpb25JdGVtcyA9IFtcbiAge1xuICAgIGlkOiAnc2F2ZScsXG4gICAgaWNvbkNvbXBvbmVudDogU2F2ZSxcbiAgICBvbkNsaWNrOiAoKSA9PiB7fSxcbiAgICBsYWJlbDogJ1NoYXJlJyxcbiAgICBkcm9wZG93bkNvbXBvbmVudDogU2F2ZUV4cG9ydERyb3Bkb3duXG4gIH1cbl07XG5cbmZ1bmN0aW9uIFBhbmVsSGVhZGVyRmFjdG9yeSgpIHtcbiAgcmV0dXJuIGNsYXNzIFBhbmVsSGVhZGVyIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgICAgYXBwTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIHZlcnNpb246IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICB1aVN0YXRlOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgdWlTdGF0ZUFjdGlvbnM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgICBsb2dvQ29tcG9uZW50OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZWxlbWVudCwgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgICAgIGFjdGlvbkl0ZW1zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuYW55KVxuICAgIH07XG5cbiAgICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgICAgbG9nb0NvbXBvbmVudDogS2VwbGVyR2xMb2dvLFxuICAgICAgYWN0aW9uSXRlbXM6IGRlZmF1bHRBY3Rpb25JdGVtc1xuICAgIH07XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGFwcE5hbWUsXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIGFjdGlvbkl0ZW1zLFxuICAgICAgICBvblNhdmVNYXAsXG4gICAgICAgIG9uRXhwb3J0SW1hZ2UsXG4gICAgICAgIG9uRXhwb3J0RGF0YSxcbiAgICAgICAgb25FeHBvcnRDb25maWcsXG4gICAgICAgIHZpc2libGVEcm9wZG93bixcbiAgICAgICAgc2hvd0V4cG9ydERyb3Bkb3duLFxuICAgICAgICBoaWRlRXhwb3J0RHJvcGRvd25cbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkUGFuZWxIZWFkZXIgY2xhc3NOYW1lPVwic2lkZS1wYW5lbF9fcGFuZWwtaGVhZGVyXCI+XG4gICAgICAgICAgPFN0eWxlZFBhbmVsSGVhZGVyVG9wIGNsYXNzTmFtZT1cInNpZGUtcGFuZWxfX3BhbmVsLWhlYWRlcl9fdG9wXCI+XG4gICAgICAgICAgICA8dGhpcy5wcm9wcy5sb2dvQ29tcG9uZW50IGFwcE5hbWU9e2FwcE5hbWV9IHZlcnNpb249e3ZlcnNpb259IC8+XG4gICAgICAgICAgICA8U3R5bGVkUGFuZWxUb3BBY3Rpb25zPlxuICAgICAgICAgICAgICB7YWN0aW9uSXRlbXMubWFwKGl0ZW0gPT4gKFxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInNpZGUtcGFuZWxfX3BhbmVsLWhlYWRlcl9fcmlnaHRcIlxuICAgICAgICAgICAgICAgICAga2V5PXtpdGVtLmlkfVxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3twb3NpdGlvbjogJ3JlbGF0aXZlJ319XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPFBhbmVsQWN0aW9uXG4gICAgICAgICAgICAgICAgICAgIGl0ZW09e2l0ZW19XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5kcm9wZG93bkNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0V4cG9ydERyb3Bkb3duKGl0ZW0uaWQpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBpdGVtLm9uQ2xpY2soKTtcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICB7aXRlbS5kcm9wZG93bkNvbXBvbmVudCA/IChcbiAgICAgICAgICAgICAgICAgICAgPGl0ZW0uZHJvcGRvd25Db21wb25lbnRcbiAgICAgICAgICAgICAgICAgICAgICBvbkNsb3NlPXtoaWRlRXhwb3J0RHJvcGRvd259XG4gICAgICAgICAgICAgICAgICAgICAgc2hvdz17dmlzaWJsZURyb3Bkb3duID09PSBpdGVtLmlkfVxuICAgICAgICAgICAgICAgICAgICAgIG9uU2F2ZU1hcD17b25TYXZlTWFwfVxuICAgICAgICAgICAgICAgICAgICAgIG9uRXhwb3J0RGF0YT17b25FeHBvcnREYXRhfVxuICAgICAgICAgICAgICAgICAgICAgIG9uRXhwb3J0SW1hZ2U9e29uRXhwb3J0SW1hZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgb25FeHBvcnRDb25maWc9e29uRXhwb3J0Q29uZmlnfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9TdHlsZWRQYW5lbFRvcEFjdGlvbnM+XG4gICAgICAgICAgPC9TdHlsZWRQYW5lbEhlYWRlclRvcD5cbiAgICAgICAgPC9TdHlsZWRQYW5lbEhlYWRlcj5cbiAgICAgICk7XG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBQYW5lbEhlYWRlckZhY3Rvcnk7XG4iXX0=