kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
222 lines (190 loc) • 27.6 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.LayerTitleSectionFactory = LayerTitleSectionFactory;
exports["default"] = exports.LayerLabelEditor = exports.DragHandle = exports.defaultProps = void 0;
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
var _react = _interopRequireWildcard(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _classnames = _interopRequireDefault(require("classnames"));
var _styledComponents = _interopRequireDefault(require("styled-components"));
var _reactSortableHoc = require("react-sortable-hoc");
var _panelHeaderAction = _interopRequireDefault(require("../panel-header-action"));
var _icons = require("../../common/icons");
var _styledComponents2 = require("../../common/styled-components");
var _localization = require("../../../localization");
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5;
var propTypes = {
// required
layerId: _propTypes["default"].string.isRequired,
isVisible: _propTypes["default"].bool.isRequired,
onToggleVisibility: _propTypes["default"].func.isRequired,
onUpdateLayerLabel: _propTypes["default"].func.isRequired,
onToggleEnableConfig: _propTypes["default"].func.isRequired,
onRemoveLayer: _propTypes["default"].func.isRequired,
onDuplicateLayer: _propTypes["default"].func.isRequired,
isConfigActive: _propTypes["default"].bool.isRequired,
// optional
showRemoveLayer: _propTypes["default"].bool,
label: _propTypes["default"].string,
layerType: _propTypes["default"].string,
isDragNDropEnabled: _propTypes["default"].bool,
labelRCGColorValues: _propTypes["default"].arrayOf(_propTypes["default"].number)
};
var defaultProps = {
isDragNDropEnabled: true,
showRemoveLayer: true
};
exports.defaultProps = defaultProps;
var StyledLayerPanelHeader = (0, _styledComponents["default"])(_styledComponents2.StyledPanelHeader)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n height: ", "px;\n .layer__remove-layer {\n opacity: 0;\n }\n :hover {\n cursor: pointer;\n background-color: ", ";\n\n .layer__drag-handle {\n opacity: 1;\n }\n\n .layer__remove-layer {\n opacity: 1;\n }\n }\n"])), function (props) {
return props.theme.layerPanelHeaderHeight;
}, function (props) {
return props.theme.panelBackgroundHover;
});
var HeaderLabelSection = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n color: ", ";\n"])), function (props) {
return props.theme.textColor;
});
var HeaderActionSection = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n"])));
var StyledDragHandle = _styledComponents["default"].div(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n align-items: center;\n opacity: 0;\n z-index: 1000;\n\n :hover {\n cursor: move;\n opacity: 1;\n color: ", ";\n }\n"])), function (props) {
return props.theme.textColorHl;
});
var DragHandle = (0, _reactSortableHoc.SortableHandle)(function (_ref) {
var className = _ref.className,
children = _ref.children;
return /*#__PURE__*/_react["default"].createElement(StyledDragHandle, {
className: className
}, children);
});
exports.DragHandle = DragHandle;
var LayerLabelEditor = function LayerLabelEditor(_ref2) {
var layerId = _ref2.layerId,
label = _ref2.label,
onEdit = _ref2.onEdit;
return /*#__PURE__*/_react["default"].createElement(_styledComponents2.InlineInput, {
type: "text",
className: "layer__title__editor",
value: label,
onClick: function onClick(e) {
e.stopPropagation();
},
onChange: onEdit,
id: "".concat(layerId, ":input-layer-label")
});
};
exports.LayerLabelEditor = LayerLabelEditor;
function LayerTitleSectionFactory() {
var StyledLayerTitleSection = _styledComponents["default"].div(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n margin-left: 4px;\n\n .layer__title__type {\n color: ", ";\n font-size: 10px;\n line-height: 12px;\n letter-spacing: 0.37px;\n text-transform: capitalize;\n }\n "])), function (props) {
return props.theme.subtextColor;
});
var LayerTitleSection = function LayerTitleSection(_ref3) {
var layerType = _ref3.layerType,
layerId = _ref3.layerId,
label = _ref3.label,
onUpdateLayerLabel = _ref3.onUpdateLayerLabel;
return /*#__PURE__*/_react["default"].createElement(StyledLayerTitleSection, {
className: "layer__title"
}, /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(LayerLabelEditor, {
layerId: layerId,
label: label,
onEdit: onUpdateLayerLabel
}), /*#__PURE__*/_react["default"].createElement("div", {
className: "layer__title__type"
}, layerType && /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
id: "layer.type.".concat(layerType.toLowerCase())
}))));
};
return LayerTitleSection;
}
LayerPanelHeaderFactory.deps = [LayerTitleSectionFactory, _panelHeaderAction["default"]];
var defaultActionIcons = {
remove: _icons.Trash,
visible: _icons.EyeSeen,
hidden: _icons.EyeUnseen,
enableConfig: _icons.ArrowDown,
duplicate: _icons.Copy
};
function LayerPanelHeaderFactory(LayerTitleSection, PanelHeaderAction) {
var LayerPanelHeader = function LayerPanelHeader(_ref4) {
var isConfigActive = _ref4.isConfigActive,
isDragNDropEnabled = _ref4.isDragNDropEnabled,
isVisible = _ref4.isVisible,
label = _ref4.label,
layerId = _ref4.layerId,
layerType = _ref4.layerType,
labelRCGColorValues = _ref4.labelRCGColorValues,
onToggleVisibility = _ref4.onToggleVisibility,
onUpdateLayerLabel = _ref4.onUpdateLayerLabel,
onToggleEnableConfig = _ref4.onToggleEnableConfig,
onDuplicateLayer = _ref4.onDuplicateLayer,
onRemoveLayer = _ref4.onRemoveLayer,
showRemoveLayer = _ref4.showRemoveLayer,
_ref4$actionIcons = _ref4.actionIcons,
actionIcons = _ref4$actionIcons === void 0 ? defaultActionIcons : _ref4$actionIcons;
var _useState = (0, _react.useState)(false),
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
isOpen = _useState2[0],
setOpen = _useState2[1];
var toggleLayerConfigurator = function toggleLayerConfigurator(e) {
setOpen(!isOpen);
onToggleEnableConfig(e);
};
return /*#__PURE__*/_react["default"].createElement(StyledLayerPanelHeader, {
className: (0, _classnames["default"])('layer-panel__header', {
'sort--handle': !isConfigActive
}),
active: isConfigActive,
labelRCGColorValues: labelRCGColorValues,
onClick: toggleLayerConfigurator
}, /*#__PURE__*/_react["default"].createElement(HeaderLabelSection, {
className: "layer-panel__header__content"
}, isDragNDropEnabled && /*#__PURE__*/_react["default"].createElement(DragHandle, {
className: "layer__drag-handle"
}, /*#__PURE__*/_react["default"].createElement(_icons.VertDots, {
height: "20px"
})), /*#__PURE__*/_react["default"].createElement(LayerTitleSection, {
layerId: layerId,
label: label,
onUpdateLayerLabel: onUpdateLayerLabel,
layerType: layerType
})), /*#__PURE__*/_react["default"].createElement(HeaderActionSection, {
className: "layer-panel__header__actions"
}, showRemoveLayer ? /*#__PURE__*/_react["default"].createElement(PanelHeaderAction, {
className: "layer__remove-layer",
id: layerId,
tooltip: 'tooltip.removeLayer',
onClick: onRemoveLayer,
tooltipType: "error",
IconComponent: actionIcons.remove
}) : null, /*#__PURE__*/_react["default"].createElement(PanelHeaderAction, {
className: "layer__visibility-toggle",
id: layerId,
tooltip: isVisible ? 'tooltip.hideLayer' : 'tooltip.showLayer',
onClick: onToggleVisibility,
IconComponent: isVisible ? actionIcons.visible : actionIcons.hidden
}), /*#__PURE__*/_react["default"].createElement(PanelHeaderAction, {
className: "layer__duplicate",
id: layerId,
tooltip: 'tooltip.duplicateLayer',
onClick: onDuplicateLayer,
IconComponent: actionIcons.duplicate
}), /*#__PURE__*/_react["default"].createElement(PanelHeaderAction, {
className: (0, _classnames["default"])('layer__enable-config ', {
'is-open': isOpen
}),
id: layerId,
tooltip: 'tooltip.layerSettings',
onClick: toggleLayerConfigurator,
IconComponent: actionIcons.enableConfig
})));
};
LayerPanelHeader.propTypes = propTypes;
LayerPanelHeader.defaultProps = defaultProps;
return LayerPanelHeader;
}
var _default = LayerPanelHeaderFactory;
exports["default"] = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NpZGUtcGFuZWwvbGF5ZXItcGFuZWwvbGF5ZXItcGFuZWwtaGVhZGVyLmpzIl0sIm5hbWVzIjpbInByb3BUeXBlcyIsImxheWVySWQiLCJQcm9wVHlwZXMiLCJzdHJpbmciLCJpc1JlcXVpcmVkIiwiaXNWaXNpYmxlIiwiYm9vbCIsIm9uVG9nZ2xlVmlzaWJpbGl0eSIsImZ1bmMiLCJvblVwZGF0ZUxheWVyTGFiZWwiLCJvblRvZ2dsZUVuYWJsZUNvbmZpZyIsIm9uUmVtb3ZlTGF5ZXIiLCJvbkR1cGxpY2F0ZUxheWVyIiwiaXNDb25maWdBY3RpdmUiLCJzaG93UmVtb3ZlTGF5ZXIiLCJsYWJlbCIsImxheWVyVHlwZSIsImlzRHJhZ05Ecm9wRW5hYmxlZCIsImxhYmVsUkNHQ29sb3JWYWx1ZXMiLCJhcnJheU9mIiwibnVtYmVyIiwiZGVmYXVsdFByb3BzIiwiU3R5bGVkTGF5ZXJQYW5lbEhlYWRlciIsIlN0eWxlZFBhbmVsSGVhZGVyIiwicHJvcHMiLCJ0aGVtZSIsImxheWVyUGFuZWxIZWFkZXJIZWlnaHQiLCJwYW5lbEJhY2tncm91bmRIb3ZlciIsIkhlYWRlckxhYmVsU2VjdGlvbiIsInN0eWxlZCIsImRpdiIsInRleHRDb2xvciIsIkhlYWRlckFjdGlvblNlY3Rpb24iLCJTdHlsZWREcmFnSGFuZGxlIiwidGV4dENvbG9ySGwiLCJEcmFnSGFuZGxlIiwiY2xhc3NOYW1lIiwiY2hpbGRyZW4iLCJMYXllckxhYmVsRWRpdG9yIiwib25FZGl0IiwiZSIsInN0b3BQcm9wYWdhdGlvbiIsIkxheWVyVGl0bGVTZWN0aW9uRmFjdG9yeSIsIlN0eWxlZExheWVyVGl0bGVTZWN0aW9uIiwic3VidGV4dENvbG9yIiwiTGF5ZXJUaXRsZVNlY3Rpb24iLCJ0b0xvd2VyQ2FzZSIsIkxheWVyUGFuZWxIZWFkZXJGYWN0b3J5IiwiZGVwcyIsIlBhbmVsSGVhZGVyQWN0aW9uRmFjdG9yeSIsImRlZmF1bHRBY3Rpb25JY29ucyIsInJlbW92ZSIsIlRyYXNoIiwidmlzaWJsZSIsIkV5ZVNlZW4iLCJoaWRkZW4iLCJFeWVVbnNlZW4iLCJlbmFibGVDb25maWciLCJBcnJvd0Rvd24iLCJkdXBsaWNhdGUiLCJDb3B5IiwiUGFuZWxIZWFkZXJBY3Rpb24iLCJMYXllclBhbmVsSGVhZGVyIiwiYWN0aW9uSWNvbnMiLCJpc09wZW4iLCJzZXRPcGVuIiwidG9nZ2xlTGF5ZXJDb25maWd1cmF0b3IiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQkE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7Ozs7QUFFQSxJQUFNQSxTQUFTLEdBQUc7QUFDaEI7QUFDQUMsRUFBQUEsT0FBTyxFQUFFQyxzQkFBVUMsTUFBVixDQUFpQkMsVUFGVjtBQUdoQkMsRUFBQUEsU0FBUyxFQUFFSCxzQkFBVUksSUFBVixDQUFlRixVQUhWO0FBSWhCRyxFQUFBQSxrQkFBa0IsRUFBRUwsc0JBQVVNLElBQVYsQ0FBZUosVUFKbkI7QUFLaEJLLEVBQUFBLGtCQUFrQixFQUFFUCxzQkFBVU0sSUFBVixDQUFlSixVQUxuQjtBQU1oQk0sRUFBQUEsb0JBQW9CLEVBQUVSLHNCQUFVTSxJQUFWLENBQWVKLFVBTnJCO0FBT2hCTyxFQUFBQSxhQUFhLEVBQUVULHNCQUFVTSxJQUFWLENBQWVKLFVBUGQ7QUFRaEJRLEVBQUFBLGdCQUFnQixFQUFFVixzQkFBVU0sSUFBVixDQUFlSixVQVJqQjtBQVNoQlMsRUFBQUEsY0FBYyxFQUFFWCxzQkFBVUksSUFBVixDQUFlRixVQVRmO0FBV2hCO0FBQ0FVLEVBQUFBLGVBQWUsRUFBRVosc0JBQVVJLElBWlg7QUFhaEJTLEVBQUFBLEtBQUssRUFBRWIsc0JBQVVDLE1BYkQ7QUFjaEJhLEVBQUFBLFNBQVMsRUFBRWQsc0JBQVVDLE1BZEw7QUFlaEJjLEVBQUFBLGtCQUFrQixFQUFFZixzQkFBVUksSUFmZDtBQWdCaEJZLEVBQUFBLG1CQUFtQixFQUFFaEIsc0JBQVVpQixPQUFWLENB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QVMsR0FBRzBELFdBQVcsQ0FBQ1YsT0FBZixHQUF5QlUsV0FBVyxDQUFDUjtBQUwvRCxNQVhGLGVBa0JFLGdDQUFDLGlCQUFEO0FBQ0UsTUFBQSxTQUFTLEVBQUMsa0JBRFo7QUFFRSxNQUFBLEVBQUUsRUFBRXRELE9BRk47QUFHRSxNQUFBLE9BQU8sRUFBRSx3QkFIWDtBQUlFLE1BQUEsT0FBTyxFQUFFVyxnQkFKWDtBQUtFLE1BQUEsYUFBYSxFQUFFbUQsV0FBVyxDQUFDSjtBQUw3QixNQWxCRixlQXlCRSxnQ0FBQyxpQkFBRDtBQUNFLE1BQUEsU0FBUyxFQUFFLDRCQUFXLHVCQUFYLEVBQW9DO0FBQzdDLG1CQUFXSztBQURrQyxPQUFwQyxDQURiO0FBSUUsTUFBQSxFQUFFLEVBQUUvRCxPQUpOO0FBS0UsTUFBQSxPQUFPLEVBQUUsdUJBTFg7QUFNRSxNQUFBLE9BQU8sRUFBRWlFLHVCQU5YO0FBT0UsTUFBQSxhQUFhLEVBQUVILFdBQVcsQ0FBQ047QUFQN0IsTUF6QkYsQ0FyQkYsQ0FERjtBQTJERCxHQWhGRDs7QUFrRkFLLEVBQUFBLGdCQUFnQixDQUFDOUQsU0FBakIsR0FBNkJBLFNBQTdCO0FBQ0E4RCxFQUFBQSxnQkFBZ0IsQ0FBQ3pDLFlBQWpCLEdBQWdDQSxZQUFoQztBQUVBLFNBQU95QyxnQkFBUDtBQUNEOztlQUVjZix1QiIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAyMSBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCBSZWFjdCwge3VzZVN0YXRlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsYXNzbmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7U29ydGFibGVIYW5kbGV9IGZyb20gJ3JlYWN0LXNvcnRhYmxlLWhvYyc7XG5pbXBvcnQgUGFuZWxIZWFkZXJBY3Rpb25GYWN0b3J5IGZyb20gJ2NvbXBvbmVudHMvc2lkZS1wYW5lbC9wYW5lbC1oZWFkZXItYWN0aW9uJztcbmltcG9ydCB7Q29weSwgQXJyb3dEb3duLCBFeWVTZWVuLCBFeWVVbnNlZW4sIFRyYXNoLCBWZXJ0RG90c30gZnJvbSAnY29tcG9uZW50cy9jb21tb24vaWNvbnMnO1xuXG5pbXBvcnQge0lubGluZUlucHV0LCBTdHlsZWRQYW5lbEhlYWRlcn0gZnJvbSAnY29tcG9uZW50cy9jb21tb24vc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHtGb3JtYXR0ZWRNZXNzYWdlfSBmcm9tICdsb2NhbGl6YXRpb24nO1xuXG5jb25zdCBwcm9wVHlwZXMgPSB7XG4gIC8vIHJlcXVpcmVkXG4gIGxheWVySWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgaXNWaXNpYmxlOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBvblRvZ2dsZVZpc2liaWxpdHk6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9uVXBkYXRlTGF5ZXJMYWJlbDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb25Ub2dnbGVFbmFibGVDb25maWc6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9uUmVtb3ZlTGF5ZXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9uRHVwbGljYXRlTGF5ZXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGlzQ29uZmlnQWN0aXZlOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuXG4gIC8vIG9wdGlvbmFsXG4gIHNob3dSZW1vdmVMYXllcjogUHJvcFR5cGVzLmJvb2wsXG4gIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBsYXllclR5cGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGlzRHJhZ05Ecm9wRW5hYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGxhYmVsUkNHQ29sb3JWYWx1ZXM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5udW1iZXIpXG59O1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdFByb3BzID0ge1xuICBpc0RyYWdORHJvcEVuYWJsZWQ6IHRydWUsXG4gIHNob3dSZW1vdmVMYXllcjogdHJ1ZVxufTtcblxuY29uc3QgU3R5bGVkTGF5ZXJQYW5lbEhlYWRlciA9IHN0eWxlZChTdHlsZWRQYW5lbEhlYWRlcilgXG4gIGhlaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5sYXllclBhbmVsSGVhZGVySGVpZ2h0fXB4O1xuICAubGF5ZXJfX3JlbW92ZS1sYXllciB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICA6aG92ZXIge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnBhbmVsQmFja2dyb3VuZEhvdmVyfTtcblxuICAgIC5sYXllcl9fZHJhZy1oYW5kbGUge1xuICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG5cbiAgICAubGF5ZXJfX3JlbW92ZS1sYXllciB7XG4gICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgSGVhZGVyTGFiZWxTZWN0aW9uID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUudGV4dENvbG9yfTtcbmA7XG5cbmNvbnN0IEhlYWRlckFjdGlvblNlY3Rpb24gPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuYDtcblxuY29uc3QgU3R5bGVkRHJhZ0hhbmRsZSA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIG9wYWNpdHk6IDA7XG4gIHotaW5kZXg6IDEwMDA7XG5cbiAgOmhvdmVyIHtcbiAgICBjdXJzb3I6IG1vdmU7XG4gICAgb3BhY2l0eTogMTtcbiAgICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS50ZXh0Q29sb3JIbH07XG4gIH1cbmA7XG5cbmV4cG9ydCBjb25zdCBEcmFnSGFuZGxlID0gU29ydGFibGVIYW5kbGUoKHtjbGFzc05hbWUsIGNoaWxkcmVufSkgPT4gKFxuICA8U3R5bGVkRHJhZ0hhbmRsZSBjbGFzc05hbWU9e2NsYXNzTmFtZX0+e2NoaWxkcmVufTwvU3R5bGVkRHJhZ0hhbmRsZT5cbikpO1xuXG5leHBvcnQgY29uc3QgTGF5ZXJMYWJlbEVkaXRvciA9ICh7bGF5ZXJJZCwgbGFiZWwsIG9uRWRpdH0pID0+IChcbiAgPElubGluZUlucHV0XG4gICAgdHlwZT1cInRleHRcIlxuICAgIGNsYXNzTmFtZT1cImxheWVyX190aXRsZV9fZWRpdG9yXCJcbiAgICB2YWx1ZT17bGFiZWx9XG4gICAgb25DbGljaz17ZSA9PiB7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH19XG4gICAgb25DaGFuZ2U9e29uRWRpdH1cbiAgICBpZD17YCR7bGF5ZXJJZH06aW5wdXQtbGF5ZXItbGFiZWxgfVxuICAvPlxuKTtcblxuZXhwb3J0IGZ1bmN0aW9uIExheWVyVGl0bGVTZWN0aW9uRmFjdG9yeSgpIHtcbiAgY29uc3QgU3R5bGVkTGF5ZXJUaXRsZVNlY3Rpb24gPSBzdHlsZWQuZGl2YFxuICAgIG1hcmdpbi1sZWZ0OiA0cHg7XG5cbiAgICAubGF5ZXJfX3RpdGxlX190eXBlIHtcbiAgICAgIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnN1YnRleHRDb2xvcn07XG4gICAgICBmb250LXNpemU6IDEwcHg7XG4gICAgICBsaW5lLWhlaWdodDogMTJweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjM3cHg7XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTtcbiAgICB9XG4gIGA7XG4gIGNvbnN0IExheWVyVGl0bGVTZWN0aW9uID0gKHtsYXllclR5cGUsIGxheWVySWQsIGxhYmVsLCBvblVwZGF0ZUxheWVyTGFiZWx9KSA9PiAoXG4gICAgPFN0eWxlZExheWVyVGl0bGVTZWN0aW9uIGNsYXNzTmFtZT1cImxheWVyX190aXRsZVwiPlxuICAgICAgPGRpdj5cbiAgICAgICAgPExheWVyTGFiZWxFZGl0b3IgbGF5ZXJJZD17bGF5ZXJJZH0gbGFiZWw9e2xhYmVsfSBvbkVkaXQ9e29uVXBkYXRlTGF5ZXJMYWJlbH0gLz5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJsYXllcl9fdGl0bGVfX3R5cGVcIj5cbiAgICAgICAgICB7bGF5ZXJUeXBlICYmIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPXtgbGF5ZXIudHlwZS4ke2xheWVyVHlwZS50b0xvd2VyQ2FzZSgpfWB9IC8+fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvU3R5bGVkTGF5ZXJUaXRsZVNlY3Rpb24+XG4gICk7XG4gIHJldHVybiBMYXllclRpdGxlU2VjdGlvbjtcbn1cblxuTGF5ZXJQYW5lbEhlYWRlckZhY3RvcnkuZGVwcyA9IFtMYXllclRpdGxlU2VjdGlvbkZhY3RvcnksIFBhbmVsSGVhZGVyQWN0aW9uRmFjdG9yeV07XG5jb25zdCBkZWZhdWx0QWN0aW9uSWNvbnMgPSB7XG4gIHJlbW92ZTogVHJhc2gsXG4gIHZpc2libGU6IEV5ZVNlZW4sXG4gIGhpZGRlbjogRXllVW5zZWVuLFxuICBlbmFibGVDb25maWc6IEFycm93RG93bixcbiAgZHVwbGljYXRlOiBDb3B5XG59O1xuZnVuY3Rpb24gTGF5ZXJQYW5lbEhlYWRlckZhY3RvcnkoTGF5ZXJUaXRsZVNlY3Rpb24sIFBhbmVsSGVhZGVyQWN0aW9uKSB7XG4gIGNvbnN0IExheWVyUGFuZWxIZWFkZXIgPSAoe1xuICAgIGlzQ29uZmlnQWN0aXZlLFxuICAgIGlzRHJhZ05Ecm9wRW5hYmxlZCxcbiAgICBpc1Zpc2libGUsXG4gICAgbGFiZWwsXG4gICAgbGF5ZXJJZCxcbiAgICBsYXllclR5cGUsXG4gICAgbGFiZWxSQ0dDb2xvclZhbHVlcyxcbiAgICBvblRvZ2dsZVZpc2liaWxpdHksXG4gICAgb25VcGRhdGVMYXllckxhYmVsLFxuICAgIG9uVG9nZ2xlRW5hYmxlQ29uZmlnLFxuICAgIG9uRHVwbGljYXRlTGF5ZXIsXG4gICAgb25SZW1vdmVMYXllcixcbiAgICBzaG93UmVtb3ZlTGF5ZXIsXG4gICAgYWN0aW9uSWNvbnMgPSBkZWZhdWx0QWN0aW9uSWNvbnNcbiAgfSkgPT4ge1xuICAgIGNvbnN0IFtpc09wZW4sIHNldE9wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IHRvZ2dsZUxheWVyQ29uZmlndXJhdG9yID0gZSA9PiB7XG4gICAgICBzZXRPcGVuKCFpc09wZW4pO1xuICAgICAgb25Ub2dnbGVFbmFibGVDb25maWcoZSk7XG4gICAgfTtcbiAgICByZXR1cm4gKFxuICAgICAgPFN0eWxlZExheWVyUGFuZWxIZWFkZXJcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc25hbWVzKCdsYXllci1wYW5lbF9faGVhZGVyJywge1xuICAgICAgICAgICdzb3J0LS1oYW5kbGUnOiAhaXNDb25maWdBY3RpdmVcbiAgICAgICAgfSl9XG4gICAgICAgIGFjdGl2ZT17aXNDb25maWdBY3RpdmV9XG4gICAgICAgIGxhYmVsUkNHQ29sb3JWYWx1ZXM9e2xhYmVsUkNHQ29sb3JWYWx1ZXN9XG4gICAgICAgIG9uQ2xpY2s9e3RvZ2dsZUxheWVyQ29uZmlndXJhdG9yfVxuICAgICAgPlxuICAgICAgICA8SGVhZGVyTGFiZWxTZWN0aW9uIGNsYXNzTmFtZT1cImxheWVyLXBhbmVsX19oZWFkZXJfX2NvbnRlbnRcIj5cbiAgICAgICAgICB7aXNEcmFnTkRyb3BFbmFibGVkICYmIChcbiAgICAgICAgICAgIDxEcmFnSGFuZGxlIGNsYXNzTmFtZT1cImxheWVyX19kcmFnLWhhbmRsZVwiPlxuICAgICAgICAgICAgICA8VmVydERvdHMgaGVpZ2h0PVwiMjBweFwiIC8+XG4gICAgICAgICAgICA8L0RyYWdIYW5kbGU+XG4gICAgICAgICAgKX1cbiAgICAgICAgICA8TGF5ZXJUaXRsZVNlY3Rpb25cbiAgICAgICAgICAgIGxheWVySWQ9e2xheWVySWR9XG4gICAgICAgICAgICBsYWJlbD17bGFiZWx9XG4gICAgICAgICAgICBvblVwZGF0ZUxheWVyTGFiZWw9e29uVXBkYXRlTGF5ZXJMYWJlbH1cbiAgICAgICAgICAgIGxheWVyVHlwZT17bGF5ZXJUeXBlfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvSGVhZGVyTGFiZWxTZWN0aW9uPlxuICAgICAgICA8SGVhZGVyQWN0aW9uU2VjdGlvbiBjbGFzc05hbWU9XCJsYXllci1wYW5lbF9faGVhZGVyX19hY3Rpb25zXCI+XG4gICAgICAgICAge3Nob3dSZW1vdmVMYXllciA/IChcbiAgICAgICAgICAgIDxQYW5lbEhlYWRlckFjdGlvblxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJsYXllcl9fcmVtb3ZlLWxheWVyXCJcbiAgICAgICAgICAgICAgaWQ9e2xheWVySWR9XG4gICAgICAgICAgICAgIHRvb2x0aXA9eyd0b29sdGlwLnJlbW92ZUxheWVyJ31cbiAgICAgICAgICAgICAgb25DbGljaz17b25SZW1vdmVMYXllcn1cbiAgICAgICAgICAgICAgdG9vbHRpcFR5cGU9XCJlcnJvclwiXG4gICAgICAgICAgICAgIEljb25Db21wb25lbnQ9e2FjdGlvbkljb25zLnJlbW92ZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPFBhbmVsSGVhZGVyQWN0aW9uXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJsYXllcl9fdmlzaWJpbGl0eS10b2dnbGVcIlxuICAgICAgICAgICAgaWQ9e2xheWVySWR9XG4gICAgICAgICAgICB0b29sdGlwPXtpc1Zpc2libGUgPyAndG9vbHRpcC5oaWRlTGF5ZXInIDogJ3Rvb2x0aXAuc2hvd0xheWVyJ31cbiAgICAgICAgICAgIG9uQ2xpY2s9e29uVG9nZ2xlVmlzaWJpbGl0eX1cbiAgICAgICAgICAgIEljb25Db21wb25lbnQ9e2lzVmlzaWJsZSA/IGFjdGlvbkljb25zLnZpc2libGUgOiBhY3Rpb25JY29ucy5oaWRkZW59XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8UGFuZWxIZWFkZXJBY3Rpb25cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImxheWVyX19kdXBsaWNhdGVcIlxuICAgICAgICAgICAgaWQ9e2xheWVySWR9XG4gICAgICAgICAgICB0b29sdGlwPXsndG9vbHRpcC5kdXBsaWNhdGVMYXllcid9XG4gICAgICAgICAgICBvbkNsaWNrPXtvbkR1cGxpY2F0ZUxheWVyfVxuICAgICAgICAgICAgSWNvbkNvbXBvbmVudD17YWN0aW9uSWNvbnMuZHVwbGljYXRlfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPFBhbmVsSGVhZGVyQWN0aW9uXG4gICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzbmFtZXMoJ2xheWVyX19lbmFibGUtY29uZmlnICcsIHtcbiAgICAgICAgICAgICAgJ2lzLW9wZW4nOiBpc09wZW5cbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgaWQ9e2xheWVySWR9XG4gICAgICAgICAgICB0b29sdGlwPXsndG9vbHRpcC5sYXllclNldHRpbmdzJ31cbiAgICAgICAgICAgIG9uQ2xpY2s9e3RvZ2dsZUxheWVyQ29uZmlndXJhdG9yfVxuICAgICAgICAgICAgSWNvbkNvbXBvbmVudD17YWN0aW9uSWNvbnMuZW5hYmxlQ29uZmlnfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvSGVhZGVyQWN0aW9uU2VjdGlvbj5cbiAgICAgIDwvU3R5bGVkTGF5ZXJQYW5lbEhlYWRlcj5cbiAgICApO1xuICB9O1xuXG4gIExheWVyUGFuZWxIZWFkZXIucHJvcFR5cGVzID0gcHJvcFR5cGVzO1xuICBMYXllclBhbmVsSGVhZGVyLmRlZmF1bHRQcm9wcyA9IGRlZmF1bHRQcm9wcztcblxuICByZXR1cm4gTGF5ZXJQYW5lbEhlYWRlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTGF5ZXJQYW5lbEhlYWRlckZhY3Rvcnk7XG4iXX0=