kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
132 lines (131 loc) • 28.8 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = FloatingTimeDisplayFactory;
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
var _react = _interopRequireWildcard(require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/node_modules/react"));
var _styledComponents = _interopRequireDefault(require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/node_modules/styled-components"));
var _classnames = _interopRequireDefault(require("classnames"));
var _icons = require("../icons");
var _src = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/src/constants/src");
var _styledComponents2 = require("../../common/styled-components");
var _src2 = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/src/utils/src");
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8; // 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 StyledTimeDisplayWrapper = _styledComponents["default"].div.attrs({
className: 'floating-time-display'
})(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n bottom: ", ";\n display: flex;\n position: absolute;\n width: 100%;\n margin-left: -", "px;\n justify-content: center;\n pointer-events: none; /* prevent padding from blocking input */\n & > * {\n /* all children should allow input */\n pointer-events: all;\n }\n"])), function (props) {
return "calc(100% + ".concat(props.theme.bottomPanelGap, "px)");
}, function (props) {
return props.theme.bottomInnerPdSide;
});
var StyledTimeDisplay = _styledComponents["default"].div.attrs(function (props) {
return {
className: (0, _classnames["default"])('floating-time-display__inner', props.className)
};
})(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n background-color: ", ";\n border-radius: ", "px;\n color: ", ";\n display: flex;\n height: ", "px;\n justify-content: center;\n min-width: ", "px;\n opacity: ", ";\n padding: ", ";\n"])), function (props) {
return props.theme.panelBackground;
}, function (props) {
return props.theme.timeDisplayBorderRadius;
}, function (props) {
return props.theme.titleTextColor;
}, function (props) {
return props.theme.timeDisplayHeight;
}, function (props) {
return props.theme.timeDisplayMinWidth;
}, function (props) {
return props.theme.timeDisplayOpacity;
}, function (props) {
return props.theme.timeDisplayPadding;
});
var StyledTimeDisplayGroups = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n align-items: center;\n display: flex;\n flex-direction: row;\n"])));
var StyledTimeDisplayRows = _styledComponents["default"].div(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: column;\n justify-content: center;\n"])));
var StyledTimeDisplayTop = _styledComponents["default"].div.attrs({
className: 'animation-control__time-display__top'
})(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n display: flex;\n font-size: 12px;\n font-weight: 500;\n justify-content: center;\n"])), function (props) {
return props.theme.textColor;
});
var StyledTimeDisplayBottom = _styledComponents["default"].div.attrs({
className: 'animation-control__time-display__bottom'
})(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n display: flex;\n font-size: 14px;\n font-weight: 500;\n justify-content: center;\n"])), function (props) {
return props.theme.titleTextColor;
});
var StyledTimeValueGroup = _styledComponents["default"].div.attrs({
className: 'animation-control__time-value-group'
})(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: column;\n"])));
var StyledHorizontalBar = _styledComponents["default"].div.attrs({
className: 'animation-control__horizontal-bar'
})(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteral2["default"])(["\n margin: 0 12px;\n"])));
var TimeDivider = function TimeDivider() {
return /*#__PURE__*/_react["default"].createElement(StyledHorizontalBar, null, /*#__PURE__*/_react["default"].createElement(_icons.Minus, {
height: "12px"
}));
};
var TimeDisplayRow = function TimeDisplayRow(_ref) {
var _ref$timeValues = _ref.timeValues,
timeValues = _ref$timeValues === void 0 ? [] : _ref$timeValues;
return /*#__PURE__*/_react["default"].createElement(_styledComponents2.CenterFlexbox, null, /*#__PURE__*/_react["default"].createElement("div", {
className: "time-value"
}, timeValues[0]), timeValues[1] ? /*#__PURE__*/_react["default"].createElement(TimeDivider, null) : null, timeValues[1] ? /*#__PURE__*/_react["default"].createElement("div", {
className: "time-value"
}, timeValues[1]) : null);
};
function FloatingTimeDisplayFactory() {
var FloatingTimeDisplay = function FloatingTimeDisplay(_ref2) {
var currentTime = _ref2.currentTime,
defaultTimeFormat = _ref2.defaultTimeFormat,
timeFormat = _ref2.timeFormat,
timezone = _ref2.timezone;
var _useMemo = (0, _react.useMemo)(function () {
var groupTime = Array.isArray(currentTime) ? currentTime : [currentTime];
var hasUserFormat = typeof timeFormat === 'string';
var currentFormat = (hasUserFormat ? timeFormat : defaultTimeFormat) || _src.DEFAULT_TIME_FORMAT;
var dateFunc = (0, _src2.datetimeFormatter)(timezone);
if (hasUserFormat) {
// dont split time if user defined it
return {
displayDate: groupTime.map(dateFunc(currentFormat)),
displayTime: []
};
}
return groupTime.reduce(function (accu, curr) {
var _currentFormat$split = currentFormat.split(' '),
_currentFormat$split2 = (0, _slicedToArray2["default"])(_currentFormat$split, 2),
dateFormat = _currentFormat$split2[0],
datetimeFormat = _currentFormat$split2[1];
var dateString = dateFunc(dateFormat)(curr);
var timeString = datetimeFormat ? dateFunc(datetimeFormat)(curr) : null;
if (!accu.displayDate.includes(dateString)) {
accu.displayDate.push(dateString);
}
if (timeString) {
accu.displayTime.push(timeString);
}
return accu;
}, {
displayDate: [],
displayTime: []
});
}, [currentTime, timeFormat, defaultTimeFormat, timezone]),
displayDate = _useMemo.displayDate,
displayTime = _useMemo.displayTime;
var twoGroups = displayDate.length === 2 && displayTime.length === 2;
var bottomRow = displayTime.length ? displayTime : displayDate.length ? displayDate : null;
var topRow = displayDate.length && displayTime.length ? displayDate : null;
return /*#__PURE__*/_react["default"].createElement(StyledTimeDisplayWrapper, null, /*#__PURE__*/_react["default"].createElement(StyledTimeDisplay, {
className: "animation-control__time-display"
}, twoGroups ? /*#__PURE__*/_react["default"].createElement(StyledTimeDisplayGroups, null, /*#__PURE__*/_react["default"].createElement(StyledTimeValueGroup, null, /*#__PURE__*/_react["default"].createElement(StyledTimeDisplayTop, null, displayDate[0]), /*#__PURE__*/_react["default"].createElement(StyledTimeDisplayBottom, null, displayTime[0])), /*#__PURE__*/_react["default"].createElement(TimeDivider, null), /*#__PURE__*/_react["default"].createElement(StyledTimeValueGroup, null, /*#__PURE__*/_react["default"].createElement(StyledTimeDisplayTop, null, displayDate[1]), /*#__PURE__*/_react["default"].createElement(StyledTimeDisplayBottom, null, displayTime[1]))) : /*#__PURE__*/_react["default"].createElement(StyledTimeDisplayRows, null, topRow ? /*#__PURE__*/_react["default"].createElement(StyledTimeDisplayTop, null, /*#__PURE__*/_react["default"].createElement(TimeDisplayRow, {
timeValues: topRow
})) : null, bottomRow ? /*#__PURE__*/_react["default"].createElement(StyledTimeDisplayBottom, null, /*#__PURE__*/_react["default"].createElement(TimeDisplayRow, {
timeValues: bottomRow
})) : null)));
};
return FloatingTimeDisplay;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfY2xhc3NuYW1lcyIsIl9pY29ucyIsIl9zcmMiLCJfc3R5bGVkQ29tcG9uZW50czIiLCJfc3JjMiIsIl90ZW1wbGF0ZU9iamVjdCIsIl90ZW1wbGF0ZU9iamVjdDIiLCJfdGVtcGxhdGVPYmplY3QzIiwiX3RlbXBsYXRlT2JqZWN0NCIsIl90ZW1wbGF0ZU9iamVjdDUiLCJfdGVtcGxhdGVPYmplY3Q2IiwiX3RlbXBsYXRlT2JqZWN0NyIsIl90ZW1wbGF0ZU9iamVjdDgiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJTdHlsZWRUaW1lRGlzcGxheVdyYXBwZXIiLCJzdHlsZWQiLCJkaXYiLCJhdHRycyIsImNsYXNzTmFtZSIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwyIiwicHJvcHMiLCJjb25jYXQiLCJ0aGVtZSIsImJvdHRvbVBhbmVsR2FwIiwiYm90dG9tSW5uZXJQZFNpZGUiLCJTdHlsZWRUaW1lRGlzcGxheSIsImNsYXNzbmFtZXMiLCJwYW5lbEJhY2tncm91bmQiLCJ0aW1lRGlzcGxheUJvcmRlclJhZGl1cyIsInRpdGxlVGV4dENvbG9yIiwidGltZURpc3BsYXlIZWlnaHQiLCJ0aW1lRGlzcGxheU1pbldpZHRoIiwidGltZURpc3BsYXlPcGFjaXR5IiwidGltZURpc3BsYXlQYWRkaW5nIiwiU3R5bGVkVGltZURpc3BsYXlHcm91cHMiLCJTdHlsZWRUaW1lRGlzcGxheVJvd3MiLCJTdHlsZWRUaW1lRGlzcGxheVRvcCIsInRleHRDb2xvciIsIlN0eWxlZFRpbWVEaXNwbGF5Qm90dG9tIiwiU3R5bGVkVGltZVZhbHVlR3JvdXAiLCJTdHlsZWRIb3Jpem9udGFsQmFyIiwiVGltZURpdmlkZXIiLCJjcmVhdGVFbGVtZW50IiwiTWludXMiLCJoZWlnaHQiLCJUaW1lRGlzcGxheVJvdyIsIl9yZWYiLCJfcmVmJHRpbWVWYWx1ZXMiLCJ0aW1lVmFsdWVzIiwiQ2VudGVyRmxleGJveCIsIkZsb2F0aW5nVGltZURpc3BsYXlGYWN0b3J5IiwiRmxvYXRpbmdUaW1lRGlzcGxheSIsIl9yZWYyIiwiY3VycmVudFRpbWUiLCJkZWZhdWx0VGltZUZvcm1hdCIsInRpbWVGb3JtYXQiLCJ0aW1lem9uZSIsIl91c2VNZW1vIiwidXNlTWVtbyIsImdyb3VwVGltZSIsIkFycmF5IiwiaXNBcnJheSIsImhhc1VzZXJGb3JtYXQiLCJjdXJyZW50Rm9ybWF0IiwiREVGQVVMVF9USU1FX0ZPUk1BVCIsImRhdGVGdW5jIiwiZGF0ZXRpbWVGb3JtYXR0ZXIiLCJkaXNwbGF5RGF0ZSIsIm1hcCIsImRpc3BsYXlUaW1lIiwicmVkdWNlIiwiYWNjdSIsImN1cnIiLCJfY3VycmVudEZvcm1hdCRzcGxpdCIsInNwbGl0IiwiX2N1cnJlbnRGb3JtYXQkc3BsaXQyIiwiX3NsaWNlZFRvQXJyYXkyIiwiZGF0ZUZvcm1hdCIsImRhdGV0aW1lRm9ybWF0IiwiZGF0ZVN0cmluZyIsInRpbWVTdHJpbmciLCJpbmNsdWRlcyIsInB1c2giLCJ0d29Hcm91cHMiLCJsZW5ndGgiLCJib3R0b21Sb3ciLCJ0b3BSb3ciXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9zcmMvY29tbW9uL2FuaW1hdGlvbi1jb250cm9sL2Zsb2F0aW5nLXRpbWUtZGlzcGxheS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IFJlYWN0LCB7dXNlTWVtb30gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQgY2xhc3NuYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7TWludXN9IGZyb20gJy4uL2ljb25zJztcbmltcG9ydCB7REVGQVVMVF9USU1FX0ZPUk1BVH0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtDZW50ZXJGbGV4Ym94fSBmcm9tICcuLi8uLi9jb21tb24vc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHtkYXRldGltZUZvcm1hdHRlcn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5cbmNvbnN0IFN0eWxlZFRpbWVEaXNwbGF5V3JhcHBlciA9IHN0eWxlZC5kaXYuYXR0cnMoe1xuICBjbGFzc05hbWU6ICdmbG9hdGluZy10aW1lLWRpc3BsYXknXG59KWBcbiAgYm90dG9tOiAke3Byb3BzID0+IGBjYWxjKDEwMCUgKyAke3Byb3BzLnRoZW1lLmJvdHRvbVBhbmVsR2FwfXB4KWB9O1xuICBkaXNwbGF5OiBmbGV4O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXJnaW4tbGVmdDogLSR7cHJvcHMgPT4gcHJvcHMudGhlbWUuYm90dG9tSW5uZXJQZFNpZGV9cHg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTsgLyogcHJldmVudCBwYWRkaW5nIGZyb20gYmxvY2tpbmcgaW5wdXQgKi9cbiAgJiA+ICoge1xuICAgIC8qIGFsbCBjaGlsZHJlbiBzaG91bGQgYWxsb3cgaW5wdXQgKi9cbiAgICBwb2ludGVyLWV2ZW50czogYWxsO1xuICB9XG5gO1xuXG5jb25zdCBTdHlsZWRUaW1lRGlzcGxheSA9IHN0eWxlZC5kaXYuYXR0cnMocHJvcHMgPT4gKHtcbiAgY2xhc3NOYW1lOiBjbGFzc25hbWVzKCdmbG9hdGluZy10aW1lLWRpc3BsYXlfX2lubmVyJywgcHJvcHMuY2xhc3NOYW1lKVxufSkpYFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnBhbmVsQmFja2dyb3VuZH07XG4gIGJvcmRlci1yYWRpdXM6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUudGltZURpc3BsYXlCb3JkZXJSYWRpdXN9cHg7XG4gIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnRpdGxlVGV4dENvbG9yfTtcbiAgZGlzcGxheTogZmxleDtcbiAgaGVpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnRpbWVEaXNwbGF5SGVpZ2h0fXB4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgbWluLXdpZHRoOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnRpbWVEaXNwbGF5TWluV2lkdGh9cHg7XG4gIG9wYWNpdHk6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUudGltZURpc3BsYXlPcGFjaXR5fTtcbiAgcGFkZGluZzogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS50aW1lRGlzcGxheVBhZGRpbmd9O1xuYDtcblxuY29uc3QgU3R5bGVkVGltZURpc3BsYXlHcm91cHMgPSBzdHlsZWQuZGl2YFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuYDtcblxuY29uc3QgU3R5bGVkVGltZURpc3BsYXlSb3dzID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5gO1xuXG5jb25zdCBTdHlsZWRUaW1lRGlzcGxheVRvcCA9IHN0eWxlZC5kaXYuYXR0cnMoe1xuICBjbGFzc05hbWU6ICdhbmltYXRpb24tY29udHJvbF9fdGltZS1kaXNwbGF5X190b3AnXG59KWBcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUudGV4dENvbG9yfTtcbiAgZGlzcGxheTogZmxleDtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBmb250LXdlaWdodDogNTAwO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbmA7XG5cbmNvbnN0IFN0eWxlZFRpbWVEaXNwbGF5Qm90dG9tID0gc3R5bGVkLmRpdi5hdHRycyh7XG4gIGNsYXNzTmFtZTogJ2FuaW1hdGlvbi1jb250cm9sX190aW1lLWRpc3BsYXlfX2JvdHRvbSdcbn0pYFxuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS50aXRsZVRleHRDb2xvcn07XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5gO1xuXG5jb25zdCBTdHlsZWRUaW1lVmFsdWVHcm91cCA9IHN0eWxlZC5kaXYuYXR0cnMoe1xuICBjbGFzc05hbWU6ICdhbmltYXRpb24tY29udHJvbF9fdGltZS12YWx1ZS1ncm91cCdcbn0pYFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuYDtcblxuY29uc3QgU3R5bGVkSG9yaXpvbnRhbEJhciA9IHN0eWxlZC5kaXYuYXR0cnMoe1xuICBjbGFzc05hbWU6ICdhbmltYXRpb24tY29udHJvbF9faG9yaXpvbnRhbC1iYXInXG59KWBcbiAgbWFyZ2luOiAwIDEycHg7XG5gO1xuXG5jb25zdCBUaW1lRGl2aWRlciA9ICgpID0+IChcbiAgPFN0eWxlZEhvcml6b250YWxCYXI+XG4gICAgPE1pbnVzIGhlaWdodD1cIjEycHhcIiAvPlxuICA8L1N0eWxlZEhvcml6b250YWxCYXI+XG4pO1xuXG5pbnRlcmZhY2UgVGltZURpc3BsYXlSb3dQcm9wcyB7XG4gIHRpbWVWYWx1ZXM/OiBzdHJpbmdbXTtcbn1cblxuY29uc3QgVGltZURpc3BsYXlSb3cgPSAoe3RpbWVWYWx1ZXMgPSBbXX06IFRpbWVEaXNwbGF5Um93UHJvcHMpID0+IChcbiAgPENlbnRlckZsZXhib3g+XG4gICAgPGRpdiBjbGFzc05hbWU9XCJ0aW1lLXZhbHVlXCI+e3RpbWVWYWx1ZXNbMF19PC9kaXY+XG4gICAge3RpbWVWYWx1ZXNbMV0gPyA8VGltZURpdmlkZXIgLz4gOiBudWxsfVxuICAgIHt0aW1lVmFsdWVzWzFdID8gPGRpdiBjbGFzc05hbWU9XCJ0aW1lLXZhbHVlXCI+e3RpbWVWYWx1ZXNbMV19PC9kaXY+IDogbnVsbH1cbiAgPC9DZW50ZXJGbGV4Ym94PlxuKTtcblxuaW50ZXJmYWNlIEZsb2F0aW5nVGltZURpc3BsYXlQcm9wcyB7XG4gIGN1cnJlbnRUaW1lOiBudW1iZXIgfCBudW1iZXJbXTtcbiAgZGVmYXVsdFRpbWVGb3JtYXQ/OiBzdHJpbmcgfCBudWxsO1xuICB0aW1lRm9ybWF0Pzogc3RyaW5nIHwgbnVsbDtcbiAgdGltZXpvbmU/OiBzdHJpbmcgfCBudWxsO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBGbG9hdGluZ1RpbWVEaXNwbGF5RmFjdG9yeSgpIHtcbiAgY29uc3QgRmxvYXRpbmdUaW1lRGlzcGxheSA9ICh7XG4gICAgY3VycmVudFRpbWUsXG4gICAgZGVmYXVsdFRpbWVGb3JtYXQsXG4gICAgdGltZUZvcm1hdCxcbiAgICB0aW1lem9uZVxuICB9OiBGbG9hdGluZ1RpbWVEaXNwbGF5UHJvcHMpID0+IHtcbiAgICBjb25zdCB7ZGlzcGxheURhdGUsIGRpc3BsYXlUaW1lfSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgY29uc3QgZ3JvdXBUaW1lID0gQXJyYXkuaXNBcnJheShjdXJyZW50VGltZSkgPyBjdXJyZW50VGltZSA6IFtjdXJyZW50VGltZV07XG4gICAgICBjb25zdCBoYXNVc2VyRm9ybWF0ID0gdHlwZW9mIHRpbWVGb3JtYXQgPT09ICdzdHJpbmcnO1xuICAgICAgY29uc3QgY3VycmVudEZvcm1hdCA9IChoYXNVc2VyRm9ybWF0ID8gdGltZUZvcm1hdCA6IGRlZmF1bHRUaW1lRm9ybWF0KSB8fCBERUZBVUxUX1RJTUVfRk9STUFUO1xuICAgICAgY29uc3QgZGF0ZUZ1bmMgPSBkYXRldGltZUZvcm1hdHRlcih0aW1lem9uZSk7XG5cbiAgICAgIGlmIChoYXNVc2VyRm9ybWF0KSB7XG4gICAgICAgIC8vIGRvbnQgc3BsaXQgdGltZSBpZiB1c2VyIGRlZmluZWQgaXRcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkaXNwbGF5RGF0ZTogZ3JvdXBUaW1lLm1hcChkYXRlRnVuYyhjdXJyZW50Rm9ybWF0KSksXG4gICAgICAgICAgZGlzcGxheVRpbWU6IFtdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gZ3JvdXBUaW1lLnJlZHVjZTx7ZGlzcGxheURhdGU6IHN0cmluZ1tdOyBkaXNwbGF5VGltZTogc3RyaW5nW119PihcbiAgICAgICAgKGFjY3UsIGN1cnIpID0+IHtcbiAgICAgICAgICBjb25zdCBbZGF0ZUZvcm1hdCwgZGF0ZXRpbWVGb3JtYXRdID0gY3VycmVudEZvcm1hdC5zcGxpdCgnICcpO1xuICAgICAgICAgIGNvbnN0IGRhdGVTdHJpbmcgPSBkYXRlRnVuYyhkYXRlRm9ybWF0KShjdXJyKTtcbiAgICAgICAgICBjb25zdCB0aW1lU3RyaW5nID0gZGF0ZXRpbWVGb3JtYXQgPyBkYXRlRnVuYyhkYXRldGltZUZvcm1hdCkoY3VycikgOiBudWxsO1xuXG4gICAgICAgICAgaWYgKCFhY2N1LmRpc3BsYXlEYXRlLmluY2x1ZGVzKGRhdGVTdHJpbmcpKSB7XG4gICAgICAgICAgICBhY2N1LmRpc3BsYXlEYXRlLnB1c2goZGF0ZVN0cmluZyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aW1lU3RyaW5nKSB7XG4gICAgICAgICAgICBhY2N1LmRpc3BsYXlUaW1lLnB1c2godGltZVN0cmluZyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGFjY3U7XG4gICAgICAgIH0sXG4gICAgICAgIHtkaXNwbGF5RGF0ZTogW10sIGRpc3BsYXlUaW1lOiBbXX0gYXMge2Rpc3BsYXlEYXRlOiBzdHJpbmdbXTsgZGlzcGxheVRpbWU6IHN0cmluZ1tdfVxuICAgICAgKTtcbiAgICB9LCBbY3VycmVudFRpbWUsIHRpbWVGb3JtYXQsIGRlZmF1bHRUaW1lRm9ybWF0LCB0aW1lem9uZV0pO1xuXG4gICAgY29uc3QgdHdvR3JvdXBzID0gZGlzcGxheURhdGUubGVuZ3RoID09PSAyICYmIGRpc3BsYXlUaW1lLmxlbmd0aCA9PT0gMjtcbiAgICBjb25zdCBib3R0b21Sb3cgPSBkaXNwbGF5VGltZS5sZW5ndGggPyBkaXNwbGF5VGltZSA6IGRpc3BsYXlEYXRlLmxlbmd0aCA/IGRpc3BsYXlEYXRlIDogbnVsbDtcbiAgICBjb25zdCB0b3BSb3cgPSBkaXNwbGF5RGF0ZS5sZW5ndGggJiYgZGlzcGxheVRpbWUubGVuZ3RoID8gZGlzcGxheURhdGUgOiBudWxsO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTdHlsZWRUaW1lRGlzcGxheVdyYXBwZXI+XG4gICAgICAgIDxTdHlsZWRUaW1lRGlzcGxheSBjbGFzc05hbWU9XCJhbmltYXRpb24tY29udHJvbF9fdGltZS1kaXNwbGF5XCI+XG4gICAgICAgICAge3R3b0dyb3VwcyA/IChcbiAgICAgICAgICAgIDxTdHlsZWRUaW1lRGlzcGxheUdyb3Vwcz5cbiAgICAgICAgICAgICAgPFN0eWxlZFRpbWVWYWx1ZUdyb3VwPlxuICAgICAgICAgICAgICAgIHsvKiBUaW1lIFN0YXJ0ICovfVxuICAgICAgICAgICAgICAgIDxTdHlsZWRUaW1lRGlzcGxheVRvcD57ZGlzcGxheURhdGVbMF19PC9TdHlsZWRUaW1lRGlzcGxheVRvcD5cbiAgICAgICAgICAgICAgICA8U3R5bGVkVGltZURpc3BsYXlCb3R0b20+e2Rpc3BsYXlUaW1lWzBdfTwvU3R5bGVkVGltZURpc3BsYXlCb3R0b20+XG4gICAgICAgICAgICAgIDwvU3R5bGVkVGltZVZhbHVlR3JvdXA+XG4gICAgICAgICAgICAgIDxUaW1lRGl2aWRlciAvPlxuICAgICAgICAgICAgICA8U3R5bGVkVGltZVZhbHVlR3JvdXA+XG4gICAgICAgICAgICAgICAgey8qIFRpbWUgRW5kICovfVxuICAgICAgICAgICAgICAgIDxTdHlsZWRUaW1lRGlzcGxheVRvcD57ZGlzcGxheURhdGVbMV19PC9TdHlsZWRUaW1lRGlzcGxheVRvcD5cbiAgICAgICAgICAgICAgICA8U3R5bGVkVGltZURpc3BsYXlCb3R0b20+e2Rpc3BsYXlUaW1lWzFdfTwvU3R5bGVkVGltZURpc3BsYXlCb3R0b20+XG4gICAgICAgICAgICAgIDwvU3R5bGVkVGltZVZhbHVlR3JvdXA+XG4gICAgICAgICAgICA8L1N0eWxlZFRpbWVEaXNwbGF5R3JvdXBzPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8U3R5bGVkVGltZURpc3BsYXlSb3dzPlxuICAgICAgICAgICAgICB7dG9wUm93ID8gKFxuICAgICAgICAgICAgICAgIDxTdHlsZWRUaW1lRGlzcGxheVRvcD5cbiAgICAgICAgICAgICAgICAgIDxUaW1lRGlzcGxheVJvdyB0aW1lVmFsdWVzPXt0b3BSb3d9IC8+XG4gICAgICAgICAgICAgICAgPC9TdHlsZWRUaW1lRGlzcGxheVRvcD5cbiAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgIHtib3R0b21Sb3cgPyAoXG4gICAgICAgICAgICAgICAgPFN0eWxlZFRpbWVEaXNwbGF5Qm90dG9tPlxuICAgICAgICAgICAgICAgICAgPFRpbWVEaXNwbGF5Um93IHRpbWVWYWx1ZXM9e2JvdHRvbVJvd30gLz5cbiAgICAgICAgICAgICAgICA8L1N0eWxlZFRpbWVEaXNwbGF5Qm90dG9tPlxuICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIDwvU3R5bGVkVGltZURpc3BsYXlSb3dzPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvU3R5bGVkVGltZURpc3BsYXk+XG4gICAgICA8L1N0eWxlZFRpbWVEaXNwbGF5V3JhcHBlcj5cbiAgICApO1xuICB9O1xuXG4gIHJldHVybiBGbG9hdGluZ1RpbWVEaXNwbGF5O1xufVxuIl0sIm1h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
;