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>
297 lines • 46.4 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 = ["className", "closeOnSelect", "defaultValue", "disabled", "disabledHours", "disabledMinutes", "disabledSeconds", "maxTime", "minTime", "onChange", "onlyHour", "placeholder", "popoverProps", "secondsAvailable", "size", "value"];
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 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) { _defineProperty(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 _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 _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
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, useState, useMemo } from "react";
import PropTypes from "prop-types";
import classNames from "classnames";
import { ConfigContext, getComputedSize } from "../config-provider";
import Icon from "../icon";
import Input from "../input";
import Popover from "../popover";
import TimeSelect from "./TimeSelect";
import "./style";
import { transformTimeWithSeconds, extractHMSFromTime, isLegalTimeString, isTimeAfter, isTimeBefore } from "./core";
var prefix = "adui-time";
var noop = function noop() {};
var TimePicker = forwardRef(function (_ref, ref) {
var className = _ref.className,
closeOnSelect = _ref.closeOnSelect,
defaultValue = _ref.defaultValue,
disabled = _ref.disabled,
disabledHours = _ref.disabledHours,
disabledMinutes = _ref.disabledMinutes,
disabledSeconds = _ref.disabledSeconds,
maxTime = _ref.maxTime,
minTime = _ref.minTime,
onChange = _ref.onChange,
onlyHour = _ref.onlyHour,
placeholder = _ref.placeholder,
popoverProps = _ref.popoverProps,
_ref$secondsAvailable = _ref.secondsAvailable,
secondsAvailable = _ref$secondsAvailable === void 0 ? false : _ref$secondsAvailable,
sizeProp = _ref.size,
value = _ref.value,
otherProps = _objectWithoutProperties(_ref, _excluded);
var getInitialState = function getInitialState() {
var valueState = value !== null ? value : defaultValue;
var _extractHMSFromTime = extractHMSFromTime(valueState),
hour = _extractHMSFromTime.hour,
minute = _extractHMSFromTime.minute,
second = _extractHMSFromTime.second;
return {
hour: hour,
inputValue: valueState || "",
minute: onlyHour ? "00" : minute,
second: secondsAvailable ? second : "00",
prevValueProp: valueState || "",
visible: false
};
};
var initialState = useMemo(getInitialState, []);
var _useState = useState(initialState.inputValue),
_useState2 = _slicedToArray(_useState, 2),
inputValue = _useState2[0],
setInputValue = _useState2[1];
var _useState3 = useState(initialState.hour),
_useState4 = _slicedToArray(_useState3, 2),
hour = _useState4[0],
setHour = _useState4[1];
var _useState5 = useState(initialState.minute),
_useState6 = _slicedToArray(_useState5, 2),
minute = _useState6[0],
setMinute = _useState6[1];
var _useState7 = useState(initialState.second),
_useState8 = _slicedToArray(_useState7, 2),
second = _useState8[0],
setSecond = _useState8[1];
var _useState9 = useState(initialState.prevValueProp),
_useState10 = _slicedToArray(_useState9, 2),
prevValueProp = _useState10[0],
setPrevValueProp = _useState10[1];
var _useState11 = useState(initialState.visible),
_useState12 = _slicedToArray(_useState11, 2),
visible = _useState12[0],
setVisible = _useState12[1];
if (value !== null && prevValueProp !== value) {
var _extractHMSFromTime2 = extractHMSFromTime(value),
newHour = _extractHMSFromTime2.hour,
newMinute = _extractHMSFromTime2.minute,
newSecond = _extractHMSFromTime2.second;
setInputValue(value || "");
setHour(newHour);
setMinute(onlyHour ? "00" : newMinute);
setSecond(secondsAvailable ? newSecond : "00");
setPrevValueProp(value || "");
}
var inputRef = useRef(null);
var _useContext = useContext(ConfigContext),
sizeContext = _useContext.size;
var size = getComputedSize(sizeProp, sizeContext);
var handleClick = function handleClick(valueNew, type) {
var valueProp = value;
var inputValueNow = "";
if (secondsAvailable) {
if (type === "hour") {
inputValueNow = "".concat(valueNew, ":").concat(minute || "", ":").concat(second || "");
} else if (type === "minute") {
inputValueNow = "".concat(hour || "", ":").concat(valueNew, ":").concat(second || "");
} else {
inputValueNow = "".concat(hour || "", ":").concat(minute || "", ":").concat(valueNew);
}
} else {
inputValueNow = type === "hour" ? "".concat(valueNew, ":").concat(minute || "") : "".concat(hour || "", ":").concat(valueNew);
}
if (maxTime && isTimeAfter(inputValueNow, maxTime)) {
inputValueNow = secondsAvailable ? transformTimeWithSeconds(maxTime) : maxTime;
} else if (minTime && isTimeBefore(inputValueNow, minTime)) {
inputValueNow = secondsAvailable ? transformTimeWithSeconds(minTime) : minTime;
}
if (valueProp === null) {
var valueFinal = _objectSpread({
inputValueNow: inputValueNow
}, extractHMSFromTime(inputValueNow));
setHour(valueFinal.hour);
setMinute(valueFinal.minute);
setSecond(valueFinal.second);
setInputValue(valueFinal.inputValueNow);
}
if (isLegalTimeString({
time: inputValue,
onlyHour: onlyHour
})) {
if (onChange) {
onChange(inputValueNow);
}
if (closeOnSelect) {
setTimeout(function () {
setVisible(false);
}, 120);
}
}
};
var handleVisibleChange = function handleVisibleChange(visibleNew) {
var inputElement = inputRef.current.input;
if (disabled) {
return;
}
setTimeout(function () {
var _document = document,
activeElement = _document.activeElement;
if (visibleNew || !visibleNew && inputElement !== activeElement) {
var withSeconds = hour && minute && second ? "".concat(hour, ":").concat(minute, ":").concat(second) : "";
var noSeconds = hour && minute ? "".concat(hour, ":").concat(minute) : "";
var newInputValue = secondsAvailable ? withSeconds : noSeconds;
if (!visibleNew && inputValue !== newInputValue) {
setInputValue(newInputValue);
}
setVisible(visibleNew);
}
}, 0);
};
var handleInputChange = function handleInputChange(_ref2) {
var inputValueNew = _ref2.target.value;
setInputValue(inputValueNew);
if (inputValueNew === "" || isLegalTimeString({
time: inputValueNew,
onlyHour: onlyHour
}) && !isTimeAfter(inputValueNew, maxTime) && !isTimeBefore(inputValueNew, minTime)) {
var _extractHMSFromTime3 = extractHMSFromTime(inputValueNew),
hourNew = _extractHMSFromTime3.hour,
minuteNew = _extractHMSFromTime3.minute,
secondNew = _extractHMSFromTime3.second;
if (!(disabledHours && disabledHours(hourNew)) && !(disabledMinutes && disabledMinutes(minuteNew)) && !(disabledSeconds && disabledSeconds(secondNew))) {
if (onChange) {
onChange(inputValueNew);
}
if (value === null) {
setHour(hourNew);
setMinute(onlyHour ? "00" : minuteNew);
setSecond(secondsAvailable ? secondNew : "00");
}
}
}
};
var handleInputFocus = function handleInputFocus() {
if (!visible) {
setVisible(true);
}
};
var handleInputKeyDown = function handleInputKeyDown(_ref3) {
var key = _ref3.key;
var keys = ["Tab", "Escape", "Enter"];
if (keys.includes(key)) {
setVisible(false);
inputRef.current.input.blur();
}
};
useImperativeHandle(ref, function () {
return {
input: inputRef.current,
handleVisibleChange: handleVisibleChange
};
});
var classSet = classNames(className, "".concat(prefix, "-input"), "".concat(prefix, "-").concat(size), _defineProperty({}, "".concat(prefix, "-secondsAvailable"), secondsAvailable));
return React.createElement(Popover, _extends({
arrowed: false,
onVisibleChange: handleVisibleChange,
popup: React.createElement("div", null, React.createElement(TimeSelect, {
onChange: handleClick,
currentHour: hour ? parseInt(hour, 10) : null,
disabledHours: disabledHours,
maxTime: maxTime,
minTime: minTime,
onlyHour: onlyHour,
selectedValue: hour,
size: size,
type: "hour"
}), !onlyHour && React.createElement(TimeSelect, {
disabledMinutes: disabledMinutes,
onChange: handleClick,
currentHour: hour ? parseInt(hour, 10) : null,
maxTime: maxTime,
minTime: minTime,
selectedValue: minute,
size: size,
type: "minute"
}), secondsAvailable && React.createElement(TimeSelect, {
disabledSeconds: disabledSeconds,
onChange: handleClick,
currentHour: hour ? parseInt(hour, 10) : null,
currentMinute: minute ? parseInt(minute, 10) : null,
maxTime: maxTime,
minTime: minTime,
selectedValue: second,
size: size,
type: "second"
})),
trigger: "click",
visible: visible
}, popoverProps), React.createElement(Input, _extends({
className: classSet,
cleaveOptions: {
blocks: secondsAvailable ? [2, 2, 2] : [2, 2],
delimiter: ":"
},
disabled: disabled,
rightElement: React.createElement(Icon, {
icon: "time-outlined"
}),
size: size,
value: inputValue,
onChange: handleInputChange,
onFocus: handleInputFocus,
onKeyDown: handleInputKeyDown,
ref: inputRef
}, otherProps)));
});
TimePicker.displayName = "TimePicker";
TimePicker.propTypes = {
className: PropTypes.string,
closeOnSelect: PropTypes.bool,
defaultValue: PropTypes.string,
disabled: PropTypes.bool,
disabledHours: PropTypes.func,
disabledMinutes: PropTypes.func,
disabledSeconds: PropTypes.func,
intent: PropTypes.oneOf(["normal", "primary", "success", "warning", "danger"]),
maxTime: PropTypes.string,
minTime: PropTypes.string,
onChange: PropTypes.func,
onlyHour: PropTypes.bool,
placeholder: PropTypes.string,
size: PropTypes.oneOf(["mini", "small", "medium", "large"]),
value: PropTypes.string
};
TimePicker.defaultProps = {
className: "",
closeOnSelect: false,
defaultValue: null,
disabled: false,
disabledHours: noop,
disabledMinutes: noop,
disabledSeconds: noop,
intent: "normal",
maxTime: "24:00",
minTime: null,
onChange: noop,
onlyHour: false,
placeholder: "请选择",
secondsAvailable: false,
size: "small",
value: null
};
export default TimePicker;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsImZvcndhcmRSZWYiLCJ1c2VDb250ZXh0IiwidXNlSW1wZXJhdGl2ZUhhbmRsZSIsInVzZVJlZiIsInVzZVN0YXRlIiwidXNlTWVtbyIsIlByb3BUeXBlcyIsImNsYXNzTmFtZXMiLCJDb25maWdDb250ZXh0IiwiZ2V0Q29tcHV0ZWRTaXplIiwiSWNvbiIsIklucHV0IiwiUG9wb3ZlciIsIlRpbWVTZWxlY3QiLCJ0cmFuc2Zvcm1UaW1lV2l0aFNlY29uZHMiLCJleHRyYWN0SE1TRnJvbVRpbWUiLCJpc0xlZ2FsVGltZVN0cmluZyIsImlzVGltZUFmdGVyIiwiaXNUaW1lQmVmb3JlIiwicHJlZml4Iiwibm9vcCIsIlRpbWVQaWNrZXIiLCJfcmVmIiwicmVmIiwiY2xhc3NOYW1lIiwiY2xvc2VPblNlbGVjdCIsImRlZmF1bHRWYWx1ZSIsImRpc2FibGVkIiwiZGlzYWJsZWRIb3VycyIsImRpc2FibGVkTWludXRlcyIsImRpc2FibGVkU2Vjb25kcyIsIm1heFRpbWUiLCJtaW5UaW1lIiwib25DaGFuZ2UiLCJvbmx5SG91ciIsInBsYWNlaG9sZGVyIiwicG9wb3ZlclByb3BzIiwiX3JlZiRzZWNvbmRzQXZhaWxhYmxlIiwic2Vjb25kc0F2YWlsYWJsZSIsInNpemVQcm9wIiwic2l6ZSIsInZhbHVlIiwib3RoZXJQcm9wcyIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsIl9leGNsdWRlZCIsImdldEluaXRpYWxTdGF0ZSIsInZhbHVlU3RhdGUiLCJfZXh0cmFjdEhNU0Zyb21UaW1lIiwiaG91ciIsIm1pbnV0ZSIsInNlY29uZCIsImlucHV0VmFsdWUiLCJwcmV2VmFsdWVQcm9wIiwidmlzaWJsZSIsImluaXRpYWxTdGF0ZSIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsInNldElucHV0VmFsdWUiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsInNldEhvdXIiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsInNldE1pbnV0ZSIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4Iiwic2V0U2Vjb25kIiwiX3VzZVN0YXRlOSIsIl91c2VTdGF0ZTEwIiwic2V0UHJldlZhbHVlUHJvcCIsIl91c2VTdGF0ZTExIiwiX3VzZVN0YXRlMTIiLCJzZXRWaXNpYmxlIiwiX2V4dHJhY3RITVNGcm9tVGltZTIiLCJuZXdIb3VyIiwibmV3TWludXRlIiwibmV3U2Vjb25kIiwiaW5wdXRSZWYiLCJfdXNlQ29udGV4dCIsInNpemVDb250ZXh0IiwiaGFuZGxlQ2xpY2siLCJ2YWx1ZU5ldyIsInR5cGUiLCJ2YWx1ZVByb3AiLCJpbnB1dFZhbHVlTm93IiwiY29uY2F0IiwidmFsdWVGaW5hbCIsIl9vYmplY3RTcHJlYWQiLCJ0aW1lIiwic2V0VGltZW91dCIsImhhbmRsZVZpc2libGVDaGFuZ2UiLCJ2aXNpYmxlTmV3IiwiaW5wdXRFbGVtZW50IiwiY3VycmVudCIsImlucHV0IiwiX2RvY3VtZW50IiwiZG9jdW1lbnQiLCJhY3RpdmVFbGVtZW50Iiwid2l0aFNlY29uZHMiLCJub1NlY29uZHMiLCJuZXdJbnB1dFZhbHVlIiwiaGFuZGxlSW5wdXRDaGFuZ2UiLCJfcmVmMiIsImlucHV0VmFsdWVOZXciLCJ0YXJnZXQiLCJfZXh0cmFjdEhNU0Zyb21UaW1lMyIsImhvdXJOZXciLCJtaW51dGVOZXciLCJzZWNvbmROZXciLCJoYW5kbGVJbnB1dEZvY3VzIiwiaGFuZGxlSW5wdXRLZXlEb3duIiwiX3JlZjMiLCJrZXkiLCJrZXlzIiwiaW5jbHVkZXMiLCJibHVyIiwiY2xhc3NTZXQiLCJfZGVmaW5lUHJvcGVydHkiLCJjcmVhdGVFbGVtZW50IiwiX2V4dGVuZHMiLCJhcnJvd2VkIiwib25WaXNpYmxlQ2hhbmdlIiwicG9wdXAiLCJjdXJyZW50SG91ciIsInBhcnNlSW50Iiwic2VsZWN0ZWRWYWx1ZSIsImN1cnJlbnRNaW51dGUiLCJ0cmlnZ2VyIiwiY2xlYXZlT3B0aW9ucyIsImJsb2NrcyIsImRlbGltaXRlciIsInJpZ2h0RWxlbWVudCIsImljb24iLCJvbkZvY3VzIiwib25LZXlEb3duIiwiZGlzcGxheU5hbWUiLCJwcm9wVHlwZXMiLCJzdHJpbmciLCJib29sIiwiZnVuYyIsImludGVudCIsIm9uZU9mIiwiZGVmYXVsdFByb3BzIl0sInNvdXJjZXMiOlsiLi4vLi4vY29tcG9uZW50cy90aW1lLXBpY2tlci9UaW1lUGlja2VyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHtcbiAgZm9yd2FyZFJlZixcbiAgdXNlQ29udGV4dCxcbiAgdXNlSW1wZXJhdGl2ZUhhbmRsZSxcbiAgdXNlUmVmLFxuICB1c2VTdGF0ZSxcbiAgdXNlTWVtbyxcbn0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSBcImNsYXNzbmFtZXNcIlxuaW1wb3J0IHsgQ29uZmlnQ29udGV4dCwgZ2V0Q29tcHV0ZWRTaXplIH0gZnJvbSBcIi4uL2NvbmZpZy1wcm92aWRlclwiXG5pbXBvcnQgSWNvbiBmcm9tIFwiLi4vaWNvblwiXG5pbXBvcnQgSW5wdXQgZnJvbSBcIi4uL2lucHV0XCJcbmltcG9ydCBQb3BvdmVyLCB7IElQb3BvdmVyUHJvcHMgfSBmcm9tIFwiLi4vcG9wb3ZlclwiXG5pbXBvcnQgVGltZVNlbGVjdCBmcm9tIFwiLi9UaW1lU2VsZWN0XCJcbmltcG9ydCBcIi4vc3R5bGVcIlxuaW1wb3J0IHtcbiAgdHJhbnNmb3JtVGltZVdpdGhTZWNvbmRzLFxuICBleHRyYWN0SE1TRnJvbVRpbWUsXG4gIGlzTGVnYWxUaW1lU3RyaW5nLFxuICBpc1RpbWVBZnRlcixcbiAgaXNUaW1lQmVmb3JlLFxufSBmcm9tIFwiLi9jb3JlXCJcblxuY29uc3QgcHJlZml4ID0gXCJhZHVpLXRpbWVcIlxuY29uc3Qgbm9vcCA9ICgpID0+IHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRpbWVQaWNrZXJQcm9wcyB7XG4gIFtrZXk6IHN0cmluZ106IGFueVxuICAvKipcbiAgICog6ZmE5Yqg57G75ZCNXG4gICAqL1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbiAgLyoqXG4gICAqIOaYr+WQpuWcqOmAieaLqeWQju+8jOa2iOWksSBQb3BvdmVyXG4gICAqL1xuICBjbG9zZU9uU2VsZWN0PzogYm9vbGVhblxuICAvKipcbiAgICog5YaF6YOo6amx5Yqo77yM6buY6K6k6YCJ5oup5pe26Ze0XG4gICAqL1xuICBkZWZhdWx0VmFsdWU/OiBudWxsIHwgc3RyaW5nXG4gIC8qKlxuICAgKiDmmK/lkKbnpoHnlKhcbiAgICovXG4gIGRpc2FibGVkPzogYm9vbGVhblxuICAvKipcbiAgICog56aB5q2i6YCJ5oup55qE5bCP5pe2XG4gICAqL1xuICBkaXNhYmxlZEhvdXJzPzogKGhvdXI/OiBzdHJpbmcgfCBudWxsKSA9PiBib29sZWFuIHwgdm9pZFxuICAvKipcbiAgICog56aB5q2i6YCJ5oup55qE5YiG6ZKfXG4gICAqL1xuICBkaXNhYmxlZE1pbnV0ZXM/OiAobWludXRlPzogc3RyaW5nIHwgbnVsbCkgPT4gYm9vbGVhbiB8IHZvaWRcbiAgLyoqXG4gICAqIOemgeatoumAieaLqeeahOenklxuICAgKi9cbiAgZGlzYWJsZWRTZWNvbmRzPzogKHNlY29uZD86IHN0cmluZyB8IG51bGwpID0+IGJvb2xlYW4gfCB2b2lkXG4gIC8qKlxuICAgKiDorr7nva7ovpPlhaXmoYbnsbvlnotcbiAgICovXG4gIGludGVudD86IFwibm9ybWFsXCIgfCBcInByaW1hcnlcIiB8IFwic3VjY2Vzc1wiIHwgXCJ3YXJuaW5nXCIgfCBcImRhbmdlclwiXG4gIC8qKlxuICAgKiDlj6/pgInml7bpl7TnmoTmnIDlpKflgLxcbiAgICovXG4gIG1heFRpbWU/OiBzdHJpbmcgfCBudWxsXG4gIC8qKlxuICAgKiDlj6/pgInml7bpl7TnmoTmnIDlsI/lgLxcbiAgICovXG4gIG1pblRpbWU/OiBzdHJpbmcgfCBudWxsXG4gIC8qKlxuICAgKiDml7bpl7TmlLnlj5jnmoQgaGFuZGxlclxuICAgKi9cbiAgb25DaGFuZ2U/OiAodmFsdWU6IHN0cmluZykgPT4gdm9pZFxuICAvKipcbiAgICog5Yik5pat5piv5ZCm5piv5pW05pWwXG4gICAqL1xuICBvbmx5SG91cj86IGJvb2xlYW5cbiAgLyoqXG4gICAqIOWNoOS9jeWtl+esplxuICAgKi9cbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmdcbiAgLyoqXG4gICAqIOS8oOWFpSBQb3BvdmVyIOeahCBwcm9wc1xuICAgKi9cbiAgcG9wb3ZlclByb3BzPzogSVBvcG92ZXJQcm9wc1xuICAvKipcbiAgICogMjAyMjEyMTY6IOaUr+aMgeenkueahOmAieaLqVxuICAgKi9cbiAgc2Vjb25kc0F2YWlsYWJsZT86IGJvb2xlYW5cbiAgLyoqXG4gICAqIOiuvue9ruWwuuWvuFxuICAgKi9cbiAgc2l6ZT86IFwibWluaVwiIHwgXCJzbWFsbFwiIHwgXCJtZWRpdW1cIiB8IFwibGFyZ2VcIlxuICAvKipcbiAgICog5aSW6YOo5o6n5Yi277ya5b2T5YmN5pe26Ze0XG4gICAqL1xuICB2YWx1ZT86IG51bGwgfCBzdHJpbmdcbn1cblxuLyoqXG4gKiDml7bpl7TpgInmi6nlmajnlKjkuo7kuobop6PlvZPliY3lt7LpgInml7bpl7TvvIzpgInmi6nmiJbovpPlhaXpnIDopoHnmoTml7bpl7TjgIHml7bpl7TojIPlm7TnrYnjgIJcbiAqL1xuY29uc3QgVGltZVBpY2tlcjogUmVhY3QuRm9yd2FyZFJlZkV4b3RpY0NvbXBvbmVudDxcbiAgSVRpbWVQaWNrZXJQcm9wcyAmIFJlYWN0LlJlZkF0dHJpYnV0ZXM8YW55PlxuPiA9IGZvcndhcmRSZWYoXG4gIChcbiAgICB7XG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjbG9zZU9uU2VsZWN0LFxuICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgZGlzYWJsZWQsXG4gICAgICBkaXNhYmxlZEhvdXJzLFxuICAgICAgZGlzYWJsZWRNaW51dGVzLFxuICAgICAgZGlzYWJsZWRTZWNvbmRzLFxuICAgICAgbWF4VGltZSxcbiAgICAgIG1pblRpbWUsXG4gICAgICBvbkNoYW5nZSxcbiAgICAgIG9ubHlIb3VyLFxuICAgICAgcGxhY2Vob2xkZXIsXG4gICAgICBwb3BvdmVyUHJvcHMsXG4gICAgICBzZWNvbmRzQXZhaWxhYmxlID0gZmFsc2UsXG4gICAgICBzaXplOiBzaXplUHJvcCxcbiAgICAgIHZhbHVlLFxuICAgICAgLi4ub3RoZXJQcm9wc1xuICAgIH06IElUaW1lUGlja2VyUHJvcHMsXG4gICAgcmVmXG4gICkgPT4ge1xuICAgIGNvbnN0IGdldEluaXRpYWxTdGF0ZSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlU3RhdGUgPSB2YWx1ZSAhPT0gbnVsbCA/IHZhbHVlIDogZGVmYXVsdFZhbHVlXG4gICAgICBjb25zdCB7IGhvdXIsIG1pbnV0ZSwgc2Vjb25kIH0gPSBleHRyYWN0SE1TRnJvbVRpbWUodmFsdWVTdGF0ZSlcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhvdXIsXG4gICAgICAgIGlucHV0VmFsdWU6IHZhbHVlU3RhdGUgfHwgXCJcIixcbiAgICAgICAgbWludXRlOiBvbmx5SG91ciA/IFwiMDBcIiA6IG1pbnV0ZSxcbiAgICAgICAgc2Vjb25kOiBzZWNvbmRzQXZhaWxhYmxlID8gc2Vjb25kIDogXCIwMFwiLFxuICAgICAgICBwcmV2VmFsdWVQcm9wOiB2YWx1ZVN0YXRlIHx8IFwiXCIsXG4gICAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBpbml0aWFsU3RhdGUgPSB1c2VNZW1vKGdldEluaXRpYWxTdGF0ZSwgW10pXG4gICAgY29uc3QgW2lucHV0VmFsdWUsIHNldElucHV0VmFsdWVdID0gdXNlU3RhdGUoaW5pdGlhbFN0YXRlLmlucHV0VmFsdWUpXG4gICAgY29uc3QgW2hvdXIsIHNldEhvdXJdID0gdXNlU3RhdGUoaW5pdGlhbFN0YXRlLmhvdXIpXG4gICAgY29uc3QgW21pbnV0ZSwgc2V0TWludXRlXSA9IHVzZVN0YXRlKGluaXRpYWxTdGF0ZS5taW51dGUpXG4gICAgY29uc3QgW3NlY29uZCwgc2V0U2Vjb25kXSA9IHVzZVN0YXRlKGluaXRpYWxTdGF0ZS5zZWNvbmQpXG4gICAgY29uc3QgW3ByZXZWYWx1ZVByb3AsIHNldFByZXZWYWx1ZVByb3BdID0gdXNlU3RhdGUoXG4gICAgICBpbml0aWFsU3RhdGUucHJldlZhbHVlUHJvcFxuICAgIClcbiAgICBjb25zdCBbdmlzaWJsZSwgc2V0VmlzaWJsZV0gPSB1c2VTdGF0ZShpbml0aWFsU3RhdGUudmlzaWJsZSlcblxuICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiBwcmV2VmFsdWVQcm9wICE9PSB2YWx1ZSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBob3VyOiBuZXdIb3VyLFxuICAgICAgICBtaW51dGU6IG5ld01pbnV0ZSxcbiAgICAgICAgc2Vjb25kOiBuZXdTZWNvbmQsXG4gICAgICB9ID0gZXh0cmFjdEhNU0Zyb21UaW1lKHZhbHVlKVxuXG4gICAgICBzZXRJbnB1dFZhbHVlKHZhbHVlIHx8IFwiXCIpXG4gICAgICBzZXRIb3VyKG5ld0hvdXIpXG4gICAgICBzZXRNaW51dGUob25seUhvdXIgPyBcIjAwXCIgOiBuZXdNaW51dGUpXG4gICAgICBzZXRTZWNvbmQoc2Vjb25kc0F2YWlsYWJsZSA/IG5ld1NlY29uZCA6IFwiMDBcIilcbiAgICAgIHNldFByZXZWYWx1ZVByb3AodmFsdWUgfHwgXCJcIilcbiAgICB9XG5cbiAgICBjb25zdCBpbnB1dFJlZiA9IHVzZVJlZjxhbnk+KG51bGwpXG5cbiAgICBjb25zdCB7IHNpemU6IHNpemVDb250ZXh0IH0gPSB1c2VDb250ZXh0KENvbmZpZ0NvbnRleHQpXG5cbiAgICBjb25zdCBzaXplID0gZ2V0Q29tcHV0ZWRTaXplKHNpemVQcm9wLCBzaXplQ29udGV4dClcblxuICAgIGNvbnN0IGhhbmRsZUNsaWNrID0gKHZhbHVlTmV3OiBzdHJpbmcsIHR5cGU6IFwiaG91clwiIHwgXCJtaW51dGVcIikgPT4ge1xuICAgICAgY29uc3QgdmFsdWVQcm9wID0gdmFsdWVcblxuICAgICAgbGV0IGlucHV0VmFsdWVOb3cgPSBcIlwiXG4gICAgICBpZiAoc2Vjb25kc0F2YWlsYWJsZSkge1xuICAgICAgICBpZiAodHlwZSA9PT0gXCJob3VyXCIpIHtcbiAgICAgICAgICBpbnB1dFZhbHVlTm93ID0gYCR7dmFsdWVOZXd9OiR7bWludXRlIHx8IFwiXCJ9OiR7c2Vjb25kIHx8IFwiXCJ9YFxuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwibWludXRlXCIpIHtcbiAgICAgICAgICBpbnB1dFZhbHVlTm93ID0gYCR7aG91ciB8fCBcIlwifToke3ZhbHVlTmV3fToke3NlY29uZCB8fCBcIlwifWBcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpbnB1dFZhbHVlTm93ID0gYCR7aG91ciB8fCBcIlwifToke21pbnV0ZSB8fCBcIlwifToke3ZhbHVlTmV3fWBcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5wdXRWYWx1ZU5vdyA9XG4gICAgICAgICAgdHlwZSA9PT0gXCJob3VyXCJcbiAgICAgICAgICAgID8gYCR7dmFsdWVOZXd9OiR7bWludXRlIHx8IFwiXCJ9YFxuICAgICAgICAgICAgOiBgJHtob3VyIHx8IFwiXCJ9OiR7dmFsdWVOZXd9YFxuICAgICAgfVxuXG4gICAgICBpZiAobWF4VGltZSAmJiBpc1RpbWVBZnRlcihpbnB1dFZhbHVlTm93LCBtYXhUaW1lKSkge1xuICAgICAgICBpbnB1dFZhbHVlTm93ID0gc2Vjb25kc0F2YWlsYWJsZVxuICAgICAgICAgID8gdHJhbnNmb3JtVGltZVdpdGhTZWNvbmRzKG1heFRpbWUpXG4gICAgICAgICAgOiBtYXhUaW1lXG4gICAgICB9IGVsc2UgaWYgKG1pblRpbWUgJiYgaXNUaW1lQmVmb3JlKGlucHV0VmFsdWVOb3csIG1pblRpbWUpKSB7XG4gICAgICAgIGlucHV0VmFsdWVOb3cgPSBzZWNvbmRzQXZhaWxhYmxlXG4gICAgICAgICAgPyB0cmFuc2Zvcm1UaW1lV2l0aFNlY29uZHMobWluVGltZSlcbiAgICAgICAgICA6IG1pblRpbWVcbiAgICAgIH1cblxuICAgICAgaWYgKHZhbHVlUHJvcCA9PT0gbnVsbCkge1xuICAgICAgICBjb25zdCB2YWx1ZUZpbmFsID0ge1xuICAgICAgICAgIGlucHV0VmFsdWVOb3csXG4gICAgICAgICAgLi4uZXh0cmFjdEhNU0Zyb21UaW1lKGlucHV0VmFsdWVOb3cpLFxuICAgICAgICB9XG4gICAgICAgIHNldEhvdXIodmFsdWVGaW5hbC5ob3VyKVxuICAgICAgICBzZXRNaW51dGUodmFsdWVGaW5hbC5taW51dGUpXG4gICAgICAgIHNldFNlY29uZCh2YWx1ZUZpbmFsLnNlY29uZClcbiAgICAgICAgc2V0SW5wdXRWYWx1ZSh2YWx1ZUZpbmFsLmlucHV0VmFsdWVOb3cpXG4gICAgICB9XG5cbiAgICAgIGlmIChpc0xlZ2FsVGltZVN0cmluZyh7IHRpbWU6IGlucHV0VmFsdWUsIG9ubHlIb3VyIH0pKSB7XG4gICAgICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgICAgIG9uQ2hhbmdlKGlucHV0VmFsdWVOb3cpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNsb3NlT25TZWxlY3QpIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHNldFZpc2libGUoZmFsc2UpXG4gICAgICAgICAgfSwgMTIwKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlVmlzaWJsZUNoYW5nZSA9ICh2aXNpYmxlTmV3OiBib29sZWFuKSA9PiB7XG4gICAgICBjb25zdCB7IGlucHV0OiBpbnB1dEVsZW1lbnQgfSA9IGlucHV0UmVmLmN1cnJlbnRcbiAgICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCB7IGFjdGl2ZUVsZW1lbnQgfSA9IGRvY3VtZW50XG4gICAgICAgIGlmICh2aXNpYmxlTmV3IHx8ICghdmlzaWJsZU5ldyAmJiBpbnB1dEVsZW1lbnQgIT09IGFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgICAgY29uc3Qgd2l0aFNlY29uZHMgPVxuICAgICAgICAgICAgaG91ciAmJiBtaW51dGUgJiYgc2Vjb25kID8gYCR7aG91cn06JHttaW51dGV9OiR7c2Vjb25kfWAgOiBcIlwiXG4gICAgICAgICAgY29uc3Qgbm9TZWNvbmRzID0gaG91ciAmJiBtaW51dGUgPyBgJHtob3VyfToke21pbnV0ZX1gIDogXCJcIlxuICAgICAgICAgIGNvbnN0IG5ld0lucHV0VmFsdWUgPSBzZWNvbmRzQXZhaWxhYmxlID8gd2l0aFNlY29uZHMgOiBub1NlY29uZHNcbiAgICAgICAgICBpZiAoIXZpc2libGVOZXcgJiYgaW5wdXRWYWx1ZSAhPT0gbmV3SW5wdXRWYWx1ZSkge1xuICAgICAgICAgICAgc2V0SW5wdXRWYWx1ZShuZXdJbnB1dFZhbHVlKVxuICAgICAgICAgIH1cbiAgICAgICAgICBzZXRWaXNpYmxlKHZpc2libGVOZXcpXG4gICAgICAgIH1cbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlSW5wdXRDaGFuZ2UgPSAoe1xuICAgICAgdGFyZ2V0OiB7IHZhbHVlOiBpbnB1dFZhbHVlTmV3IH0sXG4gICAgfTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICAgIHNldElucHV0VmFsdWUoaW5wdXRWYWx1ZU5ldylcbiAgICAgIGlmIChcbiAgICAgICAgaW5wdXRWYWx1ZU5ldyA9PT0gXCJcIiB8fFxuICAgICAgICAoaXNMZWdhbFRpbWVTdHJpbmcoe1xuICAgICAgICAgIHRpbWU6IGlucHV0VmFsdWVOZXcsXG4gICAgICAgICAgb25seUhvdXIsXG4gICAgICAgIH0pICYmXG4gICAgICAgICAgIWlzVGltZUFmdGVyKGlucHV0VmFsdWVOZXcsIG1heFRpbWUpICYmXG4gICAgICAgICAgIWlzVGltZUJlZm9yZShpbnB1dFZhbHVlTmV3LCBtaW5UaW1lKSlcbiAgICAgICkge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgaG91cjogaG91ck5ldyxcbiAgICAgICAgICBtaW51dGU6IG1pbnV0ZU5ldyxcbiAgICAgICAgICBzZWNvbmQ6IHNlY29uZE5ldyxcbiAgICAgICAgfSA9IGV4dHJhY3RITVNGcm9tVGltZShpbnB1dFZhbHVlTmV3KVxuICAgICAgICBpZiAoXG4gICAgICAgICAgIShkaXNhYmxlZEhvdXJzICYmIGRpc2FibGVkSG91cnMoaG91ck5ldykpICYmXG4gICAgICAgICAgIShkaXNhYmxlZE1pbnV0ZXMgJiYgZGlzYWJsZWRNaW51dGVzKG1pbnV0ZU5ldykpICYmXG4gICAgICAgICAgIShkaXNhYmxlZFNlY29uZHMgJiYgZGlzYWJsZWRTZWNvbmRzKHNlY29uZE5ldykpXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgICAgICAgb25DaGFuZ2UoaW5wdXRWYWx1ZU5ldylcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICBzZXRIb3VyKGhvdXJOZXcpXG4gICAgICAgICAgICBzZXRNaW51dGUob25seUhvdXIgPyBcIjAwXCIgOiBtaW51dGVOZXcpXG4gICAgICAgICAgICBzZXRTZWNvbmQoc2Vjb25kc0F2YWlsYWJsZSA/IHNlY29uZE5ldyA6IFwiMDBcIilcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBoYW5kbGVJbnB1dEZvY3VzID0gKCkgPT4ge1xuICAgICAgaWYgKCF2aXNpYmxlKSB7XG4gICAgICAgIHNldFZpc2libGUodHJ1ZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBoYW5kbGVJbnB1dEtleURvd24gPSAoe1xuICAgICAga2V5LFxuICAgIH06IFJlYWN0LktleWJvYXJkRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICAgIGNvbnN0IGtleXMgPSBbXCJUYWJcIiwgXCJFc2NhcGVcIiwgXCJFbnRlclwiXVxuICAgICAgaWYgKGtleXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICBzZXRWaXNpYmxlKGZhbHNlKVxuICAgICAgICBpbnB1dFJlZi5jdXJyZW50LmlucHV0LmJsdXIoKVxuICAgICAgfVxuICAgIH1cblxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiAoe1xuICAgICAgaW5wdXQ6IGlucHV0UmVmLmN1cnJlbnQsXG4gICAgICBoYW5kbGVWaXNpYmxlQ2hhbmdlLFxuICAgIH0pKVxuXG4gICAgY29uc3QgY2xhc3NTZXQgPSBjbGFzc05hbWVzKFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgYCR7cHJlZml4fS1pbnB1dGAsXG4gICAgICBgJHtwcmVmaXh9LSR7c2l6ZX1gLFxuICAgICAge1xuICAgICAgICBbYCR7cHJlZml4fS1zZWNvbmRzQXZhaWxhYmxlYF06IHNlY29uZHNBdmFpbGFibGUsXG4gICAgICB9XG4gICAgKVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxQb3BvdmVyXG4gICAgICAgIGFycm93ZWQ9e2ZhbHNlfVxuICAgICAgICBvblZpc2libGVDaGFuZ2U9e2hhbmRsZVZpc2libGVDaGFuZ2V9XG4gICAgICAgIHBvcHVwPXtcbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPFRpbWVTZWxlY3RcbiAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNsaWNrfVxuICAgICAgICAgICAgICBjdXJyZW50SG91cj17aG91ciA/IHBhcnNlSW50KGhvdXIsIDEwKSA6IG51bGx9XG4gICAgICAgICAgICAgIGRpc2FibGVkSG91cnM9e2Rpc2FibGVkSG91cnN9XG4gICAgICAgICAgICAgIG1heFRpbWU9e21heFRpbWV9XG4gICAgICAgICAgICAgIG1pblRpbWU9e21pblRpbWV9XG4gICAgICAgICAgICAgIG9ubHlIb3VyPXtvbmx5SG91cn1cbiAgICAgICAgICAgICAgc2VsZWN0ZWRWYWx1ZT17aG91cn1cbiAgICAgICAgICAgICAgc2l6ZT17c2l6ZX1cbiAgICAgICAgICAgICAgdHlwZT1cImhvdXJcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHshb25seUhvdXIgJiYgKFxuICAgICAgICAgICAgICA8VGltZVNlbGVjdFxuICAgICAgICAgICAgICAgIGRpc2FibGVkTWludXRlcz17ZGlzYWJsZWRNaW51dGVzfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDbGlja31cbiAgICAgICAgICAgICAgICBjdXJyZW50SG91cj17aG91ciA/IHBhcnNlSW50KGhvdXIsIDEwKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgbWF4VGltZT17bWF4VGltZX1cbiAgICAgICAgICAgICAgICBtaW5UaW1lPXttaW5UaW1lfVxuICAgICAgICAgICAgICAgIHNlbGVjdGVkVmFsdWU9e21pbnV0ZX1cbiAgICAgICAgICAgICAgICBzaXplPXtzaXplfVxuICAgICAgICAgICAgICAgIHR5cGU9XCJtaW51dGVcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHtzZWNvbmRzQXZhaWxhYmxlICYmIChcbiAgICAgICAgICAgICAgPFRpbWVTZWxlY3RcbiAgICAgICAgICAgICAgICBkaXNhYmxlZFNlY29uZHM9e2Rpc2FibGVkU2Vjb25kc31cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2xpY2t9XG4gICAgICAgICAgICAgICAgY3VycmVudEhvdXI9e2hvdXIgPyBwYXJzZUludChob3VyLCAxMCkgOiBudWxsfVxuICAgICAgICAgICAgICAgIGN1cnJlbnRNaW51dGU9e21pbnV0ZSA/IHBhcnNlSW50KG1pbnV0ZSwgMTApIDogbnVsbH1cbiAgICAgICAgICAgICAgICBtYXhUaW1lPXttYXhUaW1lfVxuICAgICAgICAgICAgICAgIG1pblRpbWU9e21pblRpbWV9XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRWYWx1ZT17c2Vjb25kfVxuICAgICAgICAgICAgICAgIHNpemU9e3NpemV9XG4gICAgICAgICAgICAgICAgdHlwZT1cInNlY29uZFwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIHRyaWdnZXI9XCJjbGlja1wiXG4gICAgICAgIHZpc2libGU9e3Zpc2libGV9XG4gICAgICAgIHsuLi5wb3BvdmVyUHJvcHN9XG4gICAgICA+XG4gICAgICAgIDxJbnB1dFxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NTZXR9XG4gICAgICAgICAgY2xlYXZlT3B0aW9ucz17e1xuICAgICAgICAgICAgYmxvY2tzOiBzZWNvbmRzQXZhaWxhYmxlID8gWzIsIDIsIDJdIDogWzIsIDJdLFxuICAgICAgICAgICAgZGVsaW1pdGVyOiBcIjpcIixcbiAgICAgICAgICB9fVxuICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgICByaWdodEVsZW1lbnQ9ezxJY29uIGljb249XCJ0aW1lLW91dGxpbmVkXCIgLz59XG4gICAgICAgICAgc2l6ZT17c2l6ZX1cbiAgICAgICAgICB2YWx1ZT17aW5wdXRWYWx1ZX1cbiAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlSW5wdXRDaGFuZ2V9XG4gICAgICAgICAgb25Gb2N1cz17aGFuZGxlSW5wdXRGb2N1c31cbiAgICAgICAgICBvbktleURvd249e2hhbmRsZUlucHV0S2V5RG93bn1cbiAgICAgICAgICByZWY9e2lucHV0UmVmfVxuICAgICAgICAgIHsuLi5vdGhlclByb3BzfVxuICAgICAgICAvPlxuICAgICAgPC9Qb3BvdmVyPlxuICAgIClcbiAgfVxuKVxuXG5UaW1lUGlja2VyLmRpc3BsYXlOYW1lID0gXCJUaW1lUGlja2VyXCJcblxuVGltZVBpY2tlci5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiDpmYTliqDnsbvlkI1cbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIOaYr+WQpuWcqOmAieaLqeWQju+8jOa2iOWksSBQb3BvdmVyXG4gICAqL1xuICBjbG9zZU9uU2VsZWN0OiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIOWGhemDqOmpseWKqO+8jOm7mOiupOmAieaLqeaXtumXtFxuICAgKi9cbiAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICog5piv5ZCm56aB55SoXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiDnpoHmraLpgInmi6nnmoTlsI/ml7ZcbiAgICovXG4gIGRpc2FibGVkSG91cnM6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICog56aB5q2i6YCJ5oup55qE5YiG6ZKfXG4gICAqL1xuICBkaXNhYmxlZE1pbnV0ZXM6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICog56aB5q2i6YCJ5oup55qE56eSXG4gICAqL1xuICBkaXNhYmxlZFNlY29uZHM6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICog6K6+572u6L6T5YWl5qGG57G75Z6LXG4gICAqL1xuICBpbnRlbnQ6IFByb3BUeXBlcy5vbmVPZihbXG4gICAgXCJub3JtYWxcIixcbiAgICBcInByaW1hcnlcIixcbiAgICBcInN1Y2Nlc3NcIixcbiAgICBcIndhcm5pbmdcIixcbiAgICBcImRhbmdlclwiLFxuICBdKSxcbiAgLyoqXG4gICAqIOWPr+mAieaXtumXtOeahOacgOWkp+WAvFxuICAgKi9cbiAgbWF4VGltZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIOWPr+mAieaXtumXtOeahOacgOWwj+WAvFxuICAgKi9cbiAgbWluVGltZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIOaXtumXtOaUueWPmOeahCBoYW5kbGVyXG4gICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiDliKTmlq3mmK/lkKbmmK/mlbTmlbBcbiAgICovXG4gIG9ubHlIb3VyOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIOWNoOS9jeWtl+esplxuICAgKi9cbiAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiDorr7nva7lsLrlr7hcbiAgICovXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZihbXCJtaW5pXCIsIFwic21hbGxcIiwgXCJtZWRpdW1cIiwgXCJsYXJnZVwiXSksXG4gIC8qKlxuICAgKiDlpJbpg6jmjqfliLbvvJrlvZPliY3ml7bpl7RcbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxufVxuXG5UaW1lUGlja2VyLmRlZmF1bHRQcm9wcyA9IHtcbiAgY2xhc3NOYW1lOiBcIlwiLFxuICBjbG9zZU9uU2VsZWN0OiBmYWxzZSxcbiAgZGVmYXVsdFZhbHVlOiBudWxsLFxuICBkaXNhYmxlZDogZmFsc2UsXG4gIGRpc2FibGVkSG91cnM6IG5vb3AsXG4gIGRpc2FibGVkTWludXRlczogbm9vcCxcbiAgZGlzYWJsZWRTZWNvbmRzOiBub29wLFxuICBpbnRlbnQ6IFwibm9ybWFsXCIsXG4gIG1heFRpbWU6IFwiMjQ6MDBcIixcbiAgbWluVGltZTogbnVsbCxcbiAgb25DaGFuZ2U6IG5vb3AsXG4gIG9ubHlIb3VyOiBmYWxzZSxcbiAgcGxhY2Vob2xkZXI6IFwi6K+36YCJ5oupXCIsXG4gIHNlY29uZHNBdmFpbGFibGU6IGZhbHNlLFxuICBzaXplOiBcInNtYWxsXCIsXG4gIHZhbHVlOiBudWxsLFxufVxuXG5leHBvcnQgZGVmYXVsdCBUaW1lUGlja2VyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPQSxLQUFLLElBQ1ZDLFVBQVUsRUFDVkMsVUFBVSxFQUNWQyxtQkFBbUIsRUFDbkJDLE1BQU0sRUFDTkMsUUFBUSxFQUNSQyxPQUFPLFFBQ0YsT0FBTztBQUNkLE9BQU9DLFNBQVMsTUFBTSxZQUFZO0FBQ2xDLE9BQU9DLFVBQVUsTUFBTSxZQUFZO0FBQ25DLFNBQVNDLGFBQWEsRUFBRUMsZUFBZSxRQUFRLG9CQUFvQjtBQUNuRSxPQUFPQyxJQUFJLE1BQU0sU0FBUztBQUMxQixPQUFPQyxLQUFLLE1BQU0s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