kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
102 lines (101 loc) • 30.5 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
var _react = _interopRequireDefault(require("react"));
var _reactRedux = require("react-redux");
var _styledComponents = _interopRequireDefault(require("styled-components"));
var _sourceDataSelector = _interopRequireDefault(require("../common/source-data-selector"));
var _fieldSelector = _interopRequireDefault(require("../../common/field-selector"));
var _channelByValueSelector = _interopRequireDefault(require("./channel-by-value-selector"));
var _layerConfigGroup = _interopRequireWildcard(require("./layer-config-group"));
var _layerColorSelector = require("./layer-color-selector");
var _radiusByZoomInput = _interopRequireDefault(require("./radius-by-zoom-input"));
var _visConfigSlider = _interopRequireDefault(require("./vis-config-slider"));
var _visConfigSwitch = _interopRequireDefault(require("./vis-config-switch"));
var _templateObject; // SPDX-License-Identifier: MIT
// Copyright contributors to the kepler.gl project
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
var StyledLayerConfigurator = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n margin-top: 12px;\n"])));
VectorTileLayerConfiguratorFactory.deps = [_channelByValueSelector["default"], _layerColorSelector.LayerColorRangeSelectorFactory, _layerColorSelector.LayerColorSelectorFactory, _layerConfigGroup["default"], _visConfigSlider["default"], _visConfigSwitch["default"], _sourceDataSelector["default"], _fieldSelector["default"]];
function VectorTileLayerConfiguratorFactory(ChannelByValueSelector, LayerColorRangeSelector, LayerColorSelector, LayerConfigGroup, VisConfigSlider, VisConfigSwitch, _SourceDataSelector, FieldSelector) {
var VectorTileLayerConfigurator = function VectorTileLayerConfigurator(_ref) {
var _layer$config$visConf;
var layer = _ref.layer,
visConfiguratorProps = _ref.visConfiguratorProps,
layerChannelConfigProps = _ref.layerChannelConfigProps,
layerConfiguratorProps = _ref.layerConfiguratorProps;
return /*#__PURE__*/_react["default"].createElement(StyledLayerConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, {
label: "layer.fillColor"
}), layerChannelConfigProps.fields ? /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({}, layerChannelConfigProps, {
channel: layer.visualChannels.color
})) : null, layer.config.colorField ? /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(VisConfigSwitch, (0, _extends2["default"])({}, visConfiguratorProps, layer.visConfigSettings.dynamicColor)), /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, (0, _extends2["default"])({}, visConfiguratorProps, {
channel: layer.visualChannels.color
}))) : /*#__PURE__*/_react["default"].createElement(LayerColorSelector, layerConfiguratorProps), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.stroked, visConfiguratorProps, {
label: "layer.strokeColor",
collapsible: true
}), /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({}, layerChannelConfigProps, {
channel: layer.visualChannels.strokeColor
})), layer.config.strokeColorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, (0, _extends2["default"])({}, visConfiguratorProps, {
property: "strokeColorRange",
channel: layer.visualChannels.strokeColor
})) : /*#__PURE__*/_react["default"].createElement(LayerColorSelector, (0, _extends2["default"])({}, visConfiguratorProps, {
selectedColor: layer.config.visConfig.strokeColor,
property: "strokeColor"
})), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.strokeOpacity, visConfiguratorProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, layer.visConfigSettings.stroked, {
label: "layer.strokeWidth",
collapsible: true
}), layer.config.sizeField ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.sizeRange, visConfiguratorProps, {
label: false
})) : /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.strokeWidth, visConfiguratorProps, {
label: false
})), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({}, layerChannelConfigProps, {
channel: layer.visualChannels.size
})))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, layer.visConfigSettings.enable3d, {
collapsible: true
}), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.elevationScale, visConfiguratorProps, {
label: false
})), layerChannelConfigProps.fields ? /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({}, layerChannelConfigProps, {
channel: layer.visualChannels.height
})) : null), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, {
label: 'layer.radius',
description: "Point radius in pixels or meters",
collapsible: true
}), (_layer$config$visConf = layer.config.visConfig.radiusByZoom) !== null && _layer$config$visConf !== void 0 && _layer$config$visConf.enabled && visConfiguratorProps.onChange ? /*#__PURE__*/_react["default"].createElement(_radiusByZoomInput["default"], {
config: layer.config.visConfig.radiusByZoom,
onChange: visConfiguratorProps.onChange,
label: "Radius",
property: "radiusByZoom",
unit: "px"
}) : /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.radius, visConfiguratorProps, {
label: false
})), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, layerChannelConfigProps.fields ? /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({}, layerChannelConfigProps, {
channel: layer.visualChannels.radius
})) : null, /*#__PURE__*/_react["default"].createElement(VisConfigSwitch, (0, _extends2["default"])({}, layer.visConfigSettings.radiusUnits, visConfiguratorProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, {
label: "layer.uniqueIdField"
}), /*#__PURE__*/_react["default"].createElement(FieldSelector, {
fields: layerChannelConfigProps.fields || [],
value: layer.config.uniqueIdField || null,
onSelect: function onSelect(val) {
var _layerConfiguratorPro;
return (_layerConfiguratorPro = layerConfiguratorProps.onChange) === null || _layerConfiguratorPro === void 0 ? void 0 : _layerConfiguratorPro.call(layerConfiguratorProps, {
uniqueIdField: (val === null || val === void 0 ? void 0 : val.name) || null
});
},
placeholder: 'placeholder.selectField',
erasable: true
})));
};
var ConnectedVectorTileLayerConfigurator = (0, _reactRedux.connect)(function (state) {
return state;
})(VectorTileLayerConfigurator);
return ConnectedVectorTileLayerConfigurator;
}
var _default = exports["default"] = VectorTileLayerConfiguratorFactory;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdFJlZHV4IiwiX3N0eWxlZENvbXBvbmVudHMiLCJfc291cmNlRGF0YVNlbGVjdG9yIiwiX2ZpZWxkU2VsZWN0b3IiLCJfY2hhbm5lbEJ5VmFsdWVTZWxlY3RvciIsIl9sYXllckNvbmZpZ0dyb3VwIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfbGF5ZXJDb2xvclNlbGVjdG9yIiwiX3JhZGl1c0J5Wm9vbUlucHV0IiwiX3Zpc0NvbmZpZ1NsaWRlciIsIl92aXNDb25maWdTd2l0Y2giLCJfdGVtcGxhdGVPYmplY3QiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJTdHlsZWRMYXllckNvbmZpZ3VyYXRvciIsInN0eWxlZCIsImRpdiIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwyIiwiVmVjdG9yVGlsZUxheWVyQ29uZmlndXJhdG9yRmFjdG9yeSIsImRlcHMiLCJDaGFubmVsQnlWYWx1ZVNlbGVjdG9yRmFjdG9yeSIsIkxheWVyQ29sb3JSYW5nZVNlbGVjdG9yRmFjdG9yeSIsIkxheWVyQ29sb3JTZWxlY3RvckZhY3RvcnkiLCJMYXllckNvbmZpZ0dyb3VwRmFjdG9yeSIsIlZpc0NvbmZpZ1NsaWRlckZhY3RvcnkiLCJWaXNDb25maWdTd2l0Y2hGYWN0b3J5IiwiU291cmNlRGF0YVNlbGVjdG9yRmFjdG9yeSIsIkZpZWxkU2VsZWN0b3JGYWN0b3J5IiwiQ2hhbm5lbEJ5VmFsdWVTZWxlY3RvciIsIkxheWVyQ29sb3JSYW5nZVNlbGVjdG9yIiwiTGF5ZXJDb2xvclNlbGVjdG9yIiwiTGF5ZXJDb25maWdHcm91cCIsIlZpc0NvbmZpZ1NsaWRlciIsIlZpc0NvbmZpZ1N3aXRjaCIsIl9Tb3VyY2VEYXRhU2VsZWN0b3IiLCJGaWVsZFNlbGVjdG9yIiwiVmVjdG9yVGlsZUxheWVyQ29uZmlndXJhdG9yIiwiX3JlZiIsIl9sYXllciRjb25maWckdmlzQ29uZiIsImxheWVyIiwidmlzQ29uZmlndXJhdG9yUHJvcHMiLCJsYXllckNoYW5uZWxDb25maWdQcm9wcyIsImxheWVyQ29uZmlndXJhdG9yUHJvcHMiLCJjcmVhdGVFbGVtZW50IiwiX2V4dGVuZHMyIiwibGFiZWwiLCJmaWVsZHMiLCJjaGFubmVsIiwidmlzdWFsQ2hhbm5lbHMiLCJjb2xvciIsImNvbmZpZyIsImNvbG9yRmllbGQiLCJGcmFnbWVudCIsInZpc0NvbmZpZ1NldHRpbmdzIiwiZHluYW1pY0NvbG9yIiwib3BhY2l0eSIsInN0cm9rZWQiLCJjb2xsYXBzaWJsZSIsInN0cm9rZUNvbG9yIiwic3Ryb2tlQ29sb3JGaWVsZCIsInByb3BlcnR5Iiwic2VsZWN0ZWRDb2xvciIsInZpc0NvbmZpZyIsIkNvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50Iiwic3Ryb2tlT3BhY2l0eSIsInNpemVGaWVsZCIsInNpemVSYW5nZSIsInN0cm9rZVdpZHRoIiwic2l6ZSIsImVuYWJsZTNkIiwiZWxldmF0aW9uU2NhbGUiLCJoZWlnaHQiLCJkZXNjcmlwdGlvbiIsInJhZGl1c0J5Wm9vbSIsImVuYWJsZWQiLCJvbkNoYW5nZSIsInVuaXQiLCJyYWRpdXMiLCJyYWRpdXNVbml0cyIsInZhbHVlIiwidW5pcXVlSWRGaWVsZCIsIm9uU2VsZWN0IiwidmFsIiwiX2xheWVyQ29uZmlndXJhdG9yUHJvIiwibmFtZSIsInBsYWNlaG9sZGVyIiwiZXJhc2FibGUiLCJDb25uZWN0ZWRWZWN0b3JUaWxlTGF5ZXJDb25maWd1cmF0b3IiLCJjb25uZWN0Iiwic3RhdGUiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2lkZS1wYW5lbC9sYXllci1wYW5lbC92ZWN0b3ItdGlsZS1sYXllci1jb25maWd1cmF0b3IudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge2Nvbm5lY3R9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuXG5pbXBvcnQge1ZlY3RvclRpbGVMYXllcn0gZnJvbSAnQGtlcGxlci5nbC9sYXllcnMnO1xuaW1wb3J0IHtLZXBsZXJUYWJsZSBhcyBLZXBsZXJEYXRhc2V0fSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcblxuaW1wb3J0IFNvdXJjZURhdGFTZWxlY3RvckZhY3RvcnkgZnJvbSAnLi4vY29tbW9uL3NvdXJjZS1kYXRhLXNlbGVjdG9yJztcbmltcG9ydCBGaWVsZFNlbGVjdG9yRmFjdG9yeSBmcm9tICcuLi8uLi9jb21tb24vZmllbGQtc2VsZWN0b3InO1xuaW1wb3J0IENoYW5uZWxCeVZhbHVlU2VsZWN0b3JGYWN0b3J5IGZyb20gJy4vY2hhbm5lbC1ieS12YWx1ZS1zZWxlY3Rvcic7XG5pbXBvcnQgTGF5ZXJDb25maWdHcm91cEZhY3RvcnksIHtDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudH0gZnJvbSAnLi9sYXllci1jb25maWctZ3JvdXAnO1xuaW1wb3J0IHtMYXllckNvbG9yUmFuZ2VTZWxlY3RvckZhY3RvcnksIExheWVyQ29sb3JTZWxlY3RvckZhY3Rvcnl9IGZyb20gJy4vbGF5ZXItY29sb3Itc2VsZWN0b3InO1xuaW1wb3J0IFZpc0NvbmZpZ0J5Wm9vbUlucHV0IGZyb20gJy4vcmFkaXVzLWJ5LXpvb20taW5wdXQnO1xuaW1wb3J0IFZpc0NvbmZpZ1NsaWRlckZhY3RvcnkgZnJvbSAnLi92aXMtY29uZmlnLXNsaWRlcic7XG5pbXBvcnQgVmlzQ29uZmlnU3dpdGNoRmFjdG9yeSBmcm9tICcuL3Zpcy1jb25maWctc3dpdGNoJztcblxuY29uc3QgU3R5bGVkTGF5ZXJDb25maWd1cmF0b3IgPSBzdHlsZWQuZGl2YFxuICBtYXJnaW4tdG9wOiAxMnB4O1xuYDtcblxudHlwZSBHZXRQcm9wczxUIGV4dGVuZHMgKC4uLmFyZ3M6IGFueVtdKSA9PiBSZWFjdC5GQzxhbnk+PiA9IFBhcmFtZXRlcnM8UmV0dXJuVHlwZTxUPj5bMF07XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGxheWVyOiBWZWN0b3JUaWxlTGF5ZXI7XG4gIGRhdGFzZXQ/OiBLZXBsZXJEYXRhc2V0O1xuICB2aXNDb25maWd1cmF0b3JQcm9wczogYW55O1xuICBsYXllckNoYW5uZWxDb25maWdQcm9wczogR2V0UHJvcHM8dHlwZW9mIENoYW5uZWxCeVZhbHVlU2VsZWN0b3JGYWN0b3J5PjtcbiAgbGF5ZXJDb25maWd1cmF0b3JQcm9wczogYW55O1xufTtcblxuVmVjdG9yVGlsZUxheWVyQ29uZmlndXJhdG9yRmFjdG9yeS5kZXBzID0gW1xuICBDaGFubmVsQnlWYWx1ZVNlbGVjdG9yRmFjdG9yeSxcbiAgTGF5ZXJDb2xvclJhbmdlU2VsZWN0b3JGYWN0b3J5LFxuICBMYXllckNvbG9yU2VsZWN0b3JGYWN0b3J5LFxuICBMYXllckNvbmZpZ0dyb3VwRmFjdG9yeSxcbiAgVmlzQ29uZmlnU2xpZGVyRmFjdG9yeSxcbiAgVmlzQ29uZmlnU3dpdGNoRmFjdG9yeSxcbiAgU291cmNlRGF0YVNlbGVjdG9yRmFjdG9yeSxcbiAgRmllbGRTZWxlY3RvckZhY3Rvcnlcbl07XG5cbmZ1bmN0aW9uIFZlY3RvclRpbGVMYXllckNvbmZpZ3VyYXRvckZhY3RvcnkoXG4gIENoYW5uZWxCeVZhbHVlU2VsZWN0b3I6IFJldHVyblR5cGU8dHlwZW9mIENoYW5uZWxCeVZhbHVlU2VsZWN0b3JGYWN0b3J5PixcbiAgTGF5ZXJDb2xvclJhbmdlU2VsZWN0b3I6IFJldHVyblR5cGU8dHlwZW9mIExheWVyQ29sb3JSYW5nZVNlbGVjdG9yRmFjdG9yeT4sXG4gIExheWVyQ29sb3JTZWxlY3RvcjogUmV0dXJuVHlwZTx0eXBlb2YgTGF5ZXJDb2xvclNlbGVjdG9yRmFjdG9yeT4sXG4gIExheWVyQ29uZmlnR3JvdXA6IFJldHVyblR5cGU8dHlwZW9mIExheWVyQ29uZmlnR3JvdXBGYWN0b3J5PixcbiAgVmlzQ29uZmlnU2xpZGVyOiBSZXR1cm5UeXBlPHR5cGVvZiBWaXNDb25maWdTbGlkZXJGYWN0b3J5PixcbiAgVmlzQ29uZmlnU3dpdGNoOiBSZXR1cm5UeXBlPHR5cGVvZiBWaXNDb25maWdTd2l0Y2hGYWN0b3J5PixcbiAgX1NvdXJjZURhdGFTZWxlY3RvcjogUmV0dXJuVHlwZTx0eXBlb2YgU291cmNlRGF0YVNlbGVjdG9yRmFjdG9yeT4sXG4gIEZpZWxkU2VsZWN0b3I6IFJldHVyblR5cGU8dHlwZW9mIEZpZWxkU2VsZWN0b3JGYWN0b3J5PlxuKTogUmVhY3QuRkM8UHJvcHM+IHtcbiAgY29uc3QgVmVjdG9yVGlsZUxheWVyQ29uZmlndXJhdG9yID0gKHtcbiAgICBsYXllcixcbiAgICB2aXNDb25maWd1cmF0b3JQcm9wcyxcbiAgICBsYXllckNoYW5uZWxDb25maWdQcm9wcyxcbiAgICBsYXllckNvbmZpZ3VyYXRvclByb3BzXG4gIH06IFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdHlsZWRMYXllckNvbmZpZ3VyYXRvcj5cbiAgICAgICAgey8qIEZpbGwgQ29sb3IgKi99XG4gICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gbGFiZWw9XCJsYXllci5maWxsQ29sb3JcIj5cbiAgICAgICAgICB7bGF5ZXJDaGFubmVsQ29uZmlnUHJvcHMuZmllbGRzID8gKFxuICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5jb2xvcn1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAge2xheWVyLmNvbmZpZy5jb2xvckZpZWxkID8gKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1N3aXRjaFxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZHluYW1pY0NvbG9yfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8TGF5ZXJDb2xvclJhbmdlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuY29sb3J9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPExheWVyQ29sb3JTZWxlY3RvciB7Li4ubGF5ZXJDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICApfVxuICAgICAgICAgIDxWaXNDb25maWdTbGlkZXIgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLm9wYWNpdHl9IHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuXG4gICAgICAgIHsvKiBTdHJva2UgY29sb3IgKi99XG4gICAgICAgIDxMYXllckNvbmZpZ0dyb3VwXG4gICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnN0cm9rZWR9XG4gICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgIGxhYmVsPVwibGF5ZXIuc3Ryb2tlQ29sb3JcIlxuICAgICAgICAgIGNvbGxhcHNpYmxlXG4gICAgICAgID5cbiAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuc3Ryb2tlQ29sb3J9XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7bGF5ZXIuY29uZmlnLnN0cm9rZUNvbG9yRmllbGQgPyAoXG4gICAgICAgICAgICA8TGF5ZXJDb2xvclJhbmdlU2VsZWN0b3JcbiAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICBwcm9wZXJ0eT1cInN0cm9rZUNvbG9yUmFuZ2VcIlxuICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5zdHJva2VDb2xvcn1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxMYXllckNvbG9yU2VsZWN0b3JcbiAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICBzZWxlY3RlZENvbG9yPXtsYXllci5jb25maWcudmlzQ29uZmlnLnN0cm9rZUNvbG9yfVxuICAgICAgICAgICAgICBwcm9wZXJ0eT1cInN0cm9rZUNvbG9yXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5zdHJva2VPcGFjaXR5fSB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuXG4gICAgICAgIHsvKiBTdHJva2UgV2lkdGggKi99XG4gICAgICAgIDxMYXllckNvbmZpZ0dyb3VwXG4gICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5zdHJva2VkfVxuICAgICAgICAgIGxhYmVsPVwibGF5ZXIuc3Ryb2tlV2lkdGhcIlxuICAgICAgICAgIGNvbGxhcHNpYmxlXG4gICAgICAgID5cbiAgICAgICAgICB7bGF5ZXIuY29uZmlnLnNpemVGaWVsZCA/IChcbiAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnNpemVSYW5nZX1cbiAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5zdHJva2VXaWR0aH1cbiAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5zaXplfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgey8qIEVsZXZhdGlvbiAqL31cbiAgICAgICAgPExheWVyQ29uZmlnR3JvdXBcbiAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmVuYWJsZTNkfVxuICAgICAgICAgIGNvbGxhcHNpYmxlXG4gICAgICAgID5cbiAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZWxldmF0aW9uU2NhbGV9XG4gICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7bGF5ZXJDaGFubmVsQ29uZmlnUHJvcHMuZmllbGRzID8gKFxuICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5oZWlnaHR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgey8qIFJhZGl1cyAqL31cbiAgICAgICAgPExheWVyQ29uZmlnR3JvdXBcbiAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgbGFiZWw9eydsYXllci5yYWRpdXMnfVxuICAgICAgICAgIGRlc2NyaXB0aW9uPVwiUG9pbnQgcmFkaXVzIGluIHBpeGVscyBvciBtZXRlcnNcIlxuICAgICAgICAgIGNvbGxhcHNpYmxlXG4gICAgICAgID5cbiAgICAgICAgICB7bGF5ZXIuY29uZmlnLnZpc0NvbmZpZy5yYWRpdXNCeVpvb20/LmVuYWJsZWQgJiYgdmlzQ29uZmlndXJhdG9yUHJvcHMub25DaGFuZ2UgPyAoXG4gICAgICAgICAgICA8VmlzQ29uZmlnQnlab29tSW5wdXRcbiAgICAgICAgICAgICAgY29uZmlnPXtsYXllci5jb25maWcudmlzQ29uZmlnLnJhZGl1c0J5Wm9vbX1cbiAgICAgICAgICAgICAgb25DaGFuZ2U9e3Zpc0NvbmZpZ3VyYXRvclByb3BzLm9uQ2hhbmdlfVxuICAgICAgICAgICAgICBsYWJlbD1cIlJhZGl1c1wiXG4gICAgICAgICAgICAgIHByb3BlcnR5PVwicmFkaXVzQnlab29tXCJcbiAgICAgICAgICAgICAgdW5pdD1cInB4XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnJhZGl1c31cbiAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG5cbiAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICB7bGF5ZXJDaGFubmVsQ29uZmlnUHJvcHMuZmllbGRzID8gKFxuICAgICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5yYWRpdXN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIDxWaXNDb25maWdTd2l0Y2ggey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnJhZGl1c1VuaXRzfSB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuXG4gICAgICAgIHsvKiBVbmlxdWUgSUQgRmllbGQgKi99XG4gICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gbGFiZWw9XCJsYXllci51bmlxdWVJZEZpZWxkXCI+XG4gICAgICAgICAgPEZpZWxkU2VsZWN0b3JcbiAgICAgICAgICAgIGZpZWxkcz17bGF5ZXJDaGFubmVsQ29uZmlnUHJvcHMuZmllbGRzIHx8IFtdfVxuICAgICAgICAgICAgdmFsdWU9e2xheWVyLmNvbmZpZy51bmlxdWVJZEZpZWxkIHx8IG51bGx9XG4gICAgICAgICAgICBvblNlbGVjdD17KHZhbDogYW55KSA9PlxuICAgICAgICAgICAgICBsYXllckNvbmZpZ3VyYXRvclByb3BzLm9uQ2hhbmdlPy4oe3VuaXF1ZUlkRmllbGQ6IHZhbD8ubmFtZSB8fCBudWxsfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPXsncGxhY2Vob2xkZXIuc2VsZWN0RmllbGQnfVxuICAgICAgICAgICAgZXJhc2FibGVcbiAgICAgICAgICAvPlxuICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG4gICAgICA8L1N0eWxlZExheWVyQ29uZmlndXJhdG9yPlxuICAgICk7XG4gIH07XG5cbiAgY29uc3QgQ29ubmVjdGVkVmVjdG9yVGlsZUxheWVyQ29uZmlndXJhdG9yID0gY29ubmVjdChzdGF0ZSA9PiBzdGF0ZSkoVmVjdG9yVGlsZUxheWVyQ29uZmlndXJhdG9yKTtcbiAgcmV0dXJuIENvbm5lY3RlZFZlY3RvclRpbGVMYXllckNvbmZpZ3VyYXRvcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVmVjdG9yVGlsZUxheWVyQ29uZmlndXJhdG9yRmFjdG9yeTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFdBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLGlCQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFLQSxJQUFBRyxtQkFBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0Es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