adui
Version:
<div> <img src="https://wxa.wxs.qq.com/mpweb/delivery/legacy/wxadtouch/upload/t1/od834zef_52939fc6.png" style="margin:40px 0 0 -8px; background-color: #fcfcfc; box-shadow: none;" /> </div>
188 lines • 29.9 kB
JavaScript
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
var _excluded = ["currentHour", "currentMinute", "disabledHours", "disabledMinutes", "disabledSeconds", "maxTime", "minTime", "onChange", "onlyHour", "size", "selectedValue", "type"];
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var s = Object.getOwnPropertySymbols(e); for (r = 0; r < s.length; r++) o = s[r], t.includes(o) || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.includes(n)) continue; t[n] = r[n]; } return t; }
import React, { forwardRef, useContext, useImperativeHandle, useRef, useEffect, memo } from "react";
import PropTypes from "prop-types";
import classNames from "classnames";
import { getRequestAnimationFrame } from "../_util/raf";
import "./style";
import { extractHMSFromTime, hours, minutes, seconds } from "./core";
import { ConfigContext, getComputedSize } from "../config-provider";
var prefix = "adui-time";
var noop = function noop() {};
var _scrollTo = function scrollTo(element, to, duration) {
var reqAnimFrame = getRequestAnimationFrame();
if (duration <= 0) {
element.scrollTop = to;
return;
}
var difference = to - element.scrollTop;
var perTick = difference / duration * 10;
reqAnimFrame(function () {
element.scrollTop += perTick;
if (element.scrollTop === to) {
return;
}
_scrollTo(element, to, duration - 10);
});
};
var TimeSelect = forwardRef(function (_ref, ref) {
var currentHour = _ref.currentHour,
currentMinute = _ref.currentMinute,
disabledHours = _ref.disabledHours,
disabledMinutes = _ref.disabledMinutes,
disabledSeconds = _ref.disabledSeconds,
maxTime = _ref.maxTime,
minTime = _ref.minTime,
onChange = _ref.onChange,
onlyHour = _ref.onlyHour,
size = _ref.size,
selectedValue = _ref.selectedValue,
type = _ref.type,
otherProps = _objectWithoutProperties(_ref, _excluded);
var selectRef = useRef(null);
useImperativeHandle(ref, function () {
return {
select: selectRef
};
});
var handleClick = function handleClick(item) {
onChange(item, type);
};
var _useContext = useContext(ConfigContext),
sizeContext = _useContext.size;
var isDisabled = function isDisabled(value, minHour, minMinute, minSecond, maxHour, maxMinute, maxSecond, isOnlyHour) {
if (type === "hour") {
return value < minHour || value > (isOnlyHour && !maxTime ? "24:00" : maxHour);
}
if (type === "minute") {
if (minHour === maxHour) {
return value < minMinute || value > maxMinute;
}
if (minHour === currentHour) {
return value < minMinute;
}
if (maxHour === currentHour) {
return value > maxMinute;
}
}
if (type === "second") {
if (minHour === maxHour) {
if (minMinute === maxMinute) {
return value < minSecond || value > maxSecond;
}
if (minMinute === currentMinute) {
return value < minSecond;
}
if (maxMinute === currentMinute) {
return value > maxSecond;
}
}
if (minHour === currentHour) {
if (minMinute === currentMinute) {
return value < minSecond;
}
}
if (maxHour === currentHour) {
if (maxMinute === currentMinute) {
return value > maxSecond;
}
}
}
return false;
};
var updateScrollTop = function updateScrollTop(duration) {
if (selectRef !== null && selectRef !== void 0 && selectRef.current) {
var activeItem = selectRef.current.getElementsByClassName("".concat(prefix, "-active"))[0];
if (activeItem) {
var offsetTop = activeItem.offsetTop;
if (offsetTop !== undefined) {
if (duration) {
_scrollTo(selectRef.current, offsetTop, duration);
} else {
selectRef.current.scrollTop = offsetTop;
}
}
}
}
};
useEffect(function () {
updateScrollTop(0);
}, []);
useEffect(function () {
updateScrollTop(120);
}, [selectedValue]);
var classSet = classNames("".concat(prefix, "-timeSelect"), "".concat(prefix, "-").concat(getComputedSize(size, sizeContext)), _defineProperty({}, "".concat(prefix, "-integerTimeSelect"), onlyHour));
var _extractHMSFromTime = extractHMSFromTime(minTime),
minHour = _extractHMSFromTime.hour,
minMinute = _extractHMSFromTime.minute,
minSecond = _extractHMSFromTime.second;
var _extractHMSFromTime2 = extractHMSFromTime(maxTime),
maxHour = _extractHMSFromTime2.hour,
maxMinute = _extractHMSFromTime2.minute,
maxSecond = _extractHMSFromTime2.second;
var items = [];
if (type === "second") {
items = seconds;
} else if (type === "minute") {
items = minutes;
} else {
items = hours;
}
return React.createElement("div", _extends({
className: classSet,
ref: selectRef
}, otherProps), items.map(function (value) {
var disabled = isDisabled(parseInt(value, 10), parseInt(minHour || "00", 10), parseInt(minMinute || "00", 10), parseInt(minSecond || "00", 10), parseInt(maxHour || "24", 10), parseInt(maxMinute || "59", 10), parseInt(maxSecond || "59", 10), onlyHour);
if ((disabled || disabledHours && disabledHours(value)) && type === "hour" || disabledMinutes && disabledMinutes(value) && type === "minute" || disabledSeconds && disabledSeconds(value) && type === "second") {
return null;
}
var itemClassSet = classNames("".concat(prefix, "-item"), _defineProperty(_defineProperty({}, "".concat(prefix, "-active"), selectedValue === value), "".concat(prefix, "-disabled"), disabled));
return React.createElement("div", {
role: "none",
className: itemClassSet,
key: value,
onClick: function onClick() {
if (!disabled) {
handleClick(value);
}
}
}, onlyHour ? "".concat(value, ":00") : value);
}));
});
TimeSelect.displayName = "TimeSelect";
TimeSelect.propTypes = {
currentHour: PropTypes.number,
currentMinute: PropTypes.number,
disabledHours: PropTypes.func,
disabledMinutes: PropTypes.func,
disabledSeconds: PropTypes.func,
maxTime: PropTypes.string,
minTime: PropTypes.string,
onChange: PropTypes.any,
onlyHour: PropTypes.bool,
selectedValue: PropTypes.string,
size: PropTypes.oneOf(["mini", "small", "medium", "large"]),
type: PropTypes.any
};
TimeSelect.defaultProps = {
currentHour: null,
currentMinute: null,
disabledHours: noop,
disabledMinutes: noop,
disabledSeconds: noop,
maxTime: "24:00",
minTime: "00:00",
onChange: noop,
onlyHour: false,
selectedValue: null,
size: "small",
type: "hour"
};
export default memo(TimeSelect);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsImZvcndhcmRSZWYiLCJ1c2VDb250ZXh0IiwidXNlSW1wZXJhdGl2ZUhhbmRsZSIsInVzZVJlZiIsInVzZUVmZmVjdCIsIm1lbW8iLCJQcm9wVHlwZXMiLCJjbGFzc05hbWVzIiwiZ2V0UmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiZXh0cmFjdEhNU0Zyb21UaW1lIiwiaG91cnMiLCJtaW51dGVzIiwic2Vjb25kcyIsIkNvbmZpZ0NvbnRleHQiLCJnZXRDb21wdXRlZFNpemUiLCJwcmVmaXgiLCJub29wIiwic2Nyb2xsVG8iLCJlbGVtZW50IiwidG8iLCJkdXJhdGlvbiIsInJlcUFuaW1GcmFtZSIsInNjcm9sbFRvcCIsImRpZmZlcmVuY2UiLCJwZXJUaWNrIiwiVGltZVNlbGVjdCIsIl9yZWYiLCJyZWYiLCJjdXJyZW50SG91ciIsImN1cnJlbnRNaW51dGUiLCJkaXNhYmxlZEhvdXJzIiwiZGlzYWJsZWRNaW51dGVzIiwiZGlzYWJsZWRTZWNvbmRzIiwibWF4VGltZSIsIm1pblRpbWUiLCJvbkNoYW5nZSIsIm9ubHlIb3VyIiwic2l6ZSIsInNlbGVjdGVkVmFsdWUiLCJ0eXBlIiwib3RoZXJQcm9wcyIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsIl9leGNsdWRlZCIsInNlbGVjdFJlZiIsInNlbGVjdCIsImhhbmRsZUNsaWNrIiwiaXRlbSIsIl91c2VDb250ZXh0Iiwic2l6ZUNvbnRleHQiLCJpc0Rpc2FibGVkIiwidmFsdWUiLCJtaW5Ib3VyIiwibWluTWludXRlIiwibWluU2Vjb25kIiwibWF4SG91ciIsIm1heE1pbnV0ZSIsIm1heFNlY29uZCIsImlzT25seUhvdXIiLCJ1cGRhdGVTY3JvbGxUb3AiLCJjdXJyZW50IiwiYWN0aXZlSXRlbSIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJjb25jYXQiLCJvZmZzZXRUb3AiLCJ1bmRlZmluZWQiLCJjbGFzc1NldCIsIl9kZWZpbmVQcm9wZXJ0eSIsIl9leHRyYWN0SE1TRnJvbVRpbWUiLCJob3VyIiwibWludXRlIiwic2Vjb25kIiwiX2V4dHJhY3RITVNGcm9tVGltZTIiLCJpdGVtcyIsImNyZWF0ZUVsZW1lbnQiLCJfZXh0ZW5kcyIsImNsYXNzTmFtZSIsIm1hcCIsImRpc2FibGVkIiwicGFyc2VJbnQiLCJpdGVtQ2xhc3NTZXQiLCJyb2xlIiwia2V5Iiwib25DbGljayIsImRpc3BsYXlOYW1lIiwicHJvcFR5cGVzIiwibnVtYmVyIiwiZnVuYyIsInN0cmluZyIsImFueSIsImJvb2wiLCJvbmVPZiIsImRlZmF1bHRQcm9wcyJdLCJzb3VyY2VzIjpbIi4uLy4uL2NvbXBvbmVudHMvdGltZS1waWNrZXIvVGltZVNlbGVjdC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7XG4gIGZvcndhcmRSZWYsXG4gIHVzZUNvbnRleHQsXG4gIHVzZUltcGVyYXRpdmVIYW5kbGUsXG4gIHVzZVJlZixcbiAgdXNlRWZmZWN0LFxuICBtZW1vLFxufSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tIFwiY2xhc3NuYW1lc1wiXG5pbXBvcnQgeyBnZXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfSBmcm9tIFwiLi4vX3V0aWwvcmFmXCJcbmltcG9ydCBcIi4vc3R5bGVcIlxuaW1wb3J0IHsgZXh0cmFjdEhNU0Zyb21UaW1lLCBob3VycywgbWludXRlcywgc2Vjb25kcyB9IGZyb20gXCIuL2NvcmVcIlxuaW1wb3J0IHsgQ29uZmlnQ29udGV4dCwgZ2V0Q29tcHV0ZWRTaXplIH0gZnJvbSBcIi4uL2NvbmZpZy1wcm92aWRlclwiXG5cbmNvbnN0IHByZWZpeCA9IFwiYWR1aS10aW1lXCJcbmNvbnN0IG5vb3AgPSAoKSA9PiB7fVxuXG5leHBvcnQgaW50ZXJmYWNlIElUaW1lU2VsZWN0UHJvcHMge1xuICBba2V5OiBzdHJpbmddOiBhbnlcbiAgY3VycmVudEhvdXI/OiBudW1iZXIgfCBudWxsXG4gIGN1cnJlbnRNaW51dGU/OiBudW1iZXIgfCBudWxsXG4gIGRpc2FibGVkSG91cnM/OiAoaG91cj86IHN0cmluZyB8IG51bGwpID0+IGJvb2xlYW4gfCB2b2lkXG4gIGRpc2FibGVkTWludXRlcz86IChtaW51dGU/OiBzdHJpbmcgfCBudWxsKSA9PiBib29sZWFuIHwgdm9pZFxuICBkaXNhYmxlZFNlY29uZHM/OiAoc2Vjb25kPzogc3RyaW5nIHwgbnVsbCkgPT4gYm9vbGVhbiB8IHZvaWRcbiAgbWF4VGltZT86IHN0cmluZyB8IG51bGxcbiAgbWluVGltZT86IHN0cmluZyB8IG51bGxcbiAgb25DaGFuZ2U6ICh2YWx1ZTogc3RyaW5nLCB0eXBlOiBcImhvdXJcIiB8IFwibWludXRlXCIgfCBcInNlY29uZFwiKSA9PiB2b2lkXG4gIG9ubHlIb3VyPzogYm9vbGVhblxuICBzaXplPzogXCJtaW5pXCIgfCBcInNtYWxsXCIgfCBcIm1lZGl1bVwiIHwgXCJsYXJnZVwiXG4gIHNlbGVjdGVkVmFsdWU/OiBudWxsIHwgc3RyaW5nXG4gIHR5cGU6IFwiaG91clwiIHwgXCJtaW51dGVcIiB8IFwic2Vjb25kXCJcbn1cblxuY29uc3Qgc2Nyb2xsVG8gPSAoZWxlbWVudDogSFRNTERpdkVsZW1lbnQsIHRvOiBudW1iZXIsIGR1cmF0aW9uOiBudW1iZXIpID0+IHtcbiAgY29uc3QgcmVxQW5pbUZyYW1lID0gZ2V0UmVxdWVzdEFuaW1hdGlvbkZyYW1lKClcblxuICBpZiAoZHVyYXRpb24gPD0gMCkge1xuICAgIGVsZW1lbnQuc2Nyb2xsVG9wID0gdG9cbiAgICByZXR1cm5cbiAgfVxuICBjb25zdCBkaWZmZXJlbmNlID0gdG8gLSBlbGVtZW50LnNjcm9sbFRvcFxuICBjb25zdCBwZXJUaWNrID0gKGRpZmZlcmVuY2UgLyBkdXJhdGlvbikgKiAxMFxuXG4gIHJlcUFuaW1GcmFtZSgoKSA9PiB7XG4gICAgZWxlbWVudC5zY3JvbGxUb3AgKz0gcGVyVGlja1xuICAgIGlmIChlbGVtZW50LnNjcm9sbFRvcCA9PT0gdG8pIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBzY3JvbGxUbyhlbGVtZW50LCB0bywgZHVyYXRpb24gLSAxMClcbiAgfSlcbn1cblxuY29uc3QgVGltZVNlbGVjdDogUmVhY3QuRm9yd2FyZFJlZkV4b3RpY0NvbXBvbmVudDxcbiAgSVRpbWVTZWxlY3RQcm9wcyAmIFJlYWN0LlJlZkF0dHJpYnV0ZXM8YW55PlxuPiA9IGZvcndhcmRSZWYoXG4gIChcbiAgICB7XG4gICAgICBjdXJyZW50SG91cixcbiAgICAgIGN1cnJlbnRNaW51dGUsXG4gICAgICBkaXNhYmxlZEhvdXJzLFxuICAgICAgZGlzYWJsZWRNaW51dGVzLFxuICAgICAgZGlzYWJsZWRTZWNvbmRzLFxuICAgICAgbWF4VGltZSxcbiAgICAgIG1pblRpbWUsXG4gICAgICBvbkNoYW5nZSxcbiAgICAgIG9ubHlIb3VyLFxuICAgICAgc2l6ZSxcbiAgICAgIHNlbGVjdGVkVmFsdWUsXG4gICAgICB0eXBlLFxuICAgICAgLi4ub3RoZXJQcm9wc1xuICAgIH06IElUaW1lU2VsZWN0UHJvcHMsXG4gICAgcmVmXG4gICkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdFJlZiA9IHVzZVJlZjxhbnk+KG51bGwpXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+ICh7XG4gICAgICBzZWxlY3Q6IHNlbGVjdFJlZixcbiAgICB9KSlcblxuICAgIGNvbnN0IGhhbmRsZUNsaWNrID0gKGl0ZW06IHN0cmluZykgPT4ge1xuICAgICAgb25DaGFuZ2UoaXRlbSwgdHlwZSlcbiAgICB9XG5cbiAgICBjb25zdCB7IHNpemU6IHNpemVDb250ZXh0IH0gPSB1c2VDb250ZXh0KENvbmZpZ0NvbnRleHQpXG5cbiAgICBjb25zdCBpc0Rpc2FibGVkID0gKFxuICAgICAgdmFsdWU6IG51bWJlcixcbiAgICAgIG1pbkhvdXI6IG51bWJlcixcbiAgICAgIG1pbk1pbnV0ZTogbnVtYmVyLFxuICAgICAgbWluU2Vjb25kOiBudW1iZXIsXG4gICAgICBtYXhIb3VyOiBudW1iZXIsXG4gICAgICBtYXhNaW51dGU6IG51bWJlcixcbiAgICAgIG1heFNlY29uZDogbnVtYmVyLFxuICAgICAgaXNPbmx5SG91cj86IGJvb2xlYW5cbiAgICApID0+IHtcbiAgICAgIGlmICh0eXBlID09PSBcImhvdXJcIikge1xuICAgICAgICAvLyDov5nph4zopoHms6jmhI/miormlbTngrnpgInmi6kgMjQ6MDAg55qE5oOF5Ya154m55q6K5aSE55CGXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgdmFsdWUgPCBtaW5Ib3VyIHx8XG4gICAgICAgICAgdmFsdWUgPiAoaXNPbmx5SG91ciAmJiAhbWF4VGltZSA/IFwiMjQ6MDBcIiA6IG1heEhvdXIpXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlID09PSBcIm1pbnV0ZVwiKSB7XG4gICAgICAgIC8vIOWcqOWQjOS4gOS4quWwj+aXtuWGhVxuICAgICAgICBpZiAobWluSG91ciA9PT0gbWF4SG91cikge1xuICAgICAgICAgIHJldHVybiB2YWx1ZSA8IG1pbk1pbnV0ZSB8fCB2YWx1ZSA+IG1heE1pbnV0ZVxuICAgICAgICB9XG4gICAgICAgIC8vIOWcqOacgOWwj+eahOWwj+aXtuWGheaXtu+8jOi/meaXtuWAmeimgeaKiiBtaW5NaW51dGUg5Lul5LiL55qEIGRpc2FibGVkXG4gICAgICAgIGlmIChtaW5Ib3VyID09PSBjdXJyZW50SG91cikge1xuICAgICAgICAgIHJldHVybiB2YWx1ZSA8IG1pbk1pbnV0ZVxuICAgICAgICB9XG4gICAgICAgIC8vIOWcqOacgOWkp+eahOWwj+aXtuWGheaXtu+8jOi/meaXtuWAmeimgeaKiiBtYXhNaW51dGUg5Lul5LiK55qEIGRpc2FibGVkXG4gICAgICAgIGlmIChtYXhIb3VyID09PSBjdXJyZW50SG91cikge1xuICAgICAgICAgIHJldHVybiB2YWx1ZSA+IG1heE1pbnV0ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodHlwZSA9PT0gXCJzZWNvbmRcIikge1xuICAgICAgICAvLyDlnKjlkIzkuIDkuKrlsI/ml7blhoVcbiAgICAgICAgaWYgKG1pbkhvdXIgPT09IG1heEhvdXIpIHtcbiAgICAgICAgICAvLyDlnKjlkIzkuIDkuKrliIbpkp/lhoVcbiAgICAgICAgICBpZiAobWluTWludXRlID09PSBtYXhNaW51dGUpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZSA8IG1pblNlY29uZCB8fCB2YWx1ZSA+IG1heFNlY29uZFxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyDlnKjmnIDlsI/nmoTliIbpkp/lhoXml7bvvIzov5nml7blgJnopoHmioogbWluU2Vjb25kIOS7peS4i+eahCBkaXNhYmxlZFxuICAgICAgICAgIGlmIChtaW5NaW51dGUgPT09IGN1cnJlbnRNaW51dGUpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZSA8IG1pblNlY29uZFxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyDlnKjmnIDlpKfnmoTliIbpkp/lhoXml7bvvIzov5nml7blgJnopoHmioogbWF4U2Vjb25kIOS7peS4iueahCBkaXNhYmxlZFxuICAgICAgICAgIGlmIChtYXhNaW51dGUgPT09IGN1cnJlbnRNaW51dGUpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZSA+IG1heFNlY29uZFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyDlnKjmnIDlsI/nmoTlsI/ml7blhoXml7bvvIzov5nml7blgJnopoHmioogbWluTWludXRlIOS7peS4i+eahCBkaXNhYmxlZFxuICAgICAgICBpZiAobWluSG91ciA9PT0gY3VycmVudEhvdXIpIHtcbiAgICAgICAgICAvLyDlnKjmnIDlsI/nmoTlsI/ml7blhoXml7bvvIzov5nml7blgJnopoHmioogbWluTWludXRlIOS7peS4i+eahCBkaXNhYmxlZFxuICAgICAgICAgIGlmIChtaW5NaW51dGUgPT09IGN1cnJlbnRNaW51dGUpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZSA8IG1pblNlY29uZFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyDlnKjmnIDlpKfnmoTlsI/ml7blhoXml7bvvIzov5nml7blgJnopoHmioogbWF4TWludXRlIOS7peS4iueahCBkaXNhYmxlZFxuICAgICAgICBpZiAobWF4SG91ciA9PT0gY3VycmVudEhvdXIpIHtcbiAgICAgICAgICAvLyDlnKjmnIDlpKfnmoTlsI/ml7blhoXml7bvvIzov5nml7blgJnopoHmioogbWF4TWludXRlIOS7peS4iueahCBkaXNhYmxlZFxuICAgICAgICAgIGlmIChtYXhNaW51dGUgPT09IGN1cnJlbnRNaW51dGUpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZSA+IG1heFNlY29uZFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBjb25zdCB1cGRhdGVTY3JvbGxUb3AgPSAoZHVyYXRpb246IG51bWJlcikgPT4ge1xuICAgICAgaWYgKHNlbGVjdFJlZj8uY3VycmVudCkge1xuICAgICAgICBjb25zdCBhY3RpdmVJdGVtOiBQYXJ0aWFsPEhUTUxEaXZFbGVtZW50PiA9XG4gICAgICAgICAgc2VsZWN0UmVmLmN1cnJlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShgJHtwcmVmaXh9LWFjdGl2ZWApWzBdXG4gICAgICAgIGlmIChhY3RpdmVJdGVtKSB7XG4gICAgICAgICAgY29uc3QgeyBvZmZzZXRUb3AgfSA9IGFjdGl2ZUl0ZW1cbiAgICAgICAgICBpZiAob2Zmc2V0VG9wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmIChkdXJhdGlvbikge1xuICAgICAgICAgICAgICBzY3JvbGxUbyhzZWxlY3RSZWYuY3VycmVudCwgb2Zmc2V0VG9wLCBkdXJhdGlvbilcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNlbGVjdFJlZi5jdXJyZW50LnNjcm9sbFRvcCA9IG9mZnNldFRvcFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICB1cGRhdGVTY3JvbGxUb3AoMClcbiAgICB9LCBbXSlcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICB1cGRhdGVTY3JvbGxUb3AoMTIwKVxuICAgIH0sIFtzZWxlY3RlZFZhbHVlXSlcblxuICAgIGNvbnN0IGNsYXNzU2V0ID0gY2xhc3NOYW1lcyhcbiAgICAgIGAke3ByZWZpeH0tdGltZVNlbGVjdGAsXG4gICAgICBgJHtwcmVmaXh9LSR7Z2V0Q29tcHV0ZWRTaXplKHNpemUsIHNpemVDb250ZXh0KX1gLFxuICAgICAge1xuICAgICAgICBbYCR7cHJlZml4fS1pbnRlZ2VyVGltZVNlbGVjdGBdOiBvbmx5SG91cixcbiAgICAgIH1cbiAgICApXG5cbiAgICBjb25zdCB7XG4gICAgICBob3VyOiBtaW5Ib3VyLFxuICAgICAgbWludXRlOiBtaW5NaW51dGUsXG4gICAgICBzZWNvbmQ6IG1pblNlY29uZCxcbiAgICB9ID0gZXh0cmFjdEhNU0Zyb21UaW1lKG1pblRpbWUpXG4gICAgY29uc3Qge1xuICAgICAgaG91cjogbWF4SG91cixcbiAgICAgIG1pbnV0ZTogbWF4TWludXRlLFxuICAgICAgc2Vjb25kOiBtYXhTZWNvbmQsXG4gICAgfSA9IGV4dHJhY3RITVNGcm9tVGltZShtYXhUaW1lKVxuXG4gICAgbGV0IGl0ZW1zOiBzdHJpbmdbXSA9IFtdXG4gICAgaWYgKHR5cGUgPT09IFwic2Vjb25kXCIpIHtcbiAgICAgIGl0ZW1zID0gc2Vjb25kc1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJtaW51dGVcIikge1xuICAgICAgaXRlbXMgPSBtaW51dGVzXG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW1zID0gaG91cnNcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzU2V0fSByZWY9e3NlbGVjdFJlZn0gey4uLm90aGVyUHJvcHN9PlxuICAgICAgICB7aXRlbXMubWFwKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGRpc2FibGVkID0gaXNEaXNhYmxlZChcbiAgICAgICAgICAgIHBhcnNlSW50KHZhbHVlLCAxMCksXG4gICAgICAgICAgICBwYXJzZUludChtaW5Ib3VyIHx8IFwiMDBcIiwgMTApLFxuICAgICAgICAgICAgcGFyc2VJbnQobWluTWludXRlIHx8IFwiMDBcIiwgMTApLFxuICAgICAgICAgICAgcGFyc2VJbnQobWluU2Vjb25kIHx8IFwiMDBcIiwgMTApLFxuICAgICAgICAgICAgcGFyc2VJbnQobWF4SG91ciB8fCBcIjI0XCIsIDEwKSxcbiAgICAgICAgICAgIHBhcnNlSW50KG1heE1pbnV0ZSB8fCBcIjU5XCIsIDEwKSxcbiAgICAgICAgICAgIHBhcnNlSW50KG1heFNlY29uZCB8fCBcIjU5XCIsIDEwKSxcbiAgICAgICAgICAgIG9ubHlIb3VyXG4gICAgICAgICAgKVxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgKChkaXNhYmxlZCB8fCAoZGlzYWJsZWRIb3VycyAmJiBkaXNhYmxlZEhvdXJzKHZhbHVlKSkpICYmXG4gICAgICAgICAgICAgIHR5cGUgPT09IFwiaG91clwiKSB8fFxuICAgICAgICAgICAgKGRpc2FibGVkTWludXRlcyAmJiBkaXNhYmxlZE1pbnV0ZXModmFsdWUpICYmIHR5cGUgPT09IFwibWludXRlXCIpIHx8XG4gICAgICAgICAgICAoZGlzYWJsZWRTZWNvbmRzICYmIGRpc2FibGVkU2Vjb25kcyh2YWx1ZSkgJiYgdHlwZSA9PT0gXCJzZWNvbmRcIilcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIOWwj+aXtueahCBkaXNhYmxlZCDnm7TmjqXkuI3mmL7npLrvvIzogIzkuI3mmK/lgZogZGlzYWJsZWQg5aSE55CGXG4gICAgICAgICAgICAvLyDliIbpkp/nmoQgZGlzYWJsZWQg5pi+56S677yM5aaC5p6c5Lyg5YWl5LqGIGRpc2FibGVkTWludXRlcyDliJnkuI3mmL7npLpcbiAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgaXRlbUNsYXNzU2V0ID0gY2xhc3NOYW1lcyhgJHtwcmVmaXh9LWl0ZW1gLCB7XG4gICAgICAgICAgICBbYCR7cHJlZml4fS1hY3RpdmVgXTogc2VsZWN0ZWRWYWx1ZSA9PT0gdmFsdWUsXG4gICAgICAgICAgICBbYCR7cHJlZml4fS1kaXNhYmxlZGBdOiBkaXNhYmxlZCxcbiAgICAgICAgICB9KVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIHJvbGU9XCJub25lXCJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtpdGVtQ2xhc3NTZXR9XG4gICAgICAgICAgICAgIGtleT17dmFsdWV9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgICBoYW5kbGVDbGljayh2YWx1ZSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtvbmx5SG91ciA/IGAke3ZhbHVlfTowMGAgOiB2YWx1ZX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIClcbiAgICAgICAgfSl9XG4gICAgICA8L2Rpdj5cbiAgICApXG4gIH1cbilcblxuVGltZVNlbGVjdC5kaXNwbGF5TmFtZSA9IFwiVGltZVNlbGVjdFwiXG5cblRpbWVTZWxlY3QucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICog5b2T5YmN5bCP5pe25YC8XG4gICAqL1xuICBjdXJyZW50SG91cjogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIOW9k+WJjeWIhumSn+WAvFxuICAgKi9cbiAgY3VycmVudE1pbnV0ZTogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIOS4jeWPr+mAieeahOWwj+aXtlxuICAgKi9cbiAgZGlzYWJsZWRIb3VyczogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiDkuI3lj6/pgInnmoTliIbpkp9cbiAgICovXG4gIGRpc2FibGVkTWludXRlczogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiDkuI3lj6/pgInnmoTnp5JcbiAgICovXG4gIGRpc2FibGVkU2Vjb25kczogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiDlj6/pgInml7bpl7TmrrXnmoTmnIDlpKflgLxcbiAgICovXG4gIG1heFRpbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiDlj6/pgInml7bpl7TmrrXnmoTmnIDlsI/lgLxcbiAgICovXG4gIG1pblRpbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiDmlLnlj5jpgInmi6nnmoTlgLxcbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICog5Yik5pat5piv5ZCm5piv5pW054K5XG4gICAqL1xuICBvbmx5SG91cjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiDlt7Lnu4/pgInmi6nnmoTlgLxcbiAgICovXG4gIHNlbGVjdGVkVmFsdWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiDorr7nva7lsLrlr7hcbiAgICovXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZihbXCJtaW5pXCIsIFwic21hbGxcIiwgXCJtZWRpdW1cIiwgXCJsYXJnZVwiXSksXG4gIC8qKlxuICAgKiDliKTmlq3pgInmi6nmoYbnmoTnsbvlnotcbiAgICovXG4gIHR5cGU6IFByb3BUeXBlcy5hbnksXG59XG5cblRpbWVTZWxlY3QuZGVmYXVsdFByb3BzID0ge1xuICBjdXJyZW50SG91cjogbnVsbCxcbiAgY3VycmVudE1pbnV0ZTogbnVsbCxcbiAgZGlzYWJsZWRIb3Vyczogbm9vcCxcbiAgZGlzYWJsZWRNaW51dGVzOiBub29wLFxuICBkaXNhYmxlZFNlY29uZHM6IG5vb3AsXG4gIG1heFRpbWU6IFwiMjQ6MDBcIixcbiAgbWluVGltZTogXCIwMDowMFwiLFxuICBvbkNoYW5nZTogbm9vcCxcbiAgb25seUhvdXI6IGZhbHNlLFxuICBzZWxlY3RlZFZhbHVlOiBudWxsLFxuICBzaXplOiBcInNtYWxsXCIsXG4gIHR5cGU6IFwiaG91clwiLFxufVxuXG5leHBvcnQgZGVmYXVsdCBtZW1vKFRpbWVTZWxlY3QpXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsT0FBT0EsS0FBSyxJQUNWQyxVQUFVLEVBQ1ZDLFVBQVUsRUFDVkMsbUJBQW1CLEVBQ25CQyxNQUFNLEVBQ05DLFNBQVMsRUFDVEMsSUFBSSxRQUNDLE9BQU87QUFDZCxPQUFPQyxTQUFTLE1BQU0sWUFBWTtBQUNsQyxPQUFPQyxVQUFVLE1BQU0sWUFBWTtBQUNuQyxTQUFTQyx3QkFBd0IsUUFBUSxjQUFjO0FBQ3ZELE9BQU8sU0FBUztBQUNoQixTQUFTQyxrQkFBa0IsRUFBRUMsS0FBSyxFQUFFQyxPQUFPLEVBQUVDLE9BQU8sUUFBUSxRQUFRO0FBQ3BFLFNBQVNDLGFBQWEsRUFBRUMsZUFBZSxRQUFRLG9CQUFvQjtBQUVuRSxJQUFNQyxNQUFNLEdBQUcsV0FBVztBQUMxQixJQUFNQyxJQUFJLEdBQUcsU0FBUEEsSUFBSUEsQ0FBQSxFQUFTLENBQUMsQ0FBQztBQWtCckIsSUFBTUMsU0FBUSxHQUFHLFNBQVhBLFFBQVFBLENBQUlDLE9BQXVCLEVBQUVDLEVBQVUsRUFBRUMsUUFBZ0IsRUFBSztFQUMxRSxJQUFNQyxZQUFZLEdBQUdiLHdCQUF3QixDQUFDLENBQUM7RUFFL0MsSUFBSVksUUFBUSxJQUFJLENBQUMsRUFBRTtJQUNqQkYsT0FBTyxDQUFDSSxTQUFTLEdBQUdILEVBQUU7SUFDdEI7RUFDRjtFQUNBLElBQU1JLFVBQVUsR0FBR0osRUFBRSxHQUFHRCxPQUFPLENBQUNJLFNBQVM7RUFDekMsSUFBTUUsT0FBTyxHQUFJRCxVQUFVLEdBQUdILFFBQVEsR0FBSSxFQUFFO0VBRTVDQyxZQUFZLENBQUMsWUFBTTtJQUNqQkgsT0FBTyxDQUFDSSxTQUFTLElBQUlFLE9BQU87SUFDNUIsSUFBSU4sT0FBTyxD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