UNPKG

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>

371 lines (304 loc) 46.3 kB
"use strict"; function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _react = _interopRequireWildcard(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _classnames = _interopRequireDefault(require("classnames")); var _configProvider = require("../config-provider"); var _icon = _interopRequireDefault(require("../icon")); var _input = _interopRequireDefault(require("../input")); var _popover = _interopRequireDefault(require("../popover")); var _TimeSelect = _interopRequireDefault(require("./TimeSelect")); require("./style"); var _core = require("./core"); var _excluded = ["className", "closeOnSelect", "defaultValue", "disabled", "disabledHours", "disabledMinutes", "disabledSeconds", "maxTime", "minTime", "onChange", "onlyHour", "placeholder", "popoverProps", "secondsAvailable", "size", "value"]; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _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(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; } function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; } var prefix = "adui-time"; var noop = function noop() {}; var TimePicker = (0, _react.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 = (0, _core.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 = (0, _react.useMemo)(getInitialState, []); var _useState = (0, _react.useState)(initialState.inputValue), _useState2 = _slicedToArray(_useState, 2), inputValue = _useState2[0], setInputValue = _useState2[1]; var _useState3 = (0, _react.useState)(initialState.hour), _useState4 = _slicedToArray(_useState3, 2), hour = _useState4[0], setHour = _useState4[1]; var _useState5 = (0, _react.useState)(initialState.minute), _useState6 = _slicedToArray(_useState5, 2), minute = _useState6[0], setMinute = _useState6[1]; var _useState7 = (0, _react.useState)(initialState.second), _useState8 = _slicedToArray(_useState7, 2), second = _useState8[0], setSecond = _useState8[1]; var _useState9 = (0, _react.useState)(initialState.prevValueProp), _useState10 = _slicedToArray(_useState9, 2), prevValueProp = _useState10[0], setPrevValueProp = _useState10[1]; var _useState11 = (0, _react.useState)(initialState.visible), _useState12 = _slicedToArray(_useState11, 2), visible = _useState12[0], setVisible = _useState12[1]; if (value !== null && prevValueProp !== value) { var _extractHMSFromTime2 = (0, _core.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 = (0, _react.useRef)(null); var _useContext = (0, _react.useContext)(_configProvider.ConfigContext), sizeContext = _useContext.size; var size = (0, _configProvider.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 && (0, _core.isTimeAfter)(inputValueNow, maxTime)) { inputValueNow = secondsAvailable ? (0, _core.transformTimeWithSeconds)(maxTime) : maxTime; } else if (minTime && (0, _core.isTimeBefore)(inputValueNow, minTime)) { inputValueNow = secondsAvailable ? (0, _core.transformTimeWithSeconds)(minTime) : minTime; } if (valueProp === null) { var valueFinal = _objectSpread({ inputValueNow: inputValueNow }, (0, _core.extractHMSFromTime)(inputValueNow)); setHour(valueFinal.hour); setMinute(valueFinal.minute); setSecond(valueFinal.second); setInputValue(valueFinal.inputValueNow); } if ((0, _core.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 === "" || (0, _core.isLegalTimeString)({ time: inputValueNew, onlyHour: onlyHour }) && !(0, _core.isTimeAfter)(inputValueNew, maxTime) && !(0, _core.isTimeBefore)(inputValueNew, minTime)) { var _extractHMSFromTime3 = (0, _core.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(); } }; (0, _react.useImperativeHandle)(ref, function () { return { input: inputRef.current, handleVisibleChange: handleVisibleChange }; }); var classSet = (0, _classnames["default"])(className, "".concat(prefix, "-input"), "".concat(prefix, "-").concat(size), _defineProperty({}, "".concat(prefix, "-secondsAvailable"), secondsAvailable)); return _react["default"].createElement(_popover["default"], _extends({ arrowed: false, onVisibleChange: handleVisibleChange, popup: _react["default"].createElement("div", null, _react["default"].createElement(_TimeSelect["default"], { onChange: handleClick, currentHour: hour ? parseInt(hour, 10) : null, disabledHours: disabledHours, maxTime: maxTime, minTime: minTime, onlyHour: onlyHour, selectedValue: hour, size: size, type: "hour" }), !onlyHour && _react["default"].createElement(_TimeSelect["default"], { disabledMinutes: disabledMinutes, onChange: handleClick, currentHour: hour ? parseInt(hour, 10) : null, maxTime: maxTime, minTime: minTime, selectedValue: minute, size: size, type: "minute" }), secondsAvailable && _react["default"].createElement(_TimeSelect["default"], { 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["default"].createElement(_input["default"], _extends({ className: classSet, cleaveOptions: { blocks: secondsAvailable ? [2, 2, 2] : [2, 2], delimiter: ":" }, disabled: disabled, rightElement: _react["default"].createElement(_icon["default"], { icon: "time-outlined" }), size: size, value: inputValue, onChange: handleInputChange, onFocus: handleInputFocus, onKeyDown: handleInputKeyDown, ref: inputRef }, otherProps))); }); TimePicker.displayName = "TimePicker"; TimePicker.propTypes = { className: _propTypes["default"].string, closeOnSelect: _propTypes["default"].bool, defaultValue: _propTypes["default"].string, disabled: _propTypes["default"].bool, disabledHours: _propTypes["default"].func, disabledMinutes: _propTypes["default"].func, disabledSeconds: _propTypes["default"].func, intent: _propTypes["default"].oneOf(["normal", "primary", "success", "warning", "danger"]), maxTime: _propTypes["default"].string, minTime: _propTypes["default"].string, onChange: _propTypes["default"].func, onlyHour: _propTypes["default"].bool, placeholder: _propTypes["default"].string, size: _propTypes["default"].oneOf(["mini", "small", "medium", "large"]), value: _propTypes["default"].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 }; var _default = TimePicker; exports["default"] = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwcmVmaXgiLCJub29wIiwiVGltZVBpY2tlciIsImZvcndhcmRSZWYiLCJyZWYiLCJjbGFzc05hbWUiLCJjbG9zZU9uU2VsZWN0IiwiZGVmYXVsdFZhbHVlIiwiZGlzYWJsZWQiLCJkaXNhYmxlZEhvdXJzIiwiZGlzYWJsZWRNaW51dGVzIiwiZGlzYWJsZWRTZWNvbmRzIiwibWF4VGltZSIsIm1pblRpbWUiLCJvbkNoYW5nZSIsIm9ubHlIb3VyIiwicGxhY2Vob2xkZXIiLCJwb3BvdmVyUHJvcHMiLCJzZWNvbmRzQXZhaWxhYmxlIiwic2l6ZVByb3AiLCJzaXplIiwidmFsdWUiLCJvdGhlclByb3BzIiwiZ2V0SW5pdGlhbFN0YXRlIiwidmFsdWVTdGF0ZSIsImV4dHJhY3RITVNGcm9tVGltZSIsImhvdXIiLCJtaW51dGUiLCJzZWNvbmQiLCJpbnB1dFZhbHVlIiwicHJldlZhbHVlUHJvcCIsInZpc2libGUiLCJpbml0aWFsU3RhdGUiLCJ1c2VNZW1vIiwidXNlU3RhdGUiLCJzZXRJbnB1dFZhbHVlIiwic2V0SG91ciIsInNldE1pbnV0ZSIsInNldFNlY29uZCIsInNldFByZXZWYWx1ZVByb3AiLCJzZXRWaXNpYmxlIiwibmV3SG91ciIsIm5ld01pbnV0ZSIsIm5ld1NlY29uZCIsImlucHV0UmVmIiwidXNlUmVmIiwidXNlQ29udGV4dCIsIkNvbmZpZ0NvbnRleHQiLCJzaXplQ29udGV4dCIsImdldENvbXB1dGVkU2l6ZSIsImhhbmRsZUNsaWNrIiwidmFsdWVOZXciLCJ0eXBlIiwidmFsdWVQcm9wIiwiaW5wdXRWYWx1ZU5vdyIsImlzVGltZUFmdGVyIiwidHJhbnNmb3JtVGltZVdpdGhTZWNvbmRzIiwiaXNUaW1lQmVmb3JlIiwidmFsdWVGaW5hbCIsImlzTGVnYWxUaW1lU3RyaW5nIiwidGltZSIsInNldFRpbWVvdXQiLCJoYW5kbGVWaXNpYmxlQ2hhbmdlIiwidmlzaWJsZU5ldyIsImlucHV0RWxlbWVudCIsImN1cnJlbnQiLCJpbnB1dCIsImRvY3VtZW50IiwiYWN0aXZlRWxlbWVudCIsIndpdGhTZWNvbmRzIiwibm9TZWNvbmRzIiwibmV3SW5wdXRWYWx1ZSIsImhhbmRsZUlucHV0Q2hhbmdlIiwiaW5wdXRWYWx1ZU5ldyIsInRhcmdldCIsImhvdXJOZXciLCJtaW51dGVOZXciLCJzZWNvbmROZXciLCJoYW5kbGVJbnB1dEZvY3VzIiwiaGFuZGxlSW5wdXRLZXlEb3duIiwia2V5Iiwia2V5cyIsImluY2x1ZGVzIiwiYmx1ciIsInVzZUltcGVyYXRpdmVIYW5kbGUiLCJjbGFzc1NldCIsImNsYXNzTmFtZXMiLCJwYXJzZUludCIsImJsb2NrcyIsImRlbGltaXRlciIsImRpc3BsYXlOYW1lIiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwic3RyaW5nIiwiYm9vbCIsImZ1bmMiLCJpbnRlbnQiLCJvbmVPZiIsImRlZmF1bHRQcm9wcyJdLCJzb3VyY2VzIjpbIi4uLy4uL2NvbXBvbmVudHMvdGltZS1waWNrZXIvVGltZVBpY2tlci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7XG4gIGZvcndhcmRSZWYsXG4gIHVzZUNvbnRleHQsXG4gIHVzZUltcGVyYXRpdmVIYW5kbGUsXG4gIHVzZVJlZixcbiAgdXNlU3RhdGUsXG4gIHVzZU1lbW8sXG59IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gXCJjbGFzc25hbWVzXCJcbmltcG9ydCB7IENvbmZpZ0NvbnRleHQsIGdldENvbXB1dGVkU2l6ZSB9IGZyb20gXCIuLi9jb25maWctcHJvdmlkZXJcIlxuaW1wb3J0IEljb24gZnJvbSBcIi4uL2ljb25cIlxuaW1wb3J0IElucHV0IGZyb20gXCIuLi9pbnB1dFwiXG5pbXBvcnQgUG9wb3ZlciwgeyBJUG9wb3ZlclByb3BzIH0gZnJvbSBcIi4uL3BvcG92ZXJcIlxuaW1wb3J0IFRpbWVTZWxlY3QgZnJvbSBcIi4vVGltZVNlbGVjdFwiXG5pbXBvcnQgXCIuL3N0eWxlXCJcbmltcG9ydCB7XG4gIHRyYW5zZm9ybVRpbWVXaXRoU2Vjb25kcyxcbiAgZXh0cmFjdEhNU0Zyb21UaW1lLFxuICBpc0xlZ2FsVGltZVN0cmluZyxcbiAgaXNUaW1lQWZ0ZXIsXG4gIGlzVGltZUJlZm9yZSxcbn0gZnJvbSBcIi4vY29yZVwiXG5cbmNvbnN0IHByZWZpeCA9IFwiYWR1aS10aW1lXCJcbmNvbnN0IG5vb3AgPSAoKSA9PiB7fVxuXG5leHBvcnQgaW50ZXJmYWNlIElUaW1lUGlja2VyUHJvcHMge1xuICBba2V5OiBzdHJpbmddOiBhbnlcbiAgLyoqXG4gICAqIOmZhOWKoOexu+WQjVxuICAgKi9cbiAgY2xhc3NOYW1lPzogc3RyaW5nXG4gIC8qKlxuICAgKiDmmK/lkKblnKjpgInmi6nlkI7vvIzmtojlpLEgUG9wb3ZlclxuICAgKi9cbiAgY2xvc2VPblNlbGVjdD86IGJvb2xlYW5cbiAgLyoqXG4gICAqIOWGhemDqOmpseWKqO+8jOm7mOiupOmAieaLqeaXtumXtFxuICAgKi9cbiAgZGVmYXVsdFZhbHVlPzogbnVsbCB8IHN0cmluZ1xuICAvKipcbiAgICog5piv5ZCm56aB55SoXG4gICAqL1xuICBkaXNhYmxlZD86IGJvb2xlYW5cbiAgLyoqXG4gICAqIOemgeatoumAieaLqeeahOWwj+aXtlxuICAgKi9cbiAgZGlzYWJsZWRIb3Vycz86IChob3VyPzogc3RyaW5nIHwgbnVsbCkgPT4gYm9vbGVhbiB8IHZvaWRcbiAgLyoqXG4gICAqIOemgeatoumAieaLqeeahOWIhumSn1xuICAgKi9cbiAgZGlzYWJsZWRNaW51dGVzPzogKG1pbnV0ZT86IHN0cmluZyB8IG51bGwpID0+IGJvb2xlYW4gfCB2b2lkXG4gIC8qKlxuICAgKiDnpoHmraLpgInmi6nnmoTnp5JcbiAgICovXG4gIGRpc2FibGVkU2Vjb25kcz86IChzZWNvbmQ/OiBzdHJpbmcgfCBudWxsKSA9PiBib29sZWFuIHwgdm9pZFxuICAvKipcbiAgICog6K6+572u6L6T5YWl5qGG57G75Z6LXG4gICAqL1xuICBpbnRlbnQ/OiBcIm5vcm1hbFwiIHwgXCJwcmltYXJ5XCIgfCBcInN1Y2Nlc3NcIiB8IFwid2FybmluZ1wiIHwgXCJkYW5nZXJcIlxuICAvKipcbiAgICog5Y+v6YCJ5pe26Ze055qE5pyA5aSn5YC8XG4gICAqL1xuICBtYXhUaW1lPzogc3RyaW5nIHwgbnVsbFxuICAvKipcbiAgICog5Y+v6YCJ5pe26Ze055qE5pyA5bCP5YC8XG4gICAqL1xuICBtaW5UaW1lPzogc3RyaW5nIHwgbnVsbFxuICAvKipcbiAgICog5pe26Ze05pS55Y+Y55qEIGhhbmRsZXJcbiAgICovXG4gIG9uQ2hhbmdlPzogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWRcbiAgLyoqXG4gICAqIOWIpOaWreaYr+WQpuaYr+aVtOaVsFxuICAgKi9cbiAgb25seUhvdXI/OiBib29sZWFuXG4gIC8qKlxuICAgKiDljaDkvY3lrZfnrKZcbiAgICovXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nXG4gIC8qKlxuICAgKiDkvKDlhaUgUG9wb3ZlciDnmoQgcHJvcHNcbiAgICovXG4gIHBvcG92ZXJQcm9wcz86IElQb3BvdmVyUHJvcHNcbiAgLyoqXG4gICAqIDIwMjIxMjE2OiDmlK/mjIHnp5LnmoTpgInmi6lcbiAgICovXG4gIHNlY29uZHNBdmFpbGFibGU/OiBib29sZWFuXG4gIC8qKlxuICAgKiDorr7nva7lsLrlr7hcbiAgICovXG4gIHNpemU/OiBcIm1pbmlcIiB8IFwic21hbGxcIiB8IFwibWVkaXVtXCIgfCBcImxhcmdlXCJcbiAgLyoqXG4gICAqIOWklumDqOaOp+WItu+8muW9k+WJjeaXtumXtFxuICAgKi9cbiAgdmFsdWU/OiBudWxsIHwgc3RyaW5nXG59XG5cbi8qKlxuICog5pe26Ze06YCJ5oup5Zmo55So5LqO5LqG6Kej5b2T5YmN5bey6YCJ5pe26Ze077yM6YCJ5oup5oiW6L6T5YWl6ZyA6KaB55qE5pe26Ze044CB5pe26Ze06IyD5Zu0562J44CCXG4gKi9cbmNvbnN0IFRpbWVQaWNrZXI6IFJlYWN0LkZvcndhcmRSZWZFeG90aWNDb21wb25lbnQ8XG4gIElUaW1lUGlja2VyUHJvcHMgJiBSZWFjdC5SZWZBdHRyaWJ1dGVzPGFueT5cbj4gPSBmb3J3YXJkUmVmKFxuICAoXG4gICAge1xuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY2xvc2VPblNlbGVjdCxcbiAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgIGRpc2FibGVkLFxuICAgICAgZGlzYWJsZWRIb3VycyxcbiAgICAgIGRpc2FibGVkTWludXRlcyxcbiAgICAgIGRpc2FibGVkU2Vjb25kcyxcbiAgICAgIG1heFRpbWUsXG4gICAgICBtaW5UaW1lLFxuICAgICAgb25DaGFuZ2UsXG4gICAgICBvbmx5SG91cixcbiAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgcG9wb3ZlclByb3BzLFxuICAgICAgc2Vjb25kc0F2YWlsYWJsZSA9IGZhbHNlLFxuICAgICAgc2l6ZTogc2l6ZVByb3AsXG4gICAgICB2YWx1ZSxcbiAgICAgIC4uLm90aGVyUHJvcHNcbiAgICB9OiBJVGltZVBpY2tlclByb3BzLFxuICAgIHJlZlxuICApID0+IHtcbiAgICBjb25zdCBnZXRJbml0aWFsU3RhdGUgPSAoKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZVN0YXRlID0gdmFsdWUgIT09IG51bGwgPyB2YWx1ZSA6IGRlZmF1bHRWYWx1ZVxuICAgICAgY29uc3QgeyBob3VyLCBtaW51dGUsIHNlY29uZCB9ID0gZXh0cmFjdEhNU0Zyb21UaW1lKHZhbHVlU3RhdGUpXG4gICAgICByZXR1cm4ge1xuICAgICAgICBob3VyLFxuICAgICAgICBpbnB1dFZhbHVlOiB2YWx1ZVN0YXRlIHx8IFwiXCIsXG4gICAgICAgIG1pbnV0ZTogb25seUhvdXIgPyBcIjAwXCIgOiBtaW51dGUsXG4gICAgICAgIHNlY29uZDogc2Vjb25kc0F2YWlsYWJsZSA/IHNlY29uZCA6IFwiMDBcIixcbiAgICAgICAgcHJldlZhbHVlUHJvcDogdmFsdWVTdGF0ZSB8fCBcIlwiLFxuICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgaW5pdGlhbFN0YXRlID0gdXNlTWVtbyhnZXRJbml0aWFsU3RhdGUsIFtdKVxuICAgIGNvbnN0IFtpbnB1dFZhbHVlLCBzZXRJbnB1dFZhbHVlXSA9IHVzZVN0YXRlKGluaXRpYWxTdGF0ZS5pbnB1dFZhbHVlKVxuICAgIGNvbnN0IFtob3VyLCBzZXRIb3VyXSA9IHVzZVN0YXRlKGluaXRpYWxTdGF0ZS5ob3VyKVxuICAgIGNvbnN0IFttaW51dGUsIHNldE1pbnV0ZV0gPSB1c2VTdGF0ZShpbml0aWFsU3RhdGUubWludXRlKVxuICAgIGNvbnN0IFtzZWNvbmQsIHNldFNlY29uZF0gPSB1c2VTdGF0ZShpbml0aWFsU3RhdGUuc2Vjb25kKVxuICAgIGNvbnN0IFtwcmV2VmFsdWVQcm9wLCBzZXRQcmV2VmFsdWVQcm9wXSA9IHVzZVN0YXRlKFxuICAgICAgaW5pdGlhbFN0YXRlLnByZXZWYWx1ZVByb3BcbiAgICApXG4gICAgY29uc3QgW3Zpc2libGUsIHNldFZpc2libGVdID0gdXNlU3RhdGUoaW5pdGlhbFN0YXRlLnZpc2libGUpXG5cbiAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgcHJldlZhbHVlUHJvcCAhPT0gdmFsdWUpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgaG91cjogbmV3SG91cixcbiAgICAgICAgbWludXRlOiBuZXdNaW51dGUsXG4gICAgICAgIHNlY29uZDogbmV3U2Vjb25kLFxuICAgICAgfSA9IGV4dHJhY3RITVNGcm9tVGltZSh2YWx1ZSlcblxuICAgICAgc2V0SW5wdXRWYWx1ZSh2YWx1ZSB8fCBcIlwiKVxuICAgICAgc2V0SG91cihuZXdIb3VyKVxuICAgICAgc2V0TWludXRlKG9ubHlIb3VyID8gXCIwMFwiIDogbmV3TWludXRlKVxuICAgICAgc2V0U2Vjb25kKHNlY29uZHNBdmFpbGFibGUgPyBuZXdTZWNvbmQgOiBcIjAwXCIpXG4gICAgICBzZXRQcmV2VmFsdWVQcm9wKHZhbHVlIHx8IFwiXCIpXG4gICAgfVxuXG4gICAgY29uc3QgaW5wdXRSZWYgPSB1c2VSZWY8YW55PihudWxsKVxuXG4gICAgY29uc3QgeyBzaXplOiBzaXplQ29udGV4dCB9ID0gdXNlQ29udGV4dChDb25maWdDb250ZXh0KVxuXG4gICAgY29uc3Qgc2l6ZSA9IGdldENvbXB1dGVkU2l6ZShzaXplUHJvcCwgc2l6ZUNvbnRleHQpXG5cbiAgICBjb25zdCBoYW5kbGVDbGljayA9ICh2YWx1ZU5ldzogc3RyaW5nLCB0eXBlOiBcImhvdXJcIiB8IFwibWludXRlXCIpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlUHJvcCA9IHZhbHVlXG5cbiAgICAgIGxldCBpbnB1dFZhbHVlTm93ID0gXCJcIlxuICAgICAgaWYgKHNlY29uZHNBdmFpbGFibGUpIHtcbiAgICAgICAgaWYgKHR5cGUgPT09IFwiaG91clwiKSB7XG4gICAgICAgICAgaW5wdXRWYWx1ZU5vdyA9IGAke3ZhbHVlTmV3fToke21pbnV0ZSB8fCBcIlwifToke3NlY29uZCB8fCBcIlwifWBcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBcIm1pbnV0ZVwiKSB7XG4gICAgICAgICAgaW5wdXRWYWx1ZU5vdyA9IGAke2hvdXIgfHwgXCJcIn06JHt2YWx1ZU5ld306JHtzZWNvbmQgfHwgXCJcIn1gXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW5wdXRWYWx1ZU5vdyA9IGAke2hvdXIgfHwgXCJcIn06JHttaW51dGUgfHwgXCJcIn06JHt2YWx1ZU5ld31gXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlucHV0VmFsdWVOb3cgPVxuICAgICAgICAgIHR5cGUgPT09IFwiaG91clwiXG4gICAgICAgICAgICA/IGAke3ZhbHVlTmV3fToke21pbnV0ZSB8fCBcIlwifWBcbiAgICAgICAgICAgIDogYCR7aG91ciB8fCBcIlwifToke3ZhbHVlTmV3fWBcbiAgICAgIH1cblxuICAgICAgaWYgKG1heFRpbWUgJiYgaXNUaW1lQWZ0ZXIoaW5wdXRWYWx1ZU5vdywgbWF4VGltZSkpIHtcbiAgICAgICAgaW5wdXRWYWx1ZU5vdyA9IHNlY29uZHNBdmFpbGFibGVcbiAgICAgICAgICA/IHRyYW5zZm9ybVRpbWVXaXRoU2Vjb25kcyhtYXhUaW1lKVxuICAgICAgICAgIDogbWF4VGltZVxuICAgICAgfSBlbHNlIGlmIChtaW5UaW1lICYmIGlzVGltZUJlZm9yZShpbnB1dFZhbHVlTm93LCBtaW5UaW1lKSkge1xuICAgICAgICBpbnB1dFZhbHVlTm93ID0gc2Vjb25kc0F2YWlsYWJsZVxuICAgICAgICAgID8gdHJhbnNmb3JtVGltZVdpdGhTZWNvbmRzKG1pblRpbWUpXG4gICAgICAgICAgOiBtaW5UaW1lXG4gICAgICB9XG5cbiAgICAgIGlmICh2YWx1ZVByb3AgPT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgdmFsdWVGaW5hbCA9IHtcbiAgICAgICAgICBpbnB1dFZhbHVlTm93LFxuICAgICAgICAgIC4uLmV4dHJhY3RITVNGcm9tVGltZShpbnB1dFZhbHVlTm93KSxcbiAgICAgICAgfVxuICAgICAgICBzZXRIb3VyKHZhbHVlRmluYWwuaG91cilcbiAgICAgICAgc2V0TWludXRlKHZhbHVlRmluYWwubWludXRlKVxuICAgICAgICBzZXRTZWNvbmQodmFsdWVGaW5hbC5zZWNvbmQpXG4gICAgICAgIHNldElucHV0VmFsdWUodmFsdWVGaW5hbC5pbnB1dFZhbHVlTm93KVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNMZWdhbFRpbWVTdHJpbmcoeyB0aW1lOiBpbnB1dFZhbHVlLCBvbmx5SG91ciB9KSkge1xuICAgICAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgICAgICBvbkNoYW5nZShpbnB1dFZhbHVlTm93KVxuICAgICAgICB9XG4gICAgICAgIGlmIChjbG9zZU9uU2VsZWN0KSB7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBzZXRWaXNpYmxlKGZhbHNlKVxuICAgICAgICAgIH0sIDEyMClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZVZpc2libGVDaGFuZ2UgPSAodmlzaWJsZU5ldzogYm9vbGVhbikgPT4ge1xuICAgICAgY29uc3QgeyBpbnB1dDogaW5wdXRFbGVtZW50IH0gPSBpbnB1dFJlZi5jdXJyZW50XG4gICAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc3QgeyBhY3RpdmVFbGVtZW50IH0gPSBkb2N1bWVudFxuICAgICAgICBpZiAodmlzaWJsZU5ldyB8fCAoIXZpc2libGVOZXcgJiYgaW5wdXRFbGVtZW50ICE9PSBhY3RpdmVFbGVtZW50KSkge1xuICAgICAgICAgIGNvbnN0IHdpdGhTZWNvbmRzID1cbiAgICAgICAgICAgIGhvdXIgJiYgbWludXRlICYmIHNlY29uZCA/IGAke2hvdXJ9OiR7bWludXRlfToke3NlY29uZH1gIDogXCJcIlxuICAgICAgICAgIGNvbnN0IG5vU2Vjb25kcyA9IGhvdXIgJiYgbWludXRlID8gYCR7aG91cn06JHttaW51dGV9YCA6IFwiXCJcbiAgICAgICAgICBjb25zdCBuZXdJbnB1dFZhbHVlID0gc2Vjb25kc0F2YWlsYWJsZSA/IHdpdGhTZWNvbmRzIDogbm9TZWNvbmRzXG4gICAgICAgICAgaWYgKCF2aXNpYmxlTmV3ICYmIGlucHV0VmFsdWUgIT09IG5ld0lucHV0VmFsdWUpIHtcbiAgICAgICAgICAgIHNldElucHV0VmFsdWUobmV3SW5wdXRWYWx1ZSlcbiAgICAgICAgICB9XG4gICAgICAgICAgc2V0VmlzaWJsZSh2aXNpYmxlTmV3KVxuICAgICAgICB9XG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZUlucHV0Q2hhbmdlID0gKHtcbiAgICAgIHRhcmdldDogeyB2YWx1ZTogaW5wdXRWYWx1ZU5ldyB9LFxuICAgIH06IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgICBzZXRJbnB1dFZhbHVlKGlucHV0VmFsdWVOZXcpXG4gICAgICBpZiAoXG4gICAgICAgIGlucHV0VmFsdWVOZXcgPT09IFwiXCIgfHxcbiAgICAgICAgKGlzTGVnYWxUaW1lU3RyaW5nKHtcbiAgICAgICAgICB0aW1lOiBpbnB1dFZhbHVlTmV3LFxuICAgICAgICAgIG9ubHlIb3VyLFxuICAgICAgICB9KSAmJlxuICAgICAgICAgICFpc1RpbWVBZnRlcihpbnB1dFZhbHVlTmV3LCBtYXhUaW1lKSAmJlxuICAgICAgICAgICFpc1RpbWVCZWZvcmUoaW5wdXRWYWx1ZU5ldywgbWluVGltZSkpXG4gICAgICApIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIGhvdXI6IGhvdXJOZXcsXG4gICAgICAgICAgbWludXRlOiBtaW51dGVOZXcsXG4gICAgICAgICAgc2Vjb25kOiBzZWNvbmROZXcsXG4gICAgICAgIH0gPSBleHRyYWN0SE1TRnJvbVRpbWUoaW5wdXRWYWx1ZU5ldylcbiAgICAgICAgaWYgKFxuICAgICAgICAgICEoZGlzYWJsZWRIb3VycyAmJiBkaXNhYmxlZEhvdXJzKGhvdXJOZXcpKSAmJlxuICAgICAgICAgICEoZGlzYWJsZWRNaW51dGVzICYmIGRpc2FibGVkTWludXRlcyhtaW51dGVOZXcpKSAmJlxuICAgICAgICAgICEoZGlzYWJsZWRTZWNvbmRzICYmIGRpc2FibGVkU2Vjb25kcyhzZWNvbmROZXcpKVxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgICAgICAgIG9uQ2hhbmdlKGlucHV0VmFsdWVOZXcpXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgc2V0SG91cihob3VyTmV3KVxuICAgICAgICAgICAgc2V0TWludXRlKG9ubHlIb3VyID8gXCIwMFwiIDogbWludXRlTmV3KVxuICAgICAgICAgICAgc2V0U2Vjb25kKHNlY29uZHNBdmFpbGFibGUgPyBzZWNvbmROZXcgOiBcIjAwXCIpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlSW5wdXRGb2N1cyA9ICgpID0+IHtcbiAgICAgIGlmICghdmlzaWJsZSkge1xuICAgICAgICBzZXRWaXNpYmxlKHRydWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlSW5wdXRLZXlEb3duID0gKHtcbiAgICAgIGtleSxcbiAgICB9OiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgICBjb25zdCBrZXlzID0gW1wiVGFiXCIsIFwiRXNjYXBlXCIsIFwiRW50ZXJcIl1cbiAgICAgIGlmIChrZXlzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgc2V0VmlzaWJsZShmYWxzZSlcbiAgICAgICAgaW5wdXRSZWYuY3VycmVudC5pbnB1dC5ibHVyKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgKCkgPT4gKHtcbiAgICAgIGlucHV0OiBpbnB1dFJlZi5jdXJyZW50LFxuICAgICAgaGFuZGxlVmlzaWJsZUNoYW5nZSxcbiAgICB9KSlcblxuICAgIGNvbnN0IGNsYXNzU2V0ID0gY2xhc3NOYW1lcyhcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGAke3ByZWZpeH0taW5wdXRgLFxuICAgICAgYCR7cHJlZml4fS0ke3NpemV9YCxcbiAgICAgIHtcbiAgICAgICAgW2Ake3ByZWZpeH0tc2Vjb25kc0F2YWlsYWJsZWBdOiBzZWNvbmRzQXZhaWxhYmxlLFxuICAgICAgfVxuICAgIClcblxuICAgIHJldHVybiAoXG4gICAgICA8UG9wb3ZlclxuICAgICAgICBhcnJvd2VkPXtmYWxzZX1cbiAgICAgICAgb25WaXNpYmxlQ2hhbmdlPXtoYW5kbGVWaXNpYmxlQ2hhbmdlfVxuICAgICAgICBwb3B1cD17XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxUaW1lU2VsZWN0XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDbGlja31cbiAgICAgICAgICAgICAgY3VycmVudEhvdXI9e2hvdXIgPyBwYXJzZUludChob3VyLCAxMCkgOiBudWxsfVxuICAgICAgICAgICAgICBkaXNhYmxlZEhvdXJzPXtkaXNhYmxlZEhvdXJzfVxuICAgICAgICAgICAgICBtYXhUaW1lPXttYXhUaW1lfVxuICAgICAgICAgICAgICBtaW5UaW1lPXttaW5UaW1lfVxuICAgICAgICAgICAgICBvbmx5SG91cj17b25seUhvdXJ9XG4gICAgICAgICAgICAgIHNlbGVjdGVkVmFsdWU9e2hvdXJ9XG4gICAgICAgICAgICAgIHNpemU9e3NpemV9XG4gICAgICAgICAgICAgIHR5cGU9XCJob3VyXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB7IW9ubHlIb3VyICYmIChcbiAgICAgICAgICAgICAgPFRpbWVTZWxlY3RcbiAgICAgICAgICAgICAgICBkaXNhYmxlZE1pbnV0ZXM9e2Rpc2FibGVkTWludXRlc31cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2xpY2t9XG4gICAgICAgICAgICAgICAgY3VycmVudEhvdXI9e2hvdXIgPyBwYXJzZUludChob3VyLCAxMCkgOiBudWxsfVxuICAgICAgICAgICAgICAgIG1heFRpbWU9e21heFRpbWV9XG4gICAgICAgICAgICAgICAgbWluVGltZT17bWluVGltZX1cbiAgICAgICAgICAgICAgICBzZWxlY3RlZFZhbHVlPXttaW51dGV9XG4gICAgICAgICAgICAgICAgc2l6ZT17c2l6ZX1cbiAgICAgICAgICAgICAgICB0eXBlPVwibWludXRlXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7c2Vjb25kc0F2YWlsYWJsZSAmJiAoXG4gICAgICAgICAgICAgIDxUaW1lU2VsZWN0XG4gICAgICAgICAgICAgICAgZGlzYWJsZWRTZWNvbmRzPXtkaXNhYmxlZFNlY29uZHN9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNsaWNrfVxuICAgICAgICAgICAgICAgIGN1cnJlbnRIb3VyPXtob3VyID8gcGFyc2VJbnQoaG91ciwgMTApIDogbnVsbH1cbiAgICAgICAgICAgICAgICBjdXJyZW50TWludXRlPXttaW51dGUgPyBwYXJzZUludChtaW51dGUsIDEwKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgbWF4VGltZT17bWF4VGltZX1cbiAgICAgICAgICAgICAgICBtaW5UaW1lPXttaW5UaW1lfVxuICAgICAgICAgICAgICAgIHNlbGVjdGVkVmFsdWU9e3NlY29uZH1cbiAgICAgICAgICAgICAgICBzaXplPXtzaXplfVxuICAgICAgICAgICAgICAgIHR5cGU9XCJzZWNvbmRcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICB0cmlnZ2VyPVwiY2xpY2tcIlxuICAgICAgICB2aXNpYmxlPXt2aXNpYmxlfVxuICAgICAgICB7Li4ucG9wb3ZlclByb3BzfVxuICAgICAgPlxuICAgICAgICA8SW5wdXRcbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzU2V0fVxuICAgICAgICAgIGNsZWF2ZU9wdGlvbnM9e3tcbiAgICAgICAgICAgIGJsb2Nrczogc2Vjb25kc0F2YWlsYWJsZSA/IFsyLCAyLCAyXSA6IFsyLCAyXSxcbiAgICAgICAgICAgIGRlbGltaXRlcjogXCI6XCIsXG4gICAgICAgICAgfX1cbiAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgcmlnaHRFbGVtZW50PXs8SWNvbiBpY29uPVwidGltZS1vdXRsaW5lZFwiIC8+fVxuICAgICAgICAgIHNpemU9e3NpemV9XG4gICAgICAgICAgdmFsdWU9e2lucHV0VmFsdWV9XG4gICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUlucHV0Q2hhbmdlfVxuICAgICAgICAgIG9uRm9jdXM9e2hhbmRsZUlucHV0Rm9jdXN9XG4gICAgICAgICAgb25LZXlEb3duPXtoYW5kbGVJbnB1dEtleURvd259XG4gICAgICAgICAgcmVmPXtpbnB1dFJlZn1cbiAgICAgICAgICB7Li4ub3RoZXJQcm9wc31cbiAgICAgICAgLz5cbiAgICAgIDwvUG9wb3Zlcj5cbiAgICApXG4gIH1cbilcblxuVGltZVBpY2tlci5kaXNwbGF5TmFtZSA9IFwiVGltZVBpY2tlclwiXG5cblRpbWVQaWNrZXIucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICog6ZmE5Yqg57G75ZCNXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiDmmK/lkKblnKjpgInmi6nlkI7vvIzmtojlpLEgUG9wb3ZlclxuICAgKi9cbiAgY2xvc2VPblNlbGVjdDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiDlhoXpg6jpqbHliqjvvIzpu5jorqTpgInmi6nml7bpl7RcbiAgICovXG4gIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIOaYr+WQpuemgeeUqFxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICog56aB5q2i6YCJ5oup55qE5bCP5pe2XG4gICAqL1xuICBkaXNhYmxlZEhvdXJzOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIOemgeatoumAieaLqeeahOWIhumSn1xuICAgKi9cbiAgZGlzYWJsZWRNaW51dGVzOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIOemgeatoumAieaLqeeahOenklxuICAgKi9cbiAgZGlzYWJsZWRTZWNvbmRzOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIOiuvue9rui+k+WFpeahhuexu+Wei1xuICAgKi9cbiAgaW50ZW50OiBQcm9wVHlwZXMub25lT2YoW1xuICAgIFwibm9ybWFsXCIsXG4gICAgXCJwcmltYXJ5XCIsXG4gICAgXCJzdWNjZXNzXCIsXG4gICAgXCJ3YXJuaW5nXCIsXG4gICAgXCJkYW5nZXJcIixcbiAgXSksXG4gIC8qKlxuICAgKiDlj6/pgInml7bpl7TnmoTmnIDlpKflgLxcbiAgICovXG4gIG1heFRpbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiDlj6/pgInml7bpl7TnmoTmnIDlsI/lgLxcbiAgICovXG4gIG1pblRpbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiDml7bpl7TmlLnlj5jnmoQgaGFuZGxlclxuICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICog5Yik5pat5piv5ZCm5piv5pW05pWwXG4gICAqL1xuICBvbmx5SG91cjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiDljaDkvY3lrZfnrKZcbiAgICovXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICog6K6+572u5bC65a+4XG4gICAqL1xuICBzaXplOiBQcm9wVHlwZXMub25lT2YoW1wibWluaVwiLCBcInNtYWxsXCIsIFwibWVkaXVtXCIsIFwibGFyZ2VcIl0pLFxuICAvKipcbiAgICog5aSW6YOo5o6n5Yi277ya5b2T5YmN5pe26Ze0XG4gICAqL1xuICB2YWx1ZTogUHJvcFR5cGVzLnN0cmluZyxcbn1cblxuVGltZVBpY2tlci5kZWZhdWx0UHJvcHMgPSB7XG4gIGNsYXNzTmFtZTogXCJcIixcbiAgY2xvc2VPblNlbGVjdDogZmFsc2UsXG4gIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgZGlzYWJsZWQ6IGZhbHNlLFxuICBkaXNhYmxlZEhvdXJzOiBub29wLFxuICBkaXNhYmxlZE1pbnV0ZXM6IG5vb3AsXG4gIGRpc2FibGVkU2Vjb25kczogbm9vcCxcbiAgaW50ZW50OiBcIm5vcm1hbFwiLFxuICBtYXhUaW1lOiBcIjI0OjAwXCIsXG4gIG1pblRpbWU6IG51bGwsXG4gIG9uQ2hhbmdlOiBub29wLFxuICBvbmx5SG91cjogZmFsc2UsXG4gIHBsYWNlaG9sZGVyOiBcIuivt+mAieaLqVwiLFxuICBzZWNvbmRzQXZhaWxhYmxlOiBmYWxzZSxcbiAgc2l6ZTogXCJzbWFsbFwiLFxuICB2YWx1ZTogbnVsbCxcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGlt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