kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
98 lines (97 loc) • 18 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
var _react = _interopRequireDefault(require("react"));
var _styledComponents = _interopRequireDefault(require("styled-components"));
var _classnames = _interopRequireDefault(require("classnames"));
var _styles = require("@kepler.gl/styles");
var _timelineSlider = _interopRequireDefault(require("../timeline-slider"));
var _playbackControls = _interopRequireDefault(require("./playback-controls"));
var _floatingTimeDisplay = _interopRequireDefault(require("./floating-time-display"));
var _templateObject, _templateObject2, _templateObject3, _templateObject4; // SPDX-License-Identifier: MIT
// Copyright contributors to the kepler.gl project
var SLIDER_MARGIN_PALM = 6;
var AnimationControlContainer = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n padding: ", ";\n position: relative;\n margin-top: ", "px;\n\n ", "\n"])), function (props) {
return "".concat(props.theme.bottomInnerPdVert, "px ").concat(props.theme.bottomInnerPdSide, "px");
}, function (props) {
return props.theme.bottomPanelGap;
}, _styles.media.portable(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n border-top: 1px solid ", ";\n border-left: 1px solid ", ";\n padding: 12px 12px;\n margin-top: 0;\n "])), function (props) {
return props.theme.panelBorderColor;
}, function (props) {
return props.theme.panelBorderColor;
}));
var AnimationWidgetInner = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n position: relative;\n display: flex;\n align-items: center;\n\n .animation-control__time-slider {\n display: flex;\n align-items: center;\n height: 32px;\n width: 100%;\n }\n .playback-controls {\n margin-left: 16px;\n }\n\n ", ";\n"])), _styles.media.palm(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n flex-direction: column;\n .playback-controls {\n margin: 0;\n }\n .animation-control__time-slider {\n width: 100%;\n position: relative;\n }\n .animation-control__time-domain {\n position: absolute;\n top: -24px;\n\n &.domain-start {\n left: ", "px;\n }\n &.domain-end {\n right: ", "px;\n }\n }\n "])), SLIDER_MARGIN_PALM, SLIDER_MARGIN_PALM));
var TIMELINE_PLAYBACK_STYLE = {
flex: 1
};
AnimationControlFactory.deps = [_playbackControls["default"], _floatingTimeDisplay["default"], _timelineSlider["default"]];
function AnimationControlFactory(PlaybackControls, FloatingTimeDisplay, TimelineSlider) {
var AnimationControl = function AnimationControl(_ref) {
var filter = _ref.filter,
className = _ref.className,
style = _ref.style,
isAnimatable = _ref.isAnimatable,
isAnimating = _ref.isAnimating,
resetAnimation = _ref.resetAnimation,
_ref$toggleAnimation = _ref.toggleAnimation,
toggleAnimation = _ref$toggleAnimation === void 0 ? function () {
return;
} : _ref$toggleAnimation,
_ref$updateAnimationS = _ref.updateAnimationSpeed,
updateAnimationSpeed = _ref$updateAnimationS === void 0 ? function () {
return;
} : _ref$updateAnimationS,
setTimelineValue = _ref.setTimelineValue,
setAnimationWindow = _ref.setAnimationWindow,
timeline = _ref.timeline,
_ref$showTimeline = _ref.showTimeline,
showTimeline = _ref$showTimeline === void 0 ? true : _ref$showTimeline,
_ref$showControls = _ref.showControls,
showControls = _ref$showControls === void 0 ? true : _ref$showControls,
_ref$showTimeDisplay = _ref.showTimeDisplay,
showTimeDisplay = _ref$showTimeDisplay === void 0 ? true : _ref$showTimeDisplay;
if (!timeline) {
return null;
}
var animationWindow = timeline.animationWindow,
value = timeline.value,
speed = timeline.speed,
defaultTimeFormat = timeline.defaultTimeFormat,
timeFormat = timeline.timeFormat,
timezone = timeline.timezone;
return /*#__PURE__*/_react["default"].createElement(AnimationControlContainer, {
style: style,
className: (0, _classnames["default"])('animation-control-container', className)
}, /*#__PURE__*/_react["default"].createElement(AnimationWidgetInner, {
className: "animation-widget--inner"
}, showTimeline ? /*#__PURE__*/_react["default"].createElement(TimelineSlider, {
style: TIMELINE_PLAYBACK_STYLE,
timeline: timeline,
setTimelineValue: setTimelineValue
}) : null, showControls ? /*#__PURE__*/_react["default"].createElement(PlaybackControls, {
className: "animation-control-playpause",
filter: filter,
isAnimatable: isAnimatable,
startAnimation: toggleAnimation,
isAnimating: isAnimating,
pauseAnimation: toggleAnimation,
resetAnimation: resetAnimation,
speed: speed,
updateAnimationSpeed: updateAnimationSpeed,
setFilterAnimationWindow: setAnimationWindow,
animationWindow: animationWindow
}) : null), showTimeDisplay ? /*#__PURE__*/_react["default"].createElement(FloatingTimeDisplay, {
currentTime: value,
defaultTimeFormat: defaultTimeFormat,
timeFormat: timeFormat,
timezone: timezone
}) : null);
};
return AnimationControl;
}
var _default = exports["default"] = AnimationControlFactory;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9zdHlsZWRDb21wb25lbnRzIiwiX2NsYXNzbmFtZXMiLCJfc3R5bGVzIiwiX3RpbWVsaW5lU2xpZGVyIiwiX3BsYXliYWNrQ29udHJvbHMiLCJfZmxvYXRpbmdUaW1lRGlzcGxheSIsIl90ZW1wbGF0ZU9iamVjdCIsIl90ZW1wbGF0ZU9iamVjdDIiLCJfdGVtcGxhdGVPYmplY3QzIiwiX3RlbXBsYXRlT2JqZWN0NCIsIlNMSURFUl9NQVJHSU5fUEFMTSIsIkFuaW1hdGlvbkNvbnRyb2xDb250YWluZXIiLCJzdHlsZWQiLCJkaXYiLCJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsMiIsInByb3BzIiwiY29uY2F0IiwidGhlbWUiLCJib3R0b21Jbm5lclBkVmVydCIsImJvdHRvbUlubmVyUGRTaWRlIiwiYm90dG9tUGFuZWxHYXAiLCJtZWRpYSIsInBvcnRhYmxlIiwicGFuZWxCb3JkZXJDb2xvciIsIkFuaW1hdGlvbldpZGdldElubmVyIiwicGFsbSIsIlRJTUVMSU5FX1BMQVlCQUNLX1NUWUxFIiwiZmxleCIsIkFuaW1hdGlvbkNvbnRyb2xGYWN0b3J5IiwiZGVwcyIsIlBsYXliYWNrQ29udHJvbHNGYWN0b3J5IiwiRmxvYXRpbmdUaW1lRGlzcGxheUZhY3RvcnkiLCJUaW1lbGluZVNsaWRlckZhY3RvcnkiLCJQbGF5YmFja0NvbnRyb2xzIiwiRmxvYXRpbmdUaW1lRGlzcGxheSIsIlRpbWVsaW5lU2xpZGVyIiwiQW5pbWF0aW9uQ29udHJvbCIsIl9yZWYiLCJmaWx0ZXIiLCJjbGFzc05hbWUiLCJzdHlsZSIsImlzQW5pbWF0YWJsZSIsImlzQW5pbWF0aW5nIiwicmVzZXRBbmltYXRpb24iLCJfcmVmJHRvZ2dsZUFuaW1hdGlvbiIsInRvZ2dsZUFuaW1hdGlvbiIsIl9yZWYkdXBkYXRlQW5pbWF0aW9uUyIsInVwZGF0ZUFuaW1hdGlvblNwZWVkIiwic2V0VGltZWxpbmVWYWx1ZSIsInNldEFuaW1hdGlvbldpbmRvdyIsInRpbWVsaW5lIiwiX3JlZiRzaG93VGltZWxpbmUiLCJzaG93VGltZWxpbmUiLCJfcmVmJHNob3dDb250cm9scyIsInNob3dDb250cm9scyIsIl9yZWYkc2hvd1RpbWVEaXNwbGF5Iiwic2hvd1RpbWVEaXNwbGF5IiwiYW5pbWF0aW9uV2luZG93IiwidmFsdWUiLCJzcGVlZCIsImRlZmF1bHRUaW1lRm9ybWF0IiwidGltZUZvcm1hdCIsInRpbWV6b25lIiwiY3JlYXRlRWxlbWVudCIsImNsYXNzbmFtZXMiLCJzdGFydEFuaW1hdGlvbiIsInBhdXNlQW5pbWF0aW9uIiwic2V0RmlsdGVyQW5pbWF0aW9uV2luZG93IiwiY3VycmVudFRpbWUiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbW9uL2FuaW1hdGlvbi1jb250cm9sL2FuaW1hdGlvbi1jb250cm9sLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQgY2xhc3NuYW1lcyBmcm9tICdjbGFzc25hbWVzJztcblxuaW1wb3J0IHttZWRpYX0gZnJvbSAnQGtlcGxlci5nbC9zdHlsZXMnO1xuaW1wb3J0IHtUaW1lbGluZSwgRmlsdGVyfSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcblxuaW1wb3J0IFRpbWVsaW5lU2xpZGVyRmFjdG9yeSBmcm9tICcuLi90aW1lbGluZS1zbGlkZXInO1xuaW1wb3J0IFBsYXliYWNrQ29udHJvbHNGYWN0b3J5IGZyb20gJy4vcGxheWJhY2stY29udHJvbHMnO1xuaW1wb3J0IEZsb2F0aW5nVGltZURpc3BsYXlGYWN0b3J5IGZyb20gJy4vZmxvYXRpbmctdGltZS1kaXNwbGF5JztcblxuY29uc3QgU0xJREVSX01BUkdJTl9QQUxNID0gNjtcblxuY29uc3QgQW5pbWF0aW9uQ29udHJvbENvbnRhaW5lciA9IHN0eWxlZC5kaXZgXG4gIHBhZGRpbmc6ICR7cHJvcHMgPT4gYCR7cHJvcHMudGhlbWUuYm90dG9tSW5uZXJQZFZlcnR9cHggJHtwcm9wcy50aGVtZS5ib3R0b21Jbm5lclBkU2lkZX1weGB9O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbi10b3A6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuYm90dG9tUGFuZWxHYXB9cHg7XG5cbiAgJHttZWRpYS5wb3J0YWJsZWBcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5wYW5lbEJvcmRlckNvbG9yfTtcbiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICR7cHJvcHMgPT4gcHJvcHMudGhlbWUucGFuZWxCb3JkZXJDb2xvcn07XG4gICAgcGFkZGluZzogMTJweCAxMnB4O1xuICAgIG1hcmdpbi10b3A6IDA7XG4gIGB9XG5gO1xuXG5jb25zdCBBbmltYXRpb25XaWRnZXRJbm5lciA9IHN0eWxlZC5kaXZgXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcblxuICAuYW5pbWF0aW9uLWNvbnRyb2xfX3RpbWUtc2xpZGVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgaGVpZ2h0OiAzMnB4O1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG4gIC5wbGF5YmFjay1jb250cm9scyB7XG4gICAgbWFyZ2luLWxlZnQ6IDE2cHg7XG4gIH1cblxuICAke21lZGlhLnBhbG1gXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAucGxheWJhY2stY29udHJvbHMge1xuICAgICAgbWFyZ2luOiAwO1xuICAgIH1cbiAgICAuYW5pbWF0aW9uLWNvbnRyb2xfX3RpbWUtc2xpZGVyIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIH1cbiAgICAuYW5pbWF0aW9uLWNvbnRyb2xfX3RpbWUtZG9tYWluIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogLTI0cHg7XG5cbiAgICAgICYuZG9tYWluLXN0YXJ0IHtcbiAgICAgICAgbGVmdDogJHtTTElERVJfTUFSR0lOX1BBTE19cHg7XG4gICAgICB9XG4gICAgICAmLmRvbWFpbi1lbmQge1xuICAgICAgICByaWdodDogJHtTTElERVJfTUFSR0lOX1BBTE19cHg7XG4gICAgICB9XG4gICAgfVxuICBgfTtcbmA7XG5cbmNvbnN0IFRJTUVMSU5FX1BMQVlCQUNLX1NUWUxFID0ge2ZsZXg6IDF9O1xuXG5leHBvcnQgdHlwZSBBbmltYXRpb25Db250cm9sUHJvcHMgPSB7XG4gIGZpbHRlcj86IEZpbHRlcjtcbiAgdGltZWxpbmU/OiBUaW1lbGluZTtcbiAgaXNBbmltYXRhYmxlPzogYm9vbGVhbjtcbiAgaXNBbmltYXRpbmc/OiBib29sZWFuO1xuICB1cGRhdGVBbmltYXRpb25TcGVlZD86ICh2YWw6IG51bWJlcikgPT4gdm9pZDtcbiAgc2V0QW5pbWF0aW9uV2luZG93PzogKGlkOiBzdHJpbmcpID0+IHZvaWQ7XG4gIHRvZ2dsZUFuaW1hdGlvbjogKCkgPT4gdm9pZDtcbiAgcmVzZXRBbmltYXRpb24/OiAoKSA9PiB2b2lkO1xuICBzZXRUaW1lbGluZVZhbHVlOiAodmFsdWU6IG51bWJlcltdKSA9PiB2b2lkO1xuICBzaG93VGltZURpc3BsYXk/OiBib29sZWFuO1xuICBzaG93VGltZWxpbmU/OiBib29sZWFuO1xuICBzaG93Q29udHJvbHM/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHN0eWxlPzogb2JqZWN0O1xufTtcblxuQW5pbWF0aW9uQ29udHJvbEZhY3RvcnkuZGVwcyA9IFtcbiAgUGxheWJhY2tDb250cm9sc0ZhY3RvcnksXG4gIEZsb2F0aW5nVGltZURpc3BsYXlGYWN0b3J5LFxuICBUaW1lbGluZVNsaWRlckZhY3Rvcnlcbl07XG5cbmZ1bmN0aW9uIEFuaW1hdGlvbkNvbnRyb2xGYWN0b3J5KFxuICBQbGF5YmFja0NvbnRyb2xzOiBSZXR1cm5UeXBlPHR5cGVvZiBQbGF5YmFja0NvbnRyb2xzRmFjdG9yeT4sXG4gIEZsb2F0aW5nVGltZURpc3BsYXk6IFJldHVyblR5cGU8dHlwZW9mIEZsb2F0aW5nVGltZURpc3BsYXlGYWN0b3J5PixcbiAgVGltZWxpbmVTbGlkZXI6IFJldHVyblR5cGU8dHlwZW9mIFRpbWVsaW5lU2xpZGVyRmFjdG9yeT5cbikge1xuICBjb25zdCBBbmltYXRpb25Db250cm9sOiBSZWFjdC5GQzxBbmltYXRpb25Db250cm9sUHJvcHM+ID0gKHtcbiAgICBmaWx0ZXIsXG4gICAgY2xhc3NOYW1lLFxuICAgIHN0eWxlLFxuICAgIGlzQW5pbWF0YWJsZSxcbiAgICBpc0FuaW1hdGluZyxcbiAgICByZXNldEFuaW1hdGlvbixcbiAgICB0b2dnbGVBbmltYXRpb24gPSAoKSA9PiB7XG4gICAgICByZXR1cm47XG4gICAgfSxcbiAgICB1cGRhdGVBbmltYXRpb25TcGVlZCA9ICgpID0+IHtcbiAgICAgIHJldHVybjtcbiAgICB9LFxuICAgIHNldFRpbWVsaW5lVmFsdWUsXG4gICAgc2V0QW5pbWF0aW9uV2luZG93LFxuICAgIHRpbWVsaW5lLFxuICAgIHNob3dUaW1lbGluZSA9IHRydWUsXG4gICAgc2hvd0NvbnRyb2xzID0gdHJ1ZSxcbiAgICBzaG93VGltZURpc3BsYXkgPSB0cnVlXG4gIH0pID0+IHtcbiAgICBpZiAoIXRpbWVsaW5lKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCB7YW5pbWF0aW9uV2luZG93LCB2YWx1ZSwgc3BlZWQsIGRlZmF1bHRUaW1lRm9ybWF0LCB0aW1lRm9ybWF0LCB0aW1lem9uZX0gPSB0aW1lbGluZTtcblxuICAgIHJldHVybiAoXG4gICAgICA8QW5pbWF0aW9uQ29udHJvbENvbnRhaW5lclxuICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NuYW1lcygnYW5pbWF0aW9uLWNvbnRyb2wtY29udGFpbmVyJywgY2xhc3NOYW1lKX1cbiAgICAgID5cbiAgICAgICAgPEFuaW1hdGlvbldpZGdldElubmVyIGNsYXNzTmFtZT1cImFuaW1hdGlvbi13aWRnZXQtLWlubmVyXCI+XG4gICAgICAgICAge3Nob3dUaW1lbGluZSA/IChcbiAgICAgICAgICAgIDxUaW1lbGluZVNsaWRlclxuICAgICAgICAgICAgICBzdHlsZT17VElNRUxJTkVfUExBWUJBQ0tfU1RZTEV9XG4gICAgICAgICAgICAgIHRpbWVsaW5lPXt0aW1lbGluZX1cbiAgICAgICAgICAgICAgc2V0VGltZWxpbmVWYWx1ZT17c2V0VGltZWxpbmVWYWx1ZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAge3Nob3dDb250cm9scyA/IChcbiAgICAgICAgICAgIDxQbGF5YmFja0NvbnRyb2xzXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImFuaW1hdGlvbi1jb250cm9sLXBsYXlwYXVzZVwiXG4gICAgICAgICAgICAgIGZpbHRlcj17ZmlsdGVyfVxuICAgICAgICAgICAgICBpc0FuaW1hdGFibGU9e2lzQW5pbWF0YWJsZX1cbiAgICAgICAgICAgICAgc3RhcnRBbmltYXRpb249e3RvZ2dsZUFuaW1hdGlvbn1cbiAgICAgICAgICAgICAgaXNBbmltYXRpbmc9e2lzQW5pbWF0aW5nfVxuICAgICAgICAgICAgICBwYXVzZUFuaW1hdGlvbj17dG9nZ2xlQW5pbWF0aW9ufVxuICAgICAgICAgICAgICByZXNldEFuaW1hdGlvbj17cmVzZXRBbmltYXRpb259XG4gICAgICAgICAgICAgIHNwZWVkPXtzcGVlZH1cbiAgICAgICAgICAgICAgdXBkYXRlQW5pbWF0aW9uU3BlZWQ9e3VwZGF0ZUFuaW1hdGlvblNwZWVkfVxuICAgICAgICAgICAgICBzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3c9e3NldEFuaW1hdGlvbldpbmRvd31cbiAgICAgICAgICAgICAgYW5pbWF0aW9uV2luZG93PXthbmltYXRpb25XaW5kb3d9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICA8L0FuaW1hdGlvbldpZGdldElubmVyPlxuICAgICAgICB7c2hvd1RpbWVEaXNwbGF5ID8gKFxuICAgICAgICAgIDxGbG9hdGluZ1RpbWVEaXNwbGF5XG4gICAgICAgICAgICBjdXJyZW50VGltZT17dmFsdWV9XG4gICAgICAgICAgICBkZWZhdWx0VGltZUZvcm1hdD17ZGVmYXVsdFRpbWVGb3JtYXR9XG4gICAgICAgICAgICB0aW1lRm9ybWF0PXt0aW1lRm9ybWF0fVxuICAgICAgICAgICAgdGltZXpvbmU9e3RpbWV6b25lfVxuICAgICAgICAgIC8+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgPC9BbmltYXRpb25Db250cm9sQ29udGFpbmVyPlxuICAgICk7XG4gIH07XG5cbiAgcmV0dXJuIEFuaW1hdGlvbkNvbnRyb2w7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEFuaW1hdGlvbkNvbnRyb2xGYWN0b3J5O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLGlCQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxXQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBRyxPQUFBLEdBQUFILE9BQUE7QUFHQSxJQUFBSSxlQUFBLEdBQUFMLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSyxpQkFBQSxHQUFBTixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQU0sb0JBQUEsR0FBQVAsc0JBQUEsQ0FBQUMsT0FBQTtBQUFpRSxJQUFBTyxlQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBWmpFO0FB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USxDQUExRFMsS0FBSztNQUFFQyxpQkFBaUIsR0FBMEJWLFFBQVEsQ0FBbkRVLGlCQUFpQjtNQUFFQyxVQUFVLEdBQWNYLFFBQVEsQ0FBaENXLFVBQVU7TUFBRUMsUUFBUSxHQUFJWixRQUFRLENBQXBCWSxRQUFRO0lBRTdFLG9CQUNFakUsTUFBQSxZQUFBa0UsYUFBQSxDQUFDcEQseUJBQXlCO01BQ3hCNkIsS0FBSyxFQUFFQSxLQUFNO01BQ2JELFNBQVMsRUFBRSxJQUFBeUIsc0JBQVUsRUFBQyw2QkFBNkIsRUFBRXpCLFNBQVM7SUFBRSxnQkFFaEUxQyxNQUFBLFlBQUFrRSxhQUFBLENBQUN2QyxvQkFBb0I7TUFBQ2UsU0FBUyxFQUFDO0lBQXlCLEdBQ3REYSxZQUFZLGdCQUNYdkQsTUFBQSxZQUFBa0UsYUFBQSxDQUFDNUIsY0FBYztNQUNiSyxLQUFLLEVBQUVkLHVCQUF3QjtNQUMvQndCLFFBQVEsRUFBRUEsUUFBUztNQUNuQkYsZ0JBQWdCLEVBQUVBO0lBQWlCLENBQ3BDLENBQUMsR0FDQSxJQUFJLEVBQ1BNLFlBQVksZ0JBQ1h6RCxNQUFBLFlBQUFrRSxhQUFBLENBQUM5QixnQkFBZ0I7TUFDZk0sU0FBUyxFQUFDLDZCQUE2QjtNQUN2Q0QsTUFBTSxFQUFFQSxNQUFPO01BQ2ZHLFlBQVksRUFBRUEsWUFBYTtNQUMzQndCLGNBQWMsRUFBRXBCLGVBQWdCO01BQ2hDSCxXQUFXLEVBQUVBLFdBQVk7TUFDekJ3QixjQUFjLEVBQUVyQixlQUFnQjtNQUNoQ0YsY0FBYyxFQUFFQSxjQUFlO01BQy9CZ0IsS0FBSyxFQUFFQSxLQUFNO01BQ2JaLG9CQUFvQixFQUFFQSxvQkFBcUI7TUFDM0NvQix3QkFBd0IsRUFBRWxCLGtCQUFtQjtNQUM3Q1EsZUFBZSxFQUFFQTtJQUFnQixDQUNsQyxDQUFDLEdBQ0EsSUFDZ0IsQ0FBQyxFQUN0QkQsZUFBZSxnQkFDZDNELE1BQUEsWUFBQWtFLGFBQUEsQ0FBQzdCLG1CQUFtQjtNQUNsQmtDLFdBQVcsRUFBRVYsS0FBTTtNQUNuQkUsaUJBQWlCLEVBQUVBLGlCQUFrQjtNQUNyQ0MsVUFBVSxFQUFFQSxVQUFXO01BQ3ZCQyxRQUFRLEVBQUVBO0lBQVMsQ0FDcEIsQ0FBQyxHQUNBLElBQ3FCLENBQUM7RUFFaEMsQ0FBQztFQUVELE9BQU8xQixnQkFBZ0I7QUFDekI7QUFBQyxJQUFBaUMsUUFBQSxHQUFBQyxPQUFBLGNBRWMxQyx1QkFBdUIiLCJpZ25vcmVMaXN0IjpbXX0=