kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
624 lines (546 loc) • 81.9 kB
JavaScript
"use strict";
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = MapContainerFactory;
exports.Attribution = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _react = _interopRequireWildcard(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _reactMapGl = _interopRequireDefault(require("react-map-gl"));
var _react2 = _interopRequireDefault(require("@deck.gl/react"));
var _reselect = require("reselect");
var _viewportMercatorProject = _interopRequireDefault(require("viewport-mercator-project"));
var _notificationsUtils = require("../utils/notifications-utils");
var _mapPopover = _interopRequireDefault(require("./map/map-popover"));
var _mapControl = _interopRequireDefault(require("./map/map-control"));
var _styledComponents = require("./common/styled-components");
var _editor = _interopRequireDefault(require("./editor/editor"));
var _mapboxUtils = require("../layers/mapbox-utils");
var _glUtils = require("../utils/gl-utils");
var _mapboxUtils2 = require("../utils/map-style-utils/mapbox-utils");
var _layerUtils = require("../utils/layer-utils");
var _dBuildingLayer = _interopRequireDefault(require("../deckgl-layers/3d-building-layer/3d-building-layer"));
var _defaultSettings = require("../constants/default-settings");
var _errorBoundary = _interopRequireDefault(require("./common/error-boundary"));
var _observeDimensions = require("../utils/observe-dimensions");
var _locales = require("../localization/locales");
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
/** @type {{[key: string]: React.CSSProperties}} */
var MAP_STYLE = {
container: {
display: 'inline-block',
position: 'relative',
width: '100%',
height: '100%'
},
top: {
position: 'absolute',
top: '0px',
pointerEvents: 'none',
width: '100%',
height: '100%'
}
};
var MAPBOXGL_STYLE_UPDATE = 'style.load';
var MAPBOXGL_RENDER = 'render';
var TRANSITION_DURATION = 0;
var Attribution = function Attribution() {
return /*#__PURE__*/_react["default"].createElement(_styledComponents.StyledAttrbution, null, /*#__PURE__*/_react["default"].createElement("div", {
className: "attrition-logo"
}, "Basemap by:", /*#__PURE__*/_react["default"].createElement("a", {
className: "mapboxgl-ctrl-logo",
target: "_blank",
rel: "noopener noreferrer",
href: "https://www.mapbox.com/",
"aria-label": "Mapbox logo"
})), /*#__PURE__*/_react["default"].createElement("div", {
className: "attrition-link"
}, /*#__PURE__*/_react["default"].createElement("a", {
href: "https://kepler.gl/policy/",
target: "_blank",
rel: "noopener noreferrer"
}, "\xA9 kepler.gl |", ' '), /*#__PURE__*/_react["default"].createElement("a", {
href: "https://www.mapbox.com/about/maps/",
target: "_blank",
rel: "noopener noreferrer"
}, "\xA9 Mapbox |", ' '), /*#__PURE__*/_react["default"].createElement("a", {
href: "http://www.openstreetmap.org/copyright",
target: "_blank",
rel: "noopener noreferrer"
}, "\xA9 OpenStreetMap |", ' '), /*#__PURE__*/_react["default"].createElement("a", {
href: "https://www.mapbox.com/map-feedback/",
target: "_blank",
rel: "noopener noreferrer"
}, /*#__PURE__*/_react["default"].createElement("strong", null, "Improve this map"))));
};
exports.Attribution = Attribution;
MapContainerFactory.deps = [_mapPopover["default"], _mapControl["default"], _editor["default"]];
function MapContainerFactory(MapPopover, MapControl, Editor) {
var MapContainer = /*#__PURE__*/function (_Component) {
(0, _inherits2["default"])(MapContainer, _Component);
var _super = _createSuper(MapContainer);
function MapContainer(_props) {
var _this;
(0, _classCallCheck2["default"])(this, MapContainer);
_this = _super.call(this, _props);
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_handleResize", function (dimensions) {
var primary = _this.props.primary;
if (primary) {
var mapStateActions = _this.props.mapStateActions;
if (dimensions && dimensions.width > 0 && dimensions.height > 0) {
mapStateActions.updateMap(dimensions);
}
}
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "layersSelector", function (props) {
return props.layers;
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "layerDataSelector", function (props) {
return props.layerData;
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "mapLayersSelector", function (props) {
return props.mapLayers;
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "layerOrderSelector", function (props) {
return props.layerOrder;
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "layersToRenderSelector", (0, _reselect.createSelector)(_this.layersSelector, _this.layerDataSelector, _this.mapLayersSelector, _layerUtils.prepareLayersToRender));
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "layersForDeckSelector", (0, _reselect.createSelector)(_this.layersSelector, _this.layerDataSelector, _layerUtils.prepareLayersForDeck));
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "filtersSelector", function (props) {
return props.filters;
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "polygonFilters", (0, _reselect.createSelector)(_this.filtersSelector, function (filters) {
return filters.filter(function (f) {
return f.type === _defaultSettings.FILTER_TYPES.polygon;
});
}));
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "mapboxLayersSelector", (0, _reselect.createSelector)(_this.layersSelector, _this.layerDataSelector, _this.layerOrderSelector, _this.layersToRenderSelector, _mapboxUtils.generateMapboxLayers));
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_onCloseMapPopover", function () {
_this.props.visStateActions.onLayerClick(null);
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_onLayerSetDomain", function (idx, colorDomain) {
_this.props.visStateActions.layerConfigChange(_this.props.layers[idx], {
colorDomain: colorDomain
});
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_handleMapToggleLayer", function (layerId) {
var _this$props = _this.props,
_this$props$index = _this$props.index,
mapIndex = _this$props$index === void 0 ? 0 : _this$props$index,
visStateActions = _this$props.visStateActions;
visStateActions.toggleLayerForMap(mapIndex, layerId);
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_onMapboxStyleUpdate", function () {
// force refresh mapboxgl layers
_this.previousLayers = {};
_this._updateMapboxLayers();
if (typeof _this.props.onMapStyleLoaded === 'function') {
_this.props.onMapStyleLoaded(_this._map);
}
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_setMapboxMap", function (mapbox) {
if (!_this._map && mapbox) {
_this._map = mapbox.getMap(); // i noticed in certain context we don't access the actual map element
if (!_this._map) {
return;
} // bind mapboxgl event listener
_this._map.on(MAPBOXGL_STYLE_UPDATE, _this._onMapboxStyleUpdate);
_this._map.on(MAPBOXGL_RENDER, function () {
if (typeof _this.props.onMapRender === 'function') {
_this.props.onMapRender(_this._map);
}
});
}
if (_this.props.getMapboxRef) {
// The parent component can gain access to our MapboxGlMap by
// providing this callback. Note that 'mapbox' will be null when the
// ref is unset (e.g. when a split map is closed).
_this.props.getMapboxRef(mapbox, _this.props.index);
}
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_onBeforeRender", function (_ref) {
var gl = _ref.gl;
(0, _glUtils.setLayerBlending)(gl, _this.props.layerBlending);
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_onDeckError", function (error, layer) {
var errorMessage = "An error in deck.gl: ".concat(error.message, " in ").concat(layer.id);
var notificationId = "".concat(layer.id, "-").concat(error.message); // Throttle error notifications, as React doesn't like too many state changes from here.
_this._deckGLErrorsElapsed = _this._deckGLErrorsElapsed || {};
var lastShown = _this._deckGLErrorsElapsed[notificationId];
if (!lastShown || lastShown < Date.now() - _defaultSettings.THROTTLE_NOTIFICATION_TIME) {
_this._deckGLErrorsElapsed[notificationId] = Date.now(); // Create new error notification or update existing one with same id.
// Update is required to preserve the order of notifications as they probably are going to "jump" based on order of errors.
var uiStateActions = _this.props.uiStateActions;
uiStateActions.addNotification((0, _notificationsUtils.errorNotification)({
message: errorMessage,
id: notificationId
}));
}
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_onViewportChange", function (viewState) {
var width = viewState.width,
height = viewState.height,
restViewState = (0, _objectWithoutProperties2["default"])(viewState, ["width", "height"]);
var primary = _this.props.primary; // react-map-gl sends 0,0 dimensions during initialization
// after we have received proper dimensions from observeDimensions
var next = _objectSpread(_objectSpread({}, width > 0 && height > 0 ? viewState : restViewState), {}, {
// enabling transition in two maps may lead to endless update loops
transitionDuration: primary ? TRANSITION_DURATION : 0
});
if (typeof _this.props.onViewStateChange === 'function') {
_this.props.onViewStateChange(next);
}
_this.props.mapStateActions.updateMap(next);
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_toggleMapControl", function (panelId) {
var _this$props2 = _this.props,
index = _this$props2.index,
uiStateActions = _this$props2.uiStateActions;
uiStateActions.toggleMapControl(panelId, index);
});
_this.previousLayers = {// [layers.id]: mapboxLayerConfig
};
_this._deck = null;
_this._ref = /*#__PURE__*/(0, _react.createRef)();
return _this;
}
(0, _createClass2["default"])(MapContainer, [{
key: "componentDidMount",
value: function componentDidMount() {
(0, _observeDimensions.observeDimensions)(this._ref.current, this._handleResize);
}
}, {
key: "componentWillUnmount",
value: function componentWillUnmount() {
// unbind mapboxgl event listener
if (this._map) {
this._map.off(MAPBOXGL_STYLE_UPDATE);
this._map.off(MAPBOXGL_RENDER);
}
(0, _observeDimensions.unobserveDimensions)(this._ref.current);
}
}, {
key: "_onDeckInitialized",
value: function _onDeckInitialized(gl) {
if (this.props.onDeckInitialized) {
this.props.onDeckInitialized(this._deck, gl);
}
}
}, {
key: "_renderMapPopover",
value:
/* component render functions */
/* eslint-disable complexity */
function _renderMapPopover(layersToRender) {
// TODO: move this into reducer so it can be tested
var _this$props3 = this.props,
mapState = _this$props3.mapState,
hoverInfo = _this$props3.hoverInfo,
clicked = _this$props3.clicked,
datasets = _this$props3.datasets,
interactionConfig = _this$props3.interactionConfig,
layers = _this$props3.layers,
_this$props3$mousePos = _this$props3.mousePos,
mousePosition = _this$props3$mousePos.mousePosition,
coordinate = _this$props3$mousePos.coordinate,
pinned = _this$props3$mousePos.pinned;
if (!mousePosition || !interactionConfig.tooltip) {
return null;
}
var layerHoverProp = (0, _layerUtils.getLayerHoverProp)({
interactionConfig: interactionConfig,
hoverInfo: hoverInfo,
layers: layers,
layersToRender: layersToRender,
datasets: datasets
});
var compareMode = interactionConfig.tooltip.config ? interactionConfig.tooltip.config.compareMode : false;
var pinnedPosition = {};
var layerPinnedProp = null;
if (pinned || clicked) {
// project lnglat to screen so that tooltip follows the object on zoom
var viewport = new _viewportMercatorProject["default"](mapState);
var lngLat = clicked ? clicked.lngLat : pinned.coordinate;
pinnedPosition = this._getHoverXY(viewport, lngLat);
layerPinnedProp = (0, _layerUtils.getLayerHoverProp)({
interactionConfig: interactionConfig,
hoverInfo: clicked,
layers: layers,
layersToRender: layersToRender,
datasets: datasets
});
if (layerHoverProp && layerPinnedProp) {
layerHoverProp.primaryData = layerPinnedProp.data;
layerHoverProp.compareType = interactionConfig.tooltip.config.compareType;
}
}
var commonProp = {
onClose: this._onCloseMapPopover,
zoom: mapState.zoom,
container: this._deck ? this._deck.canvas : undefined
};
return /*#__PURE__*/_react["default"].createElement(_errorBoundary["default"], null, layerPinnedProp && /*#__PURE__*/_react["default"].createElement(MapPopover, (0, _extends2["default"])({}, pinnedPosition, commonProp, {
layerHoverProp: layerPinnedProp,
coordinate: interactionConfig.coordinate.enabled && (pinned || {}).coordinate,
frozen: true,
isBase: compareMode
})), layerHoverProp && (!layerPinnedProp || compareMode) && /*#__PURE__*/_react["default"].createElement(MapPopover, (0, _extends2["default"])({
x: mousePosition[0],
y: mousePosition[1]
}, commonProp, {
layerHoverProp: layerHoverProp,
frozen: false,
coordinate: interactionConfig.coordinate.enabled && coordinate
})));
}
/* eslint-enable complexity */
}, {
key: "_getHoverXY",
value: function _getHoverXY(viewport, lngLat) {
var screenCoord = !viewport || !lngLat ? null : viewport.project(lngLat);
return screenCoord && {
x: screenCoord[0],
y: screenCoord[1]
};
}
}, {
key: "_renderDeckOverlay",
value: function _renderDeckOverlay(layersForDeck) {
var _this$props$deckGlPro,
_this2 = this;
var _this$props4 = this.props,
mapState = _this$props4.mapState,
mapStyle = _this$props4.mapStyle,
layerData = _this$props4.layerData,
layerOrder = _this$props4.layerOrder,
layers = _this$props4.layers,
visStateActions = _this$props4.visStateActions,
mapboxApiAccessToken = _this$props4.mapboxApiAccessToken,
mapboxApiUrl = _this$props4.mapboxApiUrl; // initialise layers from props if exists
var deckGlLayers = ((_this$props$deckGlPro = this.props.deckGlProps) === null || _this$props$deckGlPro === void 0 ? void 0 : _this$props$deckGlPro.layers) || []; // wait until data is ready before render data layers
if (layerData && layerData.length) {
// last layer render first
var dataLayers = layerOrder.slice().reverse().filter(function (idx) {
return layersForDeck[layers[idx].id];
}).reduce(function (overlays, idx) {
var layerCallbacks = {
onSetLayerDomain: function onSetLayerDomain(val) {
return _this2._onLayerSetDomain(idx, val);
}
};
var layerOverlay = (0, _layerUtils.renderDeckGlLayer)(_this2.props, layerCallbacks, idx);
return overlays.concat(layerOverlay || []);
}, []);
deckGlLayers = deckGlLayers.concat(dataLayers);
}
if (mapStyle.visibleLayerGroups['3d building']) {
deckGlLayers.push(new _dBuildingLayer["default"]({
id: '_keplergl_3d-building',
mapboxApiAccessToken: mapboxApiAccessToken,
mapboxApiUrl: mapboxApiUrl,
threeDBuildingColor: mapStyle.threeDBuildingColor,
updateTriggers: {
getFillColor: mapStyle.threeDBuildingColor
}
}));
}
return /*#__PURE__*/_react["default"].createElement(_react2["default"], (0, _extends2["default"])({}, this.props.deckGlProps, {
viewState: mapState,
id: "default-deckgl-overlay",
layers: deckGlLayers,
onBeforeRender: this._onBeforeRender,
onHover: visStateActions.onLayerHover,
onClick: visStateActions.onLayerClick,
onError: this._onDeckError,
ref: function ref(comp) {
if (comp && comp.deck && !_this2._deck) {
_this2._deck = comp.deck;
}
},
onWebGLInitialized: function onWebGLInitialized(gl) {
return _this2._onDeckInitialized(gl);
}
}));
}
}, {
key: "_updateMapboxLayers",
value: function _updateMapboxLayers() {
var mapboxLayers = this.mapboxLayersSelector(this.props);
if (!Object.keys(mapboxLayers).length && !Object.keys(this.previousLayers).length) {
return;
}
(0, _mapboxUtils.updateMapboxLayers)(this._map, mapboxLayers, this.previousLayers);
this.previousLayers = mapboxLayers;
}
}, {
key: "_renderMapboxOverlays",
value: function _renderMapboxOverlays() {
if (this._map && this._map.isStyleLoaded()) {
this._updateMapboxLayers();
}
}
}, {
key: "_renderMap",
value:
/* eslint-disable complexity */
function _renderMap() {
var _this$props5 = this.props,
mapState = _this$props5.mapState,
mapStyle = _this$props5.mapStyle,
mapStateActions = _this$props5.mapStateActions,
layers = _this$props5.layers,
MapComponent = _this$props5.MapComponent,
datasets = _this$props5.datasets,
mapboxApiAccessToken = _this$props5.mapboxApiAccessToken,
mapboxApiUrl = _this$props5.mapboxApiUrl,
mapControls = _this$props5.mapControls,
isExport = _this$props5.isExport,
locale = _this$props5.locale,
uiStateActions = _this$props5.uiStateActions,
visStateActions = _this$props5.visStateActions,
interactionConfig = _this$props5.interactionConfig,
editor = _this$props5.editor,
index = _this$props5.index,
primary = _this$props5.primary;
var layersToRender = this.layersToRenderSelector(this.props);
var layersForDeck = this.layersForDeckSelector(this.props);
var mapProps = _objectSpread(_objectSpread({}, mapState), {}, {
width: '100%',
height: '100%',
preserveDrawingBuffer: true,
mapboxApiAccessToken: mapboxApiAccessToken,
mapboxApiUrl: mapboxApiUrl,
onViewportChange: this._onViewportChange,
transformRequest: _mapboxUtils2.transformRequest
});
var isEdit = (mapControls.mapDraw || {}).active;
var hasGeocoderLayer = layers.find(function (l) {
return l.id === _defaultSettings.GEOCODER_LAYER_ID;
});
var isSplit = Boolean(mapState.isSplit);
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(MapControl, {
datasets: datasets,
availableLocales: Object.keys(_locales.LOCALE_CODES),
dragRotate: mapState.dragRotate,
isSplit: isSplit,
primary: primary,
isExport: isExport,
layers: layers,
layersToRender: layersToRender,
mapIndex: index,
mapControls: mapControls,
readOnly: this.props.readOnly,
scale: mapState.scale || 1,
top: interactionConfig.geocoder && interactionConfig.geocoder.enabled ? 52 : 0,
editor: editor,
locale: locale,
onTogglePerspective: mapStateActions.togglePerspective,
onToggleSplitMap: mapStateActions.toggleSplitMap,
onMapToggleLayer: this._handleMapToggleLayer,
onToggleMapControl: this._toggleMapControl,
onSetEditorMode: visStateActions.setEditorMode,
onSetLocale: uiStateActions.setLocale,
onToggleEditorVisibility: visStateActions.toggleEditorVisibility
}), /*#__PURE__*/_react["default"].createElement(MapComponent, (0, _extends2["default"])({}, mapProps, {
key: "bottom",
ref: this._setMapboxMap,
mapStyle: mapStyle.bottomMapStyle,
getCursor: this.props.hoverInfo ? function () {
return 'pointer';
} : undefined,
onMouseMove: this.props.visStateActions.onMouseMove
}), this._renderDeckOverlay(layersForDeck), this._renderMapboxOverlays(), /*#__PURE__*/_react["default"].createElement(Editor, {
index: index,
datasets: datasets,
editor: editor,
filters: this.polygonFilters(this.props),
isEnabled: isEdit,
layers: layers,
layersToRender: layersToRender,
onDeleteFeature: visStateActions.deleteFeature,
onSelect: visStateActions.setSelectedFeature,
onUpdate: visStateActions.setFeatures,
onTogglePolygonFilter: visStateActions.setPolygonFilterLayer,
style: {
pointerEvents: isEdit ? 'all' : 'none',
position: 'absolute',
display: editor.visible ? 'block' : 'none'
}
})), mapStyle.topMapStyle || hasGeocoderLayer ? /*#__PURE__*/_react["default"].createElement("div", {
style: MAP_STYLE.top
}, /*#__PURE__*/_react["default"].createElement(MapComponent, (0, _extends2["default"])({}, mapProps, {
key: "top",
mapStyle: mapStyle.topMapStyle
}), this._renderDeckOverlay((0, _defineProperty2["default"])({}, _defaultSettings.GEOCODER_LAYER_ID, true)))) : null, this._renderMapPopover(layersToRender), !isSplit || index === 1 ? /*#__PURE__*/_react["default"].createElement(Attribution, null) : null);
}
}, {
key: "render",
value: function render() {
var _this$props6 = this.props,
mapState = _this$props6.mapState,
mapStyle = _this$props6.mapStyle;
return /*#__PURE__*/_react["default"].createElement(_styledComponents.StyledMapContainer, {
ref: this._ref,
style: MAP_STYLE.container,
globe: mapState.globe
}, mapStyle.bottomMapStyle && this._renderMap());
}
}]);
return MapContainer;
}(_react.Component);
(0, _defineProperty2["default"])(MapContainer, "propTypes", {
// required
datasets: _propTypes["default"].object,
interactionConfig: _propTypes["default"].object.isRequired,
layerBlending: _propTypes["default"].string.isRequired,
layerOrder: _propTypes["default"].arrayOf(_propTypes["default"].any).isRequired,
layerData: _propTypes["default"].arrayOf(_propTypes["default"].any).isRequired,
layers: _propTypes["default"].arrayOf(_propTypes["default"].any).isRequired,
filters: _propTypes["default"].arrayOf(_propTypes["default"].any).isRequired,
mapState: _propTypes["default"].object.isRequired,
mapControls: _propTypes["default"].object.isRequired,
mapStyle: _propTypes["default"].object.isRequired,
mousePos: _propTypes["default"].object.isRequired,
mapboxApiAccessToken: _propTypes["default"].string.isRequired,
mapboxApiUrl: _propTypes["default"].string,
visStateActions: _propTypes["default"].object.isRequired,
mapStateActions: _propTypes["default"].object.isRequired,
uiStateActions: _propTypes["default"].object.isRequired,
// optional
primary: _propTypes["default"].bool,
// primary one will be reporting its size to appState
readOnly: _propTypes["default"].bool,
isExport: _propTypes["default"].bool,
clicked: _propTypes["default"].object,
hoverInfo: _propTypes["default"].object,
mapLayers: _propTypes["default"].object,
onMapToggleLayer: _propTypes["default"].func,
onMapStyleLoaded: _propTypes["default"].func,
onMapRender: _propTypes["default"].func,
getMapboxRef: _propTypes["default"].func,
index: _propTypes["default"].number
});
(0, _defineProperty2["default"])(MapContainer, "defaultProps", {
MapComponent: _reactMapGl["default"],
deckGlProps: {},
index: 0,
primary: true
});
MapContainer.displayName = 'MapContainer';
return MapContainer;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL21hcC1jb250YWluZXIuanMiXSwibmFtZXMiOlsiTUFQX1NUWUxFIiwiY29udGFpbmVyIiwiZGlzcGxheSIsInBvc2l0aW9uIiwid2lkdGgiLCJoZWlnaHQiLCJ0b3AiLCJwb2ludGVyRXZlbnRzIiwiTUFQQk9YR0xfU1RZTEVfVVBEQVRFIiwiTUFQQk9YR0xfUkVOREVSIiwiVFJBTlNJVElPTl9EVVJBVElPTiIsIkF0dHJpYnV0aW9uIiwiTWFwQ29udGFpbmVyRmFjdG9yeSIsImRlcHMiLCJNYXBQb3BvdmVyRmFjdG9yeSIsIk1hcENvbnRyb2xGYWN0b3J5IiwiRWRpdG9yRmFjdG9yeSIsIk1hcFBvcG92ZXIiLCJNYXBDb250cm9sIiwiRWRpdG9yIiwiTWFwQ29udGFpbmVyIiwicHJvcHMiLCJkaW1lbnNpb25zIiwicHJpbWFyeSIsIm1hcFN0YXRlQWN0aW9ucyIsInVwZGF0ZU1hcCIsImxheWVycyIsImxheWVyRGF0YSIsIm1hcExheWVycyIsImxheWVyT3JkZXIiLCJsYXllcnNTZWxlY3RvciIsImxheWVyRGF0YVNlbGVjdG9yIiwibWFwTGF5ZXJzU2VsZWN0b3IiLCJwcmVwYXJlTGF5ZXJzVG9SZW5kZXIiLCJwcmVwYXJlTGF5ZXJzRm9yRGVjayIsImZpbHRlcnMiLCJmaWx0ZXJzU2VsZWN0b3IiLCJmaWx0ZXIiLCJmIiwidHlwZSIsIkZJTFRFUl9UWVBFUyIsInBvbHlnb24iLCJsYXllck9yZGVyU2VsZWN0b3IiLCJsYXllcnNUb1JlbmRlclNlbGVjdG9yIiwiZ2VuZXJhdGVNYXBib3hMYXllcnMiLCJ2aXNTdGF0ZUFjdGlvbnMiLCJvbkxheWVyQ2xpY2siLCJpZHgiLCJjb2xvckRvbWFpbiIsImxheWVyQ29uZmlnQ2hhbmdlIiwibGF5ZXJJZCIsImluZGV4IiwibWFwSW5kZXgiLCJ0b2dnbGVMYXllckZvck1hcCIsInByZXZpb3VzTGF5ZXJzIiwiX3VwZGF0ZU1hcGJveExheWVycyIsIm9uTWFwU3R5bGVMb2FkZWQiLCJfbWFwIiwibWFwYm94IiwiZ2V0TWFwIiwib24iLCJfb25NYXBib3hTdHlsZVVwZGF0ZSIsIm9uTWFwUmVuZGVyIiwiZ2V0TWFwYm94UmVmIiwiZ2wiLCJsYXllckJsZW5kaW5nIiwiZXJyb3IiLCJsYXllciIsImVycm9yTWVzc2FnZSIsIm1lc3NhZ2UiLCJpZCIsIm5vdGlmaWNhdGlvbklkIiwiX2RlY2tHTEVycm9yc0VsYXBzZWQiLCJsYXN0U2hvd24iLCJEYXRlIiwibm93IiwiVEhST1RUTEVfTk9USUZJQ0FUSU9OX1RJTUUiLCJ1aVN0YXRlQWN0aW9ucyIsImFkZE5vdGlmaWNhdGlvbiIsInZpZXdTdGF0ZSIsInJlc3RWaWV3U3RhdGUiLCJuZXh0IiwidHJhbnNpdGlvbkR1cmF0aW9uIiwib25WaWV3U3RhdGVDaGFuZ2UiLCJwYW5lbElkIiwidG9nZ2xlTWFwQ29udHJvbCIsIl9kZWNrIiwiX3JlZiIsImN1cnJlbnQiLCJfaGFuZGxlUmVzaXplIiwib2ZmIiwib25EZWNrSW5pdGlhbGl6ZWQiLCJsYXllcnNUb1JlbmRlciIsIm1hcFN0YXRlIiwiaG92ZXJJbmZvIiwiY2xpY2tlZCIsImRhdGFzZXRzIiwiaW50ZXJhY3Rpb25Db25maWciLCJtb3VzZVBvcyIsIm1vdXNlUG9zaXRpb24iLCJjb29yZGluYXRlIiwicGlubmVkIiwidG9vbHRpcCIsImxheWVySG92ZXJQcm9wIiwiY29tcGFyZU1vZGUiLCJjb25maWciLCJwaW5uZWRQb3NpdGlvbiIsImxheWVyUGlubmVkUHJvcCIsInZpZXdwb3J0IiwiV2ViTWVyY2F0b3JWaWV3cG9ydCIsImxuZ0xhdCIsIl9nZXRIb3ZlclhZIiwicHJpbWFyeURhdGEiLCJkYXRhIiwiY29tcGFyZVR5cGUiLCJjb21tb25Qcm9wIiwib25DbG9zZSIsIl9vbkNsb3NlTWFwUG9wb3ZlciIsInpvb20iLCJjYW52YXMiLCJ1bmRlZmluZWQiLCJlbmFibGVkIiwic2NyZWVuQ29vcmQiLCJwcm9qZWN0IiwieCIsInkiLCJsYXllcnNGb3JEZWNrIiwibWFwU3R5bGUiLCJtYXBib3hBcGlBY2Nlc3NUb2tlbiIsIm1hcGJveEFwaVVybCIsImRlY2tHbExheWVycyIsImRlY2tHbFByb3BzIiwibGVuZ3RoIiwiZGF0YUxheWVycyIsInNsaWNlIiwicmV2ZXJzZSIsInJlZHVjZSIsIm92ZXJsYXlzIiwibGF5ZXJDYWxsYmFja3MiLCJvblNldExheWVyRG9tYWluIiwidmFsIiwiX29uTGF5ZXJTZXREb21haW4iLCJsYXllck92ZXJsYXkiLCJjb25jYXQiLCJ2aXNpYmxlTGF5ZXJHcm91cHMiLCJwdXNoIiwiVGhyZWVEQnVpbGRpbmdMYXllciIsInRocmVlREJ1aWxkaW5nQ29sb3IiLCJ1cGRhdGVUcmlnZ2VycyIsImdldEZpbGxDb2xvciIsIl9vbkJlZm9yZVJlbmRlciIsIm9uTGF5ZXJIb3ZlciIsIl9vbkRlY2tFcnJvciIsImNvbXAiLCJkZWNrIiwiX29uRGVja0luaXRpYWxpemVkIiwibWFwYm94TGF5ZXJzIiwibWFwYm94TGF5ZXJzU2VsZWN0b3IiLCJPYmplY3QiLCJrZXlzIiwiaXNTdHlsZUxvYWRlZCIsIk1hcENvbXBvbmVudCIsIm1hcENvbnRyb2xzIiwiaXNFeHBvcnQiLCJsb2NhbGUiLCJlZGl0b3IiLCJsYXllcnNGb3JEZWNrU2VsZWN0b3IiLCJtYXBQcm9wcyIsInByZXNlcnZlRHJhd2luZ0J1ZmZlciIsIm9uVmlld3BvcnRDaGFuZ2UiLCJfb25WaWV3cG9ydENoYW5nZSIsInRyYW5zZm9ybVJlcXVlc3QiLCJpc0VkaXQiLCJtYXBEcmF3IiwiYWN0aXZlIiwiaGFzR2VvY29kZXJMYXllciIsImZpbmQiLCJsIiwiR0VPQ09ERVJfTEFZRVJfSUQiLCJpc1NwbGl0IiwiQm9vbGVhbiIsIkxPQ0FMRV9DT0RFUyIsImRyYWdSb3RhdGUiLCJyZWFkT25seSIsInNjYWxlIiwiZ2VvY29kZXIiLCJ0b2dnbGVQZXJzcGVjdGl2ZSIsInRvZ2dsZVNwbGl0TWFwIiwiX2hhbmRsZU1hcFRvZ2dsZUxheWVyIiwiX3RvZ2dsZU1hcENvbnRyb2wiLCJzZXRFZGl0b3JNb2RlIiwic2V0TG9jYWxlIiwidG9nZ2xlRWRpdG9yVmlzaWJpbGl0eSIsIl9zZXRNYXBib3hNYXAiLCJib3R0b21NYXBTdHlsZSIsIm9uTW91c2VNb3ZlIiwiX3JlbmRlckRlY2tPdmVybGF5IiwiX3JlbmRlck1hcGJveE92ZXJsYXlzIiwicG9seWdvbkZpbHRlcnMiLCJkZWxldGVGZWF0dXJlIiwic2V0U2VsZWN0ZWRGZWF0dXJlIiwic2V0RmVhdHVyZXMiLCJzZXRQb2x5Z29uRmlsdGVyTGF5ZXIiLCJ2aXNpYmxlIiwidG9wTWFwU3R5bGUiLCJfcmVuZGVyTWFwUG9wb3ZlciIsImdsb2JlIiwiX3JlbmRlck1hcCIsIkNvbXBvbmVudCIsIlByb3BUeXBlcyIsIm9iamVjdCIsImlzUmVxdWlyZWQiLCJzdHJpbmciLCJhcnJheU9mIiwiYW55IiwiYm9vbCIsIm9uTWFwVG9nZ2xlTGF5ZXIiLCJmdW5jIiwibnVtYmVyIiwiTWFwYm94R0xNYXAiLCJkaXNwbGF5TmFtZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBcUJBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUdBOztBQUNBOztBQUNBOztBQUVBOztBQUdBOztBQUNBOztBQUNBOztBQUNBOztBQVFBOztBQUNBOztBQU1BOztBQUNBOztBQUNBOzs7Ozs7Ozs7O0FBRUE7QUFDQSxJQUFNQSxTQUFTLEdBQUc7QUFDaEJDLEVBQUFBLFNBQVMsRUFBRTtBQUNUQyxJQUFBQSxPQUFPLEVBQUUsY0FEQTtBQUVUQyxJQUFBQSxRQUFRLEVBQUUsVUFGRDtBQUdUQyxJQUFBQSxLQUFLLEVBQUUsTUFIRTtBQUlUQyxJQUFBQSxNQUFNLEVBQUU7QUFKQyxHQURLO0FBT2hCQyxFQUFBQSxHQUFHLEVBQUU7QUFDSEgsSUFBQUEsUUFBUSxFQUFFLFVBRFA7QUFFSEcsSUFBQUEsR0FBRyxFQUFFLEtBRkY7QUFHSEMsSUFBQUEsYUFBYSxFQUFFLE1BSFo7QUFJSEgsSUFBQUEsS0FBSyxFQUFFLE1BSko7QUFLSEMsSUFBQUEsTUFBTSxFQUFFO0FBTEw7QUFQVyxDQUFsQjtBQWdCQSxJQUFNRyxxQkFBcUIsR0FBRyxZQUE5QjtBQUNBLElBQU1DLGVBQWUsR0FBRyxRQUF4QjtBQUNBLElBQU1DLG1CQUFtQixHQUFHLENBQTVCOztBQUVPLElBQU1DLFdBQVcsR0FBRyxTQUFkQSxXQUFjO0FBQUEsc0JBQ3pCLGdDQUFDLGtDQUFELHFCQUNFO0FBQUssSUFBQSxTQUFTLEVBQUM7QUFBZixpQ0FFRTtBQUNFLElBQUEsU0FBUyxFQUFDLG9CQURaO0FBRUUsSUFBQSxNQUFNLEVBQUMsUUFGVDtBQUdFLElBQUEsR0FBRyxFQUFDLHFCQUhOO0FBSUUsSUFBQSxJQUFJLEVBQUMseUJBSlA7QUFLRSxrQkFBVztBQUxiLElBRkYsQ0FERixlQVdFO0FBQUssSUFBQSxTQUFTLEVBQUM7QUFBZixrQkFDRTtBQUFHLElBQUEsSUFBSSxFQUFDLDJCQUFSO0FBQW9DLElBQUEsTUFBTSxFQUFDLFFBQTNDO0FBQW9ELElBQUEsR0FBRyxFQUFDO0FBQXhELHlCQUNnQixHQURoQixDQURGLGVBSUU7QUFBRyxJQUFBLElBQUksRUFBQyxvQ0FBUjtBQUE2QyxJQUFBLE1BQU0sRUFBQyxRQUFwRDtBQUE2RCxJQUFBLEdBQUcsRUFBQztBQUFqRSxzQkFDYSxHQURiLENBSkYsZUFPRTtBQUFHLElBQUEsSUFBSSxFQUFDLHdDQUFSO0FBQWlELElBQUEsTUFBTSxFQUFDLFFBQXhEO0FBQWlFLElBQUEsR0FBRyxFQUFDO0FBQXJFLDZCQUNvQixHQURwQixDQVBGLGVBVUU7QUFBRyxJQUFBLElBQUksRUFBQyxzQ0FBUjtBQUErQyxJQUFBLE1BQU0sRUFBQyxRQUF0RDtBQUErRCxJQUFBLEdBQUcsRUFBQztBQUFuRSxrQkFDRSxtRUFERixDQVZGLENBWEYsQ0FEeUI7QUFBQSxDQUFwQjs7O0FBNkJQQyxtQkFBbUIsQ0FBQ0MsSUFBcEIsR0FBMkIsQ0FBQ0Msc0JBQUQsRUFBb0JDLHNCQUFwQixFQUF1Q0Msa0JBQXZDLENBQTNCOztBQUVlLFNBQVNKLG1CQUFULENBQTZCSyxVQUE3QixFQUF5Q0MsVUFBekMsRUFBcURDLE1BQXJELEVBQTZEO0FBQUEsTUFDcEVDLFlBRG9FO0FBQUE7O0FBQUE7O0FBMEN4RSwwQkFBWUMsTUFBWixFQUFtQjtBQUFBOztBQUFBO0FBQ2pCLGdDQUFNQSxNQUFOO0FBRGlCLHdHQXdCSCxVQUFBQyxVQUFVLEVBQUk7QUFBQSxZQUNyQkMsT0FEcUIsR0FDVixNQUFLRixLQURLLENBQ3JCRSxPQURxQjs7QUFFNUIsWUFBSUEsT0FBSixFQUFhO0FBQUEsY0FDSkMsZUFESSxHQUNlLE1BQUtILEtBRHBCLENBQ0pHLGVBREk7O0FBRVgsY0FBSUYsVUFBVSxJQUFJQSxVQUFVLENBQUNsQixLQUFYLEdBQW1CLENBQWpDLElBQXNDa0IsVUFBVSxDQUFDakIsTUFBWCxHQUFvQixDQUE5RCxFQUFpRTtBQUMvRG1CLFlBQUFBLGVBQWUsQ0FBQ0MsU0FBaEIsQ0FBMEJILFVBQTFCO0FBQ0Q7QUFDRjtBQUNGLE9BaENrQjtBQUFBLHlHQWtDRixVQUFBRCxLQUFLO0FBQUEsZUFBSUEsS0FBSyxDQUFDSyxNQUFWO0FBQUEsT0FsQ0g7QUFBQSw0R0FtQ0MsVUFBQUwsS0FBSztBQUFBLGVBQUlBLEtBQUssQ0FBQ00sU0FBVjtBQUFBLE9BbkNOO0FBQUEsNEdBb0NDLFVBQUFOLEtBQUs7QUFBQSxlQUFJQSxLQUFLLENBQUNPLFNBQVY7QUFBQSxPQXBDTjtBQUFBLDZHQXFDRSxVQUFBUCxLQUFLO0FBQUEsZUFBSUEsS0FBSyxDQUFDUSxVQUFWO0FBQUEsT0FyQ1A7QUFBQSxpSEFzQ00sOEJBQ3ZCLE1BQUtDLGNBRGtCLEVBRXZCLE1BQUtDLGlCQUZrQixFQUd2QixNQUFLQyxpQkFIa0IsRUFJdkJDLGlDQUp1QixDQXRDTjtBQUFBLGdIQTRDSyw4QkFDdEIsTUFBS0gsY0FEaUIsRUFFdEIsTUFBS0MsaUJBRmlCLEVBR3RCRyxnQ0FIc0IsQ0E1Q0w7QUFBQSwwR0FpREQsVUFBQWIsS0FBSztBQUFBLGVBQUlBLEtBQUssQ0FBQ2MsT0FBVjtBQUFBLE9BakRKO0FBQUEseUdBa0RGLDhCQUFlLE1BQUtDLGVBQXBCLEVBQXFDLFVBQUFELE9BQU87QUFBQSxlQUMzREEsT0FBTyxDQUFDRSxNQUFSLENBQWUsVUFBQUMsQ0FBQztBQUFBLGlCQUFJQSxDQUFDLENBQUNDLElBQUYsS0FBV0MsOEJBQWFDLE9BQTVCO0FBQUEsU0FBaEIsQ0FEMkQ7QUFBQSxPQUE1QyxDQWxERTtBQUFBLCtHQXNESSw4QkFDckIsTUFBS1gsY0FEZ0IsRUFFckIsTUFBS0MsaUJBRmdCLEVBR3JCLE1BQUtXLGtCQUhnQixFQUlyQixNQUFLQyxzQkFKZ0IsRUFLckJDLGlDQUxxQixDQXRESjtBQUFBLDZHQStERSxZQUFNO0FBQ3pCLGNBQUt2QixLQUFMLENBQVd3QixlQUFYLENBQTJCQyxZQUEzQixDQUF3QyxJQUF4QztBQUNELE9BakVrQjtBQUFBLDRHQW1FQyxVQUFDQyxHQUFELEVBQU1DLFdBQU4sRUFBc0I7QUFDeEMsY0FBSzNCLEtBQUwsQ0FBV3dCLGVBQVgsQ0FBMkJJLGlCQUEzQixDQUE2QyxNQUFLNUIsS0FBTCxDQUFXSyxNQUFYLENBQWtCcUIsR0FBbEIsQ0FBN0MsRUFBcUU7QUFDbkVDLFVBQUFBLFdBQVcsRUFBWEE7QUFEbUUsU0FBckU7QUFHRCxPQXZFa0I7QUFBQSxnSEF5RUssVUFBQUUsT0FBTyxFQUFJO0FBQUEsMEJBQ2MsTUFBSzdCLEtBRG5CO0FBQUEsNENBQzFCOEIsS0FEMEI7QUFBQSxZQUNuQkMsUUFEbUIsa0NBQ1IsQ0FEUTtBQUFBLFlBQ0xQLGVBREssZUFDTEEsZUFESztBQUVqQ0EsUUFBQUEsZUFBZSxDQUFDUSxpQkFBaEIsQ0FBa0NELFFBQWxDLEVBQTRDRixPQUE1QztBQUNELE9BNUVrQjtBQUFBLCtHQThFSSxZQUFNO0FBQzNCO0FBQ0EsY0FBS0ksY0FBTCxHQUFzQixFQUF0Qjs7QUFDQSxjQUFLQyxtQkFBTDs7QUFFQSxZQUFJLE9BQU8sTUFBS2xDLEtBQUwsQ0FBV21DLGdCQUFsQixLQUF1QyxVQUEzQyxFQUF1RDtBQUNyRCxnQkFBS25DLEtBQUwsQ0FBV21DLGdCQUFYLENBQTRCLE1BQUtDLElBQWpDO0FBQ0Q7QUFDRixPQXRGa0I7QUFBQSx3R0F3RkgsVUFBQUMsTUFBTSxFQUFJO0FBQ3hCLFlBQUksQ0FBQyxNQUFLRCxJQUFOLElBQWNDLE1BQWxCLEVBQTBCO0FBQ3hCLGdCQUFLRCxJQUFMLEdBQVlDLE1BQU0sQ0FBQ0MsTUFBUCxFQUFaLENBRHdCLENBRXhCOztBQUNBLGNBQUksQ0FBQyxNQUFLRixJQUFWLEVBQWdCO0FBQ2Q7QUFDRCxXQUx1QixDQU14Qjs7O0FBQ0EsZ0JBQUtBLElBQUwsQ0FBVUcsRUFBVixDQUFhcEQscUJBQWIsRUFBb0MsTUFBS3FELG9CQUF6Qzs7QUFFQSxnQkFBS0osSUFBTCxDQUFVRyxFQUFWLENBQWFuRCxlQUFiLEVBQThCLFlBQU07QUFDbEMsZ0JBQUksT0FBTyxNQUFLWSxLQUFMLENBQVd5QyxXQUFsQixLQUFrQyxVQUF0QyxFQUFrRDtBQUNoRCxvQkFBS3pDLEtBQUwsQ0FBV3lDLFdBQVgsQ0FBdUIsTUFBS0wsSUFBNUI7QUFDRDtBQUNGLFdBSkQ7QUFLRDs7QUFFRCxZQUFJLE1BQUtwQyxLQUFMLENBQVcwQyxZQUFmLEVBQTZCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLGdCQUFLMUMsS0FBTCxDQUFXMEMsWUFBWCxDQUF3QkwsTUFBeEIsRUFBZ0MsTUFBS3JDLEtBQUwsQ0FBVzhCLEtBQTNDO0FBQ0Q7QUFDRixPQS9Ha0I7QUFBQSwwR0F1SEQsZ0JBQVU7QUFBQSxZQUFSYSxFQUFRLFFBQVJBLEVBQVE7QUFDMUIsdUNBQWlCQSxFQUFqQixFQUFxQixNQUFLM0MsS0FBTCxDQUFXNEMsYUFBaEM7QUFDRCxPQXpIa0I7QUFBQSx1R0EySEosVUFBQ0MsS0FBRCxFQUFRQyxLQUFSLEVBQWtCO0FBQy9CLFlBQU1DLFlBQVksa0NBQTJCRixLQUFLLENBQUNHLE9BQWpDLGlCQUErQ0YsS0FBSyxDQUFDRyxFQUFyRCxDQUFsQjtBQUNBLFlBQU1DLGNBQWMsYUFBTUosS0FBSyxDQUFDRyxFQUFaLGNBQWtCSixLQUFLLENBQUNHLE9BQXhCLENBQXBCLENBRitCLENBSS9COztBQUNBLGNBQUtHLG9CQUFMLEdBQTRCLE1BQUtBLG9CQUFMLElBQTZCLEVBQXpEO0FBQ0EsWUFBTUMsU0FBUyxHQUFHLE1BQUtELG9CQUFMLENBQTBCRCxjQUExQixDQUFsQjs7QUFDQSxZQUFJLENBQUNFLFNBQUQsSUFBY0EsU0FBUyxHQUFHQyxJQUFJLENBQUNDLEdBQUwsS0FBYUMsMkNBQTNDLEVBQXVFO0FBQ3JFLGdCQUFLSixvQkFBTCxDQUEwQkQsY0FBMUIsSUFBNENHLElBQUksQ0FBQ0MsR0FBTCxFQUE1QyxDQURxRSxDQUdyRTtBQUNBOztBQUpxRSxjQUs5REUsY0FMOEQsR0FLNUMsTUFBS3hELEtBTHVDLENBSzlEd0QsY0FMOEQ7QUFNckVBLFVBQUFBLGNBQWMsQ0FBQ0MsZUFBZixDQUNFLDJDQUFrQjtBQUNoQlQsWUFBQUEsT0FBTyxFQUFFRCxZQURPO0FBRWhCRSxZQUFBQSxFQUFFLEVBQUVDO0FBRlksV0FBbEIsQ0FERjtBQU1EO0FBQ0YsT0EvSWtCO0FBQUEsNEdBOFRDLFVBQUFRLFNBQVMsRUFBSTtBQUFBLFlBQ3hCM0UsS0FEd0IsR0FDVzJFLFNBRFgsQ0FDeEIzRSxLQUR3QjtBQUFBLFlBQ2pCQyxNQURpQixHQUNXMEUsU0FEWCxDQUNqQjFFLE1BRGlCO0FBQUEsWUFDTjJFLGFBRE0sNkNBQ1dELFNBRFg7QUFBQSxZQUV4QnhELE9BRndCLEdBRWIsTUFBS0YsS0FGUSxDQUV4QkUsT0FGd0IsRUFHL0I7QUFDQTs7QUFDQSxZQUFNMEQsSUFBSSxtQ0FDSjdFLEtBQUssR0FBRyxDQUFSLElBQWFDLE1BQU0sR0FBRyxDQUF0QixHQUEwQjBFLFNBQTFCLEdBQXNDQyxhQURsQztBQUVSO0FBQ0FFLFVBQUFBLGtCQUFrQixFQUFFM0QsT0FBTyxHQUFHYixtQkFBSCxHQUF5QjtBQUg1QyxVQUFWOztBQUtBLFlBQUksT0FBTyxNQUFLVyxLQUFMLENBQVc4RCxpQkFBbEIsS0FBd0MsVUFBNUMsRUFBd0Q7QUFDdEQsZ0JBQUs5RCxLQUFMLENBQVc4RCxpQkFBWCxDQUE2QkYsSUFBN0I7QUFDRDs7QUFDRCxjQUFLNUQsS0FBTCxDQUFXRyxlQUFYLENBQTJCQyxTQUEzQixDQUFxQ3dELElBQXJDO0FBQ0QsT0E1VWtCO0FBQUEsNEdBOFVDLFVBQUFHLE9BQU8sRUFBSTtBQUFBLDJCQUNHLE1BQUsvRCxLQURSO0FBQUEsWUFDdEI4QixLQURzQixnQkFDdEJBLEtBRHNCO0FBQUEsWUFDZjBCLGNBRGUsZ0JBQ2ZBLGNBRGU7QUFHN0JBLFFBQUFBLGNBQWMsQ0FBQ1EsZ0JBQWYsQ0FBZ0NELE9BQWhDLEVBQXlDakMsS0FBekM7QUFDRCxPQWxWa0I7QUFHakIsWUFBS0csY0FBTCxHQUFzQixDQUNwQjtBQURvQixPQUF0QjtBQUlBLFlBQUtnQyxLQUFMLEdBQWEsSUFBYjtBQUNBLFlBQUtDLElBQUwsZ0JBQVksdUJBQVo7QUFSaUI7QUFTbEI7O0FBbkR1RTtBQUFBO0FBQUEsYUFxRHhFLDZCQUFvQjtBQUNsQixrREFBa0IsS0FBS0EsSUFBTCxDQUFVQyxPQUE1QixFQUFxQyxLQUFLQyxhQUExQztBQUNEO0FBdkR1RTtBQUFBO0FBQUEsYUF5RHhFLGdDQUF1QjtBQUNyQjtBQUNBLFlBQUksS0FBS2hDLElBQVQsRUFBZTtBQUNiLGVBQUtBLElBQUwsQ0FBVWlDLEdBQVYsQ0FBY2xGLHFCQUFkOztBQUNBLGVBQUtpRCxJQUFMLENBQVVpQyxHQUFWLENBQWNqRixlQUFkO0FBQ0Q7O0FBQ0Qsb0RBQW9CLEtBQUs4RSxJQUFMLENBQVVDLE9BQTlCO0FBQ0Q7QUFoRXVFO0FBQUE7QUFBQSxhQTJKeEUsNEJBQW1CeEIsRUFBbkIsRUFBdUI7QUFDckIsWUFBSSxLQUFLM0MsS0FBTCxDQUFXc0UsaUJBQWYsRUFBa0M7QUFDaEMsZUFBS3RFLEtBQUwsQ0FBV3NFLGlCQUFYLENBQTZCLEtBQUtMLEtBQWxDLEVBQXlDdEIsRUFBekM7QUFDRDtBQUNGO0FBL0p1RTtBQUFBO0FBQUE7QUEyTHhFOztBQUVBO0FBQ0EsaUNBQWtCNEIsY0FBbEIsRUFBa0M7QUFDaEM7QUFEZ0MsMkJBVTVCLEtBQUt2RSxLQVZ1QjtBQUFBLFlBRzlCd0UsUUFIOEIsZ0JBRzlCQSxRQUg4QjtBQUFBLFlBSTlCQyxTQUo4QixnQkFJOUJBLFNBSjhCO0FBQUEsWUFLOUJDLE9BTDhCLGdCQUs5QkEsT0FMOEI7QUFBQSxZQU05QkMsUUFOOEIsZ0JBTTlCQSxRQU44QjtBQUFBLFlBTzlCQyxpQkFQOEIsZ0JBTzlCQSxpQkFQOEI7QUFBQSxZQVE5QnZFLE1BUjhCLGdCQVE5QkEsTUFSOEI7QUFBQSxpREFTOUJ3RSxRQVQ4QjtBQUFBLFlBU25CQyxhQVRtQix5QkFTbkJBLGFBVG1CO0FBQUEsWUFTSkMsVUFUSSx5QkFTSkEsVUFUSTtBQUFBLFlBU1FDLE1BVFIseUJBU1FBLE1BVFI7O0FBWWhDLFlBQUksQ0FBQ0YsYUFBRCxJQUFrQixDQUFDRixpQkFBaUIsQ0FBQ0ssT0FBekMsRUFBa0Q7QUFDaEQsaUJBQU8sSUFBUDtBQUNEOztBQUVELFlBQU1DLGNBQWMsR0FBRyxtQ0FBa0I7QUFDdkNOLFVBQUFBLGlCQUFpQixFQUFqQkEsaUJBRHVDO0FBRXZDSCxVQUFBQSxTQUFTLEVBQVRBLFNBRnVDO0FBR3ZDcEUsVUFBQUEsTUFBTSxFQUFOQSxNQUh1QztBQUl2Q2tFLFVBQUFBLGNBQWMsRUFBZEEsY0FKdUM7QUFLdkNJLFVBQUFBLFFBQVEsRUFBUkE7QUFMdUMsU0FBbEIsQ0FBdkI7QUFRQSxZQUFNUSxXQUFXLEdBQUdQLGlCQUFpQixDQUFDSyxPQUFsQixDQUEwQkcsTUFBMUIsR0FDaEJSLGlCQUFpQixDQUFDSyxPQUFsQixDQUEwQkcsTUFBMUIsQ0FBaUNELFdBRGpCLEdBRWhCLEtBRko7QUFJQSxZQUFJRSxjQUFjLEdBQUcsRUFBckI7QUFDQSxZQUFJQyxlQUFlLEdBQUcsSUFBdEI7O0FBQ0EsWUFBSU4sTUFBTSxJQUFJTixPQUFkLEVBQXVCO0FBQ3JCO0FBQ0EsY0FBTWEsUUFBUSxHQUFHLElBQUlDLG1DQUFKLENBQXdCaEIsUUFBeEIsQ0FBakI7QUFDQSxjQUFNaUIsTUFBTSxHQUFHZixPQUFPLEdBQUdBLE9BQU8sQ0FBQ2UsTUFBWCxHQUFvQlQsTUFBTSxDQUFDRCxVQUFqRDtBQUNBTSxVQUFBQSxjQUFjLEdBQUcsS0FBS0ssV0FBTCxDQUFpQkgsUUFBakIsRUFBMkJFLE1BQTNCLENBQWpCO0FBQ0FILFVBQUFBLGVBQWUsR0FBRyxtQ0FBa0I7QUFDbENWLFlBQUFBLGlCQUFpQixFQUFqQkEsaUJBRGtDO0FBRWxDSCxZQUFBQSxTQUFTLEVBQUVDLE9BRnVCO0FBR2xDckUsWUFBQUEsTUFBTSxFQUFOQSxNQUhrQztBQUlsQ2tFLFlBQUFBLGNBQWMsRUFBZEEsY0FKa0M7QUFLbENJLFlBQUFBLFFBQVEsRUFBUkE7QUFMa0MsV0FBbEIsQ0FBbEI7O0FBT0EsY0FBSU8sY0FBYyxJQUFJSSxlQUF0QixFQUF1QztBQUNyQ0osWUFBQUEsY0FBYyxDQUFDUyxXQUFmLEdBQTZCTCxlQUFlLENBQUNNLElBQTdDO0FBQ0FWLFlBQUFBLGNBQWMsQ0FBQ1csV0FBZixHQUE2QmpCLGlCQUFpQixDQUFDSyxPQUFsQixDQUEwQkcsTUFBMUIsQ0FBaUNTLFdBQTlEO0FBQ0Q7QUFDRjs7QUFFRCxZQUFNQyxVQUFVLEdBQUc7QUFDakJDLFVBQUFBLE9BQU8sRUFBRSxLQUFLQyxrQkFERztBQUVqQkMsVUFBQUEsSUFBSSxFQUFFekIsUUFBUSxDQUFDeUIsSUFGRTtBQUdqQnJILFVBQUFBLFNBQVMsRUFBRSxLQUFLcUYsS0FBTCxHQUFhLEtBQUtBLEtBQUwsQ0FBV2lDLE1BQXhCLEdBQWlDQztBQUgzQixTQUFuQjtBQU1BLDRCQUNFLGdDQUFDLHlCQUFELFFBQ0diLGVBQWUsaUJBQ2QsZ0NBQUMsVUFBRCxnQ0FDTUQsY0FETixFQUVNUyxVQUZOO0FBR0UsVUFBQSxjQUFjLEVBQUVSLGVBSGxCO0FBSUUsVUFBQSxVQUFVLEVBQUVWLGlCQUFpQixDQUFDRyxVQUFsQixDQUE2QnFCLE9BQTdCLElBQXdDLENBQUNwQixNQUFNLElBQUksRUFBWCxFQUFlRCxVQUpyRTtBQUtFLFVBQUEsTUFBTSxFQUFFLElBTFY7QUFNRSxVQUFBLE1BQU0sRUFBRUk7QUFOVixXQUZKLEVBV0dELGNBQWMsS0FBSyxDQUFDSSxlQUFELElBQW9CSCxXQUF6QixDQUFkLGlCQUNDLGdDQUFDLFVBQUQ7QUFDRSxVQUFBLENBQUMsRUFBRUwsYUFBYSxDQUFDLENBQUQsQ0FEbEI7QUFFRSxVQUFBLENBQUMsRUFBRUEsYUFBYSxDQUFDLENBQUQ7QUFGbEIsV0FHTWdCLFVBSE47QUFJRSxVQUFBLGNBQWMsRUFBRVosY0FKbEI7QUFLRSxVQUFBLE1BQU0sRUFBRSxLQUxWO0FBTUUsVUFBQSxVQUFVLEVBQUVOLGlCQUFpQixDQUFDRyxVQUFsQixDQUE2QnFCLE9BQTdCLElBQXdDckI7QUFOdEQsV0FaSixDQURGO0FBd0JEO0FBRUQ7O0FBOVF3RTtBQUFBO0FBQUEsYUFnUnhFLHFCQUFZUSxRQUFaLEVBQXNCRSxNQUF0QixFQUE4QjtBQUM1QixZQUFNWSxXQUFXLEdBQUcsQ0FBQ2QsUUFBRCxJQUFhLENBQUNFLE1BQWQsR0FBdUIsSUFBdkIsR0FBOEJGLFFBQVEsQ0FBQ2UsT0FBVCxDQUFpQmIsTUFBakIsQ0FBbEQ7QUFDQSxlQUFPWSxXQUFXLElBQUk7QUFBQ0UsVUFBQUEsQ0FBQyxFQUFFRixXQUFXLENBQUMsQ0FBRCxDQUFmO0FBQW9CRyxVQUFBQSxDQUFDLEVBQUVILFdBQVcsQ0FBQyxDQUFEO0FBQWxDLFNBQXRCO0FBQ0Q7QUFuUnVFO0FBQUE7QUFBQSxhQXFSeEUsNEJBQW1CSSxhQUFuQixFQUFrQztBQUFBO0FBQUE7O0FBQUEsMkJBVTVCLEtBQUt6RyxLQVZ1QjtBQUFBLFlBRTlCd0UsUUFGOEIsZ0JBRTlCQSxRQUY4QjtBQUFBLFlBRzlCa0MsUUFIOEIsZ0JBRzlCQSxRQUg4QjtBQUFBLFlBSTlCcEcsU0FKOEIsZ0JBSTlCQSxTQUo4QjtBQUFBLFlBSzlCRSxVQUw4QixnQkFLOUJBLFVBTDhCO0FBQUEsWUFNOUJILE1BTjhCLGdCQU05QkEsTUFOOEI7QUFBQSxZQU85Qm1CLGVBUDhCLGdCQU85QkEsZUFQOEI7QUFBQSxZQVE5Qm1GLG9CQVI4QixnQkFROUJBLG9CQVI4QjtBQUFBLFlBUzlCQyxZQVQ4QixnQkFTOUJBLFlBVDhCLEVBWWhDOztBQUNBLFlBQUlDLFlBQVksR0FBRywrQkFBSzdHLEtBQUwsQ0FBVzhHLFdBQVgsZ0ZBQXdCekcsTUFBeEIsS0FBa0MsRUFBckQsQ0FiZ0MsQ0FlaEM7O0FBQ0EsWUFBSUMsU0FBUyxJQUFJQSxTQUFTLENBQUN5RyxNQUEzQixFQUFtQztBQUNqQztBQUNBLGNBQU1DLFVBQVUsR0FBR3hHLFVBQVUsQ0FDMUJ5RyxLQURnQixHQUVoQkMsT0FGZ0IsR0FHaEJsRyxNQUhnQixDQUdULFVBQUFVLEdBQUc7QUFBQSxtQkFBSStFLGFBQWEsQ0FBQ3BHLE1BQU0sQ0FBQ3FCLEdBQUQsQ0FBTixDQUFZdUIsRUFBYixDQUFqQjtBQUFBLFdBSE0sRUFJaEJrRSxNQUpnQixDQUlULFVBQUNDLFFBQUQsRUFBVzFGLEdBQVgsRUFBbUI7QUFDekIsZ0JBQU0yRixjQUFjLEdBQUc7QUFDckJDLGNBQUFBLGdCQUFnQixFQUFFLDBCQUFBQyxHQUFHO0FBQUEsdUJBQUksTUFBSSxDQUFDQyxpQkFBTCxDQUF1QjlGLEdBQXZCLEVBQTRCNkYsR0FBNUIsQ0FBSjtBQUFBO0FBREEsYUFBdkI7QUFHQSxnQkFBTUUsWUFBWSxHQUFHLG1DQUFrQixNQUFJLENBQUN6SCxLQUF2QixFQUE4QnFILGNBQTlCLEVBQThDM0YsR0FBOUMsQ0FBckI7QUFDQSxtQkFBTzBGLFFBQVEsQ0FBQ00sTUFBVCxDQUFnQkQsWUFBWSxJQUFJLEVBQWhDLENBQVA7QUFDRCxXQVZnQixFQVVkLEVBVmMsQ0FBbkI7QUFXQVosVUFBQUEsWUFBWSxHQUFHQSxZQUFZLENBQUNhLE1BQWIsQ0FBb0JWLFVBQXBCLENBQWY7QUFDRDs7QUFFRCxZQUFJTixRQUFRLENBQUNpQixrQkFBVCxDQUE0QixhQUE1QixDQUFKLEVBQWdEO0FBQzlDZCxVQUFBQSxZQUFZLENBQUNlLElBQWIsQ0FDRSxJQUFJQywwQkFBSixDQUF3QjtBQUN0QjVFLFlBQUFBLEVBQUUsRUFBRSx1QkFEa0I7QUFFdEIwRCxZQUFBQSxvQkFBb0IsRUFBcEJBLG9CQUZzQjtBQUd0QkMsWUFBQUEsWUFBWSxFQUFaQSxZQUhzQjtBQUl0QmtCLFlBQUFBLG1CQUFtQixFQUFFcEIsUUFBUSxDQUFDb0IsbUJBSlI7QUFLdEJDLFlBQUFBLGNBQWMsRUFBRTtBQUNkQyxjQUFBQSxZQUFZLEVBQUV0QixRQUFRLENBQUNvQjtBQURUO0FBTE0sV0FBeEIsQ0FERjtBQVdEOztBQUVELDRCQUNFLGdDQUFDLGtCQUFELGdDQUNNLEtBQUs5SCxLQUFMLENBQVc4RyxXQURqQjtBQUVFLFVBQUEsU0FBUyxFQUFFdEMsUUFGYjtBQUdFLFVBQUEsRUFBRSxFQUFDLHdCQUhMO0FBSUUsVUFBQSxNQUFNLEVBQUVxQyxZQUpWO0FBS0UsVUFBQSxjQUFjLEVBQUUsS0FBS29CLGVBTHZCO0FBTUUsVUFBQSxPQUFPLEVBQUV6RyxlQUFlLENBQUMwRyxZQU4zQjtBQU9FLFVBQUEsT0FBTyxFQUFFMUcsZUFBZSxDQUFDQyxZQVAzQjtBQVFFLFVBQUEsT0FBTyxFQUFFLEtBQUswRyxZQVJoQjtBQVNFLFVBQUEsR0FBRyxFQUFFLGFBQUFDLElBQUksRUFBSTtBQUNYLGdCQUFJQSxJQUFJLElBQUlBLElBQUksQ0FBQ0MsSUFBYixJQUFxQixDQUFDLE1BQUksQ0FBQ3BFLEtBQS9CLEVBQXNDO0FBQ3BDLGNBQUEsTUFBSSxDQUFDQSxLQUFMLEdBQWFtRSxJQUFJLENBQUNDLElBQWxCO0FBQ0Q7QUFDRixXQWJIO0FBY0UsVUFBQSxrQkFBa0IsRUFBRSw0QkFBQTFGLEVBQUU7QUFBQSxtQkFBSSxNQUFJLENBQUMyRixrQkFBTCxDQUF3QjNGLEVBQXhCLENBQUo7QUFBQTtBQWR4QixXQURGO0FBa0JEO0FBclZ1RTtBQUFBO0FBQUEsYUF1VnhFLCtCQUFzQjtBQUNwQixZQUFNNEYsWUFBWSxHQUFHLEtBQUtDLG9CQUFMLENBQTBCLEtBQUt4SSxLQUEvQixDQUFyQjs7QUFDQSxZQUFJLENBQUN5SSxNQUFNLENBQUNDLElBQVAsQ0FBWUgsWUFBWixFQUEwQnhCLE1BQTNCLElBQXFDLENBQUMwQixNQUFNLENBQUNDLElBQVAsQ0FBWSxLQUFLekcsY0FBakIsRUFBaUM4RSxNQUEzRSxFQUFtRjtBQUNqRjtBQUNEOztBQUVELDZDQUFtQixLQUFLM0UsSUFBeEIsRUFBOEJtRyxZQUE5QixFQUE0QyxLQUFLdEcsY0FBakQ7QUFFQSxhQUFLQSxjQUFMLEdBQXNCc0csWUFBdEI7QUFDRDtBQWhXdUU7QUFBQTtBQUFBLGFBa1d4RSxpQ0FBd0I7QUFDdEIsWUFBSSxLQUFLbkcsSUFBTCxJQUFhLEtBQUtBLElBQUwsQ0FBVXVHLGFBQVYsRUFBakIsRUFBNEM7QUFDMUMsZUFBS3pHLG1CQUFMO0FBQ0Q7QUFDRjtBQXRXdUU7QUFBQTtBQUFBO0FBOFh4RTtBQUNBLDRCQUFhO0FBQUEsMkJBbUJQLEtBQUtsQyxLQW5CRTtBQUFBLFlBRVR3RSxRQUZTLGdCQUVUQSxRQUZTO0FBQUEsWUFHVGtDLFFBSFMsZ0JBR1RBLFFBSFM7QUFBQSxZQUlUdkcsZUFKUyxnQkFJVEEsZUFKUztBQUFBLFlBS1RFLE1BTFMsZ0JBS1RBLE1BTFM7QUFBQSxZQU1UdUksWUFOUyxnQkFNVEEsWUFOUztBQUFBLFlBT1RqRSxRQVBTLGdCQU9UQSxRQVBTO0FBQUEsWUFRVGdDLG9CQVJTLGdCQVFUQSxvQkFSUztBQUFBLFlBU1RDLFlBVFMsZ0JBU1RBLFlBVFM7QUFBQSxZQVVUaUMsV0FWUyxnQkFVVEEsV0FWUztBQUFBLFlBV1RDLFFBWFMsZ0JBV1RBLFFBWFM7QUFBQSxZQVlUQyxNQVpTLGdCQVlUQSxNQVpTO0FBQUEsWUFhVHZGLGNBYlMsZ0JBYVRBLGNBYlM7QUFBQSxZQWNUaEMsZUFkUyxnQkFjVEEsZUFkUztBQUFBLFlBZVRvRCxpQkFmUyxnQkFlVEEsaUJBZlM7QUFBQSxZQWdCVG9FLE1BaEJTLGdCQWdCVEEsTUFoQlM7QUFBQSxZQWlCVGxILEtBakJTLGdCQWlCVEEsS0FqQlM7QUFBQSxZQWtCVDVCLE9BbEJTLGdCQWtCVEEsT0FsQlM7QUFxQlgsWUFBTXFFLGNBQWMsR0FBRyxLQUFLakQsc0JBQUwsQ0FBNEIsS0FBS3RCLEtBQWpDLENBQXZCO0FBQ0EsWUFBTXlHLGFBQWEsR0FBRyxLQUFLd0MscUJBQUwsQ0FBMkIsS0FBS2pKLEtBQWhDLENBQXRCOztBQUVBLFlBQU1rSixRQUFRLG1DQUNUMUUsUUFEUztBQUVaekYsVUFBQUEsS0FBSyxFQUFFLE1BRks7QUFHWkMsVUFBQUEsTUFBTSxFQUFFLE1BSEk7QUFJWm1LLFVBQUFBLHFCQUFxQixFQUFFLElBSlg7QUFLWnhDLFVBQUFBLG9CQUFvQixFQUFwQkEsb0JBTFk7QUFNWkMsVUFBQUEsWUFBWSxFQUFaQSxZQU5ZO0FBT1p3QyxVQUFBQSxnQkFBZ0IsRUFBRSxLQUFLQyxpQkFQWDtBQVFaQyxVQUFBQSxnQkFBZ0IsRUFBaEJBO0FBUlksVUFBZDs7QUFXQSxZQUFNQyxNQUFNLEdBQUcsQ0FBQ1YsV0FBVyxDQUFDVyxPQUFaLElBQXVCLEVBQXhCLEVBQTRCQyxNQUEzQztBQUVBLFlBQU1DLGdCQUFnQixHQUFHckosTUFBTSxDQUFDc0osSUFBUCxDQUFZLFVBQUFDLENBQUM7QUFBQSxpQkFBSUEsQ0FBQyxDQUFDM0csRUFBRixLQUFTNEcsa0NBQWI7QUFBQSxTQUFiLENBQXpCO0FBQ0EsWUFBTUMsT0FBTyxHQUFHQyxPQUFPLENBQUN2RixRQUFRLENBQUNzRixPQUFWLENBQXZCO0FBRUEsNEJBQ0UsK0VBQ0UsZ0NBQUMsVUFBRDtBQUNFLFVBQUEsUUFBUSxFQUFFbkYsUUFEWjtBQUVFLFVBQUEsZ0JBQWdCLEVBQUU4RCxNQUFNLENBQUNDLElBQVAsQ0FBWXNCLHFCQUFaLENBRnBCO0FBR0UsVUFBQSxVQUFVLEVBQUV4RixRQUFRLENBQUN5RixVQUh2QjtBQUlFLFVBQUEsT0FBTyxFQUFFSCxPQUpYO0FBS0UsVUFBQSxPQUFPLEVBQUU1SixPQUxYO0FBTUUsVUFBQSxRQUFRLEVBQUU0SSxRQU5aO0FBT0UsVUFBQSxNQUFNLEVBQUV6SSxNQVBWO0FBUUUsVUFBQSxjQUFjLEVBQUVrRSxjQVJsQjtBQVNFLFVBQUEsUUFBUSxFQUFFekMsS0FUWjtBQVVFLFVBQUEsV0FBVyxFQUFFK0csV0FWZjtBQVdFLFVBQUEsUUFBUSxFQUFFLEtBQUs3SSxLQUFMLENBQVdrSyxRQVh2QjtBQVlFLFVBQUEsS0FBSyxFQUFFMUYsUUFBUSxDQUFDMkYsS0FBVCxJQUFrQixDQVozQjtBQWFFLFVBQUEsR0FBRyxFQUFFdkYsaUJBQWlCLENBQUN3RixRQUFsQixJQUE4QnhGLGlCQUFpQixDQUFDd0YsUUFBbEIsQ0FBMkJoRSxPQUF6RCxHQUFtRSxFQUFuRSxHQUF3RSxDQWIvRTtBQWNFLFVBQUEsTUFBTSxFQUFFNEMsTUFkVjtBQWVFLFVBQUEsTUFBTSxFQUFFRCxNQWZWO0FBZ0JFLFVBQUEsbUJBQW1CLEVBQUU1SSxlQUFlLENBQUNrSyxpQkFoQnZDO0FBaUJFLFVBQUEsZ0JBQWdCLEVBQUVsSyxlQUFlLENBQUNtSyxjQWpCcEM7QUFrQkUsVUFBQSxnQkFBZ0IsRUFBRSxLQUFLQyxxQkFsQnpCO0FBbUJFLFVBQUEsa0JBQWtCLEVBQUUsS0FBS0MsaUJBbkIzQjtBQW9CRSxVQUFBLGVBQWUsRUFBRWhKLGVBQWUsQ0FBQ2lKLGFBcEJuQztBQXFCRSxVQUFBLFdBQVcsRUFBRWpILGNBQWMsQ0FBQ2tILFNBckI5QjtBQXNCRSxVQUFBLHdCQUF3QixFQUFFbEosZUFBZSxDQUFDbUo7QUF0QjVDLFVBREYsZUF5QkUsZ0NBQUMsWUFBRCxnQ0FDTXpCLFFBRE47QUFFRSxVQUFBLEdBQUcsRUFBQyxRQUZOO0FBR0UsVUFBQSxHQUFHLEVBQUUsS0FB