kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
92 lines (91 loc) • 17.6 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.hexagonVisConfigs = exports["default"] = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
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 _layers = require("@deck.gl/layers");
var _aggregationLayer = _interopRequireDefault(require("../aggregation-layer"));
var _deckglLayers = require("@kepler.gl/deckgl-layers");
var _hexagonUtils = require("./hexagon-utils");
var _hexagonLayerIcon = _interopRequireDefault(require("./hexagon-layer-icon"));
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } // SPDX-License-Identifier: MIT
// Copyright contributors to the kepler.gl project
var hexagonVisConfigs = exports.hexagonVisConfigs = {
opacity: 'opacity',
worldUnitSize: 'worldUnitSize',
resolution: 'resolution',
colorRange: 'colorRange',
coverage: 'coverage',
sizeRange: 'elevationRange',
percentile: 'percentile',
elevationPercentile: 'elevationPercentile',
elevationScale: 'elevationScale',
enableElevationZoomFactor: 'enableElevationZoomFactor',
fixedHeight: 'fixedHeight',
colorAggregation: 'colorAggregation',
sizeAggregation: 'sizeAggregation',
enable3d: 'enable3d'
};
var HexagonLayer = exports["default"] = /*#__PURE__*/function (_AggregationLayer) {
function HexagonLayer(props) {
var _this;
(0, _classCallCheck2["default"])(this, HexagonLayer);
_this = _callSuper(this, HexagonLayer, [props]);
_this.registerVisConfig(hexagonVisConfigs);
_this.visConfigSettings.worldUnitSize.label = 'columns.hexagon.worldUnitSize';
return _this;
}
(0, _inherits2["default"])(HexagonLayer, _AggregationLayer);
return (0, _createClass2["default"])(HexagonLayer, [{
key: "type",
get: function get() {
return 'hexagon';
}
}, {
key: "name",
get: function get() {
return 'Hexbin';
}
}, {
key: "layerIcon",
get: function get() {
return _hexagonLayerIcon["default"];
}
}, {
key: "renderLayer",
value: function renderLayer(opts) {
var data = opts.data,
objectHovered = opts.objectHovered,
mapState = opts.mapState;
var defaultAggregationLayerProps = this.getDefaultAggregationLayerProp(opts);
var zoomFactor = this.getZoomFactor(mapState);
var visConfig = this.config.visConfig;
var radius = visConfig.worldUnitSize * 1000;
var hoveredObject = this.hasHoveredObject(objectHovered);
return [new _deckglLayers.EnhancedHexagonLayer(_objectSpread(_objectSpread(_objectSpread({}, defaultAggregationLayerProps), data), {}, {
wrapLongitude: false,
radius: radius
}))].concat((0, _toConsumableArray2["default"])(hoveredObject && !visConfig.enable3d ? [new _layers.GeoJsonLayer(_objectSpread(_objectSpread({}, this.getDefaultHoverLayerProps()), {}, {
visible: defaultAggregationLayerProps.visible,
wrapLongitude: false,
data: [(0, _hexagonUtils.hexagonToPolygonGeo)(hoveredObject, {}, radius * visConfig.coverage, mapState)].filter(function (d) {
return d;
}),
getLineColor: this.config.highlightColor,
lineWidthScale: 8 * zoomFactor
}))] : []));
}
}]);
}(_aggregationLayer["default"]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbGF5ZXJzIiwicmVxdWlyZSIsIl9hZ2dyZWdhdGlvbkxheWVyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9kZWNrZ2xMYXllcnMiLCJfaGV4YWdvblV0aWxzIiwiX2hleGFnb25MYXllckljb24iLCJvd25LZXlzIiwiZSIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsIl9jYWxsU3VwZXIiLCJfZ2V0UHJvdG90eXBlT2YyIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJjb25zdHJ1Y3RvciIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwiY2FsbCIsImhleGFnb25WaXNDb25maWdzIiwiZXhwb3J0cyIsIm9wYWNpdHkiLCJ3b3JsZFVuaXRTaXplIiwicmVzb2x1dGlvbiIsImNvbG9yUmFuZ2UiLCJjb3ZlcmFnZSIsInNpemVSYW5nZSIsInBlcmNlbnRpbGUiLCJlbGV2YXRpb25QZXJjZW50aWxlIiwiZWxldmF0aW9uU2NhbGUiLCJlbmFibGVFbGV2YXRpb25ab29tRmFjdG9yIiwiZml4ZWRIZWlnaHQiLCJjb2xvckFnZ3JlZ2F0aW9uIiwic2l6ZUFnZ3JlZ2F0aW9uIiwiZW5hYmxlM2QiLCJIZXhhZ29uTGF5ZXIiLCJfQWdncmVnYXRpb25MYXllciIsInByb3BzIiwiX3RoaXMiLCJfY2xhc3NDYWxsQ2hlY2syIiwicmVnaXN0ZXJWaXNDb25maWciLCJ2aXNDb25maWdTZXR0aW5ncyIsImxhYmVsIiwiX2luaGVyaXRzMiIsIl9jcmVhdGVDbGFzczIiLCJrZXkiLCJnZXQiLCJIZXhhZ29uTGF5ZXJJY29uIiwidmFsdWUiLCJyZW5kZXJMYXllciIsIm9wdHMiLCJkYXRhIiwib2JqZWN0SG92ZXJlZCIsIm1hcFN0YXRlIiwiZGVmYXVsdEFnZ3JlZ2F0aW9uTGF5ZXJQcm9wcyIsImdldERlZmF1bHRBZ2dyZWdhdGlvbkxheWVyUHJvcCIsInpvb21GYWN0b3IiLCJnZXRab29tRmFjdG9yIiwidmlzQ29uZmlnIiwiY29uZmlnIiwicmFkaXVzIiwiaG92ZXJlZE9iamVjdCIsImhhc0hvdmVyZWRPYmplY3QiLCJFbmhhbmNlZEhleGFnb25MYXllciIsIndyYXBMb25naXR1ZGUiLCJjb25jYXQiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwiR2VvSnNvbkxheWVyIiwiZ2V0RGVmYXVsdEhvdmVyTGF5ZXJQcm9wcyIsInZpc2libGUiLCJoZXhhZ29uVG9Qb2x5Z29uR2VvIiwiZCIsImdldExpbmVDb2xvciIsImhpZ2hsaWdodENvbG9yIiwibGluZVdpZHRoU2NhbGUiLCJBZ2dyZWdhdGlvbkxheWVyIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hleGFnb24tbGF5ZXIvaGV4YWdvbi1sYXllci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge0dlb0pzb25MYXllcn0gZnJvbSAnQGRlY2suZ2wvbGF5ZXJzJztcbmltcG9ydCBBZ2dyZWdhdGlvbkxheWVyLCB7QWdncmVnYXRpb25MYXllckNvbmZpZ30gZnJvbSAnLi4vYWdncmVnYXRpb24tbGF5ZXInO1xuaW1wb3J0IHtFbmhhbmNlZEhleGFnb25MYXllcn0gZnJvbSAnQGtlcGxlci5nbC9kZWNrZ2wtbGF5ZXJzJztcbmltcG9ydCB7aGV4YWdvblRvUG9seWdvbkdlb30gZnJvbSAnLi9oZXhhZ29uLXV0aWxzJztcbmltcG9ydCBIZXhhZ29uTGF5ZXJJY29uIGZyb20gJy4vaGV4YWdvbi1sYXllci1pY29uJztcbmltcG9ydCB7XG4gIENvbG9yUmFuZ2UsXG4gIFZpc0NvbmZpZ0Jvb2xlYW4sXG4gIFZpc0NvbmZpZ0NvbG9yUmFuZ2UsXG4gIFZpc0NvbmZpZ051bWJlcixcbiAgVmlzQ29uZmlnUmFuZ2UsXG4gIFZpc0NvbmZpZ1NlbGVjdGlvbixcbiAgTWVyZ2Vcbn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge0FnZ3JlZ2F0aW9uVHlwZXN9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcblxuZXhwb3J0IHR5cGUgSGV4YWdvbkxheWVyVmlzQ29uZmlnU2V0dGluZ3MgPSB7XG4gIG9wYWNpdHk6IFZpc0NvbmZpZ051bWJlcjtcbiAgd29ybGRVbml0U2l6ZTogVmlzQ29uZmlnTnVtYmVyO1xuICByZXNvbHV0aW9uOiBWaXNDb25maWdOdW1iZXI7XG4gIGNvbG9yUmFuZ2U6IFZpc0NvbmZpZ0NvbG9yUmFuZ2U7XG4gIGNvdmVyYWdlOiBWaXNDb25maWdOdW1iZXI7XG4gIHNpemVSYW5nZTogVmlzQ29uZmlnUmFuZ2U7XG4gIHBlcmNlbnRpbGU6IFZpc0NvbmZpZ1JhbmdlO1xuICBlbGV2YXRpb25QZXJjZW50aWxlOiBWaXNDb25maWdSYW5nZTtcbiAgZWxldmF0aW9uU2NhbGU6IFZpc0NvbmZpZ051bWJlcjtcbiAgZW5hYmxlRWxldmF0aW9uWm9vbUZhY3RvcjogVmlzQ29uZmlnQm9vbGVhbjtcbiAgY29sb3JBZ2dyZWdhdGlvbjogVmlzQ29uZmlnU2VsZWN0aW9uO1xuICBzaXplQWdncmVnYXRpb246IFZpc0NvbmZpZ1NlbGVjdGlvbjtcbiAgZW5hYmxlM2Q6IFZpc0NvbmZpZ0Jvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBIZXhhZ29uTGF5ZXJWaXNDb25maWcgPSB7XG4gIG9wYWNpdHk6IG51bWJlcjtcbiAgd29ybGRVbml0U2l6ZTogbnVtYmVyO1xuICByZXNvbHV0aW9uOiBudW1iZXI7XG4gIGNvbG9yUmFuZ2U6IENvbG9yUmFuZ2U7XG4gIGNvdmVyYWdlOiBudW1iZXI7XG4gIHNpemVSYW5nZTogW251bWJlciwgbnVtYmVyXTtcbiAgcGVyY2VudGlsZTogW251bWJlciwgbnVtYmVyXTtcbiAgZWxldmF0aW9uUGVyY2VudGlsZTogW251bWJlciwgbnVtYmVyXTtcbiAgZWxldmF0aW9uU2NhbGU6IG51bWJlcjtcbiAgZW5hYmxlRWxldmF0aW9uWm9vbUZhY3RvcjogYm9vbGVhbjtcbiAgY29sb3JBZ2dyZWdhdGlvbjogQWdncmVnYXRpb25UeXBlcztcbiAgc2l6ZUFnZ3JlZ2F0aW9uOiBBZ2dyZWdhdGlvblR5cGVzO1xuICBlbmFibGUzZDogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIEhleGFnb25MYXllckNvbmZpZyA9IE1lcmdlPEFnZ3JlZ2F0aW9uTGF5ZXJDb25maWcsIHt2aXNDb25maWc6IEhleGFnb25MYXllclZpc0NvbmZpZ30+O1xuXG5leHBvcnQgY29uc3QgaGV4YWdvblZpc0NvbmZpZ3M6IHtcbiAgb3BhY2l0eTogJ29wYWNpdHknO1xuICB3b3JsZFVuaXRTaXplOiAnd29ybGRVbml0U2l6ZSc7XG4gIHJlc29sdXRpb246ICdyZXNvbHV0aW9uJztcbiAgY29sb3JSYW5nZTogJ2NvbG9yUmFuZ2UnO1xuICBjb3ZlcmFnZTogJ2NvdmVyYWdlJztcbiAgc2l6ZVJhbmdlOiAnZWxldmF0aW9uUmFuZ2UnO1xuICBwZXJjZW50aWxlOiAncGVyY2VudGlsZSc7XG4gIGVsZXZhdGlvblBlcmNlbnRpbGU6ICdlbGV2YXRpb25QZXJjZW50aWxlJztcbiAgZWxldmF0aW9uU2NhbGU6ICdlbGV2YXRpb25TY2FsZSc7XG4gIGVuYWJsZUVsZXZhdGlvblpvb21GYWN0b3I6ICdlbmFibGVFbGV2YXRpb25ab29tRmFjdG9yJztcbiAgZml4ZWRIZWlnaHQ6ICdmaXhlZEhlaWdodCc7XG4gIGNvbG9yQWdncmVnYXRpb246ICdjb2xvckFnZ3JlZ2F0aW9uJztcbiAgc2l6ZUFnZ3JlZ2F0aW9uOiAnc2l6ZUFnZ3JlZ2F0aW9uJztcbiAgZW5hYmxlM2Q6ICdlbmFibGUzZCc7XG59ID0ge1xuICBvcGFjaXR5OiAnb3BhY2l0eScsXG4gIHdvcmxkVW5pdFNpemU6ICd3b3JsZFVuaXRTaXplJyxcbiAgcmVzb2x1dGlvbjogJ3Jlc29sdXRpb24nLFxuICBjb2xvclJhbmdlOiAnY29sb3JSYW5nZScsXG4gIGNvdmVyYWdlOiAnY292ZXJhZ2UnLFxuICBzaXplUmFuZ2U6ICdlbGV2YXRpb25SYW5nZScsXG4gIHBlcmNlbnRpbGU6ICdwZXJjZW50aWxlJyxcbiAgZWxldmF0aW9uUGVyY2VudGlsZTogJ2VsZXZhdGlvblBlcmNlbnRpbGUnLFxuICBlbGV2YXRpb25TY2FsZTogJ2VsZXZhdGlvblNjYWxlJyxcbiAgZW5hYmxlRWxldmF0aW9uWm9vbUZhY3RvcjogJ2VuYWJsZUVsZXZhdGlvblpvb21GYWN0b3InLFxuICBmaXhlZEhlaWdodDogJ2ZpeGVkSGVpZ2h0JyxcbiAgY29sb3JBZ2dyZWdhdGlvbjogJ2NvbG9yQWdncmVnYXRpb24nLFxuICBzaXplQWdncmVnYXRpb246ICdzaXplQWdncmVnYXRpb24nLFxuICBlbmFibGUzZDogJ2VuYWJsZTNkJ1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSGV4YWdvbkxheWVyIGV4dGVuZHMgQWdncmVnYXRpb25MYXllciB7XG4gIGRlY2xhcmUgdmlzQ29uZmlnU2V0dGluZ3M6IEhleGFnb25MYXllclZpc0NvbmZpZ1NldHRpbmdzO1xuICBkZWNsYXJlIGNvbmZpZzogSGV4YWdvbkxheWVyQ29uZmlnO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5yZWdpc3RlclZpc0NvbmZpZyhoZXhhZ29uVmlzQ29uZmlncyk7XG4gICAgdGhpcy52aXNDb25maWdTZXR0aW5ncy53b3JsZFVuaXRTaXplLmxhYmVsID0gJ2NvbHVtbnMuaGV4YWdvbi53b3JsZFVuaXRTaXplJztcbiAgfVxuXG4gIGdldCB0eXBlKCk6ICdoZXhhZ29uJyB7XG4gICAgcmV0dXJuICdoZXhhZ29uJztcbiAgfVxuXG4gIGdldCBuYW1lKCk6ICdIZXhiaW4nIHtcbiAgICByZXR1cm4gJ0hleGJpbic7XG4gIH1cblxuICBnZXQgbGF5ZXJJY29uKCkge1xuICAgIHJldHVybiBIZXhhZ29uTGF5ZXJJY29uO1xuICB9XG5cbiAgcmVuZGVyTGF5ZXIob3B0cykge1xuICAgIGNvbnN0IHtkYXRhLCBvYmplY3RIb3ZlcmVkLCBtYXBTdGF0ZX0gPSBvcHRzO1xuXG4gICAgY29uc3QgZGVmYXVsdEFnZ3JlZ2F0aW9uTGF5ZXJQcm9wcyA9IHRoaXMuZ2V0RGVmYXVsdEFnZ3JlZ2F0aW9uTGF5ZXJQcm9wKG9wdHMpO1xuICAgIGNvbnN0IHpvb21GYWN0b3IgPSB0aGlzLmdldFpvb21GYWN0b3IobWFwU3RhdGUpO1xuICAgIGNvbnN0IHt2aXNDb25maWd9ID0gdGhpcy5jb25maWc7XG4gICAgY29uc3QgcmFkaXVzID0gdmlzQ29uZmlnLndvcmxkVW5pdFNpemUgKiAxMDAwO1xuICAgIGNvbnN0IGhvdmVyZWRPYmplY3QgPSB0aGlzLmhhc0hvdmVyZWRPYmplY3Qob2JqZWN0SG92ZXJlZCk7XG5cbiAgICByZXR1cm4gW1xuICAgICAgbmV3IEVuaGFuY2VkSGV4YWdvbkxheWVyKHtcbiAgICAgICAgLi4uZGVmYXVsdEFnZ3JlZ2F0aW9uTGF5ZXJQcm9wcyxcbiAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgd3JhcExvbmdpdHVkZTogZmFsc2UsXG4gICAgICAgIHJhZGl1c1xuICAgICAgfSksXG5cbiAgICAgIC8vIHJlbmRlciBhbiBvdXRsaW5lIG9mIGVhY2ggaGV4YWdvbiBpZiBub3QgZXh0cnVkZWRcbiAgICAgIC4uLihob3ZlcmVkT2JqZWN0ICYmICF2aXNDb25maWcuZW5hYmxlM2RcbiAgICAgICAgPyBbXG4gICAgICAgICAgICBuZXcgR2VvSnNvbkxheWVyKHtcbiAgICAgICAgICAgICAgLi4udGhpcy5nZXREZWZhdWx0SG92ZXJMYXllclByb3BzKCksXG4gICAgICAgICAgICAgIHZpc2libGU6IGRlZmF1bHRBZ2dyZWdhdGlvbkxheWVyUHJvcHMudmlzaWJsZSxcbiAgICAgICAgICAgICAgd3JhcExvbmdpdHVkZTogZmFsc2UsXG4gICAgICAgICAgICAgIGRhdGE6IFtcbiAgICAgICAgICAgICAgICBoZXhhZ29uVG9Qb2x5Z29uR2VvKGhvdmVyZWRPYmplY3QsIHt9LCByYWRpdXMgKiB2aXNDb25maWcuY292ZXJhZ2UsIG1hcFN0YXRlKVxuICAgICAgICAgICAgICBdLmZpbHRlcihkID0+IGQpLFxuICAgICAgICAgICAgICBnZXRMaW5lQ29sb3I6IHRoaXMuY29uZmlnLmhpZ2hsaWdodENvbG9yLFxuICAgICAgICAgICAgICBsaW5lV2lkdGhTY2FsZTogOCAqIHpvb21GYWN0b3JcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXVxuICAgICAgICA6IFtdKVxuICAgIF07XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxPQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxpQkFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsYUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksYUFBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssaUJBQUEsR0FBQUgsc0JBQUEsQ0FBQUYsT0FBQTtBQUFvRCxTQUFBTSxRQUFBQyxDQUFBLEVBQUFDLENBQUEsUUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLElBQUEsQ0FBQUosQ0FBQSxPQUFBRyxNQUFBLENBQUFFLHFCQUFBLFFBQUFDLENBQUEsR0FBQUgsTUFBQSxDQUFBRSxxQkFBQSxDQUFBTCxDQUFBLEdBQUFDLENBQUEsS0FBQUssQ0FBQSxHQUFBQSxDQUFBLENBQUFDLE1BQUEsV0FBQU4sQ0FBQSxXQUFBRSxNQUFBLENBQUFLLHdCQUFBLENBQUFSLENBQUEsRUFBQUMsQ0FBQSxFQUFBUSxVQUFBLE9BQUFQ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
;